<?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>144038</bug_id>
          
          <creation_ts>2015-04-22 01:00:22 -0700</creation_ts>
          <short_desc>Add a script to run Speedometer and JetStream on a browser</short_desc>
          <delta_ts>2015-04-25 01:14:21 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>dewei_zhu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>glenn</cc>
    
    <cc>rniwa</cc>
    
    <cc>slewis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1087337</commentid>
    <comment_count>0</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2015-04-22 01:00:22 -0700</bug_when>
    <thetext>Add PerfAutoRun to automate browser based performance benchmarks(e.g. Speedometer and JetStream)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087339</commentid>
    <comment_count>1</comment_count>
      <attachid>251306</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2015-04-22 01:08:19 -0700</bug_when>
    <thetext>Created attachment 251306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087340</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-22 01:10:21 -0700</bug_when>
    <thetext>Attachment 251306 did not pass style-queue:


ERROR: Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/HTTPServer/TwistedHTTPServer.py:4:  No name &apos;EncodingResourceWrapper&apos; in module &apos;twisted.web.resource&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/PerfAutoRun/Utilities/BenchmarkRunner.py:9:  No name &apos;HTTPHandleFactory&apos; in module &apos;HTTPHandle&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/PerfAutoRun/Utilities/PlatformHandle/OSXSafariHandle.py:8:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/PerfAutoRun/Utilities/PlatformHandle/OSXChromeHandle.py:8:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
Total errors found: 4 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087424</commentid>
    <comment_count>3</comment_count>
      <attachid>251306</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-04-22 09:44:31 -0700</bug_when>
    <thetext>Comment on attachment 251306
Patch

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

Ryosuke is the right person to review this, just making a few initial comments.

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:12
&gt; ++        for (var i = 0; i &lt; benchmarks.length; ++ i) {

no space between ++ and i

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:21
&gt; ++        

Not needed.

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:28
&gt; ++        //submit result to server

Missing space after //. Missing capital letter for Submit and missing &apos;.&apos; at the end of the sentence.

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:30
&gt; ++        var http = new XMLHttpRequest();

We usually use xhr variable name for these rather than http I believe.

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:31
&gt; ++        var url = &apos;/report&apos;;

No need for this variable.

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:32
&gt; ++        http.open(&quot;POST&quot;, url, true);

true can be omitted as async is the default.

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:39
&gt; ++        if(http.readyState == 4 &amp;&amp; http.status == 200) {

xhr.readyState == XMLHttpRequest.DONE

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:40
&gt; ++                closeRequest = new XMLHttpRequest();

missing var

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:41
&gt; ++                closeRequest.open(&quot;GET&quot;, &apos;/shutdown&apos;, true);

true can be omitted as async is the default.

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:56
&gt; ++ Copyright (C) 2014 Apple Inc. All rights reserved.

2015?

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:95
&gt; ++        else

else should be on previous line.

&gt; Tools/Scripts/PerfAutoRun/Patches/JetStream.patch:109
&gt; ++    &lt;p class=&quot;summary&quot;&gt;JetStream is a JavaScript benchmark suite focused on the most advanced web applications. For more information, read the &lt;a href=&quot;in-depth.html&quot;&gt;in-depth analysis&lt;/a&gt;. Bigger scores are better.&lt;/p&gt;

s/Bigger/Higher ?

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/SimpleHTTPHandle.py:59
&gt; +                            &apos;Http Server is serving at port: %d&apos;,

HTTP

&gt; Tools/Scripts/PerfAutoRun/Utilities/PlatformHandle/OSXSafariHandle.py:60
&gt; +        &apos;/Users/Leelour/Code/Webkit/OpenSource/WebKitBuild/Release/&apos;,

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087428</commentid>
    <comment_count>4</comment_count>
      <attachid>251306</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-04-22 09:50:46 -0700</bug_when>
    <thetext>Comment on attachment 251306
Patch

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

&gt; Tools/Scripts/PerfAutoRun/Patches/Speedometer.patch:74
&gt; ++            console.log(dict);

debug? Do we want to keep this?

&gt; Tools/Scripts/PerfAutoRun/Patches/Speedometer.patch:85
&gt; ++            var http = new XMLHttpRequest();

xhr is a better name.

&gt; Tools/Scripts/PerfAutoRun/Patches/Speedometer.patch:86
&gt; ++            var url = &apos;/report&apos;;

unnecessary variable

&gt; Tools/Scripts/PerfAutoRun/Patches/Speedometer.patch:87
&gt; ++            http.open(&quot;POST&quot;, url, true);

true can be omitted.

&gt; Tools/Scripts/PerfAutoRun/Patches/Speedometer.patch:94
&gt; ++                if(http.readyState == 4 &amp;&amp; http.status == 200) {

XMLHttpRequest.DONE

&gt; Tools/Scripts/PerfAutoRun/Patches/Speedometer.patch:95
&gt; ++                    closeRequest = new XMLHttpRequest();

missing var

&gt; Tools/Scripts/PerfAutoRun/PerfAutoRun.py:2
&gt; +# coding : utf-8

I don&apos;t think we usually have this in our scripts.

&gt; Tools/Scripts/PerfAutoRun/PerfAutoRun.py:3
&gt; +import argparse

A blank line before the imports would be nicer IMHO.

&gt; Tools/Scripts/PerfAutoRun/PerfAutoRun.py:29
&gt; +            &apos;OSX&apos;,

For command line arguments, I think it would be nice to avoid capital letters.

&gt; Tools/Scripts/PerfAutoRun/PerfAutoRun.py:33
&gt; +    # should we add chrome as an option? Well, chrome uses webkit in iOS.

# FIXME: Should we...

(extra FIXME: and capital letter)

&gt; Tools/Scripts/PerfAutoRun/PerfAutoRun.py:39
&gt; +            &apos;Safari&apos;,

For command line arguments, I think it would be nice to avoid capital letters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087430</commentid>
    <comment_count>5</comment_count>
      <attachid>251306</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-04-22 09:57:48 -0700</bug_when>
    <thetext>Comment on attachment 251306
Patch

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

&gt; Tools/Scripts/PerfAutoRun/README.md:54
&gt; +* **path/to/browser/directory**: should be the folder contains the executable binary(e.g. /Application/ in OSX which contains Safari.app)

s/contains/containing/
missing space before parenthesis.
s/in OSX/on OSX/

&gt; Tools/Scripts/PerfAutoRun/README.md:58
&gt; +To create a plan, you may need to refer to Plans/jetstream.plan.

s/may need to refer/may refer/

&gt; Tools/Scripts/PerfAutoRun/README.md:80
&gt; +    * **count**: the number of times you want to execute benchmark

s/to execute benchmark/to run the benchmark./

&gt; Tools/Scripts/PerfAutoRun/README.md:81
&gt; +    * **original_benchmark**: a relative path of benchmark to the root of this project (&apos;PerfAutoRun&apos; directory)

Path of the benchmark, relative to the root of this project.

&gt; Tools/Scripts/PerfAutoRun/README.md:82
&gt; +    * **benchmark_path**: (**OPTIONAL**) a relative path of patch to the root of this project (&apos;PerfAutoRun&apos; directory)

Path of patch to apply, relative to the root of this project.

&gt; Tools/Scripts/PerfAutoRun/README.md:83
&gt; +    * **entry_point**: the relative url you want browser to launch(a relative path to the webroot)

Missing space before parenthesis.

&gt; Tools/Scripts/PerfAutoRun/README.md:84
&gt; +    * **result_wrapper**: the wrapper module you want to wrap the results. Current availble option is &quot;MergeResultWrapper&quot;. To customize your own result wrapper, extends Utilities/ResultWrapper/BaseResultWrapper.py and register your module in Utilities/ResultWrapper/ResultWrapper.json

typo: availble

&gt; Tools/Scripts/PerfAutoRun/README.md:85
&gt; +    * **output_file**: specifiy the output file

Typo: specifiy

&gt; Tools/Scripts/PerfAutoRun/README.md:89
&gt; +    * when you launch the page(&apos;entry_point&apos; in benchmark), the test will start automatically

Missing space before parenthesis.

&gt; Tools/Scripts/PerfAutoRun/README.md:93
&gt; +      var http = new XMLHttpRequest();

same comments as before for this XHR code sample.

&gt; Tools/Scripts/PerfAutoRun/README.md:108
&gt; +* create a patch file against original file

Missing capital letter.

&gt; Tools/Scripts/PerfAutoRun/README.md:109
&gt; +    * Go to the directory contains the benchmark directory(e.g. for JetStream, you should go to PerformaceTest folder)

Missing space before parenthesis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087433</commentid>
    <comment_count>6</comment_count>
      <attachid>251306</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-04-22 10:20:31 -0700</bug_when>
    <thetext>Comment on attachment 251306
Patch

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

&gt; Tools/Scripts/PerfAutoRun/README.md:110
&gt; +    * use ```shell git diff --relative HEAD &gt;&gt; your.patch``` to create your patch

what is &quot;shell&quot; ?

Shouldn&apos;t it be &gt; your.patch ? so that it actually creates the file?

&gt; Tools/Scripts/PerfAutoRun/README.md:112
&gt; +* Create a plan for the benchmark(refer to **&quot;How to create a plan&quot;** for more details)

Missing space before parenthesis.

&gt; Tools/Scripts/PerfAutoRun/README.md:113
&gt; +* Do following instruction **ONLY IF NEEDED**, in most case, you do not have to.

Follow these instructions...
in most cases,

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkRunner.py:2
&gt; +# coding : utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkRunner.py:6
&gt; +import json

Please sort the imports alphabetically.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkRunner.py:16
&gt; +from Utils import timeout

Can be merged with the previous from Utils import.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkRunner.py:77
&gt; +                # wait for http server to launch and platform handler to clean

Missing capital letter.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkRunner.py:78
&gt; +                # the environment

Missing &apos;.&apos; at the end.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkRunner.py:94
&gt; +                    logger.error(&apos;No result. Something goes wrong&apos;)

&quot;went wrong&quot; ?

&gt; Tools/Scripts/PerfAutoRun/Utilities/GenericHandleFactory.py:2
&gt; +# coding : utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/GenericHandleFactory.py:6
&gt; +import logging

alphabetical sorting.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/HTTPHandle.py:2
&gt; +# coding : utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/HTTPHandle.py:9
&gt; +    def serve(self, webRoot, serveCnt):

What does &quot;serveCnt&quot; stand for? Please avoid abbreviations.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/HTTPHandleFactory.py:2
&gt; +# coding : utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/HTTPServer/NaiveHTTPServer.py:2
&gt; +# coding:utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/HTTPServer/NaiveHTTPServer.py:7
&gt; +import posixpath

alphabetical sorting.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/HTTPServer/NaiveHTTPServer.py:69
&gt; +        self.running = True

isRunning, we like using prefixes for boolean variables.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/HTTPServer/TwistedHTTPServer.py:2
&gt; +# coding: utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/HTTPServer/TwistedHTTPServer.py:28
&gt; +    backdoor = BackdoorPage()

Not sure backdoor is a great name. It sounds scary :)

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/SimpleHTTPHandle.py:2
&gt; +# coding : utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/SimpleHTTPHandle.py:24
&gt; +        # FIXME: this may not be reliable

Missing &apos;.&apos; at the end.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/SimpleHTTPHandle.py:25
&gt; +        logger.info(&apos;finding the ip address of current machine&apos;)

&quot;Finding&quot;, &quot;IP&quot;

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/SimpleHTTPHandle.py:32
&gt; +            logger.error(&apos;cannot get the ip address of current machine&apos;)

Missing capital letter.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/SimpleHTTPHandle.py:50
&gt; +        logger.info(&apos;start to fetching the port number of the http server&apos;)

Missing capital letter.

&gt; Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/SimpleHTTPHandle.py:88
&gt; +                                &apos;Http Server is serving at port: %d&apos;,

HTTP

&gt; Tools/Scripts/PerfAutoRun/Utilities/PlatformHandle/OSXChromeHandle.py:2
&gt; +# coding : utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/PlatformHandle/OSXSafariHandle.py:35
&gt; +        args = [browserBuildPath + &apos;/Safari.app/Contents/MacOS/Safari&apos;]

os.path.join()

&gt; Tools/Scripts/PerfAutoRun/Utilities/PlatformHandle/OSXSafariHandle.py:50
&gt; +        safaris = NSRunningApplication.runningApplicationsWithBundleIdentifier_(

&quot;safariInstances&quot;? or simply &quot;instances&quot;?

&gt; Tools/Scripts/PerfAutoRun/Utilities/PlatformHandle/PlatformHandle.py:2
&gt; +# coding : utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/PlatformHandle/PlatformHandleFactory.py:2
&gt; +# coding : utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/ResultWrapper/ResultWrapperFactory.py:2
&gt; +# coding : utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/Utils.py:2
&gt; +# coding: utf-8

Same comment as before.

&gt; Tools/Scripts/PerfAutoRun/Utilities/Utils.py:25
&gt; +def getPathFromProjRoot(relativePathToProjRoot):

Avoid abbreviations, Proj -&gt; Project</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087902</commentid>
    <comment_count>7</comment_count>
      <attachid>251460</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2015-04-23 11:46:32 -0700</bug_when>
    <thetext>Created attachment 251460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087904</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-23 11:49:00 -0700</bug_when>
    <thetext>Attachment 251460 did not pass style-queue:


ERROR: Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/JetStreamBenchmarkHandle.py:15:  [JetStreamBenchmarkHandle.prepareBenchmark] Use of super on an old style class  [pylint/E1002] [5]
ERROR: Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/JetStreamBenchmarkHandle.py:15:  [JetStreamBenchmarkHandle.prepareBenchmark] Use of super on an old style class  [pylint/E1002] [5]
ERROR: Tools/Scripts/PerfAutoRun/Utilities/HTTPHandle/HTTPServer/TwistedHTTPServer.py:4:  No name &apos;EncodingResourceWrapper&apos; in module &apos;twisted.web.resource&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/PerfAutoRun/Utilities/BenchmarkRunner.py:14:  No name &apos;HTTPHandleFactory&apos; in module &apos;HTTPHandle&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/PerfAutoRun/Utilities/PlatformHandle/OSXSafariHandle.py:10:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/PerfAutoRun/Utilities/PlatformHandle/OSXChromeHandle.py:10:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
Total errors found: 6 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087990</commentid>
    <comment_count>9</comment_count>
      <attachid>251460</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-04-23 14:06:32 -0700</bug_when>
    <thetext>Comment on attachment 251460
Patch

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

This patch needs a change log entry.  Run Tools/Scripts/prepare-ChangeLogs --bug=144038 and fill up the description.
r- because of this.

Can we also rename to something more redescriptive like BenchmarkRunner?

Also, I think we should put this code somewhere under Tools/Scripts/webkitpy.

&gt; Tools/Scripts/PerfAutoRun/PerfAutoRun.py:2
&gt; +# coding : utf-8

I don&apos;t think we want add these coding encoding since we don&apos;t do that elsewhere as Chris has already pointed out.

&gt; Tools/Scripts/PerfAutoRun/PerfAutoRun.py:32
&gt; +    parser.add_argument(
&gt; +        &apos;--platform&apos;,
&gt; +        dest=&apos;platform&apos;,
&gt; +        default=&apos;osx&apos;,
&gt; +        choices=[
&gt; +            &apos;osx&apos;,
&gt; +            &apos;ios&apos;,
&gt; +            &apos;windows&apos;],
&gt; +        required=True)

Why don&apos;t we just put this in single line?
All these line breaks are rather making the code harder to read.
See other code in webkitpy.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/BaseBenchmarkHandle.py:2
&gt; +# coding : utf-8

Ditto about coding.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/BaseBenchmarkHandle.py:7
&gt; +class BaseBenchmarkHandle(object):

Why do we need this class at all?
It seems like we just need GenericBenchmarkHandle.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/BenchmarkHandleFactory.py:7
&gt; +from ..GenericHandleFactory import GenericHandleFactory

Why don&apos;t we add a wrapper script in Tools/Scripts/, e.g. run-benchmark-in-browser
so that we don&apos;t have to prefix these imports with &quot;..&quot;.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/BenchmarkHandleFactory.py:17
&gt; +    handles = json.load(
&gt; +        open(
&gt; +            os.path.join(
&gt; +                os.path.dirname(__file__),
&gt; +                handleFileName),
&gt; +            &apos;r&apos;))

Again, we don&apos;t normally line break between each parenthesis like this.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/BenchmarkHandles.json:8
&gt; +  &quot;GenericBenchmarkHandle&quot;: {
&gt; +    &quot;moduleName&quot;: &quot;GenericBenchmarkHandle&quot;, 
&gt; +    &quot;filePath&quot;: &quot;BenchmarkHandle.GenericBenchmarkHandle&quot;
&gt; +  }, 
&gt; +  &quot;JetStreamBenchmarkHandle&quot;: {
&gt; +    &quot;moduleName&quot;: &quot;JetStreamBenchmarkHandle&quot;, 
&gt; +    &quot;filePath&quot;: &quot;BenchmarkHandle.JetStreamBenchmarkHandle&quot;

Please do use 4-space indentation everywhere per our style guileline.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/GenericBenchmarkHandle.py:18
&gt; +class GenericBenchmarkHandle(BaseBenchmarkHandle):

I don&apos;t think we need to suffix all these classes with &quot;Handle&quot;.
Just like &quot;Manager&quot;, &quot;Controller&quot;, etc… these suffixes don&apos;t really convey extra information.
Here, GenericBenchmark tells us just as much as GenericBenchmarkHandle.
Also, handle usually refers to a pointer like object such as a file handle so I don&apos;t think we want to use it here.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/GenericBenchmarkHandle.py:19
&gt; +    def prepareBenchmark(self, benchmarkPath, patch):

Why don&apos;t we call this just &quot;prepare&quot; since the class name already says GenericBenchmarkHandle.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/GenericBenchmarkHandle.py:23
&gt; +    def copyBenchmark(self, benchmarkPath):

copyBenchmark sounds very generic.  Why don&apos;t we say that we&apos;re copying to a temporary location.
e.g. _copyBenchmarkToTempDir?
Also, we normally prefix private/protected method names with underscore.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/GenericBenchmarkHandle.py:24
&gt; +        self.webroot = tempfile.mkdtemp()

we should be consistent in naming conventions.
either webRoot or web_root (the latter is PEP 8 style we use elsewhere for local variables and methods).

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/GenericBenchmarkHandle.py:29
&gt; +        self.dest = os.path.join(
&gt; +            self.webroot,
&gt; +            os.path.split(
&gt; +                benchmarkPath)[1])

Seriously, all these line breaks are driving me nuts.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/GenericBenchmarkHandle.py:35
&gt; +    def applyPatch(self, patch):

_applyPatch.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/GenericBenchmarkHandle.py:37
&gt; +            oldCwd = os.getcwd()

Please use a descriptive name such as oldWorkingDirectory. &quot;cwd&quot; stands for current working directory
so oldCwd doesn&apos;t make much semantic sense.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/GenericBenchmarkHandle.py:39
&gt; +            retNum = subprocess.call(

I&apos;d call this exitCode instead.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/GenericBenchmarkHandle.py:44
&gt; +                logger.info(
&gt; +                    &apos;Cannot apply patch, will skip current benchmarkPath&apos;)

It seems like this is an error, not an informative log, to me.

&gt; Tools/Scripts/PerfAutoRun/Utilities/BenchmarkHandle/GenericBenchmarkHandle.py:50
&gt; +    def clearBenchmark(self):
&gt; +        logger.info(&apos;Cleanning Benchmark&apos;)

Why don&apos;t we call this clean?

&gt; Tools/Scripts/PerfAutoRun/Utilities/ResultWrapper/ResultWrapperFactory.py:29
&gt; +if __name__ == &apos;__main__&apos;:
&gt; +    merger = ResultWrapperFactory.create([&apos;MergeResultWrapper&apos;])
&gt; +    d1 = {

Are these supposed to tests?
We usually put them in a separate tests directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088148</commentid>
    <comment_count>10</comment_count>
      <attachid>251527</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2015-04-23 19:20:02 -0700</bug_when>
    <thetext>Created attachment 251527
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088149</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-23 19:23:10 -0700</bug_when>
    <thetext>Attachment 251527 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:9:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/result_wrapper/result_wrapper_factory.py:17:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/result_wrapper/result_wrapper_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:13:  No name &apos;http_server_driver_factory&apos; in module &apos;http_server_driver&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:15:  No name &apos;browser_driver_factory&apos; in module &apos;browser_driver&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:9:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:9:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
Total errors found: 10 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088293</commentid>
    <comment_count>12</comment_count>
      <attachid>251564</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2015-04-24 12:19:21 -0700</bug_when>
    <thetext>Created attachment 251564
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088294</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-24 12:22:49 -0700</bug_when>
    <thetext>Attachment 251564 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:9:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/result_wrapper/result_wrapper_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:13:  No name &apos;http_server_driver_factory&apos; in module &apos;http_server_driver&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:15:  No name &apos;browser_driver_factory&apos; in module &apos;browser_driver&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:9:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:9:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
Total errors found: 9 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088321</commentid>
    <comment_count>14</comment_count>
      <attachid>251564</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-04-24 14:08:33 -0700</bug_when>
    <thetext>Comment on attachment 251564
Patch

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

&gt; Tools/Scripts/run-benchmark:9
&gt; +logger.setLevel(logging.DEBUG)

We probably don&apos;t want to debug logging by default.
You probably want to add an option to control logging level instead, leaving default.

&gt; Tools/Scripts/run-benchmark:25
&gt; +    args = parser.parse_args()

Please add a blink line after this so that we can separate the list of arguments from the code below.
Probably another blank line is needed before BenchmarkRunner is instantiated too.

&gt; Tools/Scripts/run-benchmark:26
&gt; +    logger.info(&apos;Initializing program with following parameters&apos;)

I&apos;d make these debug log since the user had just specified these options.

&gt; Tools/Scripts/webkitpy/benchmark_runner/README.md:1
&gt; +# PerfAutoRun

Please rename this.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py:10
&gt; +logger = logging.getLogger(&apos;PerfAutorun&apos;)

Do _log = logging.getLogger(__name__)

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:12
&gt; +logger = logging.getLogger(&apos;PerfAutoRun&apos;)

Do _log = logging.getLogger(__name__)

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:27
&gt; +        if patch:

We prefer early return over nested if&apos;s. Just do:
if patch:
  return self.webRoot
instead.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:32
&gt; +            if errorCode != 0:

In WebKit coding styling, we don&apos;t use == or != against 0.
Just use &quot;if errorCode:&quot; instead.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/jetstream_benchmark_builder.py:10
&gt; +logger = logging.getLogger(&apos;PerfAutoRun&apos;)

Do _log = logging.getLogger(__name__)

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/jetstream_benchmark_builder.py:25
&gt; +        if errorCode != 0:

Ditto about not checking against 0.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:20
&gt; +logger = logging.getLogger(&apos;PerfAutoRun&apos;)

Do _log = logging.getLogger(__name__)

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:55
&gt; +                # Wait for http server to launch and platform handler to clean
&gt; +                # the environment.

I don&apos;t think this comment adds any value.  Please remove it.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:56
&gt; +                time.sleep(2)

Why are we sleeping for 2s?  Are we waiting for httpd to launch?
If so, we should instead check for pid file to be generated.
Waiting for 2s is neither sufficient nor necesary condition for httpd to have launched.
See how apache_http_server.py (somewhere in webkitpy) does this.
In fact, you might wanna just use that class with a new httpd.conf.

Also, we should probably be doing it in httpServerDriver.serve.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:64
&gt; +                if len(result) == 0:

No need to call len.  Just do &quot;if not result:&quot;.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:65
&gt; +                    self.platformDriver.closeBrowsers()

Why don&apos;t we put this into &quot;finally:&quot; statment intead so that we don&apos;t have to repeat it three times.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:73
&gt; +            time.sleep(1)

Why are we waiting for 1s?

&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:10
&gt; +logger = logging.getLogger(&apos;PerfAutoRun&apos;)

Do _log = logging.getLogger(__name__)

&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:21
&gt; +    logger.warn(&apos;Loading %s failed, start using pre-defined drivers&apos; % (driverFileName))
&gt; +    drivers = {
&gt; +        &apos;osx&apos;: {
&gt; +            &apos;safari&apos;: {&apos;moduleName&apos;: &apos;OSXSafariDriver&apos;, &apos;filePath&apos;: &apos;browser_driver.osx_safari_driver&apos;},
&gt; +            &apos;chrome&apos;: {&apos;moduleName&apos;: &apos;OSXChromeDriver&apos;, &apos;filePath&apos;: &apos;browser_driver.osx_chrome_driver&apos;},
&gt; +        },
&gt; +    }

I don&apos;t think we need a fallback code here.  It&apos;s just duplicating the code.
In fact, it&apos;s probably a good idea to do a full stop if the configuration file specified by the user doesn&apos;t exist.

&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:10
&gt; +# We assume that this handle can only be used when the platform is OSX
&gt; +from AppKit import NSRunningApplication
&gt; +from browser_driver import BrowserDriver

Perhaps put this inside try &amp; catch and spit out an error message instead?

&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:13
&gt; +logger = logging.getLogger(&apos;PerfAutoRun&apos;)

Do _log = logging.getLogger(__name__)

&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:24
&gt; +        # may need to be modified for develop build, such as setting up
&gt; +        # libraries

It seems like this will fit into a single line.  Also use &quot;FIXME:&quot; prefix as done elsewhere.

&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:32
&gt; +        time.sleep(2)

Why 2s?

&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:10
&gt; +# We assume that this handle can only be used when the platform is OSX.
&gt; +from AppKit import NSRunningApplication
&gt; +from browser_driver import BrowserDriver

Ditto.

&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:13
&gt; +logger = logging.getLogger(&apos;PerfAutoRun&apos;)

Ditto.

&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:29
&gt; +        # Stop for initialization of the safari process, otherwise, open
&gt; +        # command may use the system safari.
&gt; +        time.sleep(3)

Really?  It&apos;s unfortuante tht we don&apos;t have any other mechanism to ensure this :(

&gt; Tools/Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan:15
&gt; +{
&gt; +    &quot;http_server_driver&quot;: &quot;SimpleHTTPServerDriver&quot;, 
&gt; +    &quot;benchmarks&quot;: [
&gt; +        {
&gt; +            &quot;timeout&quot; : 600,
&gt; +            &quot;count&quot;: 5,
&gt; +            &quot;benchmark_builder&quot;: &quot;JetStreamBenchmarkBuilder&quot;,
&gt; +            &quot;original_benchmark&quot;: &quot;../../../../PerformanceTests/JetStream&quot;,
&gt; +            &quot;benchmark_patch&quot;: &quot;data/patches/JetStream.patch&quot;,
&gt; +            &quot;entry_point&quot;: &quot;JetStream/JetStream-1.0.1/index.html&quot;,
&gt; +            &quot;result_wrapper&quot;: &quot;MergeResultWrapper&quot;,
&gt; +            &quot;output_file&quot;: &quot;jetstream.result&quot;
&gt; +        }
&gt; +    ]
&gt; +}

Now that we&apos;re making Builder subclasses, why don&apos;t we put this information as static class variables instead?

&gt; Tools/Scripts/webkitpy/benchmark_runner/generic_factory.py:9
&gt; +logger = logging.getLogger(&apos;PerfAutoRun&apos;)

Ditto.

&gt; Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:81
&gt; +                        p = subprocess.Popen(&apos; &apos;.join([&apos;/usr/sbin/lsof&apos;,
&gt; +                                                       &apos;-a&apos;,
&gt; +                                                       &apos;-iTCP&apos;,
&gt; +                                                       &apos;-sTCP:LISTEN&apos;,
&gt; +                                                       &apos;-p&apos;,
&gt; +                                                       str(self.serverProcess.pid)]),
&gt; +                                             shell=True,
&gt; +                                             stdout=subprocess.PIPE,
&gt; +                                             stderr=subprocess.PIPE)

Wrong indentation. Each subsequent indentation is done by exactly 4 spaces.

&gt; Tools/Scripts/webkitpy/benchmark_runner/result_wrapper/merge_result_wrapper.py:7
&gt; +class DictionaryMerger(BaseResultWrapper):

I think this is unwarrent generization since this is the only class that inherits from BaseResultWrapper.
Just get rid of BaseResultWrapper and use this class directly.

In fact, this could just be a methods in benchmark_runner instead.

&gt; Tools/Scripts/webkitpy/benchmark_runner/result_wrapper/merge_result_wrapper.py:9
&gt; +        if len(dicts) == 0:

Ditto. Use if not dicts.

&gt; Tools/Scripts/webkitpy/benchmark_runner/result_wrapper/result_wrapper_factory.py:10
&gt; +logger = logging.getLogger(&apos;PerfAutoRun&apos;)

Ditto.

&gt; Tools/Scripts/webkitpy/benchmark_runner/utils.py:8
&gt; +logger = logging.getLogger(&apos;PerfAutoRun&apos;)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088429</commentid>
    <comment_count>15</comment_count>
      <attachid>251599</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2015-04-24 17:28:03 -0700</bug_when>
    <thetext>Created attachment 251599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088430</commentid>
    <comment_count>16</comment_count>
      <attachid>251564</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2015-04-24 17:28:14 -0700</bug_when>
    <thetext>Comment on attachment 251564
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:56
&gt;&gt; +                time.sleep(2)
&gt; 
&gt; Why are we sleeping for 2s?  Are we waiting for httpd to launch?
&gt; If so, we should instead check for pid file to be generated.
&gt; Waiting for 2s is neither sufficient nor necesary condition for httpd to have launched.
&gt; See how apache_http_server.py (somewhere in webkitpy) does this.
&gt; In fact, you might wanna just use that class with a new httpd.conf.
&gt; 
&gt; Also, we should probably be doing it in httpServerDriver.serve.

It have been proved that we do not have to sleep 2 seconds since the httpServerDriver will try to fetch the port number it is serving. Once it get the port number, this also indicates that the server is running.
I didn&apos;t find an easy way to use apache_http_server class as we want to have a &apos;/shutdown&apos; page which will terminate http server once it get hit.

&gt;&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:10
&gt;&gt; +from browser_driver import BrowserDriver
&gt; 
&gt; Perhaps put this inside try &amp; catch and spit out an error message instead?

Doing try-catch for this import makes no difference. We do throw exception in BrowserDriverFactory not BrowserDriver.

&gt;&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:29
&gt;&gt; +        time.sleep(3)
&gt; 
&gt; Really?  It&apos;s unfortuante tht we don&apos;t have any other mechanism to ensure this :(

It&apos;s kind of a race condition. It would be great that we can find a way to merge two subprocess.Popen (line 26 and 30) in to one command.

&gt;&gt; Tools/Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan:15
&gt;&gt; +}
&gt; 
&gt; Now that we&apos;re making Builder subclasses, why don&apos;t we put this information as static class variables instead?

I think it would be better to follow the pattern of generic benchmark(e.g. speedometer). If we remove keys like &apos;original_benchmark&apos; we need to add extra if conditions to check whether it is provided in &apos;.plan&apos; file.

&gt;&gt; Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:81
&gt;&gt; +                                             stderr=subprocess.PIPE)
&gt; 
&gt; Wrong indentation. Each subsequent indentation is done by exactly 4 spaces.

My bad. I should put them in one line and this should have been fix since you&apos;ve pointed it out last review.

&gt;&gt; Tools/Scripts/webkitpy/benchmark_runner/result_wrapper/merge_result_wrapper.py:7
&gt;&gt; +class DictionaryMerger(BaseResultWrapper):
&gt; 
&gt; I think this is unwarrent generization since this is the only class that inherits from BaseResultWrapper.
&gt; Just get rid of BaseResultWrapper and use this class directly.
&gt; 
&gt; In fact, this could just be a methods in benchmark_runner instead.

I think I should call it ResultWrapperInterface rather than BaseResultWrapper. And since we provide the ability for others to import benchmarks, I think it would be better to allow them to define other wrappers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088431</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-24 17:30:53 -0700</bug_when>
    <thetext>Attachment 251599 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:9:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/result_wrapper/result_wrapper_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:13:  No name &apos;browser_driver_factory&apos; in module &apos;browser_driver&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:14:  No name &apos;http_server_driver_factory&apos; in module &apos;http_server_driver&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:9:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:9:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
Total errors found: 9 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088479</commentid>
    <comment_count>18</comment_count>
      <attachid>251599</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-04-24 21:56:49 -0700</bug_when>
    <thetext>Comment on attachment 251599
Patch

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

&gt; Tools/ChangeLog:7
&gt; +

You should add a description as to what you&apos;re adding.

&gt; Tools/Scripts/webkitpy/benchmark_runner/README.md:87
&gt; +    * **result_wrapper**: the wrapper module you want to wrap the results. Current availble option is &quot;MergeResultWrapper&quot;. To customize your own result wrapper, extends Utilities/ResultWrapper/BaseResultWrapper.py and register your module in Utilities/ResultWrapper/ResultWrapper.json

I really don&apos;t like that this is an option.  It&apos;s a code smell to have generalization we don&apos;t need right now.
It&apos;s always better to implement the bare minimum we need and generalize things as needed.
Otherwise, we&apos;ll end up extra layers of abstractions and configurations we don&apos;t need and cause a maintenance nightmare down the road.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:54
&gt; +                self.browserDriver.launchUrl(self.composeUrl(self.httpServerDriver.baseUrl(), benchmark[&apos;entry_point&apos;]), self.buildDir)

Why don&apos;t we just use urlparse.urljoin?
https://docs.python.org/2/library/urlparse.html

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:66
&gt; +                        self.browserDriver.closeBrowsers()
&gt; +                        _log.error(&apos;No result. Something went wrong&apos;)
&gt; +                    self.browserDriver.closeBrowsers()

Why do we need to call closerBrowsers twice when result is None?
It seems like we just want to call it once.
Also, it seems like checking None-ness of result here seems strange.
Why don&apos;t we just put &quot;_log.error(&apos;No result. Something went wrong&apos;)&quot; in &quot;except:&quot; clause instead?

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:74
&gt; +    @classmethod
&gt; +    def composeUrl(cls, baseUrl, relativePath):
&gt; +        return &apos;/&apos;.join([baseUrl, relativePath])

We don&apos;t this function if we used urlparse.urljoin above.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:81
&gt; +                fp.write(json.dumps(results))

json.dump(results, fp) will be more efficient.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:84
&gt; +            _log.info(&apos;Cannot open output file: %s&apos; % outputFile)
&gt; +            _log.info(&apos;Results are:\n %s&apos;, json.dumps(results))

These should be errors.

&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:16
&gt; +    if not drivers:
&gt; +        raise Exception(&quot;No driver was found in %s&quot; % (driverFileName))

Why don&apos;t we just do &quot;assert drivers&quot; instead of repeating the exception message twice?

&gt; Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_drivers.json:17
&gt; +    &quot;ios&quot;: {
&gt; +         &quot;safari&quot;: {
&gt; +            &quot;moduleName&quot;: &quot;iOSSafariDriver&quot;, 
&gt; +            &quot;filePath&quot;: &quot;browser_driver.ios_safari_driver&quot;
&gt; +        }
&gt; +    } 

Does this thing exist? It seems that shouldn&apos;t have this entry if this patch doesn&apos;t include iOS implementation.

&gt; Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:24
&gt; +    parser = argparse.ArgumentParser(
&gt; +        description=&apos;python TwistedHTTPServer.py webroot&apos;)

Why don&apos;t we put this into a single line?

&gt; Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:29
&gt; +            self.ip = [
&gt; +                ip for ip in socket.gethostbyname_ex(
&gt; +                    socket.gethostname())[2] if not ip.startswith(&quot;127.&quot;)][0]

This hsould all be in a single line.

&gt; Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:33
&gt; +        except:
&gt; +            _log.error(&apos;Cannot get the ip address of current machine&apos;)
&gt; +            raise

Please pass the original exception object to raise as in:
except Exception:
…
    raise Exception
so that we get to see the original error.

&gt; Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:49
&gt; +                    self.serverPort = psutil.Process(
&gt; +                        self.serverProcess.pid).connections()[0][3][1]

Please put this in single line.

&gt; Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:70
&gt; +                    except ValueError:
&gt; +                        pass
&gt; +                    except IndexError:
&gt; +                        pass

Perhaps we should add comments about why we&apos;re ignoring these errors.

&gt; Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:75
&gt; +            except:
&gt; +                raise

Pleaes don&apos;t do this.  This will prevent us from seeing the actual error.

&gt; Tools/Scripts/webkitpy/benchmark_runner/result_wrapper/base_result_wrapper.py:9
&gt; +from abc import abstractmethod
&gt; +
&gt; +
&gt; +class BaseResultWrapper(object):
&gt; +    @abstractmethod
&gt; +    def wrap(self, results):
&gt; +        pass

I really don&apos;t think we should have this abstract class.
I can&apos;t think of any use case in which another implementation of merging results is needed.
The fact the type of results &quot;wrapper&quot; needs to be specified in the plan is an extra annoynace that&apos;s unwarrented.
r- because of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088480</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-04-24 21:58:37 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Comment on attachment 251599 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251599&amp;action=review
&gt;
&gt; &gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:74
&gt; &gt; +    @classmethod
&gt; &gt; +    def composeUrl(cls, baseUrl, relativePath):
&gt; &gt; +        return &apos;/&apos;.join([baseUrl, relativePath])
&gt; 
&gt; We don&apos;t this function if we used urlparse.urljoin above.

We don&apos;t *need*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088481</commentid>
    <comment_count>20</comment_count>
      <attachid>251599</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-04-24 22:07:01 -0700</bug_when>
    <thetext>Comment on attachment 251599
Patch

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

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py:16
&gt; +    if not builders:
&gt; +        raise Exception(&quot;No driver in %s was found&quot; % (builderFileName))

Ditto about &quot;assert builders&quot; to avoid duplicating the error message.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:40
&gt; +        except:
&gt; +            raise

Oh I guess I was wrong about this supressing the exception since it will pass on the original exception object
but it doesn&apos;t seem like we don&apos;t do it elsewhere in our codebase so it&apos;s probably a good idea.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:65
&gt; +                        _log.error(&apos;No result. Something went wrong&apos;)

It seems like when we&apos;re encountered this error, we need to exit early instead of contiuning to execute.
Otherwise, we&apos;ll end up still reproducing results with a fewer number of samples which is undesirable.

&gt; Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py:16
&gt; +    if not drivers:
&gt; +        raise Exception(&quot;No driver in %s was found&quot; % (driverFileName))

Ditto about doing &quot;assert drivers&quot; to avoid duplicating the error message.

&gt; Tools/Scripts/webkitpy/benchmark_runner/result_wrapper/result_wrapper_factory.py:17
&gt; +    if not wrappers:
&gt; +        raise Exception(&quot;No driver in %s was found&quot; % (wrapperFileName))

Ditto about asserting to avoid code duplicate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088482</commentid>
    <comment_count>21</comment_count>
      <attachid>251599</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-04-24 22:08:08 -0700</bug_when>
    <thetext>Comment on attachment 251599
Patch

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

&gt; Tools/ChangeLog:3
&gt; +        Add PerfAutoRun to automate browser based performance benchmarks(e.g. Speedometer and JetStream)

I&apos;ve just updated the bug title since it&apos;s no longer called PerfAutoRun.
Plesae update this line in the change log before uploading a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088495</commentid>
    <comment_count>22</comment_count>
      <attachid>251614</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2015-04-24 23:38:17 -0700</bug_when>
    <thetext>Created attachment 251614
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088496</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-24 23:39:58 -0700</bug_when>
    <thetext>Attachment 251614 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:9:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:15:  No name &apos;browser_driver_factory&apos; in module &apos;browser_driver&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:16:  No name &apos;http_server_driver_factory&apos; in module &apos;http_server_driver&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:8:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:9:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:9:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py:8:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py:8:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
Total errors found: 11 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088503</commentid>
    <comment_count>24</comment_count>
      <attachid>251614</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-04-24 23:57:55 -0700</bug_when>
    <thetext>Comment on attachment 251614
Patch

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

&gt; Tools/ChangeLog:8
&gt; +        Wrapper script to run benchmark

You need a period at the end of this sentence as well as a blank line afterwards.

&gt; Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:66
&gt; +                    else:
&gt; +                        _log.error(&apos;No result. Something went wrong. Will skip current benchmark.&apos;)
&gt; +                        break
&gt; +                    self.browserDriver.closeBrowsers()

Why don&apos;t we just do all of this inside except: instead?
It&apos;s probably okay to repeat self.browserDriver.closeBrowsers() twice
if that meant we can get rid of this ugly None-ness check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088510</commentid>
    <comment_count>25</comment_count>
      <attachid>251619</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2015-04-25 00:18:14 -0700</bug_when>
    <thetext>Created attachment 251619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088511</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-25 00:20:46 -0700</bug_when>
    <thetext>Attachment 251619 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:9:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:15:  No name &apos;browser_driver_factory&apos; in module &apos;browser_driver&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py:16:  No name &apos;http_server_driver_factory&apos; in module &apos;http_server_driver&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:8:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:9:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:9:  No name &apos;NSRunningApplication&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py:8:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py:7:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py:8:  No name &apos;benchmark_runner&apos; in module &apos;webkitpy&apos;  [pylint/E0611] [5]
Total errors found: 11 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088513</commentid>
    <comment_count>27</comment_count>
      <attachid>251619</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-04-25 00:23:07 -0700</bug_when>
    <thetext>Comment on attachment 251619
Patch

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

&gt; Tools/ChangeLog:5
&gt; +        Reviewed by Ryosuke Niwa

Btw, in the future, please this as NOBODY (OOPS!) until I set r+ on your patch.
Commit queue will automatically replace it with my name before committing it.
And it&apos;s actually wrong to say it has been reviewed by me since it means I&apos;ve r+ed this patch, which I haven&apos;t done it until now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088524</commentid>
    <comment_count>28</comment_count>
      <attachid>251619</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-25 01:14:14 -0700</bug_when>
    <thetext>Comment on attachment 251619
Patch

Clearing flags on attachment: 251619

Committed r183309: &lt;http://trac.webkit.org/changeset/183309&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088525</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-25 01:14:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251306</attachid>
            <date>2015-04-22 01:08:19 -0700</date>
            <delta_ts>2015-04-23 11:46:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144038-20150422010716.patch</filename>
            <type>text/plain</type>
            <size>53204</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMDkwCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1Bl
cmZBdXRvUnVuL1BhdGNoZXMvSmV0U3RyZWFtLnBhdGNoIGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0
b1J1bi9QYXRjaGVzL0pldFN0cmVhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzhiNWY4ZjU2OGM5ZTY4
YzU1YTRiMDYzYWY4MDE3MWI4YTczYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy9QZXJmQXV0b1J1bi9QYXRjaGVzL0pldFN0cmVhbS5wYXRjaApAQCAtMCwwICsxLDExOCBAQAor
ZGlmZiAtLWdpdCBhL0pldFN0cmVhbS9KZXRTdHJlYW1Ecml2ZXIuanMgYi9KZXRTdHJlYW0vSmV0
U3RyZWFtRHJpdmVyLmpzCitpbmRleCA3M2VlNDIwLi5mZDEyYzU1IDEwMDY0NAorLS0tIGEvSmV0
U3RyZWFtL0pldFN0cmVhbURyaXZlci5qcworKysrIGIvSmV0U3RyZWFtL0pldFN0cmVhbURyaXZl
ci5qcworQEAgLTQ0OCwxNiArNDQ4LDQzIEBAIHZhciBKZXRTdHJlYW0gPSAoZnVuY3Rpb24oKSB7
CisgCisgICAgICAgICByZXR1cm4gcmF3UmVzdWx0czsKKyAgICAgfQorKyAgICAKKysgICAgZnVu
Y3Rpb24gY29tcHV0ZVJlZmluZWRSZXN1bHRzKCl7CisrICAgICAgICB2YXIgcmVzdWx0cyA9IHt9
OworKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiZW5jaG1hcmtzLmxlbmd0aDsgKysgaSkg
eworKyAgICAgICAgICAgIHJlc3VsdHNbYmVuY2htYXJrc1tpXS5uYW1lXSA9IHsibWV0cmljcyIg
OiB7IlNjb3JlIiA6IHsiY3VycmVudCIgOiBbYmVuY2htYXJrc1tpXS50aW1lc119fX07CisrICAg
ICAgICB9CisrICAgICAgICByZXR1cm4geyJKZXRTdHJlYW0iOiB7Im1ldHJpY3MiIDogeyJTY29y
ZSIgOiBbIkdlb21ldHJpYyJdfSwgInRlc3RzIiA6IHJlc3VsdHN9fTsKKysgICAgfQorIAorICAg
ICBmdW5jdGlvbiBlbmQoKQorICAgICB7CisgICAgICAgICBjb25zb2xlLmxvZygiUmF3IHJlc3Vs
dHM6IiwgSlNPTi5zdHJpbmdpZnkoY29tcHV0ZVJhd1Jlc3VsdHMoKSkpOworKyAgICAgICAgCisg
CisgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0LXN1bW1hcnkiKS5pbm5l
ckhUTUwgPSAiPGxhYmVsPlNjb3JlPC9sYWJlbD48YnI+PHNwYW4gY2xhc3M9XCJzY29yZVwiPiIg
KyBmb3JtYXRHZW9tZWFuKGFsbFNlbGVjdG9yKSArICI8L3NwYW4+IjsKKyAKKyAgICAgICAgIGlz
UnVubmluZyA9IGZhbHNlOworICAgICAgICAgaGFzQWxyZWFkeVJ1biA9IHRydWU7CisgICAgICAg
ICBwcmVwYXJlVG9TdGFydCgpOworKyAgICAgICAgLy9zdWJtaXQgcmVzdWx0IHRvIHNlcnZlcgor
KyAgICAgICAgcmVzdWx0cyA9IEpTT04uc3RyaW5naWZ5KGNvbXB1dGVSZWZpbmVkUmVzdWx0cygp
KTsKKysgICAgICAgIHZhciBodHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisrICAgICAgICB2
YXIgdXJsID0gJy9yZXBvcnQnOworKyAgICAgICAgaHR0cC5vcGVuKCJQT1NUIiwgdXJsLCB0cnVl
KTsKKysgICAgICAgCisrICAgICAgICBodHRwLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlw
ZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CisrICAgICAgICBodHRwLnNldFJlcXVlc3RIZWFkZXIo
IkNvbnRlbnQtbGVuZ3RoIiwgcmVzdWx0cy5sZW5ndGgpOworKyAgICAgICAgaHR0cC5zZXRSZXF1
ZXN0SGVhZGVyKCJDb25uZWN0aW9uIiwgImNsb3NlIik7CisrIAorKyAgICAgICAgaHR0cC5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKysgICAgICAgIGlmKGh0dHAucmVhZHlTdGF0
ZSA9PSA0ICYmIGh0dHAuc3RhdHVzID09IDIwMCkgeworKyAgICAgICAgICAgICAgICBjbG9zZVJl
cXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKysgICAgICAgICAgICAgICAgY2xvc2VSZXF1
ZXN0Lm9wZW4oIkdFVCIsICcvc2h1dGRvd24nLCB0cnVlKTsKKysgICAgICAgICAgICAgICAgY2xv
c2VSZXF1ZXN0LnNlbmQoKQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGh0
dHAuc2VuZChyZXN1bHRzKTsKKyAgICAgfQorIAorICAgICBmdW5jdGlvbiBpdGVyYXRlKCkKK2Rp
ZmYgLS1naXQgYS9KZXRTdHJlYW0vaW5kZXguaHRtbCBiL0pldFN0cmVhbS9pbmRleC5odG1sCitu
ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjc0NThkMworLS0tIC9kZXYvbnVs
bAorKysrIGIvSmV0U3RyZWFtL2luZGV4Lmh0bWwKK0BAIC0wLDAgKzEsNjQgQEAKKys8IS0tCisr
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrCisr
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorKyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgYXJlIG1ldDoKKysgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorKyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrCisr
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKysgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisrIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisrIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKysgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKysgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisrIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisrIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KysgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKy0tPgorKzwhRE9DVFlQRSBodG1s
PgorKzxodG1sPgorKzxoZWFkPgorKyAgICA8dGl0bGU+SmV0U3RyZWFtIEBWRVJTSU9OQDwvdGl0
bGU+CisrCisrICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iSmV0U3RyZWFtLmNzcyI+
CisrCisrICAgIDxzY3JpcHQ+CisrICAgIHZhciBhbGxJc0dvb2QgPSB0cnVlOworKyAgICB3aW5k
b3cub25lcnJvciA9IGZ1bmN0aW9uKCkgeyBhbGxJc0dvb2QgPSBmYWxzZTsgfQorKworKyAgICBm
dW5jdGlvbiBpbml0aWFsaXplKCkgeworKyAgICAgICAgaWYgKGFsbElzR29vZCkgeworKyAgICAg
ICAgICAgIEpldFN0cmVhbS5pbml0aWFsaXplKCk7CisrICAgICAgICAgICAgc2V0VGltZW91dChm
dW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbiA9ICJqYXZhc2NyaXB0OkpldFN0cmVhbS5zdGFydCgp
In0sIDMwMDApOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJib2R5IikuaW5uZXJIVE1MID0gIjxoMT5FUlJPUjwvaDE+PHA+
RW5jb3VudGVyZWQgZXJyb3JzIGR1cmluZyBwYWdlIGxvYWQuIFJlZnVzaW5nIHRvIHJ1biBhIHBh
cnRpYWwgYmVuY2htYXJrIHN1aXRlLjwvcD4iOworKyAgICB9CisrICAgIDwvc2NyaXB0PgorKwor
KyAgICA8c2NyaXB0IHNyYz0iSmV0U3RyZWFtRHJpdmVyLmpzIj48L3NjcmlwdD4KKysgICAgPHNj
cmlwdCBzcmM9Ik9jdGFuZVNldHVwLmpzIj48L3NjcmlwdD4KKysgICAgPHNjcmlwdCBzcmM9Ik9j
dGFuZTJTZXR1cC5qcyI+PC9zY3JpcHQ+CisrICAgIDxzY3JpcHQgc3JjPSJSZWZlcmVuY2UuanMi
Pjwvc2NyaXB0PgorKzwvaGVhZD4KKys8Ym9keSBvbmxvYWQ9ImluaXRpYWxpemUoKSI+CisrPG1h
aW4+CisrICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgaWQ9ImxvZ28iIHNyYz0iSmV0U3Ry
ZWFtLUxvZ28ucG5nIiBhbHQ9IkpldFN0cmVhbSI+PC9hPgorKworKyAgICA8cCBjbGFzcz0ic3Vt
bWFyeSI+SmV0U3RyZWFtIGlzIGEgSmF2YVNjcmlwdCBiZW5jaG1hcmsgc3VpdGUgZm9jdXNlZCBv
biB0aGUgbW9zdCBhZHZhbmNlZCB3ZWIgYXBwbGljYXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlv
biwgcmVhZCB0aGUgPGEgaHJlZj0iaW4tZGVwdGguaHRtbCI+aW4tZGVwdGggYW5hbHlzaXM8L2E+
LiBCaWdnZXIgc2NvcmVzIGFyZSBiZXR0ZXIuPC9wPgorKyAgICA8cCBjbGFzcz0ic3VtbWFyeSIg
aWQ9Im1vZGUtZGVzY3JpcHRpb24iPjwvcD4KKysKKysgICAgPGRpdiBpZD0icmVzdWx0LXN1bW1h
cnkiPjwvZGl2PgorKyAgICA8ZGl2IGlkPSJzdGF0dXMiPjxhIGhyZWY9ImphdmFzY3JpcHQ6SmV0
U3RyZWFtLnN0YXJ0KCkiPlN0YXJ0IFRlc3Q8L2E+PC9kaXY+CisrICAgIDx0YWJsZSBpZD0icmVz
dWx0cyI+PC90YWJsZT4KKys8L21haW4+CisrPGlmcmFtZSBpZD0ibWFnaWMiPjwvaWZyYW1lPgor
KzwvYm9keT4KKys8L2h0bWw+CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVu
L1BhdGNoZXMvU3BlZWRvbWV0ZXIucGF0Y2ggYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1Bh
dGNoZXMvU3BlZWRvbWV0ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJjMDJiMDg3OTcyOWQ2ZmJiM2Jh
OTBiZjYwNDUyMDE0OWE0ZDBjYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVy
ZkF1dG9SdW4vUGF0Y2hlcy9TcGVlZG9tZXRlci5wYXRjaApAQCAtMCwwICsxLDEwMyBAQAorZGlm
ZiAtLWdpdCBhL1NwZWVkb21ldGVyL0Z1bGwuaHRtbCBiL1NwZWVkb21ldGVyL0Z1bGwuaHRtbAor
aW5kZXggNDE5YjlmMi4uMGIwNGM2OSAxMDA2NDQKKy0tLSBhL1NwZWVkb21ldGVyL0Z1bGwuaHRt
bAorKysrIGIvU3BlZWRvbWV0ZXIvRnVsbC5odG1sCitAQCAtNyw3ICs3LDYgQEAKKyAgICAgPHNj
cmlwdCBzcmM9InJlc291cmNlcy9tYWluLmpzIiBkZWZlcj48L3NjcmlwdD4KKyAgICAgPHNjcmlw
dCBzcmM9InJlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzIiBkZWZlcj48L3NjcmlwdD4KKyAg
ICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9iZW5jaG1hcmstcmVwb3J0LmpzIiBkZWZlcj48L3Nj
cmlwdD4KKy0gICAgPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzIiBkZWZl
cj48L3NjcmlwdD4KKyAgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0cy5qcyIgZGVmZXI+
PC9zY3JpcHQ+CisgPC9oZWFkPgorIDxib2R5PgorZGlmZiAtLWdpdCBhL1NwZWVkb21ldGVyL3Jl
c291cmNlcy9iZW5jaG1hcmstcmVwb3J0LmpzIGIvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL2JlbmNo
bWFyay1yZXBvcnQuanMKK2luZGV4IGM0YjRjNjQuLjM3NzM5NTUgMTAwNjQ0CistLS0gYS9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJlcG9ydC5qcworKysrIGIvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL2JlbmNobWFyay1yZXBvcnQuanMKK0BAIC0xLDE2ICsxLDkgQEAKKyAvLyBUaGlz
IGZpbGUgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gcmVwb3J0IHJlc3VsdHMgYXMgbmVlZGVkLgorIAor
IChmdW5jdGlvbiAoKSB7CistICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgJiYgbG9jYXRpb24u
c2VhcmNoICE9ICc/d2Via2l0JyAmJiBsb2NhdGlvbi5oYXNoICE9ICcjd2Via2l0JykKKy0gICAg
ICAgIHJldHVybjsKKy0KKyAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgCistICAgIHZhciBzY3JpcHRFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CistICAgIHNjcmlwdEVsZW1lbnQuc3JjID0g
Jy4uL3Jlc291cmNlcy9ydW5uZXIuanMnOworLSAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxk
KHNjcmlwdEVsZW1lbnQpOworLQorICAgICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc3R5bGUnKTsKKyAgICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gJ3By
ZSB7IHBhZGRpbmctdG9wOiA2MDBweDsgfSc7CisgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hp
bGQoc3R5bGVFbGVtZW50KTsKK0BAIC0zNiwxMCArMjksOCBAQAorICAgICAgICAgICAgICAgICAg
ICAgbmFtZTogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0b3I6IGFnZ3JlZ2F0
b3J9OworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBQZXJmVGVzdFJ1bm5lci5wcmVwYXJl
VG9NZWFzdXJlVmFsdWVzQXN5bmMoY3JlYXRlVGVzdChudWxsLCAnVG90YWwnKSk7CisgICAgICAg
ICB9LAorICAgICAgICAgZGlkUnVuU3VpdGVzOiBmdW5jdGlvbiAobWVhc3VyZWRWYWx1ZXMpIHsK
Ky0gICAgICAgICAgICBQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhtZWFzdXJlZFZh
bHVlcy50b3RhbCk7CisgICAgICAgICAgICAgdmFsdWVzQnlJdGVyYXRpb24ucHVzaChtZWFzdXJl
ZFZhbHVlcy50ZXN0cyk7CisgICAgICAgICB9LAorICAgICAgICAgZGlkRmluaXNoTGFzdEl0ZXJh
dGlvbjogZnVuY3Rpb24gKCkgeworQEAgLTUyLDE5ICs0MywzMSBAQAorICAgICAgICAgICAgICAg
ICB2YWx1ZXMucHVzaCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgIHZhbHVlcy5hZ2dyZWdhdG9y
ID0gYWdncmVnYXRvcjsKKyAgICAgICAgICAgICB9CistCisrICAgICAgICAgICAgdmFyIGRpY3Qg
PSB7fQorKyAgICAgICAgICAgIGZ1bmN0aW9uIGFkZFRvRGljdGlvbmFyeVZhbHVlKHZhbHVlLCBz
dWl0ZU5hbWUsIHRlc3ROYW1lLCBzdWJ0ZXN0TmFtZSkgeworKyAgICAgICAgICAgICAgICBkaWN0
WyJTcGVlZG9tZXRlciJdID0gZGljdFsiU3BlZWRvbWV0ZXIiXSB8fCB7ICJtZXRyaWNzIiA6IHsg
IlRpbWUiIDogWyAiVG90YWwiLCBdIH0sICJ0ZXN0cyIgOiB7fX07CisrICAgICAgICAgICAgICAg
IGRpY3RbIlNwZWVkb21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXSA9IGRpY3RbIlNwZWVkb21l
dGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXSB8fCB7Im1ldHJpY3MiIDogeyAiVGltZSIgOiBbICJU
b3RhbCIsIF0gfSwgInRlc3RzIiA6IHt9fTsKKysgICAgICAgICAgICAgICAgZGljdFsiU3BlZWRv
bWV0ZXIiXVsidGVzdHMiXVtzdWl0ZU5hbWVdWyJ0ZXN0cyJdW3Rlc3ROYW1lXSA9IGRpY3RbIlNw
ZWVkb21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV0gfHwgeyAi
bWV0cmljcyIgOiB7ICJUaW1lIiA6IFsgIlRvdGFsIiwgXSB9LCAidGVzdHMiIDoge319OworKyAg
ICAgICAgICAgICAgICBkaWN0WyJTcGVlZG9tZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV1bInRl
c3RzIl1bdGVzdE5hbWVdWyJ0ZXN0cyJdW3N1YnRlc3ROYW1lXSA9IGRpY3RbIlNwZWVkb21ldGVy
Il1bInRlc3RzIl1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV1bInRlc3RzIl1bc3VidGVz
dE5hbWVdIHx8IHsgIm1ldHJpY3MiIDogeyAiVGltZSIgOiB7ICJjdXJyZW50IiA6IFtbXV0gfSB9
fTsKKysgICAgICAgICAgICAgICAgZGljdFsiU3BlZWRvbWV0ZXIiXVsidGVzdHMiXVtzdWl0ZU5h
bWVdWyJ0ZXN0cyJdW3Rlc3ROYW1lXVsidGVzdHMiXVtzdWJ0ZXN0TmFtZV1bIm1ldHJpY3MiXVsi
VGltZSJdWyJjdXJyZW50Il1bMF0ucHVzaCh2YWx1ZSk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgIHZhbHVlc0J5SXRlcmF0aW9uLmZvckVhY2goZnVuY3Rpb24g
KG1lYXN1cmVkVmFsdWVzKSB7CisgICAgICAgICAgICAgICAgIGZvciAodmFyIHN1aXRlTmFtZSBp
biBtZWFzdXJlZFZhbHVlcykgeworICAgICAgICAgICAgICAgICAgICAgdmFyIHN1aXRlID0gbWVh
c3VyZWRWYWx1ZXNbc3VpdGVOYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHRl
c3ROYW1lIGluIHN1aXRlLnRlc3RzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRl
c3QgPSBzdWl0ZS50ZXN0c1t0ZXN0TmFtZV07CistICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgc3VidGVzdE5hbWUgaW4gdGVzdC50ZXN0cykKKysgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBzdWJ0ZXN0TmFtZSBpbiB0ZXN0LnRlc3RzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZFRvTWVhc3VyZWRWYWx1ZSh0ZXN0LnRlc3RzW3N1YnRlc3ROYW1lXSwg
c3VpdGVOYW1lICsgJy8nICsgdGVzdE5hbWUgKyAnLycgKyBzdWJ0ZXN0TmFtZSk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFRvRGljdGlvbmFyeVZhbHVlKHRlc3QudGVzdHNbc3Vi
dGVzdE5hbWVdLCBzdWl0ZU5hbWUsIHRlc3ROYW1lLCBzdWJ0ZXN0TmFtZSk7CisrICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvTWVhc3VyZWRW
YWx1ZSh0ZXN0LnRvdGFsLCBzdWl0ZU5hbWUgKyAnLycgKyB0ZXN0TmFtZSwgJ1RvdGFsJyk7Cisg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBhZGRUb01lYXN1cmVk
VmFsdWUoc3VpdGUudG90YWwsIHN1aXRlTmFtZSwgJ1RvdGFsJyk7CisgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICB9KTsKKysgICAgICAgICAgICBjb25zb2xlLmxvZyhkaWN0KTsKKysg
ICAgICAgICAgICB2YXIgcmVzdWx0cyA9IEpTT04uc3RyaW5naWZ5KGRpY3QpOworIAorICAgICAg
ICAgICAgIHZhciBmdWxsTmFtZXMgPSBuZXcgQXJyYXk7CisgICAgICAgICAgICAgZm9yICh2YXIg
ZnVsbE5hbWUgaW4gbWVhc3VyZWRWYWx1ZXNCeUZ1bGxOYW1lKQorQEAgLTcyLDggKzc1LDIzIEBA
CisgCisgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdWxsTmFtZXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG1lYXN1cmVkVmFsdWVzQnlGdWxs
TmFtZVtmdWxsTmFtZXNbaV1dOworLSAgICAgICAgICAgICAgICBQZXJmVGVzdFJ1bm5lci5yZXBv
cnRWYWx1ZXMoY3JlYXRlVGVzdChmdWxsTmFtZXNbaV0sIHZhbHVlcy5hZ2dyZWdhdG9yLCBpICsg
MSA9PSBmdWxsTmFtZXMubGVuZ3RoKSwgdmFsdWVzKTsKKyAgICAgICAgICAgICB9CisrICAgICAg
ICAgICAgdmFyIGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKysgICAgICAgICAgICB2YXIg
dXJsID0gJy9yZXBvcnQnOworKyAgICAgICAgICAgIGh0dHAub3BlbigiUE9TVCIsIHVybCwgdHJ1
ZSk7CisrIAorKyAgICAgICAgICAgIGh0dHAuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBl
IiwgImFwcGxpY2F0aW9uL2pzb24iKTsKKysgICAgICAgICAgICBodHRwLnNldFJlcXVlc3RIZWFk
ZXIoIkNvbnRlbnQtbGVuZ3RoIiwgcmVzdWx0cy5sZW5ndGgpOworKyAgICAgICAgICAgIGh0dHAu
c2V0UmVxdWVzdEhlYWRlcigiQ29ubmVjdGlvbiIsICJjbG9zZSIpOworKyAKKysgICAgICAgICAg
ICBodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgeworKyAgICAgICAgICAgICAg
ICBpZihodHRwLnJlYWR5U3RhdGUgPT0gNCAmJiBodHRwLnN0YXR1cyA9PSAyMDApIHsKKysgICAg
ICAgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworKyAg
ICAgICAgICAgICAgICAgICAgY2xvc2VSZXF1ZXN0Lm9wZW4oIkdFVCIsICcvc2h1dGRvd24nLCB0
cnVlKTsKKysgICAgICAgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5zZW5kKCkKKysgICAgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBodHRwLnNlbmQocmVzdWx0
cyk7CisgICAgICAgICB9CisgICAgIH07CisgfSkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvUGVyZkF1dG9SdW4vUGVyZkF1dG9SdW4ucHkgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVu
L1BlcmZBdXRvUnVuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxODEwZjg5ZTM5YTdlYzM5ZDQ2OWU0OTllNGVj
YWMwOTg5MjE0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVu
L1BlcmZBdXRvUnVuLnB5CkBAIC0wLDAgKzEsNTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBjb2RpbmcgOiB1dGYtOAoraW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgbG9nZ2luZworZnJvbSBV
dGlsaXRpZXMuQmVuY2htYXJrUnVubmVyIGltcG9ydCBCZW5jaG1hcmtSdW5uZXIKKworCitsb2dn
ZXIgPSBsb2dnaW5nLmdldExvZ2dlcignUGVyZkF1dG9SdW4nKQorbG9nZ2VyLnNldExldmVsKGxv
Z2dpbmcuREVCVUcpCitjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCitjaC5zZXRMZXZlbChs
b2dnaW5nLkRFQlVHKQorZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoCisgICAgJyUoYXNj
dGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQorY2guc2V0
Rm9ybWF0dGVyKGZvcm1hdHRlcikKK2xvZ2dlci5hZGRIYW5kbGVyKGNoKQorCisKK2RlZiBtYWlu
KCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICAgIGRlc2Ny
aXB0aW9uPSdBdXRvbWF0ZSB0aGUgYnJvd3NlciBiYXNlZCBwZXJmb3JtYW5jZSBiZW5jaG1hcmsn
KQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cHV0LWZpbGUnLCBkZXN0PSdvdXRwdXQn
LCBkZWZhdWx0PU5vbmUpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1idWlsZC1kaXJlY3Rv
cnknLCBkZXN0PSdidWlsZERpcicsIHJlcXVpcmVkPVRydWUpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLS1wbGFuJywgZGVzdD0ncGxhbicsIHJlcXVpcmVkPVRydWUpCisgICAgcGFyc2VyLmFk
ZF9hcmd1bWVudCgKKyAgICAgICAgJy0tcGxhdGZvcm0nLAorICAgICAgICBkZXN0PSdwbGF0Zm9y
bScsCisgICAgICAgIGRlZmF1bHQ9J09TWCcsCisgICAgICAgIGNob2ljZXM9WworICAgICAgICAg
ICAgJ09TWCcsCisgICAgICAgICAgICAnaU9TJywKKyAgICAgICAgICAgICdXaW5kb3dzJ10sCisg
ICAgICAgIHJlcXVpcmVkPVRydWUpCisgICAgIyBzaG91bGQgd2UgYWRkIGNocm9tZSBhcyBhbiBv
cHRpb24/IFdlbGwsIGNocm9tZSB1c2VzIHdlYmtpdCBpbiBpT1MuCisgICAgcGFyc2VyLmFkZF9h
cmd1bWVudCgKKyAgICAgICAgJy0tYnJvd3NlcicsCisgICAgICAgIGRlc3Q9J2Jyb3dzZXInLAor
ICAgICAgICBkZWZhdWx0PSdTYWZhcmknLAorICAgICAgICBjaG9pY2VzPVsKKyAgICAgICAgICAg
ICdTYWZhcmknLAorICAgICAgICAgICAgJ0Nocm9tZSddLAorICAgICAgICByZXF1aXJlZD1UcnVl
KQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgbG9nZ2VyLmluZm8oJ2luaXRp
YWxpemluZyBwcm9ncmFtIHdpdGggZm9sbG93aW5nIHBhcmFtZXRlcnMnKQorICAgIGxvZ2dlci5p
bmZvKCdcdG91dHB1dCBmaWxlIG5hbWVcdDogJXMnICUgYXJncy5vdXRwdXQpCisgICAgbG9nZ2Vy
LmluZm8oJ1x0YnVpbGQgZGlyZWN0b3J5XHQ6ICVzJyAlIGFyZ3MuYnVpbGREaXIpCisgICAgbG9n
Z2VyLmluZm8oJ1x0cGxhbiBuYW1lXHQ6ICVzJywgYXJncy5wbGFuKQorICAgIHJ1bm5lciA9IEJl
bmNobWFya1J1bm5lcigKKyAgICAgICAgYXJncy5wbGFuLAorICAgICAgICBhcmdzLmJ1aWxkRGly
LAorICAgICAgICBhcmdzLm91dHB1dCwKKyAgICAgICAgYXJncy5wbGF0Zm9ybSwKKyAgICAgICAg
YXJncy5icm93c2VyKQorICAgIHJ1bm5lci5leGVjdXRlKCkKKworaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9S
dW4vUGxhbnMvamV0c3RyZWFtLnBsYW4gYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1BsYW5z
L2pldHN0cmVhbS5wbGFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhNTIxNjM2Y2I3MjBlZmFkNDVmZDkyMDMwM2Fj
NThhNjdkMDRmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVu
L1BsYW5zL2pldHN0cmVhbS5wbGFuCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAiaHR0cF9zZXJ2
ZXIiOiAiU2ltcGxlSFRUUFNlcnZlckhhbmRsZSIsIAorICAgICJiZW5jaG1hcmtzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAidGltZW91dCIgOiA2MDAsCisgICAgICAgICAgICAiY291bnQi
OiA1LAorICAgICAgICAgICAgIm9yaWdpbmFsX2JlbmNobWFyayI6ICIuLi8uLi8uLi8vUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0iLCAKKyAgICAgICAgICAgICJiZW5jaG1hcmtfcGF0Y2giOiAi
UGF0Y2hlcy9KZXRTdHJlYW0ucGF0Y2giLAorICAgICAgICAgICAgIndlYnJvb3QiOiAiLi4vLi4v
d2Vicm9vdCIsIAorICAgICAgICAgICAgImVudHJ5X3BvaW50IjogIkpldFN0cmVhbS9pbmRleC5o
dG1sIiwKKyAgICAgICAgICAgICJyZXN1bHRfd3JhcHBlciI6ICJNZXJnZVJlc3VsdFdyYXBwZXIi
LAorICAgICAgICAgICAgIm91dHB1dF9maWxlIjogImpldHN0cmVhbS5yZXN1bHQiCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1BsYW5z
L3NwZWVkb21ldGVyLnBsYW4gYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1BsYW5zL3NwZWVk
b21ldGVyLnBsYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWVkODRjMDI2MmU1YTIxM2I0Zjc0MzM1NzgxZGRjNzg0
YzY0MzRiYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vUGxh
bnMvc3BlZWRvbWV0ZXIucGxhbgpAQCAtMCwwICsxLDE0IEBACit7CisgICAgImJlbmNobWFya3Mi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiUGF0Y2hlcy9T
cGVlZG9tZXRlci5wYXRjaCIsCisgICAgICAgICAgICAib3JpZ2luYWxfYmVuY2htYXJrIjogIi4u
Ly4uLy4uL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIiLAorICAgICAgICAgICAgImNvdW50
IjogNSwKKyAgICAgICAgICAgICJlbnRyeV9wb2ludCI6ICJTcGVlZG9tZXRlci9GdWxsLmh0bWwi
LAorICAgICAgICAgICAgIm91dHB1dF9maWxlIjogInNwZWVkb21ldGVyLnJlc3VsdCIsCisgICAg
ICAgICAgICAicmVzdWx0X3dyYXBwZXIiOiAiTWVyZ2VSZXN1bHRXcmFwcGVyIiwKKyAgICAgICAg
ICAgICJ0aW1lb3V0IjogNjAwCisgICAgICAgIH0KKyAgICBdLAorICAgICJodHRwX3NlcnZlciI6
ICJTaW1wbGVIVFRQU2VydmVySGFuZGxlIgorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9Q
ZXJmQXV0b1J1bi9SRUFETUUubWQgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1JFQURNRS5t
ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41NDk2ODkxMDJkMzA3MTVlYjFmYzJhY2M5ODBlYTk0ZjcwYjRmMmEzCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9SRUFETUUubWQKQEAg
LTAsMCArMSwxMTcgQEAKKyMgUGVyZkF1dG9SdW4KK1RoaXMgaXMgYSB0b29sIGZvciBhdXRvbWF0
aW5nIHRoZSBicm93c2VyIGJhc2VkIGJlbmNobWFya3MoZS5nLiBTcGVlZG9tZXRlciwgSmV0U3Ry
ZWFtKQorIyMgUHJvamVjdCBTdHJ1Y3R1cmUKK2BgYAorUGVyZkF1dG9SdW4KK+KUnOKUgOKUgCBQ
YXRjaGVzCivilILCoMKgIOKUnOKUgOKUgCBKZXRTdHJlYW0ucGF0Y2gKK+KUgsKgwqAg4pSU4pSA
4pSAIFNwZWVkb21ldGVyLnBhdGNoCivilJzilIDilIAgUGVyZkF1dG9SdW4ucHkKK+KUnOKUgOKU
gCBQbGFucwor4pSCwqDCoCDilJzilIDilIAgamV0c3RyZWFtLnBsYW4KK+KUgsKgwqAg4pSU4pSA
4pSAIHNwZWVkb21ldGVyLnBsYW4KK+KUnOKUgOKUgCBSRUFETUUubWQKK+KUnOKUgOKUgCBVdGls
aXRpZXMKK+KUgsKgwqAg4pSc4pSA4pSAIEJlbmNobWFya1J1bm5lci5weQor4pSCwqDCoCDilJzi
lIDilIAgR2VuZXJpY0hhbmRsZUZhY3RvcnkucHkKK+KUgsKgwqAg4pSc4pSA4pSAIEhUVFBIYW5k
bGUKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgSFRUUEhhbmRsZS5weQor4pSCwqDCoCDilILC
oMKgIOKUnOKUgOKUgCBIVFRQSGFuZGxlRmFjdG9yeS5weQor4pSCwqDCoCDilILCoMKgIOKUnOKU
gOKUgCBIVFRQSGFuZGxlcy5qc29uCivilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIEhUVFBTZXJ2
ZXIKK+KUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBOYWl2ZUhUVFBTZXJ2ZXIucHkK
K+KUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBUd2lzdGVkSFRUUFNlcnZlci5weQor
4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBTaW1wbGVIVFRQSGFuZGxlLnB5CivilILCoMKgIOKU
gsKgwqAg4pSU4pSA4pSAIF9faW5pdF9fLnB5CivilILCoMKgIOKUnOKUgOKUgCBQbGF0Zm9ybUhh
bmRsZQor4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBPU1hDaHJvbWVIYW5kbGUucHkKK+KUgsKg
wqAg4pSCwqDCoCDilJzilIDilIAgT1NYU2FmYXJpSGFuZGxlLnB5CivilILCoMKgIOKUgsKgwqAg
4pSc4pSA4pSAIFBsYXRmb3JtSGFuZGxlLnB5CivilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIFBs
YXRmb3JtSGFuZGxlRmFjdG9yeS5weQor4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBQbGF0Zm9y
bUhhbmRsZXMuanNvbgor4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBfX2luaXRfXy5weQor4pSC
wqDCoCDilILCoMKgIOKUlOKUgOKUgCBpT1NTYWZhcmlIYW5kbGUucHkKK+KUgsKgwqAg4pSc4pSA
4pSAIFJlc3VsdFdyYXBwZXIKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgQmFzZVJlc3VsdFdy
YXBwZXIucHkKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgTWVyZ2VSZXN1bHRXcmFwcGVyLnB5
CivilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIFJlc3VsdFdyYXBwZXJGYWN0b3J5LnB5CivilILC
oMKgIOKUgsKgwqAg4pSc4pSA4pSAIFJlc3VsdFdyYXBwZXJzLmpzb24KK+KUgsKgwqAg4pSCwqDC
oCDilJTilIDilIAgX19pbml0X18ucHkKK+KUgsKgwqAg4pSc4pSA4pSAIFV0aWxzLnB5CivilILC
oMKgIOKUlOKUgOKUgCBfX2luaXRfXy5weQor4pSU4pSA4pSAIF9faW5pdF9fLnB5CitgYGAKKyMj
IFJlcXVpcmVtZW50cworKiBweXRob24gbW9kdWxlczoKKyAgICAqIFB5T2JqYworICAgICogcHN1
dGlscyhvcHRpb25hbCkKKworIyMgSE9XIFRPcworIyMjIEhvdyB0byBydW4KK2BgYHNoZWxsCisg
ICAgcHl0aG9uIHBhdGgvdG8vUGVyZkF1dG9SdW4ucHkgLS1idWlsZC1kaXJlY3RvcnkgcGF0aC90
by9icm93c2VyL2RpcmVjdG9yeSAtLXBsYW4ganNvbl9mb3JtYXRfcGxhbiAtLXBsYXRmb3JtIHRh
cmdldF9wbGF0Zm9ybSAtLWJyb3dzZXIgdGFyZ2V0X2Jyb3dzZXIKK2BgYAorKiAqKnBhdGgvdG8v
YnJvd3Nlci9kaXJlY3RvcnkqKjogc2hvdWxkIGJlIHRoZSBmb2xkZXIgY29udGFpbnMgdGhlIGV4
ZWN1dGFibGUgYmluYXJ5KGUuZy4gL0FwcGxpY2F0aW9uLyBpbiBPU1ggd2hpY2ggY29udGFpbnMg
U2FmYXJpLmFwcCkKKyogKipqc29uX2Zvcm1hX3BsYW4qKjogdGhlIGJlbmNobWFyayBwbGFuIHlv
dSB3YW50IHRvIGV4ZWN1dGUgIAorCisjIyMgSG93IHRvIGNyZWF0ZSBhIHBsYW4KK1RvIGNyZWF0
ZSBhIHBsYW4sIHlvdSBtYXkgbmVlZCB0byByZWZlciB0byBQbGFucy9qZXRzdHJlYW0ucGxhbi4K
K2BgYGpzb24gCit7CisgICAgImh0dHBfc2VydmVyIjogIlNpbXBsZUhUVFBTZXJ2ZXJIYW5kbGUi
LCAKKyAgICAiYmVuY2htYXJrcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInRpbWVvdXQi
IDogNjAwLAorICAgICAgICAgICAgImNvdW50IjogNSwKKyAgICAgICAgICAgICJvcmlnaW5hbF9i
ZW5jaG1hcmsiOiAiLi4vLi4vLi4vL1BlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtIiwgCisgICAg
ICAgICAgICAiYmVuY2htYXJrX3BhdGNoIjogIlBhdGNoZXMvSmV0U3RyZWFtLnBhdGNoIiwKKyAg
ICAgICAgICAgICJ3ZWJyb290IjogIi4uLy4uL3dlYnJvb3QiLCAKKyAgICAgICAgICAgICJlbnRy
eV9wb2ludCI6ICJKZXRTdHJlYW0vaW5kZXguaHRtbCIsCisgICAgICAgICAgICAicmVzdWx0X3dy
YXBwZXIiOiAiTWVyZ2VSZXN1bHRXcmFwcGVyIiwKKyAgICAgICAgICAgICJvdXRwdXRfZmlsZSI6
ICJqZXRzdHJlYW0ucmVzdWx0IgorICAgICAgICB9CisgICAgXQorfQorYGBgCitQbGFuIGlzIGEg
anNvbi1mb3JtYXR0ZWQgZGljdGlvbmFyeSB3aGljaCBjb250YWlucyBmb2xsb3dpbmcga2V5cyAK
KyogKipodHRwX3NlcnZlcioqOiAoKipjYXNlLXNlbnNpdGl2ZSoqKSB0aGUgaHR0cCBzZXJ2ZXIg
bW9kdWxlIHlvdSB3YW50IHRvIGhvc3QgdGhlIHJlc291cmNlcy4gQ3VycmVudCBhdmFpbGFibGUg
b3B0aW9uIGlzICJTaW1wbGVIVFRQU2VydmVySGFuZGxlIiB3aGljaCBpcyBiYXNlZCBvbiBweXRo
b24gdHdpc3RlZCBmcmFtZXdvcmsuCisqICoqYmVuY2htYXJrcyoqOiBjb250YWlucyBhIGxpc3Qg
b2YgYmVuY2htYXJrcyB5b3Ugd2FudCB0byBydW4sIGVhY2ggYmVuY2htYXJrIGlzIGEgbGlzdCBj
b250YWlucyBmb2xsb3dpbmcga2V5czoKKyAgICAqICoqdGltZW91dCoqOiB0aW1lIGxpbWl0IGZv
ciAqKkVBQ0ggUlVOKiogb2YgdGhlIGJlbmNobWFyay4gVGhpcyBjYW4gYXZvaWQgcHJvZ3JhbSBn
ZXR0aW5nIHN0dWNrIGluIHRoZSBleHRyZW1lIGNpcmN1bXN0YW5jZXMuIFRoZSB0aW1lIGxpbWl0
IGlzIHN1Z2dlc3RlZCB0byBiZSAxLjUtMnggdGhlIHRpbWUgc3BlbnQgaW4gYSBub3JtYWwgcnVu
LgorICAgICogKipjb3VudCoqOiB0aGUgbnVtYmVyIG9mIHRpbWVzIHlvdSB3YW50IHRvIGV4ZWN1
dGUgYmVuY2htYXJrCisgICAgKiAqKm9yaWdpbmFsX2JlbmNobWFyayoqOiBhIHJlbGF0aXZlIHBh
dGggb2YgYmVuY2htYXJrIHRvIHRoZSByb290IG9mIHRoaXMgcHJvamVjdCAoJ1BlcmZBdXRvUnVu
JyBkaXJlY3RvcnkpCisgICAgKiAqKmJlbmNobWFya19wYXRoKio6ICgqKk9QVElPTkFMKiopIGEg
cmVsYXRpdmUgcGF0aCBvZiBwYXRjaCB0byB0aGUgcm9vdCBvZiB0aGlzIHByb2plY3QgKCdQZXJm
QXV0b1J1bicgZGlyZWN0b3J5KQorICAgICogKiplbnRyeV9wb2ludCoqOiB0aGUgcmVsYXRpdmUg
dXJsIHlvdSB3YW50IGJyb3dzZXIgdG8gbGF1bmNoKGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgd2Vi
cm9vdCkKKyAgICAqICoqcmVzdWx0X3dyYXBwZXIqKjogdGhlIHdyYXBwZXIgbW9kdWxlIHlvdSB3
YW50IHRvIHdyYXAgdGhlIHJlc3VsdHMuIEN1cnJlbnQgYXZhaWxibGUgb3B0aW9uIGlzICJNZXJn
ZVJlc3VsdFdyYXBwZXIiLiBUbyBjdXN0b21pemUgeW91ciBvd24gcmVzdWx0IHdyYXBwZXIsIGV4
dGVuZHMgVXRpbGl0aWVzL1Jlc3VsdFdyYXBwZXIvQmFzZVJlc3VsdFdyYXBwZXIucHkgYW5kIHJl
Z2lzdGVyIHlvdXIgbW9kdWxlIGluIFV0aWxpdGllcy9SZXN1bHRXcmFwcGVyL1Jlc3VsdFdyYXBw
ZXIuanNvbgorICAgICogKipvdXRwdXRfZmlsZSoqOiBzcGVjaWZpeSB0aGUgb3V0cHV0IGZpbGUK
KworIyMjIEhvdyB0byBpbXBvcnQgYSBiZW5jaG1hcmsKKyogTW9kaWZ5IHRoZSBiZW5jaG1hcmsg
aHRtbCBmaWxlLCBtYWtlIHN1cmUgdGhlIHBhZ2UgaGFzIGZvbGxvd2luZyBmdW5jdGlvbmFsaXRp
ZXM6CisgICAgKiB3aGVuIHlvdSBsYXVuY2ggdGhlIHBhZ2UoJ2VudHJ5X3BvaW50JyBpbiBiZW5j
aG1hcmspLCB0aGUgdGVzdCB3aWxsIHN0YXJ0IGF1dG9tYXRpY2FsbHkKKyAgICAqIG9yZ2FuaXpp
bmcgdGhlIHJlc3VsdHMKKyAgICAqICdQT1NUJyBpbmZvcm1hdGlvbiB0byAnL3JlcG9ydCcsIGFu
ZCAnR0VUJyAnL3NodXRkb3duJyB3aGVuIHBvc3Qgc3VjY2VlZHMuIEV4YW1wbGU6CisgICAgKiBg
YGBqcworICAgICAgdmFyIGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgIHZhciB1
cmwgPSAnL3JlcG9ydCc7CisgICAgICBodHRwLm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOworICAg
ICAgaHR0cC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCAiYXBwbGljYXRpb24vanNv
biIpOworICAgICAgaHR0cC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIHJlc3Vs
dHMubGVuZ3RoKTsKKyAgICAgIGh0dHAuc2V0UmVxdWVzdEhlYWRlcigiQ29ubmVjdGlvbiIsICJj
bG9zZSIpOworICAgICAgaHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICBpZihodHRwLnJlYWR5U3RhdGUgPT0gNCAmJiBodHRwLnN0YXR1cyA9PSAyMDApIHsK
KyAgICAgICAgICAgICAgY2xvc2VSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAg
ICAgICAgICAgIGNsb3NlUmVxdWVzdC5vcGVuKCJHRVQiLCAnL3NodXRkb3duJywgdHJ1ZSk7Cisg
ICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5zZW5kKCkKKyAgICAgICAgICB9CisgICAgICB9Cisg
ICAgICBodHRwLnNlbmQocmVzdWx0cyk7CitgYGAgCisqIGNyZWF0ZSBhIHBhdGNoIGZpbGUgYWdh
aW5zdCBvcmlnaW5hbCBmaWxlCisgICAgKiBHbyB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zIHRo
ZSBiZW5jaG1hcmsgZGlyZWN0b3J5KGUuZy4gZm9yIEpldFN0cmVhbSwgeW91IHNob3VsZCBnbyB0
byBQZXJmb3JtYWNlVGVzdCBmb2xkZXIpCisgICAgKiB1c2UgYGBgc2hlbGwgZ2l0IGRpZmYgLS1y
ZWxhdGl2ZSBIRUFEID4+IHlvdXIucGF0Y2hgYGAgdG8gY3JlYXRlIHlvdXIgcGF0Y2gKKyAgICAq
ICgqKlN1Z2dlc3RlZCoqKSBtb3ZlIHRoZSBwYXRjaCB0byB0aGUgJ1BhdGNoZXMnIGRpcmVjdG9y
eSB1bmRlciBwcm9qZWN0IGRpcmVjdG9yeQorKiBDcmVhdGUgYSBwbGFuIGZvciB0aGUgYmVuY2ht
YXJrKHJlZmVyIHRvICoqIkhvdyB0byBjcmVhdGUgYSBwbGFuIioqIGZvciBtb3JlIGRldGFpbHMp
CisqIERvIGZvbGxvd2luZyBpbnN0cnVjdGlvbiAqKk9OTFkgSUYgTkVFREVEKiosIGluIG1vc3Qg
Y2FzZSwgeW91IGRvIG5vdCBoYXZlIHRvLgorICAgICogSWYgeW91IHdhbnQgdG8gY3VzdG9taXpl
IFBsYXRmb3JtSGFuZGxlIGZvciBzcGVjaWZpYyBicm93c2VyL3BsYXRmb3JtLCB5b3UgbmVlZCB0
byBleHRlbmQgVXRpbGl0aWVzL1BsYXRmb3JtSGFuZGxlL1BsYXRmb3JtSGFuZGxlLnB5IGFuZCBy
ZWdpc3RlciB5b3VyIG1vZHVsZSBpbiBVdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvUGxhdGZvcm1I
YW5kbGVzLmpzb24uCisgICAgKiBJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgSFRUUEhhbmRsZSwg
eW91IG5lZWQgdG8gZXh0ZW5kIFV0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBIYW5kbGUucHkgYW5k
IHJlZ2lzdGVyIHlvdXIgbW9kdWxlIGluIFV0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBIYW5kbGVz
Lmpzb24uCisgICAgKiBJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgUmVzdWx0V3JhcHBlciwgeW91
IG5lZWQgdG8gZXh0ZW5kIFV0aWxpdGllcy9SZXN1bHRXcmFwcGVyL0Jhc2VSZXN1bHRXcmFwcGVy
LnB5IGFuZCByZWdpc3RlciB5b3VyIG1vZHVsZSBpbiBVdGlsaXRpZXMvUmVzdWx0V3JhcHBlci9S
ZXN1bHRXcmFwcGVycworCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0
aWxpdGllcy9CZW5jaG1hcmtSdW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0
aWxpdGllcy9CZW5jaG1hcmtSdW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWEzMWU0M2U3ZDY5MGJmNGMz
MGMyYWE1MDYzZDk1N2E5OGI3MmY0NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
UGVyZkF1dG9SdW4vVXRpbGl0aWVzL0JlbmNobWFya1J1bm5lci5weQpAQCAtMCwwICsxLDEyMCBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGNvZGluZyA6IHV0Zi04CitpbXBvcnQgc3VicHJv
Y2VzcworaW1wb3J0IHRpbWUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9n
Z2luZworZnJvbSBQbGF0Zm9ybUhhbmRsZS5QbGF0Zm9ybUhhbmRsZUZhY3RvcnkgaW1wb3J0IFBs
YXRmb3JtSGFuZGxlRmFjdG9yeQorZnJvbSBIVFRQSGFuZGxlLkhUVFBIYW5kbGVGYWN0b3J5IGlt
cG9ydCBIVFRQSGFuZGxlRmFjdG9yeQorZnJvbSBSZXN1bHRXcmFwcGVyLlJlc3VsdFdyYXBwZXJG
YWN0b3J5IGltcG9ydCBSZXN1bHRXcmFwcGVyRmFjdG9yeQorZnJvbSBVdGlscyBpbXBvcnQgbG9h
ZE1vZHVsZSwgZ2V0UGF0aEZyb21Qcm9qUm9vdAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0
ZW1wZmlsZQoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIFV0aWxzIGltcG9ydCB0aW1l
b3V0CisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1BlcmZBdXRvUnVuJykKKworCitj
bGFzcyBCZW5jaG1hcmtSdW5uZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
bGFuRmlsZSwgYnVpbGREaXIsIG91dHB1dEZpbGUsIHBsYXRmb3JtLCBicm93c2VyKToKKyAgICAg
ICAgbG9nZ2VyLmluZm8oJ2luaXRpYWxpemluZyBiZW5jaG1hcmsgcnVubmluZycpCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihwbGFuRmlsZSwgJ3InKSBhcyBmcDoKKyAgICAg
ICAgICAgICAgICBzZWxmLnBsYW4gPSBqc29uLmxvYWQoZnApCisgICAgICAgICAgICAgICAgc2Vs
Zi5wbGF0Zm9ybUhhbmRsZSA9IFBsYXRmb3JtSGFuZGxlRmFjdG9yeS5jcmVhdGUoCisgICAgICAg
ICAgICAgICAgICAgIFtwbGF0Zm9ybSwgYnJvd3Nlcl0pCisgICAgICAgICAgICAgICAgc2VsZi5o
dHRwU2VydmVySGFuZGxlID0gSFRUUEhhbmRsZUZhY3RvcnkuY3JlYXRlKAorICAgICAgICAgICAg
ICAgICAgICBbc2VsZi5wbGFuWydodHRwX3NlcnZlciddXSkKKyAgICAgICAgICAgICAgICBzZWxm
LmJlbmNobWFya3MgPSBzZWxmLnBsYW5bJ2JlbmNobWFya3MnXQorICAgICAgICAgICAgICAgIHNl
bGYuYnVpbGREaXIgPSBvcy5wYXRoLmFic3BhdGgoYnVpbGREaXIpCisgICAgICAgICAgICAgICAg
c2VsZi5vdXRwdXRGaWxlID0gb3V0cHV0RmlsZSBpZiBvdXRwdXRGaWxlIGVsc2UgJ2JlbmNobWFy
ay5yZXN1bHQnCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVy
cm9yKCdjYW4gbm90IG9wZW4gcGxhbiBmaWxlOiAlcycgJSBwbGFuRmlsZSkKKyAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ3BsYW4gZmlsZTolcyBt
YXkgbm90IGZvbGxvdyBqc29uIGZvcm1hdCcgJSBwbGFuRmlsZSkKKyAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBleGVjdXRlKHNlbGYpOgorICAgICAgICBsb2dn
ZXIuaW5mbygnc3RhcnQgdG8gZXhlY3V0ZSB0aGUgcGxhbicpCisgICAgICAgIGZvciBiZW5jaG1h
cmsgaW4gc2VsZi5iZW5jaG1hcmtzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3N0YXJ0IGEg
bmV3IGJlbmNobWFyaycpCisgICAgICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgICAgIHJl
c3VsdFdyYXBwZXIgPSBSZXN1bHRXcmFwcGVyRmFjdG9yeS5jcmVhdGUoCisgICAgICAgICAgICAg
ICAgW2JlbmNobWFya1sncmVzdWx0X3dyYXBwZXInXV0pCisgICAgICAgICAgICB3ZWJyb290ID0g
dGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcod2Vicm9vdCkKKyAg
ICAgICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICAgICAgd2Vicm9vdCwK
KyAgICAgICAgICAgICAgICBvcy5wYXRoLnNwbGl0KAorICAgICAgICAgICAgICAgICAgICBiZW5j
aG1hcmtbJ29yaWdpbmFsX2JlbmNobWFyayddKVsxXSkKKyAgICAgICAgICAgIHNodXRpbC5jb3B5
dHJlZSgKKyAgICAgICAgICAgICAgICBnZXRQYXRoRnJvbVByb2pSb290KAorICAgICAgICAgICAg
ICAgICAgICBiZW5jaG1hcmtbJ29yaWdpbmFsX2JlbmNobWFyayddKSwKKyAgICAgICAgICAgICAg
ICBkZXN0KQorICAgICAgICAgICAgaWYgJ2JlbmNobWFya19wYXRjaCcgaW4gYmVuY2htYXJrOgor
ICAgICAgICAgICAgICAgIG9sZEN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICAgICAgb3Mu
Y2hkaXIod2Vicm9vdCkKKyAgICAgICAgICAgICAgICByZXROdW0gPSBzdWJwcm9jZXNzLmNhbGwo
CisgICAgICAgICAgICAgICAgICAgIFsncGF0Y2gnLCAnLXAxJywgJy1mJywgJy1pJywgZ2V0UGF0
aEZyb21Qcm9qUm9vdChiZW5jaG1hcmtbJ2JlbmNobWFya19wYXRjaCddKV0pCisgICAgICAgICAg
ICAgICAgb3MuY2hkaXIob2xkQ3dkKQorICAgICAgICAgICAgICAgIGlmIHJldE51bSAhPSAwOgor
ICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICdjYW5ub3QgYXBwbHkgcGF0Y2gsIHdpbGwgc2tpcCBjdXJyZW50IGJlbmNobWFyaycpCisgICAg
ICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUod2Vicm9vdCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWUKKyAgICAgICAgICAgIGZvciB4IGluIHhyYW5nZShpbnQoYmVuY2htYXJrWydj
b3VudCddKSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oCisgICAgICAgICAgICAgICAg
ICAgICdzdGFydCB0aGUgaXRlcmF0aW9uICVkIG9mIGN1cnJlbnQgYmVuY2htYXJrJyAlCisgICAg
ICAgICAgICAgICAgICAgICh4ICsgMSkpCisgICAgICAgICAgICAgICAgc2VsZi5odHRwU2VydmVy
SGFuZGxlLnNlcnZlKHdlYnJvb3QpCisgICAgICAgICAgICAgICAgc2VsZi5wbGF0Zm9ybUhhbmRs
ZS5wcmVwYXJlRW52KCkKKyAgICAgICAgICAgICAgICAjIHdhaXQgZm9yIGh0dHAgc2VydmVyIHRv
IGxhdW5jaCBhbmQgcGxhdGZvcm0gaGFuZGxlciB0byBjbGVhbgorICAgICAgICAgICAgICAgICMg
dGhlIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgyKQorICAgICAgICAg
ICAgICAgIHNlbGYucGxhdGZvcm1IYW5kbGUubGF1bmNoVXJsKAorICAgICAgICAgICAgICAgICAg
ICBzZWxmLmNvbXBvc2VVcmwoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmh0dHBTZXJ2
ZXJIYW5kbGUuYmFzZVVybCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgYmVuY2htYXJrWydl
bnRyeV9wb2ludCddKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZERpcikKKyAgICAg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggdGltZW91dChiZW5jaG1h
cmtbJ3RpbWVvdXQnXSk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc29uLmxv
YWRzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaHR0cFNlcnZlckhhbmRsZS5m
ZXRjaFJlc3VsdCgpKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5wbGF0Zm9ybUhhbmRsZS5jbG9zZUJyb3dzZXJzKCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBsZW4ocmVzdWx0KSA9PSAwOgorICAgICAg
ICAgICAgICAgICAgICBzZWxmLnBsYXRmb3JtSGFuZGxlLmNsb3NlQnJvd3NlcnMoKQorICAgICAg
ICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ05vIHJlc3VsdC4gU29tZXRoaW5nIGdvZXMgd3Jv
bmcnKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLnBsYXRmb3JtSGFuZGxlLmNs
b3NlQnJvd3NlcnMoKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKAorICAgICAgICAgICAg
ICAgICAgICAnZW5kIG9mICVkIGl0ZXJhdGlvbiBvZiBjdXJyZW50IGJlbmNobWFyaycgJQorICAg
ICAgICAgICAgICAgICAgICAoeCArIDEpKQorICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdFdy
YXBwZXIud3JhcChyZXN1bHRzKQorICAgICAgICAgICAgc2VsZi5kdW1wKAorICAgICAgICAgICAg
ICAgIHJlc3VsdHMsCisgICAgICAgICAgICAgICAgYmVuY2htYXJrWydvdXRwdXRfZmlsZSddIGlm
IGJlbmNobWFya1snb3V0cHV0X2ZpbGUnXSBlbHNlIHNlbGYub3V0cHV0RmlsZSkKKyAgICAgICAg
ICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUod2Vicm9vdCkKKwor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjb21wb3NlVXJsKGNscywgYmFzZVVybCwgcmVsYXRp
dmVQYXRoKToKKyAgICAgICAgcmV0dXJuICcvJy5qb2luKFtiYXNlVXJsLCByZWxhdGl2ZVBhdGhd
KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGR1bXAoY2xzLCByZXN1bHRzLCBvdXRwdXRG
aWxlKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ2R1bXBwaW5nIHRoZSByZXN1bHRzIHRvIGZpbGUn
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3V0cHV0RmlsZSwgJ3cnKSBh
cyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZShqc29uLmR1bXBzKHJlc3VsdHMpKQorICAg
ICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdjYW5ub3Qgb3Bl
biBvdXRwdXQgZmlsZTogJXMnICUgb3V0cHV0RmlsZSkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZv
KCdyZXN1bHRzIGFyZTpcbiAlcycsIGpzb24uZHVtcHMocmVzdWx0cykpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9HZW5lcmljSGFuZGxlRmFjdG9yeS5w
eSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0dlbmVyaWNIYW5kbGVGYWN0
b3J5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjIxODFiODNhNmUwYTkxNTkxZjk2MGZhODExODYzMzBhNmY3MjJk
MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGll
cy9HZW5lcmljSGFuZGxlRmFjdG9yeS5weQpAQCAtMCwwICsxLDMwIEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMgY29kaW5nIDogdXRmLTgKKworZnJvbSBVdGlscyBpbXBvcnQgbG9hZE1vZHVs
ZSwgTW9kdWxlTm90Rm91bmRFcnJvcgoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworCitsb2dn
ZXIgPSBsb2dnaW5nLmdldExvZ2dlcignUGVyZkF1dG9SdW4nKQorCisKK2NsYXNzIEdlbmVyaWNI
YW5kbGVGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlcyk6
CisgICAgICAgIHNlbGYuaGFuZGxlcyA9IGhhbmRsZXMKKworICAgIEBjbGFzc21ldGhvZAorICAg
IGRlZiBpdGVyYXRlR2V0SXRlbShjbHMsIG9wdGlvbnMsIGtleXMpOgorICAgICAgICByZXQgPSBv
cHRpb25zCisgICAgICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICByZXQgPSByZXQuX19nZXRpdGVtX18oa2V5KQorICAgICAgICAgICAgZXhjZXB0
IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiByZXQKKwor
ICAgIGRlZiBjcmVhdGUoc2VsZiwgZGVjcmlwdGlvbnMpOgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICByZXR1cm4gbG9hZE1vZHVsZShzZWxmLml0ZXJhdGVHZXRJdGVtKHNlbGYuaGFuZGxlcywg
ZGVjcmlwdGlvbnMpKSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJhaXNlCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQSGFuZGxlL0hU
VFBIYW5kbGUucHkgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQSGFu
ZGxlL0hUVFBIYW5kbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzJjMjU2MWQzMTVkNTg3YmEwNjFlMjg4N2U5
YmU0M2ZlYTM0ZWRmYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9S
dW4vVXRpbGl0aWVzL0hUVFBIYW5kbGUvSFRUUEhhbmRsZS5weQpAQCAtMCwwICsxLDE0IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMgY29kaW5nIDogdXRmLTgKK2Zyb20gYWJjIGltcG9ydCBh
YnN0cmFjdG1ldGhvZAorCisKK2NsYXNzIEhUVFBIYW5kbGUob2JqZWN0KToKKworICAgIEBhYnN0
cmFjdG1ldGhvZAorICAgIGRlZiBzZXJ2ZShzZWxmLCB3ZWJSb290LCBzZXJ2ZUNudCk6CisgICAg
ICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBmZXRjaFJlc3VsdChzZWxm
KToKKyAgICAgICAgcmV0dXJuICdmYWtlIHJlc3VsdCcKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0hUVFBIYW5kbGUvSFRUUEhhbmRsZUZhY3RvcnkucHkg
Yi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBIYW5k
bGVGYWN0b3J5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4MWQ0OTUzYTIwNTAyYzY1MWQ4MWNlZmIxYWEwMzhl
NzEwNGE4MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0
aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBIYW5kbGVGYWN0b3J5LnB5CkBAIC0wLDAgKzEsMjUgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBjb2RpbmcgOiB1dGYtOAoraW1wb3J0IGpzb24KK2lt
cG9ydCBvcworZnJvbSAuLkdlbmVyaWNIYW5kbGVGYWN0b3J5IGltcG9ydCBHZW5lcmljSGFuZGxl
RmFjdG9yeQorCitoYW5kbGVGaWxlTmFtZSA9ICdIVFRQSGFuZGxlcy5qc29uJwordHJ5OgorICAg
IGhhbmRsZXMgPSBqc29uLmxvYWQoCisgICAgICAgIG9wZW4oCisgICAgICAgICAgICBvcy5wYXRo
LmpvaW4oCisgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKKyAgICAg
ICAgICAgICAgICBoYW5kbGVGaWxlTmFtZSksCisgICAgICAgICAgICAncicpKQorZXhjZXB0Ogor
ICAgIHByaW50ICdMb2FkaW5nICVzIGZhaWxlZCwgc3RhcnQgdXNpbmcgcHJlLWRlZmluZWQgaGFu
ZGxlcycgJSAoaGFuZGxlRmlsZU5hbWUpCisgICAgaGFuZGxlcyA9IHsKKyAgICAgICAgJ1NpbXBs
ZUhUVFBTZXJ2ZXJIYW5kbGUnOiB7J2ZpbGVQYXRoJzogJ0hUVFBIYW5kbGUuU2ltcGxlSFRUUEhh
bmRsZScsICdtb2R1bGVOYW1lJzogJ1NpbXBsZUhUVFBIYW5kbGUnfSwKKyAgICB9CisKK0hUVFBI
YW5kbGVGYWN0b3J5ID0gR2VuZXJpY0hhbmRsZUZhY3RvcnkoaGFuZGxlcykKKworaWYgX19uYW1l
X18gPT0gJ19fbWFpbl9fJzoKKyAgICBodHRwZCA9IEhUVFBIYW5kbGVGYWN0b3J5LmNyZWF0ZShb
J1NpbXBsZUhUVFBTZXJ2ZXJIYW5kbGUnXSkKKyAgICBodHRwZC5zZXJ2ZSgnLicpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBI
YW5kbGVzLmpzb24gYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQSGFu
ZGxlL0hUVFBIYW5kbGVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGE2YTU0Nzg5N2JiYzAyY2JhYjkyZjU3
NTIxNzgyNjk3Y2EzMWI5MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1
dG9SdW4vVXRpbGl0aWVzL0hUVFBIYW5kbGUvSFRUUEhhbmRsZXMuanNvbgpAQCAtMCwwICsxLDYg
QEAKK3sKKyAgIlNpbXBsZUhUVFBTZXJ2ZXJIYW5kbGUiOiB7CisgICAgIm1vZHVsZU5hbWUiOiAi
U2ltcGxlSFRUUEhhbmRsZSIsIAorICAgICJmaWxlUGF0aCI6ICJIVFRQSGFuZGxlLlNpbXBsZUhU
VFBIYW5kbGUiCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBTZXJ2
ZXIvTmFpdmVIVFRQU2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRp
ZXMvSFRUUEhhbmRsZS9IVFRQU2VydmVyL05haXZlSFRUUFNlcnZlci5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
NzQ5NzQxYTc5ZmNmOTE5MzlkYmY1YjVlOWQ1ZGJhYjYxMmE3NmQ5Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvSFRUUEhhbmRsZS9IVFRQU2Vy
dmVyL05haXZlSFRUUFNlcnZlci5weQpAQCAtMCwwICsxLDg5IEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgY29kaW5nOnV0Zi04CitpbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgoraW1wb3J0IFNv
Y2tldFNlcnZlcgoraW1wb3J0IGNnaQoraW1wb3J0IHN5cworaW1wb3J0IHBvc2l4cGF0aAoraW1w
b3J0IHVybGxpYgoraW1wb3J0IG9zCitpbXBvcnQgYXJncGFyc2UKKworCitjbGFzcyBOYWl2ZUhh
bmRsZXIoU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgorCisgICAg
ZGVmIGRvX1BPU1Qoc2VsZik6CisgICAgICAgIGZvcm0gPSBjZ2kuRmllbGRTdG9yYWdlKAorICAg
ICAgICAgICAgZnA9c2VsZi5yZmlsZSwKKyAgICAgICAgICAgIGhlYWRlcnM9c2VsZi5oZWFkZXJz
LAorICAgICAgICAgICAgZW52aXJvbj17J1JFUVVFU1RfTUVUSE9EJzogJ1BPU1QnLAorICAgICAg
ICAgICAgICAgICAgICAgJ0NPTlRFTlRfVFlQRSc6IHNlbGYuaGVhZGVyc1snQ29udGVudC1UeXBl
J10sCisgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICBmb3IgaXRlbSBpbiBmb3JtLmxp
c3Q6CisgICAgICAgICAgICBwcmludCBpdGVtCisgICAgICAgIFNpbXBsZUhUVFBTZXJ2ZXIuU2lt
cGxlSFRUUFJlcXVlc3RIYW5kbGVyLmRvX0dFVChzZWxmKQorCisgICAgZGVmIGRvX0dFVChzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5wYXRoID09ICcvc2h1dGRvd24nOgorICAgICAgICAgICAgc2Vs
Zi5zZXJ2ZXIuc2h1dGRvd24oKQorICAgICAgICAgICAgc2VsZi5wYXRoID0gJy8nCisgICAgICAg
IFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmRvX0dFVChzZWxmKQor
CisgICAgZGVmIHRyYW5zbGF0ZV9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJSZXZpc2Ug
b3JnaW5hbCBmdW5jdGlvbiBzbGlnaHRseSB0byBzdXBwb3J0IGN1c3RvbWl6ZWQgd2Vicm9vdAor
ICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9IHBvc2l4cGF0aC5ub3JtcGF0aCh1cmxsaWIudW5x
dW90ZShwYXRoKSkKKyAgICAgICAgd29yZHMgPSBwYXRoLnNwbGl0KCcvJykKKyAgICAgICAgd29y
ZHMgPSBmaWx0ZXIoTm9uZSwgd29yZHMpCisgICAgICAgIGlmIHNlbGYuc2VydmVyLndlYnJvb3Qg
aXMgTm9uZToKKyAgICAgICAgICAgIHBhdGggPSBvcy5nZXRjd2QoKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgIyBOZWVkIHRvIGJlIHdlbGwgdGVzdGVkCisgICAgICAgICAgICBwYXRoID0g
cG9zaXhwYXRoLm5vcm1wYXRoKHVybGxpYi51bnF1b3RlKHNlbGYuc2VydmVyLndlYnJvb3QpKQor
ICAgICAgICBmb3Igd29yZCBpbiB3b3JkczoKKyAgICAgICAgICAgIGRyaXZlLCB3b3JkID0gb3Mu
cGF0aC5zcGxpdGRyaXZlKHdvcmQpCisgICAgICAgICAgICBoZWFkLCB3b3JkID0gb3MucGF0aC5z
cGxpdCh3b3JkKQorICAgICAgICAgICAgaWYgd29yZCBpbiAob3MuY3VyZGlyLCBvcy5wYXJkaXIp
OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5q
b2luKHBhdGgsIHdvcmQpCisgICAgICAgIHJldHVybiBwYXRoCisKKyMgY2xhc3MgTmFpdmVIVFRQ
U2VydmVyKFNvY2tldFNlcnZlci5UaHJlYWRpbmdUQ1BTZXJ2ZXIsIG9iamVjdCk6CisKKworY2xh
c3MgTmFpdmVIVFRQU2VydmVyKFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIsIG9iamVjdCk6CisKKyAg
ICAiIiJpbmhlcmVudCBmcm9tIG9iamVjdCB0byBhZGFwdCB0byBuZXctc3R5bGUgY2xhc3MgaW4g
cHl0aG9uLAorICAgIGFuZCB0byBiZSBjb21wYXRpYmxlIHdpdGggc3VwZXIgZnVuY3Rpb24KKyAg
ICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJfYWRkcmVzcywgUmVxdWVzdEhh
bmRsZXJDbGFzcyk6CisgICAgICAgIHN1cGVyKAorICAgICAgICAgICAgTmFpdmVIVFRQU2VydmVy
LAorICAgICAgICAgICAgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBzZXJ2ZXJfYWRkcmVz
cywKKyAgICAgICAgICAgIFJlcXVlc3RIYW5kbGVyQ2xhc3MpCisgICAgICAgIHNlbGYud2Vicm9v
dCA9IE5vbmUKKworICAgIGRlZiBzZXJ2ZShzZWxmLCB3ZWJyb290KToKKyAgICAgICAgc2VsZi5y
dW5uaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLndlYnJvb3QgPSB3ZWJyb290CisgICAgICAgIHdo
aWxlIHNlbGYucnVubmluZzoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX3JlcXVlc3QoKQorCisg
ICAgZGVmIHNodXRkb3duKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorCisK
K2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAg
ICAgIGRlc2NyaXB0aW9uPSdweXRob24gTmFpdmVIVFRQU2VydmVyLnB5IHdlYnJvb3QnKQorICAg
IHBhcnNlci5hZGRfYXJndW1lbnQoJ3dlYnJvb3QnKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2Vf
YXJncygpCisKKyAgICBodHRwZCA9IE5haXZlSFRUUFNlcnZlcigoIiIsIDApLCBOYWl2ZUhhbmRs
ZXIpCisgICAgaHR0cGQuc2VydmUoYXJncy53ZWJyb290KQorCisKK2lmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRv
UnVuL1V0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBTZXJ2ZXIvVHdpc3RlZEhUVFBTZXJ2ZXIucHkg
Yi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBTZXJ2
ZXIvVHdpc3RlZEhUVFBTZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIyNGI4NzA4NWMwOTY4OGM0OTYw
MzkwMDcyYjRiMGY0NGU3MzZkYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVy
ZkF1dG9SdW4vVXRpbGl0aWVzL0hUVFBIYW5kbGUvSFRUUFNlcnZlci9Ud2lzdGVkSFRUUFNlcnZl
ci5weQpAQCAtMCwwICsxLDMyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgY29kaW5nOiB1
dGYtOAorZnJvbSB0d2lzdGVkLndlYiBpbXBvcnQgc3RhdGljLCBzZXJ2ZXIKK2Zyb20gdHdpc3Rl
ZC53ZWIucmVzb3VyY2UgaW1wb3J0IFJlc291cmNlLCBFbmNvZGluZ1Jlc291cmNlV3JhcHBlcgor
ZnJvbSB0d2lzdGVkLmludGVybmV0IGltcG9ydCByZWFjdG9yCitpbXBvcnQgYXJncGFyc2UKK2lt
cG9ydCBzeXMKKworCitjbGFzcyBCYWNrZG9vclBhZ2UoUmVzb3VyY2UpOgorICAgIGlzTGVhZiA9
IFRydWUKKworICAgIGRlZiByZW5kZXJfR0VUKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICByZWFj
dG9yLnN0b3AoKQorICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiByZW5kZXJfUE9TVChzZWxm
LCByZXF1ZXN0KToKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZShyZXF1ZXN0LmNvbnRlbnQuZ2V0
dmFsdWUoKSkKKyAgICAgICAgcmV0dXJuICdPSycKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgICBkZXNj
cmlwdGlvbj0ncHl0aG9uIFR3aXN0ZWRIVFRQU2VydmVyLnB5IHdlYnJvb3QnKQorICAgIHBhcnNl
ci5hZGRfYXJndW1lbnQoJ3dlYnJvb3QnKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygp
CisgICAgd2Vicm9vdCA9IHN0YXRpYy5GaWxlKGFyZ3Mud2Vicm9vdCkKKyAgICBiYWNrZG9vciA9
IEJhY2tkb29yUGFnZSgpCisgICAgd2Vicm9vdC5wdXRDaGlsZCgnc2h1dGRvd24nLCBiYWNrZG9v
cikKKyAgICB3ZWJyb290LnB1dENoaWxkKCdyZXBvcnQnLCBiYWNrZG9vcikKKyAgICByZWFjdG9y
Lmxpc3RlblRDUCgwLCBzZXJ2ZXIuU2l0ZSh3ZWJyb290KSkKKyAgICByZWFjdG9yLnJ1bigpCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQSGFuZGxl
L1NpbXBsZUhUVFBIYW5kbGUucHkgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGll
cy9IVFRQSGFuZGxlL1NpbXBsZUhUVFBIYW5kbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA5OTFmYjMzZDRm
OTAwNzhlNzVmM2NlZTU1OWQzNDVmOTU5MGExMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0hUVFBIYW5kbGUvU2ltcGxlSFRUUEhhbmRsZS5w
eQpAQCAtMCwwICsxLDEwNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGNvZGluZyA6IHV0
Zi04CisKK2Zyb20gSFRUUEhhbmRsZSBpbXBvcnQgSFRUUEhhbmRsZQoraW1wb3J0IHJlCitpbXBv
cnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKK2ltcG9ydCBvcworaW1w
b3J0IGxvZ2dpbmcKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignUGVyZkF1dG9SdW4n
KQorCisKK2NsYXNzIFNpbXBsZUhUVFBIYW5kbGUoSFRUUEhhbmRsZSk6CisKKyAgICAiIiJUaGlz
IGNsYXNzIGRlcGVuZHMgb24gdW5peCBlbnZpcm9ubWVudCwgbmVlZCB0byBiZSBtb2RpZmllZCB0
byBhY2hpZXZlIGNyb3NzcGxhdGZvcm0gY29tcGFiaWxpdHkKKyAgICAiIiIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJQcm9jZXNzID0gTm9uZQorICAgICAg
ICBzZWxmLnNlcnZlclBvcnQgPSAwCisgICAgICAgICMgRklYTUU6IHRoaXMgbWF5IG5vdCBiZSBy
ZWxpYWJsZQorICAgICAgICBsb2dnZXIuaW5mbygnZmluZGluZyB0aGUgaXAgYWRkcmVzcyBvZiBj
dXJyZW50IG1hY2hpbmUnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmlwID0gWwor
ICAgICAgICAgICAgICAgIGlwIGZvciBpcCBpbiBzb2NrZXQuZ2V0aG9zdGJ5bmFtZV9leCgKKyAg
ICAgICAgICAgICAgICAgICAgc29ja2V0LmdldGhvc3RuYW1lKCkpWzJdIGlmIG5vdCBpcC5zdGFy
dHN3aXRoKCIxMjcuIildWzBdCisgICAgICAgICAgICBsb2dnZXIuaW5mbygnSVAgb2YgY3VycmVu
dCBtYWNoaW5lIGlzOiAlcycgJSBzZWxmLmlwKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAg
ICBsb2dnZXIuZXJyb3IoJ2Nhbm5vdCBnZXQgdGhlIGlwIGFkZHJlc3Mgb2YgY3VycmVudCBtYWNo
aW5lJykKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgc2VydmUoc2VsZiwgd2Vicm9vdCk6
CisgICAgICAgIG9sZEN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGgu
ZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkKKyAgICAgICAgbG9nZ2VyLmluZm8o
J2xhdWNobmluZyBhbiBodHRwIHNlcnZlcicpCisgICAgICAgIHNlbGYuc2VydmVyUHJvY2VzcyA9
IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgJy91c3Iv
YmluL3B5dGhvbicsCisgICAgICAgICAgICAgICAgJ0hUVFBTZXJ2ZXIvVHdpc3RlZEhUVFBTZXJ2
ZXIucHknLAorICAgICAgICAgICAgICAgIHdlYnJvb3RdLAorICAgICAgICAgICAgc3RkaW49c3Vi
cHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAg
ICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG9zLmNoZGlyKG9sZEN3ZCkK
KyAgICAgICAgbWF4QXR0ZW1wdCA9IDUKKyAgICAgICAgaW50ZXJ2YWwgPSAwLjUKKyAgICAgICAg
bG9nZ2VyLmluZm8oJ3N0YXJ0IHRvIGZldGNoaW5nIHRoZSBwb3J0IG51bWJlciBvZiB0aGUgaHR0
cCBzZXJ2ZXInKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgcHN1dGlsCisgICAg
ICAgICAgICBmb3IgYXR0ZW1wdCBpbiB4cmFuZ2UobWF4QXR0ZW1wdCk6CisgICAgICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlclBvcnQgPSBwc3V0aWwuUHJv
Y2VzcygKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyUHJvY2Vzcy5waWQpLmNv
bm5lY3Rpb25zKClbMF1bM11bMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXJQ
b3J0OgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ0h0dHAgU2VydmVyIGlzIHNlcnZpbmcgYXQgcG9ydDogJWQnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyUG9ydCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAg
ICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygKKyAgICAg
ICAgICAgICAgICAgICAgJ3NlcnZlciBwb3J0IGlzIG5vdCBmb3VuZCB0aGlzIHRpbWUsIHJldHJ5
IGFmdGVyICVmIHNlY29uZHMnICUKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWwpCisgICAg
ICAgICAgICAgICAgdGltZS5zbGVlcChpbnRlcnZhbCkKKyAgICAgICAgICAgICAgICBpbnRlcnZh
bCAqPSAyCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBmb3IgYXR0ZW1wdCBpbiB4cmFuZ2UobWF4QXR0ZW1wdCk6CisgICAgICAg
ICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNz
LlBvcGVuKCcgJy5qb2luKFsnL3Vzci9zYmluL2xzb2YnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYScsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1pVENQJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXNUQ1A6TElT
VEVOJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnLXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cihzZWxmLnNlcnZlclByb2Nlc3MucGlkKV0pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJv
Y2Vzcy5QSVBFKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJQb3J0ID0gaW50
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlLmZpbmRhbGwoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdUQ1AgXCo6KFxkKykgXChMSVNURU5cKScsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHAuY29tbXVuaWNhdGUoKVswXSlbMF0pCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlclBvcnQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9nZ2VyLmluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIdHRw
IFNlcnZlciBpcyBzZXJ2aW5nIGF0IHBvcnQ6ICVkJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5zZXJ2ZXJQb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2Vy
LmluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICAnc2VydmVyIHBvcnQgaXMgbm90IGZvdW5k
IHRoaXMgdGltZSwgcmV0cnkgYWZ0ZXIgJWYgc2Vjb25kcycgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ZXJ2YWwpCisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoaW50ZXJ2YWwp
CisgICAgICAgICAgICAgICAgICAgIGludGVydmFsICo9IDIKKyAgICAgICAgICAgIGV4Y2VwdDoK
KyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIGJhc2VVcmwoc2VsZik6CisgICAgICAg
IHJldHVybiAiaHR0cDovLyVzOiVkIiAlIChzZWxmLmlwLCBzZWxmLnNlcnZlclBvcnQpCisKKyAg
ICBkZWYgZmV0Y2hSZXN1bHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlcnZlclByb2Nl
c3MuY29tbXVuaWNhdGUoKVswXQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1
bi9VdGlsaXRpZXMvSFRUUEhhbmRsZS9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1
dG9SdW4vVXRpbGl0aWVzL0hUVFBIYW5kbGUvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUy
OWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvT1NYQ2hyb21lSGFuZGxl
LnB5IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUv
T1NYQ2hyb21lSGFuZGxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxZTdhZmFiOTA2NzE5MTNiZWY4ODQyOTVi
NjRjY2E3MDUwNWI0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRv
UnVuL1V0aWxpdGllcy9QbGF0Zm9ybUhhbmRsZS9PU1hDaHJvbWVIYW5kbGUucHkKQEAgLTAsMCAr
MSw1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGNvZGluZyA6IHV0Zi04Citmcm9tIFBs
YXRmb3JtSGFuZGxlIGltcG9ydCBQbGF0Zm9ybUhhbmRsZQoraW1wb3J0IHN1YnByb2Nlc3MKK2lt
cG9ydCBvcworaW1wb3J0IHRpbWUKKyMgV2UgYXNzdW1lIHRoYXQgdGhpcyBoYW5kbGUgY2FuIG9u
bHkgYmUgdXNlZCB3aGVuIHRoZSBwbGF0Zm9ybSBpcyBPU1gKK2Zyb20gQXBwS2l0IGltcG9ydCBO
U1J1bm5pbmdBcHBsaWNhdGlvbgoraW1wb3J0IGxvZ2dpbmcKKworCitsb2dnZXIgPSBsb2dnaW5n
LmdldExvZ2dlcignUGVyZkF1dG9SdW4nKQorCisKK2NsYXNzIE9TWENocm9tZUhhbmRsZShQbGF0
Zm9ybUhhbmRsZSk6CisKKyAgICBkZWYgcHJlcGFyZUVudihzZWxmKToKKyAgICAgICAgc2VsZi5j
bG9zZUJyb3dzZXJzKCkKKyAgICAgICAgc2VsZi5jaHJvbWVQcmVmZXJlbmNlcyA9IFtdCisKKyAg
ICBkZWYgbGF1bmNoVXJsKHNlbGYsIHVybCwgYnJvd3NlckJ1aWxkUGF0aD1Ob25lKToKKyAgICAg
ICAgbG9nZ2VyLmluZm8oCisgICAgICAgICAgICAnbGF1bmNoaW5nIGNocm9tZTogJXMgd2l0aCB1
cmw6ICVzJyAlCisgICAgICAgICAgICAoYnJvd3NlckJ1aWxkUGF0aCArICcvR29vZ2xlIENocm9t
ZS5hcHAnLCB1cmwpKQorICAgICAgICAjIG1heSBuZWVkIHRvIGJlIG1vZGlmaWVkIGZvciBkZXZl
bG9wIGJ1aWxkLCBzdWNoIGFzIHNldHRpbmcgdXAKKyAgICAgICAgIyBsaWJyYXJpZXMKKyAgICAg
ICAgc3VicHJvY2Vzcy5Qb3BlbihbJ29wZW4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAn
LWEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyQnVpbGRQYXRoICsgJy9Hb29n
bGUgQ2hyb21lLmFwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICctLWFyZ3MnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAnLS1ob21lcGFnZScsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVybF0gKyBzZWxmLmNocm9tZVByZWZlcmVuY2VzKS5jb21tdW5pY2F0ZSgpCisKKyAg
ICBkZWYgY2xvc2VCcm93c2VycyhzZWxmKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ2Nsb3Npbmcg
YWxsIGV4aXN0aW5nIGNocm9tZSBwcm9jZXNzZXMnKQorICAgICAgICBjaHJvbWVzID0gTlNSdW5u
aW5nQXBwbGljYXRpb24ucnVubmluZ0FwcGxpY2F0aW9uc1dpdGhCdW5kbGVJZGVudGlmaWVyXygK
KyAgICAgICAgICAgICdjb20uZ29vZ2xlLkNocm9tZScpCisgICAgICAgIGZvciBjaHJvbWUgaW4g
Y2hyb21lczoKKyAgICAgICAgICAgIGNocm9tZS50ZXJtaW5hdGUoKQorICAgICAgICB0aW1lLnNs
ZWVwKDIpCisKKworZGVmIHRlc3QoKToKKyAgICBoYW5kbGUgPSBPU1hDaHJvbWVIYW5kbGUoKQor
ICAgIGhhbmRsZS5wcmVwYXJlRW52KCkKKyAgICBoYW5kbGUubGF1bmNoVXJsKCcvQXBwbGljYXRp
b25zLycsICdodHRwOi8vYXBwbGUuY29tJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgorICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGls
aXRpZXMvUGxhdGZvcm1IYW5kbGUvT1NYU2FmYXJpSGFuZGxlLnB5IGIvVG9vbHMvU2NyaXB0cy9Q
ZXJmQXV0b1J1bi9VdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvT1NYU2FmYXJpSGFuZGxlLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjBmOTU5Y2Y2ZDM0N2Y4MWEyZDY2ZGI2M2UwZjQ2ZDFlOTQxMDlmM2YKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9QbGF0Zm9y
bUhhbmRsZS9PU1hTYWZhcmlIYW5kbGUucHkKQEAgLTAsMCArMSw2NSBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjIGNvZGluZyA6IHV0Zi04Citmcm9tIFBsYXRmb3JtSGFuZGxlIGltcG9ydCBQ
bGF0Zm9ybUhhbmRsZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUK
KyMgV2UgYXNzdW1lIHRoYXQgdGhpcyBoYW5kbGUgY2FuIG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBw
bGF0Zm9ybSBpcyBPU1gKK2Zyb20gQXBwS2l0IGltcG9ydCBOU1J1bm5pbmdBcHBsaWNhdGlvbgor
aW1wb3J0IGxvZ2dpbmcKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignUGVyZkF1dG9S
dW4nKQorCisKK2NsYXNzIE9TWFNhZmFyaUhhbmRsZShQbGF0Zm9ybUhhbmRsZSk6CisKKyAgICBk
ZWYgcHJlcGFyZUVudihzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZUJyb3dzZXJzKCkKKyAgICAg
ICAgc2VsZi5zYWZhcmlQcmVmZXJlbmNlcyA9IFsKKyAgICAgICAgICAgICItSG9tZVBhZ2UiLAor
ICAgICAgICAgICAgImFib3V0OmJsYW5rIiwKKyAgICAgICAgICAgICItV2FybkFib3V0RnJhdWR1
bGVudFdlYnNpdGVzIiwKKyAgICAgICAgICAgICIwIiwKKyAgICAgICAgICAgICItRXh0ZW5zaW9u
c0VuYWJsZWQiLAorICAgICAgICAgICAgIjAiLAorICAgICAgICAgICAgIi1TaG93U3RhdHVzQmFy
IiwKKyAgICAgICAgICAgICIwIiwKKyAgICAgICAgICAgICItTmV3V2luZG93QmVoYXZpb3IiLAor
ICAgICAgICAgICAgIjEiLAorICAgICAgICAgICAgIi1OZXdUYWJCZWhhdmlvciIsCisgICAgICAg
ICAgICAiMSIsCisgICAgICAgIF0KKworICAgIGRlZiBsYXVuY2hVcmwoc2VsZiwgdXJsLCBicm93
c2VyQnVpbGRQYXRoPU5vbmUpOgorICAgICAgICBhcmdzID0gW2Jyb3dzZXJCdWlsZFBhdGggKyAn
L1NhZmFyaS5hcHAvQ29udGVudHMvTWFjT1MvU2FmYXJpJ10KKyAgICAgICAgYXJncy5leHRlbmQo
c2VsZi5zYWZhcmlQcmVmZXJlbmNlcykKKyAgICAgICAgbG9nZ2VyLmluZm8oJ2xhdW5jaGluZyBz
YWZhcmk6ICVzIHdpdGggdXJsOiAlcycgJSAoYXJnc1swXSwgdXJsKSkKKyAgICAgICAgc3VicHJv
Y2Vzcy5Qb3BlbihhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVudj17CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdEWUxEX0ZSQU1FV09SS19QQVRIJzogYnJvd3NlckJ1aWxk
UGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RZTERfTElCUkFSWV9QQVRIJzog
YnJvd3NlckJ1aWxkUGF0aH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJv
Y2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBF
KQorICAgICAgICAjIHN0b3AgZm9yIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzYWZhcmkgcHJvY2Vz
cywgb3RoZXJ3aXNlLCBvcGVuCisgICAgICAgICMgY29tbWFuZCBtYXkgdXNlIHRoZSBzeXN0ZW0g
c2FmYXJpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc3VicHJvY2Vzcy5Qb3Blbihb
J29wZW4nLCB1cmxdKQorCisgICAgZGVmIGNsb3NlQnJvd3NlcnMoc2VsZik6CisgICAgICAgIGxv
Z2dlci5pbmZvKCdjbG9zaW5nIGFsbCBleGlzdGluZyBzYWZhcmkgcHJvY2Vzc2VzJykKKyAgICAg
ICAgc2FmYXJpcyA9IE5TUnVubmluZ0FwcGxpY2F0aW9uLnJ1bm5pbmdBcHBsaWNhdGlvbnNXaXRo
QnVuZGxlSWRlbnRpZmllcl8oCisgICAgICAgICAgICAnY29tLmFwcGxlLlNhZmFyaScpCisgICAg
ICAgIGZvciBzYWZhcmkgaW4gc2FmYXJpczoKKyAgICAgICAgICAgIHNhZmFyaS50ZXJtaW5hdGUo
KQorCisKK2RlZiB0ZXN0KCk6CisgICAgaGFuZGxlID0gT1NYU2FmYXJpSGFuZGxlKCkKKyAgICBo
YW5kbGUucHJlcGFyZUVudigpCisgICAgaGFuZGxlLmxhdW5jaFVybCgKKyAgICAgICAgJy9Vc2Vy
cy9MZWVsb3VyL0NvZGUvV2Via2l0L09wZW5Tb3VyY2UvV2ViS2l0QnVpbGQvUmVsZWFzZS8nLAor
ICAgICAgICAnaHR0cDovL2FwcGxlLmNvbScpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKKyAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRp
bGl0aWVzL1BsYXRmb3JtSGFuZGxlL1BsYXRmb3JtSGFuZGxlLnB5IGIvVG9vbHMvU2NyaXB0cy9Q
ZXJmQXV0b1J1bi9VdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvUGxhdGZvcm1IYW5kbGUucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGNjNjkyNGU0YjQ3M2U2ODQyOWNmZDZiNmMwNDgyYjU1MTVhMzNjOQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1BsYXRmb3Jt
SGFuZGxlL1BsYXRmb3JtSGFuZGxlLnB5CkBAIC0wLDAgKzEsMTggQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorIyBjb2RpbmcgOiB1dGYtOAoraW1wb3J0IGFiYworCisKK2NsYXNzIFBsYXRmb3Jt
SGFuZGxlKG9iamVjdCk6CisKKyAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgZGVmIHByZXBh
cmVFbnYoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAg
ICBkZWYgbGF1bmNoVXJsKHNlbGYsIHVybCwgYnJvd3NlckJ1aWxkUGF0aD1Ob25lKToKKyAgICAg
ICAgcGFzcworCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjbG9zZUJyb3dzZXIo
c2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9S
dW4vVXRpbGl0aWVzL1BsYXRmb3JtSGFuZGxlL1BsYXRmb3JtSGFuZGxlRmFjdG9yeS5weSBiL1Rv
b2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1BsYXRmb3JtSGFuZGxlL1BsYXRmb3Jt
SGFuZGxlRmFjdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YWQxNGZjYzY5NTljNGY0Y2VhZjNjOTAzMTgw
YjJiYzZjZGVhODExCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1
bi9VdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvUGxhdGZvcm1IYW5kbGVGYWN0b3J5LnB5CkBAIC0w
LDAgKzEsMjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBjb2RpbmcgOiB1dGYtOAoraW1w
b3J0IGpzb24KK2ltcG9ydCBvcworZnJvbSAuLkdlbmVyaWNIYW5kbGVGYWN0b3J5IGltcG9ydCBH
ZW5lcmljSGFuZGxlRmFjdG9yeQorCitoYW5kbGVGaWxlTmFtZSA9ICdQbGF0Zm9ybUhhbmRsZXMu
anNvbicKK3RyeToKKyAgICBoYW5kbGVzID0ganNvbi5sb2FkKAorICAgICAgICBvcGVuKAorICAg
ICAgICAgICAgb3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShf
X2ZpbGVfXyksCisgICAgICAgICAgICAgICAgaGFuZGxlRmlsZU5hbWUpLAorICAgICAgICAgICAg
J3InKSkKK2V4Y2VwdDoKKyAgICBwcmludCAnTG9hZGluZyAlcyBmYWlsZWQsIHN0YXJ0IHVzaW5n
IHByZS1kZWZpbmVkIGhhbmRsZXMnICUgKGhhbmRsZUZpbGVOYW1lKQorICAgIGhhbmRsZXMgPSB7
CisgICAgICAgICdPU1gnOiB7CisgICAgICAgICAgICAnU2FmYXJpJzogeydtb2R1bGVOYW1lJzog
J09TWFNhZmFyaUhhbmRsZScsICdmaWxlUGF0aCc6ICdQbGF0Zm9ybUhhbmRsZS5PU1hTYWZhcmlI
YW5kbGUnfSwKKyAgICAgICAgICAgICdDaHJvbWUnOiB7J21vZHVsZU5hbWUnOiAnT1NYQ2hyb21l
SGFuZGxlJywgJ2ZpbGVQYXRoJzogJ1BsYXRmb3JtSGFuZGxlLk9TWENocm9tZUhhbmRsZSd9LAor
ICAgICAgICB9LAorICAgIH0KKworUGxhdGZvcm1IYW5kbGVGYWN0b3J5ID0gR2VuZXJpY0hhbmRs
ZUZhY3RvcnkoaGFuZGxlcykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4v
VXRpbGl0aWVzL1BsYXRmb3JtSGFuZGxlL1BsYXRmb3JtSGFuZGxlcy5qc29uIGIvVG9vbHMvU2Ny
aXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvUGxhdGZvcm1IYW5kbGVz
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzM5YmRkZTliOThjZjdiN2JmZTIyNmU5ZTUxZWQwNjlhMGZjYzA5
NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVz
L1BsYXRmb3JtSGFuZGxlL1BsYXRmb3JtSGFuZGxlcy5qc29uCkBAIC0wLDAgKzEsMTIgQEAKK3sK
KyAgIk9TWCI6IHsKKyAgICAiQ2hyb21lIjogeworICAgICAgIm1vZHVsZU5hbWUiOiAiT1NYQ2hy
b21lSGFuZGxlIiwgCisgICAgICAiZmlsZVBhdGgiOiAiUGxhdGZvcm1IYW5kbGUuT1NYQ2hyb21l
SGFuZGxlIgorICAgIH0sIAorICAgICJTYWZhcmkiOiB7CisgICAgICAibW9kdWxlTmFtZSI6ICJP
U1hTYWZhcmlIYW5kbGUiLCAKKyAgICAgICJmaWxlUGF0aCI6ICJQbGF0Zm9ybUhhbmRsZS5PU1hT
YWZhcmlIYW5kbGUiCisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1Bl
cmZBdXRvUnVuL1V0aWxpdGllcy9QbGF0Zm9ybUhhbmRsZS9fX2luaXRfXy5weSBiL1Rvb2xzL1Nj
cmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1BsYXRmb3JtSGFuZGxlL19faW5pdF9fLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1Jlc3VsdFdyYXBwZXIv
QmFzZVJlc3VsdFdyYXBwZXIucHkgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGll
cy9SZXN1bHRXcmFwcGVyL0Jhc2VSZXN1bHRXcmFwcGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiNmY3Mjdj
YzI3YjM5NGYzMTUyOTg2NThkNDU4MmU2OTBiZDU5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9SZXN1bHRXcmFwcGVyL0Jhc2VSZXN1bHRX
cmFwcGVyLnB5CkBAIC0wLDAgKzEsMTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBjb2Rp
bmcgOiB1dGYtOAorZnJvbSBhYmMgaW1wb3J0IGFic3RyYWN0bWV0aG9kCisKKworY2xhc3MgQmFz
ZVJlc3VsdFdyYXBwZXIob2JqZWN0KToKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB3
cmFwKHNlbGYsIHJlc3VsdHMpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9SZXN1bHRXcmFwcGVyL01lcmdlUmVzdWx0V3JhcHBl
ci5weSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1Jlc3VsdFdyYXBwZXIv
TWVyZ2VSZXN1bHRXcmFwcGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3ZTliOTIxZjFhNTIyYjM1MmI4ODhh
MDY4N2JhNzljNmIwYTc0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZB
dXRvUnVuL1V0aWxpdGllcy9SZXN1bHRXcmFwcGVyL01lcmdlUmVzdWx0V3JhcHBlci5weQpAQCAt
MCwwICsxLDcxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgY29kaW5nIDogdXRmLTgKK2Zy
b20gQmFzZVJlc3VsdFdyYXBwZXIgaW1wb3J0IEJhc2VSZXN1bHRXcmFwcGVyCitpbXBvcnQgdHlw
ZXMKKworCitjbGFzcyBEaWN0aW9uYXJ5TWVyZ2VyKEJhc2VSZXN1bHRXcmFwcGVyKToKKworICAg
IGRlZiB3cmFwKHNlbGYsIGRpY3RzKToKKyAgICAgICAgaWYgbGVuKGRpY3RzKSA9PSAwOgorICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0ID0ge30KKyAgICAgICAgZm9yIGRpYyBp
biBkaWN0czoKKyAgICAgICAgICAgIHJldCA9IHNlbGYubWVyZ2UocmV0LCBkaWMpCisgICAgICAg
IHJldHVybiByZXQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtZXJnZShjbHMsIGEsIGIp
OgorICAgICAgICBhc3NlcnQoaXNpbnN0YW5jZShhLCB0eXBlKGIpKSkKKyAgICAgICAgYXJnVHlw
ZSA9IHR5cGUoYSkKKyAgICAgICAgIyBzcGVjaWFsIGhhbmRsZSBmb3IgbGlzdCB0eXBlLCBhbmQg
c2hvdWxkIGJlIGhhbmRsZSBiZWZvcmUgZXF1YWwgY2hlY2sKKyAgICAgICAgaWYgYXJnVHlwZSA9
PSB0eXBlcy5MaXN0VHlwZToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICBpZiBh
ID09IGI6CisgICAgICAgICAgICByZXR1cm4gYQorICAgICAgICBpZiBhcmdUeXBlID09IHR5cGVz
LkRpY3RUeXBlOgorICAgICAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgICAgIGZvciBrZXks
IHZhbHVlIGluIGEuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBrZXkgaW4gYjoKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBjbHMubWVyZ2UodmFsdWUsIGJba2V5XSkKKyAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZh
bHVlCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBiLml0ZW1zKCk6CisgICAgICAgICAg
ICAgICAgaWYga2V5IG5vdCBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtr
ZXldID0gdmFsdWUKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgIyBmb3Igb3Ro
ZXIgdHlwZXMKKyAgICAgICAgcmV0dXJuIGEgKyBiCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFp
bl9fJzoKKyAgICBtZXJnZXIgPSBEaWN0aW9uYXJ5TWVyZ2VyKCkKKyAgICBkMSA9IHsKKyAgICAg
ICAgJ1NwZWVkb21ldGVyJzogeworICAgICAgICAgICAgJ21ldHJpY3MnOiB7CisgICAgICAgICAg
ICAgICAgJ1RpbWUnOiBbJ1RvdGFsJ119LCAndGVzdHMnOiB7CisgICAgICAgICAgICAgICAgJ1Zh
bGlpbmFKUy1Ub2RvTVZDJzogeworICAgICAgICAgICAgICAgICAgICAnbWV0cmljcyc6IFsnVG90
YWwnXSwgJ3Rlc3RzJzogeworICAgICAgICAgICAgICAgICAgICAgICAgJ0FkZGluZzEwMEl0ZW1z
JzogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXRyaWNzJzogWydUb3RhbCddLCAn
dGVzdHMnOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTeW5jJzogeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21ldHJpY3MnOiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpbWUnOiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjdXJyZW50JzogWworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDIsIDMsIDQsIDVdXX19fX19fX19fX0K
KyAgICBkMiA9IHsKKyAgICAgICAgJ1NwZWVkb21ldGVyJzogeworICAgICAgICAgICAgJ21ldHJp
Y3MnOiB7CisgICAgICAgICAgICAgICAgJ1RpbWUnOiBbJ1RvdGFsJ119LCAndGVzdHMnOiB7Cisg
ICAgICAgICAgICAgICAgJ1ZhbGlpbmFKUy1Ub2RvTVZDJzogeworICAgICAgICAgICAgICAgICAg
ICAnbWV0cmljcyc6IFsnVG90YWwnXSwgJ3Rlc3RzJzogeworICAgICAgICAgICAgICAgICAgICAg
ICAgJ0FkZGluZzEwMEl0ZW1zJzogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXRy
aWNzJzogWydUb3RhbCddLCAndGVzdHMnOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdTeW5jJzogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21ldHJp
Y3MnOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpbWUnOiB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjdXJyZW50Jzog
WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDIsIDMs
IDQsIDUsIDZdXX19fX19fX19fX0KKyAgICBwcmludCBtZXJnZXIubWVyZ2UoZDEsIGQyKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUmVzdWx0V3JhcHBl
ci9SZXN1bHRXcmFwcGVyRmFjdG9yeS5weSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRp
bGl0aWVzL1Jlc3VsdFdyYXBwZXIvUmVzdWx0V3JhcHBlckZhY3RvcnkucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzBmMTI1ODFkMzI0ZTJiOWE1ZTUwYjc1YzFiNWI4MzcyNDQ5YWE0NAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1Jlc3VsdFdyYXBwZXIvUmVz
dWx0V3JhcHBlckZhY3RvcnkucHkKQEAgLTAsMCArMSw1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjIGNvZGluZyA6IHV0Zi04CisKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2Zyb20gLi5H
ZW5lcmljSGFuZGxlRmFjdG9yeSBpbXBvcnQgR2VuZXJpY0hhbmRsZUZhY3RvcnkKKworaGFuZGxl
RmlsZU5hbWUgPSAnUmVzdWx0V3JhcHBlcnMuanNvbicKK3RyeToKKyAgICBoYW5kbGVzID0ganNv
bi5sb2FkKAorICAgICAgICBvcGVuKAorICAgICAgICAgICAgb3MucGF0aC5qb2luKAorICAgICAg
ICAgICAgICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgICAgICAgICAgaGFu
ZGxlRmlsZU5hbWUpLAorICAgICAgICAgICAgJ3InKSkKK2V4Y2VwdDoKKyAgICBwcmludCAnTG9h
ZGluZyAlcyBmYWlsZWQsIHN0YXJ0IHVzaW5nIHByZS1kZWZpbmVkIGhhbmRsZXMnICUgKGhhbmRs
ZUZpbGVOYW1lKQorICAgIGhhbmRsZXMgPSB7CisgICAgICAgICdNZXJnZVJlc3VsdFdyYXBwZXIn
OiB7CisgICAgICAgICAgICAnZmlsZVBhdGgnOiAnUmVzdWx0V3JhcHBlci5NZXJnZVJlc3VsdFdy
YXBwZXInLAorICAgICAgICAgICAgJ21vZHVsZU5hbWUnOiAnRGljdGlvbmFyeU1lcmdlcid9fQor
CitSZXN1bHRXcmFwcGVyRmFjdG9yeSA9IEdlbmVyaWNIYW5kbGVGYWN0b3J5KGhhbmRsZXMpCisK
K2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWVyZ2VyID0gUmVzdWx0V3JhcHBlckZh
Y3RvcnkuY3JlYXRlKFsnTWVyZ2VSZXN1bHRXcmFwcGVyJ10pCisgICAgZDEgPSB7CisgICAgICAg
ICdTcGVlZG9tZXRlcic6IHsKKyAgICAgICAgICAgICdtZXRyaWNzJzogeworICAgICAgICAgICAg
ICAgICdUaW1lJzogWydUb3RhbCddfSwgJ3Rlc3RzJzogeworICAgICAgICAgICAgICAgICdWYWxp
aW5hSlMtVG9kb01WQyc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ21ldHJpY3MnOiBbJ1RvdGFs
J10sICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdBZGRpbmcxMDBJdGVtcyc6
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWV0cmljcyc6IFsnVG90YWwnXSwgJ3Rl
c3RzJzogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU3luYyc6IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXRyaWNzJzogeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaW1lJzogeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnY3VycmVudCc6IFsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAyLCAzLCA0LCA1XV19fX19fX19fX19Cisg
ICAgZDIgPSB7CisgICAgICAgICdTcGVlZG9tZXRlcic6IHsKKyAgICAgICAgICAgICdtZXRyaWNz
JzogeworICAgICAgICAgICAgICAgICdUaW1lJzogWydUb3RhbCddfSwgJ3Rlc3RzJzogeworICAg
ICAgICAgICAgICAgICdWYWxpaW5hSlMtVG9kb01WQyc6IHsKKyAgICAgICAgICAgICAgICAgICAg
J21ldHJpY3MnOiBbJ1RvdGFsJ10sICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICdBZGRpbmcxMDBJdGVtcyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWV0cmlj
cyc6IFsnVG90YWwnXSwgJ3Rlc3RzJzogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnU3luYyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXRyaWNz
JzogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaW1lJzogewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3VycmVudCc6IFsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAyLCAzLCA0
LCA1LCA2XV19fX19fX19fX19CisgICAgcHJpbnQgbWVyZ2VyLm1lcmdlKGQxLCBkMikKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1Jlc3VsdFdyYXBwZXIv
UmVzdWx0V3JhcHBlcnMuanNvbiBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVz
L1Jlc3VsdFdyYXBwZXIvUmVzdWx0V3JhcHBlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZGZmZTg2ZGI0
ZTMwN2YzNzRhNWMxNzY5ZWM3OTVmYmZhMDQ4YTExCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUmVzdWx0V3JhcHBlci9SZXN1bHRXcmFwcGVy
cy5qc29uCkBAIC0wLDAgKzEsNiBAQAoreworICAiTWVyZ2VSZXN1bHRXcmFwcGVyIjogeworICAg
ICJtb2R1bGVOYW1lIjogIkRpY3Rpb25hcnlNZXJnZXIiLCAKKyAgICAiZmlsZVBhdGgiOiAiUmVz
dWx0V3JhcHBlci5NZXJnZVJlc3VsdFdyYXBwZXIiCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGll
cy9SZXN1bHRXcmFwcGVyL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9V
dGlsaXRpZXMvUmVzdWx0V3JhcHBlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIy
ZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L1BlcmZBdXRvUnVuL1V0aWxpdGllcy9VdGlscy5weSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9S
dW4vVXRpbGl0aWVzL1V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzYWNlOTAzYzI1NjI4YjY5YTgzNDYz
NGE5NWEyOGJlMDA2NzgzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZB
dXRvUnVuL1V0aWxpdGllcy9VdGlscy5weQpAQCAtMCwwICsxLDUyIEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMgY29kaW5nOiB1dGYtOAoraW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBv
cnQgbG9nZ2luZworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignUGVyZkF1dG9SdW4nKQor
CisKK2NsYXNzIE1vZHVsZU5vdEZvdW5kRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKwor
ZGVmIGxvYWRNb2R1bGUobW9kdWxlRGVzYyk6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBnZXRh
dHRyKF9faW1wb3J0X18obW9kdWxlRGVzY1snZmlsZVBhdGgnXSwgZ2xvYmFscygpLCBsb2NhbHMo
KSwgbW9kdWxlRGVzY1sKKyAgICAgICAgICAgICAgICAgICAgICAnbW9kdWxlTmFtZSddLCAtMSks
IG1vZHVsZURlc2NbJ21vZHVsZU5hbWUnXSkKKyAgICAgICAgcmV0dXJuIHJldAorICAgIGV4Y2Vw
dCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcmFpc2UgTW9kdWxlTm90Rm91bmRFcnJvcigKKyAg
ICAgICAgICAgICdNb2R1bGUgKCVzKSB3aXRoIHBhdGgoJXMpIGlzIG5vdCBmb3VuZCcgJQorICAg
ICAgICAgICAgKG1vZHVsZURlc2NbJ2ZpbGVQYXRoJ10sIG1vZHVsZURlc2NbJ21vZHVsZU5hbWUn
XSkpCisKKworZGVmIGdldFBhdGhGcm9tUHJvalJvb3QocmVsYXRpdmVQYXRoVG9Qcm9qUm9vdCk6
CisgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1l
KAorICAgICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpLCBy
ZWxhdGl2ZVBhdGhUb1Byb2pSb290KSkKKworCitjbGFzcyBUaW1lb3V0RXJyb3IoRXhjZXB0aW9u
KToKKyAgICBwYXNzCisKKworY2xhc3MgdGltZW91dDoKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBzZWNvbmRzPTEsIGVycm9yX21lc3NhZ2U9J1RpbWVvdXQnKToKKyAgICAgICAgc2VsZi5zZWNv
bmRzID0gc2Vjb25kcworICAgICAgICBzZWxmLmVycm9yX21lc3NhZ2UgPSBlcnJvcl9tZXNzYWdl
CisKKyAgICBkZWYgaGFuZGxlX3RpbWVvdXQoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgICAg
IHJhaXNlIFRpbWVvdXRFcnJvcihzZWxmLmVycm9yX21lc3NhZ2UpCisKKyAgICBkZWYgX19lbnRl
cl9fKHNlbGYpOgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBzZWxmLmhh
bmRsZV90aW1lb3V0KQorICAgICAgICBzaWduYWwuYWxhcm0oc2VsZi5zZWNvbmRzKQorCisgICAg
ZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBzaWdu
YWwuYWxhcm0oMCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHByaW50IGdl
dFBhdGhGcm9tUHJvalJvb3QoJy4uLy4uL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvJykK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL19faW5pdF9f
LnB5IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvX19pbml0X18ucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9fX2luaXRfXy5weSBiL1Rvb2xzL1Njcmlw
dHMvUGVyZkF1dG9SdW4vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRi
OGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251460</attachid>
            <date>2015-04-23 11:46:32 -0700</date>
            <delta_ts>2015-04-23 19:19:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144038-20150423114527.patch</filename>
            <type>text/plain</type>
            <size>54137</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMTM2CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1Bl
cmZBdXRvUnVuL1BhdGNoZXMvSmV0U3RyZWFtLnBhdGNoIGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0
b1J1bi9QYXRjaGVzL0pldFN0cmVhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTBlNTc1MzNhZGRmOWQ2
MmEwYjRmYjZjN2MyMWIwNGJlNjc0MDllCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy9QZXJmQXV0b1J1bi9QYXRjaGVzL0pldFN0cmVhbS5wYXRjaApAQCAtMCwwICsxLDU5IEBACitk
aWZmIC0tZ2l0IGEvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9KZXRTdHJlYW1Ecml2ZXIuanMg
Yi9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL0pldFN0cmVhbURyaXZlci5qcworaW5kZXggNzNl
ZTQyMC4uNjBmNTg3YyAxMDA2NDQKKy0tLSBhL0pldFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvSmV0
U3RyZWFtRHJpdmVyLmpzCisrKysgYi9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL0pldFN0cmVh
bURyaXZlci5qcworQEAgLTQ0OCw2ICs0NDgsMTQgQEAgdmFyIEpldFN0cmVhbSA9IChmdW5jdGlv
bigpIHsKKyAKKyAgICAgICAgIHJldHVybiByYXdSZXN1bHRzOworICAgICB9CisrICAgIAorKyAg
ICBmdW5jdGlvbiBjb21wdXRlUmVmaW5lZFJlc3VsdHMoKXsKKysgICAgICAgIHZhciByZXN1bHRz
ID0ge307CisrICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJlbmNobWFya3MubGVuZ3RoOyAr
K2kpIHsKKysgICAgICAgICAgICByZXN1bHRzW2JlbmNobWFya3NbaV0ubmFtZV0gPSB7Im1ldHJp
Y3MiIDogeyJTY29yZSIgOiB7ImN1cnJlbnQiIDogW2JlbmNobWFya3NbaV0udGltZXNdfX19Owor
KyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIHsiSmV0U3RyZWFtIjogeyJtZXRyaWNzIiA6IHsi
U2NvcmUiIDogWyJHZW9tZXRyaWMiXX0sICJ0ZXN0cyIgOiByZXN1bHRzfX07CisrICAgIH0KKyAK
KyAgICAgZnVuY3Rpb24gZW5kKCkKKyAgICAgeworQEAgLTQ1OCw2ICs0NjYsMjMgQEAgdmFyIEpl
dFN0cmVhbSA9IChmdW5jdGlvbigpIHsKKyAgICAgICAgIGlzUnVubmluZyA9IGZhbHNlOworICAg
ICAgICAgaGFzQWxyZWFkeVJ1biA9IHRydWU7CisgICAgICAgICBwcmVwYXJlVG9TdGFydCgpOwor
KyAgICAgICAgLy8gc3VibWl0IHJlc3VsdCB0byBzZXJ2ZXIKKysgICAgICAgIHJlc3VsdHMgPSBK
U09OLnN0cmluZ2lmeShjb21wdXRlUmVmaW5lZFJlc3VsdHMoKSk7CisrICAgICAgICB2YXIgeGhy
ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisrICAgICAgICB4aHIub3BlbigiUE9TVCIsICIvcmVw
b3J0Iik7CisrICAgICAgIAorKyAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQt
dHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CisrICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRl
cigiQ29udGVudC1sZW5ndGgiLCByZXN1bHRzLmxlbmd0aCk7CisrICAgICAgICB4aHIuc2V0UmVx
dWVzdEhlYWRlcigiQ29ubmVjdGlvbiIsICJjbG9zZSIpOworKyAKKysgICAgICAgIHhoci5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKysgICAgICAgIGlmKHhoci5yZWFkeVN0YXRl
ID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUgJiYgeGhyLnN0YXR1cyA9PSAyMDApIHsKKysgICAgICAg
ICAgICAgICAgY2xvc2VSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisrICAgICAgICAg
ICAgICAgIGNsb3NlUmVxdWVzdC5vcGVuKCJHRVQiLCAiL3NodXRkb3duIik7CisrICAgICAgICAg
ICAgICAgIGNsb3NlUmVxdWVzdC5zZW5kKCkKKysgICAgICAgICAgICB9CisrICAgICAgICB9Cisr
ICAgICAgICB4aHIuc2VuZChyZXN1bHRzKTsKKyAgICAgfQorIAorICAgICBmdW5jdGlvbiBpdGVy
YXRlKCkKK2RpZmYgLS1naXQgYS9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwg
Yi9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwKK2luZGV4IGUyNzUzNWMuLjAw
MTA4N2QgMTAwNjQ0CistLS0gYS9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwK
KysrKyBiL0pldFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvaW5kZXguaHRtbAorQEAgLTM0LDggKzM0
LDEwIEBACisgICAgIHdpbmRvdy5vbmVycm9yID0gZnVuY3Rpb24oKSB7IGFsbElzR29vZCA9IGZh
bHNlOyB9CisgCisgICAgIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7CistICAgICAgICBpZiAoYWxs
SXNHb29kKQorKyAgICAgICAgaWYgKGFsbElzR29vZCkgeworICAgICAgICAgICAgIEpldFN0cmVh
bS5pbml0aWFsaXplKCk7CisrICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRv
dy5sb2NhdGlvbiA9ICJqYXZhc2NyaXB0OkpldFN0cmVhbS5zdGFydCgpIn0sIDMwMDApOworKyAg
ICAgICAgfQorICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJib2R5IikuaW5uZXJIVE1MID0gIjxoMT5FUlJPUjwvaDE+PHA+RW5jb3VudGVyZWQgZXJy
b3JzIGR1cmluZyBwYWdlIGxvYWQuIFJlZnVzaW5nIHRvIHJ1biBhIHBhcnRpYWwgYmVuY2htYXJr
IHN1aXRlLjwvcD4iOworICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRv
UnVuL1BhdGNoZXMvU3BlZWRvbWV0ZXIucGF0Y2ggYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVu
L1BhdGNoZXMvU3BlZWRvbWV0ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzNiMGYzMmUxZWIzMjQ0YmMw
MDQ0ODQ1MmI0ZjU3ZDA4MjkzMDU5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
UGVyZkF1dG9SdW4vUGF0Y2hlcy9TcGVlZG9tZXRlci5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAor
ZGlmZiAtLWdpdCBhL1NwZWVkb21ldGVyL0Z1bGwuaHRtbCBiL1NwZWVkb21ldGVyL0Z1bGwuaHRt
bAoraW5kZXggNDE5YjlmMi4uMGIwNGM2OSAxMDA2NDQKKy0tLSBhL1NwZWVkb21ldGVyL0Z1bGwu
aHRtbAorKysrIGIvU3BlZWRvbWV0ZXIvRnVsbC5odG1sCitAQCAtNyw3ICs3LDYgQEAKKyAgICAg
PHNjcmlwdCBzcmM9InJlc291cmNlcy9tYWluLmpzIiBkZWZlcj48L3NjcmlwdD4KKyAgICAgPHNj
cmlwdCBzcmM9InJlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzIiBkZWZlcj48L3NjcmlwdD4K
KyAgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9iZW5jaG1hcmstcmVwb3J0LmpzIiBkZWZlcj48
L3NjcmlwdD4KKy0gICAgPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzIiBk
ZWZlcj48L3NjcmlwdD4KKyAgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0cy5qcyIgZGVm
ZXI+PC9zY3JpcHQ+CisgPC9oZWFkPgorIDxib2R5PgorZGlmZiAtLWdpdCBhL1NwZWVkb21ldGVy
L3Jlc291cmNlcy9iZW5jaG1hcmstcmVwb3J0LmpzIGIvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL2Jl
bmNobWFyay1yZXBvcnQuanMKK2luZGV4IGM0YjRjNjQuLmM0NDUzY2QgMTAwNjQ0CistLS0gYS9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJlcG9ydC5qcworKysrIGIvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL2JlbmNobWFyay1yZXBvcnQuanMKK0BAIC0xLDE2ICsxLDkgQEAKKyAvLyBU
aGlzIGZpbGUgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gcmVwb3J0IHJlc3VsdHMgYXMgbmVlZGVkLgor
IAorIChmdW5jdGlvbiAoKSB7CistICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgJiYgbG9jYXRp
b24uc2VhcmNoICE9ICc/d2Via2l0JyAmJiBsb2NhdGlvbi5oYXNoICE9ICcjd2Via2l0JykKKy0g
ICAgICAgIHJldHVybjsKKy0KKyAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgCistICAgIHZhciBzY3JpcHRFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CistICAgIHNjcmlwdEVsZW1lbnQuc3Jj
ID0gJy4uL3Jlc291cmNlcy9ydW5uZXIuanMnOworLSAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENo
aWxkKHNjcmlwdEVsZW1lbnQpOworLQorICAgICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKKyAgICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0g
J3ByZSB7IHBhZGRpbmctdG9wOiA2MDBweDsgfSc7CisgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5k
Q2hpbGQoc3R5bGVFbGVtZW50KTsKK0BAIC0zNiwxMCArMjksOCBAQAorICAgICAgICAgICAgICAg
ICAgICAgbmFtZTogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0b3I6IGFnZ3Jl
Z2F0b3J9OworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBQZXJmVGVzdFJ1bm5lci5wcmVw
YXJlVG9NZWFzdXJlVmFsdWVzQXN5bmMoY3JlYXRlVGVzdChudWxsLCAnVG90YWwnKSk7CisgICAg
ICAgICB9LAorICAgICAgICAgZGlkUnVuU3VpdGVzOiBmdW5jdGlvbiAobWVhc3VyZWRWYWx1ZXMp
IHsKKy0gICAgICAgICAgICBQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhtZWFzdXJl
ZFZhbHVlcy50b3RhbCk7CisgICAgICAgICAgICAgdmFsdWVzQnlJdGVyYXRpb24ucHVzaChtZWFz
dXJlZFZhbHVlcy50ZXN0cyk7CisgICAgICAgICB9LAorICAgICAgICAgZGlkRmluaXNoTGFzdEl0
ZXJhdGlvbjogZnVuY3Rpb24gKCkgeworQEAgLTUyLDE5ICs0MywzMCBAQAorICAgICAgICAgICAg
ICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgIHZhbHVlcy5hZ2dyZWdh
dG9yID0gYWdncmVnYXRvcjsKKyAgICAgICAgICAgICB9CistCisrICAgICAgICAgICAgdmFyIGRp
Y3QgPSB7fQorKyAgICAgICAgICAgIGZ1bmN0aW9uIGFkZFRvRGljdGlvbmFyeVZhbHVlKHZhbHVl
LCBzdWl0ZU5hbWUsIHRlc3ROYW1lLCBzdWJ0ZXN0TmFtZSkgeworKyAgICAgICAgICAgICAgICBk
aWN0WyJTcGVlZG9tZXRlciJdID0gZGljdFsiU3BlZWRvbWV0ZXIiXSB8fCB7ICJtZXRyaWNzIiA6
IHsgIlRpbWUiIDogWyAiVG90YWwiLCBdIH0sICJ0ZXN0cyIgOiB7fX07CisrICAgICAgICAgICAg
ICAgIGRpY3RbIlNwZWVkb21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXSA9IGRpY3RbIlNwZWVk
b21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXSB8fCB7Im1ldHJpY3MiIDogeyAiVGltZSIgOiBb
ICJUb3RhbCIsIF0gfSwgInRlc3RzIiA6IHt9fTsKKysgICAgICAgICAgICAgICAgZGljdFsiU3Bl
ZWRvbWV0ZXIiXVsidGVzdHMiXVtzdWl0ZU5hbWVdWyJ0ZXN0cyJdW3Rlc3ROYW1lXSA9IGRpY3Rb
IlNwZWVkb21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV0gfHwg
eyAibWV0cmljcyIgOiB7ICJUaW1lIiA6IFsgIlRvdGFsIiwgXSB9LCAidGVzdHMiIDoge319Owor
KyAgICAgICAgICAgICAgICBkaWN0WyJTcGVlZG9tZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV1b
InRlc3RzIl1bdGVzdE5hbWVdWyJ0ZXN0cyJdW3N1YnRlc3ROYW1lXSA9IGRpY3RbIlNwZWVkb21l
dGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV1bInRlc3RzIl1bc3Vi
dGVzdE5hbWVdIHx8IHsgIm1ldHJpY3MiIDogeyAiVGltZSIgOiB7ICJjdXJyZW50IiA6IFtbXV0g
fSB9fTsKKysgICAgICAgICAgICAgICAgZGljdFsiU3BlZWRvbWV0ZXIiXVsidGVzdHMiXVtzdWl0
ZU5hbWVdWyJ0ZXN0cyJdW3Rlc3ROYW1lXVsidGVzdHMiXVtzdWJ0ZXN0TmFtZV1bIm1ldHJpY3Mi
XVsiVGltZSJdWyJjdXJyZW50Il1bMF0ucHVzaCh2YWx1ZSk7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgIHZhbHVlc0J5SXRlcmF0aW9uLmZvckVhY2goZnVuY3Rp
b24gKG1lYXN1cmVkVmFsdWVzKSB7CisgICAgICAgICAgICAgICAgIGZvciAodmFyIHN1aXRlTmFt
ZSBpbiBtZWFzdXJlZFZhbHVlcykgeworICAgICAgICAgICAgICAgICAgICAgdmFyIHN1aXRlID0g
bWVhc3VyZWRWYWx1ZXNbc3VpdGVOYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgIGZvciAodmFy
IHRlc3ROYW1lIGluIHN1aXRlLnRlc3RzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHRlc3QgPSBzdWl0ZS50ZXN0c1t0ZXN0TmFtZV07CistICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIgc3VidGVzdE5hbWUgaW4gdGVzdC50ZXN0cykKKysgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBzdWJ0ZXN0TmFtZSBpbiB0ZXN0LnRlc3RzKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZFRvTWVhc3VyZWRWYWx1ZSh0ZXN0LnRlc3RzW3N1YnRlc3ROYW1l
XSwgc3VpdGVOYW1lICsgJy8nICsgdGVzdE5hbWUgKyAnLycgKyBzdWJ0ZXN0TmFtZSk7CisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvRGljdGlvbmFyeVZhbHVlKHRlc3QudGVzdHNb
c3VidGVzdE5hbWVdLCBzdWl0ZU5hbWUsIHRlc3ROYW1lLCBzdWJ0ZXN0TmFtZSk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvTWVhc3Vy
ZWRWYWx1ZSh0ZXN0LnRvdGFsLCBzdWl0ZU5hbWUgKyAnLycgKyB0ZXN0TmFtZSwgJ1RvdGFsJyk7
CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBhZGRUb01lYXN1
cmVkVmFsdWUoc3VpdGUudG90YWwsIHN1aXRlTmFtZSwgJ1RvdGFsJyk7CisgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICB9KTsKKysgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IEpTT04u
c3RyaW5naWZ5KGRpY3QpOworIAorICAgICAgICAgICAgIHZhciBmdWxsTmFtZXMgPSBuZXcgQXJy
YXk7CisgICAgICAgICAgICAgZm9yICh2YXIgZnVsbE5hbWUgaW4gbWVhc3VyZWRWYWx1ZXNCeUZ1
bGxOYW1lKQorQEAgLTcyLDggKzc0LDIyIEBACisgCisgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBmdWxsTmFtZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgdmFyIHZh
bHVlcyA9IG1lYXN1cmVkVmFsdWVzQnlGdWxsTmFtZVtmdWxsTmFtZXNbaV1dOworLSAgICAgICAg
ICAgICAgICBQZXJmVGVzdFJ1bm5lci5yZXBvcnRWYWx1ZXMoY3JlYXRlVGVzdChmdWxsTmFtZXNb
aV0sIHZhbHVlcy5hZ2dyZWdhdG9yLCBpICsgMSA9PSBmdWxsTmFtZXMubGVuZ3RoKSwgdmFsdWVz
KTsKKyAgICAgICAgICAgICB9CisrICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVx
dWVzdCgpOworKyAgICAgICAgICAgIHhoci5vcGVuKCJQT1NUIiwgIi9yZXBvcnQiKTsKKysgCisr
ICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJhcHBsaWNh
dGlvbi9qc29uIik7CisrICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQt
bGVuZ3RoIiwgcmVzdWx0cy5sZW5ndGgpOworKyAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVh
ZGVyKCJDb25uZWN0aW9uIiwgImNsb3NlIik7CisrIAorKyAgICAgICAgICAgIHhoci5vbnJlYWR5
c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKysgICAgICAgICAgICAgICAgaWYoeGhyLnJlYWR5
U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSAmJiB4aHIuc3RhdHVzID09IDIwMCkgeworKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGNsb3NlUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgp
OworKyAgICAgICAgICAgICAgICAgICAgY2xvc2VSZXF1ZXN0Lm9wZW4oIkdFVCIsICIvc2h1dGRv
d24iKTsKKysgICAgICAgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5zZW5kKCkKKysgICAgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICB4aHIuc2VuZChyZXN1bHRz
KTsKKyAgICAgICAgIH0KKyAgICAgfTsKKyB9KSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9QZXJmQXV0b1J1bi9QZXJmQXV0b1J1bi5weSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4v
UGVyZkF1dG9SdW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzRmMjI0Y2FjYWY0NjZiMDlhYjZlNjQzMTEwY2Vm
YmI0ZWQzMTJlYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4v
UGVyZkF1dG9SdW4ucHkKQEAgLTAsMCArMSw1NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisj
IGNvZGluZyA6IHV0Zi04CitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitmcm9tIFV0
aWxpdGllcy5CZW5jaG1hcmtSdW5uZXIgaW1wb3J0IEJlbmNobWFya1J1bm5lcgorCisKK2xvZ2dl
ciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1bicpCitsb2dnZXIuc2V0TGV2ZWwobG9n
Z2luZy5ERUJVRykKK2NoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKK2NoLnNldExldmVsKGxv
Z2dpbmcuREVCVUcpCitmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcigKKyAgICAnJShhc2N0
aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCitjaC5zZXRG
b3JtYXR0ZXIoZm9ybWF0dGVyKQorbG9nZ2VyLmFkZEhhbmRsZXIoY2gpCisKKworZGVmIG1haW4o
KToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgICAgICAgZGVzY3Jp
cHRpb249J0F1dG9tYXRlIHRoZSBicm93c2VyIGJhc2VkIHBlcmZvcm1hbmNlIGJlbmNobWFya3Mn
KQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cHV0LWZpbGUnLCBkZXN0PSdvdXRwdXQn
LCBkZWZhdWx0PU5vbmUpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1idWlsZC1kaXJlY3Rv
cnknLCBkZXN0PSdidWlsZERpcicsIHJlcXVpcmVkPVRydWUpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLS1wbGFuJywgZGVzdD0ncGxhbicsIHJlcXVpcmVkPVRydWUpCisgICAgcGFyc2VyLmFk
ZF9hcmd1bWVudCgKKyAgICAgICAgJy0tcGxhdGZvcm0nLAorICAgICAgICBkZXN0PSdwbGF0Zm9y
bScsCisgICAgICAgIGRlZmF1bHQ9J29zeCcsCisgICAgICAgIGNob2ljZXM9WworICAgICAgICAg
ICAgJ29zeCcsCisgICAgICAgICAgICAnaW9zJywKKyAgICAgICAgICAgICd3aW5kb3dzJ10sCisg
ICAgICAgIHJlcXVpcmVkPVRydWUpCisgICAgIyBGSVhNRTogU2hvdWxkIHdlIGFkZCBjaHJvbWUg
YXMgYW4gb3B0aW9uPyBXZWxsLCBjaHJvbWUgdXNlcyB3ZWJraXQgaW4gaU9TLgorICAgIHBhcnNl
ci5hZGRfYXJndW1lbnQoCisgICAgICAgICctLWJyb3dzZXInLAorICAgICAgICBkZXN0PSdicm93
c2VyJywKKyAgICAgICAgZGVmYXVsdD0nc2FmYXJpJywKKyAgICAgICAgY2hvaWNlcz1bCisgICAg
ICAgICAgICAnc2FmYXJpJywKKyAgICAgICAgICAgICdjaHJvbWUnXSwKKyAgICAgICAgcmVxdWly
ZWQ9VHJ1ZSkKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGxvZ2dlci5pbmZv
KCdJbml0aWFsaXppbmcgcHJvZ3JhbSB3aXRoIGZvbGxvd2luZyBwYXJhbWV0ZXJzJykKKyAgICBs
b2dnZXIuaW5mbygnXHRvdXRwdXQgZmlsZSBuYW1lXHQ6ICVzJyAlIGFyZ3Mub3V0cHV0KQorICAg
IGxvZ2dlci5pbmZvKCdcdGJ1aWxkIGRpcmVjdG9yeVx0OiAlcycgJSBhcmdzLmJ1aWxkRGlyKQor
ICAgIGxvZ2dlci5pbmZvKCdcdHBsYW4gbmFtZVx0OiAlcycsIGFyZ3MucGxhbikKKyAgICBydW5u
ZXIgPSBCZW5jaG1hcmtSdW5uZXIoCisgICAgICAgIGFyZ3MucGxhbiwKKyAgICAgICAgYXJncy5i
dWlsZERpciwKKyAgICAgICAgYXJncy5vdXRwdXQsCisgICAgICAgIGFyZ3MucGxhdGZvcm0sCisg
ICAgICAgIGFyZ3MuYnJvd3NlcikKKyAgICBydW5uZXIuZXhlY3V0ZSgpCisKK2lmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1Bl
cmZBdXRvUnVuL1BsYW5zL2pldHN0cmVhbS5wbGFuIGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1
bi9QbGFucy9qZXRzdHJlYW0ucGxhbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYjU2N2M0YmNmYTMxMDVlOWJjMDdl
OGY5ZGE5ODYwNzc3MjY0OTc5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9QZXJm
QXV0b1J1bi9QbGFucy9qZXRzdHJlYW0ucGxhbgpAQCAtMCwwICsxLDE1IEBACit7CisgICAgImh0
dHBfc2VydmVyIjogIlNpbXBsZUhUVFBTZXJ2ZXJIYW5kbGUiLCAKKyAgICAiYmVuY2htYXJrcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgInRpbWVvdXQiIDogNjAwLAorICAgICAgICAgICAg
ImNvdW50IjogNSwKKyAgICAgICAgICAgICJiZW5jaG1hcmtfaGFuZGxlIjogIkpldFN0cmVhbUJl
bmNobWFya0hhbmRsZSIsCisgICAgICAgICAgICAib3JpZ2luYWxfYmVuY2htYXJrIjogIi4uLy4u
Ly4uL1BlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtIiwKKyAgICAgICAgICAgICJiZW5jaG1hcmtf
cGF0Y2giOiAiUGF0Y2hlcy9KZXRTdHJlYW0ucGF0Y2giLAorICAgICAgICAgICAgImVudHJ5X3Bv
aW50IjogIkpldFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvaW5kZXguaHRtbCIsCisgICAgICAgICAg
ICAicmVzdWx0X3dyYXBwZXIiOiAiTWVyZ2VSZXN1bHRXcmFwcGVyIiwKKyAgICAgICAgICAgICJv
dXRwdXRfZmlsZSI6ICJqZXRzdHJlYW0ucmVzdWx0IgorICAgICAgICB9CisgICAgXQorfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9QbGFucy9zcGVlZG9tZXRlci5wbGFu
IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9QbGFucy9zcGVlZG9tZXRlci5wbGFuCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRkMjlhOGExNzRkZTI1YTg0ZTlhNzYzMDU0ZTJlN2Q3NDZmMjlmODYKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1BsYW5zL3NwZWVkb21ldGVyLnBs
YW4KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJiZW5jaG1hcmtzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiYmVuY2htYXJrX2hhbmRsZSI6ICJHZW5lcmljQmVuY2htYXJrSGFuZGxlIiwK
KyAgICAgICAgICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiUGF0Y2hlcy9TcGVlZG9tZXRlci5wYXRj
aCIsCisgICAgICAgICAgICAib3JpZ2luYWxfYmVuY2htYXJrIjogIi4uLy4uLy4uL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIiLAorICAgICAgICAgICAgImNvdW50IjogNSwKKyAgICAgICAg
ICAgICJlbnRyeV9wb2ludCI6ICJTcGVlZG9tZXRlci9GdWxsLmh0bWwiLAorICAgICAgICAgICAg
Im91dHB1dF9maWxlIjogInNwZWVkb21ldGVyLnJlc3VsdCIsCisgICAgICAgICAgICAicmVzdWx0
X3dyYXBwZXIiOiAiTWVyZ2VSZXN1bHRXcmFwcGVyIiwKKyAgICAgICAgICAgICJ0aW1lb3V0Ijog
NjAwCisgICAgICAgIH0KKyAgICBdLAorICAgICJodHRwX3NlcnZlciI6ICJTaW1wbGVIVFRQU2Vy
dmVySGFuZGxlIgorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9SRUFE
TUUubWQgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1JFQURNRS5tZApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
NjViNDNkODMzYTM1NTk4ZjRmOGYxNzU3MjIwNmQ0YzM3NTZlNDhmCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9SRUFETUUubWQKQEAgLTAsMCArMSwxMjIgQEAK
KyMgUGVyZkF1dG9SdW4KK1RoaXMgaXMgYSB0b29sIGZvciBhdXRvbWF0aW5nIHRoZSBicm93c2Vy
IGJhc2VkIGJlbmNobWFya3MoZS5nLiBTcGVlZG9tZXRlciwgSmV0U3RyZWFtKQorIyMgUHJvamVj
dCBTdHJ1Y3R1cmUKK2BgYAorUGVyZkF1dG9SdW4KK+KUnOKUgOKUgCBQYXRjaGVzCivilILCoMKg
IOKUnOKUgOKUgCBKZXRTdHJlYW0ucGF0Y2gKK+KUgsKgwqAg4pSU4pSA4pSAIFNwZWVkb21ldGVy
LnBhdGNoCivilJzilIDilIAgUGVyZkF1dG9SdW4ucHkKK+KUnOKUgOKUgCBQbGFucwor4pSCwqDC
oCDilJzilIDilIAgamV0c3RyZWFtLnBsYW4KK+KUgsKgwqAg4pSU4pSA4pSAIHNwZWVkb21ldGVy
LnBsYW4KK+KUnOKUgOKUgCBSRUFETUUubWQKK+KUnOKUgOKUgCBVdGlsaXRpZXMKK+KUgsKgwqAg
4pSc4pSA4pSAIEJlbmNobWFya0hhbmRsZQor4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBCYXNl
QmVuY2htYXJrSGFuZGxlLnB5CivilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIEJlbmNobWFya0hh
bmRsZUZhY3RvcnkucHkKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgQmVuY2htYXJrSGFuZGxl
cy5qc29uCivilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIEdlbmVyaWNCZW5jaG1hcmtIYW5kbGUu
cHkKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgSmV0U3RyZWFtQmVuY2htYXJrSGFuZGxlLnB5
CivilILCoMKgIOKUgsKgwqAg4pSU4pSA4pSAIF9faW5pdF9fLnB5CivilILCoMKgIOKUnOKUgOKU
gCBCZW5jaG1hcmtSdW5uZXIucHkKK+KUgsKgwqAg4pSc4pSA4pSAIEdlbmVyaWNIYW5kbGVGYWN0
b3J5LnB5CivilILCoMKgIOKUnOKUgOKUgCBIVFRQSGFuZGxlCivilILCoMKgIOKUgsKgwqAg4pSc
4pSA4pSAIEhUVFBIYW5kbGUucHkKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgSFRUUEhhbmRs
ZUZhY3RvcnkucHkKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgSFRUUEhhbmRsZXMuanNvbgor
4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBIVFRQU2VydmVyCivilILCoMKgIOKUgsKgwqAg4pSC
wqDCoCDilJTilIDilIAgVHdpc3RlZEhUVFBTZXJ2ZXIucHkKK+KUgsKgwqAg4pSCwqDCoCDilJzi
lIDilIAgU2ltcGxlSFRUUEhhbmRsZS5weQor4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBfX2lu
aXRfXy5weQor4pSCwqDCoCDilJzilIDilIAgUGxhdGZvcm1IYW5kbGUKK+KUgsKgwqAg4pSCwqDC
oCDilJzilIDilIAgT1NYQ2hyb21lSGFuZGxlLnB5CivilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSA
IE9TWFNhZmFyaUhhbmRsZS5weQor4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBQbGF0Zm9ybUhh
bmRsZS5weQor4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBQbGF0Zm9ybUhhbmRsZUZhY3Rvcnku
cHkKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgUGxhdGZvcm1IYW5kbGVzLmpzb24KK+KUgsKg
wqAg4pSCwqDCoCDilJTilIDilIAgX19pbml0X18ucHkKK+KUgsKgwqAg4pSc4pSA4pSAIFJlc3Vs
dFdyYXBwZXIKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgQmFzZVJlc3VsdFdyYXBwZXIucHkK
K+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgTWVyZ2VSZXN1bHRXcmFwcGVyLnB5CivilILCoMKg
IOKUgsKgwqAg4pSc4pSA4pSAIFJlc3VsdFdyYXBwZXJGYWN0b3J5LnB5CivilILCoMKgIOKUgsKg
wqAg4pSc4pSA4pSAIFJlc3VsdFdyYXBwZXJzLmpzb24KK+KUgsKgwqAg4pSCwqDCoCDilJTilIDi
lIAgX19pbml0X18ucHkKK+KUgsKgwqAg4pSc4pSA4pSAIFV0aWxzLnB5CivilILCoMKgIOKUlOKU
gOKUgCBfX2luaXRfXy5weQor4pSU4pSA4pSAIF9faW5pdF9fLnB5CitgYGAKKyMjIFJlcXVpcmVt
ZW50cworKiBweXRob24gbW9kdWxlczoKKyAgICAqIFB5T2JqYworICAgICogcHN1dGlscyAob3B0
aW9uYWwpCisKKyMjIEhPVyBUT3MKKyMjIyBIb3cgdG8gcnVuCitgYGBzaGVsbAorICAgIHB5dGhv
biBwYXRoL3RvL1BlcmZBdXRvUnVuLnB5IC0tYnVpbGQtZGlyZWN0b3J5IHBhdGgvdG8vYnJvd3Nl
ci9kaXJlY3RvcnkgLS1wbGFuIGpzb25fZm9ybWF0X3BsYW4gLS1wbGF0Zm9ybSB0YXJnZXRfcGxh
dGZvcm0gLS1icm93c2VyIHRhcmdldF9icm93c2VyCitgYGAKKyogKipwYXRoL3RvL2Jyb3dzZXIv
ZGlyZWN0b3J5Kio6IHNob3VsZCBiZSB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFi
bGUgYmluYXJ5KGUuZy4gL0FwcGxpY2F0aW9uLyBvbiBPU1ggd2hpY2ggY29udGFpbnMgU2FmYXJp
LmFwcCkKKyogKipqc29uX2Zvcm1hdF9wbGFuKio6IHRoZSBiZW5jaG1hcmsgcGxhbiB5b3Ugd2Fu
dCB0byBleGVjdXRlICAKKworIyMjIEhvdyB0byBjcmVhdGUgYSBwbGFuCitUbyBjcmVhdGUgYSBw
bGFuLCB5b3UgbWF5IHJlZmVyIHRvIFBsYW5zL2pldHN0cmVhbS5wbGFuLgorYGBganNvbiAKK3sK
KyAgICAiaHR0cF9zZXJ2ZXIiOiAiU2ltcGxlSFRUUFNlcnZlckhhbmRsZSIsIAorICAgICJiZW5j
aG1hcmtzIjogWworICAgICAgICB7CisgICAgICAgICAgICAidGltZW91dCIgOiA2MDAsCisgICAg
ICAgICAgICAiY291bnQiOiA1LAorICAgICAgICAgICAgImJlbmNobWFya19oYW5kbGUiOiAiSmV0
U3RyZWFtQmVuY2htYXJrSGFuZGxlIiwKKyAgICAgICAgICAgICJvcmlnaW5hbF9iZW5jaG1hcmsi
OiAiLi4vLi4vLi4vUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0iLAorICAgICAgICAgICAgImJl
bmNobWFya19wYXRjaCI6ICJQYXRjaGVzL0pldFN0cmVhbS5wYXRjaCIsCisgICAgICAgICAgICAi
ZW50cnlfcG9pbnQiOiAiSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sIiwKKyAg
ICAgICAgICAgICJyZXN1bHRfd3JhcHBlciI6ICJNZXJnZVJlc3VsdFdyYXBwZXIiLAorICAgICAg
ICAgICAgIm91dHB1dF9maWxlIjogImpldHN0cmVhbS5yZXN1bHQiCisgICAgICAgIH0KKyAgICBd
Cit9CitgYGAKK1BsYW4gaXMgYSBqc29uLWZvcm1hdHRlZCBkaWN0aW9uYXJ5IHdoaWNoIGNvbnRh
aW5zIGZvbGxvd2luZyBrZXlzIAorKiAqKmh0dHBfc2VydmVyKio6ICgqKmNhc2Utc2Vuc2l0aXZl
KiopIHRoZSBodHRwIHNlcnZlciBtb2R1bGUgeW91IHdhbnQgdG8gaG9zdCB0aGUgcmVzb3VyY2Vz
LiBDdXJyZW50IGF2YWlsYWJsZSBvcHRpb24gaXMgIlNpbXBsZUhUVFBTZXJ2ZXJIYW5kbGUiIHdo
aWNoIGlzIGJhc2VkIG9uIHB5dGhvbiB0d2lzdGVkIGZyYW1ld29yay4KKyogKipiZW5jaG1hcmtz
Kio6IGNvbnRhaW5zIGEgbGlzdCBvZiBiZW5jaG1hcmtzIHlvdSB3YW50IHRvIHJ1biwgZWFjaCBi
ZW5jaG1hcmsgaXMgYSBsaXN0IGNvbnRhaW5zIGZvbGxvd2luZyBrZXlzOgorICAgICogKip0aW1l
b3V0Kio6IHRpbWUgbGltaXQgZm9yICoqRUFDSCBSVU4qKiBvZiB0aGUgYmVuY2htYXJrLiBUaGlz
IGNhbiBhdm9pZCBwcm9ncmFtIGdldHRpbmcgc3R1Y2sgaW4gdGhlIGV4dHJlbWUgY2lyY3Vtc3Rh
bmNlcy4gVGhlIHRpbWUgbGltaXQgaXMgc3VnZ2VzdGVkIHRvIGJlIDEuNS0yeCB0aGUgdGltZSBz
cGVudCBpbiBhIG5vcm1hbCBydW4uCisgICAgKiAqKmNvdW50Kio6IHRoZSBudW1iZXIgb2YgdGlt
ZXMgeW91IHdhbnQgdG8gcnVuIGJlbmNobWFyaworICAgICogKipiZW5jaG1hcmtfaGFuZGxlKio6
ICBoYW5kbGUgb2YgdGhlIGJlbmNobWFyayB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgYXJyYW5n
aW5nIGJlbmNobWFyayBiZWZvcmUgdGhlIHdlYiBzZXJ2ZXIgc2VydmluZyB0aGUgZGlyZWN0b3J5
LiBJbiBtb3N0IGNhc2UsICdHZW5lcmljQmVuY2htYXJrSGFuZGxlcicgaXMgc3VmZmljaWVudC4g
SXQgY29waWVzIHRoZSBiZW5jaG1hcmsgdG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBhcHBs
aWVzIHBhdGNoIHRvIGJlbmNobWFyay4gSWYgeW91IGhhdmUgc3BlY2lhbCByZXF1aXJlbWVudCwg
eW91IGNvdWxkIGRlc2lnbiB5b3VyIG93biBiZW5jaG1hcmsgaGFuZGxlLCBqdXN0IGxpa2UgdGhl
ICdKZXRTdHJlYW1CZW5jaG1hcmtIYW5kbGUnIGluIHRoaXMgZXhhbXBsZS4KKyAgICAqICoqb3Jp
Z2luYWxfYmVuY2htYXJrKio6IHBhdGggb2YgYmVuY2htYXJrLCBhIHJlbGF0aXZlIHBhdGggdG8g
dGhlIHJvb3Qgb2YgdGhpcyBwcm9qZWN0ICgnUGVyZkF1dG9SdW4nIGRpcmVjdG9yeSkKKyAgICAq
ICoqYmVuY2htYXJrX3BhdGgqKjogKCoqT1BUSU9OQUwqKikgcGF0aCBvZiBwYXRjaCwgYSByZWxh
dGl2ZSBwYXRoIHRvIHRoZSByb290IG9mIHRoaXMgcHJvamVjdCAoJ1BlcmZBdXRvUnVuJyBkaXJl
Y3RvcnkpCisgICAgKiAqKmVudHJ5X3BvaW50Kio6IHRoZSByZWxhdGl2ZSB1cmwgeW91IHdhbnQg
YnJvd3NlciB0byBsYXVuY2ggKGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgd2Vicm9vdCkKKyAgICAq
ICoqcmVzdWx0X3dyYXBwZXIqKjogdGhlIHdyYXBwZXIgbW9kdWxlIHlvdSB3YW50IHRvIHdyYXAg
dGhlIHJlc3VsdHMuIEN1cnJlbnQgYXZhaWxibGUgb3B0aW9uIGlzICJNZXJnZVJlc3VsdFdyYXBw
ZXIiLiBUbyBjdXN0b21pemUgeW91ciBvd24gcmVzdWx0IHdyYXBwZXIsIGV4dGVuZHMgVXRpbGl0
aWVzL1Jlc3VsdFdyYXBwZXIvQmFzZVJlc3VsdFdyYXBwZXIucHkgYW5kIHJlZ2lzdGVyIHlvdXIg
bW9kdWxlIGluIFV0aWxpdGllcy9SZXN1bHRXcmFwcGVyL1Jlc3VsdFdyYXBwZXIuanNvbgorICAg
ICogKipvdXRwdXRfZmlsZSoqOiBzcGVjaWZ5IHRoZSBvdXRwdXQgZmlsZQorCisjIyMgSG93IHRv
IGltcG9ydCBhIGJlbmNobWFyaworKiBNb2RpZnkgdGhlIGJlbmNobWFyayBodG1sIGZpbGUsIG1h
a2Ugc3VyZSB0aGUgcGFnZSBoYXMgZm9sbG93aW5nIGZ1bmN0aW9uYWxpdGllczoKKyAgICAqIFdo
ZW4geW91IGxhdW5jaCB0aGUgcGFnZSgnZW50cnlfcG9pbnQnIGluIGJlbmNobWFyayksIHRoZSB0
ZXN0IHdpbGwgc3RhcnQgYXV0b21hdGljYWxseQorICAgICogT3JnYW5pemluZyB0aGUgcmVzdWx0
cworICAgICogJ1BPU1QnIGluZm9ybWF0aW9uIHRvICcvcmVwb3J0JywgYW5kICdHRVQnICcvc2h1
dGRvd24nIHdoZW4gcG9zdCBzdWNjZWVkcy4gRXhhbXBsZToKKyAgICAqIGBgYGpzCisgICAgICB2
YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICB4aHIub3BlbigiUE9TVCIsICIv
cmVwb3J0Iik7CisgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBlIiwgImFw
cGxpY2F0aW9uL2pzb24iKTsKKyAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LWxl
bmd0aCIsIHJlc3VsdHMubGVuZ3RoKTsKKyAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb25u
ZWN0aW9uIiwgImNsb3NlIik7CisgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09
IDIwMCkgeworICAgICAgICAgICAgICB2YXIgY2xvc2VSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1
ZXN0KCk7CisgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5vcGVuKCJHRVQiLCAnL3NodXRkb3du
Jyk7CisgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5zZW5kKCkKKyAgICAgICAgICB9CisgICAg
ICB9CisgICAgICB4aHIuc2VuZChyZXN1bHRzKTsKK2BgYCAKKyogQ3JlYXRlIGEgcGF0Y2ggZmls
ZSBhZ2FpbnN0IG9yaWdpbmFsIGZpbGUKKyAgICAqIEdvIHRvIHRoZSBkaXJlY3RvcnkgY29udGFp
bnMgdGhlIGJlbmNobWFyayBkaXJlY3RvcnkgKGUuZy4gZm9yIEpldFN0cmVhbSwgeW91IHNob3Vs
ZCBnbyB0byBQZXJmb3JtYWNlVGVzdCBmb2xkZXIpCisgICAgKiBVc2UgYGBgZ2l0IGRpZmYgLS1y
ZWxhdGl2ZSBIRUFEID4geW91ci5wYXRjaGBgYCB0byBjcmVhdGUgeW91ciBwYXRjaAorICAgICog
KCoqU3VnZ2VzdGVkKiopIG1vdmUgdGhlIHBhdGNoIHRvIHRoZSAnUGF0Y2hlcycgZGlyZWN0b3J5
IHVuZGVyIHByb2plY3QgZGlyZWN0b3J5CisqIENyZWF0ZSBhIHBsYW4gZm9yIHRoZSBiZW5jaG1h
cmsgKHJlZmVyIHRvICoqIkhvdyB0byBjcmVhdGUgYSBwbGFuIioqIGZvciBtb3JlIGRldGFpbHMp
CisqIERvIGZvbGxvd2luZyBpbnN0cnVjdGlvbiAqKk9OTFkgSUYgTkVFREVEKiouIEluIG1vc3Qg
Y2FzZSwgeW91IGRvIG5vdCBoYXZlIHRvLgorICAgICogSWYgeW91IHdhbnQgdG8gY3VzdG9taXpl
IFBsYXRmb3JtSGFuZGxlIGZvciBzcGVjaWZpYyBicm93c2VyL3BsYXRmb3JtLCB5b3UgbmVlZCB0
byBleHRlbmQgVXRpbGl0aWVzL1BsYXRmb3JtSGFuZGxlL1BsYXRmb3JtSGFuZGxlLnB5IGFuZCBy
ZWdpc3RlciB5b3VyIG1vZHVsZSBpbiBVdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvUGxhdGZvcm1I
YW5kbGVzLmpzb24uCisgICAgKiBJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgSFRUUEhhbmRsZSwg
eW91IG5lZWQgdG8gZXh0ZW5kIFV0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBIYW5kbGUucHkgYW5k
IHJlZ2lzdGVyIHlvdXIgbW9kdWxlIGluIFV0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBIYW5kbGVz
Lmpzb24uCisgICAgKiBJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgUmVzdWx0V3JhcHBlciwgeW91
IG5lZWQgdG8gZXh0ZW5kIFV0aWxpdGllcy9SZXN1bHRXcmFwcGVyL0Jhc2VSZXN1bHRXcmFwcGVy
LnB5IGFuZCByZWdpc3RlciB5b3VyIG1vZHVsZSBpbiBVdGlsaXRpZXMvUmVzdWx0V3JhcHBlci9S
ZXN1bHRXcmFwcGVycy5qc29uCisgICAgKiBJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgQmVuY2ht
YXJrSGFuZGxlLCB5b3UgbmVlZCB0byBleHRlbmQgVXRpbGllcy9CZW5jaG1hcmtIYW5kbGUvQmVu
Y2htYXJrSGFuZGxlLnB5IG9yIGl0cyBzdWJjbGFzc2VzIGFuZCByZWdpc3RlciB5b3UgbW9kdWxl
IGluIFV0aWxpdGllcy9CZW5jaG1hcmtIYW5kbGUvQmVuY2htYXJrSGFuZGxlcy5qc29uCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9CZW5jaG1hcmtIYW5k
bGUvQmFzZUJlbmNobWFya0hhbmRsZS5weSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRp
bGl0aWVzL0JlbmNobWFya0hhbmRsZS9CYXNlQmVuY2htYXJrSGFuZGxlLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmM1ZjhjZGMzOTZjOTk4ZWYwN2MwYzg3ZjJmNjBhOTBlYzQyZjc2YjAKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9CZW5jaG1hcmtIYW5kbGUv
QmFzZUJlbmNobWFya0hhbmRsZS5weQpAQCAtMCwwICsxLDE1IEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgY29kaW5nIDogdXRmLTgKKworZnJvbSBhYmMgaW1wb3J0IGFic3RyYWN0bWV0aG9k
CisKKworY2xhc3MgQmFzZUJlbmNobWFya0hhbmRsZShvYmplY3QpOgorCisgICAgQGFic3RyYWN0
bWV0aG9kCisgICAgZGVmIHByZXBhcmVCZW5jaG1hcmsoc2VsZik6CisgICAgICAgIHBhc3MKKwor
ICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjbGVhckJlbmNobWFyayhzZWxmKToKKyAgICAg
ICAgcGFzcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMv
QmVuY2htYXJrSGFuZGxlL0JlbmNobWFya0hhbmRsZUZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRz
L1BlcmZBdXRvUnVuL1V0aWxpdGllcy9CZW5jaG1hcmtIYW5kbGUvQmVuY2htYXJrSGFuZGxlRmFj
dG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZGMyMDZkMTU3MDBmYTAyMzNhNjE1NzNmNTBmODgwY2JmYjMx
MGVjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRp
ZXMvQmVuY2htYXJrSGFuZGxlL0JlbmNobWFya0hhbmRsZUZhY3RvcnkucHkKQEAgLTAsMCArMSwy
NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGNvZGluZyA6IHV0Zi04CisKK2ltcG9ydCBq
c29uCitpbXBvcnQgb3MKKworZnJvbSAuLkdlbmVyaWNIYW5kbGVGYWN0b3J5IGltcG9ydCBHZW5l
cmljSGFuZGxlRmFjdG9yeQorCisKK2hhbmRsZUZpbGVOYW1lID0gJ0JlbmNobWFya0hhbmRsZXMu
anNvbicKK3RyeToKKyAgICBoYW5kbGVzID0ganNvbi5sb2FkKAorICAgICAgICBvcGVuKAorICAg
ICAgICAgICAgb3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShf
X2ZpbGVfXyksCisgICAgICAgICAgICAgICAgaGFuZGxlRmlsZU5hbWUpLAorICAgICAgICAgICAg
J3InKSkKK2V4Y2VwdDoKKyAgICBwcmludCAnTG9hZGluZyAlcyBmYWlsZWQsIHN0YXJ0IHVzaW5n
IHByZS1kZWZpbmVkIGhhbmRsZXMnICUgKGhhbmRsZUZpbGVOYW1lKQorICAgIGhhbmRsZXMgPSB7
CisgICAgICAgICdHZW5lcmljQmVuY2htYXJrSGFuZGxlJzogeydmaWxlUGF0aCc6ICdCZW5jaG1h
cmtIYW5kbGUuR2VuZXJpY0JlbmNobWFya0hhbmRsZScsICdtb2R1bGVOYW1lJzogJ0dlbmVyaWNC
ZW5jaG1hcmtIYW5kbGUnfSwKKyAgICAgICAgJ0pldFN0cmVhbUJlbmNobWFya0hhbmRsZSc6IHsn
ZmlsZVBhdGgnOiAnQmVuY2htYXJrSGFuZGxlLkpldFN0cmVhbUJlbmNobWFya0hhbmRsZScsICdt
b2R1bGVOYW1lJzogJ0pldFN0cmVhbUJlbmNobWFya0hhbmRsZSd9LAorICAgIH0KKworQmVuY2ht
YXJrSGFuZGxlRmFjdG9yeSA9IEdlbmVyaWNIYW5kbGVGYWN0b3J5KGhhbmRsZXMpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9CZW5jaG1hcmtIYW5kbGUv
QmVuY2htYXJrSGFuZGxlcy5qc29uIGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRp
ZXMvQmVuY2htYXJrSGFuZGxlL0JlbmNobWFya0hhbmRsZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMjQ4
Yzg1Nzc3MmMwMzgwNTAxYWFhYzcwMTRhYmY5NjQxOGIxMTA0Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvQmVuY2htYXJrSGFuZGxlL0JlbmNo
bWFya0hhbmRsZXMuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICJHZW5lcmljQmVuY2htYXJr
SGFuZGxlIjogeworICAgICJtb2R1bGVOYW1lIjogIkdlbmVyaWNCZW5jaG1hcmtIYW5kbGUiLCAK
KyAgICAiZmlsZVBhdGgiOiAiQmVuY2htYXJrSGFuZGxlLkdlbmVyaWNCZW5jaG1hcmtIYW5kbGUi
CisgIH0sIAorICAiSmV0U3RyZWFtQmVuY2htYXJrSGFuZGxlIjogeworICAgICJtb2R1bGVOYW1l
IjogIkpldFN0cmVhbUJlbmNobWFya0hhbmRsZSIsIAorICAgICJmaWxlUGF0aCI6ICJCZW5jaG1h
cmtIYW5kbGUuSmV0U3RyZWFtQmVuY2htYXJrSGFuZGxlIgorICB9Cit9CmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9CZW5jaG1hcmtIYW5kbGUvR2VuZXJp
Y0JlbmNobWFya0hhbmRsZS5weSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVz
L0JlbmNobWFya0hhbmRsZS9HZW5lcmljQmVuY2htYXJrSGFuZGxlLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIy
ZjUyMzU1YTBmZDA4NTQ0YmIwYTU2NWMxN2QyMTExNTllODMzN2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9CZW5jaG1hcmtIYW5kbGUvR2Vu
ZXJpY0JlbmNobWFya0hhbmRsZS5weQpAQCAtMCwwICsxLDUyIEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgY29kaW5nIDogdXRmLTgKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0ZW1wZmls
ZQoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBhYmMg
aW1wb3J0IGFic3RyYWN0bWV0aG9kCisKK2Zyb20gQmFzZUJlbmNobWFya0hhbmRsZSBpbXBvcnQg
QmFzZUJlbmNobWFya0hhbmRsZQorZnJvbSAuLlV0aWxzIGltcG9ydCBnZXRQYXRoRnJvbVByb2pl
Y3RSb290CisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1BlcmZBdXRvUnVuJykKKwor
CitjbGFzcyBHZW5lcmljQmVuY2htYXJrSGFuZGxlKEJhc2VCZW5jaG1hcmtIYW5kbGUpOgorICAg
IGRlZiBwcmVwYXJlQmVuY2htYXJrKHNlbGYsIGJlbmNobWFya1BhdGgsIHBhdGNoKToKKyAgICAg
ICAgc2VsZi5jb3B5QmVuY2htYXJrKGJlbmNobWFya1BhdGgpCisgICAgICAgIHJldHVybiBzZWxm
LmFwcGx5UGF0Y2gocGF0Y2gpCisKKyAgICBkZWYgY29weUJlbmNobWFyayhzZWxmLCBiZW5jaG1h
cmtQYXRoKToKKyAgICAgICAgc2VsZi53ZWJyb290ID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAg
ICAgIGxvZ2dlci5kZWJ1ZygnU2VydmVyaW5nIGF0IHdlYnJvb3Q6ICVzJyAlIHNlbGYud2Vicm9v
dCkKKyAgICAgICAgc2VsZi5kZXN0ID0gb3MucGF0aC5qb2luKAorICAgICAgICAgICAgc2VsZi53
ZWJyb290LAorICAgICAgICAgICAgb3MucGF0aC5zcGxpdCgKKyAgICAgICAgICAgICAgICBiZW5j
aG1hcmtQYXRoKVsxXSkKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKAorICAgICAgICAgICAgZ2V0
UGF0aEZyb21Qcm9qZWN0Um9vdCgKKyAgICAgICAgICAgICAgICBiZW5jaG1hcmtQYXRoKSwKKyAg
ICAgICAgICAgIHNlbGYuZGVzdCkKKworICAgIGRlZiBhcHBseVBhdGNoKHNlbGYsIHBhdGNoKToK
KyAgICAgICAgaWYgcGF0Y2g6CisgICAgICAgICAgICBvbGRDd2QgPSBvcy5nZXRjd2QoKQorICAg
ICAgICAgICAgb3MuY2hkaXIoc2VsZi53ZWJyb290KQorICAgICAgICAgICAgcmV0TnVtID0gc3Vi
cHJvY2Vzcy5jYWxsKAorICAgICAgICAgICAgICAgIFsncGF0Y2gnLCAnLXAxJywgJy1mJywgJy1p
JywgZ2V0UGF0aEZyb21Qcm9qZWN0Um9vdChwYXRjaCldKQorICAgICAgICAgICAgb3MuY2hkaXIo
b2xkQ3dkKQorICAgICAgICAgICAgaWYgcmV0TnVtICE9IDA6CisgICAgICAgICAgICAgICAgbG9n
Z2VyLmluZm8oCisgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgYXBwbHkgcGF0Y2gsIHdpbGwg
c2tpcCBjdXJyZW50IGJlbmNobWFya1BhdGgnKQorICAgICAgICAgICAgICAgIHNlbGYuY2xlYXJC
ZW5jaG1hcmsoKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBz
ZWxmLndlYnJvb3QKKworICAgIGRlZiBjbGVhckJlbmNobWFyayhzZWxmKToKKyAgICAgICAgbG9n
Z2VyLmluZm8oJ0NsZWFubmluZyBCZW5jaG1hcmsnKQorICAgICAgICBpZiBzZWxmLndlYnJvb3Q6
CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYud2Vicm9vdCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0JlbmNobWFya0hhbmRsZS9KZXRTdHJl
YW1CZW5jaG1hcmtIYW5kbGUucHkgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGll
cy9CZW5jaG1hcmtIYW5kbGUvSmV0U3RyZWFtQmVuY2htYXJrSGFuZGxlLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjEwNzFkNDk3MTJkYTE0MGQxZmVmNGNjY2NkMmZmMzM5ODRjMzVjMGEKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9CZW5jaG1hcmtIYW5kbGUv
SmV0U3RyZWFtQmVuY2htYXJrSGFuZGxlLnB5CkBAIC0wLDAgKzEsMjggQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIyBjb2RpbmcgOiB1dGYtOAorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9z
CitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIEdlbmVyaWNCZW5jaG1hcmtIYW5kbGUgaW1wb3J0
IEdlbmVyaWNCZW5jaG1hcmtIYW5kbGUKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcign
UGVyZkF1dG9SdW4nKQorCisKK2NsYXNzIEpldFN0cmVhbUJlbmNobWFya0hhbmRsZShHZW5lcmlj
QmVuY2htYXJrSGFuZGxlKToKKyAgICBkZWYgcHJlcGFyZUJlbmNobWFyayhzZWxmLCBiZW5jaG1h
cmtQYXRoLCBwYXRjaCk6CisgICAgICAgIHN1cGVyKEpldFN0cmVhbUJlbmNobWFya0hhbmRsZSwg
c2VsZikuY29weUJlbmNobWFyayhiZW5jaG1hcmtQYXRoKQorICAgICAgICBzZWxmLnJ1bkNyZWF0
ZVNjcmlwdCgpCisgICAgICAgIHJldHVybiBzdXBlcihKZXRTdHJlYW1CZW5jaG1hcmtIYW5kbGUs
IHNlbGYpLmFwcGx5UGF0Y2gocGF0Y2gpCisKKyAgICBkZWYgcnVuQ3JlYXRlU2NyaXB0KHNlbGYp
OgorICAgICAgICBvbGRDd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihzZWxmLmRl
c3QpCisgICAgICAgIGxvZ2dlci5kZWJ1ZyhzZWxmLmRlc3QpCisgICAgICAgIHJldE51bSA9IHN1
YnByb2Nlc3MuY2FsbCgKKyAgICAgICAgICAgIFsncnVieScsICdjcmVhdGUucmInXSkKKyAgICAg
ICAgb3MuY2hkaXIob2xkQ3dkKQorICAgICAgICBpZiByZXROdW0gIT0gMDoKKyAgICAgICAgICAg
IGxvZ2dlci5lcnJvcignQ2Fubm90IGNyZWF0ZSBKZXRTdHJlYW0gQmVuY2htYXJrJykKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0JlbmNobWFya0hhbmRs
ZS9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0JlbmNo
bWFya0hhbmRsZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZDFkNjQzNGI4YjI5
YWU3NzVhZDhjMmU0OGM1MzkxCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVu
L1V0aWxpdGllcy9CZW5jaG1hcmtSdW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVu
L1V0aWxpdGllcy9CZW5jaG1hcmtSdW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAxZmM4ZWRlZGQyYjMz
MzQ2NDFkN2U5MTE3YjU1ZDRjMTc5ODkyYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0JlbmNobWFya1J1bm5lci5weQpAQCAtMCwwICsxLDEw
NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGNvZGluZyA6IHV0Zi04CisKK2ltcG9ydCBq
c29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNodXRpbAoraW1wb3J0IHNpZ25hbAoraW1wb3J0
IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCBvcworCitm
cm9tIEJlbmNobWFya0hhbmRsZS5CZW5jaG1hcmtIYW5kbGVGYWN0b3J5IGltcG9ydCBCZW5jaG1h
cmtIYW5kbGVGYWN0b3J5Citmcm9tIEhUVFBIYW5kbGUuSFRUUEhhbmRsZUZhY3RvcnkgaW1wb3J0
IEhUVFBIYW5kbGVGYWN0b3J5Citmcm9tIFJlc3VsdFdyYXBwZXIuUmVzdWx0V3JhcHBlckZhY3Rv
cnkgaW1wb3J0IFJlc3VsdFdyYXBwZXJGYWN0b3J5Citmcm9tIFBsYXRmb3JtSGFuZGxlLlBsYXRm
b3JtSGFuZGxlRmFjdG9yeSBpbXBvcnQgUGxhdGZvcm1IYW5kbGVGYWN0b3J5Citmcm9tIFV0aWxz
IGltcG9ydCBsb2FkTW9kdWxlLCBnZXRQYXRoRnJvbVByb2plY3RSb290Citmcm9tIFV0aWxzIGlt
cG9ydCB0aW1lb3V0CisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1BlcmZBdXRvUnVu
JykKKworCitjbGFzcyBCZW5jaG1hcmtSdW5uZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwbGFuRmlsZSwgYnVpbGREaXIsIG91dHB1dEZpbGUsIHBsYXRmb3JtLCBicm93c2Vy
KToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0luaXRpYWxpemluZyBiZW5jaG1hcmsgcnVubmluZycp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihwbGFuRmlsZSwgJ3InKSBhcyBm
cDoKKyAgICAgICAgICAgICAgICBzZWxmLnBsYW4gPSBqc29uLmxvYWQoZnApCisgICAgICAgICAg
ICAgICAgc2VsZi5wbGF0Zm9ybUhhbmRsZSA9IFBsYXRmb3JtSGFuZGxlRmFjdG9yeS5jcmVhdGUo
CisgICAgICAgICAgICAgICAgICAgIFtwbGF0Zm9ybSwgYnJvd3Nlcl0pCisgICAgICAgICAgICAg
ICAgc2VsZi5odHRwU2VydmVySGFuZGxlID0gSFRUUEhhbmRsZUZhY3RvcnkuY3JlYXRlKAorICAg
ICAgICAgICAgICAgICAgICBbc2VsZi5wbGFuWydodHRwX3NlcnZlciddXSkKKyAgICAgICAgICAg
ICAgICBzZWxmLmJlbmNobWFya3MgPSBzZWxmLnBsYW5bJ2JlbmNobWFya3MnXQorICAgICAgICAg
ICAgICAgIHNlbGYuYnVpbGREaXIgPSBvcy5wYXRoLmFic3BhdGgoYnVpbGREaXIpCisgICAgICAg
ICAgICAgICAgc2VsZi5vdXRwdXRGaWxlID0gb3V0cHV0RmlsZSBpZiBvdXRwdXRGaWxlIGVsc2Ug
J2JlbmNobWFyay5yZXN1bHQnCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAg
bG9nZ2VyLmVycm9yKCdDYW4gbm90IG9wZW4gcGxhbiBmaWxlOiAlcycgJSBwbGFuRmlsZSkKKyAg
ICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1BsYW4g
ZmlsZTolcyBtYXkgbm90IGZvbGxvdyBqc29uIGZvcm1hdCcgJSBwbGFuRmlsZSkKKyAgICAgICAg
ZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBleGVjdXRlKHNlbGYpOgorICAg
ICAgICBsb2dnZXIuaW5mbygnU3RhcnQgdG8gZXhlY3V0ZSB0aGUgcGxhbicpCisgICAgICAgIGZv
ciBiZW5jaG1hcmsgaW4gc2VsZi5iZW5jaG1hcmtzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8o
J1N0YXJ0IGEgbmV3IGJlbmNobWFyaycpCisgICAgICAgICAgICByZXN1bHRzID0gW10KKyAgICAg
ICAgICAgIHJlc3VsdFdyYXBwZXIgPSBSZXN1bHRXcmFwcGVyRmFjdG9yeS5jcmVhdGUoCisgICAg
ICAgICAgICAgICAgW2JlbmNobWFya1sncmVzdWx0X3dyYXBwZXInXV0pCisgICAgICAgICAgICBi
ZW5jaG1hcmtIYW5kbGUgPSBCZW5jaG1hcmtIYW5kbGVGYWN0b3J5LmNyZWF0ZSgKKyAgICAgICAg
ICAgICAgICBbYmVuY2htYXJrWydiZW5jaG1hcmtfaGFuZGxlJ11dKQorICAgICAgICAgICAgd2Vi
cm9vdCA9IGJlbmNobWFya0hhbmRsZS5wcmVwYXJlQmVuY2htYXJrKAorICAgICAgICAgICAgICAg
IGJlbmNobWFya1snb3JpZ2luYWxfYmVuY2htYXJrJ10sCisgICAgICAgICAgICAgICAgYmVuY2ht
YXJrWydiZW5jaG1hcmtfcGF0Y2gnXSBpZiAnYmVuY2htYXJrX3BhdGNoJyBpbiBiZW5jaG1hcmsg
ZWxzZSBOb25lKQorICAgICAgICAgICAgZm9yIHggaW4geHJhbmdlKGludChiZW5jaG1hcmtbJ2Nv
dW50J10pKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygKKyAgICAgICAgICAgICAgICAg
ICAgJ1N0YXJ0IHRoZSBpdGVyYXRpb24gJWQgb2YgY3VycmVudCBiZW5jaG1hcmsnICUKKyAgICAg
ICAgICAgICAgICAgICAgKHggKyAxKSkKKyAgICAgICAgICAgICAgICBzZWxmLmh0dHBTZXJ2ZXJI
YW5kbGUuc2VydmUod2Vicm9vdCkKKyAgICAgICAgICAgICAgICBzZWxmLnBsYXRmb3JtSGFuZGxl
LnByZXBhcmVFbnYoKQorICAgICAgICAgICAgICAgICMgV2FpdCBmb3IgaHR0cCBzZXJ2ZXIgdG8g
bGF1bmNoIGFuZCBwbGF0Zm9ybSBoYW5kbGVyIHRvIGNsZWFuCisgICAgICAgICAgICAgICAgIyB0
aGUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgyKQorICAgICAgICAg
ICAgICAgIHNlbGYucGxhdGZvcm1IYW5kbGUubGF1bmNoVXJsKAorICAgICAgICAgICAgICAgICAg
ICBzZWxmLmNvbXBvc2VVcmwoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmh0dHBTZXJ2
ZXJIYW5kbGUuYmFzZVVybCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgYmVuY2htYXJrWydl
bnRyeV9wb2ludCddKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZERpcikKKyAgICAg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggdGltZW91dChiZW5jaG1h
cmtbJ3RpbWVvdXQnXSk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc29uLmxv
YWRzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaHR0cFNlcnZlckhhbmRsZS5m
ZXRjaFJlc3VsdCgpKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5wbGF0Zm9ybUhhbmRsZS5jbG9zZUJyb3dzZXJzKCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBsZW4ocmVzdWx0KSA9PSAwOgorICAgICAg
ICAgICAgICAgICAgICBzZWxmLnBsYXRmb3JtSGFuZGxlLmNsb3NlQnJvd3NlcnMoKQorICAgICAg
ICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ05vIHJlc3VsdC4gU29tZXRoaW5nIHdlbnQgd3Jv
bmcnKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLnBsYXRmb3JtSGFuZGxlLmNs
b3NlQnJvd3NlcnMoKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKAorICAgICAgICAgICAg
ICAgICAgICAnRW5kIG9mICVkIGl0ZXJhdGlvbiBvZiBjdXJyZW50IGJlbmNobWFyaycgJQorICAg
ICAgICAgICAgICAgICAgICAoeCArIDEpKQorICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdFdy
YXBwZXIud3JhcChyZXN1bHRzKQorICAgICAgICAgICAgc2VsZi5kdW1wKAorICAgICAgICAgICAg
ICAgIHJlc3VsdHMsCisgICAgICAgICAgICAgICAgYmVuY2htYXJrWydvdXRwdXRfZmlsZSddIGlm
IGJlbmNobWFya1snb3V0cHV0X2ZpbGUnXSBlbHNlIHNlbGYub3V0cHV0RmlsZSkKKyAgICAgICAg
ICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgIGJlbmNobWFya0hhbmRsZS5jbGVhckJlbmNo
bWFyaygpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY29tcG9zZVVybChjbHMsIGJhc2VV
cmwsIHJlbGF0aXZlUGF0aCk6CisgICAgICAgIHJldHVybiAnLycuam9pbihbYmFzZVVybCwgcmVs
YXRpdmVQYXRoXSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkdW1wKGNscywgcmVzdWx0
cywgb3V0cHV0RmlsZSk6CisgICAgICAgIGxvZ2dlci5pbmZvKCdEdW1wcGluZyB0aGUgcmVzdWx0
cyB0byBmaWxlJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKG91dHB1dEZp
bGUsICd3JykgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoanNvbi5kdW1wcyhyZXN1
bHRzKSkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygn
Q2Fubm90IG9wZW4gb3V0cHV0IGZpbGU6ICVzJyAlIG91dHB1dEZpbGUpCisgICAgICAgICAgICBs
b2dnZXIuaW5mbygnUmVzdWx0cyBhcmU6XG4gJXMnLCBqc29uLmR1bXBzKHJlc3VsdHMpKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvR2VuZXJpY0hhbmRs
ZUZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9HZW5lcmlj
SGFuZGxlRmFjdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNDE5ZDc3ZWJkNjFkZmIxMmE4NGNmMTIwZGZi
MjZlOWJmMjAyNzBmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1
bi9VdGlsaXRpZXMvR2VuZXJpY0hhbmRsZUZhY3RvcnkucHkKQEAgLTAsMCArMSwzMiBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisjIGNvZGluZyA6IHV0Zi04CisKK2ltcG9ydCBsb2dnaW5nCitp
bXBvcnQgb3MKKworZnJvbSBVdGlscyBpbXBvcnQgbG9hZE1vZHVsZSwgTW9kdWxlTm90Rm91bmRF
cnJvcgorCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1bicpCisKKwor
Y2xhc3MgR2VuZXJpY0hhbmRsZUZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBoYW5kbGVzKToKKyAgICAgICAgc2VsZi5oYW5kbGVzID0gaGFuZGxlcworCisgICAgQGNs
YXNzbWV0aG9kCisgICAgZGVmIGl0ZXJhdGVHZXRJdGVtKGNscywgb3B0aW9ucywga2V5cyk6Cisg
ICAgICAgIHJldCA9IG9wdGlvbnMKKyAgICAgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldCA9IHJldC5fX2dldGl0ZW1fXyhrZXkpCisgICAg
ICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAg
cmV0dXJuIHJldAorCisgICAgZGVmIGNyZWF0ZShzZWxmLCBkZXNjcmlwdGlvbnMpOgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICByZXR1cm4gbG9hZE1vZHVsZShzZWxmLml0ZXJhdGVHZXRJdGVt
KHNlbGYuaGFuZGxlcywgZGVzY3JpcHRpb25zKSkoKQorICAgICAgICBleGNlcHQ6CisgICAgICAg
ICAgICByYWlzZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRp
ZXMvSFRUUEhhbmRsZS9IVFRQSGFuZGxlLnB5IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9V
dGlsaXRpZXMvSFRUUEhhbmRsZS9IVFRQSGFuZGxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5OGRlMzY0NTVl
Yzc5MDQyOTJlOWY1ZWU2YTI5NThjNWM4YjQ0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBIYW5kbGUucHkKQEAg
LTAsMCArMSwxNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGNvZGluZyA6IHV0Zi04Citm
cm9tIGFiYyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKKworCitjbGFzcyBIVFRQSGFuZGxlKG9iamVj
dCk6CisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgc2VydmUoc2VsZiwgd2ViUm9vdCk6
CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBmZXRjaFJlc3Vs
dChzZWxmKToKKyAgICAgICAgcmV0dXJuICdmYWtlIHJlc3VsdCcKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0hUVFBIYW5kbGUvSFRUUEhhbmRsZUZhY3Rv
cnkucHkgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQSGFuZGxlL0hU
VFBIYW5kbGVGYWN0b3J5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5NWEzOGExMjQ5Yzk3ZjhmMTI2YjI1ZjQ4
MzJkYWRhOGJlYzJjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRv
UnVuL1V0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBIYW5kbGVGYWN0b3J5LnB5CkBAIC0wLDAgKzEs
MjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBjb2RpbmcgOiB1dGYtOAorCitpbXBvcnQg
anNvbgoraW1wb3J0IG9zCisKK2Zyb20gLi5HZW5lcmljSGFuZGxlRmFjdG9yeSBpbXBvcnQgR2Vu
ZXJpY0hhbmRsZUZhY3RvcnkKKworCitoYW5kbGVGaWxlTmFtZSA9ICdIVFRQSGFuZGxlcy5qc29u
JwordHJ5OgorICAgIGhhbmRsZXMgPSBqc29uLmxvYWQoCisgICAgICAgIG9wZW4oCisgICAgICAg
ICAgICBvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmls
ZV9fKSwKKyAgICAgICAgICAgICAgICBoYW5kbGVGaWxlTmFtZSksCisgICAgICAgICAgICAncicp
KQorZXhjZXB0OgorICAgIHByaW50ICdMb2FkaW5nICVzIGZhaWxlZCwgc3RhcnQgdXNpbmcgcHJl
LWRlZmluZWQgaGFuZGxlcycgJSAoaGFuZGxlRmlsZU5hbWUpCisgICAgaGFuZGxlcyA9IHsKKyAg
ICAgICAgJ1NpbXBsZUhUVFBTZXJ2ZXJIYW5kbGUnOiB7J2ZpbGVQYXRoJzogJ0hUVFBIYW5kbGUu
U2ltcGxlSFRUUEhhbmRsZScsICdtb2R1bGVOYW1lJzogJ1NpbXBsZUhUVFBIYW5kbGUnfSwKKyAg
ICB9CisKK0hUVFBIYW5kbGVGYWN0b3J5ID0gR2VuZXJpY0hhbmRsZUZhY3RvcnkoaGFuZGxlcykK
KworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBodHRwZCA9IEhUVFBIYW5kbGVGYWN0
b3J5LmNyZWF0ZShbJ1NpbXBsZUhUVFBTZXJ2ZXJIYW5kbGUnXSkKKyAgICBodHRwZC5zZXJ2ZSgn
LicpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQ
SGFuZGxlL0hUVFBIYW5kbGVzLmpzb24gYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxp
dGllcy9IVFRQSGFuZGxlL0hUVFBIYW5kbGVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGE2YTU0Nzg5N2Ji
YzAyY2JhYjkyZjU3NTIxNzgyNjk3Y2EzMWI5MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0hUVFBIYW5kbGUvSFRUUEhhbmRsZXMuanNvbgpA
QCAtMCwwICsxLDYgQEAKK3sKKyAgIlNpbXBsZUhUVFBTZXJ2ZXJIYW5kbGUiOiB7CisgICAgIm1v
ZHVsZU5hbWUiOiAiU2ltcGxlSFRUUEhhbmRsZSIsIAorICAgICJmaWxlUGF0aCI6ICJIVFRQSGFu
ZGxlLlNpbXBsZUhUVFBIYW5kbGUiCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9IVFRQSGFu
ZGxlL0hUVFBTZXJ2ZXIvVHdpc3RlZEhUVFBTZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL1BlcmZB
dXRvUnVuL1V0aWxpdGllcy9IVFRQSGFuZGxlL0hUVFBTZXJ2ZXIvVHdpc3RlZEhUVFBTZXJ2ZXIu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2M4NDE4NzE2MmUwYWMyMjViNTZjMWY2MWFiNzZmNGFmYzYzYzI5Mgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0hU
VFBIYW5kbGUvSFRUUFNlcnZlci9Ud2lzdGVkSFRUUFNlcnZlci5weQpAQCAtMCwwICsxLDMyIEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMgY29kaW5nOiB1dGYtOAorZnJvbSB0d2lzdGVkLndl
YiBpbXBvcnQgc3RhdGljLCBzZXJ2ZXIKK2Zyb20gdHdpc3RlZC53ZWIucmVzb3VyY2UgaW1wb3J0
IFJlc291cmNlLCBFbmNvZGluZ1Jlc291cmNlV3JhcHBlcgorZnJvbSB0d2lzdGVkLmludGVybmV0
IGltcG9ydCByZWFjdG9yCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBzeXMKKworCitjbGFzcyBT
ZXJ2ZXJDb250cm9sKFJlc291cmNlKToKKyAgICBpc0xlYWYgPSBUcnVlCisKKyAgICBkZWYgcmVu
ZGVyX0dFVChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgcmVhY3Rvci5zdG9wKCkKKyAgICAgICAg
cmV0dXJuICIiCisKKyAgICBkZWYgcmVuZGVyX1BPU1Qoc2VsZiwgcmVxdWVzdCk6CisgICAgICAg
IHN5cy5zdGRvdXQud3JpdGUocmVxdWVzdC5jb250ZW50LmdldHZhbHVlKCkpCisgICAgICAgIHJl
dHVybiAnT0snCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBwYXJzZXIgPSBh
cmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgICAgICAgZGVzY3JpcHRpb249J3B5dGhvbiBUd2lz
dGVkSFRUUFNlcnZlci5weSB3ZWJyb290JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd3ZWJy
b290JykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIHdlYnJvb3QgPSBzdGF0
aWMuRmlsZShhcmdzLndlYnJvb3QpCisgICAgc2VydmVyQ29udHJvbCA9IFNlcnZlckNvbnRyb2wo
KQorICAgIHdlYnJvb3QucHV0Q2hpbGQoJ3NodXRkb3duJywgc2VydmVyQ29udHJvbCkKKyAgICB3
ZWJyb290LnB1dENoaWxkKCdyZXBvcnQnLCBzZXJ2ZXJDb250cm9sKQorICAgIHJlYWN0b3IubGlz
dGVuVENQKDAsIHNlcnZlci5TaXRlKHdlYnJvb3QpKQorICAgIHJlYWN0b3IucnVuKCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0hUVFBIYW5kbGUvU2lt
cGxlSFRUUEhhbmRsZS5weSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL0hU
VFBIYW5kbGUvU2ltcGxlSFRUUEhhbmRsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDUyZmJhNGZkYWQzN2Ey
MjI2NjAzZDA1NGMzZjYzMGE2ZjA5MTBmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvSFRUUEhhbmRsZS9TaW1wbGVIVFRQSGFuZGxlLnB5CkBA
IC0wLDAgKzEsMTA4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgY29kaW5nIDogdXRmLTgK
KworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0Citp
bXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKKworZnJvbSBIVFRQSGFuZGxlIGltcG9ydCBI
VFRQSGFuZGxlCisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1BlcmZBdXRvUnVuJykK
KworCitjbGFzcyBTaW1wbGVIVFRQSGFuZGxlKEhUVFBIYW5kbGUpOgorCisgICAgIiIiVGhpcyBj
bGFzcyBkZXBlbmRzIG9uIHVuaXggZW52aXJvbm1lbnQsIG5lZWQgdG8gYmUgbW9kaWZpZWQgdG8g
YWNoaWV2ZSBjcm9zc3BsYXRmb3JtIGNvbXBhYmlsaXR5CisgICAgIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyUHJvY2VzcyA9IE5vbmUKKyAgICAgICAg
c2VsZi5zZXJ2ZXJQb3J0ID0gMAorICAgICAgICAjIEZJWE1FOiB0aGlzIG1heSBub3QgYmUgcmVs
aWFibGUuCisgICAgICAgIGxvZ2dlci5pbmZvKCdGaW5kaW5nIHRoZSBJUCBhZGRyZXNzIG9mIGN1
cnJlbnQgbWFjaGluZScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuaXAgPSBbCisg
ICAgICAgICAgICAgICAgaXAgZm9yIGlwIGluIHNvY2tldC5nZXRob3N0YnluYW1lX2V4KAorICAg
ICAgICAgICAgICAgICAgICBzb2NrZXQuZ2V0aG9zdG5hbWUoKSlbMl0gaWYgbm90IGlwLnN0YXJ0
c3dpdGgoIjEyNy4iKV1bMF0KKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdJUCBvZiBjdXJyZW50
IG1hY2hpbmUgaXM6ICVzJyAlIHNlbGYuaXApCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg
IGxvZ2dlci5lcnJvcignQ2Fubm90IGdldCB0aGUgaXAgYWRkcmVzcyBvZiBjdXJyZW50IG1hY2hp
bmUnKQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBzZXJ2ZShzZWxmLCB3ZWJyb290KToK
KyAgICAgICAgb2xkQ3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5k
aXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKQorICAgICAgICBsb2dnZXIuaW5mbygn
TGF1Y2huaW5nIGFuIGh0dHAgc2VydmVyJykKKyAgICAgICAgc2VsZi5zZXJ2ZXJQcm9jZXNzID0g
c3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAnL3Vzci9i
aW4vcHl0aG9uJywKKyAgICAgICAgICAgICAgICAnSFRUUFNlcnZlci9Ud2lzdGVkSFRUUFNlcnZl
ci5weScsCisgICAgICAgICAgICAgICAgd2Vicm9vdF0sCisgICAgICAgICAgICBzdGRpbj1zdWJw
cm9jZXNzLlBJUEUsCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAg
ICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgb3MuY2hkaXIob2xkQ3dkKQor
ICAgICAgICBtYXhBdHRlbXB0ID0gNQorICAgICAgICBpbnRlcnZhbCA9IDAuNQorICAgICAgICBs
b2dnZXIuaW5mbygnU3RhcnQgdG8gZmV0Y2hpbmcgdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBodHRw
IHNlcnZlcicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBwc3V0aWwKKyAgICAg
ICAgICAgIGZvciBhdHRlbXB0IGluIHhyYW5nZShtYXhBdHRlbXB0KToKKyAgICAgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyUG9ydCA9IHBzdXRpbC5Qcm9j
ZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJQcm9jZXNzLnBpZCkuY29u
bmVjdGlvbnMoKVswXVszXVsxXQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlclBv
cnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnSFRUUCBTZXJ2ZXIgaXMgc2VydmluZyBhdCBwb3J0OiAlZCcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJQb3J0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAg
ICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKAorICAgICAg
ICAgICAgICAgICAgICAnU2VydmVyIHBvcnQgaXMgbm90IGZvdW5kIHRoaXMgdGltZSwgcmV0cnkg
YWZ0ZXIgJWYgc2Vjb25kcycgJQorICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbCkKKyAgICAg
ICAgICAgICAgICB0aW1lLnNsZWVwKGludGVydmFsKQorICAgICAgICAgICAgICAgIGludGVydmFs
ICo9IDIKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIGZvciBhdHRlbXB0IGluIHhyYW5nZShtYXhBdHRlbXB0KToKKyAgICAgICAg
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3Mu
UG9wZW4oJyAnLmpvaW4oWycvdXNyL3NiaW4vbHNvZicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWlUQ1AnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctc1RDUDpMSVNU
RU4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICctcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyKHNlbGYuc2VydmVyUHJvY2Vzcy5waWQpXSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9j
ZXNzLlBJUEUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlclBvcnQgPSBpbnQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUuZmluZGFsbCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ1RDUCBcKjooXGQrKSBcKExJU1RFTlwpJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcC5jb21tdW5pY2F0ZSgpWzBdKVswXSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyUG9ydDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2dnZXIuaW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hUVFAg
U2VydmVyIGlzIHNlcnZpbmcgYXQgcG9ydDogJWQnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLnNlcnZlclBvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBsb2dnZXIu
aW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgICdTZXJ2ZXIgcG9ydCBpcyBub3QgZm91bmQg
dGhpcyB0aW1lLCByZXRyeSBhZnRlciAlZiBzZWNvbmRzJyAlCisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRlcnZhbCkKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcChpbnRlcnZhbCkK
KyAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWwgKj0gMgorICAgICAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgYmFzZVVybChzZWxmKToKKyAgICAgICAg
cmV0dXJuICJodHRwOi8vJXM6JWQiICUgKHNlbGYuaXAsIHNlbGYuc2VydmVyUG9ydCkKKworICAg
IGRlZiBmZXRjaFJlc3VsdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VydmVyUHJvY2Vz
cy5jb21tdW5pY2F0ZSgpWzBdCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVu
L1V0aWxpdGllcy9IVFRQSGFuZGxlL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0
b1J1bi9VdGlsaXRpZXMvSFRUUEhhbmRsZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjlkZTI5
YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9QbGF0Zm9ybUhhbmRsZS9PU1hDaHJvbWVIYW5kbGUu
cHkgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9QbGF0Zm9ybUhhbmRsZS9P
U1hDaHJvbWVIYW5kbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmZjYTE0NDY4NDRhNWE5OWI5OTlhYzI4NWFm
M2JlODU3NWE2NWJhMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9S
dW4vVXRpbGl0aWVzL1BsYXRmb3JtSGFuZGxlL09TWENocm9tZUhhbmRsZS5weQpAQCAtMCwwICsx
LDUyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgY29kaW5nIDogdXRmLTgKKworaW1wb3J0
IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCisKKyMg
V2UgYXNzdW1lIHRoYXQgdGhpcyBoYW5kbGUgY2FuIG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBwbGF0
Zm9ybSBpcyBPU1gKK2Zyb20gQXBwS2l0IGltcG9ydCBOU1J1bm5pbmdBcHBsaWNhdGlvbgorZnJv
bSBQbGF0Zm9ybUhhbmRsZSBpbXBvcnQgUGxhdGZvcm1IYW5kbGUKKworCitsb2dnZXIgPSBsb2dn
aW5nLmdldExvZ2dlcignUGVyZkF1dG9SdW4nKQorCisKK2NsYXNzIE9TWENocm9tZUhhbmRsZShQ
bGF0Zm9ybUhhbmRsZSk6CisKKyAgICBkZWYgcHJlcGFyZUVudihzZWxmKToKKyAgICAgICAgc2Vs
Zi5jbG9zZUJyb3dzZXJzKCkKKyAgICAgICAgc2VsZi5jaHJvbWVQcmVmZXJlbmNlcyA9IFtdCisK
KyAgICBkZWYgbGF1bmNoVXJsKHNlbGYsIHVybCwgYnJvd3NlckJ1aWxkUGF0aD1Ob25lKToKKyAg
ICAgICAgbG9nZ2VyLmluZm8oCisgICAgICAgICAgICAnTGF1bmNoaW5nIGNocm9tZTogJXMgd2l0
aCB1cmw6ICVzJyAlCisgICAgICAgICAgICAoYnJvd3NlckJ1aWxkUGF0aCArICcvR29vZ2xlIENo
cm9tZS5hcHAnLCB1cmwpKQorICAgICAgICAjIG1heSBuZWVkIHRvIGJlIG1vZGlmaWVkIGZvciBk
ZXZlbG9wIGJ1aWxkLCBzdWNoIGFzIHNldHRpbmcgdXAKKyAgICAgICAgIyBsaWJyYXJpZXMKKyAg
ICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbJ29wZW4nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAnLWEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyQnVpbGRQYXRoICsgJy9H
b29nbGUgQ2hyb21lLmFwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICctLWFyZ3MnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1ob21lcGFnZScsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVybF0gKyBzZWxmLmNocm9tZVByZWZlcmVuY2VzKS5jb21tdW5pY2F0ZSgpCisK
KyAgICBkZWYgY2xvc2VCcm93c2VycyhzZWxmKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0Nsb3Np
bmcgYWxsIGV4aXN0aW5nIGNocm9tZSBwcm9jZXNzZXMnKQorICAgICAgICBjaHJvbWVzID0gTlNS
dW5uaW5nQXBwbGljYXRpb24ucnVubmluZ0FwcGxpY2F0aW9uc1dpdGhCdW5kbGVJZGVudGlmaWVy
XygKKyAgICAgICAgICAgICdjb20uZ29vZ2xlLkNocm9tZScpCisgICAgICAgIGZvciBjaHJvbWUg
aW4gY2hyb21lczoKKyAgICAgICAgICAgIGNocm9tZS50ZXJtaW5hdGUoKQorICAgICAgICB0aW1l
LnNsZWVwKDIpCisKKworZGVmIHRlc3QoKToKKyAgICBoYW5kbGUgPSBPU1hDaHJvbWVIYW5kbGUo
KQorICAgIGhhbmRsZS5wcmVwYXJlRW52KCkKKyAgICBoYW5kbGUubGF1bmNoVXJsKCcvQXBwbGlj
YXRpb25zLycsICdodHRwOi8vYXBwbGUuY29tJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgorICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9V
dGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvT1NYU2FmYXJpSGFuZGxlLnB5IGIvVG9vbHMvU2NyaXB0
cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvT1NYU2FmYXJpSGFuZGxlLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQyZDg3YTU0Yjk4MjhmNGE4NGI5NDk0MTQzMjZmMGNlNjlmMjVjODEKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9QbGF0
Zm9ybUhhbmRsZS9PU1hTYWZhcmlIYW5kbGUucHkKQEAgLTAsMCArMSw1OCBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjIGNvZGluZyA6IHV0Zi04CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
b3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQorCisjIFdlIGFzc3VtZSB0aGF0IHRo
aXMgaGFuZGxlIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXMgT1NYLgorZnJv
bSBBcHBLaXQgaW1wb3J0IE5TUnVubmluZ0FwcGxpY2F0aW9uCitmcm9tIFBsYXRmb3JtSGFuZGxl
IGltcG9ydCBQbGF0Zm9ybUhhbmRsZQorCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQ
ZXJmQXV0b1J1bicpCisKKworY2xhc3MgT1NYU2FmYXJpSGFuZGxlKFBsYXRmb3JtSGFuZGxlKToK
KworICAgIGRlZiBwcmVwYXJlRW52KHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlQnJvd3NlcnMo
KQorICAgICAgICBzZWxmLnNhZmFyaVByZWZlcmVuY2VzID0gWworICAgICAgICAgICAgIi1Ib21l
UGFnZSIsCisgICAgICAgICAgICAiYWJvdXQ6YmxhbmsiLAorICAgICAgICAgICAgIi1XYXJuQWJv
dXRGcmF1ZHVsZW50V2Vic2l0ZXMiLAorICAgICAgICAgICAgIjAiLAorICAgICAgICAgICAgIi1F
eHRlbnNpb25zRW5hYmxlZCIsCisgICAgICAgICAgICAiMCIsCisgICAgICAgICAgICAiLVNob3dT
dGF0dXNCYXIiLAorICAgICAgICAgICAgIjAiLAorICAgICAgICAgICAgIi1OZXdXaW5kb3dCZWhh
dmlvciIsCisgICAgICAgICAgICAiMSIsCisgICAgICAgICAgICAiLU5ld1RhYkJlaGF2aW9yIiwK
KyAgICAgICAgICAgICIxIiwKKyAgICAgICAgXQorCisgICAgZGVmIGxhdW5jaFVybChzZWxmLCB1
cmwsIGJyb3dzZXJCdWlsZFBhdGg9Tm9uZSk6CisgICAgICAgIGFyZ3MgPSBbCisgICAgICAgICAg
ICBvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICAgICAgYnJvd3NlckJ1aWxkUGF0aCwKKyAgICAg
ICAgICAgICAgICAnU2FmYXJpLmFwcC9Db250ZW50cy9NYWNPUy9TYWZhcmknKV0KKyAgICAgICAg
YXJncy5leHRlbmQoc2VsZi5zYWZhcmlQcmVmZXJlbmNlcykKKyAgICAgICAgbG9nZ2VyLmluZm8o
J0xhdW5jaGluZyBzYWZhcmk6ICVzIHdpdGggdXJsOiAlcycgJSAoYXJnc1swXSwgdXJsKSkKKyAg
ICAgICAgc3VicHJvY2Vzcy5Qb3BlbihhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVu
dj17CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEWUxEX0ZSQU1FV09SS19QQVRIJzog
YnJvd3NlckJ1aWxkUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RZTERfTElC
UkFSWV9QQVRIJzogYnJvd3NlckJ1aWxkUGF0aH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3Vi
cHJvY2Vzcy5QSVBFKQorICAgICAgICAjIFN0b3AgZm9yIGluaXRpYWxpemF0aW9uIG9mIHRoZSBz
YWZhcmkgcHJvY2Vzcywgb3RoZXJ3aXNlLCBvcGVuCisgICAgICAgICMgY29tbWFuZCBtYXkgdXNl
IHRoZSBzeXN0ZW0gc2FmYXJpLgorICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgIHN1YnBy
b2Nlc3MuUG9wZW4oWydvcGVuJywgdXJsXSkKKworICAgIGRlZiBjbG9zZUJyb3dzZXJzKHNlbGYp
OgorICAgICAgICBsb2dnZXIuaW5mbygnQ2xvc2luZyBhbGwgZXhpc3Rpbmcgc2FmYXJpIHByb2Nl
c3NlcycpCisgICAgICAgIHNhZmFyaUluc3RhbmNlcyA9IE5TUnVubmluZ0FwcGxpY2F0aW9uLnJ1
bm5pbmdBcHBsaWNhdGlvbnNXaXRoQnVuZGxlSWRlbnRpZmllcl8oCisgICAgICAgICAgICAnY29t
LmFwcGxlLlNhZmFyaScpCisgICAgICAgIGZvciBzYWZhcmlJbnN0YW5jZSBpbiBzYWZhcmlJbnN0
YW5jZXM6CisgICAgICAgICAgICBzYWZhcmlJbnN0YW5jZS50ZXJtaW5hdGUoKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvUGxh
dGZvcm1IYW5kbGUucHkgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9QbGF0
Zm9ybUhhbmRsZS9QbGF0Zm9ybUhhbmRsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wY2M2OTI0ZTRiNDczZTY4
NDI5Y2ZkNmI2YzA0ODJiNTUxNWEzM2M5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvUGxhdGZvcm1IYW5kbGUucHkK
QEAgLTAsMCArMSwxOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGNvZGluZyA6IHV0Zi04
CitpbXBvcnQgYWJjCisKKworY2xhc3MgUGxhdGZvcm1IYW5kbGUob2JqZWN0KToKKworICAgIEBh
YmMuYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcHJlcGFyZUVudihzZWxmKToKKyAgICAgICAgcGFz
cworCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiBsYXVuY2hVcmwoc2VsZiwgdXJs
LCBicm93c2VyQnVpbGRQYXRoPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJjLmFic3Ry
YWN0bWV0aG9kCisgICAgZGVmIGNsb3NlQnJvd3NlcihzZWxmKToKKyAgICAgICAgcGFzcwpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUGxhdGZvcm1IYW5k
bGUvUGxhdGZvcm1IYW5kbGVGYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9V
dGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvUGxhdGZvcm1IYW5kbGVGYWN0b3J5LnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUwZDlmNDExMjI5MjVhYWU2N2RmNWY3OGUxOTgxZDgwODk0NjU4MjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9QbGF0Zm9ybUhhbmRs
ZS9QbGF0Zm9ybUhhbmRsZUZhY3RvcnkucHkKQEAgLTAsMCArMSwyNyBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjIGNvZGluZyA6IHV0Zi04CisKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKKwor
ZnJvbSAuLkdlbmVyaWNIYW5kbGVGYWN0b3J5IGltcG9ydCBHZW5lcmljSGFuZGxlRmFjdG9yeQor
CisKK2hhbmRsZUZpbGVOYW1lID0gJ1BsYXRmb3JtSGFuZGxlcy5qc29uJwordHJ5OgorICAgIGhh
bmRsZXMgPSBqc29uLmxvYWQoCisgICAgICAgIG9wZW4oCisgICAgICAgICAgICBvcy5wYXRoLmpv
aW4oCisgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKKyAgICAgICAg
ICAgICAgICBoYW5kbGVGaWxlTmFtZSksCisgICAgICAgICAgICAncicpKQorZXhjZXB0OgorICAg
IHByaW50ICdMb2FkaW5nICVzIGZhaWxlZCwgc3RhcnQgdXNpbmcgcHJlLWRlZmluZWQgaGFuZGxl
cycgJSAoaGFuZGxlRmlsZU5hbWUpCisgICAgaGFuZGxlcyA9IHsKKyAgICAgICAgJ29zeCc6IHsK
KyAgICAgICAgICAgICdzYWZhcmknOiB7J21vZHVsZU5hbWUnOiAnT1NYU2FmYXJpSGFuZGxlJywg
J2ZpbGVQYXRoJzogJ1BsYXRmb3JtSGFuZGxlLk9TWFNhZmFyaUhhbmRsZSd9LAorICAgICAgICAg
ICAgJ2Nocm9tZSc6IHsnbW9kdWxlTmFtZSc6ICdPU1hDaHJvbWVIYW5kbGUnLCAnZmlsZVBhdGgn
OiAnUGxhdGZvcm1IYW5kbGUuT1NYQ2hyb21lSGFuZGxlJ30sCisgICAgICAgIH0sCisgICAgfQor
CitQbGF0Zm9ybUhhbmRsZUZhY3RvcnkgPSBHZW5lcmljSGFuZGxlRmFjdG9yeShoYW5kbGVzKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUGxhdGZvcm1I
YW5kbGUvUGxhdGZvcm1IYW5kbGVzLmpzb24gYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0
aWxpdGllcy9QbGF0Zm9ybUhhbmRsZS9QbGF0Zm9ybUhhbmRsZXMuanNvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
OTMxY2E1ZDRkMzQ4Y2QyMWJlMDQ5YjVkZTIwMTIzNGFjYWIxOWRlCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvUGxh
dGZvcm1IYW5kbGVzLmpzb24KQEAgLTAsMCArMSwxMiBAQAoreworICAib3N4IjogeworICAgICJj
aHJvbWUiOiB7CisgICAgICAibW9kdWxlTmFtZSI6ICJPU1hDaHJvbWVIYW5kbGUiLCAKKyAgICAg
ICJmaWxlUGF0aCI6ICJQbGF0Zm9ybUhhbmRsZS5PU1hDaHJvbWVIYW5kbGUiCisgICAgfSwgCisg
ICAgInNhZmFyaSI6IHsKKyAgICAgICJtb2R1bGVOYW1lIjogIk9TWFNhZmFyaUhhbmRsZSIsIAor
ICAgICAgImZpbGVQYXRoIjogIlBsYXRmb3JtSGFuZGxlLk9TWFNhZmFyaUhhbmRsZSIKKyAgICB9
CisgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVz
L1BsYXRmb3JtSGFuZGxlL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9V
dGlsaXRpZXMvUGxhdGZvcm1IYW5kbGUvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJi
MmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUmVzdWx0V3JhcHBlci9CYXNlUmVzdWx0V3JhcHBlci5w
eSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1Jlc3VsdFdyYXBwZXIvQmFz
ZVJlc3VsdFdyYXBwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2I2ZjcyN2NjMjdiMzk0ZjMxNTI5ODY1OGQ0
NTgyZTY5MGJkNTljZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9S
dW4vVXRpbGl0aWVzL1Jlc3VsdFdyYXBwZXIvQmFzZVJlc3VsdFdyYXBwZXIucHkKQEAgLTAsMCAr
MSwxMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGNvZGluZyA6IHV0Zi04Citmcm9tIGFi
YyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKKworCitjbGFzcyBCYXNlUmVzdWx0V3JhcHBlcihvYmpl
Y3QpOgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHdyYXAoc2VsZiwgcmVzdWx0cyk6
CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRp
bGl0aWVzL1Jlc3VsdFdyYXBwZXIvTWVyZ2VSZXN1bHRXcmFwcGVyLnB5IGIvVG9vbHMvU2NyaXB0
cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUmVzdWx0V3JhcHBlci9NZXJnZVJlc3VsdFdyYXBwZXIu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjdlOWI5MjFmMWE1MjJiMzUyYjg4OGEwNjg3YmE3OWM2YjBhNzQwNgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1Jl
c3VsdFdyYXBwZXIvTWVyZ2VSZXN1bHRXcmFwcGVyLnB5CkBAIC0wLDAgKzEsNzEgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIyBjb2RpbmcgOiB1dGYtOAorZnJvbSBCYXNlUmVzdWx0V3JhcHBl
ciBpbXBvcnQgQmFzZVJlc3VsdFdyYXBwZXIKK2ltcG9ydCB0eXBlcworCisKK2NsYXNzIERpY3Rp
b25hcnlNZXJnZXIoQmFzZVJlc3VsdFdyYXBwZXIpOgorCisgICAgZGVmIHdyYXAoc2VsZiwgZGlj
dHMpOgorICAgICAgICBpZiBsZW4oZGljdHMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorICAgICAgICByZXQgPSB7fQorICAgICAgICBmb3IgZGljIGluIGRpY3RzOgorICAgICAgICAg
ICAgcmV0ID0gc2VsZi5tZXJnZShyZXQsIGRpYykKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAg
QGNsYXNzbWV0aG9kCisgICAgZGVmIG1lcmdlKGNscywgYSwgYik6CisgICAgICAgIGFzc2VydChp
c2luc3RhbmNlKGEsIHR5cGUoYikpKQorICAgICAgICBhcmdUeXBlID0gdHlwZShhKQorICAgICAg
ICAjIHNwZWNpYWwgaGFuZGxlIGZvciBsaXN0IHR5cGUsIGFuZCBzaG91bGQgYmUgaGFuZGxlIGJl
Zm9yZSBlcXVhbCBjaGVjaworICAgICAgICBpZiBhcmdUeXBlID09IHR5cGVzLkxpc3RUeXBlOgor
ICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAgIGlmIGEgPT0gYjoKKyAgICAgICAgICAg
IHJldHVybiBhCisgICAgICAgIGlmIGFyZ1R5cGUgPT0gdHlwZXMuRGljdFR5cGU6CisgICAgICAg
ICAgICByZXN1bHQgPSB7fQorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYS5pdGVtcygp
OgorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBiOgorICAgICAgICAgICAgICAgICAgICByZXN1
bHRba2V5XSA9IGNscy5tZXJnZSh2YWx1ZSwgYltrZXldKQorICAgICAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGZv
ciBrZXksIHZhbHVlIGluIGIuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGlu
IHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAjIGZvciBvdGhlciB0eXBlcworICAgICAgICBy
ZXR1cm4gYSArIGIKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1lcmdlciA9
IERpY3Rpb25hcnlNZXJnZXIoKQorICAgIGQxID0geworICAgICAgICAnU3BlZWRvbWV0ZXInOiB7
CisgICAgICAgICAgICAnbWV0cmljcyc6IHsKKyAgICAgICAgICAgICAgICAnVGltZSc6IFsnVG90
YWwnXX0sICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAgICAnVmFsaWluYUpTLVRvZG9NVkMnOiB7
CisgICAgICAgICAgICAgICAgICAgICdtZXRyaWNzJzogWydUb3RhbCddLCAndGVzdHMnOiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAnQWRkaW5nMTAwSXRlbXMnOiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ21ldHJpY3MnOiBbJ1RvdGFsJ10sICd0ZXN0cyc6IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ1N5bmMnOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnbWV0cmljcyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnVGltZSc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2N1cnJlbnQnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMSwgMiwgMywgNCwgNV1dfX19fX19fX19fQorICAgIGQyID0geworICAgICAg
ICAnU3BlZWRvbWV0ZXInOiB7CisgICAgICAgICAgICAnbWV0cmljcyc6IHsKKyAgICAgICAgICAg
ICAgICAnVGltZSc6IFsnVG90YWwnXX0sICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAgICAnVmFs
aWluYUpTLVRvZG9NVkMnOiB7CisgICAgICAgICAgICAgICAgICAgICdtZXRyaWNzJzogWydUb3Rh
bCddLCAndGVzdHMnOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAnQWRkaW5nMTAwSXRlbXMn
OiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21ldHJpY3MnOiBbJ1RvdGFsJ10sICd0
ZXN0cyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N5bmMnOiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWV0cmljcyc6IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGltZSc6IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnJlbnQnOiBbCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMiwgMywgNCwgNSwgNl1dfX19fX19fX19
fQorICAgIHByaW50IG1lcmdlci5tZXJnZShkMSwgZDIpCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9SZXN1bHRXcmFwcGVyL1Jlc3VsdFdyYXBwZXJGYWN0
b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUmVzdWx0V3JhcHBl
ci9SZXN1bHRXcmFwcGVyRmFjdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODgwNDhjNjllOTQ4OGNjOTRj
ZTkxMGI1ZmFlYjA3NjQ2M2RhMTZiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9Q
ZXJmQXV0b1J1bi9VdGlsaXRpZXMvUmVzdWx0V3JhcHBlci9SZXN1bHRXcmFwcGVyRmFjdG9yeS5w
eQpAQCAtMCwwICsxLDU3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgY29kaW5nIDogdXRm
LTgKKworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworCitmcm9tIC4uR2VuZXJpY0hhbmRsZUZhY3Rv
cnkgaW1wb3J0IEdlbmVyaWNIYW5kbGVGYWN0b3J5CisKKworaGFuZGxlRmlsZU5hbWUgPSAnUmVz
dWx0V3JhcHBlcnMuanNvbicKK3RyeToKKyAgICBoYW5kbGVzID0ganNvbi5sb2FkKAorICAgICAg
ICBvcGVuKAorICAgICAgICAgICAgb3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgIG9zLnBh
dGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgICAgICAgICAgaGFuZGxlRmlsZU5hbWUpLAor
ICAgICAgICAgICAgJ3InKSkKK2V4Y2VwdDoKKyAgICBwcmludCAnTG9hZGluZyAlcyBmYWlsZWQs
IHN0YXJ0IHVzaW5nIHByZS1kZWZpbmVkIGhhbmRsZXMnICUgKGhhbmRsZUZpbGVOYW1lKQorICAg
IGhhbmRsZXMgPSB7CisgICAgICAgICdNZXJnZVJlc3VsdFdyYXBwZXInOiB7CisgICAgICAgICAg
ICAnZmlsZVBhdGgnOiAnUmVzdWx0V3JhcHBlci5NZXJnZVJlc3VsdFdyYXBwZXInLAorICAgICAg
ICAgICAgJ21vZHVsZU5hbWUnOiAnRGljdGlvbmFyeU1lcmdlcid9fQorCitSZXN1bHRXcmFwcGVy
RmFjdG9yeSA9IEdlbmVyaWNIYW5kbGVGYWN0b3J5KGhhbmRsZXMpCisKK2lmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CisgICAgbWVyZ2VyID0gUmVzdWx0V3JhcHBlckZhY3RvcnkuY3JlYXRlKFsn
TWVyZ2VSZXN1bHRXcmFwcGVyJ10pCisgICAgZDEgPSB7CisgICAgICAgICdTcGVlZG9tZXRlcic6
IHsKKyAgICAgICAgICAgICdtZXRyaWNzJzogeworICAgICAgICAgICAgICAgICdUaW1lJzogWydU
b3RhbCddfSwgJ3Rlc3RzJzogeworICAgICAgICAgICAgICAgICdWYWxpaW5hSlMtVG9kb01WQyc6
IHsKKyAgICAgICAgICAgICAgICAgICAgJ21ldHJpY3MnOiBbJ1RvdGFsJ10sICd0ZXN0cyc6IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICdBZGRpbmcxMDBJdGVtcyc6IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnbWV0cmljcyc6IFsnVG90YWwnXSwgJ3Rlc3RzJzogeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnU3luYyc6IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdtZXRyaWNzJzogeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdUaW1lJzogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnY3VycmVudCc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLCAyLCAzLCA0LCA1XV19fX19fX19fX19CisgICAgZDIgPSB7CisgICAg
ICAgICdTcGVlZG9tZXRlcic6IHsKKyAgICAgICAgICAgICdtZXRyaWNzJzogeworICAgICAgICAg
ICAgICAgICdUaW1lJzogWydUb3RhbCddfSwgJ3Rlc3RzJzogeworICAgICAgICAgICAgICAgICdW
YWxpaW5hSlMtVG9kb01WQyc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ21ldHJpY3MnOiBbJ1Rv
dGFsJ10sICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdBZGRpbmcxMDBJdGVt
cyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWV0cmljcyc6IFsnVG90YWwnXSwg
J3Rlc3RzJzogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU3luYyc6IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXRyaWNzJzogeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaW1lJzogeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3VycmVudCc6IFsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAyLCAzLCA0LCA1LCA2XV19fX19fX19
fX19CisgICAgcHJpbnQgbWVyZ2VyLm1lcmdlKGQxLCBkMikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1Jlc3VsdFdyYXBwZXIvUmVzdWx0V3JhcHBlcnMu
anNvbiBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1Jlc3VsdFdyYXBwZXIv
UmVzdWx0V3JhcHBlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZGZmZTg2ZGI0ZTMwN2YzNzRhNWMxNzY5
ZWM3OTVmYmZhMDQ4YTExCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0
b1J1bi9VdGlsaXRpZXMvUmVzdWx0V3JhcHBlci9SZXN1bHRXcmFwcGVycy5qc29uCkBAIC0wLDAg
KzEsNiBAQAoreworICAiTWVyZ2VSZXN1bHRXcmFwcGVyIjogeworICAgICJtb2R1bGVOYW1lIjog
IkRpY3Rpb25hcnlNZXJnZXIiLCAKKyAgICAiZmlsZVBhdGgiOiAiUmVzdWx0V3JhcHBlci5NZXJn
ZVJlc3VsdFdyYXBwZXIiCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGllcy9SZXN1bHRXcmFwcGVy
L19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGlsaXRpZXMvUmVzdWx0
V3JhcHBlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3
NzVhZDhjMmU0OGM1MzkxCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0
aWxpdGllcy9VdGlscy5weSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vVXRpbGl0aWVzL1V0
aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY1ODdmMzVkNWU0NmIyMDczMjhlMTMwYWI5MjgyMmM0MTdlNmEw
NzIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL1BlcmZBdXRvUnVuL1V0aWxpdGll
cy9VdGlscy5weQpAQCAtMCwwICsxLDU2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgY29k
aW5nOiB1dGYtOAoraW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgbG9nZ2luZworCisK
K2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1bicpCisKKworY2xhc3MgTW9k
dWxlTm90Rm91bmRFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitkZWYgbG9hZE1vZHVs
ZShtb2R1bGVEZXNjKToKKyAgICB0cnk6CisgICAgICAgIHJldCA9IGdldGF0dHIoX19pbXBvcnRf
Xyhtb2R1bGVEZXNjWydmaWxlUGF0aCddLCBnbG9iYWxzKCksIGxvY2FscygpLCBtb2R1bGVEZXNj
WworICAgICAgICAgICAgICAgICAgICAgICdtb2R1bGVOYW1lJ10sIC0xKSwgbW9kdWxlRGVzY1sn
bW9kdWxlTmFtZSddKQorICAgICAgICByZXR1cm4gcmV0CisgICAgZXhjZXB0IEV4Y2VwdGlvbiBh
cyBlOgorICAgICAgICByYWlzZQorICAgICAgICByYWlzZSBNb2R1bGVOb3RGb3VuZEVycm9yKAor
ICAgICAgICAgICAgJ01vZHVsZSAoJXMpIHdpdGggcGF0aCglcykgaXMgbm90IGZvdW5kJyAlCisg
ICAgICAgICAgICAobW9kdWxlRGVzY1snbW9kdWxlTmFtZSddLCBtb2R1bGVEZXNjWydmaWxlUGF0
aCddKSkKKworCitkZWYgZ2V0UGF0aEZyb21Qcm9qZWN0Um9vdChyZWxhdGl2ZVBhdGhUb1Byb2pl
Y3RSb290KToKKyAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRo
LmRpcm5hbWUoCisgICAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxl
X18pKSksIHJlbGF0aXZlUGF0aFRvUHJvamVjdFJvb3QpKQorCisKKyMgQm9ycm93IHRoaXMgY29k
ZSBmcm9tCisjICdodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIyODE4NTAvdGlt
ZW91dC1mdW5jdGlvbi1pZi1pdC10YWtlcy10b28tbG9uZy10by1maW5pc2gnCitjbGFzcyBUaW1l
b3V0RXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgdGltZW91dDoKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBzZWNvbmRzPTEsIGVycm9yX21lc3NhZ2U9J1RpbWVvdXQnKToK
KyAgICAgICAgc2VsZi5zZWNvbmRzID0gc2Vjb25kcworICAgICAgICBzZWxmLmVycm9yX21lc3Nh
Z2UgPSBlcnJvcl9tZXNzYWdlCisKKyAgICBkZWYgaGFuZGxlX3RpbWVvdXQoc2VsZiwgc2lnbnVt
LCBmcmFtZSk6CisgICAgICAgIHJhaXNlIFRpbWVvdXRFcnJvcihzZWxmLmVycm9yX21lc3NhZ2Up
CisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25h
bC5TSUdBTFJNLCBzZWxmLmhhbmRsZV90aW1lb3V0KQorICAgICAgICBzaWduYWwuYWxhcm0oc2Vs
Zi5zZWNvbmRzKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJh
Y2spOgorICAgICAgICBzaWduYWwuYWxhcm0oMCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgorICAgIHByaW50IGdldFBhdGhGcm9tUHJvamVjdFJvb3QoJy4uLy4uL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvJykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9S
dW4vVXRpbGl0aWVzL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9VdGls
aXRpZXMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1
YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9QZXJmQXV0b1J1bi9fX2lu
aXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvUGVyZkF1dG9SdW4vX19pbml0X18ucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251527</attachid>
            <date>2015-04-23 19:20:02 -0700</date>
            <delta_ts>2015-04-24 12:19:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144038-20150423191857.patch</filename>
            <type>text/plain</type>
            <size>49378</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMTM2CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1
bi1iZW5jaG1hcmsgYi9Ub29scy9TY3JpcHRzL3J1bi1iZW5jaG1hcmsKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZk
ZTA3NzZmZGUwYWFiZjM0MmM0ZjdlNTk1NTc1YzVlYjFjYWVjMgotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvcnVuLWJlbmNobWFyawpAQCAtMCwwICsxLDM0IEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgbG9nZ2luZworZnJvbSB3ZWJr
aXRweS5iZW5jaG1hcmtfcnVubmVyLmJlbmNobWFya19ydW5uZXIgaW1wb3J0IEJlbmNobWFya1J1
bm5lcgorCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1bicpCitsb2dn
ZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKK2NoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkK
K2NoLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCitmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRl
cignJShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2Upcycp
CitjaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorbG9nZ2VyLmFkZEhhbmRsZXIoY2gpCisKKwor
ZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlw
dGlvbj0nQXV0b21hdGUgdGhlIGJyb3dzZXIgYmFzZWQgcGVyZm9ybWFuY2UgYmVuY2htYXJrcycp
CisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRwdXQtZmlsZScsIGRlc3Q9J291dHB1dCcs
IGRlZmF1bHQ9Tm9uZSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJ1aWxkLWRpcmVjdG9y
eScsIGRlc3Q9J2J1aWxkRGlyJywgcmVxdWlyZWQ9VHJ1ZSkKKyAgICBwYXJzZXIuYWRkX2FyZ3Vt
ZW50KCctLXBsYW4nLCBkZXN0PSdwbGFuJywgcmVxdWlyZWQ9VHJ1ZSkKKyAgICBwYXJzZXIuYWRk
X2FyZ3VtZW50KCctLXBsYXRmb3JtJywgZGVzdD0ncGxhdGZvcm0nLCBkZWZhdWx0PSdvc3gnLCBj
aG9pY2VzPVsnb3N4JywgJ2lvcycsICd3aW5kb3dzJ10sIHJlcXVpcmVkPVRydWUpCisgICAgIyBG
SVhNRTogU2hvdWxkIHdlIGFkZCBjaHJvbWUgYXMgYW4gb3B0aW9uPyBXZWxsLCBjaHJvbWUgdXNl
cyB3ZWJraXQgaW4gaU9TLgorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYnJvd3NlcicsIGRl
c3Q9J2Jyb3dzZXInLCBkZWZhdWx0PSdzYWZhcmknLCBjaG9pY2VzPVsnc2FmYXJpJywgJ2Nocm9t
ZSddLCByZXF1aXJlZD1UcnVlKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAg
bG9nZ2VyLmluZm8oJ0luaXRpYWxpemluZyBwcm9ncmFtIHdpdGggZm9sbG93aW5nIHBhcmFtZXRl
cnMnKQorICAgIGxvZ2dlci5pbmZvKCdcdG91dHB1dCBmaWxlIG5hbWVcdDogJXMnICUgYXJncy5v
dXRwdXQpCisgICAgbG9nZ2VyLmluZm8oJ1x0YnVpbGQgZGlyZWN0b3J5XHQ6ICVzJyAlIGFyZ3Mu
YnVpbGREaXIpCisgICAgbG9nZ2VyLmluZm8oJ1x0cGxhbiBuYW1lXHQ6ICVzJywgYXJncy5wbGFu
KQorICAgIHJ1bm5lciA9IEJlbmNobWFya1J1bm5lcihhcmdzLnBsYW4sIGFyZ3MuYnVpbGREaXIs
IGFyZ3Mub3V0cHV0LCBhcmdzLnBsYXRmb3JtLCBhcmdzLmJyb3dzZXIpCisgICAgcnVubmVyLmV4
ZWN1dGUoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL1JFQURNRS5tZCBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9SRUFETUUubWQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWI5YWE1MDI4NmE5YmFkMTYwYmZlNmU1NDYwMTUzZmI5ZmJhZTM0ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9SRUFETUUu
bWQKQEAgLTAsMCArMSwxMTkgQEAKKyMgUGVyZkF1dG9SdW4KK1RoaXMgaXMgYSB0b29sIGZvciBh
dXRvbWF0aW5nIHRoZSBicm93c2VyIGJhc2VkIGJlbmNobWFya3MoZS5nLiBTcGVlZG9tZXRlciwg
SmV0U3RyZWFtKQorIyMgUHJvamVjdCBTdHJ1Y3R1cmUKK2BgYAorYmVuY2htYXJrX3J1bm5lcgor
4pSc4pSA4pSAIFJFQURNRS5tZAor4pSc4pSA4pSAIF9faW5pdF9fLnB5CivilJzilIDilIAgYmVu
Y2htYXJrX2J1aWxkZXIKK+KUgsKgwqAg4pSc4pSA4pSAIF9faW5pdF9fLnB5CivilILCoMKgIOKU
nOKUgOKUgCBiZW5jaG1hcmtfYnVpbGRlcl9mYWN0b3J5LnB5CivilILCoMKgIOKUnOKUgOKUgCBi
ZW5jaG1hcmtfYnVpbGRlcnMuanNvbgor4pSCwqDCoCDilJzilIDilIAgZ2VuZXJpY19iZW5jaG1h
cmtfYnVpbGRlci5weQor4pSCwqDCoCDilJTilIDilIAgamV0c3RyZWFtX2JlbmNobWFya19idWls
ZGVyLnB5CivilJzilIDilIAgYmVuY2htYXJrX3J1bm5lci5weQor4pSc4pSA4pSAIGJyb3dzZXJf
ZHJpdmVyCivilILCoMKgIOKUnOKUgOKUgCBfX2luaXRfXy5weQor4pSCwqDCoCDilJzilIDilIAg
YnJvd3Nlcl9kcml2ZXIucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGJyb3dzZXJfZHJpdmVyX2ZhY3Rv
cnkucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGJyb3dzZXJfZHJpdmVycy5qc29uCivilILCoMKgIOKU
nOKUgOKUgCBvc3hfY2hyb21lX2RyaXZlci5weQor4pSCwqDCoCDilJTilIDilIAgb3N4X3NhZmFy
aV9kcml2ZXIucHkKK+KUnOKUgOKUgCBkYXRhCivilILCoMKgIOKUnOKUgOKUgCBwYXRjaGVzCivi
lILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIEpldFN0cmVhbS5wYXRjaAor4pSCwqDCoCDilILCoMKg
IOKUlOKUgOKUgCBTcGVlZG9tZXRlci5wYXRjaAor4pSCwqDCoCDilJTilIDilIAgcGxhbnMKK+KU
gsKgwqAgICAgIOKUnOKUgOKUgCBqZXRzdHJlYW0ucGxhbgor4pSCwqDCoCAgICAg4pSU4pSA4pSA
IHNwZWVkb21ldGVyLnBsYW4KK+KUnOKUgOKUgCBnZW5lcmljX2ZhY3RvcnkucHkKK+KUnOKUgOKU
gCBodHRwX3NlcnZlcl9kcml2ZXIKK+KUgsKgwqAg4pSc4pSA4pSAIF9faW5pdF9fLnB5CivilILC
oMKgIOKUnOKUgOKUgCBodHRwX3NlcnZlcgor4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCB0d2lz
dGVkX2h0dHBfc2VydmVyLnB5CivilILCoMKgIOKUnOKUgOKUgCBodHRwX3NlcnZlcl9kcml2ZXIu
cHkKK+KUgsKgwqAg4pSc4pSA4pSAIGh0dHBfc2VydmVyX2RyaXZlcl9mYWN0b3J5LnB5CivilILC
oMKgIOKUnOKUgOKUgCBodHRwX3NlcnZlcl9kcml2ZXJzLmpzb24KK+KUgsKgwqAg4pSU4pSA4pSA
IHNpbXBsZV9odHRwX3NlcnZlcl9kcml2ZXIucHkKK+KUnOKUgOKUgCByZXN1bHRfd3JhcHBlcgor
4pSCwqDCoCDilJzilIDilIAgX19pbml0X18ucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGJhc2VfcmVz
dWx0X3dyYXBwZXIucHkKK+KUgsKgwqAg4pSc4pSA4pSAIG1lcmdlX3Jlc3VsdF93cmFwcGVyLnB5
CivilILCoMKgIOKUnOKUgOKUgCByZXN1bHRfd3JhcHBlcl9mYWN0b3J5LnB5CivilILCoMKgIOKU
lOKUgOKUgCByZXN1bHRfd3JhcHBlcnMuanNvbgor4pSU4pSA4pSAIHV0aWxzLnB5CitgYGAKKyMj
IFJlcXVpcmVtZW50cworKiBweXRob24gbW9kdWxlczoKKyAgICAqIFB5T2JqYworICAgICogcHN1
dGlscyAob3B0aW9uYWwpCisKKyMjIEhPVyBUT3MKKyMjIyBIb3cgdG8gcnVuCitgYGBzaGVsbAor
ICAgIHB5dGhvbiBwYXRoL3RvL3J1bl9iZW5jaG1hcmsgLS1idWlsZC1kaXJlY3RvcnkgcGF0aC90
by9icm93c2VyL2RpcmVjdG9yeSAtLXBsYW4ganNvbl9mb3JtYXRfcGxhbiAtLXBsYXRmb3JtIHRh
cmdldF9wbGF0Zm9ybSAtLWJyb3dzZXIgdGFyZ2V0X2Jyb3dzZXIKK2BgYAorKiAqKnBhdGgvdG8v
YnJvd3Nlci9kaXJlY3RvcnkqKjogc2hvdWxkIGJlIHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUg
ZXhlY3V0YWJsZSBiaW5hcnkoZS5nLiAvQXBwbGljYXRpb24vIG9uIE9TWCB3aGljaCBjb250YWlu
cyBTYWZhcmkuYXBwKQorKiAqKmpzb25fZm9ybWF0X3BsYW4qKjogdGhlIGJlbmNobWFyayBwbGFu
IHlvdSB3YW50IHRvIGV4ZWN1dGUgIAorCisjIyMgSG93IHRvIGNyZWF0ZSBhIHBsYW4KK1RvIGNy
ZWF0ZSBhIHBsYW4sIHlvdSBtYXkgcmVmZXIgdG8gUGxhbnMvamV0c3RyZWFtLnBsYW4uCitgYGBq
c29uIAoreworICAgICJodHRwX3NlcnZlcl9kcml2ZXIiOiAiU2ltcGxlSFRUUFNlcnZlckRyaXZl
ciIsIAorICAgICJiZW5jaG1hcmtzIjogWworICAgICAgICB7CisgICAgICAgICAgICAidGltZW91
dCIgOiA2MDAsCisgICAgICAgICAgICAiY291bnQiOiA1LAorICAgICAgICAgICAgImJlbmNobWFy
a19idWlsZGVyIjogIkpldFN0cmVhbUJlbmNobWFya0J1aWxkZXIiLAorICAgICAgICAgICAgIm9y
aWdpbmFsX2JlbmNobWFyayI6ICIuLi8uLi8uLi8uLi9QZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVh
bSIsCisgICAgICAgICAgICAiYmVuY2htYXJrX3BhdGNoIjogImRhdGEvcGF0Y2hlcy9KZXRTdHJl
YW0ucGF0Y2giLAorICAgICAgICAgICAgImVudHJ5X3BvaW50IjogIkpldFN0cmVhbS9KZXRTdHJl
YW0tMS4wLjEvaW5kZXguaHRtbCIsCisgICAgICAgICAgICAicmVzdWx0X3dyYXBwZXIiOiAiTWVy
Z2VSZXN1bHRXcmFwcGVyIiwKKyAgICAgICAgICAgICJvdXRwdXRfZmlsZSI6ICJqZXRzdHJlYW0u
cmVzdWx0IgorICAgICAgICB9CisgICAgXQorfQorYGBgCitQbGFuIGlzIGEganNvbi1mb3JtYXR0
ZWQgZGljdGlvbmFyeSB3aGljaCBjb250YWlucyBmb2xsb3dpbmcga2V5cyAKKyogKipodHRwX3Nl
cnZlcl9kcml2ZXIqKjogKCoqY2FzZS1zZW5zaXRpdmUqKikgdGhlIGh0dHAgc2VydmVyIG1vZHVs
ZSB5b3Ugd2FudCB0byBob3N0IHRoZSByZXNvdXJjZXMuIEN1cnJlbnQgYXZhaWxhYmxlIG9wdGlv
biBpcyAiU2ltcGxlSFRUUFNlcnZlckhhbmRsZSIgd2hpY2ggaXMgYmFzZWQgb24gcHl0aG9uIHR3
aXN0ZWQgZnJhbWV3b3JrLgorKiAqKmJlbmNobWFya3MqKjogY29udGFpbnMgYSBsaXN0IG9mIGJl
bmNobWFya3MgeW91IHdhbnQgdG8gcnVuLCBlYWNoIGJlbmNobWFyayBpcyBhIGxpc3QgY29udGFp
bnMgZm9sbG93aW5nIGtleXM6CisgICAgKiAqKnRpbWVvdXQqKjogdGltZSBsaW1pdCBmb3IgKipF
QUNIIFJVTioqIG9mIHRoZSBiZW5jaG1hcmsuIFRoaXMgY2FuIGF2b2lkIHByb2dyYW0gZ2V0dGlu
ZyBzdHVjayBpbiB0aGUgZXh0cmVtZSBjaXJjdW1zdGFuY2VzLiBUaGUgdGltZSBsaW1pdCBpcyBz
dWdnZXN0ZWQgdG8gYmUgMS41LTJ4IHRoZSB0aW1lIHNwZW50IGluIGEgbm9ybWFsIHJ1bi4KKyAg
ICAqICoqY291bnQqKjogdGhlIG51bWJlciBvZiB0aW1lcyB5b3Ugd2FudCB0byBydW4gYmVuY2ht
YXJrCisgICAgKiAqKmJlbmNobWFya19idWlsZGVyKio6ICBidWlsZGVyIG9mIHRoZSBiZW5jaG1h
cmsgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGFycmFuZ2luZyBiZW5jaG1hcmsgYmVmb3JlIHRo
ZSB3ZWIgc2VydmVyIHNlcnZpbmcgdGhlIGRpcmVjdG9yeS4gSW4gbW9zdCBjYXNlLCAnR2VuZXJp
Y0JlbmNobWFya0hhbmRsZXInIGlzIHN1ZmZpY2llbnQuIEl0IGNvcGllcyB0aGUgYmVuY2htYXJr
IHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgYXBwbGllcyBwYXRjaCB0byBiZW5jaG1hcmsu
IElmIHlvdSBoYXZlIHNwZWNpYWwgcmVxdWlyZW1lbnQsIHlvdSBjb3VsZCBkZXNpZ24geW91ciBv
d24gYmVuY2htYXJrIGhhbmRsZSwganVzdCBsaWtlIHRoZSAnSmV0U3RyZWFtQmVuY2htYXJrSGFu
ZGxlJyBpbiB0aGlzIGV4YW1wbGUuCisgICAgKiAqKm9yaWdpbmFsX2JlbmNobWFyayoqOiBwYXRo
IG9mIGJlbmNobWFyaywgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSByb290IG9mIHRoaXMgcHJvamVj
dCAoJ2JlbmNobWFya19ydW5uZXInIGRpcmVjdG9yeSkKKyAgICAqICoqYmVuY2htYXJrX3BhdGgq
KjogKCoqT1BUSU9OQUwqKikgcGF0aCBvZiBwYXRjaCwgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBy
b290IG9mIHRoaXMgcHJvamVjdCAoJ2JlbmNobWFya19ydW5uZXInIGRpcmVjdG9yeSkKKyAgICAq
ICoqZW50cnlfcG9pbnQqKjogdGhlIHJlbGF0aXZlIHVybCB5b3Ugd2FudCBicm93c2VyIHRvIGxh
dW5jaCAoYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB3ZWJyb290KQorICAgICogKipyZXN1bHRfd3Jh
cHBlcioqOiB0aGUgd3JhcHBlciBtb2R1bGUgeW91IHdhbnQgdG8gd3JhcCB0aGUgcmVzdWx0cy4g
Q3VycmVudCBhdmFpbGJsZSBvcHRpb24gaXMgIk1lcmdlUmVzdWx0V3JhcHBlciIuIFRvIGN1c3Rv
bWl6ZSB5b3VyIG93biByZXN1bHQgd3JhcHBlciwgZXh0ZW5kcyBVdGlsaXRpZXMvUmVzdWx0V3Jh
cHBlci9CYXNlUmVzdWx0V3JhcHBlci5weSBhbmQgcmVnaXN0ZXIgeW91ciBtb2R1bGUgaW4gVXRp
bGl0aWVzL1Jlc3VsdFdyYXBwZXIvUmVzdWx0V3JhcHBlci5qc29uCisgICAgKiAqKm91dHB1dF9m
aWxlKio6IHNwZWNpZnkgdGhlIG91dHB1dCBmaWxlCisKKyMjIyBIb3cgdG8gaW1wb3J0IGEgYmVu
Y2htYXJrCisqIE1vZGlmeSB0aGUgYmVuY2htYXJrIGh0bWwgZmlsZSwgbWFrZSBzdXJlIHRoZSBw
YWdlIGhhcyBmb2xsb3dpbmcgZnVuY3Rpb25hbGl0aWVzOgorICAgICogV2hlbiB5b3UgbGF1bmNo
IHRoZSBwYWdlKCdlbnRyeV9wb2ludCcgaW4gYmVuY2htYXJrKSwgdGhlIHRlc3Qgd2lsbCBzdGFy
dCBhdXRvbWF0aWNhbGx5CisgICAgKiBPcmdhbml6aW5nIHRoZSByZXN1bHRzCisgICAgKiAnUE9T
VCcgaW5mb3JtYXRpb24gdG8gJy9yZXBvcnQnLCBhbmQgJ0dFVCcgJy9zaHV0ZG93bicgd2hlbiBw
b3N0IHN1Y2NlZWRzLiBFeGFtcGxlOgorICAgICogYGBganMKKyAgICAgIHZhciB4aHIgPSBuZXcg
WE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgIHhoci5vcGVuKCJQT1NUIiwgIi9yZXBvcnQiKTsKKyAg
ICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCAiYXBwbGljYXRpb24vanNv
biIpOworICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgcmVzdWx0
cy5sZW5ndGgpOworICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbm5lY3Rpb24iLCAiY2xv
c2UiKTsKKyAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICBpZih4aHIucmVhZHlTdGF0ZSA9PSA0ICYmIHhoci5zdGF0dXMgPT0gMjAwKSB7CisgICAg
ICAgICAgICAgIHZhciBjbG9zZVJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAg
ICAgICAgICAgY2xvc2VSZXF1ZXN0Lm9wZW4oIkdFVCIsICcvc2h1dGRvd24nKTsKKyAgICAgICAg
ICAgICAgY2xvc2VSZXF1ZXN0LnNlbmQoKQorICAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHho
ci5zZW5kKHJlc3VsdHMpOworYGBgIAorKiBDcmVhdGUgYSBwYXRjaCBmaWxlIGFnYWluc3Qgb3Jp
Z2luYWwgZmlsZQorICAgICogR28gdG8gdGhlIGRpcmVjdG9yeSBjb250YWlucyB0aGUgYmVuY2ht
YXJrIGRpcmVjdG9yeSAoZS5nLiBmb3IgSmV0U3RyZWFtLCB5b3Ugc2hvdWxkIGdvIHRvIFBlcmZv
cm1hY2VUZXN0IGZvbGRlcikKKyAgICAqIFVzZSBgYGBnaXQgZGlmZiAtLXJlbGF0aXZlIEhFQUQg
PiB5b3VyLnBhdGNoYGBgIHRvIGNyZWF0ZSB5b3VyIHBhdGNoCisgICAgKiAoKipTdWdnZXN0ZWQq
KikgbW92ZSB0aGUgcGF0Y2ggdG8gdGhlICdQYXRjaGVzJyBkaXJlY3RvcnkgdW5kZXIgcHJvamVj
dCBkaXJlY3RvcnkKKyogQ3JlYXRlIGEgcGxhbiBmb3IgdGhlIGJlbmNobWFyayAocmVmZXIgdG8g
KioiSG93IHRvIGNyZWF0ZSBhIHBsYW4iKiogZm9yIG1vcmUgZGV0YWlscykKKyogRG8gZm9sbG93
aW5nIGluc3RydWN0aW9uICoqT05MWSBJRiBORUVERUQqKi4gSW4gbW9zdCBjYXNlLCB5b3UgZG8g
bm90IGhhdmUgdG8uCisgICAgKiBJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgQnJvd3NlckRyaXZl
ciBmb3Igc3BlY2lmaWMgYnJvd3Nlci9wbGF0Zm9ybSwgeW91IG5lZWQgdG8gZXh0ZW5kIGJyb3dz
ZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyLnB5IGFuZCByZWdpc3RlciB5b3VyIG1vZHVsZSBpbiBi
cm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlcnNqc29uLgorICAgICogSWYgeW91IHdhbnQgdG8g
Y3VzdG9taXplIEhUVFBTZXJ2ZXJEcml2ZXIsIHlvdSBuZWVkIHRvIGV4dGVuZCBodHRwX3NlcnZl
cl9kcmlydmVyL2h0dHBfc2VydmVyX2RyaXZlciBhbmQgcmVnaXN0ZXIgeW91ciBtb2R1bGUgaW4g
aHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyX2RyaXZlcnMuanNvbi4KKyAgICAqIElmIHlv
dSB3YW50IHRvIGN1c3RvbWl6ZSBSZXN1bHRXcmFwcGVyLCB5b3UgbmVlZCB0byBleHRlbmQgcmVz
dWx0X3dyYXBwZXIvYmFzZV9yZXN1bHRfd3JhcHBlci5weSBhbmQgcmVnaXN0ZXIgeW91ciBtb2R1
bGUgaW4gcmVzdWx0X3dyYXBwZXIvcmVzdWx0X3dyYXBwZXJzLmpzb24gCisgICAgKiBJZiB5b3Ug
d2FudCB0byBjdXN0b21pemUgQmVuY2htYXJrQnVpbGRlciwgeW91IG5lZWQgdG8gZXh0ZW5kIGJl
bmNobWFya19idWlsZGVyL2dlbmVyaWNfYmVuY2htYXJrX2J1aWxkZXIgcmVnaXN0ZXIgeW91IG1v
ZHVsZSBpbiBiZW5jaG1hcmtfYnVpbGRlci9iZW5jaG1hcmtfYnVpbGRlcnMuanNvbgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL19faW5pdF9fLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL19faW5pdF9fLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtf
YnVpbGRlci9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9iZW5jaG1hcmtfYnVpbGRlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIy
ZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvYmVuY2htYXJrX2J1
aWxkZXJfZmFjdG9yeS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9iZW5jaG1hcmtfYnVpbGRlci9iZW5jaG1hcmtfYnVpbGRlcl9mYWN0b3J5LnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBhZDA0MTA5OTMzM2VmOWRlMjRjMDZmNWE5ODRiZDVhZTJlNGVlMWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJr
X2J1aWxkZXIvYmVuY2htYXJrX2J1aWxkZXJfZmFjdG9yeS5weQpAQCAtMCwwICsxLDIxIEBACisj
IS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBqc29uCitpbXBv
cnQgb3MKKworZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLmdlbmVyaWNfZmFjdG9yeSBp
bXBvcnQgR2VuZXJpY0ZhY3RvcnkKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignUGVy
ZkF1dG9ydW4nKQoraGFuZGxlRmlsZU5hbWUgPSAnYmVuY2htYXJrX2J1aWxkZXJzLmpzb24nCit0
cnk6CisgICAgYnVpbGRlcnMgPSBqc29uLmxvYWQob3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5k
aXJuYW1lKF9fZmlsZV9fKSwgaGFuZGxlRmlsZU5hbWUpLCAncicpKQorZXhjZXB0OgorICAgIGxv
Z2dlci53YXJuKCdMb2FkaW5nICVzIGZhaWxlZCwgc3RhcnQgdXNpbmcgcHJlLWRlZmluZWQgYnVp
bGRlcnMnICUgKGhhbmRsZUZpbGVOYW1lKSkKKyAgICBidWlsZGVycyA9IHsKKyAgICAgICAgJ0dl
bmVyaWNCZW5jaG1hcmtIYW5kbGUnOiB7J2ZpbGVQYXRoJzogJ2JlbmNobWFya19idWlsZGVyLmdl
bmVyaWNfYmVuY2htYXJrX2J1aWxkZXInLCAnbW9kdWxlTmFtZSc6ICdHZW5lcmljQmVuY2htYXJr
RHJpdmVyJ30sCisgICAgICAgICdKZXRTdHJlYW1CZW5jaG1hcmtIYW5kbGUnOiB7J2ZpbGVQYXRo
JzogJ2JlbmNobWFya19idWlsZGVyLmpldHN0cmVhbV9iZW5jaG1hcmtfYnVpbGRlcicsICdtb2R1
bGVOYW1lJzogJ0pldFN0cmVhbUJlbmNobWFya0RyaXZlcid9LAorICAgIH0KKworYmVuY2htYXJr
QnVpbGRlckZhY3RvcnkgPSBHZW5lcmljRmFjdG9yeShidWlsZGVycykKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9i
ZW5jaG1hcmtfYnVpbGRlcnMuanNvbiBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9iZW5jaG1hcmtfYnVpbGRlcnMuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iOGZjOTMyZTZlOWRlNWExMTRhZGY4YzBlMGE1NjBkYzM1ZTQxMDU2Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFy
a19idWlsZGVyL2JlbmNobWFya19idWlsZGVycy5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAg
ICAiR2VuZXJpY0JlbmNobWFya0J1aWxkZXIiOiB7CisgICAgICAgICJmaWxlUGF0aCI6ICJiZW5j
aG1hcmtfYnVpbGRlci5nZW5lcmljX2JlbmNobWFya19idWlsZGVyIiwKKyAgICAgICAgIm1vZHVs
ZU5hbWUiOiAiR2VuZXJpY0JlbmNobWFya0J1aWxkZXIiCisgICAgfSwKKyAgICAiSmV0U3RyZWFt
QmVuY2htYXJrQnVpbGRlciI6IHsKKyAgICAgICAgImZpbGVQYXRoIjogImJlbmNobWFya19idWls
ZGVyLmpldHN0cmVhbV9iZW5jaG1hcmtfYnVpbGRlciIsCisgICAgICAgICJtb2R1bGVOYW1lIjog
IkpldFN0cmVhbUJlbmNobWFya0J1aWxkZXIiCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2dlbmVy
aWNfYmVuY2htYXJrX2J1aWxkZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFy
a19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvZ2VuZXJpY19iZW5jaG1hcmtfYnVpbGRlci5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lMzIzMjEwM2U5MjVkMTkzNDUxMTU5YzkwMDg2YjliNzRmZTM0NzZmCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jl
bmNobWFya19idWlsZGVyL2dlbmVyaWNfYmVuY2htYXJrX2J1aWxkZXIucHkKQEAgLTAsMCArMSw0
MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGVt
cGZpbGUKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJv
bSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLnV0aWxzIGltcG9ydCBnZXRQYXRoRnJvbVByb2pl
Y3RSb290CisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1BlcmZBdXRvUnVuJykKKwor
CitjbGFzcyBHZW5lcmljQmVuY2htYXJrQnVpbGRlcihvYmplY3QpOgorICAgIGRlZiBwcmVwYXJl
KHNlbGYsIGJlbmNobWFya1BhdGgsIHBhdGNoKToKKyAgICAgICAgc2VsZi5fY29weUJlbmNobWFy
a1RvVGVtcERpcihiZW5jaG1hcmtQYXRoKQorICAgICAgICByZXR1cm4gc2VsZi5fYXBwbHlQYXRj
aChwYXRjaCkKKworICAgIGRlZiBfY29weUJlbmNobWFya1RvVGVtcERpcihzZWxmLCBiZW5jaG1h
cmtQYXRoKToKKyAgICAgICAgc2VsZi53ZWJSb290ID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAg
ICAgIGxvZ2dlci5kZWJ1ZygnU2VydmVyaW5nIGF0IHdlYlJvb3Q6ICVzJyAlIHNlbGYud2ViUm9v
dCkKKyAgICAgICAgc2VsZi5kZXN0ID0gb3MucGF0aC5qb2luKHNlbGYud2ViUm9vdCwgb3MucGF0
aC5zcGxpdChiZW5jaG1hcmtQYXRoKVsxXSkKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKGdldFBh
dGhGcm9tUHJvamVjdFJvb3QoYmVuY2htYXJrUGF0aCksIHNlbGYuZGVzdCkKKworICAgIGRlZiBf
YXBwbHlQYXRjaChzZWxmLCBwYXRjaCk6CisgICAgICAgIGlmIHBhdGNoOgorICAgICAgICAgICAg
b2xkV29ya2luZ0RpcmVjdG9yeSA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBvcy5jaGRpcihz
ZWxmLndlYlJvb3QpCisgICAgICAgICAgICBlcnJvckNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoWydw
YXRjaCcsICctcDEnLCAnLWYnLCAnLWknLCBnZXRQYXRoRnJvbVByb2plY3RSb290KHBhdGNoKV0p
CisgICAgICAgICAgICBvcy5jaGRpcihvbGRXb3JraW5nRGlyZWN0b3J5KQorICAgICAgICAgICAg
aWYgZXJyb3JDb2RlICE9IDA6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdDYW5ub3Qg
YXBwbHkgcGF0Y2gsIHdpbGwgc2tpcCBjdXJyZW50IGJlbmNobWFya1BhdGgnKQorICAgICAgICAg
ICAgICAgIHNlbGYuY2xlYW4oKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAg
IHJldHVybiBzZWxmLndlYlJvb3QKKworICAgIGRlZiBjbGVhbihzZWxmKToKKyAgICAgICAgbG9n
Z2VyLmluZm8oJ0NsZWFubmluZyBCZW5jaG1hcmsnKQorICAgICAgICBpZiBzZWxmLndlYlJvb3Q6
CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYud2ViUm9vdCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9q
ZXRzdHJlYW1fYmVuY2htYXJrX2J1aWxkZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvamV0c3RyZWFtX2JlbmNobWFya19idWls
ZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY5ZjE3NTc3ODBlZDk3ODQ5YmEzYWNiNmZiNjdiMDMzN2YzZmY0
OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19y
dW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvamV0c3RyZWFtX2JlbmNobWFya19idWlsZGVyLnB5CkBA
IC0wLDAgKzEsMjYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIGdlbmVyaWNfYmVuY2htYXJrX2J1
aWxkZXIgaW1wb3J0IEdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyCisKKworbG9nZ2VyID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ1BlcmZBdXRvUnVuJykKKworCitjbGFzcyBKZXRTdHJlYW1CZW5jaG1hcmtC
dWlsZGVyKEdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyKToKKyAgICBkZWYgcHJlcGFyZShzZWxmLCBi
ZW5jaG1hcmtQYXRoLCBwYXRjaCk6CisgICAgICAgIHN1cGVyKHNlbGYuX19jbGFzc19fLCBzZWxm
KS5fY29weUJlbmNobWFya1RvVGVtcERpcihiZW5jaG1hcmtQYXRoKQorICAgICAgICBzZWxmLl9y
dW5DcmVhdGVTY3JpcHQoKQorICAgICAgICByZXR1cm4gc3VwZXIoc2VsZi5fX2NsYXNzX18sIHNl
bGYpLl9hcHBseVBhdGNoKHBhdGNoKQorCisgICAgZGVmIF9ydW5DcmVhdGVTY3JpcHQoc2VsZik6
CisgICAgICAgIG9sZFdvcmtpbmdEaXJlY3RvcnkgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5j
aGRpcihzZWxmLmRlc3QpCisgICAgICAgIGxvZ2dlci5kZWJ1ZyhzZWxmLmRlc3QpCisgICAgICAg
IGVycm9yQ29kZSA9IHN1YnByb2Nlc3MuY2FsbChbJ3J1YnknLCAnY3JlYXRlLnJiJ10pCisgICAg
ICAgIG9zLmNoZGlyKG9sZFdvcmtpbmdEaXJlY3RvcnkpCisgICAgICAgIGlmIGVycm9yQ29kZSAh
PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdDYW5ub3QgY3JlYXRlIEpldFN0cmVhbSBC
ZW5jaG1hcmsnKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtf
cnVubmVyL2JlbmNobWFya19ydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNo
bWFya19ydW5uZXIvYmVuY2htYXJrX3J1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZWY0YjI3OGNiYmMy
NGQ5OTMwMzY0YzMzYWRmZTMzYjEyYTIyYzZlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19ydW5uZXIucHkKQEAgLTAs
MCArMSw4OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBqc29uCitpbXBvcnQg
bG9nZ2luZworaW1wb3J0IHNodXRpbAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MK
K2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCBvcworCitmcm9tIGJlbmNobWFy
a19idWlsZGVyLmJlbmNobWFya19idWlsZGVyX2ZhY3RvcnkgaW1wb3J0IGJlbmNobWFya0J1aWxk
ZXJGYWN0b3J5Citmcm9tIGh0dHBfc2VydmVyX2RyaXZlci5odHRwX3NlcnZlcl9kcml2ZXJfZmFj
dG9yeSBpbXBvcnQgSFRUUFNlcnZlckRyaXZlckZhY3RvcnkKK2Zyb20gcmVzdWx0X3dyYXBwZXIu
cmVzdWx0X3dyYXBwZXJfZmFjdG9yeSBpbXBvcnQgcmVzdWx0V3JhcHBlckZhY3RvcnkKK2Zyb20g
YnJvd3Nlcl9kcml2ZXIuYnJvd3Nlcl9kcml2ZXJfZmFjdG9yeSBpbXBvcnQgYnJvd3NlckRyaXZl
ckZhY3RvcnkKK2Zyb20gdXRpbHMgaW1wb3J0IGxvYWRNb2R1bGUsIGdldFBhdGhGcm9tUHJvamVj
dFJvb3QKK2Zyb20gdXRpbHMgaW1wb3J0IHRpbWVvdXQKKworCitsb2dnZXIgPSBsb2dnaW5nLmdl
dExvZ2dlcignUGVyZkF1dG9SdW4nKQorCisKK2NsYXNzIEJlbmNobWFya1J1bm5lcihvYmplY3Qp
OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYW5GaWxlLCBidWlsZERpciwgb3V0cHV0Rmls
ZSwgcGxhdGZvcm0sIGJyb3dzZXIpOgorICAgICAgICBsb2dnZXIuaW5mbygnSW5pdGlhbGl6aW5n
IGJlbmNobWFyayBydW5uaW5nJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVu
KHBsYW5GaWxlLCAncicpIGFzIGZwOgorICAgICAgICAgICAgICAgIHNlbGYucGxhbiA9IGpzb24u
bG9hZChmcCkKKyAgICAgICAgICAgICAgICBzZWxmLnBsYXRmb3JtRHJpdmVyID0gYnJvd3NlckRy
aXZlckZhY3RvcnkuY3JlYXRlKFtwbGF0Zm9ybSwgYnJvd3Nlcl0pCisgICAgICAgICAgICAgICAg
c2VsZi5odHRwU2VydmVyRHJpdmVyID0gSFRUUFNlcnZlckRyaXZlckZhY3RvcnkuY3JlYXRlKFtz
ZWxmLnBsYW5bJ2h0dHBfc2VydmVyX2RyaXZlciddXSkKKyAgICAgICAgICAgICAgICBzZWxmLmJl
bmNobWFya3MgPSBzZWxmLnBsYW5bJ2JlbmNobWFya3MnXQorICAgICAgICAgICAgICAgIHNlbGYu
YnVpbGREaXIgPSBvcy5wYXRoLmFic3BhdGgoYnVpbGREaXIpCisgICAgICAgICAgICAgICAgc2Vs
Zi5vdXRwdXRGaWxlID0gb3V0cHV0RmlsZSBpZiBvdXRwdXRGaWxlIGVsc2UgJ2JlbmNobWFyay5y
ZXN1bHQnCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9y
KCdDYW4gbm90IG9wZW4gcGxhbiBmaWxlOiAlcycgJSBwbGFuRmlsZSkKKyAgICAgICAgZXhjZXB0
IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1BsYW4gZmlsZTolcyBtYXkg
bm90IGZvbGxvdyBqc29uIGZvcm1hdCcgJSBwbGFuRmlsZSkKKyAgICAgICAgZXhjZXB0OgorICAg
ICAgICAgICAgcmFpc2UKKworICAgIGRlZiBleGVjdXRlKHNlbGYpOgorICAgICAgICBsb2dnZXIu
aW5mbygnU3RhcnQgdG8gZXhlY3V0ZSB0aGUgcGxhbicpCisgICAgICAgIGZvciBiZW5jaG1hcmsg
aW4gc2VsZi5iZW5jaG1hcmtzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1N0YXJ0IGEgbmV3
IGJlbmNobWFyaycpCisgICAgICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgICAgIHJlc3Vs
dFdyYXBwZXIgPSByZXN1bHRXcmFwcGVyRmFjdG9yeS5jcmVhdGUoW2JlbmNobWFya1sncmVzdWx0
X3dyYXBwZXInXV0pCisgICAgICAgICAgICBiZW5jaG1hcmtCdWlsZGVyID0gYmVuY2htYXJrQnVp
bGRlckZhY3RvcnkuY3JlYXRlKFtiZW5jaG1hcmtbJ2JlbmNobWFya19idWlsZGVyJ11dKQorICAg
ICAgICAgICAgd2ViUm9vdCA9IGJlbmNobWFya0J1aWxkZXIucHJlcGFyZShiZW5jaG1hcmtbJ29y
aWdpbmFsX2JlbmNobWFyayddLCBiZW5jaG1hcmtbJ2JlbmNobWFya19wYXRjaCddIGlmICdiZW5j
aG1hcmtfcGF0Y2gnIGluIGJlbmNobWFyayBlbHNlIE5vbmUpCisgICAgICAgICAgICBmb3IgeCBp
biB4cmFuZ2UoaW50KGJlbmNobWFya1snY291bnQnXSkpOgorICAgICAgICAgICAgICAgIGxvZ2dl
ci5pbmZvKCdTdGFydCB0aGUgaXRlcmF0aW9uICVkIG9mIGN1cnJlbnQgYmVuY2htYXJrJyAlICh4
ICsgMSkpCisgICAgICAgICAgICAgICAgc2VsZi5odHRwU2VydmVyRHJpdmVyLnNlcnZlKHdlYlJv
b3QpCisgICAgICAgICAgICAgICAgc2VsZi5wbGF0Zm9ybURyaXZlci5wcmVwYXJlRW52KCkKKyAg
ICAgICAgICAgICAgICAjIFdhaXQgZm9yIGh0dHAgc2VydmVyIHRvIGxhdW5jaCBhbmQgcGxhdGZv
cm0gaGFuZGxlciB0byBjbGVhbgorICAgICAgICAgICAgICAgICMgdGhlIGVudmlyb25tZW50Lgor
ICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMikKKyAgICAgICAgICAgICAgICBzZWxmLnBsYXRm
b3JtRHJpdmVyLmxhdW5jaFVybChzZWxmLmNvbXBvc2VVcmwoc2VsZi5odHRwU2VydmVyRHJpdmVy
LmJhc2VVcmwoKSwgYmVuY2htYXJrWydlbnRyeV9wb2ludCddKSwgc2VsZi5idWlsZERpcikKKyAg
ICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggdGltZW91dChiZW5j
aG1hcmtbJ3RpbWVvdXQnXSk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc29u
LmxvYWRzKHNlbGYuaHR0cFNlcnZlckRyaXZlci5mZXRjaFJlc3VsdCgpKQorICAgICAgICAgICAg
ICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wbGF0Zm9ybURyaXZlci5jbG9z
ZUJyb3dzZXJzKCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAg
ICBpZiBsZW4ocmVzdWx0KSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBsYXRmb3Jt
RHJpdmVyLmNsb3NlQnJvd3NlcnMoKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Io
J05vIHJlc3VsdC4gU29tZXRoaW5nIHdlbnQgd3JvbmcnKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCkKKyAgICAgICAg
ICAgICAgICBzZWxmLnBsYXRmb3JtRHJpdmVyLmNsb3NlQnJvd3NlcnMoKQorICAgICAgICAgICAg
ICAgIGxvZ2dlci5pbmZvKCdFbmQgb2YgJWQgaXRlcmF0aW9uIG9mIGN1cnJlbnQgYmVuY2htYXJr
JyAlICh4ICsgMSkpCisgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0V3JhcHBlci53cmFwKHJl
c3VsdHMpCisgICAgICAgICAgICBzZWxmLmR1bXAocmVzdWx0cywgYmVuY2htYXJrWydvdXRwdXRf
ZmlsZSddIGlmIGJlbmNobWFya1snb3V0cHV0X2ZpbGUnXSBlbHNlIHNlbGYub3V0cHV0RmlsZSkK
KyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgIGJlbmNobWFya0J1aWxkZXIu
Y2xlYW4oKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNvbXBvc2VVcmwoY2xzLCBiYXNl
VXJsLCByZWxhdGl2ZVBhdGgpOgorICAgICAgICByZXR1cm4gJy8nLmpvaW4oW2Jhc2VVcmwsIHJl
bGF0aXZlUGF0aF0pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZHVtcChjbHMsIHJlc3Vs
dHMsIG91dHB1dEZpbGUpOgorICAgICAgICBsb2dnZXIuaW5mbygnRHVtcHBpbmcgdGhlIHJlc3Vs
dHMgdG8gZmlsZScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihvdXRwdXRG
aWxlLCAndycpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKGpzb24uZHVtcHMocmVz
dWx0cykpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8o
J0Nhbm5vdCBvcGVuIG91dHB1dCBmaWxlOiAlcycgJSBvdXRwdXRGaWxlKQorICAgICAgICAgICAg
bG9nZ2VyLmluZm8oJ1Jlc3VsdHMgYXJlOlxuICVzJywganNvbi5kdW1wcyhyZXN1bHRzKSkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2Vy
X2RyaXZlci9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9icm93c2VyX2RyaXZlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZDFk
NjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIv
YnJvd3Nlcl9kcml2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJlZjE1MDZmYWY2NGFhMDFmNGU0MTEzMTgz
MjA0MTgyZjU4N2UzZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
YmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlci5weQpAQCAtMCww
ICsxLDE4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGFiYworCisKK2NsYXNz
IEJyb3dzZXJEcml2ZXIob2JqZWN0KToKKworICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICBk
ZWYgcHJlcGFyZUVudihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGFiYy5hYnN0cmFjdG1l
dGhvZAorICAgIGRlZiBsYXVuY2hVcmwoc2VsZiwgdXJsLCBicm93c2VyQnVpbGRQYXRoPU5vbmUp
OgorICAgICAgICBwYXNzCisKKyAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgZGVmIGNsb3Nl
QnJvd3NlcihzZWxmKToKKyAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyX2Zh
Y3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nl
cl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXJfZmFjdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTM2MTVjZTA1
ZTViZTY2ZmI5ODhmZWFiYjZmMWExMDU5M2VkNmU1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJf
ZHJpdmVyX2ZhY3RvcnkucHkKQEAgLTAsMCArMSwyMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQganNvbgoraW1wb3J0IG9zCisKK2Zyb20gd2Via2l0
cHkuYmVuY2htYXJrX3J1bm5lci5nZW5lcmljX2ZhY3RvcnkgaW1wb3J0IEdlbmVyaWNGYWN0b3J5
CisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1BlcmZBdXRvUnVuJykKK2RyaXZlckZp
bGVOYW1lID0gJ2Jyb3dzZXJfZHJpdmVycy5qc29uJwordHJ5OgorICAgIGRyaXZlcnMgPSBqc29u
LmxvYWQob3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgZHJpdmVy
RmlsZU5hbWUpLCAncicpKQorZXhjZXB0OgorICAgIGxvZ2dlci53YXJuKCdMb2FkaW5nICVzIGZh
aWxlZCwgc3RhcnQgdXNpbmcgcHJlLWRlZmluZWQgZHJpdmVycycgJSAoZHJpdmVyRmlsZU5hbWUp
KQorICAgIGRyaXZlcnMgPSB7CisgICAgICAgICdvc3gnOiB7CisgICAgICAgICAgICAnc2FmYXJp
Jzogeydtb2R1bGVOYW1lJzogJ09TWFNhZmFyaURyaXZlcicsICdmaWxlUGF0aCc6ICdicm93c2Vy
X2RyaXZlci5vc3hfc2FmYXJpX2RyaXZlcid9LAorICAgICAgICAgICAgJ2Nocm9tZSc6IHsnbW9k
dWxlTmFtZSc6ICdPU1hDaHJvbWVEcml2ZXInLCAnZmlsZVBhdGgnOiAnYnJvd3Nlcl9kcml2ZXIu
b3N4X2Nocm9tZV9kcml2ZXInfSwKKyAgICAgICAgfSwKKyAgICB9CisKK2Jyb3dzZXJEcml2ZXJG
YWN0b3J5ID0gR2VuZXJpY0ZhY3RvcnkoZHJpdmVycykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZl
cnMuanNvbiBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2Vy
X2RyaXZlci9icm93c2VyX2RyaXZlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDg1Yjk4MTQ1NzNlMGZj
MzIzZDMxNmE0ZmJjMGQ0NWE4ODNlYmJhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVy
cy5qc29uCkBAIC0wLDAgKzEsMTIgQEAKK3sKKyAgIm9zeCI6IHsKKyAgICAiY2hyb21lIjogewor
ICAgICAgIm1vZHVsZU5hbWUiOiAiT1NYQ2hyb21lRHJpdmVyIiwgCisgICAgICAiZmlsZVBhdGgi
OiAiYnJvd3Nlcl9kcml2ZXIub3N4X2Nocm9tZV9kcml2ZXIiCisgICAgfSwgCisgICAgInNhZmFy
aSI6IHsKKyAgICAgICJtb2R1bGVOYW1lIjogIk9TWFNhZmFyaURyaXZlciIsIAorICAgICAgImZp
bGVQYXRoIjogImJyb3dzZXJfZHJpdmVyLm9zeF9zYWZhcmlfZHJpdmVyIgorICAgIH0KKyAgfQor
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jy
b3dzZXJfZHJpdmVyL29zeF9jaHJvbWVfZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9jaHJvbWVfZHJpdmVyLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIzMjQzZDQwNDU4NTI1MmM5ZTZhMWM4ZmFjNTc4ZDBhY2EzYTIxOTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJv
d3Nlcl9kcml2ZXIvb3N4X2Nocm9tZV9kcml2ZXIucHkKQEAgLTAsMCArMSwzMiBAQAorIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJw
cm9jZXNzCitpbXBvcnQgdGltZQorCisjIFdlIGFzc3VtZSB0aGF0IHRoaXMgaGFuZGxlIGNhbiBv
bmx5IGJlIHVzZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXMgT1NYCitmcm9tIEFwcEtpdCBpbXBvcnQg
TlNSdW5uaW5nQXBwbGljYXRpb24KK2Zyb20gYnJvd3Nlcl9kcml2ZXIgaW1wb3J0IEJyb3dzZXJE
cml2ZXIKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignUGVyZkF1dG9SdW4nKQorCisK
K2NsYXNzIE9TWENocm9tZURyaXZlcihCcm93c2VyRHJpdmVyKToKKyAgICBkZWYgcHJlcGFyZUVu
dihzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZUJyb3dzZXJzKCkKKyAgICAgICAgc2VsZi5jaHJv
bWVQcmVmZXJlbmNlcyA9IFtdCisKKyAgICBkZWYgbGF1bmNoVXJsKHNlbGYsIHVybCwgYnJvd3Nl
ckJ1aWxkUGF0aD1Ob25lKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0xhdW5jaGluZyBjaHJvbWU6
ICVzIHdpdGggdXJsOiAlcycgJSAob3MucGF0aC5qb2luKGJyb3dzZXJCdWlsZFBhdGgsICdHb29n
bGUgQ2hyb21lLmFwcCcpLCB1cmwpKQorICAgICAgICAjIG1heSBuZWVkIHRvIGJlIG1vZGlmaWVk
IGZvciBkZXZlbG9wIGJ1aWxkLCBzdWNoIGFzIHNldHRpbmcgdXAKKyAgICAgICAgIyBsaWJyYXJp
ZXMKKyAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbJ29wZW4nLCAnLWEnLCBvcy5wYXRoLmpvaW4o
YnJvd3NlckJ1aWxkUGF0aCwgJy9Hb29nbGUgQ2hyb21lLmFwcCcpLCAnLS1hcmdzJywgJy0taG9t
ZXBhZ2UnLCB1cmxdICsgc2VsZi5jaHJvbWVQcmVmZXJlbmNlcykuY29tbXVuaWNhdGUoKQorCisg
ICAgZGVmIGNsb3NlQnJvd3NlcnMoc2VsZik6CisgICAgICAgIGxvZ2dlci5pbmZvKCdDbG9zaW5n
IGFsbCBleGlzdGluZyBjaHJvbWUgcHJvY2Vzc2VzJykKKyAgICAgICAgY2hyb21lcyA9IE5TUnVu
bmluZ0FwcGxpY2F0aW9uLnJ1bm5pbmdBcHBsaWNhdGlvbnNXaXRoQnVuZGxlSWRlbnRpZmllcl8o
J2NvbS5nb29nbGUuQ2hyb21lJykKKyAgICAgICAgZm9yIGNocm9tZSBpbiBjaHJvbWVzOgorICAg
ICAgICAgICAgY2hyb21lLnRlcm1pbmF0ZSgpCisgICAgICAgIHRpbWUuc2xlZXAoMikKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2Ry
aXZlci9vc3hfc2FmYXJpX2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2ht
YXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9vc3hfc2FmYXJpX2RyaXZlci5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mYjFhYTBlODVhYzY5ZDA0OGM1N2RkMGUyZmQ3Y2UzNWUxYTgyNzljCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJp
dmVyL29zeF9zYWZhcmlfZHJpdmVyLnB5CkBAIC0wLDAgKzEsMzYgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2Vzcwor
aW1wb3J0IHRpbWUKKworIyBXZSBhc3N1bWUgdGhhdCB0aGlzIGhhbmRsZSBjYW4gb25seSBiZSB1
c2VkIHdoZW4gdGhlIHBsYXRmb3JtIGlzIE9TWC4KK2Zyb20gQXBwS2l0IGltcG9ydCBOU1J1bm5p
bmdBcHBsaWNhdGlvbgorZnJvbSBicm93c2VyX2RyaXZlciBpbXBvcnQgQnJvd3NlckRyaXZlcgor
CisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1bicpCisKKworY2xhc3Mg
T1NYU2FmYXJpRHJpdmVyKEJyb3dzZXJEcml2ZXIpOgorCisgICAgZGVmIHByZXBhcmVFbnYoc2Vs
Zik6CisgICAgICAgIHNlbGYuY2xvc2VCcm93c2VycygpCisgICAgICAgIHNlbGYuc2FmYXJpUHJl
ZmVyZW5jZXMgPSBbIi1Ib21lUGFnZSIsICJhYm91dDpibGFuayIsICItV2FybkFib3V0RnJhdWR1
bGVudFdlYnNpdGVzIiwgIjAiLCAiLUV4dGVuc2lvbnNFbmFibGVkIiwgIjAiLCAiLVNob3dTdGF0
dXNCYXIiLCAiMCIsICItTmV3V2luZG93QmVoYXZpb3IiLCAiMSIsICItTmV3VGFiQmVoYXZpb3Ii
LCAiMSJdCisKKyAgICBkZWYgbGF1bmNoVXJsKHNlbGYsIHVybCwgYnJvd3NlckJ1aWxkUGF0aD1O
b25lKToKKyAgICAgICAgYXJncyA9IFtvcy5wYXRoLmpvaW4oYnJvd3NlckJ1aWxkUGF0aCwgJ1Nh
ZmFyaS5hcHAvQ29udGVudHMvTWFjT1MvU2FmYXJpJyldCisgICAgICAgIGFyZ3MuZXh0ZW5kKHNl
bGYuc2FmYXJpUHJlZmVyZW5jZXMpCisgICAgICAgIGxvZ2dlci5pbmZvKCdMYXVuY2hpbmcgc2Fm
YXJpOiAlcyB3aXRoIHVybDogJXMnICUgKGFyZ3NbMF0sIHVybCkpCisgICAgICAgIHN1YnByb2Nl
c3MuUG9wZW4oYXJncywgZW52PXsnRFlMRF9GUkFNRVdPUktfUEFUSCc6IGJyb3dzZXJCdWlsZFBh
dGgsICdEWUxEX0xJQlJBUllfUEFUSCc6IGJyb3dzZXJCdWlsZFBhdGh9LCBzdGRpbj1zdWJwcm9j
ZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUp
CisgICAgICAgICMgU3RvcCBmb3IgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNhZmFyaSBwcm9jZXNz
LCBvdGhlcndpc2UsIG9wZW4KKyAgICAgICAgIyBjb21tYW5kIG1heSB1c2UgdGhlIHN5c3RlbSBz
YWZhcmkuCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc3VicHJvY2Vzcy5Qb3Blbihb
J29wZW4nLCB1cmxdKQorCisgICAgZGVmIGNsb3NlQnJvd3NlcnMoc2VsZik6CisgICAgICAgIGxv
Z2dlci5pbmZvKCdDbG9zaW5nIGFsbCBleGlzdGluZyBzYWZhcmkgcHJvY2Vzc2VzJykKKyAgICAg
ICAgc2FmYXJpSW5zdGFuY2VzID0gTlNSdW5uaW5nQXBwbGljYXRpb24ucnVubmluZ0FwcGxpY2F0
aW9uc1dpdGhCdW5kbGVJZGVudGlmaWVyXygnY29tLmFwcGxlLlNhZmFyaScpCisgICAgICAgIGZv
ciBzYWZhcmlJbnN0YW5jZSBpbiBzYWZhcmlJbnN0YW5jZXM6CisgICAgICAgICAgICBzYWZhcmlJ
bnN0YW5jZS50ZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9KZXRTdHJlYW0ucGF0Y2ggYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL0pldFN0cmVhbS5wYXRj
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43ZTBlNTc1MzNhZGRmOWQ2MmEwYjRmYjZjN2MyMWIwNGJlNjc0MDllCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVy
L2RhdGEvcGF0Y2hlcy9KZXRTdHJlYW0ucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorZGlmZiAtLWdp
dCBhL0pldFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvSmV0U3RyZWFtRHJpdmVyLmpzIGIvSmV0U3Ry
ZWFtL0pldFN0cmVhbS0xLjAuMS9KZXRTdHJlYW1Ecml2ZXIuanMKK2luZGV4IDczZWU0MjAuLjYw
ZjU4N2MgMTAwNjQ0CistLS0gYS9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL0pldFN0cmVhbURy
aXZlci5qcworKysrIGIvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9KZXRTdHJlYW1Ecml2ZXIu
anMKK0BAIC00NDgsNiArNDQ4LDE0IEBAIHZhciBKZXRTdHJlYW0gPSAoZnVuY3Rpb24oKSB7Cisg
CisgICAgICAgICByZXR1cm4gcmF3UmVzdWx0czsKKyAgICAgfQorKyAgICAKKysgICAgZnVuY3Rp
b24gY29tcHV0ZVJlZmluZWRSZXN1bHRzKCl7CisrICAgICAgICB2YXIgcmVzdWx0cyA9IHt9Owor
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiZW5jaG1hcmtzLmxlbmd0aDsgKytpKSB7Cisr
ICAgICAgICAgICAgcmVzdWx0c1tiZW5jaG1hcmtzW2ldLm5hbWVdID0geyJtZXRyaWNzIiA6IHsi
U2NvcmUiIDogeyJjdXJyZW50IiA6IFtiZW5jaG1hcmtzW2ldLnRpbWVzXX19fTsKKysgICAgICAg
IH0KKysgICAgICAgIHJldHVybiB7IkpldFN0cmVhbSI6IHsibWV0cmljcyIgOiB7IlNjb3JlIiA6
IFsiR2VvbWV0cmljIl19LCAidGVzdHMiIDogcmVzdWx0c319OworKyAgICB9CisgCisgICAgIGZ1
bmN0aW9uIGVuZCgpCisgICAgIHsKK0BAIC00NTgsNiArNDY2LDIzIEBAIHZhciBKZXRTdHJlYW0g
PSAoZnVuY3Rpb24oKSB7CisgICAgICAgICBpc1J1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgIGhh
c0FscmVhZHlSdW4gPSB0cnVlOworICAgICAgICAgcHJlcGFyZVRvU3RhcnQoKTsKKysgICAgICAg
IC8vIHN1Ym1pdCByZXN1bHQgdG8gc2VydmVyCisrICAgICAgICByZXN1bHRzID0gSlNPTi5zdHJp
bmdpZnkoY29tcHV0ZVJlZmluZWRSZXN1bHRzKCkpOworKyAgICAgICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworKyAgICAgICAgeGhyLm9wZW4oIlBPU1QiLCAiL3JlcG9ydCIpOwor
KyAgICAgICAKKysgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCAi
YXBwbGljYXRpb24vanNvbiIpOworKyAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRl
bnQtbGVuZ3RoIiwgcmVzdWx0cy5sZW5ndGgpOworKyAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFk
ZXIoIkNvbm5lY3Rpb24iLCAiY2xvc2UiKTsKKysgCisrICAgICAgICB4aHIub25yZWFkeXN0YXRl
Y2hhbmdlID0gZnVuY3Rpb24oKSB7CisrICAgICAgICBpZih4aHIucmVhZHlTdGF0ZSA9PSBYTUxI
dHRwUmVxdWVzdC5ET05FICYmIHhoci5zdGF0dXMgPT0gMjAwKSB7CisrICAgICAgICAgICAgICAg
IGNsb3NlUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworKyAgICAgICAgICAgICAgICBj
bG9zZVJlcXVlc3Qub3BlbigiR0VUIiwgIi9zaHV0ZG93biIpOworKyAgICAgICAgICAgICAgICBj
bG9zZVJlcXVlc3Quc2VuZCgpCisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAg
eGhyLnNlbmQocmVzdWx0cyk7CisgICAgIH0KKyAKKyAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpCitk
aWZmIC0tZ2l0IGEvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sIGIvSmV0U3Ry
ZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sCitpbmRleCBlMjc1MzVjLi4wMDEwODdkIDEw
MDY0NAorLS0tIGEvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sCisrKysgYi9K
ZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwKK0BAIC0zNCw4ICszNCwxMCBAQAor
ICAgICB3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKCkgeyBhbGxJc0dvb2QgPSBmYWxzZTsgfQor
IAorICAgICBmdW5jdGlvbiBpbml0aWFsaXplKCkgeworLSAgICAgICAgaWYgKGFsbElzR29vZCkK
KysgICAgICAgIGlmIChhbGxJc0dvb2QpIHsKKyAgICAgICAgICAgICBKZXRTdHJlYW0uaW5pdGlh
bGl6ZSgpOworKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRp
b24gPSAiamF2YXNjcmlwdDpKZXRTdHJlYW0uc3RhcnQoKSJ9LCAzMDAwKTsKKysgICAgICAgIH0K
KyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9k
eSIpLmlubmVySFRNTCA9ICI8aDE+RVJST1I8L2gxPjxwPkVuY291bnRlcmVkIGVycm9ycyBkdXJp
bmcgcGFnZSBsb2FkLiBSZWZ1c2luZyB0byBydW4gYSBwYXJ0aWFsIGJlbmNobWFyayBzdWl0ZS48
L3A+IjsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1h
cmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9TcGVlZG9tZXRlci5wYXRjaCBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvU3BlZWRvbWV0ZXIucGF0Y2gK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzNiMGYzMmUxZWIzMjQ0YmMwMDQ0ODQ1MmI0ZjU3ZDA4MjkzMDU5ZgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9k
YXRhL3BhdGNoZXMvU3BlZWRvbWV0ZXIucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK2RpZmYgLS1n
aXQgYS9TcGVlZG9tZXRlci9GdWxsLmh0bWwgYi9TcGVlZG9tZXRlci9GdWxsLmh0bWwKK2luZGV4
IDQxOWI5ZjIuLjBiMDRjNjkgMTAwNjQ0CistLS0gYS9TcGVlZG9tZXRlci9GdWxsLmh0bWwKKysr
KyBiL1NwZWVkb21ldGVyL0Z1bGwuaHRtbAorQEAgLTcsNyArNyw2IEBACisgICAgIDxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvbWFpbi5qcyIgZGVmZXI+PC9zY3JpcHQ+CisgICAgIDxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcyIgZGVmZXI+PC9zY3JpcHQ+CisgICAgIDxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvYmVuY2htYXJrLXJlcG9ydC5qcyIgZGVmZXI+PC9zY3JpcHQ+
CistICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvc3RhdGlzdGljcy5qcyIgZGVmZXI+PC9z
Y3JpcHQ+CisgICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdHMuanMiIGRlZmVyPjwvc2Ny
aXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KK2RpZmYgLS1naXQgYS9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvYmVuY2htYXJrLXJlcG9ydC5qcyBiL1NwZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmst
cmVwb3J0LmpzCitpbmRleCBjNGI0YzY0Li5jNDQ1M2NkIDEwMDY0NAorLS0tIGEvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL2JlbmNobWFyay1yZXBvcnQuanMKKysrKyBiL1NwZWVkb21ldGVyL3Jlc291
cmNlcy9iZW5jaG1hcmstcmVwb3J0LmpzCitAQCAtMSwxNiArMSw5IEBACisgLy8gVGhpcyBmaWxl
IGNhbiBiZSBjdXN0b21pemVkIHRvIHJlcG9ydCByZXN1bHRzIGFzIG5lZWRlZC4KKyAKKyAoZnVu
Y3Rpb24gKCkgeworLSAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyICYmIGxvY2F0aW9uLnNlYXJj
aCAhPSAnP3dlYmtpdCcgJiYgbG9jYXRpb24uaGFzaCAhPSAnI3dlYmtpdCcpCistICAgICAgICBy
ZXR1cm47CistCisgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworIAorLSAgICB2YXIgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworLSAgICBzY3JpcHRFbGVtZW50LnNyYyA9ICcuLi9y
ZXNvdXJjZXMvcnVubmVyLmpzJzsKKy0gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3Jp
cHRFbGVtZW50KTsKKy0KKyAgICAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3N0eWxlJyk7CisgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9ICdwcmUgeyBw
YWRkaW5nLXRvcDogNjAwcHg7IH0nOworICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0
eWxlRWxlbWVudCk7CitAQCAtMzYsMTAgKzI5LDggQEAKKyAgICAgICAgICAgICAgICAgICAgIG5h
bWU6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdG9yOiBhZ2dyZWdhdG9yfTsK
KyAgICAgICAgICAgICB9CistICAgICAgICAgICAgUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVh
c3VyZVZhbHVlc0FzeW5jKGNyZWF0ZVRlc3QobnVsbCwgJ1RvdGFsJykpOworICAgICAgICAgfSwK
KyAgICAgICAgIGRpZFJ1blN1aXRlczogZnVuY3Rpb24gKG1lYXN1cmVkVmFsdWVzKSB7CistICAg
ICAgICAgICAgUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMobWVhc3VyZWRWYWx1ZXMu
dG90YWwpOworICAgICAgICAgICAgIHZhbHVlc0J5SXRlcmF0aW9uLnB1c2gobWVhc3VyZWRWYWx1
ZXMudGVzdHMpOworICAgICAgICAgfSwKKyAgICAgICAgIGRpZEZpbmlzaExhc3RJdGVyYXRpb246
IGZ1bmN0aW9uICgpIHsKK0BAIC01MiwxOSArNDMsMzAgQEAKKyAgICAgICAgICAgICAgICAgdmFs
dWVzLnB1c2godmFsdWUpOworICAgICAgICAgICAgICAgICB2YWx1ZXMuYWdncmVnYXRvciA9IGFn
Z3JlZ2F0b3I7CisgICAgICAgICAgICAgfQorLQorKyAgICAgICAgICAgIHZhciBkaWN0ID0ge30K
KysgICAgICAgICAgICBmdW5jdGlvbiBhZGRUb0RpY3Rpb25hcnlWYWx1ZSh2YWx1ZSwgc3VpdGVO
YW1lLCB0ZXN0TmFtZSwgc3VidGVzdE5hbWUpIHsKKysgICAgICAgICAgICAgICAgZGljdFsiU3Bl
ZWRvbWV0ZXIiXSA9IGRpY3RbIlNwZWVkb21ldGVyIl0gfHwgeyAibWV0cmljcyIgOiB7ICJUaW1l
IiA6IFsgIlRvdGFsIiwgXSB9LCAidGVzdHMiIDoge319OworKyAgICAgICAgICAgICAgICBkaWN0
WyJTcGVlZG9tZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV0gPSBkaWN0WyJTcGVlZG9tZXRlciJd
WyJ0ZXN0cyJdW3N1aXRlTmFtZV0gfHwgeyJtZXRyaWNzIiA6IHsgIlRpbWUiIDogWyAiVG90YWwi
LCBdIH0sICJ0ZXN0cyIgOiB7fX07CisrICAgICAgICAgICAgICAgIGRpY3RbIlNwZWVkb21ldGVy
Il1bInRlc3RzIl1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV0gPSBkaWN0WyJTcGVlZG9t
ZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV1bInRlc3RzIl1bdGVzdE5hbWVdIHx8IHsgIm1ldHJp
Y3MiIDogeyAiVGltZSIgOiBbICJUb3RhbCIsIF0gfSwgInRlc3RzIiA6IHt9fTsKKysgICAgICAg
ICAgICAgICAgZGljdFsiU3BlZWRvbWV0ZXIiXVsidGVzdHMiXVtzdWl0ZU5hbWVdWyJ0ZXN0cyJd
W3Rlc3ROYW1lXVsidGVzdHMiXVtzdWJ0ZXN0TmFtZV0gPSBkaWN0WyJTcGVlZG9tZXRlciJdWyJ0
ZXN0cyJdW3N1aXRlTmFtZV1bInRlc3RzIl1bdGVzdE5hbWVdWyJ0ZXN0cyJdW3N1YnRlc3ROYW1l
XSB8fCB7ICJtZXRyaWNzIiA6IHsgIlRpbWUiIDogeyAiY3VycmVudCIgOiBbW11dIH0gfX07Cisr
ICAgICAgICAgICAgICAgIGRpY3RbIlNwZWVkb21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXVsi
dGVzdHMiXVt0ZXN0TmFtZV1bInRlc3RzIl1bc3VidGVzdE5hbWVdWyJtZXRyaWNzIl1bIlRpbWUi
XVsiY3VycmVudCJdWzBdLnB1c2godmFsdWUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICAKKyAgICAgICAgICAgICB2YWx1ZXNCeUl0ZXJhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChtZWFz
dXJlZFZhbHVlcykgeworICAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWl0ZU5hbWUgaW4gbWVh
c3VyZWRWYWx1ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgIHZhciBzdWl0ZSA9IG1lYXN1cmVk
VmFsdWVzW3N1aXRlTmFtZV07CisgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB0ZXN0TmFt
ZSBpbiBzdWl0ZS50ZXN0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0ID0g
c3VpdGUudGVzdHNbdGVzdE5hbWVdOworLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFy
IHN1YnRlc3ROYW1lIGluIHRlc3QudGVzdHMpCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgc3VidGVzdE5hbWUgaW4gdGVzdC50ZXN0cykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRUb01lYXN1cmVkVmFsdWUodGVzdC50ZXN0c1tzdWJ0ZXN0TmFtZV0sIHN1aXRl
TmFtZSArICcvJyArIHRlc3ROYW1lICsgJy8nICsgc3VidGVzdE5hbWUpOworKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRUb0RpY3Rpb25hcnlWYWx1ZSh0ZXN0LnRlc3RzW3N1YnRlc3RO
YW1lXSwgc3VpdGVOYW1lLCB0ZXN0TmFtZSwgc3VidGVzdE5hbWUpOworKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb01lYXN1cmVkVmFsdWUo
dGVzdC50b3RhbCwgc3VpdGVOYW1lICsgJy8nICsgdGVzdE5hbWUsICdUb3RhbCcpOworICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgYWRkVG9NZWFzdXJlZFZhbHVl
KHN1aXRlLnRvdGFsLCBzdWl0ZU5hbWUsICdUb3RhbCcpOworICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgfSk7CisrICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBKU09OLnN0cmluZ2lm
eShkaWN0KTsKKyAKKyAgICAgICAgICAgICB2YXIgZnVsbE5hbWVzID0gbmV3IEFycmF5OworICAg
ICAgICAgICAgIGZvciAodmFyIGZ1bGxOYW1lIGluIG1lYXN1cmVkVmFsdWVzQnlGdWxsTmFtZSkK
K0BAIC03Miw4ICs3NCwyMiBAQAorIAorICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
ZnVsbE5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBt
ZWFzdXJlZFZhbHVlc0J5RnVsbE5hbWVbZnVsbE5hbWVzW2ldXTsKKy0gICAgICAgICAgICAgICAg
UGVyZlRlc3RSdW5uZXIucmVwb3J0VmFsdWVzKGNyZWF0ZVRlc3QoZnVsbE5hbWVzW2ldLCB2YWx1
ZXMuYWdncmVnYXRvciwgaSArIDEgPT0gZnVsbE5hbWVzLmxlbmd0aCksIHZhbHVlcyk7CisgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
KysgICAgICAgICAgICB4aHIub3BlbigiUE9TVCIsICIvcmVwb3J0Iik7CisrIAorKyAgICAgICAg
ICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCAiYXBwbGljYXRpb24vanNv
biIpOworKyAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LWxlbmd0aCIs
IHJlc3VsdHMubGVuZ3RoKTsKKysgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29u
bmVjdGlvbiIsICJjbG9zZSIpOworKyAKKysgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hh
bmdlID0gZnVuY3Rpb24oKSB7CisrICAgICAgICAgICAgICAgIGlmKHhoci5yZWFkeVN0YXRlID09
IFhNTEh0dHBSZXF1ZXN0LkRPTkUgJiYgeGhyLnN0YXR1cyA9PSAyMDApIHsKKysgICAgICAgICAg
ICAgICAgICAgIHZhciBjbG9zZVJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKysgICAg
ICAgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5vcGVuKCJHRVQiLCAiL3NodXRkb3duIik7Cisr
ICAgICAgICAgICAgICAgICAgICBjbG9zZVJlcXVlc3Quc2VuZCgpCisrICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgeGhyLnNlbmQocmVzdWx0cyk7CisgICAg
ICAgICB9CisgICAgIH07CisgfSkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL2pldHN0cmVhbS5wbGFuIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvamV0c3RyZWFtLnBsYW4K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGRlMTNmNmI0ZWU0MDdkYjEyMWU3ZmU4NTBiYzk0MGNiODM5MjJmNwotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9k
YXRhL3BsYW5zL2pldHN0cmVhbS5wbGFuCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAiaHR0cF9z
ZXJ2ZXJfZHJpdmVyIjogIlNpbXBsZUhUVFBTZXJ2ZXJEcml2ZXIiLCAKKyAgICAiYmVuY2htYXJr
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInRpbWVvdXQiIDogNjAwLAorICAgICAgICAg
ICAgImNvdW50IjogNSwKKyAgICAgICAgICAgICJiZW5jaG1hcmtfYnVpbGRlciI6ICJKZXRTdHJl
YW1CZW5jaG1hcmtCdWlsZGVyIiwKKyAgICAgICAgICAgICJvcmlnaW5hbF9iZW5jaG1hcmsiOiAi
Li4vLi4vLi4vLi4vUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0iLAorICAgICAgICAgICAgImJl
bmNobWFya19wYXRjaCI6ICJkYXRhL3BhdGNoZXMvSmV0U3RyZWFtLnBhdGNoIiwKKyAgICAgICAg
ICAgICJlbnRyeV9wb2ludCI6ICJKZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwi
LAorICAgICAgICAgICAgInJlc3VsdF93cmFwcGVyIjogIk1lcmdlUmVzdWx0V3JhcHBlciIsCisg
ICAgICAgICAgICAib3V0cHV0X2ZpbGUiOiAiamV0c3RyZWFtLnJlc3VsdCIKKyAgICAgICAgfQor
ICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9kYXRhL3BsYW5zL3NwZWVkb21ldGVyLnBsYW4gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9zcGVlZG9tZXRlci5wbGFuCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI5ZjA3NmI4MzYyODYzZDVjMGJmMGRhZjQ0YjJkMGNkNmYwNmEwNmQKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9z
cGVlZG9tZXRlci5wbGFuCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAiYmVuY2htYXJrcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImJlbmNobWFya19idWlsZGVyIjogIkdlbmVyaWNCZW5j
aG1hcmtCdWlsZGVyIiwKKyAgICAgICAgICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiZGF0YS9wYXRj
aGVzL1NwZWVkb21ldGVyLnBhdGNoIiwKKyAgICAgICAgICAgICJvcmlnaW5hbF9iZW5jaG1hcmsi
OiAiLi4vLi4vLi4vLi4vUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlciIsCisgICAgICAgICAg
ICAiY291bnQiOiA1LAorICAgICAgICAgICAgImVudHJ5X3BvaW50IjogIlNwZWVkb21ldGVyL0Z1
bGwuaHRtbCIsCisgICAgICAgICAgICAib3V0cHV0X2ZpbGUiOiAic3BlZWRvbWV0ZXIucmVzdWx0
IiwKKyAgICAgICAgICAgICJyZXN1bHRfd3JhcHBlciI6ICJNZXJnZVJlc3VsdFdyYXBwZXIiLAor
ICAgICAgICAgICAgInRpbWVvdXQiOiA2MDAKKyAgICAgICAgfQorICAgIF0sCisgICAgImh0dHBf
c2VydmVyX2RyaXZlciI6ICJTaW1wbGVIVFRQU2VydmVyRHJpdmVyIgorfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2dlbmVyaWNfZmFjdG9yeS5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9nZW5lcmljX2ZhY3Rv
cnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzJjMWM3ZTg1NjEzMGJjZmM3NGY3ZWRkZmZiNzYyZmU3NDdjNmQw
MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9nZW5lcmljX2ZhY3RvcnkucHkKQEAgLTAsMCArMSwzMSBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKKworZnJvbSB1dGlscyBpbXBvcnQg
bG9hZE1vZHVsZSwgTW9kdWxlTm90Rm91bmRFcnJvcgorCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCdQZXJmQXV0b1J1bicpCisKKworY2xhc3MgR2VuZXJpY0ZhY3Rvcnkob2JqZWN0KToK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGVzKToKKyAgICAgICAgc2VsZi5oYW5kbGVz
ID0gaGFuZGxlcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGl0ZXJhdGVHZXRJdGVtKGNs
cywgb3B0aW9ucywga2V5cyk6CisgICAgICAgIHJldCA9IG9wdGlvbnMKKyAgICAgICAgZm9yIGtl
eSBpbiBrZXlzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldCA9IHJldC5f
X2dldGl0ZW1fXyhrZXkpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAg
ICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIGNyZWF0ZShzZWxmLCBk
ZXNjcmlwdGlvbnMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gbG9hZE1vZHVs
ZShzZWxmLml0ZXJhdGVHZXRJdGVtKHNlbGYuaGFuZGxlcywgZGVzY3JpcHRpb25zKSkoKQorICAg
ICAgICBleGNlcHQ6CisgICAgICAgICAgICByYWlzZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9fX2luaXRfXy5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9k
cml2ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1
YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1h
cmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlci90d2lzdGVkX2h0dHBfc2Vy
dmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2Vy
dmVyX2RyaXZlci9odHRwX3NlcnZlci90d2lzdGVkX2h0dHBfc2VydmVyLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjBkZjc1ZjY1YWRhMzk3N2I5ZDUyZDFmNmQ3ZmNjOTY0OTQwOTAzZTkKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJf
ZHJpdmVyL2h0dHBfc2VydmVyL3R3aXN0ZWRfaHR0cF9zZXJ2ZXIucHkKQEAgLTAsMCArMSwzMiBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2Zyb20gdHdpc3RlZC53ZWIgaW1wb3J0IHN0YXRp
Yywgc2VydmVyCitmcm9tIHR3aXN0ZWQud2ViLnJlc291cmNlIGltcG9ydCBSZXNvdXJjZQorZnJv
bSB0d2lzdGVkLmludGVybmV0IGltcG9ydCByZWFjdG9yCitpbXBvcnQgYXJncGFyc2UKK2ltcG9y
dCBzeXMKKworCitjbGFzcyBTZXJ2ZXJDb250cm9sKFJlc291cmNlKToKKyAgICBpc0xlYWYgPSBU
cnVlCisKKyAgICBkZWYgcmVuZGVyX0dFVChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgcmVhY3Rv
ci5zdG9wKCkKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgcmVuZGVyX1BPU1Qoc2VsZiwg
cmVxdWVzdCk6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocmVxdWVzdC5jb250ZW50LmdldHZh
bHVlKCkpCisgICAgICAgIHJldHVybiAnT0snCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgICAgICAgZGVzY3Jp
cHRpb249J3B5dGhvbiBUd2lzdGVkSFRUUFNlcnZlci5weSB3ZWJyb290JykKKyAgICBwYXJzZXIu
YWRkX2FyZ3VtZW50KCd3ZWJyb290JykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQor
ICAgIHdlYnJvb3QgPSBzdGF0aWMuRmlsZShhcmdzLndlYnJvb3QpCisgICAgc2VydmVyQ29udHJv
bCA9IFNlcnZlckNvbnRyb2woKQorICAgIHdlYnJvb3QucHV0Q2hpbGQoJ3NodXRkb3duJywgc2Vy
dmVyQ29udHJvbCkKKyAgICB3ZWJyb290LnB1dENoaWxkKCdyZXBvcnQnLCBzZXJ2ZXJDb250cm9s
KQorICAgIHJlYWN0b3IubGlzdGVuVENQKDAsIHNlcnZlci5TaXRlKHdlYnJvb3QpKQorICAgIHJl
YWN0b3IucnVuKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRw
X3NlcnZlcl9kcml2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RkY2ZkMTA2MTAwNGRhODc5OGI5N2U3ZDM0
YmI0MzQ5Zjc4YTRhMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
YmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyLnB5
CkBAIC0wLDAgKzEsMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitmcm9tIGFiYyBpbXBv
cnQgYWJzdHJhY3RtZXRob2QKKworCitjbGFzcyBIVFRQU2VydmVyRHJpdmVyKG9iamVjdCk6Cisg
ICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHNlcnZlKHNlbGYsIHdlYlJvb3QpOgorICAgICAg
ICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgZmV0Y2hSZXN1bHQoc2VsZik6
CisgICAgICAgIHJldHVybiAnZmFrZSByZXN1bHQnCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVy
X2RyaXZlcl9mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVu
bmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJfZmFjdG9yeS5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43NTk0MWUyZjZkODlmYTJhZDFjNTIxY2RlMTUzMDM1MTliZWUzNGZiCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBf
c2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJfZmFjdG9yeS5weQpAQCAtMCwwICsxLDIw
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBqc29u
CitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLmdlbmVyaWNfZmFj
dG9yeSBpbXBvcnQgR2VuZXJpY0ZhY3RvcnkKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dl
cignUGVyZkF1dG9SdW4nKQoraGFuZGxlRmlsZU5hbWUgPSAnaHR0cF9zZXJ2ZXJfZHJpdmVycy5q
c29uJwordHJ5OgorICAgIGRyaXZlcnMgPSBqc29uLmxvYWQob3Blbihvcy5wYXRoLmpvaW4ob3Mu
cGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgaGFuZGxlRmlsZU5hbWUpLCAncicpKQorZXhjZXB0Ogor
ICAgIGxvZ2dlci53YXJuKCdMb2FkaW5nICVzIGZhaWxlZCwgc3RhcnQgdXNpbmcgcHJlLWRlZmlu
ZWQgaGFuZGxlcycgJSAoaGFuZGxlRmlsZU5hbWUpKQorICAgIGRyaXZlcnMgPSB7CisgICAgICAg
ICdTaW1wbGVIVFRQU2VydmVyRHJpdmVyJzogeydmaWxlUGF0aCc6ICdodHRwX3NlcnZlcl9kcml2
ZXIuc2ltcGxlX2h0dHBfc2VydmVyX2RyaXZlcicsICdtb2R1bGVOYW1lJzogJ1NpbXBsZUhUVFBI
YW5kbGUnfSwKKyAgICB9CisKK0hUVFBTZXJ2ZXJEcml2ZXJGYWN0b3J5ID0gR2VuZXJpY0ZhY3Rv
cnkoZHJpdmVycykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVycy5qc29uIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9o
dHRwX3NlcnZlcl9kcml2ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJiM2JjZGNiNjlkNGU1NTMxYzQ5
OWVkOWE2N2U4M2QyYTc3Mjk4OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJp
dmVycy5qc29uCkBAIC0wLDAgKzEsNiBAQAoreworICAiU2ltcGxlSFRUUFNlcnZlckRyaXZlciI6
IHsKKyAgICAibW9kdWxlTmFtZSI6ICJTaW1wbGVIVFRQU2VydmVyRHJpdmVyIiwgCisgICAgImZp
bGVQYXRoIjogImh0dHBfc2VydmVyX2RyaXZlci5zaW1wbGVfaHR0cF9zZXJ2ZXJfZHJpdmVyIgor
ICB9Cit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5u
ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL3NpbXBsZV9odHRwX3NlcnZlcl9kcml2ZXIucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL3Np
bXBsZV9odHRwX3NlcnZlcl9kcml2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU3MDQ3MDY1OTliMmI3ZGM1
YTY0OGFlMzA1NTM4ZjQyN2FkMzg1YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvc2ltcGxlX2h0dHBf
c2VydmVyX2RyaXZlci5weQpAQCAtMCwwICsxLDEwNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAor
aW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCisKK2Zyb20gaHR0cF9zZXJ2ZXJfZHJpdmVy
IGltcG9ydCBIVFRQU2VydmVyRHJpdmVyCisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIo
J1BlcmZBdXRvUnVuJykKKworCitjbGFzcyBTaW1wbGVIVFRQU2VydmVyRHJpdmVyKEhUVFBTZXJ2
ZXJEcml2ZXIpOgorCisgICAgIiIiVGhpcyBjbGFzcyBkZXBlbmRzIG9uIHVuaXggZW52aXJvbm1l
bnQsIG5lZWQgdG8gYmUgbW9kaWZpZWQgdG8gYWNoaWV2ZSBjcm9zc3BsYXRmb3JtIGNvbXBhYmls
aXR5CisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc2Vy
dmVyUHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2ZXJQb3J0ID0gMAorICAgICAgICAj
IEZJWE1FOiB0aGlzIG1heSBub3QgYmUgcmVsaWFibGUuCisgICAgICAgIGxvZ2dlci5pbmZvKCdG
aW5kaW5nIHRoZSBJUCBhZGRyZXNzIG9mIGN1cnJlbnQgbWFjaGluZScpCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHNlbGYuaXAgPSBbCisgICAgICAgICAgICAgICAgaXAgZm9yIGlwIGluIHNv
Y2tldC5nZXRob3N0YnluYW1lX2V4KAorICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZ2V0aG9z
dG5hbWUoKSlbMl0gaWYgbm90IGlwLnN0YXJ0c3dpdGgoIjEyNy4iKV1bMF0KKyAgICAgICAgICAg
IGxvZ2dlci5pbmZvKCdJUCBvZiBjdXJyZW50IG1hY2hpbmUgaXM6ICVzJyAlIHNlbGYuaXApCisg
ICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignQ2Fubm90IGdldCB0aGUg
aXAgYWRkcmVzcyBvZiBjdXJyZW50IG1hY2hpbmUnKQorICAgICAgICAgICAgcmFpc2UKKworICAg
IGRlZiBzZXJ2ZShzZWxmLCB3ZWJyb290KToKKyAgICAgICAgb2xkV29ya2luZ0RpcmVjdG9yeSA9
IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFi
c3BhdGgoX19maWxlX18pKSkKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0xhdWNobmluZyBhbiBodHRw
IHNlcnZlcicpCisgICAgICAgIHNlbGYuc2VydmVyUHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4o
CisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgJy91c3IvYmluL3B5dGhvbicsCisgICAg
ICAgICAgICAgICAgJ2h0dHBfc2VydmVyL3R3aXN0ZWRfaHR0cF9zZXJ2ZXIucHknLAorICAgICAg
ICAgICAgICAgIHdlYnJvb3RdLAorICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAor
ICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1z
dWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG9zLmNoZGlyKG9sZFdvcmtpbmdEaXJlY3RvcnkpCisg
ICAgICAgIG1heEF0dGVtcHQgPSA1CisgICAgICAgIGludGVydmFsID0gMC41CisgICAgICAgIGxv
Z2dlci5pbmZvKCdTdGFydCB0byBmZXRjaGluZyB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIGh0dHAg
c2VydmVyJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHBzdXRpbAorICAgICAg
ICAgICAgZm9yIGF0dGVtcHQgaW4geHJhbmdlKG1heEF0dGVtcHQpOgorICAgICAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJQb3J0ID0gcHN1dGlsLlByb2Nl
c3MoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlclByb2Nlc3MucGlkKS5jb25u
ZWN0aW9ucygpWzBdWzNdWzFdCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyUG9y
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdIVFRQIFNlcnZlciBpcyBzZXJ2aW5nIGF0IHBvcnQ6ICVkJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlclBvcnQpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAg
ICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oCisgICAgICAg
ICAgICAgICAgICAgICdTZXJ2ZXIgcG9ydCBpcyBub3QgZm91bmQgdGhpcyB0aW1lLCByZXRyeSBh
ZnRlciAlZiBzZWNvbmRzJyAlCisgICAgICAgICAgICAgICAgICAgIGludGVydmFsKQorICAgICAg
ICAgICAgICAgIHRpbWUuc2xlZXAoaW50ZXJ2YWwpCisgICAgICAgICAgICAgICAgaW50ZXJ2YWwg
Kj0gMgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgZm9yIGF0dGVtcHQgaW4geHJhbmdlKG1heEF0dGVtcHQpOgorICAgICAgICAg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Q
b3BlbignICcuam9pbihbJy91c3Ivc2Jpbi9sc29mJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWEnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctaVRDUCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1zVENQOkxJU1RF
TicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJy1wJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIoc2VsZi5zZXJ2ZXJQcm9jZXNzLnBpZCldKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nl
c3MuUElQRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyUG9ydCA9IGludCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5maW5kYWxsKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnVENQIFwqOihcZCspIFwoTElTVEVOXCknLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwLmNvbW11bmljYXRlKClbMF0pWzBdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXJQb3J0OgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ2dlci5pbmZvKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFRUUCBT
ZXJ2ZXIgaXMgc2VydmluZyBhdCBwb3J0OiAlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuc2VydmVyUG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5p
bmZvKAorICAgICAgICAgICAgICAgICAgICAgICAgJ1NlcnZlciBwb3J0IGlzIG5vdCBmb3VuZCB0
aGlzIHRpbWUsIHJldHJ5IGFmdGVyICVmIHNlY29uZHMnICUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGludGVydmFsKQorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKGludGVydmFsKQor
ICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbCAqPSAyCisgICAgICAgICAgICBleGNlcHQ6Cisg
ICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBiYXNlVXJsKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gImh0dHA6Ly8lczolZCIgJSAoc2VsZi5pcCwgc2VsZi5zZXJ2ZXJQb3J0KQorCisgICAg
ZGVmIGZldGNoUmVzdWx0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXJQcm9jZXNz
LmNvbW11bmljYXRlKClbMF0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVu
Y2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9fX2luaXRfXy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dyYXBw
ZXIvYmFzZV9yZXN1bHRfd3JhcHBlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2ht
YXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9iYXNlX3Jlc3VsdF93cmFwcGVyLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmVhNDg2MDgwMWJjNDMzMjk4ZmY4MzgzYTEzMjcyYWE3MWEyY2M0MzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dy
YXBwZXIvYmFzZV9yZXN1bHRfd3JhcHBlci5weQpAQCAtMCwwICsxLDkgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorCitmcm9tIGFiYyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKKworCitjbGFzcyBC
YXNlUmVzdWx0V3JhcHBlcihvYmplY3QpOgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB3
cmFwKHNlbGYsIHJlc3VsdHMpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dyYXBwZXIvbWVyZ2VfcmVzdWx0
X3dyYXBwZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVz
dWx0X3dyYXBwZXIvbWVyZ2VfcmVzdWx0X3dyYXBwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVhYmUxYjk2
NDA2YjUyYjBjZDkyN2YwOTgzMGM3Mzg4NTQ5NmViMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9tZXJnZV9y
ZXN1bHRfd3JhcHBlci5weQpAQCAtMCwwICsxLDM3IEBACisjIS91c3IvYmluL2VudiBweXRob24K
KworZnJvbSBiYXNlX3Jlc3VsdF93cmFwcGVyIGltcG9ydCBCYXNlUmVzdWx0V3JhcHBlcgoraW1w
b3J0IHR5cGVzCisKKworY2xhc3MgRGljdGlvbmFyeU1lcmdlcihCYXNlUmVzdWx0V3JhcHBlcik6
CisgICAgZGVmIHdyYXAoc2VsZiwgZGljdHMpOgorICAgICAgICBpZiBsZW4oZGljdHMpID09IDA6
CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXQgPSB7fQorICAgICAgICBmb3Ig
ZGljIGluIGRpY3RzOgorICAgICAgICAgICAgcmV0ID0gc2VsZi5tZXJnZShyZXQsIGRpYykKKyAg
ICAgICAgcmV0dXJuIHJldAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1lcmdlKGNscywg
YSwgYik6CisgICAgICAgIGFzc2VydChpc2luc3RhbmNlKGEsIHR5cGUoYikpKQorICAgICAgICBh
cmdUeXBlID0gdHlwZShhKQorICAgICAgICAjIHNwZWNpYWwgaGFuZGxlIGZvciBsaXN0IHR5cGUs
IGFuZCBzaG91bGQgYmUgaGFuZGxlIGJlZm9yZSBlcXVhbCBjaGVjaworICAgICAgICBpZiBhcmdU
eXBlID09IHR5cGVzLkxpc3RUeXBlOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAg
IGlmIGEgPT0gYjoKKyAgICAgICAgICAgIHJldHVybiBhCisgICAgICAgIGlmIGFyZ1R5cGUgPT0g
dHlwZXMuRGljdFR5cGU6CisgICAgICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICAgICAgZm9y
IGtleSwgdmFsdWUgaW4gYS5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBiOgor
ICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGNscy5tZXJnZSh2YWx1ZSwgYltrZXld
KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXld
ID0gdmFsdWUKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGIuaXRlbXMoKToKKyAgICAg
ICAgICAgICAgICBpZiBrZXkgbm90IGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0W2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAjIGZv
ciBvdGhlciB0eXBlcworICAgICAgICByZXR1cm4gYSArIGIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9yZXN1bHRfd3Jh
cHBlcl9mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVy
L3Jlc3VsdF93cmFwcGVyL3Jlc3VsdF93cmFwcGVyX2ZhY3RvcnkucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmU0
YjNlZmM3ZjdiZWJlMWMwZDI4MGZiMTM5YmE2ZTZhOTc0NTFkMwotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9y
ZXN1bHRfd3JhcHBlcl9mYWN0b3J5LnB5CkBAIC0wLDAgKzEsMjAgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworCitmcm9t
IHdlYmtpdHB5LmJlbmNobWFya19ydW5uZXIuZ2VuZXJpY19mYWN0b3J5IGltcG9ydCBHZW5lcmlj
RmFjdG9yeQorCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1bicpCit3
cmFwcGVyRmlsZU5hbWUgPSAncmVzdWx0X3dyYXBwZXJzLmpzb24nCit0cnk6CisgICAgd3JhcHBl
cnMgPSBqc29uLmxvYWQob3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9f
KSwgd3JhcHBlckZpbGVOYW1lKSwgJ3InKSkKK2V4Y2VwdDoKKyAgICBsb2dnZXIud2FybignTG9h
ZGluZyAlcyBmYWlsZWQsIHN0YXJ0IHVzaW5nIHByZS1kZWZpbmVkIHdyYXBwZXInICUgKHdyYXBw
ZXJGaWxlTmFtZSkpCisgICAgd3JhcHBlcnMgPSB7CisgICAgICAgICdNZXJnZVJlc3VsdFdyYXBw
ZXInOiB7J2ZpbGVQYXRoJzogJ1Jlc3VsdFdyYXBwZXIuTWVyZ2VSZXN1bHRXcmFwcGVyJywgJ21v
ZHVsZU5hbWUnOiAnRGljdGlvbmFyeU1lcmdlcid9CisgICAgfQorCityZXN1bHRXcmFwcGVyRmFj
dG9yeSA9IEdlbmVyaWNGYWN0b3J5KHdyYXBwZXJzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3Jlc3VsdF93cmFwcGVyL3Jlc3VsdF93cmFwcGVy
cy5qc29uIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3Jlc3VsdF93
cmFwcGVyL3Jlc3VsdF93cmFwcGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4ODBjMTJhODQ2ZDU2MGJm
MmEwNDI3OTkzNmI2ZDZkODU2YWYzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dyYXBwZXIvcmVzdWx0X3dyYXBwZXJz
Lmpzb24KQEAgLTAsMCArMSw2IEBACit7CisgICJNZXJnZVJlc3VsdFdyYXBwZXIiOiB7CisgICAg
Im1vZHVsZU5hbWUiOiAiRGljdGlvbmFyeU1lcmdlciIsIAorICAgICJmaWxlUGF0aCI6ICJyZXN1
bHRfd3JhcHBlci5tZXJnZV9yZXN1bHRfd3JhcHBlciIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3V0aWxzLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3MDgw
NDY3NGMwN2E5NjUyYmU5ZThhOTE5MWE1NzBkMjI4OTNlMDMKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvdXRpbHMucHkKQEAgLTAsMCAr
MSw1MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25h
bAoraW1wb3J0IGxvZ2dpbmcKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignUGVyZkF1
dG9SdW4nKQorCisKK2NsYXNzIE1vZHVsZU5vdEZvdW5kRXJyb3IoRXhjZXB0aW9uKToKKyAgICBw
YXNzCisKKworZGVmIGxvYWRNb2R1bGUobW9kdWxlRGVzYyk6CisgICAgdHJ5OgorICAgICAgICBy
ZXQgPSBnZXRhdHRyKF9faW1wb3J0X18obW9kdWxlRGVzY1snZmlsZVBhdGgnXSwgZ2xvYmFscygp
LCBsb2NhbHMoKSwgbW9kdWxlRGVzY1snbW9kdWxlTmFtZSddLCAtMSksIG1vZHVsZURlc2NbJ21v
ZHVsZU5hbWUnXSkKKyAgICAgICAgcmV0dXJuIHJldAorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMg
ZToKKyAgICAgICAgcmFpc2UKKyAgICAgICAgcmFpc2UgTW9kdWxlTm90Rm91bmRFcnJvcignTW9k
dWxlICglcykgd2l0aCBwYXRoKCVzKSBpcyBub3QgZm91bmQnICUgKG1vZHVsZURlc2NbJ21vZHVs
ZU5hbWUnXSwgbW9kdWxlRGVzY1snZmlsZVBhdGgnXSkpCisKKworZGVmIGdldFBhdGhGcm9tUHJv
amVjdFJvb3QocmVsYXRpdmVQYXRoVG9Qcm9qZWN0Um9vdCk6CisgICAgIyBDaG9vc2UgdGhlIGRp
cmVjdG9yeSBjb250YWlubmluZyBjdXJyZW50IGZpbGUgYXMgc3RhcnQgcG9pbnQsCisgICAgIyBj
b21wdXRlIHJlbGF0aXZlIHBhdGggYmFzZSBvbiB0aGUgcGFyYW1ldGVyLAorICAgICMgYW5kIHJl
dHVybiBhbiBhYnNvbHV0ZSBwYXRoCisgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChvcy5wYXRo
LmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCByZWxhdGl2
ZVBhdGhUb1Byb2plY3RSb290KSkKKworCisjIEJvcnJvdyB0aGlzIGNvZGUgZnJvbQorIyAnaHR0
cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMjgxODUwL3RpbWVvdXQtZnVuY3Rpb24t
aWYtaXQtdGFrZXMtdG9vLWxvbmctdG8tZmluaXNoJworY2xhc3MgVGltZW91dEVycm9yKEV4Y2Vw
dGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIHRpbWVvdXQ6CisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgc2Vjb25kcz0xLCBlcnJvcl9tZXNzYWdlPSdUaW1lb3V0Jyk6CisgICAgICAgIHNlbGYu
c2Vjb25kcyA9IHNlY29uZHMKKyAgICAgICAgc2VsZi5lcnJvcl9tZXNzYWdlID0gZXJyb3JfbWVz
c2FnZQorCisgICAgZGVmIGhhbmRsZV90aW1lb3V0KHNlbGYsIHNpZ251bSwgZnJhbWUpOgorICAg
ICAgICByYWlzZSBUaW1lb3V0RXJyb3Ioc2VsZi5lcnJvcl9tZXNzYWdlKQorCisgICAgZGVmIF9f
ZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgc2Vs
Zi5oYW5kbGVfdGltZW91dCkKKyAgICAgICAgc2lnbmFsLmFsYXJtKHNlbGYuc2Vjb25kcykKKwor
ICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKKyAgICAgICAg
c2lnbmFsLmFsYXJtKDApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251564</attachid>
            <date>2015-04-24 12:19:21 -0700</date>
            <delta_ts>2015-04-24 17:27:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144038-20150424121815.patch</filename>
            <type>text/plain</type>
            <size>54731</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMTM2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGMzYTBlZTY0MjZkMjllN2Y0YjU4Y2Y2NDMxMzRhYjJj
NmY1MzJhZS4uZmM4NjBjMjVkN2RkNDg2MzU0MjllMjE1MmY2ZmQyNjM5MzQ4NzBkMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5
IEBACisyMDE1LTA0LTI0ICBEZXdlaSBaaHUgIDxkZXdlaV96aHVAYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCBQZXJmQXV0b1J1biB0byBhdXRvbWF0ZSBicm93c2VyIGJhc2VkIHBlcmZvcm1hbmNl
IGJlbmNobWFya3MoZS5nLiBTcGVlZG9tZXRlciBhbmQgSmV0U3RyZWFtKQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MDM4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1iZW5jaG1h
cms6IEFkZGVkLgorICAgICAgICAobWFpbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL1JFQURNRS5tZDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvX19pbml0X18u
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9i
ZW5jaG1hcmtfYnVpbGRlci9iZW5jaG1hcmtfYnVpbGRlcl9mYWN0b3J5LnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxk
ZXIvYmVuY2htYXJrX2J1aWxkZXJzLmpzb246IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9nZW5lcmljX2JlbmNobWFy
a19idWlsZGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKEdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyKToK
KyAgICAgICAgKEdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyLnByZXBhcmUpOgorICAgICAgICAoR2Vu
ZXJpY0JlbmNobWFya0J1aWxkZXIuX2NvcHlCZW5jaG1hcmtUb1RlbXBEaXIpOgorICAgICAgICAo
R2VuZXJpY0JlbmNobWFya0J1aWxkZXIuX2FwcGx5UGF0Y2gpOgorICAgICAgICAoR2VuZXJpY0Jl
bmNobWFya0J1aWxkZXIuY2xlYW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2ht
YXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9qZXRzdHJlYW1fYmVuY2htYXJrX2J1aWxkZXIu
cHk6IEFkZGVkLgorICAgICAgICAoSmV0U3RyZWFtQmVuY2htYXJrQnVpbGRlcik6CisgICAgICAg
IChKZXRTdHJlYW1CZW5jaG1hcmtCdWlsZGVyLnByZXBhcmUpOgorICAgICAgICAoSmV0U3RyZWFt
QmVuY2htYXJrQnVpbGRlci5fcnVuQ3JlYXRlU2NyaXB0KToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX3J1bm5lci5weTogQWRkZWQuCisgICAg
ICAgIChCZW5jaG1hcmtSdW5uZXIpOgorICAgICAgICAoQmVuY2htYXJrUnVubmVyLl9faW5pdF9f
KToKKyAgICAgICAgKEJlbmNobWFya1J1bm5lci5leGVjdXRlKToKKyAgICAgICAgKEJlbmNobWFy
a1J1bm5lci5jb21wb3NlVXJsKToKKyAgICAgICAgKEJlbmNobWFya1J1bm5lci5kdW1wKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIv
X19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlci5weTogQWRkZWQuCisgICAgICAg
IChCcm93c2VyRHJpdmVyKToKKyAgICAgICAgKEJyb3dzZXJEcml2ZXIucHJlcGFyZUVudik6Cisg
ICAgICAgIChCcm93c2VyRHJpdmVyLmxhdW5jaFVybCk6CisgICAgICAgIChCcm93c2VyRHJpdmVy
LmNsb3NlQnJvd3Nlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVu
bmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyX2ZhY3RvcnkucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9i
cm93c2VyX2RyaXZlcnMuanNvbjogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9jaHJvbWVfZHJpdmVyLnB5OiBBZGRl
ZC4KKyAgICAgICAgKE9TWENocm9tZURyaXZlcik6CisgICAgICAgIChPU1hDaHJvbWVEcml2ZXIu
cHJlcGFyZUVudik6CisgICAgICAgIChPU1hDaHJvbWVEcml2ZXIubGF1bmNoVXJsKToKKyAgICAg
ICAgKE9TWENocm9tZURyaXZlci5jbG9zZUJyb3dzZXJzKToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X3NhZmFyaV9kcml2ZXIu
cHk6IEFkZGVkLgorICAgICAgICAoT1NYU2FmYXJpRHJpdmVyKToKKyAgICAgICAgKE9TWFNhZmFy
aURyaXZlci5wcmVwYXJlRW52KToKKyAgICAgICAgKE9TWFNhZmFyaURyaXZlci5sYXVuY2hVcmwp
OgorICAgICAgICAoT1NYU2FmYXJpRHJpdmVyLmNsb3NlQnJvd3NlcnMpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvSmV0U3RyZWFtLnBh
dGNoOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
ZGF0YS9wYXRjaGVzL1NwZWVkb21ldGVyLnBhdGNoOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9qZXRzdHJlYW0ucGxhbjogQWRk
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxh
bnMvc3BlZWRvbWV0ZXIucGxhbjogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL2dlbmVyaWNfZmFjdG9yeS5weTogQWRkZWQuCisgICAgICAgIChHZW5l
cmljRmFjdG9yeSk6CisgICAgICAgIChHZW5lcmljRmFjdG9yeS5fX2luaXRfXyk6CisgICAgICAg
IChHZW5lcmljRmFjdG9yeS5pdGVyYXRlR2V0SXRlbSk6CisgICAgICAgIChHZW5lcmljRmFjdG9y
eS5jcmVhdGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9o
dHRwX3NlcnZlcl9kcml2ZXIvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXIv
dHdpc3RlZF9odHRwX3NlcnZlci5weTogQWRkZWQuCisgICAgICAgIChTZXJ2ZXJDb250cm9sKToK
KyAgICAgICAgKFNlcnZlckNvbnRyb2wucmVuZGVyX0dFVCk6CisgICAgICAgIChTZXJ2ZXJDb250
cm9sLnJlbmRlcl9QT1NUKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19y
dW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyX2RyaXZlci5weTogQWRkZWQuCisg
ICAgICAgIChIVFRQU2VydmVyRHJpdmVyKToKKyAgICAgICAgKEhUVFBTZXJ2ZXJEcml2ZXIuc2Vy
dmUpOgorICAgICAgICAoSFRUUFNlcnZlckRyaXZlci5mZXRjaFJlc3VsdCk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRw
X3NlcnZlcl9kcml2ZXJfZmFjdG9yeS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2
ZXJzLmpzb246IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvc2ltcGxlX2h0dHBfc2VydmVyX2RyaXZlci5weTogQWRk
ZWQuCisgICAgICAgIChTaW1wbGVIVFRQU2VydmVyRHJpdmVyKToKKyAgICAgICAgKFNpbXBsZUhU
VFBTZXJ2ZXJEcml2ZXIuZGVwZW5kcyk6CisgICAgICAgIChTaW1wbGVIVFRQU2VydmVyRHJpdmVy
Ll9faW5pdF9fKToKKyAgICAgICAgKFNpbXBsZUhUVFBTZXJ2ZXJEcml2ZXIuc2VydmUpOgorICAg
ICAgICAoU2ltcGxlSFRUUFNlcnZlckRyaXZlci5iYXNlVXJsKToKKyAgICAgICAgKFNpbXBsZUhU
VFBTZXJ2ZXJEcml2ZXIuZmV0Y2hSZXN1bHQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
YmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9fX2luaXRfXy5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3Jlc3VsdF93cmFwcGVyL2Jh
c2VfcmVzdWx0X3dyYXBwZXIucHk6IEFkZGVkLgorICAgICAgICAoQmFzZVJlc3VsdFdyYXBwZXIp
OgorICAgICAgICAoQmFzZVJlc3VsdFdyYXBwZXIud3JhcCk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3Jlc3VsdF93cmFwcGVyL21lcmdlX3Jlc3VsdF93cmFw
cGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKERpY3Rpb25hcnlNZXJnZXIpOgorICAgICAgICAoRGlj
dGlvbmFyeU1lcmdlci53cmFwKToKKyAgICAgICAgKERpY3Rpb25hcnlNZXJnZXIubWVyZ2UpOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBl
ci9yZXN1bHRfd3JhcHBlcl9mYWN0b3J5LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dyYXBwZXIvcmVzdWx0X3dyYXBwZXJzLmpz
b246IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci91
dGlscy5weTogQWRkZWQuCisgICAgICAgIChNb2R1bGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAg
KGxvYWRNb2R1bGUpOgorICAgICAgICAoZ2V0UGF0aEZyb21Qcm9qZWN0Um9vdCk6CisgICAgICAg
IChUaW1lb3V0RXJyb3IpOgorICAgICAgICAodGltZW91dCk6CisgICAgICAgICh0aW1lb3V0Ll9f
aW5pdF9fKToKKyAgICAgICAgKHRpbWVvdXQuaGFuZGxlX3RpbWVvdXQpOgorICAgICAgICAodGlt
ZW91dC5fX2VudGVyX18pOgorICAgICAgICAodGltZW91dC5fX2V4aXRfXyk6CisKIDIwMTUtMDQt
MjEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10g
RXh0ZW5kIGFjdGlvbiBtZW51cyB0byBzdXBwb3J0IFBERgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy9ydW4tYmVuY2htYXJrIGIvVG9vbHMvU2NyaXB0cy9ydW4tYmVuY2htYXJrCm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBmZGUwNzc2ZmRlMGFhYmYzNDJjNGY3ZTU5NTU3NWM1ZWIxY2FlYzIKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3J1bi1iZW5jaG1hcmsKQEAgLTAsMCArMSwzNCBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2Zy
b20gd2Via2l0cHkuYmVuY2htYXJrX3J1bm5lci5iZW5jaG1hcmtfcnVubmVyIGltcG9ydCBCZW5j
aG1hcmtSdW5uZXIKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignUGVyZkF1dG9SdW4n
KQorbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCitjaCA9IGxvZ2dpbmcuU3RyZWFtSGFu
ZGxlcigpCitjaC5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorZm9ybWF0dGVyID0gbG9nZ2luZy5G
b3JtYXR0ZXIoJyUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNz
YWdlKXMnKQorY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKK2xvZ2dlci5hZGRIYW5kbGVyKGNo
KQorCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIo
ZGVzY3JpcHRpb249J0F1dG9tYXRlIHRoZSBicm93c2VyIGJhc2VkIHBlcmZvcm1hbmNlIGJlbmNo
bWFya3MnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cHV0LWZpbGUnLCBkZXN0PSdv
dXRwdXQnLCBkZWZhdWx0PU5vbmUpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1idWlsZC1k
aXJlY3RvcnknLCBkZXN0PSdidWlsZERpcicsIHJlcXVpcmVkPVRydWUpCisgICAgcGFyc2VyLmFk
ZF9hcmd1bWVudCgnLS1wbGFuJywgZGVzdD0ncGxhbicsIHJlcXVpcmVkPVRydWUpCisgICAgcGFy
c2VyLmFkZF9hcmd1bWVudCgnLS1wbGF0Zm9ybScsIGRlc3Q9J3BsYXRmb3JtJywgZGVmYXVsdD0n
b3N4JywgY2hvaWNlcz1bJ29zeCcsICdpb3MnLCAnd2luZG93cyddLCByZXF1aXJlZD1UcnVlKQor
ICAgICMgRklYTUU6IFNob3VsZCB3ZSBhZGQgY2hyb21lIGFzIGFuIG9wdGlvbj8gV2VsbCwgY2hy
b21lIHVzZXMgd2Via2l0IGluIGlPUy4KKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJyb3dz
ZXInLCBkZXN0PSdicm93c2VyJywgZGVmYXVsdD0nc2FmYXJpJywgY2hvaWNlcz1bJ3NhZmFyaScs
ICdjaHJvbWUnXSwgcmVxdWlyZWQ9VHJ1ZSkKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Mo
KQorICAgIGxvZ2dlci5pbmZvKCdJbml0aWFsaXppbmcgcHJvZ3JhbSB3aXRoIGZvbGxvd2luZyBw
YXJhbWV0ZXJzJykKKyAgICBsb2dnZXIuaW5mbygnXHRvdXRwdXQgZmlsZSBuYW1lXHQ6ICVzJyAl
IGFyZ3Mub3V0cHV0KQorICAgIGxvZ2dlci5pbmZvKCdcdGJ1aWxkIGRpcmVjdG9yeVx0OiAlcycg
JSBhcmdzLmJ1aWxkRGlyKQorICAgIGxvZ2dlci5pbmZvKCdcdHBsYW4gbmFtZVx0OiAlcycsIGFy
Z3MucGxhbikKKyAgICBydW5uZXIgPSBCZW5jaG1hcmtSdW5uZXIoYXJncy5wbGFuLCBhcmdzLmJ1
aWxkRGlyLCBhcmdzLm91dHB1dCwgYXJncy5wbGF0Zm9ybSwgYXJncy5icm93c2VyKQorICAgIHJ1
bm5lci5leGVjdXRlKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9SRUFE
TUUubWQgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvUkVBRE1FLm1k
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjliOWFhNTAyODZhOWJhZDE2MGJmZTZlNTQ2MDE1M2ZiOWZiYWUzNGYKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
UkVBRE1FLm1kCkBAIC0wLDAgKzEsMTE5IEBACisjIFBlcmZBdXRvUnVuCitUaGlzIGlzIGEgdG9v
bCBmb3IgYXV0b21hdGluZyB0aGUgYnJvd3NlciBiYXNlZCBiZW5jaG1hcmtzKGUuZy4gU3BlZWRv
bWV0ZXIsIEpldFN0cmVhbSkKKyMjIFByb2plY3QgU3RydWN0dXJlCitgYGAKK2JlbmNobWFya19y
dW5uZXIKK+KUnOKUgOKUgCBSRUFETUUubWQKK+KUnOKUgOKUgCBfX2luaXRfXy5weQor4pSc4pSA
4pSAIGJlbmNobWFya19idWlsZGVyCivilILCoMKgIOKUnOKUgOKUgCBfX2luaXRfXy5weQor4pSC
wqDCoCDilJzilIDilIAgYmVuY2htYXJrX2J1aWxkZXJfZmFjdG9yeS5weQor4pSCwqDCoCDilJzi
lIDilIAgYmVuY2htYXJrX2J1aWxkZXJzLmpzb24KK+KUgsKgwqAg4pSc4pSA4pSAIGdlbmVyaWNf
YmVuY2htYXJrX2J1aWxkZXIucHkKK+KUgsKgwqAg4pSU4pSA4pSAIGpldHN0cmVhbV9iZW5jaG1h
cmtfYnVpbGRlci5weQor4pSc4pSA4pSAIGJlbmNobWFya19ydW5uZXIucHkKK+KUnOKUgOKUgCBi
cm93c2VyX2RyaXZlcgor4pSCwqDCoCDilJzilIDilIAgX19pbml0X18ucHkKK+KUgsKgwqAg4pSc
4pSA4pSAIGJyb3dzZXJfZHJpdmVyLnB5CivilILCoMKgIOKUnOKUgOKUgCBicm93c2VyX2RyaXZl
cl9mYWN0b3J5LnB5CivilILCoMKgIOKUnOKUgOKUgCBicm93c2VyX2RyaXZlcnMuanNvbgor4pSC
wqDCoCDilJzilIDilIAgb3N4X2Nocm9tZV9kcml2ZXIucHkKK+KUgsKgwqAg4pSU4pSA4pSAIG9z
eF9zYWZhcmlfZHJpdmVyLnB5CivilJzilIDilIAgZGF0YQor4pSCwqDCoCDilJzilIDilIAgcGF0
Y2hlcwor4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBKZXRTdHJlYW0ucGF0Y2gKK+KUgsKgwqAg
4pSCwqDCoCDilJTilIDilIAgU3BlZWRvbWV0ZXIucGF0Y2gKK+KUgsKgwqAg4pSU4pSA4pSAIHBs
YW5zCivilILCoMKgICAgICDilJzilIDilIAgamV0c3RyZWFtLnBsYW4KK+KUgsKgwqAgICAgIOKU
lOKUgOKUgCBzcGVlZG9tZXRlci5wbGFuCivilJzilIDilIAgZ2VuZXJpY19mYWN0b3J5LnB5Civi
lJzilIDilIAgaHR0cF9zZXJ2ZXJfZHJpdmVyCivilILCoMKgIOKUnOKUgOKUgCBfX2luaXRfXy5w
eQor4pSCwqDCoCDilJzilIDilIAgaHR0cF9zZXJ2ZXIKK+KUgsKgwqAg4pSCwqDCoCDilJTilIDi
lIAgdHdpc3RlZF9odHRwX3NlcnZlci5weQor4pSCwqDCoCDilJzilIDilIAgaHR0cF9zZXJ2ZXJf
ZHJpdmVyLnB5CivilILCoMKgIOKUnOKUgOKUgCBodHRwX3NlcnZlcl9kcml2ZXJfZmFjdG9yeS5w
eQor4pSCwqDCoCDilJzilIDilIAgaHR0cF9zZXJ2ZXJfZHJpdmVycy5qc29uCivilILCoMKgIOKU
lOKUgOKUgCBzaW1wbGVfaHR0cF9zZXJ2ZXJfZHJpdmVyLnB5CivilJzilIDilIAgcmVzdWx0X3dy
YXBwZXIKK+KUgsKgwqAg4pSc4pSA4pSAIF9faW5pdF9fLnB5CivilILCoMKgIOKUnOKUgOKUgCBi
YXNlX3Jlc3VsdF93cmFwcGVyLnB5CivilILCoMKgIOKUnOKUgOKUgCBtZXJnZV9yZXN1bHRfd3Jh
cHBlci5weQor4pSCwqDCoCDilJzilIDilIAgcmVzdWx0X3dyYXBwZXJfZmFjdG9yeS5weQor4pSC
wqDCoCDilJTilIDilIAgcmVzdWx0X3dyYXBwZXJzLmpzb24KK+KUlOKUgOKUgCB1dGlscy5weQor
YGBgCisjIyBSZXF1aXJlbWVudHMKKyogcHl0aG9uIG1vZHVsZXM6CisgICAgKiBQeU9iamMKKyAg
ICAqIHBzdXRpbHMgKG9wdGlvbmFsKQorCisjIyBIT1cgVE9zCisjIyMgSG93IHRvIHJ1bgorYGBg
c2hlbGwKKyAgICBweXRob24gcGF0aC90by9ydW5fYmVuY2htYXJrIC0tYnVpbGQtZGlyZWN0b3J5
IHBhdGgvdG8vYnJvd3Nlci9kaXJlY3RvcnkgLS1wbGFuIGpzb25fZm9ybWF0X3BsYW4gLS1wbGF0
Zm9ybSB0YXJnZXRfcGxhdGZvcm0gLS1icm93c2VyIHRhcmdldF9icm93c2VyCitgYGAKKyogKipw
YXRoL3RvL2Jyb3dzZXIvZGlyZWN0b3J5Kio6IHNob3VsZCBiZSB0aGUgZm9sZGVyIGNvbnRhaW5p
bmcgdGhlIGV4ZWN1dGFibGUgYmluYXJ5KGUuZy4gL0FwcGxpY2F0aW9uLyBvbiBPU1ggd2hpY2gg
Y29udGFpbnMgU2FmYXJpLmFwcCkKKyogKipqc29uX2Zvcm1hdF9wbGFuKio6IHRoZSBiZW5jaG1h
cmsgcGxhbiB5b3Ugd2FudCB0byBleGVjdXRlICAKKworIyMjIEhvdyB0byBjcmVhdGUgYSBwbGFu
CitUbyBjcmVhdGUgYSBwbGFuLCB5b3UgbWF5IHJlZmVyIHRvIFBsYW5zL2pldHN0cmVhbS5wbGFu
LgorYGBganNvbiAKK3sKKyAgICAiaHR0cF9zZXJ2ZXJfZHJpdmVyIjogIlNpbXBsZUhUVFBTZXJ2
ZXJEcml2ZXIiLCAKKyAgICAiYmVuY2htYXJrcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
InRpbWVvdXQiIDogNjAwLAorICAgICAgICAgICAgImNvdW50IjogNSwKKyAgICAgICAgICAgICJi
ZW5jaG1hcmtfYnVpbGRlciI6ICJKZXRTdHJlYW1CZW5jaG1hcmtCdWlsZGVyIiwKKyAgICAgICAg
ICAgICJvcmlnaW5hbF9iZW5jaG1hcmsiOiAiLi4vLi4vLi4vLi4vUGVyZm9ybWFuY2VUZXN0cy9K
ZXRTdHJlYW0iLAorICAgICAgICAgICAgImJlbmNobWFya19wYXRjaCI6ICJkYXRhL3BhdGNoZXMv
SmV0U3RyZWFtLnBhdGNoIiwKKyAgICAgICAgICAgICJlbnRyeV9wb2ludCI6ICJKZXRTdHJlYW0v
SmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwiLAorICAgICAgICAgICAgInJlc3VsdF93cmFwcGVy
IjogIk1lcmdlUmVzdWx0V3JhcHBlciIsCisgICAgICAgICAgICAib3V0cHV0X2ZpbGUiOiAiamV0
c3RyZWFtLnJlc3VsdCIKKyAgICAgICAgfQorICAgIF0KK30KK2BgYAorUGxhbiBpcyBhIGpzb24t
Zm9ybWF0dGVkIGRpY3Rpb25hcnkgd2hpY2ggY29udGFpbnMgZm9sbG93aW5nIGtleXMgCisqICoq
aHR0cF9zZXJ2ZXJfZHJpdmVyKio6ICgqKmNhc2Utc2Vuc2l0aXZlKiopIHRoZSBodHRwIHNlcnZl
ciBtb2R1bGUgeW91IHdhbnQgdG8gaG9zdCB0aGUgcmVzb3VyY2VzLiBDdXJyZW50IGF2YWlsYWJs
ZSBvcHRpb24gaXMgIlNpbXBsZUhUVFBTZXJ2ZXJIYW5kbGUiIHdoaWNoIGlzIGJhc2VkIG9uIHB5
dGhvbiB0d2lzdGVkIGZyYW1ld29yay4KKyogKipiZW5jaG1hcmtzKio6IGNvbnRhaW5zIGEgbGlz
dCBvZiBiZW5jaG1hcmtzIHlvdSB3YW50IHRvIHJ1biwgZWFjaCBiZW5jaG1hcmsgaXMgYSBsaXN0
IGNvbnRhaW5zIGZvbGxvd2luZyBrZXlzOgorICAgICogKip0aW1lb3V0Kio6IHRpbWUgbGltaXQg
Zm9yICoqRUFDSCBSVU4qKiBvZiB0aGUgYmVuY2htYXJrLiBUaGlzIGNhbiBhdm9pZCBwcm9ncmFt
IGdldHRpbmcgc3R1Y2sgaW4gdGhlIGV4dHJlbWUgY2lyY3Vtc3RhbmNlcy4gVGhlIHRpbWUgbGlt
aXQgaXMgc3VnZ2VzdGVkIHRvIGJlIDEuNS0yeCB0aGUgdGltZSBzcGVudCBpbiBhIG5vcm1hbCBy
dW4uCisgICAgKiAqKmNvdW50Kio6IHRoZSBudW1iZXIgb2YgdGltZXMgeW91IHdhbnQgdG8gcnVu
IGJlbmNobWFyaworICAgICogKipiZW5jaG1hcmtfYnVpbGRlcioqOiAgYnVpbGRlciBvZiB0aGUg
YmVuY2htYXJrIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBhcnJhbmdpbmcgYmVuY2htYXJrIGJl
Zm9yZSB0aGUgd2ViIHNlcnZlciBzZXJ2aW5nIHRoZSBkaXJlY3RvcnkuIEluIG1vc3QgY2FzZSwg
J0dlbmVyaWNCZW5jaG1hcmtIYW5kbGVyJyBpcyBzdWZmaWNpZW50LiBJdCBjb3BpZXMgdGhlIGJl
bmNobWFyayB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGFwcGxpZXMgcGF0Y2ggdG8gYmVu
Y2htYXJrLiBJZiB5b3UgaGF2ZSBzcGVjaWFsIHJlcXVpcmVtZW50LCB5b3UgY291bGQgZGVzaWdu
IHlvdXIgb3duIGJlbmNobWFyayBoYW5kbGUsIGp1c3QgbGlrZSB0aGUgJ0pldFN0cmVhbUJlbmNo
bWFya0hhbmRsZScgaW4gdGhpcyBleGFtcGxlLgorICAgICogKipvcmlnaW5hbF9iZW5jaG1hcmsq
KjogcGF0aCBvZiBiZW5jaG1hcmssIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGlz
IHByb2plY3QgKCdiZW5jaG1hcmtfcnVubmVyJyBkaXJlY3RvcnkpCisgICAgKiAqKmJlbmNobWFy
a19wYXRoKio6ICgqKk9QVElPTkFMKiopIHBhdGggb2YgcGF0Y2gsIGEgcmVsYXRpdmUgcGF0aCB0
byB0aGUgcm9vdCBvZiB0aGlzIHByb2plY3QgKCdiZW5jaG1hcmtfcnVubmVyJyBkaXJlY3Rvcnkp
CisgICAgKiAqKmVudHJ5X3BvaW50Kio6IHRoZSByZWxhdGl2ZSB1cmwgeW91IHdhbnQgYnJvd3Nl
ciB0byBsYXVuY2ggKGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgd2Vicm9vdCkKKyAgICAqICoqcmVz
dWx0X3dyYXBwZXIqKjogdGhlIHdyYXBwZXIgbW9kdWxlIHlvdSB3YW50IHRvIHdyYXAgdGhlIHJl
c3VsdHMuIEN1cnJlbnQgYXZhaWxibGUgb3B0aW9uIGlzICJNZXJnZVJlc3VsdFdyYXBwZXIiLiBU
byBjdXN0b21pemUgeW91ciBvd24gcmVzdWx0IHdyYXBwZXIsIGV4dGVuZHMgVXRpbGl0aWVzL1Jl
c3VsdFdyYXBwZXIvQmFzZVJlc3VsdFdyYXBwZXIucHkgYW5kIHJlZ2lzdGVyIHlvdXIgbW9kdWxl
IGluIFV0aWxpdGllcy9SZXN1bHRXcmFwcGVyL1Jlc3VsdFdyYXBwZXIuanNvbgorICAgICogKipv
dXRwdXRfZmlsZSoqOiBzcGVjaWZ5IHRoZSBvdXRwdXQgZmlsZQorCisjIyMgSG93IHRvIGltcG9y
dCBhIGJlbmNobWFyaworKiBNb2RpZnkgdGhlIGJlbmNobWFyayBodG1sIGZpbGUsIG1ha2Ugc3Vy
ZSB0aGUgcGFnZSBoYXMgZm9sbG93aW5nIGZ1bmN0aW9uYWxpdGllczoKKyAgICAqIFdoZW4geW91
IGxhdW5jaCB0aGUgcGFnZSgnZW50cnlfcG9pbnQnIGluIGJlbmNobWFyayksIHRoZSB0ZXN0IHdp
bGwgc3RhcnQgYXV0b21hdGljYWxseQorICAgICogT3JnYW5pemluZyB0aGUgcmVzdWx0cworICAg
ICogJ1BPU1QnIGluZm9ybWF0aW9uIHRvICcvcmVwb3J0JywgYW5kICdHRVQnICcvc2h1dGRvd24n
IHdoZW4gcG9zdCBzdWNjZWVkcy4gRXhhbXBsZToKKyAgICAqIGBgYGpzCisgICAgICB2YXIgeGhy
ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICB4aHIub3BlbigiUE9TVCIsICIvcmVwb3J0
Iik7CisgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBlIiwgImFwcGxpY2F0
aW9uL2pzb24iKTsKKyAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LWxlbmd0aCIs
IHJlc3VsdHMubGVuZ3RoKTsKKyAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb25uZWN0aW9u
IiwgImNsb3NlIik7CisgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7
CisgICAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIwMCkg
eworICAgICAgICAgICAgICB2YXIgY2xvc2VSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7
CisgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5vcGVuKCJHRVQiLCAnL3NodXRkb3duJyk7Cisg
ICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5zZW5kKCkKKyAgICAgICAgICB9CisgICAgICB9Cisg
ICAgICB4aHIuc2VuZChyZXN1bHRzKTsKK2BgYCAKKyogQ3JlYXRlIGEgcGF0Y2ggZmlsZSBhZ2Fp
bnN0IG9yaWdpbmFsIGZpbGUKKyAgICAqIEdvIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgdGhl
IGJlbmNobWFyayBkaXJlY3RvcnkgKGUuZy4gZm9yIEpldFN0cmVhbSwgeW91IHNob3VsZCBnbyB0
byBQZXJmb3JtYWNlVGVzdCBmb2xkZXIpCisgICAgKiBVc2UgYGBgZ2l0IGRpZmYgLS1yZWxhdGl2
ZSBIRUFEID4geW91ci5wYXRjaGBgYCB0byBjcmVhdGUgeW91ciBwYXRjaAorICAgICogKCoqU3Vn
Z2VzdGVkKiopIG1vdmUgdGhlIHBhdGNoIHRvIHRoZSAnUGF0Y2hlcycgZGlyZWN0b3J5IHVuZGVy
IHByb2plY3QgZGlyZWN0b3J5CisqIENyZWF0ZSBhIHBsYW4gZm9yIHRoZSBiZW5jaG1hcmsgKHJl
ZmVyIHRvICoqIkhvdyB0byBjcmVhdGUgYSBwbGFuIioqIGZvciBtb3JlIGRldGFpbHMpCisqIERv
IGZvbGxvd2luZyBpbnN0cnVjdGlvbiAqKk9OTFkgSUYgTkVFREVEKiouIEluIG1vc3QgY2FzZSwg
eW91IGRvIG5vdCBoYXZlIHRvLgorICAgICogSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIEJyb3dz
ZXJEcml2ZXIgZm9yIHNwZWNpZmljIGJyb3dzZXIvcGxhdGZvcm0sIHlvdSBuZWVkIHRvIGV4dGVu
ZCBicm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlci5weSBhbmQgcmVnaXN0ZXIgeW91ciBtb2R1
bGUgaW4gYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXJzanNvbi4KKyAgICAqIElmIHlvdSB3
YW50IHRvIGN1c3RvbWl6ZSBIVFRQU2VydmVyRHJpdmVyLCB5b3UgbmVlZCB0byBleHRlbmQgaHR0
cF9zZXJ2ZXJfZHJpcnZlci9odHRwX3NlcnZlcl9kcml2ZXIgYW5kIHJlZ2lzdGVyIHlvdXIgbW9k
dWxlIGluIGh0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJzLmpzb24uCisgICAg
KiBJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgUmVzdWx0V3JhcHBlciwgeW91IG5lZWQgdG8gZXh0
ZW5kIHJlc3VsdF93cmFwcGVyL2Jhc2VfcmVzdWx0X3dyYXBwZXIucHkgYW5kIHJlZ2lzdGVyIHlv
dXIgbW9kdWxlIGluIHJlc3VsdF93cmFwcGVyL3Jlc3VsdF93cmFwcGVycy5qc29uIAorICAgICog
SWYgeW91IHdhbnQgdG8gY3VzdG9taXplIEJlbmNobWFya0J1aWxkZXIsIHlvdSBuZWVkIHRvIGV4
dGVuZCBiZW5jaG1hcmtfYnVpbGRlci9nZW5lcmljX2JlbmNobWFya19idWlsZGVyIHJlZ2lzdGVy
IHlvdSBtb2R1bGUgaW4gYmVuY2htYXJrX2J1aWxkZXIvYmVuY2htYXJrX2J1aWxkZXJzLmpzb24K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9fX2lu
aXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9fX2luaXRf
Xy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1Mzkx
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVu
Y2htYXJrX2J1aWxkZXIvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNo
bWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5
ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2JlbmNo
bWFya19idWlsZGVyX2ZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFy
a19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvYmVuY2htYXJrX2J1aWxkZXJfZmFjdG9yeS5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wYWQwNDEwOTkzMzNlZjlkZTI0YzA2ZjVhOTg0YmQ1YWUyZTRlZTFjCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jl
bmNobWFya19idWlsZGVyL2JlbmNobWFya19idWlsZGVyX2ZhY3RvcnkucHkKQEAgLTAsMCArMSwy
MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQganNv
bgoraW1wb3J0IG9zCisKK2Zyb20gd2Via2l0cHkuYmVuY2htYXJrX3J1bm5lci5nZW5lcmljX2Zh
Y3RvcnkgaW1wb3J0IEdlbmVyaWNGYWN0b3J5CisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dn
ZXIoJ1BlcmZBdXRvcnVuJykKK2hhbmRsZUZpbGVOYW1lID0gJ2JlbmNobWFya19idWlsZGVycy5q
c29uJwordHJ5OgorICAgIGJ1aWxkZXJzID0ganNvbi5sb2FkKG9wZW4ob3MucGF0aC5qb2luKG9z
LnBhdGguZGlybmFtZShfX2ZpbGVfXyksIGhhbmRsZUZpbGVOYW1lKSwgJ3InKSkKK2V4Y2VwdDoK
KyAgICBsb2dnZXIud2FybignTG9hZGluZyAlcyBmYWlsZWQsIHN0YXJ0IHVzaW5nIHByZS1kZWZp
bmVkIGJ1aWxkZXJzJyAlIChoYW5kbGVGaWxlTmFtZSkpCisgICAgYnVpbGRlcnMgPSB7CisgICAg
ICAgICdHZW5lcmljQmVuY2htYXJrSGFuZGxlJzogeydmaWxlUGF0aCc6ICdiZW5jaG1hcmtfYnVp
bGRlci5nZW5lcmljX2JlbmNobWFya19idWlsZGVyJywgJ21vZHVsZU5hbWUnOiAnR2VuZXJpY0Jl
bmNobWFya0RyaXZlcid9LAorICAgICAgICAnSmV0U3RyZWFtQmVuY2htYXJrSGFuZGxlJzogeydm
aWxlUGF0aCc6ICdiZW5jaG1hcmtfYnVpbGRlci5qZXRzdHJlYW1fYmVuY2htYXJrX2J1aWxkZXIn
LCAnbW9kdWxlTmFtZSc6ICdKZXRTdHJlYW1CZW5jaG1hcmtEcml2ZXInfSwKKyAgICB9CisKK2Jl
bmNobWFya0J1aWxkZXJGYWN0b3J5ID0gR2VuZXJpY0ZhY3RvcnkoYnVpbGRlcnMpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1
aWxkZXIvYmVuY2htYXJrX2J1aWxkZXJzLmpzb24gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvYmVuY2htYXJrX2J1aWxkZXJzLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjhmYzkzMmU2ZTlkZTVhMTE0YWRmOGMwZTBhNTYwZGMzNWU0MTA1NgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9i
ZW5jaG1hcmtfYnVpbGRlci9iZW5jaG1hcmtfYnVpbGRlcnMuanNvbgpAQCAtMCwwICsxLDEwIEBA
Cit7CisgICAgIkdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyIjogeworICAgICAgICAiZmlsZVBhdGgi
OiAiYmVuY2htYXJrX2J1aWxkZXIuZ2VuZXJpY19iZW5jaG1hcmtfYnVpbGRlciIsCisgICAgICAg
ICJtb2R1bGVOYW1lIjogIkdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyIgorICAgIH0sCisgICAgIkpl
dFN0cmVhbUJlbmNobWFya0J1aWxkZXIiOiB7CisgICAgICAgICJmaWxlUGF0aCI6ICJiZW5jaG1h
cmtfYnVpbGRlci5qZXRzdHJlYW1fYmVuY2htYXJrX2J1aWxkZXIiLAorICAgICAgICAibW9kdWxl
TmFtZSI6ICJKZXRTdHJlYW1CZW5jaG1hcmtCdWlsZGVyIgorICAgIH0KK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRl
ci9nZW5lcmljX2JlbmNobWFya19idWlsZGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2dlbmVyaWNfYmVuY2htYXJrX2J1aWxk
ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTMyMzIxMDNlOTI1ZDE5MzQ1MTE1OWM5MDA4NmI5Yjc0ZmUzNDc2
ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9iZW5jaG1hcmtfYnVpbGRlci9nZW5lcmljX2JlbmNobWFya19idWlsZGVyLnB5CkBAIC0w
LDAgKzEsNDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgbG9nZ2luZworaW1w
b3J0IHRlbXBmaWxlCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNz
CisKK2Zyb20gd2Via2l0cHkuYmVuY2htYXJrX3J1bm5lci51dGlscyBpbXBvcnQgZ2V0UGF0aEZy
b21Qcm9qZWN0Um9vdAorCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1
bicpCisKKworY2xhc3MgR2VuZXJpY0JlbmNobWFya0J1aWxkZXIob2JqZWN0KToKKyAgICBkZWYg
cHJlcGFyZShzZWxmLCBiZW5jaG1hcmtQYXRoLCBwYXRjaCk6CisgICAgICAgIHNlbGYuX2NvcHlC
ZW5jaG1hcmtUb1RlbXBEaXIoYmVuY2htYXJrUGF0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Fw
cGx5UGF0Y2gocGF0Y2gpCisKKyAgICBkZWYgX2NvcHlCZW5jaG1hcmtUb1RlbXBEaXIoc2VsZiwg
YmVuY2htYXJrUGF0aCk6CisgICAgICAgIHNlbGYud2ViUm9vdCA9IHRlbXBmaWxlLm1rZHRlbXAo
KQorICAgICAgICBsb2dnZXIuZGVidWcoJ1NlcnZlcmluZyBhdCB3ZWJSb290OiAlcycgJSBzZWxm
LndlYlJvb3QpCisgICAgICAgIHNlbGYuZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLndlYlJvb3Qs
IG9zLnBhdGguc3BsaXQoYmVuY2htYXJrUGF0aClbMV0pCisgICAgICAgIHNodXRpbC5jb3B5dHJl
ZShnZXRQYXRoRnJvbVByb2plY3RSb290KGJlbmNobWFya1BhdGgpLCBzZWxmLmRlc3QpCisKKyAg
ICBkZWYgX2FwcGx5UGF0Y2goc2VsZiwgcGF0Y2gpOgorICAgICAgICBpZiBwYXRjaDoKKyAgICAg
ICAgICAgIG9sZFdvcmtpbmdEaXJlY3RvcnkgPSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgb3Mu
Y2hkaXIoc2VsZi53ZWJSb290KQorICAgICAgICAgICAgZXJyb3JDb2RlID0gc3VicHJvY2Vzcy5j
YWxsKFsncGF0Y2gnLCAnLXAxJywgJy1mJywgJy1pJywgZ2V0UGF0aEZyb21Qcm9qZWN0Um9vdChw
YXRjaCldKQorICAgICAgICAgICAgb3MuY2hkaXIob2xkV29ya2luZ0RpcmVjdG9yeSkKKyAgICAg
ICAgICAgIGlmIGVycm9yQ29kZSAhPSAwOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcign
Q2Fubm90IGFwcGx5IHBhdGNoLCB3aWxsIHNraXAgY3VycmVudCBiZW5jaG1hcmtQYXRoJykKKyAg
ICAgICAgICAgICAgICBzZWxmLmNsZWFuKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQor
ICAgICAgICByZXR1cm4gc2VsZi53ZWJSb290CisKKyAgICBkZWYgY2xlYW4oc2VsZik6CisgICAg
ICAgIGxvZ2dlci5pbmZvKCdDbGVhbm5pbmcgQmVuY2htYXJrJykKKyAgICAgICAgaWYgc2VsZi53
ZWJSb290OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLndlYlJvb3QpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1
aWxkZXIvamV0c3RyZWFtX2JlbmNobWFya19idWlsZGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2pldHN0cmVhbV9iZW5jaG1h
cmtfYnVpbGRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOWYxNzU3NzgwZWQ5Nzg0OWJhM2FjYjZmYjY3YjAz
MzdmM2ZmNDljCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5j
aG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2pldHN0cmVhbV9iZW5jaG1hcmtfYnVpbGRl
ci5weQpAQCAtMCwwICsxLDI2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSBnZW5lcmljX2JlbmNo
bWFya19idWlsZGVyIGltcG9ydCBHZW5lcmljQmVuY2htYXJrQnVpbGRlcgorCisKK2xvZ2dlciA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1bicpCisKKworY2xhc3MgSmV0U3RyZWFtQmVu
Y2htYXJrQnVpbGRlcihHZW5lcmljQmVuY2htYXJrQnVpbGRlcik6CisgICAgZGVmIHByZXBhcmUo
c2VsZiwgYmVuY2htYXJrUGF0aCwgcGF0Y2gpOgorICAgICAgICBzdXBlcihzZWxmLl9fY2xhc3Nf
Xywgc2VsZikuX2NvcHlCZW5jaG1hcmtUb1RlbXBEaXIoYmVuY2htYXJrUGF0aCkKKyAgICAgICAg
c2VsZi5fcnVuQ3JlYXRlU2NyaXB0KCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKHNlbGYuX19jbGFz
c19fLCBzZWxmKS5fYXBwbHlQYXRjaChwYXRjaCkKKworICAgIGRlZiBfcnVuQ3JlYXRlU2NyaXB0
KHNlbGYpOgorICAgICAgICBvbGRXb3JraW5nRGlyZWN0b3J5ID0gb3MuZ2V0Y3dkKCkKKyAgICAg
ICAgb3MuY2hkaXIoc2VsZi5kZXN0KQorICAgICAgICBsb2dnZXIuZGVidWcoc2VsZi5kZXN0KQor
ICAgICAgICBlcnJvckNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoWydydWJ5JywgJ2NyZWF0ZS5yYidd
KQorICAgICAgICBvcy5jaGRpcihvbGRXb3JraW5nRGlyZWN0b3J5KQorICAgICAgICBpZiBlcnJv
ckNvZGUgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignQ2Fubm90IGNyZWF0ZSBKZXRT
dHJlYW0gQmVuY2htYXJrJykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVu
Y2htYXJrX3J1bm5lci9iZW5jaG1hcmtfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19ydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWVmNGIy
NzhjYmJjMjRkOTkzMDM2NGMzM2FkZmUzM2IxMmEyMmM2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfcnVubmVyLnB5
CkBAIC0wLDAgKzEsODggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQganNvbgor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJw
cm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgb3MKKworZnJvbSBi
ZW5jaG1hcmtfYnVpbGRlci5iZW5jaG1hcmtfYnVpbGRlcl9mYWN0b3J5IGltcG9ydCBiZW5jaG1h
cmtCdWlsZGVyRmFjdG9yeQorZnJvbSBodHRwX3NlcnZlcl9kcml2ZXIuaHR0cF9zZXJ2ZXJfZHJp
dmVyX2ZhY3RvcnkgaW1wb3J0IEhUVFBTZXJ2ZXJEcml2ZXJGYWN0b3J5Citmcm9tIHJlc3VsdF93
cmFwcGVyLnJlc3VsdF93cmFwcGVyX2ZhY3RvcnkgaW1wb3J0IHJlc3VsdFdyYXBwZXJGYWN0b3J5
Citmcm9tIGJyb3dzZXJfZHJpdmVyLmJyb3dzZXJfZHJpdmVyX2ZhY3RvcnkgaW1wb3J0IGJyb3dz
ZXJEcml2ZXJGYWN0b3J5Citmcm9tIHV0aWxzIGltcG9ydCBsb2FkTW9kdWxlLCBnZXRQYXRoRnJv
bVByb2plY3RSb290Citmcm9tIHV0aWxzIGltcG9ydCB0aW1lb3V0CisKKworbG9nZ2VyID0gbG9n
Z2luZy5nZXRMb2dnZXIoJ1BlcmZBdXRvUnVuJykKKworCitjbGFzcyBCZW5jaG1hcmtSdW5uZXIo
b2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbGFuRmlsZSwgYnVpbGREaXIsIG91
dHB1dEZpbGUsIHBsYXRmb3JtLCBicm93c2VyKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0luaXRp
YWxpemluZyBiZW5jaG1hcmsgcnVubmluZycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdp
dGggb3BlbihwbGFuRmlsZSwgJ3InKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBzZWxmLnBsYW4g
PSBqc29uLmxvYWQoZnApCisgICAgICAgICAgICAgICAgc2VsZi5wbGF0Zm9ybURyaXZlciA9IGJy
b3dzZXJEcml2ZXJGYWN0b3J5LmNyZWF0ZShbcGxhdGZvcm0sIGJyb3dzZXJdKQorICAgICAgICAg
ICAgICAgIHNlbGYuaHR0cFNlcnZlckRyaXZlciA9IEhUVFBTZXJ2ZXJEcml2ZXJGYWN0b3J5LmNy
ZWF0ZShbc2VsZi5wbGFuWydodHRwX3NlcnZlcl9kcml2ZXInXV0pCisgICAgICAgICAgICAgICAg
c2VsZi5iZW5jaG1hcmtzID0gc2VsZi5wbGFuWydiZW5jaG1hcmtzJ10KKyAgICAgICAgICAgICAg
ICBzZWxmLmJ1aWxkRGlyID0gb3MucGF0aC5hYnNwYXRoKGJ1aWxkRGlyKQorICAgICAgICAgICAg
ICAgIHNlbGYub3V0cHV0RmlsZSA9IG91dHB1dEZpbGUgaWYgb3V0cHV0RmlsZSBlbHNlICdiZW5j
aG1hcmsucmVzdWx0JworICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGxvZ2dl
ci5lcnJvcignQ2FuIG5vdCBvcGVuIHBsYW4gZmlsZTogJXMnICUgcGxhbkZpbGUpCisgICAgICAg
IGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdQbGFuIGZpbGU6
JXMgbWF5IG5vdCBmb2xsb3cganNvbiBmb3JtYXQnICUgcGxhbkZpbGUpCisgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmKToKKyAgICAgICAg
bG9nZ2VyLmluZm8oJ1N0YXJ0IHRvIGV4ZWN1dGUgdGhlIHBsYW4nKQorICAgICAgICBmb3IgYmVu
Y2htYXJrIGluIHNlbGYuYmVuY2htYXJrczoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTdGFy
dCBhIG5ldyBiZW5jaG1hcmsnKQorICAgICAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgICAg
ICByZXN1bHRXcmFwcGVyID0gcmVzdWx0V3JhcHBlckZhY3RvcnkuY3JlYXRlKFtiZW5jaG1hcmtb
J3Jlc3VsdF93cmFwcGVyJ11dKQorICAgICAgICAgICAgYmVuY2htYXJrQnVpbGRlciA9IGJlbmNo
bWFya0J1aWxkZXJGYWN0b3J5LmNyZWF0ZShbYmVuY2htYXJrWydiZW5jaG1hcmtfYnVpbGRlcidd
XSkKKyAgICAgICAgICAgIHdlYlJvb3QgPSBiZW5jaG1hcmtCdWlsZGVyLnByZXBhcmUoYmVuY2ht
YXJrWydvcmlnaW5hbF9iZW5jaG1hcmsnXSwgYmVuY2htYXJrWydiZW5jaG1hcmtfcGF0Y2gnXSBp
ZiAnYmVuY2htYXJrX3BhdGNoJyBpbiBiZW5jaG1hcmsgZWxzZSBOb25lKQorICAgICAgICAgICAg
Zm9yIHggaW4geHJhbmdlKGludChiZW5jaG1hcmtbJ2NvdW50J10pKToKKyAgICAgICAgICAgICAg
ICBsb2dnZXIuaW5mbygnU3RhcnQgdGhlIGl0ZXJhdGlvbiAlZCBvZiBjdXJyZW50IGJlbmNobWFy
aycgJSAoeCArIDEpKQorICAgICAgICAgICAgICAgIHNlbGYuaHR0cFNlcnZlckRyaXZlci5zZXJ2
ZSh3ZWJSb290KQorICAgICAgICAgICAgICAgIHNlbGYucGxhdGZvcm1Ecml2ZXIucHJlcGFyZUVu
digpCisgICAgICAgICAgICAgICAgIyBXYWl0IGZvciBodHRwIHNlcnZlciB0byBsYXVuY2ggYW5k
IHBsYXRmb3JtIGhhbmRsZXIgdG8gY2xlYW4KKyAgICAgICAgICAgICAgICAjIHRoZSBlbnZpcm9u
bWVudC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIpCisgICAgICAgICAgICAgICAgc2Vs
Zi5wbGF0Zm9ybURyaXZlci5sYXVuY2hVcmwoc2VsZi5jb21wb3NlVXJsKHNlbGYuaHR0cFNlcnZl
ckRyaXZlci5iYXNlVXJsKCksIGJlbmNobWFya1snZW50cnlfcG9pbnQnXSksIHNlbGYuYnVpbGRE
aXIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIHRpbWVv
dXQoYmVuY2htYXJrWyd0aW1lb3V0J10pOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0ganNvbi5sb2FkcyhzZWxmLmh0dHBTZXJ2ZXJEcml2ZXIuZmV0Y2hSZXN1bHQoKSkKKyAgICAg
ICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGxhdGZvcm1Ecml2
ZXIuY2xvc2VCcm93c2VycygpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICAgICAgaWYgbGVuKHJlc3VsdCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5w
bGF0Zm9ybURyaXZlci5jbG9zZUJyb3dzZXJzKCkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2Vy
LmVycm9yKCdObyByZXN1bHQuIFNvbWV0aGluZyB3ZW50IHdyb25nJykKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpCisg
ICAgICAgICAgICAgICAgc2VsZi5wbGF0Zm9ybURyaXZlci5jbG9zZUJyb3dzZXJzKCkKKyAgICAg
ICAgICAgICAgICBsb2dnZXIuaW5mbygnRW5kIG9mICVkIGl0ZXJhdGlvbiBvZiBjdXJyZW50IGJl
bmNobWFyaycgJSAoeCArIDEpKQorICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdFdyYXBwZXIu
d3JhcChyZXN1bHRzKQorICAgICAgICAgICAgc2VsZi5kdW1wKHJlc3VsdHMsIGJlbmNobWFya1sn
b3V0cHV0X2ZpbGUnXSBpZiBiZW5jaG1hcmtbJ291dHB1dF9maWxlJ10gZWxzZSBzZWxmLm91dHB1
dEZpbGUpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICBiZW5jaG1hcmtC
dWlsZGVyLmNsZWFuKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjb21wb3NlVXJsKGNs
cywgYmFzZVVybCwgcmVsYXRpdmVQYXRoKToKKyAgICAgICAgcmV0dXJuICcvJy5qb2luKFtiYXNl
VXJsLCByZWxhdGl2ZVBhdGhdKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGR1bXAoY2xz
LCByZXN1bHRzLCBvdXRwdXRGaWxlKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0R1bXBwaW5nIHRo
ZSByZXN1bHRzIHRvIGZpbGUnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4o
b3V0cHV0RmlsZSwgJ3cnKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZShqc29uLmR1
bXBzKHJlc3VsdHMpKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGxvZ2dl
ci5pbmZvKCdDYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZTogJXMnICUgb3V0cHV0RmlsZSkKKyAgICAg
ICAgICAgIGxvZ2dlci5pbmZvKCdSZXN1bHRzIGFyZTpcbiAlcycsIGpzb24uZHVtcHMocmVzdWx0
cykpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
YnJvd3Nlcl9kcml2ZXIvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNo
bWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUy
OWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJp
dmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJf
ZHJpdmVyL2Jyb3dzZXJfZHJpdmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiZWYxNTA2ZmFmNjRhYTAxZjRl
NDExMzE4MzIwNDE4MmY1ODdlM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXIucHkK
QEAgLTAsMCArMSwxOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBhYmMKKwor
CitjbGFzcyBCcm93c2VyRHJpdmVyKG9iamVjdCk6CisKKyAgICBAYWJjLmFic3RyYWN0bWV0aG9k
CisgICAgZGVmIHByZXBhcmVFbnYoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBhYmMuYWJz
dHJhY3RtZXRob2QKKyAgICBkZWYgbGF1bmNoVXJsKHNlbGYsIHVybCwgYnJvd3NlckJ1aWxkUGF0
aD1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRl
ZiBjbG9zZUJyb3dzZXIoc2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2Ry
aXZlcl9mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVy
L2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyX2ZhY3RvcnkucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjEz
NjE1Y2UwNWU1YmU2NmZiOTg4ZmVhYmI2ZjFhMTA1OTNlZDZlNQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9i
cm93c2VyX2RyaXZlcl9mYWN0b3J5LnB5CkBAIC0wLDAgKzEsMjMgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworCitmcm9t
IHdlYmtpdHB5LmJlbmNobWFya19ydW5uZXIuZ2VuZXJpY19mYWN0b3J5IGltcG9ydCBHZW5lcmlj
RmFjdG9yeQorCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1bicpCitk
cml2ZXJGaWxlTmFtZSA9ICdicm93c2VyX2RyaXZlcnMuanNvbicKK3RyeToKKyAgICBkcml2ZXJz
ID0ganNvbi5sb2FkKG9wZW4ob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyks
IGRyaXZlckZpbGVOYW1lKSwgJ3InKSkKK2V4Y2VwdDoKKyAgICBsb2dnZXIud2FybignTG9hZGlu
ZyAlcyBmYWlsZWQsIHN0YXJ0IHVzaW5nIHByZS1kZWZpbmVkIGRyaXZlcnMnICUgKGRyaXZlckZp
bGVOYW1lKSkKKyAgICBkcml2ZXJzID0geworICAgICAgICAnb3N4JzogeworICAgICAgICAgICAg
J3NhZmFyaSc6IHsnbW9kdWxlTmFtZSc6ICdPU1hTYWZhcmlEcml2ZXInLCAnZmlsZVBhdGgnOiAn
YnJvd3Nlcl9kcml2ZXIub3N4X3NhZmFyaV9kcml2ZXInfSwKKyAgICAgICAgICAgICdjaHJvbWUn
OiB7J21vZHVsZU5hbWUnOiAnT1NYQ2hyb21lRHJpdmVyJywgJ2ZpbGVQYXRoJzogJ2Jyb3dzZXJf
ZHJpdmVyLm9zeF9jaHJvbWVfZHJpdmVyJ30sCisgICAgICAgIH0sCisgICAgfQorCiticm93c2Vy
RHJpdmVyRmFjdG9yeSA9IEdlbmVyaWNGYWN0b3J5KGRyaXZlcnMpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvYnJvd3Nl
cl9kcml2ZXJzLmpzb24gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
YnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThmZDEwYzVl
NTRlMTY5OGZiM2RiMDM0OGQzMjI4M2QwZjY2MGZjMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2Vy
X2RyaXZlcnMuanNvbgpAQCAtMCwwICsxLDEyIEBACit7CisgICAgIm9zeCI6IHsKKyAgICAgICAg
ImNocm9tZSI6IHsKKyAgICAgICAgICAgICJtb2R1bGVOYW1lIjogIk9TWENocm9tZURyaXZlciIs
IAorICAgICAgICAgICAgImZpbGVQYXRoIjogImJyb3dzZXJfZHJpdmVyLm9zeF9jaHJvbWVfZHJp
dmVyIgorICAgICAgICB9LCAKKyAgICAgICAgInNhZmFyaSI6IHsKKyAgICAgICAgICAgICJtb2R1
bGVOYW1lIjogIk9TWFNhZmFyaURyaXZlciIsIAorICAgICAgICAgICAgImZpbGVQYXRoIjogImJy
b3dzZXJfZHJpdmVyLm9zeF9zYWZhcmlfZHJpdmVyIgorICAgICAgICB9CisgICAgfQorfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJf
ZHJpdmVyL29zeF9jaHJvbWVfZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5j
aG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9jaHJvbWVfZHJpdmVyLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjIzMjQzZDQwNDU4NTI1MmM5ZTZhMWM4ZmFjNTc4ZDBhY2EzYTIxOTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9k
cml2ZXIvb3N4X2Nocm9tZV9kcml2ZXIucHkKQEAgLTAsMCArMSwzMiBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNz
CitpbXBvcnQgdGltZQorCisjIFdlIGFzc3VtZSB0aGF0IHRoaXMgaGFuZGxlIGNhbiBvbmx5IGJl
IHVzZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXMgT1NYCitmcm9tIEFwcEtpdCBpbXBvcnQgTlNSdW5u
aW5nQXBwbGljYXRpb24KK2Zyb20gYnJvd3Nlcl9kcml2ZXIgaW1wb3J0IEJyb3dzZXJEcml2ZXIK
KworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignUGVyZkF1dG9SdW4nKQorCisKK2NsYXNz
IE9TWENocm9tZURyaXZlcihCcm93c2VyRHJpdmVyKToKKyAgICBkZWYgcHJlcGFyZUVudihzZWxm
KToKKyAgICAgICAgc2VsZi5jbG9zZUJyb3dzZXJzKCkKKyAgICAgICAgc2VsZi5jaHJvbWVQcmVm
ZXJlbmNlcyA9IFtdCisKKyAgICBkZWYgbGF1bmNoVXJsKHNlbGYsIHVybCwgYnJvd3NlckJ1aWxk
UGF0aD1Ob25lKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0xhdW5jaGluZyBjaHJvbWU6ICVzIHdp
dGggdXJsOiAlcycgJSAob3MucGF0aC5qb2luKGJyb3dzZXJCdWlsZFBhdGgsICdHb29nbGUgQ2hy
b21lLmFwcCcpLCB1cmwpKQorICAgICAgICAjIG1heSBuZWVkIHRvIGJlIG1vZGlmaWVkIGZvciBk
ZXZlbG9wIGJ1aWxkLCBzdWNoIGFzIHNldHRpbmcgdXAKKyAgICAgICAgIyBsaWJyYXJpZXMKKyAg
ICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbJ29wZW4nLCAnLWEnLCBvcy5wYXRoLmpvaW4oYnJvd3Nl
ckJ1aWxkUGF0aCwgJy9Hb29nbGUgQ2hyb21lLmFwcCcpLCAnLS1hcmdzJywgJy0taG9tZXBhZ2Un
LCB1cmxdICsgc2VsZi5jaHJvbWVQcmVmZXJlbmNlcykuY29tbXVuaWNhdGUoKQorCisgICAgZGVm
IGNsb3NlQnJvd3NlcnMoc2VsZik6CisgICAgICAgIGxvZ2dlci5pbmZvKCdDbG9zaW5nIGFsbCBl
eGlzdGluZyBjaHJvbWUgcHJvY2Vzc2VzJykKKyAgICAgICAgY2hyb21lcyA9IE5TUnVubmluZ0Fw
cGxpY2F0aW9uLnJ1bm5pbmdBcHBsaWNhdGlvbnNXaXRoQnVuZGxlSWRlbnRpZmllcl8oJ2NvbS5n
b29nbGUuQ2hyb21lJykKKyAgICAgICAgZm9yIGNocm9tZSBpbiBjaHJvbWVzOgorICAgICAgICAg
ICAgY2hyb21lLnRlcm1pbmF0ZSgpCisgICAgICAgIHRpbWUuc2xlZXAoMikKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9v
c3hfc2FmYXJpX2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9icm93c2VyX2RyaXZlci9vc3hfc2FmYXJpX2RyaXZlci5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYjFh
YTBlODVhYzY5ZDA0OGM1N2RkMGUyZmQ3Y2UzNWUxYTgyNzljCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29z
eF9zYWZhcmlfZHJpdmVyLnB5CkBAIC0wLDAgKzEsMzYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0
IHRpbWUKKworIyBXZSBhc3N1bWUgdGhhdCB0aGlzIGhhbmRsZSBjYW4gb25seSBiZSB1c2VkIHdo
ZW4gdGhlIHBsYXRmb3JtIGlzIE9TWC4KK2Zyb20gQXBwS2l0IGltcG9ydCBOU1J1bm5pbmdBcHBs
aWNhdGlvbgorZnJvbSBicm93c2VyX2RyaXZlciBpbXBvcnQgQnJvd3NlckRyaXZlcgorCisKK2xv
Z2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1bicpCisKKworY2xhc3MgT1NYU2Fm
YXJpRHJpdmVyKEJyb3dzZXJEcml2ZXIpOgorCisgICAgZGVmIHByZXBhcmVFbnYoc2VsZik6Cisg
ICAgICAgIHNlbGYuY2xvc2VCcm93c2VycygpCisgICAgICAgIHNlbGYuc2FmYXJpUHJlZmVyZW5j
ZXMgPSBbIi1Ib21lUGFnZSIsICJhYm91dDpibGFuayIsICItV2FybkFib3V0RnJhdWR1bGVudFdl
YnNpdGVzIiwgIjAiLCAiLUV4dGVuc2lvbnNFbmFibGVkIiwgIjAiLCAiLVNob3dTdGF0dXNCYXIi
LCAiMCIsICItTmV3V2luZG93QmVoYXZpb3IiLCAiMSIsICItTmV3VGFiQmVoYXZpb3IiLCAiMSJd
CisKKyAgICBkZWYgbGF1bmNoVXJsKHNlbGYsIHVybCwgYnJvd3NlckJ1aWxkUGF0aD1Ob25lKToK
KyAgICAgICAgYXJncyA9IFtvcy5wYXRoLmpvaW4oYnJvd3NlckJ1aWxkUGF0aCwgJ1NhZmFyaS5h
cHAvQ29udGVudHMvTWFjT1MvU2FmYXJpJyldCisgICAgICAgIGFyZ3MuZXh0ZW5kKHNlbGYuc2Fm
YXJpUHJlZmVyZW5jZXMpCisgICAgICAgIGxvZ2dlci5pbmZvKCdMYXVuY2hpbmcgc2FmYXJpOiAl
cyB3aXRoIHVybDogJXMnICUgKGFyZ3NbMF0sIHVybCkpCisgICAgICAgIHN1YnByb2Nlc3MuUG9w
ZW4oYXJncywgZW52PXsnRFlMRF9GUkFNRVdPUktfUEFUSCc6IGJyb3dzZXJCdWlsZFBhdGgsICdE
WUxEX0xJQlJBUllfUEFUSCc6IGJyb3dzZXJCdWlsZFBhdGh9LCBzdGRpbj1zdWJwcm9jZXNzLlBJ
UEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAg
ICAgICMgU3RvcCBmb3IgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNhZmFyaSBwcm9jZXNzLCBvdGhl
cndpc2UsIG9wZW4KKyAgICAgICAgIyBjb21tYW5kIG1heSB1c2UgdGhlIHN5c3RlbSBzYWZhcmku
CisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbJ29wZW4n
LCB1cmxdKQorCisgICAgZGVmIGNsb3NlQnJvd3NlcnMoc2VsZik6CisgICAgICAgIGxvZ2dlci5p
bmZvKCdDbG9zaW5nIGFsbCBleGlzdGluZyBzYWZhcmkgcHJvY2Vzc2VzJykKKyAgICAgICAgc2Fm
YXJpSW5zdGFuY2VzID0gTlNSdW5uaW5nQXBwbGljYXRpb24ucnVubmluZ0FwcGxpY2F0aW9uc1dp
dGhCdW5kbGVJZGVudGlmaWVyXygnY29tLmFwcGxlLlNhZmFyaScpCisgICAgICAgIGZvciBzYWZh
cmlJbnN0YW5jZSBpbiBzYWZhcmlJbnN0YW5jZXM6CisgICAgICAgICAgICBzYWZhcmlJbnN0YW5j
ZS50ZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1h
cmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9KZXRTdHJlYW0ucGF0Y2ggYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL0pldFN0cmVhbS5wYXRjaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43ZTBlNTc1MzNhZGRmOWQ2MmEwYjRmYjZjN2MyMWIwNGJlNjc0MDllCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEv
cGF0Y2hlcy9KZXRTdHJlYW0ucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorZGlmZiAtLWdpdCBhL0pl
dFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvSmV0U3RyZWFtRHJpdmVyLmpzIGIvSmV0U3RyZWFtL0pl
dFN0cmVhbS0xLjAuMS9KZXRTdHJlYW1Ecml2ZXIuanMKK2luZGV4IDczZWU0MjAuLjYwZjU4N2Mg
MTAwNjQ0CistLS0gYS9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL0pldFN0cmVhbURyaXZlci5q
cworKysrIGIvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9KZXRTdHJlYW1Ecml2ZXIuanMKK0BA
IC00NDgsNiArNDQ4LDE0IEBAIHZhciBKZXRTdHJlYW0gPSAoZnVuY3Rpb24oKSB7CisgCisgICAg
ICAgICByZXR1cm4gcmF3UmVzdWx0czsKKyAgICAgfQorKyAgICAKKysgICAgZnVuY3Rpb24gY29t
cHV0ZVJlZmluZWRSZXN1bHRzKCl7CisrICAgICAgICB2YXIgcmVzdWx0cyA9IHt9OworKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiZW5jaG1hcmtzLmxlbmd0aDsgKytpKSB7CisrICAgICAg
ICAgICAgcmVzdWx0c1tiZW5jaG1hcmtzW2ldLm5hbWVdID0geyJtZXRyaWNzIiA6IHsiU2NvcmUi
IDogeyJjdXJyZW50IiA6IFtiZW5jaG1hcmtzW2ldLnRpbWVzXX19fTsKKysgICAgICAgIH0KKysg
ICAgICAgIHJldHVybiB7IkpldFN0cmVhbSI6IHsibWV0cmljcyIgOiB7IlNjb3JlIiA6IFsiR2Vv
bWV0cmljIl19LCAidGVzdHMiIDogcmVzdWx0c319OworKyAgICB9CisgCisgICAgIGZ1bmN0aW9u
IGVuZCgpCisgICAgIHsKK0BAIC00NTgsNiArNDY2LDIzIEBAIHZhciBKZXRTdHJlYW0gPSAoZnVu
Y3Rpb24oKSB7CisgICAgICAgICBpc1J1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgIGhhc0FscmVh
ZHlSdW4gPSB0cnVlOworICAgICAgICAgcHJlcGFyZVRvU3RhcnQoKTsKKysgICAgICAgIC8vIHN1
Ym1pdCByZXN1bHQgdG8gc2VydmVyCisrICAgICAgICByZXN1bHRzID0gSlNPTi5zdHJpbmdpZnko
Y29tcHV0ZVJlZmluZWRSZXN1bHRzKCkpOworKyAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRw
UmVxdWVzdCgpOworKyAgICAgICAgeGhyLm9wZW4oIlBPU1QiLCAiL3JlcG9ydCIpOworKyAgICAg
ICAKKysgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCAiYXBwbGlj
YXRpb24vanNvbiIpOworKyAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtbGVu
Z3RoIiwgcmVzdWx0cy5sZW5ndGgpOworKyAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNv
bm5lY3Rpb24iLCAiY2xvc2UiKTsKKysgCisrICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdl
ID0gZnVuY3Rpb24oKSB7CisrICAgICAgICBpZih4aHIucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVx
dWVzdC5ET05FICYmIHhoci5zdGF0dXMgPT0gMjAwKSB7CisrICAgICAgICAgICAgICAgIGNsb3Nl
UmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworKyAgICAgICAgICAgICAgICBjbG9zZVJl
cXVlc3Qub3BlbigiR0VUIiwgIi9zaHV0ZG93biIpOworKyAgICAgICAgICAgICAgICBjbG9zZVJl
cXVlc3Quc2VuZCgpCisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgeGhyLnNl
bmQocmVzdWx0cyk7CisgICAgIH0KKyAKKyAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpCitkaWZmIC0t
Z2l0IGEvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sIGIvSmV0U3RyZWFtL0pl
dFN0cmVhbS0xLjAuMS9pbmRleC5odG1sCitpbmRleCBlMjc1MzVjLi4wMDEwODdkIDEwMDY0NAor
LS0tIGEvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sCisrKysgYi9KZXRTdHJl
YW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwKK0BAIC0zNCw4ICszNCwxMCBAQAorICAgICB3
aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKCkgeyBhbGxJc0dvb2QgPSBmYWxzZTsgfQorIAorICAg
ICBmdW5jdGlvbiBpbml0aWFsaXplKCkgeworLSAgICAgICAgaWYgKGFsbElzR29vZCkKKysgICAg
ICAgIGlmIChhbGxJc0dvb2QpIHsKKyAgICAgICAgICAgICBKZXRTdHJlYW0uaW5pdGlhbGl6ZSgp
OworKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb24gPSAi
amF2YXNjcmlwdDpKZXRTdHJlYW0uc3RhcnQoKSJ9LCAzMDAwKTsKKysgICAgICAgIH0KKyAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9keSIpLmlu
bmVySFRNTCA9ICI8aDE+RVJST1I8L2gxPjxwPkVuY291bnRlcmVkIGVycm9ycyBkdXJpbmcgcGFn
ZSBsb2FkLiBSZWZ1c2luZyB0byBydW4gYSBwYXJ0aWFsIGJlbmNobWFyayBzdWl0ZS48L3A+IjsK
KyAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVu
bmVyL2RhdGEvcGF0Y2hlcy9TcGVlZG9tZXRlci5wYXRjaCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvU3BlZWRvbWV0ZXIucGF0Y2gKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzNiMGYzMmUxZWIzMjQ0YmMwMDQ0ODQ1MmI0ZjU3ZDA4MjkzMDU5ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3Bh
dGNoZXMvU3BlZWRvbWV0ZXIucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK2RpZmYgLS1naXQgYS9T
cGVlZG9tZXRlci9GdWxsLmh0bWwgYi9TcGVlZG9tZXRlci9GdWxsLmh0bWwKK2luZGV4IDQxOWI5
ZjIuLjBiMDRjNjkgMTAwNjQ0CistLS0gYS9TcGVlZG9tZXRlci9GdWxsLmh0bWwKKysrKyBiL1Nw
ZWVkb21ldGVyL0Z1bGwuaHRtbAorQEAgLTcsNyArNyw2IEBACisgICAgIDxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvbWFpbi5qcyIgZGVmZXI+PC9zY3JpcHQ+CisgICAgIDxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcyIgZGVmZXI+PC9zY3JpcHQ+CisgICAgIDxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvYmVuY2htYXJrLXJlcG9ydC5qcyIgZGVmZXI+PC9zY3JpcHQ+CistICAg
IDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvc3RhdGlzdGljcy5qcyIgZGVmZXI+PC9zY3JpcHQ+
CisgICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdHMuanMiIGRlZmVyPjwvc2NyaXB0Pgor
IDwvaGVhZD4KKyA8Ym9keT4KK2RpZmYgLS1naXQgYS9TcGVlZG9tZXRlci9yZXNvdXJjZXMvYmVu
Y2htYXJrLXJlcG9ydC5qcyBiL1NwZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcmVwb3J0
LmpzCitpbmRleCBjNGI0YzY0Li5jNDQ1M2NkIDEwMDY0NAorLS0tIGEvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL2JlbmNobWFyay1yZXBvcnQuanMKKysrKyBiL1NwZWVkb21ldGVyL3Jlc291cmNlcy9i
ZW5jaG1hcmstcmVwb3J0LmpzCitAQCAtMSwxNiArMSw5IEBACisgLy8gVGhpcyBmaWxlIGNhbiBi
ZSBjdXN0b21pemVkIHRvIHJlcG9ydCByZXN1bHRzIGFzIG5lZWRlZC4KKyAKKyAoZnVuY3Rpb24g
KCkgeworLSAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyICYmIGxvY2F0aW9uLnNlYXJjaCAhPSAn
P3dlYmtpdCcgJiYgbG9jYXRpb24uaGFzaCAhPSAnI3dlYmtpdCcpCistICAgICAgICByZXR1cm47
CistCisgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworIAorLSAgICB2YXIgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ3NjcmlwdCcpOworLSAgICBzY3JpcHRFbGVtZW50LnNyYyA9ICcuLi9yZXNvdXJj
ZXMvcnVubmVyLmpzJzsKKy0gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRFbGVt
ZW50KTsKKy0KKyAgICAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J3N0eWxlJyk7CisgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9ICdwcmUgeyBwYWRkaW5n
LXRvcDogNjAwcHg7IH0nOworICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxl
bWVudCk7CitAQCAtMzYsMTAgKzI5LDggQEAKKyAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5h
bWUsCisgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdG9yOiBhZ2dyZWdhdG9yfTsKKyAgICAg
ICAgICAgICB9CistICAgICAgICAgICAgUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZh
bHVlc0FzeW5jKGNyZWF0ZVRlc3QobnVsbCwgJ1RvdGFsJykpOworICAgICAgICAgfSwKKyAgICAg
ICAgIGRpZFJ1blN1aXRlczogZnVuY3Rpb24gKG1lYXN1cmVkVmFsdWVzKSB7CistICAgICAgICAg
ICAgUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMobWVhc3VyZWRWYWx1ZXMudG90YWwp
OworICAgICAgICAgICAgIHZhbHVlc0J5SXRlcmF0aW9uLnB1c2gobWVhc3VyZWRWYWx1ZXMudGVz
dHMpOworICAgICAgICAgfSwKKyAgICAgICAgIGRpZEZpbmlzaExhc3RJdGVyYXRpb246IGZ1bmN0
aW9uICgpIHsKK0BAIC01MiwxOSArNDMsMzAgQEAKKyAgICAgICAgICAgICAgICAgdmFsdWVzLnB1
c2godmFsdWUpOworICAgICAgICAgICAgICAgICB2YWx1ZXMuYWdncmVnYXRvciA9IGFnZ3JlZ2F0
b3I7CisgICAgICAgICAgICAgfQorLQorKyAgICAgICAgICAgIHZhciBkaWN0ID0ge30KKysgICAg
ICAgICAgICBmdW5jdGlvbiBhZGRUb0RpY3Rpb25hcnlWYWx1ZSh2YWx1ZSwgc3VpdGVOYW1lLCB0
ZXN0TmFtZSwgc3VidGVzdE5hbWUpIHsKKysgICAgICAgICAgICAgICAgZGljdFsiU3BlZWRvbWV0
ZXIiXSA9IGRpY3RbIlNwZWVkb21ldGVyIl0gfHwgeyAibWV0cmljcyIgOiB7ICJUaW1lIiA6IFsg
IlRvdGFsIiwgXSB9LCAidGVzdHMiIDoge319OworKyAgICAgICAgICAgICAgICBkaWN0WyJTcGVl
ZG9tZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV0gPSBkaWN0WyJTcGVlZG9tZXRlciJdWyJ0ZXN0
cyJdW3N1aXRlTmFtZV0gfHwgeyJtZXRyaWNzIiA6IHsgIlRpbWUiIDogWyAiVG90YWwiLCBdIH0s
ICJ0ZXN0cyIgOiB7fX07CisrICAgICAgICAgICAgICAgIGRpY3RbIlNwZWVkb21ldGVyIl1bInRl
c3RzIl1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV0gPSBkaWN0WyJTcGVlZG9tZXRlciJd
WyJ0ZXN0cyJdW3N1aXRlTmFtZV1bInRlc3RzIl1bdGVzdE5hbWVdIHx8IHsgIm1ldHJpY3MiIDog
eyAiVGltZSIgOiBbICJUb3RhbCIsIF0gfSwgInRlc3RzIiA6IHt9fTsKKysgICAgICAgICAgICAg
ICAgZGljdFsiU3BlZWRvbWV0ZXIiXVsidGVzdHMiXVtzdWl0ZU5hbWVdWyJ0ZXN0cyJdW3Rlc3RO
YW1lXVsidGVzdHMiXVtzdWJ0ZXN0TmFtZV0gPSBkaWN0WyJTcGVlZG9tZXRlciJdWyJ0ZXN0cyJd
W3N1aXRlTmFtZV1bInRlc3RzIl1bdGVzdE5hbWVdWyJ0ZXN0cyJdW3N1YnRlc3ROYW1lXSB8fCB7
ICJtZXRyaWNzIiA6IHsgIlRpbWUiIDogeyAiY3VycmVudCIgOiBbW11dIH0gfX07CisrICAgICAg
ICAgICAgICAgIGRpY3RbIlNwZWVkb21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXVsidGVzdHMi
XVt0ZXN0TmFtZV1bInRlc3RzIl1bc3VidGVzdE5hbWVdWyJtZXRyaWNzIl1bIlRpbWUiXVsiY3Vy
cmVudCJdWzBdLnB1c2godmFsdWUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICAKKyAg
ICAgICAgICAgICB2YWx1ZXNCeUl0ZXJhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChtZWFzdXJlZFZh
bHVlcykgeworICAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWl0ZU5hbWUgaW4gbWVhc3VyZWRW
YWx1ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgIHZhciBzdWl0ZSA9IG1lYXN1cmVkVmFsdWVz
W3N1aXRlTmFtZV07CisgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBz
dWl0ZS50ZXN0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0ID0gc3VpdGUu
dGVzdHNbdGVzdE5hbWVdOworLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHN1YnRl
c3ROYW1lIGluIHRlc3QudGVzdHMpCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
c3VidGVzdE5hbWUgaW4gdGVzdC50ZXN0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRUb01lYXN1cmVkVmFsdWUodGVzdC50ZXN0c1tzdWJ0ZXN0TmFtZV0sIHN1aXRlTmFtZSAr
ICcvJyArIHRlc3ROYW1lICsgJy8nICsgc3VidGVzdE5hbWUpOworKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRUb0RpY3Rpb25hcnlWYWx1ZSh0ZXN0LnRlc3RzW3N1YnRlc3ROYW1lXSwg
c3VpdGVOYW1lLCB0ZXN0TmFtZSwgc3VidGVzdE5hbWUpOworKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb01lYXN1cmVkVmFsdWUodGVzdC50
b3RhbCwgc3VpdGVOYW1lICsgJy8nICsgdGVzdE5hbWUsICdUb3RhbCcpOworICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgYWRkVG9NZWFzdXJlZFZhbHVlKHN1aXRl
LnRvdGFsLCBzdWl0ZU5hbWUsICdUb3RhbCcpOworICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgfSk7CisrICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBKU09OLnN0cmluZ2lmeShkaWN0
KTsKKyAKKyAgICAgICAgICAgICB2YXIgZnVsbE5hbWVzID0gbmV3IEFycmF5OworICAgICAgICAg
ICAgIGZvciAodmFyIGZ1bGxOYW1lIGluIG1lYXN1cmVkVmFsdWVzQnlGdWxsTmFtZSkKK0BAIC03
Miw4ICs3NCwyMiBAQAorIAorICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnVsbE5h
bWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBtZWFzdXJl
ZFZhbHVlc0J5RnVsbE5hbWVbZnVsbE5hbWVzW2ldXTsKKy0gICAgICAgICAgICAgICAgUGVyZlRl
c3RSdW5uZXIucmVwb3J0VmFsdWVzKGNyZWF0ZVRlc3QoZnVsbE5hbWVzW2ldLCB2YWx1ZXMuYWdn
cmVnYXRvciwgaSArIDEgPT0gZnVsbE5hbWVzLmxlbmd0aCksIHZhbHVlcyk7CisgICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKysgICAg
ICAgICAgICB4aHIub3BlbigiUE9TVCIsICIvcmVwb3J0Iik7CisrIAorKyAgICAgICAgICAgIHho
ci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOwor
KyAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIHJlc3Vs
dHMubGVuZ3RoKTsKKysgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29ubmVjdGlv
biIsICJjbG9zZSIpOworKyAKKysgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
ZnVuY3Rpb24oKSB7CisrICAgICAgICAgICAgICAgIGlmKHhoci5yZWFkeVN0YXRlID09IFhNTEh0
dHBSZXF1ZXN0LkRPTkUgJiYgeGhyLnN0YXR1cyA9PSAyMDApIHsKKysgICAgICAgICAgICAgICAg
ICAgIHZhciBjbG9zZVJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKysgICAgICAgICAg
ICAgICAgICAgIGNsb3NlUmVxdWVzdC5vcGVuKCJHRVQiLCAiL3NodXRkb3duIik7CisrICAgICAg
ICAgICAgICAgICAgICBjbG9zZVJlcXVlc3Quc2VuZCgpCisrICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgeGhyLnNlbmQocmVzdWx0cyk7CisgICAgICAgICB9
CisgICAgIH07CisgfSkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVu
Y2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL2pldHN0cmVhbS5wbGFuIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvamV0c3RyZWFtLnBsYW4KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGRlMTNmNmI0ZWU0MDdkYjEyMWU3ZmU4NTBiYzk0MGNiODM5MjJmNwotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3Bs
YW5zL2pldHN0cmVhbS5wbGFuCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAiaHR0cF9zZXJ2ZXJf
ZHJpdmVyIjogIlNpbXBsZUhUVFBTZXJ2ZXJEcml2ZXIiLCAKKyAgICAiYmVuY2htYXJrcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgInRpbWVvdXQiIDogNjAwLAorICAgICAgICAgICAgImNv
dW50IjogNSwKKyAgICAgICAgICAgICJiZW5jaG1hcmtfYnVpbGRlciI6ICJKZXRTdHJlYW1CZW5j
aG1hcmtCdWlsZGVyIiwKKyAgICAgICAgICAgICJvcmlnaW5hbF9iZW5jaG1hcmsiOiAiLi4vLi4v
Li4vLi4vUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0iLAorICAgICAgICAgICAgImJlbmNobWFy
a19wYXRjaCI6ICJkYXRhL3BhdGNoZXMvSmV0U3RyZWFtLnBhdGNoIiwKKyAgICAgICAgICAgICJl
bnRyeV9wb2ludCI6ICJKZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwiLAorICAg
ICAgICAgICAgInJlc3VsdF93cmFwcGVyIjogIk1lcmdlUmVzdWx0V3JhcHBlciIsCisgICAgICAg
ICAgICAib3V0cHV0X2ZpbGUiOiAiamV0c3RyZWFtLnJlc3VsdCIKKyAgICAgICAgfQorICAgIF0K
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9k
YXRhL3BsYW5zL3NwZWVkb21ldGVyLnBsYW4gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNo
bWFya19ydW5uZXIvZGF0YS9wbGFucy9zcGVlZG9tZXRlci5wbGFuCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5ZjA3
NmI4MzYyODYzZDVjMGJmMGRhZjQ0YjJkMGNkNmYwNmEwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9zcGVlZG9t
ZXRlci5wbGFuCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAiYmVuY2htYXJrcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImJlbmNobWFya19idWlsZGVyIjogIkdlbmVyaWNCZW5jaG1hcmtC
dWlsZGVyIiwKKyAgICAgICAgICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiZGF0YS9wYXRjaGVzL1Nw
ZWVkb21ldGVyLnBhdGNoIiwKKyAgICAgICAgICAgICJvcmlnaW5hbF9iZW5jaG1hcmsiOiAiLi4v
Li4vLi4vLi4vUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlciIsCisgICAgICAgICAgICAiY291
bnQiOiA1LAorICAgICAgICAgICAgImVudHJ5X3BvaW50IjogIlNwZWVkb21ldGVyL0Z1bGwuaHRt
bCIsCisgICAgICAgICAgICAib3V0cHV0X2ZpbGUiOiAic3BlZWRvbWV0ZXIucmVzdWx0IiwKKyAg
ICAgICAgICAgICJyZXN1bHRfd3JhcHBlciI6ICJNZXJnZVJlc3VsdFdyYXBwZXIiLAorICAgICAg
ICAgICAgInRpbWVvdXQiOiA2MDAKKyAgICAgICAgfQorICAgIF0sCisgICAgImh0dHBfc2VydmVy
X2RyaXZlciI6ICJTaW1wbGVIVFRQU2VydmVyRHJpdmVyIgorfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2dlbmVyaWNfZmFjdG9yeS5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9nZW5lcmljX2ZhY3RvcnkucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzJjMWM3ZTg1NjEzMGJjZmM3NGY3ZWRkZmZiNzYyZmU3NDdjNmQwMgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9n
ZW5lcmljX2ZhY3RvcnkucHkKQEAgLTAsMCArMSwzMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKKworZnJvbSB1dGlscyBpbXBvcnQgbG9hZE1v
ZHVsZSwgTW9kdWxlTm90Rm91bmRFcnJvcgorCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdQZXJmQXV0b1J1bicpCisKKworY2xhc3MgR2VuZXJpY0ZhY3Rvcnkob2JqZWN0KToKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGVzKToKKyAgICAgICAgc2VsZi5oYW5kbGVzID0gaGFu
ZGxlcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGl0ZXJhdGVHZXRJdGVtKGNscywgb3B0
aW9ucywga2V5cyk6CisgICAgICAgIHJldCA9IG9wdGlvbnMKKyAgICAgICAgZm9yIGtleSBpbiBr
ZXlzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldCA9IHJldC5fX2dldGl0
ZW1fXyhrZXkpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAg
cmFpc2UKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIGNyZWF0ZShzZWxmLCBkZXNjcmlw
dGlvbnMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gbG9hZE1vZHVsZShzZWxm
Lml0ZXJhdGVHZXRJdGVtKHNlbGYuaGFuZGxlcywgZGVzY3JpcHRpb25zKSkoKQorICAgICAgICBl
eGNlcHQ6CisgICAgICAgICAgICByYWlzZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9fX2luaXRfXy5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIv
X19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJl
NDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVu
bmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlci90d2lzdGVkX2h0dHBfc2VydmVyLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2Ry
aXZlci9odHRwX3NlcnZlci90d2lzdGVkX2h0dHBfc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkZjc1
ZjY1YWRhMzk3N2I5ZDUyZDFmNmQ3ZmNjOTY0OTQwOTAzZTkKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVy
L2h0dHBfc2VydmVyL3R3aXN0ZWRfaHR0cF9zZXJ2ZXIucHkKQEAgLTAsMCArMSwzMiBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisKK2Zyb20gdHdpc3RlZC53ZWIgaW1wb3J0IHN0YXRpYywgc2Vy
dmVyCitmcm9tIHR3aXN0ZWQud2ViLnJlc291cmNlIGltcG9ydCBSZXNvdXJjZQorZnJvbSB0d2lz
dGVkLmludGVybmV0IGltcG9ydCByZWFjdG9yCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBzeXMK
KworCitjbGFzcyBTZXJ2ZXJDb250cm9sKFJlc291cmNlKToKKyAgICBpc0xlYWYgPSBUcnVlCisK
KyAgICBkZWYgcmVuZGVyX0dFVChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgcmVhY3Rvci5zdG9w
KCkKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgcmVuZGVyX1BPU1Qoc2VsZiwgcmVxdWVz
dCk6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocmVxdWVzdC5jb250ZW50LmdldHZhbHVlKCkp
CisgICAgICAgIHJldHVybiAnT0snCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAg
ICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgICAgICAgZGVzY3JpcHRpb249
J3B5dGhvbiBUd2lzdGVkSFRUUFNlcnZlci5weSB3ZWJyb290JykKKyAgICBwYXJzZXIuYWRkX2Fy
Z3VtZW50KCd3ZWJyb290JykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIHdl
YnJvb3QgPSBzdGF0aWMuRmlsZShhcmdzLndlYnJvb3QpCisgICAgc2VydmVyQ29udHJvbCA9IFNl
cnZlckNvbnRyb2woKQorICAgIHdlYnJvb3QucHV0Q2hpbGQoJ3NodXRkb3duJywgc2VydmVyQ29u
dHJvbCkKKyAgICB3ZWJyb290LnB1dENoaWxkKCdyZXBvcnQnLCBzZXJ2ZXJDb250cm9sKQorICAg
IHJlYWN0b3IubGlzdGVuVENQKDAsIHNlcnZlci5TaXRlKHdlYnJvb3QpKQorICAgIHJlYWN0b3Iu
cnVuKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZl
cl9kcml2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RkY2ZkMTA2MTAwNGRhODc5OGI5N2U3ZDM0YmI0MzQ5
Zjc4YTRhMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2ht
YXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyLnB5CkBAIC0w
LDAgKzEsMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitmcm9tIGFiYyBpbXBvcnQgYWJz
dHJhY3RtZXRob2QKKworCitjbGFzcyBIVFRQU2VydmVyRHJpdmVyKG9iamVjdCk6CisgICAgQGFi
c3RyYWN0bWV0aG9kCisgICAgZGVmIHNlcnZlKHNlbGYsIHdlYlJvb3QpOgorICAgICAgICBwYXNz
CisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgZmV0Y2hSZXN1bHQoc2VsZik6CisgICAg
ICAgIHJldHVybiAnZmFrZSByZXN1bHQnCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyX2RyaXZl
cl9mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0
dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJfZmFjdG9yeS5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43NTk0MWUyZjZkODlmYTJhZDFjNTIxY2RlMTUzMDM1MTliZWUzNGZiCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVy
X2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJfZmFjdG9yeS5weQpAQCAtMCwwICsxLDIwIEBACisj
IS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBqc29uCitpbXBv
cnQgb3MKKworZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLmdlbmVyaWNfZmFjdG9yeSBp
bXBvcnQgR2VuZXJpY0ZhY3RvcnkKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignUGVy
ZkF1dG9SdW4nKQoraGFuZGxlRmlsZU5hbWUgPSAnaHR0cF9zZXJ2ZXJfZHJpdmVycy5qc29uJwor
dHJ5OgorICAgIGRyaXZlcnMgPSBqc29uLmxvYWQob3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5k
aXJuYW1lKF9fZmlsZV9fKSwgaGFuZGxlRmlsZU5hbWUpLCAncicpKQorZXhjZXB0OgorICAgIGxv
Z2dlci53YXJuKCdMb2FkaW5nICVzIGZhaWxlZCwgc3RhcnQgdXNpbmcgcHJlLWRlZmluZWQgaGFu
ZGxlcycgJSAoaGFuZGxlRmlsZU5hbWUpKQorICAgIGRyaXZlcnMgPSB7CisgICAgICAgICdTaW1w
bGVIVFRQU2VydmVyRHJpdmVyJzogeydmaWxlUGF0aCc6ICdodHRwX3NlcnZlcl9kcml2ZXIuc2lt
cGxlX2h0dHBfc2VydmVyX2RyaXZlcicsICdtb2R1bGVOYW1lJzogJ1NpbXBsZUhUVFBIYW5kbGUn
fSwKKyAgICB9CisKK0hUVFBTZXJ2ZXJEcml2ZXJGYWN0b3J5ID0gR2VuZXJpY0ZhY3RvcnkoZHJp
dmVycykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVycy5qc29uIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3Nl
cnZlcl9kcml2ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJiM2JjZGNiNjlkNGU1NTMxYzQ5OWVkOWE2
N2U4M2QyYTc3Mjk4OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
YmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVycy5q
c29uCkBAIC0wLDAgKzEsNiBAQAoreworICAiU2ltcGxlSFRUUFNlcnZlckRyaXZlciI6IHsKKyAg
ICAibW9kdWxlTmFtZSI6ICJTaW1wbGVIVFRQU2VydmVyRHJpdmVyIiwgCisgICAgImZpbGVQYXRo
IjogImh0dHBfc2VydmVyX2RyaXZlci5zaW1wbGVfaHR0cF9zZXJ2ZXJfZHJpdmVyIgorICB9Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0
cF9zZXJ2ZXJfZHJpdmVyL3NpbXBsZV9odHRwX3NlcnZlcl9kcml2ZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL3NpbXBsZV9o
dHRwX3NlcnZlcl9kcml2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU3MDQ3MDY1OTliMmI3ZGM1YTY0OGFl
MzA1NTM4ZjQyN2FkMzg1YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvc2ltcGxlX2h0dHBfc2VydmVy
X2RyaXZlci5weQpAQCAtMCwwICsxLDEwNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAoraW1wb3J0
IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCisKK2Zyb20gaHR0cF9zZXJ2ZXJfZHJpdmVyIGltcG9y
dCBIVFRQU2VydmVyRHJpdmVyCisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1BlcmZB
dXRvUnVuJykKKworCitjbGFzcyBTaW1wbGVIVFRQU2VydmVyRHJpdmVyKEhUVFBTZXJ2ZXJEcml2
ZXIpOgorCisgICAgIiIiVGhpcyBjbGFzcyBkZXBlbmRzIG9uIHVuaXggZW52aXJvbm1lbnQsIG5l
ZWQgdG8gYmUgbW9kaWZpZWQgdG8gYWNoaWV2ZSBjcm9zc3BsYXRmb3JtIGNvbXBhYmlsaXR5Cisg
ICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyUHJv
Y2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2ZXJQb3J0ID0gMAorICAgICAgICAjIEZJWE1F
OiB0aGlzIG1heSBub3QgYmUgcmVsaWFibGUuCisgICAgICAgIGxvZ2dlci5pbmZvKCdGaW5kaW5n
IHRoZSBJUCBhZGRyZXNzIG9mIGN1cnJlbnQgbWFjaGluZScpCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHNlbGYuaXAgPSBbCisgICAgICAgICAgICAgICAgaXAgZm9yIGlwIGluIHNvY2tldC5n
ZXRob3N0YnluYW1lX2V4KAorICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZ2V0aG9zdG5hbWUo
KSlbMl0gaWYgbm90IGlwLnN0YXJ0c3dpdGgoIjEyNy4iKV1bMF0KKyAgICAgICAgICAgIGxvZ2dl
ci5pbmZvKCdJUCBvZiBjdXJyZW50IG1hY2hpbmUgaXM6ICVzJyAlIHNlbGYuaXApCisgICAgICAg
IGV4Y2VwdDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignQ2Fubm90IGdldCB0aGUgaXAgYWRk
cmVzcyBvZiBjdXJyZW50IG1hY2hpbmUnKQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBz
ZXJ2ZShzZWxmLCB3ZWJyb290KToKKyAgICAgICAgb2xkV29ya2luZ0RpcmVjdG9yeSA9IG9zLmdl
dGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgo
X19maWxlX18pKSkKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0xhdWNobmluZyBhbiBodHRwIHNlcnZl
cicpCisgICAgICAgIHNlbGYuc2VydmVyUHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAg
ICAgICAgICBbCisgICAgICAgICAgICAgICAgJy91c3IvYmluL3B5dGhvbicsCisgICAgICAgICAg
ICAgICAgJ2h0dHBfc2VydmVyL3R3aXN0ZWRfaHR0cF9zZXJ2ZXIucHknLAorICAgICAgICAgICAg
ICAgIHdlYnJvb3RdLAorICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAg
ICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9j
ZXNzLlBJUEUpCisgICAgICAgIG9zLmNoZGlyKG9sZFdvcmtpbmdEaXJlY3RvcnkpCisgICAgICAg
IG1heEF0dGVtcHQgPSA1CisgICAgICAgIGludGVydmFsID0gMC41CisgICAgICAgIGxvZ2dlci5p
bmZvKCdTdGFydCB0byBmZXRjaGluZyB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIGh0dHAgc2VydmVy
JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHBzdXRpbAorICAgICAgICAgICAg
Zm9yIGF0dGVtcHQgaW4geHJhbmdlKG1heEF0dGVtcHQpOgorICAgICAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJQb3J0ID0gcHN1dGlsLlByb2Nlc3MoCisg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlclByb2Nlc3MucGlkKS5jb25uZWN0aW9u
cygpWzBdWzNdWzFdCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyUG9ydDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdIVFRQIFNlcnZlciBpcyBzZXJ2aW5nIGF0IHBvcnQ6ICVkJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlclBvcnQpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAg
ICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oCisgICAgICAgICAgICAg
ICAgICAgICdTZXJ2ZXIgcG9ydCBpcyBub3QgZm91bmQgdGhpcyB0aW1lLCByZXRyeSBhZnRlciAl
ZiBzZWNvbmRzJyAlCisgICAgICAgICAgICAgICAgICAgIGludGVydmFsKQorICAgICAgICAgICAg
ICAgIHRpbWUuc2xlZXAoaW50ZXJ2YWwpCisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgKj0gMgor
ICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgZm9yIGF0dGVtcHQgaW4geHJhbmdlKG1heEF0dGVtcHQpOgorICAgICAgICAgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbign
ICcuam9pbihbJy91c3Ivc2Jpbi9sc29mJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnLWEnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctaVRDUCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1zVENQOkxJU1RFTicsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1w
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHIoc2VsZi5zZXJ2ZXJQcm9jZXNzLnBpZCldKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQ
RSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyUG9ydCA9IGludCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZS5maW5kYWxsKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnVENQIFwqOihcZCspIFwoTElTVEVOXCknLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwLmNvbW11bmljYXRlKClbMF0pWzBdKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgc2VsZi5zZXJ2ZXJQb3J0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z2dlci5pbmZvKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFRUUCBTZXJ2ZXIg
aXMgc2VydmluZyBhdCBwb3J0OiAlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuc2VydmVyUG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAg
ICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKAor
ICAgICAgICAgICAgICAgICAgICAgICAgJ1NlcnZlciBwb3J0IGlzIG5vdCBmb3VuZCB0aGlzIHRp
bWUsIHJldHJ5IGFmdGVyICVmIHNlY29uZHMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
dGVydmFsKQorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKGludGVydmFsKQorICAgICAg
ICAgICAgICAgICAgICBpbnRlcnZhbCAqPSAyCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAg
ICAgICAgICAgcmFpc2UKKworICAgIGRlZiBiYXNlVXJsKHNlbGYpOgorICAgICAgICByZXR1cm4g
Imh0dHA6Ly8lczolZCIgJSAoc2VsZi5pcCwgc2VsZi5zZXJ2ZXJQb3J0KQorCisgICAgZGVmIGZl
dGNoUmVzdWx0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXJQcm9jZXNzLmNvbW11
bmljYXRlKClbMF0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci9yZXN1bHRfd3JhcHBlci9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9fX2luaXRfXy5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dyYXBwZXIvYmFz
ZV9yZXN1bHRfd3JhcHBlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9yZXN1bHRfd3JhcHBlci9iYXNlX3Jlc3VsdF93cmFwcGVyLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVh
NDg2MDgwMWJjNDMzMjk4ZmY4MzgzYTEzMjcyYWE3MWEyY2M0MzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dyYXBwZXIv
YmFzZV9yZXN1bHRfd3JhcHBlci5weQpAQCAtMCwwICsxLDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorCitmcm9tIGFiYyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKKworCitjbGFzcyBCYXNlUmVz
dWx0V3JhcHBlcihvYmplY3QpOgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB3cmFwKHNl
bGYsIHJlc3VsdHMpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dyYXBwZXIvbWVyZ2VfcmVzdWx0X3dyYXBw
ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dy
YXBwZXIvbWVyZ2VfcmVzdWx0X3dyYXBwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVhYmUxYjk2NDA2YjUy
YjBjZDkyN2YwOTgzMGM3Mzg4NTQ5NmViMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9tZXJnZV9yZXN1bHRf
d3JhcHBlci5weQpAQCAtMCwwICsxLDM3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworZnJv
bSBiYXNlX3Jlc3VsdF93cmFwcGVyIGltcG9ydCBCYXNlUmVzdWx0V3JhcHBlcgoraW1wb3J0IHR5
cGVzCisKKworY2xhc3MgRGljdGlvbmFyeU1lcmdlcihCYXNlUmVzdWx0V3JhcHBlcik6CisgICAg
ZGVmIHdyYXAoc2VsZiwgZGljdHMpOgorICAgICAgICBpZiBsZW4oZGljdHMpID09IDA6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXQgPSB7fQorICAgICAgICBmb3IgZGljIGlu
IGRpY3RzOgorICAgICAgICAgICAgcmV0ID0gc2VsZi5tZXJnZShyZXQsIGRpYykKKyAgICAgICAg
cmV0dXJuIHJldAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1lcmdlKGNscywgYSwgYik6
CisgICAgICAgIGFzc2VydChpc2luc3RhbmNlKGEsIHR5cGUoYikpKQorICAgICAgICBhcmdUeXBl
ID0gdHlwZShhKQorICAgICAgICAjIHNwZWNpYWwgaGFuZGxlIGZvciBsaXN0IHR5cGUsIGFuZCBz
aG91bGQgYmUgaGFuZGxlIGJlZm9yZSBlcXVhbCBjaGVjaworICAgICAgICBpZiBhcmdUeXBlID09
IHR5cGVzLkxpc3RUeXBlOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAgIGlmIGEg
PT0gYjoKKyAgICAgICAgICAgIHJldHVybiBhCisgICAgICAgIGlmIGFyZ1R5cGUgPT0gdHlwZXMu
RGljdFR5cGU6CisgICAgICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICAgICAgZm9yIGtleSwg
dmFsdWUgaW4gYS5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBiOgorICAgICAg
ICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGNscy5tZXJnZSh2YWx1ZSwgYltrZXldKQorICAg
ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFs
dWUKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGIuaXRlbXMoKToKKyAgICAgICAgICAg
ICAgICBpZiBrZXkgbm90IGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tl
eV0gPSB2YWx1ZQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAjIGZvciBvdGhl
ciB0eXBlcworICAgICAgICByZXR1cm4gYSArIGIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9yZXN1bHRfd3JhcHBlcl9m
YWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3Jlc3Vs
dF93cmFwcGVyL3Jlc3VsdF93cmFwcGVyX2ZhY3RvcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhjOGUxOTVl
OWMyYWYzYjBjN2RmZmVjMzQ5ZTM1ZWFlYzNlNjI5MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9yZXN1bHRf
d3JhcHBlcl9mYWN0b3J5LnB5CkBAIC0wLDAgKzEsMjAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworCitmcm9tIHdlYmtp
dHB5LmJlbmNobWFya19ydW5uZXIuZ2VuZXJpY19mYWN0b3J5IGltcG9ydCBHZW5lcmljRmFjdG9y
eQorCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1bicpCit3cmFwcGVy
RmlsZU5hbWUgPSAncmVzdWx0X3dyYXBwZXJzLmpzb24nCit0cnk6CisgICAgd3JhcHBlcnMgPSBq
c29uLmxvYWQob3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgd3Jh
cHBlckZpbGVOYW1lKSwgJ3InKSkKK2V4Y2VwdDoKKyAgICBsb2dnZXIud2FybignTG9hZGluZyAl
cyBmYWlsZWQsIHN0YXJ0IHVzaW5nIHByZS1kZWZpbmVkIHdyYXBwZXInICUgKHdyYXBwZXJGaWxl
TmFtZSkpCisgICAgd3JhcHBlcnMgPSB7CisgICAgICAgICdNZXJnZVJlc3VsdFdyYXBwZXInOiB7
J2ZpbGVQYXRoJzogJ1Jlc3VsdFdyYXBwZXIuTWVyZ2VSZXN1bHRXcmFwcGVyJywgJ21vZHVsZU5h
bWUnOiAnRGljdGlvbmFyeU1lcmdlcid9LAorICAgIH0KKworcmVzdWx0V3JhcHBlckZhY3Rvcnkg
PSBHZW5lcmljRmFjdG9yeSh3cmFwcGVycykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9yZXN1bHRfd3JhcHBlcnMuanNv
biBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBl
ci9yZXN1bHRfd3JhcHBlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODgwYzEyYTg0NmQ1NjBiZjJhMDQy
Nzk5MzZiNmQ2ZDg1NmFmMzY5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL3Jlc3VsdF93cmFwcGVyL3Jlc3VsdF93cmFwcGVycy5qc29u
CkBAIC0wLDAgKzEsNiBAQAoreworICAiTWVyZ2VSZXN1bHRXcmFwcGVyIjogeworICAgICJtb2R1
bGVOYW1lIjogIkRpY3Rpb25hcnlNZXJnZXIiLCAKKyAgICAiZmlsZVBhdGgiOiAicmVzdWx0X3dy
YXBwZXIubWVyZ2VfcmVzdWx0X3dyYXBwZXIiCisgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci91dGlscy5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzA4MDQ2NzRj
MDdhOTY1MmJlOWU4YTkxOTFhNTcwZDIyODkzZTAzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3V0aWxzLnB5CkBAIC0wLDAgKzEsNTEg
QEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2lt
cG9ydCBsb2dnaW5nCisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1BlcmZBdXRvUnVu
JykKKworCitjbGFzcyBNb2R1bGVOb3RGb3VuZEVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcwor
CisKK2RlZiBsb2FkTW9kdWxlKG1vZHVsZURlc2MpOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0g
Z2V0YXR0cihfX2ltcG9ydF9fKG1vZHVsZURlc2NbJ2ZpbGVQYXRoJ10sIGdsb2JhbHMoKSwgbG9j
YWxzKCksIG1vZHVsZURlc2NbJ21vZHVsZU5hbWUnXSwgLTEpLCBtb2R1bGVEZXNjWydtb2R1bGVO
YW1lJ10pCisgICAgICAgIHJldHVybiByZXQKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Cisg
ICAgICAgIHJhaXNlCisgICAgICAgIHJhaXNlIE1vZHVsZU5vdEZvdW5kRXJyb3IoJ01vZHVsZSAo
JXMpIHdpdGggcGF0aCglcykgaXMgbm90IGZvdW5kJyAlIChtb2R1bGVEZXNjWydtb2R1bGVOYW1l
J10sIG1vZHVsZURlc2NbJ2ZpbGVQYXRoJ10pKQorCisKK2RlZiBnZXRQYXRoRnJvbVByb2plY3RS
b290KHJlbGF0aXZlUGF0aFRvUHJvamVjdFJvb3QpOgorICAgICMgQ2hvb3NlIHRoZSBkaXJlY3Rv
cnkgY29udGFpbm5pbmcgY3VycmVudCBmaWxlIGFzIHN0YXJ0IHBvaW50LAorICAgICMgY29tcHV0
ZSByZWxhdGl2ZSBwYXRoIGJhc2Ugb24gdGhlIHBhcmFtZXRlciwKKyAgICAjIGFuZCByZXR1cm4g
YW4gYWJzb2x1dGUgcGF0aAorICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2lu
KG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgcmVsYXRpdmVQYXRo
VG9Qcm9qZWN0Um9vdCkpCisKKworIyBCb3Jyb3cgdGhpcyBjb2RlIGZyb20KKyMgJ2h0dHA6Ly9z
dGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjI4MTg1MC90aW1lb3V0LWZ1bmN0aW9uLWlmLWl0
LXRha2VzLXRvby1sb25nLXRvLWZpbmlzaCcKK2NsYXNzIFRpbWVvdXRFcnJvcihFeGNlcHRpb24p
OgorICAgIHBhc3MKKworCitjbGFzcyB0aW1lb3V0OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHNlY29uZHM9MSwgZXJyb3JfbWVzc2FnZT0nVGltZW91dCcpOgorICAgICAgICBzZWxmLnNlY29u
ZHMgPSBzZWNvbmRzCisgICAgICAgIHNlbGYuZXJyb3JfbWVzc2FnZSA9IGVycm9yX21lc3NhZ2UK
KworICAgIGRlZiBoYW5kbGVfdGltZW91dChzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAg
cmFpc2UgVGltZW91dEVycm9yKHNlbGYuZXJyb3JfbWVzc2FnZSkKKworICAgIGRlZiBfX2VudGVy
X18oc2VsZik6CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHNlbGYuaGFu
ZGxlX3RpbWVvdXQpCisgICAgICAgIHNpZ25hbC5hbGFybShzZWxmLnNlY29uZHMpCisKKyAgICBk
ZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIHNpZ25h
bC5hbGFybSgwKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251599</attachid>
            <date>2015-04-24 17:28:03 -0700</date>
            <delta_ts>2015-04-24 23:38:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144038-20150424172657.patch</filename>
            <type>text/plain</type>
            <size>53281</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMTM2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGMzYTBlZTY0MjZkMjllN2Y0YjU4Y2Y2NDMxMzRhYjJj
NmY1MzJhZS4uYmU2YjUwYTAwMDNiMjI1ZGNiOWZjYjcwN2U5ODg0ZjIzYWMzN2FmNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEw
MiBAQAorMjAxNS0wNC0yNCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1QGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgUGVyZkF1dG9SdW4gdG8gYXV0b21hdGUgYnJvd3NlciBiYXNlZCBwZXJmb3JtYW5j
ZSBiZW5jaG1hcmtzKGUuZy4gU3BlZWRvbWV0ZXIgYW5kIEpldFN0cmVhbSkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDAzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IFJ5b3N1a2UgTml3YQorCisgICAgICAgICogU2NyaXB0cy9ydW4tYmVuY2htYXJr
OiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVu
Y2htYXJrX3J1bm5lci9SRUFETUUubWQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvYmVuY2htYXJrX3J1bm5lci9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL19faW5pdF9fLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVu
Y2htYXJrX2J1aWxkZXIvYmVuY2htYXJrX2J1aWxkZXJfZmFjdG9yeS5weTogQWRkZWQuCisgICAg
ICAgIChCZW5jaG1hcmtCdWlsZGVyRmFjdG9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2JlbmNobWFya19idWlsZGVycy5q
c29uOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
YmVuY2htYXJrX2J1aWxkZXIvZ2VuZXJpY19iZW5jaG1hcmtfYnVpbGRlci5weTogQWRkZWQuCisg
ICAgICAgIChHZW5lcmljQmVuY2htYXJrQnVpbGRlcik6CisgICAgICAgIChHZW5lcmljQmVuY2ht
YXJrQnVpbGRlci5wcmVwYXJlKToKKyAgICAgICAgKEdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyLl9j
b3B5QmVuY2htYXJrVG9UZW1wRGlyKToKKyAgICAgICAgKEdlbmVyaWNCZW5jaG1hcmtCdWlsZGVy
Ll9hcHBseVBhdGNoKToKKyAgICAgICAgKEdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyLmNsZWFuKToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1
aWxkZXIvamV0c3RyZWFtX2JlbmNobWFya19idWlsZGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKEpl
dFN0cmVhbUJlbmNobWFya0J1aWxkZXIpOgorICAgICAgICAoSmV0U3RyZWFtQmVuY2htYXJrQnVp
bGRlci5wcmVwYXJlKToKKyAgICAgICAgKEpldFN0cmVhbUJlbmNobWFya0J1aWxkZXIuX3J1bkNy
ZWF0ZVNjcmlwdCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVy
L2JlbmNobWFya19ydW5uZXIucHk6IEFkZGVkLgorICAgICAgICAoQmVuY2htYXJrUnVubmVyKToK
KyAgICAgICAgKEJlbmNobWFya1J1bm5lci5fX2luaXRfXyk6CisgICAgICAgIChCZW5jaG1hcmtS
dW5uZXIuZXhlY3V0ZSk6CisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIuY29tcG9zZVVybCk6Cisg
ICAgICAgIChCZW5jaG1hcmtSdW5uZXIuZHVtcCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL19faW5pdF9fLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIv
YnJvd3Nlcl9kcml2ZXIucHk6IEFkZGVkLgorICAgICAgICAoQnJvd3NlckRyaXZlcik6CisgICAg
ICAgIChCcm93c2VyRHJpdmVyLnByZXBhcmVFbnYpOgorICAgICAgICAoQnJvd3NlckRyaXZlci5s
YXVuY2hVcmwpOgorICAgICAgICAoQnJvd3NlckRyaXZlci5jbG9zZUJyb3dzZXIpOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93
c2VyX2RyaXZlcl9mYWN0b3J5LnB5OiBBZGRlZC4KKyAgICAgICAgKEJyb3dzZXJEcml2ZXJGYWN0
b3J5KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nl
cl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXJzLmpzb246IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9vc3hfY2hyb21lX2RyaXZl
ci5weTogQWRkZWQuCisgICAgICAgIChPU1hDaHJvbWVEcml2ZXIpOgorICAgICAgICAoT1NYQ2hy
b21lRHJpdmVyLnByZXBhcmVFbnYpOgorICAgICAgICAoT1NYQ2hyb21lRHJpdmVyLmxhdW5jaFVy
bCk6CisgICAgICAgIChPU1hDaHJvbWVEcml2ZXIuY2xvc2VCcm93c2Vycyk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9zYWZh
cmlfZHJpdmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKE9TWFNhZmFyaURyaXZlcik6CisgICAgICAg
IChPU1hTYWZhcmlEcml2ZXIucHJlcGFyZUVudik6CisgICAgICAgIChPU1hTYWZhcmlEcml2ZXIu
bGF1bmNoVXJsKToKKyAgICAgICAgKE9TWFNhZmFyaURyaXZlci5jbG9zZUJyb3dzZXJzKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL0pl
dFN0cmVhbS5wYXRjaDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1h
cmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9TcGVlZG9tZXRlci5wYXRjaDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvamV0c3RyZWFt
LnBsYW46IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9kYXRhL3BsYW5zL3NwZWVkb21ldGVyLnBsYW46IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9nZW5lcmljX2ZhY3RvcnkucHk6IEFkZGVkLgorICAg
ICAgICAoR2VuZXJpY0ZhY3RvcnkpOgorICAgICAgICAoR2VuZXJpY0ZhY3RvcnkuaXRlcmF0ZUdl
dEl0ZW0pOgorICAgICAgICAoR2VuZXJpY0ZhY3RvcnkuY3JlYXRlKToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL19faW5pdF9f
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
aHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyL3R3aXN0ZWRfaHR0cF9zZXJ2ZXIucHk6IEFk
ZGVkLgorICAgICAgICAoU2VydmVyQ29udHJvbCk6CisgICAgICAgIChTZXJ2ZXJDb250cm9sLnJl
bmRlcl9HRVQpOgorICAgICAgICAoU2VydmVyQ29udHJvbC5yZW5kZXJfUE9TVCk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9o
dHRwX3NlcnZlcl9kcml2ZXIucHk6IEFkZGVkLgorICAgICAgICAoSFRUUFNlcnZlckRyaXZlcik6
CisgICAgICAgIChIVFRQU2VydmVyRHJpdmVyLnNlcnZlKToKKyAgICAgICAgKEhUVFBTZXJ2ZXJE
cml2ZXIuZmV0Y2hSZXN1bHQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyX2ZhY3RvcnkucHk6
IEFkZGVkLgorICAgICAgICAoSFRUUFNlcnZlckRyaXZlckZhY3RvcnkpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9z
ZXJ2ZXJfZHJpdmVycy5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL3NpbXBsZV9odHRwX3NlcnZlcl9kcml2
ZXIucHk6IEFkZGVkLgorICAgICAgICAoU2ltcGxlSFRUUFNlcnZlckRyaXZlcik6CisgICAgICAg
IChTaW1wbGVIVFRQU2VydmVyRHJpdmVyLmRlcGVuZHMpOgorICAgICAgICAoU2ltcGxlSFRUUFNl
cnZlckRyaXZlci5fX2luaXRfXyk6CisgICAgICAgIChTaW1wbGVIVFRQU2VydmVyRHJpdmVyLnNl
cnZlKToKKyAgICAgICAgKFNpbXBsZUhUVFBTZXJ2ZXJEcml2ZXIuYmFzZVVybCk6CisgICAgICAg
IChTaW1wbGVIVFRQU2VydmVyRHJpdmVyLmZldGNoUmVzdWx0KToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dyYXBwZXIvX19pbml0X18ucHk6IEFk
ZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRf
d3JhcHBlci9iYXNlX3Jlc3VsdF93cmFwcGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKEJhc2VSZXN1
bHRXcmFwcGVyKToKKyAgICAgICAgKEJhc2VSZXN1bHRXcmFwcGVyLndyYXApOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9tZXJnZV9y
ZXN1bHRfd3JhcHBlci5weTogQWRkZWQuCisgICAgICAgIChEaWN0aW9uYXJ5TWVyZ2VyKToKKyAg
ICAgICAgKERpY3Rpb25hcnlNZXJnZXIud3JhcCk6CisgICAgICAgIChEaWN0aW9uYXJ5TWVyZ2Vy
Lm1lcmdlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVz
dWx0X3dyYXBwZXIvcmVzdWx0X3dyYXBwZXJfZmFjdG9yeS5weTogQWRkZWQuCisgICAgICAgIChS
ZXN1bHRXcmFwcGVyRmFjdG9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1h
cmtfcnVubmVyL3Jlc3VsdF93cmFwcGVyL3Jlc3VsdF93cmFwcGVycy5qc29uOiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvdXRpbHMucHk6IEFkZGVk
LgorICAgICAgICAoTW9kdWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgIChsb2FkTW9kdWxlKToK
KyAgICAgICAgKGdldFBhdGhGcm9tUHJvamVjdFJvb3QpOgorICAgICAgICAoVGltZW91dEVycm9y
KToKKyAgICAgICAgKHRpbWVvdXQpOgorICAgICAgICAodGltZW91dC5fX2luaXRfXyk6CisgICAg
ICAgICh0aW1lb3V0LmhhbmRsZV90aW1lb3V0KToKKyAgICAgICAgKHRpbWVvdXQuX19lbnRlcl9f
KToKKyAgICAgICAgKHRpbWVvdXQuX19leGl0X18pOgorCiAyMDE1LTA0LTIxICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIEV4dGVuZCBhY3Rpb24g
bWVudXMgdG8gc3VwcG9ydCBQREYKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWJlbmNo
bWFyayBiL1Rvb2xzL1NjcmlwdHMvcnVuLWJlbmNobWFyawpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZWQzOGZiMjI0
NmFiZDAxNWJjZDMwZmQ4ZGQ0YjczN2JlNjgyNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy9ydW4tYmVuY2htYXJrCkBAIC0wLDAgKzEsMzcgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitmcm9tIHdlYmtpdHB5LmJl
bmNobWFya19ydW5uZXIuYmVuY2htYXJrX3J1bm5lciBpbXBvcnQgQmVuY2htYXJrUnVubmVyCisK
KworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKK19sb2cuc2V0TGV2ZWwobG9nZ2luZy5JTkZP
KQorY2ggPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3Jt
YXR0ZXIoJyUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdl
KXMnKQorY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKK19sb2cuYWRkSGFuZGxlcihjaCkKKwor
CitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2Ny
aXB0aW9uPSdBdXRvbWF0ZSB0aGUgYnJvd3NlciBiYXNlZCBwZXJmb3JtYW5jZSBiZW5jaG1hcmtz
JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dC1maWxlJywgZGVzdD0nb3V0cHV0
JywgZGVmYXVsdD1Ob25lKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYnVpbGQtZGlyZWN0
b3J5JywgZGVzdD0nYnVpbGREaXInLCByZXF1aXJlZD1UcnVlKQorICAgIHBhcnNlci5hZGRfYXJn
dW1lbnQoJy0tcGxhbicsIGRlc3Q9J3BsYW4nLCByZXF1aXJlZD1UcnVlKQorICAgIHBhcnNlci5h
ZGRfYXJndW1lbnQoJy0tcGxhdGZvcm0nLCBkZXN0PSdwbGF0Zm9ybScsIGRlZmF1bHQ9J29zeCcs
IGNob2ljZXM9Wydvc3gnLCAnaW9zJywgJ3dpbmRvd3MnXSwgcmVxdWlyZWQ9VHJ1ZSkKKyAgICAj
IEZJWE1FOiBTaG91bGQgd2UgYWRkIGNocm9tZSBhcyBhbiBvcHRpb24/IFdlbGwsIGNocm9tZSB1
c2VzIHdlYmtpdCBpbiBpT1MuCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1icm93c2VyJywg
ZGVzdD0nYnJvd3NlcicsIGRlZmF1bHQ9J3NhZmFyaScsIGNob2ljZXM9WydzYWZhcmknLCAnY2hy
b21lJ10sIHJlcXVpcmVkPVRydWUpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kZWJ1Zycs
IGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAg
ICAKKyAgICBpZiBhcmdzLmRlYnVnOgorICAgICAgICBfbG9nLnNldExldmVsKGxvZ2dpbmcuREVC
VUcpCisgICAgX2xvZy5kZWJ1ZygnSW5pdGlhbGl6aW5nIHByb2dyYW0gd2l0aCBmb2xsb3dpbmcg
cGFyYW1ldGVycycpCisgICAgX2xvZy5kZWJ1ZygnXHRvdXRwdXQgZmlsZSBuYW1lXHQ6ICVzJyAl
IGFyZ3Mub3V0cHV0KQorICAgIF9sb2cuZGVidWcoJ1x0YnVpbGQgZGlyZWN0b3J5XHQ6ICVzJyAl
IGFyZ3MuYnVpbGREaXIpCisgICAgX2xvZy5kZWJ1ZygnXHRwbGFuIG5hbWVcdDogJXMnLCBhcmdz
LnBsYW4pCisgICAgcnVubmVyID0gQmVuY2htYXJrUnVubmVyKGFyZ3MucGxhbiwgYXJncy5idWls
ZERpciwgYXJncy5vdXRwdXQsIGFyZ3MucGxhdGZvcm0sIGFyZ3MuYnJvd3NlcikKKyAgICBydW5u
ZXIuZXhlY3V0ZSgpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvUkVBRE1F
Lm1kIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL1JFQURNRS5tZApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MWEwNjI1MDU3ZWI1N2JjNmY0MjlmNzA4OGJiNTNlYTE4NTJmYTczCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL1JF
QURNRS5tZApAQCAtMCwwICsxLDExOSBAQAorIyBCZW5jaG1hcmsgUnVubmVyIAorVGhpcyBpcyBh
IHRvb2wgZm9yIGF1dG9tYXRpbmcgdGhlIGJyb3dzZXIgYmFzZWQgYmVuY2htYXJrcyhlLmcuIFNw
ZWVkb21ldGVyLCBKZXRTdHJlYW0pCisjIyBQcm9qZWN0IFN0cnVjdHVyZQorYGBgCitiZW5jaG1h
cmtfcnVubmVyCivilJzilIDilIAgUkVBRE1FLm1kCivilJzilIDilIAgX19pbml0X18ucHkKK+KU
nOKUgOKUgCBiZW5jaG1hcmtfYnVpbGRlcgor4pSCwqDCoCDilJzilIDilIAgX19pbml0X18ucHkK
K+KUgsKgwqAg4pSc4pSA4pSAIGJlbmNobWFya19idWlsZGVyX2ZhY3RvcnkucHkKK+KUgsKgwqAg
4pSc4pSA4pSAIGJlbmNobWFya19idWlsZGVycy5qc29uCivilILCoMKgIOKUnOKUgOKUgCBnZW5l
cmljX2JlbmNobWFya19idWlsZGVyLnB5CivilILCoMKgIOKUlOKUgOKUgCBqZXRzdHJlYW1fYmVu
Y2htYXJrX2J1aWxkZXIucHkKK+KUnOKUgOKUgCBiZW5jaG1hcmtfcnVubmVyLnB5CivilJzilIDi
lIAgYnJvd3Nlcl9kcml2ZXIKK+KUgsKgwqAg4pSc4pSA4pSAIF9faW5pdF9fLnB5CivilILCoMKg
IOKUnOKUgOKUgCBicm93c2VyX2RyaXZlci5weQor4pSCwqDCoCDilJzilIDilIAgYnJvd3Nlcl9k
cml2ZXJfZmFjdG9yeS5weQor4pSCwqDCoCDilJzilIDilIAgYnJvd3Nlcl9kcml2ZXJzLmpzb24K
K+KUgsKgwqAg4pSc4pSA4pSAIG9zeF9jaHJvbWVfZHJpdmVyLnB5CivilILCoMKgIOKUlOKUgOKU
gCBvc3hfc2FmYXJpX2RyaXZlci5weQor4pSc4pSA4pSAIGRhdGEKK+KUgsKgwqAg4pSc4pSA4pSA
IHBhdGNoZXMKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgSmV0U3RyZWFtLnBhdGNoCivilILC
oMKgIOKUgsKgwqAg4pSU4pSA4pSAIFNwZWVkb21ldGVyLnBhdGNoCivilILCoMKgIOKUlOKUgOKU
gCBwbGFucwor4pSCwqDCoCAgICAg4pSc4pSA4pSAIGpldHN0cmVhbS5wbGFuCivilILCoMKgICAg
ICDilJTilIDilIAgc3BlZWRvbWV0ZXIucGxhbgor4pSc4pSA4pSAIGdlbmVyaWNfZmFjdG9yeS5w
eQor4pSc4pSA4pSAIGh0dHBfc2VydmVyX2RyaXZlcgor4pSCwqDCoCDilJzilIDilIAgX19pbml0
X18ucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGh0dHBfc2VydmVyCivilILCoMKgIOKUgsKgwqAg4pSU
4pSA4pSAIHR3aXN0ZWRfaHR0cF9zZXJ2ZXIucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGh0dHBfc2Vy
dmVyX2RyaXZlci5weQor4pSCwqDCoCDilJzilIDilIAgaHR0cF9zZXJ2ZXJfZHJpdmVyX2ZhY3Rv
cnkucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGh0dHBfc2VydmVyX2RyaXZlcnMuanNvbgor4pSCwqDC
oCDilJTilIDilIAgc2ltcGxlX2h0dHBfc2VydmVyX2RyaXZlci5weQor4pSc4pSA4pSAIHJlc3Vs
dF93cmFwcGVyCivilILCoMKgIOKUnOKUgOKUgCBfX2luaXRfXy5weQor4pSCwqDCoCDilJzilIDi
lIAgYmFzZV9yZXN1bHRfd3JhcHBlci5weQor4pSCwqDCoCDilJzilIDilIAgbWVyZ2VfcmVzdWx0
X3dyYXBwZXIucHkKK+KUgsKgwqAg4pSc4pSA4pSAIHJlc3VsdF93cmFwcGVyX2ZhY3RvcnkucHkK
K+KUgsKgwqAg4pSU4pSA4pSAIHJlc3VsdF93cmFwcGVycy5qc29uCivilJTilIDilIAgdXRpbHMu
cHkKK2BgYAorIyMgUmVxdWlyZW1lbnRzCisqIHB5dGhvbiBtb2R1bGVzOgorICAgICogUHlPYmpj
CisgICAgKiBwc3V0aWxzIChvcHRpb25hbCkKKworIyMgSE9XIFRPcworIyMjIEhvdyB0byBydW4K
K2BgYHNoZWxsCisgICAgcHl0aG9uIHBhdGgvdG8vcnVuX2JlbmNobWFyayAtLWJ1aWxkLWRpcmVj
dG9yeSBwYXRoL3RvL2Jyb3dzZXIvZGlyZWN0b3J5IC0tcGxhbiBqc29uX2Zvcm1hdF9wbGFuIC0t
cGxhdGZvcm0gdGFyZ2V0X3BsYXRmb3JtIC0tYnJvd3NlciB0YXJnZXRfYnJvd3NlcgorYGBgCisq
ICoqcGF0aC90by9icm93c2VyL2RpcmVjdG9yeSoqOiBzaG91bGQgYmUgdGhlIGZvbGRlciBjb250
YWluaW5nIHRoZSBleGVjdXRhYmxlIGJpbmFyeShlLmcuIC9BcHBsaWNhdGlvbi8gb24gT1NYIHdo
aWNoIGNvbnRhaW5zIFNhZmFyaS5hcHApCisqICoqanNvbl9mb3JtYXRfcGxhbioqOiB0aGUgYmVu
Y2htYXJrIHBsYW4geW91IHdhbnQgdG8gZXhlY3V0ZSAgCisKKyMjIyBIb3cgdG8gY3JlYXRlIGEg
cGxhbgorVG8gY3JlYXRlIGEgcGxhbiwgeW91IG1heSByZWZlciB0byBQbGFucy9qZXRzdHJlYW0u
cGxhbi4KK2BgYGpzb24gCit7CisgICAgImh0dHBfc2VydmVyX2RyaXZlciI6ICJTaW1wbGVIVFRQ
U2VydmVyRHJpdmVyIiwgCisgICAgImJlbmNobWFya3MiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJ0aW1lb3V0IiA6IDYwMCwKKyAgICAgICAgICAgICJjb3VudCI6IDUsCisgICAgICAgICAg
ICAiYmVuY2htYXJrX2J1aWxkZXIiOiAiSmV0U3RyZWFtQmVuY2htYXJrQnVpbGRlciIsCisgICAg
ICAgICAgICAib3JpZ2luYWxfYmVuY2htYXJrIjogIi4uLy4uLy4uLy4uL1BlcmZvcm1hbmNlVGVz
dHMvSmV0U3RyZWFtIiwKKyAgICAgICAgICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiZGF0YS9wYXRj
aGVzL0pldFN0cmVhbS5wYXRjaCIsCisgICAgICAgICAgICAiZW50cnlfcG9pbnQiOiAiSmV0U3Ry
ZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sIiwKKyAgICAgICAgICAgICJyZXN1bHRfd3Jh
cHBlciI6ICJNZXJnZVJlc3VsdFdyYXBwZXIiLAorICAgICAgICAgICAgIm91dHB1dF9maWxlIjog
ImpldHN0cmVhbS5yZXN1bHQiCisgICAgICAgIH0KKyAgICBdCit9CitgYGAKK1BsYW4gaXMgYSBq
c29uLWZvcm1hdHRlZCBkaWN0aW9uYXJ5IHdoaWNoIGNvbnRhaW5zIGZvbGxvd2luZyBrZXlzIAor
KiAqKmh0dHBfc2VydmVyX2RyaXZlcioqOiAoKipjYXNlLXNlbnNpdGl2ZSoqKSB0aGUgaHR0cCBz
ZXJ2ZXIgbW9kdWxlIHlvdSB3YW50IHRvIGhvc3QgdGhlIHJlc291cmNlcy4gQ3VycmVudCBhdmFp
bGFibGUgb3B0aW9uIGlzICJTaW1wbGVIVFRQU2VydmVySGFuZGxlIiB3aGljaCBpcyBiYXNlZCBv
biBweXRob24gdHdpc3RlZCBmcmFtZXdvcmsuCisqICoqYmVuY2htYXJrcyoqOiBjb250YWlucyBh
IGxpc3Qgb2YgYmVuY2htYXJrcyB5b3Ugd2FudCB0byBydW4sIGVhY2ggYmVuY2htYXJrIGlzIGEg
bGlzdCBjb250YWlucyBmb2xsb3dpbmcga2V5czoKKyAgICAqICoqdGltZW91dCoqOiB0aW1lIGxp
bWl0IGZvciAqKkVBQ0ggUlVOKiogb2YgdGhlIGJlbmNobWFyay4gVGhpcyBjYW4gYXZvaWQgcHJv
Z3JhbSBnZXR0aW5nIHN0dWNrIGluIHRoZSBleHRyZW1lIGNpcmN1bXN0YW5jZXMuIFRoZSB0aW1l
IGxpbWl0IGlzIHN1Z2dlc3RlZCB0byBiZSAxLjUtMnggdGhlIHRpbWUgc3BlbnQgaW4gYSBub3Jt
YWwgcnVuLgorICAgICogKipjb3VudCoqOiB0aGUgbnVtYmVyIG9mIHRpbWVzIHlvdSB3YW50IHRv
IHJ1biBiZW5jaG1hcmsKKyAgICAqICoqYmVuY2htYXJrX2J1aWxkZXIqKjogIGJ1aWxkZXIgb2Yg
dGhlIGJlbmNobWFyayB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgYXJyYW5naW5nIGJlbmNobWFy
ayBiZWZvcmUgdGhlIHdlYiBzZXJ2ZXIgc2VydmluZyB0aGUgZGlyZWN0b3J5LiBJbiBtb3N0IGNh
c2UsICdHZW5lcmljQmVuY2htYXJrSGFuZGxlcicgaXMgc3VmZmljaWVudC4gSXQgY29waWVzIHRo
ZSBiZW5jaG1hcmsgdG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBhcHBsaWVzIHBhdGNoIHRv
IGJlbmNobWFyay4gSWYgeW91IGhhdmUgc3BlY2lhbCByZXF1aXJlbWVudCwgeW91IGNvdWxkIGRl
c2lnbiB5b3VyIG93biBiZW5jaG1hcmsgaGFuZGxlLCBqdXN0IGxpa2UgdGhlICdKZXRTdHJlYW1C
ZW5jaG1hcmtIYW5kbGUnIGluIHRoaXMgZXhhbXBsZS4KKyAgICAqICoqb3JpZ2luYWxfYmVuY2ht
YXJrKio6IHBhdGggb2YgYmVuY2htYXJrLCBhIHJlbGF0aXZlIHBhdGggdG8gdGhlIHJvb3Qgb2Yg
dGhpcyBwcm9qZWN0ICgnYmVuY2htYXJrX3J1bm5lcicgZGlyZWN0b3J5KQorICAgICogKipiZW5j
aG1hcmtfcGF0aCoqOiAoKipPUFRJT05BTCoqKSBwYXRoIG9mIHBhdGNoLCBhIHJlbGF0aXZlIHBh
dGggdG8gdGhlIHJvb3Qgb2YgdGhpcyBwcm9qZWN0ICgnYmVuY2htYXJrX3J1bm5lcicgZGlyZWN0
b3J5KQorICAgICogKiplbnRyeV9wb2ludCoqOiB0aGUgcmVsYXRpdmUgdXJsIHlvdSB3YW50IGJy
b3dzZXIgdG8gbGF1bmNoIChhIHJlbGF0aXZlIHBhdGggdG8gdGhlIHdlYnJvb3QpCisgICAgKiAq
KnJlc3VsdF93cmFwcGVyKio6IHRoZSB3cmFwcGVyIG1vZHVsZSB5b3Ugd2FudCB0byB3cmFwIHRo
ZSByZXN1bHRzLiBDdXJyZW50IGF2YWlsYmxlIG9wdGlvbiBpcyAiTWVyZ2VSZXN1bHRXcmFwcGVy
Ii4gVG8gY3VzdG9taXplIHlvdXIgb3duIHJlc3VsdCB3cmFwcGVyLCBleHRlbmRzIFV0aWxpdGll
cy9SZXN1bHRXcmFwcGVyL0Jhc2VSZXN1bHRXcmFwcGVyLnB5IGFuZCByZWdpc3RlciB5b3VyIG1v
ZHVsZSBpbiBVdGlsaXRpZXMvUmVzdWx0V3JhcHBlci9SZXN1bHRXcmFwcGVyLmpzb24KKyAgICAq
ICoqb3V0cHV0X2ZpbGUqKjogc3BlY2lmeSB0aGUgb3V0cHV0IGZpbGUKKworIyMjIEhvdyB0byBp
bXBvcnQgYSBiZW5jaG1hcmsKKyogTW9kaWZ5IHRoZSBiZW5jaG1hcmsgaHRtbCBmaWxlLCBtYWtl
IHN1cmUgdGhlIHBhZ2UgaGFzIGZvbGxvd2luZyBmdW5jdGlvbmFsaXRpZXM6CisgICAgKiBXaGVu
IHlvdSBsYXVuY2ggdGhlIHBhZ2UoJ2VudHJ5X3BvaW50JyBpbiBiZW5jaG1hcmspLCB0aGUgdGVz
dCB3aWxsIHN0YXJ0IGF1dG9tYXRpY2FsbHkKKyAgICAqIE9yZ2FuaXppbmcgdGhlIHJlc3VsdHMK
KyAgICAqICdQT1NUJyBpbmZvcm1hdGlvbiB0byAnL3JlcG9ydCcsIGFuZCAnR0VUJyAnL3NodXRk
b3duJyB3aGVuIHBvc3Qgc3VjY2VlZHMuIEV4YW1wbGU6CisgICAgKiBgYGBqcworICAgICAgdmFy
IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgeGhyLm9wZW4oIlBPU1QiLCAiL3Jl
cG9ydCIpOworICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJhcHBs
aWNhdGlvbi9qc29uIik7CisgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1sZW5n
dGgiLCByZXN1bHRzLmxlbmd0aCk7CisgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29ubmVj
dGlvbiIsICJjbG9zZSIpOworICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICAgIGlmKHhoci5yZWFkeVN0YXRlID09IDQgJiYgeGhyLnN0YXR1cyA9PSAy
MDApIHsKKyAgICAgICAgICAgICAgdmFyIGNsb3NlUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVz
dCgpOworICAgICAgICAgICAgICBjbG9zZVJlcXVlc3Qub3BlbigiR0VUIiwgJy9zaHV0ZG93bicp
OworICAgICAgICAgICAgICBjbG9zZVJlcXVlc3Quc2VuZCgpCisgICAgICAgICAgfQorICAgICAg
fQorICAgICAgeGhyLnNlbmQocmVzdWx0cyk7CitgYGAgCisqIENyZWF0ZSBhIHBhdGNoIGZpbGUg
YWdhaW5zdCBvcmlnaW5hbCBmaWxlCisgICAgKiBHbyB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5z
IHRoZSBiZW5jaG1hcmsgZGlyZWN0b3J5IChlLmcuIGZvciBKZXRTdHJlYW0sIHlvdSBzaG91bGQg
Z28gdG8gUGVyZm9ybWFjZVRlc3QgZm9sZGVyKQorICAgICogVXNlIGBgYGdpdCBkaWZmIC0tcmVs
YXRpdmUgSEVBRCA+IHlvdXIucGF0Y2hgYGAgdG8gY3JlYXRlIHlvdXIgcGF0Y2gKKyAgICAqICgq
KlN1Z2dlc3RlZCoqKSBtb3ZlIHRoZSBwYXRjaCB0byB0aGUgJ1BhdGNoZXMnIGRpcmVjdG9yeSB1
bmRlciBwcm9qZWN0IGRpcmVjdG9yeQorKiBDcmVhdGUgYSBwbGFuIGZvciB0aGUgYmVuY2htYXJr
IChyZWZlciB0byAqKiJIb3cgdG8gY3JlYXRlIGEgcGxhbiIqKiBmb3IgbW9yZSBkZXRhaWxzKQor
KiBEbyBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gKipPTkxZIElGIE5FRURFRCoqLiBJbiBtb3N0IGNh
c2UsIHlvdSBkbyBub3QgaGF2ZSB0by4KKyAgICAqIElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSBC
cm93c2VyRHJpdmVyIGZvciBzcGVjaWZpYyBicm93c2VyL3BsYXRmb3JtLCB5b3UgbmVlZCB0byBl
eHRlbmQgYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXIucHkgYW5kIHJlZ2lzdGVyIHlvdXIg
bW9kdWxlIGluIGJyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyc2pzb24uCisgICAgKiBJZiB5
b3Ugd2FudCB0byBjdXN0b21pemUgSFRUUFNlcnZlckRyaXZlciwgeW91IG5lZWQgdG8gZXh0ZW5k
IGh0dHBfc2VydmVyX2RyaXJ2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyIGFuZCByZWdpc3RlciB5b3Vy
IG1vZHVsZSBpbiBodHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVycy5qc29uLgor
ICAgICogSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIFJlc3VsdFdyYXBwZXIsIHlvdSBuZWVkIHRv
IGV4dGVuZCByZXN1bHRfd3JhcHBlci9iYXNlX3Jlc3VsdF93cmFwcGVyLnB5IGFuZCByZWdpc3Rl
ciB5b3VyIG1vZHVsZSBpbiByZXN1bHRfd3JhcHBlci9yZXN1bHRfd3JhcHBlcnMuanNvbiAKKyAg
ICAqIElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSBCZW5jaG1hcmtCdWlsZGVyLCB5b3UgbmVlZCB0
byBleHRlbmQgYmVuY2htYXJrX2J1aWxkZXIvZ2VuZXJpY19iZW5jaG1hcmtfYnVpbGRlciByZWdp
c3RlciB5b3UgbW9kdWxlIGluIGJlbmNobWFya19idWlsZGVyL2JlbmNobWFya19idWlsZGVycy5q
c29uCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
X19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvX19p
bml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhj
NTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVy
L2JlbmNobWFya19idWlsZGVyL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9i
ZW5jaG1hcmtfYnVpbGRlcl9mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5j
aG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2JlbmNobWFya19idWlsZGVyX2ZhY3Rvcnku
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjY3Y2EyMmIxZjQ3MTA2NDJhNjJiMDQyYWFhMDE1ZWVmMjZmNGZhMwot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9iZW5jaG1hcmtfYnVpbGRlci9iZW5jaG1hcmtfYnVpbGRlcl9mYWN0b3J5LnB5CkBAIC0wLDAg
KzEsMjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IGpzb24KK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdHB5LmJlbmNobWFya19ydW5uZXIuZ2VuZXJp
Y19mYWN0b3J5IGltcG9ydCBHZW5lcmljRmFjdG9yeQorCisKK2J1aWxkZXJGaWxlTmFtZSA9ICdi
ZW5jaG1hcmtfYnVpbGRlcnMuanNvbicKKworCit0cnk6CisgICAgYnVpbGRlcnMgPSBqc29uLmxv
YWQob3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgYnVpbGRlckZp
bGVOYW1lKSwgJ3InKSkKKyAgICBpZiBub3QgYnVpbGRlcnM6CisgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigiTm8gZHJpdmVyIGluICVzIHdhcyBmb3VuZCIgJSAoYnVpbGRlckZpbGVOYW1lKSkKK2V4
Y2VwdDoKKyAgICByYWlzZSBFeGNlcHRpb24oIk5vIGRyaXZlciBpbiAlcyB3YXMgZm91bmQiICUg
KGJ1aWxkZXJGaWxlTmFtZSkpCisKKworY2xhc3MgQmVuY2htYXJrQnVpbGRlckZhY3RvcnkoR2Vu
ZXJpY0ZhY3RvcnkpOgorCisgICAgcHJvZHVjdHMgPSBidWlsZGVycwpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2Jl
bmNobWFya19idWlsZGVycy5qc29uIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtf
cnVubmVyL2JlbmNobWFya19idWlsZGVyL2JlbmNobWFya19idWlsZGVycy5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI4ZmM5MzJlNmU5ZGU1YTExNGFkZjhjMGUwYTU2MGRjMzVlNDEwNTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJr
X2J1aWxkZXIvYmVuY2htYXJrX2J1aWxkZXJzLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAg
ICJHZW5lcmljQmVuY2htYXJrQnVpbGRlciI6IHsKKyAgICAgICAgImZpbGVQYXRoIjogImJlbmNo
bWFya19idWlsZGVyLmdlbmVyaWNfYmVuY2htYXJrX2J1aWxkZXIiLAorICAgICAgICAibW9kdWxl
TmFtZSI6ICJHZW5lcmljQmVuY2htYXJrQnVpbGRlciIKKyAgICB9LAorICAgICJKZXRTdHJlYW1C
ZW5jaG1hcmtCdWlsZGVyIjogeworICAgICAgICAiZmlsZVBhdGgiOiAiYmVuY2htYXJrX2J1aWxk
ZXIuamV0c3RyZWFtX2JlbmNobWFya19idWlsZGVyIiwKKyAgICAgICAgIm1vZHVsZU5hbWUiOiAi
SmV0U3RyZWFtQmVuY2htYXJrQnVpbGRlciIKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvZ2VuZXJp
Y19iZW5jaG1hcmtfYnVpbGRlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9nZW5lcmljX2JlbmNobWFya19idWlsZGVyLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJlNTQ4Nzk5OWVjYTk2MzVhMWJlMDhkMTE2ZjIzOGFmNmI4NmY5NzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVu
Y2htYXJrX2J1aWxkZXIvZ2VuZXJpY19iZW5jaG1hcmtfYnVpbGRlci5weQpAQCAtMCwwICsxLDQz
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0ZW1w
ZmlsZQoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9t
IHdlYmtpdHB5LmJlbmNobWFya19ydW5uZXIudXRpbHMgaW1wb3J0IGdldFBhdGhGcm9tUHJvamVj
dFJvb3QKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3Mg
R2VuZXJpY0JlbmNobWFya0J1aWxkZXIob2JqZWN0KToKKworICAgIGRlZiBwcmVwYXJlKHNlbGYs
IGJlbmNobWFya1BhdGgsIHBhdGNoKToKKyAgICAgICAgc2VsZi5fY29weUJlbmNobWFya1RvVGVt
cERpcihiZW5jaG1hcmtQYXRoKQorICAgICAgICByZXR1cm4gc2VsZi5fYXBwbHlQYXRjaChwYXRj
aCkKKworICAgIGRlZiBfY29weUJlbmNobWFya1RvVGVtcERpcihzZWxmLCBiZW5jaG1hcmtQYXRo
KToKKyAgICAgICAgc2VsZi53ZWJSb290ID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIF9s
b2cuZGVidWcoJ1NlcnZlcmluZyBhdCB3ZWJSb290OiAlcycgJSBzZWxmLndlYlJvb3QpCisgICAg
ICAgIHNlbGYuZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLndlYlJvb3QsIG9zLnBhdGguc3BsaXQo
YmVuY2htYXJrUGF0aClbMV0pCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShnZXRQYXRoRnJvbVBy
b2plY3RSb290KGJlbmNobWFya1BhdGgpLCBzZWxmLmRlc3QpCisKKyAgICBkZWYgX2FwcGx5UGF0
Y2goc2VsZiwgcGF0Y2gpOgorICAgICAgICBpZiBub3QgcGF0Y2g6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi53ZWJSb290CisgICAgICAgIG9sZFdvcmtpbmdEaXJlY3RvcnkgPSBvcy5nZXRjd2Qo
KQorICAgICAgICBvcy5jaGRpcihzZWxmLndlYlJvb3QpCisgICAgICAgIGVycm9yQ29kZSA9IHN1
YnByb2Nlc3MuY2FsbChbJ3BhdGNoJywgJy1wMScsICctZicsICctaScsIGdldFBhdGhGcm9tUHJv
amVjdFJvb3QocGF0Y2gpXSkKKyAgICAgICAgb3MuY2hkaXIob2xkV29ya2luZ0RpcmVjdG9yeSkK
KyAgICAgICAgaWYgZXJyb3JDb2RlOgorICAgICAgICAgICAgX2xvZy5lcnJvcignQ2Fubm90IGFw
cGx5IHBhdGNoLCB3aWxsIHNraXAgY3VycmVudCBiZW5jaG1hcmtQYXRoJykKKyAgICAgICAgICAg
IHNlbGYuY2xlYW4oKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNl
bGYud2ViUm9vdAorCisgICAgZGVmIGNsZWFuKHNlbGYpOgorICAgICAgICBfbG9nLmluZm8oJ0Ns
ZWFubmluZyBCZW5jaG1hcmsnKQorICAgICAgICBpZiBzZWxmLndlYlJvb3Q6CisgICAgICAgICAg
ICBzaHV0aWwucm10cmVlKHNlbGYud2ViUm9vdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9qZXRzdHJlYW1fYmVu
Y2htYXJrX2J1aWxkZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5u
ZXIvYmVuY2htYXJrX2J1aWxkZXIvamV0c3RyZWFtX2JlbmNobWFya19idWlsZGVyLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNkOTU4ZTM0ZGIzMzE3YTA3Yjg1ZmU5NTYzZjVlMTE5OTAyYmY4NmYKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2ht
YXJrX2J1aWxkZXIvamV0c3RyZWFtX2JlbmNobWFya19idWlsZGVyLnB5CkBAIC0wLDAgKzEsMjcg
QEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitp
bXBvcnQgc3VicHJvY2VzcworCitmcm9tIGdlbmVyaWNfYmVuY2htYXJrX2J1aWxkZXIgaW1wb3J0
IEdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9f
bmFtZV9fKQorCisKK2NsYXNzIEpldFN0cmVhbUJlbmNobWFya0J1aWxkZXIoR2VuZXJpY0JlbmNo
bWFya0J1aWxkZXIpOgorCisgICAgZGVmIHByZXBhcmUoc2VsZiwgYmVuY2htYXJrUGF0aCwgcGF0
Y2gpOgorICAgICAgICBzdXBlcihzZWxmLl9fY2xhc3NfXywgc2VsZikuX2NvcHlCZW5jaG1hcmtU
b1RlbXBEaXIoYmVuY2htYXJrUGF0aCkKKyAgICAgICAgc2VsZi5fcnVuQ3JlYXRlU2NyaXB0KCkK
KyAgICAgICAgcmV0dXJuIHN1cGVyKHNlbGYuX19jbGFzc19fLCBzZWxmKS5fYXBwbHlQYXRjaChw
YXRjaCkKKworICAgIGRlZiBfcnVuQ3JlYXRlU2NyaXB0KHNlbGYpOgorICAgICAgICBvbGRXb3Jr
aW5nRGlyZWN0b3J5ID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5kZXN0KQor
ICAgICAgICBfbG9nLmRlYnVnKHNlbGYuZGVzdCkKKyAgICAgICAgZXJyb3JDb2RlID0gc3VicHJv
Y2Vzcy5jYWxsKFsncnVieScsICdjcmVhdGUucmInXSkKKyAgICAgICAgb3MuY2hkaXIob2xkV29y
a2luZ0RpcmVjdG9yeSkKKyAgICAgICAgaWYgZXJyb3JDb2RlOgorICAgICAgICAgICAgX2xvZy5l
cnJvcignQ2Fubm90IGNyZWF0ZSBKZXRTdHJlYW0gQmVuY2htYXJrJykKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfcnVubmVyLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19ydW5u
ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzZkMmY4NWYyYmM4OGZkZjAyMGZhZThmMmU0Mzg4OTE3YjVkZGJj
ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9iZW5jaG1hcmtfcnVubmVyLnB5CkBAIC0wLDAgKzEsODQgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorCitpbXBvcnQganNvbgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzaHV0aWwKK2lt
cG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0
aW1lCitpbXBvcnQgb3MKKworZnJvbSBiZW5jaG1hcmtfYnVpbGRlci5iZW5jaG1hcmtfYnVpbGRl
cl9mYWN0b3J5IGltcG9ydCBCZW5jaG1hcmtCdWlsZGVyRmFjdG9yeQorZnJvbSBicm93c2VyX2Ry
aXZlci5icm93c2VyX2RyaXZlcl9mYWN0b3J5IGltcG9ydCBCcm93c2VyRHJpdmVyRmFjdG9yeQor
ZnJvbSBodHRwX3NlcnZlcl9kcml2ZXIuaHR0cF9zZXJ2ZXJfZHJpdmVyX2ZhY3RvcnkgaW1wb3J0
IEhUVFBTZXJ2ZXJEcml2ZXJGYWN0b3J5Citmcm9tIHJlc3VsdF93cmFwcGVyLnJlc3VsdF93cmFw
cGVyX2ZhY3RvcnkgaW1wb3J0IFJlc3VsdFdyYXBwZXJGYWN0b3J5Citmcm9tIHV0aWxzIGltcG9y
dCBsb2FkTW9kdWxlLCBnZXRQYXRoRnJvbVByb2plY3RSb290Citmcm9tIHV0aWxzIGltcG9ydCB0
aW1lb3V0CisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNz
IEJlbmNobWFya1J1bm5lcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYW5G
aWxlLCBidWlsZERpciwgb3V0cHV0RmlsZSwgcGxhdGZvcm0sIGJyb3dzZXIpOgorICAgICAgICBf
bG9nLmluZm8oJ0luaXRpYWxpemluZyBiZW5jaG1hcmsgcnVubmluZycpCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHdpdGggb3BlbihwbGFuRmlsZSwgJ3InKSBhcyBmcDoKKyAgICAgICAgICAg
ICAgICBzZWxmLnBsYW4gPSBqc29uLmxvYWQoZnApCisgICAgICAgICAgICAgICAgc2VsZi5icm93
c2VyRHJpdmVyID0gQnJvd3NlckRyaXZlckZhY3RvcnkuY3JlYXRlKFtwbGF0Zm9ybSwgYnJvd3Nl
cl0pCisgICAgICAgICAgICAgICAgc2VsZi5odHRwU2VydmVyRHJpdmVyID0gSFRUUFNlcnZlckRy
aXZlckZhY3RvcnkuY3JlYXRlKFtzZWxmLnBsYW5bJ2h0dHBfc2VydmVyX2RyaXZlciddXSkKKyAg
ICAgICAgICAgICAgICBzZWxmLmJlbmNobWFya3MgPSBzZWxmLnBsYW5bJ2JlbmNobWFya3MnXQor
ICAgICAgICAgICAgICAgIHNlbGYuYnVpbGREaXIgPSBvcy5wYXRoLmFic3BhdGgoYnVpbGREaXIp
CisgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXRGaWxlID0gb3V0cHV0RmlsZSBpZiBvdXRwdXRG
aWxlIGVsc2UgJ2JlbmNobWFyay5yZXN1bHQnCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAg
ICAgICAgICAgX2xvZy5lcnJvcignQ2FuIG5vdCBvcGVuIHBsYW4gZmlsZTogJXMnICUgcGxhbkZp
bGUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgX2xvZy5lcnJvcign
UGxhbiBmaWxlOiVzIG1heSBub3QgZm9sbG93IGpzb24gZm9ybWF0JyAlIHBsYW5GaWxlKQorICAg
ICAgICBleGNlcHQ6CisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIGV4ZWN1dGUoc2VsZik6
CisgICAgICAgIF9sb2cuaW5mbygnU3RhcnQgdG8gZXhlY3V0ZSB0aGUgcGxhbicpCisgICAgICAg
IGZvciBiZW5jaG1hcmsgaW4gc2VsZi5iZW5jaG1hcmtzOgorICAgICAgICAgICAgX2xvZy5pbmZv
KCdTdGFydCBhIG5ldyBiZW5jaG1hcmsnKQorICAgICAgICAgICAgcmVzdWx0cyA9IFtdCisgICAg
ICAgICAgICByZXN1bHRXcmFwcGVyID0gUmVzdWx0V3JhcHBlckZhY3RvcnkuY3JlYXRlKFtiZW5j
aG1hcmtbJ3Jlc3VsdF93cmFwcGVyJ11dKQorICAgICAgICAgICAgYmVuY2htYXJrQnVpbGRlciA9
IEJlbmNobWFya0J1aWxkZXJGYWN0b3J5LmNyZWF0ZShbYmVuY2htYXJrWydiZW5jaG1hcmtfYnVp
bGRlciddXSkKKyAgICAgICAgICAgIHdlYlJvb3QgPSBiZW5jaG1hcmtCdWlsZGVyLnByZXBhcmUo
YmVuY2htYXJrWydvcmlnaW5hbF9iZW5jaG1hcmsnXSwgYmVuY2htYXJrWydiZW5jaG1hcmtfcGF0
Y2gnXSBpZiAnYmVuY2htYXJrX3BhdGNoJyBpbiBiZW5jaG1hcmsgZWxzZSBOb25lKQorICAgICAg
ICAgICAgZm9yIHggaW4geHJhbmdlKGludChiZW5jaG1hcmtbJ2NvdW50J10pKToKKyAgICAgICAg
ICAgICAgICBfbG9nLmluZm8oJ1N0YXJ0IHRoZSBpdGVyYXRpb24gJWQgb2YgY3VycmVudCBiZW5j
aG1hcmsnICUgKHggKyAxKSkKKyAgICAgICAgICAgICAgICBzZWxmLmh0dHBTZXJ2ZXJEcml2ZXIu
c2VydmUod2ViUm9vdCkKKyAgICAgICAgICAgICAgICBzZWxmLmJyb3dzZXJEcml2ZXIucHJlcGFy
ZUVudigpCisgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyRHJpdmVyLmxhdW5jaFVybChzZWxm
LmNvbXBvc2VVcmwoc2VsZi5odHRwU2VydmVyRHJpdmVyLmJhc2VVcmwoKSwgYmVuY2htYXJrWydl
bnRyeV9wb2ludCddKSwgc2VsZi5idWlsZERpcikKKyAgICAgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgICAgIHdpdGggdGltZW91dChiZW5jaG1hcmtbJ3RpbWVvdXQnXSk6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc29uLmxvYWRzKHNlbGYuaHR0cFNlcnZlckRy
aXZlci5mZXRjaFJlc3VsdCgpKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICAgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuYnJvd3NlckRyaXZlci5jbG9zZUJyb3dzZXJzKCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ05vIHJlc3VsdC4gU29tZXRoaW5nIHdlbnQgd3Jvbmcn
KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmJyb3dzZXJEcml2ZXIuY2xvc2VCcm93c2Vycygp
CisgICAgICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnRW5kIG9mICVkIGl0ZXJhdGlvbiBvZiBj
dXJyZW50IGJlbmNobWFyaycgJSAoeCArIDEpKQorICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3Vs
dFdyYXBwZXIud3JhcChyZXN1bHRzKQorICAgICAgICAgICAgc2VsZi5kdW1wKHJlc3VsdHMsIGJl
bmNobWFya1snb3V0cHV0X2ZpbGUnXSBpZiBiZW5jaG1hcmtbJ291dHB1dF9maWxlJ10gZWxzZSBz
ZWxmLm91dHB1dEZpbGUpCisgICAgICAgICAgICBiZW5jaG1hcmtCdWlsZGVyLmNsZWFuKCkKKwor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjb21wb3NlVXJsKGNscywgYmFzZVVybCwgcmVsYXRp
dmVQYXRoKToKKyAgICAgICAgcmV0dXJuICcvJy5qb2luKFtiYXNlVXJsLCByZWxhdGl2ZVBhdGhd
KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGR1bXAoY2xzLCByZXN1bHRzLCBvdXRwdXRG
aWxlKToKKyAgICAgICAgX2xvZy5pbmZvKCdEdW1wcGluZyB0aGUgcmVzdWx0cyB0byBmaWxlJykK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKG91dHB1dEZpbGUsICd3JykgYXMg
ZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoanNvbi5kdW1wcyhyZXN1bHRzKSkKKyAgICAg
ICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBfbG9nLmluZm8oJ0Nhbm5vdCBvcGVuIG91
dHB1dCBmaWxlOiAlcycgJSBvdXRwdXRGaWxlKQorICAgICAgICAgICAgX2xvZy5pbmZvKCdSZXN1
bHRzIGFyZTpcbiAlcycsIGpzb24uZHVtcHMocmVzdWx0cykpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvX19pbml0X18u
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2
ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4
YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtf
cnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjZiZWYxNTA2ZmFmNjRhYTAxZjRlNDExMzE4MzIwNDE4MmY1ODdlM2YKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
YnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXIucHkKQEAgLTAsMCArMSwxOCBAQAorIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBhYmMKKworCitjbGFzcyBCcm93c2VyRHJpdmVyKG9i
amVjdCk6CisKKyAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgZGVmIHByZXBhcmVFbnYoc2Vs
Zik6CisgICAgICAgIHBhc3MKKworICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgbGF1
bmNoVXJsKHNlbGYsIHVybCwgYnJvd3NlckJ1aWxkUGF0aD1Ob25lKToKKyAgICAgICAgcGFzcwor
CisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjbG9zZUJyb3dzZXIoc2VsZik6Cisg
ICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlcl9mYWN0b3J5LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJf
ZHJpdmVyX2ZhY3RvcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjZjMzllNGU0NWEyNjJjOGM2ZjI0ZDA4MTVj
YTcyOTE3ZDcxMDNmNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
YmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlcl9mYWN0b3J5LnB5
CkBAIC0wLDAgKzEsMjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdHB5LmJlbmNobWFya19ydW5u
ZXIuZ2VuZXJpY19mYWN0b3J5IGltcG9ydCBHZW5lcmljRmFjdG9yeQorCisKK2RyaXZlckZpbGVO
YW1lID0gJ2Jyb3dzZXJfZHJpdmVycy5qc29uJworCisKK3RyeToKKyAgICBkcml2ZXJzID0ganNv
bi5sb2FkKG9wZW4ob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIGRyaXZl
ckZpbGVOYW1lKSwgJ3InKSkKKyAgICBpZiBub3QgZHJpdmVyczoKKyAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJObyBkcml2ZXIgd2FzIGZvdW5kIGluICVzIiAlIChkcml2ZXJGaWxlTmFtZSkpCitl
eGNlcHQ6CisgICAgcmFpc2UgRXhjZXB0aW9uKCJObyBkcml2ZXIgd2FzIGZvdW5kIGluICVzIiAl
IChkcml2ZXJGaWxlTmFtZSkpCisKKworY2xhc3MgQnJvd3NlckRyaXZlckZhY3RvcnkoR2VuZXJp
Y0ZhY3RvcnkpOgorCisgICAgcHJvZHVjdHMgPSBkcml2ZXJzCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9k
cml2ZXJzLmpzb24gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJv
d3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JhZmU1OWU4MjUy
ZGM4N2I0ZTU0MzZmYTdlZDdlMmQ0YjUzZGZhNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2Ry
aXZlcnMuanNvbgpAQCAtMCwwICsxLDE4IEBACit7CisgICAgIm9zeCI6IHsKKyAgICAgICAgImNo
cm9tZSI6IHsKKyAgICAgICAgICAgICJtb2R1bGVOYW1lIjogIk9TWENocm9tZURyaXZlciIsIAor
ICAgICAgICAgICAgImZpbGVQYXRoIjogImJyb3dzZXJfZHJpdmVyLm9zeF9jaHJvbWVfZHJpdmVy
IgorICAgICAgICB9LCAKKyAgICAgICAgInNhZmFyaSI6IHsKKyAgICAgICAgICAgICJtb2R1bGVO
YW1lIjogIk9TWFNhZmFyaURyaXZlciIsIAorICAgICAgICAgICAgImZpbGVQYXRoIjogImJyb3dz
ZXJfZHJpdmVyLm9zeF9zYWZhcmlfZHJpdmVyIgorICAgICAgICB9CisgICAgfSwKKyAgICAiaW9z
IjogeworICAgICAgICAgInNhZmFyaSI6IHsKKyAgICAgICAgICAgICJtb2R1bGVOYW1lIjogImlP
U1NhZmFyaURyaXZlciIsIAorICAgICAgICAgICAgImZpbGVQYXRoIjogImJyb3dzZXJfZHJpdmVy
Lmlvc19zYWZhcmlfZHJpdmVyIgorICAgICAgICB9CisgICAgfSAKK30KZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9vc3hf
Y2hyb21lX2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9icm93c2VyX2RyaXZlci9vc3hfY2hyb21lX2RyaXZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Y2FhNThl
OGUxNjQ0MTNmYmY4MThiNTE5ZjdmYWQ2NjE0ZWU3ODc4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9j
aHJvbWVfZHJpdmVyLnB5CkBAIC0wLDAgKzEsMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRp
bWUKKworIyBXZSBhc3N1bWUgdGhhdCB0aGlzIGhhbmRsZSBjYW4gb25seSBiZSB1c2VkIHdoZW4g
dGhlIHBsYXRmb3JtIGlzIE9TWAorZnJvbSBBcHBLaXQgaW1wb3J0IE5TUnVubmluZ0FwcGxpY2F0
aW9uCitmcm9tIGJyb3dzZXJfZHJpdmVyIGltcG9ydCBCcm93c2VyRHJpdmVyCisKKworX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdQZXJmQXV0b1J1bicpCisKKworY2xhc3MgT1NYQ2hyb21lRHJp
dmVyKEJyb3dzZXJEcml2ZXIpOgorCisgICAgZGVmIHByZXBhcmVFbnYoc2VsZik6CisgICAgICAg
IHNlbGYuY2xvc2VCcm93c2VycygpCisgICAgICAgIHNlbGYuY2hyb21lUHJlZmVyZW5jZXMgPSBb
XQorCisgICAgZGVmIGxhdW5jaFVybChzZWxmLCB1cmwsIGJyb3dzZXJCdWlsZFBhdGg9Tm9uZSk6
CisgICAgICAgIF9sb2cuaW5mbygnTGF1bmNoaW5nIGNocm9tZTogJXMgd2l0aCB1cmw6ICVzJyAl
IChvcy5wYXRoLmpvaW4oYnJvd3NlckJ1aWxkUGF0aCwgJ0dvb2dsZSBDaHJvbWUuYXBwJyksIHVy
bCkpCisgICAgICAgICMgRklYTUU6IE1heSBuZWVkIHRvIGJlIG1vZGlmaWVkIGZvciBkZXZlbG9w
IGJ1aWxkLCBzdWNoIGFzIHNldHRpbmcgdXAgbGlicmFyaWVzCisgICAgICAgIHN1YnByb2Nlc3Mu
UG9wZW4oWydvcGVuJywgJy1hJywgb3MucGF0aC5qb2luKGJyb3dzZXJCdWlsZFBhdGgsICdHb29n
bGUgQ2hyb21lLmFwcCcpLCAnLS1hcmdzJywgJy0taG9tZXBhZ2UnLCB1cmxdICsgc2VsZi5jaHJv
bWVQcmVmZXJlbmNlcykuY29tbXVuaWNhdGUoKQorCisgICAgZGVmIGNsb3NlQnJvd3NlcnMoc2Vs
Zik6CisgICAgICAgIF9sb2cuaW5mbygnQ2xvc2luZyBhbGwgZXhpc3RpbmcgY2hyb21lIHByb2Nl
c3NlcycpCisgICAgICAgIGNocm9tZXMgPSBOU1J1bm5pbmdBcHBsaWNhdGlvbi5ydW5uaW5nQXBw
bGljYXRpb25zV2l0aEJ1bmRsZUlkZW50aWZpZXJfKCdjb20uZ29vZ2xlLkNocm9tZScpCisgICAg
ICAgIGZvciBjaHJvbWUgaW4gY2hyb21lczoKKyAgICAgICAgICAgIGNocm9tZS50ZXJtaW5hdGUo
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jy
b3dzZXJfZHJpdmVyL29zeF9zYWZhcmlfZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9zYWZhcmlfZHJpdmVyLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZiZjQ5MWQyZGM0OWUyNjUxNGYzMjE3NWUxY2IzMzRiYjlhYTlmMTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJv
d3Nlcl9kcml2ZXIvb3N4X3NhZmFyaV9kcml2ZXIucHkKQEAgLTAsMCArMSwzNiBAQAorIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJw
cm9jZXNzCitpbXBvcnQgdGltZQorCisjIFdlIGFzc3VtZSB0aGF0IHRoaXMgaGFuZGxlIGNhbiBv
bmx5IGJlIHVzZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXMgT1NYLgorZnJvbSBBcHBLaXQgaW1wb3J0
IE5TUnVubmluZ0FwcGxpY2F0aW9uCitmcm9tIGJyb3dzZXJfZHJpdmVyIGltcG9ydCBCcm93c2Vy
RHJpdmVyCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNz
IE9TWFNhZmFyaURyaXZlcihCcm93c2VyRHJpdmVyKToKKworICAgIGRlZiBwcmVwYXJlRW52KHNl
bGYpOgorICAgICAgICBzZWxmLmNsb3NlQnJvd3NlcnMoKQorICAgICAgICBzZWxmLnNhZmFyaVBy
ZWZlcmVuY2VzID0gWyItSG9tZVBhZ2UiLCAiYWJvdXQ6YmxhbmsiLCAiLVdhcm5BYm91dEZyYXVk
dWxlbnRXZWJzaXRlcyIsICIwIiwgIi1FeHRlbnNpb25zRW5hYmxlZCIsICIwIiwgIi1TaG93U3Rh
dHVzQmFyIiwgIjAiLCAiLU5ld1dpbmRvd0JlaGF2aW9yIiwgIjEiLCAiLU5ld1RhYkJlaGF2aW9y
IiwgIjEiXQorCisgICAgZGVmIGxhdW5jaFVybChzZWxmLCB1cmwsIGJyb3dzZXJCdWlsZFBhdGg9
Tm9uZSk6CisgICAgICAgIGFyZ3MgPSBbb3MucGF0aC5qb2luKGJyb3dzZXJCdWlsZFBhdGgsICdT
YWZhcmkuYXBwL0NvbnRlbnRzL01hY09TL1NhZmFyaScpXQorICAgICAgICBhcmdzLmV4dGVuZChz
ZWxmLnNhZmFyaVByZWZlcmVuY2VzKQorICAgICAgICBfbG9nLmluZm8oJ0xhdW5jaGluZyBzYWZh
cmk6ICVzIHdpdGggdXJsOiAlcycgJSAoYXJnc1swXSwgdXJsKSkKKyAgICAgICAgc3VicHJvY2Vz
cy5Qb3BlbihhcmdzLCBlbnY9eydEWUxEX0ZSQU1FV09SS19QQVRIJzogYnJvd3NlckJ1aWxkUGF0
aCwgJ0RZTERfTElCUkFSWV9QQVRIJzogYnJvd3NlckJ1aWxkUGF0aH0sIHN0ZGluPXN1YnByb2Nl
c3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkK
KyAgICAgICAgIyBTdG9wIGZvciBpbml0aWFsaXphdGlvbiBvZiB0aGUgc2FmYXJpIHByb2Nlc3Ms
IG90aGVyd2lzZSwgb3BlbgorICAgICAgICAjIGNvbW1hbmQgbWF5IHVzZSB0aGUgc3lzdGVtIHNh
ZmFyaS4KKyAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsn
b3BlbicsIHVybF0pCisKKyAgICBkZWYgY2xvc2VCcm93c2VycyhzZWxmKToKKyAgICAgICAgX2xv
Zy5pbmZvKCdDbG9zaW5nIGFsbCBleGlzdGluZyBzYWZhcmkgcHJvY2Vzc2VzJykKKyAgICAgICAg
c2FmYXJpSW5zdGFuY2VzID0gTlNSdW5uaW5nQXBwbGljYXRpb24ucnVubmluZ0FwcGxpY2F0aW9u
c1dpdGhCdW5kbGVJZGVudGlmaWVyXygnY29tLmFwcGxlLlNhZmFyaScpCisgICAgICAgIGZvciBz
YWZhcmlJbnN0YW5jZSBpbiBzYWZhcmlJbnN0YW5jZXM6CisgICAgICAgICAgICBzYWZhcmlJbnN0
YW5jZS50ZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5j
aG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9KZXRTdHJlYW0ucGF0Y2ggYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL0pldFN0cmVhbS5wYXRjaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43ZTBlNTc1MzNhZGRmOWQ2MmEwYjRmYjZjN2MyMWIwNGJlNjc0MDllCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Rh
dGEvcGF0Y2hlcy9KZXRTdHJlYW0ucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorZGlmZiAtLWdpdCBh
L0pldFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvSmV0U3RyZWFtRHJpdmVyLmpzIGIvSmV0U3RyZWFt
L0pldFN0cmVhbS0xLjAuMS9KZXRTdHJlYW1Ecml2ZXIuanMKK2luZGV4IDczZWU0MjAuLjYwZjU4
N2MgMTAwNjQ0CistLS0gYS9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL0pldFN0cmVhbURyaXZl
ci5qcworKysrIGIvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9KZXRTdHJlYW1Ecml2ZXIuanMK
K0BAIC00NDgsNiArNDQ4LDE0IEBAIHZhciBKZXRTdHJlYW0gPSAoZnVuY3Rpb24oKSB7CisgCisg
ICAgICAgICByZXR1cm4gcmF3UmVzdWx0czsKKyAgICAgfQorKyAgICAKKysgICAgZnVuY3Rpb24g
Y29tcHV0ZVJlZmluZWRSZXN1bHRzKCl7CisrICAgICAgICB2YXIgcmVzdWx0cyA9IHt9OworKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiZW5jaG1hcmtzLmxlbmd0aDsgKytpKSB7CisrICAg
ICAgICAgICAgcmVzdWx0c1tiZW5jaG1hcmtzW2ldLm5hbWVdID0geyJtZXRyaWNzIiA6IHsiU2Nv
cmUiIDogeyJjdXJyZW50IiA6IFtiZW5jaG1hcmtzW2ldLnRpbWVzXX19fTsKKysgICAgICAgIH0K
KysgICAgICAgIHJldHVybiB7IkpldFN0cmVhbSI6IHsibWV0cmljcyIgOiB7IlNjb3JlIiA6IFsi
R2VvbWV0cmljIl19LCAidGVzdHMiIDogcmVzdWx0c319OworKyAgICB9CisgCisgICAgIGZ1bmN0
aW9uIGVuZCgpCisgICAgIHsKK0BAIC00NTgsNiArNDY2LDIzIEBAIHZhciBKZXRTdHJlYW0gPSAo
ZnVuY3Rpb24oKSB7CisgICAgICAgICBpc1J1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgIGhhc0Fs
cmVhZHlSdW4gPSB0cnVlOworICAgICAgICAgcHJlcGFyZVRvU3RhcnQoKTsKKysgICAgICAgIC8v
IHN1Ym1pdCByZXN1bHQgdG8gc2VydmVyCisrICAgICAgICByZXN1bHRzID0gSlNPTi5zdHJpbmdp
ZnkoY29tcHV0ZVJlZmluZWRSZXN1bHRzKCkpOworKyAgICAgICAgdmFyIHhociA9IG5ldyBYTUxI
dHRwUmVxdWVzdCgpOworKyAgICAgICAgeGhyLm9wZW4oIlBPU1QiLCAiL3JlcG9ydCIpOworKyAg
ICAgICAKKysgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCAiYXBw
bGljYXRpb24vanNvbiIpOworKyAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQt
bGVuZ3RoIiwgcmVzdWx0cy5sZW5ndGgpOworKyAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIo
IkNvbm5lY3Rpb24iLCAiY2xvc2UiKTsKKysgCisrICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hh
bmdlID0gZnVuY3Rpb24oKSB7CisrICAgICAgICBpZih4aHIucmVhZHlTdGF0ZSA9PSBYTUxIdHRw
UmVxdWVzdC5ET05FICYmIHhoci5zdGF0dXMgPT0gMjAwKSB7CisrICAgICAgICAgICAgICAgIGNs
b3NlUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworKyAgICAgICAgICAgICAgICBjbG9z
ZVJlcXVlc3Qub3BlbigiR0VUIiwgIi9zaHV0ZG93biIpOworKyAgICAgICAgICAgICAgICBjbG9z
ZVJlcXVlc3Quc2VuZCgpCisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgeGhy
LnNlbmQocmVzdWx0cyk7CisgICAgIH0KKyAKKyAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpCitkaWZm
IC0tZ2l0IGEvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sIGIvSmV0U3RyZWFt
L0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sCitpbmRleCBlMjc1MzVjLi4wMDEwODdkIDEwMDY0
NAorLS0tIGEvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sCisrKysgYi9KZXRT
dHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwKK0BAIC0zNCw4ICszNCwxMCBAQAorICAg
ICB3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKCkgeyBhbGxJc0dvb2QgPSBmYWxzZTsgfQorIAor
ICAgICBmdW5jdGlvbiBpbml0aWFsaXplKCkgeworLSAgICAgICAgaWYgKGFsbElzR29vZCkKKysg
ICAgICAgIGlmIChhbGxJc0dvb2QpIHsKKyAgICAgICAgICAgICBKZXRTdHJlYW0uaW5pdGlhbGl6
ZSgpOworKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb24g
PSAiamF2YXNjcmlwdDpKZXRTdHJlYW0uc3RhcnQoKSJ9LCAzMDAwKTsKKysgICAgICAgIH0KKyAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9keSIp
LmlubmVySFRNTCA9ICI8aDE+RVJST1I8L2gxPjxwPkVuY291bnRlcmVkIGVycm9ycyBkdXJpbmcg
cGFnZSBsb2FkLiBSZWZ1c2luZyB0byBydW4gYSBwYXJ0aWFsIGJlbmNobWFyayBzdWl0ZS48L3A+
IjsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtf
cnVubmVyL2RhdGEvcGF0Y2hlcy9TcGVlZG9tZXRlci5wYXRjaCBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvU3BlZWRvbWV0ZXIucGF0Y2gKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzNiMGYzMmUxZWIzMjQ0YmMwMDQ0ODQ1MmI0ZjU3ZDA4MjkzMDU5ZgotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRh
L3BhdGNoZXMvU3BlZWRvbWV0ZXIucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK2RpZmYgLS1naXQg
YS9TcGVlZG9tZXRlci9GdWxsLmh0bWwgYi9TcGVlZG9tZXRlci9GdWxsLmh0bWwKK2luZGV4IDQx
OWI5ZjIuLjBiMDRjNjkgMTAwNjQ0CistLS0gYS9TcGVlZG9tZXRlci9GdWxsLmh0bWwKKysrKyBi
L1NwZWVkb21ldGVyL0Z1bGwuaHRtbAorQEAgLTcsNyArNyw2IEBACisgICAgIDxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvbWFpbi5qcyIgZGVmZXI+PC9zY3JpcHQ+CisgICAgIDxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcyIgZGVmZXI+PC9zY3JpcHQ+CisgICAgIDxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvYmVuY2htYXJrLXJlcG9ydC5qcyIgZGVmZXI+PC9zY3JpcHQ+Cist
ICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvc3RhdGlzdGljcy5qcyIgZGVmZXI+PC9zY3Jp
cHQ+CisgICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdHMuanMiIGRlZmVyPjwvc2NyaXB0
PgorIDwvaGVhZD4KKyA8Ym9keT4KK2RpZmYgLS1naXQgYS9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
YmVuY2htYXJrLXJlcG9ydC5qcyBiL1NwZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcmVw
b3J0LmpzCitpbmRleCBjNGI0YzY0Li5jNDQ1M2NkIDEwMDY0NAorLS0tIGEvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL2JlbmNobWFyay1yZXBvcnQuanMKKysrKyBiL1NwZWVkb21ldGVyL3Jlc291cmNl
cy9iZW5jaG1hcmstcmVwb3J0LmpzCitAQCAtMSwxNiArMSw5IEBACisgLy8gVGhpcyBmaWxlIGNh
biBiZSBjdXN0b21pemVkIHRvIHJlcG9ydCByZXN1bHRzIGFzIG5lZWRlZC4KKyAKKyAoZnVuY3Rp
b24gKCkgeworLSAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyICYmIGxvY2F0aW9uLnNlYXJjaCAh
PSAnP3dlYmtpdCcgJiYgbG9jYXRpb24uaGFzaCAhPSAnI3dlYmtpdCcpCistICAgICAgICByZXR1
cm47CistCisgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworIAorLSAgICB2YXIgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworLSAgICBzY3JpcHRFbGVtZW50LnNyYyA9ICcuLi9yZXNv
dXJjZXMvcnVubmVyLmpzJzsKKy0gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRF
bGVtZW50KTsKKy0KKyAgICAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3N0eWxlJyk7CisgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9ICdwcmUgeyBwYWRk
aW5nLXRvcDogNjAwcHg7IH0nOworICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxl
RWxlbWVudCk7CitAQCAtMzYsMTAgKzI5LDggQEAKKyAgICAgICAgICAgICAgICAgICAgIG5hbWU6
IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdG9yOiBhZ2dyZWdhdG9yfTsKKyAg
ICAgICAgICAgICB9CistICAgICAgICAgICAgUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3Vy
ZVZhbHVlc0FzeW5jKGNyZWF0ZVRlc3QobnVsbCwgJ1RvdGFsJykpOworICAgICAgICAgfSwKKyAg
ICAgICAgIGRpZFJ1blN1aXRlczogZnVuY3Rpb24gKG1lYXN1cmVkVmFsdWVzKSB7CistICAgICAg
ICAgICAgUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMobWVhc3VyZWRWYWx1ZXMudG90
YWwpOworICAgICAgICAgICAgIHZhbHVlc0J5SXRlcmF0aW9uLnB1c2gobWVhc3VyZWRWYWx1ZXMu
dGVzdHMpOworICAgICAgICAgfSwKKyAgICAgICAgIGRpZEZpbmlzaExhc3RJdGVyYXRpb246IGZ1
bmN0aW9uICgpIHsKK0BAIC01MiwxOSArNDMsMzAgQEAKKyAgICAgICAgICAgICAgICAgdmFsdWVz
LnB1c2godmFsdWUpOworICAgICAgICAgICAgICAgICB2YWx1ZXMuYWdncmVnYXRvciA9IGFnZ3Jl
Z2F0b3I7CisgICAgICAgICAgICAgfQorLQorKyAgICAgICAgICAgIHZhciBkaWN0ID0ge30KKysg
ICAgICAgICAgICBmdW5jdGlvbiBhZGRUb0RpY3Rpb25hcnlWYWx1ZSh2YWx1ZSwgc3VpdGVOYW1l
LCB0ZXN0TmFtZSwgc3VidGVzdE5hbWUpIHsKKysgICAgICAgICAgICAgICAgZGljdFsiU3BlZWRv
bWV0ZXIiXSA9IGRpY3RbIlNwZWVkb21ldGVyIl0gfHwgeyAibWV0cmljcyIgOiB7ICJUaW1lIiA6
IFsgIlRvdGFsIiwgXSB9LCAidGVzdHMiIDoge319OworKyAgICAgICAgICAgICAgICBkaWN0WyJT
cGVlZG9tZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV0gPSBkaWN0WyJTcGVlZG9tZXRlciJdWyJ0
ZXN0cyJdW3N1aXRlTmFtZV0gfHwgeyJtZXRyaWNzIiA6IHsgIlRpbWUiIDogWyAiVG90YWwiLCBd
IH0sICJ0ZXN0cyIgOiB7fX07CisrICAgICAgICAgICAgICAgIGRpY3RbIlNwZWVkb21ldGVyIl1b
InRlc3RzIl1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV0gPSBkaWN0WyJTcGVlZG9tZXRl
ciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV1bInRlc3RzIl1bdGVzdE5hbWVdIHx8IHsgIm1ldHJpY3Mi
IDogeyAiVGltZSIgOiBbICJUb3RhbCIsIF0gfSwgInRlc3RzIiA6IHt9fTsKKysgICAgICAgICAg
ICAgICAgZGljdFsiU3BlZWRvbWV0ZXIiXVsidGVzdHMiXVtzdWl0ZU5hbWVdWyJ0ZXN0cyJdW3Rl
c3ROYW1lXVsidGVzdHMiXVtzdWJ0ZXN0TmFtZV0gPSBkaWN0WyJTcGVlZG9tZXRlciJdWyJ0ZXN0
cyJdW3N1aXRlTmFtZV1bInRlc3RzIl1bdGVzdE5hbWVdWyJ0ZXN0cyJdW3N1YnRlc3ROYW1lXSB8
fCB7ICJtZXRyaWNzIiA6IHsgIlRpbWUiIDogeyAiY3VycmVudCIgOiBbW11dIH0gfX07CisrICAg
ICAgICAgICAgICAgIGRpY3RbIlNwZWVkb21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXVsidGVz
dHMiXVt0ZXN0TmFtZV1bInRlc3RzIl1bc3VidGVzdE5hbWVdWyJtZXRyaWNzIl1bIlRpbWUiXVsi
Y3VycmVudCJdWzBdLnB1c2godmFsdWUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICAK
KyAgICAgICAgICAgICB2YWx1ZXNCeUl0ZXJhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChtZWFzdXJl
ZFZhbHVlcykgeworICAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWl0ZU5hbWUgaW4gbWVhc3Vy
ZWRWYWx1ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgIHZhciBzdWl0ZSA9IG1lYXN1cmVkVmFs
dWVzW3N1aXRlTmFtZV07CisgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB0ZXN0TmFtZSBp
biBzdWl0ZS50ZXN0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0ID0gc3Vp
dGUudGVzdHNbdGVzdE5hbWVdOworLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHN1
YnRlc3ROYW1lIGluIHRlc3QudGVzdHMpCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgc3VidGVzdE5hbWUgaW4gdGVzdC50ZXN0cykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRUb01lYXN1cmVkVmFsdWUodGVzdC50ZXN0c1tzdWJ0ZXN0TmFtZV0sIHN1aXRlTmFt
ZSArICcvJyArIHRlc3ROYW1lICsgJy8nICsgc3VidGVzdE5hbWUpOworKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRUb0RpY3Rpb25hcnlWYWx1ZSh0ZXN0LnRlc3RzW3N1YnRlc3ROYW1l
XSwgc3VpdGVOYW1lLCB0ZXN0TmFtZSwgc3VidGVzdE5hbWUpOworKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb01lYXN1cmVkVmFsdWUodGVz
dC50b3RhbCwgc3VpdGVOYW1lICsgJy8nICsgdGVzdE5hbWUsICdUb3RhbCcpOworICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgYWRkVG9NZWFzdXJlZFZhbHVlKHN1
aXRlLnRvdGFsLCBzdWl0ZU5hbWUsICdUb3RhbCcpOworICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgfSk7CisrICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBKU09OLnN0cmluZ2lmeShk
aWN0KTsKKyAKKyAgICAgICAgICAgICB2YXIgZnVsbE5hbWVzID0gbmV3IEFycmF5OworICAgICAg
ICAgICAgIGZvciAodmFyIGZ1bGxOYW1lIGluIG1lYXN1cmVkVmFsdWVzQnlGdWxsTmFtZSkKK0BA
IC03Miw4ICs3NCwyMiBAQAorIAorICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnVs
bE5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBtZWFz
dXJlZFZhbHVlc0J5RnVsbE5hbWVbZnVsbE5hbWVzW2ldXTsKKy0gICAgICAgICAgICAgICAgUGVy
ZlRlc3RSdW5uZXIucmVwb3J0VmFsdWVzKGNyZWF0ZVRlc3QoZnVsbE5hbWVzW2ldLCB2YWx1ZXMu
YWdncmVnYXRvciwgaSArIDEgPT0gZnVsbE5hbWVzLmxlbmd0aCksIHZhbHVlcyk7CisgICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKysg
ICAgICAgICAgICB4aHIub3BlbigiUE9TVCIsICIvcmVwb3J0Iik7CisrIAorKyAgICAgICAgICAg
IHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIp
OworKyAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIHJl
c3VsdHMubGVuZ3RoKTsKKysgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29ubmVj
dGlvbiIsICJjbG9zZSIpOworKyAKKysgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdl
ID0gZnVuY3Rpb24oKSB7CisrICAgICAgICAgICAgICAgIGlmKHhoci5yZWFkeVN0YXRlID09IFhN
TEh0dHBSZXF1ZXN0LkRPTkUgJiYgeGhyLnN0YXR1cyA9PSAyMDApIHsKKysgICAgICAgICAgICAg
ICAgICAgIHZhciBjbG9zZVJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKysgICAgICAg
ICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5vcGVuKCJHRVQiLCAiL3NodXRkb3duIik7CisrICAg
ICAgICAgICAgICAgICAgICBjbG9zZVJlcXVlc3Quc2VuZCgpCisrICAgICAgICAgICAgICAgIH0K
KysgICAgICAgICAgICB9CisrICAgICAgICAgICAgeGhyLnNlbmQocmVzdWx0cyk7CisgICAgICAg
ICB9CisgICAgIH07CisgfSkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
YmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL2pldHN0cmVhbS5wbGFuIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvamV0c3RyZWFtLnBsYW4KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOGRlMTNmNmI0ZWU0MDdkYjEyMWU3ZmU4NTBiYzk0MGNiODM5MjJmNwotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRh
L3BsYW5zL2pldHN0cmVhbS5wbGFuCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAiaHR0cF9zZXJ2
ZXJfZHJpdmVyIjogIlNpbXBsZUhUVFBTZXJ2ZXJEcml2ZXIiLCAKKyAgICAiYmVuY2htYXJrcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgInRpbWVvdXQiIDogNjAwLAorICAgICAgICAgICAg
ImNvdW50IjogNSwKKyAgICAgICAgICAgICJiZW5jaG1hcmtfYnVpbGRlciI6ICJKZXRTdHJlYW1C
ZW5jaG1hcmtCdWlsZGVyIiwKKyAgICAgICAgICAgICJvcmlnaW5hbF9iZW5jaG1hcmsiOiAiLi4v
Li4vLi4vLi4vUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0iLAorICAgICAgICAgICAgImJlbmNo
bWFya19wYXRjaCI6ICJkYXRhL3BhdGNoZXMvSmV0U3RyZWFtLnBhdGNoIiwKKyAgICAgICAgICAg
ICJlbnRyeV9wb2ludCI6ICJKZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwiLAor
ICAgICAgICAgICAgInJlc3VsdF93cmFwcGVyIjogIk1lcmdlUmVzdWx0V3JhcHBlciIsCisgICAg
ICAgICAgICAib3V0cHV0X2ZpbGUiOiAiamV0c3RyZWFtLnJlc3VsdCIKKyAgICAgICAgfQorICAg
IF0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9kYXRhL3BsYW5zL3NwZWVkb21ldGVyLnBsYW4gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9zcGVlZG9tZXRlci5wbGFuCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5
ZjA3NmI4MzYyODYzZDVjMGJmMGRhZjQ0YjJkMGNkNmYwNmEwNmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9zcGVl
ZG9tZXRlci5wbGFuCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAiYmVuY2htYXJrcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImJlbmNobWFya19idWlsZGVyIjogIkdlbmVyaWNCZW5jaG1h
cmtCdWlsZGVyIiwKKyAgICAgICAgICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiZGF0YS9wYXRjaGVz
L1NwZWVkb21ldGVyLnBhdGNoIiwKKyAgICAgICAgICAgICJvcmlnaW5hbF9iZW5jaG1hcmsiOiAi
Li4vLi4vLi4vLi4vUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlciIsCisgICAgICAgICAgICAi
Y291bnQiOiA1LAorICAgICAgICAgICAgImVudHJ5X3BvaW50IjogIlNwZWVkb21ldGVyL0Z1bGwu
aHRtbCIsCisgICAgICAgICAgICAib3V0cHV0X2ZpbGUiOiAic3BlZWRvbWV0ZXIucmVzdWx0IiwK
KyAgICAgICAgICAgICJyZXN1bHRfd3JhcHBlciI6ICJNZXJnZVJlc3VsdFdyYXBwZXIiLAorICAg
ICAgICAgICAgInRpbWVvdXQiOiA2MDAKKyAgICAgICAgfQorICAgIF0sCisgICAgImh0dHBfc2Vy
dmVyX2RyaXZlciI6ICJTaW1wbGVIVFRQU2VydmVyRHJpdmVyIgorfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2dlbmVyaWNfZmFjdG9yeS5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9nZW5lcmljX2ZhY3Rvcnku
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDcxMGQ0YTJjZGVhZjU4OTQ5NTQzNjU0NTgxNTFhYTU0ZDRkNjY1Zgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9nZW5lcmljX2ZhY3RvcnkucHkKQEAgLTAsMCArMSwzMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKKworZnJvbSB1dGlscyBpbXBvcnQgbG9h
ZE1vZHVsZSwgTW9kdWxlTm90Rm91bmRFcnJvcgorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKKworCitjbGFzcyBHZW5lcmljRmFjdG9yeShvYmplY3QpOgorCisgICAgcHJv
ZHVjdHMgPSBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaXRlcmF0ZUdldEl0ZW0o
Y2xzLCBvcHRpb25zLCBrZXlzKToKKyAgICAgICAgcmV0ID0gb3B0aW9ucworICAgICAgICBmb3Ig
a2V5IGluIGtleXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0ID0gcmV0
Ll9fZ2V0aXRlbV9fKGtleSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAg
ICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgY3JlYXRlKGNscywgZGVzY3JpcHRpb25zKToKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgcmV0dXJuIGxvYWRNb2R1bGUoY2xzLml0ZXJhdGVHZXRJdGVtKGNscy5wcm9kdWN0cywgZGVz
Y3JpcHRpb25zKSkoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByYWlzZQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVy
X2RyaXZlci9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJi
MmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZl
ci90d2lzdGVkX2h0dHBfc2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1h
cmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlci90d2lzdGVkX2h0dHBfc2Vy
dmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjBkZjc1ZjY1YWRhMzk3N2I5ZDUyZDFmNmQ3ZmNjOTY0OTQwOTAz
ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19y
dW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyL3R3aXN0ZWRfaHR0cF9zZXJ2ZXIu
cHkKQEAgLTAsMCArMSwzMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2Zyb20gdHdpc3Rl
ZC53ZWIgaW1wb3J0IHN0YXRpYywgc2VydmVyCitmcm9tIHR3aXN0ZWQud2ViLnJlc291cmNlIGlt
cG9ydCBSZXNvdXJjZQorZnJvbSB0d2lzdGVkLmludGVybmV0IGltcG9ydCByZWFjdG9yCitpbXBv
cnQgYXJncGFyc2UKK2ltcG9ydCBzeXMKKworCitjbGFzcyBTZXJ2ZXJDb250cm9sKFJlc291cmNl
KToKKyAgICBpc0xlYWYgPSBUcnVlCisKKyAgICBkZWYgcmVuZGVyX0dFVChzZWxmLCByZXF1ZXN0
KToKKyAgICAgICAgcmVhY3Rvci5zdG9wKCkKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYg
cmVuZGVyX1BPU1Qoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocmVx
dWVzdC5jb250ZW50LmdldHZhbHVlKCkpCisgICAgICAgIHJldHVybiAnT0snCisKKworaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNl
cigKKyAgICAgICAgZGVzY3JpcHRpb249J3B5dGhvbiBUd2lzdGVkSFRUUFNlcnZlci5weSB3ZWJy
b290JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd3ZWJyb290JykKKyAgICBhcmdzID0gcGFy
c2VyLnBhcnNlX2FyZ3MoKQorICAgIHdlYnJvb3QgPSBzdGF0aWMuRmlsZShhcmdzLndlYnJvb3Qp
CisgICAgc2VydmVyQ29udHJvbCA9IFNlcnZlckNvbnRyb2woKQorICAgIHdlYnJvb3QucHV0Q2hp
bGQoJ3NodXRkb3duJywgc2VydmVyQ29udHJvbCkKKyAgICB3ZWJyb290LnB1dENoaWxkKCdyZXBv
cnQnLCBzZXJ2ZXJDb250cm9sKQorICAgIHJlYWN0b3IubGlzdGVuVENQKDAsIHNlcnZlci5TaXRl
KHdlYnJvb3QpKQorICAgIHJlYWN0b3IucnVuKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJf
ZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBf
c2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RkY2ZkMTA2
MTAwNGRhODc5OGI5N2U3ZDM0YmI0MzQ5Zjc4YTRhMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0
cF9zZXJ2ZXJfZHJpdmVyLnB5CkBAIC0wLDAgKzEsMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorCitmcm9tIGFiYyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKKworCitjbGFzcyBIVFRQU2VydmVy
RHJpdmVyKG9iamVjdCk6CisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHNlcnZlKHNlbGYs
IHdlYlJvb3QpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYg
ZmV0Y2hSZXN1bHQoc2VsZik6CisgICAgICAgIHJldHVybiAnZmFrZSByZXN1bHQnCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJf
ZHJpdmVyL2h0dHBfc2VydmVyX2RyaXZlcl9mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2
ZXJfZmFjdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjU1NTEyZDY3ODQ0YWRjY2JlYzM4MTNlYTE1ZTI4
NDVhNjE4MGVmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5j
aG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJfZmFjdG9y
eS5weQpAQCAtMCwwICsxLDIzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtf
cnVubmVyLmdlbmVyaWNfZmFjdG9yeSBpbXBvcnQgR2VuZXJpY0ZhY3RvcnkKKworCitkcml2ZXJG
aWxlTmFtZSA9ICdodHRwX3NlcnZlcl9kcml2ZXJzLmpzb24nCisKKwordHJ5OgorICAgIGRyaXZl
cnMgPSBqc29uLmxvYWQob3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9f
KSwgZHJpdmVyRmlsZU5hbWUpLCAncicpKQorICAgIGlmIG5vdCBkcml2ZXJzOgorICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIk5vIGRyaXZlciBpbiAlcyB3YXMgZm91bmQiICUgKGRyaXZlckZpbGVO
YW1lKSkKK2V4Y2VwdDoKKyAgICByYWlzZSBFeGNlcHRpb24oIk5vIGRyaXZlciBpbiAlcyB3YXMg
Zm91bmQiICUgKGRyaXZlckZpbGVOYW1lKSkKKworCitjbGFzcyBIVFRQU2VydmVyRHJpdmVyRmFj
dG9yeShHZW5lcmljRmFjdG9yeSk6CisKKyAgICBwcm9kdWN0cyA9IGRyaXZlcnMKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9k
cml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVycy5qc29uIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJzLmpz
b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmJiM2JjZGNiNjlkNGU1NTMxYzQ5OWVkOWE2N2U4M2QyYTc3Mjk4OQot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVycy5qc29uCkBAIC0wLDAgKzEs
NiBAQAoreworICAiU2ltcGxlSFRUUFNlcnZlckRyaXZlciI6IHsKKyAgICAibW9kdWxlTmFtZSI6
ICJTaW1wbGVIVFRQU2VydmVyRHJpdmVyIiwgCisgICAgImZpbGVQYXRoIjogImh0dHBfc2VydmVy
X2RyaXZlci5zaW1wbGVfaHR0cF9zZXJ2ZXJfZHJpdmVyIgorICB9Cit9CmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVy
L3NpbXBsZV9odHRwX3NlcnZlcl9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL3NpbXBsZV9odHRwX3NlcnZlcl9kcml2
ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjRmM2QyOTIzYjdiOGM4MWNmMWQ5MjQyNjEwYjY5NTk1ODdlMDc4
YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvc2ltcGxlX2h0dHBfc2VydmVyX2RyaXZlci5weQpAQCAt
MCwwICsxLDgxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1w
b3J0IHRpbWUKKworZnJvbSBodHRwX3NlcnZlcl9kcml2ZXIgaW1wb3J0IEhUVFBTZXJ2ZXJEcml2
ZXIKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgU2lt
cGxlSFRUUFNlcnZlckRyaXZlcihIVFRQU2VydmVyRHJpdmVyKToKKworICAgICIiIlRoaXMgY2xh
c3MgZGVwZW5kcyBvbiB1bml4IGVudmlyb25tZW50LCBuZWVkIHRvIGJlIG1vZGlmaWVkIHRvIGFj
aGlldmUgY3Jvc3NwbGF0Zm9ybSBjb21wYWJpbGl0eQorICAgICIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlclByb2Nlc3MgPSBOb25lCisgICAgICAgIHNl
bGYuc2VydmVyUG9ydCA9IDAKKyAgICAgICAgIyBGSVhNRTogVGhpcyBtYXkgbm90IGJlIHJlbGlh
YmxlLgorICAgICAgICBfbG9nLmluZm8oJ0ZpbmRpbmcgdGhlIElQIGFkZHJlc3Mgb2YgY3VycmVu
dCBtYWNoaW5lJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5pcCA9IFsKKyAgICAg
ICAgICAgICAgICBpcCBmb3IgaXAgaW4gc29ja2V0LmdldGhvc3RieW5hbWVfZXgoCisgICAgICAg
ICAgICAgICAgICAgIHNvY2tldC5nZXRob3N0bmFtZSgpKVsyXSBpZiBub3QgaXAuc3RhcnRzd2l0
aCgiMTI3LiIpXVswXQorICAgICAgICAgICAgX2xvZy5pbmZvKCdJUCBvZiBjdXJyZW50IG1hY2hp
bmUgaXM6ICVzJyAlIHNlbGYuaXApCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIF9sb2cu
ZXJyb3IoJ0Nhbm5vdCBnZXQgdGhlIGlwIGFkZHJlc3Mgb2YgY3VycmVudCBtYWNoaW5lJykKKyAg
ICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgc2VydmUoc2VsZiwgd2Vicm9vdCk6CisgICAgICAg
IG9sZFdvcmtpbmdEaXJlY3RvcnkgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihvcy5w
YXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpCisgICAgICAgIF9sb2cuaW5m
bygnTGF1Y2huaW5nIGFuIGh0dHAgc2VydmVyJykKKyAgICAgICAgc2VsZi5zZXJ2ZXJQcm9jZXNz
ID0gc3VicHJvY2Vzcy5Qb3BlbihbJy91c3IvYmluL3B5dGhvbicsICdodHRwX3NlcnZlci90d2lz
dGVkX2h0dHBfc2VydmVyLnB5Jywgd2Vicm9vdF0sIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rk
b3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgb3Mu
Y2hkaXIob2xkV29ya2luZ0RpcmVjdG9yeSkKKyAgICAgICAgbWF4QXR0ZW1wdCA9IDUKKyAgICAg
ICAgaW50ZXJ2YWwgPSAwLjUKKyAgICAgICAgX2xvZy5pbmZvKCdTdGFydCB0byBmZXRjaGluZyB0
aGUgcG9ydCBudW1iZXIgb2YgdGhlIGh0dHAgc2VydmVyJykKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgaW1wb3J0IHBzdXRpbAorICAgICAgICAgICAgZm9yIGF0dGVtcHQgaW4geHJhbmdlKG1h
eEF0dGVtcHQpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5zZXJ2ZXJQb3J0ID0gcHN1dGlsLlByb2Nlc3MoCisgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnNlcnZlclByb2Nlc3MucGlkKS5jb25uZWN0aW9ucygpWzBdWzNdWzFdCisgICAgICAgICAg
ICAgICAgICAgIGlmIHNlbGYuc2VydmVyUG9ydDoKKyAgICAgICAgICAgICAgICAgICAgICAgIF9s
b2cuaW5mbygnSFRUUCBTZXJ2ZXIgaXMgc2VydmluZyBhdCBwb3J0OiAlZCcsIHNlbGYuc2VydmVy
UG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZXhj
ZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAg
ICBfbG9nLmluZm8oJ1NlcnZlciBwb3J0IGlzIG5vdCBmb3VuZCB0aGlzIHRpbWUsIHJldHJ5IGFm
dGVyICVmIHNlY29uZHMnICUgaW50ZXJ2YWwpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcChp
bnRlcnZhbCkKKyAgICAgICAgICAgICAgICBpbnRlcnZhbCAqPSAyCisgICAgICAgIGV4Y2VwdCBJ
bXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgYXR0ZW1w
dCBpbiB4cmFuZ2UobWF4QXR0ZW1wdCk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCcgJy5qb2luKFsnL3Vzci9z
YmluL2xzb2YnLCAnLWEnLCAnLWlUQ1AnLCAnLXNUQ1A6TElTVEVOJywgJy1wJywgc3RyKHNlbGYu
c2VydmVyUHJvY2Vzcy5waWQpXSksIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUs
IHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNl
cnZlclBvcnQgPSBpbnQocmUuZmluZGFsbCgnVENQIFwqOihcZCspIFwoTElTVEVOXCknLCBwLmNv
bW11bmljYXRlKClbMF0pWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2
ZXJQb3J0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnSFRUUCBTZXJ2
ZXIgaXMgc2VydmluZyBhdCBwb3J0OiAlZCcsIHNlbGYuc2VydmVyUG9ydCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVF
cnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAg
ZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAg
ICAgICAgICAgICAgIF9sb2cuaW5mbygnU2VydmVyIHBvcnQgaXMgbm90IGZvdW5kIHRoaXMgdGlt
ZSwgcmV0cnkgYWZ0ZXIgJWYgc2Vjb25kcycgJSBpbnRlcnZhbCkKKyAgICAgICAgICAgICAgICAg
ICAgdGltZS5zbGVlcChpbnRlcnZhbCkKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWwgKj0g
MgorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYg
YmFzZVVybChzZWxmKToKKyAgICAgICAgcmV0dXJuICJodHRwOi8vJXM6JWQiICUgKHNlbGYuaXAs
IHNlbGYuc2VydmVyUG9ydCkKKworICAgIGRlZiBmZXRjaFJlc3VsdChzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuc2VydmVyUHJvY2Vzcy5jb21tdW5pY2F0ZSgpWzBdCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dyYXBwZXIvX19p
bml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0
X3dyYXBwZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFl
Nzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5j
aG1hcmtfcnVubmVyL3Jlc3VsdF93cmFwcGVyL2Jhc2VfcmVzdWx0X3dyYXBwZXIucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0X3dyYXBwZXIvYmFzZV9y
ZXN1bHRfd3JhcHBlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYTQ4NjA4MDFiYzQzMzI5OGZmODM4M2ExMzI3
MmFhNzFhMmNjNDM1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL3Jlc3VsdF93cmFwcGVyL2Jhc2VfcmVzdWx0X3dyYXBwZXIucHkKQEAg
LTAsMCArMSw5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworZnJvbSBhYmMgaW1wb3J0IGFi
c3RyYWN0bWV0aG9kCisKKworY2xhc3MgQmFzZVJlc3VsdFdyYXBwZXIob2JqZWN0KToKKyAgICBA
YWJzdHJhY3RtZXRob2QKKyAgICBkZWYgd3JhcChzZWxmLCByZXN1bHRzKToKKyAgICAgICAgcGFz
cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3Jl
c3VsdF93cmFwcGVyL21lcmdlX3Jlc3VsdF93cmFwcGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL3Jlc3VsdF93cmFwcGVyL21lcmdlX3Jlc3VsdF93cmFwcGVy
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmU2NzI1MmE1MzQ3OTliYmY3YzQzZjdjNmVlNWExZjQ4NDUzMjBlOTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5u
ZXIvcmVzdWx0X3dyYXBwZXIvbWVyZ2VfcmVzdWx0X3dyYXBwZXIucHkKQEAgLTAsMCArMSwzNyBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2Zyb20gYmFzZV9yZXN1bHRfd3JhcHBlciBpbXBv
cnQgQmFzZVJlc3VsdFdyYXBwZXIKK2ltcG9ydCB0eXBlcworCisKK2NsYXNzIERpY3Rpb25hcnlN
ZXJnZXIoQmFzZVJlc3VsdFdyYXBwZXIpOgorICAgIGRlZiB3cmFwKHNlbGYsIGRpY3RzKToKKyAg
ICAgICAgaWYgbm90IGRpY3RzOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0
ID0ge30KKyAgICAgICAgZm9yIGRpYyBpbiBkaWN0czoKKyAgICAgICAgICAgIHJldCA9IHNlbGYu
bWVyZ2UocmV0LCBkaWMpCisgICAgICAgIHJldHVybiByZXQKKworICAgIEBjbGFzc21ldGhvZAor
ICAgIGRlZiBtZXJnZShjbHMsIGEsIGIpOgorICAgICAgICBhc3NlcnQoaXNpbnN0YW5jZShhLCB0
eXBlKGIpKSkKKyAgICAgICAgYXJnVHlwZSA9IHR5cGUoYSkKKyAgICAgICAgIyBzcGVjaWFsIGhh
bmRsZSBmb3IgbGlzdCB0eXBlLCBhbmQgc2hvdWxkIGJlIGhhbmRsZSBiZWZvcmUgZXF1YWwgY2hl
Y2sKKyAgICAgICAgaWYgYXJnVHlwZSA9PSB0eXBlcy5MaXN0VHlwZToKKyAgICAgICAgICAgIHJl
dHVybiBhICsgYgorICAgICAgICBpZiBhID09IGI6CisgICAgICAgICAgICByZXR1cm4gYQorICAg
ICAgICBpZiBhcmdUeXBlID09IHR5cGVzLkRpY3RUeXBlOgorICAgICAgICAgICAgcmVzdWx0ID0g
e30KKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGEuaXRlbXMoKToKKyAgICAgICAgICAg
ICAgICBpZiBrZXkgaW4gYjoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBjbHMu
bWVyZ2UodmFsdWUsIGJba2V5XSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBp
biBiLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiByZXN1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQKKyAgICAgICAgIyBmb3Igb3RoZXIgdHlwZXMKKyAgICAgICAgcmV0dXJuIGEgKyBiCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcmVzdWx0
X3dyYXBwZXIvcmVzdWx0X3dyYXBwZXJfZmFjdG9yeS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9yZXN1bHRfd3JhcHBlcl9mYWN0b3J5
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdmMWU1ZDFkOTk1ZDlmODg1Zjg0NDBkMjM1OGQ5MDgzMzk2MjNhY2QK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5u
ZXIvcmVzdWx0X3dyYXBwZXIvcmVzdWx0X3dyYXBwZXJfZmFjdG9yeS5weQpAQCAtMCwwICsxLDI0
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBqc29u
CitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLmdlbmVyaWNfZmFj
dG9yeSBpbXBvcnQgR2VuZXJpY0ZhY3RvcnkKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
X19uYW1lX18pCit3cmFwcGVyRmlsZU5hbWUgPSAncmVzdWx0X3dyYXBwZXJzLmpzb24nCisKKwor
dHJ5OgorICAgIHdyYXBwZXJzID0ganNvbi5sb2FkKG9wZW4ob3MucGF0aC5qb2luKG9zLnBhdGgu
ZGlybmFtZShfX2ZpbGVfXyksIHdyYXBwZXJGaWxlTmFtZSksICdyJykpCisgICAgaWYgbm90IHdy
YXBwZXJzOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGRyaXZlciBpbiAlcyB3YXMgZm91
bmQiICUgKHdyYXBwZXJGaWxlTmFtZSkpCitleGNlcHQ6CisgICAgcmFpc2UgRXhjZXB0aW9uKCJO
byBkcml2ZXIgaW4gJXMgd2FzIGZvdW5kIiAlICh3cmFwcGVyRmlsZU5hbWUpKQorCisKK2NsYXNz
IFJlc3VsdFdyYXBwZXJGYWN0b3J5KEdlbmVyaWNGYWN0b3J5KToKKworICAgIHByb2R1Y3RzID0g
d3JhcHBlcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9yZXN1bHRfd3JhcHBlci9yZXN1bHRfd3JhcHBlcnMuanNvbiBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9yZXN1bHRfd3JhcHBlci9yZXN1bHRfd3JhcHBlcnMu
anNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zODgwYzEyYTg0NmQ1NjBiZjJhMDQyNzk5MzZiNmQ2ZDg1NmFmMzY5
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVu
bmVyL3Jlc3VsdF93cmFwcGVyL3Jlc3VsdF93cmFwcGVycy5qc29uCkBAIC0wLDAgKzEsNiBAQAor
eworICAiTWVyZ2VSZXN1bHRXcmFwcGVyIjogeworICAgICJtb2R1bGVOYW1lIjogIkRpY3Rpb25h
cnlNZXJnZXIiLCAKKyAgICAiZmlsZVBhdGgiOiAicmVzdWx0X3dyYXBwZXIubWVyZ2VfcmVzdWx0
X3dyYXBwZXIiCisgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVu
Y2htYXJrX3J1bm5lci91dGlscy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmYwZmRlZTRmYmM3YWU0MjRhZmVhYTI4MjM2
YTQ1ZjQ4NzFmYzNlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL3V0aWxzLnB5CkBAIC0wLDAgKzEsNTEgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBsb2dnaW5nCisKKwor
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIE1vZHVsZU5vdEZv
dW5kRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworZGVmIGxvYWRNb2R1bGUobW9kdWxl
RGVzYyk6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBnZXRhdHRyKF9faW1wb3J0X18obW9kdWxl
RGVzY1snZmlsZVBhdGgnXSwgZ2xvYmFscygpLCBsb2NhbHMoKSwgbW9kdWxlRGVzY1snbW9kdWxl
TmFtZSddLCAtMSksIG1vZHVsZURlc2NbJ21vZHVsZU5hbWUnXSkKKyAgICAgICAgcmV0dXJuIHJl
dAorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcmFpc2UKKyAgICAgICAgcmFp
c2UgTW9kdWxlTm90Rm91bmRFcnJvcignTW9kdWxlICglcykgd2l0aCBwYXRoKCVzKSBpcyBub3Qg
Zm91bmQnICUgKG1vZHVsZURlc2NbJ21vZHVsZU5hbWUnXSwgbW9kdWxlRGVzY1snZmlsZVBhdGgn
XSkpCisKKworZGVmIGdldFBhdGhGcm9tUHJvamVjdFJvb3QocmVsYXRpdmVQYXRoVG9Qcm9qZWN0
Um9vdCk6CisgICAgIyBDaG9vc2UgdGhlIGRpcmVjdG9yeSBjb250YWlubmluZyBjdXJyZW50IGZp
bGUgYXMgc3RhcnQgcG9pbnQsCisgICAgIyBjb21wdXRlIHJlbGF0aXZlIHBhdGggYmFzZSBvbiB0
aGUgcGFyYW1ldGVyLAorICAgICMgYW5kIHJldHVybiBhbiBhYnNvbHV0ZSBwYXRoCisgICAgcmV0
dXJuIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgu
YWJzcGF0aChfX2ZpbGVfXykpLCByZWxhdGl2ZVBhdGhUb1Byb2plY3RSb290KSkKKworCisjIEJv
cnJvdyB0aGlzIGNvZGUgZnJvbQorIyAnaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9u
cy8yMjgxODUwL3RpbWVvdXQtZnVuY3Rpb24taWYtaXQtdGFrZXMtdG9vLWxvbmctdG8tZmluaXNo
JworY2xhc3MgVGltZW91dEVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIHRp
bWVvdXQ6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vjb25kcz0xLCBlcnJvcl9tZXNzYWdl
PSdUaW1lb3V0Jyk6CisgICAgICAgIHNlbGYuc2Vjb25kcyA9IHNlY29uZHMKKyAgICAgICAgc2Vs
Zi5lcnJvcl9tZXNzYWdlID0gZXJyb3JfbWVzc2FnZQorCisgICAgZGVmIGhhbmRsZV90aW1lb3V0
KHNlbGYsIHNpZ251bSwgZnJhbWUpOgorICAgICAgICByYWlzZSBUaW1lb3V0RXJyb3Ioc2VsZi5l
cnJvcl9tZXNzYWdlKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2lnbmFs
LnNpZ25hbChzaWduYWwuU0lHQUxSTSwgc2VsZi5oYW5kbGVfdGltZW91dCkKKyAgICAgICAgc2ln
bmFsLmFsYXJtKHNlbGYuc2Vjb25kcykKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2
YWx1ZSwgdHJhY2ViYWNrKToKKyAgICAgICAgc2lnbmFsLmFsYXJtKDApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251614</attachid>
            <date>2015-04-24 23:38:17 -0700</date>
            <delta_ts>2015-04-25 00:18:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144038-20150424233710.patch</filename>
            <type>text/plain</type>
            <size>49022</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMTM2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGMzYTBlZTY0MjZkMjllN2Y0YjU4Y2Y2NDMxMzRhYjJj
NmY1MzJhZS4uMjk3ZGUxMjg1YmIyZjFiOTU0OWQ2YmIzZWJmNGQ5MjNkOWM3ZTRiMiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEw
MiBAQAorMjAxNS0wNC0yNCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1QGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgYSBzY3JpcHQgdG8gcnVuIFNwZWVkb21ldGVyIGFuZCBKZXRTdHJlYW0gb24gYSBi
cm93c2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDQwMzgKKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EKKworICAgICAgICBXcmFw
cGVyIHNjcmlwdCB0byBydW4gYmVuY2htYXJrCisgICAgICAgICogU2NyaXB0cy9ydW4tYmVuY2ht
YXJrOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICBBZGQgJ2JlbmNobWFya19ydW5u
ZXInIGluIHdlYmtpdHB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9SRUFETUUubWQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2ht
YXJrX3J1bm5lci9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgIE1vZHVsZXMgdGhhdCBidWls
ZCBiZW5jaG1hcmsgZm9yIHVzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2JlbmNo
bWFya19idWlsZGVyX2ZhY3RvcnkucHk6IEFkZGVkLgorICAgICAgICAoQmVuY2htYXJrQnVpbGRl
ckZhY3RvcnkpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9i
ZW5jaG1hcmtfYnVpbGRlci9iZW5jaG1hcmtfYnVpbGRlcnMuanNvbjogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2dl
bmVyaWNfYmVuY2htYXJrX2J1aWxkZXIucHk6IEFkZGVkLgorICAgICAgICAoR2VuZXJpY0JlbmNo
bWFya0J1aWxkZXIpOgorICAgICAgICAoR2VuZXJpY0JlbmNobWFya0J1aWxkZXIucHJlcGFyZSk6
CisgICAgICAgIChHZW5lcmljQmVuY2htYXJrQnVpbGRlci5fY29weUJlbmNobWFya1RvVGVtcERp
cik6CisgICAgICAgIChHZW5lcmljQmVuY2htYXJrQnVpbGRlci5fYXBwbHlQYXRjaCk6CisgICAg
ICAgIChHZW5lcmljQmVuY2htYXJrQnVpbGRlci5jbGVhbik6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2pldHN0cmVhbV9iZW5j
aG1hcmtfYnVpbGRlci5weTogQWRkZWQuCisgICAgICAgIChKZXRTdHJlYW1CZW5jaG1hcmtCdWls
ZGVyKToKKyAgICAgICAgKEpldFN0cmVhbUJlbmNobWFya0J1aWxkZXIucHJlcGFyZSk6CisgICAg
ICAgIChKZXRTdHJlYW1CZW5jaG1hcmtCdWlsZGVyLl9ydW5DcmVhdGVTY3JpcHQpOgorICAgICAg
ICBNb2R1bGUgdGhhdCBtYXN0ZXJzIHRoZSB3aG9sZSBwcm9jZXNzIG9mIHJ1bm5pbmcgYmVuY2ht
YXJrcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2ht
YXJrX3J1bm5lci5weTogQWRkZWQuCisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIpOgorICAgICAg
ICAoQmVuY2htYXJrUnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKEJlbmNobWFya1J1bm5lci5l
eGVjdXRlKToKKyAgICAgICAgKEJlbmNobWFya1J1bm5lci5kdW1wKToKKyAgICAgICAgKEJlbmNo
bWFya1J1bm5lci53cmFwKToKKyAgICAgICAgKEJlbmNobWFya1J1bm5lci5tZXJnZSk6CisgICAg
ICAgIE1vZHVsZXMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIGxhdW5jaCBzcGVjaWZpYyBicm93
c2VyIHdpdGggZ2l2ZW4gdXJsLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci9icm93c2VyX2RyaXZlci9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJp
dmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKEJyb3dzZXJEcml2ZXIpOgorICAgICAgICAoQnJvd3Nl
ckRyaXZlci5wcmVwYXJlRW52KToKKyAgICAgICAgKEJyb3dzZXJEcml2ZXIubGF1bmNoVXJsKToK
KyAgICAgICAgKEJyb3dzZXJEcml2ZXIuY2xvc2VCcm93c2VyKToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXJf
ZmFjdG9yeS5weTogQWRkZWQuCisgICAgICAgIChCcm93c2VyRHJpdmVyRmFjdG9yeSk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jy
b3dzZXJfZHJpdmVycy5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X2Nocm9tZV9kcml2ZXIucHk6IEFkZGVk
LgorICAgICAgICAoT1NYQ2hyb21lRHJpdmVyKToKKyAgICAgICAgKE9TWENocm9tZURyaXZlci5w
cmVwYXJlRW52KToKKyAgICAgICAgKE9TWENocm9tZURyaXZlci5sYXVuY2hVcmwpOgorICAgICAg
ICAoT1NYQ2hyb21lRHJpdmVyLmNsb3NlQnJvd3NlcnMpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9vc3hfc2FmYXJpX2RyaXZlci5w
eTogQWRkZWQuCisgICAgICAgIChPU1hTYWZhcmlEcml2ZXIpOgorICAgICAgICAoT1NYU2FmYXJp
RHJpdmVyLnByZXBhcmVFbnYpOgorICAgICAgICAoT1NYU2FmYXJpRHJpdmVyLmxhdW5jaFVybCk6
CisgICAgICAgIChPU1hTYWZhcmlEcml2ZXIuY2xvc2VCcm93c2Vycyk6CisgICAgICAgIEZvbGRl
ciB0aGF0IGNvbnRhaW5zIGFsbCBkYXRhLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVu
Y2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvSmV0U3RyZWFtLnBhdGNoOiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL1NwZWVk
b21ldGVyLnBhdGNoOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFy
a19ydW5uZXIvZGF0YS9wbGFucy9qZXRzdHJlYW0ucGxhbjogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvc3BlZWRvbWV0ZXIucGxh
bjogQWRkZWQuCisgICAgICAgIERlZmluZSBhIGdlbmVyaWMgcHVycG9zZSBmYWN0b3J5LgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9nZW5lcmljX2ZhY3Rvcnku
cHk6IEFkZGVkLgorICAgICAgICAoR2VuZXJpY0ZhY3RvcnkpOgorICAgICAgICAoR2VuZXJpY0Zh
Y3RvcnkuaXRlcmF0ZUdldEl0ZW0pOgorICAgICAgICAoR2VuZXJpY0ZhY3RvcnkuY3JlYXRlKToK
KyAgICAgICAgTW9kdWxlIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGxhdW5jaGluZyBhIGh0dHAg
c2VydmVyLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRw
X3NlcnZlcl9kcml2ZXIvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXIvdHdp
c3RlZF9odHRwX3NlcnZlci5weTogQWRkZWQuCisgICAgICAgIChTZXJ2ZXJDb250cm9sKToKKyAg
ICAgICAgKFNlcnZlckNvbnRyb2wucmVuZGVyX0dFVCk6CisgICAgICAgIChTZXJ2ZXJDb250cm9s
LnJlbmRlcl9QT1NUKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5u
ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyX2RyaXZlci5weTogQWRkZWQuCisgICAg
ICAgIChIVFRQU2VydmVyRHJpdmVyKToKKyAgICAgICAgKEhUVFBTZXJ2ZXJEcml2ZXIuc2VydmUp
OgorICAgICAgICAoSFRUUFNlcnZlckRyaXZlci5mZXRjaFJlc3VsdCk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3Nl
cnZlcl9kcml2ZXJfZmFjdG9yeS5weTogQWRkZWQuCisgICAgICAgIChIVFRQU2VydmVyRHJpdmVy
RmFjdG9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0
dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJzLmpzb246IEFkZGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIv
c2ltcGxlX2h0dHBfc2VydmVyX2RyaXZlci5weTogQWRkZWQuCisgICAgICAgIChTaW1wbGVIVFRQ
U2VydmVyRHJpdmVyKToKKyAgICAgICAgKFNpbXBsZUhUVFBTZXJ2ZXJEcml2ZXIuZGVwZW5kcyk6
CisgICAgICAgIChTaW1wbGVIVFRQU2VydmVyRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKFNp
bXBsZUhUVFBTZXJ2ZXJEcml2ZXIuc2VydmUpOgorICAgICAgICAoU2ltcGxlSFRUUFNlcnZlckRy
aXZlci5iYXNlVXJsKToKKyAgICAgICAgKFNpbXBsZUhUVFBTZXJ2ZXJEcml2ZXIuZmV0Y2hSZXN1
bHQpOgorICAgICAgICBVdGlsaXR5IG1vZHVsZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2JlbmNobWFya19ydW5uZXIvdXRpbHMucHk6IEFkZGVkLgorICAgICAgICAoTW9kdWxlTm90Rm91
bmRFcnJvcik6CisgICAgICAgIChsb2FkTW9kdWxlKToKKyAgICAgICAgKGdldFBhdGhGcm9tUHJv
amVjdFJvb3QpOgorICAgICAgICAobG9hZEpTT05Gcm9tRmlsZSk6CisgICAgICAgIChUaW1lb3V0
RXJyb3IpOgorICAgICAgICAodGltZW91dCk6CisgICAgICAgICh0aW1lb3V0Ll9faW5pdF9fKToK
KyAgICAgICAgKHRpbWVvdXQuaGFuZGxlX3RpbWVvdXQpOgorICAgICAgICAodGltZW91dC5fX2Vu
dGVyX18pOgorICAgICAgICAodGltZW91dC5fX2V4aXRfXyk6CisKIDIwMTUtMDQtMjEgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gRXh0ZW5kIGFj
dGlvbiBtZW51cyB0byBzdXBwb3J0IFBERgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4t
YmVuY2htYXJrIGIvVG9vbHMvU2NyaXB0cy9ydW4tYmVuY2htYXJrCm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhNTc1
Mzc5ZDg3NjZhMWEwMjI1ZGY3YWYxMzZlZTRjOTdlNWExNDEKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3J1bi1iZW5jaG1hcmsKQEAgLTAsMCArMSwzNyBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2Zyb20gd2Via2l0
cHkuYmVuY2htYXJrX3J1bm5lci5iZW5jaG1hcmtfcnVubmVyIGltcG9ydCBCZW5jaG1hcmtSdW5u
ZXIKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorX2xvZy5zZXRMZXZlbChsb2dnaW5n
LklORk8pCitjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCitmb3JtYXR0ZXIgPSBsb2dnaW5n
LkZvcm1hdHRlcignJShhc2N0aW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQor
Y2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKK19sb2cuYWRkSGFuZGxlcihjaCkKKworCitkZWYg
bWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9u
PSdBdXRvbWF0ZSB0aGUgYnJvd3NlciBiYXNlZCBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzJykKKyAg
ICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dC1maWxlJywgZGVzdD0nb3V0cHV0JywgZGVm
YXVsdD1Ob25lKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYnVpbGQtZGlyZWN0b3J5Jywg
ZGVzdD0nYnVpbGREaXInLCByZXF1aXJlZD1UcnVlKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQo
Jy0tcGxhbicsIGRlc3Q9J3BsYW4nLCByZXF1aXJlZD1UcnVlKQorICAgIHBhcnNlci5hZGRfYXJn
dW1lbnQoJy0tcGxhdGZvcm0nLCBkZXN0PSdwbGF0Zm9ybScsIGRlZmF1bHQ9J29zeCcsIGNob2lj
ZXM9Wydvc3gnLCAnaW9zJywgJ3dpbmRvd3MnXSwgcmVxdWlyZWQ9VHJ1ZSkKKyAgICAjIEZJWE1F
OiBTaG91bGQgd2UgYWRkIGNocm9tZSBhcyBhbiBvcHRpb24/IFdlbGwsIGNocm9tZSB1c2VzIHdl
YmtpdCBpbiBpT1MuCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1icm93c2VyJywgZGVzdD0n
YnJvd3NlcicsIGRlZmF1bHQ9J3NhZmFyaScsIGNob2ljZXM9WydzYWZhcmknLCAnY2hyb21lJ10s
IHJlcXVpcmVkPVRydWUpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kZWJ1ZycsIGFjdGlv
bj0nc3RvcmVfdHJ1ZScpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICAKKyAg
ICBpZiBhcmdzLmRlYnVnOgorICAgICAgICBfbG9nLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisg
ICAgX2xvZy5kZWJ1ZygnSW5pdGlhbGl6aW5nIHByb2dyYW0gd2l0aCBmb2xsb3dpbmcgcGFyYW1l
dGVycycpCisgICAgX2xvZy5kZWJ1ZygnXHRvdXRwdXQgZmlsZSBuYW1lXHQ6ICVzJyAlIGFyZ3Mu
b3V0cHV0KQorICAgIF9sb2cuZGVidWcoJ1x0YnVpbGQgZGlyZWN0b3J5XHQ6ICVzJyAlIGFyZ3Mu
YnVpbGREaXIpCisgICAgX2xvZy5kZWJ1ZygnXHRwbGFuIG5hbWVcdDogJXMnLCBhcmdzLnBsYW4p
CisgICAgcnVubmVyID0gQmVuY2htYXJrUnVubmVyKGFyZ3MucGxhbiwgYXJncy5idWlsZERpciwg
YXJncy5vdXRwdXQsIGFyZ3MucGxhdGZvcm0sIGFyZ3MuYnJvd3NlcikKKyAgICBydW5uZXIuZXhl
Y3V0ZSgpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvUkVBRE1FLm1kIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL1JFQURNRS5tZApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41MjM1MGRmZGVmODE2YWY4ZDUyNDI1ODg0NTBlOTNlMDBlNzA1MDNjCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL1JFQURNRS5t
ZApAQCAtMCwwICsxLDExMSBAQAorIyBCZW5jaG1hcmsgUnVubmVyIAorVGhpcyBpcyBhIHNjcmlw
dCBmb3IgYXV0b21hdGluZyB0aGUgYnJvd3NlciBiYXNlZCBiZW5jaG1hcmtzKGUuZy4gU3BlZWRv
bWV0ZXIsIEpldFN0cmVhbSkKKyMjIFByb2plY3QgU3RydWN0dXJlCitgYGAKK2JlbmNobWFya19y
dW5uZXIKK+KUnOKUgOKUgCBSRUFETUUubWQKK+KUnOKUgOKUgCBfX2luaXRfXy5weQor4pSc4pSA
4pSAIGJlbmNobWFya19idWlsZGVyCivilILCoMKgIOKUnOKUgOKUgCBfX2luaXRfXy5weQor4pSC
wqDCoCDilJzilIDilIAgYmVuY2htYXJrX2J1aWxkZXJfZmFjdG9yeS5weQor4pSCwqDCoCDilJzi
lIDilIAgYmVuY2htYXJrX2J1aWxkZXJzLmpzb24KK+KUgsKgwqAg4pSc4pSA4pSAIGdlbmVyaWNf
YmVuY2htYXJrX2J1aWxkZXIucHkKK+KUgsKgwqAg4pSU4pSA4pSAIGpldHN0cmVhbV9iZW5jaG1h
cmtfYnVpbGRlci5weQor4pSc4pSA4pSAIGJlbmNobWFya19ydW5uZXIucHkKK+KUnOKUgOKUgCBi
cm93c2VyX2RyaXZlcgor4pSCwqDCoCDilJzilIDilIAgX19pbml0X18ucHkKK+KUgsKgwqAg4pSc
4pSA4pSAIGJyb3dzZXJfZHJpdmVyLnB5CivilILCoMKgIOKUnOKUgOKUgCBicm93c2VyX2RyaXZl
cl9mYWN0b3J5LnB5CivilILCoMKgIOKUnOKUgOKUgCBicm93c2VyX2RyaXZlcnMuanNvbgor4pSC
wqDCoCDilJzilIDilIAgb3N4X2Nocm9tZV9kcml2ZXIucHkKK+KUgsKgwqAg4pSU4pSA4pSAIG9z
eF9zYWZhcmlfZHJpdmVyLnB5CivilJzilIDilIAgZGF0YQor4pSCwqDCoCDilJzilIDilIAgcGF0
Y2hlcwor4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBKZXRTdHJlYW0ucGF0Y2gKK+KUgsKgwqAg
4pSCwqDCoCDilJTilIDilIAgU3BlZWRvbWV0ZXIucGF0Y2gKK+KUgsKgwqAg4pSU4pSA4pSAIHBs
YW5zCivilILCoMKgICAgICDilJzilIDilIAgamV0c3RyZWFtLnBsYW4KK+KUgsKgwqAgICAgIOKU
lOKUgOKUgCBzcGVlZG9tZXRlci5wbGFuCivilJzilIDilIAgZ2VuZXJpY19mYWN0b3J5LnB5Civi
lJzilIDilIAgaHR0cF9zZXJ2ZXJfZHJpdmVyCivilILCoMKgIOKUnOKUgOKUgCBfX2luaXRfXy5w
eQor4pSCwqDCoCDilJzilIDilIAgaHR0cF9zZXJ2ZXIKK+KUgsKgwqAg4pSCwqDCoCDilJTilIDi
lIAgdHdpc3RlZF9odHRwX3NlcnZlci5weQor4pSCwqDCoCDilJzilIDilIAgaHR0cF9zZXJ2ZXJf
ZHJpdmVyLnB5CivilILCoMKgIOKUnOKUgOKUgCBodHRwX3NlcnZlcl9kcml2ZXJfZmFjdG9yeS5w
eQor4pSCwqDCoCDilJzilIDilIAgaHR0cF9zZXJ2ZXJfZHJpdmVycy5qc29uCivilILCoMKgIOKU
lOKUgOKUgCBzaW1wbGVfaHR0cF9zZXJ2ZXJfZHJpdmVyLnB5CivilJTilIDilIAgdXRpbHMucHkK
K2BgYAorIyMgUmVxdWlyZW1lbnRzCisqIHB5dGhvbiBtb2R1bGVzOgorICAgICogUHlPYmpjCisg
ICAgKiBwc3V0aWxzIChvcHRpb25hbCkKKworIyMgSE9XIFRPcworIyMjIEhvdyB0byBydW4KK2Bg
YHNoZWxsCisgICAgcHl0aG9uIHBhdGgvdG8vcnVuX2JlbmNobWFyayAtLWJ1aWxkLWRpcmVjdG9y
eSBwYXRoL3RvL2Jyb3dzZXIvZGlyZWN0b3J5IC0tcGxhbiBqc29uX2Zvcm1hdF9wbGFuIC0tcGxh
dGZvcm0gdGFyZ2V0X3BsYXRmb3JtIC0tYnJvd3NlciB0YXJnZXRfYnJvd3NlcgorYGBgCisqICoq
cGF0aC90by9icm93c2VyL2RpcmVjdG9yeSoqOiBzaG91bGQgYmUgdGhlIGZvbGRlciBjb250YWlu
aW5nIHRoZSBleGVjdXRhYmxlIGJpbmFyeShlLmcuIC9BcHBsaWNhdGlvbi8gb24gT1NYIHdoaWNo
IGNvbnRhaW5zIFNhZmFyaS5hcHApCisqICoqanNvbl9mb3JtYXRfcGxhbioqOiB0aGUgYmVuY2ht
YXJrIHBsYW4geW91IHdhbnQgdG8gZXhlY3V0ZSAgCisKKyMjIyBIb3cgdG8gY3JlYXRlIGEgcGxh
bgorVG8gY3JlYXRlIGEgcGxhbiwgeW91IG1heSByZWZlciB0byBQbGFucy9qZXRzdHJlYW0ucGxh
bi4KK2BgYGpzb24gCit7CisgICAgImh0dHBfc2VydmVyX2RyaXZlciI6ICJTaW1wbGVIVFRQU2Vy
dmVyRHJpdmVyIiwgCisgICAgImJlbmNobWFya3MiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJ0aW1lb3V0IiA6IDYwMCwKKyAgICAgICAgICAgICJjb3VudCI6IDUsCisgICAgICAgICAgICAi
YmVuY2htYXJrX2J1aWxkZXIiOiAiSmV0U3RyZWFtQmVuY2htYXJrQnVpbGRlciIsCisgICAgICAg
ICAgICAib3JpZ2luYWxfYmVuY2htYXJrIjogIi4uLy4uLy4uLy4uL1BlcmZvcm1hbmNlVGVzdHMv
SmV0U3RyZWFtIiwKKyAgICAgICAgICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiZGF0YS9wYXRjaGVz
L0pldFN0cmVhbS5wYXRjaCIsCisgICAgICAgICAgICAiZW50cnlfcG9pbnQiOiAiSmV0U3RyZWFt
L0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sIiwKKyAgICAgICAgICAgICJvdXRwdXRfZmlsZSI6
ICJqZXRzdHJlYW0ucmVzdWx0IgorICAgICAgICB9CisgICAgXQorfQorYGBgCitQbGFuIGlzIGEg
anNvbi1mb3JtYXR0ZWQgZGljdGlvbmFyeSB3aGljaCBjb250YWlucyBmb2xsb3dpbmcga2V5cyAK
KyogKipodHRwX3NlcnZlcl9kcml2ZXIqKjogKCoqY2FzZS1zZW5zaXRpdmUqKikgdGhlIGh0dHAg
c2VydmVyIG1vZHVsZSB5b3Ugd2FudCB0byBob3N0IHRoZSByZXNvdXJjZXMuIEN1cnJlbnQgYXZh
aWxhYmxlIG9wdGlvbiBpcyAiU2ltcGxlSFRUUFNlcnZlckhhbmRsZSIgd2hpY2ggaXMgYmFzZWQg
b24gcHl0aG9uIHR3aXN0ZWQgZnJhbWV3b3JrLgorKiAqKmJlbmNobWFya3MqKjogY29udGFpbnMg
YSBsaXN0IG9mIGJlbmNobWFya3MgeW91IHdhbnQgdG8gcnVuLCBlYWNoIGJlbmNobWFyayBpcyBh
IGxpc3QgY29udGFpbnMgZm9sbG93aW5nIGtleXM6CisgICAgKiAqKnRpbWVvdXQqKjogdGltZSBs
aW1pdCBmb3IgKipFQUNIIFJVTioqIG9mIHRoZSBiZW5jaG1hcmsuIFRoaXMgY2FuIGF2b2lkIHBy
b2dyYW0gZ2V0dGluZyBzdHVjayBpbiB0aGUgZXh0cmVtZSBjaXJjdW1zdGFuY2VzLiBUaGUgdGlt
ZSBsaW1pdCBpcyBzdWdnZXN0ZWQgdG8gYmUgMS41LTJ4IHRoZSB0aW1lIHNwZW50IGluIGEgbm9y
bWFsIHJ1bi4KKyAgICAqICoqY291bnQqKjogdGhlIG51bWJlciBvZiB0aW1lcyB5b3Ugd2FudCB0
byBydW4gYmVuY2htYXJrCisgICAgKiAqKmJlbmNobWFya19idWlsZGVyKio6ICBidWlsZGVyIG9m
IHRoZSBiZW5jaG1hcmsgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGFycmFuZ2luZyBiZW5jaG1h
cmsgYmVmb3JlIHRoZSB3ZWIgc2VydmVyIHNlcnZpbmcgdGhlIGRpcmVjdG9yeS4gSW4gbW9zdCBj
YXNlLCAnR2VuZXJpY0JlbmNobWFya0hhbmRsZXInIGlzIHN1ZmZpY2llbnQuIEl0IGNvcGllcyB0
aGUgYmVuY2htYXJrIHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgYXBwbGllcyBwYXRjaCB0
byBiZW5jaG1hcmsuIElmIHlvdSBoYXZlIHNwZWNpYWwgcmVxdWlyZW1lbnQsIHlvdSBjb3VsZCBk
ZXNpZ24geW91ciBvd24gYmVuY2htYXJrIGhhbmRsZSwganVzdCBsaWtlIHRoZSAnSmV0U3RyZWFt
QmVuY2htYXJrSGFuZGxlJyBpbiB0aGlzIGV4YW1wbGUuCisgICAgKiAqKm9yaWdpbmFsX2JlbmNo
bWFyayoqOiBwYXRoIG9mIGJlbmNobWFyaywgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSByb290IG9m
IHRoaXMgcHJvamVjdCAoJ2JlbmNobWFya19ydW5uZXInIGRpcmVjdG9yeSkKKyAgICAqICoqYmVu
Y2htYXJrX3BhdGgqKjogKCoqT1BUSU9OQUwqKikgcGF0aCBvZiBwYXRjaCwgYSByZWxhdGl2ZSBw
YXRoIHRvIHRoZSByb290IG9mIHRoaXMgcHJvamVjdCAoJ2JlbmNobWFya19ydW5uZXInIGRpcmVj
dG9yeSkKKyAgICAqICoqZW50cnlfcG9pbnQqKjogdGhlIHJlbGF0aXZlIHVybCB5b3Ugd2FudCBi
cm93c2VyIHRvIGxhdW5jaCAoYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB3ZWJyb290KQorICAgICog
KipvdXRwdXRfZmlsZSoqOiBzcGVjaWZ5IHRoZSBvdXRwdXQgZmlsZQorCisjIyMgSG93IHRvIGlt
cG9ydCBhIGJlbmNobWFyaworKiBNb2RpZnkgdGhlIGJlbmNobWFyayBodG1sIGZpbGUsIG1ha2Ug
c3VyZSB0aGUgcGFnZSBoYXMgZm9sbG93aW5nIGZ1bmN0aW9uYWxpdGllczoKKyAgICAqIFdoZW4g
eW91IGxhdW5jaCB0aGUgcGFnZSgnZW50cnlfcG9pbnQnIGluIGJlbmNobWFyayksIHRoZSB0ZXN0
IHdpbGwgc3RhcnQgYXV0b21hdGljYWxseQorICAgICogT3JnYW5pemluZyB0aGUgcmVzdWx0cwor
ICAgICogJ1BPU1QnIGluZm9ybWF0aW9uIHRvICcvcmVwb3J0JywgYW5kICdHRVQnICcvc2h1dGRv
d24nIHdoZW4gcG9zdCBzdWNjZWVkcy4gRXhhbXBsZToKKyAgICAqIGBgYGpzCisgICAgICB2YXIg
eGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICB4aHIub3BlbigiUE9TVCIsICIvcmVw
b3J0Iik7CisgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBlIiwgImFwcGxp
Y2F0aW9uL2pzb24iKTsKKyAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LWxlbmd0
aCIsIHJlc3VsdHMubGVuZ3RoKTsKKyAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb25uZWN0
aW9uIiwgImNsb3NlIik7CisgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIw
MCkgeworICAgICAgICAgICAgICB2YXIgY2xvc2VSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0
KCk7CisgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5vcGVuKCJHRVQiLCAnL3NodXRkb3duJyk7
CisgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5zZW5kKCkKKyAgICAgICAgICB9CisgICAgICB9
CisgICAgICB4aHIuc2VuZChyZXN1bHRzKTsKK2BgYCAKKyogQ3JlYXRlIGEgcGF0Y2ggZmlsZSBh
Z2FpbnN0IG9yaWdpbmFsIGZpbGUKKyAgICAqIEdvIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbnMg
dGhlIGJlbmNobWFyayBkaXJlY3RvcnkgKGUuZy4gZm9yIEpldFN0cmVhbSwgeW91IHNob3VsZCBn
byB0byBQZXJmb3JtYWNlVGVzdCBmb2xkZXIpCisgICAgKiBVc2UgYGBgZ2l0IGRpZmYgLS1yZWxh
dGl2ZSBIRUFEID4geW91ci5wYXRjaGBgYCB0byBjcmVhdGUgeW91ciBwYXRjaAorICAgICogKCoq
U3VnZ2VzdGVkKiopIG1vdmUgdGhlIHBhdGNoIHRvIHRoZSAnUGF0Y2hlcycgZGlyZWN0b3J5IHVu
ZGVyIHByb2plY3QgZGlyZWN0b3J5CisqIENyZWF0ZSBhIHBsYW4gZm9yIHRoZSBiZW5jaG1hcmsg
KHJlZmVyIHRvICoqIkhvdyB0byBjcmVhdGUgYSBwbGFuIioqIGZvciBtb3JlIGRldGFpbHMpCisq
IERvIGZvbGxvd2luZyBpbnN0cnVjdGlvbiAqKk9OTFkgSUYgTkVFREVEKiouIEluIG1vc3QgY2Fz
ZSwgeW91IGRvIG5vdCBoYXZlIHRvLgorICAgICogSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIEJy
b3dzZXJEcml2ZXIgZm9yIHNwZWNpZmljIGJyb3dzZXIvcGxhdGZvcm0sIHlvdSBuZWVkIHRvIGV4
dGVuZCBicm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlci5weSBhbmQgcmVnaXN0ZXIgeW91ciBt
b2R1bGUgaW4gYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXJzanNvbi4KKyAgICAqIElmIHlv
dSB3YW50IHRvIGN1c3RvbWl6ZSBIVFRQU2VydmVyRHJpdmVyLCB5b3UgbmVlZCB0byBleHRlbmQg
aHR0cF9zZXJ2ZXJfZHJpcnZlci9odHRwX3NlcnZlcl9kcml2ZXIgYW5kIHJlZ2lzdGVyIHlvdXIg
bW9kdWxlIGluIGh0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJzLmpzb24uCisg
ICAgKiBJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgUmVzdWx0V3JhcHBlciwgeW91IG5lZWQgdG8g
ZXh0ZW5kIHJlc3VsdF93cmFwcGVyL2Jhc2VfcmVzdWx0X3dyYXBwZXIucHkgYW5kIHJlZ2lzdGVy
IHlvdXIgbW9kdWxlIGluIHJlc3VsdF93cmFwcGVyL3Jlc3VsdF93cmFwcGVycy5qc29uIAorICAg
ICogSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIEJlbmNobWFya0J1aWxkZXIsIHlvdSBuZWVkIHRv
IGV4dGVuZCBiZW5jaG1hcmtfYnVpbGRlci9nZW5lcmljX2JlbmNobWFya19idWlsZGVyIHJlZ2lz
dGVyIHlvdSBtb2R1bGUgaW4gYmVuY2htYXJrX2J1aWxkZXIvYmVuY2htYXJrX2J1aWxkZXJzLmpz
b24KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9f
X2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9fX2lu
aXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1
MzkxCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
YmVuY2htYXJrX2J1aWxkZXIvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2Jl
bmNobWFya19idWlsZGVyX2ZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNo
bWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvYmVuY2htYXJrX2J1aWxkZXJfZmFjdG9yeS5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NjAxZDNmMTVmMWYwMzY0MzM5YWUyNGQ0ZjhlZTFhYzg2NjIyNDczCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVy
L2JlbmNobWFya19idWlsZGVyL2JlbmNobWFya19idWlsZGVyX2ZhY3RvcnkucHkKQEAgLTAsMCAr
MSwxNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
anNvbgoraW1wb3J0IG9zCisKK2Zyb20gd2Via2l0cHkuYmVuY2htYXJrX3J1bm5lci5nZW5lcmlj
X2ZhY3RvcnkgaW1wb3J0IEdlbmVyaWNGYWN0b3J5Citmcm9tIHdlYmtpdHB5LmJlbmNobWFya19y
dW5uZXIudXRpbHMgaW1wb3J0IGxvYWRKU09ORnJvbUZpbGUKKworCitidWlsZGVyRmlsZU5hbWUg
PSAnYmVuY2htYXJrX2J1aWxkZXJzLmpzb24nCisKKworY2xhc3MgQmVuY2htYXJrQnVpbGRlckZh
Y3RvcnkoR2VuZXJpY0ZhY3RvcnkpOgorCisgICAgcHJvZHVjdHMgPSBsb2FkSlNPTkZyb21GaWxl
KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBidWlsZGVyRmlsZU5hbWUp
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jl
bmNobWFya19idWlsZGVyL2JlbmNobWFya19idWlsZGVycy5qc29uIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2JlbmNobWFya19idWls
ZGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4ZmM5MzJlNmU5ZGU1YTExNGFkZjhjMGUwYTU2MGRjMzVl
NDEwNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFy
a19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvYmVuY2htYXJrX2J1aWxkZXJzLmpzb24KQEAgLTAs
MCArMSwxMCBAQAoreworICAgICJHZW5lcmljQmVuY2htYXJrQnVpbGRlciI6IHsKKyAgICAgICAg
ImZpbGVQYXRoIjogImJlbmNobWFya19idWlsZGVyLmdlbmVyaWNfYmVuY2htYXJrX2J1aWxkZXIi
LAorICAgICAgICAibW9kdWxlTmFtZSI6ICJHZW5lcmljQmVuY2htYXJrQnVpbGRlciIKKyAgICB9
LAorICAgICJKZXRTdHJlYW1CZW5jaG1hcmtCdWlsZGVyIjogeworICAgICAgICAiZmlsZVBhdGgi
OiAiYmVuY2htYXJrX2J1aWxkZXIuamV0c3RyZWFtX2JlbmNobWFya19idWlsZGVyIiwKKyAgICAg
ICAgIm1vZHVsZU5hbWUiOiAiSmV0U3RyZWFtQmVuY2htYXJrQnVpbGRlciIKKyAgICB9Cit9CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2ht
YXJrX2J1aWxkZXIvZ2VuZXJpY19iZW5jaG1hcmtfYnVpbGRlci5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9nZW5lcmljX2JlbmNo
bWFya19idWlsZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlNTQ4Nzk5OWVjYTk2MzVhMWJlMDhkMTE2ZjIz
OGFmNmI4NmY5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvZ2VuZXJpY19iZW5jaG1hcmtfYnVpbGRl
ci5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQg
c3VicHJvY2VzcworCitmcm9tIHdlYmtpdHB5LmJlbmNobWFya19ydW5uZXIudXRpbHMgaW1wb3J0
IGdldFBhdGhGcm9tUHJvamVjdFJvb3QKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCisKKworY2xhc3MgR2VuZXJpY0JlbmNobWFya0J1aWxkZXIob2JqZWN0KToKKworICAg
IGRlZiBwcmVwYXJlKHNlbGYsIGJlbmNobWFya1BhdGgsIHBhdGNoKToKKyAgICAgICAgc2VsZi5f
Y29weUJlbmNobWFya1RvVGVtcERpcihiZW5jaG1hcmtQYXRoKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fYXBwbHlQYXRjaChwYXRjaCkKKworICAgIGRlZiBfY29weUJlbmNobWFya1RvVGVtcERpcihz
ZWxmLCBiZW5jaG1hcmtQYXRoKToKKyAgICAgICAgc2VsZi53ZWJSb290ID0gdGVtcGZpbGUubWtk
dGVtcCgpCisgICAgICAgIF9sb2cuZGVidWcoJ1NlcnZlcmluZyBhdCB3ZWJSb290OiAlcycgJSBz
ZWxmLndlYlJvb3QpCisgICAgICAgIHNlbGYuZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLndlYlJv
b3QsIG9zLnBhdGguc3BsaXQoYmVuY2htYXJrUGF0aClbMV0pCisgICAgICAgIHNodXRpbC5jb3B5
dHJlZShnZXRQYXRoRnJvbVByb2plY3RSb290KGJlbmNobWFya1BhdGgpLCBzZWxmLmRlc3QpCisK
KyAgICBkZWYgX2FwcGx5UGF0Y2goc2VsZiwgcGF0Y2gpOgorICAgICAgICBpZiBub3QgcGF0Y2g6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi53ZWJSb290CisgICAgICAgIG9sZFdvcmtpbmdEaXJl
Y3RvcnkgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihzZWxmLndlYlJvb3QpCisgICAg
ICAgIGVycm9yQ29kZSA9IHN1YnByb2Nlc3MuY2FsbChbJ3BhdGNoJywgJy1wMScsICctZicsICct
aScsIGdldFBhdGhGcm9tUHJvamVjdFJvb3QocGF0Y2gpXSkKKyAgICAgICAgb3MuY2hkaXIob2xk
V29ya2luZ0RpcmVjdG9yeSkKKyAgICAgICAgaWYgZXJyb3JDb2RlOgorICAgICAgICAgICAgX2xv
Zy5lcnJvcignQ2Fubm90IGFwcGx5IHBhdGNoLCB3aWxsIHNraXAgY3VycmVudCBiZW5jaG1hcmtQ
YXRoJykKKyAgICAgICAgICAgIHNlbGYuY2xlYW4oKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KyAgICAgICAgcmV0dXJuIHNlbGYud2ViUm9vdAorCisgICAgZGVmIGNsZWFuKHNlbGYpOgorICAg
ICAgICBfbG9nLmluZm8oJ0NsZWFubmluZyBCZW5jaG1hcmsnKQorICAgICAgICBpZiBzZWxmLndl
YlJvb3Q6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYud2ViUm9vdCkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfYnVp
bGRlci9qZXRzdHJlYW1fYmVuY2htYXJrX2J1aWxkZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvamV0c3RyZWFtX2JlbmNobWFy
a19idWlsZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkOTU4ZTM0ZGIzMzE3YTA3Yjg1ZmU5NTYzZjVlMTE5
OTAyYmY4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNo
bWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvamV0c3RyZWFtX2JlbmNobWFya19idWlsZGVy
LnB5CkBAIC0wLDAgKzEsMjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIGdlbmVyaWNfYmVuY2ht
YXJrX2J1aWxkZXIgaW1wb3J0IEdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyCisKKworX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIEpldFN0cmVhbUJlbmNobWFya0J1
aWxkZXIoR2VuZXJpY0JlbmNobWFya0J1aWxkZXIpOgorCisgICAgZGVmIHByZXBhcmUoc2VsZiwg
YmVuY2htYXJrUGF0aCwgcGF0Y2gpOgorICAgICAgICBzdXBlcihzZWxmLl9fY2xhc3NfXywgc2Vs
ZikuX2NvcHlCZW5jaG1hcmtUb1RlbXBEaXIoYmVuY2htYXJrUGF0aCkKKyAgICAgICAgc2VsZi5f
cnVuQ3JlYXRlU2NyaXB0KCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKHNlbGYuX19jbGFzc19fLCBz
ZWxmKS5fYXBwbHlQYXRjaChwYXRjaCkKKworICAgIGRlZiBfcnVuQ3JlYXRlU2NyaXB0KHNlbGYp
OgorICAgICAgICBvbGRXb3JraW5nRGlyZWN0b3J5ID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3Mu
Y2hkaXIoc2VsZi5kZXN0KQorICAgICAgICBfbG9nLmRlYnVnKHNlbGYuZGVzdCkKKyAgICAgICAg
ZXJyb3JDb2RlID0gc3VicHJvY2Vzcy5jYWxsKFsncnVieScsICdjcmVhdGUucmInXSkKKyAgICAg
ICAgb3MuY2hkaXIob2xkV29ya2luZ0RpcmVjdG9yeSkKKyAgICAgICAgaWYgZXJyb3JDb2RlOgor
ICAgICAgICAgICAgX2xvZy5lcnJvcignQ2Fubm90IGNyZWF0ZSBKZXRTdHJlYW0gQmVuY2htYXJr
JykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9i
ZW5jaG1hcmtfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVu
bmVyL2JlbmNobWFya19ydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNmMmI1YWEwNjNkYjJkY2ZhZTEy
YWQxY2M3NmE2MjhkY2EwODMzMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfcnVubmVyLnB5CkBAIC0wLDAgKzEsMTEy
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGpzb24KK2ltcG9ydCBsb2dnaW5n
CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0
IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHR5cGVzCitpbXBvcnQgb3MKK2ltcG9ydCB1
cmxwYXJzZQorCitmcm9tIGJlbmNobWFya19idWlsZGVyLmJlbmNobWFya19idWlsZGVyX2ZhY3Rv
cnkgaW1wb3J0IEJlbmNobWFya0J1aWxkZXJGYWN0b3J5Citmcm9tIGJyb3dzZXJfZHJpdmVyLmJy
b3dzZXJfZHJpdmVyX2ZhY3RvcnkgaW1wb3J0IEJyb3dzZXJEcml2ZXJGYWN0b3J5Citmcm9tIGh0
dHBfc2VydmVyX2RyaXZlci5odHRwX3NlcnZlcl9kcml2ZXJfZmFjdG9yeSBpbXBvcnQgSFRUUFNl
cnZlckRyaXZlckZhY3RvcnkKK2Zyb20gdXRpbHMgaW1wb3J0IGxvYWRNb2R1bGUsIGdldFBhdGhG
cm9tUHJvamVjdFJvb3QKK2Zyb20gdXRpbHMgaW1wb3J0IHRpbWVvdXQKKworCitfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgQmVuY2htYXJrUnVubmVyKG9iamVj
dCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGxhbkZpbGUsIGJ1aWxkRGlyLCBvdXRwdXRG
aWxlLCBwbGF0Zm9ybSwgYnJvd3Nlcik6CisgICAgICAgIF9sb2cuaW5mbygnSW5pdGlhbGl6aW5n
IGJlbmNobWFyayBydW5uaW5nJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVu
KHBsYW5GaWxlLCAncicpIGFzIGZwOgorICAgICAgICAgICAgICAgIHNlbGYucGxhbiA9IGpzb24u
bG9hZChmcCkKKyAgICAgICAgICAgICAgICBzZWxmLmJyb3dzZXJEcml2ZXIgPSBCcm93c2VyRHJp
dmVyRmFjdG9yeS5jcmVhdGUoW3BsYXRmb3JtLCBicm93c2VyXSkKKyAgICAgICAgICAgICAgICBz
ZWxmLmh0dHBTZXJ2ZXJEcml2ZXIgPSBIVFRQU2VydmVyRHJpdmVyRmFjdG9yeS5jcmVhdGUoW3Nl
bGYucGxhblsnaHR0cF9zZXJ2ZXJfZHJpdmVyJ11dKQorICAgICAgICAgICAgICAgIHNlbGYuYmVu
Y2htYXJrcyA9IHNlbGYucGxhblsnYmVuY2htYXJrcyddCisgICAgICAgICAgICAgICAgc2VsZi5i
dWlsZERpciA9IG9zLnBhdGguYWJzcGF0aChidWlsZERpcikKKyAgICAgICAgICAgICAgICBzZWxm
Lm91dHB1dEZpbGUgPSBvdXRwdXRGaWxlIGlmIG91dHB1dEZpbGUgZWxzZSAnYmVuY2htYXJrLnJl
c3VsdCcKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBfbG9nLmVycm9yKCdD
YW4gbm90IG9wZW4gcGxhbiBmaWxlOiAlcycgJSBwbGFuRmlsZSkKKyAgICAgICAgZXhjZXB0IFZh
bHVlRXJyb3I6CisgICAgICAgICAgICBfbG9nLmVycm9yKCdQbGFuIGZpbGU6JXMgbWF5IG5vdCBm
b2xsb3cganNvbiBmb3JtYXQnICUgcGxhbkZpbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAg
ICAgIHJhaXNlCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdT
dGFydCB0byBleGVjdXRlIHRoZSBwbGFuJykKKyAgICAgICAgZm9yIGJlbmNobWFyayBpbiBzZWxm
LmJlbmNobWFya3M6CisgICAgICAgICAgICBfbG9nLmluZm8oJ1N0YXJ0IGEgbmV3IGJlbmNobWFy
aycpCisgICAgICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgICAgIGJlbmNobWFya0J1aWxk
ZXIgPSBCZW5jaG1hcmtCdWlsZGVyRmFjdG9yeS5jcmVhdGUoW2JlbmNobWFya1snYmVuY2htYXJr
X2J1aWxkZXInXV0pCisgICAgICAgICAgICB3ZWJSb290ID0gYmVuY2htYXJrQnVpbGRlci5wcmVw
YXJlKGJlbmNobWFya1snb3JpZ2luYWxfYmVuY2htYXJrJ10sIGJlbmNobWFya1snYmVuY2htYXJr
X3BhdGNoJ10gaWYgJ2JlbmNobWFya19wYXRjaCcgaW4gYmVuY2htYXJrIGVsc2UgTm9uZSkKKyAg
ICAgICAgICAgIGZvciB4IGluIHhyYW5nZShpbnQoYmVuY2htYXJrWydjb3VudCddKSk6CisgICAg
ICAgICAgICAgICAgX2xvZy5pbmZvKCdTdGFydCB0aGUgaXRlcmF0aW9uICVkIG9mIGN1cnJlbnQg
YmVuY2htYXJrJyAlICh4ICsgMSkpCisgICAgICAgICAgICAgICAgc2VsZi5odHRwU2VydmVyRHJp
dmVyLnNlcnZlKHdlYlJvb3QpCisgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyRHJpdmVyLnBy
ZXBhcmVFbnYoKQorICAgICAgICAgICAgICAgIHNlbGYuYnJvd3NlckRyaXZlci5sYXVuY2hVcmwo
dXJscGFyc2UudXJsam9pbihzZWxmLmh0dHBTZXJ2ZXJEcml2ZXIuYmFzZVVybCgpLCBiZW5jaG1h
cmtbJ2VudHJ5X3BvaW50J10pLCBzZWxmLmJ1aWxkRGlyKQorICAgICAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aW1lb3V0KGJlbmNobWFya1sndGltZW91dCddKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzb24ubG9hZHMoc2VsZi5odHRwU2Vy
dmVyRHJpdmVyLmZldGNoUmVzdWx0KCkpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAg
ICAgICAgICAgICAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgICAgICAgICAgX2xvZy5lcnJvcignTm8gcmVzdWx0LiBTb21ldGhpbmcgd2VudCB3cm9u
Zy4gV2lsbCBza2lwIGN1cnJlbnQgYmVuY2htYXJrLicpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgICAgICAgICBzZWxmLmJyb3dzZXJEcml2ZXIuY2xvc2VCcm93
c2VycygpCisgICAgICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnRW5kIG9mICVkIGl0ZXJhdGlv
biBvZiBjdXJyZW50IGJlbmNobWFyaycgJSAoeCArIDEpKQorICAgICAgICAgICAgcmVzdWx0cyA9
IHNlbGYud3JhcChyZXN1bHRzKQorICAgICAgICAgICAgc2VsZi5kdW1wKHJlc3VsdHMsIGJlbmNo
bWFya1snb3V0cHV0X2ZpbGUnXSBpZiBiZW5jaG1hcmtbJ291dHB1dF9maWxlJ10gZWxzZSBzZWxm
Lm91dHB1dEZpbGUpCisgICAgICAgICAgICBiZW5jaG1hcmtCdWlsZGVyLmNsZWFuKCkKKworICAg
IEBjbGFzc21ldGhvZAorICAgIGRlZiBkdW1wKGNscywgcmVzdWx0cywgb3V0cHV0RmlsZSk6Cisg
ICAgICAgIF9sb2cuaW5mbygnRHVtcHBpbmcgdGhlIHJlc3VsdHMgdG8gZmlsZScpCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihvdXRwdXRGaWxlLCAndycpIGFzIGZwOgorICAg
ICAgICAgICAgICAgIGpzb24uZHVtcChyZXN1bHRzLCBmcCkKKyAgICAgICAgZXhjZXB0IElPRXJy
b3I6CisgICAgICAgICAgICBfbG9nLmVycm9yKCdDYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZTogJXMn
ICUgb3V0cHV0RmlsZSkKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1Jlc3VsdHMgYXJlOlxuICVz
JywganNvbi5kdW1wcyhyZXN1bHRzKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB3cmFw
KGNscywgZGljdHMpOgorICAgICAgICBpZiBub3QgZGljdHM6CisgICAgICAgICAgICByZXR1cm4g
Tm9uZQorICAgICAgICByZXQgPSB7fQorICAgICAgICBmb3IgZGljIGluIGRpY3RzOgorICAgICAg
ICAgICAgcmV0ID0gY2xzLm1lcmdlKHJldCwgZGljKQorICAgICAgICByZXR1cm4gcmV0CisKKyAg
ICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbWVyZ2UoY2xzLCBhLCBiKToKKyAgICAgICAgYXNzZXJ0
KGlzaW5zdGFuY2UoYSwgdHlwZShiKSkpCisgICAgICAgIGFyZ1R5cGUgPSB0eXBlKGEpCisgICAg
ICAgICMgc3BlY2lhbCBoYW5kbGUgZm9yIGxpc3QgdHlwZSwgYW5kIHNob3VsZCBiZSBoYW5kbGUg
YmVmb3JlIGVxdWFsIGNoZWNrCisgICAgICAgIGlmIGFyZ1R5cGUgPT0gdHlwZXMuTGlzdFR5cGU6
CisgICAgICAgICAgICByZXR1cm4gYSArIGIKKyAgICAgICAgaWYgYSA9PSBiOgorICAgICAgICAg
ICAgcmV0dXJuIGEKKyAgICAgICAgaWYgYXJnVHlwZSA9PSB0eXBlcy5EaWN0VHlwZToKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBhLml0ZW1z
KCk6CisgICAgICAgICAgICAgICAgaWYga2V5IGluIGI6CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdFtrZXldID0gY2xzLm1lcmdlKHZhbHVlLCBiW2tleV0pCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZQorICAgICAgICAgICAg
Zm9yIGtleSwgdmFsdWUgaW4gYi5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGtleSBub3Qg
aW4gcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICMgZm9yIG90aGVyIHR5cGVzCisgICAgICAg
IHJldHVybiBhICsgYgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1h
cmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL19faW5pdF9fLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9i
cm93c2VyX2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9icm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YmVmMTUwNmZh
ZjY0YWEwMWY0ZTQxMTMxODMyMDQxODJmNTg3ZTNmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJf
ZHJpdmVyLnB5CkBAIC0wLDAgKzEsMTggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBv
cnQgYWJjCisKKworY2xhc3MgQnJvd3NlckRyaXZlcihvYmplY3QpOgorCisgICAgQGFiYy5hYnN0
cmFjdG1ldGhvZAorICAgIGRlZiBwcmVwYXJlRW52KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAg
ICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgZGVmIGxhdW5jaFVybChzZWxmLCB1cmwsIGJyb3dz
ZXJCdWlsZFBhdGg9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIEBhYmMuYWJzdHJhY3RtZXRo
b2QKKyAgICBkZWYgY2xvc2VCcm93c2VyKHNlbGYpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIv
YnJvd3Nlcl9kcml2ZXJfZmFjdG9yeS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2ht
YXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlcl9mYWN0b3J5LnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmI5OThiNGY3N2ViMTIzM2NlZjNjMDJiMGY4Y2ZjYjM1Yjg1ZDQ2NmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nl
cl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXJfZmFjdG9yeS5weQpAQCAtMCwwICsxLDE2IEBACisjIS91
c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBqc29uCitpbXBvcnQg
b3MKKworZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLmdlbmVyaWNfZmFjdG9yeSBpbXBv
cnQgR2VuZXJpY0ZhY3RvcnkKK2Zyb20gd2Via2l0cHkuYmVuY2htYXJrX3J1bm5lci51dGlscyBp
bXBvcnQgbG9hZEpTT05Gcm9tRmlsZQorCisKK2RyaXZlckZpbGVOYW1lID0gJ2Jyb3dzZXJfZHJp
dmVycy5qc29uJworCisKK2NsYXNzIEJyb3dzZXJEcml2ZXJGYWN0b3J5KEdlbmVyaWNGYWN0b3J5
KToKKworICAgIHByb2R1Y3RzID0gbG9hZEpTT05Gcm9tRmlsZShvcy5wYXRoLmpvaW4ob3MucGF0
aC5kaXJuYW1lKF9fZmlsZV9fKSwgZHJpdmVyRmlsZU5hbWUpKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJf
ZHJpdmVycy5qc29uIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jy
b3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4MGI5NjE1Nzc5
NjllYjk3M2VhNTU4OGZmOTU0MGQzOWJmNTMyODkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9k
cml2ZXJzLmpzb24KQEAgLTAsMCArMSwxMiBAQAoreworICAgICJvc3giOiB7CisgICAgICAgICJj
aHJvbWUiOiB7CisgICAgICAgICAgICAibW9kdWxlTmFtZSI6ICJPU1hDaHJvbWVEcml2ZXIiLCAK
KyAgICAgICAgICAgICJmaWxlUGF0aCI6ICJicm93c2VyX2RyaXZlci5vc3hfY2hyb21lX2RyaXZl
ciIKKyAgICAgICAgfSwgCisgICAgICAgICJzYWZhcmkiOiB7CisgICAgICAgICAgICAibW9kdWxl
TmFtZSI6ICJPU1hTYWZhcmlEcml2ZXIiLCAKKyAgICAgICAgICAgICJmaWxlUGF0aCI6ICJicm93
c2VyX2RyaXZlci5vc3hfc2FmYXJpX2RyaXZlciIKKyAgICAgICAgfQorICAgIH0gCit9CmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9k
cml2ZXIvb3N4X2Nocm9tZV9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNo
bWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X2Nocm9tZV9kcml2ZXIucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjY2MzE5YTk4NjQ0YjBkNjA0MDUwMWJlZWMzNjNhYjg2ODM4OWY1NgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2Ry
aXZlci9vc3hfY2hyb21lX2RyaXZlci5weQpAQCAtMCwwICsxLDMxIEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MK
K2ltcG9ydCB0aW1lCisKKyMgV2UgYXNzdW1lIHRoYXQgdGhpcyBoYW5kbGUgY2FuIG9ubHkgYmUg
dXNlZCB3aGVuIHRoZSBwbGF0Zm9ybSBpcyBPU1gKK2Zyb20gQXBwS2l0IGltcG9ydCBOU1J1bm5p
bmdBcHBsaWNhdGlvbgorZnJvbSBicm93c2VyX2RyaXZlciBpbXBvcnQgQnJvd3NlckRyaXZlcgor
CisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBPU1hDaHJv
bWVEcml2ZXIoQnJvd3NlckRyaXZlcik6CisKKyAgICBkZWYgcHJlcGFyZUVudihzZWxmKToKKyAg
ICAgICAgc2VsZi5jbG9zZUJyb3dzZXJzKCkKKyAgICAgICAgc2VsZi5jaHJvbWVQcmVmZXJlbmNl
cyA9IFtdCisKKyAgICBkZWYgbGF1bmNoVXJsKHNlbGYsIHVybCwgYnJvd3NlckJ1aWxkUGF0aD1O
b25lKToKKyAgICAgICAgX2xvZy5pbmZvKCdMYXVuY2hpbmcgY2hyb21lOiAlcyB3aXRoIHVybDog
JXMnICUgKG9zLnBhdGguam9pbihicm93c2VyQnVpbGRQYXRoLCAnR29vZ2xlIENocm9tZS5hcHAn
KSwgdXJsKSkKKyAgICAgICAgIyBGSVhNRTogTWF5IG5lZWQgdG8gYmUgbW9kaWZpZWQgZm9yIGRl
dmVsb3AgYnVpbGQsIHN1Y2ggYXMgc2V0dGluZyB1cCBsaWJyYXJpZXMKKyAgICAgICAgc3VicHJv
Y2Vzcy5Qb3BlbihbJ29wZW4nLCAnLWEnLCBvcy5wYXRoLmpvaW4oYnJvd3NlckJ1aWxkUGF0aCwg
J0dvb2dsZSBDaHJvbWUuYXBwJyksICctLWFyZ3MnLCAnLS1ob21lcGFnZScsIHVybF0gKyBzZWxm
LmNocm9tZVByZWZlcmVuY2VzKS5jb21tdW5pY2F0ZSgpCisKKyAgICBkZWYgY2xvc2VCcm93c2Vy
cyhzZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdDbG9zaW5nIGFsbCBleGlzdGluZyBjaHJvbWUg
cHJvY2Vzc2VzJykKKyAgICAgICAgY2hyb21lcyA9IE5TUnVubmluZ0FwcGxpY2F0aW9uLnJ1bm5p
bmdBcHBsaWNhdGlvbnNXaXRoQnVuZGxlSWRlbnRpZmllcl8oJ2NvbS5nb29nbGUuQ2hyb21lJykK
KyAgICAgICAgZm9yIGNocm9tZSBpbiBjaHJvbWVzOgorICAgICAgICAgICAgY2hyb21lLnRlcm1p
bmF0ZSgpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5u
ZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X3NhZmFyaV9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X3NhZmFyaV9kcml2ZXIu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZmJmNDkxZDJkYzQ5ZTI2NTE0ZjMyMTc1ZTFjYjMzNGJiOWFhOWYxMAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9icm93c2VyX2RyaXZlci9vc3hfc2FmYXJpX2RyaXZlci5weQpAQCAtMCwwICsxLDM2IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0
IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCisKKyMgV2UgYXNzdW1lIHRoYXQgdGhpcyBoYW5kbGUg
Y2FuIG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBwbGF0Zm9ybSBpcyBPU1guCitmcm9tIEFwcEtpdCBp
bXBvcnQgTlNSdW5uaW5nQXBwbGljYXRpb24KK2Zyb20gYnJvd3Nlcl9kcml2ZXIgaW1wb3J0IEJy
b3dzZXJEcml2ZXIKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKwor
Y2xhc3MgT1NYU2FmYXJpRHJpdmVyKEJyb3dzZXJEcml2ZXIpOgorCisgICAgZGVmIHByZXBhcmVF
bnYoc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2VCcm93c2VycygpCisgICAgICAgIHNlbGYuc2Fm
YXJpUHJlZmVyZW5jZXMgPSBbIi1Ib21lUGFnZSIsICJhYm91dDpibGFuayIsICItV2FybkFib3V0
RnJhdWR1bGVudFdlYnNpdGVzIiwgIjAiLCAiLUV4dGVuc2lvbnNFbmFibGVkIiwgIjAiLCAiLVNo
b3dTdGF0dXNCYXIiLCAiMCIsICItTmV3V2luZG93QmVoYXZpb3IiLCAiMSIsICItTmV3VGFiQmVo
YXZpb3IiLCAiMSJdCisKKyAgICBkZWYgbGF1bmNoVXJsKHNlbGYsIHVybCwgYnJvd3NlckJ1aWxk
UGF0aD1Ob25lKToKKyAgICAgICAgYXJncyA9IFtvcy5wYXRoLmpvaW4oYnJvd3NlckJ1aWxkUGF0
aCwgJ1NhZmFyaS5hcHAvQ29udGVudHMvTWFjT1MvU2FmYXJpJyldCisgICAgICAgIGFyZ3MuZXh0
ZW5kKHNlbGYuc2FmYXJpUHJlZmVyZW5jZXMpCisgICAgICAgIF9sb2cuaW5mbygnTGF1bmNoaW5n
IHNhZmFyaTogJXMgd2l0aCB1cmw6ICVzJyAlIChhcmdzWzBdLCB1cmwpKQorICAgICAgICBzdWJw
cm9jZXNzLlBvcGVuKGFyZ3MsIGVudj17J0RZTERfRlJBTUVXT1JLX1BBVEgnOiBicm93c2VyQnVp
bGRQYXRoLCAnRFlMRF9MSUJSQVJZX1BBVEgnOiBicm93c2VyQnVpbGRQYXRofSwgc3RkaW49c3Vi
cHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5Q
SVBFKQorICAgICAgICAjIFN0b3AgZm9yIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzYWZhcmkgcHJv
Y2Vzcywgb3RoZXJ3aXNlLCBvcGVuCisgICAgICAgICMgY29tbWFuZCBtYXkgdXNlIHRoZSBzeXN0
ZW0gc2FmYXJpLgorICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgIHN1YnByb2Nlc3MuUG9w
ZW4oWydvcGVuJywgdXJsXSkKKworICAgIGRlZiBjbG9zZUJyb3dzZXJzKHNlbGYpOgorICAgICAg
ICBfbG9nLmluZm8oJ0Nsb3NpbmcgYWxsIGV4aXN0aW5nIHNhZmFyaSBwcm9jZXNzZXMnKQorICAg
ICAgICBzYWZhcmlJbnN0YW5jZXMgPSBOU1J1bm5pbmdBcHBsaWNhdGlvbi5ydW5uaW5nQXBwbGlj
YXRpb25zV2l0aEJ1bmRsZUlkZW50aWZpZXJfKCdjb20uYXBwbGUuU2FmYXJpJykKKyAgICAgICAg
Zm9yIHNhZmFyaUluc3RhbmNlIGluIHNhZmFyaUluc3RhbmNlczoKKyAgICAgICAgICAgIHNhZmFy
aUluc3RhbmNlLnRlcm1pbmF0ZSgpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL0pldFN0cmVhbS5wYXRjaCBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvSmV0U3RyZWFtLnBh
dGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdlMGU1NzUzM2FkZGY5ZDYyYTBiNGZiNmM3YzIxYjA0YmU2NzQwOWUK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5u
ZXIvZGF0YS9wYXRjaGVzL0pldFN0cmVhbS5wYXRjaApAQCAtMCwwICsxLDU5IEBACitkaWZmIC0t
Z2l0IGEvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9KZXRTdHJlYW1Ecml2ZXIuanMgYi9KZXRT
dHJlYW0vSmV0U3RyZWFtLTEuMC4xL0pldFN0cmVhbURyaXZlci5qcworaW5kZXggNzNlZTQyMC4u
NjBmNTg3YyAxMDA2NDQKKy0tLSBhL0pldFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvSmV0U3RyZWFt
RHJpdmVyLmpzCisrKysgYi9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL0pldFN0cmVhbURyaXZl
ci5qcworQEAgLTQ0OCw2ICs0NDgsMTQgQEAgdmFyIEpldFN0cmVhbSA9IChmdW5jdGlvbigpIHsK
KyAKKyAgICAgICAgIHJldHVybiByYXdSZXN1bHRzOworICAgICB9CisrICAgIAorKyAgICBmdW5j
dGlvbiBjb21wdXRlUmVmaW5lZFJlc3VsdHMoKXsKKysgICAgICAgIHZhciByZXN1bHRzID0ge307
CisrICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJlbmNobWFya3MubGVuZ3RoOyArK2kpIHsK
KysgICAgICAgICAgICByZXN1bHRzW2JlbmNobWFya3NbaV0ubmFtZV0gPSB7Im1ldHJpY3MiIDog
eyJTY29yZSIgOiB7ImN1cnJlbnQiIDogW2JlbmNobWFya3NbaV0udGltZXNdfX19OworKyAgICAg
ICAgfQorKyAgICAgICAgcmV0dXJuIHsiSmV0U3RyZWFtIjogeyJtZXRyaWNzIiA6IHsiU2NvcmUi
IDogWyJHZW9tZXRyaWMiXX0sICJ0ZXN0cyIgOiByZXN1bHRzfX07CisrICAgIH0KKyAKKyAgICAg
ZnVuY3Rpb24gZW5kKCkKKyAgICAgeworQEAgLTQ1OCw2ICs0NjYsMjMgQEAgdmFyIEpldFN0cmVh
bSA9IChmdW5jdGlvbigpIHsKKyAgICAgICAgIGlzUnVubmluZyA9IGZhbHNlOworICAgICAgICAg
aGFzQWxyZWFkeVJ1biA9IHRydWU7CisgICAgICAgICBwcmVwYXJlVG9TdGFydCgpOworKyAgICAg
ICAgLy8gc3VibWl0IHJlc3VsdCB0byBzZXJ2ZXIKKysgICAgICAgIHJlc3VsdHMgPSBKU09OLnN0
cmluZ2lmeShjb21wdXRlUmVmaW5lZFJlc3VsdHMoKSk7CisrICAgICAgICB2YXIgeGhyID0gbmV3
IFhNTEh0dHBSZXF1ZXN0KCk7CisrICAgICAgICB4aHIub3BlbigiUE9TVCIsICIvcmVwb3J0Iik7
CisrICAgICAgIAorKyAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIs
ICJhcHBsaWNhdGlvbi9qc29uIik7CisrICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29u
dGVudC1sZW5ndGgiLCByZXN1bHRzLmxlbmd0aCk7CisrICAgICAgICB4aHIuc2V0UmVxdWVzdEhl
YWRlcigiQ29ubmVjdGlvbiIsICJjbG9zZSIpOworKyAKKysgICAgICAgIHhoci5vbnJlYWR5c3Rh
dGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKysgICAgICAgIGlmKHhoci5yZWFkeVN0YXRlID09IFhN
TEh0dHBSZXF1ZXN0LkRPTkUgJiYgeGhyLnN0YXR1cyA9PSAyMDApIHsKKysgICAgICAgICAgICAg
ICAgY2xvc2VSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisrICAgICAgICAgICAgICAg
IGNsb3NlUmVxdWVzdC5vcGVuKCJHRVQiLCAiL3NodXRkb3duIik7CisrICAgICAgICAgICAgICAg
IGNsb3NlUmVxdWVzdC5zZW5kKCkKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAg
ICB4aHIuc2VuZChyZXN1bHRzKTsKKyAgICAgfQorIAorICAgICBmdW5jdGlvbiBpdGVyYXRlKCkK
K2RpZmYgLS1naXQgYS9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwgYi9KZXRT
dHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwKK2luZGV4IGUyNzUzNWMuLjAwMTA4N2Qg
MTAwNjQ0CistLS0gYS9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwKKysrKyBi
L0pldFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvaW5kZXguaHRtbAorQEAgLTM0LDggKzM0LDEwIEBA
CisgICAgIHdpbmRvdy5vbmVycm9yID0gZnVuY3Rpb24oKSB7IGFsbElzR29vZCA9IGZhbHNlOyB9
CisgCisgICAgIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7CistICAgICAgICBpZiAoYWxsSXNHb29k
KQorKyAgICAgICAgaWYgKGFsbElzR29vZCkgeworICAgICAgICAgICAgIEpldFN0cmVhbS5pbml0
aWFsaXplKCk7CisrICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5sb2Nh
dGlvbiA9ICJqYXZhc2NyaXB0OkpldFN0cmVhbS5zdGFydCgpIn0sIDMwMDApOworKyAgICAgICAg
fQorICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJi
b2R5IikuaW5uZXJIVE1MID0gIjxoMT5FUlJPUjwvaDE+PHA+RW5jb3VudGVyZWQgZXJyb3JzIGR1
cmluZyBwYWdlIGxvYWQuIFJlZnVzaW5nIHRvIHJ1biBhIHBhcnRpYWwgYmVuY2htYXJrIHN1aXRl
LjwvcD4iOworICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNo
bWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL1NwZWVkb21ldGVyLnBhdGNoIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9TcGVlZG9tZXRlci5wYXRj
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zM2IwZjMyZTFlYjMyNDRiYzAwNDQ4NDUyYjRmNTdkMDgyOTMwNTlmCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVy
L2RhdGEvcGF0Y2hlcy9TcGVlZG9tZXRlci5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorZGlmZiAt
LWdpdCBhL1NwZWVkb21ldGVyL0Z1bGwuaHRtbCBiL1NwZWVkb21ldGVyL0Z1bGwuaHRtbAoraW5k
ZXggNDE5YjlmMi4uMGIwNGM2OSAxMDA2NDQKKy0tLSBhL1NwZWVkb21ldGVyL0Z1bGwuaHRtbAor
KysrIGIvU3BlZWRvbWV0ZXIvRnVsbC5odG1sCitAQCAtNyw3ICs3LDYgQEAKKyAgICAgPHNjcmlw
dCBzcmM9InJlc291cmNlcy9tYWluLmpzIiBkZWZlcj48L3NjcmlwdD4KKyAgICAgPHNjcmlwdCBz
cmM9InJlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzIiBkZWZlcj48L3NjcmlwdD4KKyAgICAg
PHNjcmlwdCBzcmM9InJlc291cmNlcy9iZW5jaG1hcmstcmVwb3J0LmpzIiBkZWZlcj48L3Njcmlw
dD4KKy0gICAgPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzIiBkZWZlcj48
L3NjcmlwdD4KKyAgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0cy5qcyIgZGVmZXI+PC9z
Y3JpcHQ+CisgPC9oZWFkPgorIDxib2R5PgorZGlmZiAtLWdpdCBhL1NwZWVkb21ldGVyL3Jlc291
cmNlcy9iZW5jaG1hcmstcmVwb3J0LmpzIGIvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL2JlbmNobWFy
ay1yZXBvcnQuanMKK2luZGV4IGM0YjRjNjQuLmM0NDUzY2QgMTAwNjQ0CistLS0gYS9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJlcG9ydC5qcworKysrIGIvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL2JlbmNobWFyay1yZXBvcnQuanMKK0BAIC0xLDE2ICsxLDkgQEAKKyAvLyBUaGlzIGZp
bGUgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gcmVwb3J0IHJlc3VsdHMgYXMgbmVlZGVkLgorIAorIChm
dW5jdGlvbiAoKSB7CistICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgJiYgbG9jYXRpb24uc2Vh
cmNoICE9ICc/d2Via2l0JyAmJiBsb2NhdGlvbi5oYXNoICE9ICcjd2Via2l0JykKKy0gICAgICAg
IHJldHVybjsKKy0KKyAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CisgCistICAgIHZhciBzY3JpcHRFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CistICAgIHNjcmlwdEVsZW1lbnQuc3JjID0gJy4u
L3Jlc291cmNlcy9ydW5uZXIuanMnOworLSAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNj
cmlwdEVsZW1lbnQpOworLQorICAgICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnc3R5bGUnKTsKKyAgICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gJ3ByZSB7
IHBhZGRpbmctdG9wOiA2MDBweDsgfSc7CisgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQo
c3R5bGVFbGVtZW50KTsKK0BAIC0zNiwxMCArMjksOCBAQAorICAgICAgICAgICAgICAgICAgICAg
bmFtZTogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0b3I6IGFnZ3JlZ2F0b3J9
OworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBQZXJmVGVzdFJ1bm5lci5wcmVwYXJlVG9N
ZWFzdXJlVmFsdWVzQXN5bmMoY3JlYXRlVGVzdChudWxsLCAnVG90YWwnKSk7CisgICAgICAgICB9
LAorICAgICAgICAgZGlkUnVuU3VpdGVzOiBmdW5jdGlvbiAobWVhc3VyZWRWYWx1ZXMpIHsKKy0g
ICAgICAgICAgICBQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhtZWFzdXJlZFZhbHVl
cy50b3RhbCk7CisgICAgICAgICAgICAgdmFsdWVzQnlJdGVyYXRpb24ucHVzaChtZWFzdXJlZFZh
bHVlcy50ZXN0cyk7CisgICAgICAgICB9LAorICAgICAgICAgZGlkRmluaXNoTGFzdEl0ZXJhdGlv
bjogZnVuY3Rpb24gKCkgeworQEAgLTUyLDE5ICs0MywzMCBAQAorICAgICAgICAgICAgICAgICB2
YWx1ZXMucHVzaCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgIHZhbHVlcy5hZ2dyZWdhdG9yID0g
YWdncmVnYXRvcjsKKyAgICAgICAgICAgICB9CistCisrICAgICAgICAgICAgdmFyIGRpY3QgPSB7
fQorKyAgICAgICAgICAgIGZ1bmN0aW9uIGFkZFRvRGljdGlvbmFyeVZhbHVlKHZhbHVlLCBzdWl0
ZU5hbWUsIHRlc3ROYW1lLCBzdWJ0ZXN0TmFtZSkgeworKyAgICAgICAgICAgICAgICBkaWN0WyJT
cGVlZG9tZXRlciJdID0gZGljdFsiU3BlZWRvbWV0ZXIiXSB8fCB7ICJtZXRyaWNzIiA6IHsgIlRp
bWUiIDogWyAiVG90YWwiLCBdIH0sICJ0ZXN0cyIgOiB7fX07CisrICAgICAgICAgICAgICAgIGRp
Y3RbIlNwZWVkb21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXSA9IGRpY3RbIlNwZWVkb21ldGVy
Il1bInRlc3RzIl1bc3VpdGVOYW1lXSB8fCB7Im1ldHJpY3MiIDogeyAiVGltZSIgOiBbICJUb3Rh
bCIsIF0gfSwgInRlc3RzIiA6IHt9fTsKKysgICAgICAgICAgICAgICAgZGljdFsiU3BlZWRvbWV0
ZXIiXVsidGVzdHMiXVtzdWl0ZU5hbWVdWyJ0ZXN0cyJdW3Rlc3ROYW1lXSA9IGRpY3RbIlNwZWVk
b21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV0gfHwgeyAibWV0
cmljcyIgOiB7ICJUaW1lIiA6IFsgIlRvdGFsIiwgXSB9LCAidGVzdHMiIDoge319OworKyAgICAg
ICAgICAgICAgICBkaWN0WyJTcGVlZG9tZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV1bInRlc3Rz
Il1bdGVzdE5hbWVdWyJ0ZXN0cyJdW3N1YnRlc3ROYW1lXSA9IGRpY3RbIlNwZWVkb21ldGVyIl1b
InRlc3RzIl1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV1bInRlc3RzIl1bc3VidGVzdE5h
bWVdIHx8IHsgIm1ldHJpY3MiIDogeyAiVGltZSIgOiB7ICJjdXJyZW50IiA6IFtbXV0gfSB9fTsK
KysgICAgICAgICAgICAgICAgZGljdFsiU3BlZWRvbWV0ZXIiXVsidGVzdHMiXVtzdWl0ZU5hbWVd
WyJ0ZXN0cyJdW3Rlc3ROYW1lXVsidGVzdHMiXVtzdWJ0ZXN0TmFtZV1bIm1ldHJpY3MiXVsiVGlt
ZSJdWyJjdXJyZW50Il1bMF0ucHVzaCh2YWx1ZSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgIHZhbHVlc0J5SXRlcmF0aW9uLmZvckVhY2goZnVuY3Rpb24gKG1l
YXN1cmVkVmFsdWVzKSB7CisgICAgICAgICAgICAgICAgIGZvciAodmFyIHN1aXRlTmFtZSBpbiBt
ZWFzdXJlZFZhbHVlcykgeworICAgICAgICAgICAgICAgICAgICAgdmFyIHN1aXRlID0gbWVhc3Vy
ZWRWYWx1ZXNbc3VpdGVOYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHRlc3RO
YW1lIGluIHN1aXRlLnRlc3RzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlc3Qg
PSBzdWl0ZS50ZXN0c1t0ZXN0TmFtZV07CistICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgc3VidGVzdE5hbWUgaW4gdGVzdC50ZXN0cykKKysgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHZhciBzdWJ0ZXN0TmFtZSBpbiB0ZXN0LnRlc3RzKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZFRvTWVhc3VyZWRWYWx1ZSh0ZXN0LnRlc3RzW3N1YnRlc3ROYW1lXSwgc3Vp
dGVOYW1lICsgJy8nICsgdGVzdE5hbWUgKyAnLycgKyBzdWJ0ZXN0TmFtZSk7CisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZFRvRGljdGlvbmFyeVZhbHVlKHRlc3QudGVzdHNbc3VidGVz
dE5hbWVdLCBzdWl0ZU5hbWUsIHRlc3ROYW1lLCBzdWJ0ZXN0TmFtZSk7CisrICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvTWVhc3VyZWRWYWx1
ZSh0ZXN0LnRvdGFsLCBzdWl0ZU5hbWUgKyAnLycgKyB0ZXN0TmFtZSwgJ1RvdGFsJyk7CisgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBhZGRUb01lYXN1cmVkVmFs
dWUoc3VpdGUudG90YWwsIHN1aXRlTmFtZSwgJ1RvdGFsJyk7CisgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICB9KTsKKysgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IEpTT04uc3RyaW5n
aWZ5KGRpY3QpOworIAorICAgICAgICAgICAgIHZhciBmdWxsTmFtZXMgPSBuZXcgQXJyYXk7Cisg
ICAgICAgICAgICAgZm9yICh2YXIgZnVsbE5hbWUgaW4gbWVhc3VyZWRWYWx1ZXNCeUZ1bGxOYW1l
KQorQEAgLTcyLDggKzc0LDIyIEBACisgCisgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBmdWxsTmFtZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9
IG1lYXN1cmVkVmFsdWVzQnlGdWxsTmFtZVtmdWxsTmFtZXNbaV1dOworLSAgICAgICAgICAgICAg
ICBQZXJmVGVzdFJ1bm5lci5yZXBvcnRWYWx1ZXMoY3JlYXRlVGVzdChmdWxsTmFtZXNbaV0sIHZh
bHVlcy5hZ2dyZWdhdG9yLCBpICsgMSA9PSBmdWxsTmFtZXMubGVuZ3RoKSwgdmFsdWVzKTsKKyAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgp
OworKyAgICAgICAgICAgIHhoci5vcGVuKCJQT1NUIiwgIi9yZXBvcnQiKTsKKysgCisrICAgICAg
ICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJhcHBsaWNhdGlvbi9q
c29uIik7CisrICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtbGVuZ3Ro
IiwgcmVzdWx0cy5sZW5ndGgpOworKyAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJD
b25uZWN0aW9uIiwgImNsb3NlIik7CisrIAorKyAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVj
aGFuZ2UgPSBmdW5jdGlvbigpIHsKKysgICAgICAgICAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGUg
PT0gWE1MSHR0cFJlcXVlc3QuRE9ORSAmJiB4aHIuc3RhdHVzID09IDIwMCkgeworKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGNsb3NlUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworKyAg
ICAgICAgICAgICAgICAgICAgY2xvc2VSZXF1ZXN0Lm9wZW4oIkdFVCIsICIvc2h1dGRvd24iKTsK
KysgICAgICAgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5zZW5kKCkKKysgICAgICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICB4aHIuc2VuZChyZXN1bHRzKTsKKyAg
ICAgICAgIH0KKyAgICAgfTsKKyB9KSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvamV0c3RyZWFtLnBsYW4gYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9qZXRzdHJlYW0ucGxh
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45YTg5ODgzNGQzMTUzZjgyZWZiMTNiZDRlNGU4MzFhMjYxMDE0YWQ5Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVy
L2RhdGEvcGxhbnMvamV0c3RyZWFtLnBsYW4KQEAgLTAsMCArMSwxNCBAQAoreworICAgICJodHRw
X3NlcnZlcl9kcml2ZXIiOiAiU2ltcGxlSFRUUFNlcnZlckRyaXZlciIsIAorICAgICJiZW5jaG1h
cmtzIjogWworICAgICAgICB7CisgICAgICAgICAgICAidGltZW91dCIgOiA2MDAsCisgICAgICAg
ICAgICAiY291bnQiOiA1LAorICAgICAgICAgICAgImJlbmNobWFya19idWlsZGVyIjogIkpldFN0
cmVhbUJlbmNobWFya0J1aWxkZXIiLAorICAgICAgICAgICAgIm9yaWdpbmFsX2JlbmNobWFyayI6
ICIuLi8uLi8uLi8uLi9QZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbSIsCisgICAgICAgICAgICAi
YmVuY2htYXJrX3BhdGNoIjogImRhdGEvcGF0Y2hlcy9KZXRTdHJlYW0ucGF0Y2giLAorICAgICAg
ICAgICAgImVudHJ5X3BvaW50IjogIkpldFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvaW5kZXguaHRt
bCIsCisgICAgICAgICAgICAib3V0cHV0X2ZpbGUiOiAiamV0c3RyZWFtLnJlc3VsdCIKKyAgICAg
ICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2ht
YXJrX3J1bm5lci9kYXRhL3BsYW5zL3NwZWVkb21ldGVyLnBsYW4gYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9zcGVlZG9tZXRlci5wbGFuCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNmZjEwYTY4NjgwY2RhMjY4OWI3YmYzNzZjYjI3ZGJjZjdhMDhhNDgKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9w
bGFucy9zcGVlZG9tZXRlci5wbGFuCkBAIC0wLDAgKzEsMTQgQEAKK3sKKyAgICAiYmVuY2htYXJr
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImJlbmNobWFya19idWlsZGVyIjogIkdlbmVy
aWNCZW5jaG1hcmtCdWlsZGVyIiwKKyAgICAgICAgICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiZGF0
YS9wYXRjaGVzL1NwZWVkb21ldGVyLnBhdGNoIiwKKyAgICAgICAgICAgICJvcmlnaW5hbF9iZW5j
aG1hcmsiOiAiLi4vLi4vLi4vLi4vUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlciIsCisgICAg
ICAgICAgICAiY291bnQiOiA1LAorICAgICAgICAgICAgImVudHJ5X3BvaW50IjogIlNwZWVkb21l
dGVyL0Z1bGwuaHRtbCIsCisgICAgICAgICAgICAib3V0cHV0X2ZpbGUiOiAic3BlZWRvbWV0ZXIu
cmVzdWx0IiwKKyAgICAgICAgICAgICJ0aW1lb3V0IjogNjAwCisgICAgICAgIH0KKyAgICBdLAor
ICAgICJodHRwX3NlcnZlcl9kcml2ZXIiOiAiU2ltcGxlSFRUUFNlcnZlckRyaXZlciIKK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9nZW5lcmlj
X2ZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZ2Vu
ZXJpY19mYWN0b3J5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3MTBkNGEyY2RlYWY1ODk0OTU0MzY1NDU4MTUx
YWE1NGQ0ZDY2NWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvZ2VuZXJpY19mYWN0b3J5LnB5CkBAIC0wLDAgKzEsMzEgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCisKK2Zyb20gdXRp
bHMgaW1wb3J0IGxvYWRNb2R1bGUsIE1vZHVsZU5vdEZvdW5kRXJyb3IKKworCitfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgR2VuZXJpY0ZhY3Rvcnkob2JqZWN0
KToKKworICAgIHByb2R1Y3RzID0gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGl0
ZXJhdGVHZXRJdGVtKGNscywgb3B0aW9ucywga2V5cyk6CisgICAgICAgIHJldCA9IG9wdGlvbnMK
KyAgICAgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIHJldCA9IHJldC5fX2dldGl0ZW1fXyhrZXkpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJy
b3I6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgQGNs
YXNzbWV0aG9kCisgICAgZGVmIGNyZWF0ZShjbHMsIGRlc2NyaXB0aW9ucyk6CisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHJldHVybiBsb2FkTW9kdWxlKGNscy5pdGVyYXRlR2V0SXRlbShjbHMu
cHJvZHVjdHMsIGRlc2NyaXB0aW9ucykpKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAg
cmFpc2UKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9odHRwX3NlcnZlcl9kcml2ZXIvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL19faW5pdF9fLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2
ZXIvaHR0cF9zZXJ2ZXIvdHdpc3RlZF9odHRwX3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXIvdHdp
c3RlZF9odHRwX3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzJmY2YyNTM4MTJjYWY0YjkxNWViNzE2
MjBkOWEwYTMzZDMzNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlci90d2lzdGVk
X2h0dHBfc2VydmVyLnB5CkBAIC0wLDAgKzEsMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
Citmcm9tIHR3aXN0ZWQud2ViIGltcG9ydCBzdGF0aWMsIHNlcnZlcgorZnJvbSB0d2lzdGVkLndl
Yi5yZXNvdXJjZSBpbXBvcnQgUmVzb3VyY2UKK2Zyb20gdHdpc3RlZC5pbnRlcm5ldCBpbXBvcnQg
cmVhY3RvcgoraW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgc3lzCisKKworY2xhc3MgU2VydmVyQ29u
dHJvbChSZXNvdXJjZSk6CisgICAgaXNMZWFmID0gVHJ1ZQorCisgICAgZGVmIHJlbmRlcl9HRVQo
c2VsZiwgcmVxdWVzdCk6CisgICAgICAgIHJlYWN0b3Iuc3RvcCgpCisgICAgICAgIHJldHVybiAi
IgorCisgICAgZGVmIHJlbmRlcl9QT1NUKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICBzeXMuc3Rk
b3V0LndyaXRlKHJlcXVlc3QuY29udGVudC5nZXR2YWx1ZSgpKQorICAgICAgICByZXR1cm4gJ09L
JworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcGFyc2VyID0gYXJncGFyc2Uu
QXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J3B5dGhvbiBUd2lzdGVkSFRUUFNlcnZlci5weSB3
ZWJSb290JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd3ZWJSb290JykKKyAgICBhcmdzID0g
cGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIHdlYlJvb3QgPSBzdGF0aWMuRmlsZShhcmdzLndlYlJv
b3QpCisgICAgc2VydmVyQ29udHJvbCA9IFNlcnZlckNvbnRyb2woKQorICAgIHdlYlJvb3QucHV0
Q2hpbGQoJ3NodXRkb3duJywgc2VydmVyQ29udHJvbCkKKyAgICB3ZWJSb290LnB1dENoaWxkKCdy
ZXBvcnQnLCBzZXJ2ZXJDb250cm9sKQorICAgIHJlYWN0b3IubGlzdGVuVENQKDAsIHNlcnZlci5T
aXRlKHdlYlJvb3QpKQorICAgIHJlYWN0b3IucnVuKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2
ZXJfZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0
dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDIwOTRi
ODJmMjFmMTg4ZTJhYTY4ZWIyMWUzZDg1YjQwNDY5MTFlOQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIv
aHR0cF9zZXJ2ZXJfZHJpdmVyLnB5CkBAIC0wLDAgKzEsMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorCitmcm9tIGFiYyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKKworCitjbGFzcyBIVFRQU2Vy
dmVyRHJpdmVyKG9iamVjdCk6CisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHNlcnZlKHNl
bGYsIHdlYlJvb3QpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBk
ZWYgZmV0Y2hSZXN1bHQoc2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9z
ZXJ2ZXJfZHJpdmVyX2ZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFy
a19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyX2RyaXZlcl9mYWN0b3J5LnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY4ZTg1MDY2NmVlZGI2NmI2MjkxM2ZkNDg4MDc5NzY5NmZjY2NiNTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
aHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyX2RyaXZlcl9mYWN0b3J5LnB5CkBAIC0wLDAg
KzEsMTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IGpzb24KK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdHB5LmJlbmNobWFya19ydW5uZXIuZ2VuZXJp
Y19mYWN0b3J5IGltcG9ydCBHZW5lcmljRmFjdG9yeQorZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtf
cnVubmVyLnV0aWxzIGltcG9ydCBsb2FkSlNPTkZyb21GaWxlCisKKworZHJpdmVyRmlsZU5hbWUg
PSAnaHR0cF9zZXJ2ZXJfZHJpdmVycy5qc29uJworCisKK2NsYXNzIEhUVFBTZXJ2ZXJEcml2ZXJG
YWN0b3J5KEdlbmVyaWNGYWN0b3J5KToKKworICAgIHByb2R1Y3RzID0gbG9hZEpTT05Gcm9tRmls
ZShvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgZHJpdmVyRmlsZU5hbWUp
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0
dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJzLmpzb24gYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVy
X2RyaXZlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YmIzYmNkY2I2OWQ0ZTU1MzFjNDk5ZWQ5YTY3ZTgz
ZDJhNzcyOTg5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5j
aG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJzLmpzb24K
QEAgLTAsMCArMSw2IEBACit7CisgICJTaW1wbGVIVFRQU2VydmVyRHJpdmVyIjogeworICAgICJt
b2R1bGVOYW1lIjogIlNpbXBsZUhUVFBTZXJ2ZXJEcml2ZXIiLCAKKyAgICAiZmlsZVBhdGgiOiAi
aHR0cF9zZXJ2ZXJfZHJpdmVyLnNpbXBsZV9odHRwX3NlcnZlcl9kcml2ZXIiCisgIH0KK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3Nl
cnZlcl9kcml2ZXIvc2ltcGxlX2h0dHBfc2VydmVyX2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvc2ltcGxlX2h0dHBf
c2VydmVyX2RyaXZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNDI5MmE2NjIzMDgwM2Y5YmZjYTYxYzcyYTIx
ZTVhY2QxNmZjMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9zaW1wbGVfaHR0cF9zZXJ2ZXJfZHJp
dmVyLnB5CkBAIC0wLDAgKzEsNzkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQg
bG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJw
cm9jZXNzCitpbXBvcnQgdGltZQorCitmcm9tIGh0dHBfc2VydmVyX2RyaXZlciBpbXBvcnQgSFRU
UFNlcnZlckRyaXZlcgorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKwor
CitjbGFzcyBTaW1wbGVIVFRQU2VydmVyRHJpdmVyKEhUVFBTZXJ2ZXJEcml2ZXIpOgorCisgICAg
IiIiVGhpcyBjbGFzcyBkZXBlbmRzIG9uIHVuaXggZW52aXJvbm1lbnQsIG5lZWQgdG8gYmUgbW9k
aWZpZWQgdG8gYWNoaWV2ZSBjcm9zc3BsYXRmb3JtIGNvbXBhYmlsaXR5CisgICAgIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyUHJvY2VzcyA9IE5vbmUK
KyAgICAgICAgc2VsZi5zZXJ2ZXJQb3J0ID0gMAorICAgICAgICAjIEZJWE1FOiBUaGlzIG1heSBu
b3QgYmUgcmVsaWFibGUuCisgICAgICAgIF9sb2cuaW5mbygnRmluZGluZyB0aGUgSVAgYWRkcmVz
cyBvZiBjdXJyZW50IG1hY2hpbmUnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmlw
ID0gW2lwIGZvciBpcCBpbiBzb2NrZXQuZ2V0aG9zdGJ5bmFtZV9leChzb2NrZXQuZ2V0aG9zdG5h
bWUoKSlbMl0gaWYgbm90IGlwLnN0YXJ0c3dpdGgoIjEyNy4iKV1bMF0KKyAgICAgICAgICAgIF9s
b2cuaW5mbygnSVAgb2YgY3VycmVudCBtYWNoaW5lIGlzOiAlcycgJSBzZWxmLmlwKQorICAgICAg
ICBleGNlcHQ6CisgICAgICAgICAgICBfbG9nLmVycm9yKCdDYW5ub3QgZ2V0IHRoZSBpcCBhZGRy
ZXNzIG9mIGN1cnJlbnQgbWFjaGluZScpCisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHNl
cnZlKHNlbGYsIHdlYnJvb3QpOgorICAgICAgICBvbGRXb3JraW5nRGlyZWN0b3J5ID0gb3MuZ2V0
Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChf
X2ZpbGVfXykpKQorICAgICAgICBfbG9nLmluZm8oJ0xhdWNobmluZyBhbiBodHRwIHNlcnZlcicp
CisgICAgICAgIHNlbGYuc2VydmVyUHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oWycvdXNyL2Jp
bi9weXRob24nLCAnaHR0cF9zZXJ2ZXIvdHdpc3RlZF9odHRwX3NlcnZlci5weScsIHdlYnJvb3Rd
LCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1z
dWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG9zLmNoZGlyKG9sZFdvcmtpbmdEaXJlY3RvcnkpCisg
ICAgICAgIG1heEF0dGVtcHQgPSA1CisgICAgICAgIGludGVydmFsID0gMC41CisgICAgICAgIF9s
b2cuaW5mbygnU3RhcnQgdG8gZmV0Y2hpbmcgdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBodHRwIHNl
cnZlcicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBwc3V0aWwKKyAgICAgICAg
ICAgIGZvciBhdHRlbXB0IGluIHhyYW5nZShtYXhBdHRlbXB0KToKKyAgICAgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyUG9ydCA9IHBzdXRpbC5Qcm9jZXNz
KHNlbGYuc2VydmVyUHJvY2Vzcy5waWQpLmNvbm5lY3Rpb25zKClbMF1bM11bMV0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXJQb3J0OgorICAgICAgICAgICAgICAgICAgICAgICAg
X2xvZy5pbmZvKCdIVFRQIFNlcnZlciBpcyBzZXJ2aW5nIGF0IHBvcnQ6ICVkJywgc2VsZi5zZXJ2
ZXJQb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBl
eGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAg
ICAgIF9sb2cuaW5mbygnU2VydmVyIHBvcnQgaXMgbm90IGZvdW5kIHRoaXMgdGltZSwgcmV0cnkg
YWZ0ZXIgJWYgc2Vjb25kcycgJSBpbnRlcnZhbCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVw
KGludGVydmFsKQorICAgICAgICAgICAgICAgIGludGVydmFsICo9IDIKKyAgICAgICAgZXhjZXB0
IEltcG9ydEVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvciBhdHRl
bXB0IGluIHhyYW5nZShtYXhBdHRlbXB0KToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oJyAnLmpvaW4oWycvdXNy
L3NiaW4vbHNvZicsICctYScsICctaVRDUCcsICctc1RDUDpMSVNURU4nLCAnLXAnLCBzdHIoc2Vs
Zi5zZXJ2ZXJQcm9jZXNzLnBpZCldKSwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQ
RSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
c2VydmVyUG9ydCA9IGludChyZS5maW5kYWxsKCdUQ1AgXCo6KFxkKykgXChMSVNURU5cKScsIHAu
Y29tbXVuaWNhdGUoKVswXSlbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNl
cnZlclBvcnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdIVFRQIFNl
cnZlciBpcyBzZXJ2aW5nIGF0IHBvcnQ6ICVkJywgc2VsZi5zZXJ2ZXJQb3J0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICMgUmFpc2luZyBl
eGNlcHRpb24gbWVhbnMgdGhlIHNlcnZlciBpcyBub3QgcmVhZHkgdG8gc2VydmVyLCB0cnkgbGF0
ZXIKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBfbG9nLmlu
Zm8oJ1NlcnZlciBwb3J0IGlzIG5vdCBmb3VuZCB0aGlzIHRpbWUsIHJldHJ5IGFmdGVyICVmIHNl
Y29uZHMnICUgaW50ZXJ2YWwpCisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoaW50ZXJ2
YWwpCisgICAgICAgICAgICAgICAgICAgIGludGVydmFsICo9IDIKKyAgICAgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlNlcnZlciBtYXkgbm90IGJlIHNl
cnZpbmciKQorCisgICAgZGVmIGJhc2VVcmwoc2VsZik6CisgICAgICAgIHJldHVybiAiaHR0cDov
LyVzOiVkIiAlIChzZWxmLmlwLCBzZWxmLnNlcnZlclBvcnQpCisKKyAgICBkZWYgZmV0Y2hSZXN1
bHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlcnZlclByb2Nlc3MuY29tbXVuaWNhdGUo
KVswXQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVy
L3V0aWxzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3V0aWxz
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjZiYzRiNjhlOTUxZWE0MDA5MjU4ZjJkOTBlNTQ4MjhjMGRlNjY0YWEK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5u
ZXIvdXRpbHMucHkKQEAgLTAsMCArMSw2MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2lt
cG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCisKKwor
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIE1vZHVsZU5vdEZv
dW5kRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworZGVmIGxvYWRNb2R1bGUobW9kdWxl
RGVzYyk6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBnZXRhdHRyKF9faW1wb3J0X18obW9kdWxl
RGVzY1snZmlsZVBhdGgnXSwgZ2xvYmFscygpLCBsb2NhbHMoKSwgbW9kdWxlRGVzY1snbW9kdWxl
TmFtZSddLCAtMSksIG1vZHVsZURlc2NbJ21vZHVsZU5hbWUnXSkKKyAgICAgICAgcmV0dXJuIHJl
dAorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcmFpc2UgTW9kdWxlTm90Rm91
bmRFcnJvcignTW9kdWxlICglcykgd2l0aCBwYXRoKCVzKSBpcyBub3QgZm91bmQnICUgKG1vZHVs
ZURlc2NbJ21vZHVsZU5hbWUnXSwgbW9kdWxlRGVzY1snZmlsZVBhdGgnXSkpCisKKworZGVmIGdl
dFBhdGhGcm9tUHJvamVjdFJvb3QocmVsYXRpdmVQYXRoVG9Qcm9qZWN0Um9vdCk6CisgICAgIyBD
aG9vc2UgdGhlIGRpcmVjdG9yeSBjb250YWlubmluZyBjdXJyZW50IGZpbGUgYXMgc3RhcnQgcG9p
bnQsCisgICAgIyBjb21wdXRlIHJlbGF0aXZlIHBhdGggYmFzZSBvbiB0aGUgcGFyYW1ldGVyLAor
ICAgICMgYW5kIHJldHVybiBhbiBhYnNvbHV0ZSBwYXRoCisgICAgcmV0dXJuIG9zLnBhdGguYWJz
cGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVf
XykpLCByZWxhdGl2ZVBhdGhUb1Byb2plY3RSb290KSkKKworCitkZWYgbG9hZEpTT05Gcm9tRmls
ZShmaWxlUGF0aCk6CisgICAgdHJ5OgorICAgICAgICBqc29uT2JqZWN0ID0ganNvbi5sb2FkKG9w
ZW4oZmlsZVBhdGgsICdyJykpCisgICAgICAgIGFzc2VydChqc29uT2JqZWN0KQorICAgICAgICBy
ZXR1cm4ganNvbk9iamVjdAorICAgIGV4Y2VwdDoKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJJ
bnZhbGlkIGpzb24gZm9ybWF0IG9yIGVtcHR5IGpzb24gd2FzIGZvdW5kIGluICVzIiAlIChmaWxl
UGF0aCkpCisKKworIyBCb3Jyb3cgdGhpcyBjb2RlIGZyb20KKyMgJ2h0dHA6Ly9zdGFja292ZXJm
bG93LmNvbS9xdWVzdGlvbnMvMjI4MTg1MC90aW1lb3V0LWZ1bmN0aW9uLWlmLWl0LXRha2VzLXRv
by1sb25nLXRvLWZpbmlzaCcKK2NsYXNzIFRpbWVvdXRFcnJvcihFeGNlcHRpb24pOgorICAgIHBh
c3MKKworCitjbGFzcyB0aW1lb3V0OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlY29uZHM9
MSwgZXJyb3JfbWVzc2FnZT0nVGltZW91dCcpOgorICAgICAgICBzZWxmLnNlY29uZHMgPSBzZWNv
bmRzCisgICAgICAgIHNlbGYuZXJyb3JfbWVzc2FnZSA9IGVycm9yX21lc3NhZ2UKKworICAgIGRl
ZiBoYW5kbGVfdGltZW91dChzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgcmFpc2UgVGlt
ZW91dEVycm9yKHNlbGYuZXJyb3JfbWVzc2FnZSkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6
CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHNlbGYuaGFuZGxlX3RpbWVv
dXQpCisgICAgICAgIHNpZ25hbC5hbGFybShzZWxmLnNlY29uZHMpCisKKyAgICBkZWYgX19leGl0
X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIHNpZ25hbC5hbGFybSgw
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251619</attachid>
            <date>2015-04-25 00:18:14 -0700</date>
            <delta_ts>2015-04-25 01:14:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144038-20150425001708.patch</filename>
            <type>text/plain</type>
            <size>48750</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMTM2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGMzYTBlZTY0MjZkMjllN2Y0YjU4Y2Y2NDMxMzRhYjJj
NmY1MzJhZS4uNTVmMzlkNzIxZDBmMzRmMTYxYmE0MGNkODQ3NjIxNjJjZTQ0ZDUwZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0
IEBACisyMDE1LTA0LTI0ICBEZXdlaSBaaHUgIDxkZXdlaV96aHVAYXBwbGUuY29tPgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQwMzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EKKworICAgICAgICBBZGQgYSBzY3JpcHQgdG8g
cnVuIFNwZWVkb21ldGVyIGFuZCBKZXRTdHJlYW0gb24gYSBicm93c2VyLgorCisgICAgICAgICog
U2NyaXB0cy9ydW4tYmVuY2htYXJrOiBXcmFwcGVyIHNjcmlwdCB0byBydW4gYmVuY2htYXJrLgor
ICAgICAgICAobWFpbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVu
bmVyL1JFQURNRS5tZDogSW50cm9kdWN0aW9uIG9mIHRoaXMgc2NyaXB0LgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9fX2luaXRfXy5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVy
L19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFy
a19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvYmVuY2htYXJrX2J1aWxkZXJfZmFjdG9yeS5weTog
QWRkZWQuCisgICAgICAgIChCZW5jaG1hcmtCdWlsZGVyRmFjdG9yeSk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2JlbmNobWFy
a19idWlsZGVycy5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNo
bWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvZ2VuZXJpY19iZW5jaG1hcmtfYnVpbGRlci5w
eTogQWRkZWQuCisgICAgICAgIChHZW5lcmljQmVuY2htYXJrQnVpbGRlcik6CisgICAgICAgIChH
ZW5lcmljQmVuY2htYXJrQnVpbGRlci5wcmVwYXJlKToKKyAgICAgICAgKEdlbmVyaWNCZW5jaG1h
cmtCdWlsZGVyLl9jb3B5QmVuY2htYXJrVG9UZW1wRGlyKToKKyAgICAgICAgKEdlbmVyaWNCZW5j
aG1hcmtCdWlsZGVyLl9hcHBseVBhdGNoKToKKyAgICAgICAgKEdlbmVyaWNCZW5jaG1hcmtCdWls
ZGVyLmNsZWFuKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
YmVuY2htYXJrX2J1aWxkZXIvamV0c3RyZWFtX2JlbmNobWFya19idWlsZGVyLnB5OiBBZGRlZC4K
KyAgICAgICAgKEpldFN0cmVhbUJlbmNobWFya0J1aWxkZXIpOgorICAgICAgICAoSmV0U3RyZWFt
QmVuY2htYXJrQnVpbGRlci5wcmVwYXJlKToKKyAgICAgICAgKEpldFN0cmVhbUJlbmNobWFya0J1
aWxkZXIuX3J1bkNyZWF0ZVNjcmlwdCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5j
aG1hcmtfcnVubmVyL2JlbmNobWFya19ydW5uZXIucHk6IE1haW4gbW9kdWxlIHRoYXQgbWFzdGVy
cyBhbGwgdGhlIHByb2Nlc3NlcyBvZiBiZW5jaG1hcmsgcnVubmluZy4KKyAgICAgICAgKEJlbmNo
bWFya1J1bm5lcik6CisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIuX19pbml0X18pOgorICAgICAg
ICAoQmVuY2htYXJrUnVubmVyLmV4ZWN1dGUpOgorICAgICAgICAoQmVuY2htYXJrUnVubmVyLmR1
bXApOgorICAgICAgICAoQmVuY2htYXJrUnVubmVyLndyYXApOgorICAgICAgICAoQmVuY2htYXJr
UnVubmVyLm1lcmdlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5u
ZXIvYnJvd3Nlcl9kcml2ZXIvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlci5w
eTogQWRkZWQuCisgICAgICAgIChCcm93c2VyRHJpdmVyKToKKyAgICAgICAgKEJyb3dzZXJEcml2
ZXIucHJlcGFyZUVudik6CisgICAgICAgIChCcm93c2VyRHJpdmVyLmxhdW5jaFVybCk6CisgICAg
ICAgIChCcm93c2VyRHJpdmVyLmNsb3NlQnJvd3Nlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyX2ZhY3Rv
cnkucHk6IEFkZGVkLgorICAgICAgICAoQnJvd3NlckRyaXZlckZhY3RvcnkpOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2Vy
X2RyaXZlcnMuanNvbjogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1h
cmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9jaHJvbWVfZHJpdmVyLnB5OiBBZGRlZC4KKyAg
ICAgICAgKE9TWENocm9tZURyaXZlcik6CisgICAgICAgIChPU1hDaHJvbWVEcml2ZXIucHJlcGFy
ZUVudik6CisgICAgICAgIChPU1hDaHJvbWVEcml2ZXIubGF1bmNoVXJsKToKKyAgICAgICAgKE9T
WENocm9tZURyaXZlci5jbG9zZUJyb3dzZXJzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X3NhZmFyaV9kcml2ZXIucHk6IEFk
ZGVkLgorICAgICAgICAoT1NYU2FmYXJpRHJpdmVyKToKKyAgICAgICAgKE9TWFNhZmFyaURyaXZl
ci5wcmVwYXJlRW52KToKKyAgICAgICAgKE9TWFNhZmFyaURyaXZlci5sYXVuY2hVcmwpOgorICAg
ICAgICAoT1NYU2FmYXJpRHJpdmVyLmNsb3NlQnJvd3NlcnMpOgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvSmV0U3RyZWFtLnBhdGNoOiBQ
YXRjaCB0aGF0IG1ha2VzIEpldFN0cmVhbSBjb21wYXRpYmxlIHdpdGggdGhpcyBzY3JpcHQuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9T
cGVlZG9tZXRlci5wYXRjaDogUGF0Y2ggdGhhdCBtYWtlcyBTcGVlZG9tZXRlciBjb21wYXRpYmxl
IHdpdGggdGhpcyBzY3JpdHAuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtf
cnVubmVyL2RhdGEvcGxhbnMvamV0c3RyZWFtLnBsYW46IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL3NwZWVkb21ldGVyLnBsYW46
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9nZW5l
cmljX2ZhY3RvcnkucHk6IEZhY3RvcnkgZm9yIGdlbmVyaWMgcHVycG9zZS4KKyAgICAgICAgKEdl
bmVyaWNGYWN0b3J5KToKKyAgICAgICAgKEdlbmVyaWNGYWN0b3J5Lml0ZXJhdGVHZXRJdGVtKToK
KyAgICAgICAgKEdlbmVyaWNGYWN0b3J5LmNyZWF0ZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9fX2luaXRfXy5weTogQWRk
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2Vy
dmVyX2RyaXZlci9odHRwX3NlcnZlci90d2lzdGVkX2h0dHBfc2VydmVyLnB5OiBBZGRlZC4KKyAg
ICAgICAgKFNlcnZlckNvbnRyb2wpOgorICAgICAgICAoU2VydmVyQ29udHJvbC5yZW5kZXJfR0VU
KToKKyAgICAgICAgKFNlcnZlckNvbnRyb2wucmVuZGVyX1BPU1QpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2
ZXJfZHJpdmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKEhUVFBTZXJ2ZXJEcml2ZXIpOgorICAgICAg
ICAoSFRUUFNlcnZlckRyaXZlci5zZXJ2ZSk6CisgICAgICAgIChIVFRQU2VydmVyRHJpdmVyLmZl
dGNoUmVzdWx0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIv
aHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyX2RyaXZlcl9mYWN0b3J5LnB5OiBBZGRlZC4K
KyAgICAgICAgKEhUVFBTZXJ2ZXJEcml2ZXJGYWN0b3J5KToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyX2Ry
aXZlcnMuanNvbjogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtf
cnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9zaW1wbGVfaHR0cF9zZXJ2ZXJfZHJpdmVyLnB5OiBB
ZGRlZC4KKyAgICAgICAgKFNpbXBsZUhUVFBTZXJ2ZXJEcml2ZXIpOgorICAgICAgICAoU2ltcGxl
SFRUUFNlcnZlckRyaXZlci5kZXBlbmRzKToKKyAgICAgICAgKFNpbXBsZUhUVFBTZXJ2ZXJEcml2
ZXIuX19pbml0X18pOgorICAgICAgICAoU2ltcGxlSFRUUFNlcnZlckRyaXZlci5zZXJ2ZSk6Cisg
ICAgICAgIChTaW1wbGVIVFRQU2VydmVyRHJpdmVyLmJhc2VVcmwpOgorICAgICAgICAoU2ltcGxl
SFRUUFNlcnZlckRyaXZlci5mZXRjaFJlc3VsdCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9iZW5jaG1hcmtfcnVubmVyL3V0aWxzLnB5OiBVdGlsaXR5IG1vZHVsZS4KKyAgICAgICAgKE1v
ZHVsZU5vdEZvdW5kRXJyb3IpOgorICAgICAgICAobG9hZE1vZHVsZSk6CisgICAgICAgIChnZXRQ
YXRoRnJvbVByb2plY3RSb290KToKKyAgICAgICAgKGxvYWRKU09ORnJvbUZpbGUpOgorICAgICAg
ICAoVGltZW91dEVycm9yKToKKyAgICAgICAgKHRpbWVvdXQpOgorICAgICAgICAodGltZW91dC5f
X2luaXRfXyk6CisgICAgICAgICh0aW1lb3V0LmhhbmRsZV90aW1lb3V0KToKKyAgICAgICAgKHRp
bWVvdXQuX19lbnRlcl9fKToKKyAgICAgICAgKHRpbWVvdXQuX19leGl0X18pOgorCiAyMDE1LTA0
LTIxICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNd
IEV4dGVuZCBhY3Rpb24gbWVudXMgdG8gc3VwcG9ydCBQREYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvcnVuLWJlbmNobWFyayBiL1Rvb2xzL1NjcmlwdHMvcnVuLWJlbmNobWFyawpuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41YTU3NTM3OWQ4NzY2YTFhMDIyNWRmN2FmMTM2ZWU0Yzk3ZTVhMTQxCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tYmVuY2htYXJrCkBAIC0wLDAgKzEsMzcgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitm
cm9tIHdlYmtpdHB5LmJlbmNobWFya19ydW5uZXIuYmVuY2htYXJrX3J1bm5lciBpbXBvcnQgQmVu
Y2htYXJrUnVubmVyCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKK19sb2cuc2V0TGV2
ZWwobG9nZ2luZy5JTkZPKQorY2ggPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorZm9ybWF0dGVy
ID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzIC0gJShsZXZlbG5hbWUpcyAtICUobWVz
c2FnZSlzJykKK2NoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCitfbG9nLmFkZEhhbmRsZXIoY2gp
CisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihk
ZXNjcmlwdGlvbj0nQXV0b21hdGUgdGhlIGJyb3dzZXIgYmFzZWQgcGVyZm9ybWFuY2UgYmVuY2ht
YXJrcycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRwdXQtZmlsZScsIGRlc3Q9J291
dHB1dCcsIGRlZmF1bHQ9Tm9uZSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJ1aWxkLWRp
cmVjdG9yeScsIGRlc3Q9J2J1aWxkRGlyJywgcmVxdWlyZWQ9VHJ1ZSkKKyAgICBwYXJzZXIuYWRk
X2FyZ3VtZW50KCctLXBsYW4nLCBkZXN0PSdwbGFuJywgcmVxdWlyZWQ9VHJ1ZSkKKyAgICBwYXJz
ZXIuYWRkX2FyZ3VtZW50KCctLXBsYXRmb3JtJywgZGVzdD0ncGxhdGZvcm0nLCBkZWZhdWx0PSdv
c3gnLCBjaG9pY2VzPVsnb3N4JywgJ2lvcycsICd3aW5kb3dzJ10sIHJlcXVpcmVkPVRydWUpCisg
ICAgIyBGSVhNRTogU2hvdWxkIHdlIGFkZCBjaHJvbWUgYXMgYW4gb3B0aW9uPyBXZWxsLCBjaHJv
bWUgdXNlcyB3ZWJraXQgaW4gaU9TLgorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYnJvd3Nl
cicsIGRlc3Q9J2Jyb3dzZXInLCBkZWZhdWx0PSdzYWZhcmknLCBjaG9pY2VzPVsnc2FmYXJpJywg
J2Nocm9tZSddLCByZXF1aXJlZD1UcnVlKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGVi
dWcnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygp
CisgICAgCisgICAgaWYgYXJncy5kZWJ1ZzoKKyAgICAgICAgX2xvZy5zZXRMZXZlbChsb2dnaW5n
LkRFQlVHKQorICAgIF9sb2cuZGVidWcoJ0luaXRpYWxpemluZyBwcm9ncmFtIHdpdGggZm9sbG93
aW5nIHBhcmFtZXRlcnMnKQorICAgIF9sb2cuZGVidWcoJ1x0b3V0cHV0IGZpbGUgbmFtZVx0OiAl
cycgJSBhcmdzLm91dHB1dCkKKyAgICBfbG9nLmRlYnVnKCdcdGJ1aWxkIGRpcmVjdG9yeVx0OiAl
cycgJSBhcmdzLmJ1aWxkRGlyKQorICAgIF9sb2cuZGVidWcoJ1x0cGxhbiBuYW1lXHQ6ICVzJywg
YXJncy5wbGFuKQorICAgIHJ1bm5lciA9IEJlbmNobWFya1J1bm5lcihhcmdzLnBsYW4sIGFyZ3Mu
YnVpbGREaXIsIGFyZ3Mub3V0cHV0LCBhcmdzLnBsYXRmb3JtLCBhcmdzLmJyb3dzZXIpCisgICAg
cnVubmVyLmV4ZWN1dGUoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4o
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL1JF
QURNRS5tZCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9SRUFETUUu
bWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTIzNTBkZmRlZjgxNmFmOGQ1MjQyNTg4NDUwZTkzZTAwZTcwNTAzYwot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5l
ci9SRUFETUUubWQKQEAgLTAsMCArMSwxMTEgQEAKKyMgQmVuY2htYXJrIFJ1bm5lciAKK1RoaXMg
aXMgYSBzY3JpcHQgZm9yIGF1dG9tYXRpbmcgdGhlIGJyb3dzZXIgYmFzZWQgYmVuY2htYXJrcyhl
LmcuIFNwZWVkb21ldGVyLCBKZXRTdHJlYW0pCisjIyBQcm9qZWN0IFN0cnVjdHVyZQorYGBgCiti
ZW5jaG1hcmtfcnVubmVyCivilJzilIDilIAgUkVBRE1FLm1kCivilJzilIDilIAgX19pbml0X18u
cHkKK+KUnOKUgOKUgCBiZW5jaG1hcmtfYnVpbGRlcgor4pSCwqDCoCDilJzilIDilIAgX19pbml0
X18ucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGJlbmNobWFya19idWlsZGVyX2ZhY3RvcnkucHkKK+KU
gsKgwqAg4pSc4pSA4pSAIGJlbmNobWFya19idWlsZGVycy5qc29uCivilILCoMKgIOKUnOKUgOKU
gCBnZW5lcmljX2JlbmNobWFya19idWlsZGVyLnB5CivilILCoMKgIOKUlOKUgOKUgCBqZXRzdHJl
YW1fYmVuY2htYXJrX2J1aWxkZXIucHkKK+KUnOKUgOKUgCBiZW5jaG1hcmtfcnVubmVyLnB5Civi
lJzilIDilIAgYnJvd3Nlcl9kcml2ZXIKK+KUgsKgwqAg4pSc4pSA4pSAIF9faW5pdF9fLnB5Civi
lILCoMKgIOKUnOKUgOKUgCBicm93c2VyX2RyaXZlci5weQor4pSCwqDCoCDilJzilIDilIAgYnJv
d3Nlcl9kcml2ZXJfZmFjdG9yeS5weQor4pSCwqDCoCDilJzilIDilIAgYnJvd3Nlcl9kcml2ZXJz
Lmpzb24KK+KUgsKgwqAg4pSc4pSA4pSAIG9zeF9jaHJvbWVfZHJpdmVyLnB5CivilILCoMKgIOKU
lOKUgOKUgCBvc3hfc2FmYXJpX2RyaXZlci5weQor4pSc4pSA4pSAIGRhdGEKK+KUgsKgwqAg4pSc
4pSA4pSAIHBhdGNoZXMKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgSmV0U3RyZWFtLnBhdGNo
CivilILCoMKgIOKUgsKgwqAg4pSU4pSA4pSAIFNwZWVkb21ldGVyLnBhdGNoCivilILCoMKgIOKU
lOKUgOKUgCBwbGFucwor4pSCwqDCoCAgICAg4pSc4pSA4pSAIGpldHN0cmVhbS5wbGFuCivilILC
oMKgICAgICDilJTilIDilIAgc3BlZWRvbWV0ZXIucGxhbgor4pSc4pSA4pSAIGdlbmVyaWNfZmFj
dG9yeS5weQor4pSc4pSA4pSAIGh0dHBfc2VydmVyX2RyaXZlcgor4pSCwqDCoCDilJzilIDilIAg
X19pbml0X18ucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGh0dHBfc2VydmVyCivilILCoMKgIOKUgsKg
wqAg4pSU4pSA4pSAIHR3aXN0ZWRfaHR0cF9zZXJ2ZXIucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGh0
dHBfc2VydmVyX2RyaXZlci5weQor4pSCwqDCoCDilJzilIDilIAgaHR0cF9zZXJ2ZXJfZHJpdmVy
X2ZhY3RvcnkucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGh0dHBfc2VydmVyX2RyaXZlcnMuanNvbgor
4pSCwqDCoCDilJTilIDilIAgc2ltcGxlX2h0dHBfc2VydmVyX2RyaXZlci5weQor4pSU4pSA4pSA
IHV0aWxzLnB5CitgYGAKKyMjIFJlcXVpcmVtZW50cworKiBweXRob24gbW9kdWxlczoKKyAgICAq
IFB5T2JqYworICAgICogcHN1dGlscyAob3B0aW9uYWwpCisKKyMjIEhPVyBUT3MKKyMjIyBIb3cg
dG8gcnVuCitgYGBzaGVsbAorICAgIHB5dGhvbiBwYXRoL3RvL3J1bl9iZW5jaG1hcmsgLS1idWls
ZC1kaXJlY3RvcnkgcGF0aC90by9icm93c2VyL2RpcmVjdG9yeSAtLXBsYW4ganNvbl9mb3JtYXRf
cGxhbiAtLXBsYXRmb3JtIHRhcmdldF9wbGF0Zm9ybSAtLWJyb3dzZXIgdGFyZ2V0X2Jyb3dzZXIK
K2BgYAorKiAqKnBhdGgvdG8vYnJvd3Nlci9kaXJlY3RvcnkqKjogc2hvdWxkIGJlIHRoZSBmb2xk
ZXIgY29udGFpbmluZyB0aGUgZXhlY3V0YWJsZSBiaW5hcnkoZS5nLiAvQXBwbGljYXRpb24vIG9u
IE9TWCB3aGljaCBjb250YWlucyBTYWZhcmkuYXBwKQorKiAqKmpzb25fZm9ybWF0X3BsYW4qKjog
dGhlIGJlbmNobWFyayBwbGFuIHlvdSB3YW50IHRvIGV4ZWN1dGUgIAorCisjIyMgSG93IHRvIGNy
ZWF0ZSBhIHBsYW4KK1RvIGNyZWF0ZSBhIHBsYW4sIHlvdSBtYXkgcmVmZXIgdG8gUGxhbnMvamV0
c3RyZWFtLnBsYW4uCitgYGBqc29uIAoreworICAgICJodHRwX3NlcnZlcl9kcml2ZXIiOiAiU2lt
cGxlSFRUUFNlcnZlckRyaXZlciIsIAorICAgICJiZW5jaG1hcmtzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAidGltZW91dCIgOiA2MDAsCisgICAgICAgICAgICAiY291bnQiOiA1LAorICAg
ICAgICAgICAgImJlbmNobWFya19idWlsZGVyIjogIkpldFN0cmVhbUJlbmNobWFya0J1aWxkZXIi
LAorICAgICAgICAgICAgIm9yaWdpbmFsX2JlbmNobWFyayI6ICIuLi8uLi8uLi8uLi9QZXJmb3Jt
YW5jZVRlc3RzL0pldFN0cmVhbSIsCisgICAgICAgICAgICAiYmVuY2htYXJrX3BhdGNoIjogImRh
dGEvcGF0Y2hlcy9KZXRTdHJlYW0ucGF0Y2giLAorICAgICAgICAgICAgImVudHJ5X3BvaW50Ijog
IkpldFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvaW5kZXguaHRtbCIsCisgICAgICAgICAgICAib3V0
cHV0X2ZpbGUiOiAiamV0c3RyZWFtLnJlc3VsdCIKKyAgICAgICAgfQorICAgIF0KK30KK2BgYAor
UGxhbiBpcyBhIGpzb24tZm9ybWF0dGVkIGRpY3Rpb25hcnkgd2hpY2ggY29udGFpbnMgZm9sbG93
aW5nIGtleXMgCisqICoqaHR0cF9zZXJ2ZXJfZHJpdmVyKio6ICgqKmNhc2Utc2Vuc2l0aXZlKiop
IHRoZSBodHRwIHNlcnZlciBtb2R1bGUgeW91IHdhbnQgdG8gaG9zdCB0aGUgcmVzb3VyY2VzLiBD
dXJyZW50IGF2YWlsYWJsZSBvcHRpb24gaXMgIlNpbXBsZUhUVFBTZXJ2ZXJIYW5kbGUiIHdoaWNo
IGlzIGJhc2VkIG9uIHB5dGhvbiB0d2lzdGVkIGZyYW1ld29yay4KKyogKipiZW5jaG1hcmtzKio6
IGNvbnRhaW5zIGEgbGlzdCBvZiBiZW5jaG1hcmtzIHlvdSB3YW50IHRvIHJ1biwgZWFjaCBiZW5j
aG1hcmsgaXMgYSBsaXN0IGNvbnRhaW5zIGZvbGxvd2luZyBrZXlzOgorICAgICogKip0aW1lb3V0
Kio6IHRpbWUgbGltaXQgZm9yICoqRUFDSCBSVU4qKiBvZiB0aGUgYmVuY2htYXJrLiBUaGlzIGNh
biBhdm9pZCBwcm9ncmFtIGdldHRpbmcgc3R1Y2sgaW4gdGhlIGV4dHJlbWUgY2lyY3Vtc3RhbmNl
cy4gVGhlIHRpbWUgbGltaXQgaXMgc3VnZ2VzdGVkIHRvIGJlIDEuNS0yeCB0aGUgdGltZSBzcGVu
dCBpbiBhIG5vcm1hbCBydW4uCisgICAgKiAqKmNvdW50Kio6IHRoZSBudW1iZXIgb2YgdGltZXMg
eW91IHdhbnQgdG8gcnVuIGJlbmNobWFyaworICAgICogKipiZW5jaG1hcmtfYnVpbGRlcioqOiAg
YnVpbGRlciBvZiB0aGUgYmVuY2htYXJrIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBhcnJhbmdp
bmcgYmVuY2htYXJrIGJlZm9yZSB0aGUgd2ViIHNlcnZlciBzZXJ2aW5nIHRoZSBkaXJlY3Rvcnku
IEluIG1vc3QgY2FzZSwgJ0dlbmVyaWNCZW5jaG1hcmtIYW5kbGVyJyBpcyBzdWZmaWNpZW50LiBJ
dCBjb3BpZXMgdGhlIGJlbmNobWFyayB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGFwcGxp
ZXMgcGF0Y2ggdG8gYmVuY2htYXJrLiBJZiB5b3UgaGF2ZSBzcGVjaWFsIHJlcXVpcmVtZW50LCB5
b3UgY291bGQgZGVzaWduIHlvdXIgb3duIGJlbmNobWFyayBoYW5kbGUsIGp1c3QgbGlrZSB0aGUg
J0pldFN0cmVhbUJlbmNobWFya0hhbmRsZScgaW4gdGhpcyBleGFtcGxlLgorICAgICogKipvcmln
aW5hbF9iZW5jaG1hcmsqKjogcGF0aCBvZiBiZW5jaG1hcmssIGEgcmVsYXRpdmUgcGF0aCB0byB0
aGUgcm9vdCBvZiB0aGlzIHByb2plY3QgKCdiZW5jaG1hcmtfcnVubmVyJyBkaXJlY3RvcnkpCisg
ICAgKiAqKmJlbmNobWFya19wYXRoKio6ICgqKk9QVElPTkFMKiopIHBhdGggb2YgcGF0Y2gsIGEg
cmVsYXRpdmUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGlzIHByb2plY3QgKCdiZW5jaG1hcmtfcnVu
bmVyJyBkaXJlY3RvcnkpCisgICAgKiAqKmVudHJ5X3BvaW50Kio6IHRoZSByZWxhdGl2ZSB1cmwg
eW91IHdhbnQgYnJvd3NlciB0byBsYXVuY2ggKGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgd2Vicm9v
dCkKKyAgICAqICoqb3V0cHV0X2ZpbGUqKjogc3BlY2lmeSB0aGUgb3V0cHV0IGZpbGUKKworIyMj
IEhvdyB0byBpbXBvcnQgYSBiZW5jaG1hcmsKKyogTW9kaWZ5IHRoZSBiZW5jaG1hcmsgaHRtbCBm
aWxlLCBtYWtlIHN1cmUgdGhlIHBhZ2UgaGFzIGZvbGxvd2luZyBmdW5jdGlvbmFsaXRpZXM6Cisg
ICAgKiBXaGVuIHlvdSBsYXVuY2ggdGhlIHBhZ2UoJ2VudHJ5X3BvaW50JyBpbiBiZW5jaG1hcmsp
LCB0aGUgdGVzdCB3aWxsIHN0YXJ0IGF1dG9tYXRpY2FsbHkKKyAgICAqIE9yZ2FuaXppbmcgdGhl
IHJlc3VsdHMKKyAgICAqICdQT1NUJyBpbmZvcm1hdGlvbiB0byAnL3JlcG9ydCcsIGFuZCAnR0VU
JyAnL3NodXRkb3duJyB3aGVuIHBvc3Qgc3VjY2VlZHMuIEV4YW1wbGU6CisgICAgKiBgYGBqcwor
ICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgeGhyLm9wZW4oIlBP
U1QiLCAiL3JlcG9ydCIpOworICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlw
ZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CisgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29u
dGVudC1sZW5ndGgiLCByZXN1bHRzLmxlbmd0aCk7CisgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRl
cigiQ29ubmVjdGlvbiIsICJjbG9zZSIpOworICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICAgIGlmKHhoci5yZWFkeVN0YXRlID09IDQgJiYgeGhyLnN0
YXR1cyA9PSAyMDApIHsKKyAgICAgICAgICAgICAgdmFyIGNsb3NlUmVxdWVzdCA9IG5ldyBYTUxI
dHRwUmVxdWVzdCgpOworICAgICAgICAgICAgICBjbG9zZVJlcXVlc3Qub3BlbigiR0VUIiwgJy9z
aHV0ZG93bicpOworICAgICAgICAgICAgICBjbG9zZVJlcXVlc3Quc2VuZCgpCisgICAgICAgICAg
fQorICAgICAgfQorICAgICAgeGhyLnNlbmQocmVzdWx0cyk7CitgYGAgCisqIENyZWF0ZSBhIHBh
dGNoIGZpbGUgYWdhaW5zdCBvcmlnaW5hbCBmaWxlCisgICAgKiBHbyB0byB0aGUgZGlyZWN0b3J5
IGNvbnRhaW5zIHRoZSBiZW5jaG1hcmsgZGlyZWN0b3J5IChlLmcuIGZvciBKZXRTdHJlYW0sIHlv
dSBzaG91bGQgZ28gdG8gUGVyZm9ybWFjZVRlc3QgZm9sZGVyKQorICAgICogVXNlIGBgYGdpdCBk
aWZmIC0tcmVsYXRpdmUgSEVBRCA+IHlvdXIucGF0Y2hgYGAgdG8gY3JlYXRlIHlvdXIgcGF0Y2gK
KyAgICAqICgqKlN1Z2dlc3RlZCoqKSBtb3ZlIHRoZSBwYXRjaCB0byB0aGUgJ1BhdGNoZXMnIGRp
cmVjdG9yeSB1bmRlciBwcm9qZWN0IGRpcmVjdG9yeQorKiBDcmVhdGUgYSBwbGFuIGZvciB0aGUg
YmVuY2htYXJrIChyZWZlciB0byAqKiJIb3cgdG8gY3JlYXRlIGEgcGxhbiIqKiBmb3IgbW9yZSBk
ZXRhaWxzKQorKiBEbyBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gKipPTkxZIElGIE5FRURFRCoqLiBJ
biBtb3N0IGNhc2UsIHlvdSBkbyBub3QgaGF2ZSB0by4KKyAgICAqIElmIHlvdSB3YW50IHRvIGN1
c3RvbWl6ZSBCcm93c2VyRHJpdmVyIGZvciBzcGVjaWZpYyBicm93c2VyL3BsYXRmb3JtLCB5b3Ug
bmVlZCB0byBleHRlbmQgYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXIucHkgYW5kIHJlZ2lz
dGVyIHlvdXIgbW9kdWxlIGluIGJyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyc2pzb24uCisg
ICAgKiBJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgSFRUUFNlcnZlckRyaXZlciwgeW91IG5lZWQg
dG8gZXh0ZW5kIGh0dHBfc2VydmVyX2RyaXJ2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyIGFuZCByZWdp
c3RlciB5b3VyIG1vZHVsZSBpbiBodHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVy
cy5qc29uLgorICAgICogSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIFJlc3VsdFdyYXBwZXIsIHlv
dSBuZWVkIHRvIGV4dGVuZCByZXN1bHRfd3JhcHBlci9iYXNlX3Jlc3VsdF93cmFwcGVyLnB5IGFu
ZCByZWdpc3RlciB5b3VyIG1vZHVsZSBpbiByZXN1bHRfd3JhcHBlci9yZXN1bHRfd3JhcHBlcnMu
anNvbiAKKyAgICAqIElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSBCZW5jaG1hcmtCdWlsZGVyLCB5
b3UgbmVlZCB0byBleHRlbmQgYmVuY2htYXJrX2J1aWxkZXIvZ2VuZXJpY19iZW5jaG1hcmtfYnVp
bGRlciByZWdpc3RlciB5b3UgbW9kdWxlIGluIGJlbmNobWFya19idWlsZGVyL2JlbmNobWFya19i
dWlsZGVycy5qc29uCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFy
a19ydW5uZXIvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19y
dW5uZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1
YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1h
cmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL19faW5pdF9fLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtf
YnVpbGRlci9iZW5jaG1hcmtfYnVpbGRlcl9mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2JlbmNobWFya19idWlsZGVy
X2ZhY3RvcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTYwMWQzZjE1ZjFmMDM2NDMzOWFlMjRkNGY4ZWUxYWM4
NjYyMjQ3MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2ht
YXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9iZW5jaG1hcmtfYnVpbGRlcl9mYWN0b3J5LnB5
CkBAIC0wLDAgKzEsMTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdHB5LmJlbmNobWFya19ydW5u
ZXIuZ2VuZXJpY19mYWN0b3J5IGltcG9ydCBHZW5lcmljRmFjdG9yeQorZnJvbSB3ZWJraXRweS5i
ZW5jaG1hcmtfcnVubmVyLnV0aWxzIGltcG9ydCBsb2FkSlNPTkZyb21GaWxlCisKKworYnVpbGRl
ckZpbGVOYW1lID0gJ2JlbmNobWFya19idWlsZGVycy5qc29uJworCisKK2NsYXNzIEJlbmNobWFy
a0J1aWxkZXJGYWN0b3J5KEdlbmVyaWNGYWN0b3J5KToKKworICAgIHByb2R1Y3RzID0gbG9hZEpT
T05Gcm9tRmlsZShvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgYnVpbGRl
ckZpbGVOYW1lKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9iZW5jaG1hcmtfYnVpbGRlcnMuanNvbiBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci9iZW5j
aG1hcmtfYnVpbGRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGZjOTMyZTZlOWRlNWExMTRhZGY4YzBl
MGE1NjBkYzM1ZTQxMDU2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2JlbmNobWFya19idWlsZGVycy5q
c29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgICAiR2VuZXJpY0JlbmNobWFya0J1aWxkZXIiOiB7
CisgICAgICAgICJmaWxlUGF0aCI6ICJiZW5jaG1hcmtfYnVpbGRlci5nZW5lcmljX2JlbmNobWFy
a19idWlsZGVyIiwKKyAgICAgICAgIm1vZHVsZU5hbWUiOiAiR2VuZXJpY0JlbmNobWFya0J1aWxk
ZXIiCisgICAgfSwKKyAgICAiSmV0U3RyZWFtQmVuY2htYXJrQnVpbGRlciI6IHsKKyAgICAgICAg
ImZpbGVQYXRoIjogImJlbmNobWFya19idWlsZGVyLmpldHN0cmVhbV9iZW5jaG1hcmtfYnVpbGRl
ciIsCisgICAgICAgICJtb2R1bGVOYW1lIjogIkpldFN0cmVhbUJlbmNobWFya0J1aWxkZXIiCisg
ICAgfQorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVu
bmVyL2JlbmNobWFya19idWlsZGVyL2dlbmVyaWNfYmVuY2htYXJrX2J1aWxkZXIucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX2J1aWxkZXIvZ2Vu
ZXJpY19iZW5jaG1hcmtfYnVpbGRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZTU0ODc5OTllY2E5NjM1YTFi
ZTA4ZDExNmYyMzhhZjZiODZmOTc5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2dlbmVyaWNfYmVuY2ht
YXJrX2J1aWxkZXIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisK
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBvcworaW1wb3J0IHNodXRp
bAoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLnV0
aWxzIGltcG9ydCBnZXRQYXRoRnJvbVByb2plY3RSb290CisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIEdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyKG9iamVj
dCk6CisKKyAgICBkZWYgcHJlcGFyZShzZWxmLCBiZW5jaG1hcmtQYXRoLCBwYXRjaCk6CisgICAg
ICAgIHNlbGYuX2NvcHlCZW5jaG1hcmtUb1RlbXBEaXIoYmVuY2htYXJrUGF0aCkKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2FwcGx5UGF0Y2gocGF0Y2gpCisKKyAgICBkZWYgX2NvcHlCZW5jaG1hcmtU
b1RlbXBEaXIoc2VsZiwgYmVuY2htYXJrUGF0aCk6CisgICAgICAgIHNlbGYud2ViUm9vdCA9IHRl
bXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBfbG9nLmRlYnVnKCdTZXJ2ZXJpbmcgYXQgd2ViUm9v
dDogJXMnICUgc2VsZi53ZWJSb290KQorICAgICAgICBzZWxmLmRlc3QgPSBvcy5wYXRoLmpvaW4o
c2VsZi53ZWJSb290LCBvcy5wYXRoLnNwbGl0KGJlbmNobWFya1BhdGgpWzFdKQorICAgICAgICBz
aHV0aWwuY29weXRyZWUoZ2V0UGF0aEZyb21Qcm9qZWN0Um9vdChiZW5jaG1hcmtQYXRoKSwgc2Vs
Zi5kZXN0KQorCisgICAgZGVmIF9hcHBseVBhdGNoKHNlbGYsIHBhdGNoKToKKyAgICAgICAgaWYg
bm90IHBhdGNoOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYud2ViUm9vdAorICAgICAgICBvbGRX
b3JraW5nRGlyZWN0b3J5ID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoc2VsZi53ZWJS
b290KQorICAgICAgICBlcnJvckNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoWydwYXRjaCcsICctcDEn
LCAnLWYnLCAnLWknLCBnZXRQYXRoRnJvbVByb2plY3RSb290KHBhdGNoKV0pCisgICAgICAgIG9z
LmNoZGlyKG9sZFdvcmtpbmdEaXJlY3RvcnkpCisgICAgICAgIGlmIGVycm9yQ29kZToKKyAgICAg
ICAgICAgIF9sb2cuZXJyb3IoJ0Nhbm5vdCBhcHBseSBwYXRjaCwgd2lsbCBza2lwIGN1cnJlbnQg
YmVuY2htYXJrUGF0aCcpCisgICAgICAgICAgICBzZWxmLmNsZWFuKCkKKyAgICAgICAgICAgIHJl
dHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLndlYlJvb3QKKworICAgIGRlZiBjbGVhbihz
ZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdDbGVhbm5pbmcgQmVuY2htYXJrJykKKyAgICAgICAg
aWYgc2VsZi53ZWJSb290OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLndlYlJvb3Qp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVu
Y2htYXJrX2J1aWxkZXIvamV0c3RyZWFtX2JlbmNobWFya19idWlsZGVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2pldHN0cmVh
bV9iZW5jaG1hcmtfYnVpbGRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDk1OGUzNGRiMzMxN2EwN2I4NWZl
OTU2M2Y1ZTExOTkwMmJmODZmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWlsZGVyL2pldHN0cmVhbV9iZW5jaG1h
cmtfYnVpbGRlci5weQpAQCAtMCwwICsxLDI3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSBnZW5l
cmljX2JlbmNobWFya19idWlsZGVyIGltcG9ydCBHZW5lcmljQmVuY2htYXJrQnVpbGRlcgorCisK
K19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBKZXRTdHJlYW1C
ZW5jaG1hcmtCdWlsZGVyKEdlbmVyaWNCZW5jaG1hcmtCdWlsZGVyKToKKworICAgIGRlZiBwcmVw
YXJlKHNlbGYsIGJlbmNobWFya1BhdGgsIHBhdGNoKToKKyAgICAgICAgc3VwZXIoc2VsZi5fX2Ns
YXNzX18sIHNlbGYpLl9jb3B5QmVuY2htYXJrVG9UZW1wRGlyKGJlbmNobWFya1BhdGgpCisgICAg
ICAgIHNlbGYuX3J1bkNyZWF0ZVNjcmlwdCgpCisgICAgICAgIHJldHVybiBzdXBlcihzZWxmLl9f
Y2xhc3NfXywgc2VsZikuX2FwcGx5UGF0Y2gocGF0Y2gpCisKKyAgICBkZWYgX3J1bkNyZWF0ZVNj
cmlwdChzZWxmKToKKyAgICAgICAgb2xkV29ya2luZ0RpcmVjdG9yeSA9IG9zLmdldGN3ZCgpCisg
ICAgICAgIG9zLmNoZGlyKHNlbGYuZGVzdCkKKyAgICAgICAgX2xvZy5kZWJ1ZyhzZWxmLmRlc3Qp
CisgICAgICAgIGVycm9yQ29kZSA9IHN1YnByb2Nlc3MuY2FsbChbJ3J1YnknLCAnY3JlYXRlLnJi
J10pCisgICAgICAgIG9zLmNoZGlyKG9sZFdvcmtpbmdEaXJlY3RvcnkpCisgICAgICAgIGlmIGVy
cm9yQ29kZToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0Nhbm5vdCBjcmVhdGUgSmV0U3RyZWFt
IEJlbmNobWFyaycpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFy
a19ydW5uZXIvYmVuY2htYXJrX3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVu
Y2htYXJrX3J1bm5lci9iZW5jaG1hcmtfcnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmNzVkNDVmOTFj
MjRhYmM3NmI4MDVhODE2NDkxYjczNjgzMzdiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX3J1bm5lci5weQpAQCAt
MCwwICsxLDExMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBqc29uCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IHNodXRpbAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nl
c3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB0eXBlcworaW1wb3J0IG9z
CitpbXBvcnQgdXJscGFyc2UKKworZnJvbSBiZW5jaG1hcmtfYnVpbGRlci5iZW5jaG1hcmtfYnVp
bGRlcl9mYWN0b3J5IGltcG9ydCBCZW5jaG1hcmtCdWlsZGVyRmFjdG9yeQorZnJvbSBicm93c2Vy
X2RyaXZlci5icm93c2VyX2RyaXZlcl9mYWN0b3J5IGltcG9ydCBCcm93c2VyRHJpdmVyRmFjdG9y
eQorZnJvbSBodHRwX3NlcnZlcl9kcml2ZXIuaHR0cF9zZXJ2ZXJfZHJpdmVyX2ZhY3RvcnkgaW1w
b3J0IEhUVFBTZXJ2ZXJEcml2ZXJGYWN0b3J5Citmcm9tIHV0aWxzIGltcG9ydCBsb2FkTW9kdWxl
LCBnZXRQYXRoRnJvbVByb2plY3RSb290Citmcm9tIHV0aWxzIGltcG9ydCB0aW1lb3V0CisKKwor
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIEJlbmNobWFya1J1
bm5lcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYW5GaWxlLCBidWlsZERp
ciwgb3V0cHV0RmlsZSwgcGxhdGZvcm0sIGJyb3dzZXIpOgorICAgICAgICBfbG9nLmluZm8oJ0lu
aXRpYWxpemluZyBiZW5jaG1hcmsgcnVubmluZycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHdpdGggb3BlbihwbGFuRmlsZSwgJ3InKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBzZWxmLnBs
YW4gPSBqc29uLmxvYWQoZnApCisgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyRHJpdmVyID0g
QnJvd3NlckRyaXZlckZhY3RvcnkuY3JlYXRlKFtwbGF0Zm9ybSwgYnJvd3Nlcl0pCisgICAgICAg
ICAgICAgICAgc2VsZi5odHRwU2VydmVyRHJpdmVyID0gSFRUUFNlcnZlckRyaXZlckZhY3Rvcnku
Y3JlYXRlKFtzZWxmLnBsYW5bJ2h0dHBfc2VydmVyX2RyaXZlciddXSkKKyAgICAgICAgICAgICAg
ICBzZWxmLmJlbmNobWFya3MgPSBzZWxmLnBsYW5bJ2JlbmNobWFya3MnXQorICAgICAgICAgICAg
ICAgIHNlbGYuYnVpbGREaXIgPSBvcy5wYXRoLmFic3BhdGgoYnVpbGREaXIpCisgICAgICAgICAg
ICAgICAgc2VsZi5vdXRwdXRGaWxlID0gb3V0cHV0RmlsZSBpZiBvdXRwdXRGaWxlIGVsc2UgJ2Jl
bmNobWFyay5yZXN1bHQnCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgX2xv
Zy5lcnJvcignQ2FuIG5vdCBvcGVuIHBsYW4gZmlsZTogJXMnICUgcGxhbkZpbGUpCisgICAgICAg
IGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgX2xvZy5lcnJvcignUGxhbiBmaWxlOiVz
IG1heSBub3QgZm9sbG93IGpzb24gZm9ybWF0JyAlIHBsYW5GaWxlKQorICAgICAgICBleGNlcHQ6
CisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIGV4ZWN1dGUoc2VsZik6CisgICAgICAgIF9s
b2cuaW5mbygnU3RhcnQgdG8gZXhlY3V0ZSB0aGUgcGxhbicpCisgICAgICAgIGZvciBiZW5jaG1h
cmsgaW4gc2VsZi5iZW5jaG1hcmtzOgorICAgICAgICAgICAgX2xvZy5pbmZvKCdTdGFydCBhIG5l
dyBiZW5jaG1hcmsnKQorICAgICAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgICAgICBiZW5j
aG1hcmtCdWlsZGVyID0gQmVuY2htYXJrQnVpbGRlckZhY3RvcnkuY3JlYXRlKFtiZW5jaG1hcmtb
J2JlbmNobWFya19idWlsZGVyJ11dKQorICAgICAgICAgICAgd2ViUm9vdCA9IGJlbmNobWFya0J1
aWxkZXIucHJlcGFyZShiZW5jaG1hcmtbJ29yaWdpbmFsX2JlbmNobWFyayddLCBiZW5jaG1hcmtb
J2JlbmNobWFya19wYXRjaCddIGlmICdiZW5jaG1hcmtfcGF0Y2gnIGluIGJlbmNobWFyayBlbHNl
IE5vbmUpCisgICAgICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoaW50KGJlbmNobWFya1snY291bnQn
XSkpOgorICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnU3RhcnQgdGhlIGl0ZXJhdGlvbiAlZCBv
ZiBjdXJyZW50IGJlbmNobWFyaycgJSAoeCArIDEpKQorICAgICAgICAgICAgICAgIHNlbGYuaHR0
cFNlcnZlckRyaXZlci5zZXJ2ZSh3ZWJSb290KQorICAgICAgICAgICAgICAgIHNlbGYuYnJvd3Nl
ckRyaXZlci5wcmVwYXJlRW52KCkKKyAgICAgICAgICAgICAgICBzZWxmLmJyb3dzZXJEcml2ZXIu
bGF1bmNoVXJsKHVybHBhcnNlLnVybGpvaW4oc2VsZi5odHRwU2VydmVyRHJpdmVyLmJhc2VVcmwo
KSwgYmVuY2htYXJrWydlbnRyeV9wb2ludCddKSwgc2VsZi5idWlsZERpcikKKyAgICAgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggdGltZW91dChiZW5jaG1hcmtbJ3Rp
bWVvdXQnXSk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc29uLmxvYWRzKHNl
bGYuaHR0cFNlcnZlckRyaXZlci5mZXRjaFJlc3VsdCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0KHJlc3VsdCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAg
ICAgICAgIF9sb2cuZXJyb3IoJ05vIHJlc3VsdC4gU29tZXRoaW5nIHdlbnQgd3JvbmcuIFdpbGwg
c2tpcCBjdXJyZW50IGJlbmNobWFyay4nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmJyb3dz
ZXJEcml2ZXIuY2xvc2VCcm93c2VycygpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyRHJp
dmVyLmNsb3NlQnJvd3NlcnMoKQorICAgICAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ0VuZCBv
ZiAlZCBpdGVyYXRpb24gb2YgY3VycmVudCBiZW5jaG1hcmsnICUgKHggKyAxKSkKKyAgICAgICAg
ICAgIHJlc3VsdHMgPSBzZWxmLndyYXAocmVzdWx0cykKKyAgICAgICAgICAgIHNlbGYuZHVtcChy
ZXN1bHRzLCBiZW5jaG1hcmtbJ291dHB1dF9maWxlJ10gaWYgYmVuY2htYXJrWydvdXRwdXRfZmls
ZSddIGVsc2Ugc2VsZi5vdXRwdXRGaWxlKQorICAgICAgICAgICAgYmVuY2htYXJrQnVpbGRlci5j
bGVhbigpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZHVtcChjbHMsIHJlc3VsdHMsIG91
dHB1dEZpbGUpOgorICAgICAgICBfbG9nLmluZm8oJ0R1bXBwaW5nIHRoZSByZXN1bHRzIHRvIGZp
bGUnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3V0cHV0RmlsZSwgJ3cn
KSBhcyBmcDoKKyAgICAgICAgICAgICAgICBqc29uLmR1bXAocmVzdWx0cywgZnApCisgICAgICAg
IGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgX2xvZy5lcnJvcignQ2Fubm90IG9wZW4gb3V0
cHV0IGZpbGU6ICVzJyAlIG91dHB1dEZpbGUpCisgICAgICAgICAgICBfbG9nLmVycm9yKCdSZXN1
bHRzIGFyZTpcbiAlcycsIGpzb24uZHVtcHMocmVzdWx0cykpCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgd3JhcChjbHMsIGRpY3RzKToKKyAgICAgICAgaWYgbm90IGRpY3RzOgorICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0ID0ge30KKyAgICAgICAgZm9yIGRpYyBpbiBk
aWN0czoKKyAgICAgICAgICAgIHJldCA9IGNscy5tZXJnZShyZXQsIGRpYykKKyAgICAgICAgcmV0
dXJuIHJldAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1lcmdlKGNscywgYSwgYik6Cisg
ICAgICAgIGFzc2VydChpc2luc3RhbmNlKGEsIHR5cGUoYikpKQorICAgICAgICBhcmdUeXBlID0g
dHlwZShhKQorICAgICAgICAjIHNwZWNpYWwgaGFuZGxlIGZvciBsaXN0IHR5cGUsIGFuZCBzaG91
bGQgYmUgaGFuZGxlIGJlZm9yZSBlcXVhbCBjaGVjaworICAgICAgICBpZiBhcmdUeXBlID09IHR5
cGVzLkxpc3RUeXBlOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAgIGlmIGEgPT0g
YjoKKyAgICAgICAgICAgIHJldHVybiBhCisgICAgICAgIGlmIGFyZ1R5cGUgPT0gdHlwZXMuRGlj
dFR5cGU6CisgICAgICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICAgICAgZm9yIGtleSwgdmFs
dWUgaW4gYS5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBiOgorICAgICAgICAg
ICAgICAgICAgICByZXN1bHRba2V5XSA9IGNscy5tZXJnZSh2YWx1ZSwgYltrZXldKQorICAgICAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUK
KyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGIuaXRlbXMoKToKKyAgICAgICAgICAgICAg
ICBpZiBrZXkgbm90IGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0g
PSB2YWx1ZQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAjIGZvciBvdGhlciB0
eXBlcworICAgICAgICByZXR1cm4gYSArIGIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9fX2luaXRfXy5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9fX2luaXRf
Xy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1Mzkx
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJv
d3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXIucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmJlZjE1MDZmYWY2NGFhMDFmNGU0MTEzMTgzMjA0MTgyZjU4N2UzZgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2Ry
aXZlci9icm93c2VyX2RyaXZlci5weQpAQCAtMCwwICsxLDE4IEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKworaW1wb3J0IGFiYworCisKK2NsYXNzIEJyb3dzZXJEcml2ZXIob2JqZWN0KToKKwor
ICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcHJlcGFyZUVudihzZWxmKToKKyAgICAg
ICAgcGFzcworCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiBsYXVuY2hVcmwoc2Vs
ZiwgdXJsLCBicm93c2VyQnVpbGRQYXRoPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJj
LmFic3RyYWN0bWV0aG9kCisgICAgZGVmIGNsb3NlQnJvd3NlcihzZWxmKToKKyAgICAgICAgcGFz
cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jy
b3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyX2ZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXJfZmFj
dG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iOTk4YjRmNzdlYjEyMzNjZWYzYzAyYjBmOGNmY2IzNWI4NWQ0
NjZhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtf
cnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyX2ZhY3RvcnkucHkKQEAgLTAsMCAr
MSwxNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
anNvbgoraW1wb3J0IG9zCisKK2Zyb20gd2Via2l0cHkuYmVuY2htYXJrX3J1bm5lci5nZW5lcmlj
X2ZhY3RvcnkgaW1wb3J0IEdlbmVyaWNGYWN0b3J5Citmcm9tIHdlYmtpdHB5LmJlbmNobWFya19y
dW5uZXIudXRpbHMgaW1wb3J0IGxvYWRKU09ORnJvbUZpbGUKKworCitkcml2ZXJGaWxlTmFtZSA9
ICdicm93c2VyX2RyaXZlcnMuanNvbicKKworCitjbGFzcyBCcm93c2VyRHJpdmVyRmFjdG9yeShH
ZW5lcmljRmFjdG9yeSk6CisKKyAgICBwcm9kdWN0cyA9IGxvYWRKU09ORnJvbUZpbGUob3MucGF0
aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIGRyaXZlckZpbGVOYW1lKSkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2Ry
aXZlci9icm93c2VyX2RyaXZlcnMuanNvbiBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2ht
YXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlcnMuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jODBiOTYxNTc3OTY5ZWI5NzNlYTU1ODhmZjk1NDBkMzliZjUzMjg5Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJp
dmVyL2Jyb3dzZXJfZHJpdmVycy5qc29uCkBAIC0wLDAgKzEsMTIgQEAKK3sKKyAgICAib3N4Ijog
eworICAgICAgICAiY2hyb21lIjogeworICAgICAgICAgICAgIm1vZHVsZU5hbWUiOiAiT1NYQ2hy
b21lRHJpdmVyIiwgCisgICAgICAgICAgICAiZmlsZVBhdGgiOiAiYnJvd3Nlcl9kcml2ZXIub3N4
X2Nocm9tZV9kcml2ZXIiCisgICAgICAgIH0sIAorICAgICAgICAic2FmYXJpIjogeworICAgICAg
ICAgICAgIm1vZHVsZU5hbWUiOiAiT1NYU2FmYXJpRHJpdmVyIiwgCisgICAgICAgICAgICAiZmls
ZVBhdGgiOiAiYnJvd3Nlcl9kcml2ZXIub3N4X3NhZmFyaV9kcml2ZXIiCisgICAgICAgIH0KKyAg
ICB9IAorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVu
bmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9jaHJvbWVfZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9jaHJvbWVfZHJpdmVy
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI2NjMxOWE5ODY0NGIwZDYwNDA1MDFiZWVjMzYzYWI4NjgzODlmNTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5u
ZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X2Nocm9tZV9kcml2ZXIucHkKQEAgLTAsMCArMSwzMSBAQAor
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9y
dCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQorCisjIFdlIGFzc3VtZSB0aGF0IHRoaXMgaGFuZGxl
IGNhbiBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXMgT1NYCitmcm9tIEFwcEtpdCBp
bXBvcnQgTlNSdW5uaW5nQXBwbGljYXRpb24KK2Zyb20gYnJvd3Nlcl9kcml2ZXIgaW1wb3J0IEJy
b3dzZXJEcml2ZXIKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKwor
Y2xhc3MgT1NYQ2hyb21lRHJpdmVyKEJyb3dzZXJEcml2ZXIpOgorCisgICAgZGVmIHByZXBhcmVF
bnYoc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2VCcm93c2VycygpCisgICAgICAgIHNlbGYuY2hy
b21lUHJlZmVyZW5jZXMgPSBbXQorCisgICAgZGVmIGxhdW5jaFVybChzZWxmLCB1cmwsIGJyb3dz
ZXJCdWlsZFBhdGg9Tm9uZSk6CisgICAgICAgIF9sb2cuaW5mbygnTGF1bmNoaW5nIGNocm9tZTog
JXMgd2l0aCB1cmw6ICVzJyAlIChvcy5wYXRoLmpvaW4oYnJvd3NlckJ1aWxkUGF0aCwgJ0dvb2ds
ZSBDaHJvbWUuYXBwJyksIHVybCkpCisgICAgICAgICMgRklYTUU6IE1heSBuZWVkIHRvIGJlIG1v
ZGlmaWVkIGZvciBkZXZlbG9wIGJ1aWxkLCBzdWNoIGFzIHNldHRpbmcgdXAgbGlicmFyaWVzCisg
ICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWydvcGVuJywgJy1hJywgb3MucGF0aC5qb2luKGJyb3dz
ZXJCdWlsZFBhdGgsICdHb29nbGUgQ2hyb21lLmFwcCcpLCAnLS1hcmdzJywgJy0taG9tZXBhZ2Un
LCB1cmxdICsgc2VsZi5jaHJvbWVQcmVmZXJlbmNlcykuY29tbXVuaWNhdGUoKQorCisgICAgZGVm
IGNsb3NlQnJvd3NlcnMoc2VsZik6CisgICAgICAgIF9sb2cuaW5mbygnQ2xvc2luZyBhbGwgZXhp
c3RpbmcgY2hyb21lIHByb2Nlc3NlcycpCisgICAgICAgIGNocm9tZXMgPSBOU1J1bm5pbmdBcHBs
aWNhdGlvbi5ydW5uaW5nQXBwbGljYXRpb25zV2l0aEJ1bmRsZUlkZW50aWZpZXJfKCdjb20uZ29v
Z2xlLkNocm9tZScpCisgICAgICAgIGZvciBjaHJvbWUgaW4gY2hyb21lczoKKyAgICAgICAgICAg
IGNocm9tZS50ZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9zYWZhcmlfZHJpdmVyLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9z
YWZhcmlfZHJpdmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiZjQ5MWQyZGM0OWUyNjUxNGYzMjE3NWUxY2Iz
MzRiYjlhYTlmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X3NhZmFyaV9kcml2ZXIucHkKQEAgLTAs
MCArMSwzNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBv
cnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQorCisjIFdlIGFzc3VtZSB0aGF0
IHRoaXMgaGFuZGxlIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXMgT1NYLgor
ZnJvbSBBcHBLaXQgaW1wb3J0IE5TUnVubmluZ0FwcGxpY2F0aW9uCitmcm9tIGJyb3dzZXJfZHJp
dmVyIGltcG9ydCBCcm93c2VyRHJpdmVyCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9f
bmFtZV9fKQorCisKK2NsYXNzIE9TWFNhZmFyaURyaXZlcihCcm93c2VyRHJpdmVyKToKKworICAg
IGRlZiBwcmVwYXJlRW52KHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlQnJvd3NlcnMoKQorICAg
ICAgICBzZWxmLnNhZmFyaVByZWZlcmVuY2VzID0gWyItSG9tZVBhZ2UiLCAiYWJvdXQ6Ymxhbmsi
LCAiLVdhcm5BYm91dEZyYXVkdWxlbnRXZWJzaXRlcyIsICIwIiwgIi1FeHRlbnNpb25zRW5hYmxl
ZCIsICIwIiwgIi1TaG93U3RhdHVzQmFyIiwgIjAiLCAiLU5ld1dpbmRvd0JlaGF2aW9yIiwgIjEi
LCAiLU5ld1RhYkJlaGF2aW9yIiwgIjEiXQorCisgICAgZGVmIGxhdW5jaFVybChzZWxmLCB1cmws
IGJyb3dzZXJCdWlsZFBhdGg9Tm9uZSk6CisgICAgICAgIGFyZ3MgPSBbb3MucGF0aC5qb2luKGJy
b3dzZXJCdWlsZFBhdGgsICdTYWZhcmkuYXBwL0NvbnRlbnRzL01hY09TL1NhZmFyaScpXQorICAg
ICAgICBhcmdzLmV4dGVuZChzZWxmLnNhZmFyaVByZWZlcmVuY2VzKQorICAgICAgICBfbG9nLmlu
Zm8oJ0xhdW5jaGluZyBzYWZhcmk6ICVzIHdpdGggdXJsOiAlcycgJSAoYXJnc1swXSwgdXJsKSkK
KyAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCBlbnY9eydEWUxEX0ZSQU1FV09SS19QQVRI
JzogYnJvd3NlckJ1aWxkUGF0aCwgJ0RZTERfTElCUkFSWV9QQVRIJzogYnJvd3NlckJ1aWxkUGF0
aH0sIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJy
PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgIyBTdG9wIGZvciBpbml0aWFsaXphdGlvbiBvZiB0
aGUgc2FmYXJpIHByb2Nlc3MsIG90aGVyd2lzZSwgb3BlbgorICAgICAgICAjIGNvbW1hbmQgbWF5
IHVzZSB0aGUgc3lzdGVtIHNhZmFyaS4KKyAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICBz
dWJwcm9jZXNzLlBvcGVuKFsnb3BlbicsIHVybF0pCisKKyAgICBkZWYgY2xvc2VCcm93c2Vycyhz
ZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdDbG9zaW5nIGFsbCBleGlzdGluZyBzYWZhcmkgcHJv
Y2Vzc2VzJykKKyAgICAgICAgc2FmYXJpSW5zdGFuY2VzID0gTlNSdW5uaW5nQXBwbGljYXRpb24u
cnVubmluZ0FwcGxpY2F0aW9uc1dpdGhCdW5kbGVJZGVudGlmaWVyXygnY29tLmFwcGxlLlNhZmFy
aScpCisgICAgICAgIGZvciBzYWZhcmlJbnN0YW5jZSBpbiBzYWZhcmlJbnN0YW5jZXM6CisgICAg
ICAgICAgICBzYWZhcmlJbnN0YW5jZS50ZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9KZXRTdHJlYW0ucGF0
Y2ggYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVz
L0pldFN0cmVhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTBlNTc1MzNhZGRmOWQ2MmEwYjRmYjZjN2My
MWIwNGJlNjc0MDllCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9KZXRTdHJlYW0ucGF0Y2gKQEAgLTAsMCArMSw1
OSBAQAorZGlmZiAtLWdpdCBhL0pldFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvSmV0U3RyZWFtRHJp
dmVyLmpzIGIvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9KZXRTdHJlYW1Ecml2ZXIuanMKK2lu
ZGV4IDczZWU0MjAuLjYwZjU4N2MgMTAwNjQ0CistLS0gYS9KZXRTdHJlYW0vSmV0U3RyZWFtLTEu
MC4xL0pldFN0cmVhbURyaXZlci5qcworKysrIGIvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9K
ZXRTdHJlYW1Ecml2ZXIuanMKK0BAIC00NDgsNiArNDQ4LDE0IEBAIHZhciBKZXRTdHJlYW0gPSAo
ZnVuY3Rpb24oKSB7CisgCisgICAgICAgICByZXR1cm4gcmF3UmVzdWx0czsKKyAgICAgfQorKyAg
ICAKKysgICAgZnVuY3Rpb24gY29tcHV0ZVJlZmluZWRSZXN1bHRzKCl7CisrICAgICAgICB2YXIg
cmVzdWx0cyA9IHt9OworKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiZW5jaG1hcmtzLmxl
bmd0aDsgKytpKSB7CisrICAgICAgICAgICAgcmVzdWx0c1tiZW5jaG1hcmtzW2ldLm5hbWVdID0g
eyJtZXRyaWNzIiA6IHsiU2NvcmUiIDogeyJjdXJyZW50IiA6IFtiZW5jaG1hcmtzW2ldLnRpbWVz
XX19fTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiB7IkpldFN0cmVhbSI6IHsibWV0cmlj
cyIgOiB7IlNjb3JlIiA6IFsiR2VvbWV0cmljIl19LCAidGVzdHMiIDogcmVzdWx0c319OworKyAg
ICB9CisgCisgICAgIGZ1bmN0aW9uIGVuZCgpCisgICAgIHsKK0BAIC00NTgsNiArNDY2LDIzIEBA
IHZhciBKZXRTdHJlYW0gPSAoZnVuY3Rpb24oKSB7CisgICAgICAgICBpc1J1bm5pbmcgPSBmYWxz
ZTsKKyAgICAgICAgIGhhc0FscmVhZHlSdW4gPSB0cnVlOworICAgICAgICAgcHJlcGFyZVRvU3Rh
cnQoKTsKKysgICAgICAgIC8vIHN1Ym1pdCByZXN1bHQgdG8gc2VydmVyCisrICAgICAgICByZXN1
bHRzID0gSlNPTi5zdHJpbmdpZnkoY29tcHV0ZVJlZmluZWRSZXN1bHRzKCkpOworKyAgICAgICAg
dmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworKyAgICAgICAgeGhyLm9wZW4oIlBPU1Qi
LCAiL3JlcG9ydCIpOworKyAgICAgICAKKysgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJD
b250ZW50LXR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOworKyAgICAgICAgeGhyLnNldFJlcXVl
c3RIZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgcmVzdWx0cy5sZW5ndGgpOworKyAgICAgICAgeGhy
LnNldFJlcXVlc3RIZWFkZXIoIkNvbm5lY3Rpb24iLCAiY2xvc2UiKTsKKysgCisrICAgICAgICB4
aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisrICAgICAgICBpZih4aHIucmVh
ZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FICYmIHhoci5zdGF0dXMgPT0gMjAwKSB7Cisr
ICAgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworKyAg
ICAgICAgICAgICAgICBjbG9zZVJlcXVlc3Qub3BlbigiR0VUIiwgIi9zaHV0ZG93biIpOworKyAg
ICAgICAgICAgICAgICBjbG9zZVJlcXVlc3Quc2VuZCgpCisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKyAgICAgICAgeGhyLnNlbmQocmVzdWx0cyk7CisgICAgIH0KKyAKKyAgICAgZnVuY3Rp
b24gaXRlcmF0ZSgpCitkaWZmIC0tZ2l0IGEvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRl
eC5odG1sIGIvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRleC5odG1sCitpbmRleCBlMjc1
MzVjLi4wMDEwODdkIDEwMDY0NAorLS0tIGEvSmV0U3RyZWFtL0pldFN0cmVhbS0xLjAuMS9pbmRl
eC5odG1sCisrKysgYi9KZXRTdHJlYW0vSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0bWwKK0BAIC0z
NCw4ICszNCwxMCBAQAorICAgICB3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKCkgeyBhbGxJc0dv
b2QgPSBmYWxzZTsgfQorIAorICAgICBmdW5jdGlvbiBpbml0aWFsaXplKCkgeworLSAgICAgICAg
aWYgKGFsbElzR29vZCkKKysgICAgICAgIGlmIChhbGxJc0dvb2QpIHsKKyAgICAgICAgICAgICBK
ZXRTdHJlYW0uaW5pdGlhbGl6ZSgpOworKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KXt3aW5kb3cubG9jYXRpb24gPSAiamF2YXNjcmlwdDpKZXRTdHJlYW0uc3RhcnQoKSJ9LCAzMDAw
KTsKKysgICAgICAgIH0KKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiYm9keSIpLmlubmVySFRNTCA9ICI8aDE+RVJST1I8L2gxPjxwPkVuY291bnRl
cmVkIGVycm9ycyBkdXJpbmcgcGFnZSBsb2FkLiBSZWZ1c2luZyB0byBydW4gYSBwYXJ0aWFsIGJl
bmNobWFyayBzdWl0ZS48L3A+IjsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9TcGVlZG9tZXRlci5wYXRjaCBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvU3Bl
ZWRvbWV0ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzNiMGYzMmUxZWIzMjQ0YmMwMDQ0ODQ1MmI0ZjU3
ZDA4MjkzMDU5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVu
Y2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvU3BlZWRvbWV0ZXIucGF0Y2gKQEAgLTAsMCArMSwx
MDEgQEAKK2RpZmYgLS1naXQgYS9TcGVlZG9tZXRlci9GdWxsLmh0bWwgYi9TcGVlZG9tZXRlci9G
dWxsLmh0bWwKK2luZGV4IDQxOWI5ZjIuLjBiMDRjNjkgMTAwNjQ0CistLS0gYS9TcGVlZG9tZXRl
ci9GdWxsLmh0bWwKKysrKyBiL1NwZWVkb21ldGVyL0Z1bGwuaHRtbAorQEAgLTcsNyArNyw2IEBA
CisgICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvbWFpbi5qcyIgZGVmZXI+PC9zY3JpcHQ+Cisg
ICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcyIgZGVmZXI+PC9z
Y3JpcHQ+CisgICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmVuY2htYXJrLXJlcG9ydC5qcyIg
ZGVmZXI+PC9zY3JpcHQ+CistICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvc3RhdGlzdGlj
cy5qcyIgZGVmZXI+PC9zY3JpcHQ+CisgICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdHMu
anMiIGRlZmVyPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KK2RpZmYgLS1naXQgYS9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJlcG9ydC5qcyBiL1NwZWVkb21ldGVyL3Jlc291
cmNlcy9iZW5jaG1hcmstcmVwb3J0LmpzCitpbmRleCBjNGI0YzY0Li5jNDQ1M2NkIDEwMDY0NAor
LS0tIGEvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL2JlbmNobWFyay1yZXBvcnQuanMKKysrKyBiL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcmVwb3J0LmpzCitAQCAtMSwxNiArMSw5IEBA
CisgLy8gVGhpcyBmaWxlIGNhbiBiZSBjdXN0b21pemVkIHRvIHJlcG9ydCByZXN1bHRzIGFzIG5l
ZWRlZC4KKyAKKyAoZnVuY3Rpb24gKCkgeworLSAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyICYm
IGxvY2F0aW9uLnNlYXJjaCAhPSAnP3dlYmtpdCcgJiYgbG9jYXRpb24uaGFzaCAhPSAnI3dlYmtp
dCcpCistICAgICAgICByZXR1cm47CistCisgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAg
ICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworIAorLSAgICB2YXIgc2NyaXB0RWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworLSAgICBzY3JpcHRFbGVt
ZW50LnNyYyA9ICcuLi9yZXNvdXJjZXMvcnVubmVyLmpzJzsKKy0gICAgZG9jdW1lbnQuaGVhZC5h
cHBlbmRDaGlsZChzY3JpcHRFbGVtZW50KTsKKy0KKyAgICAgdmFyIHN0eWxlRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29u
dGVudCA9ICdwcmUgeyBwYWRkaW5nLXRvcDogNjAwcHg7IH0nOworICAgICBkb2N1bWVudC5oZWFk
LmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7CitAQCAtMzYsMTAgKzI5LDggQEAKKyAgICAgICAg
ICAgICAgICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdG9y
OiBhZ2dyZWdhdG9yfTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgUGVyZlRlc3RSdW5u
ZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKGNyZWF0ZVRlc3QobnVsbCwgJ1RvdGFsJykp
OworICAgICAgICAgfSwKKyAgICAgICAgIGRpZFJ1blN1aXRlczogZnVuY3Rpb24gKG1lYXN1cmVk
VmFsdWVzKSB7CistICAgICAgICAgICAgUGVyZlRlc3RSdW5uZXIubWVhc3VyZVZhbHVlQXN5bmMo
bWVhc3VyZWRWYWx1ZXMudG90YWwpOworICAgICAgICAgICAgIHZhbHVlc0J5SXRlcmF0aW9uLnB1
c2gobWVhc3VyZWRWYWx1ZXMudGVzdHMpOworICAgICAgICAgfSwKKyAgICAgICAgIGRpZEZpbmlz
aExhc3RJdGVyYXRpb246IGZ1bmN0aW9uICgpIHsKK0BAIC01MiwxOSArNDMsMzAgQEAKKyAgICAg
ICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpOworICAgICAgICAgICAgICAgICB2YWx1ZXMu
YWdncmVnYXRvciA9IGFnZ3JlZ2F0b3I7CisgICAgICAgICAgICAgfQorLQorKyAgICAgICAgICAg
IHZhciBkaWN0ID0ge30KKysgICAgICAgICAgICBmdW5jdGlvbiBhZGRUb0RpY3Rpb25hcnlWYWx1
ZSh2YWx1ZSwgc3VpdGVOYW1lLCB0ZXN0TmFtZSwgc3VidGVzdE5hbWUpIHsKKysgICAgICAgICAg
ICAgICAgZGljdFsiU3BlZWRvbWV0ZXIiXSA9IGRpY3RbIlNwZWVkb21ldGVyIl0gfHwgeyAibWV0
cmljcyIgOiB7ICJUaW1lIiA6IFsgIlRvdGFsIiwgXSB9LCAidGVzdHMiIDoge319OworKyAgICAg
ICAgICAgICAgICBkaWN0WyJTcGVlZG9tZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV0gPSBkaWN0
WyJTcGVlZG9tZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV0gfHwgeyJtZXRyaWNzIiA6IHsgIlRp
bWUiIDogWyAiVG90YWwiLCBdIH0sICJ0ZXN0cyIgOiB7fX07CisrICAgICAgICAgICAgICAgIGRp
Y3RbIlNwZWVkb21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV0g
PSBkaWN0WyJTcGVlZG9tZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV1bInRlc3RzIl1bdGVzdE5h
bWVdIHx8IHsgIm1ldHJpY3MiIDogeyAiVGltZSIgOiBbICJUb3RhbCIsIF0gfSwgInRlc3RzIiA6
IHt9fTsKKysgICAgICAgICAgICAgICAgZGljdFsiU3BlZWRvbWV0ZXIiXVsidGVzdHMiXVtzdWl0
ZU5hbWVdWyJ0ZXN0cyJdW3Rlc3ROYW1lXVsidGVzdHMiXVtzdWJ0ZXN0TmFtZV0gPSBkaWN0WyJT
cGVlZG9tZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV1bInRlc3RzIl1bdGVzdE5hbWVdWyJ0ZXN0
cyJdW3N1YnRlc3ROYW1lXSB8fCB7ICJtZXRyaWNzIiA6IHsgIlRpbWUiIDogeyAiY3VycmVudCIg
OiBbW11dIH0gfX07CisrICAgICAgICAgICAgICAgIGRpY3RbIlNwZWVkb21ldGVyIl1bInRlc3Rz
Il1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV1bInRlc3RzIl1bc3VidGVzdE5hbWVdWyJt
ZXRyaWNzIl1bIlRpbWUiXVsiY3VycmVudCJdWzBdLnB1c2godmFsdWUpOworKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAKKyAgICAgICAgICAgICB2YWx1ZXNCeUl0ZXJhdGlvbi5mb3JFYWNo
KGZ1bmN0aW9uIChtZWFzdXJlZFZhbHVlcykgeworICAgICAgICAgICAgICAgICBmb3IgKHZhciBz
dWl0ZU5hbWUgaW4gbWVhc3VyZWRWYWx1ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgIHZhciBz
dWl0ZSA9IG1lYXN1cmVkVmFsdWVzW3N1aXRlTmFtZV07CisgICAgICAgICAgICAgICAgICAgICBm
b3IgKHZhciB0ZXN0TmFtZSBpbiBzdWl0ZS50ZXN0cykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB0ZXN0ID0gc3VpdGUudGVzdHNbdGVzdE5hbWVdOworLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIHN1YnRlc3ROYW1lIGluIHRlc3QudGVzdHMpCisrICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIgc3VidGVzdE5hbWUgaW4gdGVzdC50ZXN0cykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb01lYXN1cmVkVmFsdWUodGVzdC50ZXN0c1tzdWJ0
ZXN0TmFtZV0sIHN1aXRlTmFtZSArICcvJyArIHRlc3ROYW1lICsgJy8nICsgc3VidGVzdE5hbWUp
OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0RpY3Rpb25hcnlWYWx1ZSh0ZXN0
LnRlc3RzW3N1YnRlc3ROYW1lXSwgc3VpdGVOYW1lLCB0ZXN0TmFtZSwgc3VidGVzdE5hbWUpOwor
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRU
b01lYXN1cmVkVmFsdWUodGVzdC50b3RhbCwgc3VpdGVOYW1lICsgJy8nICsgdGVzdE5hbWUsICdU
b3RhbCcpOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgYWRk
VG9NZWFzdXJlZFZhbHVlKHN1aXRlLnRvdGFsLCBzdWl0ZU5hbWUsICdUb3RhbCcpOworICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgfSk7CisrICAgICAgICAgICAgdmFyIHJlc3VsdHMg
PSBKU09OLnN0cmluZ2lmeShkaWN0KTsKKyAKKyAgICAgICAgICAgICB2YXIgZnVsbE5hbWVzID0g
bmV3IEFycmF5OworICAgICAgICAgICAgIGZvciAodmFyIGZ1bGxOYW1lIGluIG1lYXN1cmVkVmFs
dWVzQnlGdWxsTmFtZSkKK0BAIC03Miw4ICs3NCwyMiBAQAorIAorICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgZnVsbE5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
IHZhciB2YWx1ZXMgPSBtZWFzdXJlZFZhbHVlc0J5RnVsbE5hbWVbZnVsbE5hbWVzW2ldXTsKKy0g
ICAgICAgICAgICAgICAgUGVyZlRlc3RSdW5uZXIucmVwb3J0VmFsdWVzKGNyZWF0ZVRlc3QoZnVs
bE5hbWVzW2ldLCB2YWx1ZXMuYWdncmVnYXRvciwgaSArIDEgPT0gZnVsbE5hbWVzLmxlbmd0aCks
IHZhbHVlcyk7CisgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1M
SHR0cFJlcXVlc3QoKTsKKysgICAgICAgICAgICB4aHIub3BlbigiUE9TVCIsICIvcmVwb3J0Iik7
CisrIAorKyAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCAi
YXBwbGljYXRpb24vanNvbiIpOworKyAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJD
b250ZW50LWxlbmd0aCIsIHJlc3VsdHMubGVuZ3RoKTsKKysgICAgICAgICAgICB4aHIuc2V0UmVx
dWVzdEhlYWRlcigiQ29ubmVjdGlvbiIsICJjbG9zZSIpOworKyAKKysgICAgICAgICAgICB4aHIu
b25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisrICAgICAgICAgICAgICAgIGlmKHho
ci5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUgJiYgeGhyLnN0YXR1cyA9PSAyMDAp
IHsKKysgICAgICAgICAgICAgICAgICAgIHZhciBjbG9zZVJlcXVlc3QgPSBuZXcgWE1MSHR0cFJl
cXVlc3QoKTsKKysgICAgICAgICAgICAgICAgICAgIGNsb3NlUmVxdWVzdC5vcGVuKCJHRVQiLCAi
L3NodXRkb3duIik7CisrICAgICAgICAgICAgICAgICAgICBjbG9zZVJlcXVlc3Quc2VuZCgpCisr
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgeGhyLnNlbmQo
cmVzdWx0cyk7CisgICAgICAgICB9CisgICAgIH07CisgfSkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL2pldHN0cmVhbS5w
bGFuIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMv
amV0c3RyZWFtLnBsYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE4OTg4MzRkMzE1M2Y4MmVmYjEzYmQ0ZTRlODMx
YTI2MTAxNGFkOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVu
Y2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL2pldHN0cmVhbS5wbGFuCkBAIC0wLDAgKzEsMTQgQEAK
K3sKKyAgICAiaHR0cF9zZXJ2ZXJfZHJpdmVyIjogIlNpbXBsZUhUVFBTZXJ2ZXJEcml2ZXIiLCAK
KyAgICAiYmVuY2htYXJrcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInRpbWVvdXQiIDog
NjAwLAorICAgICAgICAgICAgImNvdW50IjogNSwKKyAgICAgICAgICAgICJiZW5jaG1hcmtfYnVp
bGRlciI6ICJKZXRTdHJlYW1CZW5jaG1hcmtCdWlsZGVyIiwKKyAgICAgICAgICAgICJvcmlnaW5h
bF9iZW5jaG1hcmsiOiAiLi4vLi4vLi4vLi4vUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0iLAor
ICAgICAgICAgICAgImJlbmNobWFya19wYXRjaCI6ICJkYXRhL3BhdGNoZXMvSmV0U3RyZWFtLnBh
dGNoIiwKKyAgICAgICAgICAgICJlbnRyeV9wb2ludCI6ICJKZXRTdHJlYW0vSmV0U3RyZWFtLTEu
MC4xL2luZGV4Lmh0bWwiLAorICAgICAgICAgICAgIm91dHB1dF9maWxlIjogImpldHN0cmVhbS5y
ZXN1bHQiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9zcGVlZG9tZXRlci5wbGFuIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvc3BlZWRvbWV0
ZXIucGxhbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jZmYxMGE2ODY4MGNkYTI2ODliN2JmMzc2Y2IyN2RiY2Y3YTA4
YTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtf
cnVubmVyL2RhdGEvcGxhbnMvc3BlZWRvbWV0ZXIucGxhbgpAQCAtMCwwICsxLDE0IEBACit7Cisg
ICAgImJlbmNobWFya3MiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJiZW5jaG1hcmtfYnVp
bGRlciI6ICJHZW5lcmljQmVuY2htYXJrQnVpbGRlciIsCisgICAgICAgICAgICAiYmVuY2htYXJr
X3BhdGNoIjogImRhdGEvcGF0Y2hlcy9TcGVlZG9tZXRlci5wYXRjaCIsCisgICAgICAgICAgICAi
b3JpZ2luYWxfYmVuY2htYXJrIjogIi4uLy4uLy4uLy4uL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIiLAorICAgICAgICAgICAgImNvdW50IjogNSwKKyAgICAgICAgICAgICJlbnRyeV9wb2lu
dCI6ICJTcGVlZG9tZXRlci9GdWxsLmh0bWwiLAorICAgICAgICAgICAgIm91dHB1dF9maWxlIjog
InNwZWVkb21ldGVyLnJlc3VsdCIsCisgICAgICAgICAgICAidGltZW91dCI6IDYwMAorICAgICAg
ICB9CisgICAgXSwKKyAgICAiaHR0cF9zZXJ2ZXJfZHJpdmVyIjogIlNpbXBsZUhUVFBTZXJ2ZXJE
cml2ZXIiCit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19y
dW5uZXIvZ2VuZXJpY19mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1h
cmtfcnVubmVyL2dlbmVyaWNfZmFjdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNzEwZDRhMmNkZWFmNTg5
NDk1NDM2NTQ1ODE1MWFhNTRkNGQ2NjVmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2dlbmVyaWNfZmFjdG9yeS5weQpAQCAtMCwwICsx
LDMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBv
cworCitmcm9tIHV0aWxzIGltcG9ydCBsb2FkTW9kdWxlLCBNb2R1bGVOb3RGb3VuZEVycm9yCisK
KworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIEdlbmVyaWNG
YWN0b3J5KG9iamVjdCk6CisKKyAgICBwcm9kdWN0cyA9IE5vbmUKKworICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBpdGVyYXRlR2V0SXRlbShjbHMsIG9wdGlvbnMsIGtleXMpOgorICAgICAgICBy
ZXQgPSBvcHRpb25zCisgICAgICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICByZXQgPSByZXQuX19nZXRpdGVtX18oa2V5KQorICAgICAgICAgICAg
ZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBy
ZXQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjcmVhdGUoY2xzLCBkZXNjcmlwdGlvbnMp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gbG9hZE1vZHVsZShjbHMuaXRlcmF0
ZUdldEl0ZW0oY2xzLnByb2R1Y3RzLCBkZXNjcmlwdGlvbnMpKSgpCisgICAgICAgIGV4Y2VwdDoK
KyAgICAgICAgICAgIHJhaXNlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL19faW5pdF9fLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9fX2luaXRf
Xy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1Mzkx
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0
cF9zZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyL3R3aXN0ZWRfaHR0cF9zZXJ2ZXIucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL2h0
dHBfc2VydmVyL3R3aXN0ZWRfaHR0cF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTcyZmNmMjUzODEy
Y2FmNGI5MTVlYjcxNjIwZDlhMGEzM2QzMzQ0OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9z
ZXJ2ZXIvdHdpc3RlZF9odHRwX3NlcnZlci5weQpAQCAtMCwwICsxLDMxIEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKworZnJvbSB0d2lzdGVkLndlYiBpbXBvcnQgc3RhdGljLCBzZXJ2ZXIKK2Zy
b20gdHdpc3RlZC53ZWIucmVzb3VyY2UgaW1wb3J0IFJlc291cmNlCitmcm9tIHR3aXN0ZWQuaW50
ZXJuZXQgaW1wb3J0IHJlYWN0b3IKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHN5cworCisKK2Ns
YXNzIFNlcnZlckNvbnRyb2woUmVzb3VyY2UpOgorICAgIGlzTGVhZiA9IFRydWUKKworICAgIGRl
ZiByZW5kZXJfR0VUKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICByZWFjdG9yLnN0b3AoKQorICAg
ICAgICByZXR1cm4gIiIKKworICAgIGRlZiByZW5kZXJfUE9TVChzZWxmLCByZXF1ZXN0KToKKyAg
ICAgICAgc3lzLnN0ZG91dC53cml0ZShyZXF1ZXN0LmNvbnRlbnQuZ2V0dmFsdWUoKSkKKyAgICAg
ICAgcmV0dXJuICdPSycKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHBhcnNl
ciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdweXRob24gVHdpc3RlZEhU
VFBTZXJ2ZXIucHkgd2ViUm9vdCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnd2ViUm9vdCcp
CisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICB3ZWJSb290ID0gc3RhdGljLkZp
bGUoYXJncy53ZWJSb290KQorICAgIHNlcnZlckNvbnRyb2wgPSBTZXJ2ZXJDb250cm9sKCkKKyAg
ICB3ZWJSb290LnB1dENoaWxkKCdzaHV0ZG93bicsIHNlcnZlckNvbnRyb2wpCisgICAgd2ViUm9v
dC5wdXRDaGlsZCgncmVwb3J0Jywgc2VydmVyQ29udHJvbCkKKyAgICByZWFjdG9yLmxpc3RlblRD
UCgwLCBzZXJ2ZXIuU2l0ZSh3ZWJSb290KSkKKyAgICByZWFjdG9yLnJ1bigpCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJp
dmVyL2h0dHBfc2VydmVyX2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2ht
YXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjAyMDk0YjgyZjIxZjE4OGUyYWE2OGViMjFlM2Q4NWI0MDQ2OTExZTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9z
ZXJ2ZXJfZHJpdmVyL2h0dHBfc2VydmVyX2RyaXZlci5weQpAQCAtMCwwICsxLDEzIEBACisjIS91
c3IvYmluL2VudiBweXRob24KKworZnJvbSBhYmMgaW1wb3J0IGFic3RyYWN0bWV0aG9kCisKKwor
Y2xhc3MgSFRUUFNlcnZlckRyaXZlcihvYmplY3QpOgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAg
IGRlZiBzZXJ2ZShzZWxmLCB3ZWJSb290KToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0
bWV0aG9kCisgICAgZGVmIGZldGNoUmVzdWx0KHNlbGYpOgorICAgICAgICBwYXNzCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJf
ZHJpdmVyL2h0dHBfc2VydmVyX2RyaXZlcl9mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2
ZXJfZmFjdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOGU4NTA2NjZlZWRiNjZiNjI5MTNmZDQ4ODA3OTc2
OTZmY2NjYjU2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5j
aG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZlci9odHRwX3NlcnZlcl9kcml2ZXJfZmFjdG9y
eS5weQpAQCAtMCwwICsxLDE2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtf
cnVubmVyLmdlbmVyaWNfZmFjdG9yeSBpbXBvcnQgR2VuZXJpY0ZhY3RvcnkKK2Zyb20gd2Via2l0
cHkuYmVuY2htYXJrX3J1bm5lci51dGlscyBpbXBvcnQgbG9hZEpTT05Gcm9tRmlsZQorCisKK2Ry
aXZlckZpbGVOYW1lID0gJ2h0dHBfc2VydmVyX2RyaXZlcnMuanNvbicKKworCitjbGFzcyBIVFRQ
U2VydmVyRHJpdmVyRmFjdG9yeShHZW5lcmljRmFjdG9yeSk6CisKKyAgICBwcm9kdWN0cyA9IGxv
YWRKU09ORnJvbUZpbGUob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIGRy
aXZlckZpbGVOYW1lKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2ht
YXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJfZHJpdmVycy5qc29uIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2h0dHBfc2VydmVyX2RyaXZl
ci9odHRwX3NlcnZlcl9kcml2ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJiM2JjZGNiNjlkNGU1NTMx
YzQ5OWVkOWE2N2U4M2QyYTc3Mjk4OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvaHR0cF9zZXJ2ZXJf
ZHJpdmVycy5qc29uCkBAIC0wLDAgKzEsNiBAQAoreworICAiU2ltcGxlSFRUUFNlcnZlckRyaXZl
ciI6IHsKKyAgICAibW9kdWxlTmFtZSI6ICJTaW1wbGVIVFRQU2VydmVyRHJpdmVyIiwgCisgICAg
ImZpbGVQYXRoIjogImh0dHBfc2VydmVyX2RyaXZlci5zaW1wbGVfaHR0cF9zZXJ2ZXJfZHJpdmVy
IgorICB9Cit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19y
dW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVyL3NpbXBsZV9odHRwX3NlcnZlcl9kcml2ZXIucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvaHR0cF9zZXJ2ZXJfZHJpdmVy
L3NpbXBsZV9odHRwX3NlcnZlcl9kcml2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQyOTJhNjYyMzA4MDNm
OWJmY2E2MWM3MmEyMWU1YWNkMTZmYzM3OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9odHRwX3NlcnZlcl9kcml2ZXIvc2ltcGxlX2h0
dHBfc2VydmVyX2RyaXZlci5weQpAQCAtMCwwICsxLDc5IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0
CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKKworZnJvbSBodHRwX3NlcnZlcl9kcml2
ZXIgaW1wb3J0IEhUVFBTZXJ2ZXJEcml2ZXIKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
X19uYW1lX18pCisKKworY2xhc3MgU2ltcGxlSFRUUFNlcnZlckRyaXZlcihIVFRQU2VydmVyRHJp
dmVyKToKKworICAgICIiIlRoaXMgY2xhc3MgZGVwZW5kcyBvbiB1bml4IGVudmlyb25tZW50LCBu
ZWVkIHRvIGJlIG1vZGlmaWVkIHRvIGFjaGlldmUgY3Jvc3NwbGF0Zm9ybSBjb21wYWJpbGl0eQor
ICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlclBy
b2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyUG9ydCA9IDAKKyAgICAgICAgIyBGSVhN
RTogVGhpcyBtYXkgbm90IGJlIHJlbGlhYmxlLgorICAgICAgICBfbG9nLmluZm8oJ0ZpbmRpbmcg
dGhlIElQIGFkZHJlc3Mgb2YgY3VycmVudCBtYWNoaW5lJykKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgc2VsZi5pcCA9IFtpcCBmb3IgaXAgaW4gc29ja2V0LmdldGhvc3RieW5hbWVfZXgoc29j
a2V0LmdldGhvc3RuYW1lKCkpWzJdIGlmIG5vdCBpcC5zdGFydHN3aXRoKCIxMjcuIildWzBdCisg
ICAgICAgICAgICBfbG9nLmluZm8oJ0lQIG9mIGN1cnJlbnQgbWFjaGluZSBpczogJXMnICUgc2Vs
Zi5pcCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgX2xvZy5lcnJvcignQ2Fubm90IGdl
dCB0aGUgaXAgYWRkcmVzcyBvZiBjdXJyZW50IG1hY2hpbmUnKQorICAgICAgICAgICAgcmFpc2UK
KworICAgIGRlZiBzZXJ2ZShzZWxmLCB3ZWJyb290KToKKyAgICAgICAgb2xkV29ya2luZ0RpcmVj
dG9yeSA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShvcy5w
YXRoLmFic3BhdGgoX19maWxlX18pKSkKKyAgICAgICAgX2xvZy5pbmZvKCdMYXVjaG5pbmcgYW4g
aHR0cCBzZXJ2ZXInKQorICAgICAgICBzZWxmLnNlcnZlclByb2Nlc3MgPSBzdWJwcm9jZXNzLlBv
cGVuKFsnL3Vzci9iaW4vcHl0aG9uJywgJ2h0dHBfc2VydmVyL3R3aXN0ZWRfaHR0cF9zZXJ2ZXIu
cHknLCB3ZWJyb290XSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvcy5jaGRpcihvbGRXb3JraW5n
RGlyZWN0b3J5KQorICAgICAgICBtYXhBdHRlbXB0ID0gNQorICAgICAgICBpbnRlcnZhbCA9IDAu
NQorICAgICAgICBfbG9nLmluZm8oJ1N0YXJ0IHRvIGZldGNoaW5nIHRoZSBwb3J0IG51bWJlciBv
ZiB0aGUgaHR0cCBzZXJ2ZXInKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgcHN1
dGlsCisgICAgICAgICAgICBmb3IgYXR0ZW1wdCBpbiB4cmFuZ2UobWF4QXR0ZW1wdCk6CisgICAg
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlclBvcnQgPSBw
c3V0aWwuUHJvY2VzcyhzZWxmLnNlcnZlclByb2Nlc3MucGlkKS5jb25uZWN0aW9ucygpWzBdWzNd
WzFdCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyUG9ydDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF9sb2cuaW5mbygnSFRUUCBTZXJ2ZXIgaXMgc2VydmluZyBhdCBwb3J0OiAl
ZCcsIHNlbGYuc2VydmVyUG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MK
KyAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ1NlcnZlciBwb3J0IGlzIG5vdCBmb3VuZCB0aGlz
IHRpbWUsIHJldHJ5IGFmdGVyICVmIHNlY29uZHMnICUgaW50ZXJ2YWwpCisgICAgICAgICAgICAg
ICAgdGltZS5zbGVlcChpbnRlcnZhbCkKKyAgICAgICAgICAgICAgICBpbnRlcnZhbCAqPSAyCisg
ICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBmb3IgYXR0ZW1wdCBpbiB4cmFuZ2UobWF4QXR0ZW1wdCk6CisgICAgICAgICAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCcg
Jy5qb2luKFsnL3Vzci9zYmluL2xzb2YnLCAnLWEnLCAnLWlUQ1AnLCAnLXNUQ1A6TElTVEVOJywg
Jy1wJywgc3RyKHNlbGYuc2VydmVyUHJvY2Vzcy5waWQpXSksIHNoZWxsPVRydWUsIHN0ZG91dD1z
dWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLnNlcnZlclBvcnQgPSBpbnQocmUuZmluZGFsbCgnVENQIFwqOihcZCspIFwo
TElTVEVOXCknLCBwLmNvbW11bmljYXRlKClbMF0pWzBdKQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgc2VsZi5zZXJ2ZXJQb3J0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cu
aW5mbygnSFRUUCBTZXJ2ZXIgaXMgc2VydmluZyBhdCBwb3J0OiAlZCcsIHNlbGYuc2VydmVyUG9y
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAg
ICAjIFJhaXNpbmcgZXhjZXB0aW9uIG1lYW5zIHRoZSBzZXJ2ZXIgaXMgbm90IHJlYWR5IHRvIHNl
cnZlciwgdHJ5IGxhdGVyCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBleGNlcHQg
SW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAg
ICAgICAgX2xvZy5pbmZvKCdTZXJ2ZXIgcG9ydCBpcyBub3QgZm91bmQgdGhpcyB0aW1lLCByZXRy
eSBhZnRlciAlZiBzZWNvbmRzJyAlIGludGVydmFsKQorICAgICAgICAgICAgICAgICAgICB0aW1l
LnNsZWVwKGludGVydmFsKQorICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbCAqPSAyCisgICAg
ICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJTZXJ2ZXIg
bWF5IG5vdCBiZSBzZXJ2aW5nIikKKworICAgIGRlZiBiYXNlVXJsKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gImh0dHA6Ly8lczolZCIgJSAoc2VsZi5pcCwgc2VsZi5zZXJ2ZXJQb3J0KQorCisgICAg
ZGVmIGZldGNoUmVzdWx0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXJQcm9jZXNz
LmNvbW11bmljYXRlKClbMF0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVu
Y2htYXJrX3J1bm5lci91dGlscy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJr
X3J1bm5lci91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YmM0YjY4ZTk1MWVhNDAwOTI1OGYyZDkwZTU0
ODI4YzBkZTY2NGFhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL3V0aWxzLnB5CkBAIC0wLDAgKzEsNjAgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorCitpbXBvcnQganNvbgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0
IHNpZ25hbAorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFz
cyBNb2R1bGVOb3RGb3VuZEVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2RlZiBsb2Fk
TW9kdWxlKG1vZHVsZURlc2MpOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gZ2V0YXR0cihfX2lt
cG9ydF9fKG1vZHVsZURlc2NbJ2ZpbGVQYXRoJ10sIGdsb2JhbHMoKSwgbG9jYWxzKCksIG1vZHVs
ZURlc2NbJ21vZHVsZU5hbWUnXSwgLTEpLCBtb2R1bGVEZXNjWydtb2R1bGVOYW1lJ10pCisgICAg
ICAgIHJldHVybiByZXQKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHJhaXNl
IE1vZHVsZU5vdEZvdW5kRXJyb3IoJ01vZHVsZSAoJXMpIHdpdGggcGF0aCglcykgaXMgbm90IGZv
dW5kJyAlIChtb2R1bGVEZXNjWydtb2R1bGVOYW1lJ10sIG1vZHVsZURlc2NbJ2ZpbGVQYXRoJ10p
KQorCisKK2RlZiBnZXRQYXRoRnJvbVByb2plY3RSb290KHJlbGF0aXZlUGF0aFRvUHJvamVjdFJv
b3QpOgorICAgICMgQ2hvb3NlIHRoZSBkaXJlY3RvcnkgY29udGFpbm5pbmcgY3VycmVudCBmaWxl
IGFzIHN0YXJ0IHBvaW50LAorICAgICMgY29tcHV0ZSByZWxhdGl2ZSBwYXRoIGJhc2Ugb24gdGhl
IHBhcmFtZXRlciwKKyAgICAjIGFuZCByZXR1cm4gYW4gYWJzb2x1dGUgcGF0aAorICAgIHJldHVy
biBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFi
c3BhdGgoX19maWxlX18pKSwgcmVsYXRpdmVQYXRoVG9Qcm9qZWN0Um9vdCkpCisKKworZGVmIGxv
YWRKU09ORnJvbUZpbGUoZmlsZVBhdGgpOgorICAgIHRyeToKKyAgICAgICAganNvbk9iamVjdCA9
IGpzb24ubG9hZChvcGVuKGZpbGVQYXRoLCAncicpKQorICAgICAgICBhc3NlcnQoanNvbk9iamVj
dCkKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QKKyAgICBleGNlcHQ6CisgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbigiSW52YWxpZCBqc29uIGZvcm1hdCBvciBlbXB0eSBqc29uIHdhcyBmb3VuZCBp
biAlcyIgJSAoZmlsZVBhdGgpKQorCisKKyMgQm9ycm93IHRoaXMgY29kZSBmcm9tCisjICdodHRw
Oi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIyODE4NTAvdGltZW91dC1mdW5jdGlvbi1p
Zi1pdC10YWtlcy10b28tbG9uZy10by1maW5pc2gnCitjbGFzcyBUaW1lb3V0RXJyb3IoRXhjZXB0
aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgdGltZW91dDoKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBzZWNvbmRzPTEsIGVycm9yX21lc3NhZ2U9J1RpbWVvdXQnKToKKyAgICAgICAgc2VsZi5z
ZWNvbmRzID0gc2Vjb25kcworICAgICAgICBzZWxmLmVycm9yX21lc3NhZ2UgPSBlcnJvcl9tZXNz
YWdlCisKKyAgICBkZWYgaGFuZGxlX3RpbWVvdXQoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAg
ICAgIHJhaXNlIFRpbWVvdXRFcnJvcihzZWxmLmVycm9yX21lc3NhZ2UpCisKKyAgICBkZWYgX19l
bnRlcl9fKHNlbGYpOgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBzZWxm
LmhhbmRsZV90aW1lb3V0KQorICAgICAgICBzaWduYWwuYWxhcm0oc2VsZi5zZWNvbmRzKQorCisg
ICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBz
aWduYWwuYWxhcm0oMCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>