<?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>167698</bug_id>
          
          <creation_ts>2017-02-01 10:55:59 -0800</creation_ts>
          <short_desc>Web Inspector: Upgrade Esprima to the latest one to support dynamic import</short_desc>
          <delta_ts>2017-02-02 10:33:34 -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>Web Inspector</component>
          <version>WebKit 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>
          
          <blocked>167457</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1272199</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-02-01 10:55:59 -0800</bug_when>
    <thetext>Dynamic import is now implemented in Esprima trunk (https://github.com/jquery/esprima/commit/11a2385739d523c62f2989c0fdafebfd0520a977).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272252</commentid>
    <comment_count>1</comment_count>
      <attachid>300349</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-02-01 13:32:12 -0800</bug_when>
    <thetext>Created attachment 300349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272411</commentid>
    <comment_count>2</comment_count>
      <attachid>300349</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-02 01:24:50 -0800</bug_when>
    <thetext>Comment on attachment 300349
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:1028
&gt; +        case &quot;Import&quot;:
&gt; +            result = {
&gt; +                type: WebInspector.ScriptSyntaxTree.NodeType.Import
&gt; +            };

Is this only for dynamic import? If so:
1. We should gather data on the import expression as well? 
2. Perhaps a better name for our node type would be DynamicImport or ImportCall?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272415</commentid>
    <comment_count>3</comment_count>
      <attachid>300349</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-02-02 01:56:36 -0800</bug_when>
    <thetext>Comment on attachment 300349
Patch

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

r=me! Really well done!!

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:859
&gt; +                argument: this._createInternalSyntaxTree(node.argument)

Nit: Add the trailing comma, it makes possible future diffs nicer.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:1028
&gt;&gt; +            };
&gt; 
&gt; Is this only for dynamic import? If so:
&gt; 1. We should gather data on the import expression as well? 
&gt; 2. Perhaps a better name for our node type would be DynamicImport or ImportCall?

Each of the AST libraries follows the ESTree AST Spec. They decided to call this Import as of a few days ago. We should keep the name &quot;Import&quot; to match:
https://github.com/estree/estree/commit/8ab62755743819a524c3d9a2537f34208ce26d68
https://github.com/estree/estree/pull/137

&gt; LayoutTests/inspector/formatting/formatting-javascript.html:21
&gt; +        &quot;resources/javascript-tests/import.js&quot;,

You&apos;ll want to also add &quot;import.js&quot; anywhere in the of tests in the formatter tool:
Source/WebInspectorUI/Tools/Formatting/index.html (around line 45)

&gt; LayoutTests/inspector/formatting/resources/javascript-tests/object-array-literal.js:11
&gt; +o={a:1,b:2,c:3,d:4,...e}

We should add a test for this case as well:

    o={...e}

&gt; LayoutTests/inspector/formatting/resources/javascript-tests/variable-declaration.js:26
&gt; +var {type,...rest} = { type: &quot;Cocoa&quot;, taste: &quot;Sweet&quot; };

We should add a test for this case as well:

    var {...rest}={a:1,b:2};

And it seems crazy but I don&apos;t see any tests for array destructuring. So you might want to add a few basic one to cover that too!

    var [a,b]=[0,1];</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272418</commentid>
    <comment_count>4</comment_count>
      <attachid>300349</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-02-02 02:30:55 -0800</bug_when>
    <thetext>Comment on attachment 300349
Patch

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

Thanks!

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:859
&gt;&gt; +                argument: this._createInternalSyntaxTree(node.argument)
&gt; 
&gt; Nit: Add the trailing comma, it makes possible future diffs nicer.

Done.

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:1028
&gt;&gt;&gt; +            };
&gt;&gt; 
&gt;&gt; Is this only for dynamic import? If so:
&gt;&gt; 1. We should gather data on the import expression as well? 
&gt;&gt; 2. Perhaps a better name for our node type would be DynamicImport or ImportCall?
&gt; 
&gt; Each of the AST libraries follows the ESTree AST Spec. They decided to call this Import as of a few days ago. We should keep the name &quot;Import&quot; to match:
&gt; https://github.com/estree/estree/commit/8ab62755743819a524c3d9a2537f34208ce26d68
&gt; https://github.com/estree/estree/pull/137

Yeah,

1.
This `Import` node is used with CallExpression. So if you evaluate `import(...)`, this becomes CallExpression.
And the calle of this CallExpression becomes this `Import` node. Therefore, this import node does not have any argument.
This is similar to the `super(...)` node representation in estree. And this is why we use `&quot;Import&quot;` for this node name in Esprima.

2.
In this patch, I think we should stick on the node name used in Esprima and estree.

&gt;&gt; LayoutTests/inspector/formatting/formatting-javascript.html:21
&gt;&gt; +        &quot;resources/javascript-tests/import.js&quot;,
&gt; 
&gt; You&apos;ll want to also add &quot;import.js&quot; anywhere in the of tests in the formatter tool:
&gt; Source/WebInspectorUI/Tools/Formatting/index.html (around line 45)

Nice! I&apos;ve added this import.js to that list too.

&gt;&gt; LayoutTests/inspector/formatting/resources/javascript-tests/object-array-literal.js:11
&gt;&gt; +o={a:1,b:2,c:3,d:4,...e}
&gt; 
&gt; We should add a test for this case as well:
&gt; 
&gt;     o={...e}

Nice catch. Added.

&gt;&gt; LayoutTests/inspector/formatting/resources/javascript-tests/variable-declaration.js:26
&gt;&gt; +var {type,...rest} = { type: &quot;Cocoa&quot;, taste: &quot;Sweet&quot; };
&gt; 
&gt; We should add a test for this case as well:
&gt; 
&gt;     var {...rest}={a:1,b:2};
&gt; 
&gt; And it seems crazy but I don&apos;t see any tests for array destructuring. So you might want to add a few basic one to cover that too!
&gt; 
&gt;     var [a,b]=[0,1];

Yeah, nice. Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272421</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-02-02 02:32:48 -0800</bug_when>
    <thetext>Committed r211554: &lt;http://trac.webkit.org/changeset/211554&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272517</commentid>
    <comment_count>6</comment_count>
      <attachid>300349</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-02 10:33:34 -0800</bug_when>
    <thetext>Comment on attachment 300349
Patch

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

&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:1028
&gt;&gt;&gt;&gt; +            };
&gt;&gt;&gt; 
&gt;&gt;&gt; Is this only for dynamic import? If so:
&gt;&gt;&gt; 1. We should gather data on the import expression as well? 
&gt;&gt;&gt; 2. Perhaps a better name for our node type would be DynamicImport or ImportCall?
&gt;&gt; 
&gt;&gt; Each of the AST libraries follows the ESTree AST Spec. They decided to call this Import as of a few days ago. We should keep the name &quot;Import&quot; to match:
&gt;&gt; https://github.com/estree/estree/commit/8ab62755743819a524c3d9a2537f34208ce26d68
&gt;&gt; https://github.com/estree/estree/pull/137
&gt; 
&gt; Yeah,
&gt; 
&gt; 1.
&gt; This `Import` node is used with CallExpression. So if you evaluate `import(...)`, this becomes CallExpression.
&gt; And the calle of this CallExpression becomes this `Import` node. Therefore, this import node does not have any argument.
&gt; This is similar to the `super(...)` node representation in estree. And this is why we use `&quot;Import&quot;` for this node name in Esprima.
&gt; 
&gt; 2.
&gt; In this patch, I think we should stick on the node name used in Esprima and estree.

Makes sense. Thanks for clarifying.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300349</attachid>
            <date>2017-02-01 13:32:12 -0800</date>
            <delta_ts>2017-02-02 01:56:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167698-20170202062958.patch</filename>
            <type>text/plain</type>
            <size>509856</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExNDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA5
YmMzYzczZTIzMTU5ODIzOWZlYzk5OTkzMmEyMTYwZWExOTkzZTQyLi5kZWFhNWE4M2JkMjJjODcy
OGExYjM4YzUyNGEyOTZjODhmMmMwNzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNy0wMi0wMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBVcGdyYWRlIEVzcHJpbWEgdG8gdGhlIGxh
dGVzdCBvbmUgdG8gc3VwcG9ydCBkeW5hbWljIGltcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3Njk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJp
bWEvZXNwcmltYS5qczoKKyAgICAgICAgVXBkYXRlIHRvIEVzcHJpbWFANTMwN2UzMCAoNC4wLjAt
ZGV2KS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuX2dh
dGhlcklkZW50aWZpZXJzSW5EZWNsYXJhdGlvbi5nYXRoZXJJZGVudGlmaWVycyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuX2dhdGhlcklkZW50aWZp
ZXJzSW5EZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5wcm90b3R5cGUuX3JlY3Vyc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUucHJvdG90eXBlLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvV29y
a2Vycy9Gb3JtYXR0ZXIvRVNUcmVlV2Fsa2VyLmpzOgorICAgICAgICAoRVNUcmVlV2Fsa2VyLnBy
b3RvdHlwZS5fd2Fsa0NoaWxkcmVuKToKKyAgICAgICAgKEVTVHJlZVdhbGtlcik6CisgICAgICAg
IEFkZCBuZXcgbm9kZXMsIFNwcmVhZFByb3BlcnR5LCBSZXN0UHJvcGVydHksIGFuZCBJbXBvcnQu
CisgICAgICAgIFNwcmVhZFByb3BlcnR5IGFuZCBSZXN0UHJvcGVydHkgYXJlIHRoZSBwYXJ0IG9m
IEVTMjAxOCByZXN0IGFuZCBzcHJlYWQgcHJvcGVydGllcy4KKyAgICAgICAgaHR0cHM6Ly9naXRo
dWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtcmVzdC1zcHJlYWQKKyAgICAgICAgSW1wb3J0
IGlzIGR5bmFtaWMgaW1wb3J0IG5vZGUuIFRoZSBzeW50YXggaXMgc2ltaWxhciB0byBTdXBlci4K
KyAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZHluYW1pYy1pbXBvcnQK
KworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvV29ya2Vycy9Gb3JtYXR0ZXIvRXNwcmltYUZvcm1h
dHRlci5qczoKKyAgICAgICAgKEVzcHJpbWFGb3JtYXR0ZXIucHJvdG90eXBlLl9oYW5kbGVUb2tl
bkF0Tm9kZSk6CisKIDIwMTctMDItMDEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxl
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZW1vdmUga2V5Ym9hcmQgc2hvcnRjdXQg
dG8gY2xvc2UgdGFiIC0gZG9lcyBub3QgbWF0Y2ggZXhwZWN0YXRpb25zCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJp
bWEuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3By
aW1hL2VzcHJpbWEuanMKaW5kZXggMmRlMjE1YmY4MjJkNjA1YTA0ZDA0ZjEyMjdlYTBhNWU2OGQ4
MmZmOC4uNjdlMzkyNjVlOGUxNGU1ZThkMjcyYmVjMWRlNGI0MTVlN2U4NDVkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9l
c3ByaW1hLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0VzcHJpbWEvZXNwcmltYS5qcwpAQCAtODIsOCArODIsOCBAQCBlbHNlIGlmKHR5cGVvZiBl
eHBvcnRzID09PSAnb2JqZWN0JykKICAgICAqLwogICAgICJ1c2Ugc3RyaWN0IjsKICAgICB2YXIg
Y29tbWVudF9oYW5kbGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwotICAgIHZhciBwYXJz
ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7Ci0gICAgdmFyIGpzeF9wYXJzZXJfMSA9IF9f
d2VicGFja19yZXF1aXJlX18oMTEpOworICAgIHZhciBqc3hfcGFyc2VyXzEgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDMpOworICAgIHZhciBwYXJzZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7
CiAgICAgdmFyIHRva2VuaXplcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7CiAgICAgZnVu
Y3Rpb24gcGFyc2UoY29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHsKICAgICAgICAgdmFyIGNvbW1l
bnRIYW5kbGVyID0gbnVsbDsKQEAgLTExOSw3ICsxMTksNyBAQCBmdW5jdGlvbiBwYXJzZShjb2Rl
LCBvcHRpb25zLCBkZWxlZ2F0ZSkgewogICAgICAgICAgICAgcGFyc2VyID0gbmV3IHBhcnNlcl8x
LlBhcnNlcihjb2RlLCBvcHRpb25zLCBwYXJzZXJEZWxlZ2F0ZSk7CiAgICAgICAgIH0KICAgICAg
ICAgdmFyIHByb2dyYW0gPSBpc01vZHVsZSA/IHBhcnNlci5wYXJzZU1vZHVsZSgpIDogcGFyc2Vy
LnBhcnNlU2NyaXB0KCk7Ci0gICAgICAgIHZhciBhc3QgPSAocHJvZ3JhbSk7CisgICAgICAgIHZh
ciBhc3QgPSBwcm9ncmFtOwogICAgICAgICBpZiAoY29sbGVjdENvbW1lbnQgJiYgY29tbWVudEhh
bmRsZXIpIHsKICAgICAgICAgICAgIGFzdC5jb21tZW50cyA9IGNvbW1lbnRIYW5kbGVyLmNvbW1l
bnRzOwogICAgICAgICB9CkBAIC0zNjYsNiArMzY2LDcgQEAgZWxzZSBpZiAodGhpcy5hdHRhY2gp
IHsKICAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywKICAg
ICAgICAgSWRlbnRpZmllcjogJ0lkZW50aWZpZXInLAogICAgICAgICBJZlN0YXRlbWVudDogJ0lm
U3RhdGVtZW50JywKKyAgICAgICAgSW1wb3J0OiAnSW1wb3J0JywKICAgICAgICAgSW1wb3J0RGVj
bGFyYXRpb246ICdJbXBvcnREZWNsYXJhdGlvbicsCiAgICAgICAgIEltcG9ydERlZmF1bHRTcGVj
aWZpZXI6ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJywKICAgICAgICAgSW1wb3J0TmFtZXNwYWNl
U3BlY2lmaWVyOiAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJywKQEAgLTM4Miw5ICszODMsMTEg
QEAgZWxzZSBpZiAodGhpcy5hdHRhY2gpIHsKICAgICAgICAgUHJvZ3JhbTogJ1Byb2dyYW0nLAog
ICAgICAgICBQcm9wZXJ0eTogJ1Byb3BlcnR5JywKICAgICAgICAgUmVzdEVsZW1lbnQ6ICdSZXN0
RWxlbWVudCcsCisgICAgICAgIFJlc3RQcm9wZXJ0eTogJ1Jlc3RQcm9wZXJ0eScsCiAgICAgICAg
IFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcsCiAgICAgICAgIFNlcXVlbmNlRXhw
cmVzc2lvbjogJ1NlcXVlbmNlRXhwcmVzc2lvbicsCiAgICAgICAgIFNwcmVhZEVsZW1lbnQ6ICdT
cHJlYWRFbGVtZW50JywKKyAgICAgICAgU3ByZWFkUHJvcGVydHk6ICdTcHJlYWRQcm9wZXJ0eScs
CiAgICAgICAgIFN1cGVyOiAnU3VwZXInLAogICAgICAgICBTd2l0Y2hDYXNlOiAnU3dpdGNoQ2Fz
ZScsCiAgICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsCkBAIC00MDks
NDQzMiArNDEyLDUzOCBAQCBlbHNlIGlmICh0aGlzLmF0dGFjaCkgewogLyoqKi8gZnVuY3Rpb24o
bW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiAKICAgICAidXNlIHN0cmlj
dCI7Ci0gICAgdmFyIGFzc2VydF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKLSAgICB2YXIg
bWVzc2FnZXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7Ci0gICAgdmFyIGVycm9yX2hhbmRs
ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7Ci0gICAgdmFyIHRva2VuXzEgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDcpOwotICAgIHZhciBzY2FubmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDgpOwotICAgIHZhciBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7Ci0gICAgdmFy
IE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKLSAgICB2YXIgQXJyb3dQYXJhbWV0ZXJQ
bGFjZUhvbGRlciA9ICdBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyJzsKLSAgICB2YXIgUGFyc2Vy
ID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gUGFyc2VyKGNvZGUsIG9wdGlvbnMs
IGRlbGVnYXRlKSB7Ci0gICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlv
bnMgPSB7fTsgfQotICAgICAgICAgICAgdGhpcy5jb25maWcgPSB7Ci0gICAgICAgICAgICAgICAg
cmFuZ2U6ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJh
bmdlLAotICAgICAgICAgICAgICAgIGxvYzogKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xl
YW4nKSAmJiBvcHRpb25zLmxvYywKLSAgICAgICAgICAgICAgICBzb3VyY2U6IG51bGwsCi0gICAg
ICAgICAgICAgICAgdG9rZW5zOiAodHlwZW9mIG9wdGlvbnMudG9rZW5zID09PSAnYm9vbGVhbicp
ICYmIG9wdGlvbnMudG9rZW5zLAotICAgICAgICAgICAgICAgIGNvbW1lbnQ6ICh0eXBlb2Ygb3B0
aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMuY29tbWVudCwKLSAgICAgICAg
ICAgICAgICB0b2xlcmFudDogKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSAnYm9vbGVhbicp
ICYmIG9wdGlvbnMudG9sZXJhbnQKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBpZiAodGhp
cy5jb25maWcubG9jICYmIG9wdGlvbnMuc291cmNlICYmIG9wdGlvbnMuc291cmNlICE9PSBudWxs
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuc291cmNlID0gU3RyaW5nKG9wdGlvbnMu
c291cmNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxl
Z2F0ZTsKLSAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbmV3IGVycm9yX2hhbmRsZXJf
MS5FcnJvckhhbmRsZXIoKTsKLSAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYW50
ID0gdGhpcy5jb25maWcudG9sZXJhbnQ7Ci0gICAgICAgICAgICB0aGlzLnNjYW5uZXIgPSBuZXcg
c2Nhbm5lcl8xLlNjYW5uZXIoY29kZSwgdGhpcy5lcnJvckhhbmRsZXIpOwotICAgICAgICAgICAg
dGhpcy5zY2FubmVyLnRyYWNrQ29tbWVudCA9IHRoaXMuY29uZmlnLmNvbW1lbnQ7Ci0gICAgICAg
ICAgICB0aGlzLm9wZXJhdG9yUHJlY2VkZW5jZSA9IHsKLSAgICAgICAgICAgICAgICAnKSc6IDAs
Ci0gICAgICAgICAgICAgICAgJzsnOiAwLAotICAgICAgICAgICAgICAgICcsJzogMCwKLSAgICAg
ICAgICAgICAgICAnPSc6IDAsCi0gICAgICAgICAgICAgICAgJ10nOiAwLAotICAgICAgICAgICAg
ICAgICd8fCc6IDEsCi0gICAgICAgICAgICAgICAgJyYmJzogMiwKLSAgICAgICAgICAgICAgICAn
fCc6IDMsCi0gICAgICAgICAgICAgICAgJ14nOiA0LAotICAgICAgICAgICAgICAgICcmJzogNSwK
LSAgICAgICAgICAgICAgICAnPT0nOiA2LAotICAgICAgICAgICAgICAgICchPSc6IDYsCi0gICAg
ICAgICAgICAgICAgJz09PSc6IDYsCi0gICAgICAgICAgICAgICAgJyE9PSc6IDYsCi0gICAgICAg
ICAgICAgICAgJzwnOiA3LAotICAgICAgICAgICAgICAgICc+JzogNywKLSAgICAgICAgICAgICAg
ICAnPD0nOiA3LAotICAgICAgICAgICAgICAgICc+PSc6IDcsCi0gICAgICAgICAgICAgICAgJzw8
JzogOCwKLSAgICAgICAgICAgICAgICAnPj4nOiA4LAotICAgICAgICAgICAgICAgICc+Pj4nOiA4
LAotICAgICAgICAgICAgICAgICcrJzogOSwKLSAgICAgICAgICAgICAgICAnLSc6IDksCi0gICAg
ICAgICAgICAgICAgJyonOiAxMSwKLSAgICAgICAgICAgICAgICAnLyc6IDExLAotICAgICAgICAg
ICAgICAgICclJzogMTEKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB0aGlzLmxvb2thaGVh
ZCA9IG51bGw7Ci0gICAgICAgICAgICB0aGlzLmhhc0xpbmVUZXJtaW5hdG9yID0gZmFsc2U7Ci0g
ICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB7Ci0gICAgICAgICAgICAgICAgaXNNb2R1bGU6IGZh
bHNlLAotICAgICAgICAgICAgICAgIGF3YWl0OiBmYWxzZSwKLSAgICAgICAgICAgICAgICBhbGxv
d0luOiB0cnVlLAotICAgICAgICAgICAgICAgIGFsbG93WWllbGQ6IHRydWUsCi0gICAgICAgICAg
ICAgICAgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOiBudWxsLAotICAgICAgICAgICAg
ICAgIGlzQXNzaWdubWVudFRhcmdldDogZmFsc2UsCi0gICAgICAgICAgICAgICAgaXNCaW5kaW5n
RWxlbWVudDogZmFsc2UsCi0gICAgICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAot
ICAgICAgICAgICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSwKLSAgICAgICAgICAgICAgICBpblN3
aXRjaDogZmFsc2UsCi0gICAgICAgICAgICAgICAgbGFiZWxTZXQ6IHt9LAotICAgICAgICAgICAg
ICAgIHN0cmljdDogZmFsc2UKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB0aGlzLnRva2Vu
cyA9IFtdOwotICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlciA9IHsKLSAgICAgICAgICAgICAg
ICBpbmRleDogMCwKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGlu
ZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IDAKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIgPSB7Ci0gICAgICAgICAgICAgICAgaW5kZXg6IDAs
Ci0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCi0g
ICAgICAgICAgICAgICAgbGluZVN0YXJ0OiAwCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlciA9IHsKLSAgICAg
ICAgICAgICAgICBpbmRleDogdGhpcy5zY2FubmVyLmluZGV4LAotICAgICAgICAgICAgICAgIGxp
bmVOdW1iZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGxpbmVT
dGFydDogdGhpcy5zY2FubmVyLmxpbmVTdGFydAotICAgICAgICAgICAgfTsKKy8qIGlzdGFuYnVs
IGlnbm9yZSBuZXh0ICovCisgICAgdmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRl
bmRzKSB8fCBmdW5jdGlvbiAoZCwgYikgeworICAgICAgICBmb3IgKHZhciBwIGluIGIpIGlmIChi
Lmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsKKyAgICAgICAgZnVuY3Rpb24gX18oKSB7
IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9CisgICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVs
bCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBf
XygpKTsKKyAgICB9OworICAgIHZhciBjaGFyYWN0ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18o
NCk7CisgICAgdmFyIEpTWE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOworICAgIHZhciBq
c3hfc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOworICAgIHZhciBOb2RlID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg3KTsKKyAgICB2YXIgcGFyc2VyXzEgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDgpOworICAgIHZhciB0b2tlbl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7CisgICAg
dmFyIHhodG1sX2VudGl0aWVzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTsKKyAgICB0b2tl
bl8xLlRva2VuTmFtZVsxMDAgLyogSWRlbnRpZmllciAqL10gPSAnSlNYSWRlbnRpZmllcic7Cisg
ICAgdG9rZW5fMS5Ub2tlbk5hbWVbMTAxIC8qIFRleHQgKi9dID0gJ0pTWFRleHQnOworICAgIC8v
IEZ1bGx5IHF1YWxpZmllZCBlbGVtZW50IG5hbWUsIGUuZy4gPHN2ZzpwYXRoPiByZXR1cm5zICJz
dmc6cGF0aCIKKyAgICBmdW5jdGlvbiBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShlbGVtZW50TmFt
ZSkgeworICAgICAgICB2YXIgcXVhbGlmaWVkTmFtZTsKKyAgICAgICAgc3dpdGNoIChlbGVtZW50
TmFtZS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNY
SWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICB2YXIgaWQgPSBlbGVtZW50TmFtZTsKKyAgICAg
ICAgICAgICAgICBxdWFsaWZpZWROYW1lID0gaWQubmFtZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hOYW1lc3BhY2Vk
TmFtZToKKyAgICAgICAgICAgICAgICB2YXIgbnMgPSBlbGVtZW50TmFtZTsKKyAgICAgICAgICAg
ICAgICBxdWFsaWZpZWROYW1lID0gZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUobnMubmFtZXNwYWNl
KSArICc6JyArCisgICAgICAgICAgICAgICAgICAgIGdldFF1YWxpZmllZEVsZW1lbnROYW1lKG5z
Lm5hbWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBqc3hfc3lu
dGF4XzEuSlNYU3ludGF4LkpTWE1lbWJlckV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgdmFy
IGV4cHIgPSBlbGVtZW50TmFtZTsKKyAgICAgICAgICAgICAgICBxdWFsaWZpZWROYW1lID0gZ2V0
UXVhbGlmaWVkRWxlbWVudE5hbWUoZXhwci5vYmplY3QpICsgJy4nICsKKyAgICAgICAgICAgICAg
ICAgICAgZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUoZXhwci5wcm9wZXJ0eSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLnRocm93RXJyb3IgPSBmdW5jdGlvbiAobWVzc2FnZUZvcm1h
dCkgewotICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwotICAgICAgICAgICAgZm9yICh2YXIg
X2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKLSAgICAgICAgICAgICAgICB2
YWx1ZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0g
ICAgICAgICAgICB2YXIgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8lKFxkKS9nLCBmdW5j
dGlvbiAod2hvbGUsIGlkeCkgewotICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChpZHgg
PCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpZHhdOwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB2YXIgaW5kZXggPSB0aGlzLmxhc3RNYXJrZXIuaW5kZXg7Ci0gICAgICAgICAgICB2YXIg
bGluZSA9IHRoaXMubGFzdE1hcmtlci5saW5lTnVtYmVyOwotICAgICAgICAgICAgdmFyIGNvbHVt
biA9IHRoaXMubGFzdE1hcmtlci5pbmRleCAtIHRoaXMubGFzdE1hcmtlci5saW5lU3RhcnQgKyAx
OwotICAgICAgICAgICAgdGhyb3cgdGhpcy5lcnJvckhhbmRsZXIuY3JlYXRlRXJyb3IoaW5kZXgs
IGxpbmUsIGNvbHVtbiwgbXNnKTsKKyAgICAgICAgcmV0dXJuIHF1YWxpZmllZE5hbWU7CisgICAg
fQorICAgIHZhciBKU1hQYXJzZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgICAgICBfX2V4
dGVuZHMoSlNYUGFyc2VyLCBfc3VwZXIpOworICAgICAgICBmdW5jdGlvbiBKU1hQYXJzZXIoY29k
ZSwgb3B0aW9ucywgZGVsZWdhdGUpIHsKKyAgICAgICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0
aGlzLCBjb2RlLCBvcHRpb25zLCBkZWxlZ2F0ZSkgfHwgdGhpczsKKyAgICAgICAgfQorICAgICAg
ICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRjaCgnPCcpID8gdGhpcy5wYXJzZUpTWFJv
b3QoKSA6IF9zdXBlci5wcm90b3R5cGUucGFyc2VQcmltYXJ5RXhwcmVzc2lvbi5jYWxsKHRoaXMp
OwogICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnRvbGVyYXRlRXJyb3IgPSBm
dW5jdGlvbiAobWVzc2FnZUZvcm1hdCkgewotICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwot
ICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKysp
IHsKLSAgICAgICAgICAgICAgICB2YWx1ZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5j
YWxsKGFyZ3VtZW50cywgMSk7Ci0gICAgICAgICAgICB2YXIgbXNnID0gbWVzc2FnZUZvcm1hdC5y
ZXBsYWNlKC8lKFxkKS9nLCBmdW5jdGlvbiAod2hvbGUsIGlkeCkgewotICAgICAgICAgICAgICAg
IGFzc2VydF8xLmFzc2VydChpZHggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11
c3QgYmUgaW4gcmFuZ2UnKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpZHhdOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmxhc3RNYXJrZXIuaW5k
ZXg7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOwotICAg
ICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGFzdE1hcmtlci5pbmRleCAtIHRoaXMubGFzdE1h
cmtlci5saW5lU3RhcnQgKyAxOwotICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIudG9sZXJh
dGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cpOworICAgICAgICBKU1hQYXJzZXIucHJv
dG90eXBlLnN0YXJ0SlNYID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLy8gVW53aW5kIHRo
ZSBzY2FubmVyIGJlZm9yZSB0aGUgbG9va2FoZWFkIHRva2VuLgorICAgICAgICAgICAgdGhpcy5z
Y2FubmVyLmluZGV4ID0gdGhpcy5zdGFydE1hcmtlci5pbmRleDsKKyAgICAgICAgICAgIHRoaXMu
c2Nhbm5lci5saW5lTnVtYmVyID0gdGhpcy5zdGFydE1hcmtlci5saW5lOworICAgICAgICAgICAg
dGhpcy5zY2FubmVyLmxpbmVTdGFydCA9IHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggLSB0aGlzLnN0
YXJ0TWFya2VyLmNvbHVtbjsKICAgICAgICAgfTsKLSAgICAgICAgLy8gVGhyb3cgYW4gZXhjZXB0
aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2VuLgotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnVuZXhw
ZWN0ZWRUb2tlbkVycm9yID0gZnVuY3Rpb24gKHRva2VuLCBtZXNzYWdlKSB7Ci0gICAgICAgICAg
ICB2YXIgbXNnID0gbWVzc2FnZSB8fCBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tl
bjsKLSAgICAgICAgICAgIHZhciB2YWx1ZTsKLSAgICAgICAgICAgIGlmICh0b2tlbikgewotICAg
ICAgICAgICAgICAgIGlmICghbWVzc2FnZSkgewotICAgICAgICAgICAgICAgICAgICBtc2cgPSAo
dG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5FT0YpID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5V
bmV4cGVjdGVkRU9TIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICh0b2tlbi50eXBlID09PSB0
b2tlbl8xLlRva2VuLklkZW50aWZpZXIpID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVk
SWRlbnRpZmllciA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09
IHRva2VuXzEuVG9rZW4uTnVtZXJpY0xpdGVyYWwpID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4
cGVjdGVkTnVtYmVyIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRva2VuLnR5
cGUgPT09IHRva2VuXzEuVG9rZW4uU3RyaW5nTGl0ZXJhbCkgPyBtZXNzYWdlc18xLk1lc3NhZ2Vz
LlVuZXhwZWN0ZWRTdHJpbmcgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uVGVtcGxhdGUpID8gbWVzc2FnZXNfMS5NZXNz
YWdlcy5VbmV4cGVjdGVkVGVtcGxhdGUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOwotICAgICAgICAg
ICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5LZXl3b3JkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzRnV0dXJlUmVzZXJ2ZWRX
b3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IG1l
c3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFJlc2VydmVkOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0LnN0
cmljdCAmJiB0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVl
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhbHVl
ID0gKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uVGVtcGxhdGUpID8gdG9rZW4udmFsdWUu
cmF3IDogdG9rZW4udmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICB2YWx1ZSA9ICdJTExFR0FMJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1zZyA9IG1zZy5yZXBsYWNlKCclMCcsIHZhbHVlKTsKLSAgICAgICAgICAgIGlmICh0b2tl
biAmJiB0eXBlb2YgdG9rZW4ubGluZU51bWJlciA9PT0gJ251bWJlcicpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgaW5kZXggPSB0b2tlbi5zdGFydDsKLSAgICAgICAgICAgICAgICB2YXIgbGluZSA9
IHRva2VuLmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRva2VuLnN0
YXJ0IC0gdGhpcy5sYXN0TWFya2VyLmxpbmVTdGFydCArIDE7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2x1bW4sIG1z
Zyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2
YXIgaW5kZXggPSB0aGlzLmxhc3RNYXJrZXIuaW5kZXg7Ci0gICAgICAgICAgICAgICAgdmFyIGxp
bmUgPSB0aGlzLmxhc3RNYXJrZXIubGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICB2YXIgY29s
dW1uID0gaW5kZXggLSB0aGlzLmxhc3RNYXJrZXIubGluZVN0YXJ0ICsgMTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuY3JlYXRlRXJyb3IoaW5kZXgsIGxpbmUsIGNv
bHVtbiwgbXNnKTsKKyAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5maW5pc2hKU1ggPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAvLyBQcmltZSB0aGUgbmV4dCBsb29rYWhlYWQuCisgICAg
ICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICB9OworICAgICAgICBKU1hQYXJzZXIu
cHJvdG90eXBlLnJlZW50ZXJKU1ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLnN0
YXJ0SlNYKCk7CisgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnfScpOworICAgICAgICAgICAg
Ly8gUG9wIHRoZSBjbG9zaW5nICd9JyBhZGRlZCBmcm9tIHRoZSBsb29rYWhlYWQuCisgICAgICAg
ICAgICBpZiAodGhpcy5jb25maWcudG9rZW5zKSB7CisgICAgICAgICAgICAgICAgdGhpcy50b2tl
bnMucG9wKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90
b3R5cGUudGhyb3dVbmV4cGVjdGVkVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4sIG1lc3NhZ2UpIHsK
LSAgICAgICAgICAgIHRocm93IHRoaXMudW5leHBlY3RlZFRva2VuRXJyb3IodG9rZW4sIG1lc3Nh
Z2UpOworICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLmNyZWF0ZUpTWE5vZGUgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpOworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5zY2FubmVyLmluZGV4LAorICAg
ICAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAorICAgICAgICAgICAg
ICAgIGNvbHVtbjogdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydAor
ICAgICAgICAgICAgfTsKICAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS50b2xl
cmF0ZVVuZXhwZWN0ZWRUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbiwgbWVzc2FnZSkgewotICAgICAg
ICAgICAgdGhpcy5lcnJvckhhbmRsZXIudG9sZXJhdGUodGhpcy51bmV4cGVjdGVkVG9rZW5FcnJv
cih0b2tlbiwgbWVzc2FnZSkpOworICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLmNyZWF0ZUpT
WENoaWxkTm9kZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgaW5kZXg6IHRoaXMuc2Nhbm5lci5pbmRleCwKKyAgICAgICAgICAgICAgICBsaW5l
OiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMu
c2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQKKyAgICAgICAgICAgIH07CiAg
ICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuY29sbGVjdENvbW1lbnRzID0gZnVu
Y3Rpb24gKCkgewotICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5jb21tZW50KSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbW1lbnRzID0gdGhpcy5z
Y2FubmVyLnNjYW5Db21tZW50cygpOwotICAgICAgICAgICAgICAgIGlmIChjb21tZW50cy5sZW5n
dGggPiAwICYmIHRoaXMuZGVsZWdhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjb21tZW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGUgPSBjb21tZW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2Rl
ID0gdm9pZCAwOwotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlOiBlLm11bHRpTGluZSA/ICdCbG9ja0NvbW1lbnQnIDogJ0xp
bmVDb21tZW50JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zY2Fu
bmVyLnNvdXJjZS5zbGljZShlLnNsaWNlWzBdLCBlLnNsaWNlWzFdKQotICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yYW5n
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUucmFuZ2UgPSBlLnJhbmdlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuY29uZmlnLmxvYykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubG9jID0g
ZS5sb2M7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgbWV0YWRhdGEgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogZS5sb2Muc3RhcnQubGluZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBlLmxvYy5zdGFydC5jb2x1
bW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogZS5yYW5nZVswXQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGUubG9jLmVu
ZC5saW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGUubG9jLmVu
ZC5jb2x1bW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogZS5yYW5n
ZVsxXQorICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnNjYW5YSFRNTEVudGl0eSA9IGZ1bmN0
aW9uIChxdW90ZSkgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICcmJzsKKyAgICAgICAgICAg
IHZhciB2YWxpZCA9IHRydWU7CisgICAgICAgICAgICB2YXIgdGVybWluYXRlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgdmFyIG51bWVyaWMgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBoZXggPSBm
YWxzZTsKKyAgICAgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVvZigpICYmIHZhbGlkICYm
ICF0ZXJtaW5hdGVkKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zY2FubmVyLnNv
dXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gcXVv
dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSAoY2ggPT09ICc7Jyk7CisgICAgICAgICAgICAgICAg
cmVzdWx0ICs9IGNoOworICAgICAgICAgICAgICAgICsrdGhpcy5zY2FubmVyLmluZGV4OworICAg
ICAgICAgICAgICAgIGlmICghdGVybWluYXRlZCkgeworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHJlc3VsdC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlLmcuICcmIzEyMzsnCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtZXJpYyA9IChjaCA9PT0gJyMnKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJpYykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBlLmcuICcmI3g0MTsnCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhleCA9IChjaCA9PT0gJ3gnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsaWQgPSBoZXggfHwgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KGNo
LmNoYXJDb2RlQXQoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmlj
ID0gbnVtZXJpYyAmJiAhaGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVn
YXRlKG5vZGUsIG1ldGFkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWQgPSB2YWxpZCAmJiAhKG51bWVyaWMgJiYgIWNoYXJhY3Rlcl8xLkNoYXJhY3Rl
ci5pc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAhKGhleCAmJiAhY2hhcmFjdGVyXzEuQ2hhcmFjdGVy
LmlzSGV4RGlnaXQoY2guY2hhckNvZGVBdCgwKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkICYmIHRlcm1pbmF0ZWQgJiYgcmVzdWx0
Lmxlbmd0aCA+IDIpIHsKKyAgICAgICAgICAgICAgICAvLyBlLmcuICcmI3g0MTsnIGJlY29tZXMg
anVzdCAnI3g0MScKKyAgICAgICAgICAgICAgICB2YXIgc3RyID0gcmVzdWx0LnN1YnN0cigxLCBy
ZXN1bHQubGVuZ3RoIC0gMik7CisgICAgICAgICAgICAgICAgaWYgKG51bWVyaWMgJiYgc3RyLmxl
bmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gU3RyaW5nLmZyb21DaGFy
Q29kZShwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxMCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChoZXggJiYgc3RyLmxlbmd0aCA+IDIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCgnMCcgKyBz
dHIuc3Vic3RyKDEpLCAxNikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmICghbnVtZXJpYyAmJiAhaGV4ICYmIHhodG1sX2VudGl0aWVzXzEuWEhUTUxFbnRpdGll
c1tzdHJdKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHhodG1sX2VudGl0aWVzXzEu
WEhUTUxFbnRpdGllc1tzdHJdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH07Ci0gICAgICAgIC8vIEZyb20gaW50
ZXJuYWwgcmVwcmVzZW50YXRpb24gdG8gYW4gZXh0ZXJuYWwgc3RydWN0dXJlCi0gICAgICAgIFBh
cnNlci5wcm90b3R5cGUuZ2V0VG9rZW5SYXcgPSBmdW5jdGlvbiAodG9rZW4pIHsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5l
bmQpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLmNvbnZlcnRUb2tlbiA9
IGZ1bmN0aW9uICh0b2tlbikgewotICAgICAgICAgICAgdmFyIHQ7Ci0gICAgICAgICAgICB0ID0g
ewotICAgICAgICAgICAgICAgIHR5cGU6IHRva2VuXzEuVG9rZW5OYW1lW3Rva2VuLnR5cGVdLAot
ICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFRva2VuUmF3KHRva2VuKQotICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yYW5nZSkgewotICAgICAgICAgICAg
ICAgIHQucmFuZ2UgPSBbdG9rZW4uc3RhcnQsIHRva2VuLmVuZF07CisgICAgICAgIC8vIFNjYW4g
dGhlIG5leHQgSlNYIHRva2VuLiBUaGlzIHJlcGxhY2VzIFNjYW5uZXIjbGV4IHdoZW4gaW4gSlNY
IG1vZGUuCisgICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUubGV4SlNYID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgdmFyIGNwID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRo
aXMuc2Nhbm5lci5pbmRleCk7CisgICAgICAgICAgICAvLyA8ID4gLyA6ID0geyB9CisgICAgICAg
ICAgICBpZiAoY3AgPT09IDYwIHx8IGNwID09PSA2MiB8fCBjcCA9PT0gNDcgfHwgY3AgPT09IDU4
IHx8IGNwID09PSA2MSB8fCBjcCA9PT0gMTIzIHx8IGNwID09PSAxMjUpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgdmFsdWUgPSB0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsr
XTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiA3
IC8qIFB1bmN0dWF0b3IgKi8sCisgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCisg
ICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5zY2FubmVyLmxpbmVTdGFydCwKKyAg
ICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuc2Nhbm5lci5pbmRleCAtIDEsCisgICAgICAg
ICAgICAgICAgICAgIGVuZDogdGhpcy5zY2FubmVyLmluZGV4CisgICAgICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sb2MpIHsKLSAgICAg
ICAgICAgICAgICB0LmxvYyA9IHsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMuc3RhcnRNYXJrZXIubGluZU51bWJlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zdGFydE1hcmtlci5pbmRleCAtIHRo
aXMuc3RhcnRNYXJrZXIubGluZVN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAg
ICAgICAgICAgICAgIGVuZDogewotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5z
Y2FubmVyLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMu
c2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQKKyAgICAgICAgICAgIC8vICIg
JworICAgICAgICAgICAgaWYgKGNwID09PSAzNCB8fCBjcCA9PT0gMzkpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgc3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisgICAgICAgICAgICAgICAgdmFy
IHF1b3RlID0gdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXgrK107CisgICAg
ICAgICAgICAgICAgdmFyIHN0ciA9ICcnOworICAgICAgICAgICAgICAgIHdoaWxlICghdGhpcy5z
Y2FubmVyLmVvZigpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc2Nhbm5l
ci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4KytdOworICAgICAgICAgICAgICAgICAgICBpZiAo
Y2ggPT09IHF1b3RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gJyYnKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdGhpcy5zY2FuWEhUTUxFbnRpdHkocXVv
dGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOwogICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgICAgIHR5cGU6IDggLyogU3RyaW5nTGl0ZXJhbCAqLywKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWU6IHN0ciwKKyAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5zY2Fu
bmVyLmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5zY2Fu
bmVyLmxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAg
ICAgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRleAogICAgICAgICAgICAgICAgIH07
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHsKLSAgICAgICAg
ICAgICAgICB0LnJlZ2V4ID0gdG9rZW4ucmVnZXg7CisgICAgICAgICAgICAvLyAuLi4gb3IgLgor
ICAgICAgICAgICAgaWYgKGNwID09PSA0NikgeworICAgICAgICAgICAgICAgIHZhciBuMSA9IHRo
aXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXggKyAxKTsKKyAg
ICAgICAgICAgICAgICB2YXIgbjIgPSB0aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhp
cy5zY2FubmVyLmluZGV4ICsgMik7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gKG4xID09
PSA0NiAmJiBuMiA9PT0gNDYpID8gJy4uLicgOiAnLic7CisgICAgICAgICAgICAgICAgdmFyIHN0
YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4OworICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5p
bmRleCArPSB2YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICAgICAgdHlwZTogNyAvKiBQdW5jdHVhdG9yICovLAorICAgICAgICAgICAgICAgICAg
ICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nh
bm5lci5saW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMuc2Nh
bm5lci5saW5lU3RhcnQsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAg
ICAgICAgICAgICAgICAgZW5kOiB0aGlzLnNjYW5uZXIuaW5kZXgKKyAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHQ7Ci0gICAgICAgIH07Ci0gICAg
ICAgIFBhcnNlci5wcm90b3R5cGUubmV4dFRva2VuID0gZnVuY3Rpb24gKCkgewotICAgICAgICAg
ICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB0aGlzLmxhc3RNYXJr
ZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAgICAgICAgICB0aGlzLmxhc3RNYXJr
ZXIubGluZU51bWJlciA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOwotICAgICAgICAgICAgdGhp
cy5sYXN0TWFya2VyLmxpbmVTdGFydCA9IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7Ci0gICAgICAg
ICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpOwotICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtl
ci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKLSAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJr
ZXIubGluZU51bWJlciA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOwotICAgICAgICAgICAgdGhp
cy5zdGFydE1hcmtlci5saW5lU3RhcnQgPSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0OwotICAgICAg
ICAgICAgdmFyIG5leHQ7Ci0gICAgICAgICAgICBuZXh0ID0gdGhpcy5zY2FubmVyLmxleCgpOwot
ICAgICAgICAgICAgdGhpcy5oYXNMaW5lVGVybWluYXRvciA9ICh0b2tlbiAmJiBuZXh0KSA/ICh0
b2tlbi5saW5lTnVtYmVyICE9PSBuZXh0LmxpbmVOdW1iZXIpIDogZmFsc2U7Ci0gICAgICAgICAg
ICBpZiAobmV4dCAmJiB0aGlzLmNvbnRleHQuc3RyaWN0ICYmIG5leHQudHlwZSA9PT0gdG9rZW5f
MS5Ub2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5p
c1N0cmljdE1vZGVSZXNlcnZlZFdvcmQobmV4dC52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbmV4dC50eXBlID0gdG9rZW5fMS5Ub2tlbi5LZXl3b3JkOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIC8vIGAKKyAgICAgICAgICAgIGlmIChjcCA9PT0gOTYpIHsKKyAgICAgICAg
ICAgICAgICAvLyBPbmx5IHBsYWNlaG9sZGVyLCBzaW5jZSBpdCB3aWxsIGJlIHJlc2Nhbm5lZCBh
cyBhIHJlYWwgYXNzaWdubWVudCBleHByZXNzaW9uLgorICAgICAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IDEwIC8qIFRlbXBsYXRlICovLAorICAgICAgICAg
ICAgICAgICAgICB2YWx1ZTogJycsCisgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRo
aXMuc2Nhbm5lci5saW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRo
aXMuc2Nhbm5lci5saW5lU3RhcnQsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnNj
YW5uZXIuaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIGVuZDogdGhpcy5zY2FubmVyLmluZGV4
CisgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMubG9v
a2FoZWFkID0gbmV4dDsKLSAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy50b2tlbnMgJiYgbmV4
dC50eXBlICE9PSB0b2tlbl8xLlRva2VuLkVPRikgewotICAgICAgICAgICAgICAgIHRoaXMudG9r
ZW5zLnB1c2godGhpcy5jb252ZXJ0VG9rZW4obmV4dCkpOworICAgICAgICAgICAgLy8gSWRlbnRp
ZmVyIGNhbiBub3QgY29udGFpbiBiYWNrc2xhc2ggKGNoYXIgY29kZSA5MikuCisgICAgICAgICAg
ICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGNwKSAmJiAoY3Ag
IT09IDkyKSkgeworICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuc2Nhbm5lci5pbmRl
eDsKKyAgICAgICAgICAgICAgICArK3RoaXMuc2Nhbm5lci5pbmRleDsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
Y2ggPSB0aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5zY2FubmVyLmluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZp
ZXJQYXJ0KGNoKSAmJiAoY2ggIT09IDkyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKyt0
aGlzLnNjYW5uZXIuaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY2ggPT09IDQ1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBI
eXBoZW4gKGNoYXIgY29kZSA0NSkgY2FuIGJlIHBhcnQgb2YgYW4gaWRlbnRpZmllci4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICsrdGhpcy5zY2FubmVyLmluZGV4OworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZShzdGFydCwgdGhp
cy5zY2FubmVyLmluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgICAgICB0eXBlOiAxMDAgLyogSWRlbnRpZmllciAqLywKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWU6IGlkLAorICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIu
bGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIu
bGluZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAg
ICAgICAgICAgIGVuZDogdGhpcy5zY2FubmVyLmluZGV4CisgICAgICAgICAgICAgICAgfTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLnNjYW5uZXIudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgfTsKLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5uZXh0UmVnZXhUb2tlbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgSlNYUGFyc2VyLnByb3RvdHlwZS5uZXh0SlNYVG9rZW4gPSBmdW5jdGlvbiAoKSB7CiAgICAg
ICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpOwotICAgICAgICAgICAgdmFyIHRva2VuID0g
dGhpcy5zY2FubmVyLnNjYW5SZWdFeHAoKTsKKyAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIu
aW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisgICAgICAgICAgICB0aGlzLnN0YXJ0TWFya2Vy
LmxpbmUgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKKyAgICAgICAgICAgIHRoaXMuc3RhcnRN
YXJrZXIuY29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFy
dDsKKyAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubGV4SlNYKCk7CisgICAgICAgICAgICB0
aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisgICAgICAgICAgICB0
aGlzLmxhc3RNYXJrZXIubGluZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOworICAgICAgICAg
ICAgdGhpcy5sYXN0TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nh
bm5lci5saW5lU3RhcnQ7CiAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcudG9rZW5zKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gUG9wIHRoZSBwcmV2aW91cyB0b2tlbiwgJy8nIG9yICcvPScKLSAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFkZGVkIGZyb20gdGhlIGxvb2thaGVhZCB0b2tlbi4K
LSAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wb3AoKTsKICAgICAgICAgICAgICAgICB0aGlz
LnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKHRva2VuKSk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAvLyBQcmltZSB0aGUgbmV4dCBsb29rYWhlYWQuCi0gICAgICAgICAgICB0aGlz
Lmxvb2thaGVhZCA9IHRva2VuOwotICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAg
ICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5jcmVhdGVOb2RlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgICAgICAgICBpbmRleDogdGhpcy5zdGFydE1hcmtlci5pbmRleCwKLSAgICAgICAgICAgICAg
ICBsaW5lOiB0aGlzLnN0YXJ0TWFya2VyLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgY29s
dW1uOiB0aGlzLnN0YXJ0TWFya2VyLmluZGV4IC0gdGhpcy5zdGFydE1hcmtlci5saW5lU3RhcnQK
LSAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuc3Rh
cnROb2RlID0gZnVuY3Rpb24gKHRva2VuKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAg
ICAgICAgICAgIGluZGV4OiB0b2tlbi5zdGFydCwKLSAgICAgICAgICAgICAgICBsaW5lOiB0b2tl
bi5saW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGNvbHVtbjogdG9rZW4uc3RhcnQgLSB0b2tl
bi5saW5lU3RhcnQKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5w
cm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbiAobWV0YSwgbm9kZSkgewotICAgICAgICAgICAg
aWYgKHRoaXMuY29uZmlnLnJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5yYW5nZSA9IFtt
ZXRhLmluZGV4LCB0aGlzLmxhc3RNYXJrZXIuaW5kZXhdOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKHRoaXMuY29uZmlnLmxvYykgewotICAgICAgICAgICAgICAgIG5vZGUubG9jID0g
ewotICAgICAgICAgICAgICAgICAgICBzdGFydDogewotICAgICAgICAgICAgICAgICAgICAgICAg
bGluZTogbWV0YS5saW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBtZXRhLmNv
bHVtbgotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBlbmQ6IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubGFzdE1hcmtlci5saW5lTnVtYmVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmxhc3RNYXJrZXIuaW5kZXgg
LSB0aGlzLmxhc3RNYXJrZXIubGluZVN0YXJ0CisgICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUu
bmV4dEpTWFRleHQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLnN0YXJ0TWFya2Vy
LmluZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OworICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtl
ci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CisgICAgICAgICAgICB0aGlzLnN0YXJ0
TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3Rh
cnQ7CisgICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisgICAgICAg
ICAgICB2YXIgdGV4dCA9ICcnOworICAgICAgICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIuZW9m
KCkpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMu
c2Nhbm5lci5pbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAneycgfHwgY2ggPT09
ICc8JykgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7CisgICAgICAgICAgICAgICAgdGV4
dCArPSBjaDsKKyAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGlu
ZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgKyt0
aGlzLnNjYW5uZXIubGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAn
XHInICYmIHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XSA9PT0gJ1xuJykg
eworICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7CiAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIGlmICh0
aGlzLmNvbmZpZy5zb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5sb2Muc291cmNl
ID0gdGhpcy5jb25maWcuc291cmNlOworICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIu
bGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4OwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0aGlzLmRlbGVnYXRlKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIG1ldGFkYXRhID0gewotICAgICAgICAgICAgICAgICAgICBzdGFydDogewotICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZTogbWV0YS5saW5lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgY29sdW1uOiBtZXRhLmNvbHVtbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDog
bWV0YS5pbmRleAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBl
bmQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubGFzdE1hcmtlci5saW5l
TnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmxhc3RNYXJrZXIu
aW5kZXggLSB0aGlzLmxhc3RNYXJrZXIubGluZVN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0OiB0aGlzLmxhc3RNYXJrZXIuaW5kZXgKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShub2RlLCBt
ZXRhZGF0YSk7CisgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5u
ZXIuaW5kZXg7CisgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZSA9IHRoaXMuc2Nhbm5l
ci5saW5lTnVtYmVyOworICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmNvbHVtbiA9IHRoaXMu
c2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7CisgICAgICAgICAgICB2YXIg
dG9rZW4gPSB7CisgICAgICAgICAgICAgICAgdHlwZTogMTAxIC8qIFRleHQgKi8sCisgICAgICAg
ICAgICAgICAgdmFsdWU6IHRleHQsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5z
Y2FubmVyLmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5u
ZXIubGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAg
ICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRleAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IGlmICgodGV4dC5sZW5ndGggPiAwKSAmJiB0aGlzLmNvbmZpZy50b2tlbnMpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKHRva2VuKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0
b2tlbjsKICAgICAgICAgfTsKLSAgICAgICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1h
dGNoIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KKyAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlw
ZS5wZWVrSlNYVG9rZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgc3RhdGUgPSB0
aGlzLnNjYW5uZXIuc2F2ZVN0YXRlKCk7CisgICAgICAgICAgICB0aGlzLnNjYW5uZXIuc2NhbkNv
bW1lbnRzKCk7CisgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMubGV4SlNYKCk7CisgICAgICAg
ICAgICB0aGlzLnNjYW5uZXIucmVzdG9yZVN0YXRlKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVy
biBuZXh0OworICAgICAgICB9OworICAgICAgICAvLyBFeHBlY3QgdGhlIG5leHQgSlNYIHRva2Vu
IHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KICAgICAgICAgLy8gSWYgbm90LCBh
biBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuZXhw
ZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5l
eHRUb2tlbigpOwotICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IHRva2VuXzEuVG9rZW4u
UHVuY3R1YXRvciB8fCB0b2tlbi52YWx1ZSAhPT0gdmFsdWUpIHsKKyAgICAgICAgSlNYUGFyc2Vy
LnByb3RvdHlwZS5leHBlY3RKU1ggPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZh
ciB0b2tlbiA9IHRoaXMubmV4dEpTWFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9rZW4udHlw
ZSAhPT0gNyAvKiBQdW5jdHVhdG9yICovIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgewogICAg
ICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwogICAgICAgICAg
ICAgfQogICAgICAgICB9OwotICAgICAgICAvLyBRdWlldGx5IGV4cGVjdCBhIGNvbW1hIHdoZW4g
aW4gdG9sZXJhbnQgbW9kZSwgb3RoZXJ3aXNlIGRlbGVnYXRlcyB0byBleHBlY3QoKS4KLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5leHBlY3RDb21tYVNlcGFyYXRvciA9IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy50b2xlcmFudCkgewotICAgICAgICAgICAgICAg
IHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgICAgIGlmICh0b2tlbi50
eXBlID09PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udmFsdWUgPT09ICcsJykg
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2Vu
LlB1bmN0dWF0b3IgJiYgdG9rZW4udmFsdWUgPT09ICc7JykgewotICAgICAgICAgICAgICAgICAg
ICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5l
eHBlY3RlZFRva2VuKHRva2VuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4o
dG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLmV4cGVjdCgnLCcpOwotICAgICAgICAgICAgfQorICAgICAgICAvLyBSZXR1cm4gdHJ1
ZSBpZiB0aGUgbmV4dCBKU1ggdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3Iu
CisgICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUubWF0Y2hKU1ggPSBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5wZWVrSlNYVG9rZW4oKTsKKyAgICAgICAg
ICAgIHJldHVybiBuZXh0LnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLyAmJiBuZXh0LnZhbHVl
ID09PSB2YWx1ZTsKICAgICAgICAgfTsKLSAgICAgICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRva2Vu
IHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQga2V5d29yZC4KLSAgICAgICAgLy8gSWYgbm90LCBhbiBl
eGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuZXhwZWN0
S2V5d29yZCA9IGZ1bmN0aW9uIChrZXl3b3JkKSB7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0
aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IHRva2VuXzEu
VG9rZW4uS2V5d29yZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29yZCkgeworICAgICAgICBKU1hQ
YXJzZXIucHJvdG90eXBlLnBhcnNlSlNYSWRlbnRpZmllciA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisgICAgICAgICAgICB2YXIg
dG9rZW4gPSB0aGlzLm5leHRKU1hUb2tlbigpOworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUg
IT09IDEwMCAvKiBJZGVudGlmaWVyICovKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbih0b2tlbik7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hJZGVudGlmaWVyKHRva2VuLnZhbHVl
KSk7CiAgICAgICAgIH07Ci0gICAgICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2Vu
IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgotICAgICAgICBQYXJzZXIucHJvdG90
eXBlLm1hdGNoID0gZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5s
b29rYWhlYWQudHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5QdW5jdHVhdG9yICYmIHRoaXMubG9va2Fo
ZWFkLnZhbHVlID09PSB2YWx1ZTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gUmV0dXJuIHRydWUg
aWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleXdvcmQKLSAgICAgICAg
UGFyc2VyLnByb3RvdHlwZS5tYXRjaEtleXdvcmQgPSBmdW5jdGlvbiAoa2V5d29yZCkgewotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMubG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uS2V5
d29yZCAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKLSAgICAgICAgfTsKLSAg
ICAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lm
aWVkIGNvbnRleHR1YWwga2V5d29yZAotICAgICAgICAvLyAod2hlcmUgYW4gaWRlbnRpZmllciBp
cyBzb21ldGltZXMgYSBrZXl3b3JkIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkKLSAgICAgICAg
UGFyc2VyLnByb3RvdHlwZS5tYXRjaENvbnRleHR1YWxLZXl3b3JkID0gZnVuY3Rpb24gKGtleXdv
cmQpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8x
LlRva2VuLklkZW50aWZpZXIgJiYgdGhpcy5sb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7Ci0g
ICAgICAgIH07Ci0gICAgICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFu
IGFzc2lnbm1lbnQgb3BlcmF0b3IKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaEFzc2ln
biA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlICE9
PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hFbGVtZW50TmFtZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7
CisgICAgICAgICAgICB2YXIgZWxlbWVudE5hbWUgPSB0aGlzLnBhcnNlSlNYSWRlbnRpZmllcigp
OworICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hKU1goJzonKSkgeworICAgICAgICAgICAgICAg
IHZhciBuYW1lc3BhY2UgPSBlbGVtZW50TmFtZTsKKyAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dEpTWCgnOicpOworICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSB0aGlzLnBhcnNlSlNYSWRl
bnRpZmllcigpOworICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgSlNYTm9kZS5KU1hOYW1lc3BhY2VkTmFtZShuYW1lc3BhY2UsIG5hbWVfMSkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG9wID0gdGhpcy5sb29rYWhlYWQudmFsdWU7
Ci0gICAgICAgICAgICByZXR1cm4gb3AgPT09ICc9JyB8fAotICAgICAgICAgICAgICAgIG9wID09
PSAnKj0nIHx8Ci0gICAgICAgICAgICAgICAgb3AgPT09ICcqKj0nIHx8Ci0gICAgICAgICAgICAg
ICAgb3AgPT09ICcvPScgfHwKLSAgICAgICAgICAgICAgICBvcCA9PT0gJyU9JyB8fAotICAgICAg
ICAgICAgICAgIG9wID09PSAnKz0nIHx8Ci0gICAgICAgICAgICAgICAgb3AgPT09ICctPScgfHwK
LSAgICAgICAgICAgICAgICBvcCA9PT0gJzw8PScgfHwKLSAgICAgICAgICAgICAgICBvcCA9PT0g
Jz4+PScgfHwKLSAgICAgICAgICAgICAgICBvcCA9PT0gJz4+Pj0nIHx8Ci0gICAgICAgICAgICAg
ICAgb3AgPT09ICcmPScgfHwKLSAgICAgICAgICAgICAgICBvcCA9PT0gJ149JyB8fAotICAgICAg
ICAgICAgICAgIG9wID09PSAnfD0nOwotICAgICAgICB9OwotICAgICAgICAvLyBDb3ZlciBncmFt
bWFyIHN1cHBvcnQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdoZW4gYW4gYXNzaWdubWVudCBl
eHByZXNzaW9uIHBvc2l0aW9uIHN0YXJ0cyB3aXRoIGFuIGxlZnQgcGFyZW50aGVzaXMsIHRoZSBk
ZXRlcm1pbmF0aW9uIG9mIHRoZSB0eXBlCi0gICAgICAgIC8vIG9mIHRoZSBzeW50YXggaXMgdG8g
YmUgZGVmZXJyZWQgYXJiaXRyYXJpbHkgbG9uZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBwYXJlbnRo
ZXNlcyBwYWlyIChwbHVzIGEgbG9va2FoZWFkKQotICAgICAgICAvLyBvciB0aGUgZmlyc3QgY29t
bWEuIFRoaXMgc2l0dWF0aW9uIGFsc28gZGVmZXJzIHRoZSBkZXRlcm1pbmF0aW9uIG9mIGFsbCB0
aGUgZXhwcmVzc2lvbnMgbmVzdGVkIGluIHRoZSBwYWlyLgotICAgICAgICAvLwotICAgICAgICAv
LyBUaGVyZSBhcmUgdGhyZWUgcHJvZHVjdGlvbnMgdGhhdCBjYW4gYmUgcGFyc2VkIGluIGEgcGFy
ZW50aGVzZXMgcGFpciB0aGF0IG5lZWRzIHRvIGJlIGRldGVybWluZWQKLSAgICAgICAgLy8gYWZ0
ZXIgdGhlIG91dGVybW9zdCBwYWlyIGlzIGNsb3NlZC4gVGhleSBhcmU6Ci0gICAgICAgIC8vCi0g
ICAgICAgIC8vICAgMS4gQXNzaWdubWVudEV4cHJlc3Npb24KLSAgICAgICAgLy8gICAyLiBCaW5k
aW5nRWxlbWVudHMKLSAgICAgICAgLy8gICAzLiBBc3NpZ25tZW50VGFyZ2V0cwotICAgICAgICAv
LwotICAgICAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBleHBvbmVudGlhbCBiYWNrdHJhY2tpbmcs
IHdlIHVzZSB0d28gZmxhZ3MgdG8gZGVub3RlIGlmIHRoZSBwcm9kdWN0aW9uIGNhbiBiZQotICAg
ICAgICAvLyBiaW5kaW5nIGVsZW1lbnQgb3IgYXNzaWdubWVudCB0YXJnZXQuCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIFRoZSB0aHJlZSBwcm9kdWN0aW9ucyBoYXZlIHRoZSByZWxhdGlvbnNoaXA6
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgQmluZGluZ0VsZW1lbnRzIOKKhiBBc3NpZ25tZW50
VGFyZ2V0cyDiioYgQXNzaWdubWVudEV4cHJlc3Npb24KLSAgICAgICAgLy8KLSAgICAgICAgLy8g
d2l0aCBhIHNpbmdsZSBleGNlcHRpb24gdGhhdCBDb3ZlckluaXRpYWxpemVkTmFtZSB3aGVuIHVz
ZWQgZGlyZWN0bHkgaW4gYW4gRXhwcmVzc2lvbiwgZ2VuZXJhdGVzCi0gICAgICAgIC8vIGFuIGVh
cmx5IGVycm9yLiBUaGVyZWZvcmUsIHdlIG5lZWQgdGhlIHRoaXJkIHN0YXRlLCBmaXJzdENvdmVy
SW5pdGlhbGl6ZWROYW1lRXJyb3IsIHRvIHRyYWNrIHRoZQotICAgICAgICAvLyBmaXJzdCB1c2Fn
ZSBvZiBDb3ZlckluaXRpYWxpemVkTmFtZSBhbmQgcmVwb3J0IGl0IHdoZW4gd2UgcmVhY2hlZCB0
aGUgZW5kIG9mIHRoZSBwYXJlbnRoZXNlcyBwYWlyLgotICAgICAgICAvLwotICAgICAgICAvLyBp
c29sYXRlQ292ZXJHcmFtbWFyIGZ1bmN0aW9uIHJ1bnMgdGhlIGdpdmVuIHBhcnNlciBmdW5jdGlv
biB3aXRoIGEgbmV3IGNvdmVyIGdyYW1tYXIgY29udGV4dCwgYW5kIGl0IGRvZXMgbm90Ci0gICAg
ICAgIC8vIGVmZmVjdCB0aGUgY3VycmVudCBmbGFncy4gVGhpcyBtZWFucyB0aGUgcHJvZHVjdGlv
biB0aGUgcGFyc2VyIHBhcnNlcyBpcyBvbmx5IHVzZWQgYXMgYW4gZXhwcmVzc2lvbi4gVGhlcmVm
b3JlCi0gICAgICAgIC8vIHRoZSBDb3ZlckluaXRpYWxpemVkTmFtZSBjaGVjayBpcyBjb25kdWN0
ZWQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGluaGVyaXRDb3ZlckdyYW1tYXIgZnVuY3Rpb24g
cnVucyB0aGUgZ2l2ZW4gcGFyc2UgZnVuY3Rpb24gd2l0aCBhIG5ldyBjb3ZlciBncmFtbWFyIGNv
bnRleHQsIGFuZCBpdCBwcm9wYWdhdGVzCi0gICAgICAgIC8vIHRoZSBmbGFncyBvdXRzaWRlIG9m
IHRoZSBwYXJzZXIuIFRoaXMgbWVhbnMgdGhlIHByb2R1Y3Rpb24gdGhlIHBhcnNlciBwYXJzZXMg
aXMgdXNlZCBhcyBhIHBhcnQgb2YgYSBwb3RlbnRpYWwKLSAgICAgICAgLy8gcGF0dGVybi4gVGhl
IENvdmVySW5pdGlhbGl6ZWROYW1lIGNoZWNrIGlzIGRlZmVycmVkLgotICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLmlzb2xhdGVDb3ZlckdyYW1tYXIgPSBmdW5jdGlvbiAocGFyc2VGdW5jdGlvbikg
ewotICAgICAgICAgICAgdmFyIHByZXZpb3VzSXNCaW5kaW5nRWxlbWVudCA9IHRoaXMuY29udGV4
dC5pc0JpbmRpbmdFbGVtZW50OwotICAgICAgICAgICAgdmFyIHByZXZpb3VzSXNBc3NpZ25tZW50
VGFyZ2V0ID0gdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldDsKLSAgICAgICAgICAgIHZh
ciBwcmV2aW91c0ZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IHRoaXMuY29udGV4dC5m
aXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQu
aXNCaW5kaW5nRWxlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3Np
Z25tZW50VGFyZ2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVy
SW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOwotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHBh
cnNlRnVuY3Rpb24uY2FsbCh0aGlzKTsKLSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuZmly
c3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxp
emVkTmFtZUVycm9yKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hKU1goJy4nKSkg
eworICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLm1hdGNoSlNYKCcuJykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIG9iamVjdCA9IGVsZW1lbnROYW1lOworICAgICAgICAgICAgICAgICAg
ICB0aGlzLmV4cGVjdEpTWCgnLicpOworICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkg
PSB0aGlzLnBhcnNlSlNYSWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgICAgICBlbGVtZW50
TmFtZSA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYTWVtYmVyRXhwcmVzc2lv
bihvYmplY3QsIHByb3BlcnR5KSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBwcmV2aW91c0lzQmlu
ZGluZ0VsZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0
ID0gcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQu
Zmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJldmlvdXNGaXJzdENvdmVySW5pdGlh
bGl6ZWROYW1lRXJyb3I7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Owot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLmluaGVyaXRDb3ZlckdyYW1tYXIgPSBmdW5jdGlvbiAo
cGFyc2VGdW5jdGlvbikgewotICAgICAgICAgICAgdmFyIHByZXZpb3VzSXNCaW5kaW5nRWxlbWVu
dCA9IHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50OwotICAgICAgICAgICAgdmFyIHByZXZp
b3VzSXNBc3NpZ25tZW50VGFyZ2V0ID0gdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldDsK
LSAgICAgICAgICAgIHZhciBwcmV2aW91c0ZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9
IHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7Ci0gICAgICAgICAg
ICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICB0aGlz
LmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOwotICAgICAgICAgICAg
dmFyIHJlc3VsdCA9IHBhcnNlRnVuY3Rpb24uY2FsbCh0aGlzKTsKLSAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQg
JiYgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50OwotICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmlz
QXNzaWdubWVudFRhcmdldCA9IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgJiYgcHJl
dmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RD
b3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJldmlvdXNGaXJzdENvdmVySW5pdGlhbGl6ZWRO
YW1lRXJyb3IgfHwgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudE5h
bWU7CiAgICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuY29uc3VtZVNlbWljb2xv
biA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc7JykpIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICBKU1hQYXJzZXIucHJvdG90
eXBlLnBhcnNlSlNYQXR0cmlidXRlTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZh
ciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisgICAgICAgICAgICB2YXIgYXR0cmlidXRl
TmFtZTsKKyAgICAgICAgICAgIHZhciBpZGVudGlmaWVyID0gdGhpcy5wYXJzZUpTWElkZW50aWZp
ZXIoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoSlNYKCc6JykpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgbmFtZXNwYWNlID0gaWRlbnRpZmllcjsKKyAgICAgICAgICAgICAgICB0aGlzLmV4
cGVjdEpTWCgnOicpOworICAgICAgICAgICAgICAgIHZhciBuYW1lXzIgPSB0aGlzLnBhcnNlSlNY
SWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWE5hbWVzcGFjZWROYW1lKG5hbWVzcGFjZSwgbmFtZV8y
KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghdGhpcy5oYXNMaW5lVGVy
bWluYXRvcikgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSB0
b2tlbl8xLlRva2VuLkVPRiAmJiAhdGhpcy5tYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnN0
YXJ0TWFya2VyLmluZGV4OwotICAgICAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lTnVt
YmVyID0gdGhpcy5zdGFydE1hcmtlci5saW5lTnVtYmVyOwotICAgICAgICAgICAgICAgIHRoaXMu
bGFzdE1hcmtlci5saW5lU3RhcnQgPSB0aGlzLnN0YXJ0TWFya2VyLmxpbmVTdGFydDsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSBpZGVudGlmaWVy
OwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWU7CiAgICAg
ICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEyLjIgUHJpbWFyeSBFeHByZXNzaW9ucwotICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAg
ICAgdmFyIGV4cHI7Ci0gICAgICAgICAgICB2YXIgdmFsdWUsIHRva2VuLCByYXc7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKHRoaXMubG9va2FoZWFkLnR5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlz
LmNvbnRleHQuaXNNb2R1bGUgfHwgdGhpcy5jb250ZXh0LmF3YWl0KSAmJiB0aGlzLmxvb2thaGVh
ZC52YWx1ZSA9PT0gJ2F3YWl0JykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xl
cmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMubWF0Y2hBc3luY0Z1bmN0aW9uKCkg
PyB0aGlzLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkgOiB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLklkZW50aWZpZXIodGhpcy5uZXh0VG9rZW4oKS52YWx1ZSkpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uTnVtZXJp
Y0xpdGVyYWw6Ci0gICAgICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLlN0cmluZ0xpdGVy
YWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHRoaXMu
bG9va2FoZWFkLm9jdGFsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRl
VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmlj
dE9jdGFsTGl0ZXJhbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pOwotICAgICAgICAgICAgICAgICAgICBleHBy
ID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCByYXcp
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSB0b2tl
bl8xLlRva2VuLkJvb2xlYW5MaXRlcmFsOgotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRl
eHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRv
a2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4udmFsdWUg
PSAodG9rZW4udmFsdWUgPT09ICd0cnVlJyk7Ci0gICAgICAgICAgICAgICAgICAgIHJhdyA9IHRo
aXMuZ2V0VG9rZW5SYXcodG9rZW4pOwotICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCByYXcpKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2Vu
Lk51bGxMaXRlcmFsOgotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25t
ZW50VGFyZ2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Jp
bmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5u
ZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4udmFsdWUgPSBudWxsOwotICAg
ICAgICAgICAgICAgICAgICByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKLSAgICAgICAg
ICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTGl0ZXJhbCh0
b2tlbi52YWx1ZSwgcmF3KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5UZW1wbGF0ZToKLSAgICAgICAgICAgICAgICAgICAg
ZXhwciA9IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3I6Ci0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5sb29rYWhlYWQudmFsdWU7Ci0gICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJygnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRp
bmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRo
aXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlR3JvdXBFeHByZXNzaW9uKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ1snOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRD
b3ZlckdyYW1tYXIodGhpcy5wYXJzZUFycmF5SW5pdGlhbGl6ZXIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneyc6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1h
cih0aGlzLnBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICcvPSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FubmVyLmluZGV4ID0gdGhpcy5zdGFydE1hcmtl
ci5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubmV4dFJl
Z2V4VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXcgPSB0aGlzLmdldFRv
a2VuUmF3KHRva2VuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5SZWdleExpdGVyYWwodG9rZW4udmFsdWUsIHJhdywgdG9r
ZW4ucmVnZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
ciA9IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSB0b2tlbl8xLlRva2VuLktleXdvcmQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5jb250ZXh0LnN0cmljdCAmJiB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCAmJiB0aGlzLm1h
dGNoS2V5d29yZCgneWllbGQnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRo
aXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHRoaXMubWF0Y2hL
ZXl3b3JkKCdsZXQnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcih0aGlzLm5leHRUb2tlbigpLnZhbHVlKSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVu
dCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3Jk
KCdmdW5jdGlvbicpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMu
cGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCd0aGlzJykp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LlRoaXNFeHByZXNzaW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2NsYXNzJykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZUNsYXNzRXhwcmVzc2lv
bigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMudGhy
b3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7CisgICAgICAgIEpTWFBhcnNlci5w
cm90b3R5cGUucGFyc2VKU1hTdHJpbmdMaXRlcmFsQXR0cmlidXRlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKKyAgICAgICAgICAg
IHZhciB0b2tlbiA9IHRoaXMubmV4dEpTWFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9rZW4u
dHlwZSAhPT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSB7CisgICAgICAgICAgICAgICAgdGhpcy50
aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gZXhwcjsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gRUNNQS0yNjIgMTIuMi41IEFycmF5
IEluaXRpYWxpemVyCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTcHJlYWRFbGVtZW50
ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKLSAgICAgICAgICAgIHZhciBhcmcg
PSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlNwcmVh
ZEVsZW1lbnQoYXJnKSk7CisgICAgICAgICAgICB2YXIgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0
b2tlbik7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5M
aXRlcmFsKHRva2VuLnZhbHVlLCByYXcpKTsKICAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZUFycmF5SW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGVsZW1lbnRz
ID0gW107Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgnWycpOwotICAgICAgICAgICAgd2hpbGUg
KCF0aGlzLm1hdGNoKCddJykpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJy4uLicpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBlbGVtZW50ID0gdGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLm1hdGNoKCddJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBlbGVtZW50
cy5wdXNoKHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24pKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCddJykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcsJyk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFy
c2VKU1hFeHByZXNzaW9uQXR0cmlidXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNY
KCd7Jyk7CisgICAgICAgICAgICB0aGlzLmZpbmlzaEpTWCgpOworICAgICAgICAgICAgaWYgKHRo
aXMubWF0Y2goJ30nKSkgeworICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcignSlNY
IGF0dHJpYnV0ZXMgbXVzdCBvbmx5IGJlIGFzc2lnbmVkIGEgbm9uLWVtcHR5IGV4cHJlc3Npb24n
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCddJyk7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5BcnJheUV4cHJlc3Npb24o
ZWxlbWVudHMpKTsKKyAgICAgICAgICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB0aGlzLnJlZW50ZXJKU1goKTsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWEV4cHJlc3Np
b25Db250YWluZXIoZXhwcmVzc2lvbikpOwogICAgICAgICB9OwotICAgICAgICAvLyBFQ01BLTI2
MiAxMi4yLjYgT2JqZWN0IEluaXRpYWxpemVyCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFy
c2VQcm9wZXJ0eU1ldGhvZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHsKLSAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNT
dHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0OwotICAgICAgICAgICAgdmFyIGJvZHkgPSB0aGlz
Lmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMpOwot
ICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgcGFyYW1zLmZpcnN0UmVzdHJp
Y3RlZCkgewotICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4ocGFy
YW1zLmZpcnN0UmVzdHJpY3RlZCwgcGFyYW1zLm1lc3NhZ2UpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgcGFyYW1zLnN0cmljdGVkKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihwYXJhbXMuc3RyaWN0
ZWQsIHBhcmFtcy5tZXNzYWdlKTsKKyAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpT
WEF0dHJpYnV0ZVZhbHVlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
bWF0Y2hKU1goJ3snKSA/IHRoaXMucGFyc2VKU1hFeHByZXNzaW9uQXR0cmlidXRlKCkgOgorICAg
ICAgICAgICAgICAgIHRoaXMubWF0Y2hKU1goJzwnKSA/IHRoaXMucGFyc2VKU1hFbGVtZW50KCkg
OiB0aGlzLnBhcnNlSlNYU3RyaW5nTGl0ZXJhbEF0dHJpYnV0ZSgpOworICAgICAgICB9OworICAg
ICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYTmFtZVZhbHVlQXR0cmlidXRlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsK
KyAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZUpTWEF0dHJpYnV0ZU5hbWUoKTsKKyAg
ICAgICAgICAgIHZhciB2YWx1ZSA9IG51bGw7CisgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEpT
WCgnPScpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJz0nKTsKKyAgICAgICAg
ICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VKU1hBdHRyaWJ1dGVWYWx1ZSgpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0Owot
ICAgICAgICAgICAgcmV0dXJuIGJvZHk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hBdHRyaWJ1dGUobmFtZSwgdmFsdWUpKTsKICAgICAgICAg
fTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24g
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgaXNHZW5lcmF0b3IgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIg
cHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7Ci0gICAgICAgICAg
ICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIHBhcmFt
cyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7Ci0gICAgICAgICAgICB2YXIgbWV0aG9k
ID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHBhcmFtcyk7Ci0gICAgICAgICAgICB0aGlzLmNv
bnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLCBw
YXJhbXMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9yKSk7Ci0gICAgICAgIH07Ci0gICAgICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VQcm9wZXJ0eU1ldGhvZEFzeW5jRnVuY3Rpb24gPSBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAg
ICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxk
OwotICAgICAgICAgICAgdmFyIHByZXZpb3VzQXdhaXQgPSB0aGlzLmNvbnRleHQuYXdhaXQ7Ci0g
ICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOwotICAgICAgICAgICAg
dGhpcy5jb250ZXh0LmF3YWl0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSB0aGlz
LnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOwotICAgICAgICAgICAgdmFyIG1ldGhvZCA9IHRoaXMu
cGFyc2VQcm9wZXJ0eU1ldGhvZChwYXJhbXMpOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFs
bG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQu
YXdhaXQgPSBwcmV2aW91c0F3YWl0OwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW1zLnBhcmFt
cywgbWV0aG9kKSk7CisgICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hTcHJlYWRB
dHRyaWJ1dGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3Jl
YXRlSlNYTm9kZSgpOworICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJ3snKTsKKyAgICAgICAg
ICAgIHRoaXMuZXhwZWN0SlNYKCcuLi4nKTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoSlNYKCk7
CisgICAgICAgICAgICB2YXIgYXJndW1lbnQgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgIHRoaXMucmVlbnRlckpTWCgpOworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYU3ByZWFkQXR0cmlidXRlKGFyZ3Vt
ZW50KSk7CiAgICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VPYmplY3RQ
cm9wZXJ0eUtleSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5j
cmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwot
ICAgICAgICAgICAgdmFyIGtleTsKLSAgICAgICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkgewot
ICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5TdHJpbmdMaXRlcmFsOgotICAgICAg
ICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5OdW1lcmljTGl0ZXJhbDoKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgdG9rZW4ub2N0YWwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1l
c3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB2YXIgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tl
bik7Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuTGl0ZXJhbCh0b2tlbi52YWx1ZSwgcmF3KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyOgotICAgICAg
ICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5Cb29sZWFuTGl0ZXJhbDoKLSAgICAgICAgICAg
ICAgICBjYXNlIHRva2VuXzEuVG9rZW4uTnVsbExpdGVyYWw6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSB0b2tlbl8xLlRva2VuLktleXdvcmQ6Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMu
ZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4u
UHVuY3R1YXRvcjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnWycp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1h
cih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5leHBlY3QoJ10nKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMudGhyb3dV
bmV4cGVjdGVkVG9rZW4odG9rZW4pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgIGtleSA9IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworICAgICAgICBK
U1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQXR0cmlidXRlcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gW107CisgICAgICAgICAgICB3aGlsZSAoIXRoaXMu
bWF0Y2hKU1goJy8nKSAmJiAhdGhpcy5tYXRjaEpTWCgnPicpKSB7CisgICAgICAgICAgICAgICAg
dmFyIGF0dHJpYnV0ZSA9IHRoaXMubWF0Y2hKU1goJ3snKSA/IHRoaXMucGFyc2VKU1hTcHJlYWRB
dHRyaWJ1dGUoKSA6CisgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VKU1hOYW1lVmFsdWVB
dHRyaWJ1dGUoKTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRlKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBrZXk7Ci0gICAgICAgIH07Ci0gICAg
ICAgIFBhcnNlci5wcm90b3R5cGUuaXNQcm9wZXJ0eUtleSA9IGZ1bmN0aW9uIChrZXksIHZhbHVl
KSB7Ci0gICAgICAgICAgICByZXR1cm4gKGtleS50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRl
bnRpZmllciAmJiBrZXkubmFtZSA9PT0gdmFsdWUpIHx8Ci0gICAgICAgICAgICAgICAgKGtleS50
eXBlID09PSBzeW50YXhfMS5TeW50YXguTGl0ZXJhbCAmJiBrZXkudmFsdWUgPT09IHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzOwogICAgICAgICB9OwotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlT2JqZWN0UHJvcGVydHkgPSBmdW5jdGlvbiAoaGFzUHJvdG8pIHsK
LSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2
YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgIHZhciBraW5kOwotICAgICAg
ICAgICAgdmFyIGtleSA9IG51bGw7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSBudWxsOwotICAg
ICAgICAgICAgdmFyIGNvbXB1dGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0g
ZmFsc2U7Ci0gICAgICAgICAgICB2YXIgc2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAgICAgICB2
YXIgaXNBc3luYyA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IHRva2Vu
XzEuVG9rZW4uSWRlbnRpZmllcikgewotICAgICAgICAgICAgICAgIHZhciBpZCA9IHRva2VuLnZh
bHVlOwotICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGlkID09PSAnYXN5bmMnICYmICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoY29tcHV0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzQXN5bmMgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3Bl
cnR5S2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVuY3R1YXRvciA9IHRoaXMubG9va2Fo
ZWFkLnZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1bmN0dWF0b3IgIT09ICc6
JyAmJiBwdW5jdHVhdG9yICE9PSAnKCcgJiYgcHVuY3R1YXRvciAhPT0gJyonKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNBc3luYyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZCA9IHRva2VuLnZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
bmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBrZXkgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIoaWQp
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5JZGVudGlmaWVyKGlkKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnKicpKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOwotICAgICAgICAg
ICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworICAgICAgICBKU1hQ
YXJzZXIucHJvdG90eXBlLnBhcnNlSlNYT3BlbmluZ0VsZW1lbnQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOworICAgICAgICAgICAg
dGhpcy5leHBlY3RKU1goJzwnKTsKKyAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZUpT
WEVsZW1lbnROYW1lKCk7CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMucGFyc2VK
U1hBdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICB2YXIgc2VsZkNsb3NpbmcgPSB0aGlzLm1hdGNo
SlNYKCcvJyk7CisgICAgICAgICAgICBpZiAoc2VsZkNsb3NpbmcpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLmV4cGVjdEpTWCgnLycpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGxv
b2thaGVhZFByb3BlcnR5S2V5ID0gdGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29r
YWhlYWQpOwotICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRl
bnRpZmllciAmJiAhaXNBc3luYyAmJiB0b2tlbi52YWx1ZSA9PT0gJ2dldCcgJiYgbG9va2FoZWFk
UHJvcGVydHlLZXkpIHsKLSAgICAgICAgICAgICAgICBraW5kID0gJ2dldCc7Ci0gICAgICAgICAg
ICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7Ci0gICAgICAgICAgICAgICAga2V5ID0g
dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250
ZXh0LmFsbG93WWllbGQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFy
c2VHZXR0ZXJNZXRob2QoKTsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc+Jyk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hPcGVuaW5n
RWxlbWVudChuYW1lLCBzZWxmQ2xvc2luZywgYXR0cmlidXRlcykpOworICAgICAgICB9OworICAg
ICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQm91bmRhcnlFbGVtZW50ID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKKyAg
ICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc8Jyk7CisgICAgICAgICAgICBpZiAodGhpcy5tYXRj
aEpTWCgnLycpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy8nKTsKKyAgICAg
ICAgICAgICAgICB2YXIgbmFtZV8zID0gdGhpcy5wYXJzZUpTWEVsZW1lbnROYW1lKCk7CisgICAg
ICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJz4nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hDbG9zaW5nRWxlbWVudChuYW1lXzMp
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IHRv
a2VuXzEuVG9rZW4uSWRlbnRpZmllciAmJiAhaXNBc3luYyAmJiB0b2tlbi52YWx1ZSA9PT0gJ3Nl
dCcgJiYgbG9va2FoZWFkUHJvcGVydHlLZXkpIHsKLSAgICAgICAgICAgICAgICBraW5kID0gJ3Nl
dCc7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7Ci0gICAgICAg
ICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAgICAg
ICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlU2V0dGVyTWV0aG9kKCk7CisgICAgICAgICAgICB2YXIg
bmFtZSA9IHRoaXMucGFyc2VKU1hFbGVtZW50TmFtZSgpOworICAgICAgICAgICAgdmFyIGF0dHJp
YnV0ZXMgPSB0aGlzLnBhcnNlSlNYQXR0cmlidXRlcygpOworICAgICAgICAgICAgdmFyIHNlbGZD
bG9zaW5nID0gdGhpcy5tYXRjaEpTWCgnLycpOworICAgICAgICAgICAgaWYgKHNlbGZDbG9zaW5n
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy8nKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uUHVuY3R1
YXRvciAmJiB0b2tlbi52YWx1ZSA9PT0gJyonICYmIGxvb2thaGVhZFByb3BlcnR5S2V5KSB7Ci0g
ICAgICAgICAgICAgICAga2luZCA9ICdpbml0JzsKLSAgICAgICAgICAgICAgICBjb21wdXRlZCA9
IHRoaXMubWF0Y2goJ1snKTsKLSAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0
UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VHZW5lcmF0
b3JNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBtZXRob2QgPSB0cnVlOworICAgICAgICAgICAg
dGhpcy5leHBlY3RKU1goJz4nKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBKU1hOb2RlLkpTWE9wZW5pbmdFbGVtZW50KG5hbWUsIHNlbGZDbG9zaW5nLCBhdHRy
aWJ1dGVzKSk7CisgICAgICAgIH07CisgICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VK
U1hFbXB0eUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCk7CisgICAgICAgICAgICB0aGlzLmNvbGxlY3RDb21t
ZW50cygpOworICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVy
LmluZGV4OworICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmxpbmUgPSB0aGlzLnNjYW5uZXIu
bGluZU51bWJlcjsKKyAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5jb2x1bW4gPSB0aGlzLnNj
YW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0OworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYRW1wdHlFeHByZXNzaW9uKCkpOwor
ICAgICAgICB9OworICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYRXhwcmVzc2lv
bkNvbnRhaW5lciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5j
cmVhdGVKU1hOb2RlKCk7CisgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgneycpOworICAgICAg
ICAgICAgdmFyIGV4cHJlc3Npb247CisgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEpTWCgnfScp
KSB7CisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHRoaXMucGFyc2VKU1hFbXB0eUV4cHJl
c3Npb24oKTsKKyAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnfScpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFrZXkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVh
ZCk7CisgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hKU1goKTsKKyAgICAgICAgICAgICAgICBl
eHByZXNzaW9uID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAg
ICAgICAgdGhpcy5yZWVudGVySlNYKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hFeHByZXNzaW9uQ29udGFpbmVy
KGV4cHJlc3Npb24pKTsKKyAgICAgICAgfTsKKyAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5w
YXJzZUpTWENoaWxkcmVuID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGNoaWxkcmVu
ID0gW107CisgICAgICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgeworICAgICAg
ICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hDaGlsZE5vZGUoKTsKKyAgICAgICAg
ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRKU1hUZXh0KCk7CisgICAgICAgICAgICAgICAg
aWYgKHRva2VuLnN0YXJ0IDwgdG9rZW4uZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBy
YXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNo
aWxkID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hUZXh0KHRva2VuLnZhbHVl
LCByYXcpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGtpbmQgPSAnaW5pdCc7Ci0gICAgICAgICAg
ICAgICAgaWYgKHRoaXMubWF0Y2goJzonKSAmJiAhaXNBc3luYykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWNvbXB1dGVkICYmIHRoaXMuaXNQcm9wZXJ0eUtleShrZXksICdfX3Byb3RvX18n
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Byb3RvLnZhbHVlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVz
c2FnZXMuRHVwbGljYXRlUHJvdG9Qcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNQcm90by52YWx1ZSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5w
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2Fu
bmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdID09PSAneycpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMucGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyKCk7
CisgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY29udGFpbmVyKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnKCcpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXNBc3luYyA/IHRoaXMucGFyc2VQcm9wZXJ0eU1l
dGhvZEFzeW5jRnVuY3Rpb24oKSA6IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCk7
Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZp
ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5maW5hbGl6ZShub2RlLCBu
ZXcgTm9kZS5JZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLm1hdGNoKCc9JykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4
dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSB0aGlzLmxvb2thaGVhZDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzaG9ydGhhbmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluaXQg
PSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5maW5hbGl6ZShub2RlLCBu
ZXcgTm9kZS5Bc3NpZ25tZW50UGF0dGVybihpZCwgaW5pdCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIGNoaWxkcmVuOworICAgICAgICB9OworICAgICAgICBKU1hQYXJzZXIu
cHJvdG90eXBlLnBhcnNlQ29tcGxleEpTWEVsZW1lbnQgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAg
ICAgICAgIHZhciBzdGFjayA9IFtdOworICAgICAgICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIu
ZW9mKCkpIHsKKyAgICAgICAgICAgICAgICBlbC5jaGlsZHJlbiA9IGVsLmNoaWxkcmVuLmNvbmNh
dCh0aGlzLnBhcnNlSlNYQ2hpbGRyZW4oKSk7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZUpTWENoaWxkTm9kZSgpOworICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0g
dGhpcy5wYXJzZUpTWEJvdW5kYXJ5RWxlbWVudCgpOworICAgICAgICAgICAgICAgIGlmIChlbGVt
ZW50LnR5cGUgPT09IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYT3BlbmluZ0VsZW1lbnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIG9wZW5pbmcgPSBlbGVtZW50OworICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlbmluZy5zZWxmQ2xvc2luZykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGNoaWxkID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hFbGVtZW50
KG9wZW5pbmcsIFtdLCBudWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbC5jaGlsZHJl
bi5wdXNoKGNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGlkOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhY2sucHVzaChlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbCA9IHsgbm9kZTogbm9k
ZSwgb3BlbmluZzogb3BlbmluZywgY2xvc2luZzogbnVsbCwgY2hpbGRyZW46IFtdIH07CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5u
ZXh0VG9rZW4oKSk7CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0ganN4X3N5
bnRheF8xLkpTWFN5bnRheC5KU1hDbG9zaW5nRWxlbWVudCkgeworICAgICAgICAgICAgICAgICAg
ICBlbC5jbG9zaW5nID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9wZW5fMSA9
IGdldFF1YWxpZmllZEVsZW1lbnROYW1lKGVsLm9wZW5pbmcubmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBjbG9zZV8xID0gZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUoZWwuY2xvc2luZy5u
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9wZW5fMSAhPT0gY2xvc2VfMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKCdFeHBlY3RlZCBjb3JyZXNw
b25kaW5nIEpTWCBjbG9zaW5nIHRhZyBmb3IgJTAnLCBvcGVuXzEpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmZpbmFsaXplKGVsLm5vZGUsIG5l
dyBKU1hOb2RlLkpTWEVsZW1lbnQoZWwub3BlbmluZywgZWwuY2hpbGRyZW4sIGVsLmNsb3Npbmcp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07
CisgICAgICAgICAgICAgICAgICAgICAgICBlbC5jaGlsZHJlbi5wdXNoKGNoaWxkKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Qcm9wZXJ0
eShraW5kLCAoa2V5KSwgY29tcHV0ZWQsIHZhbHVlLCBtZXRob2QsIHNob3J0aGFuZCkpOworICAg
ICAgICAgICAgcmV0dXJuIGVsOwogICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LnBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsK
LSAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW107Ci0gICAgICAgICAgICB2YXIgaGFzUHJv
dG8gPSB7IHZhbHVlOiBmYWxzZSB9OwotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9
JykpIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2godGhpcy5wYXJzZU9iamVjdFBy
b3BlcnR5KGhhc1Byb3RvKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCd9Jykp
IHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RDb21tYVNlcGFyYXRvcigpOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEVsZW1l
bnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNY
Tm9kZSgpOworICAgICAgICAgICAgdmFyIG9wZW5pbmcgPSB0aGlzLnBhcnNlSlNYT3BlbmluZ0Vs
ZW1lbnQoKTsKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IFtdOworICAgICAgICAgICAgdmFy
IGNsb3NpbmcgPSBudWxsOworICAgICAgICAgICAgaWYgKCFvcGVuaW5nLnNlbGZDbG9zaW5nKSB7
CisgICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5wYXJzZUNvbXBsZXhKU1hFbGVtZW50KHsg
bm9kZTogbm9kZSwgb3BlbmluZzogb3BlbmluZywgY2xvc2luZzogY2xvc2luZywgY2hpbGRyZW46
IGNoaWxkcmVuIH0pOworICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZWwuY2hpbGRyZW47Cisg
ICAgICAgICAgICAgICAgY2xvc2luZyA9IGVsLmNsb3Npbmc7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB0aGlzLmV4cGVjdCgnfScpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hFbGVtZW50KG9w
ZW5pbmcsIGNoaWxkcmVuLCBjbG9zaW5nKSk7CiAgICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEt
MjYyIDEyLjIuOSBUZW1wbGF0ZSBMaXRlcmFscwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBh
cnNlVGVtcGxhdGVIZWFkID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgYXNzZXJ0XzEuYXNz
ZXJ0KHRoaXMubG9va2FoZWFkLmhlYWQsICdUZW1wbGF0ZSBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0
aCBhIHRlbXBsYXRlIGhlYWQnKTsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwotICAgICAg
ICAgICAgdmFyIHZhbHVlID0gewotICAgICAgICAgICAgICAgIHJhdzogdG9rZW4udmFsdWUucmF3
LAotICAgICAgICAgICAgICAgIGNvb2tlZDogdG9rZW4udmFsdWUuY29va2VkCi0gICAgICAgICAg
ICB9OwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGVt
cGxhdGVFbGVtZW50KHZhbHVlLCB0b2tlbi50YWlsKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VUZW1wbGF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gdG9rZW5fMS5Ub2tlbi5UZW1wbGF0
ZSkgewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAg
ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgdmFyIHZh
bHVlID0gewotICAgICAgICAgICAgICAgIHJhdzogdG9rZW4udmFsdWUucmF3LAotICAgICAgICAg
ICAgICAgIGNvb2tlZDogdG9rZW4udmFsdWUuY29va2VkCi0gICAgICAgICAgICB9OwotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGVtcGxhdGVFbGVtZW50
KHZhbHVlLCB0b2tlbi50YWlsKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VUZW1wbGF0ZUxpdGVyYWwgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGV4cHJlc3Npb25zID0g
W107Ci0gICAgICAgICAgICB2YXIgcXVhc2lzID0gW107Ci0gICAgICAgICAgICB2YXIgcXVhc2kg
PSB0aGlzLnBhcnNlVGVtcGxhdGVIZWFkKCk7Ci0gICAgICAgICAgICBxdWFzaXMucHVzaChxdWFz
aSk7Ci0gICAgICAgICAgICB3aGlsZSAoIXF1YXNpLnRhaWwpIHsKLSAgICAgICAgICAgICAgICBl
eHByZXNzaW9ucy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkpOwotICAgICAgICAgICAgICAg
IHF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlRWxlbWVudCgpOwotICAgICAgICAgICAgICAgIHF1
YXNpcy5wdXNoKHF1YXNpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlRlbXBsYXRlTGl0ZXJhbChxdWFzaXMsIGV4cHJlc3Np
b25zKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEyLjIuMTAgVGhlIEdyb3Vw
aW5nIE9wZXJhdG9yCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucmVpbnRlcnByZXRFeHByZXNz
aW9uQXNQYXR0ZXJuID0gZnVuY3Rpb24gKGV4cHIpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZXhw
ci50eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmll
cjoKLSAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5NZW1iZXJFeHByZXNzaW9u
OgotICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LlJlc3RFbGVtZW50OgotICAg
ICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5
bnRheC5TcHJlYWRFbGVtZW50OgotICAgICAgICAgICAgICAgICAgICBleHByLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguUmVzdEVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRl
cnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuYXJndW1lbnQpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5BcnJheUV4
cHJlc3Npb246Ci0gICAgICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9IHN5bnRheF8xLlN5bnRh
eC5BcnJheVBhdHRlcm47Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
ZXhwci5lbGVtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGV4cHIuZWxlbWVudHNbaV0gIT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByLmVsZW1lbnRzW2ldKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRh
eC5PYmplY3RFeHByZXNzaW9uOgotICAgICAgICAgICAgICAgICAgICBleHByLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguT2JqZWN0UGF0dGVybjsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIucHJvcGVy
dGllc1tpXS52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVu
dEV4cHJlc3Npb246Ci0gICAgICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9IHN5bnRheF8xLlN5
bnRheC5Bc3NpZ25tZW50UGF0dGVybjsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGV4cHIu
b3BlcmF0b3I7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9u
QXNQYXR0ZXJuKGV4cHIubGVmdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFsbG93IG90aGVyIG5v
ZGUgdHlwZSBmb3IgdG9sZXJhbnQgcGFyc2luZy4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFy
c2VHcm91cEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgZXhwcjsK
LSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRj
aCgnKScpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMubWF0Y2goJz0+JykpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5l
eHBlY3QoJz0+Jyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGV4cHIgPSB7
Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCi0g
ICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sCi0gICAgICAgICAgICAgICAgICAgIGFzeW5j
OiBmYWxzZQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOwot
ICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKLSAgICAgICAgICAgICAgICBpZiAodGhp
cy5tYXRjaCgnLi4uJykpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VS
ZXN0RWxlbWVudChwYXJhbXMpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJz0+JykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9PicpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
eXBlOiBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zOiBbZXhwcl0sCi0gICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UKLSAg
ICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcnJvdyA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2go
JywnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gW107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKGV4cHIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPCB0
aGlzLnNjYW5uZXIubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLm1hdGNoKCcsJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMubWF0Y2goJyknKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5l
eHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByZXNz
aW9uc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJyb3cgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHByID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtczogZXhwcmVzc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhc3luYzogZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tl
bih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNl
UmVzdEVsZW1lbnQocGFyYW1zKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuZXhwZWN0KCcpJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhp
cy5tYXRjaCgnPT4nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5leHBlY3QoJz0+Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcmVzc2lv
bnNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFycm93ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwciA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXM6IGV4cHJlc3Npb25zLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXN5bmM6IGZhbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9u
cy5wdXNoKHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFycm93KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyb3cpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShz
dGFydFRva2VuKSwgbmV3IE5vZGUuU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhcnJvdykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5l
eHBlY3QoJyknKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9Picp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gc3ludGF4
XzEuU3ludGF4LklkZW50aWZpZXIgJiYgZXhwci5uYW1lID09PSAneWllbGQnKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFycm93ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwciA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbXM6IFtleHByXSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFzeW5jOiBmYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWFycm93KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5TZXF1ZW5jZUV4
cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZXhwci5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQ
YXR0ZXJuKGV4cHIuZXhwcmVzc2lvbnNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHBhcmFtc18xID0gKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LlNlcXVl
bmNlRXhwcmVzc2lvbiA/IGV4cHIuZXhwcmVzc2lvbnMgOiBbZXhwcl0pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHByID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zXzEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5k
aW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH07
Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEyLjMgTGVmdC1IYW5kLVNpZGUgRXhwcmVzc2lvbnMKLSAg
ICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFyZ3VtZW50cyA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICB2YXIgYXJncyA9IFtdOwot
ICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykpIHsKLSAgICAgICAgICAgICAgICB3aGls
ZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMubWF0Y2goJy4u
LicpID8gdGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKSA6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KTsKLSAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGV4cHIpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dENvbW1hU2VwYXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcp
JykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5l
eHBlY3QoJyknKTsKLSAgICAgICAgICAgIHJldHVybiBhcmdzOwotICAgICAgICB9OwotICAgICAg
ICBQYXJzZXIucHJvdG90eXBlLmlzSWRlbnRpZmllck5hbWUgPSBmdW5jdGlvbiAodG9rZW4pIHsK
LSAgICAgICAgICAgIHJldHVybiB0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZp
ZXIgfHwKLSAgICAgICAgICAgICAgICB0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLktleXdv
cmQgfHwKLSAgICAgICAgICAgICAgICB0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLkJvb2xl
YW5MaXRlcmFsIHx8Ci0gICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tl
bi5OdWxsTGl0ZXJhbDsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZUlkZW50aWZpZXJOYW1lID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2Vu
KCk7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuaXNJZGVudGlmaWVyTmFtZSh0b2tlbikpIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklk
ZW50aWZpZXIodG9rZW4udmFsdWUpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZU5ld0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5wYXJz
ZUlkZW50aWZpZXJOYW1lKCk7Ci0gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoaWQubmFtZSA9
PT0gJ25ldycsICdOZXcgZXhwcmVzc2lvbiBtdXN0IHN0YXJ0IHdpdGggYG5ld2AnKTsKLSAgICAg
ICAgICAgIHZhciBleHByOwotICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJy4nKSkgewotICAg
ICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
bG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllciAmJiB0aGlzLmNvbnRl
eHQuaW5GdW5jdGlvbkJvZHkgJiYgdGhpcy5sb29rYWhlYWQudmFsdWUgPT09ICd0YXJnZXQnKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMucGFyc2VJZGVudGlmaWVy
TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBleHByID0gbmV3IE5vZGUuTWV0YVByb3BlcnR5
KGlkLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9v
a2FoZWFkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgY2FsbGVlID0gdGhpcy5pc29sYXRlQ292ZXJHcmFt
bWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICB2
YXIgYXJncyA9IHRoaXMubWF0Y2goJygnKSA/IHRoaXMucGFyc2VBcmd1bWVudHMoKSA6IFtdOwot
ICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgTm9kZS5OZXdFeHByZXNzaW9uKGNhbGxlZSwgYXJn
cyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFs
c2U7CisgICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hSb290ID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgLy8gUG9wIHRoZSBvcGVuaW5nICc8JyBhZGRlZCBmcm9tIHRoZSBs
b29rYWhlYWQuCisgICAgICAgICAgICBpZiAodGhpcy5jb25maWcudG9rZW5zKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy50b2tlbnMucG9wKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBleHByKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZUFzeW5jQXJndW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICB2YXIgYXJnID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAg
ICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsK
LSAgICAgICAgICAgIHJldHVybiBhcmc7CisgICAgICAgICAgICB0aGlzLnN0YXJ0SlNYKCk7Cisg
ICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VKU1hFbGVtZW50KCk7CisgICAgICAg
ICAgICB0aGlzLmZpbmlzaEpTWCgpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAg
ICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBc3luY0FyZ3VtZW50cyA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICB2
YXIgYXJncyA9IFtdOwotICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykpIHsKLSAgICAg
ICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZXhwciA9
IHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKSA6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzeW5j
QXJndW1lbnQpOwotICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goZXhwcik7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJyknKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB0aGlzLmV4cGVjdCgnKScpOwotICAgICAgICAgICAgcmV0dXJuIGFyZ3M7Ci0gICAgICAgIH07
Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxs
b3dDYWxsID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlz
Lmxvb2thaGVhZDsKLSAgICAgICAgICAgIHZhciBtYXliZUFzeW5jID0gdGhpcy5tYXRjaENvbnRl
eHR1YWxLZXl3b3JkKCdhc3luYycpOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiA9
IHRoaXMuY29udGV4dC5hbGxvd0luOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4g
PSB0cnVlOwotICAgICAgICAgICAgdmFyIGV4cHI7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRj
aEtleXdvcmQoJ3N1cGVyJykgJiYgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSB7Ci0gICAg
ICAgICAgICAgICAgZXhwciA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUoZXhw
ciwgbmV3IE5vZGUuU3VwZXIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCco
JykgJiYgIXRoaXMubWF0Y2goJy4nKSAmJiAhdGhpcy5tYXRjaCgnWycpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5tYXRjaEtleXdv
cmQoJ25ldycpID8gdGhpcy5wYXJzZU5ld0V4cHJlc3Npb24gOiB0aGlzLnBhcnNlUHJpbWFyeUV4
cHJlc3Npb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLicpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICB0aGlzLmV4cGVjdCgnLicpOwotICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVy
dHkgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgZXhw
ciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLlN0
YXRpY01lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnKCcpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBhc3luY0Fycm93ID0gbWF5YmVBc3luYyAmJiAoc3RhcnRUb2tlbi5saW5l
TnVtYmVyID09PSB0aGlzLmxvb2thaGVhZC5saW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICB2YXIgYXJncyA9IGFzeW5jQXJyb3cgPyB0aGlzLnBhcnNlQXN5bmNBcmd1bWVu
dHMoKSA6IHRoaXMucGFyc2VBcmd1bWVudHMoKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwciA9
IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkNhbGxF
eHByZXNzaW9uKGV4cHIsIGFyZ3MpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFzeW5jQXJy
b3cgJiYgdGhpcy5tYXRjaCgnPT4nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBBcnJvd1BhcmFtZXRlclBsYWNl
SG9sZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogYXJncywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZQotICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCdbJykpIHsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuZXhwZWN0KCdbJyk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0
eSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwcmVzc2lvbik7Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCddJyk7Ci0gICAgICAgICAgICAgICAgICAgIGV4
cHIgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5D
b21wdXRlZE1lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gdG9r
ZW5fMS5Ub2tlbi5UZW1wbGF0ZSAmJiB0aGlzLmxvb2thaGVhZC5oZWFkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBxdWFzaSA9IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTsKLSAgICAg
ICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRU
b2tlbiksIG5ldyBOb2RlLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBxdWFzaSkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47Ci0gICAgICAgICAgICBy
ZXR1cm4gZXhwcjsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN1
cGVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnc3VwZXInKTsKLSAgICAgICAg
ICAgIGlmICghdGhpcy5tYXRjaCgnWycpICYmICF0aGlzLm1hdGNoKCcuJykpIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LlN1cGVyKCkpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGVm
dEhhbmRTaWRlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGFzc2VydF8x
LmFzc2VydCh0aGlzLmNvbnRleHQuYWxsb3dJbiwgJ2NhbGxlZSBvZiBuZXcgZXhwcmVzc2lvbiBh
bHdheXMgYWxsb3cgaW4ga2V5d29yZC4nKTsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5z
dGFydE5vZGUodGhpcy5sb29rYWhlYWQpOwotICAgICAgICAgICAgdmFyIGV4cHIgPSAodGhpcy5t
YXRjaEtleXdvcmQoJ3N1cGVyJykgJiYgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSA/IHRo
aXMucGFyc2VTdXBlcigpIDoKLSAgICAgICAgICAgICAgICB0aGlzLmluaGVyaXRDb3ZlckdyYW1t
YXIodGhpcy5tYXRjaEtleXdvcmQoJ25ldycpID8gdGhpcy5wYXJzZU5ld0V4cHJlc3Npb24gOiB0
aGlzLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOwotICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnWycpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICB0aGlzLmV4cGVjdCgnWycpOwotICAgICAgICAgICAgICAgICAgICB2YXIgcHJv
cGVydHkgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cHJlc3Npb24pOwot
ICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnXScpOwotICAgICAgICAgICAgICAgICAg
ICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Db21wdXRlZE1lbWJlckV4cHJl
c3Npb24oZXhwciwgcHJvcGVydHkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnLicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICB0aGlzLmV4cGVjdCgnLicpOwotICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0
aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuU3RhdGljTWVtYmVyRXhwcmVzc2lvbihleHByLCBw
cm9wZXJ0eSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0
aGlzLmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRva2VuLlRlbXBsYXRlICYmIHRoaXMubG9v
a2FoZWFkLmhlYWQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHF1YXNpID0gdGhpcy5wYXJz
ZVRlbXBsYXRlTGl0ZXJhbCgpOwotICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5h
bGl6ZShub2RlLCBuZXcgTm9kZS5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwgcXVhc2kp
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBleHByOwotICAgICAgICB9OwotICAgICAgICAvLyBFQ01BLTI2MiAxMi40
IFVwZGF0ZSBFeHByZXNzaW9ucwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVXBkYXRl
RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBleHByOwotICAgICAg
ICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgIGlmICh0
aGlzLm1hdGNoKCcrKycpIHx8IHRoaXMubWF0Y2goJy0tJykpIHsKLSAgICAgICAgICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pOwotICAgICAgICAgICAgICAgIHZh
ciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IHRoaXMu
aW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKTsKLSAgICAgICAg
ICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBleHByLnR5cGUgPT09IHN5bnRheF8x
LlN5bnRheC5JZGVudGlmaWVyICYmIHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIu
bmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuU3RyaWN0TEhTUHJlZml4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFs
aWRMSFNJbkFzc2lnbm1lbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2
YXIgcHJlZml4ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5VcGRhdGVFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByLCBwcmVmaXgp
KTsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGV4
cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJl
c3Npb25BbGxvd0NhbGwpOwotICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNMaW5lVGVybWlu
YXRvciAmJiB0aGlzLmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3Ip
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJysrJykgfHwgdGhpcy5tYXRj
aCgnLS0nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJp
Y3QgJiYgZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllciAmJiB0aGlzLnNj
YW5uZXIuaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0TEhT
UG9zdGZpeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5J
bnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3IgPSB0aGlzLm5l
eHRUb2tlbigpLnZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWZpeCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5z
dGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLlVwZGF0ZUV4cHJlc3Npb24ob3BlcmF0b3Is
IGV4cHIsIHByZWZpeCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH07Ci0g
ICAgICAgIC8vIEVDTUEtMjYyIDEyLjUgVW5hcnkgT3BlcmF0b3JzCi0gICAgICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VBd2FpdEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdGhpcy5uZXh0VG9r
ZW4oKTsKLSAgICAgICAgICAgIHZhciBhcmd1bWVudCA9IHRoaXMucGFyc2VVbmFyeUV4cHJlc3Np
b24oKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkF3
YWl0RXhwcmVzc2lvbihhcmd1bWVudCkpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJv
dG90eXBlLnBhcnNlVW5hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
dmFyIGV4cHI7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKycpIHx8IHRoaXMubWF0Y2go
Jy0nKSB8fCB0aGlzLm1hdGNoKCd+JykgfHwgdGhpcy5tYXRjaCgnIScpIHx8Ci0gICAgICAgICAg
ICAgICAgdGhpcy5tYXRjaEtleXdvcmQoJ2RlbGV0ZScpIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCd2
b2lkJykgfHwgdGhpcy5tYXRjaEtleXdvcmQoJ3R5cGVvZicpKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSh0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICAg
ICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICBleHByID0g
dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24pOwotICAg
ICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlVuYXJ5RXhw
cmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcikpOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLmNv
bnRleHQuc3RyaWN0ICYmIGV4cHIub3BlcmF0b3IgPT09ICdkZWxldGUnICYmIGV4cHIuYXJndW1l
bnQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0RGVsZXRl
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNz
aWdubWVudFRhcmdldCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Jp
bmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
ICh0aGlzLmNvbnRleHQuYXdhaXQgJiYgdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhd2Fp
dCcpKSB7Ci0gICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VBd2FpdEV4cHJlc3Npb24o
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGV4
cHIgPSB0aGlzLnBhcnNlVXBkYXRlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgdmFyIGV4cHIg
PSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbik7Ci0g
ICAgICAgICAgICBpZiAoZXhwci50eXBlICE9PSBzeW50YXhfMS5TeW50YXguVW5hcnlFeHByZXNz
aW9uICYmIHRoaXMubWF0Y2goJyoqJykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gZXhwcjsKLSAgICAgICAgICAgICAgICB2
YXIgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0
aW9uRXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhp
cy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkJpbmFyeUV4cHJlc3Npb24oJyoqJywg
bGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBleHByOwot
ICAgICAgICB9OwotICAgICAgICAvLyBFQ01BLTI2MiAxMi42IEV4cG9uZW50aWF0aW9uIE9wZXJh
dG9ycwotICAgICAgICAvLyBFQ01BLTI2MiAxMi43IE11bHRpcGxpY2F0aXZlIE9wZXJhdG9ycwot
ICAgICAgICAvLyBFQ01BLTI2MiAxMi44IEFkZGl0aXZlIE9wZXJhdG9ycwotICAgICAgICAvLyBF
Q01BLTI2MiAxMi45IEJpdHdpc2UgU2hpZnQgT3BlcmF0b3JzCi0gICAgICAgIC8vIEVDTUEtMjYy
IDEyLjEwIFJlbGF0aW9uYWwgT3BlcmF0b3JzCi0gICAgICAgIC8vIEVDTUEtMjYyIDEyLjExIEVx
dWFsaXR5IE9wZXJhdG9ycwotICAgICAgICAvLyBFQ01BLTI2MiAxMi4xMiBCaW5hcnkgQml0d2lz
ZSBPcGVyYXRvcnMKLSAgICAgICAgLy8gRUNNQS0yNjIgMTIuMTMgQmluYXJ5IExvZ2ljYWwgT3Bl
cmF0b3JzCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuYmluYXJ5UHJlY2VkZW5jZSA9IGZ1bmN0
aW9uICh0b2tlbikgewotICAgICAgICAgICAgdmFyIG9wID0gdG9rZW4udmFsdWU7Ci0gICAgICAg
ICAgICB2YXIgcHJlY2VkZW5jZTsKLSAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSB0b2tl
bl8xLlRva2VuLlB1bmN0dWF0b3IpIHsKLSAgICAgICAgICAgICAgICBwcmVjZWRlbmNlID0gdGhp
cy5vcGVyYXRvclByZWNlZGVuY2Vbb3BdIHx8IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLktleXdvcmQpIHsKLSAgICAg
ICAgICAgICAgICBwcmVjZWRlbmNlID0gKG9wID09PSAnaW5zdGFuY2VvZicgfHwgKHRoaXMuY29u
dGV4dC5hbGxvd0luICYmIG9wID09PSAnaW4nKSkgPyA3IDogMDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHByZWNlZGVuY2UgPSAwOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHByZWNlZGVuY2U7Ci0gICAgICAgIH07Ci0gICAg
ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VCaW5hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAg
ICAgIHZhciBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHBvbmVu
dGlhdGlvbkV4cHJlc3Npb24pOwotICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhl
YWQ7Ci0gICAgICAgICAgICB2YXIgcHJlYyA9IHRoaXMuYmluYXJ5UHJlY2VkZW5jZSh0b2tlbik7
Ci0gICAgICAgICAgICBpZiAocHJlYyA+IDApIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRU
b2tlbigpOwotICAgICAgICAgICAgICAgIHRva2VuLnByZWMgPSBwcmVjOwotICAgICAgICAgICAg
ICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIHZhciBtYXJrZXJzID0gW3N0YXJ0VG9rZW4sIHRoaXMubG9va2FoZWFkXTsKLSAgICAgICAg
ICAgICAgICB2YXIgbGVmdCA9IGV4cHI7Ci0gICAgICAgICAgICAgICAgdmFyIHJpZ2h0ID0gdGhp
cy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24p
OwotICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmlnaHRdOwotICAg
ICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByZWMgPSB0
aGlzLmJpbmFyeVByZWNlZGVuY2UodGhpcy5sb29rYWhlYWQpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAocHJlYyA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBSZWR1Y2U6IG1ha2UgYSBi
aW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuCi0gICAgICAg
ICAgICAgICAgICAgIHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gc3RhY2tb
c3RhY2subGVuZ3RoIC0gMl0ucHJlYykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0
ID0gc3RhY2sucG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3IgPSBz
dGFjay5wb3AoKS52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBzdGFjay5w
b3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMucG9wKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKG1hcmtlcnNbbWFya2Vycy5s
ZW5ndGggLSAxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmln
aHQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gU2hp
ZnQuCi0gICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAg
ICAgICAgICAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7Ci0gICAgICAgICAgICAgICAgICAgIHN0
YWNrLnB1c2godG9rZW4pOwotICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLnB1c2godGhpcy5s
b29rYWhlYWQpOwotICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMuaXNvbGF0ZUNv
dmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIEZpbmFsIHJlZHVjZSB0byBjbGVhbi11cCB0
aGUgc3RhY2suCi0gICAgICAgICAgICAgICAgdmFyIGkgPSBzdGFjay5sZW5ndGggLSAxOwotICAg
ICAgICAgICAgICAgIGV4cHIgPSBzdGFja1tpXTsKLSAgICAgICAgICAgICAgICBtYXJrZXJzLnBv
cCgpOwotICAgICAgICAgICAgICAgIHdoaWxlIChpID4gMSkgewotICAgICAgICAgICAgICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKG1hcmtlcnMucG9wKCkpOwotICAgICAgICAgICAg
ICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5CaW5hcnlFeHByZXNz
aW9uKHN0YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBleHByKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGkgLT0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gRUNNQS0yNjIgMTIu
MTQgQ29uZGl0aW9uYWwgT3BlcmF0b3IKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNv
bmRpdGlvbmFsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBzdGFy
dFRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMuaW5o
ZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQmluYXJ5RXhwcmVzc2lvbik7Ci0gICAgICAgICAg
ICBpZiAodGhpcy5tYXRjaCgnPycpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4o
KTsKLSAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFs
bG93SW47Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSB0cnVlOwotICAg
ICAgICAgICAgICAgIHZhciBjb25zZXF1ZW50ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRo
aXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250
ZXh0LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBl
Y3QoJzonKTsKLSAgICAgICAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gdGhpcy5pc29sYXRlQ292
ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAg
ICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBO
b2RlLkNvbmRpdGlvbmFsRXhwcmVzc2lvbihleHByLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpKTsK
LSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBleHByOwotICAgICAgICB9OwotICAg
ICAgICAvLyBFQ01BLTI2MiAxMi4xNSBBc3NpZ25tZW50IE9wZXJhdG9ycwotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLmNoZWNrUGF0dGVyblBhcmFtID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmFt
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyOgotICAgICAgICAgICAgICAgICAgICB0aGlz
LnZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0sIHBhcmFtLm5hbWUpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5SZXN0
RWxlbWVudDoKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRp
b25zLCBwYXJhbS5hcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOgotICAgICAg
ICAgICAgICAgICAgICB0aGlzLmNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmxlZnQp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIHN5bnRh
eF8xLlN5bnRheC5BcnJheVBhdHRlcm46Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcGFyYW0uZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJhbS5lbGVtZW50c1tpXSAhPT0gbnVsbCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0uZWxlbWVu
dHNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4
XzEuU3ludGF4Lk9iamVjdFBhdHRlcm46Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcGFyYW0ucHJvcGVydGllcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5wcm9wZXJ0aWVz
W2ldLnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5y
ZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdCA9IGZ1bmN0aW9uIChleHByKSB7Ci0gICAgICAg
ICAgICB2YXIgcGFyYW1zID0gW2V4cHJdOwotICAgICAgICAgICAgdmFyIG9wdGlvbnM7Ci0gICAg
ICAgICAgICB2YXIgYXN5bmNBcnJvdyA9IGZhbHNlOwotICAgICAgICAgICAgc3dpdGNoIChleHBy
LnR5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVy
OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEFycm93
UGFyYW1ldGVyUGxhY2VIb2xkZXI6Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IGV4cHIu
cGFyYW1zOwotICAgICAgICAgICAgICAgICAgICBhc3luY0Fycm93ID0gZXhwci5hc3luYzsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBv
cHRpb25zID0gewotICAgICAgICAgICAgICAgIHBhcmFtU2V0OiB7fQotICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyYW1zW2ldOwotICAgICAgICAgICAgICAgIGlm
IChwYXJhbS50eXBlID09PSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudFBhdHRlcm4pIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnJpZ2h0LnR5cGUgPT09IHN5bnRheF8xLlN5bnRh
eC5ZaWVsZEV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS5y
aWdodC5hcmd1bWVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dV
bmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0ucmlnaHQudHlwZSA9IHN5bnRheF8xLlN5
bnRheC5JZGVudGlmaWVyOwotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0ucmlnaHQubmFt
ZSA9ICd5aWVsZCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW0ucmlnaHQu
YXJndW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW0ucmlnaHQuZGVs
ZWdhdGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAoYXN5bmNBcnJvdyAmJiBwYXJhbS50eXBlID09PSBzeW50YXhfMS5T
eW50YXguSWRlbnRpZmllciAmJiBwYXJhbS5uYW1lID09PSAnYXdhaXQnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLmNoZWNrUGF0dGVyblBhcmFtKG9w
dGlvbnMsIHBhcmFtKTsKLSAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBwYXJhbTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0IHx8ICF0aGlzLmNv
bnRleHQuYWxsb3dZaWVsZCkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cGFyYW1zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbSA9IHBh
cmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IHN5bnRheF8x
LlN5bnRheC5ZaWVsZEV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9w
dGlvbnMubWVzc2FnZSA9PT0gbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGUpIHsK
LSAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmNvbnRleHQuc3RyaWN0ID8gb3B0aW9u
cy5zdHJpY3RlZCA6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkOwotICAgICAgICAgICAgICAgIHRo
aXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG9wdGlvbnMubWVzc2FnZSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHBhcmFtczogcGFy
YW1zLAotICAgICAgICAgICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0cmljdGVkLAotICAgICAg
ICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsCi0gICAg
ICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlCi0gICAgICAgICAgICB9OwotICAg
ICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgZXhwcjsKLSAgICAgICAgICAgIGlm
ICghdGhpcy5jb250ZXh0LmFsbG93WWllbGQgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ3lpZWxkJykp
IHsKLSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZVlpZWxkRXhwcmVzc2lvbigpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0
YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBz
dGFydFRva2VuOwotICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlQ29uZGl0aW9uYWxF
eHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IHRva2VuXzEu
VG9rZW4uSWRlbnRpZmllciAmJiAodG9rZW4ubGluZU51bWJlciA9PT0gdGhpcy5sb29rYWhlYWQu
bGluZU51bWJlcikgJiYgdG9rZW4udmFsdWUgPT09ICdhc3luYycgJiYgKHRoaXMubG9va2FoZWFk
LnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGFyZyA9IHRoaXMucGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOwotICAgICAgICAgICAg
ICAgICAgICBleHByID0gewotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJh
bWV0ZXJQbGFjZUhvbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW2FyZ10s
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZQotICAgICAgICAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZXhwci50eXBlID09
PSBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyIHx8IHRoaXMubWF0Y2goJz0+JykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gRUNNQS0yNjIgMTQuMiBBcnJvdyBGdW5jdGlvbiBEZWZpbml0aW9u
cwotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpc0FzeW5jID0gZXhwci5hc3luYzsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJlaW50ZXJwcmV0QXNDb3ZlckZv
cm1hbHNMaXN0KGV4cHIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGlzdCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzTGluZVRlcm1pbmF0b3IpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9v
a2FoZWFkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOwot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0
LnN0cmljdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQg
PSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBw
cmV2aW91c0F3YWl0ID0gdGhpcy5jb250ZXh0LmF3YWl0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gaXNBc3luYzsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmV4cGVjdCgnPT4nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBi
b2R5ID0gdGhpcy5tYXRjaCgneycpID8gdGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMo
KSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFy
KHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZXhwcmVzc2lvbiA9IGJvZHkudHlwZSAhPT0gc3ludGF4XzEuU3ludGF4LkJsb2NrU3Rh
dGVtZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3Qg
JiYgbGlzdC5maXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGxpc3QuZmlyc3RSZXN0cmljdGVkLCBsaXN0Lm1lc3Nh
Z2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgbGlzdC5zdHJpY3RlZCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obGlzdC5zdHJpY3Rl
ZCwgbGlzdC5tZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cHIgPSBpc0FzeW5jID8gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9k
ZS5Bc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uKGxpc3QucGFyYW1zLCBib2R5LCBleHByZXNz
aW9uKSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24obGlzdC5wYXJhbXMsIGJvZHksIGV4cHJl
c3Npb24pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSBw
cmV2aW91c1N0cmljdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxv
d1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmF3YWl0ID0gcHJldmlvdXNBd2FpdDsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMubWF0Y2hBc3NpZ24oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCF0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxp
ZExIU0luQXNzaWdubWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBleHByLnR5cGUgPT09IHN5
bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGlkID0gKGV4cHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNj
YW5uZXIuaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18x
Lk1lc3NhZ2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzU3Ry
aWN0TW9kZVJlc2VydmVkV29yZChpZC5uYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1l
c3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCF0aGlzLm1hdGNoKCc9JykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4
cHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJp
Z2h0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlz
LnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuQXNzaWdubWVudEV4cHJlc3Npb24odG9r
ZW4udmFsdWUsIGV4cHIsIHJpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiBleHByOwotICAgICAgICB9OwotICAgICAgICAvLyBFQ01BLTI2MiAxMi4xNiBDb21t
YSBPcGVyYXRvcgotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRXhwcmVzc2lvbiA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7
Ci0gICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwotICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJywn
KSkgewotICAgICAgICAgICAgICAgIHZhciBleHByZXNzaW9ucyA9IFtdOwotICAgICAgICAgICAg
ICAgIGV4cHJlc3Npb25zLnB1c2goZXhwcik7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMu
c3RhcnRNYXJrZXIuaW5kZXggPCB0aGlzLnNjYW5uZXIubGVuZ3RoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghdGhpcy5tYXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLm5l
eHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMuaXNv
bGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5z
dGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLlNlcXVlbmNlRXhwcmVzc2lvbihleHByZXNz
aW9ucykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAg
IH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEzLjIgQmxvY2sKLSAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZVN0YXRlbWVudExpc3RJdGVtID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
dmFyIHN0YXRlbWVudDsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJn
ZXQgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSB0
cnVlOwotICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9r
ZW4uS2V5d29yZCkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudmFs
dWUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnZXhwb3J0JzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzTW9kdWxlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCwg
bWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhp
cy5wYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW1wb3J0JzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzTW9kdWxlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCwgbWVz
c2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5w
YXJzZUltcG9ydERlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29uc3QnOgotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUxleGljYWxEZWNsYXJhdGlvbih7IGluRm9yOiBmYWxz
ZSB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlICdmdW5jdGlvbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0
aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGV0
JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMuaXNMZXhpY2FsRGVj
bGFyYXRpb24oKSA/IHRoaXMucGFyc2VMZXhpY2FsRGVjbGFyYXRpb24oeyBpbkZvcjogZmFsc2Ug
fSkgOiB0aGlzLnBhcnNlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlbWVudCA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VTdGF0ZW1lbnQo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnQ7Ci0gICAgICAg
IH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VCbG9jayA9IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB0
aGlzLmV4cGVjdCgneycpOwotICAgICAgICAgICAgdmFyIGJsb2NrID0gW107Ci0gICAgICAgICAg
ICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9JykpIHsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJsb2NrLnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdGhpcy5leHBlY3QoJ30nKTsKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkJsb2NrU3RhdGVtZW50KGJsb2NrKSk7Ci0g
ICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEzLjMuMSBMZXQgYW5kIENvbnN0IERlY2xh
cmF0aW9ucwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGV4aWNhbEJpbmRpbmcgPSBm
dW5jdGlvbiAoa2luZCwgb3B0aW9ucykgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKLSAgICAgICAgICAgIHZh
ciBpZCA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7Ci0gICAgICAgICAgICAvLyBF
Q01BLTI2MiAxMi4yLjEKLSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGlk
LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKChpZCkubmFtZSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0
VmFyTmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
dmFyIGluaXQgPSBudWxsOwotICAgICAgICAgICAgaWYgKGtpbmQgPT09ICdjb25zdCcpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2hLZXl3b3JkKCdpbicpICYmICF0aGlzLm1hdGNo
Q29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJz0nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIo
dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkRlY2xhcmF0aW9uTWlzc2luZ0luaXRpYWxp
emVyLCAnY29uc3QnKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCghb3B0aW9ucy5pbkZvciAmJiBp
ZC50eXBlICE9PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgfHwgdGhpcy5tYXRjaCgnPScp
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJz0nKTsKLSAgICAgICAgICAgICAgICBp
bml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0b3IoaWQsIGluaXQpKTsKLSAgICAgICAgfTsK
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJpbmRpbmdMaXN0ID0gZnVuY3Rpb24gKGtp
bmQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBsaXN0ID0gW3RoaXMucGFyc2VMZXhpY2Fs
QmluZGluZyhraW5kLCBvcHRpb25zKV07Ci0gICAgICAgICAgICB3aGlsZSAodGhpcy5tYXRjaCgn
LCcpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAg
ICBsaXN0LnB1c2godGhpcy5wYXJzZUxleGljYWxCaW5kaW5nKGtpbmQsIG9wdGlvbnMpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBsaXN0OwotICAgICAgICB9OwotICAgICAg
ICBQYXJzZXIucHJvdG90eXBlLmlzTGV4aWNhbERlY2xhcmF0aW9uID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgdmFyIHByZXZpb3VzSW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAg
ICAgICAgICB2YXIgcHJldmlvdXNMaW5lTnVtYmVyID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7
Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNMaW5lU3RhcnQgPSB0aGlzLnNjYW5uZXIubGluZVN0
YXJ0OwotICAgICAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKLSAgICAgICAgICAgIHZh
ciBuZXh0ID0gdGhpcy5zY2FubmVyLmxleCgpOwotICAgICAgICAgICAgdGhpcy5zY2FubmVyLmlu
ZGV4ID0gcHJldmlvdXNJbmRleDsKLSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5saW5lTnVtYmVy
ID0gcHJldmlvdXNMaW5lTnVtYmVyOwotICAgICAgICAgICAgdGhpcy5zY2FubmVyLmxpbmVTdGFy
dCA9IHByZXZpb3VzTGluZVN0YXJ0OwotICAgICAgICAgICAgcmV0dXJuIChuZXh0LnR5cGUgPT09
IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcikgfHwKLSAgICAgICAgICAgICAgICAobmV4dC50eXBl
ID09PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IgJiYgbmV4dC52YWx1ZSA9PT0gJ1snKSB8fAot
ICAgICAgICAgICAgICAgIChuZXh0LnR5cGUgPT09IHRva2VuXzEuVG9rZW4uUHVuY3R1YXRvciAm
JiBuZXh0LnZhbHVlID09PSAneycpIHx8Ci0gICAgICAgICAgICAgICAgKG5leHQudHlwZSA9PT0g
dG9rZW5fMS5Ub2tlbi5LZXl3b3JkICYmIG5leHQudmFsdWUgPT09ICdsZXQnKSB8fAotICAgICAg
ICAgICAgICAgIChuZXh0LnR5cGUgPT09IHRva2VuXzEuVG9rZW4uS2V5d29yZCAmJiBuZXh0LnZh
bHVlID09PSAneWllbGQnKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZUxleGljYWxEZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7Ci0gICAgICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGtpbmQgPSB0
aGlzLm5leHRUb2tlbigpLnZhbHVlOwotICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGtpbmQg
PT09ICdsZXQnIHx8IGtpbmQgPT09ICdjb25zdCcsICdMZXhpY2FsIGRlY2xhcmF0aW9uIG11c3Qg
YmUgZWl0aGVyIGxldCBvciBjb25zdCcpOwotICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9
IHRoaXMucGFyc2VCaW5kaW5nTGlzdChraW5kLCBvcHRpb25zKTsKLSAgICAgICAgICAgIHRoaXMu
Y29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgLy8gRUNNQS0yNjIgMTMuMy4zIERlc3RydWN0dXJpbmcgQmluZGlu
ZyBQYXR0ZXJucwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQmluZGluZ1Jlc3RFbGVt
ZW50ID0gZnVuY3Rpb24gKHBhcmFtcywga2luZCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKLSAgICAg
ICAgICAgIHBhcmFtcy5wdXNoKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAgIHZhciBhcmcg
PSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKGtpbmQpOwotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUmVzdEVsZW1lbnQoYXJnKSk7Ci0gICAgICAg
IH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBcnJheVBhdHRlcm4gPSBmdW5jdGlv
biAocGFyYW1zLCBraW5kKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9k
ZSgpOwotICAgICAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsKLSAgICAgICAgICAgIHZhciBlbGVt
ZW50cyA9IFtdOwotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCddJykpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1lbnRzLnB1c2godGhpcy5wYXJzZUJpbmRpbmdSZXN0RWxlbWVudChwYXJhbXMsIGtpbmQp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bWVudHMucHVzaCh0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCkpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRj
aCgnXScpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJ10nKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkFycmF5UGF0dGVybihlbGVtZW50cykpOwotICAgICAgICB9Owot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJvcGVydHlQYXR0ZXJuID0gZnVuY3Rpb24g
KHBhcmFtcywga2luZCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKLSAgICAgICAgICAgIHZhciBjb21wdXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIHNo
b3J0aGFuZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGZhbHNlOwotICAgICAg
ICAgICAgdmFyIGtleTsKLSAgICAgICAgICAgIHZhciB2YWx1ZTsKLSAgICAgICAgICAgIGlmICh0
aGlzLmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpIHsKLSAgICAg
ICAgICAgICAgICB2YXIga2V5VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgICAg
ICBrZXkgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAg
dmFyIGluaXQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIoa2V5VG9r
ZW4udmFsdWUpKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtleVRva2VuKTsKLSAgICAgICAgICAgICAgICAg
ICAgc2hvcnRoYW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4o
KTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbmFsaXplKHRo
aXMuc3RhcnROb2RlKGtleVRva2VuKSwgbmV3IE5vZGUuQXNzaWdubWVudFBhdHRlcm4oaW5pdCwg
ZXhwcikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhp
cy5tYXRjaCgnOicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtleVRva2Vu
KTsKLSAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSBpbml0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJzonKTsKLSAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2lu
ZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7Ci0gICAgICAgICAg
ICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5leHBlY3QoJzonKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VQ
YXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zLCBraW5kKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlByb3BlcnR5KCdpbml0Jywg
a2V5LCBjb21wdXRlZCwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSk7Ci0gICAgICAgIH07Ci0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VPYmplY3RQYXR0ZXJuID0gZnVuY3Rpb24gKHBh
cmFtcywga2luZCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
LSAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW107Ci0gICAgICAgICAgICB0aGlzLmV4cGVj
dCgneycpOwotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKLSAgICAgICAg
ICAgICAgICBwcm9wZXJ0aWVzLnB1c2godGhpcy5wYXJzZVByb3BlcnR5UGF0dGVybihwYXJhbXMs
IGtpbmQpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJ30nKSkgewotICAgICAg
ICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7Ci0gICAgICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5PYmplY3RQYXR0ZXJuKHByb3BlcnRpZXMp
KTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVBhdHRlcm4gPSBm
dW5jdGlvbiAocGFyYW1zLCBraW5kKSB7Ci0gICAgICAgICAgICB2YXIgcGF0dGVybjsKLSAgICAg
ICAgICAgIGlmICh0aGlzLm1hdGNoKCdbJykpIHsKLSAgICAgICAgICAgICAgICBwYXR0ZXJuID0g
dGhpcy5wYXJzZUFycmF5UGF0dGVybihwYXJhbXMsIGtpbmQpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgneycpKSB7Ci0gICAgICAgICAgICAgICAgcGF0
dGVybiA9IHRoaXMucGFyc2VPYmplY3RQYXR0ZXJuKHBhcmFtcywga2luZCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtl
eXdvcmQoJ2xldCcpICYmIChraW5kID09PSAnY29uc3QnIHx8IGtpbmQgPT09ICdsZXQnKSkgewot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9v
a2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkxldEluTGV4aWNhbEJpbmRpbmcpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYXJhbXMucHVzaCh0aGlzLmxvb2thaGVhZCk7
Ci0gICAgICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIo
a2luZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcGF0dGVybjsKLSAgICAg
ICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdCA9
IGZ1bmN0aW9uIChwYXJhbXMsIGtpbmQpIHsKLSAgICAgICAgICAgIHZhciBzdGFydFRva2VuID0g
dGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB2YXIgcGF0dGVybiA9IHRoaXMucGFyc2VQYXR0
ZXJuKHBhcmFtcywga2luZCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICB2YXIgcHJl
dmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHZhciBy
aWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24pOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlv
dXNBbGxvd1lpZWxkOwotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzLmZpbmFsaXplKHRo
aXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5Bc3NpZ25tZW50UGF0dGVybihwYXR0
ZXJuLCByaWdodCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm47
Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEzLjMuMiBWYXJpYWJsZSBTdGF0ZW1l
bnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlSWRlbnRpZmllciA9IGZ1
bmN0aW9uIChraW5kKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OwotICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAg
IGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLktleXdvcmQgJiYgdG9rZW4udmFsdWUg
PT09ICd5aWVsZCcpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkg
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2Vu
LCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmFsbG93WWllbGQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4u
dHlwZSAhPT0gdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHRoaXMuY29udGV4dC5zdHJpY3QgJiYgdG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5LZXl3
b3JkICYmIHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9r
ZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLmNvbnRleHQuc3RyaWN0IHx8IHRva2VuLnZhbHVlICE9PSAnbGV0JyB8fCBraW5kICE9PSAn
dmFyJykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tl
bih0b2tlbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICgodGhpcy5jb250ZXh0LmlzTW9kdWxlIHx8
IHRoaXMuY29udGV4dC5hd2FpdCkgJiYgdG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5JZGVu
dGlmaWVyICYmIHRva2VuLnZhbHVlID09PSAnYXdhaXQnKSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKHRva2Vu
LnZhbHVlKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VWYXJp
YWJsZURlY2xhcmF0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgcGFyYW1zID0gW107Ci0g
ICAgICAgICAgICB2YXIgaWQgPSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMsICd2YXInKTsKLSAg
ICAgICAgICAgIC8vIEVDTUEtMjYyIDEyLjIuMQotICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4
dC5zdHJpY3QgJiYgaWQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoKGlkKS5uYW1l
KSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5N
ZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRj
aCgnPScpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAg
ICAgICBpbml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChpZC50eXBl
ICE9PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllciAmJiAhb3B0aW9ucy5pbkZvcikgewotICAg
ICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9Jyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0b3Io
aWQsIGluaXQpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb25MaXN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKLSAgICAgICAgICAg
IHZhciBvcHQgPSB7IGluRm9yOiBvcHRpb25zLmluRm9yIH07Ci0gICAgICAgICAgICB2YXIgbGlz
dCA9IFtdOwotICAgICAgICAgICAgbGlzdC5wdXNoKHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0
aW9uKG9wdCkpOwotICAgICAgICAgICAgd2hpbGUgKHRoaXMubWF0Y2goJywnKSkgewotICAgICAg
ICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgbGlzdC5wdXNoKHRo
aXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKG9wdCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VWYXJpYWJsZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQo
J3ZhcicpOwotICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uTGlzdCh7IGluRm9yOiBmYWxzZSB9KTsKLSAgICAgICAgICAgIHRoaXMuY29u
c3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKSk7Ci0gICAg
ICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEzLjQgRW1wdHkgU3RhdGVtZW50Ci0gICAgICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VFbXB0eVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB0aGlz
LmV4cGVjdCgnOycpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuRW1wdHlTdGF0ZW1lbnQoKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYy
IDEzLjUgRXhwcmVzc2lvbiBTdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZUV4cHJlc3Npb25TdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNl
RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHByZXNzaW9uU3Rh
dGVtZW50KGV4cHIpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gRUNNQS0yNjIgMTMuNiBJZiBz
dGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUlmU3RhdGVtZW50ID0gZnVu
Y3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAg
ICAgICAgICAgIHZhciBjb25zZXF1ZW50OwotICAgICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IG51
bGw7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2lmJyk7Ci0gICAgICAgICAgICB0
aGlzLmV4cGVjdCgnKCcpOwotICAgICAgICAgICAgdmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVz
c2lvbigpOwotICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcu
dG9sZXJhbnQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2Vu
KHRoaXMubmV4dFRva2VuKCkpOwotICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQgPSB0aGlzLmZp
bmFsaXplKHRoaXMuY3JlYXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuZXhw
ZWN0KCcpJyk7Ci0gICAgICAgICAgICAgICAgY29uc2VxdWVudCA9IHRoaXMucGFyc2VTdGF0ZW1l
bnQoKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2Vsc2UnKSkgewot
ICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAg
ICBhbHRlcm5hdGUgPSB0aGlzLnBhcnNlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSk7Ci0gICAgICAg
IH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEzLjcuMiBUaGUgZG8td2hpbGUgU3RhdGVtZW50Ci0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VEb1doaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAg
ICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZG8nKTsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0lu
SXRlcmF0aW9uID0gdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uOwotICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmluSXRlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5w
YXJzZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0g
cHJldmlvdXNJbkl0ZXJhdGlvbjsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnd2hp
bGUnKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICB2YXIgdGVz
dCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScp
OwotICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJzsnKSkgewotICAgICAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Eb1doaWxlU3RhdGVtZW50KGJvZHksIHRlc3QpKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgLy8gRUNNQS0yNjIgMTMuNy4zIFRoZSB3aGlsZSBTdGF0ZW1lbnQK
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVdoaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAg
ICAgIHZhciBib2R5OwotICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd3aGlsZScpOwot
ICAgICAgICAgICAgdGhpcy5leHBlY3QoJygnKTsKLSAgICAgICAgICAgIHZhciB0ZXN0ID0gdGhp
cy5wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpICYm
IHRoaXMuY29uZmlnLnRvbGVyYW50KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVu
ZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKLSAgICAgICAgICAgICAgICBib2R5ID0g
dGhpcy5maW5hbGl6ZSh0aGlzLmNyZWF0ZU5vZGUoKSwgbmV3IE5vZGUuRW1wdHlTdGF0ZW1lbnQo
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0
aGlzLmV4cGVjdCgnKScpOwotICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0luSXRlcmF0aW9u
ID0gdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4
dC5pbkl0ZXJhdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMucGFyc2VT
dGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBw
cmV2aW91c0luSXRlcmF0aW9uOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuV2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSkpOwot
ICAgICAgICB9OwotICAgICAgICAvLyBFQ01BLTI2MiAxMy43LjQgVGhlIGZvciBTdGF0ZW1lbnQK
LSAgICAgICAgLy8gRUNNQS0yNjIgMTMuNy41IFRoZSBmb3ItaW4gYW5kIGZvci1vZiBTdGF0ZW1l
bnRzCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VGb3JTdGF0ZW1lbnQgPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7Ci0gICAgICAgICAgICB2YXIgdGVz
dCA9IG51bGw7Ci0gICAgICAgICAgICB2YXIgdXBkYXRlID0gbnVsbDsKLSAgICAgICAgICAgIHZh
ciBmb3JJbiA9IHRydWU7Ci0gICAgICAgICAgICB2YXIgbGVmdCwgcmlnaHQ7Ci0gICAgICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdGhpcy5leHBlY3RL
ZXl3b3JkKCdmb3InKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAgICAg
ICBpZiAodGhpcy5tYXRjaCgnOycpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4o
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlm
ICh0aGlzLm1hdGNoS2V5d29yZCgndmFyJykpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5pdCA9
IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigp
OwotICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0
LmFsbG93SW47Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbnMgPSB0aGlzLnBhcnNlVmFy
aWFibGVEZWNsYXJhdGlvbkxpc3QoeyBpbkZvcjogdHJ1ZSB9KTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIHRoaXMubWF0Y2hLZXl3b3Jk
KCdpbicpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjbCA9IGRlY2xhcmF0aW9u
c1swXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLmluaXQgJiYgKGRlY2wuaWQu
dHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkFycmF5UGF0dGVybiB8fCBkZWNsLmlkLnR5cGUgPT09
IHN5bnRheF8xLlN5bnRheC5PYmplY3RQYXR0ZXJuIHx8IHRoaXMuY29udGV4dC5zdHJpY3QpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuRm9ySW5PZkxvb3BJbml0aWFsaXplciwgJ2Zvci1pbicpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmlu
YWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2
YXInKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
aWdodCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
bml0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0
ID09PSBudWxsICYmIHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFy
aWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9
IGluaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
aW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihk
ZWNsYXJhdGlvbnMsICd2YXInKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dCgnOycpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdjb25zdCcpIHx8IHRoaXMubWF0
Y2hLZXl3b3JkKCdsZXQnKSkgewotICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5jcmVh
dGVOb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBraW5kID0gdGhpcy5uZXh0VG9rZW4o
KS52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuc3RyaWN0ICYm
IHRoaXMubG9va2FoZWFkLnZhbHVlID09PSAnaW4nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpbml0ID0gdGhpcy5maW5hbGl6ZShpbml0LCBuZXcgTm9kZS5JZGVudGlmaWVyKGtpbmQpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0ID0gaW5pdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0g
dGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBu
dWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4
dC5hbGxvd0luOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4g
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbnMgPSB0aGlz
LnBhcnNlQmluZGluZ0xpc3Qoa2luZCwgeyBpbkZvcjogdHJ1ZSB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYgZGVjbGFy
YXRpb25zWzBdLmluaXQgPT09IG51bGwgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ2luJykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5maW5hbGl6ZShpbml0LCBuZXcg
Tm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdCA9IGluaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQg
PSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
aXQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBkZWNsYXJhdGlvbnNb
MF0uaW5pdCA9PT0gbnVsbCAmJiB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5maW5hbGl6ZShpbml0LCBu
ZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdCA9IGluaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmln
aHQgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JJ
biA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lU2Vt
aWNvbG9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxp
emUoaW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGluaXRTdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNvbnRleHQuYWxsb3dJbjsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgaW5pdCA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVu
dEV4cHJlc3Npb24pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9
IHByZXZpb3VzQWxsb3dJbjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3
b3JkKCdpbicpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5p
c0Fzc2lnbm1lbnRUYXJnZXQgfHwgaW5pdC50eXBlID09PSBzeW50YXhfMS5TeW50YXguQXNzaWdu
bWVudEV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVy
YXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JJbik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25B
c1BhdHRlcm4oaW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29y
ZCgnb2YnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNB
c3NpZ25tZW50VGFyZ2V0IHx8IGluaXQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkFzc2lnbm1l
bnRFeHByZXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0
ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZExIU0luRm9yTG9vcCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25B
c1BhdHRlcm4oaW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvckluID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5t
YXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluaXRTZXEgPSBb
aW5pdF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMubWF0Y2goJywn
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VxLnB1c2godGhpcy5pc29sYXRl
Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0g
dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShpbml0U3RhcnRUb2tlbiksIG5ldyBOb2RlLlNl
cXVlbmNlRXhwcmVzc2lvbihpbml0U2VxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnOycpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAgIGlmICghdGhp
cy5tYXRjaCgnOycpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlc3QgPSB0aGlzLnBhcnNlRXhw
cmVzc2lvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dCgnOycpOwotICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHVwZGF0ZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGJvZHk7Ci0gICAgICAgICAg
ICBpZiAoIXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmNvbmZpZy50b2xlcmFudCkgewotICAgICAg
ICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7
Ci0gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuZmluYWxpemUodGhpcy5jcmVhdGVOb2RlKCks
IG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKLSAgICAgICAgICAgICAg
ICB2YXIgcHJldmlvdXNJbkl0ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbjsKLSAg
ICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGJvZHkgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVN0YXRlbWVu
dCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0gcHJldmlvdXNJ
bkl0ZXJhdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAodHlwZW9mIGxl
ZnQgPT09ICd1bmRlZmluZWQnKSA/Ci0gICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5Gb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KSkgOgotICAg
ICAgICAgICAgICAgIGZvckluID8gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Gb3JJblN0
YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSkpIDoKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Gb3JPZlN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSkp
OwotICAgICAgICB9OwotICAgICAgICAvLyBFQ01BLTI2MiAxMy44IFRoZSBjb250aW51ZSBzdGF0
ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNvbnRpbnVlU3RhdGVtZW50ID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
LSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnY29udGludWUnKTsKLSAgICAgICAgICAg
IHZhciBsYWJlbCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9
PT0gdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyICYmICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigp
OwotICAgICAgICAgICAgICAgIGxhYmVsID0gaWQ7Ci0gICAgICAgICAgICAgICAgdmFyIGtleSA9
ICckJyArIGlkLm5hbWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhh
c093blByb3BlcnR5LmNhbGwodGhpcy5jb250ZXh0LmxhYmVsU2V0LCBrZXkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlVua25vd25M
YWJlbCwgaWQubmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7Ci0gICAgICAgICAgICBpZiAobGFiZWwgPT09
IG51bGwgJiYgIXRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgIHRo
aXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9k
ZS5Db250aW51ZVN0YXRlbWVudChsYWJlbCkpOwotICAgICAgICB9OwotICAgICAgICAvLyBFQ01B
LTI2MiAxMy45IFRoZSBicmVhayBzdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZUJyZWFrU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnYnJl
YWsnKTsKLSAgICAgICAgICAgIHZhciBsYWJlbCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAodGhp
cy5sb29rYWhlYWQudHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyICYmICF0aGlzLmhh
c0xpbmVUZXJtaW5hdG9yKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5wYXJzZVZh
cmlhYmxlSWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgIHZhciBrZXkgPSAnJCcgKyBpZC5u
YW1lOwotICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0
eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCwga2V5KSkgewotICAgICAgICAgICAgICAgICAg
ICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5Vbmtub3duTGFiZWwsIGlkLm5h
bWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsYWJlbCA9IGlkOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7Ci0gICAgICAg
ICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiAmJiAh
dGhpcy5jb250ZXh0LmluU3dpdGNoKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9y
KG1lc3NhZ2VzXzEuTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkJyZWFrU3RhdGVtZW50
KGxhYmVsKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEzLjEwIFRoZSByZXR1
cm4gc3RhdGVtZW50Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXR1cm5TdGF0ZW1l
bnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5pbkZ1bmN0
aW9uQm9keSkgewotICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18x
Lk1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29y
ZCgncmV0dXJuJyk7Ci0gICAgICAgICAgICB2YXIgaGFzQXJndW1lbnQgPSAhdGhpcy5tYXRjaCgn
OycpICYmICF0aGlzLm1hdGNoKCd9JykgJiYKLSAgICAgICAgICAgICAgICAhdGhpcy5oYXNMaW5l
VGVybWluYXRvciAmJiB0aGlzLmxvb2thaGVhZC50eXBlICE9PSB0b2tlbl8xLlRva2VuLkVPRjsK
LSAgICAgICAgICAgIHZhciBhcmd1bWVudCA9IGhhc0FyZ3VtZW50ID8gdGhpcy5wYXJzZUV4cHJl
c3Npb24oKSA6IG51bGw7Ci0gICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlJldHVyblN0YXRl
bWVudChhcmd1bWVudCkpOwotICAgICAgICB9OwotICAgICAgICAvLyBFQ01BLTI2MiAxMy4xMSBU
aGUgd2l0aCBzdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVdpdGhTdGF0
ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmlj
dCkgewotICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3Nh
Z2VzLlN0cmljdE1vZGVXaXRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3dp
dGgnKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICB2YXIgb2Jq
ZWN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcp
Jyk7Ci0gICAgICAgICAgICB2YXIgYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLldpdGhTdGF0ZW1lbnQo
b2JqZWN0LCBib2R5KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEzLjEyIFRo
ZSBzd2l0Y2ggc3RhdGVtZW50Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTd2l0Y2hD
YXNlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKLSAgICAgICAgICAgIHZhciB0ZXN0OwotICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hL
ZXl3b3JkKCdkZWZhdWx0JykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwot
ICAgICAgICAgICAgICAgIHRlc3QgPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdjYXNlJyk7Ci0gICAg
ICAgICAgICAgICAgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgnOicpOwotICAgICAgICAgICAgdmFyIGNvbnNlcXVl
bnQgPSBbXTsKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHRoaXMubWF0Y2goJ30nKSB8fCB0aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpIHx8IHRoaXMu
bWF0Y2hLZXl3b3JkKCdjYXNlJykpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQucHVzaCh0aGlzLnBhcnNl
U3RhdGVtZW50TGlzdEl0ZW0oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Td2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQp
KTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN3aXRjaFN0YXRl
bWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3N3aXRjaCcpOwotICAgICAg
ICAgICAgdGhpcy5leHBlY3QoJygnKTsKLSAgICAgICAgICAgIHZhciBkaXNjcmltaW5hbnQgPSB0
aGlzLnBhcnNlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKLSAg
ICAgICAgICAgIHZhciBwcmV2aW91c0luU3dpdGNoID0gdGhpcy5jb250ZXh0LmluU3dpdGNoOwot
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluU3dpdGNoID0gdHJ1ZTsKLSAgICAgICAgICAgIHZh
ciBjYXNlcyA9IFtdOwotICAgICAgICAgICAgdmFyIGRlZmF1bHRGb3VuZCA9IGZhbHNlOwotICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIGNsYXVzZSA9
IHRoaXMucGFyc2VTd2l0Y2hDYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNsYXVzZS50ZXN0
ID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2Vz
Lk11bHRpcGxlRGVmYXVsdHNJblN3aXRjaCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgY2FzZXMucHVzaChjbGF1c2UpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdGhpcy5leHBlY3QoJ30nKTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pblN3aXRj
aCA9IHByZXZpb3VzSW5Td2l0Y2g7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5Td2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcykpOwotICAg
ICAgICB9OwotICAgICAgICAvLyBFQ01BLTI2MiAxMy4xMyBMYWJlbGxlZCBTdGF0ZW1lbnRzCi0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMYWJlbGxlZFN0YXRlbWVudCA9IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAg
ICAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICB2YXIg
c3RhdGVtZW50OwotICAgICAgICAgICAgaWYgKChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRh
eC5JZGVudGlmaWVyKSAmJiB0aGlzLm1hdGNoKCc6JykpIHsKLSAgICAgICAgICAgICAgICB0aGlz
Lm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIHZhciBpZCA9IChleHByKTsKLSAgICAgICAg
ICAgICAgICB2YXIga2V5ID0gJyQnICsgaWQubmFtZTsKLSAgICAgICAgICAgICAgICBpZiAoT2Jq
ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCwg
a2V5KSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5N
ZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBpZC5uYW1lKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxhYmVsU2V0W2tleV0gPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHZhciBsYWJlbGVkQm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsK
LSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jb250ZXh0LmxhYmVsU2V0W2tleV07Ci0gICAg
ICAgICAgICAgICAgc3RhdGVtZW50ID0gbmV3IE5vZGUuTGFiZWxlZFN0YXRlbWVudChpZCwgbGFi
ZWxlZEJvZHkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGVtZW50
ID0gbmV3IE5vZGUuRXhwcmVzc2lvblN0YXRlbWVudChleHByKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIHN0YXRlbWVudCk7Ci0gICAgICAg
IH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEzLjE0IFRoZSB0aHJvdyBzdGF0ZW1lbnQKLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRocm93U3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRo
aXMuZXhwZWN0S2V5d29yZCgndGhyb3cnKTsKLSAgICAgICAgICAgIGlmICh0aGlzLmhhc0xpbmVU
ZXJtaW5hdG9yKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEu
TWVzc2FnZXMuTmV3bGluZUFmdGVyVGhyb3cpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
dmFyIGFyZ3VtZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIHRoaXMu
Y29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuVGhyb3dTdGF0ZW1lbnQoYXJndW1lbnQpKTsKLSAgICAgICAgfTsKLSAgICAg
ICAgLy8gRUNNQS0yNjIgMTMuMTUgVGhlIHRyeSBzdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZUNhdGNoQ2xhdXNlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29y
ZCgnY2F0Y2gnKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5tYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0
ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIg
cGFyYW1zID0gW107Ci0gICAgICAgICAgICB2YXIgcGFyYW0gPSB0aGlzLnBhcnNlUGF0dGVybihw
YXJhbXMpOwotICAgICAgICAgICAgdmFyIHBhcmFtTWFwID0ge307Ci0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIHZh
ciBrZXkgPSAnJCcgKyBwYXJhbXNbaV0udmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKE9iamVj
dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJhbU1hcCwga2V5KSkgewotICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5EdXBs
aWNhdGVCaW5kaW5nLCBwYXJhbXNbaV0udmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBwYXJhbU1hcFtrZXldID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHBhcmFtLnR5cGUgPT09IHN5bnRheF8xLlN5
bnRheC5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jl
c3RyaWN0ZWRXb3JkKChwYXJhbSkubmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50
b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0Q2F0Y2hWYXJpYWJsZSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5leHBlY3Qo
JyknKTsKLSAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZUJsb2NrKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5DYXRjaENsYXVzZShwYXJh
bSwgYm9keSkpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRmlu
YWxseUNsYXVzZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29y
ZCgnZmluYWxseScpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VCbG9jaygpOwotICAg
ICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVHJ5U3RhdGVtZW50ID0gZnVu
Y3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAg
ICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgndHJ5Jyk7Ci0gICAgICAgICAgICB2YXIgYmxv
Y2sgPSB0aGlzLnBhcnNlQmxvY2soKTsKLSAgICAgICAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5t
YXRjaEtleXdvcmQoJ2NhdGNoJykgPyB0aGlzLnBhcnNlQ2F0Y2hDbGF1c2UoKSA6IG51bGw7Ci0g
ICAgICAgICAgICB2YXIgZmluYWxpemVyID0gdGhpcy5tYXRjaEtleXdvcmQoJ2ZpbmFsbHknKSA/
IHRoaXMucGFyc2VGaW5hbGx5Q2xhdXNlKCkgOiBudWxsOwotICAgICAgICAgICAgaWYgKCFoYW5k
bGVyICYmICFmaW5hbGl6ZXIpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVz
c2FnZXNfMS5NZXNzYWdlcy5Ob0NhdGNoT3JGaW5hbGx5KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlRyeVN0YXRlbWVudChi
bG9jaywgaGFuZGxlciwgZmluYWxpemVyKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEt
MjYyIDEzLjE2IFRoZSBkZWJ1Z2dlciBzdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZURlYnVnZ2VyU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29y
ZCgnZGVidWdnZXInKTsKLSAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOwotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRGVidWdnZXJTdGF0
ZW1lbnQoKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEzIFN0YXRlbWVudHMK
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgICAgIHZhciBzdGF0ZW1lbnQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9v
a2FoZWFkLnR5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uQm9vbGVh
bkxpdGVyYWw6Ci0gICAgICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLk51bGxMaXRlcmFs
OgotICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5OdW1lcmljTGl0ZXJhbDoKLSAg
ICAgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uU3RyaW5nTGl0ZXJhbDoKLSAgICAgICAg
ICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uVGVtcGxhdGU6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSB0b2tlbl8xLlRva2VuLlJlZ3VsYXJFeHByZXNzaW9uOgotICAgICAgICAgICAgICAgICAgICBz
dGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uUHVuY3R1
YXRvcjoKLSAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5sb29rYWhlYWQudmFs
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3snKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlQmxvY2soKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJygnKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lv
blN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHZhbHVlID09PSAnOycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
bWVudCA9IHRoaXMucGFyc2VFbXB0eVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGVtZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcjoKLSAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50
ID0gdGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSA/IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0
aW9uKCkgOiB0aGlzLnBhcnNlTGFiZWxsZWRTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLktleXdvcmQ6Ci0g
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JyZWFrJzoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlQnJlYWtTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nv
bnRpbnVlJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBh
cnNlQ29udGludWVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlYnVnZ2VyJzoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRGVidWdnZXJTdGF0ZW1lbnQo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ2RvJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQg
PSB0aGlzLnBhcnNlRG9XaGlsZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZm9yJzoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRm9yU3RhdGVtZW50KCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICdmdW5jdGlvbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVt
ZW50ID0gdGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lmJzoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlSWZTdGF0ZW1l
bnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ3JldHVybic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGVtZW50ID0gdGhpcy5wYXJzZVJldHVyblN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3dpdGNoJzoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlU3dpdGNo
U3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICd0aHJvdyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVRocm93U3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0cnkn
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VUcnlT
dGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ3Zhcic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVtZW50ID0gdGhpcy5wYXJzZVZhcmlhYmxlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd3aGls
ZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVdo
aWxlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICd3aXRoJzoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlV2l0aFN0YXRlbWVudCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVz
c2lvblN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMudGhy
b3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRlbWVudDsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gRUNNQS0yNjIg
MTQuMSBGdW5jdGlvbiBEZWZpbml0aW9uCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VG
dW5jdGlvblNvdXJjZUVsZW1lbnRzID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7Ci0g
ICAgICAgICAgICB2YXIgYm9keSA9IHRoaXMucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXMoKTsKLSAg
ICAgICAgICAgIHZhciBwcmV2aW91c0xhYmVsU2V0ID0gdGhpcy5jb250ZXh0LmxhYmVsU2V0Owot
ICAgICAgICAgICAgdmFyIHByZXZpb3VzSW5JdGVyYXRpb24gPSB0aGlzLmNvbnRleHQuaW5JdGVy
YXRpb247Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNJblN3aXRjaCA9IHRoaXMuY29udGV4dC5p
blN3aXRjaDsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0luRnVuY3Rpb25Cb2R5ID0gdGhpcy5j
b250ZXh0LmluRnVuY3Rpb25Cb2R5OwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxhYmVsU2V0
ID0ge307Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBmYWxzZTsKLSAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5pblN3aXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5ID0gdHJ1ZTsKLSAgICAgICAgICAgIHdoaWxlICh0aGlz
LnN0YXJ0TWFya2VyLmluZGV4IDwgdGhpcy5zY2FubmVyLmxlbmd0aCkgewotICAgICAgICAgICAg
ICAgIGlmICh0aGlzLm1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJvZHkucHVzaCh0aGlzLnBhcnNlU3Rh
dGVtZW50TGlzdEl0ZW0oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLmV4cGVj
dCgnfScpOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxhYmVsU2V0ID0gcHJldmlvdXNMYWJl
bFNldDsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHByZXZpb3VzSW5J
dGVyYXRpb247Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSBwcmV2aW91c0lu
U3dpdGNoOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5ID0gcHJldmlv
dXNJbkZ1bmN0aW9uQm9keTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLkJsb2NrU3RhdGVtZW50KGJvZHkpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS52YWxpZGF0ZVBhcmFtID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmFtLCBu
YW1lKSB7Ci0gICAgICAgICAgICB2YXIga2V5ID0gJyQnICsgbmFtZTsKLSAgICAgICAgICAgIGlm
ICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5l
ci5pc1Jlc3RyaWN0ZWRXb3JkKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
c3RyaWN0ZWQgPSBwYXJhbTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0g
bWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo
b3B0aW9ucy5wYXJhbVNldCwga2V5KSkgewotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0
cmljdGVkID0gcGFyYW07Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IG1l
c3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCFvcHRpb25zLmZpcnN0UmVzdHJpY3Rl
ZCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChu
YW1lKSkgewotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBh
cmFtOwotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBtZXNzYWdlc18xLk1l
c3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAodGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChuYW1lKSkg
ewotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtOwot
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2Vz
LlN0cmljdFJlc2VydmVkV29yZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMucGFy
YW1TZXQsIGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBh
cmFtOwotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBtZXNzYWdlc18xLk1l
c3NhZ2VzLlN0cmljdFBhcmFtRHVwZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwotICAgICAgICAgICAgaWYg
KHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAg
ICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucy5wYXJhbVNldCwga2V5LCB7IHZh
bHVlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxl
OiB0cnVlIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgb3B0aW9ucy5wYXJhbVNldFtrZXldID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVJlc3RFbGVtZW50ID0gZnVuY3Rp
b24gKHBhcmFtcykgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
LSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRj
aCgneycpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVz
c2FnZXMuT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwYXJhbXMucHVzaCh0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICB2YXIgcGFy
YW0gPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBpZiAodGhp
cy5tYXRjaCgnPScpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuRGVmYXVsdFJlc3RQYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93
RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5QYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuUmVzdEVsZW1lbnQocGFyYW0pKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7Ci0gICAg
ICAgICAgICB2YXIgcGFyYW07Ci0gICAgICAgICAgICB2YXIgcGFyYW1zID0gW107Ci0gICAgICAg
ICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgIGlmICh0b2tlbi52
YWx1ZSA9PT0gJy4uLicpIHsKLSAgICAgICAgICAgICAgICBwYXJhbSA9IHRoaXMucGFyc2VSZXN0
RWxlbWVudChwYXJhbXMpOwotICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbShvcHRp
b25zLCBwYXJhbS5hcmd1bWVudCwgcGFyYW0uYXJndW1lbnQubmFtZSk7Ci0gICAgICAgICAgICAg
ICAgb3B0aW9ucy5wYXJhbXMucHVzaChwYXJhbSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFyYW0gPSB0aGlzLnBhcnNlUGF0dGVybldpdGhE
ZWZhdWx0KHBhcmFtcyk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5s
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbShvcHRpb25z
LCBwYXJhbXNbaV0sIHBhcmFtc1tpXS52YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBvcHRpb25zLnBhcmFtcy5wdXNoKHBhcmFtKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoZmlyc3RSZXN0cmlj
dGVkKSB7Ci0gICAgICAgICAgICB2YXIgb3B0aW9uczsKLSAgICAgICAgICAgIG9wdGlvbnMgPSB7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKLSAgICAgICAgICAgICAgICBmaXJzdFJlc3Ry
aWN0ZWQ6IGZpcnN0UmVzdHJpY3RlZAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSkgewotICAgICAg
ICAgICAgICAgIG9wdGlvbnMucGFyYW1TZXQgPSB7fTsKLSAgICAgICAgICAgICAgICB3aGlsZSAo
dGhpcy5zdGFydE1hcmtlci5pbmRleCA8IHRoaXMuc2Nhbm5lci5sZW5ndGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcihvcHRpb25zKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5leHBlY3QoJywnKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLmV4cGVj
dCgnKScpOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBwYXJhbXM6IG9w
dGlvbnMucGFyYW1zLAotICAgICAgICAgICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0cmljdGVk
LAotICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3RyaWN0
ZWQsCi0gICAgICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlCi0gICAgICAgICAg
ICB9OwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLm1hdGNoQXN5bmNGdW5j
dGlvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBtYXRjaCA9IHRoaXMubWF0Y2hD
b250ZXh0dWFsS2V5d29yZCgnYXN5bmMnKTsKLSAgICAgICAgICAgIGlmIChtYXRjaCkgewotICAg
ICAgICAgICAgICAgIHZhciBwcmV2aW91c0luZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OwotICAg
ICAgICAgICAgICAgIHZhciBwcmV2aW91c0xpbmVOdW1iZXIgPSB0aGlzLnNjYW5uZXIubGluZU51
bWJlcjsKLSAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNMaW5lU3RhcnQgPSB0aGlzLnNjYW5u
ZXIubGluZVN0YXJ0OwotICAgICAgICAgICAgICAgIHRoaXMuY29sbGVjdENvbW1lbnRzKCk7Ci0g
ICAgICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5zY2FubmVyLmluZGV4ID0gcHJldmlvdXNJbmRleDsKLSAgICAgICAgICAgICAg
ICB0aGlzLnNjYW5uZXIubGluZU51bWJlciA9IHByZXZpb3VzTGluZU51bWJlcjsKLSAgICAgICAg
ICAgICAgICB0aGlzLnNjYW5uZXIubGluZVN0YXJ0ID0gcHJldmlvdXNMaW5lU3RhcnQ7Ci0gICAg
ICAgICAgICAgICAgbWF0Y2ggPSAocHJldmlvdXNMaW5lTnVtYmVyID09PSBuZXh0LmxpbmVOdW1i
ZXIpICYmICgobmV4dC50eXBlID09PSB0b2tlbl8xLlRva2VuLktleXdvcmQpIHx8IChuZXh0LnZh
bHVlID09PSAnZnVuY3Rpb24nKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
bWF0Y2g7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VGdW5jdGlv
bkRlY2xhcmF0aW9uID0gZnVuY3Rpb24gKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7Ci0gICAgICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGlzQXN5
bmMgPSB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5jJyk7Ci0gICAgICAgICAgICBp
ZiAoaXNBc3luYykgewotICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7Ci0gICAg
ICAgICAgICB2YXIgaXNHZW5lcmF0b3IgPSBpc0FzeW5jID8gZmFsc2UgOiB0aGlzLm1hdGNoKCcq
Jyk7Ci0gICAgICAgICAgICBpZiAoaXNHZW5lcmF0b3IpIHsKLSAgICAgICAgICAgICAgICB0aGlz
Lm5leHRUb2tlbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1lc3NhZ2U7Ci0g
ICAgICAgICAgICB2YXIgaWQgPSBudWxsOwotICAgICAgICAgICAgdmFyIGZpcnN0UmVzdHJpY3Rl
ZCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8ICF0aGlz
Lm1hdGNoKCcoJykpIHsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVh
ZDsKLSAgICAgICAgICAgICAgICBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsK
LSAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRv
a2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZCh0b2tl
bi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRv
a2VuOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuU3RyaWN0RnVuY3Rpb25OYW1lOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQo
dG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQg
PSB0b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlc18xLk1l
c3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93
QXdhaXQgPSB0aGlzLmNvbnRleHQuYXdhaXQ7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxv
d1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRl
eHQuYXdhaXQgPSBpc0FzeW5jOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQg
PSAhaXNHZW5lcmF0b3I7Ci0gICAgICAgICAgICB2YXIgZm9ybWFsUGFyYW1ldGVycyA9IHRoaXMu
cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGZpcnN0UmVzdHJpY3RlZCk7Ci0gICAgICAgICAgICB2YXIg
cGFyYW1zID0gZm9ybWFsUGFyYW1ldGVycy5wYXJhbXM7Ci0gICAgICAgICAgICB2YXIgc3RyaWN0
ZWQgPSBmb3JtYWxQYXJhbWV0ZXJzLnN0cmljdGVkOwotICAgICAgICAgICAgZmlyc3RSZXN0cmlj
dGVkID0gZm9ybWFsUGFyYW1ldGVycy5maXJzdFJlc3RyaWN0ZWQ7Ci0gICAgICAgICAgICBpZiAo
Zm9ybWFsUGFyYW1ldGVycy5tZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGZv
cm1hbFBhcmFtZXRlcnMubWVzc2FnZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBw
cmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7Ci0gICAgICAgICAgICB2YXIgYm9k
eSA9IHRoaXMucGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5jb250ZXh0LnN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBzdHJp
Y3RlZCkgewotICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oc3Ry
aWN0ZWQsIG1lc3NhZ2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5jb250ZXh0
LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0
ID0gcHJldmlvdXNBbGxvd0F3YWl0OwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWll
bGQgPSBwcmV2aW91c0FsbG93WWllbGQ7Ci0gICAgICAgICAgICByZXR1cm4gaXNBc3luYyA/IHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uKGlkLCBw
YXJhbXMsIGJvZHkpKSA6Ci0gICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5GdW5jdGlvbkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIGJvZHksIGlzR2VuZXJhdG9yKSk7
Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VGdW5jdGlvbkV4cHJl
c3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRl
Tm9kZSgpOwotICAgICAgICAgICAgdmFyIGlzQXN5bmMgPSB0aGlzLm1hdGNoQ29udGV4dHVhbEtl
eXdvcmQoJ2FzeW5jJyk7Ci0gICAgICAgICAgICBpZiAoaXNBc3luYykgewotICAgICAgICAgICAg
ICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLmV4
cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7Ci0gICAgICAgICAgICB2YXIgaXNHZW5lcmF0b3IgPSBp
c0FzeW5jID8gZmFsc2UgOiB0aGlzLm1hdGNoKCcqJyk7Ci0gICAgICAgICAgICBpZiAoaXNHZW5l
cmF0b3IpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdmFyIG1lc3NhZ2U7Ci0gICAgICAgICAgICB2YXIgaWQgPSBudWxsOwot
ICAgICAgICAgICAgdmFyIGZpcnN0UmVzdHJpY3RlZDsKLSAgICAgICAgICAgIHZhciBwcmV2aW91
c0FsbG93QXdhaXQgPSB0aGlzLmNvbnRleHQuYXdhaXQ7Ci0gICAgICAgICAgICB2YXIgcHJldmlv
dXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7Ci0gICAgICAgICAgICB0aGlz
LmNvbnRleHQuYXdhaXQgPSBpc0FzeW5jOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93
WWllbGQgPSAhaXNHZW5lcmF0b3I7Ci0gICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJygnKSkg
ewotICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAg
ICAgICAgIGlkID0gKCF0aGlzLmNvbnRleHQuc3RyaWN0ICYmICFpc0dlbmVyYXRvciAmJiB0aGlz
Lm1hdGNoS2V5d29yZCgneWllbGQnKSkgPyB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKSA6IHRo
aXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5j
b250ZXh0LnN0cmljdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlz
UmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0
cmljdEZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlz
LnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2Nh
bm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHZhciBmb3JtYWxQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFt
ZXRlcnMoZmlyc3RSZXN0cmljdGVkKTsKLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBmb3JtYWxQ
YXJhbWV0ZXJzLnBhcmFtczsKLSAgICAgICAgICAgIHZhciBzdHJpY3RlZCA9IGZvcm1hbFBhcmFt
ZXRlcnMuc3RyaWN0ZWQ7Ci0gICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSBmb3JtYWxQYXJh
bWV0ZXJzLmZpcnN0UmVzdHJpY3RlZDsKLSAgICAgICAgICAgIGlmIChmb3JtYWxQYXJhbWV0ZXJz
Lm1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gZm9ybWFsUGFyYW1ldGVycy5t
ZXNzYWdlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0g
dGhpcy5jb250ZXh0LnN0cmljdDsKLSAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZUZ1
bmN0aW9uU291cmNlRWxlbWVudHMoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3Ry
aWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHN0cmljdGVkKSB7Ci0gICAgICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihzdHJpY3RlZCwgbWVzc2FnZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlv
dXNTdHJpY3Q7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSBwcmV2aW91c0FsbG93
QXdhaXQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxs
b3dZaWVsZDsKLSAgICAgICAgICAgIHJldHVybiBpc0FzeW5jID8gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5Bc3luY0Z1bmN0aW9uRXhwcmVzc2lvbihpZCwgcGFyYW1zLCBib2R5KSkgOgot
ICAgICAgICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHBy
ZXNzaW9uKGlkLCBwYXJhbXMsIGJvZHksIGlzR2VuZXJhdG9yKSk7Ci0gICAgICAgIH07Ci0gICAg
ICAgIC8vIEVDTUEtMjYyIDE0LjEuMSBEaXJlY3RpdmUgUHJvbG9ndWVzCi0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VEaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2
YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5j
cmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9u
KCk7Ci0gICAgICAgICAgICB2YXIgZGlyZWN0aXZlID0gKGV4cHIudHlwZSA9PT0gc3ludGF4XzEu
U3ludGF4LkxpdGVyYWwpID8gdGhpcy5nZXRUb2tlblJhdyh0b2tlbikuc2xpY2UoMSwgLTEpIDog
bnVsbDsKLSAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgZGlyZWN0aXZlID8gbmV3IE5vZGUuRGlyZWN0aXZl
KGV4cHIsIGRpcmVjdGl2ZSkgOiBuZXcgTm9kZS5FeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpKTsK
LSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZURpcmVjdGl2ZVByb2xv
Z3VlcyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBmaXJzdFJlc3RyaWN0ZWQgPSBu
dWxsOwotICAgICAgICAgICAgdmFyIGJvZHkgPSBbXTsKLSAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IHRva2VuXzEuVG9rZW4uU3RyaW5nTGl0ZXJhbCkg
ewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgdmFyIHN0YXRlbWVudCA9IHRoaXMucGFyc2VEaXJlY3RpdmUoKTsKLSAgICAgICAg
ICAgICAgICBib2R5LnB1c2goc3RhdGVtZW50KTsKLSAgICAgICAgICAgICAgICB2YXIgZGlyZWN0
aXZlID0gc3RhdGVtZW50LmRpcmVjdGl2ZTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRp
cmVjdGl2ZSAhPT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChkaXJlY3RpdmUgPT09ICd1c2Ugc3Ry
aWN0JykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQs
IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIGJvZHk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDE0LjMgTWV0
aG9kIERlZmluaXRpb25zCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucXVhbGlmaWVkUHJvcGVy
dHlOYW1lID0gZnVuY3Rpb24gKHRva2VuKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRva2VuLnR5
cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcjoKLSAg
ICAgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uU3RyaW5nTGl0ZXJhbDoKLSAgICAgICAg
ICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uQm9vbGVhbkxpdGVyYWw6Ci0gICAgICAgICAgICAg
ICAgY2FzZSB0b2tlbl8xLlRva2VuLk51bGxMaXRlcmFsOgotICAgICAgICAgICAgICAgIGNhc2Ug
dG9rZW5fMS5Ub2tlbi5OdW1lcmljTGl0ZXJhbDoKLSAgICAgICAgICAgICAgICBjYXNlIHRva2Vu
XzEuVG9rZW4uS2V5d29yZDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3I6Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0b2tlbi52YWx1ZSA9PT0gJ1snOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LnBhcnNlR2V0dGVyTWV0aG9kID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAg
ICAgICAgICB0aGlzLmV4cGVjdCgnKScpOwotICAgICAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0g
ZmFsc2U7Ci0gICAgICAgICAgICB2YXIgcGFyYW1zID0gewotICAgICAgICAgICAgICAgIHBhcmFt
czogW10sCi0gICAgICAgICAgICAgICAgc3RyaWN0ZWQ6IG51bGwsCi0gICAgICAgICAgICAgICAg
Zmlyc3RSZXN0cmljdGVkOiBudWxsLAotICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwKLSAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5j
b250ZXh0LmFsbG93WWllbGQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9
IGZhbHNlOwotICAgICAgICAgICAgdmFyIG1ldGhvZCA9IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhv
ZChwYXJhbXMpOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91
c0FsbG93WWllbGQ7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW1zLnBhcmFtcywgbWV0aG9kLCBpc0dl
bmVyYXRvcikpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU2V0
dGVyTWV0aG9kID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBvcHRpb25zID0gewotICAgICAgICAgICAgICAg
IHBhcmFtczogW10sCi0gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBudWxsLAotICAg
ICAgICAgICAgICAgIHBhcmFtU2V0OiB7fQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHZh
ciBpc0dlbmVyYXRvciA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVs
ZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFs
bG93WWllbGQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0
ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVyKG9w
dGlvbnMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKLSAg
ICAgICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2Qob3B0aW9ucyk7
Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVs
ZDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZ1bmN0
aW9uRXhwcmVzc2lvbihudWxsLCBvcHRpb25zLnBhcmFtcywgbWV0aG9kLCBpc0dlbmVyYXRvcikp
OwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlR2VuZXJhdG9yTWV0
aG9kID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKLSAgICAgICAgICAgIHZhciBpc0dlbmVyYXRvciA9IHRydWU7Ci0gICAgICAgICAgICB2
YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7Ci0gICAgICAg
ICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHRydWU7Ci0gICAgICAgICAgICB2YXIgcGFy
YW1zID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTsKLSAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5hbGxvd1lpZWxkID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gdGhpcy5w
YXJzZVByb3BlcnR5TWV0aG9kKHBhcmFtcyk7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxs
b3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLkZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLCBwYXJhbXMucGFy
YW1zLCBtZXRob2QsIGlzR2VuZXJhdG9yKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEt
MjYyIDE0LjQgR2VuZXJhdG9yIEZ1bmN0aW9uIERlZmluaXRpb25zCi0gICAgICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VZaWVsZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdGhpcy5leHBlY3RL
ZXl3b3JkKCd5aWVsZCcpOwotICAgICAgICAgICAgdmFyIGFyZ3VtZW50ID0gbnVsbDsKLSAgICAg
ICAgICAgIHZhciBkZWxlZ2F0ZSA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0xp
bmVUZXJtaW5hdG9yKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9
IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5h
bGxvd1lpZWxkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZGVsZWdhdGUgPSB0aGlzLm1hdGNo
KCcqJyk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlbGVnYXRlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gdGhp
cy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJzsn
KSAmJiAhdGhpcy5tYXRjaCgnfScpICYmICF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5sb29rYWhl
YWQudHlwZSAhPT0gdG9rZW5fMS5Ub2tlbi5FT0YpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3VtZW50ID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250
ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5ZaWVsZEV4cHJlc3Np
b24oYXJndW1lbnQsIGRlbGVnYXRlKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYy
IDE0LjUgQ2xhc3MgRGVmaW5pdGlvbnMKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNs
YXNzRWxlbWVudCA9IGZ1bmN0aW9uIChoYXNDb25zdHJ1Y3RvcikgewotICAgICAgICAgICAgdmFy
IHRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3Jl
YXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGtpbmQgPSAnJzsKLSAgICAgICAgICAgIHZhciBr
ZXkgPSBudWxsOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gbnVsbDsKLSAgICAgICAgICAgIHZh
ciBjb21wdXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGZhbHNlOwotICAg
ICAgICAgICAgdmFyIGlzU3RhdGljID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgaXNBc3luYyA9
IGZhbHNlOwotICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyonKSkgewotICAgICAgICAgICAg
ICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKLSAgICAgICAgICAg
ICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgICAg
ICB2YXIgaWQgPSBrZXk7Ci0gICAgICAgICAgICAgICAgaWYgKGlkLm5hbWUgPT09ICdzdGF0aWMn
ICYmICh0aGlzLnF1YWxpZmllZFByb3BlcnR5TmFtZSh0aGlzLmxvb2thaGVhZCkgfHwgdGhpcy5t
YXRjaCgnKicpKSkgewotICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubG9va2FoZWFk
OwotICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYyA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5tYXRjaCgnKicpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKCh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpICYmICF0
aGlzLmhhc0xpbmVUZXJtaW5hdG9yICYmICh0b2tlbi52YWx1ZSA9PT0gJ2FzeW5jJykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHB1bmN0dWF0b3IgPSB0aGlzLmxvb2thaGVhZC52YWx1ZTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHB1bmN0dWF0b3IgIT09ICc6JyAmJiBwdW5jdHVhdG9y
ICE9PSAnKCcgJiYgcHVuY3R1YXRvciAhPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpc0FzeW5jID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5s
b29rYWhlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0
UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09
PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnIHx8IHRva2VuLnZhbHVlID09PSAnc2V0Jykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRv
a2VuKHRva2VuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICdjb25zdHJ1Y3RvcicpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRU
b2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5Db25zdHJ1Y3RvcklzQXN5bmMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHZhciBsb29rYWhlYWRQcm9wZXJ0eUtleSA9IHRoaXMucXVhbGlmaWVkUHJvcGVy
dHlOYW1lKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSB0
b2tlbl8xLlRva2VuLklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFs
dWUgPT09ICdnZXQnICYmIGxvb2thaGVhZFByb3BlcnR5S2V5KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGtpbmQgPSAnZ2V0JzsKLSAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1h
dGNoKCdbJyk7Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQcm9w
ZXJ0eUtleSgpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VHZXR0ZXJNZXRo
b2QoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4u
dmFsdWUgPT09ICdzZXQnICYmIGxvb2thaGVhZFByb3BlcnR5S2V5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGtpbmQgPSAnc2V0JzsKLSAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlz
Lm1hdGNoKCdbJyk7Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQ
cm9wZXJ0eUtleSgpOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VTZXR0
ZXJNZXRob2QoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IgJiYgdG9r
ZW4udmFsdWUgPT09ICcqJyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkgewotICAgICAgICAgICAg
ICAgIGtpbmQgPSAnaW5pdCc7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNo
KCdbJyk7Ci0gICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5
KCk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlR2VuZXJhdG9yTWV0aG9kKCk7
Ci0gICAgICAgICAgICAgICAgbWV0aG9kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmICgha2luZCAmJiBrZXkgJiYgdGhpcy5tYXRjaCgnKCcpKSB7Ci0gICAgICAgICAgICAg
ICAga2luZCA9ICdpbml0JzsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGlzQXN5bmMgPyB0aGlz
LnBhcnNlUHJvcGVydHlNZXRob2RBc3luY0Z1bmN0aW9uKCkgOiB0aGlzLnBhcnNlUHJvcGVydHlN
ZXRob2RGdW5jdGlvbigpOwotICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoIWtpbmQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRo
cm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChraW5kID09PSAnaW5pdCcpIHsKLSAgICAgICAgICAgICAgICBraW5kID0gJ21l
dGhvZCc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWNvbXB1dGVkKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzU3RhdGljICYmIHRoaXMuaXNQcm9wZXJ0eUtleShrZXksICdwcm90
b3R5cGUnKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0YXRpY1Byb3RvdHlwZSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghaXNTdGF0aWMgJiYgdGhpcy5pc1Byb3BlcnR5
S2V5KGtleSwgJ2NvbnN0cnVjdG9yJykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQg
IT09ICdtZXRob2QnIHx8ICFtZXRob2QgfHwgKHZhbHVlICYmIHZhbHVlLmdlbmVyYXRvcikpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4s
IG1lc3NhZ2VzXzEuTWVzc2FnZXMuQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ29uc3RydWN0b3IudmFs
dWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4o
dG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuRHVwbGljYXRlQ29uc3RydWN0b3IpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaGFzQ29uc3RydWN0b3IudmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGtpbmQgPSAnY29uc3RydWN0b3InOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLk1ldGhvZERlZmluaXRpb24oa2V5LCBjb21wdXRlZCwgdmFsdWUs
IGtpbmQsIGlzU3RhdGljKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VDbGFzc0VsZW1lbnRMaXN0ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGJv
ZHkgPSBbXTsKLSAgICAgICAgICAgIHZhciBoYXNDb25zdHJ1Y3RvciA9IHsgdmFsdWU6IGZhbHNl
IH07Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgneycpOwotICAgICAgICAgICAgd2hpbGUgKCF0
aGlzLm1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnOycpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBib2R5LnB1c2go
dGhpcy5wYXJzZUNsYXNzRWxlbWVudChoYXNDb25zdHJ1Y3RvcikpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7Ci0gICAgICAg
ICAgICByZXR1cm4gYm9keTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZUNsYXNzQm9keSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhp
cy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudExpc3QgPSB0aGlzLnBhcnNl
Q2xhc3NFbGVtZW50TGlzdCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuQ2xhc3NCb2R5KGVsZW1lbnRMaXN0KSk7Ci0gICAgICAgIH07Ci0gICAgICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFzc0RlY2xhcmF0aW9uID0gZnVuY3Rpb24gKGlkZW50
aWZpZXJJc09wdGlvbmFsKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9k
ZSgpOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0LnN0cmlj
dDsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlOwotICAgICAgICAgICAg
dGhpcy5leHBlY3RLZXl3b3JkKCdjbGFzcycpOwotICAgICAgICAgICAgdmFyIGlkID0gKGlkZW50
aWZpZXJJc09wdGlvbmFsICYmICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSB0b2tlbl8xLlRva2Vu
LklkZW50aWZpZXIpKSA/IG51bGwgOiB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0g
ICAgICAgICAgICB2YXIgc3VwZXJDbGFzcyA9IG51bGw7Ci0gICAgICAgICAgICBpZiAodGhpcy5t
YXRjaEtleXdvcmQoJ2V4dGVuZHMnKSkgewotICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2Vu
KCk7Ci0gICAgICAgICAgICAgICAgc3VwZXJDbGFzcyA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1h
cih0aGlzLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB2YXIgY2xhc3NCb2R5ID0gdGhpcy5wYXJzZUNsYXNzQm9keSgpOwot
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ2xhc3NEZWNsYXJhdGlv
bihpZCwgc3VwZXJDbGFzcywgY2xhc3NCb2R5KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VDbGFzc0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIHByZXZp
b3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0LnN0cmljdDsKLSAgICAgICAgICAgIHRoaXMuY29udGV4
dC5zdHJpY3QgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdjbGFzcycp
OwotICAgICAgICAgICAgdmFyIGlkID0gKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEu
VG9rZW4uSWRlbnRpZmllcikgPyB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkgOiBudWxs
OwotICAgICAgICAgICAgdmFyIHN1cGVyQ2xhc3MgPSBudWxsOwotICAgICAgICAgICAgaWYgKHRo
aXMubWF0Y2hLZXl3b3JkKCdleHRlbmRzJykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRU
b2tlbigpOwotICAgICAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSB0aGlzLmlzb2xhdGVDb3Zlckdy
YW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdmFyIGNsYXNzQm9keSA9IHRoaXMucGFyc2VDbGFzc0JvZHko
KTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzRXhwcmVz
c2lvbihpZCwgc3VwZXJDbGFzcywgY2xhc3NCb2R5KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8v
IEVDTUEtMjYyIDE1LjEgU2NyaXB0cwotICAgICAgICAvLyBFQ01BLTI2MiAxNS4yIE1vZHVsZXMK
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU1vZHVsZSA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmlzTW9kdWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVh
dGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgYm9keSA9IHRoaXMucGFyc2VEaXJlY3RpdmVQcm9s
b2d1ZXMoKTsKLSAgICAgICAgICAgIHdoaWxlICh0aGlzLnN0YXJ0TWFya2VyLmluZGV4IDwgdGhp
cy5zY2FubmVyLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIGJvZHkucHVzaCh0aGlzLnBhcnNl
U3RhdGVtZW50TGlzdEl0ZW0oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Nb2R1bGUoYm9keSkpOwotICAgICAgICB9Owot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU2NyaXB0ID0gZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBi
b2R5ID0gdGhpcy5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpOwotICAgICAgICAgICAgd2hpbGUg
KHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPCB0aGlzLnNjYW5uZXIubGVuZ3RoKSB7Ci0gICAgICAg
ICAgICAgICAgYm9keS5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LlNjcmlwdChib2R5KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDE1LjIuMiBJ
bXBvcnRzCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VNb2R1bGVTcGVjaWZpZXIgPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwot
ICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IHRva2VuXzEuVG9rZW4uU3Ry
aW5nTGl0ZXJhbCkgewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18x
Lk1lc3NhZ2VzLkludmFsaWRNb2R1bGVTcGVjaWZpZXIpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIHZhciByYXcg
PSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFsdWUsIHJhdykpOwotICAgICAgICB9
OwotICAgICAgICAvLyBpbXBvcnQgezxmb28gYXMgYmFyPn0gLi4uOwotICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlSW1wb3J0U3BlY2lmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBpbXBvcnRl
ZDsKLSAgICAgICAgICAgIHZhciBsb2NhbDsKLSAgICAgICAgICAgIGlmICh0aGlzLmxvb2thaGVh
ZC50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgICAgICBp
bXBvcnRlZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAg
ICBsb2NhbCA9IGltcG9ydGVkOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoQ29udGV4
dHVhbEtleXdvcmQoJ2FzJykpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4o
KTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlm
aWVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgaW1wb3J0ZWQgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUo
KTsKLSAgICAgICAgICAgICAgICBsb2NhbCA9IGltcG9ydGVkOwotICAgICAgICAgICAgICAgIGlm
ICh0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwgPSB0aGlzLnBh
cnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KHRoaXMubmV4dFRva2VuKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkltcG9ydFNwZWNp
Zmllcihsb2NhbCwgaW1wb3J0ZWQpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8ge2ZvbywgYmFy
IGFzIGJhc30KLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5hbWVkSW1wb3J0cyA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7Ci0gICAgICAgICAgICB2
YXIgc3BlY2lmaWVycyA9IFtdOwotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9Jykp
IHsKLSAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2godGhpcy5wYXJzZUltcG9ydFNwZWNp
ZmllcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJ30nKSkgewotICAgICAg
ICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7Ci0gICAgICAgICAgICByZXR1
cm4gc3BlY2lmaWVyczsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaW1wb3J0IDxmb28+IC4uLjsK
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXIgPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwot
ICAgICAgICAgICAgdmFyIGxvY2FsID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JbXBvcnREZWZhdWx0
U3BlY2lmaWVyKGxvY2FsKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGltcG9ydCA8KiBhcyBm
b28+IC4uLjsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydE5hbWVzcGFjZVNw
ZWNpZmllciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVh
dGVOb2RlKCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgnKicpOwotICAgICAgICAgICAgaWYg
KCF0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5Ob0FzQWZ0ZXJJbXBvcnROYW1lc3Bh
Y2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAg
ICAgICAgIHZhciBsb2NhbCA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOwotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSW1wb3J0TmFtZXNwYWNlU3Bl
Y2lmaWVyKGxvY2FsKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFy
c2VJbXBvcnREZWNsYXJhdGlvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlmICh0aGlz
LmNvbnRleHQuaW5GdW5jdGlvbkJvZHkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJy
b3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAg
ICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnaW1wb3J0Jyk7Ci0gICAgICAgICAgICB2YXIgc3Jj
OwotICAgICAgICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXTsKLSAgICAgICAgICAgIGlmICh0aGlz
Lmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRva2VuLlN0cmluZ0xpdGVyYWwpIHsKLSAgICAg
ICAgICAgICAgICAvLyBpbXBvcnQgJ2Zvbyc7Ci0gICAgICAgICAgICAgICAgc3JjID0gdGhpcy5w
YXJzZU1vZHVsZVNwZWNpZmllcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJ3snKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBpbXBvcnQge2Jhcn0KLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVycyA9IHNw
ZWNpZmllcnMuY29uY2F0KHRoaXMucGFyc2VOYW1lZEltcG9ydHMoKSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJyonKSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBpbXBvcnQgKiBhcyBmb28KLSAgICAgICAgICAgICAgICAgICAgc3Bl
Y2lmaWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNJZGVudGlmaWVy
TmFtZSh0aGlzLmxvb2thaGVhZCkgJiYgIXRoaXMubWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gaW1wb3J0IGZvbwotICAgICAgICAgICAgICAgICAgICBz
cGVjaWZpZXJzLnB1c2godGhpcy5wYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhp
cy5tYXRjaCgnKicpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1wb3J0IGZv
bywgKiBhcyBmb28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2go
dGhpcy5wYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJ3sn
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydCBmb28sIHtiYXJ9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0
KHRoaXMucGFyc2VOYW1lZEltcG9ydHMoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20nKSkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMubG9va2FoZWFkLnZhbHVlID8g
bWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBtZXNzYWdlc18xLk1lc3NhZ2Vz
Lk1pc3NpbmdGcm9tQ2xhdXNlOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3Io
bWVzc2FnZSwgdGhpcy5sb29rYWhlYWQudmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIHNyYyA9IHRoaXMu
cGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMu
Y29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuSW1wb3J0RGVjbGFyYXRpb24oc3BlY2lmaWVycywgc3JjKSk7Ci0gICAgICAg
IH07Ci0gICAgICAgIC8vIEVDTUEtMjYyIDE1LjIuMyBFeHBvcnRzCi0gICAgICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VFeHBvcnRTcGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGxvY2FsID0g
dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7Ci0gICAgICAgICAgICB2YXIgZXhwb3J0ZWQgPSBs
b2NhbDsKLSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzJykp
IHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIGV4
cG9ydGVkID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnRTcGVjaWZp
ZXIobG9jYWwsIGV4cG9ydGVkKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VFeHBvcnREZWNsYXJhdGlvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlm
ICh0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRo
cm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
LSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZXhwb3J0Jyk7Ci0gICAgICAgICAgICB2
YXIgZXhwb3J0RGVjbGFyYXRpb247Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQo
J2RlZmF1bHQnKSkgewotICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IC4uLgotICAg
ICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGV4cG9y
dCBkZWZhdWx0IGZ1bmN0aW9uIGZvbyAoKSB7fQotICAgICAgICAgICAgICAgICAgICAvLyBleHBv
cnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7fQotICAgICAgICAgICAgICAgICAgICB2YXIgZGVjbGFy
YXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbih0cnVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnY2xhc3MnKSkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBmb28ge30KLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUNsYXNzRGVjbGFy
YXRpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhp
cy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFy
YXRpb24pKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20nKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVz
c2FnZXMuVW5leHBlY3RlZFRva2VuLCB0aGlzLmxvb2thaGVhZC52YWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQge307Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IFtdOwotICAgICAgICAgICAgICAg
ICAgICAvLyBleHBvcnQgZGVmYXVsdCAoMSArIDIpOwotICAgICAgICAgICAgICAgICAgICB2YXIg
ZGVjbGFyYXRpb24gPSB0aGlzLm1hdGNoKCd7JykgPyB0aGlzLnBhcnNlT2JqZWN0SW5pdGlhbGl6
ZXIoKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKCdbJykgPyB0aGlzLnBh
cnNlQXJyYXlJbml0aWFsaXplcigpIDogdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICAg
ICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnKicp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gZXhwb3J0ICogZnJvbSAnZm9vJzsKLSAgICAgICAgICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaENv
bnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3Nh
Z2UgPSB0aGlzLmxvb2thaGVhZC52YWx1ZSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3Rl
ZFRva2VuIDogbWVzc2FnZXNfMS5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2UsIHRoaXMubG9va2FoZWFkLnZhbHVl
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsK
LSAgICAgICAgICAgICAgICB2YXIgc3JjID0gdGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpOwot
ICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAgICAg
IGV4cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnRB
bGxEZWNsYXJhdGlvbihzcmMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYg
KHRoaXMubG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uS2V5d29yZCkgewotICAgICAg
ICAgICAgICAgIC8vIGV4cG9ydCB2YXIgZiA9IDE7Ci0gICAgICAgICAgICAgICAgdmFyIGRlY2xh
cmF0aW9uID0gdm9pZCAwOwotICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQu
dmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGV0JzoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnY29uc3QnOgotICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24g
PSB0aGlzLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKHsgaW5Gb3I6IGZhbHNlIH0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Zhcic6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnZnVuY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSB0
aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5FeHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBbXSwg
bnVsbCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaEFz
eW5jRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMu
cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFy
YXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydE5hbWVkRGVjbGFyYXRp
b24oZGVjbGFyYXRpb24sIFtdLCBudWxsKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgc3BlY2lmaWVycyA9IFtdOwotICAgICAgICAgICAg
ICAgIHZhciBzb3VyY2UgPSBudWxsOwotICAgICAgICAgICAgICAgIHZhciBpc0V4cG9ydEZyb21J
ZGVudGlmaWVyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKLSAg
ICAgICAgICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAg
ICAgICBpc0V4cG9ydEZyb21JZGVudGlmaWVyID0gaXNFeHBvcnRGcm9tSWRlbnRpZmllciB8fCB0
aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpOwotICAgICAgICAgICAgICAgICAgICBzcGVjaWZp
ZXJzLnB1c2godGhpcy5wYXJzZUV4cG9ydFNwZWNpZmllcigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCF0aGlzLm1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCcsJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJ30nKTsKLSAgICAgICAgICAgICAgICBpZiAodGhp
cy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gZXhwb3J0IHtkZWZhdWx0fSBmcm9tICdmb28nOwotICAgICAgICAgICAgICAgICAgICAvLyBl
eHBvcnQge2Zvb30gZnJvbSAnZm9vJzsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9r
ZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlID0gdGhpcy5wYXJzZU1vZHVsZVNwZWNp
ZmllcigpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNFeHBvcnRGcm9tSWRl
bnRpZmllcikgewotICAgICAgICAgICAgICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9OyAvLyBt
aXNzaW5nIGZyb21DbGF1c2UKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlz
Lmxvb2thaGVhZC52YWx1ZSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDog
bWVzc2FnZXNfMS5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2UsIHRoaXMubG9va2FoZWFkLnZhbHVlKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIGV4cG9ydCB7Zm9vfTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNv
bG9uKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0
aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnROYW1lZERlY2xhcmF0aW9u
KG51bGwsIHNwZWNpZmllcnMsIHNvdXJjZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIGV4cG9ydERlY2xhcmF0aW9uOwotICAgICAgICB9OwotICAgICAgICByZXR1cm4gUGFy
c2VyOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5QYXJzZXIgPSBQYXJzZXI7Ci0KLQotLyoqKi8g
fSwKLS8qIDQgKi8KLS8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewotCi0gICAgLy8g
RW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIHRocm93IGFuIGVycm9yLgot
ICAgIC8vIFRoaXMgaXMgb25seSB0byBoYXZlIGEgYmV0dGVyIGNvbnRyYWN0IHNlbWFudGljLCBp
LmUuIGFub3RoZXIgc2FmZXR5IG5ldAotICAgIC8vIHRvIGNhdGNoIGEgbG9naWMgZXJyb3IuIFRo
ZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmlsbGVkIGluIG5vcm1hbCBjYXNlLgotICAgIC8vIERv
IE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBjb25kaXRpb24gb24gYW55IHVzZXIg
aW5wdXQuCi0gICAgInVzZSBzdHJpY3QiOwotICAgIGZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24s
IG1lc3NhZ2UpIHsKLSAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovCi0gICAgICAgIGlm
ICghY29uZGl0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FTU0VSVDogJyAr
IG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGV4cG9ydHMuYXNzZXJ0ID0gYXNzZXJ0
OwotCi0KLS8qKiovIH0sCi0vKiA1ICovCi0vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMp
IHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAvLyBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUg
aWRlbnRpY2FsIHRvIFY4LgotICAgIGV4cG9ydHMuTWVzc2FnZXMgPSB7Ci0gICAgICAgIFVuZXhw
ZWN0ZWRUb2tlbjogJ1VuZXhwZWN0ZWQgdG9rZW4gJTAnLAotICAgICAgICBVbmV4cGVjdGVkVG9r
ZW5JbGxlZ2FsOiAnVW5leHBlY3RlZCB0b2tlbiBJTExFR0FMJywKLSAgICAgICAgVW5leHBlY3Rl
ZE51bWJlcjogJ1VuZXhwZWN0ZWQgbnVtYmVyJywKLSAgICAgICAgVW5leHBlY3RlZFN0cmluZzog
J1VuZXhwZWN0ZWQgc3RyaW5nJywKLSAgICAgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICdVbmV4
cGVjdGVkIGlkZW50aWZpZXInLAotICAgICAgICBVbmV4cGVjdGVkUmVzZXJ2ZWQ6ICdVbmV4cGVj
dGVkIHJlc2VydmVkIHdvcmQnLAotICAgICAgICBVbmV4cGVjdGVkVGVtcGxhdGU6ICdVbmV4cGVj
dGVkIHF1YXNpICUwJywKLSAgICAgICAgVW5leHBlY3RlZEVPUzogJ1VuZXhwZWN0ZWQgZW5kIG9m
IGlucHV0JywKLSAgICAgICAgTmV3bGluZUFmdGVyVGhyb3c6ICdJbGxlZ2FsIG5ld2xpbmUgYWZ0
ZXIgdGhyb3cnLAotICAgICAgICBJbnZhbGlkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJl
c3Npb24nLAotICAgICAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6ICdJbnZhbGlkIHJlZ3VsYXIgZXhw
cmVzc2lvbjogbWlzc2luZyAvJywKLSAgICAgICAgSW52YWxpZExIU0luQXNzaWdubWVudDogJ0lu
dmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gYXNzaWdubWVudCcsCi0gICAgICAgIEludmFsaWRMSFNJ
bkZvckluOiAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItaW4nLAotICAgICAgICBJbnZh
bGlkTEhTSW5Gb3JMb29wOiAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItbG9vcCcsCi0g
ICAgICAgIE11bHRpcGxlRGVmYXVsdHNJblN3aXRjaDogJ01vcmUgdGhhbiBvbmUgZGVmYXVsdCBj
bGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudCcsCi0gICAgICAgIE5vQ2F0Y2hPckZpbmFsbHk6ICdN
aXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkgYWZ0ZXIgdHJ5JywKLSAgICAgICAgVW5rbm93bkxhYmVs
OiAnVW5kZWZpbmVkIGxhYmVsIFwnJTBcJycsCi0gICAgICAgIFJlZGVjbGFyYXRpb246ICclMCBc
JyUxXCcgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZCcsCi0gICAgICAgIElsbGVnYWxDb250aW51
ZTogJ0lsbGVnYWwgY29udGludWUgc3RhdGVtZW50JywKLSAgICAgICAgSWxsZWdhbEJyZWFrOiAn
SWxsZWdhbCBicmVhayBzdGF0ZW1lbnQnLAotICAgICAgICBJbGxlZ2FsUmV0dXJuOiAnSWxsZWdh
bCByZXR1cm4gc3RhdGVtZW50JywKLSAgICAgICAgU3RyaWN0TW9kZVdpdGg6ICdTdHJpY3QgbW9k
ZSBjb2RlIG1heSBub3QgaW5jbHVkZSBhIHdpdGggc3RhdGVtZW50JywKLSAgICAgICAgU3RyaWN0
Q2F0Y2hWYXJpYWJsZTogJ0NhdGNoIHZhcmlhYmxlIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVu
dHMgaW4gc3RyaWN0IG1vZGUnLAotICAgICAgICBTdHJpY3RWYXJOYW1lOiAnVmFyaWFibGUgbmFt
ZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywKLSAgICAgICAg
U3RyaWN0UGFyYW1OYW1lOiAnUGFyYW1ldGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90
IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUnLAotICAgICAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJp
Y3QgbW9kZSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycs
Ci0gICAgICAgIFN0cmljdEZ1bmN0aW9uTmFtZTogJ0Z1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBl
dmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsCi0gICAgICAgIFN0cmljdE9jdGFsTGl0
ZXJhbDogJ09jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZS4nLAot
ICAgICAgICBTdHJpY3REZWxldGU6ICdEZWxldGUgb2YgYW4gdW5xdWFsaWZpZWQgaWRlbnRpZmll
ciBpbiBzdHJpY3QgbW9kZS4nLAotICAgICAgICBTdHJpY3RMSFNBc3NpZ25tZW50OiAnQXNzaWdu
bWVudCB0byBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScs
Ci0gICAgICAgIFN0cmljdExIU1Bvc3RmaXg6ICdQb3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQg
bWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAot
ICAgICAgICBTdHJpY3RMSFNQcmVmaXg6ICdQcmVmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkg
bm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZScsCi0gICAg
ICAgIFN0cmljdFJlc2VydmVkV29yZDogJ1VzZSBvZiBmdXR1cmUgcmVzZXJ2ZWQgd29yZCBpbiBz
dHJpY3QgbW9kZScsCi0gICAgICAgIFRlbXBsYXRlT2N0YWxMaXRlcmFsOiAnT2N0YWwgbGl0ZXJh
bHMgYXJlIG5vdCBhbGxvd2VkIGluIHRlbXBsYXRlIHN0cmluZ3MuJywKLSAgICAgICAgUGFyYW1l
dGVyQWZ0ZXJSZXN0UGFyYW1ldGVyOiAnUmVzdCBwYXJhbWV0ZXIgbXVzdCBiZSBsYXN0IGZvcm1h
bCBwYXJhbWV0ZXInLAotICAgICAgICBEZWZhdWx0UmVzdFBhcmFtZXRlcjogJ1VuZXhwZWN0ZWQg
dG9rZW4gPScsCi0gICAgICAgIE9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0ZXI6ICdVbmV4cGVj
dGVkIHRva2VuIHsnLAotICAgICAgICBEdXBsaWNhdGVQcm90b1Byb3BlcnR5OiAnRHVwbGljYXRl
IF9fcHJvdG9fXyBmaWVsZHMgYXJlIG5vdCBhbGxvd2VkIGluIG9iamVjdCBsaXRlcmFscycsCi0g
ICAgICAgIENvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZDogJ0NsYXNzIGNvbnN0cnVjdG9yIG1heSBu
b3QgYmUgYW4gYWNjZXNzb3InLAotICAgICAgICBEdXBsaWNhdGVDb25zdHJ1Y3RvcjogJ0EgY2xh
c3MgbWF5IG9ubHkgaGF2ZSBvbmUgY29uc3RydWN0b3InLAotICAgICAgICBTdGF0aWNQcm90b3R5
cGU6ICdDbGFzc2VzIG1heSBub3QgaGF2ZSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJvdG90eXBl
JywKLSAgICAgICAgTWlzc2luZ0Zyb21DbGF1c2U6ICdVbmV4cGVjdGVkIHRva2VuJywKLSAgICAg
ICAgTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlOiAnVW5leHBlY3RlZCB0b2tlbicsCi0gICAgICAg
IEludmFsaWRNb2R1bGVTcGVjaWZpZXI6ICdVbmV4cGVjdGVkIHRva2VuJywKLSAgICAgICAgSWxs
ZWdhbEltcG9ydERlY2xhcmF0aW9uOiAnVW5leHBlY3RlZCB0b2tlbicsCi0gICAgICAgIElsbGVn
YWxFeHBvcnREZWNsYXJhdGlvbjogJ1VuZXhwZWN0ZWQgdG9rZW4nLAotICAgICAgICBEdXBsaWNh
dGVCaW5kaW5nOiAnRHVwbGljYXRlIGJpbmRpbmcgJTAnLAotICAgICAgICBEZWNsYXJhdGlvbk1p
c3NpbmdJbml0aWFsaXplcjogJ01pc3NpbmcgaW5pdGlhbGl6ZXIgaW4gJTAgZGVjbGFyYXRpb24n
LAotICAgICAgICBMZXRJbkxleGljYWxCaW5kaW5nOiAnbGV0IGlzIGRpc2FsbG93ZWQgYXMgYSBs
ZXhpY2FsbHkgYm91bmQgbmFtZScsCi0gICAgICAgIEZvckluT2ZMb29wSW5pdGlhbGl6ZXI6ICcl
MCBsb29wIHZhcmlhYmxlIGRlY2xhcmF0aW9uIG1heSBub3QgaGF2ZSBhbiBpbml0aWFsaXplcics
Ci0gICAgICAgIENvbnN0cnVjdG9ySXNBc3luYzogJ0NsYXNzIGNvbnN0cnVjdG9yIG1heSBub3Qg
YmUgYW4gYXN5bmMgbWV0aG9kJwotICAgIH07Ci0KLQotLyoqKi8gfSwKLS8qIDYgKi8KLS8qKiov
IGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewotCi0gICAgInVzZSBzdHJpY3QiOwotICAgIHZh
ciBFcnJvckhhbmRsZXIgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBFcnJvckhh
bmRsZXIoKSB7Ci0gICAgICAgICAgICB0aGlzLmVycm9ycyA9IFtdOwotICAgICAgICAgICAgdGhp
cy50b2xlcmFudCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIDsKLSAgICAgICAgRXJyb3JI
YW5kbGVyLnByb3RvdHlwZS5yZWNvcmRFcnJvciA9IGZ1bmN0aW9uIChlcnJvcikgewotICAgICAg
ICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7Ci0gICAgICAgIH07Ci0gICAgICAgIDsKLSAg
ICAgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS50b2xlcmF0ZSA9IGZ1bmN0aW9uIChlcnJvcikg
ewotICAgICAgICAgICAgaWYgKHRoaXMudG9sZXJhbnQpIHsKLSAgICAgICAgICAgICAgICB0aGlz
LnJlY29yZEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIHRocm93IGVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICB9Owot
ICAgICAgICA7Ci0gICAgICAgIEVycm9ySGFuZGxlci5wcm90b3R5cGUuY29uc3RydWN0RXJyb3Ig
PSBmdW5jdGlvbiAobXNnLCBjb2x1bW4pIHsKLSAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBF
cnJvcihtc2cpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB0aHJvdyBlcnJv
cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChiYXNlKSB7Ci0gICAgICAgICAg
ICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8KLSAgICAgICAgICAgICAgICBpZiAoT2Jq
ZWN0LmNyZWF0ZSAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZXJyb3IgPSBPYmplY3QuY3JlYXRlKGJhc2UpOwotICAgICAgICAgICAgICAgICAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdjb2x1bW4nLCB7IHZhbHVlOiBjb2x1bW4gfSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KLSAgICAgICAgICAgIHJldHVybiBlcnJvcjsKLSAg
ICAgICAgfTsKLSAgICAgICAgOwotICAgICAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLmNyZWF0
ZUVycm9yID0gZnVuY3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7Ci0gICAg
ICAgICAgICB2YXIgbXNnID0gJ0xpbmUgJyArIGxpbmUgKyAnOiAnICsgZGVzY3JpcHRpb247Ci0g
ICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLmNvbnN0cnVjdEVycm9yKG1zZywgY29sKTsKLSAg
ICAgICAgICAgIGVycm9yLmluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICBlcnJvci5saW5lTnVt
YmVyID0gbGluZTsKLSAgICAgICAgICAgIGVycm9yLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgIH07Ci0gICAgICAgIDsKLSAgICAg
ICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS50aHJvd0Vycm9yID0gZnVuY3Rpb24gKGluZGV4LCBs
aW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVy
cm9yKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKTsKLSAgICAgICAgfTsKLSAgICAgICAg
OwotICAgICAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLnRvbGVyYXRlRXJyb3IgPSBmdW5jdGlv
biAoaW5kZXgsIGxpbmUsIGNvbCwgZGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIHZhciBlcnJv
ciA9IHRoaXMuY3JlYXRlRXJyb3IoaW5kZXgsIGxpbmUsIGNvbCwgZGVzY3JpcHRpb24pOwotICAg
ICAgICAgICAgaWYgKHRoaXMudG9sZXJhbnQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJlY29y
ZEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIHRocm93IGVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAg
ICA7Ci0gICAgICAgIHJldHVybiBFcnJvckhhbmRsZXI7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRz
LkVycm9ySGFuZGxlciA9IEVycm9ySGFuZGxlcjsKLQotCi0vKioqLyB9LAotLyogNyAqLwotLyoq
Ki8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0gICAg
KGZ1bmN0aW9uIChUb2tlbikgewotICAgICAgICBUb2tlbltUb2tlblsiQm9vbGVhbkxpdGVyYWwi
XSA9IDFdID0gIkJvb2xlYW5MaXRlcmFsIjsKLSAgICAgICAgVG9rZW5bVG9rZW5bIkVPRiJdID0g
Ml0gPSAiRU9GIjsKLSAgICAgICAgVG9rZW5bVG9rZW5bIklkZW50aWZpZXIiXSA9IDNdID0gIklk
ZW50aWZpZXIiOwotICAgICAgICBUb2tlbltUb2tlblsiS2V5d29yZCJdID0gNF0gPSAiS2V5d29y
ZCI7Ci0gICAgICAgIFRva2VuW1Rva2VuWyJOdWxsTGl0ZXJhbCJdID0gNV0gPSAiTnVsbExpdGVy
YWwiOwotICAgICAgICBUb2tlbltUb2tlblsiTnVtZXJpY0xpdGVyYWwiXSA9IDZdID0gIk51bWVy
aWNMaXRlcmFsIjsKLSAgICAgICAgVG9rZW5bVG9rZW5bIlB1bmN0dWF0b3IiXSA9IDddID0gIlB1
bmN0dWF0b3IiOwotICAgICAgICBUb2tlbltUb2tlblsiU3RyaW5nTGl0ZXJhbCJdID0gOF0gPSAi
U3RyaW5nTGl0ZXJhbCI7Ci0gICAgICAgIFRva2VuW1Rva2VuWyJSZWd1bGFyRXhwcmVzc2lvbiJd
ID0gOV0gPSAiUmVndWxhckV4cHJlc3Npb24iOwotICAgICAgICBUb2tlbltUb2tlblsiVGVtcGxh
dGUiXSA9IDEwXSA9ICJUZW1wbGF0ZSI7Ci0gICAgfSkoZXhwb3J0cy5Ub2tlbiB8fCAoZXhwb3J0
cy5Ub2tlbiA9IHt9KSk7Ci0gICAgdmFyIFRva2VuID0gZXhwb3J0cy5Ub2tlbjsKLSAgICA7Ci0g
ICAgZXhwb3J0cy5Ub2tlbk5hbWUgPSB7fTsKLSAgICBleHBvcnRzLlRva2VuTmFtZVtUb2tlbi5C
b29sZWFuTGl0ZXJhbF0gPSAnQm9vbGVhbic7Ci0gICAgZXhwb3J0cy5Ub2tlbk5hbWVbVG9rZW4u
RU9GXSA9ICc8ZW5kPic7Ci0gICAgZXhwb3J0cy5Ub2tlbk5hbWVbVG9rZW4uSWRlbnRpZmllcl0g
PSAnSWRlbnRpZmllcic7Ci0gICAgZXhwb3J0cy5Ub2tlbk5hbWVbVG9rZW4uS2V5d29yZF0gPSAn
S2V5d29yZCc7Ci0gICAgZXhwb3J0cy5Ub2tlbk5hbWVbVG9rZW4uTnVsbExpdGVyYWxdID0gJ051
bGwnOwotICAgIGV4cG9ydHMuVG9rZW5OYW1lW1Rva2VuLk51bWVyaWNMaXRlcmFsXSA9ICdOdW1l
cmljJzsKLSAgICBleHBvcnRzLlRva2VuTmFtZVtUb2tlbi5QdW5jdHVhdG9yXSA9ICdQdW5jdHVh
dG9yJzsKLSAgICBleHBvcnRzLlRva2VuTmFtZVtUb2tlbi5TdHJpbmdMaXRlcmFsXSA9ICdTdHJp
bmcnOwotICAgIGV4cG9ydHMuVG9rZW5OYW1lW1Rva2VuLlJlZ3VsYXJFeHByZXNzaW9uXSA9ICdS
ZWd1bGFyRXhwcmVzc2lvbic7Ci0gICAgZXhwb3J0cy5Ub2tlbk5hbWVbVG9rZW4uVGVtcGxhdGVd
ID0gJ1RlbXBsYXRlJzsKLQotCi0vKioqLyB9LAotLyogOCAqLwotLyoqKi8gZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7Ci0KLSAgICAidXNlIHN0cmljdCI7
Ci0gICAgdmFyIGFzc2VydF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKLSAgICB2YXIgbWVz
c2FnZXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7Ci0gICAgdmFyIGNoYXJhY3Rlcl8xID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg5KTsKLSAgICB2YXIgdG9rZW5fMSA9IF9fd2VicGFja19yZXF1
aXJlX18oNyk7Ci0gICAgZnVuY3Rpb24gaGV4VmFsdWUoY2gpIHsKLSAgICAgICAgcmV0dXJuICcw
MTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpOwotICAgIH0KLSAgICBm
dW5jdGlvbiBvY3RhbFZhbHVlKGNoKSB7Ci0gICAgICAgIHJldHVybiAnMDEyMzQ1NjcnLmluZGV4
T2YoY2gpOwotICAgIH0KLSAgICB2YXIgU2Nhbm5lciA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IGZ1bmN0aW9uIFNjYW5uZXIoY29kZSwgaGFuZGxlcikgewotICAgICAgICAgICAgdGhpcy5zb3Vy
Y2UgPSBjb2RlOwotICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBoYW5kbGVyOwotICAg
ICAgICAgICAgdGhpcy50cmFja0NvbW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMubGVu
Z3RoID0gY29kZS5sZW5ndGg7Ci0gICAgICAgICAgICB0aGlzLmluZGV4ID0gMDsKLSAgICAgICAg
ICAgIHRoaXMubGluZU51bWJlciA9IChjb2RlLmxlbmd0aCA+IDApID8gMSA6IDA7Ci0gICAgICAg
ICAgICB0aGlzLmxpbmVTdGFydCA9IDA7Ci0gICAgICAgICAgICB0aGlzLmN1cmx5U3RhY2sgPSBb
XTsKLSAgICAgICAgfQotICAgICAgICA7Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLmVvZiA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4ID49IHRoaXMubGVu
Z3RoOwotICAgICAgICB9OwotICAgICAgICA7Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnRo
cm93VW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlm
IChtZXNzYWdlID09PSB2b2lkIDApIHsgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5l
eHBlY3RlZFRva2VuSWxsZWdhbDsgfQotICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIudGhy
b3dFcnJvcih0aGlzLmluZGV4LCB0aGlzLmxpbmVOdW1iZXIsIHRoaXMuaW5kZXggLSB0aGlzLmxp
bmVTdGFydCArIDEsIG1lc3NhZ2UpOwotICAgICAgICB9OwotICAgICAgICA7Ci0gICAgICAgIFNj
YW5uZXIucHJvdG90eXBlLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIudG9sZXJhdGVFcnJvcih0aGlzLmluZGV4LCB0
aGlzLmxpbmVOdW1iZXIsIHRoaXMuaW5kZXggLSB0aGlzLmxpbmVTdGFydCArIDEsIG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuSWxsZWdhbCk7Ci0gICAgICAgIH07Ci0gICAgICAg
IDsKLSAgICAgICAgLy8gRUNNQS0yNjIgMTEuNCBDb21tZW50cwotICAgICAgICBTY2FubmVyLnBy
b3RvdHlwZS5za2lwU2luZ2xlTGluZUNvbW1lbnQgPSBmdW5jdGlvbiAob2Zmc2V0KSB7Ci0gICAg
ICAgICAgICB2YXIgY29tbWVudHMgPSBbXTsKLSAgICAgICAgICAgIHZhciBzdGFydCwgbG9jOwot
ICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7Ci0gICAgICAgICAgICAgICAgY29t
bWVudHMgPSBbXTsKLSAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuaW5kZXggLSBvZmZzZXQ7
Ci0gICAgICAgICAgICAgICAgbG9jID0gewotICAgICAgICAgICAgICAgICAgICBzdGFydDogewot
ICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5lTnVtYmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnQgLSBvZmZz
ZXQKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgZW5kOiB7fQot
ICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIXRo
aXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZS5jaGFyQ29k
ZUF0KHRoaXMuaW5kZXgpOwotICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAg
ICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5lOiB0aGlzLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1u
OiB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnQgLSAxCi0gICAgICAgICAgICAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG11bHRpTGluZTogZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2xpY2U6IFtzdGFydCArIG9mZnNldCwgdGhpcy5pbmRleCAtIDFdLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIHRoaXMuaW5kZXggLSAxXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2M6IGxvYwotICAgICAgICAgICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZW50cnkpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMTMgJiYgdGhp
cy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSA9PT0gMTApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICArK3RoaXMubGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5s
aW5lU3RhcnQgPSB0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWVu
dHM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRo
aXMudHJhY2tDb21tZW50KSB7Ci0gICAgICAgICAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAg
ICAgICAgICAgICAgbGluZTogdGhpcy5saW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICBj
b2x1bW46IHRoaXMuaW5kZXggLSB0aGlzLmxpbmVTdGFydAotICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gewotICAgICAgICAgICAgICAgICAgICBtdWx0aUxp
bmU6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICBzbGljZTogW3N0YXJ0ICsgb2Zmc2V0LCB0
aGlzLmluZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgdGhpcy5pbmRl
eF0sCi0gICAgICAgICAgICAgICAgICAgIGxvYzogbG9jCi0gICAgICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKGVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBjb21tZW50czsKLSAgICAgICAgfTsKLSAgICAgICAgOwotICAgICAgICBT
Y2FubmVyLnByb3RvdHlwZS5za2lwTXVsdGlMaW5lQ29tbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHZhciBjb21tZW50cyA9IFtdOwotICAgICAgICAgICAgdmFyIHN0YXJ0LCBsb2M7
Ci0gICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKLSAgICAgICAgICAgICAgICBj
b21tZW50cyA9IFtdOwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5pbmRleCAtIDI7Ci0g
ICAgICAgICAgICAgICAgbG9jID0gewotICAgICAgICAgICAgICAgICAgICBzdGFydDogewotICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5lTnVtYmVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29sdW1uOiB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnQgLSAyCi0gICAg
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIGVuZDoge30KLSAgICAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigp
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlz
LmluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGlu
ZVRlcm1pbmF0b3IoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAm
JiB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKSA9PT0gMHgwQSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyOwotICAgICAgICAgICAgICAg
ICAgICArK3RoaXMuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0g
dGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
Y2ggPT09IDB4MkEpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQmxvY2sgY29tbWVudCBlbmRz
IHdpdGggJyovJy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlLmNoYXJDb2Rl
QXQodGhpcy5pbmRleCArIDEpID09PSAweDJGKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0Nv
bW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0gewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmVOdW1iZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAtIHRoaXMubGluZVN0
YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgZW50cnkgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11
bHRpTGluZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2U6IFtz
dGFydCArIDIsIHRoaXMuaW5kZXggLSAyXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmFuZ2U6IFtzdGFydCwgdGhpcy5pbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvYzogbG9jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKGVudHJ5KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21tZW50czsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICArK3RoaXMuaW5kZXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgLy8gUmFuIG9mZiB0aGUgZW5kIG9mIHRoZSBmaWxlIC0gdGhlIHdob2xlIHRoaW5n
IGlzIGEgY29tbWVudAotICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7Ci0gICAg
ICAgICAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5s
aW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuaW5kZXggLSB0aGlz
LmxpbmVTdGFydAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgdmFyIGVudHJ5
ID0gewotICAgICAgICAgICAgICAgICAgICBtdWx0aUxpbmU6IHRydWUsCi0gICAgICAgICAgICAg
ICAgICAgIHNsaWNlOiBbc3RhcnQgKyAyLCB0aGlzLmluZGV4XSwKLSAgICAgICAgICAgICAgICAg
ICAgcmFuZ2U6IFtzdGFydCwgdGhpcy5pbmRleF0sCi0gICAgICAgICAgICAgICAgICAgIGxvYzog
bG9jCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKGVu
dHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVk
VG9rZW4oKTsKLSAgICAgICAgICAgIHJldHVybiBjb21tZW50czsKLSAgICAgICAgfTsKLSAgICAg
ICAgOwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuQ29tbWVudHMgPSBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICB2YXIgY29tbWVudHM7Ci0gICAgICAgICAgICBpZiAodGhpcy50cmFj
a0NvbW1lbnQpIHsKLSAgICAgICAgICAgICAgICBjb21tZW50cyA9IFtdOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdmFyIHN0YXJ0ID0gKHRoaXMuaW5kZXggPT09IDApOwotICAgICAgICAg
ICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5z
b3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoY2hhcmFj
dGVyXzEuQ2hhcmFjdGVyLmlzV2hpdGVTcGFjZShjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Kyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlm
IChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09
IDB4MEQgJiYgdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSA9PT0gMHgwQSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyOwotICAgICAgICAgICAg
ICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAg
IHN0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoY2ggPT09IDB4MkYpIHsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZS5j
aGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09
PSAweDJGKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuc2tpcFNpbmdsZUxpbmVDb21t
ZW50KDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMgPSBjb21tZW50cy5jb25jYXQo
Y29tbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGFydCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuaW5kZXggKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhp
cy5za2lwTXVsdGlMaW5lQ29tbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMudHJhY2tDb21tZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMg
PSBjb21tZW50cy5jb25jYXQoY29tbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGFydCAmJiBjaCA9PT0gMHgyRCkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBVKzAwM0UgaXMgJz4nCi0gICAgICAgICAgICAgICAg
ICAgIGlmICgodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkgPT09IDB4MkQp
ICYmICh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAyKSA9PT0gMHgzRSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vICctLT4nIGlzIGEgc2luZ2xlLWxpbmUgY29tbWVu
dAotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAzOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLnNraXBTaW5nbGVMaW5lQ29tbWVudCgzKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29tbWVudHMuY29uY2F0KGNvbW1lbnQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoY2ggPT09IDB4M0MpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291
cmNlLnNsaWNlKHRoaXMuaW5kZXggKyAxLCB0aGlzLmluZGV4ICsgNCkgPT09ICchLS0nKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDQ7IC8vIGA8IS0tYAotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLnNraXBTaW5nbGVMaW5lQ29tbWVu
dCg0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29tbWVudHMuY29uY2F0KGNv
bW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjb21tZW50czsKLSAgICAgICAg
fTsKLSAgICAgICAgOwotICAgICAgICAvLyBFQ01BLTI2MiAxMS42LjIuMiBGdXR1cmUgUmVzZXJ2
ZWQgV29yZHMKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuaXNGdXR1cmVSZXNlcnZlZFdvcmQg
PSBmdW5jdGlvbiAoaWQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlICdlbnVtJzoKLSAgICAgICAgICAgICAgICBjYXNlICdleHBvcnQnOgotICAgICAg
ICAgICAgICAgIGNhc2UgJ2ltcG9ydCc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnc3VwZXInOgot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH07Ci0gICAgICAgIDsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuaXNTdHJpY3RNb2Rl
UmVzZXJ2ZWRXb3JkID0gZnVuY3Rpb24gKGlkKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGlkKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSAnaW1wbGVtZW50cyc6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSAnaW50ZXJmYWNlJzoKLSAgICAgICAgICAgICAgICBjYXNlICdwYWNrYWdlJzoKLSAgICAgICAg
ICAgICAgICBjYXNlICdwcml2YXRlJzoKLSAgICAgICAgICAgICAgICBjYXNlICdwcm90ZWN0ZWQn
OgotICAgICAgICAgICAgICAgIGNhc2UgJ3B1YmxpYyc6Ci0gICAgICAgICAgICAgICAgY2FzZSAn
c3RhdGljJzoKLSAgICAgICAgICAgICAgICBjYXNlICd5aWVsZCc6Ci0gICAgICAgICAgICAgICAg
Y2FzZSAnbGV0JzoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9OwotICAgICAgICA7Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBl
LmlzUmVzdHJpY3RlZFdvcmQgPSBmdW5jdGlvbiAoaWQpIHsKLSAgICAgICAgICAgIHJldHVybiBp
ZCA9PT0gJ2V2YWwnIHx8IGlkID09PSAnYXJndW1lbnRzJzsKLSAgICAgICAgfTsKLSAgICAgICAg
OwotICAgICAgICAvLyBFQ01BLTI2MiAxMS42LjIuMSBLZXl3b3JkcwotICAgICAgICBTY2FubmVy
LnByb3RvdHlwZS5pc0tleXdvcmQgPSBmdW5jdGlvbiAoaWQpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAoaWQubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKGlkID09PSAnaWYnKSB8fCAoaWQgPT09ICdpbicpIHx8IChpZCA9PT0gJ2Rv
Jyk7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KGlkID09PSAndmFyJykgfHwgKGlkID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIChpZCA9PT0gJ3RyeScpIHx8IChpZCA9PT0gJ2xldCcpOwot
ICAgICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9
PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlkID09PSAnY2FzZScpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAoaWQgPT09ICd2b2lkJykgfHwgKGlkID09PSAnd2l0aCcpIHx8
IChpZCA9PT0gJ2VudW0nKTsKLSAgICAgICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlk
ID09PSAnY2F0Y2gnKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKGlkID09PSAndGhyb3cn
KSB8fCAoaWQgPT09ICdjb25zdCcpIHx8IChpZCA9PT0gJ3lpZWxkJykgfHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIChpZCA9PT0gJ2NsYXNzJykgfHwgKGlkID09PSAnc3VwZXInKTsKLSAgICAg
ICAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdy
ZXR1cm4nKSB8fCAoaWQgPT09ICd0eXBlb2YnKSB8fCAoaWQgPT09ICdkZWxldGUnKSB8fAotICAg
ICAgICAgICAgICAgICAgICAgICAgKGlkID09PSAnc3dpdGNoJykgfHwgKGlkID09PSAnZXhwb3J0
JykgfHwgKGlkID09PSAnaW1wb3J0Jyk7Ci0gICAgICAgICAgICAgICAgY2FzZSA3OgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZGVmYXVsdCcpIHx8IChpZCA9PT0gJ2ZpbmFs
bHknKSB8fCAoaWQgPT09ICdleHRlbmRzJyk7Ci0gICAgICAgICAgICAgICAgY2FzZSA4OgotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdj
b250aW51ZScpIHx8IChpZCA9PT0gJ2RlYnVnZ2VyJyk7Ci0gICAgICAgICAgICAgICAgY2FzZSAx
MDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2luc3RhbmNlb2YnKTsKLSAg
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIDsKLSAgICAgICAgU2Nhbm5lci5w
cm90b3R5cGUuY29kZVBvaW50QXQgPSBmdW5jdGlvbiAoaSkgewotICAgICAgICAgICAgdmFyIGNw
ID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdChpKTsKLSAgICAgICAgICAgIGlmIChjcCA+PSAweEQ4
MDAgJiYgY3AgPD0gMHhEQkZGKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNlY29uZCA9IHRoaXMu
c291cmNlLmNoYXJDb2RlQXQoaSArIDEpOwotICAgICAgICAgICAgICAgIGlmIChzZWNvbmQgPj0g
MHhEQzAwICYmIHNlY29uZCA8PSAweERGRkYpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZp
cnN0ID0gY3A7Ci0gICAgICAgICAgICAgICAgICAgIGNwID0gKGZpcnN0IC0gMHhEODAwKSAqIDB4
NDAwICsgc2Vjb25kIC0gMHhEQzAwICsgMHgxMDAwMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY3A7Ci0gICAgICAgIH07Ci0gICAgICAgIDsK
LSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhbkhleEVzY2FwZSA9IGZ1bmN0aW9uIChwcmVm
aXgpIHsKLSAgICAgICAgICAgIHZhciBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7Ci0g
ICAgICAgICAgICB2YXIgY29kZSA9IDA7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVvZigpICYmIGNoYXJhY3Rl
cl8xLkNoYXJhY3Rlci5pc0hleERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRl
eCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyBoZXhWYWx1ZSh0
aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFy
Q29kZShjb2RlKTsKLSAgICAgICAgfTsKLSAgICAgICAgOwotICAgICAgICBTY2FubmVyLnByb3Rv
dHlwZS5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIHZhciBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwotICAgICAgICAgICAgdmFyIGNv
ZGUgPSAwOwotICAgICAgICAgICAgLy8gQXQgbGVhc3QsIG9uZSBoZXggZGlnaXQgaXMgcmVxdWly
ZWQuCi0gICAgICAgICAgICBpZiAoY2ggPT09ICd9JykgewotICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxl
ICghdGhpcy5lb2YoKSkgewotICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5p
bmRleCsrXTsKLSAgICAgICAgICAgICAgICBpZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0hl
eERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgaGV4
VmFsdWUoY2gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvZGUgPiAweDEwRkZG
RiB8fCBjaCAhPT0gJ30nKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRU
b2tlbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3Rlcl8xLkNo
YXJhY3Rlci5mcm9tQ29kZVBvaW50KGNvZGUpOwotICAgICAgICB9OwotICAgICAgICA7Ci0gICAg
ICAgIFNjYW5uZXIucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4Kys7Ci0gICAgICAgICAgICB3aGlsZSAoIXRo
aXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZS5jaGFyQ29k
ZUF0KHRoaXMuaW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHg1QykgewotICAg
ICAgICAgICAgICAgICAgICAvLyBCbGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUgZXNj
YXBlIHNlcXVlbmNlLgotICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gc3RhcnQ7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbXBsZXhJZGVudGlmaWVyKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID49IDB4RDgwMCAm
JiBjaCA8IDB4REZGRikgewotICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGhhbmRsZSBz
dXJyb2dhdGUgcGFpcnMuCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBzdGFydDsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcGxleElkZW50aWZpZXIoKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJh
Y3Rlci5pc0lkZW50aWZpZXJQYXJ0KGNoKSkgewotICAgICAgICAgICAgICAgICAgICArK3RoaXMu
aW5kZXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2Uuc2xpY2Uoc3RhcnQsIHRoaXMuaW5kZXgpOwot
ICAgICAgICB9OwotICAgICAgICA7Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLmdldENvbXBs
ZXhJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGNwID0gdGhpcy5j
b2RlUG9pbnRBdCh0aGlzLmluZGV4KTsKLSAgICAgICAgICAgIHZhciBpZCA9IGNoYXJhY3Rlcl8x
LkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KGNwKTsKLSAgICAgICAgICAgIHRoaXMuaW5kZXggKz0g
aWQubGVuZ3RoOwotICAgICAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMg
YW4gZXNjYXBlZCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICB2YXIgY2g7Ci0gICAgICAgICAgICBp
ZiAoY3AgPT09IDB4NUMpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNv
ZGVBdCh0aGlzLmluZGV4KSAhPT0gMHg3NSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRo
cm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRl
eF0gPT09ICd7JykgewotICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7Ci0gICAgICAg
ICAgICAgICAgICAgIGNoID0gdGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2ggPSB0aGlzLnNjYW5IZXhFc2NhcGUoJ3UnKTsKLSAgICAgICAgICAgICAgICAgICAgY3Ag
PSBjaC5jaGFyQ29kZUF0KDApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoIHx8IGNoID09
PSAnXFwnIHx8ICFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWQgPSBjaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkg
ewotICAgICAgICAgICAgICAgIGNwID0gdGhpcy5jb2RlUG9pbnRBdCh0aGlzLmluZGV4KTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0
KGNwKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgY2ggPSBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludChj
cCk7Ci0gICAgICAgICAgICAgICAgaWQgKz0gY2g7Ci0gICAgICAgICAgICAgICAgdGhpcy5pbmRl
eCArPSBjaC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUp
IGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICAgICAgaWYgKGNwID09
PSAweDVDKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyKDAsIGlkLmxlbmd0
aCAtIDEpOwotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0
aGlzLmluZGV4KSAhPT0gMHg3NSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJv
d1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNl
W3RoaXMuaW5kZXhdID09PSAneycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5p
bmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zY2FuVW5pY29kZUNvZGVQ
b2ludEVzY2FwZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNjYW5IZXhFc2NhcGUo
J3UnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNwID0gY2guY2hhckNvZGVBdCgwKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXCcgfHwgIWNoYXJhY3Rl
cl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0KGNwKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZCAr
PSBjaDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gaWQ7Ci0gICAgICAgIH07Ci0gICAgICAgIDsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUu
b2N0YWxUb0RlY2ltYWwgPSBmdW5jdGlvbiAoY2gpIHsKLSAgICAgICAgICAgIC8vIFwwIGlzIG5v
dCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UKLSAgICAgICAgICAgIHZhciBvY3RhbCA9IChjaCAhPT0g
JzAnKTsKLSAgICAgICAgICAgIHZhciBjb2RlID0gb2N0YWxWYWx1ZShjaCk7Ci0gICAgICAgICAg
ICBpZiAoIXRoaXMuZW9mKCkgJiYgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdCh0
aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgewotICAgICAgICAgICAgICAgIG9j
dGFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyBvY3RhbFZhbHVl
KHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK10pOwotICAgICAgICAgICAgICAgIC8vIDMgZGlnaXRz
IGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3RhcnRzCi0gICAgICAgICAgICAgICAgLy8g
d2l0aCAwLCAxLCAyLCAzCi0gICAgICAgICAgICAgICAgaWYgKCcwMTIzJy5pbmRleE9mKGNoKSA+
PSAwICYmICF0aGlzLmVvZigpICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQo
dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29kZSA9IGNvZGUgKiA4ICsgb2N0YWxWYWx1ZSh0aGlzLnNvdXJjZVt0aGlzLmluZGV4Kytd
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgICAgIGNvZGU6IGNvZGUsCi0gICAgICAgICAgICAgICAgb2N0YWw6IG9j
dGFsCi0gICAgICAgICAgICB9OwotICAgICAgICB9OwotICAgICAgICA7Ci0gICAgICAgIC8vIEVD
TUEtMjYyIDExLjYgTmFtZXMgYW5kIEtleXdvcmRzCi0gICAgICAgIFNjYW5uZXIucHJvdG90eXBl
LnNjYW5JZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHR5cGU7Ci0g
ICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4OwotICAgICAgICAgICAgLy8gQmFja3Ns
YXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KLSAgICAgICAgICAgIHZh
ciBpZCA9ICh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHN0YXJ0KSA9PT0gMHg1QykgPyB0aGlzLmdl
dENvbXBsZXhJZGVudGlmaWVyKCkgOiB0aGlzLmdldElkZW50aWZpZXIoKTsKLSAgICAgICAgICAg
IC8vIFRoZXJlIGlzIG5vIGtleXdvcmQgb3IgbGl0ZXJhbCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rl
ci4KLSAgICAgICAgICAgIC8vIFRodXMsIGl0IG11c3QgYmUgYW4gaWRlbnRpZmllci4KLSAgICAg
ICAgICAgIGlmIChpZC5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICAgICAgICB0eXBlID0gdG9r
ZW5fMS5Ub2tlbi5JZGVudGlmaWVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAodGhpcy5pc0tleXdvcmQoaWQpKSB7Ci0gICAgICAgICAgICAgICAgdHlwZSA9IHRva2VuXzEu
VG9rZW4uS2V5d29yZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlkID09
PSAnbnVsbCcpIHsKLSAgICAgICAgICAgICAgICB0eXBlID0gdG9rZW5fMS5Ub2tlbi5OdWxsTGl0
ZXJhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlkID09PSAndHJ1ZScg
fHwgaWQgPT09ICdmYWxzZScpIHsKLSAgICAgICAgICAgICAgICB0eXBlID0gdG9rZW5fMS5Ub2tl
bi5Cb29sZWFuTGl0ZXJhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgIHR5cGUgPSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCi0g
ICAgICAgICAgICAgICAgdmFsdWU6IGlkLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRo
aXMubGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0
LAotICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgICAgICBlbmQ6IHRo
aXMuaW5kZXgKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIDsKLSAgICAgICAg
Ly8gRUNNQS0yNjIgMTEuNyBQdW5jdHVhdG9ycwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5z
Y2FuUHVuY3R1YXRvciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHsK
LSAgICAgICAgICAgICAgICB0eXBlOiB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IsCi0gICAgICAg
ICAgICAgICAgdmFsdWU6ICcnLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGlu
ZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAotICAg
ICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmluZGV4LAotICAgICAgICAgICAgICAgIGVuZDogdGhp
cy5pbmRleAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIC8vIENoZWNrIGZvciBtb3N0IGNv
bW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgotICAgICAgICAgICAgdmFyIHN0ciA9
IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwotICAgICAgICAgICAgc3dpdGNoIChzdHIpIHsKLSAg
ICAgICAgICAgICAgICBjYXNlICcoJzoKLSAgICAgICAgICAgICAgICBjYXNlICd7JzoKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJ3snKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmN1cmx5U3RhY2sucHVzaCgneycpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSAnLic6Ci0gICAgICAgICAgICAgICAgICAgICsrdGhpcy5p
bmRleDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09
PSAnLicgJiYgdGhpcy5zb3VyY2VbdGhpcy5pbmRleCArIDFdID09PSAnLicpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFNwcmVhZCBvcGVyYXRvcjogLi4uCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSAn
Li4uJzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlICd9JzoKLSAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmlu
ZGV4OwotICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cmx5U3RhY2sucG9wKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJyknOgotICAgICAgICAg
ICAgICAgIGNhc2UgJzsnOgotICAgICAgICAgICAgICAgIGNhc2UgJywnOgotICAgICAgICAgICAg
ICAgIGNhc2UgJ1snOgotICAgICAgICAgICAgICAgIGNhc2UgJ10nOgotICAgICAgICAgICAgICAg
IGNhc2UgJzonOgotICAgICAgICAgICAgICAgIGNhc2UgJz8nOgotICAgICAgICAgICAgICAgIGNh
c2UgJ34nOgotICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIDQtY2hhcmFjdGVyIHB1bmN0dWF0b3IuCi0gICAgICAgICAgICAgICAgICAgIHN0ciA9
IHRoaXMuc291cmNlLnN1YnN0cih0aGlzLmluZGV4LCA0KTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHN0ciA9PT0gJz4+Pj0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4
ICs9IDQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyAzLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgMyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RyID09PSAnPT09JyB8fCBzdHIgPT09ICchPT0nIHx8IHN0ciA9
PT0gJz4+PicgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICc8PD0nIHx8
IHN0ciA9PT0gJz4+PScgfHwgc3RyID09PSAnKio9JykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuaW5kZXggKz0gMzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IDItY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciA9IHN0ci5zdWJzdHIoMCwgMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
ciA9PT0gJyYmJyB8fCBzdHIgPT09ICd8fCcgfHwgc3RyID09PSAnPT0nIHx8IHN0ciA9PT0gJyE9
JyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICcrPScgfHwgc3Ry
ID09PSAnLT0nIHx8IHN0ciA9PT0gJyo9JyB8fCBzdHIgPT09ICcvPScgfHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnKysnIHx8IHN0ciA9PT0gJy0tJyB8fCBzdHIg
PT09ICc8PCcgfHwgc3RyID09PSAnPj4nIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ciA9PT0gJyY9JyB8fCBzdHIgPT09ICd8PScgfHwgc3RyID09PSAnXj0nIHx8IHN0ciA9
PT0gJyU9JyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICc8PScg
fHwgc3RyID09PSAnPj0nIHx8IHN0ciA9PT0gJz0+JyB8fCBzdHIgPT09ICcqKicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAyOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuc291cmNlW3RoaXMu
aW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzw+PSErLSolJnxe
LycuaW5kZXhPZihzdHIpID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRoaXMu
aW5kZXggPT09IHRva2VuLnN0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdG9rZW4uZW5kID0gdGhp
cy5pbmRleDsKLSAgICAgICAgICAgIHRva2VuLnZhbHVlID0gc3RyOwotICAgICAgICAgICAgcmV0
dXJuIHRva2VuOwotICAgICAgICB9OwotICAgICAgICA7Ci0gICAgICAgIC8vIEVDTUEtMjYyIDEx
LjguMyBOdW1lcmljIExpdGVyYWxzCi0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5IZXhM
aXRlcmFsID0gZnVuY3Rpb24gKHN0YXJ0KSB7Ci0gICAgICAgICAgICB2YXIgbnVtYmVyID0gJyc7
Ci0gICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0hleERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQo
dGhpcy5pbmRleCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBudW1iZXIgKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsr
XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChudW1iZXIubGVuZ3RoID09PSAwKSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJT
dGFydCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgewotICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogdG9rZW5fMS5Ub2tlbi5OdW1lcmlj
TGl0ZXJhbCwKLSAgICAgICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQoJzB4JyArIG51bWJlciwg
MTYpLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKLSAgICAg
ICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAotICAgICAgICAgICAgICAgIHN0
YXJ0OiBzdGFydCwKLSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKLSAgICAgICAgICAg
IH07Ci0gICAgICAgIH07Ci0gICAgICAgIDsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2Nh
bkJpbmFyeUxpdGVyYWwgPSBmdW5jdGlvbiAoc3RhcnQpIHsKLSAgICAgICAgICAgIHZhciBudW1i
ZXIgPSAnJzsKLSAgICAgICAgICAgIHZhciBjaDsKLSAgICAgICAgICAgIHdoaWxlICghdGhpcy5l
b2YoKSkgewotICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07Ci0g
ICAgICAgICAgICAgICAgaWYgKGNoICE9PSAnMCcgJiYgY2ggIT09ICcxJykgewotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbnVt
YmVyICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkgewotICAgICAgICAgICAgICAgIC8vIG9ubHkg
MGIgb3IgMEIKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXRoaXMuZW9mKCkpIHsKLSAgICAgICAgICAg
ICAgICBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7Ci0gICAgICAgICAg
ICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2hh
cmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGNoKSB8fCBjaGFyYWN0ZXJfMS5D
aGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IHRva2VuXzEuVG9r
ZW4uTnVtZXJpY0xpdGVyYWwsCi0gICAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJl
ciwgMiksCi0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLAotICAg
ICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCi0gICAgICAgICAgICAgICAg
c3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleAotICAgICAgICAg
ICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgOwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5z
Y2FuT2N0YWxMaXRlcmFsID0gZnVuY3Rpb24gKHByZWZpeCwgc3RhcnQpIHsKLSAgICAgICAgICAg
IHZhciBudW1iZXIgPSAnJzsKLSAgICAgICAgICAgIHZhciBvY3RhbCA9IGZhbHNlOwotICAgICAg
ICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQocHJlZml4LmNoYXJD
b2RlQXQoMCkpKSB7Ci0gICAgICAgICAgICAgICAgb2N0YWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIG51bWJlciA9ICcwJyArIHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodGhpcy5zb3Vy
Y2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG51bWJlciArPSB0aGlzLnNvdXJj
ZVt0aGlzLmluZGV4KytdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFvY3RhbCAm
JiBudW1iZXIubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gb25seSAwbyBvciAw
TwotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVy
U3RhcnQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkgfHwgY2hhcmFjdGVyXzEu
Q2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRl
eCkpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiB0
b2tlbl8xLlRva2VuLk51bWVyaWNMaXRlcmFsLAotICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJz
ZUludChudW1iZXIsIDgpLAotICAgICAgICAgICAgICAgIG9jdGFsOiBvY3RhbCwKLSAgICAgICAg
ICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgbGlu
ZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCi0g
ICAgICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4Ci0gICAgICAgICAgICB9OwotICAgICAgICB9
OwotICAgICAgICA7Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLmlzSW1wbGljaXRPY3RhbExp
dGVyYWwgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAvLyBJbXBsaWNpdCBvY3RhbCwgdW5s
ZXNzIHRoZXJlIGlzIGEgbm9uLW9jdGFsIGRpZ2l0LgotICAgICAgICAgICAgLy8gKEFubmV4IEIu
MS4xIG9uIE51bWVyaWMgTGl0ZXJhbHMpCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5p
bmRleCArIDE7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNo
ID0gdGhpcy5zb3VyY2VbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnOCcgfHwgY2gg
PT09ICc5JykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0
YWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfTsKLSAgICAgICAgOwotICAgICAgICBTY2FubmVyLnByb3RvdHlw
ZS5zY2FuTnVtZXJpY0xpdGVyYWwgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgc3Rh
cnQgPSB0aGlzLmluZGV4OwotICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2Vbc3RhcnRd
OwotICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0Rl
Y2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSB8fCAoY2ggPT09ICcuJyksICdOdW1lcmljIGxp
dGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgZGVjaW1hbCBkaWdpdCBvciBhIGRlY2ltYWwgcG9pbnQn
KTsKLSAgICAgICAgICAgIHZhciBudW1iZXIgPSAnJzsKLSAgICAgICAgICAgIGlmIChjaCAhPT0g
Jy4nKSB7Ci0gICAgICAgICAgICAgICAgbnVtYmVyID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsr
XTsKLSAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwotICAgICAg
ICAgICAgICAgIC8vIEhleCBudW1iZXIgc3RhcnRzIHdpdGggJzB4Jy4KLSAgICAgICAgICAgICAg
ICAvLyBPY3RhbCBudW1iZXIgc3RhcnRzIHdpdGggJzAnLgotICAgICAgICAgICAgICAgIC8vIE9j
dGFsIG51bWJlciBpbiBFUzYgc3RhcnRzIHdpdGggJzBvJy4KLSAgICAgICAgICAgICAgICAvLyBC
aW5hcnkgbnVtYmVyIGluIEVTNiBzdGFydHMgd2l0aCAnMGInLgotICAgICAgICAgICAgICAgIGlm
IChudW1iZXIgPT09ICcwJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd4JyB8
fCBjaCA9PT0gJ1gnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuSGV4TGl0ZXJhbChzdGFydCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAn
YicgfHwgY2ggPT09ICdCJykgewotICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbkJpbmFyeUxpdGVyYWwo
c3RhcnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gJ28nIHx8IGNoID09PSAnTycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggJiYgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlz
T2N0YWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuaXNJbXBsaWNpdE9jdGFsTGl0ZXJhbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuc2Nhbk9jdGFsTGl0ZXJhbChjaCwgc3RhcnQpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNp
bWFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbnVtYmVyICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2ggPT09ICcuJykgewotICAgICAgICAg
ICAgICAgIG51bWJlciArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwotICAgICAgICAgICAg
ICAgIHdoaWxlIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQodGhpcy5zb3Vy
Y2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVy
ICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7Ci0gICAgICAgICAgICAg
ICAgbnVtYmVyICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAgICAgICAg
Y2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT09
ICcrJyB8fCBjaCA9PT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlciArPSB0aGlz
LnNvdXJjZVt0aGlzLmluZGV4KytdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNo
YXJDb2RlQXQodGhpcy5pbmRleCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGFy
YWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0
aGlzLmluZGV4KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSB0aGlzLnNv
dXJjZVt0aGlzLmluZGV4KytdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRo
cm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0
aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgewotICAgICAgICAgICAgICAgIHRo
aXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogdG9rZW5fMS5Ub2tlbi5OdW1lcmljTGl0ZXJh
bCwKLSAgICAgICAgICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdChudW1iZXIpLAotICAgICAgICAg
ICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5l
U3RhcnQ6IHRoaXMubGluZVN0YXJ0LAotICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAg
ICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH07
Ci0gICAgICAgIDsKLSAgICAgICAgLy8gRUNNQS0yNjIgMTEuOC40IFN0cmluZyBMaXRlcmFscwot
ICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuU3RyaW5nTGl0ZXJhbCA9IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7Ci0gICAgICAgICAgICB2YXIg
cXVvdGUgPSB0aGlzLnNvdXJjZVtzdGFydF07Ci0gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQo
KHF1b3RlID09PSAnXCcnIHx8IHF1b3RlID09PSAnIicpLCAnU3RyaW5nIGxpdGVyYWwgbXVzdCBz
dGFydHMgd2l0aCBhIHF1b3RlJyk7Ci0gICAgICAgICAgICArK3RoaXMuaW5kZXg7Ci0gICAgICAg
ICAgICB2YXIgb2N0YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBzdHIgPSAnJzsKLSAgICAg
ICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgewotICAgICAgICAgICAgICAgIHZhciBjaCA9IHRo
aXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSBxdW90
ZSkgewotICAgICAgICAgICAgICAgICAgICBxdW90ZSA9ICcnOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2gg
PT09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmlu
ZGV4KytdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoIHx8ICFjaGFyYWN0ZXJfMS5DaGFy
YWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ3UnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICd7
JykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHRoaXMuc2NhblVuaWNv
ZGVDb2RlUG9pbnRFc2NhcGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB1bmVzY2FwZWQgPSB0aGlzLnNjYW5IZXhFc2NhcGUoY2gp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1bmVzY2FwZWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBl
Y3RlZFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdW5lc2NhcGVkOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
cic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHInOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICd0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdc
dCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ2InOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gJ1xiJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSAnXGYnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdceDBCJzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
OCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOSc6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggJiYgY2hhcmFjdGVyXzEu
Q2hhcmFjdGVyLmlzT2N0YWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9jdFRvRGVjID0gdGhpcy5vY3RhbFRvRGVjaW1h
bChjaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RhbCA9IG9jdFRv
RGVjLm9jdGFsIHx8IG9jdGFsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUob2N0VG9EZWMuY29kZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICArK3RoaXMubGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
J1xyJyAmJiB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ1xuJykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbmRleDsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29k
ZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocXVvdGUg
IT09ICcnKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHN0YXJ0OwotICAgICAgICAg
ICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogdG9rZW5fMS5Ub2tlbi5TdHJp
bmdMaXRlcmFsLAotICAgICAgICAgICAgICAgIHZhbHVlOiBzdHIsCi0gICAgICAgICAgICAgICAg
b2N0YWw6IG9jdGFsLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJl
ciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAotICAgICAgICAg
ICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKLSAg
ICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIDsKLSAgICAgICAgLy8gRUNNQS0yNjIg
MTEuOC42IFRlbXBsYXRlIExpdGVyYWwgTGV4aWNhbCBDb21wb25lbnRzCi0gICAgICAgIFNjYW5u
ZXIucHJvdG90eXBlLnNjYW5UZW1wbGF0ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZh
ciBjb29rZWQgPSAnJzsKLSAgICAgICAgICAgIHZhciB0ZXJtaW5hdGVkID0gZmFsc2U7Ci0gICAg
ICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4OwotICAgICAgICAgICAgdmFyIGhlYWQgPSAo
dGhpcy5zb3VyY2Vbc3RhcnRdID09PSAnYCcpOwotICAgICAgICAgICAgdmFyIHRhaWwgPSBmYWxz
ZTsKLSAgICAgICAgICAgIHZhciByYXdPZmZzZXQgPSAyOwotICAgICAgICAgICAgKyt0aGlzLmlu
ZGV4OwotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKLSAgICAgICAgICAgICAgICBpZiAo
Y2ggPT09ICdgJykgewotICAgICAgICAgICAgICAgICAgICByYXdPZmZzZXQgPSAxOwotICAgICAg
ICAgICAgICAgICAgICB0YWlsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgdGVybWluYXRl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gJyQnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ3snKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmN1cmx5U3RhY2sucHVzaCgnJHsnKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IGNoOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gJ1xcJykgewotICAgICAgICAgICAg
ICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNv
ZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29va2VkICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xyJzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
dCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXHQnOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMuaW5k
ZXhdID09PSAneycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdGhp
cy5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSB0
aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdG9yZSA9IHRoaXMuaW5kZXg7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5lc2NhcGVkID0gdGhp
cy5zY2FuSGV4RXNjYXBlKGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh1bmVzY2FwZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb29rZWQgKz0gdW5lc2NhcGVkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHJlc3RvcmU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IGNoOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb29rZWQgKz0gJ1xiJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXGYnOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICd2JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcdic7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gJzAnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hh
cmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQo
dGhpcy5pbmRleCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWxsZWdhbDogXDAxIFwwMiBhbmQgc28gb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuVGVtcGxhdGVPY3RhbExpdGVyYWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdc
MCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdp
dChjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWxsZWdhbDogXDEgXDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5UZW1wbGF0ZU9j
dGFsTGl0ZXJhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb29rZWQgKz0gY2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMubGluZU51bWJlcjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xyJyAmJiB0aGlzLnNvdXJjZVt0aGlzLmlu
ZGV4XSA9PT0gJ1xuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRl
eDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMubGluZVN0YXJ0ID0gdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0
ZXIuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAg
ICAgICArK3RoaXMubGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAn
XHInICYmIHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAnXG4nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICArK3RoaXMuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmluZGV4OwotICAgICAgICAgICAgICAg
ICAgICBjb29rZWQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSBjaDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoIWhlYWQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmN1cmx5U3RhY2su
cG9wKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAg
ICAgIHR5cGU6IHRva2VuXzEuVG9rZW4uVGVtcGxhdGUsCi0gICAgICAgICAgICAgICAgdmFsdWU6
IHsKLSAgICAgICAgICAgICAgICAgICAgY29va2VkOiBjb29rZWQsCi0gICAgICAgICAgICAgICAg
ICAgIHJhdzogdGhpcy5zb3VyY2Uuc2xpY2Uoc3RhcnQgKyAxLCB0aGlzLmluZGV4IC0gcmF3T2Zm
c2V0KQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgaGVhZDogaGVhZCwKLSAg
ICAgICAgICAgICAgICB0YWlsOiB0YWlsLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRo
aXMubGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0
LAotICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgICAgICBlbmQ6IHRo
aXMuaW5kZXgKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIDsKLSAgICAgICAg
Ly8gRUNNQS0yNjIgMTEuOC41IFJlZ3VsYXIgRXhwcmVzc2lvbiBMaXRlcmFscwotICAgICAgICBT
Y2FubmVyLnByb3RvdHlwZS50ZXN0UmVnRXhwID0gZnVuY3Rpb24gKHBhdHRlcm4sIGZsYWdzKSB7
Ci0gICAgICAgICAgICAvLyBUaGUgQk1QIGNoYXJhY3RlciB0byB1c2UgYXMgYSByZXBsYWNlbWVu
dCBmb3IgYXN0cmFsIHN5bWJvbHMgd2hlbgotICAgICAgICAgICAgLy8gdHJhbnNsYXRpbmcgYW4g
RVM2ICJ1Ii1mbGFnZ2VkIHBhdHRlcm4gdG8gYW4gRVM1LWNvbXBhdGlibGUKLSAgICAgICAgICAg
IC8vIGFwcHJveGltYXRpb24uCi0gICAgICAgICAgICAvLyBOb3RlOiByZXBsYWNpbmcgd2l0aCAn
XHVGRkZGJyBlbmFibGVzIGZhbHNlIHBvc2l0aXZlcyBpbiB1bmxpa2VseQotICAgICAgICAgICAg
Ly8gc2NlbmFyaW9zLiBGb3IgZXhhbXBsZSwgYFtcdXsxMDQ0Zn0tXHV7MTA0NDB9XWAgaXMgYW4g
aW52YWxpZAotICAgICAgICAgICAgLy8gcGF0dGVybiB0aGF0IHdvdWxkIG5vdCBiZSBkZXRlY3Rl
ZCBieSB0aGlzIHN1YnN0aXR1dGlvbi4KLSAgICAgICAgICAgIHZhciBhc3RyYWxTdWJzdGl0dXRl
ID0gJ1x1RkZGRic7Ci0gICAgICAgICAgICB2YXIgdG1wID0gcGF0dGVybjsKLSAgICAgICAgICAg
IHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICAgIGlmIChmbGFncy5pbmRleE9mKCd1JykgPj0g
MCkgewotICAgICAgICAgICAgICAgIHRtcCA9IHRtcAotICAgICAgICAgICAgICAgICAgICAucmVw
bGFjZSgvXFx1XHsoWzAtOWEtZkEtRl0rKVx9fFxcdShbYS1mQS1GMC05XXs0fSkvZywgZnVuY3Rp
b24gKCQwLCAkMSwgJDIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IHBh
cnNlSW50KCQxIHx8ICQyLCAxNik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQg
PiAweDEwRkZGRikgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aHJvd1VuZXhwZWN0
ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRSZWdFeHApOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhGRkZGKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2Rl
UG9pbnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBhc3RyYWxTdWJzdGl0dXRlOwotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAg
ICAgIC5yZXBsYWNlKC9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZywgYXN0cmFsU3Vi
c3RpdHV0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBGaXJzdCwgZGV0ZWN0IGlu
dmFsaWQgcmVndWxhciBleHByZXNzaW9ucy4KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICAgICAgUmVnRXhwKHRtcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoZSkg
ewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5N
ZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFJl
dHVybiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QgZm9yIHRoaXMgcGF0dGVybi1mbGFnIHBh
aXIsIG9yCi0gICAgICAgICAgICAvLyBgbnVsbGAgaW4gY2FzZSB0aGUgY3VycmVudCBlbnZpcm9u
bWVudCBkb2Vzbid0IHN1cHBvcnQgdGhlIGZsYWdzIGl0Ci0gICAgICAgICAgICAvLyB1c2VzLgot
ICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXR0
ZXJuLCBmbGFncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoZXhjZXB0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KLSAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAg
OwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuUmVnRXhwQm9keSA9IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwotICAgICAg
ICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGNoID09PSAnLycsICdSZWd1bGFyIGV4cHJlc3Npb24gbGl0
ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBzbGFzaCcpOwotICAgICAgICAgICAgdmFyIHN0ciA9IHRo
aXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAgICB2YXIgY2xhc3NNYXJrZXIgPSBm
YWxzZTsKLSAgICAgICAgICAgIHZhciB0ZXJtaW5hdGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB3
aGlsZSAoIXRoaXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3Ro
aXMuaW5kZXgrK107Ci0gICAgICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAgICAgICAgICAg
IGlmIChjaCA9PT0gJ1xcJykgewotICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNl
W3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVDTUEtMjYyIDcuOC41Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWlu
YXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50
aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4
cCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNo
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXJf
MS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAoY2xhc3NNYXJrZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09
PSAnXScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy8nKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGNoID09PSAnWycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmICghdGVybWluYXRlZCkgewotICAgICAgICAgICAgICAgIHRo
aXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRS
ZWdFeHApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gRXhjbHVkZSBsZWFkaW5nIGFu
ZCB0cmFpbGluZyBzbGFzaC4KLSAgICAgICAgICAgIHZhciBib2R5ID0gc3RyLnN1YnN0cigxLCBz
dHIubGVuZ3RoIC0gMik7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHZh
bHVlOiBib2R5LAotICAgICAgICAgICAgICAgIGxpdGVyYWw6IHN0cgotICAgICAgICAgICAgfTsK
LSAgICAgICAgfTsKLSAgICAgICAgOwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuUmVn
RXhwRmxhZ3MgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgc3RyID0gJyc7Ci0gICAg
ICAgICAgICB2YXIgZmxhZ3MgPSAnJzsKLSAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkg
ewotICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwotICAg
ICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQo
Y2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAg
ICBpZiAoY2ggPT09ICdcXCcgJiYgIXRoaXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNo
ID09PSAndScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciByZXN0b3JlID0gdGhpcy5pbmRleDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNoID0gdGhpcy5zY2FuSGV4RXNjYXBlKCd1Jyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY2gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAr
PSBjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ciArPSAnXFx1JzsgcmVz
dG9yZSA8IHRoaXMuaW5kZXg7ICsrcmVzdG9yZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gdGhpcy5zb3VyY2VbcmVzdG9yZV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHJl
c3RvcmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gJ3UnOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFx1JzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9r
ZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFwnOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBmbGFncyArPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICAgICAgdmFsdWU6IGZsYWdzLAotICAgICAgICAgICAgICAgIGxpdGVyYWw6IHN0
cgotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgOwotICAgICAgICBTY2FubmVy
LnByb3RvdHlwZS5zY2FuUmVnRXhwID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHN0
YXJ0ID0gdGhpcy5pbmRleDsKLSAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5zY2FuUmVnRXhw
Qm9keSgpOwotICAgICAgICAgICAgdmFyIGZsYWdzID0gdGhpcy5zY2FuUmVnRXhwRmxhZ3MoKTsK
LSAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudGVzdFJlZ0V4cChib2R5LnZhbHVlLCBmbGFn
cy52YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IHRv
a2VuXzEuVG9rZW4uUmVndWxhckV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgdmFsdWU6IHZh
bHVlLAotICAgICAgICAgICAgICAgIGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxpdGVy
YWwsCi0gICAgICAgICAgICAgICAgcmVnZXg6IHsKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVy
bjogYm9keS52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLnZhbHVlCi0g
ICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVO
dW1iZXIsCi0gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCwKLSAgICAg
ICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4
Ci0gICAgICAgICAgICB9OwotICAgICAgICB9OwotICAgICAgICA7Ci0gICAgICAgIFNjYW5uZXIu
cHJvdG90eXBlLmxleCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmVvZigp
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZTog
dG9rZW5fMS5Ub2tlbi5FT0YsCi0gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMu
bGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFy
dCwKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuaW5kZXgsCi0gICAgICAgICAgICAg
ICAgICAgIGVuZDogdGhpcy5pbmRleAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB2YXIgY3AgPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgp
OwotICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFy
dChjcCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuSWRlbnRpZmllcigpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gVmVyeSBjb21tb246ICggYW5kICkgYW5kIDsK
LSAgICAgICAgICAgIGlmIChjcCA9PT0gMHgyOCB8fCBjcCA9PT0gMHgyOSB8fCBjcCA9PT0gMHgz
QikgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5QdW5jdHVhdG9yKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAvLyBTdHJpbmcgbGl0ZXJhbCBzdGFydHMgd2l0aCBzaW5n
bGUgcXVvdGUgKFUrMDAyNykgb3IgZG91YmxlIHF1b3RlIChVKzAwMjIpLgotICAgICAgICAgICAg
aWYgKGNwID09PSAweDI3IHx8IGNwID09PSAweDIyKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuc2NhblN0cmluZ0xpdGVyYWwoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8v
IERvdCAoLikgVSswMDJFIGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBo
ZW5jZSB0aGUgbmVlZAotICAgICAgICAgICAgLy8gdG8gY2hlY2sgdGhlIG5leHQgY2hhcmFjdGVy
LgotICAgICAgICAgICAgaWYgKGNwID09PSAweDJFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNo
YXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0
KHRoaXMuaW5kZXggKyAxKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Nh
bk51bWVyaWNMaXRlcmFsKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLnNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KGNwKSkgewotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLnNjYW5OdW1lcmljTGl0ZXJhbCgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgLy8gVGVtcGxhdGUgbGl0ZXJhbHMgc3RhcnQgd2l0aCBgIChVKzAwNjApIGZv
ciB0ZW1wbGF0ZSBoZWFkCi0gICAgICAgICAgICAvLyBvciB9IChVKzAwN0QpIGZvciB0ZW1wbGF0
ZSBtaWRkbGUgb3IgdGVtcGxhdGUgdGFpbC4KLSAgICAgICAgICAgIGlmIChjcCA9PT0gMHg2MCB8
fCAoY3AgPT09IDB4N0QgJiYgdGhpcy5jdXJseVN0YWNrW3RoaXMuY3VybHlTdGFjay5sZW5ndGgg
LSAxXSA9PT0gJyR7JykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuVGVtcGxh
dGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFBvc3NpYmxlIGlkZW50aWZpZXIg
c3RhcnQgaW4gYSBzdXJyb2dhdGUgcGFpci4KLSAgICAgICAgICAgIGlmIChjcCA+PSAweEQ4MDAg
JiYgY3AgPCAweERGRkYpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFj
dGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuY29kZVBvaW50QXQodGhpcy5pbmRleCkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5JZGVudGlmaWVyKCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhblB1
bmN0dWF0b3IoKTsKLSAgICAgICAgfTsKLSAgICAgICAgOwotICAgICAgICByZXR1cm4gU2Nhbm5l
cjsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuU2Nhbm5lciA9IFNjYW5uZXI7CisgICAgICAgIHJl
dHVybiBKU1hQYXJzZXI7CisgICAgfShwYXJzZXJfMS5QYXJzZXIpKTsKKyAgICBleHBvcnRzLkpT
WFBhcnNlciA9IEpTWFBhcnNlcjsKIAogCiAvKioqLyB9LAotLyogOSAqLworLyogNCAqLwogLyoq
Ki8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKICAgICAidXNlIHN0cmljdCI7CkBAIC00
ODQ2LDIxICs5NTUsMjIgQEAgZWxzZSBpZiAoY2ggPT09ICdbJykgewogICAgICAgICBOb25Bc2Np
aUlkZW50aWZpZXJQYXJ0OiAvW1x4QUFceEI1XHhCN1x4QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4
LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzAwLVx1MDM3
NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0ZcdTAzODYtXHUwMzhBXHUwMzhDXHUwMzhF
LVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDgzLVx1MDQ4N1x1MDQ4QS1cdTA1
MkZcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDU5MS1cdTA1QkRcdTA1QkZcdTA1
QzFcdTA1QzJcdTA1QzRcdTA1QzVcdTA1QzdcdTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYx
MC1cdTA2MUFcdTA2MjAtXHUwNjY5XHUwNjZFLVx1MDZEM1x1MDZENS1cdTA2RENcdTA2REYtXHUw
NkU4XHUwNkVBLVx1MDZGQ1x1MDZGRlx1MDcxMC1cdTA3NEFcdTA3NEQtXHUwN0IxXHUwN0MwLVx1
MDdGNVx1MDdGQVx1MDgwMC1cdTA4MkRcdTA4NDAtXHUwODVCXHUwOEEwLVx1MDhCNFx1MDhFMy1c
dTA5NjNcdTA5NjYtXHUwOTZGXHUwOTcxLVx1MDk4M1x1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBc
dTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkMtXHUwOUM0
XHUwOUM3XHUwOUM4XHUwOUNCLVx1MDlDRVx1MDlEN1x1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTNc
dTA5RTYtXHUwOUYxXHUwQTAxLVx1MEEwM1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMt
XHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1
MEEzQ1x1MEEzRS1cdTBBNDJcdTBBNDdcdTBBNDhcdTBBNEItXHUwQTREXHUwQTUxXHUwQTU5LVx1
MEE1Q1x1MEE1RVx1MEE2Ni1cdTBBNzVcdTBBODEtXHUwQTgzXHUwQTg1LVx1MEE4RFx1MEE4Ri1c
dTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlc
dTBBQkMtXHUwQUM1XHUwQUM3LVx1MEFDOVx1MEFDQi1cdTBBQ0RcdTBBRDBcdTBBRTAtXHUwQUUz
XHUwQUU2LVx1MEFFRlx1MEFGOVx1MEIwMS1cdTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEw
XHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjND
LVx1MEI0NFx1MEI0N1x1MEI0OFx1MEI0Qi1cdTBCNERcdTBCNTZcdTBCNTdcdTBCNUNcdTBCNURc
dTBCNUYtXHUwQjYzXHUwQjY2LVx1MEI2Rlx1MEI3MVx1MEI4Mlx1MEI4M1x1MEI4NS1cdTBCOEFc
dTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1
MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkJFLVx1MEJDMlx1MEJDNi1c
dTBCQzhcdTBCQ0EtXHUwQkNEXHUwQkQwXHUwQkQ3XHUwQkU2LVx1MEJFRlx1MEMwMC1cdTBDMDNc
dTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5XHUwQzNE
LVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1XHUwQzU2XHUwQzU4LVx1MEM1
QVx1MEM2MC1cdTBDNjNcdTBDNjYtXHUwQzZGXHUwQzgxLVx1MEM4M1x1MEM4NS1cdTBDOENcdTBD
OEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JDLVx1
MENDNFx1MENDNi1cdTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1XHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1
MENFM1x1MENFNi1cdTBDRUZcdTBDRjFcdTBDRjJcdTBEMDEtXHUwRDAzXHUwRDA1LVx1MEQwQ1x1
MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNELVx1MEQ0NFx1MEQ0Ni1cdTBENDhcdTBENEEt
XHUwRDRFXHUwRDU3XHUwRDVGLVx1MEQ2M1x1MEQ2Ni1cdTBENkZcdTBEN0EtXHUwRDdGXHUwRDgy
XHUwRDgzXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMw
LVx1MERDNlx1MERDQVx1MERDRi1cdTBERDRcdTBERDZcdTBERDgtXHUwRERGXHUwREU2LVx1MERF
Rlx1MERGMlx1MERGM1x1MEUwMS1cdTBFM0FcdTBFNDAtXHUwRTRFXHUwRTUwLVx1MEU1OVx1MEU4
MVx1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTkt
XHUwRTlGXHUwRUExLVx1MEVBM1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjlc
dTBFQkItXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVDOC1cdTBFQ0RcdTBFRDAtXHUwRUQ5
XHUwRURDLVx1MEVERlx1MEYwMFx1MEYxOFx1MEYxOVx1MEYyMC1cdTBGMjlcdTBGMzVcdTBGMzdc
dTBGMzlcdTBGM0UtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY3MS1cdTBGODRcdTBGODYtXHUwRjk3
XHUwRjk5LVx1MEZCQ1x1MEZDNlx1MTAwMC1cdTEwNDlcdTEwNTAtXHUxMDlEXHUxMEEwLVx1MTBD
NVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1
MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEy
OTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUx
MkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM1RC1c
dTEzNUZcdTEzNjktXHUxMzcxXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjVcdTEzRjgtXHUxM0ZE
XHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZF
RS1cdTE2RjhcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxNFx1MTcyMC1cdTE3MzRcdTE3NDAtXHUx
NzUzXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3NzJcdTE3NzNcdTE3ODAtXHUxN0QzXHUx
N0Q3XHUxN0RDXHUxN0REXHUxN0UwLVx1MTdFOVx1MTgwQi1cdTE4MERcdTE4MTAtXHUxODE5XHUx
ODIwLVx1MTg3N1x1MTg4MC1cdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxRVx1MTkyMC1c
dTE5MkJcdTE5MzAtXHUxOTNCXHUxOTQ2LVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFC
XHUxOUIwLVx1MTlDOVx1MTlEMC1cdTE5REFcdTFBMDAtXHUxQTFCXHUxQTIwLVx1MUE1RVx1MUE2
MC1cdTFBN0NcdTFBN0YtXHUxQTg5XHUxQTkwLVx1MUE5OVx1MUFBN1x1MUFCMC1cdTFBQkRcdTFC
MDAtXHUxQjRCXHUxQjUwLVx1MUI1OVx1MUI2Qi1cdTFCNzNcdTFCODAtXHUxQkYzXHUxQzAwLVx1
MUMzN1x1MUM0MC1cdTFDNDlcdTFDNEQtXHUxQzdEXHUxQ0QwLVx1MUNEMlx1MUNENC1cdTFDRjZc
dTFDRjhcdTFDRjlcdTFEMDAtXHUxREY1XHUxREZDLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAt
XHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYt
XHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2
LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFG
RjRcdTFGRjYtXHUxRkZDXHUyMDBDXHUyMDBEXHUyMDNGXHUyMDQwXHUyMDU0XHUyMDcxXHUyMDdG
XHUyMDkwLVx1MjA5Q1x1MjBEMC1cdTIwRENcdTIwRTFcdTIwRTUtXHUyMEYwXHUyMTAyXHUyMTA3
XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOC1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEt
XHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxNjAtXHUyMTg4XHUyQzAw
LVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNGM1x1MkQwMC1cdTJE
MjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDdGLVx1MkQ5Nlx1MkRBMC1cdTJE
QTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUy
REM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyREUwLVx1MkRGRlx1MzAwNS1c
dTMwMDdcdTMwMjEtXHUzMDJGXHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2
XHUzMDk5LVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEz
MS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5
RkQ1XHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYyQlx1
QTY0MC1cdUE2NkZcdUE2NzQtXHVBNjdEXHVBNjdGLVx1QTZGMVx1QTcxNy1cdUE3MUZcdUE3MjIt
XHVBNzg4XHVBNzhCLVx1QTdBRFx1QTdCMC1cdUE3QjdcdUE3RjctXHVBODI3XHVBODQwLVx1QTg3
M1x1QTg4MC1cdUE4QzRcdUE4RDAtXHVBOEQ5XHVBOEUwLVx1QThGN1x1QThGQlx1QThGRFx1QTkw
MC1cdUE5MkRcdUE5MzAtXHVBOTUzXHVBOTYwLVx1QTk3Q1x1QTk4MC1cdUE5QzBcdUE5Q0YtXHVB
OUQ5XHVBOUUwLVx1QTlGRVx1QUEwMC1cdUFBMzZcdUFBNDAtXHVBQTREXHVBQTUwLVx1QUE1OVx1
QUE2MC1cdUFBNzZcdUFBN0EtXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUZcdUFBRjIt
XHVBQUY2XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIy
Nlx1QUIyOC1cdUFCMkVcdUFCMzAtXHVBQjVBXHVBQjVDLVx1QUI2NVx1QUI3MC1cdUFCRUFcdUFC
RUNcdUFCRURcdUFCRjAtXHVBQkY5XHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVE
N0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1
RkIxRC1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1
RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1c
dUZEQzdcdUZERjAtXHVGREZCXHVGRTAwLVx1RkUwRlx1RkUyMC1cdUZFMkZcdUZFMzNcdUZFMzRc
dUZFNEQtXHVGRTRGXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMTAtXHVGRjE5XHVGRjIx
LVx1RkYzQVx1RkYzRlx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZD
QS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJc
dURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAt
XHVEQzVEXHVEQzgwLVx1RENGQVx1REQ0MC1cdURENzRcdURERkRcdURFODAtXHVERTlDXHVERUEw
LVx1REVEMFx1REVFMFx1REYwMC1cdURGMUZcdURGMzAtXHVERjRBXHVERjUwLVx1REY3QVx1REY4
MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1REZDRlx1REZEMS1cdURGRDVdfFx1RDgwMVtc
dURDMDAtXHVEQzlEXHVEQ0EwLVx1RENBOVx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERTAw
LVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1
REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVEQzU1XHVEQzYwLVx1
REM3Nlx1REM4MC1cdURDOUVcdURDRTAtXHVEQ0YyXHVEQ0Y0XHVEQ0Y1XHVERDAwLVx1REQxNVx1
REQyMC1cdUREMzlcdUREODAtXHVEREI3XHVEREJFXHVEREJGXHVERTAwLVx1REUwM1x1REUwNVx1
REUwNlx1REUwQy1cdURFMTNcdURFMTUtXHVERTE3XHVERTE5LVx1REUzM1x1REUzOC1cdURFM0Fc
dURFM0ZcdURFNjAtXHVERTdDXHVERTgwLVx1REU5Q1x1REVDMC1cdURFQzdcdURFQzktXHVERUU2
XHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNjAtXHVERjcyXHVERjgwLVx1REY5MV18XHVE
ODAzW1x1REMwMC1cdURDNDhcdURDODAtXHVEQ0IyXHVEQ0MwLVx1RENGMl18XHVEODA0W1x1REMw
MC1cdURDNDZcdURDNjYtXHVEQzZGXHVEQzdGLVx1RENCQVx1RENEMC1cdURDRThcdURDRjAtXHVE
Q0Y5XHVERDAwLVx1REQzNFx1REQzNi1cdUREM0ZcdURENTAtXHVERDczXHVERDc2XHVERDgwLVx1
RERDNFx1RERDQS1cdUREQ0NcdURERDAtXHVERERBXHVERERDXHVERTAwLVx1REUxMVx1REUxMy1c
dURFMzdcdURFODAtXHVERTg2XHVERTg4XHVERThBLVx1REU4RFx1REU4Ri1cdURFOURcdURFOUYt
XHVERUE4XHVERUIwLVx1REVFQVx1REVGMC1cdURFRjlcdURGMDAtXHVERjAzXHVERjA1LVx1REYw
Q1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1
LVx1REYzOVx1REYzQy1cdURGNDRcdURGNDdcdURGNDhcdURGNEItXHVERjREXHVERjUwXHVERjU3
XHVERjVELVx1REY2M1x1REY2Ni1cdURGNkNcdURGNzAtXHVERjc0XXxcdUQ4MDVbXHVEQzgwLVx1
RENDNVx1RENDN1x1RENEMC1cdURDRDlcdUREODAtXHVEREI1XHVEREI4LVx1RERDMFx1REREOC1c
dURERERcdURFMDAtXHVERTQwXHVERTQ0XHVERTUwLVx1REU1OVx1REU4MC1cdURFQjdcdURFQzAt
XHVERUM5XHVERjAwLVx1REYxOVx1REYxRC1cdURGMkJcdURGMzAtXHVERjM5XXxcdUQ4MDZbXHVE
Q0EwLVx1RENFOVx1RENGRlx1REVDMC1cdURFRjhdfFx1RDgwOFtcdURDMDAtXHVERjk5XXxcdUQ4
MDlbXHVEQzAwLVx1REM2RVx1REM4MC1cdURENDNdfFtcdUQ4MENcdUQ4NDAtXHVEODY4XHVEODZB
LVx1RDg2Q1x1RDg2Ri1cdUQ4NzJdW1x1REMwMC1cdURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJF
XXxcdUQ4MTFbXHVEQzAwLVx1REU0Nl18XHVEODFBW1x1REMwMC1cdURFMzhcdURFNDAtXHVERTVF
XHVERTYwLVx1REU2OVx1REVEMC1cdURFRURcdURFRjAtXHVERUY0XHVERjAwLVx1REYzNlx1REY0
MC1cdURGNDNcdURGNTAtXHVERjU5XHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltc
dURGMDAtXHVERjQ0XHVERjUwLVx1REY3RVx1REY4Ri1cdURGOUZdfFx1RDgyQ1tcdURDMDBcdURD
MDFdfFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4MC1cdURDODhcdURDOTAt
XHVEQzk5XHVEQzlEXHVEQzlFXXxcdUQ4MzRbXHVERDY1LVx1REQ2OVx1REQ2RC1cdURENzJcdURE
N0ItXHVERDgyXHVERDg1LVx1REQ4Qlx1RERBQS1cdUREQURcdURFNDItXHVERTQ0XXxcdUQ4MzVb
XHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURDOUZcdURDQTJcdURDQTVcdURDQTZc
dURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENCRC1cdURDQzNcdURDQzUtXHVERDA1
XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVERDFDXHVERDFFLVx1REQzOVx1REQz
Qi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1REQ1MFx1REQ1Mi1cdURFQTVcdURF
QTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFcdURFRkMtXHVERjE0XHVERjE2LVx1
REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcwLVx1REY4OFx1REY4QS1cdURGQThc
dURGQUEtXHVERkMyXHVERkM0LVx1REZDQlx1REZDRS1cdURGRkZdfFx1RDgzNltcdURFMDAtXHVE
RTM2XHVERTNCLVx1REU2Q1x1REU3NVx1REU4NFx1REU5Qi1cdURFOUZcdURFQTEtXHVERUFGXXxc
dUQ4M0FbXHVEQzAwLVx1RENDNFx1RENEMC1cdURDRDZdfFx1RDgzQltcdURFMDAtXHVERTAzXHVE
RTA1LVx1REUxRlx1REUyMVx1REUyMlx1REUyNFx1REUyN1x1REUyOS1cdURFMzJcdURFMzQtXHVE
RTM3XHVERTM5XHVERTNCXHVERTQyXHVERTQ3XHVERTQ5XHVERTRCXHVERTRELVx1REU0Rlx1REU1
MVx1REU1Mlx1REU1NFx1REU1N1x1REU1OVx1REU1Qlx1REU1RFx1REU1Rlx1REU2MVx1REU2Mlx1
REU2NFx1REU2Ny1cdURFNkFcdURFNkMtXHVERTcyXHVERTc0LVx1REU3N1x1REU3OS1cdURFN0Nc
dURFN0VcdURFODAtXHVERTg5XHVERThCLVx1REU5Qlx1REVBMS1cdURFQTNcdURFQTUtXHVERUE5
XHVERUFCLVx1REVCQl18XHVEODY5W1x1REMwMC1cdURFRDZcdURGMDAtXHVERkZGXXxcdUQ4NkRb
XHVEQzAwLVx1REYzNFx1REY0MC1cdURGRkZdfFx1RDg2RVtcdURDMDAtXHVEQzFEXHVEQzIwLVx1
REZGRl18XHVEODczW1x1REMwMC1cdURFQTFdfFx1RDg3RVtcdURDMDAtXHVERTFEXXxcdURCNDBb
XHVERDAwLVx1RERFRl0vCiAgICAgfTsKICAgICBleHBvcnRzLkNoYXJhY3RlciA9IHsKKyAgICAg
ICAgLyogdHNsaW50OmRpc2FibGU6bm8tYml0d2lzZSAqLwogICAgICAgICBmcm9tQ29kZVBvaW50
OiBmdW5jdGlvbiAoY3ApIHsKICAgICAgICAgICAgIHJldHVybiAoY3AgPCAweDEwMDAwKSA/IFN0
cmluZy5mcm9tQ2hhckNvZGUoY3ApIDoKICAgICAgICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJD
b2RlKDB4RDgwMCArICgoY3AgLSAweDEwMDAwKSA+PiAxMCkpICsKICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgKyAoKGNwIC0gMHgxMDAwMCkgJiAxMDIzKSk7
CiAgICAgICAgIH0sCi0gICAgICAgIC8vIEVDTUEtMjYyIDExLjIgV2hpdGUgU3BhY2UKKyAgICAg
ICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtd2hpdGUtc3BhY2UKICAg
ICAgICAgaXNXaGl0ZVNwYWNlOiBmdW5jdGlvbiAoY3ApIHsKICAgICAgICAgICAgIHJldHVybiAo
Y3AgPT09IDB4MjApIHx8IChjcCA9PT0gMHgwOSkgfHwgKGNwID09PSAweDBCKSB8fCAoY3AgPT09
IDB4MEMpIHx8IChjcCA9PT0gMHhBMCkgfHwKICAgICAgICAgICAgICAgICAoY3AgPj0gMHgxNjgw
ICYmIFsweDE2ODAsIDB4MjAwMCwgMHgyMDAxLCAweDIwMDIsIDB4MjAwMywgMHgyMDA0LCAweDIw
MDUsIDB4MjAwNiwgMHgyMDA3LCAweDIwMDgsIDB4MjAwOSwgMHgyMDBBLCAweDIwMkYsIDB4MjA1
RiwgMHgzMDAwLCAweEZFRkZdLmluZGV4T2YoY3ApID49IDApOwogICAgICAgICB9LAotICAgICAg
ICAvLyBFQ01BLTI2MiAxMS4zIExpbmUgVGVybWluYXRvcnMKKyAgICAgICAgLy8gaHR0cHM6Ly90
YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGluZS10ZXJtaW5hdG9ycwogICAgICAgICBpc0xp
bmVUZXJtaW5hdG9yOiBmdW5jdGlvbiAoY3ApIHsKICAgICAgICAgICAgIHJldHVybiAoY3AgPT09
IDB4MEEpIHx8IChjcCA9PT0gMHgwRCkgfHwgKGNwID09PSAweDIwMjgpIHx8IChjcCA9PT0gMHgy
MDI5KTsKICAgICAgICAgfSwKLSAgICAgICAgLy8gRUNNQS0yNjIgMTEuNiBJZGVudGlmaWVyIE5h
bWVzIGFuZCBJZGVudGlmaWVycworICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2Vj
bWEyNjIvI3NlYy1uYW1lcy1hbmQta2V5d29yZHMKICAgICAgICAgaXNJZGVudGlmaWVyU3RhcnQ6
IGZ1bmN0aW9uIChjcCkgewogICAgICAgICAgICAgcmV0dXJuIChjcCA9PT0gMHgyNCkgfHwgKGNw
ID09PSAweDVGKSB8fAogICAgICAgICAgICAgICAgIChjcCA+PSAweDQxICYmIGNwIDw9IDB4NUEp
IHx8CkBAIC00ODc2LDcgKzk4Niw3IEBAIGVsc2UgaWYgKGNoID09PSAnWycpIHsKICAgICAgICAg
ICAgICAgICAoY3AgPT09IDB4NUMpIHx8CiAgICAgICAgICAgICAgICAgKChjcCA+PSAweDgwKSAm
JiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJQYXJ0LnRlc3QoZXhwb3J0cy5DaGFyYWN0ZXIuZnJv
bUNvZGVQb2ludChjcCkpKTsKICAgICAgICAgfSwKLSAgICAgICAgLy8gRUNNQS0yNjIgMTEuOC4z
IE51bWVyaWMgTGl0ZXJhbHMKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtbGl0ZXJhbHMtbnVtZXJpYy1saXRlcmFscwogICAgICAgICBpc0RlY2ltYWxEaWdp
dDogZnVuY3Rpb24gKGNwKSB7CiAgICAgICAgICAgICByZXR1cm4gKGNwID49IDB4MzAgJiYgY3Ag
PD0gMHgzOSk7IC8vIDAuLjkKICAgICAgICAgfSwKQEAgLTQ4OTIsMTEgKzEwMDIsMTM2IEBAIGVs
c2UgaWYgKGNoID09PSAnWycpIHsKIAogCiAvKioqLyB9LAotLyogMTAgKi8KKy8qIDUgKi8KKy8q
KiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisg
ICAgInVzZSBzdHJpY3QiOworICAgIHZhciBqc3hfc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDYpOworICAgIC8qIHRzbGludDpkaXNhYmxlOm1heC1jbGFzc2VzLXBlci1maWxlICovCisg
ICAgdmFyIEpTWENsb3NpbmdFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZnVuY3Rp
b24gSlNYQ2xvc2luZ0VsZW1lbnQobmFtZSkgeworICAgICAgICAgICAgdGhpcy50eXBlID0ganN4
X3N5bnRheF8xLkpTWFN5bnRheC5KU1hDbG9zaW5nRWxlbWVudDsKKyAgICAgICAgICAgIHRoaXMu
bmFtZSA9IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpTWENsb3NpbmdFbGVtZW50
OworICAgIH0oKSk7CisgICAgZXhwb3J0cy5KU1hDbG9zaW5nRWxlbWVudCA9IEpTWENsb3NpbmdF
bGVtZW50OworICAgIHZhciBKU1hFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZnVu
Y3Rpb24gSlNYRWxlbWVudChvcGVuaW5nRWxlbWVudCwgY2hpbGRyZW4sIGNsb3NpbmdFbGVtZW50
KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWEVs
ZW1lbnQ7CisgICAgICAgICAgICB0aGlzLm9wZW5pbmdFbGVtZW50ID0gb3BlbmluZ0VsZW1lbnQ7
CisgICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47CisgICAgICAgICAgICB0aGlz
LmNsb3NpbmdFbGVtZW50ID0gY2xvc2luZ0VsZW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIEpTWEVsZW1lbnQ7CisgICAgfSgpKTsKKyAgICBleHBvcnRzLkpTWEVsZW1lbnQgPSBKU1hF
bGVtZW50OworICAgIHZhciBKU1hFbXB0eUV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgeworICAg
ICAgICBmdW5jdGlvbiBKU1hFbXB0eUV4cHJlc3Npb24oKSB7CisgICAgICAgICAgICB0aGlzLnR5
cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWEVtcHR5RXhwcmVzc2lvbjsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gSlNYRW1wdHlFeHByZXNzaW9uOworICAgIH0oKSk7CisgICAgZXhw
b3J0cy5KU1hFbXB0eUV4cHJlc3Npb24gPSBKU1hFbXB0eUV4cHJlc3Npb247CisgICAgdmFyIEpT
WEV4cHJlc3Npb25Db250YWluZXIgPSAoZnVuY3Rpb24gKCkgeworICAgICAgICBmdW5jdGlvbiBK
U1hFeHByZXNzaW9uQ29udGFpbmVyKGV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgIHRoaXMudHlw
ZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjsKKyAgICAg
ICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEpTWEV4cHJlc3Npb25Db250YWluZXI7CisgICAgfSgpKTsKKyAgICBleHBvcnRzLkpT
WEV4cHJlc3Npb25Db250YWluZXIgPSBKU1hFeHByZXNzaW9uQ29udGFpbmVyOworICAgIHZhciBK
U1hJZGVudGlmaWVyID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZnVuY3Rpb24gSlNYSWRlbnRp
ZmllcihuYW1lKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3lu
dGF4LkpTWElkZW50aWZpZXI7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBKU1hJZGVudGlmaWVyOworICAgIH0oKSk7CisgICAgZXhwb3J0
cy5KU1hJZGVudGlmaWVyID0gSlNYSWRlbnRpZmllcjsKKyAgICB2YXIgSlNYTWVtYmVyRXhwcmVz
c2lvbiA9IChmdW5jdGlvbiAoKSB7CisgICAgICAgIGZ1bmN0aW9uIEpTWE1lbWJlckV4cHJlc3Np
b24ob2JqZWN0LCBwcm9wZXJ0eSkgeworICAgICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRh
eF8xLkpTWFN5bnRheC5KU1hNZW1iZXJFeHByZXNzaW9uOworICAgICAgICAgICAgdGhpcy5vYmpl
Y3QgPSBvYmplY3Q7CisgICAgICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIEpTWE1lbWJlckV4cHJlc3Npb247CisgICAgfSgpKTsKKyAg
ICBleHBvcnRzLkpTWE1lbWJlckV4cHJlc3Npb24gPSBKU1hNZW1iZXJFeHByZXNzaW9uOworICAg
IHZhciBKU1hBdHRyaWJ1dGUgPSAoZnVuY3Rpb24gKCkgeworICAgICAgICBmdW5jdGlvbiBKU1hB
dHRyaWJ1dGUobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50
YXhfMS5KU1hTeW50YXguSlNYQXR0cmlidXRlOworICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFt
ZTsKKyAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gSlNYQXR0cmlidXRlOworICAgIH0oKSk7CisgICAgZXhwb3J0cy5KU1hBdHRyaWJ1dGUg
PSBKU1hBdHRyaWJ1dGU7CisgICAgdmFyIEpTWE5hbWVzcGFjZWROYW1lID0gKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgZnVuY3Rpb24gSlNYTmFtZXNwYWNlZE5hbWUobmFtZXNwYWNlLCBuYW1lKSB7
CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE5hbWVz
cGFjZWROYW1lOworICAgICAgICAgICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7CisgICAg
ICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICB9CisgICAgICAgIHJldHVybiBKU1hO
YW1lc3BhY2VkTmFtZTsKKyAgICB9KCkpOworICAgIGV4cG9ydHMuSlNYTmFtZXNwYWNlZE5hbWUg
PSBKU1hOYW1lc3BhY2VkTmFtZTsKKyAgICB2YXIgSlNYT3BlbmluZ0VsZW1lbnQgPSAoZnVuY3Rp
b24gKCkgeworICAgICAgICBmdW5jdGlvbiBKU1hPcGVuaW5nRWxlbWVudChuYW1lLCBzZWxmQ2xv
c2luZywgYXR0cmlidXRlcykgeworICAgICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8x
LkpTWFN5bnRheC5KU1hPcGVuaW5nRWxlbWVudDsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IG5h
bWU7CisgICAgICAgICAgICB0aGlzLnNlbGZDbG9zaW5nID0gc2VsZkNsb3Npbmc7CisgICAgICAg
ICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBKU1hPcGVuaW5nRWxlbWVudDsKKyAgICB9KCkpOworICAgIGV4cG9ydHMuSlNYT3Blbmlu
Z0VsZW1lbnQgPSBKU1hPcGVuaW5nRWxlbWVudDsKKyAgICB2YXIgSlNYU3ByZWFkQXR0cmlidXRl
ID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZnVuY3Rpb24gSlNYU3ByZWFkQXR0cmlidXRlKGFy
Z3VtZW50KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4
LkpTWFNwcmVhZEF0dHJpYnV0ZTsKKyAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVu
dDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNYU3ByZWFkQXR0cmlidXRlOworICAgIH0o
KSk7CisgICAgZXhwb3J0cy5KU1hTcHJlYWRBdHRyaWJ1dGUgPSBKU1hTcHJlYWRBdHRyaWJ1dGU7
CisgICAgdmFyIEpTWFRleHQgPSAoZnVuY3Rpb24gKCkgeworICAgICAgICBmdW5jdGlvbiBKU1hU
ZXh0KHZhbHVlLCByYXcpIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5K
U1hTeW50YXguSlNYVGV4dDsKKyAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICAg
ICAgICAgIHRoaXMucmF3ID0gcmF3OworICAgICAgICB9CisgICAgICAgIHJldHVybiBKU1hUZXh0
OworICAgIH0oKSk7CisgICAgZXhwb3J0cy5KU1hUZXh0ID0gSlNYVGV4dDsKKworCisvKioqLyB9
LAorLyogNiAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisgICAgZXhwb3J0cy5KU1hTeW50YXggPSB7CisgICAgICAgIEpTWEF0dHJpYnV0
ZTogJ0pTWEF0dHJpYnV0ZScsCisgICAgICAgIEpTWENsb3NpbmdFbGVtZW50OiAnSlNYQ2xvc2lu
Z0VsZW1lbnQnLAorICAgICAgICBKU1hFbGVtZW50OiAnSlNYRWxlbWVudCcsCisgICAgICAgIEpT
WEVtcHR5RXhwcmVzc2lvbjogJ0pTWEVtcHR5RXhwcmVzc2lvbicsCisgICAgICAgIEpTWEV4cHJl
c3Npb25Db250YWluZXI6ICdKU1hFeHByZXNzaW9uQ29udGFpbmVyJywKKyAgICAgICAgSlNYSWRl
bnRpZmllcjogJ0pTWElkZW50aWZpZXInLAorICAgICAgICBKU1hNZW1iZXJFeHByZXNzaW9uOiAn
SlNYTWVtYmVyRXhwcmVzc2lvbicsCisgICAgICAgIEpTWE5hbWVzcGFjZWROYW1lOiAnSlNYTmFt
ZXNwYWNlZE5hbWUnLAorICAgICAgICBKU1hPcGVuaW5nRWxlbWVudDogJ0pTWE9wZW5pbmdFbGVt
ZW50JywKKyAgICAgICAgSlNYU3ByZWFkQXR0cmlidXRlOiAnSlNYU3ByZWFkQXR0cmlidXRlJywK
KyAgICAgICAgSlNYVGV4dDogJ0pTWFRleHQnCisgICAgfTsKKworCisvKioqLyB9LAorLyogNyAq
LwogLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CiAKICAgICAidXNlIHN0cmljdCI7CiAgICAgdmFyIHN5bnRheF8xID0gX193ZWJwYWNrX3JlcXVp
cmVfXygyKTsKKyAgICAvKiB0c2xpbnQ6ZGlzYWJsZTptYXgtY2xhc3Nlcy1wZXItZmlsZSAqLwog
ICAgIHZhciBBcnJheUV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewogICAgICAgICBmdW5jdGlv
biBBcnJheUV4cHJlc3Npb24oZWxlbWVudHMpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5
bnRheF8xLlN5bnRheC5BcnJheUV4cHJlc3Npb247CkBAIC01MjQ0LDYgKzE0NzksMTMgQEAgZnVu
Y3Rpb24gSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CiAgICAgICAg
IHJldHVybiBJZlN0YXRlbWVudDsKICAgICB9KCkpOwogICAgIGV4cG9ydHMuSWZTdGF0ZW1lbnQg
PSBJZlN0YXRlbWVudDsKKyAgICB2YXIgSW1wb3J0ID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ZnVuY3Rpb24gSW1wb3J0KCkgeworICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3lu
dGF4LkltcG9ydDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW1wb3J0OworICAgIH0oKSk7
CisgICAgZXhwb3J0cy5JbXBvcnQgPSBJbXBvcnQ7CiAgICAgdmFyIEltcG9ydERlY2xhcmF0aW9u
ID0gKGZ1bmN0aW9uICgpIHsKICAgICAgICAgZnVuY3Rpb24gSW1wb3J0RGVjbGFyYXRpb24oc3Bl
Y2lmaWVycywgc291cmNlKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50
YXguSW1wb3J0RGVjbGFyYXRpb247CkBAIC01MzY1LDExICsxNjA3LDExIEBAIGZ1bmN0aW9uIFBy
b3BlcnR5KGtpbmQsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCBtZXRob2QsIHNob3J0aGFuZCkgewog
ICAgIH0oKSk7CiAgICAgZXhwb3J0cy5Qcm9wZXJ0eSA9IFByb3BlcnR5OwogICAgIHZhciBSZWdl
eExpdGVyYWwgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBSZWdleExpdGVyYWwo
dmFsdWUsIHJhdywgcmVnZXgpIHsKKyAgICAgICAgZnVuY3Rpb24gUmVnZXhMaXRlcmFsKHZhbHVl
LCByYXcsIHBhdHRlcm4sIGZsYWdzKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguTGl0ZXJhbDsKICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgICAg
ICAgICAgIHRoaXMucmF3ID0gcmF3OwotICAgICAgICAgICAgdGhpcy5yZWdleCA9IHJlZ2V4Owor
ICAgICAgICAgICAgdGhpcy5yZWdleCA9IHsgcGF0dGVybjogcGF0dGVybiwgZmxhZ3M6IGZsYWdz
IH07CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFJlZ2V4TGl0ZXJhbDsKICAgICB9KCkpOwpA
QCAtNTM4Miw2ICsxNjI0LDE0IEBAIGZ1bmN0aW9uIFJlc3RFbGVtZW50KGFyZ3VtZW50KSB7CiAg
ICAgICAgIHJldHVybiBSZXN0RWxlbWVudDsKICAgICB9KCkpOwogICAgIGV4cG9ydHMuUmVzdEVs
ZW1lbnQgPSBSZXN0RWxlbWVudDsKKyAgICB2YXIgUmVzdFByb3BlcnR5ID0gKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgZnVuY3Rpb24gUmVzdFByb3BlcnR5KGFyZ3VtZW50KSB7CisgICAgICAgICAg
ICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguUmVzdFByb3BlcnR5OworICAgICAgICAgICAg
dGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiBSZXN0
UHJvcGVydHk7CisgICAgfSgpKTsKKyAgICBleHBvcnRzLlJlc3RQcm9wZXJ0eSA9IFJlc3RQcm9w
ZXJ0eTsKICAgICB2YXIgUmV0dXJuU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ZnVuY3Rpb24gUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KSB7CiAgICAgICAgICAgICB0aGlzLnR5
cGUgPSBzeW50YXhfMS5TeW50YXguUmV0dXJuU3RhdGVtZW50OwpAQCAtNTQxNSw2ICsxNjY1LDE0
IEBAIGZ1bmN0aW9uIFNwcmVhZEVsZW1lbnQoYXJndW1lbnQpIHsKICAgICAgICAgcmV0dXJuIFNw
cmVhZEVsZW1lbnQ7CiAgICAgfSgpKTsKICAgICBleHBvcnRzLlNwcmVhZEVsZW1lbnQgPSBTcHJl
YWRFbGVtZW50OworICAgIHZhciBTcHJlYWRQcm9wZXJ0eSA9IChmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGZ1bmN0aW9uIFNwcmVhZFByb3BlcnR5KGFyZ3VtZW50KSB7CisgICAgICAgICAgICB0aGlz
LnR5cGUgPSBzeW50YXhfMS5TeW50YXguU3ByZWFkUHJvcGVydHk7CisgICAgICAgICAgICB0aGlz
LmFyZ3VtZW50ID0gYXJndW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFNwcmVhZFBy
b3BlcnR5OworICAgIH0oKSk7CisgICAgZXhwb3J0cy5TcHJlYWRQcm9wZXJ0eSA9IFNwcmVhZFBy
b3BlcnR5OwogICAgIHZhciBTdGF0aWNNZW1iZXJFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsK
ICAgICAgICAgZnVuY3Rpb24gU3RhdGljTWVtYmVyRXhwcmVzc2lvbihvYmplY3QsIHByb3BlcnR5
KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguTWVtYmVyRXhwcmVz
c2lvbjsKQEAgLTU1NDgsNTY5ICsxODA2LDQ1NDUgQEAgZnVuY3Rpb24gV2hpbGVTdGF0ZW1lbnQo
dGVzdCwgYm9keSkgewogICAgICAgICB9CiAgICAgICAgIHJldHVybiBXaGlsZVN0YXRlbWVudDsK
ICAgICB9KCkpOwotICAgIGV4cG9ydHMuV2hpbGVTdGF0ZW1lbnQgPSBXaGlsZVN0YXRlbWVudDsK
LSAgICB2YXIgV2l0aFN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9u
IFdpdGhTdGF0ZW1lbnQob2JqZWN0LCBib2R5KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguV2l0aFN0YXRlbWVudDsKLSAgICAgICAgICAgIHRoaXMub2JqZWN0ID0g
b2JqZWN0OwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICBleHBvcnRzLldoaWxl
U3RhdGVtZW50ID0gV2hpbGVTdGF0ZW1lbnQ7CisgICAgdmFyIFdpdGhTdGF0ZW1lbnQgPSAoZnVu
Y3Rpb24gKCkgeworICAgICAgICBmdW5jdGlvbiBXaXRoU3RhdGVtZW50KG9iamVjdCwgYm9keSkg
eworICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LldpdGhTdGF0ZW1lbnQ7
CisgICAgICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsKKyAgICAgICAgICAgIHRoaXMuYm9k
eSA9IGJvZHk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdpdGhTdGF0ZW1lbnQ7CisgICAg
fSgpKTsKKyAgICBleHBvcnRzLldpdGhTdGF0ZW1lbnQgPSBXaXRoU3RhdGVtZW50OworICAgIHZh
ciBZaWVsZEV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgeworICAgICAgICBmdW5jdGlvbiBZaWVs
ZEV4cHJlc3Npb24oYXJndW1lbnQsIGRlbGVnYXRlKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUg
PSBzeW50YXhfMS5TeW50YXguWWllbGRFeHByZXNzaW9uOworICAgICAgICAgICAgdGhpcy5hcmd1
bWVudCA9IGFyZ3VtZW50OworICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBZaWVsZEV4cHJlc3Npb247CisgICAgfSgpKTsKKyAg
ICBleHBvcnRzLllpZWxkRXhwcmVzc2lvbiA9IFlpZWxkRXhwcmVzc2lvbjsKKworCisvKioqLyB9
LAorLyogOCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyAgICAidXNlIHN0cmljdCI7CisgICAgdmFyIGFzc2VydF8xID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg5KTsKKyAgICB2YXIgZXJyb3JfaGFuZGxlcl8xID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygxMCk7CisgICAgdmFyIG1lc3NhZ2VzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEx
KTsKKyAgICB2YXIgTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7CisgICAgdmFyIHNjYW5u
ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpOworICAgIHZhciBzeW50YXhfMSA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMik7CisgICAgdmFyIHRva2VuXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDEzKTsKKyAgICB2YXIgQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciA9ICdBcnJvd1BhcmFtZXRl
clBsYWNlSG9sZGVyJzsKKyAgICB2YXIgUGFyc2VyID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ZnVuY3Rpb24gUGFyc2VyKGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB7CisgICAgICAgICAgICBp
ZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfQorICAgICAgICAgICAgdGhp
cy5jb25maWcgPSB7CisgICAgICAgICAgICAgICAgcmFuZ2U6ICh0eXBlb2Ygb3B0aW9ucy5yYW5n
ZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlLAorICAgICAgICAgICAgICAgIGxvYzog
KHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmxvYywKKyAgICAg
ICAgICAgICAgICBzb3VyY2U6IG51bGwsCisgICAgICAgICAgICAgICAgdG9rZW5zOiAodHlwZW9m
IG9wdGlvbnMudG9rZW5zID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMudG9rZW5zLAorICAgICAg
ICAgICAgICAgIGNvbW1lbnQ6ICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicp
ICYmIG9wdGlvbnMuY29tbWVudCwKKyAgICAgICAgICAgICAgICB0b2xlcmFudDogKHR5cGVvZiBv
cHRpb25zLnRvbGVyYW50ID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMudG9sZXJhbnQKKyAgICAg
ICAgICAgIH07CisgICAgICAgICAgICBpZiAodGhpcy5jb25maWcubG9jICYmIG9wdGlvbnMuc291
cmNlICYmIG9wdGlvbnMuc291cmNlICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5j
b25maWcuc291cmNlID0gU3RyaW5nKG9wdGlvbnMuc291cmNlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgICAgICAgICAgIHRoaXMuZXJy
b3JIYW5kbGVyID0gbmV3IGVycm9yX2hhbmRsZXJfMS5FcnJvckhhbmRsZXIoKTsKKyAgICAgICAg
ICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYW50ID0gdGhpcy5jb25maWcudG9sZXJhbnQ7Cisg
ICAgICAgICAgICB0aGlzLnNjYW5uZXIgPSBuZXcgc2Nhbm5lcl8xLlNjYW5uZXIoY29kZSwgdGhp
cy5lcnJvckhhbmRsZXIpOworICAgICAgICAgICAgdGhpcy5zY2FubmVyLnRyYWNrQ29tbWVudCA9
IHRoaXMuY29uZmlnLmNvbW1lbnQ7CisgICAgICAgICAgICB0aGlzLm9wZXJhdG9yUHJlY2VkZW5j
ZSA9IHsKKyAgICAgICAgICAgICAgICAnKSc6IDAsCisgICAgICAgICAgICAgICAgJzsnOiAwLAor
ICAgICAgICAgICAgICAgICcsJzogMCwKKyAgICAgICAgICAgICAgICAnPSc6IDAsCisgICAgICAg
ICAgICAgICAgJ10nOiAwLAorICAgICAgICAgICAgICAgICd8fCc6IDEsCisgICAgICAgICAgICAg
ICAgJyYmJzogMiwKKyAgICAgICAgICAgICAgICAnfCc6IDMsCisgICAgICAgICAgICAgICAgJ14n
OiA0LAorICAgICAgICAgICAgICAgICcmJzogNSwKKyAgICAgICAgICAgICAgICAnPT0nOiA2LAor
ICAgICAgICAgICAgICAgICchPSc6IDYsCisgICAgICAgICAgICAgICAgJz09PSc6IDYsCisgICAg
ICAgICAgICAgICAgJyE9PSc6IDYsCisgICAgICAgICAgICAgICAgJzwnOiA3LAorICAgICAgICAg
ICAgICAgICc+JzogNywKKyAgICAgICAgICAgICAgICAnPD0nOiA3LAorICAgICAgICAgICAgICAg
ICc+PSc6IDcsCisgICAgICAgICAgICAgICAgJzw8JzogOCwKKyAgICAgICAgICAgICAgICAnPj4n
OiA4LAorICAgICAgICAgICAgICAgICc+Pj4nOiA4LAorICAgICAgICAgICAgICAgICcrJzogOSwK
KyAgICAgICAgICAgICAgICAnLSc6IDksCisgICAgICAgICAgICAgICAgJyonOiAxMSwKKyAgICAg
ICAgICAgICAgICAnLyc6IDExLAorICAgICAgICAgICAgICAgICclJzogMTEKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICB0aGlzLmxvb2thaGVhZCA9IHsKKyAgICAgICAgICAgICAgICB0eXBl
OiAyIC8qIEVPRiAqLywKKyAgICAgICAgICAgICAgICB2YWx1ZTogJycsCisgICAgICAgICAgICAg
ICAgbGluZU51bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAg
bGluZVN0YXJ0OiAwLAorICAgICAgICAgICAgICAgIHN0YXJ0OiAwLAorICAgICAgICAgICAgICAg
IGVuZDogMAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRoaXMuaGFzTGluZVRlcm1pbmF0
b3IgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHsKKyAgICAgICAgICAgICAg
ICBpc01vZHVsZTogZmFsc2UsCisgICAgICAgICAgICAgICAgYXdhaXQ6IGZhbHNlLAorICAgICAg
ICAgICAgICAgIGFsbG93SW46IHRydWUsCisgICAgICAgICAgICAgICAgYWxsb3dTdHJpY3REaXJl
Y3RpdmU6IHRydWUsCisgICAgICAgICAgICAgICAgYWxsb3dZaWVsZDogdHJ1ZSwKKyAgICAgICAg
ICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I6IG51bGwsCisgICAgICAgICAg
ICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0OiBmYWxzZSwKKyAgICAgICAgICAgICAgICBpc0JpbmRp
bmdFbGVtZW50OiBmYWxzZSwKKyAgICAgICAgICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2Us
CisgICAgICAgICAgICAgICAgaW5JdGVyYXRpb246IGZhbHNlLAorICAgICAgICAgICAgICAgIGlu
U3dpdGNoOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBsYWJlbFNldDoge30sCisgICAgICAgICAg
ICAgICAgc3RyaWN0OiBmYWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRoaXMudG9r
ZW5zID0gW107CisgICAgICAgICAgICB0aGlzLnN0YXJ0TWFya2VyID0geworICAgICAgICAgICAg
ICAgIGluZGV4OiAwLAorICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5lTnVt
YmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogMAorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIHRoaXMubGFzdE1hcmtlciA9IHsKKyAgICAgICAgICAgICAgICBpbmRleDogMCwKKyAgICAg
ICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKKyAgICAgICAgICAgICAg
ICBjb2x1bW46IDAKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigp
OworICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyID0geworICAgICAgICAgICAgICAgIGluZGV4
OiB0aGlzLnNjYW5uZXIuaW5kZXgsCisgICAgICAgICAgICAgICAgbGluZTogdGhpcy5zY2FubmVy
LmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnNjYW5uZXIuaW5kZXgg
LSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAg
ICAgIFBhcnNlci5wcm90b3R5cGUudGhyb3dFcnJvciA9IGZ1bmN0aW9uIChtZXNzYWdlRm9ybWF0
KSB7CisgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBf
aSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZh
bHVlc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKKyAg
ICAgICAgICAgIHZhciBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoLyUoXGQpL2csIGZ1bmN0
aW9uICh3aG9sZSwgaWR4KSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGlkeCA8
IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpOworICAg
ICAgICAgICAgICAgIHJldHVybiBhcmdzW2lkeF07CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIHZhciBpbmRleCA9IHRoaXMubGFzdE1hcmtlci5pbmRleDsKKyAgICAgICAgICAgIHZhciBs
aW5lID0gdGhpcy5sYXN0TWFya2VyLmxpbmU7CisgICAgICAgICAgICB2YXIgY29sdW1uID0gdGhp
cy5sYXN0TWFya2VyLmNvbHVtbiArIDE7CisgICAgICAgICAgICB0aHJvdyB0aGlzLmVycm9ySGFu
ZGxlci5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cpOworICAgICAgICB9Owor
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnRvbGVyYXRlRXJyb3IgPSBmdW5jdGlvbiAobWVzc2Fn
ZUZvcm1hdCkgeworICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdOworICAgICAgICAgICAgZm9y
ICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAg
ICAgICB2YWx1ZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywg
MSk7CisgICAgICAgICAgICB2YXIgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8lKFxkKS9n
LCBmdW5jdGlvbiAod2hvbGUsIGlkeCkgeworICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2Vy
dChpZHggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2Un
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpZHhdOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmxhc3RNYXJrZXIuaW5kZXg7CisgICAgICAgICAg
ICB2YXIgbGluZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOworICAgICAgICAgICAgdmFyIGNv
bHVtbiA9IHRoaXMubGFzdE1hcmtlci5jb2x1bW4gKyAxOworICAgICAgICAgICAgdGhpcy5lcnJv
ckhhbmRsZXIudG9sZXJhdGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cpOworICAgICAg
ICB9OworICAgICAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0aGUgdG9rZW4u
CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUudW5leHBlY3RlZFRva2VuRXJyb3IgPSBmdW5jdGlv
biAodG9rZW4sIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHZhciBtc2cgPSBtZXNzYWdlIHx8IG1l
c3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOworICAgICAgICAgICAgdmFyIHZhbHVl
OworICAgICAgICAgICAgaWYgKHRva2VuKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtZXNzYWdl
KSB7CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICh0b2tlbi50eXBlID09PSAyIC8qIEVPRiAq
LykgPyBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1MgOgorICAgICAgICAgICAgICAg
ICAgICAgICAgKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLykgPyBtZXNzYWdlc18x
Lk1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVyIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodG9rZW4udHlwZSA9PT0gNiAvKiBOdW1lcmljTGl0ZXJhbCAqLykgPyBtZXNzYWdlc18x
Lk1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodG9rZW4udHlwZSA9PT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSA/IG1lc3NhZ2VzXzEu
TWVzc2FnZXMuVW5leHBlY3RlZFN0cmluZyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodG9rZW4udHlwZSA9PT0gMTAgLyogVGVtcGxhdGUgKi8pID8gbWVzc2FnZXNfMS5N
ZXNzYWdlcy5VbmV4cGVjdGVkVGVtcGxhdGUgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOworICAgICAg
ICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzRnV0dXJlUmVzZXJ2ZWRXb3Jk
KHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IG1lc3Nh
Z2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFJlc2VydmVkOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0LnN0cmlj
dCAmJiB0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMu
U3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbHVlID0g
dG9rZW4udmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2YWx1ZSA9ICdJTExFR0FMJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1z
ZyA9IG1zZy5yZXBsYWNlKCclMCcsIHZhbHVlKTsKKyAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0
eXBlb2YgdG9rZW4ubGluZU51bWJlciA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgICAgICB2
YXIgaW5kZXggPSB0b2tlbi5zdGFydDsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHRva2Vu
LmxpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgdmFyIGxhc3RNYXJrZXJMaW5lU3RhcnQgPSB0
aGlzLmxhc3RNYXJrZXIuaW5kZXggLSB0aGlzLmxhc3RNYXJrZXIuY29sdW1uOworICAgICAgICAg
ICAgICAgIHZhciBjb2x1bW4gPSB0b2tlbi5zdGFydCAtIGxhc3RNYXJrZXJMaW5lU3RhcnQgKyAx
OworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5jcmVhdGVFcnJvcihp
bmRleCwgbGluZSwgY29sdW1uLCBtc2cpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5sYXN0TWFya2VyLmluZGV4Owor
ICAgICAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5sYXN0TWFya2VyLmxpbmU7CisgICAgICAg
ICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGFzdE1hcmtlci5jb2x1bW4gKyAxOworICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5jcmVhdGVFcnJvcihpbmRleCwgbGlu
ZSwgY29sdW1uLCBtc2cpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnRocm93VW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24gKHRva2VuLCBtZXNz
YWdlKSB7CisgICAgICAgICAgICB0aHJvdyB0aGlzLnVuZXhwZWN0ZWRUb2tlbkVycm9yKHRva2Vu
LCBtZXNzYWdlKTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS50b2xlcmF0
ZVVuZXhwZWN0ZWRUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbiwgbWVzc2FnZSkgeworICAgICAgICAg
ICAgdGhpcy5lcnJvckhhbmRsZXIudG9sZXJhdGUodGhpcy51bmV4cGVjdGVkVG9rZW5FcnJvcih0
b2tlbiwgbWVzc2FnZSkpOworICAgICAgICB9OworICAgICAgICBQYXJzZXIucHJvdG90eXBlLmNv
bGxlY3RDb21tZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5jb25m
aWcuY29tbWVudCkgeworICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZh
ciBjb21tZW50cyA9IHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoY29tbWVudHMubGVuZ3RoID4gMCAmJiB0aGlzLmRlbGVnYXRlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudHMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gY29tbWVudHNbaV07CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbm9kZSA9IHZvaWQgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZS5tdWx0aUxpbmUgPyAn
QmxvY2tDb21tZW50JyA6ICdMaW5lQ29tbWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWU6IHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UoZS5zbGljZVswXSwgZS5zbGljZVsx
XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy5jb25maWcucmFuZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LnJhbmdlID0gZS5yYW5nZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sb2MpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLmxvYyA9IGUubG9jOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGFkYXRhID0geworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6
IGUubG9jLnN0YXJ0LmxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVt
bjogZS5sb2Muc3RhcnQuY29sdW1uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQ6IGUucmFuZ2VbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuZDogeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lOiBlLmxvYy5lbmQubGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29sdW1uOiBlLmxvYy5lbmQuY29sdW1uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvZmZzZXQ6IGUucmFuZ2VbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5k
ZWxlZ2F0ZShub2RlLCBtZXRhZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIC8vIEZyb20gaW50
ZXJuYWwgcmVwcmVzZW50YXRpb24gdG8gYW4gZXh0ZXJuYWwgc3RydWN0dXJlCisgICAgICAgIFBh
cnNlci5wcm90b3R5cGUuZ2V0VG9rZW5SYXcgPSBmdW5jdGlvbiAodG9rZW4pIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5l
bmQpOworICAgICAgICB9OworICAgICAgICBQYXJzZXIucHJvdG90eXBlLmNvbnZlcnRUb2tlbiA9
IGZ1bmN0aW9uICh0b2tlbikgeworICAgICAgICAgICAgdmFyIHQgPSB7CisgICAgICAgICAgICAg
ICAgdHlwZTogdG9rZW5fMS5Ub2tlbk5hbWVbdG9rZW4udHlwZV0sCisgICAgICAgICAgICAgICAg
dmFsdWU6IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pCisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgaWYgKHRoaXMuY29uZmlnLnJhbmdlKSB7CisgICAgICAgICAgICAgICAgdC5yYW5nZSA9IFt0
b2tlbi5zdGFydCwgdG9rZW4uZW5kXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0
aGlzLmNvbmZpZy5sb2MpIHsKKyAgICAgICAgICAgICAgICB0LmxvYyA9IHsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMuc3Rh
cnRNYXJrZXIubGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zdGFy
dE1hcmtlci5jb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAg
ICAgZW5kOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIubGlu
ZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zY2FubmVyLmlu
ZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydAorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBl
ID09PSA5IC8qIFJlZ3VsYXJFeHByZXNzaW9uICovKSB7CisgICAgICAgICAgICAgICAgdmFyIHBh
dHRlcm4gPSB0b2tlbi5wYXR0ZXJuOworICAgICAgICAgICAgICAgIHZhciBmbGFncyA9IHRva2Vu
LmZsYWdzOworICAgICAgICAgICAgICAgIHQucmVnZXggPSB7IHBhdHRlcm46IHBhdHRlcm4sIGZs
YWdzOiBmbGFncyB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHQ7CisgICAg
ICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUubmV4dFRva2VuID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAgICB0
aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisgICAgICAgICAgICB0
aGlzLmxhc3RNYXJrZXIubGluZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOworICAgICAgICAg
ICAgdGhpcy5sYXN0TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nh
bm5lci5saW5lU3RhcnQ7CisgICAgICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpOworICAg
ICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pbmRleCAhPT0gdGhpcy5zdGFydE1hcmtlci5pbmRl
eCkgeworICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5u
ZXIuaW5kZXg7CisgICAgICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lID0gdGhpcy5z
Y2FubmVyLmxpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlci5jb2x1
bW4gPSB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7CisgICAg
ICAgICAgICB0aGlzLmhhc0xpbmVUZXJtaW5hdG9yID0gKHRva2VuLmxpbmVOdW1iZXIgIT09IG5l
eHQubGluZU51bWJlcik7CisgICAgICAgICAgICBpZiAobmV4dCAmJiB0aGlzLmNvbnRleHQuc3Ry
aWN0ICYmIG5leHQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQobmV4dC52YWx1ZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dC50eXBlID0gNCAvKiBLZXl3b3JkICovOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMubG9va2FoZWFk
ID0gbmV4dDsKKyAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy50b2tlbnMgJiYgbmV4dC50eXBl
ICE9PSAyIC8qIEVPRiAqLykgeworICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godGhp
cy5jb252ZXJ0VG9rZW4obmV4dCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRva2VuOworICAgICAgICB9OworICAgICAgICBQYXJzZXIucHJvdG90eXBlLm5leHRSZWdleFRv
a2VuID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsK
KyAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMuc2Nhbm5lci5zY2FuUmVnRXhwKCk7CisgICAg
ICAgICAgICBpZiAodGhpcy5jb25maWcudG9rZW5zKSB7CisgICAgICAgICAgICAgICAgLy8gUG9w
IHRoZSBwcmV2aW91cyB0b2tlbiwgJy8nIG9yICcvPScKKyAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIGFkZGVkIGZyb20gdGhlIGxvb2thaGVhZCB0b2tlbi4KKyAgICAgICAgICAgICAgICB0aGlz
LnRva2Vucy5wb3AoKTsKKyAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29u
dmVydFRva2VuKHRva2VuKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBQcmltZSB0
aGUgbmV4dCBsb29rYWhlYWQuCisgICAgICAgICAgICB0aGlzLmxvb2thaGVhZCA9IHRva2VuOwor
ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIHJldHVybiB0b2tlbjsK
KyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5jcmVhdGVOb2RlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBpbmRleDogdGhp
cy5zdGFydE1hcmtlci5pbmRleCwKKyAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLnN0YXJ0TWFy
a2VyLmxpbmUsCisgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnN0YXJ0TWFya2VyLmNvbHVt
bgorICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5z
dGFydE5vZGUgPSBmdW5jdGlvbiAodG9rZW4pIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgaW5kZXg6IHRva2VuLnN0YXJ0LAorICAgICAgICAgICAgICAgIGxpbmU6IHRv
a2VuLmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiB0b2tlbi5zdGFydCAtIHRv
a2VuLmxpbmVTdGFydAorICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2Vy
LnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uIChtYXJrZXIsIG5vZGUpIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLmNvbmZpZy5yYW5nZSkgeworICAgICAgICAgICAgICAgIG5vZGUucmFuZ2Ug
PSBbbWFya2VyLmluZGV4LCB0aGlzLmxhc3RNYXJrZXIuaW5kZXhdOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxvYykgeworICAgICAgICAgICAgICAgIG5vZGUu
bG9jID0geworICAgICAgICAgICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZTogbWFya2VyLmxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46
IG1hcmtlci5jb2x1bW4sCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgIGVuZDogeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5sYXN0TWFya2Vy
LmxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMubGFzdE1hcmtlci5j
b2x1bW4KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNvdXJjZSkgeworICAgICAgICAgICAgICAgICAgICBu
b2RlLmxvYy5zb3VyY2UgPSB0aGlzLmNvbmZpZy5zb3VyY2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuZGVsZWdhdGUpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgbWV0YWRhdGEgPSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBtYXJrZXIubGluZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbjogbWFya2VyLmNvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9mZnNldDogbWFya2VyLmluZGV4CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgICAgIGVuZDogeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5sYXN0
TWFya2VyLmxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMubGFzdE1h
cmtlci5jb2x1bW4sCisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMubGFzdE1h
cmtlci5pbmRleAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlKG5vZGUsIG1ldGFkYXRhKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9OworICAgICAgICAvLyBFeHBl
Y3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgorICAg
ICAgICAvLyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KKyAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS5leHBlY3QgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZh
ciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAh
PT0gNyAvKiBQdW5jdHVhdG9yICovIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgeworICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworICAgICAgICAgICAg
fQorICAgICAgICB9OworICAgICAgICAvLyBRdWlldGx5IGV4cGVjdCBhIGNvbW1hIHdoZW4gaW4g
dG9sZXJhbnQgbW9kZSwgb3RoZXJ3aXNlIGRlbGVnYXRlcyB0byBleHBlY3QoKS4KKyAgICAgICAg
UGFyc2VyLnByb3RvdHlwZS5leHBlY3RDb21tYVNlcGFyYXRvciA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy50b2xlcmFudCkgeworICAgICAgICAgICAgICAgIHZh
ciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBl
ID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgdG9rZW4udmFsdWUgPT09ICcsJykgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYg
dG9rZW4udmFsdWUgPT09ICc7JykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOworICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRv
a2VuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgn
LCcpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICAvLyBFeHBlY3QgdGhlIG5l
eHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBrZXl3b3JkLgorICAgICAgICAvLyBJZiBu
b3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KKyAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5leHBlY3RLZXl3b3JkID0gZnVuY3Rpb24gKGtleXdvcmQpIHsKKyAgICAgICAgICAgIHZhciB0
b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0g
NCAvKiBLZXl3b3JkICovIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNo
ZXMgdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgorICAgICAgICBQYXJzZXIucHJvdG90eXBlLm1h
dGNoID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5sb29rYWhl
YWQudHlwZSA9PT0gNyAvKiBQdW5jdHVhdG9yICovICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09
PSB2YWx1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQg
dG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleXdvcmQKKyAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5tYXRjaEtleXdvcmQgPSBmdW5jdGlvbiAoa2V5d29yZCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAmJiB0aGlzLmxvb2th
aGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gUmV0dXJuIHRy
dWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNvbnRleHR1YWwga2V5
d29yZAorICAgICAgICAvLyAod2hlcmUgYW4gaWRlbnRpZmllciBpcyBzb21ldGltZXMgYSBrZXl3
b3JkIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5t
YXRjaENvbnRleHR1YWxLZXl3b3JkID0gZnVuY3Rpb24gKGtleXdvcmQpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLmxvb2thaGVhZC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8gJiYgdGhp
cy5sb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7CisgICAgICAgIH07CisgICAgICAgIC8vIFJl
dHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IKKyAg
ICAgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaEFzc2lnbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSA3IC8qIFB1bmN0dWF0b3IgKi8pIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgb3AgPSB0aGlzLmxvb2thaGVhZC52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBvcCA9
PT0gJz0nIHx8CisgICAgICAgICAgICAgICAgb3AgPT09ICcqPScgfHwKKyAgICAgICAgICAgICAg
ICBvcCA9PT0gJyoqPScgfHwKKyAgICAgICAgICAgICAgICBvcCA9PT0gJy89JyB8fAorICAgICAg
ICAgICAgICAgIG9wID09PSAnJT0nIHx8CisgICAgICAgICAgICAgICAgb3AgPT09ICcrPScgfHwK
KyAgICAgICAgICAgICAgICBvcCA9PT0gJy09JyB8fAorICAgICAgICAgICAgICAgIG9wID09PSAn
PDw9JyB8fAorICAgICAgICAgICAgICAgIG9wID09PSAnPj49JyB8fAorICAgICAgICAgICAgICAg
IG9wID09PSAnPj4+PScgfHwKKyAgICAgICAgICAgICAgICBvcCA9PT0gJyY9JyB8fAorICAgICAg
ICAgICAgICAgIG9wID09PSAnXj0nIHx8CisgICAgICAgICAgICAgICAgb3AgPT09ICd8PSc7Cisg
ICAgICAgIH07CisgICAgICAgIC8vIENvdmVyIGdyYW1tYXIgc3VwcG9ydC4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gV2hlbiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24gcG9zaXRpb24gc3RhcnRz
IHdpdGggYW4gbGVmdCBwYXJlbnRoZXNpcywgdGhlIGRldGVybWluYXRpb24gb2YgdGhlIHR5cGUK
KyAgICAgICAgLy8gb2YgdGhlIHN5bnRheCBpcyB0byBiZSBkZWZlcnJlZCBhcmJpdHJhcmlseSBs
b25nIHVudGlsIHRoZSBlbmQgb2YgdGhlIHBhcmVudGhlc2VzIHBhaXIgKHBsdXMgYSBsb29rYWhl
YWQpCisgICAgICAgIC8vIG9yIHRoZSBmaXJzdCBjb21tYS4gVGhpcyBzaXR1YXRpb24gYWxzbyBk
ZWZlcnMgdGhlIGRldGVybWluYXRpb24gb2YgYWxsIHRoZSBleHByZXNzaW9ucyBuZXN0ZWQgaW4g
dGhlIHBhaXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwcm9kdWN0
aW9ucyB0aGF0IGNhbiBiZSBwYXJzZWQgaW4gYSBwYXJlbnRoZXNlcyBwYWlyIHRoYXQgbmVlZHMg
dG8gYmUgZGV0ZXJtaW5lZAorICAgICAgICAvLyBhZnRlciB0aGUgb3V0ZXJtb3N0IHBhaXIgaXMg
Y2xvc2VkLiBUaGV5IGFyZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAxLiBBc3NpZ25tZW50
RXhwcmVzc2lvbgorICAgICAgICAvLyAgIDIuIEJpbmRpbmdFbGVtZW50cworICAgICAgICAvLyAg
IDMuIEFzc2lnbm1lbnRUYXJnZXRzCisgICAgICAgIC8vCisgICAgICAgIC8vIEluIG9yZGVyIHRv
IGF2b2lkIGV4cG9uZW50aWFsIGJhY2t0cmFja2luZywgd2UgdXNlIHR3byBmbGFncyB0byBkZW5v
dGUgaWYgdGhlIHByb2R1Y3Rpb24gY2FuIGJlCisgICAgICAgIC8vIGJpbmRpbmcgZWxlbWVudCBv
ciBhc3NpZ25tZW50IHRhcmdldC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHRocmVlIHBy
b2R1Y3Rpb25zIGhhdmUgdGhlIHJlbGF0aW9uc2hpcDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
ICBCaW5kaW5nRWxlbWVudHMg4oqGIEFzc2lnbm1lbnRUYXJnZXRzIOKKhiBBc3NpZ25tZW50RXhw
cmVzc2lvbgorICAgICAgICAvLworICAgICAgICAvLyB3aXRoIGEgc2luZ2xlIGV4Y2VwdGlvbiB0
aGF0IENvdmVySW5pdGlhbGl6ZWROYW1lIHdoZW4gdXNlZCBkaXJlY3RseSBpbiBhbiBFeHByZXNz
aW9uLCBnZW5lcmF0ZXMKKyAgICAgICAgLy8gYW4gZWFybHkgZXJyb3IuIFRoZXJlZm9yZSwgd2Ug
bmVlZCB0aGUgdGhpcmQgc3RhdGUsIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciwgdG8g
dHJhY2sgdGhlCisgICAgICAgIC8vIGZpcnN0IHVzYWdlIG9mIENvdmVySW5pdGlhbGl6ZWROYW1l
IGFuZCByZXBvcnQgaXQgd2hlbiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHBhcmVudGhlc2Vz
IHBhaXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIGlzb2xhdGVDb3ZlckdyYW1tYXIgZnVuY3Rp
b24gcnVucyB0aGUgZ2l2ZW4gcGFyc2VyIGZ1bmN0aW9uIHdpdGggYSBuZXcgY292ZXIgZ3JhbW1h
ciBjb250ZXh0LCBhbmQgaXQgZG9lcyBub3QKKyAgICAgICAgLy8gZWZmZWN0IHRoZSBjdXJyZW50
IGZsYWdzLiBUaGlzIG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBwYXJzZXIgcGFyc2VzIGlzIG9u
bHkgdXNlZCBhcyBhbiBleHByZXNzaW9uLiBUaGVyZWZvcmUKKyAgICAgICAgLy8gdGhlIENvdmVy
SW5pdGlhbGl6ZWROYW1lIGNoZWNrIGlzIGNvbmR1Y3RlZC4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gaW5oZXJpdENvdmVyR3JhbW1hciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZSBmdW5j
dGlvbiB3aXRoIGEgbmV3IGNvdmVyIGdyYW1tYXIgY29udGV4dCwgYW5kIGl0IHByb3BhZ2F0ZXMK
KyAgICAgICAgLy8gdGhlIGZsYWdzIG91dHNpZGUgb2YgdGhlIHBhcnNlci4gVGhpcyBtZWFucyB0
aGUgcHJvZHVjdGlvbiB0aGUgcGFyc2VyIHBhcnNlcyBpcyB1c2VkIGFzIGEgcGFydCBvZiBhIHBv
dGVudGlhbAorICAgICAgICAvLyBwYXR0ZXJuLiBUaGUgQ292ZXJJbml0aWFsaXplZE5hbWUgY2hl
Y2sgaXMgZGVmZXJyZWQuCisgICAgICAgIFBhcnNlci5wcm90b3R5cGUuaXNvbGF0ZUNvdmVyR3Jh
bW1hciA9IGZ1bmN0aW9uIChwYXJzZUZ1bmN0aW9uKSB7CisgICAgICAgICAgICB2YXIgcHJldmlv
dXNJc0JpbmRpbmdFbGVtZW50ID0gdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ7CisgICAg
ICAgICAgICB2YXIgcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQgPSB0aGlzLmNvbnRleHQuaXNB
c3NpZ25tZW50VGFyZ2V0OworICAgICAgICAgICAgdmFyIHByZXZpb3VzRmlyc3RDb3ZlckluaXRp
YWxpemVkTmFtZUVycm9yID0gdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVF
cnJvcjsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTsK
KyAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOworICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51
bGw7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcGFyc2VGdW5jdGlvbi5jYWxsKHRoaXMpOwor
ICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJy
b3IgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBwcmV2aW91
c0lzQmluZGluZ0VsZW1lbnQ7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50
VGFyZ2V0ID0gcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7CisgICAgICAgICAgICB0aGlzLmNv
bnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJldmlvdXNGaXJzdENvdmVy
SW5pdGlhbGl6ZWROYW1lRXJyb3I7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9OworICAgICAgICBQYXJzZXIucHJvdG90eXBlLmluaGVyaXRDb3ZlckdyYW1tYXIgPSBmdW5j
dGlvbiAocGFyc2VGdW5jdGlvbikgeworICAgICAgICAgICAgdmFyIHByZXZpb3VzSXNCaW5kaW5n
RWxlbWVudCA9IHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50OworICAgICAgICAgICAgdmFy
IHByZXZpb3VzSXNBc3NpZ25tZW50VGFyZ2V0ID0gdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRh
cmdldDsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c0ZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVF
cnJvciA9IHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7CisgICAg
ICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7CisgICAgICAgICAg
ICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRo
aXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOworICAgICAg
ICAgICAgdmFyIHJlc3VsdCA9IHBhcnNlRnVuY3Rpb24uY2FsbCh0aGlzKTsKKyAgICAgICAgICAg
IHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdGhpcy5jb250ZXh0LmlzQmluZGluZ0Vs
ZW1lbnQgJiYgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50OworICAgICAgICAgICAgdGhpcy5jb250
ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQg
JiYgcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQu
Zmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJldmlvdXNGaXJzdENvdmVySW5pdGlh
bGl6ZWROYW1lRXJyb3IgfHwgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVF
cnJvcjsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07CisgICAgICAgIFBh
cnNlci5wcm90b3R5cGUuY29uc3VtZVNlbWljb2xvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLm1hdGNoKCc7JykpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuaGFzTGluZVRl
cm1pbmF0b3IpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0g
MiAvKiBFT0YgKi8gJiYgIXRoaXMubWF0Y2goJ30nKSkgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zdGFydE1h
cmtlci5pbmRleDsKKyAgICAgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZSA9IHRoaXMu
c3RhcnRNYXJrZXIubGluZTsKKyAgICAgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuY29sdW1u
ID0gdGhpcy5zdGFydE1hcmtlci5jb2x1bW47CisgICAgICAgICAgICB9CisgICAgICAgIH07Cisg
ICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByaW1hcnktZXhw
cmVzc2lvbgorICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24g
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworICAgICAgICAgICAgdmFyIGV4cHI7CisgICAgICAgICAgICB2YXIgdG9rZW4sIHJhdzsKKyAg
ICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudHlwZSkgeworICAgICAgICAgICAgICAg
IGNhc2UgMyAvKiBJZGVudGlmaWVyICovOgorICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMu
Y29udGV4dC5pc01vZHVsZSB8fCB0aGlzLmNvbnRleHQuYXdhaXQpICYmIHRoaXMubG9va2FoZWFk
LnZhbHVlID09PSAnYXdhaXQnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVy
YXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSA/
IHRoaXMucGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKSA6IHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuSWRlbnRpZmllcih0aGlzLm5leHRUb2tlbigpLnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNiAvKiBOdW1lcmljTGl0ZXJhbCAq
LzoKKyAgICAgICAgICAgICAgICBjYXNlIDggLyogU3RyaW5nTGl0ZXJhbCAqLzoKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5sb29rYWhlYWQub2N0
YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9r
ZW4odGhpcy5sb29rYWhlYWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFs
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRl
eHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRv
a2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgcmF3ID0gdGhpcy5n
ZXRUb2tlblJhdyh0b2tlbik7CisgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFsdWUsIHJhdykpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEgLyogQm9vbGVhbkxpdGVy
YWwgKi86CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJn
ZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0Vs
ZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRUb2tl
bigpOworICAgICAgICAgICAgICAgICAgICByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsK
KyAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUu
TGl0ZXJhbCh0b2tlbi52YWx1ZSA9PT0gJ3RydWUnLCByYXcpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA1IC8qIE51bGxMaXRlcmFsICovOgorICAg
ICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisgICAgICAgICAg
ICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwobnVs
bCwgcmF3KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgMTAgLyogVGVtcGxhdGUgKi86CisgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnBh
cnNlVGVtcGxhdGVMaXRlcmFsKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgNyAvKiBQdW5jdHVhdG9yICovOgorICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKHRoaXMubG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICcoJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5k
aW5nRWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0
aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUdyb3VwRXhwcmVzc2lvbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdbJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5pbmhlcml0
Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBcnJheUluaXRpYWxpemVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3snOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1t
YXIodGhpcy5wYXJzZU9iamVjdEluaXRpYWxpemVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOgorICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnLz0nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5pbmRleCA9IHRoaXMuc3RhcnRNYXJr
ZXIuaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRS
ZWdleFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3ID0gdGhpcy5nZXRU
b2tlblJhdyh0b2tlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMu
ZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUmVnZXhMaXRlcmFsKHRva2VuLnJlZ2V4LCByYXcsIHRv
a2VuLnBhdHRlcm4sIHRva2VuLmZsYWdzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRv
a2VuKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgNCAvKiBLZXl3b3JkICovOgorICAgICAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5jb250ZXh0LmFsbG93WWllbGQg
JiYgdGhpcy5tYXRjaEtleXdvcmQoJ3lpZWxkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGV4cHIgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5jb250ZXh0LnN0cmljdCAmJiB0
aGlzLm1hdGNoS2V5d29yZCgnbGV0JykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIg
PSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodGhpcy5uZXh0VG9rZW4o
KS52YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRh
cmdldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmlu
ZGluZ0VsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1h
dGNoS2V5d29yZCgnZnVuY3Rpb24nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cHIgPSB0aGlzLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoS2V5d29y
ZCgndGhpcycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4o
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5UaGlzRXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdjbGFz
cycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VDbGFz
c0V4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hJbXBvcnRDYWxsKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZUltcG9ydENhbGwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRo
aXMubmV4dFRva2VuKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnRocm93VW5leHBlY3RlZFRv
a2VuKHRoaXMubmV4dFRva2VuKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGV4cHI7CisgICAgICAgIH07CisgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNt
YTI2Mi8jc2VjLWFycmF5LWluaXRpYWxpemVyCisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFy
c2VTcHJlYWRFbGVtZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKKyAgICAg
ICAgICAgIHZhciBhcmcgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLlNwcmVhZEVsZW1lbnQoYXJnKSk7CisgICAgICAgIH07CisgICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VBcnJheUluaXRpYWxpemVyID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHZhciBlbGVt
ZW50cyA9IFtdOworICAgICAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsKKyAgICAgICAgICAgIHdo
aWxlICghdGhpcy5tYXRjaCgnXScpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2go
JywnKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAg
ICAgICAgICAgICBlbGVtZW50cy5wdXNoKG51bGwpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcuLi4nKSkgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VTcHJlYWRFbGVtZW50KCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnXScpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJywnKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZWxl
bWVudHMucHVzaCh0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRF
eHByZXNzaW9uKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnXScpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5leHBlY3QoJ10nKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLkFycmF5RXhwcmVzc2lvbihlbGVtZW50cykpOworICAgICAgICB9OworICAgICAg
ICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QtaW5pdGlhbGl6
ZXIKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5TWV0aG9kID0gZnVuY3Rp
b24gKHBhcmFtcykgeworICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdl
dCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBm
YWxzZTsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJp
Y3Q7CisgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZSA9IHRoaXMu
Y29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZTsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5h
bGxvd1N0cmljdERpcmVjdGl2ZSA9IHBhcmFtcy5zaW1wbGU7CisgICAgICAgICAgICB2YXIgYm9k
eSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVt
ZW50cyk7CisgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBwYXJhbXMuZmly
c3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRU
b2tlbihwYXJhbXMuZmlyc3RSZXN0cmljdGVkLCBwYXJhbXMubWVzc2FnZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBwYXJhbXMuc3RyaWN0
ZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHBhcmFt
cy5zdHJpY3RlZCwgcGFyYW1zLm1lc3NhZ2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlID0gcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2
ZTsKKyAgICAgICAgICAgIHJldHVybiBib2R5OworICAgICAgICB9OworICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHZhciBpc0dlbmVyYXRvciA9IGZhbHNlOworICAgICAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQg
PSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxv
d1lpZWxkID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJzZUZvcm1h
bFBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVy
dHlNZXRob2QocGFyYW1zKTsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0g
cHJldmlvdXNBbGxvd1lpZWxkOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtcy5wYXJhbXMsIG1ldGhv
ZCwgaXNHZW5lcmF0b3IpKTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZVByb3BlcnR5TWV0aG9kQXN5bmNGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICB2YXIgcHJldmlv
dXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisgICAgICAgICAgICB2YXIg
cHJldmlvdXNBd2FpdCA9IHRoaXMuY29udGV4dC5hd2FpdDsKKyAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5hbGxvd1lpZWxkID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQg
PSB0cnVlOworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0
ZXJzKCk7CisgICAgICAgICAgICB2YXIgbWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9k
KHBhcmFtcyk7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3Vz
QWxsb3dZaWVsZDsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IHByZXZpb3VzQXdh
aXQ7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3lu
Y0Z1bmN0aW9uRXhwcmVzc2lvbihudWxsLCBwYXJhbXMucGFyYW1zLCBtZXRob2QpKTsKKyAgICAg
ICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU9iamVjdFByb3BlcnR5S2V5ID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
KyAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICB2
YXIga2V5OworICAgICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSA4IC8qIFN0cmluZ0xpdGVyYWwgKi86CisgICAgICAgICAgICAgICAgY2FzZSA2IC8q
IE51bWVyaWNMaXRlcmFsICovOgorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0
LnN0cmljdCAmJiB0b2tlbi5vY3RhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50
b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RP
Y3RhbExpdGVyYWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHZhciByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAg
a2V5ID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCBy
YXcpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAz
IC8qIElkZW50aWZpZXIgKi86CisgICAgICAgICAgICAgICAgY2FzZSAxIC8qIEJvb2xlYW5MaXRl
cmFsICovOgorICAgICAgICAgICAgICAgIGNhc2UgNSAvKiBOdWxsTGl0ZXJhbCAqLzoKKyAgICAg
ICAgICAgICAgICBjYXNlIDQgLyogS2V5d29yZCAqLzoKKyAgICAgICAgICAgICAgICAgICAga2V5
ID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNyAvKiBQ
dW5jdHVhdG9yICovOgorICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdb
JykgeworICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFt
bWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmV4cGVjdCgnXScpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy50aHJv
d1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAga2V5ID0gdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4ga2V5OworICAgICAgICB9OworICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLmlzUHJvcGVydHlLZXkgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgeworICAg
ICAgICAgICAgcmV0dXJuIChrZXkudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIg
JiYga2V5Lm5hbWUgPT09IHZhbHVlKSB8fAorICAgICAgICAgICAgICAgIChrZXkudHlwZSA9PT0g
c3ludGF4XzEuU3ludGF4LkxpdGVyYWwgJiYga2V5LnZhbHVlID09PSB2YWx1ZSk7CisgICAgICAg
IH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VPYmplY3RQcm9wZXJ0eSA9IGZ1bmN0
aW9uIChoYXNQcm90bykgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKKyAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAgICAgICAg
dmFyIGtpbmQ7CisgICAgICAgICAgICB2YXIga2V5ID0gbnVsbDsKKyAgICAgICAgICAgIHZhciB2
YWx1ZSA9IG51bGw7CisgICAgICAgICAgICB2YXIgY29tcHV0ZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHZhciBtZXRob2QgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBzaG9ydGhhbmQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHZhciBpc0FzeW5jID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodG9r
ZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSB7CisgICAgICAgICAgICAgICAgdmFyIGlk
ID0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaWQgPT09ICdhc3luYycgJiYgIXRoaXMuaGFzTGluZVRlcm1pbmF0b3Ip
IHsKKyAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb21wdXRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aXNBc3luYyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNl
T2JqZWN0UHJvcGVydHlLZXkoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdW5jdHVhdG9yID0g
dGhpcy5sb29rYWhlYWQudmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVuY3R1
YXRvciAhPT0gJzonICYmIHB1bmN0dWF0b3IgIT09ICcoJyAmJiBwdW5jdHVhdG9yICE9PSAnKicp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlkID0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRl
bnRpZmllcihpZCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIoaWQpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcqJykpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7
CisgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbG9va2FoZWFkUHJvcGVydHlLZXkgPSB0aGlz
LnF1YWxpZmllZFByb3BlcnR5TmFtZSh0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICBpZiAo
dG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovICYmICFpc0FzeW5jICYmIHRva2VuLnZh
bHVlID09PSAnZ2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkgeworICAgICAgICAgICAgICAg
IGtpbmQgPSAnZ2V0JzsKKyAgICAgICAgICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1sn
KTsKKyAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsK
KyAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZUdldHRlck1ldGhvZCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICov
ICYmICFpc0FzeW5jICYmIHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0
eUtleSkgeworICAgICAgICAgICAgICAgIGtpbmQgPSAnc2V0JzsKKyAgICAgICAgICAgICAgICBj
b21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKKyAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBh
cnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFy
c2VTZXR0ZXJNZXRob2QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHRv
a2VuLnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLyAmJiB0b2tlbi52YWx1ZSA9PT0gJyonICYm
IGxvb2thaGVhZFByb3BlcnR5S2V5KSB7CisgICAgICAgICAgICAgICAga2luZCA9ICdpbml0JzsK
KyAgICAgICAgICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKKyAgICAgICAgICAg
ICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKyAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHRoaXMucGFyc2VHZW5lcmF0b3JNZXRob2QoKTsKKyAgICAgICAgICAgICAgICBt
ZXRob2QgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFrZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGtpbmQgPSAnaW5pdCc7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJzon
KSAmJiAhaXNBc3luYykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXB1dGVkICYmIHRo
aXMuaXNQcm9wZXJ0eUtleShrZXksICdfX3Byb3RvX18nKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc1Byb3RvLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRHVwbGljYXRlUHJvdG9Qcm9w
ZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBoYXNQcm90by52YWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRj
aCgnKCcpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXNBc3luYyA/IHRoaXMucGFy
c2VQcm9wZXJ0eU1ldGhvZEFzeW5jRnVuY3Rpb24oKSA6IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhv
ZEZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IDMgLyog
SWRlbnRpZmllciAqLykgeworICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodG9rZW4udmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IHRoaXMubG9va2Fo
ZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNob3J0aGFuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgaW5pdCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVu
dEV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkFzc2lnbm1lbnRQYXR0ZXJuKGlkLCBpbml0KSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzaG9ydGhhbmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBpZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0
ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Qcm9w
ZXJ0eShraW5kLCBrZXksIGNvbXB1dGVkLCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQpKTsKKyAg
ICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVNwcmVhZFByb3BlcnR5ID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
KyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKKyAgICAgICAgICAgIHZhciBhcmcgPSB0
aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlNwcmVhZFBy
b3BlcnR5KGFyZykpOworICAgICAgICB9OworICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNl
T2JqZWN0SW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKKyAgICAg
ICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW107CisgICAgICAgICAgICB2YXIgaGFzUHJvdG8gPSB7
IHZhbHVlOiBmYWxzZSB9OworICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsK
KyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2godGhpcy5tYXRjaCgnLi4uJykgPyB0aGlz
LnBhcnNlU3ByZWFkUHJvcGVydHkoKSA6IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eShoYXNQcm90
bykpOworICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnfScpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmV4cGVjdCgnfScpOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuT2JqZWN0RXhwcmVzc2lvbihw
cm9wZXJ0aWVzKSk7CisgICAgICAgIH07CisgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIu
aW8vZWNtYTI2Mi8jc2VjLXRlbXBsYXRlLWxpdGVyYWxzCisgICAgICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VUZW1wbGF0ZUhlYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBhc3NlcnRf
MS5hc3NlcnQodGhpcy5sb29rYWhlYWQuaGVhZCwgJ1RlbXBsYXRlIGxpdGVyYWwgbXVzdCBzdGFy
dCB3aXRoIGEgdGVtcGxhdGUgaGVhZCcpOworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7Cisg
ICAgICAgICAgICB2YXIgcmF3ID0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICB2YXIgY29va2Vk
ID0gdG9rZW4uY29va2VkOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuVGVtcGxhdGVFbGVtZW50KHsgcmF3OiByYXcsIGNvb2tlZDogY29va2VkIH0sIHRv
a2VuLnRhaWwpKTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRl
bXBsYXRlRWxlbWVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmxvb2th
aGVhZC50eXBlICE9PSAxMCAvKiBUZW1wbGF0ZSAqLykgeworICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5l
eHRUb2tlbigpOworICAgICAgICAgICAgdmFyIHJhdyA9IHRva2VuLnZhbHVlOworICAgICAgICAg
ICAgdmFyIGNvb2tlZCA9IHRva2VuLmNvb2tlZDsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLlRlbXBsYXRlRWxlbWVudCh7IHJhdzogcmF3LCBjb29rZWQ6
IGNvb2tlZCB9LCB0b2tlbi50YWlsKSk7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90
b3R5cGUucGFyc2VUZW1wbGF0ZUxpdGVyYWwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgdmFyIGV4cHJlc3Npb25z
ID0gW107CisgICAgICAgICAgICB2YXIgcXVhc2lzID0gW107CisgICAgICAgICAgICB2YXIgcXVh
c2kgPSB0aGlzLnBhcnNlVGVtcGxhdGVIZWFkKCk7CisgICAgICAgICAgICBxdWFzaXMucHVzaChx
dWFzaSk7CisgICAgICAgICAgICB3aGlsZSAoIXF1YXNpLnRhaWwpIHsKKyAgICAgICAgICAgICAg
ICBleHByZXNzaW9ucy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkpOworICAgICAgICAgICAg
ICAgIHF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlRWxlbWVudCgpOworICAgICAgICAgICAgICAg
IHF1YXNpcy5wdXNoKHF1YXNpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlRlbXBsYXRlTGl0ZXJhbChxdWFzaXMsIGV4cHJl
c3Npb25zKSk7CisgICAgICAgIH07CisgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTI2Mi8jc2VjLWdyb3VwaW5nLW9wZXJhdG9yCisgICAgICAgIFBhcnNlci5wcm90b3R5cGUu
cmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuID0gZnVuY3Rpb24gKGV4cHIpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBzeW50YXhf
MS5TeW50YXguSWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRh
eC5NZW1iZXJFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4
LlJlc3RFbGVtZW50OgorICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFzc2ln
bm1lbnRQYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIHN5bnRheF8xLlN5bnRheC5TcHJlYWRFbGVtZW50OgorICAgICAgICAgICAgICAgICAg
ICBleHByLnR5cGUgPSBzeW50YXhfMS5TeW50YXguUmVzdEVsZW1lbnQ7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuYXJndW1lbnQp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIHN5bnRh
eF8xLlN5bnRheC5TcHJlYWRQcm9wZXJ0eToKKyAgICAgICAgICAgICAgICAgICAgZXhwci50eXBl
ID0gc3ludGF4XzEuU3ludGF4LlJlc3RQcm9wZXJ0eTsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwci5hcmd1bWVudCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4
LkFycmF5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgZXhwci50eXBlID0gc3ludGF4
XzEuU3ludGF4LkFycmF5UGF0dGVybjsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBleHByLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZXhwci5lbGVtZW50c1tpXSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuZWxlbWVu
dHNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4
XzEuU3ludGF4Lk9iamVjdEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGV4cHIudHlw
ZSA9IHN5bnRheF8xLlN5bnRheC5PYmplY3RQYXR0ZXJuOworICAgICAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGV4cHIucHJvcGVydGllcy5sZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gZXhwci5wcm9wZXJ0aWVzW2ldOworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4o
cHJvcGVydHkudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LlNwcmVhZFByb3BlcnR5ID8gcHJvcGVy
dHkgOiBwcm9wZXJ0eS52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguQXNz
aWdubWVudEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9IHN5bnRh
eF8xLlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IGV4cHIub3BlcmF0b3I7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHBy
ZXNzaW9uQXNQYXR0ZXJuKGV4cHIubGVmdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIC8vIEFsbG93IG90
aGVyIG5vZGUgdHlwZSBmb3IgdG9sZXJhbnQgcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VHcm91cEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIg
ZXhwcjsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7CisgICAgICAgICAgICBpZiAodGhp
cy5tYXRjaCgnKScpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJz0+JykpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5leHBlY3QoJz0+Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4
cHIgPSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xk
ZXIsCisgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sCisgICAgICAgICAgICAgICAgICAg
IGFzeW5jOiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2Fo
ZWFkOworICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMu
cGFyc2VSZXN0RWxlbWVudChwYXJhbXMpOworICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dCgnKScpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJz0+JykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9PicpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlOiBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zOiBbZXhwcl0sCisgICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFs
c2UKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBhcnJvdyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5w
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJywnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHJlc3Npb25zID0g
W107CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFy
Z2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKGV4
cHIpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMubG9va2FoZWFkLnR5cGUg
IT09IDIgLyogRU9GICovKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlz
Lm1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRU
b2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByZXNzaW9u
c1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJyb3cgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHByID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtczogZXhwcmVzc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhc3luYzogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0
aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNlUmVz
dEVsZW1lbnQocGFyYW1zKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCcpJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5t
YXRjaCgnPT4nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5l
eHBlY3QoJz0+Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcmVzc2lvbnNb
aV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFycm93ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwciA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6
IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbXM6IGV4cHJlc3Npb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXN5bmM6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5w
dXNoKHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFycm93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyb3cpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFy
dFRva2VuKSwgbmV3IE5vZGUuU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFhcnJvdykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBl
Y3QoJyknKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9PicpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gc3ludGF4XzEu
U3ludGF4LklkZW50aWZpZXIgJiYgZXhwci5uYW1lID09PSAneWllbGQnKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFycm93ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwciA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXM6IFtleHByXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFzeW5jOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWFycm93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5TZXF1ZW5jZUV4cHJl
c3Npb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZXhwci5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0
ZXJuKGV4cHIuZXhwcmVzc2lvbnNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHBhcmFtc18xID0gKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LlNlcXVlbmNl
RXhwcmVzc2lvbiA/IGV4cHIuZXhwcmVzc2lvbnMgOiBbZXhwcl0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHByID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zXzEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5n
RWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAgIH07Cisg
ICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxlZnQtaGFuZC1z
aWRlLWV4cHJlc3Npb25zCisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBcmd1bWVudHMg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOworICAgICAgICAg
ICAgdmFyIGFyZ3MgPSBbXTsKKyAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpKSB7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGV4
cHIgPSB0aGlzLm1hdGNoKCcuLi4nKSA/IHRoaXMucGFyc2VTcHJlYWRFbGVtZW50KCkgOgorICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChleHBy
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5leHBlY3RDb21tYVNlcGFyYXRvcigpOworICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7CisgICAgICAgICAgICByZXR1cm4gYXJnczsK
KyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5pc0lkZW50aWZpZXJOYW1lID0g
ZnVuY3Rpb24gKHRva2VuKSB7CisgICAgICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gMyAv
KiBJZGVudGlmaWVyICovIHx8CisgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gNCAvKiBL
ZXl3b3JkICovIHx8CisgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gMSAvKiBCb29sZWFu
TGl0ZXJhbCAqLyB8fAorICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IDUgLyogTnVsbExp
dGVyYWwgKi87CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJZGVu
dGlmaWVyTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5j
cmVhdGVOb2RlKCk7CisgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwor
ICAgICAgICAgICAgaWYgKCF0aGlzLmlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlm
aWVyKHRva2VuLnZhbHVlKSk7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VOZXdFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VJZGVu
dGlmaWVyTmFtZSgpOworICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGlkLm5hbWUgPT09ICdu
ZXcnLCAnTmV3IGV4cHJlc3Npb24gbXVzdCBzdGFydCB3aXRoIGBuZXdgJyk7CisgICAgICAgICAg
ICB2YXIgZXhwcjsKKyAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcuJykpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvb2th
aGVhZC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8gJiYgdGhpcy5jb250ZXh0LmluRnVuY3Rp
b25Cb2R5ICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09PSAndGFyZ2V0JykgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZXhwciA9IG5ldyBOb2RlLk1ldGFQcm9wZXJ0eShpZCwgcHJvcGVy
dHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhp
cy5tYXRjaEtleXdvcmQoJ2ltcG9ydCcpKSB7CisgICAgICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FsbGVlID0gdGhpcy5pc29sYXRlQ292ZXJH
cmFtbWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAg
ICB2YXIgYXJncyA9IHRoaXMubWF0Y2goJygnKSA/IHRoaXMucGFyc2VBcmd1bWVudHMoKSA6IFtd
OworICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgTm9kZS5OZXdFeHByZXNzaW9uKGNhbGxlZSwg
YXJncyk7CisgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShu
b2RlLCBleHByKTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFz
eW5jQXJndW1lbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgYXJnID0gdGhpcy5w
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmly
c3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBh
cmc7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBc3luY0FyZ3Vt
ZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7CisgICAg
ICAgICAgICB2YXIgYXJncyA9IFtdOworICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykp
IHsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgZXhwciA9IHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKSA6
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5w
YXJzZUFzeW5jQXJndW1lbnQpOworICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goZXhwcik7
CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMubWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScpOworICAgICAgICAgICAgcmV0dXJuIGFyZ3M7Cisg
ICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUubWF0Y2hJbXBvcnRDYWxsID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5tYXRjaEtleXdvcmQoJ2lt
cG9ydCcpOworICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0
YXRlID0gdGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpOworICAgICAgICAgICAgICAgIHRoaXMuc2Nh
bm5lci5zY2FuQ29tbWVudHMoKTsKKyAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMuc2Nh
bm5lci5sZXgoKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIucmVzdG9yZVN0YXRlKHN0
YXRlKTsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IChuZXh0LnR5cGUgPT09IDcgLyogUHVuY3R1
YXRvciAqLykgJiYgKG5leHQudmFsdWUgPT09ICcoJyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VJbXBvcnRDYWxsID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnaW1wb3J0
Jyk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JbXBv
cnQoKSk7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMZWZ0SGFu
ZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFy
IHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKyAgICAgICAgICAgIHZhciBtYXliZUFzeW5j
ID0gdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpOworICAgICAgICAgICAgdmFy
IHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luOworICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmFsbG93SW4gPSB0cnVlOworICAgICAgICAgICAgdmFyIGV4cHI7CisgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ3N1cGVyJykgJiYgdGhpcy5jb250ZXh0LmluRnVu
Y3Rpb25Cb2R5KSB7CisgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuY3JlYXRlTm9kZSgpOwor
ICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgZXhwciA9
IHRoaXMuZmluYWxpemUoZXhwciwgbmV3IE5vZGUuU3VwZXIoKSk7CisgICAgICAgICAgICAgICAg
aWYgKCF0aGlzLm1hdGNoKCcoJykgJiYgIXRoaXMubWF0Y2goJy4nKSAmJiAhdGhpcy5tYXRjaCgn
WycpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhp
cy5sb29rYWhlYWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1t
YXIodGhpcy5tYXRjaEtleXdvcmQoJ25ldycpID8gdGhpcy5wYXJzZU5ld0V4cHJlc3Npb24gOiB0
aGlzLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLicpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLicpOworICAgICAgICAgICAg
ICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRU
b2tlbiksIG5ldyBOb2RlLlN0YXRpY01lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgn
KCcpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBhc3luY0Fycm93ID0gbWF5YmVBc3luYyAm
JiAoc3RhcnRUb2tlbi5saW5lTnVtYmVyID09PSB0aGlzLmxvb2thaGVhZC5saW5lTnVtYmVyKTsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFzeW5jQXJyb3cgPyB0aGlz
LnBhcnNlQXN5bmNBcmd1bWVudHMoKSA6IHRoaXMucGFyc2VBcmd1bWVudHMoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkltcG9ydCAmJiBh
cmdzLmxlbmd0aCAhPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0
ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuQmFkSW1wb3J0Q2FsbEFyaXR5KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0
aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuQ2FsbEV4cHJlc3Npb24oZXhwciwg
YXJncykpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXN5bmNBcnJvdyAmJiB0aGlzLm1hdGNo
KCc9PicpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHByID0geworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFzeW5jOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHRoaXMubWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNC
aW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQu
aXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBl
Y3QoJ1snKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5pc29sYXRl
Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5leHBlY3QoJ10nKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxp
emUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkNvbXB1dGVkTWVtYmVyRXhw
cmVzc2lvbihleHByLCBwcm9wZXJ0eSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSAxMCAvKiBUZW1wbGF0ZSAqLyAm
JiB0aGlzLmxvb2thaGVhZC5oZWFkKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBxdWFzaSA9
IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwciA9
IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLlRhZ2dl
ZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBxdWFzaSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93
SW4gPSBwcmV2aW91c0FsbG93SW47CisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAg
fTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN1cGVyID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHRo
aXMuZXhwZWN0S2V5d29yZCgnc3VwZXInKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgn
WycpICYmICF0aGlzLm1hdGNoKCcuJykpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlN1cGVyKCkpOworICAgICAgICB9
OworICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0aGlzLmNvbnRleHQu
YWxsb3dJbiwgJ2NhbGxlZSBvZiBuZXcgZXhwcmVzc2lvbiBhbHdheXMgYWxsb3cgaW4ga2V5d29y
ZC4nKTsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUodGhpcy5sb29rYWhl
YWQpOworICAgICAgICAgICAgdmFyIGV4cHIgPSAodGhpcy5tYXRjaEtleXdvcmQoJ3N1cGVyJykg
JiYgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSA/IHRoaXMucGFyc2VTdXBlcigpIDoKKyAg
ICAgICAgICAgICAgICB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5tYXRjaEtleXdvcmQo
J25ldycpID8gdGhpcy5wYXJzZU5ld0V4cHJlc3Npb24gOiB0aGlzLnBhcnNlUHJpbWFyeUV4cHJl
c3Npb24pOworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5tYXRjaCgnWycpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Jp
bmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
c0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dCgnWycpOworICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmlzb2xhdGVD
b3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgICAgICB0
aGlzLmV4cGVjdCgnXScpOworICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5Db21wdXRlZE1lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRj
aCgnLicpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVt
ZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1l
bnRUYXJnZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLicpOwor
ICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5h
bWUoKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuU3RhdGljTWVtYmVyRXhwcmVzc2lvbihleHByLCBwcm9wZXJ0eSkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09
PSAxMCAvKiBUZW1wbGF0ZSAqLyAmJiB0aGlzLmxvb2thaGVhZC5oZWFkKSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBxdWFzaSA9IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGFnZ2Vk
VGVtcGxhdGVFeHByZXNzaW9uKGV4cHIsIHF1YXNpKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAg
ICAgfTsKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdXBk
YXRlLWV4cHJlc3Npb25zCisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VVcGRhdGVFeHBy
ZXNzaW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGV4cHI7CisgICAgICAgICAg
ICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJysrJykgfHwgdGhpcy5tYXRjaCgnLS0nKSkgeworICAgICAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbik7CisgICAgICAgICAgICAgICAgdmFyIHRv
a2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICBleHByID0gdGhpcy5pbmhl
cml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24pOworICAgICAgICAgICAg
ICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3lu
dGF4LklkZW50aWZpZXIgJiYgdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1l
KSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5N
ZXNzYWdlcy5TdHJpY3RMSFNQcmVmaXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZExI
U0luQXNzaWdubWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBw
cmVmaXggPSB0cnVlOworICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLlVwZGF0ZUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIsIHByZWZpeCkpOwor
ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZXhwciA9
IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lv
bkFsbG93Q2FsbCk7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0xpbmVUZXJtaW5hdG9y
ICYmIHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLykgeworICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKysnKSB8fCB0aGlzLm1hdGNoKCctLScpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBleHBy
LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyICYmIHRoaXMuc2Nhbm5lci5pc1Jl
c3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RMSFNQb3N0Zml4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRMSFNJ
bkFzc2lnbm1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IHRoaXMubmV4dFRva2VuKCku
dmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShz
dGFydFRva2VuKSwgbmV3IE5vZGUuVXBkYXRlRXhwcmVzc2lvbihvcGVyYXRvciwgZXhwciwgcHJl
Zml4KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfTsKKyAgICAgICAgLy8g
aHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdW5hcnktb3BlcmF0b3JzCisgICAg
ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBd2FpdEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIHZhciBhcmd1bWVudCA9IHRoaXMucGFyc2VV
bmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLkF3YWl0RXhwcmVzc2lvbihhcmd1bWVudCkpOworICAgICAgICB9OworICAgICAg
ICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVW5hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgdmFyIGV4cHI7CisgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKycpIHx8
IHRoaXMubWF0Y2goJy0nKSB8fCB0aGlzLm1hdGNoKCd+JykgfHwgdGhpcy5tYXRjaCgnIScpIHx8
CisgICAgICAgICAgICAgICAgdGhpcy5tYXRjaEtleXdvcmQoJ2RlbGV0ZScpIHx8IHRoaXMubWF0
Y2hLZXl3b3JkKCd2b2lkJykgfHwgdGhpcy5tYXRjaEtleXdvcmQoJ3R5cGVvZicpKSB7CisgICAg
ICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSh0aGlzLmxvb2thaGVhZCk7Cisg
ICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAg
ICAgICBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJl
c3Npb24pOworICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBO
b2RlLlVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcikpOworICAgICAgICAgICAgICAg
IGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGV4cHIub3BlcmF0b3IgPT09ICdkZWxldGUnICYm
IGV4cHIuYXJndW1lbnQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMu
U3RyaWN0RGVsZXRlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQuYXdhaXQgJiYgdGhpcy5tYXRjaENvbnRleHR1YWxL
ZXl3b3JkKCdhd2FpdCcpKSB7CisgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VBd2Fp
dEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlVXBkYXRlRXhwcmVzc2lvbigpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAgIH07CisgICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAgICAg
ICAgdmFyIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5RXhw
cmVzc2lvbik7CisgICAgICAgICAgICBpZiAoZXhwci50eXBlICE9PSBzeW50YXhfMS5TeW50YXgu
VW5hcnlFeHByZXNzaW9uICYmIHRoaXMubWF0Y2goJyoqJykpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1l
bnRUYXJnZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5n
RWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gZXhwcjsKKyAgICAg
ICAgICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJz
ZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMu
ZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkJpbmFyeUV4cHJl
c3Npb24oJyoqJywgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBleHByOworICAgICAgICB9OworICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWEyNjIvI3NlYy1leHAtb3BlcmF0b3IKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtbXVsdGlwbGljYXRpdmUtb3BlcmF0b3JzCisgICAgICAgIC8vIGh0
dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkZGl0aXZlLW9wZXJhdG9ycworICAg
ICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1iaXR3aXNlLXNoaWZ0
LW9wZXJhdG9ycworICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3Nl
Yy1yZWxhdGlvbmFsLW9wZXJhdG9ycworICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWEyNjIvI3NlYy1lcXVhbGl0eS1vcGVyYXRvcnMKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5
LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYmluYXJ5LWJpdHdpc2Utb3BlcmF0b3JzCisgICAgICAg
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWJpbmFyeS1sb2dpY2FsLW9w
ZXJhdG9ycworICAgICAgICBQYXJzZXIucHJvdG90eXBlLmJpbmFyeVByZWNlZGVuY2UgPSBmdW5j
dGlvbiAodG9rZW4pIHsKKyAgICAgICAgICAgIHZhciBvcCA9IHRva2VuLnZhbHVlOworICAgICAg
ICAgICAgdmFyIHByZWNlZGVuY2U7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gNyAv
KiBQdW5jdHVhdG9yICovKSB7CisgICAgICAgICAgICAgICAgcHJlY2VkZW5jZSA9IHRoaXMub3Bl
cmF0b3JQcmVjZWRlbmNlW29wXSB8fCAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAodG9rZW4udHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7CisgICAgICAgICAgICAgICAg
cHJlY2VkZW5jZSA9IChvcCA9PT0gJ2luc3RhbmNlb2YnIHx8ICh0aGlzLmNvbnRleHQuYWxsb3dJ
biAmJiBvcCA9PT0gJ2luJykpID8gNyA6IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBwcmVjZWRlbmNlID0gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBwcmVjZWRlbmNlOworICAgICAgICB9OworICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlQmluYXJ5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAgICB2YXIgZXhw
ciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHBy
ZXNzaW9uKTsKKyAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAg
ICAgICAgdmFyIHByZWMgPSB0aGlzLmJpbmFyeVByZWNlZGVuY2UodG9rZW4pOworICAgICAgICAg
ICAgaWYgKHByZWMgPiAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB2YXIgbWFya2VycyA9IFtzdGFydFRva2VuLCB0aGlzLmxvb2thaGVhZF07
CisgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBleHByOworICAgICAgICAgICAgICAgIHZhciBy
aWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25F
eHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICB2YXIgc3RhY2sgPSBbbGVmdCwgdG9rZW4udmFs
dWUsIHJpZ2h0XTsKKyAgICAgICAgICAgICAgICB2YXIgcHJlY2VkZW5jZXMgPSBbcHJlY107Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlYyA9
IHRoaXMuYmluYXJ5UHJlY2VkZW5jZSh0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChwcmVjIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIFJlZHVjZTogbWFrZSBh
IGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy4KKyAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKChzdGFjay5sZW5ndGggPiAyKSAmJiAocHJlYyA8PSBwcmVj
ZWRlbmNlc1twcmVjZWRlbmNlcy5sZW5ndGggLSAxXSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJpZ2h0ID0gc3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3Bl
cmF0b3IgPSBzdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2Vz
LnBvcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbWFya2Vycy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUobWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5CaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBTaGlmdC4KKyAgICAg
ICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLm5leHRUb2tlbigpLnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJlY2VkZW5jZXMucHVzaChwcmVjKTsKKyAgICAgICAgICAgICAgICAg
ICAgbWFya2Vycy5wdXNoKHRoaXMubG9va2FoZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
Y2sucHVzaCh0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9u
RXhwcmVzc2lvbikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBGaW5h
bCByZWR1Y2UgdG8gY2xlYW4tdXAgdGhlIHN0YWNrLgorICAgICAgICAgICAgICAgIHZhciBpID0g
c3RhY2subGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICBleHByID0gc3RhY2tbaV07CisgICAg
ICAgICAgICAgICAgbWFya2Vycy5wb3AoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaSA+IDEp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZShtYXJrZXJz
LnBvcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdG9yID0gc3RhY2tbaSAtIDFd
OworICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9k
ZS5CaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBzdGFja1tpIC0gMl0sIGV4cHIpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaSAtPSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICB9OworICAgICAgICAvLyBodHRwczov
L3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jb25kaXRpb25hbC1vcGVyYXRvcgorICAgICAg
ICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKyAgICAg
ICAgICAgIHZhciBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VCaW5h
cnlFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc/JykpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgIHZhciBwcmV2aW91
c0FsbG93SW4gPSB0aGlzLmNvbnRleHQuYWxsb3dJbjsKKyAgICAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuYWxsb3dJbiA9IHRydWU7CisgICAgICAgICAgICAgICAgdmFyIGNvbnNlcXVlbnQgPSB0
aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsK
KyAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsK
KyAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnOicpOworICAgICAgICAgICAgICAgIHZhciBh
bHRlcm5hdGUgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRF
eHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0
YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4cHIs
IGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkpOworICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
c0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQu
aXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIGV4cHI7CisgICAgICAgIH07CisgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTI2Mi8jc2VjLWFzc2lnbm1lbnQtb3BlcmF0b3JzCisgICAgICAgIFBhcnNlci5wcm90b3R5
cGUuY2hlY2tQYXR0ZXJuUGFyYW0gPSBmdW5jdGlvbiAob3B0aW9ucywgcGFyYW0pIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAocGFyYW0udHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4
XzEuU3ludGF4LklkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQ
YXJhbShvcHRpb25zLCBwYXJhbSwgcGFyYW0ubmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LlJlc3RFbGVtZW50Ogor
ICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LlJlc3RQcm9wZXJ0eToKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5hcmd1
bWVudCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
c3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICB0
aGlzLmNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmxlZnQpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5BcnJh
eVBhdHRlcm46CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0u
ZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJh
bS5lbGVtZW50c1tpXSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0uZWxlbWVudHNbaV0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4Lk9iamVj
dFBhdHRlcm46CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0u
cHJvcGVydGllcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBy
b3BlcnR5ID0gcGFyYW0ucHJvcGVydGllc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgKHByb3BlcnR5LnR5cGUgPT09IHN5bnRheF8x
LlN5bnRheC5SZXN0UHJvcGVydHkpID8gcHJvcGVydHkgOiBwcm9wZXJ0eS52YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBvcHRpb25zLnNpbXBsZSA9IG9wdGlvbnMuc2ltcGxlICYmIChwYXJhbSBp
bnN0YW5jZW9mIE5vZGUuSWRlbnRpZmllcik7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5w
cm90b3R5cGUucmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QgPSBmdW5jdGlvbiAoZXhwcikg
eworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtleHByXTsKKyAgICAgICAgICAgIHZhciBvcHRp
b25zOworICAgICAgICAgICAgdmFyIGFzeW5jQXJyb3cgPSBmYWxzZTsKKyAgICAgICAgICAgIHN3
aXRjaCAoZXhwci50eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXgu
SWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyOgorICAgICAgICAgICAgICAgICAgICBwYXJh
bXMgPSBleHByLnBhcmFtczsKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNBcnJvdyA9IGV4cHIu
YXN5bmM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgb3B0aW9ucyA9IHsKKyAgICAgICAgICAgICAgICBzaW1wbGU6IHRydWUsCisgICAg
ICAgICAgICAgICAgcGFyYW1TZXQ6IHt9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2
YXIgcGFyYW0gPSBwYXJhbXNbaV07CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09
IHN5bnRheF8xLlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybikgeworICAgICAgICAgICAgICAgICAg
ICBpZiAocGFyYW0ucmlnaHQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LllpZWxkRXhwcmVzc2lv
bikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnJpZ2h0LmFyZ3VtZW50KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0
aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbS5yaWdodC50eXBlID0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXI7
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5yaWdodC5uYW1lID0gJ3lpZWxkJzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5hcmd1bWVudDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5kZWxlZ2F0ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChhc3luY0Fycm93ICYmIHBhcmFtLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVy
ICYmIHBhcmFtLm5hbWUgPT09ICdhd2FpdCcpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50
aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0pOwor
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IHBhcmFtOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgfHwgIXRoaXMuY29udGV4dC5hbGxvd1lpZWxk
KSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyYW1zW2ldOworICAgICAg
ICAgICAgICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LllpZWxkRXhw
cmVzc2lvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRU
b2tlbih0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3B0aW9ucy5tZXNzYWdlID09
PSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZSkgeworICAgICAgICAgICAgICAg
IHZhciB0b2tlbiA9IHRoaXMuY29udGV4dC5zdHJpY3QgPyBvcHRpb25zLnN0cmljdGVkIDogb3B0
aW9ucy5maXJzdFJlc3RyaWN0ZWQ7CisgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0
ZWRUb2tlbih0b2tlbiwgb3B0aW9ucy5tZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgc2ltcGxlOiBvcHRpb25zLnNpbXBsZSwKKyAg
ICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAgICAgICAgICAgICAgICBzdHJpY3RlZDog
b3B0aW9ucy5zdHJpY3RlZCwKKyAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlv
bnMuZmlyc3RSZXN0cmljdGVkLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVz
c2FnZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
dmFyIGV4cHI7CisgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5hbGxvd1lpZWxkICYmIHRo
aXMubWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSB7CisgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMu
cGFyc2VZaWVsZEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAg
ICAgICAgICAgICAgdmFyIHRva2VuID0gc3RhcnRUb2tlbjsKKyAgICAgICAgICAgICAgICBleHBy
ID0gdGhpcy5wYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIGlm
ICh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8gJiYgKHRva2VuLmxpbmVOdW1iZXIg
PT09IHRoaXMubG9va2FoZWFkLmxpbmVOdW1iZXIpICYmIHRva2VuLnZhbHVlID09PSAnYXN5bmMn
ICYmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTsK
KyAgICAgICAgICAgICAgICAgICAgZXhwciA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXM6IFthcmddLAorICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IHRydWUKKyAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KGV4cHIudHlwZSA9PT0gQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciB8fCB0aGlzLm1hdGNoKCc9
PicpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNt
YTI2Mi8jc2VjLWFycm93LWZ1bmN0aW9uLWRlZmluaXRpb25zCisgICAgICAgICAgICAgICAgICAg
IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGlzQXN5bmMgPSBleHByLmFzeW5jOworICAgICAgICAgICAgICAgICAgICB2
YXIgbGlzdCA9IHRoaXMucmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoZXhwcik7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChsaXN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5oYXNMaW5lVGVybWluYXRvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0
Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgcHJldmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0OworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dTdHJpY3REaXJlY3RpdmUgPSB0aGlzLmNvbnRl
eHQuYWxsb3dTdHJpY3REaXJlY3RpdmU7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUgPSBsaXN0LnNpbXBsZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVs
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0F3YWl0ID0gdGhpcy5jb250
ZXh0LmF3YWl0OworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWll
bGQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0g
aXNBc3luYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5v
ZGUoc3RhcnRUb2tlbik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnPT4n
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5tYXRjaCgneycpID8g
dGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKSA6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhw
cmVzc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IGJvZHku
dHlwZSAhPT0gc3ludGF4XzEuU3ludGF4LkJsb2NrU3RhdGVtZW50OworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgbGlzdC5maXJzdFJlc3RyaWN0ZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KGxpc3QuZmlyc3RSZXN0cmljdGVkLCBsaXN0Lm1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3Qg
JiYgbGlzdC5zdHJpY3RlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9s
ZXJhdGVVbmV4cGVjdGVkVG9rZW4obGlzdC5zdHJpY3RlZCwgbGlzdC5tZXNzYWdlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSBpc0Fz
eW5jID8gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3luY0Fycm93RnVuY3Rpb25FeHBy
ZXNzaW9uKGxpc3QucGFyYW1zLCBib2R5LCBleHByZXNzaW9uKSkgOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXJyb3dGdW5jdGlvbkV4
cHJlc3Npb24obGlzdC5wYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IHByZXZp
b3VzQWxsb3dTdHJpY3REaXJlY3RpdmU7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IHByZXZpb3VzQXdhaXQ7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoQXNzaWduKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3Nh
Z2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgZXhwci50
eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBpZCA9IGV4cHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1l
c3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5u
ZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkLm5hbWUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3Nh
Z2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMubWF0Y2goJz0nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1Bh
dHRlcm4oZXhwcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgb3BlcmF0b3IgPSB0b2tlbi52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24pOworICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUo
dGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkFzc2lnbm1lbnRFeHByZXNzaW9u
KG9wZXJhdG9yLCBleHByLCByaWdodCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gZXhwcjsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtY29tbWEtb3BlcmF0b3IKKyAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgc3RhcnRU
b2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLmlzb2xh
dGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgICAgICB2YXIgZXhwcmVzc2lv
bnMgPSBbXTsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKGV4cHIpOworICAgICAg
ICAgICAgICAgIHdoaWxlICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJywnKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMu
cHVzaCh0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZp
bmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5TZXF1ZW5jZUV4cHJl
c3Npb24oZXhwcmVzc2lvbnMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBl
eHByOworICAgICAgICB9OworICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEy
NjIvI3NlYy1ibG9jaworICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3RhdGVtZW50TGlz
dEl0ZW0gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgc3RhdGVtZW50OworICAgICAg
ICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7CisgICAgICAgICAg
ICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7CisgICAgICAgICAgICBpZiAo
dGhpcy5sb29rYWhlYWQudHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlICdleHBvcnQnOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQu
aXNNb2R1bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5l
eHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLklsbGVnYWxF
eHBvcnREZWNsYXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
ICdpbXBvcnQnOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hJbXBvcnRD
YWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBh
cnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCF0aGlzLmNvbnRleHQuaXNNb2R1bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCwgbWVzc2Fn
ZXNfMS5NZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0
aGlzLnBhcnNlSW1wb3J0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
ICdjb25zdCc6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNl
TGV4aWNhbERlY2xhcmF0aW9uKHsgaW5Gb3I6IGZhbHNlIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0
aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnY2xhc3MnOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhp
cy5wYXJzZUNsYXNzRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlICdsZXQnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGVtZW50ID0gdGhpcy5pc0xleGljYWxEZWNsYXJhdGlvbigpID8gdGhpcy5wYXJzZUxl
eGljYWxEZWNsYXJhdGlvbih7IGluRm9yOiBmYWxzZSB9KSA6IHRoaXMucGFyc2VTdGF0ZW1lbnQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVN0
YXRlbWVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
c3RhdGVtZW50ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRlbWVudDsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZUJsb2NrID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7CisgICAgICAg
ICAgICB2YXIgYmxvY2sgPSBbXTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHRoaXMubWF0Y2goJ30nKSkgeworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmxvY2sucHVzaCh0aGlzLnBh
cnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
LmV4cGVjdCgnfScpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuQmxvY2tTdGF0ZW1lbnQoYmxvY2spKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gaHR0
cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGV0LWFuZC1jb25zdC1kZWNsYXJhdGlv
bnMKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUxleGljYWxCaW5kaW5nID0gZnVuY3Rp
b24gKGtpbmQsIG9wdGlvbnMpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7CisgICAgICAgICAgICB2YXIgcGFyYW1zID0gW107CisgICAgICAgICAgICB2YXIgaWQg
PSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMsIGtpbmQpOworICAgICAgICAgICAgaWYgKHRoaXMu
Y29udGV4dC5zdHJpY3QgJiYgaWQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIp
IHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoaWQu
bmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuU3RyaWN0VmFyTmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOworICAgICAgICAgICAgaWYgKGtpbmQg
PT09ICdjb25zdCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2hLZXl3b3JkKCdp
bicpICYmICF0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmlz
b2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkRlY2xhcmF0
aW9uTWlzc2luZ0luaXRpYWxpemVyLCAnY29uc3QnKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCgh
b3B0aW9ucy5pbkZvciAmJiBpZC50eXBlICE9PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcikg
fHwgdGhpcy5tYXRjaCgnPScpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJz0nKTsK
KyAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0b3IoaWQsIGlu
aXQpKTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJpbmRpbmdM
aXN0ID0gZnVuY3Rpb24gKGtpbmQsIG9wdGlvbnMpIHsKKyAgICAgICAgICAgIHZhciBsaXN0ID0g
W3RoaXMucGFyc2VMZXhpY2FsQmluZGluZyhraW5kLCBvcHRpb25zKV07CisgICAgICAgICAgICB3
aGlsZSAodGhpcy5tYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4o
KTsKKyAgICAgICAgICAgICAgICBsaXN0LnB1c2godGhpcy5wYXJzZUxleGljYWxCaW5kaW5nKGtp
bmQsIG9wdGlvbnMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsaXN0Owor
ICAgICAgICB9OworICAgICAgICBQYXJzZXIucHJvdG90eXBlLmlzTGV4aWNhbERlY2xhcmF0aW9u
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zY2FubmVyLnNh
dmVTdGF0ZSgpOworICAgICAgICAgICAgdGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpOworICAg
ICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7CisgICAgICAgICAgICB0aGlz
LnNjYW5uZXIucmVzdG9yZVN0YXRlKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiAobmV4dC50
eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHx8CisgICAgICAgICAgICAgICAgKG5leHQudHlw
ZSA9PT0gNyAvKiBQdW5jdHVhdG9yICovICYmIG5leHQudmFsdWUgPT09ICdbJykgfHwKKyAgICAg
ICAgICAgICAgICAobmV4dC50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgbmV4dC52YWx1
ZSA9PT0gJ3snKSB8fAorICAgICAgICAgICAgICAgIChuZXh0LnR5cGUgPT09IDQgLyogS2V5d29y
ZCAqLyAmJiBuZXh0LnZhbHVlID09PSAnbGV0JykgfHwKKyAgICAgICAgICAgICAgICAobmV4dC50
eXBlID09PSA0IC8qIEtleXdvcmQgKi8gJiYgbmV4dC52YWx1ZSA9PT0gJ3lpZWxkJyk7CisgICAg
ICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMZXhpY2FsRGVjbGFyYXRpb24g
PSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0
ZU5vZGUoKTsKKyAgICAgICAgICAgIHZhciBraW5kID0gdGhpcy5uZXh0VG9rZW4oKS52YWx1ZTsK
KyAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChraW5kID09PSAnbGV0JyB8fCBraW5kID09PSAn
Y29uc3QnLCAnTGV4aWNhbCBkZWNsYXJhdGlvbiBtdXN0IGJlIGVpdGhlciBsZXQgb3IgY29uc3Qn
KTsKKyAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbnMgPSB0aGlzLnBhcnNlQmluZGluZ0xpc3Qo
a2luZCwgb3B0aW9ucyk7CisgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlZhcmlhYmxlRGVj
bGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKSk7CisgICAgICAgIH07CisgICAgICAgIC8vIGh0
dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWRlc3RydWN0dXJpbmctYmluZGluZy1w
YXR0ZXJucworICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQmluZGluZ1Jlc3RFbGVtZW50
ID0gZnVuY3Rpb24gKHBhcmFtcywga2luZCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlz
LmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKKyAgICAgICAg
ICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMsIGtpbmQpOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUmVzdEVsZW1lbnQoYXJnKSk7
CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBcnJheVBhdHRlcm4g
PSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworICAgICAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsKKyAgICAgICAgICAg
IHZhciBlbGVtZW50cyA9IFtdOworICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCddJykp
IHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1
c2gobnVsbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW1lbnRzLnB1c2godGhpcy5wYXJzZUJpbmRpbmdSZXN0RWxlbWVudChwYXJh
bXMsIGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbWVudHMucHVzaCh0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywg
a2luZCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5tYXRjaCgnXScpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgn
LCcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5leHBlY3QoJ10nKTsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFycmF5UGF0dGVybihlbGVtZW50cykpOworICAg
ICAgICB9OworICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJvcGVydHlQYXR0ZXJuID0g
ZnVuY3Rpb24gKHBhcmFtcywga2luZCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHZhciBjb21wdXRlZCA9IGZhbHNlOworICAgICAgICAg
ICAgdmFyIHNob3J0aGFuZCA9IGZhbHNlOworICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGZhbHNl
OworICAgICAgICAgICAgdmFyIGtleTsKKyAgICAgICAgICAgIHZhciB2YWx1ZTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHsKKyAg
ICAgICAgICAgICAgICB2YXIga2V5VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKyAgICAgICAgICAg
ICAgICBrZXkgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgICAgICAg
ICAgdmFyIGluaXQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIoa2V5
VG9rZW4udmFsdWUpKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtleVRva2VuKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2hvcnRoYW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9r
ZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlQXNzaWdubWVu
dEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbmFsaXpl
KHRoaXMuc3RhcnROb2RlKGtleVRva2VuKSwgbmV3IE5vZGUuQXNzaWdubWVudFBhdHRlcm4oaW5p
dCwgZXhwcikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgh
dGhpcy5tYXRjaCgnOicpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtleVRv
a2VuKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBpbml0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJzonKTsKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywg
a2luZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7CisgICAgICAg
ICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisgICAgICAgICAg
ICAgICAgdGhpcy5leHBlY3QoJzonKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFy
c2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zLCBraW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlByb3BlcnR5KCdpbml0
Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSk7CisgICAgICAgIH07
CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXN0UHJvcGVydHkgPSBmdW5jdGlvbiAo
cGFyYW1zLCBraW5kKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworICAgICAgICAgICAgdGhpcy5leHBlY3QoJy4uLicpOworICAgICAgICAgICAgdmFyIGFyZyA9
IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcyk7CisgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgn
PScpKSB7CisgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuRGVmYXVsdFJlc3RQcm9wZXJ0eSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
IXRoaXMubWF0Y2goJ30nKSkgeworICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNz
YWdlc18xLk1lc3NhZ2VzLlByb3BlcnR5QWZ0ZXJSZXN0UHJvcGVydHkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUmVzdFBy
b3BlcnR5KGFyZykpOworICAgICAgICB9OworICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNl
T2JqZWN0UGF0dGVybiA9IGZ1bmN0aW9uIChwYXJhbXMsIGtpbmQpIHsKKyAgICAgICAgICAgIHZh
ciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9
IFtdOworICAgICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKKyAgICAgICAgICAgIHdoaWxlICgh
dGhpcy5tYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHRoaXMu
bWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVJlc3RQcm9wZXJ0eShwYXJhbXMsIGtpbmQpIDogdGhp
cy5wYXJzZVByb3BlcnR5UGF0dGVybihwYXJhbXMsIGtpbmQpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMubWF0Y2goJ30nKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgn
LCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCd9Jyk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5PYmplY3RQYXR0ZXJuKHByb3BlcnRpZXMpKTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZVBhdHRlcm4gPSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7Cisg
ICAgICAgICAgICB2YXIgcGF0dGVybjsKKyAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCdbJykp
IHsKKyAgICAgICAgICAgICAgICBwYXR0ZXJuID0gdGhpcy5wYXJzZUFycmF5UGF0dGVybihwYXJh
bXMsIGtpbmQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRj
aCgneycpKSB7CisgICAgICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMucGFyc2VPYmplY3RQYXR0
ZXJuKHBhcmFtcywga2luZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2xldCcpICYmIChraW5kID09PSAn
Y29uc3QnIHx8IGtpbmQgPT09ICdsZXQnKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2Vz
LkxldEluTGV4aWNhbEJpbmRpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBwYXJhbXMucHVzaCh0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICAgICAgcGF0dGVybiA9
IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoa2luZCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gcGF0dGVybjsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdCA9IGZ1bmN0aW9uIChwYXJhbXMsIGtpbmQpIHsK
KyAgICAgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAg
ICB2YXIgcGF0dGVybiA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7CisgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9r
ZW4oKTsKKyAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250
ZXh0LmFsbG93WWllbGQ7CisgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQg
PSB0cnVlOworICAgICAgICAgICAgICAgIHZhciByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3Jh
bW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgIHRo
aXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworICAgICAgICAgICAg
ICAgIHBhdHRlcm4gPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBu
ZXcgTm9kZS5Bc3NpZ25tZW50UGF0dGVybihwYXR0ZXJuLCByaWdodCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm47CisgICAgICAgIH07CisgICAgICAgIC8vIGh0
dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXZhcmlhYmxlLXN0YXRlbWVudAorICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyID0gZnVuY3Rpb24g
KGtpbmQpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAg
ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgaWYgKHRv
a2VuLnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAmJiB0b2tlbi52YWx1ZSA9PT0gJ3lpZWxkJykg
eworICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEu
TWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoIXRoaXMuY29udGV4dC5hbGxvd1lpZWxkKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgIT09
IDMgLyogSWRlbnRpZmllciAqLykgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQu
c3RyaWN0ICYmIHRva2VuLnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAmJiB0aGlzLnNjYW5uZXIu
aXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3Nh
Z2VzLlN0cmljdFJlc2VydmVkV29yZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCB8
fCB0b2tlbi52YWx1ZSAhPT0gJ2xldCcgfHwga2luZCAhPT0gJ3ZhcicpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAoKHRoaXMuY29udGV4dC5pc01vZHVsZSB8fCB0aGlzLmNvbnRleHQuYXdhaXQp
ICYmIHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiB0b2tlbi52YWx1ZSA9PT0g
J2F3YWl0JykgeworICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4o
dG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpOworICAgICAgICB9OworICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbiA9IGZ1bmN0aW9u
IChvcHRpb25zKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwor
ICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdOworICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5w
YXJzZVBhdHRlcm4ocGFyYW1zLCAndmFyJyk7CisgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0
LnN0cmljdCAmJiBpZC50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgeworICAg
ICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNz
YWdlcy5TdHJpY3RWYXJOYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CisgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgn
PScpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAg
ICBpbml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhw
cmVzc2lvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpZC50eXBlICE9
PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllciAmJiAhb3B0aW9ucy5pbkZvcikgeworICAgICAg
ICAgICAgICAgIHRoaXMuZXhwZWN0KCc9Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0b3IoaWQs
IGluaXQpKTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlh
YmxlRGVjbGFyYXRpb25MaXN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICAgICAgICAgIHZh
ciBvcHQgPSB7IGluRm9yOiBvcHRpb25zLmluRm9yIH07CisgICAgICAgICAgICB2YXIgbGlzdCA9
IFtdOworICAgICAgICAgICAgbGlzdC5wdXNoKHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9u
KG9wdCkpOworICAgICAgICAgICAgd2hpbGUgKHRoaXMubWF0Y2goJywnKSkgeworICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgbGlzdC5wdXNoKHRoaXMu
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKG9wdCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIGxpc3Q7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFy
c2VWYXJpYWJsZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3Zh
cicpOworICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VWYXJpYWJsZURl
Y2xhcmF0aW9uTGlzdCh7IGluRm9yOiBmYWxzZSB9KTsKKyAgICAgICAgICAgIHRoaXMuY29uc3Vt
ZVNlbWljb2xvbigpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKSk7CisgICAgICAg
IH07CisgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVtcHR5
LXN0YXRlbWVudAorICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRW1wdHlTdGF0ZW1lbnQg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworICAgICAgICAgICAgdGhpcy5leHBlY3QoJzsnKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOworICAgICAgICB9Owor
ICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1leHByZXNzaW9u
LXN0YXRlbWVudAorICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRXhwcmVzc2lvblN0YXRl
bWVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7CisgICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7Cisg
ICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcikpOwor
ICAgICAgICB9OworICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3Nl
Yy1pZi1zdGF0ZW1lbnQKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUlmQ2xhdXNlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhp
cy5tYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRvbGVy
YXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVN0YXRlbWVudCgpOworICAgICAgICB9
OworICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSWZTdGF0ZW1lbnQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAg
ICAgdmFyIGNvbnNlcXVlbnQ7CisgICAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gbnVsbDsKKyAg
ICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnaWYnKTsKKyAgICAgICAgICAgIHRoaXMuZXhw
ZWN0KCcoJyk7CisgICAgICAgICAgICB2YXIgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7
CisgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmNvbmZpZy50b2xlcmFu
dCkgeworICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5u
ZXh0VG9rZW4oKSk7CisgICAgICAgICAgICAgICAgY29uc2VxdWVudCA9IHRoaXMuZmluYWxpemUo
dGhpcy5jcmVhdGVOb2RlKCksIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJykn
KTsKKyAgICAgICAgICAgICAgICBjb25zZXF1ZW50ID0gdGhpcy5wYXJzZUlmQ2xhdXNlKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdlbHNlJykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgYWx0ZXJu
YXRlID0gdGhpcy5wYXJzZUlmQ2xhdXNlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWZT
dGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSk7CisgICAgICAgIH07CisgICAg
ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWRvLXdoaWxlLXN0YXRl
bWVudAorICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRG9XaGlsZVN0YXRlbWVudCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Cisg
ICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2RvJyk7CisgICAgICAgICAgICB2YXIgcHJl
dmlvdXNJbkl0ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbjsKKyAgICAgICAgICAg
IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHRydWU7CisgICAgICAgICAgICB2YXIgYm9keSA9
IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJh
dGlvbiA9IHByZXZpb3VzSW5JdGVyYXRpb247CisgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdv
cmQoJ3doaWxlJyk7CisgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOworICAgICAgICAgICAg
dmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgaWYgKCF0aGlz
Lm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJykn
KTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnOycpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRG9XaGls
ZVN0YXRlbWVudChib2R5LCB0ZXN0KSk7CisgICAgICAgIH07CisgICAgICAgIC8vIGh0dHBzOi8v
dGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXdoaWxlLXN0YXRlbWVudAorICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlV2hpbGVTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgdmFyIGJvZHk7
CisgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CisgICAgICAgICAgICB0
aGlzLmV4cGVjdCgnKCcpOworICAgICAgICAgICAgdmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVz
c2lvbigpOworICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcu
dG9sZXJhbnQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2Vu
KHRoaXMubmV4dFRva2VuKCkpOworICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmZpbmFsaXpl
KHRoaXMuY3JlYXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcp
Jyk7CisgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzSW5JdGVyYXRpb24gPSB0aGlzLmNvbnRl
eHQuaW5JdGVyYXRpb247CisgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOwor
ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHByZXZpb3VzSW5JdGVy
YXRpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5XaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KSk7CisgICAgICAgIH07Cisg
ICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZvci1zdGF0ZW1l
bnQKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZm9yLWlu
LWFuZC1mb3Itb2Ytc3RhdGVtZW50cworICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRm9y
U3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwor
ICAgICAgICAgICAgdmFyIHRlc3QgPSBudWxsOworICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IG51
bGw7CisgICAgICAgICAgICB2YXIgZm9ySW4gPSB0cnVlOworICAgICAgICAgICAgdmFyIGxlZnQs
IHJpZ2h0OworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAg
ICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZm9yJyk7CisgICAgICAgICAgICB0aGlzLmV4cGVj
dCgnKCcpOworICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJzsnKSkgeworICAgICAgICAgICAg
ICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ3ZhcicpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGluaXQgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxs
b3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luOworICAgICAgICAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuYWxsb3dJbiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRp
b25zID0gdGhpcy5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KHsgaW5Gb3I6IHRydWUgfSk7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gcHJldmlvdXNBbGxv
d0luOworICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAm
JiB0aGlzLm1hdGNoS2V5d29yZCgnaW4nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGRlY2wgPSBkZWNsYXJhdGlvbnNbMF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVj
bC5pbml0ICYmIChkZWNsLmlkLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5BcnJheVBhdHRlcm4g
fHwgZGVjbC5pZC50eXBlID09PSBzeW50YXhfMS5TeW50YXguT2JqZWN0UGF0dGVybiB8fCB0aGlz
LmNvbnRleHQuc3RyaWN0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9s
ZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkZvckluT2ZMb29wSW5pdGlhbGl6ZXIsICdm
b3ItaW4nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRp
b24oZGVjbGFyYXRpb25zLCAndmFyJykpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5u
ZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OworICAgICAg
ICAgICAgICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBk
ZWNsYXJhdGlvbnNbMF0uaW5pdCA9PT0gbnVsbCAmJiB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdv
cmQoJ29mJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXpl
KGluaXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCAndmFyJykp
OworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnQgPSBpbml0OworICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQg
PSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluaXQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgZm9ySW4gPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZh
cmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCAndmFyJykpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJzsnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoS2V5d29yZCgn
Y29uc3QnKSB8fCB0aGlzLm1hdGNoS2V5d29yZCgnbGV0JykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW5pdCA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgICAgICAgICB2YXIga2lu
ZCA9IHRoaXMubmV4dFRva2VuKCkudmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhp
cy5jb250ZXh0LnN0cmljdCAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0gJ2luJykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUu
SWRlbnRpZmllcihraW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICByaWdodCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0Fs
bG93SW4gPSB0aGlzLmNvbnRleHQuYWxsb3dJbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuY29udGV4dC5hbGxvd0luID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
ZGVjbGFyYXRpb25zID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KGtpbmQsIHsgaW5Gb3I6IHRydWUg
fSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHByZXZp
b3VzQWxsb3dJbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbnMubGVu
Z3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0ID09PSBudWxsICYmIHRoaXMubWF0Y2hL
ZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMu
ZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMs
IGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09
IDEgJiYgZGVjbGFyYXRpb25zWzBdLmluaXQgPT09IG51bGwgJiYgdGhpcy5tYXRjaENvbnRleHR1
YWxLZXl3b3JkKCdvZicpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRo
aXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlv
bnMsIGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9ySW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24o
ZGVjbGFyYXRpb25zLCBraW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBpbml0U3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFk
OworICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0
LmFsbG93SW47CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIo
dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47CisgICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLm1hdGNoS2V5d29yZCgnaW4nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCF0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0IHx8IGluaXQudHlwZSA9PT0gc3lu
dGF4XzEuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZExI
U0luRm9ySW4pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVp
bnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGluaXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbGVmdCA9IGluaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IHRoaXMucGFy
c2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1h
dGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCB8fCBpbml0LnR5cGUgPT09IHN5bnRh
eF8xLlN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRMSFNJ
bkZvckxvb3ApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVp
bnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGluaXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbGVmdCA9IGluaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IHRoaXMucGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9
IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMubWF0Y2goJywnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBpbml0U2VxID0gW2luaXRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlICh0aGlzLm1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFNl
cS5wdXNoKHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoaW5pdFN0YXJ0
VG9rZW4pLCBuZXcgTm9kZS5TZXF1ZW5jZUV4cHJlc3Npb24oaW5pdFNlcSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJzsn
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJzsnKSkgeworICAgICAgICAgICAgICAgICAgICB0
ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJzsnKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0
Y2goJyknKSkgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGUgPSB0aGlzLnBhcnNlRXhwcmVz
c2lvbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
ciBib2R5OworICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcu
dG9sZXJhbnQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2Vu
KHRoaXMubmV4dFRva2VuKCkpOworICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmZpbmFsaXpl
KHRoaXMuY3JlYXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcp
Jyk7CisgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzSW5JdGVyYXRpb24gPSB0aGlzLmNvbnRl
eHQuaW5JdGVyYXRpb247CisgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFy
KHRoaXMucGFyc2VTdGF0ZW1lbnQpOworICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkl0
ZXJhdGlvbiA9IHByZXZpb3VzSW5JdGVyYXRpb247CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgPworICAgICAgICAgICAgICAg
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRm9yU3RhdGVtZW50KGluaXQsIHRlc3QsIHVw
ZGF0ZSwgYm9keSkpIDoKKyAgICAgICAgICAgICAgICBmb3JJbiA/IHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuRm9ySW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpKSA6CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRm9yT2ZTdGF0ZW1lbnQo
bGVmdCwgcmlnaHQsIGJvZHkpKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5
LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY29udGludWUtc3RhdGVtZW50CisgICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VDb250aW51ZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICB0aGlzLmV4
cGVjdEtleXdvcmQoJ2NvbnRpbnVlJyk7CisgICAgICAgICAgICB2YXIgbGFiZWwgPSBudWxsOwor
ICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAq
LyAmJiAhdGhpcy5oYXNMaW5lVGVybWluYXRvcikgeworICAgICAgICAgICAgICAgIHZhciBpZCA9
IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICBsYWJlbCA9
IGlkOworICAgICAgICAgICAgICAgIHZhciBrZXkgPSAnJCcgKyBpZC5uYW1lOworICAgICAgICAg
ICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29u
dGV4dC5sYWJlbFNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJy
b3IobWVzc2FnZXNfMS5NZXNzYWdlcy5Vbmtub3duTGFiZWwsIGlkLm5hbWUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xv
bigpOworICAgICAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYmICF0aGlzLmNvbnRleHQuaW5J
dGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5N
ZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ29udGludWVTdGF0ZW1lbnQobGFiZWwp
KTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYy
LyNzZWMtYnJlYWstc3RhdGVtZW50CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VCcmVh
a1N0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5j
cmVhdGVOb2RlKCk7CisgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2JyZWFrJyk7Cisg
ICAgICAgICAgICB2YXIgbGFiZWwgPSBudWxsOworICAgICAgICAgICAgaWYgKHRoaXMubG9va2Fo
ZWFkLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiAhdGhpcy5oYXNMaW5lVGVybWluYXRv
cikgeworICAgICAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZp
ZXIoKTsKKyAgICAgICAgICAgICAgICB2YXIga2V5ID0gJyQnICsgaWQubmFtZTsKKyAgICAgICAg
ICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNv
bnRleHQubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vy
cm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBpZC5uYW1lKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFiZWwgPSBpZDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworICAgICAgICAgICAgaWYgKGxhYmVs
ID09PSBudWxsICYmICF0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gJiYgIXRoaXMuY29udGV4dC5p
blN3aXRjaCkgeworICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1l
c3NhZ2VzLklsbGVnYWxCcmVhayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5CcmVha1N0YXRlbWVudChsYWJlbCkpOworICAg
ICAgICB9OworICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1y
ZXR1cm4tc3RhdGVtZW50CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXR1cm5TdGF0
ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5pbkZ1
bmN0aW9uQm9keSkgeworICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdl
c18xLk1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5
d29yZCgncmV0dXJuJyk7CisgICAgICAgICAgICB2YXIgaGFzQXJndW1lbnQgPSAhdGhpcy5tYXRj
aCgnOycpICYmICF0aGlzLm1hdGNoKCd9JykgJiYKKyAgICAgICAgICAgICAgICAhdGhpcy5oYXNM
aW5lVGVybWluYXRvciAmJiB0aGlzLmxvb2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLzsKKyAg
ICAgICAgICAgIHZhciBhcmd1bWVudCA9IGhhc0FyZ3VtZW50ID8gdGhpcy5wYXJzZUV4cHJlc3Np
b24oKSA6IG51bGw7CisgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlJldHVyblN0YXRlbWVu
dChhcmd1bWVudCkpOworICAgICAgICB9OworICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHVi
LmlvL2VjbWEyNjIvI3NlYy13aXRoLXN0YXRlbWVudAorICAgICAgICBQYXJzZXIucHJvdG90eXBl
LnBhcnNlV2l0aFN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
LmNvbnRleHQuc3RyaWN0KSB7CisgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1l
c3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0TW9kZVdpdGgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHZhciBib2R5
OworICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd3aXRoJyk7CisgICAgICAgICAgICB0
aGlzLmV4cGVjdCgnKCcpOworICAgICAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMucGFyc2VFeHBy
ZXNzaW9uKCk7CisgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmNvbmZp
Zy50b2xlcmFudCkgeworICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9r
ZW4odGhpcy5uZXh0VG9rZW4oKSk7CisgICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuZmluYWxp
emUodGhpcy5jcmVhdGVOb2RlKCksIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5leHBlY3Qo
JyknKTsKKyAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuV2l0aFN0YXRlbWVudChvYmplY3QsIGJvZHkpKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8g
aHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3dpdGNoLXN0YXRlbWVudAorICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3dpdGNoQ2FzZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICB2YXIg
dGVzdDsKKyAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICB0ZXN0ID0g
bnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHRoaXMuZXhwZWN0S2V5d29yZCgnY2FzZScpOworICAgICAgICAgICAgICAgIHRlc3QgPSB0aGlz
LnBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5leHBl
Y3QoJzonKTsKKyAgICAgICAgICAgIHZhciBjb25zZXF1ZW50ID0gW107CisgICAgICAgICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9JykgfHwgdGhp
cy5tYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSB8fCB0aGlzLm1hdGNoS2V5d29yZCgnY2FzZScpKSB7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjb25zZXF1ZW50LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuU3dpdGNoQ2FzZSh0ZXN0LCBjb25zZXF1ZW50KSk7CisgICAgICAgIH07CisgICAgICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VTd2l0Y2hTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgdGhp
cy5leHBlY3RLZXl3b3JkKCdzd2l0Y2gnKTsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7
CisgICAgICAgICAgICB2YXIgZGlzY3JpbWluYW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsK
KyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7CisgICAgICAgICAgICB2YXIgcHJldmlvdXNJ
blN3aXRjaCA9IHRoaXMuY29udGV4dC5pblN3aXRjaDsKKyAgICAgICAgICAgIHRoaXMuY29udGV4
dC5pblN3aXRjaCA9IHRydWU7CisgICAgICAgICAgICB2YXIgY2FzZXMgPSBbXTsKKyAgICAgICAg
ICAgIHZhciBkZWZhdWx0Rm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd7
Jyk7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlz
Lm1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHZhciBjbGF1c2UgPSB0aGlzLnBhcnNlU3dpdGNoQ2FzZSgp
OworICAgICAgICAgICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoZGVmYXVsdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0
Y2gpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRG
b3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2VzLnB1
c2goY2xhdXNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7
CisgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSBwcmV2aW91c0luU3dpdGNoOwor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuU3dpdGNoU3Rh
dGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gaHR0
cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGFiZWxsZWQtc3RhdGVtZW50cworICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGFiZWxsZWRTdGF0ZW1lbnQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAg
ICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgdmFyIHN0
YXRlbWVudDsKKyAgICAgICAgICAgIGlmICgoZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50YXgu
SWRlbnRpZmllcikgJiYgdGhpcy5tYXRjaCgnOicpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5u
ZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICB2YXIgaWQgPSBleHByOworICAgICAgICAgICAg
ICAgIHZhciBrZXkgPSAnJCcgKyBpZC5uYW1lOworICAgICAgICAgICAgICAgIGlmIChPYmplY3Qu
cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb250ZXh0LmxhYmVsU2V0LCBrZXkp
KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3Nh
Z2VzLlJlZGVjbGFyYXRpb24sICdMYWJlbCcsIGlkLm5hbWUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQubGFiZWxTZXRba2V5XSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgdmFyIGJvZHkgPSB2b2lkIDA7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2hLZXl3b3JkKCdjbGFzcycpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworICAgICAgICAgICAgICAgICAgICBi
b2R5ID0gdGhpcy5wYXJzZUNsYXNzRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0
aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2Vu
LCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWNsYXJhdGlvbi5nZW5lcmF0b3Ip
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4o
dG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuR2VuZXJhdG9ySW5MZWdhY3lDb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBib2R5ID0gZGVjbGFyYXRp
b247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jb250ZXh0LmxhYmVsU2V0W2tleV07Cisg
ICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gbmV3IE5vZGUuTGFiZWxlZFN0YXRlbWVudChpZCwg
Ym9keSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBu
ZXcgTm9kZS5FeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgc3RhdGVtZW50KTsKKyAgICAgICAgfTsK
KyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdGhyb3ctc3Rh
dGVtZW50CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VUaHJvd1N0YXRlbWVudCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Cisg
ICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3Rocm93Jyk7CisgICAgICAgICAgICBpZiAo
dGhpcy5oYXNMaW5lVGVybWluYXRvcikgeworICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJv
cihtZXNzYWdlc18xLk1lc3NhZ2VzLk5ld2xpbmVBZnRlclRocm93KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZhciBhcmd1bWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisgICAg
ICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlRocm93U3RhdGVtZW50KGFyZ3VtZW50KSk7CisgICAg
ICAgIH07CisgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRy
eS1zdGF0ZW1lbnQKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNhdGNoQ2xhdXNlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
KyAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnY2F0Y2gnKTsKKyAgICAgICAgICAgIHRo
aXMuZXhwZWN0KCcoJyk7CisgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcGFyYW1zID0gW107CisgICAgICAgICAgICB2
YXIgcGFyYW0gPSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMpOworICAgICAgICAgICAgdmFyIHBh
cmFtTWFwID0ge307CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBrZXkgPSAnJCcgKyBwYXJhbXNbaV0udmFs
dWU7CisgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbChwYXJhbU1hcCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRl
RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5EdXBsaWNhdGVCaW5kaW5nLCBwYXJhbXNbaV0udmFs
dWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJhbU1hcFtrZXldID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0
ICYmIHBhcmFtLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5hbWUpKSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3Nh
Z2VzLlN0cmljdENhdGNoVmFyaWFibGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7CisgICAgICAgICAgICB2YXIgYm9keSA9
IHRoaXMucGFyc2VCbG9jaygpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuQ2F0Y2hDbGF1c2UocGFyYW0sIGJvZHkpKTsKKyAgICAgICAgfTsKKyAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZpbmFsbHlDbGF1c2UgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2ZpbmFsbHknKTsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLnBhcnNlQmxvY2soKTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZVRyeVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQo
J3RyeScpOworICAgICAgICAgICAgdmFyIGJsb2NrID0gdGhpcy5wYXJzZUJsb2NrKCk7CisgICAg
ICAgICAgICB2YXIgaGFuZGxlciA9IHRoaXMubWF0Y2hLZXl3b3JkKCdjYXRjaCcpID8gdGhpcy5w
YXJzZUNhdGNoQ2xhdXNlKCkgOiBudWxsOworICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IHRo
aXMubWF0Y2hLZXl3b3JkKCdmaW5hbGx5JykgPyB0aGlzLnBhcnNlRmluYWxseUNsYXVzZSgpIDog
bnVsbDsKKyAgICAgICAgICAgIGlmICghaGFuZGxlciAmJiAhZmluYWxpemVyKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuTm9DYXRjaE9yRmlu
YWxseSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5UcnlTdGF0ZW1lbnQoYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcikpOwor
ICAgICAgICB9OworICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3Nl
Yy1kZWJ1Z2dlci1zdGF0ZW1lbnQKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZURlYnVn
Z2VyU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlz
LmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZGVidWdnZXIn
KTsKKyAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRGVidWdnZXJTdGF0ZW1lbnQoKSk7Cisg
ICAgICAgIH07CisgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2Vj
LWVjbWFzY3JpcHQtbGFuZ3VhZ2Utc3RhdGVtZW50cy1hbmQtZGVjbGFyYXRpb25zCisgICAgICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICB2YXIgc3RhdGVtZW50OworICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC50
eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxIC8qIEJvb2xlYW5MaXRlcmFsICovOgorICAg
ICAgICAgICAgICAgIGNhc2UgNSAvKiBOdWxsTGl0ZXJhbCAqLzoKKyAgICAgICAgICAgICAgICBj
YXNlIDYgLyogTnVtZXJpY0xpdGVyYWwgKi86CisgICAgICAgICAgICAgICAgY2FzZSA4IC8qIFN0
cmluZ0xpdGVyYWwgKi86CisgICAgICAgICAgICAgICAgY2FzZSAxMCAvKiBUZW1wbGF0ZSAqLzoK
KyAgICAgICAgICAgICAgICBjYXNlIDkgLyogUmVndWxhckV4cHJlc3Npb24gKi86CisgICAgICAg
ICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNyAvKiBQ
dW5jdHVhdG9yICovOgorICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmxvb2th
aGVhZC52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAneycpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VCbG9jaygpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09
PSAnKCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VF
eHByZXNzaW9uU3RhdGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09ICc7JykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUVtcHR5U3RhdGVtZW50KCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMyAvKiBJZGVudGlmaWVyICovOgorICAgICAgICAgICAgICAgICAgICBzdGF0ZW1l
bnQgPSB0aGlzLm1hdGNoQXN5bmNGdW5jdGlvbigpID8gdGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFy
YXRpb24oKSA6IHRoaXMucGFyc2VMYWJlbGxlZFN0YXRlbWVudCgpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQgLyogS2V5d29yZCAqLzoKKyAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnYnJlYWsnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlbWVudCA9IHRoaXMucGFyc2VCcmVha1N0YXRlbWVudCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29udGlu
dWUnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VD
b250aW51ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVidWdnZXInOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnZG8nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRo
aXMucGFyc2VEb1doaWxlU3RhdGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmb3InOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VGb3JTdGF0ZW1lbnQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQg
PSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaWYnOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VJZlN0YXRlbWVudCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAncmV0dXJuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1l
bnQgPSB0aGlzLnBhcnNlUmV0dXJuU3RhdGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzd2l0Y2gnOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VTd2l0Y2hTdGF0
ZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ3Rocm93JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZW1lbnQgPSB0aGlzLnBhcnNlVGhyb3dTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RyeSc6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVRyeVN0YXRl
bWVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAndmFyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZW1lbnQgPSB0aGlzLnBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3doaWxlJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlV2hpbGVT
dGF0ZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ3dpdGgnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlbWVudCA9IHRoaXMucGFyc2VXaXRoU3RhdGVtZW50KCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9u
U3RhdGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGVtZW50OworICAgICAgICB9OworICAgICAgICAvLyBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi1kZWZpbml0aW9ucworICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICB0
aGlzLmV4cGVjdCgneycpOworICAgICAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlRGlyZWN0
aXZlUHJvbG9ndWVzKCk7CisgICAgICAgICAgICB2YXIgcHJldmlvdXNMYWJlbFNldCA9IHRoaXMu
Y29udGV4dC5sYWJlbFNldDsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c0luSXRlcmF0aW9uID0g
dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uOworICAgICAgICAgICAgdmFyIHByZXZpb3VzSW5Td2l0
Y2ggPSB0aGlzLmNvbnRleHQuaW5Td2l0Y2g7CisgICAgICAgICAgICB2YXIgcHJldmlvdXNJbkZ1
bmN0aW9uQm9keSA9IHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keTsKKyAgICAgICAgICAgIHRo
aXMuY29udGV4dC5sYWJlbFNldCA9IHt9OworICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRl
cmF0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSBmYWxz
ZTsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSA9IHRydWU7CisgICAg
ICAgICAgICB3aGlsZSAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHsKKyAg
ICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBib2R5LnB1c2godGhp
cy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5leHBlY3QoJ30nKTsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5sYWJlbFNldCA9IHBy
ZXZpb3VzTGFiZWxTZXQ7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBw
cmV2aW91c0luSXRlcmF0aW9uOworICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluU3dpdGNoID0g
cHJldmlvdXNJblN3aXRjaDsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9k
eSA9IHByZXZpb3VzSW5GdW5jdGlvbkJvZHk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5h
bGl6ZShub2RlLCBuZXcgTm9kZS5CbG9ja1N0YXRlbWVudChib2R5KSk7CisgICAgICAgIH07Cisg
ICAgICAgIFBhcnNlci5wcm90b3R5cGUudmFsaWRhdGVQYXJhbSA9IGZ1bmN0aW9uIChvcHRpb25z
LCBwYXJhbSwgbmFtZSkgeworICAgICAgICAgICAgdmFyIGtleSA9ICckJyArIG5hbWU7CisgICAg
ICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgeworICAgICAgICAgICAgICAgIGlmICh0
aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChuYW1lKSkgeworICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
bWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w
ZXJ0eS5jYWxsKG9wdGlvbnMucGFyYW1TZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
b3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtOworICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1l
c3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghb3B0aW9ucy5maXJz
dFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJp
Y3RlZFdvcmQobmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJlc3Ry
aWN0ZWQgPSBwYXJhbTsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gbWVz
c2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdv
cmQobmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQg
PSBwYXJhbTsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gbWVzc2FnZXNf
MS5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChv
cHRpb25zLnBhcmFtU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3Ry
aWN0ZWQgPSBwYXJhbTsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gbWVz
c2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICAg
ICAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7
CisgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdGlvbnMucGFyYW1TZXQs
IGtleSwgeyB2YWx1ZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIGNv
bmZpZ3VyYWJsZTogdHJ1ZSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1TZXRba2V5XSA9IHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXN0RWxlbWVu
dCA9IGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVh
dGVOb2RlKCk7CisgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLi4uJyk7CisgICAgICAgICAgICB2
YXIgYXJnID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zKTsKKyAgICAgICAgICAgIGlmICh0aGlz
Lm1hdGNoKCc9JykpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNf
MS5NZXNzYWdlcy5EZWZhdWx0UmVzdFBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgIHRoaXMudGhyb3dF
cnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlBhcmFtZXRlckFmdGVyUmVzdFBhcmFtZXRlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5SZXN0RWxlbWVudChhcmcpKTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAg
ICAgICB2YXIgcGFyYW1zID0gW107CisgICAgICAgICAgICB2YXIgcGFyYW0gPSB0aGlzLm1hdGNo
KCcuLi4nKSA/IHRoaXMucGFyc2VSZXN0RWxlbWVudChwYXJhbXMpIDogdGhpcy5wYXJzZVBhdHRl
cm5XaXRoRGVmYXVsdChwYXJhbXMpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBw
YXJhbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlUGFyYW0o
b3B0aW9ucywgcGFyYW1zW2ldLCBwYXJhbXNbaV0udmFsdWUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgb3B0aW9ucy5zaW1wbGUgPSBvcHRpb25zLnNpbXBsZSAmJiAocGFyYW0gaW5zdGFu
Y2VvZiBOb2RlLklkZW50aWZpZXIpOworICAgICAgICAgICAgb3B0aW9ucy5wYXJhbXMucHVzaChw
YXJhbSk7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VGb3JtYWxQ
YXJhbWV0ZXJzID0gZnVuY3Rpb24gKGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICAgICAgdmFy
IG9wdGlvbnM7CisgICAgICAgICAgICBvcHRpb25zID0geworICAgICAgICAgICAgICAgIHNpbXBs
ZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLAorICAgICAgICAgICAgICAgIGZp
cnN0UmVzdHJpY3RlZDogZmlyc3RSZXN0cmljdGVkCisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgdGhpcy5leHBlY3QoJygnKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpKSB7
CisgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbVNldCA9IHt9OworICAgICAgICAgICAgICAg
IHdoaWxlICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLykgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVyKG9wdGlvbnMpOworICAgICAgICAg
ICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0aGlz
LmV4cGVjdCgnLCcpOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZXhwZWN0
KCcpJyk7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHNpbXBsZTogb3B0
aW9ucy5zaW1wbGUsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcywKKyAg
ICAgICAgICAgICAgICBzdHJpY3RlZDogb3B0aW9ucy5zdHJpY3RlZCwKKyAgICAgICAgICAgICAg
ICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLAorICAgICAgICAgICAg
ICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfTsK
KyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaEFzeW5jRnVuY3Rpb24gPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQo
J2FzeW5jJyk7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICB2YXIg
c3RhdGUgPSB0aGlzLnNjYW5uZXIuc2F2ZVN0YXRlKCk7CisgICAgICAgICAgICAgICAgdGhpcy5z
Y2FubmVyLnNjYW5Db21tZW50cygpOworICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5z
Y2FubmVyLmxleCgpOworICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5yZXN0b3JlU3RhdGUo
c3RhdGUpOworICAgICAgICAgICAgICAgIG1hdGNoID0gKHN0YXRlLmxpbmVOdW1iZXIgPT09IG5l
eHQubGluZU51bWJlcikgJiYgKG5leHQudHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSAmJiAobmV4
dC52YWx1ZSA9PT0gJ2Z1bmN0aW9uJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VGdW5j
dGlvbkRlY2xhcmF0aW9uID0gZnVuY3Rpb24gKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7CisgICAg
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgdmFyIGlz
QXN5bmMgPSB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5jJyk7CisgICAgICAgICAg
ICBpZiAoaXNBc3luYykgeworICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7Cisg
ICAgICAgICAgICB2YXIgaXNHZW5lcmF0b3IgPSBpc0FzeW5jID8gZmFsc2UgOiB0aGlzLm1hdGNo
KCcqJyk7CisgICAgICAgICAgICBpZiAoaXNHZW5lcmF0b3IpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1lc3NhZ2U7
CisgICAgICAgICAgICB2YXIgaWQgPSBudWxsOworICAgICAgICAgICAgdmFyIGZpcnN0UmVzdHJp
Y3RlZCA9IG51bGw7CisgICAgICAgICAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8ICF0
aGlzLm1hdGNoKCcoJykpIHsKKyAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2th
aGVhZDsKKyAgICAgICAgICAgICAgICBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIo
KTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2Vu
KHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZCh0
b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9
IHRva2VuOworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVz
c2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdv
cmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0
ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlc18x
Lk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBwcmV2aW91c0Fs
bG93QXdhaXQgPSB0aGlzLmNvbnRleHQuYXdhaXQ7CisgICAgICAgICAgICB2YXIgcHJldmlvdXNB
bGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisgICAgICAgICAgICB0aGlzLmNv
bnRleHQuYXdhaXQgPSBpc0FzeW5jOworICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWll
bGQgPSAhaXNHZW5lcmF0b3I7CisgICAgICAgICAgICB2YXIgZm9ybWFsUGFyYW1ldGVycyA9IHRo
aXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGZpcnN0UmVzdHJpY3RlZCk7CisgICAgICAgICAgICB2
YXIgcGFyYW1zID0gZm9ybWFsUGFyYW1ldGVycy5wYXJhbXM7CisgICAgICAgICAgICB2YXIgc3Ry
aWN0ZWQgPSBmb3JtYWxQYXJhbWV0ZXJzLnN0cmljdGVkOworICAgICAgICAgICAgZmlyc3RSZXN0
cmljdGVkID0gZm9ybWFsUGFyYW1ldGVycy5maXJzdFJlc3RyaWN0ZWQ7CisgICAgICAgICAgICBp
ZiAoZm9ybWFsUGFyYW1ldGVycy5tZXNzYWdlKSB7CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9
IGZvcm1hbFBhcmFtZXRlcnMubWVzc2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
ciBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7CisgICAgICAgICAgICB2YXIg
cHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZSA9IHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERp
cmVjdGl2ZTsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9
IGZvcm1hbFBhcmFtZXRlcnMuc2ltcGxlOworICAgICAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBh
cnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpOworICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4
dC5zdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy50aHJv
d1VuZXhwZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgc3RyaWN0ZWQpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHN0cmljdGVkLCBtZXNz
YWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSBw
cmV2aW91c1N0cmljdDsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVj
dGl2ZSA9IHByZXZpb3VzQWxsb3dTdHJpY3REaXJlY3RpdmU7CisgICAgICAgICAgICB0aGlzLmNv
bnRleHQuYXdhaXQgPSBwcmV2aW91c0FsbG93QXdhaXQ7CisgICAgICAgICAgICB0aGlzLmNvbnRl
eHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKKyAgICAgICAgICAgIHJldHVybiBp
c0FzeW5jID8gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3luY0Z1bmN0aW9uRGVjbGFy
YXRpb24oaWQsIHBhcmFtcywgYm9keSkpIDoKKyAgICAgICAgICAgICAgICB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLkZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywgYm9keSwgaXNH
ZW5lcmF0b3IpKTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZ1
bmN0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0g
dGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICB2YXIgaXNBc3luYyA9IHRoaXMubWF0Y2hD
b250ZXh0dWFsS2V5d29yZCgnYXN5bmMnKTsKKyAgICAgICAgICAgIGlmIChpc0FzeW5jKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKyAgICAgICAgICAgIHZhciBpc0dl
bmVyYXRvciA9IGlzQXN5bmMgPyBmYWxzZSA6IHRoaXMubWF0Y2goJyonKTsKKyAgICAgICAgICAg
IGlmIChpc0dlbmVyYXRvcikgeworICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbWVzc2FnZTsKKyAgICAgICAgICAgIHZhciBp
ZCA9IG51bGw7CisgICAgICAgICAgICB2YXIgZmlyc3RSZXN0cmljdGVkOworICAgICAgICAgICAg
dmFyIHByZXZpb3VzQWxsb3dBd2FpdCA9IHRoaXMuY29udGV4dC5hd2FpdDsKKyAgICAgICAgICAg
IHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKyAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IGlzQXN5bmM7CisgICAgICAgICAgICB0aGlzLmNv
bnRleHQuYWxsb3dZaWVsZCA9ICFpc0dlbmVyYXRvcjsKKyAgICAgICAgICAgIGlmICghdGhpcy5t
YXRjaCgnKCcpKSB7CisgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7
CisgICAgICAgICAgICAgICAgaWQgPSAoIXRoaXMuY29udGV4dC5zdHJpY3QgJiYgIWlzR2VuZXJh
dG9yICYmIHRoaXMubWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSA/IHRoaXMucGFyc2VJZGVudGlmaWVy
TmFtZSgpIDogdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgICAg
IGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlz
LnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEu
TWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RGdW5jdGlv
bk5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAodGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVz
ZXJ2ZWRXb3JkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGZvcm1hbFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNl
Rm9ybWFsUGFyYW1ldGVycyhmaXJzdFJlc3RyaWN0ZWQpOworICAgICAgICAgICAgdmFyIHBhcmFt
cyA9IGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zOworICAgICAgICAgICAgdmFyIHN0cmljdGVkID0g
Zm9ybWFsUGFyYW1ldGVycy5zdHJpY3RlZDsKKyAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9
IGZvcm1hbFBhcmFtZXRlcnMuZmlyc3RSZXN0cmljdGVkOworICAgICAgICAgICAgaWYgKGZvcm1h
bFBhcmFtZXRlcnMubWVzc2FnZSkgeworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBmb3JtYWxQ
YXJhbWV0ZXJzLm1lc3NhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcHJldmlv
dXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0OworICAgICAgICAgICAgdmFyIHByZXZpb3Vz
QWxsb3dTdHJpY3REaXJlY3RpdmUgPSB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU7
CisgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUgPSBmb3JtYWxQ
YXJhbWV0ZXJzLnNpbXBsZTsKKyAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZUZ1bmN0
aW9uU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0
ICYmIGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVj
dGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHN0cmljdGVkKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihzdHJpY3RlZCwgbWVzc2FnZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlvdXNT
dHJpY3Q7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUgPSBw
cmV2aW91c0FsbG93U3RyaWN0RGlyZWN0aXZlOworICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3
YWl0ID0gcHJldmlvdXNBbGxvd0F3YWl0OworICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93
WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CisgICAgICAgICAgICByZXR1cm4gaXNBc3luYyA/
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24oaWQs
IHBhcmFtcywgYm9keSkpIDoKKyAgICAgICAgICAgICAgICB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLkZ1bmN0aW9uRXhwcmVzc2lvbihpZCwgcGFyYW1zLCBib2R5LCBpc0dlbmVyYXRvcikp
OworICAgICAgICB9OworICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1kaXJlY3RpdmUtcHJvbG9ndWVzLWFuZC10aGUtdXNlLXN0cmljdC1kaXJlY3RpdmUKKyAg
ICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZURpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5wYXJz
ZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHZhciBkaXJlY3RpdmUgPSAoZXhwci50eXBlID09
PSBzeW50YXhfMS5TeW50YXguTGl0ZXJhbCkgPyB0aGlzLmdldFRva2VuUmF3KHRva2VuKS5zbGlj
ZSgxLCAtMSkgOiBudWxsOworICAgICAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBkaXJlY3RpdmUgPyBuZXcgTm9k
ZS5EaXJlY3RpdmUoZXhwciwgZGlyZWN0aXZlKSA6IG5ldyBOb2RlLkV4cHJlc3Npb25TdGF0ZW1l
bnQoZXhwcikpOworICAgICAgICB9OworICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRGly
ZWN0aXZlUHJvbG9ndWVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGZpcnN0UmVz
dHJpY3RlZCA9IG51bGw7CisgICAgICAgICAgICB2YXIgYm9keSA9IFtdOworICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVh
ZDsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gOCAvKiBTdHJpbmdMaXRlcmFs
ICovKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB2YXIgc3RhdGVtZW50ID0gdGhpcy5wYXJzZURpcmVjdGl2ZSgpOworICAg
ICAgICAgICAgICAgIGJvZHkucHVzaChzdGF0ZW1lbnQpOworICAgICAgICAgICAgICAgIHZhciBk
aXJlY3RpdmUgPSBzdGF0ZW1lbnQuZGlyZWN0aXZlOworICAgICAgICAgICAgICAgIGlmICh0eXBl
b2YgZGlyZWN0aXZlICE9PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gJ3Vz
ZSBzdHJpY3QnKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJp
Y3RlZCwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmFsbG93
U3RyaWN0RGlyZWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRl
VW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLklsbGVnYWxMYW5ndWFn
ZU1vZGVEaXJlY3RpdmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0
UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmly
c3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYm9keTsKKyAgICAgICAg
fTsKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbWV0aG9k
LWRlZmluaXRpb25zCisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucXVhbGlmaWVkUHJvcGVydHlO
YW1lID0gZnVuY3Rpb24gKHRva2VuKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIDMgLyogSWRlbnRpZmllciAqLzoKKyAgICAgICAgICAg
ICAgICBjYXNlIDggLyogU3RyaW5nTGl0ZXJhbCAqLzoKKyAgICAgICAgICAgICAgICBjYXNlIDEg
LyogQm9vbGVhbkxpdGVyYWwgKi86CisgICAgICAgICAgICAgICAgY2FzZSA1IC8qIE51bGxMaXRl
cmFsICovOgorICAgICAgICAgICAgICAgIGNhc2UgNiAvKiBOdW1lcmljTGl0ZXJhbCAqLzoKKyAg
ICAgICAgICAgICAgICBjYXNlIDQgLyogS2V5d29yZCAqLzoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgY2FzZSA3IC8qIFB1bmN0dWF0b3IgKi86Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbi52YWx1ZSA9PT0gJ1snOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9OworICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlR2V0dGVyTWV0aG9kID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHZhciBpc0dlbmVyYXRv
ciA9IGZhbHNlOworICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29u
dGV4dC5hbGxvd1lpZWxkOworICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBm
YWxzZTsKKyAgICAgICAgICAgIHZhciBmb3JtYWxQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUZvcm1h
bFBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIGlmIChmb3JtYWxQYXJhbWV0ZXJzLnBhcmFtcy5s
ZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuQmFkR2V0dGVyQXJpdHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIG1ldGhvZCA9IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChmb3JtYWxQYXJhbWV0ZXJzKTsK
KyAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxk
OworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rp
b25FeHByZXNzaW9uKG51bGwsIGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLCBtZXRob2QsIGlzR2Vu
ZXJhdG9yKSk7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTZXR0
ZXJNZXRob2QgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3Jl
YXRlTm9kZSgpOworICAgICAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0gZmFsc2U7CisgICAgICAg
ICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7Cisg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOworICAgICAgICAgICAg
dmFyIGZvcm1hbFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOworICAg
ICAgICAgICAgaWYgKGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLmxlbmd0aCAhPT0gMSkgeworICAg
ICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkJhZFNl
dHRlckFyaXR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hbFBh
cmFtZXRlcnMucGFyYW1zWzBdIGluc3RhbmNlb2YgTm9kZS5SZXN0RWxlbWVudCkgeworICAgICAg
ICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkJhZFNldHRl
clJlc3RQYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1ldGhvZCA9
IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChmb3JtYWxQYXJhbWV0ZXJzKTsKKyAgICAgICAgICAg
IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNzaW9u
KG51bGwsIGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9yKSk7Cisg
ICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VHZW5lcmF0b3JNZXRob2Qg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworICAgICAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHZhciBw
cmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKyAgICAgICAgICAg
IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gdHJ1ZTsKKyAgICAgICAgICAgIHZhciBwYXJhbXMg
PSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOworICAgICAgICAgICAgdGhpcy5jb250ZXh0
LmFsbG93WWllbGQgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNl
UHJvcGVydHlNZXRob2QocGFyYW1zKTsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lp
ZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtcy5wYXJhbXMs
IG1ldGhvZCwgaXNHZW5lcmF0b3IpKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gaHR0cHM6Ly90
YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2VuZXJhdG9yLWZ1bmN0aW9uLWRlZmluaXRpb25z
CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUuaXNTdGFydE9mRXhwcmVzc2lvbiA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHZhciBzdGFydCA9IHRydWU7CisgICAgICAgICAgICB2YXIgdmFs
dWUgPSB0aGlzLmxvb2thaGVhZC52YWx1ZTsKKyAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29r
YWhlYWQudHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgNyAvKiBQdW5jdHVhdG9yICovOgor
ICAgICAgICAgICAgICAgICAgICBzdGFydCA9ICh2YWx1ZSA9PT0gJ1snKSB8fCAodmFsdWUgPT09
ICcoJykgfHwgKHZhbHVlID09PSAneycpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAodmFs
dWUgPT09ICcrJykgfHwgKHZhbHVlID09PSAnLScpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAodmFsdWUgPT09ICchJykgfHwgKHZhbHVlID09PSAnficpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAodmFsdWUgPT09ICcrKycpIHx8ICh2YWx1ZSA9PT0gJy0tJykgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gJy8nKSB8fCAodmFsdWUgPT09ICcvPScpOyAvLyBy
ZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbAorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDQgLyogS2V5d29yZCAqLzoKKyAgICAgICAgICAgICAgICAgICAg
c3RhcnQgPSAodmFsdWUgPT09ICdjbGFzcycpIHx8ICh2YWx1ZSA9PT0gJ2RlbGV0ZScpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPT09ICdmdW5jdGlvbicpIHx8ICh2YWx1ZSA9
PT0gJ2xldCcpIHx8ICh2YWx1ZSA9PT0gJ25ldycpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAodmFsdWUgPT09ICdzdXBlcicpIHx8ICh2YWx1ZSA9PT0gJ3RoaXMnKSB8fCAodmFsdWUgPT09
ICd0eXBlb2YnKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSAndm9pZCcp
IHx8ICh2YWx1ZSA9PT0gJ3lpZWxkJyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgICB9OworICAgICAgICBQ
YXJzZXIucHJvdG90eXBlLnBhcnNlWWllbGRFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHRoaXMu
ZXhwZWN0S2V5d29yZCgneWllbGQnKTsKKyAgICAgICAgICAgIHZhciBhcmd1bWVudCA9IG51bGw7
CisgICAgICAgICAgICB2YXIgZGVsZWdhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICghdGhp
cy5oYXNMaW5lVGVybWluYXRvcikgeworICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93
WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKyAgICAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlbGVnYXRlID0gdGhp
cy5tYXRjaCgnKicpOworICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICBhcmd1bWVu
dCA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzU3RhcnRPZkV4cHJlc3Npb24oKSkgewor
ICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQu
YWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLllpZWxkRXhwcmVzc2lvbihh
cmd1bWVudCwgZGVsZWdhdGUpKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5
LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY2xhc3MtZGVmaW5pdGlvbnMKKyAgICAgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUNsYXNzRWxlbWVudCA9IGZ1bmN0aW9uIChoYXNDb25zdHJ1Y3Rvcikg
eworICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgdmFyIGtpbmQgPSAnJzsK
KyAgICAgICAgICAgIHZhciBrZXkgPSBudWxsOworICAgICAgICAgICAgdmFyIHZhbHVlID0gbnVs
bDsKKyAgICAgICAgICAgIHZhciBjb21wdXRlZCA9IGZhbHNlOworICAgICAgICAgICAgdmFyIG1l
dGhvZCA9IGZhbHNlOworICAgICAgICAgICAgdmFyIGlzU3RhdGljID0gZmFsc2U7CisgICAgICAg
ICAgICB2YXIgaXNBc3luYyA9IGZhbHNlOworICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyon
KSkgeworICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2go
J1snKTsKKyAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXko
KTsKKyAgICAgICAgICAgICAgICB2YXIgaWQgPSBrZXk7CisgICAgICAgICAgICAgICAgaWYgKGlk
Lm5hbWUgPT09ICdzdGF0aWMnICYmICh0aGlzLnF1YWxpZmllZFByb3BlcnR5TmFtZSh0aGlzLmxv
b2thaGVhZCkgfHwgdGhpcy5tYXRjaCgnKicpKSkgeworICAgICAgICAgICAgICAgICAgICB0b2tl
biA9IHRoaXMubG9va2FoZWFkOworICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYyA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOworICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKicpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJz
ZU9iamVjdFByb3BlcnR5S2V5KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZp
ZXIgKi8pICYmICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yICYmICh0b2tlbi52YWx1ZSA9PT0gJ2Fz
eW5jJykpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHB1bmN0dWF0b3IgPSB0aGlzLmxvb2th
aGVhZC52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB1bmN0dWF0b3IgIT09ICc6JyAm
JiBwdW5jdHVhdG9yICE9PSAnKCcgJiYgcHVuY3R1YXRvciAhPT0gJyonKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlz
LnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnIHx8IHRva2VuLnZhbHVlID09PSAnc2V0
JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBl
Y3RlZFRva2VuKHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICdjb25zdHJ1Y3Rv
cicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhw
ZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5Db25zdHJ1Y3RvcklzQXN5bmMp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBsb29rYWhlYWRQcm9wZXJ0eUtleSA9IHRoaXMucXVhbGlmaWVk
UHJvcGVydHlOYW1lKHRoaXMubG9va2FoZWFkKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBl
ID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFs
dWUgPT09ICdnZXQnICYmIGxvb2thaGVhZFByb3BlcnR5S2V5KSB7CisgICAgICAgICAgICAgICAg
ICAgIGtpbmQgPSAnZ2V0JzsKKyAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1h
dGNoKCdbJyk7CisgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQcm9w
ZXJ0eUtleSgpOworICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VHZXR0ZXJNZXRo
b2QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4u
dmFsdWUgPT09ICdzZXQnICYmIGxvb2thaGVhZFByb3BlcnR5S2V5KSB7CisgICAgICAgICAgICAg
ICAgICAgIGtpbmQgPSAnc2V0JzsKKyAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlz
Lm1hdGNoKCdbJyk7CisgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQ
cm9wZXJ0eUtleSgpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VTZXR0
ZXJNZXRob2QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmICh0b2tlbi50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgdG9rZW4udmFs
dWUgPT09ICcqJyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkgeworICAgICAgICAgICAgICAgIGtp
bmQgPSAnaW5pdCc7CisgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7
CisgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Cisg
ICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlR2VuZXJhdG9yTWV0aG9kKCk7CisgICAg
ICAgICAgICAgICAgbWV0aG9kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICgha2luZCAmJiBrZXkgJiYgdGhpcy5tYXRjaCgnKCcpKSB7CisgICAgICAgICAgICAgICAga2lu
ZCA9ICdpbml0JzsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGlzQXN5bmMgPyB0aGlzLnBhcnNl
UHJvcGVydHlNZXRob2RBc3luY0Z1bmN0aW9uKCkgOiB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RG
dW5jdGlvbigpOworICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIWtpbmQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChraW5kID09PSAnaW5pdCcpIHsKKyAgICAgICAgICAgICAgICBraW5kID0gJ21ldGhvZCc7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNvbXB1dGVkKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzU3RhdGljICYmIHRoaXMuaXNQcm9wZXJ0eUtleShrZXksICdwcm90b3R5cGUn
KSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2Vu
LCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0YXRpY1Byb3RvdHlwZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICghaXNTdGF0aWMgJiYgdGhpcy5pc1Byb3BlcnR5S2V5KGtl
eSwgJ2NvbnN0cnVjdG9yJykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgIT09ICdt
ZXRob2QnIHx8ICFtZXRob2QgfHwgKHZhbHVlICYmIHZhbHVlLmdlbmVyYXRvcikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3Nh
Z2VzXzEuTWVzc2FnZXMuQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ29uc3RydWN0b3IudmFsdWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4s
IG1lc3NhZ2VzXzEuTWVzc2FnZXMuRHVwbGljYXRlQ29uc3RydWN0b3IpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzQ29uc3RydWN0b3IudmFsdWUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGtpbmQgPSAnY29uc3RydWN0b3InOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLk1ldGhvZERlZmluaXRpb24oa2V5LCBjb21wdXRlZCwgdmFsdWUsIGtpbmQs
IGlzU3RhdGljKSk7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VD
bGFzc0VsZW1lbnRMaXN0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGJvZHkgPSBb
XTsKKyAgICAgICAgICAgIHZhciBoYXNDb25zdHJ1Y3RvciA9IHsgdmFsdWU6IGZhbHNlIH07Cisg
ICAgICAgICAgICB0aGlzLmV4cGVjdCgneycpOworICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1h
dGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnOycpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBib2R5LnB1c2godGhpcy5w
YXJzZUNsYXNzRWxlbWVudChoYXNDb25zdHJ1Y3RvcikpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7CisgICAgICAgICAgICBy
ZXR1cm4gYm9keTsKKyAgICAgICAgfTsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNs
YXNzQm9keSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVh
dGVOb2RlKCk7CisgICAgICAgICAgICB2YXIgZWxlbWVudExpc3QgPSB0aGlzLnBhcnNlQ2xhc3NF
bGVtZW50TGlzdCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuQ2xhc3NCb2R5KGVsZW1lbnRMaXN0KSk7CisgICAgICAgIH07CisgICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VDbGFzc0RlY2xhcmF0aW9uID0gZnVuY3Rpb24gKGlkZW50aWZpZXJJ
c09wdGlvbmFsKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwor
ICAgICAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0LnN0cmljdDsKKyAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5l
eHBlY3RLZXl3b3JkKCdjbGFzcycpOworICAgICAgICAgICAgdmFyIGlkID0gKGlkZW50aWZpZXJJ
c09wdGlvbmFsICYmICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSAzIC8qIElkZW50aWZpZXIgKi8p
KSA/IG51bGwgOiB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgICAgICB2
YXIgc3VwZXJDbGFzcyA9IG51bGw7CisgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQo
J2V4dGVuZHMnKSkgeworICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAgICAg
ICAgICAgICAgc3VwZXJDbGFzcyA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNl
TGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgY2xhc3NCb2R5ID0gdGhpcy5wYXJzZUNsYXNzQm9keSgpOworICAgICAgICAgICAg
dGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ2xhc3NEZWNsYXJhdGlvbihpZCwgc3VwZXJD
bGFzcywgY2xhc3NCb2R5KSk7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VDbGFzc0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0g
dGhpcy5jb250ZXh0LnN0cmljdDsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0
cnVlOworICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdjbGFzcycpOworICAgICAgICAg
ICAgdmFyIGlkID0gKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLykg
PyB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkgOiBudWxsOworICAgICAgICAgICAgdmFy
IHN1cGVyQ2xhc3MgPSBudWxsOworICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdl
eHRlbmRzJykpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAg
ICAgICAgIHN1cGVyQ2xhc3MgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxl
ZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdmFyIGNsYXNzQm9keSA9IHRoaXMucGFyc2VDbGFzc0JvZHkoKTsKKyAgICAgICAgICAgIHRo
aXMuY29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzRXhwcmVzc2lvbihpZCwgc3VwZXJDbGFz
cywgY2xhc3NCb2R5KSk7CisgICAgICAgIH07CisgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRo
dWIuaW8vZWNtYTI2Mi8jc2VjLXNjcmlwdHMKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtbW9kdWxlcworICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNl
TW9kdWxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9
IHRydWU7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNNb2R1bGUgPSB0cnVlOworICAgICAg
ICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHZhciBib2R5
ID0gdGhpcy5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpOworICAgICAgICAgICAgd2hpbGUgKHRo
aXMubG9va2FoZWFkLnR5cGUgIT09IDIgLyogRU9GICovKSB7CisgICAgICAgICAgICAgICAgYm9k
eS5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLk1vZHVsZShib2R5
KSk7CisgICAgICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTY3JpcHQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwor
ICAgICAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzKCk7Cisg
ICAgICAgICAgICB3aGlsZSAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHsK
KyAgICAgICAgICAgICAgICBib2R5LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuU2NyaXB0KGJvZHkpKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gaHR0cHM6Ly90
YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaW1wb3J0cworICAgICAgICBQYXJzZXIucHJvdG90
eXBlLnBhcnNlTW9kdWxlU3BlY2lmaWVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmxvb2thaGVh
ZC50eXBlICE9PSA4IC8qIFN0cmluZ0xpdGVyYWwgKi8pIHsKKyAgICAgICAgICAgICAgICB0aGlz
LnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7
CisgICAgICAgICAgICB2YXIgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZh
bHVlLCByYXcpKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gaW1wb3J0IHs8Zm9vIGFzIGJhcj59
IC4uLjsKKyAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydFNwZWNpZmllciA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Cisg
ICAgICAgICAgICB2YXIgaW1wb3J0ZWQ7CisgICAgICAgICAgICB2YXIgbG9jYWw7CisgICAgICAg
ICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSB7Cisg
ICAgICAgICAgICAgICAgaW1wb3J0ZWQgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7
CisgICAgICAgICAgICAgICAgbG9jYWwgPSBpbXBvcnRlZDsKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIGxvY2FsID0gdGhpcy5wYXJz
ZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGltcG9ydGVkID0gdGhpcy5wYXJz
ZUlkZW50aWZpZXJOYW1lKCk7CisgICAgICAgICAgICAgICAgbG9jYWwgPSBpbXBvcnRlZDsKKyAg
ICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAg
IGxvY2FsID0gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJv
d1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5JbXBvcnRTcGVjaWZpZXIobG9jYWwsIGltcG9ydGVkKSk7CisgICAgICAgIH07CisgICAg
ICAgIC8vIHtmb28sIGJhciBhcyBiYXN9CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VO
YW1lZEltcG9ydHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLmV4cGVjdCgneycp
OworICAgICAgICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXTsKKyAgICAgICAgICAgIHdoaWxlICgh
dGhpcy5tYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHRoaXMu
cGFyc2VJbXBvcnRTcGVjaWZpZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNo
KCd9JykpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJywnKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmV4cGVjdCgnfScpOwor
ICAgICAgICAgICAgcmV0dXJuIHNwZWNpZmllcnM7CisgICAgICAgIH07CisgICAgICAgIC8vIGlt
cG9ydCA8Zm9vPiAuLi47CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBvcnREZWZh
dWx0U3BlY2lmaWVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlz
LmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHZhciBsb2NhbCA9IHRoaXMucGFyc2VJZGVudGlm
aWVyTmFtZSgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuSW1wb3J0RGVmYXVsdFNwZWNpZmllcihsb2NhbCkpOworICAgICAgICB9OworICAgICAgICAv
LyBpbXBvcnQgPCogYXMgZm9vPiAuLi47CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJ
bXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgdGhpcy5leHBlY3QoJyonKTsK
KyAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuTm9Bc0Fm
dGVySW1wb3J0TmFtZXNwYWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CisgICAgICAgICAgICB2YXIgbG9jYWwgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5h
bWUoKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklt
cG9ydE5hbWVzcGFjZVNwZWNpZmllcihsb2NhbCkpOworICAgICAgICB9OworICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlSW1wb3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSB7CisgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xh
cmF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVh
dGVOb2RlKCk7CisgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2ltcG9ydCcpOworICAg
ICAgICAgICAgdmFyIHNyYzsKKyAgICAgICAgICAgIHZhciBzcGVjaWZpZXJzID0gW107CisgICAg
ICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gOCAvKiBTdHJpbmdMaXRlcmFsICov
KSB7CisgICAgICAgICAgICAgICAgLy8gaW1wb3J0ICdmb28nOworICAgICAgICAgICAgICAgIHNy
YyA9IHRoaXMucGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd7JykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gaW1wb3J0IHtiYXJ9CisgICAgICAgICAgICAgICAgICAgIHNwZWNp
ZmllcnMgPSBzcGVjaWZpZXJzLmNvbmNhdCh0aGlzLnBhcnNlTmFtZWRJbXBvcnRzKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcqJykp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gaW1wb3J0ICogYXMgZm9vCisgICAgICAgICAgICAg
ICAgICAgIHNwZWNpZmllcnMucHVzaCh0aGlzLnBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVy
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlz
SWRlbnRpZmllck5hbWUodGhpcy5sb29rYWhlYWQpICYmICF0aGlzLm1hdGNoS2V5d29yZCgnZGVm
YXVsdCcpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydCBmb28KKyAgICAgICAgICAg
ICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVy
KCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMubWF0Y2goJyonKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGltcG9ydCBmb28sICogYXMgZm9vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lm
aWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlz
Lm1hdGNoKCd7JykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBvcnQgZm9v
LCB7YmFyfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcnMgPSBzcGVjaWZp
ZXJzLmNvbmNhdCh0aGlzLnBhcnNlTmFtZWRJbXBvcnRzKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdm
cm9tJykpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmxvb2thaGVh
ZC52YWx1ZSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogbWVzc2FnZXNf
MS5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50
aHJvd0Vycm9yKG1lc3NhZ2UsIHRoaXMubG9va2FoZWFkLnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICBz
cmMgPSB0aGlzLnBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLkltcG9ydERlY2xhcmF0aW9uKHNwZWNpZmllcnMsIHNyYykp
OworICAgICAgICB9OworICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1leHBvcnRzCisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHBvcnRTcGVjaWZp
ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9k
ZSgpOworICAgICAgICAgICAgdmFyIGxvY2FsID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7
CisgICAgICAgICAgICB2YXIgZXhwb3J0ZWQgPSBsb2NhbDsKKyAgICAgICAgICAgIGlmICh0aGlz
Lm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm5l
eHRUb2tlbigpOworICAgICAgICAgICAgICAgIGV4cG9ydGVkID0gdGhpcy5wYXJzZUlkZW50aWZp
ZXJOYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5FeHBvcnRTcGVjaWZpZXIobG9jYWwsIGV4cG9ydGVkKSk7CisgICAg
ICAgIH07CisgICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHBvcnREZWNsYXJhdGlvbiA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJv
ZHkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdl
cy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5
d29yZCgnZXhwb3J0Jyk7CisgICAgICAgICAgICB2YXIgZXhwb3J0RGVjbGFyYXRpb247CisgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkgeworICAgICAgICAgICAg
ICAgIC8vIGV4cG9ydCBkZWZhdWx0IC4uLgorICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2Vu
KCk7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvbyAoKSB7
fQorICAgICAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7fQor
ICAgICAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25E
ZWNsYXJhdGlvbih0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24g
PSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihk
ZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm
ICh0aGlzLm1hdGNoS2V5d29yZCgnY2xhc3MnKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBl
eHBvcnQgZGVmYXVsdCBjbGFzcyBmb28ge30KKyAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2xh
cmF0aW9uID0gdGhpcy5wYXJzZUNsYXNzRGVjbGFyYXRpb24odHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5F
eHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdh
c3luYycpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1
bmN0aW9uIGYgKCkge30KKyAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgYXN5
bmMgZnVuY3Rpb24gKCkge30KKyAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQg
YXN5bmMgeCA9PiB4CisgICAgICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMu
bWF0Y2hBc3luY0Z1bmN0aW9uKCkgPyB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbih0cnVl
KSA6IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAg
ICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0
RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaENv
bnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdGhpcy5sb29r
YWhlYWQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIGV4cG9ydCBkZWZhdWx0IHt9OworICAgICAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVm
YXVsdCBbXTsKKyAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgKDEgKyAyKTsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdGhpcy5tYXRjaCgneycpID8g
dGhpcy5wYXJzZU9iamVjdEluaXRpYWxpemVyKCkgOgorICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5tYXRjaCgnWycpID8gdGhpcy5wYXJzZUFycmF5SW5pdGlhbGl6ZXIoKSA6IHRoaXMucGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1
bWVTZW1pY29sb24oKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNs
YXJhdGlvbikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKHRoaXMubWF0Y2goJyonKSkgeworICAgICAgICAgICAgICAgIC8vIGV4cG9ydCAq
IGZyb20gJ2Zvbyc7CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5sb29rYWhlYWQudmFsdWUgPyBtZXNz
YWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IG1lc3NhZ2VzXzEuTWVzc2FnZXMuTWlz
c2luZ0Zyb21DbGF1c2U7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNz
YWdlLCB0aGlzLmxvb2thaGVhZC52YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgdmFyIHNyYyA9IHRoaXMu
cGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1p
Y29sb24oKTsKKyAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuRXhwb3J0QWxsRGVjbGFyYXRpb24oc3JjKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSA0IC8qIEtl
eXdvcmQgKi8pIHsKKyAgICAgICAgICAgICAgICAvLyBleHBvcnQgdmFyIGYgPSAxOworICAgICAg
ICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHZvaWQgMDsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKHRoaXMubG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xl
dCc6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnN0JzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUxleGljYWxEZWNsYXJhdGlvbih7IGluRm9y
OiBmYWxzZSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlICd2YXInOgorICAgICAgICAgICAgICAgICAgICBjYXNlICdjbGFzcyc6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29r
YWhlYWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJh
dGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0TmFtZWREZWNsYXJhdGlv
bihkZWNsYXJhdGlvbiwgW10sIG51bGwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgaWYgKHRoaXMubWF0Y2hBc3luY0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICB2YXIg
ZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOworICAgICAgICAg
ICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5F
eHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBbXSwgbnVsbCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIHNwZWNpZmllcnMg
PSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gbnVsbDsKKyAgICAgICAgICAgICAg
ICB2YXIgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICAgICAgICAgIHRo
aXMuZXhwZWN0KCd7Jyk7CisgICAgICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9Jykp
IHsKKyAgICAgICAgICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0
RnJvbUlkZW50aWZpZXIgfHwgdGhpcy5tYXRjaEtleXdvcmQoJ2RlZmF1bHQnKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VFeHBvcnRTcGVjaWZpZXIoKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnfScpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7CisgICAg
ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH0gZnJvbSAnZm9vJzsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gZXhwb3J0IHtmb299IGZyb20gJ2Zvbyc7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHRo
aXMucGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25z
dW1lU2VtaWNvbG9uKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGlzRXhwb3J0RnJvbUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZXhw
b3J0IHtkZWZhdWx0fTsgLy8gbWlzc2luZyBmcm9tQ2xhdXNlCisgICAgICAgICAgICAgICAgICAg
IHZhciBtZXNzYWdlID0gdGhpcy5sb29rYWhlYWQudmFsdWUgPyBtZXNzYWdlc18xLk1lc3NhZ2Vz
LlVuZXhwZWN0ZWRUb2tlbiA6IG1lc3NhZ2VzXzEuTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2U7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlLCB0aGlzLmxvb2th
aGVhZC52YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAvLyBleHBvcnQge2Zvb307CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhw
b3J0TmFtZWREZWNsYXJhdGlvbihudWxsLCBzcGVjaWZpZXJzLCBzb3VyY2UpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBleHBvcnREZWNsYXJhdGlvbjsKKyAgICAgICAgfTsK
KyAgICAgICAgcmV0dXJuIFBhcnNlcjsKKyAgICB9KCkpOworICAgIGV4cG9ydHMuUGFyc2VyID0g
UGFyc2VyOworCisKKy8qKiovIH0sCisvKiA5ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMpIHsKKworICAgIC8vIEVuc3VyZSB0aGUgY29uZGl0aW9uIGlzIHRydWUsIG90aGVyd2lz
ZSB0aHJvdyBhbiBlcnJvci4KKyAgICAvLyBUaGlzIGlzIG9ubHkgdG8gaGF2ZSBhIGJldHRlciBj
b250cmFjdCBzZW1hbnRpYywgaS5lLiBhbm90aGVyIHNhZmV0eSBuZXQKKyAgICAvLyB0byBjYXRj
aCBhIGxvZ2ljIGVycm9yLiBUaGUgY29uZGl0aW9uIHNoYWxsIGJlIGZ1bGZpbGxlZCBpbiBub3Jt
YWwgY2FzZS4KKyAgICAvLyBEbyBOT1QgdXNlIHRoaXMgdG8gZW5mb3JjZSBhIGNlcnRhaW4gY29u
ZGl0aW9uIG9uIGFueSB1c2VyIGlucHV0LgorICAgICJ1c2Ugc3RyaWN0IjsKKyAgICBmdW5jdGlv
biBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7CisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9y
ZSBpZiAqLworICAgICAgICBpZiAoIWNvbmRpdGlvbikgeworICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCdBU1NFUlQ6ICcgKyBtZXNzYWdlKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
V2l0aFN0YXRlbWVudDsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuV2l0aFN0YXRlbWVudCA9IFdp
dGhTdGF0ZW1lbnQ7Ci0gICAgdmFyIFlpZWxkRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgIGZ1bmN0aW9uIFlpZWxkRXhwcmVzc2lvbihhcmd1bWVudCwgZGVsZWdhdGUpIHsKLSAg
ICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5ZaWVsZEV4cHJlc3Npb247Ci0g
ICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmRl
bGVnYXRlID0gZGVsZWdhdGU7CisgICAgfQorICAgIGV4cG9ydHMuYXNzZXJ0ID0gYXNzZXJ0Owor
CisKKy8qKiovIH0sCisvKiAxMCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7
CisKKyAgICAvKiB0c2xpbnQ6ZGlzYWJsZTptYXgtY2xhc3Nlcy1wZXItZmlsZSAqLworICAgICJ1
c2Ugc3RyaWN0IjsKKyAgICB2YXIgRXJyb3JIYW5kbGVyID0gKGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgZnVuY3Rpb24gRXJyb3JIYW5kbGVyKCkgeworICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBb
XTsKKyAgICAgICAgICAgIHRoaXMudG9sZXJhbnQgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gWWllbGRFeHByZXNzaW9uOworICAgICAgICBFcnJvckhhbmRsZXIucHJvdG90eXBl
LnJlY29yZEVycm9yID0gZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgICAgICB0aGlzLmVycm9y
cy5wdXNoKGVycm9yKTsKKyAgICAgICAgfTsKKyAgICAgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlw
ZS50b2xlcmF0ZSA9IGZ1bmN0aW9uIChlcnJvcikgeworICAgICAgICAgICAgaWYgKHRoaXMudG9s
ZXJhbnQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnJlY29yZEVycm9yKGVycm9yKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IGVycm9y
OworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBFcnJvckhhbmRsZXIucHJvdG90
eXBlLmNvbnN0cnVjdEVycm9yID0gZnVuY3Rpb24gKG1zZywgY29sdW1uKSB7CisgICAgICAgICAg
ICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobXNnKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAo
YmFzZSkgeworICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovCisgICAg
ICAgICAgICAgICAgaWYgKE9iamVjdC5jcmVhdGUgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7
CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT2JqZWN0LmNyZWF0ZShiYXNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnY29sdW1uJywgeyB2
YWx1ZTogY29sdW1uIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisgICAgICAgICAgICByZXR1cm4gZXJy
b3I7CisgICAgICAgIH07CisgICAgICAgIEVycm9ySGFuZGxlci5wcm90b3R5cGUuY3JlYXRlRXJy
b3IgPSBmdW5jdGlvbiAoaW5kZXgsIGxpbmUsIGNvbCwgZGVzY3JpcHRpb24pIHsKKyAgICAgICAg
ICAgIHZhciBtc2cgPSAnTGluZSAnICsgbGluZSArICc6ICcgKyBkZXNjcmlwdGlvbjsKKyAgICAg
ICAgICAgIHZhciBlcnJvciA9IHRoaXMuY29uc3RydWN0RXJyb3IobXNnLCBjb2wpOworICAgICAg
ICAgICAgZXJyb3IuaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIGVycm9yLmxpbmVOdW1iZXIg
PSBsaW5lOworICAgICAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfTsKKyAgICAgICAgRXJyb3JIYW5kbGVy
LnByb3RvdHlwZS50aHJvd0Vycm9yID0gZnVuY3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2Ny
aXB0aW9uKSB7CisgICAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5l
LCBjb2wsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgfTsKKyAgICAgICAgRXJyb3JIYW5kbGVyLnBy
b3RvdHlwZS50b2xlcmF0ZUVycm9yID0gZnVuY3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2Ny
aXB0aW9uKSB7CisgICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLmNyZWF0ZUVycm9yKGluZGV4
LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIGlmICh0aGlzLnRvbGVyYW50
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihlcnJvcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIEVycm9ySGFuZGxlcjsKICAg
ICB9KCkpOwotICAgIGV4cG9ydHMuWWllbGRFeHByZXNzaW9uID0gWWllbGRFeHByZXNzaW9uOwor
ICAgIGV4cG9ydHMuRXJyb3JIYW5kbGVyID0gRXJyb3JIYW5kbGVyOwogCiAKIC8qKiovIH0sCiAv
KiAxMSAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisgICAgLy8gRXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBWOC4K
KyAgICBleHBvcnRzLk1lc3NhZ2VzID0geworICAgICAgICBCYWRJbXBvcnRDYWxsQXJpdHk6ICdV
bmV4cGVjdGVkIHRva2VuJywKKyAgICAgICAgQmFkR2V0dGVyQXJpdHk6ICdHZXR0ZXIgbXVzdCBu
b3QgaGF2ZSBhbnkgZm9ybWFsIHBhcmFtZXRlcnMnLAorICAgICAgICBCYWRTZXR0ZXJBcml0eTog
J1NldHRlciBtdXN0IGhhdmUgZXhhY3RseSBvbmUgZm9ybWFsIHBhcmFtZXRlcicsCisgICAgICAg
IEJhZFNldHRlclJlc3RQYXJhbWV0ZXI6ICdTZXR0ZXIgZnVuY3Rpb24gYXJndW1lbnQgbXVzdCBu
b3QgYmUgYSByZXN0IHBhcmFtZXRlcicsCisgICAgICAgIENvbnN0cnVjdG9ySXNBc3luYzogJ0Ns
YXNzIGNvbnN0cnVjdG9yIG1heSBub3QgYmUgYW4gYXN5bmMgbWV0aG9kJywKKyAgICAgICAgQ29u
c3RydWN0b3JTcGVjaWFsTWV0aG9kOiAnQ2xhc3MgY29uc3RydWN0b3IgbWF5IG5vdCBiZSBhbiBh
Y2Nlc3NvcicsCisgICAgICAgIERlY2xhcmF0aW9uTWlzc2luZ0luaXRpYWxpemVyOiAnTWlzc2lu
ZyBpbml0aWFsaXplciBpbiAlMCBkZWNsYXJhdGlvbicsCisgICAgICAgIERlZmF1bHRSZXN0UGFy
YW1ldGVyOiAnVW5leHBlY3RlZCB0b2tlbiA9JywKKyAgICAgICAgRGVmYXVsdFJlc3RQcm9wZXJ0
eTogJ1VuZXhwZWN0ZWQgdG9rZW4gPScsCisgICAgICAgIER1cGxpY2F0ZUJpbmRpbmc6ICdEdXBs
aWNhdGUgYmluZGluZyAlMCcsCisgICAgICAgIER1cGxpY2F0ZUNvbnN0cnVjdG9yOiAnQSBjbGFz
cyBtYXkgb25seSBoYXZlIG9uZSBjb25zdHJ1Y3RvcicsCisgICAgICAgIER1cGxpY2F0ZVByb3Rv
UHJvcGVydHk6ICdEdXBsaWNhdGUgX19wcm90b19fIGZpZWxkcyBhcmUgbm90IGFsbG93ZWQgaW4g
b2JqZWN0IGxpdGVyYWxzJywKKyAgICAgICAgRm9ySW5PZkxvb3BJbml0aWFsaXplcjogJyUwIGxv
b3AgdmFyaWFibGUgZGVjbGFyYXRpb24gbWF5IG5vdCBoYXZlIGFuIGluaXRpYWxpemVyJywKKyAg
ICAgICAgR2VuZXJhdG9ySW5MZWdhY3lDb250ZXh0OiAnR2VuZXJhdG9yIGRlY2xhcmF0aW9ucyBh
cmUgbm90IGFsbG93ZWQgaW4gbGVnYWN5IGNvbnRleHRzJywKKyAgICAgICAgSWxsZWdhbEJyZWFr
OiAnSWxsZWdhbCBicmVhayBzdGF0ZW1lbnQnLAorICAgICAgICBJbGxlZ2FsQ29udGludWU6ICdJ
bGxlZ2FsIGNvbnRpbnVlIHN0YXRlbWVudCcsCisgICAgICAgIElsbGVnYWxFeHBvcnREZWNsYXJh
dGlvbjogJ1VuZXhwZWN0ZWQgdG9rZW4nLAorICAgICAgICBJbGxlZ2FsSW1wb3J0RGVjbGFyYXRp
b246ICdVbmV4cGVjdGVkIHRva2VuJywKKyAgICAgICAgSWxsZWdhbExhbmd1YWdlTW9kZURpcmVj
dGl2ZTogJ0lsbGVnYWwgXCd1c2Ugc3RyaWN0XCcgZGlyZWN0aXZlIGluIGZ1bmN0aW9uIHdpdGgg
bm9uLXNpbXBsZSBwYXJhbWV0ZXIgbGlzdCcsCisgICAgICAgIElsbGVnYWxSZXR1cm46ICdJbGxl
Z2FsIHJldHVybiBzdGF0ZW1lbnQnLAorICAgICAgICBJbnZhbGlkRXNjYXBlZFJlc2VydmVkV29y
ZDogJ0tleXdvcmQgbXVzdCBub3QgY29udGFpbiBlc2NhcGVkIGNoYXJhY3RlcnMnLAorICAgICAg
ICBJbnZhbGlkSGV4RXNjYXBlU2VxdWVuY2U6ICdJbnZhbGlkIGhleGFkZWNpbWFsIGVzY2FwZSBz
ZXF1ZW5jZScsCisgICAgICAgIEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6ICdJbnZhbGlkIGxlZnQt
aGFuZCBzaWRlIGluIGFzc2lnbm1lbnQnLAorICAgICAgICBJbnZhbGlkTEhTSW5Gb3JJbjogJ0lu
dmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluJywKKyAgICAgICAgSW52YWxpZExIU0luRm9y
TG9vcDogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWxvb3AnLAorICAgICAgICBJbnZh
bGlkTW9kdWxlU3BlY2lmaWVyOiAnVW5leHBlY3RlZCB0b2tlbicsCisgICAgICAgIEludmFsaWRS
ZWdFeHA6ICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbicsCisgICAgICAgIExldEluTGV4aWNh
bEJpbmRpbmc6ICdsZXQgaXMgZGlzYWxsb3dlZCBhcyBhIGxleGljYWxseSBib3VuZCBuYW1lJywK
KyAgICAgICAgTWlzc2luZ0Zyb21DbGF1c2U6ICdVbmV4cGVjdGVkIHRva2VuJywKKyAgICAgICAg
TXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiAnTW9yZSB0aGFuIG9uZSBkZWZhdWx0IGNsYXVzZSBp
biBzd2l0Y2ggc3RhdGVtZW50JywKKyAgICAgICAgTmV3bGluZUFmdGVyVGhyb3c6ICdJbGxlZ2Fs
IG5ld2xpbmUgYWZ0ZXIgdGhyb3cnLAorICAgICAgICBOb0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2U6
ICdVbmV4cGVjdGVkIHRva2VuJywKKyAgICAgICAgTm9DYXRjaE9yRmluYWxseTogJ01pc3Npbmcg
Y2F0Y2ggb3IgZmluYWxseSBhZnRlciB0cnknLAorICAgICAgICBQYXJhbWV0ZXJBZnRlclJlc3RQ
YXJhbWV0ZXI6ICdSZXN0IHBhcmFtZXRlciBtdXN0IGJlIGxhc3QgZm9ybWFsIHBhcmFtZXRlcics
CisgICAgICAgIFByb3BlcnR5QWZ0ZXJSZXN0UHJvcGVydHk6ICdVbmV4cGVjdGVkIHRva2VuJywK
KyAgICAgICAgUmVkZWNsYXJhdGlvbjogJyUwIFwnJTFcJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xh
cmVkJywKKyAgICAgICAgU3RhdGljUHJvdG90eXBlOiAnQ2xhc3NlcyBtYXkgbm90IGhhdmUgc3Rh
dGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZScsCisgICAgICAgIFN0cmljdENhdGNoVmFyaWFi
bGU6ICdDYXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmlj
dCBtb2RlJywKKyAgICAgICAgU3RyaWN0RGVsZXRlOiAnRGVsZXRlIG9mIGFuIHVucXVhbGlmaWVk
IGlkZW50aWZpZXIgaW4gc3RyaWN0IG1vZGUuJywKKyAgICAgICAgU3RyaWN0RnVuY3Rpb246ICdJ
biBzdHJpY3QgbW9kZSBjb2RlLCBmdW5jdGlvbnMgY2FuIG9ubHkgYmUgZGVjbGFyZWQgYXQgdG9w
IGxldmVsIG9yIGluc2lkZSBhIGJsb2NrJywKKyAgICAgICAgU3RyaWN0RnVuY3Rpb25OYW1lOiAn
RnVuY3Rpb24gbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2Rl
JywKKyAgICAgICAgU3RyaWN0TEhTQXNzaWdubWVudDogJ0Fzc2lnbm1lbnQgdG8gZXZhbCBvciBh
cmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RM
SFNQb3N0Zml4OiAnUG9zdGZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBldmFs
IG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0TEhT
UHJlZml4OiAnUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3Ig
YXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RNb2RlV2l0
aDogJ1N0cmljdCBtb2RlIGNvZGUgbWF5IG5vdCBpbmNsdWRlIGEgd2l0aCBzdGF0ZW1lbnQnLAor
ICAgICAgICBTdHJpY3RPY3RhbExpdGVyYWw6ICdPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93
ZWQgaW4gc3RyaWN0IG1vZGUuJywKKyAgICAgICAgU3RyaWN0UGFyYW1EdXBlOiAnU3RyaWN0IG1v
ZGUgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMnLAorICAg
ICAgICBTdHJpY3RQYXJhbU5hbWU6ICdQYXJhbWV0ZXIgbmFtZSBldmFsIG9yIGFyZ3VtZW50cyBp
cyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdFJlc2VydmVkV29y
ZDogJ1VzZSBvZiBmdXR1cmUgcmVzZXJ2ZWQgd29yZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAg
IFN0cmljdFZhck5hbWU6ICdWYXJpYWJsZSBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVu
dHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBUZW1wbGF0ZU9jdGFsTGl0ZXJhbDogJ09jdGFs
IGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiB0ZW1wbGF0ZSBzdHJpbmdzLicsCisgICAgICAg
IFVuZXhwZWN0ZWRFT1M6ICdVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCcsCisgICAgICAgIFVuZXhw
ZWN0ZWRJZGVudGlmaWVyOiAnVW5leHBlY3RlZCBpZGVudGlmaWVyJywKKyAgICAgICAgVW5leHBl
Y3RlZE51bWJlcjogJ1VuZXhwZWN0ZWQgbnVtYmVyJywKKyAgICAgICAgVW5leHBlY3RlZFJlc2Vy
dmVkOiAnVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkJywKKyAgICAgICAgVW5leHBlY3RlZFN0cmlu
ZzogJ1VuZXhwZWN0ZWQgc3RyaW5nJywKKyAgICAgICAgVW5leHBlY3RlZFRlbXBsYXRlOiAnVW5l
eHBlY3RlZCBxdWFzaSAlMCcsCisgICAgICAgIFVuZXhwZWN0ZWRUb2tlbjogJ1VuZXhwZWN0ZWQg
dG9rZW4gJTAnLAorICAgICAgICBVbmV4cGVjdGVkVG9rZW5JbGxlZ2FsOiAnVW5leHBlY3RlZCB0
b2tlbiBJTExFR0FMJywKKyAgICAgICAgVW5rbm93bkxhYmVsOiAnVW5kZWZpbmVkIGxhYmVsIFwn
JTBcJycsCisgICAgICAgIFVudGVybWluYXRlZFJlZ0V4cDogJ0ludmFsaWQgcmVndWxhciBleHBy
ZXNzaW9uOiBtaXNzaW5nIC8nCisgICAgfTsKKworCisvKioqLyB9LAorLyogMTIgKi8KIC8qKiov
IGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewogCiAgICAg
InVzZSBzdHJpY3QiOwotLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KLSAgICB2YXIgX19leHRl
bmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7Ci0gICAg
ICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3Bd
OwotICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH0KLSAgICAg
ICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90
b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpOwotICAgIH07Ci0gICAgdmFyIGNoYXJhY3Rl
cl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTsKLSAgICB2YXIgdG9rZW5fMSA9IF9fd2VicGFj
a19yZXF1aXJlX18oNyk7Ci0gICAgdmFyIHBhcnNlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygz
KTsKLSAgICB2YXIgeGh0bWxfZW50aXRpZXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpOwot
ICAgIHZhciBqc3hfc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKLSAgICB2YXIg
Tm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwotICAgIHZhciBKU1hOb2RlID0gX193ZWJw
YWNrX3JlcXVpcmVfXygxNCk7Ci0gICAgdmFyIEpTWFRva2VuOwotICAgIChmdW5jdGlvbiAoSlNY
VG9rZW4pIHsKLSAgICAgICAgSlNYVG9rZW5bSlNYVG9rZW5bIklkZW50aWZpZXIiXSA9IDEwMF0g
PSAiSWRlbnRpZmllciI7Ci0gICAgICAgIEpTWFRva2VuW0pTWFRva2VuWyJUZXh0Il0gPSAxMDFd
ID0gIlRleHQiOwotICAgIH0pKEpTWFRva2VuIHx8IChKU1hUb2tlbiA9IHt9KSk7Ci0gICAgdG9r
ZW5fMS5Ub2tlbk5hbWVbSlNYVG9rZW4uSWRlbnRpZmllcl0gPSAnSlNYSWRlbnRpZmllcic7Ci0g
ICAgdG9rZW5fMS5Ub2tlbk5hbWVbSlNYVG9rZW4uVGV4dF0gPSAnSlNYVGV4dCc7Ci0gICAgLy8g
RnVsbHkgcXVhbGlmaWVkIGVsZW1lbnQgbmFtZSwgZS5nLiA8c3ZnOnBhdGg+IHJldHVybnMgInN2
ZzpwYXRoIgotICAgIGZ1bmN0aW9uIGdldFF1YWxpZmllZEVsZW1lbnROYW1lKGVsZW1lbnROYW1l
KSB7Ci0gICAgICAgIHZhciBxdWFsaWZpZWROYW1lOwotICAgICAgICBzd2l0Y2ggKGVsZW1lbnRO
YW1lLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hJ
ZGVudGlmaWVyOgotICAgICAgICAgICAgICAgIHZhciBpZCA9IChlbGVtZW50TmFtZSk7Ci0gICAg
ICAgICAgICAgICAgcXVhbGlmaWVkTmFtZSA9IGlkLm5hbWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYTmFtZXNwYWNl
ZE5hbWU6Ci0gICAgICAgICAgICAgICAgdmFyIG5zID0gKGVsZW1lbnROYW1lKTsKLSAgICAgICAg
ICAgICAgICBxdWFsaWZpZWROYW1lID0gZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUobnMubmFtZXNw
YWNlKSArICc6JyArCi0gICAgICAgICAgICAgICAgICAgIGdldFF1YWxpZmllZEVsZW1lbnROYW1l
KG5zLm5hbWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBqc3hf
c3ludGF4XzEuSlNYU3ludGF4LkpTWE1lbWJlckV4cHJlc3Npb246Ci0gICAgICAgICAgICAgICAg
dmFyIGV4cHIgPSAoZWxlbWVudE5hbWUpOwotICAgICAgICAgICAgICAgIHF1YWxpZmllZE5hbWUg
PSBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShleHByLm9iamVjdCkgKyAnLicgKwotICAgICAgICAg
ICAgICAgICAgICBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShleHByLnByb3BlcnR5KTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcXVhbGlmaWVkTmFt
ZTsKKyAgICB2YXIgYXNzZXJ0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpOworICAgIHZhciBj
aGFyYWN0ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7CisgICAgdmFyIG1lc3NhZ2VzXzEg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKKyAgICBmdW5jdGlvbiBoZXhWYWx1ZShjaCkgewor
ICAgICAgICByZXR1cm4gJzAxMjM0NTY3ODlhYmNkZWYnLmluZGV4T2YoY2gudG9Mb3dlckNhc2Uo
KSk7CiAgICAgfQotICAgIHZhciBKU1hQYXJzZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikgewotICAg
ICAgICBfX2V4dGVuZHMoSlNYUGFyc2VyLCBfc3VwZXIpOwotICAgICAgICBmdW5jdGlvbiBKU1hQ
YXJzZXIoY29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHsKLSAgICAgICAgICAgIF9zdXBlci5jYWxs
KHRoaXMsIGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKTsKKyAgICBmdW5jdGlvbiBvY3RhbFZhbHVl
KGNoKSB7CisgICAgICAgIHJldHVybiAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpOworICAgIH0KKyAg
ICB2YXIgU2Nhbm5lciA9IChmdW5jdGlvbiAoKSB7CisgICAgICAgIGZ1bmN0aW9uIFNjYW5uZXIo
Y29kZSwgaGFuZGxlcikgeworICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBjb2RlOworICAgICAg
ICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBoYW5kbGVyOworICAgICAgICAgICAgdGhpcy50cmFj
a0NvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gY29kZS5sZW5ndGg7
CisgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDsKKyAgICAgICAgICAgIHRoaXMubGluZU51bWJl
ciA9IChjb2RlLmxlbmd0aCA+IDApID8gMSA6IDA7CisgICAgICAgICAgICB0aGlzLmxpbmVTdGFy
dCA9IDA7CisgICAgICAgICAgICB0aGlzLmN1cmx5U3RhY2sgPSBbXTsKICAgICAgICAgfQotICAg
ICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24gPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRjaCgnPCcpID8gdGhpcy5wYXJzZUpT
WFJvb3QoKSA6IF9zdXBlci5wcm90b3R5cGUucGFyc2VQcmltYXJ5RXhwcmVzc2lvbi5jYWxsKHRo
aXMpOworICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zYXZlU3RhdGUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4
LAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKKyAgICAgICAg
ICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0CisgICAgICAgICAgICB9OworICAgICAg
ICB9OworICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5yZXN0b3JlU3RhdGUgPSBmdW5jdGlvbiAo
c3RhdGUpIHsKKyAgICAgICAgICAgIHRoaXMuaW5kZXggPSBzdGF0ZS5pbmRleDsKKyAgICAgICAg
ICAgIHRoaXMubGluZU51bWJlciA9IHN0YXRlLmxpbmVOdW1iZXI7CisgICAgICAgICAgICB0aGlz
LmxpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDsKKyAgICAgICAgfTsKKyAgICAgICAgU2Nhbm5l
ci5wcm90b3R5cGUuZW9mID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
aW5kZXggPj0gdGhpcy5sZW5ndGg7CisgICAgICAgIH07CisgICAgICAgIFNjYW5uZXIucHJvdG90
eXBlLnRocm93VW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHsKKyAgICAgICAg
ICAgIGlmIChtZXNzYWdlID09PSB2b2lkIDApIHsgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuSWxsZWdhbDsgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJy
b3JIYW5kbGVyLnRocm93RXJyb3IodGhpcy5pbmRleCwgdGhpcy5saW5lTnVtYmVyLCB0aGlzLmlu
ZGV4IC0gdGhpcy5saW5lU3RhcnQgKyAxLCBtZXNzYWdlKTsKKyAgICAgICAgfTsKKyAgICAgICAg
U2Nhbm5lci5wcm90b3R5cGUudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4gPSBmdW5jdGlvbiAobWVz
c2FnZSkgeworICAgICAgICAgICAgaWYgKG1lc3NhZ2UgPT09IHZvaWQgMCkgeyBtZXNzYWdlID0g
bWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW5JbGxlZ2FsOyB9CisgICAgICAgICAg
ICB0aGlzLmVycm9ySGFuZGxlci50b2xlcmF0ZUVycm9yKHRoaXMuaW5kZXgsIHRoaXMubGluZU51
bWJlciwgdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0ICsgMSwgbWVzc2FnZSk7CisgICAgICAg
IH07CisgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNvbW1l
bnRzCisgICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnNraXBTaW5nbGVMaW5lQ29tbWVudCA9IGZ1
bmN0aW9uIChvZmZzZXQpIHsKKyAgICAgICAgICAgIHZhciBjb21tZW50cyA9IFtdOworICAgICAg
ICAgICAgdmFyIHN0YXJ0LCBsb2M7CisgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQp
IHsKKyAgICAgICAgICAgICAgICBjb21tZW50cyA9IFtdOworICAgICAgICAgICAgICAgIHN0YXJ0
ID0gdGhpcy5pbmRleCAtIG9mZnNldDsKKyAgICAgICAgICAgICAgICBsb2MgPSB7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlz
LmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuaW5kZXgg
LSB0aGlzLmxpbmVTdGFydCAtIG9mZnNldAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgICAgICBlbmQ6IHt9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgeworICAgICAgICAgICAgICAgIHZhciBj
aCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CisgICAgICAgICAgICAgICAg
Kyt0aGlzLmluZGV4OworICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIu
aXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJh
Y2tDb21tZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZU51bWJlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuaW5kZXggLSB0aGlzLmxpbmVTdGFydCAtIDEK
KyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
ZW50cnkgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlMaW5lOiBmYWxzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZTogW3N0YXJ0ICsgb2Zmc2V0LCB0aGlz
LmluZGV4IC0gMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwg
dGhpcy5pbmRleCAtIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogbG9jCisg
ICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVu
dHMucHVzaChlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoID09PSAxMyAmJiB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpID09
PSAxMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyOworICAg
ICAgICAgICAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMuaW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjb21tZW50czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKKyAgICAgICAgICAgICAg
ICBsb2MuZW5kID0geworICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7CisgICAg
ICAgICAgICAgICAgICAgIG11bHRpTGluZTogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHNs
aWNlOiBbc3RhcnQgKyBvZmZzZXQsIHRoaXMuaW5kZXhdLAorICAgICAgICAgICAgICAgICAgICBy
YW5nZTogW3N0YXJ0LCB0aGlzLmluZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgbG9jOiBsb2MK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZW50cnkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnRzOworICAgICAgICB9
OworICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5za2lwTXVsdGlMaW5lQ29tbWVudCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBjb21tZW50cyA9IFtdOworICAgICAgICAgICAgdmFy
IHN0YXJ0LCBsb2M7CisgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKKyAgICAg
ICAgICAgICAgICBjb21tZW50cyA9IFtdOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5p
bmRleCAtIDI7CisgICAgICAgICAgICAgICAgbG9jID0geworICAgICAgICAgICAgICAgICAgICBz
dGFydDogeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5lTnVtYmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3Rh
cnQgLSAyCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGVuZDog
e30KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUg
KCF0aGlzLmVvZigpKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2UuY2hh
ckNvZGVBdCh0aGlzLmluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hh
cmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gMHgwRCAmJiB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKSA9PT0g
MHgwQSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyOworICAg
ICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
bGluZVN0YXJ0ID0gdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQmxvY2sg
Y29tbWVudCBlbmRzIHdpdGggJyovJy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291
cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIDEpID09PSAweDJGKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy50cmFja0NvbW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2MuZW5k
ID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmVOdW1i
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAt
IHRoaXMubGluZVN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG11bHRpTGluZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2xpY2U6IFtzdGFydCArIDIsIHRoaXMuaW5kZXggLSAyXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgdGhpcy5pbmRleF0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvYzogbG9jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKGVudHJ5KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
b21tZW50czsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK3Ro
aXMuaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gUmFuIG9mZiB0aGUgZW5kIG9mIHRoZSBmaWxlIC0gdGhl
IHdob2xlIHRoaW5nIGlzIGEgY29tbWVudAorICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21t
ZW50KSB7CisgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgICAgICAgICAg
bGluZTogdGhpcy5saW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMu
aW5kZXggLSB0aGlzLmxpbmVTdGFydAorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgdmFyIGVudHJ5ID0geworICAgICAgICAgICAgICAgICAgICBtdWx0aUxpbmU6IHRydWUsCisg
ICAgICAgICAgICAgICAgICAgIHNsaWNlOiBbc3RhcnQgKyAyLCB0aGlzLmluZGV4XSwKKyAgICAg
ICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgdGhpcy5pbmRleF0sCisgICAgICAgICAgICAg
ICAgICAgIGxvYzogbG9jCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBjb21t
ZW50cy5wdXNoKGVudHJ5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMudG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgIHJldHVybiBjb21tZW50czsKKyAgICAg
ICAgfTsKKyAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhbkNvbW1lbnRzID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIGNvbW1lbnRzOworICAgICAgICAgICAgaWYgKHRoaXMudHJh
Y2tDb21tZW50KSB7CisgICAgICAgICAgICAgICAgY29tbWVudHMgPSBbXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBzdGFydCA9ICh0aGlzLmluZGV4ID09PSAwKTsKKyAgICAgICAg
ICAgIHdoaWxlICghdGhpcy5lb2YoKSkgeworICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMu
c291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGNoYXJh
Y3Rlcl8xLkNoYXJhY3Rlci5pc1doaXRlU3BhY2UoY2gpKSB7CisgICAgICAgICAgICAgICAgICAg
ICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAg
ICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09
PSAweDBEICYmIHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkgPT09IDB4MEEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICArK3RoaXMubGluZU51bWJlcjsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmluZGV4OworICAgICAgICAgICAgICAgICAg
ICBzdGFydCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGNoID09PSAweDJGKSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2Uu
Y2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9
PT0gMHgyRikgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAyOworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLnNraXBTaW5nbGVMaW5lQ29t
bWVudCgyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29tbWVudHMuY29uY2F0
KGNvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhcnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGNoID09PSAweDJBKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmluZGV4ICs9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudCA9IHRo
aXMuc2tpcE11bHRpTGluZUNvbW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLnRyYWNrQ29tbWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRz
ID0gY29tbWVudHMuY29uY2F0KGNvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhcnQgJiYgY2ggPT09IDB4MkQp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVSswMDNFIGlzICc+JworICAgICAgICAgICAgICAg
ICAgICBpZiAoKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIDEpID09PSAweDJE
KSAmJiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMikgPT09IDB4M0UpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAnLS0+JyBpcyBhIHNpbmdsZS1saW5lIGNvbW1l
bnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5za2lwU2luZ2xlTGluZUNvbW1lbnQoMyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyA9IGNvbW1lbnRzLmNvbmNhdChjb21tZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGNoID09PSAweDNDKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNv
dXJjZS5zbGljZSh0aGlzLmluZGV4ICsgMSwgdGhpcy5pbmRleCArIDQpID09PSAnIS0tJykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSA0OyAvLyBgPCEtLWAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5za2lwU2luZ2xlTGluZUNvbW1l
bnQoNCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyA9IGNvbW1lbnRzLmNvbmNhdChj
b21tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY29tbWVudHM7CisgICAgICAg
IH07CisgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZ1dHVy
ZS1yZXNlcnZlZC13b3JkcworICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5pc0Z1dHVyZVJlc2Vy
dmVkV29yZCA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICAgICAgc3dpdGNoIChpZCkgeworICAg
ICAgICAgICAgICAgIGNhc2UgJ2VudW0nOgorICAgICAgICAgICAgICAgIGNhc2UgJ2V4cG9ydCc6
CisgICAgICAgICAgICAgICAgY2FzZSAnaW1wb3J0JzoKKyAgICAgICAgICAgICAgICBjYXNlICdz
dXBlcic6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5zdGFydEpTWCA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIC8vIFVud2luZCB0aGUgc2Nhbm5lciBiZWZvcmUgdGhl
IGxvb2thaGVhZCB0b2tlbi4KLSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5pbmRleCA9IHRoaXMu
c3RhcnRNYXJrZXIuaW5kZXg7Ci0gICAgICAgICAgICB0aGlzLnNjYW5uZXIubGluZU51bWJlciA9
IHRoaXMuc3RhcnRNYXJrZXIubGluZU51bWJlcjsKLSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5s
aW5lU3RhcnQgPSB0aGlzLnN0YXJ0TWFya2VyLmxpbmVTdGFydDsKKyAgICAgICAgU2Nhbm5lci5w
cm90b3R5cGUuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkID0gZnVuY3Rpb24gKGlkKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgICAgICAgICAgY2FzZSAnaW1wbGVtZW50cyc6
CisgICAgICAgICAgICAgICAgY2FzZSAnaW50ZXJmYWNlJzoKKyAgICAgICAgICAgICAgICBjYXNl
ICdwYWNrYWdlJzoKKyAgICAgICAgICAgICAgICBjYXNlICdwcml2YXRlJzoKKyAgICAgICAgICAg
ICAgICBjYXNlICdwcm90ZWN0ZWQnOgorICAgICAgICAgICAgICAgIGNhc2UgJ3B1YmxpYyc6Cisg
ICAgICAgICAgICAgICAgY2FzZSAnc3RhdGljJzoKKyAgICAgICAgICAgICAgICBjYXNlICd5aWVs
ZCc6CisgICAgICAgICAgICAgICAgY2FzZSAnbGV0JzoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogICAgICAgICB9OwotICAgICAgICBKU1hQYXJz
ZXIucHJvdG90eXBlLmZpbmlzaEpTWCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIC8vIFBy
aW1lIHRoZSBuZXh0IGxvb2thaGVhZC4KLSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Cisg
ICAgICAgIFNjYW5uZXIucHJvdG90eXBlLmlzUmVzdHJpY3RlZFdvcmQgPSBmdW5jdGlvbiAoaWQp
IHsKKyAgICAgICAgICAgIHJldHVybiBpZCA9PT0gJ2V2YWwnIHx8IGlkID09PSAnYXJndW1lbnRz
JzsKICAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5yZWVudGVySlNYID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGhpcy5zdGFydEpTWCgpOwotICAgICAgICAgICAg
dGhpcy5leHBlY3RKU1goJ30nKTsKLSAgICAgICAgICAgIC8vIFBvcCB0aGUgY2xvc2luZyAnfScg
YWRkZWQgZnJvbSB0aGUgbG9va2FoZWFkLgotICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRv
a2VucykgewotICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnBvcCgpOworICAgICAgICAvLyBo
dHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1rZXl3b3JkcworICAgICAgICBTY2Fu
bmVyLnByb3RvdHlwZS5pc0tleXdvcmQgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoaWQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKGlkID09PSAnaWYnKSB8fCAoaWQgPT09ICdpbicpIHx8IChpZCA9PT0g
J2RvJyk7CisgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gKGlkID09PSAndmFyJykgfHwgKGlkID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgIChpZCA9PT0gJ3RyeScpIHx8IChpZCA9PT0gJ2xldCcp
OworICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChp
ZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlkID09PSAnY2FzZScpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAoaWQgPT09ICd2b2lkJykgfHwgKGlkID09PSAnd2l0aCcp
IHx8IChpZCA9PT0gJ2VudW0nKTsKKyAgICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwg
KGlkID09PSAnY2F0Y2gnKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKGlkID09PSAndGhy
b3cnKSB8fCAoaWQgPT09ICdjb25zdCcpIHx8IChpZCA9PT0gJ3lpZWxkJykgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIChpZCA9PT0gJ2NsYXNzJykgfHwgKGlkID09PSAnc3VwZXInKTsKKyAg
ICAgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09
ICdyZXR1cm4nKSB8fCAoaWQgPT09ICd0eXBlb2YnKSB8fCAoaWQgPT09ICdkZWxldGUnKSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgKGlkID09PSAnc3dpdGNoJykgfHwgKGlkID09PSAnZXhw
b3J0JykgfHwgKGlkID09PSAnaW1wb3J0Jyk7CisgICAgICAgICAgICAgICAgY2FzZSA3OgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZGVmYXVsdCcpIHx8IChpZCA9PT0gJ2Zp
bmFsbHknKSB8fCAoaWQgPT09ICdleHRlbmRzJyk7CisgICAgICAgICAgICAgICAgY2FzZSA4Ogor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09
ICdjb250aW51ZScpIHx8IChpZCA9PT0gJ2RlYnVnZ2VyJyk7CisgICAgICAgICAgICAgICAgY2Fz
ZSAxMDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2luc3RhbmNlb2YnKTsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIFNjYW5uZXIucHJvdG90eXBl
LmNvZGVQb2ludEF0ID0gZnVuY3Rpb24gKGkpIHsKKyAgICAgICAgICAgIHZhciBjcCA9IHRoaXMu
c291cmNlLmNoYXJDb2RlQXQoaSk7CisgICAgICAgICAgICBpZiAoY3AgPj0gMHhEODAwICYmIGNw
IDw9IDB4REJGRikgeworICAgICAgICAgICAgICAgIHZhciBzZWNvbmQgPSB0aGlzLnNvdXJjZS5j
aGFyQ29kZUF0KGkgKyAxKTsKKyAgICAgICAgICAgICAgICBpZiAoc2Vjb25kID49IDB4REMwMCAm
JiBzZWNvbmQgPD0gMHhERkZGKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IGNw
OworICAgICAgICAgICAgICAgICAgICBjcCA9IChmaXJzdCAtIDB4RDgwMCkgKiAweDQwMCArIHNl
Y29uZCAtIDB4REMwMCArIDB4MTAwMDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGNwOworICAgICAgICB9OworICAgICAgICBTY2FubmVyLnBy
b3RvdHlwZS5zY2FuSGV4RXNjYXBlID0gZnVuY3Rpb24gKHByZWZpeCkgeworICAgICAgICAgICAg
dmFyIGxlbiA9IChwcmVmaXggPT09ICd1JykgPyA0IDogMjsKKyAgICAgICAgICAgIHZhciBjb2Rl
ID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXRoaXMuZW9mKCkgJiYgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSGV4
RGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29kZSA9IGNvZGUgKiAxNiArIGhleFZhbHVlKHRoaXMuc291cmNlW3RoaXMuaW5k
ZXgrK10pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAg
ICAgIH07CisgICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNj
YXBlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2VbdGhp
cy5pbmRleF07CisgICAgICAgICAgICB2YXIgY29kZSA9IDA7CisgICAgICAgICAgICAvLyBBdCBs
ZWFzdCwgb25lIGhleCBkaWdpdCBpcyByZXF1aXJlZC4KKyAgICAgICAgICAgIGlmIChjaCA9PT0g
J30nKSB7CisgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisgICAgICAgICAg
ICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworICAgICAgICAgICAgICAgIGlm
ICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSGV4RGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyBoZXhWYWx1ZShjaCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoY29kZSA+IDB4MTBGRkZGIHx8IGNoICE9PSAnfScpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoY29kZSk7
CisgICAgICAgIH07CisgICAgICAgIFNjYW5uZXIucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4Kys7CisgICAg
ICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2ggPSB0
aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gMHg1QykgeworICAgICAgICAgICAgICAgICAgICAvLyBCbGFja3NsYXNoIChVKzAwNUMp
IG1hcmtzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLgorICAgICAgICAgICAgICAgICAgICB0aGlz
LmluZGV4ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbXBs
ZXhJZGVudGlmaWVyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGNoID49IDB4RDgwMCAmJiBjaCA8IDB4REZGRikgeworICAgICAgICAgICAgICAgICAgICAv
LyBOZWVkIHRvIGhhbmRsZSBzdXJyb2dhdGUgcGFpcnMuCisgICAgICAgICAgICAgICAgICAgIHRo
aXMuaW5kZXggPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29t
cGxleElkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0KGNoKSkgeworICAgICAgICAg
ICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2Uuc2xpY2Uoc3Rh
cnQsIHRoaXMuaW5kZXgpOworICAgICAgICB9OworICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5n
ZXRDb21wbGV4SWRlbnRpZmllciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBjcCA9
IHRoaXMuY29kZVBvaW50QXQodGhpcy5pbmRleCk7CisgICAgICAgICAgICB2YXIgaWQgPSBjaGFy
YWN0ZXJfMS5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludChjcCk7CisgICAgICAgICAgICB0aGlzLmlu
ZGV4ICs9IGlkLmxlbmd0aDsKKyAgICAgICAgICAgIC8vICdcdScgKFUrMDA1QywgVSswMDc1KSBk
ZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgorICAgICAgICAgICAgdmFyIGNoOworICAgICAg
ICAgICAgaWYgKGNwID09PSAweDVDKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNl
LmNoYXJDb2RlQXQodGhpcy5pbmRleCkgIT09IDB4NzUpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3Ro
aXMuaW5kZXhdID09PSAneycpIHsKKyAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4Owor
ICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGNoID0gdGhpcy5zY2FuSGV4RXNjYXBlKCd1Jyk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjaCA9PT0gbnVsbCB8fCBjaCA9PT0gJ1xcJyB8fCAhY2hhcmFjdGVyXzEuQ2hhcmFj
dGVyLmlzSWRlbnRpZmllclN0YXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWQgPSBjaDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgeworICAgICAgICAgICAg
ICAgIGNwID0gdGhpcy5jb2RlUG9pbnRBdCh0aGlzLmluZGV4KTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0KGNwKSkgeworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y2ggPSBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludChjcCk7CisgICAgICAgICAg
ICAgICAgaWQgKz0gY2g7CisgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSBjaC5sZW5ndGg7
CisgICAgICAgICAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNj
YXBlZCBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgaWYgKGNwID09PSAweDVDKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyKDAsIGlkLmxlbmd0aCAtIDEpOworICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSAhPT0g
MHg3NSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tl
bigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICsrdGhpcy5p
bmRleDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09
PSAneycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gbnVsbCB8fCBjaCA9PT0gJ1xcJyB8fCAhY2hhcmFj
dGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWQgKz0gY2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGlkOworICAgICAgICB9OworICAgICAgICBTY2FubmVyLnByb3Rv
dHlwZS5vY3RhbFRvRGVjaW1hbCA9IGZ1bmN0aW9uIChjaCkgeworICAgICAgICAgICAgLy8gXDAg
aXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICAgICAgdmFyIG9jdGFsID0gKGNo
ICE9PSAnMCcpOworICAgICAgICAgICAgdmFyIGNvZGUgPSBvY3RhbFZhbHVlKGNoKTsKKyAgICAg
ICAgICAgIGlmICghdGhpcy5lb2YoKSAmJiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNPY3RhbERp
Z2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisgICAgICAgICAgICAg
ICAgb2N0YWwgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArIG9jdGFs
VmFsdWUodGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSk7CisgICAgICAgICAgICAgICAgLy8gMyBk
aWdpdHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHN0cmluZyBzdGFydHMKKyAgICAgICAgICAgICAg
ICAvLyB3aXRoIDAsIDEsIDIsIDMKKyAgICAgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2Yo
Y2gpID49IDAgJiYgIXRoaXMuZW9mKCkgJiYgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxE
aWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworICAgICAgICAgICAg
ICAgICAgICBjb2RlID0gY29kZSAqIDggKyBvY3RhbFZhbHVlKHRoaXMuc291cmNlW3RoaXMuaW5k
ZXgrK10pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgY29kZTogY29kZSwKKyAgICAgICAgICAgICAgICBvY3Rh
bDogb2N0YWwKKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisgICAgICAgIC8vIGh0dHBzOi8v
dGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW5hbWVzLWFuZC1rZXl3b3JkcworICAgICAgICBT
Y2FubmVyLnByb3RvdHlwZS5zY2FuSWRlbnRpZmllciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHZhciB0eXBlOworICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKKyAgICAg
ICAgICAgIC8vIEJhY2tzbGFzaCAoVSswMDVDKSBzdGFydHMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIu
CisgICAgICAgICAgICB2YXIgaWQgPSAodGhpcy5zb3VyY2UuY2hhckNvZGVBdChzdGFydCkgPT09
IDB4NUMpID8gdGhpcy5nZXRDb21wbGV4SWRlbnRpZmllcigpIDogdGhpcy5nZXRJZGVudGlmaWVy
KCk7CisgICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBrZXl3b3JkIG9yIGxpdGVyYWwgd2l0aCBv
bmx5IG9uZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlk
ZW50aWZpZXIuCisgICAgICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAg
ICAgICAgdHlwZSA9IDMgLyogSWRlbnRpZmllciAqLzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKHRoaXMuaXNLZXl3b3JkKGlkKSkgeworICAgICAgICAgICAgICAgIHR5cGUg
PSA0IC8qIEtleXdvcmQgKi87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChp
ZCA9PT0gJ251bGwnKSB7CisgICAgICAgICAgICAgICAgdHlwZSA9IDUgLyogTnVsbExpdGVyYWwg
Ki87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpZCA9PT0gJ3RydWUnIHx8
IGlkID09PSAnZmFsc2UnKSB7CisgICAgICAgICAgICAgICAgdHlwZSA9IDEgLyogQm9vbGVhbkxp
dGVyYWwgKi87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB0eXBlID0gMyAvKiBJZGVudGlmaWVyICovOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHR5cGUgIT09IDMgLyogSWRlbnRpZmllciAqLyAmJiAoc3RhcnQgKyBpZC5sZW5ndGgg
IT09IHRoaXMuaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3RvcmUgPSB0aGlzLmlu
ZGV4OworICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBzdGFydDsKKyAgICAgICAgICAgICAg
ICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxp
ZEVzY2FwZWRSZXNlcnZlZFdvcmQpOworICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSByZXN0
b3JlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgICAgIHZhbHVlOiBpZCwKKyAgICAgICAgICAgICAg
ICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0
OiB0aGlzLmxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAg
ICAgICAgICAgZW5kOiB0aGlzLmluZGV4CisgICAgICAgICAgICB9OworICAgICAgICB9OworICAg
ICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wdW5jdHVhdG9ycwor
ICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuUHVuY3R1YXRvciA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7CisgICAgICAgICAgICAvLyBDaGVj
ayBmb3IgbW9zdCBjb21tb24gc2luZ2xlLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KKyAgICAgICAg
ICAgIHZhciBzdHIgPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKyAgICAgICAgICAgIHN3aXRj
aCAoc3RyKSB7CisgICAgICAgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICAgICAgY2Fz
ZSAneyc6CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHIgPT09ICd7JykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5jdXJseVN0YWNrLnB1c2goJ3snKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJy4nOgorICAgICAgICAgICAgICAg
ICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0
aGlzLmluZGV4XSA9PT0gJy4nICYmIHRoaXMuc291cmNlW3RoaXMuaW5kZXggKyAxXSA9PT0gJy4n
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcHJlYWQgb3BlcmF0b3I6IC4uLgorICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAyOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyID0gJy4uLic7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAgICAgICAg
ICAgICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJseVN0YWNrLnBv
cCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICcp
JzoKKyAgICAgICAgICAgICAgICBjYXNlICc7JzoKKyAgICAgICAgICAgICAgICBjYXNlICcsJzoK
KyAgICAgICAgICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgICAgICAgICBjYXNlICddJzoKKyAg
ICAgICAgICAgICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgICAgICBjYXNlICc/JzoKKyAgICAg
ICAgICAgICAgICBjYXNlICd+JzoKKyAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4Owor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAvLyA0LWNoYXJhY3RlciBwdW5jdHVhdG9yLgorICAgICAgICAgICAg
ICAgICAgICBzdHIgPSB0aGlzLnNvdXJjZS5zdWJzdHIodGhpcy5pbmRleCwgNCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzdHIgPT09ICc+Pj49JykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5pbmRleCArPSA0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gMy1jaGFyYWN0ZXIgcHVu
Y3R1YXRvcnMuCisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIDMp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJz09PScgfHwgc3RyID09PSAn
IT09JyB8fCBzdHIgPT09ICc+Pj4nIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ID09PSAnPDw9JyB8fCBzdHIgPT09ICc+Pj0nIHx8IHN0ciA9PT0gJyoqPScpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDM7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAyLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIDIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdHIgPT09ICcmJicgfHwgc3RyID09PSAnfHwnIHx8IHN0ciA9PT0gJz09JyB8
fCBzdHIgPT09ICchPScgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09
PSAnKz0nIHx8IHN0ciA9PT0gJy09JyB8fCBzdHIgPT09ICcqPScgfHwgc3RyID09PSAnLz0nIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJysrJyB8fCBzdHIgPT09
ICctLScgfHwgc3RyID09PSAnPDwnIHx8IHN0ciA9PT0gJz4+JyB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHIgPT09ICcmPScgfHwgc3RyID09PSAnfD0nIHx8IHN0ciA9PT0g
J149JyB8fCBzdHIgPT09ICclPScgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RyID09PSAnPD0nIHx8IHN0ciA9PT0gJz49JyB8fCBzdHIgPT09ICc9PicgfHwgc3RyID09PSAn
KionKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEtY2hhcmFjdGVy
IHB1bmN0dWF0b3JzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSB0aGlz
LnNvdXJjZVt0aGlzLmluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCc8Pj0hKy0qJSZ8Xi8nLmluZGV4T2Yoc3RyKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0aGlzLmluZGV4ID09PSBzdGFydCkgeworICAgICAgICAgICAgICAgIHRoaXMudGhy
b3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAg
SlNYUGFyc2VyLnByb3RvdHlwZS5jcmVhdGVKU1hOb2RlID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKICAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgaW5kZXg6IHRoaXMuc2Nhbm5lci5pbmRleCwKLSAgICAgICAgICAgICAgICBs
aW5lOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBjb2x1bW46IHRo
aXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQKKyAgICAgICAgICAgICAg
ICB0eXBlOiA3IC8qIFB1bmN0dWF0b3IgKi8sCisgICAgICAgICAgICAgICAgdmFsdWU6IHN0ciwK
KyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisgICAgICAgICAg
ICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICBzdGFydDog
c3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4CiAgICAgICAgICAgICB9Owog
ICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLmNyZWF0ZUpTWENoaWxkTm9k
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtbGl0ZXJhbHMtbnVtZXJpYy1saXRlcmFscworICAgICAgICBTY2FubmVyLnByb3Rv
dHlwZS5zY2FuSGV4TGl0ZXJhbCA9IGZ1bmN0aW9uIChzdGFydCkgeworICAgICAgICAgICAgdmFy
IG51bSA9ICcnOworICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNIZXhEaWdpdCh0aGlzLnNvdXJjZS5j
aGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbnVtICs9IHRoaXMuc291cmNlW3RoaXMu
aW5kZXgrK107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobnVtLmxlbmd0aCA9PT0g
MCkgeworICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlm
aWVyU3RhcnQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLnNjYW5uZXIuaW5k
ZXgsCi0gICAgICAgICAgICAgICAgbGluZTogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCi0gICAg
ICAgICAgICAgICAgY29sdW1uOiB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGlu
ZVN0YXJ0CisgICAgICAgICAgICAgICAgdHlwZTogNiAvKiBOdW1lcmljTGl0ZXJhbCAqLywKKyAg
ICAgICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQoJzB4JyArIG51bSwgMTYpLAorICAgICAgICAg
ICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5l
U3RhcnQ6IHRoaXMubGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAg
ICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKICAgICAgICAgICAgIH07CiAgICAgICAgIH07
Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUuc2NhblhIVE1MRW50aXR5ID0gZnVuY3Rpb24g
KHF1b3RlKSB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gJyYnOwotICAgICAgICAgICAgdmFy
IHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciB0ZXJtaW5hdGVkID0gZmFsc2U7Ci0gICAg
ICAgICAgICB2YXIgbnVtZXJpYyA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIGhleCA9IGZhbHNl
OwotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIuZW9mKCkgJiYgdmFsaWQgJiYgIXRl
cm1pbmF0ZWQpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNjYW5uZXIuc291cmNl
W3RoaXMuc2Nhbm5lci5pbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkg
eworICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuQmluYXJ5TGl0ZXJhbCA9IGZ1bmN0aW9u
IChzdGFydCkgeworICAgICAgICAgICAgdmFyIG51bSA9ICcnOworICAgICAgICAgICAgdmFyIGNo
OworICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisgICAgICAgICAgICAgICAgY2gg
PSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggIT09ICcw
JyAmJiBjaCAhPT0gJzEnKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gKGNoID09PSAnOycpOwotICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSBjaDsKLSAgICAgICAgICAgICAgICArK3RoaXMuc2Nhbm5l
ci5pbmRleDsKLSAgICAgICAgICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChyZXN1bHQubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiAnJiMxMjM7Jwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgPSAoY2ggPT09ICcjJyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWVyaWMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiAnJiN4NDE7JwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZXggPSAoY2ggPT09ICd4Jyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbGlkID0gaGV4IHx8IGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0Rl
Y2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnVtZXJpYyA9IG51bWVyaWMgJiYgIWhleDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0g
dmFsaWQgJiYgIShudW1lcmljICYmICFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGln
aXQoY2guY2hhckNvZGVBdCgwKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
ID0gdmFsaWQgJiYgIShoZXggJiYgIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0hleERpZ2l0KGNo
LmNoYXJDb2RlQXQoMCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBu
dW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmICh2YWxpZCAmJiB0ZXJtaW5hdGVkICYmIHJlc3VsdC5sZW5ndGggPiAyKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gZS5nLiAnJiN4NDE7JyBiZWNvbWVzIGp1c3QgJyN4NDEnCi0gICAgICAg
ICAgICAgICAgdmFyIHN0ciA9IHJlc3VsdC5zdWJzdHIoMSwgcmVzdWx0Lmxlbmd0aCAtIDIpOwot
ICAgICAgICAgICAgICAgIGlmIChudW1lcmljICYmIHN0ci5sZW5ndGggPiAxKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoc3RyLnN1
YnN0cigxKSwgMTApKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaGV4ICYmIHN0ci5sZW5ndGggPiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoJzAnICsgc3RyLnN1YnN0cigxKSwgMTYpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIW51bWVyaWMgJiYg
IWhleCAmJiB4aHRtbF9lbnRpdGllc18xLlhIVE1MRW50aXRpZXNbc3RyXSkgewotICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSB4aHRtbF9lbnRpdGllc18xLlhIVE1MRW50aXRpZXNbc3RyXTsK
KyAgICAgICAgICAgIGlmIChudW0ubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgLy8g
b25seSAwYiBvciAwQgorICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4o
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdGhpcy5lb2YoKSkgeworICAgICAg
ICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKKyAgICAg
ICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLworICAgICAgICAgICAgICAgIGlm
IChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoY2gpIHx8IGNoYXJhY3Rl
cl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IDYgLyogTnVtZXJpY0xpdGVyYWwgKi8sCisgICAgICAgICAg
ICAgICAgdmFsdWU6IHBhcnNlSW50KG51bSwgMiksCisgICAgICAgICAgICAgICAgbGluZU51bWJl
cjogdGhpcy5saW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5l
U3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVu
ZDogdGhpcy5pbmRleAorICAgICAgICAgICAgfTsKICAgICAgICAgfTsKLSAgICAgICAgLy8gU2Nh
biB0aGUgbmV4dCBKU1ggdG9rZW4uIFRoaXMgcmVwbGFjZXMgU2Nhbm5lciNsZXggd2hlbiBpbiBK
U1ggbW9kZS4KLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5sZXhKU1ggPSBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICB2YXIgY3AgPSB0aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQo
dGhpcy5zY2FubmVyLmluZGV4KTsKLSAgICAgICAgICAgIC8vIDwgPiAvIDogPSB7IH0KLSAgICAg
ICAgICAgIGlmIChjcCA9PT0gNjAgfHwgY3AgPT09IDYyIHx8IGNwID09PSA0NyB8fCBjcCA9PT0g
NTggfHwgY3AgPT09IDYxIHx8IGNwID09PSAxMjMgfHwgY3AgPT09IDEyNSkgewotICAgICAgICAg
ICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4
KytdOwotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6
IHRva2VuXzEuVG9rZW4uUHVuY3R1YXRvciwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZh
bHVlLAotICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGluZU51
bWJlciwKLSAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGluZVN0
YXJ0LAotICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5zY2FubmVyLmluZGV4IC0gMSwK
LSAgICAgICAgICAgICAgICAgICAgZW5kOiB0aGlzLnNjYW5uZXIuaW5kZXgKLSAgICAgICAgICAg
ICAgICB9OworICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuT2N0YWxMaXRlcmFsID0gZnVu
Y3Rpb24gKHByZWZpeCwgc3RhcnQpIHsKKyAgICAgICAgICAgIHZhciBudW0gPSAnJzsKKyAgICAg
ICAgICAgIHZhciBvY3RhbCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNo
YXJhY3Rlci5pc09jdGFsRGlnaXQocHJlZml4LmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAg
ICAgICAgb2N0YWwgPSB0cnVlOworICAgICAgICAgICAgICAgIG51bSA9ICcwJyArIHRoaXMuc291
cmNlW3RoaXMuaW5kZXgrK107CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAiICcKLSAg
ICAgICAgICAgIGlmIChjcCA9PT0gMzQgfHwgY3AgPT09IDM5KSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHN0YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4OwotICAgICAgICAgICAgICAgIHZhciBxdW90
ZSA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4KytdOwotICAgICAgICAg
ICAgICAgIHZhciBzdHIgPSAnJzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5l
ci5lb2YoKSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNjYW5uZXIuc291
cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09
PSBxdW90ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09ICcmJykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHRoaXMuc2NhblhIVE1MRW50aXR5KHF1b3RlKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KHRoaXMuc291cmNlLmNoYXJD
b2RlQXQodGhpcy5pbmRleCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAg
ICB0eXBlOiB0b2tlbl8xLlRva2VuLlN0cmluZ0xpdGVyYWwsCi0gICAgICAgICAgICAgICAgICAg
IHZhbHVlOiBzdHIsCi0gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nhbm5l
ci5saW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMuc2Nhbm5l
ci5saW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAg
ICAgICAgICAgICAgZW5kOiB0aGlzLnNjYW5uZXIuaW5kZXgKLSAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gLi4uIG9yIC4KLSAgICAgICAgICAgIGlmIChjcCA9PT0g
NDYpIHsKLSAgICAgICAgICAgICAgICB2YXIgbjEgPSB0aGlzLnNjYW5uZXIuc291cmNlLmNoYXJD
b2RlQXQodGhpcy5zY2FubmVyLmluZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgdmFyIG4yID0g
dGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRleCArIDIpOwot
ICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IChuMSA9PT0gNDYgJiYgbjIgPT09IDQ2KSA/ICcu
Li4nIDogJy4nOwotICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuc2Nhbm5lci5pbmRl
eDsKLSAgICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIuaW5kZXggKz0gdmFsdWUubGVuZ3RoOwot
ICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6IHRva2Vu
XzEuVG9rZW4uUHVuY3R1YXRvciwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwK
LSAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGluZVN0YXJ0LAot
ICAgICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgIGVu
ZDogdGhpcy5zY2FubmVyLmluZGV4Ci0gICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlm
ICghb2N0YWwgJiYgbnVtLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgIC8vIG9ubHkg
MG8gb3IgME8KKyAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBgCi0gICAgICAgICAgICBpZiAoY3AgPT09IDk2
KSB7Ci0gICAgICAgICAgICAgICAgLy8gT25seSBwbGFjZWhvbGRlciwgc2luY2UgaXQgd2lsbCBi
ZSByZXNjYW5uZWQgYXMgYSByZWFsIGFzc2lnbm1lbnQgZXhwcmVzc2lvbi4KLSAgICAgICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICB0eXBlOiB0b2tlbl8xLlRva2VuLlRl
bXBsYXRlLAotICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGlu
ZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGlu
ZVN0YXJ0LAotICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5zY2FubmVyLmluZGV4LAot
ICAgICAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRleAotICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmll
clN0YXJ0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpIHx8IGNoYXJhY3Rlcl8x
LkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5k
ZXgpKSkgeworICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIElkZW50aWZlciBjYW4gbm90IGNvbnRhaW4gYmFj
a3NsYXNoIChjaGFyIGNvZGUgOTIpLgotICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJh
Y3Rlci5pc0lkZW50aWZpZXJTdGFydChjcCkgJiYgKGNwICE9PSA5MikpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgc3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAgICAgICAgICAgICAgKyt0
aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIu
ZW9mKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zY2FubmVyLnNvdXJj
ZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChjaCkgJiYgKGNoICE9PSA5
MikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5zY2FubmVyLmluZGV4OworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiA2IC8qIE51bWVyaWNMaXRl
cmFsICovLAorICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW0sIDgpLAorICAgICAg
ICAgICAgICAgIG9jdGFsOiBvY3RhbCwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlz
LmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCwK
KyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiB0aGlz
LmluZGV4CisgICAgICAgICAgICB9OworICAgICAgICB9OworICAgICAgICBTY2FubmVyLnByb3Rv
dHlwZS5pc0ltcGxpY2l0T2N0YWxMaXRlcmFsID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
Ly8gSW1wbGljaXQgb2N0YWwsIHVubGVzcyB0aGVyZSBpcyBhIG5vbi1vY3RhbCBkaWdpdC4KKyAg
ICAgICAgICAgIC8vIChBbm5leCBCLjEuMSBvbiBOdW1lcmljIExpdGVyYWxzKQorICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IHRoaXMuaW5kZXggKyAxOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlW2ldOworICAgICAgICAgICAgICAg
IGlmIChjaCA9PT0gJzgnIHx8IGNoID09PSAnOScpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWNoYXJh
Y3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisgICAgICAgIFNjYW5u
ZXIucHJvdG90eXBlLnNjYW5OdW1lcmljTGl0ZXJhbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7CisgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNv
dXJjZVtzdGFydF07CisgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoY2hhcmFjdGVyXzEuQ2hh
cmFjdGVyLmlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpIHx8IChjaCA9PT0gJy4nKSwg
J051bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVj
aW1hbCBwb2ludCcpOworICAgICAgICAgICAgdmFyIG51bSA9ICcnOworICAgICAgICAgICAgaWYg
KGNoICE9PSAnLicpIHsKKyAgICAgICAgICAgICAgICBudW0gPSB0aGlzLnNvdXJjZVt0aGlzLmlu
ZGV4KytdOworICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07Cisg
ICAgICAgICAgICAgICAgLy8gSGV4IG51bWJlciBzdGFydHMgd2l0aCAnMHgnLgorICAgICAgICAg
ICAgICAgIC8vIE9jdGFsIG51bWJlciBzdGFydHMgd2l0aCAnMCcuCisgICAgICAgICAgICAgICAg
Ly8gT2N0YWwgbnVtYmVyIGluIEVTNiBzdGFydHMgd2l0aCAnMG8nLgorICAgICAgICAgICAgICAg
IC8vIEJpbmFyeSBudW1iZXIgaW4gRVM2IHN0YXJ0cyB3aXRoICcwYicuCisgICAgICAgICAgICAg
ICAgaWYgKG51bSA9PT0gJzAnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3gn
IHx8IGNoID09PSAnWCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5IZXhMaXRlcmFsKHN0YXJ0
KTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChj
aCA9PT0gNDUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEh5cGhlbiAoY2hhciBjb2Rl
IDQ1KSBjYW4gYmUgcGFydCBvZiBhbiBpZGVudGlmaWVyLgotICAgICAgICAgICAgICAgICAgICAg
ICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
J2InIHx8IGNoID09PSAnQicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRl
eDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5CaW5hcnlMaXRlcmFs
KHN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2ggPT09ICdvJyB8fCBjaCA9PT0gJ08nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5zY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rl
ci5pc09jdGFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0aGlzLmlzSW1wbGljaXRPY3RhbExpdGVyYWwoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLnNjYW5uZXIuc291cmNlLnNs
aWNlKHN0YXJ0LCB0aGlzLnNjYW5uZXIuaW5kZXgpOwotICAgICAgICAgICAgICAgIHJldHVybiB7
Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6IEpTWFRva2VuLklkZW50aWZpZXIsCi0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlOiBpZCwKLSAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjog
dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDog
dGhpcy5zY2FubmVyLmxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0
LAotICAgICAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRleAotICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5p
c0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworICAg
ICAgICAgICAgICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4
XTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci50aHJvd1VuZXhwZWN0
ZWRUb2tlbigpOwotICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLm5leHRK
U1hUb2tlbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMuY29sbGVjdENvbW1lbnRz
KCk7Ci0gICAgICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVyLmlu
ZGV4OwotICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lTnVtYmVyID0gdGhpcy5zY2Fu
bmVyLmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmxpbmVTdGFydCA9
IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxl
eEpTWCgpOwotICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVy
LmluZGV4OwotICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmxpbmVOdW1iZXIgPSB0aGlzLnNj
YW5uZXIubGluZU51bWJlcjsKLSAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lU3RhcnQg
PSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0OwotICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRv
a2VucykgewotICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godGhpcy5jb252ZXJ0VG9r
ZW4odG9rZW4pKTsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJy4nKSB7CisgICAgICAgICAgICAg
ICAgbnVtICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisgICAgICAgICAgICAgICAgd2hp
bGUgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFy
Q29kZUF0KHRoaXMuaW5kZXgpKSkgeworICAgICAgICAgICAgICAgICAgICBudW0gKz0gdGhpcy5z
b3VyY2VbdGhpcy5pbmRleCsrXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiB0b2tlbjsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5u
ZXh0SlNYVGV4dCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIu
aW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAgICAgICAgICB0aGlzLnN0YXJ0TWFya2Vy
LmxpbmVOdW1iZXIgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKLSAgICAgICAgICAgIHRoaXMu
c3RhcnRNYXJrZXIubGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKLSAgICAgICAg
ICAgIHZhciBzdGFydCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKLSAgICAgICAgICAgIHZhciB0ZXh0
ID0gJyc7Ci0gICAgICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgewotICAgICAg
ICAgICAgICAgIHZhciBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4
XTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd7JyB8fCBjaCA9PT0gJzwnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNoID09PSAnZScgfHwgY2gg
PT09ICdFJykgeworICAgICAgICAgICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4
KytdOworICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07CisgICAg
ICAgICAgICAgICAgaWYgKGNoID09PSAnKycgfHwgY2ggPT09ICctJykgeworICAgICAgICAgICAg
ICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAgICAgICAgICAg
ICAgdGV4dCArPSBjaDsKLSAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVy
LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgKyt0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNo
ID09PSAnXHInICYmIHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XSA9PT0g
J1xuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7Cisg
ICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0
aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNl
LmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBudW0g
Kz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIubGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmlu
ZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5pbmRleCA9IHRo
aXMuc2Nhbm5lci5pbmRleDsKLSAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lTnVtYmVy
ID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIu
bGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKLSAgICAgICAgICAgIHZhciB0b2tl
biA9IHsKLSAgICAgICAgICAgICAgICB0eXBlOiBKU1hUb2tlbi5UZXh0LAotICAgICAgICAgICAg
ICAgIHZhbHVlOiB0ZXh0LAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nhbm5l
ci5saW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5zY2FubmVyLmxp
bmVTdGFydCwKKyAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlm
aWVyU3RhcnQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IDYgLyogTnVtZXJpY0xpdGVy
YWwgKi8sCisgICAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlRmxvYXQobnVtKSwKKyAgICAgICAg
ICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGlu
ZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCwKICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCi0g
ICAgICAgICAgICAgICAgZW5kOiB0aGlzLnNjYW5uZXIuaW5kZXgKKyAgICAgICAgICAgICAgICBl
bmQ6IHRoaXMuaW5kZXgKICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBpZiAoKHRleHQubGVu
Z3RoID4gMCkgJiYgdGhpcy5jb25maWcudG9rZW5zKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50
b2tlbnMucHVzaCh0aGlzLmNvbnZlcnRUb2tlbih0b2tlbikpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJv
dG90eXBlLnBlZWtKU1hUb2tlbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBwcmV2
aW91c0luZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OwotICAgICAgICAgICAgdmFyIHByZXZpb3Vz
TGluZU51bWJlciA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOwotICAgICAgICAgICAgdmFyIHBy
ZXZpb3VzTGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKLSAgICAgICAgICAgIHRo
aXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsKLSAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5s
ZXhKU1goKTsKLSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5pbmRleCA9IHByZXZpb3VzSW5kZXg7
Ci0gICAgICAgICAgICB0aGlzLnNjYW5uZXIubGluZU51bWJlciA9IHByZXZpb3VzTGluZU51bWJl
cjsKLSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQgPSBwcmV2aW91c0xpbmVTdGFy
dDsKLSAgICAgICAgICAgIHJldHVybiBuZXh0OwogICAgICAgICB9OwotICAgICAgICAvLyBFeHBl
Y3QgdGhlIG5leHQgSlNYIHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4K
LSAgICAgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCi0gICAgICAg
IEpTWFBhcnNlci5wcm90b3R5cGUuZXhwZWN0SlNYID0gZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAg
ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRKU1hUb2tlbigpOwotICAgICAgICAgICAgaWYg
KHRva2VuLnR5cGUgIT09IHRva2VuXzEuVG9rZW4uUHVuY3R1YXRvciB8fCB0b2tlbi52YWx1ZSAh
PT0gdmFsdWUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRv
a2VuKTsKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGl0
ZXJhbHMtc3RyaW5nLWxpdGVyYWxzCisgICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5TdHJp
bmdMaXRlcmFsID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5p
bmRleDsKKyAgICAgICAgICAgIHZhciBxdW90ZSA9IHRoaXMuc291cmNlW3N0YXJ0XTsKKyAgICAg
ICAgICAgIGFzc2VydF8xLmFzc2VydCgocXVvdGUgPT09ICdcJycgfHwgcXVvdGUgPT09ICciJyks
ICdTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRoIGEgcXVvdGUnKTsKKyAgICAgICAgICAg
ICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgIHZhciBvY3RhbCA9IGZhbHNlOworICAgICAgICAg
ICAgdmFyIHN0ciA9ICcnOworICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKKyAgICAgICAg
ICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7CisgICAgICAgICAgICAgICAgICAgIHF1b3RlID0g
Jyc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICBj
aCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgIGlmICgh
Y2ggfHwgIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2Rl
QXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ3snKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2Fw
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHVuZXNjYXBlZF8xID0gdGhpcy5zY2FuSGV4RXNjYXBlKGNoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWRfMSA9PT0gbnVsbCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVk
VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWRfMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZXNjYXBlZCA9IHRoaXMuc2NhbkhleEVzY2Fw
ZShjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWQgPT09
IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dV
bmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkSGV4RXNjYXBlU2VxdWVu
Y2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xuJzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAncic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHInOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ICs9ICdcdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gJ1xiJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXGYnOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdceDBCJzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnOCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOSc6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggJiYgY2hhcmFj
dGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9jdFRvRGVjID0gdGhpcy5vY3RhbFRv
RGVjaW1hbChjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RhbCA9
IG9jdFRvRGVjLm9jdGFsIHx8IG9jdGFsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUob2N0VG9EZWMuY29kZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICArK3RoaXMubGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gJ1xyJyAmJiB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ1xuJykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbmRl
eDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaC5j
aGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSBjaDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAg
ICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IEpTWCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVj
aWZpZWQgcHVuY3R1YXRvci4KLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5tYXRjaEpTWCA9
IGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnBlZWtKU1hU
b2tlbigpOwotICAgICAgICAgICAgcmV0dXJuIG5leHQudHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5Q
dW5jdHVhdG9yICYmIG5leHQudmFsdWUgPT09IHZhbHVlOwotICAgICAgICB9OwotICAgICAgICBK
U1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYSWRlbnRpZmllciA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7Ci0gICAgICAgICAgICB2
YXIgdG9rZW4gPSB0aGlzLm5leHRKU1hUb2tlbigpOwotICAgICAgICAgICAgaWYgKHRva2VuLnR5
cGUgIT09IEpTWFRva2VuLklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKHRva2VuKTsKKyAgICAgICAgICAgIGlmIChxdW90ZSAhPT0gJycpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgdGhp
cy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYSWRlbnRpZmllcih0b2tlbi52
YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiA4IC8q
IFN0cmluZ0xpdGVyYWwgKi8sCisgICAgICAgICAgICAgICAgdmFsdWU6IHN0ciwKKyAgICAgICAg
ICAgICAgICBvY3RhbDogb2N0YWwsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5s
aW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCisg
ICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogdGhpcy5p
bmRleAorICAgICAgICAgICAgfTsKICAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZUpTWEVsZW1lbnROYW1lID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKLSAgICAgICAgICAgIHZhciBlbGVtZW50TmFt
ZSA9IHRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRj
aEpTWCgnOicpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IGVsZW1lbnROYW1l
OwotICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc6Jyk7Ci0gICAgICAgICAgICAgICAg
dmFyIG5hbWVfMSA9IHRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAg
ZWxlbWVudE5hbWUgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWE5hbWVzcGFj
ZWROYW1lKG5hbWVzcGFjZSwgbmFtZV8xKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIGlmICh0aGlzLm1hdGNoSlNYKCcuJykpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAodGhp
cy5tYXRjaEpTWCgnLicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSBlbGVt
ZW50TmFtZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy4nKTsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBKU1hOb2RlLkpTWE1lbWJlckV4cHJlc3Npb24ob2JqZWN0LCBwcm9wZXJ0eSkpOworICAgICAg
ICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10ZW1wbGF0ZS1saXRlcmFs
LWxleGljYWwtY29tcG9uZW50cworICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuVGVtcGxh
dGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgY29va2VkID0gJyc7CisgICAgICAg
ICAgICB2YXIgdGVybWluYXRlZCA9IGZhbHNlOworICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhp
cy5pbmRleDsKKyAgICAgICAgICAgIHZhciBoZWFkID0gKHRoaXMuc291cmNlW3N0YXJ0XSA9PT0g
J2AnKTsKKyAgICAgICAgICAgIHZhciB0YWlsID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgcmF3
T2Zmc2V0ID0gMjsKKyAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgIHdoaWxl
ICghdGhpcy5lb2YoKSkgeworICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlW3Ro
aXMuaW5kZXgrK107CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnYCcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmF3T2Zmc2V0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgdGFpbCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoY2ggPT09ICckJykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhp
cy5pbmRleF0gPT09ICd7JykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJseVN0
YWNrLnB1c2goJyR7Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGNvb2tlZCArPSBjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoY2ggPT09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJj
ZVt0aGlzLmluZGV4KytdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYXJhY3Rlcl8xLkNo
YXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnbic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXG4n
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29va2VkICs9ICdccic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb29rZWQgKz0gJ1x0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9
PT0gJ3snKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5k
ZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gdGhpcy5z
Y2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvcmUgPSB0aGlzLmluZGV4OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZXNjYXBlZF8yID0gdGhpcy5z
Y2FuSGV4RXNjYXBlKGNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh1bmVzY2FwZWRfMiAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvb2tlZCArPSB1bmVzY2FwZWRfMjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBy
ZXN0b3JlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCAr
PSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZXNjYXBlZCA9IHRoaXMuc2NhbkhleEVzY2FwZShj
aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWQgPT09IG51
bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkSGV4RXNjYXBlU2VxdWVuY2Up
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvb2tlZCArPSB1bmVzY2FwZWQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xiJzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAn
XGYnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29va2VkICs9ICdcdic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJzAnKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRo
aXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSWxsZWdhbDogXDAxIFwwMiBhbmQgc28gb24KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRv
a2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuVGVtcGxhdGVPY3RhbExpdGVyYWwpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29va2VkICs9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyXzEu
Q2hhcmFjdGVyLmlzT2N0YWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWxsZWdhbDogXDEgXDIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNf
MS5NZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gY2g7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK3Ro
aXMubGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xyJyAm
JiB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDAp
KSkgeworICAgICAgICAgICAgICAgICAgICArK3RoaXMubGluZU51bWJlcjsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoID09PSAnXHInICYmIHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAn
XG4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmlu
ZGV4OworICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvb2tlZCAr
PSBjaDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gZWxlbWVudE5hbWU7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUu
cGFyc2VKU1hBdHRyaWJ1dGVOYW1lID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1l
OwotICAgICAgICAgICAgdmFyIGlkZW50aWZpZXIgPSB0aGlzLnBhcnNlSlNYSWRlbnRpZmllcigp
OwotICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hKU1goJzonKSkgewotICAgICAgICAgICAgICAg
IHZhciBuYW1lc3BhY2UgPSBpZGVudGlmaWVyOwotICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0
SlNYKCc6Jyk7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWVfMiA9IHRoaXMucGFyc2VKU1hJZGVu
dGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IEpTWE5vZGUuSlNYTmFtZXNwYWNlZE5hbWUobmFtZXNwYWNlLCBuYW1lXzIpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZU5hbWUgPSBpZGVudGlmaWVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGF0dHJpYnV0ZU5hbWU7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUu
cGFyc2VKU1hTdHJpbmdMaXRlcmFsQXR0cmlidXRlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKLSAgICAgICAgICAgIHZhciB0b2tl
biA9IHRoaXMubmV4dEpTWFRva2VuKCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0g
dG9rZW5fMS5Ub2tlbi5TdHJpbmdMaXRlcmFsKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJv
d1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIg
cmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCByYXcpKTsKLSAgICAg
ICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEV4cHJlc3Npb25BdHRy
aWJ1dGUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRl
SlNYTm9kZSgpOwotICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJ3snKTsKLSAgICAgICAgICAg
IHRoaXMuZmluaXNoSlNYKCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnfScpKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKCdKU1ggYXR0cmlidXRlcyBtdXN0IG9u
bHkgYmUgYXNzaWduZWQgYSBub24tZW1wdHkgZXhwcmVzc2lvbicpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24oKTsKLSAgICAgICAgICAgIHRoaXMucmVlbnRlckpTWCgpOwotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcihl
eHByZXNzaW9uKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFy
c2VKU1hBdHRyaWJ1dGVWYWx1ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLm1hdGNoSlNYKCd7JykgPyB0aGlzLnBhcnNlSlNYRXhwcmVzc2lvbkF0dHJpYnV0ZSgpIDoK
LSAgICAgICAgICAgICAgICB0aGlzLm1hdGNoSlNYKCc8JykgPyB0aGlzLnBhcnNlSlNYRWxlbWVu
dCgpIDogdGhpcy5wYXJzZUpTWFN0cmluZ0xpdGVyYWxBdHRyaWJ1dGUoKTsKLSAgICAgICAgfTsK
LSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWE5hbWVWYWx1ZUF0dHJpYnV0ZSA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2Rl
KCk7Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMucGFyc2VKU1hBdHRyaWJ1dGVOYW1lKCk7
Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSBudWxsOwotICAgICAgICAgICAgaWYgKHRoaXMubWF0
Y2hKU1goJz0nKSkgewotICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc9Jyk7Ci0gICAg
ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlSlNYQXR0cmlidXRlVmFsdWUoKTsKKyAgICAg
ICAgICAgIGlmICghdGVybWluYXRlZCkgeworICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkpOwotICAg
ICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYU3ByZWFkQXR0cmli
dXRlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpT
WE5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCd7Jyk7Ci0gICAgICAgICAgICB0
aGlzLmV4cGVjdEpTWCgnLi4uJyk7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaEpTWCgpOwotICAg
ICAgICAgICAgdmFyIGFyZ3VtZW50ID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7
Ci0gICAgICAgICAgICB0aGlzLnJlZW50ZXJKU1goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWFNwcmVhZEF0dHJpYnV0ZShhcmd1bWVudCkp
OwotICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQXR0cmli
dXRlcyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gW107Ci0g
ICAgICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2hKU1goJy8nKSAmJiAhdGhpcy5tYXRjaEpTWCgn
PicpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IHRoaXMubWF0Y2hKU1goJ3sn
KSA/IHRoaXMucGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUoKSA6Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMucGFyc2VKU1hOYW1lVmFsdWVBdHRyaWJ1dGUoKTsKLSAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVzLnB1c2goYXR0cmlidXRlKTsKKyAgICAgICAgICAgIGlmICghaGVhZCkgeworICAgICAg
ICAgICAgICAgIHRoaXMuY3VybHlTdGFjay5wb3AoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBhdHRyaWJ1dGVzOworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiAxMCAvKiBUZW1wbGF0ZSAqLywKKyAgICAgICAgICAgICAgICB2YWx1ZTogdGhp
cy5zb3VyY2Uuc2xpY2Uoc3RhcnQgKyAxLCB0aGlzLmluZGV4IC0gcmF3T2Zmc2V0KSwKKyAgICAg
ICAgICAgICAgICBjb29rZWQ6IGNvb2tlZCwKKyAgICAgICAgICAgICAgICBoZWFkOiBoZWFkLAor
ICAgICAgICAgICAgICAgIHRhaWw6IHRhaWwsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjog
dGhpcy5saW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3Rh
cnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDog
dGhpcy5pbmRleAorICAgICAgICAgICAgfTsKICAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUpTWE9wZW5pbmdFbGVtZW50ID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMu
ZXhwZWN0SlNYKCc8Jyk7Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMucGFyc2VKU1hFbGVt
ZW50TmFtZSgpOwotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLnBhcnNlSlNYQXR0
cmlidXRlcygpOwotICAgICAgICAgICAgdmFyIHNlbGZDbG9zaW5nID0gdGhpcy5tYXRjaEpTWCgn
LycpOwotICAgICAgICAgICAgaWYgKHNlbGZDbG9zaW5nKSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy5leHBlY3RKU1goJy8nKTsKKyAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtbGl0ZXJhbHMtcmVndWxhci1leHByZXNzaW9uLWxpdGVyYWxzCisgICAgICAgIFNj
YW5uZXIucHJvdG90eXBlLnRlc3RSZWdFeHAgPSBmdW5jdGlvbiAocGF0dGVybiwgZmxhZ3MpIHsK
KyAgICAgICAgICAgIC8vIFRoZSBCTVAgY2hhcmFjdGVyIHRvIHVzZSBhcyBhIHJlcGxhY2VtZW50
IGZvciBhc3RyYWwgc3ltYm9scyB3aGVuCisgICAgICAgICAgICAvLyB0cmFuc2xhdGluZyBhbiBF
UzYgInUiLWZsYWdnZWQgcGF0dGVybiB0byBhbiBFUzUtY29tcGF0aWJsZQorICAgICAgICAgICAg
Ly8gYXBwcm94aW1hdGlvbi4KKyAgICAgICAgICAgIC8vIE5vdGU6IHJlcGxhY2luZyB3aXRoICdc
dUZGRkYnIGVuYWJsZXMgZmFsc2UgcG9zaXRpdmVzIGluIHVubGlrZWx5CisgICAgICAgICAgICAv
LyBzY2VuYXJpb3MuIEZvciBleGFtcGxlLCBgW1x1ezEwNDRmfS1cdXsxMDQ0MH1dYCBpcyBhbiBp
bnZhbGlkCisgICAgICAgICAgICAvLyBwYXR0ZXJuIHRoYXQgd291bGQgbm90IGJlIGRldGVjdGVk
IGJ5IHRoaXMgc3Vic3RpdHV0aW9uLgorICAgICAgICAgICAgdmFyIGFzdHJhbFN1YnN0aXR1dGUg
PSAnXHVGRkZGJzsKKyAgICAgICAgICAgIHZhciB0bXAgPSBwYXR0ZXJuOworICAgICAgICAgICAg
dmFyIHNlbGYgPSB0aGlzOworICAgICAgICAgICAgaWYgKGZsYWdzLmluZGV4T2YoJ3UnKSA+PSAw
KSB7CisgICAgICAgICAgICAgICAgdG1wID0gdG1wCisgICAgICAgICAgICAgICAgICAgIC5yZXBs
YWNlKC9cXHVceyhbMC05YS1mQS1GXSspXH18XFx1KFthLWZBLUYwLTldezR9KS9nLCBmdW5jdGlv
biAoJDAsICQxLCAkMikgeworICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gcGFy
c2VJbnQoJDEgfHwgJDIsIDE2KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA+
IDB4MTBGRkZGKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRocm93VW5leHBlY3Rl
ZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweEZGRkYpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQ
b2ludCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGFzdHJhbFN1YnN0aXR1dGU7CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAg
ICAgLnJlcGxhY2UoL1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLCBhc3RyYWxTdWJz
dGl0dXRlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc+Jyk7
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hP
cGVuaW5nRWxlbWVudChuYW1lLCBzZWxmQ2xvc2luZywgYXR0cmlidXRlcykpOwotICAgICAgICB9
OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQm91bmRhcnlFbGVtZW50ID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUo
KTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc8Jyk7Ci0gICAgICAgICAgICBpZiAodGhp
cy5tYXRjaEpTWCgnLycpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy8nKTsK
LSAgICAgICAgICAgICAgICB2YXIgbmFtZV8zID0gdGhpcy5wYXJzZUpTWEVsZW1lbnROYW1lKCk7
Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJz4nKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hDbG9zaW5nRWxlbWVudChu
YW1lXzMpKTsKKyAgICAgICAgICAgIC8vIEZpcnN0LCBkZXRlY3QgaW52YWxpZCByZWd1bGFyIGV4
cHJlc3Npb25zLgorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBSZWdFeHAodG1w
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZUpTWEVs
ZW1lbnROYW1lKCk7Ci0gICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMucGFyc2VKU1hB
dHRyaWJ1dGVzKCk7Ci0gICAgICAgICAgICB2YXIgc2VsZkNsb3NpbmcgPSB0aGlzLm1hdGNoSlNY
KCcvJyk7Ci0gICAgICAgICAgICBpZiAoc2VsZkNsb3NpbmcpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLmV4cGVjdEpTWCgnLycpOworICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxp
ZFJlZ0V4cCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnPicp
OwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNY
T3BlbmluZ0VsZW1lbnQobmFtZSwgc2VsZkNsb3NpbmcsIGF0dHJpYnV0ZXMpKTsKLSAgICAgICAg
fTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEVtcHR5RXhwcmVzc2lvbiA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hDaGls
ZE5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuY29sbGVjdENvbW1lbnRzKCk7Ci0gICAgICAgICAg
ICB0aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAgICAgICAg
ICB0aGlzLmxhc3RNYXJrZXIubGluZU51bWJlciA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOwot
ICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmxpbmVTdGFydCA9IHRoaXMuc2Nhbm5lci5saW5l
U3RhcnQ7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9k
ZS5KU1hFbXB0eUV4cHJlc3Npb24oKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5w
cm90b3R5cGUucGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyID0gZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKLSAgICAgICAgICAgIHRo
aXMuZXhwZWN0SlNYKCd7Jyk7Ci0gICAgICAgICAgICB2YXIgZXhwcmVzc2lvbjsKLSAgICAgICAg
ICAgIGlmICh0aGlzLm1hdGNoSlNYKCd9JykpIHsKLSAgICAgICAgICAgICAgICBleHByZXNzaW9u
ID0gdGhpcy5wYXJzZUpTWEVtcHR5RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgIHRoaXMu
ZXhwZWN0SlNYKCd9Jyk7CisgICAgICAgICAgICAvLyBSZXR1cm4gYSByZWd1bGFyIGV4cHJlc3Np
b24gb2JqZWN0IGZvciB0aGlzIHBhdHRlcm4tZmxhZyBwYWlyLCBvcgorICAgICAgICAgICAgLy8g
YG51bGxgIGluIGNhc2UgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IHRo
ZSBmbGFncyBpdAorICAgICAgICAgICAgLy8gdXNlcy4KKyAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5maW5pc2hKU1go
KTsKLSAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZWVudGVySlNYKCk7CisgICAgICAgICAg
ICBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3Jl
IG5leHQgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWEV4cHJl
c3Npb25Db250YWluZXIoZXhwcmVzc2lvbikpOwogICAgICAgICB9OwotICAgICAgICBKU1hQYXJz
ZXIucHJvdG90eXBlLnBhcnNlSlNYQ2hpbGRyZW4gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB2YXIgY2hpbGRyZW4gPSBbXTsKLSAgICAgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVv
ZigpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWENoaWxkTm9k
ZSgpOwotICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dEpTWFRleHQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAodG9rZW4uc3RhcnQgPCB0b2tlbi5lbmQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pOwotICAgICAgICAgICAg
ICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWFRl
eHQodG9rZW4udmFsdWUsIHJhdykpOwotICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNo
KGNoaWxkKTsKKyAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblJlZ0V4cEJvZHkgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsK
KyAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChjaCA9PT0gJy8nLCAnUmVndWxhciBleHByZXNz
aW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2gnKTsKKyAgICAgICAgICAgIHZhciBz
dHIgPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworICAgICAgICAgICAgdmFyIGNsYXNzTWFy
a2VyID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgdGVybWluYXRlZCA9IGZhbHNlOworICAgICAg
ICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNv
dXJjZVt0aGlzLmluZGV4KytdOworICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAg
ICAgICAgICBpZiAoY2ggPT09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlz
LnNvdXJjZVt0aGlzLmluZGV4KytdOworICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3Rj
MzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1saXRlcmFscy1yZWd1bGFyLWV4cHJlc3Npb24tbGl0
ZXJhbHMKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xp
bmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW50ZXJtaW5h
dGVkUmVnRXhwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gY2g7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0aGlzLnNj
YW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleF0gPT09ICd7JykgewotICAgICAgICAgICAg
ICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5wYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXIo
KTsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjb250YWluZXIpOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9y
KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjbGFzc01hcmtlcikgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICddJykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3NNYXJrZXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy8nKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGNoID09PSAnWycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjsKKyAgICAgICAgICAgIGlmICghdGVy
bWluYXRlZCkgeworICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVz
c2FnZXNfMS5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgLy8gRXhjbHVkZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaC4KKyAgICAgICAg
ICAgIHJldHVybiBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTsKICAgICAgICAgfTsKLSAg
ICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNvbXBsZXhKU1hFbGVtZW50ID0gZnVuY3Rp
b24gKGVsKSB7Ci0gICAgICAgICAgICB2YXIgc3RhY2sgPSBbXTsKLSAgICAgICAgICAgIHdoaWxl
ICghdGhpcy5zY2FubmVyLmVvZigpKSB7Ci0gICAgICAgICAgICAgICAgZWwuY2hpbGRyZW4gPSBl
bC5jaGlsZHJlbi5jb25jYXQodGhpcy5wYXJzZUpTWENoaWxkcmVuKCkpOwotICAgICAgICAgICAg
ICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hDaGlsZE5vZGUoKTsKLSAgICAgICAgICAgICAg
ICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VKU1hCb3VuZGFyeUVsZW1lbnQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE9w
ZW5pbmdFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBvcGVuaW5nID0gKGVsZW1l
bnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAob3BlbmluZy5zZWxmQ2xvc2luZykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
SlNYTm9kZS5KU1hFbGVtZW50KG9wZW5pbmcsIFtdLCBudWxsKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbC5jaGlsZHJlbi5wdXNoKGNoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNr
LnB1c2goZWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWwgPSB7IG5vZGU6IG5vZGUsIG9w
ZW5pbmc6IG9wZW5pbmcsIGNsb3Npbmc6IG51bGwsIGNoaWxkcmVuOiBbXSB9OwotICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5SZWdFeHBGbGFncyA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBzdHIgPSAnJzsKKyAgICAgICAgICAgIHZh
ciBmbGFncyA9ICcnOworICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07CisgICAgICAgICAgICAg
ICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29k
ZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0ganN4X3N5bnRheF8xLkpTWFN5
bnRheC5KU1hDbG9zaW5nRWxlbWVudCkgewotICAgICAgICAgICAgICAgICAgICBlbC5jbG9zaW5n
ID0gKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICB2YXIgb3Blbl8xID0gZ2V0UXVhbGlm
aWVkRWxlbWVudE5hbWUoZWwub3BlbmluZy5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IGNsb3NlXzEgPSBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShlbC5jbG9zaW5nLm5hbWUpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAob3Blbl8xICE9PSBjbG9zZV8xKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IoJ0V4cGVjdGVkIGNvcnJlc3BvbmRpbmcgSlNY
IGNsb3NpbmcgdGFnIGZvciAlMCcsIG9wZW5fMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuZmluYWxpemUoZWwubm9kZSwgbmV3IEpTWE5vZGUu
SlNYRWxlbWVudChlbC5vcGVuaW5nLCBlbC5jaGlsZHJlbiwgZWwuY2xvc2luZykpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWwgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsLmNoaWxkcmVuLnB1c2goY2hpbGQpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJyAmJiAhdGhpcy5lb2YoKSkgeworICAgICAgICAg
ICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworICAgICAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09ICd1JykgeworICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmlu
ZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvcmUgPSB0aGlzLmluZGV4Owor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXIgPSB0aGlzLnNjYW5IZXhFc2NhcGUoJ3Un
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyICE9PSBudWxsKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2hhcjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHN0ciArPSAnXFx1JzsgcmVzdG9yZSA8IHRoaXMuaW5kZXg7ICsrcmVzdG9y
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdGhpcy5zb3VyY2Vb
cmVzdG9yZV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHJlc3RvcmU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxhZ3MgKz0gJ3UnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAnXFx1JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXCc7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoOworICAgICAgICAgICAgICAgICAgICBzdHIgKz0g
Y2g7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGVsOworICAgICAgICAgICAgcmV0dXJuIGZsYWdzOwogICAgICAgICB9OwotICAgICAgICBKU1hQ
YXJzZXIucHJvdG90eXBlLnBhcnNlSlNYRWxlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgb3Bl
bmluZyA9IHRoaXMucGFyc2VKU1hPcGVuaW5nRWxlbWVudCgpOwotICAgICAgICAgICAgdmFyIGNo
aWxkcmVuID0gW107Ci0gICAgICAgICAgICB2YXIgY2xvc2luZyA9IG51bGw7Ci0gICAgICAgICAg
ICBpZiAoIW9wZW5pbmcuc2VsZkNsb3NpbmcpIHsKLSAgICAgICAgICAgICAgICB2YXIgZWwgPSB0
aGlzLnBhcnNlQ29tcGxleEpTWEVsZW1lbnQoeyBub2RlOiBub2RlLCBvcGVuaW5nOiBvcGVuaW5n
LCBjbG9zaW5nOiBjbG9zaW5nLCBjaGlsZHJlbjogY2hpbGRyZW4gfSk7Ci0gICAgICAgICAgICAg
ICAgY2hpbGRyZW4gPSBlbC5jaGlsZHJlbjsKLSAgICAgICAgICAgICAgICBjbG9zaW5nID0gZWwu
Y2xvc2luZzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBKU1hOb2RlLkpTWEVsZW1lbnQob3BlbmluZywgY2hpbGRyZW4sIGNsb3Npbmcp
KTsKKyAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblJlZ0V4cCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7CisgICAgICAgICAgICB2YXIgcGF0
dGVybiA9IHRoaXMuc2NhblJlZ0V4cEJvZHkoKTsKKyAgICAgICAgICAgIHZhciBmbGFncyA9IHRo
aXMuc2NhblJlZ0V4cEZsYWdzKCk7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnRlc3RS
ZWdFeHAocGF0dGVybiwgZmxhZ3MpOworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiA5IC8qIFJlZ3VsYXJFeHByZXNzaW9uICovLAorICAgICAgICAgICAgICAgIHZh
bHVlOiAnJywKKyAgICAgICAgICAgICAgICBwYXR0ZXJuOiBwYXR0ZXJuLAorICAgICAgICAgICAg
ICAgIGZsYWdzOiBmbGFncywKKyAgICAgICAgICAgICAgICByZWdleDogdmFsdWUsCisgICAgICAg
ICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxp
bmVTdGFydDogdGhpcy5saW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAor
ICAgICAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleAorICAgICAgICAgICAgfTsKICAgICAgICAg
fTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWFJvb3QgPSBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICAvLyBQb3AgdGhlIG9wZW5pbmcgJzwnIGFkZGVkIGZyb20gdGhlIGxv
b2thaGVhZC4KLSAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy50b2tlbnMpIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLnRva2Vucy5wb3AoKTsKKyAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUubGV4
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMuZW9mKCkpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiAyIC8qIEVPRiAqLywK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcnLAorICAgICAgICAgICAgICAgICAgICBsaW5l
TnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDog
dGhpcy5saW5lU3RhcnQsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmluZGV4LAor
ICAgICAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKKyAgICAgICAgICAgICAgICB9Owog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5zdGFydEpTWCgpOwotICAgICAgICAgICAg
dmFyIGVsZW1lbnQgPSB0aGlzLnBhcnNlSlNYRWxlbWVudCgpOwotICAgICAgICAgICAgdGhpcy5m
aW5pc2hKU1goKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgdmFy
IGNwID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKKyAgICAgICAgICAgIGlm
IChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbklkZW50aWZpZXIoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFuZCA7CisgICAgICAgICAgICBpZiAo
Y3AgPT09IDB4MjggfHwgY3AgPT09IDB4MjkgfHwgY3AgPT09IDB4M0IpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5zY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdpdGggc2luZ2xlIHF1b3RlIChVKzAwMjcp
IG9yIGRvdWJsZSBxdW90ZSAoVSswMDIyKS4KKyAgICAgICAgICAgIGlmIChjcCA9PT0gMHgyNyB8
fCBjcCA9PT0gMHgyMikgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5TdHJpbmdM
aXRlcmFsKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBEb3QgKC4pIFUrMDAyRSBj
YW4gYWxzbyBzdGFydCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaGVuY2UgdGhlIG5lZWQKKyAg
ICAgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgICAgIGlm
IChjcCA9PT0gMHgyRSkgeworICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0
ZXIuaXNEZWNpbWFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkp
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5OdW1lcmljTGl0ZXJhbCgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuUHVu
Y3R1YXRvcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNo
YXJhY3Rlci5pc0RlY2ltYWxEaWdpdChjcCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5zY2FuTnVtZXJpY0xpdGVyYWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRl
bXBsYXRlIGxpdGVyYWxzIHN0YXJ0IHdpdGggYCAoVSswMDYwKSBmb3IgdGVtcGxhdGUgaGVhZAor
ICAgICAgICAgICAgLy8gb3IgfSAoVSswMDdEKSBmb3IgdGVtcGxhdGUgbWlkZGxlIG9yIHRlbXBs
YXRlIHRhaWwuCisgICAgICAgICAgICBpZiAoY3AgPT09IDB4NjAgfHwgKGNwID09PSAweDdEICYm
IHRoaXMuY3VybHlTdGFja1t0aGlzLmN1cmx5U3RhY2subGVuZ3RoIC0gMV0gPT09ICckeycpKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhblRlbXBsYXRlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBQb3NzaWJsZSBpZGVudGlmaWVyIHN0YXJ0IGluIGEgc3Vycm9n
YXRlIHBhaXIuCisgICAgICAgICAgICBpZiAoY3AgPj0gMHhEODAwICYmIGNwIDwgMHhERkZGKSB7
CisgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJT
dGFydCh0aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5kZXgpKSkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5zY2FuSWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5QdW5jdHVhdG9yKCk7CiAgICAg
ICAgIH07Ci0gICAgICAgIHJldHVybiBKU1hQYXJzZXI7Ci0gICAgfShwYXJzZXJfMS5QYXJzZXIp
KTsKLSAgICBleHBvcnRzLkpTWFBhcnNlciA9IEpTWFBhcnNlcjsKKyAgICAgICAgcmV0dXJuIFNj
YW5uZXI7CisgICAgfSgpKTsKKyAgICBleHBvcnRzLlNjYW5uZXIgPSBTY2FubmVyOwogCiAKIC8q
KiovIH0sCi0vKiAxMiAqLworLyogMTMgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cykgeworCisgICAgInVzZSBzdHJpY3QiOworICAgIDsKKyAgICBleHBvcnRzLlRva2VuTmFtZSA9
IHt9OworICAgIGV4cG9ydHMuVG9rZW5OYW1lWzEgLyogQm9vbGVhbkxpdGVyYWwgKi9dID0gJ0Jv
b2xlYW4nOworICAgIGV4cG9ydHMuVG9rZW5OYW1lWzIgLyogRU9GICovXSA9ICc8ZW5kPic7Cisg
ICAgZXhwb3J0cy5Ub2tlbk5hbWVbMyAvKiBJZGVudGlmaWVyICovXSA9ICdJZGVudGlmaWVyJzsK
KyAgICBleHBvcnRzLlRva2VuTmFtZVs0IC8qIEtleXdvcmQgKi9dID0gJ0tleXdvcmQnOworICAg
IGV4cG9ydHMuVG9rZW5OYW1lWzUgLyogTnVsbExpdGVyYWwgKi9dID0gJ051bGwnOworICAgIGV4
cG9ydHMuVG9rZW5OYW1lWzYgLyogTnVtZXJpY0xpdGVyYWwgKi9dID0gJ051bWVyaWMnOworICAg
IGV4cG9ydHMuVG9rZW5OYW1lWzcgLyogUHVuY3R1YXRvciAqL10gPSAnUHVuY3R1YXRvcic7Cisg
ICAgZXhwb3J0cy5Ub2tlbk5hbWVbOCAvKiBTdHJpbmdMaXRlcmFsICovXSA9ICdTdHJpbmcnOwor
ICAgIGV4cG9ydHMuVG9rZW5OYW1lWzkgLyogUmVndWxhckV4cHJlc3Npb24gKi9dID0gJ1JlZ3Vs
YXJFeHByZXNzaW9uJzsKKyAgICBleHBvcnRzLlRva2VuTmFtZVsxMCAvKiBUZW1wbGF0ZSAqL10g
PSAnVGVtcGxhdGUnOworCisKKy8qKiovIH0sCisvKiAxNCAqLwogLyoqKi8gZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzKSB7CiAKICAgICAvLyBHZW5lcmF0ZWQgYnkgZ2VuZXJhdGUteGh0bWwtZW50
aXRpZXMuanMuIERPIE5PVCBNT0RJRlkhCkBAIC02MzcyLDE0MiArNjYwNiwxOCBAQCBlbHNlIGlm
ICh0aGlzLm1hdGNoSlNYKCcuJykpIHsKIAogCiAvKioqLyB9LAotLyogMTMgKi8KLS8qKiovIGZ1
bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewotCi0gICAgInVzZSBzdHJpY3QiOwotICAgIGV4cG9y
dHMuSlNYU3ludGF4ID0gewotICAgICAgICBKU1hBdHRyaWJ1dGU6ICdKU1hBdHRyaWJ1dGUnLAot
ICAgICAgICBKU1hDbG9zaW5nRWxlbWVudDogJ0pTWENsb3NpbmdFbGVtZW50JywKLSAgICAgICAg
SlNYRWxlbWVudDogJ0pTWEVsZW1lbnQnLAotICAgICAgICBKU1hFbXB0eUV4cHJlc3Npb246ICdK
U1hFbXB0eUV4cHJlc3Npb24nLAotICAgICAgICBKU1hFeHByZXNzaW9uQ29udGFpbmVyOiAnSlNY
RXhwcmVzc2lvbkNvbnRhaW5lcicsCi0gICAgICAgIEpTWElkZW50aWZpZXI6ICdKU1hJZGVudGlm
aWVyJywKLSAgICAgICAgSlNYTWVtYmVyRXhwcmVzc2lvbjogJ0pTWE1lbWJlckV4cHJlc3Npb24n
LAotICAgICAgICBKU1hOYW1lc3BhY2VkTmFtZTogJ0pTWE5hbWVzcGFjZWROYW1lJywKLSAgICAg
ICAgSlNYT3BlbmluZ0VsZW1lbnQ6ICdKU1hPcGVuaW5nRWxlbWVudCcsCi0gICAgICAgIEpTWFNw
cmVhZEF0dHJpYnV0ZTogJ0pTWFNwcmVhZEF0dHJpYnV0ZScsCi0gICAgICAgIEpTWFRleHQ6ICdK
U1hUZXh0JwotICAgIH07Ci0KLQotLyoqKi8gfSwKLS8qIDE0ICovCi0vKioqLyBmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKLQotICAgICJ1c2Ugc3RyaWN0
IjsKLSAgICB2YXIganN4X3N5bnRheF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7Ci0gICAg
dmFyIEpTWENsb3NpbmdFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24g
SlNYQ2xvc2luZ0VsZW1lbnQobmFtZSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5
bnRheF8xLkpTWFN5bnRheC5KU1hDbG9zaW5nRWxlbWVudDsKLSAgICAgICAgICAgIHRoaXMubmFt
ZSA9IG5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTWENsb3NpbmdFbGVtZW50Owot
ICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5KU1hDbG9zaW5nRWxlbWVudCA9IEpTWENsb3NpbmdFbGVt
ZW50OwotICAgIHZhciBKU1hFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rp
b24gSlNYRWxlbWVudChvcGVuaW5nRWxlbWVudCwgY2hpbGRyZW4sIGNsb3NpbmdFbGVtZW50KSB7
Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWEVsZW1l
bnQ7Ci0gICAgICAgICAgICB0aGlzLm9wZW5pbmdFbGVtZW50ID0gb3BlbmluZ0VsZW1lbnQ7Ci0g
ICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47Ci0gICAgICAgICAgICB0aGlzLmNs
b3NpbmdFbGVtZW50ID0gY2xvc2luZ0VsZW1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IEpTWEVsZW1lbnQ7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkpTWEVsZW1lbnQgPSBKU1hFbGVt
ZW50OwotICAgIHZhciBKU1hFbXB0eUV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewotICAgICAg
ICBmdW5jdGlvbiBKU1hFbXB0eUV4cHJlc3Npb24oKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUg
PSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWEVtcHR5RXhwcmVzc2lvbjsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gSlNYRW1wdHlFeHByZXNzaW9uOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0
cy5KU1hFbXB0eUV4cHJlc3Npb24gPSBKU1hFbXB0eUV4cHJlc3Npb247Ci0gICAgdmFyIEpTWEV4
cHJlc3Npb25Db250YWluZXIgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBKU1hF
eHByZXNzaW9uQ29udGFpbmVyKGV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9
IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjsKLSAgICAgICAg
ICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIEpTWEV4cHJlc3Npb25Db250YWluZXI7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkpTWEV4
cHJlc3Npb25Db250YWluZXIgPSBKU1hFeHByZXNzaW9uQ29udGFpbmVyOwotICAgIHZhciBKU1hJ
ZGVudGlmaWVyID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSlNYSWRlbnRpZmll
cihuYW1lKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4
LkpTWElkZW50aWZpZXI7Ci0gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBKU1hJZGVudGlmaWVyOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5K
U1hJZGVudGlmaWVyID0gSlNYSWRlbnRpZmllcjsKLSAgICB2YXIgSlNYTWVtYmVyRXhwcmVzc2lv
biA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEpTWE1lbWJlckV4cHJlc3Npb24o
b2JqZWN0LCBwcm9wZXJ0eSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8x
LkpTWFN5bnRheC5KU1hNZW1iZXJFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5vYmplY3Qg
PSBvYmplY3Q7Ci0gICAgICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIEpTWE1lbWJlckV4cHJlc3Npb247Ci0gICAgfSgpKTsKLSAgICBl
eHBvcnRzLkpTWE1lbWJlckV4cHJlc3Npb24gPSBKU1hNZW1iZXJFeHByZXNzaW9uOwotICAgIHZh
ciBKU1hBdHRyaWJ1dGUgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBKU1hBdHRy
aWJ1dGUobmFtZSwgdmFsdWUpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhf
MS5KU1hTeW50YXguSlNYQXR0cmlidXRlOwotICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsK
LSAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gSlNYQXR0cmlidXRlOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5KU1hBdHRyaWJ1dGUgPSBK
U1hBdHRyaWJ1dGU7Ci0gICAgdmFyIEpTWE5hbWVzcGFjZWROYW1lID0gKGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgZnVuY3Rpb24gSlNYTmFtZXNwYWNlZE5hbWUobmFtZXNwYWNlLCBuYW1lKSB7Ci0g
ICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE5hbWVzcGFj
ZWROYW1lOwotICAgICAgICAgICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gICAgICAg
ICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBKU1hOYW1l
c3BhY2VkTmFtZTsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuSlNYTmFtZXNwYWNlZE5hbWUgPSBK
U1hOYW1lc3BhY2VkTmFtZTsKLSAgICB2YXIgSlNYT3BlbmluZ0VsZW1lbnQgPSAoZnVuY3Rpb24g
KCkgewotICAgICAgICBmdW5jdGlvbiBKU1hPcGVuaW5nRWxlbWVudChuYW1lLCBzZWxmQ2xvc2lu
ZywgYXR0cmlidXRlcykgewotICAgICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpT
WFN5bnRheC5KU1hPcGVuaW5nRWxlbWVudDsKLSAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7
Ci0gICAgICAgICAgICB0aGlzLnNlbGZDbG9zaW5nID0gc2VsZkNsb3Npbmc7Ci0gICAgICAgICAg
ICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBKU1hPcGVuaW5nRWxlbWVudDsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuSlNYT3BlbmluZ0Vs
ZW1lbnQgPSBKU1hPcGVuaW5nRWxlbWVudDsKLSAgICB2YXIgSlNYU3ByZWFkQXR0cmlidXRlID0g
KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSlNYU3ByZWFkQXR0cmlidXRlKGFyZ3Vt
ZW50KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpT
WFNwcmVhZEF0dHJpYnV0ZTsKLSAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gSlNYU3ByZWFkQXR0cmlidXRlOwotICAgIH0oKSk7
Ci0gICAgZXhwb3J0cy5KU1hTcHJlYWRBdHRyaWJ1dGUgPSBKU1hTcHJlYWRBdHRyaWJ1dGU7Ci0g
ICAgdmFyIEpTWFRleHQgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBKU1hUZXh0
KHZhbHVlLCByYXcpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hT
eW50YXguSlNYVGV4dDsKLSAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICAgICAg
ICAgIHRoaXMucmF3ID0gcmF3OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBKU1hUZXh0Owot
ICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5KU1hUZXh0ID0gSlNYVGV4dDsKLQotCi0vKioqLyB9LAog
LyogMTUgKi8KIC8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVp
cmVfXykgewogCiAgICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBzY2FubmVyXzEgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDgpOwotICAgIHZhciBlcnJvcl9oYW5kbGVyXzEgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDYpOwotICAgIHZhciB0b2tlbl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTsKKyAg
ICB2YXIgZXJyb3JfaGFuZGxlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7CisgICAgdmFy
IHNjYW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpOworICAgIHZhciB0b2tlbl8xID0g
X193ZWJwYWNrX3JlcXVpcmVfXygxMyk7CiAgICAgdmFyIFJlYWRlciA9IChmdW5jdGlvbiAoKSB7
CiAgICAgICAgIGZ1bmN0aW9uIFJlYWRlcigpIHsKICAgICAgICAgICAgIHRoaXMudmFsdWVzID0g
W107CiAgICAgICAgICAgICB0aGlzLmN1cmx5ID0gdGhpcy5wYXJlbiA9IC0xOwogICAgICAgICB9
Ci0gICAgICAgIDsKICAgICAgICAgLy8gQSBmdW5jdGlvbiBmb2xsb3dpbmcgb25lIG9mIHRob3Nl
IHRva2VucyBpcyBhbiBleHByZXNzaW9uLgogICAgICAgICBSZWFkZXIucHJvdG90eXBlLmJlZm9y
ZUZ1bmN0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICByZXR1cm4g
WycoJywgJ3snLCAnWycsICdpbicsICd0eXBlb2YnLCAnaW5zdGFuY2VvZicsICduZXcnLApAQCAt
NjUyMCw3ICs2NjMwLDYgQEAgZnVuY3Rpb24gUmVhZGVyKCkgewogICAgICAgICAgICAgICAgICd8
JywgJ14nLCAnIScsICd+JywgJyYmJywgJ3x8JywgJz8nLCAnOicsICc9PT0nLCAnPT0nLCAnPj0n
LAogICAgICAgICAgICAgICAgICc8PScsICc8JywgJz4nLCAnIT0nLCAnIT09J10uaW5kZXhPZih0
KSA+PSAwOwogICAgICAgICB9OwotICAgICAgICA7CiAgICAgICAgIC8vIERldGVybWluZSBpZiBm
b3J3YXJkIHNsYXNoICgvKSBpcyBhbiBvcGVyYXRvciBvciBwYXJ0IG9mIGEgcmVndWxhciBleHBy
ZXNzaW9uCiAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3N3ZWV0LmpzL3dp
a2kvZGVzaWduCiAgICAgICAgIFJlYWRlci5wcm90b3R5cGUuaXNSZWdleFN0YXJ0ID0gZnVuY3Rp
b24gKCkgewpAQCAtNjU0OSwxMiArNjY1OCwxNCBAQCBlbHNlIGlmICh0aGlzLnZhbHVlc1t0aGlz
LmN1cmx5IC0gNF0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBjaGVja18yID0gdGhpcy52YWx1ZXNbdGhpcy5jdXJseSAtIDVdOwogICAgICAgICAgICAgICAg
ICAgICAgICAgcmVnZXggPSBjaGVja18yID8gIXRoaXMuYmVmb3JlRnVuY3Rpb25FeHByZXNzaW9u
KGNoZWNrXzIpIDogdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZWdleDsKICAgICAg
ICAgfTsKLSAgICAgICAgOwogICAgICAgICBSZWFkZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlv
biAodG9rZW4pIHsKLSAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2Vu
LlB1bmN0dWF0b3IgfHwgdG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5LZXl3b3JkKSB7Cisg
ICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gNyAvKiBQdW5jdHVhdG9yICovIHx8IHRva2Vu
LnR5cGUgPT09IDQgLyogS2V5d29yZCAqLykgewogICAgICAgICAgICAgICAgIGlmICh0b2tlbi52
YWx1ZSA9PT0gJ3snKSB7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VybHkgPSB0aGlzLnZh
bHVlcy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjU2Nyw3ICs2Njc4LDYgQEAgZWxz
ZSBpZiAodG9rZW4udmFsdWUgPT09ICcoJykgewogICAgICAgICAgICAgICAgIHRoaXMudmFsdWVz
LnB1c2gobnVsbCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0gICAgICAgIDsKICAgICAg
ICAgcmV0dXJuIFJlYWRlcjsKICAgICB9KCkpOwogICAgIHZhciBUb2tlbml6ZXIgPSAoZnVuY3Rp
b24gKCkgewpAQCAtNjU4MSwyMCArNjY5MSwxNyBAQCBmdW5jdGlvbiBUb2tlbml6ZXIoY29kZSwg
Y29uZmlnKSB7CiAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IFtdOwogICAgICAgICAgICAgdGhp
cy5yZWFkZXIgPSBuZXcgUmVhZGVyKCk7CiAgICAgICAgIH0KLSAgICAgICAgOwogICAgICAgICBU
b2tlbml6ZXIucHJvdG90eXBlLmVycm9ycyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVycm9ySGFuZGxlci5lcnJvcnM7CiAgICAgICAgIH07Ci0gICAgICAgIDsKICAg
ICAgICAgVG9rZW5pemVyLnByb3RvdHlwZS5nZXROZXh0VG9rZW4gPSBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAg
ICAgdmFyIGNvbW1lbnRzID0gdGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpOwogICAgICAgICAg
ICAgICAgIGlmICh0aGlzLnNjYW5uZXIudHJhY2tDb21tZW50KSB7CiAgICAgICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBlID0gY29tbWVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgY29tbWVudCA9IHZvaWQgMDsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2
YWx1ZSA9IHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UoZS5zbGljZVswXSwgZS5zbGljZVsxXSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0geworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGNvbW1lbnQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTog
ZS5tdWx0aUxpbmUgPyAnQmxvY2tDb21tZW50JyA6ICdMaW5lQ29tbWVudCcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICB9
OwpAQCAtNjYyNiw4ICs2NzMzLDcgQEAgZnVuY3Rpb24gVG9rZW5pemVyKGNvZGUsIGNvbmZpZykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnNjYW5uZXIubGV4KCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkZXIucHVz
aCh0b2tlbik7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHZvaWQgMDsKLSAgICAg
ICAgICAgICAgICAgICAgZW50cnkgPSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRva2VuXzEuVG9rZW5OYW1lW3Rva2Vu
LnR5cGVdLAogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2Nhbm5lci5zb3Vy
Y2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCkKICAgICAgICAgICAgICAgICAgICAgfTsK
QEAgLTY2NDEsMTUgKzY3NDcsMTYgQEAgZnVuY3Rpb24gVG9rZW5pemVyKGNvZGUsIGNvbmZpZykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVu
dHJ5LmxvYyA9IGxvYzsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBpZiAodG9rZW4ucmVnZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJlZ2V4
ID0gdG9rZW4ucmVnZXg7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSA5
IC8qIFJlZ3VsYXJFeHByZXNzaW9uICovKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
cGF0dGVybiA9IHRva2VuLnBhdHRlcm47CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxh
Z3MgPSB0b2tlbi5mbGFnczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJlZ2V4ID0g
eyBwYXR0ZXJuOiBwYXR0ZXJuLCBmbGFnczogZmxhZ3MgfTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKGVudHJ5KTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIu
c2hpZnQoKTsKICAgICAgICAgfTsKLSAgICAgICAgOwogICAgICAgICByZXR1cm4gVG9rZW5pemVy
OwogICAgIH0oKSk7CiAgICAgZXhwb3J0cy5Ub2tlbml6ZXIgPSBUb2tlbml6ZXI7CkBAIC02NjU4
LDQgKzY3NjUsNCBAQCBmdW5jdGlvbiBUb2tlbml6ZXIoY29kZSwgY29uZmlnKSB7CiAvKioqLyB9
CiAvKioqKioqLyBdKQogfSk7Ci07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Njcmlw
dFN5bnRheFRyZWUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvU2NyaXB0U3ludGF4VHJlZS5qcwppbmRleCBjYTczODNhYzVlNDE1NDc0NGZlODVkNzMzMmFj
YWM2M2U2NGFmODdjLi4yNzk0MjQxOWJjYThkNDYzOTliZTk1Njg5MGUxMTkyY2NlNWNiNjIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2Ny
aXB0U3ludGF4VHJlZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwpAQCAtMjg1LDYgKzI4NSw3IEBAIGZ1bmN0aW9u
IGdhdGhlcklkZW50aWZpZXJzKG5vZGUpCiAgICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Bc3NpZ25tZW50UGF0dGVybjoKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdhdGhlcklkZW50aWZpZXJzKG5vZGUubGVmdCk7CiAgICAgICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5SZXN0
RWxlbWVudDoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLlJlc3RQcm9wZXJ0eToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdh
dGhlcklkZW50aWZpZXJzKG5vZGUuYXJndW1lbnQpOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCBu
b2RlIHR5cGUgaW4gdmFyaWFibGUgZGVjbGFyYXRvcjogIiArIG5vZGUudHlwZSk7CkBAIC0yOTIs
NyArMjkzLDcgQEAgZnVuY3Rpb24gZ2F0aGVySWRlbnRpZmllcnMobm9kZSkKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5vZGUudHlwZSA9PT0gV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRpZmllciB8fCBub2RlLnR5
cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk9iamVjdFBhdHRl
cm4gfHwgbm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5BcnJheVBhdHRlcm4gfHwgbm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5SZXN0RWxlbWVudCk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5vZGUu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRpZmll
ciB8fCBub2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
Lk9iamVjdFBhdHRlcm4gfHwgbm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5BcnJheVBhdHRlcm4gfHwgbm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5SZXN0RWxlbWVudCB8fCBub2RlLnR5cGUgPT09IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJlc3RQcm9wZXJ0eSk7CiAKICAg
ICAgICAgcmV0dXJuIGdhdGhlcklkZW50aWZpZXJzKG5vZGUpOwogICAgIH0KQEAgLTQyNiw2ICs0
MjcsOSBAQCBmdW5jdGlvbiBnYXRoZXJJZGVudGlmaWVycyhub2RlKQogICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJlc3RFbGVtZW50OgogICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuUmVzdFByb3BlcnR5OgorICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmV0dXJuU3RhdGVt
ZW50OgogICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywg
c3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00MzUsNiArNDM5LDkgQEAgZnVuY3Rpb24g
Z2F0aGVySWRlbnRpZmllcnMobm9kZSkKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5TcHJlYWRFbGVtZW50OgogICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3By
ZWFkUHJvcGVydHk6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGNh
bGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0Y2hTdGF0ZW1lbnQ6CiAgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuZGlzY3JpbWluYW50LCBjYWxsYmFjaywgc3RhdGUpOwog
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuY2FzZXMsIGNhbGxiYWNrLCBzdGF0
ZSk7CkBAIC01MjUsNiArNTMyLDcgQEAgZnVuY3Rpb24gZ2F0aGVySWRlbnRpZmllcnMobm9kZSkK
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5EZWJ1
Z2dlclN0YXRlbWVudDoKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5FbXB0eVN0YXRlbWVudDoKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyOgorICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkltcG9ydDoKICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5MaXRlcmFsOgogICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk1ldGFQcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5TdXBlcjoK
QEAgLTg0NSw2ICs4NTMsMTIgQEAgZnVuY3Rpb24gZ2F0aGVySWRlbnRpZmllcnMobm9kZSkKICAg
ICAgICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5v
ZGUuYXJndW1lbnQpCiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgIlJlc3RQcm9wZXJ0eSI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmVzdFBy
b3BlcnR5LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUobm9kZS5hcmd1bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSAiUmV0dXJuU3RhdGVtZW50IjoKICAgICAgICAgICAgIHJlc3VsdCA9
IHsKICAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5SZXR1cm5TdGF0ZW1lbnQsCkBAIC04NjMsNiArODc3LDEyIEBAIGZ1bmN0aW9uIGdh
dGhlcklkZW50aWZpZXJzKG5vZGUpCiAgICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2Ny
ZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmFyZ3VtZW50KSwKICAgICAgICAgICAgIH07CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiU3ByZWFkUHJvcGVydHkiOgorICAgICAg
ICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLlNwcmVhZFByb3BlcnR5LAorICAgICAgICAgICAgICAgIGFy
Z3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCksCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgIlN1cGVyIjoK
ICAgICAgICAgICAgIHJlc3VsdCA9IHsKICAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5TdXBlcgpAQCAtMTAwMiw2ICsxMDIyLDExIEBA
IGZ1bmN0aW9uIGdhdGhlcklkZW50aWZpZXJzKG5vZGUpCiAgICAgICAgICAgICAgICAgZXhwb3J0
ZWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmV4cG9ydGVkKSwKICAgICAg
ICAgICAgIH07CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiSW1wb3J0IjoKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JbXBvcnQKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSAiSW1wb3J0RGVjbGFyYXRpb24iOgogICAgICAgICAg
ICAgcmVzdWx0ID0gewogICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLkltcG9ydERlY2xhcmF0aW9uLApAQCAtMTA4MCw2ICsxMTA1LDcg
QEAgZnVuY3Rpb24gZ2F0aGVySWRlbnRpZmllcnMobm9kZSkKICAgICBGdW5jdGlvbkV4cHJlc3Np
b246IFN5bWJvbCgiZnVuY3Rpb24tZXhwcmVzc2lvbiIpLAogICAgIElkZW50aWZpZXI6IFN5bWJv
bCgiaWRlbnRpZmllciIpLAogICAgIElmU3RhdGVtZW50OiBTeW1ib2woImlmLXN0YXRlbWVudCIp
LAorICAgIEltcG9ydDogU3ltYm9sKCJpbXBvcnQiKSwKICAgICBJbXBvcnREZWNsYXJhdGlvbjog
U3ltYm9sKCJpbXBvcnQtZGVjbGFyYXRpb24iKSwKICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVy
OiBTeW1ib2woImltcG9ydC1kZWZhdWx0LXNwZWNpZmllciIpLAogICAgIEltcG9ydE5hbWVzcGFj
ZVNwZWNpZmllcjogU3ltYm9sKCJpbXBvcnQtbmFtZXNwYWNlLXNwZWNpZmllciIpLApAQCAtMTA5
Niw5ICsxMTIyLDExIEBAIGZ1bmN0aW9uIGdhdGhlcklkZW50aWZpZXJzKG5vZGUpCiAgICAgUHJv
Z3JhbTogU3ltYm9sKCJwcm9ncmFtIiksCiAgICAgUHJvcGVydHk6IFN5bWJvbCgicHJvcGVydHki
KSwKICAgICBSZXN0RWxlbWVudDogU3ltYm9sKCJyZXN0LWVsZW1lbnQiKSwKKyAgICBSZXN0UHJv
cGVydHk6IFN5bWJvbCgicmVzdC1wcm9wZXJ0eSIpLAogICAgIFJldHVyblN0YXRlbWVudDogU3lt
Ym9sKCJyZXR1cm4tc3RhdGVtZW50IiksCiAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiBTeW1ib2wo
InNlcXVlbmNlLWV4cHJlc3Npb24iKSwKICAgICBTcHJlYWRFbGVtZW50OiBTeW1ib2woInNwcmVh
ZC1lbGVtZW50IiksCisgICAgU3ByZWFkUHJvcGVydHk6IFN5bWJvbCgic3ByZWFkLXByb3BlcnR5
IiksCiAgICAgU3VwZXI6IFN5bWJvbCgic3VwZXIiKSwKICAgICBTd2l0Y2hDYXNlOiBTeW1ib2wo
InN3aXRjaC1jYXNlIiksCiAgICAgU3dpdGNoU3RhdGVtZW50OiBTeW1ib2woInN3aXRjaC1zdGF0
ZW1lbnQiKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1dvcmtlcnMvRm9ybWF0dGVyL0VTVHJlZVdhbGtlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VTVHJlZVdhbGtlci5qcwppbmRleCA1
MjZmNjEwN2NjZjFjYzlmMTMzNGM0ZDFmNjVlNjFjZWFmZGJmZWUxLi5mYWZjYjZhMDRiZWQ4OTcx
NDU1YTUyODdkMzE5MzIwMTgwNGFmZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Xb3JrZXJzL0Zvcm1hdHRlci9FU1RyZWVXYWxrZXIuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvV29ya2Vycy9Gb3JtYXR0ZXIvRVNU
cmVlV2Fsa2VyLmpzCkBAIC0xODIsNiArMTgyLDkgQEAKICAgICAgICAgY2FzZSAiUmVzdEVsZW1l
bnQiOgogICAgICAgICAgICAgdGhpcy5fd2Fsayhub2RlLmFyZ3VtZW50LCBub2RlKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJSZXN0UHJvcGVydHkiOgorICAgICAgICAgICAg
dGhpcy5fd2Fsayhub2RlLmFyZ3VtZW50LCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlICJSZXR1cm5TdGF0ZW1lbnQiOgogICAgICAgICAgICAgdGhpcy5fd2Fsayhub2Rl
LmFyZ3VtZW50LCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTkxLDYgKzE5NCw5IEBA
CiAgICAgICAgIGNhc2UgIlNwcmVhZEVsZW1lbnQiOgogICAgICAgICAgICAgdGhpcy5fd2Fsayhu
b2RlLmFyZ3VtZW50LCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJT
cHJlYWRQcm9wZXJ0eSI6CisgICAgICAgICAgICB0aGlzLl93YWxrKG5vZGUuYXJndW1lbnQsIG5v
ZGUpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgIlN3aXRjaFN0YXRlbWVudCI6
CiAgICAgICAgICAgICB0aGlzLl93YWxrKG5vZGUuZGlzY3JpbWluYW50LCBub2RlKTsKICAgICAg
ICAgICAgIHRoaXMuX3dhbGtBcnJheShub2RlLmNhc2VzLCBub2RlKTsKQEAgLTI4OCw2ICsyOTQs
NyBAQAogICAgICAgICBjYXNlICJEZWJ1Z2dlclN0YXRlbWVudCI6CiAgICAgICAgIGNhc2UgIkVt
cHR5U3RhdGVtZW50IjoKICAgICAgICAgY2FzZSAiSWRlbnRpZmllciI6CisgICAgICAgIGNhc2Ug
IkltcG9ydCI6CiAgICAgICAgIGNhc2UgIkxpdGVyYWwiOgogICAgICAgICBjYXNlICJTdXBlciI6
CiAgICAgICAgIGNhc2UgIlRoaXNFeHByZXNzaW9uIjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VzcHJpbWFGb3JtYXR0
ZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Xb3JrZXJzL0Zvcm1h
dHRlci9Fc3ByaW1hRm9ybWF0dGVyLmpzCmluZGV4IDM3MDJmZWI3MGNiNzVkNGI2YTUxNWMyNmNh
NmFkOGNhZmY2Y2ZkMDUuLjdmZWFlNDZiODUzMWY5ZjZkMWJhYmVhYWE5MTVjMmU0N2E1OWFkNTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMv
Rm9ybWF0dGVyL0VzcHJpbWFGb3JtYXR0ZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvV29ya2Vycy9Gb3JtYXR0ZXIvRXNwcmltYUZvcm1hdHRlci5qcwpAQCAt
ODI4LDkgKzgyOCwxMiBAQCBlbHNlIGlmIChub2RlLnVwZGF0ZSAmJiB0aGlzLl9pc1JhbmdlV2hp
dGVzcGFjZSh0b2tlbi5yYW5nZVsxXSwgbm9kZS51cGRhdGUucmFuZwogICAgICAgICAvLyBJbmNs
dWRlIHRoZXNlIGhlcmUgc28gd2UgZ2V0IG9ubHkgZ2V0IHdhcm5pbmdzIGFib3V0IHVuaGFuZGxl
ZCBub2Rlcy4KICAgICAgICAgaWYgKG5vZGVUeXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIK
ICAgICAgICAgICAgIHx8IG5vZGVUeXBlID09PSAiU3ByZWFkRWxlbWVudCIKKyAgICAgICAgICAg
IHx8IG5vZGVUeXBlID09PSAiU3ByZWFkUHJvcGVydHkiCiAgICAgICAgICAgICB8fCBub2RlVHlw
ZSA9PT0gIlN1cGVyIgorICAgICAgICAgICAgfHwgbm9kZVR5cGUgPT09ICJJbXBvcnQiCiAgICAg
ICAgICAgICB8fCBub2RlVHlwZSA9PT0gIk1ldGFQcm9wZXJ0eSIKICAgICAgICAgICAgIHx8IG5v
ZGVUeXBlID09PSAiUmVzdEVsZW1lbnQiCisgICAgICAgICAgICB8fCBub2RlVHlwZSA9PT0gIlJl
c3RQcm9wZXJ0eSIKICAgICAgICAgICAgIHx8IG5vZGVUeXBlID09PSAiVGVtcGxhdGVFbGVtZW50
IgogICAgICAgICAgICAgfHwgbm9kZVR5cGUgPT09ICJUZW1wbGF0ZUxpdGVyYWwiCiAgICAgICAg
ICAgICB8fCBub2RlVHlwZSA9PT0gIkRlYnVnZ2VyU3RhdGVtZW50IgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE0YjQ3MWVk
NWIwZmQ1N2M4NzAwMWI2YWUzMGJkYzQzYTk2ZTljMWMuLjM0ZDE2OTYyMmVmMTZiZTVhZDAwNmE5
ZWEzMTk2NWQxYjBiYThmMDEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxNy0wMi0wMSAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBVcGdyYWRlIEVzcHJpbWEgdG8gdGhlIGxhdGVzdCBvbmUgdG8gc3VwcG9ydCBkeW5hbWlj
IGltcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY3Njk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvZm9ybWF0dGluZy9mb3JtYXR0aW5nLWphdmFzY3JpcHQtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL2Zvcm1hdHRpbmctamF2YXNjcmlwdC5o
dG1sOgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0
LXRlc3RzL2ltcG9ydC1leHBlY3RlZC5qczogQWRkZWQuCisgICAgICAgIChhc3luYy5sb2FkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0
cy9pbXBvcnQuanM6IEFkZGVkLgorICAgICAgICAoYXN5bmMubG9hZCk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvb2JqZWN0LWFycmF5
LWxpdGVyYWwtZXhwZWN0ZWQuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVz
b3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvb2JqZWN0LWFycmF5LWxpdGVyYWwuanM6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdmFyaWFi
bGUtZGVjbGFyYXRpb24tZXhwZWN0ZWQuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRp
bmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdmFyaWFibGUtZGVjbGFyYXRpb24uanM6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL3V0aWxpdGllcy5qczoKKyAg
ICAgICAgKFRlc3RQYWdlLnJlZ2lzdGVySW5pdGlhbGl6ZXIuKToKKyAgICAgICAgKFRlc3RQYWdl
LnJlZ2lzdGVySW5pdGlhbGl6ZXIpOgorICAgICAgICBGaXggYSBidWcgd2hpY2ggb2NjdXJzIHdo
ZW4gb3V0cHV0IGlzIG5vdCBleHBlY3RlZCBvbmUuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvbW9k
ZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLmh0bWw6CisKIDIwMTctMDItMDEg
IEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgTlVMTC1kZXJlZiBj
cmFzaCBpbiBUZXh0VHJhY2s6OnJlbW92ZUN1ZSgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZm9ybWF0dGluZy9mb3JtYXR0aW5nLWphdmFzY3JpcHQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvZm9ybWF0dGluZy1qYXZhc2NyaXB0LWV4
cGVjdGVkLnR4dAppbmRleCAwMTdjYzU2YjFmZTAzNDBlNjVlZTExYTY5Y2JlNzA5YTJiNGY5ZGIw
Li4yYmE1ZDczYjQwZWUwNjA2YzVjYjFmYjQ3Nzg1NWM5NDg4N2FmYThlIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9mb3JtYXR0aW5nLWphdmFzY3JpcHQtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL2Zvcm1hdHRp
bmctamF2YXNjcmlwdC1leHBlY3RlZC50eHQKQEAgLTI5LDYgKzI5LDkgQEAgUEFTUwogLS0gUnVu
bmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdC5pZi1zdGF0ZW1lbnQu
anMKIFBBU1MKIAorLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNj
cmlwdC5pbXBvcnQuanMKK1BBU1MKKwogLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3Jt
YXR0ZXIuSmF2YVNjcmlwdC5sYWJlbC1icmVhay1jb250aW51ZS1ibG9jay5qcwogUEFTUwogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9mb3JtYXR0aW5nLWph
dmFzY3JpcHQuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL2Zvcm1hdHRp
bmctamF2YXNjcmlwdC5odG1sCmluZGV4IDMzZTEyYmIwODhjYWI5NGQzOTc2MWU4YWU2YjZjYmU3
YjVlZTAxMTYuLjlkYjY2MTc4M2Q0ZjYzN2ViYTBiOTg2MjJkNjBlNjMzNTY3OTNlMjMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL2Zvcm1hdHRpbmctamF2YXNj
cmlwdC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL2Zvcm1hdHRp
bmctamF2YXNjcmlwdC5odG1sCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgICAgICJyZXNvdXJjZXMv
amF2YXNjcmlwdC10ZXN0cy9mdW5jdGlvbnMuanMiLAogICAgICAgICAicmVzb3VyY2VzL2phdmFz
Y3JpcHQtdGVzdHMvZ2VuZXJhdG9ycy5qcyIsCiAgICAgICAgICJyZXNvdXJjZXMvamF2YXNjcmlw
dC10ZXN0cy9pZi1zdGF0ZW1lbnQuanMiLAorICAgICAgICAicmVzb3VyY2VzL2phdmFzY3JpcHQt
dGVzdHMvaW1wb3J0LmpzIiwKICAgICAgICAgInJlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2xh
YmVsLWJyZWFrLWNvbnRpbnVlLWJsb2NrLmpzIiwKICAgICAgICAgInJlc291cmNlcy9qYXZhc2Ny
aXB0LXRlc3RzL2xvZ2ljLWV4cHJlc3Npb25zLmpzIiwKICAgICAgICAgInJlc291cmNlcy9qYXZh
c2NyaXB0LXRlc3RzL25ldy1leHByZXNzaW9uLmpzIiwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2ltcG9ydC1l
eHBlY3RlZC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9q
YXZhc2NyaXB0LXRlc3RzL2ltcG9ydC1leHBlY3RlZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MGM0ODAzNjZl
YzU2ODM5MjJiN2MyMzg5NTJiN2I4MGZiN2UyNzhkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvaW1w
b3J0LWV4cGVjdGVkLmpzCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0KCIuL0NvY29hLmpzIik7Citp
bXBvcnQoaG9zdCArICIvQ29jb2EuanMiKTsKKworYXN5bmMgZnVuY3Rpb24gbG9hZCgpIHsKKyAg
ICByZXR1cm4gYXdhaXQgaW1wb3J0KCIuL0NhcHB1Y2Npbm8uanMiKTsKK30KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRl
c3RzL2ltcG9ydC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNl
cy9qYXZhc2NyaXB0LXRlc3RzL2ltcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OGM4Njk5YzZmY2Q2YmZi
MDc2NGZjM2U1Mjk0NDg5YjZjMzI5MDNmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvaW1wb3J0Lmpz
CkBAIC0wLDAgKzEsNCBAQAoraW1wb3J0KCIuL0NvY29hLmpzIik7CitpbXBvcnQoaG9zdCArICIv
Q29jb2EuanMiKTsKKworYXN5bmMgZnVuY3Rpb24gbG9hZCgpIHsgcmV0dXJuIGF3YWl0IGltcG9y
dCgiLi9DYXBwdWNjaW5vLmpzIik7IH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL29iamVjdC1hcnJheS1saXRl
cmFsLWV4cGVjdGVkLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3Vy
Y2VzL2phdmFzY3JpcHQtdGVzdHMvb2JqZWN0LWFycmF5LWxpdGVyYWwtZXhwZWN0ZWQuanMKaW5k
ZXggNWEyODliZDgwNGNmN2VmYzFhM2FjOGVmODYyNmY1YmY4OWYzMWQ1Ny4uMGRmZmFjNWMwNTRl
NGQ1MTA2YTU0ZDNhYzk4YzNhZjc1NmIxNmVjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvb2JqZWN0LWFycmF5
LWxpdGVyYWwtZXhwZWN0ZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRp
bmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvb2JqZWN0LWFycmF5LWxpdGVyYWwtZXhwZWN0
ZWQuanMKQEAgLTI5LDYgKzI5LDEzIEBACiAgICAgYzogMywKICAgICBkOiA0CiB9CitvID0gewor
ICAgIGE6IDEsCisgICAgYjogMiwKKyAgICBjOiAzLAorICAgIGQ6IDQsCisgICAgLi4uZQorfQog
CiA7CiBbXTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jl
c291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL29iamVjdC1hcnJheS1saXRlcmFsLmpzIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvb2Jq
ZWN0LWFycmF5LWxpdGVyYWwuanMKaW5kZXggYzA3NTE0YmY4NTRjMGZlNDI4OTEwMWU4ODM3Njhk
MmFhOWI2MDM1Zi4uYTI4ODg4MTM5ZTUwN2Q5YWU3YjIwMDI3NzRlZDFhZDc2ZTY5MWZjNyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFz
Y3JpcHQtdGVzdHMvb2JqZWN0LWFycmF5LWxpdGVyYWwuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvb2JqZWN0LWFycmF5
LWxpdGVyYWwuanMKQEAgLTgsNiArOCw3IEBACiBvPXthOjEsYjoyfQogbz17YToxLGI6MixjOjN9
CiBvPXthOjEsYjoyLGM6MyxkOjR9CitvPXthOjEsYjoyLGM6MyxkOjQsLi4uZX0KIAogOwogW107
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMv
amF2YXNjcmlwdC10ZXN0cy92YXJpYWJsZS1kZWNsYXJhdGlvbi1leHBlY3RlZC5qcyBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3Zh
cmlhYmxlLWRlY2xhcmF0aW9uLWV4cGVjdGVkLmpzCmluZGV4IDM1NWQzZWI2ZmUxM2M0ODcwY2E3
YmUxYjVhYWRkNzRjMjEzYzYzMGMuLjM5ODdmNDQyN2Y2Njg3NDg2MWEwZDJkZmExMDdhOTk5YmM0
NDMwMjEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291
cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3ZhcmlhYmxlLWRlY2xhcmF0aW9uLWV4cGVjdGVkLmpzCisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0
LXRlc3RzL3ZhcmlhYmxlLWRlY2xhcmF0aW9uLWV4cGVjdGVkLmpzCkBAIC01MiwzICs1Miw3IEBA
CiAgICAgfSwKICAgICBjbHViOiBbNCwgNV0KIH07Cit2YXIge3R5cGUsIC4uLnJlc3R9ID0gewor
ICAgIHR5cGU6ICJDb2NvYSIsCisgICAgdGFzdGU6ICJTd2VldCIKK307CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0
cy92YXJpYWJsZS1kZWNsYXJhdGlvbi5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0
aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3ZhcmlhYmxlLWRlY2xhcmF0aW9uLmpzCmlu
ZGV4IDQ3ZmQwMzhjMzcwY2QwZGVlOGFmZmQ1MWNiZmY4MjUyNTZmMjAzNTEuLjQwM2E4YWY3YTEy
MDQ4OTk2ZDViNGI3NTNhM2U4YTBhYzYyYWRmYjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3ZhcmlhYmxlLWRl
Y2xhcmF0aW9uLmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291
cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3ZhcmlhYmxlLWRlY2xhcmF0aW9uLmpzCkBAIC0yMywzICsy
Myw0IEBACiAKIHZhciB7YWxwaGE6YSxiZXRhOntiLGdhbW1hOmN9LGNsdWI6W2QsZV19ID0gbzsK
IHZhciB7YWxwaGE6YSxiZXRhOntiLGdhbW1hOmN9LGNsdWI6W2QsZV19ID0ge2FscGhhOjEsYmV0
YTp7YjoyLGdhbW1hOjN9LGNsdWI6WzQsNV19OwordmFyIHt0eXBlLC4uLnJlc3R9ID0geyB0eXBl
OiAiQ29jb2EiLCB0YXN0ZTogIlN3ZWV0IiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL3V0aWxpdGllcy5qcyBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy91dGlsaXRpZXMuanMKaW5kZXggOTg3MWQ0MGVk
M2MyNTNjMjBhMjY4ODE4ODdmYWQxNzYyZDU4NDI3OS4uOWUwMzY2NjhkZmIwYTI3YjUzOGNhZDc5
MWNiODZiYTIzODJmMTYwNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1h
dHRpbmcvcmVzb3VyY2VzL3V0aWxpdGllcy5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Zm9ybWF0dGluZy9yZXNvdXJjZXMvdXRpbGl0aWVzLmpzCkBAIC0yNSw5ICsyNSw5IEBAIGZ1bmN0
aW9uIHJ1bkZvcm1hdHRpbmdUZXN0KG1vZGUsIHRlc3ROYW1lLCB0ZXN0VVJMKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiLS0tLS0tLS0tLS0iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKHRlc3RUZXh0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCItLS0tLS0tLS0tLSIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkZvcm1hdHRlZCBPdXRwdXQ6ICIg
KyBidWlsZGVyLmZvcm1hdHRlZENvbnRlbnQubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QubG9nKCJGb3JtYXR0ZWQgT3V0cHV0OiAiICsgZm9ybWF0dGVkVGV4
dC5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIi0t
LS0tLS0tLS0tIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZyhi
dWlsZGVyLmZvcm1hdHRlZENvbnRlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5sb2coZm9ybWF0dGVkVGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmxvZygiLS0tLS0tLS0tLS0iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QubG9nKCJFeHBlY3RlZCBPdXRwdXQ6ICIgKyBleHBlY3RlZFRleHQubGVuZ3Ro
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCItLS0tLS0tLS0t
LSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL3BhcnNlLXNjcmlw
dC1zeW50YXgtdHJlZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwv
cGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLWV4cGVjdGVkLnR4dAppbmRleCBlMmU0NDI1MWMzOWZm
OTU2NGMwZDBkOGQzNmU5OTZjNmM2NDc4OThmLi40MTg4ZmRhZTA1ZjczM2JiMGM0N2FhM2IzZDYz
Y2NkYmQ2YTg0YzMxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvcGFy
c2Utc2NyaXB0LXN5bnRheC10cmVlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLWV4cGVjdGVkLnR4dApAQCAtNDEs
NiArNDEsOSBAQCBwYXNzZWQgV2hpbGVTdGF0ZW1lbnQKIHBhc3NlZCBXaXRoU3RhdGVtZW50CiBw
YXNzZWQgWWllbGRFeHByZXNzaW9uCiBwYXNzZWQgQ2xhc3NTdGF0ZW1lbnQsIFN1cGVyLCBNZXRh
UHJvcGVydHkKK3Bhc3NlZCBJbXBvcnQKK3Bhc3NlZCBSZXN0UHJvcGVydHkKK3Bhc3NlZCBTcHJl
YWRQcm9wZXJ0eQogcGFzc2VkIEFzc2lnbm1lbnRQYXR0ZXJuCiBwYXNzZWQgQXJyb3dGdW5jdGlv
bkV4cHJlc3Npb24KIHBhc3NlZCBBc3luYyBGdW5jdGlvbnMKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9tb2RlbC9wYXJzZS1zY3JpcHQtc3ludGF4LXRyZWUuaHRtbCBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9wYXJzZS1zY3JpcHQtc3ludGF4LXRyZWUuaHRtbAppbmRl
eCBjYTExNDRkMjYzMjYwYjVlOTFmOWNhYTViZTU5NDc5Yjc2MzhkMmE3Li4yZGRlYmM2YmQ5M2Y5
MjlmYTQxYmU3ZWQyNDUzMTU1Y2RiOTk2OWNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL21vZGVsL3BhcnNlLXNjcmlwdC1zeW50YXgtdHJlZS5odG1sCkBAIC00OTUs
NiArNDk1LDM4IEBACiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5ib2R5LmJvZHlbMF0u
dmFsdWUuYm9keS5ib2R5WzFdLmV4cHJlc3Npb24ucHJvcGVydHkubmFtZSA9PT0gInRhcmdldCIp
OwogICAgIEluc3BlY3RvclRlc3QubG9nKCJwYXNzZWQgQ2xhc3NTdGF0ZW1lbnQsIFN1cGVyLCBN
ZXRhUHJvcGVydHkiKTsKIAorICAgIG5vZGUgPSBtYWtlTm9kZSgiaW1wb3J0KCcuL0NvY29hLmpz
JykiLCB0cnVlKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLnR5cGUgPT09IFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNhbGxFeHByZXNzaW9uKTsKKyAgICBJ
bnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmNhbGxlZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JbXBvcnQpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
KG5vZGUuYXJndW1lbnRzKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmFyZ3VtZW50
cy5sZW5ndGggPT09IDEpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYXJndW1lbnRz
WzBdLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkxpdGVy
YWwpOworICAgIEluc3BlY3RvclRlc3QubG9nKCJwYXNzZWQgSW1wb3J0Iik7CisKKyAgICBub2Rl
ID0gbWFrZU5vZGUoImxldCB7IC4uLnJlc3QgfSA9IHsgeDogMSwgeTogMCB9IiwgZmFsc2UpOwor
ICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgSW5zcGVjdG9y
VGVzdC5hc3NlcnQobm9kZS5raW5kID09PSAibGV0Iik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3Nl
cnQobm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFz
c2VydChub2RlLmRlY2xhcmF0aW9uc1swXS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3IpOworICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0KG5vZGUuZGVjbGFyYXRpb25zWzBdLmlkLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLk9iamVjdFBhdHRlcm4pOworICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0KG5vZGUuZGVjbGFyYXRpb25zWzBdLmlkLnByb3BlcnRpZXMubGVuZ3RoID09PSAxKTsK
KyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmRlY2xhcmF0aW9uc1swXS5pZC5wcm9wZXJ0
aWVzWzBdLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJl
c3RQcm9wZXJ0eSk7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnNb
MF0uaWQucHJvcGVydGllc1swXS5hcmd1bWVudC50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2Vy
dChub2RlLmRlY2xhcmF0aW9uc1swXS5pZC5wcm9wZXJ0aWVzWzBdLmFyZ3VtZW50Lm5hbWUgPT09
ICJyZXN0Iik7CisgICAgSW5zcGVjdG9yVGVzdC5sb2coInBhc3NlZCBSZXN0UHJvcGVydHkiKTsK
KworICAgIG5vZGUgPSBtYWtlTm9kZSgibGV0IG4gPSB7IC4uLnNwcmVhZCB9IiwgZmFsc2UpOwor
ICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgSW5zcGVjdG9y
VGVzdC5hc3NlcnQobm9kZS5raW5kID09PSAibGV0Iik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3Nl
cnQobm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFz
c2VydChub2RlLmRlY2xhcmF0aW9uc1swXS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3IpOworICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0KG5vZGUuZGVjbGFyYXRpb25zWzBdLmluaXQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuT2JqZWN0RXhwcmVzc2lvbik7CisgICAgSW5zcGVjdG9y
VGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaW5pdC5wcm9wZXJ0aWVzLmxlbmd0aCA9
PT0gMSk7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaW5p
dC5wcm9wZXJ0aWVzWzBdLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLlNwcmVhZFByb3BlcnR5KTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmRl
Y2xhcmF0aW9uc1swXS5pbml0LnByb3BlcnRpZXNbMF0uYXJndW1lbnQudHlwZSA9PT0gV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRpZmllcik7CisgICAgSW5zcGVj
dG9yVGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaW5pdC5wcm9wZXJ0aWVzWzBdLmFy
Z3VtZW50Lm5hbWUgPT09ICJzcHJlYWQiKTsKKyAgICBJbnNwZWN0b3JUZXN0LmxvZygicGFzc2Vk
IFNwcmVhZFByb3BlcnR5Iik7CisKICAgICBub2RlID0gbWFrZU5vZGUoImxldCBbeD0yMF0gPSBb
XTsiLCBmYWxzZSk7CiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS50eXBlID09PSBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0aW9uKTsK
ICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmtpbmQgPT09ICJsZXQiKTsK
</data>
<flag name="review"
          id="322256"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>