<?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>78164</bug_id>
          
          <creation_ts>2012-02-08 15:28:53 -0800</creation_ts>
          <short_desc>Remove simplejson because it&apos;s no longer used by webkitpy</short_desc>
          <delta_ts>2012-02-20 20:13:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>71593</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>552545</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-08 15:28:53 -0800</bug_when>
    <thetext>Remove simplejson because it&apos;s no longer used by webkitpy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552548</commentid>
    <comment_count>1</comment_count>
      <attachid>126164</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-08 15:29:31 -0800</bug_when>
    <thetext>Created attachment 126164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552554</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-08 15:35:33 -0800</bug_when>
    <thetext>Committed r107141: &lt;http://trac.webkit.org/changeset/107141&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560232</commentid>
    <comment_count>3</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-20 08:14:48 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Committed r107141: &lt;http://trac.webkit.org/changeset/107141&gt;

Reopen, because this change broke the unittest of master.cfg:
File &quot;./mastercfg_unittest.py&quot;, line 31, in _add_dependant_modules_to_sys_modules
    from webkitpy.thirdparty import simplejson
ImportError: cannot import name simplejson

Should we revert this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560572</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-20 19:55:52 -0800</bug_when>
    <thetext>Nope.

mastercfg_unittest should be changed to just import the built-in version of json.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560584</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-20 20:13:37 -0800</bug_when>
    <thetext>Fix for test in https://bugs.webkit.org/show_bug.cgi?id=79070</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126164</attachid>
            <date>2012-02-08 15:29:31 -0800</date>
            <delta_ts>2012-02-20 08:41:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78164-20120208152930.patch</filename>
            <type>text/plain</type>
            <size>155702</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwNzEzOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDEyLTAyLTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmVtb3ZlIHNpbXBsZWpzb24gYmVjYXVzZSBpdCdzIG5vIGxvbmdlciB1c2VkIGJ5
IHdlYmtpdHB5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFsbCB0aGUgaW1wb3J0ZXJzIG9mIHRoaXMgY29kZSB3ZXJlIHJlbW92ZWQgaW4gYSBwcmV2aW91
cyBwYXRjaC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVq
c29uOiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1w
bGVqc29uL0xJQ0VOU0UudHh0OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS9zaW1wbGVqc29uL1JFQURNRS50eHQ6IFJlbW92ZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vX19pbml0X18ucHk6IFJlbW92ZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vX3NwZWVk
dXBzLmM6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3Np
bXBsZWpzb24vZGVjb2Rlci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvc2ltcGxlanNvbi9lbmNvZGVyLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL2pzb25maWx0ZXIucHk6IFJlbW92
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vb3Jk
ZXJlZF9kaWN0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS9zaW1wbGVqc29uL3NjYW5uZXIucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vdG9vbC5weTogUmVtb3ZlZC4KKwogMjAxMi0w
Mi0wOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIHdlYmtpdHB5
IHN0aWxsIGltcG9ydHMgc2ltcGxlanNvbgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3NpbXBsZWpzb24vTElDRU5TRS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vTElDRU5TRS50eHQJKHJldmlzaW9u
IDEwNzEzNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29u
L0xJQ0VOU0UudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5ICswLDAgQEAKLUNvcHlyaWdodCAo
YykgMjAwNiBCb2IgSXBwb2xpdG8KLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl
ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotdGhpcyBzb2Z0
d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks
IHRvIGRlYWwgaW4KLXRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg
d2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLXVzZSwgY29weSwgbW9kaWZ5LCBtZXJn
ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi1v
ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2Fy
ZSBpcyBmdXJuaXNoZWQgdG8gZG8KLXNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCi1jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y
dGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT
IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5D
TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFksCi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg
TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhF
UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZS
T00sCi1PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF
IE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotU09GVFdBUkUuCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9SRUFETUUudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL1JFQURNRS50eHQJ
KHJldmlzaW9uIDEwNzEzNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9z
aW1wbGVqc29uL1JFQURNRS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzAsMCBAQAotVVJM
OiBodHRwOi8vdW5kZWZpbmVkLm9yZy9weXRob24vI3NpbXBsZWpzb24KLVZlcnNpb246IDIuMS42
Ci1MaWNlbnNlOiBNSVQKLUxpY2Vuc2UgRmlsZTogTElDRU5TRS50eHQKLQotRGVzY3JpcHRpb246
Ci1zaW1wbGVqc29uIGlzIGEgSlNPTiBlbmNvZGVyIGFuZCBkZWNvZGVyIGZvciBQeXRob24uCi0K
LQotTG9jYWwgTW9kaWZpY2F0aW9uczoKLVJlbW92ZWQgdW5pdCB0ZXN0cyBmcm9tIGN1cnJlbnQg
ZGlzdHJpYnV0aW9uLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3Np
bXBsZWpzb24vX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3NpbXBsZWpzb24vX19pbml0X18ucHkJKHJldmlzaW9uIDEwNzEzNSkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL19faW5pdF9fLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQzOCArMCwwIEBACi1yIiIiSlNPTiAoSmF2YVNjcmlwdCBP
YmplY3QgTm90YXRpb24pIDxodHRwOi8vanNvbi5vcmc+IGlzIGEgc3Vic2V0IG9mCi1KYXZhU2Ny
aXB0IHN5bnRheCAoRUNNQS0yNjIgM3JkIGVkaXRpb24pIHVzZWQgYXMgYSBsaWdodHdlaWdodCBk
YXRhCi1pbnRlcmNoYW5nZSBmb3JtYXQuCi0KLTptb2Q6YHNpbXBsZWpzb25gIGV4cG9zZXMgYW4g
QVBJIGZhbWlsaWFyIHRvIHVzZXJzIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5Ci06bW9kOmBtYXJz
aGFsYCBhbmQgOm1vZDpgcGlja2xlYCBtb2R1bGVzLiBJdCBpcyB0aGUgZXh0ZXJuYWxseSBtYWlu
dGFpbmVkCi12ZXJzaW9uIG9mIHRoZSA6bW9kOmBqc29uYCBsaWJyYXJ5IGNvbnRhaW5lZCBpbiBQ
eXRob24gMi42LCBidXQgbWFpbnRhaW5zCi1jb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNCBh
bmQgUHl0aG9uIDIuNSBhbmQgKGN1cnJlbnRseSkgaGFzCi1zaWduaWZpY2FudCBwZXJmb3JtYW5j
ZSBhZHZhbnRhZ2VzLCBldmVuIHdpdGhvdXQgdXNpbmcgdGhlIG9wdGlvbmFsIEMKLWV4dGVuc2lv
biBmb3Igc3BlZWR1cHMuCi0KLUVuY29kaW5nIGJhc2ljIFB5dGhvbiBvYmplY3QgaGllcmFyY2hp
ZXM6OgotCi0gICAgPj4+IGltcG9ydCBzaW1wbGVqc29uIGFzIGpzb24KLSAgICA+Pj4ganNvbi5k
dW1wcyhbJ2ZvbycsIHsnYmFyJzogKCdiYXonLCBOb25lLCAxLjAsIDIpfV0pCi0gICAgJ1siZm9v
IiwgeyJiYXIiOiBbImJheiIsIG51bGwsIDEuMCwgMl19XScKLSAgICA+Pj4gcHJpbnQganNvbi5k
dW1wcygiXCJmb29cYmFyIikKLSAgICAiXCJmb29cYmFyIgotICAgID4+PiBwcmludCBqc29uLmR1
bXBzKHUnXHUxMjM0JykKLSAgICAiXHUxMjM0IgotICAgID4+PiBwcmludCBqc29uLmR1bXBzKCdc
XCcpCi0gICAgIlxcIgotICAgID4+PiBwcmludCBqc29uLmR1bXBzKHsiYyI6IDAsICJiIjogMCwg
ImEiOiAwfSwgc29ydF9rZXlzPVRydWUpCi0gICAgeyJhIjogMCwgImIiOiAwLCAiYyI6IDB9Ci0g
ICAgPj4+IGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCi0gICAgPj4+IGlvID0gU3RyaW5n
SU8oKQotICAgID4+PiBqc29uLmR1bXAoWydzdHJlYW1pbmcgQVBJJ10sIGlvKQotICAgID4+PiBp
by5nZXR2YWx1ZSgpCi0gICAgJ1sic3RyZWFtaW5nIEFQSSJdJwotCi1Db21wYWN0IGVuY29kaW5n
OjoKLQotICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCi0gICAgPj4+IGpzb24uZHVt
cHMoWzEsMiwzLHsnNCc6IDUsICc2JzogN31dLCBzZXBhcmF0b3JzPSgnLCcsJzonKSkKLSAgICAn
WzEsMiwzLHsiNCI6NSwiNiI6N31dJwotCi1QcmV0dHkgcHJpbnRpbmc6OgotCi0gICAgPj4+IGlt
cG9ydCBzaW1wbGVqc29uIGFzIGpzb24KLSAgICA+Pj4gcyA9IGpzb24uZHVtcHMoeyc0JzogNSwg
JzYnOiA3fSwgc29ydF9rZXlzPVRydWUsIGluZGVudD0nICAgICcpCi0gICAgPj4+IHByaW50ICdc
bicuam9pbihbbC5yc3RyaXAoKSBmb3IgbCBpbiAgcy5zcGxpdGxpbmVzKCldKQotICAgIHsKLSAg
ICAgICAgIjQiOiA1LAotICAgICAgICAiNiI6IDcKLSAgICB9Ci0KLURlY29kaW5nIEpTT046Ogot
Ci0gICAgPj4+IGltcG9ydCBzaW1wbGVqc29uIGFzIGpzb24KLSAgICA+Pj4gb2JqID0gW3UnZm9v
Jywge3UnYmFyJzogW3UnYmF6JywgTm9uZSwgMS4wLCAyXX1dCi0gICAgPj4+IGpzb24ubG9hZHMo
J1siZm9vIiwgeyJiYXIiOlsiYmF6IiwgbnVsbCwgMS4wLCAyXX1dJykgPT0gb2JqCi0gICAgVHJ1
ZQotICAgID4+PiBqc29uLmxvYWRzKCciXFwiZm9vXFxiYXIiJykgPT0gdSciZm9vXHgwOGFyJwot
ICAgIFRydWUKLSAgICA+Pj4gZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KLSAgICA+Pj4g
aW8gPSBTdHJpbmdJTygnWyJzdHJlYW1pbmcgQVBJIl0nKQotICAgID4+PiBqc29uLmxvYWQoaW8p
WzBdID09ICdzdHJlYW1pbmcgQVBJJwotICAgIFRydWUKLQotU3BlY2lhbGl6aW5nIEpTT04gb2Jq
ZWN0IGRlY29kaW5nOjoKLQotICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCi0gICAg
Pj4+IGRlZiBhc19jb21wbGV4KGRjdCk6Ci0gICAgLi4uICAgICBpZiAnX19jb21wbGV4X18nIGlu
IGRjdDoKLSAgICAuLi4gICAgICAgICByZXR1cm4gY29tcGxleChkY3RbJ3JlYWwnXSwgZGN0Wydp
bWFnJ10pCi0gICAgLi4uICAgICByZXR1cm4gZGN0Ci0gICAgLi4uCi0gICAgPj4+IGpzb24ubG9h
ZHMoJ3siX19jb21wbGV4X18iOiB0cnVlLCAicmVhbCI6IDEsICJpbWFnIjogMn0nLAotICAgIC4u
LiAgICAgb2JqZWN0X2hvb2s9YXNfY29tcGxleCkKLSAgICAoMSsyaikKLSAgICA+Pj4gZnJvbSBk
ZWNpbWFsIGltcG9ydCBEZWNpbWFsCi0gICAgPj4+IGpzb24ubG9hZHMoJzEuMScsIHBhcnNlX2Zs
b2F0PURlY2ltYWwpID09IERlY2ltYWwoJzEuMScpCi0gICAgVHJ1ZQotCi1TcGVjaWFsaXppbmcg
SlNPTiBvYmplY3QgZW5jb2Rpbmc6OgotCi0gICAgPj4+IGltcG9ydCBzaW1wbGVqc29uIGFzIGpz
b24KLSAgICA+Pj4gZGVmIGVuY29kZV9jb21wbGV4KG9iaik6Ci0gICAgLi4uICAgICBpZiBpc2lu
c3RhbmNlKG9iaiwgY29tcGxleCk6Ci0gICAgLi4uICAgICAgICAgcmV0dXJuIFtvYmoucmVhbCwg
b2JqLmltYWddCi0gICAgLi4uICAgICByYWlzZSBUeXBlRXJyb3IocmVwcihvKSArICIgaXMgbm90
IEpTT04gc2VyaWFsaXphYmxlIikKLSAgICAuLi4KLSAgICA+Pj4ganNvbi5kdW1wcygyICsgMWos
IGRlZmF1bHQ9ZW5jb2RlX2NvbXBsZXgpCi0gICAgJ1syLjAsIDEuMF0nCi0gICAgPj4+IGpzb24u
SlNPTkVuY29kZXIoZGVmYXVsdD1lbmNvZGVfY29tcGxleCkuZW5jb2RlKDIgKyAxaikKLSAgICAn
WzIuMCwgMS4wXScKLSAgICA+Pj4gJycuam9pbihqc29uLkpTT05FbmNvZGVyKGRlZmF1bHQ9ZW5j
b2RlX2NvbXBsZXgpLml0ZXJlbmNvZGUoMiArIDFqKSkKLSAgICAnWzIuMCwgMS4wXScKLQotCi1V
c2luZyBzaW1wbGVqc29uLnRvb2wgZnJvbSB0aGUgc2hlbGwgdG8gdmFsaWRhdGUgYW5kIHByZXR0
eS1wcmludDo6Ci0KLSAgICAkIGVjaG8gJ3sianNvbiI6Im9iaiJ9JyB8IHB5dGhvbiAtbSBzaW1w
bGVqc29uLnRvb2wKLSAgICB7Ci0gICAgICAgICJqc29uIjogIm9iaiIKLSAgICB9Ci0gICAgJCBl
Y2hvICd7IDEuMjozLjR9JyB8IHB5dGhvbiAtbSBzaW1wbGVqc29uLnRvb2wKLSAgICBFeHBlY3Rp
bmcgcHJvcGVydHkgbmFtZTogbGluZSAxIGNvbHVtbiAyIChjaGFyIDIpCi0iIiIKLV9fdmVyc2lv
bl9fID0gJzIuMS42JwotX19hbGxfXyA9IFsKLSAgICAnZHVtcCcsICdkdW1wcycsICdsb2FkJywg
J2xvYWRzJywKLSAgICAnSlNPTkRlY29kZXInLCAnSlNPTkRlY29kZUVycm9yJywgJ0pTT05FbmNv
ZGVyJywKLSAgICAnT3JkZXJlZERpY3QnLAotXQotCi1fX2F1dGhvcl9fID0gJ0JvYiBJcHBvbGl0
byA8Ym9iQHJlZGl2aS5jb20+JwotCi1mcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKLQotZnJv
bSBkZWNvZGVyIGltcG9ydCBKU09ORGVjb2RlciwgSlNPTkRlY29kZUVycm9yCi1mcm9tIGVuY29k
ZXIgaW1wb3J0IEpTT05FbmNvZGVyCi1kZWYgX2ltcG9ydF9PcmRlcmVkRGljdCgpOgotICAgIGlt
cG9ydCBjb2xsZWN0aW9ucwotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLk9y
ZGVyZWREaWN0Ci0gICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICBpbXBvcnQgb3Jk
ZXJlZF9kaWN0Ci0gICAgICAgIHJldHVybiBvcmRlcmVkX2RpY3QuT3JkZXJlZERpY3QKLU9yZGVy
ZWREaWN0ID0gX2ltcG9ydF9PcmRlcmVkRGljdCgpCi0KLWRlZiBfaW1wb3J0X2NfbWFrZV9lbmNv
ZGVyKCk6Ci0gICAgdHJ5OgotICAgICAgICBmcm9tIHNpbXBsZWpzb24uX3NwZWVkdXBzIGltcG9y
dCBtYWtlX2VuY29kZXIKLSAgICAgICAgcmV0dXJuIG1ha2VfZW5jb2RlcgotICAgIGV4Y2VwdCBJ
bXBvcnRFcnJvcjoKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotX2RlZmF1bHRfZW5jb2RlciA9IEpT
T05FbmNvZGVyKAotICAgIHNraXBrZXlzPUZhbHNlLAotICAgIGVuc3VyZV9hc2NpaT1UcnVlLAot
ICAgIGNoZWNrX2NpcmN1bGFyPVRydWUsCi0gICAgYWxsb3dfbmFuPVRydWUsCi0gICAgaW5kZW50
PU5vbmUsCi0gICAgc2VwYXJhdG9ycz1Ob25lLAotICAgIGVuY29kaW5nPSd1dGYtOCcsCi0gICAg
ZGVmYXVsdD1Ob25lLAotICAgIHVzZV9kZWNpbWFsPUZhbHNlLAotKQotCi1kZWYgZHVtcChvYmos
IGZwLCBza2lwa2V5cz1GYWxzZSwgZW5zdXJlX2FzY2lpPVRydWUsIGNoZWNrX2NpcmN1bGFyPVRy
dWUsCi0gICAgICAgIGFsbG93X25hbj1UcnVlLCBjbHM9Tm9uZSwgaW5kZW50PU5vbmUsIHNlcGFy
YXRvcnM9Tm9uZSwKLSAgICAgICAgZW5jb2Rpbmc9J3V0Zi04JywgZGVmYXVsdD1Ob25lLCB1c2Vf
ZGVjaW1hbD1GYWxzZSwgKiprdyk6Ci0gICAgIiIiU2VyaWFsaXplIGBgb2JqYGAgYXMgYSBKU09O
IGZvcm1hdHRlZCBzdHJlYW0gdG8gYGBmcGBgIChhCi0gICAgYGAud3JpdGUoKWBgLXN1cHBvcnRp
bmcgZmlsZS1saWtlIG9iamVjdCkuCi0KLSAgICBJZiBgYHNraXBrZXlzYGAgaXMgdHJ1ZSB0aGVu
IGBgZGljdGBgIGtleXMgdGhhdCBhcmUgbm90IGJhc2ljIHR5cGVzCi0gICAgKGBgc3RyYGAsIGBg
dW5pY29kZWBgLCBgYGludGBgLCBgYGxvbmdgYCwgYGBmbG9hdGBgLCBgYGJvb2xgYCwgYGBOb25l
YGApCi0gICAgd2lsbCBiZSBza2lwcGVkIGluc3RlYWQgb2YgcmFpc2luZyBhIGBgVHlwZUVycm9y
YGAuCi0KLSAgICBJZiBgYGVuc3VyZV9hc2NpaWBgIGlzIGZhbHNlLCB0aGVuIHRoZSBzb21lIGNo
dW5rcyB3cml0dGVuIHRvIGBgZnBgYAotICAgIG1heSBiZSBgYHVuaWNvZGVgYCBpbnN0YW5jZXMs
IHN1YmplY3QgdG8gbm9ybWFsIFB5dGhvbiBgYHN0cmBgIHRvCi0gICAgYGB1bmljb2RlYGAgY29l
cmNpb24gcnVsZXMuIFVubGVzcyBgYGZwLndyaXRlKClgYCBleHBsaWNpdGx5Ci0gICAgdW5kZXJz
dGFuZHMgYGB1bmljb2RlYGAgKGFzIGluIGBgY29kZWNzLmdldHdyaXRlcigpYGApIHRoaXMgaXMg
bGlrZWx5Ci0gICAgdG8gY2F1c2UgYW4gZXJyb3IuCi0KLSAgICBJZiBgYGNoZWNrX2NpcmN1bGFy
YGAgaXMgZmFsc2UsIHRoZW4gdGhlIGNpcmN1bGFyIHJlZmVyZW5jZSBjaGVjawotICAgIGZvciBj
b250YWluZXIgdHlwZXMgd2lsbCBiZSBza2lwcGVkIGFuZCBhIGNpcmN1bGFyIHJlZmVyZW5jZSB3
aWxsCi0gICAgcmVzdWx0IGluIGFuIGBgT3ZlcmZsb3dFcnJvcmBgIChvciB3b3JzZSkuCi0KLSAg
ICBJZiBgYGFsbG93X25hbmBgIGlzIGZhbHNlLCB0aGVuIGl0IHdpbGwgYmUgYSBgYFZhbHVlRXJy
b3JgYCB0bwotICAgIHNlcmlhbGl6ZSBvdXQgb2YgcmFuZ2UgYGBmbG9hdGBgIHZhbHVlcyAoYGBu
YW5gYCwgYGBpbmZgYCwgYGAtaW5mYGApCi0gICAgaW4gc3RyaWN0IGNvbXBsaWFuY2Ugb2YgdGhl
IEpTT04gc3BlY2lmaWNhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyB0aGUKLSAgICBKYXZhU2NyaXB0
IGVxdWl2YWxlbnRzIChgYE5hTmBgLCBgYEluZmluaXR5YGAsIGBgLUluZmluaXR5YGApLgotCi0g
ICAgSWYgKmluZGVudCogaXMgYSBzdHJpbmcsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQg
b2JqZWN0IG1lbWJlcnMKLSAgICB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggYSBuZXdsaW5l
IGZvbGxvd2VkIGJ5IHRoYXQgc3RyaW5nIHJlcGVhdGVkCi0gICAgZm9yIGVhY2ggbGV2ZWwgb2Yg
bmVzdGluZy4gYGBOb25lYGAgKHRoZSBkZWZhdWx0KSBzZWxlY3RzIHRoZSBtb3N0IGNvbXBhY3QK
LSAgICByZXByZXNlbnRhdGlvbiB3aXRob3V0IGFueSBuZXdsaW5lcy4gRm9yIGJhY2t3YXJkcyBj
b21wYXRpYmlsaXR5IHdpdGgKLSAgICB2ZXJzaW9ucyBvZiBzaW1wbGVqc29uIGVhcmxpZXIgdGhh
biAyLjEuMCwgYW4gaW50ZWdlciBpcyBhbHNvIGFjY2VwdGVkCi0gICAgYW5kIGlzIGNvbnZlcnRl
ZCB0byBhIHN0cmluZyB3aXRoIHRoYXQgbWFueSBzcGFjZXMuCi0KLSAgICBJZiBgYHNlcGFyYXRv
cnNgYCBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwgZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUKLSAg
ICB0aGVuIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6
ICcpYGAgc2VwYXJhdG9ycy4KLSAgICBgYCgnLCcsICc6JylgYCBpcyB0aGUgbW9zdCBjb21wYWN0
IEpTT04gcmVwcmVzZW50YXRpb24uCi0KLSAgICBgYGVuY29kaW5nYGAgaXMgdGhlIGNoYXJhY3Rl
ciBlbmNvZGluZyBmb3Igc3RyIGluc3RhbmNlcywgZGVmYXVsdCBpcyBVVEYtOC4KLQotICAgIGBg
ZGVmYXVsdChvYmopYGAgaXMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCByZXR1cm4gYSBzZXJpYWxp
emFibGUgdmVyc2lvbgotICAgIG9mIG9iaiBvciByYWlzZSBUeXBlRXJyb3IuIFRoZSBkZWZhdWx0
IHNpbXBseSByYWlzZXMgVHlwZUVycm9yLgotCi0gICAgSWYgKnVzZV9kZWNpbWFsKiBpcyB0cnVl
IChkZWZhdWx0OiBgYEZhbHNlYGApIHRoZW4gZGVjaW1hbC5EZWNpbWFsCi0gICAgd2lsbCBiZSBu
YXRpdmVseSBzZXJpYWxpemVkIHRvIEpTT04gd2l0aCBmdWxsIHByZWNpc2lvbi4KLQotICAgIFRv
IHVzZSBhIGN1c3RvbSBgYEpTT05FbmNvZGVyYGAgc3ViY2xhc3MgKGUuZy4gb25lIHRoYXQgb3Zl
cnJpZGVzIHRoZQotICAgIGBgLmRlZmF1bHQoKWBgIG1ldGhvZCB0byBzZXJpYWxpemUgYWRkaXRp
b25hbCB0eXBlcyksIHNwZWNpZnkgaXQgd2l0aAotICAgIHRoZSBgYGNsc2BgIGt3YXJnLgotCi0g
ICAgIiIiCi0gICAgIyBjYWNoZWQgZW5jb2RlcgotICAgIGlmIChub3Qgc2tpcGtleXMgYW5kIGVu
c3VyZV9hc2NpaSBhbmQKLSAgICAgICAgY2hlY2tfY2lyY3VsYXIgYW5kIGFsbG93X25hbiBhbmQK
LSAgICAgICAgY2xzIGlzIE5vbmUgYW5kIGluZGVudCBpcyBOb25lIGFuZCBzZXBhcmF0b3JzIGlz
IE5vbmUgYW5kCi0gICAgICAgIGVuY29kaW5nID09ICd1dGYtOCcgYW5kIGRlZmF1bHQgaXMgTm9u
ZSBhbmQgbm90IHVzZV9kZWNpbWFsCi0gICAgICAgIGFuZCBub3Qga3cpOgotICAgICAgICBpdGVy
YWJsZSA9IF9kZWZhdWx0X2VuY29kZXIuaXRlcmVuY29kZShvYmopCi0gICAgZWxzZToKLSAgICAg
ICAgaWYgY2xzIGlzIE5vbmU6Ci0gICAgICAgICAgICBjbHMgPSBKU09ORW5jb2RlcgotICAgICAg
ICBpdGVyYWJsZSA9IGNscyhza2lwa2V5cz1za2lwa2V5cywgZW5zdXJlX2FzY2lpPWVuc3VyZV9h
c2NpaSwKLSAgICAgICAgICAgIGNoZWNrX2NpcmN1bGFyPWNoZWNrX2NpcmN1bGFyLCBhbGxvd19u
YW49YWxsb3dfbmFuLCBpbmRlbnQ9aW5kZW50LAotICAgICAgICAgICAgc2VwYXJhdG9ycz1zZXBh
cmF0b3JzLCBlbmNvZGluZz1lbmNvZGluZywKLSAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdCwg
dXNlX2RlY2ltYWw9dXNlX2RlY2ltYWwsICoqa3cpLml0ZXJlbmNvZGUob2JqKQotICAgICMgY291
bGQgYWNjZWxlcmF0ZSB3aXRoIHdyaXRlbGluZXMgaW4gc29tZSB2ZXJzaW9ucyBvZiBQeXRob24s
IGF0Ci0gICAgIyBhIGRlYnVnZ2FiaWxpdHkgY29zdAotICAgIGZvciBjaHVuayBpbiBpdGVyYWJs
ZToKLSAgICAgICAgZnAud3JpdGUoY2h1bmspCi0KLQotZGVmIGR1bXBzKG9iaiwgc2tpcGtleXM9
RmFsc2UsIGVuc3VyZV9hc2NpaT1UcnVlLCBjaGVja19jaXJjdWxhcj1UcnVlLAotICAgICAgICBh
bGxvd19uYW49VHJ1ZSwgY2xzPU5vbmUsIGluZGVudD1Ob25lLCBzZXBhcmF0b3JzPU5vbmUsCi0g
ICAgICAgIGVuY29kaW5nPSd1dGYtOCcsIGRlZmF1bHQ9Tm9uZSwgdXNlX2RlY2ltYWw9RmFsc2Us
ICoqa3cpOgotICAgICIiIlNlcmlhbGl6ZSBgYG9iamBgIHRvIGEgSlNPTiBmb3JtYXR0ZWQgYGBz
dHJgYC4KLQotICAgIElmIGBgc2tpcGtleXNgYCBpcyBmYWxzZSB0aGVuIGBgZGljdGBgIGtleXMg
dGhhdCBhcmUgbm90IGJhc2ljIHR5cGVzCi0gICAgKGBgc3RyYGAsIGBgdW5pY29kZWBgLCBgYGlu
dGBgLCBgYGxvbmdgYCwgYGBmbG9hdGBgLCBgYGJvb2xgYCwgYGBOb25lYGApCi0gICAgd2lsbCBi
ZSBza2lwcGVkIGluc3RlYWQgb2YgcmFpc2luZyBhIGBgVHlwZUVycm9yYGAuCi0KLSAgICBJZiBg
YGVuc3VyZV9hc2NpaWBgIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBh
Ci0gICAgYGB1bmljb2RlYGAgaW5zdGFuY2Ugc3ViamVjdCB0byBub3JtYWwgUHl0aG9uIGBgc3Ry
YGAgdG8gYGB1bmljb2RlYGAKLSAgICBjb2VyY2lvbiBydWxlcyBpbnN0ZWFkIG9mIGJlaW5nIGVz
Y2FwZWQgdG8gYW4gQVNDSUkgYGBzdHJgYC4KLQotICAgIElmIGBgY2hlY2tfY2lyY3VsYXJgYCBp
cyBmYWxzZSwgdGhlbiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCi0gICAgZm9yIGNvbnRh
aW5lciB0eXBlcyB3aWxsIGJlIHNraXBwZWQgYW5kIGEgY2lyY3VsYXIgcmVmZXJlbmNlIHdpbGwK
LSAgICByZXN1bHQgaW4gYW4gYGBPdmVyZmxvd0Vycm9yYGAgKG9yIHdvcnNlKS4KLQotICAgIElm
IGBgYWxsb3dfbmFuYGAgaXMgZmFsc2UsIHRoZW4gaXQgd2lsbCBiZSBhIGBgVmFsdWVFcnJvcmBg
IHRvCi0gICAgc2VyaWFsaXplIG91dCBvZiByYW5nZSBgYGZsb2F0YGAgdmFsdWVzIChgYG5hbmBg
LCBgYGluZmBgLCBgYC1pbmZgYCkgaW4KLSAgICBzdHJpY3QgY29tcGxpYW5jZSBvZiB0aGUgSlNP
TiBzcGVjaWZpY2F0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZQotICAgIEphdmFTY3JpcHQgZXF1
aXZhbGVudHMgKGBgTmFOYGAsIGBgSW5maW5pdHlgYCwgYGAtSW5maW5pdHlgYCkuCi0KLSAgICBJ
ZiBgYGluZGVudGBgIGlzIGEgc3RyaW5nLCB0aGVuIEpTT04gYXJyYXkgZWxlbWVudHMgYW5kIG9i
amVjdCBtZW1iZXJzCi0gICAgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIGEgbmV3bGluZSBm
b2xsb3dlZCBieSB0aGF0IHN0cmluZyByZXBlYXRlZAotICAgIGZvciBlYWNoIGxldmVsIG9mIG5l
c3RpbmcuIGBgTm9uZWBgICh0aGUgZGVmYXVsdCkgc2VsZWN0cyB0aGUgbW9zdCBjb21wYWN0Ci0g
ICAgcmVwcmVzZW50YXRpb24gd2l0aG91dCBhbnkgbmV3bGluZXMuIEZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eSB3aXRoCi0gICAgdmVyc2lvbnMgb2Ygc2ltcGxlanNvbiBlYXJsaWVyIHRoYW4g
Mi4xLjAsIGFuIGludGVnZXIgaXMgYWxzbyBhY2NlcHRlZAotICAgIGFuZCBpcyBjb252ZXJ0ZWQg
dG8gYSBzdHJpbmcgd2l0aCB0aGF0IG1hbnkgc3BhY2VzLgotCi0gICAgSWYgYGBzZXBhcmF0b3Jz
YGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlCi0gICAg
dGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAn
KWBgIHNlcGFyYXRvcnMuCi0gICAgYGAoJywnLCAnOicpYGAgaXMgdGhlIG1vc3QgY29tcGFjdCBK
U09OIHJlcHJlc2VudGF0aW9uLgotCi0gICAgYGBlbmNvZGluZ2BgIGlzIHRoZSBjaGFyYWN0ZXIg
ZW5jb2RpbmcgZm9yIHN0ciBpbnN0YW5jZXMsIGRlZmF1bHQgaXMgVVRGLTguCi0KLSAgICBgYGRl
ZmF1bHQob2JqKWBgIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXph
YmxlIHZlcnNpb24KLSAgICBvZiBvYmogb3IgcmFpc2UgVHlwZUVycm9yLiBUaGUgZGVmYXVsdCBz
aW1wbHkgcmFpc2VzIFR5cGVFcnJvci4KLQotICAgIElmICp1c2VfZGVjaW1hbCogaXMgdHJ1ZSAo
ZGVmYXVsdDogYGBGYWxzZWBgKSB0aGVuIGRlY2ltYWwuRGVjaW1hbAotICAgIHdpbGwgYmUgbmF0
aXZlbHkgc2VyaWFsaXplZCB0byBKU09OIHdpdGggZnVsbCBwcmVjaXNpb24uCi0KLSAgICBUbyB1
c2UgYSBjdXN0b20gYGBKU09ORW5jb2RlcmBgIHN1YmNsYXNzIChlLmcuIG9uZSB0aGF0IG92ZXJy
aWRlcyB0aGUKLSAgICBgYC5kZWZhdWx0KClgYCBtZXRob2QgdG8gc2VyaWFsaXplIGFkZGl0aW9u
YWwgdHlwZXMpLCBzcGVjaWZ5IGl0IHdpdGgKLSAgICB0aGUgYGBjbHNgYCBrd2FyZy4KLQotICAg
ICIiIgotICAgICMgY2FjaGVkIGVuY29kZXIKLSAgICBpZiAobm90IHNraXBrZXlzIGFuZCBlbnN1
cmVfYXNjaWkgYW5kCi0gICAgICAgIGNoZWNrX2NpcmN1bGFyIGFuZCBhbGxvd19uYW4gYW5kCi0g
ICAgICAgIGNscyBpcyBOb25lIGFuZCBpbmRlbnQgaXMgTm9uZSBhbmQgc2VwYXJhdG9ycyBpcyBO
b25lIGFuZAotICAgICAgICBlbmNvZGluZyA9PSAndXRmLTgnIGFuZCBkZWZhdWx0IGlzIE5vbmUg
YW5kIG5vdCB1c2VfZGVjaW1hbAotICAgICAgICBhbmQgbm90IGt3KToKLSAgICAgICAgcmV0dXJu
IF9kZWZhdWx0X2VuY29kZXIuZW5jb2RlKG9iaikKLSAgICBpZiBjbHMgaXMgTm9uZToKLSAgICAg
ICAgY2xzID0gSlNPTkVuY29kZXIKLSAgICByZXR1cm4gY2xzKAotICAgICAgICBza2lwa2V5cz1z
a2lwa2V5cywgZW5zdXJlX2FzY2lpPWVuc3VyZV9hc2NpaSwKLSAgICAgICAgY2hlY2tfY2lyY3Vs
YXI9Y2hlY2tfY2lyY3VsYXIsIGFsbG93X25hbj1hbGxvd19uYW4sIGluZGVudD1pbmRlbnQsCi0g
ICAgICAgIHNlcGFyYXRvcnM9c2VwYXJhdG9ycywgZW5jb2Rpbmc9ZW5jb2RpbmcsIGRlZmF1bHQ9
ZGVmYXVsdCwKLSAgICAgICAgdXNlX2RlY2ltYWw9dXNlX2RlY2ltYWwsICoqa3cpLmVuY29kZShv
YmopCi0KLQotX2RlZmF1bHRfZGVjb2RlciA9IEpTT05EZWNvZGVyKGVuY29kaW5nPU5vbmUsIG9i
amVjdF9ob29rPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3Bh
aXJzX2hvb2s9Tm9uZSkKLQotCi1kZWYgbG9hZChmcCwgZW5jb2Rpbmc9Tm9uZSwgY2xzPU5vbmUs
IG9iamVjdF9ob29rPU5vbmUsIHBhcnNlX2Zsb2F0PU5vbmUsCi0gICAgICAgIHBhcnNlX2ludD1O
b25lLCBwYXJzZV9jb25zdGFudD1Ob25lLCBvYmplY3RfcGFpcnNfaG9vaz1Ob25lLAotICAgICAg
ICB1c2VfZGVjaW1hbD1GYWxzZSwgKiprdyk6Ci0gICAgIiIiRGVzZXJpYWxpemUgYGBmcGBgIChh
IGBgLnJlYWQoKWBgLXN1cHBvcnRpbmcgZmlsZS1saWtlIG9iamVjdCBjb250YWluaW5nCi0gICAg
YSBKU09OIGRvY3VtZW50KSB0byBhIFB5dGhvbiBvYmplY3QuCi0KLSAgICAqZW5jb2RpbmcqIGRl
dGVybWluZXMgdGhlIGVuY29kaW5nIHVzZWQgdG8gaW50ZXJwcmV0IGFueQotICAgIDpjbGFzczpg
c3RyYCBvYmplY3RzIGRlY29kZWQgYnkgdGhpcyBpbnN0YW5jZSAoYGAndXRmLTgnYGAgYnkKLSAg
ICBkZWZhdWx0KS4gIEl0IGhhcyBubyBlZmZlY3Qgd2hlbiBkZWNvZGluZyA6Y2xhc3M6YHVuaWNv
ZGVgIG9iamVjdHMuCi0KLSAgICBOb3RlIHRoYXQgY3VycmVudGx5IG9ubHkgZW5jb2RpbmdzIHRo
YXQgYXJlIGEgc3VwZXJzZXQgb2YgQVNDSUkgd29yaywKLSAgICBzdHJpbmdzIG9mIG90aGVyIGVu
Y29kaW5ncyBzaG91bGQgYmUgcGFzc2VkIGluIGFzIDpjbGFzczpgdW5pY29kZWAuCi0KLSAgICAq
b2JqZWN0X2hvb2sqLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3Vs
dCBvZiBldmVyeQotICAgIEpTT04gb2JqZWN0IGRlY29kZWQgYW5kIGl0cyByZXR1cm4gdmFsdWUg
d2lsbCBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZQotICAgIGdpdmVuIDpjbGFzczpgZGljdGAuICBU
aGlzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgY3VzdG9tCi0gICAgZGVzZXJpYWxpemF0aW9ucyAo
ZS5nLiB0byBzdXBwb3J0IEpTT04tUlBDIGNsYXNzIGhpbnRpbmcpLgotCi0gICAgKm9iamVjdF9w
YWlyc19ob29rKiBpcyBhbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdp
dGgKLSAgICB0aGUgcmVzdWx0IG9mIGFueSBvYmplY3QgbGl0ZXJhbCBkZWNvZGUgd2l0aCBhbiBv
cmRlcmVkIGxpc3Qgb2YgcGFpcnMuCi0gICAgVGhlIHJldHVybiB2YWx1ZSBvZiAqb2JqZWN0X3Bh
aXJzX2hvb2sqIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZQotICAgIDpjbGFzczpgZGljdGAu
ICBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycwot
ICAgIHRoYXQgcmVseSBvbiB0aGUgb3JkZXIgdGhhdCB0aGUga2V5IGFuZCB2YWx1ZSBwYWlycyBh
cmUgZGVjb2RlZCAoZm9yCi0gICAgZXhhbXBsZSwgOmZ1bmM6YGNvbGxlY3Rpb25zLk9yZGVyZWRE
aWN0YCB3aWxsIHJlbWVtYmVyIHRoZSBvcmRlciBvZgotICAgIGluc2VydGlvbikuIElmICpvYmpl
Y3RfaG9vayogaXMgYWxzbyBkZWZpbmVkLCB0aGUgKm9iamVjdF9wYWlyc19ob29rKgotICAgIHRh
a2VzIHByaW9yaXR5LgotCi0gICAgKnBhcnNlX2Zsb2F0KiwgaWYgc3BlY2lmaWVkLCB3aWxsIGJl
IGNhbGxlZCB3aXRoIHRoZSBzdHJpbmcgb2YgZXZlcnkKLSAgICBKU09OIGZsb2F0IHRvIGJlIGRl
Y29kZWQuICBCeSBkZWZhdWx0LCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KLSAgICBgYGZsb2F0KG51
bV9zdHIpYGAuIFRoaXMgY2FuIGJlIHVzZWQgdG8gdXNlIGFub3RoZXIgZGF0YXR5cGUgb3IgcGFy
c2VyCi0gICAgZm9yIEpTT04gZmxvYXRzIChlLmcuIDpjbGFzczpgZGVjaW1hbC5EZWNpbWFsYCku
Ci0KLSAgICAqcGFyc2VfaW50KiwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRo
ZSBzdHJpbmcgb2YgZXZlcnkKLSAgICBKU09OIGludCB0byBiZSBkZWNvZGVkLiAgQnkgZGVmYXVs
dCwgdGhpcyBpcyBlcXVpdmFsZW50IHRvCi0gICAgYGBpbnQobnVtX3N0cilgYC4gIFRoaXMgY2Fu
IGJlIHVzZWQgdG8gdXNlIGFub3RoZXIgZGF0YXR5cGUgb3IgcGFyc2VyCi0gICAgZm9yIEpTT04g
aW50ZWdlcnMgKGUuZy4gOmNsYXNzOmBmbG9hdGApLgotCi0gICAgKnBhcnNlX2NvbnN0YW50Kiwg
aWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIG9uZSBvZiB0aGUKLSAgICBmb2xsb3dp
bmcgc3RyaW5nczogYGAnLUluZmluaXR5J2BgLCBgYCdJbmZpbml0eSdgYCwgYGAnTmFOJ2BgLiAg
VGhpcwotICAgIGNhbiBiZSB1c2VkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpbnZhbGlkIEpT
T04gbnVtYmVycyBhcmUKLSAgICBlbmNvdW50ZXJlZC4KLQotICAgIElmICp1c2VfZGVjaW1hbCog
aXMgdHJ1ZSAoZGVmYXVsdDogYGBGYWxzZWBgKSB0aGVuIGl0IGltcGxpZXMKLSAgICBwYXJzZV9m
bG9hdD1kZWNpbWFsLkRlY2ltYWwgZm9yIHBhcml0eSB3aXRoIGBgZHVtcGBgLgotCi0gICAgVG8g
dXNlIGEgY3VzdG9tIGBgSlNPTkRlY29kZXJgYCBzdWJjbGFzcywgc3BlY2lmeSBpdCB3aXRoIHRo
ZSBgYGNsc2BgCi0gICAga3dhcmcuCi0KLSAgICAiIiIKLSAgICByZXR1cm4gbG9hZHMoZnAucmVh
ZCgpLAotICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgY2xzPWNscywgb2JqZWN0X2hvb2s9b2Jq
ZWN0X2hvb2ssCi0gICAgICAgIHBhcnNlX2Zsb2F0PXBhcnNlX2Zsb2F0LCBwYXJzZV9pbnQ9cGFy
c2VfaW50LAotICAgICAgICBwYXJzZV9jb25zdGFudD1wYXJzZV9jb25zdGFudCwgb2JqZWN0X3Bh
aXJzX2hvb2s9b2JqZWN0X3BhaXJzX2hvb2ssCi0gICAgICAgIHVzZV9kZWNpbWFsPXVzZV9kZWNp
bWFsLCAqKmt3KQotCi0KLWRlZiBsb2FkcyhzLCBlbmNvZGluZz1Ob25lLCBjbHM9Tm9uZSwgb2Jq
ZWN0X2hvb2s9Tm9uZSwgcGFyc2VfZmxvYXQ9Tm9uZSwKLSAgICAgICAgcGFyc2VfaW50PU5vbmUs
IHBhcnNlX2NvbnN0YW50PU5vbmUsIG9iamVjdF9wYWlyc19ob29rPU5vbmUsCi0gICAgICAgIHVz
ZV9kZWNpbWFsPUZhbHNlLCAqKmt3KToKLSAgICAiIiJEZXNlcmlhbGl6ZSBgYHNgYCAoYSBgYHN0
cmBgIG9yIGBgdW5pY29kZWBgIGluc3RhbmNlIGNvbnRhaW5pbmcgYSBKU09OCi0gICAgZG9jdW1l
bnQpIHRvIGEgUHl0aG9uIG9iamVjdC4KLQotICAgICplbmNvZGluZyogZGV0ZXJtaW5lcyB0aGUg
ZW5jb2RpbmcgdXNlZCB0byBpbnRlcnByZXQgYW55Ci0gICAgOmNsYXNzOmBzdHJgIG9iamVjdHMg
ZGVjb2RlZCBieSB0aGlzIGluc3RhbmNlIChgYCd1dGYtOCdgYCBieQotICAgIGRlZmF1bHQpLiAg
SXQgaGFzIG5vIGVmZmVjdCB3aGVuIGRlY29kaW5nIDpjbGFzczpgdW5pY29kZWAgb2JqZWN0cy4K
LQotICAgIE5vdGUgdGhhdCBjdXJyZW50bHkgb25seSBlbmNvZGluZ3MgdGhhdCBhcmUgYSBzdXBl
cnNldCBvZiBBU0NJSSB3b3JrLAotICAgIHN0cmluZ3Mgb2Ygb3RoZXIgZW5jb2RpbmdzIHNob3Vs
ZCBiZSBwYXNzZWQgaW4gYXMgOmNsYXNzOmB1bmljb2RlYC4KLQotICAgICpvYmplY3RfaG9vayos
IGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIGV2ZXJ5Ci0g
ICAgSlNPTiBvYmplY3QgZGVjb2RlZCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVzZWQg
aW4gcGxhY2Ugb2YgdGhlCi0gICAgZ2l2ZW4gOmNsYXNzOmBkaWN0YC4gIFRoaXMgY2FuIGJlIHVz
ZWQgdG8gcHJvdmlkZSBjdXN0b20KLSAgICBkZXNlcmlhbGl6YXRpb25zIChlLmcuIHRvIHN1cHBv
cnQgSlNPTi1SUEMgY2xhc3MgaGludGluZykuCi0KLSAgICAqb2JqZWN0X3BhaXJzX2hvb2sqIGlz
IGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aAotICAgIHRoZSBy
ZXN1bHQgb2YgYW55IG9iamVjdCBsaXRlcmFsIGRlY29kZSB3aXRoIGFuIG9yZGVyZWQgbGlzdCBv
ZiBwYWlycy4KLSAgICBUaGUgcmV0dXJuIHZhbHVlIG9mICpvYmplY3RfcGFpcnNfaG9vayogd2ls
bCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlCi0gICAgOmNsYXNzOmBkaWN0YC4gIFRoaXMgZmVhdHVy
ZSBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzCi0gICAgdGhhdCByZWx5
IG9uIHRoZSBvcmRlciB0aGF0IHRoZSBrZXkgYW5kIHZhbHVlIHBhaXJzIGFyZSBkZWNvZGVkIChm
b3IKLSAgICBleGFtcGxlLCA6ZnVuYzpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIHdpbGwgcmVt
ZW1iZXIgdGhlIG9yZGVyIG9mCi0gICAgaW5zZXJ0aW9uKS4gSWYgKm9iamVjdF9ob29rKiBpcyBh
bHNvIGRlZmluZWQsIHRoZSAqb2JqZWN0X3BhaXJzX2hvb2sqCi0gICAgdGFrZXMgcHJpb3JpdHku
Ci0KLSAgICAqcGFyc2VfZmxvYXQqLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGgg
dGhlIHN0cmluZyBvZiBldmVyeQotICAgIEpTT04gZmxvYXQgdG8gYmUgZGVjb2RlZC4gIEJ5IGRl
ZmF1bHQsIHRoaXMgaXMgZXF1aXZhbGVudCB0bwotICAgIGBgZmxvYXQobnVtX3N0cilgYC4gVGhp
cyBjYW4gYmUgdXNlZCB0byB1c2UgYW5vdGhlciBkYXRhdHlwZSBvciBwYXJzZXIKLSAgICBmb3Ig
SlNPTiBmbG9hdHMgKGUuZy4gOmNsYXNzOmBkZWNpbWFsLkRlY2ltYWxgKS4KLQotICAgICpwYXJz
ZV9pbnQqLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHN0cmluZyBvZiBl
dmVyeQotICAgIEpTT04gaW50IHRvIGJlIGRlY29kZWQuICBCeSBkZWZhdWx0LCB0aGlzIGlzIGVx
dWl2YWxlbnQgdG8KLSAgICBgYGludChudW1fc3RyKWBgLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB1
c2UgYW5vdGhlciBkYXRhdHlwZSBvciBwYXJzZXIKLSAgICBmb3IgSlNPTiBpbnRlZ2VycyAoZS5n
LiA6Y2xhc3M6YGZsb2F0YCkuCi0KLSAgICAqcGFyc2VfY29uc3RhbnQqLCBpZiBzcGVjaWZpZWQs
IHdpbGwgYmUgY2FsbGVkIHdpdGggb25lIG9mIHRoZQotICAgIGZvbGxvd2luZyBzdHJpbmdzOiBg
YCctSW5maW5pdHknYGAsIGBgJ0luZmluaXR5J2BgLCBgYCdOYU4nYGAuICBUaGlzCi0gICAgY2Fu
IGJlIHVzZWQgdG8gcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGludmFsaWQgSlNPTiBudW1iZXJzIGFy
ZQotICAgIGVuY291bnRlcmVkLgotCi0gICAgSWYgKnVzZV9kZWNpbWFsKiBpcyB0cnVlIChkZWZh
dWx0OiBgYEZhbHNlYGApIHRoZW4gaXQgaW1wbGllcwotICAgIHBhcnNlX2Zsb2F0PWRlY2ltYWwu
RGVjaW1hbCBmb3IgcGFyaXR5IHdpdGggYGBkdW1wYGAuCi0KLSAgICBUbyB1c2UgYSBjdXN0b20g
YGBKU09ORGVjb2RlcmBgIHN1YmNsYXNzLCBzcGVjaWZ5IGl0IHdpdGggdGhlIGBgY2xzYGAKLSAg
ICBrd2FyZy4KLQotICAgICIiIgotICAgIGlmIChjbHMgaXMgTm9uZSBhbmQgZW5jb2RpbmcgaXMg
Tm9uZSBhbmQgb2JqZWN0X2hvb2sgaXMgTm9uZSBhbmQKLSAgICAgICAgICAgIHBhcnNlX2ludCBp
cyBOb25lIGFuZCBwYXJzZV9mbG9hdCBpcyBOb25lIGFuZAotICAgICAgICAgICAgcGFyc2VfY29u
c3RhbnQgaXMgTm9uZSBhbmQgb2JqZWN0X3BhaXJzX2hvb2sgaXMgTm9uZQotICAgICAgICAgICAg
YW5kIG5vdCB1c2VfZGVjaW1hbCBhbmQgbm90IGt3KToKLSAgICAgICAgcmV0dXJuIF9kZWZhdWx0
X2RlY29kZXIuZGVjb2RlKHMpCi0gICAgaWYgY2xzIGlzIE5vbmU6Ci0gICAgICAgIGNscyA9IEpT
T05EZWNvZGVyCi0gICAgaWYgb2JqZWN0X2hvb2sgaXMgbm90IE5vbmU6Ci0gICAgICAgIGt3Wydv
YmplY3RfaG9vayddID0gb2JqZWN0X2hvb2sKLSAgICBpZiBvYmplY3RfcGFpcnNfaG9vayBpcyBu
b3QgTm9uZToKLSAgICAgICAga3dbJ29iamVjdF9wYWlyc19ob29rJ10gPSBvYmplY3RfcGFpcnNf
aG9vawotICAgIGlmIHBhcnNlX2Zsb2F0IGlzIG5vdCBOb25lOgotICAgICAgICBrd1sncGFyc2Vf
ZmxvYXQnXSA9IHBhcnNlX2Zsb2F0Ci0gICAgaWYgcGFyc2VfaW50IGlzIG5vdCBOb25lOgotICAg
ICAgICBrd1sncGFyc2VfaW50J10gPSBwYXJzZV9pbnQKLSAgICBpZiBwYXJzZV9jb25zdGFudCBp
cyBub3QgTm9uZToKLSAgICAgICAga3dbJ3BhcnNlX2NvbnN0YW50J10gPSBwYXJzZV9jb25zdGFu
dAotICAgIGlmIHVzZV9kZWNpbWFsOgotICAgICAgICBpZiBwYXJzZV9mbG9hdCBpcyBub3QgTm9u
ZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXNlX2RlY2ltYWw9VHJ1ZSBpbXBsaWVz
IHBhcnNlX2Zsb2F0PURlY2ltYWwiKQotICAgICAgICBrd1sncGFyc2VfZmxvYXQnXSA9IERlY2lt
YWwKLSAgICByZXR1cm4gY2xzKGVuY29kaW5nPWVuY29kaW5nLCAqKmt3KS5kZWNvZGUocykKLQot
Ci1kZWYgX3RvZ2dsZV9zcGVlZHVwcyhlbmFibGVkKToKLSAgICBpbXBvcnQgc2ltcGxlanNvbi5k
ZWNvZGVyIGFzIGRlYwotICAgIGltcG9ydCBzaW1wbGVqc29uLmVuY29kZXIgYXMgZW5jCi0gICAg
aW1wb3J0IHNpbXBsZWpzb24uc2Nhbm5lciBhcyBzY2FuCi0gICAgY19tYWtlX2VuY29kZXIgPSBf
aW1wb3J0X2NfbWFrZV9lbmNvZGVyKCkKLSAgICBpZiBlbmFibGVkOgotICAgICAgICBkZWMuc2Nh
bnN0cmluZyA9IGRlYy5jX3NjYW5zdHJpbmcgb3IgZGVjLnB5X3NjYW5zdHJpbmcKLSAgICAgICAg
ZW5jLmNfbWFrZV9lbmNvZGVyID0gY19tYWtlX2VuY29kZXIKLSAgICAgICAgZW5jLmVuY29kZV9i
YXNlc3RyaW5nX2FzY2lpID0gKGVuYy5jX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpIG9yIAotICAg
ICAgICAgICAgZW5jLnB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKQotICAgICAgICBzY2FuLm1h
a2Vfc2Nhbm5lciA9IHNjYW4uY19tYWtlX3NjYW5uZXIgb3Igc2Nhbi5weV9tYWtlX3NjYW5uZXIK
LSAgICBlbHNlOgotICAgICAgICBkZWMuc2NhbnN0cmluZyA9IGRlYy5weV9zY2Fuc3RyaW5nCi0g
ICAgICAgIGVuYy5jX21ha2VfZW5jb2RlciA9IE5vbmUKLSAgICAgICAgZW5jLmVuY29kZV9iYXNl
c3RyaW5nX2FzY2lpID0gZW5jLnB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpCi0gICAgICAgIHNj
YW4ubWFrZV9zY2FubmVyID0gc2Nhbi5weV9tYWtlX3NjYW5uZXIKLSAgICBkZWMubWFrZV9zY2Fu
bmVyID0gc2Nhbi5tYWtlX3NjYW5uZXIKLSAgICBnbG9iYWwgX2RlZmF1bHRfZGVjb2RlcgotICAg
IF9kZWZhdWx0X2RlY29kZXIgPSBKU09ORGVjb2RlcigKLSAgICAgICAgZW5jb2Rpbmc9Tm9uZSwK
LSAgICAgICAgb2JqZWN0X2hvb2s9Tm9uZSwKLSAgICAgICAgb2JqZWN0X3BhaXJzX2hvb2s9Tm9u
ZSwKLSAgICApCi0gICAgZ2xvYmFsIF9kZWZhdWx0X2VuY29kZXIKLSAgICBfZGVmYXVsdF9lbmNv
ZGVyID0gSlNPTkVuY29kZXIoCi0gICAgICAgc2tpcGtleXM9RmFsc2UsCi0gICAgICAgZW5zdXJl
X2FzY2lpPVRydWUsCi0gICAgICAgY2hlY2tfY2lyY3VsYXI9VHJ1ZSwKLSAgICAgICBhbGxvd19u
YW49VHJ1ZSwKLSAgICAgICBpbmRlbnQ9Tm9uZSwKLSAgICAgICBzZXBhcmF0b3JzPU5vbmUsCi0g
ICAgICAgZW5jb2Rpbmc9J3V0Zi04JywKLSAgICAgICBkZWZhdWx0PU5vbmUsCi0gICApCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9fc3BlZWR1cHMu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxl
anNvbi9fc3BlZWR1cHMuYwkocmV2aXNpb24gMTA3MTM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vX3NwZWVkdXBzLmMJKHdvcmtpbmcgY29weSkKQEAg
LTEsMjY1MiArMCwwIEBACi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAic3RydWN0bWVt
YmVyLmgiCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDcwMDAwICYmICFkZWZpbmVkKFB5T1Nf
c3RyaW5nX3RvX2RvdWJsZSkKLSNkZWZpbmUgUHlPU19zdHJpbmdfdG9fZG91YmxlIGpzb25fUHlP
U19zdHJpbmdfdG9fZG91YmxlCi1zdGF0aWMgZG91YmxlCi1qc29uX1B5T1Nfc3RyaW5nX3RvX2Rv
dWJsZShjb25zdCBjaGFyICpzLCBjaGFyICoqZW5kcHRyLCBQeU9iamVjdCAqb3ZlcmZsb3dfZXhj
ZXB0aW9uKTsKLXN0YXRpYyBkb3VibGUKLWpzb25fUHlPU19zdHJpbmdfdG9fZG91YmxlKGNvbnN0
IGNoYXIgKnMsIGNoYXIgKiplbmRwdHIsIFB5T2JqZWN0ICpvdmVyZmxvd19leGNlcHRpb24pIHsK
LSAgICBkb3VibGUgeDsKLSAgICBhc3NlcnQoZW5kcHRyID09IE5VTEwpOwotICAgIGFzc2VydChv
dmVyZmxvd19leGNlcHRpb24gPT0gTlVMTCk7Ci0gICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgianNv
bl9QeU9TX3N0cmluZ190b19kb3VibGUiLCByZXR1cm4gLTEuMDspCi0gICAgeCA9IFB5T1NfYXNj
aWlfYXRvZihzKTsKLSAgICBQeUZQRV9FTkRfUFJPVEVDVCh4KQotICAgIHJldHVybiB4OwotfQot
I2VuZGlmCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDYwMDAwICYmICFkZWZpbmVkKFB5X1RZ
UEUpCi0jZGVmaW5lIFB5X1RZUEUob2IpICAgICAoKChQeU9iamVjdCopKG9iKSktPm9iX3R5cGUp
Ci0jZW5kaWYKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNjAwMDAgJiYgIWRlZmluZWQoUHlf
U0laRSkKLSNkZWZpbmUgUHlfU0laRShvYikgICAgICgoKFB5VmFyT2JqZWN0Kikob2IpKS0+b2Jf
c2l6ZSkKLSNlbmRpZgotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCAmJiAhZGVmaW5l
ZChQWV9TU0laRV9UX01JTikKLXR5cGVkZWYgaW50IFB5X3NzaXplX3Q7Ci0jZGVmaW5lIFBZX1NT
SVpFX1RfTUFYIElOVF9NQVgKLSNkZWZpbmUgUFlfU1NJWkVfVF9NSU4gSU5UX01JTgotI2RlZmlu
ZSBQeUludF9Gcm9tU3NpemVfdCBQeUludF9Gcm9tTG9uZwotI2RlZmluZSBQeUludF9Bc1NzaXpl
X3QgUHlJbnRfQXNMb25nCi0jZW5kaWYKLSNpZm5kZWYgUHlfSVNfRklOSVRFCi0jZGVmaW5lIFB5
X0lTX0ZJTklURShYKSAoIVB5X0lTX0lORklOSVRZKFgpICYmICFQeV9JU19OQU4oWCkpCi0jZW5k
aWYKLQotI2lmZGVmIF9fR05VQ19fCi0jZGVmaW5lIFVOVVNFRCBfX2F0dHJpYnV0ZV9fKChfX3Vu
dXNlZF9fKSkKLSNlbHNlCi0jZGVmaW5lIFVOVVNFRAotI2VuZGlmCi0KLSNkZWZpbmUgREVGQVVM
VF9FTkNPRElORyAidXRmLTgiCi0KLSNkZWZpbmUgUHlTY2FubmVyX0NoZWNrKG9wKSBQeU9iamVj
dF9UeXBlQ2hlY2sob3AsICZQeVNjYW5uZXJUeXBlKQotI2RlZmluZSBQeVNjYW5uZXJfQ2hlY2tF
eGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZQeVNjYW5uZXJUeXBlKQotI2RlZmluZSBQeUVuY29k
ZXJfQ2hlY2sob3ApIFB5T2JqZWN0X1R5cGVDaGVjayhvcCwgJlB5RW5jb2RlclR5cGUpCi0jZGVm
aW5lIFB5RW5jb2Rlcl9DaGVja0V4YWN0KG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5RW5jb2RlclR5
cGUpCi0jZGVmaW5lIERlY2ltYWxfQ2hlY2sob3ApIChQeU9iamVjdF9UeXBlQ2hlY2sob3AsIERl
Y2ltYWxUeXBlUHRyKSkKLQotc3RhdGljIFB5VHlwZU9iamVjdCBQeVNjYW5uZXJUeXBlOwotc3Rh
dGljIFB5VHlwZU9iamVjdCBQeUVuY29kZXJUeXBlOwotc3RhdGljIFB5VHlwZU9iamVjdCAqRGVj
aW1hbFR5cGVQdHI7Ci0KLXR5cGVkZWYgc3RydWN0IF9QeVNjYW5uZXJPYmplY3QgewotICAgIFB5
T2JqZWN0X0hFQUQKLSAgICBQeU9iamVjdCAqZW5jb2Rpbmc7Ci0gICAgUHlPYmplY3QgKnN0cmlj
dDsKLSAgICBQeU9iamVjdCAqb2JqZWN0X2hvb2s7Ci0gICAgUHlPYmplY3QgKnBhaXJzX2hvb2s7
Ci0gICAgUHlPYmplY3QgKnBhcnNlX2Zsb2F0OwotICAgIFB5T2JqZWN0ICpwYXJzZV9pbnQ7Ci0g
ICAgUHlPYmplY3QgKnBhcnNlX2NvbnN0YW50OwotICAgIFB5T2JqZWN0ICptZW1vOwotfSBQeVNj
YW5uZXJPYmplY3Q7Ci0KLXN0YXRpYyBQeU1lbWJlckRlZiBzY2FubmVyX21lbWJlcnNbXSA9IHsK
LSAgICB7ImVuY29kaW5nIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9iamVjdCwgZW5j
b2RpbmcpLCBSRUFET05MWSwgImVuY29kaW5nIn0sCi0gICAgeyJzdHJpY3QiLCBUX09CSkVDVCwg
b2Zmc2V0b2YoUHlTY2FubmVyT2JqZWN0LCBzdHJpY3QpLCBSRUFET05MWSwgInN0cmljdCJ9LAot
ICAgIHsib2JqZWN0X2hvb2siLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlTY2FubmVyT2JqZWN0LCBv
YmplY3RfaG9vayksIFJFQURPTkxZLCAib2JqZWN0X2hvb2sifSwKLSAgICB7Im9iamVjdF9wYWly
c19ob29rIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9iamVjdCwgcGFpcnNfaG9vayks
IFJFQURPTkxZLCAib2JqZWN0X3BhaXJzX2hvb2sifSwKLSAgICB7InBhcnNlX2Zsb2F0IiwgVF9P
QkpFQ1QsIG9mZnNldG9mKFB5U2Nhbm5lck9iamVjdCwgcGFyc2VfZmxvYXQpLCBSRUFET05MWSwg
InBhcnNlX2Zsb2F0In0sCi0gICAgeyJwYXJzZV9pbnQiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlT
Y2FubmVyT2JqZWN0LCBwYXJzZV9pbnQpLCBSRUFET05MWSwgInBhcnNlX2ludCJ9LAotICAgIHsi
cGFyc2VfY29uc3RhbnQiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlTY2FubmVyT2JqZWN0LCBwYXJz
ZV9jb25zdGFudCksIFJFQURPTkxZLCAicGFyc2VfY29uc3RhbnQifSwKLSAgICB7TlVMTH0KLX07
Ci0KLXR5cGVkZWYgc3RydWN0IF9QeUVuY29kZXJPYmplY3QgewotICAgIFB5T2JqZWN0X0hFQUQK
LSAgICBQeU9iamVjdCAqbWFya2VyczsKLSAgICBQeU9iamVjdCAqZGVmYXVsdGZuOwotICAgIFB5
T2JqZWN0ICplbmNvZGVyOwotICAgIFB5T2JqZWN0ICppbmRlbnQ7Ci0gICAgUHlPYmplY3QgKmtl
eV9zZXBhcmF0b3I7Ci0gICAgUHlPYmplY3QgKml0ZW1fc2VwYXJhdG9yOwotICAgIFB5T2JqZWN0
ICpzb3J0X2tleXM7Ci0gICAgUHlPYmplY3QgKnNraXBrZXlzOwotICAgIFB5T2JqZWN0ICprZXlf
bWVtbzsKLSAgICBpbnQgZmFzdF9lbmNvZGU7Ci0gICAgaW50IGFsbG93X25hbjsKLSAgICBpbnQg
dXNlX2RlY2ltYWw7Ci19IFB5RW5jb2Rlck9iamVjdDsKLQotc3RhdGljIFB5TWVtYmVyRGVmIGVu
Y29kZXJfbWVtYmVyc1tdID0gewotICAgIHsibWFya2VycyIsIFRfT0JKRUNULCBvZmZzZXRvZihQ
eUVuY29kZXJPYmplY3QsIG1hcmtlcnMpLCBSRUFET05MWSwgIm1hcmtlcnMifSwKLSAgICB7ImRl
ZmF1bHQiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBkZWZhdWx0Zm4pLCBS
RUFET05MWSwgImRlZmF1bHQifSwKLSAgICB7ImVuY29kZXIiLCBUX09CSkVDVCwgb2Zmc2V0b2Yo
UHlFbmNvZGVyT2JqZWN0LCBlbmNvZGVyKSwgUkVBRE9OTFksICJlbmNvZGVyIn0sCi0gICAgeyJp
bmRlbnQiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBpbmRlbnQpLCBSRUFE
T05MWSwgImluZGVudCJ9LAotICAgIHsia2V5X3NlcGFyYXRvciIsIFRfT0JKRUNULCBvZmZzZXRv
ZihQeUVuY29kZXJPYmplY3QsIGtleV9zZXBhcmF0b3IpLCBSRUFET05MWSwgImtleV9zZXBhcmF0
b3IifSwKLSAgICB7Iml0ZW1fc2VwYXJhdG9yIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RW5jb2Rl
ck9iamVjdCwgaXRlbV9zZXBhcmF0b3IpLCBSRUFET05MWSwgIml0ZW1fc2VwYXJhdG9yIn0sCi0g
ICAgeyJzb3J0X2tleXMiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBzb3J0
X2tleXMpLCBSRUFET05MWSwgInNvcnRfa2V5cyJ9LAotICAgIHsic2tpcGtleXMiLCBUX09CSkVD
VCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBza2lwa2V5cyksIFJFQURPTkxZLCAic2tpcGtl
eXMifSwKLSAgICB7ImtleV9tZW1vIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RW5jb2Rlck9iamVj
dCwga2V5X21lbW8pLCBSRUFET05MWSwgImtleV9tZW1vIn0sCi0gICAge05VTEx9Ci19OwotCi1z
dGF0aWMgUHlfc3NpemVfdAotYXNjaWlfZXNjYXBlX2NoYXIoUHlfVU5JQ09ERSBjLCBjaGFyICpv
dXRwdXQsIFB5X3NzaXplX3QgY2hhcnMpOwotc3RhdGljIFB5T2JqZWN0ICoKLWFzY2lpX2VzY2Fw
ZV91bmljb2RlKFB5T2JqZWN0ICpweXN0cik7Ci1zdGF0aWMgUHlPYmplY3QgKgotYXNjaWlfZXNj
YXBlX3N0cihQeU9iamVjdCAqcHlzdHIpOwotc3RhdGljIFB5T2JqZWN0ICoKLXB5X2VuY29kZV9i
YXNlc3RyaW5nX2FzY2lpKFB5T2JqZWN0KiBzZWxmIFVOVVNFRCwgUHlPYmplY3QgKnB5c3RyKTsK
LXZvaWQgaW5pdF9zcGVlZHVwcyh2b2lkKTsKLXN0YXRpYyBQeU9iamVjdCAqCi1zY2FuX29uY2Vf
c3RyKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGlkeCwg
UHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKTsKLXN0YXRpYyBQeU9iamVjdCAqCi1zY2FuX29uY2Vf
dW5pY29kZShQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBp
ZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cik7Ci1zdGF0aWMgUHlPYmplY3QgKgotX2J1aWxk
X3J2YWxfaW5kZXhfdHVwbGUoUHlPYmplY3QgKnJ2YWwsIFB5X3NzaXplX3QgaWR4KTsKLXN0YXRp
YyBQeU9iamVjdCAqCi1zY2FubmVyX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICph
cmdzLCBQeU9iamVjdCAqa3dkcyk7Ci1zdGF0aWMgaW50Ci1zY2FubmVyX2luaXQoUHlPYmplY3Qg
KnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7Ci1zdGF0aWMgdm9pZAotc2Nh
bm5lcl9kZWFsbG9jKFB5T2JqZWN0ICpzZWxmKTsKLXN0YXRpYyBpbnQKLXNjYW5uZXJfY2xlYXIo
UHlPYmplY3QgKnNlbGYpOwotc3RhdGljIFB5T2JqZWN0ICoKLWVuY29kZXJfbmV3KFB5VHlwZU9i
amVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKTsKLXN0YXRpYyBpbnQK
LWVuY29kZXJfaW5pdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICpr
d2RzKTsKLXN0YXRpYyB2b2lkCi1lbmNvZGVyX2RlYWxsb2MoUHlPYmplY3QgKnNlbGYpOwotc3Rh
dGljIGludAotZW5jb2Rlcl9jbGVhcihQeU9iamVjdCAqc2VsZik7Ci1zdGF0aWMgaW50Ci1lbmNv
ZGVyX2xpc3RlbmNvZGVfbGlzdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpydmFsLCBQ
eU9iamVjdCAqc2VxLCBQeV9zc2l6ZV90IGluZGVudF9sZXZlbCk7Ci1zdGF0aWMgaW50Ci1lbmNv
ZGVyX2xpc3RlbmNvZGVfb2JqKFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKnJ2YWwsIFB5
T2JqZWN0ICpvYmosIFB5X3NzaXplX3QgaW5kZW50X2xldmVsKTsKLXN0YXRpYyBpbnQKLWVuY29k
ZXJfbGlzdGVuY29kZV9kaWN0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKnJ2YWwsIFB5
T2JqZWN0ICpkY3QsIFB5X3NzaXplX3QgaW5kZW50X2xldmVsKTsKLXN0YXRpYyBQeU9iamVjdCAq
Ci1fZW5jb2RlZF9jb25zdChQeU9iamVjdCAqb2JqKTsKLXN0YXRpYyB2b2lkCi1yYWlzZV9lcnJt
c2coY2hhciAqbXNnLCBQeU9iamVjdCAqcywgUHlfc3NpemVfdCBlbmQpOwotc3RhdGljIFB5T2Jq
ZWN0ICoKLWVuY29kZXJfZW5jb2RlX3N0cmluZyhQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0
ICpvYmopOwotc3RhdGljIGludAotX2NvbnZlcnRQeUludF9Bc1NzaXplX3QoUHlPYmplY3QgKm8s
IFB5X3NzaXplX3QgKnNpemVfcHRyKTsKLXN0YXRpYyBQeU9iamVjdCAqCi1fY29udmVydFB5SW50
X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKTsKLXN0YXRpYyBQeU9iamVjdCAqCi1l
bmNvZGVyX2VuY29kZV9mbG9hdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopOwot
Ci0jZGVmaW5lIFNfQ0hBUihjKSAoYyA+PSAnICcgJiYgYyA8PSAnficgJiYgYyAhPSAnXFwnICYm
IGMgIT0gJyInKQotI2RlZmluZSBJU19XSElURVNQQUNFKGMpICgoKGMpID09ICcgJykgfHwgKChj
KSA9PSAnXHQnKSB8fCAoKGMpID09ICdcbicpIHx8ICgoYykgPT0gJ1xyJykpCi0KLSNkZWZpbmUg
TUlOX0VYUEFOU0lPTiA2Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0jZGVmaW5lIE1BWF9FWFBB
TlNJT04gKDIgKiBNSU5fRVhQQU5TSU9OKQotI2Vsc2UKLSNkZWZpbmUgTUFYX0VYUEFOU0lPTiBN
SU5fRVhQQU5TSU9OCi0jZW5kaWYKLQotc3RhdGljIGludAotX2NvbnZlcnRQeUludF9Bc1NzaXpl
X3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgKnNpemVfcHRyKQotewotICAgIC8qIFB5T2JqZWN0
IHRvIFB5X3NzaXplX3QgY29udmVydGVyICovCi0gICAgKnNpemVfcHRyID0gUHlJbnRfQXNTc2l6
ZV90KG8pOwotICAgIGlmICgqc2l6ZV9wdHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1f
Y29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKQotewotICAgIC8q
IFB5X3NzaXplX3QgdG8gUHlPYmplY3QgY29udmVydGVyICovCi0gICAgcmV0dXJuIFB5SW50X0Zy
b21Tc2l6ZV90KCpzaXplX3B0cik7Ci19Ci0KLXN0YXRpYyBQeV9zc2l6ZV90Ci1hc2NpaV9lc2Nh
cGVfY2hhcihQeV9VTklDT0RFIGMsIGNoYXIgKm91dHB1dCwgUHlfc3NpemVfdCBjaGFycykKLXsK
LSAgICAvKiBFc2NhcGUgdW5pY29kZSBjb2RlIHBvaW50IGMgdG8gQVNDSUkgZXNjYXBlIHNlcXVl
bmNlcwotICAgIGluIGNoYXIgKm91dHB1dC4gb3V0cHV0IG11c3QgaGF2ZSBhdCBsZWFzdCAxMiBi
eXRlcyB1bnVzZWQgdG8KLSAgICBhY2NvbW1vZGF0ZSBhbiBlc2NhcGVkIHN1cnJvZ2F0ZSBwYWly
ICJcdVhYWFhcdVhYWFgiICovCi0gICAgb3V0cHV0W2NoYXJzKytdID0gJ1xcJzsKLSAgICBzd2l0
Y2ggKGMpIHsKLSAgICAgICAgY2FzZSAnXFwnOiBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOyBi
cmVhazsKLSAgICAgICAgY2FzZSAnIic6IG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7IGJyZWFr
OwotICAgICAgICBjYXNlICdcYic6IG91dHB1dFtjaGFycysrXSA9ICdiJzsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgJ1xmJzogb3V0cHV0W2NoYXJzKytdID0gJ2YnOyBicmVhazsKLSAgICAgICAgY2Fz
ZSAnXG4nOiBvdXRwdXRbY2hhcnMrK10gPSAnbic7IGJyZWFrOwotICAgICAgICBjYXNlICdccic6
IG91dHB1dFtjaGFycysrXSA9ICdyJzsgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1x0Jzogb3V0cHV0
W2NoYXJzKytdID0gJ3QnOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSNpZmRlZiBQeV9VTklD
T0RFX1dJREUKLSAgICAgICAgICAgIGlmIChjID49IDB4MTAwMDApIHsKLSAgICAgICAgICAgICAg
ICAvKiBVVEYtMTYgc3Vycm9nYXRlIHBhaXIgKi8KLSAgICAgICAgICAgICAgICBQeV9VTklDT0RF
IHYgPSBjIC0gMHgxMDAwMDsKLSAgICAgICAgICAgICAgICBjID0gMHhkODAwIHwgKCh2ID4+IDEw
KSAmIDB4M2ZmKTsKLSAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAndSc7Ci0gICAg
ICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gIjAxMjM0NTY3ODlhYmNkZWYiWyhjID4+IDEy
KSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gIjAxMjM0NTY3ODlh
YmNkZWYiWyhjID4+ICA4KSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytd
ID0gIjAxMjM0NTY3ODlhYmNkZWYiWyhjID4+ICA0KSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAg
b3V0cHV0W2NoYXJzKytdID0gIjAxMjM0NTY3ODlhYmNkZWYiWyhjICAgICAgKSAmIDB4Zl07Ci0g
ICAgICAgICAgICAgICAgYyA9IDB4ZGMwMCB8ICh2ICYgMHgzZmYpOwotICAgICAgICAgICAgICAg
IG91dHB1dFtjaGFycysrXSA9ICdcXCc7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAg
ICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsKLSAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9
ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyA+PiAxMikgJiAweGZdOwotICAgICAgICAgICAgb3V0cHV0
W2NoYXJzKytdID0gIjAxMjM0NTY3ODlhYmNkZWYiWyhjID4+ICA4KSAmIDB4Zl07Ci0gICAgICAg
ICAgICBvdXRwdXRbY2hhcnMrK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMgPj4gIDQpICYgMHhm
XTsKLSAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyAg
ICAgICkgJiAweGZdOwotICAgIH0KLSAgICByZXR1cm4gY2hhcnM7Ci19Ci0KLXN0YXRpYyBQeU9i
amVjdCAqCi1hc2NpaV9lc2NhcGVfdW5pY29kZShQeU9iamVjdCAqcHlzdHIpCi17Ci0gICAgLyog
VGFrZSBhIFB5VW5pY29kZSBweXN0ciBhbmQgcmV0dXJuIGEgbmV3IEFTQ0lJLW9ubHkgZXNjYXBl
ZCBQeVN0cmluZyAqLwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeV9zc2l6ZV90IGlucHV0X2No
YXJzOwotICAgIFB5X3NzaXplX3Qgb3V0cHV0X3NpemU7Ci0gICAgUHlfc3NpemVfdCBtYXhfb3V0
cHV0X3NpemU7Ci0gICAgUHlfc3NpemVfdCBjaGFyczsKLSAgICBQeU9iamVjdCAqcnZhbDsKLSAg
ICBjaGFyICpvdXRwdXQ7Ci0gICAgUHlfVU5JQ09ERSAqaW5wdXRfdW5pY29kZTsKLQotICAgIGlu
cHV0X2NoYXJzID0gUHlVbmljb2RlX0dFVF9TSVpFKHB5c3RyKTsKLSAgICBpbnB1dF91bmljb2Rl
ID0gUHlVbmljb2RlX0FTX1VOSUNPREUocHlzdHIpOwotCi0gICAgLyogT25lIGNoYXIgaW5wdXQg
Y2FuIGJlIHVwIHRvIDYgY2hhcnMgb3V0cHV0LCBlc3RpbWF0ZSA0IG9mIHRoZXNlICovCi0gICAg
b3V0cHV0X3NpemUgPSAyICsgKE1JTl9FWFBBTlNJT04gKiA0KSArIGlucHV0X2NoYXJzOwotICAg
IG1heF9vdXRwdXRfc2l6ZSA9IDIgKyAoaW5wdXRfY2hhcnMgKiBNQVhfRVhQQU5TSU9OKTsKLSAg
ICBydmFsID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0cHV0X3NpemUpOwot
ICAgIGlmIChydmFsID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAg
IG91dHB1dCA9IFB5U3RyaW5nX0FTX1NUUklORyhydmFsKTsKLSAgICBjaGFycyA9IDA7Ci0gICAg
b3V0cHV0W2NoYXJzKytdID0gJyInOwotICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dF9jaGFyczsg
aSsrKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IGlucHV0X3VuaWNvZGVbaV07Ci0gICAgICAg
IGlmIChTX0NIQVIoYykpIHsKLSAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGFycyA9IGFzY2lpX2Vz
Y2FwZV9jaGFyKGMsIG91dHB1dCwgY2hhcnMpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvdXRw
dXRfc2l6ZSAtIGNoYXJzIDwgKDEgKyBNQVhfRVhQQU5TSU9OKSkgewotICAgICAgICAgICAgLyog
VGhlcmUncyBtb3JlIHRoYW4gZm91ciwgc28gbGV0J3MgcmVzaXplIGJ5IGEgbG90ICovCi0gICAg
ICAgICAgICBQeV9zc2l6ZV90IG5ld19vdXRwdXRfc2l6ZSA9IG91dHB1dF9zaXplICogMjsKLSAg
ICAgICAgICAgIC8qIFRoaXMgaXMgYW4gdXBwZXIgYm91bmQgKi8KLSAgICAgICAgICAgIGlmIChu
ZXdfb3V0cHV0X3NpemUgPiBtYXhfb3V0cHV0X3NpemUpIHsKLSAgICAgICAgICAgICAgICBuZXdf
b3V0cHV0X3NpemUgPSBtYXhfb3V0cHV0X3NpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgb3V0cHV0IHNpemUgY2hhbmdlZCBiZWZvcmUgcmVzaXpp
bmcgKi8KLSAgICAgICAgICAgIGlmIChuZXdfb3V0cHV0X3NpemUgIT0gb3V0cHV0X3NpemUpIHsK
LSAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSA9IG5ld19vdXRwdXRfc2l6ZTsKLSAgICAgICAg
ICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnZhbCwgb3V0cHV0X3NpemUpID09IC0xKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBvdXRwdXQgPSBQeVN0cmluZ19BU19TVFJJTkcocnZhbCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgb3V0cHV0W2NoYXJzKytdID0gJyInOwotICAg
IGlmIChfUHlTdHJpbmdfUmVzaXplKCZydmFsLCBjaGFycykgPT0gLTEpIHsKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBydmFsOwotfQotCi1zdGF0aWMgUHlPYmplY3Qg
KgotYXNjaWlfZXNjYXBlX3N0cihQeU9iamVjdCAqcHlzdHIpCi17Ci0gICAgLyogVGFrZSBhIFB5
U3RyaW5nIHB5c3RyIGFuZCByZXR1cm4gYSBuZXcgQVNDSUktb25seSBlc2NhcGVkIFB5U3RyaW5n
ICovCi0gICAgUHlfc3NpemVfdCBpOwotICAgIFB5X3NzaXplX3QgaW5wdXRfY2hhcnM7Ci0gICAg
UHlfc3NpemVfdCBvdXRwdXRfc2l6ZTsKLSAgICBQeV9zc2l6ZV90IGNoYXJzOwotICAgIFB5T2Jq
ZWN0ICpydmFsOwotICAgIGNoYXIgKm91dHB1dDsKLSAgICBjaGFyICppbnB1dF9zdHI7Ci0KLSAg
ICBpbnB1dF9jaGFycyA9IFB5U3RyaW5nX0dFVF9TSVpFKHB5c3RyKTsKLSAgICBpbnB1dF9zdHIg
PSBQeVN0cmluZ19BU19TVFJJTkcocHlzdHIpOwotCi0gICAgLyogRmFzdCBwYXRoIGZvciBhIHN0
cmluZyB0aGF0J3MgYWxyZWFkeSBBU0NJSSAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dF9j
aGFyczsgaSsrKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IChQeV9VTklDT0RFKSh1bnNpZ25l
ZCBjaGFyKWlucHV0X3N0cltpXTsKLSAgICAgICAgaWYgKCFTX0NIQVIoYykpIHsKLSAgICAgICAg
ICAgIC8qIElmIHdlIGhhdmUgdG8gZXNjYXBlIHNvbWV0aGluZywgc2NhbiB0aGUgc3RyaW5nIGZv
ciB1bmljb2RlICovCi0gICAgICAgICAgICBQeV9zc2l6ZV90IGo7Ci0gICAgICAgICAgICBmb3Ig
KGogPSBpOyBqIDwgaW5wdXRfY2hhcnM7IGorKykgewotICAgICAgICAgICAgICAgIGMgPSAoUHlf
VU5JQ09ERSkodW5zaWduZWQgY2hhcilpbnB1dF9zdHJbal07Ci0gICAgICAgICAgICAgICAgaWYg
KGMgPiAweDdmKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFdlIGhpdCBhIG5vbi1BU0NJSSBj
aGFyYWN0ZXIsIGJhaWwgdG8gdW5pY29kZSBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgIFB5
T2JqZWN0ICp1bmk7Ci0gICAgICAgICAgICAgICAgICAgIHVuaSA9IFB5VW5pY29kZV9EZWNvZGVV
VEY4KGlucHV0X3N0ciwgaW5wdXRfY2hhcnMsICJzdHJpY3QiKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHVuaSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVM
TDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBydmFsID0gYXNj
aWlfZXNjYXBlX3VuaWNvZGUodW5pKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHVu
aSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBydmFsOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGkgPT0gaW5wdXRfY2hhcnMpIHsKLSAgICAgICAgLyogSW5wdXQgaXMgYWxyZWFkeSBB
U0NJSSAqLwotICAgICAgICBvdXRwdXRfc2l6ZSA9IDIgKyBpbnB1dF9jaGFyczsKLSAgICB9Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIC8qIE9uZSBjaGFyIGlucHV0IGNhbiBiZSB1cCB0byA2IGNoYXJz
IG91dHB1dCwgZXN0aW1hdGUgNCBvZiB0aGVzZSAqLwotICAgICAgICBvdXRwdXRfc2l6ZSA9IDIg
KyAoTUlOX0VYUEFOU0lPTiAqIDQpICsgaW5wdXRfY2hhcnM7Ci0gICAgfQotICAgIHJ2YWwgPSBQ
eVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBvdXRwdXRfc2l6ZSk7Ci0gICAgaWYgKHJ2
YWwgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgb3V0cHV0ID0g
UHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwpOwotICAgIG91dHB1dFswXSA9ICciJzsKLQotICAgIC8q
IFdlIGtub3cgdGhhdCBldmVyeXRoaW5nIHVwIHRvIGkgaXMgQVNDSUkgYWxyZWFkeSAqLwotICAg
IGNoYXJzID0gaSArIDE7Ci0gICAgbWVtY3B5KCZvdXRwdXRbMV0sIGlucHV0X3N0ciwgaSk7Ci0K
LSAgICBmb3IgKDsgaSA8IGlucHV0X2NoYXJzOyBpKyspIHsKLSAgICAgICAgUHlfVU5JQ09ERSBj
ID0gKFB5X1VOSUNPREUpKHVuc2lnbmVkIGNoYXIpaW5wdXRfc3RyW2ldOwotICAgICAgICBpZiAo
U19DSEFSKGMpKSB7Ci0gICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hhcnMgPSBhc2NpaV9lc2NhcGVf
Y2hhcihjLCBvdXRwdXQsIGNoYXJzKTsKLSAgICAgICAgfQotICAgICAgICAvKiBBbiBBU0NJSSBj
aGFyIGNhbid0IHBvc3NpYmx5IGV4cGFuZCB0byBhIHN1cnJvZ2F0ZSEgKi8KLSAgICAgICAgaWYg
KG91dHB1dF9zaXplIC0gY2hhcnMgPCAoMSArIE1JTl9FWFBBTlNJT04pKSB7Ci0gICAgICAgICAg
ICAvKiBUaGVyZSdzIG1vcmUgdGhhbiBmb3VyLCBzbyBsZXQncyByZXNpemUgYnkgYSBsb3QgKi8K
LSAgICAgICAgICAgIG91dHB1dF9zaXplICo9IDI7Ci0gICAgICAgICAgICBpZiAob3V0cHV0X3Np
emUgPiAyICsgKGlucHV0X2NoYXJzICogTUlOX0VYUEFOU0lPTikpIHsKLSAgICAgICAgICAgICAg
ICBvdXRwdXRfc2l6ZSA9IDIgKyAoaW5wdXRfY2hhcnMgKiBNSU5fRVhQQU5TSU9OKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZydmFsLCBvdXRwdXRf
c2l6ZSkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG91dHB1dCA9IFB5U3RyaW5nX0FTX1NUUklORyhydmFsKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBvdXRwdXRbY2hhcnMrK10gPSAnIic7Ci0gICAgaWYgKF9QeVN0cmlu
Z19SZXNpemUoJnJ2YWwsIGNoYXJzKSA9PSAtMSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJ2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yYWlzZV9lcnJtc2coY2hh
ciAqbXNnLCBQeU9iamVjdCAqcywgUHlfc3NpemVfdCBlbmQpCi17Ci0gICAgLyogVXNlIHRoZSBQ
eXRob24gZnVuY3Rpb24gc2ltcGxlanNvbi5kZWNvZGVyLmVycm1zZyB0byByYWlzZSBhIG5pY2UK
LSAgICBsb29raW5nIFZhbHVlRXJyb3IgZXhjZXB0aW9uICovCi0gICAgc3RhdGljIFB5T2JqZWN0
ICpKU09ORGVjb2RlRXJyb3IgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpleGM7Ci0gICAgaWYgKEpT
T05EZWNvZGVFcnJvciA9PSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpkZWNvZGVyID0gUHlJ
bXBvcnRfSW1wb3J0TW9kdWxlKCJzaW1wbGVqc29uLmRlY29kZXIiKTsKLSAgICAgICAgaWYgKGRl
Y29kZXIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlNPTkRlY29kZUVy
cm9yID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhkZWNvZGVyLCAiSlNPTkRlY29kZUVycm9yIik7
Ci0gICAgICAgIFB5X0RFQ1JFRihkZWNvZGVyKTsKLSAgICAgICAgaWYgKEpTT05EZWNvZGVFcnJv
ciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBleGMgPSBQeU9iamVj
dF9DYWxsRnVuY3Rpb24oSlNPTkRlY29kZUVycm9yLCAiKHpPTyYpIiwgbXNnLCBzLCBfY29udmVy
dFB5SW50X0Zyb21Tc2l6ZV90LCAmZW5kKTsKLSAgICBpZiAoZXhjKSB7Ci0gICAgICAgIFB5RXJy
X1NldE9iamVjdChKU09ORGVjb2RlRXJyb3IsIGV4Yyk7Ci0gICAgICAgIFB5X0RFQ1JFRihleGMp
OwotICAgIH0KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLWpvaW5fbGlzdF91bmljb2RlKFB5T2Jq
ZWN0ICpsc3QpCi17Ci0gICAgLyogcmV0dXJuIHUnJy5qb2luKGxzdCkgKi8KLSAgICBzdGF0aWMg
UHlPYmplY3QgKmpvaW5mbiA9IE5VTEw7Ci0gICAgaWYgKGpvaW5mbiA9PSBOVUxMKSB7Ci0gICAg
ICAgIFB5T2JqZWN0ICp1c3RyID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIDApOwotICAg
ICAgICBpZiAodXN0ciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAg
ICAgam9pbmZuID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh1c3RyLCAiam9pbiIpOwotICAgICAg
ICBQeV9ERUNSRUYodXN0cik7Ci0gICAgICAgIGlmIChqb2luZm4gPT0gTlVMTCkKLSAgICAgICAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9u
T2JqQXJncyhqb2luZm4sIGxzdCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1qb2lu
X2xpc3Rfc3RyaW5nKFB5T2JqZWN0ICpsc3QpCi17Ci0gICAgLyogcmV0dXJuICcnLmpvaW4obHN0
KSAqLwotICAgIHN0YXRpYyBQeU9iamVjdCAqam9pbmZuID0gTlVMTDsKLSAgICBpZiAoam9pbmZu
ID09IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKnVzdHIgPSBQeVN0cmluZ19Gcm9tU3RyaW5n
QW5kU2l6ZShOVUxMLCAwKTsKLSAgICAgICAgaWYgKHVzdHIgPT0gTlVMTCkKLSAgICAgICAgICAg
IHJldHVybiBOVUxMOwotCi0gICAgICAgIGpvaW5mbiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmco
dXN0ciwgImpvaW4iKTsKLSAgICAgICAgUHlfREVDUkVGKHVzdHIpOwotICAgICAgICBpZiAoam9p
bmZuID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJu
IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Moam9pbmZuLCBsc3QsIE5VTEwpOwotfQotCi1z
dGF0aWMgUHlPYmplY3QgKgotX2J1aWxkX3J2YWxfaW5kZXhfdHVwbGUoUHlPYmplY3QgKnJ2YWws
IFB5X3NzaXplX3QgaWR4KSB7Ci0gICAgLyogcmV0dXJuIChydmFsLCBpZHgpIHR1cGxlLCBzdGVh
bGluZyByZWZlcmVuY2UgdG8gcnZhbCAqLwotICAgIFB5T2JqZWN0ICp0cGw7Ci0gICAgUHlPYmpl
Y3QgKnB5aWR4OwotICAgIC8qCi0gICAgc3RlYWwgYSByZWZlcmVuY2UgdG8gcnZhbCwgcmV0dXJu
cyAocnZhbCwgaWR4KQotICAgICovCi0gICAgaWYgKHJ2YWwgPT0gTlVMTCkgewotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcHlpZHggPSBQeUludF9Gcm9tU3NpemVfdChpZHgpOwot
ICAgIGlmIChweWlkeCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydmFsKTsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHRwbCA9IFB5VHVwbGVfTmV3KDIpOwotICAgIGlm
ICh0cGwgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYocHlpZHgpOwotICAgICAgICBQeV9E
RUNSRUYocnZhbCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBQeVR1cGxlX1NF
VF9JVEVNKHRwbCwgMCwgcnZhbCk7Ci0gICAgUHlUdXBsZV9TRVRfSVRFTSh0cGwsIDEsIHB5aWR4
KTsKLSAgICByZXR1cm4gdHBsOwotfQotCi0jZGVmaW5lIEFQUEVORF9PTERfQ0hVTksgXAotICAg
IGlmIChjaHVuayAhPSBOVUxMKSB7IFwKLSAgICAgICAgaWYgKGNodW5rcyA9PSBOVUxMKSB7IFwK
LSAgICAgICAgICAgIGNodW5rcyA9IFB5TGlzdF9OZXcoMCk7IFwKLSAgICAgICAgICAgIGlmIChj
aHVua3MgPT0gTlVMTCkgeyBcCi0gICAgICAgICAgICAgICAgZ290byBiYWlsOyBcCi0gICAgICAg
ICAgICB9IFwKLSAgICAgICAgfSBcCi0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGNodW5rcywg
Y2h1bmspKSB7IFwKLSAgICAgICAgICAgIGdvdG8gYmFpbDsgXAotICAgICAgICB9IFwKLSAgICAg
ICAgUHlfQ0xFQVIoY2h1bmspOyBcCi0gICAgfQotCi1zdGF0aWMgUHlPYmplY3QgKgotc2NhbnN0
cmluZ19zdHIoUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGVuZCwgY2hhciAqZW5jb2Rpbmcs
IGludCBzdHJpY3QsIFB5X3NzaXplX3QgKm5leHRfZW5kX3B0cikKLXsKLSAgICAvKiBSZWFkIHRo
ZSBKU09OIHN0cmluZyBmcm9tIFB5U3RyaW5nIHB5c3RyLgotICAgIGVuZCBpcyB0aGUgaW5kZXgg
b2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgcXVvdGUuCi0gICAgZW5jb2RpbmcgaXMg
dGhlIGVuY29kaW5nIG9mIHB5c3RyIChtdXN0IGJlIGFuIEFTQ0lJIHN1cGVyc2V0KQotICAgIGlm
IHN0cmljdCBpcyB6ZXJvIHRoZW4gbGl0ZXJhbCBjb250cm9sIGNoYXJhY3RlcnMgYXJlIGFsbG93
ZWQKLSAgICAqbmV4dF9lbmRfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCBvZiB0
aGUgY2hhcmFjdGVyCi0gICAgICAgIGFmdGVyIHRoZSBlbmQgcXVvdGUKLQotICAgIFJldHVybiB2
YWx1ZSBpcyBhIG5ldyBQeVN0cmluZyAoaWYgQVNDSUktb25seSkgb3IgUHlVbmljb2RlCi0gICAg
Ki8KLSAgICBQeU9iamVjdCAqcnZhbDsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IFB5U3RyaW5nX0dF
VF9TSVpFKHB5c3RyKTsKLSAgICBQeV9zc2l6ZV90IGJlZ2luID0gZW5kIC0gMTsKLSAgICBQeV9z
c2l6ZV90IG5leHQgPSBiZWdpbjsKLSAgICBpbnQgaGFzX3VuaWNvZGUgPSAwOwotICAgIGNoYXIg
KmJ1ZiA9IFB5U3RyaW5nX0FTX1NUUklORyhweXN0cik7Ci0gICAgUHlPYmplY3QgKmNodW5rcyA9
IE5VTEw7Ci0gICAgUHlPYmplY3QgKmNodW5rID0gTlVMTDsKLQotICAgIGlmIChlbmQgPCAwIHx8
IGxlbiA8PSBlbmQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3Is
ICJlbmQgaXMgb3V0IG9mIGJvdW5kcyIpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotICAg
IHdoaWxlICgxKSB7Ci0gICAgICAgIC8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIG9yIHRo
ZSBuZXh0IGVzY2FwZSAqLwotICAgICAgICBQeV9VTklDT0RFIGMgPSAwOwotICAgICAgICBmb3Ig
KG5leHQgPSBlbmQ7IG5leHQgPCBsZW47IG5leHQrKykgewotICAgICAgICAgICAgYyA9ICh1bnNp
Z25lZCBjaGFyKWJ1ZltuZXh0XTsKLSAgICAgICAgICAgIGlmIChjID09ICciJyB8fCBjID09ICdc
XCcpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgaWYgKHN0cmljdCAmJiBjIDw9IDB4MWYpIHsKLSAgICAgICAgICAgICAgICByYWlzZV9l
cnJtc2coIkludmFsaWQgY29udHJvbCBjaGFyYWN0ZXIgYXQiLCBweXN0ciwgbmV4dCk7Ci0gICAg
ICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAoYyA+IDB4N2YpIHsKLSAgICAgICAgICAgICAgICBoYXNfdW5pY29kZSA9IDE7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEoYyA9PSAnIicgfHwgYyA9PSAnXFwnKSkg
ewotICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5n
IGF0IiwgcHlzdHIsIGJlZ2luKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQot
ICAgICAgICAvKiBQaWNrIHVwIHRoaXMgY2h1bmsgaWYgaXQncyBub3QgemVybyBsZW5ndGggKi8K
LSAgICAgICAgaWYgKG5leHQgIT0gZW5kKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqc3RyY2h1
bms7Ci0gICAgICAgICAgICBBUFBFTkRfT0xEX0NIVU5LCi0gICAgICAgICAgICBzdHJjaHVuayA9
IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCZidWZbZW5kXSwgbmV4dCAtIGVuZCk7Ci0gICAg
ICAgICAgICBpZiAoc3RyY2h1bmsgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGdvdG8gYmFp
bDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoYXNfdW5pY29kZSkgewotICAgICAg
ICAgICAgICAgIGNodW5rID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHN0cmNodW5rLCBl
bmNvZGluZywgTlVMTCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cmNodW5rKTsKLSAg
ICAgICAgICAgICAgICBpZiAoY2h1bmsgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2h1bmsgPSBzdHJjaHVuazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBuZXh0Kys7Ci0gICAgICAgIGlmIChjID09ICciJykgewotICAg
ICAgICAgICAgZW5kID0gbmV4dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChuZXh0ID09IGxlbikgewotICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnRlcm1p
bmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0IiwgcHlzdHIsIGJlZ2luKTsKLSAgICAgICAgICAgIGdv
dG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBjID0gYnVmW25leHRdOwotICAgICAgICBpZiAo
YyAhPSAndScpIHsKLSAgICAgICAgICAgIC8qIE5vbi11bmljb2RlIGJhY2tzbGFzaCBlc2NhcGVz
ICovCi0gICAgICAgICAgICBlbmQgPSBuZXh0ICsgMTsKLSAgICAgICAgICAgIHN3aXRjaCAoYykg
ewotICAgICAgICAgICAgICAgIGNhc2UgJyInOiBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
ICdcXCc6IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJy8nOiBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlICdiJzogYyA9ICdcYic7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
J2YnOiBjID0gJ1xmJzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnbic6IGMgPSAnXG4n
OyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICdyJzogYyA9ICdccic7IGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgJ3QnOiBjID0gJ1x0JzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdDogYyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYyA9PSAwKSB7
Ci0gICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcZXNjYXBlIiwgcHlzdHIs
IGVuZCAtIDIpOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGMgPSAwOwotICAgICAgICAgICAg
bmV4dCsrOwotICAgICAgICAgICAgZW5kID0gbmV4dCArIDQ7Ci0gICAgICAgICAgICBpZiAoZW5k
ID49IGxlbikgewotICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXHVYWFhY
IGVzY2FwZSIsIHB5c3RyLCBuZXh0IC0gMSk7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogRGVjb2RlIDQgaGV4IGRpZ2l0cyAqLwotICAg
ICAgICAgICAgZm9yICg7IG5leHQgPCBlbmQ7IG5leHQrKykgewotICAgICAgICAgICAgICAgIFB5
X1VOSUNPREUgZGlnaXQgPSBidWZbbmV4dF07Ci0gICAgICAgICAgICAgICAgYyA8PD0gNDsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGRpZ2l0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
JzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzkn
OgotICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAoZGlnaXQgLSAnMCcpOyBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2FzZSAnZCc6
IGNhc2UgJ2UnOgotICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJ2EnICsgMTApOyBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGMg
fD0gKGRpZ2l0IC0gJ0EnICsgMTApOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXHVYWFhY
IGVzY2FwZSIsIHB5c3RyLCBlbmQgLSA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgUHlfVU5JQ09E
RV9XSURFCi0gICAgICAgICAgICAvKiBTdXJyb2dhdGUgcGFpciAqLwotICAgICAgICAgICAgaWYg
KChjICYgMHhmYzAwKSA9PSAweGQ4MDApIHsKLSAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGMy
ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoZW5kICsgNiA+PSBsZW4pIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSIsIHB5c3RyLCBl
bmQgLSA1KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoYnVmW25leHQrK10gIT0gJ1xcJyB8fCBidWZbbmV4dCsr
XSAhPSAndScpIHsKLSAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBo
aWdoIHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKLSAgICAgICAgICAgICAgICAgICAgZ290
byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbmQgKz0gNjsKLSAg
ICAgICAgICAgICAgICAvKiBEZWNvZGUgNCBoZXggZGlnaXRzICovCi0gICAgICAgICAgICAgICAg
Zm9yICg7IG5leHQgPCBlbmQ7IG5leHQrKykgewotICAgICAgICAgICAgICAgICAgICBjMiA8PD0g
NDsKLSAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBkaWdpdCA9IGJ1ZltuZXh0XTsKLSAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChkaWdpdCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAn
OCc6IGNhc2UgJzknOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAt
ICcwJyk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYSc6IGNhc2UgJ2In
OiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOgotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnZic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJ2En
ICsgMTApOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0EnOiBjYXNlICdC
JzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ0YnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAtICdB
JyArIDEwKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXHVYWFhYIGVzY2Fw
ZSIsIHB5c3RyLCBlbmQgLSA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJh
aWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKChjMiAmIDB4ZmMwMCkgIT0gMHhkYzAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJhaXNlX2Vycm1zZygiVW5wYWlyZWQgaGlnaCBzdXJyb2dhdGUiLCBweXN0ciwgZW5kIC0gNSk7
Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjIC0gMHhkODAwKSA8PCAxMCkgfCAoYzIgLSAw
eGRjMDApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKChjICYgMHhmYzAw
KSA9PSAweGRjMDApIHsKLSAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIlVucGFpcmVkIGxv
dyBzdXJyb2dhdGUiLCBweXN0ciwgZW5kIC0gNSk7Ci0gICAgICAgICAgICAgICAgZ290byBiYWls
OwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgaWYgKGMgPiAweDdm
KSB7Ci0gICAgICAgICAgICBoYXNfdW5pY29kZSA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgQVBQ
RU5EX09MRF9DSFVOSwotICAgICAgICBpZiAoaGFzX3VuaWNvZGUpIHsKLSAgICAgICAgICAgIGNo
dW5rID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKCZjLCAxKTsKLSAgICAgICAgICAgIGlmIChjaHVu
ayA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hhciBjX2NoYXIgPSBQeV9D
SEFSTUFTSyhjKTsKLSAgICAgICAgICAgIGNodW5rID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNp
emUoJmNfY2hhciwgMSk7Ci0gICAgICAgICAgICBpZiAoY2h1bmsgPT0gTlVMTCkgewotICAgICAg
ICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChjaHVua3MgPT0gTlVMTCkgewotICAgICAgICBpZiAoY2h1bmsgIT0gTlVMTCkKLSAg
ICAgICAgICAgIHJ2YWwgPSBjaHVuazsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcnZhbCA9
IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCIiLCAwKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEFQUEVORF9PTERfQ0hVTksKLSAgICAgICAgcnZhbCA9IGpvaW5fbGlzdF9zdHJpbmco
Y2h1bmtzKTsKLSAgICAgICAgaWYgKHJ2YWwgPT0gTlVMTCkgewotICAgICAgICAgICAgZ290byBi
YWlsOwotICAgICAgICB9Ci0gICAgICAgIFB5X0NMRUFSKGNodW5rcyk7Ci0gICAgfQotCi0gICAg
Km5leHRfZW5kX3B0ciA9IGVuZDsKLSAgICByZXR1cm4gcnZhbDsKLWJhaWw6Ci0gICAgKm5leHRf
ZW5kX3B0ciA9IC0xOwotICAgIFB5X1hERUNSRUYoY2h1bmspOwotICAgIFB5X1hERUNSRUYoY2h1
bmtzKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotCi1zdGF0aWMgUHlPYmplY3QgKgotc2NhbnN0
cmluZ191bmljb2RlKFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBlbmQsIGludCBzdHJpY3Qs
IFB5X3NzaXplX3QgKm5leHRfZW5kX3B0cikKLXsKLSAgICAvKiBSZWFkIHRoZSBKU09OIHN0cmlu
ZyBmcm9tIFB5VW5pY29kZSBweXN0ci4KLSAgICBlbmQgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJz
dCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHF1b3RlLgotICAgIGlmIHN0cmljdCBpcyB6ZXJvIHRoZW4g
bGl0ZXJhbCBjb250cm9sIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQKLSAgICAqbmV4dF9lbmRfcHRy
IGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyCi0gICAgICAg
IGFmdGVyIHRoZSBlbmQgcXVvdGUKLQotICAgIFJldHVybiB2YWx1ZSBpcyBhIG5ldyBQeVVuaWNv
ZGUKLSAgICAqLwotICAgIFB5T2JqZWN0ICpydmFsOwotICAgIFB5X3NzaXplX3QgbGVuID0gUHlV
bmljb2RlX0dFVF9TSVpFKHB5c3RyKTsKLSAgICBQeV9zc2l6ZV90IGJlZ2luID0gZW5kIC0gMTsK
LSAgICBQeV9zc2l6ZV90IG5leHQgPSBiZWdpbjsKLSAgICBjb25zdCBQeV9VTklDT0RFICpidWYg
PSBQeVVuaWNvZGVfQVNfVU5JQ09ERShweXN0cik7Ci0gICAgUHlPYmplY3QgKmNodW5rcyA9IE5V
TEw7Ci0gICAgUHlPYmplY3QgKmNodW5rID0gTlVMTDsKLQotICAgIGlmIChlbmQgPCAwIHx8IGxl
biA8PSBlbmQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJl
bmQgaXMgb3V0IG9mIGJvdW5kcyIpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotICAgIHdo
aWxlICgxKSB7Ci0gICAgICAgIC8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIG9yIHRoZSBu
ZXh0IGVzY2FwZSAqLwotICAgICAgICBQeV9VTklDT0RFIGMgPSAwOwotICAgICAgICBmb3IgKG5l
eHQgPSBlbmQ7IG5leHQgPCBsZW47IG5leHQrKykgewotICAgICAgICAgICAgYyA9IGJ1ZltuZXh0
XTsKLSAgICAgICAgICAgIGlmIChjID09ICciJyB8fCBjID09ICdcXCcpIHsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHN0cmljdCAm
JiBjIDw9IDB4MWYpIHsKLSAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgY29u
dHJvbCBjaGFyYWN0ZXIgYXQiLCBweXN0ciwgbmV4dCk7Ci0gICAgICAgICAgICAgICAgZ290byBi
YWlsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghKGMgPT0gJyInIHx8
IGMgPT0gJ1xcJykpIHsKLSAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW50ZXJtaW5hdGVkIHN0
cmluZyBzdGFydGluZyBhdCIsIHB5c3RyLCBiZWdpbik7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7
Ci0gICAgICAgIH0KLSAgICAgICAgLyogUGljayB1cCB0aGlzIGNodW5rIGlmIGl0J3Mgbm90IHpl
cm8gbGVuZ3RoICovCi0gICAgICAgIGlmIChuZXh0ICE9IGVuZCkgewotICAgICAgICAgICAgQVBQ
RU5EX09MRF9DSFVOSwotICAgICAgICAgICAgY2h1bmsgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUo
JmJ1ZltlbmRdLCBuZXh0IC0gZW5kKTsKLSAgICAgICAgICAgIGlmIChjaHVuayA9PSBOVUxMKSB7
Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIG5leHQrKzsKLSAgICAgICAgaWYgKGMgPT0gJyInKSB7Ci0gICAgICAgICAgICBlbmQg
PSBuZXh0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5leHQg
PT0gbGVuKSB7Ci0gICAgICAgICAgICByYWlzZV9lcnJtc2coIlVudGVybWluYXRlZCBzdHJpbmcg
c3RhcnRpbmcgYXQiLCBweXN0ciwgYmVnaW4pOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAg
ICAgICB9Ci0gICAgICAgIGMgPSBidWZbbmV4dF07Ci0gICAgICAgIGlmIChjICE9ICd1Jykgewot
ICAgICAgICAgICAgLyogTm9uLXVuaWNvZGUgYmFja3NsYXNoIGVzY2FwZXMgKi8KLSAgICAgICAg
ICAgIGVuZCA9IG5leHQgKyAxOwotICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSAnIic6IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzogYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSAnLyc6IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
J2InOiBjID0gJ1xiJzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnZic6IGMgPSAnXGYn
OyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICduJzogYyA9ICdcbic7IGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgJ3InOiBjID0gJ1xyJzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSAndCc6IGMgPSAnXHQnOyBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiBjID0g
MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjID09IDApIHsKLSAgICAgICAgICAg
ICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFxlc2NhcGUiLCBweXN0ciwgZW5kIC0gMik7Ci0g
ICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgYyA9IDA7Ci0gICAgICAgICAgICBuZXh0Kys7Ci0gICAg
ICAgICAgICBlbmQgPSBuZXh0ICsgNDsKLSAgICAgICAgICAgIGlmIChlbmQgPj0gbGVuKSB7Ci0g
ICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhYWFggZXNjYXBlIiwgcHlz
dHIsIG5leHQgLSAxKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAvKiBEZWNvZGUgNCBoZXggZGlnaXRzICovCi0gICAgICAgICAgICBmb3Ig
KDsgbmV4dCA8IGVuZDsgbmV4dCsrKSB7Ci0gICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBkaWdp
dCA9IGJ1ZltuZXh0XTsKLSAgICAgICAgICAgICAgICBjIDw8PSA0OwotICAgICAgICAgICAgICAg
IHN3aXRjaCAoZGlnaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnMCc6IGNhc2UgJzEn
OiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgotICAgICAgICAgICAgICAgICAgICBjYXNl
ICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjIHw9IChkaWdpdCAtICcwJyk7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgICAgICAgICAgICAgYyB8
PSAoZGlnaXQgLSAnYScgKyAxMCk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdB
JzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ0YnOgotICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAoZGlnaXQgLSAn
QScgKyAxMCk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhYWFggZXNjYXBlIiwgcHlz
dHIsIGVuZCAtIDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICAg
ICAgICAgIC8qIFN1cnJvZ2F0ZSBwYWlyICovCi0gICAgICAgICAgICBpZiAoKGMgJiAweGZjMDAp
ID09IDB4ZDgwMCkgewotICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgYzIgPSAwOwotICAgICAg
ICAgICAgICAgIGlmIChlbmQgKyA2ID49IGxlbikgewotICAgICAgICAgICAgICAgICAgICByYWlz
ZV9lcnJtc2coIlVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlIiwgcHlzdHIsIGVuZCAtIDUpOwotICAg
ICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmIChidWZbbmV4dCsrXSAhPSAnXFwnIHx8IGJ1ZltuZXh0KytdICE9ICd1Jykgewot
ICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIlVucGFpcmVkIGhpZ2ggc3Vycm9nYXRl
IiwgcHlzdHIsIGVuZCAtIDUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVuZCArPSA2OwotICAgICAgICAgICAgICAg
IC8qIERlY29kZSA0IGhleCBkaWdpdHMgKi8KLSAgICAgICAgICAgICAgICBmb3IgKDsgbmV4dCA8
IGVuZDsgbmV4dCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGMyIDw8PSA0OwotICAgICAgICAg
ICAgICAgICAgICBQeV9VTklDT0RFIGRpZ2l0ID0gYnVmW25leHRdOwotICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGRpZ2l0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzog
Y2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJzAnKTsgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBj
YXNlICdkJzogY2FzZSAnZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnYScgKyAxMCk7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzog
Y2FzZSAnRCc6IGNhc2UgJ0UnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRic6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJ0EnICsgMTApOyBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhYWFggZXNjYXBlIiwgcHlzdHIsIGVu
ZCAtIDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKGMy
ICYgMHhmYzAwKSAhPSAweGRjMDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNn
KCJVbnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKLSAgICAgICAgICAg
ICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBj
ID0gMHgxMDAwMCArICgoKGMgLSAweGQ4MDApIDw8IDEwKSB8IChjMiAtIDB4ZGMwMCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoKGMgJiAweGZjMDApID09IDB4ZGMwMCkg
ewotICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW5wYWlyZWQgbG93IHN1cnJvZ2F0ZSIs
IHB5c3RyLCBlbmQgLSA1KTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAg
ICB9Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBBUFBFTkRfT0xEX0NIVU5LCi0gICAgICAg
IGNodW5rID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKCZjLCAxKTsKLSAgICAgICAgaWYgKGNodW5r
ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChjaHVua3MgPT0gTlVMTCkgewotICAgICAgICBpZiAoY2h1bmsgIT0gTlVMTCkKLSAg
ICAgICAgICAgIHJ2YWwgPSBjaHVuazsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcnZhbCA9
IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCAwKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIEFQUEVORF9PTERfQ0hVTksKLSAgICAgICAgcnZhbCA9IGpvaW5fbGlzdF91bmljb2RlKGNo
dW5rcyk7Ci0gICAgICAgIGlmIChydmFsID09IE5VTEwpIHsKLSAgICAgICAgICAgIGdvdG8gYmFp
bDsKLSAgICAgICAgfQotICAgICAgICBQeV9DTEVBUihjaHVua3MpOwotICAgIH0KLSAgICAqbmV4
dF9lbmRfcHRyID0gZW5kOwotICAgIHJldHVybiBydmFsOwotYmFpbDoKLSAgICAqbmV4dF9lbmRf
cHRyID0gLTE7Ci0gICAgUHlfWERFQ1JFRihjaHVuayk7Ci0gICAgUHlfWERFQ1JFRihjaHVua3Mp
OwotICAgIHJldHVybiBOVUxMOwotfQotCi1QeURvY19TVFJWQVIocHlkb2Nfc2NhbnN0cmluZywK
LSAgICAic2NhbnN0cmluZyhiYXNlc3RyaW5nLCBlbmQsIGVuY29kaW5nLCBzdHJpY3Q9VHJ1ZSkg
LT4gKHN0ciwgZW5kKVxuIgotICAgICJcbiIKLSAgICAiU2NhbiB0aGUgc3RyaW5nIHMgZm9yIGEg
SlNPTiBzdHJpbmcuIEVuZCBpcyB0aGUgaW5kZXggb2YgdGhlXG4iCi0gICAgImNoYXJhY3RlciBp
biBzIGFmdGVyIHRoZSBxdW90ZSB0aGF0IHN0YXJ0ZWQgdGhlIEpTT04gc3RyaW5nLlxuIgotICAg
ICJVbmVzY2FwZXMgYWxsIHZhbGlkIEpTT04gc3RyaW5nIGVzY2FwZSBzZXF1ZW5jZXMgYW5kIHJh
aXNlcyBWYWx1ZUVycm9yXG4iCi0gICAgIm9uIGF0dGVtcHQgdG8gZGVjb2RlIGFuIGludmFsaWQg
c3RyaW5nLiBJZiBzdHJpY3QgaXMgRmFsc2UgdGhlbiBsaXRlcmFsXG4iCi0gICAgImNvbnRyb2wg
Y2hhcmFjdGVycyBhcmUgYWxsb3dlZCBpbiB0aGUgc3RyaW5nLlxuIgotICAgICJcbiIKLSAgICAi
UmV0dXJucyBhIHR1cGxlIG9mIHRoZSBkZWNvZGVkIHN0cmluZyBhbmQgdGhlIGluZGV4IG9mIHRo
ZSBjaGFyYWN0ZXIgaW4gc1xuIgotICAgICJhZnRlciB0aGUgZW5kIHF1b3RlLiIKLSk7Ci0KLXN0
YXRpYyBQeU9iamVjdCAqCi1weV9zY2Fuc3RyaW5nKFB5T2JqZWN0KiBzZWxmIFVOVVNFRCwgUHlP
YmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnB5c3RyOwotICAgIFB5T2JqZWN0ICpydmFs
OwotICAgIFB5X3NzaXplX3QgZW5kOwotICAgIFB5X3NzaXplX3QgbmV4dF9lbmQgPSAtMTsKLSAg
ICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgaW50IHN0cmljdCA9IDE7Ci0gICAgaWYgKCFQ
eUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTyZ8emk6c2NhbnN0cmluZyIsICZweXN0ciwgX2NvbnZl
cnRQeUludF9Bc1NzaXplX3QsICZlbmQsICZlbmNvZGluZywgJnN0cmljdCkpIHsKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7Ci0gICAgICAg
IGVuY29kaW5nID0gREVGQVVMVF9FTkNPRElORzsKLSAgICB9Ci0gICAgaWYgKFB5U3RyaW5nX0No
ZWNrKHB5c3RyKSkgewotICAgICAgICBydmFsID0gc2NhbnN0cmluZ19zdHIocHlzdHIsIGVuZCwg
ZW5jb2RpbmcsIHN0cmljdCwgJm5leHRfZW5kKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlVbmlj
b2RlX0NoZWNrKHB5c3RyKSkgewotICAgICAgICBydmFsID0gc2NhbnN0cmluZ191bmljb2RlKHB5
c3RyLCBlbmQsIHN0cmljdCwgJm5leHRfZW5kKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAg
IFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiZmly
c3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgbm90ICUuODBzIiwKLSAgICAgICAgICAgICAg
ICAgICAgIFB5X1RZUEUocHlzdHIpLT50cF9uYW1lKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotICAgIHJldHVybiBfYnVpbGRfcnZhbF9pbmRleF90dXBsZShydmFsLCBuZXh0X2VuZCk7
Ci19Ci0KLVB5RG9jX1NUUlZBUihweWRvY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSwKLSAgICAi
ZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoYmFzZXN0cmluZykgLT4gc3RyXG4iCi0gICAgIlxuIgot
ICAgICJSZXR1cm4gYW4gQVNDSUktb25seSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9u
IHN0cmluZyIKLSk7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1weV9lbmNvZGVfYmFzZXN0cmluZ19h
c2NpaShQeU9iamVjdCogc2VsZiBVTlVTRUQsIFB5T2JqZWN0ICpweXN0cikKLXsKLSAgICAvKiBS
ZXR1cm4gYW4gQVNDSUktb25seSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9uIHN0cmlu
ZyAqLwotICAgIC8qIE1FVEhfTyAqLwotICAgIGlmIChQeVN0cmluZ19DaGVjayhweXN0cikpIHsK
LSAgICAgICAgcmV0dXJuIGFzY2lpX2VzY2FwZV9zdHIocHlzdHIpOwotICAgIH0KLSAgICBlbHNl
IGlmIChQeVVuaWNvZGVfQ2hlY2socHlzdHIpKSB7Ci0gICAgICAgIHJldHVybiBhc2NpaV9lc2Nh
cGVfdW5pY29kZShweXN0cik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBQeUVycl9Gb3Jt
YXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImZpcnN0IGFyZ3VtZW50
IG11c3QgYmUgYSBzdHJpbmcsIG5vdCAlLjgwcyIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9U
WVBFKHB5c3RyKS0+dHBfbmFtZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQKLXNjYW5uZXJfZGVhbGxvYyhQeU9iamVjdCAqc2VsZikKLXsKLSAgICAvKiBE
ZWFsbG9jYXRlIHNjYW5uZXIgb2JqZWN0ICovCi0gICAgc2Nhbm5lcl9jbGVhcihzZWxmKTsKLSAg
ICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHNlbGYpOwotfQotCi1zdGF0aWMgaW50Ci1zY2FubmVy
X3RyYXZlcnNlKFB5T2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKLXsK
LSAgICBQeVNjYW5uZXJPYmplY3QgKnM7Ci0gICAgYXNzZXJ0KFB5U2Nhbm5lcl9DaGVjayhzZWxm
KSk7Ci0gICAgcyA9IChQeVNjYW5uZXJPYmplY3QgKilzZWxmOwotICAgIFB5X1ZJU0lUKHMtPmVu
Y29kaW5nKTsKLSAgICBQeV9WSVNJVChzLT5zdHJpY3QpOwotICAgIFB5X1ZJU0lUKHMtPm9iamVj
dF9ob29rKTsKLSAgICBQeV9WSVNJVChzLT5wYWlyc19ob29rKTsKLSAgICBQeV9WSVNJVChzLT5w
YXJzZV9mbG9hdCk7Ci0gICAgUHlfVklTSVQocy0+cGFyc2VfaW50KTsKLSAgICBQeV9WSVNJVChz
LT5wYXJzZV9jb25zdGFudCk7Ci0gICAgUHlfVklTSVQocy0+bWVtbyk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLXN0YXRpYyBpbnQKLXNjYW5uZXJfY2xlYXIoUHlPYmplY3QgKnNlbGYpCi17Ci0gICAg
UHlTY2FubmVyT2JqZWN0ICpzOwotICAgIGFzc2VydChQeVNjYW5uZXJfQ2hlY2soc2VsZikpOwot
ICAgIHMgPSAoUHlTY2FubmVyT2JqZWN0ICopc2VsZjsKLSAgICBQeV9DTEVBUihzLT5lbmNvZGlu
Zyk7Ci0gICAgUHlfQ0xFQVIocy0+c3RyaWN0KTsKLSAgICBQeV9DTEVBUihzLT5vYmplY3RfaG9v
ayk7Ci0gICAgUHlfQ0xFQVIocy0+cGFpcnNfaG9vayk7Ci0gICAgUHlfQ0xFQVIocy0+cGFyc2Vf
ZmxvYXQpOwotICAgIFB5X0NMRUFSKHMtPnBhcnNlX2ludCk7Ci0gICAgUHlfQ0xFQVIocy0+cGFy
c2VfY29uc3RhbnQpOwotICAgIFB5X0NMRUFSKHMtPm1lbW8pOwotICAgIHJldHVybiAwOwotfQot
Ci1zdGF0aWMgUHlPYmplY3QgKgotX3BhcnNlX29iamVjdF9zdHIoUHlTY2FubmVyT2JqZWN0ICpz
LCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9w
dHIpIHsKLSAgICAvKiBSZWFkIGEgSlNPTiBvYmplY3QgZnJvbSBQeVN0cmluZyBweXN0ci4KLSAg
ICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIG9wZW5p
bmcgY3VybHkgYnJhY2UuCi0gICAgKm5leHRfaWR4X3B0ciBpcyBhIHJldHVybi1ieS1yZWZlcmVu
Y2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgotICAgICAgICB0aGUgY2xvc2lu
ZyBjdXJseSBicmFjZS4KLQotICAgIFJldHVybnMgYSBuZXcgUHlPYmplY3QgKHVzdWFsbHkgYSBk
aWN0LCBidXQgb2JqZWN0X2hvb2sgb3IKLSAgICBvYmplY3RfcGFpcnNfaG9vayBjYW4gY2hhbmdl
IHRoYXQpCi0gICAgKi8KLSAgICBjaGFyICpzdHIgPSBQeVN0cmluZ19BU19TVFJJTkcocHlzdHIp
OwotICAgIFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5U3RyaW5nX0dFVF9TSVpFKHB5c3RyKSAtIDE7
Ci0gICAgUHlPYmplY3QgKnJ2YWwgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpwYWlycyA9IE5VTEw7
Ci0gICAgUHlPYmplY3QgKml0ZW07Ci0gICAgUHlPYmplY3QgKmtleSA9IE5VTEw7Ci0gICAgUHlP
YmplY3QgKnZhbCA9IE5VTEw7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBQeVN0cmluZ19BU19TVFJJ
Tkcocy0+ZW5jb2RpbmcpOwotICAgIGludCBzdHJpY3QgPSBQeU9iamVjdF9Jc1RydWUocy0+c3Ry
aWN0KTsKLSAgICBpbnQgaGFzX3BhaXJzX2hvb2sgPSAocy0+cGFpcnNfaG9vayAhPSBQeV9Ob25l
KTsKLSAgICBQeV9zc2l6ZV90IG5leHRfaWR4OwotICAgIGlmIChoYXNfcGFpcnNfaG9vaykgewot
ICAgICAgICBwYWlycyA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgICAgIGlmIChwYWlycyA9PSBOVUxM
KQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBy
dmFsID0gUHlEaWN0X05ldygpOwotICAgICAgICBpZiAocnZhbCA9PSBOVUxMKQotICAgICAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLyogc2tpcCB3aGl0ZXNwYWNlIGFmdGVyIHsg
Ki8KLSAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkp
IGlkeCsrOwotCi0gICAgLyogb25seSBsb29wIGlmIHRoZSBvYmplY3QgaXMgbm9uLWVtcHR5ICov
Ci0gICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdICE9ICd9JykgewotICAgICAgICB3
aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICptZW1va2V5Owot
Ci0gICAgICAgICAgICAvKiByZWFkIGtleSAqLwotICAgICAgICAgICAgaWYgKHN0cltpZHhdICE9
ICciJykgewotICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIHByb3BlcnR5
IG5hbWUiLCBweXN0ciwgaWR4KTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBrZXkgPSBzY2Fuc3RyaW5nX3N0cihweXN0ciwgaWR4ICsgMSwg
ZW5jb2RpbmcsIHN0cmljdCwgJm5leHRfaWR4KTsKLSAgICAgICAgICAgIGlmIChrZXkgPT0gTlVM
TCkKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICBtZW1va2V5ID0gUHlE
aWN0X0dldEl0ZW0ocy0+bWVtbywga2V5KTsKLSAgICAgICAgICAgIGlmIChtZW1va2V5ICE9IE5V
TEwpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYobWVtb2tleSk7Ci0gICAgICAgICAgICAg
ICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgICAgICAgICAga2V5ID0gbWVtb2tleTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChQeURpY3Rf
U2V0SXRlbShzLT5tZW1vLCBrZXksIGtleSkgPCAwKQotICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZHggPSBuZXh0X2lkeDsKLQotICAg
ICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJldHdlZW4ga2V5IGFuZCA6IGRlbGltaXRlciwg
cmVhZCA6LCBza2lwIHdoaXRlc3BhY2UgKi8KLSAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5k
X2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7Ci0gICAgICAgICAgICBpZiAo
aWR4ID4gZW5kX2lkeCB8fCBzdHJbaWR4XSAhPSAnOicpIHsKLSAgICAgICAgICAgICAgICByYWlz
ZV9lcnJtc2coIkV4cGVjdGluZyA6IGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOwotICAgICAgICAg
ICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlkeCsrOwotICAg
ICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0p
KSBpZHgrKzsKLQotICAgICAgICAgICAgLyogcmVhZCBhbnkgSlNPTiBkYXRhIHR5cGUgKi8KLSAg
ICAgICAgICAgIHZhbCA9IHNjYW5fb25jZV9zdHIocywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsK
LSAgICAgICAgICAgIGlmICh2YWwgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7
Ci0KLSAgICAgICAgICAgIGlmIChoYXNfcGFpcnNfaG9vaykgewotICAgICAgICAgICAgICAgIGl0
ZW0gPSBQeVR1cGxlX1BhY2soMiwga2V5LCB2YWwpOwotICAgICAgICAgICAgICAgIGlmIChpdGVt
ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAg
ICBQeV9DTEVBUihrZXkpOwotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHZhbCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocGFpcnMsIGl0ZW0pID09IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBi
YWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
UHlEaWN0X1NldEl0ZW0ocnZhbCwga2V5LCB2YWwpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAg
Z290byBiYWlsOwotICAgICAgICAgICAgICAgIFB5X0NMRUFSKGtleSk7Ci0gICAgICAgICAgICAg
ICAgUHlfQ0xFQVIodmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlkeCA9IG5leHRf
aWR4OwotCi0gICAgICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgYmVmb3JlIH0gb3IgLCAqLwot
ICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lk
eF0pKSBpZHgrKzsKLQotICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgb2JqZWN0IGlzIGNsb3Nl
ZCBvciB3ZSBkaWRuJ3QgZ2V0IHRoZSAsIGRlbGltaXRlciAqLwotICAgICAgICAgICAgaWYgKGlk
eCA+IGVuZF9pZHgpIGJyZWFrOwotICAgICAgICAgICAgaWYgKHN0cltpZHhdID09ICd9Jykgewot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAoc3RyW2lkeF0gIT0gJywnKSB7Ci0gICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBl
Y3RpbmcgLCBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKLSAgICAgICAgICAgICAgICBnb3RvIGJh
aWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZHgrKzsKLQotICAgICAgICAgICAgLyog
c2tpcCB3aGl0ZXNwYWNlIGFmdGVyICwgZGVsaW1pdGVyICovCi0gICAgICAgICAgICB3aGlsZSAo
aWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOwotICAgICAg
ICB9Ci0gICAgfQotICAgIC8qIHZlcmlmeSB0aGF0IGlkeCA8IGVuZF9pZHgsIHN0cltpZHhdIHNo
b3VsZCBiZSAnfScgKi8KLSAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBzdHJbaWR4XSAhPSAnfScp
IHsKLSAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9p
ZHgpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgLyogaWYgcGFpcnNfaG9vayBp
cyBub3QgTm9uZTogcnZhbCA9IG9iamVjdF9wYWlyc19ob29rKHBhaXJzKSAqLwotICAgIGlmIChz
LT5wYWlyc19ob29rICE9IFB5X05vbmUpIHsKLSAgICAgICAgdmFsID0gUHlPYmplY3RfQ2FsbEZ1
bmN0aW9uT2JqQXJncyhzLT5wYWlyc19ob29rLCBwYWlycywgTlVMTCk7Ci0gICAgICAgIGlmICh2
YWwgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgUHlfREVDUkVGKHBh
aXJzKTsKLSAgICAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7Ci0gICAgICAgIHJldHVybiB2
YWw7Ci0gICAgfQotCi0gICAgLyogaWYgb2JqZWN0X2hvb2sgaXMgbm90IE5vbmU6IHJ2YWwgPSBv
YmplY3RfaG9vayhydmFsKSAqLwotICAgIGlmIChzLT5vYmplY3RfaG9vayAhPSBQeV9Ob25lKSB7
Ci0gICAgICAgIHZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+b2JqZWN0X2hv
b2ssIHJ2YWwsIE5VTEwpOwotICAgICAgICBpZiAodmFsID09IE5VTEwpCi0gICAgICAgICAgICBn
b3RvIGJhaWw7Ci0gICAgICAgIFB5X0RFQ1JFRihydmFsKTsKLSAgICAgICAgcnZhbCA9IHZhbDsK
LSAgICAgICAgdmFsID0gTlVMTDsKLSAgICB9Ci0gICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7
Ci0gICAgcmV0dXJuIHJ2YWw7Ci1iYWlsOgotICAgIFB5X1hERUNSRUYocnZhbCk7Ci0gICAgUHlf
WERFQ1JFRihrZXkpOwotICAgIFB5X1hERUNSRUYodmFsKTsKLSAgICBQeV9YREVDUkVGKHBhaXJz
KTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLV9wYXJzZV9vYmpl
Y3RfdW5pY29kZShQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVf
dCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikgewotICAgIC8qIFJlYWQgYSBKU09OIG9i
amVjdCBmcm9tIFB5VW5pY29kZSBweXN0ci4KLSAgICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBm
aXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIG9wZW5pbmcgY3VybHkgYnJhY2UuCi0gICAgKm5leHRf
aWR4X3B0ciBpcyBhIHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJh
Y3RlciBhZnRlcgotICAgICAgICB0aGUgY2xvc2luZyBjdXJseSBicmFjZS4KLQotICAgIFJldHVy
bnMgYSBuZXcgUHlPYmplY3QgKHVzdWFsbHkgYSBkaWN0LCBidXQgb2JqZWN0X2hvb2sgY2FuIGNo
YW5nZSB0aGF0KQotICAgICovCi0gICAgUHlfVU5JQ09ERSAqc3RyID0gUHlVbmljb2RlX0FTX1VO
SUNPREUocHlzdHIpOwotICAgIFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5VW5pY29kZV9HRVRfU0la
RShweXN0cikgLSAxOwotICAgIFB5T2JqZWN0ICpydmFsID0gTlVMTDsKLSAgICBQeU9iamVjdCAq
cGFpcnMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICppdGVtOwotICAgIFB5T2JqZWN0ICprZXkgPSBO
VUxMOwotICAgIFB5T2JqZWN0ICp2YWwgPSBOVUxMOwotICAgIGludCBzdHJpY3QgPSBQeU9iamVj
dF9Jc1RydWUocy0+c3RyaWN0KTsKLSAgICBpbnQgaGFzX3BhaXJzX2hvb2sgPSAocy0+cGFpcnNf
aG9vayAhPSBQeV9Ob25lKTsKLSAgICBQeV9zc2l6ZV90IG5leHRfaWR4OwotCi0gICAgaWYgKGhh
c19wYWlyc19ob29rKSB7Ci0gICAgICAgIHBhaXJzID0gUHlMaXN0X05ldygwKTsKLSAgICAgICAg
aWYgKHBhaXJzID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIHJ2YWwgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgIGlmIChydmFsID09
IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgCi0gICAgLyogc2tp
cCB3aGl0ZXNwYWNlIGFmdGVyIHsgKi8KLSAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNf
V0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOwotCi0gICAgLyogb25seSBsb29wIGlmIHRoZSBv
YmplY3QgaXMgbm9uLWVtcHR5ICovCi0gICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhd
ICE9ICd9JykgewotICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKLSAgICAgICAgICAg
IFB5T2JqZWN0ICptZW1va2V5OwotCi0gICAgICAgICAgICAvKiByZWFkIGtleSAqLwotICAgICAg
ICAgICAgaWYgKHN0cltpZHhdICE9ICciJykgewotICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1z
ZygiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUiLCBweXN0ciwgaWR4KTsKLSAgICAgICAgICAgICAg
ICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBrZXkgPSBzY2Fuc3RyaW5n
X3VuaWNvZGUocHlzdHIsIGlkeCArIDEsIHN0cmljdCwgJm5leHRfaWR4KTsKLSAgICAgICAgICAg
IGlmIChrZXkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAg
ICBtZW1va2V5ID0gUHlEaWN0X0dldEl0ZW0ocy0+bWVtbywga2V5KTsKLSAgICAgICAgICAgIGlm
IChtZW1va2V5ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYobWVtb2tleSk7
Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgICAgICAgICAga2V5ID0g
bWVtb2tleTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIGlmIChQeURpY3RfU2V0SXRlbShzLT5tZW1vLCBrZXksIGtleSkgPCAwKQotICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZHggPSBu
ZXh0X2lkeDsKLQotICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJldHdlZW4ga2V5IGFu
ZCA6IGRlbGltaXRlciwgcmVhZCA6LCBza2lwIHdoaXRlc3BhY2UgKi8KLSAgICAgICAgICAgIHdo
aWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7Ci0g
ICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBzdHJbaWR4XSAhPSAnOicpIHsKLSAgICAg
ICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyA6IGRlbGltaXRlciIsIHB5c3RyLCBp
ZHgpOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlkeCsrOwotICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRF
U1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKLQotICAgICAgICAgICAgLyogcmVhZCBhbnkgSlNPTiB0
ZXJtICovCi0gICAgICAgICAgICB2YWwgPSBzY2FuX29uY2VfdW5pY29kZShzLCBweXN0ciwgaWR4
LCAmbmV4dF9pZHgpOwotICAgICAgICAgICAgaWYgKHZhbCA9PSBOVUxMKQotICAgICAgICAgICAg
ICAgIGdvdG8gYmFpbDsKLQotICAgICAgICAgICAgaWYgKGhhc19wYWlyc19ob29rKSB7Ci0gICAg
ICAgICAgICAgICAgaXRlbSA9IFB5VHVwbGVfUGFjaygyLCBrZXksIHZhbCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwot
ICAgICAgICAgICAgICAgIFB5X0NMRUFSKGtleSk7Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIo
dmFsKTsKLSAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChwYWlycywgaXRlbSkgPT0g
LTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwotICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5
X0RFQ1JFRihpdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShydmFsLCBrZXksIHZhbCkgPCAwKQotICAgICAg
ICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIoa2V5KTsK
LSAgICAgICAgICAgICAgICBQeV9DTEVBUih2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWR4ID0gbmV4dF9pZHg7Ci0KLSAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBiZWZv
cmUgfSBvciAsICovCi0gICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJ
VEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOwotCi0gICAgICAgICAgICAvKiBiYWlsIGlmIHRoZSBv
YmplY3QgaXMgY2xvc2VkIG9yIHdlIGRpZG4ndCBnZXQgdGhlICwgZGVsaW1pdGVyICovCi0gICAg
ICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoc3RyW2lk
eF0gPT0gJ30nKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChzdHJbaWR4XSAhPSAnLCcpIHsKLSAgICAgICAgICAgICAgICByYWlz
ZV9lcnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOwotICAgICAgICAg
ICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlkeCsrOwotCi0g
ICAgICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgYWZ0ZXIgLCBkZWxpbWl0ZXIgKi8KLSAgICAg
ICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkg
aWR4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRf
aWR4LCBzdHJbaWR4XSBzaG91bGQgYmUgJ30nICovCi0gICAgaWYgKGlkeCA+IGVuZF9pZHggfHwg
c3RyW2lkeF0gIT0gJ30nKSB7Ci0gICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9iamVj
dCIsIHB5c3RyLCBlbmRfaWR4KTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8q
IGlmIHBhaXJzX2hvb2sgaXMgbm90IE5vbmU6IHJ2YWwgPSBvYmplY3RfcGFpcnNfaG9vayhwYWly
cykgKi8KLSAgICBpZiAocy0+cGFpcnNfaG9vayAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIHZhbCA9
IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+cGFpcnNfaG9vaywgcGFpcnMsIE5VTEwp
OwotICAgICAgICBpZiAodmFsID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAg
ICAgIFB5X0RFQ1JFRihwYWlycyk7Ci0gICAgICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOwot
ICAgICAgICByZXR1cm4gdmFsOwotICAgIH0KLQotICAgIC8qIGlmIG9iamVjdF9ob29rIGlzIG5v
dCBOb25lOiBydmFsID0gb2JqZWN0X2hvb2socnZhbCkgKi8KLSAgICBpZiAocy0+b2JqZWN0X2hv
b2sgIT0gUHlfTm9uZSkgewotICAgICAgICB2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpB
cmdzKHMtPm9iamVjdF9ob29rLCBydmFsLCBOVUxMKTsKLSAgICAgICAgaWYgKHZhbCA9PSBOVUxM
KQotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICBQeV9ERUNSRUYocnZhbCk7Ci0gICAg
ICAgIHJ2YWwgPSB2YWw7Ci0gICAgICAgIHZhbCA9IE5VTEw7Ci0gICAgfQotICAgICpuZXh0X2lk
eF9wdHIgPSBpZHggKyAxOwotICAgIHJldHVybiBydmFsOwotYmFpbDoKLSAgICBQeV9YREVDUkVG
KHJ2YWwpOwotICAgIFB5X1hERUNSRUYoa2V5KTsKLSAgICBQeV9YREVDUkVGKHZhbCk7Ci0gICAg
UHlfWERFQ1JFRihwYWlycyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBQeU9iamVj
dCAqCi1fcGFyc2VfYXJyYXlfc3RyKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3Ry
LCBQeV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKSB7Ci0gICAgLyogUmVh
ZCBhIEpTT04gYXJyYXkgZnJvbSBQeVN0cmluZyBweXN0ci4KLSAgICBpZHggaXMgdGhlIGluZGV4
IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIG9wZW5pbmcgYnJhY2UuCi0gICAgKm5l
eHRfaWR4X3B0ciBpcyBhIHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXggdG8gdGhlIGZpcnN0IGNo
YXJhY3RlciBhZnRlcgotICAgICAgICB0aGUgY2xvc2luZyBicmFjZS4KLQotICAgIFJldHVybnMg
YSBuZXcgUHlMaXN0Ci0gICAgKi8KLSAgICBjaGFyICpzdHIgPSBQeVN0cmluZ19BU19TVFJJTkco
cHlzdHIpOwotICAgIFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5U3RyaW5nX0dFVF9TSVpFKHB5c3Ry
KSAtIDE7Ci0gICAgUHlPYmplY3QgKnZhbCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnJ2YWwgPSBQ
eUxpc3RfTmV3KDApOwotICAgIFB5X3NzaXplX3QgbmV4dF9pZHg7Ci0gICAgaWYgKHJ2YWwgPT0g
TlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBza2lwIHdoaXRlc3BhY2UgYWZ0
ZXIgWyAqLwotICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltp
ZHhdKSkgaWR4Kys7Ci0KLSAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIGFycmF5IGlzIG5vbi1lbXB0
eSAqLwotICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSAhPSAnXScpIHsKLSAgICAg
ICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4KSB7Ci0KLSAgICAgICAgICAgIC8qIHJlYWQgYW55IEpT
T04gdGVybSBhbmQgZGUtdHVwbGVmeSB0aGUgKHJ2YWwsIGlkeCkgKi8KLSAgICAgICAgICAgIHZh
bCA9IHNjYW5fb25jZV9zdHIocywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKLSAgICAgICAgICAg
IGlmICh2YWwgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25N
YXRjaGVzKFB5RXhjX1N0b3BJdGVyYXRpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJy
X0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9i
amVjdCIsIHB5c3RyLCBpZHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBn
b3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5k
KHJ2YWwsIHZhbCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotCi0gICAgICAg
ICAgICBQeV9DTEVBUih2YWwpOwotICAgICAgICAgICAgaWR4ID0gbmV4dF9pZHg7Ci0KLSAgICAg
ICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBiZXR3ZWVuIHRlcm0gYW5kICwgKi8KLSAgICAgICAg
ICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4
Kys7Ci0KLSAgICAgICAgICAgIC8qIGJhaWwgaWYgdGhlIGFycmF5IGlzIGNsb3NlZCBvciB3ZSBk
aWRuJ3QgZ2V0IHRoZSAsIGRlbGltaXRlciAqLwotICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9p
ZHgpIGJyZWFrOwotICAgICAgICAgICAgaWYgKHN0cltpZHhdID09ICddJykgewotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoc3RyW2lk
eF0gIT0gJywnKSB7Ci0gICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgLCBk
ZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZHgrKzsKLQotICAgICAgICAgICAgLyogc2tpcCB3aGl0
ZXNwYWNlIGFmdGVyICwgKi8KLSAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJ
U19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
KiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBzdHJbaWR4XSBzaG91bGQgYmUgJ10nICovCi0g
ICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgc3RyW2lkeF0gIT0gJ10nKSB7Ci0gICAgICAgIHJhaXNl
X2Vycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHB5c3RyLCBlbmRfaWR4KTsKLSAgICAgICAgZ290
byBiYWlsOwotICAgIH0KLSAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKLSAgICByZXR1cm4g
cnZhbDsKLWJhaWw6Ci0gICAgUHlfWERFQ1JFRih2YWwpOwotICAgIFB5X0RFQ1JFRihydmFsKTsK
LSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLV9wYXJzZV9hcnJheV91
bmljb2RlKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGlk
eCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKSB7Ci0gICAgLyogUmVhZCBhIEpTT04gYXJyYXkg
ZnJvbSBQeVN0cmluZyBweXN0ci4KLSAgICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBj
aGFyYWN0ZXIgYWZ0ZXIgdGhlIG9wZW5pbmcgYnJhY2UuCi0gICAgKm5leHRfaWR4X3B0ciBpcyBh
IHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgot
ICAgICAgICB0aGUgY2xvc2luZyBicmFjZS4KLQotICAgIFJldHVybnMgYSBuZXcgUHlMaXN0Ci0g
ICAgKi8KLSAgICBQeV9VTklDT0RFICpzdHIgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShweXN0cik7
Ci0gICAgUHlfc3NpemVfdCBlbmRfaWR4ID0gUHlVbmljb2RlX0dFVF9TSVpFKHB5c3RyKSAtIDE7
Ci0gICAgUHlPYmplY3QgKnZhbCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnJ2YWwgPSBQeUxpc3Rf
TmV3KDApOwotICAgIFB5X3NzaXplX3QgbmV4dF9pZHg7Ci0gICAgaWYgKHJ2YWwgPT0gTlVMTCkK
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBza2lwIHdoaXRlc3BhY2UgYWZ0ZXIgWyAq
LwotICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkg
aWR4Kys7Ci0KLSAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIGFycmF5IGlzIG5vbi1lbXB0eSAqLwot
ICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSAhPSAnXScpIHsKLSAgICAgICAgd2hp
bGUgKGlkeCA8PSBlbmRfaWR4KSB7Ci0KLSAgICAgICAgICAgIC8qIHJlYWQgYW55IEpTT04gdGVy
bSAgKi8KLSAgICAgICAgICAgIHZhbCA9IHNjYW5fb25jZV91bmljb2RlKHMsIHB5c3RyLCBpZHgs
ICZuZXh0X2lkeCk7Ci0gICAgICAgICAgICBpZiAodmFsID09IE5VTEwpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TdG9wSXRlcmF0aW9uKSkgewot
ICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgICAgICBy
YWlzZV9lcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBweXN0ciwgaWR4KTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCB2YWwpID09IC0xKQotICAgICAgICAgICAg
ICAgIGdvdG8gYmFpbDsKLQotICAgICAgICAgICAgUHlfQ0xFQVIodmFsKTsKLSAgICAgICAgICAg
IGlkeCA9IG5leHRfaWR4OwotCi0gICAgICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgYmV0d2Vl
biB0ZXJtIGFuZCAsICovCi0gICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNf
V0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOwotCi0gICAgICAgICAgICAvKiBiYWlsIGlmIHRo
ZSBhcnJheSBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KLSAg
ICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKLSAgICAgICAgICAgIGlmIChzdHJb
aWR4XSA9PSAnXScpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKHN0cltpZHhdICE9ICcsJykgewotICAgICAgICAgICAgICAgIHJh
aXNlX2Vycm1zZygiRXhwZWN0aW5nICwgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7Ci0gICAgICAg
ICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWR4Kys7Ci0K
LSAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBhZnRlciAsICovCi0gICAgICAgICAgICB3
aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogdmVyaWZ5IHRoYXQgaWR4IDwgZW5kX2lkeCwgc3Ry
W2lkeF0gc2hvdWxkIGJlICddJyAqLwotICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IHN0cltpZHhd
ICE9ICddJykgewotICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBweXN0
ciwgZW5kX2lkeCk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0gICAgKm5leHRfaWR4X3B0
ciA9IGlkeCArIDE7Ci0gICAgcmV0dXJuIHJ2YWw7Ci1iYWlsOgotICAgIFB5X1hERUNSRUYodmFs
KTsKLSAgICBQeV9ERUNSRUYocnZhbCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBQ
eU9iamVjdCAqCi1fcGFyc2VfY29uc3RhbnQoUHlTY2FubmVyT2JqZWN0ICpzLCBjaGFyICpjb25z
dGFudCwgUHlfc3NpemVfdCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikgewotICAgIC8q
IFJlYWQgYSBKU09OIGNvbnN0YW50IGZyb20gUHlTdHJpbmcgcHlzdHIuCi0gICAgY29uc3RhbnQg
aXMgdGhlIGNvbnN0YW50IHN0cmluZyB0aGF0IHdhcyBmb3VuZAotICAgICAgICAoIk5hTiIsICJJ
bmZpbml0eSIsICItSW5maW5pdHkiKS4KLSAgICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJz
dCBjaGFyYWN0ZXIgb2YgdGhlIGNvbnN0YW50Ci0gICAgKm5leHRfaWR4X3B0ciBpcyBhIHJldHVy
bi1ieS1yZWZlcmVuY2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgotICAgICAg
ICB0aGUgY29uc3RhbnQuCi0KLSAgICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgcGFyc2VfY29uc3Rh
bnQKLSAgICAqLwotICAgIFB5T2JqZWN0ICpjc3RyOwotICAgIFB5T2JqZWN0ICpydmFsOwotICAg
IC8qIGNvbnN0YW50IGlzICJOYU4iLCAiSW5maW5pdHkiLCBvciAiLUluZmluaXR5IiAqLwotICAg
IGNzdHIgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKGNvbnN0YW50KTsKLSAgICBpZiAoY3N0
ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qIHJ2YWwgPSBwYXJzZV9j
b25zdGFudChjb25zdGFudCkgKi8KLSAgICBydmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2Jq
QXJncyhzLT5wYXJzZV9jb25zdGFudCwgY3N0ciwgTlVMTCk7Ci0gICAgaWR4ICs9IFB5U3RyaW5n
X0dFVF9TSVpFKGNzdHIpOwotICAgIFB5X0RFQ1JFRihjc3RyKTsKLSAgICAqbmV4dF9pZHhfcHRy
ID0gaWR4OwotICAgIHJldHVybiBydmFsOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotX21hdGNo
X251bWJlcl9zdHIoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXpl
X3Qgc3RhcnQsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikgewotICAgIC8qIFJlYWQgYSBKU09O
IG51bWJlciBmcm9tIFB5U3RyaW5nIHB5c3RyLgotICAgIGlkeCBpcyB0aGUgaW5kZXggb2YgdGhl
IGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbnVtYmVyCi0gICAgKm5leHRfaWR4X3B0ciBpcyBhIHJl
dHVybi1ieS1yZWZlcmVuY2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgotICAg
ICAgICB0aGUgbnVtYmVyLgotCi0gICAgUmV0dXJucyBhIG5ldyBQeU9iamVjdCByZXByZXNlbnRh
dGlvbiBvZiB0aGF0IG51bWJlcjoKLSAgICAgICAgUHlJbnQsIFB5TG9uZywgb3IgUHlGbG9hdC4K
LSAgICAgICAgTWF5IHJldHVybiBvdGhlciB0eXBlcyBpZiBwYXJzZV9pbnQgb3IgcGFyc2VfZmxv
YXQgYXJlIHNldAotICAgICovCi0gICAgY2hhciAqc3RyID0gUHlTdHJpbmdfQVNfU1RSSU5HKHB5
c3RyKTsKLSAgICBQeV9zc2l6ZV90IGVuZF9pZHggPSBQeVN0cmluZ19HRVRfU0laRShweXN0cikg
LSAxOwotICAgIFB5X3NzaXplX3QgaWR4ID0gc3RhcnQ7Ci0gICAgaW50IGlzX2Zsb2F0ID0gMDsK
LSAgICBQeU9iamVjdCAqcnZhbDsKLSAgICBQeU9iamVjdCAqbnVtc3RyOwotCi0gICAgLyogcmVh
ZCBhIHNpZ24gaWYgaXQncyB0aGVyZSwgbWFrZSBzdXJlIGl0J3Mgbm90IHRoZSBlbmQgb2YgdGhl
IHN0cmluZyAqLwotICAgIGlmIChzdHJbaWR4XSA9PSAnLScpIHsKLSAgICAgICAgaWR4Kys7Ci0g
ICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSB7Ci0gICAgICAgICAgICBQeUVycl9TZXROb25lKFB5
RXhjX1N0b3BJdGVyYXRpb24pOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvKiByZWFkIGFzIG1hbnkgaW50ZWdlciBkaWdpdHMgYXMgd2UgZmluZCBh
cyBsb25nIGFzIGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCAwICovCi0gICAgaWYgKHN0cltpZHhdID49
ICcxJyAmJiBzdHJbaWR4XSA8PSAnOScpIHsKLSAgICAgICAgaWR4Kys7Ci0gICAgICAgIHdoaWxl
IChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSA+PSAnMCcgJiYgc3RyW2lkeF0gPD0gJzknKSBp
ZHgrKzsKLSAgICB9Ci0gICAgLyogaWYgaXQgc3RhcnRzIHdpdGggMCB3ZSBvbmx5IGV4cGVjdCBv
bmUgaW50ZWdlciBkaWdpdCAqLwotICAgIGVsc2UgaWYgKHN0cltpZHhdID09ICcwJykgewotICAg
ICAgICBpZHgrKzsKLSAgICB9Ci0gICAgLyogbm8gaW50ZWdlciBkaWdpdHMsIGVycm9yICovCi0g
ICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7Ci0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qIGlmIHRoZSBuZXh0IGNoYXIgaXMg
Jy4nIGZvbGxvd2VkIGJ5IGEgZGlnaXQgdGhlbiByZWFkIGFsbCBmbG9hdCBkaWdpdHMgKi8KLSAg
ICBpZiAoaWR4IDwgZW5kX2lkeCAmJiBzdHJbaWR4XSA9PSAnLicgJiYgc3RyW2lkeCArIDFdID49
ICcwJyAmJiBzdHJbaWR4ICsgMV0gPD0gJzknKSB7Ci0gICAgICAgIGlzX2Zsb2F0ID0gMTsKLSAg
ICAgICAgaWR4ICs9IDI7Ci0gICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4
XSA+PSAnMCcgJiYgc3RyW2lkeF0gPD0gJzknKSBpZHgrKzsKLSAgICB9Ci0KLSAgICAvKiBpZiB0
aGUgbmV4dCBjaGFyIGlzICdlJyBvciAnRScgdGhlbiBtYXliZSByZWFkIHRoZSBleHBvbmVudCAo
b3IgYmFja3RyYWNrKSAqLwotICAgIGlmIChpZHggPCBlbmRfaWR4ICYmIChzdHJbaWR4XSA9PSAn
ZScgfHwgc3RyW2lkeF0gPT0gJ0UnKSkgewotCi0gICAgICAgIC8qIHNhdmUgdGhlIGluZGV4IG9m
IHRoZSAnZScgb3IgJ0UnIGp1c3QgaW4gY2FzZSB3ZSBuZWVkIHRvIGJhY2t0cmFjayAqLwotICAg
ICAgICBQeV9zc2l6ZV90IGVfc3RhcnQgPSBpZHg7Ci0gICAgICAgIGlkeCsrOwotCi0gICAgICAg
IC8qIHJlYWQgYW4gZXhwb25lbnQgc2lnbiBpZiBwcmVzZW50ICovCi0gICAgICAgIGlmIChpZHgg
PCBlbmRfaWR4ICYmIChzdHJbaWR4XSA9PSAnLScgfHwgc3RyW2lkeF0gPT0gJysnKSkgaWR4Kys7
Ci0KLSAgICAgICAgLyogcmVhZCBhbGwgZGlnaXRzICovCi0gICAgICAgIHdoaWxlIChpZHggPD0g
ZW5kX2lkeCAmJiBzdHJbaWR4XSA+PSAnMCcgJiYgc3RyW2lkeF0gPD0gJzknKSBpZHgrKzsKLQot
ICAgICAgICAvKiBpZiB3ZSBnb3QgYSBkaWdpdCwgdGhlbiBwYXJzZSBhcyBmbG9hdC4gaWYgbm90
LCBiYWNrdHJhY2sgKi8KLSAgICAgICAgaWYgKHN0cltpZHggLSAxXSA+PSAnMCcgJiYgc3RyW2lk
eCAtIDFdIDw9ICc5JykgewotICAgICAgICAgICAgaXNfZmxvYXQgPSAxOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWR4ID0gZV9zdGFydDsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8qIGNvcHkgdGhlIHNlY3Rpb24gd2UgZGV0ZXJtaW5lZCB0byBiZSBhIG51bWJl
ciAqLwotICAgIG51bXN0ciA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCZzdHJbc3RhcnRd
LCBpZHggLSBzdGFydCk7Ci0gICAgaWYgKG51bXN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICBpZiAoaXNfZmxvYXQpIHsKLSAgICAgICAgLyogcGFyc2UgYXMgYSBmbG9hdCB1
c2luZyBhIGZhc3QgcGF0aCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBjYWxsIHVzZXIgZGVmaW5l
ZCBtZXRob2QgKi8KLSAgICAgICAgaWYgKHMtPnBhcnNlX2Zsb2F0ICE9IChQeU9iamVjdCAqKSZQ
eUZsb2F0X1R5cGUpIHsKLSAgICAgICAgICAgIHJ2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25P
YmpBcmdzKHMtPnBhcnNlX2Zsb2F0LCBudW1zdHIsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgLyogcnZhbCA9IFB5RmxvYXRfRnJvbURvdWJsZShQeU9TX2Fz
Y2lpX2F0b2YoUHlTdHJpbmdfQVNfU1RSSU5HKG51bXN0cikpKTsgKi8KLSAgICAgICAgICAgIGRv
dWJsZSBkID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKFB5U3RyaW5nX0FTX1NUUklORyhudW1zdHIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVM
TCk7Ci0gICAgICAgICAgICBpZiAoZCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBydmFsID0gUHlGbG9hdF9Gcm9t
RG91YmxlKGQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBwYXJz
ZSBhcyBhbiBpbnQgdXNpbmcgYSBmYXN0IHBhdGggaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgY2Fs
bCB1c2VyIGRlZmluZWQgbWV0aG9kICovCi0gICAgICAgIGlmIChzLT5wYXJzZV9pbnQgIT0gKFB5
T2JqZWN0ICopJlB5SW50X1R5cGUpIHsKLSAgICAgICAgICAgIHJ2YWwgPSBQeU9iamVjdF9DYWxs
RnVuY3Rpb25PYmpBcmdzKHMtPnBhcnNlX2ludCwgbnVtc3RyLCBOVUxMKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJ2YWwgPSBQeUludF9Gcm9tU3RyaW5nKFB5U3Ry
aW5nX0FTX1NUUklORyhudW1zdHIpLCBOVUxMLCAxMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
UHlfREVDUkVGKG51bXN0cik7Ci0gICAgKm5leHRfaWR4X3B0ciA9IGlkeDsKLSAgICByZXR1cm4g
cnZhbDsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLV9tYXRjaF9udW1iZXJfdW5pY29kZShQeVNj
YW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBzdGFydCwgUHlfc3Np
emVfdCAqbmV4dF9pZHhfcHRyKSB7Ci0gICAgLyogUmVhZCBhIEpTT04gbnVtYmVyIGZyb20gUHlV
bmljb2RlIHB5c3RyLgotICAgIGlkeCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3Rl
ciBvZiB0aGUgbnVtYmVyCi0gICAgKm5leHRfaWR4X3B0ciBpcyBhIHJldHVybi1ieS1yZWZlcmVu
Y2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgotICAgICAgICB0aGUgbnVtYmVy
LgotCi0gICAgUmV0dXJucyBhIG5ldyBQeU9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGF0IG51
bWJlcjoKLSAgICAgICAgUHlJbnQsIFB5TG9uZywgb3IgUHlGbG9hdC4KLSAgICAgICAgTWF5IHJl
dHVybiBvdGhlciB0eXBlcyBpZiBwYXJzZV9pbnQgb3IgcGFyc2VfZmxvYXQgYXJlIHNldAotICAg
ICovCi0gICAgUHlfVU5JQ09ERSAqc3RyID0gUHlVbmljb2RlX0FTX1VOSUNPREUocHlzdHIpOwot
ICAgIFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5VW5pY29kZV9HRVRfU0laRShweXN0cikgLSAxOwot
ICAgIFB5X3NzaXplX3QgaWR4ID0gc3RhcnQ7Ci0gICAgaW50IGlzX2Zsb2F0ID0gMDsKLSAgICBQ
eU9iamVjdCAqcnZhbDsKLSAgICBQeU9iamVjdCAqbnVtc3RyOwotCi0gICAgLyogcmVhZCBhIHNp
Z24gaWYgaXQncyB0aGVyZSwgbWFrZSBzdXJlIGl0J3Mgbm90IHRoZSBlbmQgb2YgdGhlIHN0cmlu
ZyAqLwotICAgIGlmIChzdHJbaWR4XSA9PSAnLScpIHsKLSAgICAgICAgaWR4Kys7Ci0gICAgICAg
IGlmIChpZHggPiBlbmRfaWR4KSB7Ci0gICAgICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0
b3BJdGVyYXRpb24pOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvKiByZWFkIGFzIG1hbnkgaW50ZWdlciBkaWdpdHMgYXMgd2UgZmluZCBhcyBsb25n
IGFzIGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCAwICovCi0gICAgaWYgKHN0cltpZHhdID49ICcxJyAm
JiBzdHJbaWR4XSA8PSAnOScpIHsKLSAgICAgICAgaWR4Kys7Ci0gICAgICAgIHdoaWxlIChpZHgg
PD0gZW5kX2lkeCAmJiBzdHJbaWR4XSA+PSAnMCcgJiYgc3RyW2lkeF0gPD0gJzknKSBpZHgrKzsK
LSAgICB9Ci0gICAgLyogaWYgaXQgc3RhcnRzIHdpdGggMCB3ZSBvbmx5IGV4cGVjdCBvbmUgaW50
ZWdlciBkaWdpdCAqLwotICAgIGVsc2UgaWYgKHN0cltpZHhdID09ICcwJykgewotICAgICAgICBp
ZHgrKzsKLSAgICB9Ci0gICAgLyogbm8gaW50ZWdlciBkaWdpdHMsIGVycm9yICovCi0gICAgZWxz
ZSB7Ci0gICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7Ci0gICAgICAg
IHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qIGlmIHRoZSBuZXh0IGNoYXIgaXMgJy4nIGZv
bGxvd2VkIGJ5IGEgZGlnaXQgdGhlbiByZWFkIGFsbCBmbG9hdCBkaWdpdHMgKi8KLSAgICBpZiAo
aWR4IDwgZW5kX2lkeCAmJiBzdHJbaWR4XSA9PSAnLicgJiYgc3RyW2lkeCArIDFdID49ICcwJyAm
JiBzdHJbaWR4ICsgMV0gPD0gJzknKSB7Ci0gICAgICAgIGlzX2Zsb2F0ID0gMTsKLSAgICAgICAg
aWR4ICs9IDI7Ci0gICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSA+PSAn
MCcgJiYgc3RyW2lkeF0gPD0gJzknKSBpZHgrKzsKLSAgICB9Ci0KLSAgICAvKiBpZiB0aGUgbmV4
dCBjaGFyIGlzICdlJyBvciAnRScgdGhlbiBtYXliZSByZWFkIHRoZSBleHBvbmVudCAob3IgYmFj
a3RyYWNrKSAqLwotICAgIGlmIChpZHggPCBlbmRfaWR4ICYmIChzdHJbaWR4XSA9PSAnZScgfHwg
c3RyW2lkeF0gPT0gJ0UnKSkgewotICAgICAgICBQeV9zc2l6ZV90IGVfc3RhcnQgPSBpZHg7Ci0g
ICAgICAgIGlkeCsrOwotCi0gICAgICAgIC8qIHJlYWQgYW4gZXhwb25lbnQgc2lnbiBpZiBwcmVz
ZW50ICovCi0gICAgICAgIGlmIChpZHggPCBlbmRfaWR4ICYmIChzdHJbaWR4XSA9PSAnLScgfHwg
c3RyW2lkeF0gPT0gJysnKSkgaWR4Kys7Ci0KLSAgICAgICAgLyogcmVhZCBhbGwgZGlnaXRzICov
Ci0gICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBzdHJbaWR4XSA+PSAnMCcgJiYgc3Ry
W2lkeF0gPD0gJzknKSBpZHgrKzsKLQotICAgICAgICAvKiBpZiB3ZSBnb3QgYSBkaWdpdCwgdGhl
biBwYXJzZSBhcyBmbG9hdC4gaWYgbm90LCBiYWNrdHJhY2sgKi8KLSAgICAgICAgaWYgKHN0cltp
ZHggLSAxXSA+PSAnMCcgJiYgc3RyW2lkeCAtIDFdIDw9ICc5JykgewotICAgICAgICAgICAgaXNf
ZmxvYXQgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWR4ID0g
ZV9zdGFydDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIGNvcHkgdGhlIHNlY3Rpb24gd2Ug
ZGV0ZXJtaW5lZCB0byBiZSBhIG51bWJlciAqLwotICAgIG51bXN0ciA9IFB5VW5pY29kZV9Gcm9t
VW5pY29kZSgmc3RyW3N0YXJ0XSwgaWR4IC0gc3RhcnQpOwotICAgIGlmIChudW1zdHIgPT0gTlVM
TCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGlzX2Zsb2F0KSB7Ci0gICAgICAgIC8q
IHBhcnNlIGFzIGEgZmxvYXQgdXNpbmcgYSBmYXN0IHBhdGggaWYgYXZhaWxhYmxlLCBvdGhlcndp
c2UgY2FsbCB1c2VyIGRlZmluZWQgbWV0aG9kICovCi0gICAgICAgIGlmIChzLT5wYXJzZV9mbG9h
dCAhPSAoUHlPYmplY3QgKikmUHlGbG9hdF9UeXBlKSB7Ci0gICAgICAgICAgICBydmFsID0gUHlP
YmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5wYXJzZV9mbG9hdCwgbnVtc3RyLCBOVUxMKTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJ2YWwgPSBQeUZsb2F0X0Zy
b21TdHJpbmcobnVtc3RyLCBOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAg
ICAgICAgLyogbm8gZmFzdCBwYXRoIGZvciB1bmljb2RlIC0+IGludCwganVzdCBjYWxsICovCi0g
ICAgICAgIHJ2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPnBhcnNlX2ludCwg
bnVtc3RyLCBOVUxMKTsKLSAgICB9Ci0gICAgUHlfREVDUkVGKG51bXN0cik7Ci0gICAgKm5leHRf
aWR4X3B0ciA9IGlkeDsKLSAgICByZXR1cm4gcnZhbDsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoK
LXNjYW5fb25jZV9zdHIoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3Nz
aXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpCi17Ci0gICAgLyogUmVhZCBvbmUg
SlNPTiB0ZXJtIChvZiBhbnkga2luZCkgZnJvbSBQeVN0cmluZyBweXN0ci4KLSAgICBpZHggaXMg
dGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHRlcm0KLSAgICAqbmV4dF9p
ZHhfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hhcmFj
dGVyIGFmdGVyCi0gICAgICAgIHRoZSBudW1iZXIuCi0KLSAgICBSZXR1cm5zIGEgbmV3IFB5T2Jq
ZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXJtLgotICAgICovCi0gICAgY2hhciAqc3RyID0g
UHlTdHJpbmdfQVNfU1RSSU5HKHB5c3RyKTsKLSAgICBQeV9zc2l6ZV90IGxlbmd0aCA9IFB5U3Ry
aW5nX0dFVF9TSVpFKHB5c3RyKTsKLSAgICBQeU9iamVjdCAqcnZhbCA9IE5VTEw7Ci0gICAgaW50
IGZhbGx0aHJvdWdoID0gMDsKLSAgICBpZiAoaWR4ID49IGxlbmd0aCkgewotICAgICAgICBQeUVy
cl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0gICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIGRlY29kaW5nIGEgSlNP
TiBkb2N1bWVudCIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBzd2l0Y2ggKHN0cltpZHhd
KSB7Ci0gICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgLyogc3RyaW5nICovCi0gICAgICAg
ICAgICBydmFsID0gc2NhbnN0cmluZ19zdHIocHlzdHIsIGlkeCArIDEsCi0gICAgICAgICAgICAg
ICAgUHlTdHJpbmdfQVNfU1RSSU5HKHMtPmVuY29kaW5nKSwKLSAgICAgICAgICAgICAgICBQeU9i
amVjdF9Jc1RydWUocy0+c3RyaWN0KSwKLSAgICAgICAgICAgICAgICBuZXh0X2lkeF9wdHIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3snOgotICAgICAgICAgICAgLyogb2Jq
ZWN0ICovCi0gICAgICAgICAgICBydmFsID0gX3BhcnNlX29iamVjdF9zdHIocywgcHlzdHIsIGlk
eCArIDEsIG5leHRfaWR4X3B0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAn
Wyc6Ci0gICAgICAgICAgICAvKiBhcnJheSAqLwotICAgICAgICAgICAgcnZhbCA9IF9wYXJzZV9h
cnJheV9zdHIocywgcHlzdHIsIGlkeCArIDEsIG5leHRfaWR4X3B0cik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAnbic6Ci0gICAgICAgICAgICAvKiBudWxsICovCi0gICAgICAg
ICAgICBpZiAoKGlkeCArIDMgPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAndScgJiYgc3Ry
W2lkeCArIDJdID09ICdsJyAmJiBzdHJbaWR4ICsgM10gPT0gJ2wnKSB7Ci0gICAgICAgICAgICAg
ICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgICAgICpuZXh0X2lkeF9wdHIgPSBp
ZHggKyA0OwotICAgICAgICAgICAgICAgIHJ2YWwgPSBQeV9Ob25lOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhbGx0aHJvdWdoID0gMTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd0JzoKLSAgICAgICAgICAgIC8qIHRydWUgKi8K
LSAgICAgICAgICAgIGlmICgoaWR4ICsgMyA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdy
JyAmJiBzdHJbaWR4ICsgMl0gPT0gJ3UnICYmIHN0cltpZHggKyAzXSA9PSAnZScpIHsKLSAgICAg
ICAgICAgICAgICBQeV9JTkNSRUYoUHlfVHJ1ZSk7Ci0gICAgICAgICAgICAgICAgKm5leHRfaWR4
X3B0ciA9IGlkeCArIDQ7Ci0gICAgICAgICAgICAgICAgcnZhbCA9IFB5X1RydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZmFsbHRocm91Z2ggPSAx
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgLyog
ZmFsc2UgKi8KLSAgICAgICAgICAgIGlmICgoaWR4ICsgNCA8IGxlbmd0aCkgJiYgc3RyW2lkeCAr
IDFdID09ICdhJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ2wnICYmIHN0cltpZHggKyAzXSA9PSAncycg
JiYgc3RyW2lkeCArIDRdID09ICdlJykgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9G
YWxzZSk7Ci0gICAgICAgICAgICAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDU7Ci0gICAgICAg
ICAgICAgICAgcnZhbCA9IFB5X0ZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGZhbGx0aHJvdWdoID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlICdOJzoKLSAgICAgICAgICAgIC8qIE5hTiAqLwotICAgICAgICAgICAgaWYg
KChpZHggKyAyIDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ2EnICYmIHN0cltpZHggKyAy
XSA9PSAnTicpIHsKLSAgICAgICAgICAgICAgICBydmFsID0gX3BhcnNlX2NvbnN0YW50KHMsICJO
YU4iLCBpZHgsIG5leHRfaWR4X3B0cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZmFsbHRocm91Z2ggPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgJ0knOgotICAgICAgICAgICAgLyogSW5maW5pdHkgKi8KLSAgICAgICAgICAg
IGlmICgoaWR4ICsgNyA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICduJyAmJiBzdHJbaWR4
ICsgMl0gPT0gJ2YnICYmIHN0cltpZHggKyAzXSA9PSAnaScgJiYgc3RyW2lkeCArIDRdID09ICdu
JyAmJiBzdHJbaWR4ICsgNV0gPT0gJ2knICYmIHN0cltpZHggKyA2XSA9PSAndCcgJiYgc3RyW2lk
eCArIDddID09ICd5JykgewotICAgICAgICAgICAgICAgIHJ2YWwgPSBfcGFyc2VfY29uc3RhbnQo
cywgIkluZmluaXR5IiwgaWR4LCBuZXh0X2lkeF9wdHIpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhbGx0aHJvdWdoID0gMTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlICctJzoKLSAgICAgICAgICAgIC8qIC1JbmZpbml0eSAqLwot
ICAgICAgICAgICAgaWYgKChpZHggKyA4IDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ0kn
ICYmIHN0cltpZHggKyAyXSA9PSAnbicgJiYgc3RyW2lkeCArIDNdID09ICdmJyAmJiBzdHJbaWR4
ICsgNF0gPT0gJ2knICYmIHN0cltpZHggKyA1XSA9PSAnbicgJiYgc3RyW2lkeCArIDZdID09ICdp
JyAmJiBzdHJbaWR4ICsgN10gPT0gJ3QnICYmIHN0cltpZHggKyA4XSA9PSAneScpIHsKLSAgICAg
ICAgICAgICAgICBydmFsID0gX3BhcnNlX2NvbnN0YW50KHMsICItSW5maW5pdHkiLCBpZHgsIG5l
eHRfaWR4X3B0cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZmFsbHRocm91Z2ggPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBmYWxsdGhyb3VnaCA9IDE7Ci0gICAgfQotICAgIC8qIERpZG4ndCBm
aW5kIGEgc3RyaW5nLCBvYmplY3QsIGFycmF5LCBvciBuYW1lZCBjb25zdGFudC4gTG9vayBmb3Ig
YSBudW1iZXIuICovCi0gICAgaWYgKGZhbGx0aHJvdWdoKQotICAgICAgICBydmFsID0gX21hdGNo
X251bWJlcl9zdHIocywgcHlzdHIsIGlkeCwgbmV4dF9pZHhfcHRyKTsKLSAgICBQeV9MZWF2ZVJl
Y3Vyc2l2ZUNhbGwoKTsKLSAgICByZXR1cm4gcnZhbDsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoK
LXNjYW5fb25jZV91bmljb2RlKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQ
eV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKQotewotICAgIC8qIFJlYWQg
b25lIEpTT04gdGVybSAob2YgYW55IGtpbmQpIGZyb20gUHlVbmljb2RlIHB5c3RyLgotICAgIGlk
eCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdGVybQotICAgICpu
ZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBj
aGFyYWN0ZXIgYWZ0ZXIKLSAgICAgICAgdGhlIG51bWJlci4KLQotICAgIFJldHVybnMgYSBuZXcg
UHlPYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRlcm0uCi0gICAgKi8KLSAgICBQeV9VTklD
T0RFICpzdHIgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShweXN0cik7Ci0gICAgUHlfc3NpemVfdCBs
ZW5ndGggPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpOwotICAgIFB5T2JqZWN0ICpydmFsID0g
TlVMTDsKLSAgICBpbnQgZmFsbHRocm91Z2ggPSAwOwotICAgIGlmIChpZHggPj0gbGVuZ3RoKSB7
Ci0gICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUg
ZGVjb2RpbmcgYSBKU09OIGRvY3VtZW50IikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHN3
aXRjaCAoc3RyW2lkeF0pIHsKLSAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICAvKiBzdHJp
bmcgKi8KLSAgICAgICAgICAgIHJ2YWwgPSBzY2Fuc3RyaW5nX3VuaWNvZGUocHlzdHIsIGlkeCAr
IDEsCi0gICAgICAgICAgICAgICAgUHlPYmplY3RfSXNUcnVlKHMtPnN0cmljdCksCi0gICAgICAg
ICAgICAgICAgbmV4dF9pZHhfcHRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
ICd7JzoKLSAgICAgICAgICAgIC8qIG9iamVjdCAqLwotICAgICAgICAgICAgcnZhbCA9IF9wYXJz
ZV9vYmplY3RfdW5pY29kZShzLCBweXN0ciwgaWR4ICsgMSwgbmV4dF9pZHhfcHRyKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdbJzoKLSAgICAgICAgICAgIC8qIGFycmF5ICov
Ci0gICAgICAgICAgICBydmFsID0gX3BhcnNlX2FycmF5X3VuaWNvZGUocywgcHlzdHIsIGlkeCAr
IDEsIG5leHRfaWR4X3B0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnbic6
Ci0gICAgICAgICAgICAvKiBudWxsICovCi0gICAgICAgICAgICBpZiAoKGlkeCArIDMgPCBsZW5n
dGgpICYmIHN0cltpZHggKyAxXSA9PSAndScgJiYgc3RyW2lkeCArIDJdID09ICdsJyAmJiBzdHJb
aWR4ICsgM10gPT0gJ2wnKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwot
ICAgICAgICAgICAgICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyA0OwotICAgICAgICAgICAgICAg
IHJ2YWwgPSBQeV9Ob25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGZhbGx0aHJvdWdoID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlICd0JzoKLSAgICAgICAgICAgIC8qIHRydWUgKi8KLSAgICAgICAgICAgIGlmICgoaWR4ICsg
MyA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdyJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ3Un
ICYmIHN0cltpZHggKyAzXSA9PSAnZScpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlf
VHJ1ZSk7Ci0gICAgICAgICAgICAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDQ7Ci0gICAgICAg
ICAgICAgICAgcnZhbCA9IFB5X1RydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZmFsbHRocm91Z2ggPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgLyogZmFsc2UgKi8KLSAgICAgICAgICAgIGlm
ICgoaWR4ICsgNCA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdhJyAmJiBzdHJbaWR4ICsg
Ml0gPT0gJ2wnICYmIHN0cltpZHggKyAzXSA9PSAncycgJiYgc3RyW2lkeCArIDRdID09ICdlJykg
ewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9GYWxzZSk7Ci0gICAgICAgICAgICAgICAg
Km5leHRfaWR4X3B0ciA9IGlkeCArIDU7Ci0gICAgICAgICAgICAgICAgcnZhbCA9IFB5X0ZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhbGx0
aHJvdWdoID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdOJzoKLSAgICAg
ICAgICAgIC8qIE5hTiAqLwotICAgICAgICAgICAgaWYgKChpZHggKyAyIDwgbGVuZ3RoKSAmJiBz
dHJbaWR4ICsgMV0gPT0gJ2EnICYmIHN0cltpZHggKyAyXSA9PSAnTicpIHsKLSAgICAgICAgICAg
ICAgICBydmFsID0gX3BhcnNlX2NvbnN0YW50KHMsICJOYU4iLCBpZHgsIG5leHRfaWR4X3B0cik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZmFsbHRo
cm91Z2ggPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ0knOgotICAgICAg
ICAgICAgLyogSW5maW5pdHkgKi8KLSAgICAgICAgICAgIGlmICgoaWR4ICsgNyA8IGxlbmd0aCkg
JiYgc3RyW2lkeCArIDFdID09ICduJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ2YnICYmIHN0cltpZHgg
KyAzXSA9PSAnaScgJiYgc3RyW2lkeCArIDRdID09ICduJyAmJiBzdHJbaWR4ICsgNV0gPT0gJ2kn
ICYmIHN0cltpZHggKyA2XSA9PSAndCcgJiYgc3RyW2lkeCArIDddID09ICd5JykgewotICAgICAg
ICAgICAgICAgIHJ2YWwgPSBfcGFyc2VfY29uc3RhbnQocywgIkluZmluaXR5IiwgaWR4LCBuZXh0
X2lkeF9wdHIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGZhbGx0aHJvdWdoID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICct
JzoKLSAgICAgICAgICAgIC8qIC1JbmZpbml0eSAqLwotICAgICAgICAgICAgaWYgKChpZHggKyA4
IDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ0knICYmIHN0cltpZHggKyAyXSA9PSAnbicg
JiYgc3RyW2lkeCArIDNdID09ICdmJyAmJiBzdHJbaWR4ICsgNF0gPT0gJ2knICYmIHN0cltpZHgg
KyA1XSA9PSAnbicgJiYgc3RyW2lkeCArIDZdID09ICdpJyAmJiBzdHJbaWR4ICsgN10gPT0gJ3Qn
ICYmIHN0cltpZHggKyA4XSA9PSAneScpIHsKLSAgICAgICAgICAgICAgICBydmFsID0gX3BhcnNl
X2NvbnN0YW50KHMsICItSW5maW5pdHkiLCBpZHgsIG5leHRfaWR4X3B0cik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZmFsbHRocm91Z2ggPSAxOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmYWxsdGhy
b3VnaCA9IDE7Ci0gICAgfQotICAgIC8qIERpZG4ndCBmaW5kIGEgc3RyaW5nLCBvYmplY3QsIGFy
cmF5LCBvciBuYW1lZCBjb25zdGFudC4gTG9vayBmb3IgYSBudW1iZXIuICovCi0gICAgaWYgKGZh
bGx0aHJvdWdoKQotICAgICAgICBydmFsID0gX21hdGNoX251bWJlcl91bmljb2RlKHMsIHB5c3Ry
LCBpZHgsIG5leHRfaWR4X3B0cik7Ci0gICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7Ci0gICAg
cmV0dXJuIHJ2YWw7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1zY2FubmVyX2NhbGwoUHlPYmpl
Y3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKLXsKLSAgICAvKiBQeXRo
b24gY2FsbGFibGUgaW50ZXJmYWNlIHRvIHNjYW5fb25jZV97c3RyLHVuaWNvZGV9ICovCi0gICAg
UHlPYmplY3QgKnB5c3RyOwotICAgIFB5T2JqZWN0ICpydmFsOwotICAgIFB5X3NzaXplX3QgaWR4
OwotICAgIFB5X3NzaXplX3QgbmV4dF9pZHggPSAtMTsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0
W10gPSB7InN0cmluZyIsICJpZHgiLCBOVUxMfTsKLSAgICBQeVNjYW5uZXJPYmplY3QgKnM7Ci0g
ICAgYXNzZXJ0KFB5U2Nhbm5lcl9DaGVjayhzZWxmKSk7Ci0gICAgcyA9IChQeVNjYW5uZXJPYmpl
Y3QgKilzZWxmOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3
ZHMsICJPTyY6c2Nhbl9vbmNlIiwga3dsaXN0LCAmcHlzdHIsIF9jb252ZXJ0UHlJbnRfQXNTc2l6
ZV90LCAmaWR4KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoUHlTdHJpbmdfQ2hl
Y2socHlzdHIpKSB7Ci0gICAgICAgIHJ2YWwgPSBzY2FuX29uY2Vfc3RyKHMsIHB5c3RyLCBpZHgs
ICZuZXh0X2lkeCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikp
IHsKLSAgICAgICAgcnZhbCA9IHNjYW5fb25jZV91bmljb2RlKHMsIHB5c3RyLCBpZHgsICZuZXh0
X2lkeCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlw
ZUVycm9yLAotICAgICAgICAgICAgICAgICAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmlu
Zywgbm90ICUuODBzIiwKLSAgICAgICAgICAgICAgICAgUHlfVFlQRShweXN0ciktPnRwX25hbWUp
OwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlEaWN0X0NsZWFyKHMtPm1lbW8p
OwotICAgIHJldHVybiBfYnVpbGRfcnZhbF9pbmRleF90dXBsZShydmFsLCBuZXh0X2lkeCk7Ci19
Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1zY2FubmVyX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5
T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKLXsKLSAgICBQeVNjYW5uZXJPYmplY3QgKnM7
Ci0gICAgcyA9IChQeVNjYW5uZXJPYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKLSAg
ICBpZiAocyAhPSBOVUxMKSB7Ci0gICAgICAgIHMtPmVuY29kaW5nID0gTlVMTDsKLSAgICAgICAg
cy0+c3RyaWN0ID0gTlVMTDsKLSAgICAgICAgcy0+b2JqZWN0X2hvb2sgPSBOVUxMOwotICAgICAg
ICBzLT5wYWlyc19ob29rID0gTlVMTDsKLSAgICAgICAgcy0+cGFyc2VfZmxvYXQgPSBOVUxMOwot
ICAgICAgICBzLT5wYXJzZV9pbnQgPSBOVUxMOwotICAgICAgICBzLT5wYXJzZV9jb25zdGFudCA9
IE5VTEw7Ci0gICAgfQotICAgIHJldHVybiAoUHlPYmplY3QgKilzOwotfQotCi1zdGF0aWMgaW50
Ci1zY2FubmVyX2luaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAq
a3dkcykKLXsKLSAgICAvKiBJbml0aWFsaXplIFNjYW5uZXIgb2JqZWN0ICovCi0gICAgUHlPYmpl
Y3QgKmN0eDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImNvbnRleHQiLCBOVUxMfTsK
LSAgICBQeVNjYW5uZXJPYmplY3QgKnM7Ci0KLSAgICBhc3NlcnQoUHlTY2FubmVyX0NoZWNrKHNl
bGYpKTsKLSAgICBzID0gKFB5U2Nhbm5lck9iamVjdCAqKXNlbGY7Ci0KLSAgICBpZiAoIVB5QXJn
X1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiTzptYWtlX3NjYW5uZXIiLCBrd2xp
c3QsICZjdHgpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgCi0gICAgaWYgKHMtPm1lbW8gPT0g
TlVMTCkgewotICAgICAgICBzLT5tZW1vID0gUHlEaWN0X05ldygpOwotICAgICAgICBpZiAocy0+
bWVtbyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8qIFB5
U3RyaW5nX0FTX1NUUklORyBpcyB1c2VkIG9uIGVuY29kaW5nICovCi0gICAgcy0+ZW5jb2Rpbmcg
PSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGN0eCwgImVuY29kaW5nIik7Ci0gICAgaWYgKHMtPmVu
Y29kaW5nID09IE5VTEwpCi0gICAgICAgIGdvdG8gYmFpbDsKLSAgICBpZiAocy0+ZW5jb2Rpbmcg
PT0gUHlfTm9uZSkgewotICAgICAgICBQeV9ERUNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHMtPmVu
Y29kaW5nID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZyhERUZBVUxUX0VOQ09ESU5HKTsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHMtPmVuY29kaW5nKSkgewotICAgICAg
ICBQeU9iamVjdCAqdG1wID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhzLT5lbmNvZGluZywg
TlVMTCwgTlVMTCk7Ci0gICAgICAgIFB5X0RFQ1JFRihzLT5lbmNvZGluZyk7Ci0gICAgICAgIHMt
PmVuY29kaW5nID0gdG1wOwotICAgIH0KLSAgICBpZiAocy0+ZW5jb2RpbmcgPT0gTlVMTCB8fCAh
UHlTdHJpbmdfQ2hlY2socy0+ZW5jb2RpbmcpKQotICAgICAgICBnb3RvIGJhaWw7Ci0KLSAgICAv
KiBBbGwgb2YgdGhlc2Ugd2lsbCBmYWlsICJncmFjZWZ1bGx5IiBzbyB3ZSBkb24ndCBuZWVkIHRv
IHZlcmlmeSB0aGVtICovCi0gICAgcy0+c3RyaWN0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhj
dHgsICJzdHJpY3QiKTsKLSAgICBpZiAocy0+c3RyaWN0ID09IE5VTEwpCi0gICAgICAgIGdvdG8g
YmFpbDsKLSAgICBzLT5vYmplY3RfaG9vayA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY3R4LCAi
b2JqZWN0X2hvb2siKTsKLSAgICBpZiAocy0+b2JqZWN0X2hvb2sgPT0gTlVMTCkKLSAgICAgICAg
Z290byBiYWlsOwotICAgIHMtPnBhaXJzX2hvb2sgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGN0
eCwgIm9iamVjdF9wYWlyc19ob29rIik7Ci0gICAgaWYgKHMtPnBhaXJzX2hvb2sgPT0gTlVMTCkK
LSAgICAgICAgZ290byBiYWlsOwotICAgIHMtPnBhcnNlX2Zsb2F0ID0gUHlPYmplY3RfR2V0QXR0
clN0cmluZyhjdHgsICJwYXJzZV9mbG9hdCIpOwotICAgIGlmIChzLT5wYXJzZV9mbG9hdCA9PSBO
VUxMKQotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgcy0+cGFyc2VfaW50ID0gUHlPYmplY3RfR2V0
QXR0clN0cmluZyhjdHgsICJwYXJzZV9pbnQiKTsKLSAgICBpZiAocy0+cGFyc2VfaW50ID09IE5V
TEwpCi0gICAgICAgIGdvdG8gYmFpbDsKLSAgICBzLT5wYXJzZV9jb25zdGFudCA9IFB5T2JqZWN0
X0dldEF0dHJTdHJpbmcoY3R4LCAicGFyc2VfY29uc3RhbnQiKTsKLSAgICBpZiAocy0+cGFyc2Vf
Y29uc3RhbnQgPT0gTlVMTCkKLSAgICAgICAgZ290byBiYWlsOwotCi0gICAgcmV0dXJuIDA7Ci0K
LWJhaWw6Ci0gICAgUHlfQ0xFQVIocy0+ZW5jb2RpbmcpOwotICAgIFB5X0NMRUFSKHMtPnN0cmlj
dCk7Ci0gICAgUHlfQ0xFQVIocy0+b2JqZWN0X2hvb2spOwotICAgIFB5X0NMRUFSKHMtPnBhaXJz
X2hvb2spOwotICAgIFB5X0NMRUFSKHMtPnBhcnNlX2Zsb2F0KTsKLSAgICBQeV9DTEVBUihzLT5w
YXJzZV9pbnQpOwotICAgIFB5X0NMRUFSKHMtPnBhcnNlX2NvbnN0YW50KTsKLSAgICByZXR1cm4g
LTE7Ci19Ci0KLVB5RG9jX1NUUlZBUihzY2FubmVyX2RvYywgIkpTT04gc2Nhbm5lciBvYmplY3Qi
KTsKLQotc3RhdGljCi1QeVR5cGVPYmplY3QgUHlTY2FubmVyVHlwZSA9IHsKLSAgICBQeU9iamVj
dF9IRUFEX0lOSVQoTlVMTCkKLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaW50ZXJu
YWwgKi8KLSAgICAic2ltcGxlanNvbi5fc3BlZWR1cHMuU2Nhbm5lciIsICAgICAgIC8qIHRwX25h
bWUgKi8KLSAgICBzaXplb2YoUHlTY2FubmVyT2JqZWN0KSwgLyogdHBfYmFzaWNzaXplICovCi0g
ICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCi0gICAgc2Nhbm5lcl9k
ZWFsbG9jLCAvKiB0cF9kZWFsbG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRw
X3ByaW50ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KLSAg
ICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwotICAgIDAsICAgICAgICAg
ICAgICAgICAgICAvKiB0cF9jb21wYXJlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8q
IHRwX3JlcHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICov
Ci0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCi0gICAgMCwg
ICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KLSAgICAwLCAgICAgICAgICAg
ICAgICAgICAgLyogdHBfaGFzaCAqLwotICAgIHNjYW5uZXJfY2FsbCwgICAgICAgICAvKiB0cF9j
YWxsICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLwotICAgIDAsLyog
UHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICovICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRh
dHRybyAqLwotICAgIDAsLyogUHlPYmplY3RfR2VuZXJpY1NldEF0dHIsICovICAgICAgICAgICAg
ICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0
cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVf
R0MsICAgLyogdHBfZmxhZ3MgKi8KLSAgICBzY2FubmVyX2RvYywgICAgICAgICAgLyogdHBfZG9j
ICovCi0gICAgc2Nhbm5lcl90cmF2ZXJzZSwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZl
cnNlICovCi0gICAgc2Nhbm5lcl9jbGVhciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFy
ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCi0gICAg
MCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCi0gICAgMCwgICAg
ICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAg
LyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9k
cyAqLwotICAgIHNjYW5uZXJfbWVtYmVycywgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJl
cnMgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCi0gICAgMCwg
ICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAg
ICAgLyogdHBfZGljdCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9n
ZXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCi0gICAg
MCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KLSAgICBzY2FubmVyX2lu
aXQsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCi0gICAgMCwvKiBQeVR5cGVfR2Vu
ZXJpY0FsbG9jLCAqLyAgICAgICAgLyogdHBfYWxsb2MgKi8KLSAgICBzY2FubmVyX25ldywgICAg
ICAgICAgLyogdHBfbmV3ICovCi0gICAgMCwvKiBQeU9iamVjdF9HQ19EZWwsICovICAgICAgICAg
ICAgICAvKiB0cF9mcmVlICovCi19OwotCi1zdGF0aWMgUHlPYmplY3QgKgotZW5jb2Rlcl9uZXco
UHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCi17Ci0g
ICAgUHlFbmNvZGVyT2JqZWN0ICpzOwotICAgIHMgPSAoUHlFbmNvZGVyT2JqZWN0ICopdHlwZS0+
dHBfYWxsb2ModHlwZSwgMCk7Ci0gICAgaWYgKHMgIT0gTlVMTCkgewotICAgICAgICBzLT5tYXJr
ZXJzID0gTlVMTDsKLSAgICAgICAgcy0+ZGVmYXVsdGZuID0gTlVMTDsKLSAgICAgICAgcy0+ZW5j
b2RlciA9IE5VTEw7Ci0gICAgICAgIHMtPmluZGVudCA9IE5VTEw7Ci0gICAgICAgIHMtPmtleV9z
ZXBhcmF0b3IgPSBOVUxMOwotICAgICAgICBzLT5pdGVtX3NlcGFyYXRvciA9IE5VTEw7Ci0gICAg
ICAgIHMtPnNvcnRfa2V5cyA9IE5VTEw7Ci0gICAgICAgIHMtPnNraXBrZXlzID0gTlVMTDsKLSAg
ICAgICAgcy0+a2V5X21lbW8gPSBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gKFB5T2JqZWN0ICop
czsKLX0KLQotc3RhdGljIGludAotZW5jb2Rlcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVj
dCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCi17Ci0gICAgLyogaW5pdGlhbGl6ZSBFbmNvZGVyIG9i
amVjdCAqLwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsibWFya2VycyIsICJkZWZhdWx0
IiwgImVuY29kZXIiLCAiaW5kZW50IiwgImtleV9zZXBhcmF0b3IiLCAiaXRlbV9zZXBhcmF0b3Ii
LCAic29ydF9rZXlzIiwgInNraXBrZXlzIiwgImFsbG93X25hbiIsICJrZXlfbWVtbyIsICJ1c2Vf
ZGVjaW1hbCIsIE5VTEx9OwotCi0gICAgUHlFbmNvZGVyT2JqZWN0ICpzOwotICAgIFB5T2JqZWN0
ICptYXJrZXJzLCAqZGVmYXVsdGZuLCAqZW5jb2RlciwgKmluZGVudCwgKmtleV9zZXBhcmF0b3I7
Ci0gICAgUHlPYmplY3QgKml0ZW1fc2VwYXJhdG9yLCAqc29ydF9rZXlzLCAqc2tpcGtleXMsICph
bGxvd19uYW4sICprZXlfbWVtbywgKnVzZV9kZWNpbWFsOwotCi0gICAgYXNzZXJ0KFB5RW5jb2Rl
cl9DaGVjayhzZWxmKSk7Ci0gICAgcyA9IChQeUVuY29kZXJPYmplY3QgKilzZWxmOwotCi0gICAg
aWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PT09PT09PT09P
Om1ha2VfZW5jb2RlciIsIGt3bGlzdCwKLSAgICAgICAgJm1hcmtlcnMsICZkZWZhdWx0Zm4sICZl
bmNvZGVyLCAmaW5kZW50LCAma2V5X3NlcGFyYXRvciwgJml0ZW1fc2VwYXJhdG9yLAotICAgICAg
ICAmc29ydF9rZXlzLCAmc2tpcGtleXMsICZhbGxvd19uYW4sICZrZXlfbWVtbywgJnVzZV9kZWNp
bWFsKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgcy0+bWFya2VycyA9IG1hcmtlcnM7Ci0g
ICAgcy0+ZGVmYXVsdGZuID0gZGVmYXVsdGZuOwotICAgIHMtPmVuY29kZXIgPSBlbmNvZGVyOwot
ICAgIHMtPmluZGVudCA9IGluZGVudDsKLSAgICBzLT5rZXlfc2VwYXJhdG9yID0ga2V5X3NlcGFy
YXRvcjsKLSAgICBzLT5pdGVtX3NlcGFyYXRvciA9IGl0ZW1fc2VwYXJhdG9yOwotICAgIHMtPnNv
cnRfa2V5cyA9IHNvcnRfa2V5czsKLSAgICBzLT5za2lwa2V5cyA9IHNraXBrZXlzOwotICAgIHMt
PmtleV9tZW1vID0ga2V5X21lbW87Ci0gICAgcy0+ZmFzdF9lbmNvZGUgPSAoUHlDRnVuY3Rpb25f
Q2hlY2socy0+ZW5jb2RlcikgJiYgUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24ocy0+ZW5jb2Rlcikg
PT0gKFB5Q0Z1bmN0aW9uKXB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKTsKLSAgICBzLT5hbGxv
d19uYW4gPSBQeU9iamVjdF9Jc1RydWUoYWxsb3dfbmFuKTsKLSAgICBzLT51c2VfZGVjaW1hbCA9
IFB5T2JqZWN0X0lzVHJ1ZSh1c2VfZGVjaW1hbCk7Ci0KLSAgICBQeV9JTkNSRUYocy0+bWFya2Vy
cyk7Ci0gICAgUHlfSU5DUkVGKHMtPmRlZmF1bHRmbik7Ci0gICAgUHlfSU5DUkVGKHMtPmVuY29k
ZXIpOwotICAgIFB5X0lOQ1JFRihzLT5pbmRlbnQpOwotICAgIFB5X0lOQ1JFRihzLT5rZXlfc2Vw
YXJhdG9yKTsKLSAgICBQeV9JTkNSRUYocy0+aXRlbV9zZXBhcmF0b3IpOwotICAgIFB5X0lOQ1JF
RihzLT5zb3J0X2tleXMpOwotICAgIFB5X0lOQ1JFRihzLT5za2lwa2V5cyk7Ci0gICAgUHlfSU5D
UkVGKHMtPmtleV9tZW1vKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoK
LWVuY29kZXJfY2FsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICpr
d2RzKQotewotICAgIC8qIFB5dGhvbiBjYWxsYWJsZSBpbnRlcmZhY2UgdG8gZW5jb2RlX2xpc3Rl
bmNvZGVfb2JqICovCi0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJvYmoiLCAiX2N1cnJl
bnRfaW5kZW50X2xldmVsIiwgTlVMTH07Ci0gICAgUHlPYmplY3QgKm9iajsKLSAgICBQeU9iamVj
dCAqcnZhbDsKLSAgICBQeV9zc2l6ZV90IGluZGVudF9sZXZlbDsKLSAgICBQeUVuY29kZXJPYmpl
Y3QgKnM7Ci0gICAgYXNzZXJ0KFB5RW5jb2Rlcl9DaGVjayhzZWxmKSk7Ci0gICAgcyA9IChQeUVu
Y29kZXJPYmplY3QgKilzZWxmOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRz
KGFyZ3MsIGt3ZHMsICJPTyY6X2l0ZXJlbmNvZGUiLCBrd2xpc3QsCi0gICAgICAgICZvYmosIF9j
b252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmaW5kZW50X2xldmVsKSkKLSAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgcnZhbCA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKHJ2YWwgPT0gTlVMTCkKLSAg
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGVuY29kZXJfbGlzdGVuY29kZV9vYmoocywgcnZh
bCwgb2JqLCBpbmRlbnRfbGV2ZWwpKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydmFsKTsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBydmFsOwotfQotCi1zdGF0aWMgUHlP
YmplY3QgKgotX2VuY29kZWRfY29uc3QoUHlPYmplY3QgKm9iaikKLXsKLSAgICAvKiBSZXR1cm4g
dGhlIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIE5vbmUsIFRydWUsIEZhbHNlICovCi0g
ICAgaWYgKG9iaiA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqc19udWxs
ID0gTlVMTDsKLSAgICAgICAgaWYgKHNfbnVsbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzX251
bGwgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJudWxsIik7Ci0gICAgICAgIH0KLSAgICAg
ICAgUHlfSU5DUkVGKHNfbnVsbCk7Ci0gICAgICAgIHJldHVybiBzX251bGw7Ci0gICAgfQotICAg
IGVsc2UgaWYgKG9iaiA9PSBQeV9UcnVlKSB7Ci0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqc190
cnVlID0gTlVMTDsKLSAgICAgICAgaWYgKHNfdHJ1ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBz
X3RydWUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ0cnVlIik7Ci0gICAgICAgIH0KLSAg
ICAgICAgUHlfSU5DUkVGKHNfdHJ1ZSk7Ci0gICAgICAgIHJldHVybiBzX3RydWU7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKG9iaiA9PSBQeV9GYWxzZSkgewotICAgICAgICBzdGF0aWMgUHlPYmplY3Qg
KnNfZmFsc2UgPSBOVUxMOwotICAgICAgICBpZiAoc19mYWxzZSA9PSBOVUxMKSB7Ci0gICAgICAg
ICAgICBzX2ZhbHNlID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiZmFsc2UiKTsKLSAgICAg
ICAgfQotICAgICAgICBQeV9JTkNSRUYoc19mYWxzZSk7Ci0gICAgICAgIHJldHVybiBzX2ZhbHNl
OwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVl
RXJyb3IsICJub3QgYSBjb25zdCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0K
LXN0YXRpYyBQeU9iamVjdCAqCi1lbmNvZGVyX2VuY29kZV9mbG9hdChQeUVuY29kZXJPYmplY3Qg
KnMsIFB5T2JqZWN0ICpvYmopCi17Ci0gICAgLyogUmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0
aW9uIG9mIGEgUHlGbG9hdCAqLwotICAgIGRvdWJsZSBpID0gUHlGbG9hdF9BU19ET1VCTEUob2Jq
KTsKLSAgICBpZiAoIVB5X0lTX0ZJTklURShpKSkgewotICAgICAgICBpZiAoIXMtPmFsbG93X25h
bikgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJPdXQg
b2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQiKTsKLSAgICAgICAg
ICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpID4gMCkgewotICAgICAg
ICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoIkluZmluaXR5Iik7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiBQeVN0cmluZ19G
cm9tU3RyaW5nKCItSW5maW5pdHkiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKCJOYU4iKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAvKiBVc2UgYSBiZXR0ZXIgZmxvYXQgZm9ybWF0IGhlcmU/ICovCi0gICAgcmV0dXJu
IFB5T2JqZWN0X1JlcHIob2JqKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLWVuY29kZXJfZW5j
b2RlX3N0cmluZyhQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopCi17Ci0gICAgLyog
UmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgc3RyaW5nICovCi0gICAgaWYgKHMt
PmZhc3RfZW5jb2RlKQotICAgICAgICByZXR1cm4gcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWko
TlVMTCwgb2JqKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rp
b25PYmpBcmdzKHMtPmVuY29kZXIsIG9iaiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQKLV9zdGVh
bF9saXN0X2FwcGVuZChQeU9iamVjdCAqbHN0LCBQeU9iamVjdCAqc3RvbGVuKQotewotICAgIC8q
IEFwcGVuZCBzdG9sZW4gYW5kIHRoZW4gZGVjcmVtZW50IGl0cyByZWZlcmVuY2UgY291bnQgKi8K
LSAgICBpbnQgcnZhbCA9IFB5TGlzdF9BcHBlbmQobHN0LCBzdG9sZW4pOwotICAgIFB5X0RFQ1JF
RihzdG9sZW4pOwotICAgIHJldHVybiBydmFsOwotfQotCi1zdGF0aWMgaW50Ci1lbmNvZGVyX2xp
c3RlbmNvZGVfb2JqKFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKnJ2YWwsIFB5T2JqZWN0
ICpvYmosIFB5X3NzaXplX3QgaW5kZW50X2xldmVsKQotewotICAgIC8qIEVuY29kZSBQeXRob24g
b2JqZWN0IG9iaiB0byBhIEpTT04gdGVybSwgcnZhbCBpcyBhIFB5TGlzdCAqLwotICAgIGludCBy
diA9IC0xOwotICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBlbmNvZGluZyBh
IEpTT04gZG9jdW1lbnQiKSkKLSAgICAgICAgcmV0dXJuIHJ2OwotICAgIGRvIHsKLSAgICAgICAg
aWYgKG9iaiA9PSBQeV9Ob25lIHx8IG9iaiA9PSBQeV9UcnVlIHx8IG9iaiA9PSBQeV9GYWxzZSkg
ewotICAgICAgICAgICAgUHlPYmplY3QgKmNzdHIgPSBfZW5jb2RlZF9jb25zdChvYmopOwotICAg
ICAgICAgICAgaWYgKGNzdHIgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBydiA9IF9zdGVhbF9s
aXN0X2FwcGVuZChydmFsLCBjc3RyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChQeVN0
cmluZ19DaGVjayhvYmopIHx8IFB5VW5pY29kZV9DaGVjayhvYmopKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZXJfZW5jb2RlX3N0cmluZyhzLCBvYmop
OwotICAgICAgICAgICAgaWYgKGVuY29kZWQgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBydiA9
IF9zdGVhbF9saXN0X2FwcGVuZChydmFsLCBlbmNvZGVkKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChQeUludF9DaGVjayhvYmopIHx8IFB5TG9uZ19DaGVjayhvYmopKSB7Ci0gICAgICAg
ICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IFB5T2JqZWN0X1N0cihvYmopOwotICAgICAgICAgICAg
aWYgKGVuY29kZWQgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBydiA9IF9zdGVhbF9saXN0X2Fw
cGVuZChydmFsLCBlbmNvZGVkKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChQeUZsb2F0
X0NoZWNrKG9iaikpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gZW5jb2Rlcl9l
bmNvZGVfZmxvYXQocywgb2JqKTsKLSAgICAgICAgICAgIGlmIChlbmNvZGVkICE9IE5VTEwpCi0g
ICAgICAgICAgICAgICAgcnYgPSBfc3RlYWxfbGlzdF9hcHBlbmQocnZhbCwgZW5jb2RlZCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoUHlMaXN0X0NoZWNrKG9iaikgfHwgUHlUdXBsZV9D
aGVjayhvYmopKSB7Ci0gICAgICAgICAgICBydiA9IGVuY29kZXJfbGlzdGVuY29kZV9saXN0KHMs
IHJ2YWwsIG9iaiwgaW5kZW50X2xldmVsKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChQ
eURpY3RfQ2hlY2sob2JqKSkgewotICAgICAgICAgICAgcnYgPSBlbmNvZGVyX2xpc3RlbmNvZGVf
ZGljdChzLCBydmFsLCBvYmosIGluZGVudF9sZXZlbCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAocy0+dXNlX2RlY2ltYWwgJiYgRGVjaW1hbF9DaGVjayhvYmopKSB7Ci0gICAgICAgICAg
ICBQeU9iamVjdCAqZW5jb2RlZCA9IFB5T2JqZWN0X1N0cihvYmopOwotICAgICAgICAgICAgaWYg
KGVuY29kZWQgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBydiA9IF9zdGVhbF9saXN0X2FwcGVu
ZChydmFsLCBlbmNvZGVkKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IFB5T2JqZWN0ICppZGVudCA9IE5VTEw7Ci0gICAgICAgICAgICBQeU9iamVjdCAqbmV3b2JqOwot
ICAgICAgICAgICAgaWYgKHMtPm1hcmtlcnMgIT0gUHlfTm9uZSkgewotICAgICAgICAgICAgICAg
IGludCBoYXNfa2V5OwotICAgICAgICAgICAgICAgIGlkZW50ID0gUHlMb25nX0Zyb21Wb2lkUHRy
KG9iaik7Ci0gICAgICAgICAgICAgICAgaWYgKGlkZW50ID09IE5VTEwpCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGhhc19rZXkgPSBQeURpY3RfQ29udGFpbnMo
cy0+bWFya2VycywgaWRlbnQpOwotICAgICAgICAgICAgICAgIGlmIChoYXNfa2V5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChoYXNfa2V5ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICAg
ICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJDaXJjdWxhciByZWZlcmVuY2Ug
ZGV0ZWN0ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGlkZW50KTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmIChQeURpY3RfU2V0SXRlbShzLT5tYXJrZXJzLCBpZGVudCwgb2JqKSkgewotICAgICAgICAg
ICAgICAgICAgICBQeV9ERUNSRUYoaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBuZXdvYmogPSBQ
eU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPmRlZmF1bHRmbiwgb2JqLCBOVUxMKTsKLSAg
ICAgICAgICAgIGlmIChuZXdvYmogPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X1hERUNS
RUYoaWRlbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcnYgPSBlbmNvZGVyX2xpc3RlbmNvZGVfb2JqKHMsIHJ2YWwsIG5ld29iaiwgaW5kZW50
X2xldmVsKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOwotICAgICAgICAgICAgaWYg
KHJ2KSB7Ci0gICAgICAgICAgICAgICAgUHlfWERFQ1JFRihpZGVudCk7Ci0gICAgICAgICAgICAg
ICAgcnYgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlkZW50ICE9
IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X0RlbEl0ZW0ocy0+bWFya2Vycywg
aWRlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoaWRlbnQpOwotICAgICAg
ICAgICAgICAgICAgICBydiA9IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBQeV9YREVDUkVGKGlkZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gd2hp
bGUgKDApOwotICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotICAgIHJldHVybiBydjsKLX0K
LQotc3RhdGljIGludAotZW5jb2Rlcl9saXN0ZW5jb2RlX2RpY3QoUHlFbmNvZGVyT2JqZWN0ICpz
LCBQeU9iamVjdCAqcnZhbCwgUHlPYmplY3QgKmRjdCwgUHlfc3NpemVfdCBpbmRlbnRfbGV2ZWwp
Ci17Ci0gICAgLyogRW5jb2RlIFB5dGhvbiBkaWN0IGRjdCBhIEpTT04gdGVybSwgcnZhbCBpcyBh
IFB5TGlzdCAqLwotICAgIHN0YXRpYyBQeU9iamVjdCAqb3Blbl9kaWN0ID0gTlVMTDsKLSAgICBz
dGF0aWMgUHlPYmplY3QgKmNsb3NlX2RpY3QgPSBOVUxMOwotICAgIHN0YXRpYyBQeU9iamVjdCAq
ZW1wdHlfZGljdCA9IE5VTEw7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICppdGVyaXRlbXMgPSBOVUxM
OwotICAgIFB5T2JqZWN0ICprc3RyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqaWRlbnQgPSBOVUxM
OwotICAgIFB5T2JqZWN0ICppdGVyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqaXRlbSA9IE5VTEw7
Ci0gICAgUHlPYmplY3QgKml0ZW1zID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZW5jb2RlZCA9IE5V
TEw7Ci0gICAgaW50IHNraXBrZXlzOwotICAgIFB5X3NzaXplX3QgaWR4OwotCi0gICAgaWYgKG9w
ZW5fZGljdCA9PSBOVUxMIHx8IGNsb3NlX2RpY3QgPT0gTlVMTCB8fCBlbXB0eV9kaWN0ID09IE5V
TEwgfHwgaXRlcml0ZW1zID09IE5VTEwpIHsKLSAgICAgICAgb3Blbl9kaWN0ID0gUHlTdHJpbmdf
SW50ZXJuRnJvbVN0cmluZygieyIpOwotICAgICAgICBjbG9zZV9kaWN0ID0gUHlTdHJpbmdfSW50
ZXJuRnJvbVN0cmluZygifSIpOwotICAgICAgICBlbXB0eV9kaWN0ID0gUHlTdHJpbmdfSW50ZXJu
RnJvbVN0cmluZygie30iKTsKLSAgICAgICAgaXRlcml0ZW1zID0gUHlTdHJpbmdfSW50ZXJuRnJv
bVN0cmluZygiaXRlcml0ZW1zIik7Ci0gICAgICAgIGlmIChvcGVuX2RpY3QgPT0gTlVMTCB8fCBj
bG9zZV9kaWN0ID09IE5VTEwgfHwgZW1wdHlfZGljdCA9PSBOVUxMIHx8IGl0ZXJpdGVtcyA9PSBO
VUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAoUHlEaWN0X1NpemUo
ZGN0KSA9PSAwKQotICAgICAgICByZXR1cm4gUHlMaXN0X0FwcGVuZChydmFsLCBlbXB0eV9kaWN0
KTsKLQotICAgIGlmIChzLT5tYXJrZXJzICE9IFB5X05vbmUpIHsKLSAgICAgICAgaW50IGhhc19r
ZXk7Ci0gICAgICAgIGlkZW50ID0gUHlMb25nX0Zyb21Wb2lkUHRyKGRjdCk7Ci0gICAgICAgIGlm
IChpZGVudCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICBoYXNfa2V5
ID0gUHlEaWN0X0NvbnRhaW5zKHMtPm1hcmtlcnMsIGlkZW50KTsKLSAgICAgICAgaWYgKGhhc19r
ZXkpIHsKLSAgICAgICAgICAgIGlmIChoYXNfa2V5ICE9IC0xKQotICAgICAgICAgICAgICAgIFB5
RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVj
dGVkIik7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFB5
RGljdF9TZXRJdGVtKHMtPm1hcmtlcnMsIGlkZW50LCBkY3QpKSB7Ci0gICAgICAgICAgICBnb3Rv
IGJhaWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBv
cGVuX2RpY3QpKQotICAgICAgICBnb3RvIGJhaWw7Ci0KLSAgICBpZiAocy0+aW5kZW50ICE9IFB5
X05vbmUpIHsKLSAgICAgICAgLyogVE9ETzogRE9FUyBOT1QgUlVOICovCi0gICAgICAgIGluZGVu
dF9sZXZlbCArPSAxOwotICAgICAgICAvKgotICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSAn
XG4nICsgKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAgICAgICAgICBzZXBh
cmF0b3IgPSBfaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAotICAgICAgICAgICAgYnVm
ICs9IG5ld2xpbmVfaW5kZW50Ci0gICAgICAgICovCi0gICAgfQotCi0gICAgaWYgKFB5T2JqZWN0
X0lzVHJ1ZShzLT5zb3J0X2tleXMpKSB7Ci0gICAgICAgIC8qIEZpcnN0IHNvcnQgdGhlIGtleXMg
dGhlbiByZXBsYWNlIHRoZW0gd2l0aCAoa2V5LCB2YWx1ZSkgdHVwbGVzLiAqLwotICAgICAgICBQ
eV9zc2l6ZV90IGksIG5pdGVtczsKLSAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGRjdCkp
Ci0gICAgICAgICAgICBpdGVtcyA9IFB5RGljdF9LZXlzKGRjdCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGl0ZW1zID0gUHlNYXBwaW5nX0tleXMoZGN0KTsKLSAgICAgICAgaWYgKGl0ZW1z
ID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIGlmICghUHlMaXN0X0No
ZWNrKGl0ZW1zKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJy
b3IsICJrZXlzIG11c3QgcmV0dXJuIGxpc3QiKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoUHlMaXN0X1NvcnQoaXRlbXMpIDwgMCkKLSAgICAgICAgICAg
IGdvdG8gYmFpbDsKLSAgICAgICAgbml0ZW1zID0gUHlMaXN0X0dFVF9TSVpFKGl0ZW1zKTsKLSAg
ICAgICAgZm9yIChpID0gMDsgaSA8IG5pdGVtczsgaSsrKSB7Ci0gICAgICAgICAgICBQeU9iamVj
dCAqa2V5LCAqdmFsdWU7Ci0gICAgICAgICAgICBrZXkgPSBQeUxpc3RfR0VUX0lURU0oaXRlbXMs
IGkpOwotICAgICAgICAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbShkY3QsIGtleSk7Ci0gICAg
ICAgICAgICBpdGVtID0gUHlUdXBsZV9QYWNrKDIsIGtleSwgdmFsdWUpOwotICAgICAgICAgICAg
aWYgKGl0ZW0gPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAg
ICBQeUxpc3RfU0VUX0lURU0oaXRlbXMsIGksIGl0ZW0pOwotICAgICAgICAgICAgUHlfREVDUkVG
KGtleSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChQeURpY3Rf
Q2hlY2tFeGFjdChkY3QpKQotICAgICAgICAgICAgaXRlbXMgPSBQeURpY3RfSXRlbXMoZGN0KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgaXRlbXMgPSBQeU1hcHBpbmdfSXRlbXMoZGN0KTsK
LSAgICB9Ci0gICAgaWYgKGl0ZW1zID09IE5VTEwpCi0gICAgICAgIGdvdG8gYmFpbDsKLSAgICBp
dGVyID0gUHlPYmplY3RfR2V0SXRlcihpdGVtcyk7Ci0gICAgUHlfREVDUkVGKGl0ZW1zKTsKLSAg
ICBpZiAoaXRlciA9PSBOVUxMKQotICAgICAgICBnb3RvIGJhaWw7Ci0KLSAgICBza2lwa2V5cyA9
IFB5T2JqZWN0X0lzVHJ1ZShzLT5za2lwa2V5cyk7Ci0gICAgaWR4ID0gMDsKLSAgICB3aGlsZSAo
KGl0ZW0gPSBQeUl0ZXJfTmV4dChpdGVyKSkpIHsKLSAgICAgICAgUHlPYmplY3QgKmVuY29kZWQs
ICprZXksICp2YWx1ZTsKLSAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGl0ZW0pIHx8IFB5X1NJ
WkUoaXRlbSkgIT0gMikgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVl
RXJyb3IsICJpdGVtcyBtdXN0IHJldHVybiAyLXR1cGxlcyIpOwotICAgICAgICAgICAgZ290byBi
YWlsOwotICAgICAgICB9Ci0gICAgICAgIGtleSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMCk7
Ci0gICAgICAgIGlmIChrZXkgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAg
ICAgdmFsdWUgPSBQeVR1cGxlX0dFVF9JVEVNKGl0ZW0sIDEpOwotICAgICAgICBpZiAodmFsdWUg
PT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLQotICAgICAgICBlbmNvZGVkID0gUHlE
aWN0X0dldEl0ZW0ocy0+a2V5X21lbW8sIGtleSk7Ci0gICAgICAgIGlmIChlbmNvZGVkICE9IE5V
TEwpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihlbmNvZGVkKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhrZXkpIHx8IFB5VW5pY29kZV9DaGVjayhrZXkpKSB7
Ci0gICAgICAgICAgICBQeV9JTkNSRUYoa2V5KTsKLSAgICAgICAgICAgIGtzdHIgPSBrZXk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoUHlGbG9hdF9DaGVjayhrZXkpKSB7Ci0gICAgICAg
ICAgICBrc3RyID0gZW5jb2Rlcl9lbmNvZGVfZmxvYXQocywga2V5KTsKLSAgICAgICAgICAgIGlm
IChrc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSBQeV9UcnVlIHx8IGtleSA9PSBQeV9GYWxzZSB8fCBrZXkg
PT0gUHlfTm9uZSkgewotICAgICAgICAgICAgLyogVGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSBQ
eUludF9DaGVjayBiZWNhdXNlCi0gICAgICAgICAgICAgICBUcnVlIGFuZCBGYWxzZSBhcmUgYWxz
byAxIGFuZCAwLiovCi0gICAgICAgICAgICBrc3RyID0gX2VuY29kZWRfY29uc3Qoa2V5KTsKLSAg
ICAgICAgICAgIGlmIChrc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBiYWlsOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKFB5SW50X0NoZWNrKGtleSkgfHwgUHlMb25nX0No
ZWNrKGtleSkpIHsKLSAgICAgICAgICAgIGtzdHIgPSBQeU9iamVjdF9TdHIoa2V5KTsKLSAgICAg
ICAgICAgIGlmIChrc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNraXBrZXlzKSB7Ci0gICAgICAgICAgICBQeV9ERUNS
RUYoaXRlbSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIC8qIFRPRE86IGluY2x1ZGUgcmVwciBvZiBrZXkgKi8KLSAgICAgICAg
ICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJrZXlzIG11c3QgYmUgYSBzdHJp
bmciKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
ZHgpIHsKLSAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2YWwsIHMtPml0ZW1fc2VwYXJh
dG9yKSkKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoZW5jb2RlZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBlbmNvZGVkID0gZW5jb2Rlcl9lbmNv
ZGVfc3RyaW5nKHMsIGtzdHIpOwotICAgICAgICAgICAgUHlfQ0xFQVIoa3N0cik7Ci0gICAgICAg
ICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAg
ICAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShzLT5rZXlfbWVtbywga2V5LCBlbmNvZGVkKSkK
LSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFB5TGlz
dF9BcHBlbmQocnZhbCwgZW5jb2RlZCkpIHsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAg
ICAgfQotICAgICAgICBQeV9DTEVBUihlbmNvZGVkKTsKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBl
bmQocnZhbCwgcy0+a2V5X3NlcGFyYXRvcikpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAg
ICAgIGlmIChlbmNvZGVyX2xpc3RlbmNvZGVfb2JqKHMsIHJ2YWwsIHZhbHVlLCBpbmRlbnRfbGV2
ZWwpKQotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICBQeV9DTEVBUihpdGVtKTsKLSAg
ICAgICAgaWR4ICs9IDE7Ci0gICAgfQotICAgIFB5X0NMRUFSKGl0ZXIpOwotICAgIGlmIChQeUVy
cl9PY2N1cnJlZCgpKQotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgaWYgKGlkZW50ICE9IE5VTEwp
IHsKLSAgICAgICAgaWYgKFB5RGljdF9EZWxJdGVtKHMtPm1hcmtlcnMsIGlkZW50KSkKLSAgICAg
ICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgUHlfQ0xFQVIoaWRlbnQpOwotICAgIH0KLSAgICBp
ZiAocy0+aW5kZW50ICE9IFB5X05vbmUpIHsKLSAgICAgICAgLyogVE9ETzogRE9FUyBOT1QgUlVO
ICovCi0gICAgICAgIGluZGVudF9sZXZlbCAtPSAxOwotICAgICAgICAvKgotICAgICAgICAgICAg
eWllbGQgJ1xuJyArIChfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAq
LwotICAgIH0KLSAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBjbG9zZV9kaWN0KSkKLSAgICAg
ICAgZ290byBiYWlsOwotICAgIHJldHVybiAwOwotCi1iYWlsOgotICAgIFB5X1hERUNSRUYoZW5j
b2RlZCk7Ci0gICAgUHlfWERFQ1JFRihpdGVtcyk7Ci0gICAgUHlfWERFQ1JFRihpdGVyKTsKLSAg
ICBQeV9YREVDUkVGKGtzdHIpOwotICAgIFB5X1hERUNSRUYoaWRlbnQpOwotICAgIHJldHVybiAt
MTsKLX0KLQotCi1zdGF0aWMgaW50Ci1lbmNvZGVyX2xpc3RlbmNvZGVfbGlzdChQeUVuY29kZXJP
YmplY3QgKnMsIFB5T2JqZWN0ICpydmFsLCBQeU9iamVjdCAqc2VxLCBQeV9zc2l6ZV90IGluZGVu
dF9sZXZlbCkKLXsKLSAgICAvKiBFbmNvZGUgUHl0aG9uIGxpc3Qgc2VxIHRvIGEgSlNPTiB0ZXJt
LCBydmFsIGlzIGEgUHlMaXN0ICovCi0gICAgc3RhdGljIFB5T2JqZWN0ICpvcGVuX2FycmF5ID0g
TlVMTDsKLSAgICBzdGF0aWMgUHlPYmplY3QgKmNsb3NlX2FycmF5ID0gTlVMTDsKLSAgICBzdGF0
aWMgUHlPYmplY3QgKmVtcHR5X2FycmF5ID0gTlVMTDsKLSAgICBQeU9iamVjdCAqaWRlbnQgPSBO
VUxMOwotICAgIFB5T2JqZWN0ICppdGVyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqb2JqID0gTlVM
TDsKLSAgICBpbnQgaXNfdHJ1ZTsKLSAgICBpbnQgaSA9IDA7Ci0KLSAgICBpZiAob3Blbl9hcnJh
eSA9PSBOVUxMIHx8IGNsb3NlX2FycmF5ID09IE5VTEwgfHwgZW1wdHlfYXJyYXkgPT0gTlVMTCkg
ewotICAgICAgICBvcGVuX2FycmF5ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiWyIpOwot
ICAgICAgICBjbG9zZV9hcnJheSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl0iKTsKLSAg
ICAgICAgZW1wdHlfYXJyYXkgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJbXSIpOwotICAg
ICAgICBpZiAob3Blbl9hcnJheSA9PSBOVUxMIHx8IGNsb3NlX2FycmF5ID09IE5VTEwgfHwgZW1w
dHlfYXJyYXkgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWRl
bnQgPSBOVUxMOwotICAgIGlzX3RydWUgPSBQeU9iamVjdF9Jc1RydWUoc2VxKTsKLSAgICBpZiAo
aXNfdHJ1ZSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGVsc2UgaWYgKGlzX3RydWUg
PT0gMCkKLSAgICAgICAgcmV0dXJuIFB5TGlzdF9BcHBlbmQocnZhbCwgZW1wdHlfYXJyYXkpOwot
Ci0gICAgaWYgKHMtPm1hcmtlcnMgIT0gUHlfTm9uZSkgewotICAgICAgICBpbnQgaGFzX2tleTsK
LSAgICAgICAgaWRlbnQgPSBQeUxvbmdfRnJvbVZvaWRQdHIoc2VxKTsKLSAgICAgICAgaWYgKGlk
ZW50ID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIGhhc19rZXkgPSBQ
eURpY3RfQ29udGFpbnMocy0+bWFya2VycywgaWRlbnQpOwotICAgICAgICBpZiAoaGFzX2tleSkg
ewotICAgICAgICAgICAgaWYgKGhhc19rZXkgIT0gLTEpCi0gICAgICAgICAgICAgICAgUHlFcnJf
U2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQi
KTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoUHlEaWN0
X1NldEl0ZW0ocy0+bWFya2VycywgaWRlbnQsIHNlcSkpIHsKLSAgICAgICAgICAgIGdvdG8gYmFp
bDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGl0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKHNlcSk7
Ci0gICAgaWYgKGl0ZXIgPT0gTlVMTCkKLSAgICAgICAgZ290byBiYWlsOwotCi0gICAgaWYgKFB5
TGlzdF9BcHBlbmQocnZhbCwgb3Blbl9hcnJheSkpCi0gICAgICAgIGdvdG8gYmFpbDsKLSAgICBp
ZiAocy0+aW5kZW50ICE9IFB5X05vbmUpIHsKLSAgICAgICAgLyogVE9ETzogRE9FUyBOT1QgUlVO
ICovCi0gICAgICAgIGluZGVudF9sZXZlbCArPSAxOwotICAgICAgICAvKgotICAgICAgICAgICAg
bmV3bGluZV9pbmRlbnQgPSAnXG4nICsgKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwp
Ci0gICAgICAgICAgICBzZXBhcmF0b3IgPSBfaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVu
dAotICAgICAgICAgICAgYnVmICs9IG5ld2xpbmVfaW5kZW50Ci0gICAgICAgICovCi0gICAgfQot
ICAgIHdoaWxlICgob2JqID0gUHlJdGVyX05leHQoaXRlcikpKSB7Ci0gICAgICAgIGlmIChpKSB7
Ci0gICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBzLT5pdGVtX3NlcGFyYXRvcikp
Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbmNv
ZGVyX2xpc3RlbmNvZGVfb2JqKHMsIHJ2YWwsIG9iaiwgaW5kZW50X2xldmVsKSkKLSAgICAgICAg
ICAgIGdvdG8gYmFpbDsKLSAgICAgICAgaSsrOwotICAgICAgICBQeV9DTEVBUihvYmopOwotICAg
IH0KLSAgICBQeV9DTEVBUihpdGVyKTsKLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAg
ICAgZ290byBiYWlsOwotICAgIGlmIChpZGVudCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeURp
Y3RfRGVsSXRlbShzLT5tYXJrZXJzLCBpZGVudCkpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0g
ICAgICAgIFB5X0NMRUFSKGlkZW50KTsKLSAgICB9Ci0gICAgaWYgKHMtPmluZGVudCAhPSBQeV9O
b25lKSB7Ci0gICAgICAgIC8qIFRPRE86IERPRVMgTk9UIFJVTiAqLwotICAgICAgICBpbmRlbnRf
bGV2ZWwgLT0gMTsKLSAgICAgICAgLyoKLSAgICAgICAgICAgIHlpZWxkICdcbicgKyAoX2luZGVu
dCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkKLSAgICAgICAgKi8KLSAgICB9Ci0gICAgaWYgKFB5
TGlzdF9BcHBlbmQocnZhbCwgY2xvc2VfYXJyYXkpKQotICAgICAgICBnb3RvIGJhaWw7Ci0gICAg
cmV0dXJuIDA7Ci0KLWJhaWw6Ci0gICAgUHlfWERFQ1JFRihvYmopOwotICAgIFB5X1hERUNSRUYo
aXRlcik7Ci0gICAgUHlfWERFQ1JFRihpZGVudCk7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1zdGF0
aWMgdm9pZAotZW5jb2Rlcl9kZWFsbG9jKFB5T2JqZWN0ICpzZWxmKQotewotICAgIC8qIERlYWxs
b2NhdGUgRW5jb2RlciAqLwotICAgIGVuY29kZXJfY2xlYXIoc2VsZik7Ci0gICAgUHlfVFlQRShz
ZWxmKS0+dHBfZnJlZShzZWxmKTsKLX0KLQotc3RhdGljIGludAotZW5jb2Rlcl90cmF2ZXJzZShQ
eU9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCi17Ci0gICAgUHlFbmNv
ZGVyT2JqZWN0ICpzOwotICAgIGFzc2VydChQeUVuY29kZXJfQ2hlY2soc2VsZikpOwotICAgIHMg
PSAoUHlFbmNvZGVyT2JqZWN0ICopc2VsZjsKLSAgICBQeV9WSVNJVChzLT5tYXJrZXJzKTsKLSAg
ICBQeV9WSVNJVChzLT5kZWZhdWx0Zm4pOwotICAgIFB5X1ZJU0lUKHMtPmVuY29kZXIpOwotICAg
IFB5X1ZJU0lUKHMtPmluZGVudCk7Ci0gICAgUHlfVklTSVQocy0+a2V5X3NlcGFyYXRvcik7Ci0g
ICAgUHlfVklTSVQocy0+aXRlbV9zZXBhcmF0b3IpOwotICAgIFB5X1ZJU0lUKHMtPnNvcnRfa2V5
cyk7Ci0gICAgUHlfVklTSVQocy0+c2tpcGtleXMpOwotICAgIFB5X1ZJU0lUKHMtPmtleV9tZW1v
KTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotZW5jb2Rlcl9jbGVhcihQeU9iamVj
dCAqc2VsZikKLXsKLSAgICAvKiBEZWFsbG9jYXRlIEVuY29kZXIgKi8KLSAgICBQeUVuY29kZXJP
YmplY3QgKnM7Ci0gICAgYXNzZXJ0KFB5RW5jb2Rlcl9DaGVjayhzZWxmKSk7Ci0gICAgcyA9IChQ
eUVuY29kZXJPYmplY3QgKilzZWxmOwotICAgIFB5X0NMRUFSKHMtPm1hcmtlcnMpOwotICAgIFB5
X0NMRUFSKHMtPmRlZmF1bHRmbik7Ci0gICAgUHlfQ0xFQVIocy0+ZW5jb2Rlcik7Ci0gICAgUHlf
Q0xFQVIocy0+aW5kZW50KTsKLSAgICBQeV9DTEVBUihzLT5rZXlfc2VwYXJhdG9yKTsKLSAgICBQ
eV9DTEVBUihzLT5pdGVtX3NlcGFyYXRvcik7Ci0gICAgUHlfQ0xFQVIocy0+c29ydF9rZXlzKTsK
LSAgICBQeV9DTEVBUihzLT5za2lwa2V5cyk7Ci0gICAgUHlfQ0xFQVIocy0+a2V5X21lbW8pOwot
ICAgIHJldHVybiAwOwotfQotCi1QeURvY19TVFJWQVIoZW5jb2Rlcl9kb2MsICJfaXRlcmVuY29k
ZShvYmosIF9jdXJyZW50X2luZGVudF9sZXZlbCkgLT4gaXRlcmFibGUiKTsKLQotc3RhdGljCi1Q
eVR5cGVPYmplY3QgUHlFbmNvZGVyVHlwZSA9IHsKLSAgICBQeU9iamVjdF9IRUFEX0lOSVQoTlVM
TCkKLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaW50ZXJuYWwgKi8KLSAgICAic2lt
cGxlanNvbi5fc3BlZWR1cHMuRW5jb2RlciIsICAgICAgIC8qIHRwX25hbWUgKi8KLSAgICBzaXpl
b2YoUHlFbmNvZGVyT2JqZWN0KSwgLyogdHBfYmFzaWNzaXplICovCi0gICAgMCwgICAgICAgICAg
ICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCi0gICAgZW5jb2Rlcl9kZWFsbG9jLCAvKiB0cF9k
ZWFsbG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCi0gICAg
MCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAg
ICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0
cF9jb21wYXJlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KLSAg
ICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCi0gICAgMCwgICAgICAg
ICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCi0gICAgMCwgICAgICAgICAgICAgICAg
ICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBf
aGFzaCAqLwotICAgIGVuY29kZXJfY2FsbCwgICAgICAgICAvKiB0cF9jYWxsICovCi0gICAgMCwg
ICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAg
ICAvKiB0cF9nZXRhdHRybyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRh
dHRybyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAg
ICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyogdHBfZmxhZ3Mg
Ki8KLSAgICBlbmNvZGVyX2RvYywgICAgICAgICAgLyogdHBfZG9jICovCi0gICAgZW5jb2Rlcl90
cmF2ZXJzZSwgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgZW5jb2Rlcl9jbGVhciwgICAgICAg
IC8qIHRwX2NsZWFyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21w
YXJlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICov
Ci0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KLSAgICAwLCAgICAgICAg
ICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAg
LyogdHBfbWV0aG9kcyAqLwotICAgIGVuY29kZXJfbWVtYmVycywgICAgICAvKiB0cF9tZW1iZXJz
ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwotICAgIDAsICAg
ICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAg
IC8qIHRwX2RpY3QgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0
ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwotICAgIDAs
ICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCi0gICAgZW5jb2Rlcl9pbml0
LCAgICAgICAgIC8qIHRwX2luaXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBf
YWxsb2MgKi8KLSAgICBlbmNvZGVyX25ldywgICAgICAgICAgLyogdHBfbmV3ICovCi0gICAgMCwg
ICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KLX07Ci0KLXN0YXRpYyBQeU1ldGhvZERl
ZiBzcGVlZHVwc19tZXRob2RzW10gPSB7Ci0gICAgeyJlbmNvZGVfYmFzZXN0cmluZ19hc2NpaSIs
Ci0gICAgICAgIChQeUNGdW5jdGlvbilweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSwKLSAgICAg
ICAgTUVUSF9PLAotICAgICAgICBweWRvY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaX0sCi0gICAg
eyJzY2Fuc3RyaW5nIiwKLSAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5X3NjYW5zdHJpbmcsCi0gICAg
ICAgIE1FVEhfVkFSQVJHUywKLSAgICAgICAgcHlkb2Nfc2NhbnN0cmluZ30sCi0gICAge05VTEws
IE5VTEwsIDAsIE5VTEx9Ci19OwotCi1QeURvY19TVFJWQVIobW9kdWxlX2RvYywKLSJzaW1wbGVq
c29uIHNwZWVkdXBzXG4iKTsKLQotdm9pZAotaW5pdF9zcGVlZHVwcyh2b2lkKQotewotICAgIFB5
T2JqZWN0ICptLCAqZGVjaW1hbDsKLSAgICBQeVNjYW5uZXJUeXBlLnRwX25ldyA9IFB5VHlwZV9H
ZW5lcmljTmV3OwotICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5U2Nhbm5lclR5cGUpIDwgMCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFB5RW5jb2RlclR5cGUudHBfbmV3ID0gUHlUeXBlX0dlbmVyaWNO
ZXc7Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlFbmNvZGVyVHlwZSkgPCAwKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBkZWNpbWFsID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJkZWNpbWFsIik7
Ci0gICAgaWYgKGRlY2ltYWwgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotICAgIERlY2ltYWxU
eXBlUHRyID0gKFB5VHlwZU9iamVjdCopUHlPYmplY3RfR2V0QXR0clN0cmluZyhkZWNpbWFsLCAi
RGVjaW1hbCIpOwotICAgIFB5X0RFQ1JFRihkZWNpbWFsKTsKLSAgICBpZiAoRGVjaW1hbFR5cGVQ
dHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbSA9IFB5X0luaXRNb2R1bGUzKCJf
c3BlZWR1cHMiLCBzcGVlZHVwc19tZXRob2RzLCBtb2R1bGVfZG9jKTsKLSAgICBQeV9JTkNSRUYo
KFB5T2JqZWN0KikmUHlTY2FubmVyVHlwZSk7Ci0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJt
YWtlX3NjYW5uZXIiLCAoUHlPYmplY3QqKSZQeVNjYW5uZXJUeXBlKTsKLSAgICBQeV9JTkNSRUYo
KFB5T2JqZWN0KikmUHlFbmNvZGVyVHlwZSk7Ci0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJt
YWtlX2VuY29kZXIiLCAoUHlPYmplY3QqKSZQeUVuY29kZXJUeXBlKTsKLX0KSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL2RlY29kZXIucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vZGVj
b2Rlci5weQkocmV2aXNpb24gMTA3MTM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3NpbXBsZWpzb24vZGVjb2Rlci5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0MjEgKzAs
MCBAQAotIiIiSW1wbGVtZW50YXRpb24gb2YgSlNPTkRlY29kZXIKLSIiIgotaW1wb3J0IHJlCi1p
bXBvcnQgc3lzCi1pbXBvcnQgc3RydWN0Ci0KLWZyb20gc2Nhbm5lciBpbXBvcnQgbWFrZV9zY2Fu
bmVyCi1kZWYgX2ltcG9ydF9jX3NjYW5zdHJpbmcoKToKLSAgICB0cnk6Ci0gICAgICAgIGZyb20g
c2ltcGxlanNvbi5fc3BlZWR1cHMgaW1wb3J0IHNjYW5zdHJpbmcKLSAgICAgICAgcmV0dXJuIHNj
YW5zdHJpbmcKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHJldHVybiBOb25lCi1j
X3NjYW5zdHJpbmcgPSBfaW1wb3J0X2Nfc2NhbnN0cmluZygpCi0KLV9fYWxsX18gPSBbJ0pTT05E
ZWNvZGVyJ10KLQotRkxBR1MgPSByZS5WRVJCT1NFIHwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxM
Ci0KLWRlZiBfZmxvYXRjb25zdGFudHMoKToKLSAgICBfQllURVMgPSAnN0ZGODAwMDAwMDAwMDAw
MDdGRjAwMDAwMDAwMDAwMDAnLmRlY29kZSgnaGV4JykKLSAgICAjIFRoZSBzdHJ1Y3QgbW9kdWxl
IGluIFB5dGhvbiAyLjQgd291bGQgZ2V0IGZyZXhwKCkgb3V0IG9mIHJhbmdlIGhlcmUKLSAgICAj
IHdoZW4gYW4gZW5kaWFuIGlzIHNwZWNpZmllZCBpbiB0aGUgZm9ybWF0IHN0cmluZy4gRml4ZWQg
aW4gUHl0aG9uIDIuNSsKLSAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBf
QllURVMgPSBfQllURVNbOjhdWzo6LTFdICsgX0JZVEVTWzg6XVs6Oi0xXQotICAgIG5hbiwgaW5m
ID0gc3RydWN0LnVucGFjaygnZGQnLCBfQllURVMpCi0gICAgcmV0dXJuIG5hbiwgaW5mLCAtaW5m
Ci0KLU5hTiwgUG9zSW5mLCBOZWdJbmYgPSBfZmxvYXRjb25zdGFudHMoKQotCi0KLWNsYXNzIEpT
T05EZWNvZGVFcnJvcihWYWx1ZUVycm9yKToKLSAgICAiIiJTdWJjbGFzcyBvZiBWYWx1ZUVycm9y
IHdpdGggdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIHByb3BlcnRpZXM6Ci0KLSAgICBtc2c6IFRo
ZSB1bmZvcm1hdHRlZCBlcnJvciBtZXNzYWdlCi0gICAgZG9jOiBUaGUgSlNPTiBkb2N1bWVudCBi
ZWluZyBwYXJzZWQKLSAgICBwb3M6IFRoZSBzdGFydCBpbmRleCBvZiBkb2Mgd2hlcmUgcGFyc2lu
ZyBmYWlsZWQKLSAgICBlbmQ6IFRoZSBlbmQgaW5kZXggb2YgZG9jIHdoZXJlIHBhcnNpbmcgZmFp
bGVkIChtYXkgYmUgTm9uZSkKLSAgICBsaW5lbm86IFRoZSBsaW5lIGNvcnJlc3BvbmRpbmcgdG8g
cG9zCi0gICAgY29sbm86IFRoZSBjb2x1bW4gY29ycmVzcG9uZGluZyB0byBwb3MKLSAgICBlbmRs
aW5lbm86IFRoZSBsaW5lIGNvcnJlc3BvbmRpbmcgdG8gZW5kIChtYXkgYmUgTm9uZSkKLSAgICBl
bmRjb2xubzogVGhlIGNvbHVtbiBjb3JyZXNwb25kaW5nIHRvIGVuZCAobWF5IGJlIE5vbmUpCi0K
LSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBkb2MsIHBvcywgZW5kPU5vbmUp
OgotICAgICAgICBWYWx1ZUVycm9yLl9faW5pdF9fKHNlbGYsIGVycm1zZyhtc2csIGRvYywgcG9z
LCBlbmQ9ZW5kKSkKLSAgICAgICAgc2VsZi5tc2cgPSBtc2cKLSAgICAgICAgc2VsZi5kb2MgPSBk
b2MKLSAgICAgICAgc2VsZi5wb3MgPSBwb3MKLSAgICAgICAgc2VsZi5lbmQgPSBlbmQKLSAgICAg
ICAgc2VsZi5saW5lbm8sIHNlbGYuY29sbm8gPSBsaW5lY29sKGRvYywgcG9zKQotICAgICAgICBp
ZiBlbmQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmVuZGxpbmVubywgc2VsZi5lbmRj
b2xubyA9IGxpbmVjb2woZG9jLCBlbmQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxm
LmVuZGxpbmVubywgc2VsZi5lbmRjb2xubyA9IE5vbmUsIE5vbmUKLQotCi1kZWYgbGluZWNvbChk
b2MsIHBvcyk6Ci0gICAgbGluZW5vID0gZG9jLmNvdW50KCdcbicsIDAsIHBvcykgKyAxCi0gICAg
aWYgbGluZW5vID09IDE6Ci0gICAgICAgIGNvbG5vID0gcG9zCi0gICAgZWxzZToKLSAgICAgICAg
Y29sbm8gPSBwb3MgLSBkb2MucmluZGV4KCdcbicsIDAsIHBvcykKLSAgICByZXR1cm4gbGluZW5v
LCBjb2xubwotCi0KLWRlZiBlcnJtc2cobXNnLCBkb2MsIHBvcywgZW5kPU5vbmUpOgotICAgICMg
Tm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gX3NwZWVkdXBzCi0gICAgbGlu
ZW5vLCBjb2xubyA9IGxpbmVjb2woZG9jLCBwb3MpCi0gICAgaWYgZW5kIGlzIE5vbmU6Ci0gICAg
ICAgICNmbXQgPSAnezB9OiBsaW5lIHsxfSBjb2x1bW4gezJ9IChjaGFyIHszfSknCi0gICAgICAg
ICNyZXR1cm4gZm10LmZvcm1hdChtc2csIGxpbmVubywgY29sbm8sIHBvcykKLSAgICAgICAgZm10
ID0gJyVzOiBsaW5lICVkIGNvbHVtbiAlZCAoY2hhciAlZCknCi0gICAgICAgIHJldHVybiBmbXQg
JSAobXNnLCBsaW5lbm8sIGNvbG5vLCBwb3MpCi0gICAgZW5kbGluZW5vLCBlbmRjb2xubyA9IGxp
bmVjb2woZG9jLCBlbmQpCi0gICAgI2ZtdCA9ICd7MH06IGxpbmUgezF9IGNvbHVtbiB7Mn0gLSBs
aW5lIHszfSBjb2x1bW4gezR9IChjaGFyIHs1fSAtIHs2fSknCi0gICAgI3JldHVybiBmbXQuZm9y
bWF0KG1zZywgbGluZW5vLCBjb2xubywgZW5kbGluZW5vLCBlbmRjb2xubywgcG9zLCBlbmQpCi0g
ICAgZm10ID0gJyVzOiBsaW5lICVkIGNvbHVtbiAlZCAtIGxpbmUgJWQgY29sdW1uICVkIChjaGFy
ICVkIC0gJWQpJwotICAgIHJldHVybiBmbXQgJSAobXNnLCBsaW5lbm8sIGNvbG5vLCBlbmRsaW5l
bm8sIGVuZGNvbG5vLCBwb3MsIGVuZCkKLQotCi1fQ09OU1RBTlRTID0gewotICAgICctSW5maW5p
dHknOiBOZWdJbmYsCi0gICAgJ0luZmluaXR5JzogUG9zSW5mLAotICAgICdOYU4nOiBOYU4sCi19
Ci0KLVNUUklOR0NIVU5LID0gcmUuY29tcGlsZShyJyguKj8pKFsiXFxceDAwLVx4MWZdKScsIEZM
QUdTKQotQkFDS1NMQVNIID0gewotICAgICciJzogdSciJywgJ1xcJzogdSdcXCcsICcvJzogdScv
JywKLSAgICAnYic6IHUnXGInLCAnZic6IHUnXGYnLCAnbic6IHUnXG4nLCAncic6IHUnXHInLCAn
dCc6IHUnXHQnLAotfQotCi1ERUZBVUxUX0VOQ09ESU5HID0gInV0Zi04IgotCi1kZWYgcHlfc2Nh
bnN0cmluZyhzLCBlbmQsIGVuY29kaW5nPU5vbmUsIHN0cmljdD1UcnVlLAotICAgICAgICBfYj1C
QUNLU0xBU0gsIF9tPVNUUklOR0NIVU5LLm1hdGNoKToKLSAgICAiIiJTY2FuIHRoZSBzdHJpbmcg
cyBmb3IgYSBKU09OIHN0cmluZy4gRW5kIGlzIHRoZSBpbmRleCBvZiB0aGUKLSAgICBjaGFyYWN0
ZXIgaW4gcyBhZnRlciB0aGUgcXVvdGUgdGhhdCBzdGFydGVkIHRoZSBKU09OIHN0cmluZy4KLSAg
ICBVbmVzY2FwZXMgYWxsIHZhbGlkIEpTT04gc3RyaW5nIGVzY2FwZSBzZXF1ZW5jZXMgYW5kIHJh
aXNlcyBWYWx1ZUVycm9yCi0gICAgb24gYXR0ZW1wdCB0byBkZWNvZGUgYW4gaW52YWxpZCBzdHJp
bmcuIElmIHN0cmljdCBpcyBGYWxzZSB0aGVuIGxpdGVyYWwKLSAgICBjb250cm9sIGNoYXJhY3Rl
cnMgYXJlIGFsbG93ZWQgaW4gdGhlIHN0cmluZy4KLQotICAgIFJldHVybnMgYSB0dXBsZSBvZiB0
aGUgZGVjb2RlZCBzdHJpbmcgYW5kIHRoZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIGluIHMKLSAg
ICBhZnRlciB0aGUgZW5kIHF1b3RlLiIiIgotICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6Ci0gICAg
ICAgIGVuY29kaW5nID0gREVGQVVMVF9FTkNPRElORwotICAgIGNodW5rcyA9IFtdCi0gICAgX2Fw
cGVuZCA9IGNodW5rcy5hcHBlbmQKLSAgICBiZWdpbiA9IGVuZCAtIDEKLSAgICB3aGlsZSAxOgot
ICAgICAgICBjaHVuayA9IF9tKHMsIGVuZCkKLSAgICAgICAgaWYgY2h1bmsgaXMgTm9uZToKLSAg
ICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcigKLSAgICAgICAgICAgICAgICAiVW50ZXJt
aW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCIsIHMsIGJlZ2luKQotICAgICAgICBlbmQgPSBjaHVu
ay5lbmQoKQotICAgICAgICBjb250ZW50LCB0ZXJtaW5hdG9yID0gY2h1bmsuZ3JvdXBzKCkKLSAg
ICAgICAgIyBDb250ZW50IGlzIGNvbnRhaW5zIHplcm8gb3IgbW9yZSB1bmVzY2FwZWQgc3RyaW5n
IGNoYXJhY3RlcnMKLSAgICAgICAgaWYgY29udGVudDoKLSAgICAgICAgICAgIGlmIG5vdCBpc2lu
c3RhbmNlKGNvbnRlbnQsIHVuaWNvZGUpOgotICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB1bmlj
b2RlKGNvbnRlbnQsIGVuY29kaW5nKQotICAgICAgICAgICAgX2FwcGVuZChjb250ZW50KQotICAg
ICAgICAjIFRlcm1pbmF0b3IgaXMgdGhlIGVuZCBvZiBzdHJpbmcsIGEgbGl0ZXJhbCBjb250cm9s
IGNoYXJhY3RlciwKLSAgICAgICAgIyBvciBhIGJhY2tzbGFzaCBkZW5vdGluZyB0aGF0IGFuIGVz
Y2FwZSBzZXF1ZW5jZSBmb2xsb3dzCi0gICAgICAgIGlmIHRlcm1pbmF0b3IgPT0gJyInOgotICAg
ICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxpZiB0ZXJtaW5hdG9yICE9ICdcXCc6Ci0gICAgICAg
ICAgICBpZiBzdHJpY3Q6Ci0gICAgICAgICAgICAgICAgbXNnID0gIkludmFsaWQgY29udHJvbCBj
aGFyYWN0ZXIgJXIgYXQiICUgKHRlcm1pbmF0b3IsKQotICAgICAgICAgICAgICAgICNtc2cgPSAi
SW52YWxpZCBjb250cm9sIGNoYXJhY3RlciB7MCFyfSBhdCIuZm9ybWF0KHRlcm1pbmF0b3IpCi0g
ICAgICAgICAgICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKG1zZywgcywgZW5kKQotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBfYXBwZW5kKHRlcm1pbmF0b3IpCi0gICAgICAg
ICAgICAgICAgY29udGludWUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXNjID0gc1tlbmRd
Ci0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcmFpc2UgSlNPTkRlY29k
ZUVycm9yKAotICAgICAgICAgICAgICAgICJVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0
IiwgcywgYmVnaW4pCi0gICAgICAgICMgSWYgbm90IGEgdW5pY29kZSBlc2NhcGUgc2VxdWVuY2Us
IG11c3QgYmUgaW4gdGhlIGxvb2t1cCB0YWJsZQotICAgICAgICBpZiBlc2MgIT0gJ3UnOgotICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNoYXIgPSBfYltlc2NdCi0gICAgICAgICAg
ICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgbXNnID0gIkludmFsaWQgXFxlc2Nh
cGU6ICIgKyByZXByKGVzYykKLSAgICAgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3Io
bXNnLCBzLCBlbmQpCi0gICAgICAgICAgICBlbmQgKz0gMQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgIyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZQotICAgICAgICAgICAgZXNjID0gc1tlbmQg
KyAxOmVuZCArIDVdCi0gICAgICAgICAgICBuZXh0X2VuZCA9IGVuZCArIDUKLSAgICAgICAgICAg
IGlmIGxlbihlc2MpICE9IDQ6Ci0gICAgICAgICAgICAgICAgbXNnID0gIkludmFsaWQgXFx1WFhY
WCBlc2NhcGUiCi0gICAgICAgICAgICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKG1zZywgcywg
ZW5kKQotICAgICAgICAgICAgdW5pID0gaW50KGVzYywgMTYpCi0gICAgICAgICAgICAjIENoZWNr
IGZvciBzdXJyb2dhdGUgcGFpciBvbiBVQ1MtNCBzeXN0ZW1zCi0gICAgICAgICAgICBpZiAweGQ4
MDAgPD0gdW5pIDw9IDB4ZGJmZiBhbmQgc3lzLm1heHVuaWNvZGUgPiA2NTUzNToKLSAgICAgICAg
ICAgICAgICBtc2cgPSAiSW52YWxpZCBcXHVYWFhYXFx1WFhYWCBzdXJyb2dhdGUgcGFpciIKLSAg
ICAgICAgICAgICAgICBpZiBub3Qgc1tlbmQgKyA1OmVuZCArIDddID09ICdcXHUnOgotICAgICAg
ICAgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IobXNnLCBzLCBlbmQpCi0gICAgICAg
ICAgICAgICAgZXNjMiA9IHNbZW5kICsgNzplbmQgKyAxMV0KLSAgICAgICAgICAgICAgICBpZiBs
ZW4oZXNjMikgIT0gNDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9y
KG1zZywgcywgZW5kKQotICAgICAgICAgICAgICAgIHVuaTIgPSBpbnQoZXNjMiwgMTYpCi0gICAg
ICAgICAgICAgICAgdW5pID0gMHgxMDAwMCArICgoKHVuaSAtIDB4ZDgwMCkgPDwgMTApIHwgKHVu
aTIgLSAweGRjMDApKQotICAgICAgICAgICAgICAgIG5leHRfZW5kICs9IDYKLSAgICAgICAgICAg
IGNoYXIgPSB1bmljaHIodW5pKQotICAgICAgICAgICAgZW5kID0gbmV4dF9lbmQKLSAgICAgICAg
IyBBcHBlbmQgdGhlIHVuZXNjYXBlZCBjaGFyYWN0ZXIKLSAgICAgICAgX2FwcGVuZChjaGFyKQot
ICAgIHJldHVybiB1Jycuam9pbihjaHVua3MpLCBlbmQKLQotCi0jIFVzZSBzcGVlZHVwIGlmIGF2
YWlsYWJsZQotc2NhbnN0cmluZyA9IGNfc2NhbnN0cmluZyBvciBweV9zY2Fuc3RyaW5nCi0KLVdI
SVRFU1BBQ0UgPSByZS5jb21waWxlKHInWyBcdFxuXHJdKicsIEZMQUdTKQotV0hJVEVTUEFDRV9T
VFIgPSAnIFx0XG5ccicKLQotZGVmIEpTT05PYmplY3QoKHMsIGVuZCksIGVuY29kaW5nLCBzdHJp
Y3QsIHNjYW5fb25jZSwgb2JqZWN0X2hvb2ssCi0gICAgICAgIG9iamVjdF9wYWlyc19ob29rLCBt
ZW1vPU5vbmUsCi0gICAgICAgIF93PVdISVRFU1BBQ0UubWF0Y2gsIF93cz1XSElURVNQQUNFX1NU
Uik6Ci0gICAgIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotICAgIGlmIG1lbW8gaXMgTm9uZToK
LSAgICAgICAgbWVtbyA9IHt9Ci0gICAgbWVtb19nZXQgPSBtZW1vLnNldGRlZmF1bHQKLSAgICBw
YWlycyA9IFtdCi0gICAgIyBVc2UgYSBzbGljZSB0byBwcmV2ZW50IEluZGV4RXJyb3IgZnJvbSBi
ZWluZyByYWlzZWQsIHRoZSBmb2xsb3dpbmcKLSAgICAjIGNoZWNrIHdpbGwgcmFpc2UgYSBtb3Jl
IHNwZWNpZmljIFZhbHVlRXJyb3IgaWYgdGhlIHN0cmluZyBpcyBlbXB0eQotICAgIG5leHRjaGFy
ID0gc1tlbmQ6ZW5kICsgMV0KLSAgICAjIE5vcm1hbGx5IHdlIGV4cGVjdCBuZXh0Y2hhciA9PSAn
IicKLSAgICBpZiBuZXh0Y2hhciAhPSAnIic6Ci0gICAgICAgIGlmIG5leHRjaGFyIGluIF93czoK
LSAgICAgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKLSAgICAgICAgICAgIG5leHRjaGFy
ID0gc1tlbmQ6ZW5kICsgMV0KLSAgICAgICAgIyBUcml2aWFsIGVtcHR5IG9iamVjdAotICAgICAg
ICBpZiBuZXh0Y2hhciA9PSAnfSc6Ci0gICAgICAgICAgICBpZiBvYmplY3RfcGFpcnNfaG9vayBp
cyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmplY3RfcGFpcnNfaG9vayhw
YWlycykKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LCBlbmQgKyAxCi0gICAgICAgICAg
ICBwYWlycyA9IHt9Ci0gICAgICAgICAgICBpZiBvYmplY3RfaG9vayBpcyBub3QgTm9uZToKLSAg
ICAgICAgICAgICAgICBwYWlycyA9IG9iamVjdF9ob29rKHBhaXJzKQotICAgICAgICAgICAgcmV0
dXJuIHBhaXJzLCBlbmQgKyAxCi0gICAgICAgIGVsaWYgbmV4dGNoYXIgIT0gJyInOgotICAgICAg
ICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSIsIHMs
IGVuZCkKLSAgICBlbmQgKz0gMQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIGtleSwgZW5kID0g
c2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5nLCBzdHJpY3QpCi0gICAgICAgIGtleSA9IG1lbW9f
Z2V0KGtleSwga2V5KQotCi0gICAgICAgICMgVG8gc2tpcCBzb21lIGZ1bmN0aW9uIGNhbGwgb3Zl
cmhlYWQgd2Ugb3B0aW1pemUgdGhlIGZhc3QgcGF0aHMgd2hlcmUKLSAgICAgICAgIyB0aGUgSlNP
TiBrZXkgc2VwYXJhdG9yIGlzICI6ICIgb3IganVzdCAiOiIuCi0gICAgICAgIGlmIHNbZW5kOmVu
ZCArIDFdICE9ICc6JzoKLSAgICAgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKLSAgICAg
ICAgICAgIGlmIHNbZW5kOmVuZCArIDFdICE9ICc6JzoKLSAgICAgICAgICAgICAgICByYWlzZSBK
U09ORGVjb2RlRXJyb3IoIkV4cGVjdGluZyA6IGRlbGltaXRlciIsIHMsIGVuZCkKLQotICAgICAg
ICBlbmQgKz0gMQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIHNbZW5kXSBpbiBfd3M6
Ci0gICAgICAgICAgICAgICAgZW5kICs9IDEKLSAgICAgICAgICAgICAgICBpZiBzW2VuZF0gaW4g
X3dzOgotICAgICAgICAgICAgICAgICAgICBlbmQgPSBfdyhzLCBlbmQgKyAxKS5lbmQoKQotICAg
ICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICB2YWx1ZSwgZW5kID0gc2Nhbl9vbmNlKHMsIGVuZCkKLSAgICAgICAgZXhj
ZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoIkV4
cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpCi0gICAgICAgIHBhaXJzLmFwcGVuZCgoa2V5LCB2YWx1
ZSkpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KLSAgICAg
ICAgICAgIGlmIG5leHRjaGFyIGluIF93czoKLSAgICAgICAgICAgICAgICBlbmQgPSBfdyhzLCBl
bmQgKyAxKS5lbmQoKQotICAgICAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmRdCi0gICAgICAg
IGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgbmV4dGNoYXIgPSAnJwotICAgICAgICBl
bmQgKz0gMQotCi0gICAgICAgIGlmIG5leHRjaGFyID09ICd9JzoKLSAgICAgICAgICAgIGJyZWFr
Ci0gICAgICAgIGVsaWYgbmV4dGNoYXIgIT0gJywnOgotICAgICAgICAgICAgcmFpc2UgSlNPTkRl
Y29kZUVycm9yKCJFeHBlY3RpbmcgLCBkZWxpbWl0ZXIiLCBzLCBlbmQgLSAxKQotCi0gICAgICAg
IHRyeToKLSAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmRdCi0gICAgICAgICAgICBpZiBuZXh0
Y2hhciBpbiBfd3M6Ci0gICAgICAgICAgICAgICAgZW5kICs9IDEKLSAgICAgICAgICAgICAgICBu
ZXh0Y2hhciA9IHNbZW5kXQotICAgICAgICAgICAgICAgIGlmIG5leHRjaGFyIGluIF93czoKLSAg
ICAgICAgICAgICAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKLSAgICAgICAgICAg
ICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0g
ICAgICAgICAgICBuZXh0Y2hhciA9ICcnCi0KLSAgICAgICAgZW5kICs9IDEKLSAgICAgICAgaWYg
bmV4dGNoYXIgIT0gJyInOgotICAgICAgICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKCJFeHBl
Y3RpbmcgcHJvcGVydHkgbmFtZSIsIHMsIGVuZCAtIDEpCi0KLSAgICBpZiBvYmplY3RfcGFpcnNf
aG9vayBpcyBub3QgTm9uZToKLSAgICAgICAgcmVzdWx0ID0gb2JqZWN0X3BhaXJzX2hvb2socGFp
cnMpCi0gICAgICAgIHJldHVybiByZXN1bHQsIGVuZAotICAgIHBhaXJzID0gZGljdChwYWlycykK
LSAgICBpZiBvYmplY3RfaG9vayBpcyBub3QgTm9uZToKLSAgICAgICAgcGFpcnMgPSBvYmplY3Rf
aG9vayhwYWlycykKLSAgICByZXR1cm4gcGFpcnMsIGVuZAotCi1kZWYgSlNPTkFycmF5KChzLCBl
bmQpLCBzY2FuX29uY2UsIF93PVdISVRFU1BBQ0UubWF0Y2gsIF93cz1XSElURVNQQUNFX1NUUik6
Ci0gICAgdmFsdWVzID0gW10KLSAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCi0gICAgaWYg
bmV4dGNoYXIgaW4gX3dzOgotICAgICAgICBlbmQgPSBfdyhzLCBlbmQgKyAxKS5lbmQoKQotICAg
ICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCi0gICAgIyBMb29rLWFoZWFkIGZvciB0cml2
aWFsIGVtcHR5IGFycmF5Ci0gICAgaWYgbmV4dGNoYXIgPT0gJ10nOgotICAgICAgICByZXR1cm4g
dmFsdWVzLCBlbmQgKyAxCi0gICAgX2FwcGVuZCA9IHZhbHVlcy5hcHBlbmQKLSAgICB3aGlsZSBU
cnVlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2YWx1ZSwgZW5kID0gc2Nhbl9vbmNlKHMs
IGVuZCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBK
U09ORGVjb2RlRXJyb3IoIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpCi0gICAgICAgIF9hcHBl
bmQodmFsdWUpCi0gICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KLSAgICAgICAgaWYg
bmV4dGNoYXIgaW4gX3dzOgotICAgICAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkK
LSAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KLSAgICAgICAgZW5kICs9IDEK
LSAgICAgICAgaWYgbmV4dGNoYXIgPT0gJ10nOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAg
ZWxpZiBuZXh0Y2hhciAhPSAnLCc6Ci0gICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3Io
IkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHMsIGVuZCkKLQotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBpZiBzW2VuZF0gaW4gX3dzOgotICAgICAgICAgICAgICAgIGVuZCArPSAxCi0gICAgICAg
ICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKLSAgICAgICAgICAgICAgICAgICAgZW5kID0gX3co
cywgZW5kICsgMSkuZW5kKCkKLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAg
ICBwYXNzCi0KLSAgICByZXR1cm4gdmFsdWVzLCBlbmQKLQotY2xhc3MgSlNPTkRlY29kZXIob2Jq
ZWN0KToKLSAgICAiIiJTaW1wbGUgSlNPTiA8aHR0cDovL2pzb24ub3JnPiBkZWNvZGVyCi0KLSAg
ICBQZXJmb3JtcyB0aGUgZm9sbG93aW5nIHRyYW5zbGF0aW9ucyBpbiBkZWNvZGluZyBieSBkZWZh
dWx0OgotCi0gICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgIHwg
SlNPTiAgICAgICAgICB8IFB5dGhvbiAgICAgICAgICAgIHwKLSAgICArPT09PT09PT09PT09PT09
Kz09PT09PT09PT09PT09PT09PT0rCi0gICAgfCBvYmplY3QgICAgICAgIHwgZGljdCAgICAgICAg
ICAgICAgfAotICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICB8
IGFycmF5ICAgICAgICAgfCBsaXN0ICAgICAgICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0t
LSstLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgIHwgc3RyaW5nICAgICAgICB8IHVuaWNvZGUgICAg
ICAgICAgIHwKLSAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAg
fCBudW1iZXIgKGludCkgIHwgaW50LCBsb25nICAgICAgICAgfAotICAgICstLS0tLS0tLS0tLS0t
LS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICB8IG51bWJlciAocmVhbCkgfCBmbG9hdCAgICAg
ICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKwotICAg
IHwgdHJ1ZSAgICAgICAgICB8IFRydWUgICAgICAgICAgICAgIHwKLSAgICArLS0tLS0tLS0tLS0t
LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgfCBmYWxzZSAgICAgICAgIHwgRmFsc2UgICAg
ICAgICAgICAgfAotICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAg
ICB8IG51bGwgICAgICAgICAgfCBOb25lICAgICAgICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0t
LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKwotCi0gICAgSXQgYWxzbyB1bmRlcnN0YW5kcyBgYE5h
TmBgLCBgYEluZmluaXR5YGAsIGFuZCBgYC1JbmZpbml0eWBgIGFzCi0gICAgdGhlaXIgY29ycmVz
cG9uZGluZyBgYGZsb2F0YGAgdmFsdWVzLCB3aGljaCBpcyBvdXRzaWRlIHRoZSBKU09OIHNwZWMu
Ci0KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbmNvZGluZz1Ob25lLCBvYmpl
Y3RfaG9vaz1Ob25lLCBwYXJzZV9mbG9hdD1Ob25lLAotICAgICAgICAgICAgcGFyc2VfaW50PU5v
bmUsIHBhcnNlX2NvbnN0YW50PU5vbmUsIHN0cmljdD1UcnVlLAotICAgICAgICAgICAgb2JqZWN0
X3BhaXJzX2hvb2s9Tm9uZSk6Ci0gICAgICAgICIiIgotICAgICAgICAqZW5jb2RpbmcqIGRldGVy
bWluZXMgdGhlIGVuY29kaW5nIHVzZWQgdG8gaW50ZXJwcmV0IGFueQotICAgICAgICA6Y2xhc3M6
YHN0cmAgb2JqZWN0cyBkZWNvZGVkIGJ5IHRoaXMgaW5zdGFuY2UgKGBgJ3V0Zi04J2BgIGJ5Ci0g
ICAgICAgIGRlZmF1bHQpLiAgSXQgaGFzIG5vIGVmZmVjdCB3aGVuIGRlY29kaW5nIDpjbGFzczpg
dW5pY29kZWAgb2JqZWN0cy4KLQotICAgICAgICBOb3RlIHRoYXQgY3VycmVudGx5IG9ubHkgZW5j
b2RpbmdzIHRoYXQgYXJlIGEgc3VwZXJzZXQgb2YgQVNDSUkgd29yaywKLSAgICAgICAgc3RyaW5n
cyBvZiBvdGhlciBlbmNvZGluZ3Mgc2hvdWxkIGJlIHBhc3NlZCBpbiBhcyA6Y2xhc3M6YHVuaWNv
ZGVgLgotCi0gICAgICAgICpvYmplY3RfaG9vayosIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxs
ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIGV2ZXJ5Ci0gICAgICAgIEpTT04gb2JqZWN0IGRlY29kZWQg
YW5kIGl0cyByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZQotICAgICAg
ICBnaXZlbiA6Y2xhc3M6YGRpY3RgLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGN1c3Rv
bQotICAgICAgICBkZXNlcmlhbGl6YXRpb25zIChlLmcuIHRvIHN1cHBvcnQgSlNPTi1SUEMgY2xh
c3MgaGludGluZykuCi0KLSAgICAgICAgKm9iamVjdF9wYWlyc19ob29rKiBpcyBhbiBvcHRpb25h
bCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGgKLSAgICAgICAgdGhlIHJlc3VsdCBv
ZiBhbnkgb2JqZWN0IGxpdGVyYWwgZGVjb2RlIHdpdGggYW4gb3JkZXJlZCBsaXN0IG9mIHBhaXJz
LgotICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIG9mICpvYmplY3RfcGFpcnNfaG9vayogd2lsbCBi
ZSB1c2VkIGluc3RlYWQgb2YgdGhlCi0gICAgICAgIDpjbGFzczpgZGljdGAuICBUaGlzIGZlYXR1
cmUgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycwotICAgICAgICB0aGF0
IHJlbHkgb24gdGhlIG9yZGVyIHRoYXQgdGhlIGtleSBhbmQgdmFsdWUgcGFpcnMgYXJlIGRlY29k
ZWQgKGZvcgotICAgICAgICBleGFtcGxlLCA6ZnVuYzpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3Rg
IHdpbGwgcmVtZW1iZXIgdGhlIG9yZGVyIG9mCi0gICAgICAgIGluc2VydGlvbikuIElmICpvYmpl
Y3RfaG9vayogaXMgYWxzbyBkZWZpbmVkLCB0aGUgKm9iamVjdF9wYWlyc19ob29rKgotICAgICAg
ICB0YWtlcyBwcmlvcml0eS4KLQotICAgICAgICAqcGFyc2VfZmxvYXQqLCBpZiBzcGVjaWZpZWQs
IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHN0cmluZyBvZiBldmVyeQotICAgICAgICBKU09OIGZs
b2F0IHRvIGJlIGRlY29kZWQuICBCeSBkZWZhdWx0LCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KLSAg
ICAgICAgYGBmbG9hdChudW1fc3RyKWBgLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHVzZSBhbm90aGVy
IGRhdGF0eXBlIG9yIHBhcnNlcgotICAgICAgICBmb3IgSlNPTiBmbG9hdHMgKGUuZy4gOmNsYXNz
OmBkZWNpbWFsLkRlY2ltYWxgKS4KLQotICAgICAgICAqcGFyc2VfaW50KiwgaWYgc3BlY2lmaWVk
LCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBzdHJpbmcgb2YgZXZlcnkKLSAgICAgICAgSlNPTiBp
bnQgdG8gYmUgZGVjb2RlZC4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgZXF1aXZhbGVudCB0bwotICAg
ICAgICBgYGludChudW1fc3RyKWBgLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB1c2UgYW5vdGhlciBk
YXRhdHlwZSBvciBwYXJzZXIKLSAgICAgICAgZm9yIEpTT04gaW50ZWdlcnMgKGUuZy4gOmNsYXNz
OmBmbG9hdGApLgotCi0gICAgICAgICpwYXJzZV9jb25zdGFudCosIGlmIHNwZWNpZmllZCwgd2ls
bCBiZSBjYWxsZWQgd2l0aCBvbmUgb2YgdGhlCi0gICAgICAgIGZvbGxvd2luZyBzdHJpbmdzOiBg
YCctSW5maW5pdHknYGAsIGBgJ0luZmluaXR5J2BgLCBgYCdOYU4nYGAuICBUaGlzCi0gICAgICAg
IGNhbiBiZSB1c2VkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpbnZhbGlkIEpTT04gbnVtYmVy
cyBhcmUKLSAgICAgICAgZW5jb3VudGVyZWQuCi0KLSAgICAgICAgKnN0cmljdCogY29udHJvbHMg
dGhlIHBhcnNlcidzIGJlaGF2aW9yIHdoZW4gaXQgZW5jb3VudGVycyBhbgotICAgICAgICBpbnZh
bGlkIGNvbnRyb2wgY2hhcmFjdGVyIGluIGEgc3RyaW5nLiBUaGUgZGVmYXVsdCBzZXR0aW5nIG9m
Ci0gICAgICAgIGBgVHJ1ZWBgIG1lYW5zIHRoYXQgdW5lc2NhcGVkIGNvbnRyb2wgY2hhcmFjdGVy
cyBhcmUgcGFyc2UgZXJyb3JzLCBpZgotICAgICAgICBgYEZhbHNlYGAgdGhlbiBjb250cm9sIGNo
YXJhY3RlcnMgd2lsbCBiZSBhbGxvd2VkIGluIHN0cmluZ3MuCi0KLSAgICAgICAgIiIiCi0gICAg
ICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZwotICAgICAgICBzZWxmLm9iamVjdF9ob29rID0g
b2JqZWN0X2hvb2sKLSAgICAgICAgc2VsZi5vYmplY3RfcGFpcnNfaG9vayA9IG9iamVjdF9wYWly
c19ob29rCi0gICAgICAgIHNlbGYucGFyc2VfZmxvYXQgPSBwYXJzZV9mbG9hdCBvciBmbG9hdAot
ICAgICAgICBzZWxmLnBhcnNlX2ludCA9IHBhcnNlX2ludCBvciBpbnQKLSAgICAgICAgc2VsZi5w
YXJzZV9jb25zdGFudCA9IHBhcnNlX2NvbnN0YW50IG9yIF9DT05TVEFOVFMuX19nZXRpdGVtX18K
LSAgICAgICAgc2VsZi5zdHJpY3QgPSBzdHJpY3QKLSAgICAgICAgc2VsZi5wYXJzZV9vYmplY3Qg
PSBKU09OT2JqZWN0Ci0gICAgICAgIHNlbGYucGFyc2VfYXJyYXkgPSBKU09OQXJyYXkKLSAgICAg
ICAgc2VsZi5wYXJzZV9zdHJpbmcgPSBzY2Fuc3RyaW5nCi0gICAgICAgIHNlbGYubWVtbyA9IHt9
Ci0gICAgICAgIHNlbGYuc2Nhbl9vbmNlID0gbWFrZV9zY2FubmVyKHNlbGYpCi0KLSAgICBkZWYg
ZGVjb2RlKHNlbGYsIHMsIF93PVdISVRFU1BBQ0UubWF0Y2gpOgotICAgICAgICAiIiJSZXR1cm4g
dGhlIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29k
ZWBgCi0gICAgICAgIGluc3RhbmNlIGNvbnRhaW5pbmcgYSBKU09OIGRvY3VtZW50KQotCi0gICAg
ICAgICIiIgotICAgICAgICBvYmosIGVuZCA9IHNlbGYucmF3X2RlY29kZShzLCBpZHg9X3cocywg
MCkuZW5kKCkpCi0gICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKLSAgICAgICAgaWYgZW5k
ICE9IGxlbihzKToKLSAgICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcigiRXh0cmEgZGF0
YSIsIHMsIGVuZCwgbGVuKHMpKQotICAgICAgICByZXR1cm4gb2JqCi0KLSAgICBkZWYgcmF3X2Rl
Y29kZShzZWxmLCBzLCBpZHg9MCk6Ci0gICAgICAgICIiIkRlY29kZSBhIEpTT04gZG9jdW1lbnQg
ZnJvbSBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29kZWBgCi0gICAgICAgIGJlZ2lubmluZyB3
aXRoIGEgSlNPTiBkb2N1bWVudCkgYW5kIHJldHVybiBhIDItdHVwbGUgb2YgdGhlIFB5dGhvbgot
ICAgICAgICByZXByZXNlbnRhdGlvbiBhbmQgdGhlIGluZGV4IGluIGBgc2BgIHdoZXJlIHRoZSBk
b2N1bWVudCBlbmRlZC4KLQotICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGRlY29kZSBhIEpT
T04gZG9jdW1lbnQgZnJvbSBhIHN0cmluZyB0aGF0IG1heQotICAgICAgICBoYXZlIGV4dHJhbmVv
dXMgZGF0YSBhdCB0aGUgZW5kLgotCi0gICAgICAgICIiIgotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBvYmosIGVuZCA9IHNlbGYuc2Nhbl9vbmNlKHMsIGlkeCkKLSAgICAgICAgZXhjZXB0IFN0
b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoIk5vIEpTT04g
b2JqZWN0IGNvdWxkIGJlIGRlY29kZWQiLCBzLCBpZHgpCi0gICAgICAgIHJldHVybiBvYmosIGVu
ZApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24vZW5j
b2Rlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
c2ltcGxlanNvbi9lbmNvZGVyLnB5CShyZXZpc2lvbiAxMDcxMzUpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9lbmNvZGVyLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUwMyArMCwwIEBACi0iIiJJbXBsZW1lbnRhdGlvbiBvZiBKU09ORW5jb2RlcgotIiIi
Ci1pbXBvcnQgcmUKLWZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAotCi1kZWYgX2ltcG9ydF9z
cGVlZHVwcygpOgotICAgIHRyeToKLSAgICAgICAgZnJvbSBzaW1wbGVqc29uIGltcG9ydCBfc3Bl
ZWR1cHMKLSAgICAgICAgcmV0dXJuIF9zcGVlZHVwcy5lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSwg
X3NwZWVkdXBzLm1ha2VfZW5jb2RlcgotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAg
cmV0dXJuIE5vbmUsIE5vbmUKLWNfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWksIGNfbWFrZV9lbmNv
ZGVyID0gX2ltcG9ydF9zcGVlZHVwcygpCi0KLWZyb20gZGVjb2RlciBpbXBvcnQgUG9zSW5mCi0K
LUVTQ0FQRSA9IHJlLmNvbXBpbGUocidbXHgwMC1ceDFmXFwiXGJcZlxuXHJcdF0nKQotRVNDQVBF
X0FTQ0lJID0gcmUuY29tcGlsZShyJyhbXFwiXXxbXlwgLX5dKScpCi1IQVNfVVRGOCA9IHJlLmNv
bXBpbGUocidbXHg4MC1ceGZmXScpCi1FU0NBUEVfRENUID0gewotICAgICdcXCc6ICdcXFxcJywK
LSAgICAnIic6ICdcXCInLAotICAgICdcYic6ICdcXGInLAotICAgICdcZic6ICdcXGYnLAotICAg
ICdcbic6ICdcXG4nLAotICAgICdccic6ICdcXHInLAotICAgICdcdCc6ICdcXHQnLAotfQotZm9y
IGkgaW4gcmFuZ2UoMHgyMCk6Ci0gICAgI0VTQ0FQRV9EQ1Quc2V0ZGVmYXVsdChjaHIoaSksICdc
XHV7MDowNHh9Jy5mb3JtYXQoaSkpCi0gICAgRVNDQVBFX0RDVC5zZXRkZWZhdWx0KGNocihpKSwg
J1xcdSUwNHgnICUgKGksKSkKLQotRkxPQVRfUkVQUiA9IHJlcHIKLQotZGVmIGVuY29kZV9iYXNl
c3RyaW5nKHMpOgotICAgICIiIlJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeXRo
b24gc3RyaW5nCi0KLSAgICAiIiIKLSAgICBpZiBpc2luc3RhbmNlKHMsIHN0cikgYW5kIEhBU19V
VEY4LnNlYXJjaChzKSBpcyBub3QgTm9uZToKLSAgICAgICAgcyA9IHMuZGVjb2RlKCd1dGYtOCcp
Ci0gICAgZGVmIHJlcGxhY2UobWF0Y2gpOgotICAgICAgICByZXR1cm4gRVNDQVBFX0RDVFttYXRj
aC5ncm91cCgwKV0KLSAgICByZXR1cm4gdSciJyArIEVTQ0FQRS5zdWIocmVwbGFjZSwgcykgKyB1
JyInCi0KLQotZGVmIHB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKHMpOgotICAgICIiIlJldHVy
biBhbiBBU0NJSS1vbmx5IEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gc3RyaW5nCi0K
LSAgICAiIiIKLSAgICBpZiBpc2luc3RhbmNlKHMsIHN0cikgYW5kIEhBU19VVEY4LnNlYXJjaChz
KSBpcyBub3QgTm9uZToKLSAgICAgICAgcyA9IHMuZGVjb2RlKCd1dGYtOCcpCi0gICAgZGVmIHJl
cGxhY2UobWF0Y2gpOgotICAgICAgICBzID0gbWF0Y2guZ3JvdXAoMCkKLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgcmV0dXJuIEVTQ0FQRV9EQ1Rbc10KLSAgICAgICAgZXhjZXB0IEtleUVycm9y
OgotICAgICAgICAgICAgbiA9IG9yZChzKQotICAgICAgICAgICAgaWYgbiA8IDB4MTAwMDA6Ci0g
ICAgICAgICAgICAgICAgI3JldHVybiAnXFx1ezA6MDR4fScuZm9ybWF0KG4pCi0gICAgICAgICAg
ICAgICAgcmV0dXJuICdcXHUlMDR4JyAlIChuLCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgIyBzdXJyb2dhdGUgcGFpcgotICAgICAgICAgICAgICAgIG4gLT0gMHgxMDAwMAot
ICAgICAgICAgICAgICAgIHMxID0gMHhkODAwIHwgKChuID4+IDEwKSAmIDB4M2ZmKQotICAgICAg
ICAgICAgICAgIHMyID0gMHhkYzAwIHwgKG4gJiAweDNmZikKLSAgICAgICAgICAgICAgICAjcmV0
dXJuICdcXHV7MDowNHh9XFx1ezE6MDR4fScuZm9ybWF0KHMxLCBzMikKLSAgICAgICAgICAgICAg
ICByZXR1cm4gJ1xcdSUwNHhcXHUlMDR4JyAlIChzMSwgczIpCi0gICAgcmV0dXJuICciJyArIHN0
cihFU0NBUEVfQVNDSUkuc3ViKHJlcGxhY2UsIHMpKSArICciJwotCi0KLWVuY29kZV9iYXNlc3Ry
aW5nX2FzY2lpID0gKAotICAgIGNfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgb3IgcHlfZW5jb2Rl
X2Jhc2VzdHJpbmdfYXNjaWkpCi0KLWNsYXNzIEpTT05FbmNvZGVyKG9iamVjdCk6Ci0gICAgIiIi
RXh0ZW5zaWJsZSBKU09OIDxodHRwOi8vanNvbi5vcmc+IGVuY29kZXIgZm9yIFB5dGhvbiBkYXRh
IHN0cnVjdHVyZXMuCi0KLSAgICBTdXBwb3J0cyB0aGUgZm9sbG93aW5nIG9iamVjdHMgYW5kIHR5
cGVzIGJ5IGRlZmF1bHQ6Ci0KLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t
LS0rCi0gICAgfCBQeXRob24gICAgICAgICAgICB8IEpTT04gICAgICAgICAgfAotICAgICs9PT09
PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSsKLSAgICB8IGRpY3QgICAgICAgICAgICAg
IHwgb2JqZWN0ICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t
LS0tKwotICAgIHwgbGlzdCwgdHVwbGUgICAgICAgfCBhcnJheSAgICAgICAgIHwKLSAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgfCBzdHIsIHVuaWNvZGUgICAg
ICB8IHN0cmluZyAgICAgICAgfAotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t
LS0tLSsKLSAgICB8IGludCwgbG9uZywgZmxvYXQgIHwgbnVtYmVyICAgICAgICB8Ci0gICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgIHwgVHJ1ZSAgICAgICAgICAg
ICAgfCB0cnVlICAgICAgICAgIHwKLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t
LS0tLS0rCi0gICAgfCBGYWxzZSAgICAgICAgICAgICB8IGZhbHNlICAgICAgICAgfAotICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICB8IE5vbmUgICAgICAgICAg
ICAgIHwgbnVsbCAgICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t
LS0tLS0tKwotCi0gICAgVG8gZXh0ZW5kIHRoaXMgdG8gcmVjb2duaXplIG90aGVyIG9iamVjdHMs
IHN1YmNsYXNzIGFuZCBpbXBsZW1lbnQgYQotICAgIGBgLmRlZmF1bHQoKWBgIG1ldGhvZCB3aXRo
IGFub3RoZXIgbWV0aG9kIHRoYXQgcmV0dXJucyBhIHNlcmlhbGl6YWJsZQotICAgIG9iamVjdCBm
b3IgYGBvYGAgaWYgcG9zc2libGUsIG90aGVyd2lzZSBpdCBzaG91bGQgY2FsbCB0aGUgc3VwZXJj
bGFzcwotICAgIGltcGxlbWVudGF0aW9uICh0byByYWlzZSBgYFR5cGVFcnJvcmBgKS4KLQotICAg
ICIiIgotICAgIGl0ZW1fc2VwYXJhdG9yID0gJywgJwotICAgIGtleV9zZXBhcmF0b3IgPSAnOiAn
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNraXBrZXlzPUZhbHNlLCBlbnN1cmVfYXNjaWk9VHJ1
ZSwKLSAgICAgICAgICAgIGNoZWNrX2NpcmN1bGFyPVRydWUsIGFsbG93X25hbj1UcnVlLCBzb3J0
X2tleXM9RmFsc2UsCi0gICAgICAgICAgICBpbmRlbnQ9Tm9uZSwgc2VwYXJhdG9ycz1Ob25lLCBl
bmNvZGluZz0ndXRmLTgnLCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICB1c2VfZGVjaW1hbD1G
YWxzZSk6Ci0gICAgICAgICIiIkNvbnN0cnVjdG9yIGZvciBKU09ORW5jb2Rlciwgd2l0aCBzZW5z
aWJsZSBkZWZhdWx0cy4KLQotICAgICAgICBJZiBza2lwa2V5cyBpcyBmYWxzZSwgdGhlbiBpdCBp
cyBhIFR5cGVFcnJvciB0byBhdHRlbXB0Ci0gICAgICAgIGVuY29kaW5nIG9mIGtleXMgdGhhdCBh
cmUgbm90IHN0ciwgaW50LCBsb25nLCBmbG9hdCBvciBOb25lLiAgSWYKLSAgICAgICAgc2tpcGtl
eXMgaXMgVHJ1ZSwgc3VjaCBpdGVtcyBhcmUgc2ltcGx5IHNraXBwZWQuCi0KLSAgICAgICAgSWYg
ZW5zdXJlX2FzY2lpIGlzIHRydWUsIHRoZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHIK
LSAgICAgICAgb2JqZWN0cyB3aXRoIGFsbCBpbmNvbWluZyB1bmljb2RlIGNoYXJhY3RlcnMgZXNj
YXBlZC4gIElmCi0gICAgICAgIGVuc3VyZV9hc2NpaSBpcyBmYWxzZSwgdGhlIG91dHB1dCB3aWxs
IGJlIHVuaWNvZGUgb2JqZWN0LgotCi0gICAgICAgIElmIGNoZWNrX2NpcmN1bGFyIGlzIHRydWUs
IHRoZW4gbGlzdHMsIGRpY3RzLCBhbmQgY3VzdG9tIGVuY29kZWQKLSAgICAgICAgb2JqZWN0cyB3
aWxsIGJlIGNoZWNrZWQgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgZHVyaW5nIGVuY29kaW5nIHRv
Ci0gICAgICAgIHByZXZlbnQgYW4gaW5maW5pdGUgcmVjdXJzaW9uICh3aGljaCB3b3VsZCBjYXVz
ZSBhbiBPdmVyZmxvd0Vycm9yKS4KLSAgICAgICAgT3RoZXJ3aXNlLCBubyBzdWNoIGNoZWNrIHRh
a2VzIHBsYWNlLgotCi0gICAgICAgIElmIGFsbG93X25hbiBpcyB0cnVlLCB0aGVuIE5hTiwgSW5m
aW5pdHksIGFuZCAtSW5maW5pdHkgd2lsbCBiZQotICAgICAgICBlbmNvZGVkIGFzIHN1Y2guICBU
aGlzIGJlaGF2aW9yIGlzIG5vdCBKU09OIHNwZWNpZmljYXRpb24gY29tcGxpYW50LAotICAgICAg
ICBidXQgaXMgY29uc2lzdGVudCB3aXRoIG1vc3QgSmF2YVNjcmlwdCBiYXNlZCBlbmNvZGVycyBh
bmQgZGVjb2RlcnMuCi0gICAgICAgIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBhIFZhbHVlRXJyb3Ig
dG8gZW5jb2RlIHN1Y2ggZmxvYXRzLgotCi0gICAgICAgIElmIHNvcnRfa2V5cyBpcyB0cnVlLCB0
aGVuIHRoZSBvdXRwdXQgb2YgZGljdGlvbmFyaWVzIHdpbGwgYmUKLSAgICAgICAgc29ydGVkIGJ5
IGtleTsgdGhpcyBpcyB1c2VmdWwgZm9yIHJlZ3Jlc3Npb24gdGVzdHMgdG8gZW5zdXJlCi0gICAg
ICAgIHRoYXQgSlNPTiBzZXJpYWxpemF0aW9ucyBjYW4gYmUgY29tcGFyZWQgb24gYSBkYXktdG8t
ZGF5IGJhc2lzLgotCi0gICAgICAgIElmIGluZGVudCBpcyBhIHN0cmluZywgdGhlbiBKU09OIGFy
cmF5IGVsZW1lbnRzIGFuZCBvYmplY3QgbWVtYmVycwotICAgICAgICB3aWxsIGJlIHByZXR0eS1w
cmludGVkIHdpdGggYSBuZXdsaW5lIGZvbGxvd2VkIGJ5IHRoYXQgc3RyaW5nIHJlcGVhdGVkCi0g
ICAgICAgIGZvciBlYWNoIGxldmVsIG9mIG5lc3RpbmcuIGBgTm9uZWBgICh0aGUgZGVmYXVsdCkg
c2VsZWN0cyB0aGUgbW9zdCBjb21wYWN0Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uIHdpdGhvdXQg
YW55IG5ld2xpbmVzLiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAotICAgICAgICB2
ZXJzaW9ucyBvZiBzaW1wbGVqc29uIGVhcmxpZXIgdGhhbiAyLjEuMCwgYW4gaW50ZWdlciBpcyBh
bHNvIGFjY2VwdGVkCi0gICAgICAgIGFuZCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgd2l0aCB0
aGF0IG1hbnkgc3BhY2VzLgotCi0gICAgICAgIElmIHNwZWNpZmllZCwgc2VwYXJhdG9ycyBzaG91
bGQgYmUgYSAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpCi0gICAgICAgIHR1cGxlLiAg
VGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNP
TgotICAgICAgICByZXByZXNlbnRhdGlvbiB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0
byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KLQotICAgICAgICBJZiBzcGVjaWZpZWQsIGRlZmF1bHQg
aXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBvYmplY3RzCi0gICAgICAgIHRoYXQg
Y2FuJ3Qgb3RoZXJ3aXNlIGJlIHNlcmlhbGl6ZWQuICBJdCBzaG91bGQgcmV0dXJuIGEgSlNPTiBl
bmNvZGFibGUKLSAgICAgICAgdmVyc2lvbiBvZiB0aGUgb2JqZWN0IG9yIHJhaXNlIGEgYGBUeXBl
RXJyb3JgYC4KLQotICAgICAgICBJZiBlbmNvZGluZyBpcyBub3QgTm9uZSwgdGhlbiBhbGwgaW5w
dXQgc3RyaW5ncyB3aWxsIGJlCi0gICAgICAgIHRyYW5zZm9ybWVkIGludG8gdW5pY29kZSB1c2lu
ZyB0aGF0IGVuY29kaW5nIHByaW9yIHRvIEpTT04tZW5jb2RpbmcuCi0gICAgICAgIFRoZSBkZWZh
dWx0IGlzIFVURi04LgotCi0gICAgICAgIElmIHVzZV9kZWNpbWFsIGlzIHRydWUgKG5vdCB0aGUg
ZGVmYXVsdCksIGBgZGVjaW1hbC5EZWNpbWFsYGAgd2lsbAotICAgICAgICBiZSBzdXBwb3J0ZWQg
ZGlyZWN0bHkgYnkgdGhlIGVuY29kZXIuIEZvciB0aGUgaW52ZXJzZSwgZGVjb2RlIEpTT04KLSAg
ICAgICAgd2l0aCBgYHBhcnNlX2Zsb2F0PWRlY2ltYWwuRGVjaW1hbGBgLgotCi0gICAgICAgICIi
IgotCi0gICAgICAgIHNlbGYuc2tpcGtleXMgPSBza2lwa2V5cwotICAgICAgICBzZWxmLmVuc3Vy
ZV9hc2NpaSA9IGVuc3VyZV9hc2NpaQotICAgICAgICBzZWxmLmNoZWNrX2NpcmN1bGFyID0gY2hl
Y2tfY2lyY3VsYXIKLSAgICAgICAgc2VsZi5hbGxvd19uYW4gPSBhbGxvd19uYW4KLSAgICAgICAg
c2VsZi5zb3J0X2tleXMgPSBzb3J0X2tleXMKLSAgICAgICAgc2VsZi51c2VfZGVjaW1hbCA9IHVz
ZV9kZWNpbWFsCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoaW5kZW50LCAoaW50LCBsb25nKSk6Ci0g
ICAgICAgICAgICBpbmRlbnQgPSAnICcgKiBpbmRlbnQKLSAgICAgICAgc2VsZi5pbmRlbnQgPSBp
bmRlbnQKLSAgICAgICAgaWYgc2VwYXJhdG9ycyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNl
bGYuaXRlbV9zZXBhcmF0b3IsIHNlbGYua2V5X3NlcGFyYXRvciA9IHNlcGFyYXRvcnMKLSAgICAg
ICAgZWxpZiBpbmRlbnQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLml0ZW1fc2VwYXJh
dG9yID0gJywnCi0gICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBz
ZWxmLmRlZmF1bHQgPSBkZWZhdWx0Ci0gICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZwot
Ci0gICAgZGVmIGRlZmF1bHQoc2VsZiwgbyk6Ci0gICAgICAgICIiIkltcGxlbWVudCB0aGlzIG1l
dGhvZCBpbiBhIHN1YmNsYXNzIHN1Y2ggdGhhdCBpdCByZXR1cm5zCi0gICAgICAgIGEgc2VyaWFs
aXphYmxlIG9iamVjdCBmb3IgYGBvYGAsIG9yIGNhbGxzIHRoZSBiYXNlIGltcGxlbWVudGF0aW9u
Ci0gICAgICAgICh0byByYWlzZSBhIGBgVHlwZUVycm9yYGApLgotCi0gICAgICAgIEZvciBleGFt
cGxlLCB0byBzdXBwb3J0IGFyYml0cmFyeSBpdGVyYXRvcnMsIHlvdSBjb3VsZAotICAgICAgICBp
bXBsZW1lbnQgZGVmYXVsdCBsaWtlIHRoaXM6OgotCi0gICAgICAgICAgICBkZWYgZGVmYXVsdChz
ZWxmLCBvKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGl0ZXJh
YmxlID0gaXRlcihvKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAg
ICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbGlzdChpdGVyYWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNPTkVu
Y29kZXIuZGVmYXVsdChzZWxmLCBvKQotCi0gICAgICAgICIiIgotICAgICAgICByYWlzZSBUeXBl
RXJyb3IocmVwcihvKSArICIgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlIikKLQotICAgIGRlZiBl
bmNvZGUoc2VsZiwgbyk6Ci0gICAgICAgICIiIlJldHVybiBhIEpTT04gc3RyaW5nIHJlcHJlc2Vu
dGF0aW9uIG9mIGEgUHl0aG9uIGRhdGEgc3RydWN0dXJlLgotCi0gICAgICAgID4+PiBmcm9tIHNp
bXBsZWpzb24gaW1wb3J0IEpTT05FbmNvZGVyCi0gICAgICAgID4+PiBKU09ORW5jb2RlcigpLmVu
Y29kZSh7ImZvbyI6IFsiYmFyIiwgImJheiJdfSkKLSAgICAgICAgJ3siZm9vIjogWyJiYXIiLCAi
YmF6Il19JwotCi0gICAgICAgICIiIgotICAgICAgICAjIFRoaXMgaXMgZm9yIGV4dHJlbWVseSBz
aW1wbGUgY2FzZXMgYW5kIGJlbmNobWFya3MuCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobywgYmFz
ZXN0cmluZyk6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKG8sIHN0cik6Ci0gICAgICAgICAg
ICAgICAgX2VuY29kaW5nID0gc2VsZi5lbmNvZGluZwotICAgICAgICAgICAgICAgIGlmIChfZW5j
b2RpbmcgaXMgbm90IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgKF9lbmNv
ZGluZyA9PSAndXRmLTgnKSk6Ci0gICAgICAgICAgICAgICAgICAgIG8gPSBvLmRlY29kZShfZW5j
b2RpbmcpCi0gICAgICAgICAgICBpZiBzZWxmLmVuc3VyZV9hc2NpaToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkobykKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZV9iYXNlc3RyaW5nKG8pCi0gICAgICAgICMgVGhp
cyBkb2Vzbid0IHBhc3MgdGhlIGl0ZXJhdG9yIGRpcmVjdGx5IHRvICcnLmpvaW4oKSBiZWNhdXNl
IHRoZQotICAgICAgICAjIGV4Y2VwdGlvbnMgYXJlbid0IGFzIGRldGFpbGVkLiAgVGhlIGxpc3Qg
Y2FsbCBzaG91bGQgYmUgcm91Z2hseQotICAgICAgICAjIGVxdWl2YWxlbnQgdG8gdGhlIFB5U2Vx
dWVuY2VfRmFzdCB0aGF0ICcnLmpvaW4oKSB3b3VsZCBkby4KLSAgICAgICAgY2h1bmtzID0gc2Vs
Zi5pdGVyZW5jb2RlKG8sIF9vbmVfc2hvdD1UcnVlKQotICAgICAgICBpZiBub3QgaXNpbnN0YW5j
ZShjaHVua3MsIChsaXN0LCB0dXBsZSkpOgotICAgICAgICAgICAgY2h1bmtzID0gbGlzdChjaHVu
a3MpCi0gICAgICAgIGlmIHNlbGYuZW5zdXJlX2FzY2lpOgotICAgICAgICAgICAgcmV0dXJuICcn
LmpvaW4oY2h1bmtzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHUnJy5qb2lu
KGNodW5rcykKLQotICAgIGRlZiBpdGVyZW5jb2RlKHNlbGYsIG8sIF9vbmVfc2hvdD1GYWxzZSk6
Ci0gICAgICAgICIiIkVuY29kZSB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCB5aWVsZCBlYWNoIHN0cmlu
ZwotICAgICAgICByZXByZXNlbnRhdGlvbiBhcyBhdmFpbGFibGUuCi0KLSAgICAgICAgRm9yIGV4
YW1wbGU6OgotCi0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gSlNPTkVuY29kZXIoKS5pdGVyZW5j
b2RlKGJpZ29iamVjdCk6Ci0gICAgICAgICAgICAgICAgbXlzb2NrZXQud3JpdGUoY2h1bmspCi0K
LSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuY2hlY2tfY2lyY3VsYXI6Ci0gICAgICAgICAg
ICBtYXJrZXJzID0ge30KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hcmtlcnMgPSBOb25l
Ci0gICAgICAgIGlmIHNlbGYuZW5zdXJlX2FzY2lpOgotICAgICAgICAgICAgX2VuY29kZXIgPSBl
bmNvZGVfYmFzZXN0cmluZ19hc2NpaQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgX2VuY29k
ZXIgPSBlbmNvZGVfYmFzZXN0cmluZwotICAgICAgICBpZiBzZWxmLmVuY29kaW5nICE9ICd1dGYt
OCc6Ci0gICAgICAgICAgICBkZWYgX2VuY29kZXIobywgX29yaWdfZW5jb2Rlcj1fZW5jb2Rlciwg
X2VuY29kaW5nPXNlbGYuZW5jb2RpbmcpOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
bywgc3RyKToKLSAgICAgICAgICAgICAgICAgICAgbyA9IG8uZGVjb2RlKF9lbmNvZGluZykKLSAg
ICAgICAgICAgICAgICByZXR1cm4gX29yaWdfZW5jb2RlcihvKQotCi0gICAgICAgIGRlZiBmbG9h
dHN0cihvLCBhbGxvd19uYW49c2VsZi5hbGxvd19uYW4sCi0gICAgICAgICAgICAgICAgX3JlcHI9
RkxPQVRfUkVQUiwgX2luZj1Qb3NJbmYsIF9uZWdpbmY9LVBvc0luZik6Ci0gICAgICAgICAgICAj
IENoZWNrIGZvciBzcGVjaWFscy4gTm90ZSB0aGF0IHRoaXMgdHlwZSBvZiB0ZXN0IGlzIHByb2Nl
c3NvcgotICAgICAgICAgICAgIyBhbmQvb3IgcGxhdGZvcm0tc3BlY2lmaWMsIHNvIGRvIHRlc3Rz
IHdoaWNoIGRvbid0IGRlcGVuZCBvbgotICAgICAgICAgICAgIyB0aGUgaW50ZXJuYWxzLgotCi0g
ICAgICAgICAgICBpZiBvICE9IG86Ci0gICAgICAgICAgICAgICAgdGV4dCA9ICdOYU4nCi0gICAg
ICAgICAgICBlbGlmIG8gPT0gX2luZjoKLSAgICAgICAgICAgICAgICB0ZXh0ID0gJ0luZmluaXR5
JwotICAgICAgICAgICAgZWxpZiBvID09IF9uZWdpbmY6Ci0gICAgICAgICAgICAgICAgdGV4dCA9
ICctSW5maW5pdHknCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBf
cmVwcihvKQotCi0gICAgICAgICAgICBpZiBub3QgYWxsb3dfbmFuOgotICAgICAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJPdXQgb2YgcmFuZ2UgZmxv
YXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQ6ICIgKwotICAgICAgICAgICAgICAgICAg
ICByZXByKG8pKQotCi0gICAgICAgICAgICByZXR1cm4gdGV4dAotCi0KLSAgICAgICAga2V5X21l
bW8gPSB7fQotICAgICAgICBpZiAoX29uZV9zaG90IGFuZCBjX21ha2VfZW5jb2RlciBpcyBub3Qg
Tm9uZQotICAgICAgICAgICAgICAgIGFuZCBzZWxmLmluZGVudCBpcyBOb25lKToKLSAgICAgICAg
ICAgIF9pdGVyZW5jb2RlID0gY19tYWtlX2VuY29kZXIoCi0gICAgICAgICAgICAgICAgbWFya2Vy
cywgc2VsZi5kZWZhdWx0LCBfZW5jb2Rlciwgc2VsZi5pbmRlbnQsCi0gICAgICAgICAgICAgICAg
c2VsZi5rZXlfc2VwYXJhdG9yLCBzZWxmLml0ZW1fc2VwYXJhdG9yLCBzZWxmLnNvcnRfa2V5cywK
LSAgICAgICAgICAgICAgICBzZWxmLnNraXBrZXlzLCBzZWxmLmFsbG93X25hbiwga2V5X21lbW8s
IHNlbGYudXNlX2RlY2ltYWwpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBfaXRlcmVuY29k
ZSA9IF9tYWtlX2l0ZXJlbmNvZGUoCi0gICAgICAgICAgICAgICAgbWFya2Vycywgc2VsZi5kZWZh
dWx0LCBfZW5jb2Rlciwgc2VsZi5pbmRlbnQsIGZsb2F0c3RyLAotICAgICAgICAgICAgICAgIHNl
bGYua2V5X3NlcGFyYXRvciwgc2VsZi5pdGVtX3NlcGFyYXRvciwgc2VsZi5zb3J0X2tleXMsCi0g
ICAgICAgICAgICAgICAgc2VsZi5za2lwa2V5cywgX29uZV9zaG90LCBzZWxmLnVzZV9kZWNpbWFs
KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gX2l0ZXJlbmNvZGUobywgMCkKLSAg
ICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGtleV9tZW1vLmNsZWFyKCkKLQotCi1jbGFzcyBK
U09ORW5jb2RlckZvckhUTUwoSlNPTkVuY29kZXIpOgotICAgICIiIkFuIGVuY29kZXIgdGhhdCBw
cm9kdWNlcyBKU09OIHNhZmUgdG8gZW1iZWQgaW4gSFRNTC4KLQotICAgIFRvIGVtYmVkIEpTT04g
Y29udGVudCBpbiwgc2F5LCBhIHNjcmlwdCB0YWcgb24gYSB3ZWIgcGFnZSwgdGhlCi0gICAgY2hh
cmFjdGVycyAmLCA8IGFuZCA+IHNob3VsZCBiZSBlc2NhcGVkLiBUaGV5IGNhbm5vdCBiZSBlc2Nh
cGVkCi0gICAgd2l0aCB0aGUgdXN1YWwgZW50aXRpZXMgKGUuZy4gJmFtcDspIGJlY2F1c2UgdGhl
eSBhcmUgbm90IGV4cGFuZGVkCi0gICAgd2l0aGluIDxzY3JpcHQ+IHRhZ3MuCi0gICAgIiIiCi0K
LSAgICBkZWYgZW5jb2RlKHNlbGYsIG8pOgotICAgICAgICAjIE92ZXJyaWRlIEpTT05FbmNvZGVy
LmVuY29kZSBiZWNhdXNlIGl0IGhhcyBoYWNrcyBmb3IKLSAgICAgICAgIyBwZXJmb3JtYW5jZSB0
aGF0IG1ha2UgdGhpbmdzIG1vcmUgY29tcGxpY2F0ZWQuCi0gICAgICAgIGNodW5rcyA9IHNlbGYu
aXRlcmVuY29kZShvLCBUcnVlKQotICAgICAgICBpZiBzZWxmLmVuc3VyZV9hc2NpaToKLSAgICAg
ICAgICAgIHJldHVybiAnJy5qb2luKGNodW5rcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHJldHVybiB1Jycuam9pbihjaHVua3MpCi0KLSAgICBkZWYgaXRlcmVuY29kZShzZWxmLCBvLCBf
b25lX3Nob3Q9RmFsc2UpOgotICAgICAgICBjaHVua3MgPSBzdXBlcihKU09ORW5jb2RlckZvckhU
TUwsIHNlbGYpLml0ZXJlbmNvZGUobywgX29uZV9zaG90KQotICAgICAgICBmb3IgY2h1bmsgaW4g
Y2h1bmtzOgotICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5yZXBsYWNlKCcmJywgJ1xcdTAwMjYn
KQotICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5yZXBsYWNlKCc8JywgJ1xcdTAwM2MnKQotICAg
ICAgICAgICAgY2h1bmsgPSBjaHVuay5yZXBsYWNlKCc+JywgJ1xcdTAwM2UnKQotICAgICAgICAg
ICAgeWllbGQgY2h1bmsKLQotCi1kZWYgX21ha2VfaXRlcmVuY29kZShtYXJrZXJzLCBfZGVmYXVs
dCwgX2VuY29kZXIsIF9pbmRlbnQsIF9mbG9hdHN0ciwKLSAgICAgICAgX2tleV9zZXBhcmF0b3Is
IF9pdGVtX3NlcGFyYXRvciwgX3NvcnRfa2V5cywgX3NraXBrZXlzLCBfb25lX3Nob3QsCi0gICAg
ICAgIF91c2VfZGVjaW1hbCwKLSAgICAgICAgIyMgSEFDSzogaGFuZC1vcHRpbWl6ZWQgYnl0ZWNv
ZGU7IHR1cm4gZ2xvYmFscyBpbnRvIGxvY2FscwotICAgICAgICBGYWxzZT1GYWxzZSwKLSAgICAg
ICAgVHJ1ZT1UcnVlLAotICAgICAgICBWYWx1ZUVycm9yPVZhbHVlRXJyb3IsCi0gICAgICAgIGJh
c2VzdHJpbmc9YmFzZXN0cmluZywKLSAgICAgICAgRGVjaW1hbD1EZWNpbWFsLAotICAgICAgICBk
aWN0PWRpY3QsCi0gICAgICAgIGZsb2F0PWZsb2F0LAotICAgICAgICBpZD1pZCwKLSAgICAgICAg
aW50PWludCwKLSAgICAgICAgaXNpbnN0YW5jZT1pc2luc3RhbmNlLAotICAgICAgICBsaXN0PWxp
c3QsCi0gICAgICAgIGxvbmc9bG9uZywKLSAgICAgICAgc3RyPXN0ciwKLSAgICAgICAgdHVwbGU9
dHVwbGUsCi0gICAgKToKLQotICAgIGRlZiBfaXRlcmVuY29kZV9saXN0KGxzdCwgX2N1cnJlbnRf
aW5kZW50X2xldmVsKToKLSAgICAgICAgaWYgbm90IGxzdDoKLSAgICAgICAgICAgIHlpZWxkICdb
XScKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgot
ICAgICAgICAgICAgbWFya2VyaWQgPSBpZChsc3QpCi0gICAgICAgICAgICBpZiBtYXJrZXJpZCBp
biBtYXJrZXJzOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJl
ZmVyZW5jZSBkZXRlY3RlZCIpCi0gICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IGxzdAot
ICAgICAgICBidWYgPSAnWycKLSAgICAgICAgaWYgX2luZGVudCBpcyBub3QgTm9uZToKLSAgICAg
ICAgICAgIF9jdXJyZW50X2luZGVudF9sZXZlbCArPSAxCi0gICAgICAgICAgICBuZXdsaW5lX2lu
ZGVudCA9ICdcbicgKyAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkKLSAgICAgICAg
ICAgIHNlcGFyYXRvciA9IF9pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5kZW50Ci0gICAgICAg
ICAgICBidWYgKz0gbmV3bGluZV9pbmRlbnQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5l
d2xpbmVfaW5kZW50ID0gTm9uZQotICAgICAgICAgICAgc2VwYXJhdG9yID0gX2l0ZW1fc2VwYXJh
dG9yCi0gICAgICAgIGZpcnN0ID0gVHJ1ZQotICAgICAgICBmb3IgdmFsdWUgaW4gbHN0OgotICAg
ICAgICAgICAgaWYgZmlyc3Q6Ci0gICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBidWYgPSBzZXBhcmF0b3IKLSAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgIHlpZWxk
IGJ1ZiArIF9lbmNvZGVyKHZhbHVlKQotICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBOb25lOgot
ICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArICdudWxsJwotICAgICAgICAgICAgZWxpZiB2YWx1
ZSBpcyBUcnVlOgotICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArICd0cnVlJwotICAgICAgICAg
ICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKLSAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyAnZmFs
c2UnCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIChpbnQsIGxvbmcpKToKLSAg
ICAgICAgICAgICAgICB5aWVsZCBidWYgKyBzdHIodmFsdWUpCi0gICAgICAgICAgICBlbGlmIGlz
aW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBfZmxv
YXRzdHIodmFsdWUpCi0gICAgICAgICAgICBlbGlmIF91c2VfZGVjaW1hbCBhbmQgaXNpbnN0YW5j
ZSh2YWx1ZSwgRGVjaW1hbCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsgc3RyKHZhbHVl
KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB5aWVsZCBidWYKLSAgICAgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKLSAgICAgICAgICAg
ICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfbGlzdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50
X2xldmVsKQotICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6Ci0g
ICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2RpY3QodmFsdWUsIF9jdXJy
ZW50X2luZGVudF9sZXZlbCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
ICAgICBjaHVua3MgPSBfaXRlcmVuY29kZSh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQot
ICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6Ci0gICAgICAgICAgICAgICAgICAg
IHlpZWxkIGNodW5rCi0gICAgICAgIGlmIG5ld2xpbmVfaW5kZW50IGlzIG5vdCBOb25lOgotICAg
ICAgICAgICAgX2N1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKLSAgICAgICAgICAgIHlpZWxkICdc
bicgKyAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkKLSAgICAgICAgeWllbGQgJ10n
Ci0gICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBkZWwgbWFya2Vy
c1ttYXJrZXJpZF0KLQotICAgIGRlZiBfaXRlcmVuY29kZV9kaWN0KGRjdCwgX2N1cnJlbnRfaW5k
ZW50X2xldmVsKToKLSAgICAgICAgaWYgbm90IGRjdDoKLSAgICAgICAgICAgIHlpZWxkICd7fScK
LSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgotICAg
ICAgICAgICAgbWFya2VyaWQgPSBpZChkY3QpCi0gICAgICAgICAgICBpZiBtYXJrZXJpZCBpbiBt
YXJrZXJzOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVy
ZW5jZSBkZXRlY3RlZCIpCi0gICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IGRjdAotICAg
ICAgICB5aWVsZCAneycKLSAgICAgICAgaWYgX2luZGVudCBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgIF9jdXJyZW50X2luZGVudF9sZXZlbCArPSAxCi0gICAgICAgICAgICBuZXdsaW5lX2luZGVu
dCA9ICdcbicgKyAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkKLSAgICAgICAgICAg
IGl0ZW1fc2VwYXJhdG9yID0gX2l0ZW1fc2VwYXJhdG9yICsgbmV3bGluZV9pbmRlbnQKLSAgICAg
ICAgICAgIHlpZWxkIG5ld2xpbmVfaW5kZW50Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBu
ZXdsaW5lX2luZGVudCA9IE5vbmUKLSAgICAgICAgICAgIGl0ZW1fc2VwYXJhdG9yID0gX2l0ZW1f
c2VwYXJhdG9yCi0gICAgICAgIGZpcnN0ID0gVHJ1ZQotICAgICAgICBpZiBfc29ydF9rZXlzOgot
ICAgICAgICAgICAgaXRlbXMgPSBkY3QuaXRlbXMoKQotICAgICAgICAgICAgaXRlbXMuc29ydChr
ZXk9bGFtYmRhIGt2OiBrdlswXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGl0ZW1zID0g
ZGN0Lml0ZXJpdGVtcygpCi0gICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgotICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShrZXksIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgIHBh
c3MKLSAgICAgICAgICAgICMgSmF2YVNjcmlwdCBpcyB3ZWFrbHkgdHlwZWQgZm9yIHRoZXNlLCBz
byBpdCBtYWtlcyBzZW5zZSB0bwotICAgICAgICAgICAgIyBhbHNvIGFsbG93IHRoZW0uICBNYW55
IGVuY29kZXJzIHNlZW0gdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpcy4KLSAgICAgICAgICAgIGVs
aWYgaXNpbnN0YW5jZShrZXksIGZsb2F0KToKLSAgICAgICAgICAgICAgICBrZXkgPSBfZmxvYXRz
dHIoa2V5KQotICAgICAgICAgICAgZWxpZiBrZXkgaXMgVHJ1ZToKLSAgICAgICAgICAgICAgICBr
ZXkgPSAndHJ1ZScKLSAgICAgICAgICAgIGVsaWYga2V5IGlzIEZhbHNlOgotICAgICAgICAgICAg
ICAgIGtleSA9ICdmYWxzZScKLSAgICAgICAgICAgIGVsaWYga2V5IGlzIE5vbmU6Ci0gICAgICAg
ICAgICAgICAga2V5ID0gJ251bGwnCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCAo
aW50LCBsb25nKSk6Ci0gICAgICAgICAgICAgICAga2V5ID0gc3RyKGtleSkKLSAgICAgICAgICAg
IGVsaWYgX3NraXBrZXlzOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5ICIgKyByZXByKGtleSkg
KyAiIGlzIG5vdCBhIHN0cmluZyIpCi0gICAgICAgICAgICBpZiBmaXJzdDoKLSAgICAgICAgICAg
ICAgICBmaXJzdCA9IEZhbHNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHlp
ZWxkIGl0ZW1fc2VwYXJhdG9yCi0gICAgICAgICAgICB5aWVsZCBfZW5jb2RlcihrZXkpCi0gICAg
ICAgICAgICB5aWVsZCBfa2V5X3NlcGFyYXRvcgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2
YWx1ZSwgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgX2VuY29kZXIodmFsdWUp
Ci0gICAgICAgICAgICBlbGlmIHZhbHVlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgeWllbGQg
J251bGwnCi0gICAgICAgICAgICBlbGlmIHZhbHVlIGlzIFRydWU6Ci0gICAgICAgICAgICAgICAg
eWllbGQgJ3RydWUnCi0gICAgICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgotICAgICAgICAg
ICAgICAgIHlpZWxkICdmYWxzZScKLSAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwg
KGludCwgbG9uZykpOgotICAgICAgICAgICAgICAgIHlpZWxkIHN0cih2YWx1ZSkKLSAgICAgICAg
ICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotICAgICAgICAgICAgICAgIHlpZWxk
IF9mbG9hdHN0cih2YWx1ZSkKLSAgICAgICAgICAgIGVsaWYgX3VzZV9kZWNpbWFsIGFuZCBpc2lu
c3RhbmNlKHZhbHVlLCBEZWNpbWFsKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdHIodmFsdWUp
Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUs
IChsaXN0LCB0dXBsZSkpOgotICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29k
ZV9saXN0KHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAgICAgICAgICAgICAgZWxp
ZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKLSAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0g
X2l0ZXJlbmNvZGVfZGljdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlKHZh
bHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAgICAgICAgICAgICAgZm9yIGNodW5rIGlu
IGNodW5rczoKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKLSAgICAgICAgaWYgbmV3
bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2
ZWwgLT0gMQotICAgICAgICAgICAgeWllbGQgJ1xuJyArIChfaW5kZW50ICogX2N1cnJlbnRfaW5k
ZW50X2xldmVsKQotICAgICAgICB5aWVsZCAnfScKLSAgICAgICAgaWYgbWFya2VycyBpcyBub3Qg
Tm9uZToKLSAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQotCi0gICAgZGVmIF9pdGVy
ZW5jb2RlKG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uo
bywgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICB5aWVsZCBfZW5jb2RlcihvKQotICAgICAgICBl
bGlmIG8gaXMgTm9uZToKLSAgICAgICAgICAgIHlpZWxkICdudWxsJwotICAgICAgICBlbGlmIG8g
aXMgVHJ1ZToKLSAgICAgICAgICAgIHlpZWxkICd0cnVlJwotICAgICAgICBlbGlmIG8gaXMgRmFs
c2U6Ci0gICAgICAgICAgICB5aWVsZCAnZmFsc2UnCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShv
LCAoaW50LCBsb25nKSk6Ci0gICAgICAgICAgICB5aWVsZCBzdHIobykKLSAgICAgICAgZWxpZiBp
c2luc3RhbmNlKG8sIGZsb2F0KToKLSAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cihvKQotICAg
ICAgICBlbGlmIGlzaW5zdGFuY2UobywgKGxpc3QsIHR1cGxlKSk6Ci0gICAgICAgICAgICBmb3Ig
Y2h1bmsgaW4gX2l0ZXJlbmNvZGVfbGlzdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAg
ICAgICAgICAgICAgIHlpZWxkIGNodW5rCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBkaWN0
KToKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBfaXRlcmVuY29kZV9kaWN0KG8sIF9jdXJyZW50
X2luZGVudF9sZXZlbCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKLSAgICAgICAgZWxp
ZiBfdXNlX2RlY2ltYWwgYW5kIGlzaW5zdGFuY2UobywgRGVjaW1hbCk6Ci0gICAgICAgICAgICB5
aWVsZCBzdHIobykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90
IE5vbmU6Ci0gICAgICAgICAgICAgICAgbWFya2VyaWQgPSBpZChvKQotICAgICAgICAgICAgICAg
IGlmIG1hcmtlcmlkIGluIG1hcmtlcnM6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCi0gICAgICAgICAgICAgICAgbWFy
a2Vyc1ttYXJrZXJpZF0gPSBvCi0gICAgICAgICAgICBvID0gX2RlZmF1bHQobykKLSAgICAgICAg
ICAgIGZvciBjaHVuayBpbiBfaXRlcmVuY29kZShvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgot
ICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCi0gICAgICAgICAgICBpZiBtYXJrZXJzIGlzIG5v
dCBOb25lOgotICAgICAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQotCi0gICAgcmV0
dXJuIF9pdGVyZW5jb2RlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
c2ltcGxlanNvbi9qc29uZmlsdGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL2pzb25maWx0ZXIucHkJKHJldmlzaW9uIDEwNzEz
NSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL2pzb25m
aWx0ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotaW1wb3J0IHNpbXBsZWpz
b24KLWltcG9ydCBjZ2kKLQotY2xhc3MgSlNPTkZpbHRlcihvYmplY3QpOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBhcHAsIG1pbWVfdHlwZT0ndGV4dC94LWpzb24nKToKLSAgICAgICAgc2VsZi5h
cHAgPSBhcHAKLSAgICAgICAgc2VsZi5taW1lX3R5cGUgPSBtaW1lX3R5cGUKLQotICAgIGRlZiBf
X2NhbGxfXyhzZWxmLCBlbnZpcm9uLCBzdGFydF9yZXNwb25zZSk6Ci0gICAgICAgICMgUmVhZCBK
U09OIFBPU1QgaW5wdXQgdG8ganNvbmZpbHRlci5qc29uIGlmIG1hdGNoaW5nIG1pbWUgdHlwZQot
ICAgICAgICByZXNwb25zZSA9IHsnc3RhdHVzJzogJzIwMCBPSycsICdoZWFkZXJzJzogW119Ci0g
ICAgICAgIGRlZiBqc29uX3N0YXJ0X3Jlc3BvbnNlKHN0YXR1cywgaGVhZGVycyk6Ci0gICAgICAg
ICAgICByZXNwb25zZVsnc3RhdHVzJ10gPSBzdGF0dXMKLSAgICAgICAgICAgIHJlc3BvbnNlWydo
ZWFkZXJzJ10uZXh0ZW5kKGhlYWRlcnMpCi0gICAgICAgIGVudmlyb25bJ2pzb25maWx0ZXIubWlt
ZV90eXBlJ10gPSBzZWxmLm1pbWVfdHlwZQotICAgICAgICBpZiBlbnZpcm9uLmdldCgnUkVRVUVT
VF9NRVRIT0QnLCAnJykgPT0gJ1BPU1QnOgotICAgICAgICAgICAgaWYgZW52aXJvbi5nZXQoJ0NP
TlRFTlRfVFlQRScsICcnKSA9PSBzZWxmLm1pbWVfdHlwZToKLSAgICAgICAgICAgICAgICBhcmdz
ID0gW18gZm9yIF8gaW4gW2Vudmlyb24uZ2V0KCdDT05URU5UX0xFTkdUSCcpXSBpZiBfXQotICAg
ICAgICAgICAgICAgIGRhdGEgPSBlbnZpcm9uWyd3c2dpLmlucHV0J10ucmVhZCgqbWFwKGludCwg
YXJncykpCi0gICAgICAgICAgICAgICAgZW52aXJvblsnanNvbmZpbHRlci5qc29uJ10gPSBzaW1w
bGVqc29uLmxvYWRzKGRhdGEpCi0gICAgICAgIHJlcyA9IHNpbXBsZWpzb24uZHVtcHMoc2VsZi5h
cHAoZW52aXJvbiwganNvbl9zdGFydF9yZXNwb25zZSkpCi0gICAgICAgIGpzb25wID0gY2dpLnBh
cnNlX3FzKGVudmlyb24uZ2V0KCdRVUVSWV9TVFJJTkcnLCAnJykpLmdldCgnanNvbnAnKQotICAg
ICAgICBpZiBqc29ucDoKLSAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9ICd0ZXh0L2phdmFzY3Jp
cHQnCi0gICAgICAgICAgICByZXMgPSAnJy5qb2luKGpzb25wICsgWycoJywgcmVzLCAnKSddKQot
ICAgICAgICBlbGlmICdPcGVyYScgaW4gZW52aXJvbi5nZXQoJ0hUVFBfVVNFUl9BR0VOVCcsICcn
KToKLSAgICAgICAgICAgICMgT3BlcmEgaGFzIGJ1bmsgWE1MSHR0cFJlcXVlc3Qgc3VwcG9ydCBm
b3IgbW9zdCBtaW1lIHR5cGVzCi0gICAgICAgICAgICBjb250ZW50X3R5cGUgPSAndGV4dC9wbGFp
bicKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IHNlbGYubWltZV90
eXBlCi0gICAgICAgIGhlYWRlcnMgPSBbCi0gICAgICAgICAgICAoJ0NvbnRlbnQtdHlwZScsIGNv
bnRlbnRfdHlwZSksCi0gICAgICAgICAgICAoJ0NvbnRlbnQtbGVuZ3RoJywgbGVuKHJlcykpLAot
ICAgICAgICBdCi0gICAgICAgIGhlYWRlcnMuZXh0ZW5kKHJlc3BvbnNlWydoZWFkZXJzJ10pCi0g
ICAgICAgIHN0YXJ0X3Jlc3BvbnNlKHJlc3BvbnNlWydzdGF0dXMnXSwgaGVhZGVycykKLSAgICAg
ICAgcmV0dXJuIFtyZXNdCi0KLWRlZiBmYWN0b3J5KGFwcCwgZ2xvYmFsX2NvbmYsICoqa3cpOgot
ICAgIHJldHVybiBKU09ORmlsdGVyKGFwcCwgKiprdykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL29yZGVyZWRfZGljdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9vcmRlcmVkX2Rp
Y3QucHkJKHJldmlzaW9uIDEwNzEzNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS9zaW1wbGVqc29uL29yZGVyZWRfZGljdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwxMTkg
KzAsMCBAQAotIiIiRHJvcC1pbiByZXBsYWNlbWVudCBmb3IgY29sbGVjdGlvbnMuT3JkZXJlZERp
Y3QgYnkgUmF5bW9uZCBIZXR0aW5nZXIKLQotaHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3Jl
Y2lwZXMvNTc2NjkzLwotCi0iIiIKLWZyb20gVXNlckRpY3QgaW1wb3J0IERpY3RNaXhpbgotCi0j
IE1vZGlmaWVkIGZyb20gb3JpZ2luYWwgdG8gc3VwcG9ydCBQeXRob24gMi40LCBzZWUKLSMgaHR0
cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3NpbXBsZWpzb24vaXNzdWVzL2RldGFpbD9pZD01MwotdHJ5
OgotICAgIGFsbAotZXhjZXB0IE5hbWVFcnJvcjoKLSAgICBkZWYgYWxsKHNlcSk6Ci0gICAgICAg
IGZvciBlbGVtIGluIHNlcToKLSAgICAgICAgICAgIGlmIG5vdCBlbGVtOgotICAgICAgICAgICAg
ICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi1jbGFzcyBPcmRlcmVkRGlj
dChkaWN0LCBEaWN0TWl4aW4pOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3
ZHMpOgotICAgICAgICBpZiBsZW4oYXJncykgPiAxOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVy
cm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQot
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9fZW5kCi0gICAgICAgIGV4Y2VwdCBBdHRy
aWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuY2xlYXIoKQotICAgICAgICBzZWxmLnVwZGF0
ZSgqYXJncywgKiprd2RzKQotCi0gICAgZGVmIGNsZWFyKHNlbGYpOgotICAgICAgICBzZWxmLl9f
ZW5kID0gZW5kID0gW10KLSAgICAgICAgZW5kICs9IFtOb25lLCBlbmQsIGVuZF0gICAgICAgICAj
IHNlbnRpbmVsIG5vZGUgZm9yIGRvdWJseSBsaW5rZWQgbGlzdAotICAgICAgICBzZWxmLl9fbWFw
ID0ge30gICAgICAgICAgICAgICAgICMga2V5IC0tPiBba2V5LCBwcmV2LCBuZXh0XQotICAgICAg
ICBkaWN0LmNsZWFyKHNlbGYpCi0KLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1
ZSk6Ci0gICAgICAgIGlmIGtleSBub3QgaW4gc2VsZjoKLSAgICAgICAgICAgIGVuZCA9IHNlbGYu
X19lbmQKLSAgICAgICAgICAgIGN1cnIgPSBlbmRbMV0KLSAgICAgICAgICAgIGN1cnJbMl0gPSBl
bmRbMV0gPSBzZWxmLl9fbWFwW2tleV0gPSBba2V5LCBjdXJyLCBlbmRdCi0gICAgICAgIGRpY3Qu
X19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSkKLQotICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxm
LCBrZXkpOgotICAgICAgICBkaWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSkKLSAgICAgICAga2V5
LCBwcmV2LCBuZXh0ID0gc2VsZi5fX21hcC5wb3Aoa2V5KQotICAgICAgICBwcmV2WzJdID0gbmV4
dAotICAgICAgICBuZXh0WzFdID0gcHJldgotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAg
ICAgICBlbmQgPSBzZWxmLl9fZW5kCi0gICAgICAgIGN1cnIgPSBlbmRbMl0KLSAgICAgICAgd2hp
bGUgY3VyciBpcyBub3QgZW5kOgotICAgICAgICAgICAgeWllbGQgY3VyclswXQotICAgICAgICAg
ICAgY3VyciA9IGN1cnJbMl0KLQotICAgIGRlZiBfX3JldmVyc2VkX18oc2VsZik6Ci0gICAgICAg
IGVuZCA9IHNlbGYuX19lbmQKLSAgICAgICAgY3VyciA9IGVuZFsxXQotICAgICAgICB3aGlsZSBj
dXJyIGlzIG5vdCBlbmQ6Ci0gICAgICAgICAgICB5aWVsZCBjdXJyWzBdCi0gICAgICAgICAgICBj
dXJyID0gY3VyclsxXQotCi0gICAgZGVmIHBvcGl0ZW0oc2VsZiwgbGFzdD1UcnVlKToKLSAgICAg
ICAgaWYgbm90IHNlbGY6Ci0gICAgICAgICAgICByYWlzZSBLZXlFcnJvcignZGljdGlvbmFyeSBp
cyBlbXB0eScpCi0gICAgICAgICMgTW9kaWZpZWQgZnJvbSBvcmlnaW5hbCB0byBzdXBwb3J0IFB5
dGhvbiAyLjQsIHNlZQotICAgICAgICAjIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9zaW1wbGVq
c29uL2lzc3Vlcy9kZXRhaWw/aWQ9NTMKLSAgICAgICAgaWYgbGFzdDoKLSAgICAgICAgICAgIGtl
eSA9IHJldmVyc2VkKHNlbGYpLm5leHQoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAga2V5
ID0gaXRlcihzZWxmKS5uZXh0KCkKLSAgICAgICAgdmFsdWUgPSBzZWxmLnBvcChrZXkpCi0gICAg
ICAgIHJldHVybiBrZXksIHZhbHVlCi0KLSAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKLSAgICAg
ICAgaXRlbXMgPSBbW2ssIHNlbGZba11dIGZvciBrIGluIHNlbGZdCi0gICAgICAgIHRtcCA9IHNl
bGYuX19tYXAsIHNlbGYuX19lbmQKLSAgICAgICAgZGVsIHNlbGYuX19tYXAsIHNlbGYuX19lbmQK
LSAgICAgICAgaW5zdF9kaWN0ID0gdmFycyhzZWxmKS5jb3B5KCkKLSAgICAgICAgc2VsZi5fX21h
cCwgc2VsZi5fX2VuZCA9IHRtcAotICAgICAgICBpZiBpbnN0X2RpY3Q6Ci0gICAgICAgICAgICBy
ZXR1cm4gKHNlbGYuX19jbGFzc19fLCAoaXRlbXMsKSwgaW5zdF9kaWN0KQotICAgICAgICByZXR1
cm4gc2VsZi5fX2NsYXNzX18sIChpdGVtcywpCi0KLSAgICBkZWYga2V5cyhzZWxmKToKLSAgICAg
ICAgcmV0dXJuIGxpc3Qoc2VsZikKLQotICAgIHNldGRlZmF1bHQgPSBEaWN0TWl4aW4uc2V0ZGVm
YXVsdAotICAgIHVwZGF0ZSA9IERpY3RNaXhpbi51cGRhdGUKLSAgICBwb3AgPSBEaWN0TWl4aW4u
cG9wCi0gICAgdmFsdWVzID0gRGljdE1peGluLnZhbHVlcwotICAgIGl0ZW1zID0gRGljdE1peGlu
Lml0ZW1zCi0gICAgaXRlcmtleXMgPSBEaWN0TWl4aW4uaXRlcmtleXMKLSAgICBpdGVydmFsdWVz
ID0gRGljdE1peGluLml0ZXJ2YWx1ZXMKLSAgICBpdGVyaXRlbXMgPSBEaWN0TWl4aW4uaXRlcml0
ZW1zCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmOgotICAg
ICAgICAgICAgcmV0dXJuICclcygpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywpCi0gICAg
ICAgIHJldHVybiAnJXMoJXIpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5pdGVt
cygpKQotCi0gICAgZGVmIGNvcHkoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3Nf
XyhzZWxmKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZyb21rZXlzKGNscywgaXRlcmFi
bGUsIHZhbHVlPU5vbmUpOgotICAgICAgICBkID0gY2xzKCkKLSAgICAgICAgZm9yIGtleSBpbiBp
dGVyYWJsZToKLSAgICAgICAgICAgIGRba2V5XSA9IHZhbHVlCi0gICAgICAgIHJldHVybiBkCi0K
LSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhl
ciwgT3JkZXJlZERpY3QpOgotICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmKT09bGVuKG90aGVy
KSBhbmQgXAotICAgICAgICAgICAgICAgICAgIGFsbChwPT1xIGZvciBwLCBxIGluICB6aXAoc2Vs
Zi5pdGVtcygpLCBvdGhlci5pdGVtcygpKSkKLSAgICAgICAgcmV0dXJuIGRpY3QuX19lcV9fKHNl
bGYsIG90aGVyKQotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVy
biBub3Qgc2VsZiA9PSBvdGhlcgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L3NpbXBsZWpzb24vc2Nhbm5lci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9zY2FubmVyLnB5CShyZXZpc2lvbiAxMDcxMzUp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2ltcGxlanNvbi9zY2FubmVy
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3ICswLDAgQEAKLSIiIkpTT04gdG9rZW4gc2Nhbm5l
cgotIiIiCi1pbXBvcnQgcmUKLWRlZiBfaW1wb3J0X2NfbWFrZV9zY2FubmVyKCk6Ci0gICAgdHJ5
OgotICAgICAgICBmcm9tIHNpbXBsZWpzb24uX3NwZWVkdXBzIGltcG9ydCBtYWtlX3NjYW5uZXIK
LSAgICAgICAgcmV0dXJuIG1ha2Vfc2Nhbm5lcgotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAg
ICAgICAgcmV0dXJuIE5vbmUKLWNfbWFrZV9zY2FubmVyID0gX2ltcG9ydF9jX21ha2Vfc2Nhbm5l
cigpCi0KLV9fYWxsX18gPSBbJ21ha2Vfc2Nhbm5lciddCi0KLU5VTUJFUl9SRSA9IHJlLmNvbXBp
bGUoCi0gICAgcicoLT8oPzowfFsxLTldXGQqKSkoXC5cZCspPyhbZUVdWy0rXT9cZCspPycsCi0g
ICAgKHJlLlZFUkJPU0UgfCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpKQotCi1kZWYgcHlfbWFr
ZV9zY2FubmVyKGNvbnRleHQpOgotICAgIHBhcnNlX29iamVjdCA9IGNvbnRleHQucGFyc2Vfb2Jq
ZWN0Ci0gICAgcGFyc2VfYXJyYXkgPSBjb250ZXh0LnBhcnNlX2FycmF5Ci0gICAgcGFyc2Vfc3Ry
aW5nID0gY29udGV4dC5wYXJzZV9zdHJpbmcKLSAgICBtYXRjaF9udW1iZXIgPSBOVU1CRVJfUkUu
bWF0Y2gKLSAgICBlbmNvZGluZyA9IGNvbnRleHQuZW5jb2RpbmcKLSAgICBzdHJpY3QgPSBjb250
ZXh0LnN0cmljdAotICAgIHBhcnNlX2Zsb2F0ID0gY29udGV4dC5wYXJzZV9mbG9hdAotICAgIHBh
cnNlX2ludCA9IGNvbnRleHQucGFyc2VfaW50Ci0gICAgcGFyc2VfY29uc3RhbnQgPSBjb250ZXh0
LnBhcnNlX2NvbnN0YW50Ci0gICAgb2JqZWN0X2hvb2sgPSBjb250ZXh0Lm9iamVjdF9ob29rCi0g
ICAgb2JqZWN0X3BhaXJzX2hvb2sgPSBjb250ZXh0Lm9iamVjdF9wYWlyc19ob29rCi0gICAgbWVt
byA9IGNvbnRleHQubWVtbwotCi0gICAgZGVmIF9zY2FuX29uY2Uoc3RyaW5nLCBpZHgpOgotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICBuZXh0Y2hhciA9IHN0cmluZ1tpZHhdCi0gICAgICAgIGV4
Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotCi0gICAg
ICAgIGlmIG5leHRjaGFyID09ICciJzoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZV9zdHJpbmco
c3RyaW5nLCBpZHggKyAxLCBlbmNvZGluZywgc3RyaWN0KQotICAgICAgICBlbGlmIG5leHRjaGFy
ID09ICd7JzoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZV9vYmplY3QoKHN0cmluZywgaWR4ICsg
MSksIGVuY29kaW5nLCBzdHJpY3QsCi0gICAgICAgICAgICAgICAgX3NjYW5fb25jZSwgb2JqZWN0
X2hvb2ssIG9iamVjdF9wYWlyc19ob29rLCBtZW1vKQotICAgICAgICBlbGlmIG5leHRjaGFyID09
ICdbJzoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZV9hcnJheSgoc3RyaW5nLCBpZHggKyAxKSwg
X3NjYW5fb25jZSkKLSAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnbicgYW5kIHN0cmluZ1tpZHg6
aWR4ICsgNF0gPT0gJ251bGwnOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUsIGlkeCArIDQKLSAg
ICAgICAgZWxpZiBuZXh0Y2hhciA9PSAndCcgYW5kIHN0cmluZ1tpZHg6aWR4ICsgNF0gPT0gJ3Ry
dWUnOgotICAgICAgICAgICAgcmV0dXJuIFRydWUsIGlkeCArIDQKLSAgICAgICAgZWxpZiBuZXh0
Y2hhciA9PSAnZicgYW5kIHN0cmluZ1tpZHg6aWR4ICsgNV0gPT0gJ2ZhbHNlJzoKLSAgICAgICAg
ICAgIHJldHVybiBGYWxzZSwgaWR4ICsgNQotCi0gICAgICAgIG0gPSBtYXRjaF9udW1iZXIoc3Ry
aW5nLCBpZHgpCi0gICAgICAgIGlmIG0gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpbnRlZ2Vy
LCBmcmFjLCBleHAgPSBtLmdyb3VwcygpCi0gICAgICAgICAgICBpZiBmcmFjIG9yIGV4cDoKLSAg
ICAgICAgICAgICAgICByZXMgPSBwYXJzZV9mbG9hdChpbnRlZ2VyICsgKGZyYWMgb3IgJycpICsg
KGV4cCBvciAnJykpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlcyA9IHBh
cnNlX2ludChpbnRlZ2VyKQotICAgICAgICAgICAgcmV0dXJuIHJlcywgbS5lbmQoKQotICAgICAg
ICBlbGlmIG5leHRjaGFyID09ICdOJyBhbmQgc3RyaW5nW2lkeDppZHggKyAzXSA9PSAnTmFOJzoK
LSAgICAgICAgICAgIHJldHVybiBwYXJzZV9jb25zdGFudCgnTmFOJyksIGlkeCArIDMKLSAgICAg
ICAgZWxpZiBuZXh0Y2hhciA9PSAnSScgYW5kIHN0cmluZ1tpZHg6aWR4ICsgOF0gPT0gJ0luZmlu
aXR5JzoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZV9jb25zdGFudCgnSW5maW5pdHknKSwgaWR4
ICsgOAotICAgICAgICBlbGlmIG5leHRjaGFyID09ICctJyBhbmQgc3RyaW5nW2lkeDppZHggKyA5
XSA9PSAnLUluZmluaXR5JzoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZV9jb25zdGFudCgnLUlu
ZmluaXR5JyksIGlkeCArIDkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFN0b3BJ
dGVyYXRpb24KLQotICAgIGRlZiBzY2FuX29uY2Uoc3RyaW5nLCBpZHgpOgotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICByZXR1cm4gX3NjYW5fb25jZShzdHJpbmcsIGlkeCkKLSAgICAgICAgZmlu
YWxseToKLSAgICAgICAgICAgIG1lbW8uY2xlYXIoKQotCi0gICAgcmV0dXJuIHNjYW5fb25jZQot
Ci1tYWtlX3NjYW5uZXIgPSBjX21ha2Vfc2Nhbm5lciBvciBweV9tYWtlX3NjYW5uZXIKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9zaW1wbGVqc29uL3Rvb2wucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3NpbXBsZWpzb24v
dG9vbC5weQkocmV2aXNpb24gMTA3MTM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3NpbXBsZWpzb24vdG9vbC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBA
Ci1yIiIiQ29tbWFuZC1saW5lIHRvb2wgdG8gdmFsaWRhdGUgYW5kIHByZXR0eS1wcmludCBKU09O
Ci0KLVVzYWdlOjoKLQotICAgICQgZWNobyAneyJqc29uIjoib2JqIn0nIHwgcHl0aG9uIC1tIHNp
bXBsZWpzb24udG9vbAotICAgIHsKLSAgICAgICAgImpzb24iOiAib2JqIgotICAgIH0KLSAgICAk
IGVjaG8gJ3sgMS4yOjMuNH0nIHwgcHl0aG9uIC1tIHNpbXBsZWpzb24udG9vbAotICAgIEV4cGVj
dGluZyBwcm9wZXJ0eSBuYW1lOiBsaW5lIDEgY29sdW1uIDIgKGNoYXIgMikKLQotIiIiCi1pbXBv
cnQgc3lzCi1pbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCi0KLWRlZiBtYWluKCk6Ci0gICAgaWYg
bGVuKHN5cy5hcmd2KSA9PSAxOgotICAgICAgICBpbmZpbGUgPSBzeXMuc3RkaW4KLSAgICAgICAg
b3V0ZmlsZSA9IHN5cy5zdGRvdXQKLSAgICBlbGlmIGxlbihzeXMuYXJndikgPT0gMjoKLSAgICAg
ICAgaW5maWxlID0gb3BlbihzeXMuYXJndlsxXSwgJ3JiJykKLSAgICAgICAgb3V0ZmlsZSA9IHN5
cy5zdGRvdXQKLSAgICBlbGlmIGxlbihzeXMuYXJndikgPT0gMzoKLSAgICAgICAgaW5maWxlID0g
b3BlbihzeXMuYXJndlsxXSwgJ3JiJykKLSAgICAgICAgb3V0ZmlsZSA9IG9wZW4oc3lzLmFyZ3Zb
Ml0sICd3YicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChzeXMuYXJndlsw
XSArICIgW2luZmlsZSBbb3V0ZmlsZV1dIikKLSAgICB0cnk6Ci0gICAgICAgIG9iaiA9IGpzb24u
bG9hZChpbmZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfcGFpcnNfaG9vaz1q
c29uLk9yZGVyZWREaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2RlY2ltYWw9VHJ1
ZSkKLSAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChl
KQotICAgIGpzb24uZHVtcChvYmosIG91dGZpbGUsIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9JyAg
ICAnLCB1c2VfZGVjaW1hbD1UcnVlKQotICAgIG91dGZpbGUud3JpdGUoJ1xuJykKLQotCi1pZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>