<?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>198391</bug_id>
          
          <creation_ts>2019-05-30 15:18:47 -0700</creation_ts>
          <short_desc>Add support of zxcvbn password strength checker to bugs.webkit.org website.</short_desc>
          <delta_ts>2019-06-05 20:22:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Website</component>
          <version>Other</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ling Ho">lingcherd_ho</reporter>
          <assigned_to name="lingho@apple.com">lingho</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jond</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1540477</commentid>
    <comment_count>0</comment_count>
    <who name="Ling Ho">lingcherd_ho</who>
    <bug_when>2019-05-30 15:18:47 -0700</bug_when>
    <thetext>Currently bugs.webkit.org check for password complexity based on several simple rules that allows many weak passwords to be used. We would like to make sure our users, especially contributors use strong passwords.

Installing a password strength estimator will better serve the purpose.  zxcvbn is a reputable password strength estimator, and currently also deployed at trac.webkit.org.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540480</commentid>
    <comment_count>1</comment_count>
      <attachid>370985</attachid>
    <who name="Ling Ho">lingcherd_ho</who>
    <bug_when>2019-05-30 15:30:32 -0700</bug_when>
    <thetext>Created attachment 370985
Added option to select zxcvbn password estimator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540510</commentid>
    <comment_count>2</comment_count>
      <attachid>370994</attachid>
    <who name="lingho@apple.com">lingho</who>
    <bug_when>2019-05-30 16:38:53 -0700</bug_when>
    <thetext>Created attachment 370994
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1541879</commentid>
    <comment_count>3</comment_count>
      <attachid>370994</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-06-04 20:48:38 -0700</bug_when>
    <thetext>Comment on attachment 370994
Patch

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

r- only to update Bugzilla/Install/Requirements.pm to add the Data::Password::zxcvbn module as required.  The rest of the changes are optional.

&gt; Websites/bugs.webkit.org/Bugzilla/Config/Auth.pm:115
&gt; +                &apos;letters_numbers_specialchars&apos;, &apos;zxcvbn&apos; ],

Nit:  I hadn&apos;t heard of zxcvbn before, so using something a little more description (like &apos;zxcvbn_password_checker&apos;) would be easier to grok the first time you see it.

Not necessary to land the patch.

&gt; Websites/bugs.webkit.org/Bugzilla/User.pm:34
&gt; +use Data::Password::zxcvbn &apos;password_strength&apos;; # WEBKIT_CHANGES

I think it&apos;s more idiomatic Perl to use qw() here:

use Data::Password::zxcvbn qw(password_strength); # WEBKIT_CHANGES

--

You also need to update Bugzilla/Install/Requirements.pm to list the Data::Password::zxcvbn module as required.

&gt; Websites/bugs.webkit.org/Bugzilla/User.pm:2492
&gt; +    } elsif ($complexity_level eq &apos;zxcvbn&apos;) {

Update &apos;zxcvbn&apos; if you changed the name above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542120</commentid>
    <comment_count>4</comment_count>
      <attachid>371428</attachid>
    <who name="lingho@apple.com">lingho</who>
    <bug_when>2019-06-05 12:44:47 -0700</bug_when>
    <thetext>Created attachment 371428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542123</commentid>
    <comment_count>5</comment_count>
    <who name="lingho@apple.com">lingho</who>
    <bug_when>2019-06-05 12:50:10 -0700</bug_when>
    <thetext>- Renamed selection &quot;zxcvbn&quot; to &quot;zxcvbn_password_checker&quot;.
- Add Data::Password::zxcvbn module to Bugzilla/Install/Requirements.pm.
- Changed &quot;use Data::Password::zxcvbn &apos;password_strength&apos;;&quot; to &quot;use Data::Password::zxcvbn qw(password_strength);&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542130</commentid>
    <comment_count>6</comment_count>
      <attachid>371428</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-06-05 13:11:13 -0700</bug_when>
    <thetext>Comment on attachment 371428
Patch

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

r=me, but please fix the [% error filter html %] issue at minimum.  After that, this is good to go.

&gt; Websites/bugs.webkit.org/Bugzilla/User.pm:2495
&gt; +        return &apos;Password is weak. &apos; . $est_strength-&gt;{feedback}-&gt;{warning} . &apos;. &apos;

Nit:  Format of this message is not like the others; would like something like `password_too_weak_SCORE&apos; where &quot;SCORE&quot; is replaced with the numeric score, then you could change the template to pull out the score (which may not even be needed--if so, just drop &quot;_SCORE&quot; from the return value) and write the text to display to the user there (which would be easier to translate if we cared about this).

You can land the patch without this change, but please consider it.

&gt; Websites/bugs.webkit.org/template/en/default/global/user-error.html.tmpl:1468
&gt; +    [% error %]

This should be:

    [% error filter html %]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542131</commentid>
    <comment_count>7</comment_count>
      <attachid>371428</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-06-05 13:12:38 -0700</bug_when>
    <thetext>Comment on attachment 371428
Patch

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

&gt;&gt; Websites/bugs.webkit.org/template/en/default/global/user-error.html.tmpl:1468
&gt;&gt; +    [% error %]
&gt; 
&gt; This should be:
&gt; 
&gt;     [% error filter html %]

If you make the other change, you can just put the literal text here like this:

    The password is too weak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542145</commentid>
    <comment_count>8</comment_count>
      <attachid>371435</attachid>
    <who name="lingho@apple.com">lingho</who>
    <bug_when>2019-06-05 13:37:41 -0700</bug_when>
    <thetext>Created attachment 371435
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542159</commentid>
    <comment_count>9</comment_count>
      <attachid>371436</attachid>
    <who name="lingho@apple.com">lingho</who>
    <bug_when>2019-06-05 14:06:31 -0700</bug_when>
    <thetext>Created attachment 371436
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542163</commentid>
    <comment_count>10</comment_count>
    <who name="lingho@apple.com">lingho</who>
    <bug_when>2019-06-05 14:10:20 -0700</bug_when>
    <thetext>- Added &quot;FILTER html&quot; to [% error %]
- Keeping the way message is displayed because it will relay warning message string generated by the zxcvbn module. Removed the trailing period since the string could be empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542287</commentid>
    <comment_count>11</comment_count>
      <attachid>371436</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-06-05 20:15:52 -0700</bug_when>
    <thetext>Comment on attachment 371436
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542288</commentid>
    <comment_count>12</comment_count>
      <attachid>371436</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-05 20:20:05 -0700</bug_when>
    <thetext>Comment on attachment 371436
Patch

Clearing flags on attachment: 371436

Committed r246140: &lt;https://trac.webkit.org/changeset/246140&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542289</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-05 20:20:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542290</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-06-05 20:22:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/51467679&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370985</attachid>
            <date>2019-05-30 15:30:32 -0700</date>
            <delta_ts>2019-05-30 16:38:19 -0700</delta_ts>
            <desc>Added option to select zxcvbn password estimator</desc>
            <filename>User.pm</filename>
            <type>text/plain</type>
            <size>109674</size>
            <attacher name="Ling Ho">lingcherd_ho</attacher>
            
              <data encoding="base64">IyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1v
emlsbGEgUHVibGljCiMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMg
bm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwojIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBo
dHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uCiMKIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMg
IkluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlcyIsIGFzCiMgZGVmaW5lZCBieSB0
aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSwgdi4gMi4wLgoKcGFja2FnZSBCdWd6aWxsYTo6VXNl
cjsKCnVzZSA1LjEwLjE7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBCdWd6aWxsYTo6
RXJyb3I7CnVzZSBCdWd6aWxsYTo6VXRpbDsKdXNlIEJ1Z3ppbGxhOjpDb25zdGFudHM7CnVzZSBC
dWd6aWxsYTo6U2VhcmNoOjpSZWNlbnQ7CnVzZSBCdWd6aWxsYTo6VXNlcjo6U2V0dGluZzsKdXNl
IEJ1Z3ppbGxhOjpQcm9kdWN0Owp1c2UgQnVnemlsbGE6OkNsYXNzaWZpY2F0aW9uOwp1c2UgQnVn
emlsbGE6OkZpZWxkOwp1c2UgQnVnemlsbGE6Okdyb3VwOwp1c2UgQnVnemlsbGE6OkJ1Z1VzZXJM
YXN0VmlzaXQ7CnVzZSBCdWd6aWxsYTo6SG9vazsKCnVzZSBEYXRlVGltZTo6VGltZVpvbmU7CnVz
ZSBMaXN0OjpVdGlsIHF3KG1heCk7CnVzZSBMaXN0OjpNb3JlVXRpbHMgcXcoYW55KTsKdXNlIFNj
YWxhcjo6VXRpbCBxdyhibGVzc2VkKTsKdXNlIFN0b3JhYmxlIHF3KGRjbG9uZSk7CnVzZSBVUkk7
CnVzZSBVUkk6OlF1ZXJ5UGFyYW07Cgp1c2UgRGF0YTo6UGFzc3dvcmQ6Onp4Y3ZibiAncGFzc3dv
cmRfc3RyZW5ndGgnOyAjV0VCS0lUX0NIQU5HRVMKCnVzZSBwYXJlbnQgcXcoQnVnemlsbGE6Ok9i
amVjdCBFeHBvcnRlcik7CkBCdWd6aWxsYTo6VXNlcjo6RVhQT1JUID0gcXcoaXNfYXZhaWxhYmxl
X3VzZXJuYW1lCiAgICBsb2dpbl90b19pZCB2YWxpZGF0ZV9wYXNzd29yZCB2YWxpZGF0ZV9wYXNz
d29yZF9jaGVjawogICAgVVNFUl9NQVRDSF9NVUxUSVBMRSBVU0VSX01BVENIX0ZBSUxFRCBVU0VS
X01BVENIX1NVQ0NFU1MKICAgIE1BVENIX1NLSVBfQ09ORklSTQopOwoKIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMg
Q29uc3RhbnRzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKdXNlIGNvbnN0YW50IFVTRVJfTUFUQ0hfTVVMVElQTEUg
PT4gLTE7CnVzZSBjb25zdGFudCBVU0VSX01BVENIX0ZBSUxFRCAgID0+IDA7CnVzZSBjb25zdGFu
dCBVU0VSX01BVENIX1NVQ0NFU1MgID0+IDE7Cgp1c2UgY29uc3RhbnQgTUFUQ0hfU0tJUF9DT05G
SVJNICA9PiAxOwoKdXNlIGNvbnN0YW50IERFRkFVTFRfVVNFUiA9PiB7CiAgICAndXNlcmlkJyAg
ICAgICAgID0+IDAsCiAgICAncmVhbG5hbWUnICAgICAgID0+ICcnLAogICAgJ2xvZ2luX25hbWUn
ICAgICA9PiAnJywKICAgICdzaG93bXlidWdzbGluaycgPT4gMCwKICAgICdkaXNhYmxlZHRleHQn
ICAgPT4gJycsCiAgICAnZGlzYWJsZV9tYWlsJyAgID0+IDAsCiAgICAnaXNfZW5hYmxlZCcgICAg
ID0+IDEsIAp9OwoKdXNlIGNvbnN0YW50IERCX1RBQkxFID0+ICdwcm9maWxlcyc7CgojIFhYWCBO
b3RlIHRoYXQgQnVnemlsbGE6OlVzZXItPm5hbWUgZG9lcyBub3QgcmV0dXJuIHRoZSBzYW1lIHRo
aW5nCiMgdGhhdCB5b3UgcGFzc2VkIGluIGZvciAibmFtZSIgdG8gbmV3KCkuIFRoYXQncyBiZWNh
dXNlIGhpc3RvcmljYWxseQojIEJ1Z3ppbGxhOjpVc2VyIHVzZWQgIm5hbWUiIGZvciB0aGUgcmVh
bG5hbWUgZmllbGQuIFRoaXMgc2hvdWxkIGJlCiMgZml4ZWQgb25lIGRheS4Kc3ViIERCX0NPTFVN
TlMgewogICAgbXkgJGRiaCA9IEJ1Z3ppbGxhLT5kYmg7CiAgICByZXR1cm4gKAogICAgICAgICdw
cm9maWxlcy51c2VyaWQnLAogICAgICAgICdwcm9maWxlcy5sb2dpbl9uYW1lJywKICAgICAgICAn
cHJvZmlsZXMucmVhbG5hbWUnLAogICAgICAgICdwcm9maWxlcy5teWJ1Z3NsaW5rIEFTIHNob3dt
eWJ1Z3NsaW5rJywKICAgICAgICAncHJvZmlsZXMuZGlzYWJsZWR0ZXh0JywKICAgICAgICAncHJv
ZmlsZXMuZGlzYWJsZV9tYWlsJywKICAgICAgICAncHJvZmlsZXMuZXh0ZXJuX2lkJywKICAgICAg
ICAncHJvZmlsZXMuaXNfZW5hYmxlZCcsCiAgICAgICAgJGRiaC0+c3FsX2RhdGVfZm9ybWF0KCds
YXN0X3NlZW5fZGF0ZScsICclWS0lbS0lZCcpIC4gJyBBUyBsYXN0X3NlZW5fZGF0ZScsCiAgICAp
LAp9Cgp1c2UgY29uc3RhbnQgTkFNRV9GSUVMRCA9PiAnbG9naW5fbmFtZSc7CnVzZSBjb25zdGFu
dCBJRF9GSUVMRCAgID0+ICd1c2VyaWQnOwp1c2UgY29uc3RhbnQgTElTVF9PUkRFUiA9PiBOQU1F
X0ZJRUxEOwoKdXNlIGNvbnN0YW50IFZBTElEQVRPUlMgPT4gewogICAgY3J5cHRwYXNzd29yZCA9
PiBcJl9jaGVja19wYXNzd29yZCwKICAgIGRpc2FibGVfbWFpbCAgPT4gXCZfY2hlY2tfZGlzYWJs
ZV9tYWlsLAogICAgZGlzYWJsZWR0ZXh0ICA9PiBcJl9jaGVja19kaXNhYmxlZHRleHQsCiAgICBs
b2dpbl9uYW1lICAgID0+IFwmY2hlY2tfbG9naW5fbmFtZSwKICAgIHJlYWxuYW1lICAgICAgPT4g
XCZfY2hlY2tfcmVhbG5hbWUsCiAgICBleHRlcm5faWQgICAgID0+IFwmX2NoZWNrX2V4dGVybl9p
ZCwKICAgIGlzX2VuYWJsZWQgICAgPT4gXCZfY2hlY2tfaXNfZW5hYmxlZCwgCn07CgpzdWIgVVBE
QVRFX0NPTFVNTlMgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIG15IEBjb2xzID0gcXcoCiAg
ICAgICAgZGlzYWJsZV9tYWlsCiAgICAgICAgZGlzYWJsZWR0ZXh0CiAgICAgICAgbG9naW5fbmFt
ZQogICAgICAgIHJlYWxuYW1lCiAgICAgICAgZXh0ZXJuX2lkCiAgICAgICAgaXNfZW5hYmxlZAog
ICAgKTsKICAgIHB1c2goQGNvbHMsICdjcnlwdHBhc3N3b3JkJykgaWYgZXhpc3RzICRzZWxmLT57
Y3J5cHRwYXNzd29yZH07CiAgICByZXR1cm4gQGNvbHM7Cn07Cgp1c2UgY29uc3RhbnQgVkFMSURB
VE9SX0RFUEVOREVOQ0lFUyA9PiB7CiAgICBpc19lbmFibGVkID0+IFsnZGlzYWJsZWR0ZXh0J10s
IAp9OwoKdXNlIGNvbnN0YW50IEVYVFJBX1JFUVVJUkVEX0ZJRUxEUyA9PiBxdyhpc19lbmFibGVk
KTsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgRnVuY3Rpb25zCiMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCgpzdWIgbmV3IHsKICAgIG15ICRpbnZvY2FudCA9IHNoaWZ0OwogICAgbXkgJGNsYXNz
ID0gcmVmKCRpbnZvY2FudCkgfHwgJGludm9jYW50OwogICAgbXkgKCRwYXJhbSkgPSBAXzsKCiAg
ICBteSAkdXNlciA9IHsgJXsgREVGQVVMVF9VU0VSKCkgfSB9OwogICAgYmxlc3MgKCR1c2VyLCAk
Y2xhc3MpOwogICAgcmV0dXJuICR1c2VyIHVubGVzcyAkcGFyYW07CgogICAgaWYgKHJlZigkcGFy
YW0pIGVxICdIQVNIJykgewogICAgICAgIGlmIChkZWZpbmVkICRwYXJhbS0+e2V4dGVybl9pZH0p
IHsKICAgICAgICAgICAgJHBhcmFtID0geyBjb25kaXRpb24gPT4gJ2V4dGVybl9pZCA9ID8nICwg
dmFsdWVzID0+IFskcGFyYW0tPntleHRlcm5faWR9XSB9OwogICAgICAgICAgICAkX1swXSA9ICRw
YXJhbTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gJGNsYXNzLT5TVVBFUjo6bmV3KEBfKTsK
fQoKc3ViIHN1cGVyX3VzZXIgewogICAgbXkgJGludm9jYW50ID0gc2hpZnQ7CiAgICBteSAkY2xh
c3MgPSByZWYoJGludm9jYW50KSB8fCAkaW52b2NhbnQ7CiAgICBteSAoJHBhcmFtKSA9IEBfOwoK
ICAgIG15ICR1c2VyID0geyAleyBERUZBVUxUX1VTRVIoKSB9IH07CiAgICAkdXNlci0+e2dyb3Vw
c30gPSBbQnVnemlsbGE6Okdyb3VwLT5nZXRfYWxsXTsKICAgICR1c2VyLT57Ymxlc3NfZ3JvdXBz
fSA9IFtCdWd6aWxsYTo6R3JvdXAtPmdldF9hbGxdOwogICAgYmxlc3MgJHVzZXIsICRjbGFzczsK
ICAgIHJldHVybiAkdXNlcjsKfQoKc3ViIF91cGRhdGVfZ3JvdXBzIHsKICAgIG15ICRzZWxmID0g
c2hpZnQ7CiAgICBteSAkZ3JvdXBfY2hhbmdlcyA9IHNoaWZ0OwogICAgbXkgJGNoYW5nZXMgPSBz
aGlmdDsKICAgIG15ICRkYmggPSBCdWd6aWxsYS0+ZGJoOwoKICAgICMgVXBkYXRlIGdyb3VwIHNl
dHRpbmdzLgogICAgbXkgJHN0aF9hZGRfbWFwcGluZyA9ICRkYmgtPnByZXBhcmUoCiAgICAgICAg
cXF7SU5TRVJUIElOVE8gdXNlcl9ncm91cF9tYXAgKAogICAgICAgICAgICAgICAgICB1c2VyX2lk
LCBncm91cF9pZCwgaXNibGVzcywgZ3JhbnRfdHlwZQogICAgICAgICAgICAgICAgICkgVkFMVUVT
ICgKICAgICAgICAgICAgICAgICAgPywgPywgPywgPwogICAgICAgICAgICAgICAgICkKICAgICAg
ICAgIH0pOwogICAgbXkgJHN0aF9yZW1vdmVfbWFwcGluZyA9ICRkYmgtPnByZXBhcmUoCiAgICAg
ICAgcXF7REVMRVRFIEZST00gdXNlcl9ncm91cF9tYXAKICAgICAgICAgICAgV0hFUkUgdXNlcl9p
ZCA9ID8KICAgICAgICAgICAgICBBTkQgZ3JvdXBfaWQgPSA/CiAgICAgICAgICAgICAgQU5EIGlz
Ymxlc3MgPSA/CiAgICAgICAgICAgICAgQU5EIGdyYW50X3R5cGUgPSA/CiAgICAgICAgICB9KTsK
CiAgICBmb3JlYWNoIG15ICRpc19ibGVzcyAoa2V5cyAlJGdyb3VwX2NoYW5nZXMpIHsKICAgICAg
ICBteSAoJHJlbW92ZWQsICRhZGRlZCkgPSBAeyRncm91cF9jaGFuZ2VzLT57JGlzX2JsZXNzfX07
CgogICAgICAgIGZvcmVhY2ggbXkgJGdyb3VwIChAJHJlbW92ZWQpIHsKICAgICAgICAgICAgJHN0
aF9yZW1vdmVfbWFwcGluZy0+ZXhlY3V0ZSgKICAgICAgICAgICAgICAgICRzZWxmLT5pZCwgJGdy
b3VwLT5pZCwgJGlzX2JsZXNzLCBHUkFOVF9ESVJFQ1QKICAgICAgICAgICAgICk7CiAgICAgICAg
fQogICAgICAgIGZvcmVhY2ggbXkgJGdyb3VwIChAJGFkZGVkKSB7CiAgICAgICAgICAgICRzdGhf
YWRkX21hcHBpbmctPmV4ZWN1dGUoCiAgICAgICAgICAgICAgICAkc2VsZi0+aWQsICRncm91cC0+
aWQsICRpc19ibGVzcywgR1JBTlRfRElSRUNUCiAgICAgICAgICAgICApOwogICAgICAgIH0KCiAg
ICAgICAgaWYgKCEgJGlzX2JsZXNzKSB7CiAgICAgICAgICAgIG15ICRxdWVyeSA9IHFxewogICAg
ICAgICAgICAgICAgSU5TRVJUIElOVE8gcHJvZmlsZXNfYWN0aXZpdHkKICAgICAgICAgICAgICAg
ICAgICAodXNlcmlkLCB3aG8sIHByb2ZpbGVzX3doZW4sIGZpZWxkaWQsIG9sZHZhbHVlLCBuZXd2
YWx1ZSkKICAgICAgICAgICAgICAgIFZBTFVFUyAoID8sID8sIG5vdygpLCA/LCA/LCA/KQogICAg
ICAgICAgICB9OwoKICAgICAgICAgICAgJGRiaC0+ZG8oCiAgICAgICAgICAgICAgICAkcXVlcnks
IHVuZGVmLAogICAgICAgICAgICAgICAgJHNlbGYtPmlkLCBCdWd6aWxsYS0+dXNlci0+aWQsCiAg
ICAgICAgICAgICAgICBnZXRfZmllbGRfaWQoJ2J1Z19ncm91cCcpLAogICAgICAgICAgICAgICAg
am9pbignLCAnLCBtYXAgeyAkXy0+bmFtZSB9IEAkcmVtb3ZlZCksCiAgICAgICAgICAgICAgICBq
b2luKCcsICcsIG1hcCB7ICRfLT5uYW1lIH0gQCRhZGRlZCkKICAgICAgICAgICAgKTsKICAgICAg
ICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgWFhYOiBzaG91bGQgY3JlYXRlIHByb2Zp
bGVzX2FjdGl2aXR5IGVudHJpZXMgZm9yIGJsZXNzZXIgY2hhbmdlcy4KICAgICAgICB9CgogICAg
ICAgIEJ1Z3ppbGxhLT5tZW1jYWNoZWQtPmNsZWFyX2NvbmZpZyh7IGtleSA9PiAndXNlcl9ncm91
cHMuJyAuICRzZWxmLT5pZCB9KTsKCiAgICAgICAgbXkgJHR5cGUgPSAkaXNfYmxlc3MgPyAnYmxl
c3NfZ3JvdXBzJyA6ICdncm91cHMnOwogICAgICAgICRjaGFuZ2VzLT57JHR5cGV9ID0gWwogICAg
ICAgICAgICBbIG1hcCB7ICRfLT5uYW1lIH0gQCRyZW1vdmVkIF0sCiAgICAgICAgICAgIFsgbWFw
IHsgJF8tPm5hbWUgfSBAJGFkZGVkIF0sCiAgICAgICAgXTsKICAgIH0KfQoKc3ViIHVwZGF0ZSB7
CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgbXkgJG9wdGlvbnMgPSBzaGlmdDsKCiAgICBteSAk
Z3JvdXBfY2hhbmdlcyA9IGRlbGV0ZSAkc2VsZi0+e19ncm91cF9jaGFuZ2VzfTsKCiAgICBteSAk
Y2hhbmdlcyA9ICRzZWxmLT5TVVBFUjo6dXBkYXRlKEBfKTsKICAgIG15ICRkYmggPSBCdWd6aWxs
YS0+ZGJoOwogICAgJHNlbGYtPl91cGRhdGVfZ3JvdXBzKCRncm91cF9jaGFuZ2VzLCAkY2hhbmdl
cyk7CgogICAgaWYgKGV4aXN0cyAkY2hhbmdlcy0+e2xvZ2luX25hbWV9KSB7CiAgICAgICAgIyBE
ZWxldGUgYWxsIHRoZSB0b2tlbnMgcmVsYXRlZCB0byB0aGUgdXNlcmlkCiAgICAgICAgJGRiaC0+
ZG8oJ0RFTEVURSBGUk9NIHRva2VucyBXSEVSRSB1c2VyaWQgPSA/JywgdW5kZWYsICRzZWxmLT5p
ZCkKICAgICAgICAgIHVubGVzcyAkb3B0aW9ucy0+e2tlZXBfdG9rZW5zfTsKICAgICAgICAjIEFu
ZCByZWRlcml2ZSByZWdleCBncm91cHMKICAgICAgICAkc2VsZi0+ZGVyaXZlX3JlZ2V4cF9ncm91
cHMoKTsKICAgIH0KCiAgICAjIExvZ291dCB0aGUgdXNlciBpZiBuZWNlc3NhcnkuCiAgICBCdWd6
aWxsYS0+bG9nb3V0X3VzZXIoJHNlbGYpIAogICAgICAgIGlmICghJG9wdGlvbnMtPntrZWVwX3Nl
c3Npb259CiAgICAgICAgICAgICYmIChleGlzdHMgJGNoYW5nZXMtPntsb2dpbl9uYW1lfQogICAg
ICAgICAgICAgICAgfHwgZXhpc3RzICRjaGFuZ2VzLT57ZGlzYWJsZWR0ZXh0fQogICAgICAgICAg
ICAgICAgfHwgZXhpc3RzICRjaGFuZ2VzLT57Y3J5cHRwYXNzd29yZH0pKTsKCiAgICAjIFhYWCBD
YW4gdXBkYXRlIHByb2ZpbGVzX2FjdGl2aXR5IGhlcmUgYXMgc29vbiBhcyBpdCB1bmRlcnN0YW5k
cwogICAgIyAgICAgZmllbGQgbmFtZXMgbGlrZSBsb2dpbl9uYW1lLgogICAgCiAgICByZXR1cm4g
JGNoYW5nZXM7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVmFsaWRhdG9ycwojIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIwoKc3ViIF9jaGVja19kaXNhYmxlX21haWwgeyByZXR1cm4gJF9bMV0g
PyAxIDogMDsgfQpzdWIgX2NoZWNrX2Rpc2FibGVkdGV4dCB7IHJldHVybiB0cmltKCRfWzFdKSB8
fCAnJzsgfQoKIyBDaGVjayB3aGV0aGVyIHRoZSBleHRlcm5faWQgaXMgdW5pcXVlLgpzdWIgX2No
ZWNrX2V4dGVybl9pZCB7CiAgICBteSAoJGludm9jYW50LCAkZXh0ZXJuX2lkKSA9IEBfOwogICAg
JGV4dGVybl9pZCA9IHRyaW0oJGV4dGVybl9pZCk7CiAgICByZXR1cm4gdW5kZWYgdW5sZXNzIGRl
ZmluZWQoJGV4dGVybl9pZCkgJiYgJGV4dGVybl9pZCBuZSAiIjsKICAgIGlmICghcmVmKCRpbnZv
Y2FudCkgfHwgJGludm9jYW50LT5leHRlcm5faWQgbmUgJGV4dGVybl9pZCkgewogICAgICAgIG15
ICRleGlzdGluZ19sb2dpbiA9ICRpbnZvY2FudC0+bmV3KHsgZXh0ZXJuX2lkID0+ICRleHRlcm5f
aWQgfSk7CiAgICAgICAgaWYgKCRleGlzdGluZ19sb2dpbikgewogICAgICAgICAgICBUaHJvd1Vz
ZXJFcnJvciggJ2V4dGVybl9pZF9leGlzdHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyBleHRlcm5faWQgPT4gJGV4dGVybl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhpc3RpbmdfbG9naW5fbmFtZSA9PiAkZXhpc3RpbmdfbG9naW4tPmxvZ2luIH0pOwogICAgICAg
IH0KICAgIH0KICAgIHJldHVybiAkZXh0ZXJuX2lkOwp9CgojIFRoaXMgaXMgcHVibGljIHNpbmNl
IGNyZWF0ZWFjY291bnQuY2dpIG5lZWRzIHRvIHVzZSBpdCBiZWZvcmUgaXNzdWluZwojIGEgdG9r
ZW4gZm9yIGFjY291bnQgY3JlYXRpb24uCnN1YiBjaGVja19sb2dpbl9uYW1lIHsKICAgIG15ICgk
aW52b2NhbnQsICRuYW1lKSA9IEBfOwogICAgJG5hbWUgPSB0cmltKCRuYW1lKTsKICAgICRuYW1l
IHx8IFRocm93VXNlckVycm9yKCd1c2VyX2xvZ2luX3JlcXVpcmVkJyk7CiAgICBjaGVja19lbWFp
bF9zeW50YXgoJG5hbWUpOwoKICAgICMgQ2hlY2sgdGhlIG5hbWUgaWYgaXQncyBhIG5ldyB1c2Vy
LCBvciBpZiB3ZSdyZSBjaGFuZ2luZyB0aGUgbmFtZS4KICAgIGlmICghcmVmKCRpbnZvY2FudCkg
fHwgbGMoJGludm9jYW50LT5sb2dpbikgbmUgbGMoJG5hbWUpKSB7CiAgICAgICAgbXkgQHBhcmFt
cyA9ICgkbmFtZSk7CiAgICAgICAgcHVzaChAcGFyYW1zLCAkaW52b2NhbnQtPmxvZ2luKSBpZiBy
ZWYoJGludm9jYW50KTsKICAgICAgICBpc19hdmFpbGFibGVfdXNlcm5hbWUoQHBhcmFtcykKICAg
ICAgICAgICAgfHwgVGhyb3dVc2VyRXJyb3IoJ2FjY291bnRfZXhpc3RzJywgeyBlbWFpbCA9PiAk
bmFtZSB9KTsKICAgIH0KCiAgICByZXR1cm4gJG5hbWU7Cn0KCnN1YiBfY2hlY2tfcGFzc3dvcmQg
ewogICAgbXkgKCRzZWxmLCAkcGFzcykgPSBAXzsKCiAgICAjIElmIHRoZSBwYXNzd29yZCBpcyAn
KicsIGRvIG5vdCBlbmNyeXB0IGl0IG9yIHZhbGlkYXRlIGl0IGZ1cnRoZXItLXdlIAogICAgIyBh
cmUgY3JlYXRpbmcgYSB1c2VyIHdobyBzaG91bGQgbm90IGJlIGFibGUgdG8gbG9nIGluIHVzaW5n
IERCIAogICAgIyBhdXRoZW50aWNhdGlvbi4KICAgIHJldHVybiAkcGFzcyBpZiAkcGFzcyBlcSAn
Kic7CgogICAgdmFsaWRhdGVfcGFzc3dvcmQoJHBhc3MpOwogICAgbXkgJGNyeXB0cGFzc3dvcmQg
PSBiel9jcnlwdCgkcGFzcyk7CiAgICByZXR1cm4gJGNyeXB0cGFzc3dvcmQ7Cn0KCnN1YiBfY2hl
Y2tfcmVhbG5hbWUgeyByZXR1cm4gdHJpbSgkX1sxXSkgfHwgJyc7IH0KCnN1YiBfY2hlY2tfaXNf
ZW5hYmxlZCB7CiAgICBteSAoJGludm9jYW50LCAkaXNfZW5hYmxlZCwgdW5kZWYsICRwYXJhbXMp
ID0gQF87CiAgICAjIGlzX2VuYWJsZWQgaXMgc2V0IGF1dG9tYXRpY2FsbHkgb24gY3JlYXRpb24g
ZGVwZW5kaW5nIG9uIHdoZXRoZXIgCiAgICAjIGRpc2FibGVkdGV4dCBpcyBlbXB0eSAoZW5hYmxl
ZCkgb3Igbm90IGVtcHR5IChkaXNhYmxlZCkuCiAgICAjIFdoZW4gdXBkYXRpbmcgdGhlIHVzZXIs
IGlzX2VuYWJsZWQgaXMgc2V0IGJ5IGNhbGxpbmcgc2V0X2Rpc2FibGVkdGV4dCgpLgogICAgIyBB
bnkgdmFsdWUgcGFzc2VkIGludG8gdGhpcyB2YWxpZGF0b3IgaXMgaWdub3JlZC4KICAgIG15ICRk
aXNhYmxlZHRleHQgPSByZWYoJGludm9jYW50KSA/ICRpbnZvY2FudC0+ZGlzYWJsZWR0ZXh0IDog
JHBhcmFtcy0+e2Rpc2FibGVkdGV4dH07CiAgICByZXR1cm4gJGRpc2FibGVkdGV4dCA/IDAgOiAx
Owp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIE11dGF0b3JzCiMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCgpzdWIgc2V0X2Rpc2FibGVfbWFpbCAgeyAkX1swXS0+c2V0KCdkaXNhYmxlX21haWwn
LCAkX1sxXSk7IH0Kc3ViIHNldF9lbWFpbF9lbmFibGVkIHsgJF9bMF0tPnNldCgnZGlzYWJsZV9t
YWlsJywgISRfWzFdKTsgfQpzdWIgc2V0X2V4dGVybl9pZCAgICAgeyAkX1swXS0+c2V0KCdleHRl
cm5faWQnLCAkX1sxXSk7IH0KCnN1YiBzZXRfbG9naW4gewogICAgbXkgKCRzZWxmLCAkbG9naW4p
ID0gQF87CiAgICAkc2VsZi0+c2V0KCdsb2dpbl9uYW1lJywgJGxvZ2luKTsKICAgIGRlbGV0ZSAk
c2VsZi0+e2lkZW50aXR5fTsKICAgIGRlbGV0ZSAkc2VsZi0+e25pY2t9Owp9CgpzdWIgc2V0X25h
bWUgewogICAgbXkgKCRzZWxmLCAkbmFtZSkgPSBAXzsKICAgICRzZWxmLT5zZXQoJ3JlYWxuYW1l
JywgJG5hbWUpOwogICAgZGVsZXRlICRzZWxmLT57aWRlbnRpdHl9Owp9CgpzdWIgc2V0X3Bhc3N3
b3JkIHsgJF9bMF0tPnNldCgnY3J5cHRwYXNzd29yZCcsICRfWzFdKTsgfQoKc3ViIHNldF9kaXNh
YmxlZHRleHQgewogICAgJF9bMF0tPnNldCgnZGlzYWJsZWR0ZXh0JywgJF9bMV0pOwogICAgJF9b
MF0tPnNldCgnaXNfZW5hYmxlZCcsICRfWzFdID8gMCA6IDEpOwp9CgpzdWIgc2V0X2dyb3VwcyB7
CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgJHNlbGYtPl9zZXRfZ3JvdXBzKEdST1VQX01FTUJF
UlNISVAsIEBfKTsKfQoKc3ViIHNldF9ibGVzc19ncm91cHMgewogICAgbXkgJHNlbGYgPSBzaGlm
dDsKCiAgICAjIFRoZSBwZXJzb24gbWFraW5nIHRoZSBjaGFuZ2UgbmVlZHMgdG8gYmUgaW4gdGhl
IGVkaXR1c2VycyBncm91cAogICAgQnVnemlsbGEtPnVzZXItPmluX2dyb3VwKCdlZGl0dXNlcnMn
KQogICAgICAgIHx8IFRocm93VXNlckVycm9yKCJhdXRoX2ZhaWx1cmUiLCB7Z3JvdXAgID0+ICJl
ZGl0dXNlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVh
c29uID0+ICJjYW50X2JsZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFjdGlvbiA9PiAiZWRpdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3QgPT4gInVzZXJzIn0pOwoKICAgICRzZWxmLT5fc2V0X2dyb3VwcyhH
Uk9VUF9CTEVTUywgQF8pOwp9CgpzdWIgX3NldF9ncm91cHMgewogICAgbXkgJHNlbGYgICAgID0g
c2hpZnQ7CiAgICBteSAkaXNfYmxlc3MgPSBzaGlmdDsKICAgIG15ICRjaGFuZ2VzICA9IHNoaWZ0
OwogICAgbXkgJGRiaCA9IEJ1Z3ppbGxhLT5kYmg7CgogICAgIyBUaGUgcGVyc29uIG1ha2luZyB0
aGUgY2hhbmdlIGlzICR1c2VyLCAkc2VsZiBpcyB0aGUgcGVyc29uIGJlaW5nIGNoYW5nZWQKICAg
IG15ICR1c2VyID0gQnVnemlsbGEtPnVzZXI7CgogICAgIyBJbnB1dCBpcyBhIGhhc2ggb2YgYXJy
YXlzLiBLZXkgaXMgJ3NldCcsICdhZGQnIG9yICdyZW1vdmUnLiBUaGUgYXJyYXkKICAgICMgaXMg
YSBsaXN0IG9mIGdyb3VwIGlkcyBhbmQvb3IgbmFtZXMuCgogICAgIyBGaXJzdCB0dXJuIHRoZSBh
cnJheXMgaW50byBncm91cCBvYmplY3RzLgogICAgJGNoYW5nZXMgPSAkc2VsZi0+X3NldF9ncm91
cHNfdG9fb2JqZWN0KCRjaGFuZ2VzKTsKCiAgICAjIEdldCBhIGxpc3Qgb2YgdGhlIGdyb3VwcyB0
aGUgdXNlciBjdXJyZW50bHkgaXMgYSBtZW1iZXIgb2YKICAgIG15ICRpZHMgPSAkZGJoLT5zZWxl
Y3Rjb2xfYXJyYXlyZWYoCiAgICAgICAgcXtTRUxFQ1QgRElTVElOQ1QgZ3JvdXBfaWQKICAgICAg
ICAgICAgRlJPTSB1c2VyX2dyb3VwX21hcAogICAgICAgICAgIFdIRVJFIHVzZXJfaWQgPSA/IEFO
RCBpc2JsZXNzID0gPyBBTkQgZ3JhbnRfdHlwZSA9ID99LAogICAgICAgIHVuZGVmLCAkc2VsZi0+
aWQsICRpc19ibGVzcywgR1JBTlRfRElSRUNUKTsKCiAgICBteSAkY3VycmVudF9ncm91cHMgPSBC
dWd6aWxsYTo6R3JvdXAtPm5ld19mcm9tX2xpc3QoJGlkcyk7CiAgICBteSAkbmV3X2dyb3VwcyA9
IGRjbG9uZSgkY3VycmVudF9ncm91cHMpOwoKICAgICMgUmVjb3JkIHRoZSBjaGFuZ2VzCiAgICBp
ZiAoZXhpc3RzICRjaGFuZ2VzLT57c2V0fSkgewogICAgICAgICRuZXdfZ3JvdXBzID0gJGNoYW5n
ZXMtPntzZXR9OwoKICAgICAgICAjIFdlIG5lZWQgdG8gY2hlY2sgdGhlIHVzZXIgaGFzIGJsZXNz
IHJpZ2h0cyBvbiB0aGUgZXhpc3RpbmcgZ3JvdXBzCiAgICAgICAgIyBJZiB0aGV5IGRvbid0LCB0
aGVuIHdlIG5lZWQgdG8gYWRkIHRoZW0gYmFjayB0byBuZXdfZ3JvdXBzCiAgICAgICAgZm9yZWFj
aCBteSAkZ3JvdXAgKEAkY3VycmVudF9ncm91cHMpIHsKICAgICAgICAgICAgaWYgKCEgJHVzZXIt
PmNhbl9ibGVzcygkZ3JvdXAtPmlkKSkgewogICAgICAgICAgICAgICAgcHVzaCBAJG5ld19ncm91
cHMsICRncm91cAogICAgICAgICAgICAgICAgICAgIHVubGVzcyBncmVwIHsgJF8tPmlkIGVxICRn
cm91cC0+aWQgfSBAJG5ld19ncm91cHM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAg
ICBlbHNlIHsKICAgICAgICBmb3JlYWNoIG15ICRncm91cCAoQHskY2hhbmdlcy0+e3JlbW92ZX0g
Ly8gW119KSB7CiAgICAgICAgICAgIEAkbmV3X2dyb3VwcyA9IGdyZXAgeyAkXy0+aWQgbmUgJGdy
b3VwLT5pZCB9IEAkbmV3X2dyb3VwczsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCBteSAkZ3Jv
dXAgKEB7JGNoYW5nZXMtPnthZGR9IC8vIFtdfSkgewogICAgICAgICAgICBwdXNoIEAkbmV3X2dy
b3VwcywgJGdyb3VwCiAgICAgICAgICAgICAgICB1bmxlc3MgZ3JlcCB7ICRfLT5pZCBlcSAkZ3Jv
dXAtPmlkIH0gQCRuZXdfZ3JvdXBzOwogICAgICAgIH0KICAgIH0KCiAgICAjIFN0YXNoIHRoZSBj
aGFuZ2VzLCBzbyBzZWxmLT51cGRhdGUgY2FuIGFjdHVhbGx5IG1ha2UgdGhlbQogICAgbXkgQGRp
ZmZzID0gZGlmZl9hcnJheXMoJGN1cnJlbnRfZ3JvdXBzLCAkbmV3X2dyb3VwcywgJ2lkJyk7CiAg
ICBpZiAoc2NhbGFyKEB7JGRpZmZzWzBdfSkgfHwgc2NhbGFyKEB7JGRpZmZzWzFdfSkpIHsKICAg
ICAgICAkc2VsZi0+e19ncm91cF9jaGFuZ2VzfXskaXNfYmxlc3N9ID0gXEBkaWZmczsKICAgIH0K
fQoKc3ViIF9zZXRfZ3JvdXBzX3RvX29iamVjdCB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAg
bXkgJGNoYW5nZXMgPSBzaGlmdDsKICAgIG15ICR1c2VyID0gQnVnemlsbGEtPnVzZXI7CgogICAg
Zm9yZWFjaCBteSAka2V5IChrZXlzICUkY2hhbmdlcykgewogICAgICAgICMgQ2hlY2sgd2Ugd2Vy
ZSBnaXZlbiBhbiBhcnJheQogICAgICAgIHVubGVzcyAocmVmKCRjaGFuZ2VzLT57JGtleX0pIGVx
ICdBUlJBWScpIHsKICAgICAgICAgICAgVGhyb3dDb2RlRXJyb3IoCiAgICAgICAgICAgICAgICAn
cGFyYW1faW52YWxpZCcsCiAgICAgICAgICAgICAgICB7IHBhcmFtID0+ICRjaGFuZ2VzLT57JGtl
eX0sIGZ1bmN0aW9uID0+ICRrZXkgfQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAg
IyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgYW5kIHR1cm4gaXRlbXMgaW50byBncm91cCBvYmplY3Rz
CiAgICAgICAgbXkgQGdyb3VwcyA9ICgpOwogICAgICAgIGZvcmVhY2ggbXkgJHZhbHVlIChAeyRj
aGFuZ2VzLT57JGtleX19KSB7CiAgICAgICAgICAgIG15ICR0eXBlID0gJHZhbHVlID1+IC9eXGQr
JC8gPyAnaWQnIDogJ25hbWUnOwogICAgICAgICAgICBteSAkZ3JvdXAgPSBCdWd6aWxsYTo6R3Jv
dXAtPm5ldyh7JHR5cGUgPT4gJHZhbHVlfSk7CgogICAgICAgICAgICBpZiAoISAkZ3JvdXAgfHwg
ISAkdXNlci0+Y2FuX2JsZXNzKCRncm91cC0+aWQpKSB7CiAgICAgICAgICAgICAgICBUaHJvd1Vz
ZXJFcnJvcignYXV0aF9mYWlsdXJlJywKICAgICAgICAgICAgICAgICAgICB7IGdyb3VwICA9PiAk
dmFsdWUsIHJlYXNvbiA9PiAnY2FudF9ibGVzcycsCiAgICAgICAgICAgICAgICAgICAgICBhY3Rp
b24gPT4gJ2VkaXQnLCBvYmplY3QgPT4gJ3VzZXJzJyB9KTsKICAgICAgICAgICAgfQogICAgICAg
ICAgICBwdXNoIEBncm91cHMsICRncm91cDsKICAgICAgICB9CiAgICAgICAgJGNoYW5nZXMtPnsk
a2V5fSA9IFxAZ3JvdXBzOwogICAgfQoKICAgIHJldHVybiAkY2hhbmdlczsKfQoKc3ViIHVwZGF0
ZV9sYXN0X3NlZW5fZGF0ZSB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgcmV0dXJuIHVubGVz
cyAkc2VsZi0+aWQ7CiAgICBteSAkZGJoID0gQnVnemlsbGEtPmRiaDsKICAgIG15ICRkYXRlID0g
JGRiaC0+c2VsZWN0cm93X2FycmF5KAogICAgICAgICdTRUxFQ1QgJyAuICRkYmgtPnNxbF9kYXRl
X2Zvcm1hdCgnTk9XKCknLCAnJVktJW0tJWQnKSk7CgogICAgaWYgKCEkc2VsZi0+bGFzdF9zZWVu
X2RhdGUgb3IgJGRhdGUgbmUgJHNlbGYtPmxhc3Rfc2Vlbl9kYXRlKSB7CiAgICAgICAgJHNlbGYt
PntsYXN0X3NlZW5fZGF0ZX0gPSAkZGF0ZTsKICAgICAgICAjIFdlIGRvbid0IHVzZSB0aGUgbm9y
bWFsIHVwZGF0ZSgpIHJvdXRpbmUgaGVyZSBhcyB3ZSBvbmx5CiAgICAgICAgIyB3YW50IHRvIHVw
ZGF0ZSB0aGUgbGFzdF9zZWVuX2RhdGUgY29sdW1uLCBub3QgYW55IG90aGVyCiAgICAgICAgIyBw
ZW5kaW5nIGNoYW5nZXMKICAgICAgICAkZGJoLT5kbygiVVBEQVRFIHByb2ZpbGVzIFNFVCBsYXN0
X3NlZW5fZGF0ZSA9ID8gV0hFUkUgdXNlcmlkID0gPyIsCiAgICAgICAgICAgICAgICAgdW5kZWYs
ICRkYXRlLCAkc2VsZi0+aWQpOwogICAgICAgIEJ1Z3ppbGxhLT5tZW1jYWNoZWQtPmNsZWFyKHsg
dGFibGUgPT4gJ3Byb2ZpbGVzJywgaWQgPT4gJHNlbGYtPmlkIH0pOwogICAgfQp9CgojIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIwojIE1ldGhvZHMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgQWNj
ZXNzb3JzIGZvciB1c2VyIGF0dHJpYnV0ZXMKc3ViIG5hbWUgIHsgJF9bMF0tPntyZWFsbmFtZX07
ICAgfQpzdWIgbG9naW4geyAkX1swXS0+e2xvZ2luX25hbWV9OyB9CnN1YiBleHRlcm5faWQgeyAk
X1swXS0+e2V4dGVybl9pZH07IH0Kc3ViIGVtYWlsIHsgJF9bMF0tPmxvZ2luIC4gQnVnemlsbGEt
PnBhcmFtcy0+eydlbWFpbHN1ZmZpeCd9OyB9CnN1YiBkaXNhYmxlZHRleHQgeyAkX1swXS0+eydk
aXNhYmxlZHRleHQnfTsgfQpzdWIgaXNfZW5hYmxlZCB7ICRfWzBdLT57J2lzX2VuYWJsZWQnfSA/
IDEgOiAwOyB9CnN1YiBzaG93bXlidWdzbGluayB7ICRfWzBdLT57c2hvd215YnVnc2xpbmt9OyB9
CnN1YiBlbWFpbF9kaXNhYmxlZCB7ICRfWzBdLT57ZGlzYWJsZV9tYWlsfTsgfQpzdWIgZW1haWxf
ZW5hYmxlZCB7ICEoJF9bMF0tPntkaXNhYmxlX21haWx9KTsgfQpzdWIgbGFzdF9zZWVuX2RhdGUg
eyAkX1swXS0+e2xhc3Rfc2Vlbl9kYXRlfTsgfQpzdWIgY3J5cHRwYXNzd29yZCB7CiAgICBteSAk
c2VsZiA9IHNoaWZ0OwogICAgIyBXZSBkb24ndCBzdG9yZSBpdCBiZWNhdXNlIHdlIG5ldmVyIHdh
bnQgaXQgaW4gdGhlIG9iamVjdCAod2UKICAgICMgZG9uJ3Qgd2FudCB0byBhY2NpZGVudGFsbHkg
ZHVtcCBldmVuIHRoZSBoYXNoIHNvbWV3aGVyZSkuCiAgICBteSAoJHB3KSA9IEJ1Z3ppbGxhLT5k
YmgtPnNlbGVjdHJvd19hcnJheSgKICAgICAgICAnU0VMRUNUIGNyeXB0cGFzc3dvcmQgRlJPTSBw
cm9maWxlcyBXSEVSRSB1c2VyaWQgPSA/JywKICAgICAgICB1bmRlZiwgJHNlbGYtPmlkKTsKICAg
IHJldHVybiAkcHc7Cn0KCnN1YiBzZXRfYXV0aG9yaXplciB7CiAgICBteSAoJHNlbGYsICRhdXRo
b3JpemVyKSA9IEBfOwogICAgJHNlbGYtPnthdXRob3JpemVyfSA9ICRhdXRob3JpemVyOwp9CnN1
YiBhdXRob3JpemVyIHsKICAgIG15ICgkc2VsZikgPSBAXzsKICAgIGlmICghJHNlbGYtPnthdXRo
b3JpemVyfSkgewogICAgICAgIHJlcXVpcmUgQnVnemlsbGE6OkF1dGg7CiAgICAgICAgJHNlbGYt
PnthdXRob3JpemVyfSA9IG5ldyBCdWd6aWxsYTo6QXV0aCgpOwogICAgfQogICAgcmV0dXJuICRz
ZWxmLT57YXV0aG9yaXplcn07Cn0KCiMgR2VuZXJhdGUgYSBzdHJpbmcgdG8gaWRlbnRpZnkgdGhl
IHVzZXIgYnkgbmFtZSArIGxvZ2luIGlmIHRoZSB1c2VyCiMgaGFzIGEgbmFtZSBvciBieSBsb2dp
biBvbmx5IGlmIHRoZXkgZG9uJ3QuCnN1YiBpZGVudGl0eSB7CiAgICBteSAkc2VsZiA9IHNoaWZ0
OwoKICAgIHJldHVybiAiIiB1bmxlc3MgJHNlbGYtPmlkOwoKICAgIGlmICghZGVmaW5lZCAkc2Vs
Zi0+e2lkZW50aXR5fSkgewogICAgICAgICRzZWxmLT57aWRlbnRpdHl9ID0gCiAgICAgICAgICAk
c2VsZi0+bmFtZSA/ICRzZWxmLT5uYW1lIC4gIiA8IiAuICRzZWxmLT5sb2dpbi4gIj4iIDogJHNl
bGYtPmxvZ2luOwogICAgfQoKICAgIHJldHVybiAkc2VsZi0+e2lkZW50aXR5fTsKfQoKc3ViIG5p
Y2sgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICByZXR1cm4gIiIgdW5sZXNzICRzZWxmLT5p
ZDsKCiAgICBpZiAoIWRlZmluZWQgJHNlbGYtPntuaWNrfSkgewogICAgICAgICRzZWxmLT57bmlj
a30gPSAoc3BsaXQoL0AvLCAkc2VsZi0+bG9naW4sIDIpKVswXTsKICAgIH0KCiAgICByZXR1cm4g
JHNlbGYtPntuaWNrfTsKfQoKc3ViIHF1ZXJpZXMgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAg
IHJldHVybiAkc2VsZi0+e3F1ZXJpZXN9IGlmIGRlZmluZWQgJHNlbGYtPntxdWVyaWVzfTsKICAg
IHJldHVybiBbXSB1bmxlc3MgJHNlbGYtPmlkOwoKICAgIG15ICRkYmggPSBCdWd6aWxsYS0+ZGJo
OwogICAgbXkgJHF1ZXJ5X2lkcyA9ICRkYmgtPnNlbGVjdGNvbF9hcnJheXJlZigKICAgICAgICAn
U0VMRUNUIGlkIEZST00gbmFtZWRxdWVyaWVzIFdIRVJFIHVzZXJpZCA9ID8nLCB1bmRlZiwgJHNl
bGYtPmlkKTsKICAgIHJlcXVpcmUgQnVnemlsbGE6OlNlYXJjaDo6U2F2ZWQ7CiAgICAkc2VsZi0+
e3F1ZXJpZXN9ID0gQnVnemlsbGE6OlNlYXJjaDo6U2F2ZWQtPm5ld19mcm9tX2xpc3QoJHF1ZXJ5
X2lkcyk7CgogICAgIyBXZSBwcmVsb2FkIGxpbmtfaW5fZm9vdGVyIGZyb20gaGVyZSBhcyB0aGlz
IGluZm9ybWF0aW9uIGlzIGFsd2F5cyByZXF1ZXN0ZWQuCiAgICAjIFRoaXMgb25seSB3b3JrcyBp
ZiB0aGUgdXNlciBvYmplY3QgcmVwcmVzZW50cyB0aGUgY3VycmVudCBsb2dnZWQgaW4gdXNlci4K
ICAgIEJ1Z3ppbGxhOjpTZWFyY2g6OlNhdmVkOjpwcmVsb2FkKCRzZWxmLT57cXVlcmllc30pIGlm
ICRzZWxmLT5pZCA9PSBCdWd6aWxsYS0+dXNlci0+aWQ7CgogICAgcmV0dXJuICRzZWxmLT57cXVl
cmllc307Cn0KCnN1YiBxdWVyaWVzX3N1YnNjcmliZWQgewogICAgbXkgJHNlbGYgPSBzaGlmdDsK
ICAgIHJldHVybiAkc2VsZi0+e3F1ZXJpZXNfc3Vic2NyaWJlZH0gaWYgZGVmaW5lZCAkc2VsZi0+
e3F1ZXJpZXNfc3Vic2NyaWJlZH07CiAgICByZXR1cm4gW10gdW5sZXNzICRzZWxmLT5pZDsKCiAg
ICAjIEV4Y2x1ZGUgdGhlIHVzZXIncyBvd24gcXVlcmllcy4KICAgIG15IEBteV9xdWVyeV9pZHMg
PSBtYXAoJF8tPmlkLCBAeyRzZWxmLT5xdWVyaWVzfSk7CiAgICBteSAkcXVlcnlfaWRfc3RyaW5n
ID0gam9pbignLCcsIEBteV9xdWVyeV9pZHMpIHx8ICctMSc7CgogICAgIyBPbmx5IHNob3cgc3Vi
c2NyaXB0aW9ucyB0aGF0IHdlIGNhbiBzdGlsbCBhY3R1YWxseSBzZWUuIElmIGEKICAgICMgdXNl
ciBjaGFuZ2VzIHRoZSBzaGFyZWQgZ3JvdXAgb2YgYSBxdWVyeSwgb3VyIHN1YnNjcmlwdGlvbgog
ICAgIyB3aWxsIHJlbWFpbiBidXQgd2Ugd29uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHF1ZXJ5IGFu
eW1vcmUuCiAgICBteSAkc3Vic2NyaWJlZF9xdWVyeV9pZHMgPSBCdWd6aWxsYS0+ZGJoLT5zZWxl
Y3Rjb2xfYXJyYXlyZWYoCiAgICAgICAgIlNFTEVDVCBsaWYubmFtZWRxdWVyeV9pZAogICAgICAg
ICAgIEZST00gbmFtZWRxdWVyaWVzX2xpbmtfaW5fZm9vdGVyIGxpZgogICAgICAgICAgICAgICAg
SU5ORVIgSk9JTiBuYW1lZHF1ZXJ5X2dyb3VwX21hcCBuZ20KICAgICAgICAgICAgICAgIE9OIG5n
bS5uYW1lZHF1ZXJ5X2lkID0gbGlmLm5hbWVkcXVlcnlfaWQKICAgICAgICAgIFdIRVJFIGxpZi51
c2VyX2lkID0gPyAKICAgICAgICAgICAgICAgIEFORCBsaWYubmFtZWRxdWVyeV9pZCBOT1QgSU4g
KCRxdWVyeV9pZF9zdHJpbmcpCiAgICAgICAgICAgICAgICBBTkQgIiAuICRzZWxmLT5ncm91cHNf
aW5fc3FsLAogICAgICAgICAgdW5kZWYsICRzZWxmLT5pZCk7CiAgICByZXF1aXJlIEJ1Z3ppbGxh
OjpTZWFyY2g6OlNhdmVkOwogICAgJHNlbGYtPntxdWVyaWVzX3N1YnNjcmliZWR9ID0KICAgICAg
ICBCdWd6aWxsYTo6U2VhcmNoOjpTYXZlZC0+bmV3X2Zyb21fbGlzdCgkc3Vic2NyaWJlZF9xdWVy
eV9pZHMpOwogICAgcmV0dXJuICRzZWxmLT57cXVlcmllc19zdWJzY3JpYmVkfTsKfQoKc3ViIHF1
ZXJpZXNfYXZhaWxhYmxlIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gJHNlbGYt
PntxdWVyaWVzX2F2YWlsYWJsZX0gaWYgZGVmaW5lZCAkc2VsZi0+e3F1ZXJpZXNfYXZhaWxhYmxl
fTsKICAgIHJldHVybiBbXSB1bmxlc3MgJHNlbGYtPmlkOwoKICAgICMgRXhjbHVkZSB0aGUgdXNl
cidzIG93biBxdWVyaWVzLgogICAgbXkgQG15X3F1ZXJ5X2lkcyA9IG1hcCgkXy0+aWQsIEB7JHNl
bGYtPnF1ZXJpZXN9KTsKICAgIG15ICRxdWVyeV9pZF9zdHJpbmcgPSBqb2luKCcsJywgQG15X3F1
ZXJ5X2lkcykgfHwgJy0xJzsKCiAgICBteSAkYXZhaWxfcXVlcnlfaWRzID0gQnVnemlsbGEtPmRi
aC0+c2VsZWN0Y29sX2FycmF5cmVmKAogICAgICAgICdTRUxFQ1QgbmFtZWRxdWVyeV9pZCBGUk9N
IG5hbWVkcXVlcnlfZ3JvdXBfbWFwCiAgICAgICAgICBXSEVSRSAnICAuICRzZWxmLT5ncm91cHNf
aW5fc3FsIC4gIgogICAgICAgICAgICAgICAgQU5EIG5hbWVkcXVlcnlfaWQgTk9UIElOICgkcXVl
cnlfaWRfc3RyaW5nKSIpOwogICAgcmVxdWlyZSBCdWd6aWxsYTo6U2VhcmNoOjpTYXZlZDsKICAg
ICRzZWxmLT57cXVlcmllc19hdmFpbGFibGV9ID0KICAgICAgICBCdWd6aWxsYTo6U2VhcmNoOjpT
YXZlZC0+bmV3X2Zyb21fbGlzdCgkYXZhaWxfcXVlcnlfaWRzKTsKICAgIHJldHVybiAkc2VsZi0+
e3F1ZXJpZXNfYXZhaWxhYmxlfTsKfQoKc3ViIHRhZ3MgewogICAgbXkgJHNlbGYgPSBzaGlmdDsK
ICAgIG15ICRkYmggPSBCdWd6aWxsYS0+ZGJoOwoKICAgIGlmICghZGVmaW5lZCAkc2VsZi0+e3Rh
Z3N9KSB7CiAgICAgICAgIyBXZSBtdXN0IHVzZSBMRUZUIEpPSU4gaW5zdGVhZCBvZiBJTk5FUiBK
T0lOIGFzIHdlIG1heSBiZQogICAgICAgICMgaW4gdGhlIHByb2Nlc3Mgb2YgaW5zZXJ0aW5nIGEg
bmV3IHRhZyB0byBzb21lIGJ1Z3MsCiAgICAgICAgIyBpbiB3aGljaCBjYXNlIHRoZXJlIGFyZSBu
byBidWdzIHdpdGggdGhpcyB0YWcgeWV0LgogICAgICAgICRzZWxmLT57dGFnc30gPSAkZGJoLT5z
ZWxlY3RhbGxfaGFzaHJlZigKICAgICAgICAgICAgJ1NFTEVDVCBuYW1lLCBpZCwgQ09VTlQoYnVn
X2lkKSBBUyBidWdfY291bnQKICAgICAgICAgICAgICAgRlJPTSB0YWcKICAgICAgICAgIExFRlQg
Sk9JTiBidWdfdGFnIE9OIGJ1Z190YWcudGFnX2lkID0gdGFnLmlkCiAgICAgICAgICAgICAgV0hF
UkUgdXNlcl9pZCA9ID8gJyAuICRkYmgtPnNxbF9ncm91cF9ieSgnaWQnLCAnbmFtZScpLAogICAg
ICAgICAgICAnbmFtZScsIHVuZGVmLCAkc2VsZi0+aWQpOwogICAgfQogICAgcmV0dXJuICRzZWxm
LT57dGFnc307Cn0KCnN1YiBidWdzX2lnbm9yZWQgewogICAgbXkgKCRzZWxmKSA9IEBfOwogICAg
bXkgJGRiaCA9IEJ1Z3ppbGxhLT5kYmg7CiAgICBpZiAoIWRlZmluZWQgJHNlbGYtPnsnYnVnc19p
Z25vcmVkJ30pIHsKICAgICAgICAkc2VsZi0+eydidWdzX2lnbm9yZWQnfSA9ICRkYmgtPnNlbGVj
dGFsbF9hcnJheXJlZigKICAgICAgICAgICAgJ1NFTEVDVCBidWdzLmJ1Z19pZCBBUyBpZCwKICAg
ICAgICAgICAgICAgICAgICBidWdzLmJ1Z19zdGF0dXMgQVMgc3RhdHVzLAogICAgICAgICAgICAg
ICAgICAgIGJ1Z3Muc2hvcnRfZGVzYyBBUyBzdW1tYXJ5CiAgICAgICAgICAgICAgIEZST00gYnVn
cwogICAgICAgICAgICAgICAgICAgIElOTkVSIEpPSU4gZW1haWxfYnVnX2lnbm9yZQogICAgICAg
ICAgICAgICAgICAgIE9OIGJ1Z3MuYnVnX2lkID0gZW1haWxfYnVnX2lnbm9yZS5idWdfaWQKICAg
ICAgICAgICAgICBXSEVSRSB1c2VyX2lkID0gPycsCiAgICAgICAgICAgIHsgU2xpY2UgPT4ge30g
fSwgJHNlbGYtPmlkKTsKICAgICAgICAjIEdvIGFoZWFkIGFuZCBsb2FkIHRoZXNlIGludG8gdGhl
IHZpc2libGUgYnVncyBjYWNoZQogICAgICAgICMgdG8gc3BlZWQgdXAgY2FuX3NlZV9idWcgY2hl
Y2tzIGxhdGVyCiAgICAgICAgJHNlbGYtPnZpc2libGVfYnVncyhbIG1hcCB7ICRfLT57J2lkJ30g
fSBAeyAkc2VsZi0+eydidWdzX2lnbm9yZWQnfSB9IF0pOwogICAgfQogICAgcmV0dXJuICRzZWxm
LT57J2J1Z3NfaWdub3JlZCd9Owp9CgpzdWIgaXNfYnVnX2lnbm9yZWQgewogICAgbXkgKCRzZWxm
LCAkYnVnX2lkKSA9IEBfOwogICAgcmV0dXJuIChncmVwIHskXy0+eydpZCd9ID09ICRidWdfaWR9
IEB7JHNlbGYtPmJ1Z3NfaWdub3JlZH0pID8gMSA6IDA7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCiMgU2F2ZWQgUmVjZW50IEJ1ZyBMaXN0cyAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCgpzdWIgcmVjZW50X3NlYXJjaGVzIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICAkc2Vs
Zi0+e3JlY2VudF9zZWFyY2hlc30gfHw9IAogICAgICAgIEJ1Z3ppbGxhOjpTZWFyY2g6OlJlY2Vu
dC0+bWF0Y2goeyB1c2VyX2lkID0+ICRzZWxmLT5pZCB9KTsKICAgIHJldHVybiAkc2VsZi0+e3Jl
Y2VudF9zZWFyY2hlc307Cn0KCnN1YiByZWNlbnRfc2VhcmNoX2NvbnRhaW5pbmcgewogICAgbXkg
KCRzZWxmLCAkYnVnX2lkKSA9IEBfOwogICAgbXkgJHNlYXJjaGVzID0gJHNlbGYtPnJlY2VudF9z
ZWFyY2hlczsKCiAgICBmb3JlYWNoIG15ICRzZWFyY2ggKEAkc2VhcmNoZXMpIHsKICAgICAgICBy
ZXR1cm4gJHNlYXJjaCBpZiBncmVwKCRfID09ICRidWdfaWQsIEB7ICRzZWFyY2gtPmJ1Z19saXN0
IH0pOwogICAgfQoKICAgIHJldHVybiB1bmRlZjsKfQoKc3ViIHJlY2VudF9zZWFyY2hfZm9yIHsK
ICAgIG15ICgkc2VsZiwgJGJ1ZykgPSBAXzsKICAgIG15ICRwYXJhbXMgPSBCdWd6aWxsYS0+aW5w
dXRfcGFyYW1zOwogICAgbXkgJGNnaSA9IEJ1Z3ppbGxhLT5jZ2k7CgogICAgaWYgKCRzZWxmLT5p
ZCkgewogICAgICAgICMgRmlyc3Qgc2VlIGlmIHRoZXJlJ3MgYSBsaXN0X2lkIHBhcmFtZXRlciBp
biB0aGUgcXVlcnkgc3RyaW5nLgogICAgICAgIG15ICRsaXN0X2lkID0gJHBhcmFtcy0+e2xpc3Rf
aWR9OwogICAgICAgIGlmICghJGxpc3RfaWQpIHsKICAgICAgICAgICAgIyBJZiBub3QsIGNoZWNr
IGZvciAibGlzdF9pZCIgaW4gdGhlIHF1ZXJ5IHN0cmluZyBvZiB0aGUgcmVmZXJlci4KICAgICAg
ICAgICAgbXkgJHJlZmVyZXIgPSAkY2dpLT5yZWZlcmVyOwogICAgICAgICAgICBpZiAoJHJlZmVy
ZXIpIHsKICAgICAgICAgICAgICAgIG15ICR1cmkgPSBVUkktPm5ldygkcmVmZXJlcik7CiAgICAg
ICAgICAgICAgICBpZiAoJHVyaS0+cGF0aCA9fiAvYnVnbGlzdFwuY2dpJC8pIHsKICAgICAgICAg
ICAgICAgICAgICAkbGlzdF9pZCA9ICR1cmktPnF1ZXJ5X3BhcmFtKCdsaXN0X2lkJykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR1cmktPnF1ZXJ5X3BhcmFtKCdyZWdldGxhc3Rs
aXN0Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
IGlmICgkbGlzdF9pZCAmJiAkbGlzdF9pZCBuZSAnY29va2llJykgewogICAgICAgICAgICAjIElm
IHdlIGdvdCBhIGJhZCBsaXN0X2lkIChlaXRoZXIgc29tZSBvdGhlciB1c2VyJ3Mgb3IgYW4gZXhw
aXJlZAogICAgICAgICAgICAjIG9uZSkgZG9uJ3QgY3Jhc2gsIGp1c3QgZG9uJ3QgcmV0dXJuIHRo
YXQgbGlzdC4KICAgICAgICAgICAgbXkgJHNlYXJjaCA9IEJ1Z3ppbGxhOjpTZWFyY2g6OlJlY2Vu
dC0+Y2hlY2tfcXVpZXRseSgKICAgICAgICAgICAgICAgIHsgaWQgPT4gJGxpc3RfaWQgfSk7CiAg
ICAgICAgICAgIHJldHVybiAkc2VhcmNoIGlmICRzZWFyY2g7CiAgICAgICAgfQoKICAgICAgICAj
IElmIHRoZXJlJ3Mgbm8gbGlzdF9pZCwgc2VlIGlmIHRoZSBjdXJyZW50IGJ1ZydzIGlkIGlzIGNv
bnRhaW5lZAogICAgICAgICMgaW4gYW55IG9mIHRoZSB1c2VyJ3Mgc2F2ZWQgbGlzdHMuCiAgICAg
ICAgbXkgJHNlYXJjaCA9ICRzZWxmLT5yZWNlbnRfc2VhcmNoX2NvbnRhaW5pbmcoJGJ1Zy0+aWQp
OwogICAgICAgIHJldHVybiAkc2VhcmNoIGlmICRzZWFyY2g7CiAgICB9CgogICAgIyBGaW5hbGx5
IChvciBhbHdheXMsIGlmIHdlJ3JlIGxvZ2dlZCBvdXQpLCBpZiB0aGVyZSdzIGEgQlVHTElTVCBj
b29raWUKICAgICMgYW5kIHRoZSBzZWxlY3RlZCBidWcgaXMgaW4gdGhlIGxpc3QsIHRoZW4gcmV0
dXJuIHRoZSBjb29raWUgYXMgYSBmYWtlCiAgICAjIFNlYXJjaDo6UmVjZW50IG9iamVjdC4KICAg
IGlmIChteSAkbGlzdCA9ICRjZ2ktPmNvb2tpZSgnQlVHTElTVCcpKSB7CiAgICAgICAgIyBBbHNv
IHNwbGl0IG9uIGNvbG9ucywgd2hpY2ggd2FzIHVzZWQgYXMgYSBzZXBhcmF0b3IgaW4gb2xkIGNv
b2tpZXMuCiAgICAgICAgbXkgQGJ1Z19pZHMgPSBzcGxpdCgvWzotXS8sICRsaXN0KTsKICAgICAg
ICBpZiAoZ3JlcCB7ICRfID09ICRidWctPmlkIH0gQGJ1Z19pZHMpIHsKICAgICAgICAgICAgbXkg
JHNlYXJjaCA9IEJ1Z3ppbGxhOjpTZWFyY2g6OlJlY2VudC0+bmV3X2Zyb21fY29va2llKFxAYnVn
X2lkcyk7CiAgICAgICAgICAgIHJldHVybiAkc2VhcmNoOwogICAgICAgIH0KICAgIH0KCiAgICBy
ZXR1cm4gdW5kZWY7Cn0KCnN1YiBzYXZlX2xhc3Rfc2VhcmNoIHsKICAgIG15ICgkc2VsZiwgJHBh
cmFtcykgPSBAXzsKICAgIG15ICgkYnVnX2lkcywgJG9yZGVyLCAkdmFycywgJGxpc3RfaWQpID0g
CiAgICAgICAgQCRwYXJhbXN7cXcoYnVncyBvcmRlciB2YXJzIGxpc3RfaWQpfTsKCiAgICBteSAk
Y2dpID0gQnVnemlsbGEtPmNnaTsKICAgIGlmICgkb3JkZXIpIHsKICAgICAgICAkY2dpLT5zZW5k
X2Nvb2tpZSgtbmFtZSA9PiAnTEFTVE9SREVSJywKICAgICAgICAgICAgICAgICAgICAgICAgICAt
dmFsdWUgPT4gJG9yZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIC1leHBpcmVzID0+ICdG
cmksIDAxLUphbi0yMDM4IDAwOjAwOjAwIEdNVCcpOwogICAgfQoKICAgIHJldHVybiBpZiAhQCRi
dWdfaWRzOwoKICAgIG15ICRzZWFyY2g7CiAgICBpZiAoJHNlbGYtPmlkKSB7CiAgICAgICAgb25f
bWFpbl9kYiB7CiAgICAgICAgICAgIGlmICgkbGlzdF9pZCkgewogICAgICAgICAgICAgICAgJHNl
YXJjaCA9IEJ1Z3ppbGxhOjpTZWFyY2g6OlJlY2VudC0+Y2hlY2tfcXVpZXRseSh7IGlkID0+ICRs
aXN0X2lkIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHNlYXJjaCkgewogICAg
ICAgICAgICAgICAgaWYgKGpvaW4oJywnLCBAeyRzZWFyY2gtPmJ1Z19saXN0fSkgbmUgam9pbign
LCcsIEAkYnVnX2lkcykpIHsKICAgICAgICAgICAgICAgICAgICAkc2VhcmNoLT5zZXRfYnVnX2xp
c3QoJGJ1Z19pZHMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCEkc2Vh
cmNoLT5saXN0X29yZGVyIHx8ICRvcmRlciBuZSAkc2VhcmNoLT5saXN0X29yZGVyKSB7CiAgICAg
ICAgICAgICAgICAgICAgJHNlYXJjaC0+c2V0X2xpc3Rfb3JkZXIoJG9yZGVyKTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICRzZWFyY2gtPnVwZGF0ZSgpOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyBJZiB3ZSBhbHJlYWR5IGhhdmUg
YW4gZXhpc3Rpbmcgc2VhcmNoIHdpdGggYSB0b3RhbGx5CiAgICAgICAgICAgICAgICAjIGlkZW50
aWNhbCBidWcgbGlzdCwgdGhlbiBkb24ndCBjcmVhdGUgYSBuZXcgb25lLiBUaGlzCiAgICAgICAg
ICAgICAgICAjIHByZXZlbnRzIHBlb3BsZSBmcm9tIHdyaXRpbmcgb3ZlciB0aGVpciB3aG9sZSAK
ICAgICAgICAgICAgICAgICMgcmVjZW50LXNlYXJjaCBsaXN0IGJ5IGp1c3QgcmVmcmVzaGluZyBh
IHNhdmVkIHNlYXJjaAogICAgICAgICAgICAgICAgIyAod2hpY2ggZG9lc24ndCBoYXZlIGxpc3Rf
aWQgaW4gdGhlIGhlYWRlcikgb3ZlciBhbmQgb3Zlci4KICAgICAgICAgICAgICAgIG15ICRsaXN0
X3N0cmluZyA9IGpvaW4oJywnLCBAJGJ1Z19pZHMpOwogICAgICAgICAgICAgICAgbXkgJGV4aXN0
aW5nX3NlYXJjaCA9IEJ1Z3ppbGxhOjpTZWFyY2g6OlJlY2VudC0+bWF0Y2goewogICAgICAgICAg
ICAgICAgICAgIHVzZXJfaWQgPT4gJHNlbGYtPmlkLCBidWdfbGlzdCA9PiAkbGlzdF9zdHJpbmcg
fSk7CiAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXNjYWxhcihAJGV4aXN0aW5nX3Nl
YXJjaCkpIHsKICAgICAgICAgICAgICAgICAgICAkc2VhcmNoID0gQnVnemlsbGE6OlNlYXJjaDo6
UmVjZW50LT5jcmVhdGUoewogICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lkICAgID0+ICRz
ZWxmLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgYnVnX2xpc3QgICA9PiAkYnVnX2lkcywK
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9vcmRlciA9PiAkb3JkZXIgfSk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkc2Vh
cmNoID0gJGV4aXN0aW5nX3NlYXJjaC0+WzBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9CiAgICAgICAgfTsKICAgICAgICBkZWxldGUgJHNlbGYtPntyZWNlbnRfc2VhcmNoZXN9Owog
ICAgfQogICAgIyBMb2dnZWQtb3V0IHVzZXJzIHVzZSBhIGNvb2tpZSB0byBzdG9yZSBhIHNpbmds
ZSBsYXN0IHNlYXJjaC4gV2UgZG9uJ3QKICAgICMgb3ZlcnJpZGUgdGhhdCBjb29raWUgd2l0aCB0
aGUgbG9nZ2VkLWluIHVzZXIncyBsYXRlc3Qgc2VhcmNoLCBiZWNhdXNlCiAgICAjIGlmIHRoZXkg
ZGlkIG9uZSBzZWFyY2ggd2hpbGUgbG9nZ2VkIG91dCBhbmQgYW5vdGhlciB3aGlsZSBsb2dnZWQg
aW4sCiAgICAjIHRoZXkgbWF5IHN0aWxsIHdhbnQgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgc2Vh
cmNoIHRoZXkgbWFkZSB3aGlsZQogICAgIyBsb2dnZWQgb3V0LgogICAgZWxzZSB7CiAgICAgICAg
bXkgJGJ1Z19saXN0ID0gam9pbignLScsIEAkYnVnX2lkcyk7CiAgICAgICAgaWYgKGxlbmd0aCgk
YnVnX2xpc3QpIDwgNDAwMCkgewogICAgICAgICAgICAkY2dpLT5zZW5kX2Nvb2tpZSgtbmFtZSA9
PiAnQlVHTElTVCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC12YWx1ZSA9PiAkYnVn
X2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1leHBpcmVzID0+ICdGcmksIDAx
LUphbi0yMDM4IDAwOjAwOjAwIEdNVCcpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgJGNnaS0+cmVtb3ZlX2Nvb2tpZSgnQlVHTElTVCcpOwogICAgICAgICAgICAkdmFycy0+
eyd0b29sb25nJ30gPSAxOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkc2VhcmNoOwp9Cgpz
dWIgcmVwb3J0cyB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgcmV0dXJuICRzZWxmLT57cmVw
b3J0c30gaWYgZGVmaW5lZCAkc2VsZi0+e3JlcG9ydHN9OwogICAgcmV0dXJuIFtdIHVubGVzcyAk
c2VsZi0+aWQ7CgogICAgbXkgJGRiaCA9IEJ1Z3ppbGxhLT5kYmg7CiAgICBteSAkcmVwb3J0X2lk
cyA9ICRkYmgtPnNlbGVjdGNvbF9hcnJheXJlZigKICAgICAgICAnU0VMRUNUIGlkIEZST00gcmVw
b3J0cyBXSEVSRSB1c2VyX2lkID0gPycsIHVuZGVmLCAkc2VsZi0+aWQpOwogICAgcmVxdWlyZSBC
dWd6aWxsYTo6UmVwb3J0OwogICAgJHNlbGYtPntyZXBvcnRzfSA9IEJ1Z3ppbGxhOjpSZXBvcnQt
Pm5ld19mcm9tX2xpc3QoJHJlcG9ydF9pZHMpOwogICAgcmV0dXJuICRzZWxmLT57cmVwb3J0c307
Cn0KCnN1YiBmbHVzaF9yZXBvcnRzX2NhY2hlIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAg
ZGVsZXRlICRzZWxmLT57cmVwb3J0c307Cn0KCnN1YiBzZXR0aW5ncyB7CiAgICBteSAoJHNlbGYp
ID0gQF87CgogICAgcmV0dXJuICRzZWxmLT57J3NldHRpbmdzJ30gaWYgKGRlZmluZWQgJHNlbGYt
Pnsnc2V0dGluZ3MnfSk7CgogICAgIyBJRiB0aGUgdXNlciBpcyBsb2dnZWQgaW4KICAgICMgVEhF
TiBnZXQgdGhlIHVzZXIncyBzZXR0aW5ncwogICAgIyBFTFNFIGdldCBkZWZhdWx0IHNldHRpbmdz
CiAgICBpZiAoJHNlbGYtPmlkKSB7CiAgICAgICAgJHNlbGYtPnsnc2V0dGluZ3MnfSA9IGdldF9h
bGxfc2V0dGluZ3MoJHNlbGYtPmlkKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHNlbGYtPnsnc2V0
dGluZ3MnfSA9IGdldF9kZWZhdWx0cygpOwogICAgfQoKICAgIHJldHVybiAkc2VsZi0+eydzZXR0
aW5ncyd9Owp9CgpzdWIgc2V0dGluZyB7CiAgICBteSAoJHNlbGYsICRuYW1lKSA9IEBfOwogICAg
cmV0dXJuICRzZWxmLT5zZXR0aW5ncy0+eyRuYW1lfS0+eyd2YWx1ZSd9Owp9CgpzdWIgdGltZXpv
bmUgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICBpZiAoIWRlZmluZWQgJHNlbGYtPnt0aW1l
em9uZX0pIHsKICAgICAgICBteSAkdHogPSAkc2VsZi0+c2V0dGluZygndGltZXpvbmUnKTsKICAg
ICAgICBpZiAoJHR6IGVxICdsb2NhbCcpIHsKICAgICAgICAgICAgIyBUaGUgdXNlciB3YW50cyB0
aGUgbG9jYWwgdGltZXpvbmUgb2YgdGhlIHNlcnZlci4KICAgICAgICAgICAgJHNlbGYtPnt0aW1l
em9uZX0gPSBCdWd6aWxsYS0+bG9jYWxfdGltZXpvbmU7CiAgICAgICAgfQogICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAkc2VsZi0+e3RpbWV6b25lfSA9IERhdGVUaW1lOjpUaW1lWm9uZS0+bmV3
KG5hbWUgPT4gJHR6KTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gJHNlbGYtPnt0aW1lem9u
ZX07Cn0KCnN1YiBmbHVzaF9xdWVyaWVzX2NhY2hlIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7Cgog
ICAgZGVsZXRlICRzZWxmLT57cXVlcmllc307CiAgICBkZWxldGUgJHNlbGYtPntxdWVyaWVzX3N1
YnNjcmliZWR9OwogICAgZGVsZXRlICRzZWxmLT57cXVlcmllc19hdmFpbGFibGV9Owp9CgpzdWIg
Z3JvdXBzIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuICRzZWxmLT57Z3JvdXBz
fSBpZiBkZWZpbmVkICRzZWxmLT57Z3JvdXBzfTsKICAgIHJldHVybiBbXSB1bmxlc3MgJHNlbGYt
PmlkOwoKICAgIG15ICR1c2VyX2dyb3Vwc19rZXkgPSAidXNlcl9ncm91cHMuIiAuICRzZWxmLT5p
ZDsKICAgIG15ICRncm91cHMgPSBCdWd6aWxsYS0+bWVtY2FjaGVkLT5nZXRfY29uZmlnKHsKICAg
ICAgICBrZXkgPT4gJHVzZXJfZ3JvdXBzX2tleQogICAgfSk7CgogICAgaWYgKCEkZ3JvdXBzKSB7
CiAgICAgICAgbXkgJGRiaCA9IEJ1Z3ppbGxhLT5kYmg7CiAgICAgICAgbXkgJGdyb3Vwc190b19j
aGVjayA9ICRkYmgtPnNlbGVjdGNvbF9hcnJheXJlZigKICAgICAgICAgICAgIlNFTEVDVCBESVNU
SU5DVCBncm91cF9pZAogICAgICAgICAgICAgICBGUk9NIHVzZXJfZ3JvdXBfbWFwCiAgICAgICAg
ICAgICAgV0hFUkUgdXNlcl9pZCA9ID8gQU5EIGlzYmxlc3MgPSAwIiwgdW5kZWYsICRzZWxmLT5p
ZCk7CgogICAgICAgIG15ICRncmFudF90eXBlX2tleSA9ICdncm91cF9ncmFudF90eXBlXycgLiBH
Uk9VUF9NRU1CRVJTSElQOwogICAgICAgIG15ICRtZW1iZXJzaGlwX3Jvd3MgPSBCdWd6aWxsYS0+
bWVtY2FjaGVkLT5nZXRfY29uZmlnKHsKICAgICAgICAgICAga2V5ID0+ICRncmFudF90eXBlX2tl
eSwKICAgICAgICB9KTsKICAgICAgICBpZiAoISRtZW1iZXJzaGlwX3Jvd3MpIHsKICAgICAgICAg
ICAgJG1lbWJlcnNoaXBfcm93cyA9ICRkYmgtPnNlbGVjdGFsbF9hcnJheXJlZigKICAgICAgICAg
ICAgICAgICJTRUxFQ1QgRElTVElOQ1QgZ3JhbnRvcl9pZCwgbWVtYmVyX2lkCiAgICAgICAgICAg
ICAgICBGUk9NIGdyb3VwX2dyb3VwX21hcAogICAgICAgICAgICAgICAgV0hFUkUgZ3JhbnRfdHlw
ZSA9ICIgLiBHUk9VUF9NRU1CRVJTSElQKTsKICAgICAgICAgICAgQnVnemlsbGEtPm1lbWNhY2hl
ZC0+c2V0X2NvbmZpZyh7CiAgICAgICAgICAgICAgICBrZXkgID0+ICRncmFudF90eXBlX2tleSwK
ICAgICAgICAgICAgICAgIGRhdGEgPT4gJG1lbWJlcnNoaXBfcm93cywKICAgICAgICAgICAgfSk7
CiAgICAgICAgfQoKICAgICAgICBteSAlZ3JvdXBfbWVtYmVyc2hpcDsKICAgICAgICBmb3JlYWNo
IG15ICRyb3cgKEAkbWVtYmVyc2hpcF9yb3dzKSB7CiAgICAgICAgICAgIG15ICgkZ3JhbnRvcl9p
ZCwgJG1lbWJlcl9pZCkgPSBAJHJvdzsKICAgICAgICAgICAgcHVzaCAoQHsgJGdyb3VwX21lbWJl
cnNoaXB7JG1lbWJlcl9pZH0gfSwgJGdyYW50b3JfaWQpOwogICAgICAgIH0KCiAgICAgICAgIyBM
ZXQncyB3YWxrIHRoZSBncm91cHMgaGllcmFyY2h5IHRyZWUgKHVzaW5nIEZJRk8pCiAgICAgICAg
IyBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uIGl0J3MgcHJlLWZpbGxlZCB3aXRoIGRpcmVjdCBncm91
cHMKICAgICAgICAjIG1lbWJlcnNoaXAuIExhdGVyIG9uLCBlYWNoIGdyb3VwIGNhbiBhZGQgaXRz
IG93biBtZW1iZXJzIGludG8gdGhlCiAgICAgICAgIyBGSUZPLiBDaXJjdWxhciBkZXBlbmRlbmNp
ZXMgYXJlIGVsaW1pbmF0ZWQgYnkgY2hlY2tpbmcKICAgICAgICAjICRjaGVja2VkX2dyb3Vwc3sk
bWVtYmVyX2lkfSBoYXNoIHZhbHVlcy4KICAgICAgICAjIEFzIGEgcmVzdWx0LCAlZ3JvdXBzIHdp
bGwgaGF2ZSBhbGwgdGhlIGdyb3VwcyB3ZSBhcmUgdGhlIG1lbWJlciBvZi4KICAgICAgICBteSAl
Y2hlY2tlZF9ncm91cHM7CiAgICAgICAgbXkgJWdyb3VwczsKICAgICAgICB3aGlsZSAoc2NhbGFy
KEAkZ3JvdXBzX3RvX2NoZWNrKSA+IDApIHsKICAgICAgICAgICAgIyBQb3AgdGhlIGhlYWQgZ3Jv
dXAgZnJvbSBGSUZPCiAgICAgICAgICAgIG15ICRtZW1iZXJfaWQgPSBzaGlmdCBAJGdyb3Vwc190
b19jaGVjazsKCiAgICAgICAgICAgICMgU2tpcCB0aGUgZ3JvdXAgaWYgd2UgaGF2ZSBhbHJlYWR5
IGNoZWNrZWQgaXQKICAgICAgICAgICAgaWYgKCEkY2hlY2tlZF9ncm91cHN7JG1lbWJlcl9pZH0p
IHsKICAgICAgICAgICAgICAgICMgTWFyayBncm91cCBhcyBjaGVja2VkCiAgICAgICAgICAgICAg
ICAkY2hlY2tlZF9ncm91cHN7JG1lbWJlcl9pZH0gPSAxOwoKICAgICAgICAgICAgICAgICMgQWRk
IGFsbCBpdHMgbWVtYmVycyB0byB0aGUgRklGTyBjaGVjayBsaXN0CiAgICAgICAgICAgICAgICAj
ICVncm91cF9tZW1iZXJzaGlwIGNvbnRhaW5zIGFycmF5cyBvZiBncm91cCBtZW1iZXJzCiAgICAg
ICAgICAgICAgICAjIGZvciBhbGwgZ3JvdXBzLiBBY2Nlc3NpYmxlIGJ5IGdyb3VwIG51bWJlci4K
ICAgICAgICAgICAgICAgIG15ICRtZW1iZXJzID0gJGdyb3VwX21lbWJlcnNoaXB7JG1lbWJlcl9p
ZH07CiAgICAgICAgICAgICAgICBteSBAbmV3X3RvX2NoZWNrID0gZ3JlcCghJGNoZWNrZWRfZ3Jv
dXBzeyRffSwgQCRtZW1iZXJzKTsKICAgICAgICAgICAgICAgIHB1c2goQCRncm91cHNfdG9fY2hl
Y2ssIEBuZXdfdG9fY2hlY2spOwoKICAgICAgICAgICAgICAgICRncm91cHN7JG1lbWJlcl9pZH0g
PSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRncm91cHMgPSBbIGtleXMgJWdy
b3VwcyBdOwoKICAgICAgICBCdWd6aWxsYS0+bWVtY2FjaGVkLT5zZXRfY29uZmlnKHsKICAgICAg
ICAgICAga2V5ICA9PiAkdXNlcl9ncm91cHNfa2V5LAogICAgICAgICAgICBkYXRhID0+ICRncm91
cHMsCiAgICAgICAgfSk7CiAgICB9CgogICAgJHNlbGYtPntncm91cHN9ID0gQnVnemlsbGE6Okdy
b3VwLT5uZXdfZnJvbV9saXN0KCRncm91cHMpOwogICAgcmV0dXJuICRzZWxmLT57Z3JvdXBzfTsK
fQoKc3ViIGxhc3RfdmlzaXRlZCB7CiAgICBteSAoJHNlbGYsICRpZHMpID0gQF87CgogICAgcmV0
dXJuIEJ1Z3ppbGxhOjpCdWdVc2VyTGFzdFZpc2l0LT5tYXRjaCh7IHVzZXJfaWQgPT4gJHNlbGYt
PmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZHMg
PyAoIGJ1Z19pZCA9PiAkaWRzICkgOiAoKSB9KTsKfQoKc3ViIGlzX2ludm9sdmVkX2luX2J1ZyB7
CiAgICBteSAoJHNlbGYsICRidWcpID0gQF87CiAgICBteSAkdXNlcl9pZCAgICA9ICRzZWxmLT5p
ZDsKICAgIG15ICR1c2VyX2xvZ2luID0gJHNlbGYtPmxvZ2luOwoKICAgIHJldHVybiB1bmxlc3Mg
JHVzZXJfaWQ7CiAgICByZXR1cm4gMSBpZiAkdXNlcl9pZCA9PSAkYnVnLT5hc3NpZ25lZF90by0+
aWQ7CiAgICByZXR1cm4gMSBpZiAkdXNlcl9pZCA9PSAkYnVnLT5yZXBvcnRlci0+aWQ7CgogICAg
aWYgKEJ1Z3ppbGxhLT5wYXJhbXMtPnsndXNlcWFjb250YWN0J30gYW5kICRidWctPnFhX2NvbnRh
Y3QpIHsKICAgICAgICByZXR1cm4gMSBpZiAkdXNlcl9pZCA9PSAkYnVnLT5xYV9jb250YWN0LT5p
ZDsKICAgIH0KCiAgICByZXR1cm4gYW55IHsgJHVzZXJfbG9naW4gZXEgJF8gfSBAeyAkYnVnLT5j
YyB9Owp9CgojIEl0IHR1cm5zIG91dCB0aGF0IGNhbGxpbmcgLT5pZCBvbiBvYmplY3RzIGEgZmV3
IGh1bmRyZWQgdGhvdXNhbmQKIyB0aW1lcyBpcyBwcmV0dHkgc2xvdy4gKEl0IHNob3dlZCB1cCBh
cyBhIHNpZ25pZmljYW50IHRpbWUgY29udHJpYnV0b3IKIyB3aGVuIHByb2ZpbGluZyB4dC9zZWFy
Y2gudC4pIFNvIHdlIGNhY2hlIHRoZSBncm91cCBpZHMgc2VwYXJhdGVseSBmcm9tCiMgZ3JvdXBz
IGZvciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRoZSBncm91cCBpZHMuCnN1YiBfZ3JvdXBfaWRzIHsK
ICAgIG15ICgkc2VsZikgPSBAXzsKICAgICRzZWxmLT57Z3JvdXBfaWRzfSB8fD0gW21hcCB7ICRf
LT5pZCB9IEB7ICRzZWxmLT5ncm91cHMgfV07CiAgICByZXR1cm4gJHNlbGYtPntncm91cF9pZHN9
Owp9CgpzdWIgZ3JvdXBzX2FzX3N0cmluZyB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgbXkg
JGlkcyA9ICRzZWxmLT5fZ3JvdXBfaWRzOwogICAgcmV0dXJuIHNjYWxhcihAJGlkcykgPyBqb2lu
KCcsJywgQCRpZHMpIDogJy0xJzsKfQoKc3ViIGdyb3Vwc19pbl9zcWwgewogICAgbXkgKCRzZWxm
LCAkZmllbGQpID0gQF87CiAgICAkZmllbGQgfHw9ICdncm91cF9pZCc7CiAgICBteSAkaWRzID0g
JHNlbGYtPl9ncm91cF9pZHM7CiAgICAkaWRzID0gWy0xXSBpZiAhc2NhbGFyIEAkaWRzOwogICAg
cmV0dXJuIEJ1Z3ppbGxhLT5kYmgtPnNxbF9pbigkZmllbGQsICRpZHMpOwp9CgpzdWIgYmxlc3Nf
Z3JvdXBzIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuICRzZWxmLT57J2JsZXNz
X2dyb3Vwcyd9IGlmIGRlZmluZWQgJHNlbGYtPnsnYmxlc3NfZ3JvdXBzJ307CiAgICByZXR1cm4g
W10gdW5sZXNzICRzZWxmLT5pZDsKCiAgICBpZiAoJHNlbGYtPmluX2dyb3VwKCdlZGl0dXNlcnMn
KSkgewogICAgICAgICMgVXNlcnMgaGF2aW5nIGVkaXR1c2VycyBwZXJtaXNzaW9ucyBtYXkgYmxl
c3MgYWxsIGdyb3Vwcy4KICAgICAgICAkc2VsZi0+eydibGVzc19ncm91cHMnfSA9IFtCdWd6aWxs
YTo6R3JvdXAtPmdldF9hbGxdOwogICAgICAgIHJldHVybiAkc2VsZi0+eydibGVzc19ncm91cHMn
fTsKICAgIH0KCiAgICBpZiAoQnVnemlsbGEtPnBhcmFtcy0+e3VzZXZpc2liaWxpdHlncm91cHN9
CiAgICAgICAgJiYgIUB7ICRzZWxmLT52aXNpYmxlX2dyb3Vwc19pbmhlcml0ZWQgfSkgewogICAg
ICAgIHJldHVybiBbXTsKICAgIH0KCiAgICBteSAkZGJoID0gQnVnemlsbGEtPmRiaDsKCiAgICAj
IEdldCBhbGwgZ3JvdXBzIGZvciB0aGUgdXNlciB3aGVyZSB0aGV5IGhhdmUgZGlyZWN0IGJsZXNz
IHByaXZpbGVnZXMuCiAgICBteSAkcXVlcnkgPSAiCiAgICAgICAgU0VMRUNUIERJU1RJTkNUIGdy
b3VwX2lkCiAgICAgICAgICBGUk9NIHVzZXJfZ3JvdXBfbWFwCiAgICAgICAgIFdIRVJFIHVzZXJf
aWQgPSA/CiAgICAgICAgICAgICAgIEFORCBpc2JsZXNzID0gMSI7CiAgICBpZiAoQnVnemlsbGEt
PnBhcmFtcy0+e3VzZXZpc2liaWxpdHlncm91cHN9KSB7CiAgICAgICAgJHF1ZXJ5IC49ICIgQU5E
ICIKICAgICAgICAgICAgLiAkZGJoLT5zcWxfaW4oJ2dyb3VwX2lkJywgJHNlbGYtPnZpc2libGVf
Z3JvdXBzX2luaGVyaXRlZCk7CiAgICB9CgogICAgIyBHZXQgYWxsIGdyb3VwcyBmb3IgdGhlIHVz
ZXIgd2hlcmUgdGhleSBhcmUgYSBtZW1iZXIgb2YgYSBncm91cCB0aGF0CiAgICAjIGluaGVyaXRz
IGJsZXNzIHByaXZzLgogICAgbXkgQGdyb3VwX2lkcyA9IG1hcCB7ICRfLT5pZCB9IEB7ICRzZWxm
LT5ncm91cHMgfTsKICAgIGlmIChAZ3JvdXBfaWRzKSB7CiAgICAgICAgJHF1ZXJ5IC49ICIKICAg
ICAgICAgICAgVU5JT04KICAgICAgICAgICAgU0VMRUNUIERJU1RJTkNUIGdyYW50b3JfaWQKICAg
ICAgICAgICAgRlJPTSBncm91cF9ncm91cF9tYXAKICAgICAgICAgICAgV0hFUkUgZ3JhbnRfdHlw
ZSA9ICIgLiBHUk9VUF9CTEVTUyAuICIKICAgICAgICAgICAgICAgIEFORCAiIC4gJGRiaC0+c3Fs
X2luKCdtZW1iZXJfaWQnLCBcQGdyb3VwX2lkcyk7CiAgICAgICAgaWYgKEJ1Z3ppbGxhLT5wYXJh
bXMtPnt1c2V2aXNpYmlsaXR5Z3JvdXBzfSkgewogICAgICAgICAgICAkcXVlcnkgLj0gIiBBTkQg
IgogICAgICAgICAgICAgICAgLiAkZGJoLT5zcWxfaW4oJ2dyYW50b3JfaWQnLCAkc2VsZi0+dmlz
aWJsZV9ncm91cHNfaW5oZXJpdGVkKTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJGlkcyA9ICRk
YmgtPnNlbGVjdGNvbF9hcnJheXJlZigkcXVlcnksIHVuZGVmLCAkc2VsZi0+aWQpOwogICAgcmV0
dXJuICRzZWxmLT57Ymxlc3NfZ3JvdXBzfSA9IEJ1Z3ppbGxhOjpHcm91cC0+bmV3X2Zyb21fbGlz
dCgkaWRzKTsKfQoKc3ViIGluX2dyb3VwIHsKICAgIG15ICgkc2VsZiwgJGdyb3VwLCAkcHJvZHVj
dF9pZCkgPSBAXzsKICAgICRncm91cCA9ICRncm91cC0+bmFtZSBpZiBibGVzc2VkICRncm91cDsK
ICAgIGlmIChzY2FsYXIgZ3JlcCgkXy0+bmFtZSBlcSAkZ3JvdXAsIEB7ICRzZWxmLT5ncm91cHMg
fSkpIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIGVsc2lmICgkcHJvZHVjdF9pZCAmJiBk
ZXRhaW50X25hdHVyYWwoJHByb2R1Y3RfaWQpKSB7CiAgICAgICAgIyBNYWtlIHN1cmUgJGdyb3Vw
IGV4aXN0cyBvbiBhIHBlci1wcm9kdWN0IGJhc2lzLgogICAgICAgIHJldHVybiAwIHVubGVzcyAo
Z3JlcCB7JF8gZXEgJGdyb3VwfSBQRVJfUFJPRFVDVF9QUklWSUxFR0VTKTsKCiAgICAgICAgJHNl
bGYtPnsicHJvZHVjdF8kcHJvZHVjdF9pZCJ9ID0ge30gdW5sZXNzIGV4aXN0cyAkc2VsZi0+eyJw
cm9kdWN0XyRwcm9kdWN0X2lkIn07CiAgICAgICAgaWYgKCFkZWZpbmVkICRzZWxmLT57InByb2R1
Y3RfJHByb2R1Y3RfaWQifS0+eyRncm91cH0pIHsKICAgICAgICAgICAgbXkgJGRiaCA9IEJ1Z3pp
bGxhLT5kYmg7CiAgICAgICAgICAgIG15ICRpbl9ncm91cCA9ICRkYmgtPnNlbGVjdHJvd19hcnJh
eSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNFTEVDVCAxCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZST00gZ3JvdXBfY29udHJvbF9tYXAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXSEVSRSBwcm9kdWN0X2lkID0gPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFORCAkZ3JvdXAgIT0gMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFORCAiIC4gJHNlbGYtPmdyb3Vwc19pbl9zcWwgLiAnICcgLgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAkZGJoLT5zcWxfbGltaXQoMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5kZWYsICRwcm9kdWN0X2lkKTsKCiAgICAgICAgICAgICRzZWxmLT57InByb2R1Y3RfJHBy
b2R1Y3RfaWQifS0+eyRncm91cH0gPSAkaW5fZ3JvdXAgPyAxIDogMDsKICAgICAgICB9CiAgICAg
ICAgcmV0dXJuICRzZWxmLT57InByb2R1Y3RfJHByb2R1Y3RfaWQifS0+eyRncm91cH07CiAgICB9
CiAgICAjIElmIHdlIGNvbWUgaGVyZSwgdGhlbiB0aGUgdXNlciBpcyBub3QgaW4gdGhlIHJlcXVl
c3RlZCBncm91cC4KICAgIHJldHVybiAwOwp9CgpzdWIgaW5fZ3JvdXBfaWQgewogICAgbXkgKCRz
ZWxmLCAkaWQpID0gQF87CiAgICByZXR1cm4gZ3JlcCgkXy0+aWQgPT0gJGlkLCBAeyAkc2VsZi0+
Z3JvdXBzIH0pID8gMSA6IDA7Cn0KCiMgVGhpcyBpcyBhIGhlbHBlciB0byBnZXQgYWxsIGdyb3Vw
cyB3aGljaCBoYXZlIGFuIGljb24gdG8gYmUgZGlzcGxheWVkCiMgYmVzaWRlcyB0aGUgbmFtZSBv
ZiB0aGUgY29tbWVudGVyLgpzdWIgZ3JvdXBzX3dpdGhfaWNvbiB7CiAgICBteSAkc2VsZiA9IHNo
aWZ0OwoKICAgIHJldHVybiAkc2VsZi0+e2dyb3Vwc193aXRoX2ljb259IC8vPSBbZ3JlcCB7ICRf
LT5pY29uX3VybCB9IEB7ICRzZWxmLT5ncm91cHMgfV07Cn0KCnN1YiBnZXRfcHJvZHVjdHNfYnlf
cGVybWlzc2lvbiB7CiAgICBteSAoJHNlbGYsICRncm91cCkgPSBAXzsKICAgICMgTWFrZSBzdXJl
ICRncm91cCBleGlzdHMgb24gYSBwZXItcHJvZHVjdCBiYXNpcy4KICAgIHJldHVybiBbXSB1bmxl
c3MgKGdyZXAgeyRfIGVxICRncm91cH0gUEVSX1BST0RVQ1RfUFJJVklMRUdFUyk7CgogICAgbXkg
JHByb2R1Y3RfaWRzID0gQnVnemlsbGEtPmRiaC0+c2VsZWN0Y29sX2FycmF5cmVmKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgRElTVElOQ1QgcHJvZHVjdF9pZAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZST00gZ3JvdXBfY29udHJvbF9tYXAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdIRVJFICRncm91cCAhPSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFORCAiIC4gJHNlbGYtPmdyb3Vwc19pbl9zcWwpOwoKICAgICMgTm8gbmVlZCB0byBnbyBm
dXJ0aGVyIGlmIHRoZSB1c2VyIGhhcyBubyAic3BlY2lhbCIgcHJpdnMuCiAgICByZXR1cm4gW10g
dW5sZXNzIHNjYWxhcihAJHByb2R1Y3RfaWRzKTsKICAgIG15ICVwcm9kdWN0X21hcCA9IG1hcCB7
ICRfID0+IDEgfSBAJHByb2R1Y3RfaWRzOwoKICAgICMgV2Ugd2lsbCByZXN0cmljdCB0aGUgbGlz
dCB0byBwcm9kdWN0cyB0aGUgdXNlciBjYW4gc2VlLgogICAgbXkgJHNlbGVjdGFibGVfcHJvZHVj
dHMgPSAkc2VsZi0+Z2V0X3NlbGVjdGFibGVfcHJvZHVjdHM7CiAgICBteSBAcHJvZHVjdHMgPSBn
cmVwIHsgJHByb2R1Y3RfbWFweyRfLT5pZH0gfSBAJHNlbGVjdGFibGVfcHJvZHVjdHM7CiAgICBy
ZXR1cm4gXEBwcm9kdWN0czsKfQoKc3ViIGNhbl9zZWVfdXNlciB7CiAgICBteSAoJHNlbGYsICRv
dGhlclVzZXIpID0gQF87CiAgICBteSAkcXVlcnk7CgogICAgaWYgKEJ1Z3ppbGxhLT5wYXJhbXMt
PnsndXNldmlzaWJpbGl0eWdyb3Vwcyd9KSB7CiAgICAgICAgIyBJZiB0aGUgdXNlciBjYW4gc2Vl
IG5vIGdyb3VwcywgdGhlbiBubyB1c2VycyBhcmUgdmlzaWJsZSBlaXRoZXIuCiAgICAgICAgbXkg
JHZpc2libGVHcm91cHMgPSAkc2VsZi0+dmlzaWJsZV9ncm91cHNfYXNfc3RyaW5nKCkgfHwgcmV0
dXJuIDA7CiAgICAgICAgJHF1ZXJ5ID0gcXF7U0VMRUNUIENPVU5UKERJU1RJTkNUIHVzZXJpZCkK
ICAgICAgICAgICAgICAgICAgICBGUk9NIHByb2ZpbGVzLCB1c2VyX2dyb3VwX21hcAogICAgICAg
ICAgICAgICAgICAgIFdIRVJFIHVzZXJpZCA9ID8KICAgICAgICAgICAgICAgICAgICBBTkQgdXNl
cl9pZCA9IHVzZXJpZAogICAgICAgICAgICAgICAgICAgIEFORCBpc2JsZXNzID0gMAogICAgICAg
ICAgICAgICAgICAgIEFORCBncm91cF9pZCBJTiAoJHZpc2libGVHcm91cHMpCiAgICAgICAgICAg
ICAgICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgICAkcXVlcnkgPSBxcXtTRUxFQ1QgQ09VTlQo
dXNlcmlkKQogICAgICAgICAgICAgICAgICAgIEZST00gcHJvZmlsZXMKICAgICAgICAgICAgICAg
ICAgICBXSEVSRSB1c2VyaWQgPSA/CiAgICAgICAgICAgICAgICAgICB9OwogICAgfQogICAgcmV0
dXJuIEJ1Z3ppbGxhLT5kYmgtPnNlbGVjdHJvd19hcnJheSgkcXVlcnksIHVuZGVmLCAkb3RoZXJV
c2VyLT5pZCk7Cn0KCnN1YiBjYW5fZWRpdF9wcm9kdWN0IHsKICAgIG15ICgkc2VsZiwgJHByb2Rf
aWQpID0gQF87CiAgICBteSAkZGJoID0gQnVnemlsbGEtPmRiaDsKCiAgICBpZiAoQnVnemlsbGEt
PnBhcmFtcy0+eydvcl9ncm91cHMnfSkgewogICAgICAgIG15ICRncm91cHMgPSAkc2VsZi0+Z3Jv
dXBzX2FzX3N0cmluZzsKICAgICAgICAjIEZvciBvci1ncm91cHMsIHdlIGNoZWNrIGlmIHRoZXJl
IGFyZSBhbnkgY2FuX2VkaXQgZ3JvdXBzIGZvciB0aGUKICAgICAgICAjIHByb2R1Y3QsIGFuZCBp
ZiB0aGUgdXNlciBpcyBpbiBhbnkgb2YgdGhlbS4gSWYgdGhlcmUgYXJlIG5vbmUgb3IKICAgICAg
ICAjIHRoZSB1c2VyIGlzIGluIGF0IGxlYXN0IG9uZSBvZiB0aGVtLCB0aGV5IGNhbiBlZGl0IHRo
ZSBwcm9kdWN0CiAgICAgICAgbXkgKCRjbnRfY2FuX2VkaXQsICRjbnRfZ3JvdXBfbWVtYmVyKSA9
ICRkYmgtPnNlbGVjdHJvd19hcnJheSgKICAgICAgICAgICAiU0VMRUNUIFNVTShwLmNudF9jYW5f
ZWRpdCksCiAgICAgICAgICAgICAgICAgICBTVU0ocC5jbnRfZ3JvdXBfbWVtYmVyKQogICAgICAg
ICAgICAgIEZST00gKFNFTEVDVCBDQVNFIFdIRU4gY2FuZWRpdCA9IDEgVEhFTiAxIEVMU0UgMCBF
TkQgQVMgY250X2Nhbl9lZGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBDQVNFIFdIRU4g
Y2FuZWRpdCA9IDEgQU5EIGdyb3VwX2lkIElOICgkZ3JvdXBzKSBUSEVOIDEgRUxTRSAwIEVORCBB
UyBjbnRfZ3JvdXBfbWVtYmVyCiAgICAgICAgICAgICAgICAgICAgRlJPTSBncm91cF9jb250cm9s
X21hcAogICAgICAgICAgICAgICAgICAgIFdIRVJFIHByb2R1Y3RfaWQgPSAkcHJvZF9pZCkgQVMg
cCIpOwogICAgICAgIHJldHVybiAoISRjbnRfY2FuX2VkaXQgb3IgJGNudF9ncm91cF9tZW1iZXIp
OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgIyBGb3IgYW5kLWdyb3VwcywgYSB1c2VyIG5lZWRz
IHRvIGJlIGluIGFsbCBjYW5lZGl0IGdyb3Vwcy4gVGhlcmVmb3JlCiAgICAgICAgIyBpZiB0aGUg
dXNlciBpcyBub3QgaW4gYSBjYW5fZWRpdCBncm91cCBmb3IgdGhlIHByb2R1Y3QsIHRoZXkgY2Fu
bm90CiAgICAgICAgIyBlZGl0IHRoZSBwcm9kdWN0LgogICAgICAgIG15ICRoYXNfZXh0ZXJuYWxf
Z3JvdXBzID0KICAgICAgICAgICRkYmgtPnNlbGVjdHJvd19hcnJheSgnU0VMRUNUIDEKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGdyb3VwX2NvbnRyb2xfbWFwCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBwcm9kdWN0X2lkID0gPwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgY2FuZWRpdCAhPSAwCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBncm91cF9pZCBOT1QgSU4oJyAuICRzZWxmLT5n
cm91cHNfYXNfc3RyaW5nIC4gJyknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bmRlZiwgJHByb2RfaWQpOwoKICAgICAgICByZXR1cm4gISRoYXNfZXh0ZXJuYWxfZ3JvdXBzOwog
ICAgfQp9CgpzdWIgY2FuX3NlZV9idWcgewogICAgbXkgKCRzZWxmLCAkYnVnX2lkKSA9IEBfOwog
ICAgcmV0dXJuIEB7ICRzZWxmLT52aXNpYmxlX2J1Z3MoWyRidWdfaWRdKSB9ID8gMSA6IDA7Cn0K
CnN1YiB2aXNpYmxlX2J1Z3MgewogICAgbXkgKCRzZWxmLCAkYnVncykgPSBAXzsKICAgICMgQWxs
b3cgdXNlcnMgdG8gcGFzcyBpbiBCdWcgb2JqZWN0cyBhbmQgYnVnIGlkcyBib3RoLgogICAgbXkg
QGJ1Z19pZHMgPSBtYXAgeyBibGVzc2VkICRfID8gJF8tPmlkIDogJF8gfSBAJGJ1Z3M7CgogICAg
IyBXZSBvbmx5IGNoZWNrIHRoZSB2aXNpYmlsaXR5IG9mIGJ1Z3MgdGhhdCB3ZSBoYXZlbid0CiAg
ICAjIGNoZWNrZWQgeWV0LgogICAgIyBCdWd6aWxsYTo6QnVnLT51cGRhdGUgYXV0b21hdGljYWxs
eSByZW1vdmVzIHVwZGF0ZWQgYnVncwogICAgIyBmcm9tIHRoZSBjYWNoZSB0byBmb3JjZSB0aGVt
IHRvIGJlIGNoZWNrZWQgYWdhaW4uCiAgICBteSAkdmlzaWJsZV9jYWNoZSA9ICRzZWxmLT57X3Zp
c2libGVfYnVnc19jYWNoZX0gfHw9IHt9OwogICAgbXkgQGNoZWNrX2lkcyA9IGdyZXAoIWV4aXN0
cyAkdmlzaWJsZV9jYWNoZS0+eyRffSwgQGJ1Z19pZHMpOwoKICAgIGlmIChAY2hlY2tfaWRzKSB7
CiAgICAgICAgZm9yZWFjaCBteSAkaWQgKEBjaGVja19pZHMpIHsKICAgICAgICAgICAgbXkgJG9y
aWdfaWQgPSAkaWQ7CiAgICAgICAgICAgIGRldGFpbnRfbmF0dXJhbCgkaWQpCiAgICAgICAgICAg
ICAgfHwgVGhyb3dDb2RlRXJyb3IoJ3BhcmFtX211c3RfYmVfbnVtZXJpYycsIHsgcGFyYW0gICAg
PT4gJG9yaWdfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gPT4gJ0J1Z3ppbGxhOjpVc2VyLT52aXNpYmxlX2J1Z3Mn
fSk7CiAgICAgICAgfQoKICAgICAgICBCdWd6aWxsYS0+cGFyYW1zLT57J29yX2dyb3Vwcyd9CiAg
ICAgICAgICAgID8gJHNlbGYtPl92aXNpYmxlX2J1Z3NfY2hlY2tfb3IoXEBjaGVja19pZHMpCiAg
ICAgICAgICAgIDogJHNlbGYtPl92aXNpYmxlX2J1Z3NfY2hlY2tfYW5kKFxAY2hlY2tfaWRzKTsK
ICAgIH0KCiAgICByZXR1cm4gW2dyZXAgeyAkdmlzaWJsZV9jYWNoZS0+e2JsZXNzZWQgJF8gPyAk
Xy0+aWQgOiAkX30gfSBAJGJ1Z3NdOwp9CgpzdWIgX3Zpc2libGVfYnVnc19jaGVja19vciB7CiAg
ICBteSAoJHNlbGYsICRjaGVja19pZHMpID0gQF87CiAgICBteSAkdmlzaWJsZV9jYWNoZSA9ICRz
ZWxmLT57X3Zpc2libGVfYnVnc19jYWNoZX07CiAgICBteSAkZGJoID0gQnVnemlsbGEtPmRiaDsK
ICAgIG15ICR1c2VyX2lkID0gJHNlbGYtPmlkOwoKICAgIG15ICRzdGg7CiAgICAjIFNwZWVkIHVw
IHRoZSBjYW5fc2VlX2J1ZyBjYXNlLgogICAgaWYgKHNjYWxhcihAJGNoZWNrX2lkcykgPT0gMSkg
ewogICAgICAgICRzdGggPSAkc2VsZi0+e19zdGhfb25lX3Zpc2libGVfYnVnfTsKICAgIH0KICAg
IG15ICRxdWVyeSA9IHFxewogICAgICAgIFNFTEVDVCBESVNUSU5DVCBidWdzLmJ1Z19pZAogICAg
ICAgIEZST00gYnVncwogICAgICAgICAgICBMRUZUIEpPSU4gYnVnX2dyb3VwX21hcCBBUyBzZWN1
cml0eV9tYXAgT04gYnVncy5idWdfaWQgPSBzZWN1cml0eV9tYXAuYnVnX2lkCiAgICAgICAgICAg
IExFRlQgSk9JTiBjYyBBUyBzZWN1cml0eV9jYyBPTiBidWdzLmJ1Z19pZCA9IHNlY3VyaXR5X2Nj
LmJ1Z19pZCBBTkQgc2VjdXJpdHlfY2Mud2hvID0gJHVzZXJfaWQKICAgICAgICBXSEVSRSBidWdz
LmJ1Z19pZCBJTiAofSAuIGpvaW4oJywnLCAoJz8nKSB4IEAkY2hlY2tfaWRzKSAuIHFxeykKICAg
ICAgICAgIEFORCAoKHNlY3VyaXR5X21hcC5ncm91cF9pZCBJUyBOVUxMIE9SIHNlY3VyaXR5X21h
cC5ncm91cF9pZCBJTiAofSAuICRzZWxmLT5ncm91cHNfYXNfc3RyaW5nIC4gcXF7KSkKICAgICAg
ICAgICAgT1IgKGJ1Z3MucmVwb3J0ZXJfYWNjZXNzaWJsZSA9IDEgQU5EIGJ1Z3MucmVwb3J0ZXIg
PSAkdXNlcl9pZCkKICAgICAgICAgICAgT1IgKGJ1Z3MuY2NsaXN0X2FjY2Vzc2libGUgPSAxIEFO
RCBzZWN1cml0eV9jYy53aG8gSVMgTk9UIE5VTEwpCiAgICAgICAgICAgIE9SIGJ1Z3MuYXNzaWdu
ZWRfdG8gPSAkdXNlcl9pZAogICAgfTsKCiAgICBpZiAoQnVnemlsbGEtPnBhcmFtcy0+eyd1c2Vx
YWNvbnRhY3QnfSkgewogICAgICAgICRxdWVyeSAuPSAiIE9SIGJ1Z3MucWFfY29udGFjdCA9ICR1
c2VyX2lkIjsKICAgIH0KICAgICRxdWVyeSAuPSAnKSc7CgogICAgJHN0aCB8fD0gJGRiaC0+cHJl
cGFyZSgkcXVlcnkpOwogICAgaWYgKHNjYWxhcihAJGNoZWNrX2lkcykgPT0gMSkgewogICAgICAg
ICRzZWxmLT57X3N0aF9vbmVfdmlzaWJsZV9idWd9ID0gJHN0aDsKICAgIH0KCiAgICAjIFNldCBh
bGwgYnVncyBhcyBub24gdmlzaWJsZQogICAgZm9yZWFjaCBteSAkYnVnX2lkIChAJGNoZWNrX2lk
cykgewogICAgICAgICR2aXNpYmxlX2NhY2hlLT57JGJ1Z19pZH0gPSAwOwogICAgfQoKICAgICMg
Tm93IGdldCB0aGUgYnVncyB0aGUgdXNlciBjYW4gc2VlCiAgICBteSAkdmlzaWJsZV9idWdfaWRz
ID0gJGRiaC0+c2VsZWN0Y29sX2FycmF5cmVmKCRzdGgsIHVuZGVmLCBAJGNoZWNrX2lkcyk7CiAg
ICBmb3JlYWNoIG15ICRidWdfaWQgKEAkdmlzaWJsZV9idWdfaWRzKSB7CiAgICAgICAgJHZpc2li
bGVfY2FjaGUtPnskYnVnX2lkfSA9IDE7CiAgICB9Cn0KCnN1YiBfdmlzaWJsZV9idWdzX2NoZWNr
X2FuZCB7CiAgICBteSAoJHNlbGYsICRjaGVja19pZHMpID0gQF87CiAgICBteSAkdmlzaWJsZV9j
YWNoZSA9ICRzZWxmLT57X3Zpc2libGVfYnVnc19jYWNoZX07CiAgICBteSAkZGJoID0gQnVnemls
bGEtPmRiaDsKICAgIG15ICR1c2VyX2lkID0gJHNlbGYtPmlkOwoKICAgIG15ICRzdGg7CiAgICAj
IFNwZWVkIHVwIHRoZSBjYW5fc2VlX2J1ZyBjYXNlLgogICAgIyBXRUJLSVRfQ0hBTkdFUzogRGlz
YWJsZSBzdGF0ZW1lbnQgY2FjaGluZwogICAgI2lmIChzY2FsYXIoQCRjaGVja19pZHMpID09IDEp
IHsKICAgICMgICAgJHN0aCA9ICRzZWxmLT57X3N0aF9vbmVfdmlzaWJsZV9idWd9OwogICAgI30K
ICAgICRzdGggfHw9ICRkYmgtPnByZXBhcmUoCiAgICAgICAgIyBUaGlzIGNoZWNrcyBmb3IgZ3Jv
dXBzIHRoYXQgdGhlIGJ1ZyBpcyBpbiB0aGF0IHRoZSB1c2VyCiAgICAgICAgIyAqaXNuJ3QqIGlu
LiBUaGVuLCBpbiB0aGUgUGVybCBjb2RlIGJlbG93LCB3ZSBjaGVjayBpZgogICAgICAgICMgdGhl
IHVzZXIgY2FuIG90aGVyd2lzZSBhY2Nlc3MgdGhlIGJ1ZyAoZm9yIGV4YW1wbGUsIGJ5IGJlaW5n
CiAgICAgICAgIyB0aGUgYXNzaWduZWUgb3IgUUEgQ29udGFjdCkuCiAgICAgICAgIwogICAgICAg
ICMgVGhlIERJU1RJTkNUIGV4aXN0cyBiZWNhdXNlIHRoZSBidWcgY291bGQgYmUgaW4gKnNldmVy
YWwqCiAgICAgICAgIyBncm91cHMgdGhhdCB0aGUgdXNlciBpc24ndCBpbiwgYnV0IHRoZXkgd2ls
bCBhbGwgcmV0dXJuIHRoZQogICAgICAgICMgc2FtZSByZXN1bHQgZm9yIGJ1Z19ncm91cF9tYXAu
YnVnX2lkIChzbyBESVNUSU5DVCBmaWx0ZXJzCiAgICAgICAgIyBvdXQgZHVwbGljYXRlIHJvd3Mp
LgogICAgICAgICJTRUxFQ1QgRElTVElOQ1QgYnVncy5idWdfaWQsIHJlcG9ydGVyLCBhc3NpZ25l
ZF90bywgcWFfY29udGFjdCwKICAgICAgICAgICAgICAgIHJlcG9ydGVyX2FjY2Vzc2libGUsIGNj
bGlzdF9hY2Nlc3NpYmxlLCBjYy53aG8sCiAgICAgICAgICAgICAgICBidWdfZ3JvdXBfbWFwLmJ1
Z19pZAogICAgICAgICAgIEZST00gYnVncwogICAgICAgICAgICAgICAgTEVGVCBKT0lOIGNjCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgT04gY2MuYnVnX2lkID0gYnVncy5idWdfaWQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBTkQgY2Mud2hvID0gJHVzZXJfaWQKICAgICAgICAgICAg
ICAgIExFRlQgSk9JTiBidWdfZ3JvdXBfbWFwIAogICAgICAgICAgICAgICAgICAgICAgICAgIE9O
IGJ1Z3MuYnVnX2lkID0gYnVnX2dyb3VwX21hcC5idWdfaWQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBTkQgYnVnX2dyb3VwX21hcC5ncm91cF9pZCBOT1QgSU4gKCIKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLiAkc2VsZi0+Z3JvdXBzX2FzX3N0cmluZyAuICcpCiAgICAg
ICAgICBXSEVSRSBidWdzLmJ1Z19pZCBJTiAoJyAuIGpvaW4oJywnLCAoJz8nKSB4IEAkY2hlY2tf
aWRzKSAuICcpCiAgICAgICAgICAgICAgICBBTkQgY3JlYXRpb25fdHMgSVMgTk9UIE5VTEwgJyk7
CiAgICAjIFdFQktJVF9DSEFOR0VTOiBEaXNhYmxlIHN0YXRlbWVudCBjYWNoaW5nCiAgICAjaWYg
KHNjYWxhcihAJGNoZWNrX2lkcykgPT0gMSkgewogICAgIyAgICAkc2VsZi0+e19zdGhfb25lX3Zp
c2libGVfYnVnfSA9ICRzdGg7CiAgICAjfQoKICAgICRzdGgtPmV4ZWN1dGUoQCRjaGVja19pZHMp
OwogICAgbXkgJHVzZV9xYV9jb250YWN0ID0gQnVnemlsbGEtPnBhcmFtcy0+eyd1c2VxYWNvbnRh
Y3QnfTsKICAgIHdoaWxlIChteSAkcm93ID0gJHN0aC0+ZmV0Y2hyb3dfYXJyYXlyZWYpIHsKICAg
ICAgICBteSAoJGJ1Z19pZCwgJHJlcG9ydGVyLCAkb3duZXIsICRxYWNvbnRhY3QsICRyZXBvcnRl
cl9hY2Nlc3MsIAogICAgICAgICAgICAkY2NsaXN0X2FjY2VzcywgJGlzb25jY2xpc3QsICRtaXNz
aW5nZ3JvdXApID0gQCRyb3c7CiAgICAgICAgJHZpc2libGVfY2FjaGUtPnskYnVnX2lkfSB8fD0g
CiAgICAgICAgICAgICgoKCRyZXBvcnRlciA9PSAkdXNlcl9pZCkgJiYgJHJlcG9ydGVyX2FjY2Vz
cykKICAgICAgICAgICAgIHx8ICgkdXNlX3FhX2NvbnRhY3QKICAgICAgICAgICAgICAgICAmJiAk
cWFjb250YWN0ICYmICgkcWFjb250YWN0ID09ICR1c2VyX2lkKSkKICAgICAgICAgICAgIHx8ICgk
b3duZXIgPT0gJHVzZXJfaWQpCiAgICAgICAgICAgICB8fCAoJGlzb25jY2xpc3QgJiYgJGNjbGlz
dF9hY2Nlc3MpCiAgICAgICAgICAgICB8fCAhJG1pc3Npbmdncm91cCkgPyAxIDogMDsKICAgIH0K
Cn0KCnN1YiBjbGVhcl9wcm9kdWN0X2NhY2hlIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICBk
ZWxldGUgJHNlbGYtPntlbnRlcmFibGVfcHJvZHVjdHN9OwogICAgZGVsZXRlICRzZWxmLT57c2Vs
ZWN0YWJsZV9wcm9kdWN0c307CiAgICBkZWxldGUgJHNlbGYtPntzZWxlY3RhYmxlX2NsYXNzaWZp
Y2F0aW9uc307Cn0KCnN1YiBjYW5fc2VlX3Byb2R1Y3QgewogICAgbXkgKCRzZWxmLCAkcHJvZHVj
dF9uYW1lKSA9IEBfOwoKICAgIHJldHVybiBzY2FsYXIoZ3JlcCB7JF8tPm5hbWUgZXEgJHByb2R1
Y3RfbmFtZX0gQHskc2VsZi0+Z2V0X3NlbGVjdGFibGVfcHJvZHVjdHN9KTsKfQoKc3ViIGdldF9z
ZWxlY3RhYmxlX3Byb2R1Y3RzIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICBteSAkY2xhc3Nf
aWQgPSBzaGlmdDsKICAgIG15ICRjbGFzc19yZXN0cmljdGVkID0gQnVnemlsbGEtPnBhcmFtcy0+
eyd1c2VjbGFzc2lmaWNhdGlvbid9ICYmICRjbGFzc19pZDsKCiAgICBpZiAoIWRlZmluZWQgJHNl
bGYtPntzZWxlY3RhYmxlX3Byb2R1Y3RzfSkgewogICAgICAgIG15ICRxdWVyeSA9ICJTRUxFQ1Qg
aWQKICAgICAgICAgICAgICAgICAgICAgRlJPTSBwcm9kdWN0cwogICAgICAgICAgICAgICAgICAg
ICAgICAgTEVGVCBKT0lOIGdyb3VwX2NvbnRyb2xfbWFwCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT04gZ3JvdXBfY29udHJvbF9tYXAucHJvZHVjdF9pZCA9IHByb2R1Y3RzLmlkCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQU5EIGdyb3VwX2NvbnRyb2xfbWFwLm1lbWJlcmNvbnRy
b2wgPSAiIC4gQ09OVFJPTE1BUE1BTkRBVE9SWTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICBpZiAoQnVnemlsbGEtPnBhcmFtcy0+eydvcl9ncm91cHMnfSkgewogICAgICAg
ICAgICAjIEVpdGhlciB0aGUgdXNlciBpcyBpbiBhdCBsZWFzdCBvbmUgb2YgdGhlIE1BTkRBVE9S
WSBncm91cHMsIG9yCiAgICAgICAgICAgICMgdGhlcmUgYXJlIG5vIHN1Y2ggZ3JvdXBzIGZvciB0
aGUgcHJvZHVjdC4KICAgICAgICAgICAgJHF1ZXJ5IC49ICIgV0hFUkUgZ3JvdXBfaWQgSU4gKCIg
LiAkc2VsZi0+Z3JvdXBzX2FzX3N0cmluZyAuICIpCiAgICAgICAgICAgICAgICAgICAgICAgIE9S
IGdyb3VwX2lkIElTIE5VTEwiOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IyBUaGVyZSBtdXN0IGJlIG5vIE1BTkRBVE9SWSBncm91cHMgdGhhdCB0aGUgdXNlciBpcyBub3Qg
aW4uCiAgICAgICAgICAgICRxdWVyeSAuPSAiIEFORCBncm91cF9pZCBOT1QgSU4gKCIgLiAkc2Vs
Zi0+Z3JvdXBzX2FzX3N0cmluZyAuICIpCiAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIGdy
b3VwX2lkIElTIE5VTEwiOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBteSAkcHJvZF9pZHMg
PSBCdWd6aWxsYS0+ZGJoLT5zZWxlY3Rjb2xfYXJyYXlyZWYoJHF1ZXJ5KTsKICAgICAgICAkc2Vs
Zi0+e3NlbGVjdGFibGVfcHJvZHVjdHN9ID0gQnVnemlsbGE6OlByb2R1Y3QtPm5ld19mcm9tX2xp
c3QoJHByb2RfaWRzKTsKICAgIH0KCiAgICAjIFJlc3RyaWN0IHRoZSBsaXN0IG9mIHByb2R1Y3Rz
IHRvIHRob3NlIGJlaW5nIGluIHRoZSBjbGFzc2lmaWNhdGlvbiwgaWYgYW55LgogICAgaWYgKCRj
bGFzc19yZXN0cmljdGVkKSB7CiAgICAgICAgcmV0dXJuIFtncmVwIHskXy0+Y2xhc3NpZmljYXRp
b25faWQgPT0gJGNsYXNzX2lkfSBAeyRzZWxmLT57c2VsZWN0YWJsZV9wcm9kdWN0c319XTsKICAg
IH0KICAgICMgSWYgd2UgY29tZSBoZXJlLCB0aGVuIHdlIHdhbnQgYWxsIHNlbGVjdGFibGUgcHJv
ZHVjdHMuCiAgICByZXR1cm4gJHNlbGYtPntzZWxlY3RhYmxlX3Byb2R1Y3RzfTsKfQoKc3ViIGdl
dF9zZWxlY3RhYmxlX2NsYXNzaWZpY2F0aW9ucyB7CiAgICBteSAoJHNlbGYpID0gQF87CgogICAg
aWYgKCFkZWZpbmVkICRzZWxmLT57c2VsZWN0YWJsZV9jbGFzc2lmaWNhdGlvbnN9KSB7CiAgICAg
ICAgbXkgJHByb2R1Y3RzID0gJHNlbGYtPmdldF9zZWxlY3RhYmxlX3Byb2R1Y3RzOwogICAgICAg
IG15ICVjbGFzc19pZHMgPSBtYXAgeyAkXy0+Y2xhc3NpZmljYXRpb25faWQgPT4gMSB9IEAkcHJv
ZHVjdHM7CgogICAgICAgICRzZWxmLT57c2VsZWN0YWJsZV9jbGFzc2lmaWNhdGlvbnN9ID0gQnVn
emlsbGE6OkNsYXNzaWZpY2F0aW9uLT5uZXdfZnJvbV9saXN0KFtrZXlzICVjbGFzc19pZHNdKTsK
ICAgIH0KICAgIHJldHVybiAkc2VsZi0+e3NlbGVjdGFibGVfY2xhc3NpZmljYXRpb25zfTsKfQoK
c3ViIGNhbl9lbnRlcl9wcm9kdWN0IHsKICAgIG15ICgkc2VsZiwgJGlucHV0LCAkd2FybikgPSBA
XzsKICAgIG15ICRkYmggPSBCdWd6aWxsYS0+ZGJoOwogICAgJHdhcm4gfHw9IDA7CgogICAgJGlu
cHV0ID0gdHJpbSgkaW5wdXQpIGlmICFyZWYgJGlucHV0OwogICAgaWYgKCFkZWZpbmVkICRpbnB1
dCBvciAkaW5wdXQgZXEgJycpIHsKICAgICAgICByZXR1cm4gdW5sZXNzICR3YXJuID09IFRIUk9X
X0VSUk9SOwogICAgICAgIFRocm93VXNlckVycm9yKCdvYmplY3Rfbm90X3NwZWNpZmllZCcsCiAg
ICAgICAgICAgICAgICAgICAgICAgeyBjbGFzcyA9PiAnQnVnemlsbGE6OlByb2R1Y3QnIH0pOwog
ICAgfQoKICAgIGlmICghc2NhbGFyIEB7ICRzZWxmLT5nZXRfZW50ZXJhYmxlX3Byb2R1Y3RzIH0p
IHsKICAgICAgICByZXR1cm4gdW5sZXNzICR3YXJuID09IFRIUk9XX0VSUk9SOwogICAgICAgIFRo
cm93VXNlckVycm9yKCdub19wcm9kdWN0cycpOwogICAgfQoKICAgIG15ICRwcm9kdWN0ID0gYmxl
c3NlZCgkaW5wdXQpID8gJGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBuZXcgQnVnemlsbGE6OlByb2R1Y3QoeyBuYW1lID0+ICRpbnB1dCB9KTsKICAgIG15ICRjYW5f
ZW50ZXIgPQogICAgICAkcHJvZHVjdCAmJiBncmVwKCRfLT5uYW1lIGVxICRwcm9kdWN0LT5uYW1l
LAogICAgICAgICAgICAgICAgICAgICAgIEB7ICRzZWxmLT5nZXRfZW50ZXJhYmxlX3Byb2R1Y3Rz
IH0pOwoKICAgIHJldHVybiAkcHJvZHVjdCBpZiAkY2FuX2VudGVyOwoKICAgIHJldHVybiAwIHVu
bGVzcyAkd2FybiA9PSBUSFJPV19FUlJPUjsKCiAgICAjIENoZWNrIHdoeSBhY2Nlc3Mgd2FzIGRl
bmllZC4gVGhlc2UgY2hlY2tzIGFyZSBzbG93LAogICAgIyBidXQgdGhhdCdzIGZpbmUsIGJlY2F1
c2UgdGhleSBvbmx5IGhhcHBlbiBpZiB3ZSBmYWlsLgoKICAgICMgV2UgZG9uJ3QganVzdCB1c2Ug
JHByb2R1Y3QtPm5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzLCBiZWNhdXNlIGlmIGl0CiAgICAjIGNo
YW5nZXMgY2FzZSBmcm9tICRpbnB1dCwgdGhlbiB0aGF0J3MgYSBjbHVlIHRoYXQgdGhlIHByb2R1
Y3QgZG9lcwogICAgIyBleGlzdCBidXQgaXMgaGlkZGVuLgogICAgbXkgJG5hbWUgPSBibGVzc2Vk
KCRpbnB1dCkgPyAkaW5wdXQtPm5hbWUgOiAkaW5wdXQ7CgogICAgIyBUaGUgcHJvZHVjdCBjb3Vs
ZCBub3QgZXhpc3Qgb3IgeW91IGNvdWxkIGJlIGRlbmllZC4uLgogICAgaWYgKCEkcHJvZHVjdCB8
fCAhJHByb2R1Y3QtPnVzZXJfaGFzX2FjY2Vzcygkc2VsZikpIHsKICAgICAgICBUaHJvd1VzZXJF
cnJvcignZW50cnlfYWNjZXNzX2RlbmllZCcsIHsgcHJvZHVjdCA9PiAkbmFtZSB9KTsKICAgIH0K
ICAgICMgSXQgY291bGQgYmUgY2xvc2VkIGZvciBidWcgZW50cnkuLi4KICAgIGVsc2lmICghJHBy
b2R1Y3QtPmlzX2FjdGl2ZSkgewogICAgICAgIFRocm93VXNlckVycm9yKCdwcm9kdWN0X2Rpc2Fi
bGVkJywgeyBwcm9kdWN0ID0+ICRwcm9kdWN0IH0pOwogICAgfQogICAgIyBJdCBjb3VsZCBoYXZl
IG5vIGNvbXBvbmVudHMuLi4KICAgIGVsc2lmICghQHskcHJvZHVjdC0+Y29tcG9uZW50c30KICAg
ICAgICAgICB8fCAhZ3JlcCB7ICRfLT5pc19hY3RpdmUgfSBAeyRwcm9kdWN0LT5jb21wb25lbnRz
fSkKICAgIHsKICAgICAgICBUaHJvd1VzZXJFcnJvcignbWlzc2luZ19jb21wb25lbnQnLCB7IHBy
b2R1Y3QgPT4gJHByb2R1Y3QgfSk7CiAgICB9CiAgICAjIEl0IGNvdWxkIGhhdmUgbm8gdmVyc2lv
bnMuLi4KICAgIGVsc2lmICghQHskcHJvZHVjdC0+dmVyc2lvbnN9CiAgICAgICAgICAgfHwgIWdy
ZXAgeyAkXy0+aXNfYWN0aXZlIH0gQHskcHJvZHVjdC0+dmVyc2lvbnN9KQogICAgewogICAgICAg
IFRocm93VXNlckVycm9yICgnbWlzc2luZ192ZXJzaW9uJywgeyBwcm9kdWN0ID0+ICRwcm9kdWN0
IH0pOwogICAgfQoKICAgIGRpZSAiY2FuX2VudGVyX3Byb2R1Y3QgcmVhY2hlZCBhbiB1bnJlYWNo
YWJsZSBsb2NhdGlvbi4iOwp9CgpzdWIgZ2V0X2VudGVyYWJsZV9wcm9kdWN0cyB7CiAgICBteSAk
c2VsZiA9IHNoaWZ0OwogICAgbXkgJGRiaCA9IEJ1Z3ppbGxhLT5kYmg7CgogICAgaWYgKGRlZmlu
ZWQgJHNlbGYtPntlbnRlcmFibGVfcHJvZHVjdHN9KSB7CiAgICAgICAgcmV0dXJuICRzZWxmLT57
ZW50ZXJhYmxlX3Byb2R1Y3RzfTsKICAgIH0KCiAgICAgIyBBbGwgcHJvZHVjdHMgd2hpY2ggdGhl
IHVzZXIgaGFzICJFbnRyeSIgYWNjZXNzIHRvLgogICAgIG15ICRxdWVyeSA9CiAgICAgICAgICAg
J1NFTEVDVCBwcm9kdWN0cy5pZCBGUk9NIHByb2R1Y3RzCiAgICAgICAgICAgIExFRlQgSk9JTiBn
cm91cF9jb250cm9sX21hcAogICAgICAgICAgICAgICAgT04gZ3JvdXBfY29udHJvbF9tYXAucHJv
ZHVjdF9pZCA9IHByb2R1Y3RzLmlkCiAgICAgICAgICAgICAgICAgICAgQU5EIGdyb3VwX2NvbnRy
b2xfbWFwLmVudHJ5ICE9IDAnOwoKICAgIGlmIChCdWd6aWxsYS0+cGFyYW1zLT57J29yX2dyb3Vw
cyd9KSB7CiAgICAgICAgJHF1ZXJ5IC49ICIgV0hFUkUgKGdyb3VwX2lkIElOICgiIC4gJHNlbGYt
Pmdyb3Vwc19hc19zdHJpbmcgLiAiKSIgLgogICAgICAgICAgICAgICAgICAiICAgIE9SIGdyb3Vw
X2lkIElTIE5VTEwpIjsKICAgIH0gZWxzZSB7CiAgICAgICAgJHF1ZXJ5IC49ICIgQU5EIGdyb3Vw
X2lkIE5PVCBJTiAoIiAuICRzZWxmLT5ncm91cHNfYXNfc3RyaW5nIC4gIikiIC4KICAgICAgICAg
ICAgICAgICAgIiBXSEVSRSBncm91cF9pZCBJUyBOVUxMIgogICAgfQogICAgJHF1ZXJ5IC49ICIg
QU5EIHByb2R1Y3RzLmlzYWN0aXZlID0gMSI7CiAgICBteSAkZW50ZXJhYmxlX2lkcyA9ICRkYmgt
PnNlbGVjdGNvbF9hcnJheXJlZigkcXVlcnkpOwoKICAgIGlmIChzY2FsYXIgQCRlbnRlcmFibGVf
aWRzKSB7CiAgICAgICAgIyBBbmQgYWxsIG9mIHRoZXNlIHByb2R1Y3RzIG11c3QgaGF2ZSBhdCBs
ZWFzdCBvbmUgY29tcG9uZW50CiAgICAgICAgIyBhbmQgb25lIHZlcnNpb24uCiAgICAgICAgJGVu
dGVyYWJsZV9pZHMgPSAkZGJoLT5zZWxlY3Rjb2xfYXJyYXlyZWYoCiAgICAgICAgICAgICdTRUxF
Q1QgRElTVElOQ1QgcHJvZHVjdHMuaWQgRlJPTSBwcm9kdWN0cwogICAgICAgICAgICAgIFdIRVJF
ICcgLiAkZGJoLT5zcWxfaW4oJ3Byb2R1Y3RzLmlkJywgJGVudGVyYWJsZV9pZHMpIC4KICAgICAg
ICAgICAgICAnIEFORCBwcm9kdWN0cy5pZCBJTiAoU0VMRUNUIERJU1RJTkNUIGNvbXBvbmVudHMu
cHJvZHVjdF9pZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZST00gY29t
cG9uZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgY29tcG9u
ZW50cy5pc2FjdGl2ZSA9IDEpCiAgICAgICAgICAgICAgICBBTkQgcHJvZHVjdHMuaWQgSU4gKFNF
TEVDVCBESVNUSU5DVCB2ZXJzaW9ucy5wcm9kdWN0X2lkCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRlJPTSB2ZXJzaW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV0hFUkUgdmVyc2lvbnMuaXNhY3RpdmUgPSAxKScpOwogICAgfQoKICAgICRzZWxm
LT57ZW50ZXJhYmxlX3Byb2R1Y3RzfSA9CiAgICAgICAgIEJ1Z3ppbGxhOjpQcm9kdWN0LT5uZXdf
ZnJvbV9saXN0KCRlbnRlcmFibGVfaWRzKTsKICAgIHJldHVybiAkc2VsZi0+e2VudGVyYWJsZV9w
cm9kdWN0c307Cn0KCnN1YiBjYW5fYWNjZXNzX3Byb2R1Y3QgewogICAgbXkgKCRzZWxmLCAkcHJv
ZHVjdCkgPSBAXzsKICAgIG15ICRwcm9kdWN0X25hbWUgPSBibGVzc2VkKCRwcm9kdWN0KSA/ICRw
cm9kdWN0LT5uYW1lIDogJHByb2R1Y3Q7CiAgICByZXR1cm4gc2NhbGFyKGdyZXAgeyRfLT5uYW1l
IGVxICRwcm9kdWN0X25hbWV9IEB7JHNlbGYtPmdldF9hY2Nlc3NpYmxlX3Byb2R1Y3RzfSk7Cn0K
CnN1YiBnZXRfYWNjZXNzaWJsZV9wcm9kdWN0cyB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAg
CiAgICAjIE1hcCB0aGUgb2JqZWN0cyBpbnRvIGEgaGFzaCB1c2luZyB0aGUgaWRzIGFzIGtleXMK
ICAgIG15ICVwcm9kdWN0cyA9IG1hcCB7ICRfLT5pZCA9PiAkXyB9CiAgICAgICAgICAgICAgICAg
ICAgICAgQHskc2VsZi0+Z2V0X3NlbGVjdGFibGVfcHJvZHVjdHN9LAogICAgICAgICAgICAgICAg
ICAgICAgIEB7JHNlbGYtPmdldF9lbnRlcmFibGVfcHJvZHVjdHN9OwogICAgCiAgICByZXR1cm4g
WyBzb3J0IHsgJGEtPm5hbWUgY21wICRiLT5uYW1lIH0gdmFsdWVzICVwcm9kdWN0cyBdOwp9Cgpz
dWIgY2FuX2FkbWluaXN0ZXIgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICBpZiAobm90IGRl
ZmluZWQgJHNlbGYtPntjYW5fYWRtaW5pc3Rlcn0pIHsKICAgICAgICBteSAkY2FuX2FkbWluaXN0
ZXIgPSAwOwoKICAgICAgICAkY2FuX2FkbWluaXN0ZXIgPSAxIGlmICRzZWxmLT5pbl9ncm91cCgn
YWRtaW4nKQogICAgICAgICAgICB8fCAkc2VsZi0+aW5fZ3JvdXAoJ3R3ZWFrcGFyYW1zJykKICAg
ICAgICAgICAgfHwgJHNlbGYtPmluX2dyb3VwKCdlZGl0dXNlcnMnKQogICAgICAgICAgICB8fCAk
c2VsZi0+Y2FuX2JsZXNzCiAgICAgICAgICAgIHx8IChCdWd6aWxsYS0+cGFyYW1zLT57J3VzZWNs
YXNzaWZpY2F0aW9uJ30gJiYgJHNlbGYtPmluX2dyb3VwKCdlZGl0Y2xhc3NpZmljYXRpb25zJykp
CiAgICAgICAgICAgIHx8ICRzZWxmLT5pbl9ncm91cCgnZWRpdGNvbXBvbmVudHMnKQogICAgICAg
ICAgICB8fCBzY2FsYXIoQHskc2VsZi0+Z2V0X3Byb2R1Y3RzX2J5X3Blcm1pc3Npb24oJ2VkaXRj
b21wb25lbnRzJyl9KQogICAgICAgICAgICB8fCAkc2VsZi0+aW5fZ3JvdXAoJ2NyZWF0ZWdyb3Vw
cycpCiAgICAgICAgICAgIHx8ICRzZWxmLT5pbl9ncm91cCgnZWRpdGtleXdvcmRzJykKICAgICAg
ICAgICAgfHwgJHNlbGYtPmluX2dyb3VwKCdiel9jYW51c2V3aGluZXMnKTsKCiAgICAgICAgQnVn
emlsbGE6Okhvb2s6OnByb2Nlc3MoJ3VzZXJfY2FuX2FkbWluaXN0ZXInLCB7IGNhbl9hZG1pbmlz
dGVyID0+IFwkY2FuX2FkbWluaXN0ZXIgfSk7CiAgICAgICAgJHNlbGYtPntjYW5fYWRtaW5pc3Rl
cn0gPSAkY2FuX2FkbWluaXN0ZXI7CiAgICB9CgogICAgcmV0dXJuICRzZWxmLT57Y2FuX2FkbWlu
aXN0ZXJ9Owp9CgpzdWIgY2hlY2tfY2FuX2FkbWluX3Byb2R1Y3QgewogICAgbXkgKCRzZWxmLCAk
cHJvZHVjdF9uYW1lKSA9IEBfOwoKICAgICMgRmlyc3QgbWFrZSBzdXJlIHRoZSBwcm9kdWN0IG5h
bWUgaXMgdmFsaWQuCiAgICBteSAkcHJvZHVjdCA9IEJ1Z3ppbGxhOjpQcm9kdWN0LT5jaGVjaygk
cHJvZHVjdF9uYW1lKTsKCiAgICAoJHNlbGYtPmluX2dyb3VwKCdlZGl0Y29tcG9uZW50cycsICRw
cm9kdWN0LT5pZCkKICAgICAgICYmICRzZWxmLT5jYW5fc2VlX3Byb2R1Y3QoJHByb2R1Y3QtPm5h
bWUpKQogICAgICAgICB8fCBUaHJvd1VzZXJFcnJvcigncHJvZHVjdF9hZG1pbl9kZW5pZWQnLCB7
cHJvZHVjdCA9PiAkcHJvZHVjdC0+bmFtZX0pOwoKICAgICMgUmV0dXJuIHRoZSB2YWxpZGF0ZWQg
cHJvZHVjdCBvYmplY3QuCiAgICByZXR1cm4gJHByb2R1Y3Q7Cn0KCnN1YiBjaGVja19jYW5fYWRt
aW5fZmxhZ3R5cGUgewogICAgbXkgKCRzZWxmLCAkZmxhZ3R5cGVfaWQpID0gQF87CgogICAgbXkg
JGZsYWd0eXBlID0gQnVnemlsbGE6OkZsYWdUeXBlLT5jaGVjayh7IGlkID0+ICRmbGFndHlwZV9p
ZCB9KTsKICAgIG15ICRjYW5fZnVsbHlfZWRpdCA9IDE7CgogICAgaWYgKCEkc2VsZi0+aW5fZ3Jv
dXAoJ2VkaXRjb21wb25lbnRzJykpIHsKICAgICAgICBteSAkcHJvZHVjdHMgPSAkc2VsZi0+Z2V0
X3Byb2R1Y3RzX2J5X3Blcm1pc3Npb24oJ2VkaXRjb21wb25lbnRzJyk7CiAgICAgICAgIyBZb3Ug
bmVlZCBlZGl0Y29tcG9uZW50cyBwcml2cyBmb3IgYXQgbGVhc3Qgb25lIHByb2R1Y3QgdG8gaGF2
ZQogICAgICAgICMgYSBjaGFuY2UgdG8gZWRpdCB0aGUgZmxhZ3R5cGUuCiAgICAgICAgc2NhbGFy
KEAkcHJvZHVjdHMpCiAgICAgICAgICB8fCBUaHJvd1VzZXJFcnJvcignYXV0aF9mYWlsdXJlJywg
e2dyb3VwICA9PiAnZWRpdGNvbXBvbmVudHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhY3Rpb24gPT4gJ2VkaXQnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgPT4gJ2ZsYWd0eXBlcyd9KTsKICAgICAgICBt
eSAkY2FuX2FkbWluID0gMDsKICAgICAgICBteSAkaSA9ICRmbGFndHlwZS0+aW5jbHVzaW9uc19h
c19oYXNoOwogICAgICAgIG15ICRlID0gJGZsYWd0eXBlLT5leGNsdXNpb25zX2FzX2hhc2g7Cgog
ICAgICAgICMgSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHByb2R1Y3QgZm9yIHdoaWNoIHRoZSB1
c2VyIGRvZXNuJ3QgaGF2ZQogICAgICAgICMgZWRpdGNvbXBvbmVudHMgcHJpdnMsIHRoZW4gZG9u
J3QgYWxsb3cgdGhlbSB0byBkbyBldmVyeXRoaW5nIHdpdGgKICAgICAgICAjIHRoaXMgZmxhZ3R5
cGUsIGluZGVwZW5kZW50bHkgb2Ygd2hldGhlciB0aGlzIHByb2R1Y3QgaXMgaW4gdGhlCiAgICAg
ICAgIyBleGNsdXNpb24gbGlzdCBvciBub3QuCiAgICAgICAgbXkgJXByb2R1Y3RfaWRzOwogICAg
ICAgIG1hcCB7ICRwcm9kdWN0X2lkc3skXy0+aWR9ID0gMSB9IEAkcHJvZHVjdHM7CiAgICAgICAg
JGNhbl9mdWxseV9lZGl0ID0gMCBpZiBncmVwIHsgISRwcm9kdWN0X2lkc3skX30gfSBrZXlzICUk
aTsKCiAgICAgICAgdW5sZXNzICgkZS0+ezB9LT57MH0pIHsKICAgICAgICAgICAgZm9yZWFjaCBt
eSAkcHJvZHVjdCAoQCRwcm9kdWN0cykgewogICAgICAgICAgICAgICAgbXkgJGlkID0gJHByb2R1
Y3QtPmlkOwogICAgICAgICAgICAgICAgbmV4dCBpZiAkZS0+eyRpZH0tPnswfTsKICAgICAgICAg
ICAgICAgICMgSWYgd2UgYXJlIGhlcmUsIHRoZSBwcm9kdWN0IGhhcyBub3QgYmVlbiBleHBsaWNp
dGx5IGV4Y2x1ZGVkLgogICAgICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIGl0J3MgZXhwbGlj
aXRseSBpbmNsdWRlZCwgb3IgYXQgbGVhc3Qgb25lIG9mCiAgICAgICAgICAgICAgICAjIGl0cyBj
b21wb25lbnRzLgogICAgICAgICAgICAgICAgJGNhbl9hZG1pbiA9ICgkaS0+ezB9LT57MH0gfHwg
JGktPnskaWR9LT57MH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgc2NhbGFyKGdy
ZXAgeyAhJGUtPnskaWR9LT57JF99IH0ga2V5cyAleyRpLT57JGlkfX0pKTsKICAgICAgICAgICAg
ICAgIGxhc3QgaWYgJGNhbl9hZG1pbjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAk
Y2FuX2FkbWluIHx8IFRocm93VXNlckVycm9yKCdmbGFnX3R5cGVfbm90X2VkaXRhYmxlJywgeyBm
bGFndHlwZSA9PiAkZmxhZ3R5cGUgfSk7CiAgICB9CiAgICByZXR1cm4gd2FudGFycmF5ID8gKCRm
bGFndHlwZSwgJGNhbl9mdWxseV9lZGl0KSA6ICRmbGFndHlwZTsKfQoKc3ViIGNhbl9yZXF1ZXN0
X2ZsYWcgewogICAgbXkgKCRzZWxmLCAkZmxhZ190eXBlKSA9IEBfOwoKICAgIHJldHVybiAoJHNl
bGYtPmNhbl9zZXRfZmxhZygkZmxhZ190eXBlKQogICAgICAgICAgICB8fCAhJGZsYWdfdHlwZS0+
cmVxdWVzdF9ncm91cF9pZAogICAgICAgICAgICB8fCAkc2VsZi0+aW5fZ3JvdXBfaWQoJGZsYWdf
dHlwZS0+cmVxdWVzdF9ncm91cF9pZCkpID8gMSA6IDA7Cn0KCnN1YiBjYW5fc2V0X2ZsYWcgewog
ICAgbXkgKCRzZWxmLCAkZmxhZ190eXBlKSA9IEBfOwoKICAgIHJldHVybiAoISRmbGFnX3R5cGUt
PmdyYW50X2dyb3VwX2lkCiAgICAgICAgICAgIHx8ICRzZWxmLT5pbl9ncm91cF9pZCgkZmxhZ190
eXBlLT5ncmFudF9ncm91cF9pZCkpID8gMSA6IDA7Cn0KCiMgdmlzaWJsZV9ncm91cHNfaW5oZXJp
dGVkIHJldHVybnMgYSByZWZlcmVuY2UgdG8gYSBsaXN0IG9mIGFsbCB0aGUgZ3JvdXBzCiMgd2hv
c2UgbWVtYmVycyBhcmUgdmlzaWJsZSB0byB0aGlzIHVzZXIuCnN1YiB2aXNpYmxlX2dyb3Vwc19p
bmhlcml0ZWQgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIHJldHVybiAkc2VsZi0+e3Zpc2li
bGVfZ3JvdXBzX2luaGVyaXRlZH0gaWYgZGVmaW5lZCAkc2VsZi0+e3Zpc2libGVfZ3JvdXBzX2lu
aGVyaXRlZH07CiAgICByZXR1cm4gW10gdW5sZXNzICRzZWxmLT5pZDsKICAgIG15IEB2aXNncm91
cHMgPSBAeyRzZWxmLT52aXNpYmxlX2dyb3Vwc19kaXJlY3R9OwogICAgQHZpc2dyb3VwcyA9IEB7
QnVnemlsbGE6Okdyb3VwLT5mbGF0dGVuX2dyb3VwX21lbWJlcnNoaXAoQHZpc2dyb3Vwcyl9Owog
ICAgJHNlbGYtPnt2aXNpYmxlX2dyb3Vwc19pbmhlcml0ZWR9ID0gXEB2aXNncm91cHM7CiAgICBy
ZXR1cm4gJHNlbGYtPnt2aXNpYmxlX2dyb3Vwc19pbmhlcml0ZWR9Owp9CgojIHZpc2libGVfZ3Jv
dXBzX2RpcmVjdCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGEgbGlzdCBvZiBhbGwgdGhlIGdyb3Vw
cyB0aGF0CiMgYXJlIHZpc2libGUgdG8gdGhpcyB1c2VyLgpzdWIgdmlzaWJsZV9ncm91cHNfZGly
ZWN0IHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICBteSBAdmlzZ3JvdXBzID0gKCk7CiAgICBy
ZXR1cm4gJHNlbGYtPnt2aXNpYmxlX2dyb3Vwc19kaXJlY3R9IGlmIGRlZmluZWQgJHNlbGYtPnt2
aXNpYmxlX2dyb3Vwc19kaXJlY3R9OwogICAgcmV0dXJuIFtdIHVubGVzcyAkc2VsZi0+aWQ7Cgog
ICAgbXkgJGRiaCA9IEJ1Z3ppbGxhLT5kYmg7CiAgICBteSAkc3RoOwogICAKICAgIGlmIChCdWd6
aWxsYS0+cGFyYW1zLT57J3VzZXZpc2liaWxpdHlncm91cHMnfSkgewogICAgICAgICRzdGggPSAk
ZGJoLT5wcmVwYXJlKCJTRUxFQ1QgRElTVElOQ1QgZ3JhbnRvcl9pZAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGUk9NIGdyb3VwX2dyb3VwX21hcAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdIRVJFICIgLiAkc2VsZi0+Z3JvdXBzX2luX3NxbCgnbWVtYmVyX2lkJykg
LiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgZ3JhbnRfdHlwZT0iIC4g
R1JPVVBfVklTSUJMRSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIEFsbCBncm91cHMgYXJl
IHZpc2libGUgaWYgdXNldmlzaWJpbGl0eWdyb3VwcyBpcyBvZmYuCiAgICAgICAgJHN0aCA9ICRk
YmgtPnByZXBhcmUoJ1NFTEVDVCBpZCBGUk9NIGdyb3VwcycpOwogICAgfQogICAgJHN0aC0+ZXhl
Y3V0ZSgpOwoKICAgIHdoaWxlIChteSAoJHJvdykgPSAkc3RoLT5mZXRjaHJvd19hcnJheSkgewog
ICAgICAgIHB1c2ggQHZpc2dyb3Vwcywkcm93OwogICAgfQogICAgJHNlbGYtPnt2aXNpYmxlX2dy
b3Vwc19kaXJlY3R9ID0gXEB2aXNncm91cHM7CgogICAgcmV0dXJuICRzZWxmLT57dmlzaWJsZV9n
cm91cHNfZGlyZWN0fTsKfQoKc3ViIHZpc2libGVfZ3JvdXBzX2FzX3N0cmluZyB7CiAgICBteSAk
c2VsZiA9IHNoaWZ0OwogICAgcmV0dXJuIGpvaW4oJywgJywgQHskc2VsZi0+dmlzaWJsZV9ncm91
cHNfaW5oZXJpdGVkKCl9KTsKfQoKIyBUaGlzIGZ1bmN0aW9uIGRlZmluZXMgdGhlIGdyb3VwcyBh
IHVzZXIgbWF5IHNoYXJlIGEgcXVlcnkgd2l0aC4KIyBNb3JlIHJlc3RyaWN0aXZlIHNpdGVzIG1h
eSB3YW50IHRvIGJ1aWxkIHRoaXMgcmVmZXJlbmNlIHRvIGEgbGlzdCBvZiBncm91cCBJRHMKIyBm
cm9tIGJsZXNzX2dyb3VwcyBpbnN0ZWFkIG9mIG1pcnJvcmluZyB2aXNpYmxlX2dyb3Vwc19pbmhl
cml0ZWQsIHBlcmhhcHMuCnN1YiBxdWVyeXNoYXJlX2dyb3VwcyB7CiAgICBteSAkc2VsZiA9IHNo
aWZ0OwogICAgbXkgQHF1ZXJ5c2hhcmVfZ3JvdXBzOwoKICAgIHJldHVybiAkc2VsZi0+e3F1ZXJ5
c2hhcmVfZ3JvdXBzfSBpZiBkZWZpbmVkICRzZWxmLT57cXVlcnlzaGFyZV9ncm91cHN9OwoKICAg
IGlmICgkc2VsZi0+aW5fZ3JvdXAoQnVnemlsbGEtPnBhcmFtcy0+eydxdWVyeXNoYXJlZ3JvdXAn
fSkpIHsKICAgICAgICAjIFdlIHdhbnQgdG8gYmUgYWxsb3dlZCB0byBzaGFyZSB3aXRoIGdyb3Vw
cyB3ZSdyZSBpbiBvbmx5LgogICAgICAgICMgSWYgdXNldmlzaWJpbGl0eWdyb3VwcyBpcyBvbiwg
dGhlbiB3ZSBuZWVkIHRvIHJlc3RyaWN0IHRoaXMgdG8gZ3JvdXBzCiAgICAgICAgIyB3ZSBtYXkg
c2VlLgogICAgICAgIGlmIChCdWd6aWxsYS0+cGFyYW1zLT57J3VzZXZpc2liaWxpdHlncm91cHMn
fSkgewogICAgICAgICAgICBmb3JlYWNoKEB7JHNlbGYtPnZpc2libGVfZ3JvdXBzX2luaGVyaXRl
ZCgpfSkgewogICAgICAgICAgICAgICAgbmV4dCB1bmxlc3MgJHNlbGYtPmluX2dyb3VwX2lkKCRf
KTsKICAgICAgICAgICAgICAgIHB1c2goQHF1ZXJ5c2hhcmVfZ3JvdXBzLCAkXyk7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIEBxdWVyeXNoYXJlX2dy
b3VwcyA9IEB7ICRzZWxmLT5fZ3JvdXBfaWRzIH07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVy
biAkc2VsZi0+e3F1ZXJ5c2hhcmVfZ3JvdXBzfSA9IFxAcXVlcnlzaGFyZV9ncm91cHM7Cn0KCnN1
YiBxdWVyeXNoYXJlX2dyb3Vwc19hc19zdHJpbmcgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAg
IHJldHVybiBqb2luKCcsICcsIEB7JHNlbGYtPnF1ZXJ5c2hhcmVfZ3JvdXBzKCl9KTsKfQoKc3Vi
IGRlcml2ZV9yZWdleHBfZ3JvdXBzIHsKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICBteSAkaWQg
PSAkc2VsZi0+aWQ7CiAgICByZXR1cm4gdW5sZXNzICRpZDsKCiAgICBteSAkZGJoID0gQnVnemls
bGEtPmRiaDsKCiAgICBteSAkc3RoOwoKICAgICMgYWRkIGRlcml2ZWQgcmVjb3JkcyBmb3IgYW55
IG1hdGNoaW5nIHJlZ2V4cHMKCiAgICAkc3RoID0gJGRiaC0+cHJlcGFyZSgiU0VMRUNUIGlkLCB1
c2VycmVnZXhwLCB1c2VyX2dyb3VwX21hcC5ncm91cF9pZAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRlJPTSBncm91cHMKICAgICAgICAgICAgICAgICAgICAgICBMRUZUIEpPSU4gdXNlcl9n
cm91cF9tYXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT04gZ3JvdXBzLmlkID0gdXNl
cl9ncm91cF9tYXAuZ3JvdXBfaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgdXNl
cl9ncm91cF9tYXAudXNlcl9pZCA9ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQg
dXNlcl9ncm91cF9tYXAuZ3JhbnRfdHlwZSA9ID8iKTsKICAgICRzdGgtPmV4ZWN1dGUoJGlkLCBH
UkFOVF9SRUdFWFApOwoKICAgIG15ICRncm91cF9pbnNlcnQgPSAkZGJoLT5wcmVwYXJlKHF7SU5T
RVJUIElOVE8gdXNlcl9ncm91cF9tYXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHVzZXJfaWQsIGdyb3VwX2lkLCBpc2JsZXNzLCBncmFudF90eXBlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKD8sID8sIDAsID8pfSk7CiAgICBt
eSAkZ3JvdXBfZGVsZXRlID0gJGRiaC0+cHJlcGFyZShxe0RFTEVURSBGUk9NIHVzZXJfZ3JvdXBf
bWFwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIHVzZXJfaWQg
PSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIGdyb3VwX2lk
ID0gPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBpc2JsZXNz
ID0gMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBncmFudF90
eXBlID0gP30pOwogICAgd2hpbGUgKG15ICgkZ3JvdXAsICRyZWdleHAsICRwcmVzZW50KSA9ICRz
dGgtPmZldGNocm93X2FycmF5KCkpIHsKICAgICAgICBpZiAoKCRyZWdleHAgbmUgJycpICYmICgk
c2VsZi0+bG9naW4gPX4gbS8kcmVnZXhwL2kpKSB7CiAgICAgICAgICAgICRncm91cF9pbnNlcnQt
PmV4ZWN1dGUoJGlkLCAkZ3JvdXAsIEdSQU5UX1JFR0VYUCkgdW5sZXNzICRwcmVzZW50OwogICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRncm91cF9kZWxldGUtPmV4ZWN1dGUoJGlkLCAkZ3Jv
dXAsIEdSQU5UX1JFR0VYUCkgaWYgJHByZXNlbnQ7CiAgICAgICAgfQogICAgfQoKICAgIEJ1Z3pp
bGxhLT5tZW1jYWNoZWQtPmNsZWFyX2NvbmZpZyh7IGtleSA9PiAidXNlcl9ncm91cHMuJGlkIiB9
KTsKfQoKc3ViIHByb2R1Y3RfcmVzcG9uc2liaWxpdGllcyB7CiAgICBteSAkc2VsZiA9IHNoaWZ0
OwogICAgbXkgJGRiaCA9IEJ1Z3ppbGxhLT5kYmg7CgogICAgcmV0dXJuICRzZWxmLT57J3Byb2R1
Y3RfcmVzcCd9IGlmIGRlZmluZWQgJHNlbGYtPnsncHJvZHVjdF9yZXNwJ307CiAgICByZXR1cm4g
W10gdW5sZXNzICRzZWxmLT5pZDsKCiAgICBteSAkbGlzdCA9ICRkYmgtPnNlbGVjdGFsbF9hcnJh
eXJlZignU0VMRUNUIGNvbXBvbmVudHMucHJvZHVjdF9pZCwgY29tcG9uZW50cy5pZAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBjb21wb25lbnRzCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRUZUIEpPSU4gY29tcG9uZW50
X2NjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTiBjb21wb25l
bnRzLmlkID0gY29tcG9uZW50X2NjLmNvbXBvbmVudF9pZAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXSEVSRSBjb21wb25lbnRzLmluaXRpYWxvd25lciA9ID8KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1IgY29tcG9uZW50cy5p
bml0aWFscWFjb250YWN0ID0gPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPUiBjb21wb25lbnRfY2MudXNlcl9pZCA9ID8nLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAge1NsaWNlID0+IHt9fSwgKCRzZWxmLT5pZCwgJHNlbGYtPmlkLCAkc2Vs
Zi0+aWQpKTsKCiAgICB1bmxlc3MgKCRsaXN0KSB7CiAgICAgICAgJHNlbGYtPnsncHJvZHVjdF9y
ZXNwJ30gPSBbXTsKICAgICAgICByZXR1cm4gJHNlbGYtPnsncHJvZHVjdF9yZXNwJ307CiAgICB9
CgogICAgbXkgQHByb2RfaWRzID0gbWFwIHskXy0+eydwcm9kdWN0X2lkJ319IEAkbGlzdDsKICAg
IG15ICRwcm9kdWN0cyA9IEJ1Z3ppbGxhOjpQcm9kdWN0LT5uZXdfZnJvbV9saXN0KFxAcHJvZF9p
ZHMpOwogICAgIyBXZSBjYW5ub3QgfHVzZXwgaXQsIGJlY2F1c2UgQ29tcG9uZW50LnBtIGFscmVh
ZHkgfHVzZXxzIFVzZXIucG0uCiAgICByZXF1aXJlIEJ1Z3ppbGxhOjpDb21wb25lbnQ7CiAgICBt
eSBAY29tcF9pZHMgPSBtYXAgeyRfLT57J2lkJ319IEAkbGlzdDsKICAgIG15ICRjb21wb25lbnRz
ID0gQnVnemlsbGE6OkNvbXBvbmVudC0+bmV3X2Zyb21fbGlzdChcQGNvbXBfaWRzKTsKCiAgICBt
eSBAcHJvZF9saXN0OwogICAgIyBAJHByb2R1Y3RzIGlzIGFscmVhZHkgc29ydGVkIGFscGhhYmV0
aWNhbGx5LgogICAgZm9yZWFjaCBteSAkcHJvZCAoQCRwcm9kdWN0cykgewogICAgICAgICMgV2Ug
dXNlIEBjb21wb25lbnRzIGluc3RlYWQgb2YgJHByb2QtPmNvbXBvbmVudHMgYmVjYXVzZSB3ZSBv
bmx5IHdhbnQKICAgICAgICAjIGNvbXBvbmVudHMgd2hlcmUgdGhlIHVzZXIgaXMgZWl0aGVyIHRo
ZSBkZWZhdWx0IGFzc2lnbmVlIG9yIFFBIGNvbnRhY3QuCiAgICAgICAgcHVzaChAcHJvZF9saXN0
LCB7cHJvZHVjdCAgICA9PiAkcHJvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25l
bnRzID0+IFtncmVwIHskXy0+cHJvZHVjdF9pZCA9PSAkcHJvZC0+aWR9IEAkY29tcG9uZW50c119
KTsKICAgIH0KICAgICRzZWxmLT57J3Byb2R1Y3RfcmVzcCd9ID0gXEBwcm9kX2xpc3Q7CiAgICBy
ZXR1cm4gJHNlbGYtPnsncHJvZHVjdF9yZXNwJ307Cn0KCnN1YiBjYW5fYmxlc3MgewogICAgbXkg
JHNlbGYgPSBzaGlmdDsKCiAgICBpZiAoIXNjYWxhcihAXykpIHsKICAgICAgICAjIElmIHdlJ3Jl
IGNhbGxlZCB3aXRob3V0IGFuIGFyZ3VtZW50LCBqdXN0IHJldHVybiAKICAgICAgICAjIHdoZXRo
ZXIgb3Igbm90IHdlIGNhbiBibGVzcyBhdCBhbGwuCiAgICAgICAgcmV0dXJuIHNjYWxhcihAeyAk
c2VsZi0+Ymxlc3NfZ3JvdXBzIH0pID8gMSA6IDA7CiAgICB9CgogICAgIyBPdGhlcndpc2UsIHdl
J3JlIGNoZWNraW5nIGEgc3BlY2lmaWMgZ3JvdXAKICAgIG15ICRncm91cF9pZCA9IHNoaWZ0Owog
ICAgcmV0dXJuIGdyZXAoJF8tPmlkID09ICRncm91cF9pZCwgQHsgJHNlbGYtPmJsZXNzX2dyb3Vw
cyB9KSA/IDEgOiAwOwp9CgpzdWIgbWF0Y2ggewogICAgIyBHZW5lcmF0ZXMgYSBsaXN0IG9mIHVz
ZXJzIHdob3NlIGxvZ2luIG5hbWUgKGVtYWlsIGFkZHJlc3MpIG9yIHJlYWwgbmFtZQogICAgIyBt
YXRjaGVzIGEgc3Vic3RyaW5nIG9yIHdpbGRjYXJkLgogICAgIyBUaGlzIGlzIGFsc28gY2FsbGVk
IGlmIG1hdGNoZXMgYXJlIGRpc2FibGVkIChmb3IgZXJyb3IgY2hlY2tpbmcpLCBidXQKICAgICMg
aW4gdGhpcyBjYXNlIG9ubHkgdGhlIGV4YWN0IG1hdGNoIGNvZGUgd2lsbCBlbmQgdXAgcnVubmlu
Zy4KCiAgICAjICRzdHIgY29udGFpbnMgdGhlIHN0cmluZyB0byBtYXRjaCwgd2hpbGUgJGxpbWl0
IGNvbnRhaW5zIHRoZQogICAgIyBtYXhpbXVtIG51bWJlciBvZiByZWNvcmRzIHRvIHJldHJpZXZl
LgogICAgbXkgKCRzdHIsICRsaW1pdCwgJGV4Y2x1ZGVfZGlzYWJsZWQpID0gQF87CiAgICBteSAk
dXNlciA9IEJ1Z3ppbGxhLT51c2VyOwogICAgbXkgJGRiaCA9IEJ1Z3ppbGxhLT5kYmg7CgogICAg
JHN0ciA9IHRyaW0oJHN0cik7CgogICAgbXkgQHVzZXJzID0gKCk7CiAgICByZXR1cm4gXEB1c2Vy
cyBpZiAkc3RyID1+IC9eXHMqJC87CgogICAgIyBUaGUgc2VhcmNoIG9yZGVyIGlzIHdpbGRjYXJk
cywgdGhlbiBleGFjdCBtYXRjaCwgdGhlbiBzdWJzdHJpbmcgc2VhcmNoLgogICAgIyBXaWxkY2Fy
ZCBtYXRjaGluZyBpcyBza2lwcGVkIGlmIHRoZXJlIGlzIG5vICcqJywgYW5kIGV4YWN0IG1hdGNo
ZXMgd2lsbAogICAgIyBub3QgKD8pIGhhdmUgYSAnKicgaW4gdGhlbS4gIElmIGFueSBzZWFyY2gg
Y29tZXMgdXAgd2l0aCBzb21ldGhpbmcsIHRoZQogICAgIyBvbmVzIGZvbGxvd2luZyBpdCB3aWxs
IG5vdCBleGVjdXRlLgoKICAgICMgZmlyc3QgdHJ5IHdpbGRjYXJkcwogICAgbXkgJHdpbGRzdHIg
PSAkc3RyOwoKICAgICMgRG8gbm90IGRvIHdpbGRjYXJkcyBpZiB0aGVyZSBpcyBubyAnKicgaW4g
dGhlIHN0cmluZy4KICAgIGlmICgkd2lsZHN0ciA9fiBzL1wqL1wlL2cgJiYgJHVzZXItPmlkKSB7
CiAgICAgICAgIyBCdWlsZCB0aGUgcXVlcnkuCiAgICAgICAgdHJpY2tfdGFpbnQoJHdpbGRzdHIp
OwogICAgICAgIG15ICRxdWVyeSAgPSAiU0VMRUNUIERJU1RJTkNUIHVzZXJpZCBGUk9NIHByb2Zp
bGVzICI7CiAgICAgICAgaWYgKEJ1Z3ppbGxhLT5wYXJhbXMtPnsndXNldmlzaWJpbGl0eWdyb3Vw
cyd9KSB7CiAgICAgICAgICAgICRxdWVyeSAuPSAiSU5ORVIgSk9JTiB1c2VyX2dyb3VwX21hcAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT04gdXNlcl9ncm91cF9tYXAudXNlcl9pZCA9
IHByb2ZpbGVzLnVzZXJpZCAiOwogICAgICAgIH0KICAgICAgICAkcXVlcnkgLj0gIldIRVJFICgi
CiAgICAgICAgICAgIC4gJGRiaC0+c3FsX2lzdHJjbXAoJ2xvZ2luX25hbWUnLCAnPycsICJMSUtF
IikgLiAiIE9SICIgLgogICAgICAgICAgICAgICRkYmgtPnNxbF9pc3RyY21wKCdyZWFsbmFtZScs
ICc/JywgIkxJS0UiKSAuICIpICI7CiAgICAgICAgaWYgKEJ1Z3ppbGxhLT5wYXJhbXMtPnsndXNl
dmlzaWJpbGl0eWdyb3Vwcyd9KSB7CiAgICAgICAgICAgICRxdWVyeSAuPSAiQU5EIGlzYmxlc3Mg
PSAwICIgLgogICAgICAgICAgICAgICAgICAgICAgIkFORCBncm91cF9pZCBJTigiIC4KICAgICAg
ICAgICAgICAgICAgICAgIGpvaW4oJywgJywgKC0xLCBAeyR1c2VyLT52aXNpYmxlX2dyb3Vwc19p
bmhlcml0ZWR9KSkgLiAiKSAiOwogICAgICAgIH0KICAgICAgICAkcXVlcnkgICAgLj0gIiBBTkQg
aXNfZW5hYmxlZCA9IDEgIiBpZiAkZXhjbHVkZV9kaXNhYmxlZDsKICAgICAgICAkcXVlcnkgICAg
Lj0gJGRiaC0+c3FsX2xpbWl0KCRsaW1pdCkgaWYgJGxpbWl0OwoKICAgICAgICAjIEV4ZWN1dGUg
dGhlIHF1ZXJ5LCByZXRyaWV2ZSB0aGUgcmVzdWx0cywgYW5kIG1ha2UgdGhlbSBpbnRvCiAgICAg
ICAgIyBVc2VyIG9iamVjdHMuCiAgICAgICAgbXkgJHVzZXJfaWRzID0gJGRiaC0+c2VsZWN0Y29s
X2FycmF5cmVmKCRxdWVyeSwgdW5kZWYsICgkd2lsZHN0ciwgJHdpbGRzdHIpKTsKICAgICAgICBA
dXNlcnMgPSBAe0J1Z3ppbGxhOjpVc2VyLT5uZXdfZnJvbV9saXN0KCR1c2VyX2lkcyl9OwogICAg
fQogICAgZWxzZSB7ICAgICMgdHJ5IGFuIGV4YWN0IG1hdGNoCiAgICAgICAgIyBFeGFjdCBtYXRj
aGVzIGRvbid0IGNhcmUgaWYgYSB1c2VyIGlzIGRpc2FibGVkLgogICAgICAgIHRyaWNrX3RhaW50
KCRzdHIpOwogICAgICAgIG15ICR1c2VyX2lkID0gJGRiaC0+c2VsZWN0cm93X2FycmF5KCdTRUxF
Q1QgdXNlcmlkIEZST00gcHJvZmlsZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0hFUkUgJyAuICRkYmgtPnNxbF9pc3RyY21wKCdsb2dpbl9uYW1lJywgJz8n
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsICRz
dHIpOwoKICAgICAgICBwdXNoKEB1c2VycywgbmV3IEJ1Z3ppbGxhOjpVc2VyKCR1c2VyX2lkKSkg
aWYgJHVzZXJfaWQ7CiAgICB9CgogICAgIyB0aGVuIHRyeSBzdWJzdHJpbmcgc2VhcmNoCiAgICBp
ZiAoIXNjYWxhcihAdXNlcnMpICYmIGxlbmd0aCgkc3RyKSA+PSAzICYmICR1c2VyLT5pZCkgewog
ICAgICAgIHRyaWNrX3RhaW50KCRzdHIpOwoKICAgICAgICBteSAkcXVlcnkgICA9ICJTRUxFQ1Qg
RElTVElOQ1QgdXNlcmlkIEZST00gcHJvZmlsZXMgIjsKICAgICAgICBpZiAoQnVnemlsbGEtPnBh
cmFtcy0+eyd1c2V2aXNpYmlsaXR5Z3JvdXBzJ30pIHsKICAgICAgICAgICAgJHF1ZXJ5IC49ICJJ
Tk5FUiBKT0lOIHVzZXJfZ3JvdXBfbWFwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
TiB1c2VyX2dyb3VwX21hcC51c2VyX2lkID0gcHJvZmlsZXMudXNlcmlkICI7CiAgICAgICAgfQog
ICAgICAgICRxdWVyeSAgICAgLj0gIiBXSEVSRSAoIiAuCiAgICAgICAgICAgICAgICAkZGJoLT5z
cWxfaXBvc2l0aW9uKCc/JywgJ2xvZ2luX25hbWUnKSAuICIgPiAwIiAuICIgT1IgIiAuCiAgICAg
ICAgICAgICAgICAkZGJoLT5zcWxfaXBvc2l0aW9uKCc/JywgJ3JlYWxuYW1lJykgLiAiID4gMCkg
IjsKICAgICAgICBpZiAoQnVnemlsbGEtPnBhcmFtcy0+eyd1c2V2aXNpYmlsaXR5Z3JvdXBzJ30p
IHsKICAgICAgICAgICAgJHF1ZXJ5IC49ICIgQU5EIGlzYmxlc3MgPSAwIiAuCiAgICAgICAgICAg
ICAgICAgICAgICAiIEFORCBncm91cF9pZCBJTigiIC4KICAgICAgICAgICAgICAgIGpvaW4oJywg
JywgKC0xLCBAeyR1c2VyLT52aXNpYmxlX2dyb3Vwc19pbmhlcml0ZWR9KSkgLiAiKSAiOwogICAg
ICAgIH0KICAgICAgICAkcXVlcnkgICAgIC49ICIgQU5EIGlzX2VuYWJsZWQgPSAxICIgaWYgJGV4
Y2x1ZGVfZGlzYWJsZWQ7CiAgICAgICAgJHF1ZXJ5ICAgICAuPSAkZGJoLT5zcWxfbGltaXQoJGxp
bWl0KSBpZiAkbGltaXQ7CiAgICAgICAgbXkgJHVzZXJfaWRzID0gJGRiaC0+c2VsZWN0Y29sX2Fy
cmF5cmVmKCRxdWVyeSwgdW5kZWYsICgkc3RyLCAkc3RyKSk7CiAgICAgICAgQHVzZXJzID0gQHtC
dWd6aWxsYTo6VXNlci0+bmV3X2Zyb21fbGlzdCgkdXNlcl9pZHMpfTsKICAgIH0KICAgIHJldHVy
biBcQHVzZXJzOwp9CgpzdWIgbWF0Y2hfZmllbGQgewogICAgbXkgJGZpZWxkcyAgICAgICA9IHNo
aWZ0OyAgICMgYXJndW1lbnRzIGFzIGEgaGFzaAogICAgbXkgJGRhdGEgICAgICAgICA9IHNoaWZ0
IHx8IEJ1Z3ppbGxhLT5pbnB1dF9wYXJhbXM7ICMgaGFzaCB0byBsb29rIHVwIGZpZWxkcyBpbgog
ICAgbXkgJGJlaGF2aW9yICAgICA9IHNoaWZ0IHx8IDA7ICMgQSBjb25zdGFudCB0aGF0IHRlbGxz
IHVzIGhvdyB0byBhY3QKICAgIG15ICRtYXRjaGVzICAgICAgPSB7fTsgICAgICAjIHRoZSB2YWx1
ZXMgc2VudCB0byB0aGUgdGVtcGxhdGUKICAgIG15ICRtYXRjaHN1Y2Nlc3MgPSAxOyAgICAgICAj
IGRpZCB0aGUgbWF0Y2ggZmFpbD8KICAgIG15ICRuZWVkX2NvbmZpcm0gPSAwOyAgICAgICAjIHdo
ZXRoZXIgdG8gZGlzcGxheSBjb25maXJtYXRpb24gc2NyZWVuCiAgICBteSAkbWF0Y2hfbXVsdGlw
bGUgPSAwOyAgICAgIyB3aGV0aGVyIHdlIGV2ZXIgbWF0Y2hlZCBtb3JlIHRoYW4gb25lIHVzZXIK
ICAgIG15IEBub25fY29uY2x1c2l2ZV9maWVsZHM7ICAjIGZpZWxkcyB3aGljaCBkb24ndCBoYXZl
IGEgdW5pcXVlIHVzZXIuCgogICAgbXkgJHBhcmFtcyA9IEJ1Z3ppbGxhLT5wYXJhbXM7CgogICAg
IyBwcmVwYXJlIGRlZmF1bHQgZm9ybSB2YWx1ZXMKCiAgICAjIEZpZWxkcyBjYW4gYmUgcmVndWxh
ciBleHByZXNzaW9ucyBtYXRjaGluZyBtdWx0aXBsZSBmb3JtIGZpZWxkcwogICAgIyAoZi5lLiAi
cmVxdWVzdGVlLShcZCspIiksIHNvIGV4cGFuZCBlYWNoIG5vbi1saXRlcmFsIGZpZWxkCiAgICAj
IGludG8gdGhlIGxpc3Qgb2YgZm9ybSBmaWVsZHMgaXQgbWF0Y2hlcy4KICAgIG15ICRleHBhbmRl
ZF9maWVsZHMgPSB7fTsKICAgIGZvcmVhY2ggbXkgJGZpZWxkX3BhdHRlcm4gKGtleXMgJXskZmll
bGRzfSkgewogICAgICAgICMgQ2hlY2sgaWYgdGhlIGZpZWxkIGhhcyBhbnkgbm9uLXdvcmQgY2hh
cmFjdGVycy4gIE9ubHkgdGhvc2UgZmllbGRzCiAgICAgICAgIyBjYW4gYmUgcmVndWxhciBleHBy
ZXNzaW9ucywgc28gZG9uJ3QgZXhwYW5kIHRoZSBmaWVsZCBpZiBpdCBkb2Vzbid0CiAgICAgICAg
IyBoYXZlIGFueSBvZiB0aG9zZSBjaGFyYWN0ZXJzLgogICAgICAgIGlmICgkZmllbGRfcGF0dGVy
biA9fiAvXlx3KyQvKSB7CiAgICAgICAgICAgICRleHBhbmRlZF9maWVsZHMtPnskZmllbGRfcGF0
dGVybn0gPSAkZmllbGRzLT57JGZpZWxkX3BhdHRlcm59OwogICAgICAgIH0KICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgbXkgQGZpZWxkX25hbWVzID0gZ3JlcCgvJGZpZWxkX3BhdHRlcm4vLCBr
ZXlzICUkZGF0YSk7CgogICAgICAgICAgICBmb3JlYWNoIG15ICRmaWVsZF9uYW1lIChAZmllbGRf
bmFtZXMpIHsKICAgICAgICAgICAgICAgICRleHBhbmRlZF9maWVsZHMtPnskZmllbGRfbmFtZX0g
PSAKICAgICAgICAgICAgICAgICAgeyB0eXBlID0+ICRmaWVsZHMtPnskZmllbGRfcGF0dGVybn0t
PnsndHlwZSd9IH07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICMgVGhlIGZpZWxk
IGlzIGEgcmVxdWVzdGVlIGZpZWxkOyBpbiBvcmRlciBmb3IgaXRzIG5hbWUgCiAgICAgICAgICAg
ICAgICAjIHRvIHNob3cgdXAgY29ycmVjdGx5IG9uIHRoZSBjb25maXJtYXRpb24gcGFnZSwgd2Ug
bmVlZCAKICAgICAgICAgICAgICAgICMgdG8gZmluZCBvdXQgdGhlIG5hbWUgb2YgaXRzIGZsYWcg
dHlwZS4KICAgICAgICAgICAgICAgIGlmICgkZmllbGRfbmFtZSA9fiAvXnJlcXVlc3RlZShfdHlw
ZSk/LShcZCspJC8pIHsKICAgICAgICAgICAgICAgICAgICBteSAkZmxhZ190eXBlOwogICAgICAg
ICAgICAgICAgICAgIGlmICgkMSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlIEJ1
Z3ppbGxhOjpGbGFnVHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgJGZsYWdfdHlwZSA9IG5l
dyBCdWd6aWxsYTo6RmxhZ1R5cGUoJDIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSBCdWd6aWxs
YTo6RmxhZzsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGZsYWcgPSBuZXcgQnVnemlsbGE6
OkZsYWcoJDIpOwogICAgICAgICAgICAgICAgICAgICAgICAkZmxhZ190eXBlID0gJGZsYWctPnR5
cGUgaWYgJGZsYWc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlm
ICgkZmxhZ190eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRleHBhbmRlZF9maWVsZHMt
PnskZmllbGRfbmFtZX0tPnsnZmxhZ190eXBlJ30gPSAkZmxhZ190eXBlOwogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIyBObyBuZWVkIHRvIGxvb2sgZm9yIGEgdmFsaWQgcmVxdWVzdGVlIGlmIHRoZSBmbGFnKHR5
cGUpCiAgICAgICAgICAgICAgICAgICAgICAgICMgaGFzIGJlZW4gZGVsZXRlZCAobWF5IG9jY3Vy
IGluIHJhY2UgY29uZGl0aW9ucykuCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkZXhw
YW5kZWRfZmllbGRzLT57JGZpZWxkX25hbWV9OwogICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgJGRhdGEtPnskZmllbGRfbmFtZX07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgJGZpZWxkcyA9ICRleHBh
bmRlZF9maWVsZHM7CgogICAgZm9yZWFjaCBteSAkZmllbGQgKGtleXMgJXskZmllbGRzfSkgewog
ICAgICAgIG5leHQgdW5sZXNzIGRlZmluZWQgJGRhdGEtPnskZmllbGR9OwoKICAgICAgICAjQ29u
Y2F0ZW5hdGUgbG9naW4gbmFtZXMsIHNvIHRoYXQgd2UgaGF2ZSBhIGNvbW1vbiB3YXkgdG8gaGFu
ZGxlIHRoZW0uCiAgICAgICAgbXkgJHJhd19maWVsZDsKICAgICAgICBpZiAocmVmICRkYXRhLT57
JGZpZWxkfSkgewogICAgICAgICAgICAkcmF3X2ZpZWxkID0gam9pbigiLCIsIEB7JGRhdGEtPnsk
ZmllbGR9fSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkcmF3X2ZpZWxk
ID0gJGRhdGEtPnskZmllbGR9OwogICAgICAgIH0KICAgICAgICAkcmF3X2ZpZWxkID0gY2xlYW5f
dGV4dCgkcmF3X2ZpZWxkIHx8ICcnKTsKCiAgICAgICAgIyBOb3cgd2UgZWl0aGVyIHNwbGl0ICRy
YXdfZmllbGQgYnkgc3BhY2VzL2NvbW1hcyBhbmQgcHV0IHRoZSBsaXN0CiAgICAgICAgIyBpbnRv
IEBxdWVyaWVzLCBvciBpbiB0aGUgY2FzZSBvZiBmaWVsZHMgd2hpY2ggb25seSBhY2NlcHQgc2lu
Z2xlCiAgICAgICAgIyBlbnRyaWVzLCB3ZSBzaW1wbHkgdXNlIHRoZSB2ZXJiYXRpbSB0ZXh0Lgog
ICAgICAgIG15IEBxdWVyaWVzOwogICAgICAgIGlmICgkZmllbGRzLT57JGZpZWxkfS0+eyd0eXBl
J30gZXEgJ3NpbmdsZScpIHsKICAgICAgICAgICAgQHF1ZXJpZXMgPSAoJHJhd19maWVsZCk7CiAg
ICAgICAgICAgICMgV2Ugd2lsbCByZXBvcHVsYXRlIGl0IGxhdGVyIGlmIGEgbWF0Y2ggaXMgZm91
bmQsIGVsc2UgaXQgbXVzdAogICAgICAgICAgICAjIGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcg
c28gdGhhdCB0aGUgZmllbGQgcmVtYWlucyBkZWZpbmVkLgogICAgICAgICAgICAkZGF0YS0+eyRm
aWVsZH0gPSAnJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRmaWVsZHMtPnskZmllbGR9LT57
J3R5cGUnfSBlcSAnbXVsdGknKSB7CiAgICAgICAgICAgIEBxdWVyaWVzID0gIHNwbGl0KC9bLDtd
Ky8sICRyYXdfZmllbGQpOwogICAgICAgICAgICAjIFdlIHdpbGwgcmVwb3B1bGF0ZSBpdCBsYXRl
ciBpZiBhIG1hdGNoIGlzIGZvdW5kLCBlbHNlIGl0IG11c3QKICAgICAgICAgICAgIyBiZSB1bmRl
ZmluZWQuCiAgICAgICAgICAgIGRlbGV0ZSAkZGF0YS0+eyRmaWVsZH07CiAgICAgICAgfQogICAg
ICAgIGVsc2UgewogICAgICAgICAgICAjIGJhZCBhcmd1bWVudAogICAgICAgICAgICBUaHJvd0Nv
ZGVFcnJvcignYmFkX2FyZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYXJndW1lbnQg
PT4gJGZpZWxkcy0+eyRmaWVsZH0tPnsndHlwZSd9LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uID0+ICAnQnVnemlsbGE6OlVzZXI6Om1hdGNoX2ZpZWxkJywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAjIFRvbGVyYXRlIGZpZWxk
cyB0aGF0IGRvIG5vdCBleGlzdCAoaW4gY2FzZSB5b3Ugc3BlY2lmeQogICAgICAgICMgZS5nLiB0
aGUgUUEgY29udGFjdCwgYW5kIGl0J3MgY3VycmVudGx5IG5vdCBpbiB1c2UpLgogICAgICAgIG5l
eHQgdW5sZXNzIChkZWZpbmVkICRyYXdfZmllbGQgJiYgJHJhd19maWVsZCBuZSAnJyk7CgogICAg
ICAgIG15ICRsaW1pdCA9IDA7CiAgICAgICAgaWYgKCRwYXJhbXMtPnsnbWF4dXNlcm1hdGNoZXMn
fSkgewogICAgICAgICAgICAkbGltaXQgPSAkcGFyYW1zLT57J21heHVzZXJtYXRjaGVzJ30gKyAx
OwogICAgICAgIH0KCiAgICAgICAgbXkgQGxvZ2luczsKICAgICAgICBmb3IgbXkgJHF1ZXJ5IChA
cXVlcmllcykgewogICAgICAgICAgICAkcXVlcnkgPSB0cmltKCRxdWVyeSk7CiAgICAgICAgICAg
IG5leHQgaWYgJHF1ZXJ5IGVxICcnOwoKICAgICAgICAgICAgbXkgJHVzZXJzID0gbWF0Y2goCiAg
ICAgICAgICAgICAgICAkcXVlcnksICAgIyBtYXRjaCBzdHJpbmcKICAgICAgICAgICAgICAgICRs
aW1pdCwgICAjIG1hdGNoIGxpbWl0CiAgICAgICAgICAgICAgICAxICAgICAgICAgIyBleGNsdWRl
X2Rpc2FibGVkCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGhlcmUgaXMgd2hlcmUgaXQg
Y2hlY2tzIGZvciBtdWx0aXBsZSBtYXRjaGVzCiAgICAgICAgICAgIGlmIChzY2FsYXIoQHskdXNl
cnN9KSA9PSAxKSB7ICMgZXhhY3RseSBvbmUgbWF0Y2gKICAgICAgICAgICAgICAgIHB1c2goQGxv
Z2lucywgQHskdXNlcnN9WzBdLT5sb2dpbik7CgogICAgICAgICAgICAgICAgIyBza2lwIGNvbmZp
cm1hdGlvbiBmb3IgZXhhY3QgbWF0Y2hlcwogICAgICAgICAgICAgICAgbmV4dCBpZiAobGMoQHsk
dXNlcnN9WzBdLT5sb2dpbikgZXEgbGMoJHF1ZXJ5KSk7CgogICAgICAgICAgICAgICAgJG1hdGNo
ZXMtPnskZmllbGR9LT57JHF1ZXJ5fS0+eydzdGF0dXMnfSA9ICdzdWNjZXNzJzsKICAgICAgICAg
ICAgICAgICRuZWVkX2NvbmZpcm0gPSAxIGlmICRwYXJhbXMtPnsnY29uZmlybXVuaXF1ZXVzZXJt
YXRjaCd9OwoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoKHNjYWxhcihAeyR1c2Vy
c30pID4gMSkKICAgICAgICAgICAgICAgICAgICAmJiAoJHBhcmFtcy0+eydtYXh1c2VybWF0Y2hl
cyd9ICE9IDEpKSB7CiAgICAgICAgICAgICAgICAkbmVlZF9jb25maXJtID0gMTsKICAgICAgICAg
ICAgICAgICRtYXRjaF9tdWx0aXBsZSA9IDE7CiAgICAgICAgICAgICAgICBwdXNoKEBub25fY29u
Y2x1c2l2ZV9maWVsZHMsICRmaWVsZCk7CgogICAgICAgICAgICAgICAgaWYgKCgkcGFyYW1zLT57
J21heHVzZXJtYXRjaGVzJ30pCiAgICAgICAgICAgICAgICAgICAmJiAoc2NhbGFyKEB7JHVzZXJz
fSkgPiAkcGFyYW1zLT57J21heHVzZXJtYXRjaGVzJ30pKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICRtYXRjaGVzLT57JGZpZWxkfS0+eyRxdWVyeX0tPnsnc3RhdHVzJ30g
PSAndHJ1bmMnOwogICAgICAgICAgICAgICAgICAgIHBvcCBAeyR1c2Vyc307ICAjIHRha2UgdGhl
IGxhc3Qgb25lIG91dAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgJG1hdGNoZXMtPnskZmllbGR9LT57JHF1ZXJ5fS0+eydzdGF0dXMn
fSA9ICdzdWNjZXNzJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIGV2ZXJ5dGhpbmcgZWxzZSBmYWlscwogICAgICAg
ICAgICAgICAgJG1hdGNoc3VjY2VzcyA9IDA7ICMgZmFpbAogICAgICAgICAgICAgICAgcHVzaChA
bm9uX2NvbmNsdXNpdmVfZmllbGRzLCAkZmllbGQpOwogICAgICAgICAgICAgICAgJG1hdGNoZXMt
PnskZmllbGR9LT57JHF1ZXJ5fS0+eydzdGF0dXMnfSA9ICdmYWlsJzsKICAgICAgICAgICAgICAg
ICRuZWVkX2NvbmZpcm0gPSAxOyAgIyBjb25maXJtYXRpb24gc2NyZWVuIHNob3dzIGZhaWx1cmVz
CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRtYXRjaGVzLT57JGZpZWxkfS0+eyRxdWVyeX0t
PnsndXNlcnMnfSAgPSAkdXNlcnM7CiAgICAgICAgfQoKICAgICAgICAjIElmIG5vIG1hdGNoIG9y
IG1vcmUgdGhhbiBvbmUgbWF0Y2ggaGFzIGJlZW4gZm91bmQgZm9yIGEgZmllbGQKICAgICAgICAj
IGV4cGVjdGluZyBvbmx5IG9uZSBtYXRjaCAodHlwZSBlcSAic2luZ2xlIiksIHdlIHNldCBpdCBi
YWNrIHRvICcnCiAgICAgICAgIyBzbyB0aGF0IHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBj
YW4gc3RpbGwgY2hlY2sgd2hldGhlciB0aGlzCiAgICAgICAgIyBmaWVsZCB3YXMgZGVmaW5lZCBv
ciBub3QgKGFuZCBpdCB3YXMgaWYgd2UgY2FtZSBoZXJlKS4KICAgICAgICBpZiAoJGZpZWxkcy0+
eyRmaWVsZH0tPnsndHlwZSd9IGVxICdzaW5nbGUnKSB7CiAgICAgICAgICAgICRkYXRhLT57JGZp
ZWxkfSA9ICRsb2dpbnNbMF0gfHwgJyc7CiAgICAgICAgfQogICAgICAgIGVsc2lmIChzY2FsYXIg
QGxvZ2lucykgewogICAgICAgICAgICAkZGF0YS0+eyRmaWVsZH0gPSBcQGxvZ2luczsKICAgICAg
ICB9CiAgICB9CgogICAgbXkgJHJldHZhbDsKICAgIGlmICghJG1hdGNoc3VjY2VzcykgewogICAg
ICAgICRyZXR2YWwgPSBVU0VSX01BVENIX0ZBSUxFRDsKICAgIH0KICAgIGVsc2lmICgkbWF0Y2hf
bXVsdGlwbGUpIHsKICAgICAgICAkcmV0dmFsID0gVVNFUl9NQVRDSF9NVUxUSVBMRTsKICAgIH0K
ICAgIGVsc2UgewogICAgICAgICRyZXR2YWwgPSBVU0VSX01BVENIX1NVQ0NFU1M7CiAgICB9Cgog
ICAgIyBTa2lwIGNvbmZpcm1hdGlvbiBpZiB3ZSB3ZXJlIHRvbGQgdG8sIG9yIGlmIHdlIGRvbid0
IG5lZWQgdG8gY29uZmlybS4KICAgIGlmICgkYmVoYXZpb3IgPT0gTUFUQ0hfU0tJUF9DT05GSVJN
IHx8ICEkbmVlZF9jb25maXJtKSB7CiAgICAgICAgcmV0dXJuIHdhbnRhcnJheSA/ICgkcmV0dmFs
LCBcQG5vbl9jb25jbHVzaXZlX2ZpZWxkcykgOiAkcmV0dmFsOwogICAgfQoKICAgIG15ICR0ZW1w
bGF0ZSA9IEJ1Z3ppbGxhLT50ZW1wbGF0ZTsKICAgIG15ICRjZ2kgPSBCdWd6aWxsYS0+Y2dpOwog
ICAgbXkgJHZhcnMgPSB7fTsKCiAgICAkdmFycy0+eydzY3JpcHQnfSAgICAgICAgPSAkY2dpLT51
cmwoLXJlbGF0aXZlID0+IDEpOyAjIGZvciBzZWxmLXJlZmVyZW5jaW5nIFVSTHMKICAgICR2YXJz
LT57J2ZpZWxkcyd9ICAgICAgICA9ICRmaWVsZHM7ICMgZmllbGRzIGJlaW5nIG1hdGNoZWQKICAg
ICR2YXJzLT57J21hdGNoZXMnfSAgICAgICA9ICRtYXRjaGVzOyAjIG1hdGNoZXMgdGhhdCB3ZXJl
IG1hZGUKICAgICR2YXJzLT57J21hdGNoc3VjY2Vzcyd9ICA9ICRtYXRjaHN1Y2Nlc3M7ICMgY29u
dGludWUgb3IgZmFpbAogICAgJHZhcnMtPnsnbWF0Y2htdWx0aXBsZSd9ID0gJG1hdGNoX211bHRp
cGxlOwoKICAgIHByaW50ICRjZ2ktPmhlYWRlcigpOwoKICAgICR0ZW1wbGF0ZS0+cHJvY2Vzcygi
Z2xvYmFsL2NvbmZpcm0tdXNlci1tYXRjaC5odG1sLnRtcGwiLCAkdmFycykKICAgICAgfHwgVGhy
b3dUZW1wbGF0ZUVycm9yKCR0ZW1wbGF0ZS0+ZXJyb3IoKSk7CiAgICBleGl0OwoKfQoKIyBDaGFu
Z2VzIGluIHNvbWUgZmllbGRzIGF1dG9tYXRpY2FsbHkgdHJpZ2dlciBldmVudHMuIFRoZSBmaWVs
ZCBuYW1lcyBhcmUKIyBmcm9tIHRoZSBmaWVsZGRlZnMgdGFibGUuCm91ciAlbmFtZXNfdG9fZXZl
bnRzID0gKAogICAgJ3Jlc29sdXRpb24nICAgICAgICAgICAgICA9PiBFVlRfT1BFTkVEX0NMT1NF
RCwKICAgICdrZXl3b3JkcycgICAgICAgICAgICAgICAgPT4gRVZUX0tFWVdPUkQsCiAgICAnY2Mn
ICAgICAgICAgICAgICAgICAgICAgID0+IEVWVF9DQywKICAgICdidWdfc2V2ZXJpdHknICAgICAg
ICAgICAgPT4gRVZUX1BST0pfTUFOQUdFTUVOVCwKICAgICdwcmlvcml0eScgICAgICAgICAgICAg
ICAgPT4gRVZUX1BST0pfTUFOQUdFTUVOVCwKICAgICdidWdfc3RhdHVzJyAgICAgICAgICAgICAg
PT4gRVZUX1BST0pfTUFOQUdFTUVOVCwKICAgICd0YXJnZXRfbWlsZXN0b25lJyAgICAgICAgPT4g
RVZUX1BST0pfTUFOQUdFTUVOVCwKICAgICdhdHRhY2htZW50cy5kZXNjcmlwdGlvbicgPT4gRVZU
X0FUVEFDSE1FTlRfREFUQSwKICAgICdhdHRhY2htZW50cy5taW1ldHlwZScgICAgPT4gRVZUX0FU
VEFDSE1FTlRfREFUQSwKICAgICdhdHRhY2htZW50cy5pc3BhdGNoJyAgICAgPT4gRVZUX0FUVEFD
SE1FTlRfREFUQSwKICAgICdkZXBlbmRzb24nICAgICAgICAgICAgICAgPT4gRVZUX0RFUEVORF9C
TE9DSywKICAgICdibG9ja2VkJyAgICAgICAgICAgICAgICAgPT4gRVZUX0RFUEVORF9CTE9DSywK
ICAgICdwcm9kdWN0JyAgICAgICAgICAgICAgICAgPT4gRVZUX0NPTVBPTkVOVCwKICAgICdjb21w
b25lbnQnICAgICAgICAgICAgICAgPT4gRVZUX0NPTVBPTkVOVCk7CgojIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgdXNlciB3YW50cyBtYWlsIGZvciBhIGdpdmVuIGJ1ZyBjaGFuZ2UuCiMgTm90ZTogdGhl
ICIrIiBzaWducyBiZWZvcmUgdGhlIGNvbnN0YW50cyBzdXBwcmVzcyBiYXJld29yZCBxdW90aW5n
LgpzdWIgd2FudHNfYnVnX21haWwgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIG15ICgkYnVn
LCAkcmVsYXRpb25zaGlwLCAkZmllbGREaWZmcywgJGNvbW1lbnRzLCAkZGVwX21haWwsICRjaGFu
Z2VyKSA9IEBfOwoKICAgICMgTWFrZSBhIGxpc3Qgb2YgdGhlIGV2ZW50cyB3aGljaCBoYXZlIGhh
cHBlbmVkIGR1cmluZyB0aGlzIGJ1ZyBjaGFuZ2UsCiAgICAjIGZyb20gdGhlIHBvaW50IG9mIHZp
ZXcgb2YgdGhpcyB1c2VyLiAgICAKICAgIG15ICVldmVudHM7ICAgIAogICAgZm9yZWFjaCBteSAk
Y2hhbmdlIChAJGZpZWxkRGlmZnMpIHsKICAgICAgICBteSAkZmllbGROYW1lID0gJGNoYW5nZS0+
e2ZpZWxkX25hbWV9OwogICAgICAgICMgQSBjaGFuZ2UgdG8gYW55IG9mIHRoZSBhYm92ZSBmaWVs
ZHMgc2V0cyB0aGUgY29ycmVzcG9uZGluZyBldmVudAogICAgICAgIGlmIChkZWZpbmVkKCRuYW1l
c190b19ldmVudHN7JGZpZWxkTmFtZX0pKSB7CiAgICAgICAgICAgICRldmVudHN7JG5hbWVzX3Rv
X2V2ZW50c3skZmllbGROYW1lfX0gPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIyBDYXRjaC1hbGwgZm9yIGFueSBjaGFuZ2Ugbm90IGNhdWdodCBieSBhIG1vcmUgc3Bl
Y2lmaWMgZXZlbnQKICAgICAgICAgICAgJGV2ZW50c3srRVZUX09USEVSfSA9IDE7CiAgICAgICAg
fQoKICAgICAgICAjIElmIHRoZSB1c2VyIGlzIGluIGEgcGFydGljdWxhciByb2xlIGFuZCB0aGUg
dmFsdWUgb2YgdGhhdCByb2xlCiAgICAgICAgIyBjaGFuZ2VkLCB3ZSBuZWVkIHRoZSBBRERFRF9S
RU1PVkVEIGV2ZW50LgogICAgICAgIGlmICgoJGZpZWxkTmFtZSBlcSAiYXNzaWduZWRfdG8iICYm
ICRyZWxhdGlvbnNoaXAgPT0gUkVMX0FTU0lHTkVFKSB8fAogICAgICAgICAgICAoJGZpZWxkTmFt
ZSBlcSAicWFfY29udGFjdCIgJiYgJHJlbGF0aW9uc2hpcCA9PSBSRUxfUUEpKQogICAgICAgIHsK
ICAgICAgICAgICAgJGV2ZW50c3srRVZUX0FEREVEX1JFTU9WRUR9ID0gMTsKICAgICAgICB9CiAg
ICAgICAgCiAgICAgICAgaWYgKCRmaWVsZE5hbWUgZXEgImNjIikgewogICAgICAgICAgICBteSAk
bG9naW4gPSAkc2VsZi0+bG9naW47CiAgICAgICAgICAgIG15ICRpbm9sZCA9ICgkY2hhbmdlLT57
b2xkfSA9fiAvXiguKixccyopP1xRJGxvZ2luXEUoLC4qKT8kLyk7CiAgICAgICAgICAgIG15ICRp
bm5ldyA9ICgkY2hhbmdlLT57bmV3fSA9fiAvXiguKixccyopP1xRJGxvZ2luXEUoLC4qKT8kLyk7
CiAgICAgICAgICAgIGlmICgkaW5vbGQgIT0gJGlubmV3KQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAkZXZlbnRzeytFVlRfQURERURfUkVNT1ZFRH0gPSAxOwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgfQoKICAgIGlmICghJGJ1Zy0+bGFzdGRpZmZlZCkgewogICAgICAgICMgTm90
aWZ5IGFib3V0IG5ldyBidWdzLgogICAgICAgICRldmVudHN7K0VWVF9CVUdfQ1JFQVRFRH0gPSAx
OwoKICAgICAgICAjIFlvdSByb2xlIGlzIG5ldyBpZiB0aGUgYnVnIGl0c2VsZiBpcy4KICAgICAg
ICAjIE9ubHkgbWFrZXMgc2Vuc2UgZm9yIHRoZSBhc3NpZ25lZSwgUUEgY29udGFjdCBhbmQgdGhl
IENDIGxpc3QuCiAgICAgICAgaWYgKCRyZWxhdGlvbnNoaXAgPT0gUkVMX0FTU0lHTkVFCiAgICAg
ICAgICAgIHx8ICRyZWxhdGlvbnNoaXAgPT0gUkVMX1FBCiAgICAgICAgICAgIHx8ICRyZWxhdGlv
bnNoaXAgPT0gUkVMX0NDKQogICAgICAgIHsKICAgICAgICAgICAgJGV2ZW50c3srRVZUX0FEREVE
X1JFTU9WRUR9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGdyZXAgeyAkXy0+dHlwZSA9
PSBDTVRfQVRUQUNITUVOVF9DUkVBVEVEIH0gQCRjb21tZW50cykgewogICAgICAgICRldmVudHN7
K0VWVF9BVFRBQ0hNRU5UfSA9IDE7CiAgICB9CiAgICBlbHNpZiAoZGVmaW5lZCgkJGNvbW1lbnRz
WzBdKSkgewogICAgICAgICRldmVudHN7K0VWVF9DT01NRU5UfSA9IDE7CiAgICB9CiAgICAKICAg
ICMgRGVwZW5kZW50IGNoYW5nZWQgYnVnbWFpbHMgbXVzdCBoYXZlIGFuIGV2ZW50IHRvIGVuc3Vy
ZSB0aGUgYnVnbWFpbCBpcwogICAgIyBlbWFpbGVkLgogICAgaWYgKCRkZXBfbWFpbCkgewogICAg
ICAgICRldmVudHN7K0VWVF9ERVBFTkRfQkxPQ0t9ID0gMTsKICAgIH0KCiAgICBteSBAZXZlbnRf
bGlzdCA9IGtleXMgJWV2ZW50czsKICAgIAogICAgbXkgJHdhbnRzX21haWwgPSAkc2VsZi0+d2Fu
dHNfbWFpbChcQGV2ZW50X2xpc3QsICRyZWxhdGlvbnNoaXApOwoKICAgICMgVGhlIG5lZ2F0aXZl
IGV2ZW50cyBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IC0gdGhleSBjYW4ndCBiZSBpbmNvcnBvcmF0
ZWQKICAgICMgaW50byB0aGUgZmlyc3Qgd2FudHNfbWFpbCBjYWxsLCBiZWNhdXNlIHRoZXkgYXJl
IG9mIHRoZSBvcHBvc2l0ZSBzZW5zZS4KICAgICMgCiAgICAjIFdlIGRvIHRoZW0gc2VwYXJhdGVs
eSBiZWNhdXNlIGlmIF9hbnlfIG9mIHRoZW0gYXJlIHNldCwgd2UgZG9uJ3Qgd2FudAogICAgIyB0
aGUgbWFpbC4KICAgIGlmICgkd2FudHNfbWFpbCAmJiAkY2hhbmdlciAmJiAoJHNlbGYtPmlkID09
ICRjaGFuZ2VyLT5pZCkpIHsKICAgICAgICAkd2FudHNfbWFpbCAmPSAkc2VsZi0+d2FudHNfbWFp
bChbRVZUX0NIQU5HRURfQllfTUVdLCAkcmVsYXRpb25zaGlwKTsKICAgIH0gICAgCiAgICAKICAg
IGlmICgkd2FudHNfbWFpbCAmJiAkYnVnLT5idWdfc3RhdHVzIGVxICdVTkNPTkZJUk1FRCcpIHsK
ICAgICAgICAkd2FudHNfbWFpbCAmPSAkc2VsZi0+d2FudHNfbWFpbChbRVZUX1VOQ09ORklSTUVE
XSwgJHJlbGF0aW9uc2hpcCk7CiAgICB9CiAgICAKICAgIHJldHVybiAkd2FudHNfbWFpbDsKfQoK
IyBSZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgd2FudHMgbWFpbCBmb3IgYSBnaXZlbiBzZXQgb2Yg
ZXZlbnRzLgpzdWIgd2FudHNfbWFpbCB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgbXkgKCRl
dmVudHMsICRyZWxhdGlvbnNoaXApID0gQF87CiAgICAKICAgICMgRG9uJ3Qgc2VuZCBhbnkgbWFp
bCwgZXZlciwgaWYgYWNjb3VudCBpcyBkaXNhYmxlZCAKICAgICMgWFhYIFRlbXBvcmFyeSBDb21w
YXRpYmlsaXR5IENoYW5nZSAxIG9mIDI6CiAgICAjIFRoaXMgY29kZSBpcyBkaXNhYmxlZCBmb3Ig
dGhlIG1vbWVudCB0byBtYWtlIHRoZSBiZWhhdmlvdXIgbGlrZSB0aGUgb2xkCiAgICAjIHN5c3Rl
bSwgd2hpY2ggc2VudCBidWdtYWlsIHRvIGRpc2FibGVkIGFjY291bnRzLgogICAgIyByZXR1cm4g
MCBpZiAkc2VsZi0+eydkaXNhYmxlZHRleHQnfTsKICAgIAogICAgIyBObyBtYWlsIGlmIHRoZXJl
IGFyZSBubyBldmVudHMKICAgIHJldHVybiAwIGlmICFzY2FsYXIoQCRldmVudHMpOwoKICAgICMg
SWYgYSByZWxhdGlvbnNoaXAgaXNuJ3QgZ2l2ZW4sIGRlZmF1bHQgdG8gUkVMX0FOWS4KICAgIGlm
ICghZGVmaW5lZCgkcmVsYXRpb25zaGlwKSkgewogICAgICAgICRyZWxhdGlvbnNoaXAgPSBSRUxf
QU5ZOwogICAgfQoKICAgICMgU2tpcCBEQiBxdWVyeSBpZiByZWxhdGlvbnNoaXAgaXMgZXhwbGlj
aXQKICAgIHJldHVybiAxIGlmICRyZWxhdGlvbnNoaXAgPT0gUkVMX0dMT0JBTF9XQVRDSEVSOwoK
ICAgIG15ICR3YW50c19tYWlsID0gZ3JlcCB7ICRzZWxmLT5tYWlsX3NldHRpbmdzLT57JHJlbGF0
aW9uc2hpcH17JF99IH0gQCRldmVudHM7CiAgICByZXR1cm4gJHdhbnRzX21haWwgPyAxIDogMDsK
fQoKc3ViIG1haWxfc2V0dGluZ3MgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIG15ICRkYmgg
PSBCdWd6aWxsYS0+ZGJoOwoKICAgIGlmICghZGVmaW5lZCAkc2VsZi0+eydtYWlsX3NldHRpbmdz
J30pIHsKICAgICAgICBteSAkZGF0YSA9CiAgICAgICAgICAkZGJoLT5zZWxlY3RhbGxfYXJyYXly
ZWYoJ1NFTEVDVCByZWxhdGlvbnNoaXAsIGV2ZW50IEZST00gZW1haWxfc2V0dGluZwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSB1c2VyX2lkID0gPycsIHVuZGVmLCAk
c2VsZi0+aWQpOwogICAgICAgIG15ICVtYWlsOwogICAgICAgICMgVGhlIGhhc2ggaXMgb2YgdGhl
IGZvcm0gJG1haWx7JHJlbGF0aW9uc2hpcH17JGV2ZW50fSA9IDEuCiAgICAgICAgJG1haWx7JF8t
PlswXX17JF8tPlsxXX0gPSAxIGZvcmVhY2ggQCRkYXRhOwoKICAgICAgICAkc2VsZi0+eydtYWls
X3NldHRpbmdzJ30gPSBcJW1haWw7CiAgICB9CiAgICByZXR1cm4gJHNlbGYtPnsnbWFpbF9zZXR0
aW5ncyd9Owp9CgpzdWIgaGFzX2F1ZGl0X2VudHJpZXMgewogICAgbXkgJHNlbGYgPSBzaGlmdDsK
ICAgIG15ICRkYmggPSBCdWd6aWxsYS0+ZGJoOwoKICAgIGlmICghZXhpc3RzICRzZWxmLT57J2hh
c19hdWRpdF9lbnRyaWVzJ30pIHsKICAgICAgICAkc2VsZi0+eydoYXNfYXVkaXRfZW50cmllcyd9
ID0KICAgICAgICAgICAgJGRiaC0+c2VsZWN0cm93X2FycmF5KCdTRUxFQ1QgMSBGUk9NIGF1ZGl0
X2xvZyBXSEVSRSB1c2VyX2lkID0gPyAnIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAkZGJoLT5zcWxfbGltaXQoMSksIHVuZGVmLCAkc2VsZi0+aWQpOwogICAgfQogICAgcmV0
dXJuICRzZWxmLT57J2hhc19hdWRpdF9lbnRyaWVzJ307Cn0KCnN1YiBpc19pbnNpZGVyIHsKICAg
IG15ICRzZWxmID0gc2hpZnQ7CgogICAgaWYgKCFkZWZpbmVkICRzZWxmLT57J2lzX2luc2lkZXIn
fSkgewogICAgICAgIG15ICRpbnNpZGVyX2dyb3VwID0gQnVnemlsbGEtPnBhcmFtcy0+eydpbnNp
ZGVyZ3JvdXAnfTsKICAgICAgICAkc2VsZi0+eydpc19pbnNpZGVyJ30gPQogICAgICAgICAgICAo
JGluc2lkZXJfZ3JvdXAgJiYgJHNlbGYtPmluX2dyb3VwKCRpbnNpZGVyX2dyb3VwKSkgPyAxIDog
MDsKICAgIH0KICAgIHJldHVybiAkc2VsZi0+eydpc19pbnNpZGVyJ307Cn0KCnN1YiBpc19nbG9i
YWxfd2F0Y2hlciB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgIGlmICghZGVmaW5lZCAkc2Vs
Zi0+eydpc19nbG9iYWxfd2F0Y2hlcid9KSB7CiAgICAgICAgbXkgQHdhdGNoZXJzID0gc3BsaXQo
L1ssO10rLywgQnVnemlsbGEtPnBhcmFtcy0+eydnbG9iYWx3YXRjaGVycyd9KTsKICAgICAgICAk
c2VsZi0+eydpc19nbG9iYWxfd2F0Y2hlcid9ID0gc2NhbGFyKGdyZXAgeyAkXyBlcSAkc2VsZi0+
bG9naW4gfSBAd2F0Y2hlcnMpID8gMSA6IDA7CiAgICB9CiAgICByZXR1cm4gICRzZWxmLT57J2lz
X2dsb2JhbF93YXRjaGVyJ307Cn0KCnN1YiBpc190aW1ldHJhY2tlciB7CiAgICBteSAkc2VsZiA9
IHNoaWZ0OwoKICAgIGlmICghZGVmaW5lZCAkc2VsZi0+eydpc190aW1ldHJhY2tlcid9KSB7CiAg
ICAgICAgbXkgJHR0X2dyb3VwID0gQnVnemlsbGEtPnBhcmFtcy0+eyd0aW1ldHJhY2tpbmdncm91
cCd9OwogICAgICAgICRzZWxmLT57J2lzX3RpbWV0cmFja2VyJ30gPQogICAgICAgICAgICAoJHR0
X2dyb3VwICYmICRzZWxmLT5pbl9ncm91cCgkdHRfZ3JvdXApKSA/IDEgOiAwOwogICAgfQogICAg
cmV0dXJuICRzZWxmLT57J2lzX3RpbWV0cmFja2VyJ307Cn0KCnN1YiBjYW5fdGFnX2NvbW1lbnRz
IHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgaWYgKCFkZWZpbmVkICRzZWxmLT57J2Nhbl90
YWdfY29tbWVudHMnfSkgewogICAgICAgIG15ICRncm91cCA9IEJ1Z3ppbGxhLT5wYXJhbXMtPnsn
Y29tbWVudF90YWdnZXJzX2dyb3VwJ307CiAgICAgICAgJHNlbGYtPnsnY2FuX3RhZ19jb21tZW50
cyd9ID0KICAgICAgICAgICAgKCRncm91cCAmJiAkc2VsZi0+aW5fZ3JvdXAoJGdyb3VwKSkgPyAx
IDogMDsKICAgIH0KICAgIHJldHVybiAkc2VsZi0+eydjYW5fdGFnX2NvbW1lbnRzJ307Cn0KCnN1
YiBnZXRfdXNlcmxpc3QgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICByZXR1cm4gJHNlbGYt
PnsndXNlcmxpc3QnfSBpZiBkZWZpbmVkICRzZWxmLT57J3VzZXJsaXN0J307CgogICAgbXkgJGRi
aCA9IEJ1Z3ppbGxhLT5kYmg7CiAgICBteSAkcXVlcnkgID0gIlNFTEVDVCBESVNUSU5DVCBsb2dp
bl9uYW1lLCByZWFsbmFtZSwiOwogICAgaWYgKEJ1Z3ppbGxhLT5wYXJhbXMtPnsndXNldmlzaWJp
bGl0eWdyb3Vwcyd9KSB7CiAgICAgICAgJHF1ZXJ5IC49ICIgQ09VTlQoZ3JvdXBfaWQpICI7CiAg
ICB9IGVsc2UgewogICAgICAgICRxdWVyeSAuPSAiIDEgIjsKICAgIH0KICAgICRxdWVyeSAgICAg
Lj0gIkZST00gcHJvZmlsZXMgIjsKICAgIGlmIChCdWd6aWxsYS0+cGFyYW1zLT57J3VzZXZpc2li
aWxpdHlncm91cHMnfSkgewogICAgICAgICRxdWVyeSAuPSAiTEVGVCBKT0lOIHVzZXJfZ3JvdXBf
bWFwICIgLgogICAgICAgICAgICAgICAgICAiT04gdXNlcl9ncm91cF9tYXAudXNlcl9pZCA9IHVz
ZXJpZCBBTkQgaXNibGVzcyA9IDAgIiAuCiAgICAgICAgICAgICAgICAgICJBTkQgZ3JvdXBfaWQg
SU4oIiAuCiAgICAgICAgICAgICAgICAgIGpvaW4oJywgJywgKC0xLCBAeyRzZWxmLT52aXNpYmxl
X2dyb3Vwc19pbmhlcml0ZWR9KSkgLiAiKSI7CiAgICB9CiAgICAkcXVlcnkgICAgLj0gIiBXSEVS
RSBpc19lbmFibGVkID0gMSAiOwogICAgJHF1ZXJ5ICAgIC49ICRkYmgtPnNxbF9ncm91cF9ieSgn
dXNlcmlkJywgJ2xvZ2luX25hbWUsIHJlYWxuYW1lJyk7CgogICAgbXkgJHN0aCA9ICRkYmgtPnBy
ZXBhcmUoJHF1ZXJ5KTsKICAgICRzdGgtPmV4ZWN1dGU7CgogICAgbXkgQHVzZXJsaXN0OwogICAg
d2hpbGUgKG15KCRsb2dpbiwgJG5hbWUsICR2aXNpYmxlKSA9ICRzdGgtPmZldGNocm93X2FycmF5
KSB7CiAgICAgICAgcHVzaCBAdXNlcmxpc3QsIHsKICAgICAgICAgICAgbG9naW4gPT4gJGxvZ2lu
LAogICAgICAgICAgICBpZGVudGl0eSA9PiAkbmFtZSA/ICIkbmFtZSA8JGxvZ2luPiIgOiAkbG9n
aW4sCiAgICAgICAgICAgIHZpc2libGUgPT4gJHZpc2libGUsCiAgICAgICAgfTsKICAgIH0KICAg
IEB1c2VybGlzdCA9IHNvcnQgeyBsYyAkJGF7J2lkZW50aXR5J30gY21wIGxjICQkYnsnaWRlbnRp
dHknfSB9IEB1c2VybGlzdDsKCiAgICAkc2VsZi0+eyd1c2VybGlzdCd9ID0gXEB1c2VybGlzdDsK
ICAgIHJldHVybiAkc2VsZi0+eyd1c2VybGlzdCd9Owp9CgpzdWIgY3JlYXRlIHsKICAgIG15ICRp
bnZvY2FudCA9IHNoaWZ0OwogICAgbXkgJGNsYXNzID0gcmVmKCRpbnZvY2FudCkgfHwgJGludm9j
YW50OwogICAgbXkgJGRiaCA9IEJ1Z3ppbGxhLT5kYmg7CgogICAgJGRiaC0+Ynpfc3RhcnRfdHJh
bnNhY3Rpb24oKTsKCiAgICBteSAkdXNlciA9ICRjbGFzcy0+U1VQRVI6OmNyZWF0ZShAXyk7Cgog
ICAgIyBUdXJuIG9uIGFsbCBlbWFpbCBmb3IgdGhlIG5ldyB1c2VyCiAgICByZXF1aXJlIEJ1Z3pp
bGxhOjpCdWdNYWlsOwogICAgbXkgJXJlbGF0aW9uc2hpcHMgPSBCdWd6aWxsYTo6QnVnTWFpbDo6
cmVsYXRpb25zaGlwcygpOwogICAgZm9yZWFjaCBteSAkcmVsIChrZXlzICVyZWxhdGlvbnNoaXBz
KSB7CiAgICAgICAgZm9yZWFjaCBteSAkZXZlbnQgKFBPU19FVkVOVFMsIE5FR19FVkVOVFMpIHsK
ICAgICAgICAgICAgIyBUaGVzZSAiZXhjZXB0aW9ucyIgZGVmaW5lIHRoZSBkZWZhdWx0IGVtYWls
IHByZWZlcmVuY2VzLgogICAgICAgICAgICAjIAogICAgICAgICAgICAjIFdlIGVuYWJsZSBtYWls
IHVubGVzcyB0aGUgY2hhbmdlIHdhcyBtYWRlIGJ5IHRoZSB1c2VyLCBvciBpdCdzCiAgICAgICAg
ICAgICMganVzdCBhIENDIGxpc3QgYWRkaXRpb24gYW5kIHRoZSB1c2VyIGlzIG5vdCB0aGUgcmVw
b3J0ZXIuCiAgICAgICAgICAgIG5leHQgaWYgKCRldmVudCA9PSBFVlRfQ0hBTkdFRF9CWV9NRSk7
CiAgICAgICAgICAgIG5leHQgaWYgKCgkZXZlbnQgPT0gRVZUX0NDKSAmJiAoJHJlbCAhPSBSRUxf
UkVQT1JURVIpKTsKCiAgICAgICAgICAgICRkYmgtPmRvKCdJTlNFUlQgSU5UTyBlbWFpbF9zZXR0
aW5nICh1c2VyX2lkLCByZWxhdGlvbnNoaXAsIGV2ZW50KQogICAgICAgICAgICAgICAgICAgICAg
VkFMVUVTICg/LCA/LCA/KScsIHVuZGVmLCAoJHVzZXItPmlkLCAkcmVsLCAkZXZlbnQpKTsKICAg
ICAgICB9CiAgICB9CgogICAgZm9yZWFjaCBteSAkZXZlbnQgKEdMT0JBTF9FVkVOVFMpIHsKICAg
ICAgICAkZGJoLT5kbygnSU5TRVJUIElOVE8gZW1haWxfc2V0dGluZyAodXNlcl9pZCwgcmVsYXRp
b25zaGlwLCBldmVudCkKICAgICAgICAgICAgICAgICAgVkFMVUVTICg/LCA/LCA/KScsIHVuZGVm
LCAoJHVzZXItPmlkLCBSRUxfQU5ZLCAkZXZlbnQpKTsKICAgIH0KCiAgICAkdXNlci0+ZGVyaXZl
X3JlZ2V4cF9ncm91cHMoKTsKCiAgICAjIEFkZCB0aGUgY3JlYXRpb24gZGF0ZSB0byB0aGUgcHJv
ZmlsZXNfYWN0aXZpdHkgdGFibGUuCiAgICAjICR3aG8gaXMgdGhlIHVzZXIgd2hvIGNyZWF0ZWQg
dGhlIG5ldyB1c2VyIGFjY291bnQsIGkuZS4gZWl0aGVyIGFuCiAgICAjIGFkbWluIG9yIHRoZSBu
ZXcgdXNlciBoaW1zZWxmLgogICAgbXkgJHdobyA9IEJ1Z3ppbGxhLT51c2VyLT5pZCB8fCAkdXNl
ci0+aWQ7CiAgICBteSAkY3JlYXRpb25fZGF0ZV9maWVsZGlkID0gZ2V0X2ZpZWxkX2lkKCdjcmVh
dGlvbl90cycpOwoKICAgICRkYmgtPmRvKCdJTlNFUlQgSU5UTyBwcm9maWxlc19hY3Rpdml0eQog
ICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VyaWQsIHdobywgcHJvZmlsZXNfd2hlbiwgZmll
bGRpZCwgbmV3dmFsdWUpCiAgICAgICAgICAgICAgICAgICBWQUxVRVMgKD8sID8sIE5PVygpLCA/
LCBOT1coKSknLAogICAgICAgICAgICAgICAgICAgdW5kZWYsICgkdXNlci0+aWQsICR3aG8sICRj
cmVhdGlvbl9kYXRlX2ZpZWxkaWQpKTsKCiAgICAkZGJoLT5iel9jb21taXRfdHJhbnNhY3Rpb24o
KTsKCiAgICAjIFJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCB1c2VyIGFjY291bnQuCiAgICByZXR1
cm4gJHVzZXI7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEFjY291bnQgTG9ja291
dCBNZXRob2RzICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgYWNjb3VudF9pc19s
b2NrZWRfb3V0IHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICBteSAkbG9naW5fZmFpbHVyZXMg
PSBzY2FsYXIgQHsgJHNlbGYtPmFjY291bnRfaXBfbG9naW5fZmFpbHVyZXMgfTsKICAgIHJldHVy
biAkbG9naW5fZmFpbHVyZXMgPj0gTUFYX0xPR0lOX0FUVEVNUFRTID8gMSA6IDA7Cn0KCnN1YiBu
b3RlX2xvZ2luX2ZhaWx1cmUgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIG15ICRpcF9hZGRy
ID0gcmVtb3RlX2lwKCk7CiAgICB0cmlja190YWludCgkaXBfYWRkcik7CiAgICBCdWd6aWxsYS0+
ZGJoLT5kbygiSU5TRVJUIElOVE8gbG9naW5fZmFpbHVyZSAodXNlcl9pZCwgaXBfYWRkciwgbG9n
aW5fdGltZSkKICAgICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKD8sID8sIExPQ0FMVElNRVNU
QU1QKDApKSIsCiAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwgJHNlbGYtPmlkLCAkaXBfYWRk
cik7CiAgICBkZWxldGUgJHNlbGYtPnthY2NvdW50X2lwX2xvZ2luX2ZhaWx1cmVzfTsKfQoKc3Vi
IGNsZWFyX2xvZ2luX2ZhaWx1cmVzIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICBteSAkaXBf
YWRkciA9IHJlbW90ZV9pcCgpOwogICAgdHJpY2tfdGFpbnQoJGlwX2FkZHIpOwogICAgQnVnemls
bGEtPmRiaC0+ZG8oCiAgICAgICAgJ0RFTEVURSBGUk9NIGxvZ2luX2ZhaWx1cmUgV0hFUkUgdXNl
cl9pZCA9ID8gQU5EIGlwX2FkZHIgPSA/JywKICAgICAgICB1bmRlZiwgJHNlbGYtPmlkLCAkaXBf
YWRkcik7CiAgICBkZWxldGUgJHNlbGYtPnthY2NvdW50X2lwX2xvZ2luX2ZhaWx1cmVzfTsKfQoK
c3ViIGFjY291bnRfaXBfbG9naW5fZmFpbHVyZXMgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAg
IG15ICRkYmggPSBCdWd6aWxsYS0+ZGJoOwogICAgbXkgJHRpbWUgPSAkZGJoLT5zcWxfZGF0ZV9t
YXRoKCdMT0NBTFRJTUVTVEFNUCgwKScsICctJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTE9HSU5fTE9DS09VVF9JTlRFUlZBTCwgJ01JTlVURScpOwogICAgbXkgJGlwX2Fk
ZHIgPSByZW1vdGVfaXAoKTsKICAgIHRyaWNrX3RhaW50KCRpcF9hZGRyKTsKICAgICRzZWxmLT57
YWNjb3VudF9pcF9sb2dpbl9mYWlsdXJlc30gfHw9IEJ1Z3ppbGxhLT5kYmgtPnNlbGVjdGFsbF9h
cnJheXJlZigKICAgICAgICAiU0VMRUNUIGxvZ2luX3RpbWUsIGlwX2FkZHIsIHVzZXJfaWQgRlJP
TSBsb2dpbl9mYWlsdXJlCiAgICAgICAgICBXSEVSRSB1c2VyX2lkID0gPyBBTkQgbG9naW5fdGlt
ZSA+ICR0aW1lCiAgICAgICAgICAgICAgICBBTkQgaXBfYWRkciA9ID8KICAgICAgIE9SREVSIEJZ
IGxvZ2luX3RpbWUiLCB7U2xpY2UgPT4ge319LCAkc2VsZi0+aWQsICRpcF9hZGRyKTsKICAgIHJl
dHVybiAkc2VsZi0+e2FjY291bnRfaXBfbG9naW5fZmFpbHVyZXN9Owp9CgojIyMjIyMjIyMjIyMj
IyMKIyBTdWJyb3V0aW5lcyAjCiMjIyMjIyMjIyMjIyMjIwoKc3ViIGlzX2F2YWlsYWJsZV91c2Vy
bmFtZSB7CiAgICBteSAoJHVzZXJuYW1lLCAkb2xkX3VzZXJuYW1lKSA9IEBfOwoKICAgIGlmKGxv
Z2luX3RvX2lkKCR1c2VybmFtZSkgIT0gMCkgewogICAgICAgIHJldHVybiAwOwogICAgfQoKICAg
IG15ICRkYmggPSBCdWd6aWxsYS0+ZGJoOwogICAgIyAkdXNlcm5hbWUgaXMgc2FmZSBiZWNhdXNl
IGl0IGlzIG9ubHkgdXNlZCBpbiBTRUxFQ1QgcGxhY2Vob2xkZXJzLgogICAgdHJpY2tfdGFpbnQo
JHVzZXJuYW1lKTsKICAgICMgUmVqZWN0IGlmIHRoZSBuZXcgbG9naW4gaXMgcGFydCBvZiBhbiBl
bWFpbCBjaGFuZ2Ugd2hpY2ggaXMKICAgICMgc3RpbGwgaW4gcHJvZ3Jlc3MKICAgICMKICAgICMg
c3Vic3RyaW5nL2xvY2F0ZSBzdHVmZjogYnVnIDE2NTIyMTsgdGhpcyB1c2VkIHRvIHVzZSByZWdl
eGVzLCBidXQgdGhhdAogICAgIyB3YXMgdW5zYWZlIGFuZCByZXF1aXJlZCB3ZWlyZCBlc2NhcGlu
ZzsgdXNpbmcgc3Vic3RyaW5nIHRvIHB1bGwgb3V0CiAgICAjIHRoZSBuZXcvb2xkIGVtYWlsIGFk
ZHJlc3NlcyBhbmQgc3FsX3Bvc2l0aW9uKCkgdG8gZmluZCB0aGUgZGVsaW1pdGVyICgnOicpCiAg
ICAjIGlzIGNsZWFuZXIvc2FmZXIKICAgIG15ICgkdG9rZW50eXBlLCAkZXZlbnRkYXRhKSA9ICRk
YmgtPnNlbGVjdHJvd19hcnJheSgKICAgICAgICAiU0VMRUNUIHRva2VudHlwZSwgZXZlbnRkYXRh
CiAgICAgICAgICAgRlJPTSB0b2tlbnMKICAgICAgICAgIFdIRVJFICh0b2tlbnR5cGUgPSAnZW1h
aWxvbGQnCiAgICAgICAgICAgICAgICBBTkQgU1VCU1RSSU5HKGV2ZW50ZGF0YSwgMSwgKCIgLgog
ICAgICAgICAgICAgICAgICAgICRkYmgtPnNxbF9wb3NpdGlvbihxeyc6J30sICdldmVudGRhdGEn
KSAuICItICAxKSkgPSA/KQogICAgICAgICAgICAgT1IgKHRva2VudHlwZSA9ICdlbWFpbG5ldycK
ICAgICAgICAgICAgICAgIEFORCBTVUJTVFJJTkcoZXZlbnRkYXRhLCAoIiAuCiAgICAgICAgICAg
ICAgICAgICAgJGRiaC0+c3FsX3Bvc2l0aW9uKHF7JzonfSwgJ2V2ZW50ZGF0YScpIC4gIisgMSks
IExFTkdUSChldmVudGRhdGEpKSA9ID8pIiwKICAgICAgICAgdW5kZWYsICgkdXNlcm5hbWUsICR1
c2VybmFtZSkpOwoKICAgIGlmICgkZXZlbnRkYXRhKSB7CiAgICAgICAgIyBBbGxvdyB0aHJ1IG93
bmVyIG9mIHRva2VuCiAgICAgICAgaWYgKCRvbGRfdXNlcm5hbWUKICAgICAgICAgICAgJiYgKCgk
dG9rZW50eXBlIGVxICdlbWFpbG5ldycgJiYgJGV2ZW50ZGF0YSBlcSAiJG9sZF91c2VybmFtZTok
dXNlcm5hbWUiKQogICAgICAgICAgICAgICAgfHwgKCR0b2tlbnR5cGUgZXEgJ2VtYWlsb2xkJyAm
JiAkZXZlbnRkYXRhIGVxICIkdXNlcm5hbWU6JG9sZF91c2VybmFtZSIpKSkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAg
ICByZXR1cm4gMTsKfQoKc3ViIGNoZWNrX2FjY291bnRfY3JlYXRpb25fZW5hYmxlZCB7CiAgICBt
eSAkc2VsZiA9IHNoaWZ0OwoKICAgICMgSWYgd2UncmUgdXNpbmcgZS5nLiBMREFQIGZvciBsb2dp
biwgdGhlbiB3ZSBjYW4ndCBjcmVhdGUgYSBuZXcgYWNjb3VudC4KICAgICRzZWxmLT5hdXRob3Jp
emVyLT51c2VyX2Nhbl9jcmVhdGVfYWNjb3VudAogICAgICB8fCBUaHJvd1VzZXJFcnJvcignYXV0
aF9jYW50X2NyZWF0ZV9hY2NvdW50Jyk7CgogICAgQnVnemlsbGEtPnBhcmFtcy0+eydjcmVhdGVl
bWFpbHJlZ2V4cCd9CiAgICAgIHx8IFRocm93VXNlckVycm9yKCdhY2NvdW50X2NyZWF0aW9uX2Rp
c2FibGVkJyk7Cn0KCnN1YiBjaGVja19hbmRfc2VuZF9hY2NvdW50X2NyZWF0aW9uX2NvbmZpcm1h
dGlvbiB7CiAgICBteSAoJHNlbGYsICRsb2dpbikgPSBAXzsKICAgIG15ICRkYmggPSBCdWd6aWxs
YS0+ZGJoOwoKICAgICRkYmgtPmJ6X3N0YXJ0X3RyYW5zYWN0aW9uOwoKICAgICRsb2dpbiA9ICRz
ZWxmLT5jaGVja19sb2dpbl9uYW1lKCRsb2dpbik7CiAgICBteSAkY3JlYXRpb25fcmVnZXhwID0g
QnVnemlsbGEtPnBhcmFtcy0+eydjcmVhdGVlbWFpbHJlZ2V4cCd9OwoKICAgIGlmICgkbG9naW4g
IX4gLyRjcmVhdGlvbl9yZWdleHAvaSkgewogICAgICAgIFRocm93VXNlckVycm9yKCdhY2NvdW50
X2NyZWF0aW9uX3Jlc3RyaWN0ZWQnKTsKICAgIH0KCiAgICAjIEFsbG93IGV4dGVuc2lvbnMgdG8g
ZG8gZXh0cmEgY2hlY2tzLgogICAgQnVnemlsbGE6Okhvb2s6OnByb2Nlc3MoJ3VzZXJfY2hlY2tf
YWNjb3VudF9jcmVhdGlvbicsIHsgbG9naW4gPT4gJGxvZ2luIH0pOwoKICAgICMgQ3JlYXRlIGFu
ZCBzZW5kIGEgdG9rZW4gZm9yIHRoaXMgbmV3IGFjY291bnQuCiAgICByZXF1aXJlIEJ1Z3ppbGxh
OjpUb2tlbjsKICAgIEJ1Z3ppbGxhOjpUb2tlbjo6aXNzdWVfbmV3X3VzZXJfYWNjb3VudF90b2tl
bigkbG9naW4pOwoKICAgICRkYmgtPmJ6X2NvbW1pdF90cmFuc2FjdGlvbjsKfQoKIyBUaGlzIGlz
IHVzZWQgaW4gYSBmZXcgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYXMgd2hlcmUgd2UgZG9uJ3Qg
d2FudCB0bwojIGRvIGNoZWNrKCkgYW5kIHB1bGwgYWxsIHRoZSB1c2VyIGRhdGEgZnJvbSB0aGUg
ZGF0YWJhc2UuCnN1YiBsb2dpbl90b19pZCB7CiAgICBteSAoJGxvZ2luLCAkdGhyb3dfZXJyb3Ip
ID0gQF87CiAgICBteSAkZGJoID0gQnVnemlsbGEtPmRiaDsKICAgIG15ICRjYWNoZSA9IEJ1Z3pp
bGxhLT5yZXF1ZXN0X2NhY2hlLT57dXNlcl9sb2dpbl90b19pZH0gfHw9IHt9OwoKICAgICMgV2Ug
Y2FjaGUgbG9va3VwcyBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gc2hvd2VkIHVwIGFzIHRha2luZyB1
cCBhIAogICAgIyBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZSBpbiBwcm9maWxlcyBvZiB4dC9z
ZWFyY2gudC4gSG93ZXZlciwKICAgICMgZm9yIHVzZXJzIHRoYXQgZG9uJ3QgZXhpc3QsIHdlIHJl
LWRvIHRoZSBjaGVjayBldmVyeSB0aW1lLCBiZWNhdXNlCiAgICAjIG90aGVyd2lzZSB3ZSBicmVh
ayBpc19hdmFpbGFibGVfdXNlcm5hbWUuCiAgICBteSAkdXNlcl9pZDsKICAgIGlmIChkZWZpbmVk
ICRjYWNoZS0+eyRsb2dpbn0pIHsKICAgICAgICAkdXNlcl9pZCA9ICRjYWNoZS0+eyRsb2dpbn07
CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIE5vIG5lZWQgdG8gdmFsaWRhdGUgJGxvZ2luIC0t
IGl0IHdpbGwgYmUgdXNlZCBieSB0aGUgZm9sbG93aW5nIFNFTEVDVAogICAgICAgICMgc3RhdGVt
ZW50IG9ubHksIHNvIGl0J3Mgc2FmZSB0byBzaW1wbHkgdHJpY2tfdGFpbnQuCiAgICAgICAgdHJp
Y2tfdGFpbnQoJGxvZ2luKTsKICAgICAgICAkdXNlcl9pZCA9ICRkYmgtPnNlbGVjdHJvd19hcnJh
eSgKICAgICAgICAgICAgIlNFTEVDVCB1c2VyaWQgRlJPTSBwcm9maWxlcyAKICAgICAgICAgICAg
ICBXSEVSRSAiIC4gJGRiaC0+c3FsX2lzdHJjbXAoJ2xvZ2luX25hbWUnLCAnPycpLCB1bmRlZiwg
JGxvZ2luKTsKICAgICAgICAkY2FjaGUtPnskbG9naW59ID0gJHVzZXJfaWQ7CiAgICB9CgogICAg
aWYgKCR1c2VyX2lkKSB7CiAgICAgICAgcmV0dXJuICR1c2VyX2lkOwogICAgfSBlbHNpZiAoJHRo
cm93X2Vycm9yKSB7CiAgICAgICAgVGhyb3dVc2VyRXJyb3IoJ2ludmFsaWRfdXNlcm5hbWUnLCB7
IG5hbWUgPT4gJGxvZ2luIH0pOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0K
fQoKc3ViIHZhbGlkYXRlX3Bhc3N3b3JkIHsKICAgIG15ICRjaGVjayA9IHZhbGlkYXRlX3Bhc3N3
b3JkX2NoZWNrKEBfKTsKICAgIFRocm93VXNlckVycm9yKCRjaGVjaykgaWYgJGNoZWNrOwogICAg
cmV0dXJuIDE7Cn0KCnN1YiB2YWxpZGF0ZV9wYXNzd29yZF9jaGVjayB7CiAgICBteSAoJHBhc3N3
b3JkLCAkbWF0Y2hwYXNzd29yZCkgPSBAXzsKCiAgICBpZiAobGVuZ3RoKCRwYXNzd29yZCkgPCBV
U0VSX1BBU1NXT1JEX01JTl9MRU5HVEgpIHsKICAgICAgICByZXR1cm4gJ3Bhc3N3b3JkX3Rvb19z
aG9ydCc7CiAgICB9IGVsc2lmICgoZGVmaW5lZCAkbWF0Y2hwYXNzd29yZCkgJiYgKCRwYXNzd29y
ZCBuZSAkbWF0Y2hwYXNzd29yZCkpIHsKICAgICAgICByZXR1cm4gJ3Bhc3N3b3Jkc19kb250X21h
dGNoJzsKICAgIH0KCiAgICBteSAkY29tcGxleGl0eV9sZXZlbCA9IEJ1Z3ppbGxhLT5wYXJhbXMt
PntwYXNzd29yZF9jb21wbGV4aXR5fTsKICAgIGlmICgkY29tcGxleGl0eV9sZXZlbCBlcSAnbGV0
dGVyc19udW1iZXJzX3NwZWNpYWxjaGFycycpIHsKICAgICAgICByZXR1cm4gJ3Bhc3N3b3JkX25v
dF9jb21wbGV4JwogICAgICAgICAgaWYgKCRwYXNzd29yZCAhfiAvW1s6YWxwaGE6XV0vIHx8ICRw
YXNzd29yZCAhfiAvXGQvIHx8ICRwYXNzd29yZCAhfiAvW1s6cHVuY3Q6XV0vKTsKICAgIH0gZWxz
aWYgKCRjb21wbGV4aXR5X2xldmVsIGVxICdsZXR0ZXJzX251bWJlcnMnKSB7CiAgICAgICAgcmV0
dXJuICdwYXNzd29yZF9ub3RfY29tcGxleCcKICAgICAgICAgIGlmICgkcGFzc3dvcmQgIX4gL1tb
Omxvd2VyOl1dLyB8fCAkcGFzc3dvcmQgIX4gL1tbOnVwcGVyOl1dLyB8fCAkcGFzc3dvcmQgIX4g
L1xkLyk7CiAgICB9IGVsc2lmICgkY29tcGxleGl0eV9sZXZlbCBlcSAnbWl4ZWRfbGV0dGVycycp
IHsKICAgICAgICByZXR1cm4gJ3Bhc3N3b3JkX25vdF9jb21wbGV4JwogICAgICAgICAgaWYgKCRw
YXNzd29yZCAhfiAvW1s6bG93ZXI6XV0vIHx8ICRwYXNzd29yZCAhfiAvW1s6dXBwZXI6XV0vKTsK
ICAgICMgV0VCS0lUX0NIQU5HRVMKICAgIH0gZWxzaWYgKCRjb21wbGV4aXR5X2xldmVsIGVxICd6
eGN2Ym4nKSB7CiAgICAgICAgbXkgJW9wdHMgPSAoc2NvcmVfZm9yX2ZlZWRiYWNrID0+IDMpOwog
ICAgICAgIG15ICRlc3Rfc3RyZW5ndGggPSBwYXNzd29yZF9zdHJlbmd0aCgkcGFzc3dvcmQsIFwl
b3B0cyk7CiAgICAgICAgcmV0dXJuICdQYXNzd29yZCBpcyB3ZWFrLiAnIC4gJGVzdF9zdHJlbmd0
aC0+e2ZlZWRiYWNrfS0+e3dhcm5pbmd9IC4gJy4gJwogICAgICAgICAgaWYgKCRlc3Rfc3RyZW5n
dGgtPntzY29yZX0gPCA0KTsKICAgIH0KCiAgICAjIEhhdmluZyBkb25lIHRoZXNlIGNoZWNrcyBt
YWtlcyB1cyBjb25zaWRlciB0aGUgcGFzc3dvcmQgdW50YWludGVkLgogICAgdHJpY2tfdGFpbnQo
JF9bMF0pOwogICAgcmV0dXJuOwp9CgoKMTsKCl9fRU5EX18KCj1oZWFkMSBOQU1FCgpCdWd6aWxs
YTo6VXNlciAtIE9iamVjdCBmb3IgYSBCdWd6aWxsYSB1c2VyCgo9aGVhZDEgU1lOT1BTSVMKCiAg
dXNlIEJ1Z3ppbGxhOjpVc2VyOwoKICBteSAkdXNlciA9IG5ldyBCdWd6aWxsYTo6VXNlcigkaWQp
OwoKICBteSBAZ2V0X3NlbGVjdGFibGVfY2xhc3NpZmljYXRpb25zID0gCiAgICAgICR1c2VyLT5n
ZXRfc2VsZWN0YWJsZV9jbGFzc2lmaWNhdGlvbnM7CgogICMgQ2xhc3MgRnVuY3Rpb25zCiAgJHVz
ZXIgPSBCdWd6aWxsYTo6VXNlci0+Y3JlYXRlKHsgCiAgICAgIGxvZ2luX25hbWUgICAgPT4gJHVz
ZXJuYW1lLCAKICAgICAgcmVhbG5hbWUgICAgICA9PiAkcmVhbG5hbWUsIAogICAgICBjcnlwdHBh
c3N3b3JkID0+ICRwbGFpbnRleHRfcGFzc3dvcmQsIAogICAgICBkaXNhYmxlZHRleHQgID0+ICRk
aXNhYmxlZHRleHQsCiAgICAgIGRpc2FibGVfbWFpbCAgPT4gMH0pOwoKPWhlYWQxIERFU0NSSVBU
SU9OCgpUaGlzIHBhY2thZ2UgaGFuZGxlcyBCdWd6aWxsYSB1c2Vycy4gRGF0YSBvYnRhaW5lZCBm
cm9tIGhlcmUgaXMgcmVhZC1vbmx5Owp0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIG1vZGlm
eSBhIHVzZXIgZnJvbSB0aGlzIHBhY2thZ2UuCgpOb3RlIHRoYXQgdGhlIGN1cnJlbnRseSBsb2dn
ZWQgaW4gdXNlciAoaWYgYW55KSBpcyBhdmFpbGFibGUgdmlhCkw8QnVnemlsbGEtRTxndD51c2Vy
fEJ1Z3ppbGxhLyJ1c2VyIj4uCgpDPEJ1Z3ppbGxhOjpVc2VyPiBpcyBhbiBpbXBsZW1lbnRhdGlv
biBvZiBMPEJ1Z3ppbGxhOjpPYmplY3Q+LCBhbmQgdGh1cwpwcm92aWRlcyBhbGwgdGhlIG1ldGhv
ZHMgb2YgTDxCdWd6aWxsYTo6T2JqZWN0PiBpbiBhZGRpdGlvbiB0byB0aGUKbWV0aG9kcyBsaXN0
ZWQgYmVsb3cuCgo9aGVhZDEgQ09OU1RBTlRTCgo9b3ZlcgoKPWl0ZW0gQzxVU0VSX01BVENIX01V
TFRJUExFPgoKUmV0dXJuZWQgYnkgQzxtYXRjaF9maWVsZCgpPiB3aGVuIGF0IGxlYXN0IG9uZSBm
aWVsZCBtYXRjaGVkIG1vcmUgdGhhbiAKb25lIHVzZXIsIGJ1dCBubyBtYXRjaGVzIGZhaWxlZC4K
Cj1pdGVtIEM8VVNFUl9NQVRDSF9GQUlMRUQ+CgpSZXR1cm5lZCBieSBDPG1hdGNoX2ZpZWxkKCk+
IHdoZW4gYXQgbGVhc3Qgb25lIGZpZWxkIGZhaWxlZCB0byBtYXRjaCAKYW55dGhpbmcuCgo9aXRl
bSBDPFVTRVJfTUFUQ0hfU1VDQ0VTUz4KClJldHVybmVkIGJ5IEM8bWF0Y2hfZmllbGQoKT4gd2hl
biBhbGwgZmllbGRzIHN1Y2Nlc3NmdWxseSBtYXRjaGVkIG9ubHkgb25lCnVzZXIuCgo9aXRlbSBD
PE1BVENIX1NLSVBfQ09ORklSTT4KClBhc3NlZCBpbiB0byBtYXRjaF9maWVsZCB0byB0ZWxsIG1h
dGNoX2ZpZWxkIHRvIG5ldmVyIGRpc3BsYXkgYSAKY29uZmlybWF0aW9uIHNjcmVlbi4KCj1iYWNr
Cgo9aGVhZDEgTUVUSE9EUwoKPWhlYWQyIENvbnN0cnVjdG9ycwoKPW92ZXIKCj1pdGVtIEM8c3Vw
ZXJfdXNlcj4KClJldHVybnMgYSB1c2VyIHdobyBpcyBpbiBhbGwgZ3JvdXBzLCBidXQgd2hvIGRv
ZXMgbm90IHJlYWxseSBleGlzdCBpbiB0aGUKZGF0YWJhc2UuIFVzZWQgZm9yIG5vbi13ZWIgc2Ny
aXB0cyBsaWtlIEw8Y2hlY2tzZXR1cD4gdGhhdCBuZWVkIHRvIG1ha2UgCmRhdGFiYXNlIGNoYW5n
ZXMgYW5kIHNvIG9uLgoKPWJhY2sKCj1oZWFkMiBTYXZlZCBhbmQgU2hhcmVkIFF1ZXJpZXMKCj1v
dmVyCgo9aXRlbSBDPHF1ZXJpZXM+CgpSZXR1cm5zIGFuIGFycmF5cmVmIG9mIHRoZSB1c2VyJ3Mg
b3duIHNhdmVkIHF1ZXJpZXMsIHNvcnRlZCBieSBuYW1lLiBUaGUgCmFycmF5IGNvbnRhaW5zIEw8
QnVnemlsbGE6OlNlYXJjaDo6U2F2ZWQ+IG9iamVjdHMuCgo9aXRlbSBDPHF1ZXJpZXNfc3Vic2Ny
aWJlZD4KClJldHVybnMgYW4gYXJyYXlyZWYgb2Ygc2hhcmVkIHF1ZXJpZXMgdGhhdCB0aGUgdXNl
ciBoYXMgc3Vic2NyaWJlZCB0by4KVGhhdCBpcywgdGhlc2UgYXJlIHNoYXJlZCBxdWVyaWVzIHRo
YXQgdGhlIHVzZXIgc2VlcyBpbiB0aGVpciBmb290ZXIuClRoaXMgYXJyYXkgY29udGFpbnMgTDxC
dWd6aWxsYTo6U2VhcmNoOjpTYXZlZD4gb2JqZWN0cy4KCj1pdGVtIEM8cXVlcmllc19hdmFpbGFi
bGU+CgpSZXR1cm5zIGFuIGFycmF5cmVmIG9mIGFsbCBxdWVyaWVzIHRvIHdoaWNoIHRoZSB1c2Vy
IGNvdWxkIHBvc3NpYmx5CnN1YnNjcmliZS4gVGhpcyBpbmNsdWRlcyB0aGUgY29udGVudHMgb2Yg
TDwvcXVlcmllc19zdWJzY3JpYmVkPi4KQW4gYXJyYXkgb2YgTDxCdWd6aWxsYTo6U2VhcmNoOjpT
YXZlZD4gb2JqZWN0cy4KCj1pdGVtIEM8Zmx1c2hfcXVlcmllc19jYWNoZT4KClNvbWUgY29kZSBt
b2RpZmllcyB0aGUgc2V0IG9mIHN0b3JlZCBxdWVyaWVzLiBCZWNhdXNlIEM8QnVnemlsbGE6OlVz
ZXI+IGRvZXMKbm90IGhhbmRsZSB0aGVzZSBtb2RpZmljYXRpb25zLCBidXQgZG9lcyBjYWNoZSB0
aGUgcmVzdWx0IG9mIGNhbGxpbmcgQzxxdWVyaWVzPgppbnRlcm5hbGx5LCBzdWNoIGNvZGUgbXVz
dCBjYWxsIHRoaXMgbWV0aG9kIHRvIGZsdXNoIHRoZSBjYWNoZWQgcmVzdWx0LgoKPWl0ZW0gQzxx
dWVyeXNoYXJlX2dyb3Vwcz4KCkFuIGFycmF5cmVmIG9mIGdyb3VwIGlkcy4gVGhlIHVzZXIgY2Fu
IHNoYXJlIHRoZWlyIG93biBxdWVyaWVzIHdpdGggdGhlc2UKZ3JvdXBzLgoKPWl0ZW0gQzx0YWdz
PgoKUmV0dXJucyBhIGhhc2hyZWYgd2l0aCB0YWcgSURzIGFzIGtleSwgYW5kIGEgaGFzaHJlZiB3
aXRoIHRhZyAnaWQnLAonbmFtZScgYW5kICdidWdfY291bnQnIGFzIHZhbHVlLgoKPWl0ZW0gQzxi
dWdzX2lnbm9yZWQ+CgpSZXR1cm5zIGFuIGFycmF5IG9mIGhhc2hyZWZzIGNvbnRhaW5pbmcgaW5m
b3JtYXRpb24gYWJvdXQgYnVncyBjdXJyZW50bHkKYmVpbmcgaWdub3JlZCBieSB0aGUgdXNlci4K
CkVhY2ggaGFzaHJlZiBjb250YWlucyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgoKPW92ZXIK
Cj1pdGVtIEM8aWQ+CgpDPGludD4gVGhlIGlkIG9mIHRoZSBidWcuCgo9aXRlbSBDPHN0YXR1cz4K
CkM8c3RyaW5nPiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGJ1Zy4KCj1pdGVtIEM8c3VtbWFy
eT4KCkM8c3RyaW5nPiBUaGUgY3VycmVudCBzdW1tYXJ5IG9mIHRoZSBidWcuCgo9YmFjawoKPWl0
ZW0gQzxpc19idWdfaWdub3JlZD4KClJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBkb2VzIG5vdCB3
YW50IGVtYWlsIG5vdGlmaWNhdGlvbnMgZm9yIHRoZQpzcGVjaWZpZWQgYnVnIElELCBlbHNlIHJl
dHVybnMgZmFsc2UuCgo9YmFjawoKPWhlYWQyIFNhdmVkIFJlY2VudCBCdWcgTGlzdHMKCj1vdmVy
Cgo9aXRlbSBDPHJlY2VudF9zZWFyY2hlcz4KClJldHVybnMgYW4gYXJyYXlyZWYgb2YgTDxCdWd6
aWxsYTo6U2VhcmNoOjpSZWNlbnQ+IG9iamVjdHMKY29udGFpbmluZyB0aGUgdXNlcidzIHJlY2Vu
dCBzZWFyY2hlcy4KCj1pdGVtIEM8cmVjZW50X3NlYXJjaF9jb250YWluaW5nKGJ1Z19pZCk+CgpS
ZXR1cm5zIGEgTDxCdWd6aWxsYTo6U2VhcmNoOjpSZWNlbnQ+IG9iamVjdCB0aGF0IGNvbnRhaW5z
IHRoZSBtb3N0IHJlY2VudApzZWFyY2ggYnkgdGhlIHVzZXIgZm9yIHRoZSBzcGVjaWZpZWQgYnVn
IGlkLiBSZXR1bnMgdW5kZWYgaWYgbm8gbWF0Y2ggaXMgZm91bmQuCgo9aXRlbSBDPHJlY2VudF9z
ZWFyY2hfZm9yKGJ1Zyk+CgpSZXR1cm5zIGEgTDxCdWd6aWxsYTo6U2VhcmNoOjpSZWNlbnQ+IG9i
amVjdCB0aGF0IGNvbnRhaW5zIGEgc2VhcmNoIGJ5IHRoZQp1c2VyLiBVc2VzIHRoZSBsaXN0X2lk
IG9mIHRoZSBjdXJyZW50IGxvYWRlZCBwYWdlLCBvciB0aGUgcmVmZXJyZXIgcGFnZSwgYW5kCnRo
ZSBidWcgaWQgaWYgdGhhdCBmYWlscy4gRmluYWxseSBpdCB3aWxsIGNoZWNrIHRoZSBCVUdMSVNU
IGNvb2tpZSwgYW5kIGNyZWF0ZQphbiBvYmplY3QgYmFzZWQgb24gdGhhdCwgb3IgdW5kZWYgaWYg
aXQgZG9lcyBub3QgZXhpc3QuCgo9aXRlbSBDPHNhdmVfbGFzdF9zZWFyY2g+CgpTYXZlcyB0aGUg
dXNlcnMgbW9zdCByZWNlbnQgc2VhcmNoIGluIHRoZSBkYXRhYmFzZSBpZiBsb2dnZWQgaW4sIG9y
IGluIHRoZQpCVUdMSVNUIGNvb2tpZSBpZiBub3QgbG9nZ2VkIGluLiBQYXJhbWV0ZXJzIGFyZSBi
dWdfaWRzLCBvcmRlciwgdmFycyBhbmQKbGlzdF9pZC4KCj1iYWNrCgo9aGVhZDIgQWNjb3VudCBM
b2Nrb3V0Cgo9b3ZlcgoKPWl0ZW0gQzxhY2NvdW50X2lzX2xvY2tlZF9vdXQ+CgpSZXR1cm5zIEM8
MT4gaWYgdGhlIGFjY291bnQgaGFzIGZhaWxlZCB0byBsb2cgaW4gdG9vIG1hbnkgdGltZXMgcmVj
ZW50bHksCmFuZCB0aHVzIGlzIGxvY2tlZCBvdXQgZm9yIGEgcGVyaW9kIG9mIHRpbWUuIFJldHVy
bnMgQzwwPiBvdGhlcndpc2UuCgo9aXRlbSBDPGFjY291bnRfaXBfbG9naW5fZmFpbHVyZXM+CgpS
ZXR1cm5zIGFuIGFycmF5cmVmIG9mIGhhc2hyZWZzLCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9u
IGFib3V0IHRoZSByZWNlbnQKdGltZXMgdGhhdCB0aGlzIGFjY291bnQgaGFzIGZhaWxlZCB0byBs
b2cgaW4gZnJvbSB0aGUgY3VycmVudCByZW1vdGUgSVAuClRoZSBoYXNoZXMgY29udGFpbiBDPGlw
X2FkZHI+LCBDPGxvZ2luX3RpbWU+LCBhbmQgQzx1c2VyX2lkPi4KCj1pdGVtIEM8bm90ZV9sb2dp
bl9mYWlsdXJlPgoKVGhpcyBub3RlcyB0aGF0IHRoaXMgYWNjb3VudCBoYXMgZmFpbGVkIHRvIGxv
ZyBpbiwgYW5kIHN0b3JlcyB0aGUgZmFjdAppbiB0aGUgZGF0YWJhc2UuIFRoZSBzdG9yaW5nIGhh
cHBlbnMgaW1tZWRpYXRlbHksIGl0IGRvZXMgbm90IHdhaXQgZm9yCnlvdSB0byBjYWxsIEM8dXBk
YXRlPi4KCj1pdGVtIEM8c2V0X2VtYWlsX2VuYWJsZWQ+CgpDPGJvb2w+IC0gU2V0cyBDPGRpc2Fi
bGVfbWFpbD4gdG8gdGhlIGludmVyc2Ugb2YgdGhlIGJvb2xlYW4gcHJvdmlkZWQuCgo9YmFjawoK
PWhlYWQyIE90aGVyIE1ldGhvZHMKCj1vdmVyCgo9aXRlbSBDPGlkPgoKUmV0dXJucyB0aGUgdXNl
cmlkIGZvciB0aGlzIHVzZXIuCgo9aXRlbSBDPGxvZ2luPgoKUmV0dXJucyB0aGUgbG9naW4gbmFt
ZSBmb3IgdGhpcyB1c2VyLgoKPWl0ZW0gQzxlbWFpbD4KClJldHVybnMgdGhlIHVzZXIncyBlbWFp
bCBhZGRyZXNzLiBDdXJyZW50bHkgdGhpcyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUKbG9naW4u
Cgo9aXRlbSBDPG5hbWU+CgpSZXR1cm5zIHRoZSAncmVhbCcgbmFtZSBmb3IgdGhpcyB1c2VyLCBp
ZiBhbnkuCgo9aXRlbSBDPHNob3dteWJ1Z3NsaW5rPgoKUmV0dXJucyBDPDE+IGlmIHRoZSB1c2Vy
IGhhcyBzZXQgdGhlaXIgcHJlZmVyZW5jZSB0byBzaG93IHRoZSAnTXkgQnVncycgbGluayBpbgp0
aGUgcGFnZSBmb290ZXIsIGFuZCBDPDA+IG90aGVyd2lzZS4KCj1pdGVtIEM8aWRlbnRpdHk+CgpS
ZXR1cm5zIGEgc3RyaW5nIGZvciB0aGUgaWRlbnRpdHkgb2YgdGhlIHVzZXIuIFRoaXMgd2lsbCBi
ZSBvZiB0aGUgZm9ybQpDPG5hbWUgRTxsdD5lbWFpbEU8Z3Q+PiBpZiB0aGUgdXNlciBoYXMgc3Bl
Y2lmaWVkIGEgbmFtZSwgYW5kIEM8ZW1haWw+Cm90aGVyd2lzZS4KCj1pdGVtIEM8bmljaz4KClJl
dHVybnMgYSB1c2VyICJuaWNrbmFtZSIgLS0gaS5lLiBhIHNob3J0ZXIsIG5vdC1uZWNlc3Nhcmls
eS11bmlxdWUgbmFtZSBieQp3aGljaCB0byBpZGVudGlmeSB0aGUgdXNlci4gQ3VycmVudGx5IHRo
ZSBwYXJ0IG9mIHRoZSB1c2VyJ3MgZW1haWwgYWRkcmVzcwpiZWZvcmUgdGhlIGF0IHNpZ24gKEAp
LCBidXQgdGhhdCBjb3VsZCBjaGFuZ2UsIGVzcGVjaWFsbHkgaWYgd2UgaW1wbGVtZW50CnVzZXJu
YW1lcyBub3QgZGVwZW5kZW50IG9uIGVtYWlsIGFkZHJlc3MuCgo9aXRlbSBDPGF1dGhvcml6ZXI+
CgpUaGlzIGlzIHRoZSBMPEJ1Z3ppbGxhOjpBdXRoPiBvYmplY3QgdGhhdCB0aGUgVXNlciBsb2dn
ZWQgaW4gd2l0aC4KSWYgdGhlIHVzZXIgaGFzbid0IGxvZ2dlZCBpbiB5ZXQsIGEgbmV3LCBlbXB0
eSBCdWd6aWxsYTo6QXV0aCgpIG9iamVjdCBpcwpyZXR1cm5lZC4KCj1pdGVtIEM8c2V0X2F1dGhv
cml6ZXIoJGF1dGhvcml6ZXIpPgoKU2V0cyB0aGUgTDxCdWd6aWxsYTo6QXV0aD4gb2JqZWN0IHRv
IGJlIHJldHVybmVkIGJ5IEM8YXV0aG9yaXplcigpPi4KU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5
IEM8QnVnemlsbGE6OkF1dGg6OmxvZ2luPiwgZm9yIHRoZSBtb3N0IHBhcnQuCgo9aXRlbSBDPGRp
c2FibGVkdGV4dD4KClJldHVybnMgdGhlIGRpc2FibGUgdGV4dCBvZiB0aGUgdXNlciwgaWYgYW55
LgoKPWl0ZW0gQzxyZXBvcnRzPgoKUmV0dXJucyBhbiBhcnJheXJlZiBvZiB0aGUgdXNlcidzIG93
biBzYXZlZCByZXBvcnRzLiBUaGUgYXJyYXkgY29udGFpbnMgCkw8QnVnemlsbGE6OlJlcG9ydHM+
IG9iamVjdHMuCgo9aXRlbSBDPGZsdXNoX3JlcG9ydHNfY2FjaGU+CgpTb21lIGNvZGUgbW9kaWZp
ZXMgdGhlIHNldCBvZiBzdG9yZWQgcmVwb3J0cy4gQmVjYXVzZSBDPEJ1Z3ppbGxhOjpVc2VyPiBk
b2VzCm5vdCBoYW5kbGUgdGhlc2UgbW9kaWZpY2F0aW9ucywgYnV0IGRvZXMgY2FjaGUgdGhlIHJl
c3VsdCBvZiBjYWxsaW5nIEM8cmVwb3J0cz4KaW50ZXJuYWxseSwgc3VjaCBjb2RlIG11c3QgY2Fs
bCB0aGlzIG1ldGhvZCB0byBmbHVzaCB0aGUgY2FjaGVkIHJlc3VsdC4KCj1pdGVtIEM8c2V0dGlu
Z3M+CgpSZXR1cm5zIGEgaGFzaCBvZiBoYXNoZXMgd2hpY2ggaG9sZHMgdGhlIHVzZXIncyBzZXR0
aW5ncy4gVGhlIGZpcnN0IGtleSBpcwp0aGUgbmFtZSBvZiB0aGUgc2V0dGluZywgYXMgZm91bmQg
aW4gc2V0dGluZy5uYW1lLiBUaGUgc2Vjb25kIGtleSBpcyBvbmUgb2Y6CmlzX2VuYWJsZWQgICAg
IC0gdHJ1ZSBpZiB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIHNldCB0aGUgcHJlZmVyZW5jZSB0aGVt
c2VsdmVzOwogICAgICAgICAgICAgICAgIGZhbHNlIHRvIGZvcmNlIHRoZSBzaXRlIGRlZmF1bHRz
CiAgICAgICAgICAgICAgICAgZm9yIHRoZW1zZWx2ZXMgb3IgbXVzdCBhY2NlcHQgdGhlIGdsb2Jh
bCBzaXRlIGRlZmF1bHQgdmFsdWUKZGVmYXVsdF92YWx1ZSAgLSB0aGUgZ2xvYmFsIHNpdGUgZGVm
YXVsdCBmb3IgdGhpcyBzZXR0aW5nCnZhbHVlICAgICAgICAgIC0gdGhlIHZhbHVlIG9mIHRoaXMg
c2V0dGluZyBmb3IgdGhpcyB1c2VyLiBXaWxsIGJlIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAg
YXMgdGhlIGRlZmF1bHRfdmFsdWUgaWYgdGhlIHVzZXIgaXMgbm90IGxvZ2dlZCBpbiwgb3IgaWYg
CiAgICAgICAgICAgICAgICAgaXNfZGVmYXVsdCBpcyB0cnVlLgppc19kZWZhdWx0ICAgICAtIGEg
Ym9vbGVhbiB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBjaG9zZW4gdG8gbWFrZQog
ICAgICAgICAgICAgICAgIGEgcHJlZmVyZW5jZSBmb3IgdGhlbXNlbGYgb3IgdXNlIHRoZSBzaXRl
IGRlZmF1bHQuCgo9aXRlbSBDPHNldHRpbmcobmFtZSk+CgpSZXR1cm5zIHRoZSB2YWx1ZSBmb3Ig
dGhlIHNwZWNpZmllZCBzZXR0aW5nLgoKPWl0ZW0gQzx0aW1lem9uZT4KClJldHVybnMgdGhlIHRp
bWV6b25lIHVzZWQgdG8gZGlzcGxheSBkYXRlcyBhbmQgdGltZXMgdG8gdGhlIHVzZXIsCmFzIGEg
RGF0ZVRpbWU6OlRpbWVab25lIG9iamVjdC4KCj1pdGVtIEM8Z3JvdXBzPgoKUmV0dXJucyBhbiBh
cnJheXJlZiBvZiBMPEJ1Z3ppbGxhOjpHcm91cD4gb2JqZWN0cyByZXByZXNlbnRpbmcKZ3JvdXBz
IHRoYXQgdGhpcyB1c2VyIGlzIGEgbWVtYmVyIG9mLgoKPWl0ZW0gQzxncm91cHNfYXNfc3RyaW5n
PgoKUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Yg
bnVtZXJpYyBncm91cCBpZHMuICBJZgp0aGUgdXNlciBpcyBub3QgYSBtZW1iZXIgb2YgYW55IGdy
b3VwcywgcmV0dXJucyAiLTEiLiBUaGlzIGlzIG1vc3Qgb2Z0ZW4gdXNlZAp3aXRoaW4gYW4gU1FM
IElOKCkgZnVuY3Rpb24uCgo9aXRlbSBDPGdyb3Vwc19pbl9zcWw+CgpUaGlzIHJldHVybnMgYW4g
QzxJTj4gY2xhdXNlIGZvciBTUUwsIGNvbnRhaW5pbmcgZWl0aGVyIGFsbCBvZiB0aGUgZ3JvdXBz
CnRoZSB1c2VyIGlzIGluLCBvciBDPC0xPiBpZiB0aGUgdXNlciBpcyBpbiBubyBncm91cHMuIFRo
aXMgdGFrZXMgb25lCmFyZ3VtZW50LS10aGUgbmFtZSBvZiB0aGUgU1FMIGZpZWxkIHRoYXQgc2hv
dWxkIGJlIG9uIHRoZSBsZWZ0LWhhbmQtc2lkZQpvZiB0aGUgQzxJTj4gc3RhdGVtZW50LCB3aGlj
aCBkZWZhdWx0cyB0byBDPGdyb3VwX2lkPiBpZiBub3Qgc3BlY2lmaWVkLgoKPWl0ZW0gQzxpbl9n
cm91cCgkZ3JvdXBfbmFtZSwgJHByb2R1Y3RfaWQpPgoKRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5v
dCBhIHVzZXIgaXMgaW4gdGhlIGdpdmVuIGdyb3VwIGJ5IG5hbWUuCklmICRwcm9kdWN0X2lkIGlz
IGdpdmVuLCBpdCBhbHNvIGNoZWNrcyBmb3IgbG9jYWwgcHJpdmlsZWdlcyBmb3IKdGhpcyBwcm9k
dWN0LgoKPWl0ZW0gQzxpbl9ncm91cF9pZD4KCkRldGVybWluZXMgd2hldGhlciBvciBub3QgYSB1
c2VyIGlzIGluIHRoZSBnaXZlbiBncm91cCBieSBpZC4gCgo9aXRlbSBDPGJsZXNzX2dyb3Vwcz4K
ClJldHVybnMgYW4gYXJyYXlyZWYgb2YgTDxCdWd6aWxsYTo6R3JvdXA+IG9iamVjdHMuCgpUaGUg
YXJyYXlyZWYgY29uc2lzdHMgb2YgdGhlIGdyb3VwcyB0aGUgdXNlciBjYW4gYmxlc3MsIHRha2lu
ZyBpbnRvIGFjY291bnQKdGhhdCBoYXZpbmcgZWRpdHVzZXJzIHBlcm1pc3Npb25zIG1lYW5zIHRo
YXQgeW91IGNhbiBibGVzcyBhbGwgZ3JvdXBzLCBhbmQKdGhhdCB5b3UgbmVlZCB0byBiZSBhYmxl
IHRvIHNlZSBhIGdyb3VwIGluIG9yZGVyIHRvIGJsZXNzIGl0LgoKPWl0ZW0gQzxnZXRfcHJvZHVj
dHNfYnlfcGVybWlzc2lvbigkZ3JvdXApPgoKUmV0dXJucyBhIGxpc3Qgb2YgcHJvZHVjdCBvYmpl
Y3RzIGZvciB3aGljaCB0aGUgdXNlciBoYXMgJGdyb3VwIHByaXZpbGVnZXMKYW5kIHdoaWNoIHRo
ZXkgY2FuIGFjY2Vzcy4KJGdyb3VwIG11c3QgYmUgb25lIG9mIHRoZSBncm91cHMgZGVmaW5lZCBp
biBQRVJfUFJPRFVDVF9QUklWSUxFR0VTLgoKPWl0ZW0gQzxjYW5fc2VlX3VzZXIodXNlcik+CgpS
ZXR1cm5zIDEgaWYgdGhlIHNwZWNpZmllZCB1c2VyIGFjY291bnQgZXhpc3RzIGFuZCBpcyB2aXNp
YmxlIHRvIHRoZSB1c2VyLAowIG90aGVyd2lzZS4KCj1pdGVtIEM8Y2FuX2VkaXRfcHJvZHVjdChw
cm9kX2lkKT4KCkRldGVybWluZXMgaWYsIGdpdmVuIGEgcHJvZHVjdCBpZCwgdGhlIHVzZXIgY2Fu
IGVkaXQgYnVncyBpbiB0aGlzIHByb2R1Y3QKYXQgYWxsLgoKPWl0ZW0gQzx2aXNpYmxlX2J1Z3Mo
JGJ1Z3MpPgoKRGVzY3JpcHRpb246IERldGVybWluZXMgaWYgYSBsaXN0IG9mIGJ1Z3MgYXJlIHZp
c2libGUgdG8gdGhlIHVzZXIuClBhcmFtczogICAgICBDPCRidWdzPiAtIEFuIGFycmF5cmVmIG9m
IEJ1Z3ppbGxhOjpCdWcgb2JqZWN0cyBvciBidWcgaWRzClJldHVybnM6ICAgICBBbiBhcnJheXJl
ZiBvZiB0aGUgYnVnIGlkcyB0aGF0IHRoZSB1c2VyIGNhbiBzZWUKCj1pdGVtIEM8Y2FuX3NlZV9i
dWcoYnVnX2lkKT4KCkRldGVybWluZXMgaWYgdGhlIHVzZXIgY2FuIHNlZSB0aGUgc3BlY2lmaWVk
IGJ1Zy4KCj1pdGVtIEM8Y2FuX3NlZV9wcm9kdWN0KHByb2R1Y3RfbmFtZSk+CgpSZXR1cm5zIDEg
aWYgdGhlIHVzZXIgY2FuIGFjY2VzcyB0aGUgc3BlY2lmaWVkIHByb2R1Y3QsIGFuZCAwIGlmIHRo
ZSB1c2VyCnNob3VsZCBub3QgYmUgYXdhcmUgb2YgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgcHJvZHVj
dC4KCj1pdGVtIEM8ZGVyaXZlX3JlZ2V4cF9ncm91cHM+CgpCdWd6aWxsYSBhbGxvd3MgZm9yIGdy
b3VwIGluaGVyaXRhbmNlLiBXaGVuIGRhdGEgYWJvdXQgdGhlIHVzZXIgKG9yIGFueSBvZiB0aGUK
Z3JvdXBzKSBjaGFuZ2VzLCB0aGUgZGF0YWJhc2UgbXVzdCBiZSB1cGRhdGVkLiBIYW5kbGluZyB1
cGRhdGVkIGdyb3VwcyBpcyB0YWtlbgpjYXJlIG9mIGJ5IHRoZSBjb25zdHJ1Y3Rvci4gSG93ZXZl
ciwgd2hlbiB1cGRhdGluZyB0aGUgZW1haWwgYWRkcmVzcywgdGhlCnVzZXIgbWF5IGJlIHBsYWNl
ZCBpbnRvIGRpZmZlcmVudCBncm91cHMsIGJhc2VkIG9uIGEgbmV3IGVtYWlsIHJlZ2V4cC4gVGhp
cwptZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBpbiBzdWNoIGEgY2FzZSB0byBmb3JjZSByZXJlc29s
dXRpb24gb2YgdGhlc2UgZ3JvdXBzLgoKPWl0ZW0gQzxjbGVhcl9wcm9kdWN0X2NhY2hlPgoKQ2xl
YXJzIHRoZSBzdG9yZWQgdmFsdWVzIGZvciBMPC9nZXRfc2VsZWN0YWJsZV9wcm9kdWN0cz4sIApM
PC9nZXRfZW50ZXJhYmxlX3Byb2R1Y3RzPiwgZXRjLiBzbyB0aGF0IHRoZWlyIGRhdGEgd2lsbCBi
ZSByZWFkIGZyb20KdGhlIGRhdGFiYXNlIGFnYWluLiBVc2VkIG1vc3RseSBieSBMPEJ1Z3ppbGxh
OjpQcm9kdWN0Pi4KCj1pdGVtIEM8Z2V0X3NlbGVjdGFibGVfcHJvZHVjdHM+CgogRGVzY3JpcHRp
b246IFJldHVybnMgYWxsIHByb2R1Y3RzIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gYWNjZXNzLiBU
aGlzIGxpc3QKICAgICAgICAgICAgICBpcyByZXN0cmljdGVkIHRvIHNvbWUgZ2l2ZW4gY2xhc3Np
ZmljYXRpb24gaWYgJGNsYXNzaWZpY2F0aW9uX2lkCiAgICAgICAgICAgICAgaXMgZ2l2ZW4uCgog
UGFyYW1zOiAgICAgICRjbGFzc2lmaWNhdGlvbl9pZCAtIChvcHRpb25hbCkgVGhlIElEIG9mIHRo
ZSBjbGFzc2lmaWNhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBw
cm9kdWN0cyBiZWxvbmcgdG8uCgogUmV0dXJuczogICAgIEFuIGFycmF5IG9mIHByb2R1Y3Qgb2Jq
ZWN0cywgc29ydGVkIGJ5IHRoZSBwcm9kdWN0IG5hbWUuCgo9aXRlbSBDPGdldF9zZWxlY3RhYmxl
X2NsYXNzaWZpY2F0aW9ucz4KCiBEZXNjcmlwdGlvbjogUmV0dXJucyBhbGwgY2xhc3NpZmljYXRp
b25zIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIHByb2R1Y3QKICAgICAgICAgICAgICB0aGUgdXNl
ciBpcyBhbGxvd2VkIHRvIHZpZXcuCgogUGFyYW1zOiAgICAgIG5vbmUKCiBSZXR1cm5zOiAgICAg
QW4gYXJyYXkgb2YgQnVnemlsbGE6OkNsYXNzaWZpY2F0aW9uIG9iamVjdHMsIHNvcnRlZCBieQog
ICAgICAgICAgICAgIHRoZSBjbGFzc2lmaWNhdGlvbiBuYW1lLgoKPWl0ZW0gQzxjYW5fZW50ZXJf
cHJvZHVjdCgkcHJvZHVjdF9uYW1lLCAkd2Fybik+CgogRGVzY3JpcHRpb246IFJldHVybnMgYSBw
cm9kdWN0IG9iamVjdCBpZiB0aGUgdXNlciBjYW4gZW50ZXIgYnVncyBpbnRvIHRoZQogICAgICAg
ICAgICAgIHNwZWNpZmllZCBwcm9kdWN0LgogICAgICAgICAgICAgIElmIHRoZSB1c2VyIGNhbm5v
dCBlbnRlciBidWdzIGludG8gdGhlIHByb2R1Y3QsIHRoZSBiZWhhdmlvciBvZgogICAgICAgICAg
ICAgIHRoaXMgbWV0aG9kIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mICR3YXJuOgogICAgICAgICAg
ICAgIC0gaWYgJHdhcm4gaXMgZmFsc2UgKG9yIG5vdCBnaXZlbiksIGEgJ2ZhbHNlJyB2YWx1ZSBp
cyByZXR1cm5lZDsKICAgICAgICAgICAgICAtIGlmICR3YXJuIGlzIHRydWUsIGFuIGVycm9yIGlz
IHRocm93bi4KCiBQYXJhbXM6ICAgICAgJHByb2R1Y3RfbmFtZSAtIGEgcHJvZHVjdCBuYW1lLgog
ICAgICAgICAgICAgICR3YXJuICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXIsIGluZGljYXRp
bmcgd2hldGhlciBhbiBlcnJvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJl
IHRocm93biBpZiB0aGUgdXNlciBjYW5ub3QgZW50ZXIgYnVncwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnRvIHRoZSBzcGVjaWZpZWQgcHJvZHVjdC4KCiBSZXR1cm5zOiAgICAgQSBw
cm9kdWN0IG9iamVjdCBpZiB0aGUgdXNlciBjYW4gZW50ZXIgYnVncyBpbnRvIHRoZSBwcm9kdWN0
LAogICAgICAgICAgICAgIDAgaWYgdGhlIHVzZXIgY2Fubm90IGVudGVyIGJ1Z3MgaW50byB0aGUg
cHJvZHVjdCBhbmQgaWYgJHdhcm4KICAgICAgICAgICAgICBpcyBmYWxzZSAoYW4gZXJyb3IgaXMg
dGhyb3duIGlmICR3YXJuIGlzIHRydWUpLgoKPWl0ZW0gQzxnZXRfZW50ZXJhYmxlX3Byb2R1Y3Rz
PgoKIERlc2NyaXB0aW9uOiBSZXR1cm5zIGFuIGFycmF5IG9mIHByb2R1Y3Qgb2JqZWN0cyBpbnRv
IHdoaWNoIHRoZSB1c2VyIGlzCiAgICAgICAgICAgICAgYWxsb3dlZCB0byBlbnRlciBidWdzLgoK
IFBhcmFtczogICAgICBub25lCgogUmV0dXJuczogICAgIGFuIGFycmF5IG9mIHByb2R1Y3Qgb2Jq
ZWN0cy4KCj1pdGVtIEM8Y2FuX2FjY2Vzc19wcm9kdWN0KCRwcm9kdWN0KT4KClJldHVybnMgMSBp
ZiB0aGUgdXNlciBjYW4gc2VhcmNoIG9yIGVudGVyIGJ1Z3MgaW50byB0aGUgc3BlY2lmaWVkIHBy
b2R1Y3QKKGVpdGhlciBhIEw8QnVnemlsbGE6OlByb2R1Y3Q+IG9yIGEgcHJvZHVjdCBuYW1lKSwg
YW5kIDAgaWYgdGhlIHVzZXIgc2hvdWxkCm5vdCBiZSBhd2FyZSBvZiB0aGUgZXhpc3RlbmNlIG9m
IHRoZSBwcm9kdWN0LgoKPWl0ZW0gQzxnZXRfYWNjZXNzaWJsZV9wcm9kdWN0cz4KCiBEZXNjcmlw
dGlvbjogUmV0dXJucyBhbiBhcnJheSBvZiBwcm9kdWN0IG9iamVjdHMgdGhlIHVzZXIgY2FuIHNl
YXJjaAogICAgICAgICAgICAgIG9yIGVudGVyIGJ1Z3MgYWdhaW5zdC4KCiBQYXJhbXM6ICAgICAg
bm9uZQoKIFJldHVybnM6ICAgICBhbiBhcnJheSBvZiBwcm9kdWN0IG9iamVjdHMuCgo9aXRlbSBD
PGNhbl9hZG1pbmlzdGVyPgoKUmV0dXJucyAxIGlmIHRoZSB1c2VyIGNhbiBzZWUgdGhlIGFkbWlu
IG1lbnUuIE90aGVyd2lzZSwgcmV0dXJucyAwCgo9aXRlbSBDPGNoZWNrX2Nhbl9hZG1pbl9wcm9k
dWN0KCRwcm9kdWN0X25hbWUpPgoKIERlc2NyaXB0aW9uOiBDaGVja3Mgd2hldGhlciB0aGUgdXNl
ciBpcyBhbGxvd2VkIHRvIGFkbWluaXN0cmF0ZSB0aGUgcHJvZHVjdC4KCiBQYXJhbXM6ICAgICAg
JHByb2R1Y3RfbmFtZSAtIGEgcHJvZHVjdCBuYW1lLgoKIFJldHVybnM6ICAgICBPbiBzdWNjZXNz
LCBhIHByb2R1Y3Qgb2JqZWN0LiBPbiBmYWlsdXJlLCBhbiBlcnJvciBpcyB0aHJvd24uCgo9aXRl
bSBDPGNoZWNrX2Nhbl9hZG1pbl9mbGFndHlwZSgkZmxhZ3R5cGVfaWQpPgoKIERlc2NyaXB0aW9u
OiBDaGVja3Mgd2hldGhlciB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIGVkaXQgcHJvcGVydGllcyBv
ZiB0aGUgZmxhZyB0eXBlLgogICAgICAgICAgICAgIElmIHRoZSBmbGFnIHR5cGUgaXMgYWxzbyB1
c2VkIGJ5IHNvbWUgcHJvZHVjdHMgZm9yIHdoaWNoIHRoZSB1c2VyCiAgICAgICAgICAgICAgaGFz
bid0IGVkaXRjb21wb25lbnRzIHByaXZzLCB0aGVuIHRoZSB1c2VyIGlzIG9ubHkgYWxsb3dlZCB0
byBlZGl0CiAgICAgICAgICAgICAgdGhlIGluY2x1c2lvbiBhbmQgZXhjbHVzaW9uIGxpc3RzIGZv
ciBwcm9kdWN0cyB0aGV5IGNhbiBhZG1pbmlzdHJhdGUuCgogUGFyYW1zOiAgICAgICRmbGFndHlw
ZV9pZCAtIGEgZmxhZyB0eXBlIElELgoKIFJldHVybnM6ICAgICBPbiBzdWNjZXNzLCBhIGZsYWcg
dHlwZSBvYmplY3QuIE9uIGZhaWx1cmUsIGFuIGVycm9yIGlzIHRocm93bi4KICAgICAgICAgICAg
ICBJbiBsaXN0IGNvbnRleHQsIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHVzZXIg
Y2FuIGVkaXQKICAgICAgICAgICAgICBhbGwgcHJvcGVydGllcyBvZiB0aGUgZmxhZyB0eXBlIGlz
IGFsc28gcmV0dXJuZWQuIFRoZSBib29sZWFuCiAgICAgICAgICAgICAgaXMgZmFsc2UgaWYgdGhl
IHVzZXIgY2FuIG9ubHkgZWRpdCB0aGUgaW5jbHVzaW9uIGFuZCBleGNsdXNpb25zCiAgICAgICAg
ICAgICAgbGlzdHMuCgo9aXRlbSBDPGNhbl9yZXF1ZXN0X2ZsYWcoJGZsYWdfdHlwZSk+CgogRGVz
Y3JpcHRpb246IENoZWNrcyB3aGV0aGVyIHRoZSB1c2VyIGNhbiByZXF1ZXN0IGZsYWdzIG9mIHRo
ZSBnaXZlbiB0eXBlLgoKIFBhcmFtczogICAgICAkZmxhZ190eXBlIC0gYSBCdWd6aWxsYTo6Rmxh
Z1R5cGUgb2JqZWN0LgoKIFJldHVybnM6ICAgICAxIGlmIHRoZSB1c2VyIGNhbiByZXF1ZXN0IGZs
YWdzIG9mIHRoZSBnaXZlbiB0eXBlLAogICAgICAgICAgICAgIDAgb3RoZXJ3aXNlLgoKPWl0ZW0g
QzxjYW5fc2V0X2ZsYWcoJGZsYWdfdHlwZSk+CgogRGVzY3JpcHRpb246IENoZWNrcyB3aGV0aGVy
IHRoZSB1c2VyIGNhbiBzZXQgZmxhZ3Mgb2YgdGhlIGdpdmVuIHR5cGUuCgogUGFyYW1zOiAgICAg
ICRmbGFnX3R5cGUgLSBhIEJ1Z3ppbGxhOjpGbGFnVHlwZSBvYmplY3QuCgogUmV0dXJuczogICAg
IDEgaWYgdGhlIHVzZXIgY2FuIHNldCBmbGFncyBvZiB0aGUgZ2l2ZW4gdHlwZSwKICAgICAgICAg
ICAgICAwIG90aGVyd2lzZS4KCj1pdGVtIEM8Z2V0X3VzZXJsaXN0PgoKUmV0dXJucyBhIHJlZmVy
ZW5jZSB0byBhbiBhcnJheSBvZiB1c2Vycy4gIFRoZSBhcnJheSBpcyBwb3B1bGF0ZWQgd2l0aCBo
YXNocmVmcwpjb250YWluaW5nIHRoZSBsb2dpbiwgaWRlbnRpdHkgYW5kIHZpc2liaWxpdHkuICBV
c2VycyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0byB0aGlzCnVzZXIgd2lsbCBoYXZlICd2aXNpYmxl
JyBzZXQgdG8gemVyby4KCj1pdGVtIEM8dmlzaWJsZV9ncm91cHNfaW5oZXJpdGVkPgoKUmV0dXJu
cyBhIGxpc3Qgb2YgYWxsIGdyb3VwcyB3aG9zZSBtZW1iZXJzIHNob3VsZCBiZSB2aXNpYmxlIHRv
IHRoaXMgdXNlci4KU2luY2UgdGhpcyBsaXN0IGlzIGZsYXR0ZW5lZCBhbHJlYWR5LCB0aGVyZSBp
cyBubyBuZWVkIGZvciBhbGwgdXNlcnMgdG8KYmUgaGF2ZSBkZXJpdmVkIGdyb3VwcyB1cC10by1k
YXRlIHRvIHNlbGVjdCB0aGUgdXNlcnMgbWVldGluZyB0aGlzIGNyaXRlcmlhLgoKPWl0ZW0gQzx2
aXNpYmxlX2dyb3Vwc19kaXJlY3Q+CgpSZXR1cm5zIGEgbGlzdCBvZiBncm91cHMgdGhhdCB0aGUg
dXNlciBpcyBhd2FyZSBvZi4KCj1pdGVtIEM8dmlzaWJsZV9ncm91cHNfYXNfc3RyaW5nPgoKUmV0
dXJucyB0aGUgcmVzdWx0IG9mIEM8dmlzaWJsZV9ncm91cHNfaW5oZXJpdGVkPiBhcyBhIHN0cmlu
ZyAoYSBjb21tYS1zZXBhcmF0ZWQKbGlzdCkuCgo9aXRlbSBDPHByb2R1Y3RfcmVzcG9uc2liaWxp
dGllcz4KClJldHJpZXZlIHVzZXIncyBwcm9kdWN0IHJlc3BvbnNpYmlsaXRpZXMgYXMgYSBsaXN0
IG9mIGNvbXBvbmVudCBvYmplY3RzLgpFYWNoIG9iamVjdCBpcyBhIGNvbXBvbmVudCB0aGUgdXNl
ciBoYXMgYSByZXNwb25zaWJpbGl0eSBmb3IuCgo9aXRlbSBDPGNhbl9ibGVzcz4KCldoZW4gY2Fs
bGVkIHdpdGggbm8gYXJndW1lbnRzOgpSZXR1cm5zIEM8MT4gaWYgdGhlIHVzZXIgY2FuIGJsZXNz
IGF0IGxlYXN0IG9uZSBncm91cCwgcmV0dXJucyBDPDA+IG90aGVyd2lzZS4KCldoZW4gY2FsbGVk
IHdpdGggb25lIGFyZ3VtZW50OgpSZXR1cm5zIEM8MT4gaWYgdGhlIHVzZXIgY2FuIGJsZXNzIHRo
ZSBncm91cCB3aXRoIHRoYXQgaWQsIHJldHVybnMKQzwwPiBvdGhlcndpc2UuCgo9aXRlbSBDPHdh
bnRzX2J1Z19tYWlsPgoKUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIHdhbnRzIG1haWwgZm9yIGEg
Z2l2ZW4gYnVnIGNoYW5nZS4KCj1pdGVtIEM8d2FudHNfbWFpbD4KClJldHVybnMgdHJ1ZSBpZiB0
aGUgdXNlciB3YW50cyBtYWlsIGZvciBhIGdpdmVuIHNldCBvZiBldmVudHMuIFRoaXMgbWV0aG9k
IGlzCm1vcmUgZ2VuZXJhbCB0aGFuIEM8d2FudHNfYnVnX21haWw+LCBhbGxvd2luZyB5b3UgdG8g
Y2hlY2sgZS5nLiBwZXJtaXNzaW9ucwpmb3IgZmxhZyBtYWlsLgoKPWl0ZW0gQzxpc19pbnNpZGVy
PgoKUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGNhbiBhY2Nlc3MgcHJpdmF0ZSBjb21tZW50cyBh
bmQgYXR0YWNobWVudHMsCmkuZS4gaWYgdGhlICdpbnNpZGVyZ3JvdXAnIHBhcmFtZXRlciBpcyBz
ZXQgYW5kIHRoZSB1c2VyIGJlbG9uZ3MgdG8gdGhpcyBncm91cC4KCj1pdGVtIEM8aXNfZ2xvYmFs
X3dhdGNoZXI+CgpSZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgaXMgYSBnbG9iYWwgd2F0Y2hlciwK
aS5lLiBpZiB0aGUgJ2dsb2JhbHdhdGNoZXJzJyBwYXJhbWV0ZXIgY29udGFpbnMgdGhlIHVzZXIu
Cgo9aXRlbSBDPGNhbl90YWdfY29tbWVudHM+CgpSZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgY2Fu
IGF0dGFjaCB0YWdzIHRvIGNvbW1lbnRzLgppLmUuIGlmIHRoZSAnY29tbWVudF90YWdnZXJzX2dy
b3VwJyBwYXJhbWV0ZXIgaXMgc2V0IGFuZCB0aGUgdXNlciBiZWxvbmdzIHRvCnRoaXMgZ3JvdXAu
Cgo9aXRlbSBDPGxhc3RfdmlzaXRlZD4KClJldHVybnMgYW4gYXJyYXlyZWYgTDxCdWd6aWxsYTo6
QnVnVXNlckxhc3RWaXNpdD4gb2JqZWN0cy4KCj1pdGVtIEM8aXNfaW52b2x2ZWRfaW5fYnVnKCRi
dWcpPgoKUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
IG1ldCwgZmFsc2Ugb3RoZXJ3aXNlLgoKPW92ZXIKCj1pdGVtICoKClVzZXIgaXMgdGhlIGFzc2ln
bmVlIG9mIHRoZSBidWcKCj1pdGVtICoKClVzZXIgaXMgdGhlIHJlcG9ydGVyIG9mIHRoZSBidWcK
Cj1pdGVtICoKClVzZXIgaXMgdGhlIFFBIGNvbnRhY3Qgb2YgdGhlIGJ1ZyAoaWYgQnVnemlsbGEg
aXMgY29uZmlndXJlZCB0byB1c2UgYSBRQQpjb250YWN0KQoKPWl0ZW0gKgoKVXNlciBpcyBpbiB0
aGUgY2MgbGlzdCBmb3IgdGhlIGJ1Zy4KCj1iYWNrCgo9aXRlbSBDPHNldF9ncm91cHM+CgpDPGhh
c2g+IFRoZXNlIHNwZWNpZnkgdGhlIGdyb3VwcyB0aGF0IHRoaXMgdXNlciBpcyBkaXJlY3RseSBh
IG1lbWJlciBvZi4KVG8gc2V0IHRoZXNlLCB5b3Ugc2hvdWxkIHBhc3MgYSBoYXNoIGFzIHRoZSB2
YWx1ZS4gVGhlIGhhc2ggbWF5IGNvbnRhaW4KdGhlIGZvbGxvd2luZyBmaWVsZHM6Cgo9b3ZlcgoK
PWl0ZW0gQzxhZGQ+IEFuIGFycmF5IG9mIEM8aW50PnMgb3IgQzxzdHJpbmc+cy4gVGhlIGdyb3Vw
IGlkcyBvciBncm91cCBuYW1lcwp0aGF0IHRoZSB1c2VyIHNob3VsZCBiZSBhZGRlZCB0by4KCj1p
dGVtIEM8cmVtb3ZlPiBBbiBhcnJheSBvZiBDPGludD5zIG9yIEM8c3RyaW5nPnMuIFRoZSBncm91
cCBpZHMgb3IgZ3JvdXAgbmFtZXMKdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgcmVtb3ZlZCBmcm9t
LgoKPWl0ZW0gQzxzZXQ+IEFuIGFycmF5IG9mIEM8aW50PnMgb3IgQzxzdHJpbmc+cy4gQW4gZXhh
Y3Qgc2V0IG9mIGdyb3VwIGlkcwphbmQgZ3JvdXAgbmFtZXMgdGhhdCB0aGUgdXNlciBzaG91bGQg
YmUgYSBtZW1iZXIgb2YuIE5PVEU6IFRoaXMgZG9lcyBub3QKcmVtb3ZlIGdyb3VwcyBmcm9tIHRo
ZSB1c2VyIHdoZXJlIHRoZSBwZXJzb24gbWFraW5nIHRoZSBjaGFuZ2UgZG9lcyBub3QKaGF2ZSB0
aGUgYmxlc3MgcHJpdmlsZWdlIGZvci4KCklmIHlvdSBzcGVjaWZ5IEM8c2V0PiwgdGhlbiBDPGFk
ZD4gYW5kIEM8cmVtb3ZlPiB3aWxsIGJlIGlnbm9yZWQuIEEgZ3JvdXAgaW4KYm90aCB0aGUgQzxh
ZGQ+IGFuZCBDPHJlbW92ZT4gbGlzdCB3aWxsIGJlIGFkZGVkLiBTcGVjaWZ5aW5nIGEgZ3JvdXAg
dGhhdCB0aGUKdXNlciBtYWtpbmcgdGhlIGNoYW5nZSBkb2VzIG5vdCBoYXZlIGJsZXNzIHJpZ2h0
cyB3aWxsIGdlbmVyYXRlIGFuIGVycm9yLgoKPWJhY2sKCj1pdGVtIEM8c2V0X2JsZXNzX2dyb3Vw
cz4KCkM8aGFzaD4gLSBUaGlzIGlzIHRoZSBzYW1lIGFzIHNldF9ncm91cHMsIGJ1dCBhZmZlY3Rz
IHdoYXQgZ3JvdXBzIGEgdXNlcgpoYXMgZGlyZWN0IG1lbWJlcnNoaXAgdG8gYmxlc3MgdGhhdCBn
cm91cC4gSXQgdGFrZXMgdGhlIHNhbWUgaW5wdXRzIGFzCnNldF9ncm91cHMuCgo9YmFjawoKPWhl
YWQxIENMQVNTIEZVTkNUSU9OUwoKVGhlc2UgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgY2Fs
bGVkIG9uIGEgVXNlciBvYmplY3QsIGJ1dCBpbnN0ZWFkIGFyZQpjYWxsZWQgInN0YXRpY2FsbHks
IiBqdXN0IGxpa2UgYSBub3JtYWwgcHJvY2VkdXJhbCBmdW5jdGlvbi4KCj1vdmVyIDQKCj1pdGVt
IEM8Y3JlYXRlPgoKVGhlIHNhbWUgYXMgTDxCdWd6aWxsYTo6T2JqZWN0L2NyZWF0ZT4uCgpQYXJh
bXM6IGxvZ2luX25hbWUgLSBCPFJlcXVpcmVkPiBUaGUgbG9naW4gbmFtZSBmb3IgdGhlIG5ldyB1
c2VyLgogICAgICAgIHJlYWxuYW1lIC0gVGhlIGZ1bGwgbmFtZSBmb3IgdGhlIG5ldyB1c2VyLgog
ICAgICAgIGNyeXB0cGFzc3dvcmQgIC0gQjxSZXF1aXJlZD4gVGhlIHBhc3N3b3JkIGZvciB0aGUg
bmV3IHVzZXIuCiAgICAgICAgICAgIEV2ZW4gdGhvdWdoIHRoZSBuYW1lIHNheXMgImNyeXB0Iiwg
eW91IHNob3VsZCBqdXN0IHNwZWNpZnkKICAgICAgICAgICAgYSBwbGFpbi10ZXh0IHBhc3N3b3Jk
LiBJZiB5b3Ugc3BlY2lmeSAnKicsIHRoZSB1c2VyIHdpbGwgbm90CiAgICAgICAgICAgIGJlIGFi
bGUgdG8gbG9nIGluIHVzaW5nIERCIGF1dGhlbnRpY2F0aW9uLgogICAgICAgIGRpc2FibGVkdGV4
dCAtIFRoZSBkaXNhYmxlLXRleHQgZm9yIHRoZSBuZXcgdXNlci4gSWYgZ2l2ZW4sIHRoZSB1c2Vy
IAogICAgICAgICAgICB3aWxsIGJlIGRpc2FibGVkLCBtZWFuaW5nIHRoZXkgY2Fubm90IGxvZyBp
bi4gRGVmYXVsdHMgdG8gYW4KICAgICAgICAgICAgZW1wdHkgc3RyaW5nLgogICAgICAgIGRpc2Fi
bGVfbWFpbCAtIElmIDEsIGJ1Zy1yZWxhdGVkIG1haWwgd2lsbCBub3QgYmUgIHNlbnQgdG8gdGhp
cyB1c2VyOyAKICAgICAgICAgICAgaWYgMCwgbWFpbCB3aWxsIGJlIHNlbnQgZGVwZW5kaW5nIG9u
IHRoZSB1c2VyJ3MgIGVtYWlsIHByZWZlcmVuY2VzLgoKPWl0ZW0gQzxjaGVjaz4KClRha2VzIGEg
dXNlcm5hbWUgYXMgaXRzIG9ubHkgYXJndW1lbnQuIFRocm93cyBhbiBlcnJvciBpZiB0aGVyZSBp
cyBubwp1c2VyIHdpdGggdGhhdCB1c2VybmFtZS4gUmV0dXJucyBhIEM8QnVnemlsbGE6OlVzZXI+
IG9iamVjdC4KCj1pdGVtIEM8Y2hlY2tfYWNjb3VudF9jcmVhdGlvbl9lbmFibGVkPgoKQ2hlY2tz
IHRoYXQgdXNlcnMgY2FuIGNyZWF0ZSBuZXcgdXNlciBhY2NvdW50cywgYW5kIHRocm93cyBhbiBl
cnJvcgppZiB1c2VyIGNyZWF0aW9uIGlzIGRpc2FibGVkLgoKPWl0ZW0gQzxjaGVja19hbmRfc2Vu
ZF9hY2NvdW50X2NyZWF0aW9uX2NvbmZpcm1hdGlvbigkbG9naW4pPgoKSWYgdGhlIHVzZXIgcmVx
dWVzdCBmb3IgYSBuZXcgYWNjb3VudCBwYXNzZXMgdmFsaWRhdGlvbiBjaGVja3MsIGFuIGVtYWls
CmlzIHNlbnQgdG8gdGhpcyB1c2VyIGZvciBjb25maXJtYXRpb24uIE90aGVyd2lzZSBhbiBlcnJv
ciBpcyB0aHJvd24KaW5kaWNhdGluZyB3aHkgdGhlIHJlcXVlc3QgaGFzIGJlZW4gcmVqZWN0ZWQu
Cgo9aXRlbSBDPGlzX2F2YWlsYWJsZV91c2VybmFtZT4KClJldHVybnMgYSBib29sZWFuIGluZGlj
YXRpbmcgd2hldGhlciBvciBub3QgdGhlIHN1cHBsaWVkIHVzZXJuYW1lIGlzCmFscmVhZHkgdGFr
ZW4gaW4gQnVnemlsbGEuCgpQYXJhbXM6ICR1c2VybmFtZSAoc2NhbGFyLCBzdHJpbmcpIC0gVGhl
IGZ1bGwgbG9naW4gbmFtZSBvZiB0aGUgdXNlcm5hbWUgCiAgICAgICAgICAgIHRoYXQgeW91IGFy
ZSBjaGVja2luZy4KICAgICAgICAkb2xkX3VzZXJuYW1lIChzY2FsYXIsIHN0cmluZykgLSBJZiB5
b3UgYXJlIGNoZWNraW5nIGFuIGVtYWlsLWNoYW5nZQogICAgICAgICAgICB0b2tlbiwgaW5zZXJ0
IHRoZSAib2xkIiB1c2VybmFtZSB0aGF0IHRoZSB1c2VyIGlzIGNoYW5naW5nIGZyb20sCiAgICAg
ICAgICAgIGhlcmUuIFRoZW4sIGFzIGxvbmcgYXMgaXQncyB0aGUgcmlnaHQgdXNlciBmb3IgdGhh
dCB0b2tlbiwgdGhleQogICAgICAgICAgICBjYW4gY2hhbmdlIHRoZWlyIHVzZXJuYW1lIHRvICR1
c2VybmFtZS4gKFRoYXQgaXMsIHRoaXMgZnVuY3Rpb24KICAgICAgICAgICAgd2lsbCByZXR1cm4g
YSBib29sZWFuIHRydWUgdmFsdWUpLgoKPWl0ZW0gQzxsb2dpbl90b19pZCgkbG9naW4sICR0aHJv
d19lcnJvcik+CgpUYWtlcyBhIGxvZ2luIG5hbWUgb2YgYSBCdWd6aWxsYSB1c2VyIGFuZCBjaGFu
Z2VzIHRoYXQgaW50byBhIG51bWVyaWMKSUQgZm9yIHRoYXQgdXNlci4gVGhpcyBJRCBjYW4gdGhl
biBiZSBwYXNzZWQgdG8gQnVnemlsbGE6OlVzZXI6Om5ldyB0bwpjcmVhdGUgYSBuZXcgdXNlci4K
CklmIG5vIHZhbGlkIHVzZXIgZXhpc3RzIHdpdGggdGhhdCBsb2dpbiBuYW1lLCB0aGVuIHRoZSBm
dW5jdGlvbiByZXR1cm5zIDAuCkhvd2V2ZXIsIGlmICR0aHJvd19lcnJvciBpcyBzZXQsIHRoZSBm
dW5jdGlvbiB3aWxsIHRocm93IGEgdXNlciBlcnJvcgppbnN0ZWFkIG9mIHJldHVybmluZy4KClRo
aXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCB3aGVuIHlvdSB3YW50IHRvIGp1c3QgZmluZCBv
dXQgdGhlIHVzZXJpZApvZiBhIHVzZXIsIGJ1dCB5b3UgZG9uJ3Qgd2FudCB0aGUgZnVsbCB3ZWln
aHQgb2YgQnVnemlsbGE6OlVzZXIuCgpIb3dldmVyLCBjb25zaWRlciB1c2luZyBhIEJ1Z3ppbGxh
OjpVc2VyIG9iamVjdCBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24KaWYgeW91IG5lZWQgbW9yZSBp
bmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciB0aGFuIGp1c3QgdGhlaXIgSUQuCgo9aXRlbSBDPHZh
bGlkYXRlX3Bhc3N3b3JkKCRwYXNzd2QxLCAkcGFzc3dkMik+CgpSZXR1cm5zIHRydWUgaWYgYSBw
YXNzd29yZCBpcyB2YWxpZCAoaS5lLiBtZWV0cyBCdWd6aWxsYSdzCnJlcXVpcmVtZW50cyBmb3Ig
bGVuZ3RoIGFuZCBjb250ZW50KSwgZWxzZSB0aHJvd3MgYW4gZXJyb3IuClVudGFpbnRzIEM8JHBh
c3N3ZDE+IGlmIHN1Y2Nlc3NmdWwuCgpJZiBhIHNlY29uZCBwYXNzd29yZCBpcyBwYXNzZWQgaW4s
IHRoaXMgZnVuY3Rpb24gYWxzbyB2ZXJpZmllcyB0aGF0CnRoZSB0d28gcGFzc3dvcmRzIG1hdGNo
LgoKPWl0ZW0gQzx2YWxpZGF0ZV9wYXNzd29yZF9jaGVjaygkcGFzc3dkMSwgJHBhc3N3ZDIpPgoK
VGhpcyBzdWIgcm91dGluZSBpcyBzaW1pbGFpciB0byBDPHZhbGlkYXRlX3Bhc3N3b3JkPiwgZXhj
ZXB0IHRoYXQgaXQgYWxsb3dzCnRoZSBjYWxsaW5nIGNvZGUgdG8gaGFuZGxlIGl0cyBvd24gZXJy
b3JzLgoKUmV0dXJucyB1bmRlZiBhbmQgdW50YWludHMgQzwkcGFzc3dkMT4gaWYgYSBwYXNzd29y
ZCBpcyB2YWxpZCAoaS5lLiBtZWV0cwpCdWd6aWxsYSdzIHJlcXVpcmVtZW50cyBmb3IgbGVuZ3Ro
IGFuZCBjb250ZW50KSwgZWxzZSByZXR1cm5zIHRoZSBlcnJvci4KCklmIGEgc2Vjb25kIHBhc3N3
b3JkIGlzIHBhc3NlZCBpbiwgdGhpcyBmdW5jdGlvbiBhbHNvIHZlcmlmaWVzIHRoYXQKdGhlIHR3
byBwYXNzd29yZHMgbWF0Y2guCgo9aXRlbSBDPG1hdGNoX2ZpZWxkKCRkYXRhLCAkZmllbGRzLCAk
YmVoYXZpb3IpPgoKPW92ZXIKCj1pdGVtIEI8RGVzY3JpcHRpb24+CgpXcmFwcGVyIGZvciB0aGUg
QzxtYXRjaCgpPiBmdW5jdGlvbi4KCj1pdGVtIEI8UGFyYW1zPgoKPW92ZXIKCj1pdGVtIEM8JGZp
ZWxkcz4gLSBBIGhhc2hyZWYgd2l0aCBmaWVsZCBuYW1lcyBhcyBrZXlzIGFuZCBhIGhhc2ggYXMg
dmFsdWVzLgpFYWNoIGhhc2ggaXMgb2YgdGhlIGZvcm0geyAndHlwZScgPT4gJ3NpbmdsZXxtdWx0
aScgfSwgd2hpY2ggc3BlY2lmaWVzCndoZXRoZXIgdGhlIGZpZWxkIGNhbiB0YWtlIGEgc2luZ2xl
IGxvZ2luIG5hbWUgb25seSBvciBzZXZlcmFsLgoKPWl0ZW0gQzwkZGF0YT4gKG9wdGlvbmFsKSAt
IEEgaGFzaHJlZiB3aXRoIGZpZWxkIG5hbWVzIGFzIGtleXMgYW5kIGZpZWxkIHZhbHVlcwphcyB2
YWx1ZXMuIElmIHVuZGVmaW5lZCwgQzxCdWd6aWxsYS1FPGd0PmlucHV0X3BhcmFtcz4gaXMgdXNl
ZC4KCj1pdGVtIEM8JGJlaGF2aW9yPiAob3B0aW9uYWwpIC0gSWYgc2V0IHRvIEM8TUFUQ0hfU0tJ
UF9DT05GSVJNPiwgbm8gY29uZmlybWF0aW9uCnNjcmVlbiBpcyBkaXNwbGF5ZWQuIEluIHRoYXQg
Y2FzZSwgdGhlIGZpZWxkcyB3aGljaCBkb24ndCBtYXRjaCBhIHVuaXF1ZSB1c2VyCmFyZSBsZWZ0
IHVuZGVmaW5lZC4gSWYgbm90IHNldCwgYSBjb25maXJtYXRpb24gc2NyZWVuIGlzIGRpc3BsYXll
ZCBpZiBhdApsZWFzdCBvbmUgZmllbGQgZG9lc24ndCBtYXRjaCBhbnkgbG9naW4gbmFtZSBvciBt
YXRjaCBtb3JlIHRoYW4gb25lLgoKPWJhY2sKCj1pdGVtIEI8UmV0dXJucz4KCklmIHRoZSB0aGly
ZCBwYXJhbWV0ZXIgaXMgc2V0IHRvIEM8TUFUQ0hfU0tJUF9DT05GSVJNPiwgdGhlIGZ1bmN0aW9u
IHJldHVybnMKZWl0aGVyIEM8VVNFUl9NQVRDSF9TVUNDRVNTPiBpZiBhbGwgZmllbGRzIGNhbiBi
ZSBzZXQgdW5hbWJpZ3VvdXNseSwKQzxVU0VSX01BVENIX0ZBSUxFRD4gaWYgYXQgbGVhc3Qgb25l
IGZpZWxkIGRvZXNuJ3QgbWF0Y2ggYW55IHVzZXIgYWNjb3VudCwKb3IgQzxVU0VSX01BVENIX01V
TFRJUExFPiBpZiBzb21lIGZpZWxkcyBtYXRjaCBtb3JlIHRoYW4gb25lIHVzZXIgYWNjb3VudC4K
CklmIHRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgbm90IHNldCwgdGhlbiBpZiBhbGwgZmllbGRzIGNv
dWxkIGJlIHNldAp1bmFtYmlndW91c2x5LCBub3RoaW5nIGlzIHJldHVybmVkLCBlbHNlIGEgY29u
ZmlybWF0aW9uIHBhZ2UgaXMgZGlzcGxheWVkLgoKPWl0ZW0gQjxOb3RlPgoKVGhpcyBmdW5jdGlv
biBtdXN0IGJlIGNhbGxlZCBlYXJseSBpbiBhIHNjcmlwdCwgYmVmb3JlIGFueXRoaW5nIGV4dGVy
bmFsCmlzIGRvbmUgd2l0aCB0aGUgZGF0YS4KCj1iYWNrCgo9YmFjawoKPWhlYWQxIFNFRSBBTFNP
CgpMPEJ1Z3ppbGxhfEJ1Z3ppbGxhPgoKPWhlYWQxIEI8TWV0aG9kcyBpbiBuZWVkIG9mIFBPRD4K
Cj1vdmVyCgo9aXRlbSBlbWFpbF9lbmFibGVkCgo9aXRlbSBjcnlwdHBhc3N3b3JkCgo9aXRlbSBj
bGVhcl9sb2dpbl9mYWlsdXJlcwoKPWl0ZW0gc2V0X2Rpc2FibGVfbWFpbAoKPWl0ZW0gaGFzX2F1
ZGl0X2VudHJpZXMKCj1pdGVtIGdyb3Vwc193aXRoX2ljb24KCj1pdGVtIGNoZWNrX2xvZ2luX25h
bWUKCj1pdGVtIHNldF9leHRlcm5faWQKCj1pdGVtIG1haWxfc2V0dGluZ3MKCj1pdGVtIGVtYWls
X2Rpc2FibGVkCgo9aXRlbSB1cGRhdGUKCj1pdGVtIGlzX3RpbWV0cmFja2VyCgo9aXRlbSBpc19l
bmFibGVkCgo9aXRlbSBxdWVyeXNoYXJlX2dyb3Vwc19hc19zdHJpbmcKCj1pdGVtIHNldF9sb2dp
bgoKPWl0ZW0gc2V0X3Bhc3N3b3JkCgo9aXRlbSBsYXN0X3NlZW5fZGF0ZQoKPWl0ZW0gc2V0X2Rp
c2FibGVkdGV4dAoKPWl0ZW0gdXBkYXRlX2xhc3Rfc2Vlbl9kYXRlCgo9aXRlbSBzZXRfbmFtZQoK
PWl0ZW0gREJfQ09MVU1OUwoKPWl0ZW0gZXh0ZXJuX2lkCgo9aXRlbSBVUERBVEVfQ09MVU1OUwoK
PWJhY2sK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370994</attachid>
            <date>2019-05-30 16:38:53 -0700</date>
            <delta_ts>2019-06-05 12:44:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198391-20190530163852.patch</filename>
            <type>text/plain</type>
            <size>4895</size>
            <attacher name="lingho@apple.com">lingho</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1OTA2CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9idWdzLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA3N2Q0ZmU2ZmE1OGM0NGQzNWYyZmM5YWJiZWJjNzQ4MDMzMDNjMTNlLi5jMWQ5MDEwYmE3
ODNmYjkzNDhkODk1OWVhMjJiZDBmMDMwZTQxZDMzIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9idWdz
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxOS0wNS0zMCAgTGluZyBIbyAgPGxpbmdjaGVyZF9o
b0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgb2YgenhjdmJuIHBhc3N3b3JkIHN0
cmVuZ3RoIGNoZWNrZXIgdG8gYnVncy53ZWJraXQub3JnIHdlYnNpdGUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgzOTEKKyAgICAgICAgcmRhcjov
L3Byb2JsZW0vNTEyNzgxNjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIEJ1Z3ppbGxhL0NvbmZpZy9BdXRoLnBtOgorICAgICAgICAoZ2V0X3BhcmFt
X2xpc3QpOgorICAgICAgICAqIEJ1Z3ppbGxhL1VzZXIucG06CisgICAgICAgICh2YWxpZGF0ZV9w
YXNzd29yZF9jaGVjayk6CisgICAgICAgICogdGVtcGxhdGUvZW4vZGVmYXVsdC9hZG1pbi9wYXJh
bXMvYXV0aC5odG1sLnRtcGw6CisgICAgICAgICogdGVtcGxhdGUvZW4vZGVmYXVsdC9nbG9iYWwv
dXNlci1lcnJvci5odG1sLnRtcGw6CisKIDIwMTktMDUtMTMgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgQnVnemlsbGEgc2hvdWxkIGNvbnZlcnQgInIxMjM0NSIg
dG8gYSB0cmFjLndlYmtpdC5vcmcgbGluawpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnVncy53ZWJr
aXQub3JnL0J1Z3ppbGxhL0NvbmZpZy9BdXRoLnBtIGIvV2Vic2l0ZXMvYnVncy53ZWJraXQub3Jn
L0J1Z3ppbGxhL0NvbmZpZy9BdXRoLnBtCmluZGV4IDc4ZDcxOWIxNWQzNWJjN2NmYWZlNGFlODc2
YmFlNGY2ZDIyMzExZGYuLjgxYzI0ZTU0YWQ1OWJkMGI3N2Q3ZTU5MDk1ODYxN2I1ZTNmZjg4NmIg
MTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy9CdWd6aWxsYS9Db25maWcvQXV0
aC5wbQorKysgYi9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvQ29uZmlnL0F1dGgu
cG0KQEAgLTEwNywxMSArMTA3LDEyIEBAIHN1YiBnZXRfcGFyYW1fbGlzdCB7CiAgICBjaGVja2Vy
ID0+IFwmY2hlY2tfcmVnZXhwCiAgIH0sCiAKKyAgIyBXRUJLSVRfQ0hBTkdFUwogICB7CiAgICBu
YW1lID0+ICdwYXNzd29yZF9jb21wbGV4aXR5JywKICAgIHR5cGUgPT4gJ3MnLAogICAgY2hvaWNl
cyA9PiBbICdub19jb25zdHJhaW50cycsICdtaXhlZF9sZXR0ZXJzJywgJ2xldHRlcnNfbnVtYmVy
cycsCi0gICAgICAgICAgICAgICAgJ2xldHRlcnNfbnVtYmVyc19zcGVjaWFsY2hhcnMnIF0sCisg
ICAgICAgICAgICAgICAgJ2xldHRlcnNfbnVtYmVyc19zcGVjaWFsY2hhcnMnLCAnenhjdmJuJyBd
LAogICAgZGVmYXVsdCA9PiAnbm9fY29uc3RyYWludHMnLAogICAgY2hlY2tlciA9PiBcJmNoZWNr
X211bHRpCiAgIH0sCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemls
bGEvVXNlci5wbSBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy9CdWd6aWxsYS9Vc2VyLnBtCmlu
ZGV4IDA3N2YxMWQxNjg1YmRlNWZiOTVhYjgxZWQ5OWFlZDQwM2E3NWIyNmMuLmM4MWVlNTIxZTIx
YzI2NTA1NzU1OTZhYTQwZTA4YjI5MjU3YWZkODUgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL2J1Z3Mu
d2Via2l0Lm9yZy9CdWd6aWxsYS9Vc2VyLnBtCisrKyBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9y
Zy9CdWd6aWxsYS9Vc2VyLnBtCkBAIC0zMSw2ICszMSw4IEBAIHVzZSBTdG9yYWJsZSBxdyhkY2xv
bmUpOwogdXNlIFVSSTsKIHVzZSBVUkk6OlF1ZXJ5UGFyYW07CiAKK3VzZSBEYXRhOjpQYXNzd29y
ZDo6enhjdmJuICdwYXNzd29yZF9zdHJlbmd0aCc7ICMgV0VCS0lUX0NIQU5HRVMKKwogdXNlIHBh
cmVudCBxdyhCdWd6aWxsYTo6T2JqZWN0IEV4cG9ydGVyKTsKIEBCdWd6aWxsYTo6VXNlcjo6RVhQ
T1JUID0gcXcoaXNfYXZhaWxhYmxlX3VzZXJuYW1lCiAgICAgbG9naW5fdG9faWQgdmFsaWRhdGVf
cGFzc3dvcmQgdmFsaWRhdGVfcGFzc3dvcmRfY2hlY2sKQEAgLTI0ODYsNiArMjQ4OCwxMiBAQCBz
dWIgdmFsaWRhdGVfcGFzc3dvcmRfY2hlY2sgewogICAgIH0gZWxzaWYgKCRjb21wbGV4aXR5X2xl
dmVsIGVxICdtaXhlZF9sZXR0ZXJzJykgewogICAgICAgICByZXR1cm4gJ3Bhc3N3b3JkX25vdF9j
b21wbGV4JwogICAgICAgICAgIGlmICgkcGFzc3dvcmQgIX4gL1tbOmxvd2VyOl1dLyB8fCAkcGFz
c3dvcmQgIX4gL1tbOnVwcGVyOl1dLyk7CisgICAgIyBXRUJLSVRfQ0hBTkdFUworICAgIH0gZWxz
aWYgKCRjb21wbGV4aXR5X2xldmVsIGVxICd6eGN2Ym4nKSB7CisgICAgICAgIG15ICVvcHRzID0g
KHNjb3JlX2Zvcl9mZWVkYmFjayA9PiAzKTsKKyAgICAgICAgbXkgJGVzdF9zdHJlbmd0aCA9IHBh
c3N3b3JkX3N0cmVuZ3RoKCRwYXNzd29yZCwgXCVvcHRzKTsKKyAgICAgICAgcmV0dXJuICdQYXNz
d29yZCBpcyB3ZWFrLiAnIC4gJGVzdF9zdHJlbmd0aC0+e2ZlZWRiYWNrfS0+e3dhcm5pbmd9IC4g
Jy4gJworICAgICAgICAgIGlmICgkZXN0X3N0cmVuZ3RoLT57c2NvcmV9IDwgNCk7CiAgICAgfQog
CiAgICAgIyBIYXZpbmcgZG9uZSB0aGVzZSBjaGVja3MgbWFrZXMgdXMgY29uc2lkZXIgdGhlIHBh
c3N3b3JkIHVudGFpbnRlZC4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy90
ZW1wbGF0ZS9lbi9kZWZhdWx0L2FkbWluL3BhcmFtcy9hdXRoLmh0bWwudG1wbCBiL1dlYnNpdGVz
L2J1Z3Mud2Via2l0Lm9yZy90ZW1wbGF0ZS9lbi9kZWZhdWx0L2FkbWluL3BhcmFtcy9hdXRoLmh0
bWwudG1wbAppbmRleCA5MDJkMmZjODI2YmYzM2ZmOGJkYTEwNTE1ZjY4OTFhYmZlZmU4MjQ1Li5h
YTY1Y2YwZGZlNzViYTI0MmQ1Y2U0ZjlmMjNiNGJlMTIxNTQ0ZDM4IDEwMDY0NAotLS0gYS9XZWJz
aXRlcy9idWdzLndlYmtpdC5vcmcvdGVtcGxhdGUvZW4vZGVmYXVsdC9hZG1pbi9wYXJhbXMvYXV0
aC5odG1sLnRtcGwKKysrIGIvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL3RlbXBsYXRlL2VuL2Rl
ZmF1bHQvYWRtaW4vcGFyYW1zL2F1dGguaHRtbC50bXBsCkBAIC0xMzIsNyArMTMyLDggQEAKICAg
ICAiPGxpPmxldHRlcnNfbnVtYmVycyAtIFBhc3N3b3JkcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qg
b25lIFVQUEVSIGFuZCBvbmUgIiBfCiAgICAgImxvd2VyIGNhc2UgbGV0dGVyIGFuZCBhIG51bWJl
ci48L2xpPiIgXwogICAgICI8bGk+bGV0dGVyc19udW1iZXJzX3NwZWNpYWxjaGFycyAtIFBhc3N3
b3JkcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lICIgXwotICAgICJsZXR0ZXIsIGEgbnVtYmVy
IGFuZCBhIHNwZWNpYWwgY2hhcmFjdGVyLjwvbGk+PC91bD4iCisgICAgImxldHRlciwgYSBudW1i
ZXIgYW5kIGEgc3BlY2lhbCBjaGFyYWN0ZXIuPC9saT4iIF8KKyAgICAiPGxpPnp4Y3ZibiAtIEVu
YWJsZSB6eGN2Ym4gc3RyZW5ndGggZXN0aW1hdG9yIGZvciBwYXNzd29yZCBzdHJlbmd0aCBjaGVj
a2luZy48L2xpPjwvdWw+IiAjIFdFQktJVF9DSEFOR0VTCiAKICAgcGFzc3dvcmRfY2hlY2tfb25f
bG9naW4gPT4KICAgICAiSWYgc2V0LCAkdGVybXMuQnVnemlsbGEgd2lsbCBjaGVjayB0aGF0IHRo
ZSBwYXNzd29yZCBtZWV0cyB0aGUgY3VycmVudCAiIF8KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2J1
Z3Mud2Via2l0Lm9yZy90ZW1wbGF0ZS9lbi9kZWZhdWx0L2dsb2JhbC91c2VyLWVycm9yLmh0bWwu
dG1wbCBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy90ZW1wbGF0ZS9lbi9kZWZhdWx0L2dsb2Jh
bC91c2VyLWVycm9yLmh0bWwudG1wbAppbmRleCA3NDIxYTE1MjUwMTA4NTEwMDZhYTNiZjlhMzhj
NGIwMjM1Y2Y1OGFmLi4xYzE0MWQ2MGUyNDRlNmVmYmE0YTViM2FjZWMxOTg5NWIyYTMxNWFlIDEw
MDY0NAotLS0gYS9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvdGVtcGxhdGUvZW4vZGVmYXVsdC9n
bG9iYWwvdXNlci1lcnJvci5odG1sLnRtcGwKKysrIGIvV2Vic2l0ZXMvYnVncy53ZWJraXQub3Jn
L3RlbXBsYXRlL2VuL2RlZmF1bHQvZ2xvYmFsL3VzZXItZXJyb3IuaHRtbC50bXBsCkBAIC0xNDYy
LDYgKzE0NjIsMTUgQEAKICAgICAgIHJlcXVlc3QgYSBuZXcgcGFzc3dvcmQ8L2E+IGluIG9yZGVy
IHRvIGxvZyBpbiBhZ2Fpbi4KICAgICBbJSBFTkQgJV0KIAorICBbJSMgV0VCS0lUX0NIQU5HRVMg
JV0KKyAgWyUgRUxTSUYgZXJyb3Iuc2VhcmNoKCJQYXNzd29yZCBpcyB3ZWFrIikgJV0KKyAgICBb
JSB0aXRsZSA9ICJQYXNzd29yZCBJcyBXZWFrIiAlXQorICAgIFslIGVycm9yICVdCisgICAgWyUg
SUYgbG9ja2VkX3VzZXIgJV0KKyAgICAgIFlvdSBtdXN0IDxhIGhyZWY9InRva2VuLmNnaT9hPXJl
cXB3JmFtcDtsb2dpbm5hbWU9WyUgbG9ja2VkX3VzZXIuZW1haWwgRklMVEVSIHVyaSAlXSZhbXA7
dG9rZW49WyUgaXNzdWVfaGFzaF90b2tlbihbJ3JlcXB3J10pIEZJTFRFUiB1cmkgJV0iPgorICAg
ICAgcmVxdWVzdCBhIG5ldyBwYXNzd29yZDwvYT4gaW4gb3JkZXIgdG8gbG9nIGluIGFnYWluLgor
ICAgIFslIEVORCAlXQorCiAgIFslIEVMU0lGIGVycm9yID09ICJwYXNzd29yZF9ub3RfY29tcGxl
eCIgJV0KICAgICBbJSB0aXRsZSA9ICJQYXNzd29yZCBGYWlscyBSZXF1aXJlbWVudHMiICVdCiAg
ICAgWyUgcGFzc3JlZ2V4ID0gUGFyYW0oJ3Bhc3N3b3JkX2NvbXBsZXhpdHknKSAlXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371428</attachid>
            <date>2019-06-05 12:44:47 -0700</date>
            <delta_ts>2019-06-05 13:37:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198391-20190605124447.patch</filename>
            <type>text/plain</type>
            <size>5705</size>
            <attacher name="lingho@apple.com">lingho</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1OTA2CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9idWdzLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA3N2Q0ZmU2ZmE1OGM0NGQzNWYyZmM5YWJiZWJjNzQ4MDMzMDNjMTNlLi5lM2U3NGQ2ZWQz
OTk3M2IyYzg5N2M5OWJhYzg2MGZmMDZhZGJiYjkwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9idWdz
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxOS0wNi0wNSAgTGluZyBIbyAgPGxpbmdjaGVyZF9o
b0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgb2YgenhjdmJuIHBhc3N3b3JkIHN0
cmVuZ3RoIGNoZWNrZXIgdG8gYnVncy53ZWJraXQub3JnIHdlYnNpdGUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgzOTEKKyAgICAgICAgcmRhcjov
L3Byb2JsZW0vNTEyNzgxNjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIEJ1Z3ppbGxhL0NvbmZpZy9BdXRoLnBtOgorICAgICAgICAoZ2V0X3BhcmFt
X2xpc3QpOgorICAgICAgICAqIEJ1Z3ppbGxhL0luc3RhbGwvUmVxdWlyZW1lbnRzLnBtOgorICAg
ICAgICAoUkVRVUlSRURfTU9EVUxFUyk6CisgICAgICAgICogQnVnemlsbGEvVXNlci5wbToKKyAg
ICAgICAgKHZhbGlkYXRlX3Bhc3N3b3JkX2NoZWNrKToKKyAgICAgICAgKiB0ZW1wbGF0ZS9lbi9k
ZWZhdWx0L2FkbWluL3BhcmFtcy9hdXRoLmh0bWwudG1wbDoKKyAgICAgICAgKiB0ZW1wbGF0ZS9l
bi9kZWZhdWx0L2dsb2JhbC91c2VyLWVycm9yLmh0bWwudG1wbDoKKwogMjAxOS0wNS0xMyAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWd6aWxsYSBzaG91bGQg
Y29udmVydCAicjEyMzQ1IiB0byBhIHRyYWMud2Via2l0Lm9yZyBsaW5rCmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvQ29uZmlnL0F1dGgucG0gYi9XZWJzaXRl
cy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvQ29uZmlnL0F1dGgucG0KaW5kZXggNzhkNzE5YjE1
ZDM1YmM3Y2ZhZmU0YWU4NzZiYWU0ZjZkMjIzMTFkZi4uYjFjMmUzNzJhZjY1NDNmOTMyY2E3ODNh
NDU3ZDE4OTlmZTRiYzYxOSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1
Z3ppbGxhL0NvbmZpZy9BdXRoLnBtCisrKyBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy9CdWd6
aWxsYS9Db25maWcvQXV0aC5wbQpAQCAtMTA3LDExICsxMDcsMTIgQEAgc3ViIGdldF9wYXJhbV9s
aXN0IHsKICAgIGNoZWNrZXIgPT4gXCZjaGVja19yZWdleHAKICAgfSwKIAorICAjIFdFQktJVF9D
SEFOR0VTCiAgIHsKICAgIG5hbWUgPT4gJ3Bhc3N3b3JkX2NvbXBsZXhpdHknLAogICAgdHlwZSA9
PiAncycsCiAgICBjaG9pY2VzID0+IFsgJ25vX2NvbnN0cmFpbnRzJywgJ21peGVkX2xldHRlcnMn
LCAnbGV0dGVyc19udW1iZXJzJywKLSAgICAgICAgICAgICAgICAnbGV0dGVyc19udW1iZXJzX3Nw
ZWNpYWxjaGFycycgXSwKKyAgICAgICAgICAgICAgICAnbGV0dGVyc19udW1iZXJzX3NwZWNpYWxj
aGFycycsICd6eGN2Ym5fcGFzc3dvcmRfY2hlY2tlcicgXSwKICAgIGRlZmF1bHQgPT4gJ25vX2Nv
bnN0cmFpbnRzJywKICAgIGNoZWNrZXIgPT4gXCZjaGVja19tdWx0aQogICB9LApkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1Z3ppbGxhL0luc3RhbGwvUmVxdWlyZW1lbnRz
LnBtIGIvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1Z3ppbGxhL0luc3RhbGwvUmVxdWlyZW1l
bnRzLnBtCmluZGV4IDYxNDk2ZDg0M2ExNzQ5NmRlMjAxNmFlNDYxNTQ4OWNjY2IyYzVkM2YuLjhi
MWI4MDNkYTlmMWQyNWM4M2VmM2E4MWQ3NzlmNzdmYTYxNjc4ZWQgMTAwNjQ0Ci0tLSBhL1dlYnNp
dGVzL2J1Z3Mud2Via2l0Lm9yZy9CdWd6aWxsYS9JbnN0YWxsL1JlcXVpcmVtZW50cy5wbQorKysg
Yi9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvSW5zdGFsbC9SZXF1aXJlbWVudHMu
cG0KQEAgLTE2MSw2ICsxNjEsMTIgQEAgc3ViIFJFUVVJUkVEX01PRFVMRVMgewogICAgICAgICAj
IDIuMCBpcyB0aGUgZmlyc3QgdmVyc2lvbiB0aGF0IHdpbGwgd29yayB3aXRoIEpTT046OlJQQy4K
ICAgICAgICAgdmVyc2lvbiA9PiAnMi4wMScsCiAgICAgfSwKKyAgICAjIFdFQktJVF9DSEFOR0VT
CisgICAgeworICAgICAgICBwYWNrYWdlID0+ICdEYXRhLVBhc3N3b3JkLXp4Y3ZibicsCisgICAg
ICAgIG1vZHVsZSAgPT4gJ0RhdGE6OlBhc3N3b3JkOjp6eGN2Ym4nLAorICAgICAgICB2ZXJzaW9u
ID0+IDAKKyAgICB9LAogICAgICk7CiAKICAgICBpZiAoT05fV0lORE9XUykgewpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1Z3ppbGxhL1VzZXIucG0gYi9XZWJzaXRlcy9i
dWdzLndlYmtpdC5vcmcvQnVnemlsbGEvVXNlci5wbQppbmRleCAwNzdmMTFkMTY4NWJkZTVmYjk1
YWI4MWVkOTlhZWQ0MDNhNzViMjZjLi5lNjllODkyMTdkYzk0OWUzYzUyNzI2Nzc1MmI4Y2E1N2Q1
NDUzYzc3IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvVXNl
ci5wbQorKysgYi9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvVXNlci5wbQpAQCAt
MzEsNiArMzEsOCBAQCB1c2UgU3RvcmFibGUgcXcoZGNsb25lKTsKIHVzZSBVUkk7CiB1c2UgVVJJ
OjpRdWVyeVBhcmFtOwogCit1c2UgRGF0YTo6UGFzc3dvcmQ6Onp4Y3ZibiBxdyhwYXNzd29yZF9z
dHJlbmd0aCk7ICNXRUJLSVRfQ0hBTkdFUworCiB1c2UgcGFyZW50IHF3KEJ1Z3ppbGxhOjpPYmpl
Y3QgRXhwb3J0ZXIpOwogQEJ1Z3ppbGxhOjpVc2VyOjpFWFBPUlQgPSBxdyhpc19hdmFpbGFibGVf
dXNlcm5hbWUKICAgICBsb2dpbl90b19pZCB2YWxpZGF0ZV9wYXNzd29yZCB2YWxpZGF0ZV9wYXNz
d29yZF9jaGVjawpAQCAtMjQ4Niw2ICsyNDg4LDEyIEBAIHN1YiB2YWxpZGF0ZV9wYXNzd29yZF9j
aGVjayB7CiAgICAgfSBlbHNpZiAoJGNvbXBsZXhpdHlfbGV2ZWwgZXEgJ21peGVkX2xldHRlcnMn
KSB7CiAgICAgICAgIHJldHVybiAncGFzc3dvcmRfbm90X2NvbXBsZXgnCiAgICAgICAgICAgaWYg
KCRwYXNzd29yZCAhfiAvW1s6bG93ZXI6XV0vIHx8ICRwYXNzd29yZCAhfiAvW1s6dXBwZXI6XV0v
KTsKKyAgICAjIFdFQktJVF9DSEFOR0VTCisgICAgfSBlbHNpZiAoJGNvbXBsZXhpdHlfbGV2ZWwg
ZXEgJ3p4Y3Zibl9wYXNzd29yZF9jaGVja2VyJykgeworICAgICAgICBteSAlb3B0cyA9IChzY29y
ZV9mb3JfZmVlZGJhY2sgPT4gMyk7CisgICAgICAgIG15ICRlc3Rfc3RyZW5ndGggPSBwYXNzd29y
ZF9zdHJlbmd0aCgkcGFzc3dvcmQsIFwlb3B0cyk7CisgICAgICAgIHJldHVybiAnUGFzc3dvcmQg
aXMgd2Vhay4gJyAuICRlc3Rfc3RyZW5ndGgtPntmZWVkYmFja30tPnt3YXJuaW5nfSAuICcuICcK
KyAgICAgICAgICBpZiAoJGVzdF9zdHJlbmd0aC0+e3Njb3JlfSA8IDQpOwogICAgIH0KIAogICAg
ICMgSGF2aW5nIGRvbmUgdGhlc2UgY2hlY2tzIG1ha2VzIHVzIGNvbnNpZGVyIHRoZSBwYXNzd29y
ZCB1bnRhaW50ZWQuCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvdGVtcGxh
dGUvZW4vZGVmYXVsdC9hZG1pbi9wYXJhbXMvYXV0aC5odG1sLnRtcGwgYi9XZWJzaXRlcy9idWdz
LndlYmtpdC5vcmcvdGVtcGxhdGUvZW4vZGVmYXVsdC9hZG1pbi9wYXJhbXMvYXV0aC5odG1sLnRt
cGwKaW5kZXggOTAyZDJmYzgyNmJmMzNmZjhiZGExMDUxNWY2ODkxYWJmZWZlODI0NS4uZTY5YWFk
ZGUzZDcxYWFkYzE4MGY4ZTVkM2M3YTRhZTUxM2ZmMGU2NiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMv
YnVncy53ZWJraXQub3JnL3RlbXBsYXRlL2VuL2RlZmF1bHQvYWRtaW4vcGFyYW1zL2F1dGguaHRt
bC50bXBsCisrKyBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy90ZW1wbGF0ZS9lbi9kZWZhdWx0
L2FkbWluL3BhcmFtcy9hdXRoLmh0bWwudG1wbApAQCAtMTMyLDcgKzEzMiw4IEBACiAgICAgIjxs
aT5sZXR0ZXJzX251bWJlcnMgLSBQYXNzd29yZHMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBV
UFBFUiBhbmQgb25lICIgXwogICAgICJsb3dlciBjYXNlIGxldHRlciBhbmQgYSBudW1iZXIuPC9s
aT4iIF8KICAgICAiPGxpPmxldHRlcnNfbnVtYmVyc19zcGVjaWFsY2hhcnMgLSBQYXNzd29yZHMg
bXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSAiIF8KLSAgICAibGV0dGVyLCBhIG51bWJlciBhbmQg
YSBzcGVjaWFsIGNoYXJhY3Rlci48L2xpPjwvdWw+IgorICAgICJsZXR0ZXIsIGEgbnVtYmVyIGFu
ZCBhIHNwZWNpYWwgY2hhcmFjdGVyLjwvbGk+IiBfCisgICAgIjxsaT56eGN2Ym5fcGFzc3dvcmRf
Y2hlY2tlciAtIEVuYWJsZSB6eGN2Ym4gc3RyZW5ndGggZXN0aW1hdG9yIGZvciBwYXNzd29yZCBz
dHJlbmd0aCBjaGVja2luZy48L2xpPjwvdWw+IiAjIFdFQktJVF9DSEFOR0VTCiAKICAgcGFzc3dv
cmRfY2hlY2tfb25fbG9naW4gPT4KICAgICAiSWYgc2V0LCAkdGVybXMuQnVnemlsbGEgd2lsbCBj
aGVjayB0aGF0IHRoZSBwYXNzd29yZCBtZWV0cyB0aGUgY3VycmVudCAiIF8KZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy90ZW1wbGF0ZS9lbi9kZWZhdWx0L2dsb2JhbC91c2Vy
LWVycm9yLmh0bWwudG1wbCBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy90ZW1wbGF0ZS9lbi9k
ZWZhdWx0L2dsb2JhbC91c2VyLWVycm9yLmh0bWwudG1wbAppbmRleCA3NDIxYTE1MjUwMTA4NTEw
MDZhYTNiZjlhMzhjNGIwMjM1Y2Y1OGFmLi4xYzE0MWQ2MGUyNDRlNmVmYmE0YTViM2FjZWMxOTg5
NWIyYTMxNWFlIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvdGVtcGxhdGUv
ZW4vZGVmYXVsdC9nbG9iYWwvdXNlci1lcnJvci5odG1sLnRtcGwKKysrIGIvV2Vic2l0ZXMvYnVn
cy53ZWJraXQub3JnL3RlbXBsYXRlL2VuL2RlZmF1bHQvZ2xvYmFsL3VzZXItZXJyb3IuaHRtbC50
bXBsCkBAIC0xNDYyLDYgKzE0NjIsMTUgQEAKICAgICAgIHJlcXVlc3QgYSBuZXcgcGFzc3dvcmQ8
L2E+IGluIG9yZGVyIHRvIGxvZyBpbiBhZ2Fpbi4KICAgICBbJSBFTkQgJV0KIAorICBbJSMgV0VC
S0lUX0NIQU5HRVMgJV0KKyAgWyUgRUxTSUYgZXJyb3Iuc2VhcmNoKCJQYXNzd29yZCBpcyB3ZWFr
IikgJV0KKyAgICBbJSB0aXRsZSA9ICJQYXNzd29yZCBJcyBXZWFrIiAlXQorICAgIFslIGVycm9y
ICVdCisgICAgWyUgSUYgbG9ja2VkX3VzZXIgJV0KKyAgICAgIFlvdSBtdXN0IDxhIGhyZWY9InRv
a2VuLmNnaT9hPXJlcXB3JmFtcDtsb2dpbm5hbWU9WyUgbG9ja2VkX3VzZXIuZW1haWwgRklMVEVS
IHVyaSAlXSZhbXA7dG9rZW49WyUgaXNzdWVfaGFzaF90b2tlbihbJ3JlcXB3J10pIEZJTFRFUiB1
cmkgJV0iPgorICAgICAgcmVxdWVzdCBhIG5ldyBwYXNzd29yZDwvYT4gaW4gb3JkZXIgdG8gbG9n
IGluIGFnYWluLgorICAgIFslIEVORCAlXQorCiAgIFslIEVMU0lGIGVycm9yID09ICJwYXNzd29y
ZF9ub3RfY29tcGxleCIgJV0KICAgICBbJSB0aXRsZSA9ICJQYXNzd29yZCBGYWlscyBSZXF1aXJl
bWVudHMiICVdCiAgICAgWyUgcGFzc3JlZ2V4ID0gUGFyYW0oJ3Bhc3N3b3JkX2NvbXBsZXhpdHkn
KSAlXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371435</attachid>
            <date>2019-06-05 13:37:41 -0700</date>
            <delta_ts>2019-06-05 14:06:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198391-20190605133740.patch</filename>
            <type>text/plain</type>
            <size>5718</size>
            <attacher name="lingho@apple.com">lingho</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1OTA2CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9idWdzLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA3N2Q0ZmU2ZmE1OGM0NGQzNWYyZmM5YWJiZWJjNzQ4MDMzMDNjMTNlLi5lM2U3NGQ2ZWQz
OTk3M2IyYzg5N2M5OWJhYzg2MGZmMDZhZGJiYjkwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9idWdz
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxOS0wNi0wNSAgTGluZyBIbyAgPGxpbmdjaGVyZF9o
b0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgb2YgenhjdmJuIHBhc3N3b3JkIHN0
cmVuZ3RoIGNoZWNrZXIgdG8gYnVncy53ZWJraXQub3JnIHdlYnNpdGUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgzOTEKKyAgICAgICAgcmRhcjov
L3Byb2JsZW0vNTEyNzgxNjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIEJ1Z3ppbGxhL0NvbmZpZy9BdXRoLnBtOgorICAgICAgICAoZ2V0X3BhcmFt
X2xpc3QpOgorICAgICAgICAqIEJ1Z3ppbGxhL0luc3RhbGwvUmVxdWlyZW1lbnRzLnBtOgorICAg
ICAgICAoUkVRVUlSRURfTU9EVUxFUyk6CisgICAgICAgICogQnVnemlsbGEvVXNlci5wbToKKyAg
ICAgICAgKHZhbGlkYXRlX3Bhc3N3b3JkX2NoZWNrKToKKyAgICAgICAgKiB0ZW1wbGF0ZS9lbi9k
ZWZhdWx0L2FkbWluL3BhcmFtcy9hdXRoLmh0bWwudG1wbDoKKyAgICAgICAgKiB0ZW1wbGF0ZS9l
bi9kZWZhdWx0L2dsb2JhbC91c2VyLWVycm9yLmh0bWwudG1wbDoKKwogMjAxOS0wNS0xMyAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWd6aWxsYSBzaG91bGQg
Y29udmVydCAicjEyMzQ1IiB0byBhIHRyYWMud2Via2l0Lm9yZyBsaW5rCmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvQ29uZmlnL0F1dGgucG0gYi9XZWJzaXRl
cy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvQ29uZmlnL0F1dGgucG0KaW5kZXggNzhkNzE5YjE1
ZDM1YmM3Y2ZhZmU0YWU4NzZiYWU0ZjZkMjIzMTFkZi4uYjFjMmUzNzJhZjY1NDNmOTMyY2E3ODNh
NDU3ZDE4OTlmZTRiYzYxOSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1
Z3ppbGxhL0NvbmZpZy9BdXRoLnBtCisrKyBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy9CdWd6
aWxsYS9Db25maWcvQXV0aC5wbQpAQCAtMTA3LDExICsxMDcsMTIgQEAgc3ViIGdldF9wYXJhbV9s
aXN0IHsKICAgIGNoZWNrZXIgPT4gXCZjaGVja19yZWdleHAKICAgfSwKIAorICAjIFdFQktJVF9D
SEFOR0VTCiAgIHsKICAgIG5hbWUgPT4gJ3Bhc3N3b3JkX2NvbXBsZXhpdHknLAogICAgdHlwZSA9
PiAncycsCiAgICBjaG9pY2VzID0+IFsgJ25vX2NvbnN0cmFpbnRzJywgJ21peGVkX2xldHRlcnMn
LCAnbGV0dGVyc19udW1iZXJzJywKLSAgICAgICAgICAgICAgICAnbGV0dGVyc19udW1iZXJzX3Nw
ZWNpYWxjaGFycycgXSwKKyAgICAgICAgICAgICAgICAnbGV0dGVyc19udW1iZXJzX3NwZWNpYWxj
aGFycycsICd6eGN2Ym5fcGFzc3dvcmRfY2hlY2tlcicgXSwKICAgIGRlZmF1bHQgPT4gJ25vX2Nv
bnN0cmFpbnRzJywKICAgIGNoZWNrZXIgPT4gXCZjaGVja19tdWx0aQogICB9LApkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1Z3ppbGxhL0luc3RhbGwvUmVxdWlyZW1lbnRz
LnBtIGIvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1Z3ppbGxhL0luc3RhbGwvUmVxdWlyZW1l
bnRzLnBtCmluZGV4IDYxNDk2ZDg0M2ExNzQ5NmRlMjAxNmFlNDYxNTQ4OWNjY2IyYzVkM2YuLjhi
MWI4MDNkYTlmMWQyNWM4M2VmM2E4MWQ3NzlmNzdmYTYxNjc4ZWQgMTAwNjQ0Ci0tLSBhL1dlYnNp
dGVzL2J1Z3Mud2Via2l0Lm9yZy9CdWd6aWxsYS9JbnN0YWxsL1JlcXVpcmVtZW50cy5wbQorKysg
Yi9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvSW5zdGFsbC9SZXF1aXJlbWVudHMu
cG0KQEAgLTE2MSw2ICsxNjEsMTIgQEAgc3ViIFJFUVVJUkVEX01PRFVMRVMgewogICAgICAgICAj
IDIuMCBpcyB0aGUgZmlyc3QgdmVyc2lvbiB0aGF0IHdpbGwgd29yayB3aXRoIEpTT046OlJQQy4K
ICAgICAgICAgdmVyc2lvbiA9PiAnMi4wMScsCiAgICAgfSwKKyAgICAjIFdFQktJVF9DSEFOR0VT
CisgICAgeworICAgICAgICBwYWNrYWdlID0+ICdEYXRhLVBhc3N3b3JkLXp4Y3ZibicsCisgICAg
ICAgIG1vZHVsZSAgPT4gJ0RhdGE6OlBhc3N3b3JkOjp6eGN2Ym4nLAorICAgICAgICB2ZXJzaW9u
ID0+IDAKKyAgICB9LAogICAgICk7CiAKICAgICBpZiAoT05fV0lORE9XUykgewpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1Z3ppbGxhL1VzZXIucG0gYi9XZWJzaXRlcy9i
dWdzLndlYmtpdC5vcmcvQnVnemlsbGEvVXNlci5wbQppbmRleCAwNzdmMTFkMTY4NWJkZTVmYjk1
YWI4MWVkOTlhZWQ0MDNhNzViMjZjLi40MTg4YjRmZTliYjlkZTU3Y2MyNWI0M2E0NDMwOWRkMGE2
MWRhZDJkIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvVXNl
ci5wbQorKysgYi9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvVXNlci5wbQpAQCAt
MzEsNiArMzEsOCBAQCB1c2UgU3RvcmFibGUgcXcoZGNsb25lKTsKIHVzZSBVUkk7CiB1c2UgVVJJ
OjpRdWVyeVBhcmFtOwogCit1c2UgRGF0YTo6UGFzc3dvcmQ6Onp4Y3ZibiBxdyhwYXNzd29yZF9z
dHJlbmd0aCk7ICMgV0VCS0lUX0NIQU5HRVMKKwogdXNlIHBhcmVudCBxdyhCdWd6aWxsYTo6T2Jq
ZWN0IEV4cG9ydGVyKTsKIEBCdWd6aWxsYTo6VXNlcjo6RVhQT1JUID0gcXcoaXNfYXZhaWxhYmxl
X3VzZXJuYW1lCiAgICAgbG9naW5fdG9faWQgdmFsaWRhdGVfcGFzc3dvcmQgdmFsaWRhdGVfcGFz
c3dvcmRfY2hlY2sKQEAgLTI0ODYsNiArMjQ4OCwxMiBAQCBzdWIgdmFsaWRhdGVfcGFzc3dvcmRf
Y2hlY2sgewogICAgIH0gZWxzaWYgKCRjb21wbGV4aXR5X2xldmVsIGVxICdtaXhlZF9sZXR0ZXJz
JykgewogICAgICAgICByZXR1cm4gJ3Bhc3N3b3JkX25vdF9jb21wbGV4JwogICAgICAgICAgIGlm
ICgkcGFzc3dvcmQgIX4gL1tbOmxvd2VyOl1dLyB8fCAkcGFzc3dvcmQgIX4gL1tbOnVwcGVyOl1d
Lyk7CisgICAgIyBXRUJLSVRfQ0hBTkdFUworICAgIH0gZWxzaWYgKCRjb21wbGV4aXR5X2xldmVs
IGVxICd6eGN2Ym5fcGFzc3dvcmRfY2hlY2tlcicpIHsKKyAgICAgICAgbXkgJW9wdHMgPSAoc2Nv
cmVfZm9yX2ZlZWRiYWNrID0+IDMpOworICAgICAgICBteSAkZXN0X3N0cmVuZ3RoID0gcGFzc3dv
cmRfc3RyZW5ndGgoJHBhc3N3b3JkLCBcJW9wdHMpOworICAgICAgICByZXR1cm4gJ1Bhc3N3b3Jk
IGlzIHdlYWsuICcgLiAkZXN0X3N0cmVuZ3RoLT57ZmVlZGJhY2t9LT57d2FybmluZ30gLiAnLiAn
CisgICAgICAgICAgaWYgKCRlc3Rfc3RyZW5ndGgtPntzY29yZX0gPCA0KTsKICAgICB9CiAKICAg
ICAjIEhhdmluZyBkb25lIHRoZXNlIGNoZWNrcyBtYWtlcyB1cyBjb25zaWRlciB0aGUgcGFzc3dv
cmQgdW50YWludGVkLgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL3RlbXBs
YXRlL2VuL2RlZmF1bHQvYWRtaW4vcGFyYW1zL2F1dGguaHRtbC50bXBsIGIvV2Vic2l0ZXMvYnVn
cy53ZWJraXQub3JnL3RlbXBsYXRlL2VuL2RlZmF1bHQvYWRtaW4vcGFyYW1zL2F1dGguaHRtbC50
bXBsCmluZGV4IDkwMmQyZmM4MjZiZjMzZmY4YmRhMTA1MTVmNjg5MWFiZmVmZTgyNDUuLmU2OWFh
ZGRlM2Q3MWFhZGMxODBmOGU1ZDNjN2E0YWU1MTNmZjBlNjYgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVz
L2J1Z3Mud2Via2l0Lm9yZy90ZW1wbGF0ZS9lbi9kZWZhdWx0L2FkbWluL3BhcmFtcy9hdXRoLmh0
bWwudG1wbAorKysgYi9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvdGVtcGxhdGUvZW4vZGVmYXVs
dC9hZG1pbi9wYXJhbXMvYXV0aC5odG1sLnRtcGwKQEAgLTEzMiw3ICsxMzIsOCBAQAogICAgICI8
bGk+bGV0dGVyc19udW1iZXJzIC0gUGFzc3dvcmRzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUg
VVBQRVIgYW5kIG9uZSAiIF8KICAgICAibG93ZXIgY2FzZSBsZXR0ZXIgYW5kIGEgbnVtYmVyLjwv
bGk+IiBfCiAgICAgIjxsaT5sZXR0ZXJzX251bWJlcnNfc3BlY2lhbGNoYXJzIC0gUGFzc3dvcmRz
IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgIiBfCi0gICAgImxldHRlciwgYSBudW1iZXIgYW5k
IGEgc3BlY2lhbCBjaGFyYWN0ZXIuPC9saT48L3VsPiIKKyAgICAibGV0dGVyLCBhIG51bWJlciBh
bmQgYSBzcGVjaWFsIGNoYXJhY3Rlci48L2xpPiIgXworICAgICI8bGk+enhjdmJuX3Bhc3N3b3Jk
X2NoZWNrZXIgLSBFbmFibGUgenhjdmJuIHN0cmVuZ3RoIGVzdGltYXRvciBmb3IgcGFzc3dvcmQg
c3RyZW5ndGggY2hlY2tpbmcuPC9saT48L3VsPiIgIyBXRUJLSVRfQ0hBTkdFUwogCiAgIHBhc3N3
b3JkX2NoZWNrX29uX2xvZ2luID0+CiAgICAgIklmIHNldCwgJHRlcm1zLkJ1Z3ppbGxhIHdpbGwg
Y2hlY2sgdGhhdCB0aGUgcGFzc3dvcmQgbWVldHMgdGhlIGN1cnJlbnQgIiBfCmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvdGVtcGxhdGUvZW4vZGVmYXVsdC9nbG9iYWwvdXNl
ci1lcnJvci5odG1sLnRtcGwgYi9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvdGVtcGxhdGUvZW4v
ZGVmYXVsdC9nbG9iYWwvdXNlci1lcnJvci5odG1sLnRtcGwKaW5kZXggNzQyMWExNTI1MDEwODUx
MDA2YWEzYmY5YTM4YzRiMDIzNWNmNThhZi4uMTQ5NTE5YjIzNTIwMGJhYzJkYzRiZGUxMGI1ZTc1
ZWJkZWVjMGVjOSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL3RlbXBsYXRl
L2VuL2RlZmF1bHQvZ2xvYmFsL3VzZXItZXJyb3IuaHRtbC50bXBsCisrKyBiL1dlYnNpdGVzL2J1
Z3Mud2Via2l0Lm9yZy90ZW1wbGF0ZS9lbi9kZWZhdWx0L2dsb2JhbC91c2VyLWVycm9yLmh0bWwu
dG1wbApAQCAtMTQ2Miw2ICsxNDYyLDE1IEBACiAgICAgICByZXF1ZXN0IGEgbmV3IHBhc3N3b3Jk
PC9hPiBpbiBvcmRlciB0byBsb2cgaW4gYWdhaW4uCiAgICAgWyUgRU5EICVdCiAKKyAgWyUjIFdF
QktJVF9DSEFOR0VTICVdCisgIFslIEVMU0lGIGVycm9yLnNlYXJjaCgiUGFzc3dvcmQgaXMgd2Vh
ayIpICVdCisgICAgWyUgdGl0bGUgPSAiUGFzc3dvcmQgSXMgV2VhayIgJV0KKyAgICBbJSBlcnJv
ciBGSUxURVIgaHRtbCAlXQorICAgIFslIElGIGxvY2tlZF91c2VyICVdCisgICAgICBZb3UgbXVz
dCA8YSBocmVmPSJ0b2tlbi5jZ2k/YT1yZXFwdyZhbXA7bG9naW5uYW1lPVslIGxvY2tlZF91c2Vy
LmVtYWlsIEZJTFRFUiB1cmkgJV0mYW1wO3Rva2VuPVslIGlzc3VlX2hhc2hfdG9rZW4oWydyZXFw
dyddKSBGSUxURVIgdXJpICVdIj4KKyAgICAgIHJlcXVlc3QgYSBuZXcgcGFzc3dvcmQ8L2E+IGlu
IG9yZGVyIHRvIGxvZyBpbiBhZ2Fpbi4KKyAgICBbJSBFTkQgJV0KKwogICBbJSBFTFNJRiBlcnJv
ciA9PSAicGFzc3dvcmRfbm90X2NvbXBsZXgiICVdCiAgICAgWyUgdGl0bGUgPSAiUGFzc3dvcmQg
RmFpbHMgUmVxdWlyZW1lbnRzIiAlXQogICAgIFslIHBhc3NyZWdleCA9IFBhcmFtKCdwYXNzd29y
ZF9jb21wbGV4aXR5JykgJV0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371436</attachid>
            <date>2019-06-05 14:06:31 -0700</date>
            <delta_ts>2019-06-05 20:20:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198391-20190605140630.patch</filename>
            <type>text/plain</type>
            <size>5711</size>
            <attacher name="lingho@apple.com">lingho</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1OTA2CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9idWdzLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA3N2Q0ZmU2ZmE1OGM0NGQzNWYyZmM5YWJiZWJjNzQ4MDMzMDNjMTNlLi5lM2U3NGQ2ZWQz
OTk3M2IyYzg5N2M5OWJhYzg2MGZmMDZhZGJiYjkwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9idWdz
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxOS0wNi0wNSAgTGluZyBIbyAgPGxpbmdjaGVyZF9o
b0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgb2YgenhjdmJuIHBhc3N3b3JkIHN0
cmVuZ3RoIGNoZWNrZXIgdG8gYnVncy53ZWJraXQub3JnIHdlYnNpdGUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgzOTEKKyAgICAgICAgcmRhcjov
L3Byb2JsZW0vNTEyNzgxNjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIEJ1Z3ppbGxhL0NvbmZpZy9BdXRoLnBtOgorICAgICAgICAoZ2V0X3BhcmFt
X2xpc3QpOgorICAgICAgICAqIEJ1Z3ppbGxhL0luc3RhbGwvUmVxdWlyZW1lbnRzLnBtOgorICAg
ICAgICAoUkVRVUlSRURfTU9EVUxFUyk6CisgICAgICAgICogQnVnemlsbGEvVXNlci5wbToKKyAg
ICAgICAgKHZhbGlkYXRlX3Bhc3N3b3JkX2NoZWNrKToKKyAgICAgICAgKiB0ZW1wbGF0ZS9lbi9k
ZWZhdWx0L2FkbWluL3BhcmFtcy9hdXRoLmh0bWwudG1wbDoKKyAgICAgICAgKiB0ZW1wbGF0ZS9l
bi9kZWZhdWx0L2dsb2JhbC91c2VyLWVycm9yLmh0bWwudG1wbDoKKwogMjAxOS0wNS0xMyAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWd6aWxsYSBzaG91bGQg
Y29udmVydCAicjEyMzQ1IiB0byBhIHRyYWMud2Via2l0Lm9yZyBsaW5rCmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvQ29uZmlnL0F1dGgucG0gYi9XZWJzaXRl
cy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvQ29uZmlnL0F1dGgucG0KaW5kZXggNzhkNzE5YjE1
ZDM1YmM3Y2ZhZmU0YWU4NzZiYWU0ZjZkMjIzMTFkZi4uYjFjMmUzNzJhZjY1NDNmOTMyY2E3ODNh
NDU3ZDE4OTlmZTRiYzYxOSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1
Z3ppbGxhL0NvbmZpZy9BdXRoLnBtCisrKyBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy9CdWd6
aWxsYS9Db25maWcvQXV0aC5wbQpAQCAtMTA3LDExICsxMDcsMTIgQEAgc3ViIGdldF9wYXJhbV9s
aXN0IHsKICAgIGNoZWNrZXIgPT4gXCZjaGVja19yZWdleHAKICAgfSwKIAorICAjIFdFQktJVF9D
SEFOR0VTCiAgIHsKICAgIG5hbWUgPT4gJ3Bhc3N3b3JkX2NvbXBsZXhpdHknLAogICAgdHlwZSA9
PiAncycsCiAgICBjaG9pY2VzID0+IFsgJ25vX2NvbnN0cmFpbnRzJywgJ21peGVkX2xldHRlcnMn
LCAnbGV0dGVyc19udW1iZXJzJywKLSAgICAgICAgICAgICAgICAnbGV0dGVyc19udW1iZXJzX3Nw
ZWNpYWxjaGFycycgXSwKKyAgICAgICAgICAgICAgICAnbGV0dGVyc19udW1iZXJzX3NwZWNpYWxj
aGFycycsICd6eGN2Ym5fcGFzc3dvcmRfY2hlY2tlcicgXSwKICAgIGRlZmF1bHQgPT4gJ25vX2Nv
bnN0cmFpbnRzJywKICAgIGNoZWNrZXIgPT4gXCZjaGVja19tdWx0aQogICB9LApkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1Z3ppbGxhL0luc3RhbGwvUmVxdWlyZW1lbnRz
LnBtIGIvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1Z3ppbGxhL0luc3RhbGwvUmVxdWlyZW1l
bnRzLnBtCmluZGV4IDYxNDk2ZDg0M2ExNzQ5NmRlMjAxNmFlNDYxNTQ4OWNjY2IyYzVkM2YuLjhi
MWI4MDNkYTlmMWQyNWM4M2VmM2E4MWQ3NzlmNzdmYTYxNjc4ZWQgMTAwNjQ0Ci0tLSBhL1dlYnNp
dGVzL2J1Z3Mud2Via2l0Lm9yZy9CdWd6aWxsYS9JbnN0YWxsL1JlcXVpcmVtZW50cy5wbQorKysg
Yi9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvSW5zdGFsbC9SZXF1aXJlbWVudHMu
cG0KQEAgLTE2MSw2ICsxNjEsMTIgQEAgc3ViIFJFUVVJUkVEX01PRFVMRVMgewogICAgICAgICAj
IDIuMCBpcyB0aGUgZmlyc3QgdmVyc2lvbiB0aGF0IHdpbGwgd29yayB3aXRoIEpTT046OlJQQy4K
ICAgICAgICAgdmVyc2lvbiA9PiAnMi4wMScsCiAgICAgfSwKKyAgICAjIFdFQktJVF9DSEFOR0VT
CisgICAgeworICAgICAgICBwYWNrYWdlID0+ICdEYXRhLVBhc3N3b3JkLXp4Y3ZibicsCisgICAg
ICAgIG1vZHVsZSAgPT4gJ0RhdGE6OlBhc3N3b3JkOjp6eGN2Ym4nLAorICAgICAgICB2ZXJzaW9u
ID0+IDAKKyAgICB9LAogICAgICk7CiAKICAgICBpZiAoT05fV0lORE9XUykgewpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvYnVncy53ZWJraXQub3JnL0J1Z3ppbGxhL1VzZXIucG0gYi9XZWJzaXRlcy9i
dWdzLndlYmtpdC5vcmcvQnVnemlsbGEvVXNlci5wbQppbmRleCAwNzdmMTFkMTY4NWJkZTVmYjk1
YWI4MWVkOTlhZWQ0MDNhNzViMjZjLi5mMjdjNTBhYjViNzAyMjJkOTA2ZDg5YWE4OWM3Y2FkM2Y3
MDU0YWZjIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvVXNl
ci5wbQorKysgYi9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvQnVnemlsbGEvVXNlci5wbQpAQCAt
MzEsNiArMzEsOCBAQCB1c2UgU3RvcmFibGUgcXcoZGNsb25lKTsKIHVzZSBVUkk7CiB1c2UgVVJJ
OjpRdWVyeVBhcmFtOwogCit1c2UgRGF0YTo6UGFzc3dvcmQ6Onp4Y3ZibiBxdyhwYXNzd29yZF9z
dHJlbmd0aCk7ICMgV0VCS0lUX0NIQU5HRVMKKwogdXNlIHBhcmVudCBxdyhCdWd6aWxsYTo6T2Jq
ZWN0IEV4cG9ydGVyKTsKIEBCdWd6aWxsYTo6VXNlcjo6RVhQT1JUID0gcXcoaXNfYXZhaWxhYmxl
X3VzZXJuYW1lCiAgICAgbG9naW5fdG9faWQgdmFsaWRhdGVfcGFzc3dvcmQgdmFsaWRhdGVfcGFz
c3dvcmRfY2hlY2sKQEAgLTI0ODYsNiArMjQ4OCwxMiBAQCBzdWIgdmFsaWRhdGVfcGFzc3dvcmRf
Y2hlY2sgewogICAgIH0gZWxzaWYgKCRjb21wbGV4aXR5X2xldmVsIGVxICdtaXhlZF9sZXR0ZXJz
JykgewogICAgICAgICByZXR1cm4gJ3Bhc3N3b3JkX25vdF9jb21wbGV4JwogICAgICAgICAgIGlm
ICgkcGFzc3dvcmQgIX4gL1tbOmxvd2VyOl1dLyB8fCAkcGFzc3dvcmQgIX4gL1tbOnVwcGVyOl1d
Lyk7CisgICAgIyBXRUJLSVRfQ0hBTkdFUworICAgIH0gZWxzaWYgKCRjb21wbGV4aXR5X2xldmVs
IGVxICd6eGN2Ym5fcGFzc3dvcmRfY2hlY2tlcicpIHsKKyAgICAgICAgbXkgJW9wdHMgPSAoc2Nv
cmVfZm9yX2ZlZWRiYWNrID0+IDMpOworICAgICAgICBteSAkZXN0X3N0cmVuZ3RoID0gcGFzc3dv
cmRfc3RyZW5ndGgoJHBhc3N3b3JkLCBcJW9wdHMpOworICAgICAgICByZXR1cm4gJ1Bhc3N3b3Jk
IGlzIHdlYWsuICcgLiAkZXN0X3N0cmVuZ3RoLT57ZmVlZGJhY2t9LT57d2FybmluZ30KKyAgICAg
ICAgICBpZiAoJGVzdF9zdHJlbmd0aC0+e3Njb3JlfSA8IDQpOwogICAgIH0KIAogICAgICMgSGF2
aW5nIGRvbmUgdGhlc2UgY2hlY2tzIG1ha2VzIHVzIGNvbnNpZGVyIHRoZSBwYXNzd29yZCB1bnRh
aW50ZWQuCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvdGVtcGxhdGUvZW4v
ZGVmYXVsdC9hZG1pbi9wYXJhbXMvYXV0aC5odG1sLnRtcGwgYi9XZWJzaXRlcy9idWdzLndlYmtp
dC5vcmcvdGVtcGxhdGUvZW4vZGVmYXVsdC9hZG1pbi9wYXJhbXMvYXV0aC5odG1sLnRtcGwKaW5k
ZXggOTAyZDJmYzgyNmJmMzNmZjhiZGExMDUxNWY2ODkxYWJmZWZlODI0NS4uZTY5YWFkZGUzZDcx
YWFkYzE4MGY4ZTVkM2M3YTRhZTUxM2ZmMGU2NiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvYnVncy53
ZWJraXQub3JnL3RlbXBsYXRlL2VuL2RlZmF1bHQvYWRtaW4vcGFyYW1zL2F1dGguaHRtbC50bXBs
CisrKyBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy90ZW1wbGF0ZS9lbi9kZWZhdWx0L2FkbWlu
L3BhcmFtcy9hdXRoLmh0bWwudG1wbApAQCAtMTMyLDcgKzEzMiw4IEBACiAgICAgIjxsaT5sZXR0
ZXJzX251bWJlcnMgLSBQYXNzd29yZHMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBVUFBFUiBh
bmQgb25lICIgXwogICAgICJsb3dlciBjYXNlIGxldHRlciBhbmQgYSBudW1iZXIuPC9saT4iIF8K
ICAgICAiPGxpPmxldHRlcnNfbnVtYmVyc19zcGVjaWFsY2hhcnMgLSBQYXNzd29yZHMgbXVzdCBj
b250YWluIGF0IGxlYXN0IG9uZSAiIF8KLSAgICAibGV0dGVyLCBhIG51bWJlciBhbmQgYSBzcGVj
aWFsIGNoYXJhY3Rlci48L2xpPjwvdWw+IgorICAgICJsZXR0ZXIsIGEgbnVtYmVyIGFuZCBhIHNw
ZWNpYWwgY2hhcmFjdGVyLjwvbGk+IiBfCisgICAgIjxsaT56eGN2Ym5fcGFzc3dvcmRfY2hlY2tl
ciAtIEVuYWJsZSB6eGN2Ym4gc3RyZW5ndGggZXN0aW1hdG9yIGZvciBwYXNzd29yZCBzdHJlbmd0
aCBjaGVja2luZy48L2xpPjwvdWw+IiAjIFdFQktJVF9DSEFOR0VTCiAKICAgcGFzc3dvcmRfY2hl
Y2tfb25fbG9naW4gPT4KICAgICAiSWYgc2V0LCAkdGVybXMuQnVnemlsbGEgd2lsbCBjaGVjayB0
aGF0IHRoZSBwYXNzd29yZCBtZWV0cyB0aGUgY3VycmVudCAiIF8KZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL2J1Z3Mud2Via2l0Lm9yZy90ZW1wbGF0ZS9lbi9kZWZhdWx0L2dsb2JhbC91c2VyLWVycm9y
Lmh0bWwudG1wbCBiL1dlYnNpdGVzL2J1Z3Mud2Via2l0Lm9yZy90ZW1wbGF0ZS9lbi9kZWZhdWx0
L2dsb2JhbC91c2VyLWVycm9yLmh0bWwudG1wbAppbmRleCA3NDIxYTE1MjUwMTA4NTEwMDZhYTNi
ZjlhMzhjNGIwMjM1Y2Y1OGFmLi4xNDk1MTliMjM1MjAwYmFjMmRjNGJkZTEwYjVlNzVlYmRlZWMw
ZWM5IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9idWdzLndlYmtpdC5vcmcvdGVtcGxhdGUvZW4vZGVm
YXVsdC9nbG9iYWwvdXNlci1lcnJvci5odG1sLnRtcGwKKysrIGIvV2Vic2l0ZXMvYnVncy53ZWJr
aXQub3JnL3RlbXBsYXRlL2VuL2RlZmF1bHQvZ2xvYmFsL3VzZXItZXJyb3IuaHRtbC50bXBsCkBA
IC0xNDYyLDYgKzE0NjIsMTUgQEAKICAgICAgIHJlcXVlc3QgYSBuZXcgcGFzc3dvcmQ8L2E+IGlu
IG9yZGVyIHRvIGxvZyBpbiBhZ2Fpbi4KICAgICBbJSBFTkQgJV0KIAorICBbJSMgV0VCS0lUX0NI
QU5HRVMgJV0KKyAgWyUgRUxTSUYgZXJyb3Iuc2VhcmNoKCJQYXNzd29yZCBpcyB3ZWFrIikgJV0K
KyAgICBbJSB0aXRsZSA9ICJQYXNzd29yZCBJcyBXZWFrIiAlXQorICAgIFslIGVycm9yIEZJTFRF
UiBodG1sICVdCisgICAgWyUgSUYgbG9ja2VkX3VzZXIgJV0KKyAgICAgIFlvdSBtdXN0IDxhIGhy
ZWY9InRva2VuLmNnaT9hPXJlcXB3JmFtcDtsb2dpbm5hbWU9WyUgbG9ja2VkX3VzZXIuZW1haWwg
RklMVEVSIHVyaSAlXSZhbXA7dG9rZW49WyUgaXNzdWVfaGFzaF90b2tlbihbJ3JlcXB3J10pIEZJ
TFRFUiB1cmkgJV0iPgorICAgICAgcmVxdWVzdCBhIG5ldyBwYXNzd29yZDwvYT4gaW4gb3JkZXIg
dG8gbG9nIGluIGFnYWluLgorICAgIFslIEVORCAlXQorCiAgIFslIEVMU0lGIGVycm9yID09ICJw
YXNzd29yZF9ub3RfY29tcGxleCIgJV0KICAgICBbJSB0aXRsZSA9ICJQYXNzd29yZCBGYWlscyBS
ZXF1aXJlbWVudHMiICVdCiAgICAgWyUgcGFzc3JlZ2V4ID0gUGFyYW0oJ3Bhc3N3b3JkX2NvbXBs
ZXhpdHknKSAlXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>