<?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>73531</bug_id>
          
          <creation_ts>2011-11-30 23:45:47 -0800</creation_ts>
          <short_desc>[meta] Make prepare-ChangeLog a Perl module</short_desc>
          <delta_ts>2012-01-27 15:32:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>73208</dependson>
    
    <dependson>73788</dependson>
    
    <dependson>74172</dependson>
    
    <dependson>74173</dependson>
    
    <dependson>74175</dependson>
    
    <dependson>74257</dependson>
    
    <dependson>74266</dependson>
    
    <dependson>74389</dependson>
    
    <dependson>74485</dependson>
    
    <dependson>74497</dependson>
    
    <dependson>74681</dependson>
    
    <dependson>74698</dependson>
    
    <dependson>74808</dependson>
    
    <dependson>74836</dependson>
    
    <dependson>74992</dependson>
    
    <dependson>74994</dependson>
    
    <dependson>75081</dependson>
    
    <dependson>75191</dependson>
    
    <dependson>75195</dependson>
    
    <dependson>75197</dependson>
    
    <dependson>75201</dependson>
    
    <dependson>75202</dependson>
    
    <dependson>75524</dependson>
    
    <dependson>75531</dependson>
    
    <dependson>75836</dependson>
    
    <dependson>75943</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>512539</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-30 23:45:47 -0800</bug_when>
    <thetext>In order to write unit tests for prepare-ChangeLog, the unit tests need to load prepare-ChangeLog as a Perl module.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512585</commentid>
    <comment_count>1</comment_count>
      <attachid>117371</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-01 00:39:27 -0800</bug_when>
    <thetext>Created attachment 117371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514622</commentid>
    <comment_count>2</comment_count>
      <attachid>117371</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-03 20:53:01 -0800</bug_when>
    <thetext>Comment on attachment 117371
Patch

This patch tries to do too much at once.  If we&apos;re going to refactor prepare-ChangeLog, we should do it in smaller steps (with unit tests written for each smaller patch).

It would also be acceptable to change prepare-ChangeLog just enough to make it possible to load the file as a module for unit testing (like run-leaks).  The way you do this is (likely) to refactor away the use of the problematic global variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514788</commentid>
    <comment_count>3</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-04 16:21:06 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 117371 [details])
&gt; This patch tries to do too much at once.  If we&apos;re going to refactor prepare-ChangeLog, we should do it in smaller steps (with unit tests written for each smaller patch).
&gt; 
&gt; It would also be acceptable to change prepare-ChangeLog just enough to make it possible to load the file as a module for unit testing (like run-leaks).  The way you do this is (likely) to refactor away the use of the problematic global variables.

I guess that this is a minimal change for making prepare-ChangeLog just work as a Perl module. On the other hand, I do agree that this patch is doing too much at once. Then, I&apos;d like to split this patch into the following sub-patches:

[1] Moves top level code (outside any subroutines) into prepareChangeLog().
[2] Moves all non-constant global variables&apos; initialization into InitializeGlobalData().
[3] Adds ChangeLog::new().
[4] Adds &quot;package ChangeLog;&quot; at the beginning and &quot;1;&quot; at the end. Rename resolve-ChangeLogs to ChangeLog.pm. Adds a new prepare-ChangeLog, which instantiates a ChangeLog object using new() and calls ChangeLog::prepareChangeLog().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518663</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-09 17:17:18 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 117371 [details] [details])
&gt; &gt; This patch tries to do too much at once.  If we&apos;re going to refactor prepare-ChangeLog, we should do it in smaller steps (with unit tests written for each smaller patch).
&gt; &gt; 
&gt; &gt; It would also be acceptable to change prepare-ChangeLog just enough to make it possible to load the file as a module for unit testing (like run-leaks).  The way you do this is (likely) to refactor away the use of the problematic global variables.
&gt; 
&gt; I guess that this is a minimal change for making prepare-ChangeLog just work as a Perl module. On the other hand, I do agree that this patch is doing too much at once. Then, I&apos;d like to split this patch into the following sub-patches:
&gt; 
&gt; [1] Moves top level code (outside any subroutines) into prepareChangeLog().

The patches so far that do this look good.

&gt; [2] Moves all non-constant global variables&apos; initialization into InitializeGlobalData().
&gt; [3] Adds ChangeLog::new().
&gt; [4] Adds &quot;package ChangeLog;&quot; at the beginning and &quot;1;&quot; at the end. Rename resolve-ChangeLogs to ChangeLog.pm. Adds a new prepare-ChangeLog, which instantiates a ChangeLog object using new() and calls ChangeLog::prepareChangeLog().

I&apos;m not sure Steps 2-4 are necessary.  Remember, we&apos;re able to test the run-leaks script without making it into a Perl module.  At some point, the changes from Step 1 should be enough to use the same technique as we&apos;re using with the run-leaks script.  At most, you may need a Step 1.1 and 1.2:

[1.1] Move remaining top-level code into a main() method.
[1.2] Remove most (all?) global variables from the script by moving them into main().

After those steps, please try using the run-leaks method of testing the Perl script again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518878</commentid>
    <comment_count>5</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-11 02:08:13 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; I&apos;m not sure Steps 2-4 are necessary.  Remember, we&apos;re able to test the run-leaks script without making it into a Perl module.  At some point, the changes from Step 1 should be enough to use the same technique as we&apos;re using with the run-leaks script.  At most, you may need a Step 1.1 and 1.2:
&gt; 
&gt; [1.1] Move remaining top-level code into a main() method.
&gt; [1.2] Remove most (all?) global variables from the script by moving them into main().
&gt; 
&gt; After those steps, please try using the run-leaks method of testing the Perl script again.

ddkilzer: Thanks. I am not opposed to the run-leaks approach but I still feel that making prepare-ChangeLog.pm a Perl module might be better.

- In the run-leaks approach, we need to prepare RunLeaks.pm for unit-testing. If run-leaks were a Perl module, RunLeaks.pm is not necessary.
- In case of prepare-ChangeLog, since there are already many global variables, removing all global variables will lead to more arguments on methods, e.g. diffCommand(.., $isSVN, $isGit, $gitCommit, $mergeBase). Rather than increasing arguments, using an object might be more readable, like this:

sub diffCommand(...)
{
    my $self = shift;
    if ($self-&gt;{isSVN}) {
        ...;
    } elsif ($self-&gt;{isGit}) {
        ...;
    }
}

WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518888</commentid>
    <comment_count>6</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-11 07:59:47 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; ddkilzer: Thanks. I am not opposed to the run-leaks approach but I still feel that making prepare-ChangeLog.pm a Perl module might be better.

I agree that having a nice object-oriented code base for prepare-ChangeLog would be preferable to a monolithic script with lots of functions, but moving all the functions from prepare-ChangeLog into prepareChangeLog.pm does not provide a good OO model for the code.  The fact that the ChangeLog::new() method had 15 arguments is a code smell that moving all the code into a module wasn&apos;t the correct direction to take.

For example, a ChangeLog.pm module might represent a ChangeLog file, and most of the things you can do with it.  A new ChangeLog object would take a path to an existing ChangeLog, and then there would be methods to modify it, and write it back out again.

The logic for parsing existing file types might be a separate set of modules, or even a module (class) hierarchy since most would probably share a lot of code.

&gt; - In the run-leaks approach, we need to prepare RunLeaks.pm for unit-testing. If run-leaks were a Perl module, RunLeaks.pm is not necessary.

While this is a bit ugly, it&apos;s small, it won&apos;t change much, and it let me accomplish (a) writing tests for existing functionality to prevent further regressions and (b) writing tests for the bug fix I wanted to make.

&gt; - In case of prepare-ChangeLog, since there are already many global variables, removing all global variables will lead to more arguments on methods,

True.  The same thing happen when most of prepare-ChangeLog was moved into a module with a new() method that had 15 arguments in the initial patch on this bug.

&gt; e.g. diffCommand(.., $isSVN, $isGit, $gitCommit, $mergeBase). Rather than increasing arguments, using an object might be more readable, like this:
&gt; 
&gt; sub diffCommand(...)
&gt; {
&gt;     my $self = shift;
&gt;     if ($self-&gt;{isSVN}) {
&gt;         ...;
&gt;     } elsif ($self-&gt;{isGit}) {
&gt;         ...;
&gt;     }
&gt; }
&gt; 
&gt; WDYT?

I was hoping that a small-to-moderate amount of refactoring of prepare-ChangeLog (moving code into methods and removing global variables) would make it testable like run-leaks, then you could fix the original bug.

I agree that moving the code into modules would help to clean it up, but I think some more design needs to be done rather than just moving all of the code into a *.pm file.

Other possible directions could be:

- Refactoring prepare-ChangeLog into modules.  (This reduces the hackability of the script, which was one of the original goals when it was written by Darin/Maciej, but would make it easier to maintain.)

- Extract just the parsing code into a module (or set of modules) to make it testable, then fix the bug.

- Rewrite it in Python since that appears to be the overall direction of the WebKit project (tools written in Python).  This would be a much larger effort, though.

I&apos;m very happy that you&apos;re refactoring this code, but I also don&apos;t want it to become a full-time job.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518892</commentid>
    <comment_count>7</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-11 08:38:51 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; I was hoping that a small-to-moderate amount of refactoring of prepare-ChangeLog (moving code into methods and removing global variables) would make it testable like run-leaks, then you could fix the original bug.
&gt; 
&gt; I agree that moving the code into modules would help to clean it up, but I think some more design needs to be done rather than just moving all of the code into a *.pm file.

ddkilzer: Makes great sense. Thanks. I&apos;ll take the run-leaks approach.

&gt; I&apos;m very happy that you&apos;re refactoring this code, but I also don&apos;t want it to become a full-time job.

Yeah, we should avoid &quot;over-engineering&quot;. The original objective is just to fix a bug of prepare-ChangeLog when it parses here-document in Perl, which makes my full time job (i.e. implementing IDL bindings in around CodeGenerator*.pm) frustrating:-) But anyway I am happy to take this opportunity to make prepare-ChangeLog sane using my free time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544330</commentid>
    <comment_count>8</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-27 13:49:41 -0800</bug_when>
    <thetext>Let me close this meta bug, since we&apos;ve added unittests for prepare-ChangeLog and solved an original issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544445</commentid>
    <comment_count>9</comment_count>
      <attachid>117371</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-01-27 15:32:20 -0800</bug_when>
    <thetext>Comment on attachment 117371
Patch

Making this patch obsolete then.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117371</attachid>
            <date>2011-12-01 00:39:27 -0800</date>
            <delta_ts>2012-01-27 15:32:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73531-20111201173925.patch</filename>
            <type>text/plain</type>
            <size>124027</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTYxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGU2ODM0OGM5YTVjMzhlMjlhOTlmYWM5MWRkOTRjODQy
ODc1MDhiZS4uMmQzZDBlMzQ3ZGM0OTNiODU2OTlkODEyZjNkNjU0OGRlNTU0ZmIyZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4
IEBACisyMDExLTExLTMwICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBNYWtlIHByZXBhcmUtQ2hhbmdlTG9nIGEgUGVybCBtb2R1bGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNTMxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gd3JpdGUgdW5p
dC10ZXN0cyBmb3IgcHJlcGFyZS1DaGFuZ2VMb2cgZnJvbSBub3cgb24sCisgICAgICAgIHRoaXMg
cGF0Y2ggbWFrZXMgcHJlcGFyZS1DaGFuZ2VMb2cgYSBQZXJsIG1vZHVsZSBzbyB0aGF0IHRoZSBj
b21pbmcgdW5pdC10ZXN0cyBjYW4gbG9hZCBpdC4KKworICAgICAgICAtIFRoaXMgcGF0Y2ggcmVu
YW1lcyBvbGQgcHJlcGFyZS1DaGFuZ2VMb2cgdG8gQ2hhbmdlTG9nLnBtLgorICAgICAgICBBbGwg
KG5vbi1jb25zdGFudCkgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgaW4gdGhlIENo
YW5nZUxvZyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgSW4gZmFjdCwgdGhpcyBjaGFuZ2UgaXMganVz
dCB0byBtYWtlIENoYW5nZUxvZy5wbSBhIFBlcmwgbW9kdWxlCisgICAgICAgIHdpdGhvdXQgY2hh
bmdpbmcgY3VycmVudCBiZWhhdmlvcnMsIGFuZCBpcyBub3QgdG8gbWFrZSBDaGFuZ2VMb2cucG0K
KyAgICAgICAgYW4gb2JqZWN0LW9yaWVudGVkIHByb2dyYW0uIFdlIGNvdWxkIHJlZmFjdG9yIENo
YW5nZUxvZy5wbSBsYXRlci4KKyAgICAgICAgV2hpbGUgdGhlIGdpdCBkaWZmIHJlc3VsdCBpcyB0
b28gbG9uZyB0byByZWFkLCB0aGUgZXNzZW50aWFsIGNoYW5nZXMgdG8gQ2hhbmdlTG9nLnBtCisg
ICAgICAgIGFyZSBqdXN0IGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAgIG8gQWRkcyBuZXcoKSwg
SW5pdGlhbGl6ZUdsb2JhbERhdGEoKSBhbmQgcHJlcGFyZUNoYW5nZUxvZygpLgorICAgICAgICAg
ICAgbyBNb3ZlcyBhbGwgbm9uLWNvbnN0YW50IGdsb2JhbCB2YXJpYWJsZXMnIGluaXRpYWxpemF0
aW9uIGludG8gSW5pdGlhbGl6ZUdsb2JhbERhdGEoKS4KKyAgICAgICAgICAgIG8gTW92ZXMgdG9w
IGxldmVsIGNvZGUgKG91dHNpZGUgYW55IHN1YnJvdXRpbmVzKSBpbnRvIHByZXBhcmVDaGFuZ2VM
b2coKS4KKyAgICAgICAgICAgIG8gQWRkcyAicGFja2FnZSBDaGFuZ2VMb2c7IiBhdCB0aGUgYmVn
aW5uaW5nIGFuZCAiMTsiIGF0IHRoZSBlbmQuCisKKyAgICAgICAgLSBUaGlzIHBhdGNoIGFkZHMg
bmV3IHByZXBhcmUtQ2hhbmdlTG9nLCB3aGljaCBqdXN0IGluc3RhbnRpYXRlcyBhCisgICAgICAg
IENoYW5nZUxvZyBvYmplY3QgdXNpbmcgbmV3KCkgYW5kIGNhbGxzIENoYW5nZUxvZzo6cHJlcGFy
ZUNoYW5nZUxvZygpLgorCisgICAgICAgICogU2NyaXB0cy9wcmVwYXJlLUNoYW5nZUxvZzogTG9h
ZHMgQ2hhbmdlTG9nLnBtLgorICAgICAgICAqIFNjcmlwdHMvQ2hhbmdlTG9nLnBtOiBDb3BpZWQg
ZnJvbSBUb29scy9TY3JpcHRzL3ByZXBhcmUtQ2hhbmdlTG9nLgorICAgICAgICAobmV3KTogQWRk
ZWQuCisgICAgICAgIChJbml0aWFsaXplR2xvYmFsRGF0YSk6IEFkZGVkLgorICAgICAgICAocHJl
cGFyZUNoYW5nZUxvZyk6IEFkZGVkLgorICAgICAgICAoY2hhbmdlTG9nRGF0ZSk6IE5vdCBtb2Rp
ZmllZC4KKyAgICAgICAgKGNoYW5nZUxvZ05hbWVGcm9tQXJncyk6IERpdHRvLgorICAgICAgICAo
Y2hhbmdlTG9nRW1haWxBZGRyZXNzRnJvbUFyZ3MpOiBEaXR0by4KKyAgICAgICAgKGdldF9mdW5j
dGlvbl9saW5lX3Jhbmdlcyk6IERpdHRvLgorICAgICAgICAobWV0aG9kX2RlY2xfdG9fc2VsZWN0
b3IpOiBEaXR0by4KKyAgICAgICAgKGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfYyk6IERp
dHRvLgorICAgICAgICAoZ2V0X2Z1bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9qYXZhKTogRGl0dG8u
CisgICAgICAgIChnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNfZm9yX2phdmFzY3JpcHQpOiBEaXR0
by4KKyAgICAgICAgKGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfcGVybCk6IERpdHRvLgor
ICAgICAgICAoZ2V0X2Z1bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9weXRob24pOiBEaXR0by4KKyAg
ICAgICAgKGdldF9zZWxlY3Rvcl9saW5lX3Jhbmdlc19mb3JfY3NzKTogRGl0dG8uCisgICAgICAg
IChwcm9jZXNzUGF0aHMpOiBEaXR0by4KKyAgICAgICAgKGRpZmZGcm9tVG9TdHJpbmcpOiBEaXR0
by4KKyAgICAgICAgKGRpZmZDb21tYW5kKTogRGl0dG8uCisgICAgICAgIChzdGF0dXNDb21tYW5k
KTogRGl0dG8uCisgICAgICAgIChjcmVhdGVQYXRjaENvbW1hbmQpOiBEaXR0by4KKyAgICAgICAg
KGRpZmZIZWFkZXJGb3JtYXQpOiBEaXR0by4KKyAgICAgICAgKGZpbmRPcmlnaW5hbEZpbGVGcm9t
U3ZuKTogRGl0dG8uCisgICAgICAgIChkZXRlcm1pbmVQcm9wZXJ0eUNoYW5nZXMpOiBEaXR0by4K
KyAgICAgICAgKHBsdXJhbGl6ZUFuZExpc3QpOiBEaXR0by4KKyAgICAgICAgKGdlbmVyYXRlRmls
ZUxpc3QpOiBEaXR0by4KKyAgICAgICAgKGlzVW5tb2RpZmllZFN0YXR1cyk6IERpdHRvLgorICAg
ICAgICAoaXNNb2RpZmllZFN0YXR1cyk6IERpdHRvLgorICAgICAgICAoaXNBZGRlZFN0YXR1cyk6
IERpdHRvLgorICAgICAgICAoaXNDb25mbGljdFN0YXR1cyk6IERpdHRvLgorICAgICAgICAoc3Rh
dHVzRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKHByb3BlcnR5Q2hhbmdlRGVzY3JpcHRp
b24pOiBEaXR0by4KKyAgICAgICAgKGV4dHJhY3RMaW5lUmFuZ2UpOiBEaXR0by4KKyAgICAgICAg
KGZpcnN0RGlyZWN0b3J5T3JDd2QpOiBEaXR0by4KKyAgICAgICAgKHRlc3RMaXN0Rm9yQ2hhbmdl
TG9nKTogRGl0dG8uCisgICAgICAgIChyZXZpZXdlckFuZERlc2NyaXB0aW9uRm9yR2l0Q29tbWl0
KTogRGl0dG8uCisgICAgICAgIChub3JtYWxpemVMaW5lRW5kaW5ncyk6IERpdHRvLgorICAgICAg
ICAoZGVjb2RlRW50aXRpZXMpOiBEaXR0by4KKwogMjAxMS0xMS0zMCAgQWxlamFuZHJvIEcuIENh
c3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KIAogICAgICAgICBNb3ZlZCBteXNlbGYgdG8gdGhlIHJl
dmlld2VycyBsaXN0LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9wcmVwYXJlLUNoYW5nZUxv
ZyBiL1Rvb2xzL1NjcmlwdHMvcHJlcGFyZS1DaGFuZ2VMb2cKaW5kZXggN2NmNDQ3NzY2MjY2Yjdm
MmRiMmM4MzViZmY3NGNiZjI4ZDFlMmEzYy4uYjZiMWQyNjdkODI0NzZlODk0NzcwNjc5NDEyNWI4
MmQ1NmFkYzBjYSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9wcmVwYXJlLUNoYW5nZUxvZwor
KysgYi9Ub29scy9TY3JpcHRzL3ByZXBhcmUtQ2hhbmdlTG9nCkBAIC0xLDEwNCArMSwzMCBAQAog
IyEvdXNyL2Jpbi9wZXJsIC13Ci0jIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBu
aWw7IGMtYmFzaWMtb2Zmc2V0OiAyICAtKi0KLQotIwotIyAgQ29weXJpZ2h0IChDKSAyMDAwLCAy
MDAxIEVhemVsLCBJbmMuCi0jICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgIENvcHlyaWdo
dCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KLSMgIENvcHlyaWdodCAoQykgMjAwOSBDYW1l
cm9uIE1jQ29ybWFjayA8Y2FtQG1jYy5pZC5hdT4KICMKLSMgIHByZXBhcmUtQ2hhbmdlTG9nIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0jICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSMg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogIwotIyAgcHJlcGFyZS1DaGFuZ2VMb2cgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyAgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCiAjCi0jICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSMgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSMgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorIyBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCiAjCi0KLQotIyBQZXJsIHNjcmlwdCB0byBjcmVhdGUgYSBDaGFuZ2VMb2cgZW50
cnkgd2l0aCBuYW1lcyBvZiBmaWxlcwotIyBhbmQgZnVuY3Rpb25zIGZyb20gYSBkaWZmLgorIyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisjIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgogIwotIyBEYXJpbiBBZGxlciA8ZGFyaW5AYmVudHNwb29uLmNv
bT4sIHN0YXJ0ZWQgMjAgQXByaWwgMjAwMAotIyBKYXZhIHN1cHBvcnQgYWRkZWQgYnkgTWFjaWVq
IFN0YWNob3dpYWsgPG1qc0BlYXplbC5jb20+Ci0jIE9iamVjdGl2ZS1DLCBDKysgYW5kIE9iamVj
dGl2ZS1DKysgc3VwcG9ydCBhZGRlZCBieSBNYWNpZWogU3RhY2hvd2lhayA8bWpzQGFwcGxlLmNv
bT4KLSMgR2l0IHN1cHBvcnQgYWRkZWQgYnkgQWRhbSBSb2JlbiA8YXJvYmVuQGFwcGxlLmNvbT4K
LSMgLS1naXQtaW5kZXggZmxhZyBhZGRlZCBieSBKb2UgTWFzb24gPGpvZS5tYXNvbkB0b3JjaG1v
YmlsZS5jb20+Ci0KLQotIwotIyBUT0RPOgotIyAgIExpc3QgZnVuY3Rpb25zIHRoYXQgaGF2ZSBi
ZWVuIHJlbW92ZWQgdG9vLgotIyAgIERlY2lkZSB3aGF0IGEgZ29vZCBsb2dpY2FsIG9yZGVyIGlz
IGZvciB0aGUgY2hhbmdlZCBmaWxlcwotIyAgICAgb3RoZXIgdGhhbiBhIG5vcm1hbCB0ZXh0ICJz
b3J0IiAodG9wIGxldmVsIGZpcnN0PykKLSMgICAgIChncm91cCBkaXJlY3Rvcmllcz8pICguaCBi
ZWZvcmUgLmM/KQotIyAgIEhhbmRsZSB5YWNjIHNvdXJjZSBmaWxlcyB0b28gKG90aGVyIGxhbmd1
YWdlcz8pLgotIyAgIEhlbHAgbWVyZ2Ugd2hlbiB0aGVyZSBhcmUgQ2hhbmdlTG9nIGNvbmZsaWN0
cyBvciBpZiB0aGVyZSdzCi0jICAgICBhbHJlYWR5IGEgcGFydGx5IHdyaXR0ZW4gQ2hhbmdlTG9n
IGVudHJ5LgotIyAgIEFkZCBjb21tYW5kIGxpbmUgb3B0aW9uIHRvIHB1dCB0aGUgQ2hhbmdlTG9n
IGludG8gYSBzZXBhcmF0ZSBmaWxlLgotIyAgIEFkZCBTVk4gdmVyc2lvbiBudW1iZXJzIGZvciBj
b21taXQgKGNhbid0IGRvIHRoYXQgdW50aWwKLSMgICAgIHRoZSBjaGFuZ2VzIGFyZSBjaGVja2Vk
IGluLCB0aG91Z2gpLgotIyAgIFdvcmsgYXJvdW5kIGRpZmYgc3R1cGlkaXR5IHdoZXJlIGRlbGV0
aW5nIGEgZnVuY3Rpb24gdGhhdCBzdGFydHMKLSMgICAgIHdpdGggYSBjb21tZW50IG1ha2VzIGRp
ZmYgdGhpbmsgdGhhdCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uCi0jICAgICBoYXMgYmVlbiBjaGFu
Z2VkIChpZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHN0YXJ0cyB3aXRoIGEgY29tbWVudAotIyAg
ICAgd2l0aCB0aGUgc2FtZSBmaXJzdCBsaW5lLCBzdWNoIGFzIC8qKikKLSMgICBXb3JrIGFyb3Vu
ZCBkaWZmIHN0dXBpZGl0eSB3aGVyZSBkZWxldGluZyBhbiBlbnRpcmUgZnVuY3Rpb24gYW5kCi0j
ICAgICB0aGUgYmxhbmsgbGluZXMgYmVmb3JlIGl0IG1ha2VzIGRpZmYgdGhpbmsgeW91J3ZlIGNo
YW5nZWQgdGhlCi0jICAgICBwcmV2aW91cyBmdW5jdGlvbi4KIAogdXNlIHN0cmljdDsKIHVzZSB3
YXJuaW5nczsKLQotdXNlIEZpbGU6OkJhc2VuYW1lOwotdXNlIEZpbGU6OlNwZWM7Ci11c2UgRmlu
ZEJpbjsKIHVzZSBHZXRvcHQ6Okxvbmc7Ci11c2UgbGliICRGaW5kQmluOjpCaW47Ci11c2UgUE9T
SVggcXcoc3RyZnRpbWUpOwotdXNlIFZDU1V0aWxzOwotCi1zdWIgY2hhbmdlTG9nRGF0ZSgkKTsK
LXN1YiBjaGFuZ2VMb2dFbWFpbEFkZHJlc3NGcm9tQXJncygkKTsKLXN1YiBjaGFuZ2VMb2dOYW1l
RnJvbUFyZ3MoJCk7Ci1zdWIgZmlyc3REaXJlY3RvcnlPckN3ZCgpOwotc3ViIGRpZmZGcm9tVG9T
dHJpbmcoKTsKLXN1YiBkaWZmQ29tbWFuZChAKTsKLXN1YiBzdGF0dXNDb21tYW5kKEApOwotc3Vi
IGNyZWF0ZVBhdGNoQ29tbWFuZCgkKTsKLXN1YiBkaWZmSGVhZGVyRm9ybWF0KCk7Ci1zdWIgZmlu
ZE9yaWdpbmFsRmlsZUZyb21Tdm4oJCk7Ci1zdWIgZGV0ZXJtaW5lUHJvcGVydHlDaGFuZ2VzKCQk
JCk7Ci1zdWIgcGx1cmFsaXplQW5kTGlzdCgkJEApOwotc3ViIGdlbmVyYXRlRmlsZUxpc3QoXEBc
QFwlKTsKLXN1YiBpc1VubW9kaWZpZWRTdGF0dXMoJCk7Ci1zdWIgaXNNb2RpZmllZFN0YXR1cygk
KTsKLXN1YiBpc0FkZGVkU3RhdHVzKCQpOwotc3ViIGlzQ29uZmxpY3RTdGF0dXMoJCk7Ci1zdWIg
c3RhdHVzRGVzY3JpcHRpb24oJCQkJCk7Ci1zdWIgcHJvcGVydHlDaGFuZ2VEZXNjcmlwdGlvbigk
KTsKLXN1YiBleHRyYWN0TGluZVJhbmdlKCQpOwotc3ViIHRlc3RMaXN0Rm9yQ2hhbmdlTG9nKEAp
Owotc3ViIGdldF9mdW5jdGlvbl9saW5lX3JhbmdlcygkJCk7Ci1zdWIgZ2V0X2Z1bmN0aW9uX2xp
bmVfcmFuZ2VzX2Zvcl9jKCQkKTsKLXN1YiBnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNfZm9yX2ph
dmEoJCQpOwotc3ViIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfamF2YXNjcmlwdCgkJCk7
Ci1zdWIgZ2V0X2Z1bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9wZXJsKCQkKTsKLXN1YiBnZXRfc2Vs
ZWN0b3JfbGluZV9yYW5nZXNfZm9yX2NzcygkJCk7Ci1zdWIgbWV0aG9kX2RlY2xfdG9fc2VsZWN0
b3IoJCk7Ci1zdWIgcHJvY2Vzc1BhdGhzKFxAKTsKLXN1YiByZXZpZXdlckFuZERlc2NyaXB0aW9u
Rm9yR2l0Q29tbWl0KCQpOwotc3ViIG5vcm1hbGl6ZUxpbmVFbmRpbmdzKCQkKTsKLXN1YiBkZWNv
ZGVFbnRpdGllcygkKTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKIAotIyBQcm9qZWN0IHRpbWUgem9u
ZSBmb3IgQ3VwZXJ0aW5vLCBDQSwgVVMKLW15ICRjaGFuZ2VMb2dUaW1lWm9uZSA9ICJQU1Q4UERU
IjsKK3Vuc2hpZnQgQElOQywgZGlybmFtZSAkMDsKK3JlcXVpcmUgQ2hhbmdlTG9nOwogCiBteSAk
YnVnRGVzY3JpcHRpb247CiBteSAkYnVnTnVtYmVyOwpAQCAtMTQ3LDE2ODQgKzczLDIwIEBAIGlm
ICghJHBhcnNlT3B0aW9uc1Jlc3VsdCB8fCAkc2hvd0hlbHApIHsKIAogZGllICItLWdpdC1jb21t
aXQgYW5kIC0tZ2l0LWluZGV4IGFyZSBpbmNvbXBhdGlibGUuIiBpZiAoJGdpdEluZGV4ICYmICRn
aXRDb21taXQpOwogCi1teSAlcGF0aHMgPSBwcm9jZXNzUGF0aHMoQEFSR1YpOwotCi1teSAkaXNH
aXQgPSBpc0dpdERpcmVjdG9yeShmaXJzdERpcmVjdG9yeU9yQ3dkKCkpOwotbXkgJGlzU1ZOID0g
aXNTVk5EaXJlY3RvcnkoZmlyc3REaXJlY3RvcnlPckN3ZCgpKTsKLQotJGlzU1ZOIHx8ICRpc0dp
dCB8fCBkaWUgIkNvdWxkbid0IGRldGVybWluZSB5b3VyIHZlcnNpb24gY29udHJvbCBzeXN0ZW0u
IjsKLQotbXkgJFNWTiA9ICJzdm4iOwotbXkgJEdJVCA9ICJnaXQiOwotCi0jIEZpbmQgdGhlIGxp
c3Qgb2YgbW9kaWZpZWQgZmlsZXMKLW15IEBjaGFuZ2VkX2ZpbGVzOwotbXkgJGNoYW5nZWRfZmls
ZXNfc3RyaW5nOwotbXkgJWNoYW5nZWRfbGluZV9yYW5nZXM7Ci1teSAlZnVuY3Rpb25fbGlzdHM7
Ci1teSBAY29uZmxpY3RfZmlsZXM7Ci0KLQotbXkgJXN1cHBvcnRlZFRlc3RFeHRlbnNpb25zID0g
bWFwIHsgJF8gPT4gMSB9IHF3KGh0bWwgc2h0bWwgc3ZnIHhtbCB4aHRtbCBwbCBwaHApOwotbXkg
QGFkZGVkUmVncmVzc2lvblRlc3RzID0gKCk7Ci1teSAkZGlkQ2hhbmdlUmVncmVzc2lvblRlc3Rz
ID0gMDsKLQotZ2VuZXJhdGVGaWxlTGlzdChAY2hhbmdlZF9maWxlcywgQGNvbmZsaWN0X2ZpbGVz
LCAlZnVuY3Rpb25fbGlzdHMpOwotCi1pZiAoIUBjaGFuZ2VkX2ZpbGVzICYmICFAY29uZmxpY3Rf
ZmlsZXMgJiYgIWtleXMgJWZ1bmN0aW9uX2xpc3RzKSB7Ci0gICAgcHJpbnQgU1RERVJSICIgIE5v
IGNoYW5nZXMgZm91bmQuXG4iOwotICAgIGV4aXQgMTsKLX0KLQotaWYgKEBjb25mbGljdF9maWxl
cykgewotICAgIHByaW50IFNUREVSUiAiICBUaGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY29uZmxp
Y3RzLiBSdW4gcHJlcGFyZS1DaGFuZ2VMb2cgYWdhaW4gYWZ0ZXIgZml4aW5nIHRoZSBjb25mbGlj
dHM6XG4iOwotICAgIHByaW50IFNUREVSUiBqb2luKCJcbiIsIEBjb25mbGljdF9maWxlcyksICJc
biI7Ci0gICAgZXhpdCAxOwotfQotCi1pZiAoQGNoYW5nZWRfZmlsZXMpIHsKLSAgICAkY2hhbmdl
ZF9maWxlc19zdHJpbmcgPSAiJyIgLiBqb2luICgiJyAnIiwgQGNoYW5nZWRfZmlsZXMpIC4gIici
OwotCi0gICAgIyBGb3IgZWFjaCBmaWxlLCBidWlsZCBhIGxpc3Qgb2YgbW9kaWZpZWQgbGluZXMu
Ci0gICAgIyBVc2UgbGluZSBudW1iZXJzIGZyb20gdGhlICJhZnRlciIgc2lkZSBvZiBlYWNoIGRp
ZmYuCi0gICAgcHJpbnQgU1RERVJSICIgIFJldmlld2luZyBkaWZmIHRvIGRldGVybWluZSB3aGlj
aCBsaW5lcyBjaGFuZ2VkLlxuIjsKLSAgICBteSAkZmlsZTsKLSAgICBvcGVuIERJRkYsICItfCIs
IGRpZmZDb21tYW5kKEBjaGFuZ2VkX2ZpbGVzKSBvciBkaWUgIlRoZSBkaWZmIGZhaWxlZDogJCEu
XG4iOwotICAgIHdoaWxlICg8RElGRj4pIHsKLSAgICAgICAgJGZpbGUgPSBtYWtlRmlsZVBhdGhS
ZWxhdGl2ZSgkMSkgaWYgJF8gPX4gZGlmZkhlYWRlckZvcm1hdCgpOwotICAgICAgICBpZiAoZGVm
aW5lZCAkZmlsZSkgewotICAgICAgICAgICAgbXkgKCRzdGFydCwgJGVuZCkgPSBleHRyYWN0TGlu
ZVJhbmdlKCRfKTsKLSAgICAgICAgICAgIGlmICgkc3RhcnQgPj0gMCAmJiAkZW5kID49IDApIHsK
LSAgICAgICAgICAgICAgICBwdXNoIEB7JGNoYW5nZWRfbGluZV9yYW5nZXN7JGZpbGV9fSwgWyAk
c3RhcnQsICRlbmQgXTsKLSAgICAgICAgICAgIH0gZWxzaWYgKC9ET19OT1RfQ09NTUlULykgewot
ICAgICAgICAgICAgICAgIHByaW50IFNUREVSUiAiV0FSTklORzogZmlsZSAkZmlsZSBjb250YWlu
cyB0aGUgc3RyaW5nIERPX05PVF9DT01NSVQsIGxpbmUgJC5cbiI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2xvc2UgRElGRjsKLX0KLQotIyBGb3IgZWFjaCBzb3VyY2Ug
ZmlsZSwgY29udmVydCBsaW5lIHJhbmdlIHRvIGZ1bmN0aW9uIGxpc3QuCi1pZiAoJWNoYW5nZWRf
bGluZV9yYW5nZXMpIHsKLSAgICBwcmludCBTVERFUlIgIiAgRXh0cmFjdGluZyBhZmZlY3RlZCBm
dW5jdGlvbiBuYW1lcyBmcm9tIHNvdXJjZSBmaWxlcy5cbiI7Ci0gICAgZm9yZWFjaCBteSAkZmls
ZSAoa2V5cyAlY2hhbmdlZF9saW5lX3JhbmdlcykgewotICAgICAgICAjIEZpbmQgYWxsIHRoZSBm
dW5jdGlvbnMgaW4gdGhlIGZpbGUuCi0gICAgICAgIG9wZW4gU09VUkNFLCAkZmlsZSBvciBuZXh0
OwotICAgICAgICBteSBAZnVuY3Rpb25fcmFuZ2VzID0gZ2V0X2Z1bmN0aW9uX2xpbmVfcmFuZ2Vz
KFwqU09VUkNFLCAkZmlsZSk7Ci0gICAgICAgIGNsb3NlIFNPVVJDRTsKLSAgICAKLSAgICAgICAg
IyBGaW5kIGFsbCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLgotICAgICAgICBteSBAZnVuY3Rpb25z
OwotICAgICAgICBteSAlc2F3X2Z1bmN0aW9uOwotICAgICAgICBteSBAY2hhbmdlX3JhbmdlcyA9
IChAeyRjaGFuZ2VkX2xpbmVfcmFuZ2VzeyRmaWxlfX0sIFtdKTsKLSAgICAgICAgbXkgQGNoYW5n
ZV9yYW5nZSA9ICgwLCAwKTsKLSAgICAgICAgRlVOQ1RJT046IGZvcmVhY2ggbXkgJGZ1bmN0aW9u
X3JhbmdlX3JlZiAoQGZ1bmN0aW9uX3JhbmdlcykgewotICAgICAgICAgICAgbXkgQGZ1bmN0aW9u
X3JhbmdlID0gQCRmdW5jdGlvbl9yYW5nZV9yZWY7Ci0gICAgCi0gICAgICAgICAgICAjIEFkdmFu
Y2UgdG8gc3VjY2Vzc2l2ZSBjaGFuZ2UgcmFuZ2VzLgotICAgICAgICAgICAgZm9yICg7OyBAY2hh
bmdlX3JhbmdlID0gQHtzaGlmdCBAY2hhbmdlX3Jhbmdlc30pIHsKLSAgICAgICAgICAgICAgICBs
YXN0IEZVTkNUSU9OIHVubGVzcyBAY2hhbmdlX3JhbmdlOwotICAgIAotICAgICAgICAgICAgICAg
ICMgSWYgcGFzdCB0aGlzIGZ1bmN0aW9uLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZS4KLSAgICAg
ICAgICAgICAgICBuZXh0IEZVTkNUSU9OIGlmICRjaGFuZ2VfcmFuZ2VbMF0gPiAkZnVuY3Rpb25f
cmFuZ2VbMV07Ci0gICAgCi0gICAgICAgICAgICAgICAgIyBJZiBhbiBvdmVybGFwIHdpdGggdGhp
cyBmdW5jdGlvbiByYW5nZSwgcmVjb3JkIHRoZSBmdW5jdGlvbiBuYW1lLgotICAgICAgICAgICAg
ICAgIGlmICgkY2hhbmdlX3JhbmdlWzFdID49ICRmdW5jdGlvbl9yYW5nZVswXQotICAgICAgICAg
ICAgICAgICAgICBhbmQgJGNoYW5nZV9yYW5nZVswXSA8PSAkZnVuY3Rpb25fcmFuZ2VbMV0pIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCEkc2F3X2Z1bmN0aW9ueyRmdW5jdGlvbl9yYW5nZVsy
XX0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICRzYXdfZnVuY3Rpb257JGZ1bmN0aW9uX3Jh
bmdlWzJdfSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBmdW5jdGlvbnMsICRm
dW5jdGlvbl9yYW5nZVsyXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBuZXh0IEZVTkNUSU9OOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIAotICAgICAgICAjIEZvcm1hdCB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgbm93
LgotCi0gICAgICAgIGlmIChAZnVuY3Rpb25zKSB7Ci0gICAgICAgICAgICAkZnVuY3Rpb25fbGlz
dHN7JGZpbGV9ID0gIiIgaWYgIWRlZmluZWQgJGZ1bmN0aW9uX2xpc3RzeyRmaWxlfTsKLSAgICAg
ICAgICAgICRmdW5jdGlvbl9saXN0c3skZmlsZX0gLj0gIlxuICAgICAgICAoIiAuIGpvaW4oIik6
XG4gICAgICAgICgiLCBAZnVuY3Rpb25zKSAuICIpOiI7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LSMgR2V0IHNvbWUgcGFyYW1ldGVycyBmb3IgdGhlIENoYW5nZUxvZyB3ZSBhcmUgYWJvdXQgdG8g
d3JpdGUuCi1teSAkZGF0ZSA9IGNoYW5nZUxvZ0RhdGUoJGNoYW5nZUxvZ1RpbWVab25lKTsKLSRu
YW1lID0gY2hhbmdlTG9nTmFtZUZyb21BcmdzKCRuYW1lKTsKLSRlbWFpbEFkZHJlc3MgPSBjaGFu
Z2VMb2dFbWFpbEFkZHJlc3NGcm9tQXJncygkZW1haWxBZGRyZXNzKTsKLQotcHJpbnQgU1RERVJS
ICIgIENoYW5nZSBhdXRob3I6ICRuYW1lIDwkZW1haWxBZGRyZXNzPi5cbiI7Ci0KLW15ICRidWdV
Ukw7Ci1pZiAoJGJ1Z051bWJlcikgewotICAgICRidWdVUkwgPSAiaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPSRidWdOdW1iZXIiOwotfQotCi1pZiAoJGJ1Z051bWJlciAm
JiAhJGJ1Z0Rlc2NyaXB0aW9uKSB7Ci0gICAgbXkgJGJ1Z1hNTFVSTCA9ICIkYnVnVVJMJmN0eXBl
PXhtbCI7Ci0gICAgIyBQZXJsIGhhcyBubyBidWlsdCBpbiBYTUwgcHJvY2Vzc2luZywgc28gd2Un
bGwgZmV0Y2ggYW5kIHBhcnNlIHdpdGggY3VybCBhbmQgZ3JlcAotICAgICMgUGFzcyAtLWluc2Vj
dXJlIGJlY2F1c2Ugc29tZSBjeWd3aW4gaW5zdGFsbHMgaGF2ZSBubyBjZXJ0cyB3ZSBkb24ndAot
ICAgICMgY2FyZSBhYm91dCB2YWxpZGF0aW5nIHRoYXQgYnVncy53ZWJraXQub3JnIGlzIHdobyBp
dCBzYXlzIGl0IGlzIGhlcmUuCi0gICAgbXkgJGRlc2NyaXB0aW9uTGluZSA9IGBjdXJsIC0taW5z
ZWN1cmUgLS1zaWxlbnQgIiRidWdYTUxVUkwiIHwgZ3JlcCBzaG9ydF9kZXNjYDsKLSAgICBpZiAo
JGRlc2NyaXB0aW9uTGluZSAhfiAvPHNob3J0X2Rlc2M+KC4qKTxcL3Nob3J0X2Rlc2M+Lykgewot
ICAgICAgICAjIE1heWJlIHRoZSByZWFzb24gdGhlIGFib3ZlIGRpZCBub3Qgd29yayBpcyBiZWNh
dXNlIHRoZSBjdXJsIHRoYXQgaXMgaW5zdGFsbGVkIGRvZXNuJ3QKLSAgICAgICAgIyBzdXBwb3J0
IHNzbCBhdCBhbGwuCi0gICAgICAgIGlmIChgY3VybCAtLXZlcnNpb24gfCBncmVwIF5Qcm90b2Nv
bHNgICF+IC9cYmh0dHBzXGIvKSB7Ci0gICAgICAgICAgICBwcmludCBTVERFUlIgIiAgQ291bGQg
bm90IGdldCBkZXNjcmlwdGlvbiBmb3IgYnVnICRidWdOdW1iZXIuXG4iOwotICAgICAgICAgICAg
cHJpbnQgU1RERVJSICIgIEl0IGxvb2tzIGxpa2UgeW91ciB2ZXJzaW9uIG9mIGN1cmwgZG9lcyBu
b3Qgc3VwcG9ydCBzc2wuXG4iOwotICAgICAgICAgICAgcHJpbnQgU1RERVJSICIgIElmIHlvdSBh
cmUgdXNpbmcgbWFjcG9ydHMsIHRoaXMgY2FuIGJlIGZpeGVkIHdpdGggc3VkbyBwb3J0IGluc3Rh
bGwgY3VybCArc3NsLlxuIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50IFNU
REVSUiAiICBCdWcgJGJ1Z051bWJlciBoYXMgbm8gYnVnIGRlc2NyaXB0aW9uLiBNYXliZSB5b3Ug
c2V0IHdyb25nIGJ1ZyBJRD9cbiI7Ci0gICAgICAgICAgICBwcmludCBTVERFUlIgIiAgVGhlIGJ1
ZyBVUkw6ICRidWdYTUxVUkxcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZXhpdCAxOwotICAgIH0K
LSAgICAkYnVnRGVzY3JpcHRpb24gPSBkZWNvZGVFbnRpdGllcygkMSk7Ci0gICAgcHJpbnQgU1RE
RVJSICIgIERlc2NyaXB0aW9uIGZyb20gYnVnICRidWdOdW1iZXI6XG4gICAgXCIkYnVnRGVzY3Jp
cHRpb25cIi5cbiI7Ci19Ci0KLSMgUmVtb3ZlIHRyYWlsaW5nIHBhcmVudGhlc2l6ZWQgbm90ZXMg
ZnJvbSB1c2VyIG5hbWUgKGJpdCBvZiBoYWNrKS4KLSRuYW1lID1+IHMvXCguKj9cKVxzKiQvL2c7
Ci0KLSMgRmluZCB0aGUgY2hhbmdlIGxvZ3MuCi1teSAlaGFzX2xvZzsKLW15ICVmaWxlczsKLWZv
cmVhY2ggbXkgJGZpbGUgKHNvcnQga2V5cyAlZnVuY3Rpb25fbGlzdHMpIHsKLSAgICBteSAkcHJl
Zml4ID0gJGZpbGU7Ci0gICAgbXkgJGhhc19sb2cgPSAwOwotICAgIHdoaWxlICgkcHJlZml4KSB7
Ci0gICAgICAgICRwcmVmaXggPX4gcy0vW14vXSsvPyQtLy0gb3IgJHByZWZpeCA9ICIiOwotICAg
ICAgICAkaGFzX2xvZyA9ICRoYXNfbG9neyRwcmVmaXh9OwotICAgICAgICBpZiAoIWRlZmluZWQg
JGhhc19sb2cpIHsKLSAgICAgICAgICAgICRoYXNfbG9nID0gLWYgIiR7cHJlZml4fUNoYW5nZUxv
ZyI7Ci0gICAgICAgICAgICAkaGFzX2xvZ3skcHJlZml4fSA9ICRoYXNfbG9nOwotICAgICAgICB9
Ci0gICAgICAgIGxhc3QgaWYgJGhhc19sb2c7Ci0gICAgfQotICAgIGlmICghJGhhc19sb2cpIHsK
LSAgICAgICAgcHJpbnQgU1RERVJSICJObyBDaGFuZ2VMb2cgZm91bmQgZm9yICRmaWxlLlxuIjsK
LSAgICB9IGVsc2UgewotICAgICAgICBwdXNoIEB7JGZpbGVzeyRwcmVmaXh9fSwgJGZpbGU7Ci0g
ICAgfQotfQotCi0jIEJ1aWxkIHRoZSBsaXN0IG9mIENoYW5nZUxvZyBwcmVmaXhlcyBpbiB0aGUg
Y29ycmVjdCBwcm9qZWN0IG9yZGVyCi1teSBAcHJlZml4ZXM7Ci1teSAlcHJlZml4ZXNTb3J0Owot
Zm9yZWFjaCBteSAkcHJlZml4IChrZXlzICVmaWxlcykgewotICAgIG15ICRwcmVmaXhEaXIgPSBz
dWJzdHIoJHByZWZpeCwgMCwgbGVuZ3RoKCRwcmVmaXgpIC0gMSk7ICMgc3RyaXAgdHJhaWxpbmcg
LwotICAgIG15ICRzb3J0S2V5ID0gbGMgJHByZWZpeDsKLSAgICAkc29ydEtleSA9ICJ0b3AgbGV2
ZWwiIHVubGVzcyBsZW5ndGggJHNvcnRLZXk7Ci0KLSAgICBpZiAoJHByZWZpeERpciBlcSAidG9w
IGxldmVsIikgewotICAgICAgICAkc29ydEtleSA9ICIiOwotICAgIH0gZWxzaWYgKCRwcmVmaXhE
aXIgZXEgIlRvb2xzIikgewotICAgICAgICAkc29ydEtleSA9ICItLCBqdXN0IGFmdGVyIHRvcCBs
ZXZlbCI7Ci0gICAgfSBlbHNpZiAoJHByZWZpeERpciBlcSAiV2ViQnJvd3NlciIpIHsKLSAgICAg
ICAgJHNvcnRLZXkgPSBsYyAiV2ViS2l0LCBXZWJCcm93c2VyIGFmdGVyIjsKLSAgICB9IGVsc2lm
ICgkcHJlZml4RGlyIGVxICJTb3VyY2UvV2ViQ29yZSIpIHsKLSAgICAgICAgJHNvcnRLZXkgPSBs
YyAiV2ViRm91bmRhdGlvbiwgV2ViQ29yZSBhZnRlciI7Ci0gICAgfSBlbHNpZiAoJHByZWZpeERp
ciBlcSAiTGF5b3V0VGVzdHMiKSB7Ci0gICAgICAgICRzb3J0S2V5ID0gbGMgIn4sIExheW91dFRl
c3RzIGxhc3QiOwotICAgIH0KLQotICAgICRwcmVmaXhlc1NvcnR7JHNvcnRLZXl9ID0gJHByZWZp
eDsKLX0KLWZvcmVhY2ggbXkgJHByZWZpeFNvcnQgKHNvcnQga2V5cyAlcHJlZml4ZXNTb3J0KSB7
Ci0gICAgcHVzaCBAcHJlZml4ZXMsICRwcmVmaXhlc1NvcnR7JHByZWZpeFNvcnR9OwotfQotCi0j
IEdldCB0aGUgbGF0ZXN0IENoYW5nZUxvZyBmaWxlcyBmcm9tIHN2bi4KLW15IEBsb2dzID0gKCk7
Ci1mb3JlYWNoIG15ICRwcmVmaXggKEBwcmVmaXhlcykgewotICAgIHB1c2ggQGxvZ3MsIEZpbGU6
OlNwZWMtPmNhdGZpbGUoJHByZWZpeCB8fCAiLiIsICJDaGFuZ2VMb2ciKTsKLX0KLQotaWYgKEBs
b2dzICYmICR1cGRhdGVDaGFuZ2VMb2dzICYmICRpc1NWTikgewotICAgIHByaW50IFNUREVSUiAi
ICBSdW5uaW5nICdzdm4gdXBkYXRlJyB0byB1cGRhdGUgQ2hhbmdlTG9nIGZpbGVzLlxuIjsKLSAg
ICBvcGVuIEVSUk9SUywgIi18IiwgJFNWTiwgInVwZGF0ZSIsIEBsb2dzCi0gICAgICAgIG9yIGRp
ZSAiVGhlIHN2biB1cGRhdGUgb2YgQ2hhbmdlTG9nIGZpbGVzIGZhaWxlZDogJCEuXG4iOwotICAg
IG15IEBjb25mbGljdGVkQ2hhbmdlTG9nczsKLSAgICB3aGlsZSAobXkgJGxpbmUgPSA8RVJST1JT
PikgewotICAgICAgICBwcmludCBTVERFUlIgIiAgICAiLCAkbGluZTsKLSAgICAgICAgcHVzaCBA
Y29uZmxpY3RlZENoYW5nZUxvZ3MsICQxIGlmICRsaW5lID1+IG0vXkNccysoLis/KVtcclxuXSok
LzsKLSAgICB9Ci0gICAgY2xvc2UgRVJST1JTOwotCi0gICAgaWYgKEBjb25mbGljdGVkQ2hhbmdl
TG9ncykgewotICAgICAgICBwcmludCBTVERFUlIgIiAgQXR0ZW1wdGluZyB0byBtZXJnZSBjb25m
bGljdGVkIENoYW5nZUxvZ3MuXG4iOwotICAgICAgICBteSAkcmVzb2x2ZUNoYW5nZUxvZ3NQYXRo
ID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZShkaXJuYW1lKCQwKSwgInJlc29sdmUtQ2hhbmdlTG9ncyIp
OwotICAgICAgICBvcGVuIFJFU09MVkUsICItfCIsICRyZXNvbHZlQ2hhbmdlTG9nc1BhdGgsICIt
LW5vLXdhcm5pbmdzIiwgQGNvbmZsaWN0ZWRDaGFuZ2VMb2dzCi0gICAgICAgICAgICBvciBkaWUg
IkNvdWxkIG5vdCBvcGVuIHJlc29sdmUtQ2hhbmdlTG9ncyBzY3JpcHQ6ICQhLlxuIjsKLSAgICAg
ICAgcHJpbnQgU1RERVJSICIgICAgJF8iIHdoaWxlIDxSRVNPTFZFPjsKLSAgICAgICAgY2xvc2Ug
UkVTT0xWRTsKLSAgICB9Ci19Ci0KLSMgR2VuZXJhdGUgbmV3IENoYW5nZUxvZyBlbnRyaWVzIGFu
ZCAob3B0aW9uYWxseSkgd3JpdGUgb3V0IG5ldyBDaGFuZ2VMb2cgZmlsZXMuCi1mb3JlYWNoIG15
ICRwcmVmaXggKEBwcmVmaXhlcykgewotICAgIG15ICRlbmRsID0gIlxuIjsKLSAgICBteSBAb2xk
X2NoYW5nZV9sb2c7Ci0KLSAgICBpZiAoJHdyaXRlQ2hhbmdlTG9ncykgewotICAgICAgICBteSAk
Y2hhbmdlTG9nUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJHByZWZpeCB8fCAiLiIsICJDaGFu
Z2VMb2ciKTsKLSAgICAgICAgcHJpbnQgU1RERVJSICIgIEVkaXRpbmcgdGhlICR7Y2hhbmdlTG9n
UGF0aH0gZmlsZS5cbiI7Ci0gICAgICAgIG9wZW4gT0xEX0NIQU5HRV9MT0csICR7Y2hhbmdlTG9n
UGF0aH0gb3IgZGllICJDb3VsZCBub3Qgb3BlbiAke2NoYW5nZUxvZ1BhdGh9IGZpbGU6ICQhLlxu
IjsKLSAgICAgICAgIyBJdCdzIGxlc3MgZWZmaWNpZW50IHRvIHJlYWQgdGhlIHdob2xlIHRoaW5n
IGludG8gbWVtb3J5IHRoYW4gaXQgd291bGQgYmUKLSAgICAgICAgIyB0byByZWFkIGl0IHdoaWxl
IHdlIHByZXBlbmQgdG8gaXQgbGF0ZXIsIGJ1dCBJIGxpa2UgZG9pbmcgdGhpcyBwYXJ0IGZpcnN0
LgotICAgICAgICBAb2xkX2NoYW5nZV9sb2cgPSA8T0xEX0NIQU5HRV9MT0c+OwotICAgICAgICBj
bG9zZSBPTERfQ0hBTkdFX0xPRzsKLSAgICAgICAgIyBXZSB3YW50IHRvIG1hdGNoIHRoZSBDaGFu
Z2VMb2cncyBsaW5lIGVuZGluZ3MgaW4gY2FzZSBpdCBkb2Vzbid0IG1hdGNoCi0gICAgICAgICMg
dGhlIG5hdGl2ZSBsaW5lIGVuZGluZ3MgZm9yIHRoaXMgdmVyc2lvbiBvZiBwZXJsLgotICAgICAg
ICBpZiAoJG9sZF9jaGFuZ2VfbG9nWzBdID1+IC8oXHI/XG4pJC9nKSB7Ci0gICAgICAgICAgICAk
ZW5kbCA9ICIkMSI7Ci0gICAgICAgIH0KLSAgICAgICAgb3BlbiBDSEFOR0VfTE9HLCAiPiAke2No
YW5nZUxvZ1BhdGh9IiBvciBkaWUgIkNvdWxkIG5vdCB3cml0ZSAke2NoYW5nZUxvZ1BhdGh9XG4u
IjsKLSAgICB9IGVsc2UgewotICAgICAgICBvcGVuIENIQU5HRV9MT0csICI+LSIgb3IgZGllICJD
b3VsZCBub3Qgd3JpdGUgdG8gU1RET1VUXG4uIjsKLSAgICAgICAgcHJpbnQgc3Vic3RyKCRwcmVm
aXgsIDAsIGxlbmd0aCgkcHJlZml4KSAtIDEpIC4gIjpcblxuIiB1bmxlc3MgKHNjYWxhciBAcHJl
Zml4ZXMpID09IDE7Ci0gICAgfQotCi0gICAgcHJpbnQgQ0hBTkdFX0xPRyBub3JtYWxpemVMaW5l
RW5kaW5ncygiJGRhdGUgICRuYW1lICA8JGVtYWlsQWRkcmVzcz5cblxuIiwgJGVuZGwpOwotCi0g
ICAgbXkgKCRyZXZpZXdlciwgJGRlc2NyaXB0aW9uKSA9IHJldmlld2VyQW5kRGVzY3JpcHRpb25G
b3JHaXRDb21taXQoJGdpdENvbW1pdCkgaWYgJGdpdENvbW1pdDsKLSAgICAkcmV2aWV3ZXIgPSAi
Tk9CT0RZIChPTyIgLiAiUFMhKSIgaWYgISRyZXZpZXdlcjsKLQotICAgIHByaW50IENIQU5HRV9M
T0cgbm9ybWFsaXplTGluZUVuZGluZ3MoJGRlc2NyaXB0aW9uIC4gIlxuIiwgJGVuZGwpIGlmICRk
ZXNjcmlwdGlvbjsKLQotICAgICRidWdEZXNjcmlwdGlvbiA9ICJOZWVkIGEgc2hvcnQgZGVzY3Jp
cHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKSIgdW5sZXNzICRidWdEZXNjcmlwdGlvbjsKLSAgICBw
cmludCBDSEFOR0VfTE9HIG5vcm1hbGl6ZUxpbmVFbmRpbmdzKCIgICAgICAgICRidWdEZXNjcmlw
dGlvblxuIiwgJGVuZGwpIGlmICRidWdEZXNjcmlwdGlvbjsKLSAgICBwcmludCBDSEFOR0VfTE9H
IG5vcm1hbGl6ZUxpbmVFbmRpbmdzKCIgICAgICAgICRidWdVUkxcbiIsICRlbmRsKSBpZiAkYnVn
VVJMOwotICAgIHByaW50IENIQU5HRV9MT0cgbm9ybWFsaXplTGluZUVuZGluZ3MoIlxuIiwgJGVu
ZGwpOwotCi0gICAgcHJpbnQgQ0hBTkdFX0xPRyBub3JtYWxpemVMaW5lRW5kaW5ncygiICAgICAg
ICBSZXZpZXdlZCBieSAkcmV2aWV3ZXIuXG5cbiIsICRlbmRsKTsKLQotICAgIGlmICgkcHJlZml4
ID1+IG0vV2ViQ29yZS8gfHwgYHB3ZGAgPX4gbS9XZWJDb3JlLykgewotICAgICAgICBpZiAoJGRp
ZENoYW5nZVJlZ3Jlc3Npb25UZXN0cykgewotICAgICAgICAgICAgcHJpbnQgQ0hBTkdFX0xPRyBu
b3JtYWxpemVMaW5lRW5kaW5ncyh0ZXN0TGlzdEZvckNoYW5nZUxvZyhzb3J0IEBhZGRlZFJlZ3Jl
c3Npb25UZXN0cyksICRlbmRsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50
IENIQU5HRV9MT0cgbm9ybWFsaXplTGluZUVuZGluZ3MoIiAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpXG5cbiIsICRlbmRsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvcmVhY2ggbXkg
JGZpbGUgKHNvcnQgQHskZmlsZXN7JHByZWZpeH19KSB7Ci0gICAgICAgIG15ICRmaWxlX3N0ZW0g
PSBzdWJzdHIgJGZpbGUsIGxlbmd0aCAkcHJlZml4OwotICAgICAgICBwcmludCBDSEFOR0VfTE9H
IG5vcm1hbGl6ZUxpbmVFbmRpbmdzKCIgICAgICAgICogJGZpbGVfc3RlbTokZnVuY3Rpb25fbGlz
dHN7JGZpbGV9XG4iLCAkZW5kbCk7Ci0gICAgfQotCi0gICAgaWYgKCR3cml0ZUNoYW5nZUxvZ3Mp
IHsKLSAgICAgICAgcHJpbnQgQ0hBTkdFX0xPRyBub3JtYWxpemVMaW5lRW5kaW5ncygiXG4iLCAk
ZW5kbCksIEBvbGRfY2hhbmdlX2xvZzsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmludCBDSEFO
R0VfTE9HICJcbiI7Ci0gICAgfQotCi0gICAgY2xvc2UgQ0hBTkdFX0xPRzsKLX0KLQotaWYgKCR3
cml0ZUNoYW5nZUxvZ3MpIHsKLSAgICBwcmludCBTVERFUlIgIi0tIFBsZWFzZSByZW1lbWJlciB0
byBpbmNsdWRlIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gaW4geW91ciBDaGFuZ2VMb2cgZW50cnku
IC0tXG4tLSBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2NvZGluZy9jb250cmlidXRpbmcuaHRtbD4g
Zm9yIG1vcmUgaW5mbyAtLVxuIjsKLX0KLQotIyBXcml0ZSBvdXQgYW5vdGhlciBkaWZmLgotaWYg
KCRzcGV3RGlmZiAmJiBAY2hhbmdlZF9maWxlcykgewotICAgIHByaW50IFNUREVSUiAiICBSdW5u
aW5nIGRpZmYgdG8gaGVscCB5b3Ugd3JpdGUgdGhlIENoYW5nZUxvZyBlbnRyaWVzLlxuIjsKLSAg
ICBsb2NhbCAkLyA9IHVuZGVmOyAjIGxvY2FsIHNsdXJwIG1vZGUKLSAgICBvcGVuIERJRkYsICIt
fCIsIGNyZWF0ZVBhdGNoQ29tbWFuZCgkY2hhbmdlZF9maWxlc19zdHJpbmcpIG9yIGRpZSAiVGhl
IGRpZmYgZmFpbGVkOiAkIS5cbiI7Ci0gICAgcHJpbnQgPERJRkY+OwotICAgIGNsb3NlIERJRkY7
Ci19Ci0KLSMgT3BlbiBDaGFuZ2VMb2dzLgotaWYgKCRvcGVuQ2hhbmdlTG9ncyAmJiBAbG9ncykg
ewotICAgIHByaW50IFNUREVSUiAiICBPcGVuaW5nIHRoZSBlZGl0ZWQgQ2hhbmdlTG9nIGZpbGVz
LlxuIjsKLSAgICBteSAkZWRpdG9yID0gJEVOVntDSEFOR0VfTE9HX0VESVRPUn07Ci0gICAgaWYg
KCRlZGl0b3IpIHsKLSAgICAgICAgc3lzdGVtICgoc3BsaXQgJyAnLCAkZWRpdG9yKSwgQGxvZ3Mp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgICRlZGl0b3IgPSAkRU5We0NIQU5HRV9MT0dfRURJVF9B
UFBMSUNBVElPTn07Ci0gICAgICAgIGlmICgkZWRpdG9yKSB7Ci0gICAgICAgICAgICBzeXN0ZW0g
Im9wZW4iLCAiLWEiLCAkZWRpdG9yLCBAbG9nczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHN5c3RlbSAib3BlbiIsICItZSIsIEBsb2dzOwotICAgICAgICB9Ci0gICAgfQotfQorbXkg
JGNoYW5nZUxvZyA9IENoYW5nZUxvZy0+bmV3KCRzcGV3RGlmZiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkYnVnTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICRidWdEZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZW1haWxBZGRyZXNzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICRtZXJnZUJhc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJGdpdENvbW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ2l0
SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdpdFJldmlld2VyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzaG93SGVscCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkb3BlbkNoYW5nZUxvZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJHdyaXRlQ2hhbmdlTG9ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
dXBkYXRlQ2hhbmdlTG9ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAQVJHVik7
CiskY2hhbmdlTG9nLT5wcmVwYXJlQ2hhbmdlTG9nKCk7CiAKLSMgRG9uZS4KIGV4aXQ7Ci0KLQot
c3ViIGNoYW5nZUxvZ0RhdGUoJCkKLXsKLSAgICBteSAoJHRpbWVab25lKSA9IEBfOwotICAgIG15
ICRzYXZlZFRpbWVab25lID0gJEVOVnsnVFonfTsKLSAgICAjIFNldCBUWiB0ZW1wb3JhcmlseSBz
byB0aGF0IGxvY2FsdGltZSgpIGlzIGluIHRoYXQgdGltZSB6b25lCi0gICAgJEVOVnsnVFonfSA9
ICR0aW1lWm9uZTsKLSAgICBteSAkZGF0ZSA9IHN0cmZ0aW1lKCIlWS0lbS0lZCIsIGxvY2FsdGlt
ZSgpKTsKLSAgICBpZiAoZGVmaW5lZCAkc2F2ZWRUaW1lWm9uZSkgewotICAgICAgICAgJEVOVnsn
VFonfSA9ICRzYXZlZFRpbWVab25lOwotICAgIH0gZWxzZSB7Ci0gICAgICAgICBkZWxldGUgJEVO
VnsnVFonfTsKLSAgICB9Ci0gICAgcmV0dXJuICRkYXRlOwotfQotCi1zdWIgY2hhbmdlTG9nTmFt
ZUZyb21BcmdzKCQpCi17Ci0gICAgbXkgKCRuYW1lRnJvbUFyZ3MpID0gQF87Ci0gICAgIyBTaWxl
bnRseSBhbGxvdyAtLWdpdC1jb21taXQgdG8gd2luLCB3ZSBjb3VsZCB3YXJuIGlmICRuYW1lRnJv
bUFyZ3MgaXMgZGVmaW5lZC4KLSAgICByZXR1cm4gYCRHSVQgbG9nIC0tbWF4LWNvdW50PTEgLS1w
cmV0dHk9XCJmb3JtYXQ6JWFuXCIgXCIkZ2l0Q29tbWl0XCJgIGlmICRnaXRDb21taXQ7Ci0KLSAg
ICByZXR1cm4gJG5hbWVGcm9tQXJncyB8fCBjaGFuZ2VMb2dOYW1lKCk7Ci19Ci0KLXN1YiBjaGFu
Z2VMb2dFbWFpbEFkZHJlc3NGcm9tQXJncygkKQotewotICAgIG15ICgkZW1haWxBZGRyZXNzRnJv
bUFyZ3MpID0gQF87Ci0gICAgIyBTaWxlbnRseSBhbGxvdyAtLWdpdC1jb21taXQgdG8gd2luLCB3
ZSBjb3VsZCB3YXJuIGlmICRlbWFpbEFkZHJlc3NGcm9tQXJncyBpcyBkZWZpbmVkLgotICAgIHJl
dHVybiBgJEdJVCBsb2cgLS1tYXgtY291bnQ9MSAtLXByZXR0eT1cImZvcm1hdDolYWVcIiBcIiRn
aXRDb21taXRcImAgaWYgJGdpdENvbW1pdDsKLQotICAgIHJldHVybiAkZW1haWxBZGRyZXNzRnJv
bUFyZ3MgfHwgY2hhbmdlTG9nRW1haWxBZGRyZXNzKCk7Ci19Ci0KLXN1YiBnZXRfZnVuY3Rpb25f
bGluZV9yYW5nZXMoJCQpCi17Ci0gICAgbXkgKCRmaWxlX2hhbmRsZSwgJGZpbGVfbmFtZSkgPSBA
XzsKLQotICAgICMgVHJ5IHRvIGRldGVybWluZSB0aGUgc291cmNlIGxhbmd1YWdlIGJhc2VkIG9u
IHRoZSBmaWxlIGV4dGVuc2lvbi4KLQotICAgIHJldHVybiBnZXRfZnVuY3Rpb25fbGluZV9yYW5n
ZXNfZm9yX2MoJGZpbGVfaGFuZGxlLCAkZmlsZV9uYW1lKSBpZiAkZmlsZV9uYW1lID1+IC9cLihj
fGNwcHxtfG1tfGgpJC87Ci0gICAgcmV0dXJuIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3Jf
amF2YSgkZmlsZV9oYW5kbGUsICRmaWxlX25hbWUpIGlmICRmaWxlX25hbWUgPX4gL1wuamF2YSQv
OwotICAgIHJldHVybiBnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNfZm9yX2phdmFzY3JpcHQoJGZp
bGVfaGFuZGxlLCAkZmlsZV9uYW1lKSBpZiAkZmlsZV9uYW1lID1+IC9cLmpzJC87Ci0gICAgcmV0
dXJuIGdldF9zZWxlY3Rvcl9saW5lX3Jhbmdlc19mb3JfY3NzKCRmaWxlX2hhbmRsZSwgJGZpbGVf
bmFtZSkgaWYgJGZpbGVfbmFtZSA9fiAvXC5jc3MkLzsKLSAgICByZXR1cm4gZ2V0X2Z1bmN0aW9u
X2xpbmVfcmFuZ2VzX2Zvcl9wZXJsKCRmaWxlX2hhbmRsZSwgJGZpbGVfbmFtZSkgaWYgJGZpbGVf
bmFtZSA9fiAvXC5wW2xtXSQvOwotICAgIHJldHVybiBnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNf
Zm9yX3B5dGhvbigkZmlsZV9oYW5kbGUsICRmaWxlX25hbWUpIGlmICRmaWxlX25hbWUgPX4gL1wu
cHkkLzsKLQotICAgICMgVHJ5IHRvIGRldGVybWluZSB0aGUgc291cmNlIGxhbmd1YWdlIGJhc2Vk
IG9uIHRoZSBzY3JpcHQgaW50ZXJwcmV0ZXIuCi0KLSAgICBteSAkZmlyc3RfbGluZSA9IDwkZmls
ZV9oYW5kbGU+OwotICAgIHNlZWsoJGZpbGVfaGFuZGxlLCAwLCAwKTsKLQotICAgIHJldHVybiAo
KSB1bmxlc3MgJGZpcnN0X2xpbmUgPX4gbXxeIyEoPzovdXNyL2Jpbi9lbnZccyspPyhcUyspfDsK
LSAgICBteSAkaW50ZXJwcmV0ZXIgPSAkMTsKLQotICAgIHJldHVybiBnZXRfZnVuY3Rpb25fbGlu
ZV9yYW5nZXNfZm9yX3BlcmwoJGZpbGVfaGFuZGxlLCAkZmlsZV9uYW1lKSBpZiAkaW50ZXJwcmV0
ZXIgPX4gL3BlcmwkLzsKLSAgICByZXR1cm4gZ2V0X2Z1bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9w
eXRob24oJGZpbGVfaGFuZGxlLCAkZmlsZV9uYW1lKSBpZiAkaW50ZXJwcmV0ZXIgPX4gL3B5dGhv
biQvOwotCi0gICAgcmV0dXJuICgpOwotfQotCi0KLXN1YiBtZXRob2RfZGVjbF90b19zZWxlY3Rv
cigkKQotewotICAgIChteSAkbWV0aG9kX2RlY2wpID0gQF87Ci0KLSAgICAkXyA9ICRtZXRob2Rf
ZGVjbDsKLQotICAgIGlmICgobXkgJGNvbW1lbnRfc3RyaXBwZWQpID0gbS0oW14vXSopKC8vfC8q
KS4qLSkgewotICAgICAgICAkXyA9ICRjb21tZW50X3N0cmlwcGVkOwotICAgIH0KLQotICAgIHMv
LFxzKi4uLi8vOwotCi0gICAgaWYgKC86LykgewotICAgICAgICBteSBAY29tcG9uZW50cyA9IHNw
bGl0IC86LzsKLSAgICAgICAgcG9wIEBjb21wb25lbnRzIGlmIChzY2FsYXIgQGNvbXBvbmVudHMg
PiAxKTsKLSAgICAgICAgJF8gPSAoam9pbiAnOicsIG1hcCB7cy8uKlteWzp3b3JkOl1dLy87IHNj
YWxhciAkXzt9IEBjb21wb25lbnRzKSAuICc6JzsKLSAgICB9IGVsc2UgewotICAgICAgICBzL1xz
KiQvLzsKLSAgICAgICAgcy8uKlteWzp3b3JkOl1dLy87Ci0gICAgfQotCi0gICAgcmV0dXJuICRf
OwotfQotCi0KLQotIyBSZWFkIGEgZmlsZSBhbmQgZ2V0IGFsbCB0aGUgbGluZSByYW5nZXMgb2Yg
dGhlIHRoaW5ncyB0aGF0IGxvb2sgbGlrZSBDIGZ1bmN0aW9ucy4KLSMgQSBmdW5jdGlvbiBuYW1l
IGlzIHRoZSBsYXN0IHdvcmQgYmVmb3JlIGFuIG9wZW4gcGFyZW50aGVzaXMgYmVmb3JlIHRoZSBv
dXRlcgotIyBsZXZlbCBvcGVuIGJyYWNlLiBBIGZ1bmN0aW9uIHN0YXJ0cyBhdCB0aGUgZmlyc3Qg
Y2hhcmFjdGVyIGFmdGVyIHRoZSBsYXN0IGNsb3NlCi0jIGJyYWNlIG9yIHNlbWljb2xvbiBiZWZv
cmUgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGVuZHMgYXQgdGhlIGNsb3NlIGJyYWNlLgotIyBDb21t
ZW50IGhhbmRsaW5nIGlzIHNpbXBsZS1taW5kZWQgYnV0IHdpbGwgd29yayBmb3IgYWxsIGJ1dCBw
YXRob2xvZ2ljYWwgY2FzZXMuCi0jCi0jIFJlc3VsdCBpcyBhIGxpc3Qgb2YgdHJpcGxlczogWyBz
dGFydF9saW5lLCBlbmRfbGluZSwgZnVuY3Rpb25fbmFtZSBdLgotCi1zdWIgZ2V0X2Z1bmN0aW9u
X2xpbmVfcmFuZ2VzX2Zvcl9jKCQkKQotewotICAgIG15ICgkZmlsZV9oYW5kbGUsICRmaWxlX25h
bWUpID0gQF87Ci0KLSAgICBteSBAcmFuZ2VzOwotCi0gICAgbXkgJGluX2NvbW1lbnQgPSAwOwot
ICAgIG15ICRpbl9tYWNybyA9IDA7Ci0gICAgbXkgJGluX21ldGhvZF9kZWNsYXJhdGlvbiA9IDA7
Ci0gICAgbXkgJGluX3BhcmVudGhlc2VzID0gMDsKLSAgICBteSAkaW5fYnJhY2VzID0gMDsKLSAg
ICBteSAkYnJhY2Vfc3RhcnQgPSAwOwotICAgIG15ICRicmFjZV9lbmQgPSAwOwotICAgIG15ICRz
a2lwX3RpbF9icmFjZV9vcl9zZW1pY29sb24gPSAwOwotCi0gICAgbXkgJHdvcmQgPSAiIjsKLSAg
ICBteSAkaW50ZXJmYWNlX25hbWUgPSAiIjsKLQotICAgIG15ICRwb3RlbnRpYWxfbWV0aG9kX2No
YXIgPSAiIjsKLSAgICBteSAkcG90ZW50aWFsX21ldGhvZF9zcGVjID0gIiI7Ci0KLSAgICBteSAk
cG90ZW50aWFsX3N0YXJ0ID0gMDsKLSAgICBteSAkcG90ZW50aWFsX25hbWUgPSAiIjsKLQotICAg
IG15ICRzdGFydCA9IDA7Ci0gICAgbXkgJG5hbWUgPSAiIjsKLQotICAgIG15ICRuZXh0X3dvcmRf
Y291bGRfYmVfbmFtZXNwYWNlID0gMDsKLSAgICBteSAkcG90ZW50aWFsX25hbWVzcGFjZSA9ICIi
OwotICAgIG15IEBuYW1lc3BhY2VzOwotCi0gICAgd2hpbGUgKDwkZmlsZV9oYW5kbGU+KSB7Ci0g
ICAgICAgICMgSGFuZGxlIGNvbnRpbnVlZCBtdWx0aS1saW5lIGNvbW1lbnQuCi0gICAgICAgIGlm
ICgkaW5fY29tbWVudCkgewotICAgICAgICAgICAgbmV4dCB1bmxlc3Mgcy0uKlwqLy0tOwotICAg
ICAgICAgICAgJGluX2NvbW1lbnQgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgIyBIYW5kbGUg
Y29udGludWVkIG1hY3JvLgotICAgICAgICBpZiAoJGluX21hY3JvKSB7Ci0gICAgICAgICAgICAk
aW5fbWFjcm8gPSAwIHVubGVzcyAvXFwkLzsKLSAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0K
LQotICAgICAgICAjIEhhbmRsZSBzdGFydCBvZiBtYWNybyAob3IgYW55IHByZXByb2Nlc3NvciBk
aXJlY3RpdmUpLgotICAgICAgICBpZiAoL15ccypcIy8pIHsKLSAgICAgICAgICAgICRpbl9tYWNy
byA9IDEgaWYgL14oW15cXF18XFwuKSpcXCQvOwotICAgICAgICAgICAgbmV4dDsKLSAgICAgICAg
fQotCi0gICAgICAgICMgSGFuZGxlIGNvbW1lbnRzIGFuZCBxdW90ZWQgdGV4dC4KLSAgICAgICAg
d2hpbGUgKG0tKC9cKnwvL3xcJ3xcIiktKSB7ICMgXCcgYW5kIFwiIGtlZXAgZW1hY3MgcGVybCBt
b2RlIGhhcHB5Ci0gICAgICAgICAgICBteSAkbWF0Y2ggPSAkMTsKLSAgICAgICAgICAgIGlmICgk
bWF0Y2ggZXEgIi8qIikgewotICAgICAgICAgICAgICAgIGlmICghcy0vXCouKj9cKi8tLSkgewot
ICAgICAgICAgICAgICAgICAgICBzLS9cKi4qLS07Ci0gICAgICAgICAgICAgICAgICAgICRpbl9j
b21tZW50ID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2lmICgkbWF0
Y2ggZXEgIi8vIikgewotICAgICAgICAgICAgICAgIHMtLy8uKi0tOwotICAgICAgICAgICAgfSBl
bHNlIHsgIyAnIG9yICIKLSAgICAgICAgICAgICAgICBpZiAoIXMtJG1hdGNoKFteXFxdfFxcLikq
PyRtYXRjaC0tKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdhcm4gIm1pc21hdGNoZWQgcXVvdGVz
IGF0IGxpbmUgJC4gaW4gJGZpbGVfbmFtZVxuIjsKLSAgICAgICAgICAgICAgICAgICAgcy0kbWF0
Y2guKi0tOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0K
LSAgICAgICAgIyBjb250aW51ZWQgbWV0aG9kIGRlY2xhcmF0aW9uCi0gICAgICAgIGlmICgkaW5f
bWV0aG9kX2RlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAgIG15ICRvcmlnaW5hbCA9ICRfOwot
ICAgICAgICAgICAgICBteSAkbWV0aG9kX2NvbnQgPSAkXzsKLQotICAgICAgICAgICAgICBjaG9t
cCAkbWV0aG9kX2NvbnQ7Ci0gICAgICAgICAgICAgICRtZXRob2RfY29udCA9fiBzL1s7XHtdLiov
LzsKLSAgICAgICAgICAgICAgJHBvdGVudGlhbF9tZXRob2Rfc3BlYyA9ICIke3BvdGVudGlhbF9t
ZXRob2Rfc3BlY30gJHttZXRob2RfY29udH0iOwotCi0gICAgICAgICAgICAgICRfID0gJG9yaWdp
bmFsOwotICAgICAgICAgICAgICBpZiAoLzsvKSB7Ci0gICAgICAgICAgICAgICAgICAkcG90ZW50
aWFsX3N0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbWV0aG9kX3NwZWMg
PSAiIjsKLSAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbWV0aG9kX2NoYXIgPSAiIjsKLSAg
ICAgICAgICAgICAgICAgICRpbl9tZXRob2RfZGVjbGFyYXRpb24gPSAwOwotICAgICAgICAgICAg
ICAgICAgcy9eW147XHtdKi8vOwotICAgICAgICAgICAgICB9IGVsc2lmICgvey8pIHsKLSAgICAg
ICAgICAgICAgICAgIG15ICRzZWxlY3RvciA9IG1ldGhvZF9kZWNsX3RvX3NlbGVjdG9yICgkcG90
ZW50aWFsX21ldGhvZF9zcGVjKTsKLSAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbmFtZSA9
ICIke3BvdGVudGlhbF9tZXRob2RfY2hhcn1cWyR7aW50ZXJmYWNlX25hbWV9ICR7c2VsZWN0b3J9
XF0iOwotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAkcG90ZW50aWFsX21l
dGhvZF9zcGVjID0gIiI7Ci0gICAgICAgICAgICAgICAgICAkcG90ZW50aWFsX21ldGhvZF9jaGFy
ID0gIiI7Ci0gICAgICAgICAgICAgICAgICAkaW5fbWV0aG9kX2RlY2xhcmF0aW9uID0gMDsKLSAg
Ci0gICAgICAgICAgICAgICAgICAkXyA9ICRvcmlnaW5hbDsKLSAgICAgICAgICAgICAgICAgIHMv
XlteO3tdKi8vOwotICAgICAgICAgICAgICB9IGVsc2lmICgvXEBlbmQvKSB7Ci0gICAgICAgICAg
ICAgICAgICAkaW5fbWV0aG9kX2RlY2xhcmF0aW9uID0gMDsKLSAgICAgICAgICAgICAgICAgICRp
bnRlcmZhY2VfbmFtZSA9ICIiOwotICAgICAgICAgICAgICAgICAgJF8gPSAkb3JpZ2luYWw7Ci0g
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBuZXh0OwotICAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAKLSAgICAgICAgIyBzdGFydCBvZiBtZXRob2Qg
ZGVjbGFyYXRpb24KLSAgICAgICAgaWYgKChteSAkbWV0aG9kX2NoYXIsIG15ICRtZXRob2Rfc3Bl
YykgPSBtJl4oWy0rXSkoW14wLTk7XVteO10qKTs/JCYpIHsKLSAgICAgICAgICAgIG15ICRvcmln
aW5hbCA9ICRfOwotCi0gICAgICAgICAgICBpZiAoJGludGVyZmFjZV9uYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgY2hvbXAgJG1ldGhvZF9zcGVjOwotICAgICAgICAgICAgICAgICRtZXRob2Rfc3Bl
YyA9fiBzL1x7LiovLzsKLQotICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbWV0aG9kX2NoYXIg
PSAkbWV0aG9kX2NoYXI7Ci0gICAgICAgICAgICAgICAgJHBvdGVudGlhbF9tZXRob2Rfc3BlYyA9
ICRtZXRob2Rfc3BlYzsKLSAgICAgICAgICAgICAgICAkcG90ZW50aWFsX3N0YXJ0ID0gJC47Ci0g
ICAgICAgICAgICAgICAgJGluX21ldGhvZF9kZWNsYXJhdGlvbiA9IDE7Ci0gICAgICAgICAgICB9
IGVsc2UgeyAKLSAgICAgICAgICAgICAgICB3YXJuICJkZWNsYXJpbmcgYSBtZXRob2QgYnV0IGRv
bid0IGhhdmUgaW50ZXJmYWNlIG9uIGxpbmUgJC4gaW4gJGZpbGVfbmFtZVxuIjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICRfID0gJG9yaWdpbmFsOwotICAgICAgICAgICAgaWYgKC9cey8p
IHsKLSAgICAgICAgICAgICAgbXkgJHNlbGVjdG9yID0gbWV0aG9kX2RlY2xfdG9fc2VsZWN0b3Ig
KCRwb3RlbnRpYWxfbWV0aG9kX3NwZWMpOwotICAgICAgICAgICAgICAkcG90ZW50aWFsX25hbWUg
PSAiJHtwb3RlbnRpYWxfbWV0aG9kX2NoYXJ9XFske2ludGVyZmFjZV9uYW1lfSAke3NlbGVjdG9y
fVxdIjsKLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICRwb3RlbnRpYWxfbWV0aG9kX3Nw
ZWMgPSAiIjsKLSAgICAgICAgICAgICAgJHBvdGVudGlhbF9tZXRob2RfY2hhciA9ICIiOwotICAg
ICAgICAgICAgICAkaW5fbWV0aG9kX2RlY2xhcmF0aW9uID0gMDsKLSAgICAgICAgICAgICAgJF8g
PSAkb3JpZ2luYWw7Ci0gICAgICAgICAgICAgIHMvXltee10qLy87Ci0gICAgICAgICAgICB9IGVs
c2lmICgvXEBlbmQvKSB7Ci0gICAgICAgICAgICAgICRpbl9tZXRob2RfZGVjbGFyYXRpb24gPSAw
OwotICAgICAgICAgICAgICAkaW50ZXJmYWNlX25hbWUgPSAiIjsKLSAgICAgICAgICAgICAgJF8g
PSAkb3JpZ2luYWw7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBuZXh0Owot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLQotICAgICAgICAjIEZpbmQgZnVuY3Rpb24sIGlu
dGVyZmFjZSBhbmQgbWV0aG9kIG5hbWVzLgotICAgICAgICB3aGlsZSAobSYoKD86W1s6d29yZDpd
XSs6Oikqb3BlcmF0b3IoPzpbIFx0XSpcKFwpfFteKCldKil8W1s6d29yZDpdOn5dK3xbKCl7fTo7
XSl8XEAoPzppbXBsZW1lbnRhdGlvbnxpbnRlcmZhY2V8cHJvdG9jb2wpXHMrKFx3KylbXntdKiZn
KSB7Ci0gICAgICAgICAgICAjIGludGVyZmFjZSBuYW1lCi0gICAgICAgICAgICBpZiAoJDIpIHsK
LSAgICAgICAgICAgICAgICAkaW50ZXJmYWNlX25hbWUgPSAkMjsKLSAgICAgICAgICAgICAgICBu
ZXh0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAjIE9wZW4gcGFyZW50aGVzaXMuCi0g
ICAgICAgICAgICBpZiAoJDEgZXEgIigiKSB7Ci0gICAgICAgICAgICAgICAgJHBvdGVudGlhbF9u
YW1lID0gJHdvcmQgdW5sZXNzICRpbl9wYXJlbnRoZXNlcyB8fCAkc2tpcF90aWxfYnJhY2Vfb3Jf
c2VtaWNvbG9uOwotICAgICAgICAgICAgICAgICRpbl9wYXJlbnRoZXNlcysrOwotICAgICAgICAg
ICAgICAgIG5leHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICMgQ2xvc2UgcGFyZW50
aGVzaXMuCi0gICAgICAgICAgICBpZiAoJDEgZXEgIikiKSB7Ci0gICAgICAgICAgICAgICAgJGlu
X3BhcmVudGhlc2VzLS07Ci0gICAgICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgIyBDKysgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXJzCi0gICAgICAgICAgICBp
ZiAoJDEgZXEgIjoiKSB7Ci0gICAgICAgICAgICAgICAgICAkc2tpcF90aWxfYnJhY2Vfb3Jfc2Vt
aWNvbG9uID0gMSB1bmxlc3MgKCRpbl9wYXJlbnRoZXNlcyB8fCAkaW5fYnJhY2VzKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgIyBPcGVuIGJyYWNlLgotICAgICAgICAgICAgaWYgKCQx
IGVxICJ7IikgewotICAgICAgICAgICAgICAgICRza2lwX3RpbF9icmFjZV9vcl9zZW1pY29sb24g
PSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCRwb3RlbnRpYWxfbmFtZXNwYWNlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHB1c2ggQG5hbWVzcGFjZXMsICRwb3RlbnRpYWxfbmFtZXNwYWNlOwot
ICAgICAgICAgICAgICAgICAgICAkcG90ZW50aWFsX25hbWVzcGFjZSA9ICIiOwotICAgICAgICAg
ICAgICAgICAgICBuZXh0OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICMg
UHJvbW90ZSBwb3RlbnRpYWwgbmFtZSB0byByZWFsIGZ1bmN0aW9uIG5hbWUgYXQgdGhlCi0gICAg
ICAgICAgICAgICAgIyBzdGFydCBvZiB0aGUgb3V0ZXIgbGV2ZWwgc2V0IG9mIGJyYWNlcyAoZnVu
Y3Rpb24gYm9keT8pLgotICAgICAgICAgICAgICAgIGlmICghJGluX2JyYWNlcyBhbmQgJHBvdGVu
dGlhbF9zdGFydCkgewotICAgICAgICAgICAgICAgICAgICAkc3RhcnQgPSAkcG90ZW50aWFsX3N0
YXJ0OwotICAgICAgICAgICAgICAgICAgICAkbmFtZSA9ICRwb3RlbnRpYWxfbmFtZTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKEBuYW1lc3BhY2VzICYmICRuYW1lICYmIChsZW5ndGgoJG5hbWUp
IDwgMiB8fCBzdWJzdHIoJG5hbWUsMSwxKSBuZSAiWyIpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAkbmFtZSA9IGpvaW4gKCc6OicsIEBuYW1lc3BhY2VzLCAkbmFtZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAkaW5fbWV0
aG9kX2RlY2xhcmF0aW9uID0gMDsKLQotICAgICAgICAgICAgICAgICRicmFjZV9zdGFydCA9ICQu
IGlmICghJGluX2JyYWNlcyk7Ci0gICAgICAgICAgICAgICAgJGluX2JyYWNlcysrOwotICAgICAg
ICAgICAgICAgIG5leHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICMgQ2xvc2UgYnJh
Y2UuCi0gICAgICAgICAgICBpZiAoJDEgZXEgIn0iKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEk
aW5fYnJhY2VzICYmIEBuYW1lc3BhY2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBvcCBAbmFt
ZXNwYWNlczsKLSAgICAgICAgICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAkaW5fYnJhY2VzLS07Ci0gICAgICAgICAgICAgICAgJGJyYWNlX2Vu
ZCA9ICQuIGlmICghJGluX2JyYWNlcyk7Ci0KLSAgICAgICAgICAgICAgICAjIEVuZCBvZiBhbiBv
dXRlciBsZXZlbCBzZXQgb2YgYnJhY2VzLgotICAgICAgICAgICAgICAgICMgVGhpcyBjb3VsZCBi
ZSBhIGZ1bmN0aW9uIGJvZHkuCi0gICAgICAgICAgICAgICAgaWYgKCEkaW5fYnJhY2VzIGFuZCAk
bmFtZSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoIEByYW5nZXMsIFsgJHN0YXJ0LCAkLiwg
JG5hbWUgXTsKLSAgICAgICAgICAgICAgICAgICAgJG5hbWUgPSAiIjsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAkcG90ZW50aWFsX3N0YXJ0ID0gMDsKLSAgICAgICAgICAg
ICAgICAkcG90ZW50aWFsX25hbWUgPSAiIjsKLSAgICAgICAgICAgICAgICBuZXh0OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAjIFNlbWljb2xvbi4KLSAgICAgICAgICAgIGlmICgkMSBl
cSAiOyIpIHsKLSAgICAgICAgICAgICAgICAkc2tpcF90aWxfYnJhY2Vfb3Jfc2VtaWNvbG9uID0g
MDsKLSAgICAgICAgICAgICAgICAkcG90ZW50aWFsX3N0YXJ0ID0gMDsKLSAgICAgICAgICAgICAg
ICAkcG90ZW50aWFsX25hbWUgPSAiIjsKLSAgICAgICAgICAgICAgICAkaW5fbWV0aG9kX2RlY2xh
cmF0aW9uID0gMDsKLSAgICAgICAgICAgICAgICBuZXh0OwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAjIElnbm9yZSAiY29uc3QiIG1ldGhvZCBxdWFsaWZpZXIuCi0gICAgICAgICAgICBp
ZiAoJDEgZXEgImNvbnN0IikgewotICAgICAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICgkMSBlcSAibmFtZXNwYWNlIiB8fCAkMSBlcSAiY2xhc3MiIHx8
ICQxIGVxICJzdHJ1Y3QiKSB7Ci0gICAgICAgICAgICAgICAgJG5leHRfd29yZF9jb3VsZF9iZV9u
YW1lc3BhY2UgPSAxOwotICAgICAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICMgV29yZC4KLSAgICAgICAgICAgICR3b3JkID0gJDE7Ci0gICAgICAgICAgICBp
ZiAoISRza2lwX3RpbF9icmFjZV9vcl9zZW1pY29sb24pIHsKLSAgICAgICAgICAgICAgICBpZiAo
JG5leHRfd29yZF9jb3VsZF9iZV9uYW1lc3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgJHBv
dGVudGlhbF9uYW1lc3BhY2UgPSAkd29yZDsKLSAgICAgICAgICAgICAgICAgICAgJG5leHRfd29y
ZF9jb3VsZF9iZV9uYW1lc3BhY2UgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRwb3Rl
bnRpYWxfbmFtZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbmFtZXNw
YWNlID0gIiI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCEkaW5f
cGFyZW50aGVzZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgJHBvdGVudGlhbF9zdGFydCA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbmFtZSA9ICIiOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoISRwb3RlbnRpYWxfc3RhcnQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgJHBvdGVudGlhbF9zdGFydCA9ICQuOwotICAgICAgICAgICAgICAgICAgICAk
cG90ZW50aWFsX25hbWUgPSAiIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB3YXJuICJtaXNzaW5nIGNsb3NlIGJyYWNlcyBpbiAkZmls
ZV9uYW1lIChwcm9iYWJsZSBzdGFydCBhdCAkYnJhY2Vfc3RhcnQpXG4iIGlmICgkaW5fYnJhY2Vz
ID4gMCk7Ci0gICAgd2FybiAidG9vIG1hbnkgY2xvc2UgYnJhY2VzIGluICRmaWxlX25hbWUgKHBy
b2JhYmxlIHN0YXJ0IGF0ICRicmFjZV9lbmQpXG4iIGlmICgkaW5fYnJhY2VzIDwgMCk7Ci0KLSAg
ICB3YXJuICJtaXNtYXRjaGVkIHBhcmVudGhlc2VzIGluICRmaWxlX25hbWVcbiIgaWYgJGluX3Bh
cmVudGhlc2VzOwotCi0gICAgcmV0dXJuIEByYW5nZXM7Ci19Ci0KLQotCi0jIFJlYWQgYSBmaWxl
IGFuZCBnZXQgYWxsIHRoZSBsaW5lIHJhbmdlcyBvZiB0aGUgdGhpbmdzIHRoYXQgbG9vayBsaWtl
IEphdmEKLSMgY2xhc3NlcywgaW50ZXJmYWNlcyBhbmQgbWV0aG9kcy4KLSMKLSMgQSBjbGFzcyBv
ciBpbnRlcmZhY2UgbmFtZSBpcyB0aGUgd29yZCB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3MKLSMg
YGNsYXNzJyBvciBgaW50ZXJmYWNlJyB3aGVuIGZvbGxvd2VkIGJ5IGFuIG9wZW4gY3VybHkgYnJh
Y2UgYW5kIG5vdAotIyBhIHNlbWljb2xvbi4gSXQgY2FuIGFwcGVhciBhdCB0aGUgdG9wIGxldmVs
LCBvciBpbnNpZGUgYW5vdGhlciBjbGFzcwotIyBvciBpbnRlcmZhY2UgYmxvY2ssIGJ1dCBub3Qg
aW5zaWRlIGEgZnVuY3Rpb24gYmxvY2sKLSMKLSMgQSBjbGFzcyBvciBpbnRlcmZhY2Ugc3RhcnRz
IGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGZpcnN0IGNsb3NlCi0jIGJyYWNlIG9y
IGFmdGVyIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCBlbmRzIGF0IHRoZSBjbG9zZSBicmFjZS4KLSMK
LSMgQSBmdW5jdGlvbiBuYW1lIGlzIHRoZSBsYXN0IHdvcmQgYmVmb3JlIGFuIG9wZW4gcGFyZW50
aGVzaXMgYmVmb3JlCi0jIGFuIG9wZW4gYnJhY2UgcmF0aGVyIHRoYW4gYSBzZW1pY29sb24uIEl0
IGNhbiBhcHBlYXIgYXQgdG9wIGxldmVsIG9yCi0jIGluc2lkZSBhIGNsYXNzIG9yIGludGVyZmFj
ZSBibG9jaywgYnV0IG5vdCBpbnNpZGUgYSBmdW5jdGlvbiBibG9jay4KLSMKLSMgQSBmdW5jdGlv
biBzdGFydHMgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgZmlyc3QgY2xvc2UKLSMg
YnJhY2Ugb3IgYWZ0ZXIgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGVuZHMgYXQgdGhlIGNsb3NlIGJy
YWNlLgotIwotIyBDb21tZW50IGhhbmRsaW5nIGlzIHNpbXBsZS1taW5kZWQgYnV0IHdpbGwgd29y
ayBmb3IgYWxsIGJ1dCBwYXRob2xvZ2ljYWwgY2FzZXMuCi0jCi0jIFJlc3VsdCBpcyBhIGxpc3Qg
b2YgdHJpcGxlczogWyBzdGFydF9saW5lLCBlbmRfbGluZSwgZnVuY3Rpb25fbmFtZSBdLgotCi1z
dWIgZ2V0X2Z1bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9qYXZhKCQkKQotewotICAgIG15ICgkZmls
ZV9oYW5kbGUsICRmaWxlX25hbWUpID0gQF87Ci0KLSAgICBteSBAY3VycmVudF9zY29wZXM7Ci0K
LSAgICBteSBAcmFuZ2VzOwotCi0gICAgbXkgJGluX2NvbW1lbnQgPSAwOwotICAgIG15ICRpbl9t
YWNybyA9IDA7Ci0gICAgbXkgJGluX3BhcmVudGhlc2VzID0gMDsKLSAgICBteSAkaW5fYnJhY2Vz
ID0gMDsKLSAgICBteSAkaW5fbm9uX2Jsb2NrX2JyYWNlcyA9IDA7Ci0gICAgbXkgJGNsYXNzX29y
X2ludGVyZmFjZV9qdXN0X3NlZW4gPSAwOwotCi0gICAgbXkgJHdvcmQgPSAiIjsKLQotICAgIG15
ICRwb3RlbnRpYWxfc3RhcnQgPSAwOwotICAgIG15ICRwb3RlbnRpYWxfbmFtZSA9ICIiOwotICAg
IG15ICRwb3RlbnRpYWxfbmFtZV9pc19jbGFzc19vcl9pbnRlcmZhY2UgPSAwOwotCi0gICAgbXkg
JHN0YXJ0ID0gMDsKLSAgICBteSAkbmFtZSA9ICIiOwotICAgIG15ICRjdXJyZW50X25hbWVfaXNf
Y2xhc3Nfb3JfaW50ZXJmYWNlID0gMDsKLQotICAgIHdoaWxlICg8JGZpbGVfaGFuZGxlPikgewot
ICAgICAgICAjIEhhbmRsZSBjb250aW51ZWQgbXVsdGktbGluZSBjb21tZW50LgotICAgICAgICBp
ZiAoJGluX2NvbW1lbnQpIHsKLSAgICAgICAgICAgIG5leHQgdW5sZXNzIHMtLipcKi8tLTsKLSAg
ICAgICAgICAgICRpbl9jb21tZW50ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgICMgSGFuZGxl
IGNvbnRpbnVlZCBtYWNyby4KLSAgICAgICAgaWYgKCRpbl9tYWNybykgewotICAgICAgICAgICAg
JGluX21hY3JvID0gMCB1bmxlc3MgL1xcJC87Ci0gICAgICAgICAgICBuZXh0OwotICAgICAgICB9
Ci0KLSAgICAgICAgIyBIYW5kbGUgc3RhcnQgb2YgbWFjcm8gKG9yIGFueSBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlKS4KLSAgICAgICAgaWYgKC9eXHMqXCMvKSB7Ci0gICAgICAgICAgICAkaW5fbWFj
cm8gPSAxIGlmIC9eKFteXFxdfFxcLikqXFwkLzsKLSAgICAgICAgICAgIG5leHQ7Ci0gICAgICAg
IH0KLQotICAgICAgICAjIEhhbmRsZSBjb21tZW50cyBhbmQgcXVvdGVkIHRleHQuCi0gICAgICAg
IHdoaWxlIChtLSgvXCp8Ly98XCd8XCIpLSkgeyAjIFwnIGFuZCBcIiBrZWVwIGVtYWNzIHBlcmwg
bW9kZSBoYXBweQotICAgICAgICAgICAgbXkgJG1hdGNoID0gJDE7Ci0gICAgICAgICAgICBpZiAo
JG1hdGNoIGVxICIvKiIpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXMtL1wqLio/XCovLS0pIHsK
LSAgICAgICAgICAgICAgICAgICAgcy0vXCouKi0tOwotICAgICAgICAgICAgICAgICAgICAkaW5f
Y29tbWVudCA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNpZiAoJG1h
dGNoIGVxICIvLyIpIHsKLSAgICAgICAgICAgICAgICBzLS8vLiotLTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7ICMgJyBvciAiCi0gICAgICAgICAgICAgICAgaWYgKCFzLSRtYXRjaChbXlxcXXxcXC4p
Kj8kbWF0Y2gtLSkgewotICAgICAgICAgICAgICAgICAgICB3YXJuICJtaXNtYXRjaGVkIHF1b3Rl
cyBhdCBsaW5lICQuIGluICRmaWxlX25hbWVcbiI7Ci0gICAgICAgICAgICAgICAgICAgIHMtJG1h
dGNoLiotLTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICAjIEZpbmQgZnVuY3Rpb24gbmFtZXMuCi0gICAgICAgIHdoaWxlIChtLShcdyt8Wygp
e307XSktZykgewotICAgICAgICAgICAgIyBPcGVuIHBhcmVudGhlc2lzLgotICAgICAgICAgICAg
aWYgKCQxIGVxICIoIikgewotICAgICAgICAgICAgICAgIGlmICghJGluX3BhcmVudGhlc2VzKSB7
Ci0gICAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbmFtZSA9ICR3b3JkOwotICAgICAgICAg
ICAgICAgICAgICAkcG90ZW50aWFsX25hbWVfaXNfY2xhc3Nfb3JfaW50ZXJmYWNlID0gMDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgJGluX3BhcmVudGhlc2VzKys7Ci0gICAg
ICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgIyBDbG9zZSBw
YXJlbnRoZXNpcy4KLSAgICAgICAgICAgIGlmICgkMSBlcSAiKSIpIHsKLSAgICAgICAgICAgICAg
ICAkaW5fcGFyZW50aGVzZXMtLTsKLSAgICAgICAgICAgICAgICBuZXh0OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAjIE9wZW4gYnJhY2UuCi0gICAgICAgICAgICBpZiAoJDEgZXEgInsi
KSB7Ci0gICAgICAgICAgICAgICAgIyBQcm9tb3RlIHBvdGVudGlhbCBuYW1lIHRvIHJlYWwgZnVu
Y3Rpb24gbmFtZSBhdCB0aGUKLSAgICAgICAgICAgICAgICAjIHN0YXJ0IG9mIHRoZSBvdXRlciBs
ZXZlbCBzZXQgb2YgYnJhY2VzIChmdW5jdGlvbi9jbGFzcy9pbnRlcmZhY2UgYm9keT8pLgotICAg
ICAgICAgICAgICAgIGlmICghJGluX25vbl9ibG9ja19icmFjZXMKLSAgICAgICAgICAgICAgICAg
ICAgYW5kICghJGluX2JyYWNlcyBvciAkY3VycmVudF9uYW1lX2lzX2NsYXNzX29yX2ludGVyZmFj
ZSkKLSAgICAgICAgICAgICAgICAgICAgYW5kICRwb3RlbnRpYWxfc3RhcnQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCRuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2gg
QHJhbmdlcywgWyAkc3RhcnQsICgkLiAtIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgam9pbiAoJy4nLCBAY3VycmVudF9zY29wZXMpIF07Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotCi0gICAgICAgICAgICAgICAgICAgICRjdXJyZW50X25hbWVfaXNfY2xh
c3Nfb3JfaW50ZXJmYWNlID0gJHBvdGVudGlhbF9uYW1lX2lzX2NsYXNzX29yX2ludGVyZmFjZTsK
LQotICAgICAgICAgICAgICAgICAgICAkc3RhcnQgPSAkcG90ZW50aWFsX3N0YXJ0OwotICAgICAg
ICAgICAgICAgICAgICAkbmFtZSA9ICRwb3RlbnRpYWxfbmFtZTsKLQotICAgICAgICAgICAgICAg
ICAgICBwdXNoIChAY3VycmVudF9zY29wZXMsICRuYW1lKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAkaW5fbm9uX2Jsb2NrX2JyYWNlcysrOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbmFtZSA9ICIiOwotICAg
ICAgICAgICAgICAgICRwb3RlbnRpYWxfc3RhcnQgPSAwOwotCi0gICAgICAgICAgICAgICAgJGlu
X2JyYWNlcysrOwotICAgICAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICMgQ2xvc2UgYnJhY2UuCi0gICAgICAgICAgICBpZiAoJDEgZXEgIn0iKSB7Ci0gICAg
ICAgICAgICAgICAgJGluX2JyYWNlcy0tOwotCi0gICAgICAgICAgICAgICAgIyBFbmQgb2YgYW4g
b3V0ZXIgbGV2ZWwgc2V0IG9mIGJyYWNlcy4KLSAgICAgICAgICAgICAgICAjIFRoaXMgY291bGQg
YmUgYSBmdW5jdGlvbiBib2R5LgotICAgICAgICAgICAgICAgIGlmICghJGluX25vbl9ibG9ja19i
cmFjZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCRuYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoIEByYW5nZXMsIFsgJHN0YXJ0LCAkLiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqb2luICgnLicsIEBjdXJyZW50X3Njb3BlcykgXTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgcG9wIChAY3VycmVudF9zY29wZXMpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoQGN1cnJlbnRfc2NvcGVzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJGN1cnJlbnRfbmFtZV9pc19jbGFzc19vcl9pbnRlcmZhY2UgPSAxOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXJ0ID0gJC4gKyAxOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICRuYW1lID0gICRjdXJyZW50X3Njb3Blc1skI2N1cnJlbnRfc2NvcGVz
LTFdOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAkY3VycmVudF9uYW1lX2lzX2NsYXNzX29yX2ludGVyZmFjZSA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkbmFtZSA9ICAiIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICRpbl9ub25fYmxvY2tfYnJhY2VzLS0gaWYgJGluX25vbl9ibG9ja19icmFjZXM7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgJHBvdGVudGlhbF9zdGFydCA9IDA7Ci0g
ICAgICAgICAgICAgICAgJHBvdGVudGlhbF9uYW1lID0gIiI7Ci0gICAgICAgICAgICAgICAgbmV4
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgIyBTZW1pY29sb24uCi0gICAgICAgICAg
ICBpZiAoJDEgZXEgIjsiKSB7Ci0gICAgICAgICAgICAgICAgJHBvdGVudGlhbF9zdGFydCA9IDA7
Ci0gICAgICAgICAgICAgICAgJHBvdGVudGlhbF9uYW1lID0gIiI7Ci0gICAgICAgICAgICAgICAg
bmV4dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCQxIGVxICJjbGFzcyIgb3Ig
JDEgZXEgImludGVyZmFjZSIpIHsKLSAgICAgICAgICAgICAgICAkY2xhc3Nfb3JfaW50ZXJmYWNl
X2p1c3Rfc2VlbiA9IDE7Ci0gICAgICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgIyBXb3JkLgotICAgICAgICAgICAgJHdvcmQgPSAkMTsKLSAgICAgICAgICAg
IGlmICghJGluX3BhcmVudGhlc2VzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCRjbGFzc19vcl9p
bnRlcmZhY2VfanVzdF9zZWVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbmFt
ZSA9ICR3b3JkOwotICAgICAgICAgICAgICAgICAgICAkcG90ZW50aWFsX3N0YXJ0ID0gJC47Ci0g
ICAgICAgICAgICAgICAgICAgICRjbGFzc19vcl9pbnRlcmZhY2VfanVzdF9zZWVuID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgJHBvdGVudGlhbF9uYW1lX2lzX2NsYXNzX29yX2ludGVyZmFjZSA9
IDE7Ci0gICAgICAgICAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKCEkcG90ZW50aWFsX3N0YXJ0KSB7Ci0gICAgICAgICAg
ICAgICAgJHBvdGVudGlhbF9zdGFydCA9ICQuOwotICAgICAgICAgICAgICAgICRwb3RlbnRpYWxf
bmFtZSA9ICIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgJGNsYXNzX29yX2ludGVyZmFj
ZV9qdXN0X3NlZW4gPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2FybiAibWlzbWF0Y2hl
ZCBicmFjZXMgaW4gJGZpbGVfbmFtZVxuIiBpZiAkaW5fYnJhY2VzOwotICAgIHdhcm4gIm1pc21h
dGNoZWQgcGFyZW50aGVzZXMgaW4gJGZpbGVfbmFtZVxuIiBpZiAkaW5fcGFyZW50aGVzZXM7Ci0K
LSAgICByZXR1cm4gQHJhbmdlczsKLX0KLQotCi0KLSMgUmVhZCBhIGZpbGUgYW5kIGdldCBhbGwg
dGhlIGxpbmUgcmFuZ2VzIG9mIHRoZSB0aGluZ3MgdGhhdCBsb29rIGxpa2UKLSMgSmF2YVNjcmlw
dCBmdW5jdGlvbnMuCi0jCi0jIEEgZnVuY3Rpb24gbmFtZSBpcyB0aGUgd29yZCB0aGF0IGltbWVk
aWF0ZWx5IGZvbGxvd3MgYGZ1bmN0aW9uJyB3aGVuCi0jIGZvbGxvd2VkIGJ5IGFuIG9wZW4gY3Vy
bHkgYnJhY2UuIEl0IGNhbiBhcHBlYXIgYXQgdGhlIHRvcCBsZXZlbCwgb3IKLSMgaW5zaWRlIG90
aGVyIGZ1bmN0aW9ucy4KLSMKLSMgQW4gYW5vbnltb3VzIGZ1bmN0aW9uIG5hbWUgaXMgdGhlIGlk
ZW50aWZpZXIgY2hhaW4gaW1tZWRpYXRlbHkgYmVmb3JlCi0jIGFuIGFzc2lnbm1lbnQgd2l0aCB0
aGUgZXF1YWxzIG9wZXJhdG9yIG9yIG9iamVjdCBub3RhdGlvbiB0aGF0IGhhcyBhCi0jIHZhbHVl
IHN0YXJ0aW5nIHdpdGggYGZ1bmN0aW9uJyBmb2xsb3dlZCBieSBhbiBvcGVuIGN1cmx5IGJyYWNl
LgotIwotIyBBIGdldHRlciBvciBzZXR0ZXIgbmFtZSBpcyB0aGUgd29yZCB0aGF0IGltbWVkaWF0
ZWx5IGZvbGxvd3MgYGdldCcgb3IKLSMgYHNldCcgd2hlbiBmb2xsb3dlZCBieSBhbiBvcGVuIGN1
cmx5IGJyYWNlIC4KLSMKLSMgQ29tbWVudCBoYW5kbGluZyBpcyBzaW1wbGUtbWluZGVkIGJ1dCB3
aWxsIHdvcmsgZm9yIGFsbCBidXQgcGF0aG9sb2dpY2FsIGNhc2VzLgotIwotIyBSZXN1bHQgaXMg
YSBsaXN0IG9mIHRyaXBsZXM6IFsgc3RhcnRfbGluZSwgZW5kX2xpbmUsIGZ1bmN0aW9uX25hbWUg
XS4KLQotc3ViIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfamF2YXNjcmlwdCgkJCkKLXsK
LSAgICBteSAoJGZpbGVIYW5kbGUsICRmaWxlTmFtZSkgPSBAXzsKLQotICAgIG15IEBjdXJyZW50
U2NvcGVzOwotICAgIG15IEBjdXJyZW50SWRlbnRpZmllcnM7Ci0gICAgbXkgQGN1cnJlbnRGdW5j
dGlvbk5hbWVzOwotICAgIG15IEBjdXJyZW50RnVuY3Rpb25EZXB0aHM7Ci0gICAgbXkgQGN1cnJl
bnRGdW5jdGlvblN0YXJ0TGluZXM7Ci0KLSAgICBteSBAcmFuZ2VzOwotCi0gICAgbXkgJGluQ29t
bWVudCA9IDA7Ci0gICAgbXkgJGluUXVvdGVkVGV4dCA9ICIiOwotICAgIG15ICRwYXJlbnRoZXNl
c0RlcHRoID0gMDsKLSAgICBteSAkYnJhY2VzRGVwdGggPSAwOwotCi0gICAgbXkgJGZ1bmN0aW9u
SnVzdFNlZW4gPSAwOwotICAgIG15ICRnZXR0ZXJKdXN0U2VlbiA9IDA7Ci0gICAgbXkgJHNldHRl
ckp1c3RTZWVuID0gMDsKLSAgICBteSAkYXNzaWdubWVudEp1c3RTZWVuID0gMDsKLQotICAgIG15
ICR3b3JkID0gIiI7Ci0KLSAgICB3aGlsZSAoPCRmaWxlSGFuZGxlPikgewotICAgICAgICAjIEhh
bmRsZSBjb250aW51ZWQgbXVsdGktbGluZSBjb21tZW50LgotICAgICAgICBpZiAoJGluQ29tbWVu
dCkgewotICAgICAgICAgICAgbmV4dCB1bmxlc3Mgcy0uKlwqLy0tOwotICAgICAgICAgICAgJGlu
Q29tbWVudCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICAjIEhhbmRsZSBjb250aW51ZWQgcXVv
dGVkIHRleHQuCi0gICAgICAgIGlmICgkaW5RdW90ZWRUZXh0IG5lICIiKSB7Ci0gICAgICAgICAg
ICBuZXh0IGlmIC9cXCQvOwotICAgICAgICAgICAgcy0oW15cXF18XFwuKSo/JGluUXVvdGVkVGV4
dC0tOwotICAgICAgICAgICAgJGluUXVvdGVkVGV4dCA9ICIiOwotICAgICAgICB9Ci0KLSAgICAg
ICAgIyBIYW5kbGUgY29tbWVudHMgYW5kIHF1b3RlZCB0ZXh0LgotICAgICAgICB3aGlsZSAobS0o
L1wqfC8vfFwnfFwiKS0pIHsgIyBcJyBhbmQgXCIga2VlcCBlbWFjcyBwZXJsIG1vZGUgaGFwcHkK
LSAgICAgICAgICAgIG15ICRtYXRjaCA9ICQxOwotICAgICAgICAgICAgaWYgKCRtYXRjaCBlcSAn
LyonKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzLS9cKi4qP1wqLy0tKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHMtL1wqLiotLTsKLSAgICAgICAgICAgICAgICAgICAgJGluQ29tbWVudCA9IDE7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNpZiAoJG1hdGNoIGVxICcvLycp
IHsKLSAgICAgICAgICAgICAgICBzLS8vLiotLTsKLSAgICAgICAgICAgIH0gZWxzZSB7ICMgJyBv
ciAiCi0gICAgICAgICAgICAgICAgaWYgKCFzLSRtYXRjaChbXlxcXXxcXC4pKj8kbWF0Y2gtLSkg
ewotICAgICAgICAgICAgICAgICAgICAkaW5RdW90ZWRUZXh0ID0gJG1hdGNoIGlmIC9cXCQvOwot
ICAgICAgICAgICAgICAgICAgICB3YXJuICJtaXNtYXRjaGVkIHF1b3RlcyBhdCBsaW5lICQuIGlu
ICRmaWxlTmFtZVxuIiBpZiAkaW5RdW90ZWRUZXh0IGVxICIiOwotICAgICAgICAgICAgICAgICAg
ICBzLSRtYXRjaC4qLS07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgIyBGaW5kIGZ1bmN0aW9uIG5hbWVzLgotICAgICAgICB3aGlsZSAobS0o
XHcrfFsoKXt9PTo7XSktZykgewotICAgICAgICAgICAgIyBPcGVuIHBhcmVudGhlc2lzLgotICAg
ICAgICAgICAgaWYgKCQxIGVxICcoJykgewotICAgICAgICAgICAgICAgICRwYXJlbnRoZXNlc0Rl
cHRoKys7Ci0gICAgICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgIyBDbG9zZSBwYXJlbnRoZXNpcy4KLSAgICAgICAgICAgIGlmICgkMSBlcSAnKScpIHsKLSAg
ICAgICAgICAgICAgICAkcGFyZW50aGVzZXNEZXB0aC0tOwotICAgICAgICAgICAgICAgIG5leHQ7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICMgT3BlbiBicmFjZS4KLSAgICAgICAgICAg
IGlmICgkMSBlcSAneycpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBjdXJyZW50U2NvcGVzLCBq
b2luKCIuIiwgQGN1cnJlbnRJZGVudGlmaWVycykpOwotICAgICAgICAgICAgICAgIEBjdXJyZW50
SWRlbnRpZmllcnMgPSAoKTsKLQotICAgICAgICAgICAgICAgICRicmFjZXNEZXB0aCsrOwotICAg
ICAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICMgQ2xvc2Ug
YnJhY2UuCi0gICAgICAgICAgICBpZiAoJDEgZXEgJ30nKSB7Ci0gICAgICAgICAgICAgICAgJGJy
YWNlc0RlcHRoLS07Ci0KLSAgICAgICAgICAgICAgICBpZiAoQGN1cnJlbnRGdW5jdGlvbkRlcHRo
cyBhbmQgJGJyYWNlc0RlcHRoID09ICRjdXJyZW50RnVuY3Rpb25EZXB0aHNbJCNjdXJyZW50RnVu
Y3Rpb25EZXB0aHNdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBvcChAY3VycmVudEZ1bmN0aW9u
RGVwdGhzKTsKLQotICAgICAgICAgICAgICAgICAgICBteSAkY3VycmVudEZ1bmN0aW9uID0gcG9w
KEBjdXJyZW50RnVuY3Rpb25OYW1lcyk7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRzdGFydCA9
IHBvcChAY3VycmVudEZ1bmN0aW9uU3RhcnRMaW5lcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAcmFuZ2VzLCBbJHN0YXJ0LCAkLiwgJGN1cnJlbnRGdW5jdGlvbl0pOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHBvcChAY3VycmVudFNjb3Blcyk7Ci0gICAgICAg
ICAgICAgICAgQGN1cnJlbnRJZGVudGlmaWVycyA9ICgpOwotCi0gICAgICAgICAgICAgICAgbmV4
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgIyBTZW1pY29sb24uCi0gICAgICAgICAg
ICBpZiAoJDEgZXEgJzsnKSB7Ci0gICAgICAgICAgICAgICAgQGN1cnJlbnRJZGVudGlmaWVycyA9
ICgpOwotICAgICAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICMgRnVuY3Rpb24uCi0gICAgICAgICAgICBpZiAoJDEgZXEgJ2Z1bmN0aW9uJykgewotICAgICAg
ICAgICAgICAgICRmdW5jdGlvbkp1c3RTZWVuID0gMTsKLQotICAgICAgICAgICAgICAgIGlmICgk
YXNzaWdubWVudEp1c3RTZWVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRjdXJyZW50RnVu
Y3Rpb24gPSBqb2luKCcuJywgKEBjdXJyZW50U2NvcGVzLCBAY3VycmVudElkZW50aWZpZXJzKSk7
Ci0gICAgICAgICAgICAgICAgICAgICRjdXJyZW50RnVuY3Rpb24gPX4gcy9cLnsyLH0vXC4vZzsg
IyBSZW1vdmVzIGNvbnNlY3V0aXZlIHBlcmlvZHMuCi0KLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAY3VycmVudEZ1bmN0aW9uTmFtZXMsICRjdXJyZW50RnVuY3Rpb24pOwotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBjdXJyZW50RnVuY3Rpb25EZXB0aHMsICRicmFjZXNEZXB0aCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHB1c2goQGN1cnJlbnRGdW5jdGlvblN0YXJ0TGluZXMsICQuKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXh0OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAjIEdldHRlciBwcmVmaXguCi0gICAgICAgICAgICBpZiAoJDEgZXEgJ2dl
dCcpIHsKLSAgICAgICAgICAgICAgICAkZ2V0dGVySnVzdFNlZW4gPSAxOwotICAgICAgICAgICAg
ICAgIG5leHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICMgU2V0dGVyIHByZWZpeC4K
LSAgICAgICAgICAgIGlmICgkMSBlcSAnc2V0JykgewotICAgICAgICAgICAgICAgICRzZXR0ZXJK
dXN0U2VlbiA9IDE7Ci0gICAgICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgIyBBc3NpZ25tZW50IG9wZXJhdG9yLgotICAgICAgICAgICAgaWYgKCQxIGVxICc9
JyBvciAkMSBlcSAnOicpIHsKLSAgICAgICAgICAgICAgICAkYXNzaWdubWVudEp1c3RTZWVuID0g
MTsKLSAgICAgICAgICAgICAgICBuZXh0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBu
ZXh0IGlmICRwYXJlbnRoZXNlc0RlcHRoOwotCi0gICAgICAgICAgICAjIFdvcmQuCi0gICAgICAg
ICAgICAkd29yZCA9ICQxOwotICAgICAgICAgICAgJHdvcmQgPSAiZ2V0ICR3b3JkIiBpZiAkZ2V0
dGVySnVzdFNlZW47Ci0gICAgICAgICAgICAkd29yZCA9ICJzZXQgJHdvcmQiIGlmICRzZXR0ZXJK
dXN0U2VlbjsKLQotICAgICAgICAgICAgaWYgKCgkZnVuY3Rpb25KdXN0U2VlbiBhbmQgISRhc3Np
Z25tZW50SnVzdFNlZW4pIG9yICRnZXR0ZXJKdXN0U2VlbiBvciAkc2V0dGVySnVzdFNlZW4pIHsK
LSAgICAgICAgICAgICAgICBwdXNoKEBjdXJyZW50SWRlbnRpZmllcnMsICR3b3JkKTsKLQotICAg
ICAgICAgICAgICAgIG15ICRjdXJyZW50RnVuY3Rpb24gPSBqb2luKCcuJywgKEBjdXJyZW50U2Nv
cGVzLCBAY3VycmVudElkZW50aWZpZXJzKSk7Ci0gICAgICAgICAgICAgICAgJGN1cnJlbnRGdW5j
dGlvbiA9fiBzL1wuezIsfS9cLi9nOyAjIFJlbW92ZXMgY29uc2VjdXRpdmUgcGVyaW9kcy4KLQot
ICAgICAgICAgICAgICAgIHB1c2goQGN1cnJlbnRGdW5jdGlvbk5hbWVzLCAkY3VycmVudEZ1bmN0
aW9uKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBjdXJyZW50RnVuY3Rpb25EZXB0aHMsICRicmFj
ZXNEZXB0aCk7Ci0gICAgICAgICAgICAgICAgcHVzaChAY3VycmVudEZ1bmN0aW9uU3RhcnRMaW5l
cywgJC4pOwotICAgICAgICAgICAgfSBlbHNpZiAoJHdvcmQgbmUgJ2lmJyBhbmQgJHdvcmQgbmUg
J2ZvcicgYW5kICR3b3JkIG5lICdkbycgYW5kICR3b3JkIG5lICd3aGlsZScgYW5kICR3b3JkIG5l
ICd3aGljaCcgYW5kICR3b3JkIG5lICd2YXInKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAY3Vy
cmVudElkZW50aWZpZXJzLCAkd29yZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICRm
dW5jdGlvbkp1c3RTZWVuID0gMDsKLSAgICAgICAgICAgICRnZXR0ZXJKdXN0U2VlbiA9IDA7Ci0g
ICAgICAgICAgICAkc2V0dGVySnVzdFNlZW4gPSAwOwotICAgICAgICAgICAgJGFzc2lnbm1lbnRK
dXN0U2VlbiA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB3YXJuICJtaXNtYXRjaGVkIGJy
YWNlcyBpbiAkZmlsZU5hbWVcbiIgaWYgJGJyYWNlc0RlcHRoOwotICAgIHdhcm4gIm1pc21hdGNo
ZWQgcGFyZW50aGVzZXMgaW4gJGZpbGVOYW1lXG4iIGlmICRwYXJlbnRoZXNlc0RlcHRoOwotCi0g
ICAgcmV0dXJuIEByYW5nZXM7Ci19Ci0KLSMgUmVhZCBhIGZpbGUgYW5kIGdldCBhbGwgdGhlIGxp
bmUgcmFuZ2VzIG9mIHRoZSB0aGluZ3MgdGhhdCBsb29rIGxpa2UgUGVybCBmdW5jdGlvbnMuIEZ1
bmN0aW9ucwotIyBzdGFydCBvbiBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAic3ViICIsIGFuZCBl
bmQgb24gdGhlIGZpcnN0IGxpbmUgc3RhcnRpbmcgd2l0aCAifSIgdGhlcmVhZnRlci4KLSMKLSMg
UmVzdWx0IGlzIGEgbGlzdCBvZiB0cmlwbGVzOiBbIHN0YXJ0X2xpbmUsIGVuZF9saW5lLCBmdW5j
dGlvbiBdLgotCi1zdWIgZ2V0X2Z1bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9wZXJsKCQkKQotewot
ICAgIG15ICgkZmlsZUhhbmRsZSwgJGZpbGVOYW1lKSA9IEBfOwotCi0gICAgbXkgQHJhbmdlczsK
LQotICAgIG15ICRjdXJyZW50RnVuY3Rpb24gPSAiIjsKLSAgICBteSAkc3RhcnQgPSAwOwotCi0g
ICAgd2hpbGUgKDwkZmlsZUhhbmRsZT4pIHsKLSAgICAgICAgaWYgKC9ec3ViXHMrKFteKFxzXSsp
LykgewotICAgICAgICAgICAgIyBTa2lwIG92ZXIgZm9yd2FyZCBkZWNsYXJhdGlvbnMsIHdoaWNo
IGRvbid0IGNvbnRhaW4gYSBicmFjZSBhbmQgZW5kIHdpdGggYSBzZW1pY29sb24uCi0gICAgICAg
ICAgICBuZXh0IGlmICEvey8gJiYgLzskLzsKLQotICAgICAgICAgICAgaWYgKCRjdXJyZW50RnVu
Y3Rpb24pIHsKLSAgICAgICAgICAgICAgICB3YXJuICJuZXN0ZWQgZnVuY3Rpb25zIGZvdW5kIGF0
IHRvcC1sZXZlbCBhdCAkZmlsZU5hbWU6JC5cbiI7Ci0gICAgICAgICAgICAgICAgbmV4dDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICRjdXJyZW50RnVuY3Rpb24gPSAkMTsKLSAgICAgICAg
ICAgICRzdGFydCA9ICQuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbmRleCgkXywgIn0iKSA9
PSAwKSB7Ci0gICAgICAgICAgICBuZXh0IHVubGVzcyAkc3RhcnQ7Ci0gICAgICAgICAgICBwdXNo
KEByYW5nZXMsIFskc3RhcnQsICQuLCAkY3VycmVudEZ1bmN0aW9uXSk7Ci0gICAgICAgICAgICAk
Y3VycmVudEZ1bmN0aW9uID0gIiI7Ci0gICAgICAgICAgICAkc3RhcnQgPSAwOwotICAgICAgICAg
ICAgbmV4dDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBAcmFuZ2VzOwotfQotCi0j
IFJlYWQgYSBmaWxlIGFuZCBnZXQgYWxsIHRoZSBsaW5lIHJhbmdlcyBvZiB0aGUgdGhpbmdzIHRo
YXQgbG9vayBsaWtlIFB5dGhvbiBjbGFzc2VzLCBtZXRob2RzLCBvciBmdW5jdGlvbnMuCi0jCi0j
IEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgdXNlIFB5dGhvbidzIGFzdCBtb2R1bGUgdG8gZG8gdGhl
IHBhcnNpbmcgZm9yIHVzPwotIwotIyBSZXN1bHQgaXMgYSBsaXN0IG9mIHRyaXBsZXM6IFsgc3Rh
cnRfbGluZSwgZW5kX2xpbmUsIGZ1bmN0aW9uIF0uCi0KLXN1YiBnZXRfZnVuY3Rpb25fbGluZV9y
YW5nZXNfZm9yX3B5dGhvbigkJCkKLXsKLSAgICBteSAoJGZpbGVIYW5kbGUsICRmaWxlTmFtZSkg
PSBAXzsKLQotICAgIG15IEByYW5nZXM7Ci0KLSAgICBteSBAc2NvcGVTdGFjayA9ICh7IGxpbmUg
PT4gMCwgaW5kZW50ID0+IC0xLCBuYW1lID0+IHVuZGVmIH0pOwotICAgIHdoaWxlICg8JGZpbGVI
YW5kbGU+KSB7Ci0gICAgICAgIG5leHQgdW5sZXNzIC9eKFxzKikoXFMuKikkLzsKLSAgICAgICAg
bXkgJGluZGVudCA9IGxlbmd0aCAkMTsKLSAgICAgICAgbXkgJHJlc3QgPSAkMjsKLQotICAgICAg
ICBteSAkc2NvcGUgPSAkc2NvcGVTdGFja1stMV07Ci0KLSAgICAgICAgaWYgKCRpbmRlbnQgPD0g
JHNjb3BlLT57aW5kZW50fSkgewotICAgICAgICAgICAgIyBGaW5kIGFsbCB0aGUgc2NvcGVzIHRo
YXQgd2UgaGF2ZSBqdXN0IGV4aXRlZC4KLSAgICAgICAgICAgIG15ICRpID0gMDsKLSAgICAgICAg
ICAgIGZvciAoOyAkaSA8IEBzY29wZVN0YWNrOyArKyRpKSB7Ci0gICAgICAgICAgICAgICAgbGFz
dCBpZiAkaW5kZW50IDw9ICRzY29wZVN0YWNrWyRpXS0+e2luZGVudH07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBteSBAcG9wcGVkU2NvcGVzID0gc3BsaWNlIEBzY29wZVN0YWNrLCAkaTsK
LQotICAgICAgICAgICAgIyBGb3IgZWFjaCBzY29wZSB0aGF0IHdhcyBqdXN0IGV4aXRlZCwgYWRk
IGEgcmFuZ2UgdGhhdCBnb2VzIGZyb20gdGhlIHN0YXJ0IG9mIHRoYXQKLSAgICAgICAgICAgICMg
c2NvcGUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IG5lc3RlZCBzY29wZSwgb3IgdG8gdGhlIGxp
bmUganVzdCBiZWZvcmUgdGhpcyBvbmUgZm9yCi0gICAgICAgICAgICAjIHRoZSBpbm5lcm1vc3Qg
c2NvcGUuCi0gICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBAcG9wcGVkU2NvcGVzOyArKyRp
KSB7Ci0gICAgICAgICAgICAgICAgbXkgJGxpbmVBZnRlckVuZCA9ICRpICsgMSA9PSBAcG9wcGVk
U2NvcGVzID8gJC4gOiAkcG9wcGVkU2NvcGVzWyRpICsgMV0tPntsaW5lfTsKLSAgICAgICAgICAg
ICAgICBwdXNoIEByYW5nZXMsIFskcG9wcGVkU2NvcGVzWyRpXS0+e2xpbmV9LCAkbGluZUFmdGVy
RW5kIC0gMSwgJHBvcHBlZFNjb3Blc1skaV0tPntuYW1lfV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBAc2NvcGVTdGFjayBvciB3YXJuICJQb3BwZWQgb2ZmIGxhc3Qgc2NvcGUgYXQgJGZp
bGVOYW1lOiQuXG4iOwotCi0gICAgICAgICAgICAjIFNldCB0aGUgbm93LWN1cnJlbnQgc2NvcGUg
dG8gc3RhcnQgYXQgdGhlIGN1cnJlbnQgbGluZS4gQW55IGxpbmVzIHdpdGhpbiB0aGlzIHNjb3Bl
Ci0gICAgICAgICAgICAjIGJlZm9yZSB0aGlzIHBvaW50IHNob3VsZCBhbHJlYWR5IGhhdmUgYmVl
biBhZGRlZCB0byBAcmFuZ2VzLgotICAgICAgICAgICAgJHNjb3BlID0gJHNjb3BlU3RhY2tbLTFd
OwotICAgICAgICAgICAgJHNjb3BlLT57bGluZX0gPSAkLjsKLSAgICAgICAgfQotCi0gICAgICAg
IG5leHQgdW5sZXNzICRyZXN0ID1+IC8oPzpjbGFzc3xkZWYpXHMrKFx3KykvOwotICAgICAgICBt
eSAkbmFtZSA9ICQxOwotCi0gICAgICAgIG15ICRmdWxsTmFtZSA9ICRzY29wZS0+e25hbWV9ID8g
am9pbignLicsICRzY29wZS0+e25hbWV9LCAkbmFtZSkgOiAkbmFtZTsKLSAgICAgICAgcHVzaCBA
c2NvcGVTdGFjaywgeyBsaW5lID0+ICQuLCBpbmRlbnQgPT4gJGluZGVudCwgbmFtZSA9PiAkZnVs
bE5hbWUgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gQHJhbmdlczsKLX0KLQotIyBSZWFkIGEgZmls
ZSBhbmQgZ2V0IGFsbCB0aGUgbGluZSByYW5nZXMgb2YgdGhlIHRoaW5ncyB0aGF0IGxvb2sgbGlr
ZSBDU1Mgc2VsZWN0b3JzLiAgQSBzZWxlY3RvciBpcwotIyBhbnl0aGluZyBiZWZvcmUgYW4gb3Bl
bmluZyBicmFjZSBvbiBhIGxpbmUuIEEgc2VsZWN0b3Igc3RhcnRzIGF0IHRoZSBsaW5lIGNvbnRh
aW5pbmcgdGhlIG9wZW5pbmcKLSMgYnJhY2UgYW5kIGVuZHMgYXQgdGhlIGNsb3NpbmcgYnJhY2Uu
Ci0jIEZJWE1FOiBDb21tZW50cyBhcmUgcGFyc2VkIGp1c3QgbGlrZSB1bmNvbW1lbnRlZCB0ZXh0
LgotIwotIyBSZXN1bHQgaXMgYSBsaXN0IG9mIHRyaXBsZXM6IFsgc3RhcnRfbGluZSwgZW5kX2xp
bmUsIHNlbGVjdG9yIF0uCi0KLXN1YiBnZXRfc2VsZWN0b3JfbGluZV9yYW5nZXNfZm9yX2Nzcygk
JCkKLXsKLSAgICBteSAoJGZpbGVIYW5kbGUsICRmaWxlTmFtZSkgPSBAXzsKLQotICAgIG15IEBy
YW5nZXM7Ci0KLSAgICBteSAkY3VycmVudFNlbGVjdG9yID0gIiI7Ci0gICAgbXkgJHN0YXJ0ID0g
MDsKLQotICAgIHdoaWxlICg8JGZpbGVIYW5kbGU+KSB7Ci0gICAgICAgIGlmICgvXlsgXHRdKigu
KlteIFx0XSlbIFx0XSp7LykgewotICAgICAgICAgICAgJGN1cnJlbnRTZWxlY3RvciA9ICQxOwot
ICAgICAgICAgICAgJHN0YXJ0ID0gJC47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4KCRf
LCAifSIpID49IDApIHsKLSAgICAgICAgICAgIHVubGVzcyAoJHN0YXJ0KSB7Ci0gICAgICAgICAg
ICAgICAgd2FybiAibWlzbWF0Y2hlZCBicmFjZXMgaW4gJGZpbGVOYW1lXG4iOwotICAgICAgICAg
ICAgICAgIG5leHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEByYW5nZXMsIFsk
c3RhcnQsICQuLCAkY3VycmVudFNlbGVjdG9yXSk7Ci0gICAgICAgICAgICAkY3VycmVudFNlbGVj
dG9yID0gIiI7Ci0gICAgICAgICAgICAkc3RhcnQgPSAwOwotICAgICAgICAgICAgbmV4dDsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBAcmFuZ2VzOwotfQotCi1zdWIgcHJvY2Vzc1Bh
dGhzKFxAKQotewotICAgIG15ICgkcGF0aHMpID0gQF87Ci0gICAgcmV0dXJuICgiLiIgPT4gMSkg
aWYgKCFAeyRwYXRoc30pOwotCi0gICAgbXkgJXJlc3VsdCA9ICgpOwotCi0gICAgZm9yIG15ICRm
aWxlIChAeyRwYXRoc30pIHsKLSAgICAgICAgZGllICJjYW4ndCBoYW5kbGUgYWJzb2x1dGUgcGF0
aHMgbGlrZSBcIiRmaWxlXCJcbiIgaWYgRmlsZTo6U3BlYy0+ZmlsZV9uYW1lX2lzX2Fic29sdXRl
KCRmaWxlKTsKLSAgICAgICAgZGllICJjYW4ndCBoYW5kbGUgZW1wdHkgc3RyaW5nIHBhdGhcbiIg
aWYgJGZpbGUgZXEgIiI7Ci0gICAgICAgIGRpZSAiY2FuJ3QgaGFuZGxlIHBhdGggd2l0aCBzaW5n
bGUgcXVvdGUgaW4gdGhlIG5hbWUgbGlrZSBcIiRmaWxlXCJcbiIgaWYgJGZpbGUgPX4gLycvOyAj
ICcgKGtlZXAgWGNvZGUgc3ludGF4IGhpZ2hsaWdodGluZyBoYXBweSkKLQotICAgICAgICBteSAk
dW50b3VjaGVkRmlsZSA9ICRmaWxlOwotCi0gICAgICAgICRmaWxlID0gY2Fub25pY2FsaXplUGF0
aCgkZmlsZSk7Ci0KLSAgICAgICAgZGllICJjYW4ndCBoYW5kbGUgcGF0aHMgd2l0aCAuLiBsaWtl
IFwiJHVudG91Y2hlZEZpbGVcIlxuIiBpZiAkZmlsZSA9fiBtfC9cLlwuL3w7Ci0KLSAgICAgICAg
JHJlc3VsdHskZmlsZX0gPSAxOwotICAgIH0KLQotICAgIHJldHVybiAoIi4iID0+IDEpIGlmICgk
cmVzdWx0eyIuIn0pOwotCi0gICAgIyBSZW1vdmUgYW55IHBhdGhzIHRoYXQgYWxzbyBoYXZlIGEg
cGFyZW50IGxpc3RlZC4KLSAgICBmb3IgbXkgJHBhdGggKGtleXMgJXJlc3VsdCkgewotICAgICAg
ICBmb3IgKG15ICRwYXJlbnQgPSBkaXJuYW1lKCRwYXRoKTsgJHBhcmVudCBuZSAnLic7ICRwYXJl
bnQgPSBkaXJuYW1lKCRwYXJlbnQpKSB7Ci0gICAgICAgICAgICBpZiAoJHJlc3VsdHskcGFyZW50
fSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSAkcmVzdWx0eyRwYXRofTsKLSAgICAgICAgICAg
ICAgICBsYXN0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
ICVyZXN1bHQ7Ci19Ci0KLXN1YiBkaWZmRnJvbVRvU3RyaW5nKCkKLXsKLSAgICByZXR1cm4gIiIg
aWYgJGlzU1ZOOwotICAgIHJldHVybiAkZ2l0Q29tbWl0IGlmICRnaXRDb21taXQgPX4gbS8uK1wu
XC4uKy87Ci0gICAgcmV0dXJuICJcIiRnaXRDb21taXReXCIgXCIkZ2l0Q29tbWl0XCIiIGlmICRn
aXRDb21taXQ7Ci0gICAgcmV0dXJuICItLWNhY2hlZCIgaWYgJGdpdEluZGV4OwotICAgIHJldHVy
biAkbWVyZ2VCYXNlIGlmICRtZXJnZUJhc2U7Ci0gICAgcmV0dXJuICJIRUFEIiBpZiAkaXNHaXQ7
Ci19Ci0KLXN1YiBkaWZmQ29tbWFuZChAKQotewotICAgIG15IEBwYXRocyA9IEBfOwotCi0gICAg
bXkgJHBhdGhzU3RyaW5nID0gIiciIC4gam9pbigiJyAnIiwgQHBhdGhzKSAuICInIjsgCi0KLSAg
ICBteSAkY29tbWFuZDsKLSAgICBpZiAoJGlzU1ZOKSB7Ci0gICAgICAgICRjb21tYW5kID0gIiRT
Vk4gZGlmZiAtLWRpZmYtY21kIGRpZmYgLXggLU4gJHBhdGhzU3RyaW5nIjsKLSAgICB9IGVsc2lm
ICgkaXNHaXQpIHsKLSAgICAgICAgJGNvbW1hbmQgPSAiJEdJVCBkaWZmIC0tbm8tZXh0LWRpZmYg
LVUwICIgLiBkaWZmRnJvbVRvU3RyaW5nKCk7Ci0gICAgICAgICRjb21tYW5kIC49ICIgLS0gJHBh
dGhzU3RyaW5nIiB1bmxlc3MgJGdpdENvbW1pdCBvciAkbWVyZ2VCYXNlOwotICAgIH0KLQotICAg
IHJldHVybiAkY29tbWFuZDsKLX0KLQotc3ViIHN0YXR1c0NvbW1hbmQoQCkKLXsKLSAgICBteSBA
ZmlsZXMgPSBAXzsKLQotICAgIG15ICRmaWxlc1N0cmluZyA9ICJcIiIgLiBqb2luICgiXCIgXCIi
LCBAZmlsZXMpIC4gIlwiIjsKLSAgICBteSAkY29tbWFuZDsKLSAgICBpZiAoJGlzU1ZOKSB7Ci0g
ICAgICAgICRjb21tYW5kID0gIiRTVk4gc3RhdCAkZmlsZXNTdHJpbmciOwotICAgIH0gZWxzaWYg
KCRpc0dpdCkgewotICAgICAgICAkY29tbWFuZCA9ICIkR0lUIGRpZmYgLXIgLS1uYW1lLXN0YXR1
cyAtTSAtQyAiIC4gZGlmZkZyb21Ub1N0cmluZygpOwotICAgICAgICAkY29tbWFuZCAuPSAiIC0t
ICRmaWxlc1N0cmluZyIgdW5sZXNzICRnaXRDb21taXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuICIk
Y29tbWFuZCAyPiYxIjsKLX0KLQotc3ViIGNyZWF0ZVBhdGNoQ29tbWFuZCgkKQotewotICAgIG15
ICgkY2hhbmdlZEZpbGVzU3RyaW5nKSA9IEBfOwotCi0gICAgbXkgJGNvbW1hbmQ7Ci0gICAgaWYg
KCRpc1NWTikgewotICAgICAgICAkY29tbWFuZCA9ICInJEZpbmRCaW46OkJpbi9zdm4tY3JlYXRl
LXBhdGNoJyAkY2hhbmdlZEZpbGVzU3RyaW5nIjsKLSAgICB9IGVsc2lmICgkaXNHaXQpIHsKLSAg
ICAgICAgJGNvbW1hbmQgPSAiJEdJVCBkaWZmIC1NIC1DICIgLiBkaWZmRnJvbVRvU3RyaW5nKCk7
Ci0gICAgICAgICRjb21tYW5kIC49ICIgLS0gJGNoYW5nZWRGaWxlc1N0cmluZyIgdW5sZXNzICRn
aXRDb21taXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuICRjb21tYW5kOwotfQotCi1zdWIgZGlmZkhl
YWRlckZvcm1hdCgpCi17Ci0gICAgcmV0dXJuIHFyL15JbmRleDogKFxTKylbXHJcbl0qJC8gaWYg
JGlzU1ZOOwotICAgIHJldHVybiBxci9eZGlmZiAtLWdpdCBhXC8uKyBiXC8oLispJC8gaWYgJGlz
R2l0OwotfQotCi1zdWIgZmluZE9yaWdpbmFsRmlsZUZyb21Tdm4oJCkKLXsKLSAgICBteSAoJGZp
bGUpID0gQF87Ci0gICAgbXkgJGJhc2VVcmw7Ci0gICAgb3BlbiBJTkZPLCAiJFNWTiBpbmZvIC4g
fCIgb3IgZGllOwotICAgIHdoaWxlICg8SU5GTz4pIHsKLSAgICAgICAgaWYgKC9eVVJMOiAoLis/
KVtcclxuXSokLykgewotICAgICAgICAgICAgJGJhc2VVcmwgPSAkMTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBjbG9zZSBJTkZPOwotICAgIG15ICRzb3VyY2VGaWxlOwotICAgIG9wZW4gSU5GTywg
IiRTVk4gaW5mbyAnJGZpbGUnIHwiIG9yIGRpZTsKLSAgICB3aGlsZSAoPElORk8+KSB7Ci0gICAg
ICAgIGlmICgvXkNvcGllZCBGcm9tIFVSTDogKC4rPylbXHJcbl0qJC8pIHsKLSAgICAgICAgICAg
ICRzb3VyY2VGaWxlID0gRmlsZTo6U3BlYy0+YWJzMnJlbCgkMSwgJGJhc2VVcmwpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNsb3NlIElORk87Ci0gICAgcmV0dXJuICRzb3VyY2VGaWxlOwotfQot
Ci1zdWIgZGV0ZXJtaW5lUHJvcGVydHlDaGFuZ2VzKCQkJCkKLXsKLSAgICBteSAoJGZpbGUsICRp
c0FkZCwgJG9yaWdpbmFsKSA9IEBfOwotCi0gICAgbXkgJWNoYW5nZXM7Ci0gICAgaWYgKCRpc0Fk
ZCkgewotICAgICAgICBteSAlYWRkZWRQcm9wZXJ0aWVzOwotICAgICAgICBteSAlcmVtb3ZlZFBy
b3BlcnRpZXM7Ci0gICAgICAgIG9wZW4gUFJPUExJU1QsICIkU1ZOIHByb3BsaXN0ICckZmlsZScg
fCIgb3IgZGllOwotICAgICAgICB3aGlsZSAoPFBST1BMSVNUPikgewotICAgICAgICAgICAgJGFk
ZGVkUHJvcGVydGllc3skMX0gPSAxIGlmIC9eICAoLis/KVtcclxuXSokLyAmJiAkMSBuZSAnc3Zu
Om1lcmdlaW5mbyc7Ci0gICAgICAgIH0KLSAgICAgICAgY2xvc2UgUFJPUExJU1Q7Ci0gICAgICAg
IGlmICgkb3JpZ2luYWwpIHsKLSAgICAgICAgICAgIG9wZW4gUFJPUExJU1QsICIkU1ZOIHByb3Bs
aXN0ICckb3JpZ2luYWwnIHwiIG9yIGRpZTsKLSAgICAgICAgICAgIHdoaWxlICg8UFJPUExJU1Q+
KSB7Ci0gICAgICAgICAgICAgICAgbmV4dCB1bmxlc3MgL14gICguKz8pW1xyXG5dKiQvOwotICAg
ICAgICAgICAgICAgIG15ICRwcm9wZXJ0eSA9ICQxOwotICAgICAgICAgICAgICAgIGlmIChleGlz
dHMgJGFkZGVkUHJvcGVydGllc3skcHJvcGVydHl9KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSAkYWRkZWRQcm9wZXJ0aWVzeyQxfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAkcmVtb3ZlZFByb3BlcnRpZXN7JDF9ID0gMTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgJGNoYW5nZXN7IkEifSA9
IFtzb3J0IGtleXMgJWFkZGVkUHJvcGVydGllc10gaWYgJWFkZGVkUHJvcGVydGllczsKLSAgICAg
ICAgJGNoYW5nZXN7IkQifSA9IFtzb3J0IGtleXMgJXJlbW92ZWRQcm9wZXJ0aWVzXSBpZiAlcmVt
b3ZlZFByb3BlcnRpZXM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgb3BlbiBESUZGLCAiJFNWTiBk
aWZmICckZmlsZScgfCIgb3IgZGllOwotICAgICAgICB3aGlsZSAoPERJRkY+KSB7Ci0gICAgICAg
ICAgICBpZiAoL15Qcm9wZXJ0eSBjaGFuZ2VzIG9uOi8pIHsKLSAgICAgICAgICAgICAgICB3aGls
ZSAoPERJRkY+KSB7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRvcGVyYXRpb247Ci0gICAgICAg
ICAgICAgICAgICAgIG15ICRwcm9wZXJ0eTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKC9eQWRk
ZWQ6IChcUyopLykgewotICAgICAgICAgICAgICAgICAgICAgICAgJG9wZXJhdGlvbiA9ICJBIjsK
LSAgICAgICAgICAgICAgICAgICAgICAgICRwcm9wZXJ0eSA9ICQxOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2lmICgvXk1vZGlmaWVkOiAoXFMqKS8pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICRvcGVyYXRpb24gPSAiTSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkcHJvcGVydHkg
PSAkMTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoL15EZWxldGVkOiAoXFMqKS8pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICRvcGVyYXRpb24gPSAiRCI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAkcHJvcGVydHkgPSAkMTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNpZiAo
L15OYW1lOiAoXFMqKS8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICMgT2xkZXIgdmVyc2lv
bnMgb2Ygc3ZuIGp1c3Qgc2F5ICJOYW1lIiBpbnN0ZWFkIG9mIHRoZSB0eXBlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAjIG9mIHByb3BlcnR5IGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICRvcGVyYXRpb24gPSAiQyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkcHJvcGVydHkg
PSAkMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoJG9w
ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgJGNoYW5nZXN7JG9wZXJhdGlvbn0g
PSBbXSB1bmxlc3MgZXhpc3RzICRjaGFuZ2VzeyRvcGVyYXRpb259OwotICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaCBAeyRjaGFuZ2VzeyRvcGVyYXRpb259fSwgJHByb3BlcnR5OwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGNsb3NlIERJRkY7Ci0gICAgfQotICAgIHJldHVybiBcJWNoYW5nZXM7Ci19
Ci0KLXN1YiBwbHVyYWxpemVBbmRMaXN0KCQkQCkKLXsKLSAgICBteSAoJHNpbmd1bGFyLCAkcGx1
cmFsLCBAaXRlbXMpID0gQF87Ci0KLSAgICByZXR1cm4gaWYgQGl0ZW1zID09IDA7Ci0gICAgcmV0
dXJuICIkc2luZ3VsYXIgJGl0ZW1zWzBdIiBpZiBAaXRlbXMgPT0gMTsKLSAgICByZXR1cm4gIiRw
bHVyYWwgIiAuIGpvaW4oIiwgIiwgQGl0ZW1zWzAgLi4gJCNpdGVtcyAtIDFdKSAuICIgYW5kICIg
LiAkaXRlbXNbLTFdOwotfQotCi1zdWIgZ2VuZXJhdGVGaWxlTGlzdChcQFxAXCUpCi17Ci0gICAg
bXkgKCRjaGFuZ2VkRmlsZXMsICRjb25mbGljdEZpbGVzLCAkZnVuY3Rpb25MaXN0cykgPSBAXzsK
LSAgICBwcmludCBTVERFUlIgIiAgUnVubmluZyBzdGF0dXMgdG8gZmluZCBjaGFuZ2VkLCBhZGRl
ZCwgb3IgcmVtb3ZlZCBmaWxlcy5cbiI7Ci0gICAgb3BlbiBTVEFULCAiLXwiLCBzdGF0dXNDb21t
YW5kKGtleXMgJXBhdGhzKSBvciBkaWUgIlRoZSBzdGF0dXMgZmFpbGVkOiAkIS5cbiI7Ci0gICAg
d2hpbGUgKDxTVEFUPikgewotICAgICAgICBteSAkc3RhdHVzOwotICAgICAgICBteSAkcHJvcGVy
dHlTdGF0dXM7Ci0gICAgICAgIG15ICRwcm9wZXJ0eUNoYW5nZXM7Ci0gICAgICAgIG15ICRvcmln
aW5hbDsKLSAgICAgICAgbXkgJGZpbGU7Ci0KLSAgICAgICAgaWYgKCRpc1NWTikgewotICAgICAg
ICAgICAgbXkgJG1hdGNoZXM7Ci0gICAgICAgICAgICBpZiAoaXNTVk5WZXJzaW9uMTZPck5ld2Vy
KCkpIHsKLSAgICAgICAgICAgICAgICAkbWF0Y2hlcyA9IC9eKFsgQUNETVJdKShbIENNXSkuezV9
ICguKz8pW1xyXG5dKiQvOwotICAgICAgICAgICAgICAgICRzdGF0dXMgPSAkMTsKLSAgICAgICAg
ICAgICAgICAkcHJvcGVydHlTdGF0dXMgPSAkMjsKLSAgICAgICAgICAgICAgICAkZmlsZSA9ICQz
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAkbWF0Y2hlcyA9IC9eKFsg
QUNETVJdKShbIENNXSkuezR9ICguKz8pW1xyXG5dKiQvOwotICAgICAgICAgICAgICAgICRzdGF0
dXMgPSAkMTsKLSAgICAgICAgICAgICAgICAkcHJvcGVydHlTdGF0dXMgPSAkMjsKLSAgICAgICAg
ICAgICAgICAkZmlsZSA9ICQzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCRtYXRj
aGVzKSB7Ci0gICAgICAgICAgICAgICAgJGZpbGUgPSBub3JtYWxpemVQYXRoKCRmaWxlKTsKLSAg
ICAgICAgICAgICAgICAkb3JpZ2luYWwgPSBmaW5kT3JpZ2luYWxGaWxlRnJvbVN2bigkZmlsZSkg
aWYgc3Vic3RyKCRfLCAzLCAxKSBlcSAiKyI7Ci0gICAgICAgICAgICAgICAgbXkgJGlzQWRkID0g
aXNBZGRlZFN0YXR1cygkc3RhdHVzKTsKLSAgICAgICAgICAgICAgICAkcHJvcGVydHlDaGFuZ2Vz
ID0gZGV0ZXJtaW5lUHJvcGVydHlDaGFuZ2VzKCRmaWxlLCAkaXNBZGQsICRvcmlnaW5hbCkgaWYg
aXNNb2RpZmllZFN0YXR1cygkcHJvcGVydHlTdGF0dXMpIHx8ICRpc0FkZDsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnQ7ICAjIGVycm9yIG91dHB1dCBmcm9tIHN2
biBzdGF0Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzaWYgKCRpc0dpdCkgewotICAgICAg
ICAgICAgaWYgKC9eKFtBRE1dKVx0KC4rKSQvKSB7Ci0gICAgICAgICAgICAgICAgJHN0YXR1cyA9
ICQxOwotICAgICAgICAgICAgICAgICRwcm9wZXJ0eVN0YXR1cyA9ICIgIjsgICMgZ2l0IGRvZXNu
J3QgaGF2ZSBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgJGZpbGUgPSBub3JtYWxpemVQYXRo
KCQyKTsKLSAgICAgICAgICAgIH0gZWxzaWYgKC9eKFtDUl0pWzAtOV17MSwzfVx0KFteXHRdKylc
dChbXlx0XG5dKykkLykgeyAjIGZvciBleGFtcGxlOiBSOTAlICAgIG5ld2ZpbGUgICAgb2xkZmls
ZQotICAgICAgICAgICAgICAgICRzdGF0dXMgPSAkMTsKLSAgICAgICAgICAgICAgICAkcHJvcGVy
dHlTdGF0dXMgPSAiICI7Ci0gICAgICAgICAgICAgICAgJG9yaWdpbmFsID0gbm9ybWFsaXplUGF0
aCgkMik7Ci0gICAgICAgICAgICAgICAgJGZpbGUgPSBub3JtYWxpemVQYXRoKCQzKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnQ7ICAjIGVycm9yIG91dHB1dCBm
cm9tIGdpdCBkaWZmCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBuZXh0IGlm
ICEkc3RhdHVzIHx8IGlzVW5tb2RpZmllZFN0YXR1cygkc3RhdHVzKSAmJiBpc1VubW9kaWZpZWRT
dGF0dXMoJHByb3BlcnR5U3RhdHVzKTsKLQotICAgICAgICAkZmlsZSA9IG1ha2VGaWxlUGF0aFJl
bGF0aXZlKCRmaWxlKTsKLQotICAgICAgICBpZiAoaXNNb2RpZmllZFN0YXR1cygkc3RhdHVzKSB8
fCBpc0FkZGVkU3RhdHVzKCRzdGF0dXMpIHx8IGlzTW9kaWZpZWRTdGF0dXMoJHByb3BlcnR5U3Rh
dHVzKSkgewotICAgICAgICAgICAgbXkgQGNvbXBvbmVudHMgPSBGaWxlOjpTcGVjLT5zcGxpdGRp
cigkZmlsZSk7Ci0gICAgICAgICAgICBpZiAoJGNvbXBvbmVudHNbMF0gZXEgIkxheW91dFRlc3Rz
IikgewotICAgICAgICAgICAgICAgICRkaWRDaGFuZ2VSZWdyZXNzaW9uVGVzdHMgPSAxOwotICAg
ICAgICAgICAgICAgIHB1c2ggQGFkZGVkUmVncmVzc2lvblRlc3RzLCAkZmlsZQotICAgICAgICAg
ICAgICAgICAgICBpZiBpc0FkZGVkU3RhdHVzKCRzdGF0dXMpCi0gICAgICAgICAgICAgICAgICAg
ICAgICYmICRmaWxlID1+IC9cLihbYS16QS1aXSspJC8KLSAgICAgICAgICAgICAgICAgICAgICAg
JiYgJHN1cHBvcnRlZFRlc3RFeHRlbnNpb25ze2xjKCQxKX0KLSAgICAgICAgICAgICAgICAgICAg
ICAgJiYgIXNjYWxhcihncmVwKC9ecmVzb3VyY2VzJC9pLCBAY29tcG9uZW50cykpCi0gICAgICAg
ICAgICAgICAgICAgICAgICYmICFzY2FsYXIoZ3JlcCgvXnNjcmlwdC10ZXN0cyQvaSwgQGNvbXBv
bmVudHMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB1c2ggQHskY2hhbmdlZEZpbGVz
fSwgJGZpbGUgaWYgJGNvbXBvbmVudHNbJCNjb21wb25lbnRzXSBuZSAiQ2hhbmdlTG9nIjsKLSAg
ICAgICAgfSBlbHNpZiAoaXNDb25mbGljdFN0YXR1cygkc3RhdHVzKSB8fCBpc0NvbmZsaWN0U3Rh
dHVzKCRwcm9wZXJ0eVN0YXR1cykpIHsKLSAgICAgICAgICAgIHB1c2ggQHskY29uZmxpY3RGaWxl
c30sICRmaWxlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiYXNlbmFtZSgkZmlsZSkgbmUgIkNo
YW5nZUxvZyIpIHsKLSAgICAgICAgICAgIG15ICRkZXNjcmlwdGlvbiA9IHN0YXR1c0Rlc2NyaXB0
aW9uKCRzdGF0dXMsICRwcm9wZXJ0eVN0YXR1cywgJG9yaWdpbmFsLCAkcHJvcGVydHlDaGFuZ2Vz
KTsKLSAgICAgICAgICAgICRmdW5jdGlvbkxpc3RzLT57JGZpbGV9ID0gJGRlc2NyaXB0aW9uIGlm
IGRlZmluZWQgJGRlc2NyaXB0aW9uOwotICAgICAgICB9Ci0gICAgfQotICAgIGNsb3NlIFNUQVQ7
Ci19Ci0KLXN1YiBpc1VubW9kaWZpZWRTdGF0dXMoJCkKLXsKLSAgICBteSAoJHN0YXR1cykgPSBA
XzsKLQotICAgIG15ICVzdGF0dXNDb2RlcyA9ICgKLSAgICAgICAgIiAiID0+IDEsCi0gICAgKTsK
LQotICAgIHJldHVybiAkc3RhdHVzQ29kZXN7JHN0YXR1c307Ci19Ci0KLXN1YiBpc01vZGlmaWVk
U3RhdHVzKCQpCi17Ci0gICAgbXkgKCRzdGF0dXMpID0gQF87Ci0KLSAgICBteSAlc3RhdHVzQ29k
ZXMgPSAoCi0gICAgICAgICJNIiA9PiAxLAotICAgICk7Ci0KLSAgICByZXR1cm4gJHN0YXR1c0Nv
ZGVzeyRzdGF0dXN9OwotfQotCi1zdWIgaXNBZGRlZFN0YXR1cygkKQotewotICAgIG15ICgkc3Rh
dHVzKSA9IEBfOwotCi0gICAgbXkgJXN0YXR1c0NvZGVzID0gKAotICAgICAgICAiQSIgPT4gMSwK
LSAgICAgICAgIkMiID0+ICRpc0dpdCwKLSAgICAgICAgIlIiID0+IDEsCi0gICAgKTsKLQotICAg
IHJldHVybiAkc3RhdHVzQ29kZXN7JHN0YXR1c307Ci19Ci0KLXN1YiBpc0NvbmZsaWN0U3RhdHVz
KCQpCi17Ci0gICAgbXkgKCRzdGF0dXMpID0gQF87Ci0KLSAgICBteSAlc3ZuID0gKAotICAgICAg
ICAiQyIgPT4gMSwKLSAgICApOwotCi0gICAgbXkgJWdpdCA9ICgKLSAgICAgICAgIlUiID0+IDEs
Ci0gICAgKTsKLQotICAgIHJldHVybiAwIGlmICgkZ2l0Q29tbWl0IHx8ICRnaXRJbmRleCk7ICMg
YW4gZXhpc3RpbmcgY29tbWl0IG9yIHN0YWdlZCBjaGFuZ2UgY2Fubm90IGhhdmUgY29uZmxpY3Rz
Ci0gICAgcmV0dXJuICRzdm57JHN0YXR1c30gaWYgJGlzU1ZOOwotICAgIHJldHVybiAkZ2l0eyRz
dGF0dXN9IGlmICRpc0dpdDsKLX0KLQotc3ViIHN0YXR1c0Rlc2NyaXB0aW9uKCQkJCQpCi17Ci0g
ICAgbXkgKCRzdGF0dXMsICRwcm9wZXJ0eVN0YXR1cywgJG9yaWdpbmFsLCAkcHJvcGVydHlDaGFu
Z2VzKSA9IEBfOwotCi0gICAgbXkgJHByb3BlcnR5RGVzY3JpcHRpb24gPSBkZWZpbmVkICRwcm9w
ZXJ0eUNoYW5nZXMgPyBwcm9wZXJ0eUNoYW5nZURlc2NyaXB0aW9uKCRwcm9wZXJ0eUNoYW5nZXMp
IDogIiI7Ci0KLSAgICBteSAlc3ZuID0gKAotICAgICAgICAiQSIgPT4gZGVmaW5lZCAkb3JpZ2lu
YWwgPyAiIENvcGllZCBmcm9tIFwlcy4iIDogIiBBZGRlZC4iLAotICAgICAgICAiRCIgPT4gIiBS
ZW1vdmVkLiIsCi0gICAgICAgICJNIiA9PiAiIiwKLSAgICAgICAgIlIiID0+IGRlZmluZWQgJG9y
aWdpbmFsID8gIiBSZXBsYWNlZCB3aXRoIFwlcy4iIDogIiBSZXBsYWNlZC4iLAotICAgICAgICAi
ICIgPT4gIiIsCi0gICAgKTsKLQotICAgIG15ICVnaXQgPSAlc3ZuOwotICAgICRnaXR7IkEifSA9
ICIgQWRkZWQuIjsKLSAgICAkZ2l0eyJDIn0gPSAiIENvcGllZCBmcm9tIFwlcy4iOwotICAgICRn
aXR7IlIifSA9ICIgUmVuYW1lZCBmcm9tIFwlcy4iOwotCi0gICAgbXkgJGRlc2NyaXB0aW9uOwot
ICAgICRkZXNjcmlwdGlvbiA9IHNwcmludGYoJHN2bnskc3RhdHVzfSwgJG9yaWdpbmFsKSBpZiAk
aXNTVk4gJiYgZXhpc3RzICRzdm57JHN0YXR1c307Ci0gICAgJGRlc2NyaXB0aW9uID0gc3ByaW50
ZigkZ2l0eyRzdGF0dXN9LCAkb3JpZ2luYWwpIGlmICRpc0dpdCAmJiBleGlzdHMgJGdpdHskc3Rh
dHVzfTsKLSAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQgJGRlc2NyaXB0aW9uOwotCi0gICAgJGRl
c2NyaXB0aW9uIC49ICRwcm9wZXJ0eURlc2NyaXB0aW9uIHVubGVzcyBpc0FkZGVkU3RhdHVzKCRz
dGF0dXMpOwotICAgIHJldHVybiAkZGVzY3JpcHRpb247Ci19Ci0KLXN1YiBwcm9wZXJ0eUNoYW5n
ZURlc2NyaXB0aW9uKCQpCi17Ci0gICAgbXkgKCRwcm9wZXJ0eUNoYW5nZXMpID0gQF87Ci0KLSAg
ICBteSAlb3BlcmF0aW9ucyA9ICgKLSAgICAgICAgIkEiID0+ICJBZGRlZCIsCi0gICAgICAgICJN
IiA9PiAiTW9kaWZpZWQiLAotICAgICAgICAiRCIgPT4gIlJlbW92ZWQiLAotICAgICAgICAiQyIg
PT4gIkNoYW5nZWQiLAotICAgICk7Ci0KLSAgICBteSAkZGVzY3JpcHRpb24gPSAiIjsKLSAgICB3
aGlsZSAobXkgKCRvcGVyYXRpb24sICRwcm9wZXJ0aWVzKSA9IGVhY2ggJSRwcm9wZXJ0eUNoYW5n
ZXMpIHsKLSAgICAgICAgbXkgJHdvcmQgPSAkb3BlcmF0aW9uc3skb3BlcmF0aW9ufTsKLSAgICAg
ICAgbXkgJGxpc3QgPSBwbHVyYWxpemVBbmRMaXN0KCJwcm9wZXJ0eSIsICJwcm9wZXJ0aWVzIiwg
QCRwcm9wZXJ0aWVzKTsKLSAgICAgICAgJGRlc2NyaXB0aW9uIC49ICIgJHdvcmQgJGxpc3QuIjsK
LSAgICB9Ci0gICAgcmV0dXJuICRkZXNjcmlwdGlvbjsKLX0KLQotc3ViIGV4dHJhY3RMaW5lUmFu
Z2UoJCkKLXsKLSAgICBteSAoJHN0cmluZykgPSBAXzsKLQotICAgIG15ICgkc3RhcnQsICRlbmQp
ID0gKC0xLCAtMSk7Ci0KLSAgICBpZiAoJGlzU1ZOICYmICRzdHJpbmcgPX4gL15cZCsoLFxkKyk/
W2FjZF0oXGQrKSgsKFxkKykpPy8pIHsKLSAgICAgICAgJHN0YXJ0ID0gJDI7Ci0gICAgICAgICRl
bmQgPSAkNCB8fCAkMjsKLSAgICB9IGVsc2lmICgkaXNHaXQgJiYgJHN0cmluZyA9fiAvXkBAIC1c
ZCsoLFxkKyk/IFwrKFxkKykoLChcZCspKT8gQEAvKSB7Ci0gICAgICAgICRzdGFydCA9ICQyOwot
ICAgICAgICAkZW5kID0gZGVmaW5lZCgkNCkgPyAkNCArICQyIC0gMSA6ICQyOwotICAgIH0KLQot
ICAgIHJldHVybiAoJHN0YXJ0LCAkZW5kKTsKLX0KLQotc3ViIGZpcnN0RGlyZWN0b3J5T3JDd2Qo
KQotewotICAgIG15ICRkaXIgPSAiLiI7Ci0gICAgbXkgQGRpcnMgPSBrZXlzKCVwYXRocyk7Ci0K
LSAgICAkZGlyID0gLWQgJGRpcnNbMF0gPyAkZGlyc1swXSA6IGRpcm5hbWUoJGRpcnNbMF0pIGlm
IEBkaXJzOwotCi0gICAgcmV0dXJuICRkaXI7Ci19Ci0KLXN1YiB0ZXN0TGlzdEZvckNoYW5nZUxv
ZyhAKQotewotICAgIG15IChAdGVzdHMpID0gQF87Ci0KLSAgICByZXR1cm4gIiIgdW5sZXNzIEB0
ZXN0czsKLQotICAgIG15ICRsZWFkU3RyaW5nID0gIiAgICAgICAgVGVzdCIgLiAoQHRlc3RzID09
IDEgPyAiIiA6ICJzIikgLiAiOiAiOwotICAgIG15ICRsaXN0ID0gJGxlYWRTdHJpbmc7Ci0gICAg
Zm9yZWFjaCBteSAkaSAoMC4uJCN0ZXN0cykgewotICAgICAgICAkbGlzdCAuPSAiICIgeCBsZW5n
dGgoJGxlYWRTdHJpbmcpIGlmICRpOwotICAgICAgICBteSAkdGVzdCA9ICR0ZXN0c1skaV07Ci0g
ICAgICAgICR0ZXN0ID1+IHMvXkxheW91dFRlc3RzXC8vLzsKLSAgICAgICAgJGxpc3QgLj0gIiR0
ZXN0XG4iOwotICAgIH0KLSAgICAkbGlzdCAuPSAiXG4iOwotCi0gICAgcmV0dXJuICRsaXN0Owot
fQotCi1zdWIgcmV2aWV3ZXJBbmREZXNjcmlwdGlvbkZvckdpdENvbW1pdCgkKQotewotICAgIG15
ICgkY29tbWl0KSA9IEBfOwotCi0gICAgbXkgJGRlc2NyaXB0aW9uID0gJyc7Ci0gICAgbXkgJHJl
dmlld2VyOwotCi0gICAgbXkgQGFyZ3MgPSBxdyhyZXYtbGlzdCAtLXByZXR0eSk7Ci0gICAgcHVz
aCBAYXJncywgJy0xJyBpZiAkY29tbWl0ICF+IG0vLitcLlwuLisvOwotICAgIG15ICRnaXRMb2c7
Ci0gICAgewotICAgICAgICBsb2NhbCAkLyA9IHVuZGVmOwotICAgICAgICBvcGVuKEdJVCwgIi18
IiwgJEdJVCwgQGFyZ3MsICRjb21taXQpIHx8IGRpZTsKLSAgICAgICAgJGdpdExvZyA9IDxHSVQ+
OwotICAgICAgICBjbG9zZShHSVQpOwotICAgIH0KLQotICAgIG15IEBjb21taXRMb2dzID0gc3Bs
aXQoL15bQ2Ndb21taXQgW2EtZjAtOV17NDB9L20sICRnaXRMb2cpOwotICAgIHNoaWZ0IEBjb21t
aXRMb2dzOyAjIFJlbW92ZSBpbml0aWFsIGJsYW5rIGNvbW1pdCBsb2cKLSAgICBteSAkY29tbWl0
TG9nQ291bnQgPSAwOwotICAgIGZvcmVhY2ggbXkgJGNvbW1pdExvZyAoQGNvbW1pdExvZ3MpIHsK
LSAgICAgICAgJGRlc2NyaXB0aW9uIC49ICJcbiIgaWYgJGNvbW1pdExvZ0NvdW50OwotICAgICAg
ICAkY29tbWl0TG9nQ291bnQrKzsKLSAgICAgICAgbXkgJGluSGVhZGVyID0gMTsKLSAgICAgICAg
bXkgJGNvbW1pdExvZ0luZGVudDsgCi0gICAgICAgIG15IEBsaW5lcyA9IHNwbGl0KC9cbi8sICRj
b21taXRMb2cpOwotICAgICAgICBzaGlmdCBAbGluZXM7ICMgUmVtb3ZlIGluaXRpYWwgYmxhbmsg
bGluZQotICAgICAgICBmb3JlYWNoIG15ICRsaW5lIChAbGluZXMpIHsKLSAgICAgICAgICAgIGlm
ICgkaW5IZWFkZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoISRsaW5lKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICRpbkhlYWRlciA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIG5leHQ7Ci0gICAgICAgICAgICB9IGVsc2lmICgkbGluZSA9fiAvW1NzXWlnbmVkLVtPb11m
Zi1bQmJdeTogKC4rKS8pIHsKLSAgICAgICAgICAgICAgICBpZiAoISRyZXZpZXdlcikgewotICAg
ICAgICAgICAgICAgICAgICAkcmV2aWV3ZXIgPSAkMTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAkcmV2aWV3ZXIgLj0gIiwgIiAuICQxOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzaWYgKCRsaW5lID1+IC9eXHMqJC8pIHsKLSAgICAg
ICAgICAgICAgICAkZGVzY3JpcHRpb24gPSAkZGVzY3JpcHRpb24gLiAiXG4iOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIWRlZmluZWQoJGNvbW1pdExvZ0luZGVu
dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgIyBMZXQgdGhlIGZpcnN0IGxpbmUgd2l0aCBub24t
d2hpdGUgc3BhY2UgZGV0ZXJtaW5lCi0gICAgICAgICAgICAgICAgICAgICMgdGhlIGdsb2JhbCBp
bmRlbnQuCi0gICAgICAgICAgICAgICAgICAgICRsaW5lID1+IC9eKFxzKilcUy87Ci0gICAgICAg
ICAgICAgICAgICAgICRjb21taXRMb2dJbmRlbnQgPSBsZW5ndGgoJDEpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAjIFN0cmlwIGF0IG1vc3QgdGhlIGluZGVudCB0byBwcmVz
ZXJ2ZSByZWxhdGl2ZSBpbmRlbnRzLgotICAgICAgICAgICAgICAgICRsaW5lID1+IHMvXlxzezAs
JGNvbW1pdExvZ0luZGVudH0vLzsKLSAgICAgICAgICAgICAgICAkZGVzY3JpcHRpb24gPSAkZGVz
Y3JpcHRpb24gLiAoIiAiIHggOCkgLiAkbGluZSAuICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgaWYgKCEkcmV2aWV3ZXIpIHsKLSAgICAgICRyZXZpZXdlciA9ICRn
aXRSZXZpZXdlcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gKCRyZXZpZXdlciwgJGRlc2NyaXB0aW9u
KTsKLX0KLQotc3ViIG5vcm1hbGl6ZUxpbmVFbmRpbmdzKCQkKQotewotICAgIG15ICgkc3RyaW5n
LCAkZW5kbCkgPSBAXzsKLSAgICAkc3RyaW5nID1+IHMvXHI/XG4vJGVuZGwvZzsKLSAgICByZXR1
cm4gJHN0cmluZzsKLX0KLQotc3ViIGRlY29kZUVudGl0aWVzKCQpCi17Ci0gICAgbXkgKCR0ZXh0
KSA9IEBfOwotICAgICR0ZXh0ID1+IHMvXCZsdDsvPC9nOwotICAgICR0ZXh0ID1+IHMvXCZndDsv
Pi9nOwotICAgICR0ZXh0ID1+IHMvXCZxdW90Oy9cIi9nOwotICAgICR0ZXh0ID1+IHMvXCZhcG9z
Oy9cJy9nOwotICAgICR0ZXh0ID1+IHMvXCZhbXA7L1wmL2c7Ci0gICAgcmV0dXJuICR0ZXh0Owot
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9DaGFuZ2VMb2cucG0gYi9Ub29scy9TY3JpcHRz
L0NoYW5nZUxvZy5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDQxMDlkMDQ3YjQ0MGQ5OWYyZjQ5M2VjZjVkYzhl
MjAwYTUzYTVmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9DaGFuZ2VMb2cucG0K
QEAgLTAsMCArMSwxODQ4IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMgLSotIE1vZGU6IHBlcmw7
IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgIC0qLQorCisjCisjICBD
b3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgRWF6ZWwsIEluYy4KKyMgIENvcHlyaWdodCAoQykgMjAw
MiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorIyAgQ29w
eXJpZ2h0IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1PgorIworIyAg
cHJlcGFyZS1DaGFuZ2VMb2cgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisjICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMKKyMgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorIyAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgcHJlcGFyZS1DaGFuZ2VMb2cgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorIyAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorIworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljCisjICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlCisjICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBB
dmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyMKKworCisjIFBlcmwgc2NyaXB0IHRvIGNy
ZWF0ZSBhIENoYW5nZUxvZyBlbnRyeSB3aXRoIG5hbWVzIG9mIGZpbGVzCisjIGFuZCBmdW5jdGlv
bnMgZnJvbSBhIGRpZmYuCisjCisjIERhcmluIEFkbGVyIDxkYXJpbkBiZW50c3Bvb24uY29tPiwg
c3RhcnRlZCAyMCBBcHJpbCAyMDAwCisjIEphdmEgc3VwcG9ydCBhZGRlZCBieSBNYWNpZWogU3Rh
Y2hvd2lhayA8bWpzQGVhemVsLmNvbT4KKyMgT2JqZWN0aXZlLUMsIEMrKyBhbmQgT2JqZWN0aXZl
LUMrKyBzdXBwb3J0IGFkZGVkIGJ5IE1hY2llaiBTdGFjaG93aWFrIDxtanNAYXBwbGUuY29tPgor
IyBHaXQgc3VwcG9ydCBhZGRlZCBieSBBZGFtIFJvYmVuIDxhcm9iZW5AYXBwbGUuY29tPgorIyAt
LWdpdC1pbmRleCBmbGFnIGFkZGVkIGJ5IEpvZSBNYXNvbiA8am9lLm1hc29uQHRvcmNobW9iaWxl
LmNvbT4KKworCisjCisjIFRPRE86CisjICAgTGlzdCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4g
cmVtb3ZlZCB0b28uCisjICAgRGVjaWRlIHdoYXQgYSBnb29kIGxvZ2ljYWwgb3JkZXIgaXMgZm9y
IHRoZSBjaGFuZ2VkIGZpbGVzCisjICAgICBvdGhlciB0aGFuIGEgbm9ybWFsIHRleHQgInNvcnQi
ICh0b3AgbGV2ZWwgZmlyc3Q/KQorIyAgICAgKGdyb3VwIGRpcmVjdG9yaWVzPykgKC5oIGJlZm9y
ZSAuYz8pCisjICAgSGFuZGxlIHlhY2Mgc291cmNlIGZpbGVzIHRvbyAob3RoZXIgbGFuZ3VhZ2Vz
PykuCisjICAgSGVscCBtZXJnZSB3aGVuIHRoZXJlIGFyZSBDaGFuZ2VMb2cgY29uZmxpY3RzIG9y
IGlmIHRoZXJlJ3MKKyMgICAgIGFscmVhZHkgYSBwYXJ0bHkgd3JpdHRlbiBDaGFuZ2VMb2cgZW50
cnkuCisjICAgQWRkIGNvbW1hbmQgbGluZSBvcHRpb24gdG8gcHV0IHRoZSBDaGFuZ2VMb2cgaW50
byBhIHNlcGFyYXRlIGZpbGUuCisjICAgQWRkIFNWTiB2ZXJzaW9uIG51bWJlcnMgZm9yIGNvbW1p
dCAoY2FuJ3QgZG8gdGhhdCB1bnRpbAorIyAgICAgdGhlIGNoYW5nZXMgYXJlIGNoZWNrZWQgaW4s
IHRob3VnaCkuCisjICAgV29yayBhcm91bmQgZGlmZiBzdHVwaWRpdHkgd2hlcmUgZGVsZXRpbmcg
YSBmdW5jdGlvbiB0aGF0IHN0YXJ0cworIyAgICAgd2l0aCBhIGNvbW1lbnQgbWFrZXMgZGlmZiB0
aGluayB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24KKyMgICAgIGhhcyBiZWVuIGNoYW5nZWQg
KGlmIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc3RhcnRzIHdpdGggYSBjb21tZW50CisjICAgICB3
aXRoIHRoZSBzYW1lIGZpcnN0IGxpbmUsIHN1Y2ggYXMgLyoqKQorIyAgIFdvcmsgYXJvdW5kIGRp
ZmYgc3R1cGlkaXR5IHdoZXJlIGRlbGV0aW5nIGFuIGVudGlyZSBmdW5jdGlvbiBhbmQKKyMgICAg
IHRoZSBibGFuayBsaW5lcyBiZWZvcmUgaXQgbWFrZXMgZGlmZiB0aGluayB5b3UndmUgY2hhbmdl
ZCB0aGUKKyMgICAgIHByZXZpb3VzIGZ1bmN0aW9uLgorCitwYWNrYWdlIENoYW5nZUxvZzsKKwor
dXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEZp
bGU6OlNwZWM7Cit1c2UgRmluZEJpbjsKK3VzZSBsaWIgJEZpbmRCaW46OkJpbjsKK3VzZSBQT1NJ
WCBxdyhzdHJmdGltZSk7Cit1c2UgVkNTVXRpbHM7CisKK3N1YiBuZXcoJCQkJCQkJCQkJCQkJCRc
QCk7CitzdWIgSW5pdGlhbGl6ZUdsb2JhbERhdGEoKTsKK3N1YiBwcmVwYXJlQ2hhbmdlTG9nKCQp
Oworc3ViIGNoYW5nZUxvZ0RhdGUoJCk7CitzdWIgY2hhbmdlTG9nRW1haWxBZGRyZXNzRnJvbUFy
Z3MoJCk7CitzdWIgY2hhbmdlTG9nTmFtZUZyb21BcmdzKCQpOworc3ViIGZpcnN0RGlyZWN0b3J5
T3JDd2QoKTsKK3N1YiBkaWZmRnJvbVRvU3RyaW5nKCk7CitzdWIgZGlmZkNvbW1hbmQoQCk7Citz
dWIgc3RhdHVzQ29tbWFuZChAKTsKK3N1YiBjcmVhdGVQYXRjaENvbW1hbmQoJCk7CitzdWIgZGlm
ZkhlYWRlckZvcm1hdCgpOworc3ViIGZpbmRPcmlnaW5hbEZpbGVGcm9tU3ZuKCQpOworc3ViIGRl
dGVybWluZVByb3BlcnR5Q2hhbmdlcygkJCQpOworc3ViIHBsdXJhbGl6ZUFuZExpc3QoJCRAKTsK
K3N1YiBnZW5lcmF0ZUZpbGVMaXN0KFxAXEBcJSk7CitzdWIgaXNVbm1vZGlmaWVkU3RhdHVzKCQp
Oworc3ViIGlzTW9kaWZpZWRTdGF0dXMoJCk7CitzdWIgaXNBZGRlZFN0YXR1cygkKTsKK3N1YiBp
c0NvbmZsaWN0U3RhdHVzKCQpOworc3ViIHN0YXR1c0Rlc2NyaXB0aW9uKCQkJCQpOworc3ViIHBy
b3BlcnR5Q2hhbmdlRGVzY3JpcHRpb24oJCk7CitzdWIgZXh0cmFjdExpbmVSYW5nZSgkKTsKK3N1
YiB0ZXN0TGlzdEZvckNoYW5nZUxvZyhAKTsKK3N1YiBnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXMo
JCQpOworc3ViIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfYygkJCk7CitzdWIgZ2V0X2Z1
bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9qYXZhKCQkKTsKK3N1YiBnZXRfZnVuY3Rpb25fbGluZV9y
YW5nZXNfZm9yX2phdmFzY3JpcHQoJCQpOworc3ViIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19m
b3JfcGVybCgkJCk7CitzdWIgZ2V0X3NlbGVjdG9yX2xpbmVfcmFuZ2VzX2Zvcl9jc3MoJCQpOwor
c3ViIG1ldGhvZF9kZWNsX3RvX3NlbGVjdG9yKCQpOworc3ViIHByb2Nlc3NQYXRocyhcQCk7Citz
dWIgcmV2aWV3ZXJBbmREZXNjcmlwdGlvbkZvckdpdENvbW1pdCgkKTsKK3N1YiBub3JtYWxpemVM
aW5lRW5kaW5ncygkJCk7CitzdWIgZGVjb2RlRW50aXRpZXMoJCk7CisKKyMgUHJvamVjdCB0aW1l
IHpvbmUgZm9yIEN1cGVydGlubywgQ0EsIFVTCitteSAkY2hhbmdlTG9nVGltZVpvbmUgPSAiUFNU
OFBEVCI7CitteSAkU1ZOID0gInN2biI7CitteSAkR0lUID0gImdpdCI7CitteSAlc3VwcG9ydGVk
VGVzdEV4dGVuc2lvbnMgPSBtYXAgeyAkXyA9PiAxIH0gcXcoaHRtbCBzaHRtbCBzdmcgeG1sIHho
dG1sIHBsIHBocCk7CisKK215ICRidWdEZXNjcmlwdGlvbjsKK215ICRidWdOdW1iZXI7CitteSAk
bmFtZTsKK215ICRlbWFpbEFkZHJlc3M7CitteSAkbWVyZ2VCYXNlOworbXkgJGdpdENvbW1pdDsK
K215ICRnaXRJbmRleDsKK215ICRnaXRSZXZpZXdlcjsKK215ICRvcGVuQ2hhbmdlTG9nczsKK215
ICR3cml0ZUNoYW5nZUxvZ3M7CitteSAkc2hvd0hlbHA7CitteSAkc3Bld0RpZmY7CitteSAkdXBk
YXRlQ2hhbmdlTG9nczsKKworbXkgQGFyZ3Y7CitteSAlcGF0aHM7CisKK215ICRpc0dpdDsKK215
ICRpc1NWTjsKKworIyBGaW5kIHRoZSBsaXN0IG9mIG1vZGlmaWVkIGZpbGVzCitteSBAY2hhbmdl
ZF9maWxlczsKK215ICRjaGFuZ2VkX2ZpbGVzX3N0cmluZzsKK215ICVjaGFuZ2VkX2xpbmVfcmFu
Z2VzOworbXkgJWZ1bmN0aW9uX2xpc3RzOworbXkgQGNvbmZsaWN0X2ZpbGVzOworCitteSBAYWRk
ZWRSZWdyZXNzaW9uVGVzdHM7CitteSAkZGlkQ2hhbmdlUmVncmVzc2lvblRlc3RzOworCitzdWIg
bmV3KCQkJCQkJCQkJCQkJCQkXEApCit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15
ICRyZWZlcmVuY2UgPSB7fTsKKworICAgIEluaXRpYWxpemVHbG9iYWxEYXRhKCk7CisKKyAgICAk
c3Bld0RpZmYgPSBzaGlmdDsKKyAgICAkYnVnTnVtYmVyID0gc2hpZnQ7CisgICAgJGJ1Z0Rlc2Ny
aXB0aW9uID0gc2hpZnQ7CisgICAgJG5hbWUgPSBzaGlmdDsKKyAgICAkZW1haWxBZGRyZXNzID0g
c2hpZnQ7CisgICAgJG1lcmdlQmFzZSA9IHNoaWZ0OworICAgICRnaXRDb21taXQgPSBzaGlmdDsK
KyAgICAkZ2l0SW5kZXggPSBzaGlmdDsKKyAgICAkZ2l0UmV2aWV3ZXIgPSBzaGlmdDsKKyAgICAk
c2hvd0hlbHAgPSBzaGlmdDsKKyAgICAkb3BlbkNoYW5nZUxvZ3MgPSBzaGlmdDsKKyAgICAkd3Jp
dGVDaGFuZ2VMb2dzID0gc2hpZnQ7CisgICAgJHVwZGF0ZUNoYW5nZUxvZ3MgPSBzaGlmdDsKKyAg
ICBAYXJndiA9IEBfOworCisgICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7CisgICAgcmV0
dXJuICRyZWZlcmVuY2U7Cit9CisKK3N1YiBJbml0aWFsaXplR2xvYmFsRGF0YSgpCit7CisgICAg
JG1lcmdlQmFzZSA9IDA7CisgICAgJGdpdENvbW1pdCA9IDA7CisgICAgJGdpdEluZGV4ID0gIiI7
CisgICAgJGdpdFJldmlld2VyID0gIiI7CisgICAgJG9wZW5DaGFuZ2VMb2dzID0gMDsKKyAgICAk
d3JpdGVDaGFuZ2VMb2dzID0gMTsKKyAgICAkc2hvd0hlbHAgPSAwOworICAgICRzcGV3RGlmZiA9
ICRFTlZ7IlBSRVBBUkVfQ0hBTkdFTE9HX0RJRkYifTsKKyAgICAkdXBkYXRlQ2hhbmdlTG9ncyA9
IDE7CisKKyAgICAlcGF0aHMgPSBwcm9jZXNzUGF0aHMoQGFyZ3YpOworCisgICAgJGlzR2l0ID0g
aXNHaXREaXJlY3RvcnkoZmlyc3REaXJlY3RvcnlPckN3ZCgpKTsKKyAgICAkaXNTVk4gPSBpc1NW
TkRpcmVjdG9yeShmaXJzdERpcmVjdG9yeU9yQ3dkKCkpOworICAgICRpc1NWTiB8fCAkaXNHaXQg
fHwgZGllICJDb3VsZG4ndCBkZXRlcm1pbmUgeW91ciB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLiI7
CisKKyAgICBAYWRkZWRSZWdyZXNzaW9uVGVzdHMgPSAoKTsKKyAgICAkZGlkQ2hhbmdlUmVncmVz
c2lvblRlc3RzID0gMDsKK30KKworc3ViIHByZXBhcmVDaGFuZ2VMb2coJCkKK3sKKyAgICBteSAk
b2JqZWN0ID0gc2hpZnQ7CisKKyAgICBnZW5lcmF0ZUZpbGVMaXN0KEBjaGFuZ2VkX2ZpbGVzLCBA
Y29uZmxpY3RfZmlsZXMsICVmdW5jdGlvbl9saXN0cyk7CisKKyAgICBpZiAoIUBjaGFuZ2VkX2Zp
bGVzICYmICFAY29uZmxpY3RfZmlsZXMgJiYgIWtleXMgJWZ1bmN0aW9uX2xpc3RzKSB7CisgICAg
ICAgIHByaW50IFNUREVSUiAiICBObyBjaGFuZ2VzIGZvdW5kLlxuIjsKKyAgICAgICAgZXhpdCAx
OworICAgIH0KKworICAgIGlmIChAY29uZmxpY3RfZmlsZXMpIHsKKyAgICAgICAgcHJpbnQgU1RE
RVJSICIgIFRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjb25mbGljdHMuIFJ1biBwcmVwYXJlLUNo
YW5nZUxvZyBhZ2FpbiBhZnRlciBmaXhpbmcgdGhlIGNvbmZsaWN0czpcbiI7CisgICAgICAgIHBy
aW50IFNUREVSUiBqb2luKCJcbiIsIEBjb25mbGljdF9maWxlcyksICJcbiI7CisgICAgICAgIGV4
aXQgMTsKKyAgICB9CisKKyAgICBpZiAoQGNoYW5nZWRfZmlsZXMpIHsKKyAgICAgICAgJGNoYW5n
ZWRfZmlsZXNfc3RyaW5nID0gIiciIC4gam9pbiAoIicgJyIsIEBjaGFuZ2VkX2ZpbGVzKSAuICIn
IjsKKworICAgICAgICAjIEZvciBlYWNoIGZpbGUsIGJ1aWxkIGEgbGlzdCBvZiBtb2RpZmllZCBs
aW5lcy4KKyAgICAgICAgIyBVc2UgbGluZSBudW1iZXJzIGZyb20gdGhlICJhZnRlciIgc2lkZSBv
ZiBlYWNoIGRpZmYuCisgICAgICAgIHByaW50IFNUREVSUiAiICBSZXZpZXdpbmcgZGlmZiB0byBk
ZXRlcm1pbmUgd2hpY2ggbGluZXMgY2hhbmdlZC5cbiI7CisgICAgICAgIG15ICRmaWxlOworICAg
ICAgICBvcGVuIERJRkYsICItfCIsIGRpZmZDb21tYW5kKEBjaGFuZ2VkX2ZpbGVzKSBvciBkaWUg
IlRoZSBkaWZmIGZhaWxlZDogJCEuXG4iOworICAgICAgICB3aGlsZSAoPERJRkY+KSB7CisgICAg
ICAgICAgICAkZmlsZSA9IG1ha2VGaWxlUGF0aFJlbGF0aXZlKCQxKSBpZiAkXyA9fiBkaWZmSGVh
ZGVyRm9ybWF0KCk7CisgICAgICAgICAgICBpZiAoZGVmaW5lZCAkZmlsZSkgeworICAgICAgICAg
ICAgICAgIG15ICgkc3RhcnQsICRlbmQpID0gZXh0cmFjdExpbmVSYW5nZSgkXyk7CisgICAgICAg
ICAgICAgICAgaWYgKCRzdGFydCA+PSAwICYmICRlbmQgPj0gMCkgeworICAgICAgICAgICAgICAg
ICAgICBwdXNoIEB7JGNoYW5nZWRfbGluZV9yYW5nZXN7JGZpbGV9fSwgWyAkc3RhcnQsICRlbmQg
XTsKKyAgICAgICAgICAgICAgICB9IGVsc2lmICgvRE9fTk9UX0NPTU1JVC8pIHsKKyAgICAgICAg
ICAgICAgICAgICAgcHJpbnQgU1RERVJSICJXQVJOSU5HOiBmaWxlICRmaWxlIGNvbnRhaW5zIHRo
ZSBzdHJpbmcgRE9fTk9UX0NPTU1JVCwgbGluZSAkLlxuIjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UgRElGRjsKKyAgICB9CisKKyAg
ICAjIEZvciBlYWNoIHNvdXJjZSBmaWxlLCBjb252ZXJ0IGxpbmUgcmFuZ2UgdG8gZnVuY3Rpb24g
bGlzdC4KKyAgICBpZiAoJWNoYW5nZWRfbGluZV9yYW5nZXMpIHsKKyAgICAgICAgcHJpbnQgU1RE
RVJSICIgIEV4dHJhY3RpbmcgYWZmZWN0ZWQgZnVuY3Rpb24gbmFtZXMgZnJvbSBzb3VyY2UgZmls
ZXMuXG4iOworICAgICAgICBmb3JlYWNoIG15ICRmaWxlIChrZXlzICVjaGFuZ2VkX2xpbmVfcmFu
Z2VzKSB7CisgICAgICAgICAgICAjIEZpbmQgYWxsIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGZpbGUu
CisgICAgICAgICAgICBvcGVuIFNPVVJDRSwgJGZpbGUgb3IgbmV4dDsKKyAgICAgICAgICAgIG15
IEBmdW5jdGlvbl9yYW5nZXMgPSBnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXMoXCpTT1VSQ0UsICRm
aWxlKTsKKyAgICAgICAgICAgIGNsb3NlIFNPVVJDRTsKKworICAgICAgICAgICAgIyBGaW5kIGFs
bCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLgorICAgICAgICAgICAgbXkgQGZ1bmN0aW9uczsKKyAg
ICAgICAgICAgIG15ICVzYXdfZnVuY3Rpb247CisgICAgICAgICAgICBteSBAY2hhbmdlX3Jhbmdl
cyA9IChAeyRjaGFuZ2VkX2xpbmVfcmFuZ2VzeyRmaWxlfX0sIFtdKTsKKyAgICAgICAgICAgIG15
IEBjaGFuZ2VfcmFuZ2UgPSAoMCwgMCk7CisgICAgICAgICAgRlVOQ1RJT046IGZvcmVhY2ggbXkg
JGZ1bmN0aW9uX3JhbmdlX3JlZiAoQGZ1bmN0aW9uX3JhbmdlcykgeworICAgICAgICAgICAgICAg
IG15IEBmdW5jdGlvbl9yYW5nZSA9IEAkZnVuY3Rpb25fcmFuZ2VfcmVmOworCisgICAgICAgICAg
ICAgICAgIyBBZHZhbmNlIHRvIHN1Y2Nlc3NpdmUgY2hhbmdlIHJhbmdlcy4KKyAgICAgICAgICAg
ICAgICBmb3IgKDs7IEBjaGFuZ2VfcmFuZ2UgPSBAe3NoaWZ0IEBjaGFuZ2VfcmFuZ2VzfSkgewor
ICAgICAgICAgICAgICAgICAgICBsYXN0IEZVTkNUSU9OIHVubGVzcyBAY2hhbmdlX3JhbmdlOwor
CisgICAgICAgICAgICAgICAgICAgICMgSWYgcGFzdCB0aGlzIGZ1bmN0aW9uLCBtb3ZlIG9uIHRv
IHRoZSBuZXh0IG9uZS4KKyAgICAgICAgICAgICAgICAgICAgbmV4dCBGVU5DVElPTiBpZiAkY2hh
bmdlX3JhbmdlWzBdID4gJGZ1bmN0aW9uX3JhbmdlWzFdOworCisgICAgICAgICAgICAgICAgICAg
ICMgSWYgYW4gb3ZlcmxhcCB3aXRoIHRoaXMgZnVuY3Rpb24gcmFuZ2UsIHJlY29yZCB0aGUgZnVu
Y3Rpb24gbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCRjaGFuZ2VfcmFuZ2VbMV0gPj0g
JGZ1bmN0aW9uX3JhbmdlWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgJGNoYW5nZV9y
YW5nZVswXSA8PSAkZnVuY3Rpb25fcmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghJHNhd19mdW5jdGlvbnskZnVuY3Rpb25fcmFuZ2VbMl19KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJHNhd19mdW5jdGlvbnskZnVuY3Rpb25fcmFuZ2VbMl19ID0gMTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBmdW5jdGlvbnMsICRmdW5jdGlvbl9yYW5n
ZVsyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IG5leHQgRlVOQ1RJT047CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICMgRm9ybWF0IHRoZSBsaXN0IG9mIGZ1bmN0
aW9ucyBub3cuCisgICAgICAgICAgICBpZiAoQGZ1bmN0aW9ucykgeworICAgICAgICAgICAgICAg
ICRmdW5jdGlvbl9saXN0c3skZmlsZX0gPSAiIiBpZiAhZGVmaW5lZCAkZnVuY3Rpb25fbGlzdHN7
JGZpbGV9OworICAgICAgICAgICAgICAgICRmdW5jdGlvbl9saXN0c3skZmlsZX0gLj0gIlxuICAg
ICAgICAoIiAuIGpvaW4oIik6XG4gICAgICAgICgiLCBAZnVuY3Rpb25zKSAuICIpOiI7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjIEdldCBzb21lIHBhcmFtZXRlcnMg
Zm9yIHRoZSBDaGFuZ2VMb2cgd2UgYXJlIGFib3V0IHRvIHdyaXRlLgorICAgIG15ICRkYXRlID0g
Y2hhbmdlTG9nRGF0ZSgkY2hhbmdlTG9nVGltZVpvbmUpOworICAgICRuYW1lID0gY2hhbmdlTG9n
TmFtZUZyb21BcmdzKCRuYW1lKTsKKyAgICAkZW1haWxBZGRyZXNzID0gY2hhbmdlTG9nRW1haWxB
ZGRyZXNzRnJvbUFyZ3MoJGVtYWlsQWRkcmVzcyk7CisKKyAgICBwcmludCBTVERFUlIgIiAgQ2hh
bmdlIGF1dGhvcjogJG5hbWUgPCRlbWFpbEFkZHJlc3M+LlxuIjsKKworICAgIG15ICRidWdVUkw7
CisgICAgaWYgKCRidWdOdW1iZXIpIHsKKyAgICAgICAgJGJ1Z1VSTCA9ICJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9JGJ1Z051bWJlciI7CisgICAgfQorCisgICAgaWYg
KCRidWdOdW1iZXIgJiYgISRidWdEZXNjcmlwdGlvbikgeworICAgICAgICBteSAkYnVnWE1MVVJM
ID0gIiRidWdVUkwmY3R5cGU9eG1sIjsKKyAgICAgICAgIyBQZXJsIGhhcyBubyBidWlsdCBpbiBY
TUwgcHJvY2Vzc2luZywgc28gd2UnbGwgZmV0Y2ggYW5kIHBhcnNlIHdpdGggY3VybCBhbmQgZ3Jl
cAorICAgICAgICAjIFBhc3MgLS1pbnNlY3VyZSBiZWNhdXNlIHNvbWUgY3lnd2luIGluc3RhbGxz
IGhhdmUgbm8gY2VydHMgd2UgZG9uJ3QKKyAgICAgICAgIyBjYXJlIGFib3V0IHZhbGlkYXRpbmcg
dGhhdCBidWdzLndlYmtpdC5vcmcgaXMgd2hvIGl0IHNheXMgaXQgaXMgaGVyZS4KKyAgICAgICAg
bXkgJGRlc2NyaXB0aW9uTGluZSA9IGBjdXJsIC0taW5zZWN1cmUgLS1zaWxlbnQgIiRidWdYTUxV
UkwiIHwgZ3JlcCBzaG9ydF9kZXNjYDsKKyAgICAgICAgaWYgKCRkZXNjcmlwdGlvbkxpbmUgIX4g
LzxzaG9ydF9kZXNjPiguKik8XC9zaG9ydF9kZXNjPi8pIHsKKyAgICAgICAgICAgICMgTWF5YmUg
dGhlIHJlYXNvbiB0aGUgYWJvdmUgZGlkIG5vdCB3b3JrIGlzIGJlY2F1c2UgdGhlIGN1cmwgdGhh
dCBpcyBpbnN0YWxsZWQgZG9lc24ndAorICAgICAgICAgICAgIyBzdXBwb3J0IHNzbCBhdCBhbGwu
CisgICAgICAgICAgICBpZiAoYGN1cmwgLS12ZXJzaW9uIHwgZ3JlcCBeUHJvdG9jb2xzYCAhfiAv
XGJodHRwc1xiLykgeworICAgICAgICAgICAgICAgIHByaW50IFNUREVSUiAiICBDb3VsZCBub3Qg
Z2V0IGRlc2NyaXB0aW9uIGZvciBidWcgJGJ1Z051bWJlci5cbiI7CisgICAgICAgICAgICAgICAg
cHJpbnQgU1RERVJSICIgIEl0IGxvb2tzIGxpa2UgeW91ciB2ZXJzaW9uIG9mIGN1cmwgZG9lcyBu
b3Qgc3VwcG9ydCBzc2wuXG4iOworICAgICAgICAgICAgICAgIHByaW50IFNUREVSUiAiICBJZiB5
b3UgYXJlIHVzaW5nIG1hY3BvcnRzLCB0aGlzIGNhbiBiZSBmaXhlZCB3aXRoIHN1ZG8gcG9ydCBp
bnN0YWxsIGN1cmwgK3NzbC5cbiI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHByaW50IFNUREVSUiAiICBCdWcgJGJ1Z051bWJlciBoYXMgbm8gYnVnIGRlc2NyaXB0aW9u
LiBNYXliZSB5b3Ugc2V0IHdyb25nIGJ1ZyBJRD9cbiI7CisgICAgICAgICAgICAgICAgcHJpbnQg
U1RERVJSICIgIFRoZSBidWcgVVJMOiAkYnVnWE1MVVJMXG4iOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZXhpdCAxOworICAgICAgICB9CisgICAgICAgICRidWdEZXNjcmlwdGlvbiA9IGRl
Y29kZUVudGl0aWVzKCQxKTsKKyAgICAgICAgcHJpbnQgU1RERVJSICIgIERlc2NyaXB0aW9uIGZy
b20gYnVnICRidWdOdW1iZXI6XG4gICAgXCIkYnVnRGVzY3JpcHRpb25cIi5cbiI7CisgICAgfQor
CisgICAgIyBSZW1vdmUgdHJhaWxpbmcgcGFyZW50aGVzaXplZCBub3RlcyBmcm9tIHVzZXIgbmFt
ZSAoYml0IG9mIGhhY2spLgorICAgICRuYW1lID1+IHMvXCguKj9cKVxzKiQvL2c7CisKKyAgICAj
IEZpbmQgdGhlIGNoYW5nZSBsb2dzLgorICAgIG15ICVoYXNfbG9nOworICAgIG15ICVmaWxlczsK
KyAgICBmb3JlYWNoIG15ICRmaWxlIChzb3J0IGtleXMgJWZ1bmN0aW9uX2xpc3RzKSB7CisgICAg
ICAgIG15ICRwcmVmaXggPSAkZmlsZTsKKyAgICAgICAgbXkgJGhhc19sb2cgPSAwOworICAgICAg
ICB3aGlsZSAoJHByZWZpeCkgeworICAgICAgICAgICAgJHByZWZpeCA9fiBzLS9bXi9dKy8/JC0v
LSBvciAkcHJlZml4ID0gIiI7CisgICAgICAgICAgICAkaGFzX2xvZyA9ICRoYXNfbG9neyRwcmVm
aXh9OworICAgICAgICAgICAgaWYgKCFkZWZpbmVkICRoYXNfbG9nKSB7CisgICAgICAgICAgICAg
ICAgJGhhc19sb2cgPSAtZiAiJHtwcmVmaXh9Q2hhbmdlTG9nIjsKKyAgICAgICAgICAgICAgICAk
aGFzX2xvZ3skcHJlZml4fSA9ICRoYXNfbG9nOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bGFzdCBpZiAkaGFzX2xvZzsKKyAgICAgICAgfQorICAgICAgICBpZiAoISRoYXNfbG9nKSB7Cisg
ICAgICAgICAgICBwcmludCBTVERFUlIgIk5vIENoYW5nZUxvZyBmb3VuZCBmb3IgJGZpbGUuXG4i
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaCBAeyRmaWxlc3skcHJlZml4fX0s
ICRmaWxlOworICAgICAgICB9CisgICAgfQorCisgICAgIyBCdWlsZCB0aGUgbGlzdCBvZiBDaGFu
Z2VMb2cgcHJlZml4ZXMgaW4gdGhlIGNvcnJlY3QgcHJvamVjdCBvcmRlcgorICAgIG15IEBwcmVm
aXhlczsKKyAgICBteSAlcHJlZml4ZXNTb3J0OworICAgIGZvcmVhY2ggbXkgJHByZWZpeCAoa2V5
cyAlZmlsZXMpIHsKKyAgICAgICAgbXkgJHByZWZpeERpciA9IHN1YnN0cigkcHJlZml4LCAwLCBs
ZW5ndGgoJHByZWZpeCkgLSAxKTsgIyBzdHJpcCB0cmFpbGluZyAvCisgICAgICAgIG15ICRzb3J0
S2V5ID0gbGMgJHByZWZpeDsKKyAgICAgICAgJHNvcnRLZXkgPSAidG9wIGxldmVsIiB1bmxlc3Mg
bGVuZ3RoICRzb3J0S2V5OworCisgICAgICAgIGlmICgkcHJlZml4RGlyIGVxICJ0b3AgbGV2ZWwi
KSB7CisgICAgICAgICAgICAkc29ydEtleSA9ICIiOworICAgICAgICB9IGVsc2lmICgkcHJlZml4
RGlyIGVxICJUb29scyIpIHsKKyAgICAgICAgICAgICRzb3J0S2V5ID0gIi0sIGp1c3QgYWZ0ZXIg
dG9wIGxldmVsIjsKKyAgICAgICAgfSBlbHNpZiAoJHByZWZpeERpciBlcSAiV2ViQnJvd3NlciIp
IHsKKyAgICAgICAgICAgICRzb3J0S2V5ID0gbGMgIldlYktpdCwgV2ViQnJvd3NlciBhZnRlciI7
CisgICAgICAgIH0gZWxzaWYgKCRwcmVmaXhEaXIgZXEgIlNvdXJjZS9XZWJDb3JlIikgeworICAg
ICAgICAgICAgJHNvcnRLZXkgPSBsYyAiV2ViRm91bmRhdGlvbiwgV2ViQ29yZSBhZnRlciI7Cisg
ICAgICAgIH0gZWxzaWYgKCRwcmVmaXhEaXIgZXEgIkxheW91dFRlc3RzIikgeworICAgICAgICAg
ICAgJHNvcnRLZXkgPSBsYyAifiwgTGF5b3V0VGVzdHMgbGFzdCI7CisgICAgICAgIH0KKworICAg
ICAgICAkcHJlZml4ZXNTb3J0eyRzb3J0S2V5fSA9ICRwcmVmaXg7CisgICAgfQorICAgIGZvcmVh
Y2ggbXkgJHByZWZpeFNvcnQgKHNvcnQga2V5cyAlcHJlZml4ZXNTb3J0KSB7CisgICAgICAgIHB1
c2ggQHByZWZpeGVzLCAkcHJlZml4ZXNTb3J0eyRwcmVmaXhTb3J0fTsKKyAgICB9CisKKyAgICAj
IEdldCB0aGUgbGF0ZXN0IENoYW5nZUxvZyBmaWxlcyBmcm9tIHN2bi4KKyAgICBteSBAbG9ncyA9
ICgpOworICAgIGZvcmVhY2ggbXkgJHByZWZpeCAoQHByZWZpeGVzKSB7CisgICAgICAgIHB1c2gg
QGxvZ3MsIEZpbGU6OlNwZWMtPmNhdGZpbGUoJHByZWZpeCB8fCAiLiIsICJDaGFuZ2VMb2ciKTsK
KyAgICB9CisKKyAgICBpZiAoQGxvZ3MgJiYgJHVwZGF0ZUNoYW5nZUxvZ3MgJiYgJGlzU1ZOKSB7
CisgICAgICAgIHByaW50IFNUREVSUiAiICBSdW5uaW5nICdzdm4gdXBkYXRlJyB0byB1cGRhdGUg
Q2hhbmdlTG9nIGZpbGVzLlxuIjsKKyAgICAgICAgb3BlbiBFUlJPUlMsICItfCIsICRTVk4sICJ1
cGRhdGUiLCBAbG9ncworICAgICAgICBvciBkaWUgIlRoZSBzdm4gdXBkYXRlIG9mIENoYW5nZUxv
ZyBmaWxlcyBmYWlsZWQ6ICQhLlxuIjsKKyAgICAgICAgbXkgQGNvbmZsaWN0ZWRDaGFuZ2VMb2dz
OworICAgICAgICB3aGlsZSAobXkgJGxpbmUgPSA8RVJST1JTPikgeworICAgICAgICAgICAgcHJp
bnQgU1RERVJSICIgICAgIiwgJGxpbmU7CisgICAgICAgICAgICBwdXNoIEBjb25mbGljdGVkQ2hh
bmdlTG9ncywgJDEgaWYgJGxpbmUgPX4gbS9eQ1xzKyguKz8pW1xyXG5dKiQvOworICAgICAgICB9
CisgICAgICAgIGNsb3NlIEVSUk9SUzsKKworICAgICAgICBpZiAoQGNvbmZsaWN0ZWRDaGFuZ2VM
b2dzKSB7CisgICAgICAgICAgICBwcmludCBTVERFUlIgIiAgQXR0ZW1wdGluZyB0byBtZXJnZSBj
b25mbGljdGVkIENoYW5nZUxvZ3MuXG4iOworICAgICAgICAgICAgbXkgJHJlc29sdmVDaGFuZ2VM
b2dzUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoZGlybmFtZSgkMCksICJyZXNvbHZlLUNoYW5n
ZUxvZ3MiKTsKKyAgICAgICAgICAgIG9wZW4gUkVTT0xWRSwgIi18IiwgJHJlc29sdmVDaGFuZ2VM
b2dzUGF0aCwgIi0tbm8td2FybmluZ3MiLCBAY29uZmxpY3RlZENoYW5nZUxvZ3MKKyAgICAgICAg
ICAgIG9yIGRpZSAiQ291bGQgbm90IG9wZW4gcmVzb2x2ZS1DaGFuZ2VMb2dzIHNjcmlwdDogJCEu
XG4iOworICAgICAgICAgICAgcHJpbnQgU1RERVJSICIgICAgJF8iIHdoaWxlIDxSRVNPTFZFPjsK
KyAgICAgICAgICAgIGNsb3NlIFJFU09MVkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjIEdl
bmVyYXRlIG5ldyBDaGFuZ2VMb2cgZW50cmllcyBhbmQgKG9wdGlvbmFsbHkpIHdyaXRlIG91dCBu
ZXcgQ2hhbmdlTG9nIGZpbGVzLgorICAgIGZvcmVhY2ggbXkgJHByZWZpeCAoQHByZWZpeGVzKSB7
CisgICAgICAgIG15ICRlbmRsID0gIlxuIjsKKyAgICAgICAgbXkgQG9sZF9jaGFuZ2VfbG9nOwor
CisgICAgICAgIGlmICgkd3JpdGVDaGFuZ2VMb2dzKSB7CisgICAgICAgICAgICBteSAkY2hhbmdl
TG9nUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJHByZWZpeCB8fCAiLiIsICJDaGFuZ2VMb2ci
KTsKKyAgICAgICAgICAgIHByaW50IFNUREVSUiAiICBFZGl0aW5nIHRoZSAke2NoYW5nZUxvZ1Bh
dGh9IGZpbGUuXG4iOworICAgICAgICAgICAgb3BlbiBPTERfQ0hBTkdFX0xPRywgJHtjaGFuZ2VM
b2dQYXRofSBvciBkaWUgIkNvdWxkIG5vdCBvcGVuICR7Y2hhbmdlTG9nUGF0aH0gZmlsZTogJCEu
XG4iOworICAgICAgICAgICAgIyBJdCdzIGxlc3MgZWZmaWNpZW50IHRvIHJlYWQgdGhlIHdob2xl
IHRoaW5nIGludG8gbWVtb3J5IHRoYW4gaXQgd291bGQgYmUKKyAgICAgICAgICAgICMgdG8gcmVh
ZCBpdCB3aGlsZSB3ZSBwcmVwZW5kIHRvIGl0IGxhdGVyLCBidXQgSSBsaWtlIGRvaW5nIHRoaXMg
cGFydCBmaXJzdC4KKyAgICAgICAgICAgIEBvbGRfY2hhbmdlX2xvZyA9IDxPTERfQ0hBTkdFX0xP
Rz47CisgICAgICAgICAgICBjbG9zZSBPTERfQ0hBTkdFX0xPRzsKKyAgICAgICAgICAgICMgV2Ug
d2FudCB0byBtYXRjaCB0aGUgQ2hhbmdlTG9nJ3MgbGluZSBlbmRpbmdzIGluIGNhc2UgaXQgZG9l
c24ndCBtYXRjaAorICAgICAgICAgICAgIyB0aGUgbmF0aXZlIGxpbmUgZW5kaW5ncyBmb3IgdGhp
cyB2ZXJzaW9uIG9mIHBlcmwuCisgICAgICAgICAgICBpZiAoJG9sZF9jaGFuZ2VfbG9nWzBdID1+
IC8oXHI/XG4pJC9nKSB7CisgICAgICAgICAgICAgICAgJGVuZGwgPSAiJDEiOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgb3BlbiBDSEFOR0VfTE9HLCAiPiAke2NoYW5nZUxvZ1BhdGh9IiBv
ciBkaWUgIkNvdWxkIG5vdCB3cml0ZSAke2NoYW5nZUxvZ1BhdGh9XG4uIjsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG9wZW4gQ0hBTkdFX0xPRywgIj4tIiBvciBkaWUgIkNvdWxkIG5v
dCB3cml0ZSB0byBTVERPVVRcbi4iOworICAgICAgICAgICAgcHJpbnQgc3Vic3RyKCRwcmVmaXgs
IDAsIGxlbmd0aCgkcHJlZml4KSAtIDEpIC4gIjpcblxuIiB1bmxlc3MgKHNjYWxhciBAcHJlZml4
ZXMpID09IDE7CisgICAgICAgIH0KKworICAgICAgICBwcmludCBDSEFOR0VfTE9HIG5vcm1hbGl6
ZUxpbmVFbmRpbmdzKCIkZGF0ZSAgJG5hbWUgIDwkZW1haWxBZGRyZXNzPlxuXG4iLCAkZW5kbCk7
CisKKyAgICAgICAgbXkgKCRyZXZpZXdlciwgJGRlc2NyaXB0aW9uKSA9IHJldmlld2VyQW5kRGVz
Y3JpcHRpb25Gb3JHaXRDb21taXQoJGdpdENvbW1pdCkgaWYgJGdpdENvbW1pdDsKKyAgICAgICAg
JHJldmlld2VyID0gIk5PQk9EWSAoT08iIC4gIlBTISkiIGlmICEkcmV2aWV3ZXI7CisKKyAgICAg
ICAgcHJpbnQgQ0hBTkdFX0xPRyBub3JtYWxpemVMaW5lRW5kaW5ncygkZGVzY3JpcHRpb24gLiAi
XG4iLCAkZW5kbCkgaWYgJGRlc2NyaXB0aW9uOworCisgICAgICAgICRidWdEZXNjcmlwdGlvbiA9
ICJOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKSIgdW5sZXNzICRi
dWdEZXNjcmlwdGlvbjsKKyAgICAgICAgcHJpbnQgQ0hBTkdFX0xPRyBub3JtYWxpemVMaW5lRW5k
aW5ncygiICAgICAgICAkYnVnRGVzY3JpcHRpb25cbiIsICRlbmRsKSBpZiAkYnVnRGVzY3JpcHRp
b247CisgICAgICAgIHByaW50IENIQU5HRV9MT0cgbm9ybWFsaXplTGluZUVuZGluZ3MoIiAgICAg
ICAgJGJ1Z1VSTFxuIiwgJGVuZGwpIGlmICRidWdVUkw7CisgICAgICAgIHByaW50IENIQU5HRV9M
T0cgbm9ybWFsaXplTGluZUVuZGluZ3MoIlxuIiwgJGVuZGwpOworCisgICAgICAgIHByaW50IENI
QU5HRV9MT0cgbm9ybWFsaXplTGluZUVuZGluZ3MoIiAgICAgICAgUmV2aWV3ZWQgYnkgJHJldmll
d2VyLlxuXG4iLCAkZW5kbCk7CisKKyAgICAgICAgaWYgKCRwcmVmaXggPX4gbS9XZWJDb3JlLyB8
fCBgcHdkYCA9fiBtL1dlYkNvcmUvKSB7CisgICAgICAgICAgICBpZiAoJGRpZENoYW5nZVJlZ3Jl
c3Npb25UZXN0cykgeworICAgICAgICAgICAgICAgIHByaW50IENIQU5HRV9MT0cgbm9ybWFsaXpl
TGluZUVuZGluZ3ModGVzdExpc3RGb3JDaGFuZ2VMb2coc29ydCBAYWRkZWRSZWdyZXNzaW9uVGVz
dHMpLCAkZW5kbCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50
IENIQU5HRV9MT0cgbm9ybWFsaXplTGluZUVuZGluZ3MoIiAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpXG5cbiIsICRlbmRsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGZvcmVhY2ggbXkgJGZpbGUgKHNvcnQgQHskZmlsZXN7JHByZWZpeH19KSB7CisgICAgICAgICAg
ICBteSAkZmlsZV9zdGVtID0gc3Vic3RyICRmaWxlLCBsZW5ndGggJHByZWZpeDsKKyAgICAgICAg
ICAgIHByaW50IENIQU5HRV9MT0cgbm9ybWFsaXplTGluZUVuZGluZ3MoIiAgICAgICAgKiAkZmls
ZV9zdGVtOiRmdW5jdGlvbl9saXN0c3skZmlsZX1cbiIsICRlbmRsKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICgkd3JpdGVDaGFuZ2VMb2dzKSB7CisgICAgICAgICAgICBwcmludCBDSEFOR0Vf
TE9HIG5vcm1hbGl6ZUxpbmVFbmRpbmdzKCJcbiIsICRlbmRsKSwgQG9sZF9jaGFuZ2VfbG9nOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQgQ0hBTkdFX0xPRyAiXG4iOworICAg
ICAgICB9CisKKyAgICAgICAgY2xvc2UgQ0hBTkdFX0xPRzsKKyAgICB9CisKKyAgICBpZiAoJHdy
aXRlQ2hhbmdlTG9ncykgeworICAgICAgICBwcmludCBTVERFUlIgIi0tIFBsZWFzZSByZW1lbWJl
ciB0byBpbmNsdWRlIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gaW4geW91ciBDaGFuZ2VMb2cgZW50
cnkuIC0tXG4tLSBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2NvZGluZy9jb250cmlidXRpbmcuaHRt
bD4gZm9yIG1vcmUgaW5mbyAtLVxuIjsKKyAgICB9CisKKyAgICAjIFdyaXRlIG91dCBhbm90aGVy
IGRpZmYuCisgICAgaWYgKCRzcGV3RGlmZiAmJiBAY2hhbmdlZF9maWxlcykgeworICAgICAgICBw
cmludCBTVERFUlIgIiAgUnVubmluZyBkaWZmIHRvIGhlbHAgeW91IHdyaXRlIHRoZSBDaGFuZ2VM
b2cgZW50cmllcy5cbiI7CisgICAgICAgIGxvY2FsICQvID0gdW5kZWY7ICMgbG9jYWwgc2x1cnAg
bW9kZQorICAgICAgICBvcGVuIERJRkYsICItfCIsIGNyZWF0ZVBhdGNoQ29tbWFuZCgkY2hhbmdl
ZF9maWxlc19zdHJpbmcpIG9yIGRpZSAiVGhlIGRpZmYgZmFpbGVkOiAkIS5cbiI7CisgICAgICAg
IHByaW50IDxESUZGPjsKKyAgICAgICAgY2xvc2UgRElGRjsKKyAgICB9CisKKyAgICAjIE9wZW4g
Q2hhbmdlTG9ncy4KKyAgICBpZiAoJG9wZW5DaGFuZ2VMb2dzICYmIEBsb2dzKSB7CisgICAgICAg
IHByaW50IFNUREVSUiAiICBPcGVuaW5nIHRoZSBlZGl0ZWQgQ2hhbmdlTG9nIGZpbGVzLlxuIjsK
KyAgICAgICAgbXkgJGVkaXRvciA9ICRFTlZ7Q0hBTkdFX0xPR19FRElUT1J9OworICAgICAgICBp
ZiAoJGVkaXRvcikgeworICAgICAgICAgICAgc3lzdGVtICgoc3BsaXQgJyAnLCAkZWRpdG9yKSwg
QGxvZ3MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGVkaXRvciA9ICRFTlZ7Q0hB
TkdFX0xPR19FRElUX0FQUExJQ0FUSU9OfTsKKyAgICAgICAgICAgIGlmICgkZWRpdG9yKSB7Cisg
ICAgICAgICAgICAgICAgc3lzdGVtICJvcGVuIiwgIi1hIiwgJGVkaXRvciwgQGxvZ3M7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN5c3RlbSAib3BlbiIsICItZSIsIEBs
b2dzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdWIgY2hhbmdlTG9n
RGF0ZSgkKQoreworICAgIG15ICgkdGltZVpvbmUpID0gQF87CisgICAgbXkgJHNhdmVkVGltZVpv
bmUgPSAkRU5WeydUWid9OworICAgICMgU2V0IFRaIHRlbXBvcmFyaWx5IHNvIHRoYXQgbG9jYWx0
aW1lKCkgaXMgaW4gdGhhdCB0aW1lIHpvbmUKKyAgICAkRU5WeydUWid9ID0gJHRpbWVab25lOwor
ICAgIG15ICRkYXRlID0gc3RyZnRpbWUoIiVZLSVtLSVkIiwgbG9jYWx0aW1lKCkpOworICAgIGlm
IChkZWZpbmVkICRzYXZlZFRpbWVab25lKSB7CisgICAgICAgICAkRU5WeydUWid9ID0gJHNhdmVk
VGltZVpvbmU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIGRlbGV0ZSAkRU5WeydUWid9OworICAg
IH0KKyAgICByZXR1cm4gJGRhdGU7Cit9CisKK3N1YiBjaGFuZ2VMb2dOYW1lRnJvbUFyZ3MoJCkK
K3sKKyAgICBteSAoJG5hbWVGcm9tQXJncykgPSBAXzsKKyAgICAjIFNpbGVudGx5IGFsbG93IC0t
Z2l0LWNvbW1pdCB0byB3aW4sIHdlIGNvdWxkIHdhcm4gaWYgJG5hbWVGcm9tQXJncyBpcyBkZWZp
bmVkLgorICAgIHJldHVybiBgJEdJVCBsb2cgLS1tYXgtY291bnQ9MSAtLXByZXR0eT1cImZvcm1h
dDolYW5cIiBcIiRnaXRDb21taXRcImAgaWYgJGdpdENvbW1pdDsKKworICAgIHJldHVybiAkbmFt
ZUZyb21BcmdzIHx8IGNoYW5nZUxvZ05hbWUoKTsKK30KKworc3ViIGNoYW5nZUxvZ0VtYWlsQWRk
cmVzc0Zyb21BcmdzKCQpCit7CisgICAgbXkgKCRlbWFpbEFkZHJlc3NGcm9tQXJncykgPSBAXzsK
KyAgICAjIFNpbGVudGx5IGFsbG93IC0tZ2l0LWNvbW1pdCB0byB3aW4sIHdlIGNvdWxkIHdhcm4g
aWYgJGVtYWlsQWRkcmVzc0Zyb21BcmdzIGlzIGRlZmluZWQuCisgICAgcmV0dXJuIGAkR0lUIGxv
ZyAtLW1heC1jb3VudD0xIC0tcHJldHR5PVwiZm9ybWF0OiVhZVwiIFwiJGdpdENvbW1pdFwiYCBp
ZiAkZ2l0Q29tbWl0OworCisgICAgcmV0dXJuICRlbWFpbEFkZHJlc3NGcm9tQXJncyB8fCBjaGFu
Z2VMb2dFbWFpbEFkZHJlc3MoKTsKK30KKworc3ViIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlcygk
JCkKK3sKKyAgICBteSAoJGZpbGVfaGFuZGxlLCAkZmlsZV9uYW1lKSA9IEBfOworCisgICAgIyBU
cnkgdG8gZGV0ZXJtaW5lIHRoZSBzb3VyY2UgbGFuZ3VhZ2UgYmFzZWQgb24gdGhlIGZpbGUgZXh0
ZW5zaW9uLgorCisgICAgcmV0dXJuIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfYygkZmls
ZV9oYW5kbGUsICRmaWxlX25hbWUpIGlmICRmaWxlX25hbWUgPX4gL1wuKGN8Y3BwfG18bW18aCkk
LzsKKyAgICByZXR1cm4gZ2V0X2Z1bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9qYXZhKCRmaWxlX2hh
bmRsZSwgJGZpbGVfbmFtZSkgaWYgJGZpbGVfbmFtZSA9fiAvXC5qYXZhJC87CisgICAgcmV0dXJu
IGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfamF2YXNjcmlwdCgkZmlsZV9oYW5kbGUsICRm
aWxlX25hbWUpIGlmICRmaWxlX25hbWUgPX4gL1wuanMkLzsKKyAgICByZXR1cm4gZ2V0X3NlbGVj
dG9yX2xpbmVfcmFuZ2VzX2Zvcl9jc3MoJGZpbGVfaGFuZGxlLCAkZmlsZV9uYW1lKSBpZiAkZmls
ZV9uYW1lID1+IC9cLmNzcyQvOworICAgIHJldHVybiBnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNf
Zm9yX3BlcmwoJGZpbGVfaGFuZGxlLCAkZmlsZV9uYW1lKSBpZiAkZmlsZV9uYW1lID1+IC9cLnBb
bG1dJC87CisgICAgcmV0dXJuIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfcHl0aG9uKCRm
aWxlX2hhbmRsZSwgJGZpbGVfbmFtZSkgaWYgJGZpbGVfbmFtZSA9fiAvXC5weSQvOworCisgICAg
IyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBzb3VyY2UgbGFuZ3VhZ2UgYmFzZWQgb24gdGhlIHNjcmlw
dCBpbnRlcnByZXRlci4KKworICAgIG15ICRmaXJzdF9saW5lID0gPCRmaWxlX2hhbmRsZT47Cisg
ICAgc2VlaygkZmlsZV9oYW5kbGUsIDAsIDApOworCisgICAgcmV0dXJuICgpIHVubGVzcyAkZmly
c3RfbGluZSA9fiBtfF4jISg/Oi91c3IvYmluL2VudlxzKyk/KFxTKyl8OworICAgIG15ICRpbnRl
cnByZXRlciA9ICQxOworCisgICAgcmV0dXJuIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3Jf
cGVybCgkZmlsZV9oYW5kbGUsICRmaWxlX25hbWUpIGlmICRpbnRlcnByZXRlciA9fiAvcGVybCQv
OworICAgIHJldHVybiBnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNfZm9yX3B5dGhvbigkZmlsZV9o
YW5kbGUsICRmaWxlX25hbWUpIGlmICRpbnRlcnByZXRlciA9fiAvcHl0aG9uJC87CisKKyAgICBy
ZXR1cm4gKCk7Cit9CisKKworc3ViIG1ldGhvZF9kZWNsX3RvX3NlbGVjdG9yKCQpCit7CisgICAg
KG15ICRtZXRob2RfZGVjbCkgPSBAXzsKKworICAgICRfID0gJG1ldGhvZF9kZWNsOworCisgICAg
aWYgKChteSAkY29tbWVudF9zdHJpcHBlZCkgPSBtLShbXi9dKikoLy98LyopLiotKSB7CisgICAg
ICAgICRfID0gJGNvbW1lbnRfc3RyaXBwZWQ7CisgICAgfQorCisgICAgcy8sXHMqLi4uLy87CisK
KyAgICBpZiAoLzovKSB7CisgICAgICAgIG15IEBjb21wb25lbnRzID0gc3BsaXQgLzovOworICAg
ICAgICBwb3AgQGNvbXBvbmVudHMgaWYgKHNjYWxhciBAY29tcG9uZW50cyA+IDEpOworICAgICAg
ICAkXyA9IChqb2luICc6JywgbWFwIHtzLy4qW15bOndvcmQ6XV0vLzsgc2NhbGFyICRfO30gQGNv
bXBvbmVudHMpIC4gJzonOworICAgIH0gZWxzZSB7CisgICAgICAgIHMvXHMqJC8vOworICAgICAg
ICBzLy4qW15bOndvcmQ6XV0vLzsKKyAgICB9CisKKyAgICByZXR1cm4gJF87Cit9CisKKworCisj
IFJlYWQgYSBmaWxlIGFuZCBnZXQgYWxsIHRoZSBsaW5lIHJhbmdlcyBvZiB0aGUgdGhpbmdzIHRo
YXQgbG9vayBsaWtlIEMgZnVuY3Rpb25zLgorIyBBIGZ1bmN0aW9uIG5hbWUgaXMgdGhlIGxhc3Qg
d29yZCBiZWZvcmUgYW4gb3BlbiBwYXJlbnRoZXNpcyBiZWZvcmUgdGhlIG91dGVyCisjIGxldmVs
IG9wZW4gYnJhY2UuIEEgZnVuY3Rpb24gc3RhcnRzIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0
ZXIgdGhlIGxhc3QgY2xvc2UKKyMgYnJhY2Ugb3Igc2VtaWNvbG9uIGJlZm9yZSB0aGUgZnVuY3Rp
b24gbmFtZSBhbmQgZW5kcyBhdCB0aGUgY2xvc2UgYnJhY2UuCisjIENvbW1lbnQgaGFuZGxpbmcg
aXMgc2ltcGxlLW1pbmRlZCBidXQgd2lsbCB3b3JrIGZvciBhbGwgYnV0IHBhdGhvbG9naWNhbCBj
YXNlcy4KKyMKKyMgUmVzdWx0IGlzIGEgbGlzdCBvZiB0cmlwbGVzOiBbIHN0YXJ0X2xpbmUsIGVu
ZF9saW5lLCBmdW5jdGlvbl9uYW1lIF0uCisKK3N1YiBnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNf
Zm9yX2MoJCQpCit7CisgICAgbXkgKCRmaWxlX2hhbmRsZSwgJGZpbGVfbmFtZSkgPSBAXzsKKwor
ICAgIG15IEByYW5nZXM7CisKKyAgICBteSAkaW5fY29tbWVudCA9IDA7CisgICAgbXkgJGluX21h
Y3JvID0gMDsKKyAgICBteSAkaW5fbWV0aG9kX2RlY2xhcmF0aW9uID0gMDsKKyAgICBteSAkaW5f
cGFyZW50aGVzZXMgPSAwOworICAgIG15ICRpbl9icmFjZXMgPSAwOworICAgIG15ICRicmFjZV9z
dGFydCA9IDA7CisgICAgbXkgJGJyYWNlX2VuZCA9IDA7CisgICAgbXkgJHNraXBfdGlsX2JyYWNl
X29yX3NlbWljb2xvbiA9IDA7CisKKyAgICBteSAkd29yZCA9ICIiOworICAgIG15ICRpbnRlcmZh
Y2VfbmFtZSA9ICIiOworCisgICAgbXkgJHBvdGVudGlhbF9tZXRob2RfY2hhciA9ICIiOworICAg
IG15ICRwb3RlbnRpYWxfbWV0aG9kX3NwZWMgPSAiIjsKKworICAgIG15ICRwb3RlbnRpYWxfc3Rh
cnQgPSAwOworICAgIG15ICRwb3RlbnRpYWxfbmFtZSA9ICIiOworCisgICAgbXkgJHN0YXJ0ID0g
MDsKKyAgICBteSAkbmFtZSA9ICIiOworCisgICAgbXkgJG5leHRfd29yZF9jb3VsZF9iZV9uYW1l
c3BhY2UgPSAwOworICAgIG15ICRwb3RlbnRpYWxfbmFtZXNwYWNlID0gIiI7CisgICAgbXkgQG5h
bWVzcGFjZXM7CisKKyAgICB3aGlsZSAoPCRmaWxlX2hhbmRsZT4pIHsKKyAgICAgICAgIyBIYW5k
bGUgY29udGludWVkIG11bHRpLWxpbmUgY29tbWVudC4KKyAgICAgICAgaWYgKCRpbl9jb21tZW50
KSB7CisgICAgICAgICAgICBuZXh0IHVubGVzcyBzLS4qXCovLS07CisgICAgICAgICAgICAkaW5f
Y29tbWVudCA9IDA7CisgICAgICAgIH0KKworICAgICAgICAjIEhhbmRsZSBjb250aW51ZWQgbWFj
cm8uCisgICAgICAgIGlmICgkaW5fbWFjcm8pIHsKKyAgICAgICAgICAgICRpbl9tYWNybyA9IDAg
dW5sZXNzIC9cXCQvOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgICMg
SGFuZGxlIHN0YXJ0IG9mIG1hY3JvIChvciBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSkuCisg
ICAgICAgIGlmICgvXlxzKlwjLykgeworICAgICAgICAgICAgJGluX21hY3JvID0gMSBpZiAvXihb
XlxcXXxcXC4pKlxcJC87CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAg
IyBIYW5kbGUgY29tbWVudHMgYW5kIHF1b3RlZCB0ZXh0LgorICAgICAgICB3aGlsZSAobS0oL1wq
fC8vfFwnfFwiKS0pIHsgIyBcJyBhbmQgXCIga2VlcCBlbWFjcyBwZXJsIG1vZGUgaGFwcHkKKyAg
ICAgICAgICAgIG15ICRtYXRjaCA9ICQxOworICAgICAgICAgICAgaWYgKCRtYXRjaCBlcSAiLyoi
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFzLS9cKi4qP1wqLy0tKSB7CisgICAgICAgICAgICAg
ICAgICAgIHMtL1wqLiotLTsKKyAgICAgICAgICAgICAgICAgICAgJGluX2NvbW1lbnQgPSAxOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzaWYgKCRtYXRjaCBlcSAiLy8iKSB7
CisgICAgICAgICAgICAgICAgcy0vLy4qLS07CisgICAgICAgICAgICB9IGVsc2UgeyAjICcgb3Ig
IgorICAgICAgICAgICAgICAgIGlmICghcy0kbWF0Y2goW15cXF18XFwuKSo/JG1hdGNoLS0pIHsK
KyAgICAgICAgICAgICAgICAgICAgd2FybiAibWlzbWF0Y2hlZCBxdW90ZXMgYXQgbGluZSAkLiBp
biAkZmlsZV9uYW1lXG4iOworICAgICAgICAgICAgICAgICAgICBzLSRtYXRjaC4qLS07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKworICAgICAgICAjIGNv
bnRpbnVlZCBtZXRob2QgZGVjbGFyYXRpb24KKyAgICAgICAgaWYgKCRpbl9tZXRob2RfZGVjbGFy
YXRpb24pIHsKKyAgICAgICAgICAgICAgbXkgJG9yaWdpbmFsID0gJF87CisgICAgICAgICAgICAg
IG15ICRtZXRob2RfY29udCA9ICRfOworCisgICAgICAgICAgICAgIGNob21wICRtZXRob2RfY29u
dDsKKyAgICAgICAgICAgICAgJG1ldGhvZF9jb250ID1+IHMvWztce10uKi8vOworICAgICAgICAg
ICAgICAkcG90ZW50aWFsX21ldGhvZF9zcGVjID0gIiR7cG90ZW50aWFsX21ldGhvZF9zcGVjfSAk
e21ldGhvZF9jb250fSI7CisKKyAgICAgICAgICAgICAgJF8gPSAkb3JpZ2luYWw7CisgICAgICAg
ICAgICAgIGlmICgvOy8pIHsKKyAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfc3RhcnQgPSAw
OworICAgICAgICAgICAgICAgICAgJHBvdGVudGlhbF9tZXRob2Rfc3BlYyA9ICIiOworICAgICAg
ICAgICAgICAgICAgJHBvdGVudGlhbF9tZXRob2RfY2hhciA9ICIiOworICAgICAgICAgICAgICAg
ICAgJGluX21ldGhvZF9kZWNsYXJhdGlvbiA9IDA7CisgICAgICAgICAgICAgICAgICBzL15bXjtc
e10qLy87CisgICAgICAgICAgICAgIH0gZWxzaWYgKC97LykgeworICAgICAgICAgICAgICAgICAg
bXkgJHNlbGVjdG9yID0gbWV0aG9kX2RlY2xfdG9fc2VsZWN0b3IgKCRwb3RlbnRpYWxfbWV0aG9k
X3NwZWMpOworICAgICAgICAgICAgICAgICAgJHBvdGVudGlhbF9uYW1lID0gIiR7cG90ZW50aWFs
X21ldGhvZF9jaGFyfVxbJHtpbnRlcmZhY2VfbmFtZX0gJHtzZWxlY3Rvcn1cXSI7CisgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbWV0aG9kX3NwZWMgPSAi
IjsKKyAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbWV0aG9kX2NoYXIgPSAiIjsKKyAgICAg
ICAgICAgICAgICAgICRpbl9tZXRob2RfZGVjbGFyYXRpb24gPSAwOworICAKKyAgICAgICAgICAg
ICAgICAgICRfID0gJG9yaWdpbmFsOworICAgICAgICAgICAgICAgICAgcy9eW147e10qLy87Cisg
ICAgICAgICAgICAgIH0gZWxzaWYgKC9cQGVuZC8pIHsKKyAgICAgICAgICAgICAgICAgICRpbl9t
ZXRob2RfZGVjbGFyYXRpb24gPSAwOworICAgICAgICAgICAgICAgICAgJGludGVyZmFjZV9uYW1l
ID0gIiI7CisgICAgICAgICAgICAgICAgICAkXyA9ICRvcmlnaW5hbDsKKyAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIAorICAgICAgICAjIHN0YXJ0IG9mIG1ldGhvZCBkZWNsYXJhdGlvbgor
ICAgICAgICBpZiAoKG15ICRtZXRob2RfY2hhciwgbXkgJG1ldGhvZF9zcGVjKSA9IG0mXihbLStd
KShbXjAtOTtdW147XSopOz8kJikgeworICAgICAgICAgICAgbXkgJG9yaWdpbmFsID0gJF87CisK
KyAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlX25hbWUpIHsKKyAgICAgICAgICAgICAgICBjaG9t
cCAkbWV0aG9kX3NwZWM7CisgICAgICAgICAgICAgICAgJG1ldGhvZF9zcGVjID1+IHMvXHsuKi8v
OworCisgICAgICAgICAgICAgICAgJHBvdGVudGlhbF9tZXRob2RfY2hhciA9ICRtZXRob2RfY2hh
cjsKKyAgICAgICAgICAgICAgICAkcG90ZW50aWFsX21ldGhvZF9zcGVjID0gJG1ldGhvZF9zcGVj
OworICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfc3RhcnQgPSAkLjsKKyAgICAgICAgICAgICAg
ICAkaW5fbWV0aG9kX2RlY2xhcmF0aW9uID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7IAorICAg
ICAgICAgICAgICAgIHdhcm4gImRlY2xhcmluZyBhIG1ldGhvZCBidXQgZG9uJ3QgaGF2ZSBpbnRl
cmZhY2Ugb24gbGluZSAkLiBpbiAkZmlsZV9uYW1lXG4iOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgJF8gPSAkb3JpZ2luYWw7CisgICAgICAgICAgICBpZiAoL1x7LykgeworICAgICAgICAg
ICAgICBteSAkc2VsZWN0b3IgPSBtZXRob2RfZGVjbF90b19zZWxlY3RvciAoJHBvdGVudGlhbF9t
ZXRob2Rfc3BlYyk7CisgICAgICAgICAgICAgICRwb3RlbnRpYWxfbmFtZSA9ICIke3BvdGVudGlh
bF9tZXRob2RfY2hhcn1cWyR7aW50ZXJmYWNlX25hbWV9ICR7c2VsZWN0b3J9XF0iOworICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgJHBvdGVudGlhbF9tZXRob2Rfc3BlYyA9ICIiOworICAg
ICAgICAgICAgICAkcG90ZW50aWFsX21ldGhvZF9jaGFyID0gIiI7CisgICAgICAgICAgICAgICRp
bl9tZXRob2RfZGVjbGFyYXRpb24gPSAwOworICAgICAgICAgICAgICAkXyA9ICRvcmlnaW5hbDsK
KyAgICAgICAgICAgICAgcy9eW157XSovLzsKKyAgICAgICAgICAgIH0gZWxzaWYgKC9cQGVuZC8p
IHsKKyAgICAgICAgICAgICAgJGluX21ldGhvZF9kZWNsYXJhdGlvbiA9IDA7CisgICAgICAgICAg
ICAgICRpbnRlcmZhY2VfbmFtZSA9ICIiOworICAgICAgICAgICAgICAkXyA9ICRvcmlnaW5hbDsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworCisgICAgICAgICMgRmluZCBmdW5jdGlvbiwgaW50ZXJmYWNlIGFuZCBt
ZXRob2QgbmFtZXMuCisgICAgICAgIHdoaWxlIChtJigoPzpbWzp3b3JkOl1dKzo6KSpvcGVyYXRv
cig/OlsgXHRdKlwoXCl8W14oKV0qKXxbWzp3b3JkOl06fl0rfFsoKXt9OjtdKXxcQCg/OmltcGxl
bWVudGF0aW9ufGludGVyZmFjZXxwcm90b2NvbClccysoXHcrKVtee10qJmcpIHsKKyAgICAgICAg
ICAgICMgaW50ZXJmYWNlIG5hbWUKKyAgICAgICAgICAgIGlmICgkMikgeworICAgICAgICAgICAg
ICAgICRpbnRlcmZhY2VfbmFtZSA9ICQyOworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICMgT3BlbiBwYXJlbnRoZXNpcy4KKyAgICAgICAgICAgIGlm
ICgkMSBlcSAiKCIpIHsKKyAgICAgICAgICAgICAgICAkcG90ZW50aWFsX25hbWUgPSAkd29yZCB1
bmxlc3MgJGluX3BhcmVudGhlc2VzIHx8ICRza2lwX3RpbF9icmFjZV9vcl9zZW1pY29sb247Cisg
ICAgICAgICAgICAgICAgJGluX3BhcmVudGhlc2VzKys7CisgICAgICAgICAgICAgICAgbmV4dDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyBDbG9zZSBwYXJlbnRoZXNpcy4KKyAgICAg
ICAgICAgIGlmICgkMSBlcSAiKSIpIHsKKyAgICAgICAgICAgICAgICAkaW5fcGFyZW50aGVzZXMt
LTsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAj
IEMrKyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcnMKKyAgICAgICAgICAgIGlmICgkMSBlcSAiOiIp
IHsKKyAgICAgICAgICAgICAgICAgICRza2lwX3RpbF9icmFjZV9vcl9zZW1pY29sb24gPSAxIHVu
bGVzcyAoJGluX3BhcmVudGhlc2VzIHx8ICRpbl9icmFjZXMpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAjIE9wZW4gYnJhY2UuCisgICAgICAgICAgICBpZiAoJDEgZXEgInsiKSB7Cisg
ICAgICAgICAgICAgICAgJHNraXBfdGlsX2JyYWNlX29yX3NlbWljb2xvbiA9IDA7CisKKyAgICAg
ICAgICAgICAgICBpZiAoJHBvdGVudGlhbF9uYW1lc3BhY2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaCBAbmFtZXNwYWNlcywgJHBvdGVudGlhbF9uYW1lc3BhY2U7CisgICAgICAgICAgICAg
ICAgICAgICRwb3RlbnRpYWxfbmFtZXNwYWNlID0gIiI7CisgICAgICAgICAgICAgICAgICAgIG5l
eHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIyBQcm9tb3RlIHBvdGVu
dGlhbCBuYW1lIHRvIHJlYWwgZnVuY3Rpb24gbmFtZSBhdCB0aGUKKyAgICAgICAgICAgICAgICAj
IHN0YXJ0IG9mIHRoZSBvdXRlciBsZXZlbCBzZXQgb2YgYnJhY2VzIChmdW5jdGlvbiBib2R5Pyku
CisgICAgICAgICAgICAgICAgaWYgKCEkaW5fYnJhY2VzIGFuZCAkcG90ZW50aWFsX3N0YXJ0KSB7
CisgICAgICAgICAgICAgICAgICAgICRzdGFydCA9ICRwb3RlbnRpYWxfc3RhcnQ7CisgICAgICAg
ICAgICAgICAgICAgICRuYW1lID0gJHBvdGVudGlhbF9uYW1lOworICAgICAgICAgICAgICAgICAg
ICBpZiAoQG5hbWVzcGFjZXMgJiYgJG5hbWUgJiYgKGxlbmd0aCgkbmFtZSkgPCAyIHx8IHN1YnN0
cigkbmFtZSwxLDEpIG5lICJbIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lID0g
am9pbiAoJzo6JywgQG5hbWVzcGFjZXMsICRuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICRpbl9tZXRob2RfZGVjbGFyYXRp
b24gPSAwOworCisgICAgICAgICAgICAgICAgJGJyYWNlX3N0YXJ0ID0gJC4gaWYgKCEkaW5fYnJh
Y2VzKTsKKyAgICAgICAgICAgICAgICAkaW5fYnJhY2VzKys7CisgICAgICAgICAgICAgICAgbmV4
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyBDbG9zZSBicmFjZS4KKyAgICAgICAg
ICAgIGlmICgkMSBlcSAifSIpIHsKKyAgICAgICAgICAgICAgICBpZiAoISRpbl9icmFjZXMgJiYg
QG5hbWVzcGFjZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9wIEBuYW1lc3BhY2VzOworICAg
ICAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICRpbl9icmFjZXMtLTsKKyAgICAgICAgICAgICAgICAkYnJhY2VfZW5kID0gJC4gaWYgKCEk
aW5fYnJhY2VzKTsKKworICAgICAgICAgICAgICAgICMgRW5kIG9mIGFuIG91dGVyIGxldmVsIHNl
dCBvZiBicmFjZXMuCisgICAgICAgICAgICAgICAgIyBUaGlzIGNvdWxkIGJlIGEgZnVuY3Rpb24g
Ym9keS4KKyAgICAgICAgICAgICAgICBpZiAoISRpbl9icmFjZXMgYW5kICRuYW1lKSB7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2ggQHJhbmdlcywgWyAkc3RhcnQsICQuLCAkbmFtZSBdOworICAg
ICAgICAgICAgICAgICAgICAkbmFtZSA9ICIiOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICRwb3RlbnRpYWxfc3RhcnQgPSAwOworICAgICAgICAgICAgICAgICRwb3RlbnRp
YWxfbmFtZSA9ICIiOworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICMgU2VtaWNvbG9uLgorICAgICAgICAgICAgaWYgKCQxIGVxICI7IikgeworICAg
ICAgICAgICAgICAgICRza2lwX3RpbF9icmFjZV9vcl9zZW1pY29sb24gPSAwOworICAgICAgICAg
ICAgICAgICRwb3RlbnRpYWxfc3RhcnQgPSAwOworICAgICAgICAgICAgICAgICRwb3RlbnRpYWxf
bmFtZSA9ICIiOworICAgICAgICAgICAgICAgICRpbl9tZXRob2RfZGVjbGFyYXRpb24gPSAwOwor
ICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICMgSWdu
b3JlICJjb25zdCIgbWV0aG9kIHF1YWxpZmllci4KKyAgICAgICAgICAgIGlmICgkMSBlcSAiY29u
c3QiKSB7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCQxIGVxICJuYW1lc3BhY2UiIHx8ICQxIGVxICJjbGFzcyIgfHwgJDEgZXEgInN0cnVj
dCIpIHsKKyAgICAgICAgICAgICAgICAkbmV4dF93b3JkX2NvdWxkX2JlX25hbWVzcGFjZSA9IDE7
CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyBX
b3JkLgorICAgICAgICAgICAgJHdvcmQgPSAkMTsKKyAgICAgICAgICAgIGlmICghJHNraXBfdGls
X2JyYWNlX29yX3NlbWljb2xvbikgeworICAgICAgICAgICAgICAgIGlmICgkbmV4dF93b3JkX2Nv
dWxkX2JlX25hbWVzcGFjZSkgeworICAgICAgICAgICAgICAgICAgICAkcG90ZW50aWFsX25hbWVz
cGFjZSA9ICR3b3JkOworICAgICAgICAgICAgICAgICAgICAkbmV4dF93b3JkX2NvdWxkX2JlX25h
bWVzcGFjZSA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHBvdGVudGlhbF9uYW1lc3Bh
Y2UpIHsKKyAgICAgICAgICAgICAgICAgICAgJHBvdGVudGlhbF9uYW1lc3BhY2UgPSAiIjsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoISRpbl9wYXJlbnRoZXNlcykg
eworICAgICAgICAgICAgICAgICAgICAkcG90ZW50aWFsX3N0YXJ0ID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgJHBvdGVudGlhbF9uYW1lID0gIiI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICghJHBvdGVudGlhbF9zdGFydCkgeworICAgICAgICAgICAgICAgICAgICAk
cG90ZW50aWFsX3N0YXJ0ID0gJC47CisgICAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfbmFt
ZSA9ICIiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHdhcm4gIm1pc3NpbmcgY2xvc2UgYnJhY2VzIGluICRmaWxlX25hbWUgKHByb2Jh
YmxlIHN0YXJ0IGF0ICRicmFjZV9zdGFydClcbiIgaWYgKCRpbl9icmFjZXMgPiAwKTsKKyAgICB3
YXJuICJ0b28gbWFueSBjbG9zZSBicmFjZXMgaW4gJGZpbGVfbmFtZSAocHJvYmFibGUgc3RhcnQg
YXQgJGJyYWNlX2VuZClcbiIgaWYgKCRpbl9icmFjZXMgPCAwKTsKKworICAgIHdhcm4gIm1pc21h
dGNoZWQgcGFyZW50aGVzZXMgaW4gJGZpbGVfbmFtZVxuIiBpZiAkaW5fcGFyZW50aGVzZXM7CisK
KyAgICByZXR1cm4gQHJhbmdlczsKK30KKworCisKKyMgUmVhZCBhIGZpbGUgYW5kIGdldCBhbGwg
dGhlIGxpbmUgcmFuZ2VzIG9mIHRoZSB0aGluZ3MgdGhhdCBsb29rIGxpa2UgSmF2YQorIyBjbGFz
c2VzLCBpbnRlcmZhY2VzIGFuZCBtZXRob2RzLgorIworIyBBIGNsYXNzIG9yIGludGVyZmFjZSBu
YW1lIGlzIHRoZSB3b3JkIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cworIyBgY2xhc3MnIG9yIGBp
bnRlcmZhY2UnIHdoZW4gZm9sbG93ZWQgYnkgYW4gb3BlbiBjdXJseSBicmFjZSBhbmQgbm90Cisj
IGEgc2VtaWNvbG9uLiBJdCBjYW4gYXBwZWFyIGF0IHRoZSB0b3AgbGV2ZWwsIG9yIGluc2lkZSBh
bm90aGVyIGNsYXNzCisjIG9yIGludGVyZmFjZSBibG9jaywgYnV0IG5vdCBpbnNpZGUgYSBmdW5j
dGlvbiBibG9jaworIworIyBBIGNsYXNzIG9yIGludGVyZmFjZSBzdGFydHMgYXQgdGhlIGZpcnN0
IGNoYXJhY3RlciBhZnRlciB0aGUgZmlyc3QgY2xvc2UKKyMgYnJhY2Ugb3IgYWZ0ZXIgdGhlIGZ1
bmN0aW9uIG5hbWUgYW5kIGVuZHMgYXQgdGhlIGNsb3NlIGJyYWNlLgorIworIyBBIGZ1bmN0aW9u
IG5hbWUgaXMgdGhlIGxhc3Qgd29yZCBiZWZvcmUgYW4gb3BlbiBwYXJlbnRoZXNpcyBiZWZvcmUK
KyMgYW4gb3BlbiBicmFjZSByYXRoZXIgdGhhbiBhIHNlbWljb2xvbi4gSXQgY2FuIGFwcGVhciBh
dCB0b3AgbGV2ZWwgb3IKKyMgaW5zaWRlIGEgY2xhc3Mgb3IgaW50ZXJmYWNlIGJsb2NrLCBidXQg
bm90IGluc2lkZSBhIGZ1bmN0aW9uIGJsb2NrLgorIworIyBBIGZ1bmN0aW9uIHN0YXJ0cyBhdCB0
aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBmaXJzdCBjbG9zZQorIyBicmFjZSBvciBhZnRl
ciB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgZW5kcyBhdCB0aGUgY2xvc2UgYnJhY2UuCisjCisjIENv
bW1lbnQgaGFuZGxpbmcgaXMgc2ltcGxlLW1pbmRlZCBidXQgd2lsbCB3b3JrIGZvciBhbGwgYnV0
IHBhdGhvbG9naWNhbCBjYXNlcy4KKyMKKyMgUmVzdWx0IGlzIGEgbGlzdCBvZiB0cmlwbGVzOiBb
IHN0YXJ0X2xpbmUsIGVuZF9saW5lLCBmdW5jdGlvbl9uYW1lIF0uCisKK3N1YiBnZXRfZnVuY3Rp
b25fbGluZV9yYW5nZXNfZm9yX2phdmEoJCQpCit7CisgICAgbXkgKCRmaWxlX2hhbmRsZSwgJGZp
bGVfbmFtZSkgPSBAXzsKKworICAgIG15IEBjdXJyZW50X3Njb3BlczsKKworICAgIG15IEByYW5n
ZXM7CisKKyAgICBteSAkaW5fY29tbWVudCA9IDA7CisgICAgbXkgJGluX21hY3JvID0gMDsKKyAg
ICBteSAkaW5fcGFyZW50aGVzZXMgPSAwOworICAgIG15ICRpbl9icmFjZXMgPSAwOworICAgIG15
ICRpbl9ub25fYmxvY2tfYnJhY2VzID0gMDsKKyAgICBteSAkY2xhc3Nfb3JfaW50ZXJmYWNlX2p1
c3Rfc2VlbiA9IDA7CisKKyAgICBteSAkd29yZCA9ICIiOworCisgICAgbXkgJHBvdGVudGlhbF9z
dGFydCA9IDA7CisgICAgbXkgJHBvdGVudGlhbF9uYW1lID0gIiI7CisgICAgbXkgJHBvdGVudGlh
bF9uYW1lX2lzX2NsYXNzX29yX2ludGVyZmFjZSA9IDA7CisKKyAgICBteSAkc3RhcnQgPSAwOwor
ICAgIG15ICRuYW1lID0gIiI7CisgICAgbXkgJGN1cnJlbnRfbmFtZV9pc19jbGFzc19vcl9pbnRl
cmZhY2UgPSAwOworCisgICAgd2hpbGUgKDwkZmlsZV9oYW5kbGU+KSB7CisgICAgICAgICMgSGFu
ZGxlIGNvbnRpbnVlZCBtdWx0aS1saW5lIGNvbW1lbnQuCisgICAgICAgIGlmICgkaW5fY29tbWVu
dCkgeworICAgICAgICAgICAgbmV4dCB1bmxlc3Mgcy0uKlwqLy0tOworICAgICAgICAgICAgJGlu
X2NvbW1lbnQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgIyBIYW5kbGUgY29udGludWVkIG1h
Y3JvLgorICAgICAgICBpZiAoJGluX21hY3JvKSB7CisgICAgICAgICAgICAkaW5fbWFjcm8gPSAw
IHVubGVzcyAvXFwkLzsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICAj
IEhhbmRsZSBzdGFydCBvZiBtYWNybyAob3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmUpLgor
ICAgICAgICBpZiAoL15ccypcIy8pIHsKKyAgICAgICAgICAgICRpbl9tYWNybyA9IDEgaWYgL14o
W15cXF18XFwuKSpcXCQvOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAg
ICMgSGFuZGxlIGNvbW1lbnRzIGFuZCBxdW90ZWQgdGV4dC4KKyAgICAgICAgd2hpbGUgKG0tKC9c
KnwvL3xcJ3xcIiktKSB7ICMgXCcgYW5kIFwiIGtlZXAgZW1hY3MgcGVybCBtb2RlIGhhcHB5Cisg
ICAgICAgICAgICBteSAkbWF0Y2ggPSAkMTsKKyAgICAgICAgICAgIGlmICgkbWF0Y2ggZXEgIi8q
IikgeworICAgICAgICAgICAgICAgIGlmICghcy0vXCouKj9cKi8tLSkgeworICAgICAgICAgICAg
ICAgICAgICBzLS9cKi4qLS07CisgICAgICAgICAgICAgICAgICAgICRpbl9jb21tZW50ID0gMTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2lmICgkbWF0Y2ggZXEgIi8vIikg
eworICAgICAgICAgICAgICAgIHMtLy8uKi0tOworICAgICAgICAgICAgfSBlbHNlIHsgIyAnIG9y
ICIKKyAgICAgICAgICAgICAgICBpZiAoIXMtJG1hdGNoKFteXFxdfFxcLikqPyRtYXRjaC0tKSB7
CisgICAgICAgICAgICAgICAgICAgIHdhcm4gIm1pc21hdGNoZWQgcXVvdGVzIGF0IGxpbmUgJC4g
aW4gJGZpbGVfbmFtZVxuIjsKKyAgICAgICAgICAgICAgICAgICAgcy0kbWF0Y2guKi0tOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICMgRmlu
ZCBmdW5jdGlvbiBuYW1lcy4KKyAgICAgICAgd2hpbGUgKG0tKFx3K3xbKCl7fTtdKS1nKSB7Cisg
ICAgICAgICAgICAjIE9wZW4gcGFyZW50aGVzaXMuCisgICAgICAgICAgICBpZiAoJDEgZXEgIigi
KSB7CisgICAgICAgICAgICAgICAgaWYgKCEkaW5fcGFyZW50aGVzZXMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgJHBvdGVudGlhbF9uYW1lID0gJHdvcmQ7CisgICAgICAgICAgICAgICAgICAgICRw
b3RlbnRpYWxfbmFtZV9pc19jbGFzc19vcl9pbnRlcmZhY2UgPSAwOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAkaW5fcGFyZW50aGVzZXMrKzsKKyAgICAgICAgICAgICAgICBu
ZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjIENsb3NlIHBhcmVudGhlc2lzLgor
ICAgICAgICAgICAgaWYgKCQxIGVxICIpIikgeworICAgICAgICAgICAgICAgICRpbl9wYXJlbnRo
ZXNlcy0tOworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICMgT3BlbiBicmFjZS4KKyAgICAgICAgICAgIGlmICgkMSBlcSAieyIpIHsKKyAgICAgICAg
ICAgICAgICAjIFByb21vdGUgcG90ZW50aWFsIG5hbWUgdG8gcmVhbCBmdW5jdGlvbiBuYW1lIGF0
IHRoZQorICAgICAgICAgICAgICAgICMgc3RhcnQgb2YgdGhlIG91dGVyIGxldmVsIHNldCBvZiBi
cmFjZXMgKGZ1bmN0aW9uL2NsYXNzL2ludGVyZmFjZSBib2R5PykuCisgICAgICAgICAgICAgICAg
aWYgKCEkaW5fbm9uX2Jsb2NrX2JyYWNlcworICAgICAgICAgICAgICAgICAgICBhbmQgKCEkaW5f
YnJhY2VzIG9yICRjdXJyZW50X25hbWVfaXNfY2xhc3Nfb3JfaW50ZXJmYWNlKQorICAgICAgICAg
ICAgICAgICAgICBhbmQgJHBvdGVudGlhbF9zdGFydCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoJG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAcmFuZ2VzLCBbICRz
dGFydCwgKCQuIC0gMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqb2luICgnLicsIEBjdXJyZW50X3Njb3BlcykgXTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisKKyAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRfbmFtZV9pc19jbGFzc19vcl9pbnRlcmZh
Y2UgPSAkcG90ZW50aWFsX25hbWVfaXNfY2xhc3Nfb3JfaW50ZXJmYWNlOworCisgICAgICAgICAg
ICAgICAgICAgICRzdGFydCA9ICRwb3RlbnRpYWxfc3RhcnQ7CisgICAgICAgICAgICAgICAgICAg
ICRuYW1lID0gJHBvdGVudGlhbF9uYW1lOworCisgICAgICAgICAgICAgICAgICAgIHB1c2ggKEBj
dXJyZW50X3Njb3BlcywgJG5hbWUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICRpbl9ub25fYmxvY2tfYnJhY2VzKys7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgJHBvdGVudGlhbF9uYW1lID0gIiI7CisgICAgICAgICAgICAgICAg
JHBvdGVudGlhbF9zdGFydCA9IDA7CisKKyAgICAgICAgICAgICAgICAkaW5fYnJhY2VzKys7Cisg
ICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyBDbG9z
ZSBicmFjZS4KKyAgICAgICAgICAgIGlmICgkMSBlcSAifSIpIHsKKyAgICAgICAgICAgICAgICAk
aW5fYnJhY2VzLS07CisKKyAgICAgICAgICAgICAgICAjIEVuZCBvZiBhbiBvdXRlciBsZXZlbCBz
ZXQgb2YgYnJhY2VzLgorICAgICAgICAgICAgICAgICMgVGhpcyBjb3VsZCBiZSBhIGZ1bmN0aW9u
IGJvZHkuCisgICAgICAgICAgICAgICAgaWYgKCEkaW5fbm9uX2Jsb2NrX2JyYWNlcykgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoJG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2ggQHJhbmdlcywgWyAkc3RhcnQsICQuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpvaW4gKCcuJywgQGN1cnJlbnRfc2NvcGVzKSBdOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBwb3AgKEBjdXJyZW50X3Njb3Blcyk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChAY3VycmVudF9zY29wZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
Y3VycmVudF9uYW1lX2lzX2NsYXNzX29yX2ludGVyZmFjZSA9IDE7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkc3RhcnQgPSAkLiArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJG5hbWUgPSAgJGN1cnJlbnRfc2NvcGVzWyQjY3VycmVudF9zY29wZXMtMV07CisgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRj
dXJyZW50X25hbWVfaXNfY2xhc3Nfb3JfaW50ZXJmYWNlID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAkc3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1l
ID0gICIiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJGluX25vbl9i
bG9ja19icmFjZXMtLSBpZiAkaW5fbm9uX2Jsb2NrX2JyYWNlczsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAkcG90ZW50aWFsX3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAg
ICAkcG90ZW50aWFsX25hbWUgPSAiIjsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAjIFNlbWljb2xvbi4KKyAgICAgICAgICAgIGlmICgkMSBlcSAi
OyIpIHsKKyAgICAgICAgICAgICAgICAkcG90ZW50aWFsX3N0YXJ0ID0gMDsKKyAgICAgICAgICAg
ICAgICAkcG90ZW50aWFsX25hbWUgPSAiIjsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoJDEgZXEgImNsYXNzIiBvciAkMSBlcSAiaW50ZXJm
YWNlIikgeworICAgICAgICAgICAgICAgICRjbGFzc19vcl9pbnRlcmZhY2VfanVzdF9zZWVuID0g
MTsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAj
IFdvcmQuCisgICAgICAgICAgICAkd29yZCA9ICQxOworICAgICAgICAgICAgaWYgKCEkaW5fcGFy
ZW50aGVzZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoJGNsYXNzX29yX2ludGVyZmFjZV9qdXN0
X3NlZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgJHBvdGVudGlhbF9uYW1lID0gJHdvcmQ7Cisg
ICAgICAgICAgICAgICAgICAgICRwb3RlbnRpYWxfc3RhcnQgPSAkLjsKKyAgICAgICAgICAgICAg
ICAgICAgJGNsYXNzX29yX2ludGVyZmFjZV9qdXN0X3NlZW4gPSAwOworICAgICAgICAgICAgICAg
ICAgICAkcG90ZW50aWFsX25hbWVfaXNfY2xhc3Nfb3JfaW50ZXJmYWNlID0gMTsKKyAgICAgICAg
ICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoISRwb3RlbnRpYWxfc3RhcnQpIHsKKyAgICAgICAgICAgICAgICAkcG90ZW50
aWFsX3N0YXJ0ID0gJC47CisgICAgICAgICAgICAgICAgJHBvdGVudGlhbF9uYW1lID0gIiI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAkY2xhc3Nfb3JfaW50ZXJmYWNlX2p1c3Rfc2VlbiA9
IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3YXJuICJtaXNtYXRjaGVkIGJyYWNlcyBpbiAk
ZmlsZV9uYW1lXG4iIGlmICRpbl9icmFjZXM7CisgICAgd2FybiAibWlzbWF0Y2hlZCBwYXJlbnRo
ZXNlcyBpbiAkZmlsZV9uYW1lXG4iIGlmICRpbl9wYXJlbnRoZXNlczsKKworICAgIHJldHVybiBA
cmFuZ2VzOworfQorCisKKworIyBSZWFkIGEgZmlsZSBhbmQgZ2V0IGFsbCB0aGUgbGluZSByYW5n
ZXMgb2YgdGhlIHRoaW5ncyB0aGF0IGxvb2sgbGlrZQorIyBKYXZhU2NyaXB0IGZ1bmN0aW9ucy4K
KyMKKyMgQSBmdW5jdGlvbiBuYW1lIGlzIHRoZSB3b3JkIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93
cyBgZnVuY3Rpb24nIHdoZW4KKyMgZm9sbG93ZWQgYnkgYW4gb3BlbiBjdXJseSBicmFjZS4gSXQg
Y2FuIGFwcGVhciBhdCB0aGUgdG9wIGxldmVsLCBvcgorIyBpbnNpZGUgb3RoZXIgZnVuY3Rpb25z
LgorIworIyBBbiBhbm9ueW1vdXMgZnVuY3Rpb24gbmFtZSBpcyB0aGUgaWRlbnRpZmllciBjaGFp
biBpbW1lZGlhdGVseSBiZWZvcmUKKyMgYW4gYXNzaWdubWVudCB3aXRoIHRoZSBlcXVhbHMgb3Bl
cmF0b3Igb3Igb2JqZWN0IG5vdGF0aW9uIHRoYXQgaGFzIGEKKyMgdmFsdWUgc3RhcnRpbmcgd2l0
aCBgZnVuY3Rpb24nIGZvbGxvd2VkIGJ5IGFuIG9wZW4gY3VybHkgYnJhY2UuCisjCisjIEEgZ2V0
dGVyIG9yIHNldHRlciBuYW1lIGlzIHRoZSB3b3JkIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cyBg
Z2V0JyBvcgorIyBgc2V0JyB3aGVuIGZvbGxvd2VkIGJ5IGFuIG9wZW4gY3VybHkgYnJhY2UgLgor
IworIyBDb21tZW50IGhhbmRsaW5nIGlzIHNpbXBsZS1taW5kZWQgYnV0IHdpbGwgd29yayBmb3Ig
YWxsIGJ1dCBwYXRob2xvZ2ljYWwgY2FzZXMuCisjCisjIFJlc3VsdCBpcyBhIGxpc3Qgb2YgdHJp
cGxlczogWyBzdGFydF9saW5lLCBlbmRfbGluZSwgZnVuY3Rpb25fbmFtZSBdLgorCitzdWIgZ2V0
X2Z1bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9qYXZhc2NyaXB0KCQkKQoreworICAgIG15ICgkZmls
ZUhhbmRsZSwgJGZpbGVOYW1lKSA9IEBfOworCisgICAgbXkgQGN1cnJlbnRTY29wZXM7CisgICAg
bXkgQGN1cnJlbnRJZGVudGlmaWVyczsKKyAgICBteSBAY3VycmVudEZ1bmN0aW9uTmFtZXM7Cisg
ICAgbXkgQGN1cnJlbnRGdW5jdGlvbkRlcHRoczsKKyAgICBteSBAY3VycmVudEZ1bmN0aW9uU3Rh
cnRMaW5lczsKKworICAgIG15IEByYW5nZXM7CisKKyAgICBteSAkaW5Db21tZW50ID0gMDsKKyAg
ICBteSAkaW5RdW90ZWRUZXh0ID0gIiI7CisgICAgbXkgJHBhcmVudGhlc2VzRGVwdGggPSAwOwor
ICAgIG15ICRicmFjZXNEZXB0aCA9IDA7CisKKyAgICBteSAkZnVuY3Rpb25KdXN0U2VlbiA9IDA7
CisgICAgbXkgJGdldHRlckp1c3RTZWVuID0gMDsKKyAgICBteSAkc2V0dGVySnVzdFNlZW4gPSAw
OworICAgIG15ICRhc3NpZ25tZW50SnVzdFNlZW4gPSAwOworCisgICAgbXkgJHdvcmQgPSAiIjsK
KworICAgIHdoaWxlICg8JGZpbGVIYW5kbGU+KSB7CisgICAgICAgICMgSGFuZGxlIGNvbnRpbnVl
ZCBtdWx0aS1saW5lIGNvbW1lbnQuCisgICAgICAgIGlmICgkaW5Db21tZW50KSB7CisgICAgICAg
ICAgICBuZXh0IHVubGVzcyBzLS4qXCovLS07CisgICAgICAgICAgICAkaW5Db21tZW50ID0gMDsK
KyAgICAgICAgfQorCisgICAgICAgICMgSGFuZGxlIGNvbnRpbnVlZCBxdW90ZWQgdGV4dC4KKyAg
ICAgICAgaWYgKCRpblF1b3RlZFRleHQgbmUgIiIpIHsKKyAgICAgICAgICAgIG5leHQgaWYgL1xc
JC87CisgICAgICAgICAgICBzLShbXlxcXXxcXC4pKj8kaW5RdW90ZWRUZXh0LS07CisgICAgICAg
ICAgICAkaW5RdW90ZWRUZXh0ID0gIiI7CisgICAgICAgIH0KKworICAgICAgICAjIEhhbmRsZSBj
b21tZW50cyBhbmQgcXVvdGVkIHRleHQuCisgICAgICAgIHdoaWxlIChtLSgvXCp8Ly98XCd8XCIp
LSkgeyAjIFwnIGFuZCBcIiBrZWVwIGVtYWNzIHBlcmwgbW9kZSBoYXBweQorICAgICAgICAgICAg
bXkgJG1hdGNoID0gJDE7CisgICAgICAgICAgICBpZiAoJG1hdGNoIGVxICcvKicpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXMtL1wqLio/XCovLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgcy0v
XCouKi0tOworICAgICAgICAgICAgICAgICAgICAkaW5Db21tZW50ID0gMTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2lmICgkbWF0Y2ggZXEgJy8vJykgeworICAgICAgICAg
ICAgICAgIHMtLy8uKi0tOworICAgICAgICAgICAgfSBlbHNlIHsgIyAnIG9yICIKKyAgICAgICAg
ICAgICAgICBpZiAoIXMtJG1hdGNoKFteXFxdfFxcLikqPyRtYXRjaC0tKSB7CisgICAgICAgICAg
ICAgICAgICAgICRpblF1b3RlZFRleHQgPSAkbWF0Y2ggaWYgL1xcJC87CisgICAgICAgICAgICAg
ICAgICAgIHdhcm4gIm1pc21hdGNoZWQgcXVvdGVzIGF0IGxpbmUgJC4gaW4gJGZpbGVOYW1lXG4i
IGlmICRpblF1b3RlZFRleHQgZXEgIiI7CisgICAgICAgICAgICAgICAgICAgIHMtJG1hdGNoLiot
LTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAjIEZpbmQgZnVuY3Rpb24gbmFtZXMuCisgICAgICAgIHdoaWxlIChtLShcdyt8Wygpe309Ojtd
KS1nKSB7CisgICAgICAgICAgICAjIE9wZW4gcGFyZW50aGVzaXMuCisgICAgICAgICAgICBpZiAo
JDEgZXEgJygnKSB7CisgICAgICAgICAgICAgICAgJHBhcmVudGhlc2VzRGVwdGgrKzsKKyAgICAg
ICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjIENsb3NlIHBh
cmVudGhlc2lzLgorICAgICAgICAgICAgaWYgKCQxIGVxICcpJykgeworICAgICAgICAgICAgICAg
ICRwYXJlbnRoZXNlc0RlcHRoLS07CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgIyBPcGVuIGJyYWNlLgorICAgICAgICAgICAgaWYgKCQxIGVxICd7
JykgeworICAgICAgICAgICAgICAgIHB1c2goQGN1cnJlbnRTY29wZXMsIGpvaW4oIi4iLCBAY3Vy
cmVudElkZW50aWZpZXJzKSk7CisgICAgICAgICAgICAgICAgQGN1cnJlbnRJZGVudGlmaWVycyA9
ICgpOworCisgICAgICAgICAgICAgICAgJGJyYWNlc0RlcHRoKys7CisgICAgICAgICAgICAgICAg
bmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyBDbG9zZSBicmFjZS4KKyAgICAg
ICAgICAgIGlmICgkMSBlcSAnfScpIHsKKyAgICAgICAgICAgICAgICAkYnJhY2VzRGVwdGgtLTsK
KworICAgICAgICAgICAgICAgIGlmIChAY3VycmVudEZ1bmN0aW9uRGVwdGhzIGFuZCAkYnJhY2Vz
RGVwdGggPT0gJGN1cnJlbnRGdW5jdGlvbkRlcHRoc1skI2N1cnJlbnRGdW5jdGlvbkRlcHRoc10p
IHsKKyAgICAgICAgICAgICAgICAgICAgcG9wKEBjdXJyZW50RnVuY3Rpb25EZXB0aHMpOworCisg
ICAgICAgICAgICAgICAgICAgIG15ICRjdXJyZW50RnVuY3Rpb24gPSBwb3AoQGN1cnJlbnRGdW5j
dGlvbk5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgbXkgJHN0YXJ0ID0gcG9wKEBjdXJyZW50
RnVuY3Rpb25TdGFydExpbmVzKTsKKworICAgICAgICAgICAgICAgICAgICBwdXNoKEByYW5nZXMs
IFskc3RhcnQsICQuLCAkY3VycmVudEZ1bmN0aW9uXSk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgcG9wKEBjdXJyZW50U2NvcGVzKTsKKyAgICAgICAgICAgICAgICBAY3Vy
cmVudElkZW50aWZpZXJzID0gKCk7CisKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAjIFNlbWljb2xvbi4KKyAgICAgICAgICAgIGlmICgkMSBlcSAn
OycpIHsKKyAgICAgICAgICAgICAgICBAY3VycmVudElkZW50aWZpZXJzID0gKCk7CisgICAgICAg
ICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyBGdW5jdGlvbi4K
KyAgICAgICAgICAgIGlmICgkMSBlcSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAgICAgJGZ1
bmN0aW9uSnVzdFNlZW4gPSAxOworCisgICAgICAgICAgICAgICAgaWYgKCRhc3NpZ25tZW50SnVz
dFNlZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGN1cnJlbnRGdW5jdGlvbiA9IGpvaW4o
Jy4nLCAoQGN1cnJlbnRTY29wZXMsIEBjdXJyZW50SWRlbnRpZmllcnMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgJGN1cnJlbnRGdW5jdGlvbiA9fiBzL1wuezIsfS9cLi9nOyAjIFJlbW92ZXMgY29u
c2VjdXRpdmUgcGVyaW9kcy4KKworICAgICAgICAgICAgICAgICAgICBwdXNoKEBjdXJyZW50RnVu
Y3Rpb25OYW1lcywgJGN1cnJlbnRGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHB1c2go
QGN1cnJlbnRGdW5jdGlvbkRlcHRocywgJGJyYWNlc0RlcHRoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAY3VycmVudEZ1bmN0aW9uU3RhcnRMaW5lcywgJC4pOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICMgR2V0dGVyIHByZWZpeC4KKyAgICAgICAgICAgIGlmICgkMSBlcSAnZ2V0JykgeworICAgICAg
ICAgICAgICAgICRnZXR0ZXJKdXN0U2VlbiA9IDE7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgIyBTZXR0ZXIgcHJlZml4LgorICAgICAgICAgICAg
aWYgKCQxIGVxICdzZXQnKSB7CisgICAgICAgICAgICAgICAgJHNldHRlckp1c3RTZWVuID0gMTsK
KyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjIEFz
c2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgICAgICBpZiAoJDEgZXEgJz0nIG9yICQxIGVxICc6
JykgeworICAgICAgICAgICAgICAgICRhc3NpZ25tZW50SnVzdFNlZW4gPSAxOworICAgICAgICAg
ICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5leHQgaWYgJHBhcmVu
dGhlc2VzRGVwdGg7CisKKyAgICAgICAgICAgICMgV29yZC4KKyAgICAgICAgICAgICR3b3JkID0g
JDE7CisgICAgICAgICAgICAkd29yZCA9ICJnZXQgJHdvcmQiIGlmICRnZXR0ZXJKdXN0U2VlbjsK
KyAgICAgICAgICAgICR3b3JkID0gInNldCAkd29yZCIgaWYgJHNldHRlckp1c3RTZWVuOworCisg
ICAgICAgICAgICBpZiAoKCRmdW5jdGlvbkp1c3RTZWVuIGFuZCAhJGFzc2lnbm1lbnRKdXN0U2Vl
bikgb3IgJGdldHRlckp1c3RTZWVuIG9yICRzZXR0ZXJKdXN0U2VlbikgeworICAgICAgICAgICAg
ICAgIHB1c2goQGN1cnJlbnRJZGVudGlmaWVycywgJHdvcmQpOworCisgICAgICAgICAgICAgICAg
bXkgJGN1cnJlbnRGdW5jdGlvbiA9IGpvaW4oJy4nLCAoQGN1cnJlbnRTY29wZXMsIEBjdXJyZW50
SWRlbnRpZmllcnMpKTsKKyAgICAgICAgICAgICAgICAkY3VycmVudEZ1bmN0aW9uID1+IHMvXC57
Mix9L1wuL2c7ICMgUmVtb3ZlcyBjb25zZWN1dGl2ZSBwZXJpb2RzLgorCisgICAgICAgICAgICAg
ICAgcHVzaChAY3VycmVudEZ1bmN0aW9uTmFtZXMsICRjdXJyZW50RnVuY3Rpb24pOworICAgICAg
ICAgICAgICAgIHB1c2goQGN1cnJlbnRGdW5jdGlvbkRlcHRocywgJGJyYWNlc0RlcHRoKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBjdXJyZW50RnVuY3Rpb25TdGFydExpbmVzLCAkLik7CisgICAg
ICAgICAgICB9IGVsc2lmICgkd29yZCBuZSAnaWYnIGFuZCAkd29yZCBuZSAnZm9yJyBhbmQgJHdv
cmQgbmUgJ2RvJyBhbmQgJHdvcmQgbmUgJ3doaWxlJyBhbmQgJHdvcmQgbmUgJ3doaWNoJyBhbmQg
JHdvcmQgbmUgJ3ZhcicpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBjdXJyZW50SWRlbnRpZmll
cnMsICR3b3JkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgJGZ1bmN0aW9uSnVzdFNl
ZW4gPSAwOworICAgICAgICAgICAgJGdldHRlckp1c3RTZWVuID0gMDsKKyAgICAgICAgICAgICRz
ZXR0ZXJKdXN0U2VlbiA9IDA7CisgICAgICAgICAgICAkYXNzaWdubWVudEp1c3RTZWVuID0gMDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHdhcm4gIm1pc21hdGNoZWQgYnJhY2VzIGluICRmaWxl
TmFtZVxuIiBpZiAkYnJhY2VzRGVwdGg7CisgICAgd2FybiAibWlzbWF0Y2hlZCBwYXJlbnRoZXNl
cyBpbiAkZmlsZU5hbWVcbiIgaWYgJHBhcmVudGhlc2VzRGVwdGg7CisKKyAgICByZXR1cm4gQHJh
bmdlczsKK30KKworIyBSZWFkIGEgZmlsZSBhbmQgZ2V0IGFsbCB0aGUgbGluZSByYW5nZXMgb2Yg
dGhlIHRoaW5ncyB0aGF0IGxvb2sgbGlrZSBQZXJsIGZ1bmN0aW9ucy4gRnVuY3Rpb25zCisjIHN0
YXJ0IG9uIGEgbGluZSB0aGF0IHN0YXJ0cyB3aXRoICJzdWIgIiwgYW5kIGVuZCBvbiB0aGUgZmly
c3QgbGluZSBzdGFydGluZyB3aXRoICJ9IiB0aGVyZWFmdGVyLgorIworIyBSZXN1bHQgaXMgYSBs
aXN0IG9mIHRyaXBsZXM6IFsgc3RhcnRfbGluZSwgZW5kX2xpbmUsIGZ1bmN0aW9uIF0uCisKK3N1
YiBnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNfZm9yX3BlcmwoJCQpCit7CisgICAgbXkgKCRmaWxl
SGFuZGxlLCAkZmlsZU5hbWUpID0gQF87CisKKyAgICBteSBAcmFuZ2VzOworCisgICAgbXkgJGN1
cnJlbnRGdW5jdGlvbiA9ICIiOworICAgIG15ICRzdGFydCA9IDA7CisKKyAgICB3aGlsZSAoPCRm
aWxlSGFuZGxlPikgeworICAgICAgICBpZiAoL15zdWJccysoW14oXHNdKykvKSB7CisgICAgICAg
ICAgICAjIFNraXAgb3ZlciBmb3J3YXJkIGRlY2xhcmF0aW9ucywgd2hpY2ggZG9uJ3QgY29udGFp
biBhIGJyYWNlIGFuZCBlbmQgd2l0aCBhIHNlbWljb2xvbi4KKyAgICAgICAgICAgIG5leHQgaWYg
IS97LyAmJiAvOyQvOworCisgICAgICAgICAgICBpZiAoJGN1cnJlbnRGdW5jdGlvbikgeworICAg
ICAgICAgICAgICAgIHdhcm4gIm5lc3RlZCBmdW5jdGlvbnMgZm91bmQgYXQgdG9wLWxldmVsIGF0
ICRmaWxlTmFtZTokLlxuIjsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgJGN1cnJlbnRGdW5jdGlvbiA9ICQxOworICAgICAgICAgICAgJHN0YXJ0ID0g
JC47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZGV4KCRfLCAifSIpID09IDApIHsKKyAgICAg
ICAgICAgIG5leHQgdW5sZXNzICRzdGFydDsKKyAgICAgICAgICAgIHB1c2goQHJhbmdlcywgWyRz
dGFydCwgJC4sICRjdXJyZW50RnVuY3Rpb25dKTsKKyAgICAgICAgICAgICRjdXJyZW50RnVuY3Rp
b24gPSAiIjsKKyAgICAgICAgICAgICRzdGFydCA9IDA7CisgICAgICAgICAgICBuZXh0OworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEByYW5nZXM7Cit9CisKKyMgUmVhZCBhIGZpbGUg
YW5kIGdldCBhbGwgdGhlIGxpbmUgcmFuZ2VzIG9mIHRoZSB0aGluZ3MgdGhhdCBsb29rIGxpa2Ug
UHl0aG9uIGNsYXNzZXMsIG1ldGhvZHMsIG9yIGZ1bmN0aW9ucy4KKyMKKyMgRklYTUU6IE1heWJl
IHdlIHNob3VsZCB1c2UgUHl0aG9uJ3MgYXN0IG1vZHVsZSB0byBkbyB0aGUgcGFyc2luZyBmb3Ig
dXM/CisjCisjIFJlc3VsdCBpcyBhIGxpc3Qgb2YgdHJpcGxlczogWyBzdGFydF9saW5lLCBlbmRf
bGluZSwgZnVuY3Rpb24gXS4KKworc3ViIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfcHl0
aG9uKCQkKQoreworICAgIG15ICgkZmlsZUhhbmRsZSwgJGZpbGVOYW1lKSA9IEBfOworCisgICAg
bXkgQHJhbmdlczsKKworICAgIG15IEBzY29wZVN0YWNrID0gKHsgbGluZSA9PiAwLCBpbmRlbnQg
PT4gLTEsIG5hbWUgPT4gdW5kZWYgfSk7CisgICAgd2hpbGUgKDwkZmlsZUhhbmRsZT4pIHsKKyAg
ICAgICAgbmV4dCB1bmxlc3MgL14oXHMqKShcUy4qKSQvOworICAgICAgICBteSAkaW5kZW50ID0g
bGVuZ3RoICQxOworICAgICAgICBteSAkcmVzdCA9ICQyOworCisgICAgICAgIG15ICRzY29wZSA9
ICRzY29wZVN0YWNrWy0xXTsKKworICAgICAgICBpZiAoJGluZGVudCA8PSAkc2NvcGUtPntpbmRl
bnR9KSB7CisgICAgICAgICAgICAjIEZpbmQgYWxsIHRoZSBzY29wZXMgdGhhdCB3ZSBoYXZlIGp1
c3QgZXhpdGVkLgorICAgICAgICAgICAgbXkgJGkgPSAwOworICAgICAgICAgICAgZm9yICg7ICRp
IDwgQHNjb3BlU3RhY2s7ICsrJGkpIHsKKyAgICAgICAgICAgICAgICBsYXN0IGlmICRpbmRlbnQg
PD0gJHNjb3BlU3RhY2tbJGldLT57aW5kZW50fTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG15IEBwb3BwZWRTY29wZXMgPSBzcGxpY2UgQHNjb3BlU3RhY2ssICRpOworCisgICAgICAgICAg
ICAjIEZvciBlYWNoIHNjb3BlIHRoYXQgd2FzIGp1c3QgZXhpdGVkLCBhZGQgYSByYW5nZSB0aGF0
IGdvZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhhdAorICAgICAgICAgICAgIyBzY29wZSB0byB0aGUg
c3RhcnQgb2YgdGhlIG5leHQgbmVzdGVkIHNjb3BlLCBvciB0byB0aGUgbGluZSBqdXN0IGJlZm9y
ZSB0aGlzIG9uZSBmb3IKKyAgICAgICAgICAgICMgdGhlIGlubmVybW9zdCBzY29wZS4KKyAgICAg
ICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IEBwb3BwZWRTY29wZXM7ICsrJGkpIHsKKyAgICAgICAg
ICAgICAgICBteSAkbGluZUFmdGVyRW5kID0gJGkgKyAxID09IEBwb3BwZWRTY29wZXMgPyAkLiA6
ICRwb3BwZWRTY29wZXNbJGkgKyAxXS0+e2xpbmV9OworICAgICAgICAgICAgICAgIHB1c2ggQHJh
bmdlcywgWyRwb3BwZWRTY29wZXNbJGldLT57bGluZX0sICRsaW5lQWZ0ZXJFbmQgLSAxLCAkcG9w
cGVkU2NvcGVzWyRpXS0+e25hbWV9XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEBzY29w
ZVN0YWNrIG9yIHdhcm4gIlBvcHBlZCBvZmYgbGFzdCBzY29wZSBhdCAkZmlsZU5hbWU6JC5cbiI7
CisKKyAgICAgICAgICAgICMgU2V0IHRoZSBub3ctY3VycmVudCBzY29wZSB0byBzdGFydCBhdCB0
aGUgY3VycmVudCBsaW5lLiBBbnkgbGluZXMgd2l0aGluIHRoaXMgc2NvcGUKKyAgICAgICAgICAg
ICMgYmVmb3JlIHRoaXMgcG9pbnQgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGFkZGVkIHRvIEBy
YW5nZXMuCisgICAgICAgICAgICAkc2NvcGUgPSAkc2NvcGVTdGFja1stMV07CisgICAgICAgICAg
ICAkc2NvcGUtPntsaW5lfSA9ICQuOworICAgICAgICB9CisKKyAgICAgICAgbmV4dCB1bmxlc3Mg
JHJlc3QgPX4gLyg/OmNsYXNzfGRlZilccysoXHcrKS87CisgICAgICAgIG15ICRuYW1lID0gJDE7
CisKKyAgICAgICAgbXkgJGZ1bGxOYW1lID0gJHNjb3BlLT57bmFtZX0gPyBqb2luKCcuJywgJHNj
b3BlLT57bmFtZX0sICRuYW1lKSA6ICRuYW1lOworICAgICAgICBwdXNoIEBzY29wZVN0YWNrLCB7
IGxpbmUgPT4gJC4sIGluZGVudCA9PiAkaW5kZW50LCBuYW1lID0+ICRmdWxsTmFtZSB9OworICAg
IH0KKworICAgIHJldHVybiBAcmFuZ2VzOworfQorCisjIFJlYWQgYSBmaWxlIGFuZCBnZXQgYWxs
IHRoZSBsaW5lIHJhbmdlcyBvZiB0aGUgdGhpbmdzIHRoYXQgbG9vayBsaWtlIENTUyBzZWxlY3Rv
cnMuICBBIHNlbGVjdG9yIGlzCisjIGFueXRoaW5nIGJlZm9yZSBhbiBvcGVuaW5nIGJyYWNlIG9u
IGEgbGluZS4gQSBzZWxlY3RvciBzdGFydHMgYXQgdGhlIGxpbmUgY29udGFpbmluZyB0aGUgb3Bl
bmluZworIyBicmFjZSBhbmQgZW5kcyBhdCB0aGUgY2xvc2luZyBicmFjZS4KKyMgRklYTUU6IENv
bW1lbnRzIGFyZSBwYXJzZWQganVzdCBsaWtlIHVuY29tbWVudGVkIHRleHQuCisjCisjIFJlc3Vs
dCBpcyBhIGxpc3Qgb2YgdHJpcGxlczogWyBzdGFydF9saW5lLCBlbmRfbGluZSwgc2VsZWN0b3Ig
XS4KKworc3ViIGdldF9zZWxlY3Rvcl9saW5lX3Jhbmdlc19mb3JfY3NzKCQkKQoreworICAgIG15
ICgkZmlsZUhhbmRsZSwgJGZpbGVOYW1lKSA9IEBfOworCisgICAgbXkgQHJhbmdlczsKKworICAg
IG15ICRjdXJyZW50U2VsZWN0b3IgPSAiIjsKKyAgICBteSAkc3RhcnQgPSAwOworCisgICAgd2hp
bGUgKDwkZmlsZUhhbmRsZT4pIHsKKyAgICAgICAgaWYgKC9eWyBcdF0qKC4qW14gXHRdKVsgXHRd
KnsvKSB7CisgICAgICAgICAgICAkY3VycmVudFNlbGVjdG9yID0gJDE7CisgICAgICAgICAgICAk
c3RhcnQgPSAkLjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5kZXgoJF8sICJ9IikgPj0gMCkg
eworICAgICAgICAgICAgdW5sZXNzICgkc3RhcnQpIHsKKyAgICAgICAgICAgICAgICB3YXJuICJt
aXNtYXRjaGVkIGJyYWNlcyBpbiAkZmlsZU5hbWVcbiI7CisgICAgICAgICAgICAgICAgbmV4dDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1c2goQHJhbmdlcywgWyRzdGFydCwgJC4sICRj
dXJyZW50U2VsZWN0b3JdKTsKKyAgICAgICAgICAgICRjdXJyZW50U2VsZWN0b3IgPSAiIjsKKyAg
ICAgICAgICAgICRzdGFydCA9IDA7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIEByYW5nZXM7Cit9CisKK3N1YiBwcm9jZXNzUGF0aHMoXEApCit7Cisg
ICAgbXkgKCRwYXRocykgPSBAXzsKKyAgICByZXR1cm4gKCIuIiA9PiAxKSBpZiAoIUB7JHBhdGhz
fSk7CisKKyAgICBteSAlcmVzdWx0ID0gKCk7CisKKyAgICBmb3IgbXkgJGZpbGUgKEB7JHBhdGhz
fSkgeworICAgICAgICBkaWUgImNhbid0IGhhbmRsZSBhYnNvbHV0ZSBwYXRocyBsaWtlIFwiJGZp
bGVcIlxuIiBpZiBGaWxlOjpTcGVjLT5maWxlX25hbWVfaXNfYWJzb2x1dGUoJGZpbGUpOworICAg
ICAgICBkaWUgImNhbid0IGhhbmRsZSBlbXB0eSBzdHJpbmcgcGF0aFxuIiBpZiAkZmlsZSBlcSAi
IjsKKyAgICAgICAgZGllICJjYW4ndCBoYW5kbGUgcGF0aCB3aXRoIHNpbmdsZSBxdW90ZSBpbiB0
aGUgbmFtZSBsaWtlIFwiJGZpbGVcIlxuIiBpZiAkZmlsZSA9fiAvJy87ICMgJyAoa2VlcCBYY29k
ZSBzeW50YXggaGlnaGxpZ2h0aW5nIGhhcHB5KQorCisgICAgICAgIG15ICR1bnRvdWNoZWRGaWxl
ID0gJGZpbGU7CisKKyAgICAgICAgJGZpbGUgPSBjYW5vbmljYWxpemVQYXRoKCRmaWxlKTsKKwor
ICAgICAgICBkaWUgImNhbid0IGhhbmRsZSBwYXRocyB3aXRoIC4uIGxpa2UgXCIkdW50b3VjaGVk
RmlsZVwiXG4iIGlmICRmaWxlID1+IG18L1wuXC4vfDsKKworICAgICAgICAkcmVzdWx0eyRmaWxl
fSA9IDE7CisgICAgfQorCisgICAgcmV0dXJuICgiLiIgPT4gMSkgaWYgKCRyZXN1bHR7Ii4ifSk7
CisKKyAgICAjIFJlbW92ZSBhbnkgcGF0aHMgdGhhdCBhbHNvIGhhdmUgYSBwYXJlbnQgbGlzdGVk
LgorICAgIGZvciBteSAkcGF0aCAoa2V5cyAlcmVzdWx0KSB7CisgICAgICAgIGZvciAobXkgJHBh
cmVudCA9IGRpcm5hbWUoJHBhdGgpOyAkcGFyZW50IG5lICcuJzsgJHBhcmVudCA9IGRpcm5hbWUo
JHBhcmVudCkpIHsKKyAgICAgICAgICAgIGlmICgkcmVzdWx0eyRwYXJlbnR9KSB7CisgICAgICAg
ICAgICAgICAgZGVsZXRlICRyZXN1bHR7JHBhdGh9OworICAgICAgICAgICAgICAgIGxhc3Q7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gJXJlc3VsdDsKK30K
Kworc3ViIGRpZmZGcm9tVG9TdHJpbmcoKQoreworICAgIHJldHVybiAiIiBpZiAkaXNTVk47Cisg
ICAgcmV0dXJuICRnaXRDb21taXQgaWYgJGdpdENvbW1pdCA9fiBtLy4rXC5cLi4rLzsKKyAgICBy
ZXR1cm4gIlwiJGdpdENvbW1pdF5cIiBcIiRnaXRDb21taXRcIiIgaWYgJGdpdENvbW1pdDsKKyAg
ICByZXR1cm4gIi0tY2FjaGVkIiBpZiAkZ2l0SW5kZXg7CisgICAgcmV0dXJuICRtZXJnZUJhc2Ug
aWYgJG1lcmdlQmFzZTsKKyAgICByZXR1cm4gIkhFQUQiIGlmICRpc0dpdDsKK30KKworc3ViIGRp
ZmZDb21tYW5kKEApCit7CisgICAgbXkgQHBhdGhzID0gQF87CisKKyAgICBteSAkcGF0aHNTdHJp
bmcgPSAiJyIgLiBqb2luKCInICciLCBAcGF0aHMpIC4gIiciOyAKKworICAgIG15ICRjb21tYW5k
OworICAgIGlmICgkaXNTVk4pIHsKKyAgICAgICAgJGNvbW1hbmQgPSAiJFNWTiBkaWZmIC0tZGlm
Zi1jbWQgZGlmZiAteCAtTiAkcGF0aHNTdHJpbmciOworICAgIH0gZWxzaWYgKCRpc0dpdCkgewor
ICAgICAgICAkY29tbWFuZCA9ICIkR0lUIGRpZmYgLS1uby1leHQtZGlmZiAtVTAgIiAuIGRpZmZG
cm9tVG9TdHJpbmcoKTsKKyAgICAgICAgJGNvbW1hbmQgLj0gIiAtLSAkcGF0aHNTdHJpbmciIHVu
bGVzcyAkZ2l0Q29tbWl0IG9yICRtZXJnZUJhc2U7CisgICAgfQorCisgICAgcmV0dXJuICRjb21t
YW5kOworfQorCitzdWIgc3RhdHVzQ29tbWFuZChAKQoreworICAgIG15IEBmaWxlcyA9IEBfOwor
CisgICAgbXkgJGZpbGVzU3RyaW5nID0gIlwiIiAuIGpvaW4gKCJcIiBcIiIsIEBmaWxlcykgLiAi
XCIiOworICAgIG15ICRjb21tYW5kOworICAgIGlmICgkaXNTVk4pIHsKKyAgICAgICAgJGNvbW1h
bmQgPSAiJFNWTiBzdGF0ICRmaWxlc1N0cmluZyI7CisgICAgfSBlbHNpZiAoJGlzR2l0KSB7Cisg
ICAgICAgICRjb21tYW5kID0gIiRHSVQgZGlmZiAtciAtLW5hbWUtc3RhdHVzIC1NIC1DICIgLiBk
aWZmRnJvbVRvU3RyaW5nKCk7CisgICAgICAgICRjb21tYW5kIC49ICIgLS0gJGZpbGVzU3RyaW5n
IiB1bmxlc3MgJGdpdENvbW1pdDsKKyAgICB9CisKKyAgICByZXR1cm4gIiRjb21tYW5kIDI+JjEi
OworfQorCitzdWIgY3JlYXRlUGF0Y2hDb21tYW5kKCQpCit7CisgICAgbXkgKCRjaGFuZ2VkRmls
ZXNTdHJpbmcpID0gQF87CisKKyAgICBteSAkY29tbWFuZDsKKyAgICBpZiAoJGlzU1ZOKSB7Cisg
ICAgICAgICRjb21tYW5kID0gIickRmluZEJpbjo6QmluL3N2bi1jcmVhdGUtcGF0Y2gnICRjaGFu
Z2VkRmlsZXNTdHJpbmciOworICAgIH0gZWxzaWYgKCRpc0dpdCkgeworICAgICAgICAkY29tbWFu
ZCA9ICIkR0lUIGRpZmYgLU0gLUMgIiAuIGRpZmZGcm9tVG9TdHJpbmcoKTsKKyAgICAgICAgJGNv
bW1hbmQgLj0gIiAtLSAkY2hhbmdlZEZpbGVzU3RyaW5nIiB1bmxlc3MgJGdpdENvbW1pdDsKKyAg
ICB9CisKKyAgICByZXR1cm4gJGNvbW1hbmQ7Cit9CisKK3N1YiBkaWZmSGVhZGVyRm9ybWF0KCkK
K3sKKyAgICByZXR1cm4gcXIvXkluZGV4OiAoXFMrKVtcclxuXSokLyBpZiAkaXNTVk47CisgICAg
cmV0dXJuIHFyL15kaWZmIC0tZ2l0IGFcLy4rIGJcLyguKykkLyBpZiAkaXNHaXQ7Cit9CisKK3N1
YiBmaW5kT3JpZ2luYWxGaWxlRnJvbVN2bigkKQoreworICAgIG15ICgkZmlsZSkgPSBAXzsKKyAg
ICBteSAkYmFzZVVybDsKKyAgICBvcGVuIElORk8sICIkU1ZOIGluZm8gLiB8IiBvciBkaWU7Cisg
ICAgd2hpbGUgKDxJTkZPPikgeworICAgICAgICBpZiAoL15VUkw6ICguKz8pW1xyXG5dKiQvKSB7
CisgICAgICAgICAgICAkYmFzZVVybCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIGNsb3Nl
IElORk87CisgICAgbXkgJHNvdXJjZUZpbGU7CisgICAgb3BlbiBJTkZPLCAiJFNWTiBpbmZvICck
ZmlsZScgfCIgb3IgZGllOworICAgIHdoaWxlICg8SU5GTz4pIHsKKyAgICAgICAgaWYgKC9eQ29w
aWVkIEZyb20gVVJMOiAoLis/KVtcclxuXSokLykgeworICAgICAgICAgICAgJHNvdXJjZUZpbGUg
PSBGaWxlOjpTcGVjLT5hYnMycmVsKCQxLCAkYmFzZVVybCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2xvc2UgSU5GTzsKKyAgICByZXR1cm4gJHNvdXJjZUZpbGU7Cit9CisKK3N1YiBkZXRlcm1p
bmVQcm9wZXJ0eUNoYW5nZXMoJCQkKQoreworICAgIG15ICgkZmlsZSwgJGlzQWRkLCAkb3JpZ2lu
YWwpID0gQF87CisKKyAgICBteSAlY2hhbmdlczsKKyAgICBpZiAoJGlzQWRkKSB7CisgICAgICAg
IG15ICVhZGRlZFByb3BlcnRpZXM7CisgICAgICAgIG15ICVyZW1vdmVkUHJvcGVydGllczsKKyAg
ICAgICAgb3BlbiBQUk9QTElTVCwgIiRTVk4gcHJvcGxpc3QgJyRmaWxlJyB8IiBvciBkaWU7Cisg
ICAgICAgIHdoaWxlICg8UFJPUExJU1Q+KSB7CisgICAgICAgICAgICAkYWRkZWRQcm9wZXJ0aWVz
eyQxfSA9IDEgaWYgL14gICguKz8pW1xyXG5dKiQvICYmICQxIG5lICdzdm46bWVyZ2VpbmZvJzsK
KyAgICAgICAgfQorICAgICAgICBjbG9zZSBQUk9QTElTVDsKKyAgICAgICAgaWYgKCRvcmlnaW5h
bCkgeworICAgICAgICAgICAgb3BlbiBQUk9QTElTVCwgIiRTVk4gcHJvcGxpc3QgJyRvcmlnaW5h
bCcgfCIgb3IgZGllOworICAgICAgICAgICAgd2hpbGUgKDxQUk9QTElTVD4pIHsKKyAgICAgICAg
ICAgICAgICBuZXh0IHVubGVzcyAvXiAgKC4rPylbXHJcbl0qJC87CisgICAgICAgICAgICAgICAg
bXkgJHByb3BlcnR5ID0gJDE7CisgICAgICAgICAgICAgICAgaWYgKGV4aXN0cyAkYWRkZWRQcm9w
ZXJ0aWVzeyRwcm9wZXJ0eX0pIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRhZGRlZFBy
b3BlcnRpZXN7JDF9OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICRyZW1vdmVkUHJvcGVydGllc3skMX0gPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAkY2hhbmdlc3siQSJ9ID0gW3NvcnQga2V5cyAl
YWRkZWRQcm9wZXJ0aWVzXSBpZiAlYWRkZWRQcm9wZXJ0aWVzOworICAgICAgICAkY2hhbmdlc3si
RCJ9ID0gW3NvcnQga2V5cyAlcmVtb3ZlZFByb3BlcnRpZXNdIGlmICVyZW1vdmVkUHJvcGVydGll
czsKKyAgICB9IGVsc2UgeworICAgICAgICBvcGVuIERJRkYsICIkU1ZOIGRpZmYgJyRmaWxlJyB8
IiBvciBkaWU7CisgICAgICAgIHdoaWxlICg8RElGRj4pIHsKKyAgICAgICAgICAgIGlmICgvXlBy
b3BlcnR5IGNoYW5nZXMgb246LykgeworICAgICAgICAgICAgICAgIHdoaWxlICg8RElGRj4pIHsK
KyAgICAgICAgICAgICAgICAgICAgbXkgJG9wZXJhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAg
bXkgJHByb3BlcnR5OworICAgICAgICAgICAgICAgICAgICBpZiAoL15BZGRlZDogKFxTKikvKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAkb3BlcmF0aW9uID0gIkEiOworICAgICAgICAgICAg
ICAgICAgICAgICAgJHByb3BlcnR5ID0gJDE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzaWYg
KC9eTW9kaWZpZWQ6IChcUyopLykgeworICAgICAgICAgICAgICAgICAgICAgICAgJG9wZXJhdGlv
biA9ICJNIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICRwcm9wZXJ0eSA9ICQxOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2lmICgvXkRlbGV0ZWQ6IChcUyopLykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgJG9wZXJhdGlvbiA9ICJEIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICRw
cm9wZXJ0eSA9ICQxOworICAgICAgICAgICAgICAgICAgICB9IGVsc2lmICgvXk5hbWU6IChcUyop
LykgeworICAgICAgICAgICAgICAgICAgICAgICAgIyBPbGRlciB2ZXJzaW9ucyBvZiBzdm4ganVz
dCBzYXkgIk5hbWUiIGluc3RlYWQgb2YgdGhlIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICMgb2YgcHJvcGVydHkgY2hhbmdlLgorICAgICAgICAgICAgICAgICAgICAgICAgJG9wZXJhdGlv
biA9ICJDIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICRwcm9wZXJ0eSA9ICQxOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgkb3BlcmF0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAkY2hhbmdlc3skb3BlcmF0aW9ufSA9IFtdIHVubGVzcyBl
eGlzdHMgJGNoYW5nZXN7JG9wZXJhdGlvbn07CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
IEB7JGNoYW5nZXN7JG9wZXJhdGlvbn19LCAkcHJvcGVydHk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
Y2xvc2UgRElGRjsKKyAgICB9CisgICAgcmV0dXJuIFwlY2hhbmdlczsKK30KKworc3ViIHBsdXJh
bGl6ZUFuZExpc3QoJCRAKQoreworICAgIG15ICgkc2luZ3VsYXIsICRwbHVyYWwsIEBpdGVtcykg
PSBAXzsKKworICAgIHJldHVybiBpZiBAaXRlbXMgPT0gMDsKKyAgICByZXR1cm4gIiRzaW5ndWxh
ciAkaXRlbXNbMF0iIGlmIEBpdGVtcyA9PSAxOworICAgIHJldHVybiAiJHBsdXJhbCAiIC4gam9p
bigiLCAiLCBAaXRlbXNbMCAuLiAkI2l0ZW1zIC0gMV0pIC4gIiBhbmQgIiAuICRpdGVtc1stMV07
Cit9CisKK3N1YiBnZW5lcmF0ZUZpbGVMaXN0KFxAXEBcJSkKK3sKKyAgICBteSAoJGNoYW5nZWRG
aWxlcywgJGNvbmZsaWN0RmlsZXMsICRmdW5jdGlvbkxpc3RzKSA9IEBfOworICAgIHByaW50IFNU
REVSUiAiICBSdW5uaW5nIHN0YXR1cyB0byBmaW5kIGNoYW5nZWQsIGFkZGVkLCBvciByZW1vdmVk
IGZpbGVzLlxuIjsKKyAgICBvcGVuIFNUQVQsICItfCIsIHN0YXR1c0NvbW1hbmQoa2V5cyAlcGF0
aHMpIG9yIGRpZSAiVGhlIHN0YXR1cyBmYWlsZWQ6ICQhLlxuIjsKKyAgICB3aGlsZSAoPFNUQVQ+
KSB7CisgICAgICAgIG15ICRzdGF0dXM7CisgICAgICAgIG15ICRwcm9wZXJ0eVN0YXR1czsKKyAg
ICAgICAgbXkgJHByb3BlcnR5Q2hhbmdlczsKKyAgICAgICAgbXkgJG9yaWdpbmFsOworICAgICAg
ICBteSAkZmlsZTsKKworICAgICAgICBpZiAoJGlzU1ZOKSB7CisgICAgICAgICAgICBteSAkbWF0
Y2hlczsKKyAgICAgICAgICAgIGlmIChpc1NWTlZlcnNpb24xNk9yTmV3ZXIoKSkgeworICAgICAg
ICAgICAgICAgICRtYXRjaGVzID0gL14oWyBBQ0RNUl0pKFsgQ01dKS57NX0gKC4rPylbXHJcbl0q
JC87CisgICAgICAgICAgICAgICAgJHN0YXR1cyA9ICQxOworICAgICAgICAgICAgICAgICRwcm9w
ZXJ0eVN0YXR1cyA9ICQyOworICAgICAgICAgICAgICAgICRmaWxlID0gJDM7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICRtYXRjaGVzID0gL14oWyBBQ0RNUl0pKFsgQ01d
KS57NH0gKC4rPylbXHJcbl0qJC87CisgICAgICAgICAgICAgICAgJHN0YXR1cyA9ICQxOworICAg
ICAgICAgICAgICAgICRwcm9wZXJ0eVN0YXR1cyA9ICQyOworICAgICAgICAgICAgICAgICRmaWxl
ID0gJDM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoJG1hdGNoZXMpIHsKKyAgICAg
ICAgICAgICAgICAkZmlsZSA9IG5vcm1hbGl6ZVBhdGgoJGZpbGUpOworICAgICAgICAgICAgICAg
ICRvcmlnaW5hbCA9IGZpbmRPcmlnaW5hbEZpbGVGcm9tU3ZuKCRmaWxlKSBpZiBzdWJzdHIoJF8s
IDMsIDEpIGVxICIrIjsKKyAgICAgICAgICAgICAgICBteSAkaXNBZGQgPSBpc0FkZGVkU3RhdHVz
KCRzdGF0dXMpOworICAgICAgICAgICAgICAgICRwcm9wZXJ0eUNoYW5nZXMgPSBkZXRlcm1pbmVQ
cm9wZXJ0eUNoYW5nZXMoJGZpbGUsICRpc0FkZCwgJG9yaWdpbmFsKSBpZiBpc01vZGlmaWVkU3Rh
dHVzKCRwcm9wZXJ0eVN0YXR1cykgfHwgJGlzQWRkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBwcmludDsgICMgZXJyb3Igb3V0cHV0IGZyb20gc3ZuIHN0YXQKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNpZiAoJGlzR2l0KSB7CisgICAgICAgICAgICBpZiAoL14o
W0FETV0pXHQoLispJC8pIHsKKyAgICAgICAgICAgICAgICAkc3RhdHVzID0gJDE7CisgICAgICAg
ICAgICAgICAgJHByb3BlcnR5U3RhdHVzID0gIiAiOyAgIyBnaXQgZG9lc24ndCBoYXZlIHByb3Bl
cnRpZXMKKyAgICAgICAgICAgICAgICAkZmlsZSA9IG5vcm1hbGl6ZVBhdGgoJDIpOworICAgICAg
ICAgICAgfSBlbHNpZiAoL14oW0NSXSlbMC05XXsxLDN9XHQoW15cdF0rKVx0KFteXHRcbl0rKSQv
KSB7ICMgZm9yIGV4YW1wbGU6IFI5MCUgICAgbmV3ZmlsZSAgICBvbGRmaWxlCisgICAgICAgICAg
ICAgICAgJHN0YXR1cyA9ICQxOworICAgICAgICAgICAgICAgICRwcm9wZXJ0eVN0YXR1cyA9ICIg
IjsKKyAgICAgICAgICAgICAgICAkb3JpZ2luYWwgPSBub3JtYWxpemVQYXRoKCQyKTsKKyAgICAg
ICAgICAgICAgICAkZmlsZSA9IG5vcm1hbGl6ZVBhdGgoJDMpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBwcmludDsgICMgZXJyb3Igb3V0cHV0IGZyb20gZ2l0IGRpZmYK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG5leHQgaWYgISRzdGF0dXMgfHwg
aXNVbm1vZGlmaWVkU3RhdHVzKCRzdGF0dXMpICYmIGlzVW5tb2RpZmllZFN0YXR1cygkcHJvcGVy
dHlTdGF0dXMpOworCisgICAgICAgICRmaWxlID0gbWFrZUZpbGVQYXRoUmVsYXRpdmUoJGZpbGUp
OworCisgICAgICAgIGlmIChpc01vZGlmaWVkU3RhdHVzKCRzdGF0dXMpIHx8IGlzQWRkZWRTdGF0
dXMoJHN0YXR1cykgfHwgaXNNb2RpZmllZFN0YXR1cygkcHJvcGVydHlTdGF0dXMpKSB7CisgICAg
ICAgICAgICBteSBAY29tcG9uZW50cyA9IEZpbGU6OlNwZWMtPnNwbGl0ZGlyKCRmaWxlKTsKKyAg
ICAgICAgICAgIGlmICgkY29tcG9uZW50c1swXSBlcSAiTGF5b3V0VGVzdHMiKSB7CisgICAgICAg
ICAgICAgICAgJGRpZENoYW5nZVJlZ3Jlc3Npb25UZXN0cyA9IDE7CisgICAgICAgICAgICAgICAg
cHVzaCBAYWRkZWRSZWdyZXNzaW9uVGVzdHMsICRmaWxlCisgICAgICAgICAgICAgICAgICAgIGlm
IGlzQWRkZWRTdGF0dXMoJHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgJGZpbGUg
PX4gL1wuKFthLXpBLVpdKykkLworICAgICAgICAgICAgICAgICAgICAgICAmJiAkc3VwcG9ydGVk
VGVzdEV4dGVuc2lvbnN7bGMoJDEpfQorICAgICAgICAgICAgICAgICAgICAgICAmJiAhc2NhbGFy
KGdyZXAoL15yZXNvdXJjZXMkL2ksIEBjb21wb25lbnRzKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgJiYgIXNjYWxhcihncmVwKC9ec2NyaXB0LXRlc3RzJC9pLCBAY29tcG9uZW50cykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcHVzaCBAeyRjaGFuZ2VkRmlsZXN9LCAkZmlsZSBpZiAk
Y29tcG9uZW50c1skI2NvbXBvbmVudHNdIG5lICJDaGFuZ2VMb2ciOworICAgICAgICB9IGVsc2lm
IChpc0NvbmZsaWN0U3RhdHVzKCRzdGF0dXMpIHx8IGlzQ29uZmxpY3RTdGF0dXMoJHByb3BlcnR5
U3RhdHVzKSkgeworICAgICAgICAgICAgcHVzaCBAeyRjb25mbGljdEZpbGVzfSwgJGZpbGU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGJhc2VuYW1lKCRmaWxlKSBuZSAiQ2hhbmdlTG9nIikgewor
ICAgICAgICAgICAgbXkgJGRlc2NyaXB0aW9uID0gc3RhdHVzRGVzY3JpcHRpb24oJHN0YXR1cywg
JHByb3BlcnR5U3RhdHVzLCAkb3JpZ2luYWwsICRwcm9wZXJ0eUNoYW5nZXMpOworICAgICAgICAg
ICAgJGZ1bmN0aW9uTGlzdHMtPnskZmlsZX0gPSAkZGVzY3JpcHRpb24gaWYgZGVmaW5lZCAkZGVz
Y3JpcHRpb247CisgICAgICAgIH0KKyAgICB9CisgICAgY2xvc2UgU1RBVDsKK30KKworc3ViIGlz
VW5tb2RpZmllZFN0YXR1cygkKQoreworICAgIG15ICgkc3RhdHVzKSA9IEBfOworCisgICAgbXkg
JXN0YXR1c0NvZGVzID0gKAorICAgICAgICAiICIgPT4gMSwKKyAgICApOworCisgICAgcmV0dXJu
ICRzdGF0dXNDb2Rlc3skc3RhdHVzfTsKK30KKworc3ViIGlzTW9kaWZpZWRTdGF0dXMoJCkKK3sK
KyAgICBteSAoJHN0YXR1cykgPSBAXzsKKworICAgIG15ICVzdGF0dXNDb2RlcyA9ICgKKyAgICAg
ICAgIk0iID0+IDEsCisgICAgKTsKKworICAgIHJldHVybiAkc3RhdHVzQ29kZXN7JHN0YXR1c307
Cit9CisKK3N1YiBpc0FkZGVkU3RhdHVzKCQpCit7CisgICAgbXkgKCRzdGF0dXMpID0gQF87CisK
KyAgICBteSAlc3RhdHVzQ29kZXMgPSAoCisgICAgICAgICJBIiA9PiAxLAorICAgICAgICAiQyIg
PT4gJGlzR2l0LAorICAgICAgICAiUiIgPT4gMSwKKyAgICApOworCisgICAgcmV0dXJuICRzdGF0
dXNDb2Rlc3skc3RhdHVzfTsKK30KKworc3ViIGlzQ29uZmxpY3RTdGF0dXMoJCkKK3sKKyAgICBt
eSAoJHN0YXR1cykgPSBAXzsKKworICAgIG15ICVzdm4gPSAoCisgICAgICAgICJDIiA9PiAxLAor
ICAgICk7CisKKyAgICBteSAlZ2l0ID0gKAorICAgICAgICAiVSIgPT4gMSwKKyAgICApOworCisg
ICAgcmV0dXJuIDAgaWYgKCRnaXRDb21taXQgfHwgJGdpdEluZGV4KTsgIyBhbiBleGlzdGluZyBj
b21taXQgb3Igc3RhZ2VkIGNoYW5nZSBjYW5ub3QgaGF2ZSBjb25mbGljdHMKKyAgICByZXR1cm4g
JHN2bnskc3RhdHVzfSBpZiAkaXNTVk47CisgICAgcmV0dXJuICRnaXR7JHN0YXR1c30gaWYgJGlz
R2l0OworfQorCitzdWIgc3RhdHVzRGVzY3JpcHRpb24oJCQkJCkKK3sKKyAgICBteSAoJHN0YXR1
cywgJHByb3BlcnR5U3RhdHVzLCAkb3JpZ2luYWwsICRwcm9wZXJ0eUNoYW5nZXMpID0gQF87CisK
KyAgICBteSAkcHJvcGVydHlEZXNjcmlwdGlvbiA9IGRlZmluZWQgJHByb3BlcnR5Q2hhbmdlcyA/
IHByb3BlcnR5Q2hhbmdlRGVzY3JpcHRpb24oJHByb3BlcnR5Q2hhbmdlcykgOiAiIjsKKworICAg
IG15ICVzdm4gPSAoCisgICAgICAgICJBIiA9PiBkZWZpbmVkICRvcmlnaW5hbCA/ICIgQ29waWVk
IGZyb20gXCVzLiIgOiAiIEFkZGVkLiIsCisgICAgICAgICJEIiA9PiAiIFJlbW92ZWQuIiwKKyAg
ICAgICAgIk0iID0+ICIiLAorICAgICAgICAiUiIgPT4gZGVmaW5lZCAkb3JpZ2luYWwgPyAiIFJl
cGxhY2VkIHdpdGggXCVzLiIgOiAiIFJlcGxhY2VkLiIsCisgICAgICAgICIgIiA9PiAiIiwKKyAg
ICApOworCisgICAgbXkgJWdpdCA9ICVzdm47CisgICAgJGdpdHsiQSJ9ID0gIiBBZGRlZC4iOwor
ICAgICRnaXR7IkMifSA9ICIgQ29waWVkIGZyb20gXCVzLiI7CisgICAgJGdpdHsiUiJ9ID0gIiBS
ZW5hbWVkIGZyb20gXCVzLiI7CisKKyAgICBteSAkZGVzY3JpcHRpb247CisgICAgJGRlc2NyaXB0
aW9uID0gc3ByaW50Zigkc3ZueyRzdGF0dXN9LCAkb3JpZ2luYWwpIGlmICRpc1NWTiAmJiBleGlz
dHMgJHN2bnskc3RhdHVzfTsKKyAgICAkZGVzY3JpcHRpb24gPSBzcHJpbnRmKCRnaXR7JHN0YXR1
c30sICRvcmlnaW5hbCkgaWYgJGlzR2l0ICYmIGV4aXN0cyAkZ2l0eyRzdGF0dXN9OworICAgIHJl
dHVybiB1bmxlc3MgZGVmaW5lZCAkZGVzY3JpcHRpb247CisKKyAgICAkZGVzY3JpcHRpb24gLj0g
JHByb3BlcnR5RGVzY3JpcHRpb24gdW5sZXNzIGlzQWRkZWRTdGF0dXMoJHN0YXR1cyk7CisgICAg
cmV0dXJuICRkZXNjcmlwdGlvbjsKK30KKworc3ViIHByb3BlcnR5Q2hhbmdlRGVzY3JpcHRpb24o
JCkKK3sKKyAgICBteSAoJHByb3BlcnR5Q2hhbmdlcykgPSBAXzsKKworICAgIG15ICVvcGVyYXRp
b25zID0gKAorICAgICAgICAiQSIgPT4gIkFkZGVkIiwKKyAgICAgICAgIk0iID0+ICJNb2RpZmll
ZCIsCisgICAgICAgICJEIiA9PiAiUmVtb3ZlZCIsCisgICAgICAgICJDIiA9PiAiQ2hhbmdlZCIs
CisgICAgKTsKKworICAgIG15ICRkZXNjcmlwdGlvbiA9ICIiOworICAgIHdoaWxlIChteSAoJG9w
ZXJhdGlvbiwgJHByb3BlcnRpZXMpID0gZWFjaCAlJHByb3BlcnR5Q2hhbmdlcykgeworICAgICAg
ICBteSAkd29yZCA9ICRvcGVyYXRpb25zeyRvcGVyYXRpb259OworICAgICAgICBteSAkbGlzdCA9
IHBsdXJhbGl6ZUFuZExpc3QoInByb3BlcnR5IiwgInByb3BlcnRpZXMiLCBAJHByb3BlcnRpZXMp
OworICAgICAgICAkZGVzY3JpcHRpb24gLj0gIiAkd29yZCAkbGlzdC4iOworICAgIH0KKyAgICBy
ZXR1cm4gJGRlc2NyaXB0aW9uOworfQorCitzdWIgZXh0cmFjdExpbmVSYW5nZSgkKQoreworICAg
IG15ICgkc3RyaW5nKSA9IEBfOworCisgICAgbXkgKCRzdGFydCwgJGVuZCkgPSAoLTEsIC0xKTsK
KworICAgIGlmICgkaXNTVk4gJiYgJHN0cmluZyA9fiAvXlxkKygsXGQrKT9bYWNkXShcZCspKCwo
XGQrKSk/LykgeworICAgICAgICAkc3RhcnQgPSAkMjsKKyAgICAgICAgJGVuZCA9ICQ0IHx8ICQy
OworICAgIH0gZWxzaWYgKCRpc0dpdCAmJiAkc3RyaW5nID1+IC9eQEAgLVxkKygsXGQrKT8gXCso
XGQrKSgsKFxkKykpPyBAQC8pIHsKKyAgICAgICAgJHN0YXJ0ID0gJDI7CisgICAgICAgICRlbmQg
PSBkZWZpbmVkKCQ0KSA/ICQ0ICsgJDIgLSAxIDogJDI7CisgICAgfQorCisgICAgcmV0dXJuICgk
c3RhcnQsICRlbmQpOworfQorCitzdWIgZmlyc3REaXJlY3RvcnlPckN3ZCgpCit7CisgICAgbXkg
JGRpciA9ICIuIjsKKyAgICBteSBAZGlycyA9IGtleXMoJXBhdGhzKTsKKworICAgICRkaXIgPSAt
ZCAkZGlyc1swXSA/ICRkaXJzWzBdIDogZGlybmFtZSgkZGlyc1swXSkgaWYgQGRpcnM7CisKKyAg
ICByZXR1cm4gJGRpcjsKK30KKworc3ViIHRlc3RMaXN0Rm9yQ2hhbmdlTG9nKEApCit7CisgICAg
bXkgKEB0ZXN0cykgPSBAXzsKKworICAgIHJldHVybiAiIiB1bmxlc3MgQHRlc3RzOworCisgICAg
bXkgJGxlYWRTdHJpbmcgPSAiICAgICAgICBUZXN0IiAuIChAdGVzdHMgPT0gMSA/ICIiIDogInMi
KSAuICI6ICI7CisgICAgbXkgJGxpc3QgPSAkbGVhZFN0cmluZzsKKyAgICBmb3JlYWNoIG15ICRp
ICgwLi4kI3Rlc3RzKSB7CisgICAgICAgICRsaXN0IC49ICIgIiB4IGxlbmd0aCgkbGVhZFN0cmlu
ZykgaWYgJGk7CisgICAgICAgIG15ICR0ZXN0ID0gJHRlc3RzWyRpXTsKKyAgICAgICAgJHRlc3Qg
PX4gcy9eTGF5b3V0VGVzdHNcLy8vOworICAgICAgICAkbGlzdCAuPSAiJHRlc3RcbiI7CisgICAg
fQorICAgICRsaXN0IC49ICJcbiI7CisKKyAgICByZXR1cm4gJGxpc3Q7Cit9CisKK3N1YiByZXZp
ZXdlckFuZERlc2NyaXB0aW9uRm9yR2l0Q29tbWl0KCQpCit7CisgICAgbXkgKCRjb21taXQpID0g
QF87CisKKyAgICBteSAkZGVzY3JpcHRpb24gPSAnJzsKKyAgICBteSAkcmV2aWV3ZXI7CisKKyAg
ICBteSBAYXJncyA9IHF3KHJldi1saXN0IC0tcHJldHR5KTsKKyAgICBwdXNoIEBhcmdzLCAnLTEn
IGlmICRjb21taXQgIX4gbS8uK1wuXC4uKy87CisgICAgbXkgJGdpdExvZzsKKyAgICB7CisgICAg
ICAgIGxvY2FsICQvID0gdW5kZWY7CisgICAgICAgIG9wZW4oR0lULCAiLXwiLCAkR0lULCBAYXJn
cywgJGNvbW1pdCkgfHwgZGllOworICAgICAgICAkZ2l0TG9nID0gPEdJVD47CisgICAgICAgIGNs
b3NlKEdJVCk7CisgICAgfQorCisgICAgbXkgQGNvbW1pdExvZ3MgPSBzcGxpdCgvXltDY11vbW1p
dCBbYS1mMC05XXs0MH0vbSwgJGdpdExvZyk7CisgICAgc2hpZnQgQGNvbW1pdExvZ3M7ICMgUmVt
b3ZlIGluaXRpYWwgYmxhbmsgY29tbWl0IGxvZworICAgIG15ICRjb21taXRMb2dDb3VudCA9IDA7
CisgICAgZm9yZWFjaCBteSAkY29tbWl0TG9nIChAY29tbWl0TG9ncykgeworICAgICAgICAkZGVz
Y3JpcHRpb24gLj0gIlxuIiBpZiAkY29tbWl0TG9nQ291bnQ7CisgICAgICAgICRjb21taXRMb2dD
b3VudCsrOworICAgICAgICBteSAkaW5IZWFkZXIgPSAxOworICAgICAgICBteSAkY29tbWl0TG9n
SW5kZW50OyAKKyAgICAgICAgbXkgQGxpbmVzID0gc3BsaXQoL1xuLywgJGNvbW1pdExvZyk7Cisg
ICAgICAgIHNoaWZ0IEBsaW5lczsgIyBSZW1vdmUgaW5pdGlhbCBibGFuayBsaW5lCisgICAgICAg
IGZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgeworICAgICAgICAgICAgaWYgKCRpbkhlYWRlcikg
eworICAgICAgICAgICAgICAgIGlmICghJGxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgJGlu
SGVhZGVyID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV4dDsKKyAg
ICAgICAgICAgIH0gZWxzaWYgKCRsaW5lID1+IC9bU3NdaWduZWQtW09vXWZmLVtCYl15OiAoLisp
LykgeworICAgICAgICAgICAgICAgIGlmICghJHJldmlld2VyKSB7CisgICAgICAgICAgICAgICAg
ICAgICRyZXZpZXdlciA9ICQxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICRyZXZpZXdlciAuPSAiLCAiIC4gJDE7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNpZiAoJGxpbmUgPX4gL15ccyokLykgeworICAgICAgICAgICAgICAgICRk
ZXNjcmlwdGlvbiA9ICRkZXNjcmlwdGlvbiAuICJcbiI7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGlmICghZGVmaW5lZCgkY29tbWl0TG9nSW5kZW50KSkgeworICAgICAg
ICAgICAgICAgICAgICAjIExldCB0aGUgZmlyc3QgbGluZSB3aXRoIG5vbi13aGl0ZSBzcGFjZSBk
ZXRlcm1pbmUKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgZ2xvYmFsIGluZGVudC4KKyAgICAg
ICAgICAgICAgICAgICAgJGxpbmUgPX4gL14oXHMqKVxTLzsKKyAgICAgICAgICAgICAgICAgICAg
JGNvbW1pdExvZ0luZGVudCA9IGxlbmd0aCgkMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICMgU3RyaXAgYXQgbW9zdCB0aGUgaW5kZW50IHRvIHByZXNlcnZlIHJlbGF0aXZl
IGluZGVudHMuCisgICAgICAgICAgICAgICAgJGxpbmUgPX4gcy9eXHN7MCwkY29tbWl0TG9nSW5k
ZW50fS8vOworICAgICAgICAgICAgICAgICRkZXNjcmlwdGlvbiA9ICRkZXNjcmlwdGlvbiAuICgi
ICIgeCA4KSAuICRsaW5lIC4gIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAoISRyZXZpZXdlcikgeworICAgICAgJHJldmlld2VyID0gJGdpdFJldmlld2VyOwor
ICAgIH0KKworICAgIHJldHVybiAoJHJldmlld2VyLCAkZGVzY3JpcHRpb24pOworfQorCitzdWIg
bm9ybWFsaXplTGluZUVuZGluZ3MoJCQpCit7CisgICAgbXkgKCRzdHJpbmcsICRlbmRsKSA9IEBf
OworICAgICRzdHJpbmcgPX4gcy9ccj9cbi8kZW5kbC9nOworICAgIHJldHVybiAkc3RyaW5nOwor
fQorCitzdWIgZGVjb2RlRW50aXRpZXMoJCkKK3sKKyAgICBteSAoJHRleHQpID0gQF87CisgICAg
JHRleHQgPX4gcy9cJmx0Oy88L2c7CisgICAgJHRleHQgPX4gcy9cJmd0Oy8+L2c7CisgICAgJHRl
eHQgPX4gcy9cJnF1b3Q7L1wiL2c7CisgICAgJHRleHQgPX4gcy9cJmFwb3M7L1wnL2c7CisgICAg
JHRleHQgPX4gcy9cJmFtcDsvXCYvZzsKKyAgICByZXR1cm4gJHRleHQ7Cit9CisKKzE7Cg==
</data>
<flag name="review"
          id="116782"
          type_id="1"
          status="-"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>