<?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>26567</bug_id>
          
          <creation_ts>2009-06-19 19:42:11 -0700</creation_ts>
          <short_desc>[V8] Upstream V8 bindings code generator.</short_desc>
          <delta_ts>2009-06-22 21:36:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>eric</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>127099</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-19 19:42:11 -0700</bug_when>
    <thetext>Whoop, there it is.

Basically, I haven&apos;t gone making any style changes to CodeGeneratorV8.pm, trying to land this as-is for now. It&apos;s very hard to make changes on both sides of the stream.

I added ParseParents method (and $parentsOnly param) to existing code, which is not used by JSC. In V8, it is used to find out whether the interface inherits from Node, which is a long story ...

Please don&apos;t hurt me. I don&apos;t want to do any more Perl. Ever again.

Actually, I have lots of work slated in Perl, trying to shave some hair off this beast and bring it as close to JSC bindings generator as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127100</commentid>
    <comment_count>1</comment_count>
      <attachid>31586</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-19 19:44:10 -0700</bug_when>
    <thetext>Created attachment 31586
Upstream V8 code generator, v1.

 WebCore/ChangeLog                           |   13 +
 WebCore/bindings/scripts/CodeGenerator.pm   |   31 +
 WebCore/bindings/scripts/CodeGeneratorV8.pm | 2206 +++++++++++++++++++++++++++
 WebCore/bindings/scripts/IDLParser.pm       |    4 +
 4 files changed, 2254 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127106</commentid>
    <comment_count>2</comment_count>
      <attachid>31586</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-06-19 22:33:39 -0700</bug_when>
    <thetext>Comment on attachment 31586
Upstream V8 code generator, v1.

r-.  There a couple of style issues that need to be taken care of such as 2 space indentation instead of 4 and commented out code.  I would also like an explanation as to why the parent traversal stuff is necessary for v8 and not JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127116</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-20 01:06:44 -0700</bug_when>
    <thetext>Yay!  Finally! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127157</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-06-20 14:12:04 -0700</bug_when>
    <thetext>It would also be useful to have a rundown of all the v8 specific extended attributes and why they are necessary and where they create divergence from the JSC bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127183</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-20 19:46:41 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; It would also be useful to have a rundown of all the v8 specific extended
&gt; attributes and why they are necessary and where they create divergence from the
&gt; JSC bindings.

Will do that and reconcile them. I suspect V8 bindings do some unholy things using attributes not for purposes intended. At this point, I know that [Replaceable] is used that way, but not much else. Is that ok if this patch doesn&apos;t include this documentation? I&apos;ll put a FIXME and start a bug on that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127444</commentid>
    <comment_count>6</comment_count>
      <attachid>31672</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-22 14:21:47 -0700</bug_when>
    <thetext>Created attachment 31672
Upstream V8 code generator, v2.

 WebCore/ChangeLog                           |   16 +
 WebCore/bindings/scripts/CodeGenerator.pm   |   35 +
 WebCore/bindings/scripts/CodeGeneratorV8.pm | 2192 +++++++++++++++++++++++++++
 WebCore/bindings/scripts/IDLParser.pm       |    4 +
 4 files changed, 2247 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127446</commentid>
    <comment_count>7</comment_count>
      <attachid>31674</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-22 14:26:12 -0700</bug_when>
    <thetext>Created attachment 31674
Upstream V8 code generator, v2.1.

 WebCore/ChangeLog                           |   16 +
 WebCore/bindings/scripts/CodeGenerator.pm   |   35 +
 WebCore/bindings/scripts/CodeGeneratorV8.pm | 2189 +++++++++++++++++++++++++++
 WebCore/bindings/scripts/IDLParser.pm       |    4 +
 4 files changed, 2244 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127447</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-22 14:26:45 -0700</bug_when>
    <thetext>Styling issues addressed, comment about ParseParents added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127518</commentid>
    <comment_count>9</comment_count>
      <attachid>31674</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-06-22 17:36:02 -0700</bug_when>
    <thetext>Comment on attachment 31674
Upstream V8 code generator, v2.1.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127567</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-22 21:36:42 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/44972.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31586</attachid>
            <date>2009-06-19 19:44:10 -0700</date>
            <delta_ts>2009-06-22 14:22:18 -0700</delta_ts>
            <desc>Upstream V8 code generator, v1.</desc>
            <filename>Upstream-V8-code-generator-v1..patch</filename>
            <type>text/plain</type>
            <size>76448</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ODNlYThjMTRjN2U1NGRkOTlmZTI0NDNlZTZiYTQ4ZjI4YmU4ZjQ3NgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NTRlZTRiLi4xODhlYzEy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2IEBACisyMDA5LTA2LTE5ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NTY3CisgICAg
ICAgIFVwc3RyZWFtIFY4IGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtOiBBZGRlZCBwYXJlbnQgdHJhdmVyc2FsIHN1
YiwgbmVlZGVkCisgICAgICAgICAgICBieSBWOCBiaW5kaW5ncy4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbTogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9JRExQYXJzZXIucG06IE1vZGlmaWVkIHRvIGFsbG93IGxpbWl0ZWQgcGFyc2luZyBm
b3IKKyAgICAgICAgICAgIHBhcmVudCB0cmF2ZXJzYWwgY2FzZXMuCisKIDIwMDktMDYtMTkgIEJy
aWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFN0ZXZlIEZhbGtlbmJ1cmcuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvci5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yLnBtCmluZGV4IGQyMTdjMzcuLmVlMDlhMGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yLnBtCkBAIC0xMTYsNiArMTE2LDM3IEBAIHN1YiBQcm9jZXNzRG9jdW1l
bnQKICAgICAkY29kZUdlbmVyYXRvci0+ZmluaXNoKCk7CiB9CiAKK3N1YiBGaW5kUGFyZW50c1Jl
Y3Vyc2l2ZWx5Cit7CisgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgbXkgJGRhdGFOb2RlID0gc2hp
ZnQ7CisgIG15IEBwYXJlbnRzID0gKCRkYXRhTm9kZS0+bmFtZSk7CisgIGZvcmVhY2ggKEB7JGRh
dGFOb2RlLT5wYXJlbnRzfSkgeworICAgIG15ICRpbnRlcmZhY2UgPSAkb2JqZWN0LT5TdHJpcE1v
ZHVsZSgkXyk7CisKKyAgICAkZW5kQ29uZGl0aW9uID0gMDsKKyAgICAkZm91bmRGaWxlbmFtZSA9
ICIiOworICAgIGZvcmVhY2ggKEB7JHVzZURpcmVjdG9yaWVzfSkgeworICAgICAgJG9iamVjdC0+
U2NhbkRpcmVjdG9yeSgiJGludGVyZmFjZS5pZGwiLCAkXywgJF8sIDApIGlmICgkZm91bmRGaWxl
bmFtZSBlcSAiIik7CisgICAgfQorCisgICAgaWYgKCRmb3VuZEZpbGVuYW1lIG5lICIiKSB7Cisg
ICAgICBwcmludCAiICB8ICB8PiAgUGFyc2luZyBwYXJlbnQgSURMIFwiJGZvdW5kRmlsZW5hbWVc
IiBmb3IgaW50ZXJmYWNlIFwiJGludGVyZmFjZVwiXG4iIGlmICR2ZXJib3NlOworCisgICAgICAj
IFN0ZXAgIzI6IFBhcnNlIHRoZSBmb3VuZCBJREwgZmlsZSAoaW4gcXVpZXQgbW9kZSkuCisgICAg
ICBteSAkcGFyc2VyID0gSURMUGFyc2VyLT5uZXcoMSk7CisgICAgICBteSAkZG9jdW1lbnQgPSAk
cGFyc2VyLT5QYXJzZSgkZm91bmRGaWxlbmFtZSwgJGRlZmluZXMsICRwcmVwcm9jZXNzb3IsIDEp
OworCisgICAgICBmb3JlYWNoIG15ICRjbGFzcyAoQHskZG9jdW1lbnQtPmNsYXNzZXN9KSB7Cisg
ICAgICAgIEBwYXJlbnRzID0gKEBwYXJlbnRzLCBGaW5kUGFyZW50c1JlY3Vyc2l2ZWx5KCRvYmpl
Y3QsICRjbGFzcykpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBkaWUoIkNvdWxkIE5P
VCBmaW5kIHNwZWNpZmllZCBwYXJlbnQgaW50ZXJmYWNlIFwiJGludGVyZmFjZVwiIVxuIikKKyAg
ICB9CisgIH0KKyAgcmV0dXJuIEBwYXJlbnRzOworfQorCiBzdWIgQWRkTWV0aG9kc0NvbnN0YW50
c0FuZEF0dHJpYnV0ZXNGcm9tUGFyZW50Q2xhc3NlcwogewogICAgICMgRm9yIHRoZSBwYXNzZWQg
aW50ZXJmYWNlLCByZWN1cnNpdmVseSBwYXJzZSBhbGwgcGFyZW50CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mZTY2MThhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMCwwICsxLDIyMDYgQEAKKworIyBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisj
IENvcHlyaWdodCAoQykgMjAwNiBBbmRlcnMgQ2FybHNzb24gPGFuZGVyc2NhQG1hYy5jb20+Cisj
IENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4K
KyMgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+
CisjIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorIyBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBwcm9qZWN0CisjCisjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMK
KyMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorIyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKworcGFj
a2FnZSBDb2RlR2VuZXJhdG9yVjg7CisKK3VzZSBGaWxlOjpzdGF0OworCitteSAkbW9kdWxlID0g
IiI7CitteSAkb3V0cHV0RGlyID0gIiI7CisKK215IEBoZWFkZXJDb250ZW50ID0gKCk7CitteSBA
aW1wbENvbnRlbnRIZWFkZXIgPSAoKTsKK215IEBpbXBsRml4ZWRIZWFkZXIgPSAoKTsKK215IEBp
bXBsQ29udGVudCA9ICgpOworbXkgQGltcGxDb250ZW50RGVjbHMgPSAoKTsKK215ICVpbXBsSW5j
bHVkZXMgPSAoKTsKKworbXkgQGFsbFBhcmVudHMgPSAoKTsKKworIyBEZWZhdWx0IC5oIHRlbXBs
YXRlCitteSAkaGVhZGVyVGVtcGxhdGUgPSA8PCAiRU9GIjsKKy8qCisgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLwor
RU9GCisKKyMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgorc3ViIG5ldworeworICAgIG15ICRvYmplY3Qg
PSBzaGlmdDsKKyAgICBteSAkcmVmZXJlbmNlID0geyB9OworCisgICAgJGNvZGVHZW5lcmF0b3Ig
PSBzaGlmdDsKKyAgICAkb3V0cHV0RGlyID0gc2hpZnQ7CisKKyAgICBibGVzcygkcmVmZXJlbmNl
LCAkb2JqZWN0KTsKKyAgICByZXR1cm4gJHJlZmVyZW5jZTsKK30KKworc3ViIGZpbmlzaAorewor
ICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKworICAgICMgQ29tbWl0IGNoYW5nZXMhCisgICAgJG9i
amVjdC0+V3JpdGVEYXRhKCk7Cit9CisKK3N1YiBsZWZ0U2hpZnQoJCQpIHsKKyAgICBteSAoJHZh
bHVlLCAkZGlzdGFuY2UpID0gQF87CisgICAgcmV0dXJuICgoJHZhbHVlIDw8ICRkaXN0YW5jZSkg
JiAweEZGRkZGRkZGKTsKK30KKworIyBVcHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciwgd2hpbGUg
cmVzcGVjdGluZyBXZWJLaXQgc3R5bGUgZ3VpZGVsaW5lcy4KKyMgRS5nLiwgeG1sRW5jb2Rpbmcg
YmVjb21lcyBYTUxFbmNvZGluZywgYnV0IHhtbGxsYW5nIGJlY29tZXMgWG1sbGFuZy4KK3N1YiBX
S191Y2ZpcnN0Cit7CisgICAgbXkgJHBhcmFtID0gc2hpZnQ7CisgICAgbXkgJHJldCA9IHVjZmly
c3QoJHBhcmFtKTsKKyAgICAkcmV0ID1+IHMvWG1sL1hNTC8gaWYgJHJldCA9fiAvXlhtbFteYS16
XS87CisgICAgcmV0dXJuICRyZXQ7Cit9CisKKyMgTG93ZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXIg
d2hpbGUgcmVzcGVjdGluZyBXZWJLaXQgc3R5bGUgZ3VpZGVsaW5lcy4KKyMgVVJMIGJlY29tZXMg
dXJsLCBidXQgU2V0VVJMIGJlY29tZXMgc2V0VVJMLgorc3ViIFdLX2xjZmlyc3QKK3sKKyAgICBt
eSAkcGFyYW0gPSBzaGlmdDsKKyAgICBteSAkcmV0ID0gbGNmaXJzdCgkcGFyYW0pOworICAgICRy
ZXQgPX4gcy91UkwvdXJsLzsKKyAgICByZXR1cm4gJHJldDsKK30KKworIyBXb3JrYXJvdW5kIGZv
ciBWOCBiaW5kaW5ncyBkaWZmZXJlbmNlIHdoZXJlIFJHQkNvbG9yIGlzIG5vdCBhIFBPRCB0eXBl
Lgorc3ViIElzUG9kVHlwZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuIDAg
aWYgJHR5cGUgZXEgIlJHQkNvbG9yIjsKKyAgICByZXR1cm4gJGNvZGVHZW5lcmF0b3ItPklzUG9k
VHlwZSgkdHlwZSk7Cit9CisKKyMgUGFyYW1zOiAnZG9tQ2xhc3MnIHN0cnVjdAorc3ViIEdlbmVy
YXRlSW50ZXJmYWNlCit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9k
ZSA9IHNoaWZ0OworICAgIG15ICRkZWZpbmVzID0gc2hpZnQ7CisKKyAgICAjIFN0YXJ0IGFjdHVh
bCBnZW5lcmF0aW9uCisgICAgJG9iamVjdC0+R2VuZXJhdGVIZWFkZXIoJGRhdGFOb2RlKTsKKyAg
ICAkb2JqZWN0LT5HZW5lcmF0ZUltcGxlbWVudGF0aW9uKCRkYXRhTm9kZSk7CisKKyAgICBteSAk
bmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKworICAgICMgT3BlbiBmaWxlcyBmb3Igd3JpdGluZwor
ICAgIG15ICRoZWFkZXJGaWxlTmFtZSA9ICIkb3V0cHV0RGlyL1Y4JG5hbWUuaCI7CisgICAgbXkg
JGltcGxGaWxlTmFtZSA9ICIkb3V0cHV0RGlyL1Y4JG5hbWUuY3BwIjsKKworICAgIG9wZW4oJElN
UEwsICI+JGltcGxGaWxlTmFtZSIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRpbXBsRmls
ZU5hbWUiOworICAgIG9wZW4oJEhFQURFUiwgIj4kaGVhZGVyRmlsZU5hbWUiKSB8fCBkaWUgIkNv
dWxkbid0IG9wZW4gZmlsZSAkaGVhZGVyRmlsZU5hbWUiOworfQorCisjIFBhcmFtczogJ2lkbERv
Y3VtZW50JyBzdHJ1Y3QKK3N1YiBHZW5lcmF0ZU1vZHVsZQoreworICAgIG15ICRvYmplY3QgPSBz
aGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgICRtb2R1bGUgPSAkZGF0YU5v
ZGUtPm1vZHVsZTsKK30KKworc3ViIEdldExlZ2FjeUhlYWRlckluY2x1ZGVzCit7CisgICAgbXkg
JGxlZ2FjeVBhcmVudCA9IHNoaWZ0OworCisgICAgZGllICJEb24ndCBrbm93IHdoYXQgaGVhZGVy
cyB0byBpbmNsdWRlIGZvciBtb2R1bGUgJG1vZHVsZSI7Cit9CisKK3N1YiBBdm9pZEluY2x1c2lv
bk9mVHlwZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7CisKKyAgICAjIFNwZWNpYWwgY2FzZTog
U1ZHUmVjdC5oIC8gU1ZHUG9pbnQuaCAvIFNWR051bWJlci5oIC8gU1ZHTWF0cml4LmggZG8gbm90
IGV4aXN0LgorICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTVkdSZWN0IiBvciAkdHlwZSBlcSAi
U1ZHUG9pbnQiIG9yICR0eXBlIGVxICJTVkdOdW1iZXIiIG9yICR0eXBlIGVxICJTVkdNYXRyaXgi
OworICAgIHJldHVybiAwOworfQorCitzdWIgVXNlc01hbnVhbFRvSlNJbXBsZW1lbnRhdGlvbgor
eworICAgIG15ICR0eXBlID0gc2hpZnQ7CisKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZH
UGF0aFNlZyI7CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBBZGRJbmNsdWRlc0ZvclR5cGUKK3sK
KyAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZShzaGlmdCk7CisKKyAg
ICAjIFdoZW4gd2UncmUgZmluaXNoZWQgd2l0aCB0aGUgb25lLWZpbGUtcGVyLWNsYXNzCisgICAg
IyByZW9yZ2FuaXphdGlvbiwgd2Ugd29uJ3QgbmVlZCB0aGVzZSBzcGVjaWFsIGNhc2VzLgorICAg
IGlmICgkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSBvciBBdm9pZEluY2x1
c2lvbk9mVHlwZSgkdHlwZSkKKyMgamhhYXM6IHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkg
aGFybSBpbiBsZWF2aW5nIHRoZXNlIGluCisjICAgICAgICBvciAkdHlwZSBlcSAiRE9NU3RyaW5n
IiBvciAkdHlwZSBlcSAiRE9NT2JqZWN0IiBvciAkdHlwZSBlcSAiUkdCQ29sb3IiIG9yICR0eXBl
IGVxICJSZWN0IikgeworICAgICAgKSB7CisgICAgfSBlbHNpZiAoJHR5cGUgPX4gL1NWR1BhdGhT
ZWcvKSB7CisgICAgICAgICRqb2luZWROYW1lID0gJHR5cGU7CisgICAgICAgICRqb2luZWROYW1l
ID1+IHMvQWJzfFJlbC8vOworICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2pvaW5lZE5hbWV9Lmgi
fSA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1l
IG5hbWVkIGZpbGUKKyAgICAgICAgJGltcGxJbmNsdWRlc3tHZXRJbXBsZW1lbnRhdGlvbkZpbGVO
YW1lKCR7dHlwZX0pfSA9IDE7CisgICAgfQorCisgICAgIyBhZGRpdGlvbmFsIGluY2x1ZGVzICh0
aGluZ3MgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGJpbmRpbmdzIGJ1dCBub3QgdGhlIGhlYWRlcikK
KworICAgIGlmICgkdHlwZSBlcSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIikgeworICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJDYW52YXNHcmFkaWVudC5oIn0gPSAxOworICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJDYW52YXNQYXR0ZXJuLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkNh
bnZhc1N0eWxlLmgifSA9IDE7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJDYW52YXNHcmFk
aWVudCIgb3IgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siUGxhdGZvcm1TdHJpbmcuaCJ9ID0gMTsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEg
IkNTU1N0eWxlRGVjbGFyYXRpb24iKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uLmgifSA9IDE7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJQ
bHVnaW4iIG9yICR0eXBlIGVxICJQbHVnaW5BcnJheSIgb3IgJHR5cGUgZXEgIk1pbWVUeXBlQXJy
YXkiKSB7CisgICAgICAgICMgU28gd2UgY2FuIGdldCBTdHJpbmcgLT4gQXRvbWljU3RyaW5nIGNv
bnZlcnNpb24gZm9yIG5hbWVkSXRlbSgpLgorICAgICAgICAkaW1wbEluY2x1ZGVzeyJBdG9taWNT
dHJpbmcuaCJ9ID0gMTsKKyAgICB9Cit9CisKK3N1YiBBZGRJbmNsdWRlc0ZvclNWR0FuaW1hdGVk
VHlwZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgJHR5cGUgPX4gcy9TVkdBbmltYXRl
ZC8vOworCisgICAgaWYgKCR0eXBlIGVxICJQb2ludCIgb3IgJHR5cGUgZXEgIlJlY3QiKSB7Cisg
ICAgICAgICRpbXBsSW5jbHVkZXN7IkZsb2F0JHR5cGUuaCJ9ID0gMTsKKyAgICB9IGVsc2lmICgk
dHlwZSBlcSAiU3RyaW5nIikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJQbGF0Zm9ybVN0cmlu
Zy5oIn0gPSAxOworICAgIH0KKworICAgICRpbXBsSW5jbHVkZXN7IlNWR0FuaW1hdGVkVGVtcGxh
dGUuaCJ9ID0gMTsKK30KKworc3ViIEFkZENsYXNzRm9yd2FyZElmTmVlZGVkCit7CisgICAgbXkg
JGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKworICAgICMgU1ZHQW5pbWF0ZWRMZW5ndGgvTnVtYmVy
L2V0Yy4uIGFyZSB0eXBlZGVmcyB0byBTVkdBbmltdGF0ZWRUZW1wbGF0ZSwgc28gZG9uJ3QgdXNl
IGNsYXNzIGZvcndhcmRzIGZvciB0aGVtIQorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFz
cyAkaW1wbENsYXNzTmFtZTtcblxuIikgdW5sZXNzICRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1h
dGVkVHlwZSgkaW1wbENsYXNzTmFtZSk7Cit9CisKK3N1YiBHZXRJbXBsZW1lbnRhdGlvbkZpbGVO
YW1lCit7CisgICAgbXkgJGlmYWNlID0gc2hpZnQ7CisgICAgcmV0dXJuICJIVE1MQ29sbGVjdGlv
bi5oIiBpZiAkaWZhY2UgZXEgIlVuZGV0ZWN0YWJsZUhUTUxDb2xsZWN0aW9uIjsKKyAgICByZXR1
cm4gIkV2ZW50LmgiIGlmICRpZmFjZSBlcSAiRE9NVGltZVN0YW1wIjsKKyAgICByZXR1cm4gIk5h
bWVkQXR0ck1hcC5oIiBpZiAkaWZhY2UgZXEgIk5hbWVkTm9kZU1hcCI7CisgICAgcmV0dXJuICJO
YW1lTm9kZUxpc3QuaCIgaWYgJGlmYWNlIGVxICJOb2RlTGlzdCI7CisgICAgcmV0dXJuICJYTUxI
dHRwUmVxdWVzdC5oIiBpZiAkaWZhY2UgZXEgIlhNTEh0dHBSZXF1ZXN0IjsKKworICAgIHJldHVy
biAiJHtpZmFjZX0uaCI7Cit9CisKK3N1YiBHZW5lcmF0ZUhlYWRlcgoreworICAgIG15ICRvYmpl
Y3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15ICRpbnRlcmZh
Y2VOYW1lID0gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRjbGFzc05hbWUgPSAiVjgkaW50ZXJm
YWNlTmFtZSI7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSAkaW50ZXJmYWNlTmFtZTsKKworICAg
ICMgQ29weSBjb250ZW50cyBvZiBwYXJlbnQgY2xhc3NlcyBleGNlcHQgdGhlIGZpcnN0IHBhcmVu
dCBvciBpZiBpdCBpcworICAgICMgRXZlbnRUYXJnZXQuCisgICAgJGNvZGVHZW5lcmF0b3ItPkFk
ZE1ldGhvZHNDb25zdGFudHNBbmRBdHRyaWJ1dGVzRnJvbVBhcmVudENsYXNzZXMoJGRhdGFOb2Rl
KTsKKworICAgIG15ICRoYXNMZWdhY3lQYXJlbnQgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJMZWdhY3lQYXJlbnQifTsKKyAgICBteSAkY29uZGl0aW9uYWwgPSAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9OworCisgICAgIyAtIEFkZCBkZWZh
dWx0IGhlYWRlciB0ZW1wbGF0ZQorICAgIEBoZWFkZXJDb250ZW50ID0gc3BsaXQoIlxyIiwgJGhl
YWRlclRlbXBsYXRlKTsKKworICAgIG15ICRjb25kaXRpb25hbFN0cmluZzsKKyAgICBpZiAoJGNv
bmRpdGlvbmFsKSB7CisgICAgICAgICRjb25kaXRpb25hbFN0cmluZyA9ICJFTkFCTEUoIiAuIGpv
aW4oIikgJiYgRU5BQkxFKCIsIHNwbGl0KC8mLywgJGNvbmRpdGlvbmFsKSkgLiAiKSI7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4i
KTsKKyAgICB9CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4jaWZuZGVmICRjbGFzc05h
bWUiIC4gIl9IIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuI2RlZmluZSAkY2xhc3NO
YW1lIiAuICJfSFxuXG4iKTsKKworICAgICMgR2V0IGNvcnJlY3QgcGFzcy9zdG9yZSB0eXBlcyBy
ZXNwZWN0aW5nIFBPRFR5cGUgZmxhZworICAgIG15ICRwb2RUeXBlID0gJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUE9EVHlwZSJ9OworICAgIG15ICRwYXNzVHlwZSA9ICRwb2RUeXBl
ID8gIkpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+KiIgOiAiJGltcGxDbGFzc05hbWUqIjsK
KworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSBcIiRwb2RUeXBlLmhcIlxuIikg
aWYgJHBvZFR5cGUgYW5kICgkcG9kVHlwZSBuZSAiZG91YmxlIiBhbmQgJHBvZFR5cGUgbmUgImZs
b2F0IiBhbmQgJHBvZFR5cGUgbmUgIlJHQkEzMiIpOworCisgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiNpbmNsdWRlIDx2OC5oPlxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPlxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNs
dWRlIFwiU3RyaW5nSGFzaC5oXCJcbiIpOworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxu
bmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xh
c3MgVjhDbGFzc0luZGV4O1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xhc3Mg
JGNsYXNzTmFtZSB7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisKKyBw
dWJsaWM6CisgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
YWx1ZSk7CisgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0
UmF3VGVtcGxhdGUoKTsKK0VORAorCisgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJET01XaW5k
b3ciKSB7CisgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisgIHN0YXRpYyB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0VGVtcGxhdGU+IEdldFNoYWRvd09iamVjdFRlbXBsYXRlKCk7
CitFTkQKKyAgICB9CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisKKyBwcml2
YXRlOgorICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRl
bXBsYXRlKCk7CisKKyAgZnJpZW5kIGNsYXNzIFY4Q2xhc3NJbmRleDsKK307CisKK0VORAorCisg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn1cblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiNlbmRpZiAvLyAkY2xhc3NOYW1lIiAuICJfSFxuIik7CisKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRp
b25hbDsKK30KKworCitzdWIgR2VuZXJhdGVTZXRET01FeGNlcHRpb24KK3sKKyAgbXkgJGluZGVu
dCA9IHNoaWZ0OworICBteSAkcmVzdWx0ID0gIiI7CisKKyAgJHJlc3VsdCAuPSAkaW5kZW50IC4g
ImlmIChlYykge1xuIjsKKyAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIiAgICBWOFByb3h5OjpTZXRE
T01FeGNlcHRpb24oZWMpO1xuIjsKKyAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIiAgICByZXR1cm4g
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG4iOworICAkcmVzdWx0IC49ICRpbmRlbnQgLiAifVxu
IjsKKworICByZXR1cm4gJHJlc3VsdDsKK30KKworc3ViIElzTm9kZVN1YlR5cGUKK3sKKyAgbXkg
JGRhdGFOb2RlID0gc2hpZnQ7CisgIHJldHVybiAxIGlmICgkZGF0YU5vZGUtPm5hbWUgZXEgIk5v
ZGUiKTsKKyAgZm9yZWFjaCAoQGFsbFBhcmVudHMpIHsKKyAgICBteSAkcGFyZW50ID0gJGNvZGVH
ZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRfKTsKKyAgICByZXR1cm4gMSBpZiAkcGFyZW50IGVxICJO
b2RlIjsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3ViIEhvbGRlclRvTmF0aXZlCit7CisgIG15
ICRkYXRhTm9kZSA9IHNoaWZ0OworICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworICBteSAk
Y2xhc3NJbmRleCA9IHNoaWZ0OworCisgIGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsK
KyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CisgICAgJGltcGxDbGFzc05hbWUq
IGltcCA9IFY4UHJveHk6OkRPTVdyYXBwZXJUb05vZGU8JGltcGxDbGFzc05hbWU+KGhvbGRlcik7
CitFTkQKKworICB9IGVsc2UgeworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsK
KyAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8JGltcGxD
bGFzc05hbWU+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGhvbGRlcik7CitFTkQKKworICB9
Cit9CisKK3N1YiBHZW5lcmF0ZURvbWFpblNhZmVGdW5jdGlvbkdldHRlcgoreworICBteSAkZnVu
Y3Rpb24gPSBzaGlmdDsKKyAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgIG15ICRjbGFzc0luZGV4
ID0gc2hpZnQ7CisgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CisKKyAgbXkgJGNsYXNzTmFt
ZSA9ICJWOCIgLiAkZGF0YU5vZGUtPm5hbWU7CisgIG15ICRmdW5jTmFtZSA9ICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5uYW1lOworCisgIG15ICRzaWduYXR1cmUgPSAidjg6OlNpZ25hdHVyZTo6TmV3
KCIgLiAkY2xhc3NOYW1lIC4gIjo6R2V0UmF3VGVtcGxhdGUoKSkiOworICBpZiAoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOERvTm90Q2hlY2tTaWduYXR1cmUi
fSkgeworICAgICRzaWduYXR1cmUgPSAidjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+KCkiOworICB9
CisKKyAgbXkgJG5ld1RlbXBsYXRlU3RyaW5nID0gR2VuZXJhdGVOZXdGdW5jdGlvblRlbXBsYXRl
KCRmdW5jdGlvbiwgJGRhdGFOb2RlLCAkc2lnbmF0dXJlKTsKKworICAkaW1wbEluY2x1ZGVzeyJ2
OF9wcm94eS5oIn0gPSAxOworCisgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke2Z1bmNOYW1lfUF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pIHsKKyAg
ICBJTkNfU1RBVFMoXCJET00uJGltcGxDbGFzc05hbWUuJGZ1bmNOYW1lLl9nZXRcIik7CisgICAg
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRlX3RlbXBs
YXRlID0KKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXco
JG5ld1RlbXBsYXRlU3RyaW5nKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9
IFY4UHJveHk6Okxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgaW5m
by5UaGlzKCkpOworICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSB7CisgICAgICAvLyBjYW4gb25s
eSByZWFjaCBoZXJlIGJ5ICdvYmplY3QuX19wcm90b19fLmZ1bmMnLCBhbmQgaXQgc2hvdWxkIHBh
c3NlZAorICAgICAgLy8gZG9tYWluIHNlY3VyaXR5IGNoZWNrIGFscmVhZHkKKworICAgICAgcmV0
dXJuIHByaXZhdGVfdGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CisgICAgfQorRU5ECisKKyAgSG9s
ZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOworCisg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICBpZiAoIVY4UHJveHk6OkNhbkFj
Y2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgZmFsc2UpKSB7CisgICAgICBzdGF0aWMgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJlZF90ZW1wbGF0ZSA9CisgICAgICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KCRuZXdUZW1wbGF0ZVN0cmlu
Zyk7CisgICAgICByZXR1cm4gc2hhcmVkX3RlbXBsYXRlLT5HZXRGdW5jdGlvbigpOworCisgICAg
fSBlbHNlIHsKKyAgICAgIHJldHVybiBwcml2YXRlX3RlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwor
ICAgIH0KKyAgfQorCitFTkQKK30KKworc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JHZXR0ZXIKK3sK
KyAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKyAgbXkgJGNsYXNzSW5kZXggPSBzaGlmdDsK
KworICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CisgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gJHtpbXBsQ2xhc3NOYW1lfUNvbnN0cnVjdG9yR2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKSB7CisgICAgSU5D
X1NUQVRTKFwiRE9NLiRpbXBsQ2xhc3NOYW1lLmNvbnN0cnVjdG9ycy5fZ2V0XCIpOworICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBkYXRhID0gaW5mby5EYXRhKCk7CisgICAgQVNTRVJUKGRhdGEt
PklzTnVtYmVyKCkpOworICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhD
bGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSk7CitFTkQKKworICBpZiAoJGNs
YXNzSW5kZXggZXEgIkRPTVdJTkRPVyIpIHsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8
PEVORCk7CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxE
T01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZvLkhvbGRlcigpKTsKKyAgICBG
cmFtZSogZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAv
LyBHZXQgdGhlIHByb3h5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIERPTVdpbmRvdyBpZiBwb3NzaWJs
ZSB0bworICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGlz
IGNvbnN0cnVjdGVkIGluIHRoZQorICAgICAgLy8gY29udGV4dCBvZiB0aGUgRE9NV2luZG93IGFu
ZCBub3QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNhbGxlci4KKyAgICAgIHJldHVybiBWOFByb3h5
OjpyZXRyaWV2ZShmcmFtZSktPkdldENvbnN0cnVjdG9yKHR5cGUpOworICAgIH0KK0VORAorICB9
CisKKyAgaWYgKCRjbGFzc0luZGV4IGVxICJXT1JLRVJDT05URVhUIikgeworICAgICRpbXBsSW5j
bHVkZXN7IldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIn0gPSAxOworICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICByZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5OjpyZXRyaWV2ZSgpLT5HZXRDb25zdHJ1Y3Rvcih0eXBlKTsKK0VORAorICB9IGVsc2Ug
eworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsiKTsKKyAgfQorCisgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKworICB9CisK
K0VORAorfQorCitzdWIgR2VuZXJhdGVOb3JtYWxBdHRyR2V0dGVyCit7CisgIG15ICRhdHRyaWJ1
dGUgPSBzaGlmdDsKKyAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgIG15ICRjbGFzc0luZGV4ID0g
c2hpZnQ7CisgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CisKKyAgbXkgJGF0dHJFeHQgPSAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlczsKKworICBteSAkYXR0ck5h
bWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICRpbXBsSW5jbHVkZXN7InY4X3By
b3h5LmgifSA9IDE7CisKKyAgbXkgJGF0dHJUeXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9k
dWxlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CisgIG15ICRhdHRySXNQb2RUeXBlID0g
SXNQb2RUeXBlKCRhdHRyVHlwZSk7CisKKyAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBl
RnJvbVNpZ25hdHVyZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDApOworICBteSAkaXNQb2RUeXBl
ID0gSXNQb2RUeXBlKCRpbXBsQ2xhc3NOYW1lKTsKKyAgbXkgJHNraXBDb250ZXh0ID0gMDsKKwor
CisgIGlmICgkaXNQb2RUeXBlKSB7CisgICAgJGltcGxDbGFzc05hbWUgPSBHZXROYXRpdmVUeXBl
KCRpbXBsQ2xhc3NOYW1lKTsKKyAgICAkaW1wbEluY2x1ZGVzeyJWOFNWR1BPRFR5cGVXcmFwcGVy
LmgifSA9IDE7CisgIH0KKworICAjIFNwZWNpYWwgY2FzZTogU1ZHWm9vbUV2ZW50J3MgYXR0cmli
dXRlcyBhcmUgYWxsIHJlYWQtb25seQorICBpZiAoJGltcGxDbGFzc05hbWUgZXEgIlNWR1pvb21F
dmVudCIpIHsKKyAgICAkYXR0cklzUG9kVHlwZSA9IDA7CisgICAgJHNraXBDb250ZXh0ID0gMTsK
KyAgfQorCisgICMgU3BlY2lhbCBjYXNlOiBTVkdTVkdFZWxlbWVudDo6dmlld3BvcnQgaXMgcmVh
ZC1vbmx5CisgIGlmICgoJGltcGxDbGFzc05hbWUgZXEgIlNWR1NWR0VsZW1lbnQiKSBhbmQgKCRh
dHRyTmFtZSBlcSAidmlld3BvcnQiKSkgeworICAgICRhdHRySXNQb2RUeXBlID0gMDsKKyAgICAk
c2tpcENvbnRleHQgPSAxOworICB9CisKKyAgIyBTcGVjaWFsIGNhc2UgZm9yIFNWR0NvbG9yCisg
IGlmICgoJGltcGxDbGFzc05hbWUgZXEgIlNWR0NvbG9yIikgYW5kICgkYXR0ck5hbWUgZXEgInJn
YkNvbG9yIikpIHsKKyAgICAkYXR0cklzUG9kVHlwZSA9IDA7CisgIH0KKworICBteSAkZ2V0dGVy
U3RyaW5nVXNlc0ltcCA9ICRpbXBsQ2xhc3NOYW1lIG5lICJkb3VibGUiOworCisgICMgR2V0dGVy
CisgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiAke2F0dHJOYW1lfUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pIHsKKyAgICBJTkNfU1RBVFMoXCJET00u
JGltcGxDbGFzc05hbWUuJGF0dHJOYW1lLl9nZXRcIik7CitFTkQKKworICBpZiAoJGlzUG9kVHlw
ZSkgeworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICBWOFNWR1BPRFR5
cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiogaW1wX3dyYXBwZXIgPSBWOFByb3h5OjpUb05hdGl2
ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRl
eDo6JGNsYXNzSW5kZXgsIGluZm8uSG9sZGVyKCkpOworICAgICRpbXBsQ2xhc3NOYW1lIGltcF9p
bnN0YW5jZSA9ICppbXBfd3JhcHBlcjsKK0VORAorICAgIGlmICgkZ2V0dGVyU3RyaW5nVXNlc0lt
cCkgeworICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOworICAgICRpbXBsQ2xh
c3NOYW1lKiBpbXAgPSAmaW1wX2luc3RhbmNlOworRU5ECisgICAgfQorCisgIH0gZWxzaWYgKCRh
dHRyRXh0LT57InY4T25Qcm90byJ9IHx8ICRhdHRyRXh0LT57IlY4RGlzYWxsb3dTaGFkb3dpbmci
fSkgeworICAgICMgcGVyZm9ybSBsb29rdXAgZmlyc3QKKyAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCA8PEVORCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5
OjpMb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uVGhpcygp
KTsKKyAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK0VO
RAorICAgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9kZSwgJGltcGxDbGFzc05hbWUsICRjbGFzc0lu
ZGV4KTsKKyAgfSBlbHNlIHsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworRU5ECisg
ICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgp
OworICB9CisKKyAgIyBHZW5lcmF0ZSBzZWN1cml0eSBjaGVja3MgaWYgbmVjZXNzYXJ5CisgIGlm
ICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja05vZGVT
ZWN1cml0eSJ9KSB7CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIVY4UHJv
eHk6OkNoZWNrTm9kZVNlY3VyaXR5KGltcC0+JGF0dHJOYW1lKCkpKSByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpO1xuXG4iKTsKKyAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2hlY2tGcmFtZVNlY3VyaXR5In0pIHsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgIGlmICghVjhQcm94eTo6Q2hlY2tOb2RlU2VjdXJpdHkoaW1wLT5jb250
ZW50RG9jdW1lbnQoKSkpIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7XG5cbiIpOworICB9CisKKyAg
bXkgJHVzZUV4Y2VwdGlvbnMgPSAxIGlmIEB7JGF0dHJpYnV0ZS0+Z2V0dGVyRXhjZXB0aW9uc30g
YW5kICEoJGlzUG9kVHlwZSk7CisgIGlmICgkdXNlRXhjZXB0aW9ucykgeworICAgICRpbXBsSW5j
bHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIik7CisgIH0KKworICBpZiAoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsidjhyZWZlcmVuY2VhdHRyIn0pIHsK
KyAgICAkYXR0ck5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJ2OHJlZmVyZW5jZWF0dHIifTsKKyAgfQorCisgIG15ICRnZXR0ZXJGdW5jID0gV0tfbGNm
aXJzdCgkYXR0ck5hbWUpOworICAkZ2V0dGVyRnVuYyAuPSAiQW5pbWF0ZWQiIGlmICRjb2RlR2Vu
ZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwor
CisgIG15ICRyZXR1cm5UeXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+dHlwZSk7CisKKyAgbXkgJGdldHRlclN0cmluZzsKKyAgaWYgKCRnZXR0
ZXJTdHJpbmdVc2VzSW1wKSB7CisgICAgJGdldHRlclN0cmluZyA9ICJpbXAtPiRnZXR0ZXJGdW5j
KCI7CisgICAgJGdldHRlclN0cmluZyAuPSAiZWMiIGlmICR1c2VFeGNlcHRpb25zOworICAgICRn
ZXR0ZXJTdHJpbmcgLj0gIikiOworICAgIGlmIChJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpKSB7
CisgICAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvR2V0UHRyLmgifSA9IDE7CisgICAgICAkZ2V0dGVy
U3RyaW5nID0gIldURjo6Z2V0UHRyKCIgLiAkZ2V0dGVyU3RyaW5nIC4gIikiOworICAgIH0KKyAg
ICBpZiAoJG5hdGl2ZVR5cGUgZXEgImludCIgYW5kCisgICAgICAgICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRGcm9tU3RyaW5nIn0pIHsKKyAgICAg
ICRnZXR0ZXJTdHJpbmcgLj0gIi50b0ludCgpIjsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgJGdl
dHRlclN0cmluZyA9ICJpbXBfaW5zdGFuY2UiOworICB9CisgIGlmICgkbmF0aXZlVHlwZSBlcSAi
U3RyaW5nIikgeworICAgICRnZXR0ZXJTdHJpbmcgPSAiVG9TdHJpbmcoJGdldHRlclN0cmluZyki
OworICB9CisKKyAgbXkgJHJlc3VsdDsKKyAgbXkgJHdyYXBwZXI7CisKKyAgaWYgKCRhdHRySXNQ
b2RUeXBlKSB7CisgICAgJGltcGxJbmNsdWRlc3siVjhTVkdQT0RUeXBlV3JhcHBlci5oIn0gPSAx
OworCisgICAgbXkgJGdldHRlciA9ICRnZXR0ZXJTdHJpbmc7CisgICAgJGdldHRlciA9fiBzL2lt
cC0+Ly87CisgICAgJGdldHRlciA9fiBzL1woXCkvLzsKKyAgICBteSAkc2V0dGVyID0gInNldCIg
LiBXS191Y2ZpcnN0KCRnZXR0ZXIpOworCisgICAgbXkgJGltcGxDbGFzc0lzQW5pbWF0ZWRUeXBl
ID0gJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCRpbXBsQ2xhc3NOYW1lKTsKKyAg
ICBpZiAobm90ICRpbXBsQ2xhc3NJc0FuaW1hdGVkVHlwZQorICAgICAgICBhbmQgJGNvZGVHZW5l
cmF0b3ItPklzUG9kVHlwZVdpdGhXcml0ZWFibGVQcm9wZXJ0aWVzKCRhdHRyVHlwZSkKKyAgICAg
ICAgYW5kIG5vdCBkZWZpbmVkICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkltbXV0YWJsZSJ9KSB7CisgICAgICBpZiAoSXNQb2RUeXBlKCRpbXBsQ2xhc3NOYW1l
KSkgeworICAgICAgICAkd3JhcHBlciA9ICJuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldp
dGhQT0RUeXBlUGFyZW50PCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZT4oJGdldHRlclN0cmlu
ZywgaW1wX3dyYXBwZXIpIjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICR3cmFwcGVyID0gIm5l
dyBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBhcmVudDwkbmF0aXZlVHlwZSwgJGltcGxD
bGFzc05hbWU+KGltcCwgJiR7aW1wbENsYXNzTmFtZX06OiRnZXR0ZXIsICYke2ltcGxDbGFzc05h
bWV9Ojokc2V0dGVyKSI7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICgkaW1wbENs
YXNzSXNBbmltYXRlZFR5cGUpIHsKKyAgICAgICAgJHdyYXBwZXIgPSAiVjhTVkdEeW5hbWljUE9E
VHlwZVdyYXBwZXJDYWNoZTwkbmF0aXZlVHlwZSwgJGltcGxDbGFzc05hbWU+Ojpsb29rdXBPckNy
ZWF0ZVdyYXBwZXIoaW1wLCAmJHtpbXBsQ2xhc3NOYW1lfTo6JGdldHRlciwgJiR7aW1wbENsYXNz
TmFtZX06OiRzZXR0ZXIpIjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICR3cmFwcGVyID0gR2Vu
ZXJhdGVTVkdTdGF0aWNQb2RUeXBlV3JhcHBlcigkcmV0dXJuVHlwZSwgJGdldHRlclN0cmluZyk7
CisgICAgICB9CisgICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB2b2lk
KiB3cmFwcGVyID0gJHdyYXBwZXI7XG4iKTsKKyAgfSBlbHNpZiAoJG5hdGl2ZVR5cGUgbmUgIlJH
QkNvbG9yIikgeworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUg
diA9ICIpOworCisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiRnZXR0ZXJTdHJpbmc7XG4i
KTsKKworICAgIGlmICgkdXNlRXhjZXB0aW9ucykgeworICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgR2VuZXJhdGVTZXRET01FeGNlcHRpb24oIiAgICAiKSk7CisgICAgfQorCisgICAgJHJl
c3VsdCA9ICJ2IjsKKyAgICBpZiAoSXNSZWZQdHJUeXBlKCRyZXR1cm5UeXBlKSkgeworICAgICAg
JHJlc3VsdCA9ICJXVEY6OmdldFB0cigiIC4gJHJlc3VsdCAuICIpIjsKKyAgICB9CisgIH0gZWxz
ZSB7CisgICAgIyBTcGVjaWFsIGNhc2U6IFJHQkNvbG9yIGlzIG5vbmNvcHlhYmxlCisgICAgJHJl
c3VsdCA9ICRnZXR0ZXJTdHJpbmc7CisgIH0KKworCisgIGlmIChJc1NWR1R5cGVOZWVkaW5nQ29u
dGV4dFBhcmFtZXRlcigkYXR0clR5cGUpICYmICEkc2tpcENvbnRleHQpIHsKKyAgICBteSAkcmVz
dWx0T2JqZWN0ID0gJHJlc3VsdDsKKyAgICBpZiAoJGF0dHJJc1BvZFR5cGUpIHsKKyAgICAgICRy
ZXN1bHRPYmplY3QgPSAid3JhcHBlciI7CisgICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgR2VuZXJhdGVTVkdDb250ZXh0QXNzaWdubWVudCgkaW1wbENsYXNzTmFtZSwgJHJlc3Vs
dE9iamVjdCwgIiAgICAiKSk7CisgIH0KKworICBpZiAoJGF0dHJJc1BvZFR5cGUpIHsKKyAgICBt
eSAkY2xhc3NJbmRleCA9IHVjKCRhdHRyVHlwZSk7CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICByZXR1cm4gVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0lu
ZGV4LCB3cmFwcGVyKTtcbiIpOworICB9IGVsc2UgeworICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgcmV0dXJuICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LCAkcmVzdWx0KS4gIjtcbiIpOworICB9CisKKyAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
fVxuXG4iKTsgICMgZW5kIG9mIGdldHRlcgorfQorCisKK3N1YiBHZW5lcmF0ZVJlcGxhY2VhYmxl
QXR0clNldHRlcgoreworICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworCisgICRpbXBsSW5j
bHVkZXN7InY4X3Byb3h5LmgifSA9IDE7CisKKyAgcHVzaChAaW1wbENvbnRlbnREZWNscywKKyAg
ICAgICAiICBzdGF0aWMgdm9pZCAke2F0dHJOYW1lfUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIiAuCisgICAgICAgIiB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykge1xuIik7CisKKyAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICBJTkNfU1RBVFMoXCJET00uJGltcGxDbGFzc05hbWUuJGF0dHJOYW1lLl9zZXRc
Iik7XG4iKTsKKworICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiAke2F0dHJOYW1lfV9zdHJpbmcgPSB2ODo6U3RyaW5nOjpOZXcoXCIke2F0dHJOYW1l
fVwiKTtcbiIpOworICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGluZm8uSG9sZGVyKCkt
PkRlbGV0ZSgke2F0dHJOYW1lfV9zdHJpbmcpO1xuIik7CisgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgaW5mby5UaGlzKCktPlNldCgke2F0dHJOYW1lfV9zdHJpbmcsIHZhbHVlKTtcbiIp
OworICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICB9XG5cbiIpOworfQorCisKK3N1YiBHZW5l
cmF0ZU5vcm1hbEF0dHJTZXR0ZXIKK3sKKyAgbXkgJGF0dHJpYnV0ZSA9IHNoaWZ0OworICBteSAk
ZGF0YU5vZGUgPSBzaGlmdDsKKyAgbXkgJGNsYXNzSW5kZXggPSBzaGlmdDsKKyAgbXkgJGltcGxD
bGFzc05hbWUgPSBzaGlmdDsKKworICBteSAkYXR0ckV4dCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzOworCisgICRpbXBsSW5jbHVkZXN7InY4X3Byb3h5LmgifSA9
IDE7CisKKyAgcHVzaChAaW1wbENvbnRlbnREZWNscywKKyAgICAgICAiICBzdGF0aWMgdm9pZCAk
e2F0dHJOYW1lfUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIiAuCisgICAg
ICAgIiB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykge1xuIik7CisKKyAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBJTkNfU1RBVFMo
XCJET00uJGltcGxDbGFzc05hbWUuJGF0dHJOYW1lLl9zZXRcIik7XG4iKTsKKworICBteSAkaXNQ
b2RUeXBlID0gSXNQb2RUeXBlKCRpbXBsQ2xhc3NOYW1lKTsKKworICBpZiAoJGlzUG9kVHlwZSkg
eworICAgICRpbXBsQ2xhc3NOYW1lID0gR2V0TmF0aXZlVHlwZSgkaW1wbENsYXNzTmFtZSk7Cisg
ICAgJGltcGxJbmNsdWRlc3siVjhTVkdQT0RUeXBlV3JhcHBlci5oIn0gPSAxOworICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgVjhTVkdQT0RUeXBlV3JhcHBlcjwkaW1wbENsYXNzTmFt
ZT4qIHdyYXBwZXIgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVy
PCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uSG9sZGVy
KCkpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAkaW1wbENsYXNzTmFt
ZSBpbXBfaW5zdGFuY2UgPSAqd3JhcHBlcjtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgJGltcGxDbGFzc05hbWUqIGltcCA9ICZpbXBfaW5zdGFuY2U7XG4iKTsKKworICB9
IGVsc2lmICgkYXR0ckV4dC0+eyJ2OE9uUHJvdG8ifSkgeworICAgICMgcGVyZm9ybSBsb29rdXAg
Zmlyc3QKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5OjpMb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJ
bmRleDo6JGNsYXNzSW5kZXgsIGluZm8uVGhpcygpKTsKKyAgICBpZiAoaG9sZGVyLklzRW1wdHko
KSkgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK0VORAorICAgIEhvbGRlclRvTmF0aXZlKCRkYXRh
Tm9kZSwgJGltcGxDbGFzc05hbWUsICRjbGFzc0luZGV4KTsKKyAgfSBlbHNlIHsKKyAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBo
b2xkZXIgPSBpbmZvLkhvbGRlcigpOworRU5ECisgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2Rl
LCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOworICB9CisKKyAgbXkgJG5hdGl2ZVR5cGUg
PSBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDApOwor
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVUeXBlIHYgPSAiIC4gSlNWYWx1
ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikgLiAiO1xuIik7CisKKyAg
bXkgJHJlc3VsdCA9ICIiOworICBpZiAoJG5hdGl2ZVR5cGUgZXEgImludCIgYW5kICRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRGcm9tU3RyaW5nIn0p
IHsKKyAgICAkcmVzdWx0IC49ICJXZWJDb3JlOjpTdHJpbmc6Om51bWJlcigiOworICB9CisgICRy
ZXN1bHQgLj0gInYiOworICBpZiAoJG5hdGl2ZVR5cGUgZXEgImludCIgYW5kICRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRGcm9tU3RyaW5nIn0pIHsK
KyAgICAkcmVzdWx0IC49ICIpIjsKKyAgfQorICBteSAkcmV0dXJuVHlwZSA9ICRjb2RlR2VuZXJh
dG9yLT5TdHJpcE1vZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOworICBpZiAoSXNS
ZWZQdHJUeXBlKCRyZXR1cm5UeXBlKSkgeworICAgICRyZXN1bHQgPSAiV1RGOjpnZXRQdHIoIiAu
ICRyZXN1bHQgLiAiKSI7CisgIH0KKworICBteSAkdXNlRXhjZXB0aW9ucyA9IDEgaWYgQHskYXR0
cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfSBhbmQgISgkaXNQb2RUeXBlKTsKKworICBpZiAoJHVz
ZUV4Y2VwdGlvbnMpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7
CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtc
biIpOworICB9CisKKyAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJkb3VibGUiKSB7CisgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICAqaW1wID0gJHJlc3VsdDtcbiIpOworICB9IGVsc2Ug
eworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaW1wLT5zZXQiIC4gV0tfdWNmaXJz
dCgkYXR0ck5hbWUpIC4gIigiIC4gJHJlc3VsdCk7CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiwgZWMiKSBpZiAkdXNlRXhjZXB0aW9uczsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiKTtcbiIpOworICB9CisKKyAgaWYgKCR1c2VFeGNlcHRpb25zKSB7CisgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICBWOFByb3h5OjpTZXRET01FeGNlcHRpb24oZWMpO1xuIik7Cisg
IH0KKworICBpZiAoJGlzUG9kVHlwZSkgeworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgd3JhcHBlci0+Y29tbWl0Q2hhbmdlKCppbXAsIFY4UHJveHk6OkdldFNWR0NvbnRleHQod3Jh
cHBlcikpO1xuIik7CisgIH0gZWxzaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVy
KCRpbXBsQ2xhc3NOYW1lKSkgeworICAgICRpbXBsSW5jbHVkZXN7IlNWR0VsZW1lbnQuaCJ9ID0g
MTsKKworICAgIG15ICRjdXJyZW50T2JqZWN0ID0gImltcCI7CisgICAgaWYgKCRpc1BvZFR5cGUp
IHsKKyAgICAgICRjdXJyZW50T2JqZWN0ID0gIndyYXBwZXIiOworICAgIH0KKworICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKFNWR0VsZW1lbnQqIGNvbnRleHQgPSBWOFByb3h5
OjpHZXRTVkdDb250ZXh0KCRjdXJyZW50T2JqZWN0KSkge1xuIik7CisgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICAgICAgY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFz
c29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICB9XG4iKTsKKyAgfQorCisgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0
dXJuO1xuIik7CisgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgIH1cblxuIik7ICAjIGVuZCBv
ZiBzZXR0ZXIKK30KKworCitzdWIgR2VuZXJhdGVOZXdGdW5jdGlvblRlbXBsYXRlCit7CisgICRm
dW5jdGlvbiA9IHNoaWZ0OworICAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgJHNpZ25hdHVyZSA9IHNo
aWZ0OworCisgIG15ICRpbnRlcmZhY2VOYW1lID0gJGRhdGFOb2RlLT5uYW1lOworICBteSAkbmFt
ZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOworCisgIGlmICgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IHx8CisgICAgICAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q3VzdG9tIn0pIHsKKyAgICBpZiAo
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSAmJgor
ICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q3Vz
dG9tIn0pIHsKKyAgICAgIGRpZSAiQ3VzdG9tIGFuZCBWOEN1c3RvbSBzaG91bGQgYmUgbXV0dWFs
bHkgZXhjbHVzaXZlISIKKyAgICB9CisgICAgbXkgJGN1c3RvbUZ1bmMgPSAkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IHx8CisgICAgICAgICAgICAg
ICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q3Vz
dG9tIn07CisgICAgaWYgKCRjdXN0b21GdW5jIGVxIDEpIHsKKyAgICAgICRjdXN0b21GdW5jID0g
JGludGVyZmFjZU5hbWUgLiBXS191Y2ZpcnN0KCRuYW1lKTsKKyAgICB9CisgICAgcmV0dXJuICJ2
ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4Q3VzdG9tOjp2OCR7Y3VzdG9tRnVuY31DYWxsYmFj
aywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksICRzaWduYXR1cmUpIjsKKyAgfSBlbHNlIHsKKyAg
ICByZXR1cm4gInY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoJHtpbnRlcmZhY2VOYW1lfUludGVy
bmFsOjoke25hbWV9Q2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCAkc2lnbmF0dXJl
KSI7CisgIH0KK30KKworCitzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxiYWNrCit7CisgIG15ICRm
dW5jdGlvbiA9IHNoaWZ0OworICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgbXkgJGNsYXNzSW5k
ZXggPSBzaGlmdDsKKyAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKworICBteSAkaW50ZXJm
YWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+bmFtZTsKKworICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAorIiAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiAke25hbWV9Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykge1xuIiAuCisiICAgIElOQ19TVEFUUyhcIkRPTS4kaW1wbENsYXNzTmFtZS4kbmFtZVwiKTtc
biIpOworCisgIG15ICRudW1QYXJhbWV0ZXJzID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9Owor
CisgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcXVp
cmVzQWxsQXJndW1lbnRzIn0pIHsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAorICAgICAg
ICAgIiAgICBpZiAoYXJncy5MZW5ndGgoKSA8ICRudW1QYXJhbWV0ZXJzKSByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpO1xuIik7CisgIH0KKworICBpZiAoSXNQb2RUeXBlKCRpbXBsQ2xhc3NOYW1lKSkg
eworICAgIG15ICRuYXRpdmVDbGFzc05hbWUgPSBHZXROYXRpdmVUeXBlKCRpbXBsQ2xhc3NOYW1l
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8
JG5hdGl2ZUNsYXNzTmFtZT4qIGltcF93cmFwcGVyID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8
VjhTVkdQT0RUeXBlV3JhcHBlcjwkbmF0aXZlQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNs
YXNzSW5kZXgsIGFyZ3MuSG9sZGVyKCkpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICAkbmF0aXZlQ2xhc3NOYW1lIGltcF9pbnN0YW5jZSA9ICppbXBfd3JhcHBlcjtcbiIp
OworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZUNsYXNzTmFtZSogaW1w
ID0gJmltcF9pbnN0YW5jZTtcbiIpOworICB9IGVsc2UgeworICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsIDw8RU5EKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5I
b2xkZXIoKTsKK0VORAorICAgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9kZSwgJGltcGxDbGFzc05h
bWUsICRjbGFzc0luZGV4KTsKKyAgfQorCisgICMgQ2hlY2sgZG9tYWluIHNlY3VyaXR5IGlmIG5l
ZWRlZAorICBpZiAoKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrRG9tYWlu
U2VjdXJpdHkifQorICAgICAgIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKQorICAg
ICYmICEkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hl
Y2tEb21haW5TZWN1cml0eSJ9KSB7CisgICAgIyBXZSBoYXZlIG5vdCBmaW5kIHJlYWwgdXNlIGNh
c2VzIHlldC4KKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAorIiAgICBpZiAoIVY4UHJveHk6
OkNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpIHtcbiIuCisiICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTtcbiIgLgorIiAgICB9XG4iKTsKKyAgfQorCisKKyAgaWYgKEB7JGZ1
bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgeworICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlv
bkNvZGUuaCJ9ID0gMTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwO1xuIik7CisgIH0KKworICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Bcmd1bWVudEhhbmRsaW5nIn0pIHsKKyAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgIFNjcmlwdENhbGxTdGFjayBjYWxsU3RhY2soYXJncywg
JG51bVBhcmFtZXRlcnMpO1xuIik7CisgICAgJGltcGxJbmNsdWRlc3siU2NyaXB0Q2FsbFN0YWNr
LmgifSA9IDE7CisgIH0KKworICBteSAkcGFyYW1JbmRleCA9IDA7CisgIGZvcmVhY2ggbXkgJHBh
cmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CisgICAgVHJhbnNsYXRlUGFyYW1l
dGVyKCRwYXJhbWV0ZXIpOworCisgICAgbXkgJHBhcmFtZXRlck5hbWUgPSAkcGFyYW1ldGVyLT5u
YW1lOworCisgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25h
bCJ9KSB7CisgICAgICAjIEdlbmVyYXRlIGVhcmx5IGNhbGwgaWYgdGhlcmUgYXJlIG5vdCBlbm91
Z2ggcGFyYW1ldGVycy4KKyAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPD0gJHBhcmFtSW5kZXgpIHtcbiIpOworICAgICAgbXkgJGZ1bmN0aW9uQ2Fs
bCA9IEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCRmdW5jdGlvbiwgJHBhcmFtSW5kZXgsICIg
ICAgIiB4IDIsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICRmdW5jdGlvbkNhbGwpOworICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB9XG4i
KTsKKyAgICB9CisKKyAgICBpZiAoQmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRl
cikpIHsKKyAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgYm9vbCAke3BhcmFtZXRl
ck5hbWV9T2s7XG4iKTsKKyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
ICIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyLCAxKSAuICIgJHBhcmFt
ZXRlck5hbWUgPSAiKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBKU1ZhbHVlVG9OYXRp
dmUoJHBhcmFtZXRlciwgImFyZ3NbJHBhcmFtSW5kZXhdIiwKKyAgICAgICAgICAgQmFzaWNUeXBl
Q2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikgPyAgIiR7cGFyYW1ldGVyTmFtZX1PayIgOiB1
bmRlZikgLiAiO1xuIik7CisKKyAgICBpZiAoVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0
ZXIpKSB7CisgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7CisgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAorIiAgICBpZiAoISRwYXJhbWV0ZXJOYW1lIiAuIChC
YXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSA/ICJPayIgOiAiIikgLiAiKSB7
XG4iIC4KKyIgICAgICBWOFByb3h5OjpTZXRET01FeGNlcHRpb24oVFlQRV9NSVNNQVRDSF9FUlIp
O1xuIiAuCisiICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpO1xuIiAuCisiICAg
IH1cbiIpOworICAgIH0KKworICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSXNJbmRleCJ9KSB7CisgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9
IDE7CisgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAorIiAgICBpZiAoJHBhcmFtZXRlck5h
bWUgPCAwKSB7XG4iIC4KKyIgICAgICBWOFByb3h5OjpTZXRET01FeGNlcHRpb24oSU5ERVhfU0la
RV9FUlIpO1xuIiAuCisiICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpO1xuIiAu
CisiICAgIH1cbiIpOworICAgIH0KKworICAgICRwYXJhbUluZGV4Kys7CisgIH0KKworICAjIEJ1
aWxkIHRoZSBmdW5jdGlvbiBjYWxsIHN0cmluZy4KKyAgbXkgJGNhbGxTdHJpbmcgPSBHZW5lcmF0
ZUZ1bmN0aW9uQ2FsbFN0cmluZygkZnVuY3Rpb24sICRwYXJhbUluZGV4LCAiICAgICIsICRpbXBs
Q2xhc3NOYW1lKTsKKyAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiRjYWxsU3RyaW5nIik7Cisg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgIH1cblxuIik7Cit9CisKKworc3ViIEdlbmVyYXRl
QmF0Y2hlZEF0dHJpYnV0ZURhdGEKK3sKKyAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAg
bXkgJGF0dHJpYnV0ZXMgPSBzaGlmdDsKKworICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEAkYXR0
cmlidXRlcykgeworICAgIG15ICRhdHRyTmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFt
ZTsKKyAgICBteSAkYXR0ckV4dCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzOworCisgICAgbXkgJGFjY2Vzc0NvbnRyb2wgPSAidjg6OkRFRkFVTFQiOworICAgIGlm
ICgkYXR0ckV4dC0+eyJEb05vdENoZWNrRG9tYWluU2VjdXJpdHlPbkdldCJ9KSB7CisgICAgICAk
YWNjZXNzQ29udHJvbCA9ICJ2ODo6QUxMX0NBTl9SRUFEIjsKKyAgICB9IGVsc2lmICgkYXR0ckV4
dC0+eyJEb05vdENoZWNrRG9tYWluU2VjdXJpdHlPblNldCJ9KSB7CisgICAgICAkYWNjZXNzQ29u
dHJvbCA9ICJ2ODo6QUxMX0NBTl9XUklURSI7CisgICAgfSBlbHNpZiAoJGF0dHJFeHQtPnsiRG9O
b3RDaGVja0RvbWFpblNlY3VyaXR5In0pIHsKKyAgICAgICRhY2Nlc3NDb250cm9sID0gInY4OjpB
TExfQ0FOX1JFQUQiOworICAgICAgIGlmICghKCRhdHRyaWJ1dGUtPnR5cGUgPX4gL15yZWFkb25s
eS8pICYmICEoJGF0dHJFeHQtPnsiVjhSZWFkT25seSJ9KSkgeworICAgICAgICAgJGFjY2Vzc0Nv
bnRyb2wgLj0gInx2ODo6QUxMX0NBTl9XUklURSI7CisgICAgICAgfQorICAgIH0KKyAgICBpZiAo
JGF0dHJFeHQtPnsiVjhEaXNhbGxvd1NoYWRvd2luZyJ9KSB7CisgICAgICAkYWNjZXNzQ29udHJv
bCAuPSAifHY4OjpQUk9ISUJJVFNfT1ZFUldSSVRJTkciOworICAgIH0KKyAgICAkYWNjZXNzQ29u
dHJvbCA9ICJzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4oIiAuICRhY2Nlc3NDb250cm9s
IC4gIikiOworCisKKyAgICBteSAkY3VzdG9tQWNjZXNzb3IgPQorICAgICAgJGF0dHJFeHQtPnsi
Q3VzdG9tIn0gfHwKKyAgICAgICRhdHRyRXh0LT57IkN1c3RvbVNldHRlciJ9IHx8CisgICAgICAk
YXR0ckV4dC0+eyJDdXN0b21HZXR0ZXIifSB8fAorICAgICAgJGF0dHJFeHQtPnsiVjhDdXN0b20i
fSB8fAorICAgICAgJGF0dHJFeHQtPnsiVjhDdXN0b21TZXR0ZXIifSB8fAorICAgICAgJGF0dHJF
eHQtPnsiVjhDdXN0b21HZXR0ZXIifSB8fAorICAgICAgIiI7CisgICAgaWYgKCRjdXN0b21BY2Nl
c3NvciBlcSAxKSB7CisgICAgICAjIHVzZSB0aGUgbmFtaW5nIGNvbnZlbnNpb24sIGludGVyZmFj
ZSArIChjYXBpdGFsaXplKSBhdHRyIG5hbWUKKyAgICAgICRjdXN0b21BY2Nlc3NvciA9ICRpbnRl
cmZhY2VOYW1lIC4gV0tfdWNmaXJzdCgkYXR0ck5hbWUpOworICAgIH0KKworICAgIG15ICRnZXR0
ZXI7CisgICAgbXkgJHNldHRlcjsKKyAgICBteSAkcHJvcEF0dHIgPSAidjg6Ok5vbmUiOworICAg
IG15ICRoYXNDdXN0b21TZXR0ZXIgPSAwOworCisgICAgIyBDaGVjayBhdHRyaWJ1dGVzLgorICAg
IGlmICgkYXR0ckV4dC0+eyJEb250RW51bSJ9KSB7CisgICAgICAkcHJvcEF0dHIgLj0gInx2ODo6
RG9udEVudW0iOworICAgIH0KKyAgICBpZiAoJGF0dHJFeHQtPnsiVjhEaXNhbGxvd1NoYWRvd2lu
ZyJ9KSB7CisgICAgICAkcHJvcEF0dHIgLj0gInx2ODo6RG9udERlbGV0ZSI7CisgICAgfQorCisg
ICAgbXkgJG9uX3Byb3RvID0gIjAgLyogb24gaW5zdGFuY2UgKi8iOworICAgIG15ICRkYXRhID0g
IlY4Q2xhc3NJbmRleDo6SU5WQUxJRF9DTEFTU19JTkRFWCAvKiBubyBkYXRhICovIjsKKworICAg
ICMgQ29uc3RydWN0b3IKKyAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9D
b25zdHJ1Y3RvciQvKSB7CisgICAgICBteSAkY29uc3RydWN0b3JUeXBlID0gJGNvZGVHZW5lcmF0
b3ItPlN0cmlwTW9kdWxlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CisgICAgICAkY29u
c3RydWN0b3JUeXBlID1+IHMvQ29uc3RydWN0b3IkLy87CisgICAgICBteSAkY29uc3RydWN0b3JJ
bmRleCA9IHVjKCRjb25zdHJ1Y3RvclR5cGUpOworICAgICAgJGRhdGEgPSAiVjhDbGFzc0luZGV4
Ojoke2NvbnN0cnVjdG9ySW5kZXh9IjsKKyAgICAgICRnZXR0ZXIgPSAiJHtpbnRlcmZhY2VOYW1l
fUludGVybmFsOjoke2ludGVyZmFjZU5hbWV9Q29uc3RydWN0b3JHZXR0ZXIiOworICAgICAgJHNl
dHRlciA9ICIwIjsKKyAgICAgICRwcm9wQXR0ciA9ICJ2ODo6UmVhZE9ubHkiOworCisgICAgIyBF
dmVudExpc3RlbmVycworICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBl
cSAiRXZlbnRMaXN0ZW5lciIpIHsKKyAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2lu
ZG93IikgeworICAgICAgICAkZ2V0dGVyID0gIlY4Q3VzdG9tOjp2OERPTVdpbmRvd0V2ZW50SGFu
ZGxlckFjY2Vzc29yR2V0dGVyIjsKKyAgICAgICAgJHNldHRlciA9ICJWOEN1c3RvbTo6djhET01X
aW5kb3dFdmVudEhhbmRsZXJBY2Nlc3NvclNldHRlciI7CisgICAgICB9IGVsc2lmICgkaW50ZXJm
YWNlTmFtZSBlcSAiTm9kZSIgfHwgJGludGVyZmFjZU5hbWUgZXEgIlNWR0VsZW1lbnRJbnN0YW5j
ZSIpIHsKKyAgICAgICAgJGdldHRlciA9ICJWOEN1c3RvbTo6djhFbGVtZW50RXZlbnRIYW5kbGVy
QWNjZXNzb3JHZXR0ZXIiOworICAgICAgICAkc2V0dGVyID0gIlY4Q3VzdG9tOjp2OEVsZW1lbnRF
dmVudEhhbmRsZXJBY2Nlc3NvclNldHRlciI7CisgICAgICB9IGVsc2UgeworICAgICAgICAkZ2V0
dGVyID0gIlY4Q3VzdG9tOjp2OCR7Y3VzdG9tQWNjZXNzb3J9QWNjZXNzb3JHZXR0ZXIiOworICAg
ICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIldvcmtlckNvbnRleHQiIGFuZCAkYXR0ck5hbWUg
ZXEgInNlbGYiKSB7CisgICAgICAgICAgJHNldHRlciA9ICIwIjsKKyAgICAgICAgICAkcHJvcEF0
dHIgPSAidjg6OlJlYWRPbmx5IjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAkc2V0dGVy
ID0gIlY4Q3VzdG9tOjp2OCR7Y3VzdG9tQWNjZXNzb3J9QWNjZXNzb3JTZXR0ZXIiOworICAgICAg
ICB9CisgICAgICB9CisKKyAgICAjIEN1c3RvbSBHZXR0ZXIgYW5kIFNldHRlcgorICAgIH0gZWxz
aWYgKCRhdHRyRXh0LT57IkN1c3RvbSJ9IHx8ICRhdHRyRXh0LT57IlY4Q3VzdG9tIn0pIHsKKyAg
ICAgICRnZXR0ZXIgPSAiVjhDdXN0b206OnY4JHtjdXN0b21BY2Nlc3Nvcn1BY2Nlc3NvckdldHRl
ciI7CisgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIldvcmtlckNvbnRleHQiIGFuZCAkYXR0
ck5hbWUgZXEgInNlbGYiKSB7CisgICAgICAgICRzZXR0ZXIgPSAiMCI7CisgICAgICAgICRwcm9w
QXR0ciA9ICJ2ODo6UmVhZE9ubHkiOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJGhhc0N1c3Rv
bVNldHRlciA9IDE7CisgICAgICAgICRzZXR0ZXIgPSAiVjhDdXN0b206OnY4JHtjdXN0b21BY2Nl
c3Nvcn1BY2Nlc3NvclNldHRlciI7CisgICAgICB9CisKKyAgICAjIEN1c3RvbSBTZXR0ZXIKKyAg
ICB9IGVsc2lmICgkYXR0ckV4dC0+eyJDdXN0b21TZXR0ZXIifSB8fCAkYXR0ckV4dC0+eyJWOEN1
c3RvbVNldHRlciJ9KSB7CisgICAgICAkaGFzQ3VzdG9tU2V0dGVyID0gMTsKKyAgICAgICRnZXR0
ZXIgPSAiJHtpbnRlcmZhY2VOYW1lfUludGVybmFsOjoke2F0dHJOYW1lfUF0dHJHZXR0ZXIiOwor
ICAgICAgJHNldHRlciA9ICJWOEN1c3RvbTo6djgke2N1c3RvbUFjY2Vzc29yfUFjY2Vzc29yU2V0
dGVyIjsKKworICAgICMgQ3VzdG9tIEdldHRlcgorICAgIH0gZWxzaWYgKCRhdHRyRXh0LT57IkN1
c3RvbUdldHRlciJ9KSB7CisgICAgICAkZ2V0dGVyID0gIlY4Q3VzdG9tOjp2OCR7Y3VzdG9tQWNj
ZXNzb3J9QWNjZXNzb3JHZXR0ZXIiOworICAgICAgJHNldHRlciA9ICIke2ludGVyZmFjZU5hbWV9
SW50ZXJuYWw6OiR7YXR0ck5hbWV9QXR0clNldHRlciI7CisKKyAgICAjIFJlcGxhY2VhYmxlCisg
ICAgfSBlbHNpZiAoJGF0dHJFeHQtPnsiUmVwbGFjZWFibGUifSkgeworICAgICAgIyBSZXBsYWNl
YWJsZSBhY2Nlc3NvciBpcyBwdXQgb24gaW5zdGFuY2UgdGVtcGxhdGUgd2l0aCBSZWFkT25seSBh
dHRyaWJ1dGUuCisgICAgICAkZ2V0dGVyID0gIiR7aW50ZXJmYWNlTmFtZX1JbnRlcm5hbDo6JHth
dHRyTmFtZX1BdHRyR2V0dGVyIjsKKyAgICAgICRzZXR0ZXIgPSAiMCI7CisKKyAgICAgICMgTWFy
ayB0byBhdm9pZCBkdXBsaWNhdGUgdjg6OlJlYWRPbmx5IGZsYWdzIGluIG91dHB1dC4KKyAgICAg
ICRoYXNDdXN0b21TZXR0ZXIgPSAxOworCisgICAgICAjIEhhbmRsZSB0aGUgc3BlY2lhbCBjYXNl
IG9mIHdpbmRvdy50b3AgYmVpbmcgbWFya2VkIHVwc3RyZWFtIGFzIFJlcGxhY2VhYmxlLgorICAg
ICAgIyBUT0RPKGRnbGF6a292KTogSW52ZXN0aWdhdGUgd2h5IFtSZXBsYWNlYWJsZV0gaXMgbm90
IG1hcmtlZCBhcyBSZWFkT25seQorICAgICAgIyB1cHN0cmVhbSBhbmQgcmVhY2ggcGFyaXR5Lgor
ICAgICAgaWYgKCEoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIgYW5kICRhdHRyTmFtZSBl
cSAidG9wIikpIHsKKyAgICAgICAgJHByb3BBdHRyIC49ICJ8djg6OlJlYWRPbmx5IjsKKyAgICAg
IH0KKworICAgICMgTm9ybWFsCisgICAgfSBlbHNlIHsKKyAgICAgICRnZXR0ZXIgPSAiJHtpbnRl
cmZhY2VOYW1lfUludGVybmFsOjoke2F0dHJOYW1lfUF0dHJHZXR0ZXIiOworICAgICAgJHNldHRl
ciA9ICIke2ludGVyZmFjZU5hbWV9SW50ZXJuYWw6OiR7YXR0ck5hbWV9QXR0clNldHRlciI7Cisg
ICAgfQorCisgICAgaWYgKCRhdHRyRXh0LT57IlJlcGxhY2VhYmxlIn0gJiYgISRoYXNDdXN0b21T
ZXR0ZXIpIHsKKyAgICAgICRzZXR0ZXIgPSAiMCI7CisgICAgICAkcHJvcEF0dHIgLj0gInx2ODo6
UmVhZE9ubHkiOworICAgIH0KKworICAgICMgUmVhZCBvbmx5IGF0dHJpYnV0ZXMKKyAgICBpZiAo
JGF0dHJpYnV0ZS0+dHlwZSA9fiAvXnJlYWRvbmx5LyB8fCAkYXR0ckV4dC0+eyJWOFJlYWRPbmx5
In0pIHsKKyAgICAgICRzZXR0ZXIgPSAiMCI7CisgICAgfQorCisgICAgIyBBbiBhY2Nlc3NvciBj
YW4gYmUgaW5zdGFsbGVkIG9uIHRoZSBwcm90bworICAgIGlmICgkYXR0ckV4dC0+eyJ2OE9uUHJv
dG8ifSkgeworICAgICAgJG9uX3Byb3RvID0gIjEgLyogb24gcHJvdG8gKi8iOworICAgIH0KKwor
ICAgIG15ICRjb21tZW50SW5mbyA9ICJBdHRyaWJ1dGUgJyRhdHRyTmFtZScgKFR5cGU6ICciIC4g
JGF0dHJpYnV0ZS0+dHlwZSAuCisgICAgICAgICAgICAgICAgICAgICAgIicgRXh0QXR0cjogJyIg
LiBqb2luKCcgJywga2V5cygleyRhdHRyRXh0fSkpIC4gIicpIjsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgPDxFTkQpOworICAvLyAkY29tbWVudEluZm8KKyAgeyAiJGF0dHJOYW1lIiwKKyAgICAk
Z2V0dGVyLAorICAgICRzZXR0ZXIsCisgICAgJGRhdGEsCisgICAgJGFjY2Vzc0NvbnRyb2wsCisg
ICAgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPigkcHJvcEF0dHIpLAorICAgICRv
bl9wcm90byB9LAorRU5ECisgICAgfQorfQorCisKK3N1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
Cit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0Owor
ICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRjbGFzc05h
bWUgPSAiVjgkaW50ZXJmYWNlTmFtZSI7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSAkaW50ZXJm
YWNlTmFtZTsKKyAgICBteSAkY2xhc3NJbmRleCA9IHVjKCRjb2RlR2VuZXJhdG9yLT5TdHJpcE1v
ZHVsZSgkaW50ZXJmYWNlTmFtZSkpOworCisgICAgbXkgJGhhc0xlZ2FjeVBhcmVudCA9ICRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9OworICAgIG15ICRjb25k
aXRpb25hbCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn07
CisKKyAgICBAYWxsUGFyZW50cyA9ICRjb2RlR2VuZXJhdG9yLT5GaW5kUGFyZW50c1JlY3Vyc2l2
ZWx5KCRkYXRhTm9kZSk7CisKKyAgICAjIC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCisg
ICAgQGltcGxDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhlYWRlclRlbXBsYXRlKTsKKwor
ICAgIHB1c2goQGltcGxGaXhlZEhlYWRlciwKKyAgICAgICAgICIjaW5jbHVkZSBcImNvbmZpZy5o
XCJcbiIgLgorICAgICAgICAgIiNpbmNsdWRlIFwidjhfcHJveHkuaFwiXG4iIC4KKyAgICAgICAg
ICIjaW5jbHVkZSBcInY4X2JpbmRpbmcuaFwiXG5cbiIgLgorICAgICAgICAgIiN1bmRlZiBMT0dc
blxuIik7CisKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgaWYgKCRjb25kaXRpb25h
bCkgeworICAgICAgICAkY29uZGl0aW9uYWxTdHJpbmcgPSAiRU5BQkxFKCIgLiBqb2luKCIpICYm
IEVOQUJMRSgiLCBzcGxpdCgvJi8sICRjb25kaXRpb25hbCkpIC4gIikiOworICAgICAgICBwdXNo
KEBpbXBsRml4ZWRIZWFkZXIsICJcbiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKTsKKyAg
ICB9CisKKyAgICBpZiAoJGNsYXNzTmFtZSA9fiAvXlY4U1ZHQW5pbWF0ZWQvKSB7CisgICAgICAg
IEFkZEluY2x1ZGVzRm9yU1ZHQW5pbWF0ZWRUeXBlKCRpbnRlcmZhY2VOYW1lKTsKKyAgICB9CisK
KyAgICAkaW1wbEluY2x1ZGVzeyIke2NsYXNzTmFtZX0uaCJ9ID0gMTsKKworICAgIEFkZEluY2x1
ZGVzRm9yVHlwZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgJGltcGxJbmNsdWRlc3sidjhfcHJveHku
aCJ9ID0gMTsKKworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJuYW1lc3BhY2UgV2ViQ29y
ZSB7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAibmFtZXNwYWNlICR7aW50ZXJm
YWNlTmFtZX1JbnRlcm5hbCB7XG5cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJ0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9XG5cbiIpOworCisgICAgbXkg
JGhhc0NvbnN0cnVjdG9ycyA9IDA7CisKKyAgICAjIEdlbmVyYXRlIHByb3BlcnR5IGFjY2Vzc29y
cyBmb3IgYXR0cmlidXRlcy4KKyAgICBmb3IgKCRpbmRleCA9IDA7ICRpbmRleCA8IEB7JGRhdGFO
b2RlLT5hdHRyaWJ1dGVzfTsgJGluZGV4KyspIHsKKyAgICAgICRhdHRyaWJ1dGUgPSBAeyRkYXRh
Tm9kZS0+YXR0cmlidXRlc31bJGluZGV4XTsKKyAgICAgICRhdHRyTmFtZSA9ICRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICRhdHRyVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+dHlwZTsKKworICAgICAgIyBHZW5lcmF0ZSBzcGVjaWFsIGNvZGUgZm9yIHRoZSBjb25zdHJ1
Y3RvciBhdHRyaWJ1dGVzLgorICAgICAgaWYgKCRhdHRyVHlwZSA9fiAvQ29uc3RydWN0b3IkLykg
eworICAgICAgICAkaGFzQ29uc3RydWN0b3JzID0gMTsKKyAgICAgICAgbmV4dDsKKyAgICAgIH0K
KworICAgICAgIyBNYWtlIEV2ZW50TGlzdGVuZXJzIGFsd2F5cyBjdXN0b20uCisgICAgICAjIFRP
RE8obWJlbHNoZSk6IG1ha2UgdGhlIHBlcmwgY29kZSBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGhl
CisgICAgICAjICAgZXZlbnQgc2V0dGVycy9nZXR0ZXJzLiAgRm9yIG5vdywgV2ViS2l0IGhhcyBz
dGFydGVkIHJlbW92aW5nIHRoZQorICAgICAgIyAgIFtDdXN0b21dIGF0dHJpYnV0ZSwgc28ganVz
dCBhdXRvbWF0aWNhbGx5IGluc2VydCBpdCB0byBhdm9pZCBmb3JraW5nCisgICAgICAjICAgb3Ro
ZXIgZmlsZXMuICBUaGlzIHNob3VsZCBiZSBva2F5IGJlY2F1c2Ugd2UgY2FuJ3QgZ2VuZXJhdGUg
c3R1YnMKKyAgICAgICMgICBmb3IgYW55IGV2ZW50IGdldHRlci9zZXR0ZXJzIGFueXdheS4KKyAg
ICAgIGlmICgkYXR0clR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiKSB7CisgICAgICAgICRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9ID0gMTsKKyAgICAg
ICAgJGltcGxJbmNsdWRlc3siVjhDdXN0b21CaW5kaW5nLmgifSA9IDE7CisgICAgICAgIG5leHQ7
CisgICAgICB9CisKKyAgICAgICMgRG8gbm90IGdlbmVyYXRlIGFjY2Vzc29yIGlmIHRoaXMgaXMg
YSBjdXN0b20gYXR0cmlidXRlLiAgVGhlCisgICAgICAjIGNhbGwgd2lsbCBiZSBmb3J3YXJkZWQg
dG8gYSBoYW5kLXdyaXR0ZW4gYWNjZXNzb3IKKyAgICAgICMgaW1wbGVtZW50YXRpb24uCisgICAg
ICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
In0gfHwKKyAgICAgICAgICAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJWOEN1c3RvbSJ9KSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4Q3VzdG9tQmluZGlu
Zy5oIn0gPSAxOworICAgICAgICBuZXh0OworICAgICAgfQorCisgICAgICAjIEdlbmVyYXRlIHRo
ZSBhY2Nlc3Nvci4KKyAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDdXN0b21HZXR0ZXIifSkgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEN1
c3RvbUJpbmRpbmcuaCJ9ID0gMTsKKyAgICAgIH0gZWxzZSB7CisJICAgIEdlbmVyYXRlTm9ybWFs
QXR0ckdldHRlcigkYXR0cmlidXRlLCAkZGF0YU5vZGUsICRjbGFzc0luZGV4LCAkaW1wbENsYXNz
TmFtZSk7CisgICAgICB9CisgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tU2V0dGVyIn0gfHwKKyAgICAgICAgICAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOEN1c3RvbVNldHRlciJ9KSB7CisgICAg
ICAgICRpbXBsSW5jbHVkZXN7IlY4Q3VzdG9tQmluZGluZy5oIn0gPSAxOworICAgICAgfSBlbHNp
ZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVwbGFjZWFi
bGUifSkgeworICAgICAgICAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFeHRlbmRz
RE9NR2xvYmFsT2JqZWN0In0gfHwgZGllICJSZXBsYWNlYWJsZSBhdHRyaWJ1dGUgY2FuIG9ubHkg
YmUgdXNlZCBpbiBpbnRlcmZhY2UgdGhhdCBkZWZpbmVzIEV4dGVuZHNET01HbG9iYWxPYmplY3Qg
YXR0cmlidXRlISI7CisjICAgICAgICBHZW5lcmF0ZVJlcGxhY2VhYmxlQXR0clNldHRlcigkaW1w
bENsYXNzTmFtZSk7CisgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT50eXBlICF+IC9ecmVhZG9u
bHkvICYmCisgICAgICAgICAgICAgICAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiVjhSZWFkT25seSJ9KSB7CisgICAgICAgIEdlbmVyYXRlTm9ybWFsQXR0clNl
dHRlcigkYXR0cmlidXRlLCAkZGF0YU5vZGUsICRjbGFzc0luZGV4LCAkaW1wbENsYXNzTmFtZSk7
CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCRoYXNDb25zdHJ1Y3RvcnMpIHsKKyAgICAgIEdl
bmVyYXRlQ29uc3RydWN0b3JHZXR0ZXIoJGltcGxDbGFzc05hbWUsICRjbGFzc0luZGV4KTsKKyAg
ICB9CisKKyAgICAjIEdlbmVyYXRlIG1ldGhvZHMgZm9yIGZ1bmN0aW9ucy4KKyAgICBmb3JlYWNo
IG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICMgaGFjayBm
b3IgYWRkRXZlbnRMaXN0ZW5lci9SZW1vdmVFdmVudExpc3RlbmVyCisgICAgICAjIFRPRE8oZnFp
YW4pOiBhdm9pZCBuYW1pbmcgY29uZmxpY3QKKyAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IHx8CisgICAgICAgICAgJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOEN1c3RvbSJ9KSB7CisgICAgICAg
ICRpbXBsSW5jbHVkZXN7IlY4Q3VzdG9tQmluZGluZy5oIn0gPSAxOworCisgICAgICB9IGVsc2Ug
eworICAgICAgICBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJhY2soJGZ1bmN0aW9uLCAkZGF0YU5vZGUs
ICRjbGFzc0luZGV4LCAkaW1wbENsYXNzTmFtZSk7CisgICAgICB9CisKKworICAgICAgIyBJZiB0
aGUgZnVuY3Rpb24gZG9lcyBub3QgbmVlZCBkb21haW4gc2VjdXJpdHkgY2hlY2ssIHdlIG5lZWQg
dG8KKyAgICAgICMgZ2VuZXJhdGUgYW4gYWNjZXNzIGdldHRlciB0aGF0IHJldHVybnMgZGlmZmVy
ZW50IGZ1bmN0aW9uIG9iamVjdHMKKyAgICAgICMgZm9yIGRpZmZlcmVudCBjYWxsaW5nIGNvbnRl
eHQuCisgICAgICBpZiAoKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrRG9t
YWluU2VjdXJpdHkifQorICAgICAgICAgIHx8ICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93
IikpCisgICAgICAgICYmICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5In0peworICAgICAgICBHZW5lcmF0ZURvbWFpblNh
ZmVGdW5jdGlvbkdldHRlcigkZnVuY3Rpb24sICRkYXRhTm9kZSwgJGNsYXNzSW5kZXgsICRpbXBs
Q2xhc3NOYW1lKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAjIEF0dHJpYnV0ZXMKKyAgICBteSAk
YXR0cmlidXRlcyA9ICRkYXRhTm9kZS0+YXR0cmlidXRlczsKKworICAgICMgRm9yIHRoZSBET01X
aW5kb3cgaW50ZXJmYWNlIHdlIHBhcnRpdGlvbiB0aGUgYXR0cmlidXRlcyBpbnRvIHRoZQorICAg
ICMgb25lcyB0aGF0IGRpc2FsbG93cyBzaGFkb3dpbmcgYW5kIHRoZSByZXN0LgorICAgIG15IEBk
aXNhbGxvd3Nfc2hhZG93aW5nOworICAgIG15IEBub3JtYWw7CisgICAgaWYgKCRpbnRlcmZhY2VO
YW1lIGVxICJET01XaW5kb3ciKSB7CisgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEAkYXR0
cmlidXRlcykgeworICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiVjhEaXNhbGxvd1NoYWRvd2luZyJ9KSB7CisgICAgICAgICAgcHVzaChAZGlz
YWxsb3dzX3NoYWRvd2luZywgJGF0dHJpYnV0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgcHVzaChAbm9ybWFsLCAkYXR0cmlidXRlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAg
IyBQdXQgdGhlIGF0dHJpYnV0ZXMgdGhhdCBkaXNhbGxvdyBzaGFkb3dpbmcgb24gdGhlIHNoYWRv
dyBvYmplY3QuCisgICAgICAkYXR0cmlidXRlcyA9IFxAbm9ybWFsOworICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBzaGFkb3dfYXR0cnNbXSA9
IHtcbiIpOworICAgICAgR2VuZXJhdGVCYXRjaGVkQXR0cmlidXRlRGF0YSgkaW50ZXJmYWNlTmFt
ZSwgXEBkaXNhbGxvd3Nfc2hhZG93aW5nKTsKKyAgICAgIHB1c2goQGltcGxDb250ZW50LCAifTtc
biIpOworCisgICAgfQorCisgICAgbXkgJGhhc19hdHRyaWJ1dGVzID0gMDsKKyAgICBpZiAoQCRh
dHRyaWJ1dGVzKSB7CisgICAgICAkaGFzX2F0dHJpYnV0ZXMgPSAxOworICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBhdHRyc1tdID0ge1xuIik7
CisgICAgICBHZW5lcmF0ZUJhdGNoZWRBdHRyaWJ1dGVEYXRhKCRpbnRlcmZhY2VOYW1lLCAkYXR0
cmlidXRlcyk7CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn07XG4iKTsKKyAgICB9CisKKyAg
ICAjIFNldHVwIGNvbnN0YW50cworICAgIG15ICRoYXNfY29uc3RhbnRzID0gMDsKKyAgICBpZiAo
QHskZGF0YU5vZGUtPmNvbnN0YW50c30pIHsKKyAgICAgICRoYXNfY29uc3RhbnRzID0gMTsKKyAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGNvbnN0IEJhdGNoZWRDb25zdGFudCBjb25z
dHNbXSA9IHtcbiIpOworICAgIH0KKyAgICBmb3JlYWNoIG15ICRjb25zdGFudCAoQHskZGF0YU5v
ZGUtPmNvbnN0YW50c30pIHsKKyAgICAgIG15ICRuYW1lID0gJGNvbnN0YW50LT5uYW1lOworICAg
ICAgbXkgJHZhbHVlID0gJGNvbnN0YW50LT52YWx1ZTsKKyAgICAgICMgVE9ETyB3ZSBuZWVkIHRo
ZSBzdGF0aWNfY2FzdCBoZXJlIG9ubHkgYmVjYXVzZSBvZiBvbmUgY29uc3RhbnQsIE5vZGVGaWx0
ZXIuaWRsCisgICAgICAjIGRlZmluZXMgImNvbnN0IHVuc2lnbmVkIGxvbmcgU0hPV19BTEwgPSAw
eEZGRkZGRkZGIi4gIEl0IHdvdWxkIGJlIGJldHRlciBpZiB3ZQorICAgICAgIyBoYW5kbGVkIHRo
aXMgaGVyZSwgYW5kIGNvbnZlcnRlZCBpdCB0byBhIC0xIGNvbnN0YW50IGluIHRoZSBjKysgb3V0
cHV0LgorICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgeyAiJHtuYW1lfSIsIHN0
YXRpY19jYXN0PHNpZ25lZCBpbnQ+KCR2YWx1ZSkgfSwKK0VORAorICAgIH0KKyAgICBpZiAoJGhh
c19jb25zdGFudHMpIHsKKyAgICAgIHB1c2goQGltcGxDb250ZW50LCAifTtcbiIpOworICAgIH0K
KworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJ9IC8vIG5hbWVzcGFjZSAke2ludGVyZmFj
ZU5hbWV9SW50ZXJuYWxcblxuIik7CisKKyAgICBteSAkYWNjZXNzX2NoZWNrID0gIi8qIG5vIGFj
Y2VzcyBjaGVjayAqLyI7CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkNoZWNrRG9tYWluU2VjdXJpdHkifSAmJgorICAgICAgICAhKCRpbnRlcmZhY2VOYW1lIGVxICJE
T01XaW5kb3ciKSkgeworICAgICAgJGFjY2Vzc19jaGVjayA9ICJpbnN0YW5jZS0+U2V0QWNjZXNz
Q2hlY2tDYWxsYmFja3MoVjhDdXN0b206OnY4JHtpbnRlcmZhY2VOYW1lfU5hbWVkU2VjdXJpdHlD
aGVjaywgVjhDdXN0b206OnY4JHtpbnRlcmZhY2VOYW1lfUluZGV4ZWRTZWN1cml0eUNoZWNrLCB2
ODo6SW50ZWdlcjo6TmV3KFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4Ojoke2NsYXNz
SW5kZXh9KSkpOyI7CisgICAgfQorCisgICAgIyBGb3IgdGhlIERPTVdpbmRvdyBpbnRlcmZhY2Us
IGdlbmVyYXRlIHRoZSBzaGFkb3cgb2JqZWN0IHRlbXBsYXRlCisgICAgIyBjb25maWd1cmF0aW9u
IG1ldGhvZC4KKyAgICBpZiAoJGltcGxDbGFzc05hbWUgZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAg
IHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CitzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdFRlbXBsYXRlPiBDb25maWd1cmVTaGFkb3dPYmplY3RUZW1wbGF0ZSh2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0VGVtcGxhdGU+IHRlbXBsKSB7CisgIEJhdGNoQ29uZmlndXJlQXR0cmlidXRl
cyh0ZW1wbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dFRlbXBsYXRlPigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93X2F0dHJzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNoYWRvd19hdHRycykvc2l6ZW9mKCpz
aGFkb3dfYXR0cnMpKTsKKyAgcmV0dXJuIHRlbXBsOworfQorRU5ECisgICAgfQorCisgICAgIyBH
ZW5lcmF0ZSB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbiBtZXRob2QKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIDw8RU5EKTsKK3N0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gQ29uZmlndXJlJHtjbGFzc05hbWV9VGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IGRlc2MpIHsKKyAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4g
aW5zdGFuY2UgPSBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCk7CisgIGluc3RhbmNlLT5TZXRJbnRl
cm5hbEZpZWxkQ291bnQoMik7CisgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZhdWx0X3Np
Z25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjKTsKKyAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3RUZW1wbGF0ZT4gcHJvdG8gPSBkZXNjLT5Qcm90b3R5cGVUZW1wbGF0ZSgpOworICAkYWNjZXNz
X2NoZWNrCitFTkQKKworCisgICAgIyBTZXQgdXAgb3VyIGF0dHJpYnV0ZXMgaWYgd2UgaGF2ZSB0
aGVtCisgICAgaWYgKCRoYXNfYXR0cmlidXRlcykgeworICAgICAgcHVzaChAaW1wbENvbnRlbnQs
IDw8RU5EKTsKKyAgQmF0Y2hDb25maWd1cmVBdHRyaWJ1dGVzKGluc3RhbmNlLCBwcm90bywgYXR0
cnMsIHNpemVvZihhdHRycykvc2l6ZW9mKCphdHRycykpOworRU5ECisgICAgfQorCisgICAgIyBE
ZWZpbmUgb3VyIGZ1bmN0aW9ucyB3aXRoIFNldCgpIG9yIFNldEFjY2Vzc29yKCkKKyAgICBmb3Jl
YWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgIG15ICRh
dHRyRXh0ID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlczsKKyAgICAg
IG15ICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CisKKyAgICAgIG15ICRwcm9w
ZXJ0eV9hdHRyaWJ1dGVzID0gInY4OjpEb250RGVsZXRlIjsKKyAgICAgIGlmICgkYXR0ckV4dC0+
eyJEb250RW51bSJ9KSB7CisgICAgICAgICRwcm9wZXJ0eV9hdHRyaWJ1dGVzIC49ICJ8djg6OkRv
bnRFbnVtIjsKKyAgICAgIH0KKyAgICAgIGlmICgkYXR0ckV4dC0+eyJWOFJlYWRPbmx5In0pIHsK
KyAgICAgICAgJHByb3BlcnR5X2F0dHJpYnV0ZXMgLj0gInx2ODo6UmVhZE9ubHkiOworICAgICAg
fQorCisgICAgICBteSAkY29tbWVudEluZm8gPSAiRnVuY3Rpb24gJyRuYW1lJyAoRXh0QXR0cjog
JyIgLiBqb2luKCcgJywga2V5cygleyRhdHRyRXh0fSkpIC4gIicpIjsKKworICAgICAgbXkgJHRl
bXBsYXRlID0gInByb3RvIjsKKyAgICAgIGlmICgkYXR0ckV4dC0+eyJWOE9uSW5zdGFuY2UifSkg
eworICAgICAgICAkdGVtcGxhdGUgPSAiaW5zdGFuY2UiOworICAgICAgfQorCisgICAgICBpZiAo
JGF0dHJFeHQtPnsiRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5In0gJiYKKyAgICAgICAgICAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tEb21haW5TZWN1cml0eSJ9IHx8ICRp
bnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSkgeworICAgICAgICAjIE1hcmsgdGhlIGFjY2Vz
c29yIGFzIFJlYWRPbmx5IGFuZCBzZXQgaXQgb24gdGhlIHByb3RvIG9iamVjdCBzbworICAgICAg
ICAjIGl0IGNhbiBiZSBzaGFkb3dlZC4gVGhpcyBpcyByZWFsbHkgYSBoYWNrIHRvIG1ha2UgaXQg
d29yay4KKyAgICAgICAgIyBUaGVyZSBhcmUgc2V2ZXJhbCBzY2VuZXJpYSB0byBjYWxsIGludG8g
dGhlIGFjY2Vzc29yOgorICAgICAgICAjICAgMSkgZnJvbSB0aGUgc2FtZSBkb21haW46ICJ3aW5k
b3cub3BlbiI6CisgICAgICAgICMgICAgICB0aGUgYWNjZXNzb3IgZmluZHMgdGhlIERPTSB3cmFw
cGVyIGluIHRoZSBwcm90byBjaGFpbjsKKyAgICAgICAgIyAgIDIpIGZyb20gdGhlIHNhbWUgZG9t
YWluOiAid2luZG93Ll9fcHJvdG9fXy5vcGVuIjoKKyAgICAgICAgIyAgICAgIHRoZSBhY2Nlc3Nv
ciB3aWxsIE5PVCBmaW5kIGEgRE9NIHdyYXBwZXIgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgorICAg
ICAgICAjICAgMykgZnJvbSBhbm90aGVyIGRvbWFpbjogIndpbmRvdy5vcGVuIjoKKyAgICAgICAg
IyAgICAgIHRoZSBhY2Nlc3MgZmluZCB0aGUgRE9NIHdyYXBwZXIgaW4gdGhlIHByb3RvdHlwZSBj
aGFpbgorICAgICAgICAjICAgIndpbmRvdy5fX3Byb3RvX18ub3BlbiIgZnJvbSBhbm90aGVyIGRv
bWFpbiB3aWxsIGZhaWwgd2hlbgorICAgICAgICAjICAgYWNjZXNzaW5nICdfX3Byb3RvX18nCisg
ICAgICAgICMKKyAgICAgICAgIyBUaGUgc29sdXRpb24gaXMgdmVyeSBoYWNreSBhbmQgZnJhZ2ls
ZSwgaXQgcmVhbGx5IG5lZWRzIHRvIGJlIHJlcGxhY2VkCisgICAgICAgICMgYnkgYSBiZXR0ZXIg
c29sdXRpb24uCisgICAgICAgICRwcm9wZXJ0eV9hdHRyaWJ1dGVzIC49ICJ8djg6OlJlYWRPbmx5
IjsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKworICAvLyAkY29tbWVudElu
Zm8KKyAgJHRlbXBsYXRlLT5TZXRBY2Nlc3NvcigKKyAgICAgIHY4OjpTdHJpbmc6Ok5ldygiJG5h
bWUiKSwKKyAgICAgICR7aW50ZXJmYWNlTmFtZX1JbnRlcm5hbDo6JHtuYW1lfUF0dHJHZXR0ZXIs
CisgICAgICAwLAorICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksCisgICAgICB2ODo6QUxM
X0NBTl9SRUFELAorICAgICAgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPigkcHJv
cGVydHlfYXR0cmlidXRlcykpOworRU5ECisgICAgICAgIG5leHQ7CisgICAgICB9CisKKyAgICAg
IG15ICRzaWduYXR1cmUgPSAiZGVmYXVsdF9zaWduYXR1cmUiOworICAgICAgaWYgKCRhdHRyRXh0
LT57IlY4RG9Ob3RDaGVja1NpZ25hdHVyZSJ9KXsKKyAgICAgICAgJHNpZ25hdHVyZSA9ICJ2ODo6
TG9jYWw8djg6OlNpZ25hdHVyZT4oKSI7CisgICAgICB9CisKKyAgICAgIGlmIChSZXF1aXJlc0N1
c3RvbVNpZ25hdHVyZSgkZnVuY3Rpb24pKSB7CisgICAgICAgICRzaWduYXR1cmUgPSAiJHtuYW1l
fV9zaWduYXR1cmUiOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAvLyBDdXN0b20g
U2lnbmF0dXJlICckbmFtZSdcbiIsIENyZWF0ZUN1c3RvbVNpZ25hdHVyZSgkZnVuY3Rpb24pKTsK
KyAgICAgIH0KKworICAgICAgIyBOb3JtYWwgZnVuY3Rpb24gY2FsbCBpcyBhIHRlbXBsYXRlCisg
ICAgICBteSAkdGVtcGxhdGVGdW5jdGlvbiA9IEdlbmVyYXRlTmV3RnVuY3Rpb25UZW1wbGF0ZSgk
ZnVuY3Rpb24sICRkYXRhTm9kZSwgJHNpZ25hdHVyZSk7CisKKworICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIDw8RU5EKTsKKworICAvLyAkY29tbWVudEluZm8KKyAgJHt0ZW1wbGF0ZX0tPlNldCgK
KyAgICAgIHY4OjpTdHJpbmc6Ok5ldygiJG5hbWUiKSwKKyAgICAgICR0ZW1wbGF0ZUZ1bmN0aW9u
LAorICAgICAgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPigkcHJvcGVydHlfYXR0
cmlidXRlcykpOworRU5ECisgICAgfQorCisgICAgIyBzZXQgdGhlIHN1cGVyIGRlc2NyaXB0b3IK
KyAgICBmb3JlYWNoIChAeyRkYXRhTm9kZS0+cGFyZW50c30pIHsKKyAgICAgIG15ICRwYXJlbnQg
PSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJF8pOworICAgICAgaWYgKCRwYXJlbnQgZXEg
IkV2ZW50VGFyZ2V0IikgeyBuZXh0OyB9CisgICAgICAkaW1wbEluY2x1ZGVzeyJWOCR7cGFyZW50
fS5oIn0gPSAxOworICAgICAgbXkgJHBhcmVudENsYXNzSW5kZXggPSB1YygkY29kZUdlbmVyYXRv
ci0+U3RyaXBNb2R1bGUoJHBhcmVudCkpOworICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgIGRl
c2MtPkluaGVyaXQoVjhQcm94eTo6R2V0VGVtcGxhdGUoVjhDbGFzc0luZGV4Ojoke3BhcmVudENs
YXNzSW5kZXh9KSk7XG4iKTsKKyAgICAgIGxhc3Q7CisgICAgfQorCisgICAgIyBTZXQgdGhlIGNs
YXNzIG5hbWUuICBUaGlzIGlzIHVzZWQgd2hlbiBwcmludGluZyBvYmplY3RzLgorICAgIHB1c2go
QGltcGxDb250ZW50LCAiICBkZXNjLT5TZXRDbGFzc05hbWUodjg6OlN0cmluZzo6TmV3KFwiIiAu
IEdldENsYXNzTmFtZSgke2ludGVyZmFjZU5hbWV9KSAuICJcIikpO1xuIik7CisKKyAgICBpZiAo
JGhhc19jb25zdGFudHMpIHsKKyAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgIEJh
dGNoQ29uZmlndXJlQ29uc3RhbnRzKGRlc2MsIHByb3RvLCBjb25zdHMsIHNpemVvZihjb25zdHMp
L3NpemVvZigqY29uc3RzKSk7CitFTkQKKyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
PDxFTkQpOworICByZXR1cm4gZGVzYzsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0UmF3VGVtcGxhdGUoKSB7CisgIHN0YXRpYyB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9X3Jhd19jYWNoZV87
CisgIGlmICgke2NsYXNzTmFtZX1fcmF3X2NhY2hlXy5Jc0VtcHR5KCkpIHsKKyAgICB2ODo6SGFu
ZGxlU2NvcGUgc2NvcGU7CisgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvblRlbXBsYXRlPiByZXN1
bHQgPSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4UHJveHk6OkNoZWNrTmV3TGVnYWwpOwor
ICAgICR7Y2xhc3NOYW1lfV9yYXdfY2FjaGVfID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+OjpOZXcocmVzdWx0KTsKKyAgfQorICByZXR1cm4gJHtjbGFzc05hbWV9X3Jhd19j
YWNoZV87Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNz
TmFtZX06OkdldFRlbXBsYXRlKCkgeworICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfV9jYWNoZV87CisgIGlmICgke2NsYXNzTmFtZX1fY2Fj
aGVfLklzRW1wdHkoKSkKKyAgICAke2NsYXNzTmFtZX1fY2FjaGVfID0gQ29uZmlndXJlJHtjbGFz
c05hbWV9VGVtcGxhdGUoR2V0UmF3VGVtcGxhdGUoKSk7CisgIHJldHVybiAke2NsYXNzTmFtZX1f
Y2FjaGVfOworfQorCitib29sICR7Y2xhc3NOYW1lfTo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHZhbHVlKSB7CisgIHJldHVybiBHZXRSYXdUZW1wbGF0ZSgpLT5IYXNJbnN0YW5j
ZSh2YWx1ZSk7Cit9CisKK0VORAorCisgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJET01XaW5k
b3ciKSB7CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwordjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdFRlbXBsYXRlPiBWOERPTVdpbmRvdzo6R2V0U2hhZG93T2JqZWN0VGVtcGxhdGUo
KSB7CisgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0VGVtcGxhdGU+IFY4RE9NV2lu
ZG93U2hhZG93T2JqZWN0X2NhY2hlXzsKKyAgaWYgKFY4RE9NV2luZG93U2hhZG93T2JqZWN0X2Nh
Y2hlXy5Jc0VtcHR5KCkpIHsKKyAgICBWOERPTVdpbmRvd1NoYWRvd09iamVjdF9jYWNoZV8gPSB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0VGVtcGxhdGU+OjpOZXcodjg6Ok9iamVjdFRlbXBsYXRl
OjpOZXcoKSk7CisgICAgQ29uZmlndXJlU2hhZG93T2JqZWN0VGVtcGxhdGUoVjhET01XaW5kb3dT
aGFkb3dPYmplY3RfY2FjaGVfKTsKKyAgfQorICByZXR1cm4gVjhET01XaW5kb3dTaGFkb3dPYmpl
Y3RfY2FjaGVfOworfQorRU5ECisgICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5E
KTsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK0VORAorCisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsOwor
fQorCisKK3N1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygpCit7CisgIG15ICRmdW5jdGlv
biA9IHNoaWZ0OworICBteSAkbnVtYmVyT2ZQYXJhbWV0ZXJzID0gc2hpZnQ7CisgIG15ICRpbmRl
bnQgPSBzaGlmdDsKKyAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKworICBteSAkbmFtZSA9
ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOworICBteSAkaXNQb2RUeXBlID0gSXNQb2RUeXBl
KCRpbXBsQ2xhc3NOYW1lKTsKKyAgbXkgJHJldHVyblR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3Ry
aXBNb2R1bGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpOworICBteSAkcmV0dXJuc1BvZFR5
cGUgPSBJc1BvZFR5cGUoJHJldHVyblR5cGUpOworICBteSAkbmF0aXZlUmV0dXJuVHlwZSA9IEdl
dE5hdGl2ZVR5cGUoJHJldHVyblR5cGUsIDApOworICBteSAkcmVzdWx0ID0gIiI7CisKKyAgIyBT
cGVjaWFsIGNhc2U6IFNWRyBtYXRyaXggdHJhbnNmb3JtIG1ldGhvZHMgc2hvdWxkIG5vdCBtdXRh
dGUKKyAgIyB0aGUgbWF0cml4IGJ1dCByZXR1cm4gYSBjb3B5CisgIG15ICRjb3B5Rmlyc3QgPSAw
OworICBpZiAoJGltcGxDbGFzc05hbWUgZXEgIlNWR01hdHJpeCIgJiYgJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPnR5cGUgZXEgIlNWR01hdHJpeCIpIHsKKyAgICAkY29weUZpcnN0ID0gMTsKKyAgfQor
CisgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57InY4aW1w
bG5hbWUifSkgeworICAgICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJ2OGltcGxuYW1lIn07CisgIH0KKworICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uIn0pIHsKKyAg
ICAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1w
bGVtZW50YXRpb25GdW5jdGlvbiJ9OworICB9CisKKyAgbXkgJGZ1bmN0aW9uU3RyaW5nID0gImlt
cC0+JHtuYW1lfSgiOworCisgIGlmICgkY29weUZpcnN0KSB7CisgICAgJGZ1bmN0aW9uU3RyaW5n
ID0gInJlc3VsdC4ke25hbWV9KCI7CisgIH0KKworICBteSAkcmV0dXJuc0xpc3RJdGVtUG9kVHlw
ZSA9IDA7CisgICMgU1ZHIGxpc3RzIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBQT0QgdHlwZXMgcmVx
dWlyZSBzcGVjaWFsIGhhbmRsaW5nCisgIGlmIChJc1NWR0xpc3RUeXBlTmVlZGluZ1NwZWNpYWxI
YW5kbGluZygkaW1wbENsYXNzTmFtZSkgJiYgSXNTVkdMaXN0TWV0aG9kKCRuYW1lKSAmJiAkcmV0
dXJuc1BvZFR5cGUpIHsKKyAgICAkcmV0dXJuc0xpc3RJdGVtUG9kVHlwZSA9IDE7CisgICAgJHJl
c3VsdCAuPSAkaW5kZW50IC4gIlNWR0xpc3Q8UmVmUHRyPFNWR1BPRExpc3RJdGVtPCRuYXRpdmVS
ZXR1cm5UeXBlPiA+ID4qIGxpc3RJbXAgPSBpbXA7XG4iOworICAgICRmdW5jdGlvblN0cmluZyA9
ICJsaXN0SW1wLT4ke25hbWV9KCI7CisgIH0KKworICBteSAkZmlyc3QgPSAxOworICBteSAkaW5k
ZXggPSAwOworICBteSAkbm9kZVRvUmV0dXJuID0gMDsKKworICBmb3JlYWNoIG15ICRwYXJhbWV0
ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgIGlmICgkaW5kZXggZXEgJG51bWJl
ck9mUGFyYW1ldGVycykgeworICAgICAgbGFzdDsKKyAgICB9CisgICAgaWYgKCRmaXJzdCkgeyAk
Zmlyc3QgPSAwOyB9CisgICAgZWxzZSB7ICRmdW5jdGlvblN0cmluZyAuPSAiLCAiOyB9CisgICAg
bXkgJHBhcmFtTmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7CisgICAgbXkgJHBhcmFtVHlwZSA9ICRw
YXJhbWV0ZXItPnR5cGU7CisKKyAgICAjIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLi4uIHdlIG5l
ZWQgdG8gY29udmVydCBwYXJhbWV0ZXJzIHRvIG1ldGhvZHMgb24gU1ZHIGxpc3RzCisgICAgIyBv
ZiBQT0QgdHlwZXMgd2hpY2ggYXJlIGl0ZW1zIGluIHRoZSBsaXN0IHRvIGFwcHJvcHJpYXRlIFNW
R0xpc3Q8PiBpbnN0YW5jZXMKKyAgICBpZiAoJHJldHVybnNMaXN0SXRlbVBvZFR5cGUgJiYgJHBh
cmFtVHlwZSAuICJMaXN0IiBlcSAkaW1wbENsYXNzTmFtZSkgeworICAgICAgJHBhcmFtTmFtZSA9
ICJTVkdQT0RMaXN0SXRlbTwiIC4gR2V0TmF0aXZlVHlwZSgkcGFyYW1UeXBlLCAxKSAuICI+Ojpj
b3B5KCRwYXJhbU5hbWUpIjsKKyAgICB9CisKKyAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAi
Tm9kZUZpbHRlciIpIHsKKyAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIkcGFyYW1OYW1lLmdl
dCgpIjsKKyAgICB9IGVsc2UgeworICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gJHBhcmFtTmFt
ZTsKKyAgICB9CisKKyAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJl
dHVybiJ9KSB7CisgICAgICAkbm9kZVRvUmV0dXJuID0gJHBhcmFtZXRlci0+bmFtZTsKKyAgICB9
CisgICAgJGluZGV4Kys7CisgIH0KKworICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Bcmd1bWVudEhhbmRsaW5nIn0pIHsKKyAgICAkZnVuY3Rp
b25TdHJpbmcgLj0gIiwgIiBpZiBub3QgJGZpcnN0OworICAgICRmdW5jdGlvblN0cmluZyAuPSAi
JmNhbGxTdGFjayI7CisgICAgaWYgKCRmaXJzdCkgeyAkZmlyc3QgPSAwOyB9CisgIH0KKworICBp
ZiAoQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9KSB7CisgICAgJGZ1bmN0aW9uU3RyaW5n
IC49ICIsICIgaWYgbm90ICRmaXJzdDsKKyAgICAkZnVuY3Rpb25TdHJpbmcgLj0gImVjIjsKKyAg
fQorICAkZnVuY3Rpb25TdHJpbmcgLj0gIikiOworCisgIGlmICgoSXNSZWZQdHJUeXBlKCRyZXR1
cm5UeXBlKSB8fCAkcmV0dXJuc0xpc3RJdGVtUG9kVHlwZSkgJiYKKyAgICAgICEkbm9kZVRvUmV0
dXJuKSB7CisgICAgIyBXZSBkb24ndCB1c2UgZ2V0UHRyIHdoZW4gJG5vZGVUb1JldHVybiBiZWNh
dXNlIHRoYXQgc2l0dWF0aW9uIGlzCisgICAgIyBzcGVjaWFsLWNhc2VkIGJlbG93IHRvIHJldHVy
biBhIGJvb2wuCisgICAgJGltcGxJbmNsdWRlc3sid3RmL0dldFB0ci5oIn0gPSAxOworICAgICRm
dW5jdGlvblN0cmluZyA9ICJXVEY6OmdldFB0cigiIC4gJGZ1bmN0aW9uU3RyaW5nIC4gIikiOwor
ICB9CisKKyAgaWYgKCRub2RlVG9SZXR1cm4pIHsKKyAgICAjIFNwZWNpYWwgY2FzZSBmb3IgaW5z
ZXJ0QmVmb3JlLCByZXBsYWNlQ2hpbGQsIHJlbW92ZUNoaWxkIGFuZAorICAgICMgYXBwZW5kQ2hp
bGQgZnVuY3Rpb25zIGZyb20gTm9kZS4KKyAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiYm9vbCBz
dWNjZXNzID0gJGZ1bmN0aW9uU3RyaW5nO1xuIjsKKyAgICBpZiAoQHskZnVuY3Rpb24tPnJhaXNl
c0V4Y2VwdGlvbnN9KSB7CisgICAgICAkcmVzdWx0IC49IEdlbmVyYXRlU2V0RE9NRXhjZXB0aW9u
KCRpbmRlbnQpOworICAgIH0KKyAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiaWYgKHN1Y2Nlc3Mp
XG4iOworICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIgICAgIiAuCisgICAgICAicmV0dXJuIFY4
UHJveHk6Ok5vZGVUb1Y4T2JqZWN0KCRub2RlVG9SZXR1cm4pO1xuIjsKKyAgICAkcmVzdWx0IC49
ICRpbmRlbnQgLiAicmV0dXJuIHY4OjpOdWxsKCk7XG4iOworICAgIHJldHVybiAkcmVzdWx0Owor
ICB9IGVsc2lmICgkcmV0dXJuVHlwZSBlcSAidm9pZCIpIHsKKyAgICAkcmVzdWx0IC49ICRpbmRl
bnQgLiAiJGZ1bmN0aW9uU3RyaW5nO1xuIjsKKyAgfSBlbHNpZiAoJGNvcHlGaXJzdCkgeworICAg
ICRyZXN1bHQgLj0KKyAgICAgICRpbmRlbnQgLiBHZXROYXRpdmVUeXBlKCRyZXR1cm5UeXBlLCAw
KSAuICIgcmVzdWx0ID0gKmltcDtcbiIgLgorICAgICAgJGluZGVudCAuICIkZnVuY3Rpb25TdHJp
bmc7XG4iOworICB9IGVsc2lmICgkcmV0dXJuc0xpc3RJdGVtUG9kVHlwZSkgeworICAgICRyZXN1
bHQgLj0gJGluZGVudCAuICJSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08JG5hdGl2ZVJldHVyblR5cGU+
ID4gcmVzdWx0ID0gJGZ1bmN0aW9uU3RyaW5nO1xuIjsKKyAgfSBlbHNlIHsKKyAgICAkcmVzdWx0
IC49ICRpbmRlbnQgLiAkbmF0aXZlUmV0dXJuVHlwZSAuICIgcmVzdWx0ID0gJGZ1bmN0aW9uU3Ry
aW5nO1xuIjsKKyAgfQorCisgIGlmIChAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIHsK
KyAgICAgICRyZXN1bHQgLj0gR2VuZXJhdGVTZXRET01FeGNlcHRpb24oJGluZGVudCk7CisgIH0K
KworICBteSAkcmV0dXJuID0gInJlc3VsdCI7CisgIGlmIChJc1JlZlB0clR5cGUoJHJldHVyblR5
cGUpIHx8ICRyZXR1cm5zTGlzdEl0ZW1Qb2RUeXBlKSB7CisgICAgJGltcGxJbmNsdWRlc3sid3Rm
L0dldFB0ci5oIn0gPSAxOworICAgICRyZXR1cm4gPSAiV1RGOjpnZXRQdHIoIiAuICRyZXR1cm4g
LiAiKSI7CisgIH0KKworICAjIElmIHRoZSByZXR1cm4gdHlwZSBpcyBhIFBPRCB0eXBlLCBzZXBh
cmF0ZSBvdXQgdGhlIHdyYXBwZXIgZ2VuZXJhdGlvbgorICBpZiAoJHJldHVybnNMaXN0SXRlbVBv
ZFR5cGUpIHsKKyAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiVjhTVkdQT0RUeXBlV3JhcHBlcjwi
IC4gJG5hdGl2ZVJldHVyblR5cGUgLiAiPiogd3JhcHBlciA9IG5ldyAiOworICAgICRyZXN1bHQg
Lj0gIlY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDwiIC4gJG5hdGl2ZVJldHVyblR5
cGUgLiAiPigkcmV0dXJuLCBpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpO1xuIjsKKyAg
ICAkcmV0dXJuID0gIndyYXBwZXIiOworICB9IGVsc2lmICgkcmV0dXJuc1BvZFR5cGUpIHsKKyAg
ICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiVjhTVkdQT0RUeXBlV3JhcHBlcjwiIC4gJG5hdGl2ZVJl
dHVyblR5cGUgLiAiPiogd3JhcHBlciA9ICI7CisgICAgJHJlc3VsdCAuPSBHZW5lcmF0ZVNWR1N0
YXRpY1BvZFR5cGVXcmFwcGVyKCRyZXR1cm5UeXBlLCAkcmV0dXJuKSAuICI7XG4iOworICAgICRy
ZXR1cm4gPSAid3JhcHBlciI7CisgIH0KKworICBteSAkZ2VuZXJhdGVkU1ZHQ29udGV4dFJldHJp
ZXZhbCA9IDA7CisgICMgSWYgdGhlIHJldHVybiB0eXBlIG5lZWRzIGFuIFNWRyBjb250ZXh0LCBv
dXRwdXQgaXQKKyAgaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRyZXR1cm5U
eXBlKSkgeworICAgICRyZXN1bHQgLj0gR2VuZXJhdGVTVkdDb250ZXh0QXNzaWdubWVudCgkaW1w
bENsYXNzTmFtZSwgJHJldHVybiwgJGluZGVudCk7CisgICAgJGdlbmVyYXRlZFNWR0NvbnRleHRS
ZXRyaWV2YWwgPSAxOworICB9CisKKyAgaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1l
dGVyKCRpbXBsQ2xhc3NOYW1lKSAmJiAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvICYmIElzU1ZH
TGlzdE11dGF0b3IoJG5hbWUpKSB7CisgICAgaWYgKCEkZ2VuZXJhdGVkU1ZHQ29udGV4dFJldHJp
ZXZhbCkgeworICAgICAgJHJlc3VsdCAuPSBHZW5lcmF0ZVNWR0NvbnRleHRSZXRyaWV2YWwoJGlt
cGxDbGFzc05hbWUsICRpbmRlbnQpOworICAgICAgJGdlbmVyYXRlZFNWR0NvbnRleHRSZXRyaWV2
YWwgPSAxOworICAgIH0KKworICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJjb250ZXh0LT5zdmdB
dHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7XG4iOworICAg
ICRpbXBsSW5jbHVkZXN7IlNWR0VsZW1lbnQuaCJ9ID0gMTsKKyAgfQorCisgICMgSWYgdGhlIGlt
cGxlbWVudGluZyBjbGFzcyBpcyBhIFBPRCB0eXBlLCBjb21taXQgY2hhbmdlcworICBpZiAoJGlz
UG9kVHlwZSkgeworICAgIGlmICghJGdlbmVyYXRlZFNWR0NvbnRleHRSZXRyaWV2YWwpIHsKKyAg
ICAgICRyZXN1bHQgLj0gR2VuZXJhdGVTVkdDb250ZXh0UmV0cmlldmFsKCRpbXBsQ2xhc3NOYW1l
LCAkaW5kZW50KTsKKyAgICAgICRnZW5lcmF0ZWRTVkdDb250ZXh0UmV0cmlldmFsID0gMTsKKyAg
ICB9CisKKyAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiaW1wX3dyYXBwZXItPmNvbW1pdENoYW5n
ZShpbXBfaW5zdGFuY2UsIGNvbnRleHQpO1xuIjsKKyAgfQorCisgIGlmICgkcmV0dXJuc1BvZFR5
cGUpIHsKKyAgICBteSAkY2xhc3NJbmRleCA9IHVjKCRyZXR1cm5UeXBlKTsKKyAgICAkcmVzdWx0
IC49ICRpbmRlbnQgLiAicmV0dXJuIFY4UHJveHk6OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4Ojok
Y2xhc3NJbmRleCwgd3JhcHBlcik7XG4iOworICB9IGVsc2UgeworICAgICRyZXN1bHQgLj0gJGlu
ZGVudCAuICJyZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwg
JHJldHVybikgLiAiO1xuIjsKKyAgfQorCisgIHJldHVybiAkcmVzdWx0OworfQorCisKKyMgR2V0
IHRoZSBjbGFzcyBuYW1lIHVzZWQgZm9yIHByaW50aW5nIGphdmFzY3JpcHQgRE9NLW9iamVjdCB3
cmFwcGVycy4KK3N1YiBHZXRDbGFzc05hbWUKK3sKKyAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgcmV0
dXJuICJIVE1MQ29sbGVjdGlvbiIgaWYgJHR5cGUgZXEgIlVuZGV0ZWN0YWJsZUhUTUxDb2xsZWN0
aW9uIjsKKyAgcmV0dXJuICR0eXBlOworfQorCisKK3N1YiBHZXROYXRpdmVUeXBlRnJvbVNpZ25h
dHVyZQoreworICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKKyAgICBteSAkaXNQYXJhbWV0ZXIg
PSBzaGlmdDsKKworICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRz
aWduYXR1cmUtPnR5cGUpOworCisgICAgcmV0dXJuIEdldE5hdGl2ZVR5cGUoJHR5cGUsICRpc1Bh
cmFtZXRlcik7Cit9CisKK3N1YiBJc1JlZlB0clR5cGUKK3sKKyAgICBteSAkdHlwZSA9IHNoaWZ0
OworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJBdHRyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlw
ZSBlcSAiQ2FudmFzR3JhZGllbnQiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDbGllbnRS
ZWN0IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2xpZW50UmVjdExpc3QiOworICAgIHJl
dHVybiAxIGlmICR0eXBlIGVxICJDREFUQVNlY3Rpb24iOworICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICJDb21tZW50IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ1NTUnVsZSI7CisgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNTU1N0eWxlUnVsZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5
cGUgZXEgIkNTU0NoYXJzZXRSdWxlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ1NTSW1w
b3J0UnVsZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNTU01lZGlhUnVsZSI7CisgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNTU0ZvbnRGYWNlUnVsZSI7CisgICAgcmV0dXJuIDEgaWYg
JHR5cGUgZXEgIkNTU1BhZ2VSdWxlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ1NTUHJp
bWl0aXZlVmFsdWUiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDU1NTdHlsZVNoZWV0IjsK
KyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ1NTU3R5bGVEZWNsYXJhdGlvbiI7CisgICAgcmV0
dXJuIDEgaWYgJHR5cGUgZXEgIkNTU1ZhbHVlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
Q1NTUnVsZUxpc3QiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJEYXRhYmFzZSI7CisgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgIkRvY3VtZW50IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBl
cSAiRG9jdW1lbnRGcmFnbWVudCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkRvY3VtZW50
VHlwZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkVsZW1lbnQiOworICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJFbnRpdHlSZWZlcmVuY2UiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVx
ICJFdmVudCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkhUTUxDb2xsZWN0aW9uIjsKKyAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiSFRNTERvY3VtZW50IjsKKyAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiSFRNTEVsZW1lbnQiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJIVE1MT3B0
aW9uc0NvbGxlY3Rpb24iOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJJbWFnZURhdGEiOwor
ICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJNZWRpYUVycm9yIjsKKyAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiTWltZVR5cGUiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJOb2RlIjsKKyAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiTm9kZUxpc3QiOworICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICJOb2RlRmlsdGVyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiTm9kZUl0ZXJhdG9y
IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiTlNSZXNvbHZlciI7CisgICAgcmV0dXJuIDEg
aWYgJHR5cGUgZXEgIlBsdWdpbiI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlByb2Nlc3Np
bmdJbnN0cnVjdGlvbiI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlJhbmdlIjsKKyAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiVGV4dCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlRl
eHRNZXRyaWNzIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiVGltZVJhbmdlcyI7CisgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgIlRyZWVXYWxrZXIiOworICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICJXZWJLaXRDU1NNYXRyaXgiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJLaXRQ
b2ludCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlhQYXRoRXhwcmVzc2lvbiI7CisgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciI7CisgICAgcmV0dXJuIDEgaWYg
JHR5cGUgZXEgIlhQYXRoUmVzdWx0IjsKKworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTVkdB
bmdsZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSI7Cisg
ICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZUxpc3QiOworICAgIHJl
dHVybiAxIGlmICR0eXBlID1+IC9eU1ZHUGF0aFNlZy87CisKKyAgICByZXR1cm4gMSBpZiAkdHlw
ZSA9fiAvXlNWR0FuaW1hdGVkLzsKKworICAgIHJldHVybiAwOworfQorCitzdWIgSXNWaWRlb0Ns
YXNzTmFtZQoreworICAgIG15ICRjbGFzcyA9IHNoaWZ0OworICAgIHJldHVybiAxIGlmICRjbGFz
cyBlcSAiVjhIVE1MQXVkaW9FbGVtZW50IjsKKyAgICByZXR1cm4gMSBpZiAkY2xhc3MgZXEgIlY4
SFRNTE1lZGlhRWxlbWVudCI7CisgICAgcmV0dXJuIDEgaWYgJGNsYXNzIGVxICJWOEhUTUxTb3Vy
Y2VFbGVtZW50IjsKKyAgICByZXR1cm4gMSBpZiAkY2xhc3MgZXEgIlY4SFRNTFZpZGVvRWxlbWVu
dCI7CisgICAgcmV0dXJuIDEgaWYgJGNsYXNzIGVxICJWOE1lZGlhRXJyb3IiOworICAgIHJldHVy
biAxIGlmICRjbGFzcyBlcSAiVjhUaW1lUmFuZ2VzIjsKKworICAgIHJldHVybiAwOworfQorCitz
dWIgSXNXb3JrZXJDbGFzc05hbWUKK3sKKyAgICBteSAkY2xhc3MgPSBzaGlmdDsKKyAgICByZXR1
cm4gMSBpZiAkY2xhc3MgZXEgIlY4V29ya2VyIjsKKyAgICByZXR1cm4gMSBpZiAkY2xhc3MgZXEg
IlY4V29ya2VyQ29udGV4dCI7CisgICAgcmV0dXJuIDEgaWYgJGNsYXNzIGVxICJWOFdvcmtlckxv
Y2F0aW9uIjsKKyAgICByZXR1cm4gMSBpZiAkY2xhc3MgZXEgIlY4V29ya2VyTmF2aWdhdG9yIjsK
KworICAgIHJldHVybiAwOworfQorCitzdWIgR2V0TmF0aXZlVHlwZQoreworICAgIG15ICR0eXBl
ID0gc2hpZnQ7CisgICAgbXkgJGlzUGFyYW1ldGVyID0gc2hpZnQ7CisKKyAgICBpZiAoJHR5cGUg
ZXEgImZsb2F0IiBvciAkdHlwZSBlcSAiQXRvbWljU3RyaW5nIiBvciAkdHlwZSBlcSAiZG91Ymxl
IikgeworICAgICAgcmV0dXJuICR0eXBlCisgICAgfQorCisgICAgcmV0dXJuICJpbnQiIGlmICR0
eXBlIGVxICJpbnQiOworICAgIHJldHVybiAiaW50IiBpZiAkdHlwZSBlcSAic2hvcnQiIG9yICR0
eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7CisgICAgcmV0dXJuICJpbnQiIGlmICR0eXBlIGVxICJs
b25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyI7CisgICAgcmV0dXJuICJ1bnNpZ25lZCBs
b25nIGxvbmciIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIGxvbmciOworICAgIHJldHVybiAi
Ym9vbCIgaWYgJHR5cGUgZXEgImJvb2xlYW4iOworICAgIHJldHVybiAiU3RyaW5nIiBpZiAkdHlw
ZSBlcSAiRE9NU3RyaW5nIjsKKyAgICByZXR1cm4gIlJhbmdlOjpDb21wYXJlSG93IiBpZiAkdHlw
ZSBlcSAiQ29tcGFyZUhvdyI7CisgICAgcmV0dXJuICJGbG9hdFJlY3QiIGlmICR0eXBlIGVxICJT
VkdSZWN0IjsKKyAgICByZXR1cm4gIkZsb2F0UG9pbnQiIGlmICR0eXBlIGVxICJTVkdQb2ludCI7
CisgICAgcmV0dXJuICJUcmFuc2Zvcm1hdGlvbk1hdHJpeCIgaWYgJHR5cGUgZXEgIlNWR01hdHJp
eCI7CisgICAgcmV0dXJuICJTVkdUcmFuc2Zvcm0iIGlmICR0eXBlIGVxICJTVkdUcmFuc2Zvcm0i
OworICAgIHJldHVybiAiU1ZHTGVuZ3RoIiBpZiAkdHlwZSBlcSAiU1ZHTGVuZ3RoIjsKKyAgICBy
ZXR1cm4gImRvdWJsZSIgaWYgJHR5cGUgZXEgIlNWR051bWJlciI7CisgICAgcmV0dXJuICJTVkdQ
YWludDo6U1ZHUGFpbnRUeXBlIiBpZiAkdHlwZSBlcSAiU1ZHUGFpbnRUeXBlIjsKKyAgICByZXR1
cm4gIkRPTVRpbWVTdGFtcCIgaWYgJHR5cGUgZXEgIkRPTVRpbWVTdGFtcCI7CisgICAgcmV0dXJu
ICJ1bnNpZ25lZCIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGludCI7CisgICAgcmV0dXJuICJ1bnNp
Z25lZCIgaWYgJHR5cGUgZXEgIlJHQkNvbG9yIjsKKyAgICByZXR1cm4gIk5vZGUqIiBpZiAkdHlw
ZSBlcSAiRXZlbnRUYXJnZXQiIGFuZCAkaXNQYXJhbWV0ZXI7CisKKyAgICByZXR1cm4gIlN0cmlu
ZyIgaWYgJHR5cGUgZXEgIkRPTVVzZXJEYXRhIjsgICMgdGVtcG9yYXJ5IGhhY2ssIFRPRE8KKwor
ICAgICMgdGVtcG9yYXJ5IGhhY2sKKyAgICByZXR1cm4gIlJlZlB0cjxOb2RlRmlsdGVyPiIgaWYg
JHR5cGUgZXEgIk5vZGVGaWx0ZXIiOworCisgICAgcmV0dXJuICJSZWZQdHI8JHt0eXBlfT4iIGlm
IElzUmVmUHRyVHlwZSgkdHlwZSkgYW5kIG5vdCAkaXNQYXJhbWV0ZXI7CisKKyAgICAjIERlZmF1
bHQsIGFzc3VtZSBuYXRpdmUgdHlwZSBpcyBhIHBvaW50ZXIgd2l0aCBzYW1lIHR5cGUgbmFtZSBh
cyBpZGwgdHlwZQorICAgIHJldHVybiAiJHt0eXBlfSoiOworfQorCisKK215ICV0eXBlQ2FuRmFp
bENvbnZlcnNpb24gPSAoCisgICAgIkF0b21pY1N0cmluZyIgPT4gMCwKKyAgICAiQXR0ciIgPT4g
MSwKKyAgICAiQ29tcGFyZUhvdyIgPT4gMCwKKyAgICAiRE9NU3RyaW5nIiA9PiAwLAorICAgICJE
T01XaW5kb3ciID0+IDAsCisgICAgIkRvY3VtZW50VHlwZSIgPT4gMCwKKyAgICAiRWxlbWVudCIg
PT4gMCwKKyAgICAiRXZlbnQiID0+IDAsCisgICAgIkV2ZW50TGlzdGVuZXIiID0+IDAsCisgICAg
IkV2ZW50VGFyZ2V0IiA9PiAwLAorICAgICJIVE1MRWxlbWVudCIgPT4gMCwKKyAgICAiSFRNTE9w
dGlvbkVsZW1lbnQiID0+IDAsCisgICAgIk5vZGUiID0+IDAsCisgICAgIk5vZGVGaWx0ZXIiID0+
IDAsCisgICAgIk1lc3NhZ2VQb3J0IiA9PiAwLAorICAgICJOU1Jlc29sdmVyIiA9PiAwLAorICAg
ICJSYW5nZSIgPT4gMCwKKyAgICAiU1FMUmVzdWx0U2V0IiA9PiAwLAorICAgICJTdG9yYWdlIiA9
PiAwLAorICAgICJTVkdBbmdsZSIgPT4gMCwKKyAgICAiU1ZHRWxlbWVudCIgPT4gMCwKKyAgICAi
U1ZHTGVuZ3RoIiA9PiAxLAorICAgICJTVkdNYXRyaXgiID0+IDEsCisgICAgIlNWR051bWJlciIg
PT4gMCwKKyAgICAiU1ZHUGFpbnRUeXBlIiA9PiAwLAorICAgICJTVkdQYXRoU2VnIiA9PiAwLAor
ICAgICJTVkdQb2ludCIgPT4gMSwKKyAgICAiU1ZHUmVjdCIgPT4gMSwKKyAgICAiU1ZHVHJhbnNm
b3JtIiA9PiAxLAorICAgICJWb2lkQ2FsbGJhY2siID0+IDEsCisgICAgIldlYktpdENTU01hdHJp
eCIgPT4gMCwKKyAgICAiV2ViS2l0UG9pbnQiID0+IDAsCisgICAgIlhQYXRoRXZhbHVhdG9yIiA9
PiAwLAorICAgICJYUGF0aE5TUmVzb2x2ZXIiID0+IDAsCisgICAgIlhQYXRoUmVzdWx0IiA9PiAw
LAorICAgICJib29sZWFuIiA9PiAwLAorICAgICJkb3VibGUiID0+IDAsCisgICAgImZsb2F0IiA9
PiAwLAorICAgICJsb25nIiA9PiAwLAorICAgICJ1bnNpZ25lZCBsb25nIiA9PiAwLAorICAgICJ1
bnNpZ25lZCBzaG9ydCIgPT4gMCwKKyk7CisKKworc3ViIFRyYW5zbGF0ZVBhcmFtZXRlcgorewor
ICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKKworICAgICMgVGhlIElETCB1c2VzIHNvbWUgcHNl
dWRvLXR5cGVzIHdoaWNoIGRvbid0IHJlYWxseSBleGlzdC4KKyAgICBpZiAoJHNpZ25hdHVyZS0+
dHlwZSBlcSAiVGltZW91dEhhbmRsZXIiKSB7CisgICAgICAkc2lnbmF0dXJlLT50eXBlKCJET01T
dHJpbmciKTsKKyAgICB9Cit9CisKK3N1YiBCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbgorewor
ICBteSAkc2lnbmF0dXJlID0gc2hpZnQ7CisgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0
cmlwTW9kdWxlKCRzaWduYXR1cmUtPnR5cGUpOworCisgIHJldHVybiAxIGlmICR0eXBlIGVxICJT
VkdMZW5ndGgiOworICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHTWF0cml4IjsKKyAgcmV0dXJu
IDEgaWYgJHR5cGUgZXEgIlNWR1BvaW50IjsKKyAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlNWR1Jl
Y3QiOworICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHVHJhbnNmb3JtIjsKKyAgcmV0dXJuIDA7
Cit9CisKK3N1YiBUeXBlQ2FuRmFpbENvbnZlcnNpb24KK3sKKyAgICBteSAkc2lnbmF0dXJlID0g
c2hpZnQ7CisKKyAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2ln
bmF0dXJlLT50eXBlKTsKKworICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0g
MSBpZiAkdHlwZSBlcSAiQXR0ciI7CisKKyAgICByZXR1cm4gJHR5cGVDYW5GYWlsQ29udmVyc2lv
bnskdHlwZX0gaWYgZXhpc3RzICR0eXBlQ2FuRmFpbENvbnZlcnNpb257JHR5cGV9OworCisgICAg
ZGllICJEb24ndCBrbm93IHdoZXRoZXIgYSBKUyB2YWx1ZSBjYW4gZmFpbCBjb252ZXJzaW9uIHRv
IHR5cGUgJHR5cGUuIjsKK30KKworc3ViIEpTVmFsdWVUb05hdGl2ZQoreworICAgIG15ICRzaWdu
YXR1cmUgPSBzaGlmdDsKKyAgICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgICBteSAkb2tQYXJhbSA9
IHNoaWZ0OworICAgIG15ICRtYXliZU9rUGFyYW0gPSAkb2tQYXJhbSA/ICIsICR7b2tQYXJhbX0i
IDogIiI7CisKKyAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2ln
bmF0dXJlLT50eXBlKTsKKworICAgIHJldHVybiAiJHZhbHVlIiBpZiAkdHlwZSBlcSAiSlNPYmpl
Y3QiOworICAgIHJldHVybiAiJHZhbHVlLT5Cb29sZWFuVmFsdWUoKSIgaWYgJHR5cGUgZXEgImJv
b2xlYW4iOworICAgIHJldHVybiAic3RhdGljX2Nhc3Q8JHR5cGU+KCR2YWx1ZS0+TnVtYmVyVmFs
dWUoKSkiIGlmICR0eXBlIGVxICJmbG9hdCIgb3IgJHR5cGUgZXEgImRvdWJsZSI7CisgICAgcmV0
dXJuICIkdmFsdWUtPk51bWJlclZhbHVlKCkiIGlmICR0eXBlIGVxICJTVkdOdW1iZXIiOworCisg
ICAgcmV0dXJuICJUb0ludDMyKCR2YWx1ZSR7bWF5YmVPa1BhcmFtfSkiIGlmICR0eXBlIGVxICJ1
bnNpZ25lZCBsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiIG9yICR0eXBlIGVxICJs
b25nIjsKKyAgICByZXR1cm4gInN0YXRpY19jYXN0PFJhbmdlOjpDb21wYXJlSG93PigkdmFsdWUt
PkludDMyVmFsdWUoKSkiIGlmICR0eXBlIGVxICJDb21wYXJlSG93IjsKKyAgICByZXR1cm4gInN0
YXRpY19jYXN0PFNWR1BhaW50OjpTVkdQYWludFR5cGU+KCR2YWx1ZS0+VG9JbnQzMigpLT5JbnQz
MlZhbHVlKCkpIiBpZiAkdHlwZSBlcSAiU1ZHUGFpbnRUeXBlIjsKKworICAgIHJldHVybiAiVG9X
ZWJDb3JlU3RyaW5nKCR2YWx1ZSkiIGlmICR0eXBlIGVxICJBdG9taWNTdHJpbmciIG9yICR0eXBl
IGVxICJET01Vc2VyRGF0YSI7CisgICAgaWYgKCR0eXBlIGVxICJET01TdHJpbmciKSB7CisgICAg
ICAgIHJldHVybiAidmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soJHZhbHVlKSIgaWYgJHNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnROdWxsVG9OdWxsU3RyaW5nIn07Cisg
ICAgICAgIHJldHVybiAidmFsdWVUb1N0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjaygkdmFs
dWUpIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydFVuZGVmaW5l
ZE9yTnVsbFRvTnVsbFN0cmluZyJ9OworICAgICAgICByZXR1cm4gIlRvV2ViQ29yZVN0cmluZygk
dmFsdWUpIjsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIk5vZGVGaWx0ZXIiKSB7CisgICAg
ICAgIHJldHVybiAiVjhQcm94eTo6VG9OYXRpdmVOb2RlRmlsdGVyKCR2YWx1ZSkiOworICAgIH0K
KworICAgIGlmICgkdHlwZSBlcSAiU1ZHUmVjdCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3si
RmxvYXRSZWN0LmgifSA9IDE7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJTVkdQb2ludCIp
IHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siRmxvYXRQb2ludC5oIn0gPSAxOworICAgIH0KKwor
ICAgICMgRGVmYXVsdCwgYXNzdW1lIGF1dG9nZW5lcmF0ZWQgdHlwZSBjb252ZXJzaW9uIHJvdXRp
bmVzCisgICAgJGltcGxJbmNsdWRlc3sidjhfcHJveHkuaCJ9ID0gMTsKKyAgICBpZiAoJHR5cGUg
ZXEgIkV2ZW50VGFyZ2V0IikgeworICAgICAgJGltcGxJbmNsdWRlc3siVjhOb2RlLmgifSA9IDE7
CisKKyAgICAgICMgRXZlbnRUYXJnZXQgaXMgbm90IGluIERPTSBoaWVyYXJjaHksIGJ1dCBhbGwg
Tm9kZXMgYXJlIEV2ZW50VGFyZ2V0LgorICAgICAgcmV0dXJuICJWOE5vZGU6Okhhc0luc3RhbmNl
KCR2YWx1ZSkgPyBWOFByb3h5OjpET01XcmFwcGVyVG9Ob2RlPE5vZGU+KCR2YWx1ZSkgOiAwIjsK
KyAgICB9CisKKyAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHR5cGUpOworICAgICMgJGltcGxJbmNs
dWRlc3siJHR5cGUuaCJ9ID0gMSB1bmxlc3MgQXZvaWRJbmNsdXNpb25PZlR5cGUoJHR5cGUpOwor
CisgICAgaWYgKElzRE9NTm9kZVR5cGUoJHR5cGUpKSB7CisgICAgICAkaW1wbEluY2x1ZGVzeyJW
OCR7dHlwZX0uaCJ9ID0gMTsKKworICAgICAgIyBQZXJmb3JtIHR5cGUgY2hlY2tzIG9uIHRoZSBw
YXJhbWV0ZXIsIGlmIGl0IGlzIGV4cGVjdGVkIE5vZGUgdHlwZSwKKyAgICAgICMgcmV0dXJuIE5V
TEwuCisgICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IFY4UHJv
eHk6OkRPTVdyYXBwZXJUb05vZGU8JHt0eXBlfT4oJHZhbHVlKSA6IDAiOworCisgICAgfSBlbHNl
IHsKKyAgICAgICMgVE9ETzogVGVtcG9yYXJ5IHRvIGF2b2lkIFdpbmRvdyBuYW1lIGNvbmZsaWN0
LgorICAgICAgbXkgJGNsYXNzSW5kZXggPSB1YygkdHlwZSk7CisgICAgICBteSAkaW1wbENsYXNz
TmFtZSA9ICR7dHlwZX07CisKKyAgICAgICRpbXBsSW5jbHVkZXN7IlY4JHR5cGUuaCJ9ID0gMTsK
KworICAgICAgaWYgKElzUG9kVHlwZSgkdHlwZSkpIHsKKyAgICAgICAgbXkgJG5hdGl2ZVR5cGUg
PSBHZXROYXRpdmVUeXBlKCR0eXBlKTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhTVkdQT0RU
eXBlV3JhcHBlci5oIn0gPSAxOworCisgICAgICAgIHJldHVybiAiVjhTVkdQT0RUeXBlVXRpbDo6
VG9TVkdQT0RUeXBlPCR7bmF0aXZlVHlwZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4fSwg
JHZhbHVlJHttYXliZU9rUGFyYW19KSIKKyAgICAgIH0KKworICAgICAgJGltcGxJbmNsdWRlc3si
Vjgke3R5cGV9LmgifSA9IDE7CisKKyAgICAgICMgUGVyZm9ybSB0eXBlIGNoZWNrcyBvbiB0aGUg
cGFyYW1ldGVyLCBpZiBpdCBpcyBleHBlY3RlZCBOb2RlIHR5cGUsCisgICAgICAjIHJldHVybiBO
VUxMLgorICAgICAgcmV0dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOFBy
b3h5OjpUb05hdGl2ZU9iamVjdDwke2ltcGxDbGFzc05hbWV9PihWOENsYXNzSW5kZXg6OiR7Y2xh
c3NJbmRleH0sICR2YWx1ZSkgOiAwIjsKKyAgICB9Cit9CisKKworc3ViIEdldFY4SGVhZGVyTmFt
ZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuICJWOCIgLiBHZXRJbXBsZW1l
bnRhdGlvbkZpbGVOYW1lKCR0eXBlKTsKK30KKworCitzdWIgQ3JlYXRlQ3VzdG9tU2lnbmF0dXJl
Cit7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CisgICAgbXkgJGNvdW50ID0gQHskZnVuY3Rp
b24tPnBhcmFtZXRlcnN9OworICAgIG15ICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5h
bWU7CisgICAgbXkgJHJlc3VsdCA9ICIgIGNvbnN0IGludCAke25hbWV9X2FyZ2MgPSAke2NvdW50
fTtcbiIgLgorICAgICAgIiAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtuYW1l
fV9hcmd2WyR7bmFtZX1fYXJnY10gPSB7ICI7CisgICAgbXkgJGZpcnN0ID0gMTsKKyAgICBmb3Jl
YWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICBp
ZiAoJGZpcnN0KSB7ICRmaXJzdCA9IDA7IH0KKyAgICAgICAgZWxzZSB7ICRyZXN1bHQgLj0gIiwg
IjsgfQorICAgICAgICBpZiAoSXNXcmFwcGVyVHlwZSgkcGFyYW1ldGVyLT50eXBlKSkgeworICAg
ICAgICAgICAgbXkgJHR5cGUgPSAkcGFyYW1ldGVyLT50eXBlOworICAgICAgICAgICAgbXkgJGhl
YWRlciA9IEdldFY4SGVhZGVyTmFtZSgkdHlwZSk7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVz
eyRoZWFkZXJ9ID0gMTsKKyAgICAgICAgICAgICRyZXN1bHQgLj0gIlY4JHt0eXBlfTo6R2V0UmF3
VGVtcGxhdGUoKSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkcmVzdWx0IC49ICJ2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPigpIjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAkcmVzdWx0IC49ICIgfTtcbiI7CisgICAgJHJlc3VsdCAuPSAiICB2ODo6SGFuZGxlPHY4OjpT
aWduYXR1cmU+ICR7bmFtZX1fc2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsICR7
bmFtZX1fYXJnYywgJHtuYW1lfV9hcmd2KTtcbiI7CisgICAgcmV0dXJuICRyZXN1bHQ7Cit9CisK
Kworc3ViIFJlcXVpcmVzQ3VzdG9tU2lnbmF0dXJlCit7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hp
ZnQ7CisgICAgIyBObyBzaWduYXR1cmUgbmVlZGVkIGZvciBDdXN0b20gZnVuY3Rpb24KKyAgICBp
ZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSB8
fAorICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4
Q3VzdG9tIn0pIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJHBh
cmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CisgICAgICBpZiAoSXNXcmFwcGVy
VHlwZSgkcGFyYW1ldGVyLT50eXBlKSkgeworICAgICAgICAgIHJldHVybiAxOworICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCitteSAlbm9uX3dyYXBwZXJfdHlwZXMgPSAoCisg
ICdmbG9hdCcgPT4gMSwKKyAgJ0F0b21pY1N0cmluZycgPT4gMSwKKyAgJ2RvdWJsZScgPT4gMSwK
KyAgJ3Nob3J0JyA9PiAxLAorICAndW5zaWduZWQgc2hvcnQnID0+IDEsCisgICdsb25nJyA9PiAx
LAorICAndW5zaWduZWQgbG9uZycgPT4gMSwKKyAgJ2Jvb2xlYW4nID0+IDEsCisgICdET01TdHJp
bmcnID0+IDEsCisgICdDb21wYXJlSG93JyA9PiAxLAorICAnU1ZHUmVjdCcgPT4gMSwKKyAgJ1NW
R1BvaW50JyA9PiAxLAorICAnU1ZHTWF0cml4JyA9PiAxLAorICAnU1ZHVHJhbnNmb3JtJyA9PiAx
LAorICAnU1ZHTGVuZ3RoJyA9PiAxLAorICAnU1ZHTnVtYmVyJyA9PiAxLAorICAnU1ZHUGFpbnRU
eXBlJyA9PiAxLAorICAnRE9NVGltZVN0YW1wJyA9PiAxLAorICAnSlNPYmplY3QnID0+IDEsCisg
ICdFdmVudFRhcmdldCcgPT4gMSwKKyAgJ05vZGVGaWx0ZXInID0+IDEsCisgICdFdmVudExpc3Rl
bmVyJyA9PiAxCispOworCisKK3N1YiBJc1dyYXBwZXJUeXBlCit7CisgICAgbXkgJHR5cGUgPSAk
Y29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hpZnQpOworICAgIHJldHVybiAhKCRub25fd3Jh
cHBlcl90eXBlc3skdHlwZX0pOworfQorCitzdWIgSXNET01Ob2RlVHlwZQoreworICAgIG15ICR0
eXBlID0gc2hpZnQ7CisKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnQXR0cic7CisgICAgcmV0
dXJuIDEgaWYgJHR5cGUgZXEgJ0NEQVRBU2VjdGlvbic7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUg
ZXEgJ0NvbW1lbnQnOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdEb2N1bWVudCc7CisgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0RvY3VtZW50RnJhZ21lbnQnOworICAgIHJldHVybiAxIGlm
ICR0eXBlIGVxICdEb2N1bWVudFR5cGUnOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdFbGVt
ZW50JzsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnRW50aXR5UmVmZXJlbmNlJzsKKyAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAnSFRNTENhbnZhc0VsZW1lbnQnOworICAgIHJldHVybiAxIGlm
ICR0eXBlIGVxICdIVE1MRG9jdW1lbnQnOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdIVE1M
RWxlbWVudCc7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0hUTUxGb3JtRWxlbWVudCc7Cisg
ICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0hUTUxUYWJsZUNhcHRpb25FbGVtZW50JzsKKyAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAnSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQnOworICAgIHJldHVy
biAxIGlmICR0eXBlIGVxICdOb2RlJzsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnUHJvY2Vz
c2luZ0luc3RydWN0aW9uJzsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnU1ZHRWxlbWVudCc7
CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ1NWR0RvY3VtZW50JzsKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAnU1ZHU1ZHRWxlbWVudCc7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ1NW
R1VzZUVsZW1lbnQnOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdUZXh0JzsKKworICAgIHJl
dHVybiAwOworfQorCisKK3N1YiBOYXRpdmVUb0pTVmFsdWUKK3sKKyAgICBteSAkc2lnbmF0dXJl
ID0gc2hpZnQ7CisgICAgbXkgJHZhbHVlID0gc2hpZnQ7CisgICAgbXkgJHR5cGUgPSAkY29kZUdl
bmVyYXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlwZSk7CisgICAgbXkgJGNsYXNzTmFt
ZT0gIlY4JHR5cGUiOworCisgICAgcmV0dXJuICJ2ODo6RGF0ZTo6TmV3KHN0YXRpY19jYXN0PGRv
dWJsZT4oJHZhbHVlKSkiIGlmICR0eXBlIGVxICJET01UaW1lU3RhbXAiOworICAgIHJldHVybiAi
JHZhbHVlID8gdjg6OlRydWUoKSA6IHY4OjpGYWxzZSgpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7
CisgICAgcmV0dXJuICJ2ODo6VW5kZWZpbmVkKCkiIGlmICR0eXBlIGVxICJ2b2lkIjsKKworICAg
ICMgRm9yIGFsbCB0aGUgdHlwZXMgd2hlcmUgd2UgdXNlICdpbnQnIGFzIHRoZSByZXByZXNlbnRh
dGlvbiB0eXBlLAorICAgICMgd2UgdXNlIEludGVnZXI6Ok5ldyB3aGljaCBoYXMgYSBmYXN0IFNt
aSBjb252ZXJzaW9uIGNoZWNrLgorICAgIHJldHVybiAidjg6OkludGVnZXI6Ok5ldygkdmFsdWUp
IiBpZiBHZXROYXRpdmVUeXBlKCR0eXBlKSBlcSAiaW50IjsKKworICAgIHJldHVybiAidjg6Ok51
bWJlcjo6TmV3KCR2YWx1ZSkiIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5
cGUpIG9yICR0eXBlIGVxICJTVkdQYWludFR5cGUiOworCisgICAgaWYgKCRjb2RlR2VuZXJhdG9y
LT5Jc1N0cmluZ1R5cGUoJHR5cGUpKSB7CisgICAgICAgIG15ICRjb252ID0gJHNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnROdWxsU3RyaW5nVG8ifTsKKyAgICAgICAgaWYg
KGRlZmluZWQgJGNvbnYpIHsKKyAgICAgICAgICAgIHJldHVybiAidjhTdHJpbmdPck51bGwoJHZh
bHVlKSIgaWYgJGNvbnYgZXEgIk51bGwiOworICAgICAgICAgICAgcmV0dXJuICJ2OFN0cmluZ09y
VW5kZWZpbmVkKCR2YWx1ZSkiIGlmICRjb252IGVxICJVbmRlZmluZWQiOworICAgICAgICAgICAg
cmV0dXJuICJ2OFN0cmluZ09yRmFsc2UoJHZhbHVlKSIgaWYgJGNvbnYgZXEgIkZhbHNlIjsKKwor
ICAgICAgICAgICAgZGllICJVbmtub3duIHZhbHVlIGZvciBDb252ZXJ0TnVsbFN0cmluZ1RvIGV4
dGVuZGVkIGF0dHJpYnV0ZSI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJ2OFN0cmluZygk
dmFsdWUpIjsKKyAgICB9CisKKyAgICAjIFY4IHNwZWNpZmljLgorICAgIG15ICRpbXBsQ2xhc3NO
YW1lID0gJHR5cGU7CisgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCR0eXBlKTsKKyAgICAjICRpbXBs
SW5jbHVkZXN7R2V0SW1wbGVtZW50YXRpb25GaWxlTmFtZSgkdHlwZSl9ID0gMSB1bmxlc3MgQXZv
aWRJbmNsdXNpb25PZlR5cGUoJHR5cGUpOworCisgICAgIyBzcGVjaWFsIGNhc2UgZm9yIG5vbi1E
T00gbm9kZSBpbnRlcmZhY2VzCisgICAgaWYgKElzRE9NTm9kZVR5cGUoJHR5cGUpKSB7CisgICAg
ICByZXR1cm4gIlY4UHJveHk6Ok5vZGVUb1Y4T2JqZWN0KCR2YWx1ZSkiOworICAgIH0KKworICAg
IGlmICgkdHlwZSBlcSAiRXZlbnRUYXJnZXQiIG9yICR0eXBlIGVxICJTVkdFbGVtZW50SW5zdGFu
Y2UiKSB7CisgICAgICByZXR1cm4gIlY4UHJveHk6OkV2ZW50VGFyZ2V0VG9WOE9iamVjdCgkdmFs
dWUpIjsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIkV2ZW50IikgeworICAgICAgcmV0dXJu
ICJWOFByb3h5OjpFdmVudFRvVjhPYmplY3QoJHZhbHVlKSI7CisgICAgfQorCisgICAgaWYgKCR0
eXBlIGVxICJFdmVudExpc3RlbmVyIikgeworICAgICAgcmV0dXJuICJWOFByb3h5OjpFdmVudExp
c3RlbmVyVG9WOE9iamVjdCgkdmFsdWUpIjsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIlJH
QkNvbG9yIikgeworICAgICAgcmV0dXJuICJWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6UkdCQ09MT1IsIG5ldyBSR0JDb2xvcigkdmFsdWUpKSI7CisgICAgfQorCisgICAgaWYgKCR0
eXBlIGVxICJXb3JrZXJDb250ZXh0IiBvciAkdHlwZSBlcSAiV29ya2VyTG9jYXRpb24iIG9yICR0
eXBlIGVxICJXb3JrZXJOYXZpZ2F0b3IiKSB7CisgICAgICAkaW1wbEluY2x1ZGVzeyJXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkuaCJ9ID0gMTsKKyAgICAgIG15ICRjbGFzc0luZGV4ID0gdWMo
JHR5cGUpOworCisgICAgICByZXR1cm4gIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6VG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCAkdmFsdWUpIjsKKyAgICB9CisKKyAg
ICBlbHNlIHsKKyAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9SZWZDb3VudGVkLmgifSA9IDE7Cisg
ICAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvUmVmUHRyLmgifSA9IDE7CisgICAgICBteSAkY2xhc3NJ
bmRleCA9IHVjKCR0eXBlKTsKKworICAgICAgaWYgKElzUG9kVHlwZSgkdHlwZSkpIHsKKyAgICAg
ICAgJHZhbHVlID0gR2VuZXJhdGVTVkdTdGF0aWNQb2RUeXBlV3JhcHBlcigkdHlwZSwgJHZhbHVl
KTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuICJWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6JGNsYXNzSW5kZXgsICR2YWx1ZSkiOworICAgIH0KK30KKworc3ViIEdlbmVyYXRlU1ZH
U3RhdGljUG9kVHlwZVdyYXBwZXIgeworICBteSAkdHlwZSA9IHNoaWZ0OworICBteSAkdmFsdWUg
PSBzaGlmdDsKKworICAkaW1wbEluY2x1ZGVzeyJWOCR0eXBlLmgifT0xOworICAkaW1wbEluY2x1
ZGVzeyJWOFNWR1BPRFR5cGVXcmFwcGVyLmgifSA9IDE7CisKKyAgbXkgJG5hdGl2ZVR5cGUgPSBH
ZXROYXRpdmVUeXBlKCR0eXBlKTsKKyAgcmV0dXJuICJuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3Jh
cHBlcjwkbmF0aXZlVHlwZT4oJHZhbHVlKSI7Cit9CisKKyMgSW50ZXJuYWwgaGVscGVyCitzdWIg
V3JpdGVEYXRhCit7CisgICAgaWYgKGRlZmluZWQoJElNUEwpKSB7CisgICAgICAgICMgV3JpdGUg
Y29udGVudCB0byBmaWxlLgorICAgICAgICBwcmludCAkSU1QTCBAaW1wbENvbnRlbnRIZWFkZXI7
CisKKyAgICAgICAgcHJpbnQgJElNUEwgQGltcGxGaXhlZEhlYWRlcjsKKworICAgICAgICBmb3Jl
YWNoIG15ICRpbXBsSW5jbHVkZSAoc29ydCBrZXlzKCVpbXBsSW5jbHVkZXMpKSB7CisgICAgICAg
ICAgICBteSAkY2hlY2tUeXBlID0gJGltcGxJbmNsdWRlOworICAgICAgICAgICAgJGNoZWNrVHlw
ZSA9fiBzL1wuaC8vOworCisgICAgICAgICAgICBwcmludCAkSU1QTCAiI2luY2x1ZGUgXCIkaW1w
bEluY2x1ZGVcIlxuIiB1bmxlc3MgJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCRj
aGVja1R5cGUpOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnQgJElNUEwgIlxuIjsKKyAgICAg
ICAgcHJpbnQgJElNUEwgQGltcGxDb250ZW50RGVjbHM7CisgICAgICAgIHByaW50ICRJTVBMIEBp
bXBsQ29udGVudDsKKyAgICAgICAgY2xvc2UoJElNUEwpOworICAgICAgICB1bmRlZigkSU1QTCk7
CisKKyAgICAgICAgJWltcGxJbmNsdWRlcyA9ICgpOworICAgICAgICBAaW1wbEZpeGVkSGVhZGVy
ID0gKCk7CisgICAgICAgIEBpbXBsSGVhZGVyQ29udGVudCA9ICgpOworICAgICAgICBAaW1wbENv
bnRlbnREZWNscyA9ICgpOworICAgICAgICBAaW1wbENvbnRlbnQgPSAoKTsKKyAgICB9CisKKyAg
ICBpZiAoZGVmaW5lZCgkSEVBREVSKSkgeworICAgICAgICAjIFdyaXRlIGNvbnRlbnQgdG8gZmls
ZS4KKyAgICAgICAgcHJpbnQgJEhFQURFUiBAaGVhZGVyQ29udGVudDsKKyAgICAgICAgY2xvc2Uo
JEhFQURFUik7CisgICAgICAgIHVuZGVmKCRIRUFERVIpOworCisgICAgICAgIEBoZWFkZXJDb250
ZW50ID0gKCk7CisgICAgfQorfQorCitzdWIgSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0
ZXIKK3sKKyAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworCisgICAgaWYgKCRpbXBsQ2xh
c3NOYW1lID1+IC9TVkcvIGFuZCBub3QgJGltcGxDbGFzc05hbWUgPX4gL0VsZW1lbnQvKSB7Cisg
ICAgICAgIHJldHVybiAxIHVubGVzcyAkaW1wbENsYXNzTmFtZSA9fiAvU1ZHUGFpbnQvIG9yICRp
bXBsQ2xhc3NOYW1lID1+IC9TVkdDb2xvci8gb3IgJGltcGxDbGFzc05hbWUgPX4gL1NWR0RvY3Vt
ZW50LzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3ViIEdlbmVyYXRlU1ZHQ29udGV4
dEFzc2lnbm1lbnQKK3sKKyAgICBteSAkc3JjVHlwZSA9IHNoaWZ0OworICAgIG15ICR2YWx1ZSA9
IHNoaWZ0OworICAgIG15ICRpbmRlbnQgPSBzaGlmdDsKKworICAgICRyZXN1bHQgPSBHZW5lcmF0
ZVNWR0NvbnRleHRSZXRyaWV2YWwoJHNyY1R5cGUsICRpbmRlbnQpOworICAgICRyZXN1bHQgLj0g
ICAkaW5kZW50IC4gIlY4UHJveHk6OlNldFNWR0NvbnRleHQoJHZhbHVlLCBjb250ZXh0KTtcbiI7
CisKKyAgICByZXR1cm4gJHJlc3VsdDsKK30KKworc3ViIEdlbmVyYXRlU1ZHQ29udGV4dFJldHJp
ZXZhbAoreworICBteSAkc3JjVHlwZSA9IHNoaWZ0OworICBteSAkaW5kZW50ID0gc2hpZnQ7CisK
KyAgbXkgJHNyY0lzUG9kVHlwZSA9IElzUG9kVHlwZSgkc3JjVHlwZSk7CisKKyAgbXkgJHNyY09i
amVjdCA9ICJpbXAiOworICBpZiAoJHNyY0lzUG9kVHlwZSkgeworICAgICRzcmNPYmplY3QgPSAi
aW1wX3dyYXBwZXIiOworICB9CisKKyAgbXkgJGNvbnRleHREZWNsOworCisgIGlmIChJc1NWR1R5
cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkc3JjVHlwZSkpIHsKKyAgICAkY29udGV4dERlY2wg
PSAiVjhQcm94eTo6R2V0U1ZHQ29udGV4dCgkc3JjT2JqZWN0KSI7CisgIH0gZWxzZSB7CisgICAg
JGNvbnRleHREZWNsID0gJHNyY09iamVjdDsKKyAgfQorCisgIHJldHVybiAkaW5kZW50IC4gIlNW
R0VsZW1lbnQqIGNvbnRleHQgPSAkY29udGV4dERlY2w7XG4iOworfQorCitzdWIgSXNTVkdMaXN0
TXV0YXRvcgoreworICBteSAkZnVuY3Rpb25OYW1lID0gc2hpZnQ7CisKKyAgcmV0dXJuIDEgaWYg
JGZ1bmN0aW9uTmFtZSBlcSAiY2xlYXIiOworICByZXR1cm4gMSBpZiAkZnVuY3Rpb25OYW1lIGVx
ICJpbml0aWFsaXplIjsKKyAgcmV0dXJuIDEgaWYgJGZ1bmN0aW9uTmFtZSBlcSAiaW5zZXJ0SXRl
bUJlZm9yZSI7CisgIHJldHVybiAxIGlmICRmdW5jdGlvbk5hbWUgZXEgInJlcGxhY2VJdGVtIjsK
KyAgcmV0dXJuIDEgaWYgJGZ1bmN0aW9uTmFtZSBlcSAicmVtb3ZlSXRlbSI7CisgIHJldHVybiAx
IGlmICRmdW5jdGlvbk5hbWUgZXEgImFwcGVuZEl0ZW0iOworCisgIHJldHVybiAwOworfQorCitz
dWIgSXNTVkdMaXN0TWV0aG9kCit7CisgIG15ICRmdW5jdGlvbk5hbWUgPSBzaGlmdDsKKworICBy
ZXR1cm4gMSBpZiAkZnVuY3Rpb25OYW1lIGVxICJnZXRGaXJzdCI7CisgIHJldHVybiAxIGlmICRm
dW5jdGlvbk5hbWUgZXEgImdldExhc3QiOworICByZXR1cm4gMSBpZiAkZnVuY3Rpb25OYW1lIGVx
ICJnZXRJdGVtIjsKKworICByZXR1cm4gSXNTVkdMaXN0TXV0YXRvcigkZnVuY3Rpb25OYW1lKTsK
K30KKworc3ViIElzU1ZHTGlzdFR5cGVOZWVkaW5nU3BlY2lhbEhhbmRsaW5nCit7CisgIG15ICRj
bGFzc05hbWUgPSBzaGlmdDsKKworICByZXR1cm4gMSBpZiAkY2xhc3NOYW1lIGVxICJTVkdQb2lu
dExpc3QiOworICByZXR1cm4gMSBpZiAkY2xhc3NOYW1lIGVxICJTVkdUcmFuc2Zvcm1MaXN0IjsK
KworICByZXR1cm4gMDsKK30KKworc3ViIERlYnVnUHJpbnQKK3sKKyAgbXkgJG91dHB1dCA9IHNo
aWZ0OworCisgIHByaW50ICRvdXRwdXQ7CisgIHByaW50ICJcbiI7Cit9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0lETFBhcnNlci5wbQppbmRleCBkZTdjZjljLi5jNGNiMDQxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KQEAgLTQxLDYgKzQxLDcgQEAgbXkgJHByZXNlcnZlZFBh
cnNlTW9kZSA9IE1PREVfVU5ERUY7CiAKIG15ICRiZVF1aWV0OyAjIFNob3VsZCBub3QgZGlzcGxh
eSBhbnl0aGluZyBvbiBTVERPVVQ/CiBteSAkZG9jdW1lbnQgPSAwOyAjIFdpbGwgaG9sZCB0aGUg
cmVzdWx0aW5nICdpZGxEb2N1bWVudCcKK215ICRwYXJlbnRzT25seSA9IDA7ICMgSWYgMSwgcGFy
c2Ugb25seSBlbm91Z2ggdG8gcG9wdWxhdGUgcGFyZW50cyBsaXN0CiAKICMgRGVmYXVsdCBDb25z
dHJ1Y3Rvcgogc3ViIG5ldwpAQCAtNjIsNiArNjMsNyBAQCBzdWIgUGFyc2UKICAgICBteSAkZmls
ZU5hbWUgPSBzaGlmdDsKICAgICBteSAkZGVmaW5lcyA9IHNoaWZ0OwogICAgIG15ICRwcmVwcm9j
ZXNzb3IgPSBzaGlmdDsKKyAgICAkcGFyZW50c09ubHkgPSBzaGlmdDsKIAogICAgIGlmICghJHBy
ZXByb2Nlc3NvcikgewogICAgICAgICAkcHJlcHJvY2Vzc29yID0gIi91c3IvYmluL2djYyAtRSAt
UCAteCBjKysiOwpAQCAtMjQwLDYgKzI0Miw4IEBAIHN1YiBQYXJzZUludGVyZmFjZQogICAgICAg
ICAgICAgcHVzaChAJGFycmF5UmVmLCAkbGluZSk7CiAgICAgICAgIH0KIAorICAgICAgICByZXR1
cm4gaWYgJHBhcmVudHNPbmx5OworCiAgICAgICAgICRpbnRlcmZhY2VEYXRhID1+IHMvW1xuXHJd
LyAvZzsKICAgICAgICAgbXkgQGludGVyZmFjZU1ldGhvZHMgPSBzcGxpdCgvOy8sICRpbnRlcmZh
Y2VEYXRhKTsKIAo=
</data>
<flag name="review"
          id="16214"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31672</attachid>
            <date>2009-06-22 14:21:47 -0700</date>
            <delta_ts>2009-06-22 14:22:45 -0700</delta_ts>
            <desc>Upstream V8 code generator, v2.</desc>
            <filename>Upstream-V8-code-generator-v2..patch</filename>
            <type>text/plain</type>
            <size>79474</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZDZkYTdmYWQ0NzM1N2I5MmJhMjk1ZWY0MDI3M2MzMTRmYzk0NzA4OQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3OTk0YmU1Li5iZDVjZGQ2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDA5LTA2LTIyICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NTY3CisgICAg
ICAgIFVwc3RyZWFtIFY4IGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yLiBXaXRoIHRoaXMgY2hhbmdl
LCBhbHNvIGFkZGVkIGludGVyZmFjZSBhbmNlc3RvcgorICAgICAgICB0cmF2ZXJzYWwgdG8gSURM
IHBhcnNlciwgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBWOCBiaW5kaW5ncy4gVGhlIHRyYXZlcnNh
bCBpcyB1c2VkCisgICAgICAgIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIGludGVyZmFjZSBpcyBh
IE5vZGUgdG8gZmFjaWxpdGF0ZSBwcm9wZXIgY2FzdGluZyBhbmQgc3RvcmFnZQorICAgICAgICBp
biBWOERPTU1hcC4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5w
bTogQWRkZWQgcGFyZW50IHRyYXZlcnNhbCBzdWIsIG5lZWRlZAorICAgICAgICAgICAgYnkgVjgg
YmluZGluZ3MuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtOiBNb2RpZmll
ZCB0byBhbGxvdyBsaW1pdGVkIHBhcnNpbmcgZm9yCisgICAgICAgICAgICBwYXJlbnQgdHJhdmVy
c2FsIGNhc2VzLgorCiAyMDA5LTA2LTIyICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvci5wbQppbmRleCBkMjE3YzM3Li5mZTE0NWY0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQpAQCAtMTE2LDYgKzExNiw0MSBAQCBz
dWIgUHJvY2Vzc0RvY3VtZW50CiAgICAgJGNvZGVHZW5lcmF0b3ItPmZpbmlzaCgpOwogfQogCisj
IE5lY2Vzc2FyeSBmb3IgVjggYmluZGluZ3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gaW50ZXJm
YWNlIGlzIGRlc2NlbmRhbnQgZnJvbSBOb2RlLgorIyBOb2RlIGRlc2NlbmRhbnRzIGFyZSB0cmVh
dGVkIGRpZmZlcmVudGx5IGJ5IERPTU1hcCBhbmQgdGhpcyBhbGxvd3MgaW5mZXJyaW5nIHRoZQor
IyB0eXBlIHN0YXRpY2FsbHkuIFNlZSBtb3JlIGF0IHRoZSBvcmlnaW5hbCBjaGFuZ2U6IGh0dHA6
Ly9jb2RlcmV2aWV3LmNocm9taXVtLm9yZy8zMTk1LgorIyBGSVhNRTogRmlndXJlIG91dCBhIHdh
eSB0byBlbGltaW5hdGUgdGhpcyBKUyBiaW5kaW5ncyBkaWNob3RvbXkuCitzdWIgRmluZFBhcmVu
dHNSZWN1cnNpdmVseQoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5v
ZGUgPSBzaGlmdDsKKyAgICBteSBAcGFyZW50cyA9ICgkZGF0YU5vZGUtPm5hbWUpOworICAgIGZv
cmVhY2ggKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSkgeworICAgICAgICBteSAkaW50ZXJmYWNlID0g
JG9iamVjdC0+U3RyaXBNb2R1bGUoJF8pOworCisgICAgICAgICRlbmRDb25kaXRpb24gPSAwOwor
ICAgICAgICAkZm91bmRGaWxlbmFtZSA9ICIiOworICAgICAgICBmb3JlYWNoIChAeyR1c2VEaXJl
Y3Rvcmllc30pIHsKKyAgICAgICAgICAgICRvYmplY3QtPlNjYW5EaXJlY3RvcnkoIiRpbnRlcmZh
Y2UuaWRsIiwgJF8sICRfLCAwKSBpZiAoJGZvdW5kRmlsZW5hbWUgZXEgIiIpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCRmb3VuZEZpbGVuYW1lIG5lICIiKSB7CisgICAgICAgICAgICBwcmlu
dCAiICB8ICB8PiAgUGFyc2luZyBwYXJlbnQgSURMIFwiJGZvdW5kRmlsZW5hbWVcIiBmb3IgaW50
ZXJmYWNlIFwiJGludGVyZmFjZVwiXG4iIGlmICR2ZXJib3NlOworCisgICAgICAgICAgICMgU3Rl
cCAjMjogUGFyc2UgdGhlIGZvdW5kIElETCBmaWxlIChpbiBxdWlldCBtb2RlKS4KKyAgICAgICAg
ICAgIG15ICRwYXJzZXIgPSBJRExQYXJzZXItPm5ldygxKTsKKyAgICAgICAgICAgIG15ICRkb2N1
bWVudCA9ICRwYXJzZXItPlBhcnNlKCRmb3VuZEZpbGVuYW1lLCAkZGVmaW5lcywgJHByZXByb2Nl
c3NvciwgMSk7CisKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGNsYXNzIChAeyRkb2N1bWVudC0+
Y2xhc3Nlc30pIHsKKyAgICAgICAgICAgICAgICBAcGFyZW50cyA9IChAcGFyZW50cywgRmluZFBh
cmVudHNSZWN1cnNpdmVseSgkb2JqZWN0LCAkY2xhc3MpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpZSgiQ291bGQgTk9UIGZpbmQgc3BlY2lmaWVkIHBh
cmVudCBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlXCIhXG4iKQorICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBAcGFyZW50czsKK30KKwogc3ViIEFkZE1ldGhvZHNDb25zdGFudHNBbmRBdHRyaWJ1
dGVzRnJvbVBhcmVudENsYXNzZXMKIHsKICAgICAjIEZvciB0aGUgcGFzc2VkIGludGVyZmFjZSwg
cmVjdXJzaXZlbHkgcGFyc2UgYWxsIHBhcmVudApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUw
MjU1OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0KQEAgLTAsMCArMSwyMTkyIEBACisKKyMgQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorIyBDb3B5cmlnaHQg
KEMpIDIwMDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBtYWMuY29tPgorIyBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisjIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorIyBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4LCAyMDA5IEdvb2dsZSBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAorIworIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
IyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhaW50IHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl
IDMzMCwKKyMgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisKK3BhY2thZ2UgQ29kZUdl
bmVyYXRvclY4OworCit1c2UgRmlsZTo6c3RhdDsKKworbXkgJG1vZHVsZSA9ICIiOworbXkgJG91
dHB1dERpciA9ICIiOworCitteSBAaGVhZGVyQ29udGVudCA9ICgpOworbXkgQGltcGxDb250ZW50
SGVhZGVyID0gKCk7CitteSBAaW1wbEZpeGVkSGVhZGVyID0gKCk7CitteSBAaW1wbENvbnRlbnQg
PSAoKTsKK215IEBpbXBsQ29udGVudERlY2xzID0gKCk7CitteSAlaW1wbEluY2x1ZGVzID0gKCk7
CisKK215IEBhbGxQYXJlbnRzID0gKCk7CisKKyMgRGVmYXVsdCAuaCB0ZW1wbGF0ZQorbXkgJGhl
YWRlclRlbXBsYXRlID0gPDwgIkVPRiI7CisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KK0VPRgorCisjIERl
ZmF1bHQgY29uc3RydWN0b3IKK3N1YiBuZXcKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Cisg
ICAgbXkgJHJlZmVyZW5jZSA9IHsgfTsKKworICAgICRjb2RlR2VuZXJhdG9yID0gc2hpZnQ7Cisg
ICAgJG91dHB1dERpciA9IHNoaWZ0OworCisgICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7
CisgICAgcmV0dXJuICRyZWZlcmVuY2U7Cit9CisKK3N1YiBmaW5pc2gKK3sKKyAgICBteSAkb2Jq
ZWN0ID0gc2hpZnQ7CisKKyAgICAjIENvbW1pdCBjaGFuZ2VzIQorICAgICRvYmplY3QtPldyaXRl
RGF0YSgpOworfQorCitzdWIgbGVmdFNoaWZ0KCQkKSB7CisgICAgbXkgKCR2YWx1ZSwgJGRpc3Rh
bmNlKSA9IEBfOworICAgIHJldHVybiAoKCR2YWx1ZSA8PCAkZGlzdGFuY2UpICYgMHhGRkZGRkZG
Rik7Cit9CisKKyMgVXBwZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXIsIHdoaWxlIHJlc3BlY3Rpbmcg
V2ViS2l0IHN0eWxlIGd1aWRlbGluZXMuCisjIEUuZy4sIHhtbEVuY29kaW5nIGJlY29tZXMgWE1M
RW5jb2RpbmcsIGJ1dCB4bWxsbGFuZyBiZWNvbWVzIFhtbGxhbmcuCitzdWIgV0tfdWNmaXJzdAor
eworICAgIG15ICRwYXJhbSA9IHNoaWZ0OworICAgIG15ICRyZXQgPSB1Y2ZpcnN0KCRwYXJhbSk7
CisgICAgJHJldCA9fiBzL1htbC9YTUwvIGlmICRyZXQgPX4gL15YbWxbXmEtel0vOworICAgIHJl
dHVybiAkcmV0OworfQorCisjIExvd2VyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIHdoaWxlIHJlc3Bl
Y3RpbmcgV2ViS2l0IHN0eWxlIGd1aWRlbGluZXMuCisjIFVSTCBiZWNvbWVzIHVybCwgYnV0IFNl
dFVSTCBiZWNvbWVzIHNldFVSTC4KK3N1YiBXS19sY2ZpcnN0Cit7CisgICAgbXkgJHBhcmFtID0g
c2hpZnQ7CisgICAgbXkgJHJldCA9IGxjZmlyc3QoJHBhcmFtKTsKKyAgICAkcmV0ID1+IHMvdVJM
L3VybC87CisgICAgcmV0dXJuICRyZXQ7Cit9CisKKyMgV29ya2Fyb3VuZCBmb3IgVjggYmluZGlu
Z3MgZGlmZmVyZW5jZSB3aGVyZSBSR0JDb2xvciBpcyBub3QgYSBQT0QgdHlwZS4KK3N1YiBJc1Bv
ZFR5cGUKK3sKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIHJldHVybiAwIGlmICR0eXBlIGVx
ICJSR0JDb2xvciI7CisgICAgcmV0dXJuICRjb2RlR2VuZXJhdG9yLT5Jc1BvZFR5cGUoJHR5cGUp
OworfQorCisjIFBhcmFtczogJ2RvbUNsYXNzJyBzdHJ1Y3QKK3N1YiBHZW5lcmF0ZUludGVyZmFj
ZQoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsK
KyAgICBteSAkZGVmaW5lcyA9IHNoaWZ0OworCisgICAgIyBTdGFydCBhY3R1YWwgZ2VuZXJhdGlv
bgorICAgICRvYmplY3QtPkdlbmVyYXRlSGVhZGVyKCRkYXRhTm9kZSk7CisgICAgJG9iamVjdC0+
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbigkZGF0YU5vZGUpOworCisgICAgbXkgJG5hbWUgPSAkZGF0
YU5vZGUtPm5hbWU7CisKKyAgICAjIE9wZW4gZmlsZXMgZm9yIHdyaXRpbmcKKyAgICBteSAkaGVh
ZGVyRmlsZU5hbWUgPSAiJG91dHB1dERpci9WOCRuYW1lLmgiOworICAgIG15ICRpbXBsRmlsZU5h
bWUgPSAiJG91dHB1dERpci9WOCRuYW1lLmNwcCI7CisKKyAgICBvcGVuKCRJTVBMLCAiPiRpbXBs
RmlsZU5hbWUiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkaW1wbEZpbGVOYW1lIjsKKyAg
ICBvcGVuKCRIRUFERVIsICI+JGhlYWRlckZpbGVOYW1lIikgfHwgZGllICJDb3VsZG4ndCBvcGVu
IGZpbGUgJGhlYWRlckZpbGVOYW1lIjsKK30KKworIyBQYXJhbXM6ICdpZGxEb2N1bWVudCcgc3Ry
dWN0CitzdWIgR2VuZXJhdGVNb2R1bGUKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAg
bXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICAkbW9kdWxlID0gJGRhdGFOb2RlLT5tb2R1bGU7
Cit9CisKK3N1YiBHZXRMZWdhY3lIZWFkZXJJbmNsdWRlcworeworICAgIG15ICRsZWdhY3lQYXJl
bnQgPSBzaGlmdDsKKworICAgIGRpZSAiRG9uJ3Qga25vdyB3aGF0IGhlYWRlcnMgdG8gaW5jbHVk
ZSBmb3IgbW9kdWxlICRtb2R1bGUiOworfQorCitzdWIgQXZvaWRJbmNsdXNpb25PZlR5cGUKK3sK
KyAgICBteSAkdHlwZSA9IHNoaWZ0OworCisgICAgIyBTcGVjaWFsIGNhc2U6IFNWR1JlY3QuaCAv
IFNWR1BvaW50LmggLyBTVkdOdW1iZXIuaCAvIFNWR01hdHJpeC5oIGRvIG5vdCBleGlzdC4KKyAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHUmVjdCIgb3IgJHR5cGUgZXEgIlNWR1BvaW50IiBv
ciAkdHlwZSBlcSAiU1ZHTnVtYmVyIiBvciAkdHlwZSBlcSAiU1ZHTWF0cml4IjsKKyAgICByZXR1
cm4gMDsKK30KKworc3ViIFVzZXNNYW51YWxUb0pTSW1wbGVtZW50YXRpb24KK3sKKyAgICBteSAk
dHlwZSA9IHNoaWZ0OworCisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlNWR1BhdGhTZWciOwor
ICAgIHJldHVybiAwOworfQorCitzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCit7CisgICAgbXkgJHR5
cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hpZnQpOworCisgICAgIyBXaGVuIHdl
J3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcworICAgICMgcmVvcmdhbml6
YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KKyAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgb3IgQXZvaWRJbmNsdXNpb25PZlR5cGUo
JHR5cGUpCisjIGpoYWFzOiB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW55IGhhcm0gaW4gbGVh
dmluZyB0aGVzZSBpbgorIyAgICAgICAgb3IgJHR5cGUgZXEgIkRPTVN0cmluZyIgb3IgJHR5cGUg
ZXEgIkRPTU9iamVjdCIgb3IgJHR5cGUgZXEgIlJHQkNvbG9yIiBvciAkdHlwZSBlcSAiUmVjdCIp
IHsKKyAgICAgICkgeworICAgIH0gZWxzaWYgKCR0eXBlID1+IC9TVkdQYXRoU2VnLykgeworICAg
ICAgICAkam9pbmVkTmFtZSA9ICR0eXBlOworICAgICAgICAkam9pbmVkTmFtZSA9fiBzL0Fic3xS
ZWwvLzsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siJHtqb2luZWROYW1lfS5oIn0gPSAxOworICAg
IH0gZWxzZSB7CisgICAgICAgICMgZGVmYXVsdCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxl
CisgICAgICAgICRpbXBsSW5jbHVkZXN7R2V0SW1wbGVtZW50YXRpb25GaWxlTmFtZSgke3R5cGV9
KX0gPSAxOworICAgIH0KKworICAgICMgYWRkaXRpb25hbCBpbmNsdWRlcyAodGhpbmdzIG5lZWRl
ZCB0byBjb21waWxlIHRoZSBiaW5kaW5ncyBidXQgbm90IHRoZSBoZWFkZXIpCisKKyAgICBpZiAo
JHR5cGUgZXEgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIpIHsKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siQ2FudmFzR3JhZGllbnQuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siQ2Fu
dmFzUGF0dGVybi5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJDYW52YXNTdHlsZS5o
In0gPSAxOworICAgIH0KKworICAgIGlmICgkdHlwZSBlcSAiQ2FudmFzR3JhZGllbnQiIG9yICR0
eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlBsYXRm
b3JtU3RyaW5nLmgifSA9IDE7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJDU1NTdHlsZURl
Y2xhcmF0aW9uIikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbi5oIn0gPSAxOworICAgIH0KKworICAgIGlmICgkdHlwZSBlcSAiUGx1Z2luIiBvciAk
dHlwZSBlcSAiUGx1Z2luQXJyYXkiIG9yICR0eXBlIGVxICJNaW1lVHlwZUFycmF5IikgeworICAg
ICAgICAjIFNvIHdlIGNhbiBnZXQgU3RyaW5nIC0+IEF0b21pY1N0cmluZyBjb252ZXJzaW9uIGZv
ciBuYW1lZEl0ZW0oKS4KKyAgICAgICAgJGltcGxJbmNsdWRlc3siQXRvbWljU3RyaW5nLmgifSA9
IDE7CisgICAgfQorfQorCitzdWIgQWRkSW5jbHVkZXNGb3JTVkdBbmltYXRlZFR5cGUKK3sKKyAg
ICBteSAkdHlwZSA9IHNoaWZ0OworICAgICR0eXBlID1+IHMvU1ZHQW5pbWF0ZWQvLzsKKworICAg
IGlmICgkdHlwZSBlcSAiUG9pbnQiIG9yICR0eXBlIGVxICJSZWN0IikgeworICAgICAgICAkaW1w
bEluY2x1ZGVzeyJGbG9hdCR0eXBlLmgifSA9IDE7CisgICAgfSBlbHNpZiAoJHR5cGUgZXEgIlN0
cmluZyIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siUGxhdGZvcm1TdHJpbmcuaCJ9ID0gMTsK
KyAgICB9CisKKyAgICAkaW1wbEluY2x1ZGVzeyJTVkdBbmltYXRlZFRlbXBsYXRlLmgifSA9IDE7
Cit9CisKK3N1YiBBZGRDbGFzc0ZvcndhcmRJZk5lZWRlZAoreworICAgIG15ICRpbXBsQ2xhc3NO
YW1lID0gc2hpZnQ7CisKKyAgICAjIFNWR0FuaW1hdGVkTGVuZ3RoL051bWJlci9ldGMuLiBhcmUg
dHlwZWRlZnMgdG8gU1ZHQW5pbXRhdGVkVGVtcGxhdGUsIHNvIGRvbid0IHVzZSBjbGFzcyBmb3J3
YXJkcyBmb3IgdGhlbSEKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGltcGxDbGFz
c05hbWU7XG5cbiIpIHVubGVzcyAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGlt
cGxDbGFzc05hbWUpOworfQorCitzdWIgR2V0SW1wbGVtZW50YXRpb25GaWxlTmFtZQoreworICAg
IG15ICRpZmFjZSA9IHNoaWZ0OworICAgIHJldHVybiAiSFRNTENvbGxlY3Rpb24uaCIgaWYgJGlm
YWNlIGVxICJVbmRldGVjdGFibGVIVE1MQ29sbGVjdGlvbiI7CisgICAgcmV0dXJuICJFdmVudC5o
IiBpZiAkaWZhY2UgZXEgIkRPTVRpbWVTdGFtcCI7CisgICAgcmV0dXJuICJOYW1lZEF0dHJNYXAu
aCIgaWYgJGlmYWNlIGVxICJOYW1lZE5vZGVNYXAiOworICAgIHJldHVybiAiTmFtZU5vZGVMaXN0
LmgiIGlmICRpZmFjZSBlcSAiTm9kZUxpc3QiOworICAgIHJldHVybiAiWE1MSHR0cFJlcXVlc3Qu
aCIgaWYgJGlmYWNlIGVxICJYTUxIdHRwUmVxdWVzdCI7CisKKyAgICByZXR1cm4gIiR7aWZhY2V9
LmgiOworfQorCitzdWIgR2VuZXJhdGVIZWFkZXIKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7
CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRk
YXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY2xhc3NOYW1lID0gIlY4JGludGVyZmFjZU5hbWUiOwor
ICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gJGludGVyZmFjZU5hbWU7CisKKyAgICAjIENvcHkgY29u
dGVudHMgb2YgcGFyZW50IGNsYXNzZXMgZXhjZXB0IHRoZSBmaXJzdCBwYXJlbnQgb3IgaWYgaXQg
aXMKKyAgICAjIEV2ZW50VGFyZ2V0LgorICAgICRjb2RlR2VuZXJhdG9yLT5BZGRNZXRob2RzQ29u
c3RhbnRzQW5kQXR0cmlidXRlc0Zyb21QYXJlbnRDbGFzc2VzKCRkYXRhTm9kZSk7CisKKyAgICBt
eSAkaGFzTGVnYWN5UGFyZW50ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVn
YWN5UGFyZW50In07CisgICAgbXkgJGNvbmRpdGlvbmFsID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsKKworICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIg
dGVtcGxhdGUKKyAgICBAaGVhZGVyQ29udGVudCA9IHNwbGl0KCJcciIsICRoZWFkZXJUZW1wbGF0
ZSk7CisKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgaWYgKCRjb25kaXRpb25hbCkg
eworICAgICAgICAkY29uZGl0aW9uYWxTdHJpbmcgPSAiRU5BQkxFKCIgLiBqb2luKCIpICYmIEVO
QUJMRSgiLCBzcGxpdCgvJi8sICRjb25kaXRpb25hbCkpIC4gIikiOworICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiXG4jaWYgJHtjb25kaXRpb25hbFN0cmluZ31cblxuIik7CisgICAgfQor
CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuI2lmbmRlZiAkY2xhc3NOYW1lIiAuICJfSCIp
OworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNkZWZpbmUgJGNsYXNzTmFtZSIgLiAiX0hc
blxuIik7CisKKyAgICAjIEdldCBjb3JyZWN0IHBhc3Mvc3RvcmUgdHlwZXMgcmVzcGVjdGluZyBQ
T0RUeXBlIGZsYWcKKyAgICBteSAkcG9kVHlwZSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IlBPRFR5cGUifTsKKyAgICBteSAkcGFzc1R5cGUgPSAkcG9kVHlwZSA/ICJKU1NWR1BP
RFR5cGVXcmFwcGVyPCRwb2RUeXBlPioiIDogIiRpbXBsQ2xhc3NOYW1lKiI7CisKKyAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCIkcG9kVHlwZS5oXCJcbiIpIGlmICRwb2RUeXBl
IGFuZCAoJHBvZFR5cGUgbmUgImRvdWJsZSIgYW5kICRwb2RUeXBlIG5lICJmbG9hdCIgYW5kICRw
b2RUeXBlIG5lICJSR0JBMzIiKTsKKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVk
ZSA8djguaD5cbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD5cbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSBcIlN0cmlu
Z0hhc2guaFwiXG4iKTsKKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFjZSBX
ZWJDb3JlIHtcblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzIFY4Q2xhc3NJ
bmRleDtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbmNsYXNzICRjbGFzc05hbWUg
e1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOworCisgcHVibGljOgorICBz
dGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOworICBz
dGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJhd1RlbXBsYXRl
KCk7CitFTkQKKworICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiRE9NV2luZG93IikgeworICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOworICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdFRlbXBsYXRlPiBHZXRTaGFkb3dPYmplY3RUZW1wbGF0ZSgpOworRU5ECisgICAg
fQorCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOworCisgcHJpdmF0ZToKKyAgc3Rh
dGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOwor
CisgIGZyaWVuZCBjbGFzcyBWOENsYXNzSW5kZXg7Cit9OworCitFTkQKKworICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJ9XG5cbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYg
Ly8gJGNsYXNzTmFtZSIgLiAiX0hcbiIpOworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNl
bmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWw7Cit9CisK
Kworc3ViIEdlbmVyYXRlU2V0RE9NRXhjZXB0aW9uCit7CisgICAgbXkgJGluZGVudCA9IHNoaWZ0
OworICAgIG15ICRyZXN1bHQgPSAiIjsKKworICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJpZiAo
ZWMpIHtcbiI7CisgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIiAgICBWOFByb3h5OjpTZXRET01F
eGNlcHRpb24oZWMpO1xuIjsKKyAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcbiI7CisgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIn1c
biI7CisKKyAgICByZXR1cm4gJHJlc3VsdDsKK30KKworc3ViIElzTm9kZVN1YlR5cGUKK3sKKyAg
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICByZXR1cm4gMSBpZiAoJGRhdGFOb2RlLT5uYW1l
IGVxICJOb2RlIik7CisgICAgZm9yZWFjaCAoQGFsbFBhcmVudHMpIHsKKyAgICAgICAgbXkgJHBh
cmVudCA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkXyk7CisgICAgICAgIHJldHVybiAx
IGlmICRwYXJlbnQgZXEgIk5vZGUiOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3ViIEhv
bGRlclRvTmF0aXZlCit7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkgJGltcGxD
bGFzc05hbWUgPSBzaGlmdDsKKyAgICBteSAkY2xhc3NJbmRleCA9IHNoaWZ0OworCisgICAgaWYg
KElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCA8PEVORCk7CisgICAgJGltcGxDbGFzc05hbWUqIGltcCA9IFY4UHJveHk6OkRPTVdyYXBw
ZXJUb05vZGU8JGltcGxDbGFzc05hbWU+KGhvbGRlcik7CitFTkQKKworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICAkaW1wbENsYXNzTmFt
ZSogaW1wID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8JGltcGxDbGFzc05hbWU+KFY4Q2xhc3NJ
bmRleDo6JGNsYXNzSW5kZXgsIGhvbGRlcik7CitFTkQKKworICB9Cit9CisKK3N1YiBHZW5lcmF0
ZURvbWFpblNhZmVGdW5jdGlvbkdldHRlcgoreworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0Owor
ICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRjbGFzc0luZGV4ID0gc2hpZnQ7Cisg
ICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKworICAgIG15ICRjbGFzc05hbWUgPSAiVjgi
IC4gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRmdW5jTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5uYW1lOworCisgICAgbXkgJHNpZ25hdHVyZSA9ICJ2ODo6U2lnbmF0dXJlOjpOZXcoIiAu
ICRjbGFzc05hbWUgLiAiOjpHZXRSYXdUZW1wbGF0ZSgpKSI7CisgICAgaWYgKCRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhEb05vdENoZWNrU2lnbmF0dXJlIn0p
IHsKKyAgICAgICAgJHNpZ25hdHVyZSA9ICJ2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4oKSI7Cisg
ICAgfQorCisgICAgbXkgJG5ld1RlbXBsYXRlU3RyaW5nID0gR2VuZXJhdGVOZXdGdW5jdGlvblRl
bXBsYXRlKCRmdW5jdGlvbiwgJGRhdGFOb2RlLCAkc2lnbmF0dXJlKTsKKworICAgICRpbXBsSW5j
bHVkZXN7InY4X3Byb3h5LmgifSA9IDE7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8
PEVORCk7CisgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtmdW5jTmFtZX1BdHRyR2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKSB7CisgICAgSU5DX1NUQVRTKFwiRE9NLiRpbXBsQ2xhc3NOYW1lLiRmdW5jTmFtZS5fZ2V0
XCIpOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJp
dmF0ZV90ZW1wbGF0ZSA9CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPjo6TmV3KCRuZXdUZW1wbGF0ZVN0cmluZyk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBob2xkZXIgPSBWOFByb3h5OjpMb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6JGNsYXNz
SW5kZXgsIGluZm8uVGhpcygpKTsKKyAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkgeworICAgICAg
Ly8gY2FuIG9ubHkgcmVhY2ggaGVyZSBieSAnb2JqZWN0Ll9fcHJvdG9fXy5mdW5jJywgYW5kIGl0
IHNob3VsZCBwYXNzZWQKKyAgICAgIC8vIGRvbWFpbiBzZWN1cml0eSBjaGVjayBhbHJlYWR5CisK
KyAgICAgIHJldHVybiBwcml2YXRlX3RlbXBsYXRlLT5HZXRGdW5jdGlvbigpOworICAgIH0KK0VO
RAorCisgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9kZSwgJGltcGxDbGFzc05hbWUsICRjbGFzc0lu
ZGV4KTsKKworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICBpZiAoIVY4
UHJveHk6OkNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgZmFsc2UpKSB7CisgICAgICBzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJlZF90ZW1wbGF0ZSA9
CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KCRuZXdU
ZW1wbGF0ZVN0cmluZyk7CisgICAgICByZXR1cm4gc2hhcmVkX3RlbXBsYXRlLT5HZXRGdW5jdGlv
bigpOworCisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBwcml2YXRlX3RlbXBsYXRlLT5HZXRG
dW5jdGlvbigpOworICAgIH0KKyAgfQorCitFTkQKK30KKworc3ViIEdlbmVyYXRlQ29uc3RydWN0
b3JHZXR0ZXIKK3sKKyAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworICAgIG15ICRjbGFz
c0luZGV4ID0gc2hpZnQ7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7Cisg
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtpbXBsQ2xhc3NOYW1lfUNvbnN0cnVjdG9y
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKSB7CisgICAgSU5DX1NUQVRTKFwiRE9NLiRpbXBsQ2xhc3NOYW1lLmNvbnN0cnVjdG9y
cy5fZ2V0XCIpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkYXRhID0gaW5mby5EYXRhKCk7
CisgICAgQVNTRVJUKGRhdGEtPklzTnVtYmVyKCkpOworICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZSB0eXBlID0gVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSk7
CitFTkQKKworICAgIGlmICgkY2xhc3NJbmRleCBlcSAiRE9NV0lORE9XIikgeworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBW
OFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9X
LCBpbmZvLkhvbGRlcigpKTsKKyAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7Cisg
ICAgaWYgKGZyYW1lKSB7CisgICAgICAvLyBHZXQgdGhlIHByb3h5IGNvcnJlc3BvbmRpbmcgdG8g
dGhlIERPTVdpbmRvdyBpZiBwb3NzaWJsZSB0bworICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhl
IGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGlzIGNvbnN0cnVjdGVkIGluIHRoZQorICAgICAgLy8gY29u
dGV4dCBvZiB0aGUgRE9NV2luZG93IGFuZCBub3QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNhbGxl
ci4KKyAgICAgIHJldHVybiBWOFByb3h5OjpyZXRyaWV2ZShmcmFtZSktPkdldENvbnN0cnVjdG9y
KHR5cGUpOworICAgIH0KK0VORAorICB9CisKKyAgICBpZiAoJGNsYXNzSW5kZXggZXEgIldPUktF
UkNPTlRFWFQiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IldvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eS5oIn0gPSAxOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7
CisgICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKS0+R2V0
Q29uc3RydWN0b3IodHlwZSk7CitFTkQKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Iik7CisgICAgfQorCisg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOworCisgICAgfQorCitFTkQKK30KKwor
c3ViIEdlbmVyYXRlTm9ybWFsQXR0ckdldHRlcgoreworICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlm
dDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkY2xhc3NJbmRleCA9IHNoaWZ0
OworICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CisKKyAgICBteSAkYXR0ckV4dCA9ICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzOworCisgICAgbXkgJGF0dHJO
YW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lOworICAgICRpbXBsSW5jbHVkZXN7InY4
X3Byb3h5LmgifSA9IDE7CisKKyAgICBteSAkYXR0clR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3Ry
aXBNb2R1bGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKTsKKyAgICBteSAkYXR0cklzUG9k
VHlwZSA9IElzUG9kVHlwZSgkYXR0clR5cGUpOworCisgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXRO
YXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDApOworICAgIG15
ICRpc1BvZFR5cGUgPSBJc1BvZFR5cGUoJGltcGxDbGFzc05hbWUpOworICAgIG15ICRza2lwQ29u
dGV4dCA9IDA7CisKKworICAgIGlmICgkaXNQb2RUeXBlKSB7CisgICAgICAgICRpbXBsQ2xhc3NO
YW1lID0gR2V0TmF0aXZlVHlwZSgkaW1wbENsYXNzTmFtZSk7CisgICAgICAgICRpbXBsSW5jbHVk
ZXN7IlY4U1ZHUE9EVHlwZVdyYXBwZXIuaCJ9ID0gMTsKKyAgICB9CisKKyAgICAjIFNwZWNpYWwg
Y2FzZTogU1ZHWm9vbUV2ZW50J3MgYXR0cmlidXRlcyBhcmUgYWxsIHJlYWQtb25seQorICAgIGlm
ICgkaW1wbENsYXNzTmFtZSBlcSAiU1ZHWm9vbUV2ZW50IikgeworICAgICAgICAkYXR0cklzUG9k
VHlwZSA9IDA7CisgICAgICAgICRza2lwQ29udGV4dCA9IDE7CisgICAgfQorCisgICAgIyBTcGVj
aWFsIGNhc2U6IFNWR1NWR0VlbGVtZW50Ojp2aWV3cG9ydCBpcyByZWFkLW9ubHkKKyAgICBpZiAo
KCRpbXBsQ2xhc3NOYW1lIGVxICJTVkdTVkdFbGVtZW50IikgYW5kICgkYXR0ck5hbWUgZXEgInZp
ZXdwb3J0IikpIHsKKyAgICAgICAgJGF0dHJJc1BvZFR5cGUgPSAwOworICAgICAgICAkc2tpcENv
bnRleHQgPSAxOworICAgIH0KKworICAgICMgU3BlY2lhbCBjYXNlIGZvciBTVkdDb2xvcgorICAg
IGlmICgoJGltcGxDbGFzc05hbWUgZXEgIlNWR0NvbG9yIikgYW5kICgkYXR0ck5hbWUgZXEgInJn
YkNvbG9yIikpIHsKKyAgICAgICAgJGF0dHJJc1BvZFR5cGUgPSAwOworICAgIH0KKworICAgIG15
ICRnZXR0ZXJTdHJpbmdVc2VzSW1wID0gJGltcGxDbGFzc05hbWUgbmUgImRvdWJsZSI7CisKKyAg
IyBHZXR0ZXIKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CisgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHthdHRyTmFtZX1BdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKSB7CisgICAgSU5DX1NU
QVRTKFwiRE9NLiRpbXBsQ2xhc3NOYW1lLiRhdHRyTmFtZS5fZ2V0XCIpOworRU5ECisKKyAgICBp
ZiAoJGlzUG9kVHlwZSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7
CisgICAgVjhTVkdQT0RUeXBlV3JhcHBlcjwkaW1wbENsYXNzTmFtZT4qIGltcF93cmFwcGVyID0g
VjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8VjhTVkdQT0RUeXBlV3JhcHBlcjwkaW1wbENsYXNzTmFt
ZT4gPihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBpbmZvLkhvbGRlcigpKTsKKyAgICAkaW1w
bENsYXNzTmFtZSBpbXBfaW5zdGFuY2UgPSAqaW1wX3dyYXBwZXI7CitFTkQKKyAgICAgICAgaWYg
KCRnZXR0ZXJTdHJpbmdVc2VzSW1wKSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCA8PEVORCk7CisgICAgJGltcGxDbGFzc05hbWUqIGltcCA9ICZpbXBfaW5zdGFuY2U7CitF
TkQKKyAgICAgICAgfQorCisgICAgfSBlbHNpZiAoJGF0dHJFeHQtPnsidjhPblByb3RvIn0gfHwg
JGF0dHJFeHQtPnsiVjhEaXNhbGxvd1NoYWRvd2luZyJ9KSB7CisgICAgICAgICMgcGVyZm9ybSBs
b29rdXAgZmlyc3QKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOworICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6TG9va3VwRE9NV3JhcHBl
cihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBpbmZvLlRoaXMoKSk7CisgICAgaWYgKGhvbGRl
ci5Jc0VtcHR5KCkpIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CitFTkQKKyAgICAgICAgSG9sZGVy
VG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CitFTkQKKyAgICAgICAg
SG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOwor
ICAgIH0KKworICAgICMgR2VuZXJhdGUgc2VjdXJpdHkgY2hlY2tzIGlmIG5lY2Vzc2FyeQorICAg
IGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja05v
ZGVTZWN1cml0eSJ9KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYg
KCFWOFByb3h5OjpDaGVja05vZGVTZWN1cml0eShpbXAtPiRhdHRyTmFtZSgpKSkgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTtcblxuIik7CisgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tGcmFtZVNlY3VyaXR5In0pIHsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIVY4UHJveHk6OkNoZWNrTm9kZVNlY3Vy
aXR5KGltcC0+Y29udGVudERvY3VtZW50KCkpKSByZXR1cm4gdjg6OlVuZGVmaW5lZCgpO1xuXG4i
KTsKKyAgICB9CisKKyAgICBteSAkdXNlRXhjZXB0aW9ucyA9IDEgaWYgQHskYXR0cmlidXRlLT5n
ZXR0ZXJFeGNlcHRpb25zfSBhbmQgISgkaXNQb2RUeXBlKTsKKyAgICBpZiAoJHVzZUV4Y2VwdGlv
bnMpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xu
Iik7CisgICAgfQorCisgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57InY4cmVmZXJlbmNlYXR0ciJ9KSB7CisgICAgICAgICRhdHRyTmFtZSA9ICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57InY4cmVmZXJlbmNlYXR0ciJ9
OworICAgIH0KKworICAgIG15ICRnZXR0ZXJGdW5jID0gV0tfbGNmaXJzdCgkYXR0ck5hbWUpOwor
ICAgICRnZXR0ZXJGdW5jIC49ICJBbmltYXRlZCIgaWYgJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5p
bWF0ZWRUeXBlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICBteSAkcmV0dXJu
VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PnR5cGUpOworCisgICAgbXkgJGdldHRlclN0cmluZzsKKyAgICBpZiAoJGdldHRlclN0cmluZ1Vz
ZXNJbXApIHsKKyAgICAgICAgJGdldHRlclN0cmluZyA9ICJpbXAtPiRnZXR0ZXJGdW5jKCI7Cisg
ICAgICAgICRnZXR0ZXJTdHJpbmcgLj0gImVjIiBpZiAkdXNlRXhjZXB0aW9uczsKKyAgICAgICAg
JGdldHRlclN0cmluZyAuPSAiKSI7CisgICAgICAgIGlmIChJc1JlZlB0clR5cGUoJHJldHVyblR5
cGUpKSB7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvR2V0UHRyLmgifSA9IDE7Cisg
ICAgICAgICAgICAkZ2V0dGVyU3RyaW5nID0gIldURjo6Z2V0UHRyKCIgLiAkZ2V0dGVyU3RyaW5n
IC4gIikiOworICAgICAgICB9CisgICAgICAgIGlmICgkbmF0aXZlVHlwZSBlcSAiaW50IiBhbmQK
KyAgICAgICAgICAgICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkNvbnZlcnRGcm9tU3RyaW5nIn0pIHsKKyAgICAgICAgICAgICAgICAkZ2V0dGVyU3RyaW5nIC49
ICIudG9JbnQoKSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAkZ2V0dGVyU3RyaW5nID0gImltcF9pbnN0YW5jZSI7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCRuYXRpdmVUeXBlIGVxICJTdHJpbmciKSB7CisgICAgICAgICAgICAkZ2V0dGVyU3RyaW5nID0g
IlRvU3RyaW5nKCRnZXR0ZXJTdHJpbmcpIjsKKyAgICAgICAgfQorCisgICAgICAgIG15ICRyZXN1
bHQ7CisgICAgICAgIG15ICR3cmFwcGVyOworCisgICAgICAgIGlmICgkYXR0cklzUG9kVHlwZSkg
eworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhTVkdQT0RUeXBlV3JhcHBlci5oIn0gPSAx
OworCisgICAgICAgICAgICBteSAkZ2V0dGVyID0gJGdldHRlclN0cmluZzsKKyAgICAgICAgICAg
ICRnZXR0ZXIgPX4gcy9pbXAtPi8vOworICAgICAgICAgICAgJGdldHRlciA9fiBzL1woXCkvLzsK
KyAgICAgICAgICAgIG15ICRzZXR0ZXIgPSAic2V0IiAuIFdLX3VjZmlyc3QoJGdldHRlcik7CisK
KyAgICAgICAgICAgIG15ICRpbXBsQ2xhc3NJc0FuaW1hdGVkVHlwZSA9ICRjb2RlR2VuZXJhdG9y
LT5Jc1NWR0FuaW1hdGVkVHlwZSgkaW1wbENsYXNzTmFtZSk7CisgICAgICAgICAgICBpZiAobm90
ICRpbXBsQ2xhc3NJc0FuaW1hdGVkVHlwZQorICAgICAgICAgICAgICAgIGFuZCAkY29kZUdlbmVy
YXRvci0+SXNQb2RUeXBlV2l0aFdyaXRlYWJsZVByb3BlcnRpZXMoJGF0dHJUeXBlKQorICAgICAg
ICAgICAgICAgIGFuZCBub3QgZGVmaW5lZCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJJbW11dGFibGUifSkgeworICAgICAgICAgICAgaWYgKElzUG9kVHlwZSgk
aW1wbENsYXNzTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAkd3JhcHBlciA9ICJuZXcgVjhTVkdT
dGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RUeXBlUGFyZW50PCRuYXRpdmVUeXBlLCAkaW1wbENs
YXNzTmFtZT4oJGdldHRlclN0cmluZywgaW1wX3dyYXBwZXIpIjsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgJHdyYXBwZXIgPSAibmV3IFY4U1ZHU3RhdGljUE9EVHlwZVdy
YXBwZXJXaXRoUGFyZW50PCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZT4oaW1wLCAmJHtpbXBs
Q2xhc3NOYW1lfTo6JGdldHRlciwgJiR7aW1wbENsYXNzTmFtZX06OiRzZXR0ZXIpIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgkaW1wbENsYXNzSXNB
bmltYXRlZFR5cGUpIHsKKyAgICAgICAgICAgICAgICAkd3JhcHBlciA9ICJWOFNWR0R5bmFtaWNQ
T0RUeXBlV3JhcHBlckNhY2hlPCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZT46Omxvb2t1cE9y
Q3JlYXRlV3JhcHBlcihpbXAsICYke2ltcGxDbGFzc05hbWV9OjokZ2V0dGVyLCAmJHtpbXBsQ2xh
c3NOYW1lfTo6JHNldHRlcikiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAkd3JhcHBlciA9IEdlbmVyYXRlU1ZHU3RhdGljUG9kVHlwZVdyYXBwZXIoJHJldHVyblR5cGUs
ICRnZXR0ZXJTdHJpbmcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICB2b2lkKiB3cmFwcGVyID0gJHdyYXBwZXI7XG4iKTsK
KyAgICB9IGVsc2lmICgkbmF0aXZlVHlwZSBuZSAiUkdCQ29sb3IiKSB7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgdiA9ICIpOworCisgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIkZ2V0dGVyU3RyaW5nO1xuIik7CisKKyAgICAgICAgaWYg
KCR1c2VFeGNlcHRpb25zKSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBH
ZW5lcmF0ZVNldERPTUV4Y2VwdGlvbigiICAgICIpKTsKKyAgICAgICAgfQorCisgICAgICAgICRy
ZXN1bHQgPSAidiI7CisgICAgICAgIGlmIChJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpKSB7Cisg
ICAgICAgICAgICAkcmVzdWx0ID0gIldURjo6Z2V0UHRyKCIgLiAkcmVzdWx0IC4gIikiOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBTcGVjaWFsIGNhc2U6IFJHQkNvbG9yIGlz
IG5vbmNvcHlhYmxlCisgICAgICAgICRyZXN1bHQgPSAkZ2V0dGVyU3RyaW5nOworICAgIH0KKwor
CisgICAgaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRhdHRyVHlwZSkgJiYg
ISRza2lwQ29udGV4dCkgeworICAgICAgICBteSAkcmVzdWx0T2JqZWN0ID0gJHJlc3VsdDsKKyAg
ICAgICAgaWYgKCRhdHRySXNQb2RUeXBlKSB7CisgICAgICAgICAgICAkcmVzdWx0T2JqZWN0ID0g
IndyYXBwZXIiOworICAgICAgICB9CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
R2VuZXJhdGVTVkdDb250ZXh0QXNzaWdubWVudCgkaW1wbENsYXNzTmFtZSwgJHJlc3VsdE9iamVj
dCwgIiAgICAiKSk7CisgICAgfQorCisgICAgaWYgKCRhdHRySXNQb2RUeXBlKSB7CisgICAgICAg
IG15ICRjbGFzc0luZGV4ID0gdWMoJGF0dHJUeXBlKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIiAgICByZXR1cm4gVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OiRj
bGFzc0luZGV4LCB3cmFwcGVyKTtuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICByZXR1cm4gIi5OYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZSAt
ID5zaWduYXR1cmUsICRyZXN1bHQpLiI7biIpOworICAgIH0KKworICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgIH1cblxuIik7ICAjIGVuZCBvZiBnZXR0ZXIKK30KKworCitzdWIgR2VuZXJh
dGVSZXBsYWNlYWJsZUF0dHJTZXR0ZXIKK3sKKyAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0
OworCisgICAgJGltcGxJbmNsdWRlc3sidjhfcHJveHkuaCJ9ID0gMTsKKworICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsCisgICAgICAgIiAgc3RhdGljIHZvaWQgJHthdHRyTmFtZX1BdHRyU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCIgLgorICAgICAgICIgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pIHtcbiIpOworCisg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBJTkNfU1RBVFMoXCJET00uJGltcGxDbGFz
c05hbWUuJGF0dHJOYW1lLl9zZXRcIik7XG4iKTsKKworICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+ICR7YXR0ck5hbWV9X3N0cmluZyA9IHY4OjpT
dHJpbmc6Ok5ldyhcIiR7YXR0ck5hbWV9XCIpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICBpbmZvLkhvbGRlcigpLT5EZWxldGUoJHthdHRyTmFtZX1fc3RyaW5nKTtcbiIp
OworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaW5mby5UaGlzKCktPlNldCgke2F0
dHJOYW1lfV9zdHJpbmcsIHZhbHVlKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgIH1cblxuIik7Cit9CisKKworc3ViIEdlbmVyYXRlTm9ybWFsQXR0clNldHRlcgoreworICAg
IG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBt
eSAkY2xhc3NJbmRleCA9IHNoaWZ0OworICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CisK
KyAgICBteSAkYXR0ckV4dCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzOworCisgICAgJGltcGxJbmNsdWRlc3sidjhfcHJveHkuaCJ9ID0gMTsKKworICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsCisgICAgICAgIiAgc3RhdGljIHZvaWQgJHthdHRyTmFtZX1BdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCIgLgorICAgICAgICIgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pIHtcbiIpOwor
CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBJTkNfU1RBVFMoXCJET00uJGltcGxD
bGFzc05hbWUuJGF0dHJOYW1lLl9zZXRcIik7XG4iKTsKKworICAgIG15ICRpc1BvZFR5cGUgPSBJ
c1BvZFR5cGUoJGltcGxDbGFzc05hbWUpOworCisgICAgaWYgKCRpc1BvZFR5cGUpIHsKKyAgICAg
ICAgJGltcGxDbGFzc05hbWUgPSBHZXROYXRpdmVUeXBlKCRpbXBsQ2xhc3NOYW1lKTsKKyAgICAg
ICAgJGltcGxJbmNsdWRlc3siVjhTVkdQT0RUeXBlV3JhcHBlci5oIn0gPSAxOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFz
c05hbWU+KiB3cmFwcGVyID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8VjhTVkdQT0RUeXBlV3Jh
cHBlcjwkaW1wbENsYXNzTmFtZT4gPihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBpbmZvLkhv
bGRlcigpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRpbXBs
Q2xhc3NOYW1lIGltcF9pbnN0YW5jZSA9ICp3cmFwcGVyO1xuIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgJGltcGxDbGFzc05hbWUqIGltcCA9ICZpbXBfaW5zdGFuY2U7
XG4iKTsKKworICAgIH0gZWxzaWYgKCRhdHRyRXh0LT57InY4T25Qcm90byJ9KSB7CisgICAgICAg
ICMgcGVyZm9ybSBsb29rdXAgZmlyc3QKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
PDxFTkQpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6TG9v
a3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBpbmZvLlRoaXMoKSk7Cisg
ICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CitFTkQKKyAg
ICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5k
ZXgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5E
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CitF
TkQKKyAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNs
YXNzSW5kZXgpOworICAgIH0KKworICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZUZy
b21TaWduYXR1cmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwKTsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgICRuYXRpdmVUeXBlIHYgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRy
aWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikgLiAiO1xuIik7CisKKyAgICBteSAkcmVzdWx0ID0g
IiI7CisgICAgaWYgKCRuYXRpdmVUeXBlIGVxICJpbnQiIGFuZCAkYXR0cmlidXRlLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0RnJvbVN0cmluZyJ9KSB7CisgICAgICAg
ICRyZXN1bHQgLj0gIldlYkNvcmU6OlN0cmluZzo6bnVtYmVyKCI7CisgICAgfQorICAgICRyZXN1
bHQgLj0gInYiOworICAgIGlmICgkbmF0aXZlVHlwZSBlcSAiaW50IiBhbmQgJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydEZyb21TdHJpbmcifSkgewor
ICAgICAgICAkcmVzdWx0IC49ICIpIjsKKyAgICB9CisgICAgbXkgJHJldHVyblR5cGUgPSAkY29k
ZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKTsKKyAg
ICBpZiAoSXNSZWZQdHJUeXBlKCRyZXR1cm5UeXBlKSkgeworICAgICAgICAkcmVzdWx0ID0gIldU
Rjo6Z2V0UHRyKCIgLiAkcmVzdWx0IC4gIikiOworICAgIH0KKworICAgIG15ICR1c2VFeGNlcHRp
b25zID0gMSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9IGFuZCAhKCRpc1BvZFR5
cGUpOworCisgICAgaWYgKCR1c2VFeGNlcHRpb25zKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7
IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOworICAgIH0KKworICAgIGlmICgkaW1wbENs
YXNzTmFtZSBlcSAiZG91YmxlIikgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
ICAgICppbXAgPSAkcmVzdWx0O1xuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICBpbXAtPnNldCIgLiBXS191Y2ZpcnN0KCRhdHRyTmFtZSkgLiAi
KCIgLiAkcmVzdWx0KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiwgZWMiKSBp
ZiAkdXNlRXhjZXB0aW9uczsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIik7XG4i
KTsKKyAgICB9CisKKyAgICBpZiAoJHVzZUV4Y2VwdGlvbnMpIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICBWOFByb3h5OjpTZXRET01FeGNlcHRpb24oZWMpO1xuIik7Cisg
ICAgfQorCisgICAgaWYgKCRpc1BvZFR5cGUpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICB3cmFwcGVyLT5jb21taXRDaGFuZ2UoKmltcCwgVjhQcm94eTo6R2V0U1ZHQ29u
dGV4dCh3cmFwcGVyKSk7XG4iKTsKKyAgICB9IGVsc2lmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4
dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siU1ZH
RWxlbWVudC5oIn0gPSAxOworCisgICAgICAgIG15ICRjdXJyZW50T2JqZWN0ID0gImltcCI7Cisg
ICAgICAgIGlmICgkaXNQb2RUeXBlKSB7CisgICAgICAgICAgICAkY3VycmVudE9iamVjdCA9ICJ3
cmFwcGVyIjsKKyAgICAgICAgfQorCisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgaWYgKFNWR0VsZW1lbnQqIGNvbnRleHQgPSBWOFByb3h5OjpHZXRTVkdDb250ZXh0KCRjdXJy
ZW50T2JqZWN0KSkge1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
ICAgIGNvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRl
TmFtZSgpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIH1cbiIp
OworICAgIH0KKworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuO1xuIik7
CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgfVxuXG4iKTsgICMgZW5kIG9mIHNldHRl
cgorfQorCitzdWIgR2VuZXJhdGVOZXdGdW5jdGlvblRlbXBsYXRlCit7CisgICAgJGZ1bmN0aW9u
ID0gc2hpZnQ7CisgICAgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgJHNpZ25hdHVyZSA9IHNoaWZ0
OworCisgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJG5h
bWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKworICAgIGlmICgkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IHx8CisgICAgICAgICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhDdXN0b20ifSkgeworICAg
ICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0
b20ifSAmJgorICAgICAgICAgICAgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJWOEN1c3RvbSJ9KSB7CisgICAgICAgICAgICBkaWUgIkN1c3RvbSBhbmQgVjhDdXN0
b20gc2hvdWxkIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZSEiCisgICAgICAgIH0KKyAgICAgICAgbXkg
JGN1c3RvbUZ1bmMgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbSJ9IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOEN1c3RvbSJ9OworICAgICAgICBpZiAoJGN1c3Rv
bUZ1bmMgZXEgMSkgeworICAgICAgICAgICAgJGN1c3RvbUZ1bmMgPSAkaW50ZXJmYWNlTmFtZSAu
IFdLX3VjZmlyc3QoJG5hbWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAidjg6OkZ1bmN0
aW9uVGVtcGxhdGU6Ok5ldyhWOEN1c3RvbTo6djgke2N1c3RvbUZ1bmN9Q2FsbGJhY2ssIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpLCAkc2lnbmF0dXJlKSI7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
cmV0dXJuICJ2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCR7aW50ZXJmYWNlTmFtZX1JbnRlcm5h
bDo6JHtuYW1lfUNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgJHNpZ25hdHVyZSki
OworICAgIH0KK30KKworc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsYmFjaworeworICAgIG15ICRm
dW5jdGlvbiA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRjbGFz
c0luZGV4ID0gc2hpZnQ7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKworICAgIG15
ICRpbnRlcmZhY2VOYW1lID0gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRuYW1lID0gJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPm5hbWU7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAorIiAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke25hbWV9Q2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykge1xuIiAuCisiICAgIElOQ19TVEFUUyhcIkRPTS4kaW1wbENsYXNzTmFt
ZS4kbmFtZVwiKTtcbiIpOworCisgICAgbXkgJG51bVBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+
cGFyYW1ldGVyc307CisKKyAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJSZXF1aXJlc0FsbEFyZ3VtZW50cyJ9KSB7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsCisgICAgICAgICAgICAiICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgJG51bVBh
cmFtZXRlcnMpIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7XG4iKTsKKyAgICB9CisKKyAgICBpZiAo
SXNQb2RUeXBlKCRpbXBsQ2xhc3NOYW1lKSkgeworICAgICAgICBteSAkbmF0aXZlQ2xhc3NOYW1l
ID0gR2V0TmF0aXZlVHlwZSgkaW1wbENsYXNzTmFtZSk7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgVjhTVkdQT0RUeXBlV3JhcHBlcjwkbmF0aXZlQ2xhc3NOYW1lPiogaW1w
X3dyYXBwZXIgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPCRu
YXRpdmVDbGFzc05hbWU+ID4oVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgYXJncy5Ib2xkZXIo
KSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAkbmF0aXZlQ2xh
c3NOYW1lIGltcF9pbnN0YW5jZSA9ICppbXBfd3JhcHBlcjtcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVDbGFzc05hbWUqIGltcCA9ICZpbXBfaW5zdGFu
Y2U7XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8
PEVORCk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7
CitFTkQKKyAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwg
JGNsYXNzSW5kZXgpOworICAgIH0KKworICAjIENoZWNrIGRvbWFpbiBzZWN1cml0eSBpZiBuZWVk
ZWQKKyAgICBpZiAoKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrRG9tYWlu
U2VjdXJpdHkifQorICAgICAgIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKQorICAg
ICAgICYmICEkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90
Q2hlY2tEb21haW5TZWN1cml0eSJ9KSB7CisgICAgIyBXZSBoYXZlIG5vdCBmaW5kIHJlYWwgdXNl
IGNhc2VzIHlldC4KKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAorIiAgICBpZiAoIVY4UHJv
eHk6OkNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpIHtcbiIuCisiICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTtcbiIgLgorIiAgICB9XG4iKTsKKyAgICB9CisKKworICAgIGlm
IChAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIHsKKyAgICAgICAgJGltcGxJbmNsdWRl
c3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIik7CisgICAgfQorCisgICAgaWYgKCRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5k
bGluZyJ9KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgU2NyaXB0Q2Fs
bFN0YWNrIGNhbGxTdGFjayhhcmdzLCAkbnVtUGFyYW1ldGVycyk7XG4iKTsKKyAgICAgICAgJGlt
cGxJbmNsdWRlc3siU2NyaXB0Q2FsbFN0YWNrLmgifSA9IDE7CisgICAgfQorCisgICAgbXkgJHBh
cmFtSW5kZXggPSAwOworICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQHskZnVuY3Rpb24tPnBh
cmFtZXRlcnN9KSB7CisgICAgICAgIFRyYW5zbGF0ZVBhcmFtZXRlcigkcGFyYW1ldGVyKTsKKwor
ICAgICAgICBteSAkcGFyYW1ldGVyTmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7CisKKyAgICAgICAg
aWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9KSB7CisgICAg
ICAgICAgICAjIEdlbmVyYXRlIGVhcmx5IGNhbGwgaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcGFy
YW1ldGVycy4KKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPD0gJHBhcmFtSW5kZXgpIHtcbiIpOworICAgICAgICAgICAgbXkgJGZ1bmN0
aW9uQ2FsbCA9IEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCRmdW5jdGlvbiwgJHBhcmFtSW5k
ZXgsICIgICAgIiB4IDIsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICRmdW5jdGlvbkNhbGwpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIiAgICB9XG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChCYXNpY1R5cGVD
YW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICBib29sICR7cGFyYW1ldGVyTmFtZX1PaztcbiIpOworICAgICAgICB9
CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAiIC4gR2V0TmF0aXZlVHlw
ZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlciwgMSkgLiAiICRwYXJhbWV0ZXJOYW1lID0gIik7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVy
LCAiYXJnc1skcGFyYW1JbmRleF0iLAorICAgICAgICAgICBCYXNpY1R5cGVDYW5GYWlsQ29udmVy
c2lvbigkcGFyYW1ldGVyKSA/ICAiJHtwYXJhbWV0ZXJOYW1lfU9rIiA6IHVuZGVmKSAuICI7XG4i
KTsKKworICAgICAgICBpZiAoVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpKSB7Cisg
ICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAorIiAgICBpZiAoISRwYXJhbWV0ZXJOYW1lIiAu
IChCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSA/ICJPayIgOiAiIikgLiAi
KSB7XG4iIC4KKyIgICAgICBWOFByb3h5OjpTZXRET01FeGNlcHRpb24oVFlQRV9NSVNNQVRDSF9F
UlIpO1xuIiAuCisiICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpO1xuIiAuCisi
ICAgIH1cbiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJJc0luZGV4In0pIHsKKyAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV4
Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
CisiICAgIGlmICgkcGFyYW1ldGVyTmFtZSA8IDApIHtcbiIgLgorIiAgICAgIFY4UHJveHk6OlNl
dERPTUV4Y2VwdGlvbihJTkRFWF9TSVpFX0VSUik7XG4iIC4KKyIgICAgICByZXR1cm4gdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCk7XG4iIC4KKyIgICAgfVxuIik7CisgICAgICAgIH0KKworICAgICAg
ICAkcGFyYW1JbmRleCsrOworICAgIH0KKworICAgICMgQnVpbGQgdGhlIGZ1bmN0aW9uIGNhbGwg
c3RyaW5nLgorICAgIG15ICRjYWxsU3RyaW5nID0gR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmco
JGZ1bmN0aW9uLCAkcGFyYW1JbmRleCwgIiAgICAiLCAkaW1wbENsYXNzTmFtZSk7CisgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiRjYWxsU3RyaW5nIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIiAgfVxuXG4iKTsKK30KKworc3ViIEdlbmVyYXRlQmF0Y2hlZEF0dHJpYnV0ZURh
dGEKK3sKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRhdHRyaWJ1dGVz
ID0gc2hpZnQ7CisKKyAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEAkYXR0cmlidXRlcykgewor
ICAgICAgICBteSAkYXR0ck5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAg
ICAgIG15ICRhdHRyRXh0ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXM7CisKKyAgICAgICAgbXkgJGFjY2Vzc0NvbnRyb2wgPSAidjg6OkRFRkFVTFQiOworICAgICAg
ICBpZiAoJGF0dHJFeHQtPnsiRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5T25HZXQifSkgeworICAg
ICAgICAgICAgJGFjY2Vzc0NvbnRyb2wgPSAidjg6OkFMTF9DQU5fUkVBRCI7CisgICAgICAgIH0g
ZWxzaWYgKCRhdHRyRXh0LT57IkRvTm90Q2hlY2tEb21haW5TZWN1cml0eU9uU2V0In0pIHsKKyAg
ICAgICAgICAgICRhY2Nlc3NDb250cm9sID0gInY4OjpBTExfQ0FOX1dSSVRFIjsKKyAgICAgICAg
fSBlbHNpZiAoJGF0dHJFeHQtPnsiRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5In0pIHsKKyAgICAg
ICAgICAgICRhY2Nlc3NDb250cm9sID0gInY4OjpBTExfQ0FOX1JFQUQiOworICAgICAgICBpZiAo
ISgkYXR0cmlidXRlLT50eXBlID1+IC9ecmVhZG9ubHkvKSAmJiAhKCRhdHRyRXh0LT57IlY4UmVh
ZE9ubHkifSkpIHsKKyAgICAgICAgICAgICRhY2Nlc3NDb250cm9sIC49ICJ8djg6OkFMTF9DQU5f
V1JJVEUiOworICAgICAgICB9CisgICAgfQorICAgIGlmICgkYXR0ckV4dC0+eyJWOERpc2FsbG93
U2hhZG93aW5nIn0pIHsKKyAgICAgICAgJGFjY2Vzc0NvbnRyb2wgLj0gInx2ODo6UFJPSElCSVRT
X09WRVJXUklUSU5HIjsKKyAgICB9CisgICAgJGFjY2Vzc0NvbnRyb2wgPSAic3RhdGljX2Nhc3Q8
djg6OkFjY2Vzc0NvbnRyb2w+KCIgLiAkYWNjZXNzQ29udHJvbCAuICIpIjsKKworICAgIG15ICRj
dXN0b21BY2Nlc3NvciA9CisgICAgICAgICRhdHRyRXh0LT57IkN1c3RvbSJ9IHx8CisgICAgICAg
ICRhdHRyRXh0LT57IkN1c3RvbVNldHRlciJ9IHx8CisgICAgICAgICRhdHRyRXh0LT57IkN1c3Rv
bUdldHRlciJ9IHx8CisgICAgICAgICRhdHRyRXh0LT57IlY4Q3VzdG9tIn0gfHwKKyAgICAgICAg
JGF0dHJFeHQtPnsiVjhDdXN0b21TZXR0ZXIifSB8fAorICAgICAgICAkYXR0ckV4dC0+eyJWOEN1
c3RvbUdldHRlciJ9IHx8CisgICAgICAgICIiOworICAgIGlmICgkY3VzdG9tQWNjZXNzb3IgZXEg
MSkgeworICAgICAgICAjIHVzZSB0aGUgbmFtaW5nIGNvbnZlbnNpb24sIGludGVyZmFjZSArIChj
YXBpdGFsaXplKSBhdHRyIG5hbWUKKyAgICAgICAgJGN1c3RvbUFjY2Vzc29yID0gJGludGVyZmFj
ZU5hbWUgLiBXS191Y2ZpcnN0KCRhdHRyTmFtZSk7CisgICAgfQorCisgICAgbXkgJGdldHRlcjsK
KyAgICBteSAkc2V0dGVyOworICAgIG15ICRwcm9wQXR0ciA9ICJ2ODo6Tm9uZSI7CisgICAgbXkg
JGhhc0N1c3RvbVNldHRlciA9IDA7CisKKyAgICAjIENoZWNrIGF0dHJpYnV0ZXMuCisgICAgaWYg
KCRhdHRyRXh0LT57IkRvbnRFbnVtIn0pIHsKKyAgICAgICAgJHByb3BBdHRyIC49ICJ8djg6OkRv
bnRFbnVtIjsKKyAgICB9CisgICAgaWYgKCRhdHRyRXh0LT57IlY4RGlzYWxsb3dTaGFkb3dpbmci
fSkgeworICAgICAgICAkcHJvcEF0dHIgLj0gInx2ODo6RG9udERlbGV0ZSI7CisgICAgfQorCisg
ICAgbXkgJG9uX3Byb3RvID0gIjAgLyogb24gaW5zdGFuY2UgKi8iOworICAgIG15ICRkYXRhID0g
IlY4Q2xhc3NJbmRleDo6SU5WQUxJRF9DTEFTU19JTkRFWCAvKiBubyBkYXRhICovIjsKKworICAg
ICMgQ29uc3RydWN0b3IKKyAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9D
b25zdHJ1Y3RvciQvKSB7CisgICAgICAgIG15ICRjb25zdHJ1Y3RvclR5cGUgPSAkY29kZUdlbmVy
YXRvci0+U3RyaXBNb2R1bGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKTsKKyAgICAgICAg
JGNvbnN0cnVjdG9yVHlwZSA9fiBzL0NvbnN0cnVjdG9yJC8vOworICAgICAgICBteSAkY29uc3Ry
dWN0b3JJbmRleCA9IHVjKCRjb25zdHJ1Y3RvclR5cGUpOworICAgICAgICAkZGF0YSA9ICJWOENs
YXNzSW5kZXg6OiR7Y29uc3RydWN0b3JJbmRleH0iOworICAgICAgICAkZ2V0dGVyID0gIiR7aW50
ZXJmYWNlTmFtZX1JbnRlcm5hbDo6JHtpbnRlcmZhY2VOYW1lfUNvbnN0cnVjdG9yR2V0dGVyIjsK
KyAgICAgICAgJHNldHRlciA9ICIwIjsKKyAgICAgICAgJHByb3BBdHRyID0gInY4OjpSZWFkT25s
eSI7CisKKyAgICAjIEV2ZW50TGlzdGVuZXJzCisgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT50eXBlIGVxICJFdmVudExpc3RlbmVyIikgeworICAgICAgICBpZiAoJGludGVyZmFj
ZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAgICAgICAgICRnZXR0ZXIgPSAiVjhDdXN0b206
OnY4RE9NV2luZG93RXZlbnRIYW5kbGVyQWNjZXNzb3JHZXR0ZXIiOworICAgICAgICAgICAgJHNl
dHRlciA9ICJWOEN1c3RvbTo6djhET01XaW5kb3dFdmVudEhhbmRsZXJBY2Nlc3NvclNldHRlciI7
CisgICAgICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJFbGVtZW50IiB8fCAkaW50ZXJm
YWNlTmFtZSBlcSAiRG9jdW1lbnQiIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJTVkdFbGVtZW50SW5z
dGFuY2UiKSB7CisgICAgICAgICAgICAkZ2V0dGVyID0gIlY4Q3VzdG9tOjp2OEVsZW1lbnRFdmVu
dEhhbmRsZXJBY2Nlc3NvckdldHRlciI7CisgICAgICAgICAgICAkc2V0dGVyID0gIlY4Q3VzdG9t
Ojp2OEVsZW1lbnRFdmVudEhhbmRsZXJBY2Nlc3NvclNldHRlciI7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAkZ2V0dGVyID0gIlY4Q3VzdG9tOjp2OCR7Y3VzdG9tQWNjZXNzb3J9QWNj
ZXNzb3JHZXR0ZXIiOworICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJXb3JrZXJD
b250ZXh0IiBhbmQgJGF0dHJOYW1lIGVxICJzZWxmIikgeworICAgICAgICAgICAgICAgICRzZXR0
ZXIgPSAiMCI7CisgICAgICAgICAgICAgICAgJHByb3BBdHRyID0gInY4OjpSZWFkT25seSI7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICRzZXR0ZXIgPSAiVjhDdXN0b206
OnY4JHtjdXN0b21BY2Nlc3Nvcn1BY2Nlc3NvclNldHRlciI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICMgQ3VzdG9tIEdldHRlciBhbmQgU2V0dGVyCisgICAgfSBlbHNpZiAoJGF0
dHJFeHQtPnsiQ3VzdG9tIn0gfHwgJGF0dHJFeHQtPnsiVjhDdXN0b20ifSkgeworICAgICAgICAk
Z2V0dGVyID0gIlY4Q3VzdG9tOjp2OCR7Y3VzdG9tQWNjZXNzb3J9QWNjZXNzb3JHZXR0ZXIiOwor
ICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIldvcmtlckNvbnRleHQiIGFuZCAkYXR0ck5h
bWUgZXEgInNlbGYiKSB7CisgICAgICAgICAgICAkc2V0dGVyID0gIjAiOworICAgICAgICAgICAg
JHByb3BBdHRyID0gInY4OjpSZWFkT25seSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAkaGFzQ3VzdG9tU2V0dGVyID0gMTsKKyAgICAgICAgICAgICRzZXR0ZXIgPSAiVjhDdXN0b206
OnY4JHtjdXN0b21BY2Nlc3Nvcn1BY2Nlc3NvclNldHRlciI7CisgICAgICAgIH0KKworICAgICMg
Q3VzdG9tIFNldHRlcgorICAgIH0gZWxzaWYgKCRhdHRyRXh0LT57IkN1c3RvbVNldHRlciJ9IHx8
ICRhdHRyRXh0LT57IlY4Q3VzdG9tU2V0dGVyIn0pIHsKKyAgICAgICAgJGhhc0N1c3RvbVNldHRl
ciA9IDE7CisgICAgICAgICRnZXR0ZXIgPSAiJHtpbnRlcmZhY2VOYW1lfUludGVybmFsOjoke2F0
dHJOYW1lfUF0dHJHZXR0ZXIiOworICAgICAgICAkc2V0dGVyID0gIlY4Q3VzdG9tOjp2OCR7Y3Vz
dG9tQWNjZXNzb3J9QWNjZXNzb3JTZXR0ZXIiOworCisgICAgIyBDdXN0b20gR2V0dGVyCisgICAg
fSBlbHNpZiAoJGF0dHJFeHQtPnsiQ3VzdG9tR2V0dGVyIn0pIHsKKyAgICAgICAgJGdldHRlciA9
ICJWOEN1c3RvbTo6djgke2N1c3RvbUFjY2Vzc29yfUFjY2Vzc29yR2V0dGVyIjsKKyAgICAgICAg
JHNldHRlciA9ICIke2ludGVyZmFjZU5hbWV9SW50ZXJuYWw6OiR7YXR0ck5hbWV9QXR0clNldHRl
ciI7CisKKyAgICAjIFJlcGxhY2VhYmxlCisgICAgfSBlbHNpZiAoJGF0dHJFeHQtPnsiUmVwbGFj
ZWFibGUifSkgeworICAgICAgICAjIFJlcGxhY2VhYmxlIGFjY2Vzc29yIGlzIHB1dCBvbiBpbnN0
YW5jZSB0ZW1wbGF0ZSB3aXRoIFJlYWRPbmx5IGF0dHJpYnV0ZS4KKyAgICAgICAgJGdldHRlciA9
ICIke2ludGVyZmFjZU5hbWV9SW50ZXJuYWw6OiR7YXR0ck5hbWV9QXR0ckdldHRlciI7CisgICAg
ICAgICRzZXR0ZXIgPSAiMCI7CisKKyAgICAgICAgIyBNYXJrIHRvIGF2b2lkIGR1cGxpY2F0ZSB2
ODo6UmVhZE9ubHkgZmxhZ3MgaW4gb3V0cHV0LgorICAgICAgICAkaGFzQ3VzdG9tU2V0dGVyID0g
MTsKKworICAgICAgICAjIEhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIHdpbmRvdy50b3AgYmVp
bmcgbWFya2VkIHVwc3RyZWFtIGFzIFJlcGxhY2VhYmxlLgorICAgICAgICAjIEZJWE1FOiBJbnZl
c3RpZ2F0ZSB3aHkgW1JlcGxhY2VhYmxlXSBpcyBub3QgbWFya2VkIGFzIFJlYWRPbmx5CisgICAg
ICAgICMgdXBzdHJlYW0gYW5kIHJlYWNoIHBhcml0eS4KKyAgICAgICAgaWYgKCEoJGludGVyZmFj
ZU5hbWUgZXEgIkRPTVdpbmRvdyIgYW5kICRhdHRyTmFtZSBlcSAidG9wIikpIHsKKyAgICAgICAg
ICAgICRwcm9wQXR0ciAuPSAifHY4OjpSZWFkT25seSI7CisgICAgICAgIH0KKworICAgICMgTm9y
bWFsCisgICAgfSBlbHNlIHsKKyAgICAgICAgJGdldHRlciA9ICIke2ludGVyZmFjZU5hbWV9SW50
ZXJuYWw6OiR7YXR0ck5hbWV9QXR0ckdldHRlciI7CisgICAgICAgICRzZXR0ZXIgPSAiJHtpbnRl
cmZhY2VOYW1lfUludGVybmFsOjoke2F0dHJOYW1lfUF0dHJTZXR0ZXIiOworICAgIH0KKworICAg
IGlmICgkYXR0ckV4dC0+eyJSZXBsYWNlYWJsZSJ9ICYmICEkaGFzQ3VzdG9tU2V0dGVyKSB7Cisg
ICAgICAgICRzZXR0ZXIgPSAiMCI7CisgICAgICAgICRwcm9wQXR0ciAuPSAifHY4OjpSZWFkT25s
eSI7CisgICAgfQorCisgICAgIyBSZWFkIG9ubHkgYXR0cmlidXRlcworICAgIGlmICgkYXR0cmli
dXRlLT50eXBlID1+IC9ecmVhZG9ubHkvIHx8ICRhdHRyRXh0LT57IlY4UmVhZE9ubHkifSkgewor
ICAgICAgICAkc2V0dGVyID0gIjAiOworICAgIH0KKworICAgICMgQW4gYWNjZXNzb3IgY2FuIGJl
IGluc3RhbGxlZCBvbiB0aGUgcHJvdG8KKyAgICBpZiAoJGF0dHJFeHQtPnsidjhPblByb3RvIn0p
IHsKKyAgICAgICAgJG9uX3Byb3RvID0gIjEgLyogb24gcHJvdG8gKi8iOworICAgIH0KKworICAg
IG15ICRjb21tZW50SW5mbyA9ICJBdHRyaWJ1dGUgJyRhdHRyTmFtZScgKFR5cGU6ICciIC4gJGF0
dHJpYnV0ZS0+dHlwZSAuCisgICAgICAgICAgICAgICAgICAgICAgIicgRXh0QXR0cjogJyIgLiBq
b2luKCcgJywga2V5cygleyRhdHRyRXh0fSkpIC4gIicpIjsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgPDxFTkQpOworICAvLyAkY29tbWVudEluZm8KKyAgeyAiJGF0dHJOYW1lIiwKKyAgICAkZ2V0
dGVyLAorICAgICRzZXR0ZXIsCisgICAgJGRhdGEsCisgICAgJGFjY2Vzc0NvbnRyb2wsCisgICAg
c3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPigkcHJvcEF0dHIpLAorICAgICRvbl9w
cm90byB9LAorRU5ECisgICAgfQorfQorCisKK3N1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCit7
CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAg
IG15ICRpbnRlcmZhY2VOYW1lID0gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRjbGFzc05hbWUg
PSAiVjgkaW50ZXJmYWNlTmFtZSI7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSAkaW50ZXJmYWNl
TmFtZTsKKyAgICBteSAkY2xhc3NJbmRleCA9IHVjKCRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVs
ZSgkaW50ZXJmYWNlTmFtZSkpOworCisgICAgbXkgJGhhc0xlZ2FjeVBhcmVudCA9ICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9OworICAgIG15ICRjb25kaXRp
b25hbCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn07CisK
KyAgICBAYWxsUGFyZW50cyA9ICRjb2RlR2VuZXJhdG9yLT5GaW5kUGFyZW50c1JlY3Vyc2l2ZWx5
KCRkYXRhTm9kZSk7CisKKyAgICAjIC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCisgICAg
QGltcGxDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhlYWRlclRlbXBsYXRlKTsKKworICAg
IHB1c2goQGltcGxGaXhlZEhlYWRlciwKKyAgICAgICAgICIjaW5jbHVkZSBcImNvbmZpZy5oXCJc
biIgLgorICAgICAgICAgIiNpbmNsdWRlIFwidjhfcHJveHkuaFwiXG4iIC4KKyAgICAgICAgICIj
aW5jbHVkZSBcInY4X2JpbmRpbmcuaFwiXG5cbiIgLgorICAgICAgICAgIiN1bmRlZiBMT0dcblxu
Iik7CisKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgaWYgKCRjb25kaXRpb25hbCkg
eworICAgICAgICAkY29uZGl0aW9uYWxTdHJpbmcgPSAiRU5BQkxFKCIgLiBqb2luKCIpICYmIEVO
QUJMRSgiLCBzcGxpdCgvJi8sICRjb25kaXRpb25hbCkpIC4gIikiOworICAgICAgICBwdXNoKEBp
bXBsRml4ZWRIZWFkZXIsICJcbiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKTsKKyAgICB9
CisKKyAgICBpZiAoJGNsYXNzTmFtZSA9fiAvXlY4U1ZHQW5pbWF0ZWQvKSB7CisgICAgICAgIEFk
ZEluY2x1ZGVzRm9yU1ZHQW5pbWF0ZWRUeXBlKCRpbnRlcmZhY2VOYW1lKTsKKyAgICB9CisKKyAg
ICAkaW1wbEluY2x1ZGVzeyIke2NsYXNzTmFtZX0uaCJ9ID0gMTsKKworICAgIEFkZEluY2x1ZGVz
Rm9yVHlwZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgJGltcGxJbmNsdWRlc3sidjhfcHJveHkuaCJ9
ID0gMTsKKworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJuYW1lc3BhY2UgV2ViQ29yZSB7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAibmFtZXNwYWNlICR7aW50ZXJmYWNl
TmFtZX1JbnRlcm5hbCB7XG5cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJ0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9XG5cbiIpOworCisgICAgbXkgJGhh
c0NvbnN0cnVjdG9ycyA9IDA7CisKKyAgICAjIEdlbmVyYXRlIHByb3BlcnR5IGFjY2Vzc29ycyBm
b3IgYXR0cmlidXRlcy4KKyAgICBmb3IgKCRpbmRleCA9IDA7ICRpbmRleCA8IEB7JGRhdGFOb2Rl
LT5hdHRyaWJ1dGVzfTsgJGluZGV4KyspIHsKKyAgICAgICAgJGF0dHJpYnV0ZSA9IEB7JGRhdGFO
b2RlLT5hdHRyaWJ1dGVzfVskaW5kZXhdOworICAgICAgICAkYXR0ck5hbWUgPSAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgICRhdHRyVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+dHlwZTsKKworICAgICAgICAjIEdlbmVyYXRlIHNwZWNpYWwgY29kZSBmb3IgdGhlIGNv
bnN0cnVjdG9yIGF0dHJpYnV0ZXMuCisgICAgICAgIGlmICgkYXR0clR5cGUgPX4gL0NvbnN0cnVj
dG9yJC8pIHsKKyAgICAgICAgICAgICRoYXNDb25zdHJ1Y3RvcnMgPSAxOworICAgICAgICAgICAg
bmV4dDsKKyAgICAgICAgfQorCisgICAgICAgICMgTWFrZSBFdmVudExpc3RlbmVycyBhbHdheXMg
Y3VzdG9tLgorICAgICAgICAjIFRPRE8obWJlbHNoZSk6IG1ha2UgdGhlIHBlcmwgY29kZSBjYXBh
YmxlIG9mIGdlbmVyYXRpbmcgdGhlCisgICAgICAgICMgICBldmVudCBzZXR0ZXJzL2dldHRlcnMu
ICBGb3Igbm93LCBXZWJLaXQgaGFzIHN0YXJ0ZWQgcmVtb3ZpbmcgdGhlCisgICAgICAgICMgICBb
Q3VzdG9tXSBhdHRyaWJ1dGUsIHNvIGp1c3QgYXV0b21hdGljYWxseSBpbnNlcnQgaXQgdG8gYXZv
aWQgZm9ya2luZworICAgICAgICAjICAgb3RoZXIgZmlsZXMuICBUaGlzIHNob3VsZCBiZSBva2F5
IGJlY2F1c2Ugd2UgY2FuJ3QgZ2VuZXJhdGUgc3R1YnMKKyAgICAgICAgIyAgIGZvciBhbnkgZXZl
bnQgZ2V0dGVyL3NldHRlcnMgYW55d2F5LgorICAgICAgICBpZiAoJGF0dHJUeXBlIGVxICJFdmVu
dExpc3RlbmVyIikgeworICAgICAgICAgICAgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0gPSAxOworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3si
VjhDdXN0b21CaW5kaW5nLmgifSA9IDE7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisK
KyAgICAgICAgIyBEbyBub3QgZ2VuZXJhdGUgYWNjZXNzb3IgaWYgdGhpcyBpcyBhIGN1c3RvbSBh
dHRyaWJ1dGUuICBUaGUKKyAgICAgICAgIyBjYWxsIHdpbGwgYmUgZm9yd2FyZGVkIHRvIGEgaGFu
ZC13cml0dGVuIGFjY2Vzc29yCisgICAgICAgICMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGlm
ICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSB8
fAorICAgICAgICAgICAgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiVjhDdXN0b20ifSkgeworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhDdXN0b21CaW5k
aW5nLmgifSA9IDE7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgIyBH
ZW5lcmF0ZSB0aGUgYWNjZXNzb3IuCisgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXR0ZXIifSkgeworICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siVjhDdXN0b21CaW5kaW5nLmgifSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisJ
ICAgICAgICBHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXIoJGF0dHJpYnV0ZSwgJGRhdGFOb2RlLCAk
Y2xhc3NJbmRleCwgJGltcGxDbGFzc05hbWUpOworICAgICAgICB9CisgICAgICAgIGlmICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21TZXR0ZXIifSB8
fAorICAgICAgICAgICAgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiVjhDdXN0b21TZXR0ZXIifSkgeworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhDdXN0
b21CaW5kaW5nLmgifSA9IDE7CisgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcGxhY2VhYmxlIn0pIHsKKyAgICAgICAgICAgICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV4dGVuZHNET01HbG9iYWxPYmplY3QifSB8
fCBkaWUgIlJlcGxhY2VhYmxlIGF0dHJpYnV0ZSBjYW4gb25seSBiZSB1c2VkIGluIGludGVyZmFj
ZSB0aGF0IGRlZmluZXMgRXh0ZW5kc0RPTUdsb2JhbE9iamVjdCBhdHRyaWJ1dGUhIjsKKyAgICAg
ICAgICAgICMgR2VuZXJhdGVSZXBsYWNlYWJsZUF0dHJTZXR0ZXIoJGltcGxDbGFzc05hbWUpOwor
ICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT50eXBlICF+IC9ecmVhZG9ubHkvICYmICEkYXR0
cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFJlYWRPbmx5In0pIHsK
KyAgICAgICAgICAgIEdlbmVyYXRlTm9ybWFsQXR0clNldHRlcigkYXR0cmlidXRlLCAkZGF0YU5v
ZGUsICRjbGFzc0luZGV4LCAkaW1wbENsYXNzTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoJGhhc0NvbnN0cnVjdG9ycykgeworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yR2V0
dGVyKCRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCk7CisgICAgfQorCisgICAgIyBHZW5lcmF0
ZSBtZXRob2RzIGZvciBmdW5jdGlvbnMuCisgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRh
dGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgICMgaGFjayBmb3IgYWRkRXZlbnRMaXN0ZW5l
ci9SZW1vdmVFdmVudExpc3RlbmVyCisgICAgICAgICMgVE9ETyhmcWlhbik6IGF2b2lkIG5hbWlu
ZyBjb25mbGljdAorICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDdXN0b20ifSB8fCBmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiVjhDdXN0b20ifSkgeworICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4
Q3VzdG9tQmluZGluZy5oIn0gPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR2Vu
ZXJhdGVGdW5jdGlvbkNhbGxiYWNrKCRmdW5jdGlvbiwgJGRhdGFOb2RlLCAkY2xhc3NJbmRleCwg
JGltcGxDbGFzc05hbWUpOworICAgICAgICB9CisKKyAgICAgICAgIyBJZiB0aGUgZnVuY3Rpb24g
ZG9lcyBub3QgbmVlZCBkb21haW4gc2VjdXJpdHkgY2hlY2ssIHdlIG5lZWQgdG8KKyAgICAgICAg
IyBnZW5lcmF0ZSBhbiBhY2Nlc3MgZ2V0dGVyIHRoYXQgcmV0dXJucyBkaWZmZXJlbnQgZnVuY3Rp
b24gb2JqZWN0cworICAgICAgICAjIGZvciBkaWZmZXJlbnQgY2FsbGluZyBjb250ZXh0LgorICAg
ICAgICBpZiAoKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrRG9tYWluU2Vj
dXJpdHkifSB8fCAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpKSAmJiAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hlY2tEb21haW5TZWN1cml0
eSJ9KSB7CisgICAgICAgICAgICBHZW5lcmF0ZURvbWFpblNhZmVGdW5jdGlvbkdldHRlcigkZnVu
Y3Rpb24sICRkYXRhTm9kZSwgJGNsYXNzSW5kZXgsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgICMgQXR0cmlidXRlcworICAgIG15ICRhdHRyaWJ1dGVzID0gJGRhdGFO
b2RlLT5hdHRyaWJ1dGVzOworCisgICAgIyBGb3IgdGhlIERPTVdpbmRvdyBpbnRlcmZhY2Ugd2Ug
cGFydGl0aW9uIHRoZSBhdHRyaWJ1dGVzIGludG8gdGhlCisgICAgIyBvbmVzIHRoYXQgZGlzYWxs
b3dzIHNoYWRvd2luZyBhbmQgdGhlIHJlc3QuCisgICAgbXkgQGRpc2FsbG93c19zaGFkb3dpbmc7
CisgICAgbXkgQG5vcm1hbDsKKyAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKKyAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAJGF0dHJpYnV0ZXMpIHsKKyAgICAg
ICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJW
OERpc2FsbG93U2hhZG93aW5nIn0pIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBkaXNhbGxvd3Nf
c2hhZG93aW5nLCAkYXR0cmlidXRlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgcHVzaChAbm9ybWFsLCAkYXR0cmlidXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAjIFB1dCB0aGUgYXR0cmlidXRlcyB0aGF0IGRpc2FsbG93IHNoYWRvd2luZyBv
biB0aGUgc2hhZG93IG9iamVjdC4KKyAgICAgICAgJGF0dHJpYnV0ZXMgPSBcQG5vcm1hbDsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBz
aGFkb3dfYXR0cnNbXSA9IHtcbiIpOworICAgICAgICBHZW5lcmF0ZUJhdGNoZWRBdHRyaWJ1dGVE
YXRhKCRpbnRlcmZhY2VOYW1lLCBcQGRpc2FsbG93c19zaGFkb3dpbmcpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn07XG4iKTsKKyAgICB9CisKKyAgICBteSAkaGFzX2F0dHJpYnV0ZXMg
PSAwOworICAgIGlmIChAJGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgJGhhc19hdHRyaWJ1dGVzID0g
MTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJp
YnV0ZSBhdHRyc1tdID0ge1xuIik7CisgICAgICAgIEdlbmVyYXRlQmF0Y2hlZEF0dHJpYnV0ZURh
dGEoJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGVzKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9O1xuIik7CisgICAgfQorCisgICAgIyBTZXR1cCBjb25zdGFudHMKKyAgICBteSAkaGFz
X2NvbnN0YW50cyA9IDA7CisgICAgaWYgKEB7JGRhdGFOb2RlLT5jb25zdGFudHN9KSB7CisgICAg
ICAgICRoYXNfY29uc3RhbnRzID0gMTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0
aWMgY29uc3QgQmF0Y2hlZENvbnN0YW50IGNvbnN0c1tdID0ge1xuIik7CisgICAgfQorICAgIGZv
cmVhY2ggbXkgJGNvbnN0YW50IChAeyRkYXRhTm9kZS0+Y29uc3RhbnRzfSkgeworICAgICAgICBt
eSAkbmFtZSA9ICRjb25zdGFudC0+bmFtZTsKKyAgICAgICAgbXkgJHZhbHVlID0gJGNvbnN0YW50
LT52YWx1ZTsKKyAgICAgICAgIyBUT0RPIHdlIG5lZWQgdGhlIHN0YXRpY19jYXN0IGhlcmUgb25s
eSBiZWNhdXNlIG9mIG9uZSBjb25zdGFudCwgTm9kZUZpbHRlci5pZGwKKyAgICAgICAgIyBkZWZp
bmVzICJjb25zdCB1bnNpZ25lZCBsb25nIFNIT1dfQUxMID0gMHhGRkZGRkZGRiIuICBJdCB3b3Vs
ZCBiZSBiZXR0ZXIgaWYgd2UKKyAgICAgICAgIyBoYW5kbGVkIHRoaXMgaGVyZSwgYW5kIGNvbnZl
cnRlZCBpdCB0byBhIC0xIGNvbnN0YW50IGluIHRoZSBjKysgb3V0cHV0LgorICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgPDxFTkQpOworICB7ICIke25hbWV9Iiwgc3RhdGljX2Nhc3Q8c2lnbmVk
IGludD4oJHZhbHVlKSB9LAorRU5ECisgICAgfQorICAgIGlmICgkaGFzX2NvbnN0YW50cykgewor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn07XG4iKTsKKyAgICB9CisKKyAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAifSAvLyBuYW1lc3BhY2UgJHtpbnRlcmZhY2VOYW1lfUludGVybmFs
XG5cbiIpOworCisgICAgbXkgJGFjY2Vzc19jaGVjayA9ICIvKiBubyBhY2Nlc3MgY2hlY2sgKi8i
OworICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja0RvbWFpblNl
Y3VyaXR5In0gJiYgISgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikpIHsKKyAgICAgICAg
JGFjY2Vzc19jaGVjayA9ICJpbnN0YW5jZS0+U2V0QWNjZXNzQ2hlY2tDYWxsYmFja3MoVjhDdXN0
b206OnY4JHtpbnRlcmZhY2VOYW1lfU5hbWVkU2VjdXJpdHlDaGVjaywgVjhDdXN0b206OnY4JHtp
bnRlcmZhY2VOYW1lfUluZGV4ZWRTZWN1cml0eUNoZWNrLCB2ODo6SW50ZWdlcjo6TmV3KFY4Q2xh
c3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4Ojoke2NsYXNzSW5kZXh9KSkpOyI7CisgICAgfQor
CisgICAgIyBGb3IgdGhlIERPTVdpbmRvdyBpbnRlcmZhY2UsIGdlbmVyYXRlIHRoZSBzaGFkb3cg
b2JqZWN0IHRlbXBsYXRlCisgICAgIyBjb25maWd1cmF0aW9uIG1ldGhvZC4KKyAgICBpZiAoJGlt
cGxDbGFzc05hbWUgZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
IDw8RU5EKTsKK3N0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0VGVtcGxhdGU+IENvbmZp
Z3VyZVNoYWRvd09iamVjdFRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3RUZW1wbGF0
ZT4gdGVtcGwpIHsKKyAgQmF0Y2hDb25maWd1cmVBdHRyaWJ1dGVzKHRlbXBsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0VGVtcGxhdGU+KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dfYXR0cnMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplb2Yoc2hhZG93X2F0dHJzKS9zaXplb2YoKnNoYWRvd19hdHRycykpOworICBy
ZXR1cm4gdGVtcGw7Cit9CitFTkQKKyAgICB9CisKKyAgICAjIEdlbmVyYXRlIHRoZSB0ZW1wbGF0
ZSBjb25maWd1cmF0aW9uIG1ldGhvZAorICAgIHB1c2goQGltcGxDb250ZW50LCAgPDxFTkQpOwor
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmUke2Ns
YXNzTmFtZX1UZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVz
YykgeworICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZSA9IGRlc2MtPklu
c3RhbmNlVGVtcGxhdGUoKTsKKyAgaW5zdGFuY2UtPlNldEludGVybmFsRmllbGRDb3VudCgyKTsK
KyAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRfc2lnbmF0dXJlID0gdjg6OlNpZ25h
dHVyZTo6TmV3KGRlc2MpOworICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90byA9
IGRlc2MtPlByb3RvdHlwZVRlbXBsYXRlKCk7CisgICRhY2Nlc3NfY2hlY2sKK0VORAorCisKKyAg
ICAjIFNldCB1cCBvdXIgYXR0cmlidXRlcyBpZiB3ZSBoYXZlIHRoZW0KKyAgICBpZiAoJGhhc19h
dHRyaWJ1dGVzKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgIEJhdGNo
Q29uZmlndXJlQXR0cmlidXRlcyhpbnN0YW5jZSwgcHJvdG8sIGF0dHJzLCBzaXplb2YoYXR0cnMp
L3NpemVvZigqYXR0cnMpKTsKK0VORAorICAgIH0KKworICAgICMgRGVmaW5lIG91ciBmdW5jdGlv
bnMgd2l0aCBTZXQoKSBvciBTZXRBY2Nlc3NvcigpCisgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24g
KEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgIG15ICRhdHRyRXh0ID0gJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlczsKKyAgICAgICAgbXkgJG5hbWUgPSAk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKworICAgICAgICBteSAkcHJvcGVydHlfYXR0cmli
dXRlcyA9ICJ2ODo6RG9udERlbGV0ZSI7CisgICAgICAgIGlmICgkYXR0ckV4dC0+eyJEb250RW51
bSJ9KSB7CisgICAgICAgICAgICAkcHJvcGVydHlfYXR0cmlidXRlcyAuPSAifHY4OjpEb250RW51
bSI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCRhdHRyRXh0LT57IlY4UmVhZE9ubHkifSkgewor
ICAgICAgICAgICAgJHByb3BlcnR5X2F0dHJpYnV0ZXMgLj0gInx2ODo6UmVhZE9ubHkiOworICAg
ICAgICB9CisKKyAgICAgICAgbXkgJGNvbW1lbnRJbmZvID0gIkZ1bmN0aW9uICckbmFtZScgKEV4
dEF0dHI6ICciIC4gam9pbignICcsIGtleXMoJXskYXR0ckV4dH0pKSAuICInKSI7CisKKyAgICAg
ICAgbXkgJHRlbXBsYXRlID0gInByb3RvIjsKKyAgICAgICAgaWYgKCRhdHRyRXh0LT57IlY4T25J
bnN0YW5jZSJ9KSB7CisgICAgICAgICAgICAkdGVtcGxhdGUgPSAiaW5zdGFuY2UiOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCRhdHRyRXh0LT57IkRvTm90Q2hlY2tEb21haW5TZWN1cml0eSJ9
ICYmCisgICAgICAgICAgICAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tE
b21haW5TZWN1cml0eSJ9IHx8ICRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSkgeworICAg
ICAgICAgICAgIyBNYXJrIHRoZSBhY2Nlc3NvciBhcyBSZWFkT25seSBhbmQgc2V0IGl0IG9uIHRo
ZSBwcm90byBvYmplY3Qgc28KKyAgICAgICAgICAgICMgaXQgY2FuIGJlIHNoYWRvd2VkLiBUaGlz
IGlzIHJlYWxseSBhIGhhY2sgdG8gbWFrZSBpdCB3b3JrLgorICAgICAgICAgICAgIyBUaGVyZSBh
cmUgc2V2ZXJhbCBzY2VuZXJpYSB0byBjYWxsIGludG8gdGhlIGFjY2Vzc29yOgorICAgICAgICAg
ICAgIyAgIDEpIGZyb20gdGhlIHNhbWUgZG9tYWluOiAid2luZG93Lm9wZW4iOgorICAgICAgICAg
ICAgIyAgICAgIHRoZSBhY2Nlc3NvciBmaW5kcyB0aGUgRE9NIHdyYXBwZXIgaW4gdGhlIHByb3Rv
IGNoYWluOworICAgICAgICAgICAgIyAgIDIpIGZyb20gdGhlIHNhbWUgZG9tYWluOiAid2luZG93
Ll9fcHJvdG9fXy5vcGVuIjoKKyAgICAgICAgICAgICMgICAgICB0aGUgYWNjZXNzb3Igd2lsbCBO
T1QgZmluZCBhIERPTSB3cmFwcGVyIGluIHRoZSBwcm90b3R5cGUgY2hhaW4KKyAgICAgICAgICAg
ICMgICAzKSBmcm9tIGFub3RoZXIgZG9tYWluOiAid2luZG93Lm9wZW4iOgorICAgICAgICAgICAg
IyAgICAgIHRoZSBhY2Nlc3MgZmluZCB0aGUgRE9NIHdyYXBwZXIgaW4gdGhlIHByb3RvdHlwZSBj
aGFpbgorICAgICAgICAgICAgIyAgICJ3aW5kb3cuX19wcm90b19fLm9wZW4iIGZyb20gYW5vdGhl
ciBkb21haW4gd2lsbCBmYWlsIHdoZW4KKyAgICAgICAgICAgICMgICBhY2Nlc3NpbmcgJ19fcHJv
dG9fXycKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlIHNvbHV0aW9uIGlzIHZlcnkg
aGFja3kgYW5kIGZyYWdpbGUsIGl0IHJlYWxseSBuZWVkcyB0byBiZSByZXBsYWNlZAorICAgICAg
ICAgICAgIyBieSBhIGJldHRlciBzb2x1dGlvbi4KKyAgICAgICAgICAgICRwcm9wZXJ0eV9hdHRy
aWJ1dGVzIC49ICJ8djg6OlJlYWRPbmx5IjsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCA8PEVORCk7CisKKyAgLy8gJGNvbW1lbnRJbmZvCisgICR0ZW1wbGF0ZS0+U2V0QWNjZXNzb3Io
CisgICAgICB2ODo6U3RyaW5nOjpOZXcoIiRuYW1lIiksCisgICAgICAke2ludGVyZmFjZU5hbWV9
SW50ZXJuYWw6OiR7bmFtZX1BdHRyR2V0dGVyLAorICAgICAgMCwKKyAgICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpLAorICAgICAgdjg6OkFMTF9DQU5fUkVBRCwKKyAgICAgIHN0YXRpY19jYXN0
PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4oJHByb3BlcnR5X2F0dHJpYnV0ZXMpKTsKK0VORAorICAg
ICAgICAgIG5leHQ7CisgICAgICB9CisKKyAgICAgIG15ICRzaWduYXR1cmUgPSAiZGVmYXVsdF9z
aWduYXR1cmUiOworICAgICAgaWYgKCRhdHRyRXh0LT57IlY4RG9Ob3RDaGVja1NpZ25hdHVyZSJ9
KXsKKyAgICAgICAgICAkc2lnbmF0dXJlID0gInY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPigpIjsK
KyAgICAgIH0KKworICAgICAgaWYgKFJlcXVpcmVzQ3VzdG9tU2lnbmF0dXJlKCRmdW5jdGlvbikp
IHsKKyAgICAgICAgICAkc2lnbmF0dXJlID0gIiR7bmFtZX1fc2lnbmF0dXJlIjsKKyAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAvLyBDdXN0b20gU2lnbmF0dXJlICckbmFtZSdcbiIs
IENyZWF0ZUN1c3RvbVNpZ25hdHVyZSgkZnVuY3Rpb24pKTsKKyAgICAgIH0KKworICAgICAgIyBO
b3JtYWwgZnVuY3Rpb24gY2FsbCBpcyBhIHRlbXBsYXRlCisgICAgICBteSAkdGVtcGxhdGVGdW5j
dGlvbiA9IEdlbmVyYXRlTmV3RnVuY3Rpb25UZW1wbGF0ZSgkZnVuY3Rpb24sICRkYXRhTm9kZSwg
JHNpZ25hdHVyZSk7CisKKworICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKworICAv
LyAkY29tbWVudEluZm8KKyAgJHt0ZW1wbGF0ZX0tPlNldCgKKyAgICAgIHY4OjpTdHJpbmc6Ok5l
dygiJG5hbWUiKSwKKyAgICAgICR0ZW1wbGF0ZUZ1bmN0aW9uLAorICAgICAgc3RhdGljX2Nhc3Q8
djg6OlByb3BlcnR5QXR0cmlidXRlPigkcHJvcGVydHlfYXR0cmlidXRlcykpOworRU5ECisgICAg
fQorCisgICAgIyBzZXQgdGhlIHN1cGVyIGRlc2NyaXB0b3IKKyAgICBmb3JlYWNoIChAeyRkYXRh
Tm9kZS0+cGFyZW50c30pIHsKKyAgICAgICAgbXkgJHBhcmVudCA9ICRjb2RlR2VuZXJhdG9yLT5T
dHJpcE1vZHVsZSgkXyk7CisgICAgICAgIGlmICgkcGFyZW50IGVxICJFdmVudFRhcmdldCIpIHsg
bmV4dDsgfQorICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOCR7cGFyZW50fS5oIn0gPSAxOworICAg
ICAgICBteSAkcGFyZW50Q2xhc3NJbmRleCA9IHVjKCRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVs
ZSgkcGFyZW50KSk7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICBkZXNjLT5Jbmhlcml0
KFY4UHJveHk6OkdldFRlbXBsYXRlKFY4Q2xhc3NJbmRleDo6JHtwYXJlbnRDbGFzc0luZGV4fSkp
O1xuIik7CisgICAgICAgIGxhc3Q7CisgICAgfQorCisgICAgIyBTZXQgdGhlIGNsYXNzIG5hbWUu
ICBUaGlzIGlzIHVzZWQgd2hlbiBwcmludGluZyBvYmplY3RzLgorICAgIHB1c2goQGltcGxDb250
ZW50LCAiICBkZXNjLT5TZXRDbGFzc05hbWUodjg6OlN0cmluZzo6TmV3KFwiIiAuIEdldENsYXNz
TmFtZSgke2ludGVyZmFjZU5hbWV9KSAuICJcIikpO1xuIik7CisKKyAgICBpZiAoJGhhc19jb25z
dGFudHMpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgQmF0Y2hDb25m
aWd1cmVDb25zdGFudHMoZGVzYywgcHJvdG8sIGNvbnN0cywgc2l6ZW9mKGNvbnN0cykvc2l6ZW9m
KCpjb25zdHMpKTsKK0VORAorICAgIH0KKworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7
CisgIHJldHVybiBkZXNjOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gJHtjbGFzc05hbWV9OjpHZXRSYXdUZW1wbGF0ZSgpIHsKKyAgc3RhdGljIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX1fcmF3X2NhY2hlXzsKKyAgaWYg
KCR7Y2xhc3NOYW1lfV9yYXdfY2FjaGVfLklzRW1wdHkoKSkgeworICAgIHY4OjpIYW5kbGVTY29w
ZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHJlc3VsdCA9IHY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhQcm94eTo6Q2hlY2tOZXdMZWdhbCk7CisgICAgJHtj
bGFzc05hbWV9X3Jhd19jYWNoZV8gPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT46Ok5ldyhyZXN1bHQpOworICB9CisgIHJldHVybiAke2NsYXNzTmFtZX1fcmF3X2NhY2hlXzsK
K30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6
R2V0VGVtcGxhdGUoKSB7CisgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gJHtjbGFzc05hbWV9X2NhY2hlXzsKKyAgaWYgKCR7Y2xhc3NOYW1lfV9jYWNoZV8uSXNF
bXB0eSgpKQorICAgICR7Y2xhc3NOYW1lfV9jYWNoZV8gPSBDb25maWd1cmUke2NsYXNzTmFtZX1U
ZW1wbGF0ZShHZXRSYXdUZW1wbGF0ZSgpKTsKKyAgcmV0dXJuICR7Y2xhc3NOYW1lfV9jYWNoZV87
Cit9CisKK2Jvb2wgJHtjbGFzc05hbWV9OjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdmFsdWUpIHsKKyAgcmV0dXJuIEdldFJhd1RlbXBsYXRlKCktPkhhc0luc3RhbmNlKHZhbHVl
KTsKK30KKworRU5ECisKKyAgICBpZiAoJGltcGxDbGFzc05hbWUgZXEgIkRPTVdpbmRvdyIpIHsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKK3Y4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3RUZW1wbGF0ZT4gVjhET01XaW5kb3c6OkdldFNoYWRvd09iamVjdFRlbXBsYXRlKCkgewor
ICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPiBWOERPTVdpbmRvd1No
YWRvd09iamVjdF9jYWNoZV87CisgIGlmIChWOERPTVdpbmRvd1NoYWRvd09iamVjdF9jYWNoZV8u
SXNFbXB0eSgpKSB7CisgICAgVjhET01XaW5kb3dTaGFkb3dPYmplY3RfY2FjaGVfID0gdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPjo6TmV3KHY4OjpPYmplY3RUZW1wbGF0ZTo6TmV3
KCkpOworICAgIENvbmZpZ3VyZVNoYWRvd09iamVjdFRlbXBsYXRlKFY4RE9NV2luZG93U2hhZG93
T2JqZWN0X2NhY2hlXyk7CisgIH0KKyAgcmV0dXJuIFY4RE9NV2luZG93U2hhZG93T2JqZWN0X2Nh
Y2hlXzsKK30KK0VORAorICAgIH0KKworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCitFTkQKKworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4j
ZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbDsKK30KKwor
CitzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQoreworICAgIG15ICRmdW5jdGlvbiA9
IHNoaWZ0OworICAgIG15ICRudW1iZXJPZlBhcmFtZXRlcnMgPSBzaGlmdDsKKyAgICBteSAkaW5k
ZW50ID0gc2hpZnQ7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKworICAgIG15ICRu
YW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CisgICAgbXkgJGlzUG9kVHlwZSA9IElz
UG9kVHlwZSgkaW1wbENsYXNzTmFtZSk7CisgICAgbXkgJHJldHVyblR5cGUgPSAkY29kZUdlbmVy
YXRvci0+U3RyaXBNb2R1bGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpOworICAgIG15ICRy
ZXR1cm5zUG9kVHlwZSA9IElzUG9kVHlwZSgkcmV0dXJuVHlwZSk7CisgICAgbXkgJG5hdGl2ZVJl
dHVyblR5cGUgPSBHZXROYXRpdmVUeXBlKCRyZXR1cm5UeXBlLCAwKTsKKyAgICBteSAkcmVzdWx0
ID0gIiI7CisKKyAgICAjIFNwZWNpYWwgY2FzZTogU1ZHIG1hdHJpeCB0cmFuc2Zvcm0gbWV0aG9k
cyBzaG91bGQgbm90IG11dGF0ZQorICAgICMgdGhlIG1hdHJpeCBidXQgcmV0dXJuIGEgY29weQor
ICAgIG15ICRjb3B5Rmlyc3QgPSAwOworICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiU1ZHTWF0
cml4IiAmJiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSBlcSAiU1ZHTWF0cml4IikgeworICAg
ICAgICAkY29weUZpcnN0ID0gMTsKKyAgICB9CisKKyAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJ2OGltcGxuYW1lIn0pIHsKKyAgICAgICAgJG5hbWUg
PSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57InY4aW1wbG5hbWUi
fTsKKyAgICB9CisKKyAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uIn0pIHsKKyAgICAgICAgJG5hbWUgPSAkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGF0aW9uRnVu
Y3Rpb24ifTsKKyAgICB9CisKKyAgICBteSAkZnVuY3Rpb25TdHJpbmcgPSAiaW1wLT4ke25hbWV9
KCI7CisKKyAgICBpZiAoJGNvcHlGaXJzdCkgeworICAgICAgICAkZnVuY3Rpb25TdHJpbmcgPSAi
cmVzdWx0LiR7bmFtZX0oIjsKKyAgICB9CisKKyAgICBteSAkcmV0dXJuc0xpc3RJdGVtUG9kVHlw
ZSA9IDA7CisgICAgIyBTVkcgbGlzdHMgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIFBPRCB0eXBlcyBy
ZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcKKyAgICBpZiAoSXNTVkdMaXN0VHlwZU5lZWRpbmdTcGVj
aWFsSGFuZGxpbmcoJGltcGxDbGFzc05hbWUpICYmIElzU1ZHTGlzdE1ldGhvZCgkbmFtZSkgJiYg
JHJldHVybnNQb2RUeXBlKSB7CisgICAgICAgICRyZXR1cm5zTGlzdEl0ZW1Qb2RUeXBlID0gMTsK
KyAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIlNWR0xpc3Q8UmVmUHRyPFNWR1BPRExpc3RJ
dGVtPCRuYXRpdmVSZXR1cm5UeXBlPiA+ID4qIGxpc3RJbXAgPSBpbXA7XG4iOworICAgICAgICAk
ZnVuY3Rpb25TdHJpbmcgPSAibGlzdEltcC0+JHtuYW1lfSgiOworICAgIH0KKworICAgIG15ICRm
aXJzdCA9IDE7CisgICAgbXkgJGluZGV4ID0gMDsKKyAgICBteSAkbm9kZVRvUmV0dXJuID0gMDsK
KworICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7
CisgICAgICAgIGlmICgkaW5kZXggZXEgJG51bWJlck9mUGFyYW1ldGVycykgeworICAgICAgICAg
ICAgbGFzdDsKKyAgICAgICAgfQorICAgICAgICBpZiAoJGZpcnN0KSB7ICRmaXJzdCA9IDA7IH0K
KyAgICAgICAgZWxzZSB7ICRmdW5jdGlvblN0cmluZyAuPSAiLCAiOyB9CisgICAgICAgIG15ICRw
YXJhbU5hbWUgPSAkcGFyYW1ldGVyLT5uYW1lOworICAgICAgICBteSAkcGFyYW1UeXBlID0gJHBh
cmFtZXRlci0+dHlwZTsKKworICAgICAgICAjIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLi4uIHdl
IG5lZWQgdG8gY29udmVydCBwYXJhbWV0ZXJzIHRvIG1ldGhvZHMgb24gU1ZHIGxpc3RzCisgICAg
ICAgICMgb2YgUE9EIHR5cGVzIHdoaWNoIGFyZSBpdGVtcyBpbiB0aGUgbGlzdCB0byBhcHByb3By
aWF0ZSBTVkdMaXN0PD4gaW5zdGFuY2VzCisgICAgICAgIGlmICgkcmV0dXJuc0xpc3RJdGVtUG9k
VHlwZSAmJiAkcGFyYW1UeXBlIC4gIkxpc3QiIGVxICRpbXBsQ2xhc3NOYW1lKSB7CisgICAgICAg
ICAgICAkcGFyYW1OYW1lID0gIlNWR1BPRExpc3RJdGVtPCIgLiBHZXROYXRpdmVUeXBlKCRwYXJh
bVR5cGUsIDEpIC4gIj46OmNvcHkoJHBhcmFtTmFtZSkiOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIk5vZGVGaWx0ZXIiKSB7CisgICAgICAgICAgICAkZnVu
Y3Rpb25TdHJpbmcgLj0gIiRwYXJhbU5hbWUuZ2V0KCkiOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICRwYXJhbU5hbWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybiJ9KSB7Cisg
ICAgICAgICAgICAkbm9kZVRvUmV0dXJuID0gJHBhcmFtZXRlci0+bmFtZTsKKyAgICAgICAgfQor
ICAgICAgICAkaW5kZXgrKzsKKyAgICB9CisKKyAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Bcmd1bWVudEhhbmRsaW5nIn0pIHsKKyAgICAg
ICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgbm90ICRmaXJzdDsKKyAgICAgICAgJGZ1bmN0
aW9uU3RyaW5nIC49ICImY2FsbFN0YWNrIjsKKyAgICAgICAgaWYgKCRmaXJzdCkgeyAkZmlyc3Qg
PSAwOyB9CisgICAgfQorCisgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkg
eworICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIiwgIiBpZiBub3QgJGZpcnN0OworICAgICAg
ICAkZnVuY3Rpb25TdHJpbmcgLj0gImVjIjsKKyAgICB9CisgICAgJGZ1bmN0aW9uU3RyaW5nIC49
ICIpIjsKKworICAgIGlmICgoSXNSZWZQdHJUeXBlKCRyZXR1cm5UeXBlKSB8fCAkcmV0dXJuc0xp
c3RJdGVtUG9kVHlwZSkgJiYgISRub2RlVG9SZXR1cm4pIHsKKyAgICAgICAgIyBXZSBkb24ndCB1
c2UgZ2V0UHRyIHdoZW4gJG5vZGVUb1JldHVybiBiZWNhdXNlIHRoYXQgc2l0dWF0aW9uIGlzCisg
ICAgICAgICMgc3BlY2lhbC1jYXNlZCBiZWxvdyB0byByZXR1cm4gYSBib29sLgorICAgICAgICAk
aW1wbEluY2x1ZGVzeyJ3dGYvR2V0UHRyLmgifSA9IDE7CisgICAgICAgICRmdW5jdGlvblN0cmlu
ZyA9ICJXVEY6OmdldFB0cigiIC4gJGZ1bmN0aW9uU3RyaW5nIC4gIikiOworICAgIH0KKworICAg
IGlmICgkbm9kZVRvUmV0dXJuKSB7CisgICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciBpbnNlcnRC
ZWZvcmUsIHJlcGxhY2VDaGlsZCwgcmVtb3ZlQ2hpbGQgYW5kCisgICAgICAgICMgYXBwZW5kQ2hp
bGQgZnVuY3Rpb25zIGZyb20gTm9kZS4KKyAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImJv
b2wgc3VjY2VzcyA9ICRmdW5jdGlvblN0cmluZztcbiI7CisgICAgICAgIGlmIChAeyRmdW5jdGlv
bi0+cmFpc2VzRXhjZXB0aW9uc30pIHsKKyAgICAgICAgICAgICRyZXN1bHQgLj0gR2VuZXJhdGVT
ZXRET01FeGNlcHRpb24oJGluZGVudCk7CisgICAgICAgIH0KKyAgICAgICAgJHJlc3VsdCAuPSAk
aW5kZW50IC4gImlmIChzdWNjZXNzKVxuIjsKKyAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4g
IiAgICAiIC4KKyAgICAgICAgICAgICJyZXR1cm4gVjhQcm94eTo6Tm9kZVRvVjhPYmplY3QoJG5v
ZGVUb1JldHVybik7XG4iOworICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJuIHY4
OjpOdWxsKCk7XG4iOworICAgICAgICByZXR1cm4gJHJlc3VsdDsKKyAgICB9IGVsc2lmICgkcmV0
dXJuVHlwZSBlcSAidm9pZCIpIHsKKyAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIiRmdW5j
dGlvblN0cmluZztcbiI7CisgICAgfSBlbHNpZiAoJGNvcHlGaXJzdCkgeworICAgICAgICAkcmVz
dWx0IC49CisgICAgICAgICAgICAkaW5kZW50IC4gR2V0TmF0aXZlVHlwZSgkcmV0dXJuVHlwZSwg
MCkgLiAiIHJlc3VsdCA9ICppbXA7XG4iIC4KKyAgICAgICAgICAgICRpbmRlbnQgLiAiJGZ1bmN0
aW9uU3RyaW5nO1xuIjsKKyAgICB9IGVsc2lmICgkcmV0dXJuc0xpc3RJdGVtUG9kVHlwZSkgewor
ICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiUmVmUHRyPFNWR1BPRExpc3RJdGVtPCRuYXRp
dmVSZXR1cm5UeXBlPiA+IHJlc3VsdCA9ICRmdW5jdGlvblN0cmluZztcbiI7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gJG5hdGl2ZVJldHVyblR5cGUgLiAiIHJl
c3VsdCA9ICRmdW5jdGlvblN0cmluZztcbiI7CisgICAgfQorCisgICAgaWYgKEB7JGZ1bmN0aW9u
LT5yYWlzZXNFeGNlcHRpb25zfSkgeworICAgICAgICAkcmVzdWx0IC49IEdlbmVyYXRlU2V0RE9N
RXhjZXB0aW9uKCRpbmRlbnQpOworICAgIH0KKworICAgIG15ICRyZXR1cm4gPSAicmVzdWx0IjsK
KyAgICBpZiAoSXNSZWZQdHJUeXBlKCRyZXR1cm5UeXBlKSB8fCAkcmV0dXJuc0xpc3RJdGVtUG9k
VHlwZSkgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvR2V0UHRyLmgifSA9IDE7CisgICAg
ICAgICRyZXR1cm4gPSAiV1RGOjpnZXRQdHIoIiAuICRyZXR1cm4gLiAiKSI7CisgICAgfQorCisg
ICAgIyBJZiB0aGUgcmV0dXJuIHR5cGUgaXMgYSBQT0QgdHlwZSwgc2VwYXJhdGUgb3V0IHRoZSB3
cmFwcGVyIGdlbmVyYXRpb24KKyAgICBpZiAoJHJldHVybnNMaXN0SXRlbVBvZFR5cGUpIHsKKyAg
ICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIlY4U1ZHUE9EVHlwZVdyYXBwZXI8IiAuICRuYXRp
dmVSZXR1cm5UeXBlIC4gIj4qIHdyYXBwZXIgPSBuZXcgIjsKKyAgICAgICAgJHJlc3VsdCAuPSAi
VjhTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PCIgLiAkbmF0aXZlUmV0dXJuVHlwZSAu
ICI+KCRyZXR1cm4sIGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7XG4iOworICAgICAg
ICAkcmV0dXJuID0gIndyYXBwZXIiOworICAgIH0gZWxzaWYgKCRyZXR1cm5zUG9kVHlwZSkgewor
ICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiVjhTVkdQT0RUeXBlV3JhcHBlcjwiIC4gJG5h
dGl2ZVJldHVyblR5cGUgLiAiPiogd3JhcHBlciA9ICI7CisgICAgICAgICRyZXN1bHQgLj0gR2Vu
ZXJhdGVTVkdTdGF0aWNQb2RUeXBlV3JhcHBlcigkcmV0dXJuVHlwZSwgJHJldHVybikgLiAiO1xu
IjsKKyAgICAgICAgJHJldHVybiA9ICJ3cmFwcGVyIjsKKyAgICB9CisKKyAgICBteSAkZ2VuZXJh
dGVkU1ZHQ29udGV4dFJldHJpZXZhbCA9IDA7CisgICAgIyBJZiB0aGUgcmV0dXJuIHR5cGUgbmVl
ZHMgYW4gU1ZHIGNvbnRleHQsIG91dHB1dCBpdAorICAgIGlmIChJc1NWR1R5cGVOZWVkaW5nQ29u
dGV4dFBhcmFtZXRlcigkcmV0dXJuVHlwZSkpIHsKKyAgICAgICAgJHJlc3VsdCAuPSBHZW5lcmF0
ZVNWR0NvbnRleHRBc3NpZ25tZW50KCRpbXBsQ2xhc3NOYW1lLCAkcmV0dXJuLCAkaW5kZW50KTsK
KyAgICAgICAgJGdlbmVyYXRlZFNWR0NvbnRleHRSZXRyaWV2YWwgPSAxOworICAgIH0KKworICAg
IGlmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkgJiYg
JGltcGxDbGFzc05hbWUgPX4gL0xpc3QkLyAmJiBJc1NWR0xpc3RNdXRhdG9yKCRuYW1lKSkgewor
ICAgICAgICBpZiAoISRnZW5lcmF0ZWRTVkdDb250ZXh0UmV0cmlldmFsKSB7CisgICAgICAgICAg
ICAkcmVzdWx0IC49IEdlbmVyYXRlU1ZHQ29udGV4dFJldHJpZXZhbCgkaW1wbENsYXNzTmFtZSwg
JGluZGVudCk7CisgICAgICAgICAgICAkZ2VuZXJhdGVkU1ZHQ29udGV4dFJldHJpZXZhbCA9IDE7
CisgICAgICAgIH0KKworICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiY29udGV4dC0+c3Zn
QXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpO1xuIjsKKyAg
ICAgICAgJGltcGxJbmNsdWRlc3siU1ZHRWxlbWVudC5oIn0gPSAxOworICAgIH0KKworICAgICMg
SWYgdGhlIGltcGxlbWVudGluZyBjbGFzcyBpcyBhIFBPRCB0eXBlLCBjb21taXQgY2hhbmdlcwor
ICAgIGlmICgkaXNQb2RUeXBlKSB7CisgICAgICAgIGlmICghJGdlbmVyYXRlZFNWR0NvbnRleHRS
ZXRyaWV2YWwpIHsKKyAgICAgICAgICAgICRyZXN1bHQgLj0gR2VuZXJhdGVTVkdDb250ZXh0UmV0
cmlldmFsKCRpbXBsQ2xhc3NOYW1lLCAkaW5kZW50KTsKKyAgICAgICAgICAgICRnZW5lcmF0ZWRT
VkdDb250ZXh0UmV0cmlldmFsID0gMTsKKyAgICAgICAgfQorCisgICAgICAgICRyZXN1bHQgLj0g
JGluZGVudCAuICJpbXBfd3JhcHBlci0+Y29tbWl0Q2hhbmdlKGltcF9pbnN0YW5jZSwgY29udGV4
dCk7XG4iOworICAgIH0KKworICAgIGlmICgkcmV0dXJuc1BvZFR5cGUpIHsKKyAgICAgICAgbXkg
JGNsYXNzSW5kZXggPSB1YygkcmV0dXJuVHlwZSk7CisgICAgICAgICRyZXN1bHQgLj0gJGluZGVu
dCAuICJyZXR1cm4gVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4
LCB3cmFwcGVyKTtcbiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50
IC4gInJldHVybiAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0
dXJuKSAuICI7XG4iOworICAgIH0KKworICAgIHJldHVybiAkcmVzdWx0OworfQorCisKKyMgR2V0
IHRoZSBjbGFzcyBuYW1lIHVzZWQgZm9yIHByaW50aW5nIGphdmFzY3JpcHQgRE9NLW9iamVjdCB3
cmFwcGVycy4KK3N1YiBHZXRDbGFzc05hbWUKK3sKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAg
IHJldHVybiAiSFRNTENvbGxlY3Rpb24iIGlmICR0eXBlIGVxICJVbmRldGVjdGFibGVIVE1MQ29s
bGVjdGlvbiI7CisgICAgcmV0dXJuICR0eXBlOworfQorCisKK3N1YiBHZXROYXRpdmVUeXBlRnJv
bVNpZ25hdHVyZQoreworICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKKyAgICBteSAkaXNQYXJh
bWV0ZXIgPSBzaGlmdDsKKworICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9k
dWxlKCRzaWduYXR1cmUtPnR5cGUpOworCisgICAgcmV0dXJuIEdldE5hdGl2ZVR5cGUoJHR5cGUs
ICRpc1BhcmFtZXRlcik7Cit9CisKK3N1YiBJc1JlZlB0clR5cGUKK3sKKyAgICBteSAkdHlwZSA9
IHNoaWZ0OworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJBdHRyIjsKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAiQ2FudmFzR3JhZGllbnQiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJD
bGllbnRSZWN0IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2xpZW50UmVjdExpc3QiOwor
ICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDREFUQVNlY3Rpb24iOworICAgIHJldHVybiAxIGlm
ICR0eXBlIGVxICJDb21tZW50IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ1NTUnVsZSI7
CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNTU1N0eWxlUnVsZSI7CisgICAgcmV0dXJuIDEg
aWYgJHR5cGUgZXEgIkNTU0NoYXJzZXRSdWxlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
Q1NTSW1wb3J0UnVsZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNTU01lZGlhUnVsZSI7
CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNTU0ZvbnRGYWNlUnVsZSI7CisgICAgcmV0dXJu
IDEgaWYgJHR5cGUgZXEgIkNTU1BhZ2VSdWxlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
Q1NTUHJpbWl0aXZlVmFsdWUiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDU1NTdHlsZVNo
ZWV0IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ1NTU3R5bGVEZWNsYXJhdGlvbiI7Cisg
ICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNTU1ZhbHVlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlw
ZSBlcSAiQ1NTUnVsZUxpc3QiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJEYXRhYmFzZSI7
CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkRvY3VtZW50IjsKKyAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiRG9jdW1lbnRGcmFnbWVudCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkRv
Y3VtZW50VHlwZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkVsZW1lbnQiOworICAgIHJl
dHVybiAxIGlmICR0eXBlIGVxICJFbnRpdHlSZWZlcmVuY2UiOworICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICJFdmVudCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkhUTUxDb2xsZWN0aW9u
IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiSFRNTERvY3VtZW50IjsKKyAgICByZXR1cm4g
MSBpZiAkdHlwZSBlcSAiSFRNTEVsZW1lbnQiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJI
VE1MT3B0aW9uc0NvbGxlY3Rpb24iOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJJbWFnZURh
dGEiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJNZWRpYUVycm9yIjsKKyAgICByZXR1cm4g
MSBpZiAkdHlwZSBlcSAiTWltZVR5cGUiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJOb2Rl
IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiTm9kZUxpc3QiOworICAgIHJldHVybiAxIGlm
ICR0eXBlIGVxICJOb2RlRmlsdGVyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiTm9kZUl0
ZXJhdG9yIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiTlNSZXNvbHZlciI7CisgICAgcmV0
dXJuIDEgaWYgJHR5cGUgZXEgIlBsdWdpbiI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbiI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlJhbmdlIjsK
KyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiVGV4dCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUg
ZXEgIlRleHRNZXRyaWNzIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiVGltZVJhbmdlcyI7
CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlRyZWVXYWxrZXIiOworICAgIHJldHVybiAxIGlm
ICR0eXBlIGVxICJXZWJLaXRDU1NNYXRyaXgiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJX
ZWJLaXRQb2ludCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlhQYXRoRXhwcmVzc2lvbiI7
CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciI7CisgICAgcmV0dXJu
IDEgaWYgJHR5cGUgZXEgIlhQYXRoUmVzdWx0IjsKKworICAgIHJldHVybiAxIGlmICR0eXBlIGVx
ICJTVkdBbmdsZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5j
ZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZUxpc3QiOwor
ICAgIHJldHVybiAxIGlmICR0eXBlID1+IC9eU1ZHUGF0aFNlZy87CisKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSA9fiAvXlNWR0FuaW1hdGVkLzsKKworICAgIHJldHVybiAwOworfQorCitzdWIgSXNW
aWRlb0NsYXNzTmFtZQoreworICAgIG15ICRjbGFzcyA9IHNoaWZ0OworICAgIHJldHVybiAxIGlm
ICRjbGFzcyBlcSAiVjhIVE1MQXVkaW9FbGVtZW50IjsKKyAgICByZXR1cm4gMSBpZiAkY2xhc3Mg
ZXEgIlY4SFRNTE1lZGlhRWxlbWVudCI7CisgICAgcmV0dXJuIDEgaWYgJGNsYXNzIGVxICJWOEhU
TUxTb3VyY2VFbGVtZW50IjsKKyAgICByZXR1cm4gMSBpZiAkY2xhc3MgZXEgIlY4SFRNTFZpZGVv
RWxlbWVudCI7CisgICAgcmV0dXJuIDEgaWYgJGNsYXNzIGVxICJWOE1lZGlhRXJyb3IiOworICAg
IHJldHVybiAxIGlmICRjbGFzcyBlcSAiVjhUaW1lUmFuZ2VzIjsKKworICAgIHJldHVybiAwOwor
fQorCitzdWIgSXNXb3JrZXJDbGFzc05hbWUKK3sKKyAgICBteSAkY2xhc3MgPSBzaGlmdDsKKyAg
ICByZXR1cm4gMSBpZiAkY2xhc3MgZXEgIlY4V29ya2VyIjsKKyAgICByZXR1cm4gMSBpZiAkY2xh
c3MgZXEgIlY4V29ya2VyQ29udGV4dCI7CisgICAgcmV0dXJuIDEgaWYgJGNsYXNzIGVxICJWOFdv
cmtlckxvY2F0aW9uIjsKKyAgICByZXR1cm4gMSBpZiAkY2xhc3MgZXEgIlY4V29ya2VyTmF2aWdh
dG9yIjsKKworICAgIHJldHVybiAwOworfQorCitzdWIgR2V0TmF0aXZlVHlwZQoreworICAgIG15
ICR0eXBlID0gc2hpZnQ7CisgICAgbXkgJGlzUGFyYW1ldGVyID0gc2hpZnQ7CisKKyAgICBpZiAo
JHR5cGUgZXEgImZsb2F0IiBvciAkdHlwZSBlcSAiQXRvbWljU3RyaW5nIiBvciAkdHlwZSBlcSAi
ZG91YmxlIikgeworICAgICAgICByZXR1cm4gJHR5cGU7CisgICAgfQorCisgICAgcmV0dXJuICJp
bnQiIGlmICR0eXBlIGVxICJpbnQiOworICAgIHJldHVybiAiaW50IiBpZiAkdHlwZSBlcSAic2hv
cnQiIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7CisgICAgcmV0dXJuICJpbnQiIGlmICR0
eXBlIGVxICJsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyI7CisgICAgcmV0dXJuICJ1
bnNpZ25lZCBsb25nIGxvbmciIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIGxvbmciOworICAg
IHJldHVybiAiYm9vbCIgaWYgJHR5cGUgZXEgImJvb2xlYW4iOworICAgIHJldHVybiAiU3RyaW5n
IiBpZiAkdHlwZSBlcSAiRE9NU3RyaW5nIjsKKyAgICByZXR1cm4gIlJhbmdlOjpDb21wYXJlSG93
IiBpZiAkdHlwZSBlcSAiQ29tcGFyZUhvdyI7CisgICAgcmV0dXJuICJGbG9hdFJlY3QiIGlmICR0
eXBlIGVxICJTVkdSZWN0IjsKKyAgICByZXR1cm4gIkZsb2F0UG9pbnQiIGlmICR0eXBlIGVxICJT
VkdQb2ludCI7CisgICAgcmV0dXJuICJUcmFuc2Zvcm1hdGlvbk1hdHJpeCIgaWYgJHR5cGUgZXEg
IlNWR01hdHJpeCI7CisgICAgcmV0dXJuICJTVkdUcmFuc2Zvcm0iIGlmICR0eXBlIGVxICJTVkdU
cmFuc2Zvcm0iOworICAgIHJldHVybiAiU1ZHTGVuZ3RoIiBpZiAkdHlwZSBlcSAiU1ZHTGVuZ3Ro
IjsKKyAgICByZXR1cm4gImRvdWJsZSIgaWYgJHR5cGUgZXEgIlNWR051bWJlciI7CisgICAgcmV0
dXJuICJTVkdQYWludDo6U1ZHUGFpbnRUeXBlIiBpZiAkdHlwZSBlcSAiU1ZHUGFpbnRUeXBlIjsK
KyAgICByZXR1cm4gIkRPTVRpbWVTdGFtcCIgaWYgJHR5cGUgZXEgIkRPTVRpbWVTdGFtcCI7Cisg
ICAgcmV0dXJuICJ1bnNpZ25lZCIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGludCI7CisgICAgcmV0
dXJuICJ1bnNpZ25lZCIgaWYgJHR5cGUgZXEgIlJHQkNvbG9yIjsKKyAgICByZXR1cm4gIk5vZGUq
IiBpZiAkdHlwZSBlcSAiRXZlbnRUYXJnZXQiIGFuZCAkaXNQYXJhbWV0ZXI7CisKKyAgICByZXR1
cm4gIlN0cmluZyIgaWYgJHR5cGUgZXEgIkRPTVVzZXJEYXRhIjsgICMgdGVtcG9yYXJ5IGhhY2ss
IFRPRE8KKworICAgICMgdGVtcG9yYXJ5IGhhY2sKKyAgICByZXR1cm4gIlJlZlB0cjxOb2RlRmls
dGVyPiIgaWYgJHR5cGUgZXEgIk5vZGVGaWx0ZXIiOworCisgICAgcmV0dXJuICJSZWZQdHI8JHt0
eXBlfT4iIGlmIElzUmVmUHRyVHlwZSgkdHlwZSkgYW5kIG5vdCAkaXNQYXJhbWV0ZXI7CisKKyAg
ICAjIERlZmF1bHQsIGFzc3VtZSBuYXRpdmUgdHlwZSBpcyBhIHBvaW50ZXIgd2l0aCBzYW1lIHR5
cGUgbmFtZSBhcyBpZGwgdHlwZQorICAgIHJldHVybiAiJHt0eXBlfSoiOworfQorCisKK215ICV0
eXBlQ2FuRmFpbENvbnZlcnNpb24gPSAoCisgICAgIkF0b21pY1N0cmluZyIgPT4gMCwKKyAgICAi
QXR0ciIgPT4gMSwKKyAgICAiQ29tcGFyZUhvdyIgPT4gMCwKKyAgICAiRE9NU3RyaW5nIiA9PiAw
LAorICAgICJET01XaW5kb3ciID0+IDAsCisgICAgIkRvY3VtZW50VHlwZSIgPT4gMCwKKyAgICAi
RWxlbWVudCIgPT4gMCwKKyAgICAiRXZlbnQiID0+IDAsCisgICAgIkV2ZW50TGlzdGVuZXIiID0+
IDAsCisgICAgIkV2ZW50VGFyZ2V0IiA9PiAwLAorICAgICJIVE1MRWxlbWVudCIgPT4gMCwKKyAg
ICAiSFRNTE9wdGlvbkVsZW1lbnQiID0+IDAsCisgICAgIk5vZGUiID0+IDAsCisgICAgIk5vZGVG
aWx0ZXIiID0+IDAsCisgICAgIk1lc3NhZ2VQb3J0IiA9PiAwLAorICAgICJOU1Jlc29sdmVyIiA9
PiAwLAorICAgICJSYW5nZSIgPT4gMCwKKyAgICAiU1FMUmVzdWx0U2V0IiA9PiAwLAorICAgICJT
dG9yYWdlIiA9PiAwLAorICAgICJTVkdBbmdsZSIgPT4gMCwKKyAgICAiU1ZHRWxlbWVudCIgPT4g
MCwKKyAgICAiU1ZHTGVuZ3RoIiA9PiAxLAorICAgICJTVkdNYXRyaXgiID0+IDEsCisgICAgIlNW
R051bWJlciIgPT4gMCwKKyAgICAiU1ZHUGFpbnRUeXBlIiA9PiAwLAorICAgICJTVkdQYXRoU2Vn
IiA9PiAwLAorICAgICJTVkdQb2ludCIgPT4gMSwKKyAgICAiU1ZHUmVjdCIgPT4gMSwKKyAgICAi
U1ZHVHJhbnNmb3JtIiA9PiAxLAorICAgICJWb2lkQ2FsbGJhY2siID0+IDEsCisgICAgIldlYktp
dENTU01hdHJpeCIgPT4gMCwKKyAgICAiV2ViS2l0UG9pbnQiID0+IDAsCisgICAgIlhQYXRoRXZh
bHVhdG9yIiA9PiAwLAorICAgICJYUGF0aE5TUmVzb2x2ZXIiID0+IDAsCisgICAgIlhQYXRoUmVz
dWx0IiA9PiAwLAorICAgICJib29sZWFuIiA9PiAwLAorICAgICJkb3VibGUiID0+IDAsCisgICAg
ImZsb2F0IiA9PiAwLAorICAgICJsb25nIiA9PiAwLAorICAgICJ1bnNpZ25lZCBsb25nIiA9PiAw
LAorICAgICJ1bnNpZ25lZCBzaG9ydCIgPT4gMCwKKyk7CisKKworc3ViIFRyYW5zbGF0ZVBhcmFt
ZXRlcgoreworICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKKworICAgICMgVGhlIElETCB1c2Vz
IHNvbWUgcHNldWRvLXR5cGVzIHdoaWNoIGRvbid0IHJlYWxseSBleGlzdC4KKyAgICBpZiAoJHNp
Z25hdHVyZS0+dHlwZSBlcSAiVGltZW91dEhhbmRsZXIiKSB7CisgICAgICAkc2lnbmF0dXJlLT50
eXBlKCJET01TdHJpbmciKTsKKyAgICB9Cit9CisKK3N1YiBCYXNpY1R5cGVDYW5GYWlsQ29udmVy
c2lvbgoreworICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKKyAgICBteSAkdHlwZSA9ICRjb2Rl
R2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2lnbmF0dXJlLT50eXBlKTsKKworICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJTVkdMZW5ndGgiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTVkdN
YXRyaXgiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTVkdQb2ludCI7CisgICAgcmV0dXJu
IDEgaWYgJHR5cGUgZXEgIlNWR1JlY3QiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTVkdU
cmFuc2Zvcm0iOworICAgIHJldHVybiAwOworfQorCitzdWIgVHlwZUNhbkZhaWxDb252ZXJzaW9u
Cit7CisgICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OworCisgICAgbXkgJHR5cGUgPSAkY29kZUdl
bmVyYXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICAkaW1wbEluY2x1
ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDEgaWYgJHR5cGUgZXEgIkF0dHIiOworCisgICAgcmV0
dXJuICR0eXBlQ2FuRmFpbENvbnZlcnNpb257JHR5cGV9IGlmIGV4aXN0cyAkdHlwZUNhbkZhaWxD
b252ZXJzaW9ueyR0eXBlfTsKKworICAgIGRpZSAiRG9uJ3Qga25vdyB3aGV0aGVyIGEgSlMgdmFs
dWUgY2FuIGZhaWwgY29udmVyc2lvbiB0byB0eXBlICR0eXBlLiI7Cit9CisKK3N1YiBKU1ZhbHVl
VG9OYXRpdmUKK3sKKyAgICBteSAkc2lnbmF0dXJlID0gc2hpZnQ7CisgICAgbXkgJHZhbHVlID0g
c2hpZnQ7CisgICAgbXkgJG9rUGFyYW0gPSBzaGlmdDsKKyAgICBteSAkbWF5YmVPa1BhcmFtID0g
JG9rUGFyYW0gPyAiLCAke29rUGFyYW19IiA6ICIiOworCisgICAgbXkgJHR5cGUgPSAkY29kZUdl
bmVyYXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICByZXR1cm4gIiR2
YWx1ZSIgaWYgJHR5cGUgZXEgIkpTT2JqZWN0IjsKKyAgICByZXR1cm4gIiR2YWx1ZS0+Qm9vbGVh
blZhbHVlKCkiIGlmICR0eXBlIGVxICJib29sZWFuIjsKKyAgICByZXR1cm4gInN0YXRpY19jYXN0
PCR0eXBlPigkdmFsdWUtPk51bWJlclZhbHVlKCkpIiBpZiAkdHlwZSBlcSAiZmxvYXQiIG9yICR0
eXBlIGVxICJkb3VibGUiOworICAgIHJldHVybiAiJHZhbHVlLT5OdW1iZXJWYWx1ZSgpIiBpZiAk
dHlwZSBlcSAiU1ZHTnVtYmVyIjsKKworICAgIHJldHVybiAiVG9JbnQzMigkdmFsdWUke21heWJl
T2tQYXJhbX0pIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgJHR5cGUgZXEgInVuc2ln
bmVkIHNob3J0IiBvciAkdHlwZSBlcSAibG9uZyI7CisgICAgcmV0dXJuICJzdGF0aWNfY2FzdDxS
YW5nZTo6Q29tcGFyZUhvdz4oJHZhbHVlLT5JbnQzMlZhbHVlKCkpIiBpZiAkdHlwZSBlcSAiQ29t
cGFyZUhvdyI7CisgICAgcmV0dXJuICJzdGF0aWNfY2FzdDxTVkdQYWludDo6U1ZHUGFpbnRUeXBl
PigkdmFsdWUtPlRvSW50MzIoKS0+SW50MzJWYWx1ZSgpKSIgaWYgJHR5cGUgZXEgIlNWR1BhaW50
VHlwZSI7CisKKyAgICByZXR1cm4gIlRvV2ViQ29yZVN0cmluZygkdmFsdWUpIiBpZiAkdHlwZSBl
cSAiQXRvbWljU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NVXNlckRhdGEiOworICAgIGlmICgkdHlw
ZSBlcSAiRE9NU3RyaW5nIikgeworICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoTnVs
bENoZWNrKCR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZyJ9OworICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRo
TnVsbE9yVW5kZWZpbmVkQ2hlY2soJHZhbHVlKSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmcifTsKKyAgICAgICAg
cmV0dXJuICJUb1dlYkNvcmVTdHJpbmcoJHZhbHVlKSI7CisgICAgfQorCisgICAgaWYgKCR0eXBl
IGVxICJOb2RlRmlsdGVyIikgeworICAgICAgICByZXR1cm4gIlY4UHJveHk6OlRvTmF0aXZlTm9k
ZUZpbHRlcigkdmFsdWUpIjsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIlNWR1JlY3QiKSB7
CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkZsb2F0UmVjdC5oIn0gPSAxOworICAgIH0KKworICAg
IGlmICgkdHlwZSBlcSAiU1ZHUG9pbnQiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkZsb2F0
UG9pbnQuaCJ9ID0gMTsKKyAgICB9CisKKyAgICAjIERlZmF1bHQsIGFzc3VtZSBhdXRvZ2VuZXJh
dGVkIHR5cGUgY29udmVyc2lvbiByb3V0aW5lcworICAgICRpbXBsSW5jbHVkZXN7InY4X3Byb3h5
LmgifSA9IDE7CisgICAgaWYgKCR0eXBlIGVxICJFdmVudFRhcmdldCIpIHsKKyAgICAgICAgJGlt
cGxJbmNsdWRlc3siVjhOb2RlLmgifSA9IDE7CisKKyAgICAgICAgIyBFdmVudFRhcmdldCBpcyBu
b3QgaW4gRE9NIGhpZXJhcmNoeSwgYnV0IGFsbCBOb2RlcyBhcmUgRXZlbnRUYXJnZXQuCisgICAg
ICAgIHJldHVybiAiVjhOb2RlOjpIYXNJbnN0YW5jZSgkdmFsdWUpID8gVjhQcm94eTo6RE9NV3Jh
cHBlclRvTm9kZTxOb2RlPigkdmFsdWUpIDogMCI7CisgICAgfQorCisgICAgQWRkSW5jbHVkZXNG
b3JUeXBlKCR0eXBlKTsKKyAgICAjICRpbXBsSW5jbHVkZXN7IiR0eXBlLmgifSA9IDEgdW5sZXNz
IEF2b2lkSW5jbHVzaW9uT2ZUeXBlKCR0eXBlKTsKKworICAgIGlmIChJc0RPTU5vZGVUeXBlKCR0
eXBlKSkgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOCR7dHlwZX0uaCJ9ID0gMTsKKworICAg
ICAgICAjIFBlcmZvcm0gdHlwZSBjaGVja3Mgb24gdGhlIHBhcmFtZXRlciwgaWYgaXQgaXMgZXhw
ZWN0ZWQgTm9kZSB0eXBlLAorICAgICAgICAjIHJldHVybiBOVUxMLgorICAgICAgICByZXR1cm4g
IlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IFY4UHJveHk6OkRPTVdyYXBwZXJUb05v
ZGU8JHt0eXBlfT4oJHZhbHVlKSA6IDAiOworICAgIH0gZWxzZSB7CisgICAgICAgICMgVE9ETzog
VGVtcG9yYXJ5IHRvIGF2b2lkIFdpbmRvdyBuYW1lIGNvbmZsaWN0LgorICAgICAgICBteSAkY2xh
c3NJbmRleCA9IHVjKCR0eXBlKTsKKyAgICAgICAgbXkgJGltcGxDbGFzc05hbWUgPSAke3R5cGV9
OworCisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4JHR5cGUuaCJ9ID0gMTsKKworICAgICAgICBp
ZiAoSXNQb2RUeXBlKCR0eXBlKSkgeworICAgICAgICAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXRO
YXRpdmVUeXBlKCR0eXBlKTsKKyAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4U1ZHUE9EVHlw
ZVdyYXBwZXIuaCJ9ID0gMTsKKworICAgICAgICAgICAgcmV0dXJuICJWOFNWR1BPRFR5cGVVdGls
OjpUb1NWR1BPRFR5cGU8JHtuYXRpdmVUeXBlfT4oVjhDbGFzc0luZGV4Ojoke2NsYXNzSW5kZXh9
LCAkdmFsdWUke21heWJlT2tQYXJhbX0pIgorICAgICAgICB9CisKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siVjgke3R5cGV9LmgifSA9IDE7CisKKyAgICAgICAgIyBQZXJmb3JtIHR5cGUgY2hlY2tz
IG9uIHRoZSBwYXJhbWV0ZXIsIGlmIGl0IGlzIGV4cGVjdGVkIE5vZGUgdHlwZSwKKyAgICAgICAg
IyByZXR1cm4gTlVMTC4KKyAgICAgICAgcmV0dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2
YWx1ZSkgPyBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDwke2ltcGxDbGFzc05hbWV9PihWOENsYXNz
SW5kZXg6OiR7Y2xhc3NJbmRleH0sICR2YWx1ZSkgOiAwIjsKKyAgICB9Cit9CisKKworc3ViIEdl
dFY4SGVhZGVyTmFtZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuICJWOCIg
LiBHZXRJbXBsZW1lbnRhdGlvbkZpbGVOYW1lKCR0eXBlKTsKK30KKworCitzdWIgQ3JlYXRlQ3Vz
dG9tU2lnbmF0dXJlCit7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CisgICAgbXkgJGNvdW50
ID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAgIG15ICRuYW1lID0gJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPm5hbWU7CisgICAgbXkgJHJlc3VsdCA9ICIgIGNvbnN0IGludCAke25hbWV9X2Fy
Z2MgPSAke2NvdW50fTtcbiIgLgorICAgICAgIiAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gJHtuYW1lfV9hcmd2WyR7bmFtZX1fYXJnY10gPSB7ICI7CisgICAgbXkgJGZpcnN0ID0g
MTsKKyAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkg
eworICAgICAgICBpZiAoJGZpcnN0KSB7ICRmaXJzdCA9IDA7IH0KKyAgICAgICAgZWxzZSB7ICRy
ZXN1bHQgLj0gIiwgIjsgfQorICAgICAgICBpZiAoSXNXcmFwcGVyVHlwZSgkcGFyYW1ldGVyLT50
eXBlKSkgeworICAgICAgICAgICAgbXkgJHR5cGUgPSAkcGFyYW1ldGVyLT50eXBlOworICAgICAg
ICAgICAgbXkgJGhlYWRlciA9IEdldFY4SGVhZGVyTmFtZSgkdHlwZSk7CisgICAgICAgICAgICAk
aW1wbEluY2x1ZGVzeyRoZWFkZXJ9ID0gMTsKKyAgICAgICAgICAgICRyZXN1bHQgLj0gIlY4JHt0
eXBlfTo6R2V0UmF3VGVtcGxhdGUoKSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAk
cmVzdWx0IC49ICJ2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPigpIjsKKyAgICAgICAg
fQorICAgIH0KKyAgICAkcmVzdWx0IC49ICIgfTtcbiI7CisgICAgJHJlc3VsdCAuPSAiICB2ODo6
SGFuZGxlPHY4OjpTaWduYXR1cmU+ICR7bmFtZX1fc2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6
TmV3KGRlc2MsICR7bmFtZX1fYXJnYywgJHtuYW1lfV9hcmd2KTtcbiI7CisgICAgcmV0dXJuICRy
ZXN1bHQ7Cit9CisKKworc3ViIFJlcXVpcmVzQ3VzdG9tU2lnbmF0dXJlCit7CisgICAgbXkgJGZ1
bmN0aW9uID0gc2hpZnQ7CisgICAgIyBObyBzaWduYXR1cmUgbmVlZGVkIGZvciBDdXN0b20gZnVu
Y3Rpb24KKyAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b20ifSB8fAorICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlY4Q3VzdG9tIn0pIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
Zm9yZWFjaCBteSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAg
IGlmIChJc1dyYXBwZXJUeXBlKCRwYXJhbWV0ZXItPnR5cGUpKSB7CisgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK215ICVub25fd3JhcHBl
cl90eXBlcyA9ICgKKyAgICAnZmxvYXQnID0+IDEsCisgICAgJ0F0b21pY1N0cmluZycgPT4gMSwK
KyAgICAnZG91YmxlJyA9PiAxLAorICAgICdzaG9ydCcgPT4gMSwKKyAgICAndW5zaWduZWQgc2hv
cnQnID0+IDEsCisgICAgJ2xvbmcnID0+IDEsCisgICAgJ3Vuc2lnbmVkIGxvbmcnID0+IDEsCisg
ICAgJ2Jvb2xlYW4nID0+IDEsCisgICAgJ0RPTVN0cmluZycgPT4gMSwKKyAgICAnQ29tcGFyZUhv
dycgPT4gMSwKKyAgICAnU1ZHUmVjdCcgPT4gMSwKKyAgICAnU1ZHUG9pbnQnID0+IDEsCisgICAg
J1NWR01hdHJpeCcgPT4gMSwKKyAgICAnU1ZHVHJhbnNmb3JtJyA9PiAxLAorICAgICdTVkdMZW5n
dGgnID0+IDEsCisgICAgJ1NWR051bWJlcicgPT4gMSwKKyAgICAnU1ZHUGFpbnRUeXBlJyA9PiAx
LAorICAgICdET01UaW1lU3RhbXAnID0+IDEsCisgICAgJ0pTT2JqZWN0JyA9PiAxLAorICAgICdF
dmVudFRhcmdldCcgPT4gMSwKKyAgICAnTm9kZUZpbHRlcicgPT4gMSwKKyAgICAnRXZlbnRMaXN0
ZW5lcicgPT4gMQorKTsKKworCitzdWIgSXNXcmFwcGVyVHlwZQoreworICAgIG15ICR0eXBlID0g
JGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0KTsKKyAgICByZXR1cm4gISgkbm9uX3dy
YXBwZXJfdHlwZXN7JHR5cGV9KTsKK30KKworc3ViIElzRE9NTm9kZVR5cGUKK3sKKyAgICBteSAk
dHlwZSA9IHNoaWZ0OworCisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0F0dHInOworICAgIHJl
dHVybiAxIGlmICR0eXBlIGVxICdDREFUQVNlY3Rpb24nOworICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICdDb21tZW50JzsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnRG9jdW1lbnQnOworICAg
IHJldHVybiAxIGlmICR0eXBlIGVxICdEb2N1bWVudEZyYWdtZW50JzsKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAnRG9jdW1lbnRUeXBlJzsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnRWxl
bWVudCc7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0VudGl0eVJlZmVyZW5jZSc7CisgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0hUTUxDYW52YXNFbGVtZW50JzsKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAnSFRNTERvY3VtZW50JzsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnSFRN
TEVsZW1lbnQnOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdIVE1MRm9ybUVsZW1lbnQnOwor
ICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdIVE1MVGFibGVDYXB0aW9uRWxlbWVudCc7CisgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50JzsKKyAgICByZXR1
cm4gMSBpZiAkdHlwZSBlcSAnTm9kZSc7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbic7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ1NWR0VsZW1lbnQn
OworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdTVkdEb2N1bWVudCc7CisgICAgcmV0dXJuIDEg
aWYgJHR5cGUgZXEgJ1NWR1NWR0VsZW1lbnQnOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdT
VkdVc2VFbGVtZW50JzsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnVGV4dCc7CisKKyAgICBy
ZXR1cm4gMDsKK30KKworCitzdWIgTmF0aXZlVG9KU1ZhbHVlCit7CisgICAgbXkgJHNpZ25hdHVy
ZSA9IHNoaWZ0OworICAgIG15ICR2YWx1ZSA9IHNoaWZ0OworICAgIG15ICR0eXBlID0gJGNvZGVH
ZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRzaWduYXR1cmUtPnR5cGUpOworICAgIG15ICRjbGFzc05h
bWU9ICJWOCR0eXBlIjsKKworICAgIHJldHVybiAidjg6OkRhdGU6Ok5ldyhzdGF0aWNfY2FzdDxk
b3VibGU+KCR2YWx1ZSkpIiBpZiAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIjsKKyAgICByZXR1cm4g
IiR2YWx1ZSA/IHY4OjpUcnVlKCkgOiB2ODo6RmFsc2UoKSIgaWYgJHR5cGUgZXEgImJvb2xlYW4i
OworICAgIHJldHVybiAidjg6OlVuZGVmaW5lZCgpIiBpZiAkdHlwZSBlcSAidm9pZCI7CisKKyAg
ICAjIEZvciBhbGwgdGhlIHR5cGVzIHdoZXJlIHdlIHVzZSAnaW50JyBhcyB0aGUgcmVwcmVzZW50
YXRpb24gdHlwZSwKKyAgICAjIHdlIHVzZSBJbnRlZ2VyOjpOZXcgd2hpY2ggaGFzIGEgZmFzdCBT
bWkgY29udmVyc2lvbiBjaGVjay4KKyAgICByZXR1cm4gInY4OjpJbnRlZ2VyOjpOZXcoJHZhbHVl
KSIgaWYgR2V0TmF0aXZlVHlwZSgkdHlwZSkgZXEgImludCI7CisKKyAgICByZXR1cm4gInY4OjpO
dW1iZXI6Ok5ldygkdmFsdWUpIiBpZiAkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0
eXBlKSBvciAkdHlwZSBlcSAiU1ZHUGFpbnRUeXBlIjsKKworICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNTdHJpbmdUeXBlKCR0eXBlKSkgeworICAgICAgICBteSAkY29udiA9ICRzaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0TnVsbFN0cmluZ1RvIn07CisgICAgICAgIGlm
IChkZWZpbmVkICRjb252KSB7CisgICAgICAgICAgICByZXR1cm4gInY4U3RyaW5nT3JOdWxsKCR2
YWx1ZSkiIGlmICRjb252IGVxICJOdWxsIjsKKyAgICAgICAgICAgIHJldHVybiAidjhTdHJpbmdP
clVuZGVmaW5lZCgkdmFsdWUpIiBpZiAkY29udiBlcSAiVW5kZWZpbmVkIjsKKyAgICAgICAgICAg
IHJldHVybiAidjhTdHJpbmdPckZhbHNlKCR2YWx1ZSkiIGlmICRjb252IGVxICJGYWxzZSI7CisK
KyAgICAgICAgICAgIGRpZSAiVW5rbm93biB2YWx1ZSBmb3IgQ29udmVydE51bGxTdHJpbmdUbyBl
eHRlbmRlZCBhdHRyaWJ1dGUiOworICAgICAgICB9CisgICAgICAgIHJldHVybiAidjhTdHJpbmco
JHZhbHVlKSI7CisgICAgfQorCisgICAgIyBWOCBzcGVjaWZpYy4KKyAgICBteSAkaW1wbENsYXNz
TmFtZSA9ICR0eXBlOworICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CisgICAgIyAkaW1w
bEluY2x1ZGVze0dldEltcGxlbWVudGF0aW9uRmlsZU5hbWUoJHR5cGUpfSA9IDEgdW5sZXNzIEF2
b2lkSW5jbHVzaW9uT2ZUeXBlKCR0eXBlKTsKKworICAgICMgc3BlY2lhbCBjYXNlIGZvciBub24t
RE9NIG5vZGUgaW50ZXJmYWNlcworICAgIGlmIChJc0RPTU5vZGVUeXBlKCR0eXBlKSkgeworICAg
ICAgICByZXR1cm4gIlY4UHJveHk6Ok5vZGVUb1Y4T2JqZWN0KCR2YWx1ZSkiOworICAgIH0KKwor
ICAgIGlmICgkdHlwZSBlcSAiRXZlbnRUYXJnZXQiIG9yICR0eXBlIGVxICJTVkdFbGVtZW50SW5z
dGFuY2UiKSB7CisgICAgICAgIHJldHVybiAiVjhQcm94eTo6RXZlbnRUYXJnZXRUb1Y4T2JqZWN0
KCR2YWx1ZSkiOworICAgIH0KKworICAgIGlmICgkdHlwZSBlcSAiRXZlbnQiKSB7CisgICAgICAg
IHJldHVybiAiVjhQcm94eTo6RXZlbnRUb1Y4T2JqZWN0KCR2YWx1ZSkiOworICAgIH0KKworICAg
IGlmICgkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKKyAgICAgICAgcmV0dXJuICJWOFByb3h5
OjpFdmVudExpc3RlbmVyVG9WOE9iamVjdCgkdmFsdWUpIjsKKyAgICB9CisKKyAgICBpZiAoJHR5
cGUgZXEgIlJHQkNvbG9yIikgeworICAgICAgICByZXR1cm4gIlY4UHJveHk6OlRvVjhPYmplY3Qo
VjhDbGFzc0luZGV4OjpSR0JDT0xPUiwgbmV3IFJHQkNvbG9yKCR2YWx1ZSkpIjsKKyAgICB9CisK
KyAgICBpZiAoJHR5cGUgZXEgIldvcmtlckNvbnRleHQiIG9yICR0eXBlIGVxICJXb3JrZXJMb2Nh
dGlvbiIgb3IgJHR5cGUgZXEgIldvcmtlck5hdmlnYXRvciIpIHsKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgifSA9IDE7CisgICAgICAgIG15ICRj
bGFzc0luZGV4ID0gdWMoJHR5cGUpOworCisgICAgICAgIHJldHVybiAiV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsICR2YWx1
ZSkiOworICAgIH0KKworICAgIGVsc2UgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvUmVm
Q291bnRlZC5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvUmVmUHRyLmgifSA9
IDE7CisgICAgICAgIG15ICRjbGFzc0luZGV4ID0gdWMoJHR5cGUpOworCisgICAgICAgIGlmIChJ
c1BvZFR5cGUoJHR5cGUpKSB7CisgICAgICAgICAgICAkdmFsdWUgPSBHZW5lcmF0ZVNWR1N0YXRp
Y1BvZFR5cGVXcmFwcGVyKCR0eXBlLCAkdmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuICJWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsICR2YWx1
ZSkiOworICAgIH0KK30KKworc3ViIEdlbmVyYXRlU1ZHU3RhdGljUG9kVHlwZVdyYXBwZXIgewor
ICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgbXkgJHZhbHVlID0gc2hpZnQ7CisKKyAgICAkaW1w
bEluY2x1ZGVzeyJWOCR0eXBlLmgifT0xOworICAgICRpbXBsSW5jbHVkZXN7IlY4U1ZHUE9EVHlw
ZVdyYXBwZXIuaCJ9ID0gMTsKKworICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZSgk
dHlwZSk7CisgICAgcmV0dXJuICJuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjwkbmF0aXZl
VHlwZT4oJHZhbHVlKSI7Cit9CisKKyMgSW50ZXJuYWwgaGVscGVyCitzdWIgV3JpdGVEYXRhCit7
CisgICAgaWYgKGRlZmluZWQoJElNUEwpKSB7CisgICAgICAgICMgV3JpdGUgY29udGVudCB0byBm
aWxlLgorICAgICAgICBwcmludCAkSU1QTCBAaW1wbENvbnRlbnRIZWFkZXI7CisKKyAgICAgICAg
cHJpbnQgJElNUEwgQGltcGxGaXhlZEhlYWRlcjsKKworICAgICAgICBmb3JlYWNoIG15ICRpbXBs
SW5jbHVkZSAoc29ydCBrZXlzKCVpbXBsSW5jbHVkZXMpKSB7CisgICAgICAgICAgICBteSAkY2hl
Y2tUeXBlID0gJGltcGxJbmNsdWRlOworICAgICAgICAgICAgJGNoZWNrVHlwZSA9fiBzL1wuaC8v
OworCisgICAgICAgICAgICBwcmludCAkSU1QTCAiI2luY2x1ZGUgXCIkaW1wbEluY2x1ZGVcIlxu
IiB1bmxlc3MgJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCRjaGVja1R5cGUpOwor
ICAgICAgICB9CisKKyAgICAgICAgcHJpbnQgJElNUEwgIlxuIjsKKyAgICAgICAgcHJpbnQgJElN
UEwgQGltcGxDb250ZW50RGVjbHM7CisgICAgICAgIHByaW50ICRJTVBMIEBpbXBsQ29udGVudDsK
KyAgICAgICAgY2xvc2UoJElNUEwpOworICAgICAgICB1bmRlZigkSU1QTCk7CisKKyAgICAgICAg
JWltcGxJbmNsdWRlcyA9ICgpOworICAgICAgICBAaW1wbEZpeGVkSGVhZGVyID0gKCk7CisgICAg
ICAgIEBpbXBsSGVhZGVyQ29udGVudCA9ICgpOworICAgICAgICBAaW1wbENvbnRlbnREZWNscyA9
ICgpOworICAgICAgICBAaW1wbENvbnRlbnQgPSAoKTsKKyAgICB9CisKKyAgICBpZiAoZGVmaW5l
ZCgkSEVBREVSKSkgeworICAgICAgICAjIFdyaXRlIGNvbnRlbnQgdG8gZmlsZS4KKyAgICAgICAg
cHJpbnQgJEhFQURFUiBAaGVhZGVyQ29udGVudDsKKyAgICAgICAgY2xvc2UoJEhFQURFUik7Cisg
ICAgICAgIHVuZGVmKCRIRUFERVIpOworCisgICAgICAgIEBoZWFkZXJDb250ZW50ID0gKCk7Cisg
ICAgfQorfQorCitzdWIgSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIKK3sKKyAgICBt
eSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworCisgICAgaWYgKCRpbXBsQ2xhc3NOYW1lID1+IC9T
VkcvIGFuZCBub3QgJGltcGxDbGFzc05hbWUgPX4gL0VsZW1lbnQvKSB7CisgICAgICAgIHJldHVy
biAxIHVubGVzcyAkaW1wbENsYXNzTmFtZSA9fiAvU1ZHUGFpbnQvIG9yICRpbXBsQ2xhc3NOYW1l
ID1+IC9TVkdDb2xvci8gb3IgJGltcGxDbGFzc05hbWUgPX4gL1NWR0RvY3VtZW50LzsKKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKworc3ViIEdlbmVyYXRlU1ZHQ29udGV4dEFzc2lnbm1lbnQK
K3sKKyAgICBteSAkc3JjVHlwZSA9IHNoaWZ0OworICAgIG15ICR2YWx1ZSA9IHNoaWZ0OworICAg
IG15ICRpbmRlbnQgPSBzaGlmdDsKKworICAgICRyZXN1bHQgPSBHZW5lcmF0ZVNWR0NvbnRleHRS
ZXRyaWV2YWwoJHNyY1R5cGUsICRpbmRlbnQpOworICAgICRyZXN1bHQgLj0gICAkaW5kZW50IC4g
IlY4UHJveHk6OlNldFNWR0NvbnRleHQoJHZhbHVlLCBjb250ZXh0KTtcbiI7CisKKyAgICByZXR1
cm4gJHJlc3VsdDsKK30KKworc3ViIEdlbmVyYXRlU1ZHQ29udGV4dFJldHJpZXZhbAoreworICAg
IG15ICRzcmNUeXBlID0gc2hpZnQ7CisgICAgbXkgJGluZGVudCA9IHNoaWZ0OworCisgICAgbXkg
JHNyY0lzUG9kVHlwZSA9IElzUG9kVHlwZSgkc3JjVHlwZSk7CisKKyAgICBteSAkc3JjT2JqZWN0
ID0gImltcCI7CisgICAgaWYgKCRzcmNJc1BvZFR5cGUpIHsKKyAgICAgICAgJHNyY09iamVjdCA9
ICJpbXBfd3JhcHBlciI7CisgICAgfQorCisgICAgbXkgJGNvbnRleHREZWNsOworCisgICAgaWYg
KElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRzcmNUeXBlKSkgeworICAgICAgICAk
Y29udGV4dERlY2wgPSAiVjhQcm94eTo6R2V0U1ZHQ29udGV4dCgkc3JjT2JqZWN0KSI7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgJGNvbnRleHREZWNsID0gJHNyY09iamVjdDsKKyAgICB9CisKKyAg
ICByZXR1cm4gJGluZGVudCAuICJTVkdFbGVtZW50KiBjb250ZXh0ID0gJGNvbnRleHREZWNsO1xu
IjsKK30KKworc3ViIElzU1ZHTGlzdE11dGF0b3IKK3sKKyAgICBteSAkZnVuY3Rpb25OYW1lID0g
c2hpZnQ7CisKKyAgICByZXR1cm4gMSBpZiAkZnVuY3Rpb25OYW1lIGVxICJjbGVhciI7CisgICAg
cmV0dXJuIDEgaWYgJGZ1bmN0aW9uTmFtZSBlcSAiaW5pdGlhbGl6ZSI7CisgICAgcmV0dXJuIDEg
aWYgJGZ1bmN0aW9uTmFtZSBlcSAiaW5zZXJ0SXRlbUJlZm9yZSI7CisgICAgcmV0dXJuIDEgaWYg
JGZ1bmN0aW9uTmFtZSBlcSAicmVwbGFjZUl0ZW0iOworICAgIHJldHVybiAxIGlmICRmdW5jdGlv
bk5hbWUgZXEgInJlbW92ZUl0ZW0iOworICAgIHJldHVybiAxIGlmICRmdW5jdGlvbk5hbWUgZXEg
ImFwcGVuZEl0ZW0iOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBJc1NWR0xpc3RNZXRob2QK
K3sKKyAgICBteSAkZnVuY3Rpb25OYW1lID0gc2hpZnQ7CisKKyAgICByZXR1cm4gMSBpZiAkZnVu
Y3Rpb25OYW1lIGVxICJnZXRGaXJzdCI7CisgICAgcmV0dXJuIDEgaWYgJGZ1bmN0aW9uTmFtZSBl
cSAiZ2V0TGFzdCI7CisgICAgcmV0dXJuIDEgaWYgJGZ1bmN0aW9uTmFtZSBlcSAiZ2V0SXRlbSI7
CisKKyAgICByZXR1cm4gSXNTVkdMaXN0TXV0YXRvcigkZnVuY3Rpb25OYW1lKTsKK30KKworc3Vi
IElzU1ZHTGlzdFR5cGVOZWVkaW5nU3BlY2lhbEhhbmRsaW5nCit7CisgICAgbXkgJGNsYXNzTmFt
ZSA9IHNoaWZ0OworCisgICAgcmV0dXJuIDEgaWYgJGNsYXNzTmFtZSBlcSAiU1ZHUG9pbnRMaXN0
IjsKKyAgICByZXR1cm4gMSBpZiAkY2xhc3NOYW1lIGVxICJTVkdUcmFuc2Zvcm1MaXN0IjsKKwor
ICAgIHJldHVybiAwOworfQorCitzdWIgRGVidWdQcmludAoreworICAgIG15ICRvdXRwdXQgPSBz
aGlmdDsKKworICAgIHByaW50ICRvdXRwdXQ7CisgICAgcHJpbnQgIlxuIjsKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0gYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCmluZGV4IGRlN2NmOWMuLmM0Y2IwNDEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQpAQCAtNDEsNiArNDEsNyBAQCBteSAkcHJlc2Vy
dmVkUGFyc2VNb2RlID0gTU9ERV9VTkRFRjsKIAogbXkgJGJlUXVpZXQ7ICMgU2hvdWxkIG5vdCBk
aXNwbGF5IGFueXRoaW5nIG9uIFNURE9VVD8KIG15ICRkb2N1bWVudCA9IDA7ICMgV2lsbCBob2xk
IHRoZSByZXN1bHRpbmcgJ2lkbERvY3VtZW50JworbXkgJHBhcmVudHNPbmx5ID0gMDsgIyBJZiAx
LCBwYXJzZSBvbmx5IGVub3VnaCB0byBwb3B1bGF0ZSBwYXJlbnRzIGxpc3QKIAogIyBEZWZhdWx0
IENvbnN0cnVjdG9yCiBzdWIgbmV3CkBAIC02Miw2ICs2Myw3IEBAIHN1YiBQYXJzZQogICAgIG15
ICRmaWxlTmFtZSA9IHNoaWZ0OwogICAgIG15ICRkZWZpbmVzID0gc2hpZnQ7CiAgICAgbXkgJHBy
ZXByb2Nlc3NvciA9IHNoaWZ0OworICAgICRwYXJlbnRzT25seSA9IHNoaWZ0OwogCiAgICAgaWYg
KCEkcHJlcHJvY2Vzc29yKSB7CiAgICAgICAgICRwcmVwcm9jZXNzb3IgPSAiL3Vzci9iaW4vZ2Nj
IC1FIC1QIC14IGMrKyI7CkBAIC0yNDAsNiArMjQyLDggQEAgc3ViIFBhcnNlSW50ZXJmYWNlCiAg
ICAgICAgICAgICBwdXNoKEAkYXJyYXlSZWYsICRsaW5lKTsKICAgICAgICAgfQogCisgICAgICAg
IHJldHVybiBpZiAkcGFyZW50c09ubHk7CisKICAgICAgICAgJGludGVyZmFjZURhdGEgPX4gcy9b
XG5ccl0vIC9nOwogICAgICAgICBteSBAaW50ZXJmYWNlTWV0aG9kcyA9IHNwbGl0KC87LywgJGlu
dGVyZmFjZURhdGEpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31674</attachid>
            <date>2009-06-22 14:26:12 -0700</date>
            <delta_ts>2009-06-22 17:36:02 -0700</delta_ts>
            <desc>Upstream V8 code generator, v2.1.</desc>
            <filename>Upstream-V8-code-generator-v2.1..patch</filename>
            <type>text/plain</type>
            <size>79289</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">NmY4ZmJiMWU5YTRiYmFiMjFhMTUyYzM5OWQxODNjNzEyYmVmNjQ3MApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3OTk0YmU1Li5iZDVjZGQ2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDA5LTA2LTIyICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NTY3CisgICAg
ICAgIFVwc3RyZWFtIFY4IGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yLiBXaXRoIHRoaXMgY2hhbmdl
LCBhbHNvIGFkZGVkIGludGVyZmFjZSBhbmNlc3RvcgorICAgICAgICB0cmF2ZXJzYWwgdG8gSURM
IHBhcnNlciwgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBWOCBiaW5kaW5ncy4gVGhlIHRyYXZlcnNh
bCBpcyB1c2VkCisgICAgICAgIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIGludGVyZmFjZSBpcyBh
IE5vZGUgdG8gZmFjaWxpdGF0ZSBwcm9wZXIgY2FzdGluZyBhbmQgc3RvcmFnZQorICAgICAgICBp
biBWOERPTU1hcC4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5w
bTogQWRkZWQgcGFyZW50IHRyYXZlcnNhbCBzdWIsIG5lZWRlZAorICAgICAgICAgICAgYnkgVjgg
YmluZGluZ3MuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtOiBNb2RpZmll
ZCB0byBhbGxvdyBsaW1pdGVkIHBhcnNpbmcgZm9yCisgICAgICAgICAgICBwYXJlbnQgdHJhdmVy
c2FsIGNhc2VzLgorCiAyMDA5LTA2LTIyICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvci5wbQppbmRleCBkMjE3YzM3Li5mZTE0NWY0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQpAQCAtMTE2LDYgKzExNiw0MSBAQCBz
dWIgUHJvY2Vzc0RvY3VtZW50CiAgICAgJGNvZGVHZW5lcmF0b3ItPmZpbmlzaCgpOwogfQogCisj
IE5lY2Vzc2FyeSBmb3IgVjggYmluZGluZ3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gaW50ZXJm
YWNlIGlzIGRlc2NlbmRhbnQgZnJvbSBOb2RlLgorIyBOb2RlIGRlc2NlbmRhbnRzIGFyZSB0cmVh
dGVkIGRpZmZlcmVudGx5IGJ5IERPTU1hcCBhbmQgdGhpcyBhbGxvd3MgaW5mZXJyaW5nIHRoZQor
IyB0eXBlIHN0YXRpY2FsbHkuIFNlZSBtb3JlIGF0IHRoZSBvcmlnaW5hbCBjaGFuZ2U6IGh0dHA6
Ly9jb2RlcmV2aWV3LmNocm9taXVtLm9yZy8zMTk1LgorIyBGSVhNRTogRmlndXJlIG91dCBhIHdh
eSB0byBlbGltaW5hdGUgdGhpcyBKUyBiaW5kaW5ncyBkaWNob3RvbXkuCitzdWIgRmluZFBhcmVu
dHNSZWN1cnNpdmVseQoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5v
ZGUgPSBzaGlmdDsKKyAgICBteSBAcGFyZW50cyA9ICgkZGF0YU5vZGUtPm5hbWUpOworICAgIGZv
cmVhY2ggKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSkgeworICAgICAgICBteSAkaW50ZXJmYWNlID0g
JG9iamVjdC0+U3RyaXBNb2R1bGUoJF8pOworCisgICAgICAgICRlbmRDb25kaXRpb24gPSAwOwor
ICAgICAgICAkZm91bmRGaWxlbmFtZSA9ICIiOworICAgICAgICBmb3JlYWNoIChAeyR1c2VEaXJl
Y3Rvcmllc30pIHsKKyAgICAgICAgICAgICRvYmplY3QtPlNjYW5EaXJlY3RvcnkoIiRpbnRlcmZh
Y2UuaWRsIiwgJF8sICRfLCAwKSBpZiAoJGZvdW5kRmlsZW5hbWUgZXEgIiIpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCRmb3VuZEZpbGVuYW1lIG5lICIiKSB7CisgICAgICAgICAgICBwcmlu
dCAiICB8ICB8PiAgUGFyc2luZyBwYXJlbnQgSURMIFwiJGZvdW5kRmlsZW5hbWVcIiBmb3IgaW50
ZXJmYWNlIFwiJGludGVyZmFjZVwiXG4iIGlmICR2ZXJib3NlOworCisgICAgICAgICAgICMgU3Rl
cCAjMjogUGFyc2UgdGhlIGZvdW5kIElETCBmaWxlIChpbiBxdWlldCBtb2RlKS4KKyAgICAgICAg
ICAgIG15ICRwYXJzZXIgPSBJRExQYXJzZXItPm5ldygxKTsKKyAgICAgICAgICAgIG15ICRkb2N1
bWVudCA9ICRwYXJzZXItPlBhcnNlKCRmb3VuZEZpbGVuYW1lLCAkZGVmaW5lcywgJHByZXByb2Nl
c3NvciwgMSk7CisKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGNsYXNzIChAeyRkb2N1bWVudC0+
Y2xhc3Nlc30pIHsKKyAgICAgICAgICAgICAgICBAcGFyZW50cyA9IChAcGFyZW50cywgRmluZFBh
cmVudHNSZWN1cnNpdmVseSgkb2JqZWN0LCAkY2xhc3MpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpZSgiQ291bGQgTk9UIGZpbmQgc3BlY2lmaWVkIHBh
cmVudCBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlXCIhXG4iKQorICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBAcGFyZW50czsKK30KKwogc3ViIEFkZE1ldGhvZHNDb25zdGFudHNBbmRBdHRyaWJ1
dGVzRnJvbVBhcmVudENsYXNzZXMKIHsKICAgICAjIEZvciB0aGUgcGFzc2VkIGludGVyZmFjZSwg
cmVjdXJzaXZlbHkgcGFyc2UgYWxsIHBhcmVudApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJi
NzJmYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0KQEAgLTAsMCArMSwyMTg5IEBACisKKyMgQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorIyBDb3B5cmlnaHQg
KEMpIDIwMDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBtYWMuY29tPgorIyBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisjIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorIyBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4LCAyMDA5IEdvb2dsZSBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAorIworIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
IyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhaW50IHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl
IDMzMCwKKyMgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisKK3BhY2thZ2UgQ29kZUdl
bmVyYXRvclY4OworCit1c2UgRmlsZTo6c3RhdDsKKworbXkgJG1vZHVsZSA9ICIiOworbXkgJG91
dHB1dERpciA9ICIiOworCitteSBAaGVhZGVyQ29udGVudCA9ICgpOworbXkgQGltcGxDb250ZW50
SGVhZGVyID0gKCk7CitteSBAaW1wbEZpeGVkSGVhZGVyID0gKCk7CitteSBAaW1wbENvbnRlbnQg
PSAoKTsKK215IEBpbXBsQ29udGVudERlY2xzID0gKCk7CitteSAlaW1wbEluY2x1ZGVzID0gKCk7
CisKK215IEBhbGxQYXJlbnRzID0gKCk7CisKKyMgRGVmYXVsdCAuaCB0ZW1wbGF0ZQorbXkgJGhl
YWRlclRlbXBsYXRlID0gPDwgIkVPRiI7CisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KK0VPRgorCisjIERl
ZmF1bHQgY29uc3RydWN0b3IKK3N1YiBuZXcKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Cisg
ICAgbXkgJHJlZmVyZW5jZSA9IHsgfTsKKworICAgICRjb2RlR2VuZXJhdG9yID0gc2hpZnQ7Cisg
ICAgJG91dHB1dERpciA9IHNoaWZ0OworCisgICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7
CisgICAgcmV0dXJuICRyZWZlcmVuY2U7Cit9CisKK3N1YiBmaW5pc2gKK3sKKyAgICBteSAkb2Jq
ZWN0ID0gc2hpZnQ7CisKKyAgICAjIENvbW1pdCBjaGFuZ2VzIQorICAgICRvYmplY3QtPldyaXRl
RGF0YSgpOworfQorCitzdWIgbGVmdFNoaWZ0KCQkKSB7CisgICAgbXkgKCR2YWx1ZSwgJGRpc3Rh
bmNlKSA9IEBfOworICAgIHJldHVybiAoKCR2YWx1ZSA8PCAkZGlzdGFuY2UpICYgMHhGRkZGRkZG
Rik7Cit9CisKKyMgVXBwZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXIsIHdoaWxlIHJlc3BlY3Rpbmcg
V2ViS2l0IHN0eWxlIGd1aWRlbGluZXMuCisjIEUuZy4sIHhtbEVuY29kaW5nIGJlY29tZXMgWE1M
RW5jb2RpbmcsIGJ1dCB4bWxsbGFuZyBiZWNvbWVzIFhtbGxhbmcuCitzdWIgV0tfdWNmaXJzdAor
eworICAgIG15ICRwYXJhbSA9IHNoaWZ0OworICAgIG15ICRyZXQgPSB1Y2ZpcnN0KCRwYXJhbSk7
CisgICAgJHJldCA9fiBzL1htbC9YTUwvIGlmICRyZXQgPX4gL15YbWxbXmEtel0vOworICAgIHJl
dHVybiAkcmV0OworfQorCisjIExvd2VyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIHdoaWxlIHJlc3Bl
Y3RpbmcgV2ViS2l0IHN0eWxlIGd1aWRlbGluZXMuCisjIFVSTCBiZWNvbWVzIHVybCwgYnV0IFNl
dFVSTCBiZWNvbWVzIHNldFVSTC4KK3N1YiBXS19sY2ZpcnN0Cit7CisgICAgbXkgJHBhcmFtID0g
c2hpZnQ7CisgICAgbXkgJHJldCA9IGxjZmlyc3QoJHBhcmFtKTsKKyAgICAkcmV0ID1+IHMvdVJM
L3VybC87CisgICAgcmV0dXJuICRyZXQ7Cit9CisKKyMgV29ya2Fyb3VuZCBmb3IgVjggYmluZGlu
Z3MgZGlmZmVyZW5jZSB3aGVyZSBSR0JDb2xvciBpcyBub3QgYSBQT0QgdHlwZS4KK3N1YiBJc1Bv
ZFR5cGUKK3sKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIHJldHVybiAwIGlmICR0eXBlIGVx
ICJSR0JDb2xvciI7CisgICAgcmV0dXJuICRjb2RlR2VuZXJhdG9yLT5Jc1BvZFR5cGUoJHR5cGUp
OworfQorCisjIFBhcmFtczogJ2RvbUNsYXNzJyBzdHJ1Y3QKK3N1YiBHZW5lcmF0ZUludGVyZmFj
ZQoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsK
KyAgICBteSAkZGVmaW5lcyA9IHNoaWZ0OworCisgICAgIyBTdGFydCBhY3R1YWwgZ2VuZXJhdGlv
bgorICAgICRvYmplY3QtPkdlbmVyYXRlSGVhZGVyKCRkYXRhTm9kZSk7CisgICAgJG9iamVjdC0+
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbigkZGF0YU5vZGUpOworCisgICAgbXkgJG5hbWUgPSAkZGF0
YU5vZGUtPm5hbWU7CisKKyAgICAjIE9wZW4gZmlsZXMgZm9yIHdyaXRpbmcKKyAgICBteSAkaGVh
ZGVyRmlsZU5hbWUgPSAiJG91dHB1dERpci9WOCRuYW1lLmgiOworICAgIG15ICRpbXBsRmlsZU5h
bWUgPSAiJG91dHB1dERpci9WOCRuYW1lLmNwcCI7CisKKyAgICBvcGVuKCRJTVBMLCAiPiRpbXBs
RmlsZU5hbWUiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkaW1wbEZpbGVOYW1lIjsKKyAg
ICBvcGVuKCRIRUFERVIsICI+JGhlYWRlckZpbGVOYW1lIikgfHwgZGllICJDb3VsZG4ndCBvcGVu
IGZpbGUgJGhlYWRlckZpbGVOYW1lIjsKK30KKworIyBQYXJhbXM6ICdpZGxEb2N1bWVudCcgc3Ry
dWN0CitzdWIgR2VuZXJhdGVNb2R1bGUKK3sKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAg
bXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICAkbW9kdWxlID0gJGRhdGFOb2RlLT5tb2R1bGU7
Cit9CisKK3N1YiBHZXRMZWdhY3lIZWFkZXJJbmNsdWRlcworeworICAgIG15ICRsZWdhY3lQYXJl
bnQgPSBzaGlmdDsKKworICAgIGRpZSAiRG9uJ3Qga25vdyB3aGF0IGhlYWRlcnMgdG8gaW5jbHVk
ZSBmb3IgbW9kdWxlICRtb2R1bGUiOworfQorCitzdWIgQXZvaWRJbmNsdXNpb25PZlR5cGUKK3sK
KyAgICBteSAkdHlwZSA9IHNoaWZ0OworCisgICAgIyBTcGVjaWFsIGNhc2U6IFNWR1JlY3QuaCAv
IFNWR1BvaW50LmggLyBTVkdOdW1iZXIuaCAvIFNWR01hdHJpeC5oIGRvIG5vdCBleGlzdC4KKyAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHUmVjdCIgb3IgJHR5cGUgZXEgIlNWR1BvaW50IiBv
ciAkdHlwZSBlcSAiU1ZHTnVtYmVyIiBvciAkdHlwZSBlcSAiU1ZHTWF0cml4IjsKKyAgICByZXR1
cm4gMDsKK30KKworc3ViIFVzZXNNYW51YWxUb0pTSW1wbGVtZW50YXRpb24KK3sKKyAgICBteSAk
dHlwZSA9IHNoaWZ0OworCisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlNWR1BhdGhTZWciOwor
ICAgIHJldHVybiAwOworfQorCitzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCit7CisgICAgbXkgJHR5
cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hpZnQpOworCisgICAgIyBXaGVuIHdl
J3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcworICAgICMgcmVvcmdhbml6
YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KKyAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgb3IgQXZvaWRJbmNsdXNpb25PZlR5cGUo
JHR5cGUpKSB7CisgICAgfSBlbHNpZiAoJHR5cGUgPX4gL1NWR1BhdGhTZWcvKSB7CisgICAgICAg
ICRqb2luZWROYW1lID0gJHR5cGU7CisgICAgICAgICRqb2luZWROYW1lID1+IHMvQWJzfFJlbC8v
OworICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2pvaW5lZE5hbWV9LmgifSA9IDE7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5hbWVkIGZpbGUKKyAg
ICAgICAgJGltcGxJbmNsdWRlc3tHZXRJbXBsZW1lbnRhdGlvbkZpbGVOYW1lKCR7dHlwZX0pfSA9
IDE7CisgICAgfQorCisgICAgIyBhZGRpdGlvbmFsIGluY2x1ZGVzICh0aGluZ3MgbmVlZGVkIHRv
IGNvbXBpbGUgdGhlIGJpbmRpbmdzIGJ1dCBub3QgdGhlIGhlYWRlcikKKworICAgIGlmICgkdHlw
ZSBlcSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIikgeworICAgICAgICAkaW1wbEluY2x1ZGVz
eyJDYW52YXNHcmFkaWVudC5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJDYW52YXNQ
YXR0ZXJuLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkNhbnZhc1N0eWxlLmgifSA9
IDE7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJDYW52YXNHcmFkaWVudCIgb3IgJHR5cGUg
ZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siUGxhdGZvcm1T
dHJpbmcuaCJ9ID0gMTsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIkNTU1N0eWxlRGVjbGFy
YXRpb24iKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkNTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uLmgifSA9IDE7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJQbHVnaW4iIG9yICR0eXBl
IGVxICJQbHVnaW5BcnJheSIgb3IgJHR5cGUgZXEgIk1pbWVUeXBlQXJyYXkiKSB7CisgICAgICAg
ICMgU28gd2UgY2FuIGdldCBTdHJpbmcgLT4gQXRvbWljU3RyaW5nIGNvbnZlcnNpb24gZm9yIG5h
bWVkSXRlbSgpLgorICAgICAgICAkaW1wbEluY2x1ZGVzeyJBdG9taWNTdHJpbmcuaCJ9ID0gMTsK
KyAgICB9Cit9CisKK3N1YiBBZGRJbmNsdWRlc0ZvclNWR0FuaW1hdGVkVHlwZQoreworICAgIG15
ICR0eXBlID0gc2hpZnQ7CisgICAgJHR5cGUgPX4gcy9TVkdBbmltYXRlZC8vOworCisgICAgaWYg
KCR0eXBlIGVxICJQb2ludCIgb3IgJHR5cGUgZXEgIlJlY3QiKSB7CisgICAgICAgICRpbXBsSW5j
bHVkZXN7IkZsb2F0JHR5cGUuaCJ9ID0gMTsKKyAgICB9IGVsc2lmICgkdHlwZSBlcSAiU3RyaW5n
IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJQbGF0Zm9ybVN0cmluZy5oIn0gPSAxOworICAg
IH0KKworICAgICRpbXBsSW5jbHVkZXN7IlNWR0FuaW1hdGVkVGVtcGxhdGUuaCJ9ID0gMTsKK30K
Kworc3ViIEFkZENsYXNzRm9yd2FyZElmTmVlZGVkCit7CisgICAgbXkgJGltcGxDbGFzc05hbWUg
PSBzaGlmdDsKKworICAgICMgU1ZHQW5pbWF0ZWRMZW5ndGgvTnVtYmVyL2V0Yy4uIGFyZSB0eXBl
ZGVmcyB0byBTVkdBbmltdGF0ZWRUZW1wbGF0ZSwgc28gZG9uJ3QgdXNlIGNsYXNzIGZvcndhcmRz
IGZvciB0aGVtIQorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAkaW1wbENsYXNzTmFt
ZTtcblxuIikgdW5sZXNzICRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgkaW1wbENs
YXNzTmFtZSk7Cit9CisKK3N1YiBHZXRJbXBsZW1lbnRhdGlvbkZpbGVOYW1lCit7CisgICAgbXkg
JGlmYWNlID0gc2hpZnQ7CisgICAgcmV0dXJuICJIVE1MQ29sbGVjdGlvbi5oIiBpZiAkaWZhY2Ug
ZXEgIlVuZGV0ZWN0YWJsZUhUTUxDb2xsZWN0aW9uIjsKKyAgICByZXR1cm4gIkV2ZW50LmgiIGlm
ICRpZmFjZSBlcSAiRE9NVGltZVN0YW1wIjsKKyAgICByZXR1cm4gIk5hbWVkQXR0ck1hcC5oIiBp
ZiAkaWZhY2UgZXEgIk5hbWVkTm9kZU1hcCI7CisgICAgcmV0dXJuICJOYW1lTm9kZUxpc3QuaCIg
aWYgJGlmYWNlIGVxICJOb2RlTGlzdCI7CisgICAgcmV0dXJuICJYTUxIdHRwUmVxdWVzdC5oIiBp
ZiAkaWZhY2UgZXEgIlhNTEh0dHBSZXF1ZXN0IjsKKworICAgIHJldHVybiAiJHtpZmFjZX0uaCI7
Cit9CisKK3N1YiBHZW5lcmF0ZUhlYWRlcgoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAg
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGRhdGFO
b2RlLT5uYW1lOworICAgIG15ICRjbGFzc05hbWUgPSAiVjgkaW50ZXJmYWNlTmFtZSI7CisgICAg
bXkgJGltcGxDbGFzc05hbWUgPSAkaW50ZXJmYWNlTmFtZTsKKworICAgICMgQ29weSBjb250ZW50
cyBvZiBwYXJlbnQgY2xhc3NlcyBleGNlcHQgdGhlIGZpcnN0IHBhcmVudCBvciBpZiBpdCBpcwor
ICAgICMgRXZlbnRUYXJnZXQuCisgICAgJGNvZGVHZW5lcmF0b3ItPkFkZE1ldGhvZHNDb25zdGFu
dHNBbmRBdHRyaWJ1dGVzRnJvbVBhcmVudENsYXNzZXMoJGRhdGFOb2RlKTsKKworICAgIG15ICRo
YXNMZWdhY3lQYXJlbnQgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQ
YXJlbnQifTsKKyAgICBteSAkY29uZGl0aW9uYWwgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDb25kaXRpb25hbCJ9OworCisgICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1w
bGF0ZQorICAgIEBoZWFkZXJDb250ZW50ID0gc3BsaXQoIlxyIiwgJGhlYWRlclRlbXBsYXRlKTsK
KworICAgIG15ICRjb25kaXRpb25hbFN0cmluZzsKKyAgICBpZiAoJGNvbmRpdGlvbmFsKSB7Cisg
ICAgICAgICRjb25kaXRpb25hbFN0cmluZyA9ICJFTkFCTEUoIiAuIGpvaW4oIikgJiYgRU5BQkxF
KCIsIHNwbGl0KC8mLywgJGNvbmRpdGlvbmFsKSkgLiAiKSI7CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJcbiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKTsKKyAgICB9CisKKyAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4jaWZuZGVmICRjbGFzc05hbWUiIC4gIl9IIik7Cisg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuI2RlZmluZSAkY2xhc3NOYW1lIiAuICJfSFxuXG4i
KTsKKworICAgICMgR2V0IGNvcnJlY3QgcGFzcy9zdG9yZSB0eXBlcyByZXNwZWN0aW5nIFBPRFR5
cGUgZmxhZworICAgIG15ICRwb2RUeXBlID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiUE9EVHlwZSJ9OworICAgIG15ICRwYXNzVHlwZSA9ICRwb2RUeXBlID8gIkpTU1ZHUE9EVHlw
ZVdyYXBwZXI8JHBvZFR5cGU+KiIgOiAiJGltcGxDbGFzc05hbWUqIjsKKworICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIjaW5jbHVkZSBcIiRwb2RUeXBlLmhcIlxuIikgaWYgJHBvZFR5cGUgYW5k
ICgkcG9kVHlwZSBuZSAiZG91YmxlIiBhbmQgJHBvZFR5cGUgbmUgImZsb2F0IiBhbmQgJHBvZFR5
cGUgbmUgIlJHQkEzMiIpOworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIDx2
OC5oPlxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPlxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiU3RyaW5nSGFz
aC5oXCJcbiIpOworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxubmFtZXNwYWNlIFdlYkNv
cmUge1xuXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgVjhDbGFzc0luZGV4
O1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xhc3MgJGNsYXNzTmFtZSB7XG4i
KTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisKKyBwdWJsaWM6CisgIHN0YXRp
YyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7CisgIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUoKTsK
K0VORAorCisgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJET01XaW5kb3ciKSB7CisgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0VGVtcGxhdGU+IEdldFNoYWRvd09iamVjdFRlbXBsYXRlKCk7CitFTkQKKyAgICB9CisK
KyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisKKyBwcml2YXRlOgorICBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKCk7CisKKyAg
ZnJpZW5kIGNsYXNzIFY4Q2xhc3NJbmRleDsKK307CisKK0VORAorCisgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIn1cblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAk
Y2xhc3NOYW1lIiAuICJfSFxuIik7CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlm
IC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbDsKK30KKworCitz
dWIgR2VuZXJhdGVTZXRET01FeGNlcHRpb24KK3sKKyAgICBteSAkaW5kZW50ID0gc2hpZnQ7Cisg
ICAgbXkgJHJlc3VsdCA9ICIiOworCisgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChlYykg
e1xuIjsKKyAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiICAgIFY4UHJveHk6OlNldERPTUV4Y2Vw
dGlvbihlYyk7XG4iOworICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIgICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpO1xuIjsKKyAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAifVxuIjsK
KworICAgIHJldHVybiAkcmVzdWx0OworfQorCitzdWIgSXNOb2RlU3ViVHlwZQoreworICAgIG15
ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIHJldHVybiAxIGlmICgkZGF0YU5vZGUtPm5hbWUgZXEg
Ik5vZGUiKTsKKyAgICBmb3JlYWNoIChAYWxsUGFyZW50cykgeworICAgICAgICBteSAkcGFyZW50
ID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRfKTsKKyAgICAgICAgcmV0dXJuIDEgaWYg
JHBhcmVudCBlcSAiTm9kZSI7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdWIgSG9sZGVy
VG9OYXRpdmUKK3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkaW1wbENsYXNz
TmFtZSA9IHNoaWZ0OworICAgIG15ICRjbGFzc0luZGV4ID0gc2hpZnQ7CisKKyAgICBpZiAoSXNO
b2RlU3ViVHlwZSgkZGF0YU5vZGUpKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
IDw8RU5EKTsKKyAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gVjhQcm94eTo6RE9NV3JhcHBlclRv
Tm9kZTwkaW1wbENsYXNzTmFtZT4oaG9sZGVyKTsKK0VORAorCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOworICAgICRpbXBsQ2xhc3NOYW1lKiBp
bXAgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDwkaW1wbENsYXNzTmFtZT4oVjhDbGFzc0luZGV4
OjokY2xhc3NJbmRleCwgaG9sZGVyKTsKK0VORAorCisgIH0KK30KKworc3ViIEdlbmVyYXRlRG9t
YWluU2FmZUZ1bmN0aW9uR2V0dGVyCit7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CisgICAg
bXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkgJGNsYXNzSW5kZXggPSBzaGlmdDsKKyAgICBt
eSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworCisgICAgbXkgJGNsYXNzTmFtZSA9ICJWOCIgLiAk
ZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGZ1bmNOYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUt
Pm5hbWU7CisKKyAgICBteSAkc2lnbmF0dXJlID0gInY4OjpTaWduYXR1cmU6Ok5ldygiIC4gJGNs
YXNzTmFtZSAuICI6OkdldFJhd1RlbXBsYXRlKCkpIjsKKyAgICBpZiAoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOERvTm90Q2hlY2tTaWduYXR1cmUifSkgewor
ICAgICAgICAkc2lnbmF0dXJlID0gInY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPigpIjsKKyAgICB9
CisKKyAgICBteSAkbmV3VGVtcGxhdGVTdHJpbmcgPSBHZW5lcmF0ZU5ld0Z1bmN0aW9uVGVtcGxh
dGUoJGZ1bmN0aW9uLCAkZGF0YU5vZGUsICRzaWduYXR1cmUpOworCisgICAgJGltcGxJbmNsdWRl
c3sidjhfcHJveHkuaCJ9ID0gMTsKKworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5E
KTsKKyAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke2Z1bmNOYW1lfUF0dHJHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
IHsKKyAgICBJTkNfU1RBVFMoXCJET00uJGltcGxDbGFzc05hbWUuJGZ1bmNOYW1lLl9nZXRcIik7
CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRl
X3RlbXBsYXRlID0KKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
OjpOZXcoJG5ld1RlbXBsYXRlU3RyaW5nKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhv
bGRlciA9IFY4UHJveHk6Okxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRl
eCwgaW5mby5UaGlzKCkpOworICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSB7CisgICAgICAvLyBj
YW4gb25seSByZWFjaCBoZXJlIGJ5ICdvYmplY3QuX19wcm90b19fLmZ1bmMnLCBhbmQgaXQgc2hv
dWxkIHBhc3NlZAorICAgICAgLy8gZG9tYWluIHNlY3VyaXR5IGNoZWNrIGFscmVhZHkKKworICAg
ICAgcmV0dXJuIHByaXZhdGVfdGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CisgICAgfQorRU5ECisK
KyAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgp
OworCisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOworICAgIGlmICghVjhQcm94
eTo6Q2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKKyAgICAgIHN0YXRpYyB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkX3RlbXBsYXRlID0KKyAg
ICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoJG5ld1RlbXBs
YXRlU3RyaW5nKTsKKyAgICAgIHJldHVybiBzaGFyZWRfdGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7
CisKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHByaXZhdGVfdGVtcGxhdGUtPkdldEZ1bmN0
aW9uKCk7CisgICAgfQorICB9CisKK0VORAorfQorCitzdWIgR2VuZXJhdGVDb25zdHJ1Y3Rvckdl
dHRlcgoreworICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJGNsYXNzSW5k
ZXggPSBzaGlmdDsKKworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke2ltcGxDbGFzc05hbWV9Q29uc3RydWN0b3JHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pIHsKKyAgICBJTkNfU1RBVFMoXCJET00uJGltcGxDbGFzc05hbWUuY29uc3RydWN0b3JzLl9n
ZXRcIik7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRhdGEgPSBpbmZvLkRhdGEoKTsKKyAg
ICBBU1NFUlQoZGF0YS0+SXNOdW1iZXIoKSk7CisgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJU
eXBlIHR5cGUgPSBWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJWYWx1ZSgpKTsKK0VO
RAorCisgICAgaWYgKCRjbGFzc0luZGV4IGVxICJET01XSU5ET1ciKSB7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICBET01XaW5kb3cqIHdpbmRvdyA9IFY4UHJv
eHk6OlRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGlu
Zm8uSG9sZGVyKCkpOworICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+ZnJhbWUoKTsKKyAgICBp
ZiAoZnJhbWUpIHsKKyAgICAgIC8vIEdldCB0aGUgcHJveHkgY29ycmVzcG9uZGluZyB0byB0aGUg
RE9NV2luZG93IGlmIHBvc3NpYmxlIHRvCisgICAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgY29u
c3RydWN0b3IgZnVuY3Rpb24gaXMgY29uc3RydWN0ZWQgaW4gdGhlCisgICAgICAvLyBjb250ZXh0
IG9mIHRoZSBET01XaW5kb3cgYW5kIG5vdCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY2FsbGVyLgor
ICAgICAgcmV0dXJuIFY4UHJveHk6OnJldHJpZXZlKGZyYW1lKS0+R2V0Q29uc3RydWN0b3IodHlw
ZSk7CisgICAgfQorRU5ECisgIH0KKworICAgIGlmICgkY2xhc3NJbmRleCBlcSAiV09SS0VSQ09O
VEVYVCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmgifSA9IDE7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAg
ICByZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpLT5HZXRDb25z
dHJ1Y3Rvcih0eXBlKTsKK0VORAorICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsiKTsKKyAgICB9CisKKyAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CisKKyAgICB9CisKK0VORAorfQorCitzdWIg
R2VuZXJhdGVOb3JtYWxBdHRyR2V0dGVyCit7CisgICAgbXkgJGF0dHJpYnV0ZSA9IHNoaWZ0Owor
ICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRjbGFzc0luZGV4ID0gc2hpZnQ7Cisg
ICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKworICAgIG15ICRhdHRyRXh0ID0gJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXM7CisKKyAgICBteSAkYXR0ck5hbWUg
PSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgJGltcGxJbmNsdWRlc3sidjhfcHJv
eHkuaCJ9ID0gMTsKKworICAgIG15ICRhdHRyVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1v
ZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOworICAgIG15ICRhdHRySXNQb2RUeXBl
ID0gSXNQb2RUeXBlKCRhdHRyVHlwZSk7CisKKyAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2
ZVR5cGVGcm9tU2lnbmF0dXJlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCk7CisgICAgbXkgJGlz
UG9kVHlwZSA9IElzUG9kVHlwZSgkaW1wbENsYXNzTmFtZSk7CisgICAgbXkgJHNraXBDb250ZXh0
ID0gMDsKKworCisgICAgaWYgKCRpc1BvZFR5cGUpIHsKKyAgICAgICAgJGltcGxDbGFzc05hbWUg
PSBHZXROYXRpdmVUeXBlKCRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3si
VjhTVkdQT0RUeXBlV3JhcHBlci5oIn0gPSAxOworICAgIH0KKworICAgICMgU3BlY2lhbCBjYXNl
OiBTVkdab29tRXZlbnQncyBhdHRyaWJ1dGVzIGFyZSBhbGwgcmVhZC1vbmx5CisgICAgaWYgKCRp
bXBsQ2xhc3NOYW1lIGVxICJTVkdab29tRXZlbnQiKSB7CisgICAgICAgICRhdHRySXNQb2RUeXBl
ID0gMDsKKyAgICAgICAgJHNraXBDb250ZXh0ID0gMTsKKyAgICB9CisKKyAgICAjIFNwZWNpYWwg
Y2FzZTogU1ZHU1ZHRWVsZW1lbnQ6OnZpZXdwb3J0IGlzIHJlYWQtb25seQorICAgIGlmICgoJGlt
cGxDbGFzc05hbWUgZXEgIlNWR1NWR0VsZW1lbnQiKSBhbmQgKCRhdHRyTmFtZSBlcSAidmlld3Bv
cnQiKSkgeworICAgICAgICAkYXR0cklzUG9kVHlwZSA9IDA7CisgICAgICAgICRza2lwQ29udGV4
dCA9IDE7CisgICAgfQorCisgICAgIyBTcGVjaWFsIGNhc2UgZm9yIFNWR0NvbG9yCisgICAgaWYg
KCgkaW1wbENsYXNzTmFtZSBlcSAiU1ZHQ29sb3IiKSBhbmQgKCRhdHRyTmFtZSBlcSAicmdiQ29s
b3IiKSkgeworICAgICAgICAkYXR0cklzUG9kVHlwZSA9IDA7CisgICAgfQorCisgICAgbXkgJGdl
dHRlclN0cmluZ1VzZXNJbXAgPSAkaW1wbENsYXNzTmFtZSBuZSAiZG91YmxlIjsKKworICAjIEdl
dHRlcgorICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiAke2F0dHJOYW1lfUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pIHsKKyAgICBJTkNfU1RBVFMo
XCJET00uJGltcGxDbGFzc05hbWUuJGF0dHJOYW1lLl9nZXRcIik7CitFTkQKKworICAgIGlmICgk
aXNQb2RUeXBlKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAg
ICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiogaW1wX3dyYXBwZXIgPSBWOFBy
b3h5OjpUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiA+
KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uSG9sZGVyKCkpOworICAgICRpbXBsQ2xh
c3NOYW1lIGltcF9pbnN0YW5jZSA9ICppbXBfd3JhcHBlcjsKK0VORAorICAgICAgICBpZiAoJGdl
dHRlclN0cmluZ1VzZXNJbXApIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
IDw8RU5EKTsKKyAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gJmltcF9pbnN0YW5jZTsKK0VORAor
ICAgICAgICB9CisKKyAgICB9IGVsc2lmICgkYXR0ckV4dC0+eyJ2OE9uUHJvdG8ifSB8fCAkYXR0
ckV4dC0+eyJWOERpc2FsbG93U2hhZG93aW5nIn0pIHsKKyAgICAgICAgIyBwZXJmb3JtIGxvb2t1
cCBmaXJzdAorICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5OjpMb29rdXBET01XcmFwcGVyKFY4
Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uVGhpcygpKTsKKyAgICBpZiAoaG9sZGVyLklz
RW1wdHkoKSkgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK0VORAorICAgICAgICBIb2xkZXJUb05h
dGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOworICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKK0VORAorICAgICAgICBIb2xk
ZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCk7CisgICAg
fQorCisgICAgIyBHZW5lcmF0ZSBzZWN1cml0eSBjaGVja3MgaWYgbmVjZXNzYXJ5CisgICAgaWYg
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrTm9kZVNl
Y3VyaXR5In0pIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIVY4
UHJveHk6OkNoZWNrTm9kZVNlY3VyaXR5KGltcC0+JGF0dHJOYW1lKCkpKSByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpO1xuXG4iKTsKKyAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja0ZyYW1lU2VjdXJpdHkifSkgeworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmICghVjhQcm94eTo6Q2hlY2tOb2RlU2VjdXJpdHko
aW1wLT5jb250ZW50RG9jdW1lbnQoKSkpIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7XG5cbiIpOwor
ICAgIH0KKworICAgIG15ICR1c2VFeGNlcHRpb25zID0gMSBpZiBAeyRhdHRyaWJ1dGUtPmdldHRl
ckV4Y2VwdGlvbnN9IGFuZCAhKCRpc1BvZFR5cGUpOworICAgIGlmICgkdXNlRXhjZXB0aW9ucykg
eworICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsK
KyAgICB9CisKKyAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsidjhyZWZlcmVuY2VhdHRyIn0pIHsKKyAgICAgICAgJGF0dHJOYW1lID0gJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsidjhyZWZlcmVuY2VhdHRyIn07Cisg
ICAgfQorCisgICAgbXkgJGdldHRlckZ1bmMgPSBXS19sY2ZpcnN0KCRhdHRyTmFtZSk7CisgICAg
JGdldHRlckZ1bmMgLj0gIkFuaW1hdGVkIiBpZiAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRl
ZFR5cGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKTsKKworICAgIG15ICRyZXR1cm5UeXBl
ID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlw
ZSk7CisKKyAgICBteSAkZ2V0dGVyU3RyaW5nOworICAgIGlmICgkZ2V0dGVyU3RyaW5nVXNlc0lt
cCkgeworICAgICAgICAkZ2V0dGVyU3RyaW5nID0gImltcC0+JGdldHRlckZ1bmMoIjsKKyAgICAg
ICAgJGdldHRlclN0cmluZyAuPSAiZWMiIGlmICR1c2VFeGNlcHRpb25zOworICAgICAgICAkZ2V0
dGVyU3RyaW5nIC49ICIpIjsKKyAgICAgICAgaWYgKElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSkp
IHsKKyAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9HZXRQdHIuaCJ9ID0gMTsKKyAgICAg
ICAgICAgICRnZXR0ZXJTdHJpbmcgPSAiV1RGOjpnZXRQdHIoIiAuICRnZXR0ZXJTdHJpbmcgLiAi
KSI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCRuYXRpdmVUeXBlIGVxICJpbnQiIGFuZAorICAg
ICAgICAgICAgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29u
dmVydEZyb21TdHJpbmcifSkgeworICAgICAgICAgICAgICAgICRnZXR0ZXJTdHJpbmcgLj0gIi50
b0ludCgpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRn
ZXR0ZXJTdHJpbmcgPSAiaW1wX2luc3RhbmNlIjsKKyAgICAgICAgfQorICAgICAgICBpZiAoJG5h
dGl2ZVR5cGUgZXEgIlN0cmluZyIpIHsKKyAgICAgICAgICAgICRnZXR0ZXJTdHJpbmcgPSAiVG9T
dHJpbmcoJGdldHRlclN0cmluZykiOworICAgICAgICB9CisKKyAgICAgICAgbXkgJHJlc3VsdDsK
KyAgICAgICAgbXkgJHdyYXBwZXI7CisKKyAgICAgICAgaWYgKCRhdHRySXNQb2RUeXBlKSB7Cisg
ICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOFNWR1BPRFR5cGVXcmFwcGVyLmgifSA9IDE7CisK
KyAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAkZ2V0dGVyU3RyaW5nOworICAgICAgICAgICAgJGdl
dHRlciA9fiBzL2ltcC0+Ly87CisgICAgICAgICAgICAkZ2V0dGVyID1+IHMvXChcKS8vOworICAg
ICAgICAgICAgbXkgJHNldHRlciA9ICJzZXQiIC4gV0tfdWNmaXJzdCgkZ2V0dGVyKTsKKworICAg
ICAgICAgICAgbXkgJGltcGxDbGFzc0lzQW5pbWF0ZWRUeXBlID0gJGNvZGVHZW5lcmF0b3ItPklz
U1ZHQW5pbWF0ZWRUeXBlKCRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAgICAgIGlmIChub3QgJGlt
cGxDbGFzc0lzQW5pbWF0ZWRUeXBlCisgICAgICAgICAgICAgICAgYW5kICRjb2RlR2VuZXJhdG9y
LT5Jc1BvZFR5cGVXaXRoV3JpdGVhYmxlUHJvcGVydGllcygkYXR0clR5cGUpCisgICAgICAgICAg
ICAgICAgYW5kIG5vdCBkZWZpbmVkICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkltbXV0YWJsZSJ9KSB7CisgICAgICAgICAgICBpZiAoSXNQb2RUeXBlKCRpbXBs
Q2xhc3NOYW1lKSkgeworICAgICAgICAgICAgICAgICR3cmFwcGVyID0gIm5ldyBWOFNWR1N0YXRp
Y1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQYXJlbnQ8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NO
YW1lPigkZ2V0dGVyU3RyaW5nLCBpbXBfd3JhcHBlcikiOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAkd3JhcHBlciA9ICJuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBl
cldpdGhQYXJlbnQ8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lPihpbXAsICYke2ltcGxDbGFz
c05hbWV9OjokZ2V0dGVyLCAmJHtpbXBsQ2xhc3NOYW1lfTo6JHNldHRlcikiOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCRpbXBsQ2xhc3NJc0FuaW1h
dGVkVHlwZSkgeworICAgICAgICAgICAgICAgICR3cmFwcGVyID0gIlY4U1ZHRHluYW1pY1BPRFR5
cGVXcmFwcGVyQ2FjaGU8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lPjo6bG9va3VwT3JDcmVh
dGVXcmFwcGVyKGltcCwgJiR7aW1wbENsYXNzTmFtZX06OiRnZXR0ZXIsICYke2ltcGxDbGFzc05h
bWV9Ojokc2V0dGVyKSI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICR3
cmFwcGVyID0gR2VuZXJhdGVTVkdTdGF0aWNQb2RUeXBlV3JhcHBlcigkcmV0dXJuVHlwZSwgJGdl
dHRlclN0cmluZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIHZvaWQqIHdyYXBwZXIgPSAkd3JhcHBlcjtcbiIpOworICAg
IH0gZWxzaWYgKCRuYXRpdmVUeXBlIG5lICJSR0JDb2xvciIpIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICAkbmF0aXZlVHlwZSB2ID0gIik7CisKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiRnZXR0ZXJTdHJpbmc7XG4iKTsKKworICAgICAgICBpZiAoJHVz
ZUV4Y2VwdGlvbnMpIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIEdlbmVy
YXRlU2V0RE9NRXhjZXB0aW9uKCIgICAgIikpOworICAgICAgICB9CisKKyAgICAgICAgJHJlc3Vs
dCA9ICJ2IjsKKyAgICAgICAgaWYgKElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSkpIHsKKyAgICAg
ICAgICAgICRyZXN1bHQgPSAiV1RGOjpnZXRQdHIoIiAuICRyZXN1bHQgLiAiKSI7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICAjIFNwZWNpYWwgY2FzZTogUkdCQ29sb3IgaXMgbm9u
Y29weWFibGUKKyAgICAgICAgJHJlc3VsdCA9ICRnZXR0ZXJTdHJpbmc7CisgICAgfQorCisKKyAg
ICBpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGF0dHJUeXBlKSAmJiAhJHNr
aXBDb250ZXh0KSB7CisgICAgICAgIG15ICRyZXN1bHRPYmplY3QgPSAkcmVzdWx0OworICAgICAg
ICBpZiAoJGF0dHJJc1BvZFR5cGUpIHsKKyAgICAgICAgICAgICRyZXN1bHRPYmplY3QgPSAid3Jh
cHBlciI7CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBHZW5l
cmF0ZVNWR0NvbnRleHRBc3NpZ25tZW50KCRpbXBsQ2xhc3NOYW1lLCAkcmVzdWx0T2JqZWN0LCAi
ICAgICIpKTsKKyAgICB9CisKKyAgICBpZiAoJGF0dHJJc1BvZFR5cGUpIHsKKyAgICAgICAgbXkg
JGNsYXNzSW5kZXggPSB1YygkYXR0clR5cGUpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgIHJldHVybiBWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNz
SW5kZXgsIHdyYXBwZXIpO24iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgIHJldHVybiAiLk5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlIC0gPnNp
Z25hdHVyZSwgJHJlc3VsdCkuIjtuIik7CisgICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgfVxuXG4iKTsgICMgZW5kIG9mIGdldHRlcgorfQorCisKK3N1YiBHZW5lcmF0ZVJl
cGxhY2VhYmxlQXR0clNldHRlcgoreworICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CisK
KyAgICAkaW1wbEluY2x1ZGVzeyJ2OF9wcm94eS5oIn0gPSAxOworCisgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywKKyAgICAgICAiICBzdGF0aWMgdm9pZCAke2F0dHJOYW1lfUF0dHJTZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIiAuCisgICAgICAgIiB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykge1xuIik7CisKKyAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIElOQ19TVEFUUyhcIkRPTS4kaW1wbENsYXNzTmFt
ZS4kYXR0ck5hbWUuX3NldFwiKTtcbiIpOworCisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gJHthdHRyTmFtZX1fc3RyaW5nID0gdjg6OlN0cmlu
Zzo6TmV3KFwiJHthdHRyTmFtZX1cIik7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIGluZm8uSG9sZGVyKCktPkRlbGV0ZSgke2F0dHJOYW1lfV9zdHJpbmcpO1xuIik7Cisg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpbmZvLlRoaXMoKS0+U2V0KCR7YXR0ck5h
bWV9X3N0cmluZywgdmFsdWUpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
fVxuXG4iKTsKK30KKworCitzdWIgR2VuZXJhdGVOb3JtYWxBdHRyU2V0dGVyCit7CisgICAgbXkg
JGF0dHJpYnV0ZSA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRj
bGFzc0luZGV4ID0gc2hpZnQ7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKworICAg
IG15ICRhdHRyRXh0ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXM7
CisKKyAgICAkaW1wbEluY2x1ZGVzeyJ2OF9wcm94eS5oIn0gPSAxOworCisgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywKKyAgICAgICAiICBzdGF0aWMgdm9pZCAke2F0dHJOYW1lfUF0dHJTZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIiAuCisgICAgICAgIiB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykge1xuIik7CisKKyAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIElOQ19TVEFUUyhcIkRPTS4kaW1wbENsYXNz
TmFtZS4kYXR0ck5hbWUuX3NldFwiKTtcbiIpOworCisgICAgbXkgJGlzUG9kVHlwZSA9IElzUG9k
VHlwZSgkaW1wbENsYXNzTmFtZSk7CisKKyAgICBpZiAoJGlzUG9kVHlwZSkgeworICAgICAgICAk
aW1wbENsYXNzTmFtZSA9IEdldE5hdGl2ZVR5cGUoJGltcGxDbGFzc05hbWUpOworICAgICAgICAk
aW1wbEluY2x1ZGVzeyJWOFNWR1BPRFR5cGVXcmFwcGVyLmgifSA9IDE7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgVjhTVkdQT0RUeXBlV3JhcHBlcjwkaW1wbENsYXNzTmFt
ZT4qIHdyYXBwZXIgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVy
PCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uSG9sZGVy
KCkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJGltcGxDbGFz
c05hbWUgaW1wX2luc3RhbmNlID0gKndyYXBwZXI7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gJmltcF9pbnN0YW5jZTtcbiIp
OworCisgICAgfSBlbHNpZiAoJGF0dHJFeHQtPnsidjhPblByb3RvIn0pIHsKKyAgICAgICAgIyBw
ZXJmb3JtIGxvb2t1cCBmaXJzdAorICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVO
RCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5OjpMb29rdXBE
T01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uVGhpcygpKTsKKyAgICBp
ZiAoaG9sZGVyLklzRW1wdHkoKSkgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK0VORAorICAgICAg
ICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwor
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKK0VORAor
ICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJ
bmRleCk7CisgICAgfQorCisgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRnJvbVNp
Z25hdHVyZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDApOworICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgdiA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAuICI7XG4iKTsKKworICAgIG15ICRyZXN1bHQgPSAiIjsK
KyAgICBpZiAoJG5hdGl2ZVR5cGUgZXEgImludCIgYW5kICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRGcm9tU3RyaW5nIn0pIHsKKyAgICAgICAgJHJl
c3VsdCAuPSAiV2ViQ29yZTo6U3RyaW5nOjpudW1iZXIoIjsKKyAgICB9CisgICAgJHJlc3VsdCAu
PSAidiI7CisgICAgaWYgKCRuYXRpdmVUeXBlIGVxICJpbnQiIGFuZCAkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0RnJvbVN0cmluZyJ9KSB7CisgICAg
ICAgICRyZXN1bHQgLj0gIikiOworICAgIH0KKyAgICBteSAkcmV0dXJuVHlwZSA9ICRjb2RlR2Vu
ZXJhdG9yLT5TdHJpcE1vZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOworICAgIGlm
IChJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpKSB7CisgICAgICAgICRyZXN1bHQgPSAiV1RGOjpn
ZXRQdHIoIiAuICRyZXN1bHQgLiAiKSI7CisgICAgfQorCisgICAgbXkgJHVzZUV4Y2VwdGlvbnMg
PSAxIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc30gYW5kICEoJGlzUG9kVHlwZSk7
CisKKyAgICBpZiAoJHVzZUV4Y2VwdGlvbnMpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siRXhj
ZXB0aW9uQ29kZS5oIn0gPSAxOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIik7CisgICAgfQorCisgICAgaWYgKCRpbXBsQ2xhc3NO
YW1lIGVxICJkb3VibGUiKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
KmltcCA9ICRyZXN1bHQ7XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgIGltcC0+c2V0IiAuIFdLX3VjZmlyc3QoJGF0dHJOYW1lKSAuICIoIiAu
ICRyZXN1bHQpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiLCBlYyIpIGlmICR1
c2VFeGNlcHRpb25zOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiKTtcbiIpOwor
ICAgIH0KKworICAgIGlmICgkdXNlRXhjZXB0aW9ucykgeworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgIFY4UHJveHk6OlNldERPTUV4Y2VwdGlvbihlYyk7XG4iKTsKKyAgICB9
CisKKyAgICBpZiAoJGlzUG9kVHlwZSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIHdyYXBwZXItPmNvbW1pdENoYW5nZSgqaW1wLCBWOFByb3h5OjpHZXRTVkdDb250ZXh0
KHdyYXBwZXIpKTtcbiIpOworICAgIH0gZWxzaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFy
YW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJTVkdFbGVt
ZW50LmgifSA9IDE7CisKKyAgICAgICAgbXkgJGN1cnJlbnRPYmplY3QgPSAiaW1wIjsKKyAgICAg
ICAgaWYgKCRpc1BvZFR5cGUpIHsKKyAgICAgICAgICAgICRjdXJyZW50T2JqZWN0ID0gIndyYXBw
ZXIiOworICAgICAgICB9CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBp
ZiAoU1ZHRWxlbWVudCogY29udGV4dCA9IFY4UHJveHk6OkdldFNWR0NvbnRleHQoJGN1cnJlbnRP
YmplY3QpKSB7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAg
Y29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1l
KCkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7Cisg
ICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm47XG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICB9XG5cbiIpOyAgIyBlbmQgb2Ygc2V0dGVyCit9
CisKK3N1YiBHZW5lcmF0ZU5ld0Z1bmN0aW9uVGVtcGxhdGUKK3sKKyAgICAkZnVuY3Rpb24gPSBz
aGlmdDsKKyAgICAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICAkc2lnbmF0dXJlID0gc2hpZnQ7CisK
KyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkbmFtZSA9
ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOworCisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0gfHwKKyAgICAgICAgJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOEN1c3RvbSJ9KSB7CisgICAgICAg
IGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9
ICYmCisgICAgICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IlY4Q3VzdG9tIn0pIHsKKyAgICAgICAgICAgIGRpZSAiQ3VzdG9tIGFuZCBWOEN1c3RvbSBz
aG91bGQgYmUgbXV0dWFsbHkgZXhjbHVzaXZlISIKKyAgICAgICAgfQorICAgICAgICBteSAkY3Vz
dG9tRnVuYyA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tIn0gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q3VzdG9tIn07CisgICAgICAgIGlmICgkY3VzdG9tRnVu
YyBlcSAxKSB7CisgICAgICAgICAgICAkY3VzdG9tRnVuYyA9ICRpbnRlcmZhY2VOYW1lIC4gV0tf
dWNmaXJzdCgkbmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJ2ODo6RnVuY3Rpb25U
ZW1wbGF0ZTo6TmV3KFY4Q3VzdG9tOjp2OCR7Y3VzdG9tRnVuY31DYWxsYmFjaywgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCksICRzaWduYXR1cmUpIjsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1
cm4gInY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoJHtpbnRlcmZhY2VOYW1lfUludGVybmFsOjok
e25hbWV9Q2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCAkc2lnbmF0dXJlKSI7Cisg
ICAgfQorfQorCitzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxiYWNrCit7CisgICAgbXkgJGZ1bmN0
aW9uID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkgJGNsYXNzSW5k
ZXggPSBzaGlmdDsKKyAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworCisgICAgbXkgJGlu
dGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+bmFtZTsKKworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsCisiICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+ICR7bmFtZX1DYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKSB7XG4iIC4KKyIgICAgSU5DX1NUQVRTKFwiRE9NLiRpbXBsQ2xhc3NOYW1lLiRu
YW1lXCIpO1xuIik7CisKKyAgICBteSAkbnVtUGFyYW1ldGVycyA9IEB7JGZ1bmN0aW9uLT5wYXJh
bWV0ZXJzfTsKKworICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IlJlcXVpcmVzQWxsQXJndW1lbnRzIn0pIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywKKyAgICAgICAgICAgICIgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAkbnVtUGFyYW1l
dGVycykgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTtcbiIpOworICAgIH0KKworICAgIGlmIChJc1Bv
ZFR5cGUoJGltcGxDbGFzc05hbWUpKSB7CisgICAgICAgIG15ICRuYXRpdmVDbGFzc05hbWUgPSBH
ZXROYXRpdmVUeXBlKCRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRuYXRpdmVDbGFzc05hbWU+KiBpbXBfd3Jh
cHBlciA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8JG5hdGl2
ZUNsYXNzTmFtZT4gPihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBhcmdzLkhvbGRlcigpKTtc
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVDbGFzc05h
bWUgaW1wX2luc3RhbmNlID0gKmltcF93cmFwcGVyO1xuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgJG5hdGl2ZUNsYXNzTmFtZSogaW1wID0gJmltcF9pbnN0YW5jZTtc
biIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5E
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKK0VO
RAorICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xh
c3NJbmRleCk7CisgICAgfQorCisgICMgQ2hlY2sgZG9tYWluIHNlY3VyaXR5IGlmIG5lZWRlZAor
ICAgIGlmICgoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tEb21haW5TZWN1
cml0eSJ9CisgICAgICAgfHwgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpCisgICAgICAg
JiYgISRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVj
a0RvbWFpblNlY3VyaXR5In0pIHsKKyAgICAjIFdlIGhhdmUgbm90IGZpbmQgcmVhbCB1c2UgY2Fz
ZXMgeWV0LgorICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsCisiICAgIGlmICghVjhQcm94eTo6
Q2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkge1xuIi4KKyIgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpO1xuIiAuCisiICAgIH1cbiIpOworICAgIH0KKworCisgICAgaWYgKEB7
JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJF
eGNlcHRpb25Db2RlLmgifSA9IDE7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKyAgICB9CisKKyAgICBpZiAoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Bcmd1bWVudEhhbmRsaW5n
In0pIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBTY3JpcHRDYWxsU3Rh
Y2sgY2FsbFN0YWNrKGFyZ3MsICRudW1QYXJhbWV0ZXJzKTtcbiIpOworICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJTY3JpcHRDYWxsU3RhY2suaCJ9ID0gMTsKKyAgICB9CisKKyAgICBteSAkcGFyYW1J
bmRleCA9IDA7CisgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pIHsKKyAgICAgICAgVHJhbnNsYXRlUGFyYW1ldGVyKCRwYXJhbWV0ZXIpOworCisgICAg
ICAgIG15ICRwYXJhbWV0ZXJOYW1lID0gJHBhcmFtZXRlci0+bmFtZTsKKworICAgICAgICBpZiAo
JHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKKyAgICAgICAg
ICAgICMgR2VuZXJhdGUgZWFybHkgY2FsbCBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCBwYXJhbWV0
ZXJzLgorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8PSAkcGFyYW1JbmRleCkge1xuIik7CisgICAgICAgICAgICBteSAkZnVuY3Rpb25D
YWxsID0gR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoJGZ1bmN0aW9uLCAkcGFyYW1JbmRleCwg
IiAgICAiIHggMiwgJGltcGxDbGFzc05hbWUpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgJGZ1bmN0aW9uQ2FsbCk7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgIH1cbiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEJhc2ljVHlwZUNhbkZh
aWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpKSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgIGJvb2wgJHtwYXJhbWV0ZXJOYW1lfU9rO1xuIik7CisgICAgICAgIH0KKwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIgLiBHZXROYXRpdmVUeXBlRnJv
bVNpZ25hdHVyZSgkcGFyYW1ldGVyLCAxKSAuICIgJHBhcmFtZXRlck5hbWUgPSAiKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJh
cmdzWyRwYXJhbUluZGV4XSIsCisgICAgICAgICAgIEJhc2ljVHlwZUNhbkZhaWxDb252ZXJzaW9u
KCRwYXJhbWV0ZXIpID8gICIke3BhcmFtZXRlck5hbWV9T2siIDogdW5kZWYpIC4gIjtcbiIpOwor
CisgICAgICAgIGlmIChUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsKKyAgICAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsCisiICAgIGlmICghJHBhcmFtZXRlck5hbWUiIC4gKEJh
c2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpID8gIk9rIiA6ICIiKSAuICIpIHtc
biIgLgorIiAgICAgIFY4UHJveHk6OlNldERPTUV4Y2VwdGlvbihUWVBFX01JU01BVENIX0VSUik7
XG4iIC4KKyIgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG4iIC4KKyIgICAg
fVxuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IklzSW5kZXgifSkgeworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRXhjZXB0
aW9uQ29kZS5oIn0gPSAxOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywKKyIg
ICAgaWYgKCRwYXJhbWV0ZXJOYW1lIDwgMCkge1xuIiAuCisiICAgICAgVjhQcm94eTo6U2V0RE9N
RXhjZXB0aW9uKElOREVYX1NJWkVfRVJSKTtcbiIgLgorIiAgICAgIHJldHVybiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKTtcbiIgLgorIiAgICB9XG4iKTsKKyAgICAgICAgfQorCisgICAgICAgICRw
YXJhbUluZGV4Kys7CisgICAgfQorCisgICAgIyBCdWlsZCB0aGUgZnVuY3Rpb24gY2FsbCBzdHJp
bmcuCisgICAgbXkgJGNhbGxTdHJpbmcgPSBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygkZnVu
Y3Rpb24sICRwYXJhbUluZGV4LCAiICAgICIsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiJGNhbGxTdHJpbmciKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICB9XG5cbiIpOworfQorCitzdWIgR2VuZXJhdGVCYXRjaGVkQXR0cmlidXRlRGF0YQor
eworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7CisgICAgbXkgJGF0dHJpYnV0ZXMgPSBz
aGlmdDsKKworICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQCRhdHRyaWJ1dGVzKSB7CisgICAg
ICAgIG15ICRhdHRyTmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAg
bXkgJGF0dHJFeHQgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlczsK
KworICAgICAgICBteSAkYWNjZXNzQ29udHJvbCA9ICJ2ODo6REVGQVVMVCI7CisgICAgICAgIGlm
ICgkYXR0ckV4dC0+eyJEb05vdENoZWNrRG9tYWluU2VjdXJpdHlPbkdldCJ9KSB7CisgICAgICAg
ICAgICAkYWNjZXNzQ29udHJvbCA9ICJ2ODo6QUxMX0NBTl9SRUFEIjsKKyAgICAgICAgfSBlbHNp
ZiAoJGF0dHJFeHQtPnsiRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5T25TZXQifSkgeworICAgICAg
ICAgICAgJGFjY2Vzc0NvbnRyb2wgPSAidjg6OkFMTF9DQU5fV1JJVEUiOworICAgICAgICB9IGVs
c2lmICgkYXR0ckV4dC0+eyJEb05vdENoZWNrRG9tYWluU2VjdXJpdHkifSkgeworICAgICAgICAg
ICAgJGFjY2Vzc0NvbnRyb2wgPSAidjg6OkFMTF9DQU5fUkVBRCI7CisgICAgICAgIGlmICghKCRh
dHRyaWJ1dGUtPnR5cGUgPX4gL15yZWFkb25seS8pICYmICEoJGF0dHJFeHQtPnsiVjhSZWFkT25s
eSJ9KSkgeworICAgICAgICAgICAgJGFjY2Vzc0NvbnRyb2wgLj0gInx2ODo6QUxMX0NBTl9XUklU
RSI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCRhdHRyRXh0LT57IlY4RGlzYWxsb3dTaGFk
b3dpbmcifSkgeworICAgICAgICAkYWNjZXNzQ29udHJvbCAuPSAifHY4OjpQUk9ISUJJVFNfT1ZF
UldSSVRJTkciOworICAgIH0KKyAgICAkYWNjZXNzQ29udHJvbCA9ICJzdGF0aWNfY2FzdDx2ODo6
QWNjZXNzQ29udHJvbD4oIiAuICRhY2Nlc3NDb250cm9sIC4gIikiOworCisgICAgbXkgJGN1c3Rv
bUFjY2Vzc29yID0KKyAgICAgICAgJGF0dHJFeHQtPnsiQ3VzdG9tIn0gfHwKKyAgICAgICAgJGF0
dHJFeHQtPnsiQ3VzdG9tU2V0dGVyIn0gfHwKKyAgICAgICAgJGF0dHJFeHQtPnsiQ3VzdG9tR2V0
dGVyIn0gfHwKKyAgICAgICAgJGF0dHJFeHQtPnsiVjhDdXN0b20ifSB8fAorICAgICAgICAkYXR0
ckV4dC0+eyJWOEN1c3RvbVNldHRlciJ9IHx8CisgICAgICAgICRhdHRyRXh0LT57IlY4Q3VzdG9t
R2V0dGVyIn0gfHwKKyAgICAgICAgIiI7CisgICAgaWYgKCRjdXN0b21BY2Nlc3NvciBlcSAxKSB7
CisgICAgICAgICMgdXNlIHRoZSBuYW1pbmcgY29udmVuc2lvbiwgaW50ZXJmYWNlICsgKGNhcGl0
YWxpemUpIGF0dHIgbmFtZQorICAgICAgICAkY3VzdG9tQWNjZXNzb3IgPSAkaW50ZXJmYWNlTmFt
ZSAuIFdLX3VjZmlyc3QoJGF0dHJOYW1lKTsKKyAgICB9CisKKyAgICBteSAkZ2V0dGVyOworICAg
IG15ICRzZXR0ZXI7CisgICAgbXkgJHByb3BBdHRyID0gInY4OjpOb25lIjsKKyAgICBteSAkaGFz
Q3VzdG9tU2V0dGVyID0gMDsKKworICAgICMgQ2hlY2sgYXR0cmlidXRlcy4KKyAgICBpZiAoJGF0
dHJFeHQtPnsiRG9udEVudW0ifSkgeworICAgICAgICAkcHJvcEF0dHIgLj0gInx2ODo6RG9udEVu
dW0iOworICAgIH0KKyAgICBpZiAoJGF0dHJFeHQtPnsiVjhEaXNhbGxvd1NoYWRvd2luZyJ9KSB7
CisgICAgICAgICRwcm9wQXR0ciAuPSAifHY4OjpEb250RGVsZXRlIjsKKyAgICB9CisKKyAgICBt
eSAkb25fcHJvdG8gPSAiMCAvKiBvbiBpbnN0YW5jZSAqLyI7CisgICAgbXkgJGRhdGEgPSAiVjhD
bGFzc0luZGV4OjpJTlZBTElEX0NMQVNTX0lOREVYIC8qIG5vIGRhdGEgKi8iOworCisgICAgIyBD
b25zdHJ1Y3RvcgorICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0
cnVjdG9yJC8pIHsKKyAgICAgICAgbXkgJGNvbnN0cnVjdG9yVHlwZSA9ICRjb2RlR2VuZXJhdG9y
LT5TdHJpcE1vZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOworICAgICAgICAkY29u
c3RydWN0b3JUeXBlID1+IHMvQ29uc3RydWN0b3IkLy87CisgICAgICAgIG15ICRjb25zdHJ1Y3Rv
ckluZGV4ID0gdWMoJGNvbnN0cnVjdG9yVHlwZSk7CisgICAgICAgICRkYXRhID0gIlY4Q2xhc3NJ
bmRleDo6JHtjb25zdHJ1Y3RvckluZGV4fSI7CisgICAgICAgICRnZXR0ZXIgPSAiJHtpbnRlcmZh
Y2VOYW1lfUludGVybmFsOjoke2ludGVyZmFjZU5hbWV9Q29uc3RydWN0b3JHZXR0ZXIiOworICAg
ICAgICAkc2V0dGVyID0gIjAiOworICAgICAgICAkcHJvcEF0dHIgPSAidjg6OlJlYWRPbmx5IjsK
KworICAgICMgRXZlbnRMaXN0ZW5lcnMKKyAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1
cmUtPnR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiKSB7CisgICAgICAgIGlmICgkaW50ZXJmYWNlTmFt
ZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICAgICAgJGdldHRlciA9ICJWOEN1c3RvbTo6djhE
T01XaW5kb3dFdmVudEhhbmRsZXJBY2Nlc3NvckdldHRlciI7CisgICAgICAgICAgICAkc2V0dGVy
ID0gIlY4Q3VzdG9tOjp2OERPTVdpbmRvd0V2ZW50SGFuZGxlckFjY2Vzc29yU2V0dGVyIjsKKyAg
ICAgICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEgIkVsZW1lbnQiIHx8ICRpbnRlcmZhY2VO
YW1lIGVxICJEb2N1bWVudCIgfHwgJGludGVyZmFjZU5hbWUgZXEgIlNWR0VsZW1lbnRJbnN0YW5j
ZSIpIHsKKyAgICAgICAgICAgICRnZXR0ZXIgPSAiVjhDdXN0b206OnY4RWxlbWVudEV2ZW50SGFu
ZGxlckFjY2Vzc29yR2V0dGVyIjsKKyAgICAgICAgICAgICRzZXR0ZXIgPSAiVjhDdXN0b206OnY4
RWxlbWVudEV2ZW50SGFuZGxlckFjY2Vzc29yU2V0dGVyIjsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICRnZXR0ZXIgPSAiVjhDdXN0b206OnY4JHtjdXN0b21BY2Nlc3Nvcn1BY2Nlc3Nv
ckdldHRlciI7CisgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIldvcmtlckNvbnRl
eHQiIGFuZCAkYXR0ck5hbWUgZXEgInNlbGYiKSB7CisgICAgICAgICAgICAgICAgJHNldHRlciA9
ICIwIjsKKyAgICAgICAgICAgICAgICAkcHJvcEF0dHIgPSAidjg6OlJlYWRPbmx5IjsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJHNldHRlciA9ICJWOEN1c3RvbTo6djgk
e2N1c3RvbUFjY2Vzc29yfUFjY2Vzc29yU2V0dGVyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgIyBDdXN0b20gR2V0dGVyIGFuZCBTZXR0ZXIKKyAgICB9IGVsc2lmICgkYXR0ckV4
dC0+eyJDdXN0b20ifSB8fCAkYXR0ckV4dC0+eyJWOEN1c3RvbSJ9KSB7CisgICAgICAgICRnZXR0
ZXIgPSAiVjhDdXN0b206OnY4JHtjdXN0b21BY2Nlc3Nvcn1BY2Nlc3NvckdldHRlciI7CisgICAg
ICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiV29ya2VyQ29udGV4dCIgYW5kICRhdHRyTmFtZSBl
cSAic2VsZiIpIHsKKyAgICAgICAgICAgICRzZXR0ZXIgPSAiMCI7CisgICAgICAgICAgICAkcHJv
cEF0dHIgPSAidjg6OlJlYWRPbmx5IjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRo
YXNDdXN0b21TZXR0ZXIgPSAxOworICAgICAgICAgICAgJHNldHRlciA9ICJWOEN1c3RvbTo6djgk
e2N1c3RvbUFjY2Vzc29yfUFjY2Vzc29yU2V0dGVyIjsKKyAgICAgICAgfQorCisgICAgIyBDdXN0
b20gU2V0dGVyCisgICAgfSBlbHNpZiAoJGF0dHJFeHQtPnsiQ3VzdG9tU2V0dGVyIn0gfHwgJGF0
dHJFeHQtPnsiVjhDdXN0b21TZXR0ZXIifSkgeworICAgICAgICAkaGFzQ3VzdG9tU2V0dGVyID0g
MTsKKyAgICAgICAgJGdldHRlciA9ICIke2ludGVyZmFjZU5hbWV9SW50ZXJuYWw6OiR7YXR0ck5h
bWV9QXR0ckdldHRlciI7CisgICAgICAgICRzZXR0ZXIgPSAiVjhDdXN0b206OnY4JHtjdXN0b21B
Y2Nlc3Nvcn1BY2Nlc3NvclNldHRlciI7CisKKyAgICAjIEN1c3RvbSBHZXR0ZXIKKyAgICB9IGVs
c2lmICgkYXR0ckV4dC0+eyJDdXN0b21HZXR0ZXIifSkgeworICAgICAgICAkZ2V0dGVyID0gIlY4
Q3VzdG9tOjp2OCR7Y3VzdG9tQWNjZXNzb3J9QWNjZXNzb3JHZXR0ZXIiOworICAgICAgICAkc2V0
dGVyID0gIiR7aW50ZXJmYWNlTmFtZX1JbnRlcm5hbDo6JHthdHRyTmFtZX1BdHRyU2V0dGVyIjsK
KworICAgICMgUmVwbGFjZWFibGUKKyAgICB9IGVsc2lmICgkYXR0ckV4dC0+eyJSZXBsYWNlYWJs
ZSJ9KSB7CisgICAgICAgICMgUmVwbGFjZWFibGUgYWNjZXNzb3IgaXMgcHV0IG9uIGluc3RhbmNl
IHRlbXBsYXRlIHdpdGggUmVhZE9ubHkgYXR0cmlidXRlLgorICAgICAgICAkZ2V0dGVyID0gIiR7
aW50ZXJmYWNlTmFtZX1JbnRlcm5hbDo6JHthdHRyTmFtZX1BdHRyR2V0dGVyIjsKKyAgICAgICAg
JHNldHRlciA9ICIwIjsKKworICAgICAgICAjIE1hcmsgdG8gYXZvaWQgZHVwbGljYXRlIHY4OjpS
ZWFkT25seSBmbGFncyBpbiBvdXRwdXQuCisgICAgICAgICRoYXNDdXN0b21TZXR0ZXIgPSAxOwor
CisgICAgICAgICMgSGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2Ygd2luZG93LnRvcCBiZWluZyBt
YXJrZWQgdXBzdHJlYW0gYXMgUmVwbGFjZWFibGUuCisgICAgICAgICMgRklYTUU6IEludmVzdGln
YXRlIHdoeSBbUmVwbGFjZWFibGVdIGlzIG5vdCBtYXJrZWQgYXMgUmVhZE9ubHkKKyAgICAgICAg
IyB1cHN0cmVhbSBhbmQgcmVhY2ggcGFyaXR5LgorICAgICAgICBpZiAoISgkaW50ZXJmYWNlTmFt
ZSBlcSAiRE9NV2luZG93IiBhbmQgJGF0dHJOYW1lIGVxICJ0b3AiKSkgeworICAgICAgICAgICAg
JHByb3BBdHRyIC49ICJ8djg6OlJlYWRPbmx5IjsKKyAgICAgICAgfQorCisgICAgIyBOb3JtYWwK
KyAgICB9IGVsc2UgeworICAgICAgICAkZ2V0dGVyID0gIiR7aW50ZXJmYWNlTmFtZX1JbnRlcm5h
bDo6JHthdHRyTmFtZX1BdHRyR2V0dGVyIjsKKyAgICAgICAgJHNldHRlciA9ICIke2ludGVyZmFj
ZU5hbWV9SW50ZXJuYWw6OiR7YXR0ck5hbWV9QXR0clNldHRlciI7CisgICAgfQorCisgICAgaWYg
KCRhdHRyRXh0LT57IlJlcGxhY2VhYmxlIn0gJiYgISRoYXNDdXN0b21TZXR0ZXIpIHsKKyAgICAg
ICAgJHNldHRlciA9ICIwIjsKKyAgICAgICAgJHByb3BBdHRyIC49ICJ8djg6OlJlYWRPbmx5IjsK
KyAgICB9CisKKyAgICAjIFJlYWQgb25seSBhdHRyaWJ1dGVzCisgICAgaWYgKCRhdHRyaWJ1dGUt
PnR5cGUgPX4gL15yZWFkb25seS8gfHwgJGF0dHJFeHQtPnsiVjhSZWFkT25seSJ9KSB7CisgICAg
ICAgICRzZXR0ZXIgPSAiMCI7CisgICAgfQorCisgICAgIyBBbiBhY2Nlc3NvciBjYW4gYmUgaW5z
dGFsbGVkIG9uIHRoZSBwcm90bworICAgIGlmICgkYXR0ckV4dC0+eyJ2OE9uUHJvdG8ifSkgewor
ICAgICAgICAkb25fcHJvdG8gPSAiMSAvKiBvbiBwcm90byAqLyI7CisgICAgfQorCisgICAgbXkg
JGNvbW1lbnRJbmZvID0gIkF0dHJpYnV0ZSAnJGF0dHJOYW1lJyAoVHlwZTogJyIgLiAkYXR0cmli
dXRlLT50eXBlIC4KKyAgICAgICAgICAgICAgICAgICAgICAiJyBFeHRBdHRyOiAnIiAuIGpvaW4o
JyAnLCBrZXlzKCV7JGF0dHJFeHR9KSkgLiAiJykiOworICAgIHB1c2goQGltcGxDb250ZW50LCA8
PEVORCk7CisgIC8vICRjb21tZW50SW5mbworICB7ICIkYXR0ck5hbWUiLAorICAgICRnZXR0ZXIs
CisgICAgJHNldHRlciwKKyAgICAkZGF0YSwKKyAgICAkYWNjZXNzQ29udHJvbCwKKyAgICBzdGF0
aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KCRwcm9wQXR0ciksCisgICAgJG9uX3Byb3Rv
IH0sCitFTkQKKyAgICB9Cit9CisKKworc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KK3sKKyAg
ICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkg
JGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGNsYXNzTmFtZSA9ICJW
OCRpbnRlcmZhY2VOYW1lIjsKKyAgICBteSAkaW1wbENsYXNzTmFtZSA9ICRpbnRlcmZhY2VOYW1l
OworICAgIG15ICRjbGFzc0luZGV4ID0gdWMoJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRp
bnRlcmZhY2VOYW1lKSk7CisKKyAgICBteSAkaGFzTGVnYWN5UGFyZW50ID0gJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFyZW50In07CisgICAgbXkgJGNvbmRpdGlvbmFs
ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsKKworICAg
IEBhbGxQYXJlbnRzID0gJGNvZGVHZW5lcmF0b3ItPkZpbmRQYXJlbnRzUmVjdXJzaXZlbHkoJGRh
dGFOb2RlKTsKKworICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUKKyAgICBAaW1w
bENvbnRlbnRIZWFkZXIgPSBzcGxpdCgiXHIiLCAkaGVhZGVyVGVtcGxhdGUpOworCisgICAgcHVz
aChAaW1wbEZpeGVkSGVhZGVyLAorICAgICAgICAgIiNpbmNsdWRlIFwiY29uZmlnLmhcIlxuIiAu
CisgICAgICAgICAiI2luY2x1ZGUgXCJ2OF9wcm94eS5oXCJcbiIgLgorICAgICAgICAgIiNpbmNs
dWRlIFwidjhfYmluZGluZy5oXCJcblxuIiAuCisgICAgICAgICAiI3VuZGVmIExPR1xuXG4iKTsK
KworICAgIG15ICRjb25kaXRpb25hbFN0cmluZzsKKyAgICBpZiAoJGNvbmRpdGlvbmFsKSB7Cisg
ICAgICAgICRjb25kaXRpb25hbFN0cmluZyA9ICJFTkFCTEUoIiAuIGpvaW4oIikgJiYgRU5BQkxF
KCIsIHNwbGl0KC8mLywgJGNvbmRpdGlvbmFsKSkgLiAiKSI7CisgICAgICAgIHB1c2goQGltcGxG
aXhlZEhlYWRlciwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpOworICAgIH0KKwor
ICAgIGlmICgkY2xhc3NOYW1lID1+IC9eVjhTVkdBbmltYXRlZC8pIHsKKyAgICAgICAgQWRkSW5j
bHVkZXNGb3JTVkdBbmltYXRlZFR5cGUoJGludGVyZmFjZU5hbWUpOworICAgIH0KKworICAgICRp
bXBsSW5jbHVkZXN7IiR7Y2xhc3NOYW1lfS5oIn0gPSAxOworCisgICAgQWRkSW5jbHVkZXNGb3JU
eXBlKCRpbnRlcmZhY2VOYW1lKTsKKyAgICAkaW1wbEluY2x1ZGVzeyJ2OF9wcm94eS5oIn0gPSAx
OworCisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIm5hbWVzcGFjZSBXZWJDb3JlIHtcbiIp
OworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJuYW1lc3BhY2UgJHtpbnRlcmZhY2VOYW1l
fUludGVybmFsIHtcblxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgInRlbXBsYXRl
IDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VTRShUKSB7IH1cblxuIik7CisKKyAgICBteSAkaGFzQ29u
c3RydWN0b3JzID0gMDsKKworICAgICMgR2VuZXJhdGUgcHJvcGVydHkgYWNjZXNzb3JzIGZvciBh
dHRyaWJ1dGVzLgorICAgIGZvciAoJGluZGV4ID0gMDsgJGluZGV4IDwgQHskZGF0YU5vZGUtPmF0
dHJpYnV0ZXN9OyAkaW5kZXgrKykgeworICAgICAgICAkYXR0cmlidXRlID0gQHskZGF0YU5vZGUt
PmF0dHJpYnV0ZXN9WyRpbmRleF07CisgICAgICAgICRhdHRyTmFtZSA9ICRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+bmFtZTsKKyAgICAgICAgJGF0dHJUeXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT50eXBlOworCisgICAgICAgICMgR2VuZXJhdGUgc3BlY2lhbCBjb2RlIGZvciB0aGUgY29uc3Ry
dWN0b3IgYXR0cmlidXRlcy4KKyAgICAgICAgaWYgKCRhdHRyVHlwZSA9fiAvQ29uc3RydWN0b3Ik
LykgeworICAgICAgICAgICAgJGhhc0NvbnN0cnVjdG9ycyA9IDE7CisgICAgICAgICAgICBuZXh0
OworICAgICAgICB9CisKKyAgICAgICAgIyBNYWtlIEV2ZW50TGlzdGVuZXJzIGFsd2F5cyBjdXN0
b20uCisgICAgICAgICMgRklYTUU6IG1ha2UgdGhlIHBlcmwgY29kZSBjYXBhYmxlIG9mIGdlbmVy
YXRpbmcgdGhlCisgICAgICAgICMgICBldmVudCBzZXR0ZXJzL2dldHRlcnMuICBGb3Igbm93LCBX
ZWJLaXQgaGFzIHN0YXJ0ZWQgcmVtb3ZpbmcgdGhlCisgICAgICAgICMgICBbQ3VzdG9tXSBhdHRy
aWJ1dGUsIHNvIGp1c3QgYXV0b21hdGljYWxseSBpbnNlcnQgaXQgdG8gYXZvaWQgZm9ya2luZwor
ICAgICAgICAjICAgb3RoZXIgZmlsZXMuICBUaGlzIHNob3VsZCBiZSBva2F5IGJlY2F1c2Ugd2Ug
Y2FuJ3QgZ2VuZXJhdGUgc3R1YnMKKyAgICAgICAgIyAgIGZvciBhbnkgZXZlbnQgZ2V0dGVyL3Nl
dHRlcnMgYW55d2F5LgorICAgICAgICBpZiAoJGF0dHJUeXBlIGVxICJFdmVudExpc3RlbmVyIikg
eworICAgICAgICAgICAgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tIn0gPSAxOworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhDdXN0b21CaW5k
aW5nLmgifSA9IDE7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgIyBE
byBub3QgZ2VuZXJhdGUgYWNjZXNzb3IgaWYgdGhpcyBpcyBhIGN1c3RvbSBhdHRyaWJ1dGUuICBU
aGUKKyAgICAgICAgIyBjYWxsIHdpbGwgYmUgZm9yd2FyZGVkIHRvIGEgaGFuZC13cml0dGVuIGFj
Y2Vzc29yCisgICAgICAgICMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGlmICgkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSB8fAorICAgICAgICAg
ICAgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhDdXN0b20i
fSkgeworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhDdXN0b21CaW5kaW5nLmgifSA9IDE7
CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgIyBHZW5lcmF0ZSB0aGUg
YWNjZXNzb3IuCisgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDdXN0b21HZXR0ZXIifSkgeworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3si
VjhDdXN0b21CaW5kaW5nLmgifSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisJICAgICAgICBHZW5l
cmF0ZU5vcm1hbEF0dHJHZXR0ZXIoJGF0dHJpYnV0ZSwgJGRhdGFOb2RlLCAkY2xhc3NJbmRleCwg
JGltcGxDbGFzc05hbWUpOworICAgICAgICB9CisgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21TZXR0ZXIifSB8fAorICAgICAgICAg
ICAgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhDdXN0b21T
ZXR0ZXIifSkgeworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhDdXN0b21CaW5kaW5nLmgi
fSA9IDE7CisgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IlJlcGxhY2VhYmxlIn0pIHsKKyAgICAgICAgICAgICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkV4dGVuZHNET01HbG9iYWxPYmplY3QifSB8fCBkaWUgIlJlcGxh
Y2VhYmxlIGF0dHJpYnV0ZSBjYW4gb25seSBiZSB1c2VkIGluIGludGVyZmFjZSB0aGF0IGRlZmlu
ZXMgRXh0ZW5kc0RPTUdsb2JhbE9iamVjdCBhdHRyaWJ1dGUhIjsKKyAgICAgICAgICAgICMgR2Vu
ZXJhdGVSZXBsYWNlYWJsZUF0dHJTZXR0ZXIoJGltcGxDbGFzc05hbWUpOworICAgICAgICB9IGVs
c2lmICgkYXR0cmlidXRlLT50eXBlICF+IC9ecmVhZG9ubHkvICYmICEkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOFJlYWRPbmx5In0pIHsKKyAgICAgICAgICAg
IEdlbmVyYXRlTm9ybWFsQXR0clNldHRlcigkYXR0cmlidXRlLCAkZGF0YU5vZGUsICRjbGFzc0lu
ZGV4LCAkaW1wbENsYXNzTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoJGhhc0Nv
bnN0cnVjdG9ycykgeworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yR2V0dGVyKCRpbXBsQ2xh
c3NOYW1lLCAkY2xhc3NJbmRleCk7CisgICAgfQorCisgICAgIyBHZW5lcmF0ZSBtZXRob2RzIGZv
ciBmdW5jdGlvbnMuCisgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5j
dGlvbnN9KSB7CisgICAgICAgICMgaGFjayBmb3IgYWRkRXZlbnRMaXN0ZW5lci9SZW1vdmVFdmVu
dExpc3RlbmVyCisgICAgICAgICMgRklYTUU6IGF2b2lkIG5hbWluZyBjb25mbGljdAorICAgICAg
ICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20i
fSB8fCBmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhDdXN0b20i
fSkgeworICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4Q3VzdG9tQmluZGluZy5oIn0g
PSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR2VuZXJhdGVGdW5jdGlvbkNhbGxi
YWNrKCRmdW5jdGlvbiwgJGRhdGFOb2RlLCAkY2xhc3NJbmRleCwgJGltcGxDbGFzc05hbWUpOwor
ICAgICAgICB9CisKKyAgICAgICAgIyBJZiB0aGUgZnVuY3Rpb24gZG9lcyBub3QgbmVlZCBkb21h
aW4gc2VjdXJpdHkgY2hlY2ssIHdlIG5lZWQgdG8KKyAgICAgICAgIyBnZW5lcmF0ZSBhbiBhY2Nl
c3MgZ2V0dGVyIHRoYXQgcmV0dXJucyBkaWZmZXJlbnQgZnVuY3Rpb24gb2JqZWN0cworICAgICAg
ICAjIGZvciBkaWZmZXJlbnQgY2FsbGluZyBjb250ZXh0LgorICAgICAgICBpZiAoKCRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrRG9tYWluU2VjdXJpdHkifSB8fCAoJGludGVy
ZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpKSAmJiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hlY2tEb21haW5TZWN1cml0eSJ9KSB7CisgICAgICAgICAg
ICBHZW5lcmF0ZURvbWFpblNhZmVGdW5jdGlvbkdldHRlcigkZnVuY3Rpb24sICRkYXRhTm9kZSwg
JGNsYXNzSW5kZXgsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICMg
QXR0cmlidXRlcworICAgIG15ICRhdHRyaWJ1dGVzID0gJGRhdGFOb2RlLT5hdHRyaWJ1dGVzOwor
CisgICAgIyBGb3IgdGhlIERPTVdpbmRvdyBpbnRlcmZhY2Ugd2UgcGFydGl0aW9uIHRoZSBhdHRy
aWJ1dGVzIGludG8gdGhlCisgICAgIyBvbmVzIHRoYXQgZGlzYWxsb3dzIHNoYWRvd2luZyBhbmQg
dGhlIHJlc3QuCisgICAgbXkgQGRpc2FsbG93c19zaGFkb3dpbmc7CisgICAgbXkgQG5vcm1hbDsK
KyAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAgICAgZm9yZWFj
aCBteSAkYXR0cmlidXRlIChAJGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIGlmICgkYXR0cmli
dXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOERpc2FsbG93U2hhZG93aW5n
In0pIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBkaXNhbGxvd3Nfc2hhZG93aW5nLCAkYXR0cmli
dXRlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAbm9ybWFs
LCAkYXR0cmlidXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAjIFB1dCB0
aGUgYXR0cmlidXRlcyB0aGF0IGRpc2FsbG93IHNoYWRvd2luZyBvbiB0aGUgc2hhZG93IG9iamVj
dC4KKyAgICAgICAgJGF0dHJpYnV0ZXMgPSBcQG5vcm1hbDsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBzaGFkb3dfYXR0cnNbXSA9IHtc
biIpOworICAgICAgICBHZW5lcmF0ZUJhdGNoZWRBdHRyaWJ1dGVEYXRhKCRpbnRlcmZhY2VOYW1l
LCBcQGRpc2FsbG93c19zaGFkb3dpbmcpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn07
XG4iKTsKKyAgICB9CisKKyAgICBteSAkaGFzX2F0dHJpYnV0ZXMgPSAwOworICAgIGlmIChAJGF0
dHJpYnV0ZXMpIHsKKyAgICAgICAgJGhhc19hdHRyaWJ1dGVzID0gMTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBhdHRyc1tdID0ge1xu
Iik7CisgICAgICAgIEdlbmVyYXRlQmF0Y2hlZEF0dHJpYnV0ZURhdGEoJGludGVyZmFjZU5hbWUs
ICRhdHRyaWJ1dGVzKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9O1xuIik7CisgICAg
fQorCisgICAgIyBTZXR1cCBjb25zdGFudHMKKyAgICBteSAkaGFzX2NvbnN0YW50cyA9IDA7Cisg
ICAgaWYgKEB7JGRhdGFOb2RlLT5jb25zdGFudHN9KSB7CisgICAgICAgICRoYXNfY29uc3RhbnRz
ID0gMTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgY29uc3QgQmF0Y2hlZENv
bnN0YW50IGNvbnN0c1tdID0ge1xuIik7CisgICAgfQorICAgIGZvcmVhY2ggbXkgJGNvbnN0YW50
IChAeyRkYXRhTm9kZS0+Y29uc3RhbnRzfSkgeworICAgICAgICBteSAkbmFtZSA9ICRjb25zdGFu
dC0+bmFtZTsKKyAgICAgICAgbXkgJHZhbHVlID0gJGNvbnN0YW50LT52YWx1ZTsKKyAgICAgICAg
IyBGSVhNRTogd2UgbmVlZCB0aGUgc3RhdGljX2Nhc3QgaGVyZSBvbmx5IGJlY2F1c2Ugb2Ygb25l
IGNvbnN0YW50LCBOb2RlRmlsdGVyLmlkbAorICAgICAgICAjIGRlZmluZXMgImNvbnN0IHVuc2ln
bmVkIGxvbmcgU0hPV19BTEwgPSAweEZGRkZGRkZGIi4gIEl0IHdvdWxkIGJlIGJldHRlciBpZiB3
ZQorICAgICAgICAjIGhhbmRsZWQgdGhpcyBoZXJlLCBhbmQgY29udmVydGVkIGl0IHRvIGEgLTEg
Y29uc3RhbnQgaW4gdGhlIGMrKyBvdXRwdXQuCisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8
PEVORCk7CisgIHsgIiR7bmFtZX0iLCBzdGF0aWNfY2FzdDxzaWduZWQgaW50PigkdmFsdWUpIH0s
CitFTkQKKyAgICB9CisgICAgaWYgKCRoYXNfY29uc3RhbnRzKSB7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifTtcbiIpOworICAgIH0KKworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICJ9IC8vIG5hbWVzcGFjZSAke2ludGVyZmFjZU5hbWV9SW50ZXJuYWxcblxuIik7CisKKyAgICBt
eSAkYWNjZXNzX2NoZWNrID0gIi8qIG5vIGFjY2VzcyBjaGVjayAqLyI7CisgICAgaWYgKCRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrRG9tYWluU2VjdXJpdHkifSAmJiAhKCRp
bnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSkgeworICAgICAgICAkYWNjZXNzX2NoZWNrID0g
Imluc3RhbmNlLT5TZXRBY2Nlc3NDaGVja0NhbGxiYWNrcyhWOEN1c3RvbTo6djgke2ludGVyZmFj
ZU5hbWV9TmFtZWRTZWN1cml0eUNoZWNrLCBWOEN1c3RvbTo6djgke2ludGVyZmFjZU5hbWV9SW5k
ZXhlZFNlY3VyaXR5Q2hlY2ssIHY4OjpJbnRlZ2VyOjpOZXcoVjhDbGFzc0luZGV4OjpUb0ludChW
OENsYXNzSW5kZXg6OiR7Y2xhc3NJbmRleH0pKSk7IjsKKyAgICB9CisKKyAgICAjIEZvciB0aGUg
RE9NV2luZG93IGludGVyZmFjZSwgZ2VuZXJhdGUgdGhlIHNoYWRvdyBvYmplY3QgdGVtcGxhdGUK
KyAgICAjIGNvbmZpZ3VyYXRpb24gbWV0aG9kLgorICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAi
RE9NV2luZG93IikgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworc3RhdGlj
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3RUZW1wbGF0ZT4gQ29uZmlndXJlU2hhZG93T2JqZWN0
VGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPiB0ZW1wbCkgeworICBC
YXRjaENvbmZpZ3VyZUF0dHJpYnV0ZXModGVtcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3RUZW1wbGF0ZT4oKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd19hdHRycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihz
aGFkb3dfYXR0cnMpL3NpemVvZigqc2hhZG93X2F0dHJzKSk7CisgIHJldHVybiB0ZW1wbDsKK30K
K0VORAorICAgIH0KKworICAgICMgR2VuZXJhdGUgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24g
bWV0aG9kCisgICAgcHVzaChAaW1wbENvbnRlbnQsICA8PEVORCk7CitzdGF0aWMgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZSR7Y2xhc3NOYW1lfVRlbXBsYXRl
KHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKSB7CisgIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlID0gZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgp
OworICBpbnN0YW5jZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KDIpOworICB2ODo6TG9jYWw8djg6
OlNpZ25hdHVyZT4gZGVmYXVsdF9zaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYyk7
CisgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IHByb3RvID0gZGVzYy0+UHJvdG90eXBl
VGVtcGxhdGUoKTsKKyAgJGFjY2Vzc19jaGVjaworRU5ECisKKworICAgICMgU2V0IHVwIG91ciBh
dHRyaWJ1dGVzIGlmIHdlIGhhdmUgdGhlbQorICAgIGlmICgkaGFzX2F0dHJpYnV0ZXMpIHsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgQmF0Y2hDb25maWd1cmVBdHRyaWJ1
dGVzKGluc3RhbmNlLCBwcm90bywgYXR0cnMsIHNpemVvZihhdHRycykvc2l6ZW9mKCphdHRycykp
OworRU5ECisgICAgfQorCisgICAgIyBEZWZpbmUgb3VyIGZ1bmN0aW9ucyB3aXRoIFNldCgpIG9y
IFNldEFjY2Vzc29yKCkKKyAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1
bmN0aW9uc30pIHsKKyAgICAgICAgbXkgJGF0dHJFeHQgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzOworICAgICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5uYW1lOworCisgICAgICAgIG15ICRwcm9wZXJ0eV9hdHRyaWJ1dGVzID0gInY4OjpEb250
RGVsZXRlIjsKKyAgICAgICAgaWYgKCRhdHRyRXh0LT57IkRvbnRFbnVtIn0pIHsKKyAgICAgICAg
ICAgICRwcm9wZXJ0eV9hdHRyaWJ1dGVzIC49ICJ8djg6OkRvbnRFbnVtIjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoJGF0dHJFeHQtPnsiVjhSZWFkT25seSJ9KSB7CisgICAgICAgICAgICAkcHJv
cGVydHlfYXR0cmlidXRlcyAuPSAifHY4OjpSZWFkT25seSI7CisgICAgICAgIH0KKworICAgICAg
ICBteSAkY29tbWVudEluZm8gPSAiRnVuY3Rpb24gJyRuYW1lJyAoRXh0QXR0cjogJyIgLiBqb2lu
KCcgJywga2V5cygleyRhdHRyRXh0fSkpIC4gIicpIjsKKworICAgICAgICBteSAkdGVtcGxhdGUg
PSAicHJvdG8iOworICAgICAgICBpZiAoJGF0dHJFeHQtPnsiVjhPbkluc3RhbmNlIn0pIHsKKyAg
ICAgICAgICAgICR0ZW1wbGF0ZSA9ICJpbnN0YW5jZSI7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoJGF0dHJFeHQtPnsiRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5In0gJiYKKyAgICAgICAgICAg
ICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja0RvbWFpblNlY3VyaXR5In0g
fHwgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpKSB7CisgICAgICAgICAgICAjIE1hcmsg
dGhlIGFjY2Vzc29yIGFzIFJlYWRPbmx5IGFuZCBzZXQgaXQgb24gdGhlIHByb3RvIG9iamVjdCBz
bworICAgICAgICAgICAgIyBpdCBjYW4gYmUgc2hhZG93ZWQuIFRoaXMgaXMgcmVhbGx5IGEgaGFj
ayB0byBtYWtlIGl0IHdvcmsuCisgICAgICAgICAgICAjIFRoZXJlIGFyZSBzZXZlcmFsIHNjZW5l
cmlhIHRvIGNhbGwgaW50byB0aGUgYWNjZXNzb3I6CisgICAgICAgICAgICAjICAgMSkgZnJvbSB0
aGUgc2FtZSBkb21haW46ICJ3aW5kb3cub3BlbiI6CisgICAgICAgICAgICAjICAgICAgdGhlIGFj
Y2Vzc29yIGZpbmRzIHRoZSBET00gd3JhcHBlciBpbiB0aGUgcHJvdG8gY2hhaW47CisgICAgICAg
ICAgICAjICAgMikgZnJvbSB0aGUgc2FtZSBkb21haW46ICJ3aW5kb3cuX19wcm90b19fLm9wZW4i
OgorICAgICAgICAgICAgIyAgICAgIHRoZSBhY2Nlc3NvciB3aWxsIE5PVCBmaW5kIGEgRE9NIHdy
YXBwZXIgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgorICAgICAgICAgICAgIyAgIDMpIGZyb20gYW5v
dGhlciBkb21haW46ICJ3aW5kb3cub3BlbiI6CisgICAgICAgICAgICAjICAgICAgdGhlIGFjY2Vz
cyBmaW5kIHRoZSBET00gd3JhcHBlciBpbiB0aGUgcHJvdG90eXBlIGNoYWluCisgICAgICAgICAg
ICAjICAgIndpbmRvdy5fX3Byb3RvX18ub3BlbiIgZnJvbSBhbm90aGVyIGRvbWFpbiB3aWxsIGZh
aWwgd2hlbgorICAgICAgICAgICAgIyAgIGFjY2Vzc2luZyAnX19wcm90b19fJworICAgICAgICAg
ICAgIworICAgICAgICAgICAgIyBUaGUgc29sdXRpb24gaXMgdmVyeSBoYWNreSBhbmQgZnJhZ2ls
ZSwgaXQgcmVhbGx5IG5lZWRzIHRvIGJlIHJlcGxhY2VkCisgICAgICAgICAgICAjIGJ5IGEgYmV0
dGVyIHNvbHV0aW9uLgorICAgICAgICAgICAgJHByb3BlcnR5X2F0dHJpYnV0ZXMgLj0gInx2ODo6
UmVhZE9ubHkiOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKworICAv
LyAkY29tbWVudEluZm8KKyAgJHRlbXBsYXRlLT5TZXRBY2Nlc3NvcigKKyAgICAgIHY4OjpTdHJp
bmc6Ok5ldygiJG5hbWUiKSwKKyAgICAgICR7aW50ZXJmYWNlTmFtZX1JbnRlcm5hbDo6JHtuYW1l
fUF0dHJHZXR0ZXIsCisgICAgICAwLAorICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksCisg
ICAgICB2ODo6QUxMX0NBTl9SRUFELAorICAgICAgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0
cmlidXRlPigkcHJvcGVydHlfYXR0cmlidXRlcykpOworRU5ECisgICAgICAgICAgbmV4dDsKKyAg
ICAgIH0KKworICAgICAgbXkgJHNpZ25hdHVyZSA9ICJkZWZhdWx0X3NpZ25hdHVyZSI7CisgICAg
ICBpZiAoJGF0dHJFeHQtPnsiVjhEb05vdENoZWNrU2lnbmF0dXJlIn0peworICAgICAgICAgICRz
aWduYXR1cmUgPSAidjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+KCkiOworICAgICAgfQorCisgICAg
ICBpZiAoUmVxdWlyZXNDdXN0b21TaWduYXR1cmUoJGZ1bmN0aW9uKSkgeworICAgICAgICAgICRz
aWduYXR1cmUgPSAiJHtuYW1lfV9zaWduYXR1cmUiOworICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiXG4gIC8vIEN1c3RvbSBTaWduYXR1cmUgJyRuYW1lJ1xuIiwgQ3JlYXRlQ3VzdG9tU2ln
bmF0dXJlKCRmdW5jdGlvbikpOworICAgICAgfQorCisgICAgICAjIE5vcm1hbCBmdW5jdGlvbiBj
YWxsIGlzIGEgdGVtcGxhdGUKKyAgICAgIG15ICR0ZW1wbGF0ZUZ1bmN0aW9uID0gR2VuZXJhdGVO
ZXdGdW5jdGlvblRlbXBsYXRlKCRmdW5jdGlvbiwgJGRhdGFOb2RlLCAkc2lnbmF0dXJlKTsKKwor
CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworCisgIC8vICRjb21tZW50SW5mbwor
ICAke3RlbXBsYXRlfS0+U2V0KAorICAgICAgdjg6OlN0cmluZzo6TmV3KCIkbmFtZSIpLAorICAg
ICAgJHRlbXBsYXRlRnVuY3Rpb24sCisgICAgICBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KCRwcm9wZXJ0eV9hdHRyaWJ1dGVzKSk7CitFTkQKKyAgICB9CisKKyAgICAjIHNldCB0
aGUgc3VwZXIgZGVzY3JpcHRvcgorICAgIGZvcmVhY2ggKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSkg
eworICAgICAgICBteSAkcGFyZW50ID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRfKTsK
KyAgICAgICAgaWYgKCRwYXJlbnQgZXEgIkV2ZW50VGFyZ2V0IikgeyBuZXh0OyB9CisgICAgICAg
ICRpbXBsSW5jbHVkZXN7IlY4JHtwYXJlbnR9LmgifSA9IDE7CisgICAgICAgIG15ICRwYXJlbnRD
bGFzc0luZGV4ID0gdWMoJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRwYXJlbnQpKTsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgIGRlc2MtPkluaGVyaXQoVjhQcm94eTo6R2V0VGVt
cGxhdGUoVjhDbGFzc0luZGV4Ojoke3BhcmVudENsYXNzSW5kZXh9KSk7XG4iKTsKKyAgICAgICAg
bGFzdDsKKyAgICB9CisKKyAgICAjIFNldCB0aGUgY2xhc3MgbmFtZS4gIFRoaXMgaXMgdXNlZCB3
aGVuIHByaW50aW5nIG9iamVjdHMuCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgIGRlc2MtPlNl
dENsYXNzTmFtZSh2ODo6U3RyaW5nOjpOZXcoXCIiIC4gR2V0Q2xhc3NOYW1lKCR7aW50ZXJmYWNl
TmFtZX0pIC4gIlwiKSk7XG4iKTsKKworICAgIGlmICgkaGFzX2NvbnN0YW50cykgeworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICBCYXRjaENvbmZpZ3VyZUNvbnN0YW50cyhk
ZXNjLCBwcm90bywgY29uc3RzLCBzaXplb2YoY29uc3RzKS9zaXplb2YoKmNvbnN0cykpOworRU5E
CisgICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgcmV0dXJuIGRlc2M7
Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX06
OkdldFJhd1RlbXBsYXRlKCkgeworICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+ICR7Y2xhc3NOYW1lfV9yYXdfY2FjaGVfOworICBpZiAoJHtjbGFzc05hbWV9X3Jh
d19jYWNoZV8uSXNFbXB0eSgpKSB7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcmVzdWx0ID0gdjg6OkZ1bmN0aW9uVGVtcGxh
dGU6Ok5ldyhWOFByb3h5OjpDaGVja05ld0xlZ2FsKTsKKyAgICAke2NsYXNzTmFtZX1fcmF3X2Nh
Y2hlXyA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHJlc3VsdCk7
CisgIH0KKyAgcmV0dXJuICR7Y2xhc3NOYW1lfV9yYXdfY2FjaGVfOworfQorCit2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSgpIHsK
KyAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFt
ZX1fY2FjaGVfOworICBpZiAoJHtjbGFzc05hbWV9X2NhY2hlXy5Jc0VtcHR5KCkpCisgICAgJHtj
bGFzc05hbWV9X2NhY2hlXyA9IENvbmZpZ3VyZSR7Y2xhc3NOYW1lfVRlbXBsYXRlKEdldFJhd1Rl
bXBsYXRlKCkpOworICByZXR1cm4gJHtjbGFzc05hbWV9X2NhY2hlXzsKK30KKworYm9vbCAke2Ns
YXNzTmFtZX06Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkgeworICBy
ZXR1cm4gR2V0UmF3VGVtcGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQorCitFTkQKKwor
ICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgPDxFTkQpOwordjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPiBW
OERPTVdpbmRvdzo6R2V0U2hhZG93T2JqZWN0VGVtcGxhdGUoKSB7CisgIHN0YXRpYyB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0VGVtcGxhdGU+IFY4RE9NV2luZG93U2hhZG93T2JqZWN0X2NhY2hl
XzsKKyAgaWYgKFY4RE9NV2luZG93U2hhZG93T2JqZWN0X2NhY2hlXy5Jc0VtcHR5KCkpIHsKKyAg
ICBWOERPTVdpbmRvd1NoYWRvd09iamVjdF9jYWNoZV8gPSB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0VGVtcGxhdGU+OjpOZXcodjg6Ok9iamVjdFRlbXBsYXRlOjpOZXcoKSk7CisgICAgQ29uZmln
dXJlU2hhZG93T2JqZWN0VGVtcGxhdGUoVjhET01XaW5kb3dTaGFkb3dPYmplY3RfY2FjaGVfKTsK
KyAgfQorICByZXR1cm4gVjhET01XaW5kb3dTaGFkb3dPYmplY3RfY2FjaGVfOworfQorRU5ECisg
ICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKK0VORAorCisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRp
dGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsOworfQorCisKK3N1YiBHZW5lcmF0ZUZ1
bmN0aW9uQ2FsbFN0cmluZygpCit7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CisgICAgbXkg
JG51bWJlck9mUGFyYW1ldGVycyA9IHNoaWZ0OworICAgIG15ICRpbmRlbnQgPSBzaGlmdDsKKyAg
ICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworCisgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+bmFtZTsKKyAgICBteSAkaXNQb2RUeXBlID0gSXNQb2RUeXBlKCRpbXBsQ2xh
c3NOYW1lKTsKKyAgICBteSAkcmV0dXJuVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVs
ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7CisgICAgbXkgJHJldHVybnNQb2RUeXBlID0g
SXNQb2RUeXBlKCRyZXR1cm5UeXBlKTsKKyAgICBteSAkbmF0aXZlUmV0dXJuVHlwZSA9IEdldE5h
dGl2ZVR5cGUoJHJldHVyblR5cGUsIDApOworICAgIG15ICRyZXN1bHQgPSAiIjsKKworICAgICMg
U3BlY2lhbCBjYXNlOiBTVkcgbWF0cml4IHRyYW5zZm9ybSBtZXRob2RzIHNob3VsZCBub3QgbXV0
YXRlCisgICAgIyB0aGUgbWF0cml4IGJ1dCByZXR1cm4gYSBjb3B5CisgICAgbXkgJGNvcHlGaXJz
dCA9IDA7CisgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJTVkdNYXRyaXgiICYmICRmdW5jdGlv
bi0+c2lnbmF0dXJlLT50eXBlIGVxICJTVkdNYXRyaXgiKSB7CisgICAgICAgICRjb3B5Rmlyc3Qg
PSAxOworICAgIH0KKworICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57InY4aW1wbG5hbWUifSkgeworICAgICAgICAkbmFtZSA9ICRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsidjhpbXBsbmFtZSJ9OworICAgIH0KKworICAg
IGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVu
dGF0aW9uRnVuY3Rpb24ifSkgeworICAgICAgICAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50YXRpb25GdW5jdGlvbiJ9OworICAgIH0K
KworICAgIG15ICRmdW5jdGlvblN0cmluZyA9ICJpbXAtPiR7bmFtZX0oIjsKKworICAgIGlmICgk
Y29weUZpcnN0KSB7CisgICAgICAgICRmdW5jdGlvblN0cmluZyA9ICJyZXN1bHQuJHtuYW1lfSgi
OworICAgIH0KKworICAgIG15ICRyZXR1cm5zTGlzdEl0ZW1Qb2RUeXBlID0gMDsKKyAgICAjIFNW
RyBsaXN0cyBmdW5jdGlvbnMgdGhhdCByZXR1cm4gUE9EIHR5cGVzIHJlcXVpcmUgc3BlY2lhbCBo
YW5kbGluZworICAgIGlmIChJc1NWR0xpc3RUeXBlTmVlZGluZ1NwZWNpYWxIYW5kbGluZygkaW1w
bENsYXNzTmFtZSkgJiYgSXNTVkdMaXN0TWV0aG9kKCRuYW1lKSAmJiAkcmV0dXJuc1BvZFR5cGUp
IHsKKyAgICAgICAgJHJldHVybnNMaXN0SXRlbVBvZFR5cGUgPSAxOworICAgICAgICAkcmVzdWx0
IC49ICRpbmRlbnQgLiAiU1ZHTGlzdDxSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08JG5hdGl2ZVJldHVy
blR5cGU+ID4gPiogbGlzdEltcCA9IGltcDtcbiI7CisgICAgICAgICRmdW5jdGlvblN0cmluZyA9
ICJsaXN0SW1wLT4ke25hbWV9KCI7CisgICAgfQorCisgICAgbXkgJGZpcnN0ID0gMTsKKyAgICBt
eSAkaW5kZXggPSAwOworICAgIG15ICRub2RlVG9SZXR1cm4gPSAwOworCisgICAgZm9yZWFjaCBt
eSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgaWYgKCRp
bmRleCBlcSAkbnVtYmVyT2ZQYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICBsYXN0OworICAgICAg
ICB9CisgICAgICAgIGlmICgkZmlyc3QpIHsgJGZpcnN0ID0gMDsgfQorICAgICAgICBlbHNlIHsg
JGZ1bmN0aW9uU3RyaW5nIC49ICIsICI7IH0KKyAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJh
bWV0ZXItPm5hbWU7CisgICAgICAgIG15ICRwYXJhbVR5cGUgPSAkcGFyYW1ldGVyLT50eXBlOwor
CisgICAgICAgICMgVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suLi4gd2UgbmVlZCB0byBjb252ZXJ0
IHBhcmFtZXRlcnMgdG8gbWV0aG9kcyBvbiBTVkcgbGlzdHMKKyAgICAgICAgIyBvZiBQT0QgdHlw
ZXMgd2hpY2ggYXJlIGl0ZW1zIGluIHRoZSBsaXN0IHRvIGFwcHJvcHJpYXRlIFNWR0xpc3Q8PiBp
bnN0YW5jZXMKKyAgICAgICAgaWYgKCRyZXR1cm5zTGlzdEl0ZW1Qb2RUeXBlICYmICRwYXJhbVR5
cGUgLiAiTGlzdCIgZXEgJGltcGxDbGFzc05hbWUpIHsKKyAgICAgICAgICAgICRwYXJhbU5hbWUg
PSAiU1ZHUE9ETGlzdEl0ZW08IiAuIEdldE5hdGl2ZVR5cGUoJHBhcmFtVHlwZSwgMSkgLiAiPjo6
Y29weSgkcGFyYW1OYW1lKSI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoJHBhcmFtZXRlci0+
dHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKKyAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAi
JHBhcmFtTmFtZS5nZXQoKSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkZnVuY3Rp
b25TdHJpbmcgLj0gJHBhcmFtTmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkcGFyYW1l
dGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmV0dXJuIn0pIHsKKyAgICAgICAgICAgICRub2Rl
VG9SZXR1cm4gPSAkcGFyYW1ldGVyLT5uYW1lOworICAgICAgICB9CisgICAgICAgICRpbmRleCsr
OworICAgIH0KKworICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmcifSkgeworICAgICAgICAkZnVuY3Rpb25TdHJp
bmcgLj0gIiwgIiBpZiBub3QgJGZpcnN0OworICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIiZj
YWxsU3RhY2siOworICAgICAgICBpZiAoJGZpcnN0KSB7ICRmaXJzdCA9IDA7IH0KKyAgICB9CisK
KyAgICBpZiAoQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9KSB7CisgICAgICAgICRmdW5j
dGlvblN0cmluZyAuPSAiLCAiIGlmIG5vdCAkZmlyc3Q7CisgICAgICAgICRmdW5jdGlvblN0cmlu
ZyAuPSAiZWMiOworICAgIH0KKyAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIikiOworCisgICAgaWYg
KChJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpIHx8ICRyZXR1cm5zTGlzdEl0ZW1Qb2RUeXBlKSAm
JiAhJG5vZGVUb1JldHVybikgeworICAgICAgICAjIFdlIGRvbid0IHVzZSBnZXRQdHIgd2hlbiAk
bm9kZVRvUmV0dXJuIGJlY2F1c2UgdGhhdCBzaXR1YXRpb24gaXMKKyAgICAgICAgIyBzcGVjaWFs
LWNhc2VkIGJlbG93IHRvIHJldHVybiBhIGJvb2wuCisgICAgICAgICRpbXBsSW5jbHVkZXN7Ind0
Zi9HZXRQdHIuaCJ9ID0gMTsKKyAgICAgICAgJGZ1bmN0aW9uU3RyaW5nID0gIldURjo6Z2V0UHRy
KCIgLiAkZnVuY3Rpb25TdHJpbmcgLiAiKSI7CisgICAgfQorCisgICAgaWYgKCRub2RlVG9SZXR1
cm4pIHsKKyAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIGluc2VydEJlZm9yZSwgcmVwbGFjZUNo
aWxkLCByZW1vdmVDaGlsZCBhbmQKKyAgICAgICAgIyBhcHBlbmRDaGlsZCBmdW5jdGlvbnMgZnJv
bSBOb2RlLgorICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiYm9vbCBzdWNjZXNzID0gJGZ1
bmN0aW9uU3RyaW5nO1xuIjsKKyAgICAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRp
b25zfSkgeworICAgICAgICAgICAgJHJlc3VsdCAuPSBHZW5lcmF0ZVNldERPTUV4Y2VwdGlvbigk
aW5kZW50KTsKKyAgICAgICAgfQorICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiaWYgKHN1
Y2Nlc3MpXG4iOworICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiICAgICIgLgorICAgICAg
ICAgICAgInJldHVybiBWOFByb3h5OjpOb2RlVG9WOE9iamVjdCgkbm9kZVRvUmV0dXJuKTtcbiI7
CisgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4gdjg6Ok51bGwoKTtcbiI7Cisg
ICAgICAgIHJldHVybiAkcmVzdWx0OworICAgIH0gZWxzaWYgKCRyZXR1cm5UeXBlIGVxICJ2b2lk
IikgeworICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiJGZ1bmN0aW9uU3RyaW5nO1xuIjsK
KyAgICB9IGVsc2lmICgkY29weUZpcnN0KSB7CisgICAgICAgICRyZXN1bHQgLj0KKyAgICAgICAg
ICAgICRpbmRlbnQgLiBHZXROYXRpdmVUeXBlKCRyZXR1cm5UeXBlLCAwKSAuICIgcmVzdWx0ID0g
KmltcDtcbiIgLgorICAgICAgICAgICAgJGluZGVudCAuICIkZnVuY3Rpb25TdHJpbmc7XG4iOwor
ICAgIH0gZWxzaWYgKCRyZXR1cm5zTGlzdEl0ZW1Qb2RUeXBlKSB7CisgICAgICAgICRyZXN1bHQg
Lj0gJGluZGVudCAuICJSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08JG5hdGl2ZVJldHVyblR5cGU+ID4g
cmVzdWx0ID0gJGZ1bmN0aW9uU3RyaW5nO1xuIjsKKyAgICB9IGVsc2UgeworICAgICAgICAkcmVz
dWx0IC49ICRpbmRlbnQgLiAkbmF0aXZlUmV0dXJuVHlwZSAuICIgcmVzdWx0ID0gJGZ1bmN0aW9u
U3RyaW5nO1xuIjsKKyAgICB9CisKKyAgICBpZiAoQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlv
bnN9KSB7CisgICAgICAgICRyZXN1bHQgLj0gR2VuZXJhdGVTZXRET01FeGNlcHRpb24oJGluZGVu
dCk7CisgICAgfQorCisgICAgbXkgJHJldHVybiA9ICJyZXN1bHQiOworICAgIGlmIChJc1JlZlB0
clR5cGUoJHJldHVyblR5cGUpIHx8ICRyZXR1cm5zTGlzdEl0ZW1Qb2RUeXBlKSB7CisgICAgICAg
ICRpbXBsSW5jbHVkZXN7Ind0Zi9HZXRQdHIuaCJ9ID0gMTsKKyAgICAgICAgJHJldHVybiA9ICJX
VEY6OmdldFB0cigiIC4gJHJldHVybiAuICIpIjsKKyAgICB9CisKKyAgICAjIElmIHRoZSByZXR1
cm4gdHlwZSBpcyBhIFBPRCB0eXBlLCBzZXBhcmF0ZSBvdXQgdGhlIHdyYXBwZXIgZ2VuZXJhdGlv
bgorICAgIGlmICgkcmV0dXJuc0xpc3RJdGVtUG9kVHlwZSkgeworICAgICAgICAkcmVzdWx0IC49
ICRpbmRlbnQgLiAiVjhTVkdQT0RUeXBlV3JhcHBlcjwiIC4gJG5hdGl2ZVJldHVyblR5cGUgLiAi
Piogd3JhcHBlciA9IG5ldyAiOworICAgICAgICAkcmVzdWx0IC49ICJWOFNWR1BPRFR5cGVXcmFw
cGVyQ3JlYXRvckZvckxpc3Q8IiAuICRuYXRpdmVSZXR1cm5UeXBlIC4gIj4oJHJldHVybiwgaW1w
LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTtcbiI7CisgICAgICAgICRyZXR1cm4gPSAid3Jh
cHBlciI7CisgICAgfSBlbHNpZiAoJHJldHVybnNQb2RUeXBlKSB7CisgICAgICAgICRyZXN1bHQg
Lj0gJGluZGVudCAuICJWOFNWR1BPRFR5cGVXcmFwcGVyPCIgLiAkbmF0aXZlUmV0dXJuVHlwZSAu
ICI+KiB3cmFwcGVyID0gIjsKKyAgICAgICAgJHJlc3VsdCAuPSBHZW5lcmF0ZVNWR1N0YXRpY1Bv
ZFR5cGVXcmFwcGVyKCRyZXR1cm5UeXBlLCAkcmV0dXJuKSAuICI7XG4iOworICAgICAgICAkcmV0
dXJuID0gIndyYXBwZXIiOworICAgIH0KKworICAgIG15ICRnZW5lcmF0ZWRTVkdDb250ZXh0UmV0
cmlldmFsID0gMDsKKyAgICAjIElmIHRoZSByZXR1cm4gdHlwZSBuZWVkcyBhbiBTVkcgY29udGV4
dCwgb3V0cHV0IGl0CisgICAgaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRy
ZXR1cm5UeXBlKSkgeworICAgICAgICAkcmVzdWx0IC49IEdlbmVyYXRlU1ZHQ29udGV4dEFzc2ln
bm1lbnQoJGltcGxDbGFzc05hbWUsICRyZXR1cm4sICRpbmRlbnQpOworICAgICAgICAkZ2VuZXJh
dGVkU1ZHQ29udGV4dFJldHJpZXZhbCA9IDE7CisgICAgfQorCisgICAgaWYgKElzU1ZHVHlwZU5l
ZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSAmJiAkaW1wbENsYXNzTmFtZSA9
fiAvTGlzdCQvICYmIElzU1ZHTGlzdE11dGF0b3IoJG5hbWUpKSB7CisgICAgICAgIGlmICghJGdl
bmVyYXRlZFNWR0NvbnRleHRSZXRyaWV2YWwpIHsKKyAgICAgICAgICAgICRyZXN1bHQgLj0gR2Vu
ZXJhdGVTVkdDb250ZXh0UmV0cmlldmFsKCRpbXBsQ2xhc3NOYW1lLCAkaW5kZW50KTsKKyAgICAg
ICAgICAgICRnZW5lcmF0ZWRTVkdDb250ZXh0UmV0cmlldmFsID0gMTsKKyAgICAgICAgfQorCisg
ICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJjb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7XG4iOworICAgICAgICAkaW1wbEluY2x1
ZGVzeyJTVkdFbGVtZW50LmgifSA9IDE7CisgICAgfQorCisgICAgIyBJZiB0aGUgaW1wbGVtZW50
aW5nIGNsYXNzIGlzIGEgUE9EIHR5cGUsIGNvbW1pdCBjaGFuZ2VzCisgICAgaWYgKCRpc1BvZFR5
cGUpIHsKKyAgICAgICAgaWYgKCEkZ2VuZXJhdGVkU1ZHQ29udGV4dFJldHJpZXZhbCkgeworICAg
ICAgICAgICAgJHJlc3VsdCAuPSBHZW5lcmF0ZVNWR0NvbnRleHRSZXRyaWV2YWwoJGltcGxDbGFz
c05hbWUsICRpbmRlbnQpOworICAgICAgICAgICAgJGdlbmVyYXRlZFNWR0NvbnRleHRSZXRyaWV2
YWwgPSAxOworICAgICAgICB9CisKKyAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImltcF93
cmFwcGVyLT5jb21taXRDaGFuZ2UoaW1wX2luc3RhbmNlLCBjb250ZXh0KTtcbiI7CisgICAgfQor
CisgICAgaWYgKCRyZXR1cm5zUG9kVHlwZSkgeworICAgICAgICBteSAkY2xhc3NJbmRleCA9IHVj
KCRyZXR1cm5UeXBlKTsKKyAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVybiBWOFBy
b3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIHdyYXBwZXIpO1xuIjsK
KyAgICB9IGVsc2UgeworICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJuICIgLiBO
YXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4pIC4gIjtcbiI7Cisg
ICAgfQorCisgICAgcmV0dXJuICRyZXN1bHQ7Cit9CisKKworIyBHZXQgdGhlIGNsYXNzIG5hbWUg
dXNlZCBmb3IgcHJpbnRpbmcgamF2YXNjcmlwdCBET00tb2JqZWN0IHdyYXBwZXJzLgorc3ViIEdl
dENsYXNzTmFtZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuICJIVE1MQ29s
bGVjdGlvbiIgaWYgJHR5cGUgZXEgIlVuZGV0ZWN0YWJsZUhUTUxDb2xsZWN0aW9uIjsKKyAgICBy
ZXR1cm4gJHR5cGU7Cit9CisKKworc3ViIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlCit7Cisg
ICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OworICAgIG15ICRpc1BhcmFtZXRlciA9IHNoaWZ0Owor
CisgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+
dHlwZSk7CisKKyAgICByZXR1cm4gR2V0TmF0aXZlVHlwZSgkdHlwZSwgJGlzUGFyYW1ldGVyKTsK
K30KKworc3ViIElzUmVmUHRyVHlwZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0
dXJuIDEgaWYgJHR5cGUgZXEgIkF0dHIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52
YXNHcmFkaWVudCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNsaWVudFJlY3QiOworICAg
IHJldHVybiAxIGlmICR0eXBlIGVxICJDbGllbnRSZWN0TGlzdCI7CisgICAgcmV0dXJuIDEgaWYg
JHR5cGUgZXEgIkNEQVRBU2VjdGlvbiI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNvbW1l
bnQiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDU1NSdWxlIjsKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAiQ1NTU3R5bGVSdWxlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ1NT
Q2hhcnNldFJ1bGUiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDU1NJbXBvcnRSdWxlIjsK
KyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ1NTTWVkaWFSdWxlIjsKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAiQ1NTRm9udEZhY2VSdWxlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
Q1NTUGFnZVJ1bGUiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDU1NQcmltaXRpdmVWYWx1
ZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNTU1N0eWxlU2hlZXQiOworICAgIHJldHVy
biAxIGlmICR0eXBlIGVxICJDU1NTdHlsZURlY2xhcmF0aW9uIjsKKyAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiQ1NTVmFsdWUiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDU1NSdWxlTGlz
dCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkRhdGFiYXNlIjsKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAiRG9jdW1lbnQiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJEb2N1bWVu
dEZyYWdtZW50IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRG9jdW1lbnRUeXBlIjsKKyAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRWxlbWVudCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUg
ZXEgIkVudGl0eVJlZmVyZW5jZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkV2ZW50IjsK
KyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiSFRNTENvbGxlY3Rpb24iOworICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJIVE1MRG9jdW1lbnQiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJI
VE1MRWxlbWVudCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkhUTUxPcHRpb25zQ29sbGVj
dGlvbiI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkltYWdlRGF0YSI7CisgICAgcmV0dXJu
IDEgaWYgJHR5cGUgZXEgIk1lZGlhRXJyb3IiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJN
aW1lVHlwZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIk5vZGUiOworICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJOb2RlTGlzdCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIk5vZGVG
aWx0ZXIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJOb2RlSXRlcmF0b3IiOworICAgIHJl
dHVybiAxIGlmICR0eXBlIGVxICJOU1Jlc29sdmVyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBl
cSAiUGx1Z2luIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiUHJvY2Vzc2luZ0luc3RydWN0
aW9uIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiUmFuZ2UiOworICAgIHJldHVybiAxIGlm
ICR0eXBlIGVxICJUZXh0IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiVGV4dE1ldHJpY3Mi
OworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJUaW1lUmFuZ2VzIjsKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAiVHJlZVdhbGtlciI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYktp
dENTU01hdHJpeCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYktpdFBvaW50IjsKKyAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiWFBhdGhFeHByZXNzaW9uIjsKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAiWFBhdGhOU1Jlc29sdmVyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
WFBhdGhSZXN1bHQiOworCisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlNWR0FuZ2xlIjsKKyAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIjsKKyAgICByZXR1cm4g
MSBpZiAkdHlwZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlTGlzdCI7CisgICAgcmV0dXJuIDEgaWYg
JHR5cGUgPX4gL15TVkdQYXRoU2VnLzsKKworICAgIHJldHVybiAxIGlmICR0eXBlID1+IC9eU1ZH
QW5pbWF0ZWQvOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBJc1ZpZGVvQ2xhc3NOYW1lCit7
CisgICAgbXkgJGNsYXNzID0gc2hpZnQ7CisgICAgcmV0dXJuIDEgaWYgJGNsYXNzIGVxICJWOEhU
TUxBdWRpb0VsZW1lbnQiOworICAgIHJldHVybiAxIGlmICRjbGFzcyBlcSAiVjhIVE1MTWVkaWFF
bGVtZW50IjsKKyAgICByZXR1cm4gMSBpZiAkY2xhc3MgZXEgIlY4SFRNTFNvdXJjZUVsZW1lbnQi
OworICAgIHJldHVybiAxIGlmICRjbGFzcyBlcSAiVjhIVE1MVmlkZW9FbGVtZW50IjsKKyAgICBy
ZXR1cm4gMSBpZiAkY2xhc3MgZXEgIlY4TWVkaWFFcnJvciI7CisgICAgcmV0dXJuIDEgaWYgJGNs
YXNzIGVxICJWOFRpbWVSYW5nZXMiOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBJc1dvcmtl
ckNsYXNzTmFtZQoreworICAgIG15ICRjbGFzcyA9IHNoaWZ0OworICAgIHJldHVybiAxIGlmICRj
bGFzcyBlcSAiVjhXb3JrZXIiOworICAgIHJldHVybiAxIGlmICRjbGFzcyBlcSAiVjhXb3JrZXJD
b250ZXh0IjsKKyAgICByZXR1cm4gMSBpZiAkY2xhc3MgZXEgIlY4V29ya2VyTG9jYXRpb24iOwor
ICAgIHJldHVybiAxIGlmICRjbGFzcyBlcSAiVjhXb3JrZXJOYXZpZ2F0b3IiOworCisgICAgcmV0
dXJuIDA7Cit9CisKK3N1YiBHZXROYXRpdmVUeXBlCit7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsK
KyAgICBteSAkaXNQYXJhbWV0ZXIgPSBzaGlmdDsKKworICAgIGlmICgkdHlwZSBlcSAiZmxvYXQi
IG9yICR0eXBlIGVxICJBdG9taWNTdHJpbmciIG9yICR0eXBlIGVxICJkb3VibGUiKSB7CisgICAg
ICAgIHJldHVybiAkdHlwZTsKKyAgICB9CisKKyAgICByZXR1cm4gImludCIgaWYgJHR5cGUgZXEg
ImludCI7CisgICAgcmV0dXJuICJpbnQiIGlmICR0eXBlIGVxICJzaG9ydCIgb3IgJHR5cGUgZXEg
InVuc2lnbmVkIHNob3J0IjsKKyAgICByZXR1cm4gImludCIgaWYgJHR5cGUgZXEgImxvbmciIG9y
ICR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIjsKKyAgICByZXR1cm4gInVuc2lnbmVkIGxvbmcgbG9u
ZyIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmcgbG9uZyI7CisgICAgcmV0dXJuICJib29sIiBp
ZiAkdHlwZSBlcSAiYm9vbGVhbiI7CisgICAgcmV0dXJuICJTdHJpbmciIGlmICR0eXBlIGVxICJE
T01TdHJpbmciOworICAgIHJldHVybiAiUmFuZ2U6OkNvbXBhcmVIb3ciIGlmICR0eXBlIGVxICJD
b21wYXJlSG93IjsKKyAgICByZXR1cm4gIkZsb2F0UmVjdCIgaWYgJHR5cGUgZXEgIlNWR1JlY3Qi
OworICAgIHJldHVybiAiRmxvYXRQb2ludCIgaWYgJHR5cGUgZXEgIlNWR1BvaW50IjsKKyAgICBy
ZXR1cm4gIlRyYW5zZm9ybWF0aW9uTWF0cml4IiBpZiAkdHlwZSBlcSAiU1ZHTWF0cml4IjsKKyAg
ICByZXR1cm4gIlNWR1RyYW5zZm9ybSIgaWYgJHR5cGUgZXEgIlNWR1RyYW5zZm9ybSI7CisgICAg
cmV0dXJuICJTVkdMZW5ndGgiIGlmICR0eXBlIGVxICJTVkdMZW5ndGgiOworICAgIHJldHVybiAi
ZG91YmxlIiBpZiAkdHlwZSBlcSAiU1ZHTnVtYmVyIjsKKyAgICByZXR1cm4gIlNWR1BhaW50OjpT
VkdQYWludFR5cGUiIGlmICR0eXBlIGVxICJTVkdQYWludFR5cGUiOworICAgIHJldHVybiAiRE9N
VGltZVN0YW1wIiBpZiAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIjsKKyAgICByZXR1cm4gInVuc2ln
bmVkIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgaW50IjsKKyAgICByZXR1cm4gInVuc2lnbmVkIiBp
ZiAkdHlwZSBlcSAiUkdCQ29sb3IiOworICAgIHJldHVybiAiTm9kZSoiIGlmICR0eXBlIGVxICJF
dmVudFRhcmdldCIgYW5kICRpc1BhcmFtZXRlcjsKKworICAgIHJldHVybiAiU3RyaW5nIiBpZiAk
dHlwZSBlcSAiRE9NVXNlckRhdGEiOyAgIyBGSVhNRTogVGVtcG9yYXJ5IGhhY2s/CisKKyAgICAj
IHRlbXBvcmFyeSBoYWNrCisgICAgcmV0dXJuICJSZWZQdHI8Tm9kZUZpbHRlcj4iIGlmICR0eXBl
IGVxICJOb2RlRmlsdGVyIjsKKworICAgIHJldHVybiAiUmVmUHRyPCR7dHlwZX0+IiBpZiBJc1Jl
ZlB0clR5cGUoJHR5cGUpIGFuZCBub3QgJGlzUGFyYW1ldGVyOworCisgICAgIyBEZWZhdWx0LCBh
c3N1bWUgbmF0aXZlIHR5cGUgaXMgYSBwb2ludGVyIHdpdGggc2FtZSB0eXBlIG5hbWUgYXMgaWRs
IHR5cGUKKyAgICByZXR1cm4gIiR7dHlwZX0qIjsKK30KKworCitteSAldHlwZUNhbkZhaWxDb252
ZXJzaW9uID0gKAorICAgICJBdG9taWNTdHJpbmciID0+IDAsCisgICAgIkF0dHIiID0+IDEsCisg
ICAgIkNvbXBhcmVIb3ciID0+IDAsCisgICAgIkRPTVN0cmluZyIgPT4gMCwKKyAgICAiRE9NV2lu
ZG93IiA9PiAwLAorICAgICJEb2N1bWVudFR5cGUiID0+IDAsCisgICAgIkVsZW1lbnQiID0+IDAs
CisgICAgIkV2ZW50IiA9PiAwLAorICAgICJFdmVudExpc3RlbmVyIiA9PiAwLAorICAgICJFdmVu
dFRhcmdldCIgPT4gMCwKKyAgICAiSFRNTEVsZW1lbnQiID0+IDAsCisgICAgIkhUTUxPcHRpb25F
bGVtZW50IiA9PiAwLAorICAgICJOb2RlIiA9PiAwLAorICAgICJOb2RlRmlsdGVyIiA9PiAwLAor
ICAgICJNZXNzYWdlUG9ydCIgPT4gMCwKKyAgICAiTlNSZXNvbHZlciIgPT4gMCwKKyAgICAiUmFu
Z2UiID0+IDAsCisgICAgIlNRTFJlc3VsdFNldCIgPT4gMCwKKyAgICAiU3RvcmFnZSIgPT4gMCwK
KyAgICAiU1ZHQW5nbGUiID0+IDAsCisgICAgIlNWR0VsZW1lbnQiID0+IDAsCisgICAgIlNWR0xl
bmd0aCIgPT4gMSwKKyAgICAiU1ZHTWF0cml4IiA9PiAxLAorICAgICJTVkdOdW1iZXIiID0+IDAs
CisgICAgIlNWR1BhaW50VHlwZSIgPT4gMCwKKyAgICAiU1ZHUGF0aFNlZyIgPT4gMCwKKyAgICAi
U1ZHUG9pbnQiID0+IDEsCisgICAgIlNWR1JlY3QiID0+IDEsCisgICAgIlNWR1RyYW5zZm9ybSIg
PT4gMSwKKyAgICAiVm9pZENhbGxiYWNrIiA9PiAxLAorICAgICJXZWJLaXRDU1NNYXRyaXgiID0+
IDAsCisgICAgIldlYktpdFBvaW50IiA9PiAwLAorICAgICJYUGF0aEV2YWx1YXRvciIgPT4gMCwK
KyAgICAiWFBhdGhOU1Jlc29sdmVyIiA9PiAwLAorICAgICJYUGF0aFJlc3VsdCIgPT4gMCwKKyAg
ICAiYm9vbGVhbiIgPT4gMCwKKyAgICAiZG91YmxlIiA9PiAwLAorICAgICJmbG9hdCIgPT4gMCwK
KyAgICAibG9uZyIgPT4gMCwKKyAgICAidW5zaWduZWQgbG9uZyIgPT4gMCwKKyAgICAidW5zaWdu
ZWQgc2hvcnQiID0+IDAsCispOworCisKK3N1YiBUcmFuc2xhdGVQYXJhbWV0ZXIKK3sKKyAgICBt
eSAkc2lnbmF0dXJlID0gc2hpZnQ7CisKKyAgICAjIFRoZSBJREwgdXNlcyBzb21lIHBzZXVkby10
eXBlcyB3aGljaCBkb24ndCByZWFsbHkgZXhpc3QuCisgICAgaWYgKCRzaWduYXR1cmUtPnR5cGUg
ZXEgIlRpbWVvdXRIYW5kbGVyIikgeworICAgICAgJHNpZ25hdHVyZS0+dHlwZSgiRE9NU3RyaW5n
Iik7CisgICAgfQorfQorCitzdWIgQmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24KK3sKKyAgICBt
eSAkc2lnbmF0dXJlID0gc2hpZnQ7CisgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3Ry
aXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
U1ZHTGVuZ3RoIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHTWF0cml4IjsKKyAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHUG9pbnQiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVx
ICJTVkdSZWN0IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHVHJhbnNmb3JtIjsKKyAg
ICByZXR1cm4gMDsKK30KKworc3ViIFR5cGVDYW5GYWlsQ29udmVyc2lvbgoreworICAgIG15ICRz
aWduYXR1cmUgPSBzaGlmdDsKKworICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlw
TW9kdWxlKCRzaWduYXR1cmUtPnR5cGUpOworCisgICAgJGltcGxJbmNsdWRlc3siRXhjZXB0aW9u
Q29kZS5oIn0gPSAxIGlmICR0eXBlIGVxICJBdHRyIjsKKworICAgIHJldHVybiAkdHlwZUNhbkZh
aWxDb252ZXJzaW9ueyR0eXBlfSBpZiBleGlzdHMgJHR5cGVDYW5GYWlsQ29udmVyc2lvbnskdHlw
ZX07CisKKyAgICBkaWUgIkRvbid0IGtub3cgd2hldGhlciBhIEpTIHZhbHVlIGNhbiBmYWlsIGNv
bnZlcnNpb24gdG8gdHlwZSAkdHlwZS4iOworfQorCitzdWIgSlNWYWx1ZVRvTmF0aXZlCit7Cisg
ICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OworICAgIG15ICR2YWx1ZSA9IHNoaWZ0OworICAgIG15
ICRva1BhcmFtID0gc2hpZnQ7CisgICAgbXkgJG1heWJlT2tQYXJhbSA9ICRva1BhcmFtID8gIiwg
JHtva1BhcmFtfSIgOiAiIjsKKworICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlw
TW9kdWxlKCRzaWduYXR1cmUtPnR5cGUpOworCisgICAgcmV0dXJuICIkdmFsdWUiIGlmICR0eXBl
IGVxICJKU09iamVjdCI7CisgICAgcmV0dXJuICIkdmFsdWUtPkJvb2xlYW5WYWx1ZSgpIiBpZiAk
dHlwZSBlcSAiYm9vbGVhbiI7CisgICAgcmV0dXJuICJzdGF0aWNfY2FzdDwkdHlwZT4oJHZhbHVl
LT5OdW1iZXJWYWx1ZSgpKSIgaWYgJHR5cGUgZXEgImZsb2F0IiBvciAkdHlwZSBlcSAiZG91Ymxl
IjsKKyAgICByZXR1cm4gIiR2YWx1ZS0+TnVtYmVyVmFsdWUoKSIgaWYgJHR5cGUgZXEgIlNWR051
bWJlciI7CisKKyAgICByZXR1cm4gIlRvSW50MzIoJHZhbHVlJHttYXliZU9rUGFyYW19KSIgaWYg
JHR5cGUgZXEgInVuc2lnbmVkIGxvbmciIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIgb3Ig
JHR5cGUgZXEgImxvbmciOworICAgIHJldHVybiAic3RhdGljX2Nhc3Q8UmFuZ2U6OkNvbXBhcmVI
b3c+KCR2YWx1ZS0+SW50MzJWYWx1ZSgpKSIgaWYgJHR5cGUgZXEgIkNvbXBhcmVIb3ciOworICAg
IHJldHVybiAic3RhdGljX2Nhc3Q8U1ZHUGFpbnQ6OlNWR1BhaW50VHlwZT4oJHZhbHVlLT5Ub0lu
dDMyKCktPkludDMyVmFsdWUoKSkiIGlmICR0eXBlIGVxICJTVkdQYWludFR5cGUiOworCisgICAg
cmV0dXJuICJUb1dlYkNvcmVTdHJpbmcoJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkF0b21pY1N0cmlu
ZyIgb3IgJHR5cGUgZXEgIkRPTVVzZXJEYXRhIjsKKyAgICBpZiAoJHR5cGUgZXEgIkRPTVN0cmlu
ZyIpIHsKKyAgICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjaygkdmFsdWUp
IiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxUb051bGxT
dHJpbmcifTsKKyAgICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5nV2l0aE51bGxPclVuZGVmaW5l
ZENoZWNrKCR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252
ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nIn07CisgICAgICAgIHJldHVybiAiVG9XZWJD
b3JlU3RyaW5nKCR2YWx1ZSkiOworICAgIH0KKworICAgIGlmICgkdHlwZSBlcSAiTm9kZUZpbHRl
ciIpIHsKKyAgICAgICAgcmV0dXJuICJWOFByb3h5OjpUb05hdGl2ZU5vZGVGaWx0ZXIoJHZhbHVl
KSI7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJTVkdSZWN0IikgeworICAgICAgICAkaW1w
bEluY2x1ZGVzeyJGbG9hdFJlY3QuaCJ9ID0gMTsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEg
IlNWR1BvaW50IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJGbG9hdFBvaW50LmgifSA9IDE7
CisgICAgfQorCisgICAgIyBEZWZhdWx0LCBhc3N1bWUgYXV0b2dlbmVyYXRlZCB0eXBlIGNvbnZl
cnNpb24gcm91dGluZXMKKyAgICAkaW1wbEluY2x1ZGVzeyJ2OF9wcm94eS5oIn0gPSAxOworICAg
IGlmICgkdHlwZSBlcSAiRXZlbnRUYXJnZXQiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4
Tm9kZS5oIn0gPSAxOworCisgICAgICAgICMgRXZlbnRUYXJnZXQgaXMgbm90IGluIERPTSBoaWVy
YXJjaHksIGJ1dCBhbGwgTm9kZXMgYXJlIEV2ZW50VGFyZ2V0LgorICAgICAgICByZXR1cm4gIlY4
Tm9kZTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IFY4UHJveHk6OkRPTVdyYXBwZXJUb05vZGU8Tm9k
ZT4oJHZhbHVlKSA6IDAiOworICAgIH0KKworICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7
CisgICAgIyAkaW1wbEluY2x1ZGVzeyIkdHlwZS5oIn0gPSAxIHVubGVzcyBBdm9pZEluY2x1c2lv
bk9mVHlwZSgkdHlwZSk7CisKKyAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkpIHsKKyAgICAg
ICAgJGltcGxJbmNsdWRlc3siVjgke3R5cGV9LmgifSA9IDE7CisKKyAgICAgICAgIyBQZXJmb3Jt
IHR5cGUgY2hlY2tzIG9uIHRoZSBwYXJhbWV0ZXIsIGlmIGl0IGlzIGV4cGVjdGVkIE5vZGUgdHlw
ZSwKKyAgICAgICAgIyByZXR1cm4gTlVMTC4KKyAgICAgICAgcmV0dXJuICJWOCR7dHlwZX06Okhh
c0luc3RhbmNlKCR2YWx1ZSkgPyBWOFByb3h5OjpET01XcmFwcGVyVG9Ob2RlPCR7dHlwZX0+KCR2
YWx1ZSkgOiAwIjsKKyAgICB9IGVsc2UgeworICAgICAgICAjIFRPRE86IFRlbXBvcmFyeSB0byBh
dm9pZCBXaW5kb3cgbmFtZSBjb25mbGljdC4KKyAgICAgICAgbXkgJGNsYXNzSW5kZXggPSB1Yygk
dHlwZSk7CisgICAgICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gJHt0eXBlfTsKKworICAgICAgICAk
aW1wbEluY2x1ZGVzeyJWOCR0eXBlLmgifSA9IDE7CisKKyAgICAgICAgaWYgKElzUG9kVHlwZSgk
dHlwZSkpIHsKKyAgICAgICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZSgkdHlw
ZSk7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOFNWR1BPRFR5cGVXcmFwcGVyLmgifSA9
IDE7CisKKyAgICAgICAgICAgIHJldHVybiAiVjhTVkdQT0RUeXBlVXRpbDo6VG9TVkdQT0RUeXBl
PCR7bmF0aXZlVHlwZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4fSwgJHZhbHVlJHttYXli
ZU9rUGFyYW19KSIKKyAgICAgICAgfQorCisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4JHt0eXBl
fS5oIn0gPSAxOworCisgICAgICAgICMgUGVyZm9ybSB0eXBlIGNoZWNrcyBvbiB0aGUgcGFyYW1l
dGVyLCBpZiBpdCBpcyBleHBlY3RlZCBOb2RlIHR5cGUsCisgICAgICAgICMgcmV0dXJuIE5VTEwu
CisgICAgICAgIHJldHVybiAiVjgke3R5cGV9OjpIYXNJbnN0YW5jZSgkdmFsdWUpID8gVjhQcm94
eTo6VG9OYXRpdmVPYmplY3Q8JHtpbXBsQ2xhc3NOYW1lfT4oVjhDbGFzc0luZGV4Ojoke2NsYXNz
SW5kZXh9LCAkdmFsdWUpIDogMCI7CisgICAgfQorfQorCisKK3N1YiBHZXRWOEhlYWRlck5hbWUK
K3sKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIHJldHVybiAiVjgiIC4gR2V0SW1wbGVtZW50
YXRpb25GaWxlTmFtZSgkdHlwZSk7Cit9CisKKworc3ViIENyZWF0ZUN1c3RvbVNpZ25hdHVyZQor
eworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OworICAgIG15ICRjb3VudCA9IEB7JGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzfTsKKyAgICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
OworICAgIG15ICRyZXN1bHQgPSAiICBjb25zdCBpbnQgJHtuYW1lfV9hcmdjID0gJHtjb3VudH07
XG4iIC4KKyAgICAgICIgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7bmFtZX1f
YXJndlske25hbWV9X2FyZ2NdID0geyAiOworICAgIG15ICRmaXJzdCA9IDE7CisgICAgZm9yZWFj
aCBteSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgaWYg
KCRmaXJzdCkgeyAkZmlyc3QgPSAwOyB9CisgICAgICAgIGVsc2UgeyAkcmVzdWx0IC49ICIsICI7
IH0KKyAgICAgICAgaWYgKElzV3JhcHBlclR5cGUoJHBhcmFtZXRlci0+dHlwZSkpIHsKKyAgICAg
ICAgICAgIG15ICR0eXBlID0gJHBhcmFtZXRlci0+dHlwZTsKKyAgICAgICAgICAgIG15ICRoZWFk
ZXIgPSBHZXRWOEhlYWRlck5hbWUoJHR5cGUpOworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3sk
aGVhZGVyfSA9IDE7CisgICAgICAgICAgICAkcmVzdWx0IC49ICJWOCR7dHlwZX06OkdldFJhd1Rl
bXBsYXRlKCkiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHJlc3VsdCAuPSAidjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSI7CisgICAgICAgIH0KKyAgICB9CisgICAg
JHJlc3VsdCAuPSAiIH07XG4iOworICAgICRyZXN1bHQgLj0gIiAgdjg6OkhhbmRsZTx2ODo6U2ln
bmF0dXJlPiAke25hbWV9X3NpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCAke25h
bWV9X2FyZ2MsICR7bmFtZX1fYXJndik7XG4iOworICAgIHJldHVybiAkcmVzdWx0OworfQorCisK
K3N1YiBSZXF1aXJlc0N1c3RvbVNpZ25hdHVyZQoreworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0
OworICAgICMgTm8gc2lnbmF0dXJlIG5lZWRlZCBmb3IgQ3VzdG9tIGZ1bmN0aW9uCisgICAgaWYg
KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0gfHwK
KyAgICAgICAgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOEN1
c3RvbSJ9KSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJHBh
cmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CisgICAgICBpZiAoSXNXcmFwcGVy
VHlwZSgkcGFyYW1ldGVyLT50eXBlKSkgeworICAgICAgICAgIHJldHVybiAxOworICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCitteSAlbm9uX3dyYXBwZXJfdHlwZXMgPSAoCisg
ICAgJ2Zsb2F0JyA9PiAxLAorICAgICdBdG9taWNTdHJpbmcnID0+IDEsCisgICAgJ2RvdWJsZScg
PT4gMSwKKyAgICAnc2hvcnQnID0+IDEsCisgICAgJ3Vuc2lnbmVkIHNob3J0JyA9PiAxLAorICAg
ICdsb25nJyA9PiAxLAorICAgICd1bnNpZ25lZCBsb25nJyA9PiAxLAorICAgICdib29sZWFuJyA9
PiAxLAorICAgICdET01TdHJpbmcnID0+IDEsCisgICAgJ0NvbXBhcmVIb3cnID0+IDEsCisgICAg
J1NWR1JlY3QnID0+IDEsCisgICAgJ1NWR1BvaW50JyA9PiAxLAorICAgICdTVkdNYXRyaXgnID0+
IDEsCisgICAgJ1NWR1RyYW5zZm9ybScgPT4gMSwKKyAgICAnU1ZHTGVuZ3RoJyA9PiAxLAorICAg
ICdTVkdOdW1iZXInID0+IDEsCisgICAgJ1NWR1BhaW50VHlwZScgPT4gMSwKKyAgICAnRE9NVGlt
ZVN0YW1wJyA9PiAxLAorICAgICdKU09iamVjdCcgPT4gMSwKKyAgICAnRXZlbnRUYXJnZXQnID0+
IDEsCisgICAgJ05vZGVGaWx0ZXInID0+IDEsCisgICAgJ0V2ZW50TGlzdGVuZXInID0+IDEKKyk7
CisKKworc3ViIElzV3JhcHBlclR5cGUKK3sKKyAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9y
LT5TdHJpcE1vZHVsZShzaGlmdCk7CisgICAgcmV0dXJuICEoJG5vbl93cmFwcGVyX3R5cGVzeyR0
eXBlfSk7Cit9CisKK3N1YiBJc0RPTU5vZGVUeXBlCit7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsK
KworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdBdHRyJzsKKyAgICByZXR1cm4gMSBpZiAkdHlw
ZSBlcSAnQ0RBVEFTZWN0aW9uJzsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnQ29tbWVudCc7
CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0RvY3VtZW50JzsKKyAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAnRG9jdW1lbnRGcmFnbWVudCc7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0Rv
Y3VtZW50VHlwZSc7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0VsZW1lbnQnOworICAgIHJl
dHVybiAxIGlmICR0eXBlIGVxICdFbnRpdHlSZWZlcmVuY2UnOworICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICdIVE1MQ2FudmFzRWxlbWVudCc7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0hU
TUxEb2N1bWVudCc7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0hUTUxFbGVtZW50JzsKKyAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnSFRNTEZvcm1FbGVtZW50JzsKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAnSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQnOworICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICdIVE1MVGFibGVTZWN0aW9uRWxlbWVudCc7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUg
ZXEgJ05vZGUnOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24nOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdTVkdFbGVtZW50JzsKKyAgICByZXR1cm4g
MSBpZiAkdHlwZSBlcSAnU1ZHRG9jdW1lbnQnOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdT
VkdTVkdFbGVtZW50JzsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnU1ZHVXNlRWxlbWVudCc7
CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ1RleHQnOworCisgICAgcmV0dXJuIDA7Cit9CisK
Kworc3ViIE5hdGl2ZVRvSlNWYWx1ZQoreworICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKKyAg
ICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJp
cE1vZHVsZSgkc2lnbmF0dXJlLT50eXBlKTsKKyAgICBteSAkY2xhc3NOYW1lPSAiVjgkdHlwZSI7
CisKKyAgICByZXR1cm4gInY4OjpEYXRlOjpOZXcoc3RhdGljX2Nhc3Q8ZG91YmxlPigkdmFsdWUp
KSIgaWYgJHR5cGUgZXEgIkRPTVRpbWVTdGFtcCI7CisgICAgcmV0dXJuICIkdmFsdWUgPyB2ODo6
VHJ1ZSgpIDogdjg6OkZhbHNlKCkiIGlmICR0eXBlIGVxICJib29sZWFuIjsKKyAgICByZXR1cm4g
InY4OjpVbmRlZmluZWQoKSIgaWYgJHR5cGUgZXEgInZvaWQiOworCisgICAgIyBGb3IgYWxsIHRo
ZSB0eXBlcyB3aGVyZSB3ZSB1c2UgJ2ludCcgYXMgdGhlIHJlcHJlc2VudGF0aW9uIHR5cGUsCisg
ICAgIyB3ZSB1c2UgSW50ZWdlcjo6TmV3IHdoaWNoIGhhcyBhIGZhc3QgU21pIGNvbnZlcnNpb24g
Y2hlY2suCisgICAgcmV0dXJuICJ2ODo6SW50ZWdlcjo6TmV3KCR2YWx1ZSkiIGlmIEdldE5hdGl2
ZVR5cGUoJHR5cGUpIGVxICJpbnQiOworCisgICAgcmV0dXJuICJ2ODo6TnVtYmVyOjpOZXcoJHZh
bHVlKSIgaWYgJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgb3IgJHR5cGUg
ZXEgIlNWR1BhaW50VHlwZSI7CisKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlw
ZSgkdHlwZSkpIHsKKyAgICAgICAgbXkgJGNvbnYgPSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ29udmVydE51bGxTdHJpbmdUbyJ9OworICAgICAgICBpZiAoZGVmaW5lZCAkY29u
dikgeworICAgICAgICAgICAgcmV0dXJuICJ2OFN0cmluZ09yTnVsbCgkdmFsdWUpIiBpZiAkY29u
diBlcSAiTnVsbCI7CisgICAgICAgICAgICByZXR1cm4gInY4U3RyaW5nT3JVbmRlZmluZWQoJHZh
bHVlKSIgaWYgJGNvbnYgZXEgIlVuZGVmaW5lZCI7CisgICAgICAgICAgICByZXR1cm4gInY4U3Ry
aW5nT3JGYWxzZSgkdmFsdWUpIiBpZiAkY29udiBlcSAiRmFsc2UiOworCisgICAgICAgICAgICBk
aWUgIlVua25vd24gdmFsdWUgZm9yIENvbnZlcnROdWxsU3RyaW5nVG8gZXh0ZW5kZWQgYXR0cmli
dXRlIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gInY4U3RyaW5nKCR2YWx1ZSkiOworICAg
IH0KKworICAgICMgVjggc3BlY2lmaWMuCisgICAgbXkgJGltcGxDbGFzc05hbWUgPSAkdHlwZTsK
KyAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHR5cGUpOworICAgICMgJGltcGxJbmNsdWRlc3tHZXRJ
bXBsZW1lbnRhdGlvbkZpbGVOYW1lKCR0eXBlKX0gPSAxIHVubGVzcyBBdm9pZEluY2x1c2lvbk9m
VHlwZSgkdHlwZSk7CisKKyAgICAjIHNwZWNpYWwgY2FzZSBmb3Igbm9uLURPTSBub2RlIGludGVy
ZmFjZXMKKyAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkpIHsKKyAgICAgICAgcmV0dXJuICJW
OFByb3h5OjpOb2RlVG9WOE9iamVjdCgkdmFsdWUpIjsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUg
ZXEgIkV2ZW50VGFyZ2V0IiBvciAkdHlwZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIikgeworICAg
ICAgICByZXR1cm4gIlY4UHJveHk6OkV2ZW50VGFyZ2V0VG9WOE9iamVjdCgkdmFsdWUpIjsKKyAg
ICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIkV2ZW50IikgeworICAgICAgICByZXR1cm4gIlY4UHJv
eHk6OkV2ZW50VG9WOE9iamVjdCgkdmFsdWUpIjsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEg
IkV2ZW50TGlzdGVuZXIiKSB7CisgICAgICAgIHJldHVybiAiVjhQcm94eTo6RXZlbnRMaXN0ZW5l
clRvVjhPYmplY3QoJHZhbHVlKSI7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJSR0JDb2xv
ciIpIHsKKyAgICAgICAgcmV0dXJuICJWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
UkdCQ09MT1IsIG5ldyBSR0JDb2xvcigkdmFsdWUpKSI7CisgICAgfQorCisgICAgaWYgKCR0eXBl
IGVxICJXb3JrZXJDb250ZXh0IiBvciAkdHlwZSBlcSAiV29ya2VyTG9jYXRpb24iIG9yICR0eXBl
IGVxICJXb3JrZXJOYXZpZ2F0b3IiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IldvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5oIn0gPSAxOworICAgICAgICBteSAkY2xhc3NJbmRleCA9IHVj
KCR0eXBlKTsKKworICAgICAgICByZXR1cm4gIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCAkdmFsdWUpIjsKKyAgICB9CisK
KyAgICBlbHNlIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3sid3RmL1JlZkNvdW50ZWQuaCJ9ID0g
MTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3sid3RmL1JlZlB0ci5oIn0gPSAxOworICAgICAgICBt
eSAkY2xhc3NJbmRleCA9IHVjKCR0eXBlKTsKKworICAgICAgICBpZiAoSXNQb2RUeXBlKCR0eXBl
KSkgeworICAgICAgICAgICAgJHZhbHVlID0gR2VuZXJhdGVTVkdTdGF0aWNQb2RUeXBlV3JhcHBl
cigkdHlwZSwgJHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAiVjhQcm94eTo6
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCAkdmFsdWUpIjsKKyAgICB9Cit9
CisKK3N1YiBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVyIHsKKyAgICBteSAkdHlwZSA9
IHNoaWZ0OworICAgIG15ICR2YWx1ZSA9IHNoaWZ0OworCisgICAgJGltcGxJbmNsdWRlc3siVjgk
dHlwZS5oIn09MTsKKyAgICAkaW1wbEluY2x1ZGVzeyJWOFNWR1BPRFR5cGVXcmFwcGVyLmgifSA9
IDE7CisKKyAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGUoJHR5cGUpOworICAgIHJl
dHVybiAibmV3IFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8JG5hdGl2ZVR5cGU+KCR2YWx1ZSki
OworfQorCisjIEludGVybmFsIGhlbHBlcgorc3ViIFdyaXRlRGF0YQoreworICAgIGlmIChkZWZp
bmVkKCRJTVBMKSkgeworICAgICAgICAjIFdyaXRlIGNvbnRlbnQgdG8gZmlsZS4KKyAgICAgICAg
cHJpbnQgJElNUEwgQGltcGxDb250ZW50SGVhZGVyOworCisgICAgICAgIHByaW50ICRJTVBMIEBp
bXBsRml4ZWRIZWFkZXI7CisKKyAgICAgICAgZm9yZWFjaCBteSAkaW1wbEluY2x1ZGUgKHNvcnQg
a2V5cyglaW1wbEluY2x1ZGVzKSkgeworICAgICAgICAgICAgbXkgJGNoZWNrVHlwZSA9ICRpbXBs
SW5jbHVkZTsKKyAgICAgICAgICAgICRjaGVja1R5cGUgPX4gcy9cLmgvLzsKKworICAgICAgICAg
ICAgcHJpbnQgJElNUEwgIiNpbmNsdWRlIFwiJGltcGxJbmNsdWRlXCJcbiIgdW5sZXNzICRjb2Rl
R2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgkY2hlY2tUeXBlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHByaW50ICRJTVBMICJcbiI7CisgICAgICAgIHByaW50ICRJTVBMIEBpbXBsQ29udGVu
dERlY2xzOworICAgICAgICBwcmludCAkSU1QTCBAaW1wbENvbnRlbnQ7CisgICAgICAgIGNsb3Nl
KCRJTVBMKTsKKyAgICAgICAgdW5kZWYoJElNUEwpOworCisgICAgICAgICVpbXBsSW5jbHVkZXMg
PSAoKTsKKyAgICAgICAgQGltcGxGaXhlZEhlYWRlciA9ICgpOworICAgICAgICBAaW1wbEhlYWRl
ckNvbnRlbnQgPSAoKTsKKyAgICAgICAgQGltcGxDb250ZW50RGVjbHMgPSAoKTsKKyAgICAgICAg
QGltcGxDb250ZW50ID0gKCk7CisgICAgfQorCisgICAgaWYgKGRlZmluZWQoJEhFQURFUikpIHsK
KyAgICAgICAgIyBXcml0ZSBjb250ZW50IHRvIGZpbGUuCisgICAgICAgIHByaW50ICRIRUFERVIg
QGhlYWRlckNvbnRlbnQ7CisgICAgICAgIGNsb3NlKCRIRUFERVIpOworICAgICAgICB1bmRlZigk
SEVBREVSKTsKKworICAgICAgICBAaGVhZGVyQ29udGVudCA9ICgpOworICAgIH0KK30KKworc3Vi
IElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyCit7CisgICAgbXkgJGltcGxDbGFzc05h
bWUgPSBzaGlmdDsKKworICAgIGlmICgkaW1wbENsYXNzTmFtZSA9fiAvU1ZHLyBhbmQgbm90ICRp
bXBsQ2xhc3NOYW1lID1+IC9FbGVtZW50LykgeworICAgICAgICByZXR1cm4gMSB1bmxlc3MgJGlt
cGxDbGFzc05hbWUgPX4gL1NWR1BhaW50LyBvciAkaW1wbENsYXNzTmFtZSA9fiAvU1ZHQ29sb3Iv
IG9yICRpbXBsQ2xhc3NOYW1lID1+IC9TVkdEb2N1bWVudC87CisgICAgfQorCisgICAgcmV0dXJu
IDA7Cit9CisKK3N1YiBHZW5lcmF0ZVNWR0NvbnRleHRBc3NpZ25tZW50Cit7CisgICAgbXkgJHNy
Y1R5cGUgPSBzaGlmdDsKKyAgICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgICBteSAkaW5kZW50ID0g
c2hpZnQ7CisKKyAgICAkcmVzdWx0ID0gR2VuZXJhdGVTVkdDb250ZXh0UmV0cmlldmFsKCRzcmNU
eXBlLCAkaW5kZW50KTsKKyAgICAkcmVzdWx0IC49ICAgJGluZGVudCAuICJWOFByb3h5OjpTZXRT
VkdDb250ZXh0KCR2YWx1ZSwgY29udGV4dCk7XG4iOworCisgICAgcmV0dXJuICRyZXN1bHQ7Cit9
CisKK3N1YiBHZW5lcmF0ZVNWR0NvbnRleHRSZXRyaWV2YWwKK3sKKyAgICBteSAkc3JjVHlwZSA9
IHNoaWZ0OworICAgIG15ICRpbmRlbnQgPSBzaGlmdDsKKworICAgIG15ICRzcmNJc1BvZFR5cGUg
PSBJc1BvZFR5cGUoJHNyY1R5cGUpOworCisgICAgbXkgJHNyY09iamVjdCA9ICJpbXAiOworICAg
IGlmICgkc3JjSXNQb2RUeXBlKSB7CisgICAgICAgICRzcmNPYmplY3QgPSAiaW1wX3dyYXBwZXIi
OworICAgIH0KKworICAgIG15ICRjb250ZXh0RGVjbDsKKworICAgIGlmIChJc1NWR1R5cGVOZWVk
aW5nQ29udGV4dFBhcmFtZXRlcigkc3JjVHlwZSkpIHsKKyAgICAgICAgJGNvbnRleHREZWNsID0g
IlY4UHJveHk6OkdldFNWR0NvbnRleHQoJHNyY09iamVjdCkiOworICAgIH0gZWxzZSB7CisgICAg
ICAgICRjb250ZXh0RGVjbCA9ICRzcmNPYmplY3Q7CisgICAgfQorCisgICAgcmV0dXJuICRpbmRl
bnQgLiAiU1ZHRWxlbWVudCogY29udGV4dCA9ICRjb250ZXh0RGVjbDtcbiI7Cit9CisKK3N1YiBJ
c1NWR0xpc3RNdXRhdG9yCit7CisgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IHNoaWZ0OworCisgICAg
cmV0dXJuIDEgaWYgJGZ1bmN0aW9uTmFtZSBlcSAiY2xlYXIiOworICAgIHJldHVybiAxIGlmICRm
dW5jdGlvbk5hbWUgZXEgImluaXRpYWxpemUiOworICAgIHJldHVybiAxIGlmICRmdW5jdGlvbk5h
bWUgZXEgImluc2VydEl0ZW1CZWZvcmUiOworICAgIHJldHVybiAxIGlmICRmdW5jdGlvbk5hbWUg
ZXEgInJlcGxhY2VJdGVtIjsKKyAgICByZXR1cm4gMSBpZiAkZnVuY3Rpb25OYW1lIGVxICJyZW1v
dmVJdGVtIjsKKyAgICByZXR1cm4gMSBpZiAkZnVuY3Rpb25OYW1lIGVxICJhcHBlbmRJdGVtIjsK
KworICAgIHJldHVybiAwOworfQorCitzdWIgSXNTVkdMaXN0TWV0aG9kCit7CisgICAgbXkgJGZ1
bmN0aW9uTmFtZSA9IHNoaWZ0OworCisgICAgcmV0dXJuIDEgaWYgJGZ1bmN0aW9uTmFtZSBlcSAi
Z2V0Rmlyc3QiOworICAgIHJldHVybiAxIGlmICRmdW5jdGlvbk5hbWUgZXEgImdldExhc3QiOwor
ICAgIHJldHVybiAxIGlmICRmdW5jdGlvbk5hbWUgZXEgImdldEl0ZW0iOworCisgICAgcmV0dXJu
IElzU1ZHTGlzdE11dGF0b3IoJGZ1bmN0aW9uTmFtZSk7Cit9CisKK3N1YiBJc1NWR0xpc3RUeXBl
TmVlZGluZ1NwZWNpYWxIYW5kbGluZworeworICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKKwor
ICAgIHJldHVybiAxIGlmICRjbGFzc05hbWUgZXEgIlNWR1BvaW50TGlzdCI7CisgICAgcmV0dXJu
IDEgaWYgJGNsYXNzTmFtZSBlcSAiU1ZHVHJhbnNmb3JtTGlzdCI7CisKKyAgICByZXR1cm4gMDsK
K30KKworc3ViIERlYnVnUHJpbnQKK3sKKyAgICBteSAkb3V0cHV0ID0gc2hpZnQ7CisKKyAgICBw
cmludCAkb3V0cHV0OworICAgIHByaW50ICJcbiI7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lE
TFBhcnNlci5wbQppbmRleCBkZTdjZjljLi5jNGNiMDQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9JRExQYXJzZXIucG0KQEAgLTQxLDYgKzQxLDcgQEAgbXkgJHByZXNlcnZlZFBhcnNlTW9kZSA9
IE1PREVfVU5ERUY7CiAKIG15ICRiZVF1aWV0OyAjIFNob3VsZCBub3QgZGlzcGxheSBhbnl0aGlu
ZyBvbiBTVERPVVQ/CiBteSAkZG9jdW1lbnQgPSAwOyAjIFdpbGwgaG9sZCB0aGUgcmVzdWx0aW5n
ICdpZGxEb2N1bWVudCcKK215ICRwYXJlbnRzT25seSA9IDA7ICMgSWYgMSwgcGFyc2Ugb25seSBl
bm91Z2ggdG8gcG9wdWxhdGUgcGFyZW50cyBsaXN0CiAKICMgRGVmYXVsdCBDb25zdHJ1Y3Rvcgog
c3ViIG5ldwpAQCAtNjIsNiArNjMsNyBAQCBzdWIgUGFyc2UKICAgICBteSAkZmlsZU5hbWUgPSBz
aGlmdDsKICAgICBteSAkZGVmaW5lcyA9IHNoaWZ0OwogICAgIG15ICRwcmVwcm9jZXNzb3IgPSBz
aGlmdDsKKyAgICAkcGFyZW50c09ubHkgPSBzaGlmdDsKIAogICAgIGlmICghJHByZXByb2Nlc3Nv
cikgewogICAgICAgICAkcHJlcHJvY2Vzc29yID0gIi91c3IvYmluL2djYyAtRSAtUCAteCBjKysi
OwpAQCAtMjQwLDYgKzI0Miw4IEBAIHN1YiBQYXJzZUludGVyZmFjZQogICAgICAgICAgICAgcHVz
aChAJGFycmF5UmVmLCAkbGluZSk7CiAgICAgICAgIH0KIAorICAgICAgICByZXR1cm4gaWYgJHBh
cmVudHNPbmx5OworCiAgICAgICAgICRpbnRlcmZhY2VEYXRhID1+IHMvW1xuXHJdLyAvZzsKICAg
ICAgICAgbXkgQGludGVyZmFjZU1ldGhvZHMgPSBzcGxpdCgvOy8sICRpbnRlcmZhY2VEYXRhKTsK
IAo=
</data>
<flag name="review"
          id="16284"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>