<?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>64594</bug_id>
          
          <creation_ts>2011-07-15 05:45:09 -0700</creation_ts>
          <short_desc>test-webkitpy failing with Python 2.5</short_desc>
          <delta_ts>2011-07-19 02:04:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>MakingBotsRed</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>437679</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-15 05:45:09 -0700</bug_when>
    <thetext>webkitpy uses urlparse.parse_qs not available in Python 2.5
Requested by philn-tp on #webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437680</commentid>
    <comment_count>1</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-07-15 05:45:47 -0700</bug_when>
    <thetext>======================================================================
ERROR: test_changelog (webkitpy.tool.servers.gardeningserver_unittest.GardeningServerTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File &quot;/home/slave/webkitgtk/gtk-linux-32-debug/build/Tools/Scripts/webkitpy/tool/servers/gardeningserver_unittest.py&quot;, line 78, in test_changelog
    self._post_to_path(&quot;/changelog?revision=2314&quot;, expected_stderr=expected_stderr, expected_stdout=expected_stdout)
  File &quot;/home/slave/webkitgtk/gtk-linux-32-debug/build/Tools/Scripts/webkitpy/tool/servers/gardeningserver_unittest.py&quot;, line 70, in _post_to_path
    OutputCapture().assert_outputs(self, handler.do_POST, expected_stderr=expected_stderr, expected_stdout=expected_stdout)
  File &quot;/home/slave/webkitgtk/gtk-linux-32-debug/build/Tools/Scripts/webkitpy/common/system/outputcapture.py&quot;, line 63, in assert_outputs
    return_value = function(*args, **kwargs)
  File &quot;/home/slave/webkitgtk/gtk-linux-32-debug/build/Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py&quot;, line 61, in do_POST
    self._handle_request()
  File &quot;/home/slave/webkitgtk/gtk-linux-32-debug/build/Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py&quot;, line 66, in _handle_request
    self.query = urlparse.parse_qs(query_string)
AttributeError: &apos;module&apos; object has no attribute &apos;parse_qs&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437681</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-07-15 05:46:30 -0700</bug_when>
    <thetext>In that case we should fallback to cgi.parse_qs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437685</commentid>
    <comment_count>3</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-07-15 06:11:39 -0700</bug_when>
    <thetext>thirdparty.simplejson also needs an update:


======================================================================
FAIL: test_changelog (webkitpy.tool.servers.gardeningserver_unittest.GardeningServerTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File &quot;/wk/WebKit/Tools/Scripts/webkitpy/tool/servers/gardeningserver_unittest.py&quot;, line 78, in test_changelog
    self._post_to_path(&quot;/changelog?revision=2314&quot;, expected_stderr=expected_stderr, expected_stdout=expected_stdout)
  File &quot;/wk/WebKit/Tools/Scripts/webkitpy/tool/servers/gardeningserver_unittest.py&quot;, line 70, in _post_to_path
    OutputCapture().assert_outputs(self, handler.do_POST, expected_stderr=expected_stderr, expected_stdout=expected_stdout)
  File &quot;/wk/WebKit/Tools/Scripts/webkitpy/common/system/outputcapture.py&quot;, line 65, in assert_outputs
    testcase.assertEqual(stdout_string, expected_stdout)
AssertionError: &apos;== Begin JSON Response ==\n{&quot;bug_id&quot;: 42, &quot;author_email&quot;: &quot;abarth@webkit.org&quot;, &quot;reviewer_text&quot;: &quot;Darin Adler&quot;, &quot;author_name&quot;: &quot;Adam Barth&quot;, &quot;changed_files&quot;: [&quot;path\\/to\\/file&quot;, &quot;another\\/file&quot;]}\n== End JSON Response ==\n&apos; != &apos;== Begin JSON Response ==\n{&quot;bug_id&quot;: 42, &quot;author_email&quot;: &quot;abarth@webkit.org&quot;, &quot;reviewer_text&quot;: &quot;Darin Adler&quot;, &quot;author_name&quot;: &quot;Adam Barth&quot;, &quot;changed_files&quot;: [&quot;path/to/file&quot;, &quot;another/file&quot;]}\n== End JSON Response ==\n&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437688</commentid>
    <comment_count>4</comment_count>
      <attachid>100964</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-07-15 06:16:17 -0700</bug_when>
    <thetext>Created attachment 100964
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437694</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-15 06:20:18 -0700</bug_when>
    <thetext>Attachment 100964 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy...&quot; exit_code: 1

Tools/Scripts/webkitpy/thirdparty/simplejson/__init__.py:413:  trailing whitespace  [pep8/W291] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437870</commentid>
    <comment_count>6</comment_count>
      <attachid>100964</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-15 11:53:50 -0700</bug_when>
    <thetext>Comment on attachment 100964
proposed patch

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

&gt; Tools/ChangeLog:11
&gt; +        Updated simplejson to version 2.1.6 that fixes an issue when
&gt; +        dumping slashes. Also use cgi.parse_qs instead of the urlparse
&gt; +        version to be compatible with Python2.5. Verified the fix with
&gt; +        test-webkitpy on python 2.5 and python 2.6.

Ok.  So you&apos;re just updating simplejson, and then separately making changes to our code, correct?  You&apos;re not changing simplejson besides the update?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438013</commentid>
    <comment_count>7</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-07-15 15:11:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 100964 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100964&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:11
&gt; &gt; +        Updated simplejson to version 2.1.6 that fixes an issue when
&gt; &gt; +        dumping slashes. Also use cgi.parse_qs instead of the urlparse
&gt; &gt; +        version to be compatible with Python2.5. Verified the fix with
&gt; &gt; +        test-webkitpy on python 2.5 and python 2.6.
&gt; 
&gt; Ok.  So you&apos;re just updating simplejson, and then separately making changes to our code, correct? 

Yes

&gt; You&apos;re not changing simplejson besides the update?

I did change two import statements from:

from simplejson import something

to:

import something

I will land this patch later unless you have more comments. I locally checked test-webkitpy still passes with python 2.5 and 2.6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438265</commentid>
    <comment_count>8</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-07-17 00:48:06 -0700</bug_when>
    <thetext>What&apos;s the status on landing this patch? Can we land this by commit-queue? Both the Leopard Debug and Release bots are failing the unit tests because of this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438266</commentid>
    <comment_count>9</comment_count>
      <attachid>100964</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-17 01:00:03 -0700</bug_when>
    <thetext>Comment on attachment 100964
proposed patch

I mean, this should be two separate patches, but its ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438268</commentid>
    <comment_count>10</comment_count>
      <attachid>100964</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-17 01:57:24 -0700</bug_when>
    <thetext>Comment on attachment 100964
proposed patch

Clearing flags on attachment: 100964

Committed r91167: &lt;http://trac.webkit.org/changeset/91167&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438269</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-17 01:57:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438740</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-18 14:51:11 -0700</bug_when>
    <thetext>When running NRWT on chromium-linux I&apos;m getting the following at the end of the test run, before results.html is produced:


Traceback (most recent call last):
  File &quot;WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py&quot;, line 438, in &lt;module&gt;
    sys.exit(main())
  File &quot;WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py&quot;, line 433, in main
    return run(port, options, args)
  File &quot;WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py&quot;, line 107, in run
    num_unexpected_results = manager.run(result_summary)
  File &quot;WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py&quot;, line 933, in run
    self._upload_json_files(summarized_results, result_summary, individual_test_timings)
  File &quot;WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py&quot;, line 1080, in _upload_json_files
    json_results_generator.write_json(self._fs, times_trie, times_json_path)
  File &quot;WebKit/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py&quot;, line 65, in write_json
    json_data = simplejson.dumps(json_object, separators=(&apos;,&apos;, &apos;:&apos;))
  File &quot;WebKit/Tools/Scripts/webkitpy/thirdparty/simplejson/__init__.py&quot;, line 269, in dumps
    use_decimal=use_decimal, **kw).encode(obj)
  File &quot;WebKit/Tools/Scripts/webkitpy/thirdparty/simplejson/encoder.py&quot;, line 216, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File &quot;WebKit/Tools/Scripts/webkitpy/thirdparty/simplejson/encoder.py&quot;, line 277, in iterencode
    self.skipkeys, self.allow_nan, key_memo, self.use_decimal)
TypeError: make_encoder() takes at most 9 arguments (11 given)


Is this related?  What&apos;s the fix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438758</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-18 15:08:05 -0700</bug_when>
    <thetext>I suspect the recent simplejson upgrade?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439035</commentid>
    <comment_count>14</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-07-19 01:29:37 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I suspect the recent simplejson upgrade?

Yes. Bug 64757 seems to fix the issue. Is the chromium bot using python 2.6?
I wonder if with the patch of that bug and a bot running python 2.5 you&apos;d still get the traceback mentioned above...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439049</commentid>
    <comment_count>15</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-07-19 02:04:35 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; I suspect the recent simplejson upgrade?
&gt; 
&gt; Yes. Bug 64757 seems to fix the issue. Is the chromium bot using python 2.6?
&gt; I wonder if with the patch of that bug and a bot running python 2.5 you&apos;d still get the traceback mentioned above...

I&apos;ve just checked NRWT with python2.5 on GTK and we&apos;re indeed safe. Thanks Eric and Adam!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100964</attachid>
            <date>2011-07-15 06:16:17 -0700</date>
            <delta_ts>2011-07-17 01:57:23 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>176549</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBhMmFiNzY4NGIyYmNhNzZjZjNiMGVjMjc0MjFkYmZlNDUwOWZlZDIwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBGcmksIDE1IEp1bCAyMDExIDE1OjEzOjI1ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cHJvcG9zZWQgcGF0Y2gKCi0tLQogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDY1ICsKIC4uLi93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpz
b24vUkVBRE1FLnR4dCAgICAgIHwgICAgMiArLQogLi4uL3dlYmtpdHB5L3RoaXJkcGFydHkvc2lt
cGxlanNvbi9fX2luaXRfXy5weSAgICAgfCAgNDEzICsrKy0KIC4uLi93ZWJraXRweS90aGlyZHBh
cnR5L3NpbXBsZWpzb24vX3NwZWVkdXBzLmMgICAgIHwgMjU3MyArKysrKysrKysrKysrKysrKysr
LQogLi4uL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9kZWNvZGVyLnB5ICAgICAgfCAg
Mzk4ICsrKy0KIC4uLi93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vZW5jb2Rlci5weSAg
ICAgIHwgIDUwNCArKystLQogLi4uL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9vcmRl
cmVkX2RpY3QucHkgfCAgMTE5ICsKIC4uLi93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24v
c2Nhbm5lci5weSAgICAgIHwgIDEzNCArLQogLi4uL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9zaW1wbGVqc29uL3Rvb2wucHkgfCAgIDM5ICsKIC4uLi93ZWJraXRweS90b29sL3NlcnZlcnMv
cmVmbGVjdGlvbmhhbmRsZXIucHkgICAgIHwgICAgMyArLQogMTAgZmlsZXMgY2hhbmdlZCwgMzY3
OCBpbnNlcnRpb25zKCspLCA1NzIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vb3JkZXJlZF9kaWN0LnB5
CiBjcmVhdGUgbW9kZSAxMDA2NDQgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3Np
bXBsZWpzb24vdG9vbC5weQoKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCAyYzZjYTg4Li41ZTIxMGRiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMTEtMDctMTUgIFBo
aWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIHRlc3Qtd2Vi
a2l0cHkgZmFpbGluZyB3aXRoIFB5dGhvbiAyLjUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBzaW1wbGVqc29uIHRvIHZlcnNpb24gMi4xLjYg
dGhhdCBmaXhlcyBhbiBpc3N1ZSB3aGVuCisgICAgICAgIGR1bXBpbmcgc2xhc2hlcy4gQWxzbyB1
c2UgY2dpLnBhcnNlX3FzIGluc3RlYWQgb2YgdGhlIHVybHBhcnNlCisgICAgICAgIHZlcnNpb24g
dG8gYmUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbjIuNS4gVmVyaWZpZWQgdGhlIGZpeCB3aXRoCisg
ICAgICAgIHRlc3Qtd2Via2l0cHkgb24gcHl0aG9uIDIuNSBhbmQgcHl0aG9uIDIuNi4KKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL1JFQURNRS50eHQ6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vX19pbml0
X18ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24v
X3NwZWVkdXBzLmM6CisgICAgICAgIChqc29uX1B5T1Nfc3RyaW5nX3RvX2RvdWJsZSk6CisgICAg
ICAgIChfY29udmVydFB5SW50X0FzU3NpemVfdCk6CisgICAgICAgIChfY29udmVydFB5SW50X0Zy
b21Tc2l6ZV90KToKKyAgICAgICAgKGFzY2lpX2VzY2FwZV9jaGFyKToKKyAgICAgICAgKGFzY2lp
X2VzY2FwZV91bmljb2RlKToKKyAgICAgICAgKGFzY2lpX2VzY2FwZV9zdHIpOgorICAgICAgICAo
cmFpc2VfZXJybXNnKToKKyAgICAgICAgKGpvaW5fbGlzdF91bmljb2RlKToKKyAgICAgICAgKGpv
aW5fbGlzdF9zdHJpbmcpOgorICAgICAgICAoX2J1aWxkX3J2YWxfaW5kZXhfdHVwbGUpOgorICAg
ICAgICAoc2NhbnN0cmluZ19zdHIpOgorICAgICAgICAoc2NhbnN0cmluZ191bmljb2RlKToKKyAg
ICAgICAgKHB5X3NjYW5zdHJpbmcpOgorICAgICAgICAocHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNj
aWkpOgorICAgICAgICAoc2Nhbm5lcl9kZWFsbG9jKToKKyAgICAgICAgKHNjYW5uZXJfdHJhdmVy
c2UpOgorICAgICAgICAoc2Nhbm5lcl9jbGVhcik6CisgICAgICAgIChfcGFyc2Vfb2JqZWN0X3N0
cik6CisgICAgICAgIChfcGFyc2Vfb2JqZWN0X3VuaWNvZGUpOgorICAgICAgICAoX3BhcnNlX2Fy
cmF5X3N0cik6CisgICAgICAgIChfcGFyc2VfYXJyYXlfdW5pY29kZSk6CisgICAgICAgIChfcGFy
c2VfY29uc3RhbnQpOgorICAgICAgICAoX21hdGNoX251bWJlcl9zdHIpOgorICAgICAgICAoX21h
dGNoX251bWJlcl91bmljb2RlKToKKyAgICAgICAgKHNjYW5fb25jZV9zdHIpOgorICAgICAgICAo
c2Nhbl9vbmNlX3VuaWNvZGUpOgorICAgICAgICAoc2Nhbm5lcl9jYWxsKToKKyAgICAgICAgKHNj
YW5uZXJfbmV3KToKKyAgICAgICAgKHNjYW5uZXJfaW5pdCk6CisgICAgICAgIChlbmNvZGVyX25l
dyk6CisgICAgICAgIChlbmNvZGVyX2luaXQpOgorICAgICAgICAoZW5jb2Rlcl9jYWxsKToKKyAg
ICAgICAgKF9lbmNvZGVkX2NvbnN0KToKKyAgICAgICAgKGVuY29kZXJfZW5jb2RlX2Zsb2F0KToK
KyAgICAgICAgKGVuY29kZXJfZW5jb2RlX3N0cmluZyk6CisgICAgICAgIChfc3RlYWxfbGlzdF9h
cHBlbmQpOgorICAgICAgICAoZW5jb2Rlcl9saXN0ZW5jb2RlX29iaik6CisgICAgICAgIChlbmNv
ZGVyX2xpc3RlbmNvZGVfZGljdCk6CisgICAgICAgIChlbmNvZGVyX2xpc3RlbmNvZGVfbGlzdCk6
CisgICAgICAgIChlbmNvZGVyX2RlYWxsb2MpOgorICAgICAgICAoZW5jb2Rlcl90cmF2ZXJzZSk6
CisgICAgICAgIChlbmNvZGVyX2NsZWFyKToKKyAgICAgICAgKGluaXRfc3BlZWR1cHMpOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL2RlY29kZXIucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vZW5jb2Rl
ci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9v
cmRlcmVkX2RpY3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS9zaW1wbGVqc29uL3NjYW5uZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3NpbXBsZWpzb24vdG9vbC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90b29sL3NlcnZlcnMvcmVmbGVjdGlvbmhhbmRsZXIucHk6CisKIDIwMTEtMDctMTUg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBOUldUIHN0b3JlcyB0
aGUgQ2hyb21pdW0gcmV2aXNpb24gbnVtYmVyIGluIGZ1bGxfcmVzdWx0cy5qc29uCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9SRUFETUUu
dHh0IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vUkVBRE1F
LnR4dAppbmRleCA3ZjcyNmNlLi5hODgzNzE0IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9SRUFETUUudHh0CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL1JFQURNRS50eHQKQEAgLTEsNSArMSw1
IEBACiBVUkw6IGh0dHA6Ly91bmRlZmluZWQub3JnL3B5dGhvbi8jc2ltcGxlanNvbgotVmVyc2lv
bjogMS43LjMKK1ZlcnNpb246IDIuMS42CiBMaWNlbnNlOiBNSVQKIExpY2Vuc2UgRmlsZTogTElD
RU5TRS50eHQKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3NpbXBsZWpzb24vX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvc2ltcGxlanNvbi9fX2luaXRfXy5weQppbmRleCAzOGQ2MjI5Li4yMTBiOTU3IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9fX2luaXRf
Xy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9f
X2luaXRfXy5weQpAQCAtMSw5OSArMSwxMzAgQEAKLXIiIiIKLUEgc2ltcGxlLCBmYXN0LCBleHRl
bnNpYmxlIEpTT04gZW5jb2RlciBhbmQgZGVjb2RlcgotCi1KU09OIChKYXZhU2NyaXB0IE9iamVj
dCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz4gaXMgYSBzdWJzZXQgb2YKK3IiIiJKU09OIChK
YXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz4gaXMgYSBzdWJzZXQg
b2YKIEphdmFTY3JpcHQgc3ludGF4IChFQ01BLTI2MiAzcmQgZWRpdGlvbikgdXNlZCBhcyBhIGxp
Z2h0d2VpZ2h0IGRhdGEKIGludGVyY2hhbmdlIGZvcm1hdC4KIAotc2ltcGxlanNvbiBleHBvc2Vz
IGFuIEFQSSBmYW1pbGlhciB0byB1c2VzIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5Ci1tYXJzaGFs
IGFuZCBwaWNrbGUgbW9kdWxlcy4KKzptb2Q6YHNpbXBsZWpzb25gIGV4cG9zZXMgYW4gQVBJIGZh
bWlsaWFyIHRvIHVzZXJzIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5Cis6bW9kOmBtYXJzaGFsYCBh
bmQgOm1vZDpgcGlja2xlYCBtb2R1bGVzLiBJdCBpcyB0aGUgZXh0ZXJuYWxseSBtYWludGFpbmVk
Cit2ZXJzaW9uIG9mIHRoZSA6bW9kOmBqc29uYCBsaWJyYXJ5IGNvbnRhaW5lZCBpbiBQeXRob24g
Mi42LCBidXQgbWFpbnRhaW5zCitjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNCBhbmQgUHl0
aG9uIDIuNSBhbmQgKGN1cnJlbnRseSkgaGFzCitzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBhZHZh
bnRhZ2VzLCBldmVuIHdpdGhvdXQgdXNpbmcgdGhlIG9wdGlvbmFsIEMKK2V4dGVuc2lvbiBmb3Ig
c3BlZWR1cHMuCiAKIEVuY29kaW5nIGJhc2ljIFB5dGhvbiBvYmplY3QgaGllcmFyY2hpZXM6Ogot
ICAgIAotICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgotICAgID4+PiBzaW1wbGVqc29uLmR1bXBz
KFsnZm9vJywgeydiYXInOiAoJ2JheicsIE5vbmUsIDEuMCwgMil9XSkKKworICAgID4+PiBpbXBv
cnQgc2ltcGxlanNvbiBhcyBqc29uCisgICAgPj4+IGpzb24uZHVtcHMoWydmb28nLCB7J2Jhcic6
ICgnYmF6JywgTm9uZSwgMS4wLCAyKX1dKQogICAgICdbImZvbyIsIHsiYmFyIjogWyJiYXoiLCBu
dWxsLCAxLjAsIDJdfV0nCi0gICAgPj4+IHByaW50IHNpbXBsZWpzb24uZHVtcHMoIlwiZm9vXGJh
ciIpCisgICAgPj4+IHByaW50IGpzb24uZHVtcHMoIlwiZm9vXGJhciIpCiAgICAgIlwiZm9vXGJh
ciIKLSAgICA+Pj4gcHJpbnQgc2ltcGxlanNvbi5kdW1wcyh1J1x1MTIzNCcpCisgICAgPj4+IHBy
aW50IGpzb24uZHVtcHModSdcdTEyMzQnKQogICAgICJcdTEyMzQiCi0gICAgPj4+IHByaW50IHNp
bXBsZWpzb24uZHVtcHMoJ1xcJykKKyAgICA+Pj4gcHJpbnQganNvbi5kdW1wcygnXFwnKQogICAg
ICJcXCIKLSAgICA+Pj4gcHJpbnQgc2ltcGxlanNvbi5kdW1wcyh7ImMiOiAwLCAiYiI6IDAsICJh
IjogMH0sIHNvcnRfa2V5cz1UcnVlKQorICAgID4+PiBwcmludCBqc29uLmR1bXBzKHsiYyI6IDAs
ICJiIjogMCwgImEiOiAwfSwgc29ydF9rZXlzPVRydWUpCiAgICAgeyJhIjogMCwgImIiOiAwLCAi
YyI6IDB9CiAgICAgPj4+IGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiAgICAgPj4+IGlv
ID0gU3RyaW5nSU8oKQotICAgID4+PiBzaW1wbGVqc29uLmR1bXAoWydzdHJlYW1pbmcgQVBJJ10s
IGlvKQorICAgID4+PiBqc29uLmR1bXAoWydzdHJlYW1pbmcgQVBJJ10sIGlvKQogICAgID4+PiBp
by5nZXR2YWx1ZSgpCiAgICAgJ1sic3RyZWFtaW5nIEFQSSJdJwogCiBDb21wYWN0IGVuY29kaW5n
OjoKIAotICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgotICAgID4+PiBzaW1wbGVqc29uLmR1bXBz
KFsxLDIsMyx7JzQnOiA1LCAnNic6IDd9XSwgc2VwYXJhdG9ycz0oJywnLCc6JykpCisgICAgPj4+
IGltcG9ydCBzaW1wbGVqc29uIGFzIGpzb24KKyAgICA+Pj4ganNvbi5kdW1wcyhbMSwyLDMseyc0
JzogNSwgJzYnOiA3fV0sIHNlcGFyYXRvcnM9KCcsJywnOicpKQogICAgICdbMSwyLDMseyI0Ijo1
LCI2Ijo3fV0nCiAKIFByZXR0eSBwcmludGluZzo6CiAKLSAgICA+Pj4gaW1wb3J0IHNpbXBsZWpz
b24KLSAgICA+Pj4gcHJpbnQgc2ltcGxlanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0
X2tleXM9VHJ1ZSwgaW5kZW50PTQpCisgICAgPj4+IGltcG9ydCBzaW1wbGVqc29uIGFzIGpzb24K
KyAgICA+Pj4gcyA9IGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUs
IGluZGVudD0nICAgICcpCisgICAgPj4+IHByaW50ICdcbicuam9pbihbbC5yc3RyaXAoKSBmb3Ig
bCBpbiAgcy5zcGxpdGxpbmVzKCldKQogICAgIHsKLSAgICAgICAgIjQiOiA1LCAKKyAgICAgICAg
IjQiOiA1LAogICAgICAgICAiNiI6IDcKICAgICB9CiAKIERlY29kaW5nIEpTT046OgotICAgIAot
ICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgotICAgID4+PiBzaW1wbGVqc29uLmxvYWRzKCdbImZv
byIsIHsiYmFyIjpbImJheiIsIG51bGwsIDEuMCwgMl19XScpCi0gICAgW3UnZm9vJywge3UnYmFy
JzogW3UnYmF6JywgTm9uZSwgMS4wLCAyXX1dCi0gICAgPj4+IHNpbXBsZWpzb24ubG9hZHMoJyJc
XCJmb29cXGJhciInKQotICAgIHUnImZvb1x4MDhhcicKKworICAgID4+PiBpbXBvcnQgc2ltcGxl
anNvbiBhcyBqc29uCisgICAgPj4+IG9iaiA9IFt1J2ZvbycsIHt1J2Jhcic6IFt1J2JheicsIE5v
bmUsIDEuMCwgMl19XQorICAgID4+PiBqc29uLmxvYWRzKCdbImZvbyIsIHsiYmFyIjpbImJheiIs
IG51bGwsIDEuMCwgMl19XScpID09IG9iagorICAgIFRydWUKKyAgICA+Pj4ganNvbi5sb2Fkcygn
IlxcImZvb1xcYmFyIicpID09IHUnImZvb1x4MDhhcicKKyAgICBUcnVlCiAgICAgPj4+IGZyb20g
U3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiAgICAgPj4+IGlvID0gU3RyaW5nSU8oJ1sic3RyZWFt
aW5nIEFQSSJdJykKLSAgICA+Pj4gc2ltcGxlanNvbi5sb2FkKGlvKQotICAgIFt1J3N0cmVhbWlu
ZyBBUEknXQorICAgID4+PiBqc29uLmxvYWQoaW8pWzBdID09ICdzdHJlYW1pbmcgQVBJJworICAg
IFRydWUKIAogU3BlY2lhbGl6aW5nIEpTT04gb2JqZWN0IGRlY29kaW5nOjoKIAotICAgID4+PiBp
bXBvcnQgc2ltcGxlanNvbgorICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCiAgICAg
Pj4+IGRlZiBhc19jb21wbGV4KGRjdCk6CiAgICAgLi4uICAgICBpZiAnX19jb21wbGV4X18nIGlu
IGRjdDoKICAgICAuLi4gICAgICAgICByZXR1cm4gY29tcGxleChkY3RbJ3JlYWwnXSwgZGN0Wydp
bWFnJ10pCiAgICAgLi4uICAgICByZXR1cm4gZGN0Ci0gICAgLi4uIAotICAgID4+PiBzaW1wbGVq
c29uLmxvYWRzKCd7Il9fY29tcGxleF9fIjogdHJ1ZSwgInJlYWwiOiAxLCAiaW1hZyI6IDJ9JywK
KyAgICAuLi4KKyAgICA+Pj4ganNvbi5sb2FkcygneyJfX2NvbXBsZXhfXyI6IHRydWUsICJyZWFs
IjogMSwgImltYWciOiAyfScsCiAgICAgLi4uICAgICBvYmplY3RfaG9vaz1hc19jb21wbGV4KQog
ICAgICgxKzJqKQotCi1FeHRlbmRpbmcgSlNPTkVuY29kZXI6OgotICAgIAotICAgID4+PiBpbXBv
cnQgc2ltcGxlanNvbgotICAgID4+PiBjbGFzcyBDb21wbGV4RW5jb2RlcihzaW1wbGVqc29uLkpT
T05FbmNvZGVyKToKLSAgICAuLi4gICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9iaik6Ci0gICAgLi4u
ICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGNvbXBsZXgpOgotICAgIC4uLiAgICAgICAgICAg
ICByZXR1cm4gW29iai5yZWFsLCBvYmouaW1hZ10KLSAgICAuLi4gICAgICAgICByZXR1cm4gc2lt
cGxlanNvbi5KU09ORW5jb2Rlci5kZWZhdWx0KHNlbGYsIG9iaikKLSAgICAuLi4gCi0gICAgPj4+
IGR1bXBzKDIgKyAxaiwgY2xzPUNvbXBsZXhFbmNvZGVyKQorICAgID4+PiBmcm9tIGRlY2ltYWwg
aW1wb3J0IERlY2ltYWwKKyAgICA+Pj4ganNvbi5sb2FkcygnMS4xJywgcGFyc2VfZmxvYXQ9RGVj
aW1hbCkgPT0gRGVjaW1hbCgnMS4xJykKKyAgICBUcnVlCisKK1NwZWNpYWxpemluZyBKU09OIG9i
amVjdCBlbmNvZGluZzo6CisKKyAgICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgorICAg
ID4+PiBkZWYgZW5jb2RlX2NvbXBsZXgob2JqKToKKyAgICAuLi4gICAgIGlmIGlzaW5zdGFuY2Uo
b2JqLCBjb21wbGV4KToKKyAgICAuLi4gICAgICAgICByZXR1cm4gW29iai5yZWFsLCBvYmouaW1h
Z10KKyAgICAuLi4gICAgIHJhaXNlIFR5cGVFcnJvcihyZXByKG8pICsgIiBpcyBub3QgSlNPTiBz
ZXJpYWxpemFibGUiKQorICAgIC4uLgorICAgID4+PiBqc29uLmR1bXBzKDIgKyAxaiwgZGVmYXVs
dD1lbmNvZGVfY29tcGxleCkKKyAgICAnWzIuMCwgMS4wXScKKyAgICA+Pj4ganNvbi5KU09ORW5j
b2RlcihkZWZhdWx0PWVuY29kZV9jb21wbGV4KS5lbmNvZGUoMiArIDFqKQogICAgICdbMi4wLCAx
LjBdJwotICAgID4+PiBDb21wbGV4RW5jb2RlcigpLmVuY29kZSgyICsgMWopCisgICAgPj4+ICcn
LmpvaW4oanNvbi5KU09ORW5jb2RlcihkZWZhdWx0PWVuY29kZV9jb21wbGV4KS5pdGVyZW5jb2Rl
KDIgKyAxaikpCiAgICAgJ1syLjAsIDEuMF0nCi0gICAgPj4+IGxpc3QoQ29tcGxleEVuY29kZXIo
KS5pdGVyZW5jb2RlKDIgKyAxaikpCi0gICAgWydbJywgJzIuMCcsICcsICcsICcxLjAnLCAnXSdd
Ci0gICAgCiAKLU5vdGUgdGhhdCB0aGUgSlNPTiBwcm9kdWNlZCBieSB0aGlzIG1vZHVsZSdzIGRl
ZmF1bHQgc2V0dGluZ3MKLWlzIGEgc3Vic2V0IG9mIFlBTUwsIHNvIGl0IG1heSBiZSB1c2VkIGFz
IGEgc2VyaWFsaXplciBmb3IgdGhhdCBhcyB3ZWxsLgorCitVc2luZyBzaW1wbGVqc29uLnRvb2wg
ZnJvbSB0aGUgc2hlbGwgdG8gdmFsaWRhdGUgYW5kIHByZXR0eS1wcmludDo6CisKKyAgICAkIGVj
aG8gJ3sianNvbiI6Im9iaiJ9JyB8IHB5dGhvbiAtbSBzaW1wbGVqc29uLnRvb2wKKyAgICB7Cisg
ICAgICAgICJqc29uIjogIm9iaiIKKyAgICB9CisgICAgJCBlY2hvICd7IDEuMjozLjR9JyB8IHB5
dGhvbiAtbSBzaW1wbGVqc29uLnRvb2wKKyAgICBFeHBlY3RpbmcgcHJvcGVydHkgbmFtZTogbGlu
ZSAxIGNvbHVtbiAyIChjaGFyIDIpCiAiIiIKLV9fdmVyc2lvbl9fID0gJzEuNy4zJworX192ZXJz
aW9uX18gPSAnMi4xLjYnCiBfX2FsbF9fID0gWwogICAgICdkdW1wJywgJ2R1bXBzJywgJ2xvYWQn
LCAnbG9hZHMnLAotICAgICdKU09ORGVjb2RlcicsICdKU09ORW5jb2RlcicsCisgICAgJ0pTT05E
ZWNvZGVyJywgJ0pTT05EZWNvZGVFcnJvcicsICdKU09ORW5jb2RlcicsCisgICAgJ09yZGVyZWRE
aWN0JywKIF0KIAotZnJvbSBkZWNvZGVyIGltcG9ydCBKU09ORGVjb2RlcgorX19hdXRob3JfXyA9
ICdCb2IgSXBwb2xpdG8gPGJvYkByZWRpdmkuY29tPicKKworZnJvbSBkZWNpbWFsIGltcG9ydCBE
ZWNpbWFsCisKK2Zyb20gZGVjb2RlciBpbXBvcnQgSlNPTkRlY29kZXIsIEpTT05EZWNvZGVFcnJv
cgogZnJvbSBlbmNvZGVyIGltcG9ydCBKU09ORW5jb2RlcgorZGVmIF9pbXBvcnRfT3JkZXJlZERp
Y3QoKToKKyAgICBpbXBvcnQgY29sbGVjdGlvbnMKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBj
b2xsZWN0aW9ucy5PcmRlcmVkRGljdAorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAg
ICAgaW1wb3J0IG9yZGVyZWRfZGljdAorICAgICAgICByZXR1cm4gb3JkZXJlZF9kaWN0Lk9yZGVy
ZWREaWN0CitPcmRlcmVkRGljdCA9IF9pbXBvcnRfT3JkZXJlZERpY3QoKQorCitkZWYgX2ltcG9y
dF9jX21ha2VfZW5jb2RlcigpOgorICAgIHRyeToKKyAgICAgICAgZnJvbSBzaW1wbGVqc29uLl9z
cGVlZHVwcyBpbXBvcnQgbWFrZV9lbmNvZGVyCisgICAgICAgIHJldHVybiBtYWtlX2VuY29kZXIK
KyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCiAKIF9kZWZhdWx0
X2VuY29kZXIgPSBKU09ORW5jb2RlcigKICAgICBza2lwa2V5cz1GYWxzZSwKQEAgLTEwMiwzOCAr
MTMzLDQyIEBAIF9kZWZhdWx0X2VuY29kZXIgPSBKU09ORW5jb2RlcigKICAgICBhbGxvd19uYW49
VHJ1ZSwKICAgICBpbmRlbnQ9Tm9uZSwKICAgICBzZXBhcmF0b3JzPU5vbmUsCi0gICAgZW5jb2Rp
bmc9J3V0Zi04JworICAgIGVuY29kaW5nPSd1dGYtOCcsCisgICAgZGVmYXVsdD1Ob25lLAorICAg
IHVzZV9kZWNpbWFsPUZhbHNlLAogKQogCiBkZWYgZHVtcChvYmosIGZwLCBza2lwa2V5cz1GYWxz
ZSwgZW5zdXJlX2FzY2lpPVRydWUsIGNoZWNrX2NpcmN1bGFyPVRydWUsCiAgICAgICAgIGFsbG93
X25hbj1UcnVlLCBjbHM9Tm9uZSwgaW5kZW50PU5vbmUsIHNlcGFyYXRvcnM9Tm9uZSwKLSAgICAg
ICAgZW5jb2Rpbmc9J3V0Zi04JywgKiprdyk6Ci0gICAgIiIiCi0gICAgU2VyaWFsaXplIGBgb2Jq
YGAgYXMgYSBKU09OIGZvcm1hdHRlZCBzdHJlYW0gdG8gYGBmcGBgIChhCisgICAgICAgIGVuY29k
aW5nPSd1dGYtOCcsIGRlZmF1bHQ9Tm9uZSwgdXNlX2RlY2ltYWw9RmFsc2UsICoqa3cpOgorICAg
ICIiIlNlcmlhbGl6ZSBgYG9iamBgIGFzIGEgSlNPTiBmb3JtYXR0ZWQgc3RyZWFtIHRvIGBgZnBg
YCAoYQogICAgIGBgLndyaXRlKClgYC1zdXBwb3J0aW5nIGZpbGUtbGlrZSBvYmplY3QpLgogCi0g
ICAgSWYgYGBza2lwa2V5c2BgIGlzIGBgVHJ1ZWBgIHRoZW4gYGBkaWN0YGAga2V5cyB0aGF0IGFy
ZSBub3QgYmFzaWMgdHlwZXMKLSAgICAoYGBzdHJgYCwgYGB1bmljb2RlYGAsIGBgaW50YGAsIGBg
bG9uZ2BgLCBgYGZsb2F0YGAsIGBgYm9vbGBgLCBgYE5vbmVgYCkgCisgICAgSWYgYGBza2lwa2V5
c2BgIGlzIHRydWUgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcwor
ICAgIChgYHN0cmBgLCBgYHVuaWNvZGVgYCwgYGBpbnRgYCwgYGBsb25nYGAsIGBgZmxvYXRgYCwg
YGBib29sYGAsIGBgTm9uZWBgKQogICAgIHdpbGwgYmUgc2tpcHBlZCBpbnN0ZWFkIG9mIHJhaXNp
bmcgYSBgYFR5cGVFcnJvcmBgLgogCi0gICAgSWYgYGBlbnN1cmVfYXNjaWlgYCBpcyBgYEZhbHNl
YGAsIHRoZW4gdGhlIHNvbWUgY2h1bmtzIHdyaXR0ZW4gdG8gYGBmcGBgCisgICAgSWYgYGBlbnN1
cmVfYXNjaWlgYCBpcyBmYWxzZSwgdGhlbiB0aGUgc29tZSBjaHVua3Mgd3JpdHRlbiB0byBgYGZw
YGAKICAgICBtYXkgYmUgYGB1bmljb2RlYGAgaW5zdGFuY2VzLCBzdWJqZWN0IHRvIG5vcm1hbCBQ
eXRob24gYGBzdHJgYCB0bwogICAgIGBgdW5pY29kZWBgIGNvZXJjaW9uIHJ1bGVzLiBVbmxlc3Mg
YGBmcC53cml0ZSgpYGAgZXhwbGljaXRseQogICAgIHVuZGVyc3RhbmRzIGBgdW5pY29kZWBgIChh
cyBpbiBgYGNvZGVjcy5nZXR3cml0ZXIoKWBgKSB0aGlzIGlzIGxpa2VseQogICAgIHRvIGNhdXNl
IGFuIGVycm9yLgogCi0gICAgSWYgYGBjaGVja19jaXJjdWxhcmBgIGlzIGBgRmFsc2VgYCwgdGhl
biB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCisgICAgSWYgYGBjaGVja19jaXJjdWxhcmBg
IGlzIGZhbHNlLCB0aGVuIHRoZSBjaXJjdWxhciByZWZlcmVuY2UgY2hlY2sKICAgICBmb3IgY29u
dGFpbmVyIHR5cGVzIHdpbGwgYmUgc2tpcHBlZCBhbmQgYSBjaXJjdWxhciByZWZlcmVuY2Ugd2ls
bAogICAgIHJlc3VsdCBpbiBhbiBgYE92ZXJmbG93RXJyb3JgYCAob3Igd29yc2UpLgogCi0gICAg
SWYgYGBhbGxvd19uYW5gYCBpcyBgYEZhbHNlYGAsIHRoZW4gaXQgd2lsbCBiZSBhIGBgVmFsdWVF
cnJvcmBgIHRvCisgICAgSWYgYGBhbGxvd19uYW5gYCBpcyBmYWxzZSwgdGhlbiBpdCB3aWxsIGJl
IGEgYGBWYWx1ZUVycm9yYGAgdG8KICAgICBzZXJpYWxpemUgb3V0IG9mIHJhbmdlIGBgZmxvYXRg
YCB2YWx1ZXMgKGBgbmFuYGAsIGBgaW5mYGAsIGBgLWluZmBgKQogICAgIGluIHN0cmljdCBjb21w
bGlhbmNlIG9mIHRoZSBKU09OIHNwZWNpZmljYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgdGhlCiAg
ICAgSmF2YVNjcmlwdCBlcXVpdmFsZW50cyAoYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBgYC1JbmZp
bml0eWBgKS4KIAotICAgIElmIGBgaW5kZW50YGAgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwg
dGhlbiBKU09OIGFycmF5IGVsZW1lbnRzIGFuZCBvYmplY3QKLSAgICBtZW1iZXJzIHdpbGwgYmUg
cHJldHR5LXByaW50ZWQgd2l0aCB0aGF0IGluZGVudCBsZXZlbC4gQW4gaW5kZW50IGxldmVsCi0g
ICAgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiBgYE5vbmVgYCBpcyB0aGUgbW9zdCBj
b21wYWN0IHJlcHJlc2VudGF0aW9uLgorICAgIElmICppbmRlbnQqIGlzIGEgc3RyaW5nLCB0aGVu
IEpTT04gYXJyYXkgZWxlbWVudHMgYW5kIG9iamVjdCBtZW1iZXJzCisgICAgd2lsbCBiZSBwcmV0
dHktcHJpbnRlZCB3aXRoIGEgbmV3bGluZSBmb2xsb3dlZCBieSB0aGF0IHN0cmluZyByZXBlYXRl
ZAorICAgIGZvciBlYWNoIGxldmVsIG9mIG5lc3RpbmcuIGBgTm9uZWBgICh0aGUgZGVmYXVsdCkg
c2VsZWN0cyB0aGUgbW9zdCBjb21wYWN0CisgICAgcmVwcmVzZW50YXRpb24gd2l0aG91dCBhbnkg
bmV3bGluZXMuIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoCisgICAgdmVyc2lvbnMg
b2Ygc2ltcGxlanNvbiBlYXJsaWVyIHRoYW4gMi4xLjAsIGFuIGludGVnZXIgaXMgYWxzbyBhY2Nl
cHRlZAorICAgIGFuZCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgd2l0aCB0aGF0IG1hbnkgc3Bh
Y2VzLgogCiAgICAgSWYgYGBzZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRp
Y3Rfc2VwYXJhdG9yKWBgIHR1cGxlCiAgICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBv
ZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCkBAIC0xNDEsMjIgKzE3
NiwzMSBAQCBkZWYgZHVtcChvYmosIGZwLCBza2lwa2V5cz1GYWxzZSwgZW5zdXJlX2FzY2lpPVRy
dWUsIGNoZWNrX2NpcmN1bGFyPVRydWUsCiAKICAgICBgYGVuY29kaW5nYGAgaXMgdGhlIGNoYXJh
Y3RlciBlbmNvZGluZyBmb3Igc3RyIGluc3RhbmNlcywgZGVmYXVsdCBpcyBVVEYtOC4KIAorICAg
IGBgZGVmYXVsdChvYmopYGAgaXMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCByZXR1cm4gYSBzZXJp
YWxpemFibGUgdmVyc2lvbgorICAgIG9mIG9iaiBvciByYWlzZSBUeXBlRXJyb3IuIFRoZSBkZWZh
dWx0IHNpbXBseSByYWlzZXMgVHlwZUVycm9yLgorCisgICAgSWYgKnVzZV9kZWNpbWFsKiBpcyB0
cnVlIChkZWZhdWx0OiBgYEZhbHNlYGApIHRoZW4gZGVjaW1hbC5EZWNpbWFsCisgICAgd2lsbCBi
ZSBuYXRpdmVseSBzZXJpYWxpemVkIHRvIEpTT04gd2l0aCBmdWxsIHByZWNpc2lvbi4KKwogICAg
IFRvIHVzZSBhIGN1c3RvbSBgYEpTT05FbmNvZGVyYGAgc3ViY2xhc3MgKGUuZy4gb25lIHRoYXQg
b3ZlcnJpZGVzIHRoZQogICAgIGBgLmRlZmF1bHQoKWBgIG1ldGhvZCB0byBzZXJpYWxpemUgYWRk
aXRpb25hbCB0eXBlcyksIHNwZWNpZnkgaXQgd2l0aAogICAgIHRoZSBgYGNsc2BgIGt3YXJnLgor
CiAgICAgIiIiCiAgICAgIyBjYWNoZWQgZW5jb2RlcgotICAgIGlmIChza2lwa2V5cyBpcyBGYWxz
ZSBhbmQgZW5zdXJlX2FzY2lpIGlzIFRydWUgYW5kCi0gICAgICAgIGNoZWNrX2NpcmN1bGFyIGlz
IFRydWUgYW5kIGFsbG93X25hbiBpcyBUcnVlIGFuZAorICAgIGlmIChub3Qgc2tpcGtleXMgYW5k
IGVuc3VyZV9hc2NpaSBhbmQKKyAgICAgICAgY2hlY2tfY2lyY3VsYXIgYW5kIGFsbG93X25hbiBh
bmQKICAgICAgICAgY2xzIGlzIE5vbmUgYW5kIGluZGVudCBpcyBOb25lIGFuZCBzZXBhcmF0b3Jz
IGlzIE5vbmUgYW5kCi0gICAgICAgIGVuY29kaW5nID09ICd1dGYtOCcgYW5kIG5vdCBrdyk6Cisg
ICAgICAgIGVuY29kaW5nID09ICd1dGYtOCcgYW5kIGRlZmF1bHQgaXMgTm9uZSBhbmQgbm90IHVz
ZV9kZWNpbWFsCisgICAgICAgIGFuZCBub3Qga3cpOgogICAgICAgICBpdGVyYWJsZSA9IF9kZWZh
dWx0X2VuY29kZXIuaXRlcmVuY29kZShvYmopCiAgICAgZWxzZToKICAgICAgICAgaWYgY2xzIGlz
IE5vbmU6CiAgICAgICAgICAgICBjbHMgPSBKU09ORW5jb2RlcgogICAgICAgICBpdGVyYWJsZSA9
IGNscyhza2lwa2V5cz1za2lwa2V5cywgZW5zdXJlX2FzY2lpPWVuc3VyZV9hc2NpaSwKICAgICAg
ICAgICAgIGNoZWNrX2NpcmN1bGFyPWNoZWNrX2NpcmN1bGFyLCBhbGxvd19uYW49YWxsb3dfbmFu
LCBpbmRlbnQ9aW5kZW50LAotICAgICAgICAgICAgc2VwYXJhdG9ycz1zZXBhcmF0b3JzLCBlbmNv
ZGluZz1lbmNvZGluZywgKiprdykuaXRlcmVuY29kZShvYmopCisgICAgICAgICAgICBzZXBhcmF0
b3JzPXNlcGFyYXRvcnMsIGVuY29kaW5nPWVuY29kaW5nLAorICAgICAgICAgICAgZGVmYXVsdD1k
ZWZhdWx0LCB1c2VfZGVjaW1hbD11c2VfZGVjaW1hbCwgKiprdykuaXRlcmVuY29kZShvYmopCiAg
ICAgIyBjb3VsZCBhY2NlbGVyYXRlIHdpdGggd3JpdGVsaW5lcyBpbiBzb21lIHZlcnNpb25zIG9m
IFB5dGhvbiwgYXQKICAgICAjIGEgZGVidWdnYWJpbGl0eSBjb3N0CiAgICAgZm9yIGNodW5rIGlu
IGl0ZXJhYmxlOgpAQCAtMTY1LDMxICsyMDksMzIgQEAgZGVmIGR1bXAob2JqLCBmcCwgc2tpcGtl
eXM9RmFsc2UsIGVuc3VyZV9hc2NpaT1UcnVlLCBjaGVja19jaXJjdWxhcj1UcnVlLAogCiBkZWYg
ZHVtcHMob2JqLCBza2lwa2V5cz1GYWxzZSwgZW5zdXJlX2FzY2lpPVRydWUsIGNoZWNrX2NpcmN1
bGFyPVRydWUsCiAgICAgICAgIGFsbG93X25hbj1UcnVlLCBjbHM9Tm9uZSwgaW5kZW50PU5vbmUs
IHNlcGFyYXRvcnM9Tm9uZSwKLSAgICAgICAgZW5jb2Rpbmc9J3V0Zi04JywgKiprdyk6Ci0gICAg
IiIiCi0gICAgU2VyaWFsaXplIGBgb2JqYGAgdG8gYSBKU09OIGZvcm1hdHRlZCBgYHN0cmBgLgor
ICAgICAgICBlbmNvZGluZz0ndXRmLTgnLCBkZWZhdWx0PU5vbmUsIHVzZV9kZWNpbWFsPUZhbHNl
LCAqKmt3KToKKyAgICAiIiJTZXJpYWxpemUgYGBvYmpgYCB0byBhIEpTT04gZm9ybWF0dGVkIGBg
c3RyYGAuCiAKLSAgICBJZiBgYHNraXBrZXlzYGAgaXMgYGBUcnVlYGAgdGhlbiBgYGRpY3RgYCBr
ZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcwotICAgIChgYHN0cmBgLCBgYHVuaWNvZGVgYCwg
YGBpbnRgYCwgYGBsb25nYGAsIGBgZmxvYXRgYCwgYGBib29sYGAsIGBgTm9uZWBgKSAKKyAgICBJ
ZiBgYHNraXBrZXlzYGAgaXMgZmFsc2UgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBi
YXNpYyB0eXBlcworICAgIChgYHN0cmBgLCBgYHVuaWNvZGVgYCwgYGBpbnRgYCwgYGBsb25nYGAs
IGBgZmxvYXRgYCwgYGBib29sYGAsIGBgTm9uZWBgKQogICAgIHdpbGwgYmUgc2tpcHBlZCBpbnN0
ZWFkIG9mIHJhaXNpbmcgYSBgYFR5cGVFcnJvcmBgLgogCi0gICAgSWYgYGBlbnN1cmVfYXNjaWlg
YCBpcyBgYEZhbHNlYGAsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEKKyAgICBJZiBg
YGVuc3VyZV9hc2NpaWBgIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBh
CiAgICAgYGB1bmljb2RlYGAgaW5zdGFuY2Ugc3ViamVjdCB0byBub3JtYWwgUHl0aG9uIGBgc3Ry
YGAgdG8gYGB1bmljb2RlYGAKICAgICBjb2VyY2lvbiBydWxlcyBpbnN0ZWFkIG9mIGJlaW5nIGVz
Y2FwZWQgdG8gYW4gQVNDSUkgYGBzdHJgYC4KIAotICAgIElmIGBgY2hlY2tfY2lyY3VsYXJgYCBp
cyBgYEZhbHNlYGAsIHRoZW4gdGhlIGNpcmN1bGFyIHJlZmVyZW5jZSBjaGVjaworICAgIElmIGBg
Y2hlY2tfY2lyY3VsYXJgYCBpcyBmYWxzZSwgdGhlbiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNo
ZWNrCiAgICAgZm9yIGNvbnRhaW5lciB0eXBlcyB3aWxsIGJlIHNraXBwZWQgYW5kIGEgY2lyY3Vs
YXIgcmVmZXJlbmNlIHdpbGwKICAgICByZXN1bHQgaW4gYW4gYGBPdmVyZmxvd0Vycm9yYGAgKG9y
IHdvcnNlKS4KIAotICAgIElmIGBgYWxsb3dfbmFuYGAgaXMgYGBGYWxzZWBgLCB0aGVuIGl0IHdp
bGwgYmUgYSBgYFZhbHVlRXJyb3JgYCB0bworICAgIElmIGBgYWxsb3dfbmFuYGAgaXMgZmFsc2Us
IHRoZW4gaXQgd2lsbCBiZSBhIGBgVmFsdWVFcnJvcmBgIHRvCiAgICAgc2VyaWFsaXplIG91dCBv
ZiByYW5nZSBgYGZsb2F0YGAgdmFsdWVzIChgYG5hbmBgLCBgYGluZmBgLCBgYC1pbmZgYCkgaW4K
ICAgICBzdHJpY3QgY29tcGxpYW5jZSBvZiB0aGUgSlNPTiBzcGVjaWZpY2F0aW9uLCBpbnN0ZWFk
IG9mIHVzaW5nIHRoZQogICAgIEphdmFTY3JpcHQgZXF1aXZhbGVudHMgKGBgTmFOYGAsIGBgSW5m
aW5pdHlgYCwgYGAtSW5maW5pdHlgYCkuCiAKLSAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5l
Z2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQKLSAgICBvYmplY3Qg
bWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFu
IGluZGVudAotICAgIGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25l
YGAgaXMgdGhlIG1vc3QgY29tcGFjdAotICAgIHJlcHJlc2VudGF0aW9uLgorICAgIElmIGBgaW5k
ZW50YGAgaXMgYSBzdHJpbmcsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQgb2JqZWN0IG1l
bWJlcnMKKyAgICB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggYSBuZXdsaW5lIGZvbGxvd2Vk
IGJ5IHRoYXQgc3RyaW5nIHJlcGVhdGVkCisgICAgZm9yIGVhY2ggbGV2ZWwgb2YgbmVzdGluZy4g
YGBOb25lYGAgKHRoZSBkZWZhdWx0KSBzZWxlY3RzIHRoZSBtb3N0IGNvbXBhY3QKKyAgICByZXBy
ZXNlbnRhdGlvbiB3aXRob3V0IGFueSBuZXdsaW5lcy4gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmls
aXR5IHdpdGgKKyAgICB2ZXJzaW9ucyBvZiBzaW1wbGVqc29uIGVhcmxpZXIgdGhhbiAyLjEuMCwg
YW4gaW50ZWdlciBpcyBhbHNvIGFjY2VwdGVkCisgICAgYW5kIGlzIGNvbnZlcnRlZCB0byBhIHN0
cmluZyB3aXRoIHRoYXQgbWFueSBzcGFjZXMuCiAKICAgICBJZiBgYHNlcGFyYXRvcnNgYCBpcyBh
biBgYChpdGVtX3NlcGFyYXRvciwgZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUKICAgICB0aGVuIGl0
IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2Vw
YXJhdG9ycy4KQEAgLTE5Nyw5MSArMjQyLDE5NyBAQCBkZWYgZHVtcHMob2JqLCBza2lwa2V5cz1G
YWxzZSwgZW5zdXJlX2FzY2lpPVRydWUsIGNoZWNrX2NpcmN1bGFyPVRydWUsCiAKICAgICBgYGVu
Y29kaW5nYGAgaXMgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBmb3Igc3RyIGluc3RhbmNlcywgZGVm
YXVsdCBpcyBVVEYtOC4KIAorICAgIGBgZGVmYXVsdChvYmopYGAgaXMgYSBmdW5jdGlvbiB0aGF0
IHNob3VsZCByZXR1cm4gYSBzZXJpYWxpemFibGUgdmVyc2lvbgorICAgIG9mIG9iaiBvciByYWlz
ZSBUeXBlRXJyb3IuIFRoZSBkZWZhdWx0IHNpbXBseSByYWlzZXMgVHlwZUVycm9yLgorCisgICAg
SWYgKnVzZV9kZWNpbWFsKiBpcyB0cnVlIChkZWZhdWx0OiBgYEZhbHNlYGApIHRoZW4gZGVjaW1h
bC5EZWNpbWFsCisgICAgd2lsbCBiZSBuYXRpdmVseSBzZXJpYWxpemVkIHRvIEpTT04gd2l0aCBm
dWxsIHByZWNpc2lvbi4KKwogICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05FbmNvZGVyYGAgc3Vi
Y2xhc3MgKGUuZy4gb25lIHRoYXQgb3ZlcnJpZGVzIHRoZQogICAgIGBgLmRlZmF1bHQoKWBgIG1l
dGhvZCB0byBzZXJpYWxpemUgYWRkaXRpb25hbCB0eXBlcyksIHNwZWNpZnkgaXQgd2l0aAogICAg
IHRoZSBgYGNsc2BgIGt3YXJnLgorCiAgICAgIiIiCiAgICAgIyBjYWNoZWQgZW5jb2RlcgotICAg
IGlmIChza2lwa2V5cyBpcyBGYWxzZSBhbmQgZW5zdXJlX2FzY2lpIGlzIFRydWUgYW5kCi0gICAg
ICAgIGNoZWNrX2NpcmN1bGFyIGlzIFRydWUgYW5kIGFsbG93X25hbiBpcyBUcnVlIGFuZAorICAg
IGlmIChub3Qgc2tpcGtleXMgYW5kIGVuc3VyZV9hc2NpaSBhbmQKKyAgICAgICAgY2hlY2tfY2ly
Y3VsYXIgYW5kIGFsbG93X25hbiBhbmQKICAgICAgICAgY2xzIGlzIE5vbmUgYW5kIGluZGVudCBp
cyBOb25lIGFuZCBzZXBhcmF0b3JzIGlzIE5vbmUgYW5kCi0gICAgICAgIGVuY29kaW5nID09ICd1
dGYtOCcgYW5kIG5vdCBrdyk6CisgICAgICAgIGVuY29kaW5nID09ICd1dGYtOCcgYW5kIGRlZmF1
bHQgaXMgTm9uZSBhbmQgbm90IHVzZV9kZWNpbWFsCisgICAgICAgIGFuZCBub3Qga3cpOgogICAg
ICAgICByZXR1cm4gX2RlZmF1bHRfZW5jb2Rlci5lbmNvZGUob2JqKQogICAgIGlmIGNscyBpcyBO
b25lOgogICAgICAgICBjbHMgPSBKU09ORW5jb2RlcgogICAgIHJldHVybiBjbHMoCiAgICAgICAg
IHNraXBrZXlzPXNraXBrZXlzLCBlbnN1cmVfYXNjaWk9ZW5zdXJlX2FzY2lpLAogICAgICAgICBj
aGVja19jaXJjdWxhcj1jaGVja19jaXJjdWxhciwgYWxsb3dfbmFuPWFsbG93X25hbiwgaW5kZW50
PWluZGVudCwKLSAgICAgICAgc2VwYXJhdG9ycz1zZXBhcmF0b3JzLCBlbmNvZGluZz1lbmNvZGlu
ZywKLSAgICAgICAgKiprdykuZW5jb2RlKG9iaikKKyAgICAgICAgc2VwYXJhdG9ycz1zZXBhcmF0
b3JzLCBlbmNvZGluZz1lbmNvZGluZywgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICB1c2VfZGVj
aW1hbD11c2VfZGVjaW1hbCwgKiprdykuZW5jb2RlKG9iaikKIAotX2RlZmF1bHRfZGVjb2RlciA9
IEpTT05EZWNvZGVyKGVuY29kaW5nPU5vbmUsIG9iamVjdF9ob29rPU5vbmUpCiAKLWRlZiBsb2Fk
KGZwLCBlbmNvZGluZz1Ob25lLCBjbHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgKiprdyk6Ci0g
ICAgIiIiCi0gICAgRGVzZXJpYWxpemUgYGBmcGBgIChhIGBgLnJlYWQoKWBgLXN1cHBvcnRpbmcg
ZmlsZS1saWtlIG9iamVjdCBjb250YWluaW5nCitfZGVmYXVsdF9kZWNvZGVyID0gSlNPTkRlY29k
ZXIoZW5jb2Rpbmc9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3RfcGFpcnNfaG9vaz1Ob25lKQorCisKK2RlZiBsb2FkKGZwLCBlbmNv
ZGluZz1Ob25lLCBjbHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgcGFyc2VfZmxvYXQ9Tm9uZSwK
KyAgICAgICAgcGFyc2VfaW50PU5vbmUsIHBhcnNlX2NvbnN0YW50PU5vbmUsIG9iamVjdF9wYWly
c19ob29rPU5vbmUsCisgICAgICAgIHVzZV9kZWNpbWFsPUZhbHNlLCAqKmt3KToKKyAgICAiIiJE
ZXNlcmlhbGl6ZSBgYGZwYGAgKGEgYGAucmVhZCgpYGAtc3VwcG9ydGluZyBmaWxlLWxpa2Ugb2Jq
ZWN0IGNvbnRhaW5pbmcKICAgICBhIEpTT04gZG9jdW1lbnQpIHRvIGEgUHl0aG9uIG9iamVjdC4K
IAotICAgIElmIHRoZSBjb250ZW50cyBvZiBgYGZwYGAgaXMgZW5jb2RlZCB3aXRoIGFuIEFTQ0lJ
IGJhc2VkIGVuY29kaW5nIG90aGVyCi0gICAgdGhhbiB1dGYtOCAoZS5nLiBsYXRpbi0xKSwgdGhl
biBhbiBhcHByb3ByaWF0ZSBgYGVuY29kaW5nYGAgbmFtZSBtdXN0Ci0gICAgYmUgc3BlY2lmaWVk
LiBFbmNvZGluZ3MgdGhhdCBhcmUgbm90IEFTQ0lJIGJhc2VkIChzdWNoIGFzIFVDUy0yKSBhcmUK
LSAgICBub3QgYWxsb3dlZCwgYW5kIHNob3VsZCBiZSB3cmFwcGVkIHdpdGgKLSAgICBgYGNvZGVj
cy5nZXRyZWFkZXIoZnApKGVuY29kaW5nKWBgLCBvciBzaW1wbHkgZGVjb2RlZCB0byBhIGBgdW5p
Y29kZWBgCi0gICAgb2JqZWN0IGFuZCBwYXNzZWQgdG8gYGBsb2FkcygpYGAKLQotICAgIGBgb2Jq
ZWN0X2hvb2tgYCBpcyBhbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdp
dGggdGhlCi0gICAgcmVzdWx0IG9mIGFueSBvYmplY3QgbGl0ZXJhbCBkZWNvZGUgKGEgYGBkaWN0
YGApLiBUaGUgcmV0dXJuIHZhbHVlIG9mCi0gICAgYGBvYmplY3RfaG9va2BgIHdpbGwgYmUgdXNl
ZCBpbnN0ZWFkIG9mIHRoZSBgYGRpY3RgYC4gVGhpcyBmZWF0dXJlCi0gICAgY2FuIGJlIHVzZWQg
dG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycyAoZS5nLiBKU09OLVJQQyBjbGFzcyBoaW50aW5n
KS4KLSAgICAKKyAgICAqZW5jb2RpbmcqIGRldGVybWluZXMgdGhlIGVuY29kaW5nIHVzZWQgdG8g
aW50ZXJwcmV0IGFueQorICAgIDpjbGFzczpgc3RyYCBvYmplY3RzIGRlY29kZWQgYnkgdGhpcyBp
bnN0YW5jZSAoYGAndXRmLTgnYGAgYnkKKyAgICBkZWZhdWx0KS4gIEl0IGhhcyBubyBlZmZlY3Qg
d2hlbiBkZWNvZGluZyA6Y2xhc3M6YHVuaWNvZGVgIG9iamVjdHMuCisKKyAgICBOb3RlIHRoYXQg
Y3VycmVudGx5IG9ubHkgZW5jb2RpbmdzIHRoYXQgYXJlIGEgc3VwZXJzZXQgb2YgQVNDSUkgd29y
aywKKyAgICBzdHJpbmdzIG9mIG90aGVyIGVuY29kaW5ncyBzaG91bGQgYmUgcGFzc2VkIGluIGFz
IDpjbGFzczpgdW5pY29kZWAuCisKKyAgICAqb2JqZWN0X2hvb2sqLCBpZiBzcGVjaWZpZWQsIHdp
bGwgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiBldmVyeQorICAgIEpTT04gb2JqZWN0IGRl
Y29kZWQgYW5kIGl0cyByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZQor
ICAgIGdpdmVuIDpjbGFzczpgZGljdGAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgY3Vz
dG9tCisgICAgZGVzZXJpYWxpemF0aW9ucyAoZS5nLiB0byBzdXBwb3J0IEpTT04tUlBDIGNsYXNz
IGhpbnRpbmcpLgorCisgICAgKm9iamVjdF9wYWlyc19ob29rKiBpcyBhbiBvcHRpb25hbCBmdW5j
dGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGgKKyAgICB0aGUgcmVzdWx0IG9mIGFueSBvYmpl
Y3QgbGl0ZXJhbCBkZWNvZGUgd2l0aCBhbiBvcmRlcmVkIGxpc3Qgb2YgcGFpcnMuCisgICAgVGhl
IHJldHVybiB2YWx1ZSBvZiAqb2JqZWN0X3BhaXJzX2hvb2sqIHdpbGwgYmUgdXNlZCBpbnN0ZWFk
IG9mIHRoZQorICAgIDpjbGFzczpgZGljdGAuICBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8g
aW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycworICAgIHRoYXQgcmVseSBvbiB0aGUgb3JkZXIgdGhh
dCB0aGUga2V5IGFuZCB2YWx1ZSBwYWlycyBhcmUgZGVjb2RlZCAoZm9yCisgICAgZXhhbXBsZSwg
OmZ1bmM6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCB3aWxsIHJlbWVtYmVyIHRoZSBvcmRlciBv
ZgorICAgIGluc2VydGlvbikuIElmICpvYmplY3RfaG9vayogaXMgYWxzbyBkZWZpbmVkLCB0aGUg
Km9iamVjdF9wYWlyc19ob29rKgorICAgIHRha2VzIHByaW9yaXR5LgorCisgICAgKnBhcnNlX2Zs
b2F0KiwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBzdHJpbmcgb2YgZXZl
cnkKKyAgICBKU09OIGZsb2F0IHRvIGJlIGRlY29kZWQuICBCeSBkZWZhdWx0LCB0aGlzIGlzIGVx
dWl2YWxlbnQgdG8KKyAgICBgYGZsb2F0KG51bV9zdHIpYGAuIFRoaXMgY2FuIGJlIHVzZWQgdG8g
dXNlIGFub3RoZXIgZGF0YXR5cGUgb3IgcGFyc2VyCisgICAgZm9yIEpTT04gZmxvYXRzIChlLmcu
IDpjbGFzczpgZGVjaW1hbC5EZWNpbWFsYCkuCisKKyAgICAqcGFyc2VfaW50KiwgaWYgc3BlY2lm
aWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBzdHJpbmcgb2YgZXZlcnkKKyAgICBKU09OIGlu
dCB0byBiZSBkZWNvZGVkLiAgQnkgZGVmYXVsdCwgdGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAg
YGBpbnQobnVtX3N0cilgYC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gdXNlIGFub3RoZXIgZGF0YXR5
cGUgb3IgcGFyc2VyCisgICAgZm9yIEpTT04gaW50ZWdlcnMgKGUuZy4gOmNsYXNzOmBmbG9hdGAp
LgorCisgICAgKnBhcnNlX2NvbnN0YW50KiwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3
aXRoIG9uZSBvZiB0aGUKKyAgICBmb2xsb3dpbmcgc3RyaW5nczogYGAnLUluZmluaXR5J2BgLCBg
YCdJbmZpbml0eSdgYCwgYGAnTmFOJ2BgLiAgVGhpcworICAgIGNhbiBiZSB1c2VkIHRvIHJhaXNl
IGFuIGV4Y2VwdGlvbiBpZiBpbnZhbGlkIEpTT04gbnVtYmVycyBhcmUKKyAgICBlbmNvdW50ZXJl
ZC4KKworICAgIElmICp1c2VfZGVjaW1hbCogaXMgdHJ1ZSAoZGVmYXVsdDogYGBGYWxzZWBgKSB0
aGVuIGl0IGltcGxpZXMKKyAgICBwYXJzZV9mbG9hdD1kZWNpbWFsLkRlY2ltYWwgZm9yIHBhcml0
eSB3aXRoIGBgZHVtcGBgLgorCiAgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkRlY29kZXJgYCBz
dWJjbGFzcywgc3BlY2lmeSBpdCB3aXRoIHRoZSBgYGNsc2BgCiAgICAga3dhcmcuCisKICAgICAi
IiIKICAgICByZXR1cm4gbG9hZHMoZnAucmVhZCgpLAotICAgICAgICBlbmNvZGluZz1lbmNvZGlu
ZywgY2xzPWNscywgb2JqZWN0X2hvb2s9b2JqZWN0X2hvb2ssICoqa3cpCisgICAgICAgIGVuY29k
aW5nPWVuY29kaW5nLCBjbHM9Y2xzLCBvYmplY3RfaG9vaz1vYmplY3RfaG9vaywKKyAgICAgICAg
cGFyc2VfZmxvYXQ9cGFyc2VfZmxvYXQsIHBhcnNlX2ludD1wYXJzZV9pbnQsCisgICAgICAgIHBh
cnNlX2NvbnN0YW50PXBhcnNlX2NvbnN0YW50LCBvYmplY3RfcGFpcnNfaG9vaz1vYmplY3RfcGFp
cnNfaG9vaywKKyAgICAgICAgdXNlX2RlY2ltYWw9dXNlX2RlY2ltYWwsICoqa3cpCiAKLWRlZiBs
b2FkcyhzLCBlbmNvZGluZz1Ob25lLCBjbHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgKiprdyk6
Ci0gICAgIiIiCi0gICAgRGVzZXJpYWxpemUgYGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVg
YCBpbnN0YW5jZSBjb250YWluaW5nIGEgSlNPTgotICAgIGRvY3VtZW50KSB0byBhIFB5dGhvbiBv
YmplY3QuCiAKLSAgICBJZiBgYHNgYCBpcyBhIGBgc3RyYGAgaW5zdGFuY2UgYW5kIGlzIGVuY29k
ZWQgd2l0aCBhbiBBU0NJSSBiYXNlZCBlbmNvZGluZwotICAgIG90aGVyIHRoYW4gdXRmLTggKGUu
Zy4gbGF0aW4tMSkgdGhlbiBhbiBhcHByb3ByaWF0ZSBgYGVuY29kaW5nYGAgbmFtZQotICAgIG11
c3QgYmUgc3BlY2lmaWVkLiBFbmNvZGluZ3MgdGhhdCBhcmUgbm90IEFTQ0lJIGJhc2VkIChzdWNo
IGFzIFVDUy0yKQotICAgIGFyZSBub3QgYWxsb3dlZCBhbmQgc2hvdWxkIGJlIGRlY29kZWQgdG8g
YGB1bmljb2RlYGAgZmlyc3QuCitkZWYgbG9hZHMocywgZW5jb2Rpbmc9Tm9uZSwgY2xzPU5vbmUs
IG9iamVjdF9ob29rPU5vbmUsIHBhcnNlX2Zsb2F0PU5vbmUsCisgICAgICAgIHBhcnNlX2ludD1O
b25lLCBwYXJzZV9jb25zdGFudD1Ob25lLCBvYmplY3RfcGFpcnNfaG9vaz1Ob25lLAorICAgICAg
ICB1c2VfZGVjaW1hbD1GYWxzZSwgKiprdyk6CisgICAgIiIiRGVzZXJpYWxpemUgYGBzYGAgKGEg
YGBzdHJgYCBvciBgYHVuaWNvZGVgYCBpbnN0YW5jZSBjb250YWluaW5nIGEgSlNPTgorICAgIGRv
Y3VtZW50KSB0byBhIFB5dGhvbiBvYmplY3QuCiAKLSAgICBgYG9iamVjdF9ob29rYGAgaXMgYW4g
b3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZQotICAgIHJlc3Vs
dCBvZiBhbnkgb2JqZWN0IGxpdGVyYWwgZGVjb2RlIChhIGBgZGljdGBgKS4gVGhlIHJldHVybiB2
YWx1ZSBvZgotICAgIGBgb2JqZWN0X2hvb2tgYCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUg
YGBkaWN0YGAuIFRoaXMgZmVhdHVyZQotICAgIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjdXN0
b20gZGVjb2RlcnMgKGUuZy4gSlNPTi1SUEMgY2xhc3MgaGludGluZykuCisgICAgKmVuY29kaW5n
KiBkZXRlcm1pbmVzIHRoZSBlbmNvZGluZyB1c2VkIHRvIGludGVycHJldCBhbnkKKyAgICA6Y2xh
c3M6YHN0cmAgb2JqZWN0cyBkZWNvZGVkIGJ5IHRoaXMgaW5zdGFuY2UgKGBgJ3V0Zi04J2BgIGJ5
CisgICAgZGVmYXVsdCkuICBJdCBoYXMgbm8gZWZmZWN0IHdoZW4gZGVjb2RpbmcgOmNsYXNzOmB1
bmljb2RlYCBvYmplY3RzLgorCisgICAgTm90ZSB0aGF0IGN1cnJlbnRseSBvbmx5IGVuY29kaW5n
cyB0aGF0IGFyZSBhIHN1cGVyc2V0IG9mIEFTQ0lJIHdvcmssCisgICAgc3RyaW5ncyBvZiBvdGhl
ciBlbmNvZGluZ3Mgc2hvdWxkIGJlIHBhc3NlZCBpbiBhcyA6Y2xhc3M6YHVuaWNvZGVgLgorCisg
ICAgKm9iamVjdF9ob29rKiwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBy
ZXN1bHQgb2YgZXZlcnkKKyAgICBKU09OIG9iamVjdCBkZWNvZGVkIGFuZCBpdHMgcmV0dXJuIHZh
bHVlIHdpbGwgYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGUKKyAgICBnaXZlbiA6Y2xhc3M6YGRpY3Rg
LiAgVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGN1c3RvbQorICAgIGRlc2VyaWFsaXphdGlv
bnMgKGUuZy4gdG8gc3VwcG9ydCBKU09OLVJQQyBjbGFzcyBoaW50aW5nKS4KKworICAgICpvYmpl
Y3RfcGFpcnNfaG9vayogaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxl
ZCB3aXRoCisgICAgdGhlIHJlc3VsdCBvZiBhbnkgb2JqZWN0IGxpdGVyYWwgZGVjb2RlIHdpdGgg
YW4gb3JkZXJlZCBsaXN0IG9mIHBhaXJzLgorICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgKm9iamVj
dF9wYWlyc19ob29rKiB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUKKyAgICA6Y2xhc3M6YGRp
Y3RgLiAgVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjdXN0b20gZGVjb2Rl
cnMKKyAgICB0aGF0IHJlbHkgb24gdGhlIG9yZGVyIHRoYXQgdGhlIGtleSBhbmQgdmFsdWUgcGFp
cnMgYXJlIGRlY29kZWQgKGZvcgorICAgIGV4YW1wbGUsIDpmdW5jOmBjb2xsZWN0aW9ucy5PcmRl
cmVkRGljdGAgd2lsbCByZW1lbWJlciB0aGUgb3JkZXIgb2YKKyAgICBpbnNlcnRpb24pLiBJZiAq
b2JqZWN0X2hvb2sqIGlzIGFsc28gZGVmaW5lZCwgdGhlICpvYmplY3RfcGFpcnNfaG9vayoKKyAg
ICB0YWtlcyBwcmlvcml0eS4KKworICAgICpwYXJzZV9mbG9hdCosIGlmIHNwZWNpZmllZCwgd2ls
bCBiZSBjYWxsZWQgd2l0aCB0aGUgc3RyaW5nIG9mIGV2ZXJ5CisgICAgSlNPTiBmbG9hdCB0byBi
ZSBkZWNvZGVkLiAgQnkgZGVmYXVsdCwgdGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAgYGBmbG9h
dChudW1fc3RyKWBgLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHVzZSBhbm90aGVyIGRhdGF0eXBlIG9y
IHBhcnNlcgorICAgIGZvciBKU09OIGZsb2F0cyAoZS5nLiA6Y2xhc3M6YGRlY2ltYWwuRGVjaW1h
bGApLgorCisgICAgKnBhcnNlX2ludCosIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0
aCB0aGUgc3RyaW5nIG9mIGV2ZXJ5CisgICAgSlNPTiBpbnQgdG8gYmUgZGVjb2RlZC4gIEJ5IGRl
ZmF1bHQsIHRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgIGBgaW50KG51bV9zdHIpYGAuICBUaGlz
IGNhbiBiZSB1c2VkIHRvIHVzZSBhbm90aGVyIGRhdGF0eXBlIG9yIHBhcnNlcgorICAgIGZvciBK
U09OIGludGVnZXJzIChlLmcuIDpjbGFzczpgZmxvYXRgKS4KKworICAgICpwYXJzZV9jb25zdGFu
dCosIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgb2YgdGhlCisgICAgZm9s
bG93aW5nIHN0cmluZ3M6IGBgJy1JbmZpbml0eSdgYCwgYGAnSW5maW5pdHknYGAsIGBgJ05hTidg
YC4gIFRoaXMKKyAgICBjYW4gYmUgdXNlZCB0byByYWlzZSBhbiBleGNlcHRpb24gaWYgaW52YWxp
ZCBKU09OIG51bWJlcnMgYXJlCisgICAgZW5jb3VudGVyZWQuCisKKyAgICBJZiAqdXNlX2RlY2lt
YWwqIGlzIHRydWUgKGRlZmF1bHQ6IGBgRmFsc2VgYCkgdGhlbiBpdCBpbXBsaWVzCisgICAgcGFy
c2VfZmxvYXQ9ZGVjaW1hbC5EZWNpbWFsIGZvciBwYXJpdHkgd2l0aCBgYGR1bXBgYC4KIAogICAg
IFRvIHVzZSBhIGN1c3RvbSBgYEpTT05EZWNvZGVyYGAgc3ViY2xhc3MsIHNwZWNpZnkgaXQgd2l0
aCB0aGUgYGBjbHNgYAogICAgIGt3YXJnLgorCiAgICAgIiIiCi0gICAgaWYgY2xzIGlzIE5vbmUg
YW5kIGVuY29kaW5nIGlzIE5vbmUgYW5kIG9iamVjdF9ob29rIGlzIE5vbmUgYW5kIG5vdCBrdzoK
KyAgICBpZiAoY2xzIGlzIE5vbmUgYW5kIGVuY29kaW5nIGlzIE5vbmUgYW5kIG9iamVjdF9ob29r
IGlzIE5vbmUgYW5kCisgICAgICAgICAgICBwYXJzZV9pbnQgaXMgTm9uZSBhbmQgcGFyc2VfZmxv
YXQgaXMgTm9uZSBhbmQKKyAgICAgICAgICAgIHBhcnNlX2NvbnN0YW50IGlzIE5vbmUgYW5kIG9i
amVjdF9wYWlyc19ob29rIGlzIE5vbmUKKyAgICAgICAgICAgIGFuZCBub3QgdXNlX2RlY2ltYWwg
YW5kIG5vdCBrdyk6CiAgICAgICAgIHJldHVybiBfZGVmYXVsdF9kZWNvZGVyLmRlY29kZShzKQog
ICAgIGlmIGNscyBpcyBOb25lOgogICAgICAgICBjbHMgPSBKU09ORGVjb2RlcgogICAgIGlmIG9i
amVjdF9ob29rIGlzIG5vdCBOb25lOgogICAgICAgICBrd1snb2JqZWN0X2hvb2snXSA9IG9iamVj
dF9ob29rCisgICAgaWYgb2JqZWN0X3BhaXJzX2hvb2sgaXMgbm90IE5vbmU6CisgICAgICAgIGt3
WydvYmplY3RfcGFpcnNfaG9vayddID0gb2JqZWN0X3BhaXJzX2hvb2sKKyAgICBpZiBwYXJzZV9m
bG9hdCBpcyBub3QgTm9uZToKKyAgICAgICAga3dbJ3BhcnNlX2Zsb2F0J10gPSBwYXJzZV9mbG9h
dAorICAgIGlmIHBhcnNlX2ludCBpcyBub3QgTm9uZToKKyAgICAgICAga3dbJ3BhcnNlX2ludCdd
ID0gcGFyc2VfaW50CisgICAgaWYgcGFyc2VfY29uc3RhbnQgaXMgbm90IE5vbmU6CisgICAgICAg
IGt3WydwYXJzZV9jb25zdGFudCddID0gcGFyc2VfY29uc3RhbnQKKyAgICBpZiB1c2VfZGVjaW1h
bDoKKyAgICAgICAgaWYgcGFyc2VfZmxvYXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlz
ZSBUeXBlRXJyb3IoInVzZV9kZWNpbWFsPVRydWUgaW1wbGllcyBwYXJzZV9mbG9hdD1EZWNpbWFs
IikKKyAgICAgICAga3dbJ3BhcnNlX2Zsb2F0J10gPSBEZWNpbWFsCiAgICAgcmV0dXJuIGNscyhl
bmNvZGluZz1lbmNvZGluZywgKiprdykuZGVjb2RlKHMpCiAKLWRlZiByZWFkKHMpOgotICAgICIi
IgotICAgIGpzb24tcHkgQVBJIGNvbXBhdGliaWxpdHkgaG9vay4gVXNlIGxvYWRzKHMpIGluc3Rl
YWQuCi0gICAgIiIiCi0gICAgaW1wb3J0IHdhcm5pbmdzCi0gICAgd2FybmluZ3Mud2Fybigic2lt
cGxlanNvbi5sb2FkcyhzKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHJlYWQocykiLAotICAg
ICAgICBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgcmV0dXJuIGxvYWRzKHMpCi0KLWRlZiB3cml0
ZShvYmopOgotICAgICIiIgotICAgIGpzb24tcHkgQVBJIGNvbXBhdGliaWxpdHkgaG9vay4gVXNl
IGR1bXBzKHMpIGluc3RlYWQuCi0gICAgIiIiCi0gICAgaW1wb3J0IHdhcm5pbmdzCi0gICAgd2Fy
bmluZ3Mud2Fybigic2ltcGxlanNvbi5kdW1wcyhzKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9m
IHdyaXRlKHMpIiwKLSAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgIHJldHVybiBkdW1w
cyhvYmopCi0KIAorZGVmIF90b2dnbGVfc3BlZWR1cHMoZW5hYmxlZCk6CisgICAgaW1wb3J0IHNp
bXBsZWpzb24uZGVjb2RlciBhcyBkZWMKKyAgICBpbXBvcnQgc2ltcGxlanNvbi5lbmNvZGVyIGFz
IGVuYworICAgIGltcG9ydCBzaW1wbGVqc29uLnNjYW5uZXIgYXMgc2NhbgorICAgIGNfbWFrZV9l
bmNvZGVyID0gX2ltcG9ydF9jX21ha2VfZW5jb2RlcigpCisgICAgaWYgZW5hYmxlZDoKKyAgICAg
ICAgZGVjLnNjYW5zdHJpbmcgPSBkZWMuY19zY2Fuc3RyaW5nIG9yIGRlYy5weV9zY2Fuc3RyaW5n
CisgICAgICAgIGVuYy5jX21ha2VfZW5jb2RlciA9IGNfbWFrZV9lbmNvZGVyCisgICAgICAgIGVu
Yy5lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSA9IChlbmMuY19lbmNvZGVfYmFzZXN0cmluZ19hc2Np
aSBvciAKKyAgICAgICAgICAgIGVuYy5weV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSkKKyAgICAg
ICAgc2Nhbi5tYWtlX3NjYW5uZXIgPSBzY2FuLmNfbWFrZV9zY2FubmVyIG9yIHNjYW4ucHlfbWFr
ZV9zY2FubmVyCisgICAgZWxzZToKKyAgICAgICAgZGVjLnNjYW5zdHJpbmcgPSBkZWMucHlfc2Nh
bnN0cmluZworICAgICAgICBlbmMuY19tYWtlX2VuY29kZXIgPSBOb25lCisgICAgICAgIGVuYy5l
bmNvZGVfYmFzZXN0cmluZ19hc2NpaSA9IGVuYy5weV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaQor
ICAgICAgICBzY2FuLm1ha2Vfc2Nhbm5lciA9IHNjYW4ucHlfbWFrZV9zY2FubmVyCisgICAgZGVj
Lm1ha2Vfc2Nhbm5lciA9IHNjYW4ubWFrZV9zY2FubmVyCisgICAgZ2xvYmFsIF9kZWZhdWx0X2Rl
Y29kZXIKKyAgICBfZGVmYXVsdF9kZWNvZGVyID0gSlNPTkRlY29kZXIoCisgICAgICAgIGVuY29k
aW5nPU5vbmUsCisgICAgICAgIG9iamVjdF9ob29rPU5vbmUsCisgICAgICAgIG9iamVjdF9wYWly
c19ob29rPU5vbmUsCisgICAgKQorICAgIGdsb2JhbCBfZGVmYXVsdF9lbmNvZGVyCisgICAgX2Rl
ZmF1bHRfZW5jb2RlciA9IEpTT05FbmNvZGVyKAorICAgICAgIHNraXBrZXlzPUZhbHNlLAorICAg
ICAgIGVuc3VyZV9hc2NpaT1UcnVlLAorICAgICAgIGNoZWNrX2NpcmN1bGFyPVRydWUsCisgICAg
ICAgYWxsb3dfbmFuPVRydWUsCisgICAgICAgaW5kZW50PU5vbmUsCisgICAgICAgc2VwYXJhdG9y
cz1Ob25lLAorICAgICAgIGVuY29kaW5nPSd1dGYtOCcsCisgICAgICAgZGVmYXVsdD1Ob25lLAor
ICAgKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBs
ZWpzb24vX3NwZWVkdXBzLmMgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2lt
cGxlanNvbi9fc3BlZWR1cHMuYwppbmRleCA4ZjI5MGJiNC4uOGIzNDc0NyAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vX3NwZWVkdXBzLmMK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vX3NwZWVk
dXBzLmMKQEAgLTEsMTAgKzEsMTA3IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAi
c3RydWN0bWVtYmVyLmgiCisjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDcwMDAwICYmICFkZWZp
bmVkKFB5T1Nfc3RyaW5nX3RvX2RvdWJsZSkKKyNkZWZpbmUgUHlPU19zdHJpbmdfdG9fZG91Ymxl
IGpzb25fUHlPU19zdHJpbmdfdG9fZG91YmxlCitzdGF0aWMgZG91YmxlCitqc29uX1B5T1Nfc3Ry
aW5nX3RvX2RvdWJsZShjb25zdCBjaGFyICpzLCBjaGFyICoqZW5kcHRyLCBQeU9iamVjdCAqb3Zl
cmZsb3dfZXhjZXB0aW9uKTsKK3N0YXRpYyBkb3VibGUKK2pzb25fUHlPU19zdHJpbmdfdG9fZG91
YmxlKGNvbnN0IGNoYXIgKnMsIGNoYXIgKiplbmRwdHIsIFB5T2JqZWN0ICpvdmVyZmxvd19leGNl
cHRpb24pIHsKKyAgICBkb3VibGUgeDsKKyAgICBhc3NlcnQoZW5kcHRyID09IE5VTEwpOworICAg
IGFzc2VydChvdmVyZmxvd19leGNlcHRpb24gPT0gTlVMTCk7CisgICAgUHlGUEVfU1RBUlRfUFJP
VEVDVCgianNvbl9QeU9TX3N0cmluZ190b19kb3VibGUiLCByZXR1cm4gLTEuMDspCisgICAgeCA9
IFB5T1NfYXNjaWlfYXRvZihzKTsKKyAgICBQeUZQRV9FTkRfUFJPVEVDVCh4KQorICAgIHJldHVy
biB4OworfQorI2VuZGlmCisjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDYwMDAwICYmICFkZWZp
bmVkKFB5X1RZUEUpCisjZGVmaW5lIFB5X1RZUEUob2IpICAgICAoKChQeU9iamVjdCopKG9iKSkt
Pm9iX3R5cGUpCisjZW5kaWYKKyNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNjAwMDAgJiYgIWRl
ZmluZWQoUHlfU0laRSkKKyNkZWZpbmUgUHlfU0laRShvYikgICAgICgoKFB5VmFyT2JqZWN0Kiko
b2IpKS0+b2Jfc2l6ZSkKKyNlbmRpZgogI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCAm
JiAhZGVmaW5lZChQWV9TU0laRV9UX01JTikKIHR5cGVkZWYgaW50IFB5X3NzaXplX3Q7CiAjZGVm
aW5lIFBZX1NTSVpFX1RfTUFYIElOVF9NQVgKICNkZWZpbmUgUFlfU1NJWkVfVF9NSU4gSU5UX01J
TgorI2RlZmluZSBQeUludF9Gcm9tU3NpemVfdCBQeUludF9Gcm9tTG9uZworI2RlZmluZSBQeUlu
dF9Bc1NzaXplX3QgUHlJbnRfQXNMb25nCisjZW5kaWYKKyNpZm5kZWYgUHlfSVNfRklOSVRFCisj
ZGVmaW5lIFB5X0lTX0ZJTklURShYKSAoIVB5X0lTX0lORklOSVRZKFgpICYmICFQeV9JU19OQU4o
WCkpCisjZW5kaWYKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIFVOVVNFRCBfX2F0dHJpYnV0
ZV9fKChfX3VudXNlZF9fKSkKKyNlbHNlCisjZGVmaW5lIFVOVVNFRAogI2VuZGlmCiAKKyNkZWZp
bmUgREVGQVVMVF9FTkNPRElORyAidXRmLTgiCisKKyNkZWZpbmUgUHlTY2FubmVyX0NoZWNrKG9w
KSBQeU9iamVjdF9UeXBlQ2hlY2sob3AsICZQeVNjYW5uZXJUeXBlKQorI2RlZmluZSBQeVNjYW5u
ZXJfQ2hlY2tFeGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZQeVNjYW5uZXJUeXBlKQorI2RlZmlu
ZSBQeUVuY29kZXJfQ2hlY2sob3ApIFB5T2JqZWN0X1R5cGVDaGVjayhvcCwgJlB5RW5jb2RlclR5
cGUpCisjZGVmaW5lIFB5RW5jb2Rlcl9DaGVja0V4YWN0KG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5
RW5jb2RlclR5cGUpCisjZGVmaW5lIERlY2ltYWxfQ2hlY2sob3ApIChQeU9iamVjdF9UeXBlQ2hl
Y2sob3AsIERlY2ltYWxUeXBlUHRyKSkKKworc3RhdGljIFB5VHlwZU9iamVjdCBQeVNjYW5uZXJU
eXBlOworc3RhdGljIFB5VHlwZU9iamVjdCBQeUVuY29kZXJUeXBlOworc3RhdGljIFB5VHlwZU9i
amVjdCAqRGVjaW1hbFR5cGVQdHI7CisKK3R5cGVkZWYgc3RydWN0IF9QeVNjYW5uZXJPYmplY3Qg
eworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBQeU9iamVjdCAqZW5jb2Rpbmc7CisgICAgUHlPYmpl
Y3QgKnN0cmljdDsKKyAgICBQeU9iamVjdCAqb2JqZWN0X2hvb2s7CisgICAgUHlPYmplY3QgKnBh
aXJzX2hvb2s7CisgICAgUHlPYmplY3QgKnBhcnNlX2Zsb2F0OworICAgIFB5T2JqZWN0ICpwYXJz
ZV9pbnQ7CisgICAgUHlPYmplY3QgKnBhcnNlX2NvbnN0YW50OworICAgIFB5T2JqZWN0ICptZW1v
OworfSBQeVNjYW5uZXJPYmplY3Q7CisKK3N0YXRpYyBQeU1lbWJlckRlZiBzY2FubmVyX21lbWJl
cnNbXSA9IHsKKyAgICB7ImVuY29kaW5nIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9i
amVjdCwgZW5jb2RpbmcpLCBSRUFET05MWSwgImVuY29kaW5nIn0sCisgICAgeyJzdHJpY3QiLCBU
X09CSkVDVCwgb2Zmc2V0b2YoUHlTY2FubmVyT2JqZWN0LCBzdHJpY3QpLCBSRUFET05MWSwgInN0
cmljdCJ9LAorICAgIHsib2JqZWN0X2hvb2siLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlTY2FubmVy
T2JqZWN0LCBvYmplY3RfaG9vayksIFJFQURPTkxZLCAib2JqZWN0X2hvb2sifSwKKyAgICB7Im9i
amVjdF9wYWlyc19ob29rIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9iamVjdCwgcGFp
cnNfaG9vayksIFJFQURPTkxZLCAib2JqZWN0X3BhaXJzX2hvb2sifSwKKyAgICB7InBhcnNlX2Zs
b2F0IiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9iamVjdCwgcGFyc2VfZmxvYXQpLCBS
RUFET05MWSwgInBhcnNlX2Zsb2F0In0sCisgICAgeyJwYXJzZV9pbnQiLCBUX09CSkVDVCwgb2Zm
c2V0b2YoUHlTY2FubmVyT2JqZWN0LCBwYXJzZV9pbnQpLCBSRUFET05MWSwgInBhcnNlX2ludCJ9
LAorICAgIHsicGFyc2VfY29uc3RhbnQiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlTY2FubmVyT2Jq
ZWN0LCBwYXJzZV9jb25zdGFudCksIFJFQURPTkxZLCAicGFyc2VfY29uc3RhbnQifSwKKyAgICB7
TlVMTH0KK307CisKK3R5cGVkZWYgc3RydWN0IF9QeUVuY29kZXJPYmplY3QgeworICAgIFB5T2Jq
ZWN0X0hFQUQKKyAgICBQeU9iamVjdCAqbWFya2VyczsKKyAgICBQeU9iamVjdCAqZGVmYXVsdGZu
OworICAgIFB5T2JqZWN0ICplbmNvZGVyOworICAgIFB5T2JqZWN0ICppbmRlbnQ7CisgICAgUHlP
YmplY3QgKmtleV9zZXBhcmF0b3I7CisgICAgUHlPYmplY3QgKml0ZW1fc2VwYXJhdG9yOworICAg
IFB5T2JqZWN0ICpzb3J0X2tleXM7CisgICAgUHlPYmplY3QgKnNraXBrZXlzOworICAgIFB5T2Jq
ZWN0ICprZXlfbWVtbzsKKyAgICBpbnQgZmFzdF9lbmNvZGU7CisgICAgaW50IGFsbG93X25hbjsK
KyAgICBpbnQgdXNlX2RlY2ltYWw7Cit9IFB5RW5jb2Rlck9iamVjdDsKKworc3RhdGljIFB5TWVt
YmVyRGVmIGVuY29kZXJfbWVtYmVyc1tdID0geworICAgIHsibWFya2VycyIsIFRfT0JKRUNULCBv
ZmZzZXRvZihQeUVuY29kZXJPYmplY3QsIG1hcmtlcnMpLCBSRUFET05MWSwgIm1hcmtlcnMifSwK
KyAgICB7ImRlZmF1bHQiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBkZWZh
dWx0Zm4pLCBSRUFET05MWSwgImRlZmF1bHQifSwKKyAgICB7ImVuY29kZXIiLCBUX09CSkVDVCwg
b2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBlbmNvZGVyKSwgUkVBRE9OTFksICJlbmNvZGVyIn0s
CisgICAgeyJpbmRlbnQiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBpbmRl
bnQpLCBSRUFET05MWSwgImluZGVudCJ9LAorICAgIHsia2V5X3NlcGFyYXRvciIsIFRfT0JKRUNU
LCBvZmZzZXRvZihQeUVuY29kZXJPYmplY3QsIGtleV9zZXBhcmF0b3IpLCBSRUFET05MWSwgImtl
eV9zZXBhcmF0b3IifSwKKyAgICB7Iml0ZW1fc2VwYXJhdG9yIiwgVF9PQkpFQ1QsIG9mZnNldG9m
KFB5RW5jb2Rlck9iamVjdCwgaXRlbV9zZXBhcmF0b3IpLCBSRUFET05MWSwgIml0ZW1fc2VwYXJh
dG9yIn0sCisgICAgeyJzb3J0X2tleXMiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2Jq
ZWN0LCBzb3J0X2tleXMpLCBSRUFET05MWSwgInNvcnRfa2V5cyJ9LAorICAgIHsic2tpcGtleXMi
LCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBza2lwa2V5cyksIFJFQURPTkxZ
LCAic2tpcGtleXMifSwKKyAgICB7ImtleV9tZW1vIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RW5j
b2Rlck9iamVjdCwga2V5X21lbW8pLCBSRUFET05MWSwgImtleV9tZW1vIn0sCisgICAge05VTEx9
Cit9OworCiBzdGF0aWMgUHlfc3NpemVfdAogYXNjaWlfZXNjYXBlX2NoYXIoUHlfVU5JQ09ERSBj
LCBjaGFyICpvdXRwdXQsIFB5X3NzaXplX3QgY2hhcnMpOwogc3RhdGljIFB5T2JqZWN0ICoKQEAg
LTEyLDEwICsxMDksNTEgQEAgYXNjaWlfZXNjYXBlX3VuaWNvZGUoUHlPYmplY3QgKnB5c3RyKTsK
IHN0YXRpYyBQeU9iamVjdCAqCiBhc2NpaV9lc2NhcGVfc3RyKFB5T2JqZWN0ICpweXN0cik7CiBz
dGF0aWMgUHlPYmplY3QgKgotcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoUHlPYmplY3QqIHNl
bGYgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpLCBQeU9iamVjdCAqcHlzdHIpOworcHlfZW5j
b2RlX2Jhc2VzdHJpbmdfYXNjaWkoUHlPYmplY3QqIHNlbGYgVU5VU0VELCBQeU9iamVjdCAqcHlz
dHIpOwogdm9pZCBpbml0X3NwZWVkdXBzKHZvaWQpOworc3RhdGljIFB5T2JqZWN0ICoKK3NjYW5f
b25jZV9zdHIoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3Qg
aWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpOworc3RhdGljIFB5T2JqZWN0ICoKK3NjYW5f
b25jZV91bmljb2RlKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6
ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKTsKK3N0YXRpYyBQeU9iamVjdCAqCitf
YnVpbGRfcnZhbF9pbmRleF90dXBsZShQeU9iamVjdCAqcnZhbCwgUHlfc3NpemVfdCBpZHgpOwor
c3RhdGljIFB5T2JqZWN0ICoKK3NjYW5uZXJfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmpl
Y3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKTsKK3N0YXRpYyBpbnQKK3NjYW5uZXJfaW5pdChQeU9i
amVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKTsKK3N0YXRpYyB2b2lk
CitzY2FubmVyX2RlYWxsb2MoUHlPYmplY3QgKnNlbGYpOworc3RhdGljIGludAorc2Nhbm5lcl9j
bGVhcihQeU9iamVjdCAqc2VsZik7CitzdGF0aWMgUHlPYmplY3QgKgorZW5jb2Rlcl9uZXcoUHlU
eXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpOworc3RhdGlj
IGludAorZW5jb2Rlcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmpl
Y3QgKmt3ZHMpOworc3RhdGljIHZvaWQKK2VuY29kZXJfZGVhbGxvYyhQeU9iamVjdCAqc2VsZik7
CitzdGF0aWMgaW50CitlbmNvZGVyX2NsZWFyKFB5T2JqZWN0ICpzZWxmKTsKK3N0YXRpYyBpbnQK
K2VuY29kZXJfbGlzdGVuY29kZV9saXN0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKnJ2
YWwsIFB5T2JqZWN0ICpzZXEsIFB5X3NzaXplX3QgaW5kZW50X2xldmVsKTsKK3N0YXRpYyBpbnQK
K2VuY29kZXJfbGlzdGVuY29kZV9vYmooUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcnZh
bCwgUHlPYmplY3QgKm9iaiwgUHlfc3NpemVfdCBpbmRlbnRfbGV2ZWwpOworc3RhdGljIGludAor
ZW5jb2Rlcl9saXN0ZW5jb2RlX2RpY3QoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcnZh
bCwgUHlPYmplY3QgKmRjdCwgUHlfc3NpemVfdCBpbmRlbnRfbGV2ZWwpOworc3RhdGljIFB5T2Jq
ZWN0ICoKK19lbmNvZGVkX2NvbnN0KFB5T2JqZWN0ICpvYmopOworc3RhdGljIHZvaWQKK3JhaXNl
X2Vycm1zZyhjaGFyICptc2csIFB5T2JqZWN0ICpzLCBQeV9zc2l6ZV90IGVuZCk7CitzdGF0aWMg
UHlPYmplY3QgKgorZW5jb2Rlcl9lbmNvZGVfc3RyaW5nKFB5RW5jb2Rlck9iamVjdCAqcywgUHlP
YmplY3QgKm9iaik7CitzdGF0aWMgaW50CitfY29udmVydFB5SW50X0FzU3NpemVfdChQeU9iamVj
dCAqbywgUHlfc3NpemVfdCAqc2l6ZV9wdHIpOworc3RhdGljIFB5T2JqZWN0ICoKK19jb252ZXJ0
UHlJbnRfRnJvbVNzaXplX3QoUHlfc3NpemVfdCAqc2l6ZV9wdHIpOworc3RhdGljIFB5T2JqZWN0
ICoKK2VuY29kZXJfZW5jb2RlX2Zsb2F0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9i
aik7CiAKLSNkZWZpbmUgU19DSEFSKGMpIChjID49ICcgJyAmJiBjIDw9ICd+JyAmJiBjICE9ICdc
XCcgJiYgYyAhPSAnLycgJiYgYyAhPSAnIicpCisjZGVmaW5lIFNfQ0hBUihjKSAoYyA+PSAnICcg
JiYgYyA8PSAnficgJiYgYyAhPSAnXFwnICYmIGMgIT0gJyInKQorI2RlZmluZSBJU19XSElURVNQ
QUNFKGMpICgoKGMpID09ICcgJykgfHwgKChjKSA9PSAnXHQnKSB8fCAoKGMpID09ICdcbicpIHx8
ICgoYykgPT0gJ1xyJykpCiAKICNkZWZpbmUgTUlOX0VYUEFOU0lPTiA2CiAjaWZkZWYgUHlfVU5J
Q09ERV9XSURFCkBAIC0yNCwxMiArMTYyLDMxIEBAIHZvaWQgaW5pdF9zcGVlZHVwcyh2b2lkKTsK
ICNkZWZpbmUgTUFYX0VYUEFOU0lPTiBNSU5fRVhQQU5TSU9OCiAjZW5kaWYKIAorc3RhdGljIGlu
dAorX2NvbnZlcnRQeUludF9Bc1NzaXplX3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgKnNpemVf
cHRyKQoreworICAgIC8qIFB5T2JqZWN0IHRvIFB5X3NzaXplX3QgY29udmVydGVyICovCisgICAg
KnNpemVfcHRyID0gUHlJbnRfQXNTc2l6ZV90KG8pOworICAgIGlmICgqc2l6ZV9wdHIgPT0gLTEg
JiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9
CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXpl
X3QgKnNpemVfcHRyKQoreworICAgIC8qIFB5X3NzaXplX3QgdG8gUHlPYmplY3QgY29udmVydGVy
ICovCisgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KCpzaXplX3B0cik7Cit9CisKIHN0YXRp
YyBQeV9zc2l6ZV90Ci1hc2NpaV9lc2NhcGVfY2hhcihQeV9VTklDT0RFIGMsIGNoYXIgKm91dHB1
dCwgUHlfc3NpemVfdCBjaGFycykgewotICAgIFB5X1VOSUNPREUgeDsKK2FzY2lpX2VzY2FwZV9j
aGFyKFB5X1VOSUNPREUgYywgY2hhciAqb3V0cHV0LCBQeV9zc2l6ZV90IGNoYXJzKQoreworICAg
IC8qIEVzY2FwZSB1bmljb2RlIGNvZGUgcG9pbnQgYyB0byBBU0NJSSBlc2NhcGUgc2VxdWVuY2Vz
CisgICAgaW4gY2hhciAqb3V0cHV0LiBvdXRwdXQgbXVzdCBoYXZlIGF0IGxlYXN0IDEyIGJ5dGVz
IHVudXNlZCB0bworICAgIGFjY29tbW9kYXRlIGFuIGVzY2FwZWQgc3Vycm9nYXRlIHBhaXIgIlx1
WFhYWFx1WFhYWCIgKi8KICAgICBvdXRwdXRbY2hhcnMrK10gPSAnXFwnOwogICAgIHN3aXRjaCAo
YykgewotICAgICAgICBjYXNlICcvJzogb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsgYnJlYWs7
CiAgICAgICAgIGNhc2UgJ1xcJzogb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsgYnJlYWs7CiAg
ICAgICAgIGNhc2UgJyInOiBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOyBicmVhazsKICAgICAg
ICAgY2FzZSAnXGInOiBvdXRwdXRbY2hhcnMrK10gPSAnYic7IGJyZWFrOwpAQCAtNDQsMzYgKzIw
MSwzMSBAQCBhc2NpaV9lc2NhcGVfY2hhcihQeV9VTklDT0RFIGMsIGNoYXIgKm91dHB1dCwgUHlf
c3NpemVfdCBjaGFycykgewogICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgdiA9IGMgLSAweDEw
MDAwOwogICAgICAgICAgICAgICAgIGMgPSAweGQ4MDAgfCAoKHYgPj4gMTApICYgMHgzZmYpOwog
ICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsKLSAgICAgICAgICAgICAgICB4
ID0gKGMgJiAweGYwMDApID4+IDEyOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9
ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOwotICAgICAgICAgICAgICAgIHgg
PSAoYyAmIDB4MGYwMCkgPj4gODsKLSAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAo
eCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKLSAgICAgICAgICAgICAgICB4ID0g
KGMgJiAweDAwZjApID4+IDQ7Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHgg
PCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7Ci0gICAgICAgICAgICAgICAgeCA9IChj
ICYgMHgwMDBmKTsKLSAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/
ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMr
K10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMgPj4gMTIpICYgMHhmXTsKKyAgICAgICAgICAgICAg
ICBvdXRwdXRbY2hhcnMrK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMgPj4gIDgpICYgMHhmXTsK
KyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMg
Pj4gIDQpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAiMDEyMzQ1
Njc4OWFiY2RlZiJbKGMgICAgICApICYgMHhmXTsKICAgICAgICAgICAgICAgICBjID0gMHhkYzAw
IHwgKHYgJiAweDNmZik7CiAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ1xcJzsK
ICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ3Un
OwotICAgICAgICAgICAgeCA9IChjICYgMHhmMDAwKSA+PiAxMjsKLSAgICAgICAgICAgIG91dHB1
dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOwotICAgICAg
ICAgICAgeCA9IChjICYgMHgwZjAwKSA+PiA4OwotICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytd
ID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7Ci0gICAgICAgICAgICB4ID0g
KGMgJiAweDAwZjApID4+IDQ7Ci0gICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEw
KSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKLSAgICAgICAgICAgIHggPSAoYyAmIDB4MDAw
Zik7Ci0gICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAn
YScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5
YWJjZGVmIlsoYyA+PiAxMikgJiAweGZdOworICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0g
IjAxMjM0NTY3ODlhYmNkZWYiWyhjID4+ICA4KSAmIDB4Zl07CisgICAgICAgICAgICBvdXRwdXRb
Y2hhcnMrK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMgPj4gIDQpICYgMHhmXTsKKyAgICAgICAg
ICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyAgICAgICkgJiAweGZd
OwogICAgIH0KICAgICByZXR1cm4gY2hhcnM7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hc2Np
aV9lc2NhcGVfdW5pY29kZShQeU9iamVjdCAqcHlzdHIpIHsKK2FzY2lpX2VzY2FwZV91bmljb2Rl
KFB5T2JqZWN0ICpweXN0cikKK3sKKyAgICAvKiBUYWtlIGEgUHlVbmljb2RlIHB5c3RyIGFuZCBy
ZXR1cm4gYSBuZXcgQVNDSUktb25seSBlc2NhcGVkIFB5U3RyaW5nICovCiAgICAgUHlfc3NpemVf
dCBpOwogICAgIFB5X3NzaXplX3QgaW5wdXRfY2hhcnM7CiAgICAgUHlfc3NpemVfdCBvdXRwdXRf
c2l6ZTsKKyAgICBQeV9zc2l6ZV90IG1heF9vdXRwdXRfc2l6ZTsKICAgICBQeV9zc2l6ZV90IGNo
YXJzOwogICAgIFB5T2JqZWN0ICpydmFsOwogICAgIGNoYXIgKm91dHB1dDsKQEAgLTgxLDggKzIz
MywxMCBAQCBhc2NpaV9lc2NhcGVfdW5pY29kZShQeU9iamVjdCAqcHlzdHIpIHsKIAogICAgIGlu
cHV0X2NoYXJzID0gUHlVbmljb2RlX0dFVF9TSVpFKHB5c3RyKTsKICAgICBpbnB1dF91bmljb2Rl
ID0gUHlVbmljb2RlX0FTX1VOSUNPREUocHlzdHIpOworCiAgICAgLyogT25lIGNoYXIgaW5wdXQg
Y2FuIGJlIHVwIHRvIDYgY2hhcnMgb3V0cHV0LCBlc3RpbWF0ZSA0IG9mIHRoZXNlICovCiAgICAg
b3V0cHV0X3NpemUgPSAyICsgKE1JTl9FWFBBTlNJT04gKiA0KSArIGlucHV0X2NoYXJzOworICAg
IG1heF9vdXRwdXRfc2l6ZSA9IDIgKyAoaW5wdXRfY2hhcnMgKiBNQVhfRVhQQU5TSU9OKTsKICAg
ICBydmFsID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0cHV0X3NpemUpOwog
ICAgIGlmIChydmFsID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC05NCwyMCAr
MjQ4LDI1IEBAIGFzY2lpX2VzY2FwZV91bmljb2RlKFB5T2JqZWN0ICpweXN0cikgewogICAgICAg
ICBQeV9VTklDT0RFIGMgPSBpbnB1dF91bmljb2RlW2ldOwogICAgICAgICBpZiAoU19DSEFSKGMp
KSB7CiAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOwotICAgICAgICB9IGVs
c2UgeworICAgICAgICB9CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY2hhcnMgPSBhc2Np
aV9lc2NhcGVfY2hhcihjLCBvdXRwdXQsIGNoYXJzKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
b3V0cHV0X3NpemUgLSBjaGFycyA8ICgxICsgTUFYX0VYUEFOU0lPTikpIHsKICAgICAgICAgICAg
IC8qIFRoZXJlJ3MgbW9yZSB0aGFuIGZvdXIsIHNvIGxldCdzIHJlc2l6ZSBieSBhIGxvdCAqLwot
ICAgICAgICAgICAgb3V0cHV0X3NpemUgKj0gMjsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbmV3
X291dHB1dF9zaXplID0gb3V0cHV0X3NpemUgKiAyOwogICAgICAgICAgICAgLyogVGhpcyBpcyBh
biB1cHBlciBib3VuZCAqLwotICAgICAgICAgICAgaWYgKG91dHB1dF9zaXplID4gMiArIChpbnB1
dF9jaGFycyAqIE1BWF9FWFBBTlNJT04pKSB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0X3NpemUg
PSAyICsgKGlucHV0X2NoYXJzICogTUFYX0VYUEFOU0lPTik7CisgICAgICAgICAgICBpZiAobmV3
X291dHB1dF9zaXplID4gbWF4X291dHB1dF9zaXplKSB7CisgICAgICAgICAgICAgICAgbmV3X291
dHB1dF9zaXplID0gbWF4X291dHB1dF9zaXplOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2YWwsIG91dHB1dF9zaXplKSA9PSAtMSkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgdGhl
IG91dHB1dCBzaXplIGNoYW5nZWQgYmVmb3JlIHJlc2l6aW5nICovCisgICAgICAgICAgICBpZiAo
bmV3X291dHB1dF9zaXplICE9IG91dHB1dF9zaXplKSB7CisgICAgICAgICAgICAgICAgb3V0cHV0
X3NpemUgPSBuZXdfb3V0cHV0X3NpemU7CisgICAgICAgICAgICAgICAgaWYgKF9QeVN0cmluZ19S
ZXNpemUoJnJ2YWwsIG91dHB1dF9zaXplKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0cHV0ID0g
UHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0
cHV0ID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwpOwogICAgICAgICB9CiAgICAgfQogICAgIG91
dHB1dFtjaGFycysrXSA9ICciJzsKQEAgLTExOCw3ICsyNzcsOSBAQCBhc2NpaV9lc2NhcGVfdW5p
Y29kZShQeU9iamVjdCAqcHlzdHIpIHsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFzY2lpX2Vz
Y2FwZV9zdHIoUHlPYmplY3QgKnB5c3RyKSB7Cithc2NpaV9lc2NhcGVfc3RyKFB5T2JqZWN0ICpw
eXN0cikKK3sKKyAgICAvKiBUYWtlIGEgUHlTdHJpbmcgcHlzdHIgYW5kIHJldHVybiBhIG5ldyBB
U0NJSS1vbmx5IGVzY2FwZWQgUHlTdHJpbmcgKi8KICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlf
c3NpemVfdCBpbnB1dF9jaGFyczsKICAgICBQeV9zc2l6ZV90IG91dHB1dF9zaXplOwpAQCAtMTI5
LDMxICsyOTAsNTYgQEAgYXNjaWlfZXNjYXBlX3N0cihQeU9iamVjdCAqcHlzdHIpIHsKIAogICAg
IGlucHV0X2NoYXJzID0gUHlTdHJpbmdfR0VUX1NJWkUocHlzdHIpOwogICAgIGlucHV0X3N0ciA9
IFB5U3RyaW5nX0FTX1NUUklORyhweXN0cik7Ci0gICAgLyogT25lIGNoYXIgaW5wdXQgY2FuIGJl
IHVwIHRvIDYgY2hhcnMgb3V0cHV0LCBlc3RpbWF0ZSA0IG9mIHRoZXNlICovCi0gICAgb3V0cHV0
X3NpemUgPSAyICsgKE1JTl9FWFBBTlNJT04gKiA0KSArIGlucHV0X2NoYXJzOworCisgICAgLyog
RmFzdCBwYXRoIGZvciBhIHN0cmluZyB0aGF0J3MgYWxyZWFkeSBBU0NJSSAqLworICAgIGZvciAo
aSA9IDA7IGkgPCBpbnB1dF9jaGFyczsgaSsrKSB7CisgICAgICAgIFB5X1VOSUNPREUgYyA9IChQ
eV9VTklDT0RFKSh1bnNpZ25lZCBjaGFyKWlucHV0X3N0cltpXTsKKyAgICAgICAgaWYgKCFTX0NI
QVIoYykpIHsKKyAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgdG8gZXNjYXBlIHNvbWV0aGluZywg
c2NhbiB0aGUgc3RyaW5nIGZvciB1bmljb2RlICovCisgICAgICAgICAgICBQeV9zc2l6ZV90IGo7
CisgICAgICAgICAgICBmb3IgKGogPSBpOyBqIDwgaW5wdXRfY2hhcnM7IGorKykgeworICAgICAg
ICAgICAgICAgIGMgPSAoUHlfVU5JQ09ERSkodW5zaWduZWQgY2hhcilpbnB1dF9zdHJbal07Cisg
ICAgICAgICAgICAgICAgaWYgKGMgPiAweDdmKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFdl
IGhpdCBhIG5vbi1BU0NJSSBjaGFyYWN0ZXIsIGJhaWwgdG8gdW5pY29kZSBtb2RlICovCisgICAg
ICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmk7CisgICAgICAgICAgICAgICAgICAgIHVuaSA9
IFB5VW5pY29kZV9EZWNvZGVVVEY4KGlucHV0X3N0ciwgaW5wdXRfY2hhcnMsICJzdHJpY3QiKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBydmFsID0gYXNjaWlfZXNjYXBlX3VuaWNvZGUodW5pKTsKKyAgICAgICAgICAgICAg
ICAgICAgUHlfREVDUkVGKHVuaSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBydmFsOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGkgPT0gaW5wdXRfY2hhcnMpIHsKKyAgICAgICAgLyog
SW5wdXQgaXMgYWxyZWFkeSBBU0NJSSAqLworICAgICAgICBvdXRwdXRfc2l6ZSA9IDIgKyBpbnB1
dF9jaGFyczsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIE9uZSBjaGFyIGlucHV0IGNh
biBiZSB1cCB0byA2IGNoYXJzIG91dHB1dCwgZXN0aW1hdGUgNCBvZiB0aGVzZSAqLworICAgICAg
ICBvdXRwdXRfc2l6ZSA9IDIgKyAoTUlOX0VYUEFOU0lPTiAqIDQpICsgaW5wdXRfY2hhcnM7Cisg
ICAgfQogICAgIHJ2YWwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBvdXRwdXRf
c2l6ZSk7CiAgICAgaWYgKHJ2YWwgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAg
ICB9CiAgICAgb3V0cHV0ID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwpOwotICAgIGNoYXJzID0g
MDsKLSAgICBvdXRwdXRbY2hhcnMrK10gPSAnIic7Ci0gICAgZm9yIChpID0gMDsgaSA8IGlucHV0
X2NoYXJzOyBpKyspIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gKFB5X1VOSUNPREUpaW5wdXRf
c3RyW2ldOworICAgIG91dHB1dFswXSA9ICciJzsKKworICAgIC8qIFdlIGtub3cgdGhhdCBldmVy
eXRoaW5nIHVwIHRvIGkgaXMgQVNDSUkgYWxyZWFkeSAqLworICAgIGNoYXJzID0gaSArIDE7Cisg
ICAgbWVtY3B5KCZvdXRwdXRbMV0sIGlucHV0X3N0ciwgaSk7CisKKyAgICBmb3IgKDsgaSA8IGlu
cHV0X2NoYXJzOyBpKyspIHsKKyAgICAgICAgUHlfVU5JQ09ERSBjID0gKFB5X1VOSUNPREUpKHVu
c2lnbmVkIGNoYXIpaW5wdXRfc3RyW2ldOwogICAgICAgICBpZiAoU19DSEFSKGMpKSB7CiAgICAg
ICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOwotICAgICAgICB9IGVsc2UgaWYgKGMg
PiAweDdGKSB7Ci0gICAgICAgICAgICAvKiBXZSBoaXQgYSBub24tQVNDSUkgY2hhcmFjdGVyLCBi
YWlsIHRvIHVuaWNvZGUgbW9kZSAqLwotICAgICAgICAgICAgUHlPYmplY3QgKnVuaTsKLSAgICAg
ICAgICAgIFB5X0RFQ1JFRihydmFsKTsKLSAgICAgICAgICAgIHVuaSA9IFB5VW5pY29kZV9EZWNv
ZGVVVEY4KGlucHV0X3N0ciwgaW5wdXRfY2hhcnMsICJzdHJpY3QiKTsKLSAgICAgICAgICAgIGlm
ICh1bmkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcnZhbCA9IGFzY2lpX2VzY2FwZV91bmljb2RlKHVuaSk7Ci0gICAg
ICAgICAgICBQeV9ERUNSRUYodW5pKTsKLSAgICAgICAgICAgIHJldHVybiBydmFsOwotICAgICAg
ICB9IGVsc2UgeworICAgICAgICB9CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY2hhcnMg
PSBhc2NpaV9lc2NhcGVfY2hhcihjLCBvdXRwdXQsIGNoYXJzKTsKICAgICAgICAgfQogICAgICAg
ICAvKiBBbiBBU0NJSSBjaGFyIGNhbid0IHBvc3NpYmx5IGV4cGFuZCB0byBhIHN1cnJvZ2F0ZSEg
Ki8KQEAgLTE3Niw0MCArMzYyLDIyOTEgQEAgYXNjaWlfZXNjYXBlX3N0cihQeU9iamVjdCAqcHlz
dHIpIHsKICAgICByZXR1cm4gcnZhbDsKIH0KIAorc3RhdGljIHZvaWQKK3JhaXNlX2Vycm1zZyhj
aGFyICptc2csIFB5T2JqZWN0ICpzLCBQeV9zc2l6ZV90IGVuZCkKK3sKKyAgICAvKiBVc2UgdGhl
IFB5dGhvbiBmdW5jdGlvbiBzaW1wbGVqc29uLmRlY29kZXIuZXJybXNnIHRvIHJhaXNlIGEgbmlj
ZQorICAgIGxvb2tpbmcgVmFsdWVFcnJvciBleGNlcHRpb24gKi8KKyAgICBzdGF0aWMgUHlPYmpl
Y3QgKkpTT05EZWNvZGVFcnJvciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmV4YzsKKyAgICBpZiAo
SlNPTkRlY29kZUVycm9yID09IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKmRlY29kZXIgPSBQ
eUltcG9ydF9JbXBvcnRNb2R1bGUoInNpbXBsZWpzb24uZGVjb2RlciIpOworICAgICAgICBpZiAo
ZGVjb2RlciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBKU09ORGVjb2Rl
RXJyb3IgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGRlY29kZXIsICJKU09ORGVjb2RlRXJyb3Ii
KTsKKyAgICAgICAgUHlfREVDUkVGKGRlY29kZXIpOworICAgICAgICBpZiAoSlNPTkRlY29kZUVy
cm9yID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGV4YyA9IFB5T2Jq
ZWN0X0NhbGxGdW5jdGlvbihKU09ORGVjb2RlRXJyb3IsICIoek9PJikiLCBtc2csIHMsIF9jb252
ZXJ0UHlJbnRfRnJvbVNzaXplX3QsICZlbmQpOworICAgIGlmIChleGMpIHsKKyAgICAgICAgUHlF
cnJfU2V0T2JqZWN0KEpTT05EZWNvZGVFcnJvciwgZXhjKTsKKyAgICAgICAgUHlfREVDUkVGKGV4
Yyk7CisgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QgKgoram9pbl9saXN0X3VuaWNvZGUoUHlP
YmplY3QgKmxzdCkKK3sKKyAgICAvKiByZXR1cm4gdScnLmpvaW4obHN0KSAqLworICAgIHN0YXRp
YyBQeU9iamVjdCAqam9pbmZuID0gTlVMTDsKKyAgICBpZiAoam9pbmZuID09IE5VTEwpIHsKKyAg
ICAgICAgUHlPYmplY3QgKnVzdHIgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTlVMTCwgMCk7Cisg
ICAgICAgIGlmICh1c3RyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAg
ICAgICBqb2luZm4gPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHVzdHIsICJqb2luIik7CisgICAg
ICAgIFB5X0RFQ1JFRih1c3RyKTsKKyAgICAgICAgaWYgKGpvaW5mbiA9PSBOVUxMKQorICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rp
b25PYmpBcmdzKGpvaW5mbiwgbHN0LCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2pv
aW5fbGlzdF9zdHJpbmcoUHlPYmplY3QgKmxzdCkKK3sKKyAgICAvKiByZXR1cm4gJycuam9pbihs
c3QpICovCisgICAgc3RhdGljIFB5T2JqZWN0ICpqb2luZm4gPSBOVUxMOworICAgIGlmIChqb2lu
Zm4gPT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqdXN0ciA9IFB5U3RyaW5nX0Zyb21TdHJp
bmdBbmRTaXplKE5VTEwsIDApOworICAgICAgICBpZiAodXN0ciA9PSBOVUxMKQorICAgICAgICAg
ICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgam9pbmZuID0gUHlPYmplY3RfR2V0QXR0clN0cmlu
Zyh1c3RyLCAiam9pbiIpOworICAgICAgICBQeV9ERUNSRUYodXN0cik7CisgICAgICAgIGlmIChq
b2luZm4gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1
cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhqb2luZm4sIGxzdCwgTlVMTCk7Cit9CisK
K3N0YXRpYyBQeU9iamVjdCAqCitfYnVpbGRfcnZhbF9pbmRleF90dXBsZShQeU9iamVjdCAqcnZh
bCwgUHlfc3NpemVfdCBpZHgpIHsKKyAgICAvKiByZXR1cm4gKHJ2YWwsIGlkeCkgdHVwbGUsIHN0
ZWFsaW5nIHJlZmVyZW5jZSB0byBydmFsICovCisgICAgUHlPYmplY3QgKnRwbDsKKyAgICBQeU9i
amVjdCAqcHlpZHg7CisgICAgLyoKKyAgICBzdGVhbCBhIHJlZmVyZW5jZSB0byBydmFsLCByZXR1
cm5zIChydmFsLCBpZHgpCisgICAgKi8KKyAgICBpZiAocnZhbCA9PSBOVUxMKSB7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KKyAgICBweWlkeCA9IFB5SW50X0Zyb21Tc2l6ZV90KGlkeCk7
CisgICAgaWYgKHB5aWR4ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJ2YWwpOworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdHBsID0gUHlUdXBsZV9OZXcoMik7CisgICAg
aWYgKHRwbCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihweWlkeCk7CisgICAgICAgIFB5
X0RFQ1JFRihydmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVf
U0VUX0lURU0odHBsLCAwLCBydmFsKTsKKyAgICBQeVR1cGxlX1NFVF9JVEVNKHRwbCwgMSwgcHlp
ZHgpOworICAgIHJldHVybiB0cGw7Cit9CisKKyNkZWZpbmUgQVBQRU5EX09MRF9DSFVOSyBcCisg
ICAgaWYgKGNodW5rICE9IE5VTEwpIHsgXAorICAgICAgICBpZiAoY2h1bmtzID09IE5VTEwpIHsg
XAorICAgICAgICAgICAgY2h1bmtzID0gUHlMaXN0X05ldygwKTsgXAorICAgICAgICAgICAgaWYg
KGNodW5rcyA9PSBOVUxMKSB7IFwKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7IFwKKyAgICAg
ICAgICAgIH0gXAorICAgICAgICB9IFwKKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY2h1bmtz
LCBjaHVuaykpIHsgXAorICAgICAgICAgICAgZ290byBiYWlsOyBcCisgICAgICAgIH0gXAorICAg
ICAgICBQeV9DTEVBUihjaHVuayk7IFwKKyAgICB9CisKK3N0YXRpYyBQeU9iamVjdCAqCitzY2Fu
c3RyaW5nX3N0cihQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgZW5kLCBjaGFyICplbmNvZGlu
ZywgaW50IHN0cmljdCwgUHlfc3NpemVfdCAqbmV4dF9lbmRfcHRyKQoreworICAgIC8qIFJlYWQg
dGhlIEpTT04gc3RyaW5nIGZyb20gUHlTdHJpbmcgcHlzdHIuCisgICAgZW5kIGlzIHRoZSBpbmRl
eCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBxdW90ZS4KKyAgICBlbmNvZGluZyBp
cyB0aGUgZW5jb2Rpbmcgb2YgcHlzdHIgKG11c3QgYmUgYW4gQVNDSUkgc3VwZXJzZXQpCisgICAg
aWYgc3RyaWN0IGlzIHplcm8gdGhlbiBsaXRlcmFsIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgYWxs
b3dlZAorICAgICpuZXh0X2VuZF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IG9m
IHRoZSBjaGFyYWN0ZXIKKyAgICAgICAgYWZ0ZXIgdGhlIGVuZCBxdW90ZQorCisgICAgUmV0dXJu
IHZhbHVlIGlzIGEgbmV3IFB5U3RyaW5nIChpZiBBU0NJSS1vbmx5KSBvciBQeVVuaWNvZGUKKyAg
ICAqLworICAgIFB5T2JqZWN0ICpydmFsOworICAgIFB5X3NzaXplX3QgbGVuID0gUHlTdHJpbmdf
R0VUX1NJWkUocHlzdHIpOworICAgIFB5X3NzaXplX3QgYmVnaW4gPSBlbmQgLSAxOworICAgIFB5
X3NzaXplX3QgbmV4dCA9IGJlZ2luOworICAgIGludCBoYXNfdW5pY29kZSA9IDA7CisgICAgY2hh
ciAqYnVmID0gUHlTdHJpbmdfQVNfU1RSSU5HKHB5c3RyKTsKKyAgICBQeU9iamVjdCAqY2h1bmtz
ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY2h1bmsgPSBOVUxMOworCisgICAgaWYgKGVuZCA8IDAg
fHwgbGVuIDw9IGVuZCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJv
ciwgImVuZCBpcyBvdXQgb2YgYm91bmRzIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9Cisg
ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgLyogRmluZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgb3Ig
dGhlIG5leHQgZXNjYXBlICovCisgICAgICAgIFB5X1VOSUNPREUgYyA9IDA7CisgICAgICAgIGZv
ciAobmV4dCA9IGVuZDsgbmV4dCA8IGxlbjsgbmV4dCsrKSB7CisgICAgICAgICAgICBjID0gKHVu
c2lnbmVkIGNoYXIpYnVmW25leHRdOworICAgICAgICAgICAgaWYgKGMgPT0gJyInIHx8IGMgPT0g
J1xcJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAoc3RyaWN0ICYmIGMgPD0gMHgxZikgeworICAgICAgICAgICAgICAgIHJhaXNl
X2Vycm1zZygiSW52YWxpZCBjb250cm9sIGNoYXJhY3RlciBhdCIsIHB5c3RyLCBuZXh0KTsKKyAg
ICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChjID4gMHg3ZikgeworICAgICAgICAgICAgICAgIGhhc191bmljb2RlID0gMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIShjID09ICciJyB8fCBjID09ICdcXCcp
KSB7CisgICAgICAgICAgICByYWlzZV9lcnJtc2coIlVudGVybWluYXRlZCBzdHJpbmcgc3RhcnRp
bmcgYXQiLCBweXN0ciwgYmVnaW4pOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9
CisgICAgICAgIC8qIFBpY2sgdXAgdGhpcyBjaHVuayBpZiBpdCdzIG5vdCB6ZXJvIGxlbmd0aCAq
LworICAgICAgICBpZiAobmV4dCAhPSBlbmQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdHJj
aHVuazsKKyAgICAgICAgICAgIEFQUEVORF9PTERfQ0hVTksKKyAgICAgICAgICAgIHN0cmNodW5r
ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoJmJ1ZltlbmRdLCBuZXh0IC0gZW5kKTsKKyAg
ICAgICAgICAgIGlmIChzdHJjaHVuayA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZ290byBi
YWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhhc191bmljb2RlKSB7CisgICAg
ICAgICAgICAgICAgY2h1bmsgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Qoc3RyY2h1bmss
IGVuY29kaW5nLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyY2h1bmspOwor
ICAgICAgICAgICAgICAgIGlmIChjaHVuayA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAg
IGdvdG8gYmFpbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjaHVuayA9IHN0cmNodW5rOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIG5leHQrKzsKKyAgICAgICAgaWYgKGMgPT0gJyInKSB7Cisg
ICAgICAgICAgICBlbmQgPSBuZXh0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG5leHQgPT0gbGVuKSB7CisgICAgICAgICAgICByYWlzZV9lcnJtc2coIlVudGVy
bWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBweXN0ciwgYmVnaW4pOworICAgICAgICAgICAg
Z290byBiYWlsOworICAgICAgICB9CisgICAgICAgIGMgPSBidWZbbmV4dF07CisgICAgICAgIGlm
IChjICE9ICd1JykgeworICAgICAgICAgICAgLyogTm9uLXVuaWNvZGUgYmFja3NsYXNoIGVzY2Fw
ZXMgKi8KKyAgICAgICAgICAgIGVuZCA9IG5leHQgKyAxOworICAgICAgICAgICAgc3dpdGNoIChj
KSB7CisgICAgICAgICAgICAgICAgY2FzZSAnIic6IGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgJ1xcJzogYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnLyc6IGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgJ2InOiBjID0gJ1xiJzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSAnZic6IGMgPSAnXGYnOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICduJzogYyA9ICdc
bic7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ3InOiBjID0gJ1xyJzsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAndCc6IGMgPSAnXHQnOyBicmVhazsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBjID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID09IDAp
IHsKKyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFxlc2NhcGUiLCBweXN0
ciwgZW5kIC0gMik7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYyA9IDA7CisgICAgICAgICAg
ICBuZXh0Kys7CisgICAgICAgICAgICBlbmQgPSBuZXh0ICsgNDsKKyAgICAgICAgICAgIGlmIChl
bmQgPj0gbGVuKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhY
WFggZXNjYXBlIiwgcHlzdHIsIG5leHQgLSAxKTsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBEZWNvZGUgNCBoZXggZGlnaXRzICovCisg
ICAgICAgICAgICBmb3IgKDsgbmV4dCA8IGVuZDsgbmV4dCsrKSB7CisgICAgICAgICAgICAgICAg
UHlfVU5JQ09ERSBkaWdpdCA9IGJ1ZltuZXh0XTsKKyAgICAgICAgICAgICAgICBjIDw8PSA0Owor
ICAgICAgICAgICAgICAgIHN3aXRjaCAoZGlnaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAn
OSc6CisgICAgICAgICAgICAgICAgICAgICAgICBjIHw9IChkaWdpdCAtICcwJyk7IGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdk
JzogY2FzZSAnZSc6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgYyB8PSAoZGlnaXQgLSAnYScgKyAxMCk7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0YnOgorICAgICAgICAgICAgICAgICAgICAgICAg
YyB8PSAoZGlnaXQgLSAnQScgKyAxMCk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhY
WFggZXNjYXBlIiwgcHlzdHIsIGVuZCAtIDUpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290
byBiYWlsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNpZmRlZiBQeV9VTklD
T0RFX1dJREUKKyAgICAgICAgICAgIC8qIFN1cnJvZ2F0ZSBwYWlyICovCisgICAgICAgICAgICBp
ZiAoKGMgJiAweGZjMDApID09IDB4ZDgwMCkgeworICAgICAgICAgICAgICAgIFB5X1VOSUNPREUg
YzIgPSAwOworICAgICAgICAgICAgICAgIGlmIChlbmQgKyA2ID49IGxlbikgeworICAgICAgICAg
ICAgICAgICAgICByYWlzZV9lcnJtc2coIlVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlIiwgcHlzdHIs
IGVuZCAtIDUpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChidWZbbmV4dCsrXSAhPSAnXFwnIHx8IGJ1ZltuZXh0
KytdICE9ICd1JykgeworICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIlVucGFpcmVk
IGhpZ2ggc3Vycm9nYXRlIiwgcHlzdHIsIGVuZCAtIDUpOworICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhaWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuZCArPSA2Owor
ICAgICAgICAgICAgICAgIC8qIERlY29kZSA0IGhleCBkaWdpdHMgKi8KKyAgICAgICAgICAgICAg
ICBmb3IgKDsgbmV4dCA8IGVuZDsgbmV4dCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGMyIDw8
PSA0OworICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGRpZ2l0ID0gYnVmW25leHRdOwor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRpZ2l0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNl
ICc4JzogY2FzZSAnOSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0
IC0gJzAnKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzogY2FzZSAn
Yic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAn
YScgKyAxMCk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQSc6IGNhc2Ug
J0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnRic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0g
J0EnICsgMTApOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhYWFggZXNj
YXBlIiwgcHlzdHIsIGVuZCAtIDUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFpbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoKGMyICYgMHhmYzAwKSAhPSAweGRjMDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1
KTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBjID0gMHgxMDAwMCArICgoKGMgLSAweGQ4MDApIDw8IDEwKSB8IChjMiAt
IDB4ZGMwMCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKGMgJiAweGZj
MDApID09IDB4ZGMwMCkgeworICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW5wYWlyZWQg
bG93IHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICBnb3RvIGJh
aWw7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBpZiAoYyA+IDB4
N2YpIHsKKyAgICAgICAgICAgIGhhc191bmljb2RlID0gMTsKKyAgICAgICAgfQorICAgICAgICBB
UFBFTkRfT0xEX0NIVU5LCisgICAgICAgIGlmIChoYXNfdW5pY29kZSkgeworICAgICAgICAgICAg
Y2h1bmsgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoJmMsIDEpOworICAgICAgICAgICAgaWYgKGNo
dW5rID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjaGFyIGNfY2hhciA9IFB5
X0NIQVJNQVNLKGMpOworICAgICAgICAgICAgY2h1bmsgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5k
U2l6ZSgmY19jaGFyLCAxKTsKKyAgICAgICAgICAgIGlmIChjaHVuayA9PSBOVUxMKSB7CisgICAg
ICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKGNodW5rcyA9PSBOVUxMKSB7CisgICAgICAgIGlmIChjaHVuayAhPSBOVUxMKQor
ICAgICAgICAgICAgcnZhbCA9IGNodW5rOworICAgICAgICBlbHNlCisgICAgICAgICAgICBydmFs
ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOworICAgIH0KKyAgICBlbHNlIHsK
KyAgICAgICAgQVBQRU5EX09MRF9DSFVOSworICAgICAgICBydmFsID0gam9pbl9saXN0X3N0cmlu
ZyhjaHVua3MpOworICAgICAgICBpZiAocnZhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3Rv
IGJhaWw7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoY2h1bmtzKTsKKyAgICB9CisKKyAg
ICAqbmV4dF9lbmRfcHRyID0gZW5kOworICAgIHJldHVybiBydmFsOworYmFpbDoKKyAgICAqbmV4
dF9lbmRfcHRyID0gLTE7CisgICAgUHlfWERFQ1JFRihjaHVuayk7CisgICAgUHlfWERFQ1JFRihj
aHVua3MpOworICAgIHJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyBQeU9iamVjdCAqCitzY2Fu
c3RyaW5nX3VuaWNvZGUoUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGVuZCwgaW50IHN0cmlj
dCwgUHlfc3NpemVfdCAqbmV4dF9lbmRfcHRyKQoreworICAgIC8qIFJlYWQgdGhlIEpTT04gc3Ry
aW5nIGZyb20gUHlVbmljb2RlIHB5c3RyLgorICAgIGVuZCBpcyB0aGUgaW5kZXggb2YgdGhlIGZp
cnN0IGNoYXJhY3RlciBhZnRlciB0aGUgcXVvdGUuCisgICAgaWYgc3RyaWN0IGlzIHplcm8gdGhl
biBsaXRlcmFsIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgYWxsb3dlZAorICAgICpuZXh0X2VuZF9w
dHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIKKyAgICAg
ICAgYWZ0ZXIgdGhlIGVuZCBxdW90ZQorCisgICAgUmV0dXJuIHZhbHVlIGlzIGEgbmV3IFB5VW5p
Y29kZQorICAgICovCisgICAgUHlPYmplY3QgKnJ2YWw7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQ
eVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpOworICAgIFB5X3NzaXplX3QgYmVnaW4gPSBlbmQgLSAx
OworICAgIFB5X3NzaXplX3QgbmV4dCA9IGJlZ2luOworICAgIGNvbnN0IFB5X1VOSUNPREUgKmJ1
ZiA9IFB5VW5pY29kZV9BU19VTklDT0RFKHB5c3RyKTsKKyAgICBQeU9iamVjdCAqY2h1bmtzID0g
TlVMTDsKKyAgICBQeU9iamVjdCAqY2h1bmsgPSBOVUxMOworCisgICAgaWYgKGVuZCA8IDAgfHwg
bGVuIDw9IGVuZCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwg
ImVuZCBpcyBvdXQgb2YgYm91bmRzIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgLyogRmluZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgb3IgdGhl
IG5leHQgZXNjYXBlICovCisgICAgICAgIFB5X1VOSUNPREUgYyA9IDA7CisgICAgICAgIGZvciAo
bmV4dCA9IGVuZDsgbmV4dCA8IGxlbjsgbmV4dCsrKSB7CisgICAgICAgICAgICBjID0gYnVmW25l
eHRdOworICAgICAgICAgICAgaWYgKGMgPT0gJyInIHx8IGMgPT0gJ1xcJykgeworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc3RyaWN0
ICYmIGMgPD0gMHgxZikgeworICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBj
b250cm9sIGNoYXJhY3RlciBhdCIsIHB5c3RyLCBuZXh0KTsKKyAgICAgICAgICAgICAgICBnb3Rv
IGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEoYyA9PSAnIicg
fHwgYyA9PSAnXFwnKSkgeworICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnRlcm1pbmF0ZWQg
c3RyaW5nIHN0YXJ0aW5nIGF0IiwgcHlzdHIsIGJlZ2luKTsKKyAgICAgICAgICAgIGdvdG8gYmFp
bDsKKyAgICAgICAgfQorICAgICAgICAvKiBQaWNrIHVwIHRoaXMgY2h1bmsgaWYgaXQncyBub3Qg
emVybyBsZW5ndGggKi8KKyAgICAgICAgaWYgKG5leHQgIT0gZW5kKSB7CisgICAgICAgICAgICBB
UFBFTkRfT0xEX0NIVU5LCisgICAgICAgICAgICBjaHVuayA9IFB5VW5pY29kZV9Gcm9tVW5pY29k
ZSgmYnVmW2VuZF0sIG5leHQgLSBlbmQpOworICAgICAgICAgICAgaWYgKGNodW5rID09IE5VTEwp
IHsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgbmV4dCsrOworICAgICAgICBpZiAoYyA9PSAnIicpIHsKKyAgICAgICAgICAgIGVu
ZCA9IG5leHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV4
dCA9PSBsZW4pIHsKKyAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW50ZXJtaW5hdGVkIHN0cmlu
ZyBzdGFydGluZyBhdCIsIHB5c3RyLCBiZWdpbik7CisgICAgICAgICAgICBnb3RvIGJhaWw7Cisg
ICAgICAgIH0KKyAgICAgICAgYyA9IGJ1ZltuZXh0XTsKKyAgICAgICAgaWYgKGMgIT0gJ3UnKSB7
CisgICAgICAgICAgICAvKiBOb24tdW5pY29kZSBiYWNrc2xhc2ggZXNjYXBlcyAqLworICAgICAg
ICAgICAgZW5kID0gbmV4dCArIDE7CisgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlICciJzogYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnXFwnOiBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlICcvJzogYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSAnYic6IGMgPSAnXGInOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdmJzogYyA9ICdc
Zic7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ24nOiBjID0gJ1xuJzsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAncic6IGMgPSAnXHInOyBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlICd0JzogYyA9ICdcdCc7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGMg
PSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPT0gMCkgeworICAgICAgICAg
ICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXGVzY2FwZSIsIHB5c3RyLCBlbmQgLSAyKTsK
KyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBjID0gMDsKKyAgICAgICAgICAgIG5leHQrKzsKKyAg
ICAgICAgICAgIGVuZCA9IG5leHQgKyA0OworICAgICAgICAgICAgaWYgKGVuZCA+PSBsZW4pIHsK
KyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFx1WFhYWCBlc2NhcGUiLCBw
eXN0ciwgbmV4dCAtIDEpOworICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8qIERlY29kZSA0IGhleCBkaWdpdHMgKi8KKyAgICAgICAgICAgIGZv
ciAoOyBuZXh0IDwgZW5kOyBuZXh0KyspIHsKKyAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGRp
Z2l0ID0gYnVmW25leHRdOworICAgICAgICAgICAgICAgIGMgPDw9IDQ7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChkaWdpdCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzogY2FzZSAn
MSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJzAnKTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgICAgICAgICBj
IHw9IChkaWdpdCAtICdhJyArIDEwKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnRic6CisgICAgICAgICAgICAgICAgICAgICAgICBjIHw9IChkaWdpdCAt
ICdBJyArIDEwKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFx1WFhYWCBlc2NhcGUiLCBw
eXN0ciwgZW5kIC0gNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAg
ICAgICAgICAgLyogU3Vycm9nYXRlIHBhaXIgKi8KKyAgICAgICAgICAgIGlmICgoYyAmIDB4ZmMw
MCkgPT0gMHhkODAwKSB7CisgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBjMiA9IDA7CisgICAg
ICAgICAgICAgICAgaWYgKGVuZCArIDYgPj0gbGVuKSB7CisgICAgICAgICAgICAgICAgICAgIHJh
aXNlX2Vycm1zZygiVW5wYWlyZWQgaGlnaCBzdXJyb2dhdGUiLCBweXN0ciwgZW5kIC0gNSk7Cisg
ICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKGJ1ZltuZXh0KytdICE9ICdcXCcgfHwgYnVmW25leHQrK10gIT0gJ3UnKSB7
CisgICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW5wYWlyZWQgaGlnaCBzdXJyb2dh
dGUiLCBweXN0ciwgZW5kIC0gNSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kICs9IDY7CisgICAgICAgICAgICAg
ICAgLyogRGVjb2RlIDQgaGV4IGRpZ2l0cyAqLworICAgICAgICAgICAgICAgIGZvciAoOyBuZXh0
IDwgZW5kOyBuZXh0KyspIHsKKyAgICAgICAgICAgICAgICAgICAgYzIgPDw9IDQ7CisgICAgICAg
ICAgICAgICAgICAgIFB5X1VOSUNPREUgZGlnaXQgPSBidWZbbmV4dF07CisgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAoZGlnaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAn
OiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5
JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnMCcpOyBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6
IGNhc2UgJ2QnOiBjYXNlICdlJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAtICdhJyArIDEwKTsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0Mn
OiBjYXNlICdEJzogY2FzZSAnRSc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnQScgKyAxMCk7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFx1WFhYWCBlc2NhcGUiLCBweXN0ciwg
ZW5kIC0gNSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgo
YzIgJiAweGZjMDApICE9IDB4ZGMwMCkgeworICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJt
c2coIlVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlIiwgcHlzdHIsIGVuZCAtIDUpOworICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGMgPSAweDEwMDAwICsgKCgoYyAtIDB4ZDgwMCkgPDwgMTApIHwgKGMyIC0gMHhkYzAwKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgoYyAmIDB4ZmMwMCkgPT0gMHhkYzAw
KSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBsb3cgc3Vycm9nYXRl
IiwgcHlzdHIsIGVuZCAtIDUpOworICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIEFQUEVORF9PTERfQ0hVTksKKyAgICAg
ICAgY2h1bmsgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoJmMsIDEpOworICAgICAgICBpZiAoY2h1
bmsgPT0gTlVMTCkgeworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKGNodW5rcyA9PSBOVUxMKSB7CisgICAgICAgIGlmIChjaHVuayAhPSBOVUxMKQor
ICAgICAgICAgICAgcnZhbCA9IGNodW5rOworICAgICAgICBlbHNlCisgICAgICAgICAgICBydmFs
ID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIDApOworICAgIH0KKyAgICBlbHNlIHsKKyAg
ICAgICAgQVBQRU5EX09MRF9DSFVOSworICAgICAgICBydmFsID0gam9pbl9saXN0X3VuaWNvZGUo
Y2h1bmtzKTsKKyAgICAgICAgaWYgKHJ2YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgZ290byBi
YWlsOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKGNodW5rcyk7CisgICAgfQorICAgICpu
ZXh0X2VuZF9wdHIgPSBlbmQ7CisgICAgcmV0dXJuIHJ2YWw7CitiYWlsOgorICAgICpuZXh0X2Vu
ZF9wdHIgPSAtMTsKKyAgICBQeV9YREVDUkVGKGNodW5rKTsKKyAgICBQeV9YREVDUkVGKGNodW5r
cyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5RG9jX1NUUlZBUihweWRvY19zY2Fuc3RyaW5n
LAorICAgICJzY2Fuc3RyaW5nKGJhc2VzdHJpbmcsIGVuZCwgZW5jb2RpbmcsIHN0cmljdD1UcnVl
KSAtPiAoc3RyLCBlbmQpXG4iCisgICAgIlxuIgorICAgICJTY2FuIHRoZSBzdHJpbmcgcyBmb3Ig
YSBKU09OIHN0cmluZy4gRW5kIGlzIHRoZSBpbmRleCBvZiB0aGVcbiIKKyAgICAiY2hhcmFjdGVy
IGluIHMgYWZ0ZXIgdGhlIHF1b3RlIHRoYXQgc3RhcnRlZCB0aGUgSlNPTiBzdHJpbmcuXG4iCisg
ICAgIlVuZXNjYXBlcyBhbGwgdmFsaWQgSlNPTiBzdHJpbmcgZXNjYXBlIHNlcXVlbmNlcyBhbmQg
cmFpc2VzIFZhbHVlRXJyb3JcbiIKKyAgICAib24gYXR0ZW1wdCB0byBkZWNvZGUgYW4gaW52YWxp
ZCBzdHJpbmcuIElmIHN0cmljdCBpcyBGYWxzZSB0aGVuIGxpdGVyYWxcbiIKKyAgICAiY29udHJv
bCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkIGluIHRoZSBzdHJpbmcuXG4iCisgICAgIlxuIgorICAg
ICJSZXR1cm5zIGEgdHVwbGUgb2YgdGhlIGRlY29kZWQgc3RyaW5nIGFuZCB0aGUgaW5kZXggb2Yg
dGhlIGNoYXJhY3RlciBpbiBzXG4iCisgICAgImFmdGVyIHRoZSBlbmQgcXVvdGUuIgorKTsKKwor
c3RhdGljIFB5T2JqZWN0ICoKK3B5X3NjYW5zdHJpbmcoUHlPYmplY3QqIHNlbGYgVU5VU0VELCBQ
eU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcHlzdHI7CisgICAgUHlPYmplY3QgKnJ2
YWw7CisgICAgUHlfc3NpemVfdCBlbmQ7CisgICAgUHlfc3NpemVfdCBuZXh0X2VuZCA9IC0xOwor
ICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKKyAgICBpbnQgc3RyaWN0ID0gMTsKKyAgICBpZiAo
IVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PJnx6aTpzY2Fuc3RyaW5nIiwgJnB5c3RyLCBfY29u
dmVydFB5SW50X0FzU3NpemVfdCwgJmVuZCwgJmVuY29kaW5nLCAmc3RyaWN0KSkgeworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKKyAgICAg
ICAgZW5jb2RpbmcgPSBERUZBVUxUX0VOQ09ESU5HOworICAgIH0KKyAgICBpZiAoUHlTdHJpbmdf
Q2hlY2socHlzdHIpKSB7CisgICAgICAgIHJ2YWwgPSBzY2Fuc3RyaW5nX3N0cihweXN0ciwgZW5k
LCBlbmNvZGluZywgc3RyaWN0LCAmbmV4dF9lbmQpOworICAgIH0KKyAgICBlbHNlIGlmIChQeVVu
aWNvZGVfQ2hlY2socHlzdHIpKSB7CisgICAgICAgIHJ2YWwgPSBzY2Fuc3RyaW5nX3VuaWNvZGUo
cHlzdHIsIGVuZCwgc3RyaWN0LCAmbmV4dF9lbmQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAg
ICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJm
aXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBub3QgJS44MHMiLAorICAgICAgICAgICAg
ICAgICAgICAgUHlfVFlQRShweXN0ciktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICB9CisgICAgcmV0dXJuIF9idWlsZF9ydmFsX2luZGV4X3R1cGxlKHJ2YWwsIG5leHRfZW5k
KTsKK30KKwogUHlEb2NfU1RSVkFSKHB5ZG9jX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLAogICAg
ICJlbmNvZGVfYmFzZXN0cmluZ19hc2NpaShiYXNlc3RyaW5nKSAtPiBzdHJcbiIKICAgICAiXG4i
Ci0gICAgIi4uLiIKKyAgICAiUmV0dXJuIGFuIEFTQ0lJLW9ubHkgSlNPTiByZXByZXNlbnRhdGlv
biBvZiBhIFB5dGhvbiBzdHJpbmciCiApOwogCiBzdGF0aWMgUHlPYmplY3QgKgotcHlfZW5jb2Rl
X2Jhc2VzdHJpbmdfYXNjaWkoUHlPYmplY3QqIHNlbGYgX19hdHRyaWJ1dGVfXygoX191bnVzZWRf
XykpLCBQeU9iamVjdCAqcHlzdHIpIHsKK3B5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKFB5T2Jq
ZWN0KiBzZWxmIFVOVVNFRCwgUHlPYmplY3QgKnB5c3RyKQoreworICAgIC8qIFJldHVybiBhbiBB
U0NJSS1vbmx5IEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gc3RyaW5nICovCiAgICAg
LyogTUVUSF9PICovCiAgICAgaWYgKFB5U3RyaW5nX0NoZWNrKHB5c3RyKSkgewogICAgICAgICBy
ZXR1cm4gYXNjaWlfZXNjYXBlX3N0cihweXN0cik7Ci0gICAgfSBlbHNlIGlmIChQeVVuaWNvZGVf
Q2hlY2socHlzdHIpKSB7CisgICAgfQorICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0
cikpIHsKICAgICAgICAgcmV0dXJuIGFzY2lpX2VzY2FwZV91bmljb2RlKHB5c3RyKTsKICAgICB9
Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImZpcnN0IGFyZ3VtZW50IG11
c3QgYmUgYSBzdHJpbmciKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhj
X1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBtdXN0IGJl
IGEgc3RyaW5nLCBub3QgJS44MHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShweXN0
ciktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkCitzY2FubmVyX2RlYWxsb2MoUHlPYmplY3QgKnNlbGYpCit7CisgICAgLyogRGVhbGxvY2F0
ZSBzY2FubmVyIG9iamVjdCAqLworICAgIHNjYW5uZXJfY2xlYXIoc2VsZik7CisgICAgUHlfVFlQ
RShzZWxmKS0+dHBfZnJlZShzZWxmKTsKK30KKworc3RhdGljIGludAorc2Nhbm5lcl90cmF2ZXJz
ZShQeU9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUHlT
Y2FubmVyT2JqZWN0ICpzOworICAgIGFzc2VydChQeVNjYW5uZXJfQ2hlY2soc2VsZikpOworICAg
IHMgPSAoUHlTY2FubmVyT2JqZWN0ICopc2VsZjsKKyAgICBQeV9WSVNJVChzLT5lbmNvZGluZyk7
CisgICAgUHlfVklTSVQocy0+c3RyaWN0KTsKKyAgICBQeV9WSVNJVChzLT5vYmplY3RfaG9vayk7
CisgICAgUHlfVklTSVQocy0+cGFpcnNfaG9vayk7CisgICAgUHlfVklTSVQocy0+cGFyc2VfZmxv
YXQpOworICAgIFB5X1ZJU0lUKHMtPnBhcnNlX2ludCk7CisgICAgUHlfVklTSVQocy0+cGFyc2Vf
Y29uc3RhbnQpOworICAgIFB5X1ZJU0lUKHMtPm1lbW8pOworICAgIHJldHVybiAwOworfQorCitz
dGF0aWMgaW50CitzY2FubmVyX2NsZWFyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5U2Nhbm5l
ck9iamVjdCAqczsKKyAgICBhc3NlcnQoUHlTY2FubmVyX0NoZWNrKHNlbGYpKTsKKyAgICBzID0g
KFB5U2Nhbm5lck9iamVjdCAqKXNlbGY7CisgICAgUHlfQ0xFQVIocy0+ZW5jb2RpbmcpOworICAg
IFB5X0NMRUFSKHMtPnN0cmljdCk7CisgICAgUHlfQ0xFQVIocy0+b2JqZWN0X2hvb2spOworICAg
IFB5X0NMRUFSKHMtPnBhaXJzX2hvb2spOworICAgIFB5X0NMRUFSKHMtPnBhcnNlX2Zsb2F0KTsK
KyAgICBQeV9DTEVBUihzLT5wYXJzZV9pbnQpOworICAgIFB5X0NMRUFSKHMtPnBhcnNlX2NvbnN0
YW50KTsKKyAgICBQeV9DTEVBUihzLT5tZW1vKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj
IFB5T2JqZWN0ICoKK19wYXJzZV9vYmplY3Rfc3RyKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmpl
Y3QgKnB5c3RyLCBQeV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKSB7Cisg
ICAgLyogUmVhZCBhIEpTT04gb2JqZWN0IGZyb20gUHlTdHJpbmcgcHlzdHIuCisgICAgaWR4IGlz
IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBvcGVuaW5nIGN1cmx5
IGJyYWNlLgorICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4
IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgdGhlIGNsb3NpbmcgY3VybHkg
YnJhY2UuCisKKyAgICBSZXR1cm5zIGEgbmV3IFB5T2JqZWN0ICh1c3VhbGx5IGEgZGljdCwgYnV0
IG9iamVjdF9ob29rIG9yCisgICAgb2JqZWN0X3BhaXJzX2hvb2sgY2FuIGNoYW5nZSB0aGF0KQor
ICAgICovCisgICAgY2hhciAqc3RyID0gUHlTdHJpbmdfQVNfU1RSSU5HKHB5c3RyKTsKKyAgICBQ
eV9zc2l6ZV90IGVuZF9pZHggPSBQeVN0cmluZ19HRVRfU0laRShweXN0cikgLSAxOworICAgIFB5
T2JqZWN0ICpydmFsID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcGFpcnMgPSBOVUxMOworICAgIFB5
T2JqZWN0ICppdGVtOworICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMOworICAgIFB5T2JqZWN0ICp2
YWwgPSBOVUxMOworICAgIGNoYXIgKmVuY29kaW5nID0gUHlTdHJpbmdfQVNfU1RSSU5HKHMtPmVu
Y29kaW5nKTsKKyAgICBpbnQgc3RyaWN0ID0gUHlPYmplY3RfSXNUcnVlKHMtPnN0cmljdCk7Cisg
ICAgaW50IGhhc19wYWlyc19ob29rID0gKHMtPnBhaXJzX2hvb2sgIT0gUHlfTm9uZSk7CisgICAg
UHlfc3NpemVfdCBuZXh0X2lkeDsKKyAgICBpZiAoaGFzX3BhaXJzX2hvb2spIHsKKyAgICAgICAg
cGFpcnMgPSBQeUxpc3RfTmV3KDApOworICAgICAgICBpZiAocGFpcnMgPT0gTlVMTCkKKyAgICAg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcnZhbCA9IFB5
RGljdF9OZXcoKTsKKyAgICAgICAgaWYgKHJ2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKworICAgIC8qIHNraXAgd2hpdGVzcGFjZSBhZnRlciB7ICovCisgICAg
d2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsK
KworICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgb2JqZWN0IGlzIG5vbi1lbXB0eSAqLworICAgIGlm
IChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSAhPSAnfScpIHsKKyAgICAgICAgd2hpbGUgKGlk
eCA8PSBlbmRfaWR4KSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbWVtb2tleTsKKworICAgICAg
ICAgICAgLyogcmVhZCBrZXkgKi8KKyAgICAgICAgICAgIGlmIChzdHJbaWR4XSAhPSAnIicpIHsK
KyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwg
cHlzdHIsIGlkeCk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAga2V5ID0gc2NhbnN0cmluZ19zdHIocHlzdHIsIGlkeCArIDEsIGVuY29kaW5n
LCBzdHJpY3QsICZuZXh0X2lkeCk7CisgICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAg
ICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgbWVtb2tleSA9IFB5RGljdF9HZXRJ
dGVtKHMtPm1lbW8sIGtleSk7CisgICAgICAgICAgICBpZiAobWVtb2tleSAhPSBOVUxMKSB7Cisg
ICAgICAgICAgICAgICAgUHlfSU5DUkVGKG1lbW9rZXkpOworICAgICAgICAgICAgICAgIFB5X0RF
Q1JFRihrZXkpOworICAgICAgICAgICAgICAgIGtleSA9IG1lbW9rZXk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0o
cy0+bWVtbywga2V5LCBrZXkpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWR4ID0gbmV4dF9pZHg7CisKKyAgICAgICAgICAg
IC8qIHNraXAgd2hpdGVzcGFjZSBiZXR3ZWVuIGtleSBhbmQgOiBkZWxpbWl0ZXIsIHJlYWQgOiwg
c2tpcCB3aGl0ZXNwYWNlICovCisgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYg
SVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworICAgICAgICAgICAgaWYgKGlkeCA+IGVu
ZF9pZHggfHwgc3RyW2lkeF0gIT0gJzonKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNn
KCJFeHBlY3RpbmcgOiBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKKyAgICAgICAgICAgICAgICBn
b3RvIGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZHgrKzsKKyAgICAgICAgICAg
IHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7
CisKKyAgICAgICAgICAgIC8qIHJlYWQgYW55IEpTT04gZGF0YSB0eXBlICovCisgICAgICAgICAg
ICB2YWwgPSBzY2FuX29uY2Vfc3RyKHMsIHB5c3RyLCBpZHgsICZuZXh0X2lkeCk7CisgICAgICAg
ICAgICBpZiAodmFsID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworCisgICAg
ICAgICAgICBpZiAoaGFzX3BhaXJzX2hvb2spIHsKKyAgICAgICAgICAgICAgICBpdGVtID0gUHlU
dXBsZV9QYWNrKDIsIGtleSwgdmFsKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBOVUxM
KQorICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICAgICAgUHlfQ0xF
QVIoa2V5KTsKKyAgICAgICAgICAgICAgICBQeV9DTEVBUih2YWwpOworICAgICAgICAgICAgICAg
IGlmIChQeUxpc3RfQXBwZW5kKHBhaXJzLCBpdGVtKSA9PSAtMSkgeworICAgICAgICAgICAgICAg
ICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RGljdF9T
ZXRJdGVtKHJ2YWwsIGtleSwgdmFsKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFp
bDsKKyAgICAgICAgICAgICAgICBQeV9DTEVBUihrZXkpOworICAgICAgICAgICAgICAgIFB5X0NM
RUFSKHZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZHggPSBuZXh0X2lkeDsKKwor
ICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJlZm9yZSB9IG9yICwgKi8KKyAgICAgICAg
ICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4
Kys7CisKKyAgICAgICAgICAgIC8qIGJhaWwgaWYgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3Igd2Ug
ZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRf
aWR4KSBicmVhazsKKyAgICAgICAgICAgIGlmIChzdHJbaWR4XSA9PSAnfScpIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cltp
ZHhdICE9ICcsJykgeworICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nICwg
ZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWR4Kys7CisKKyAgICAgICAgICAgIC8qIHNraXAgd2hp
dGVzcGFjZSBhZnRlciAsIGRlbGltaXRlciAqLworICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBl
bmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKyAgICAgICAgfQorICAg
IH0KKyAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBzdHJbaWR4XSBzaG91bGQgYmUg
J30nICovCisgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgc3RyW2lkeF0gIT0gJ30nKSB7CisgICAg
ICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHB5c3RyLCBlbmRfaWR4KTsKKyAg
ICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIC8qIGlmIHBhaXJzX2hvb2sgaXMgbm90IE5v
bmU6IHJ2YWwgPSBvYmplY3RfcGFpcnNfaG9vayhwYWlycykgKi8KKyAgICBpZiAocy0+cGFpcnNf
aG9vayAhPSBQeV9Ob25lKSB7CisgICAgICAgIHZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9i
akFyZ3Mocy0+cGFpcnNfaG9vaywgcGFpcnMsIE5VTEwpOworICAgICAgICBpZiAodmFsID09IE5V
TEwpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIFB5X0RFQ1JFRihwYWlycyk7Cisg
ICAgICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOworICAgICAgICByZXR1cm4gdmFsOworICAg
IH0KKworICAgIC8qIGlmIG9iamVjdF9ob29rIGlzIG5vdCBOb25lOiBydmFsID0gb2JqZWN0X2hv
b2socnZhbCkgKi8KKyAgICBpZiAocy0+b2JqZWN0X2hvb2sgIT0gUHlfTm9uZSkgeworICAgICAg
ICB2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPm9iamVjdF9ob29rLCBydmFs
LCBOVUxMKTsKKyAgICAgICAgaWYgKHZhbCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBiYWls
OworICAgICAgICBQeV9ERUNSRUYocnZhbCk7CisgICAgICAgIHJ2YWwgPSB2YWw7CisgICAgICAg
IHZhbCA9IE5VTEw7CisgICAgfQorICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOworICAgIHJl
dHVybiBydmFsOworYmFpbDoKKyAgICBQeV9YREVDUkVGKHJ2YWwpOworICAgIFB5X1hERUNSRUYo
a2V5KTsKKyAgICBQeV9YREVDUkVGKHZhbCk7CisgICAgUHlfWERFQ1JFRihwYWlycyk7CiAgICAg
cmV0dXJuIE5VTEw7CiB9CiAKLSNkZWZpbmUgREVGTihuLCBrKSBcCi0gICAgeyAgXAotICAgICAg
ICAjbiwgXAotICAgICAgICAoUHlDRnVuY3Rpb24pcHlfICMjbiwgXAotICAgICAgICBrLCBcCi0g
ICAgICAgIHB5ZG9jXyAjI24gXAorc3RhdGljIFB5T2JqZWN0ICoKK19wYXJzZV9vYmplY3RfdW5p
Y29kZShQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBpZHgs
IFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikgeworICAgIC8qIFJlYWQgYSBKU09OIG9iamVjdCBm
cm9tIFB5VW5pY29kZSBweXN0ci4KKyAgICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBj
aGFyYWN0ZXIgYWZ0ZXIgdGhlIG9wZW5pbmcgY3VybHkgYnJhY2UuCisgICAgKm5leHRfaWR4X3B0
ciBpcyBhIHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBh
ZnRlcgorICAgICAgICB0aGUgY2xvc2luZyBjdXJseSBicmFjZS4KKworICAgIFJldHVybnMgYSBu
ZXcgUHlPYmplY3QgKHVzdWFsbHkgYSBkaWN0LCBidXQgb2JqZWN0X2hvb2sgY2FuIGNoYW5nZSB0
aGF0KQorICAgICovCisgICAgUHlfVU5JQ09ERSAqc3RyID0gUHlVbmljb2RlX0FTX1VOSUNPREUo
cHlzdHIpOworICAgIFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5VW5pY29kZV9HRVRfU0laRShweXN0
cikgLSAxOworICAgIFB5T2JqZWN0ICpydmFsID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcGFpcnMg
PSBOVUxMOworICAgIFB5T2JqZWN0ICppdGVtOworICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMOwor
ICAgIFB5T2JqZWN0ICp2YWwgPSBOVUxMOworICAgIGludCBzdHJpY3QgPSBQeU9iamVjdF9Jc1Ry
dWUocy0+c3RyaWN0KTsKKyAgICBpbnQgaGFzX3BhaXJzX2hvb2sgPSAocy0+cGFpcnNfaG9vayAh
PSBQeV9Ob25lKTsKKyAgICBQeV9zc2l6ZV90IG5leHRfaWR4OworCisgICAgaWYgKGhhc19wYWly
c19ob29rKSB7CisgICAgICAgIHBhaXJzID0gUHlMaXN0X05ldygwKTsKKyAgICAgICAgaWYgKHBh
aXJzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci1zdGF0aWMgUHlN
ZXRob2REZWYgc3BlZWR1cHNfbWV0aG9kc1tdID0gewotICAgIERFRk4oZW5jb2RlX2Jhc2VzdHJp
bmdfYXNjaWksIE1FVEhfTyksCi0gICAge30KLX07Ci0jdW5kZWYgREVGTgorICAgIGVsc2Ugewor
ICAgICAgICBydmFsID0gUHlEaWN0X05ldygpOworICAgICAgICBpZiAocnZhbCA9PSBOVUxMKQor
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIAorICAgIC8qIHNraXAgd2hpdGVz
cGFjZSBhZnRlciB7ICovCisgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BB
Q0Uoc3RyW2lkeF0pKSBpZHgrKzsKIAotdm9pZAotaW5pdF9zcGVlZHVwcyh2b2lkKQotewotICAg
IFB5T2JqZWN0ICptOwotICAgIG0gPSBQeV9Jbml0TW9kdWxlNCgiX3NwZWVkdXBzIiwgc3BlZWR1
cHNfbWV0aG9kcywgTlVMTCwgTlVMTCwgUFlUSE9OX0FQSV9WRVJTSU9OKTsKKyAgICAvKiBvbmx5
IGxvb3AgaWYgdGhlIG9iamVjdCBpcyBub24tZW1wdHkgKi8KKyAgICBpZiAoaWR4IDw9IGVuZF9p
ZHggJiYgc3RyW2lkeF0gIT0gJ30nKSB7CisgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkg
eworICAgICAgICAgICAgUHlPYmplY3QgKm1lbW9rZXk7CisKKyAgICAgICAgICAgIC8qIHJlYWQg
a2V5ICovCisgICAgICAgICAgICBpZiAoc3RyW2lkeF0gIT0gJyInKSB7CisgICAgICAgICAgICAg
ICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSIsIHB5c3RyLCBpZHgpOwor
ICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtl
eSA9IHNjYW5zdHJpbmdfdW5pY29kZShweXN0ciwgaWR4ICsgMSwgc3RyaWN0LCAmbmV4dF9pZHgp
OworICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gYmFp
bDsKKyAgICAgICAgICAgIG1lbW9rZXkgPSBQeURpY3RfR2V0SXRlbShzLT5tZW1vLCBrZXkpOwor
ICAgICAgICAgICAgaWYgKG1lbW9rZXkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0lO
Q1JFRihtZW1va2V5KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAg
ICAgICAgICBrZXkgPSBtZW1va2V5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHMtPm1lbW8sIGtleSwga2V5KSA8
IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlkeCA9IG5leHRfaWR4OworCisgICAgICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2Ug
YmV0d2VlbiBrZXkgYW5kIDogZGVsaW1pdGVyLCByZWFkIDosIHNraXAgd2hpdGVzcGFjZSAqLwor
ICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lk
eF0pKSBpZHgrKzsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IHN0cltpZHhdICE9
ICc6JykgeworICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIDogZGVsaW1p
dGVyIiwgcHlzdHIsIGlkeCk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWR4Kys7CisgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9p
ZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworCisgICAgICAgICAgICAvKiBy
ZWFkIGFueSBKU09OIHRlcm0gKi8KKyAgICAgICAgICAgIHZhbCA9IHNjYW5fb25jZV91bmljb2Rl
KHMsIHB5c3RyLCBpZHgsICZuZXh0X2lkeCk7CisgICAgICAgICAgICBpZiAodmFsID09IE5VTEwp
CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworCisgICAgICAgICAgICBpZiAoaGFzX3BhaXJz
X2hvb2spIHsKKyAgICAgICAgICAgICAgICBpdGVtID0gUHlUdXBsZV9QYWNrKDIsIGtleSwgdmFs
KTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhaWw7CisgICAgICAgICAgICAgICAgUHlfQ0xFQVIoa2V5KTsKKyAgICAgICAgICAg
ICAgICBQeV9DTEVBUih2YWwpOworICAgICAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHBh
aXJzLCBpdGVtKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7
CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHJ2YWwsIGtleSwgdmFs
KSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgICAgICBQ
eV9DTEVBUihrZXkpOworICAgICAgICAgICAgICAgIFB5X0NMRUFSKHZhbCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZHggPSBuZXh0X2lkeDsKKworICAgICAgICAgICAgLyogc2tpcCB3
aGl0ZXNwYWNlIGJlZm9yZSB9IG9yICwgKi8KKyAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5k
X2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisKKyAgICAgICAgICAgIC8q
IGJhaWwgaWYgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxp
bWl0ZXIgKi8KKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKKyAgICAgICAg
ICAgIGlmIChzdHJbaWR4XSA9PSAnfScpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cltpZHhdICE9ICcsJykgeworICAgICAg
ICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nICwgZGVsaW1pdGVyIiwgcHlzdHIsIGlk
eCk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWR4Kys7CisKKyAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBhZnRlciAsIGRlbGlt
aXRlciAqLworICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BB
Q0Uoc3RyW2lkeF0pKSBpZHgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHZlcmlmeSB0
aGF0IGlkeCA8IGVuZF9pZHgsIHN0cltpZHhdIHNob3VsZCBiZSAnfScgKi8KKyAgICBpZiAoaWR4
ID4gZW5kX2lkeCB8fCBzdHJbaWR4XSAhPSAnfScpIHsKKyAgICAgICAgcmFpc2VfZXJybXNnKCJF
eHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgpOworICAgICAgICBnb3RvIGJhaWw7Cisg
ICAgfQorCisgICAgLyogaWYgcGFpcnNfaG9vayBpcyBub3QgTm9uZTogcnZhbCA9IG9iamVjdF9w
YWlyc19ob29rKHBhaXJzKSAqLworICAgIGlmIChzLT5wYWlyc19ob29rICE9IFB5X05vbmUpIHsK
KyAgICAgICAgdmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5wYWlyc19ob29r
LCBwYWlycywgTlVMTCk7CisgICAgICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgIGdv
dG8gYmFpbDsKKyAgICAgICAgUHlfREVDUkVGKHBhaXJzKTsKKyAgICAgICAgKm5leHRfaWR4X3B0
ciA9IGlkeCArIDE7CisgICAgICAgIHJldHVybiB2YWw7CisgICAgfQorCisgICAgLyogaWYgb2Jq
ZWN0X2hvb2sgaXMgbm90IE5vbmU6IHJ2YWwgPSBvYmplY3RfaG9vayhydmFsKSAqLworICAgIGlm
IChzLT5vYmplY3RfaG9vayAhPSBQeV9Ob25lKSB7CisgICAgICAgIHZhbCA9IFB5T2JqZWN0X0Nh
bGxGdW5jdGlvbk9iakFyZ3Mocy0+b2JqZWN0X2hvb2ssIHJ2YWwsIE5VTEwpOworICAgICAgICBp
ZiAodmFsID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIFB5X0RFQ1JF
RihydmFsKTsKKyAgICAgICAgcnZhbCA9IHZhbDsKKyAgICAgICAgdmFsID0gTlVMTDsKKyAgICB9
CisgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7CisgICAgcmV0dXJuIHJ2YWw7CitiYWlsOgor
ICAgIFB5X1hERUNSRUYocnZhbCk7CisgICAgUHlfWERFQ1JFRihrZXkpOworICAgIFB5X1hERUNS
RUYodmFsKTsKKyAgICBQeV9YREVDUkVGKHBhaXJzKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKwor
c3RhdGljIFB5T2JqZWN0ICoKK19wYXJzZV9hcnJheV9zdHIoUHlTY2FubmVyT2JqZWN0ICpzLCBQ
eU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIp
IHsKKyAgICAvKiBSZWFkIGEgSlNPTiBhcnJheSBmcm9tIFB5U3RyaW5nIHB5c3RyLgorICAgIGlk
eCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgb3BlbmluZyBi
cmFjZS4KKyAgICAqbmV4dF9pZHhfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0
byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBjbG9zaW5nIGJyYWNlLgor
CisgICAgUmV0dXJucyBhIG5ldyBQeUxpc3QKKyAgICAqLworICAgIGNoYXIgKnN0ciA9IFB5U3Ry
aW5nX0FTX1NUUklORyhweXN0cik7CisgICAgUHlfc3NpemVfdCBlbmRfaWR4ID0gUHlTdHJpbmdf
R0VUX1NJWkUocHlzdHIpIC0gMTsKKyAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKKyAgICBQeU9i
amVjdCAqcnZhbCA9IFB5TGlzdF9OZXcoMCk7CisgICAgUHlfc3NpemVfdCBuZXh0X2lkeDsKKyAg
ICBpZiAocnZhbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIHNraXAg
d2hpdGVzcGFjZSBhZnRlciBbICovCisgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dI
SVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKworICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgYXJy
YXkgaXMgbm9uLWVtcHR5ICovCisgICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdICE9
ICddJykgeworICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKKworICAgICAgICAgICAg
LyogcmVhZCBhbnkgSlNPTiB0ZXJtIGFuZCBkZS10dXBsZWZ5IHRoZSAocnZhbCwgaWR4KSAqLwor
ICAgICAgICAgICAgdmFsID0gc2Nhbl9vbmNlX3N0cihzLCBweXN0ciwgaWR4LCAmbmV4dF9pZHgp
OworICAgICAgICAgICAgaWYgKHZhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5
RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3RvcEl0ZXJhdGlvbikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNn
KCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGlkeCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KFB5TGlzdF9BcHBlbmQocnZhbCwgdmFsKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBnb3RvIGJh
aWw7CisKKyAgICAgICAgICAgIFB5X0NMRUFSKHZhbCk7CisgICAgICAgICAgICBpZHggPSBuZXh0
X2lkeDsKKworICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJldHdlZW4gdGVybSBhbmQg
LCAqLworICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uo
c3RyW2lkeF0pKSBpZHgrKzsKKworICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgYXJyYXkgaXMg
Y2xvc2VkIG9yIHdlIGRpZG4ndCBnZXQgdGhlICwgZGVsaW1pdGVyICovCisgICAgICAgICAgICBp
ZiAoaWR4ID4gZW5kX2lkeCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RyW2lkeF0gPT0gJ10n
KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIGlmIChzdHJbaWR4XSAhPSAnLCcpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2co
IkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOworICAgICAgICAgICAgICAgIGdv
dG8gYmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlkeCsrOworCisgICAgICAgICAg
ICAvKiBza2lwIHdoaXRlc3BhY2UgYWZ0ZXIgLCAqLworICAgICAgICAgICAgd2hpbGUgKGlkeCA8
PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8qIHZlcmlmeSB0aGF0IGlkeCA8IGVuZF9pZHgsIHN0cltpZHhdIHNob3Vs
ZCBiZSAnXScgKi8KKyAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBzdHJbaWR4XSAhPSAnXScpIHsK
KyAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgp
OworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAx
OworICAgIHJldHVybiBydmFsOworYmFpbDoKKyAgICBQeV9YREVDUkVGKHZhbCk7CisgICAgUHlf
REVDUkVGKHJ2YWwpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgor
X3BhcnNlX2FycmF5X3VuaWNvZGUoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIs
IFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpIHsKKyAgICAvKiBSZWFk
IGEgSlNPTiBhcnJheSBmcm9tIFB5U3RyaW5nIHB5c3RyLgorICAgIGlkeCBpcyB0aGUgaW5kZXgg
b2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgb3BlbmluZyBicmFjZS4KKyAgICAqbmV4
dF9pZHhfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hh
cmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBjbG9zaW5nIGJyYWNlLgorCisgICAgUmV0dXJucyBh
IG5ldyBQeUxpc3QKKyAgICAqLworICAgIFB5X1VOSUNPREUgKnN0ciA9IFB5VW5pY29kZV9BU19V
TklDT0RFKHB5c3RyKTsKKyAgICBQeV9zc2l6ZV90IGVuZF9pZHggPSBQeVVuaWNvZGVfR0VUX1NJ
WkUocHlzdHIpIC0gMTsKKyAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKKyAgICBQeU9iamVjdCAq
cnZhbCA9IFB5TGlzdF9OZXcoMCk7CisgICAgUHlfc3NpemVfdCBuZXh0X2lkeDsKKyAgICBpZiAo
cnZhbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIHNraXAgd2hpdGVz
cGFjZSBhZnRlciBbICovCisgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BB
Q0Uoc3RyW2lkeF0pKSBpZHgrKzsKKworICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgYXJyYXkgaXMg
bm9uLWVtcHR5ICovCisgICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdICE9ICddJykg
eworICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKKworICAgICAgICAgICAgLyogcmVh
ZCBhbnkgSlNPTiB0ZXJtICAqLworICAgICAgICAgICAgdmFsID0gc2Nhbl9vbmNlX3VuaWNvZGUo
cywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKKyAgICAgICAgICAgIGlmICh2YWwgPT0gTlVMTCkg
eworICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N0b3BJ
dGVyYXRpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAg
ICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHB5c3RyLCBpZHgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2YWwsIHZhbCkgPT0gLTEp
CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworCisgICAgICAgICAgICBQeV9DTEVBUih2YWwp
OworICAgICAgICAgICAgaWR4ID0gbmV4dF9pZHg7CisKKyAgICAgICAgICAgIC8qIHNraXAgd2hp
dGVzcGFjZSBiZXR3ZWVuIHRlcm0gYW5kICwgKi8KKyAgICAgICAgICAgIHdoaWxlIChpZHggPD0g
ZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisKKyAgICAgICAgICAg
IC8qIGJhaWwgaWYgdGhlIGFycmF5IGlzIGNsb3NlZCBvciB3ZSBkaWRuJ3QgZ2V0IHRoZSAsIGRl
bGltaXRlciAqLworICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIGJyZWFrOworICAgICAg
ICAgICAgaWYgKHN0cltpZHhdID09ICddJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc3RyW2lkeF0gIT0gJywnKSB7CisgICAg
ICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgLCBkZWxpbWl0ZXIiLCBweXN0ciwg
aWR4KTsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZHgrKzsKKworICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGFmdGVyICwgKi8K
KyAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltp
ZHhdKSkgaWR4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiB2ZXJpZnkgdGhhdCBpZHgg
PCBlbmRfaWR4LCBzdHJbaWR4XSBzaG91bGQgYmUgJ10nICovCisgICAgaWYgKGlkeCA+IGVuZF9p
ZHggfHwgc3RyW2lkeF0gIT0gJ10nKSB7CisgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5n
IG9iamVjdCIsIHB5c3RyLCBlbmRfaWR4KTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAg
ICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKKyAgICByZXR1cm4gcnZhbDsKK2JhaWw6CisgICAg
UHlfWERFQ1JFRih2YWwpOworICAgIFB5X0RFQ1JFRihydmFsKTsKKyAgICByZXR1cm4gTlVMTDsK
K30KKworc3RhdGljIFB5T2JqZWN0ICoKK19wYXJzZV9jb25zdGFudChQeVNjYW5uZXJPYmplY3Qg
KnMsIGNoYXIgKmNvbnN0YW50LCBQeV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhf
cHRyKSB7CisgICAgLyogUmVhZCBhIEpTT04gY29uc3RhbnQgZnJvbSBQeVN0cmluZyBweXN0ci4K
KyAgICBjb25zdGFudCBpcyB0aGUgY29uc3RhbnQgc3RyaW5nIHRoYXQgd2FzIGZvdW5kCisgICAg
ICAgICgiTmFOIiwgIkluZmluaXR5IiwgIi1JbmZpbml0eSIpLgorICAgIGlkeCBpcyB0aGUgaW5k
ZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgY29uc3RhbnQKKyAgICAqbmV4dF9pZHhf
cHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hhcmFjdGVy
IGFmdGVyCisgICAgICAgIHRoZSBjb25zdGFudC4KKworICAgIFJldHVybnMgdGhlIHJlc3VsdCBv
ZiBwYXJzZV9jb25zdGFudAorICAgICovCisgICAgUHlPYmplY3QgKmNzdHI7CisgICAgUHlPYmpl
Y3QgKnJ2YWw7CisgICAgLyogY29uc3RhbnQgaXMgIk5hTiIsICJJbmZpbml0eSIsIG9yICItSW5m
aW5pdHkiICovCisgICAgY3N0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoY29uc3RhbnQp
OworICAgIGlmIChjc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyog
cnZhbCA9IHBhcnNlX2NvbnN0YW50KGNvbnN0YW50KSAqLworICAgIHJ2YWwgPSBQeU9iamVjdF9D
YWxsRnVuY3Rpb25PYmpBcmdzKHMtPnBhcnNlX2NvbnN0YW50LCBjc3RyLCBOVUxMKTsKKyAgICBp
ZHggKz0gUHlTdHJpbmdfR0VUX1NJWkUoY3N0cik7CisgICAgUHlfREVDUkVGKGNzdHIpOworICAg
ICpuZXh0X2lkeF9wdHIgPSBpZHg7CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBQeU9i
amVjdCAqCitfbWF0Y2hfbnVtYmVyX3N0cihQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpw
eXN0ciwgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKSB7CisgICAg
LyogUmVhZCBhIEpTT04gbnVtYmVyIGZyb20gUHlTdHJpbmcgcHlzdHIuCisgICAgaWR4IGlzIHRo
ZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBudW1iZXIKKyAgICAqbmV4dF9p
ZHhfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hhcmFj
dGVyIGFmdGVyCisgICAgICAgIHRoZSBudW1iZXIuCisKKyAgICBSZXR1cm5zIGEgbmV3IFB5T2Jq
ZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoYXQgbnVtYmVyOgorICAgICAgICBQeUludCwgUHlMb25n
LCBvciBQeUZsb2F0LgorICAgICAgICBNYXkgcmV0dXJuIG90aGVyIHR5cGVzIGlmIHBhcnNlX2lu
dCBvciBwYXJzZV9mbG9hdCBhcmUgc2V0CisgICAgKi8KKyAgICBjaGFyICpzdHIgPSBQeVN0cmlu
Z19BU19TVFJJTkcocHlzdHIpOworICAgIFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5U3RyaW5nX0dF
VF9TSVpFKHB5c3RyKSAtIDE7CisgICAgUHlfc3NpemVfdCBpZHggPSBzdGFydDsKKyAgICBpbnQg
aXNfZmxvYXQgPSAwOworICAgIFB5T2JqZWN0ICpydmFsOworICAgIFB5T2JqZWN0ICpudW1zdHI7
CisKKyAgICAvKiByZWFkIGEgc2lnbiBpZiBpdCdzIHRoZXJlLCBtYWtlIHN1cmUgaXQncyBub3Qg
dGhlIGVuZCBvZiB0aGUgc3RyaW5nICovCisgICAgaWYgKHN0cltpZHhdID09ICctJykgeworICAg
ICAgICBpZHgrKzsKKyAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIHsKKyAgICAgICAgICAgIFB5
RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHJlYWQgYXMgbWFueSBpbnRlZ2VyIGRpZ2l0
cyBhcyB3ZSBmaW5kIGFzIGxvbmcgYXMgaXQgZG9lc24ndCBzdGFydCB3aXRoIDAgKi8KKyAgICBp
ZiAoc3RyW2lkeF0gPj0gJzEnICYmIHN0cltpZHhdIDw9ICc5JykgeworICAgICAgICBpZHgrKzsK
KyAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdID49ICcwJyAmJiBzdHJb
aWR4XSA8PSAnOScpIGlkeCsrOworICAgIH0KKyAgICAvKiBpZiBpdCBzdGFydHMgd2l0aCAwIHdl
IG9ubHkgZXhwZWN0IG9uZSBpbnRlZ2VyIGRpZ2l0ICovCisgICAgZWxzZSBpZiAoc3RyW2lkeF0g
PT0gJzAnKSB7CisgICAgICAgIGlkeCsrOworICAgIH0KKyAgICAvKiBubyBpbnRlZ2VyIGRpZ2l0
cywgZXJyb3IgKi8KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9w
SXRlcmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogaWYgdGhl
IG5leHQgY2hhciBpcyAnLicgZm9sbG93ZWQgYnkgYSBkaWdpdCB0aGVuIHJlYWQgYWxsIGZsb2F0
IGRpZ2l0cyAqLworICAgIGlmIChpZHggPCBlbmRfaWR4ICYmIHN0cltpZHhdID09ICcuJyAmJiBz
dHJbaWR4ICsgMV0gPj0gJzAnICYmIHN0cltpZHggKyAxXSA8PSAnOScpIHsKKyAgICAgICAgaXNf
ZmxvYXQgPSAxOworICAgICAgICBpZHggKz0gMjsKKyAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRf
aWR4ICYmIHN0cltpZHhdID49ICcwJyAmJiBzdHJbaWR4XSA8PSAnOScpIGlkeCsrOworICAgIH0K
KworICAgIC8qIGlmIHRoZSBuZXh0IGNoYXIgaXMgJ2UnIG9yICdFJyB0aGVuIG1heWJlIHJlYWQg
dGhlIGV4cG9uZW50IChvciBiYWNrdHJhY2spICovCisgICAgaWYgKGlkeCA8IGVuZF9pZHggJiYg
KHN0cltpZHhdID09ICdlJyB8fCBzdHJbaWR4XSA9PSAnRScpKSB7CisKKyAgICAgICAgLyogc2F2
ZSB0aGUgaW5kZXggb2YgdGhlICdlJyBvciAnRScganVzdCBpbiBjYXNlIHdlIG5lZWQgdG8gYmFj
a3RyYWNrICovCisgICAgICAgIFB5X3NzaXplX3QgZV9zdGFydCA9IGlkeDsKKyAgICAgICAgaWR4
Kys7CisKKyAgICAgICAgLyogcmVhZCBhbiBleHBvbmVudCBzaWduIGlmIHByZXNlbnQgKi8KKyAg
ICAgICAgaWYgKGlkeCA8IGVuZF9pZHggJiYgKHN0cltpZHhdID09ICctJyB8fCBzdHJbaWR4XSA9
PSAnKycpKSBpZHgrKzsKKworICAgICAgICAvKiByZWFkIGFsbCBkaWdpdHMgKi8KKyAgICAgICAg
d2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdID49ICcwJyAmJiBzdHJbaWR4XSA8PSAn
OScpIGlkeCsrOworCisgICAgICAgIC8qIGlmIHdlIGdvdCBhIGRpZ2l0LCB0aGVuIHBhcnNlIGFz
IGZsb2F0LiBpZiBub3QsIGJhY2t0cmFjayAqLworICAgICAgICBpZiAoc3RyW2lkeCAtIDFdID49
ICcwJyAmJiBzdHJbaWR4IC0gMV0gPD0gJzknKSB7CisgICAgICAgICAgICBpc19mbG9hdCA9IDE7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZHggPSBlX3N0YXJ0Owor
ICAgICAgICB9CisgICAgfQorCisgICAgLyogY29weSB0aGUgc2VjdGlvbiB3ZSBkZXRlcm1pbmVk
IHRvIGJlIGEgbnVtYmVyICovCisgICAgbnVtc3RyID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNp
emUoJnN0cltzdGFydF0sIGlkeCAtIHN0YXJ0KTsKKyAgICBpZiAobnVtc3RyID09IE5VTEwpCisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChpc19mbG9hdCkgeworICAgICAgICAvKiBwYXJz
ZSBhcyBhIGZsb2F0IHVzaW5nIGEgZmFzdCBwYXRoIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGNh
bGwgdXNlciBkZWZpbmVkIG1ldGhvZCAqLworICAgICAgICBpZiAocy0+cGFyc2VfZmxvYXQgIT0g
KFB5T2JqZWN0ICopJlB5RmxvYXRfVHlwZSkgeworICAgICAgICAgICAgcnZhbCA9IFB5T2JqZWN0
X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+cGFyc2VfZmxvYXQsIG51bXN0ciwgTlVMTCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBydmFsID0gUHlGbG9hdF9Gcm9t
RG91YmxlKFB5T1NfYXNjaWlfYXRvZihQeVN0cmluZ19BU19TVFJJTkcobnVtc3RyKSkpOyAqLwor
ICAgICAgICAgICAgZG91YmxlIGQgPSBQeU9TX3N0cmluZ190b19kb3VibGUoUHlTdHJpbmdfQVNf
U1RSSU5HKG51bXN0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChkID09IC0xLjAgJiYgUHlFcnJfT2Nj
dXJyZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJ2YWwg
PSBQeUZsb2F0X0Zyb21Eb3VibGUoZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7Cisg
ICAgICAgIC8qIHBhcnNlIGFzIGFuIGludCB1c2luZyBhIGZhc3QgcGF0aCBpZiBhdmFpbGFibGUs
IG90aGVyd2lzZSBjYWxsIHVzZXIgZGVmaW5lZCBtZXRob2QgKi8KKyAgICAgICAgaWYgKHMtPnBh
cnNlX2ludCAhPSAoUHlPYmplY3QgKikmUHlJbnRfVHlwZSkgeworICAgICAgICAgICAgcnZhbCA9
IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+cGFyc2VfaW50LCBudW1zdHIsIE5VTEwp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcnZhbCA9IFB5SW50X0Zy
b21TdHJpbmcoUHlTdHJpbmdfQVNfU1RSSU5HKG51bXN0ciksIE5VTEwsIDEwKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBQeV9ERUNSRUYobnVtc3RyKTsKKyAgICAqbmV4dF9pZHhfcHRyID0gaWR4
OworICAgIHJldHVybiBydmFsOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX21hdGNoX251bWJl
cl91bmljb2RlKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90
IHN0YXJ0LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpIHsKKyAgICAvKiBSZWFkIGEgSlNPTiBu
dW1iZXIgZnJvbSBQeVVuaWNvZGUgcHlzdHIuCisgICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUg
Zmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBudW1iZXIKKyAgICAqbmV4dF9pZHhfcHRyIGlzIGEgcmV0
dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAg
ICAgIHRoZSBudW1iZXIuCisKKyAgICBSZXR1cm5zIGEgbmV3IFB5T2JqZWN0IHJlcHJlc2VudGF0
aW9uIG9mIHRoYXQgbnVtYmVyOgorICAgICAgICBQeUludCwgUHlMb25nLCBvciBQeUZsb2F0Lgor
ICAgICAgICBNYXkgcmV0dXJuIG90aGVyIHR5cGVzIGlmIHBhcnNlX2ludCBvciBwYXJzZV9mbG9h
dCBhcmUgc2V0CisgICAgKi8KKyAgICBQeV9VTklDT0RFICpzdHIgPSBQeVVuaWNvZGVfQVNfVU5J
Q09ERShweXN0cik7CisgICAgUHlfc3NpemVfdCBlbmRfaWR4ID0gUHlVbmljb2RlX0dFVF9TSVpF
KHB5c3RyKSAtIDE7CisgICAgUHlfc3NpemVfdCBpZHggPSBzdGFydDsKKyAgICBpbnQgaXNfZmxv
YXQgPSAwOworICAgIFB5T2JqZWN0ICpydmFsOworICAgIFB5T2JqZWN0ICpudW1zdHI7CisKKyAg
ICAvKiByZWFkIGEgc2lnbiBpZiBpdCdzIHRoZXJlLCBtYWtlIHN1cmUgaXQncyBub3QgdGhlIGVu
ZCBvZiB0aGUgc3RyaW5nICovCisgICAgaWYgKHN0cltpZHhdID09ICctJykgeworICAgICAgICBp
ZHgrKzsKKyAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIHsKKyAgICAgICAgICAgIFB5RXJyX1Nl
dE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8qIHJlYWQgYXMgbWFueSBpbnRlZ2VyIGRpZ2l0cyBhcyB3
ZSBmaW5kIGFzIGxvbmcgYXMgaXQgZG9lc24ndCBzdGFydCB3aXRoIDAgKi8KKyAgICBpZiAoc3Ry
W2lkeF0gPj0gJzEnICYmIHN0cltpZHhdIDw9ICc5JykgeworICAgICAgICBpZHgrKzsKKyAgICAg
ICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdID49ICcwJyAmJiBzdHJbaWR4XSA8
PSAnOScpIGlkeCsrOworICAgIH0KKyAgICAvKiBpZiBpdCBzdGFydHMgd2l0aCAwIHdlIG9ubHkg
ZXhwZWN0IG9uZSBpbnRlZ2VyIGRpZ2l0ICovCisgICAgZWxzZSBpZiAoc3RyW2lkeF0gPT0gJzAn
KSB7CisgICAgICAgIGlkeCsrOworICAgIH0KKyAgICAvKiBubyBpbnRlZ2VyIGRpZ2l0cywgZXJy
b3IgKi8KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0
aW9uKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogaWYgdGhlIG5leHQg
Y2hhciBpcyAnLicgZm9sbG93ZWQgYnkgYSBkaWdpdCB0aGVuIHJlYWQgYWxsIGZsb2F0IGRpZ2l0
cyAqLworICAgIGlmIChpZHggPCBlbmRfaWR4ICYmIHN0cltpZHhdID09ICcuJyAmJiBzdHJbaWR4
ICsgMV0gPj0gJzAnICYmIHN0cltpZHggKyAxXSA8PSAnOScpIHsKKyAgICAgICAgaXNfZmxvYXQg
PSAxOworICAgICAgICBpZHggKz0gMjsKKyAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYm
IHN0cltpZHhdID49ICcwJyAmJiBzdHJbaWR4XSA8PSAnOScpIGlkeCsrOworICAgIH0KKworICAg
IC8qIGlmIHRoZSBuZXh0IGNoYXIgaXMgJ2UnIG9yICdFJyB0aGVuIG1heWJlIHJlYWQgdGhlIGV4
cG9uZW50IChvciBiYWNrdHJhY2spICovCisgICAgaWYgKGlkeCA8IGVuZF9pZHggJiYgKHN0cltp
ZHhdID09ICdlJyB8fCBzdHJbaWR4XSA9PSAnRScpKSB7CisgICAgICAgIFB5X3NzaXplX3QgZV9z
dGFydCA9IGlkeDsKKyAgICAgICAgaWR4Kys7CisKKyAgICAgICAgLyogcmVhZCBhbiBleHBvbmVu
dCBzaWduIGlmIHByZXNlbnQgKi8KKyAgICAgICAgaWYgKGlkeCA8IGVuZF9pZHggJiYgKHN0cltp
ZHhdID09ICctJyB8fCBzdHJbaWR4XSA9PSAnKycpKSBpZHgrKzsKKworICAgICAgICAvKiByZWFk
IGFsbCBkaWdpdHMgKi8KKyAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhd
ID49ICcwJyAmJiBzdHJbaWR4XSA8PSAnOScpIGlkeCsrOworCisgICAgICAgIC8qIGlmIHdlIGdv
dCBhIGRpZ2l0LCB0aGVuIHBhcnNlIGFzIGZsb2F0LiBpZiBub3QsIGJhY2t0cmFjayAqLworICAg
ICAgICBpZiAoc3RyW2lkeCAtIDFdID49ICcwJyAmJiBzdHJbaWR4IC0gMV0gPD0gJzknKSB7Cisg
ICAgICAgICAgICBpc19mbG9hdCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpZHggPSBlX3N0YXJ0OworICAgICAgICB9CisgICAgfQorCisgICAgLyogY29weSB0
aGUgc2VjdGlvbiB3ZSBkZXRlcm1pbmVkIHRvIGJlIGEgbnVtYmVyICovCisgICAgbnVtc3RyID0g
UHlVbmljb2RlX0Zyb21Vbmljb2RlKCZzdHJbc3RhcnRdLCBpZHggLSBzdGFydCk7CisgICAgaWYg
KG51bXN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoaXNfZmxvYXQp
IHsKKyAgICAgICAgLyogcGFyc2UgYXMgYSBmbG9hdCB1c2luZyBhIGZhc3QgcGF0aCBpZiBhdmFp
bGFibGUsIG90aGVyd2lzZSBjYWxsIHVzZXIgZGVmaW5lZCBtZXRob2QgKi8KKyAgICAgICAgaWYg
KHMtPnBhcnNlX2Zsb2F0ICE9IChQeU9iamVjdCAqKSZQeUZsb2F0X1R5cGUpIHsKKyAgICAgICAg
ICAgIHJ2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPnBhcnNlX2Zsb2F0LCBu
dW1zdHIsIE5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcnZh
bCA9IFB5RmxvYXRfRnJvbVN0cmluZyhudW1zdHIsIE5VTEwpOworICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgeworICAgICAgICAvKiBubyBmYXN0IHBhdGggZm9yIHVuaWNvZGUgLT4gaW50LCBq
dXN0IGNhbGwgKi8KKyAgICAgICAgcnZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mo
cy0+cGFyc2VfaW50LCBudW1zdHIsIE5VTEwpOworICAgIH0KKyAgICBQeV9ERUNSRUYobnVtc3Ry
KTsKKyAgICAqbmV4dF9pZHhfcHRyID0gaWR4OworICAgIHJldHVybiBydmFsOworfQorCitzdGF0
aWMgUHlPYmplY3QgKgorc2Nhbl9vbmNlX3N0cihQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0
ICpweXN0ciwgUHlfc3NpemVfdCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikKK3sKKyAg
ICAvKiBSZWFkIG9uZSBKU09OIHRlcm0gKG9mIGFueSBraW5kKSBmcm9tIFB5U3RyaW5nIHB5c3Ry
LgorICAgIGlkeCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdGVy
bQorICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRo
ZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgdGhlIG51bWJlci4KKworICAgIFJldHVy
bnMgYSBuZXcgUHlPYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRlcm0uCisgICAgKi8KKyAg
ICBjaGFyICpzdHIgPSBQeVN0cmluZ19BU19TVFJJTkcocHlzdHIpOworICAgIFB5X3NzaXplX3Qg
bGVuZ3RoID0gUHlTdHJpbmdfR0VUX1NJWkUocHlzdHIpOworICAgIFB5T2JqZWN0ICpydmFsID0g
TlVMTDsKKyAgICBpbnQgZmFsbHRocm91Z2ggPSAwOworICAgIGlmIChpZHggPj0gbGVuZ3RoKSB7
CisgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUg
ZGVjb2RpbmcgYSBKU09OIGRvY3VtZW50IikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN3
aXRjaCAoc3RyW2lkeF0pIHsKKyAgICAgICAgY2FzZSAnIic6CisgICAgICAgICAgICAvKiBzdHJp
bmcgKi8KKyAgICAgICAgICAgIHJ2YWwgPSBzY2Fuc3RyaW5nX3N0cihweXN0ciwgaWR4ICsgMSwK
KyAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcocy0+ZW5jb2RpbmcpLAorICAgICAg
ICAgICAgICAgIFB5T2JqZWN0X0lzVHJ1ZShzLT5zdHJpY3QpLAorICAgICAgICAgICAgICAgIG5l
eHRfaWR4X3B0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAneyc6CisgICAg
ICAgICAgICAvKiBvYmplY3QgKi8KKyAgICAgICAgICAgIHJ2YWwgPSBfcGFyc2Vfb2JqZWN0X3N0
cihzLCBweXN0ciwgaWR4ICsgMSwgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgICAgIC8qIGFycmF5ICovCisgICAgICAgICAgICBy
dmFsID0gX3BhcnNlX2FycmF5X3N0cihzLCBweXN0ciwgaWR4ICsgMSwgbmV4dF9pZHhfcHRyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICduJzoKKyAgICAgICAgICAgIC8qIG51
bGwgKi8KKyAgICAgICAgICAgIGlmICgoaWR4ICsgMyA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFd
ID09ICd1JyAmJiBzdHJbaWR4ICsgMl0gPT0gJ2wnICYmIHN0cltpZHggKyAzXSA9PSAnbCcpIHsK
KyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgICAgICAgKm5l
eHRfaWR4X3B0ciA9IGlkeCArIDQ7CisgICAgICAgICAgICAgICAgcnZhbCA9IFB5X05vbmU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZmFsbHRocm91
Z2ggPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAg
ICAgLyogdHJ1ZSAqLworICAgICAgICAgICAgaWYgKChpZHggKyAzIDwgbGVuZ3RoKSAmJiBzdHJb
aWR4ICsgMV0gPT0gJ3InICYmIHN0cltpZHggKyAyXSA9PSAndScgJiYgc3RyW2lkeCArIDNdID09
ICdlJykgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKKyAgICAgICAgICAg
ICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgNDsKKyAgICAgICAgICAgICAgICBydmFsID0gUHlf
VHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBm
YWxsdGhyb3VnaCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZic6Cisg
ICAgICAgICAgICAvKiBmYWxzZSAqLworICAgICAgICAgICAgaWYgKChpZHggKyA0IDwgbGVuZ3Ro
KSAmJiBzdHJbaWR4ICsgMV0gPT0gJ2EnICYmIHN0cltpZHggKyAyXSA9PSAnbCcgJiYgc3RyW2lk
eCArIDNdID09ICdzJyAmJiBzdHJbaWR4ICsgNF0gPT0gJ2UnKSB7CisgICAgICAgICAgICAgICAg
UHlfSU5DUkVGKFB5X0ZhbHNlKTsKKyAgICAgICAgICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4
ICsgNTsKKyAgICAgICAgICAgICAgICBydmFsID0gUHlfRmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZmFsbHRocm91Z2ggPSAxOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ04nOgorICAgICAgICAgICAgLyogTmFOICovCisg
ICAgICAgICAgICBpZiAoKGlkeCArIDIgPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAnYScg
JiYgc3RyW2lkeCArIDJdID09ICdOJykgeworICAgICAgICAgICAgICAgIHJ2YWwgPSBfcGFyc2Vf
Y29uc3RhbnQocywgIk5hTiIsIGlkeCwgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmYWxsdGhyb3VnaCA9IDE7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnSSc6CisgICAgICAgICAgICAvKiBJbmZpbml0eSAq
LworICAgICAgICAgICAgaWYgKChpZHggKyA3IDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0g
J24nICYmIHN0cltpZHggKyAyXSA9PSAnZicgJiYgc3RyW2lkeCArIDNdID09ICdpJyAmJiBzdHJb
aWR4ICsgNF0gPT0gJ24nICYmIHN0cltpZHggKyA1XSA9PSAnaScgJiYgc3RyW2lkeCArIDZdID09
ICd0JyAmJiBzdHJbaWR4ICsgN10gPT0gJ3knKSB7CisgICAgICAgICAgICAgICAgcnZhbCA9IF9w
YXJzZV9jb25zdGFudChzLCAiSW5maW5pdHkiLCBpZHgsIG5leHRfaWR4X3B0cik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZmFsbHRocm91Z2ggPSAx
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgLyog
LUluZmluaXR5ICovCisgICAgICAgICAgICBpZiAoKGlkeCArIDggPCBsZW5ndGgpICYmIHN0cltp
ZHggKyAxXSA9PSAnSScgJiYgc3RyW2lkeCArIDJdID09ICduJyAmJiBzdHJbaWR4ICsgM10gPT0g
J2YnICYmIHN0cltpZHggKyA0XSA9PSAnaScgJiYgc3RyW2lkeCArIDVdID09ICduJyAmJiBzdHJb
aWR4ICsgNl0gPT0gJ2knICYmIHN0cltpZHggKyA3XSA9PSAndCcgJiYgc3RyW2lkeCArIDhdID09
ICd5JykgeworICAgICAgICAgICAgICAgIHJ2YWwgPSBfcGFyc2VfY29uc3RhbnQocywgIi1JbmZp
bml0eSIsIGlkeCwgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBmYWxsdGhyb3VnaCA9IDE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZhbGx0aHJvdWdoID0gMTsKKyAgICB9Cisg
ICAgLyogRGlkbid0IGZpbmQgYSBzdHJpbmcsIG9iamVjdCwgYXJyYXksIG9yIG5hbWVkIGNvbnN0
YW50LiBMb29rIGZvciBhIG51bWJlci4gKi8KKyAgICBpZiAoZmFsbHRocm91Z2gpCisgICAgICAg
IHJ2YWwgPSBfbWF0Y2hfbnVtYmVyX3N0cihzLCBweXN0ciwgaWR4LCBuZXh0X2lkeF9wdHIpOwor
ICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOworICAgIHJldHVybiBydmFsOworfQorCitzdGF0
aWMgUHlPYmplY3QgKgorc2Nhbl9vbmNlX3VuaWNvZGUoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9i
amVjdCAqcHlzdHIsIFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpCit7
CisgICAgLyogUmVhZCBvbmUgSlNPTiB0ZXJtIChvZiBhbnkga2luZCkgZnJvbSBQeVVuaWNvZGUg
cHlzdHIuCisgICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRo
ZSB0ZXJtCisgICAgKm5leHRfaWR4X3B0ciBpcyBhIHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXgg
dG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgorICAgICAgICB0aGUgbnVtYmVyLgorCisgICAg
UmV0dXJucyBhIG5ldyBQeU9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGVybS4KKyAgICAq
LworICAgIFB5X1VOSUNPREUgKnN0ciA9IFB5VW5pY29kZV9BU19VTklDT0RFKHB5c3RyKTsKKyAg
ICBQeV9zc2l6ZV90IGxlbmd0aCA9IFB5VW5pY29kZV9HRVRfU0laRShweXN0cik7CisgICAgUHlP
YmplY3QgKnJ2YWwgPSBOVUxMOworICAgIGludCBmYWxsdGhyb3VnaCA9IDA7CisgICAgaWYgKGlk
eCA+PSBsZW5ndGgpIHsKKyAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9u
KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2
ZUNhbGwoIiB3aGlsZSBkZWNvZGluZyBhIEpTT04gZG9jdW1lbnQiKSkKKyAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgc3dpdGNoIChzdHJbaWR4XSkgeworICAgICAgICBjYXNlICciJzoKKyAgICAg
ICAgICAgIC8qIHN0cmluZyAqLworICAgICAgICAgICAgcnZhbCA9IHNjYW5zdHJpbmdfdW5pY29k
ZShweXN0ciwgaWR4ICsgMSwKKyAgICAgICAgICAgICAgICBQeU9iamVjdF9Jc1RydWUocy0+c3Ry
aWN0KSwKKyAgICAgICAgICAgICAgICBuZXh0X2lkeF9wdHIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgLyogb2JqZWN0ICovCisgICAgICAgICAg
ICBydmFsID0gX3BhcnNlX29iamVjdF91bmljb2RlKHMsIHB5c3RyLCBpZHggKyAxLCBuZXh0X2lk
eF9wdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAg
ICAgLyogYXJyYXkgKi8KKyAgICAgICAgICAgIHJ2YWwgPSBfcGFyc2VfYXJyYXlfdW5pY29kZShz
LCBweXN0ciwgaWR4ICsgMSwgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICduJzoKKyAgICAgICAgICAgIC8qIG51bGwgKi8KKyAgICAgICAgICAgIGlmICgo
aWR4ICsgMyA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICd1JyAmJiBzdHJbaWR4ICsgMl0g
PT0gJ2wnICYmIHN0cltpZHggKyAzXSA9PSAnbCcpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNS
RUYoUHlfTm9uZSk7CisgICAgICAgICAgICAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDQ7Cisg
ICAgICAgICAgICAgICAgcnZhbCA9IFB5X05vbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgZmFsbHRocm91Z2ggPSAxOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgLyogdHJ1ZSAqLworICAgICAgICAg
ICAgaWYgKChpZHggKyAzIDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ3InICYmIHN0cltp
ZHggKyAyXSA9PSAndScgJiYgc3RyW2lkeCArIDNdID09ICdlJykgeworICAgICAgICAgICAgICAg
IFB5X0lOQ1JFRihQeV9UcnVlKTsKKyAgICAgICAgICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4
ICsgNDsKKyAgICAgICAgICAgICAgICBydmFsID0gUHlfVHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmYWxsdGhyb3VnaCA9IDE7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAvKiBmYWxzZSAqLwor
ICAgICAgICAgICAgaWYgKChpZHggKyA0IDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ2En
ICYmIHN0cltpZHggKyAyXSA9PSAnbCcgJiYgc3RyW2lkeCArIDNdID09ICdzJyAmJiBzdHJbaWR4
ICsgNF0gPT0gJ2UnKSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X0ZhbHNlKTsKKyAg
ICAgICAgICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgNTsKKyAgICAgICAgICAgICAgICBy
dmFsID0gUHlfRmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgZmFsbHRocm91Z2ggPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ04nOgorICAgICAgICAgICAgLyogTmFOICovCisgICAgICAgICAgICBpZiAoKGlkeCArIDIg
PCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAnYScgJiYgc3RyW2lkeCArIDJdID09ICdOJykg
eworICAgICAgICAgICAgICAgIHJ2YWwgPSBfcGFyc2VfY29uc3RhbnQocywgIk5hTiIsIGlkeCwg
bmV4dF9pZHhfcHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBmYWxsdGhyb3VnaCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAnSSc6CisgICAgICAgICAgICAvKiBJbmZpbml0eSAqLworICAgICAgICAgICAgaWYgKChpZHgg
KyA3IDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ24nICYmIHN0cltpZHggKyAyXSA9PSAn
ZicgJiYgc3RyW2lkeCArIDNdID09ICdpJyAmJiBzdHJbaWR4ICsgNF0gPT0gJ24nICYmIHN0cltp
ZHggKyA1XSA9PSAnaScgJiYgc3RyW2lkeCArIDZdID09ICd0JyAmJiBzdHJbaWR4ICsgN10gPT0g
J3knKSB7CisgICAgICAgICAgICAgICAgcnZhbCA9IF9wYXJzZV9jb25zdGFudChzLCAiSW5maW5p
dHkiLCBpZHgsIG5leHRfaWR4X3B0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZmFsbHRocm91Z2ggPSAxOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgLyogLUluZmluaXR5ICovCisgICAgICAgICAg
ICBpZiAoKGlkeCArIDggPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAnSScgJiYgc3RyW2lk
eCArIDJdID09ICduJyAmJiBzdHJbaWR4ICsgM10gPT0gJ2YnICYmIHN0cltpZHggKyA0XSA9PSAn
aScgJiYgc3RyW2lkeCArIDVdID09ICduJyAmJiBzdHJbaWR4ICsgNl0gPT0gJ2knICYmIHN0cltp
ZHggKyA3XSA9PSAndCcgJiYgc3RyW2lkeCArIDhdID09ICd5JykgeworICAgICAgICAgICAgICAg
IHJ2YWwgPSBfcGFyc2VfY29uc3RhbnQocywgIi1JbmZpbml0eSIsIGlkeCwgbmV4dF9pZHhfcHRy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmYWxs
dGhyb3VnaCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGZhbGx0aHJvdWdoID0gMTsKKyAgICB9CisgICAgLyogRGlkbid0IGZpbmQgYSBzdHJp
bmcsIG9iamVjdCwgYXJyYXksIG9yIG5hbWVkIGNvbnN0YW50LiBMb29rIGZvciBhIG51bWJlci4g
Ki8KKyAgICBpZiAoZmFsbHRocm91Z2gpCisgICAgICAgIHJ2YWwgPSBfbWF0Y2hfbnVtYmVyX3Vu
aWNvZGUocywgcHlzdHIsIGlkeCwgbmV4dF9pZHhfcHRyKTsKKyAgICBQeV9MZWF2ZVJlY3Vyc2l2
ZUNhbGwoKTsKKyAgICByZXR1cm4gcnZhbDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3NjYW5u
ZXJfY2FsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQor
eworICAgIC8qIFB5dGhvbiBjYWxsYWJsZSBpbnRlcmZhY2UgdG8gc2Nhbl9vbmNlX3tzdHIsdW5p
Y29kZX0gKi8KKyAgICBQeU9iamVjdCAqcHlzdHI7CisgICAgUHlPYmplY3QgKnJ2YWw7CisgICAg
UHlfc3NpemVfdCBpZHg7CisgICAgUHlfc3NpemVfdCBuZXh0X2lkeCA9IC0xOworICAgIHN0YXRp
YyBjaGFyICprd2xpc3RbXSA9IHsic3RyaW5nIiwgImlkeCIsIE5VTEx9OworICAgIFB5U2Nhbm5l
ck9iamVjdCAqczsKKyAgICBhc3NlcnQoUHlTY2FubmVyX0NoZWNrKHNlbGYpKTsKKyAgICBzID0g
KFB5U2Nhbm5lck9iamVjdCAqKXNlbGY7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5
d29yZHMoYXJncywga3dkcywgIk9PJjpzY2FuX29uY2UiLCBrd2xpc3QsICZweXN0ciwgX2NvbnZl
cnRQeUludF9Bc1NzaXplX3QsICZpZHgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlm
IChQeVN0cmluZ19DaGVjayhweXN0cikpIHsKKyAgICAgICAgcnZhbCA9IHNjYW5fb25jZV9zdHIo
cywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlVbmljb2Rl
X0NoZWNrKHB5c3RyKSkgeworICAgICAgICBydmFsID0gc2Nhbl9vbmNlX3VuaWNvZGUocywgcHlz
dHIsIGlkeCwgJm5leHRfaWR4KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX0Zv
cm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBt
dXN0IGJlIGEgc3RyaW5nLCBub3QgJS44MHMiLAorICAgICAgICAgICAgICAgICBQeV9UWVBFKHB5
c3RyKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeURpY3Rf
Q2xlYXIocy0+bWVtbyk7CisgICAgcmV0dXJuIF9idWlsZF9ydmFsX2luZGV4X3R1cGxlKHJ2YWws
IG5leHRfaWR4KTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3NjYW5uZXJfbmV3KFB5VHlwZU9i
amVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIFB5U2Nh
bm5lck9iamVjdCAqczsKKyAgICBzID0gKFB5U2Nhbm5lck9iamVjdCAqKXR5cGUtPnRwX2FsbG9j
KHR5cGUsIDApOworICAgIGlmIChzICE9IE5VTEwpIHsKKyAgICAgICAgcy0+ZW5jb2RpbmcgPSBO
VUxMOworICAgICAgICBzLT5zdHJpY3QgPSBOVUxMOworICAgICAgICBzLT5vYmplY3RfaG9vayA9
IE5VTEw7CisgICAgICAgIHMtPnBhaXJzX2hvb2sgPSBOVUxMOworICAgICAgICBzLT5wYXJzZV9m
bG9hdCA9IE5VTEw7CisgICAgICAgIHMtPnBhcnNlX2ludCA9IE5VTEw7CisgICAgICAgIHMtPnBh
cnNlX2NvbnN0YW50ID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIChQeU9iamVjdCAqKXM7Cit9
CisKK3N0YXRpYyBpbnQKK3NjYW5uZXJfaW5pdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFy
Z3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIC8qIEluaXRpYWxpemUgU2Nhbm5lciBvYmplY3Qg
Ki8KKyAgICBQeU9iamVjdCAqY3R4OworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiY29u
dGV4dCIsIE5VTEx9OworICAgIFB5U2Nhbm5lck9iamVjdCAqczsKKworICAgIGFzc2VydChQeVNj
YW5uZXJfQ2hlY2soc2VsZikpOworICAgIHMgPSAoUHlTY2FubmVyT2JqZWN0ICopc2VsZjsKKwor
ICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPOm1ha2Vf
c2Nhbm5lciIsIGt3bGlzdCwgJmN0eCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAKKyAgICBp
ZiAocy0+bWVtbyA9PSBOVUxMKSB7CisgICAgICAgIHMtPm1lbW8gPSBQeURpY3RfTmV3KCk7Cisg
ICAgICAgIGlmIChzLT5tZW1vID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAg
fQorCisgICAgLyogUHlTdHJpbmdfQVNfU1RSSU5HIGlzIHVzZWQgb24gZW5jb2RpbmcgKi8KKyAg
ICBzLT5lbmNvZGluZyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY3R4LCAiZW5jb2RpbmciKTsK
KyAgICBpZiAocy0+ZW5jb2RpbmcgPT0gTlVMTCkKKyAgICAgICAgZ290byBiYWlsOworICAgIGlm
IChzLT5lbmNvZGluZyA9PSBQeV9Ob25lKSB7CisgICAgICAgIFB5X0RFQ1JFRihQeV9Ob25lKTsK
KyAgICAgICAgcy0+ZW5jb2RpbmcgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKERFRkFVTFRf
RU5DT0RJTkcpOworICAgIH0KKyAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2socy0+ZW5jb2Rp
bmcpKSB7CisgICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5n
KHMtPmVuY29kaW5nLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKHMtPmVuY29kaW5n
KTsKKyAgICAgICAgcy0+ZW5jb2RpbmcgPSB0bXA7CisgICAgfQorICAgIGlmIChzLT5lbmNvZGlu
ZyA9PSBOVUxMIHx8ICFQeVN0cmluZ19DaGVjayhzLT5lbmNvZGluZykpCisgICAgICAgIGdvdG8g
YmFpbDsKKworICAgIC8qIEFsbCBvZiB0aGVzZSB3aWxsIGZhaWwgImdyYWNlZnVsbHkiIHNvIHdl
IGRvbid0IG5lZWQgdG8gdmVyaWZ5IHRoZW0gKi8KKyAgICBzLT5zdHJpY3QgPSBQeU9iamVjdF9H
ZXRBdHRyU3RyaW5nKGN0eCwgInN0cmljdCIpOworICAgIGlmIChzLT5zdHJpY3QgPT0gTlVMTCkK
KyAgICAgICAgZ290byBiYWlsOworICAgIHMtPm9iamVjdF9ob29rID0gUHlPYmplY3RfR2V0QXR0
clN0cmluZyhjdHgsICJvYmplY3RfaG9vayIpOworICAgIGlmIChzLT5vYmplY3RfaG9vayA9PSBO
VUxMKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgcy0+cGFpcnNfaG9vayA9IFB5T2JqZWN0X0dl
dEF0dHJTdHJpbmcoY3R4LCAib2JqZWN0X3BhaXJzX2hvb2siKTsKKyAgICBpZiAocy0+cGFpcnNf
aG9vayA9PSBOVUxMKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgcy0+cGFyc2VfZmxvYXQgPSBQ
eU9iamVjdF9HZXRBdHRyU3RyaW5nKGN0eCwgInBhcnNlX2Zsb2F0Iik7CisgICAgaWYgKHMtPnBh
cnNlX2Zsb2F0ID09IE5VTEwpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBzLT5wYXJzZV9pbnQg
PSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGN0eCwgInBhcnNlX2ludCIpOworICAgIGlmIChzLT5w
YXJzZV9pbnQgPT0gTlVMTCkKKyAgICAgICAgZ290byBiYWlsOworICAgIHMtPnBhcnNlX2NvbnN0
YW50ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjdHgsICJwYXJzZV9jb25zdGFudCIpOworICAg
IGlmIChzLT5wYXJzZV9jb25zdGFudCA9PSBOVUxMKQorICAgICAgICBnb3RvIGJhaWw7CisKKyAg
ICByZXR1cm4gMDsKKworYmFpbDoKKyAgICBQeV9DTEVBUihzLT5lbmNvZGluZyk7CisgICAgUHlf
Q0xFQVIocy0+c3RyaWN0KTsKKyAgICBQeV9DTEVBUihzLT5vYmplY3RfaG9vayk7CisgICAgUHlf
Q0xFQVIocy0+cGFpcnNfaG9vayk7CisgICAgUHlfQ0xFQVIocy0+cGFyc2VfZmxvYXQpOworICAg
IFB5X0NMRUFSKHMtPnBhcnNlX2ludCk7CisgICAgUHlfQ0xFQVIocy0+cGFyc2VfY29uc3RhbnQp
OworICAgIHJldHVybiAtMTsKK30KKworUHlEb2NfU1RSVkFSKHNjYW5uZXJfZG9jLCAiSlNPTiBz
Y2FubmVyIG9iamVjdCIpOworCitzdGF0aWMKK1B5VHlwZU9iamVjdCBQeVNjYW5uZXJUeXBlID0g
eworICAgIFB5T2JqZWN0X0hFQURfSU5JVChOVUxMKQorICAgIDAsICAgICAgICAgICAgICAgICAg
ICAvKiB0cF9pbnRlcm5hbCAqLworICAgICJzaW1wbGVqc29uLl9zcGVlZHVwcy5TY2FubmVyIiwg
ICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihQeVNjYW5uZXJPYmplY3QpLCAvKiB0cF9i
YXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8K
KyAgICBzY2FubmVyX2RlYWxsb2MsIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAg
ICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBf
Z2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisg
ICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAg
ICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0
cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVu
Y2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAg
IDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgc2Nhbm5lcl9jYWxsLCAg
ICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfc3Ry
ICovCisgICAgMCwvKiBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgKi8gICAgICAgICAgICAgICAg
ICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwvKiBQeU9iamVjdF9HZW5lcmljU2V0QXR0ciwg
Ki8gICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAg
ICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5
X1RQRkxBR1NfSEFWRV9HQywgICAvKiB0cF9mbGFncyAqLworICAgIHNjYW5uZXJfZG9jLCAgICAg
ICAgICAvKiB0cF9kb2MgKi8KKyAgICBzY2FubmVyX3RyYXZlcnNlLCAgICAgICAgICAgICAgICAg
ICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICBzY2FubmVyX2NsZWFyLCAgICAgICAgICAgICAgICAg
ICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNv
bXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQg
Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAg
ICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIDAsICAgICAgICAgICAgICAgICAg
ICAvKiB0cF9tZXRob2RzICovCisgICAgc2Nhbm5lcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAg
ICAgLyogdHBfbWVtYmVycyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRz
ZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAg
ICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAg
IC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNj
cl9zZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwor
ICAgIHNjYW5uZXJfaW5pdCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAw
LC8qIFB5VHlwZV9HZW5lcmljQWxsb2MsICovICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIHNj
YW5uZXJfbmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLC8qIFB5T2JqZWN0X0dDX0Rl
bCwgKi8gICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAq
CitlbmNvZGVyX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVj
dCAqa3dkcykKK3sKKyAgICBQeUVuY29kZXJPYmplY3QgKnM7CisgICAgcyA9IChQeUVuY29kZXJP
YmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBpZiAocyAhPSBOVUxMKSB7Cisg
ICAgICAgIHMtPm1hcmtlcnMgPSBOVUxMOworICAgICAgICBzLT5kZWZhdWx0Zm4gPSBOVUxMOwor
ICAgICAgICBzLT5lbmNvZGVyID0gTlVMTDsKKyAgICAgICAgcy0+aW5kZW50ID0gTlVMTDsKKyAg
ICAgICAgcy0+a2V5X3NlcGFyYXRvciA9IE5VTEw7CisgICAgICAgIHMtPml0ZW1fc2VwYXJhdG9y
ID0gTlVMTDsKKyAgICAgICAgcy0+c29ydF9rZXlzID0gTlVMTDsKKyAgICAgICAgcy0+c2tpcGtl
eXMgPSBOVUxMOworICAgICAgICBzLT5rZXlfbWVtbyA9IE5VTEw7CisgICAgfQorICAgIHJldHVy
biAoUHlPYmplY3QgKilzOworfQorCitzdGF0aWMgaW50CitlbmNvZGVyX2luaXQoUHlPYmplY3Qg
KnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICAvKiBpbml0aWFs
aXplIEVuY29kZXIgb2JqZWN0ICovCisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJtYXJr
ZXJzIiwgImRlZmF1bHQiLCAiZW5jb2RlciIsICJpbmRlbnQiLCAia2V5X3NlcGFyYXRvciIsICJp
dGVtX3NlcGFyYXRvciIsICJzb3J0X2tleXMiLCAic2tpcGtleXMiLCAiYWxsb3dfbmFuIiwgImtl
eV9tZW1vIiwgInVzZV9kZWNpbWFsIiwgTlVMTH07CisKKyAgICBQeUVuY29kZXJPYmplY3QgKnM7
CisgICAgUHlPYmplY3QgKm1hcmtlcnMsICpkZWZhdWx0Zm4sICplbmNvZGVyLCAqaW5kZW50LCAq
a2V5X3NlcGFyYXRvcjsKKyAgICBQeU9iamVjdCAqaXRlbV9zZXBhcmF0b3IsICpzb3J0X2tleXMs
ICpza2lwa2V5cywgKmFsbG93X25hbiwgKmtleV9tZW1vLCAqdXNlX2RlY2ltYWw7CisKKyAgICBh
c3NlcnQoUHlFbmNvZGVyX0NoZWNrKHNlbGYpKTsKKyAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAq
KXNlbGY7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2Rz
LCAiT09PT09PT09PT086bWFrZV9lbmNvZGVyIiwga3dsaXN0LAorICAgICAgICAmbWFya2Vycywg
JmRlZmF1bHRmbiwgJmVuY29kZXIsICZpbmRlbnQsICZrZXlfc2VwYXJhdG9yLCAmaXRlbV9zZXBh
cmF0b3IsCisgICAgICAgICZzb3J0X2tleXMsICZza2lwa2V5cywgJmFsbG93X25hbiwgJmtleV9t
ZW1vLCAmdXNlX2RlY2ltYWwpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzLT5tYXJrZXJz
ID0gbWFya2VyczsKKyAgICBzLT5kZWZhdWx0Zm4gPSBkZWZhdWx0Zm47CisgICAgcy0+ZW5jb2Rl
ciA9IGVuY29kZXI7CisgICAgcy0+aW5kZW50ID0gaW5kZW50OworICAgIHMtPmtleV9zZXBhcmF0
b3IgPSBrZXlfc2VwYXJhdG9yOworICAgIHMtPml0ZW1fc2VwYXJhdG9yID0gaXRlbV9zZXBhcmF0
b3I7CisgICAgcy0+c29ydF9rZXlzID0gc29ydF9rZXlzOworICAgIHMtPnNraXBrZXlzID0gc2tp
cGtleXM7CisgICAgcy0+a2V5X21lbW8gPSBrZXlfbWVtbzsKKyAgICBzLT5mYXN0X2VuY29kZSA9
IChQeUNGdW5jdGlvbl9DaGVjayhzLT5lbmNvZGVyKSAmJiBQeUNGdW5jdGlvbl9HZXRGdW5jdGlv
bihzLT5lbmNvZGVyKSA9PSAoUHlDRnVuY3Rpb24pcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkp
OworICAgIHMtPmFsbG93X25hbiA9IFB5T2JqZWN0X0lzVHJ1ZShhbGxvd19uYW4pOworICAgIHMt
PnVzZV9kZWNpbWFsID0gUHlPYmplY3RfSXNUcnVlKHVzZV9kZWNpbWFsKTsKKworICAgIFB5X0lO
Q1JFRihzLT5tYXJrZXJzKTsKKyAgICBQeV9JTkNSRUYocy0+ZGVmYXVsdGZuKTsKKyAgICBQeV9J
TkNSRUYocy0+ZW5jb2Rlcik7CisgICAgUHlfSU5DUkVGKHMtPmluZGVudCk7CisgICAgUHlfSU5D
UkVGKHMtPmtleV9zZXBhcmF0b3IpOworICAgIFB5X0lOQ1JFRihzLT5pdGVtX3NlcGFyYXRvcik7
CisgICAgUHlfSU5DUkVGKHMtPnNvcnRfa2V5cyk7CisgICAgUHlfSU5DUkVGKHMtPnNraXBrZXlz
KTsKKyAgICBQeV9JTkNSRUYocy0+a2V5X21lbW8pOworICAgIHJldHVybiAwOworfQorCitzdGF0
aWMgUHlPYmplY3QgKgorZW5jb2Rlcl9jYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJn
cywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgLyogUHl0aG9uIGNhbGxhYmxlIGludGVyZmFjZSB0
byBlbmNvZGVfbGlzdGVuY29kZV9vYmogKi8KKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7
Im9iaiIsICJfY3VycmVudF9pbmRlbnRfbGV2ZWwiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqb2Jq
OworICAgIFB5T2JqZWN0ICpydmFsOworICAgIFB5X3NzaXplX3QgaW5kZW50X2xldmVsOworICAg
IFB5RW5jb2Rlck9iamVjdCAqczsKKyAgICBhc3NlcnQoUHlFbmNvZGVyX0NoZWNrKHNlbGYpKTsK
KyAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAqKXNlbGY7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1
cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJjpfaXRlcmVuY29kZSIsIGt3bGlzdCwKKyAg
ICAgICAgJm9iaiwgX2NvbnZlcnRQeUludF9Bc1NzaXplX3QsICZpbmRlbnRfbGV2ZWwpKQorICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICBydmFsID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocnZh
bCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZW5jb2Rlcl9saXN0ZW5j
b2RlX29iaihzLCBydmFsLCBvYmosIGluZGVudF9sZXZlbCkpIHsKKyAgICAgICAgUHlfREVDUkVG
KHJ2YWwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHJ2YWw7Cit9
CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZW5jb2RlZF9jb25zdChQeU9iamVjdCAqb2JqKQorewor
ICAgIC8qIFJldHVybiB0aGUgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgTm9uZSwgVHJ1
ZSwgRmFsc2UgKi8KKyAgICBpZiAob2JqID09IFB5X05vbmUpIHsKKyAgICAgICAgc3RhdGljIFB5
T2JqZWN0ICpzX251bGwgPSBOVUxMOworICAgICAgICBpZiAoc19udWxsID09IE5VTEwpIHsKKyAg
ICAgICAgICAgIHNfbnVsbCA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIm51bGwiKTsKKyAg
ICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoc19udWxsKTsKKyAgICAgICAgcmV0dXJuIHNfbnVs
bDsKKyAgICB9CisgICAgZWxzZSBpZiAob2JqID09IFB5X1RydWUpIHsKKyAgICAgICAgc3RhdGlj
IFB5T2JqZWN0ICpzX3RydWUgPSBOVUxMOworICAgICAgICBpZiAoc190cnVlID09IE5VTEwpIHsK
KyAgICAgICAgICAgIHNfdHJ1ZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInRydWUiKTsK
KyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoc190cnVlKTsKKyAgICAgICAgcmV0dXJuIHNf
dHJ1ZTsKKyAgICB9CisgICAgZWxzZSBpZiAob2JqID09IFB5X0ZhbHNlKSB7CisgICAgICAgIHN0
YXRpYyBQeU9iamVjdCAqc19mYWxzZSA9IE5VTEw7CisgICAgICAgIGlmIChzX2ZhbHNlID09IE5V
TEwpIHsKKyAgICAgICAgICAgIHNfZmFsc2UgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJm
YWxzZSIpOworICAgICAgICB9CisgICAgICAgIFB5X0lOQ1JFRihzX2ZhbHNlKTsKKyAgICAgICAg
cmV0dXJuIHNfZmFsc2U7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJp
bmcoUHlFeGNfVmFsdWVFcnJvciwgIm5vdCBhIGNvbnN0Iik7CisgICAgICAgIHJldHVybiBOVUxM
OworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2VuY29kZXJfZW5jb2RlX2Zsb2F0KFB5
RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9iaikKK3sKKyAgICAvKiBSZXR1cm4gdGhlIEpT
T04gcmVwcmVzZW50YXRpb24gb2YgYSBQeUZsb2F0ICovCisgICAgZG91YmxlIGkgPSBQeUZsb2F0
X0FTX0RPVUJMRShvYmopOworICAgIGlmICghUHlfSVNfRklOSVRFKGkpKSB7CisgICAgICAgIGlm
ICghcy0+YWxsb3dfbmFuKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFs
dWVFcnJvciwgIk91dCBvZiByYW5nZSBmbG9hdCB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFu
dCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkg
PiAwKSB7CisgICAgICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZygiSW5maW5pdHki
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpIDwgMCkgeworICAgICAgICAgICAgcmV0
dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoIi1JbmZpbml0eSIpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoIk5hTiIpOwor
ICAgICAgICB9CisgICAgfQorICAgIC8qIFVzZSBhIGJldHRlciBmbG9hdCBmb3JtYXQgaGVyZT8g
Ki8KKyAgICByZXR1cm4gUHlPYmplY3RfUmVwcihvYmopOworfQorCitzdGF0aWMgUHlPYmplY3Qg
KgorZW5jb2Rlcl9lbmNvZGVfc3RyaW5nKFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9i
aikKK3sKKyAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBzdHJpbmcg
Ki8KKyAgICBpZiAocy0+ZmFzdF9lbmNvZGUpCisgICAgICAgIHJldHVybiBweV9lbmNvZGVfYmFz
ZXN0cmluZ19hc2NpaShOVUxMLCBvYmopOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFB5T2Jq
ZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+ZW5jb2Rlciwgb2JqLCBOVUxMKTsKK30KKworc3Rh
dGljIGludAorX3N0ZWFsX2xpc3RfYXBwZW5kKFB5T2JqZWN0ICpsc3QsIFB5T2JqZWN0ICpzdG9s
ZW4pCit7CisgICAgLyogQXBwZW5kIHN0b2xlbiBhbmQgdGhlbiBkZWNyZW1lbnQgaXRzIHJlZmVy
ZW5jZSBjb3VudCAqLworICAgIGludCBydmFsID0gUHlMaXN0X0FwcGVuZChsc3QsIHN0b2xlbik7
CisgICAgUHlfREVDUkVGKHN0b2xlbik7CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBp
bnQKK2VuY29kZXJfbGlzdGVuY29kZV9vYmooUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAq
cnZhbCwgUHlPYmplY3QgKm9iaiwgUHlfc3NpemVfdCBpbmRlbnRfbGV2ZWwpCit7CisgICAgLyog
RW5jb2RlIFB5dGhvbiBvYmplY3Qgb2JqIHRvIGEgSlNPTiB0ZXJtLCBydmFsIGlzIGEgUHlMaXN0
ICovCisgICAgaW50IHJ2ID0gLTE7CisgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdo
aWxlIGVuY29kaW5nIGEgSlNPTiBkb2N1bWVudCIpKQorICAgICAgICByZXR1cm4gcnY7CisgICAg
ZG8geworICAgICAgICBpZiAob2JqID09IFB5X05vbmUgfHwgb2JqID09IFB5X1RydWUgfHwgb2Jq
ID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY3N0ciA9IF9lbmNvZGVkX2Nv
bnN0KG9iaik7CisgICAgICAgICAgICBpZiAoY3N0ciAhPSBOVUxMKQorICAgICAgICAgICAgICAg
IHJ2ID0gX3N0ZWFsX2xpc3RfYXBwZW5kKHJ2YWwsIGNzdHIpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKFB5U3RyaW5nX0NoZWNrKG9iaikgfHwgUHlVbmljb2RlX0NoZWNrKG9iaikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gZW5jb2Rlcl9lbmNvZGVf
c3RyaW5nKHMsIG9iaik7CisgICAgICAgICAgICBpZiAoZW5jb2RlZCAhPSBOVUxMKQorICAgICAg
ICAgICAgICAgIHJ2ID0gX3N0ZWFsX2xpc3RfYXBwZW5kKHJ2YWwsIGVuY29kZWQpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKFB5SW50X0NoZWNrKG9iaikgfHwgUHlMb25nX0NoZWNrKG9i
aikpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gUHlPYmplY3RfU3RyKG9iaik7
CisgICAgICAgICAgICBpZiAoZW5jb2RlZCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHJ2ID0g
X3N0ZWFsX2xpc3RfYXBwZW5kKHJ2YWwsIGVuY29kZWQpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmVuY29k
ZWQgPSBlbmNvZGVyX2VuY29kZV9mbG9hdChzLCBvYmopOworICAgICAgICAgICAgaWYgKGVuY29k
ZWQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBydiA9IF9zdGVhbF9saXN0X2FwcGVuZChydmFs
LCBlbmNvZGVkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeUxpc3RfQ2hlY2sob2Jq
KSB8fCBQeVR1cGxlX0NoZWNrKG9iaikpIHsKKyAgICAgICAgICAgIHJ2ID0gZW5jb2Rlcl9saXN0
ZW5jb2RlX2xpc3QocywgcnZhbCwgb2JqLCBpbmRlbnRfbGV2ZWwpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKFB5RGljdF9DaGVjayhvYmopKSB7CisgICAgICAgICAgICBydiA9IGVuY29k
ZXJfbGlzdGVuY29kZV9kaWN0KHMsIHJ2YWwsIG9iaiwgaW5kZW50X2xldmVsKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChzLT51c2VfZGVjaW1hbCAmJiBEZWNpbWFsX0NoZWNrKG9iaikp
IHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gUHlPYmplY3RfU3RyKG9iaik7Cisg
ICAgICAgICAgICBpZiAoZW5jb2RlZCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHJ2ID0gX3N0
ZWFsX2xpc3RfYXBwZW5kKHJ2YWwsIGVuY29kZWQpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgUHlPYmplY3QgKmlkZW50ID0gTlVMTDsKKyAgICAgICAgICAgIFB5T2Jq
ZWN0ICpuZXdvYmo7CisgICAgICAgICAgICBpZiAocy0+bWFya2VycyAhPSBQeV9Ob25lKSB7Cisg
ICAgICAgICAgICAgICAgaW50IGhhc19rZXk7CisgICAgICAgICAgICAgICAgaWRlbnQgPSBQeUxv
bmdfRnJvbVZvaWRQdHIob2JqKTsKKyAgICAgICAgICAgICAgICBpZiAoaWRlbnQgPT0gTlVMTCkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaGFzX2tleSA9IFB5
RGljdF9Db250YWlucyhzLT5tYXJrZXJzLCBpZGVudCk7CisgICAgICAgICAgICAgICAgaWYgKGhh
c19rZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc19rZXkgIT0gLTEpCisgICAgICAg
ICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNpcmN1
bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYo
aWRlbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHMtPm1hcmtlcnMsIGlkZW50LCBvYmop
KSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpZGVudCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG5ld29iaiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+ZGVmYXVsdGZuLCBv
YmosIE5VTEwpOworICAgICAgICAgICAgaWYgKG5ld29iaiA9PSBOVUxMKSB7CisgICAgICAgICAg
ICAgICAgUHlfWERFQ1JFRihpZGVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBydiA9IGVuY29kZXJfbGlzdGVuY29kZV9vYmoocywgcnZhbCwg
bmV3b2JqLCBpbmRlbnRfbGV2ZWwpOworICAgICAgICAgICAgUHlfREVDUkVGKG5ld29iaik7Cisg
ICAgICAgICAgICBpZiAocnYpIHsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGlkZW50KTsK
KyAgICAgICAgICAgICAgICBydiA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoaWRlbnQgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmIChQeURpY3RfRGVsSXRl
bShzLT5tYXJrZXJzLCBpZGVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihp
ZGVudCk7CisgICAgICAgICAgICAgICAgICAgIHJ2ID0gLTE7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoaWRlbnQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfSB3aGlsZSAoMCk7CisgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CisgICAg
cmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50CitlbmNvZGVyX2xpc3RlbmNvZGVfZGljdChQeUVu
Y29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpydmFsLCBQeU9iamVjdCAqZGN0LCBQeV9zc2l6ZV90
IGluZGVudF9sZXZlbCkKK3sKKyAgICAvKiBFbmNvZGUgUHl0aG9uIGRpY3QgZGN0IGEgSlNPTiB0
ZXJtLCBydmFsIGlzIGEgUHlMaXN0ICovCisgICAgc3RhdGljIFB5T2JqZWN0ICpvcGVuX2RpY3Qg
PSBOVUxMOworICAgIHN0YXRpYyBQeU9iamVjdCAqY2xvc2VfZGljdCA9IE5VTEw7CisgICAgc3Rh
dGljIFB5T2JqZWN0ICplbXB0eV9kaWN0ID0gTlVMTDsKKyAgICBzdGF0aWMgUHlPYmplY3QgKml0
ZXJpdGVtcyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmtzdHIgPSBOVUxMOworICAgIFB5T2JqZWN0
ICppZGVudCA9IE5VTEw7CisgICAgUHlPYmplY3QgKml0ZXIgPSBOVUxMOworICAgIFB5T2JqZWN0
ICppdGVtID0gTlVMTDsKKyAgICBQeU9iamVjdCAqaXRlbXMgPSBOVUxMOworICAgIFB5T2JqZWN0
ICplbmNvZGVkID0gTlVMTDsKKyAgICBpbnQgc2tpcGtleXM7CisgICAgUHlfc3NpemVfdCBpZHg7
CisKKyAgICBpZiAob3Blbl9kaWN0ID09IE5VTEwgfHwgY2xvc2VfZGljdCA9PSBOVUxMIHx8IGVt
cHR5X2RpY3QgPT0gTlVMTCB8fCBpdGVyaXRlbXMgPT0gTlVMTCkgeworICAgICAgICBvcGVuX2Rp
Y3QgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ7Iik7CisgICAgICAgIGNsb3NlX2RpY3Qg
PSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ9Iik7CisgICAgICAgIGVtcHR5X2RpY3QgPSBQ
eVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ7fSIpOworICAgICAgICBpdGVyaXRlbXMgPSBQeVN0
cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJpdGVyaXRlbXMiKTsKKyAgICAgICAgaWYgKG9wZW5fZGlj
dCA9PSBOVUxMIHx8IGNsb3NlX2RpY3QgPT0gTlVMTCB8fCBlbXB0eV9kaWN0ID09IE5VTEwgfHwg
aXRlcml0ZW1zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlm
IChQeURpY3RfU2l6ZShkY3QpID09IDApCisgICAgICAgIHJldHVybiBQeUxpc3RfQXBwZW5kKHJ2
YWwsIGVtcHR5X2RpY3QpOworCisgICAgaWYgKHMtPm1hcmtlcnMgIT0gUHlfTm9uZSkgeworICAg
ICAgICBpbnQgaGFzX2tleTsKKyAgICAgICAgaWRlbnQgPSBQeUxvbmdfRnJvbVZvaWRQdHIoZGN0
KTsKKyAgICAgICAgaWYgKGlkZW50ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGJhaWw7Cisg
ICAgICAgIGhhc19rZXkgPSBQeURpY3RfQ29udGFpbnMocy0+bWFya2VycywgaWRlbnQpOworICAg
ICAgICBpZiAoaGFzX2tleSkgeworICAgICAgICAgICAgaWYgKGhhc19rZXkgIT0gLTEpCisgICAg
ICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJDaXJjdWxhciBy
ZWZlcmVuY2UgZGV0ZWN0ZWQiKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0ocy0+bWFya2VycywgaWRlbnQsIGRjdCkpIHsKKyAg
ICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChQeUxpc3Rf
QXBwZW5kKHJ2YWwsIG9wZW5fZGljdCkpCisgICAgICAgIGdvdG8gYmFpbDsKKworICAgIGlmIChz
LT5pbmRlbnQgIT0gUHlfTm9uZSkgeworICAgICAgICAvKiBUT0RPOiBET0VTIE5PVCBSVU4gKi8K
KyAgICAgICAgaW5kZW50X2xldmVsICs9IDE7CisgICAgICAgIC8qCisgICAgICAgICAgICBuZXds
aW5lX2luZGVudCA9ICdcbicgKyAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkKKyAg
ICAgICAgICAgIHNlcGFyYXRvciA9IF9pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5kZW50Cisg
ICAgICAgICAgICBidWYgKz0gbmV3bGluZV9pbmRlbnQKKyAgICAgICAgKi8KKyAgICB9CisKKyAg
ICBpZiAoUHlPYmplY3RfSXNUcnVlKHMtPnNvcnRfa2V5cykpIHsKKyAgICAgICAgLyogRmlyc3Qg
c29ydCB0aGUga2V5cyB0aGVuIHJlcGxhY2UgdGhlbSB3aXRoIChrZXksIHZhbHVlKSB0dXBsZXMu
ICovCisgICAgICAgIFB5X3NzaXplX3QgaSwgbml0ZW1zOworICAgICAgICBpZiAoUHlEaWN0X0No
ZWNrRXhhY3QoZGN0KSkKKyAgICAgICAgICAgIGl0ZW1zID0gUHlEaWN0X0tleXMoZGN0KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaXRlbXMgPSBQeU1hcHBpbmdfS2V5cyhkY3QpOworICAg
ICAgICBpZiAoaXRlbXMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAg
aWYgKCFQeUxpc3RfQ2hlY2soaXRlbXMpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmco
UHlFeGNfVmFsdWVFcnJvciwgImtleXMgbXVzdCByZXR1cm4gbGlzdCIpOworICAgICAgICAgICAg
Z290byBiYWlsOworICAgICAgICB9CisgICAgICAgIGlmIChQeUxpc3RfU29ydChpdGVtcykgPCAw
KQorICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICBuaXRlbXMgPSBQeUxpc3RfR0VUX1NJ
WkUoaXRlbXMpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpKyspIHsKKyAgICAg
ICAgICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKKyAgICAgICAgICAgIGtleSA9IFB5TGlzdF9H
RVRfSVRFTShpdGVtcywgaSk7CisgICAgICAgICAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtKGRj
dCwga2V5KTsKKyAgICAgICAgICAgIGl0ZW0gPSBQeVR1cGxlX1BhY2soMiwga2V5LCB2YWx1ZSk7
CisgICAgICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gYmFp
bDsKKyAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShpdGVtcywgaSwgaXRlbSk7CisgICAgICAg
ICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAg
ICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGRjdCkpCisgICAgICAgICAgICBpdGVtcyA9IFB5RGlj
dF9JdGVtcyhkY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdGVtcyA9IFB5TWFwcGlu
Z19JdGVtcyhkY3QpOworICAgIH0KKyAgICBpZiAoaXRlbXMgPT0gTlVMTCkKKyAgICAgICAgZ290
byBiYWlsOworICAgIGl0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZW1zKTsKKyAgICBQeV9ERUNS
RUYoaXRlbXMpOworICAgIGlmIChpdGVyID09IE5VTEwpCisgICAgICAgIGdvdG8gYmFpbDsKKwor
ICAgIHNraXBrZXlzID0gUHlPYmplY3RfSXNUcnVlKHMtPnNraXBrZXlzKTsKKyAgICBpZHggPSAw
OworICAgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0KGl0ZXIpKSkgeworICAgICAgICBQeU9i
amVjdCAqZW5jb2RlZCwgKmtleSwgKnZhbHVlOworICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2so
aXRlbSkgfHwgUHlfU0laRShpdGVtKSAhPSAyKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJp
bmcoUHlFeGNfVmFsdWVFcnJvciwgIml0ZW1zIG11c3QgcmV0dXJuIDItdHVwbGVzIik7CisgICAg
ICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKyAgICAgICAga2V5ID0gUHlUdXBsZV9HRVRf
SVRFTShpdGVtLCAwKTsKKyAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgZ290
byBiYWlsOworICAgICAgICB2YWx1ZSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMSk7CisgICAg
ICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBiYWlsOworCisgICAgICAg
IGVuY29kZWQgPSBQeURpY3RfR2V0SXRlbShzLT5rZXlfbWVtbywga2V5KTsKKyAgICAgICAgaWYg
KGVuY29kZWQgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGVuY29kZWQpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5U3RyaW5nX0NoZWNrKGtleSkgfHwgUHlVbmljb2Rl
X0NoZWNrKGtleSkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihrZXkpOworICAgICAgICAgICAg
a3N0ciA9IGtleTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeUZsb2F0X0NoZWNrKGtl
eSkpIHsKKyAgICAgICAgICAgIGtzdHIgPSBlbmNvZGVyX2VuY29kZV9mbG9hdChzLCBrZXkpOwor
ICAgICAgICAgICAgaWYgKGtzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoa2V5ID09IFB5X1RydWUgfHwga2V5ID09IFB5
X0ZhbHNlIHx8IGtleSA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICAvKiBUaGlzIG11c3QgY29t
ZSBiZWZvcmUgdGhlIFB5SW50X0NoZWNrIGJlY2F1c2UKKyAgICAgICAgICAgICAgIFRydWUgYW5k
IEZhbHNlIGFyZSBhbHNvIDEgYW5kIDAuKi8KKyAgICAgICAgICAgIGtzdHIgPSBfZW5jb2RlZF9j
b25zdChrZXkpOworICAgICAgICAgICAgaWYgKGtzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAg
ICBnb3RvIGJhaWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlJbnRfQ2hlY2soa2V5
KSB8fCBQeUxvbmdfQ2hlY2soa2V5KSkgeworICAgICAgICAgICAga3N0ciA9IFB5T2JqZWN0X1N0
cihrZXkpOworICAgICAgICAgICAgaWYgKGtzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBn
b3RvIGJhaWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2tpcGtleXMpIHsKKyAgICAg
ICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogVE9ETzogaW5jbHVkZSByZXByIG9mIGtl
eSAqLworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImtleXMg
bXVzdCBiZSBhIHN0cmluZyIpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlkeCkgeworICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwg
cy0+aXRlbV9zZXBhcmF0b3IpKQorICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVuY29kZWQg
PSBlbmNvZGVyX2VuY29kZV9zdHJpbmcocywga3N0cik7CisgICAgICAgICAgICBQeV9DTEVBUihr
c3RyKTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCisgICAgICAgICAgICAgICAg
Z290byBiYWlsOworICAgICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHMtPmtleV9tZW1vLCBr
ZXksIGVuY29kZWQpKQorICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBlbmNvZGVkKSkgeworICAgICAgICAgICAgZ290
byBiYWlsOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKGVuY29kZWQpOworICAgICAgICBp
ZiAoUHlMaXN0X0FwcGVuZChydmFsLCBzLT5rZXlfc2VwYXJhdG9yKSkKKyAgICAgICAgICAgIGdv
dG8gYmFpbDsKKyAgICAgICAgaWYgKGVuY29kZXJfbGlzdGVuY29kZV9vYmoocywgcnZhbCwgdmFs
dWUsIGluZGVudF9sZXZlbCkpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIFB5X0NM
RUFSKGl0ZW0pOworICAgICAgICBpZHggKz0gMTsKKyAgICB9CisgICAgUHlfQ0xFQVIoaXRlcik7
CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBpZiAo
aWRlbnQgIT0gTlVMTCkgeworICAgICAgICBpZiAoUHlEaWN0X0RlbEl0ZW0ocy0+bWFya2Vycywg
aWRlbnQpKQorICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICBQeV9DTEVBUihpZGVudCk7
CisgICAgfQorICAgIGlmIChzLT5pbmRlbnQgIT0gUHlfTm9uZSkgeworICAgICAgICAvKiBUT0RP
OiBET0VTIE5PVCBSVU4gKi8KKyAgICAgICAgaW5kZW50X2xldmVsIC09IDE7CisgICAgICAgIC8q
CisgICAgICAgICAgICB5aWVsZCAnXG4nICsgKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2
ZWwpCisgICAgICAgICovCisgICAgfQorICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2YWwsIGNsb3Nl
X2RpY3QpKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgcmV0dXJuIDA7CisKK2JhaWw6CisgICAg
UHlfWERFQ1JFRihlbmNvZGVkKTsKKyAgICBQeV9YREVDUkVGKGl0ZW1zKTsKKyAgICBQeV9YREVD
UkVGKGl0ZXIpOworICAgIFB5X1hERUNSRUYoa3N0cik7CisgICAgUHlfWERFQ1JFRihpZGVudCk7
CisgICAgcmV0dXJuIC0xOworfQorCisKK3N0YXRpYyBpbnQKK2VuY29kZXJfbGlzdGVuY29kZV9s
aXN0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKnJ2YWwsIFB5T2JqZWN0ICpzZXEsIFB5
X3NzaXplX3QgaW5kZW50X2xldmVsKQoreworICAgIC8qIEVuY29kZSBQeXRob24gbGlzdCBzZXEg
dG8gYSBKU09OIHRlcm0sIHJ2YWwgaXMgYSBQeUxpc3QgKi8KKyAgICBzdGF0aWMgUHlPYmplY3Qg
Km9wZW5fYXJyYXkgPSBOVUxMOworICAgIHN0YXRpYyBQeU9iamVjdCAqY2xvc2VfYXJyYXkgPSBO
VUxMOworICAgIHN0YXRpYyBQeU9iamVjdCAqZW1wdHlfYXJyYXkgPSBOVUxMOworICAgIFB5T2Jq
ZWN0ICppZGVudCA9IE5VTEw7CisgICAgUHlPYmplY3QgKml0ZXIgPSBOVUxMOworICAgIFB5T2Jq
ZWN0ICpvYmogPSBOVUxMOworICAgIGludCBpc190cnVlOworICAgIGludCBpID0gMDsKKworICAg
IGlmIChvcGVuX2FycmF5ID09IE5VTEwgfHwgY2xvc2VfYXJyYXkgPT0gTlVMTCB8fCBlbXB0eV9h
cnJheSA9PSBOVUxMKSB7CisgICAgICAgIG9wZW5fYXJyYXkgPSBQeVN0cmluZ19JbnRlcm5Gcm9t
U3RyaW5nKCJbIik7CisgICAgICAgIGNsb3NlX2FycmF5ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0
cmluZygiXSIpOworICAgICAgICBlbXB0eV9hcnJheSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJp
bmcoIltdIik7CisgICAgICAgIGlmIChvcGVuX2FycmF5ID09IE5VTEwgfHwgY2xvc2VfYXJyYXkg
PT0gTlVMTCB8fCBlbXB0eV9hcnJheSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH0KKyAgICBpZGVudCA9IE5VTEw7CisgICAgaXNfdHJ1ZSA9IFB5T2JqZWN0X0lzVHJ1ZShz
ZXEpOworICAgIGlmIChpc190cnVlID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxz
ZSBpZiAoaXNfdHJ1ZSA9PSAwKQorICAgICAgICByZXR1cm4gUHlMaXN0X0FwcGVuZChydmFsLCBl
bXB0eV9hcnJheSk7CisKKyAgICBpZiAocy0+bWFya2VycyAhPSBQeV9Ob25lKSB7CisgICAgICAg
IGludCBoYXNfa2V5OworICAgICAgICBpZGVudCA9IFB5TG9uZ19Gcm9tVm9pZFB0cihzZXEpOwor
ICAgICAgICBpZiAoaWRlbnQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAg
ICAgaGFzX2tleSA9IFB5RGljdF9Db250YWlucyhzLT5tYXJrZXJzLCBpZGVudCk7CisgICAgICAg
IGlmIChoYXNfa2V5KSB7CisgICAgICAgICAgICBpZiAoaGFzX2tleSAhPSAtMSkKKyAgICAgICAg
ICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNpcmN1bGFyIHJlZmVy
ZW5jZSBkZXRlY3RlZCIpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAg
ICAgIGlmIChQeURpY3RfU2V0SXRlbShzLT5tYXJrZXJzLCBpZGVudCwgc2VxKSkgeworICAgICAg
ICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgaXRlciA9IFB5T2JqZWN0
X0dldEl0ZXIoc2VxKTsKKyAgICBpZiAoaXRlciA9PSBOVUxMKQorICAgICAgICBnb3RvIGJhaWw7
CisKKyAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBvcGVuX2FycmF5KSkKKyAgICAgICAgZ290
byBiYWlsOworICAgIGlmIChzLT5pbmRlbnQgIT0gUHlfTm9uZSkgeworICAgICAgICAvKiBUT0RP
OiBET0VTIE5PVCBSVU4gKi8KKyAgICAgICAgaW5kZW50X2xldmVsICs9IDE7CisgICAgICAgIC8q
CisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9ICdcbicgKyAoX2luZGVudCAqIF9jdXJyZW50
X2luZGVudF9sZXZlbCkKKyAgICAgICAgICAgIHNlcGFyYXRvciA9IF9pdGVtX3NlcGFyYXRvciAr
IG5ld2xpbmVfaW5kZW50CisgICAgICAgICAgICBidWYgKz0gbmV3bGluZV9pbmRlbnQKKyAgICAg
ICAgKi8KKyAgICB9CisgICAgd2hpbGUgKChvYmogPSBQeUl0ZXJfTmV4dChpdGVyKSkpIHsKKyAg
ICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2YWwsIHMtPml0
ZW1fc2VwYXJhdG9yKSkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGVuY29kZXJfbGlzdGVuY29kZV9vYmoocywgcnZhbCwgb2JqLCBpbmRlbnRfbGV2
ZWwpKQorICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICBpKys7CisgICAgICAgIFB5X0NM
RUFSKG9iaik7CisgICAgfQorICAgIFB5X0NMRUFSKGl0ZXIpOworICAgIGlmIChQeUVycl9PY2N1
cnJlZCgpKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgaWYgKGlkZW50ICE9IE5VTEwpIHsKKyAg
ICAgICAgaWYgKFB5RGljdF9EZWxJdGVtKHMtPm1hcmtlcnMsIGlkZW50KSkKKyAgICAgICAgICAg
IGdvdG8gYmFpbDsKKyAgICAgICAgUHlfQ0xFQVIoaWRlbnQpOworICAgIH0KKyAgICBpZiAocy0+
aW5kZW50ICE9IFB5X05vbmUpIHsKKyAgICAgICAgLyogVE9ETzogRE9FUyBOT1QgUlVOICovCisg
ICAgICAgIGluZGVudF9sZXZlbCAtPSAxOworICAgICAgICAvKgorICAgICAgICAgICAgeWllbGQg
J1xuJyArIChfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsKQorICAgICAgICAqLworICAg
IH0KKyAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBjbG9zZV9hcnJheSkpCisgICAgICAgIGdv
dG8gYmFpbDsKKyAgICByZXR1cm4gMDsKKworYmFpbDoKKyAgICBQeV9YREVDUkVGKG9iaik7Cisg
ICAgUHlfWERFQ1JFRihpdGVyKTsKKyAgICBQeV9YREVDUkVGKGlkZW50KTsKKyAgICByZXR1cm4g
LTE7Cit9CisKK3N0YXRpYyB2b2lkCitlbmNvZGVyX2RlYWxsb2MoUHlPYmplY3QgKnNlbGYpCit7
CisgICAgLyogRGVhbGxvY2F0ZSBFbmNvZGVyICovCisgICAgZW5jb2Rlcl9jbGVhcihzZWxmKTsK
KyAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHNlbGYpOworfQorCitzdGF0aWMgaW50CitlbmNv
ZGVyX3RyYXZlcnNlKFB5T2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykK
K3sKKyAgICBQeUVuY29kZXJPYmplY3QgKnM7CisgICAgYXNzZXJ0KFB5RW5jb2Rlcl9DaGVjayhz
ZWxmKSk7CisgICAgcyA9IChQeUVuY29kZXJPYmplY3QgKilzZWxmOworICAgIFB5X1ZJU0lUKHMt
Pm1hcmtlcnMpOworICAgIFB5X1ZJU0lUKHMtPmRlZmF1bHRmbik7CisgICAgUHlfVklTSVQocy0+
ZW5jb2Rlcik7CisgICAgUHlfVklTSVQocy0+aW5kZW50KTsKKyAgICBQeV9WSVNJVChzLT5rZXlf
c2VwYXJhdG9yKTsKKyAgICBQeV9WSVNJVChzLT5pdGVtX3NlcGFyYXRvcik7CisgICAgUHlfVklT
SVQocy0+c29ydF9rZXlzKTsKKyAgICBQeV9WSVNJVChzLT5za2lwa2V5cyk7CisgICAgUHlfVklT
SVQocy0+a2V5X21lbW8pOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlbmNvZGVy
X2NsZWFyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIC8qIERlYWxsb2NhdGUgRW5jb2RlciAqLwor
ICAgIFB5RW5jb2Rlck9iamVjdCAqczsKKyAgICBhc3NlcnQoUHlFbmNvZGVyX0NoZWNrKHNlbGYp
KTsKKyAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAqKXNlbGY7CisgICAgUHlfQ0xFQVIocy0+bWFy
a2Vycyk7CisgICAgUHlfQ0xFQVIocy0+ZGVmYXVsdGZuKTsKKyAgICBQeV9DTEVBUihzLT5lbmNv
ZGVyKTsKKyAgICBQeV9DTEVBUihzLT5pbmRlbnQpOworICAgIFB5X0NMRUFSKHMtPmtleV9zZXBh
cmF0b3IpOworICAgIFB5X0NMRUFSKHMtPml0ZW1fc2VwYXJhdG9yKTsKKyAgICBQeV9DTEVBUihz
LT5zb3J0X2tleXMpOworICAgIFB5X0NMRUFSKHMtPnNraXBrZXlzKTsKKyAgICBQeV9DTEVBUihz
LT5rZXlfbWVtbyk7CisgICAgcmV0dXJuIDA7Cit9CisKK1B5RG9jX1NUUlZBUihlbmNvZGVyX2Rv
YywgIl9pdGVyZW5jb2RlKG9iaiwgX2N1cnJlbnRfaW5kZW50X2xldmVsKSAtPiBpdGVyYWJsZSIp
OworCitzdGF0aWMKK1B5VHlwZU9iamVjdCBQeUVuY29kZXJUeXBlID0geworICAgIFB5T2JqZWN0
X0hFQURfSU5JVChOVUxMKQorICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbnRlcm5h
bCAqLworICAgICJzaW1wbGVqc29uLl9zcGVlZHVwcy5FbmNvZGVyIiwgICAgICAgLyogdHBfbmFt
ZSAqLworICAgIHNpemVvZihQeUVuY29kZXJPYmplY3QpLCAvKiB0cF9iYXNpY3NpemUgKi8KKyAg
ICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICBlbmNvZGVyX2Rl
YWxsb2MsIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBf
cHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAg
IDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAg
ICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyog
dHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8K
KyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAg
ICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAg
ICAgICAgICAvKiB0cF9oYXNoICovCisgICAgZW5jb2Rlcl9jYWxsLCAgICAgICAgIC8qIHRwX2Nh
bGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAg
ICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAg
ICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Fz
X2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywg
ICAvKiB0cF9mbGFncyAqLworICAgIGVuY29kZXJfZG9jLCAgICAgICAgICAvKiB0cF9kb2MgKi8K
KyAgICBlbmNvZGVyX3RyYXZlcnNlLCAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICBlbmNvZGVy
X2NsZWFyLCAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAg
LyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vh
a2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwor
ICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIDAsICAgICAg
ICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZW5jb2Rlcl9tZW1iZXJzLCAgICAg
IC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0
ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAg
ICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAv
KiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jf
c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAg
ICBlbmNvZGVyX2luaXQsICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAg
ICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIGVuY29kZXJfbmV3LCAgICAgICAgICAvKiB0cF9u
ZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworfTsKKworc3Rh
dGljIFB5TWV0aG9kRGVmIHNwZWVkdXBzX21ldGhvZHNbXSA9IHsKKyAgICB7ImVuY29kZV9iYXNl
c3RyaW5nX2FzY2lpIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5X2VuY29kZV9iYXNlc3RyaW5n
X2FzY2lpLAorICAgICAgICBNRVRIX08sCisgICAgICAgIHB5ZG9jX2VuY29kZV9iYXNlc3RyaW5n
X2FzY2lpfSwKKyAgICB7InNjYW5zdHJpbmciLAorICAgICAgICAoUHlDRnVuY3Rpb24pcHlfc2Nh
bnN0cmluZywKKyAgICAgICAgTUVUSF9WQVJBUkdTLAorICAgICAgICBweWRvY19zY2Fuc3RyaW5n
fSwKKyAgICB7TlVMTCwgTlVMTCwgMCwgTlVMTH0KK307CisKK1B5RG9jX1NUUlZBUihtb2R1bGVf
ZG9jLAorInNpbXBsZWpzb24gc3BlZWR1cHNcbiIpOworCit2b2lkCitpbml0X3NwZWVkdXBzKHZv
aWQpCit7CisgICAgUHlPYmplY3QgKm0sICpkZWNpbWFsOworICAgIFB5U2Nhbm5lclR5cGUudHBf
bmV3ID0gUHlUeXBlX0dlbmVyaWNOZXc7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlTY2FubmVy
VHlwZSkgPCAwKQorICAgICAgICByZXR1cm47CisgICAgUHlFbmNvZGVyVHlwZS50cF9uZXcgPSBQ
eVR5cGVfR2VuZXJpY05ldzsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUVuY29kZXJUeXBlKSA8
IDApCisgICAgICAgIHJldHVybjsKKworICAgIGRlY2ltYWwgPSBQeUltcG9ydF9JbXBvcnRNb2R1
bGUoImRlY2ltYWwiKTsKKyAgICBpZiAoZGVjaW1hbCA9PSBOVUxMKQorICAgICAgICByZXR1cm47
CisgICAgRGVjaW1hbFR5cGVQdHIgPSAoUHlUeXBlT2JqZWN0KilQeU9iamVjdF9HZXRBdHRyU3Ry
aW5nKGRlY2ltYWwsICJEZWNpbWFsIik7CisgICAgUHlfREVDUkVGKGRlY2ltYWwpOworICAgIGlm
IChEZWNpbWFsVHlwZVB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBtID0gUHlf
SW5pdE1vZHVsZTMoIl9zcGVlZHVwcyIsIHNwZWVkdXBzX21ldGhvZHMsIG1vZHVsZV9kb2MpOwor
ICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSZQeVNjYW5uZXJUeXBlKTsKKyAgICBQeU1vZHVsZV9B
ZGRPYmplY3QobSwgIm1ha2Vfc2Nhbm5lciIsIChQeU9iamVjdCopJlB5U2Nhbm5lclR5cGUpOwor
ICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSZQeUVuY29kZXJUeXBlKTsKKyAgICBQeU1vZHVsZV9B
ZGRPYmplY3QobSwgIm1ha2VfZW5jb2RlciIsIChQeU9iamVjdCopJlB5RW5jb2RlclR5cGUpOwog
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpz
b24vZGVjb2Rlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVq
c29uL2RlY29kZXIucHkKaW5kZXggNjNmNzBjYi4uYzJkNGEwZSAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vZGVjb2Rlci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9kZWNvZGVyLnB5CkBA
IC0xLDE2ICsxLDI2IEBACi0iIiIKLUltcGxlbWVudGF0aW9uIG9mIEpTT05EZWNvZGVyCisiIiJJ
bXBsZW1lbnRhdGlvbiBvZiBKU09ORGVjb2RlcgogIiIiCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMK
K2ltcG9ydCBzdHJ1Y3QKKworZnJvbSBzY2FubmVyIGltcG9ydCBtYWtlX3NjYW5uZXIKK2RlZiBf
aW1wb3J0X2Nfc2NhbnN0cmluZygpOgorICAgIHRyeToKKyAgICAgICAgZnJvbSBzaW1wbGVqc29u
Ll9zcGVlZHVwcyBpbXBvcnQgc2NhbnN0cmluZworICAgICAgICByZXR1cm4gc2NhbnN0cmluZwor
ICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKK2Nfc2NhbnN0cmlu
ZyA9IF9pbXBvcnRfY19zY2Fuc3RyaW5nKCkKIAotZnJvbSBzY2FubmVyIGltcG9ydCBTY2FubmVy
LCBwYXR0ZXJuCitfX2FsbF9fID0gWydKU09ORGVjb2RlciddCiAKIEZMQUdTID0gcmUuVkVSQk9T
RSB8IHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTAogCiBkZWYgX2Zsb2F0Y29uc3RhbnRzKCk6Ci0g
ICAgaW1wb3J0IHN0cnVjdAotICAgIGltcG9ydCBzeXMKICAgICBfQllURVMgPSAnN0ZGODAwMDAw
MDAwMDAwMDdGRjAwMDAwMDAwMDAwMDAnLmRlY29kZSgnaGV4JykKKyAgICAjIFRoZSBzdHJ1Y3Qg
bW9kdWxlIGluIFB5dGhvbiAyLjQgd291bGQgZ2V0IGZyZXhwKCkgb3V0IG9mIHJhbmdlIGhlcmUK
KyAgICAjIHdoZW4gYW4gZW5kaWFuIGlzIHNwZWNpZmllZCBpbiB0aGUgZm9ybWF0IHN0cmluZy4g
Rml4ZWQgaW4gUHl0aG9uIDIuNSsKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgogICAg
ICAgICBfQllURVMgPSBfQllURVNbOjhdWzo6LTFdICsgX0JZVEVTWzg6XVs6Oi0xXQogICAgIG5h
biwgaW5mID0gc3RydWN0LnVucGFjaygnZGQnLCBfQllURVMpCkBAIC0xOCw2ICsyOCwzMyBAQCBk
ZWYgX2Zsb2F0Y29uc3RhbnRzKCk6CiAKIE5hTiwgUG9zSW5mLCBOZWdJbmYgPSBfZmxvYXRjb25z
dGFudHMoKQogCisKK2NsYXNzIEpTT05EZWNvZGVFcnJvcihWYWx1ZUVycm9yKToKKyAgICAiIiJT
dWJjbGFzcyBvZiBWYWx1ZUVycm9yIHdpdGggdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIHByb3Bl
cnRpZXM6CisKKyAgICBtc2c6IFRoZSB1bmZvcm1hdHRlZCBlcnJvciBtZXNzYWdlCisgICAgZG9j
OiBUaGUgSlNPTiBkb2N1bWVudCBiZWluZyBwYXJzZWQKKyAgICBwb3M6IFRoZSBzdGFydCBpbmRl
eCBvZiBkb2Mgd2hlcmUgcGFyc2luZyBmYWlsZWQKKyAgICBlbmQ6IFRoZSBlbmQgaW5kZXggb2Yg
ZG9jIHdoZXJlIHBhcnNpbmcgZmFpbGVkIChtYXkgYmUgTm9uZSkKKyAgICBsaW5lbm86IFRoZSBs
aW5lIGNvcnJlc3BvbmRpbmcgdG8gcG9zCisgICAgY29sbm86IFRoZSBjb2x1bW4gY29ycmVzcG9u
ZGluZyB0byBwb3MKKyAgICBlbmRsaW5lbm86IFRoZSBsaW5lIGNvcnJlc3BvbmRpbmcgdG8gZW5k
IChtYXkgYmUgTm9uZSkKKyAgICBlbmRjb2xubzogVGhlIGNvbHVtbiBjb3JyZXNwb25kaW5nIHRv
IGVuZCAobWF5IGJlIE5vbmUpCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNn
LCBkb2MsIHBvcywgZW5kPU5vbmUpOgorICAgICAgICBWYWx1ZUVycm9yLl9faW5pdF9fKHNlbGYs
IGVycm1zZyhtc2csIGRvYywgcG9zLCBlbmQ9ZW5kKSkKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cK
KyAgICAgICAgc2VsZi5kb2MgPSBkb2MKKyAgICAgICAgc2VsZi5wb3MgPSBwb3MKKyAgICAgICAg
c2VsZi5lbmQgPSBlbmQKKyAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYuY29sbm8gPSBsaW5lY29s
KGRvYywgcG9zKQorICAgICAgICBpZiBlbmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxm
LmVuZGxpbmVubywgc2VsZi5lbmRjb2xubyA9IGxpbmVjb2woZG9jLCBlbmQpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBzZWxmLmVuZGxpbmVubywgc2VsZi5lbmRjb2xubyA9IE5vbmUsIE5v
bmUKKworCiBkZWYgbGluZWNvbChkb2MsIHBvcyk6CiAgICAgbGluZW5vID0gZG9jLmNvdW50KCdc
bicsIDAsIHBvcykgKyAxCiAgICAgaWYgbGluZW5vID09IDE6CkBAIC0yNiwzOCArNjMsMjkgQEAg
ZGVmIGxpbmVjb2woZG9jLCBwb3MpOgogICAgICAgICBjb2xubyA9IHBvcyAtIGRvYy5yaW5kZXgo
J1xuJywgMCwgcG9zKQogICAgIHJldHVybiBsaW5lbm8sIGNvbG5vCiAKKwogZGVmIGVycm1zZyht
c2csIGRvYywgcG9zLCBlbmQ9Tm9uZSk6CisgICAgIyBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgZnJvbSBfc3BlZWR1cHMKICAgICBsaW5lbm8sIGNvbG5vID0gbGluZWNvbChkb2Ms
IHBvcykKICAgICBpZiBlbmQgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuICclczogbGluZSAlZCBj
b2x1bW4gJWQgKGNoYXIgJWQpJyAlIChtc2csIGxpbmVubywgY29sbm8sIHBvcykKKyAgICAgICAg
I2ZtdCA9ICd7MH06IGxpbmUgezF9IGNvbHVtbiB7Mn0gKGNoYXIgezN9KScKKyAgICAgICAgI3Jl
dHVybiBmbXQuZm9ybWF0KG1zZywgbGluZW5vLCBjb2xubywgcG9zKQorICAgICAgICBmbXQgPSAn
JXM6IGxpbmUgJWQgY29sdW1uICVkIChjaGFyICVkKScKKyAgICAgICAgcmV0dXJuIGZtdCAlICht
c2csIGxpbmVubywgY29sbm8sIHBvcykKICAgICBlbmRsaW5lbm8sIGVuZGNvbG5vID0gbGluZWNv
bChkb2MsIGVuZCkKLSAgICByZXR1cm4gJyVzOiBsaW5lICVkIGNvbHVtbiAlZCAtIGxpbmUgJWQg
Y29sdW1uICVkIChjaGFyICVkIC0gJWQpJyAlICgKLSAgICAgICAgbXNnLCBsaW5lbm8sIGNvbG5v
LCBlbmRsaW5lbm8sIGVuZGNvbG5vLCBwb3MsIGVuZCkKKyAgICAjZm10ID0gJ3swfTogbGluZSB7
MX0gY29sdW1uIHsyfSAtIGxpbmUgezN9IGNvbHVtbiB7NH0gKGNoYXIgezV9IC0gezZ9KScKKyAg
ICAjcmV0dXJuIGZtdC5mb3JtYXQobXNnLCBsaW5lbm8sIGNvbG5vLCBlbmRsaW5lbm8sIGVuZGNv
bG5vLCBwb3MsIGVuZCkKKyAgICBmbXQgPSAnJXM6IGxpbmUgJWQgY29sdW1uICVkIC0gbGluZSAl
ZCBjb2x1bW4gJWQgKGNoYXIgJWQgLSAlZCknCisgICAgcmV0dXJuIGZtdCAlIChtc2csIGxpbmVu
bywgY29sbm8sIGVuZGxpbmVubywgZW5kY29sbm8sIHBvcywgZW5kKQorCiAKIF9DT05TVEFOVFMg
PSB7CiAgICAgJy1JbmZpbml0eSc6IE5lZ0luZiwKICAgICAnSW5maW5pdHknOiBQb3NJbmYsCiAg
ICAgJ05hTic6IE5hTiwKLSAgICAndHJ1ZSc6IFRydWUsCi0gICAgJ2ZhbHNlJzogRmFsc2UsCi0g
ICAgJ251bGwnOiBOb25lLAogfQogCi1kZWYgSlNPTkNvbnN0YW50KG1hdGNoLCBjb250ZXh0LCBj
PV9DT05TVEFOVFMpOgotICAgIHJldHVybiBjW21hdGNoLmdyb3VwKDApXSwgTm9uZQotcGF0dGVy
bignKC0/SW5maW5pdHl8TmFOfHRydWV8ZmFsc2V8bnVsbCknKShKU09OQ29uc3RhbnQpCi0KLWRl
ZiBKU09OTnVtYmVyKG1hdGNoLCBjb250ZXh0KToKLSAgICBtYXRjaCA9IEpTT05OdW1iZXIucmVn
ZXgubWF0Y2gobWF0Y2guc3RyaW5nLCAqbWF0Y2guc3BhbigpKQotICAgIGludGVnZXIsIGZyYWMs
IGV4cCA9IG1hdGNoLmdyb3VwcygpCi0gICAgaWYgZnJhYyBvciBleHA6Ci0gICAgICAgIHJlcyA9
IGZsb2F0KGludGVnZXIgKyAoZnJhYyBvciAnJykgKyAoZXhwIG9yICcnKSkKLSAgICBlbHNlOgot
ICAgICAgICByZXMgPSBpbnQoaW50ZWdlcikKLSAgICByZXR1cm4gcmVzLCBOb25lCi1wYXR0ZXJu
KHInKC0/KD86MHxbMS05XVxkKikpKFwuXGQrKT8oW2VFXVstK10/XGQrKT8nKShKU09OTnVtYmVy
KQotCi1TVFJJTkdDSFVOSyA9IHJlLmNvbXBpbGUocicoLio/KShbIlxcXSknLCBGTEFHUykKK1NU
UklOR0NIVU5LID0gcmUuY29tcGlsZShyJyguKj8pKFsiXFxceDAwLVx4MWZdKScsIEZMQUdTKQog
QkFDS1NMQVNIID0gewogICAgICciJzogdSciJywgJ1xcJzogdSdcXCcsICcvJzogdScvJywKICAg
ICAnYic6IHUnXGInLCAnZic6IHUnXGYnLCAnbic6IHUnXG4nLCAncic6IHUnXHInLCAndCc6IHUn
XHQnLApAQCAtNjUsNyArOTMsMTYgQEAgQkFDS1NMQVNIID0gewogCiBERUZBVUxUX0VOQ09ESU5H
ID0gInV0Zi04IgogCi1kZWYgc2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5nPU5vbmUsIF9iPUJB
Q0tTTEFTSCwgX209U1RSSU5HQ0hVTksubWF0Y2gpOgorZGVmIHB5X3NjYW5zdHJpbmcocywgZW5k
LCBlbmNvZGluZz1Ob25lLCBzdHJpY3Q9VHJ1ZSwKKyAgICAgICAgX2I9QkFDS1NMQVNILCBfbT1T
VFJJTkdDSFVOSy5tYXRjaCk6CisgICAgIiIiU2NhbiB0aGUgc3RyaW5nIHMgZm9yIGEgSlNPTiBz
dHJpbmcuIEVuZCBpcyB0aGUgaW5kZXggb2YgdGhlCisgICAgY2hhcmFjdGVyIGluIHMgYWZ0ZXIg
dGhlIHF1b3RlIHRoYXQgc3RhcnRlZCB0aGUgSlNPTiBzdHJpbmcuCisgICAgVW5lc2NhcGVzIGFs
bCB2YWxpZCBKU09OIHN0cmluZyBlc2NhcGUgc2VxdWVuY2VzIGFuZCByYWlzZXMgVmFsdWVFcnJv
cgorICAgIG9uIGF0dGVtcHQgdG8gZGVjb2RlIGFuIGludmFsaWQgc3RyaW5nLiBJZiBzdHJpY3Qg
aXMgRmFsc2UgdGhlbiBsaXRlcmFsCisgICAgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2Vk
IGluIHRoZSBzdHJpbmcuCisKKyAgICBSZXR1cm5zIGEgdHVwbGUgb2YgdGhlIGRlY29kZWQgc3Ry
aW5nIGFuZCB0aGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciBpbiBzCisgICAgYWZ0ZXIgdGhlIGVu
ZCBxdW90ZS4iIiIKICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgogICAgICAgICBlbmNvZGluZyA9
IERFRkFVTFRfRU5DT0RJTkcKICAgICBjaHVua3MgPSBbXQpAQCAtNzQsMTMxICsxMTEsMjA1IEBA
IGRlZiBzY2Fuc3RyaW5nKHMsIGVuZCwgZW5jb2Rpbmc9Tm9uZSwgX2I9QkFDS1NMQVNILCBfbT1T
VFJJTkdDSFVOSy5tYXRjaCk6CiAgICAgd2hpbGUgMToKICAgICAgICAgY2h1bmsgPSBfbShzLCBl
bmQpCiAgICAgICAgIGlmIGNodW5rIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKAotICAgICAgICAgICAgICAgIGVycm1zZygiVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGlu
ZyBhdCIsIHMsIGJlZ2luKSkKKyAgICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcigKKyAg
ICAgICAgICAgICAgICAiVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCIsIHMsIGJlZ2lu
KQogICAgICAgICBlbmQgPSBjaHVuay5lbmQoKQogICAgICAgICBjb250ZW50LCB0ZXJtaW5hdG9y
ID0gY2h1bmsuZ3JvdXBzKCkKKyAgICAgICAgIyBDb250ZW50IGlzIGNvbnRhaW5zIHplcm8gb3Ig
bW9yZSB1bmVzY2FwZWQgc3RyaW5nIGNoYXJhY3RlcnMKICAgICAgICAgaWYgY29udGVudDoKICAg
ICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvbnRlbnQsIHVuaWNvZGUpOgogICAgICAgICAg
ICAgICAgIGNvbnRlbnQgPSB1bmljb2RlKGNvbnRlbnQsIGVuY29kaW5nKQogICAgICAgICAgICAg
X2FwcGVuZChjb250ZW50KQorICAgICAgICAjIFRlcm1pbmF0b3IgaXMgdGhlIGVuZCBvZiBzdHJp
bmcsIGEgbGl0ZXJhbCBjb250cm9sIGNoYXJhY3RlciwKKyAgICAgICAgIyBvciBhIGJhY2tzbGFz
aCBkZW5vdGluZyB0aGF0IGFuIGVzY2FwZSBzZXF1ZW5jZSBmb2xsb3dzCiAgICAgICAgIGlmIHRl
cm1pbmF0b3IgPT0gJyInOgogICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxpZiB0ZXJtaW5h
dG9yICE9ICdcXCc6CisgICAgICAgICAgICBpZiBzdHJpY3Q6CisgICAgICAgICAgICAgICAgbXNn
ID0gIkludmFsaWQgY29udHJvbCBjaGFyYWN0ZXIgJXIgYXQiICUgKHRlcm1pbmF0b3IsKQorICAg
ICAgICAgICAgICAgICNtc2cgPSAiSW52YWxpZCBjb250cm9sIGNoYXJhY3RlciB7MCFyfSBhdCIu
Zm9ybWF0KHRlcm1pbmF0b3IpCisgICAgICAgICAgICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9y
KG1zZywgcywgZW5kKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfYXBwZW5k
KHRlcm1pbmF0b3IpCisgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgdHJ5OgogICAg
ICAgICAgICAgZXNjID0gc1tlbmRdCiAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAgICAgICBlcnJtc2coIlVudGVybWlu
YXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBzLCBiZWdpbikpCisgICAgICAgICAgICByYWlzZSBK
U09ORGVjb2RlRXJyb3IoCisgICAgICAgICAgICAgICAgIlVudGVybWluYXRlZCBzdHJpbmcgc3Rh
cnRpbmcgYXQiLCBzLCBiZWdpbikKKyAgICAgICAgIyBJZiBub3QgYSB1bmljb2RlIGVzY2FwZSBz
ZXF1ZW5jZSwgbXVzdCBiZSBpbiB0aGUgbG9va3VwIHRhYmxlCiAgICAgICAgIGlmIGVzYyAhPSAn
dSc6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbSA9IF9iW2VzY10KKyAgICAg
ICAgICAgICAgICBjaGFyID0gX2JbZXNjXQogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgot
ICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgIGVy
cm1zZygiSW52YWxpZCBcXGVzY2FwZTogJXIiICUgKGVzYywpLCBzLCBlbmQpKQorICAgICAgICAg
ICAgICAgIG1zZyA9ICJJbnZhbGlkIFxcZXNjYXBlOiAiICsgcmVwcihlc2MpCisgICAgICAgICAg
ICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKG1zZywgcywgZW5kKQogICAgICAgICAgICAgZW5k
ICs9IDEKICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVW5pY29kZSBlc2NhcGUgc2VxdWVu
Y2UKICAgICAgICAgICAgIGVzYyA9IHNbZW5kICsgMTplbmQgKyA1XQotICAgICAgICAgICAgdHJ5
OgotICAgICAgICAgICAgICAgIG0gPSB1bmljaHIoaW50KGVzYywgMTYpKQotICAgICAgICAgICAg
ICAgIGlmIGxlbihlc2MpICE9IDQgb3Igbm90IGVzYy5pc2FsbnVtKCk6Ci0gICAgICAgICAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgot
ICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJJbnZhbGlkIFxcdVhYWFgg
ZXNjYXBlIiwgcywgZW5kKSkKLSAgICAgICAgICAgIGVuZCArPSA1Ci0gICAgICAgIF9hcHBlbmQo
bSkKKyAgICAgICAgICAgIG5leHRfZW5kID0gZW5kICsgNQorICAgICAgICAgICAgaWYgbGVuKGVz
YykgIT0gNDoKKyAgICAgICAgICAgICAgICBtc2cgPSAiSW52YWxpZCBcXHVYWFhYIGVzY2FwZSIK
KyAgICAgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IobXNnLCBzLCBlbmQpCisgICAg
ICAgICAgICB1bmkgPSBpbnQoZXNjLCAxNikKKyAgICAgICAgICAgICMgQ2hlY2sgZm9yIHN1cnJv
Z2F0ZSBwYWlyIG9uIFVDUy00IHN5c3RlbXMKKyAgICAgICAgICAgIGlmIDB4ZDgwMCA8PSB1bmkg
PD0gMHhkYmZmIGFuZCBzeXMubWF4dW5pY29kZSA+IDY1NTM1OgorICAgICAgICAgICAgICAgIG1z
ZyA9ICJJbnZhbGlkIFxcdVhYWFhcXHVYWFhYIHN1cnJvZ2F0ZSBwYWlyIgorICAgICAgICAgICAg
ICAgIGlmIG5vdCBzW2VuZCArIDU6ZW5kICsgN10gPT0gJ1xcdSc6CisgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcihtc2csIHMsIGVuZCkKKyAgICAgICAgICAgICAgICBl
c2MyID0gc1tlbmQgKyA3OmVuZCArIDExXQorICAgICAgICAgICAgICAgIGlmIGxlbihlc2MyKSAh
PSA0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IobXNnLCBzLCBl
bmQpCisgICAgICAgICAgICAgICAgdW5pMiA9IGludChlc2MyLCAxNikKKyAgICAgICAgICAgICAg
ICB1bmkgPSAweDEwMDAwICsgKCgodW5pIC0gMHhkODAwKSA8PCAxMCkgfCAodW5pMiAtIDB4ZGMw
MCkpCisgICAgICAgICAgICAgICAgbmV4dF9lbmQgKz0gNgorICAgICAgICAgICAgY2hhciA9IHVu
aWNocih1bmkpCisgICAgICAgICAgICBlbmQgPSBuZXh0X2VuZAorICAgICAgICAjIEFwcGVuZCB0
aGUgdW5lc2NhcGVkIGNoYXJhY3RlcgorICAgICAgICBfYXBwZW5kKGNoYXIpCiAgICAgcmV0dXJu
IHUnJy5qb2luKGNodW5rcyksIGVuZAogCi1kZWYgSlNPTlN0cmluZyhtYXRjaCwgY29udGV4dCk6
Ci0gICAgZW5jb2RpbmcgPSBnZXRhdHRyKGNvbnRleHQsICdlbmNvZGluZycsIE5vbmUpCi0gICAg
cmV0dXJuIHNjYW5zdHJpbmcobWF0Y2guc3RyaW5nLCBtYXRjaC5lbmQoKSwgZW5jb2RpbmcpCi1w
YXR0ZXJuKHInIicpKEpTT05TdHJpbmcpCiAKLVdISVRFU1BBQ0UgPSByZS5jb21waWxlKHInXHMq
JywgRkxBR1MpCisjIFVzZSBzcGVlZHVwIGlmIGF2YWlsYWJsZQorc2NhbnN0cmluZyA9IGNfc2Nh
bnN0cmluZyBvciBweV9zY2Fuc3RyaW5nCiAKLWRlZiBKU09OT2JqZWN0KG1hdGNoLCBjb250ZXh0
LCBfdz1XSElURVNQQUNFLm1hdGNoKToKLSAgICBwYWlycyA9IHt9Ci0gICAgcyA9IG1hdGNoLnN0
cmluZwotICAgIGVuZCA9IF93KHMsIG1hdGNoLmVuZCgpKS5lbmQoKQorV0hJVEVTUEFDRSA9IHJl
LmNvbXBpbGUocidbIFx0XG5ccl0qJywgRkxBR1MpCitXSElURVNQQUNFX1NUUiA9ICcgXHRcblxy
JworCitkZWYgSlNPTk9iamVjdCgocywgZW5kKSwgZW5jb2RpbmcsIHN0cmljdCwgc2Nhbl9vbmNl
LCBvYmplY3RfaG9vaywKKyAgICAgICAgb2JqZWN0X3BhaXJzX2hvb2ssIG1lbW89Tm9uZSwKKyAg
ICAgICAgX3c9V0hJVEVTUEFDRS5tYXRjaCwgX3dzPVdISVRFU1BBQ0VfU1RSKToKKyAgICAjIEJh
Y2t3YXJkcyBjb21wYXRpYmlsaXR5CisgICAgaWYgbWVtbyBpcyBOb25lOgorICAgICAgICBtZW1v
ID0ge30KKyAgICBtZW1vX2dldCA9IG1lbW8uc2V0ZGVmYXVsdAorICAgIHBhaXJzID0gW10KKyAg
ICAjIFVzZSBhIHNsaWNlIHRvIHByZXZlbnQgSW5kZXhFcnJvciBmcm9tIGJlaW5nIHJhaXNlZCwg
dGhlIGZvbGxvd2luZworICAgICMgY2hlY2sgd2lsbCByYWlzZSBhIG1vcmUgc3BlY2lmaWMgVmFs
dWVFcnJvciBpZiB0aGUgc3RyaW5nIGlzIGVtcHR5CiAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQg
KyAxXQotICAgICMgdHJpdmlhbCBlbXB0eSBvYmplY3QKLSAgICBpZiBuZXh0Y2hhciA9PSAnfSc6
Ci0gICAgICAgIHJldHVybiBwYWlycywgZW5kICsgMQorICAgICMgTm9ybWFsbHkgd2UgZXhwZWN0
IG5leHRjaGFyID09ICciJwogICAgIGlmIG5leHRjaGFyICE9ICciJzoKLSAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwgcywgZW5kKSkKKyAg
ICAgICAgaWYgbmV4dGNoYXIgaW4gX3dzOgorICAgICAgICAgICAgZW5kID0gX3cocywgZW5kKS5l
bmQoKQorICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgICAgICAjIFRy
aXZpYWwgZW1wdHkgb2JqZWN0CisgICAgICAgIGlmIG5leHRjaGFyID09ICd9JzoKKyAgICAgICAg
ICAgIGlmIG9iamVjdF9wYWlyc19ob29rIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG9iamVjdF9wYWlyc19ob29rKHBhaXJzKQorICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQsIGVuZCArIDEKKyAgICAgICAgICAgIHBhaXJzID0ge30KKyAgICAgICAgICAgIGlmIG9i
amVjdF9ob29rIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBhaXJzID0gb2JqZWN0X2hv
b2socGFpcnMpCisgICAgICAgICAgICByZXR1cm4gcGFpcnMsIGVuZCArIDEKKyAgICAgICAgZWxp
ZiBuZXh0Y2hhciAhPSAnIic6CisgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoIkV4
cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwgcywgZW5kKQogICAgIGVuZCArPSAxCi0gICAgZW5jb2Rp
bmcgPSBnZXRhdHRyKGNvbnRleHQsICdlbmNvZGluZycsIE5vbmUpCi0gICAgaXRlcnNjYW4gPSBK
U09OU2Nhbm5lci5pdGVyc2NhbgogICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIGtleSwgZW5kID0g
c2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5nKQotICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVu
ZCgpCisgICAgICAgIGtleSwgZW5kID0gc2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5nLCBzdHJp
Y3QpCisgICAgICAgIGtleSA9IG1lbW9fZ2V0KGtleSwga2V5KQorCisgICAgICAgICMgVG8gc2tp
cCBzb21lIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQgd2Ugb3B0aW1pemUgdGhlIGZhc3QgcGF0aHMg
d2hlcmUKKyAgICAgICAgIyB0aGUgSlNPTiBrZXkgc2VwYXJhdG9yIGlzICI6ICIgb3IganVzdCAi
OiIuCiAgICAgICAgIGlmIHNbZW5kOmVuZCArIDFdICE9ICc6JzoKLSAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgOiBkZWxpbWl0ZXIiLCBzLCBlbmQpKQotICAg
ICAgICBlbmQgPSBfdyhzLCBlbmQgKyAxKS5lbmQoKQorICAgICAgICAgICAgZW5kID0gX3cocywg
ZW5kKS5lbmQoKQorICAgICAgICAgICAgaWYgc1tlbmQ6ZW5kICsgMV0gIT0gJzonOgorICAgICAg
ICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcigiRXhwZWN0aW5nIDogZGVsaW1pdGVyIiwg
cywgZW5kKQorCisgICAgICAgIGVuZCArPSAxCisKICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
dmFsdWUsIGVuZCA9IGl0ZXJzY2FuKHMsIGlkeD1lbmQsIGNvbnRleHQ9Y29udGV4dCkubmV4dCgp
CisgICAgICAgICAgICBpZiBzW2VuZF0gaW4gX3dzOgorICAgICAgICAgICAgICAgIGVuZCArPSAx
CisgICAgICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKKyAgICAgICAgICAgICAgICAgICAg
ZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Cisg
ICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUsIGVuZCA9
IHNjYW5fb25jZShzLCBlbmQpCiAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQp
KQotICAgICAgICBwYWlyc1trZXldID0gdmFsdWUKLSAgICAgICAgZW5kID0gX3cocywgZW5kKS5l
bmQoKQotICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgICAgICAgICByYWlz
ZSBKU09ORGVjb2RlRXJyb3IoIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpCisgICAgICAgIHBh
aXJzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV4
dGNoYXIgPSBzW2VuZF0KKyAgICAgICAgICAgIGlmIG5leHRjaGFyIGluIF93czoKKyAgICAgICAg
ICAgICAgICBlbmQgPSBfdyhzLCBlbmQgKyAxKS5lbmQoKQorICAgICAgICAgICAgICAgIG5leHRj
aGFyID0gc1tlbmRdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgbmV4
dGNoYXIgPSAnJwogICAgICAgICBlbmQgKz0gMQorCiAgICAgICAgIGlmIG5leHRjaGFyID09ICd9
JzoKICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIG5leHRjaGFyICE9ICcsJzoKLSAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgLCBkZWxpbWl0ZXIiLCBz
LCBlbmQgLSAxKSkKLSAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQotICAgICAgICBuZXh0
Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgICAgIGVsaWYgbmV4dGNoYXIgIT0gJywnOgorICAg
ICAgICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKCJFeHBlY3RpbmcgLCBkZWxpbWl0ZXIiLCBz
LCBlbmQgLSAxKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmRd
CisgICAgICAgICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6CisgICAgICAgICAgICAgICAgZW5kICs9
IDEKKyAgICAgICAgICAgICAgICBuZXh0Y2hhciA9IHNbZW5kXQorICAgICAgICAgICAgICAgIGlm
IG5leHRjaGFyIGluIF93czoKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gX3cocywgZW5kICsg
MSkuZW5kKCkKKyAgICAgICAgICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KKyAgICAgICAg
ZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBuZXh0Y2hhciA9ICcnCisKICAgICAgICAg
ZW5kICs9IDEKICAgICAgICAgaWYgbmV4dGNoYXIgIT0gJyInOgotICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwgcywgZW5kIC0gMSkp
Ci0gICAgb2JqZWN0X2hvb2sgPSBnZXRhdHRyKGNvbnRleHQsICdvYmplY3RfaG9vaycsIE5vbmUp
CisgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoIkV4cGVjdGluZyBwcm9wZXJ0eSBu
YW1lIiwgcywgZW5kIC0gMSkKKworICAgIGlmIG9iamVjdF9wYWlyc19ob29rIGlzIG5vdCBOb25l
OgorICAgICAgICByZXN1bHQgPSBvYmplY3RfcGFpcnNfaG9vayhwYWlycykKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCwgZW5kCisgICAgcGFpcnMgPSBkaWN0KHBhaXJzKQogICAgIGlmIG9iamVjdF9o
b29rIGlzIG5vdCBOb25lOgogICAgICAgICBwYWlycyA9IG9iamVjdF9ob29rKHBhaXJzKQogICAg
IHJldHVybiBwYWlycywgZW5kCi1wYXR0ZXJuKHIneycpKEpTT05PYmplY3QpCi0gICAgICAgICAg
ICAKLWRlZiBKU09OQXJyYXkobWF0Y2gsIGNvbnRleHQsIF93PVdISVRFU1BBQ0UubWF0Y2gpOgor
CitkZWYgSlNPTkFycmF5KChzLCBlbmQpLCBzY2FuX29uY2UsIF93PVdISVRFU1BBQ0UubWF0Y2gs
IF93cz1XSElURVNQQUNFX1NUUik6CiAgICAgdmFsdWVzID0gW10KLSAgICBzID0gbWF0Y2guc3Ry
aW5nCi0gICAgZW5kID0gX3cocywgbWF0Y2guZW5kKCkpLmVuZCgpCi0gICAgIyBsb29rLWFoZWFk
IGZvciB0cml2aWFsIGVtcHR5IGFycmF5CiAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQor
ICAgIGlmIG5leHRjaGFyIGluIF93czoKKyAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5k
KCkKKyAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgICMgTG9vay1haGVhZCBm
b3IgdHJpdmlhbCBlbXB0eSBhcnJheQogICAgIGlmIG5leHRjaGFyID09ICddJzoKICAgICAgICAg
cmV0dXJuIHZhbHVlcywgZW5kICsgMQotICAgIGl0ZXJzY2FuID0gSlNPTlNjYW5uZXIuaXRlcnNj
YW4KKyAgICBfYXBwZW5kID0gdmFsdWVzLmFwcGVuZAogICAgIHdoaWxlIFRydWU6CiAgICAgICAg
IHRyeToKLSAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBpdGVyc2NhbihzLCBpZHg9ZW5kLCBjb250
ZXh0PWNvbnRleHQpLm5leHQoKQorICAgICAgICAgICAgdmFsdWUsIGVuZCA9IHNjYW5fb25jZShz
LCBlbmQpCiAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpKQotICAgICAgICB2
YWx1ZXMuYXBwZW5kKHZhbHVlKQotICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAg
ICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQp
CisgICAgICAgIF9hcHBlbmQodmFsdWUpCiAgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsg
MV0KKyAgICAgICAgaWYgbmV4dGNoYXIgaW4gX3dzOgorICAgICAgICAgICAgZW5kID0gX3cocywg
ZW5kICsgMSkuZW5kKCkKKyAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KICAg
ICAgICAgZW5kICs9IDEKICAgICAgICAgaWYgbmV4dGNoYXIgPT0gJ10nOgogICAgICAgICAgICAg
YnJlYWsKLSAgICAgICAgaWYgbmV4dGNoYXIgIT0gJywnOgotICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHMsIGVuZCkpCi0gICAgICAg
IGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAgICAgICAgZWxpZiBuZXh0Y2hhciAhPSAnLCc6Cisg
ICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoIkV4cGVjdGluZyAsIGRlbGltaXRlciIs
IHMsIGVuZCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzW2VuZF0gaW4gX3dzOgor
ICAgICAgICAgICAgICAgIGVuZCArPSAxCisgICAgICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93
czoKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKKyAgICAg
ICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKICAgICByZXR1cm4gdmFs
dWVzLCBlbmQKLXBhdHRlcm4ocidcWycpKEpTT05BcnJheSkKLSAKLUFOWVRISU5HID0gWwotICAg
IEpTT05PYmplY3QsCi0gICAgSlNPTkFycmF5LAotICAgIEpTT05TdHJpbmcsCi0gICAgSlNPTkNv
bnN0YW50LAotICAgIEpTT05OdW1iZXIsCi1dCi0KLUpTT05TY2FubmVyID0gU2Nhbm5lcihBTllU
SElORykKIAogY2xhc3MgSlNPTkRlY29kZXIob2JqZWN0KToKLSAgICAiIiIKLSAgICBTaW1wbGUg
SlNPTiA8aHR0cDovL2pzb24ub3JnPiBkZWNvZGVyCisgICAgIiIiU2ltcGxlIEpTT04gPGh0dHA6
Ly9qc29uLm9yZz4gZGVjb2RlcgorCisgICAgUGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0cmFuc2xh
dGlvbnMgaW4gZGVjb2RpbmcgYnkgZGVmYXVsdDoKIAotICAgIFBlcmZvcm1zIHRoZSBmb2xsb3dp
bmcgdHJhbnNsYXRpb25zIGluIGRlY29kaW5nOgotICAgIAogICAgICstLS0tLS0tLS0tLS0tLS0r
LS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgICB8IEpTT04gICAgICAgICAgfCBQeXRob24gICAgICAg
ICAgICB8CiAgICAgKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09KwpAQCAtMjIx
LDUzICszMzIsOTAgQEAgY2xhc3MgSlNPTkRlY29kZXIob2JqZWN0KToKIAogICAgIEl0IGFsc28g
dW5kZXJzdGFuZHMgYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBhbmQgYGAtSW5maW5pdHlgYCBhcwog
ICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYGBmbG9hdGBgIHZhbHVlcywgd2hpY2ggaXMgb3V0c2lk
ZSB0aGUgSlNPTiBzcGVjLgotICAgICIiIgogCi0gICAgX3NjYW5uZXIgPSBTY2FubmVyKEFOWVRI
SU5HKQotICAgIF9fYWxsX18gPSBbJ19faW5pdF9fJywgJ2RlY29kZScsICdyYXdfZGVjb2RlJ10K
KyAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbmNvZGluZz1Ob25lLCBvYmplY3Rf
aG9vaz1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW5jb2Rpbmc9Tm9uZSwgb2JqZWN0
X2hvb2s9Tm9uZSwgcGFyc2VfZmxvYXQ9Tm9uZSwKKyAgICAgICAgICAgIHBhcnNlX2ludD1Ob25l
LCBwYXJzZV9jb25zdGFudD1Ob25lLCBzdHJpY3Q9VHJ1ZSwKKyAgICAgICAgICAgIG9iamVjdF9w
YWlyc19ob29rPU5vbmUpOgogICAgICAgICAiIiIKLSAgICAgICAgYGBlbmNvZGluZ2BgIGRldGVy
bWluZXMgdGhlIGVuY29kaW5nIHVzZWQgdG8gaW50ZXJwcmV0IGFueSBgYHN0cmBgCi0gICAgICAg
IG9iamVjdHMgZGVjb2RlZCBieSB0aGlzIGluc3RhbmNlICh1dGYtOCBieSBkZWZhdWx0KS4gIEl0
IGhhcyBubwotICAgICAgICBlZmZlY3Qgd2hlbiBkZWNvZGluZyBgYHVuaWNvZGVgYCBvYmplY3Rz
LgotICAgICAgICAKKyAgICAgICAgKmVuY29kaW5nKiBkZXRlcm1pbmVzIHRoZSBlbmNvZGluZyB1
c2VkIHRvIGludGVycHJldCBhbnkKKyAgICAgICAgOmNsYXNzOmBzdHJgIG9iamVjdHMgZGVjb2Rl
ZCBieSB0aGlzIGluc3RhbmNlIChgYCd1dGYtOCdgYCBieQorICAgICAgICBkZWZhdWx0KS4gIEl0
IGhhcyBubyBlZmZlY3Qgd2hlbiBkZWNvZGluZyA6Y2xhc3M6YHVuaWNvZGVgIG9iamVjdHMuCisK
ICAgICAgICAgTm90ZSB0aGF0IGN1cnJlbnRseSBvbmx5IGVuY29kaW5ncyB0aGF0IGFyZSBhIHN1
cGVyc2V0IG9mIEFTQ0lJIHdvcmssCi0gICAgICAgIHN0cmluZ3Mgb2Ygb3RoZXIgZW5jb2Rpbmdz
IHNob3VsZCBiZSBwYXNzZWQgaW4gYXMgYGB1bmljb2RlYGAuCisgICAgICAgIHN0cmluZ3Mgb2Yg
b3RoZXIgZW5jb2RpbmdzIHNob3VsZCBiZSBwYXNzZWQgaW4gYXMgOmNsYXNzOmB1bmljb2RlYC4K
IAotICAgICAgICBgYG9iamVjdF9ob29rYGAsIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQg
d2l0aCB0aGUgcmVzdWx0Ci0gICAgICAgIG9mIGV2ZXJ5IEpTT04gb2JqZWN0IGRlY29kZWQgYW5k
IGl0cyByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkIGluCi0gICAgICAgIHBsYWNlIG9mIHRoZSBn
aXZlbiBgYGRpY3RgYC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBjdXN0b20KKyAgICAg
ICAgKm9iamVjdF9ob29rKiwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBy
ZXN1bHQgb2YgZXZlcnkKKyAgICAgICAgSlNPTiBvYmplY3QgZGVjb2RlZCBhbmQgaXRzIHJldHVy
biB2YWx1ZSB3aWxsIGJlIHVzZWQgaW4gcGxhY2Ugb2YgdGhlCisgICAgICAgIGdpdmVuIDpjbGFz
czpgZGljdGAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgY3VzdG9tCiAgICAgICAgIGRl
c2VyaWFsaXphdGlvbnMgKGUuZy4gdG8gc3VwcG9ydCBKU09OLVJQQyBjbGFzcyBoaW50aW5nKS4K
KworICAgICAgICAqb2JqZWN0X3BhaXJzX2hvb2sqIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRo
YXQgd2lsbCBiZSBjYWxsZWQgd2l0aAorICAgICAgICB0aGUgcmVzdWx0IG9mIGFueSBvYmplY3Qg
bGl0ZXJhbCBkZWNvZGUgd2l0aCBhbiBvcmRlcmVkIGxpc3Qgb2YgcGFpcnMuCisgICAgICAgIFRo
ZSByZXR1cm4gdmFsdWUgb2YgKm9iamVjdF9wYWlyc19ob29rKiB3aWxsIGJlIHVzZWQgaW5zdGVh
ZCBvZiB0aGUKKyAgICAgICAgOmNsYXNzOmBkaWN0YC4gIFRoaXMgZmVhdHVyZSBjYW4gYmUgdXNl
ZCB0byBpbXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzCisgICAgICAgIHRoYXQgcmVseSBvbiB0aGUg
b3JkZXIgdGhhdCB0aGUga2V5IGFuZCB2YWx1ZSBwYWlycyBhcmUgZGVjb2RlZCAoZm9yCisgICAg
ICAgIGV4YW1wbGUsIDpmdW5jOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgd2lsbCByZW1lbWJl
ciB0aGUgb3JkZXIgb2YKKyAgICAgICAgaW5zZXJ0aW9uKS4gSWYgKm9iamVjdF9ob29rKiBpcyBh
bHNvIGRlZmluZWQsIHRoZSAqb2JqZWN0X3BhaXJzX2hvb2sqCisgICAgICAgIHRha2VzIHByaW9y
aXR5LgorCisgICAgICAgICpwYXJzZV9mbG9hdCosIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxs
ZWQgd2l0aCB0aGUgc3RyaW5nIG9mIGV2ZXJ5CisgICAgICAgIEpTT04gZmxvYXQgdG8gYmUgZGVj
b2RlZC4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgICAgICBgYGZsb2F0
KG51bV9zdHIpYGAuIFRoaXMgY2FuIGJlIHVzZWQgdG8gdXNlIGFub3RoZXIgZGF0YXR5cGUgb3Ig
cGFyc2VyCisgICAgICAgIGZvciBKU09OIGZsb2F0cyAoZS5nLiA6Y2xhc3M6YGRlY2ltYWwuRGVj
aW1hbGApLgorCisgICAgICAgICpwYXJzZV9pbnQqLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2Fs
bGVkIHdpdGggdGhlIHN0cmluZyBvZiBldmVyeQorICAgICAgICBKU09OIGludCB0byBiZSBkZWNv
ZGVkLiAgQnkgZGVmYXVsdCwgdGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgIGBgaW50KG51
bV9zdHIpYGAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHVzZSBhbm90aGVyIGRhdGF0eXBlIG9yIHBh
cnNlcgorICAgICAgICBmb3IgSlNPTiBpbnRlZ2VycyAoZS5nLiA6Y2xhc3M6YGZsb2F0YCkuCisK
KyAgICAgICAgKnBhcnNlX2NvbnN0YW50KiwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3
aXRoIG9uZSBvZiB0aGUKKyAgICAgICAgZm9sbG93aW5nIHN0cmluZ3M6IGBgJy1JbmZpbml0eSdg
YCwgYGAnSW5maW5pdHknYGAsIGBgJ05hTidgYC4gIFRoaXMKKyAgICAgICAgY2FuIGJlIHVzZWQg
dG8gcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGludmFsaWQgSlNPTiBudW1iZXJzIGFyZQorICAgICAg
ICBlbmNvdW50ZXJlZC4KKworICAgICAgICAqc3RyaWN0KiBjb250cm9scyB0aGUgcGFyc2VyJ3Mg
YmVoYXZpb3Igd2hlbiBpdCBlbmNvdW50ZXJzIGFuCisgICAgICAgIGludmFsaWQgY29udHJvbCBj
aGFyYWN0ZXIgaW4gYSBzdHJpbmcuIFRoZSBkZWZhdWx0IHNldHRpbmcgb2YKKyAgICAgICAgYGBU
cnVlYGAgbWVhbnMgdGhhdCB1bmVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSBwYXJzZSBl
cnJvcnMsIGlmCisgICAgICAgIGBgRmFsc2VgYCB0aGVuIGNvbnRyb2wgY2hhcmFjdGVycyB3aWxs
IGJlIGFsbG93ZWQgaW4gc3RyaW5ncy4KKwogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5lbmNv
ZGluZyA9IGVuY29kaW5nCiAgICAgICAgIHNlbGYub2JqZWN0X2hvb2sgPSBvYmplY3RfaG9vawor
ICAgICAgICBzZWxmLm9iamVjdF9wYWlyc19ob29rID0gb2JqZWN0X3BhaXJzX2hvb2sKKyAgICAg
ICAgc2VsZi5wYXJzZV9mbG9hdCA9IHBhcnNlX2Zsb2F0IG9yIGZsb2F0CisgICAgICAgIHNlbGYu
cGFyc2VfaW50ID0gcGFyc2VfaW50IG9yIGludAorICAgICAgICBzZWxmLnBhcnNlX2NvbnN0YW50
ID0gcGFyc2VfY29uc3RhbnQgb3IgX0NPTlNUQU5UUy5fX2dldGl0ZW1fXworICAgICAgICBzZWxm
LnN0cmljdCA9IHN0cmljdAorICAgICAgICBzZWxmLnBhcnNlX29iamVjdCA9IEpTT05PYmplY3QK
KyAgICAgICAgc2VsZi5wYXJzZV9hcnJheSA9IEpTT05BcnJheQorICAgICAgICBzZWxmLnBhcnNl
X3N0cmluZyA9IHNjYW5zdHJpbmcKKyAgICAgICAgc2VsZi5tZW1vID0ge30KKyAgICAgICAgc2Vs
Zi5zY2FuX29uY2UgPSBtYWtlX3NjYW5uZXIoc2VsZikKIAogICAgIGRlZiBkZWNvZGUoc2VsZiwg
cywgX3c9V0hJVEVTUEFDRS5tYXRjaCk6Ci0gICAgICAgICIiIgotICAgICAgICBSZXR1cm4gdGhl
IFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29kZWBg
CisgICAgICAgICIiIlJldHVybiB0aGUgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIGBgc2BgIChh
IGBgc3RyYGAgb3IgYGB1bmljb2RlYGAKICAgICAgICAgaW5zdGFuY2UgY29udGFpbmluZyBhIEpT
T04gZG9jdW1lbnQpCisKICAgICAgICAgIiIiCiAgICAgICAgIG9iaiwgZW5kID0gc2VsZi5yYXdf
ZGVjb2RlKHMsIGlkeD1fdyhzLCAwKS5lbmQoKSkKICAgICAgICAgZW5kID0gX3cocywgZW5kKS5l
bmQoKQogICAgICAgICBpZiBlbmQgIT0gbGVuKHMpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcihlcnJtc2coIkV4dHJhIGRhdGEiLCBzLCBlbmQsIGxlbihzKSkpCisgICAgICAgICAgICBy
YWlzZSBKU09ORGVjb2RlRXJyb3IoIkV4dHJhIGRhdGEiLCBzLCBlbmQsIGxlbihzKSkKICAgICAg
ICAgcmV0dXJuIG9iagogCi0gICAgZGVmIHJhd19kZWNvZGUoc2VsZiwgcywgKiprdyk6Ci0gICAg
ICAgICIiIgotICAgICAgICBEZWNvZGUgYSBKU09OIGRvY3VtZW50IGZyb20gYGBzYGAgKGEgYGBz
dHJgYCBvciBgYHVuaWNvZGVgYCBiZWdpbm5pbmcKLSAgICAgICAgd2l0aCBhIEpTT04gZG9jdW1l
bnQpIGFuZCByZXR1cm4gYSAyLXR1cGxlIG9mIHRoZSBQeXRob24KKyAgICBkZWYgcmF3X2RlY29k
ZShzZWxmLCBzLCBpZHg9MCk6CisgICAgICAgICIiIkRlY29kZSBhIEpTT04gZG9jdW1lbnQgZnJv
bSBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29kZWBgCisgICAgICAgIGJlZ2lubmluZyB3aXRo
IGEgSlNPTiBkb2N1bWVudCkgYW5kIHJldHVybiBhIDItdHVwbGUgb2YgdGhlIFB5dGhvbgogICAg
ICAgICByZXByZXNlbnRhdGlvbiBhbmQgdGhlIGluZGV4IGluIGBgc2BgIHdoZXJlIHRoZSBkb2N1
bWVudCBlbmRlZC4KIAogICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGRlY29kZSBhIEpTT04g
ZG9jdW1lbnQgZnJvbSBhIHN0cmluZyB0aGF0IG1heQogICAgICAgICBoYXZlIGV4dHJhbmVvdXMg
ZGF0YSBhdCB0aGUgZW5kLgorCiAgICAgICAgICIiIgotICAgICAgICBrdy5zZXRkZWZhdWx0KCdj
b250ZXh0Jywgc2VsZikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb2JqLCBlbmQgPSBzZWxm
Ll9zY2FubmVyLml0ZXJzY2FuKHMsICoqa3cpLm5leHQoKQorICAgICAgICAgICAgb2JqLCBlbmQg
PSBzZWxmLnNjYW5fb25jZShzLCBpZHgpCiAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgot
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gSlNPTiBvYmplY3QgY291bGQgYmUgZGVj
b2RlZCIpCisgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoIk5vIEpTT04gb2JqZWN0
IGNvdWxkIGJlIGRlY29kZWQiLCBzLCBpZHgpCiAgICAgICAgIHJldHVybiBvYmosIGVuZAotCi1f
X2FsbF9fID0gWydKU09ORGVjb2RlciddCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9lbmNvZGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vZW5jb2Rlci5weQppbmRleCBkMjk5MTlhLi43MTg5
ZDdmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxl
anNvbi9lbmNvZGVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9z
aW1wbGVqc29uL2VuY29kZXIucHkKQEAgLTEsMTcgKzEsMjIgQEAKLSIiIgotSW1wbGVtZW50YXRp
b24gb2YgSlNPTkVuY29kZXIKKyIiIkltcGxlbWVudGF0aW9uIG9mIEpTT05FbmNvZGVyCiAiIiIK
IGltcG9ydCByZQotdHJ5OgotICAgIGZyb20gc2ltcGxlanNvbiBpbXBvcnQgX3NwZWVkdXBzCi1l
eGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgX3NwZWVkdXBzID0gTm9uZQorZnJvbSBkZWNpbWFsIGlt
cG9ydCBEZWNpbWFsCisKK2RlZiBfaW1wb3J0X3NwZWVkdXBzKCk6CisgICAgdHJ5OgorICAgICAg
ICBmcm9tIHNpbXBsZWpzb24gaW1wb3J0IF9zcGVlZHVwcworICAgICAgICByZXR1cm4gX3NwZWVk
dXBzLmVuY29kZV9iYXNlc3RyaW5nX2FzY2lpLCBfc3BlZWR1cHMubWFrZV9lbmNvZGVyCisgICAg
ZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorY19lbmNvZGVf
YmFzZXN0cmluZ19hc2NpaSwgY19tYWtlX2VuY29kZXIgPSBfaW1wb3J0X3NwZWVkdXBzKCkKKwor
ZnJvbSBkZWNvZGVyIGltcG9ydCBQb3NJbmYKIAotRVNDQVBFID0gcmUuY29tcGlsZShyJ1tceDAw
LVx4MTlcXCJcYlxmXG5cclx0XScpCi1FU0NBUEVfQVNDSUkgPSByZS5jb21waWxlKHInKFtcXCIv
XXxbXlwgLX5dKScpCitFU0NBUEUgPSByZS5jb21waWxlKHInW1x4MDAtXHgxZlxcIlxiXGZcblxy
XHRdJykKK0VTQ0FQRV9BU0NJSSA9IHJlLmNvbXBpbGUocicoW1xcIl18W15cIC1+XSknKQorSEFT
X1VURjggPSByZS5jb21waWxlKHInW1x4ODAtXHhmZl0nKQogRVNDQVBFX0RDVCA9IHsKLSAgICAj
IGVzY2FwZSBhbGwgZm9yd2FyZCBzbGFzaGVzIHRvIHByZXZlbnQgPC9zY3JpcHQ+IGF0dGFjawot
ICAgICcvJzogJ1xcLycsCiAgICAgJ1xcJzogJ1xcXFwnLAogICAgICciJzogJ1xcIicsCiAgICAg
J1xiJzogJ1xcYicsCkBAIC0yMSw0MCArMjYsMjggQEAgRVNDQVBFX0RDVCA9IHsKICAgICAnXHQn
OiAnXFx0JywKIH0KIGZvciBpIGluIHJhbmdlKDB4MjApOgorICAgICNFU0NBUEVfRENULnNldGRl
ZmF1bHQoY2hyKGkpLCAnXFx1ezA6MDR4fScuZm9ybWF0KGkpKQogICAgIEVTQ0FQRV9EQ1Quc2V0
ZGVmYXVsdChjaHIoaSksICdcXHUlMDR4JyAlIChpLCkpCiAKLSMgYXNzdW1lIHRoaXMgcHJvZHVj
ZXMgYW4gaW5maW5pdHkgb24gYWxsIG1hY2hpbmVzIChwcm9iYWJseSBub3QgZ3VhcmFudGVlZCkK
LUlORklOSVRZID0gZmxvYXQoJzFlNjY2NjYnKQotCi1kZWYgZmxvYXRzdHIobywgYWxsb3dfbmFu
PVRydWUpOgotICAgICMgQ2hlY2sgZm9yIHNwZWNpYWxzLiAgTm90ZSB0aGF0IHRoaXMgdHlwZSBv
ZiB0ZXN0IGlzIHByb2Nlc3Nvci0gYW5kL29yCi0gICAgIyBwbGF0Zm9ybS1zcGVjaWZpYywgc28g
ZG8gdGVzdHMgd2hpY2ggZG9uJ3QgZGVwZW5kIG9uIHRoZSBpbnRlcm5hbHMuCi0KLSAgICBpZiBv
ICE9IG86Ci0gICAgICAgIHRleHQgPSAnTmFOJwotICAgIGVsaWYgbyA9PSBJTkZJTklUWToKLSAg
ICAgICAgdGV4dCA9ICdJbmZpbml0eScKLSAgICBlbGlmIG8gPT0gLUlORklOSVRZOgotICAgICAg
ICB0ZXh0ID0gJy1JbmZpbml0eScKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gcmVwcihvKQot
Ci0gICAgaWYgbm90IGFsbG93X25hbjoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiT3V0IG9m
IHJhbmdlIGZsb2F0IHZhbHVlcyBhcmUgbm90IEpTT04gY29tcGxpYW50OiAlciIKLSAgICAgICAg
ICAgICUgKG8sKSkKLQotICAgIHJldHVybiB0ZXh0Ci0KK0ZMT0FUX1JFUFIgPSByZXByCiAKIGRl
ZiBlbmNvZGVfYmFzZXN0cmluZyhzKToKKyAgICAiIiJSZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0
aW9uIG9mIGEgUHl0aG9uIHN0cmluZworCiAgICAgIiIiCi0gICAgUmV0dXJuIGEgSlNPTiByZXBy
ZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBzdHJpbmcKLSAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNl
KHMsIHN0cikgYW5kIEhBU19VVEY4LnNlYXJjaChzKSBpcyBub3QgTm9uZToKKyAgICAgICAgcyA9
IHMuZGVjb2RlKCd1dGYtOCcpCiAgICAgZGVmIHJlcGxhY2UobWF0Y2gpOgogICAgICAgICByZXR1
cm4gRVNDQVBFX0RDVFttYXRjaC5ncm91cCgwKV0KLSAgICByZXR1cm4gJyInICsgRVNDQVBFLnN1
YihyZXBsYWNlLCBzKSArICciJworICAgIHJldHVybiB1JyInICsgRVNDQVBFLnN1YihyZXBsYWNl
LCBzKSArIHUnIicKKworCitkZWYgcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkocyk6CisgICAg
IiIiUmV0dXJuIGFuIEFTQ0lJLW9ubHkgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBz
dHJpbmcKIAotZGVmIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKHMpOgorICAgICIiIgorICAgIGlm
IGlzaW5zdGFuY2Uocywgc3RyKSBhbmQgSEFTX1VURjguc2VhcmNoKHMpIGlzIG5vdCBOb25lOgor
ICAgICAgICBzID0gcy5kZWNvZGUoJ3V0Zi04JykKICAgICBkZWYgcmVwbGFjZShtYXRjaCk6CiAg
ICAgICAgIHMgPSBtYXRjaC5ncm91cCgwKQogICAgICAgICB0cnk6CkBAIC02MiwyNyArNTUsMjYg
QEAgZGVmIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKHMpOgogICAgICAgICBleGNlcHQgS2V5RXJy
b3I6CiAgICAgICAgICAgICBuID0gb3JkKHMpCiAgICAgICAgICAgICBpZiBuIDwgMHgxMDAwMDoK
KyAgICAgICAgICAgICAgICAjcmV0dXJuICdcXHV7MDowNHh9Jy5mb3JtYXQobikKICAgICAgICAg
ICAgICAgICByZXR1cm4gJ1xcdSUwNHgnICUgKG4sKQogICAgICAgICAgICAgZWxzZToKICAgICAg
ICAgICAgICAgICAjIHN1cnJvZ2F0ZSBwYWlyCiAgICAgICAgICAgICAgICAgbiAtPSAweDEwMDAw
CiAgICAgICAgICAgICAgICAgczEgPSAweGQ4MDAgfCAoKG4gPj4gMTApICYgMHgzZmYpCiAgICAg
ICAgICAgICAgICAgczIgPSAweGRjMDAgfCAobiAmIDB4M2ZmKQorICAgICAgICAgICAgICAgICNy
ZXR1cm4gJ1xcdXswOjA0eH1cXHV7MTowNHh9Jy5mb3JtYXQoczEsIHMyKQogICAgICAgICAgICAg
ICAgIHJldHVybiAnXFx1JTA0eFxcdSUwNHgnICUgKHMxLCBzMikKICAgICByZXR1cm4gJyInICsg
c3RyKEVTQ0FQRV9BU0NJSS5zdWIocmVwbGFjZSwgcykpICsgJyInCi0gICAgICAgIAotdHJ5Ogot
ICAgIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpID0gX3NwZWVkdXBzLmVuY29kZV9iYXNlc3RyaW5n
X2FzY2lpCi0gICAgX25lZWRfdXRmOCA9IFRydWUKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAg
ICBfbmVlZF91dGY4ID0gRmFsc2UKKworCitlbmNvZGVfYmFzZXN0cmluZ19hc2NpaSA9ICgKKyAg
ICBjX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpIG9yIHB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lp
KQogCiBjbGFzcyBKU09ORW5jb2RlcihvYmplY3QpOgotICAgICIiIgotICAgIEV4dGVuc2libGUg
SlNPTiA8aHR0cDovL2pzb24ub3JnPiBlbmNvZGVyIGZvciBQeXRob24gZGF0YSBzdHJ1Y3R1cmVz
LgorICAgICIiIkV4dGVuc2libGUgSlNPTiA8aHR0cDovL2pzb24ub3JnPiBlbmNvZGVyIGZvciBQ
eXRob24gZGF0YSBzdHJ1Y3R1cmVzLgogCiAgICAgU3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvYmpl
Y3RzIGFuZCB0eXBlcyBieSBkZWZhdWx0OgotICAgIAorCiAgICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0rLS0tLS0tLS0tLS0tLS0tKwogICAgIHwgUHl0aG9uICAgICAgICAgICAgfCBKU09OICAgICAg
ICAgIHwKICAgICArPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT0rCkBAIC0xMDUs
NTAgKzk3LDYxIEBAIGNsYXNzIEpTT05FbmNvZGVyKG9iamVjdCk6CiAgICAgYGAuZGVmYXVsdCgp
YGAgbWV0aG9kIHdpdGggYW5vdGhlciBtZXRob2QgdGhhdCByZXR1cm5zIGEgc2VyaWFsaXphYmxl
CiAgICAgb2JqZWN0IGZvciBgYG9gYCBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0IHNob3VsZCBj
YWxsIHRoZSBzdXBlcmNsYXNzCiAgICAgaW1wbGVtZW50YXRpb24gKHRvIHJhaXNlIGBgVHlwZUVy
cm9yYGApLgorCiAgICAgIiIiCi0gICAgX19hbGxfXyA9IFsnX19pbml0X18nLCAnZGVmYXVsdCcs
ICdlbmNvZGUnLCAnaXRlcmVuY29kZSddCiAgICAgaXRlbV9zZXBhcmF0b3IgPSAnLCAnCiAgICAg
a2V5X3NlcGFyYXRvciA9ICc6ICcKICAgICBkZWYgX19pbml0X18oc2VsZiwgc2tpcGtleXM9RmFs
c2UsIGVuc3VyZV9hc2NpaT1UcnVlLAogICAgICAgICAgICAgY2hlY2tfY2lyY3VsYXI9VHJ1ZSwg
YWxsb3dfbmFuPVRydWUsIHNvcnRfa2V5cz1GYWxzZSwKLSAgICAgICAgICAgIGluZGVudD1Ob25l
LCBzZXBhcmF0b3JzPU5vbmUsIGVuY29kaW5nPSd1dGYtOCcpOgotICAgICAgICAiIiIKLSAgICAg
ICAgQ29uc3RydWN0b3IgZm9yIEpTT05FbmNvZGVyLCB3aXRoIHNlbnNpYmxlIGRlZmF1bHRzLgor
ICAgICAgICAgICAgaW5kZW50PU5vbmUsIHNlcGFyYXRvcnM9Tm9uZSwgZW5jb2Rpbmc9J3V0Zi04
JywgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgdXNlX2RlY2ltYWw9RmFsc2UpOgorICAgICAg
ICAiIiJDb25zdHJ1Y3RvciBmb3IgSlNPTkVuY29kZXIsIHdpdGggc2Vuc2libGUgZGVmYXVsdHMu
CiAKLSAgICAgICAgSWYgc2tpcGtleXMgaXMgRmFsc2UsIHRoZW4gaXQgaXMgYSBUeXBlRXJyb3Ig
dG8gYXR0ZW1wdAorICAgICAgICBJZiBza2lwa2V5cyBpcyBmYWxzZSwgdGhlbiBpdCBpcyBhIFR5
cGVFcnJvciB0byBhdHRlbXB0CiAgICAgICAgIGVuY29kaW5nIG9mIGtleXMgdGhhdCBhcmUgbm90
IHN0ciwgaW50LCBsb25nLCBmbG9hdCBvciBOb25lLiAgSWYKICAgICAgICAgc2tpcGtleXMgaXMg
VHJ1ZSwgc3VjaCBpdGVtcyBhcmUgc2ltcGx5IHNraXBwZWQuCiAKLSAgICAgICAgSWYgZW5zdXJl
X2FzY2lpIGlzIFRydWUsIHRoZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHIKKyAgICAg
ICAgSWYgZW5zdXJlX2FzY2lpIGlzIHRydWUsIHRoZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0byBi
ZSBzdHIKICAgICAgICAgb2JqZWN0cyB3aXRoIGFsbCBpbmNvbWluZyB1bmljb2RlIGNoYXJhY3Rl
cnMgZXNjYXBlZC4gIElmCiAgICAgICAgIGVuc3VyZV9hc2NpaSBpcyBmYWxzZSwgdGhlIG91dHB1
dCB3aWxsIGJlIHVuaWNvZGUgb2JqZWN0LgogCi0gICAgICAgIElmIGNoZWNrX2NpcmN1bGFyIGlz
IFRydWUsIHRoZW4gbGlzdHMsIGRpY3RzLCBhbmQgY3VzdG9tIGVuY29kZWQKKyAgICAgICAgSWYg
Y2hlY2tfY2lyY3VsYXIgaXMgdHJ1ZSwgdGhlbiBsaXN0cywgZGljdHMsIGFuZCBjdXN0b20gZW5j
b2RlZAogICAgICAgICBvYmplY3RzIHdpbGwgYmUgY2hlY2tlZCBmb3IgY2lyY3VsYXIgcmVmZXJl
bmNlcyBkdXJpbmcgZW5jb2RpbmcgdG8KICAgICAgICAgcHJldmVudCBhbiBpbmZpbml0ZSByZWN1
cnNpb24gKHdoaWNoIHdvdWxkIGNhdXNlIGFuIE92ZXJmbG93RXJyb3IpLgogICAgICAgICBPdGhl
cndpc2UsIG5vIHN1Y2ggY2hlY2sgdGFrZXMgcGxhY2UuCiAKLSAgICAgICAgSWYgYWxsb3dfbmFu
IGlzIFRydWUsIHRoZW4gTmFOLCBJbmZpbml0eSwgYW5kIC1JbmZpbml0eSB3aWxsIGJlCisgICAg
ICAgIElmIGFsbG93X25hbiBpcyB0cnVlLCB0aGVuIE5hTiwgSW5maW5pdHksIGFuZCAtSW5maW5p
dHkgd2lsbCBiZQogICAgICAgICBlbmNvZGVkIGFzIHN1Y2guICBUaGlzIGJlaGF2aW9yIGlzIG5v
dCBKU09OIHNwZWNpZmljYXRpb24gY29tcGxpYW50LAogICAgICAgICBidXQgaXMgY29uc2lzdGVu
dCB3aXRoIG1vc3QgSmF2YVNjcmlwdCBiYXNlZCBlbmNvZGVycyBhbmQgZGVjb2RlcnMuCiAgICAg
ICAgIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBhIFZhbHVlRXJyb3IgdG8gZW5jb2RlIHN1Y2ggZmxv
YXRzLgogCi0gICAgICAgIElmIHNvcnRfa2V5cyBpcyBUcnVlLCB0aGVuIHRoZSBvdXRwdXQgb2Yg
ZGljdGlvbmFyaWVzIHdpbGwgYmUKKyAgICAgICAgSWYgc29ydF9rZXlzIGlzIHRydWUsIHRoZW4g
dGhlIG91dHB1dCBvZiBkaWN0aW9uYXJpZXMgd2lsbCBiZQogICAgICAgICBzb3J0ZWQgYnkga2V5
OyB0aGlzIGlzIHVzZWZ1bCBmb3IgcmVncmVzc2lvbiB0ZXN0cyB0byBlbnN1cmUKICAgICAgICAg
dGhhdCBKU09OIHNlcmlhbGl6YXRpb25zIGNhbiBiZSBjb21wYXJlZCBvbiBhIGRheS10by1kYXkg
YmFzaXMuCiAKLSAgICAgICAgSWYgaW5kZW50IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRo
ZW4gSlNPTiBhcnJheQotICAgICAgICBlbGVtZW50cyBhbmQgb2JqZWN0IG1lbWJlcnMgd2lsbCBi
ZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQKLSAgICAgICAgaW5kZW50IGxldmVsLiAgQW4gaW5k
ZW50IGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4KLSAgICAgICAgTm9uZSBp
cyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICBJZiBpbmRlbnQgaXMg
YSBzdHJpbmcsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQgb2JqZWN0IG1lbWJlcnMKKyAg
ICAgICAgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIGEgbmV3bGluZSBmb2xsb3dlZCBieSB0
aGF0IHN0cmluZyByZXBlYXRlZAorICAgICAgICBmb3IgZWFjaCBsZXZlbCBvZiBuZXN0aW5nLiBg
YE5vbmVgYCAodGhlIGRlZmF1bHQpIHNlbGVjdHMgdGhlIG1vc3QgY29tcGFjdAorICAgICAgICBy
ZXByZXNlbnRhdGlvbiB3aXRob3V0IGFueSBuZXdsaW5lcy4gRm9yIGJhY2t3YXJkcyBjb21wYXRp
YmlsaXR5IHdpdGgKKyAgICAgICAgdmVyc2lvbnMgb2Ygc2ltcGxlanNvbiBlYXJsaWVyIHRoYW4g
Mi4xLjAsIGFuIGludGVnZXIgaXMgYWxzbyBhY2NlcHRlZAorICAgICAgICBhbmQgaXMgY29udmVy
dGVkIHRvIGEgc3RyaW5nIHdpdGggdGhhdCBtYW55IHNwYWNlcy4KIAogICAgICAgICBJZiBzcGVj
aWZpZWQsIHNlcGFyYXRvcnMgc2hvdWxkIGJlIGEgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJh
dG9yKQotICAgICAgICB0dXBsZS4gVGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpLiBUbyBnZXQg
dGhlIG1vc3QgY29tcGFjdCBKU09OCisgICAgICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgKCcs
ICcsICc6ICcpLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTgogICAgICAgICByZXByZXNl
bnRhdGlvbiB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0byBlbGltaW5hdGUgd2hpdGVz
cGFjZS4KIAorICAgICAgICBJZiBzcGVjaWZpZWQsIGRlZmF1bHQgaXMgYSBmdW5jdGlvbiB0aGF0
IGdldHMgY2FsbGVkIGZvciBvYmplY3RzCisgICAgICAgIHRoYXQgY2FuJ3Qgb3RoZXJ3aXNlIGJl
IHNlcmlhbGl6ZWQuICBJdCBzaG91bGQgcmV0dXJuIGEgSlNPTiBlbmNvZGFibGUKKyAgICAgICAg
dmVyc2lvbiBvZiB0aGUgb2JqZWN0IG9yIHJhaXNlIGEgYGBUeXBlRXJyb3JgYC4KKwogICAgICAg
ICBJZiBlbmNvZGluZyBpcyBub3QgTm9uZSwgdGhlbiBhbGwgaW5wdXQgc3RyaW5ncyB3aWxsIGJl
Ci0gICAgICAgIHRyYW5zZm9ybWVkIGludG8gdW5pY29kZSB1c2luZyB0aGF0IGVuY29kaW5nIHBy
aW9yIHRvIEpTT04tZW5jb2RpbmcuIAorICAgICAgICB0cmFuc2Zvcm1lZCBpbnRvIHVuaWNvZGUg
dXNpbmcgdGhhdCBlbmNvZGluZyBwcmlvciB0byBKU09OLWVuY29kaW5nLgogICAgICAgICBUaGUg
ZGVmYXVsdCBpcyBVVEYtOC4KKworICAgICAgICBJZiB1c2VfZGVjaW1hbCBpcyB0cnVlIChub3Qg
dGhlIGRlZmF1bHQpLCBgYGRlY2ltYWwuRGVjaW1hbGBgIHdpbGwKKyAgICAgICAgYmUgc3VwcG9y
dGVkIGRpcmVjdGx5IGJ5IHRoZSBlbmNvZGVyLiBGb3IgdGhlIGludmVyc2UsIGRlY29kZSBKU09O
CisgICAgICAgIHdpdGggYGBwYXJzZV9mbG9hdD1kZWNpbWFsLkRlY2ltYWxgYC4KKwogICAgICAg
ICAiIiIKIAogICAgICAgICBzZWxmLnNraXBrZXlzID0gc2tpcGtleXMKQEAgLTE1NiwxNiArMTU5
LDE4MSBAQCBjbGFzcyBKU09ORW5jb2RlcihvYmplY3QpOgogICAgICAgICBzZWxmLmNoZWNrX2Np
cmN1bGFyID0gY2hlY2tfY2lyY3VsYXIKICAgICAgICAgc2VsZi5hbGxvd19uYW4gPSBhbGxvd19u
YW4KICAgICAgICAgc2VsZi5zb3J0X2tleXMgPSBzb3J0X2tleXMKKyAgICAgICAgc2VsZi51c2Vf
ZGVjaW1hbCA9IHVzZV9kZWNpbWFsCisgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5kZW50LCAoaW50
LCBsb25nKSk6CisgICAgICAgICAgICBpbmRlbnQgPSAnICcgKiBpbmRlbnQKICAgICAgICAgc2Vs
Zi5pbmRlbnQgPSBpbmRlbnQKLSAgICAgICAgc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCA9IDAK
ICAgICAgICAgaWYgc2VwYXJhdG9ycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuaXRl
bV9zZXBhcmF0b3IsIHNlbGYua2V5X3NlcGFyYXRvciA9IHNlcGFyYXRvcnMKKyAgICAgICAgZWxp
ZiBpbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLml0ZW1fc2VwYXJhdG9yID0g
JywnCisgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRl
ZmF1bHQgPSBkZWZhdWx0CiAgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZwogCi0gICAg
ZGVmIF9uZXdsaW5lX2luZGVudChzZWxmKToKLSAgICAgICAgcmV0dXJuICdcbicgKyAoJyAnICog
KHNlbGYuaW5kZW50ICogc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCkpCisgICAgZGVmIGRlZmF1
bHQoc2VsZiwgbyk6CisgICAgICAgICIiIkltcGxlbWVudCB0aGlzIG1ldGhvZCBpbiBhIHN1YmNs
YXNzIHN1Y2ggdGhhdCBpdCByZXR1cm5zCisgICAgICAgIGEgc2VyaWFsaXphYmxlIG9iamVjdCBm
b3IgYGBvYGAsIG9yIGNhbGxzIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uCisgICAgICAgICh0byBy
YWlzZSBhIGBgVHlwZUVycm9yYGApLgogCi0gICAgZGVmIF9pdGVyZW5jb2RlX2xpc3Qoc2VsZiwg
bHN0LCBtYXJrZXJzPU5vbmUpOgorICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc3VwcG9ydCBhcmJp
dHJhcnkgaXRlcmF0b3JzLCB5b3UgY291bGQKKyAgICAgICAgaW1wbGVtZW50IGRlZmF1bHQgbGlr
ZSB0aGlzOjoKKworICAgICAgICAgICAgZGVmIGRlZmF1bHQoc2VsZiwgbyk6CisgICAgICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpdGVyYWJsZSA9IGl0ZXIobykKKyAgICAg
ICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisg
ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QoaXRl
cmFibGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTT05FbmNvZGVyLmRlZmF1bHQoc2VsZiwg
bykKKworICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKHJlcHIobykgKyAiIGlz
IG5vdCBKU09OIHNlcmlhbGl6YWJsZSIpCisKKyAgICBkZWYgZW5jb2RlKHNlbGYsIG8pOgorICAg
ICAgICAiIiJSZXR1cm4gYSBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBk
YXRhIHN0cnVjdHVyZS4KKworICAgICAgICA+Pj4gZnJvbSBzaW1wbGVqc29uIGltcG9ydCBKU09O
RW5jb2RlcgorICAgICAgICA+Pj4gSlNPTkVuY29kZXIoKS5lbmNvZGUoeyJmb28iOiBbImJhciIs
ICJiYXoiXX0pCisgICAgICAgICd7ImZvbyI6IFsiYmFyIiwgImJheiJdfScKKworICAgICAgICAi
IiIKKyAgICAgICAgIyBUaGlzIGlzIGZvciBleHRyZW1lbHkgc2ltcGxlIGNhc2VzIGFuZCBiZW5j
aG1hcmtzLgorICAgICAgICBpZiBpc2luc3RhbmNlKG8sIGJhc2VzdHJpbmcpOgorICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShvLCBzdHIpOgorICAgICAgICAgICAgICAgIF9lbmNvZGluZyA9IHNl
bGYuZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBpZiAoX2VuY29kaW5nIGlzIG5vdCBOb25lCisg
ICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IChfZW5jb2RpbmcgPT0gJ3V0Zi04JykpOgor
ICAgICAgICAgICAgICAgICAgICBvID0gby5kZWNvZGUoX2VuY29kaW5nKQorICAgICAgICAgICAg
aWYgc2VsZi5lbnN1cmVfYXNjaWk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZV9iYXNl
c3RyaW5nX2FzY2lpKG8pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVy
biBlbmNvZGVfYmFzZXN0cmluZyhvKQorICAgICAgICAjIFRoaXMgZG9lc24ndCBwYXNzIHRoZSBp
dGVyYXRvciBkaXJlY3RseSB0byAnJy5qb2luKCkgYmVjYXVzZSB0aGUKKyAgICAgICAgIyBleGNl
cHRpb25zIGFyZW4ndCBhcyBkZXRhaWxlZC4gIFRoZSBsaXN0IGNhbGwgc2hvdWxkIGJlIHJvdWdo
bHkKKyAgICAgICAgIyBlcXVpdmFsZW50IHRvIHRoZSBQeVNlcXVlbmNlX0Zhc3QgdGhhdCAnJy5q
b2luKCkgd291bGQgZG8uCisgICAgICAgIGNodW5rcyA9IHNlbGYuaXRlcmVuY29kZShvLCBfb25l
X3Nob3Q9VHJ1ZSkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2h1bmtzLCAobGlzdCwgdHVw
bGUpKToKKyAgICAgICAgICAgIGNodW5rcyA9IGxpc3QoY2h1bmtzKQorICAgICAgICBpZiBzZWxm
LmVuc3VyZV9hc2NpaToKKyAgICAgICAgICAgIHJldHVybiAnJy5qb2luKGNodW5rcykKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB1Jycuam9pbihjaHVua3MpCisKKyAgICBkZWYg
aXRlcmVuY29kZShzZWxmLCBvLCBfb25lX3Nob3Q9RmFsc2UpOgorICAgICAgICAiIiJFbmNvZGUg
dGhlIGdpdmVuIG9iamVjdCBhbmQgeWllbGQgZWFjaCBzdHJpbmcKKyAgICAgICAgcmVwcmVzZW50
YXRpb24gYXMgYXZhaWxhYmxlLgorCisgICAgICAgIEZvciBleGFtcGxlOjoKKworICAgICAgICAg
ICAgZm9yIGNodW5rIGluIEpTT05FbmNvZGVyKCkuaXRlcmVuY29kZShiaWdvYmplY3QpOgorICAg
ICAgICAgICAgICAgIG15c29ja2V0LndyaXRlKGNodW5rKQorCisgICAgICAgICIiIgorICAgICAg
ICBpZiBzZWxmLmNoZWNrX2NpcmN1bGFyOgorICAgICAgICAgICAgbWFya2VycyA9IHt9CisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBtYXJrZXJzID0gTm9uZQorICAgICAgICBpZiBzZWxmLmVu
c3VyZV9hc2NpaToKKyAgICAgICAgICAgIF9lbmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJpbmdfYXNj
aWkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9lbmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJp
bmcKKyAgICAgICAgaWYgc2VsZi5lbmNvZGluZyAhPSAndXRmLTgnOgorICAgICAgICAgICAgZGVm
IF9lbmNvZGVyKG8sIF9vcmlnX2VuY29kZXI9X2VuY29kZXIsIF9lbmNvZGluZz1zZWxmLmVuY29k
aW5nKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG8sIHN0cik6CisgICAgICAgICAg
ICAgICAgICAgIG8gPSBvLmRlY29kZShfZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgcmV0dXJu
IF9vcmlnX2VuY29kZXIobykKKworICAgICAgICBkZWYgZmxvYXRzdHIobywgYWxsb3dfbmFuPXNl
bGYuYWxsb3dfbmFuLAorICAgICAgICAgICAgICAgIF9yZXByPUZMT0FUX1JFUFIsIF9pbmY9UG9z
SW5mLCBfbmVnaW5mPS1Qb3NJbmYpOgorICAgICAgICAgICAgIyBDaGVjayBmb3Igc3BlY2lhbHMu
IE5vdGUgdGhhdCB0aGlzIHR5cGUgb2YgdGVzdCBpcyBwcm9jZXNzb3IKKyAgICAgICAgICAgICMg
YW5kL29yIHBsYXRmb3JtLXNwZWNpZmljLCBzbyBkbyB0ZXN0cyB3aGljaCBkb24ndCBkZXBlbmQg
b24KKyAgICAgICAgICAgICMgdGhlIGludGVybmFscy4KKworICAgICAgICAgICAgaWYgbyAhPSBv
OgorICAgICAgICAgICAgICAgIHRleHQgPSAnTmFOJworICAgICAgICAgICAgZWxpZiBvID09IF9p
bmY6CisgICAgICAgICAgICAgICAgdGV4dCA9ICdJbmZpbml0eScKKyAgICAgICAgICAgIGVsaWYg
byA9PSBfbmVnaW5mOgorICAgICAgICAgICAgICAgIHRleHQgPSAnLUluZmluaXR5JworICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gX3JlcHIobykKKworICAgICAgICAg
ICAgaWYgbm90IGFsbG93X25hbjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAor
ICAgICAgICAgICAgICAgICAgICAiT3V0IG9mIHJhbmdlIGZsb2F0IHZhbHVlcyBhcmUgbm90IEpT
T04gY29tcGxpYW50OiAiICsKKyAgICAgICAgICAgICAgICAgICAgcmVwcihvKSkKKworICAgICAg
ICAgICAgcmV0dXJuIHRleHQKKworCisgICAgICAgIGtleV9tZW1vID0ge30KKyAgICAgICAgaWYg
KF9vbmVfc2hvdCBhbmQgY19tYWtlX2VuY29kZXIgaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAg
ICBhbmQgc2VsZi5pbmRlbnQgaXMgTm9uZSk6CisgICAgICAgICAgICBfaXRlcmVuY29kZSA9IGNf
bWFrZV9lbmNvZGVyKAorICAgICAgICAgICAgICAgIG1hcmtlcnMsIHNlbGYuZGVmYXVsdCwgX2Vu
Y29kZXIsIHNlbGYuaW5kZW50LAorICAgICAgICAgICAgICAgIHNlbGYua2V5X3NlcGFyYXRvciwg
c2VsZi5pdGVtX3NlcGFyYXRvciwgc2VsZi5zb3J0X2tleXMsCisgICAgICAgICAgICAgICAgc2Vs
Zi5za2lwa2V5cywgc2VsZi5hbGxvd19uYW4sIGtleV9tZW1vLCBzZWxmLnVzZV9kZWNpbWFsKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2l0ZXJlbmNvZGUgPSBfbWFrZV9pdGVyZW5jb2Rl
KAorICAgICAgICAgICAgICAgIG1hcmtlcnMsIHNlbGYuZGVmYXVsdCwgX2VuY29kZXIsIHNlbGYu
aW5kZW50LCBmbG9hdHN0ciwKKyAgICAgICAgICAgICAgICBzZWxmLmtleV9zZXBhcmF0b3IsIHNl
bGYuaXRlbV9zZXBhcmF0b3IsIHNlbGYuc29ydF9rZXlzLAorICAgICAgICAgICAgICAgIHNlbGYu
c2tpcGtleXMsIF9vbmVfc2hvdCwgc2VsZi51c2VfZGVjaW1hbCkKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgcmV0dXJuIF9pdGVyZW5jb2RlKG8sIDApCisgICAgICAgIGZpbmFsbHk6CisgICAg
ICAgICAgICBrZXlfbWVtby5jbGVhcigpCisKKworY2xhc3MgSlNPTkVuY29kZXJGb3JIVE1MKEpT
T05FbmNvZGVyKToKKyAgICAiIiJBbiBlbmNvZGVyIHRoYXQgcHJvZHVjZXMgSlNPTiBzYWZlIHRv
IGVtYmVkIGluIEhUTUwuCisKKyAgICBUbyBlbWJlZCBKU09OIGNvbnRlbnQgaW4sIHNheSwgYSBz
Y3JpcHQgdGFnIG9uIGEgd2ViIHBhZ2UsIHRoZQorICAgIGNoYXJhY3RlcnMgJiwgPCBhbmQgPiBz
aG91bGQgYmUgZXNjYXBlZC4gVGhleSBjYW5ub3QgYmUgZXNjYXBlZAorICAgIHdpdGggdGhlIHVz
dWFsIGVudGl0aWVzIChlLmcuICZhbXA7KSBiZWNhdXNlIHRoZXkgYXJlIG5vdCBleHBhbmRlZAor
ICAgIHdpdGhpbiA8c2NyaXB0PiB0YWdzLgorICAgICIiIgorCisgICAgZGVmIGVuY29kZShzZWxm
LCBvKToKKyAgICAgICAgIyBPdmVycmlkZSBKU09ORW5jb2Rlci5lbmNvZGUgYmVjYXVzZSBpdCBo
YXMgaGFja3MgZm9yCisgICAgICAgICMgcGVyZm9ybWFuY2UgdGhhdCBtYWtlIHRoaW5ncyBtb3Jl
IGNvbXBsaWNhdGVkLgorICAgICAgICBjaHVua3MgPSBzZWxmLml0ZXJlbmNvZGUobywgVHJ1ZSkK
KyAgICAgICAgaWYgc2VsZi5lbnN1cmVfYXNjaWk6CisgICAgICAgICAgICByZXR1cm4gJycuam9p
bihjaHVua3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdScnLmpvaW4oY2h1
bmtzKQorCisgICAgZGVmIGl0ZXJlbmNvZGUoc2VsZiwgbywgX29uZV9zaG90PUZhbHNlKToKKyAg
ICAgICAgY2h1bmtzID0gc3VwZXIoSlNPTkVuY29kZXJGb3JIVE1MLCBzZWxmKS5pdGVyZW5jb2Rl
KG8sIF9vbmVfc2hvdCkKKyAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKKyAgICAgICAgICAg
IGNodW5rID0gY2h1bmsucmVwbGFjZSgnJicsICdcXHUwMDI2JykKKyAgICAgICAgICAgIGNodW5r
ID0gY2h1bmsucmVwbGFjZSgnPCcsICdcXHUwMDNjJykKKyAgICAgICAgICAgIGNodW5rID0gY2h1
bmsucmVwbGFjZSgnPicsICdcXHUwMDNlJykKKyAgICAgICAgICAgIHlpZWxkIGNodW5rCisKKwor
ZGVmIF9tYWtlX2l0ZXJlbmNvZGUobWFya2VycywgX2RlZmF1bHQsIF9lbmNvZGVyLCBfaW5kZW50
LCBfZmxvYXRzdHIsCisgICAgICAgIF9rZXlfc2VwYXJhdG9yLCBfaXRlbV9zZXBhcmF0b3IsIF9z
b3J0X2tleXMsIF9za2lwa2V5cywgX29uZV9zaG90LAorICAgICAgICBfdXNlX2RlY2ltYWwsCisg
ICAgICAgICMjIEhBQ0s6IGhhbmQtb3B0aW1pemVkIGJ5dGVjb2RlOyB0dXJuIGdsb2JhbHMgaW50
byBsb2NhbHMKKyAgICAgICAgRmFsc2U9RmFsc2UsCisgICAgICAgIFRydWU9VHJ1ZSwKKyAgICAg
ICAgVmFsdWVFcnJvcj1WYWx1ZUVycm9yLAorICAgICAgICBiYXNlc3RyaW5nPWJhc2VzdHJpbmcs
CisgICAgICAgIERlY2ltYWw9RGVjaW1hbCwKKyAgICAgICAgZGljdD1kaWN0LAorICAgICAgICBm
bG9hdD1mbG9hdCwKKyAgICAgICAgaWQ9aWQsCisgICAgICAgIGludD1pbnQsCisgICAgICAgIGlz
aW5zdGFuY2U9aXNpbnN0YW5jZSwKKyAgICAgICAgbGlzdD1saXN0LAorICAgICAgICBsb25nPWxv
bmcsCisgICAgICAgIHN0cj1zdHIsCisgICAgICAgIHR1cGxlPXR1cGxlLAorICAgICk6CisKKyAg
ICBkZWYgX2l0ZXJlbmNvZGVfbGlzdChsc3QsIF9jdXJyZW50X2luZGVudF9sZXZlbCk6CiAgICAg
ICAgIGlmIG5vdCBsc3Q6CiAgICAgICAgICAgICB5aWVsZCAnW10nCiAgICAgICAgICAgICByZXR1
cm4KQEAgLTE3NCwzMSArMzQyLDUzIEBAIGNsYXNzIEpTT05FbmNvZGVyKG9iamVjdCk6CiAgICAg
ICAgICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgogICAgICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCiAgICAgICAgICAgICBtYXJr
ZXJzW21hcmtlcmlkXSA9IGxzdAotICAgICAgICB5aWVsZCAnWycKLSAgICAgICAgaWYgc2VsZi5p
bmRlbnQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVs
ICs9IDEKLSAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gc2VsZi5fbmV3bGluZV9pbmRlbnQo
KQotICAgICAgICAgICAgc2VwYXJhdG9yID0gc2VsZi5pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVf
aW5kZW50Ci0gICAgICAgICAgICB5aWVsZCBuZXdsaW5lX2luZGVudAorICAgICAgICBidWYgPSAn
WycKKyAgICAgICAgaWYgX2luZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9jdXJyZW50
X2luZGVudF9sZXZlbCArPSAxCisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9ICdcbicgKyAo
X2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkKKyAgICAgICAgICAgIHNlcGFyYXRvciA9
IF9pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5kZW50CisgICAgICAgICAgICBidWYgKz0gbmV3
bGluZV9pbmRlbnQKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0g
Tm9uZQotICAgICAgICAgICAgc2VwYXJhdG9yID0gc2VsZi5pdGVtX3NlcGFyYXRvcgorICAgICAg
ICAgICAgc2VwYXJhdG9yID0gX2l0ZW1fc2VwYXJhdG9yCiAgICAgICAgIGZpcnN0ID0gVHJ1ZQog
ICAgICAgICBmb3IgdmFsdWUgaW4gbHN0OgogICAgICAgICAgICAgaWYgZmlyc3Q6CiAgICAgICAg
ICAgICAgICAgZmlyc3QgPSBGYWxzZQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICB5aWVsZCBzZXBhcmF0b3IKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBzZWxmLl9pdGVyZW5j
b2RlKHZhbHVlLCBtYXJrZXJzKToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAg
ICAgICAgICAgIGJ1ZiA9IHNlcGFyYXRvcgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1
ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgeWllbGQgYnVmICsgX2VuY29kZXIodmFs
dWUpCisgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgeWll
bGQgYnVmICsgJ251bGwnCisgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIFRydWU6CisgICAgICAg
ICAgICAgICAgeWllbGQgYnVmICsgJ3RydWUnCisgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIEZh
bHNlOgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArICdmYWxzZScKKyAgICAgICAgICAgIGVs
aWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGludCwgbG9uZykpOgorICAgICAgICAgICAgICAgIHlpZWxk
IGJ1ZiArIHN0cih2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxv
YXQpOgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIF9mbG9hdHN0cih2YWx1ZSkKKyAgICAg
ICAgICAgIGVsaWYgX3VzZV9kZWNpbWFsIGFuZCBpc2luc3RhbmNlKHZhbHVlLCBEZWNpbWFsKToK
KyAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBzdHIodmFsdWUpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBf
aXRlcmVuY29kZV9saXN0KHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCisgICAgICAgICAg
ICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgICAgICAgICAg
Y2h1bmtzID0gX2l0ZXJlbmNvZGVfZGljdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQor
ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVy
ZW5jb2RlKHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCisgICAgICAgICAgICAgICAgZm9y
IGNodW5rIGluIGNodW5rczoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKICAgICAg
ICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmN1cnJl
bnRfaW5kZW50X2xldmVsIC09IDEKLSAgICAgICAgICAgIHlpZWxkIHNlbGYuX25ld2xpbmVfaW5k
ZW50KCkKKyAgICAgICAgICAgIF9jdXJyZW50X2luZGVudF9sZXZlbCAtPSAxCisgICAgICAgICAg
ICB5aWVsZCAnXG4nICsgKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAg
IHlpZWxkICddJwogICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAg
ZGVsIG1hcmtlcnNbbWFya2VyaWRdCiAKLSAgICBkZWYgX2l0ZXJlbmNvZGVfZGljdChzZWxmLCBk
Y3QsIG1hcmtlcnM9Tm9uZSk6CisgICAgZGVmIF9pdGVyZW5jb2RlX2RpY3QoZGN0LCBfY3VycmVu
dF9pbmRlbnRfbGV2ZWwpOgogICAgICAgICBpZiBub3QgZGN0OgogICAgICAgICAgICAgeWllbGQg
J3t9JwogICAgICAgICAgICAgcmV0dXJuCkBAIC0yMDgsNzggKzM5OCw3OCBAQCBjbGFzcyBKU09O
RW5jb2RlcihvYmplY3QpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1
bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCiAgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9
IGRjdAogICAgICAgICB5aWVsZCAneycKLSAgICAgICAga2V5X3NlcGFyYXRvciA9IHNlbGYua2V5
X3NlcGFyYXRvcgotICAgICAgICBpZiBzZWxmLmluZGVudCBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgKz0gMQotICAgICAgICAgICAgbmV3bGluZV9p
bmRlbnQgPSBzZWxmLl9uZXdsaW5lX2luZGVudCgpCi0gICAgICAgICAgICBpdGVtX3NlcGFyYXRv
ciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAorICAgICAgICBpZiBfaW5k
ZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX2N1cnJlbnRfaW5kZW50X2xldmVsICs9IDEK
KyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gJ1xuJyArIChfaW5kZW50ICogX2N1cnJlbnRf
aW5kZW50X2xldmVsKQorICAgICAgICAgICAgaXRlbV9zZXBhcmF0b3IgPSBfaXRlbV9zZXBhcmF0
b3IgKyBuZXdsaW5lX2luZGVudAogICAgICAgICAgICAgeWllbGQgbmV3bGluZV9pbmRlbnQKICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gTm9uZQotICAgICAgICAg
ICAgaXRlbV9zZXBhcmF0b3IgPSBzZWxmLml0ZW1fc2VwYXJhdG9yCisgICAgICAgICAgICBpdGVt
X3NlcGFyYXRvciA9IF9pdGVtX3NlcGFyYXRvcgogICAgICAgICBmaXJzdCA9IFRydWUKLSAgICAg
ICAgaWYgc2VsZi5lbnN1cmVfYXNjaWk6Ci0gICAgICAgICAgICBlbmNvZGVyID0gZW5jb2RlX2Jh
c2VzdHJpbmdfYXNjaWkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGVuY29kZXIgPSBlbmNv
ZGVfYmFzZXN0cmluZwotICAgICAgICBhbGxvd19uYW4gPSBzZWxmLmFsbG93X25hbgotICAgICAg
ICBpZiBzZWxmLnNvcnRfa2V5czoKLSAgICAgICAgICAgIGtleXMgPSBkY3Qua2V5cygpCi0gICAg
ICAgICAgICBrZXlzLnNvcnQoKQotICAgICAgICAgICAgaXRlbXMgPSBbKGssIGRjdFtrXSkgZm9y
IGsgaW4ga2V5c10KKyAgICAgICAgaWYgX3NvcnRfa2V5czoKKyAgICAgICAgICAgIGl0ZW1zID0g
ZGN0Lml0ZW1zKCkKKyAgICAgICAgICAgIGl0ZW1zLnNvcnQoa2V5PWxhbWJkYSBrdjoga3ZbMF0p
CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpdGVtcyA9IGRjdC5pdGVyaXRlbXMoKQotICAg
ICAgICBfZW5jb2RpbmcgPSBzZWxmLmVuY29kaW5nCi0gICAgICAgIF9kb19kZWNvZGUgPSAoX2Vu
Y29kaW5nIGlzIG5vdCBOb25lCi0gICAgICAgICAgICBhbmQgbm90IChfbmVlZF91dGY4IGFuZCBf
ZW5jb2RpbmcgPT0gJ3V0Zi04JykpCiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgot
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6Ci0gICAgICAgICAgICAgICAgaWYg
X2RvX2RlY29kZToKLSAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LmRlY29kZShfZW5jb2Rp
bmcpCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCBiYXNlc3RyaW5nKToKKyAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBiYXNlc3RyaW5nKToKICAgICAgICAgICAgICAgICBw
YXNzCiAgICAgICAgICAgICAjIEphdmFTY3JpcHQgaXMgd2Vha2x5IHR5cGVkIGZvciB0aGVzZSwg
c28gaXQgbWFrZXMgc2Vuc2UgdG8KICAgICAgICAgICAgICMgYWxzbyBhbGxvdyB0aGVtLiAgTWFu
eSBlbmNvZGVycyBzZWVtIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMuCiAgICAgICAgICAgICBl
bGlmIGlzaW5zdGFuY2Uoa2V5LCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAga2V5ID0gZmxvYXRz
dHIoa2V5LCBhbGxvd19uYW4pCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCAoaW50
LCBsb25nKSk6Ci0gICAgICAgICAgICAgICAga2V5ID0gc3RyKGtleSkKKyAgICAgICAgICAgICAg
ICBrZXkgPSBfZmxvYXRzdHIoa2V5KQogICAgICAgICAgICAgZWxpZiBrZXkgaXMgVHJ1ZToKICAg
ICAgICAgICAgICAgICBrZXkgPSAndHJ1ZScKICAgICAgICAgICAgIGVsaWYga2V5IGlzIEZhbHNl
OgogICAgICAgICAgICAgICAgIGtleSA9ICdmYWxzZScKICAgICAgICAgICAgIGVsaWYga2V5IGlz
IE5vbmU6CiAgICAgICAgICAgICAgICAga2V5ID0gJ251bGwnCi0gICAgICAgICAgICBlbGlmIHNl
bGYuc2tpcGtleXM6CisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCAoaW50LCBsb25n
KSk6CisgICAgICAgICAgICAgICAga2V5ID0gc3RyKGtleSkKKyAgICAgICAgICAgIGVsaWYgX3Nr
aXBrZXlzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5ICVyIGlzIG5vdCBhIHN0cmluZyIgJSAo
a2V5LCkpCisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXkgIiArIHJlcHIoa2V5
KSArICIgaXMgbm90IGEgc3RyaW5nIikKICAgICAgICAgICAgIGlmIGZpcnN0OgogICAgICAgICAg
ICAgICAgIGZpcnN0ID0gRmFsc2UKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAg
eWllbGQgaXRlbV9zZXBhcmF0b3IKLSAgICAgICAgICAgIHlpZWxkIGVuY29kZXIoa2V5KQotICAg
ICAgICAgICAgeWllbGQga2V5X3NlcGFyYXRvcgotICAgICAgICAgICAgZm9yIGNodW5rIGluIHNl
bGYuX2l0ZXJlbmNvZGUodmFsdWUsIG1hcmtlcnMpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNo
dW5rCisgICAgICAgICAgICB5aWVsZCBfZW5jb2RlcihrZXkpCisgICAgICAgICAgICB5aWVsZCBf
a2V5X3NlcGFyYXRvcgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmlu
Zyk6CisgICAgICAgICAgICAgICAgeWllbGQgX2VuY29kZXIodmFsdWUpCisgICAgICAgICAgICBl
bGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgeWllbGQgJ251bGwnCisgICAgICAg
ICAgICBlbGlmIHZhbHVlIGlzIFRydWU6CisgICAgICAgICAgICAgICAgeWllbGQgJ3RydWUnCisg
ICAgICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgorICAgICAgICAgICAgICAgIHlpZWxkICdm
YWxzZScKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGludCwgbG9uZykpOgor
ICAgICAgICAgICAgICAgIHlpZWxkIHN0cih2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0
YW5jZSh2YWx1ZSwgZmxvYXQpOgorICAgICAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cih2YWx1
ZSkKKyAgICAgICAgICAgIGVsaWYgX3VzZV9kZWNpbWFsIGFuZCBpc2luc3RhbmNlKHZhbHVlLCBE
ZWNpbWFsKToKKyAgICAgICAgICAgICAgICB5aWVsZCBzdHIodmFsdWUpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkp
OgorICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZV9saXN0KHZhbHVlLCBf
Y3VycmVudF9pbmRlbnRfbGV2ZWwpCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZh
bHVlLCBkaWN0KToKKyAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfZGlj
dCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlKHZhbHVlLCBfY3VycmVudF9p
bmRlbnRfbGV2ZWwpCisgICAgICAgICAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKKyAgICAg
ICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKICAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMg
bm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKLSAg
ICAgICAgICAgIHlpZWxkIHNlbGYuX25ld2xpbmVfaW5kZW50KCkKKyAgICAgICAgICAgIF9jdXJy
ZW50X2luZGVudF9sZXZlbCAtPSAxCisgICAgICAgICAgICB5aWVsZCAnXG4nICsgKF9pbmRlbnQg
KiBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgIHlpZWxkICd9JwogICAgICAgICBpZiBt
YXJrZXJzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZGVsIG1hcmtlcnNbbWFya2VyaWRdCiAK
LSAgICBkZWYgX2l0ZXJlbmNvZGUoc2VsZiwgbywgbWFya2Vycz1Ob25lKToKKyAgICBkZWYgX2l0
ZXJlbmNvZGUobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKToKICAgICAgICAgaWYgaXNpbnN0YW5j
ZShvLCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgIGlmIHNlbGYuZW5zdXJlX2FzY2lpOgotICAg
ICAgICAgICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICBlbmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJpbmcKLSAg
ICAgICAgICAgIF9lbmNvZGluZyA9IHNlbGYuZW5jb2RpbmcKLSAgICAgICAgICAgIGlmIChfZW5j
b2RpbmcgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2Uobywgc3RyKQotICAgICAgICAgICAgICAg
ICAgICBhbmQgbm90IChfbmVlZF91dGY4IGFuZCBfZW5jb2RpbmcgPT0gJ3V0Zi04JykpOgotICAg
ICAgICAgICAgICAgIG8gPSBvLmRlY29kZShfZW5jb2RpbmcpCi0gICAgICAgICAgICB5aWVsZCBl
bmNvZGVyKG8pCisgICAgICAgICAgICB5aWVsZCBfZW5jb2RlcihvKQogICAgICAgICBlbGlmIG8g
aXMgTm9uZToKICAgICAgICAgICAgIHlpZWxkICdudWxsJwogICAgICAgICBlbGlmIG8gaXMgVHJ1
ZToKQEAgLTI4OSw4MyArNDc5LDI1IEBAIGNsYXNzIEpTT05FbmNvZGVyKG9iamVjdCk6CiAgICAg
ICAgIGVsaWYgaXNpbnN0YW5jZShvLCAoaW50LCBsb25nKSk6CiAgICAgICAgICAgICB5aWVsZCBz
dHIobykKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGZsb2F0KToKLSAgICAgICAgICAgIHlp
ZWxkIGZsb2F0c3RyKG8sIHNlbGYuYWxsb3dfbmFuKQorICAgICAgICAgICAgeWllbGQgX2Zsb2F0
c3RyKG8pCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCAobGlzdCwgdHVwbGUpKToKLSAgICAg
ICAgICAgIGZvciBjaHVuayBpbiBzZWxmLl9pdGVyZW5jb2RlX2xpc3QobywgbWFya2Vycyk6Cisg
ICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGVfbGlzdChvLCBfY3VycmVudF9pbmRl
bnRfbGV2ZWwpOgogICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCiAgICAgICAgIGVsaWYgaXNp
bnN0YW5jZShvLCBkaWN0KToKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBzZWxmLl9pdGVyZW5j
b2RlX2RpY3QobywgbWFya2Vycyk6CisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNv
ZGVfZGljdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgogICAgICAgICAgICAgICAgIHlpZWxk
IGNodW5rCisgICAgICAgIGVsaWYgX3VzZV9kZWNpbWFsIGFuZCBpc2luc3RhbmNlKG8sIERlY2lt
YWwpOgorICAgICAgICAgICAgeWllbGQgc3RyKG8pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIG1hcmtlcmlkID0gaWQo
bykKICAgICAgICAgICAgICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgogICAgICAgICAgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQog
ICAgICAgICAgICAgICAgIG1hcmtlcnNbbWFya2VyaWRdID0gbwotICAgICAgICAgICAgZm9yIGNo
dW5rIGluIHNlbGYuX2l0ZXJlbmNvZGVfZGVmYXVsdChvLCBtYXJrZXJzKToKKyAgICAgICAgICAg
IG8gPSBfZGVmYXVsdChvKQorICAgICAgICAgICAgZm9yIGNodW5rIGluIF9pdGVyZW5jb2RlKG8s
IF9jdXJyZW50X2luZGVudF9sZXZlbCk6CiAgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKICAg
ICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgZGVsIG1h
cmtlcnNbbWFya2VyaWRdCiAKLSAgICBkZWYgX2l0ZXJlbmNvZGVfZGVmYXVsdChzZWxmLCBvLCBt
YXJrZXJzPU5vbmUpOgotICAgICAgICBuZXdvYmogPSBzZWxmLmRlZmF1bHQobykKLSAgICAgICAg
cmV0dXJuIHNlbGYuX2l0ZXJlbmNvZGUobmV3b2JqLCBtYXJrZXJzKQotCi0gICAgZGVmIGRlZmF1
bHQoc2VsZiwgbyk6Ci0gICAgICAgICIiIgotICAgICAgICBJbXBsZW1lbnQgdGhpcyBtZXRob2Qg
aW4gYSBzdWJjbGFzcyBzdWNoIHRoYXQgaXQgcmV0dXJucwotICAgICAgICBhIHNlcmlhbGl6YWJs
ZSBvYmplY3QgZm9yIGBgb2BgLCBvciBjYWxscyB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbgotICAg
ICAgICAodG8gcmFpc2UgYSBgYFR5cGVFcnJvcmBgKS4KLQotICAgICAgICBGb3IgZXhhbXBsZSwg
dG8gc3VwcG9ydCBhcmJpdHJhcnkgaXRlcmF0b3JzLCB5b3UgY291bGQKLSAgICAgICAgaW1wbGVt
ZW50IGRlZmF1bHQgbGlrZSB0aGlzOjoKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmIGRl
ZmF1bHQoc2VsZiwgbyk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAg
ICBpdGVyYWJsZSA9IGl0ZXIobykKLSAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgot
ICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGxpc3QoaXRlcmFibGUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEpTT05FbmNvZGVyLmRlZmF1bHQoc2VsZiwgbykKLSAgICAgICAgIiIiCi0gICAgICAgIHJhaXNl
IFR5cGVFcnJvcigiJXIgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlIiAlIChvLCkpCi0KLSAgICBk
ZWYgZW5jb2RlKHNlbGYsIG8pOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJuIGEgSlNPTiBz
dHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gZGF0YSBzdHJ1Y3R1cmUuCi0KLSAgICAg
ICAgPj4+IEpTT05FbmNvZGVyKCkuZW5jb2RlKHsiZm9vIjogWyJiYXIiLCAiYmF6Il19KQotICAg
ICAgICAneyJmb28iOlsiYmFyIiwgImJheiJdfScKLSAgICAgICAgIiIiCi0gICAgICAgICMgVGhp
cyBpcyBmb3IgZXh0cmVtZWx5IHNpbXBsZSBjYXNlcyBhbmQgYmVuY2htYXJrcy4uLgotICAgICAg
ICBpZiBpc2luc3RhbmNlKG8sIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5j
ZShvLCBzdHIpOgotICAgICAgICAgICAgICAgIF9lbmNvZGluZyA9IHNlbGYuZW5jb2RpbmcKLSAg
ICAgICAgICAgICAgICBpZiAoX2VuY29kaW5nIGlzIG5vdCBOb25lIAotICAgICAgICAgICAgICAg
ICAgICAgICAgYW5kIG5vdCAoX2VuY29kaW5nID09ICd1dGYtOCcgYW5kIF9uZWVkX3V0ZjgpKToK
LSAgICAgICAgICAgICAgICAgICAgbyA9IG8uZGVjb2RlKF9lbmNvZGluZykKLSAgICAgICAgICAg
IHJldHVybiBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaShvKQotICAgICAgICAjIFRoaXMgZG9lc24n
dCBwYXNzIHRoZSBpdGVyYXRvciBkaXJlY3RseSB0byAnJy5qb2luKCkgYmVjYXVzZSBpdAotICAg
ICAgICAjIHN1Y2tzIGF0IHJlcG9ydGluZyBleGNlcHRpb25zLiAgSXQncyBnb2luZyB0byBkbyB0
aGlzIGludGVybmFsbHkKLSAgICAgICAgIyBhbnl3YXkgYmVjYXVzZSBpdCB1c2VzIFB5U2VxdWVu
Y2VfRmFzdCBvciBzaW1pbGFyLgotICAgICAgICBjaHVua3MgPSBsaXN0KHNlbGYuaXRlcmVuY29k
ZShvKSkKLSAgICAgICAgcmV0dXJuICcnLmpvaW4oY2h1bmtzKQotCi0gICAgZGVmIGl0ZXJlbmNv
ZGUoc2VsZiwgbyk6Ci0gICAgICAgICIiIgotICAgICAgICBFbmNvZGUgdGhlIGdpdmVuIG9iamVj
dCBhbmQgeWllbGQgZWFjaCBzdHJpbmcKLSAgICAgICAgcmVwcmVzZW50YXRpb24gYXMgYXZhaWxh
YmxlLgotICAgICAgICAKLSAgICAgICAgRm9yIGV4YW1wbGU6OgotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBmb3IgY2h1bmsgaW4gSlNPTkVuY29kZXIoKS5pdGVyZW5jb2RlKGJpZ29iamVjdCk6
Ci0gICAgICAgICAgICAgICAgbXlzb2NrZXQud3JpdGUoY2h1bmspCi0gICAgICAgICIiIgotICAg
ICAgICBpZiBzZWxmLmNoZWNrX2NpcmN1bGFyOgotICAgICAgICAgICAgbWFya2VycyA9IHt9Ci0g
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYXJrZXJzID0gTm9uZQotICAgICAgICByZXR1cm4g
c2VsZi5faXRlcmVuY29kZShvLCBtYXJrZXJzKQotCi1fX2FsbF9fID0gWydKU09ORW5jb2Rlcidd
CisgICAgcmV0dXJuIF9pdGVyZW5jb2RlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9vcmRlcmVkX2RpY3QucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9vcmRlcmVkX2RpY3QucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdhZDg4OAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL29yZGVyZWRfZGljdC5w
eQpAQCAtMCwwICsxLDExOSBAQAorIiIiRHJvcC1pbiByZXBsYWNlbWVudCBmb3IgY29sbGVjdGlv
bnMuT3JkZXJlZERpY3QgYnkgUmF5bW9uZCBIZXR0aW5nZXIKKworaHR0cDovL2NvZGUuYWN0aXZl
c3RhdGUuY29tL3JlY2lwZXMvNTc2NjkzLworCisiIiIKK2Zyb20gVXNlckRpY3QgaW1wb3J0IERp
Y3RNaXhpbgorCisjIE1vZGlmaWVkIGZyb20gb3JpZ2luYWwgdG8gc3VwcG9ydCBQeXRob24gMi40
LCBzZWUKKyMgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3NpbXBsZWpzb24vaXNzdWVzL2RldGFp
bD9pZD01MwordHJ5OgorICAgIGFsbAorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBkZWYgYWxsKHNl
cSk6CisgICAgICAgIGZvciBlbGVtIGluIHNlcToKKyAgICAgICAgICAgIGlmIG5vdCBlbGVtOgor
ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFz
cyBPcmRlcmVkRGljdChkaWN0LCBEaWN0TWl4aW4pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
ICphcmdzLCAqKmt3ZHMpOgorICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAg
cmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUg
bGVuKGFyZ3MpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9fZW5kCisgICAgICAg
IGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuY2xlYXIoKQorICAgICAg
ICBzZWxmLnVwZGF0ZSgqYXJncywgKiprd2RzKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAg
ICAgICBzZWxmLl9fZW5kID0gZW5kID0gW10KKyAgICAgICAgZW5kICs9IFtOb25lLCBlbmQsIGVu
ZF0gICAgICAgICAjIHNlbnRpbmVsIG5vZGUgZm9yIGRvdWJseSBsaW5rZWQgbGlzdAorICAgICAg
ICBzZWxmLl9fbWFwID0ge30gICAgICAgICAgICAgICAgICMga2V5IC0tPiBba2V5LCBwcmV2LCBu
ZXh0XQorICAgICAgICBkaWN0LmNsZWFyKHNlbGYpCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2Vs
Ziwga2V5LCB2YWx1ZSk6CisgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAg
IGVuZCA9IHNlbGYuX19lbmQKKyAgICAgICAgICAgIGN1cnIgPSBlbmRbMV0KKyAgICAgICAgICAg
IGN1cnJbMl0gPSBlbmRbMV0gPSBzZWxmLl9fbWFwW2tleV0gPSBba2V5LCBjdXJyLCBlbmRdCisg
ICAgICAgIGRpY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSkKKworICAgIGRlZiBfX2Rl
bGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBkaWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSkK
KyAgICAgICAga2V5LCBwcmV2LCBuZXh0ID0gc2VsZi5fX21hcC5wb3Aoa2V5KQorICAgICAgICBw
cmV2WzJdID0gbmV4dAorICAgICAgICBuZXh0WzFdID0gcHJldgorCisgICAgZGVmIF9faXRlcl9f
KHNlbGYpOgorICAgICAgICBlbmQgPSBzZWxmLl9fZW5kCisgICAgICAgIGN1cnIgPSBlbmRbMl0K
KyAgICAgICAgd2hpbGUgY3VyciBpcyBub3QgZW5kOgorICAgICAgICAgICAgeWllbGQgY3Vyclsw
XQorICAgICAgICAgICAgY3VyciA9IGN1cnJbMl0KKworICAgIGRlZiBfX3JldmVyc2VkX18oc2Vs
Zik6CisgICAgICAgIGVuZCA9IHNlbGYuX19lbmQKKyAgICAgICAgY3VyciA9IGVuZFsxXQorICAg
ICAgICB3aGlsZSBjdXJyIGlzIG5vdCBlbmQ6CisgICAgICAgICAgICB5aWVsZCBjdXJyWzBdCisg
ICAgICAgICAgICBjdXJyID0gY3VyclsxXQorCisgICAgZGVmIHBvcGl0ZW0oc2VsZiwgbGFzdD1U
cnVlKToKKyAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcign
ZGljdGlvbmFyeSBpcyBlbXB0eScpCisgICAgICAgICMgTW9kaWZpZWQgZnJvbSBvcmlnaW5hbCB0
byBzdXBwb3J0IFB5dGhvbiAyLjQsIHNlZQorICAgICAgICAjIGh0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC9zaW1wbGVqc29uL2lzc3Vlcy9kZXRhaWw/aWQ9NTMKKyAgICAgICAgaWYgbGFzdDoKKyAg
ICAgICAgICAgIGtleSA9IHJldmVyc2VkKHNlbGYpLm5leHQoKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAga2V5ID0gaXRlcihzZWxmKS5uZXh0KCkKKyAgICAgICAgdmFsdWUgPSBzZWxmLnBv
cChrZXkpCisgICAgICAgIHJldHVybiBrZXksIHZhbHVlCisKKyAgICBkZWYgX19yZWR1Y2VfXyhz
ZWxmKToKKyAgICAgICAgaXRlbXMgPSBbW2ssIHNlbGZba11dIGZvciBrIGluIHNlbGZdCisgICAg
ICAgIHRtcCA9IHNlbGYuX19tYXAsIHNlbGYuX19lbmQKKyAgICAgICAgZGVsIHNlbGYuX19tYXAs
IHNlbGYuX19lbmQKKyAgICAgICAgaW5zdF9kaWN0ID0gdmFycyhzZWxmKS5jb3B5KCkKKyAgICAg
ICAgc2VsZi5fX21hcCwgc2VsZi5fX2VuZCA9IHRtcAorICAgICAgICBpZiBpbnN0X2RpY3Q6Cisg
ICAgICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCAoaXRlbXMsKSwgaW5zdF9kaWN0KQor
ICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChpdGVtcywpCisKKyAgICBkZWYga2V5cyhz
ZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZikKKworICAgIHNldGRlZmF1bHQgPSBEaWN0
TWl4aW4uc2V0ZGVmYXVsdAorICAgIHVwZGF0ZSA9IERpY3RNaXhpbi51cGRhdGUKKyAgICBwb3Ag
PSBEaWN0TWl4aW4ucG9wCisgICAgdmFsdWVzID0gRGljdE1peGluLnZhbHVlcworICAgIGl0ZW1z
ID0gRGljdE1peGluLml0ZW1zCisgICAgaXRlcmtleXMgPSBEaWN0TWl4aW4uaXRlcmtleXMKKyAg
ICBpdGVydmFsdWVzID0gRGljdE1peGluLml0ZXJ2YWx1ZXMKKyAgICBpdGVyaXRlbXMgPSBEaWN0
TWl4aW4uaXRlcml0ZW1zCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIG5v
dCBzZWxmOgorICAgICAgICAgICAgcmV0dXJuICclcygpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25h
bWVfXywpCisgICAgICAgIHJldHVybiAnJXMoJXIpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVf
Xywgc2VsZi5pdGVtcygpKQorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9fY2xhc3NfXyhzZWxmKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21rZXlz
KGNscywgaXRlcmFibGUsIHZhbHVlPU5vbmUpOgorICAgICAgICBkID0gY2xzKCkKKyAgICAgICAg
Zm9yIGtleSBpbiBpdGVyYWJsZToKKyAgICAgICAgICAgIGRba2V5XSA9IHZhbHVlCisgICAgICAg
IHJldHVybiBkCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShvdGhlciwgT3JkZXJlZERpY3QpOgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxm
KT09bGVuKG90aGVyKSBhbmQgXAorICAgICAgICAgICAgICAgICAgIGFsbChwPT1xIGZvciBwLCBx
IGluICB6aXAoc2VsZi5pdGVtcygpLCBvdGhlci5pdGVtcygpKSkKKyAgICAgICAgcmV0dXJuIGRp
Y3QuX19lcV9fKHNlbGYsIG90aGVyKQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Cisg
ICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vc2Nhbm5lci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL3NjYW5uZXIucHkKaW5kZXggNjRmNDk5
OS4uNTQ1OTNhMyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3NpbXBsZWpzb24vc2Nhbm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvc2ltcGxlanNvbi9zY2FubmVyLnB5CkBAIC0xLDYzICsxLDc3IEBACisiIiJKU09OIHRv
a2VuIHNjYW5uZXIKICIiIgotSXRlcmF0b3IgYmFzZWQgc3JlIHRva2VuIHNjYW5uZXIKLSIiIgot
aW1wb3J0IHNyZV9wYXJzZSwgc3JlX2NvbXBpbGUsIHNyZV9jb25zdGFudHMKLWZyb20gc3JlX2Nv
bnN0YW50cyBpbXBvcnQgQlJBTkNILCBTVUJQQVRURVJOCi1mcm9tIHJlIGltcG9ydCBWRVJCT1NF
LCBNVUxUSUxJTkUsIERPVEFMTAogaW1wb3J0IHJlCitkZWYgX2ltcG9ydF9jX21ha2Vfc2Nhbm5l
cigpOgorICAgIHRyeToKKyAgICAgICAgZnJvbSBzaW1wbGVqc29uLl9zcGVlZHVwcyBpbXBvcnQg
bWFrZV9zY2FubmVyCisgICAgICAgIHJldHVybiBtYWtlX3NjYW5uZXIKKyAgICBleGNlcHQgSW1w
b3J0RXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCitjX21ha2Vfc2Nhbm5lciA9IF9pbXBvcnRf
Y19tYWtlX3NjYW5uZXIoKQorCitfX2FsbF9fID0gWydtYWtlX3NjYW5uZXInXQorCitOVU1CRVJf
UkUgPSByZS5jb21waWxlKAorICAgIHInKC0/KD86MHxbMS05XVxkKikpKFwuXGQrKT8oW2VFXVst
K10/XGQrKT8nLAorICAgIChyZS5WRVJCT1NFIHwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKSkK
KworZGVmIHB5X21ha2Vfc2Nhbm5lcihjb250ZXh0KToKKyAgICBwYXJzZV9vYmplY3QgPSBjb250
ZXh0LnBhcnNlX29iamVjdAorICAgIHBhcnNlX2FycmF5ID0gY29udGV4dC5wYXJzZV9hcnJheQor
ICAgIHBhcnNlX3N0cmluZyA9IGNvbnRleHQucGFyc2Vfc3RyaW5nCisgICAgbWF0Y2hfbnVtYmVy
ID0gTlVNQkVSX1JFLm1hdGNoCisgICAgZW5jb2RpbmcgPSBjb250ZXh0LmVuY29kaW5nCisgICAg
c3RyaWN0ID0gY29udGV4dC5zdHJpY3QKKyAgICBwYXJzZV9mbG9hdCA9IGNvbnRleHQucGFyc2Vf
ZmxvYXQKKyAgICBwYXJzZV9pbnQgPSBjb250ZXh0LnBhcnNlX2ludAorICAgIHBhcnNlX2NvbnN0
YW50ID0gY29udGV4dC5wYXJzZV9jb25zdGFudAorICAgIG9iamVjdF9ob29rID0gY29udGV4dC5v
YmplY3RfaG9vaworICAgIG9iamVjdF9wYWlyc19ob29rID0gY29udGV4dC5vYmplY3RfcGFpcnNf
aG9vaworICAgIG1lbW8gPSBjb250ZXh0Lm1lbW8KKworICAgIGRlZiBfc2Nhbl9vbmNlKHN0cmlu
ZywgaWR4KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV4dGNoYXIgPSBzdHJpbmdbaWR4
XQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVy
YXRpb24KKworICAgICAgICBpZiBuZXh0Y2hhciA9PSAnIic6CisgICAgICAgICAgICByZXR1cm4g
cGFyc2Vfc3RyaW5nKHN0cmluZywgaWR4ICsgMSwgZW5jb2RpbmcsIHN0cmljdCkKKyAgICAgICAg
ZWxpZiBuZXh0Y2hhciA9PSAneyc6CisgICAgICAgICAgICByZXR1cm4gcGFyc2Vfb2JqZWN0KChz
dHJpbmcsIGlkeCArIDEpLCBlbmNvZGluZywgc3RyaWN0LAorICAgICAgICAgICAgICAgIF9zY2Fu
X29uY2UsIG9iamVjdF9ob29rLCBvYmplY3RfcGFpcnNfaG9vaywgbWVtbykKKyAgICAgICAgZWxp
ZiBuZXh0Y2hhciA9PSAnWyc6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VfYXJyYXkoKHN0cmlu
ZywgaWR4ICsgMSksIF9zY2FuX29uY2UpCisgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ24nIGFu
ZCBzdHJpbmdbaWR4OmlkeCArIDRdID09ICdudWxsJzoKKyAgICAgICAgICAgIHJldHVybiBOb25l
LCBpZHggKyA0CisgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ3QnIGFuZCBzdHJpbmdbaWR4Omlk
eCArIDRdID09ICd0cnVlJzoKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBpZHggKyA0CisgICAg
ICAgIGVsaWYgbmV4dGNoYXIgPT0gJ2YnIGFuZCBzdHJpbmdbaWR4OmlkeCArIDVdID09ICdmYWxz
ZSc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIGlkeCArIDUKKworICAgICAgICBtID0gbWF0
Y2hfbnVtYmVyKHN0cmluZywgaWR4KQorICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgaW50ZWdlciwgZnJhYywgZXhwID0gbS5ncm91cHMoKQorICAgICAgICAgICAgaWYgZnJh
YyBvciBleHA6CisgICAgICAgICAgICAgICAgcmVzID0gcGFyc2VfZmxvYXQoaW50ZWdlciArIChm
cmFjIG9yICcnKSArIChleHAgb3IgJycpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICByZXMgPSBwYXJzZV9pbnQoaW50ZWdlcikKKyAgICAgICAgICAgIHJldHVybiByZXMsIG0u
ZW5kKCkKKyAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnTicgYW5kIHN0cmluZ1tpZHg6aWR4ICsg
M10gPT0gJ05hTic6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJ05hTicpLCBp
ZHggKyAzCisgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ0knIGFuZCBzdHJpbmdbaWR4OmlkeCAr
IDhdID09ICdJbmZpbml0eSc6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJ0lu
ZmluaXR5JyksIGlkeCArIDgKKyAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnLScgYW5kIHN0cmlu
Z1tpZHg6aWR4ICsgOV0gPT0gJy1JbmZpbml0eSc6CisgICAgICAgICAgICByZXR1cm4gcGFyc2Vf
Y29uc3RhbnQoJy1JbmZpbml0eScpLCBpZHggKyA5CisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyAgICBkZWYgc2Nhbl9vbmNlKHN0cmluZywgaWR4KToK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIF9zY2FuX29uY2Uoc3RyaW5nLCBpZHgp
CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBtZW1vLmNsZWFyKCkKKworICAgIHJldHVy
biBzY2FuX29uY2UKIAotX19hbGxfXyA9IFsnU2Nhbm5lcicsICdwYXR0ZXJuJ10KLQotRkxBR1Mg
PSAoVkVSQk9TRSB8IE1VTFRJTElORSB8IERPVEFMTCkKLWNsYXNzIFNjYW5uZXIob2JqZWN0KToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgbGV4aWNvbiwgZmxhZ3M9RkxBR1MpOgotICAgICAgICBz
ZWxmLmFjdGlvbnMgPSBbTm9uZV0KLSAgICAgICAgIyBjb21iaW5lIHBocmFzZXMgaW50byBhIGNv
bXBvdW5kIHBhdHRlcm4KLSAgICAgICAgcyA9IHNyZV9wYXJzZS5QYXR0ZXJuKCkKLSAgICAgICAg
cy5mbGFncyA9IGZsYWdzCi0gICAgICAgIHAgPSBbXQotICAgICAgICBmb3IgaWR4LCB0b2tlbiBp
biBlbnVtZXJhdGUobGV4aWNvbik6Ci0gICAgICAgICAgICBwaHJhc2UgPSB0b2tlbi5wYXR0ZXJu
Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3VicGF0dGVybiA9IHNyZV9wYXJz
ZS5TdWJQYXR0ZXJuKHMsCi0gICAgICAgICAgICAgICAgICAgIFsoU1VCUEFUVEVSTiwgKGlkeCAr
IDEsIHNyZV9wYXJzZS5wYXJzZShwaHJhc2UsIGZsYWdzKSkpXSkKLSAgICAgICAgICAgIGV4Y2Vw
dCBzcmVfY29uc3RhbnRzLmVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAg
ICBwLmFwcGVuZChzdWJwYXR0ZXJuKQotICAgICAgICAgICAgc2VsZi5hY3Rpb25zLmFwcGVuZCh0
b2tlbikKLQotICAgICAgICBwID0gc3JlX3BhcnNlLlN1YlBhdHRlcm4ocywgWyhCUkFOQ0gsIChO
b25lLCBwKSldKQotICAgICAgICBzZWxmLnNjYW5uZXIgPSBzcmVfY29tcGlsZS5jb21waWxlKHAp
Ci0KLQotICAgIGRlZiBpdGVyc2NhbihzZWxmLCBzdHJpbmcsIGlkeD0wLCBjb250ZXh0PU5vbmUp
OgotICAgICAgICAiIiIKLSAgICAgICAgWWllbGQgbWF0Y2gsIGVuZF9pZHggZm9yIGVhY2ggbWF0
Y2gKLSAgICAgICAgIiIiCi0gICAgICAgIG1hdGNoID0gc2VsZi5zY2FubmVyLnNjYW5uZXIoc3Ry
aW5nLCBpZHgpLm1hdGNoCi0gICAgICAgIGFjdGlvbnMgPSBzZWxmLmFjdGlvbnMKLSAgICAgICAg
bGFzdGVuZCA9IGlkeAotICAgICAgICBlbmQgPSBsZW4oc3RyaW5nKQotICAgICAgICB3aGlsZSBU
cnVlOgotICAgICAgICAgICAgbSA9IG1hdGNoKCkKLSAgICAgICAgICAgIGlmIG0gaXMgTm9uZToK
LSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgbWF0Y2hiZWdpbiwgbWF0Y2hlbmQg
PSBtLnNwYW4oKQotICAgICAgICAgICAgaWYgbGFzdGVuZCA9PSBtYXRjaGVuZDoKLSAgICAgICAg
ICAgICAgICBicmVhawotICAgICAgICAgICAgYWN0aW9uID0gYWN0aW9uc1ttLmxhc3RpbmRleF0K
LSAgICAgICAgICAgIGlmIGFjdGlvbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBydmFs
LCBuZXh0X3BvcyA9IGFjdGlvbihtLCBjb250ZXh0KQotICAgICAgICAgICAgICAgIGlmIG5leHRf
cG9zIGlzIG5vdCBOb25lIGFuZCBuZXh0X3BvcyAhPSBtYXRjaGVuZDoKLSAgICAgICAgICAgICAg
ICAgICAgIyAiZmFzdCBmb3J3YXJkIiB0aGUgc2Nhbm5lcgotICAgICAgICAgICAgICAgICAgICBt
YXRjaGVuZCA9IG5leHRfcG9zCi0gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5zY2Fu
bmVyLnNjYW5uZXIoc3RyaW5nLCBtYXRjaGVuZCkubWF0Y2gKLSAgICAgICAgICAgICAgICB5aWVs
ZCBydmFsLCBtYXRjaGVuZAotICAgICAgICAgICAgbGFzdGVuZCA9IG1hdGNoZW5kCi0gICAgICAg
ICAgICAKLWRlZiBwYXR0ZXJuKHBhdHRlcm4sIGZsYWdzPUZMQUdTKToKLSAgICBkZWYgZGVjb3Jh
dG9yKGZuKToKLSAgICAgICAgZm4ucGF0dGVybiA9IHBhdHRlcm4KLSAgICAgICAgZm4ucmVnZXgg
PSByZS5jb21waWxlKHBhdHRlcm4sIGZsYWdzKQotICAgICAgICByZXR1cm4gZm4KLSAgICByZXR1
cm4gZGVjb3JhdG9yCittYWtlX3NjYW5uZXIgPSBjX21ha2Vfc2Nhbm5lciBvciBweV9tYWtlX3Nj
YW5uZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1w
bGVqc29uL3Rvb2wucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxl
anNvbi90b29sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMzcwZGIK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2lt
cGxlanNvbi90b29sLnB5CkBAIC0wLDAgKzEsMzkgQEAKK3IiIiJDb21tYW5kLWxpbmUgdG9vbCB0
byB2YWxpZGF0ZSBhbmQgcHJldHR5LXByaW50IEpTT04KKworVXNhZ2U6OgorCisgICAgJCBlY2hv
ICd7Impzb24iOiJvYmoifScgfCBweXRob24gLW0gc2ltcGxlanNvbi50b29sCisgICAgeworICAg
ICAgICAianNvbiI6ICJvYmoiCisgICAgfQorICAgICQgZWNobyAneyAxLjI6My40fScgfCBweXRo
b24gLW0gc2ltcGxlanNvbi50b29sCisgICAgRXhwZWN0aW5nIHByb3BlcnR5IG5hbWU6IGxpbmUg
MSBjb2x1bW4gMiAoY2hhciAyKQorCisiIiIKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaW1wbGVqc29u
IGFzIGpzb24KKworZGVmIG1haW4oKToKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6CisgICAg
ICAgIGluZmlsZSA9IHN5cy5zdGRpbgorICAgICAgICBvdXRmaWxlID0gc3lzLnN0ZG91dAorICAg
IGVsaWYgbGVuKHN5cy5hcmd2KSA9PSAyOgorICAgICAgICBpbmZpbGUgPSBvcGVuKHN5cy5hcmd2
WzFdLCAncmInKQorICAgICAgICBvdXRmaWxlID0gc3lzLnN0ZG91dAorICAgIGVsaWYgbGVuKHN5
cy5hcmd2KSA9PSAzOgorICAgICAgICBpbmZpbGUgPSBvcGVuKHN5cy5hcmd2WzFdLCAncmInKQor
ICAgICAgICBvdXRmaWxlID0gb3BlbihzeXMuYXJndlsyXSwgJ3diJykKKyAgICBlbHNlOgorICAg
ICAgICByYWlzZSBTeXN0ZW1FeGl0KHN5cy5hcmd2WzBdICsgIiBbaW5maWxlIFtvdXRmaWxlXV0i
KQorICAgIHRyeToKKyAgICAgICAgb2JqID0ganNvbi5sb2FkKGluZmlsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9iamVjdF9wYWlyc19ob29rPWpzb24uT3JkZXJlZERpY3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VfZGVjaW1hbD1UcnVlKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9y
LCBlOgorICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KGUpCisgICAganNvbi5kdW1wKG9iaiwgb3V0
ZmlsZSwgc29ydF9rZXlzPVRydWUsIGluZGVudD0nICAgICcsIHVzZV9kZWNpbWFsPVRydWUpCisg
ICAgb3V0ZmlsZS53cml0ZSgnXG4nKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Cisg
ICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVy
cy9yZWZsZWN0aW9uaGFuZGxlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2
ZXJzL3JlZmxlY3Rpb25oYW5kbGVyLnB5CmluZGV4IDk2Yjg1NDcuLjA2YmU4YWYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL3JlZmxlY3Rpb25oYW5kbGVy
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL3JlZmxlY3Rpb25o
YW5kbGVyLnB5CkBAIC0zNiw2ICszNiw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKIAogaW1wb3J0
IEJhc2VIVFRQU2VydmVyCiAKK2ltcG9ydCBjZ2kKIGltcG9ydCBjb2RlY3MKIGltcG9ydCBkYXRl
dGltZQogaW1wb3J0IGZubWF0Y2gKQEAgLTYzLDcgKzY0LDcgQEAgY2xhc3MgUmVmbGVjdGlvbkhh
bmRsZXIoQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CiAgICAgZGVmIF9o
YW5kbGVfcmVxdWVzdChzZWxmKToKICAgICAgICAgaWYgIj8iIGluIHNlbGYucGF0aDoKICAgICAg
ICAgICAgIHBhdGgsIHF1ZXJ5X3N0cmluZyA9IHNlbGYucGF0aC5zcGxpdCgiPyIsIDEpCi0gICAg
ICAgICAgICBzZWxmLnF1ZXJ5ID0gdXJscGFyc2UucGFyc2VfcXMocXVlcnlfc3RyaW5nKQorICAg
ICAgICAgICAgc2VsZi5xdWVyeSA9IGNnaS5wYXJzZV9xcyhxdWVyeV9zdHJpbmcpCiAgICAgICAg
IGVsc2U6CiAgICAgICAgICAgICBwYXRoID0gc2VsZi5wYXRoCiAgICAgICAgICAgICBzZWxmLnF1
ZXJ5ID0ge30KLS0gCjEuNy41LjQ=
</data>

          </attachment>
      

    </bug>

</bugzilla>