<?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>126715</bug_id>
          
          <creation_ts>2014-01-09 13:16:46 -0800</creation_ts>
          <short_desc>Remove the BlackBerry port from trunk</short_desc>
          <delta_ts>2014-01-10 16:51:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>126726</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>bunhere</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>roger_fong</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>syoichi</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>966038</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-09 13:16:46 -0800</bug_when>
    <thetext>Remove the BlackBerry port, it is unmaintained.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966076</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-09 14:36:18 -0800</bug_when>
    <thetext>r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966108</commentid>
    <comment_count>2</comment_count>
      <attachid>220781</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-09 16:00:27 -0800</bug_when>
    <thetext>Created attachment 220781
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966114</commentid>
    <comment_count>3</comment_count>
      <attachid>220781</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-09 16:10:16 -0800</bug_when>
    <thetext>Comment on attachment 220781
Patch

Committed r161597.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966118</commentid>
    <comment_count>4</comment_count>
      <attachid>220784</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-09 16:15:34 -0800</bug_when>
    <thetext>Created attachment 220784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966120</commentid>
    <comment_count>5</comment_count>
      <attachid>220784</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-01-09 16:16:50 -0800</bug_when>
    <thetext>Comment on attachment 220784
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Remove remaining blackberry files I could find WebCore

From WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966150</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-09 17:21:04 -0800</bug_when>
    <thetext>Committed r161607: &lt;http://trac.webkit.org/changeset/161607&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966156</commentid>
    <comment_count>7</comment_count>
      <attachid>220793</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-09 17:39:16 -0800</bug_when>
    <thetext>Created attachment 220793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966498</commentid>
    <comment_count>8</comment_count>
      <attachid>220872</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-10 12:02:29 -0800</bug_when>
    <thetext>Created attachment 220872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966511</commentid>
    <comment_count>9</comment_count>
      <attachid>220876</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-10 12:27:52 -0800</bug_when>
    <thetext>Created attachment 220876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966517</commentid>
    <comment_count>10</comment_count>
      <attachid>220872</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-10 12:36:23 -0800</bug_when>
    <thetext>Comment on attachment 220872
Patch

Clearing flags on attachment: 220872

Committed r161661: &lt;http://trac.webkit.org/changeset/161661&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966518</commentid>
    <comment_count>11</comment_count>
      <attachid>220876</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-10 12:37:15 -0800</bug_when>
    <thetext>Comment on attachment 220876
Patch

Clearing flags on attachment: 220876

Committed r161662: &lt;http://trac.webkit.org/changeset/161662&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966573</commentid>
    <comment_count>12</comment_count>
      <attachid>220885</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-10 13:58:25 -0800</bug_when>
    <thetext>Created attachment 220885
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966603</commentid>
    <comment_count>13</comment_count>
      <attachid>220885</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-10 14:44:51 -0800</bug_when>
    <thetext>Comment on attachment 220885
Patch

Clearing flags on attachment: 220885

Committed r161680: &lt;http://trac.webkit.org/changeset/161680&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966678</commentid>
    <comment_count>14</comment_count>
      <attachid>220904</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-10 16:30:35 -0800</bug_when>
    <thetext>Created attachment 220904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966688</commentid>
    <comment_count>15</comment_count>
      <attachid>220904</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-10 16:49:54 -0800</bug_when>
    <thetext>Comment on attachment 220904
Patch

Clearing flags on attachment: 220904

Committed r161699: &lt;http://trac.webkit.org/changeset/161699&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966689</commentid>
    <comment_count>16</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-10 16:51:30 -0800</bug_when>
    <thetext>All the obvious references and #ifdefs have been removed. Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220781</attachid>
            <date>2014-01-09 16:00:27 -0800</date>
            <delta_ts>2014-01-09 16:10:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126715-20140109160026.patch</filename>
            <type>text/plain</type>
            <size>2181684</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTU5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE0LTAxLTA5ICBCZW5qYW1p
biBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBibGFja2Jl
cnJ5IGZyb20gV2ViQ29yZS9wbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NzE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5OiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnk6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9ibGFja2JlcnJ5OiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnk6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vYmxhY2tiZXJyeTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnk6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9i
bGFja2JlcnJ5OiBSZW1vdmVkLgorCiAyMDE0LTAxLTA5ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVz
QGFwcGxlLmNvbT4KIAogICAgICAgICBBdHRlbXB0IHRvIGZpeCB0aGUgTW91bnRhaW4gTGlvbiBS
ZWxlYXNlICgzMi1iaXQpIGJ1aWxkIGZvbGxvd2luZyA8aHR0cDovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvMTYxNTg5PgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJy
eS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYW5h
Z2VyLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxh
Y2tiZXJyeS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDIyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZU1hbmFnZXIuaCIKLQotI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKLSNpbmNsdWRlICJVUkwuaCIK
LSNpbmNsdWRlICJQYWdlQ2xpZW50QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIlByb3RlY3Rpb25T
cGFjZS5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtQXNzZXJ0Lmg+Ci0jaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8UGFnZUNsaWVudEJsYWNrQmVy
cnkqLCBib29sPiBQYWdlVmlzaWJpbGl0eU1hcDsKLQotc3RydWN0IENoYWxsZW5nZUluZm8gewot
ICAgIENoYWxsZW5nZUluZm8oY29uc3QgVVJMJiwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgY29u
c3QgQ3JlZGVudGlhbCYsIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2xpZW50KiwgUGFnZUNsaWVu
dEJsYWNrQmVycnkqKTsKLQotICAgIFVSTCB1cmw7Ci0gICAgUHJvdGVjdGlvblNwYWNlIHNwYWNl
OwotICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbDsKLSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUNsaWVudCogYXV0aENsaWVudDsKLSAgICBQYWdlQ2xpZW50QmxhY2tCZXJyeSogcGFnZUNsaWVu
dDsKLSAgICBib29sIGJsb2NrZWQ7Ci19OwotCi1DaGFsbGVuZ2VJbmZvOjpDaGFsbGVuZ2VJbmZv
KGNvbnN0IFVSTCYgYVVybCwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBhU3BhY2UsIGNvbnN0IENy
ZWRlbnRpYWwmIGFDcmVkZW50aWFsLAotICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2xpZW50
KiBhbkF1dGhDbGllbnQsIFBhZ2VDbGllbnRCbGFja0JlcnJ5KiBhUGFnZUNsaWVudCkKLSAgICA6
IHVybChhVXJsKQotICAgICwgc3BhY2UoYVNwYWNlKQotICAgICwgY3JlZGVudGlhbChhQ3JlZGVu
dGlhbCkKLSAgICAsIGF1dGhDbGllbnQoYW5BdXRoQ2xpZW50KQotICAgICwgcGFnZUNsaWVudChh
UGFnZUNsaWVudCkKLSAgICAsIGJsb2NrZWQoZmFsc2UpCi17Ci19Ci0KLWNsYXNzIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlTWFuYWdlclByaXZhdGUgewotcHVibGljOgotICAgIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlTWFuYWdlclByaXZhdGUoKTsKLQotICAgIGJvb2wgcmVzdW1lQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoUGFnZUNsaWVudEJsYWNrQmVycnkqKTsKLSAgICB2b2lkIHN0YXJ0QXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoQ2hhbGxlbmdlSW5mbyopOwotICAgIGJvb2wgcGFnZUV4aXN0
cyhQYWdlQ2xpZW50QmxhY2tCZXJyeSopOwotCi0gICAgQ2hhbGxlbmdlSW5mbyogbV9hY3RpdmVD
aGFsbGVuZ2U7Ci0gICAgUGFnZVZpc2liaWxpdHlNYXAgbV9wYWdlVmlzaWJpbGl0eU1hcDsKLSAg
ICBWZWN0b3I8T3duUHRyPENoYWxsZW5nZUluZm8+ID4gbV9jaGFsbGVuZ2VzOwotfTsKLQotQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyUHJpdmF0ZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2VNYW5hZ2VyUHJpdmF0ZSgpCi0gICAgOiBtX2FjdGl2ZUNoYWxsZW5nZSgwKQotewotfQotCi1i
b29sIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlclByaXZhdGU6OnJlc3VtZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKFBhZ2VDbGllbnRCbGFja0JlcnJ5KiBjbGllbnQpCi17Ci0gICAgQVNT
RVJUKCFtX2FjdGl2ZUNoYWxsZW5nZSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
Y2hhbGxlbmdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9jaGFsbGVuZ2VzW2ldLT5w
YWdlQ2xpZW50ID09IGNsaWVudCAmJiBtX2NoYWxsZW5nZXNbaV0tPmJsb2NrZWQpIHsKLSAgICAg
ICAgICAgIHN0YXJ0QXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9jaGFsbGVuZ2VzW2ldLmdldCgp
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlclByaXZh
dGU6OnN0YXJ0QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQ2hhbGxlbmdlSW5mbyogaW5mbykKLXsK
LSAgICBtX2FjdGl2ZUNoYWxsZW5nZSA9IGluZm87Ci0gICAgbV9hY3RpdmVDaGFsbGVuZ2UtPmJs
b2NrZWQgPSBmYWxzZTsKLSAgICBtX2FjdGl2ZUNoYWxsZW5nZS0+cGFnZUNsaWVudC0+YXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UobV9hY3RpdmVDaGFsbGVuZ2UtPnVybCwgbV9hY3RpdmVDaGFsbGVu
Z2UtPnNwYWNlLCBtX2FjdGl2ZUNoYWxsZW5nZS0+Y3JlZGVudGlhbCk7Ci19Ci0KLWJvb2wgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyUHJpdmF0ZTo6cGFnZUV4aXN0cyhQYWdlQ2xpZW50
QmxhY2tCZXJyeSogY2xpZW50KQotewotICAgIHJldHVybiBtX3BhZ2VWaXNpYmlsaXR5TWFwLmZp
bmQoY2xpZW50KSAhPSBtX3BhZ2VWaXNpYmlsaXR5TWFwLmVuZCgpOwotfQotCi1TSU5HTEVUT05f
SU5JVElBTElaRVJfVEhSRUFEVU5TQUZFKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlcikK
LQotQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZU1hbmFnZXIoKQotICAgIDogZChhZG9wdFB0cihuZXcgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VN
YW5hZ2VyUHJpdmF0ZSkpCi17Ci19Ci0KLXZvaWQgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYW5h
Z2VyOjpwYWdlQ3JlYXRlZChQYWdlQ2xpZW50QmxhY2tCZXJyeSogY2xpZW50KQotewotICAgIGQt
Pm1fcGFnZVZpc2liaWxpdHlNYXAuYWRkKGNsaWVudCwgdHJ1ZSk7Ci19Ci0KLXZvaWQgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyOjpwYWdlRGVsZXRlZChQYWdlQ2xpZW50QmxhY2tCZXJy
eSogY2xpZW50KQotewotICAgIGQtPm1fcGFnZVZpc2liaWxpdHlNYXAucmVtb3ZlKGNsaWVudCk7
Ci0KLSAgICBpZiAoZC0+bV9hY3RpdmVDaGFsbGVuZ2UgJiYgZC0+bV9hY3RpdmVDaGFsbGVuZ2Ut
PnBhZ2VDbGllbnQgPT0gY2xpZW50KQotICAgICAgICBkLT5tX2FjdGl2ZUNoYWxsZW5nZSA9IDA7
Ci0KLSAgICBWZWN0b3I8T3duUHRyPENoYWxsZW5nZUluZm8+ID4gZXhpc3Rpbmc7Ci0gICAgZC0+
bV9jaGFsbGVuZ2VzLnN3YXAoZXhpc3RpbmcpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBleGlzdGluZy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoZXhpc3RpbmdbaV0tPnBhZ2VD
bGllbnQgIT0gY2xpZW50KQotICAgICAgICAgICAgZC0+bV9jaGFsbGVuZ2VzLmFwcGVuZChleGlz
dGluZ1tpXS5yZWxlYXNlKCkpOwotICAgIH0KLX0KLQotdm9pZCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZU1hbmFnZXI6OnBhZ2VWaXNpYmlsaXR5Q2hhbmdlZChQYWdlQ2xpZW50QmxhY2tCZXJyeSog
Y2xpZW50LCBib29sIHZpc2libGUpCi17Ci0gICAgUGFnZVZpc2liaWxpdHlNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBkLT5tX3BhZ2VWaXNpYmlsaXR5TWFwLmZpbmQoY2xpZW50KTsKLQotICAgIEFTU0VS
VChpdGVyICE9IGQtPm1fcGFnZVZpc2liaWxpdHlNYXAuZW5kKCkpOwotICAgIGlmIChpdGVyID09
IGQtPm1fcGFnZVZpc2liaWxpdHlNYXAuZW5kKCkpIHsKLSAgICAgICAgZC0+bV9wYWdlVmlzaWJp
bGl0eU1hcC5hZGQoY2xpZW50LCB2aXNpYmxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChpdGVyLT52YWx1ZSA9PSB2aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
dGVyLT52YWx1ZSA9IHZpc2libGU7Ci0gICAgaWYgKCF2aXNpYmxlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoZC0+bV9hY3RpdmVDaGFsbGVuZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGQtPnJlc3VtZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNsaWVudCk7Ci19Ci0KLXZvaWQgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyOjphdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25z
dCBVUkwmIHVybCwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBzcGFjZSwKLSAgICBjb25zdCBDcmVk
ZW50aWFsJiBjcmVkZW50aWFsLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNsaWVudCogYXV0aENs
aWVudCwgUGFnZUNsaWVudEJsYWNrQmVycnkqIHBhZ2VDbGllbnQpCi17Ci0gICAgQkxBQ0tCRVJS
WV9BU1NFUlQoYXV0aENsaWVudCk7Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQocGFnZUNsaWVudCk7
Ci0KLSAgICBDaGFsbGVuZ2VJbmZvKiBpbmZvID0gbmV3IENoYWxsZW5nZUluZm8odXJsLCBzcGFj
ZSwgY3JlZGVudGlhbCwgYXV0aENsaWVudCwgcGFnZUNsaWVudCk7Ci0gICAgZC0+bV9jaGFsbGVu
Z2VzLmFwcGVuZChhZG9wdFB0cihpbmZvKSk7Ci0KLSAgICBpZiAoZC0+bV9hY3RpdmVDaGFsbGVu
Z2UgfHwgIXBhZ2VDbGllbnQtPmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIGluZm8tPmJsb2NrZWQg
PSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZC0+c3RhcnRBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShpbmZvKTsKLX0KLQotdm9pZCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1h
bmFnZXI6OmNhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQoY2xpZW50KTsKLQot
ICAgIGlmIChkLT5tX2FjdGl2ZUNoYWxsZW5nZSAmJiBkLT5tX2FjdGl2ZUNoYWxsZW5nZS0+YXV0
aENsaWVudCA9PSBjbGllbnQpCi0gICAgICAgIGQtPm1fYWN0aXZlQ2hhbGxlbmdlID0gMDsKLQot
ICAgIFZlY3RvcjxPd25QdHI8Q2hhbGxlbmdlSW5mbz4gPiBleGlzdGluZzsKLSAgICBkLT5tX2No
YWxsZW5nZXMuc3dhcChleGlzdGluZyk7Ci0KLSAgICBDaGFsbGVuZ2VJbmZvKiBuZXh0ID0gMDsK
LSAgICBQYWdlQ2xpZW50QmxhY2tCZXJyeSogcGFnZSA9IDA7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGV4aXN0aW5nLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChleGlzdGluZ1tp
XS0+YXV0aENsaWVudCAhPSBjbGllbnQpIHsKLSAgICAgICAgICAgIGlmIChwYWdlICYmICFuZXh0
ICYmIGV4aXN0aW5nW2ldLT5wYWdlQ2xpZW50ID09IHBhZ2UpCi0gICAgICAgICAgICAgICAgbmV4
dCA9IGV4aXN0aW5nW2ldLmdldCgpOwotICAgICAgICAgICAgZC0+bV9jaGFsbGVuZ2VzLmFwcGVu
ZChleGlzdGluZ1tpXS5yZWxlYXNlKCkpOwotICAgICAgICB9IGVsc2UgaWYgKGQtPm1fYWN0aXZl
Q2hhbGxlbmdlID09IGV4aXN0aW5nW2ldLmdldCgpKQotICAgICAgICAgICAgcGFnZSA9IGV4aXN0
aW5nW2ldLT5wYWdlQ2xpZW50OwotICAgIH0KLQotICAgIGlmIChuZXh0KQotICAgICAgICBkLT5z
dGFydEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG5leHQpOwotfQotCi12b2lkIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlTWFuYWdlcjo6bm90aWZ5Q2hhbGxlbmdlUmVzdWx0KGNvbnN0IFVSTCYsIGNv
bnN0IFByb3RlY3Rpb25TcGFjZSYgc3BhY2UsCi0gICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VS
ZXN1bHQgcmVzdWx0LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIGQtPm1f
YWN0aXZlQ2hhbGxlbmdlID0gMDsKLQotICAgIFZlY3RvcjxPd25QdHI8Q2hhbGxlbmdlSW5mbz4g
PiBleGlzdGluZzsKLSAgICBkLT5tX2NoYWxsZW5nZXMuc3dhcChleGlzdGluZyk7Ci0KLSAgICBD
aGFsbGVuZ2VJbmZvKiBuZXh0ID0gMDsKLSAgICBQYWdlQ2xpZW50QmxhY2tCZXJyeSogcGFnZSA9
IDA7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4aXN0aW5nLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChleGlzdGluZ1tpXS0+c3BhY2UgIT0gc3BhY2UpIHsKLSAgICAgICAgICAg
IGlmIChwYWdlICYmICFuZXh0ICYmIGV4aXN0aW5nW2ldLT5wYWdlQ2xpZW50ID09IHBhZ2UpCi0g
ICAgICAgICAgICAgICAgbmV4dCA9IGV4aXN0aW5nW2ldLmdldCgpOwotICAgICAgICAgICAgZC0+
bV9jaGFsbGVuZ2VzLmFwcGVuZChleGlzdGluZ1tpXS5yZWxlYXNlKCkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcGFnZSA9IGV4aXN0aW5nW2ldLT5wYWdlQ2xpZW50OwotICAgICAg
ICAgICAgZXhpc3RpbmdbaV0tPmF1dGhDbGllbnQtPm5vdGlmeUNoYWxsZW5nZVJlc3VsdChleGlz
dGluZ1tpXS0+dXJsLCBzcGFjZSwgcmVzdWx0LCBjcmVkZW50aWFsKTsKLQotICAgICAgICAgICAg
Ly8gQWZ0ZXIgY2FsbGluZyBub3RpZnlDaGFsbGVuZ2VSZXN1bHQoKSwgcGFnZSBjb3VsZCBiZSBk
ZXN0cm95ZWQgb3Igc29tZXRoaW5nLgotICAgICAgICAgICAgaWYgKCFkLT5wYWdlRXhpc3RzKHBh
Z2UpIHx8ICFwYWdlLT5pc1Zpc2libGUoKSkKLSAgICAgICAgICAgICAgICBwYWdlID0gMDsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChuZXh0KQotICAgICAgICBkLT5zdGFydEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKG5leHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNr
YmVycnkvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE2MTU5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlTWFuYWdlcl9oCi0jZGVmaW5lIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlcl9o
Ci0KLSNpbmNsdWRlICJCbGFja0JlcnJ5UGxhdGZvcm1TaW5nbGV0b24uaCIKLSNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+Ci0KLWNsYXNzIFBhZ2VDbGllbnRCbGFja0JlcnJ5OwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlclByaXZhdGU7
Ci1jbGFzcyBDcmVkZW50aWFsOwotY2xhc3MgVVJMOwotY2xhc3MgUHJvdGVjdGlvblNwYWNlOwot
Ci1lbnVtIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUmVzdWx0IHsKLSAgICBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVN1Y2Nlc3MsCi0gICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDYW5jZWxsZWQK
LX07Ci0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2xpZW50IHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q2hhbGxlbmdlUmVzdWx0KGNvbnN0IFVSTCYsIGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYsIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUmVzdWx0LCBjb25zdCBDcmVk
ZW50aWFsJikgPSAwOwotfTsKLQotY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2Vy
IDogcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUaHJlYWRVbnNhZmVTaW5nbGV0b248QXV0
aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyPiB7Ci0gICAgU0lOR0xFVE9OX0RFRklOSVRJT05f
VEhSRUFEVU5TQUZFKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlcikKLXB1YmxpYzoKLSAg
ICB2b2lkIHBhZ2VDcmVhdGVkKFBhZ2VDbGllbnRCbGFja0JlcnJ5Kik7Ci0gICAgdm9pZCBwYWdl
RGVsZXRlZChQYWdlQ2xpZW50QmxhY2tCZXJyeSopOwotICAgIHZvaWQgcGFnZVZpc2liaWxpdHlD
aGFuZ2VkKFBhZ2VDbGllbnRCbGFja0JlcnJ5KiwgYm9vbCB2aXNpYmxlKTsKLQotICAgIHZvaWQg
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgVVJMJiwgY29uc3QgUHJvdGVjdGlvblNwYWNl
JiwgY29uc3QgQ3JlZGVudGlhbCYsIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2xpZW50KiwgUGFn
ZUNsaWVudEJsYWNrQmVycnkqKTsKLSAgICB2b2lkIGNhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2xpZW50Kik7Ci0gICAgdm9pZCBub3RpZnlDaGFs
bGVuZ2VSZXN1bHQoY29uc3QgVVJMJiwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VSZXN1bHQsIGNvbnN0IENyZWRlbnRpYWwmKTsKLQotcHJpdmF0ZToKLSAg
ICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXIoKTsKLSAgICB+QXV0aGVudGljYXRpb25D
aGFsbGVuZ2VNYW5hZ2VyKCk7Ci0KLSAgICBPd25QdHI8QXV0aGVudGljYXRpb25DaGFsbGVuZ2VN
YW5hZ2VyUHJpdmF0ZT4gZDsKLX07Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUvQ29va2ll
RGF0YWJhc2VCYWNraW5nU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2JsYWNrYmVycnkvQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUvQ29va2llRGF0YWJh
c2VCYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlL0Nvb2tpZURhdGFi
YXNlQmFja2luZ1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NTQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBKdWxpZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHBsZXlv
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLSNkZWZpbmUgRU5BQkxFX0NPT0tJRV9ERUJVRyAw
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29raWVEYXRhYmFzZUJhY2tpbmdT
dG9yZS5oIgotCi0jaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJQYXJzZWRDb29raWUuaCIKLSNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQu
aCIKLSNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVO
QUJMRV9DT09LSUVfREVCVUcKLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KLSNk
ZWZpbmUgQ29va2llTG9nKGZvcm1hdCwgLi4uKSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nQWx3
YXlzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sIGZvcm1hdCwgIyMgX19WQV9B
UkdTX18pCi0jZWxzZQotI2RlZmluZSBDb29raWVMb2coZm9ybWF0LCAuLi4pCi0jZW5kaWYKLQot
I2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUV4ZWN1dGFibGVNZXNzYWdlLmg+Ci0jaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtTmF2aWdhdG9ySGFuZGxlci5oPgotCi11c2luZyBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6TWVzc2FnZUNsaWVudDsKLXVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpUeXBlZFJlcGx5QnVmZmVyOwotdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmNyZWF0ZU1l
dGhvZENhbGxNZXNzYWdlOwotCi1zdGF0aWMgY29uc3QgZG91YmxlIHNfZGF0YWJhc2VUaW1lcklu
dGVydmFsID0gMjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Db29raWVEYXRhYmFzZUJhY2tp
bmdTdG9yZTo6Q29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUoKQotICAgIDogTWVzc2FnZUNsaWVu
dChNZXNzYWdlQ2xpZW50OjpSZXBseUZlYXR1cmUgfCBNZXNzYWdlQ2xpZW50OjpTeW5jRmVhdHVy
ZSkKLSAgICAsIG1fdGFibGVOYW1lKCJjb29raWVzIikgLy8gVGhpcyBpcyBjaG9zZW4gdG8gbWF0
Y2ggTW96aWxsYSdzIHRhYmxlIG5hbWUuCi0gICAgLCBtX2RiVGltZXIodGhpcywgJkNvb2tpZURh
dGFiYXNlQmFja2luZ1N0b3JlOjpzZW5kQ2hhbmdlc1RvRGF0YWJhc2VUaW1lckZpcmVkKQotICAg
ICwgbV9pbnNlcnRTdGF0ZW1lbnQoMCkKLSAgICAsIG1fdXBkYXRlU3RhdGVtZW50KDApCi0gICAg
LCBtX2RlbGV0ZVN0YXRlbWVudCgwKQotewotICAgIG1fZGJUaW1lckNsaWVudCA9IG5ldyBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R2VuZXJpY1RpbWVyQ2xpZW50KHRoaXMpOwotICAgIG1fZGJUaW1l
ci5zZXRDbGllbnQobV9kYlRpbWVyQ2xpZW50KTsKLQotICAgIGNyZWF0ZVRocmVhZCgiY29va2ll
X2RhdGFiYXNlIiwgcHRocmVhZF9hdHRyX2RlZmF1bHQpOwotfQotCi1Db29raWVEYXRhYmFzZUJh
Y2tpbmdTdG9yZTo6fkNvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlKCkKLXsKLSAgICBkZWxldGVH
dWFyZGVkT2JqZWN0KG1fZGJUaW1lckNsaWVudCk7Ci0gICAgbV9kYlRpbWVyQ2xpZW50ID0gMDsK
LSAgICAvLyBGSVhNRTogVGhpcyBvYmplY3Qgd2lsbCBuZXZlciBiZSBkZWxldGVkIGR1ZSB0byB0
aGUgc2V0IHVwIG9mIENvb2tpZU1hbmFnZXIgKGl0J3MgYSBzaW5nbGV0b24pCi0gICAgQ29va2ll
TG9nKCJDb29raWVCYWNraW5nU3RvcmUgLSBEZXN0cnVjdGluZyIpOwotI2lmbmRlZiBOREVCVUcK
LSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7Ci0gICAgICAgIEFTU0VS
VChtX2NoYW5nZWRDb29raWVzLmlzRW1wdHkoKSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQg
Q29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6Om9uVGhyZWFkRmluaXNoZWQoKQotewotICAgIENv
b2tpZUxvZygiQ29va2llTWFuYWdlciAtIGZsdXNoaW5nIGNvb2tpZXMgdG8gYmFja2luZ1N0b3Jl
Li4uIik7Ci0gICAgLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSBzaHV0ZG93biwgc28gd2UgbmVlZCB0
byBiZSBzdXJlIHRoZSBPUyBkb2Vzbid0IGtpbGwgdXMgYmVmb3JlIHRoZSBkYiB3cml0ZSBmaW5p
c2hlcy4KLSAgICAvLyBPbmNlIHNob3VsZCBiZSBlbm91Z2ggc2luY2UgdGhpcyBleHRlbmRzIHRl
cmltaW5hdGlvbiBieSAyIHNlY29uZHMuCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5hdmln
YXRvckhhbmRsZXI6OnNlbmRFeHRlbmRUZXJtaW5hdGUoKTsKLSAgICBzZW5kQ2hhbmdlc1RvRGF0
YWJhc2VTeW5jaHJvbm91c2x5KCk7Ci0gICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gZmlu
aXNoZWQgZmx1c2hpbmcgY29va2llcyB0byBiYWNraW5nU3RvcmUuIik7Ci0KLSAgICBNZXNzYWdl
Q2xpZW50OjpvblRocmVhZEZpbmlzaGVkKCk7Ci19Ci0KLXZvaWQgQ29va2llRGF0YWJhc2VCYWNr
aW5nU3RvcmU6Om9wZW4oY29uc3QgU3RyaW5nJiBjb29raWVKYXIpCi17Ci0gICAgZGlzcGF0Y2hN
ZXNzYWdlKGNyZWF0ZU1ldGhvZENhbGxNZXNzYWdlKCZDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9y
ZTo6aW52b2tlT3BlbiwgdGhpcywgY29va2llSmFyKSk7Ci19Ci0KLXZvaWQgQ29va2llRGF0YWJh
c2VCYWNraW5nU3RvcmU6Omludm9rZU9wZW4oY29uc3QgU3RyaW5nJiBjb29raWVKYXIpCi17Ci0g
ICAgQVNTRVJUKGlzQ3VycmVudFRocmVhZCgpKTsKLSAgICBpZiAobV9kYi5pc09wZW4oKSkKLSAg
ICAgICAgY2xvc2UoKTsKLQotICAgIGlmICghbV9kYi5vcGVuKGNvb2tpZUphcikpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qgb3BlbiB0aGUgY29va2llIGRhdGFiYXNlLiBObyBjb29r
aWUgd2lsbCBiZSBzdG9yZWQhIik7Ci0gICAgICAgIExPR19FUlJPUigiU1FMaXRlIEVycm9yIE1l
c3NhZ2U6ICVzIiwgbV9kYi5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJQUkFHTUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lW
RTsiKTsKLSAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJQUkFHTUEgam91cm5hbF9tb2RlPVdBTDsi
KTsKLQotICAgIGNvbnN0IFN0cmluZyBwcmltYXJ5S2V5RmllbGRzKCJQUklNQVJZIEtFWSAocHJv
dG9jb2wsIGhvc3QsIHBhdGgsIG5hbWUpIik7Ci0gICAgY29uc3QgU3RyaW5nIGRhdGFiYXNlRmll
bGRzKCJuYW1lIFRFWFQsIHZhbHVlIFRFWFQsIGhvc3QgVEVYVCwgcGF0aCBURVhULCBleHBpcnkg
RE9VQkxFLCBsYXN0QWNjZXNzZWQgRE9VQkxFLCBpc1NlY3VyZSBJTlRFR0VSLCBpc0h0dHBPbmx5
IElOVEVHRVIsIGNyZWF0aW9uVGltZSBET1VCTEUsIHByb3RvY29sIFRFWFQiKTsKLQotICAgIFN0
cmluZ0J1aWxkZXIgY3JlYXRlVGFibGVRdWVyeTsKLSAgICBjcmVhdGVUYWJsZVF1ZXJ5LmFwcGVu
ZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgIik7Ci0gICAgY3JlYXRlVGFibGVRdWVyeS5h
cHBlbmQobV90YWJsZU5hbWUpOwotICAgIC8vIFRoaXMgdGFibGUgc2NoZW1hIGlzIGNvbXBsaWFu
dCB3aXRoIE1vemlsbGEncy4KLSAgICBjcmVhdGVUYWJsZVF1ZXJ5LmFwcGVuZCgiICgiICsgZGF0
YWJhc2VGaWVsZHMgKyAiLCAiICsgcHJpbWFyeUtleUZpZWxkcysiKTsiKTsKLQotICAgIG1fZGIu
c2V0QnVzeVRpbWVvdXQoMTAwMCk7Ci0KLSAgICBpZiAoIW1fZGIuZXhlY3V0ZUNvbW1hbmQoY3Jl
YXRlVGFibGVRdWVyeS50b1N0cmluZygpKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBjcmVhdGUgdGhlIHRhYmxlIHRvIHN0b3JlIHRoZSBjb29raWVzIGludG8uIE5vIGNvb2tpZSB3
aWxsIGJlIHN0b3JlZCEiKTsKLSAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgRXJyb3IgTWVzc2Fn
ZTogJXMiLCBtX2RiLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgY2xvc2UoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFN0cmluZ0J1aWxkZXIgaW5zZXJ0UXVlcnk7Ci0gICAgaW5z
ZXJ0UXVlcnkuYXBwZW5kKCJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPICIpOwotICAgIGluc2VydFF1
ZXJ5LmFwcGVuZChtX3RhYmxlTmFtZSk7Ci0gICAgaW5zZXJ0UXVlcnkuYXBwZW5kKCIgKG5hbWUs
IHZhbHVlLCBob3N0LCBwYXRoLCBleHBpcnksIGxhc3RBY2Nlc3NlZCwgaXNTZWN1cmUsIGlzSHR0
cE9ubHksIGNyZWF0aW9uVGltZSwgcHJvdG9jb2wpIFZBTFVFUyAoPzEsID8yLCA/MywgPzQsID81
LCA/NiwgPzcsID84LCA/OSwgPzEwKTsiKTsKLQotICAgIG1faW5zZXJ0U3RhdGVtZW50ID0gbmV3
IFNRTGl0ZVN0YXRlbWVudChtX2RiLCBpbnNlcnRRdWVyeS50b1N0cmluZygpKTsKLSAgICBpZiAo
bV9pbnNlcnRTdGF0ZW1lbnQtPnByZXBhcmUoKSkgewotICAgICAgICBMT0dfRVJST1IoIkNhbm5v
dCBzYXZlIGNvb2tpZXMiKTsKLSAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgRXJyb3IgTWVzc2Fn
ZTogJXMiLCBtX2RiLmxhc3RFcnJvck1zZygpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmdCdWlsZGVy
IHVwZGF0ZVF1ZXJ5OwotICAgIHVwZGF0ZVF1ZXJ5LmFwcGVuZCgiVVBEQVRFICIpOwotICAgIHVw
ZGF0ZVF1ZXJ5LmFwcGVuZChtX3RhYmxlTmFtZSk7Ci0gICAgLy8gVGhlIHdoZXJlIHN0YXRlbWVu
dCBpcyBjaG9zZW4gdG8gbWF0Y2ggQ29va2llTWFwIGtleS4KLSAgICB1cGRhdGVRdWVyeS5hcHBl
bmQoIiBTRVQgbmFtZSA9ID8xLCB2YWx1ZSA9ID8yLCBob3N0ID0gPzMsIHBhdGggPSA/NCwgZXhw
aXJ5ID0gPzUsIGxhc3RBY2Nlc3NlZCA9ID82LCBpc1NlY3VyZSA9ID83LCBpc0h0dHBPbmx5ID0g
PzgsIGNyZWF0aW9uVGltZSA9ID85LCBwcm90b2NvbCA9ID8xMCB3aGVyZSBuYW1lID0gPzEgYW5k
IGhvc3QgPSA/MyBhbmQgcGF0aCA9ID80OyIpOwotICAgIG1fdXBkYXRlU3RhdGVtZW50ID0gbmV3
IFNRTGl0ZVN0YXRlbWVudChtX2RiLCB1cGRhdGVRdWVyeS50b1N0cmluZygpKTsKLQotICAgIGlm
IChtX3VwZGF0ZVN0YXRlbWVudC0+cHJlcGFyZSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ2Fu
bm90IHVwZGF0ZSBjb29raWVzIik7Ci0gICAgICAgIExPR19FUlJPUigiU1FMaXRlIEVycm9yIE1l
c3NhZ2U6ICVzIiwgbV9kYi5sYXN0RXJyb3JNc2coKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nQnVp
bGRlciBkZWxldGVRdWVyeTsKLSAgICBkZWxldGVRdWVyeS5hcHBlbmQoIkRFTEVURSBGUk9NICIp
OwotICAgIGRlbGV0ZVF1ZXJ5LmFwcGVuZChtX3RhYmxlTmFtZSk7Ci0gICAgLy8gVGhlIHdoZXJl
IHN0YXRlbWVudCBpcyBjaG9zZW4gdG8gbWF0Y2ggQ29va2llTWFwIGtleS4KLSAgICBkZWxldGVR
dWVyeS5hcHBlbmQoIiBXSEVSRSBuYW1lPT8xIGFuZCBob3N0PT8yIGFuZCBwYXRoPT8zIGFuZCBw
cm90b2NvbD0/NDsiKTsKLSAgICBtX2RlbGV0ZVN0YXRlbWVudCA9IG5ldyBTUUxpdGVTdGF0ZW1l
bnQobV9kYiwgZGVsZXRlUXVlcnkudG9TdHJpbmcoKSk7Ci0KLSAgICBpZiAobV9kZWxldGVTdGF0
ZW1lbnQtPnByZXBhcmUoKSkgewotICAgICAgICBMT0dfRVJST1IoIkNhbm5vdCBkZWxldGUgY29v
a2llcyIpOwotICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBFcnJvciBNZXNzYWdlOiAlcyIsIG1f
ZGIubGFzdEVycm9yTXNnKCkpOwotICAgIH0KLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjp3
ZWJLaXRUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmRpc3BhdGNoTWVzc2FnZShjcmVhdGVNZXRob2RD
YWxsTWVzc2FnZSgmQ29va2llTWFuYWdlcjo6Z2V0QmFja2luZ1N0b3JlQ29va2llcywgJmNvb2tp
ZU1hbmFnZXIoKSkpOwotfQotCi12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpjbG9z
ZSgpCi17Ci0gICAgQVNTRVJUKGlzQ3VycmVudFRocmVhZCgpKTsKLSAgICBDb29raWVMb2coIkNv
b2tpZUJhY2tpbmdTdG9yZSAtIENsb3NpbmciKTsKLQotICAgIHNpemVfdCBjaGFuZ2VkQ29va2ll
c1NpemU7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgICAg
ICBpZiAobV9kYlRpbWVyLnN0YXJ0ZWQoKSkKLSAgICAgICAgICAgIG1fZGJUaW1lci5zdG9wKCk7
Ci0gICAgICAgIGNoYW5nZWRDb29raWVzU2l6ZSA9IG1fY2hhbmdlZENvb2tpZXMuc2l6ZSgpOwot
ICAgIH0KLQotICAgIGlmIChjaGFuZ2VkQ29va2llc1NpemUgPiAwKQotICAgICAgICBpbnZva2VT
ZW5kQ2hhbmdlc1RvRGF0YWJhc2UoKTsKLQotICAgIGRlbGV0ZSBtX2luc2VydFN0YXRlbWVudDsK
LSAgICBtX2luc2VydFN0YXRlbWVudCA9IDA7Ci0gICAgZGVsZXRlIG1fdXBkYXRlU3RhdGVtZW50
OwotICAgIG1fdXBkYXRlU3RhdGVtZW50ID0gMDsKLSAgICBkZWxldGUgbV9kZWxldGVTdGF0ZW1l
bnQ7Ci0gICAgbV9kZWxldGVTdGF0ZW1lbnQgPSAwOwotCi0gICAgaWYgKG1fZGIuaXNPcGVuKCkp
Ci0gICAgICAgIG1fZGIuY2xvc2UoKTsKLX0KLQotdm9pZCBDb29raWVEYXRhYmFzZUJhY2tpbmdT
dG9yZTo6aW5zZXJ0KGNvbnN0IFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiBjb29raWUpCi17Ci0g
ICAgQ29va2llTG9nKCJDb29raWVCYWNraW5nU3RvcmUgLSBhZGRpbmcgaW5zZXJ0aW5nIGNvb2tp
ZSAlcyB0byBxdWV1ZS4iLCBjb29raWUtPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAg
YWRkVG9DaGFuZ2VRdWV1ZShjb29raWUsIEluc2VydCk7Ci19Ci0KLXZvaWQgQ29va2llRGF0YWJh
c2VCYWNraW5nU3RvcmU6OnVwZGF0ZShjb25zdCBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gY29v
a2llKQotewotICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0gYWRkaW5nIHVwZGF0
aW5nIGNvb2tpZSAlcyB0byBxdWV1ZS4iLCBjb29raWUtPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgYWRkVG9DaGFuZ2VRdWV1ZShjb29raWUsIFVwZGF0ZSk7Ci19Ci0KLXZvaWQgQ29v
a2llRGF0YWJhc2VCYWNraW5nU3RvcmU6OnJlbW92ZShjb25zdCBQYXNzUmVmUHRyPFBhcnNlZENv
b2tpZT4gY29va2llKQotewotICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0gYWRk
aW5nIGRlbGV0aW5nIGNvb2tpZSAlcyB0byBxdWV1ZS4iLCBjb29raWUtPnRvU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgYWRkVG9DaGFuZ2VRdWV1ZShjb29raWUsIERlbGV0ZSk7Ci19Ci0K
LXZvaWQgQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6OnJlbW92ZUFsbCgpCi17Ci0gICAgZGlz
cGF0Y2hNZXNzYWdlKGNyZWF0ZU1ldGhvZENhbGxNZXNzYWdlKCZDb29raWVEYXRhYmFzZUJhY2tp
bmdTdG9yZTo6aW52b2tlUmVtb3ZlQWxsLCB0aGlzKSk7Ci19Ci0KLXZvaWQgQ29va2llRGF0YWJh
c2VCYWNraW5nU3RvcmU6Omludm9rZVJlbW92ZUFsbCgpCi17Ci0gICAgQVNTRVJUKGlzQ3VycmVu
dFRocmVhZCgpKTsKLSAgICBpZiAoIW1fZGIuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0gcmVtb3ZlIEFsbCBjb29raWVzIGZy
b20gYmFja2luZ3N0b3JlIik7Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9t
dXRleCk7Ci0gICAgICAgIG1fY2hhbmdlZENvb2tpZXMuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBT
dHJpbmdCdWlsZGVyIGRlbGV0ZVF1ZXJ5OwotICAgIGRlbGV0ZVF1ZXJ5LmFwcGVuZCgiREVMRVRF
IEZST00gIik7Ci0gICAgZGVsZXRlUXVlcnkuYXBwZW5kKG1fdGFibGVOYW1lKTsKLSAgICBkZWxl
dGVRdWVyeS5hcHBlbmQoIjsiKTsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1l
bnQobV9kYiwgZGVsZXRlUXVlcnkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKGRlbGV0ZVN0YXRlbWVu
dC5wcmVwYXJlKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHJlcGFyZSBERUxF
VEUgKiBzdGF0ZW1lbnQiKTsKLSAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgRXJyb3IgTWVzc2Fn
ZTogJXMiLCBtX2RiLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghZGVsZXRlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJDYW5ub3QgZGVsZXRlIGNvb2tpZSBmcm9tIGRhdGFiYXNlIik7Ci0gICAgICAgIExP
R19FUlJPUigiU1FMaXRlIEVycm9yIE1lc3NhZ2U6ICVzIiwgbV9kYi5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgQ29va2llRGF0YWJhc2VCYWNraW5n
U3RvcmU6OmdldENvb2tpZXNGcm9tRGF0YWJhc2UoVmVjdG9yPFJlZlB0cjxQYXJzZWRDb29raWU+
ID4mIHN0YWNrT2ZDb29raWVzLCB1bnNpZ25lZCBsaW1pdCkKLXsKLSAgICAvLyBJdCBpcyBub3Qg
YSBodWdlIHBlcmZvcm1hbmNlIGhpdCB0byB3YWl0IG9uIHRoZSByZXBseSBoZXJlIGJlY2F1c2Ug
dGhpcyBpcyBvbmx5IGRvbmUgb25jZSBkdXJpbmcgc2V0dXAgYW5kIHdoZW4gdHVybmluZyBvZmYg
cHJpdmF0ZSBtb2RlLgotICAgIFR5cGVkUmVwbHlCdWZmZXI8IFZlY3RvcjxSZWZQdHI8UGFyc2Vk
Q29va2llPiA+KiA+IHJlcGx5QnVmZmVyKDApOwotICAgIGRpc3BhdGNoTWVzc2FnZShjcmVhdGVN
ZXRob2RDYWxsTWVzc2FnZVdpdGhSZXR1cm4oJkNvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpp
bnZva2VHZXRDb29raWVzV2l0aExpbWl0LCAmcmVwbHlCdWZmZXIsIHRoaXMsIGxpbWl0KSk7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxQYXJzZWRDb29raWU+ID4qIGNvb2tpZXMgPSByZXBseUJ1ZmZlci5w
b2ludGVyKCk7Ci0gICAgaWYgKGNvb2tpZXMpCi0gICAgICAgIHN0YWNrT2ZDb29raWVzLnN3YXAo
KmNvb2tpZXMpOwotICAgIGRlbGV0ZSBjb29raWVzOwotfQotCi1WZWN0b3I8UmVmUHRyPFBhcnNl
ZENvb2tpZT4gPiogQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6Omludm9rZUdldENvb2tpZXNX
aXRoTGltaXQodW5zaWduZWQgbGltaXQpCi17Ci0gICAgQVNTRVJUKGlzQ3VycmVudFRocmVhZCgp
KTsKLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIHRhYmxlIGV4aXN0cyB0byBhdm9pZCBkb2luZyBh
biB1bm5lY2Vzc2FyeSByZXF1ZXN0LgotICAgIGlmICghbV9kYi5pc09wZW4oKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHNlbGVjdFF1ZXJ5OwotICAgIHNlbGVjdFF1
ZXJ5LmFwcGVuZCgiU0VMRUNUIG5hbWUsIHZhbHVlLCBob3N0LCBwYXRoLCBleHBpcnksIGxhc3RB
Y2Nlc3NlZCwgaXNTZWN1cmUsIGlzSHR0cE9ubHksIGNyZWF0aW9uVGltZSwgcHJvdG9jb2wgRlJP
TSAiKTsKLSAgICBzZWxlY3RRdWVyeS5hcHBlbmQobV90YWJsZU5hbWUpOwotICAgIGlmIChsaW1p
dCA+IDApIHsKLSAgICAgICAgc2VsZWN0UXVlcnkuYXBwZW5kKCIgT1JERVIgQlkgbGFzdEFjY2Vz
c2VkIEFTQyIpOwotICAgICAgICBzZWxlY3RRdWVyeS5hcHBlbmQoIiBMSU1JVCAiICsgU3RyaW5n
OjpudW1iZXIobGltaXQpKTsKLSAgICB9Ci0gICAgc2VsZWN0UXVlcnkuYXBwZW5kKCI7Iik7Ci0K
LSAgICBDb29raWVMb2coIkNvb2tpZUJhY2tpbmdTdG9yZSAtIGludm9rZUdldEFsbENvb2tpZXMg
d2l0aCBzZWxlY3QgcXVlcnkgJXMiLCBzZWxlY3RRdWVyeS50b1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFN0YXRlbWVudChtX2RiLCBzZWxlY3RR
dWVyeS50b1N0cmluZygpKTsKLQotICAgIGlmIChzZWxlY3RTdGF0ZW1lbnQucHJlcGFyZSgpKSB7
Ci0gICAgICAgIExPR19FUlJPUigiQ2Fubm90IHJldHJpZXZlZCBjb29raWVzIGZyb20gdGhlIGRh
dGFiYXNlIik7Ci0gICAgICAgIExPR19FUlJPUigiU1FMaXRlIEVycm9yIE1lc3NhZ2U6ICVzIiwg
bV9kYi5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFZl
Y3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+KiBjb29raWVzID0gbmV3IFZlY3RvcjxSZWZQdHI8
UGFyc2VkQ29va2llPiA+OwotICAgIHdoaWxlIChzZWxlY3RTdGF0ZW1lbnQuc3RlcCgpID09IFNR
TFJlc3VsdFJvdykgewotICAgICAgICAvLyBUaGVyZSBpcyBhIHJvdyB0byBmZXRjaAotCi0gICAg
ICAgIFN0cmluZyBuYW1lID0gc2VsZWN0U3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7Ci0gICAg
ICAgIFN0cmluZyB2YWx1ZSA9IHNlbGVjdFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOwotICAg
ICAgICBTdHJpbmcgZG9tYWluID0gc2VsZWN0U3RhdGVtZW50LmdldENvbHVtblRleHQoMik7Ci0g
ICAgICAgIFN0cmluZyBwYXRoID0gc2VsZWN0U3RhdGVtZW50LmdldENvbHVtblRleHQoMyk7Ci0g
ICAgICAgIGRvdWJsZSBleHBpcnkgPSBzZWxlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDQp
OwotICAgICAgICBkb3VibGUgbGFzdEFjY2Vzc2VkID0gc2VsZWN0U3RhdGVtZW50LmdldENvbHVt
bkRvdWJsZSg1KTsKLSAgICAgICAgYm9vbCBpc1NlY3VyZSA9IHNlbGVjdFN0YXRlbWVudC5nZXRD
b2x1bW5JbnQoNik7Ci0gICAgICAgIGJvb2wgaXNIdHRwT25seSA9IHNlbGVjdFN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoNyk7Ci0gICAgICAgIGRvdWJsZSBjcmVhdGlvblRpbWUgPSBzZWxlY3RTdGF0
ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDgpOwotICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSBzZWxl
Y3RTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCg5KTsKLQotICAgICAgICBjb29raWVzLT5hcHBlbmQo
UGFyc2VkQ29va2llOjpjcmVhdGUobmFtZSwgdmFsdWUsIGRvbWFpbiwgcHJvdG9jb2wsIHBhdGgs
IGV4cGlyeSwgbGFzdEFjY2Vzc2VkLCBjcmVhdGlvblRpbWUsIGlzU2VjdXJlLCBpc0h0dHBPbmx5
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvb2tpZXM7Ci19Ci0KLXZvaWQgQ29va2llRGF0YWJh
c2VCYWNraW5nU3RvcmU6Om9wZW5BbmRMb2FkRGF0YWJhc2VTeW5jaHJvbm91c2x5KGNvbnN0IFN0
cmluZyYgY29va2llSmFyKQotewotICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0g
bG9hZGluZyBkYXRhYmFzZSBpbnRvIENvb2tpZU1hbmFnZXIgaW1tZWRpYXRlbHkiKTsKLQotICAg
IGlmIChtX2RiLmlzT3BlbigpKSB7Ci0gICAgICAgIGlmIChpc0N1cnJlbnRUaHJlYWQoKSkKLSAg
ICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjp3ZWJLaXRUaHJlYWRNZXNzYWdlQ2xpZW50
KCktPmRpc3BhdGNoU3luY01lc3NhZ2UoY3JlYXRlTWV0aG9kQ2FsbE1lc3NhZ2UoJkNvb2tpZU1h
bmFnZXI6OmdldEJhY2tpbmdTdG9yZUNvb2tpZXMsICZjb29raWVNYW5hZ2VyKCkpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY29va2llTWFuYWdlcigpLmdldEJhY2tpbmdTdG9yZUNvb2tp
ZXMoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoaXNDdXJyZW50VGhyZWFkKCkpCi0gICAg
ICAgICAgICBpbnZva2VPcGVuKGNvb2tpZUphcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGRpc3BhdGNoU3luY01lc3NhZ2UoY3JlYXRlTWV0aG9kQ2FsbE1lc3NhZ2UoJkNvb2tpZURhdGFi
YXNlQmFja2luZ1N0b3JlOjppbnZva2VPcGVuLCB0aGlzLCBjb29raWVKYXIpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6OnNlbmRDaGFuZ2VzVG9EYXRhYmFz
ZVN5bmNocm9ub3VzbHkoKQotewotICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0g
c2VuZGluZyB0byBkYXRhYmFzZSBpbW1lZGlhdGVseSIpOwotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9jayhtX211dGV4KTsKLSAgICAgICAgaWYgKG1fZGJUaW1lci5zdGFydGVkKCkpCi0g
ICAgICAgICAgICBtX2RiVGltZXIuc3RvcCgpOwotICAgIH0KLSAgICBpZiAoaXNDdXJyZW50VGhy
ZWFkKCkpCi0gICAgICAgIGludm9rZVNlbmRDaGFuZ2VzVG9EYXRhYmFzZSgpOwotICAgIGVsc2UK
LSAgICAgICAgZGlzcGF0Y2hTeW5jTWVzc2FnZShjcmVhdGVNZXRob2RDYWxsTWVzc2FnZSgmQ29v
a2llRGF0YWJhc2VCYWNraW5nU3RvcmU6Omludm9rZVNlbmRDaGFuZ2VzVG9EYXRhYmFzZSwgdGhp
cykpOwotfQotCi12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpzZW5kQ2hhbmdlc1Rv
RGF0YWJhc2UoaW50IG5leHRJbnRlcnZhbCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0
ZXgpOwotICAgIGlmICghbV9kYlRpbWVyLnN0YXJ0ZWQoKSkgewotICAgICAgICBDb29raWVMb2co
IkNvb2tpZUJhY2tpbmdTdG9yZSAtIFN0YXJ0aW5nIG9uZSBzaG90IHNlbmQgdG8gZGF0YWJhc2Ui
KTsKLSAgICAgICAgbV9kYlRpbWVyLnN0YXJ0KG5leHRJbnRlcnZhbCk7Ci0gICAgfSBlbHNlIHsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0g
VGltZXIgYWxyZWFkeSBydW5uaW5nLCBza2lwcGluZyB0aGlzIHJlcXVlc3QiKTsKLSNlbmRpZgot
ICAgIH0KLX0KLQotdm9pZCBDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZTo6c2VuZENoYW5nZXNU
b0RhdGFiYXNlVGltZXJGaXJlZCgpCi17Ci0gICAgZGlzcGF0Y2hNZXNzYWdlKGNyZWF0ZU1ldGhv
ZENhbGxNZXNzYWdlKCZDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZTo6aW52b2tlU2VuZENoYW5n
ZXNUb0RhdGFiYXNlLCB0aGlzKSk7Ci19Ci0KLXZvaWQgQ29va2llRGF0YWJhc2VCYWNraW5nU3Rv
cmU6Omludm9rZVNlbmRDaGFuZ2VzVG9EYXRhYmFzZSgpCi17Ci0gICAgQVNTRVJUKGlzQ3VycmVu
dFRocmVhZCgpKTsKLQotICAgIGlmICghbV9kYi5pc09wZW4oKSkgewotICAgICAgICBMT0dfRVJS
T1IoIlRpbWVyIEZpcmVkLCBidXQgZGF0YWJhc2UgaXMgY2xvc2VkLiIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPENvb2tpZUFjdGlvbj4gY2hhbmdlZENvb2tpZXM7Ci0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgICAgICBjaGFuZ2Vk
Q29va2llcy5zd2FwKG1fY2hhbmdlZENvb2tpZXMpOwotICAgICAgICBBU1NFUlQobV9jaGFuZ2Vk
Q29va2llcy5pc0VtcHR5KCkpOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VkQ29va2llcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgQ29va2llTG9nKCJDb29raWVCYWNraW5nU3RvcmUgLSBUaW1lciBm
aXJlZCwgYnV0IG5vIGNvb2tpZXMgaW4gY2hhbmdlbGlzdCIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0gVGltZXIgZmlyZWQsIHNl
bmRpbmcgY2hhbmdlcyB0byBkYXRhYmFzZS4gV2UgaGF2ZSAlZCBjaGFuZ2VzIiwgY2hhbmdlZENv
b2tpZXMuc2l6ZSgpKTsKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RiLCBm
YWxzZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKLQotICAgIC8vIEl0ZXJhdGUgdGhyb3Vn
aCBldmVyeSBlbGVtZW50IGluIHRoZSBjaGFuZ2UgbGlzdCB0byBtYWtlIGNhbGxzCi0gICAgLy8g
SWYgZXJyb3Igb2NjdXJzLCBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHN0YXRl
bWVudAotICAgIHNpemVfdCBzaXplT2ZDaGFuZ2UgPSBjaGFuZ2VkQ29va2llcy5zaXplKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplT2ZDaGFuZ2U7IGkrKykgewotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQqIG1fc3RhdGVtZW50OwotICAgICAgICBjb25zdCBSZWZQdHI8UGFyc2Vk
Q29va2llPiBjb29raWUgPSBjaGFuZ2VkQ29va2llc1tpXS5maXJzdDsKLSAgICAgICAgVXBkYXRl
UGFyYW1ldGVyIGFjdGlvbiA9IGNoYW5nZWRDb29raWVzW2ldLnNlY29uZDsKLQotICAgICAgICBp
ZiAoYWN0aW9uID09IERlbGV0ZSkgewotICAgICAgICAgICAgbV9zdGF0ZW1lbnQgPSBtX2RlbGV0
ZVN0YXRlbWVudDsKLSAgICAgICAgICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0g
ZGVsZXRpbmcgY29va2llICVzLiIsIGNvb2tpZS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
Ci0gICAgICAgICAgICAvLyBCaW5kcyBhbGwgdGhlIHZhbHVlcwotICAgICAgICAgICAgaWYgKG1f
c3RhdGVtZW50LT5iaW5kVGV4dCgxLCBjb29raWUtPm5hbWUoKSkgfHwgbV9zdGF0ZW1lbnQtPmJp
bmRUZXh0KDIsIGNvb2tpZS0+ZG9tYWluKCkpCi0gICAgICAgICAgICAgICAgfHwgbV9zdGF0ZW1l
bnQtPmJpbmRUZXh0KDMsIGNvb2tpZS0+cGF0aCgpKSB8fCBtX3N0YXRlbWVudC0+YmluZFRleHQo
NCwgY29va2llLT5wcm90b2NvbCgpKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ2Fu
bm90IGJpbmQgY29va2llIGRhdGEgdG8gZGVsZXRlIik7Ci0gICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJTUUxpdGUgRXJyb3IgTWVzc2FnZTogJXMiLCBtX2RiLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChh
Y3Rpb24gPT0gVXBkYXRlKSB7Ci0gICAgICAgICAgICAgICAgQ29va2llTG9nKCJDb29raWVCYWNr
aW5nU3RvcmUgLSB1cGRhdGluZyBjb29raWUgJXMuIiwgY29va2llLT50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIG1fc3RhdGVtZW50ID0gbV91cGRhdGVTdGF0ZW1l
bnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENvb2tpZUxvZygiQ29v
a2llQmFja2luZ1N0b3JlIC0gaW5zZXJ0aW5nIGNvb2tpZSAlcy4iLCBjb29raWUtPnRvU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZW1lbnQgPSBtX2luc2Vy
dFN0YXRlbWVudDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQmluZHMgYWxsIHRo
ZSB2YWx1ZXMKLSAgICAgICAgICAgIGlmIChtX3N0YXRlbWVudC0+YmluZFRleHQoMSwgY29va2ll
LT5uYW1lKCkpIHx8IG1fc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBjb29raWUtPnZhbHVlKCkpCi0g
ICAgICAgICAgICAgICAgfHwgbV9zdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGNvb2tpZS0+ZG9tYWlu
KCkpIHx8IG1fc3RhdGVtZW50LT5iaW5kVGV4dCg0LCBjb29raWUtPnBhdGgoKSkKLSAgICAgICAg
ICAgICAgICB8fCBtX3N0YXRlbWVudC0+YmluZERvdWJsZSg1LCBjb29raWUtPmV4cGlyeSgpKSB8
fCBtX3N0YXRlbWVudC0+YmluZERvdWJsZSg2LCBjb29raWUtPmxhc3RBY2Nlc3NlZCgpKQotICAg
ICAgICAgICAgICAgIHx8IG1fc3RhdGVtZW50LT5iaW5kSW50NjQoNywgY29va2llLT5pc1NlY3Vy
ZSgpKSB8fCBtX3N0YXRlbWVudC0+YmluZEludDY0KDgsIGNvb2tpZS0+aXNIdHRwT25seSgpKQot
ICAgICAgICAgICAgICAgIHx8IG1fc3RhdGVtZW50LT5iaW5kRG91YmxlKDksIGNvb2tpZS0+Y3Jl
YXRpb25UaW1lKCkpIHx8IG1fc3RhdGVtZW50LT5iaW5kVGV4dCgxMCwgY29va2llLT5wcm90b2Nv
bCgpKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ2Fubm90IGJpbmQgY29va2llIGRh
dGEgdG8gc2F2ZSIpOwotICAgICAgICAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIEVycm9yIE1l
c3NhZ2U6ICVzIiwgbV9kYi5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgcmMgPSBtX3N0YXRlbWVudC0+c3RlcCgpOwotICAg
ICAgICBtX3N0YXRlbWVudC0+cmVzZXQoKTsKLSAgICAgICAgaWYgKHJjICE9IFNRTFJlc3VsdE9r
ICYmIHJjICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ2Fubm90
IG1ha2UgY2FsbCB0byB0aGUgZGF0YWJhc2UiKTsKLSAgICAgICAgICAgIExPR19FUlJPUigiU1FM
aXRlIEVycm9yIE1lc3NhZ2U6ICVzIiwgbV9kYi5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgfQotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwotICAgIENvb2tpZUxvZygiQ29va2ll
QmFja2luZ1N0b3JlIC0gdHJhbnNhY3Rpb24gY29tcGxldGUiKTsKLX0KLQotdm9pZCBDb29raWVE
YXRhYmFzZUJhY2tpbmdTdG9yZTo6YWRkVG9DaGFuZ2VRdWV1ZShjb25zdCBQYXNzUmVmUHRyPFBh
cnNlZENvb2tpZT4gY2hhbmdlZENvb2tpZSwgVXBkYXRlUGFyYW1ldGVyIGFjdGlvblBhcmFtKQot
ewotICAgIEFTU0VSVCghY2hhbmdlZENvb2tpZS0+aXNTZXNzaW9uKCkpOwotICAgIENvb2tpZUFj
dGlvbiBhY3Rpb24oY2hhbmdlZENvb2tpZSwgYWN0aW9uUGFyYW0pOwotICAgIHsKLSAgICAgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKLSAgICAgICAgbV9jaGFuZ2VkQ29va2llcy5hcHBl
bmQoYWN0aW9uKTsKLSAgICAgICAgQ29va2llTG9nKCJDb29raWVCYWNraW5nU3RvcmUgLSBtX2No
YW5nZWRjb29raWVzIGhhcyAlZC4iLCBtX2NoYW5nZWRDb29raWVzLnNpemUoKSk7Ci0gICAgfQot
ICAgIHNlbmRDaGFuZ2VzVG9EYXRhYmFzZShzX2RhdGFiYXNlVGltZXJJbnRlcnZhbCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Js
YWNrYmVycnkvQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUvQ29va2llRGF0YWJhc2VCYWNraW5n
U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5
L0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlL0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlLmgJ
KHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkv
Q29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUvQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBKdWxpZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHBsZXlvLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmVfaAotI2RlZmluZSBDb29raWVE
YXRhYmFzZUJhY2tpbmdTdG9yZV9oCi0KLSNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotI2lu
Y2x1ZGUgIlRpbWVyLmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1NZXNzYWdlQ2xp
ZW50Lmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtVGltZXIuaD4KLSNpbmNsdWRlIDxH
ZW5lcmljVGltZXJDbGllbnQuaD4KLSNpbmNsdWRlIDxUaHJlYWRUaW1lckNsaWVudC5oPgotI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQYXJzZWRDb29raWU7
Ci0KLWNsYXNzIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlIDogcHVibGljIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpNZXNzYWdlQ2xpZW50ICwgcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpU
aHJlYWRUaW1lckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIENvb2tpZURhdGFiYXNlQmFj
a2luZ1N0b3JlKiBjcmVhdGUoKSB7IHJldHVybiBuZXcgQ29va2llRGF0YWJhc2VCYWNraW5nU3Rv
cmU7IH0KLQotICAgIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIGNvb2tpZUphcik7Ci0KLSAgICB2
b2lkIGluc2VydChjb25zdCBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4pOwotICAgIHZvaWQgdXBk
YXRlKGNvbnN0IFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPik7Ci0gICAgdm9pZCByZW1vdmUoY29u
c3QgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+KTsKLQotICAgIHZvaWQgcmVtb3ZlQWxsKCk7Ci0K
LSAgICAvLyBJZiBhIGxpbWl0IGlzIG5vdCBzZXQsIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYWxs
IGNvb2tpZXMgaW4gdGhlIGRhdGFiYXNlCi0gICAgdm9pZCBnZXRDb29raWVzRnJvbURhdGFiYXNl
KFZlY3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+JiBzdGFja09mQ29va2llcywgdW5zaWduZWQg
bGltaXQgPSAwKTsKLQotICAgIHZvaWQgb3BlbkFuZExvYWREYXRhYmFzZVN5bmNocm9ub3VzbHko
Y29uc3QgU3RyaW5nJiBjb29raWVKYXIpOwotICAgIHZvaWQgc2VuZENoYW5nZXNUb0RhdGFiYXNl
U3luY2hyb25vdXNseSgpOwotCi0gICAgLy8gTWVzc2FnZUNsaWVudCBtZXRob2RzCi0gICAgdmly
dHVhbCB2b2lkIG9uVGhyZWFkRmluaXNoZWQoKTsKLQotICAgIC8vIFRocmVhZFRpbWVyQ2xpZW50
IG1ldGhvZHMKLSAgICB2aXJ0dWFsIGJvb2wgd2lsbEZpcmVUaW1lcigpIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIGludCBnZXRQdWxzZUNvZGUoKSBjb25zdCB7IHJldHVybiBwdWxzZUNv
ZGUoKTsgfQotICAgIHZpcnR1YWwgaW50IGdldENvbm5lY3Rpb25JZCgpIGNvbnN0IHsgcmV0dXJu
IGNvbm5lY3Rpb25JZCgpOyB9Ci0gICAgdmlydHVhbCBpbnQgZGVmYXVsdFRpbWVyUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiB0aHJlYWRQcmlvcml0eSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgZW51
bSBVcGRhdGVQYXJhbWV0ZXIgewotICAgICAgICBJbnNlcnQsCi0gICAgICAgIFVwZGF0ZSwKLSAg
ICAgICAgRGVsZXRlLAotICAgIH07Ci0KLSAgICBDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZSgp
OwotICAgIH5Db29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgdm9pZCBhZGRUb0No
YW5nZVF1ZXVlKGNvbnN0IFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiBjaGFuZ2VkQ29va2llLCBV
cGRhdGVQYXJhbWV0ZXIgYWN0aW9uUGFyYW0pOwotICAgIHZvaWQgc2VuZENoYW5nZXNUb0RhdGFi
YXNlKGludCBpbnRlcnZhbCk7Ci0gICAgdm9pZCBzZW5kQ2hhbmdlc1RvRGF0YWJhc2VUaW1lckZp
cmVkKCk7Ci0KLSAgICB2b2lkIGludm9rZU9wZW4oY29uc3QgU3RyaW5nJiBjb29raWVKYXIpOwot
ICAgIHZvaWQgaW52b2tlUmVtb3ZlQWxsKCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxQYXJzZWRDb29r
aWU+ID4qIGludm9rZUdldENvb2tpZXNXaXRoTGltaXQodW5zaWduZWQgbGltaXQpOwotICAgIHZv
aWQgaW52b2tlU2VuZENoYW5nZXNUb0RhdGFiYXNlKCk7Ci0KLSAgICB2b2lkIGNsb3NlKCk7Ci0K
LSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBSZWZQdHI8UGFyc2VkQ29va2llPiwgVXBkYXRl
UGFyYW1ldGVyPiBDb29raWVBY3Rpb247Ci0gICAgVmVjdG9yPENvb2tpZUFjdGlvbj4gbV9jaGFu
Z2VkQ29va2llczsKLSAgICBNdXRleCBtX211dGV4OwotCi0gICAgU3RyaW5nIG1fdGFibGVOYW1l
OwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUaW1lcjxDb29raWVEYXRhYmFzZUJhY2tpbmdT
dG9yZT4gbV9kYlRpbWVyOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHZW5lcmljVGltZXJD
bGllbnQqIG1fZGJUaW1lckNsaWVudDsKLSAgICBTUUxpdGVEYXRhYmFzZSBtX2RiOwotICAgIFNR
TGl0ZVN0YXRlbWVudCAqbV9pbnNlcnRTdGF0ZW1lbnQ7Ci0gICAgU1FMaXRlU3RhdGVtZW50ICpt
X3VwZGF0ZVN0YXRlbWVudDsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgKm1fZGVsZXRlU3RhdGVtZW50
OwotfTsKLQotQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUmIGNvb2tpZUJhY2tpbmdTdG9yZSgp
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDb29raWVEYXRhYmFzZUJh
Y2tpbmdTdG9yZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nv
b2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Js
YWNrYmVycnkvQ29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNjYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgSnVs
aWVuIENoYWZmcmFpeCA8anVsaWVuLmNoYWZmcmFpeEBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jZGVmaW5lIEVOQUJMRV9DT09LSUVfREVCVUcgMAotI2RlZmluZSBF
TkFCTEVfQ09PS0lFX1NVUEVSX1ZFUkJPU0VfREVCVUcgMAotI2RlZmluZSBFTkFCTEVfQ09PS0lF
X0xJTUlUX0RFQlVHIDAKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZU1h
bmFnZXIuaCIKLQotI2luY2x1ZGUgIkNvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlLmgiCi0jaW5j
bHVkZSAiQ29va2llUGFyc2VyLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJXZWJTZXR0aW5ncy5oIgotI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybUV4ZWN1dGFibGVNZXNzYWdlLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtTWVzc2FnZUNsaWVudC5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU5hdmlnYXRv
ckhhbmRsZXIuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TZXR0aW5ncy5oPgotI2lu
Y2x1ZGUgPG5ldHdvcmsvRG9tYWluVG9vbHMuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0jaWYgRU5BQkxFX0NPT0tJRV9ERUJVRwotI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybUxvZy5oPgotI2VuZGlmCi0KLSNpZiBFTkFCTEVfQ09PS0lFX1NVUEVSX1ZFUkJP
U0VfREVCVUcKLSNkZWZpbmUgQ29va2llTG9nKGZvcm1hdCwgLi4uKSBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6bG9nQWx3YXlzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sIGZvcm1h
dCwgIyMgX19WQV9BUkdTX18pCi0jZWxzZQotI2RlZmluZSBDb29raWVMb2coZm9ybWF0LCAuLi4p
Ci0jZW5kaWYgLy8gRU5BQkxFX0NPT0tJRV9TVVBFUl9WRVJCT1NFX0RFQlVHCi0KLSNpZiBFTkFC
TEVfQ09PS0lFX0xJTUlUX0RFQlVHCi0jZGVmaW5lIENvb2tpZUxpbWl0TG9nKGZvcm1hdCwgLi4u
KSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nQWx3YXlzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpM
b2dMZXZlbEluZm8sIGZvcm1hdCwgIyMgX19WQV9BUkdTX18pCi0jZWxzZQotI2RlZmluZSBDb29r
aWVMaW1pdExvZyhmb3JtYXQsIC4uLikKLSNlbmRpZiAvLyBFTkFCTEVfQ09PS0lFX0xJTUlUX0RF
QlVHCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gTWF4IGNvdW50IGNvbnN0YW50cy4KLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBzX2dsb2JhbE1heENvb2tpZUNvdW50ID0gNjAwMDsKLXN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzX21heENvb2tpZUNvdW50UGVySG9zdCA9IDYwOwotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNfY29va2llc1RvRGVsZXRlV2hlbkxpbWl0UmVhY2hlZCA9IDYwOwotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHNfZGVsYXlUb1N0YXJ0Q29va2llQ2xlYW51cCA9IDEwOwotCi1D
b29raWVNYW5hZ2VyJiBjb29raWVNYW5hZ2VyKCkKLXsKLSAgICBzdGF0aWMgQ29va2llTWFuYWdl
ciAqY29va2llTWFuYWdlciA9IDA7Ci0gICAgaWYgKCFjb29raWVNYW5hZ2VyKSB7Ci0gICAgICAg
IC8vIE9wZW4gdGhlIGNvb2tpZUphciBub3cgYW5kIGdldCB0aGUgYmFja2luZyBzdG9yZSBjb29r
aWVzIHRvIGZpbGwgdGhlIG1hbmFnZXIuCi0gICAgICAgIGNvb2tpZU1hbmFnZXIgPSBuZXcgQ29v
a2llTWFuYWdlcjsKLSAgICAgICAgY29va2llTWFuYWdlci0+bV9jb29raWVCYWNraW5nU3RvcmUt
Pm9wZW4oY29va2llTWFuYWdlci0+Y29va2llSmFyKCkpOwotICAgIH0KLSAgICByZXR1cm4gKmNv
b2tpZU1hbmFnZXI7Ci19Ci0KLUNvb2tpZU1hbmFnZXI6OkNvb2tpZU1hbmFnZXIoKQotICAgIDog
bV9jb3VudCgwKQotICAgICwgbV9wcml2YXRlTW9kZShmYWxzZSkKLSAgICAsIG1fc2hvdWxkRHVt
cEFsbENvb2tpZXMoZmFsc2UpCi0gICAgLCBtX3N5bmNlZFdpdGhEYXRhYmFzZShmYWxzZSkKLSAg
ICAsIG1fY29va2llSmFyRmlsZU5hbWUocGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+YXBwbGljYXRpb25EYXRhRGlyZWN0
b3J5KCkuY19zdHIoKSwgIi9jb29raWVDb2xsZWN0aW9uLmRiIikpCi0gICAgLCBtX3BvbGljeShD
b29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzKQotICAgICwgbV9jb29raWVCYWNraW5nU3Rv
cmUoQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKQotICAgICwgbV9saW1pdFRp
bWVyKHRoaXMsICZDb29raWVNYW5hZ2VyOjpjb29raWVMaW1pdENsZWFuVXApCi17Ci19Ci0KLUNv
b2tpZU1hbmFnZXI6On5Db29raWVNYW5hZ2VyKCkKLXsKLSAgICByZW1vdmVBbGxDb29raWVzKERv
Tm90UmVtb3ZlRnJvbUJhY2tpbmdTdG9yZSk7Ci0gICAgLy8gRklYTUU6IG1fbWFuYWdlck1hcCBh
bmQgdGhlIHRvcCBsYXllciBwcm90b2NvbE1hcHMgYXJlIG5vdCBwcm9wZXJseSBkZWxldGVkLgot
ICAgIC8vIERvIG5vdCBkZWxldGUgYW55IHByb3RvY29sIG1hcHMgdG8gYXZvaWQgZG91YmxlLWRl
bGV0aW9uIG9mIHRoZSBtYXBzIHRoYXQgYXJlCi0gICAgLy8gYmVpbmcgdXNlZCBmb3IgYm90aCBz
ZWN1cmUgYW5kIG5vbi1zZWN1cmUgcHJvdG9jb2xzOyB0aGlzIGxlYWsgaXMgT0sgc2luY2UKLSAg
ICAvLyB0aGVyZSdzIG5vdGhpbmcgaW1wb3J0YW50IGluIHRoZSBoYXNodGFibGUgZGVzdHJ1Y3Rv
cnMsIGFuZCB0aGUgbWVtb3J5IHdpbGwgYmUgcmVjbGFpbWVkIG9uIGV4aXQKLQotICAgIC8vIEZJ
WE1FOiBDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZSBpcyBub3QgZGVsZXRlZCwgb25seSBmbHVz
aGVkCi0gICAgLy8gKGN1cnJlbnRseSB0aGUgZGVzdHJ1Y3RvciBpcyBuZXZlciBjYWxsZWQgc2lu
Y2UgdGhpcyBjbGFzcyBpcyBhCi0gICAgLy8gc2luZ2xldG9uOyBvbiBleGl0LCB0aGUgZGIgaXMg
Zmx1c2hlZCBtYW51YWxseS4gVGhpcyBjYWxsIGlzIG9ubHkgaGVyZQotICAgIC8vIGFzIGEgZmFs
bGJhY2sgaW4gY2FzZSB0aGlzIGNsYXNzIGlzIG1hZGUgYSBub24tc2luZ2xldG9uLgotICAgIG1f
Y29va2llQmFja2luZ1N0b3JlLT5zZW5kQ2hhbmdlc1RvRGF0YWJhc2VTeW5jaHJvbm91c2x5KCk7
Ci19Ci0KLS8vIFNvcnRpbmcgbG9naWMgaXMgYmFzZWQgb24gQ29va2llIFNwZWMgUkZDNjI2NSwg
c2VjdGlvbiA1LjQuMgotc3RhdGljIGJvb2wgY29va2llU29ydGVyKFBhc3NSZWZQdHI8UGFyc2Vk
Q29va2llPiBhLCBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gYikKLXsKLSAgICBpZiAoYS0+cGF0
aCgpLmxlbmd0aCgpID09IGItPnBhdGgoKS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGEtPmNy
ZWF0aW9uVGltZSgpIDwgYi0+Y3JlYXRpb25UaW1lKCk7Ci0gICAgcmV0dXJuIGEtPnBhdGgoKS5s
ZW5ndGgoKSA+IGItPnBhdGgoKS5sZW5ndGgoKTsKLX0KLQotLy8gUmV0dXJuIHdoZXRoZXIgd2Ug
c2hvdWxkIGlnbm9yZSB0aGUgc2NoZW1lCi1zdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVTY2hlbWUo
Y29uc3QgU3RyaW5nJiBwcm90b2NvbCkKLXsKLSAgICAvLyBXZSB3YW50IHRvIGlnbm9yZSBmaWxl
IGFuZCBsb2NhbCBzY2hlbWVzCi0gICAgcmV0dXJuIHByb3RvY29sID09ICJmaWxlIiB8fCBwcm90
b2NvbCA9PSAibG9jYWwiOwotfQotCi12b2lkIENvb2tpZU1hbmFnZXI6OnNldENvb2tpZXMoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUsIENvb2tpZUZpbHRlciBmaWx0ZXIpCi17
Ci0gICAgLy8gSWYgdGhlIGRhdGFiYXNlIGhhc24ndCBiZWVuIHN5bmMtZWQgYXQgdGhpcyBwb2lu
dCwgZm9yY2UgYSBzeW5jIGxvYWQKLSAgICBpZiAoIW1fc3luY2VkV2l0aERhdGFiYXNlICYmICFt
X3ByaXZhdGVNb2RlKQotICAgICAgICBtX2Nvb2tpZUJhY2tpbmdTdG9yZS0+b3BlbkFuZExvYWRE
YXRhYmFzZVN5bmNocm9ub3VzbHkoY29va2llSmFyKCkpOwotCi0gICAgQ29va2llTG9nKCJDb29r
aWVNYW5hZ2VyIC0gU2V0dGluZyBjb29raWVzIik7Ci0gICAgQ29va2llUGFyc2VyIHBhcnNlcih1
cmwpOwotICAgIFZlY3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+IGNvb2tpZXMgPSBwYXJzZXIu
cGFyc2UodmFsdWUpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb29raWVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVJlbW92YWxQb2xpY3kgdHJlYXRtZW50ID0g
bV9wcml2YXRlTW9kZSA/IERvTm90UmVtb3ZlRnJvbUJhY2tpbmdTdG9yZSA6IFJlbW92ZUZyb21C
YWNraW5nU3RvcmU7Ci0gICAgICAgIGNoZWNrQW5kVHJlYXRDb29raWUoY29va2llc1tpXSwgdHJl
YXRtZW50LCBmaWx0ZXIpOwotICAgIH0KLX0KLQotdm9pZCBDb29raWVNYW5hZ2VyOjpzZXRDb29r
aWVzKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29va2llcywgQ29va2ll
RmlsdGVyIGZpbHRlcikKLXsKLSAgICAvLyBJZiB0aGUgZGF0YWJhc2UgaGFzbid0IGJlZW4gc3lu
Yy1lZCBhdCB0aGlzIHBvaW50LCBmb3JjZSBhIHN5bmMgbG9hZAotICAgIGlmICghbV9zeW5jZWRX
aXRoRGF0YWJhc2UgJiYgIW1fcHJpdmF0ZU1vZGUpCi0gICAgICAgIG1fY29va2llQmFja2luZ1N0
b3JlLT5vcGVuQW5kTG9hZERhdGFiYXNlU3luY2hyb25vdXNseShjb29raWVKYXIoKSk7Ci0KLSAg
ICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBTZXR0aW5nIGNvb2tpZXMiKTsKLSAgICBDb29r
aWVQYXJzZXIgcGFyc2VyKHVybCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb29raWVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVJlbW92YWxQb2xpY3kgdHJlYXRt
ZW50ID0gbV9wcml2YXRlTW9kZSA/IERvTm90UmVtb3ZlRnJvbUJhY2tpbmdTdG9yZSA6IFJlbW92
ZUZyb21CYWNraW5nU3RvcmU7Ci0gICAgICAgIGlmIChSZWZQdHI8UGFyc2VkQ29va2llPiBwYXJz
ZWRDb29raWUgPSBwYXJzZXIucGFyc2VPbmVDb29raWUoY29va2llc1tpXSkpCi0gICAgICAgICAg
ICBjaGVja0FuZFRyZWF0Q29va2llKHBhcnNlZENvb2tpZSwgdHJlYXRtZW50LCBmaWx0ZXIpOwot
ICAgIH0KLX0KLQotU3RyaW5nIENvb2tpZU1hbmFnZXI6OmdldENvb2tpZShjb25zdCBVUkwmIHVy
bCwgQ29va2llRmlsdGVyIGZpbHRlcikgY29uc3QKLXsKLSAgICAvLyBJZiB0aGUgZGF0YWJhc2Ug
aGFzbid0IGJlZW4gc3luYy1lZCBhdCB0aGlzIHBvaW50LCBmb3JjZSBhIHN5bmMgbG9hZAotICAg
IGlmICghbV9zeW5jZWRXaXRoRGF0YWJhc2UgJiYgIW1fcHJpdmF0ZU1vZGUpCi0gICAgICAgIG1f
Y29va2llQmFja2luZ1N0b3JlLT5vcGVuQW5kTG9hZERhdGFiYXNlU3luY2hyb25vdXNseShjb29r
aWVKYXIoKSk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPiByYXdDb29raWVz
OwotICAgIHJhd0Nvb2tpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzX21heENvb2tpZUNvdW50
UGVySG9zdCk7Ci0KLSAgICAvLyBSZXRyaWV2ZSBjb29raWVzIHJlbGF0ZWQgdG8gdGhpcyB1cmwK
LSAgICBnZXRSYXdDb29raWVzKHJhd0Nvb2tpZXMsIHVybCwgZmlsdGVyKTsKLQotICAgIENvb2tp
ZUxvZygiQ29va2llTWFuYWdlciAtIHRoZXJlIGFyZSAlZCBjb29raWVzIGluIHJhdyBjb29raWVz
XG4iLCByYXdDb29raWVzLnNpemUoKSk7Ci0KLSAgICAvLyBHZW5lcmF0ZSB0aGUgY29va2llIGhl
YWRlciBzdHJpbmcgdXNpbmcgdGhlIHJldHJpZXZlZCBjb29raWVzCi0gICAgU3RyaW5nQnVpbGRl
ciBjb29raWVTdHJpbmdCdWlsZGVyOwotICAgIGNvb2tpZVN0cmluZ0J1aWxkZXIucmVzZXJ2ZUNh
cGFjaXR5KDUxMik7Ci0gICAgc2l6ZV90IGNvb2tpZVNpemUgPSByYXdDb29raWVzLnNpemUoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvb2tpZVNpemU7IGkrKykgewotICAgICAgICBj
b29raWVTdHJpbmdCdWlsZGVyLmFwcGVuZChyYXdDb29raWVzW2ldLT50b05hbWVWYWx1ZVBhaXIo
KSk7Ci0gICAgICAgIGlmIChpICE9IGNvb2tpZVNpemUtMSkKLSAgICAgICAgICAgIGNvb2tpZVN0
cmluZ0J1aWxkZXIuYXBwZW5kKCI7ICIpOwotICAgIH0KLQotICAgIENvb2tpZUxvZygiQ29va2ll
TWFuYWdlciAtIGNvb2tpZVN0cmluZyBpcyAtICVzXG4iLCBjb29raWVTdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICByZXR1cm4gY29va2llU3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOwotfQotCi1TdHJpbmcgQ29va2llTWFuYWdlcjo6Z2VuZXJhdGVIdG1sRnJh
Z21lbnRGb3JDb29raWVzKCkKLXsKLSAgICAvLyBJZiB0aGUgZGF0YWJhc2UgaGFzbid0IGJlZW4g
c3luYy1lZCBhdCB0aGlzIHBvaW50LCBmb3JjZSBhIHN5bmMgbG9hZAotICAgIGlmICghbV9zeW5j
ZWRXaXRoRGF0YWJhc2UgJiYgIW1fcHJpdmF0ZU1vZGUpCi0gICAgICAgIG1fY29va2llQmFja2lu
Z1N0b3JlLT5vcGVuQW5kTG9hZERhdGFiYXNlU3luY2hyb25vdXNseShjb29raWVKYXIoKSk7Ci0K
LSAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBnZW5lcmF0ZUh0bWxGcmFnbWVudEZvckNv
b2tpZXNcbiIpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxQYXJzZWRDb29raWU+ID4gY29va2llQ2Fu
ZGlkYXRlczsKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3Ig
aXQgPSBtX21hbmFnZXJNYXAuYmVnaW4oKTsgaXQgIT0gbV9tYW5hZ2VyTWFwLmVuZCgpOyArK2l0
KQotICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcygmY29va2llQ2FuZGlkYXRl
cyk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFJlZlB0cjxQYXJzZWRDb29raWU+IGNvb2tp
ZSA9IDA7Ci0gICAgcmVzdWx0LmFwcGVuZChTdHJpbmcoIjx0YWJsZSBzdHlsZT1cIndvcmQtd3Jh
cDpicmVhay13b3JkXCIgY2VsbFNwYWNpbmc9XCIwXCIgY2VsbFBhZGRpbmc9XCIwXCIgYm9yZGVy
PVwiMVwiPjx0cj48dGg+RG9tYWluPC90aD48dGg+UGF0aDwvdGg+PHRoPlByb3RvY29sPC90aD48
dGg+TmFtZTwvdGg+PHRoPlZhbHVlPC90aD48dGg+U2VjdXJlPC90aD48dGg+SHR0cE9ubHk8L3Ro
Pjx0aD5TZXNzaW9uPC90aD48L3RyPiIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
b2tpZUNhbmRpZGF0ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29va2llID0gY29va2llQ2Fu
ZGlkYXRlc1tpXTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmcoIjx0cj48dGQgYWxpZ249
XCJjZW50ZXJcIj4iKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoY29va2llLT5kb21haW4oKSk7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKCI8dGQgYWxpZ249XCJjZW50ZXJcIj4iKSk7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoY29va2llLT5wYXRoKCkpOwotICAgICAgICByZXN1bHQu
YXBwZW5kKFN0cmluZygiPHRkIGFsaWduPVwiY2VudGVyXCI+IikpOwotICAgICAgICByZXN1bHQu
YXBwZW5kKGNvb2tpZS0+cHJvdG9jb2woKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5n
KCI8dGQgYWxpZ249XCJjZW50ZXJcIj4iKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoY29va2ll
LT5uYW1lKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZygiPHRkIGFsaWduPVwiY2Vu
dGVyXCIgc3R5bGU9IFwid29yZC1icmVhazpicmVhay1hbGxcIj4iKSk7Ci0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoY29va2llLT52YWx1ZSgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmco
Ijx0ZCBhbGlnbj1cImNlbnRlclwiPiIpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmco
Y29va2llLT5pc1NlY3VyZSgpID8gIlllcyIgOiAiTm8iKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoU3RyaW5nKCI8dGQgYWxpZ249XCJjZW50ZXJcIj4iKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoU3RyaW5nKGNvb2tpZS0+aXNIdHRwT25seSgpID8gIlllcyIgOiAiTm8iKSk7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQoU3RyaW5nKCI8dGQgYWxpZ249XCJjZW50ZXJcIj4iKSk7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQoU3RyaW5nKGNvb2tpZS0+aXNTZXNzaW9uKCkgPyAiWWVzIiA6ICJObyIp
KTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmcoIjwvdGQ+PC90cj4iKSk7Ci0gICAgfQot
ICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKCI8L3RhYmxlPiIpKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIENvb2tpZU1hbmFnZXI6OmdldFJhd0Nvb2tpZXMoVmVjdG9yPFJlZlB0cjxQ
YXJzZWRDb29raWU+ID4gJnN0YWNrT2ZDb29raWVzLCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIENv
b2tpZUZpbHRlciBmaWx0ZXIpIGNvbnN0Ci17Ci0gICAgLy8gRm9yY2UgYSBzeW5jIGxvYWQgb2Yg
dGhlIGRhdGFiYXNlCi0gICAgaWYgKCFtX3N5bmNlZFdpdGhEYXRhYmFzZSAmJiAhbV9wcml2YXRl
TW9kZSkKLSAgICAgICAgbV9jb29raWVCYWNraW5nU3RvcmUtPm9wZW5BbmRMb2FkRGF0YWJhc2VT
eW5jaHJvbm91c2x5KGNvb2tpZUphcigpKTsKLQotICAgIENvb2tpZUxvZygiQ29va2llTWFuYWdl
ciAtIGdldFJhd0Nvb2tpZXMgLSBwcm9jZXNzaW5nIHVybCB3aXRoIGRvbWFpbiAtICVzICYgcHJv
dG9jb2w6ICVzICYgcGF0aDogJXNcbiIsIHJlcXVlc3RVUkwuaG9zdCgpLnV0ZjgoKS5kYXRhKCks
IHJlcXVlc3RVUkwucHJvdG9jb2woKS51dGY4KCkuZGF0YSgpLCByZXF1ZXN0VVJMLnBhdGgoKS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIGNvbnN0IGJvb2wgaW52YWxpZFNjaGVtZSA9IHNob3VsZEln
bm9yZVNjaGVtZShyZXF1ZXN0VVJMLnByb3RvY29sKCkpOwotICAgIGNvbnN0IGJvb2wgc3BlY2lh
bENhc2VGb3JXZWJXb3JrcyA9IGludmFsaWRTY2hlbWUgJiYgbV9zaG91bGREdW1wQWxsQ29va2ll
czsKLSAgICBjb25zdCBib29sIGlzQ29ubmVjdGlvblNlY3VyZSA9IHJlcXVlc3RVUkwucHJvdG9j
b2xJcygiaHR0cHMiKSB8fCByZXF1ZXN0VVJMLnByb3RvY29sSXMoIndzcyIpIHx8IHNwZWNpYWxD
YXNlRm9yV2ViV29ya3M7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPiBjb29r
aWVDYW5kaWRhdGVzOwotICAgIFZlY3RvcjxDb29raWVNYXAqPiBwcm90b2NvbHNUb1NlYXJjaDsK
LQotICAgIC8vIFNwZWNpYWwgQ2FzZTogSWYgYSBzZXJ2ZXIgc2V0cyBhICJzZWN1cmUiIGNvb2tp
ZSBvdmVyIGEgbm9uLXNlY3VyZSBjaGFubmVsIGFuZCB0cmllcyB0byBhY2Nlc3MgdGhlIGNvb2tp
ZQotICAgIC8vIG92ZXIgYSBzZWN1cmUgY2hhbm5lbCwgaXQgd2lsbCBub3Qgc3VjY2VlZCBiZWNh
dXNlIHRoZSBzZWN1cmUgcHJvdG9jb2wgaXNuJ3QgbWFwcGVkIHRvIHRoZSBpbnNlY3VyZSBwcm90
b2NvbCB5ZXQuCi0gICAgLy8gU2V0IHRoZSBtYXAgdG8gdGhlIG5vbi1zZWN1cmUgdmVyc2lvbiwg
c28gaXQnbGwgc2VhcmNoIHRoZSBtYXBwaW5nIGZvciBhIHNlY3VyZSBjb29raWUuCi0gICAgQ29v
a2llTWFwKiB0YXJnZXRNYXAgPSBtX21hbmFnZXJNYXAuZ2V0KHJlcXVlc3RVUkwucHJvdG9jb2wo
KSk7Ci0gICAgaWYgKCF0YXJnZXRNYXAgJiYgaXNDb25uZWN0aW9uU2VjdXJlKSB7Ci0gICAgICAg
IENvb2tpZUxvZygiQ29va2llTWFuYWdlciAtIHNwZWNpYWwgY2FzZTogc2VjdXJlIHByb3RvY29s
IGFyZSBub3QgbGlua2VkIHlldC4iKTsKLSAgICAgICAgaWYgKHJlcXVlc3RVUkwucHJvdG9jb2xJ
cygiaHR0cHMiKSkKLSAgICAgICAgICAgIHRhcmdldE1hcCA9IG1fbWFuYWdlck1hcC5nZXQoImh0
dHAiKTsKLSAgICAgICAgZWxzZSBpZiAocmVxdWVzdFVSTC5wcm90b2NvbElzKCJ3c3MiKSkKLSAg
ICAgICAgICAgIHRhcmdldE1hcCA9IG1fbWFuYWdlck1hcC5nZXQoIndzIik7Ci0gICAgfQotCi0g
ICAgLy8gRGVjaWRlIHdoaWNoIHNjaGVtZSB0cmVlIHdlIHNob3VsZCBsb29rIGF0LgotICAgIC8v
IFJldHVybiBvbiBpbnZhbGlkIHNjaGVtZXMuIGNvb2tpZXMgYXJlIGN1cnJlbnRseSBkaXNhYmxl
ZCBvbiBmaWxlIGFuZCBsb2NhbC4KLSAgICAvLyBXZSBvbmx5IHdhbnQgdG8gZW5hYmxlIHRoZW0g
Zm9yIFdlYldvcmtzIHRoYXQgZW5hYmxlZCBhIHNwZWNpYWwgZmxhZy4KLSAgICBpZiAoc3BlY2lh
bENhc2VGb3JXZWJXb3JrcykKLSAgICAgICAgY29weVZhbHVlc1RvVmVjdG9yKG1fbWFuYWdlck1h
cCwgcHJvdG9jb2xzVG9TZWFyY2gpOwotICAgIGVsc2UgaWYgKGludmFsaWRTY2hlbWUpCi0gICAg
ICAgIHJldHVybjsKLSAgICBlbHNlIHsKLSAgICAgICAgcHJvdG9jb2xzVG9TZWFyY2guYXBwZW5k
KHRhcmdldE1hcCk7Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgaGFjayBmb3Igd2Vid29y
a3MgYXBwczsgUkZDIDYyNjUgc2F5cyAiQ29va2llcyBkbyBub3QgcHJvdmlkZSBpc29sYXRpb24g
Ynkgc2NoZW1lIgotICAgICAgICAvLyBzbyB3ZSBzaG91bGQgbm90IGJlIGNoZWNraW5nIHByb3Rv
Y29scyBhdCBhbGwuIFNlZSBQUiAxMzU1OTUKLSAgICAgICAgaWYgKG1fc2hvdWxkRHVtcEFsbENv
b2tpZXMpIHsKLSAgICAgICAgICAgIHByb3RvY29sc1RvU2VhcmNoLmFwcGVuZChtX21hbmFnZXJN
YXAuZ2V0KCJmaWxlIikpOwotICAgICAgICAgICAgcHJvdG9jb2xzVG9TZWFyY2guYXBwZW5kKG1f
bWFuYWdlck1hcC5nZXQoImxvY2FsIikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgVmVjdG9y
PFN0cmluZz4gZGVsaW1pdGVkSG9zdDsKLQotICAgIC8vIElQIGFkZHJlc3NlcyBhcmUgc3RvcmVk
IGluIGEgcGFydGljdWxhciBmb3JtYXQgKGR1ZSB0byBpcHY2KS4gUmVkdWNlIHRoZSBpcCBhZGRy
ZXNzIHNvIHdlIGNhbiBtYXRjaAotICAgIC8vIGl0IHdpdGggdGhlIG9uZSBpbiBtZW1vcnkuCi0g
ICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBjYW5vbmljYWxJUCA9IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpnZXRDYW5vbmljYWxJUEZvcm1hdChyZXF1ZXN0VVJMLmhvc3QoKSk7Ci0gICAg
aWYgKCFjYW5vbmljYWxJUC5lbXB0eSgpKQotICAgICAgICBkZWxpbWl0ZWRIb3N0LmFwcGVuZChT
dHJpbmcoY2Fub25pY2FsSVAuY19zdHIoKSkpOwotICAgIGVsc2UKLSAgICAgICAgcmVxdWVzdFVS
TC5ob3N0KCkubG93ZXIoKS5zcGxpdCgiLiIsIHRydWUsIGRlbGltaXRlZEhvc3QpOwotCi0gICAg
Ly8gR28gdGhyb3VnaCBhbGwgdGhlIHByb3RvY29sIHRyZWVzIHRoYXQgd2UgbmVlZCB0byBzZWFy
Y2ggZm9yCi0gICAgLy8gYW5kIGdldCBhbGwgY29va2llcyB0aGF0IGFyZSB2YWxpZCBmb3IgdGhp
cyBkb21haW4KLSAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IHByb3RvY29sc1RvU2VhcmNoLnNp
emUoKTsgaysrKSB7Ci0gICAgICAgIENvb2tpZU1hcCogY3VycmVudE1hcCA9IHByb3RvY29sc1Rv
U2VhcmNoW2tdOwotCi0gICAgICAgIC8vIGlmIG5vIGNvb2tpZXMgZXhpc3QgZm9yIHRoaXMgcHJv
dG9jb2wsIGJyZWFrIHJpZ2h0IGF3YXkKLSAgICAgICAgaWYgKCFjdXJyZW50TWFwKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gbG9v
a2luZyBhdCBwcm90b2NvbCBtYXAgJXMgXG4iLCBjdXJyZW50TWFwLT5nZXROYW1lKCkudXRmOCgp
LmRhdGEoKSk7Ci0KLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBsb2NhbCBhbmQgZmlsZXMg
LSBiZWNhdXNlIFdlYkFwcHMgZXhwZWN0IHRvIGdldCBBTEwgY29va2llcyBmcm9tIHRoZSBiYWNr
aW5nLXN0b3JlIG9uIGxvY2FsIHByb3RvY29sCi0gICAgICAgIGlmIChzcGVjaWFsQ2FzZUZvcldl
YldvcmtzKSB7Ci0gICAgICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBzcGVjaWFs
IGNhc2UgZmluZCBpbiBwcm90b2NvbCBtYXAgLSAlc1xuIiwgY3VycmVudE1hcC0+Z2V0TmFtZSgp
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgY3VycmVudE1hcC0+Z2V0QWxsQ2hpbGRDb29r
aWVzKCZjb29raWVDYW5kaWRhdGVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IEdldCBjb29raWVzIGZyb20gdGhlIG51bGwgZG9tYWluIG1hcAotICAgICAgICAgICAgY3VycmVu
dE1hcC0+Z2V0QWxsQ29va2llcygmY29va2llQ2FuZGlkYXRlcyk7Ci0KLSAgICAgICAgICAgIC8v
IEdldCBjb29raWVzIGZyb20gSG9zdC1vbmx5IGNvb2tpZXMKLSAgICAgICAgICAgIGlmIChjYW5v
bmljYWxJUC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgQ29va2llTG9nKCJDb29raWVNYW5h
Z2VyIC0gbG9va2luZyBmb3IgaG9zdC1vbmx5IGNvb2tpZXMgZm9yIGhvc3QgLSAlcyIsIHJlcXVl
c3RVUkwuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIENvb2tpZU1hcCog
aG9zdE1hcCA9IGN1cnJlbnRNYXAtPmdldFN1YmRvbWFpbk1hcChyZXF1ZXN0VVJMLmhvc3QoKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGhvc3RNYXApCi0gICAgICAgICAgICAgICAgICAgIGhvc3RN
YXAtPmdldEFsbENvb2tpZXMoJmNvb2tpZUNhbmRpZGF0ZXMpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBHZXQgY29va2llcyBmcm9tIHRoZSB2YWxpZCBkb21haW4gbWFwcwotICAg
ICAgICAgICAgaW50IGkgPSBkZWxpbWl0ZWRIb3N0LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICB3
aGlsZSAoaSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2Vy
IC0gZmluZGluZyAlcyBpbiBjdXJyZW50bWFwXG4iLCBkZWxpbWl0ZWRIb3N0W2ldLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRNYXAgPSBjdXJyZW50TWFwLT5nZXRTdWJk
b21haW5NYXAoZGVsaW1pdGVkSG9zdFtpXSk7Ci0gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBz
dWJkb21haW4vZG9tYWluIGRvZXMgbm90IGV4aXN0IGluIG91ciBtYXBwaW5nIHRoZW4gd2Ugc2lt
cGx5IGV4aXQKLSAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRNYXApIHsKLSAgICAgICAgICAg
ICAgICAgICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gY2Fubm90IGZpbmQgbmV4dCBtYXAg
ZXhpdGluZyB0aGUgd2hpbGUgbG9vcC5cbiIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQ29va2llTG9nKCJDb29raWVNYW5h
Z2VyIC0gZm91bmQgdGhlIG1hcCwgZ3JhYmJpbmcgY29va2llcyBmcm9tIHRoaXMgbWFwXG4iKTsK
LSAgICAgICAgICAgICAgICBjdXJyZW50TWFwLT5nZXRBbGxDb29raWVzKCZjb29raWVDYW5kaWRh
dGVzKTsKLSAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSB0aGVyZSBhcmUgJWQgY29va2ll
cyBpbiBjYW5kaWRhdGVcbiIsIGNvb2tpZUNhbmRpZGF0ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY29va2llQ2FuZGlkYXRlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBSZWZQdHI8UGFyc2VkQ29va2llPiBjb29raWUgPSBjb29raWVDYW5kaWRhdGVzW2ldOwotCi0g
ICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgcGF0aC1tYXRjaGVzIHJ1bGVzIGluIFJGQzYyNjUs
IHNlY3Rpb24gNS4xLjQsCi0gICAgICAgIC8vIHdlIHNob3VsZCBhZGQgYSAnLycgYXQgdGhlIGVu
ZCBvZiBjb29raWUtcGF0aCBmb3IgY29tcGFyaXNvbiBpZiB0aGUgY29va2llLXBhdGggaXMgbm90
IGVuZCB3aXRoICcvJy4KLSAgICAgICAgU3RyaW5nIHBhdGggPSBjb29raWUtPnBhdGgoKTsKLSAg
ICAgICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gY29tcGFyaW5nIGNvb2tpZSBwYXRoICVz
IChsZW4gJWQpIHRvIHJlcXVlc3QgcGF0aCAlcyAobGVuICVkKSIsIHBhdGgudXRmOCgpLmRhdGEo
KSwgcGF0aC5sZW5ndGgoKSwgcmVxdWVzdFVSTC5wYXRoKCkudXRmOCgpLmRhdGEoKSwgcGF0aC5s
ZW5ndGgoKSk7Ci0gICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UocGF0aCwgcmVxdWVzdFVS
TC5wYXRoKCkpICYmICFwYXRoLmVuZHNXaXRoKCIvIiwgZmFsc2UpKQotICAgICAgICAgICAgcGF0
aCA9IHBhdGggKyAiLyI7Ci0KLSAgICAgICAgLy8gT25seSBzZWN1cmUgY29ubmVjdGlvbnMgaGF2
ZSBhY2Nlc3MgdG8gc2VjdXJlIGNvb2tpZXMuIFVubGVzcyBzcGVjaWFsQ2FzZUZvcldlYldvcmtz
IGlzIHRydWUuCi0gICAgICAgIC8vIEdldCB0aGUgY29va2llcyBmaWx0ZXJpbmcgb3V0IEh0dHBP
bmx5IGNvb2tpZXMgaWYgcmVxdWVzdGVkLgotICAgICAgICBpZiAocmVxdWVzdFVSTC5wYXRoKCku
c3RhcnRzV2l0aChwYXRoLCBmYWxzZSkgJiYgKGlzQ29ubmVjdGlvblNlY3VyZSB8fCAhY29va2ll
LT5pc1NlY3VyZSgpKSAmJiAoZmlsdGVyID09IFdpdGhIdHRwT25seUNvb2tpZXMgfHwgIWNvb2tp
ZS0+aXNIdHRwT25seSgpKSkgewotICAgICAgICAgICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2Vy
IC0gY29va2llIGNob3NlbiAtICVzXG4iLCBjb29raWUtPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgICAgICBjb29raWUtPnNldExhc3RBY2Nlc3NlZChjdXJyZW50VGltZSgpKTsK
LSAgICAgICAgICAgIHN0YWNrT2ZDb29raWVzLmFwcGVuZChjb29raWUpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgc3RkOjpzdGFibGVfc29ydChzdGFja09mQ29va2llcy5iZWdpbigpLCBzdGFj
a09mQ29va2llcy5lbmQoKSwgY29va2llU29ydGVyKTsKLX0KLQotdm9pZCBDb29raWVNYW5hZ2Vy
OjpyZW1vdmVBbGxDb29raWVzKEJhY2tpbmdTdG9yZVJlbW92YWxQb2xpY3kgYmFja2luZ1N0b3Jl
UmVtb3ZhbCkKLXsKLSAgICBIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGZp
cnN0ID0gbV9tYW5hZ2VyTWFwLmJlZ2luKCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1h
cCo+OjppdGVyYXRvciBlbmQgPSBtX21hbmFnZXJNYXAuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFw
PFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGl0ID0gZmlyc3Q7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgaXQtPnZhbHVlLT5kZWxldGVBbGxDb29raWVzQW5kRG9tYWlucygpOwotCi0g
ICAgaWYgKGJhY2tpbmdTdG9yZVJlbW92YWwgPT0gUmVtb3ZlRnJvbUJhY2tpbmdTdG9yZSkKLSAg
ICAgICAgbV9jb29raWVCYWNraW5nU3RvcmUtPnJlbW92ZUFsbCgpOwotICAgIG1fY291bnQgPSAw
OwotfQotCi12b2lkIENvb2tpZU1hbmFnZXI6OnNldENvb2tpZUphcihjb25zdCBjaGFyKiBmaWxl
TmFtZSkKLXsKLSAgICBtX2Nvb2tpZUphckZpbGVOYW1lID0gU3RyaW5nKGZpbGVOYW1lKTsKLSAg
ICBtX2Nvb2tpZUJhY2tpbmdTdG9yZS0+b3BlbihtX2Nvb2tpZUphckZpbGVOYW1lKTsKLX0KLQot
dm9pZCBDb29raWVNYW5hZ2VyOjpjaGVja0FuZFRyZWF0Q29va2llKFBhc3NSZWZQdHI8UGFyc2Vk
Q29va2llPiBwcnBDYW5kaWRhdGVDb29raWUsIEJhY2tpbmdTdG9yZVJlbW92YWxQb2xpY3kgcG9z
dFRvQmFja2luZ1N0b3JlLCBDb29raWVGaWx0ZXIgZmlsdGVyKQotewotICAgIFJlZlB0cjxQYXJz
ZWRDb29raWU+IGNhbmRpZGF0ZUNvb2tpZSA9IHBycENhbmRpZGF0ZUNvb2tpZTsKLSAgICBDb29r
aWVMb2coIkNvb2tpZU1hbmFnZXIgLSBjaGVja0FuZFRyZWF0Q29va2llIC0gcHJvY2Vzc2luZyB1
cmwgd2l0aCBkb21haW4gLSAlcyAmIHByb3RvY29sICVzXG4iLCBjYW5kaWRhdGVDb29raWUtPmRv
bWFpbigpLnV0ZjgoKS5kYXRhKCksIGNhbmRpZGF0ZUNvb2tpZS0+cHJvdG9jb2woKS51dGY4KCku
ZGF0YSgpKTsKLQotICAgIC8vIERlbGV0ZSBpbnZhbGlkIGNvb2tpZXM6Ci0gICAgLy8gMSkgQSBj
b29raWUgd2hpY2ggaXMgbm90IGZyb20gaHR0cCBzaG91bGRuJ3QgaGF2ZSBhIGh0dHBPbmx5IHBy
b3BlcnR5LgotICAgIC8vIDIpIENvb2tpZXMgY29taW5nIGZyb20gc2NoZW1lcyB0aGF0IHdlIGRv
IG5vdCBzdXBwb3J0IGFuZCB0aGUgc3BlY2lhbCBmbGFnIGlzbid0IG9uCi0gICAgaWYgKChmaWx0
ZXIgPT0gTm9IdHRwT25seUNvb2tpZSAmJiBjYW5kaWRhdGVDb29raWUtPmlzSHR0cE9ubHkoKSkg
fHwgKHNob3VsZElnbm9yZVNjaGVtZShjYW5kaWRhdGVDb29raWUtPnByb3RvY29sKCkpICYmICFt
X3Nob3VsZER1bXBBbGxDb29raWVzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgYm9v
bCBpZ25vcmVEb21haW4gPSAoY2FuZGlkYXRlQ29va2llLT5wcm90b2NvbCgpID09ICJmaWxlIiB8
fCBjYW5kaWRhdGVDb29raWUtPnByb3RvY29sKCkgPT0gImxvY2FsIik7Ci0KLSAgICAvLyBEZXRl
cm1pbmUgd2hpY2ggcHJvdG9jb2wgdHJlZSB0byBhZGQgdGhlIGNvb2tpZSB0by4gQ3JlYXRlIG9u
ZSBpZiBuZWNlc3NhcnkuCi0gICAgQ29va2llTWFwKiBjdXJNYXAgPSAwOwotICAgIGlmIChtX21h
bmFnZXJNYXAuY29udGFpbnMoY2FuZGlkYXRlQ29va2llLT5wcm90b2NvbCgpKSkKLSAgICAgICAg
Y3VyTWFwID0gbV9tYW5hZ2VyTWFwLmdldChjYW5kaWRhdGVDb29raWUtPnByb3RvY29sKCkpOwot
ICAgIGVsc2UgewotICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBhIHNlY3VyZSB2ZXJzaW9uLCBp
ZiBpdCBpcywgbGluayBpdCB0byB0aGUgbm9uLXNlY3VyZSB2ZXJzaW9uCi0gICAgICAgIC8vIExp
bmsgY3VyTWFwIHRvIHRoZSBuZXcgcHJvdG9jb2wgYXMgd2VsbCBhcyB0aGUgb2xkIG9uZSBpZiBp
dCBkb2Vzbid0IGV4aXN0Ci0gICAgICAgIGlmIChjYW5kaWRhdGVDb29raWUtPnByb3RvY29sKCkg
PT0gImh0dHBzIikgewotICAgICAgICAgICAgY3VyTWFwID0gbV9tYW5hZ2VyTWFwLmdldCgiaHR0
cCIpOwotICAgICAgICAgICAgaWYgKCFjdXJNYXApIHsKLSAgICAgICAgICAgICAgICBjdXJNYXAg
PSBuZXcgQ29va2llTWFwKCJodHRwIik7Ci0gICAgICAgICAgICAgICAgbV9tYW5hZ2VyTWFwLmFk
ZCgiaHR0cCIsIGN1ck1hcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY2Fu
ZGlkYXRlQ29va2llLT5wcm90b2NvbCgpID09ICJ3c3MiKSB7Ci0gICAgICAgICAgICBjdXJNYXAg
PSBtX21hbmFnZXJNYXAuZ2V0KCJ3cyIpOwotICAgICAgICAgICAgaWYgKCFjdXJNYXApIHsKLSAg
ICAgICAgICAgICAgICBjdXJNYXAgPSBuZXcgQ29va2llTWFwKCJ3cyIpOwotICAgICAgICAgICAg
ICAgIG1fbWFuYWdlck1hcC5hZGQoIndzIiwgY3VyTWFwKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJNYXAgPSBuZXcgQ29va2llTWFwKGNhbmRpZGF0ZUNv
b2tpZS0+cHJvdG9jb2woKSk7Ci0KLSAgICAgICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0g
YWRkaW5nIHByb3RvY29sIGNvb2tpZW1hcCAtICVzXG4iLCBjdXJNYXAtPmdldE5hbWUoKS51dGY4
KCkuZGF0YSgpKTsKLQotICAgICAgICBtX21hbmFnZXJNYXAuYWRkKGNhbmRpZGF0ZUNvb2tpZS0+
cHJvdG9jb2woKSwgY3VyTWFwKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBwcm90b2NvbCBzdXBwb3J0
IGRvbWFpbiwgd2UgaGF2ZSB0byB0cmF2ZXJzZSB0aGUgZG9tYWluIHRyZWUgdG8gZmluZCB0aGUg
cmlnaHQKLSAgICAvLyBjb29raWVNYXAgdG8gaGFuZGxlIHdpdGgKLSAgICBpZiAoIWlnbm9yZURv
bWFpbikKLSAgICAgICAgY3VyTWFwID0gZmluZE9yQ3JlYXRlQ29va2llTWFwKGN1ck1hcCwgY2Fu
ZGlkYXRlQ29va2llKTsKLQotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHByb3BlciBtYXAg
Zm9yIHRoaXMgY29va2llLCB3ZSBjYW4gbW9kaWZ5IGl0Ci0gICAgLy8gSWYgY29va2llIGRvZXMg
bm90IGV4aXN0IGFuZCBoYXMgZXhwaXJlZCwgZGVsZXRlIGl0Ci0gICAgLy8gSWYgY29va2llIGV4
aXN0cyBhbmQgaXQgaGFzIGV4cGlyZWQsIHNvIHdlIG11c3QgcmVtb3ZlIGl0IGZyb20gdGhlIG1h
cCwgaWYgbm90IHVwZGF0ZSBpdAotICAgIC8vIElmIGNvb2tpZSBleHBpcmVkIGFuZCBjYW1lIGZy
b20gdGhlIEJhY2tpbmdTdG9yZSAodGhlcmVmb3JlIGRvZXMgbm90IGV4aXN0KSwgd2UgaGF2ZSB0
byByZW1vdmUgZnJvbSBkYXRhYmFzZQotICAgIC8vIElmIGNvb2tpZSBkb2VzIG5vdCBleGlzdCAm
IGl0J3MgdmFsaWQsIGFkZCBpdCB0byB0aGUgY3VycmVudCBtYXAKLQotICAgIGlmIChjYW5kaWRh
dGVDb29raWUtPmhhc0V4cGlyZWQoKSB8fCBjYW5kaWRhdGVDb29raWUtPmlzRm9yY2VFeHBpcmVk
KCkpIHsKLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBnZXRCYWNraW5nU3RvcmVDb29raWVz
KCkgdG8gY2F0Y2ggZXhwaXJlZCBjb29raWVzCi0gICAgICAgIGlmIChwb3N0VG9CYWNraW5nU3Rv
cmUgPT0gQmFja2luZ1N0b3JlQ29va2llRW50cnkpCi0gICAgICAgICAgICBtX2Nvb2tpZUJhY2tp
bmdTdG9yZS0+cmVtb3ZlKGNhbmRpZGF0ZUNvb2tpZSk7Ci0gICAgICAgIGVsc2UgaWYgKGN1ck1h
cCkgewotICAgICAgICAgICAgLy8gUmVtb3ZlQ29va2llIHdpbGwgcmV0dXJuIDAgaWYgdGhlIGNv
b2tpZSBkb2Vzbid0IGV4aXN0LgotICAgICAgICAgICAgUmVmUHRyPFBhcnNlZENvb2tpZT4gZXhw
aXJlZCA9IGN1ck1hcC0+cmVtb3ZlQ29va2llKGNhbmRpZGF0ZUNvb2tpZSwgZmlsdGVyKTsKLSAg
ICAgICAgICAgIC8vIENvb2tpZSBpcyB1c2VsZXNzLCBSZW1vdmUgdGhlIGNvb2tpZSBmcm9tIHRo
ZSBiYWNraW5nc3RvcmUgaWYgaXQgZXhpc3RzLgotICAgICAgICAgICAgLy8gQmFja3VwIGNoZWNr
IGZvciBCYWNraW5nU3RvcmVDb29raWVFbnRyeSBpbmNhc2Ugc29tZW9uZSBpbmNvcnJlY3RseSB1
c2VzIHRoaXMgZW51bS4KLSAgICAgICAgICAgIGlmIChleHBpcmVkICYmIHBvc3RUb0JhY2tpbmdT
dG9yZSAhPSBCYWNraW5nU3RvcmVDb29raWVFbnRyeSAmJiAhZXhwaXJlZC0+aXNTZXNzaW9uKCkp
IHsKLSAgICAgICAgICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBleHBpcmVkIGNv
b2tpZSBpcyBub25zZXNzaW9uLCBkZWxldGluZyBmcm9tIGRiIik7Ci0gICAgICAgICAgICAgICAg
bV9jb29raWVCYWNraW5nU3RvcmUtPnJlbW92ZShleHBpcmVkKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChjdXJNYXApOwotICAgICAgICBD
b29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBhZGRpbmcgY29va2llbWFwIC0gJXNcbiIsIGN1ck1h
cC0+Z2V0TmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBhZGRDb29raWVUb01hcChjdXJN
YXAsIGNhbmRpZGF0ZUNvb2tpZSwgcG9zdFRvQmFja2luZ1N0b3JlLCBmaWx0ZXIpOwotICAgIH0K
LX0KLQotdm9pZCBDb29raWVNYW5hZ2VyOjphZGRDb29raWVUb01hcChDb29raWVNYXAqIHRhcmdl
dE1hcCwgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IHBycENhbmRpZGF0ZUNvb2tpZSwgQmFja2lu
Z1N0b3JlUmVtb3ZhbFBvbGljeSBwb3N0VG9CYWNraW5nU3RvcmUsIENvb2tpZUZpbHRlciBmaWx0
ZXIpCi17Ci0gICAgUmVmUHRyPFBhcnNlZENvb2tpZT4gcmVwbGFjZWRDb29raWUgPSAwOwotICAg
IFJlZlB0cjxQYXJzZWRDb29raWU+IGNhbmRpZGF0ZUNvb2tpZSA9IHBycENhbmRpZGF0ZUNvb2tp
ZTsKLQotICAgIGlmICghdGFyZ2V0TWFwLT5hZGRPclJlcGxhY2VDb29raWUoY2FuZGlkYXRlQ29v
a2llLCByZXBsYWNlZENvb2tpZSwgZmlsdGVyKSkgewotICAgICAgICBDb29raWVMb2coIkNvb2tp
ZU1hbmFnZXIgLSByZWplY3RpbmcgbmV3IGNvb2tpZSAtICVzLlxuIiwgY2FuZGlkYXRlQ29va2ll
LT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKHJlcGxhY2VkQ29va2llKSB7Ci0gICAgICAgIENvb2tpZUxvZygiQ29va2llTWFuYWdl
ciAtIHVwZGF0aW5nIG5ldyBjb29raWUgLSAlcy5cbiIsIGNhbmRpZGF0ZUNvb2tpZS0+dG9TdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAgICAvLyBBIGNvb2tpZSB3YXMgcmVwbGFjZWQg
aW4gdGFyZ2V0TWFwLgotICAgICAgICAvLyBJZiBvbGQgY29va2llIGlzIG5vbi1zZXNzaW9uIGFu
ZCBuZXcgb25lIGlzLCB3ZSBoYXZlIHRvIGRlbGV0ZSBpdCBmcm9tIGJhY2tpbmdzdG9yZQotICAg
ICAgICAvLyBJZiBuZXcgY29va2llIGlzIG5vbi1zZXNzaW9uIGFuZCBvbGQgb25lIGlzLCB3ZSBo
YXZlIHRvIGFkZCBpdCB0byBiYWNraW5nc3RvcmUKLSAgICAgICAgLy8gSWYgYm90aCBzZXNzaW9u
cyBhcmUgbm9uLXNlc3Npb24sIHRoZW4gd2UgdXBkYXRlIGl0IGluIHRoZSBiYWNraW5nc3RvcmUK
LSAgICAgICAgYm9vbCBuZXdJc1Nlc3Npb24gPSBjYW5kaWRhdGVDb29raWUtPmlzU2Vzc2lvbigp
OwotICAgICAgICBib29sIG9sZElzU2Vzc2lvbiA9IHJlcGxhY2VkQ29va2llLT5pc1Nlc3Npb24o
KTsKLQotICAgICAgICBpZiAocG9zdFRvQmFja2luZ1N0b3JlID09IFJlbW92ZUZyb21CYWNraW5n
U3RvcmUpIHsKLSAgICAgICAgICAgIGlmICghbmV3SXNTZXNzaW9uICYmICFvbGRJc1Nlc3Npb24p
Ci0gICAgICAgICAgICAgICAgbV9jb29raWVCYWNraW5nU3RvcmUtPnVwZGF0ZShjYW5kaWRhdGVD
b29raWUpOwotICAgICAgICAgICAgZWxzZSBpZiAobmV3SXNTZXNzaW9uICYmICFvbGRJc1Nlc3Np
b24pIHsKLSAgICAgICAgICAgICAgICAvLyBNdXN0IG1hbnVhbGx5IGRlY3JlYXNlIHRoZSBjb3Vu
dGVyIGJlY2F1c2UgaXQgd2FzIG5vdCBjb3VudGVkIHdoZW4KLSAgICAgICAgICAgICAgICAvLyB0
aGUgY29va2llIHdhcyByZW1vdmVkIGluIGNvb2tpZVZlY3Rvci4KLSAgICAgICAgICAgICAgICBy
ZW1vdmVkQ29va2llKCk7Ci0gICAgICAgICAgICAgICAgbV9jb29raWVCYWNraW5nU3RvcmUtPnJl
bW92ZShyZXBsYWNlZENvb2tpZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFuZXdJc1Nlc3Np
b24gJiYgb2xkSXNTZXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgLy8gTXVzdCBtYW51YWxseSBp
bmNyZWFzZSB0aGUgY291bnRlciBiZWNhdXNlIGl0IHdhcyBub3QgY291bnRlZCB3aGVuCi0gICAg
ICAgICAgICAgICAgLy8gdGhlIGNvb2tpZSB3YXMgYWRkZWQgaW4gY29va2llVmVjdG9yLgotICAg
ICAgICAgICAgICAgIGFkZGVkQ29va2llKCk7Ci0gICAgICAgICAgICAgICAgbV9jb29raWVCYWNr
aW5nU3RvcmUtPmluc2VydChjYW5kaWRhdGVDb29raWUpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDb29raWVMb2coIkNvb2tpZU1hbmFn
ZXIgLSBhZGRpbmcgbmV3IGNvb2tpZSAtICVzLlxuIiwgY2FuZGlkYXRlQ29va2llLT50b1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgUmVmUHRyPFBhcnNlZENvb2tpZT4gb2xkZXN0Q29v
a2llID0gMDsKLSAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIG5vdCByZWFjaGVkIHRoZSBwZXIgY29v
a2llIGRvbWFpbiBsaW1pdC4KLSAgICAvLyBJZiB0aGF0IGlzIG5vdCB0cnVlLCB3ZSBjaGVjayBp
ZiB0aGUgZ2xvYmFsIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQgaWYgYmFja2luZ3N0b3JlIG1vZGUg
aXMgb24KLSAgICAvLyBUd28gcG9pbnRzOgotICAgIC8vIDEpIFdlIG9ubHkgZG8gYSBnbG9iYWwg
Y2hlY2sgaWYgYmFja2luZ3N0b3JlIG1vZGUgaXMgb24gYmVjYXVzZSB0aGUgZ2xvYmFsIGNvb2tp
ZSBsaW1pdCBvbmx5Ci0gICAgLy8gICAgY291bnRzIHNlc3Npb24gY29va2llcyB0aGF0IGFyZSBz
YXZlZCBpbiB0aGUgZGF0YWJhc2UuIElmIHRoZSB1c2VyIGdvZXMgb3ZlciB0aGUgbGltaXQKLSAg
ICAvLyAgICB3aGVuIHRoZXkgYXJlIGluIHByaXZhdGUgbW9kZSwgd2Uga25vdyB0aGF0IHRoZSB0
b3RhbCBjb29raWUgbGltaXQgd2lsbCBiZSB1bmRlciB0aGUgbGltaXQKLSAgICAvLyAgICBvbmNl
IHRoZSB1c2VyIGdvZXMgYmFjayB0byBub3JtYWwgbW9kZSAobWVtb3J5IGRlbGV0ZWQgYW5kIHJl
bG9hZGVkIGZyb20gdGhlIGRhdGFiYXNlKQotICAgIC8vIDIpIFdlIHVzZSBlbHNlIGlmIGZvciB0
aGlzIHN0YXRlbWVudCBiZWNhdXNlIGlmIHdlIHJlbW92ZSBhIGNvb2tpZSBpbiB0aGUgMXN0IHN0
YXRlbWVudAotICAgIC8vICAgIHRoZW4gaXQgbWVhbnMgdGhlIGdsb2JhbCBjb3VudCB3aWxsIG5l
dmVyIGV4Y2VlZCB0aGUgbGltaXQKLQotICAgIENvb2tpZUxpbWl0TG9nKCJDb29raWVNYW5hZ2Vy
IC0gbG9jYWwgY291bnQ6ICVkICBnbG9iYWwgY291bnQ6ICVkIiwgdGFyZ2V0TWFwLT5jb3VudCgp
LCBtX2NvdW50KTsKLSAgICBpZiAodGFyZ2V0TWFwLT5jb3VudCgpID4gc19tYXhDb29raWVDb3Vu
dFBlckhvc3QpIHsKLSAgICAgICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gZGVsZXRpbmcg
b2xkZXN0IGNvb2tpZSBmcm9tIHRoaXMgbWFwIGR1ZSB0byBkb21haW4gY291bnQuXG4iKTsKLSAg
ICAgICAgb2xkZXN0Q29va2llID0gdGFyZ2V0TWFwLT5yZW1vdmVPbGRlc3RDb29raWUoKTsKLSAg
ICB9IGVsc2UgaWYgKG1fY291bnQgPiBzX2dsb2JhbE1heENvb2tpZUNvdW50ICYmIChwb3N0VG9C
YWNraW5nU3RvcmUgIT0gRG9Ob3RSZW1vdmVGcm9tQmFja2luZ1N0b3JlKSkgewotICAgICAgICBD
b29raWVMaW1pdExvZygiQ29va2llTWFuYWdlciAtIEdsb2JhbCBsaW1pdCByZWFjaGVkLCBpbml0
aWF0ZSBjb29raWUgbGltaXQgY2xlYW4gdXAuIik7Ci0gICAgICAgIGluaXRpYXRlQ29va2llTGlt
aXRDbGVhblVwKCk7Ci0gICAgfQotCi0gICAgLy8gT25seSBhZGQgbm9uIHNlc3Npb24gY29va2ll
IHRvIHRoZSBiYWNraW5nIHN0b3JlLgotICAgIGlmIChwb3N0VG9CYWNraW5nU3RvcmUgPT0gUmVt
b3ZlRnJvbUJhY2tpbmdTdG9yZSkgewotICAgICAgICBpZiAob2xkZXN0Q29va2llICYmICFvbGRl
c3RDb29raWUtPmlzU2Vzc2lvbigpKSB7Ci0gICAgICAgICAgICBDb29raWVMb2coIkNvb2tpZU1h
bmFnZXIgLSBvbGRlc3RDb29raWUgZXhpc3RzLCBkZWxldGluZyBpdCBmcm9tIGJhY2tpbmdzdG9y
ZSBhbmQgZGVzdHJ1Y3RpbmcuXG4iKTsKLSAgICAgICAgICAgIG1fY29va2llQmFja2luZ1N0b3Jl
LT5yZW1vdmUob2xkZXN0Q29va2llKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWNhbmRpZGF0
ZUNvb2tpZS0+aXNTZXNzaW9uKCkpCi0gICAgICAgICAgICBtX2Nvb2tpZUJhY2tpbmdTdG9yZS0+
aW5zZXJ0KGNhbmRpZGF0ZUNvb2tpZSk7Ci0gICAgfQotfQotCi12b2lkIENvb2tpZU1hbmFnZXI6
OmdldEJhY2tpbmdTdG9yZUNvb2tpZXMoKQotewotICAgIC8vIE1ha2Ugc3VyZSBwcml2YXRlIG1v
ZGUgaXMgb2ZmIHdoZW4gdGhlIGRhdGFiYXNlIHRocmVhZCBjYWxscyB0aGlzIG1ldGhvZAotICAg
IGlmIChtX3ByaXZhdGVNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGVyZSBl
eGlzdHMgY29va2llcyBpbiBtZW1vcnksIGZsdXNoIHRoZW0gb3V0IGFuZCB3ZSdsbCBsb2FkIGV2
ZXJ5dGhpbmcgZnJvbSB0aGUgZGF0YWJhc2UgYWdhaW4KLSAgICBpZiAobV9jb3VudCkKLSAgICAg
ICAgcmVtb3ZlQWxsQ29va2llcyhEb05vdFJlbW92ZUZyb21CYWNraW5nU3RvcmUpOwotCi0gICAg
VmVjdG9yPFJlZlB0cjxQYXJzZWRDb29raWU+ID4gY29va2llczsKLSAgICBtX2Nvb2tpZUJhY2tp
bmdTdG9yZS0+Z2V0Q29va2llc0Zyb21EYXRhYmFzZShjb29raWVzKTsKLSAgICBDb29raWVMb2co
IkNvb2tpZU1hbmFnZXIgLSBCYWNraW5nc3RvcmUgaGFzICVkIGNvb2tpZXMsIGxvYWRpbmcgdGhl
bSBpbiBtZW1vcnkgbm93IiwgY29va2llcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY29va2llcy5zaXplKCk7ICsraSkgewotICAgICAgICBSZWZQdHI8UGFyc2VkQ29va2ll
PiBuZXdDb29raWUgPSBjb29raWVzW2ldOwotCi0gICAgICAgIC8vIFRoZSBJUCBmbGFnIGlzIG5v
dCBwZXJzaXN0ZWQgaW4gdGhlIGRhdGFiYXNlLgotICAgICAgICBpZiAoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OmlzSVBBZGRyZXNzKG5ld0Nvb2tpZS0+ZG9tYWluKCkpKQotICAgICAgICAgICAgbmV3
Q29va2llLT5zZXREb21haW4obmV3Q29va2llLT5kb21haW4oKSwgdHJ1ZSk7Ci0KLSAgICAgICAg
Y2hlY2tBbmRUcmVhdENvb2tpZShuZXdDb29raWUsIEJhY2tpbmdTdG9yZUNvb2tpZUVudHJ5KTsK
LSAgICB9Ci0gICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gQmFja2luZ3N0b3JlIGxvYWRp
bmcgY29tcGxldGUuIik7Ci0KLSAgICBtX3N5bmNlZFdpdGhEYXRhYmFzZSA9IHRydWU7Ci19Ci0K
LXZvaWQgQ29va2llTWFuYWdlcjo6c2V0UHJpdmF0ZU1vZGUoYm9vbCBwcml2YXRlTW9kZSkKLXsK
LSAgICBpZiAobV9wcml2YXRlTW9kZSA9PSBwcml2YXRlTW9kZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9wcml2YXRlTW9kZSA9IHByaXZhdGVNb2RlOwotCi0gICAgLy8gSWYgd2Ugc3dpdGNo
ZWQgdG8gcHJpdmF0ZSBtb2RlIHdoZW4gdGhlIGRhdGFiYXNlIGNvb2tpZXMgaGF2ZW4ndCBsb2Fk
ZWQgaW50byBtZW1vcnkgeWV0Ci0gICAgLy8gd2UgY2FuIHJldHVybiBiZWNhdXNlIHRoZXJlJ3Mg
bm90aGluZyBpbiBtZW1vcnkgYW55d2F5LgotICAgIGlmIChtX3ByaXZhdGVNb2RlICYmICFtX3N5
bmNlZFdpdGhEYXRhYmFzZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVtb3ZlQWxsQ29va2ll
cyhEb05vdFJlbW92ZUZyb21CYWNraW5nU3RvcmUpOwotCi0gICAgLy8gSWYgd2UgYXJlIHN3aXRj
aGluZyBiYWNrIHRvIHB1YmxpYyBtb2RlLCByZWxvYWQgdGhlIGRhdGFiYXNlIHRvIG1lbW9yeS4K
LSAgICBpZiAoIW1fcHJpdmF0ZU1vZGUpCi0gICAgICAgIGdldEJhY2tpbmdTdG9yZUNvb2tpZXMo
KTsKLX0KLQotQ29va2llTWFwKiBDb29raWVNYW5hZ2VyOjpmaW5kT3JDcmVhdGVDb29raWVNYXAo
Q29va2llTWFwKiBwcm90b2NvbE1hcCwgY29uc3QgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IGNh
bmRpZGF0ZUNvb2tpZSkKLXsKLSAgICAvLyBFeHBsb2RlIHRoZSBkb21haW4gd2l0aCB0aGUgJy4n
IGRlbGltaXRlcgotICAgIFZlY3RvcjxTdHJpbmc+IGRlbGltaXRlZEhvc3Q7Ci0KLSAgICAvLyBJ
ZiB0aGUgZG9tYWluIGlzIGFuIElQIGFkZHJlc3Mgb3IgaXMgYSBob3N0LW9ubHkgZG9tYWluLCBk
b24ndCBzcGxpdCBpdC4KLSAgICBpZiAoY2FuZGlkYXRlQ29va2llLT5kb21haW5Jc0lQQWRkcmVz
cygpIHx8IGNhbmRpZGF0ZUNvb2tpZS0+aXNIb3N0T25seSgpKQotICAgICAgICBkZWxpbWl0ZWRI
b3N0LmFwcGVuZChjYW5kaWRhdGVDb29raWUtPmRvbWFpbigpKTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbmRpZGF0ZUNvb2tpZS0+ZG9tYWluKCkuc3BsaXQoIi4iLCBkZWxpbWl0ZWRIb3N0KTsKLQot
ICAgIENvb2tpZU1hcCogY3VyTWFwID0gcHJvdG9jb2xNYXA7Ci0gICAgc2l6ZV90IGhvc3RTaXpl
ID0gZGVsaW1pdGVkSG9zdC5zaXplKCk7Ci0KLSAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIg
LSBsb29raW5nIGF0IHByb3RvY29sIG1hcCAlcyBcbiIsIHByb3RvY29sTWFwLT5nZXROYW1lKCku
dXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAvLyBGaW5kICYgY3JlYXRlIG5lY2Vzc2FyeSBDb29raWVN
YXBzIGJ5IHRyYXZlcnNpbmcgZG93biB0aGUgZG9tYWluIHRyZWUKLSAgICAvLyBFYWNoIENvb2tp
ZU1hcCByZXByZXNlbnQgYSBzdWJzZWN0aW9uIG9mIHRoZSBkb21haW4sIGRlbGltaXRlZCBieSAi
LiIKLSAgICBpbnQgaSA9IGhvc3RTaXplIC0gMTsKLSAgICB3aGlsZSAoaSA+PSAwKSB7Ci0gICAg
ICAgIENvb2tpZUxvZygiQ29va2llTWFuYWdlciAtIGZpbmRpbmcgJXMgaW4gY3VycmVudG1hcFxu
IiwgZGVsaW1pdGVkSG9zdFtpXS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgQ29va2llTWFwKiBu
ZXh0TWFwID0gY3VyTWFwLT5nZXRTdWJkb21haW5NYXAoZGVsaW1pdGVkSG9zdFtpXSk7Ci0gICAg
ICAgIGlmICghbmV4dE1hcCkgewotICAgICAgICAgICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2Vy
IC0gY2Fubm90IGZpbmQgbWFwXG4iKTsKLSAgICAgICAgICAgIGlmIChjYW5kaWRhdGVDb29raWUt
Pmhhc0V4cGlyZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIENv
b2tpZUxvZygiQ29va2llTWFuYWdlciAtIGNyZWF0aW5nICVzIGluIGN1cnJlbnRtYXAgJXNcbiIs
IGRlbGltaXRlZEhvc3RbaV0udXRmOCgpLmRhdGEoKSwgY3VyTWFwLT5nZXROYW1lKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBuZXh0TWFwID0gbmV3IENvb2tpZU1hcChkZWxpbWl0ZWRI
b3N0W2ldKTsKLSAgICAgICAgICAgIENvb2tpZUxvZygiQ29va2llTWFuYWdlciAtIGFkZGluZyBz
dWJkb21haW4gdG8gbWFwXG4iKTsKLSAgICAgICAgICAgIGN1ck1hcC0+YWRkU3ViZG9tYWluTWFw
KGRlbGltaXRlZEhvc3RbaV0sIG5leHRNYXApOwotICAgICAgICB9Ci0gICAgICAgIGN1ck1hcCA9
IG5leHRNYXA7Ci0gICAgICAgIGktLTsKLSAgICB9Ci0gICAgcmV0dXJuIGN1ck1hcDsKLX0KLQot
dm9pZCBDb29raWVNYW5hZ2VyOjpyZW1vdmVDb29raWVXaXRoTmFtZShjb25zdCBVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAgIC8vIERpc3BhdGNoIHRoZSBtZXNzYWdl
IGJlY2F1c2UgdGhlIGRhdGFiYXNlIGNvb2tpZXMgYXJlIG5vdCBsb2FkZWQgaW4gbWVtb3J5IHll
dC4KLSAgICBpZiAoIW1fc3luY2VkV2l0aERhdGFiYXNlICYmICFtX3ByaXZhdGVNb2RlKSB7Ci0g
ICAgICAgIHR5cGVkZWYgdm9pZCAoV2ViQ29yZTo6Q29va2llTWFuYWdlcjo6KkZ1bmN0aW9uVHlw
ZSkoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjp3ZWJLaXRUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmRpc3BhdGNoTWVzc2FnZSgKLSAgICAg
ICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVNZXRob2RDYWxsTWVzc2FnZTxGdW5j
dGlvblR5cGUsIENvb2tpZU1hbmFnZXIsIGNvbnN0IFVSTCwgY29uc3QgU3RyaW5nPigKLSAgICAg
ICAgICAgICAgICAmQ29va2llTWFuYWdlcjo6cmVtb3ZlQ29va2llV2l0aE5hbWUsIHRoaXMsIHVy
bCwgY29va2llTmFtZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZ2V0
IGFsbCBjb29raWVzIGZyb20gYWxsIGRvbWFpbnMgdGhhdCBkb21haW4gbWF0Y2hlcyB0aGUgcmVx
dWVzdCBkb21haW4KLSAgICAvLyBhbmQgZGVsZXRlIGFueSBjb29raWVzIHdpdGggdGhlIHNwZWNp
ZmllZCBuYW1lIHRoYXQgcGF0aCBtYXRjaGVzIHRoZSByZXF1ZXN0IHBhdGgKLSAgICBWZWN0b3I8
UmVmUHRyPFBhcnNlZENvb2tpZT4gPiByZXN1bHRzOwotICAgIGdldFJhd0Nvb2tpZXMocmVzdWx0
cywgdXJsLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKLSAgICAvLyBEZWxldGUgdGhlIGNvb2tpZXMg
dGhhdCBwYXRoIG1hdGNoZXMgdGhlIHJlcXVlc3QgcGF0aAotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewotICAgICAgICBSZWZQdHI8UGFyc2VkQ29va2ll
PiBjb29raWUgPSByZXN1bHRzW2ldOwotICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGNv
b2tpZS0+bmFtZSgpLCBjb29raWVOYW1lKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAodXJsLnBhdGgoKS5zdGFydHNXaXRoKGNvb2tpZS0+cGF0aCgpLCBmYWxzZSkpIHsKLSAg
ICAgICAgICAgIGNvb2tpZS0+Zm9yY2VFeHBpcmUoKTsKLSAgICAgICAgICAgIGNoZWNrQW5kVHJl
YXRDb29raWUoY29va2llLCBSZW1vdmVGcm9tQmFja2luZ1N0b3JlKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBDb29raWVNYW5hZ2VyOjppbml0aWF0ZUNvb2tpZUxpbWl0Q2xlYW5VcCgp
Ci17Ci0gICAgaWYgKCFtX2xpbWl0VGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBDb29raWVM
b2coIkNvb2tpZU1hbmFnZXIgLSBTdGFydGluZyBhIHRpbWVyIGZvciBjb29raWUgY2xlYW51cCIp
OwotICAgICAgICBtX2xpbWl0VGltZXIuc3RhcnRPbmVTaG90KHNfZGVsYXlUb1N0YXJ0Q29va2ll
Q2xlYW51cCk7Ci0gICAgfSBlbHNlIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIENvb2tpZUxv
ZygiQ29va2llTWFuYWdlciAtIENvb2tpZSBjbGVhbnVwIHRpbWVyIGFscmVhZHkgcnVubmluZyIp
OwotI2VuZGlmCi0gICAgfQotfQotCi12b2lkIENvb2tpZU1hbmFnZXI6OmNvb2tpZUxpbWl0Q2xl
YW5VcChUaW1lcjxDb29raWVNYW5hZ2VyPiogdGltZXIpCi17Ci0gICAgQVNTRVJUX1VOVVNFRCh0
aW1lciwgdGltZXIgPT0gJm1fbGltaXRUaW1lcik7Ci0KLSAgICBDb29raWVMaW1pdExvZygiQ29v
a2llTWFuYWdlciAtIFN0YXJ0aW5nIGNvb2tpZSBjbGVhbiB1cCIpOwotCi0gICAgc2l6ZV90IG51
bWJlck9mQ29va2llc092ZXJMaW1pdCA9IChtX2NvdW50ID4gc19nbG9iYWxNYXhDb29raWVDb3Vu
dCkgPyBtX2NvdW50IC0gc19nbG9iYWxNYXhDb29raWVDb3VudCA6IDA7Ci0gICAgc2l6ZV90IGFt
b3VudFRvRGVsZXRlID0gc19jb29raWVzVG9EZWxldGVXaGVuTGltaXRSZWFjaGVkICsgbnVtYmVy
T2ZDb29raWVzT3ZlckxpbWl0OwotCi0gICAgQ29va2llTGltaXRMb2coIkNvb2tpZU1hbmFnZXIg
LSBFeGNlc3M6ICVkICBBbW91bnQgdG8gRGVsZXRlOiAlZCIsIG51bWJlck9mQ29va2llc092ZXJM
aW1pdCwgYW1vdW50VG9EZWxldGUpOwotCi0gICAgLy8gQ2FsbCB0aGUgZGF0YWJhc2UgdG8gZGVs
ZXRlICdhbW91bnRUb0RlbGV0ZScgb2YgY29va2llcwotICAgIFZlY3RvcjxSZWZQdHI8UGFyc2Vk
Q29va2llPiA+IGNvb2tpZXNUb0RlbGV0ZTsKLSAgICBjb29raWVzVG9EZWxldGUucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShhbW91bnRUb0RlbGV0ZSk7Ci0KLSAgICBDb29raWVMaW1pdExvZygiQ29v
a2llTWFuYWdlciAtIENhbGxpbmcgZGF0YWJhc2UgdG8gY2xlYW4gdXAiKTsKLSAgICBtX2Nvb2tp
ZUJhY2tpbmdTdG9yZS0+Z2V0Q29va2llc0Zyb21EYXRhYmFzZShjb29raWVzVG9EZWxldGUsIGFt
b3VudFRvRGVsZXRlKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIG9yZGVyZWQgaW4gQVNDIG9yZGVy
IGJ5IGxhc3RBY2Nlc3NlZAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW1vdW50VG9EZWxl
dGU7ICsraSkgewotICAgICAgICAvLyBFeHBpcmUgdGhlbSBhbmQgY2FsbCBjaGVja2FuZHRyZWF0
IHRvIGRlbGV0ZSB0aGVtIGZyb20gbWVtb3J5IGFuZCBkYXRhYmFzZQotICAgICAgICBSZWZQdHI8
UGFyc2VkQ29va2llPiBuZXdDb29raWUgPSBjb29raWVzVG9EZWxldGVbaV07Ci0gICAgICAgIENv
b2tpZUxpbWl0TG9nKCJDb29raWVNYW5hZ2VyIC0gRXhwaXJlIGNvb2tpZTogJXMgYW5kIGRlbGV0
ZSIsIG5ld0Nvb2tpZS0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbmV3Q29v
a2llLT5mb3JjZUV4cGlyZSgpOwotICAgICAgICBjaGVja0FuZFRyZWF0Q29va2llKG5ld0Nvb2tp
ZSwgUmVtb3ZlRnJvbUJhY2tpbmdTdG9yZSk7Ci0gICAgfQotCi0gICAgQ29va2llTGltaXRMb2co
IkNvb2tpZU1hbmFnZXIgLSBDb29raWUgY2xlYW4gdXAgY29tcGxldGUuIik7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVy
cnkvQ29va2llTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBKdWxp
ZW4gQ2hhZmZyYWl4IDxqdWxpZW4uY2hhZmZyYWl4QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgQ29va2llTWFuYWdlcl9oCi0jZGVmaW5lIENvb2tpZU1hbmFnZXJfaAotCi0j
aW5jbHVkZSAiQ29va2llTWFwLmgiCi0jaW5jbHVkZSAiUGFyc2VkQ29va2llLmgiCi0jaW5jbHVk
ZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HdWFyZGVkUG9pbnRlci5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29va2llRGF0YWJhc2VCYWNraW5n
U3RvcmU7Ci1jbGFzcyBVUkw7Ci0KLWVudW0gQmFja2luZ1N0b3JlUmVtb3ZhbFBvbGljeSB7Ci0g
ICAgUmVtb3ZlRnJvbUJhY2tpbmdTdG9yZSwKLSAgICBCYWNraW5nU3RvcmVDb29raWVFbnRyeSwK
LSAgICBEb05vdFJlbW92ZUZyb21CYWNraW5nU3RvcmUKLX07Ci0KLWVudW0gQ29va2llU3RvcmFn
ZUFjY2VwdFBvbGljeSB7Ci0gICAgQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5cywKLSAg
ICBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5TmV2ZXIsCi0gICAgQ29va2llU3RvcmFnZUFjY2Vw
dFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluCi19OwotCi0vKgotICAqIFRoZSBDb29r
aWVNYW5hZ2VyIGNsYXNzIGlzIGEgc2luZ2xldG9uIGNsYXNzIHRoYXQgaGFuZGxlcyBhbmQgc2Vs
ZWN0aXZlbHkgcGVyc2lzdHMKLSAgKiBpbmNvbWluZyBjb29raWVzLiBUaGlzIGNsYXNzIGNvbnRh
aW5zIGEgdHJlZSBvZiBkb21haW5zIGZvciBxdWlja2VyCi0gICogY29va2llIGRvbWFpbiBsb29r
dXAuIFRoZSB0b3Agb2YgdGhlIHRyZWUgcmVwcmVzZW50cyBhIG51bGwgdmFsdWUgZm9yIGEgbnVs
bCBkb21haW4uCi0gICogVGhlIG51bGwgZG9tYWluIGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gdG9w
IGxldmVsIGRvbWFpbnMgYW5kIGVhY2ggbm9kZSBiZWxvdwotICAqIHJlcHJlc2VudHMgYSBzdWIt
c2VjdGlvbiBvZiBhIGRvbWFpbiwgZGVsaW1pdGVkIGJ5ICIuIgotICAqCi0gICogSWYgYSBjb29r
aWUgaGFzIGEgZG9tYWluICJhLmIuY29tIiwgaXQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIG5vZGUg
bmFtZWQgImEiIGluIHRoaXMgdHJlZS4KLSAgKiBpbiB0aGUgYnJhbmNoICIiLT4iY29tIi0+ImIi
LT4iYSIKLSAgKgotICAqIENvb2tpZSBzcGVjcyBmb2xsb3cgdGhlIFJGQyA2MjY1IHNwZWMgc2hl
ZXQuCi0gICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjI2NQotICAqLwotCi1jbGFz
cyBDb29raWVNYW5hZ2VyOiBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okd1YXJkZWRQb2lu
dGVyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgYm9vbCBjYW5Mb2NhbEFjY2Vzc0FsbENvb2tpZXMoKSBj
b25zdCB7IHJldHVybiBtX3Nob3VsZER1bXBBbGxDb29raWVzOyB9Ci0gICAgdm9pZCBzZXRDYW5M
b2NhbEFjY2Vzc0FsbENvb2tpZXMoYm9vbCBlbmFibGVkKSB7IG1fc2hvdWxkRHVtcEFsbENvb2tp
ZXMgPSBlbmFibGVkOyB9Ci0KLSAgICB2b2lkIHNldENvb2tpZXMoY29uc3QgVVJMJiwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgQ29va2llRmlsdGVyID0gV2l0aEh0dHBPbmx5Q29va2llcyk7Ci0gICAg
dm9pZCBzZXRDb29raWVzKGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb29raWVz
LCBDb29raWVGaWx0ZXIpOwotCi0gICAgdm9pZCByZW1vdmVBbGxDb29raWVzKEJhY2tpbmdTdG9y
ZVJlbW92YWxQb2xpY3kpOwotICAgIHZvaWQgcmVtb3ZlQ29va2llV2l0aE5hbWUoY29uc3QgVVJM
JiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKTsKLQotICAgIHVuc2lnbmVkIHNob3J0IGNvb2tp
ZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0KLQotICAgIHZvaWQgc2V0Q29va2ll
SmFyKGNvbnN0IGNoYXIqKTsKLSAgICBjb25zdCBTdHJpbmcmIGNvb2tpZUphcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29va2llSmFyRmlsZU5hbWU7IH0KLQotICAgIC8vIENvdW50IHVwZGF0ZSBtZXRo
b2QKLSAgICB2b2lkIHJlbW92ZWRDb29raWUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY291
bnQgPiAwKTsKLSAgICAgICAgLS1tX2NvdW50OwotICAgIH0KLSAgICB2b2lkIGFkZGVkQ29va2ll
KCkgeyArK21fY291bnQ7IH0KLQotICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhDb29raWVMZW5ndGgo
KSB7IHJldHVybiBzX21heENvb2tpZUxlbmd0aDsgfQotCi0gICAgdm9pZCBzZXRDb29raWVQb2xp
Y3koQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsgbV9wb2xpY3kgPSBwb2xpY3k7
IH0KLSAgICBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IGNvb2tpZVBvbGljeSgpIGNvbnN0IHsg
cmV0dXJuIG1fcG9saWN5OyB9Ci0gICAgdm9pZCBzZXRQcml2YXRlTW9kZShib29sKTsKLQotICAg
IFN0cmluZyBnZW5lcmF0ZUh0bWxGcmFnbWVudEZvckNvb2tpZXMoKTsKLSAgICBTdHJpbmcgZ2V0
Q29va2llKGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwgQ29va2llRmlsdGVyKSBjb25zdDsKLQotICAg
IC8vIFJldHVybnMgYWxsIGNvb2tpZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVj
aWZpZWQgVVJMIGFzIHJhdyBjb29raWVzLgotICAgIHZvaWQgZ2V0UmF3Q29va2llcyhWZWN0b3I8
UmVmUHRyPFBhcnNlZENvb2tpZT4gPiYgc3RhY2tPZkNvb2tpZXMsIGNvbnN0IFVSTCYgcmVxdWVz
dFVSTCwgQ29va2llRmlsdGVyID0gV2l0aEh0dHBPbmx5Q29va2llcykgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgZnJpZW5kIENvb2tpZU1hbmFnZXImIGNvb2tpZU1hbmFnZXIoKTsKLSAgICBmcmll
bmQgY2xhc3MgQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU7Ci0KLSAgICBDb29raWVNYW5hZ2Vy
KCk7Ci0gICAgdmlydHVhbCB+Q29va2llTWFuYWdlcigpOwotCi0gICAgdm9pZCBjaGVja0FuZFRy
ZWF0Q29va2llKFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiBwcnBDYW5kaWRhdGVDb29raWUsIEJh
Y2tpbmdTdG9yZVJlbW92YWxQb2xpY3ksIENvb2tpZUZpbHRlciA9IFdpdGhIdHRwT25seUNvb2tp
ZXMpOwotCi0gICAgdm9pZCBhZGRDb29raWVUb01hcChDb29raWVNYXAqIHRhcmdldE1hcCwgUGFz
c1JlZlB0cjxQYXJzZWRDb29raWU+IHBycENhbmRpZGF0ZUNvb2tpZSwgQmFja2luZ1N0b3JlUmVt
b3ZhbFBvbGljeSBwb3N0VG9CYWNraW5nU3RvcmUsIENvb2tpZUZpbHRlciA9IFdpdGhIdHRwT25s
eUNvb2tpZXMpOwotCi0gICAgQ29va2llTWFwKiBmaW5kT3JDcmVhdGVDb29raWVNYXAoQ29va2ll
TWFwKiBwcm90b2NvbE1hcCwgY29uc3QgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IGNhbmRpZGF0
ZUNvb2tpZSk7Ci0KLSAgICB2b2lkIGluaXRpYXRlQ29va2llTGltaXRDbGVhblVwKCk7Ci0gICAg
dm9pZCBjb29raWVMaW1pdENsZWFuVXAoVGltZXI8Q29va2llTWFuYWdlcj4qKTsKLQotICAgIEhh
c2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPiBtX21hbmFnZXJNYXA7Ci0KLSAgICB1bnNpZ25lZCBz
aG9ydCBtX2NvdW50OwotCi0gICAgYm9vbCBtX3ByaXZhdGVNb2RlOwotICAgIGJvb2wgbV9zaG91
bGREdW1wQWxsQ29va2llczsKLSAgICBib29sIG1fc3luY2VkV2l0aERhdGFiYXNlOwotCi0gICAg
U3RyaW5nIG1fY29va2llSmFyRmlsZU5hbWU7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qg
c2hvdWxkIGJlIHJlbW92ZWQuCi0gICAgdm9pZCBnZXRCYWNraW5nU3RvcmVDb29raWVzKCk7Ci0K
LSAgICAvLyBDb29raWUgc2l6ZSBsaW1pdCBvZiA0a0IgYXMgYWR2aXNlZCBwZXIgUkZDMjEwOQot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX21heENvb2tpZUxlbmd0aCA9IDQwOTY7Ci0KLSAg
ICBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IG1fcG9saWN5OwotCi0gICAgQ29va2llRGF0YWJh
c2VCYWNraW5nU3RvcmUqIG1fY29va2llQmFja2luZ1N0b3JlOwotICAgIFRpbWVyPENvb2tpZU1h
bmFnZXI+IG1fbGltaXRUaW1lcjsKLQotICAgIERJU0FCTEVfQ09QWShDb29raWVNYW5hZ2VyKQot
fTsKLQotLy8gR2V0IHRoZSBnbG9iYWwgaW5zdGFuY2UuCi1Db29raWVNYW5hZ2VyJiBjb29raWVN
YW5hZ2VyKCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENvb2tpZU1h
bmFnZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVN
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkv
Q29va2llTWFwLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxOCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEp1bGllbiBDaGFmZnJhaXggPGp1
bGllbi5jaGFmZnJhaXhAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2RlZmluZSBFTkFC
TEVfQ09PS0lFX0RFQlVHIDAKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tp
ZU1hcC5oIgotCi0jaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJQYXJzZWRDb29raWUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLSNpZiBFTkFCTEVfQ09PS0lFX0RFQlVHCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtTG9nLmg+Ci0jZGVmaW5lIENvb2tpZUxvZyhmb3JtYXQsIC4uLikgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OmxvZ0Fsd2F5cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCBmb3Jt
YXQsICMjIF9fVkFfQVJHU19fKQotI2Vsc2UKLSNkZWZpbmUgQ29va2llTG9nKGZvcm1hdCwgLi4u
KQotI2VuZGlmIC8vIEVOQUJMRV9DT09LSUVfREVCVUcKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1Db29raWVNYXA6OkNvb2tpZU1hcChjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBtX29sZGVz
dENvb2tpZSgwKQotICAgICwgbV9uYW1lKG5hbWUpCi17Ci19Ci0KLUNvb2tpZU1hcDo6fkNvb2tp
ZU1hcCgpCi17Ci0gICAgZGVsZXRlQWxsQ29va2llc0FuZERvbWFpbnMoKTsKLX0KLQotYm9vbCBD
b29raWVNYXA6OmFkZE9yUmVwbGFjZUNvb2tpZShQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gcHJw
Q2FuZGlkYXRlQ29va2llLCBSZWZQdHI8UGFyc2VkQ29va2llPiYgcmVwbGFjZWRDb29raWUsIENv
b2tpZUZpbHRlciBmaWx0ZXIpCi17Ci0gICAgUmVmUHRyPFBhcnNlZENvb2tpZT4gY2FuZGlkYXRl
Q29va2llID0gcHJwQ2FuZGlkYXRlQ29va2llOwotICAgIENvb2tpZUxvZygiQ29va2llTWFwIC0g
QXR0ZW1wdGluZyB0byBhZGQgY29va2llIC0gJXMiLCBjb29raWUtPm5hbWUoKS51dGY4KCkuZGF0
YSgpKTsKLQotICAgIHNpemVfdCBjb29raWVDb3VudCA9IG1fY29va2llVmVjdG9yLnNpemUoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvb2tpZUNvdW50OyBpKyspIHsKLSAgICAgICAg
aWYgKG1fY29va2llVmVjdG9yW2ldLT5uYW1lKCkgPT0gY2FuZGlkYXRlQ29va2llLT5uYW1lKCkg
JiYgbV9jb29raWVWZWN0b3JbaV0tPnBhdGgoKSA9PSBjYW5kaWRhdGVDb29raWUtPnBhdGgoKSkg
ewotCi0gICAgICAgICAgICBpZiAoZmlsdGVyID09IE5vSHR0cE9ubHlDb29raWUgJiYgbV9jb29r
aWVWZWN0b3JbaV0tPmlzSHR0cE9ubHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgIHJlcGxhY2VkQ29va2llID0gbV9jb29raWVWZWN0b3JbaV07Ci0gICAg
ICAgICAgICBtX2Nvb2tpZVZlY3RvcltpXSA9IGNhbmRpZGF0ZUNvb2tpZTsKLSAgICAgICAgICAg
IGlmIChyZXBsYWNlZENvb2tpZSA9PSBtX29sZGVzdENvb2tpZSkKLSAgICAgICAgICAgICAgICB1
cGRhdGVPbGRlc3RDb29raWUoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgbV9jb29raWVWZWN0b3IuYXBwZW5kKGNhbmRpZGF0ZUNvb2tpZSk7Ci0g
ICAgaWYgKCFjYW5kaWRhdGVDb29raWUtPmlzU2Vzc2lvbigpKQotICAgICAgICBjb29raWVNYW5h
Z2VyKCkuYWRkZWRDb29raWUoKTsKLSAgICBpZiAoIW1fb2xkZXN0Q29va2llIHx8IG1fb2xkZXN0
Q29va2llLT5sYXN0QWNjZXNzZWQoKSA+IGNhbmRpZGF0ZUNvb2tpZS0+bGFzdEFjY2Vzc2VkKCkp
Ci0gICAgICAgIG1fb2xkZXN0Q29va2llID0gY2FuZGlkYXRlQ29va2llOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1QYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gQ29va2llTWFwOjpyZW1vdmVDb29r
aWVBdEluZGV4KGludCBwb3NpdGlvbiwgY29uc3QgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IGNv
b2tpZSkKLXsKLSAgICBBU1NFUlQoMCA8PSBwb3NpdGlvbiAmJiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocG9zaXRpb24pIDwgbV9jb29raWVWZWN0b3Iuc2l6ZSgpKTsKLSAgICBSZWZQdHI8UGFyc2Vk
Q29va2llPiBwcmV2Q29va2llID0gbV9jb29raWVWZWN0b3JbcG9zaXRpb25dOwotICAgIG1fY29v
a2llVmVjdG9yLnJlbW92ZShwb3NpdGlvbik7Ci0KLSAgICBpZiAocHJldkNvb2tpZSA9PSBtX29s
ZGVzdENvb2tpZSkKLSAgICAgICAgdXBkYXRlT2xkZXN0Q29va2llKCk7Ci0gICAgZWxzZSBpZiAo
cHJldkNvb2tpZSAhPSBjb29raWUpIHsKLSAgICAgICAgLy8gVGhlIGNvb2tpZSB3ZSB1c2VkIHRv
IHNlYXJjaCBpcyBmb3JjZSBleHBpcmVkLCB3ZSBtdXN0IGRvIHRoZSBzYW1lCi0gICAgICAgIC8v
IHRvIHRoZSBjb29raWUgaW4gbWVtb3J5IHRvby4KLSAgICAgICAgaWYgKGNvb2tpZS0+aXNGb3Jj
ZUV4cGlyZWQoKSkKLSAgICAgICAgICAgIHByZXZDb29raWUtPmZvcmNlRXhwaXJlKCk7Ci0gICAg
fQotCi0gICAgaWYgKCFwcmV2Q29va2llLT5pc1Nlc3Npb24oKSkKLSAgICAgICAgY29va2llTWFu
YWdlcigpLnJlbW92ZWRDb29raWUoKTsKLSAgICByZXR1cm4gcHJldkNvb2tpZTsKLX0KLQotUGFz
c1JlZlB0cjxQYXJzZWRDb29raWU+IENvb2tpZU1hcDo6cmVtb3ZlQ29va2llKGNvbnN0IFBhc3NS
ZWZQdHI8UGFyc2VkQ29va2llPiBjb29raWUsIENvb2tpZUZpbHRlciBmaWx0ZXIpCi17Ci0gICAg
c2l6ZV90IGNvb2tpZUNvdW50ID0gbV9jb29raWVWZWN0b3Iuc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBjb29raWVDb3VudDsgKytwb3NpdGlvbikgewot
ICAgICAgICBpZiAobV9jb29raWVWZWN0b3JbcG9zaXRpb25dLT5uYW1lKCkgPT0gY29va2llLT5u
YW1lKCkgJiYgbV9jb29raWVWZWN0b3JbcG9zaXRpb25dLT5wYXRoKCkgPT0gY29va2llLT5wYXRo
KCkpIHsKLSAgICAgICAgICAgIGlmIChmaWx0ZXIgPT0gTm9IdHRwT25seUNvb2tpZSAmJiBtX2Nv
b2tpZVZlY3Rvcltwb3NpdGlvbl0tPmlzSHR0cE9ubHkoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIHJldHVybiByZW1vdmVDb29raWVBdEluZGV4KHBvc2l0aW9uLCBj
b29raWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1Db29raWVNYXAq
IENvb2tpZU1hcDo6Z2V0U3ViZG9tYWluTWFwKGNvbnN0IFN0cmluZyYgc3ViZG9tYWluKQotewot
I2lmIEVOQUJMRV9DT09LSUVfREVCVUcKLSAgICBpZiAoIW1fc3ViZG9tYWlucy5jb250YWlucyhz
dWJkb21haW4pKQotICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtICVzIGRvZXMgbm90IGV4
aXN0IGluIHRoaXMgbWFwIiwgc3ViZG9tYWluLnV0ZjgoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAg
cmV0dXJuIG1fc3ViZG9tYWlucy5nZXQoc3ViZG9tYWluKTsKLX0KLQotdm9pZCBDb29raWVNYXA6
OmFkZFN1YmRvbWFpbk1hcChjb25zdCBTdHJpbmcmIHN1YmRvbWFpbiwgQ29va2llTWFwKiBuZXdE
b21haW4pCi17Ci0gICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBBdHRlbXB0aW5nIHRvIGFkZCBz
dWJkb21haW4gLSAlcyIsIHN1YmRvbWFpbi51dGY4KCkuZGF0YSgpKTsKLSAgICBtX3N1YmRvbWFp
bnMuYWRkKHN1YmRvbWFpbiwgbmV3RG9tYWluKTsKLX0KLQotdm9pZCBDb29raWVNYXA6OmdldEFs
bENvb2tpZXMoVmVjdG9yPFJlZlB0cjxQYXJzZWRDb29raWU+ID4qIHN0YWNrT2ZDb29raWVzKQot
ewotICAgIENvb2tpZUxvZygiQ29va2llTWFwIC0gQXR0ZW1wdGluZyB0byBjb3B5IE1hcDolcyBj
b29raWVzIHdpdGggJWQgY29va2llcyBpbnRvIHZlY3RvcnMiLCBtX25hbWUudXRmOCgpLmRhdGEo
KSwgbV9jb29raWVWZWN0b3Iuc2l6ZSgpKTsKLQotICAgIHN0YWNrT2ZDb29raWVzLT5yZXNlcnZl
Q2FwYWNpdHkoc3RhY2tPZkNvb2tpZXMtPnNpemUoKSArIG1fY29va2llVmVjdG9yLnNpemUoKSk7
Ci0KLSAgICBzaXplX3QgcG9zaXRpb24gPSAwOwotICAgIHdoaWxlIChwb3NpdGlvbiA8IG1fY29v
a2llVmVjdG9yLnNpemUoKSkgewotICAgICAgICBSZWZQdHI8UGFyc2VkQ29va2llPiBuZXdDb29r
aWUgPSBtX2Nvb2tpZVZlY3Rvcltwb3NpdGlvbl07Ci0gICAgICAgIGlmIChuZXdDb29raWUtPmhh
c0V4cGlyZWQoKSkgewotICAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgd2UgZG9uJ3QgZGVsZXRl
IGZyb20gYmFja2luZ3N0b3JlLiBUaGVzZSBleHBpcmVkIGNvb2tpZXMgd2lsbCBiZQotICAgICAg
ICAgICAgLy8gZGVsZXRlZCB3aGVuIG1hbmFnZXIgbG9hZHMgdGhlIGJhY2tpbmdzdG9yZSBhZ2Fp
bi4KLSAgICAgICAgICAgIHJlbW92ZUNvb2tpZUF0SW5kZXgocG9zaXRpb24sIG5ld0Nvb2tpZSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGFja09mQ29va2llcy0+YXBwZW5kKG5l
d0Nvb2tpZSk7Ci0gICAgICAgICAgICBwb3NpdGlvbisrOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBzdGFjayBvZiBjb29raWVzIG5vdyBoYXZlICVkIGNv
b2tpZXMgaW4gaXQiLCAoKnN0YWNrT2ZDb29raWVzKS5zaXplKCkpOwotfQotCi1QYXNzUmVmUHRy
PFBhcnNlZENvb2tpZT4gQ29va2llTWFwOjpyZW1vdmVPbGRlc3RDb29raWUoKQotewotICAgIC8v
IEZJWE1FOiBNYWtlIHN1cmUgaXQgZmluZHMgdGhlIEdMT0JBTCBvbGRlc3QgY29va2llLCBub3Qg
dGhlIGZpcnN0IG9sZGVzdGNvb2tpZSBpdCBmaW5kcy4KLSAgICBSZWZQdHI8UGFyc2VkQ29va2ll
PiBvbGRlc3RDb29raWUgPSBtX29sZGVzdENvb2tpZTsKLQotICAgIC8vIElmIHRoaXMgbWFwIGhh
cyBhbiBvbGRlc3RDb29raWUsIHJlbW92ZSBpdC4gSWYgbm90LCBkbyBhIERGUyB0byBzZWFyY2gg
Zm9yIGEgY2hpbGQgdGhhdCBkb2VzCi0gICAgaWYgKCFvbGRlc3RDb29raWUpIHsKLQotICAgICAg
ICBDb29raWVMb2coIkNvb2tpZU1hcCAtIG5vIG9sZGVzdENvb2tpZSBleGlzdCIpOwotCi0gICAg
ICAgIC8vIEJhc2UgY2FzZSBpcyBpZiB0aGUgbWFwIGhhcyBubyBjaGlsZCBhbmQgbm8gY29va2ll
cywgd2UgcmV0dXJuIGEgbnVsbC4KLSAgICAgICAgaWYgKCFtX3N1YmRvbWFpbnMuc2l6ZSgpKSB7
Ci0gICAgICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIG5vIHN1YmRvbWFpbnMsIGJhc2Ug
Y2FzZSByZWFjaGVkLCByZXR1cm4gMCIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IH0KLQotICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGxvb2tpbmcgaW50byBzdWJkb21h
aW5zIik7Ci0KLSAgICAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJh
dG9yIGl0ID0gbV9zdWJkb21haW5zLmJlZ2luKCk7IGl0ICE9IG1fc3ViZG9tYWlucy5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgb2xkZXN0Q29va2llID0gaXQtPnZhbHVlLT5yZW1vdmVPbGRl
c3RDb29raWUoKTsKLSAgICAgICAgICAgIGlmIChvbGRlc3RDb29raWUpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBDb29raWVMb2coIkNv
b2tpZU1hcCAtIG9sZGVzdENvb2tpZSBleGlzdC4iKTsKLSAgICAgICAgb2xkZXN0Q29va2llID0g
cmVtb3ZlQ29va2llKG1fb2xkZXN0Q29va2llKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb2xkZXN0
Q29va2llOwotfQotCi12b2lkIENvb2tpZU1hcDo6dXBkYXRlT2xkZXN0Q29va2llKCkKLXsKLSAg
ICBzaXplX3Qgc2l6ZSA9IG1fY29va2llVmVjdG9yLnNpemUoKTsKLSAgICBpZiAoIXNpemUpIHsK
LSAgICAgICAgbV9vbGRlc3RDb29raWUgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbV9vbGRlc3RDb29raWUgPSBtX2Nvb2tpZVZlY3RvclswXTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAobV9vbGRlc3RDb29raWUtPmxhc3RB
Y2Nlc3NlZCgpID4gbV9jb29raWVWZWN0b3JbaV0tPmxhc3RBY2Nlc3NlZCgpKQotICAgICAgICAg
ICAgbV9vbGRlc3RDb29raWUgPSBtX2Nvb2tpZVZlY3RvcltpXTsKLSAgICB9Ci19Ci0KLXZvaWQg
Q29va2llTWFwOjpkZWxldGVBbGxDb29raWVzQW5kRG9tYWlucygpCi17Ci0gICAgZGVwcmVjYXRl
ZERlbGV0ZUFsbFZhbHVlcyhtX3N1YmRvbWFpbnMpOwotICAgIG1fc3ViZG9tYWlucy5jbGVhcigp
OwotICAgIG1fY29va2llVmVjdG9yLmNsZWFyKCk7Ci0KLSAgICBtX29sZGVzdENvb2tpZSA9IDA7
Ci19Ci0KLXZvaWQgQ29va2llTWFwOjpnZXRBbGxDaGlsZENvb2tpZXMoVmVjdG9yPFJlZlB0cjxQ
YXJzZWRDb29raWU+ID4qIHN0YWNrT2ZDb29raWVzKQotewotICAgIENvb2tpZUxvZygiQ29va2ll
TWFwIC0gZ2V0QWxsQ2hpbGRDb29raWVzIGluIE1hcCAtICVzIiwgZ2V0TmFtZSgpLnV0ZjgoKS5k
YXRhKCkpOwotICAgIGdldEFsbENvb2tpZXMoc3RhY2tPZkNvb2tpZXMpOwotICAgIGZvciAoSGFz
aE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IG1fc3ViZG9tYWlucy5iZWdp
bigpOyBpdCAhPSBtX3N1YmRvbWFpbnMuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS0+
Z2V0QWxsQ2hpbGRDb29raWVzKHN0YWNrT2ZDb29raWVzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nv
b2tpZU1hcC5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L0Nvb2tpZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIEp1bGllbiBDaGFmZnJhaXggPGp1bGllbi5jaGFmZnJhaXhAZ21h
aWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb29raWVNYXBfaAotI2RlZmluZSBD
b29raWVNYXBfaAotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gQ29va2llRmls
dGVyIHsKLSAgICBOb0h0dHBPbmx5Q29va2llLAotICAgIFdpdGhIdHRwT25seUNvb2tpZXMsCi19
OwotCi1jbGFzcyBQYXJzZWRDb29raWU7Ci0KLS8qIEEgY29va2llIG1hcCBpcyBhIG5vZGUgaW4g
dGhlIHRyZWUgaGVsZCBieSBDb29raWVNYW5hZ2VyIHRoYXQgcmVwcmVzZW50cwotICogY29va2ll
cyB0aGF0IG1hdGNoZXMgYSBjb21tb24gZG9tYWluLgotICoKLSAqIEEgQ29va2llTWFwIGhvbGRz
IHJlZmVyZW5jZSB0byB0aGUgY29va2llcyB0aGF0IGl0IGNvbnRhaW5zIGFuZCB0aGUgY2hpbGQK
LSAqIGRvbWFpbnMgdGhhdCBleGlzdCB3aXRoaW4gdGhlIHRyZWUuCi0gKgotICogVGhlIG51bWJl
ciBvZiBjb29raWUgcGVyIGhvc3QgaXMgbGltaXRlZCBieSBDb29raWVNYW5hZ2VyOjpzX21heENv
b2tpZUNvdW50UGVySG9zdAotICovCi0KLWNsYXNzIENvb2tpZU1hcCB7Ci0KLXB1YmxpYzoKLSAg
ICBDb29raWVNYXAoY29uc3QgU3RyaW5nJiBuYW1lID0gIiIpOwotICAgIH5Db29raWVNYXAoKTsK
LQotICAgIHVuc2lnbmVkIGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb29raWVWZWN0b3Iuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
OyB9Ci0KLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlIGNhbmRpZGF0ZUNvb2tpZSBpcyByZWpl
Y3RlZC4KLSAgICBib29sIGFkZE9yUmVwbGFjZUNvb2tpZShQYXNzUmVmUHRyPFBhcnNlZENvb2tp
ZT4gcHJwQ2FuZGlkYXRlQ29va2llLCBSZWZQdHI8UGFyc2VkQ29va2llPiYgcmVwbGFjZWRDb29r
aWUsIENvb2tpZUZpbHRlciA9IFdpdGhIdHRwT25seUNvb2tpZXMpOwotCi0gICAgLy8gTmVlZCB0
byByZXR1cm4gdGhlIHJlZmVyZW5jZSB0byB0aGUgcmVtb3ZlZCBjb29raWUgc28gbWFuYWdlciBj
YW4gZGVhbCB3aXRoIGl0IChnYXJiYWdlIGNvbGxlY3QpLgotICAgIFBhc3NSZWZQdHI8UGFyc2Vk
Q29va2llPiByZW1vdmVDb29raWUoY29uc3QgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+LCBDb29r
aWVGaWx0ZXIgPSBXaXRoSHR0cE9ubHlDb29raWVzKTsKLQotICAgIC8vIFJldHVybnMgYSBtYXAg
d2l0aCB0aGF0IGdpdmVuIHN1YmRvbWFpbi4KLSAgICBDb29raWVNYXAqIGdldFN1YmRvbWFpbk1h
cChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFkZFN1YmRvbWFpbk1hcChjb25zdCBTdHJpbmcm
LCBDb29raWVNYXAqKTsKLSAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXNBbmREb21haW5zKCk7Ci0K
LSAgICB2b2lkIGdldEFsbENvb2tpZXMoVmVjdG9yPFJlZlB0cjxQYXJzZWRDb29raWU+ID4qKTsK
LSAgICB2b2lkIGdldEFsbENoaWxkQ29va2llcyhWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4g
Piogc3RhY2tPZkNvb2tpZXMpOwotICAgIFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiByZW1vdmVP
bGRlc3RDb29raWUoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZU9sZGVzdENvb2tpZSgp
OwotICAgIFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiByZW1vdmVDb29raWVBdEluZGV4KGludCBw
b3NpdGlvbiwgY29uc3QgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+KTsKLQotICAgIFZlY3RvcjxS
ZWZQdHI8UGFyc2VkQ29va2llPiA+IG1fY29va2llVmVjdG9yOwotICAgIC8vIFRoZSBrZXkgaXMg
YSBzdWJzZWN0aW9uIG9mIHRoZSBkb21haW4uCi0gICAgLy8gZXg6IGlmIGluc2VydGluZyBhY2Nv
dW50cy5nb29nbGUuY29tICYgdGhpcyBjb29raWVtYXAgaXMgImNvbSIsIHRoaXMgc3ViZG9tYWlu
IG1hcCB3aWxsIGNvbnRhaW4gImdvb2dsZSIKLSAgICAvLyB0aGUgImdvb2dsZSIgY29va2llbWFw
IHdpbGwgY29udGFpbiAiYWNjb3VudHMiIGluIGl0cyBzdWJkb21haW4gbWFwLgotICAgIEhhc2hN
YXA8U3RyaW5nLCBDb29raWVNYXAqPiBtX3N1YmRvbWFpbnM7Ci0KLSAgICAvLyBTdG9yZSB0aGUg
b2xkZXN0IGNvb2tpZSB0byBzcGVlZCB1cCBMUlUgY2hlY2tzLgotICAgIFJlZlB0cjxQYXJzZWRD
b29raWU+IG1fb2xkZXN0Q29va2llOwotICAgIGNvbnN0IFN0cmluZyBtX25hbWU7Ci0KLSAgICAv
LyBGSVhNRSA6IHNob3VsZCBoYXZlIGEgbV9zaG91bGRVcGRhdGUgZmxhZyB0byB1cGRhdGUgdGhl
IG5ldHdvcmsgbGF5ZXIgb25seSB3aGVuIHRoZSBtYXAgaGFzIGNoYW5nZWQuCi19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDb29raWVNYXBfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llUGFyc2VyLmNwcAko
cmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9D
b29raWVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQzOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAcGxleW8uY29t
PgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8gCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJDb29raWVQYXJzZXIuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQYXJz
ZWRDb29raWUuaCIKLSNpbmNsdWRlIDxuZXR3b3JrL0RvbWFpblRvb2xzLmg+Ci0jaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0j
ZGVmaW5lIExPR19FUlJPUl9BTkRfUkVUVVJOKGZvcm1hdCwgLi4uKSBcCi0gICAgeyBcCi0gICAg
ICAgIExPR19FUlJPUihmb3JtYXQsICMjIF9fVkFfQVJHU19fKTsgXAotICAgICAgICByZXR1cm4g
MDsgXAotICAgIH0KLQotc3RhdGljIGlubGluZSBib29sIGlzQ29va2llSGVhZGVyU2VwYXJhdG9y
KFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuIChjID09ICdccicgfHwgYyA9PSdcbicpOwotfQotCi1z
dGF0aWMgaW5saW5lIGJvb2wgaXNMaWdodHdlaWdodFNwYWNlKFVDaGFyIGMpCi17Ci0gICAgcmV0
dXJuIChjID09ICcgJyB8fCBjID09ICdcdCcpOwotfQotCi1Db29raWVQYXJzZXI6OkNvb2tpZVBh
cnNlcihjb25zdCBVUkwmIGRlZmF1bHRDb29raWVVUkwpCi0gICAgOiBtX2RlZmF1bHRDb29raWVV
UkwoZGVmYXVsdENvb2tpZVVSTCkKLXsKLSAgICBtX2RlZmF1bHRDb29raWVIb3N0ID0gZGVmYXVs
dENvb2tpZVVSTC5ob3N0KCk7Ci0gICAgbV9kZWZhdWx0RG9tYWluSXNJUEFkZHJlc3MgPSBmYWxz
ZTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIGhvc3REb21haW5DYW5vbmljYWwg
PSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Z2V0Q2Fub25pY2FsSVBGb3JtYXQobV9kZWZhdWx0Q29v
a2llSG9zdCk7Ci0gICAgaWYgKCFob3N0RG9tYWluQ2Fub25pY2FsLmVtcHR5KCkpIHsKLSAgICAg
ICAgbV9kZWZhdWx0Q29va2llSG9zdCA9IGhvc3REb21haW5DYW5vbmljYWw7Ci0gICAgICAgIG1f
ZGVmYXVsdERvbWFpbklzSVBBZGRyZXNzID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLUNvb2tpZVBhcnNl
cjo6fkNvb2tpZVBhcnNlcigpCi17Ci19Ci0KLVZlY3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+
IENvb2tpZVBhcnNlcjo6cGFyc2UoY29uc3QgU3RyaW5nJiBjb29raWVzKQotewotICAgIHVuc2ln
bmVkIGNvb2tpZVN0YXJ0LCBjb29raWVFbmQgPSAwOwotICAgIGRvdWJsZSBjdXJUaW1lID0gY3Vy
cmVudFRpbWUoKTsKLSAgICBWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4sIDQ+IHBhcnNlZENv
b2tpZXM7Ci0KLSAgICB1bnNpZ25lZCBjb29raWVzTGVuZ3RoID0gY29va2llcy5sZW5ndGgoKTsK
LSAgICBpZiAoIWNvb2tpZXNMZW5ndGgpIC8vIENvZGUgYmVsb3cgZG9lc24ndCBoYW5kbGUgdGhp
cyBjYXNlCi0gICAgICAgIHJldHVybiBwYXJzZWRDb29raWVzOwotCi0gICAgLy8gSXRlcmF0ZSBv
dmVyIHRoZSBoZWFkZXIgdG8gcGFyc2UgYWxsIHRoZSBjb29raWVzLgotICAgIHdoaWxlIChjb29r
aWVFbmQgPD0gY29va2llc0xlbmd0aCkgewotICAgICAgICBjb29raWVTdGFydCA9IGNvb2tpZUVu
ZDsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmQgYSBjb29raWUgc2VwYXJhdG9yLgotICAgICAg
ICB3aGlsZSAoY29va2llRW5kIDw9IGNvb2tpZXNMZW5ndGggJiYgIWlzQ29va2llSGVhZGVyU2Vw
YXJhdG9yKGNvb2tpZXNbY29va2llRW5kXSkpCi0gICAgICAgICAgICBjb29raWVFbmQrKzsKLQot
ICAgICAgICAvLyBEZXRlY3QgYW4gZW1wdHkgY29va2llIGFuZCBnbyB0byB0aGUgbmV4dCBvbmUu
Ci0gICAgICAgIGlmIChjb29raWVTdGFydCA9PSBjb29raWVFbmQpIHsKLSAgICAgICAgICAgICsr
Y29va2llRW5kOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoY29va2llRW5kIDwgY29va2llc0xlbmd0aCAmJiBpc0Nvb2tpZUhlYWRlclNlcGFyYXRvcihj
b29raWVzW2Nvb2tpZUVuZF0pKQotICAgICAgICAgICAgKytjb29raWVFbmQ7Ci0KLSAgICAgICAg
UmVmUHRyPFBhcnNlZENvb2tpZT4gY29va2llID0gcGFyc2VPbmVDb29raWUoY29va2llcywgY29v
a2llU3RhcnQsIGNvb2tpZUVuZCAtIDEsIGN1clRpbWUpOwotICAgICAgICBpZiAoY29va2llKQot
ICAgICAgICAgICAgcGFyc2VkQ29va2llcy5hcHBlbmQoY29va2llKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHBhcnNlZENvb2tpZXM7Ci19Ci0KLVBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiBDb29raWVQ
YXJzZXI6OnBhcnNlT25lQ29va2llKGNvbnN0IFN0cmluZyYgY29va2llKQotewotICAgIHJldHVy
biBwYXJzZU9uZUNvb2tpZShjb29raWUsIDAsIGNvb2tpZS5sZW5ndGgoKSAtIDEsIGN1cnJlbnRU
aW1lKCkpOwotfQotCi0vLyBUaGUgY29va2llIFN0cmluZyBwYXNzZWQgaW50byB0aGlzIG1ldGhv
ZCB3aWxsIG9ubHkgY29udGlhbiB0aGUgbmFtZSB2YWx1ZSBwYWlycyBhcyB3ZWxsIGFzIG90aGVy
IHJlbGF0ZWQgY29va2llCi0vLyBhdHRyaWJ1dGVzIHN1Y2ggYXMgbWF4LWFnZSBhbmQgZG9tYWlu
LiBTZXQtQ29va2llIHNob3VsZCBuZXZlciBiZSBwYXJ0IG9mIHRoaXMgc3RyaW5nLgotUGFzc1Jl
ZlB0cjxQYXJzZWRDb29raWU+IENvb2tpZVBhcnNlcjo6cGFyc2VPbmVDb29raWUoY29uc3QgU3Ry
aW5nJiBjb29raWUsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGRvdWJsZSBjdXJUaW1l
KQotewotICAgIFJlZlB0cjxQYXJzZWRDb29raWU+IHJlcyA9IFBhcnNlZENvb2tpZTo6Y3JlYXRl
KGN1clRpbWUpOwotCi0gICAgaWYgKCFyZXMpCi0gICAgICAgIExPR19FUlJPUl9BTkRfUkVUVVJO
KCJPdXQgb2YgbWVtb3J5Iik7Ci0KLSAgICByZXMtPnNldFByb3RvY29sKG1fZGVmYXVsdENvb2tp
ZVVSTC5wcm90b2NvbCgpKTsKLQotICAgIC8vIFBhcnNlIFtOQU1FICI9Il0gVkFMVUUKLSAgICB1
bnNpZ25lZCB0b2tlbkVuZCA9IHN0YXJ0OyAvLyBUb2tlbiBlbmQgY29udGFpbnMgdGhlIHBvc2l0
aW9uIG9mIHRoZSAnPScgb3IgdGhlIGVuZCBvZiBhIHRva2VuCi0gICAgdW5zaWduZWQgcGFpckVu
ZCA9IHN0YXJ0OyAvLyBQYWlyIGVuZCBjb250YWlucyBhbHdheXMgdGhlIHBvc2l0aW9uIG9mIHRo
ZSAnOycKLQotICAgIC8vIEZpbmQgdGhlIGZpcnN0ICc7JyB3aGljaCBpcyBub3QgZG91YmxlLXF1
b3RlZCBhbmQgdGhlICc9JyAoaWYgdGhleSBleGlzdCkuCi0gICAgYm9vbCBmb3VuZEVxdWFsID0g
ZmFsc2U7Ci0gICAgd2hpbGUgKHBhaXJFbmQgPCBlbmQgJiYgY29va2llW3BhaXJFbmRdICE9ICc7
JykgewotICAgICAgICBpZiAoY29va2llW3BhaXJFbmRdID09ICc9JykgewotICAgICAgICAgICAg
aWYgKHRva2VuRW5kID09IHN0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgdG9rZW5FbmQgPSBwYWly
RW5kOwotICAgICAgICAgICAgICAgIGZvdW5kRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKGNvb2tpZVtwYWlyRW5kXSA9PSAnIicpIHsKLSAgICAgICAgICAg
IHNpemVfdCBzZWNvbmRRdW90ZVBvc2l0aW9uID0gY29va2llLmZpbmQoJyInLCBwYWlyRW5kICsg
MSk7Ci0gICAgICAgICAgICBpZiAoc2Vjb25kUXVvdGVQb3NpdGlvbiAhPSBub3RGb3VuZCAmJiBz
ZWNvbmRRdW90ZVBvc2l0aW9uIDw9IGVuZCkgewotICAgICAgICAgICAgICAgIHBhaXJFbmQgPSBz
ZWNvbmRRdW90ZVBvc2l0aW9uICsgMTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwYWlyRW5kKys7Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgdG9rZW5TdGFydCA9IHN0YXJ0OwotCi0gICAgYm9vbCBoYXNOYW1lID0gZmFsc2U7IC8v
IFRoaXMgaXMgYSBoYWNrIHRvIGF2b2lkIGNoYW5naW5nIHRvbyBtdWNoIGluIHRoaXMgYnJ1dGFs
bHkgYnJpdHRsZSBjb2RlLgotICAgIGlmICh0b2tlbkVuZCAhPSBzdGFydCkgewotICAgICAgICAv
LyBUaGVyZSBpcyBhICc9JyBzbyBwYXJzZSB0aGUgTkFNRQotICAgICAgICB1bnNpZ25lZCBuYW1l
RW5kID0gdG9rZW5FbmQ7Ci0KLSAgICAgICAgLy8gVGhlIHRva2VuRW5kIGlzIHRoZSBwb3NpdGlv
biBvZiB0aGUgJz0nIHNvIHRoZSBuYW1lRW5kIGlzIG9uZSBsZXNzCi0gICAgICAgIG5hbWVFbmQt
LTsKLQotICAgICAgICAvLyBSZW1vdmUgbGlnaHR3ZWlnaHQgc3BhY2VzLgotICAgICAgICB3aGls
ZSAobmFtZUVuZCAmJiBpc0xpZ2h0d2VpZ2h0U3BhY2UoY29va2llW25hbWVFbmRdKSkKLSAgICAg
ICAgICAgIG5hbWVFbmQtLTsKLQotICAgICAgICB3aGlsZSAodG9rZW5TdGFydCA8IG5hbWVFbmQg
JiYgaXNMaWdodHdlaWdodFNwYWNlKGNvb2tpZVt0b2tlblN0YXJ0XSkpCi0gICAgICAgICAgICB0
b2tlblN0YXJ0Kys7Ci0KLSAgICAgICAgaWYgKG5hbWVFbmQgKyAxIDw9IHRva2VuU3RhcnQpCi0g
ICAgICAgICAgICBMT0dfRVJST1JfQU5EX1JFVFVSTigiRW1wdHkgbmFtZS4gUmVqZWN0aW5nIHRo
ZSBjb29raWUiKTsKLQotICAgICAgICBTdHJpbmcgbmFtZSA9IGNvb2tpZS5zdWJzdHJpbmcodG9r
ZW5TdGFydCwgbmFtZUVuZCArIDEgLSBzdGFydCk7Ci0gICAgICAgIHJlcy0+c2V0TmFtZShuYW1l
KTsKLSAgICAgICAgaGFzTmFtZSA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gTm93IHBhcnNlIHRo
ZSBWQUxVRQotICAgIHRva2VuU3RhcnQgPSB0b2tlbkVuZCArIDE7Ci0gICAgaWYgKCFoYXNOYW1l
KQotICAgICAgICAtLXRva2VuU3RhcnQ7Ci0KLSAgICAvLyBTa2lwIGxpZ2h0d2VpZ2h0IHNwYWNl
cyBpbiBvdXIgdG9rZW4KLSAgICB3aGlsZSAodG9rZW5TdGFydCA8IHBhaXJFbmQgJiYgaXNMaWdo
dHdlaWdodFNwYWNlKGNvb2tpZVt0b2tlblN0YXJ0XSkpCi0gICAgICAgIHRva2VuU3RhcnQrKzsK
LQotICAgIHRva2VuRW5kID0gcGFpckVuZDsKLSAgICB3aGlsZSAodG9rZW5FbmQgPiB0b2tlblN0
YXJ0ICYmIGlzTGlnaHR3ZWlnaHRTcGFjZShjb29raWVbdG9rZW5FbmQgLSAxXSkpCi0gICAgICAg
IHRva2VuRW5kLS07Ci0KLSAgICBTdHJpbmcgdmFsdWU7Ci0gICAgaWYgKHRva2VuRW5kID09IHRv
a2VuU3RhcnQpIHsKLSAgICAgICAgLy8gRmlyZWZveCBhY2NlcHRzIGVtcHR5IHZhbHVlIHNvIHdl
IHdpbGwgZG8gdGhlIHNhbWUKLSAgICAgICAgdmFsdWUgPSBTdHJpbmcoKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgdmFsdWUgPSBjb29raWUuc3Vic3RyaW5nKHRva2VuU3RhcnQsIHRva2VuRW5kIC0g
dG9rZW5TdGFydCk7Ci0KLSAgICBpZiAoaGFzTmFtZSkKLSAgICAgICAgcmVzLT5zZXRWYWx1ZSh2
YWx1ZSk7Ci0gICAgZWxzZSBpZiAoZm91bmRFcXVhbCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ZWxzZQotICAgICAgICByZXMtPnNldE5hbWUodmFsdWUpOyAvLyBObyBOQU1FPVZBTFVFLCBvbmx5
IE5BTUUKLQotICAgIHdoaWxlIChwYWlyRW5kIDwgZW5kKSB7Ci0gICAgICAgIC8vIFN3aXRjaCB0
byB0aGUgbmV4dCBwYWlyIGFzIHBhaXJFbmQgaXMgb24gdGhlICc7JyBhbmQgZmFzdC1mb3J3YXJk
IGFueSBsaWdodHdlaWdodCBzcGFjZXMuCi0gICAgICAgIHBhaXJFbmQrKzsKLSAgICAgICAgd2hp
bGUgKHBhaXJFbmQgPCBlbmQgJiYgaXNMaWdodHdlaWdodFNwYWNlKGNvb2tpZVtwYWlyRW5kXSkp
Ci0gICAgICAgICAgICBwYWlyRW5kKys7Ci0KLSAgICAgICAgdG9rZW5TdGFydCA9IHBhaXJFbmQ7
Ci0gICAgICAgIHRva2VuRW5kID0gdG9rZW5TdGFydDsgLy8gaW5pdGlhbGl6ZSB0b2tlbiBlbmQg
dG8gY2F0Y2ggZmlyc3QgJz0nCi0KLSAgICAgICAgd2hpbGUgKHBhaXJFbmQgPCBlbmQgJiYgY29v
a2llW3BhaXJFbmRdICE9ICc7JykgewotICAgICAgICAgICAgaWYgKHRva2VuRW5kID09IHRva2Vu
U3RhcnQgJiYgY29va2llW3BhaXJFbmRdID09ICc9JykKLSAgICAgICAgICAgICAgICB0b2tlbkVu
ZCA9IHBhaXJFbmQ7Ci0gICAgICAgICAgICBwYWlyRW5kKys7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBGSVhNRSA6IHNob3VsZCB3ZSBza2lwIGxpZ2h0d2VpZ2h0IHNwYWNlcyBoZXJlID8KLQot
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0b2tlbkVuZCAtIHRva2VuU3RhcnQ7Ci0gICAgICAg
IHVuc2lnbmVkIHRva2VuU3RhcnRTdmcgPSB0b2tlblN0YXJ0OwotCi0gICAgICAgIFN0cmluZyBw
YXJzZWRWYWx1ZTsKLSAgICAgICAgaWYgKHRva2VuU3RhcnQgIT0gdG9rZW5FbmQpIHsKLSAgICAg
ICAgICAgIC8vIFRoZXJlIGlzIGFuIGVxdWFsIHNpZ24gc28gcmVtb3ZlIGxpZ2h0d2VpZ2h0IHNw
YWNlcyBpbiBWQUxVRQotICAgICAgICAgICAgdG9rZW5TdGFydCA9IHRva2VuRW5kICsgMTsKLSAg
ICAgICAgICAgIHdoaWxlICh0b2tlblN0YXJ0IDwgcGFpckVuZCAmJiBpc0xpZ2h0d2VpZ2h0U3Bh
Y2UoY29va2llW3Rva2VuU3RhcnRdKSkKLSAgICAgICAgICAgICAgICB0b2tlblN0YXJ0Kys7Ci0K
LSAgICAgICAgICAgIHRva2VuRW5kID0gcGFpckVuZDsKLSAgICAgICAgICAgIHdoaWxlICh0b2tl
bkVuZCA+IHRva2VuU3RhcnQgJiYgaXNMaWdodHdlaWdodFNwYWNlKGNvb2tpZVt0b2tlbkVuZCAt
IDFdKSkKLSAgICAgICAgICAgICAgICB0b2tlbkVuZC0tOwotCi0gICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IGNvb2tpZS5zdWJzdHJpbmcodG9rZW5TdGFydCwgdG9rZW5FbmQgLSB0b2tlblN0YXJ0
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBwYXJzZWRWYWx1ZSBp
cyBlbXB0eSwgaW5pdGlhbGlzZSBpdCBpbiBjYXNlIHdlIG5lZWQgaXQKLSAgICAgICAgICAgIHBh
cnNlZFZhbHVlID0gU3RyaW5nKCk7Ci0gICAgICAgICAgICAvLyBIYW5kbGUgYSB0b2tlbiB3aXRo
b3V0IHZhbHVlLgotICAgICAgICAgICAgbGVuZ3RoID0gcGFpckVuZCAtIHRva2VuU3RhcnQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBEZXRlY3Qgd2hpY2ggImNvb2tpZS1hdiIgaXMgcGFyc2Vk
Ci0gICAgICAgIC8vIExvb2sgYXQgdGhlIGZpcnN0IGNoYXIgdGhlbiBwYXJzZSB0aGUgd2hvbGUg
Zm9yIHBlcmZvcm1hbmNlIGlzc3VlCi0gICAgICAgIHN3aXRjaCAoY29va2llW3Rva2VuU3RhcnRT
dmddKSB7Ci0gICAgICAgIGNhc2UgJ1AnOgotICAgICAgICBjYXNlICdwJyA6IHsKLSAgICAgICAg
ICAgIGlmIChsZW5ndGggPj0gNCAmJiAoKGNvb2tpZS5maW5kKCJhdGgiLCB0b2tlblN0YXJ0U3Zn
ICsgMSwgZmFsc2UpIC0gdG9rZW5TdGFydFN2ZykgPT0gMSkpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRoZSBwYXRoIHRvIGJlIGRlY29kZWQgdG8gbWF0Y2ggdGhvc2UgcmV0dXJuZWQg
ZnJvbSBVUkw6OnBhdGgoKS4KLSAgICAgICAgICAgICAgICAvLyBUaGUgcGF0aCBhdHRyaWJ1dGUg
bWF5IG9yIG1heSBub3QgaW5jbHVkZSBwZXJjZW50LWVuY29kZWQgY2hhcmFjdGVycy4gRm9ydHVu
YXRlbHkKLSAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcGVyY2VudC1lbmNvZGVk
IGNoYXJhY3RlcnMsIGRlY29kaW5nIHRoZSB1cmwgaXMgYSBuby1vcC4KLSAgICAgICAgICAgICAg
ICByZXMtPnNldFBhdGgoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHBhcnNlZFZhbHVlKSk7Ci0K
LSAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRpc2FibGUgdGhlIGZvbGxvd2luZyBjaGVj
ayBiZWNhdXNlIHNpdGVzIGxpa2UgRmFjZWJvb2sgYW5kCi0gICAgICAgICAgICAgICAgLy8gR21h
aWwgY3VycmVudGx5IGRvIG5vdCBmb2xsb3cgdGhlIHNwZWMuCi0jaWYgMAotICAgICAgICAgICAg
ICAgIC8vIENoZWNrIGlmIHBhdGggYXR0cmlidXRlIGlzIGEgcHJlZml4IG9mIHRoZSByZXF1ZXN0
IFVSSS4KLSAgICAgICAgICAgICAgICBpZiAoIW1fZGVmYXVsdENvb2tpZVVSTC5wYXRoKCkuc3Rh
cnRzV2l0aChyZXMtPnBhdGgoKSkpCi0gICAgICAgICAgICAgICAgICAgIExPR19FUlJPUl9BTkRf
UkVUVVJOKCJJbnZhbGlkIGNvb2tpZSBhdHRyaWJ1dGUgJXMgKHBhdGgpOiBpdCBkb2VzIG5vdCBt
YXRoIHRoZSBVUkwiLCBjb29raWUuYXNjaWkoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgY29va2llIGF0dHJp
YnV0ZSAlcyAocGF0aCkiLCBjb29raWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlICdEJzoKLSAgICAgICAgY2FzZSAnZCcgOiB7
Ci0gICAgICAgICAgICBpZiAobGVuZ3RoID49IDYgJiYgKChjb29raWUuZmluZCgib21haW4iLCB0
b2tlblN0YXJ0U3ZnICsgMSwgZmFsc2UpIC0gdG9rZW5TdGFydFN2ZykgPT0gMSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAocGFyc2VkVmFsdWUubGVuZ3RoKCkgPiAxICYmIHBhcnNlZFZhbHVlWzBd
ID09ICciJyAmJiBwYXJzZWRWYWx1ZVtwYXJzZWRWYWx1ZS5sZW5ndGgoKSAtIDFdID09ICciJykK
LSAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZWRWYWx1ZS5zdWJzdHJpbmco
MSwgcGFyc2VkVmFsdWUubGVuZ3RoKCkgLSAyKTsKLQotICAgICAgICAgICAgICAgIC8vIENoZWNr
IGlmIHRoZSBkb21haW4gY29udGFpbnMgYW4gZW1iZWRkZWQgZG90LgotICAgICAgICAgICAgICAg
IHNpemVfdCBkb3RQb3NpdGlvbiA9IHBhcnNlZFZhbHVlLmZpbmQoIi4iLCAxKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZG90UG9zaXRpb24gPT0gbm90Rm91bmQgfHwgZG90UG9zaXRpb24gPT0gcGFy
c2VkVmFsdWUubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgICAgIExPR19FUlJPUl9BTkRfUkVU
VVJOKCJJbnZhbGlkIGNvb2tpZSBhdHRyaWJ1dGUgJXMgKGRvbWFpbik6IGl0IGRvZXMgbm90IGNv
bnRhaW4gYW4gZW1iZWRkZWQgZG90IiwgY29va2llLmFzY2lpKCkuZGF0YSgpKTsKLQotICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBkb21haW4gZG9lcyBub3Qgc3RhcnQgd2l0aCBhIGRvdCwgYWRk
IG9uZSBmb3Igc2VjdXJpdHkgY2hlY2tzIGFuZCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIGhvc3Qt
b25seSBkb21haW5zCi0gICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGFiLmMuY29tIGRv
c2Ugbm90IGRvbWFpbiBtYXRjaCBiLmMuY29tOwotICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxk
ZXIgcGFyc2VkVmFsdWVCdWlsZGVyOwotICAgICAgICAgICAgICAgIGlmIChwYXJzZWRWYWx1ZVsw
XSAhPSAnLicpCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIuIik7Ci0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVCdWlsZGVyLmFwcGVuZChw
YXJzZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHJlYWxEb21haW4gPSBwYXJzZWRW
YWx1ZUJ1aWxkZXIudG9TdHJpbmcoKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIg
ZGVmYXVsdEhvc3RCdWlsZGVyOwotICAgICAgICAgICAgICAgIGRlZmF1bHRIb3N0QnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIuIik7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdEhvc3RCdWlsZGVyLmFw
cGVuZChtX2RlZmF1bHRDb29raWVIb3N0KTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZGVmYXVs
dEhvc3QgPSBkZWZhdWx0SG9zdEJ1aWxkZXIudG9TdHJpbmcoKTsKLQotICAgICAgICAgICAgICAg
IC8vIFRyeSB0byByZXR1cm4gYW4gY2Fub25pY2FsIGlwIGFkZHJlc3MgaWYgdGhlIGRvbWFpbiBp
cyBhbiBpcAotCi0gICAgICAgICAgICAgICAgYm9vbCBpc0lQQWRkcmVzcyA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgIC8vIFdlIG9ubHkgY2hlY2sgaWYgdGhlIGN1cnJlbnQgZG9tYWluIGlzIGFu
IElQIGFkZHJlc3Mgd2hlbiB0aGUgZGVmYXVsdCBkb21haW4gaXMgYW4gSVAgYWRkcmVzcwotICAg
ICAgICAgICAgICAgIC8vIFdlIGtub3cgaWYgdGhlIGRlZmF1bHQgZG9tYWluIGlzIG5vdCBhbiBJ
UCBhZGRyZXNzIGFuZCB0aGUgY3VycmVudCBkb21haW4gaXMsIGl0IHdvbid0IHN1ZmZpeCBtYXRj
aAotICAgICAgICAgICAgICAgIC8vIElmIGl0IGlzIGFuIElQIEFkZHJlc3MsIHdlIHNob3VsZCB0
cmVhdCBpdCBvbmx5IGlmIGl0IG1hdGNoZXMgdGhlIGhvc3QgZXhhY3RseQotICAgICAgICAgICAg
ICAgIC8vIFdlIGRldGVybWluZSB0aGUgY2Fub25pY2FsIElQIGZvcm1hdCBiZWZvcmUgY29tcGFy
aW5nIGJlY2F1c2UgSVB2NiBjb3VsZCBiZSByZXByZXNlbnRlZCBpbiBtdWx0aXBsZSBmb3JtYXRz
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZGVmYXVsdERvbWFpbklzSVBBZGRyZXNzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIFN0cmluZyByZWFsRG9tYWluQ2Fub25pY2FsID0gQmxhY2tCZXJyeTo6
UGxhdGZvcm06OmdldENhbm9uaWNhbElQRm9ybWF0KHJlYWxEb21haW4pOwotICAgICAgICAgICAg
ICAgICAgICBpZiAocmVhbERvbWFpbkNhbm9uaWNhbC5pc0VtcHR5KCkgfHwgcmVhbERvbWFpbkNh
bm9uaWNhbCAhPSBkZWZhdWx0SG9zdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19FUlJP
Ul9BTkRfUkVUVVJOKCJJbnZhbGlkIGNvb2tpZSBhdHRyaWJ1dGUgJXMgKGRvbWFpbik6IGRvbWFp
biBpcyBJUCBidXQgZG9lcyBub3QgbWF0Y2ggaG9zdCdzIElQIiwgY29va2llLmFzY2lpKCkuZGF0
YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVhbERvbWFpbiA9IHJlYWxEb21haW5DYW5vbmlj
YWw7Ci0gICAgICAgICAgICAgICAgICAgIGlzSVBBZGRyZXNzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVxdWVzdCBob3N0IHNo
b3VsZCBkb21haW4gbWF0Y2ggdGhlIERvbWFpbiBhdHRyaWJ1dGUuCi0gICAgICAgICAgICAgICAg
ICAgIC8vIERvbWFpbiBzdHJpbmcgc3RhcnRzIHdpdGggYSBkb3QsIHNvIGEuYi5jb20gc2hvdWxk
IGRvbWFpbiBtYXRjaCAuYS5iLmNvbS4KLSAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGEgIi4i
IGF0IGJlZ2lubmluZyBvZiBob3N0IG5hbWUsIGJlY2F1c2UgaXQgY2FuIGhhbmRsZSBtYW55IGNh
c2VzIHN1Y2ggYXMKLSAgICAgICAgICAgICAgICAgICAgLy8gYS5iLmNvbSBtYXRjaGVzIGIuY29t
LCBhLmIuY29tIG1hdGNoZXMgLkIuY29tIGFuZCBhLmIuY29tIG1hdGNoZXMgLkEuYi5Db20KLSAg
ICAgICAgICAgICAgICAgICAgLy8gYW5kIHNvIG9uLgotICAgICAgICAgICAgICAgICAgICBpZiAo
IWRlZmF1bHRIb3N0LmVuZHNXaXRoKHJlYWxEb21haW4sIGZhbHNlKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIExPR19FUlJPUl9BTkRfUkVUVVJOKCJJbnZhbGlkIGNvb2tpZSBhdHRyaWJ1dGUg
JXMgKGRvbWFpbik6IGl0IGRvZXMgbm90IGRvbWFpbiBtYXRjaCB0aGUgaG9zdCIsIGNvb2tpZS5h
c2NpaSgpLmRhdGEoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGNoZWNr
IGZvciBhbiBlbWJlZGRlZCBkb3QgaW4gdGhlIHBvcnRpb24gb2Ygc3RyaW5nIGluIHRoZSBob3N0
IG5vdCBpbiB0aGUgZG9tYWluCi0gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCB0byBtYXRjaCBm
aXJlZm94IGJlaGF2aW91ciB3ZSBkbyBub3QuCi0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgd2hldGhlciB0aGUgZG9tYWluIGlzIGEgdG9wIGxldmVsIGRvbWFpbiwgaWYgaXQgaXMgdGhy
b3cgaXQgb3V0Ci0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9wdWJsaWNzdWZmaXgub3Jn
L2xpc3QvCi0gICAgICAgICAgICAgICAgICAgIGlmIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6aXNU
b3BMZXZlbERvbWFpbihyZWFsRG9tYWluKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19F
UlJPUl9BTkRfUkVUVVJOKCJJbnZhbGlkIGNvb2tpZSBhdHRyaWJ1dGUgJXMgKGRvbWFpbik6IGl0
IGRpZCBub3QgcGFzcyB0aGUgdG9wIGxldmVsIGRvbWFpbiBjaGVjayIsIGNvb2tpZS5hc2NpaSgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlcy0+c2V0RG9t
YWluKHJlYWxEb21haW4sIGlzSVBBZGRyZXNzKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBjb29raWUgYXR0cmlidXRlICVzIChkb21haW4p
IiwgY29va2llLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2FzZSAnRScgOgotICAgICAgICBjYXNlICdlJyA6IHsKLSAgICAgICAgICAg
IGlmIChsZW5ndGggPj0gNyAmJiAoKGNvb2tpZS5maW5kKCJ4cGlyZXMiLCB0b2tlblN0YXJ0U3Zn
ICsgMSwgZmFsc2UpIC0gdG9rZW5TdGFydFN2ZykgPT0gMSkpCi0gICAgICAgICAgICAgICAgcmVz
LT5zZXRFeHBpcnkocGFyc2VkVmFsdWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIExPR19FUlJPUigiSW52YWxpZCBjb29raWUgYXR0cmlidXRlICVzIChleHBpcmVzKSIsIGNv
b2tpZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNhc2UgJ00nIDoKLSAgICAgICAgY2FzZSAnbScgOiB7Ci0gICAgICAgICAgICBpZiAo
bGVuZ3RoID49IDcgJiYgKChjb29raWUuZmluZCgiYXgtYWdlIiwgdG9rZW5TdGFydFN2ZyArIDEs
IGZhbHNlKSAtIHRva2VuU3RhcnRTdmcpID09IDEpKQotICAgICAgICAgICAgICAgIHJlcy0+c2V0
TWF4QWdlKHBhcnNlZFZhbHVlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIkludmFsaWQgY29va2llIGF0dHJpYnV0ZSAlcyAobWF4LWFnZSkiLCBjb29raWUu
YXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlICdDJyA6Ci0gICAgICAgIGNhc2UgJ2MnIDogewotICAgICAgICAgICAgaWYgKGxlbmd0
aCA+PSA3ICYmICgoY29va2llLmZpbmQoIm9tbWVudCIsIHRva2VuU3RhcnRTdmcgKyAxLCBmYWxz
ZSkgLSB0b2tlblN0YXJ0U3ZnKSA9PSAxKSkKLSAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qg
aGF2ZSByb29tIGZvciB0aGUgY29tbWVudCBwYXJ0IChhbmQgc28gZG8gTW96aWxsYSkgc28ganVz
dCBsb2cgdGhlIGNvbW1lbnQuCi0gICAgICAgICAgICAgICAgTE9HKE5ldHdvcmssICJDb21tZW50
ICVzIGZvciBQYXJzZWRDb29raWUgOiAlc1xuIiwgcGFyc2VkVmFsdWUuYXNjaWkoKS5kYXRhKCks
IGNvb2tpZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJJbnZhbGlkIGNvb2tpZSBhdHRyaWJ1dGUgJXMgKGNvbW1lbnQpIiwgY29v
a2llLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY2FzZSAnVicgOgotICAgICAgICBjYXNlICd2JyA6IHsKLSAgICAgICAgICAgIGlmIChs
ZW5ndGggPj0gNyAmJiAoKGNvb2tpZS5maW5kKCJlcnNpb24iLCB0b2tlblN0YXJ0U3ZnICsgMSwg
ZmFsc2UpIC0gdG9rZW5TdGFydFN2ZykgPT0gMSkpIHsKLSAgICAgICAgICAgICAgICAvLyBBbHRo
b3VnaCB0aGUgb3V0LW9mLWRhdGVkIENvb2tpZSBTcGVjKFJGQzI5NjUsIGh0dHA6Ly90b29scy5p
ZXRmLm9yZy9odG1sL3JmYzI5NjUpIGRlZmluZWQKLSAgICAgICAgICAgICAgICAvLyB0aGUgdmFs
dWUgb2YgdmVyc2lvbiBjYW4gb25seSBjb250YWluIERJR0lULCBzb21lIHJhbmRvbSBzaXRlcywg
ZS5nLiBodHRwczovL2RldmZvcnVtcy5hcHBsZS5jb20KLSAgICAgICAgICAgICAgICAvLyB3b3Vs
ZCB1c2UgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyB0byBxdW90ZSB0aGUgZGlnaXQuIFNvIHdlIG5l
ZWQgdG8gZ2V0IHJpZCBvZiB0aGVtIGZvciBjb21wbGlhbmNlLgotICAgICAgICAgICAgICAgIGlm
IChwYXJzZWRWYWx1ZS5sZW5ndGgoKSA+IDEgJiYgcGFyc2VkVmFsdWVbMF0gPT0gJyInICYmIHBh
cnNlZFZhbHVlW3BhcnNlZFZhbHVlLmxlbmd0aCgpIC0gMV0gPT0gJyInKQotICAgICAgICAgICAg
ICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlZFZhbHVlLnN1YnN0cmluZygxLCBwYXJzZWRWYWx1
ZS5sZW5ndGgoKSAtIDIpOwotCi0gICAgICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlLnRvSW50
KCkgIT0gMSkKLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SX0FORF9SRVRVUk4oIlBhcnNl
ZENvb2tpZSB2ZXJzaW9uICVkIG5vdCBzdXBwb3J0ZWQgKG9ubHkgc3VwcG9ydCB2ZXJzaW9uPTEp
IiwgcGFyc2VkVmFsdWUudG9JbnQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkludmFsaWQgY29va2llIGF0dHJpYnV0ZSAlcyAodmVyc2lvbikiLCBj
b29raWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjYXNlICdTJyA6Ci0gICAgICAgIGNhc2UgJ3MnIDogewotICAgICAgICAgICAgLy8g
U2VjdXJlIGlzIGEgc3RhbmRhbG9uZSB0b2tlbiAoIlNlY3VyZTsiKQotICAgICAgICAgICAgaWYg
KGxlbmd0aCA+PSA2ICYmICgoY29va2llLmZpbmQoImVjdXJlIiwgdG9rZW5TdGFydFN2ZyArIDEs
IGZhbHNlKSAtIHRva2VuU3RhcnRTdmcpID09IDEpKQotICAgICAgICAgICAgICAgIHJlcy0+c2V0
U2VjdXJlRmxhZyh0cnVlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBMT0df
RVJST1IoIkludmFsaWQgY29va2llIGF0dHJpYnV0ZSAlcyAoc2VjdXJlKSIsIGNvb2tpZS5hc2Np
aSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
ICdIJzoKLSAgICAgICAgY2FzZSAnaCc6IHsKLSAgICAgICAgICAgIC8vIEh0dHBPbmx5IGlzIGEg
c3RhbmRhbG9uZSB0b2tlbiAoIkh0dHBPbmx5OyIpCi0gICAgICAgICAgICBpZiAobGVuZ3RoID49
IDggJiYgKChjb29raWUuZmluZCgidHRwT25seSIsIHRva2VuU3RhcnRTdmcgKyAxLCBmYWxzZSkg
LSB0b2tlblN0YXJ0U3ZnKSA9PSAxKSkKLSAgICAgICAgICAgICAgICByZXMtPnNldElzSHR0cE9u
bHkodHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJ
bnZhbGlkIGNvb2tpZSBhdHRyaWJ1dGUgJXMgKEh0dHBPbmx5KSIsIGNvb2tpZS5hc2NpaSgpLmRh
dGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQg
OiB7Ci0gICAgICAgICAgICAvLyBJZiBsZW5ndGggPT0gMCwgd2Ugc2hvdWxkIGJlIGF0IHRoZSBl
bmQgb2YgdGhlIGNvb2tpZSAoY2FzZSA6ICI7XHIiKSBzbyBpZ25vcmUgaXQKLSAgICAgICAgICAg
IGlmIChsZW5ndGgpCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIHRva2VuIGZv
ciBjb29raWUgJXMiLCBjb29raWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgY29va2llIGlzIHZhbGlkIHdpdGggcmVz
cGVjdCB0byB0aGUgc2l6ZSBsaW1pdC4KLSAgICBpZiAoIXJlcy0+aXNVbmRlclNpemVMaW1pdCgp
KQotICAgICAgICBMT0dfRVJST1JfQU5EX1JFVFVSTigiUGFyc2VkQ29va2llICVzIGlzIGFib3Zl
IHRoZSA0a2IgaW4gbGVuZ3RoIDogUkVKRUNURUQiLCBjb29raWUuYXNjaWkoKS5kYXRhKCkpOwot
Ci0gICAgLy8gSWYgc29tZSBwYWlyIHdhcyBub3QgcHJvdmlkZWQsIGR1cmluZyBwYXJzaW5nIHRo
ZW4gYXBwbHkgc29tZSBkZWZhdWx0IHZhbHVlCi0gICAgLy8gdGhlIHJlc3QgaGFzIGJlZW4gZG9u
ZSBpbiB0aGUgY29uc3RydWN0b3IuCi0KLSAgICAvLyBJZiBubyBkb21haW4gd2FzIHByb3ZpZGVk
LCBzZXQgaXQgdG8gdGhlIGhvc3QKLSAgICBpZiAoIXJlcy0+ZG9tYWluKCkpCi0gICAgICAgIHJl
cy0+c2V0RG9tYWluKG1fZGVmYXVsdENvb2tpZUhvc3QsIG1fZGVmYXVsdERvbWFpbklzSVBBZGRy
ZXNzKTsKLQotICAgIC8vIEFjY29yZGluZyB0byB0aGUgQ29va2llIFNwZWNpZmljYWl0b24gKFJG
QzYyNjUsIHNlY3Rpb24gNC4xLjIuNCBhbmQgNS4yLjQsIGh0dHA6Ly90b29scy5pZXRmLm9yZy9o
dG1sL3JmYzYyNjUpLAotICAgIC8vIElmIG5vIHBhdGggd2FzIHByb3ZpZGVkIG9yIHRoZSBmaXJz
dCBjaGFyYWN0ZXIgb2YgdGhlIHBhdGggdmFsdWUgaXMgbm90ICcvJywgc2V0IGl0IHRvIHRoZSBo
b3N0J3MgcGF0aAotICAgIC8vCi0gICAgLy8gUkVGRVJFTkNFCi0gICAgLy8gNC4xLjIuNC4gVGhl
IFBhdGggQXR0cmlidXRlCi0gICAgLy8KLSAgICAvLyBUaGUgc2NvcGUgb2YgZWFjaCBjb29raWUg
aXMgbGltaXRlZCB0byBhIHNldCBvZiBwYXRocywgY29udHJvbGxlZCBieQotICAgIC8vIHRoZSBQ
YXRoIGF0dHJpYnV0ZS4gSWYgdGhlIHNlcnZlciBvbWl0cyB0aGUgUGF0aCBhdHRyaWJ1dGUsIHRo
ZSB1c2VyCi0gICAgLy8gYWdlbnQgd2lsbCB1c2UgdGhlICJkaXJlY3RvcnkiIG9mIHRoZSByZXF1
ZXN0LXVyaSdzIHBhdGggY29tcG9uZW50IGFzCi0gICAgLy8gdGhlIGRlZmF1bHQgdmFsdWUuIChT
ZWUgU2VjdGlvbiA1LjEuNCBmb3IgbW9yZSBkZXRhaWxzLikKLSAgICAvLyAuLi4uLi4uLi4uLgot
ICAgIC8vIDUuMi40LiBUaGUgUGF0aCBBdHRyaWJ1dGUKLSAgICAvLwotICAgIC8vIElmIHRoZSBh
dHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nICJQYXRo
IiwKLSAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBm
b2xsb3dzLgotICAgIC8vCi0gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBlbXB0eSBv
ciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZQotICAgIC8vIGF0dHJpYnV0ZS12YWx1ZSBp
cyBub3QgJXgyRiAoIi8iKToKLSAgICAvLwotICAgIC8vIExldCBjb29raWUtcGF0aCBiZSB0aGUg
ZGVmYXVsdC1wYXRoLgotICAgIC8vCi0gICAgLy8gT3RoZXJ3aXNlOgotICAgIC8vCi0gICAgLy8g
TGV0IGNvb2tpZS1wYXRoIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuCi0gICAgLy8KLSAgICAvLyBB
cHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhbiBh
dHRyaWJ1dGUtCi0gICAgLy8gbmFtZSBvZiBQYXRoIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2Yg
Y29va2llLXBhdGguCi0gICAgaWYgKCFyZXMtPnBhdGgoKSB8fCAhcmVzLT5wYXRoKCkubGVuZ3Ro
KCkgfHwgIXJlcy0+cGF0aCgpLnN0YXJ0c1dpdGgoIi8iLCBmYWxzZSkpIHsKLSAgICAgICAgU3Ry
aW5nIHBhdGggPSBtX2RlZmF1bHRDb29raWVVUkwuc3RyaW5nKCkuc3Vic3RyaW5nKG1fZGVmYXVs
dENvb2tpZVVSTC5wYXRoU3RhcnQoKSwgbV9kZWZhdWx0Q29va2llVVJMLnBhdGhBZnRlckxhc3RT
bGFzaCgpIC0gbV9kZWZhdWx0Q29va2llVVJMLnBhdGhTdGFydCgpIC0gMSk7Ci0gICAgICAgIGlm
IChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHBhdGggPSAiLyI7Ci0gICAgICAgIC8vIFNp
bmNlIHRoaXMgaXMgcmVhZGluZyB0aGUgcmF3IHVybCBzdHJpbmcsIGl0IGNvdWxkIGNvbnRhaW4g
cGVyY2VudC1lbmNvZGVkIHNlcXVlbmNlcy4gV2UKLSAgICAgICAgLy8gd2FudCBpdCB0byBiZSBj
b21wYXJhYmxlIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdXJsLnBhdGgoKSwgd2hpY2ggaXMgbm90
IHBlcmNlbnQtZW5jb2RlZCwKLSAgICAgICAgLy8gc28gd2UgbXVzdCByZW1vdmUgdGhlIGVzY2Fw
ZSBzZXF1ZW5jZXMuCi0gICAgICAgIHJlcy0+c2V0UGF0aChkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXMocGF0aCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2ll
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJy
eS9Db29raWVQYXJzZXIuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9Db29raWVQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEp1bGllbiBDaGFmZnJhaXggPGpjaGFm
ZnJhaXhAcGxleW8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEyIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb29raWVQYXJzZXJf
aAotI2RlZmluZSBDb29raWVQYXJzZXJfaAotCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFN0cmluZzsKLX0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGFyc2VkQ29va2llOwotCi1jbGFzcyBDb29raWVQYXJz
ZXIgewotcHVibGljOgotICAgIENvb2tpZVBhcnNlcihjb25zdCBVUkwmIGRlZmF1bHRDb29raWVV
UkwpOwotICAgIH5Db29raWVQYXJzZXIoKTsKLQotICAgIC8vIFBhcnNlcyBhIHNlcXVlbmNlIG9m
ICJDb29raWU6IiBoZWFkZXIgYW5kIHJldHVybiB0aGUgcGFyc2VkIGNvb2tpZXMuCi0gICAgVmVj
dG9yPFJlZlB0cjxQYXJzZWRDb29raWU+ID4gcGFyc2UoY29uc3QgU3RyaW5nJiBjb29raWVzKTsK
LQotICAgIFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiBwYXJzZU9uZUNvb2tpZShjb25zdCBTdHJp
bmcmIGNvb2tpZSk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gRklYTUU6IGN1clRpbWUsIHN0YXJ0LCBl
bmQgcGFyYW1ldGVycyBzaG91bGQgYmUgcmVtb3ZlZC4gQW5kIHRoaXMgbWV0aG9kIGNhbiBiZSBw
dWJsaWMuCi0gICAgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IHBhcnNlT25lQ29va2llKGNvbnN0
IFN0cmluZyYgY29va2llLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBkb3VibGUgY3Vy
VGltZSk7Ci0KLSAgICBVUkwgbV9kZWZhdWx0Q29va2llVVJMOwotICAgIFN0cmluZyBtX2RlZmF1
bHRDb29raWVIb3N0OwotICAgIGJvb2wgbV9kZWZhdWx0RG9tYWluSXNJUEFkZHJlc3M7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDb29raWVQYXJzZXJfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DdXJzb3JCbGFja0JlcnJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0N1cnNv
ckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ibGFja2JlcnJ5L0N1cnNvckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDI4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDdXJzb3IuaCIKLQotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLXR5cGVkZWYgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkN1cnNvclR5cGUgQ3Vyc29yVHlwZTsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdHJ1Y3QgQWxsQ3Vyc29ycyB7Ci0gICAgQWxsQ3Vyc29ycygpCi0gICAgewotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOdW1DdXJzb3JUeXBl
czsgKytpKQotICAgICAgICAgICAgbV9jdXJzb3JzW2ldID0gQ3Vyc29yKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpCbGFja0JlcnJ5Q3Vyc29yKChDdXJzb3JUeXBlKWkpKTsKLSAgICB9Ci0gICAgQ3Vy
c29yIG1fY3Vyc29yc1tCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TnVtQ3Vyc29yVHlwZXNdOwotfTsK
LQotc3RhdGljIGNvbnN0IEN1cnNvciYgZ2V0Q3Vyc29yKEN1cnNvclR5cGUgdHlwZSkKLXsKLSAg
ICBzdGF0aWMgQWxsQ3Vyc29ycyBhbGxDdXJzb3JzOwotICAgIHJldHVybiBhbGxDdXJzb3JzLm1f
Y3Vyc29yc1t0eXBlXTsKLX0KLQotQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikK
LSAgICA6IG1fcGxhdGZvcm1DdXJzb3Iob3RoZXIubV9wbGF0Zm9ybUN1cnNvcikKLXsKLX0KLQot
Q3Vyc29yOjpDdXJzb3IoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYgaG90c3BvdCkKLTogbV9wbGF0
Zm9ybUN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yQ3VzdG9taXplZCwgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKSwgaG90c3BvdCkKLXsKLX0KLQot
Q3Vyc29yOjp+Q3Vyc29yKCkKLXsKLX0KLQotQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9yPShjb25z
dCBDdXJzb3ImIG90aGVyKQotewotICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBvdGhlci5tX3BsYXRm
b3JtQ3Vyc29yOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotQ3Vyc29yOjpDdXJzb3IoUGxhdGZv
cm1DdXJzb3IgYykKLTogbV9wbGF0Zm9ybUN1cnNvcihjKQotewotfQotCi1jb25zdCBDdXJzb3Im
IGFsaWFzQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpDdXJzb3JBbGlhcyk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgY2VsbEN1cnNvcigpCi17Ci0g
ICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yQ2VsbCk7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0
Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3JDb2x1bW5SZXNpemUpOwotfQotCi1j
b25zdCBDdXJzb3ImIGNvbnRleHRNZW51Q3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29y
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3JDb250ZXh0TWVudSk7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgY29weUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6Q3Vyc29yQ29weSk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgY3Jvc3NDdXJzb3IoKQot
ewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvckNyb3Nz
KTsKLX0KLQotY29uc3QgQ3Vyc29yJiBlYXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4g
Z2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3JFYXN0UmVzaXplKTsKLX0KLQot
Y29uc3QgQ3Vyc29yJiBlYXN0V2VzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1
cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yRWFzdFdlc3RSZXNpemUpOwotfQotCi1j
b25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3JIYW5kKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBncmFi
Q3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpD
dXJzb3JIYW5kKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCkKLXsKLSAgICByZXR1
cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3JIYW5kKTsKLX0KLQotY29u
c3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpDdXJzb3JIZWxwKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNv
cigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29y
QmVhbSk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbW92ZUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdl
dEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yTW92ZSk7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgbm9Ecm9wQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpDdXJzb3JOb0Ryb3ApOwotfQotCi1jb25zdCBDdXJzb3ImIG5vbmVDdXJzb3Io
KQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvck5v
bmUpOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAg
cmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yTm9ydGhFYXN0UmVz
aXplKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3Io
KQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvck5v
cnRoRWFzdFNvdXRoV2VzdFJlc2l6ZSk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhSZXNpemVD
dXJzb3IoKQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1
cnNvck5vcnRoUmVzaXplKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aFNvdXRoUmVzaXplQ3Vy
c29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJz
b3JOb3J0aFNvdXRoUmVzaXplKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RSZXNpemVD
dXJzb3IoKQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1
cnNvck5vcnRoV2VzdFJlc2l6ZSk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0U291dGhF
YXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpDdXJzb3JOb3J0aFdlc3RTb3V0aEVhc3RSZXNpemUpOwotfQotCi1jb25zdCBDdXJz
b3ImIG5vdEFsbG93ZWRDdXJzb3IoKQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkN1cnNvck5vdEFsbG93ZWQpOwotfQotCi1jb25zdCBDdXJzb3ImIHBvaW50
ZXJDdXJzb3IoKQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkN1cnNvclBvaW50ZXIpOwotfQotCi1jb25zdCBDdXJzb3ImIHByb2dyZXNzQ3Vyc29yKCkKLXsK
LSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3JQcm9ncmVz
cyk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgcm93UmVzaXplQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4g
Z2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3JSb3dSZXNpemUpOwotfQotCi1j
b25zdCBDdXJzb3ImIHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1
cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yU291dGhFYXN0UmVzaXplKTsKLX0KLQot
Y29uc3QgQ3Vyc29yJiBzb3V0aFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNv
cihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yU291dGhSZXNpemUpOwotfQotCi1jb25zdCBD
dXJzb3ImIHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yU291dGhXZXN0UmVzaXplKTsKLX0KLQotY29uc3Qg
Q3Vyc29yJiB2ZXJ0aWNhbFRleHRDdXJzb3IoKQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvclZlcnRpY2FsVGV4dCk7Ci19Ci0KLWNvbnN0IEN1cnNv
ciYgd2FpdEN1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6Q3Vyc29yV2FpdCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgd2VzdFJlc2l6ZUN1cnNvcigp
Ci17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yV2Vz
dFJlc2l6ZSk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgem9vbUluQ3Vyc29yKCkKLXsKLSAgICByZXR1
cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3Jab29tSW4pOwotfQotCi1j
b25zdCBDdXJzb3ImIHpvb21PdXRDdXJzb3IoKQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvclpvb21PdXQpOwotfQotCi1jb25zdCBDdXJzb3ImIG1p
ZGRsZVBhbm5pbmdDdXJzb3IoKQotewotICAgIHJldHVybiBtb3ZlQ3Vyc29yKCk7Ci19Ci0KLWNv
bnN0IEN1cnNvciYgZWFzdFBhbm5pbmdDdXJzb3IoKQotewotICAgIHJldHVybiBlYXN0UmVzaXpl
Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhQYW5uaW5nQ3Vyc29yKCkKLXsKLSAg
ICByZXR1cm4gbm9ydGhSZXNpemVDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aEVh
c3RQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gbm9ydGhFYXN0UmVzaXplQ3Vyc29yKCk7
Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0
dXJuIG5vcnRoV2VzdFJlc2l6ZUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoUGFu
bmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHNvdXRoUmVzaXplQ3Vyc29yKCk7Ci19Ci0KLWNv
bnN0IEN1cnNvciYgc291dGhFYXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHNvdXRo
RWFzdFJlc2l6ZUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoV2VzdFBhbm5pbmdD
dXJzb3IoKQotewotICAgIHJldHVybiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKTsKLX0KLQotY29u
c3QgQ3Vyc29yJiB3ZXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHdlc3RSZXNpemVD
dXJzb3IoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9EcmFnRGF0YUJsYWNrQmVycnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0RhdGFCbGFja0JlcnJ5
LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9EcmFnRGF0YUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRyYWdEYXRhLmgiCi0KLSNpbmNsdWRlICJD
b2xvci5oIgotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIERyYWdEYXRhOjpjYW5T
bWFydFJlcGxhY2UoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIERyYWdEYXRhOjpjb250YWluc0NvbG9yKCkgY29uc3QKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBEcmFnRGF0
YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmls
ZXMoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0Ci17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRHJhZ0RhdGE6OmNv
bnRhaW5zVVJMKEZyYW1lKiwgRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5KSBjb25zdAotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIERyYWdEYXRh
Ojphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotQ29sb3IgRHJhZ0RhdGE6OmFzQ29sb3IoKSBjb25zdAotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIENvbG9yKCk7Ci19Ci0KLVN0cmluZyBEcmFnRGF0YTo6
YXNQbGFpblRleHQoRnJhbWUqKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiwgRmls
ZW5hbWVDb252ZXJzaW9uUG9saWN5LCBTdHJpbmcqKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1QYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiwgUGFzc1JlZlB0cjxSYW5nZT4sIGJv
b2wsIGJvb2wmKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2JsYWNrYmVycnkvRHJhZ0ltYWdlQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9EcmFnSW1hZ2VCbGFja0JlcnJ5LmNwcAko
cmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9E
cmFnSW1hZ2VCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKLQotI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkKiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2Uo
SW1hZ2UqLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCogY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNh
Y2hlZEltYWdlRmlsZW5hbWUoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiAwOwotfQotCi12b2lkIGRlbGV0ZURyYWdJbWFnZSh2b2lkKikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkKiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rp
b24odm9pZCosIGZsb2F0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLXZvaWQqIHNjYWxlRHJhZ0ltYWdlKHZvaWQqLCBGbG9hdFNpemUpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSW50U2l6ZSBkcmFnSW1hZ2VTaXpl
KHZvaWQqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFNpemUoKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYmxhY2tiZXJyeS9FdmVudExvb3BCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0V2ZW50TG9vcEJsYWNrQmVycnkuY3BwCShy
ZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0V2
ZW50TG9vcEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJFdmVudExvb3AuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU1lc3NhZ2VDbGll
bnQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEV2ZW50TG9vcDo6Y3ljbGUoKQot
ewotICAgIEFTU0VSVChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6d2ViS2l0VGhyZWFkTWVzc2FnZUNs
aWVudCgpKTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6d2ViS2l0VGhyZWFkTWVzc2FnZUNs
aWVudCgpLT5wcm9jZXNzTmV4dE1lc3NhZ2UoKTsKLSAgICBtX2VuZGVkID0gIUJsYWNrQmVycnk6
OlBsYXRmb3JtOjp3ZWJLaXRUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmlzUnVubmluZygpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L0ZpbGVTeXN0ZW1CbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0ZpbGVTeXN0ZW1CbGFja0JlcnJ5LmNwcAkocmV2
aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9GaWxl
U3lzdGVtQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotCi0jaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKLXsKLSAg
ICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5hcHBs
aWNhdGlvbkRhdGFEaXJlY3RvcnkoKS5jX3N0cigpOwotfQotCi1DU3RyaW5nIGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHBhdGgudXRm
OCgpOwotfQotCi1ib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSkKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvTG9jYWxpemVkU3RyaW5nc0JsYWNrQmVycnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvTG9jYWxpemVk
U3RyaW5nc0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0xvY2FsaXplZFN0cmluZ3NCbGFja0JlcnJ5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw0MTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
TG9jYWxpemVkU3RyaW5ncy5oIgotCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+Ci0j
aW5jbHVkZSA8TG9jYWxlSGFuZGxlci5oPgotI2luY2x1ZGUgPExvY2FsaXplUmVzb3VyY2UuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LURFRklORV9TVEFUSUNfTE9DQUwoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvY2FsaXplUmVzb3Vy
Y2UsIHNfcmVzb3VyY2UsICgpKTsKLQotU3RyaW5nIGZpbGVCdXR0b25DaG9vc2VGaWxlTGFiZWwo
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpGSUxFX0NIT09TRV9CVVRUT05fTEFCRUwpKTsKLX0KLQotU3Ry
aW5nIGZpbGVCdXR0b25DaG9vc2VNdWx0aXBsZUZpbGVzTGFiZWwoKQotewotICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpGSUxFX0NIT09TRV9NVUxUSVBMRV9CVVRUT05fTEFCRUwpKTsKLX0KLQotU3RyaW5nIGZpbGVC
dXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RklMRV9CVVRUT05f
Tk9fRklMRV9TRUxFQ1RFRF9MQUJFTCkpOwotfQotCi1TdHJpbmcgcmVzZXRCdXR0b25EZWZhdWx0
TGFiZWwoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3Ry
aW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpSRVNFVF9CVVRUT05fTEFCRUwpKTsKLX0KLQotU3Ry
aW5nIHN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoc19yZXNvdXJjZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNVQk1JVF9C
VVRUT05fTEFCRUwpKTsKLX0KLQotU3RyaW5nIGlucHV0RWxlbWVudEFsdFRleHQoKQotewotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTVUJNSVRfQlVUVE9OX0xBQkVMKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgcGxh
dGZvcm1MYW5ndWFnZSgpCi17Ci0gICAgU3RyaW5nIGxhbmcgPSBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6TG9jYWxlSGFuZGxlcjo6aW5zdGFuY2UoKS0+bGFuZ3VhZ2UoKS5jX3N0cigpOwotICAgIC8v
IGdldExvY2FsZSgpIHJldHVybnMgYSBQT1NJWCBsb2NhbGUgd2hpY2ggdXNlcyAnXycgdG8gc2Vw
YXJhdGUgbGFuZ3VhZ2UgYW5kIGNvdW50cnkuCi0gICAgLy8gSG93ZXZlciwgd2UgdXNlICctJyBp
bnN0ZWFkIG9mICdfJyBpbiBXZWJDb3JlIChlLmcuIGVuX3VzIHNob3VsZCByZWFkIGVuLXVzKQot
ICAgIHNpemVfdCB1bmRlcnNjb3JlUG9zaXRpb24gPSBsYW5nLmZpbmQoJ18nKTsKLSAgICBTdHJp
bmcgcmVwbGFjZVdpdGggPSBBU0NJSUxpdGVyYWwoIi0iKTsKLSAgICBpZiAodW5kZXJzY29yZVBv
c2l0aW9uICE9IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gbGFuZy5yZXBsYWNlKHVuZGVyc2Nv
cmVQb3NpdGlvbiwgcmVwbGFjZVdpdGgubGVuZ3RoKCksIHJlcGxhY2VXaXRoKTsKLSAgICByZXR1
cm4gbGFuZzsKLX0KLQotVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3Vh
Z2VzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwotICAg
IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBwZW5kKHBsYXRmb3JtTGFuZ3VhZ2UoKSk7Ci0gICAg
cmV0dXJuIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXM7Ci19Ci0KLVN0cmluZyBzZWFyY2hhYmxlSW5k
ZXhJbnRyb2R1Y3Rpb24oKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3Vy
Y2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTRUFSQ0hBQkxFX0lOREVYX0lOVFJP
RFVDVElPTikpOwotfQotCi1TdHJpbmcgc2VhcmNoTWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3Ry
aW5nIHNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgc2VhcmNoTWVudUNsZWFyUmVj
ZW50U2VhcmNoZXNUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotU3RyaW5nIGltYWdlVGl0bGUoU3RyaW5nIGNvbnN0JiBmaWxlbmFtZSwg
SW50U2l6ZSBjb25zdCYgc2l6ZSkKLXsKLSAgICByZXR1cm4gZmlsZW5hbWUgKyAiICgiICsgU3Ry
aW5nOjpudW1iZXIoc2l6ZS53aWR0aCgpKSArICJ4IiArIFN0cmluZzo6bnVtYmVyKHNpemUuaGVp
Z2h0KCkpICsgIikiOwotfQotCi1TdHJpbmcgQVhCdXR0b25BY3Rpb25WZXJiKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFYQ2hl
Y2tlZENoZWNrQm94QWN0aW9uVmVyYigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBWERlZmluaXRpb25UZXh0KCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFYRGVz
Y3JpcHRpb25MaXN0VGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBWERlc2NyaXB0aW9uTGlzdERldGFpbFRleHQoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcg
QVhEZXNjcmlwdGlvbkxpc3RUZXJtVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBWEZvb3RlclJvbGVEZXNjcmlwdGlvblRl
eHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQot
Ci1TdHJpbmcgQVhMaW5rQWN0aW9uVmVyYigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBWFJhZGlvQnV0dG9uQWN0aW9uVmVyYigp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0
cmluZyBBWFRleHRGaWVsZEFjdGlvblZlcmIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhVbmNoZWNrZWRDaGVja0JveEFjdGlv
blZlcmIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwot
fQotCi1TdHJpbmcgQVhNZW51TGlzdFBvcHVwQWN0aW9uVmVyYigpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBWE1lbnVMaXN0QWN0
aW9uVmVyYigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLVN0cmluZyBBWExpc3RJdGVtQWN0aW9uVmVyYigpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyB1bmtub3duRmlsZVNpemVU
ZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUGF0dGVybk1pc21hdGNoVGV4dCgpCi17Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlZBTElEQVRJT05fUEFUVEVSTl9NSVNNQVRDSCkpOwotfQotCi1TdHJpbmcgdmFs
aWRhdGlvbk1lc3NhZ2VUb29Mb25nVGV4dChpbnQsIGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdl
UmFuZ2VVbmRlcmZsb3dUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmb3JtYXQoc19yZXNvdXJjZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlZB
TElEQVRJT05fUkFOR0VfVU5ERVJGTE9XKSwgdGV4dC51dGY4KCkuZGF0YSgpKTsKLX0KLQotU3Ry
aW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VPdmVyZmxvd1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6VkFMSURBVElPTl9SQU5HRV9PVkVSRkxPVyksIHRleHQudXRmOCgp
LmRhdGEoKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVN0ZXBNaXNtYXRjaFRleHQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VkFMSURBVElP
Tl9TVEVQX01JU01BVENIKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNt
YXRjaFRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0
U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpWQUxJREFUSU9OX1RZUEVfTUlTTUFUQ0gpKTsK
LX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoRm9yRW1haWxUZXh0KCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6VkFMSURBVElPTl9UWVBFX01JU01BVENIX0VNQUlMKSk7Ci19Ci0K
LVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1haWxUZXh0
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6VkFMSURBVElPTl9UWVBFX01JU01BVENIX01VTFRJUExFX0VN
QUlMKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvclVSTFRl
eHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5n
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpWQUxJREFUSU9OX1RZUEVfTUlTTUFUQ0hfVVJMKSk7Ci19
Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKQotewotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpWQUxJREFUSU9OX1ZBTFVFX01JU1NJTkcpKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRp
b25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yQ2hlY2tib3hUZXh0KCkKLXsKLSAgICByZXR1cm4gdmFs
aWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9u
TWVzc2FnZVZhbHVlTWlzc2luZ0ZvckZpbGVUZXh0KCkKLXsKLSAgICByZXR1cm4gdmFsaWRhdGlv
bk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2Fn
ZVZhbHVlTWlzc2luZ0Zvck11bHRpcGxlRmlsZVRleHQoKQotewotICAgIHJldHVybiB2YWxpZGF0
aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNz
YWdlVmFsdWVNaXNzaW5nRm9yUmFkaW9UZXh0KCkKLXsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1l
c3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZh
bHVlTWlzc2luZ0ZvclNlbGVjdFRleHQoKQotewotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2Fn
ZVZhbHVlTWlzc2luZ1RleHQoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlQmFkSW5w
dXRGb3JOdW1iZXJUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2
YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKLX0KLQotU3RyaW5nIGxvY2FsaXpl
ZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGxvY2FsaXplZE1l
ZGlhQ29udHJvbEVsZW1lbnRIZWxwVGV4dChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgbG9jYWxpemVkTWVk
aWFUaW1lRGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGxvY2FsaXplZE1lZGlhVGltZURl
c2NyaXB0aW9uKGZsb2F0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0
cmluZygpOwotfQotCi1TdHJpbmcgbWVkaWFFbGVtZW50TG9hZGluZ1N0YXRlVGV4dCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBt
ZWRpYUVsZW1lbnRMaXZlQnJvYWRjYXN0U3RhdGVUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIG1pc3NpbmdQbHVnaW5UZXh0
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQot
U3RyaW5nIGNyYXNoZWRQbHVnaW5UZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGJsb2NrZWRQbHVnaW5CeUNvbnRlbnRTZWN1
cml0eVBvbGljeVRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0
cmluZygpOwotfQotCi1TdHJpbmcgaW5zZWN1cmVQbHVnaW5WZXJzaW9uVGV4dCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBpbmFj
dGl2ZVBsdWdpblRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0
cmluZygpOwotfQotCi1TdHJpbmcgbXVsdGlwbGVGaWxlVXBsb2FkVGV4dCh1bnNpZ25lZCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nKCIsIC4uLiIpOwotfQotCi1TdHJpbmcgZGVmYXVsdERldGFpbHNT
dW1tYXJ5VGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5n
ZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkRFVEFJTFNfU1VNTUFSWSkpOwotfQotCi1T
dHJpbmcgZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVsKCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
RklMRV9CVVRUT05fTk9fRklMRV9TRUxFQ1RFRF9MQUJFTCkpOwotfQotCi1TdHJpbmcgc25hcHNo
b3R0ZWRQbHVnSW5MYWJlbFRpdGxlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIHNuYXBzaG90dGVkUGx1Z0luTGFiZWxTdWJ0aXRs
ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyB3ZWVrRm9ybWF0SW5MRE1MKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBTdHJpbmcoKTsKLX0KLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLVN0cmluZyB0
ZXh0VHJhY2tDbG9zZWRDYXB0aW9uc1RleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgdGV4dFRyYWNrU3VidGl0bGVzVGV4dCgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0
cmluZyB0ZXh0VHJhY2tPZmZNZW51SXRlbVRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgdGV4dFRyYWNrQXV0b21hdGljTWVu
dUl0ZW1UZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmco
KTsKLX0KLQotU3RyaW5nIHRleHRUcmFja05vTGFiZWxUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0xvZ2dp
bmdCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L0xvZ2dpbmdCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Mb2dnaW5nQmxhY2tCZXJyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLQotI2lmICFMT0dfRElTQUJMRUQKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmluZyBsb2dMZXZlbFN0cmluZygp
Ci17Ci0gICAgcmV0dXJuIGdldGVudigiV0VCS0lUX0RFQlVHIik7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvTUlNRVR5cGVSZWdpc3RyeUJsYWNrQmVycnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvTUlNRVR5cGVS
ZWdpc3RyeUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L01JTUVUeXBlUmVnaXN0cnlCbGFja0JlcnJ5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Db21tb25GdW5jdGlvbnMuaD4KLSNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1J
TUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQotewotICAgIHJldHVy
biBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9u
Lmxvd2VyKCkpOwotfQotCi1TdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0
ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQotewotICAgIHJldHVybiBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUodHlwZS5s
b3dlcigpKTsKLX0KLQotYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2lu
TUlNRVR5cGUoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9QYWdlQ2xpZW50QmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvUGFnZUNsaWVudEJsYWNrQmVycnkuaAkocmV2aXNpb24gMTYx
NTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QYWdlQ2xpZW50Qmxh
Y2tCZXJyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBQYWdl
Q2xpZW50QmxhY2tCZXJyeV9oCi0jZGVmaW5lIFBhZ2VDbGllbnRCbGFja0JlcnJ5X2gKLQotI2lu
Y2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIldlYlBhZ2VDbGllbnQuaCIKLQotbmFtZXNwYWNl
IEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFBsYXRmb3JtIHsKLWNsYXNzIE5ldHdvcmtTdHJlYW1G
YWN0b3J5OwotbmFtZXNwYWNlIEdyYXBoaWNzIHsKLWNsYXNzIFdpbmRvdzsKLX0KLX0KLX0KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDbGllbnQ7
Ci1jbGFzcyBDcmVkZW50aWFsOwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEludFNpemU7Ci1jbGFz
cyBVUkw7Ci1jbGFzcyBQbHVnaW5WaWV3OwotY2xhc3MgUHJvdGVjdGlvblNwYWNlOwotfQotCi1j
bGFzcyBQYWdlQ2xpZW50QmxhY2tCZXJyeSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTYXZlQ3JlZGVu
dGlhbFR5cGUgewotICAgICAgICBTYXZlQ3JlZGVudGlhbE5ldmVyRm9yVGhpc1NpdGUgPSAwLAot
ICAgICAgICBTYXZlQ3JlZGVudGlhbE5vdE5vdywKLSAgICAgICAgU2F2ZUNyZWRlbnRpYWxZZXMK
LSAgICB9OwotCi0gICAgdmlydHVhbCBpbnQgcGxheWVySUQoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEN1cnNvcihXZWJDb3JlOjpQbGF0Zm9ybUN1cnNvcikgPSAwOwotICAgIHZp
cnR1YWwgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtTdHJlYW1GYWN0b3J5KiBuZXR3b3Jr
U3RyZWFtRmFjdG9yeSgpID0gMDsKLSAgICB2aXJ0dWFsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczo6V2luZG93KiBwbGF0Zm9ybVdpbmRvdygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0UHJldmVudHNTY3JlZW5EaW1taW5nKGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2hvd1ZpcnR1YWxLZXlib2FyZChib29sKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuc3Vy
ZUNvbnRlbnRWaXNpYmxlKGJvb2wgY2VudGVySW5WaWV3ID0gdHJ1ZSkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCB6b29tVG9Db250ZW50UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclBsdWdpbihXZWJDb3JlOjpQbHVnaW5WaWV3KiwgYm9v
bCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlT25Mb2FkKCkgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRQbHVnaW5FbnRlckZ1bGxTY3JlZW4oV2ViQ29yZTo6UGx1Z2luVmll
dyosIGNvbnN0IGNoYXIqIHVuaXF1ZVBsdWdpblByZWZpeCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBkaWRQbHVnaW5FbnRlckZ1bGxTY3JlZW4oV2ViQ29yZTo6UGx1Z2luVmlldyosIGNvbnN0IGNo
YXIqIHVuaXF1ZVBsdWdpblByZWZpeCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRQbHVnaW5F
eGl0RnVsbFNjcmVlbihXZWJDb3JlOjpQbHVnaW5WaWV3KiwgY29uc3QgY2hhciogdW5pcXVlUGx1
Z2luUHJlZml4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uUGx1Z2luU3RhcnRCYWNrZ3JvdW5k
UGxheShXZWJDb3JlOjpQbHVnaW5WaWV3KiwgY29uc3QgY2hhciogdW5pcXVlUGx1Z2luUHJlZml4
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uUGx1Z2luU3RvcEJhY2tncm91bmRQbGF5KFdlYkNv
cmU6OlBsdWdpblZpZXcqLCBjb25zdCBjaGFyKiB1bmlxdWVQbHVnaW5QcmVmaXgpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgbG9ja09yaWVudGF0aW9uKGJvb2wgbGFuZHNjYXBlKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHVubG9ja09yaWVudGF0aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgaW50IG9y
aWVudGF0aW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgZG91YmxlIGN1cnJlbnRab29tRmFj
dG9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3cG9ydFNp
emUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgc2hvd0FsZXJ0RGlhbG9nKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZUNsaWVudDo6QWxlcnRUeXBlKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGlzQWN0aXZlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2libGUoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0
IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYsIGNvbnN0IFdl
YkNvcmU6OkNyZWRlbnRpYWwmKSA9IDA7Ci0gICAgdmlydHVhbCBTYXZlQ3JlZGVudGlhbFR5cGUg
bm90aWZ5U2hvdWxkU2F2ZUNyZWRlbnRpYWwoYm9vbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
eW5jUHJveHlDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKSA9IDA7Ci19Owot
Ci0jZW5kaWYgLy8gUGFnZUNsaWVudEJsYWNrQmVycnlfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYmxhY2tiZXJyeS9QYXJzZWRDb29raWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGFyc2VkQ29va2llLmNwcAkocmV2aXNpb24g
MTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QYXJzZWRDb29r
aWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IEp1bGllbiBDaGFmZnJhaXggPGp1bGllbi5jaGFmZnJhaXhAZ21haWwu
Y29tPgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBh
cnNlZENvb2tpZS5oIgotCi0jaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgotI2luY2x1ZGUgIlVS
TC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KLSNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLVBhcnNlZENvb2tpZTo6UGFyc2VkQ29va2llKGRvdWJsZSBjdXJyZW50VGltZSkKLSAgICA6
IG1fZXhwaXJ5KC0xKQotICAgICwgbV9jcmVhdGlvblRpbWUoY3VycmVudFRpbWUpCi0gICAgLCBt
X2xhc3RBY2Nlc3NlZChjdXJyZW50VGltZSkKLSAgICAsIG1faXNTZWN1cmUoZmFsc2UpCi0gICAg
LCBtX2lzSHR0cE9ubHkoZmFsc2UpCi0gICAgLCBtX2lzU2Vzc2lvbih0cnVlKQotICAgICwgbV9p
c0ZvcmNlRXhwaXJlZChmYWxzZSkKLSAgICAsIG1fZG9tYWluSXNJUEFkZHJlc3MoZmFsc2UpCi17
Ci19Ci0KLVBhcnNlZENvb2tpZTo6UGFyc2VkQ29va2llKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgcHJv
dG9jb2wsIGNvbnN0IFN0cmluZyYgcGF0aCwgZG91YmxlIGV4cGlyeSwgZG91YmxlIGxhc3RBY2Nl
c3NlZCwgZG91YmxlIGNyZWF0aW9uVGltZSwgYm9vbCBpc1NlY3VyZSwgYm9vbCBpc0h0dHBPbmx5
KQotICAgIDogbV9uYW1lKG5hbWUpCi0gICAgLCBtX3ZhbHVlKHZhbHVlKQotICAgICwgbV9kb21h
aW4oZG9tYWluKQotICAgICwgbV9wcm90b2NvbChwcm90b2NvbCkKLSAgICAsIG1fcGF0aChwYXRo
KQotICAgICwgbV9leHBpcnkoZXhwaXJ5KQotICAgICwgbV9jcmVhdGlvblRpbWUoY3JlYXRpb25U
aW1lKQotICAgICwgbV9sYXN0QWNjZXNzZWQobGFzdEFjY2Vzc2VkKQotICAgICwgbV9pc1NlY3Vy
ZShpc1NlY3VyZSkKLSAgICAsIG1faXNIdHRwT25seShpc0h0dHBPbmx5KQotICAgICwgbV9pc1Nl
c3Npb24oZmFsc2UpCi0gICAgLCBtX2lzRm9yY2VFeHBpcmVkKGZhbHNlKQotICAgICwgbV9kb21h
aW5Jc0lQQWRkcmVzcyhmYWxzZSkKLXsKLX0KLQotdm9pZCBQYXJzZWRDb29raWU6OnNldEV4cGly
eShjb25zdCBTdHJpbmcmIGV4cGlyeSkKLXsKLSAgICAvLyBJZiBhIGNvb2tpZSBoYXMgYm90aCB0
aGUgTWF4LUFnZSBhbmQgdGhlIEV4cGlyZXMgYXR0cmlidXRlLAotICAgIC8vIHRoZSBNYXgtQWdl
IGF0dHJpYnV0ZSBoYXMgcHJlY2VkZW5jZSBhbmQgY29udHJvbHMgdGhlIGV4cGlyYXRpb24gZGF0
ZSBvZiB0aGUgY29va2llLgotICAgIGlmIChtX2V4cGlyeSAhPSAtMSB8fCBleHBpcnkuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzU2Vzc2lvbiA9IGZhbHNlOwotCi0gICAg
bV9leHBpcnkgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGN1cmxfZ2V0ZGF0ZShleHBpcnkudXRmOCgp
LmRhdGEoKSwgMCkpOwotCi0gICAgaWYgKG1fZXhwaXJ5ID09IC0xKSB7Ci0gICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHBhcnNlIGRhdGUiKTsKLSAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCBj
b25zaWRlciB0aGF0IHRoZSBjb29raWUgaXMgc2Vzc2lvbiBvbmx5Ci0gICAgICAgIG1faXNTZXNz
aW9uID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFyc2VkQ29va2llOjpzZXRNYXhBZ2UoY29u
c3QgU3RyaW5nJiBtYXhBZ2UpCi17Ci0gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVFRQIENvb2tp
ZSBzcGVjaWZpY2F0aW9uIChSRkM2MjY1LCBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2
MjY1KSwKLSAgICAvLyB0aGUgZmlyc3QgY2hhcmFjdGVyIGNhbiBiZSBhIERJR0lUIG9yIGEgIi0i
LCBhbmQgdGhlIHJlbWluZGVyCi0gICAgLy8gb2YgdGhlIHZhbHVlIGNhbiBvbmx5IGNvbnRhaW4g
RElHSVQgY2hhcmFjdGVycy4KLSAgICBpZiAobWF4QWdlLmlzRW1wdHkoKSB8fCAobWF4QWdlWzBd
ICE9ICctJyAmJiAhaXNBU0NJSURpZ2l0KG1heEFnZVswXSkpKSB7Ci0gICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IHBhcnNlIE1heC1BZ2UgOiAlcywgZmlyc3QgY2hhcmFjdGVyIGNhbiBvbmx5
IGJlICctJyBvciBhc2NpaSBkaWdpdC4iLCBtYXhBZ2UuYXNjaWkoKS5kYXRhKCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbCBvazsKLSAgICBpbnQgdmFsdWUgPSBtYXhBZ2Uu
dG9JbnRTdHJpY3QoJm9rKTsKLQotICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgcGFyc2UgTWF4LUFnZSA6ICVzIiwgbWF4QWdlLmFzY2lpKCkuZGF0YSgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2V4cGlyeSA9IHZhbHVlOwotICAgIG1faXNTZXNz
aW9uID0gZmFsc2U7Ci0KLSAgICAvLyBJZiBtYXhBZ2UgdmFsdWUgaXMgbm90IHBvc2l0aXZlLCBs
ZXQgZXhwaXJ5LXRpbWUgYmUgdGhlIGVhcmxpZXN0IHJlcHJlc2VudGFibGUgdGltZS4KLSAgICBp
ZiAobV9leHBpcnkgPiAwKQotICAgICAgICBtX2V4cGlyeSArPSBjdXJyZW50VGltZSgpOwotICAg
IGVsc2UKLSAgICAgICAgbV9leHBpcnkgPSAwOwotfQotCi1ib29sIFBhcnNlZENvb2tpZTo6aGFz
RXhwaXJlZCgpIGNvbnN0Ci17Ci0gICAgLy8gU2Vzc2lvbiBjb29raWVzIGRvIG5vdCBleHBpcmUs
IHRoZXkgd2lsbCBqdXN0IG5vdCBiZSBzYXZlZCB0byB0aGUgYmFja2luZyBzdG9yZS4KLSAgICBy
ZXR1cm4gIW1faXNTZXNzaW9uICYmIChtX2lzRm9yY2VFeHBpcmVkIHx8IG1fZXhwaXJ5IDwgY3Vy
cmVudFRpbWUoKSk7Ci19Ci0KLWJvb2wgUGFyc2VkQ29va2llOjppc1VuZGVyU2l6ZUxpbWl0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV92YWx1ZS5sZW5ndGgoKSA8PSBDb29raWVNYW5hZ2VyOjpt
YXhDb29raWVMZW5ndGgoKSAmJiBtX25hbWUubGVuZ3RoKCkgPD0gQ29va2llTWFuYWdlcjo6bWF4
Q29va2llTGVuZ3RoKCk7Ci19Ci0KLVN0cmluZyBQYXJzZWRDb29raWU6OnRvU3RyaW5nKCkgY29u
c3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQobmFt
ZSgpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiID0gIik7Ci0gICAgYnVpbGRlci5hcHBlbmQodmFs
dWUoKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIjsgRG9tYWluID0gIik7Ci0gICAgYnVpbGRlci5h
cHBlbmQoZG9tYWluKCkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCI7IFBhdGggPSAiKTsKLSAgICBi
dWlsZGVyLmFwcGVuZChwYXRoKCkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCI7IFByb3RvY29sID0g
Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQocHJvdG9jb2woKSk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIFBhcnNlZENvb2tpZTo6dG9OYW1lVmFsdWVQYWlyKCkg
Y29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGVxdWFsKCI9Iik7Ci0KLSAgICBzaXpl
X3QgY29va2llTGVuZ3RoID0gbV9uYW1lLmxlbmd0aCgpICsgbV92YWx1ZS5sZW5ndGgoKSArIDI7
Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoY29va2llTGVuZ3RoKTsKLSAgICBhcHBlbmQocmVzdWx0LCBtX25hbWUpOwotICAgIGFw
cGVuZChyZXN1bHQsIGVxdWFsKTsKLSAgICBhcHBlbmQocmVzdWx0LCBtX3ZhbHVlKTsKLQotICAg
IHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7Ci19Ci0KLXZvaWQgUGFyc2VkQ29va2llOjph
cHBlbmRXZWJDb3JlQ29va2llKFZlY3RvcjxDb29raWU+JiBjb29raWVWZWN0b3IpIGNvbnN0Ci17
Ci0gICAgY29va2llVmVjdG9yLmFwcGVuZChDb29raWUoU3RyaW5nKG1fbmFtZSksIFN0cmluZyht
X3ZhbHVlKSwgU3RyaW5nKG1fZG9tYWluKSwKLSAgICAgICAgLy8gV2UgbXVsdGlwbHkgbV9leHBp
cnkgYnkgMTAwMCB0byBjb252ZXJ0IGZyb20gc2Vjb25kcyB0byBtaWxsaXNlY29uZHMuCi0gICAg
ICAgIC8vIFRoaXMgdmFsdWUgaXMgcGFzc2VkIHRvIFdlYiBJbnNwZWN0b3IgYW5kIHVzZWQgaW4g
dGhlIEphdmFTY3JpcHQgRGF0ZSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgU3RyaW5nKG1fcGF0aCks
IChtX2V4cGlyeSAqIDEwMDApLCBtX2lzSHR0cE9ubHksIG1faXNTZWN1cmUsIG1faXNTZXNzaW9u
KSk7Ci19Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ibGFja2JlcnJ5L1BhcnNlZENvb2tpZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGFyc2VkQ29va2llLmgJKHJldmlzaW9uIDE2MTU5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGFyc2VkQ29va2llLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgSnVsaWVuIENoYWZmcmFpeCA8anVsaWVuLmNoYWZmcmFpeEBnbWFpbC5jb20+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFBhcnNlZENvb2tpZV9oCi0jZGVmaW5lIFBhcnNlZENvb2tp
ZV9oCi0KLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1u
YW1lc3BhY2UgV1RGIHsKLWNsYXNzIFN0cmluZzsKLX0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgVVJMOwotCi0vLyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBjb29raWUgaW50ZXJuYWxs
eQotLy8gSXQgY2FuIGVpdGhlciBiZSBjcmVhdGVkIGJ5IHRoZSBDb29raWVQYXJzZXIgd2hpY2gg
d2lsbCB0aGVuIGZpbGwgaXQKLS8vIG9yIGl0IGNhbiBiZSBjcmVhdGVkIGJ5IHRoZSBiYWNraW5n
IHN0b3JlIGZpbGxpbmcgaXQgaW4gdGhlIGNvbnN0cnVjdG9yLgotY2xhc3MgUGFyc2VkQ29va2ll
IDogcHVibGljIFJlZkNvdW50ZWQ8UGFyc2VkQ29va2llPiB7Ci1wdWJsaWM6Ci0KLSAgICAvLyBE
ZWZhdWx0IGNvb2tpZSA6IGVtcHR5IGRvbWFpbiwgbm9uIHNlY3VyZSBhbmQgc2Vzc2lvbgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gY3JlYXRlKGRvdWJsZSBjdXJyZW50VGlt
ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBhcnNlZENvb2tpZShjdXJyZW50VGltZSkpOyB9Ci0K
LSAgICAvLyBGb3IgYmFja2luZyBzdG9yZSBjb29raWVzICh0aG9zZSBjb29raWVzIGFyZSBuZXZl
ciBzZXNzaW9uIGNvb2tpZXMpLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgcGF0aCwg
ZG91YmxlIGV4cGlyeSwgZG91YmxlIGxhc3RBY2Nlc3NlZCwgZG91YmxlIGNyZWF0aW9uVGltZSwg
Ym9vbCBpc1NlY3VyZSwgYm9vbCBpc0h0dHBPbmx5KSAgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBh
cnNlZENvb2tpZShuYW1lLCB2YWx1ZSwgZG9tYWluLCBwcm90b2NvbCwgcGF0aCwgZXhwaXJ5LCBs
YXN0QWNjZXNzZWQsIGNyZWF0aW9uVGltZSwgaXNTZWN1cmUsIGlzSHR0cE9ubHkpKTsgfTsKLQot
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIHZv
aWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9uYW1lID0gbmFtZTsgfQotCi0gICAg
Y29uc3QgU3RyaW5nJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICB2b2lk
IHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0KLSAg
ICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB2b2lk
IHNldFBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKSB7IG1fcGF0aCA9IHBhdGg7IH0KLQotICAgIGNv
bnN0IFN0cmluZyYgZG9tYWluKCkgY29uc3QgeyByZXR1cm4gbV9kb21haW47IH0KLSAgICB2b2lk
IHNldERvbWFpbihjb25zdCBTdHJpbmcmIGRvbWFpbiwgYm9vbCBkb21haW5Jc0lQQWRkcmVzcyA9
IGZhbHNlKSB7IG1fZG9tYWluID0gZG9tYWluLmxvd2VyKCk7IG1fZG9tYWluSXNJUEFkZHJlc3Mg
PSBkb21haW5Jc0lQQWRkcmVzczsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBwcm90b2NvbCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvdG9jb2w7IH0KLSAgICB2b2lkIHNldFByb3RvY29sKGNvbnN0IFN0
cmluZyYgcHJvdG9jb2wpIHsgbV9wcm90b2NvbCA9IHByb3RvY29sOyB9Ci0KLSAgICBkb3VibGUg
ZXhwaXJ5KCkgY29uc3QgeyByZXR1cm4gbV9leHBpcnk7IH0KLSAgICB2b2lkIHNldEV4cGlyeShj
b25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGZvcmNlRXhwaXJlKCkgeyBtX2lzRm9yY2VFeHBpcmVk
ICA9IHRydWU7IH0KLSAgICB2b2lkIHNldE1heEFnZShjb25zdCBTdHJpbmcmKTsKLQotICAgIGRv
dWJsZSBsYXN0QWNjZXNzZWQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RBY2Nlc3NlZDsgfQotICAg
IHZvaWQgc2V0TGFzdEFjY2Vzc2VkKGRvdWJsZSBsYXN0QWNjZXNzZWQpIHsgbV9sYXN0QWNjZXNz
ZWQgPSBsYXN0QWNjZXNzZWQ7fQotCi0gICAgZG91YmxlIGNyZWF0aW9uVGltZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3JlYXRpb25UaW1lOyB9Ci0gICAgdm9pZCBzZXRDcmVhdGlvblRpbWUoZG91Ymxl
IGNyZWF0aW9uVGltZSkgeyBtX2NyZWF0aW9uVGltZSA9IGNyZWF0aW9uVGltZTsgfQotCi0gICAg
Ym9vbCBpc1NlY3VyZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTZWN1cmU7IH0KLSAgICB2b2lkIHNl
dFNlY3VyZUZsYWcoYm9vbCBzZWN1cmUpIHsgbV9pc1NlY3VyZSA9IHNlY3VyZTsgfQotCi0gICAg
Ym9vbCBpc0h0dHBPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9pc0h0dHBPbmx5OyB9Ci0gICAgdm9p
ZCBzZXRJc0h0dHBPbmx5KGJvb2wgaXNIdHRwT25seSkgeyBtX2lzSHR0cE9ubHkgPSBpc0h0dHBP
bmx5OyB9Ci0KLSAgICBib29sIGlzU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNTZXNzaW9u
OyB9Ci0KLSAgICBib29sIGlzSG9zdE9ubHkoKSBjb25zdCB7IHJldHVybiAhbV9kb21haW4uc3Rh
cnRzV2l0aCgiLiIpOyB9Ci0KLSAgICBib29sIGhhc0V4cGlyZWQoKSBjb25zdDsKLSAgICBib29s
IGlzRm9yY2VFeHBpcmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0ZvcmNlRXhwaXJlZDsgfQotICAg
IGJvb2wgaXNVbmRlclNpemVMaW1pdCgpIGNvbnN0OwotICAgIGJvb2wgZG9tYWluSXNJUEFkZHJl
c3MoKSBjb25zdCB7IHJldHVybiBtX2RvbWFpbklzSVBBZGRyZXNzOyB9Ci0KLSAgICBTdHJpbmcg
dG9TdHJpbmcoKSBjb25zdDsKLSAgICBTdHJpbmcgdG9OYW1lVmFsdWVQYWlyKCkgY29uc3Q7Ci0g
ICAgdm9pZCBhcHBlbmRXZWJDb3JlQ29va2llKFZlY3RvcjxDb29raWU+JiBjb29raWVWZWN0b3Ip
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIC8vIERlZmF1bHQgY29va2llIDogZW1wdHkgZG9tYWlu
LCBub24gc2VjdXJlIGFuZCBzZXNzaW9uCi0gICAgUGFyc2VkQ29va2llKGRvdWJsZSBjdXJyZW50
VGltZSk7Ci0KLSAgICAvLyBGb3IgYmFja2luZyBzdG9yZSBjb29raWVzICh0aG9zZSBjb29raWVz
IGFyZSBuZXZlciBzZXNzaW9uIGNvb2tpZXMpLgotICAgIFBhcnNlZENvb2tpZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBpcnksIGRv
dWJsZSBsYXN0QWNjZXNzZWQsIGRvdWJsZSBjcmVhdGlvblRpbWUsIGJvb2wgaXNTZWN1cmUsIGJv
b2wgaXNIdHRwT25seSk7Ci0KLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIFN0cmluZyBtX3ZhbHVl
OwotICAgIFN0cmluZyBtX2RvbWFpbjsKLSAgICBTdHJpbmcgbV9wcm90b2NvbDsKLSAgICBTdHJp
bmcgbV9wYXRoOwotICAgIGRvdWJsZSBtX2V4cGlyeTsKLSAgICBkb3VibGUgbV9jcmVhdGlvblRp
bWU7Ci0gICAgLy8gVGhpcyBpcyB1c2VkIGZvciB0aGUgTFJVIHJlcGxhY2VtZW50IHBvbGljeS4K
LSAgICBkb3VibGUgbV9sYXN0QWNjZXNzZWQ7Ci0KLSAgICBib29sIG1faXNTZWN1cmU7Ci0gICAg
Ym9vbCBtX2lzSHR0cE9ubHk7Ci0gICAgYm9vbCBtX2lzU2Vzc2lvbjsKLSAgICBib29sIG1faXNG
b3JjZUV4cGlyZWQ7Ci0gICAgYm9vbCBtX2RvbWFpbklzSVBBZGRyZXNzOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUGFyc2VkQ29va2llX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGFzdGVib2FyZEJsYWNrQmVycnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGFzdGVib2Fy
ZEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ibGFja2JlcnJ5L1Bhc3RlYm9hcmRCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZC5o
IgotCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJS
YW5nZS5oIgotI2luY2x1ZGUgIm1hcmt1cC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtQ2xpcGJvYXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzdGVib2FyZDo6UGFz
dGVib2FyZCgpCi17Ci19Ci0KLWJvb2wgUGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQYXN0
ZWJvYXJkOjpjbGVhcigpCi17Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6
Y2xlYXJDbGlwYm9hcmQoKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUq
LCBVUkwgY29uc3QmLCBTdHJpbmcgY29uc3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHNlbGVjdGVkUmFuZ2Us
IGJvb2wsIEZyYW1lKiBmcmFtZSwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJv
YXJkIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCkKLXsKLSAgICBXVEY6
OlN0cmluZyB0ZXh0ID0gc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkID09
IEluY2x1ZGVJbWFnZUFsdFRleHRGb3JDbGlwYm9hcmQgPyBmcmFtZS0+ZWRpdG9yKCktPnNlbGVj
dGVkVGV4dEZvckNsaXBib2FyZCgpIDogZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsK
LSAgICBXVEY6OlN0cmluZyBodG1sID0gY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFu
bm90YXRlRm9ySW50ZXJjaGFuZ2UpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3Ry
aW5nLCBpbnZva2VTdHJpbmcsICgiaHJlZj1cImludm9rZTovLyIpKTsKLSAgICBzaXplX3Qgc3Rh
cnRPZkludm9rZSA9IGh0bWwuZmluZChpbnZva2VTdHJpbmcpOwotICAgIGlmIChzdGFydE9mSW52
b2tlICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIHNpemVfdCBlbmRPZkludm9rZSA9IGh0bWwuZmlu
ZCgiXCIiLCBzdGFydE9mSW52b2tlICsgaW52b2tlU3RyaW5nLmxlbmd0aCgpKSArIDE7Ci0gICAg
ICAgIGh0bWwucmVtb3ZlKHN0YXJ0T2ZJbnZva2UsIGVuZE9mSW52b2tlIC0gc3RhcnRPZkludm9r
ZSk7Ci0gICAgfQotICAgIFdURjo6U3RyaW5nIHVybCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwo
KS5zdHJpbmcoKTsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDbGlwYm9hcmQ6OndyaXRl
KHRleHQsIGh0bWwsIHVybCk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFz
dGVib2FyZFVSTCYgcGFzdGVib2FyZFVSTCkKLXsKLSAgICBBU1NFUlQoIXBhc3RlYm9hcmRVUkwu
dXJsLmlzRW1wdHkoKSk7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6d3Jp
dGVVUkwocGFzdGVib2FyZFVSTC51cmwuc3RyaW5nKCkpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6
OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uKQot
ewotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDbGlwYm9hcmQ6OndyaXRlUGxhaW5UZXh0KHRl
eHQpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFBsYWluVGV4dCYgdGV4
dCkKLXsKLSAgICB0ZXh0LnRleHQgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjpy
ZWFkUGxhaW5UZXh0KCk7Ci19Ci0KLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVi
b2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IGNv
bnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQotewotICAg
IGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7Ci0KLSAgICAvLyBOb3RlOiBXZSBhcmUgYWJsZSB0byBj
aGVjayBpZiB0aGUgZm9ybWF0IGV4aXN0cyBwcmlvciB0byByZWFkaW5nIGJ1dCB0aGUgY2hlY2sg
JiB0aGUgZWFybHkgcmV0dXJuCi0gICAgLy8gcGF0aCBvZiBnZXRfY2xpcGJvYXJkX2RhdGEgYXJl
IHRoZSBleGFjdCBzYW1lLCBzbyBqdXN0IHVzZSBnZXRfY2xpcGJvYXJkX2RhdGEgYW5kIHZhbGlk
YXRlIHRoZQotICAgIC8vIHJldHVybiB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIGRhdGEgd2Fz
IHByZXNlbnQuCi0gICAgU3RyaW5nIGh0bWwgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJv
YXJkOjpyZWFkSFRNTCgpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudDsK
LSAgICBpZiAoIWh0bWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFN0cmluZyB1cmwgPSBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjpyZWFkVVJMKCk7Ci0gICAgICAgIGlmIChmcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgaHRtbCwgdXJs
LCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpKQotICAgICAgICAgICAgcmV0dXJu
IGZyYWdtZW50LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWFsbG93UGxhaW5UZXh0KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFN0cmluZyB0ZXh0ID0gQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkNsaXBib2FyZDo6cmVhZFBsYWluVGV4dCgpOwotICAgIGlmIChmcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dC5nZXQoKSwgdGV4dCkpIHsKLSAgICAgICAgY2hvc2VQ
bGFpblRleHQgPSB0cnVlOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotICAg
IH0KLSAgICByZXR1cm4gMDsKLX0KLQotUGFzc093blB0cjxQYXN0ZWJvYXJkPiBQYXN0ZWJvYXJk
OjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFz
dGVib2FyZCk7Ci19Ci0KLVBhc3NPd25QdHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRl
UHJpdmF0ZSgpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwotfQotCi1i
b29sIFBhc3RlYm9hcmQ6Omhhc0RhdGEoKQotewotICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6Q2xpcGJvYXJkOjpoYXNQbGFpblRleHQoKSB8fCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
Q2xpcGJvYXJkOjpoYXNIVE1MKCkgfHwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6
aGFzVVJMKCk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoY29uc3QgU3RyaW5nJiB0eXBl
KQotewotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDbGlwYm9hcmQ6OmNsZWFyQ2xpcGJvYXJk
QnlUeXBlKHR5cGUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLVN0cmluZyBQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjpyZWFkQ2xpcGJvYXJkQnlUeXBlKHR5
cGUudXRmOCgpLmRhdGEoKSkuY19zdHIoKSk7Ci19Ci0KLWJvb2wgUGFzdGVib2FyZDo6d3JpdGVT
dHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQpCi17Ci0gICAgaWYg
KHR5cGUgPT0gInRleHQvcGxhaW4iKSB7Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpD
bGlwYm9hcmQ6OndyaXRlUGxhaW5UZXh0KHRleHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIpIHsKLSAgICAgICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkNsaXBib2FyZDo6d3JpdGVIVE1MKHRleHQpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgaWYgKHR5cGUgPT0gInRleHQvdXJsIikgewotICAgICAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjp3cml0ZVVSTCh0ZXh0KTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGFz
dGVib2FyZDo6dHlwZXMoKQotewotICAgIC8vIFdlIHVzZSBoYXJkY29kZWQgbGlzdCBoZXJlIHNp
bmNlIHRoZXJlIHNlZW1zIHRvIGJlIG5vIEFQSSB0byBnZXQgdGhlIGxpc3QuCi0gICAgLy8gRklY
TUU6IFNob3VsZCBvbWl0IHR5cGVzIHdoZXJlIHdlIGhhdmUgbm8gZGF0YSwgdXNpbmcgdGhlIHNh
bWUgZnVuY3Rpb25zIHVzZWQgYWJvdmUgaW4gUGFzdGVib2FyZDo6aGFzRGF0YS4KLSAgICBWZWN0
b3I8U3RyaW5nPiB0eXBlczsKLSAgICB0eXBlcy5hZGQoInRleHQvcGxhaW4iKTsKLSAgICB0eXBl
cy5hZGQoInRleHQvaHRtbCIpOwotICAgIHR5cGVzLmFkZCgidGV4dC91cmwiKTsKLSAgICByZXR1
cm4gdHlwZXM7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2JsYWNrYmVycnkvUGxhdGZvcm1LZXlib2FyZEV2ZW50QmxhY2tCZXJyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QbGF0Zm9ybUtleWJv
YXJkRXZlbnRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRCbGFja0JlcnJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1MDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCi0KLSNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtTG9nLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2NyZWVuLmg+Ci0jaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckJsYWNr
QmVycnlDaGFyYWN0ZXIodW5zaWduZWQgY2hhcmFjdGVyKQotewotICAgIHN3aXRjaCAoY2hhcmFj
dGVyKSB7Ci0gICAgY2FzZSBLRVlDT0RFX1JFVFVSTjoKLSAgICBjYXNlIEtFWUNPREVfS1BfRU5U
RVI6Ci0gICAgICAgIHJldHVybiAiRW50ZXIiOwotICAgIGNhc2UgS0VZQ09ERV9CQUNLU1BBQ0U6
Ci0gICAgICAgIHJldHVybiAiVSswMDA4IjsKLSAgICBjYXNlIEtFWUNPREVfREVMRVRFOgotICAg
ICAgICByZXR1cm4gIlUrMDA3RiI7Ci0gICAgY2FzZSBLRVlDT0RFX0VTQ0FQRToKLSAgICAgICAg
cmV0dXJuICJFc2NhcGUiOwotICAgIGNhc2UgS0VZQ09ERV9QQVVTRToKLSAgICAgICAgcmV0dXJu
ICJQYXVzZSI7Ci0gICAgY2FzZSBLRVlDT0RFX1BSSU5UOgotICAgICAgICByZXR1cm4gIlByaW50
U2NyZWVuIjsKLSAgICBjYXNlIEtFWUNPREVfVEFCOgotICAgIGNhc2UgS0VZQ09ERV9CQUNLX1RB
QjoKLSAgICAgICAgcmV0dXJuICJVKzAwMDkiOwotICAgIGNhc2UgS0VZQ09ERV9MRUZUOgotICAg
IGNhc2UgS0VZQ09ERV9LUF9MRUZUOgotICAgICAgICByZXR1cm4gIkxlZnQiOwotICAgIGNhc2Ug
S0VZQ09ERV9SSUdIVDoKLSAgICBjYXNlIEtFWUNPREVfS1BfUklHSFQ6Ci0gICAgICAgIHJldHVy
biAiUmlnaHQiOwotICAgIGNhc2UgS0VZQ09ERV9VUDoKLSAgICBjYXNlIEtFWUNPREVfS1BfVVA6
Ci0gICAgICAgIHJldHVybiAiVXAiOwotICAgIGNhc2UgS0VZQ09ERV9ET1dOOgotICAgIGNhc2Ug
S0VZQ09ERV9LUF9ET1dOOgotICAgICAgICByZXR1cm4gIkRvd24iOwotICAgIGNhc2UgS0VZQ09E
RV9LUF9ERUxFVEU6Ci0gICAgICAgIHJldHVybiAiVSswMDdGIjsKLSAgICBjYXNlIEtFWUNPREVf
TUVOVToKLSAgICBjYXNlIEtFWUNPREVfTEVGVF9BTFQ6Ci0gICAgY2FzZSBLRVlDT0RFX1JJR0hU
X0FMVDoKLSAgICAgICAgcmV0dXJuICJBbHQiOwotICAgIGNhc2UgS0VZQ09ERV9IT01FOgotICAg
IGNhc2UgS0VZQ09ERV9LUF9IT01FOgotICAgICAgICByZXR1cm4gIkhvbWUiOwotICAgIGNhc2Ug
S0VZQ09ERV9JTlNFUlQ6Ci0gICAgY2FzZSBLRVlDT0RFX0tQX0lOU0VSVDoKLSAgICAgICAgcmV0
dXJuICJJbnNlcnQiOwotICAgIGNhc2UgS0VZQ09ERV9QR19VUDoKLSAgICBjYXNlIEtFWUNPREVf
S1BfUEdfVVA6Ci0gICAgICAgIHJldHVybiAiUGFnZVVwIjsKLSAgICBjYXNlIEtFWUNPREVfUEdf
RE9XTjoKLSAgICBjYXNlIEtFWUNPREVfS1BfUEdfRE9XTjoKLSAgICAgICAgcmV0dXJuICJQYWdl
RG93biI7Ci0gICAgY2FzZSBLRVlDT0RFX0VORDoKLSAgICBjYXNlIEtFWUNPREVfS1BfRU5EOgot
ICAgICAgICByZXR1cm4gIkVuZCI7Ci0gICAgY2FzZSBLRVlDT0RFX0YxOgotICAgICAgICByZXR1
cm4gIkYxIjsKLSAgICBjYXNlIEtFWUNPREVfRjI6Ci0gICAgICAgIHJldHVybiAiRjIiOwotICAg
IGNhc2UgS0VZQ09ERV9GMzoKLSAgICAgICAgcmV0dXJuICJGMyI7Ci0gICAgY2FzZSBLRVlDT0RF
X0Y0OgotICAgICAgICByZXR1cm4gIkY0IjsKLSAgICBjYXNlIEtFWUNPREVfRjU6Ci0gICAgICAg
IHJldHVybiAiRjUiOwotICAgIGNhc2UgS0VZQ09ERV9GNjoKLSAgICAgICAgcmV0dXJuICJGNiI7
Ci0gICAgY2FzZSBLRVlDT0RFX0Y3OgotICAgICAgICByZXR1cm4gIkY3IjsKLSAgICBjYXNlIEtF
WUNPREVfRjg6Ci0gICAgICAgIHJldHVybiAiRjgiOwotICAgIGNhc2UgS0VZQ09ERV9GOToKLSAg
ICAgICAgcmV0dXJuICJGOSI7Ci0gICAgY2FzZSBLRVlDT0RFX0YxMDoKLSAgICAgICAgcmV0dXJu
ICJGMTAiOwotICAgIGNhc2UgS0VZQ09ERV9GMTE6Ci0gICAgICAgIHJldHVybiAiRjExIjsKLSAg
ICBjYXNlIEtFWUNPREVfRjEyOgotICAgICAgICByZXR1cm4gIkYxMiI7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJVKyUwNFgiLCBXVEY6OnRvQVNDSUlVcHBl
cihjaGFyYWN0ZXIpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JC
bGFja0JlcnJ5S2V5Y29kZSh1bnNpZ25lZCBrZXljb2RlKQotewotICAgIHN3aXRjaCAoa2V5Y29k
ZSkgewotICAgIGNhc2UgS0VZQ09ERV9SRVRVUk46Ci0gICAgY2FzZSBLRVlDT0RFX0tQX0VOVEVS
OgotICAgICAgICByZXR1cm4gVktfUkVUVVJOOyAvLyAoMEQpIFJldHVybiBrZXkKLSAgICBjYXNl
IEtFWUNPREVfQkFDS1NQQUNFOgotICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNL
U1BBQ0Uga2V5Ci0gICAgY2FzZSBLRVlDT0RFX0RFTEVURToKLSAgICAgICAgcmV0dXJuIFZLX0RF
TEVURTsgLy8gKDJFKSBERUwga2V5Ci0gICAgY2FzZSBLRVlDT0RFX0VTQ0FQRToKLSAgICAgICAg
cmV0dXJuIFZLX0VTQ0FQRTsKLSAgICBjYXNlIEtFWUNPREVfU1BBQ0U6Ci0gICAgICAgIHJldHVy
biBWS19TUEFDRTsKLSAgICBjYXNlICcwJzoKLSAgICBjYXNlICcpJzoKLSAgICAgICAgcmV0dXJu
IFZLXzA7Ci0gICAgY2FzZSAnMSc6Ci0gICAgY2FzZSAnISc6Ci0gICAgICAgIHJldHVybiBWS18x
OwotICAgIGNhc2UgJzInOgotICAgIGNhc2UgJ0AnOgotICAgICAgICByZXR1cm4gVktfMjsKLSAg
ICBjYXNlICczJzoKLSAgICBjYXNlICcjJzoKLSAgICAgICAgcmV0dXJuIFZLXzM7Ci0gICAgY2Fz
ZSAnNCc6Ci0gICAgY2FzZSAnJCc6Ci0gICAgICAgIHJldHVybiBWS180OwotICAgIGNhc2UgJzUn
OgotICAgIGNhc2UgJyUnOgotICAgICAgICByZXR1cm4gVktfNTsKLSAgICBjYXNlICc2JzoKLSAg
ICBjYXNlICdeJzoKLSAgICAgICAgcmV0dXJuIFZLXzY7Ci0gICAgY2FzZSAnNyc6Ci0gICAgY2Fz
ZSAnJic6Ci0gICAgICAgIHJldHVybiBWS183OwotICAgIGNhc2UgJzgnOgotICAgIGNhc2UgJyon
OgotICAgICAgICByZXR1cm4gVktfODsKLSAgICBjYXNlICc5JzoKLSAgICBjYXNlICcoJzoKLSAg
ICAgICAgcmV0dXJuIFZLXzk7Ci0gICAgY2FzZSAnYSc6Ci0gICAgY2FzZSAnQSc6Ci0gICAgICAg
IHJldHVybiBWS19BOwotICAgIGNhc2UgJ2InOgotICAgIGNhc2UgJ0InOgotICAgICAgICByZXR1
cm4gVktfQjsKLSAgICBjYXNlICdjJzoKLSAgICBjYXNlICdDJzoKLSAgICAgICAgcmV0dXJuIFZL
X0M7Ci0gICAgY2FzZSAnZCc6Ci0gICAgY2FzZSAnRCc6Ci0gICAgICAgIHJldHVybiBWS19EOwot
ICAgIGNhc2UgJ2UnOgotICAgIGNhc2UgJ0UnOgotICAgICAgICByZXR1cm4gVktfRTsKLSAgICBj
YXNlICdmJzoKLSAgICBjYXNlICdGJzoKLSAgICAgICAgcmV0dXJuIFZLX0Y7Ci0gICAgY2FzZSAn
Zyc6Ci0gICAgY2FzZSAnRyc6Ci0gICAgICAgIHJldHVybiBWS19HOwotICAgIGNhc2UgJ2gnOgot
ICAgIGNhc2UgJ0gnOgotICAgICAgICByZXR1cm4gVktfSDsKLSAgICBjYXNlICdpJzoKLSAgICBj
YXNlICdJJzoKLSAgICAgICAgcmV0dXJuIFZLX0k7Ci0gICAgY2FzZSAnaic6Ci0gICAgY2FzZSAn
Sic6Ci0gICAgICAgIHJldHVybiBWS19KOwotICAgIGNhc2UgJ2snOgotICAgIGNhc2UgJ0snOgot
ICAgICAgICByZXR1cm4gVktfSzsKLSAgICBjYXNlICdsJzoKLSAgICBjYXNlICdMJzoKLSAgICAg
ICAgcmV0dXJuIFZLX0w7Ci0gICAgY2FzZSAnbSc6Ci0gICAgY2FzZSAnTSc6Ci0gICAgICAgIHJl
dHVybiBWS19NOwotICAgIGNhc2UgJ24nOgotICAgIGNhc2UgJ04nOgotICAgICAgICByZXR1cm4g
VktfTjsKLSAgICBjYXNlICdvJzoKLSAgICBjYXNlICdPJzoKLSAgICAgICAgcmV0dXJuIFZLX087
Ci0gICAgY2FzZSAncCc6Ci0gICAgY2FzZSAnUCc6Ci0gICAgICAgIHJldHVybiBWS19QOwotICAg
IGNhc2UgJ3EnOgotICAgIGNhc2UgJ1EnOgotICAgICAgICByZXR1cm4gVktfUTsKLSAgICBjYXNl
ICdyJzoKLSAgICBjYXNlICdSJzoKLSAgICAgICAgcmV0dXJuIFZLX1I7Ci0gICAgY2FzZSAncyc6
Ci0gICAgY2FzZSAnUyc6Ci0gICAgICAgIHJldHVybiBWS19TOwotICAgIGNhc2UgJ3QnOgotICAg
IGNhc2UgJ1QnOgotICAgICAgICByZXR1cm4gVktfVDsKLSAgICBjYXNlICd1JzoKLSAgICBjYXNl
ICdVJzoKLSAgICAgICAgcmV0dXJuIFZLX1U7Ci0gICAgY2FzZSAndic6Ci0gICAgY2FzZSAnVic6
Ci0gICAgICAgIHJldHVybiBWS19WOwotICAgIGNhc2UgJ3cnOgotICAgIGNhc2UgJ1cnOgotICAg
ICAgICByZXR1cm4gVktfVzsKLSAgICBjYXNlICd4JzoKLSAgICBjYXNlICdYJzoKLSAgICAgICAg
cmV0dXJuIFZLX1g7Ci0gICAgY2FzZSAneSc6Ci0gICAgY2FzZSAnWSc6Ci0gICAgICAgIHJldHVy
biBWS19ZOwotICAgIGNhc2UgJ3onOgotICAgIGNhc2UgJ1onOgotICAgICAgICByZXR1cm4gVktf
WjsKLSAgICBjYXNlICcrJzoKLSAgICBjYXNlICc9JzoKLSAgICAgICAgcmV0dXJuIFZLX09FTV9Q
TFVTOwotICAgIGNhc2UgJy0nOgotICAgIGNhc2UgJ18nOgotICAgICAgICByZXR1cm4gVktfT0VN
X01JTlVTOwotICAgIGNhc2UgJzwnOgotICAgIGNhc2UgJywnOgotICAgICAgICByZXR1cm4gVktf
T0VNX0NPTU1BOwotICAgIGNhc2UgJz4nOgotICAgIGNhc2UgJy4nOgotICAgICAgICByZXR1cm4g
VktfT0VNX1BFUklPRDsKLSAgICBjYXNlICc6JzoKLSAgICBjYXNlICc7JzoKLSAgICAgICAgcmV0
dXJuIFZLX09FTV8xOwotICAgIGNhc2UgJy8nOgotICAgIGNhc2UgJz8nOgotICAgICAgICByZXR1
cm4gVktfT0VNXzI7Ci0gICAgY2FzZSAnfic6Ci0gICAgY2FzZSAnYCc6Ci0gICAgICAgIHJldHVy
biBWS19PRU1fMzsKLSAgICBjYXNlICd7JzoKLSAgICBjYXNlICdbJzoKLSAgICAgICAgcmV0dXJu
IFZLX09FTV80OwotICAgIGNhc2UgJ3wnOgotICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgcmV0dXJu
IFZLX09FTV81OwotICAgIGNhc2UgJ30nOgotICAgIGNhc2UgJ10nOgotICAgICAgICByZXR1cm4g
VktfT0VNXzY7Ci0gICAgY2FzZSAnIic6Ci0gICAgY2FzZSAnXCcnOgotICAgICAgICByZXR1cm4g
VktfT0VNXzc7Ci0gICAgY2FzZSBLRVlDT0RFX1BBVVNFOgotICAgICAgICByZXR1cm4gVktfUEFV
U0U7Ci0gICAgY2FzZSBLRVlDT0RFX1BSSU5UOgotICAgICAgICByZXR1cm4gVktfUFJJTlQ7Ci0g
ICAgY2FzZSBLRVlDT0RFX1NDUk9MTF9MT0NLOgotICAgICAgICByZXR1cm4gVktfU0NST0xMOwot
ICAgIGNhc2UgS0VZQ09ERV9UQUI6Ci0gICAgY2FzZSBLRVlDT0RFX0JBQ0tfVEFCOgotICAgICAg
ICByZXR1cm4gVktfVEFCOwotICAgIGNhc2UgS0VZQ09ERV9MRUZUOgotICAgIGNhc2UgS0VZQ09E
RV9LUF9MRUZUOgotICAgICAgICByZXR1cm4gVktfTEVGVDsKLSAgICBjYXNlIEtFWUNPREVfUklH
SFQ6Ci0gICAgY2FzZSBLRVlDT0RFX0tQX1JJR0hUOgotICAgICAgICByZXR1cm4gVktfUklHSFQ7
Ci0gICAgY2FzZSBLRVlDT0RFX1VQOgotICAgIGNhc2UgS0VZQ09ERV9LUF9VUDoKLSAgICAgICAg
cmV0dXJuIFZLX1VQOwotICAgIGNhc2UgS0VZQ09ERV9ET1dOOgotICAgIGNhc2UgS0VZQ09ERV9L
UF9ET1dOOgotICAgICAgICByZXR1cm4gVktfRE9XTjsKLSAgICBjYXNlIEtFWUNPREVfS1BfREVM
RVRFOgotICAgICAgICByZXR1cm4gVktfREVMRVRFOwotICAgIGNhc2UgS0VZQ09ERV9NRU5VOgot
ICAgIGNhc2UgS0VZQ09ERV9MRUZUX0FMVDoKLSAgICBjYXNlIEtFWUNPREVfUklHSFRfQUxUOgot
ICAgICAgICByZXR1cm4gVktfTUVOVTsKLSAgICBjYXNlIEtFWUNPREVfSE9NRToKLSAgICBjYXNl
IEtFWUNPREVfS1BfSE9NRToKLSAgICAgICAgcmV0dXJuIFZLX0hPTUU7Ci0gICAgY2FzZSBLRVlD
T0RFX0lOU0VSVDoKLSAgICBjYXNlIEtFWUNPREVfS1BfSU5TRVJUOgotICAgICAgICByZXR1cm4g
VktfSU5TRVJUOwotICAgIGNhc2UgS0VZQ09ERV9QR19VUDoKLSAgICBjYXNlIEtFWUNPREVfS1Bf
UEdfVVA6Ci0gICAgICAgIHJldHVybiBWS19QUklPUjsKLSAgICBjYXNlIEtFWUNPREVfUEdfRE9X
TjoKLSAgICBjYXNlIEtFWUNPREVfS1BfUEdfRE9XTjoKLSAgICAgICAgcmV0dXJuIFZLX05FWFQ7
Ci0gICAgY2FzZSBLRVlDT0RFX0VORDoKLSAgICBjYXNlIEtFWUNPREVfS1BfRU5EOgotICAgICAg
ICByZXR1cm4gVktfRU5EOwotICAgIGNhc2UgS0VZQ09ERV9DQVBTX0xPQ0s6Ci0gICAgICAgIHJl
dHVybiBWS19DQVBJVEFMOwotICAgIGNhc2UgS0VZQ09ERV9MRUZUX1NISUZUOgotICAgIGNhc2Ug
S0VZQ09ERV9SSUdIVF9TSElGVDoKLSAgICAgICAgcmV0dXJuIFZLX1NISUZUOwotICAgIGNhc2Ug
S0VZQ09ERV9MRUZUX0NUUkw6Ci0gICAgY2FzZSBLRVlDT0RFX1JJR0hUX0NUUkw6Ci0gICAgICAg
IHJldHVybiBWS19DT05UUk9MOwotICAgIGNhc2UgS0VZQ09ERV9OVU1fTE9DSzoKLSAgICAgICAg
cmV0dXJuIFZLX05VTUxPQ0s7Ci0gICAgY2FzZSBLRVlDT0RFX0tQX1BMVVM6Ci0gICAgICAgIHJl
dHVybiBWS19BREQ7Ci0gICAgY2FzZSBLRVlDT0RFX0tQX01JTlVTOgotICAgICAgICByZXR1cm4g
VktfU1VCVFJBQ1Q7Ci0gICAgY2FzZSBLRVlDT0RFX0tQX01VTFRJUExZOgotICAgICAgICByZXR1
cm4gVktfTVVMVElQTFk7Ci0gICAgY2FzZSBLRVlDT0RFX0tQX0RJVklERToKLSAgICAgICAgcmV0
dXJuIFZLX0RJVklERTsKLSAgICBjYXNlIEtFWUNPREVfS1BfRklWRToKLSAgICAgICAgcmV0dXJu
IFZLX05VTVBBRDU7Ci0gICAgY2FzZSBLRVlDT0RFX0YxOgotICAgICAgICByZXR1cm4gVktfRjE7
Ci0gICAgY2FzZSBLRVlDT0RFX0YyOgotICAgICAgICByZXR1cm4gVktfRjI7Ci0gICAgY2FzZSBL
RVlDT0RFX0YzOgotICAgICAgICByZXR1cm4gVktfRjM7Ci0gICAgY2FzZSBLRVlDT0RFX0Y0Ogot
ICAgICAgICByZXR1cm4gVktfRjQ7Ci0gICAgY2FzZSBLRVlDT0RFX0Y1OgotICAgICAgICByZXR1
cm4gVktfRjU7Ci0gICAgY2FzZSBLRVlDT0RFX0Y2OgotICAgICAgICByZXR1cm4gVktfRjY7Ci0g
ICAgY2FzZSBLRVlDT0RFX0Y3OgotICAgICAgICByZXR1cm4gVktfRjc7Ci0gICAgY2FzZSBLRVlD
T0RFX0Y4OgotICAgICAgICByZXR1cm4gVktfRjg7Ci0gICAgY2FzZSBLRVlDT0RFX0Y5OgotICAg
ICAgICByZXR1cm4gVktfRjk7Ci0gICAgY2FzZSBLRVlDT0RFX0YxMDoKLSAgICAgICAgcmV0dXJu
IFZLX0YxMDsKLSAgICBjYXNlIEtFWUNPREVfRjExOgotICAgICAgICByZXR1cm4gVktfRjExOwot
ICAgIGNhc2UgS0VZQ09ERV9GMTI6Ci0gICAgICAgIHJldHVybiBWS19GMTI7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBhZGp1c3RDaGFyYWN0
ZXJGcm9tT1ModW5zaWduZWQgY2hhcmFjdGVyKQotewotICAgIC8vIFVzZSB3aW5kb3dzIGtleSBj
aGFyYWN0ZXIgYXMgQVNDSUkgdmFsdWUgd2hlbiBwb3NzaWJsZSB0byBlbmhhbmNlIHJlYWRhYmls
aXR5LgotICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7Ci0gICAgY2FzZSBLRVlDT0RFX0JBQ0tTUEFD
RToKLSAgICAgICAgcmV0dXJuIFZLX0JBQ0s7Ci0gICAgY2FzZSBLRVlDT0RFX0tQX0RFTEVURToK
LSAgICBjYXNlIEtFWUNPREVfREVMRVRFOgotICAgICAgICByZXR1cm4gMHg3ZjsKLSAgICBjYXNl
IEtFWUNPREVfRVNDQVBFOgotICAgICAgICByZXR1cm4gVktfRVNDQVBFOwotICAgIGNhc2UgS0VZ
Q09ERV9SRVRVUk46Ci0gICAgY2FzZSBLRVlDT0RFX0tQX0VOVEVSOgotICAgICAgICByZXR1cm4g
VktfUkVUVVJOOwotICAgIGNhc2UgS0VZQ09ERV9LUF9QTFVTOgotICAgICAgICByZXR1cm4gVktf
QUREOwotICAgIGNhc2UgS0VZQ09ERV9LUF9NSU5VUzoKLSAgICAgICAgcmV0dXJuIFZLX1NVQlRS
QUNUOwotICAgIGNhc2UgS0VZQ09ERV9LUF9NVUxUSVBMWToKLSAgICAgICAgcmV0dXJuIFZLX01V
TFRJUExZOwotICAgIGNhc2UgS0VZQ09ERV9LUF9ESVZJREU6Ci0gICAgICAgIHJldHVybiBWS19E
SVZJREU7Ci0gICAgY2FzZSBLRVlDT0RFX0tQX0ZJVkU6Ci0gICAgY2FzZSBLRVlDT0RFX0hPTUU6
Ci0gICAgY2FzZSBLRVlDT0RFX0tQX0hPTUU6Ci0gICAgY2FzZSBLRVlDT0RFX0VORDoKLSAgICBj
YXNlIEtFWUNPREVfS1BfRU5EOgotICAgIGNhc2UgS0VZQ09ERV9JTlNFUlQ6Ci0gICAgY2FzZSBL
RVlDT0RFX0tQX0lOU0VSVDoKLSAgICBjYXNlIEtFWUNPREVfUEdfVVA6Ci0gICAgY2FzZSBLRVlD
T0RFX0tQX1BHX1VQOgotICAgIGNhc2UgS0VZQ09ERV9QR19ET1dOOgotICAgIGNhc2UgS0VZQ09E
RV9LUF9QR19ET1dOOgotICAgIGNhc2UgS0VZQ09ERV9NRU5VOgotICAgIGNhc2UgS0VZQ09ERV9M
RUZUX0FMVDoKLSAgICBjYXNlIEtFWUNPREVfUklHSFRfQUxUOgotICAgIGNhc2UgS0VZQ09ERV9D
QVBTX0xPQ0s6Ci0gICAgY2FzZSBLRVlDT0RFX0xFRlRfU0hJRlQ6Ci0gICAgY2FzZSBLRVlDT0RF
X1JJR0hUX1NISUZUOgotICAgIGNhc2UgS0VZQ09ERV9MRUZUX0NUUkw6Ci0gICAgY2FzZSBLRVlD
T0RFX1JJR0hUX0NUUkw6Ci0gICAgY2FzZSBLRVlDT0RFX05VTV9MT0NLOgotICAgIGNhc2UgS0VZ
Q09ERV9QUklOVDoKLSAgICBjYXNlIEtFWUNPREVfU0NST0xMX0xPQ0s6Ci0gICAgY2FzZSBLRVlD
T0RFX1BBVVNFOgotICAgIGNhc2UgS0VZQ09ERV9GMToKLSAgICBjYXNlIEtFWUNPREVfRjI6Ci0g
ICAgY2FzZSBLRVlDT0RFX0YzOgotICAgIGNhc2UgS0VZQ09ERV9GNDoKLSAgICBjYXNlIEtFWUNP
REVfRjU6Ci0gICAgY2FzZSBLRVlDT0RFX0Y2OgotICAgIGNhc2UgS0VZQ09ERV9GNzoKLSAgICBj
YXNlIEtFWUNPREVfRjg6Ci0gICAgY2FzZSBLRVlDT0RFX0Y5OgotICAgIGNhc2UgS0VZQ09ERV9G
MTA6Ci0gICAgY2FzZSBLRVlDT0RFX0YxMToKLSAgICBjYXNlIEtFWUNPREVfRjEyOgotICAgIGNh
c2UgS0VZQ09ERV9MRUZUOgotICAgIGNhc2UgS0VZQ09ERV9SSUdIVDoKLSAgICBjYXNlIEtFWUNP
REVfVVA6Ci0gICAgY2FzZSBLRVlDT0RFX0RPV046Ci0gICAgICAgIHJldHVybiAwOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gY2hhcmFjdGVyOwotfQot
Ci1zdGF0aWMgaW5saW5lIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6VHlwZSB0b1dlYkNvcmVQbGF0
Zm9ybUtleWJvYXJkRXZlbnRUeXBlKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpLZXlib2Fy
ZEV2ZW50OjpUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6S2V5Ym9hcmRFdmVudDo6S2V5RG93bjoKLSAgICAgICAgcmV0dXJu
IFBsYXRmb3JtRXZlbnQ6OktleURvd247Ci0gICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
S2V5Ym9hcmRFdmVudDo6S2V5VXA6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpLZXlV
cDsKLSAgICBjYXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpLZXlib2FyZEV2ZW50OjpLZXlDaGFy
OgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpDaGFyOwotICAg
IH0KLX0KLQotUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OktleWJvYXJkRXZlbnQmIGV2ZW50KQotICAgIDogUGxh
dGZvcm1FdmVudCh0b1dlYkNvcmVQbGF0Zm9ybUtleWJvYXJkRXZlbnRUeXBlKGV2ZW50LnR5cGUo
KSksIGV2ZW50LnNoaWZ0QWN0aXZlKCkgfHwgKGV2ZW50LmNoYXJhY3RlcigpID09IEtFWUNPREVf
QkFDS19UQUIpLCBldmVudC5jdHJsQWN0aXZlKCksIGV2ZW50LmFsdEFjdGl2ZSgpLCBldmVudC5t
ZXRhQWN0aXZlKCksIGN1cnJlbnRUaW1lKCkpCi0gICAgLCBtX2tleUlkZW50aWZpZXIoa2V5SWRl
bnRpZmllckZvckJsYWNrQmVycnlDaGFyYWN0ZXIoZXZlbnQuY2hhcmFjdGVyKCkpKQotICAgICwg
bV93aW5kb3dzVmlydHVhbEtleUNvZGUod2luZG93c0tleUNvZGVGb3JCbGFja0JlcnJ5S2V5Y29k
ZShldmVudC5rZXljb2RlKCkgPyBldmVudC5rZXljb2RlKCkgOiBldmVudC5jaGFyYWN0ZXIoKSkp
IC8vIGlmIGtleWNvZGUgaXNuJ3QgdmFsaWQsIHVzZSBjaGFyYWN0ZXIgYXMgaXQncyB1bmNvbnZl
cnRlZC4KLSAgICAsIG1fYXV0b1JlcGVhdChmYWxzZSkKLSAgICAsIG1faXNLZXlwYWQoZmFsc2Up
Ci0gICAgLCBtX3VubW9kaWZpZWRDaGFyYWN0ZXIoZXZlbnQuY2hhcmFjdGVyKCkpCi17Ci0gICAg
dW5zaWduZWQgY2hhcmFjdGVyID0gYWRqdXN0Q2hhcmFjdGVyRnJvbU9TKGV2ZW50LmNoYXJhY3Rl
cigpKTsKLSAgICBVQ2hhciB1dGYxNlszXSA9IHswfTsKLSAgICBpbnQgZGVzdExlbmd0aCA9IDA7
Ci0gICAgVUVycm9yQ29kZSBlYyA9IFVfWkVST19FUlJPUjsKLSAgICB1X3N0ckZyb21VVEYzMih1
dGYxNiwgMywgJmRlc3RMZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIzMio+KCZjaGFyYWN0
ZXIpLCAxLCAmZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBCQkxPRyhCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZv
cm1LZXlib2FyZEV2ZW50IEVycm9yIGNvbnZlcnRpbmcgMHgleCB0byBzdHJpbmcgZWMgKCVkKS4i
LCBjaGFyYWN0ZXIsIGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3RleHQgPSBT
dHJpbmcodXRmMTYsIGRlc3RMZW5ndGgpOwotICAgIG1fdW5tb2RpZmllZFRleHQgPSBtX3RleHQ7
Ci0KLSAgICBpZiAoZXZlbnQuY2hhcmFjdGVyKCkgPT0gS0VZQ09ERV9CQUNLX1RBQikKLSAgICAg
ICAgbV9tb2RpZmllcnMgfD0gU2hpZnRLZXk7IC8vIEJhY2tUYWIgc2hvdWxkIGJlIHRyZWF0ZWQg
YXMgU2hpZnQgKyBUYWIuCi0KLSAgICBCQkxPRyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2
ZWxJbmZvLCAiS2V5Ym9hcmQgZXZlbnQgcmVjZWl2ZWQgdGV4dD0lbGMsIGtleUlkZW50aWZpZXI9
JXMsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZT0lZCIsIGV2ZW50LmNoYXJhY3RlcigpLCBtX2tleUlk
ZW50aWZpZXIubGF0aW4xKCkuZGF0YSgpLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSk7Ci19Ci0K
LWJvb2wgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGxhdGZv
cm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1FdmVudDo6
VHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCi17Ci0gICAgLy8gQ2Fu
IG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlEb3duIHRvIFJhd0tleURvd24gb3IgQ2hhciwgYXMg
d2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29udmVyc2lvbnMuCi0gICAgQVNTRVJUKG1f
dHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duKTsKLSAgICBtX3R5cGUgPSB0eXBlOwotCi0g
ICAgaWYgKGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pIHsKLSAgICAgICAgbV90ZXh0
ID0gU3RyaW5nKCk7Ci0gICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBTdHJpbmcoKTsKLSAgICAgICAgbV93
aW5kb3dzVmlydHVhbEtleUNvZGUgPSAwOwotICAgIH0KLX0KLQotdm9pZCBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OmdldEN1cnJlbnRNb2RpZmllclN0YXRlKGJvb2wmIHNoaWZ0S2V5LCBib29sJiBj
dHJsS2V5LCBib29sJiBhbHRLZXksIGJvb2wmIG1ldGFLZXkpCi17Ci0gICAgaW50IG1vZGlmaWVy
cyA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U2NyZWVuOjpwcmltYXJ5U2NyZWVu
KCktPmdldEN1cnJlbnRNb2RpZmllcnNTdGF0ZSgpOwotICAgIHNoaWZ0S2V5ID0gbW9kaWZpZXJz
ICYgS0VZTU9EX1NISUZUOwotICAgIGN0cmxLZXkgPSBtb2RpZmllcnMgJiBLRVlNT0RfQ1RSTDsK
LSAgICBhbHRLZXkgPSBtb2RpZmllcnMgJiBLRVlNT0RfQUxUOwotICAgIG1ldGFLZXkgPSBmYWxz
ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9QbGF0Zm9ybU1vdXNlRXZlbnRCbGFja0JlcnJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BsYXRmb3JtTW91c2VF
dmVudEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ibGFja2JlcnJ5L1BsYXRmb3JtTW91c2VFdmVudEJsYWNrQmVycnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtTW91c2VFdmVudC5oIgotCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZl
bnQoY29uc3QgSW50UG9pbnQmIGV2ZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQ
b3NpdGlvbiwgY29uc3QgUGxhdGZvcm1FdmVudDo6VHlwZSB0eXBlLCBpbnQgY2xpY2tDb3VudCwg
TW91c2VCdXR0b24gYnV0dG9uLCBib29sIHNoaWZ0S2V5LCBib29sIGN0cmxLZXksIGJvb2wgYWx0
S2V5LCBNb3VzZUlucHV0TWV0aG9kIG1ldGhvZCkKLSAgICA6IFBsYXRmb3JtRXZlbnQodHlwZSwg
c2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwgZmFsc2UsIGN1cnJlbnRUaW1lKCkpCi0gICAgLCBt
X3Bvc2l0aW9uKGV2ZW50UG9zaXRpb24pCi0gICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBv
c2l0aW9uKQotICAgICwgbV9idXR0b24oYnV0dG9uKQotICAgICwgbV9jbGlja0NvdW50KGNsaWNr
Q291bnQpCi0gICAgLCBtX2lucHV0TWV0aG9kKG1ldGhvZCkKLXsKLSAgICBBU1NFUlQodHlwZSAh
PSBNb3VzZVNjcm9sbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGxhdGZvcm1TY3JlZW5CbGFja0JlcnJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BsYXRm
b3JtU2NyZWVuQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGxhdGZvcm1TY3JlZW5CbGFja0JlcnJ5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVNjcmVlbi5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIldpZGdldC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2NyZWVuLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KikK
LXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChX
aWRnZXQqKQotewotICAgIHJldHVybiA4OwotfQotCi1pbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KikK
LXsKLSAgICByZXR1cm4gMjQ7Ci19Ci0KLS8vIFVzZSBsb2dpY2FsIChkZW5zaXR5LWluZGVwZW5k
ZW50KSBwaXhlbHMgaW5zdGVhZCBvZiBwaHlzaWNhbCBzY3JlZW4gcGl4ZWxzLgotc3RhdGljIEZs
b2F0UmVjdCB0b1VzZXJTcGFjZShGbG9hdFJlY3QgcmVjdCwgV2lkZ2V0KiB3aWRnZXQpCi17Ci0g
ICAgaWYgKHdpZGdldC0+aXNGcmFtZVZpZXcoKSkgewotICAgICAgICBQYWdlKiBwYWdlID0gdG9G
cmFtZVZpZXcod2lkZ2V0KS0+ZnJhbWUoKS5wYWdlKCk7Ci0gICAgICAgIGlmIChwYWdlICYmICFw
YWdlLT5zZXR0aW5ncygpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IoKSkgewot
ICAgICAgICAgICAgcmVjdC5zY2FsZSgxIC8gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0g
ICAgICAgICAgICByZWN0LnNldFNpemUoZXhwYW5kZWRJbnRTaXplKHJlY3Quc2l6ZSgpKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUZsb2F0UmVjdCBzY3JlZW5B
dmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQotewotICAgIGlmICghd2lkZ2V0KQotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0gICAgcmV0dXJuIHRvVXNlclNwYWNlKEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlNj
cmVlbjo6cHJpbWFyeVNjcmVlbigpLT5zaXplKCkpKSwgd2lkZ2V0KTsKLX0KLQotRmxvYXRSZWN0
IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKLSAgICByZXR1cm4gdG9Vc2VyU3BhY2UoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBJbnRTaXplKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U2Ny
ZWVuOjpwcmltYXJ5U2NyZWVuKCktPnNpemUoKSkpLCB3aWRnZXQpOwotfQotCi12b2lkIHNjcmVl
bkNvbG9yUHJvZmlsZShDb2xvclByb2ZpbGUmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2JsYWNrYmVycnkvUGxhdGZvcm1Ub3VjaEV2ZW50QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QbGF0Zm9ybVRvdWNoRXZlbnRC
bGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYmxhY2tiZXJyeS9QbGF0Zm9ybVRvdWNoRXZlbnRCbGFja0JlcnJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtVG91Y2hFdmVudC5o
IgotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0
Zm9ybVRvdWNoRXZlbnQuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBQbGF0
Zm9ybUV2ZW50OjpUeXBlIHRvdWNoRXZlbnRUeXBlKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3Vj
aEV2ZW50KiBldmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LT5tX3R5cGUpIHsKLSAgICBjYXNl
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaEV2ZW50OjpUb3VjaFN0YXJ0OgotICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1FdmVudDo6VG91Y2hTdGFydDsKLSAgICBjYXNlIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpUb3VjaEV2ZW50OjpUb3VjaE1vdmU6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybUV2
ZW50OjpUb3VjaE1vdmU7Ci0gICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hFdmVu
dDo6VG91Y2hFbmQ6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpUb3VjaEVuZDsKLSAg
ICBjYXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaEV2ZW50OjpUb3VjaENhbmNlbDoKLSAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6OlRvdWNoQ2FuY2VsOwotICAgIGNhc2UgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlRvdWNoRXZlbnQ6OlRvdWNoSW5qZWN0ZWQ6Ci0gICAgICAgIHJldHVy
biBQbGF0Zm9ybUV2ZW50OjpUb3VjaE1vdmU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgLy8gUmV0dXJuaW5nIFRvdWNoQ2FuY2VsIGp1c3QgdG8gc2F0aXNmeSB0aGUg
Y29tcGlsZXIncyB3aXNoIHRvIHJldHVybiBhIHZhbGlkIHR5cGUgaW4gYSBub24tdm9pZCBmdW5j
dGlvbi4KLSAgICAvLyBUaGlzIGNvZGUgc2hvdWxkIG5vdCBiZSByZWFjaGVkLgotICAgIHJldHVy
biBQbGF0Zm9ybUV2ZW50OjpUb3VjaENhbmNlbDsKLX0KLQotUGxhdGZvcm1Ub3VjaEV2ZW50OjpQ
bGF0Zm9ybVRvdWNoRXZlbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoRXZlbnQqIGV2ZW50
KQotICAgIDogUGxhdGZvcm1FdmVudCh0b3VjaEV2ZW50VHlwZShldmVudCksIGV2ZW50LT5zaGlm
dEFjdGl2ZSgpLCBldmVudC0+Y3RybEFjdGl2ZSgpLCBldmVudC0+YWx0QWN0aXZlKCksIGZhbHNl
LCBjdXJyZW50VGltZSgpKQotICAgICwgbV9yb3RhdGlvbigwKQotICAgICwgbV9zY2FsZSgxKQot
ICAgICwgbV9kb3VibGVUYXAoZmFsc2UpCi0gICAgLCBtX3RvdWNoSG9sZChmYWxzZSkKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXZlbnQtPm1fcG9pbnRzLnNpemUoKTsgKytpKQot
ICAgICAgICBtX3RvdWNoUG9pbnRzLmFwcGVuZChQbGF0Zm9ybVRvdWNoUG9pbnQoZXZlbnQtPm1f
cG9pbnRzW2ldKSk7Ci0KLSAgICBpZiAoZXZlbnQtPmlzUGluY2goKSkgewotICAgICAgICBtX3Jv
dGF0aW9uID0gZXZlbnQtPnBpbmNoRGF0YSgpLm1fYW5nbGUgKiAxODAgLyBNX1BJOwotICAgICAg
ICBtX3NjYWxlID0gZXZlbnQtPnBpbmNoRGF0YSgpLm1fc2NhbGU7Ci0gICAgfQotCi0gICAgbV9k
b3VibGVUYXAgPSBldmVudC0+aXNEb3VibGVUYXAoKTsKLSAgICBtX3RvdWNoSG9sZCA9IGV2ZW50
LT5pc1RvdWNoSG9sZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxh
Y2tiZXJyeS9QbGF0Zm9ybVRvdWNoUG9pbnRCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BsYXRmb3JtVG91Y2hQb2ludEJsYWNr
QmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L1BsYXRmb3JtVG91Y2hQb2ludEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoUG9pbnQuaCIKLQotI2lu
Y2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUFzc2VydC5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybVRvdWNoRXZlbnQuaD4KLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUGxhdGZvcm1Ub3VjaFBvaW50OjpQbGF0Zm9ybVRvdWNoUG9pbnQo
Y29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQmIHBvaW50KQotICAgIDogbV9p
ZChwb2ludC5pZCgpKQotICAgICwgbV9zY3JlZW5Qb3MocG9pbnQuc2NyZWVuUG9zaXRpb24oKSkK
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGNhbGN1bGF0aW5nIGEgbmV3IHZpZXdwb3J0IHBv
c2l0aW9uIGZyb20gdGhlIGN1cnJlbnQgc2Nyb2xsCi0gICAgLy8gcG9zaXRpb24gYW5kIHRoZSBk
b2N1bWVudENvbnRlbnRQb3NpdGlvbiwgaW4gY2FzZSB3ZSBzY3JvbGxlZCBzaW5jZSB0aGUgcGxh
dGZvcm0KLSAgICAvLyBldmVudCB3YXMgY3JlYXRlZC4KLSAgICAsIG1fcG9zKHBvaW50LmRvY3Vt
ZW50Vmlld3BvcnRQb3NpdGlvbigpKQotewotICAgIHN3aXRjaCAocG9pbnQuc3RhdGUoKSkgewot
ICAgIGNhc2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQ6
Ci0gICAgICAgIG1fc3RhdGUgPSBUb3VjaFJlbGVhc2VkOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaFBvaW50OjpUb3VjaE1vdmVkOgotICAgICAg
ICBtX3N0YXRlID0gVG91Y2hNb3ZlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkOgotICAgICAgICBtX3N0YXRl
ID0gVG91Y2hQcmVzc2VkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpUb3VjaFBvaW50OjpUb3VjaFN0YXRpb25hcnk6Ci0gICAgICAgIG1fc3RhdGUgPSBU
b3VjaFN0YXRpb25hcnk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1f
c3RhdGUgPSBUb3VjaFN0YXRpb25hcnk7IC8vIG1ha2Ugc3VyZSBtX3N0YXRlIGlzIGluaXRpYWxp
emVkCi0gICAgICAgIEJMQUNLQkVSUllfQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Qb3B1
cE1lbnVCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ibGFja2JlcnJ5L1BvcHVwTWVudUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BvcHVwTWVudUJsYWNrQmVycnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBvcHVw
TWVudUJsYWNrQmVycnkuaCIKLQotI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVBvcHVwTWVudUJsYWNrQmVycnk6OlBvcHVwTWVudUJsYWNrQmVy
cnkoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCi0gICAgOiBtX3BvcHVwQ2xpZW50KGNsaWVudCkK
LXsKLX0KLQotUG9wdXBNZW51QmxhY2tCZXJyeTo6flBvcHVwTWVudUJsYWNrQmVycnkoKQotewot
fQotCi12b2lkIFBvcHVwTWVudUJsYWNrQmVycnk6OnNob3coY29uc3QgSW50UmVjdCYsIEZyYW1l
VmlldyosIGludCkKLXsKLX0KLQotdm9pZCBQb3B1cE1lbnVCbGFja0JlcnJ5OjpoaWRlKCkKLXsK
LSAgICBtX3BvcHVwQ2xpZW50LT5wb3B1cERpZEhpZGUoKTsKLX0KLQotdm9pZCBQb3B1cE1lbnVC
bGFja0JlcnJ5Ojp1cGRhdGVGcm9tRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgUG9wdXBNZW51Qmxh
Y2tCZXJyeTo6ZGlzY29ubmVjdENsaWVudCgpCi17Ci0gICAgbV9wb3B1cENsaWVudCA9IDA7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2JsYWNrYmVycnkvUG9wdXBNZW51QmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUG9wdXBNZW51QmxhY2tCZXJyeS5oCShyZXZpc2lv
biAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BvcHVwTWVu
dUJsYWNrQmVycnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgUG9wdXBNZW51QmxhY2tCZXJy
eV9oCi0jZGVmaW5lIFBvcHVwTWVudUJsYWNrQmVycnlfaAotCi0jaW5jbHVkZSAiUG9wdXBNZW51
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUG9wdXBNZW51Q2xpZW50OwotCi1j
bGFzcyBQb3B1cE1lbnVCbGFja0JlcnJ5IDogcHVibGljIFBvcHVwTWVudSB7Ci1wdWJsaWM6Ci0g
ICAgUG9wdXBNZW51QmxhY2tCZXJyeShQb3B1cE1lbnVDbGllbnQqKTsKLSAgICB+UG9wdXBNZW51
QmxhY2tCZXJyeSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3coY29uc3QgSW50UmVjdCYsIEZy
YW1lVmlldyosIGludCBpbmRleCk7Ci0gICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVj
dENsaWVudCgpOwotCi1wcml2YXRlOgotICAgIFBvcHVwTWVudUNsaWVudCogY2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9wb3B1cENsaWVudDsgfQotCi0gICAgUG9wdXBNZW51Q2xpZW50KiBtX3Bv
cHVwQ2xpZW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUmVuZGVyVGhlbWVCbGFja0JlcnJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1Jl
bmRlclRoZW1lQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUmVuZGVyVGhlbWVCbGFja0JlcnJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMTc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lQmxhY2tCZXJyeS5oIgotCi0j
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVk
ZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRl
ICJJbnB1dFR5cGUuaCIKLSNpbmNsdWRlICJJbnB1dFR5cGVOYW1lcy5oIgotI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tC
ZXJyeS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNs
dWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCi0jaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNp
bmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVk
ZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9y
bUxvZy5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVNjcmVlbi5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLS8vIFNpemVzICh1bml0IHB4KQotY29uc3QgZmxvYXQgcHJvZ3Jlc3NN
aW5XaWR0aCA9IDE2OwotY29uc3QgZmxvYXQgcHJvZ3Jlc3NUZXh0dXJlVW5pdFdpZHRoID0gOS4w
OwotY29uc3QgZmxvYXQgbWVkaWFDb250cm9sc0hlaWdodCA9IDQ0OwotY29uc3QgZmxvYXQgbWVk
aWFCYWNrQnV0dG9uSGVpZ2h0ID0gMzM7Ci0vLyBTY2FsZSBleGl0LWZ1bGxzY3JlZW4gYnV0dG9u
IHNpemUuCi1jb25zdCBmbG9hdCBtZWRpYUZ1bGxzY3JlZW5CdXR0b25IZWlnaHRSYXRpbyA9IDUg
LyAxMS4wOwotY29uc3QgZmxvYXQgbWVkaWFGdWxsc2NyZWVuQnV0dG9uV2lkdGhSYXRpbyA9IDMg
LyAxMS4wOwotY29uc3QgZmxvYXQgbWVkaWFTbGlkZXJFbmRBZGp1c3QgPSAyOwotY29uc3QgZmxv
YXQgbWVkaWFTbGlkZXJUcmFja1JhZGl1cyA9IDM7Ci1jb25zdCBmbG9hdCBtZWRpYVNsaWRlclRo
dW1iV2lkdGggPSAyNTsKLWNvbnN0IGZsb2F0IG1lZGlhU2xpZGVyVGh1bWJIZWlnaHQgPSAyNTsK
LWNvbnN0IGZsb2F0IG1lZGlhU2xpZGVyVGh1bWJSYWRpdXMgPSAzOwotY29uc3QgZmxvYXQgc2xp
ZGVyVGh1bWJXaWR0aCA9IDE1OwotY29uc3QgZmxvYXQgc2xpZGVyVGh1bWJIZWlnaHQgPSAyNTsK
LQotLy8gTXVsdGlwbGllcnMKLWNvbnN0IHVuc2lnbmVkIHBhZGRpbmdEaXZpc29yID0gMTA7Ci1j
b25zdCB1bnNpZ25lZCBmdWxsU2NyZWVuRW5sYXJnZW1lbnRGYWN0b3IgPSAyOwotY29uc3QgZmxv
YXQgc2NhbGVGYWN0b3JUaHJlc2hvbGQgPSAyLjA7Ci0KLS8vIFNsaWNlIGxlbmd0aAotY29uc3Qg
aW50IHNtYWxsU2xpY2UgPSA4OwotY29uc3QgaW50IG1lZGl1bVNsaWNlID0gMTA7Ci1jb25zdCBp
bnQgbGFyZ2VTbGljZSA9IDEzOwotCi0vLyBTbGlkZXIgQXVyYSwgY2FsY3VsYXRlZCBmcm9tIFVY
IHNwZWMKLWNvbnN0IGZsb2F0IGF1cmFSYXRpbyA9IDEuNjI7Ci0KLS8vIERyb3Bkb3duIGFycm93
IHBvc2l0aW9uLCBjYWxjdWxhdGVkIGZyb20gVVggc3BlYwotY29uc3QgZmxvYXQgeFBvc2l0aW9u
UmF0aW8gPSAzOwotY29uc3QgZmxvYXQgeVBvc2l0aW9uUmF0aW8gPSAwLjM4OwotY29uc3QgZmxv
YXQgd2lkdGhSYXRpbyA9IDM7Ci1jb25zdCBmbG9hdCBoZWlnaHRSYXRpbyA9IDAuMjM7Ci0KLS8v
IENvbG9ycwotY29uc3QgUkdCQTMyIGZvY3VzUmluZ1BlbiA9IDB4ZmZhM2M4ZmU7Ci0KLWZsb2F0
IFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6ZGVmYXVsdEZvbnRTaXplID0gMTY7Ci0KLWNvbnN0IFN0
cmluZyYgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpkZWZhdWx0R1VJRm9udCgpCi17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGZvbnRGYWNlLCAoQVNDSUlMaXRlcmFsKCJTbGF0ZSBQ
cm8iKSkpOwotICAgIHJldHVybiBmb250RmFjZTsKLX0KLQotc3RhdGljIFJlbmRlclNsaWRlciog
ZGV0ZXJtaW5lUmVuZGVyU2xpZGVyKFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIEFTU0VS
VChvYmplY3QtPmlzU2xpZGVyVGh1bWIoKSk7Ci0gICAgLy8gVGhlIFJlbmRlclNsaWRlciBpcyBh
biBhbmNlc3RvciBvZiB0aGUgc2xpZGVyIHRodW1iLgotICAgIHdoaWxlIChvYmplY3QgJiYgIW9i
amVjdC0+aXNTbGlkZXIoKSkKLSAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5wYXJlbnQoKTsKLSAg
ICByZXR1cm4gdG9SZW5kZXJTbGlkZXIob2JqZWN0KTsKLX0KLQotc3RhdGljIGZsb2F0IGRldGVy
bWluZUZ1bGxTY3JlZW5NdWx0aXBsaWVyKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgZmxvYXQg
ZnVsbFNjcmVlbk11bHRpcGxpZXIgPSAxLjA7Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAm
JiBFTkFCTEUoVklERU8pCi0gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+
d2Via2l0SXNGdWxsU2NyZWVuKCkgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVu
dEZ1bGxTY3JlZW5FbGVtZW50KCkgPT0gcGFyZW50TWVkaWFFbGVtZW50KGVsZW1lbnQpKSB7Ci0g
ICAgICAgIGlmIChQYWdlKiBwYWdlID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAocGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSA8IHNjYWxlRmFjdG9yVGhy
ZXNob2xkKQotICAgICAgICAgICAgICAgIGZ1bGxTY3JlZW5NdWx0aXBsaWVyID0gZnVsbFNjcmVl
bkVubGFyZ2VtZW50RmFjdG9yOwotCi0gICAgICAgICAgICAvLyBUaGUgd2F5IHRoZSBCbGFja0Jl
cnJ5IHBvcnQgaW1wbGVtZW50cyB0aGUgRlVMTFNDUkVFTl9BUEkgZm9yIG1lZGlhIGVsZW1lbnRz
Ci0gICAgICAgICAgICAvLyBtaWdodCByZXN1bHQgaW4gdGhlIGNvbnRyb2xzIGJlaW5nIG92ZXJz
aXplZCwgcHJvcG9ydGlvbmFsbHkgdG8gdGhlIGN1cnJlbnQgcGFnZQotICAgICAgICAgICAgLy8g
c2NhbGUuIFRoYXQgaGFwcGVucyBiZWNhdXNlIHRoZSBmdWxsc2NyZWVuIGVsZW1lbnQgZ2V0cyBz
aXplZCB0byBiZSBhcyBiaWcgYXMgdGhlCi0gICAgICAgICAgICAvLyB2aWV3cG9ydCBzaXplLCBh
bmQgdGhlIHZpZXdwb3J0IHNpemUgbWlnaHQgZ2V0IG91dHN0cmV0Y2hlZCB0byBmaXQgdG8gdGhl
IHNjcmVlbiBkaW1lbnNpb25zLgotICAgICAgICAgICAgLy8gVG8gZml4IHRoYXQsIGxldHMgc3Ry
aXBzIG91dCB0aGUgUGFnZSBzY2FsZSBmYWN0b3IgZnJvbSB0aGUgbWVkaWEgY29udHJvbHMgbXVs
dGlwbGllci4KLSAgICAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZWxlbWVudC0+ZG9jdW1l
bnQoKS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5jdXJyZW50
Wm9vbUZhY3RvcigpOwotICAgICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3JGdWRnZSA9IDEgLyBw
YWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgICAgICAgICAgZnVsbFNjcmVlbk11bHRpcGxp
ZXIgLz0gc2NhbGVGYWN0b3IgKiBzY2FsZUZhY3RvckZ1ZGdlOwotICAgICAgICB9Ci0gICAgfQot
I2VuZGlmCi0gICAgcmV0dXJuIGZ1bGxTY3JlZW5NdWx0aXBsaWVyOwotfQotCi1zdGF0aWMgdm9p
ZCBkcmF3Q29udHJvbChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEltYWdlKiBpbWcpCi17Ci0gICAgaWYgKCFpbWcpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9h
dFJlY3Qgc3JjUmVjdCgwLCAwLCBpbWctPndpZHRoKCksIGltZy0+aGVpZ2h0KCkpOwotICAgIGdj
LT5kcmF3SW1hZ2UoaW1nLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZWN0LCBzcmNSZWN0KTsKLX0K
LQotc3RhdGljIHZvaWQgZHJhd1RocmVlU2xpY2VIb3Jpem9udGFsKEdyYXBoaWNzQ29udGV4dCog
Z2MsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWcsIGludCBzbGljZSkKLXsKLSAgICBp
ZiAoIWltZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRTaXplIGRzdFNsaWNlKHJlY3Qu
aGVpZ2h0KCkgLyAyLCByZWN0LmhlaWdodCgpKTsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLCAw
LCBzbGljZSwgaW1nLT5oZWlnaHQoKSk7Ci0gICAgRmxvYXRSZWN0IGRzdFJlY3QocmVjdC5sb2Nh
dGlvbigpLCBkc3RTbGljZSk7Ci0KLSAgICBnYy0+ZHJhd0ltYWdlKGltZywgQ29sb3JTcGFjZURl
dmljZVJHQiwgZHN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgc3JjUmVjdC5tb3ZlKGltZy0+d2lkdGgo
KSAtIHNyY1JlY3Qud2lkdGgoKSwgMCk7Ci0gICAgZHN0UmVjdC5tb3ZlKHJlY3Qud2lkdGgoKSAt
IGRzdFJlY3Qud2lkdGgoKSwgMCk7Ci0gICAgZ2MtPmRyYXdJbWFnZShpbWcsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIGRzdFJlY3QsIHNyY1JlY3QpOwotCi0gICAgc3JjUmVjdCA9IEZsb2F0UmVjdChz
bGljZSwgMCwgaW1nLT53aWR0aCgpIC0gMiAqIHNsaWNlLCBpbWctPmhlaWdodCgpKTsKLSAgICBk
c3RSZWN0ID0gRmxvYXRSZWN0KHJlY3QueCgpICsgZHN0U2xpY2Uud2lkdGgoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSAtIDIgKiBkc3RTbGljZS53aWR0aCgpLCBkc3RTbGljZS5oZWlnaHQoKSk7
Ci0gICAgZ2MtPmRyYXdJbWFnZShpbWcsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdFJlY3QsIHNy
Y1JlY3QpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3VGhyZWVTbGljZVZlcnRpY2FsKEdyYXBoaWNz
Q29udGV4dCogZ2MsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWcsIGludCBzbGljZSkK
LXsKLSAgICBpZiAoIWltZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRTaXplIGRzdFNs
aWNlKHJlY3Qud2lkdGgoKSwgcmVjdC53aWR0aCgpIC8gMik7Ci0gICAgRmxvYXRSZWN0IHNyY1Jl
Y3QoMCwgMCwgaW1nLT53aWR0aCgpLCBzbGljZSk7Ci0gICAgRmxvYXRSZWN0IGRzdFJlY3QocmVj
dC5sb2NhdGlvbigpLCBkc3RTbGljZSk7Ci0KLSAgICBnYy0+ZHJhd0ltYWdlKGltZywgQ29sb3JT
cGFjZURldmljZVJHQiwgZHN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgc3JjUmVjdC5tb3ZlKDAsIGlt
Zy0+aGVpZ2h0KCkgLSBzcmNSZWN0LmhlaWdodCgpKTsKLSAgICBkc3RSZWN0Lm1vdmUoMCwgcmVj
dC5oZWlnaHQoKSAtIGRzdFJlY3QuaGVpZ2h0KCkpOwotICAgIGdjLT5kcmF3SW1hZ2UoaW1nLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBkc3RSZWN0LCBzcmNSZWN0KTsKLQotICAgIHNyY1JlY3QgPSBG
bG9hdFJlY3QoMCwgc2xpY2UsIGltZy0+d2lkdGgoKSwgaW1nLT5oZWlnaHQoKSAtIDIgKiBzbGlj
ZSk7Ci0gICAgZHN0UmVjdCA9IEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyBkc3RTbGlj
ZS5oZWlnaHQoKSwgZHN0U2xpY2Uud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSAtIDIgKiBkc3RTbGlj
ZS5oZWlnaHQoKSk7Ci0gICAgZ2MtPmRyYXdJbWFnZShpbWcsIENvbG9yU3BhY2VEZXZpY2VSR0Is
IGRzdFJlY3QsIHNyY1JlY3QpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3TmluZVNsaWNlKEdyYXBo
aWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFJlY3QmIHJlY3QsIGRvdWJsZSBzY2FsZSwgSW1hZ2Uq
IGltZywgaW50IHNsaWNlKQotewotICAgIGlmICghaW1nKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKHJlY3QuaGVpZ2h0KCkgKiBzY2FsZSA8IDEwMS4wKQotICAgICAgICBzY2FsZSA9IDEwMS4w
IC8gcmVjdC5oZWlnaHQoKTsKLSAgICBGbG9hdFNpemUgZHN0U2xpY2Uoc2xpY2UgLyBzY2FsZSwg
c2xpY2UgLyBzY2FsZSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgc2xpY2UsIHNsaWNl
KTsKLSAgICBGbG9hdFJlY3QgZHN0UmVjdChyZWN0LmxvY2F0aW9uKCksIGRzdFNsaWNlKTsKLSAg
ICBnYy0+ZHJhd0ltYWdlKGltZywgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0UmVjdCwgc3JjUmVj
dCk7Ci0gICAgc3JjUmVjdC5tb3ZlKGltZy0+d2lkdGgoKSAtIHNyY1JlY3Qud2lkdGgoKSwgMCk7
Ci0gICAgZHN0UmVjdC5tb3ZlKHJlY3Qud2lkdGgoKSAtIGRzdFJlY3Qud2lkdGgoKSwgMCk7Ci0g
ICAgZ2MtPmRyYXdJbWFnZShpbWcsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdFJlY3QsIHNyY1Jl
Y3QpOwotICAgIHNyY1JlY3QubW92ZSgwLCBpbWctPmhlaWdodCgpIC0gc3JjUmVjdC5oZWlnaHQo
KSk7Ci0gICAgZHN0UmVjdC5tb3ZlKDAsIHJlY3QuaGVpZ2h0KCkgLSBkc3RSZWN0LmhlaWdodCgp
KTsKLSAgICBnYy0+ZHJhd0ltYWdlKGltZywgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0UmVjdCwg
c3JjUmVjdCk7Ci0gICAgc3JjUmVjdC5tb3ZlKC0oaW1nLT53aWR0aCgpIC0gc3JjUmVjdC53aWR0
aCgpKSwgMCk7Ci0gICAgZHN0UmVjdC5tb3ZlKC0ocmVjdC53aWR0aCgpIC0gZHN0UmVjdC53aWR0
aCgpKSwgMCk7Ci0gICAgZ2MtPmRyYXdJbWFnZShpbWcsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRz
dFJlY3QsIHNyY1JlY3QpOwotCi0gICAgc3JjUmVjdCA9IEZsb2F0UmVjdChzbGljZSwgMCwgaW1n
LT53aWR0aCgpIC0gMiAqIHNsaWNlLCBzbGljZSk7Ci0gICAgZHN0UmVjdCA9IEZsb2F0UmVjdChy
ZWN0LngoKSArIGRzdFNsaWNlLndpZHRoKCksIHJlY3QueSgpLCByZWN0LndpZHRoKCkgLSAyICog
ZHN0U2xpY2Uud2lkdGgoKSwgZHN0U2xpY2UuaGVpZ2h0KCkpOwotICAgIGdjLT5kcmF3SW1hZ2Uo
aW1nLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkc3RSZWN0LCBzcmNSZWN0KTsKLSAgICBzcmNSZWN0
Lm1vdmUoMCwgaW1nLT5oZWlnaHQoKSAtIHNyY1JlY3QuaGVpZ2h0KCkpOwotICAgIGRzdFJlY3Qu
bW92ZSgwLCByZWN0LmhlaWdodCgpIC0gZHN0UmVjdC5oZWlnaHQoKSk7Ci0gICAgZ2MtPmRyYXdJ
bWFnZShpbWcsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdFJlY3QsIHNyY1JlY3QpOwotCi0gICAg
c3JjUmVjdCA9IEZsb2F0UmVjdCgwLCBzbGljZSwgc2xpY2UsIGltZy0+aGVpZ2h0KCkgLSAyICog
c2xpY2UpOwotICAgIGRzdFJlY3QgPSBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsgZHN0
U2xpY2UuaGVpZ2h0KCksIGRzdFNsaWNlLndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgLSAyICogZHN0
U2xpY2UuaGVpZ2h0KCkpOwotICAgIGdjLT5kcmF3SW1hZ2UoaW1nLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkc3RSZWN0LCBzcmNSZWN0KTsKLSAgICBzcmNSZWN0Lm1vdmUoaW1nLT53aWR0aCgpIC0g
c3JjUmVjdC53aWR0aCgpLCAwKTsKLSAgICBkc3RSZWN0Lm1vdmUocmVjdC53aWR0aCgpIC0gZHN0
UmVjdC53aWR0aCgpLCAwKTsKLSAgICBnYy0+ZHJhd0ltYWdlKGltZywgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZHN0UmVjdCwgc3JjUmVjdCk7Ci0KLSAgICBzcmNSZWN0ID0gRmxvYXRSZWN0KHNsaWNl
LCBzbGljZSwgaW1nLT53aWR0aCgpIC0gMiAqIHNsaWNlLCBpbWctPmhlaWdodCgpIC0gMiAqIHNs
aWNlKTsKLSAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KHJlY3QueCgpICsgZHN0U2xpY2Uud2lkdGgo
KSwgcmVjdC55KCkgKyBkc3RTbGljZS5oZWlnaHQoKSwgcmVjdC53aWR0aCgpIC0gMiAqIGRzdFNs
aWNlLndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgLSAyICogZHN0U2xpY2UuaGVpZ2h0KCkpOwotICAg
IGdjLT5kcmF3SW1hZ2UoaW1nLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkc3RSZWN0LCBzcmNSZWN0
KTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gbG9hZEltYWdlKGNvbnN0IGNoYXIqIGZpbGVu
YW1lKQotewotICAgIFJlZlB0cjxJbWFnZT4gcmVzb3VyY2U7Ci0gICAgcmVzb3VyY2UgPSBJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoZmlsZW5hbWUpLmxlYWtSZWYoKTsKLSAgICBpZiAoIXJl
c291cmNlKSB7Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsV2FybiwgIlJlbmRlclRoZW1lQmxhY2tCZXJyeSBmYWls
ZWQgdG8gbG9hZCAlcy5wbmciLCBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICByZXR1cm4gcmVzb3VyY2U7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSopCi17Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lKiB0
aGVtZSA9IFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgIHJl
dHVybiB0aGVtZTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVCbGFj
a0JlcnJ5OjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVC
bGFja0JlcnJ5KCkpOwotfQotCi1SZW5kZXJUaGVtZUJsYWNrQmVycnk6OlJlbmRlclRoZW1lQmxh
Y2tCZXJyeSgpCi17Ci19Ci0KLVJlbmRlclRoZW1lQmxhY2tCZXJyeTo6flJlbmRlclRoZW1lQmxh
Y2tCZXJyeSgpCi17Ci19Ci0KLVN0cmluZyBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OmV4dHJhRGVm
YXVsdFN0eWxlU2hlZXQoKQotewotICAgIHJldHVybiBTdHJpbmcodGhlbWVCbGFja0JlcnJ5VXNl
ckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lQmxhY2tCZXJyeVVzZXJBZ2VudFN0eWxlU2hl
ZXQpKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLVN0cmluZyBSZW5kZXJUaGVtZUJsYWNrQmVy
cnk6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQotewotICAgIHJldHVybiBTdHJpbmco
bWVkaWFDb250cm9sc0JsYWNrQmVycnlVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFD
b250cm9sc0JsYWNrQmVycnlVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci19Ci0jZW5kaWYKLQotI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLVN0cmluZyBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OmV4
dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKQotewotICAgIHJldHVybiBTdHJpbmcobWVkaWFDb250
cm9sc0JsYWNrQmVycnlGdWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlh
Q29udHJvbHNCbGFja0JlcnJ5RnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLX0KLSNl
bmRpZgotCi1kb3VibGUgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpjYXJldEJsaW5rSW50ZXJ2YWwo
KSBjb25zdAotewotICAgIHJldHVybiAwOyAvLyBUdXJuIG9mZiBjYXJldCBibGlua2luZy4KLX0K
LQotdm9pZCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnN5c3RlbUZvbnQoQ1NTVmFsdWVJRCB2YWx1
ZUlELCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBmbG9h
dCBmb250U2l6ZSA9IGRlZmF1bHRGb250U2l6ZTsKLQotICAgIC8vIEJvdGggQ1NTVmFsdWVXZWJr
aXRDb250cm9sIGFuZCBDU1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbCBzaG91bGQgdXNlIGRlZmF1
bHQgZm9udCBzaXplIHdoaWNoIGxvb2tzIGJldHRlciBvbiB0aGUgY29udHJvbHMuCi0gICAgaWYg
KHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbCkgewotICAgICAgICAvLyBXaHkg
MiBwb2ludHMgc21hbGxlcj8gQmVjYXVzZSB0aGF0J3Mgd2hhdCBHZWNrbyBkb2VzLiBOb3RlIHRo
YXQgd2UKLSAgICAgICAgLy8gYXJlIGFzc3VtaW5nIGEgOTZkcGkgc2NyZWVuLCB3aGljaCBpcyB0
aGUgZGVmYXVsdCB2YWx1ZSB3ZSB1c2Ugb24gV2luZG93cy4KLSAgICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0IHBvaW50c1BlckluY2ggPSA3Mi4wZjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
IHBpeGVsc1BlckluY2ggPSA5Ni4wZjsKLSAgICAgICAgZm9udFNpemUgLT0gKDIuMGYgLyBwb2lu
dHNQZXJJbmNoKSAqIHBpeGVsc1BlckluY2g7Ci0gICAgfQotCi0gICAgZm9udERlc2NyaXB0aW9u
LmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGRlZmF1bHRHVUlGb250KCkpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNG
YW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNl
dFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGlj
KGZhbHNlKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnNldEJ1dHRvblN0eWxl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBMZW5ndGggdmVydFBhZGRpbmcoaW50
KHN0eWxlLT5mb250U2l6ZSgpIC8gcGFkZGluZ0Rpdmlzb3IpLCBGaXhlZCk7Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdUb3AodmVydFBhZGRpbmcpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9t
KHZlcnRQYWRkaW5nKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OmFkanVzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAotewotICAgIHNldEJ1dHRvblN0eWxlKHN0eWxlKTsKLSAgICBzdHlsZS0+c2V0Q3Vyc29y
KENVUlNPUl9XRUJLSVRfR1JBQik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5Ojph
ZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAotewotICAgIHNldEJ1dHRvblN0eWxlKHN0eWxlKTsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZUJsYWNrQmVycnk6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1
cm4gcGFpbnRUZXh0RmllbGRPclRleHRBcmVhT3JTZWFyY2hGaWVsZChvYmplY3QsIGluZm8sIHJl
Y3QpOwotfQotCi12b2lkIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6YWRqdXN0VGV4dEZpZWxkU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17
Ci0gICAgc2V0QnV0dG9uU3R5bGUoc3R5bGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQmxhY2tC
ZXJyeTo6cGFpbnRUZXh0RmllbGRPclRleHRBcmVhT3JTZWFyY2hGaWVsZChSZW5kZXJPYmplY3Qq
IG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIEFTU0VSVChpbmZvLmNvbnRleHQpOwotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9
IGluZm8uY29udGV4dDsKLQotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IGJnLCBiZ0Rpc2FibGVk
LCBiZ0hpZ2hsaWdodDsKLSAgICBpZiAoIWJnKSB7Ci0gICAgICAgIGlmIChCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OlNjcmVlbjo6cHJpbWFyeVNjcmVlbigpLT5kaXNwbGF5VGVjaG5v
bG9neSgpID09IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6T2xlZERpc3BsYXlUZWNo
bm9sb2d5KQotICAgICAgICAgICAgYmcgPSBsb2FkSW1hZ2UoImNvcmVfdGV4dGlucHV0X2JnX29s
ZWQiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmcgPSBsb2FkSW1hZ2UoImNvcmVfdGV4
dGlucHV0X2JnIik7Ci0gICAgICAgIGJnRGlzYWJsZWQgPSBsb2FkSW1hZ2UoImNvcmVfdGV4dGlu
cHV0X2JnX2Rpc2FibGVkIik7Ci0gICAgICAgIGJnSGlnaGxpZ2h0ID0gbG9hZEltYWdlKCJjb3Jl
X3RleHRpbnB1dF9iZ19oaWdobGlnaHQiKTsKLSAgICB9Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0g
Y3RtID0gY29udGV4dC0+Z2V0Q1RNKCk7Ci0gICAgaWYgKGlzRW5hYmxlZChvYmplY3QpICYmIGJn
KQotICAgICAgICBkcmF3TmluZVNsaWNlKGNvbnRleHQsIHJlY3QsIGN0bS54U2NhbGUoKSwgYmcu
Z2V0KCksIHNtYWxsU2xpY2UpOwotICAgIGlmICghaXNFbmFibGVkKG9iamVjdCkgJiYgYmdEaXNh
YmxlZCkKLSAgICAgICAgZHJhd05pbmVTbGljZShjb250ZXh0LCByZWN0LCBjdG0ueFNjYWxlKCks
IGJnRGlzYWJsZWQuZ2V0KCksIHNtYWxsU2xpY2UpOwotCi0gICAgaWYgKChpc0hvdmVyZWQob2Jq
ZWN0KSB8fCBpc0ZvY3VzZWQob2JqZWN0KSB8fCBpc1ByZXNzZWQob2JqZWN0KSkgJiYgYmdIaWdo
bGlnaHQpCi0gICAgICAgIGRyYXdOaW5lU2xpY2UoY29udGV4dCwgcmVjdCwgY3RtLnhTY2FsZSgp
LCBiZ0hpZ2hsaWdodC5nZXQoKSwgc21hbGxTbGljZSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIHJldHVybiBwYWludFRleHRGaWVsZE9yVGV4dEFyZWFPclNlYXJjaEZpZWxkKG9iamVj
dCwgaW5mbywgcmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjphZGp1c3RT
ZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAotewotICAgIHNldEJ1dHRvblN0eWxlKHN0eWxlKTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZUJsYWNrQmVycnk6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAg
c3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZSA9IDEwOwotICAg
IHN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSA9IDEzOwotICAgIHN0
YXRpYyBjb25zdCBmbG9hdCBtaW5DYW5jZWxCdXR0b25TaXplID0gNTsKLQotICAgIC8vIFNjYWxl
IHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQgZm9udFNj
YWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7Ci0g
ICAgaW50IGNhbmNlbEJ1dHRvblNpemUgPSBscm91bmRmKHN0ZDo6bWF4KG1pbkNhbmNlbEJ1dHRv
blNpemUsIGRlZmF1bHRDYW5jZWxCdXR0b25TaXplICogZm9udFNjYWxlKSk7Ci0gICAgTGVuZ3Ro
IGxlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKGxl
bmd0aCk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChsZW5ndGgpOwotfQotCi1ib29sIFJlbmRlclRo
ZW1lQmxhY2tCZXJyeTo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBw
YWludFRleHRGaWVsZE9yVGV4dEFyZWFPclNlYXJjaEZpZWxkKG9iamVjdCwgaW5mbywgcmVjdCk7
Ci19Ci0KLUludFJlY3QgUmVuZGVyVGhlbWVCbGFja0JlcnJ5Ojpjb252ZXJ0VG9QYWludGluZ1Jl
Y3QoUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRS
ZW5kZXJlciwgTGF5b3V0UmVjdCBwYXJ0UmVjdCwgY29uc3QgSW50UmVjdCYgbG9jYWxPZmZzZXQp
IGNvbnN0Ci17Ci0gICAgLy8gQ29tcHV0ZSBhbiBvZmZzZXQgYmV0d2VlbiB0aGUgcGFydCByZW5k
ZXJlciBhbmQgdGhlIGlucHV0IHJlbmRlcmVyLgotICAgIExheW91dFNpemUgb2Zmc2V0RnJvbUlu
cHV0UmVuZGVyZXIgPSAtcGFydFJlbmRlcmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIo
aW5wdXRSZW5kZXJlcik7Ci0gICAgLy8gTW92ZSB0aGUgcmVjdCBpbnRvIHBhcnRSZW5kZXJlcidz
IGNvb3Jkcy4KLSAgICBwYXJ0UmVjdC5tb3ZlKG9mZnNldEZyb21JbnB1dFJlbmRlcmVyKTsKLSAg
ICAvLyBBY2NvdW50IGZvciB0aGUgbG9jYWwgZHJhd2luZyBvZmZzZXQuCi0gICAgcGFydFJlY3Qu
bW92ZShsb2NhbE9mZnNldC54KCksIGxvY2FsT2Zmc2V0LnkoKSk7Ci0KLSAgICByZXR1cm4gcGl4
ZWxTbmFwcGVkSW50UmVjdChwYXJ0UmVjdCk7Ci19Ci0KLQotYm9vbCBSZW5kZXJUaGVtZUJsYWNr
QmVycnk6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBjYW5jZWxC
dXR0b25PYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQotewotICAgIE5vZGUqIGlucHV0ID0gY2FuY2VsQnV0dG9uT2JqZWN0LT5ub2RlKCktPmRlcHJl
Y2F0ZWRTaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5p
c0JveCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZW5kZXJCb3gqIGlucHV0UmVu
ZGVyQm94ID0gdG9SZW5kZXJCb3goaW5wdXQtPnJlbmRlcmVyKCkpOwotICAgIExheW91dFJlY3Qg
aW5wdXRDb250ZW50Qm94ID0gaW5wdXRSZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7Ci0KLSAg
ICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZp
dCBpbiBpdHMgcGFyZW50J3MgYm94LgotICAgIExheW91dFVuaXQgY2FuY2VsQnV0dG9uU2l6ZSA9
IHN0ZDo6bWluKGlucHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbjxMYXlvdXRVbml0Pihp
bnB1dENvbnRlbnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKLSAgICAvLyBDYWxjdWxhdGUg
Y2FuY2VsIGJ1dHRvbidzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCBlbGVtZW50
LgotICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuIFJvdW5kIHVwIHRob3VnaCwg
c28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCi0gICAgLy8g
YmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gVGhpcyB0ZW5k
cyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgotICAgIExheW91dFJlY3QgY2FuY2VsQnV0
dG9uUmVjdChjYW5jZWxCdXR0b25PYmplY3QtPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihp
bnB1dFJlbmRlckJveCkud2lkdGgoKSwKLSAgICAgICAgaW5wdXRDb250ZW50Qm94LnkoKSArIChp
bnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBjYW5jZWxCdXR0b25TaXplICsgMSkgLyAyLCBjYW5j
ZWxCdXR0b25TaXplLCBjYW5jZWxCdXR0b25TaXplKTsKLSAgICBJbnRSZWN0IHBhaW50aW5nUmVj
dCA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dFJlbmRlckJveCwgY2FuY2VsQnV0dG9uT2Jq
ZWN0LCBjYW5jZWxCdXR0b25SZWN0LCByKTsKLQotICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsSW1h
Z2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbCIpLmxlYWtSZWYo
KTsKLSAgICBzdGF0aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsUHJlc3NlZCIpLmxlYWtSZWYoKTsKLSAgICBwYWlu
dEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3NlZChjYW5jZWxCdXR0b25PYmplY3QpID8g
Y2FuY2VsUHJlc3NlZEltYWdlIDogY2FuY2VsSW1hZ2UsCi0gICAgICAgIGNhbmNlbEJ1dHRvbk9i
amVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBwYWludGluZ1JlY3QpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OmFkanVzdE1lbnVMaXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Ci17Ci0gICAgLy8gVGhlc2Ugc2VlbSB0byBiZSByZWFzb25hYmxlIHBhZGRpbmcgdmFsdWVz
IGZyb20gb2JzZXJ2YXRpb24uCi0gICAgY29uc3QgaW50IHBhZGRpbmdMZWZ0ID0gODsKLSAgICBj
b25zdCBpbnQgcGFkZGluZ1JpZ2h0ID0gNDsKLQotICAgIGNvbnN0IGludCBtaW5IZWlnaHQgPSBz
dHlsZS0+Zm9udFNpemUoKSAqIDI7Ci0KLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7Ci0gICAg
c3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgobWluSGVpZ2h0LCBGaXhlZCkpOwotICAgIHN0eWxl
LT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLQotICAg
IHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKG1pbkhlaWdodCArIHBhZGRpbmdSaWdodCwg
Rml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRDdXJzb3IoQ1VSU09SX1dFQktJVF9HUkFCKTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OmNhbGN1bGF0ZUJ1dHRvblNpemUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAotewotICAgIGludCBzaXplID0gc3R5bGUtPmZvbnRTaXplKCk7Ci0g
ICAgTGVuZ3RoIGxlbmd0aChzaXplLCBGaXhlZCk7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gQ2hlY2tib3hQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KSB7
Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChsZW5ndGgpOwotICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KGxlbmd0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgd2lk
dGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRv
IGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5
bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc3R5bGUt
PndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKGxl
bmd0aCk7Ci0KLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHls
ZS0+c2V0SGVpZ2h0KGxlbmd0aCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5Ojpw
YWludENoZWNrYm94KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKGluZm8uY29udGV4dCk7Ci0gICAg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gaW5mby5jb250ZXh0OwotCi0gICAgc3RhdGljIFJl
ZlB0cjxJbWFnZT4gZGlzYWJsZWQsIGluYWN0aXZlLCBwcmVzc2VkLCBhY3RpdmUsIGFjdGl2ZU1h
cmssIGRpc2FibGVNYXJrLCBwcmVzc2VkTWFyazsKLSAgICBpZiAoIWRpc2FibGVkKSB7Ci0gICAg
ICAgIGRpc2FibGVkID0gbG9hZEltYWdlKCJjb3JlX2NoZWNrYm94X2Rpc2FibGVkIik7Ci0gICAg
ICAgIGluYWN0aXZlID0gbG9hZEltYWdlKCJjb3JlX2NoZWNrYm94X2luYWN0aXZlIik7Ci0gICAg
ICAgIHByZXNzZWQgPSBsb2FkSW1hZ2UoImNvcmVfY2hlY2tib3hfcHJlc3NlZCIpOwotICAgICAg
ICBhY3RpdmUgPSBsb2FkSW1hZ2UoImNvcmVfY2hlY2tib3hfYWN0aXZlIik7Ci0gICAgICAgIGFj
dGl2ZU1hcmsgPSBsb2FkSW1hZ2UoImNvcmVfY2hlY2tib3hfYWN0aXZlX21hcmsiKTsKLSAgICAg
ICAgZGlzYWJsZU1hcmsgPSBsb2FkSW1hZ2UoImNvcmVfY2hlY2tib3hfZGlzYWJsZWRfbWFyayIp
OwotICAgICAgICBwcmVzc2VkTWFyayA9IGxvYWRJbWFnZSgiY29yZV9jaGVja2JveF9wcmVzc2Vk
X21hcmsiKTsKLSAgICB9Ci0KLSAgICAvLyBDYWN1bGF0ZSB3aGVyZSB0byBwdXQgY2VudGVyIGNo
ZWNrbWFyay4KLSAgICBGbG9hdFJlY3QgdG1wUmVjdChyZWN0KTsKLQotICAgIGZsb2F0IGNlbnRl
clggPSAoKGZsb2F0KGluYWN0aXZlLT53aWR0aCgpKSAtIGZsb2F0KGFjdGl2ZU1hcmstPndpZHRo
KCkpKSAvIGZsb2F0KGluYWN0aXZlLT53aWR0aCgpKSAqIHRtcFJlY3Qud2lkdGgoKSAvIDIpICsg
dG1wUmVjdC54KCk7Ci0gICAgZmxvYXQgY2VudGVyWSA9ICgoZmxvYXQoaW5hY3RpdmUtPmhlaWdo
dCgpKSAtIGZsb2F0KGFjdGl2ZU1hcmstPmhlaWdodCgpKSkgLyBmbG9hdChpbmFjdGl2ZS0+aGVp
Z2h0KCkpICogdG1wUmVjdC5oZWlnaHQoKSAvIDIpICsgdG1wUmVjdC55KCk7Ci0gICAgZmxvYXQg
d2lkdGggPSBmbG9hdChhY3RpdmVNYXJrLT53aWR0aCgpKSAvIGZsb2F0KGluYWN0aXZlLT53aWR0
aCgpKSAqIHRtcFJlY3Qud2lkdGgoKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBmbG9hdChhY3RpdmVN
YXJrLT5oZWlnaHQoKSkgLyBmbG9hdChpbmFjdGl2ZS0+aGVpZ2h0KCkpICogdG1wUmVjdC5oZWln
aHQoKTsKLSAgICBGbG9hdFJlY3QgY2VudGVyUmVjdChjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwg
aGVpZ2h0KTsKLQotICAgIGlmIChpc0VuYWJsZWQob2JqZWN0KSkgewotICAgICAgICBpZiAoaXNQ
cmVzc2VkKG9iamVjdCkpIHsKLSAgICAgICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHJlY3Qs
IHByZXNzZWQuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZChvYmplY3QpKSB7Ci0g
ICAgICAgICAgICAgICAgZHJhd0NvbnRyb2woY29udGV4dCwgY2VudGVyUmVjdCwgcHJlc3NlZE1h
cmsuZ2V0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ZHJhd0NvbnRyb2woY29udGV4dCwgcmVjdCwgaW5hY3RpdmUuZ2V0KCkpOwotICAgICAgICAgICAg
aWYgKGlzQ2hlY2tlZChvYmplY3QpKSB7Ci0gICAgICAgICAgICAgICAgZHJhd0NvbnRyb2woY29u
dGV4dCwgcmVjdCwgYWN0aXZlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBkcmF3Q29udHJvbChj
b250ZXh0LCBjZW50ZXJSZWN0LCBhY3RpdmVNYXJrLmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHJlY3Qs
IGRpc2FibGVkLmdldCgpKTsKLSAgICAgICAgaWYgKGlzQ2hlY2tlZChvYmplY3QpKQotICAgICAg
ICAgICAgZHJhd0NvbnRyb2woY29udGV4dCwgcmVjdCwgZGlzYWJsZU1hcmsuZ2V0KCkpOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5Ojpz
ZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGNhbGN1bGF0
ZUJ1dHRvblNpemUoc3R5bGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6cGFp
bnRSYWRpbyhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVChpbmZvLmNvbnRleHQpOwotICAgIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCA9IGluZm8uY29udGV4dDsKLQotICAgIHN0YXRpYyBSZWZQdHI8
SW1hZ2U+IGRpc2FibGVkLCBkaXNhYmxlZERvdCwgaW5hY3RpdmUsIHByZXNzZWQsIGFjdGl2ZSwg
YWN0aXZlRG90LCBwcmVzc2VkRG90OwotICAgIGlmICghZGlzYWJsZWQpIHsKLSAgICAgICAgZGlz
YWJsZWQgPSBsb2FkSW1hZ2UoImNvcmVfcmFkaW9idXR0b25fZGlzYWJsZWQiKTsKLSAgICAgICAg
ZGlzYWJsZWREb3QgPSBsb2FkSW1hZ2UoImNvcmVfcmFkaW9idXR0b25fZG90X2Rpc2FibGVkIik7
Ci0gICAgICAgIGluYWN0aXZlID0gbG9hZEltYWdlKCJjb3JlX3JhZGlvYnV0dG9uX2luYWN0aXZl
Iik7Ci0gICAgICAgIHByZXNzZWQgPSBsb2FkSW1hZ2UoImNvcmVfcmFkaW9idXR0b25fcHJlc3Nl
ZCIpOwotICAgICAgICBhY3RpdmUgPSBsb2FkSW1hZ2UoImNvcmVfcmFkaW9idXR0b25fYWN0aXZl
Iik7Ci0gICAgICAgIGFjdGl2ZURvdCA9IGxvYWRJbWFnZSgiY29yZV9yYWRpb2J1dHRvbl9kb3Rf
c2VsZWN0ZWQiKTsKLSAgICAgICAgcHJlc3NlZERvdCA9IGxvYWRJbWFnZSgiY29yZV9yYWRpb2J1
dHRvbl9kb3RfcHJlc3NlZCIpOwotICAgIH0KLQotICAgIC8vIENhY3VsYXRlIHdoZXJlIHRvIHB1
dCBjZW50ZXIgY2lyY2xlLgotICAgIEZsb2F0UmVjdCB0bXBSZWN0KHJlY3QpOwotCi0gICAgZmxv
YXQgY2VudGVyWCA9ICgoZmxvYXQoaW5hY3RpdmUtPndpZHRoKCkpIC0gZmxvYXQoYWN0aXZlRG90
LT53aWR0aCgpKSkgLyBmbG9hdChpbmFjdGl2ZS0+d2lkdGgoKSkgKiB0bXBSZWN0LndpZHRoKCkg
LyAyKSsgdG1wUmVjdC54KCk7Ci0gICAgZmxvYXQgY2VudGVyWSA9ICgoZmxvYXQoaW5hY3RpdmUt
PmhlaWdodCgpKSAtIGZsb2F0KGFjdGl2ZURvdC0+aGVpZ2h0KCkpKSAvIGZsb2F0KGluYWN0aXZl
LT5oZWlnaHQoKSkgKiB0bXBSZWN0LmhlaWdodCgpIC8gMikgKyB0bXBSZWN0LnkoKTsKLSAgICBm
bG9hdCB3aWR0aCA9IGZsb2F0KGFjdGl2ZURvdC0+d2lkdGgoKSkgLyBmbG9hdChpbmFjdGl2ZS0+
d2lkdGgoKSkgKiB0bXBSZWN0LndpZHRoKCk7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gZmxvYXQoYWN0
aXZlRG90LT5oZWlnaHQoKSkgLyBmbG9hdChpbmFjdGl2ZS0+aGVpZ2h0KCkpICogdG1wUmVjdC5o
ZWlnaHQoKTsKLSAgICBGbG9hdFJlY3QgY2VudGVyUmVjdChjZW50ZXJYLCBjZW50ZXJZLCB3aWR0
aCwgaGVpZ2h0KTsKLQotICAgIGlmIChpc0VuYWJsZWQob2JqZWN0KSkgewotICAgICAgICBpZiAo
aXNQcmVzc2VkKG9iamVjdCkpIHsKLSAgICAgICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHJl
Y3QsIHByZXNzZWQuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZChvYmplY3QpKQot
ICAgICAgICAgICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIGNlbnRlclJlY3QsIHByZXNzZWRE
b3QuZ2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZHJhd0NvbnRyb2woY29u
dGV4dCwgcmVjdCwgaW5hY3RpdmUuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZChv
YmplY3QpKSB7Ci0gICAgICAgICAgICAgICAgZHJhd0NvbnRyb2woY29udGV4dCwgcmVjdCwgYWN0
aXZlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBkcmF3Q29udHJvbChjb250ZXh0LCBjZW50ZXJS
ZWN0LCBhY3RpdmVEb3QuZ2V0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgZHJhd0NvbnRyb2woY29udGV4dCwgcmVjdCwgZGlzYWJsZWQuZ2V0KCkp
OwotICAgICAgICBpZiAoaXNDaGVja2VkKG9iamVjdCkpCi0gICAgICAgICAgICBkcmF3Q29udHJv
bChjb250ZXh0LCByZWN0LCBkaXNhYmxlZERvdC5nZXQoKSk7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnNldFJhZGlvU2l6ZShSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgY2FsY3VsYXRlQnV0dG9uU2l6ZShzdHlsZSk7
Ci19Ci0KLS8vIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgV2ViQ29yZSBhc3N1bWVz
IHRoZSBidXR0b24gaXMgZnVsbHkgZGVjb3JhdGVkCi1ib29sIFJlbmRlclRoZW1lQmxhY2tCZXJy
eTo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQoaW5mby5jb250ZXh0KTsKLSAg
ICBpbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBp
bmZvLmNvbnRleHQ7Ci0KLSAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiBkaXNhYmxlZCwgaW5hY3Rp
dmUsIHByZXNzZWQ7Ci0gICAgaWYgKCFkaXNhYmxlZCkgewotICAgICAgICBkaXNhYmxlZCA9IGxv
YWRJbWFnZSgiY29yZV9idXR0b25fZGlzYWJsZWQiKTsKLSAgICAgICAgaW5hY3RpdmUgPSBsb2Fk
SW1hZ2UoImNvcmVfYnV0dG9uX2luYWN0aXZlIik7Ci0gICAgICAgIHByZXNzZWQgPSBsb2FkSW1h
Z2UoImNvcmVfYnV0dG9uX3ByZXNzZWQiKTsKLSAgICB9Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0g
Y3RtID0gY29udGV4dC0+Z2V0Q1RNKCk7Ci0gICAgaWYgKCFpc0VuYWJsZWQob2JqZWN0KSkgewot
ICAgICAgICBkcmF3TmluZVNsaWNlKGNvbnRleHQsIHJlY3QsIGN0bS54U2NhbGUoKSwgaW5hY3Rp
dmUuZ2V0KCksIGxhcmdlU2xpY2UpOwotICAgICAgICBkcmF3TmluZVNsaWNlKGNvbnRleHQsIHJl
Y3QsIGN0bS54U2NhbGUoKSwgZGlzYWJsZWQuZ2V0KCksIGxhcmdlU2xpY2UpOwotICAgIH0gZWxz
ZSBpZiAoaXNQcmVzc2VkKG9iamVjdCkpCi0gICAgICAgIGRyYXdOaW5lU2xpY2UoY29udGV4dCwg
cmVjdCwgY3RtLnhTY2FsZSgpLCBwcmVzc2VkLmdldCgpLCBsYXJnZVNsaWNlKTsKLSAgICBlbHNl
Ci0gICAgICAgIGRyYXdOaW5lU2xpY2UoY29udGV4dCwgcmVjdCwgY3RtLnhTY2FsZSgpLCBpbmFj
dGl2ZS5nZXQoKSwgbGFyZ2VTbGljZSk7Ci0KLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6YWRqdXN0TWVu
dUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiBjc3MsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKGNzcywg
c3R5bGUsIGVsZW1lbnQpOwotfQotCi1zdGF0aWMgSW50UmVjdCBjb21wdXRlTWVudUxpc3RBcnJv
d0J1dHRvblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBGSVhNRTogVGhlIG1l
bnUgbGlzdCBhcnJvdyBidXR0b24gc2hvdWxkIGhhdmUgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIHdp
ZHRoICh0byBlbnN1cmUgdXNhYmlsaXR5KSBvcgotICAgIC8vIHNjYWxlIHdpdGggcmVzcGVjdCB0
byB0aGUgZm9udCBzaXplIHVzZWQgaW4gdGhlIG1lbnUgbGlzdCBjb250cm9sIG9yIHNvbWUgY29t
YmluYXRpb24gb2YgYm90aC4KLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludChyZWN0Lm1heFgo
KSAtIHJlY3QuaGVpZ2h0KCksIHJlY3QueSgpKSwgSW50U2l6ZShyZWN0LmhlaWdodCgpLCByZWN0
LmhlaWdodCgpKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludE1lbnVM
aXN0KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKGluZm8uY29udGV4dCk7Ci0gICAgaW5mby5jb250
ZXh0LT5zYXZlKCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gaW5mby5jb250ZXh0
OwotCi0gICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gZGlzYWJsZWQsIGluYWN0aXZlLCBwcmVzc2Vk
LCBhcnJvd1VwLCBhcnJvd1VwRGlzYWJsZWQ7Ci0gICAgaWYgKCFkaXNhYmxlZCkgewotICAgICAg
ICBkaXNhYmxlZCA9IGxvYWRJbWFnZSgiY29yZV9idXR0b25fZGlzYWJsZWQiKTsKLSAgICAgICAg
aW5hY3RpdmUgPSBsb2FkSW1hZ2UoImNvcmVfYnV0dG9uX2luYWN0aXZlIik7Ci0gICAgICAgIHBy
ZXNzZWQgPSBsb2FkSW1hZ2UoImNvcmVfYnV0dG9uX3ByZXNzZWQiKTsKLSAgICAgICAgYXJyb3dV
cCA9IGxvYWRJbWFnZSgiY29yZV9kcm9wZG93bl9idXR0b25fYXJyb3d1cCIpOwotICAgICAgICBh
cnJvd1VwRGlzYWJsZWQgPSBsb2FkSW1hZ2UoImNvcmVfZHJvcGRvd25fYnV0dG9uX2Fycm93dXBf
ZGlzYWJsZWQiKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgYXJyb3dCdXR0b25SZWN0YW5nbGUo
Y29tcHV0ZU1lbnVMaXN0QXJyb3dCdXR0b25SZWN0KHJlY3QpKTsKLSAgICBmbG9hdCB4ID0gYXJy
b3dCdXR0b25SZWN0YW5nbGUueCgpICsgYXJyb3dCdXR0b25SZWN0YW5nbGUud2lkdGgoKSAvIHhQ
b3NpdGlvblJhdGlvOwotICAgIGZsb2F0IHkgPSBhcnJvd0J1dHRvblJlY3RhbmdsZS55KCkgKyBh
cnJvd0J1dHRvblJlY3RhbmdsZS5oZWlnaHQoKSAqIHlQb3NpdGlvblJhdGlvOwotICAgIGZsb2F0
IHdpZHRoID0gYXJyb3dCdXR0b25SZWN0YW5nbGUud2lkdGgoKSAvIHdpZHRoUmF0aW87Ci0gICAg
ZmxvYXQgaGVpZ2h0ID0gYXJyb3dCdXR0b25SZWN0YW5nbGUuaGVpZ2h0KCkgKiBoZWlnaHRSYXRp
bzsKLSAgICBGbG9hdFJlY3QgdG1wUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIEFm
ZmluZVRyYW5zZm9ybSBjdG0gPSBjb250ZXh0LT5nZXRDVE0oKTsKLSAgICBpZiAoIWlzRW5hYmxl
ZChvYmplY3QpKSB7Ci0gICAgICAgIGRyYXdOaW5lU2xpY2UoY29udGV4dCwgcmVjdCwgY3RtLnhT
Y2FsZSgpLCBpbmFjdGl2ZS5nZXQoKSwgbGFyZ2VTbGljZSk7Ci0gICAgICAgIGRyYXdOaW5lU2xp
Y2UoY29udGV4dCwgcmVjdCwgY3RtLnhTY2FsZSgpLCBkaXNhYmxlZC5nZXQoKSwgbGFyZ2VTbGlj
ZSk7Ci0gICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHRtcFJlY3QsIGFycm93VXBEaXNhYmxl
ZC5nZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChpc1ByZXNzZWQob2JqZWN0KSkgewotICAgICAgICBk
cmF3TmluZVNsaWNlKGNvbnRleHQsIHJlY3QsIGN0bS54U2NhbGUoKSwgcHJlc3NlZC5nZXQoKSwg
bGFyZ2VTbGljZSk7Ci0gICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHRtcFJlY3QsIGFycm93
VXAuZ2V0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRyYXdOaW5lU2xpY2UoY29udGV4dCwg
cmVjdCwgY3RtLnhTY2FsZSgpLCBpbmFjdGl2ZS5nZXQoKSwgbGFyZ2VTbGljZSk7Ci0gICAgICAg
IGRyYXdDb250cm9sKGNvbnRleHQsIHRtcFJlY3QsIGFycm93VXAuZ2V0KCkpOwotICAgIH0KLSAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRl
clRoZW1lQmxhY2tCZXJyeTo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgcmV0dXJuIHBhaW50TWVudUxpc3Qob2JqZWN0LCBpbmZvLCByZWN0KTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgZmxvYXQgZnVsbFNj
cmVlbk11bHRpcGxpZXIgPSAxOwotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFy
YW5jZSgpOwotCi0gICAgaWYgKHBhcnQgPT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQgfHwgcGFydCA9
PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkgewotICAgICAgICBSZW5kZXJTbGlkZXIqIHNs
aWRlciA9IGRldGVybWluZVJlbmRlclNsaWRlcihlbGVtZW50LT5yZW5kZXJlcigpKTsKLSAgICAg
ICAgaWYgKHNsaWRlcikKLSAgICAgICAgICAgIGZ1bGxTY3JlZW5NdWx0aXBsaWVyID0gZGV0ZXJt
aW5lRnVsbFNjcmVlbk11bHRpcGxpZXIodG9FbGVtZW50KHNsaWRlci0+bm9kZSgpKSk7Ci0gICAg
fQotCi0gICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgoKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgPyBzbGlkZXJUaHVtYkhlaWdodCA6
IHNsaWRlclRodW1iV2lkdGgpICogZnVsbFNjcmVlbk11bHRpcGxpZXIsIEZpeGVkKSk7Ci0gICAg
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0ID8gc2xpZGVyVGh1bWJXaWR0aCA6IHNsaWRlclRodW1iSGVpZ2h0KSAqIGZ1bGxTY3JlZW5N
dWx0aXBsaWVyLCBGaXhlZCkpOwotICAgIH0gZWxzZSBpZiAocGFydCA9PSBNZWRpYVZvbHVtZVNs
aWRlclRodW1iUGFydCB8fCBwYXJ0ID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KSB7Ci0gICAgICAg
IHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWVkaWFTbGlkZXJUaHVtYldpZHRoICogZnVsbFNjcmVl
bk11bHRpcGxpZXIsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1l
ZGlhU2xpZGVyVGh1bWJIZWlnaHQgKiBmdWxsU2NyZWVuTXVsdGlwbGllciwgRml4ZWQpKTsKLSAg
ICB9Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludFNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgY29uc3Qgc3RhdGljIGludCBTbGlkZXJUcmFja0hlaWdodCA9IDU7Ci0g
ICAgSW50UmVjdCByZWN0MjsKLSAgICBpZiAob2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkg
PT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpIHsKLSAgICAgICAgcmVjdDIuc2V0SGVpZ2h0KFNsaWRl
clRyYWNrSGVpZ2h0KTsKLSAgICAgICAgcmVjdDIuc2V0V2lkdGgocmVjdC53aWR0aCgpKTsKLSAg
ICAgICAgcmVjdDIuc2V0WChyZWN0LngoKSk7Ci0gICAgICAgIHJlY3QyLnNldFkocmVjdC55KCkg
KyAocmVjdC5oZWlnaHQoKSAtIFNsaWRlclRyYWNrSGVpZ2h0KSAvIDIpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJlY3QyLnNldEhlaWdodChyZWN0LmhlaWdodCgpKTsKLSAgICAgICAgcmVjdDIu
c2V0V2lkdGgoU2xpZGVyVHJhY2tIZWlnaHQpOwotICAgICAgICByZWN0Mi5zZXRYKHJlY3QueCgp
ICsgKHJlY3Qud2lkdGgoKSAtIFNsaWRlclRyYWNrSGVpZ2h0KSAvIDIpOwotICAgICAgICByZWN0
Mi5zZXRZKHJlY3QueSgpKTsKLSAgICB9Ci0gICAgc3RhdGljIEltYWdlKiBzbGlkZXJUcmFjayA9
IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgiY29yZV9wcm9ncmVzc2luZGljYXRvcl9iZyIp
LmxlYWtSZWYoKTsKLSAgICByZXR1cm4gcGFpbnRTbGlkZXJUcmFja1JlY3Qob2JqZWN0LCBpbmZv
LCByZWN0Miwgc2xpZGVyVHJhY2spOwotfQotCi1ib29sIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6
cGFpbnRTbGlkZXJUcmFja1JlY3QoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgSW1hZ2UqIGluYWN0aXZlKQotewotICAgIEFT
U0VSVChpbmZvLmNvbnRleHQpOwotICAgIGluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCA9IGluZm8uY29udGV4dDsKLQotICAgIHN0YXRpYyBSZWZQdHI8
SW1hZ2U+IGRpc2FibGVkOwotICAgIGlmICghZGlzYWJsZWQpCi0gICAgICAgIGRpc2FibGVkID0g
bG9hZEltYWdlKCJjb3JlX3NsaWRlcl9maWxsX2Rpc2FibGVkIik7Ci0KLSAgICBpZiAocmVjdC53
aWR0aCgpID4gcmVjdC5oZWlnaHQoKSkgewotICAgICAgICBpZiAoaXNFbmFibGVkKG9iamVjdCkp
Ci0gICAgICAgICAgICBkcmF3VGhyZWVTbGljZUhvcml6b250YWwoY29udGV4dCwgcmVjdCwgaW5h
Y3RpdmUsIG1lZGl1bVNsaWNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhd1RocmVl
U2xpY2VIb3Jpem9udGFsKGNvbnRleHQsIHJlY3QsIGRpc2FibGVkLmdldCgpLCAoc21hbGxTbGlj
ZSAtIDEpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoaXNFbmFibGVkKG9iamVjdCkpCi0g
ICAgICAgICAgICBkcmF3VGhyZWVTbGljZVZlcnRpY2FsKGNvbnRleHQsIHJlY3QsIGluYWN0aXZl
LCBtZWRpdW1TbGljZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRyYXdUaHJlZVNsaWNl
VmVydGljYWwoY29udGV4dCwgcmVjdCwgZGlzYWJsZWQuZ2V0KCksIChzbWFsbFNsaWNlIC0gMSkp
OwotICAgIH0KLQotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludFNsaWRlclRodW1iKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgQVNTRVJUKGluZm8uY29udGV4dCk7Ci0gICAgaW5mby5jb250ZXh0LT5zYXZlKCk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gaW5mby5jb250ZXh0OwotCi0gICAgc3Rh
dGljIFJlZlB0cjxJbWFnZT4gZGlzYWJsZWQsIGluYWN0aXZlLCBwcmVzc2VkLCBhdXJhOwotICAg
IGlmICghZGlzYWJsZWQpIHsKLSAgICAgICAgZGlzYWJsZWQgPSBsb2FkSW1hZ2UoImNvcmVfc2xp
ZGVyX2hhbmRsZV9kaXNhYmxlZCIpOwotICAgICAgICBpbmFjdGl2ZSA9IGxvYWRJbWFnZSgiY29y
ZV9zbGlkZXJfaGFuZGxlIik7Ci0gICAgICAgIHByZXNzZWQgPSBsb2FkSW1hZ2UoImNvcmVfc2xp
ZGVyX2hhbmRsZV9wcmVzc2VkIik7Ci0gICAgICAgIGF1cmEgPSBsb2FkSW1hZ2UoImNvcmVfc2xp
ZGVyX2F1cmEiKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgdG1wUmVjdChyZWN0KTsKLSAgICBm
bG9hdCBsZW5ndGggPSBzdGQ6Om1heCh0bXBSZWN0LndpZHRoKCksIHRtcFJlY3QuaGVpZ2h0KCkp
OwotICAgIGlmICh0bXBSZWN0LndpZHRoKCkgPiB0bXBSZWN0LmhlaWdodCgpKSB7Ci0gICAgICAg
IHRtcFJlY3Quc2V0WSh0bXBSZWN0LnkoKSAtIChsZW5ndGggLSB0bXBSZWN0LmhlaWdodCgpKSAv
IDIpOwotICAgICAgICB0bXBSZWN0LnNldEhlaWdodChsZW5ndGgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHRtcFJlY3Quc2V0WCh0bXBSZWN0LngoKSAtIChsZW5ndGggLSB0bXBSZWN0LndpZHRo
KCkpIC8gMik7Ci0gICAgICAgIHRtcFJlY3Quc2V0V2lkdGgobGVuZ3RoKTsKLSAgICB9Ci0KLSAg
ICBmbG9hdCBhdXJhSGVpZ2h0ID0gbGVuZ3RoICogYXVyYVJhdGlvOwotICAgIGZsb2F0IGF1cmFX
aWR0aCA9IGF1cmFIZWlnaHQ7Ci0gICAgZmxvYXQgYXVyYVggPSB0bXBSZWN0LngoKSAtIChhdXJh
V2lkdGggLSB0bXBSZWN0LndpZHRoKCkpIC8gMjsKLSAgICBmbG9hdCBhdXJhWSA9IHRtcFJlY3Qu
eSgpIC0gKGF1cmFIZWlnaHQgLSB0bXBSZWN0LmhlaWdodCgpKSAvIDI7Ci0gICAgRmxvYXRSZWN0
IGF1cmFSZWN0KGF1cmFYLCBhdXJhWSwgYXVyYVdpZHRoLCBhdXJhSGVpZ2h0KTsKLQotICAgIGlm
ICghaXNFbmFibGVkKG9iamVjdCkpIHsKLSAgICAgICAgLy8gRGlzYWJsZWQgaGFuZGxlIHNocmlu
ayAzMCUKLSAgICAgICAgdG1wUmVjdC5tb3ZlKHRtcFJlY3Qud2lkdGgoKSAqIDAuMDc1LCB0bXBS
ZWN0LmhlaWdodCgpICogMC4wNzUpOwotICAgICAgICB0bXBSZWN0LmNvbnRyYWN0KHRtcFJlY3Qu
d2lkdGgoKSAqIDAuMTUsIHRtcFJlY3QuaGVpZ2h0KCkgKiAwLjE1KTsKLSAgICAgICAgZHJhd0Nv
bnRyb2woY29udGV4dCwgdG1wUmVjdCwgZGlzYWJsZWQuZ2V0KCkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChpc1ByZXNzZWQob2JqZWN0KSB8fCBpc0hvdmVyZWQob2JqZWN0KSB8fCBpc0Zv
Y3VzZWQob2JqZWN0KSkgewotICAgICAgICAgICAgZHJhd0NvbnRyb2woY29udGV4dCwgdG1wUmVj
dCwgcHJlc3NlZC5nZXQoKSk7Ci0gICAgICAgICAgICBkcmF3Q29udHJvbChjb250ZXh0LCBhdXJh
UmVjdCwgYXVyYS5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZHJhd0NvbnRy
b2woY29udGV4dCwgdG1wUmVjdCwgaW5hY3RpdmUuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRl
eHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVC
bGFja0JlcnJ5OjphZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIGZsb2F0IGZ1bGxT
Y3JlZW5NdWx0aXBsaWVyID0gZGV0ZXJtaW5lRnVsbFNjcmVlbk11bHRpcGxpZXIoZWxlbWVudCk7
Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50
KGVsZW1lbnQpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBXZSB1c2UgbXVsdGlwbGVzIG9mIG1lZGlhQ29udHJvbHNIZWlnaHQgdG8gbWFrZSBhbGwg
b2JqZWN0cyBzY2FsZSBldmVubHkKLSAgICBMZW5ndGggemVybygwLCBGaXhlZCk7Ci0gICAgTGVu
Z3RoIGNvbnRyb2xzSGVpZ2h0KG1lZGlhQ29udHJvbHNIZWlnaHQgKiBmdWxsU2NyZWVuTXVsdGlw
bGllciwgRml4ZWQpOwotICAgIExlbmd0aCBoYWxmQ29udHJvbHNXaWR0aChtZWRpYUNvbnRyb2xz
SGVpZ2h0IC8gMiAqIGZ1bGxTY3JlZW5NdWx0aXBsaWVyLCBGaXhlZCk7Ci0gICAgTGVuZ3RoIGRp
c3BsYXlIZWlnaHQobWVkaWFDb250cm9sc0hlaWdodCAvIDMgKiBmdWxsU2NyZWVuTXVsdGlwbGll
ciwgRml4ZWQpOwotICAgIExlbmd0aCB2b2xPZmZzZXQobWVkaWFDb250cm9sc0hlaWdodCAqIGZ1
bGxTY3JlZW5NdWx0aXBsaWVyICsgNSwgRml4ZWQpOwotICAgIExlbmd0aCBwYWRkaW5nKG1lZGlh
Q29udHJvbHNIZWlnaHQgLyAxMCAqIGZ1bGxTY3JlZW5NdWx0aXBsaWVyLCBGaXhlZCk7Ci0gICAg
ZmxvYXQgZm9udFNpemUgPSBtZWRpYUNvbnRyb2xzSGVpZ2h0IC8gMyAqIGZ1bGxTY3JlZW5NdWx0
aXBsaWVyOwotCi0gICAgc3dpdGNoIChzdHlsZS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAgY2FzZSBN
ZWRpYUNvbnRyb2xzQmFja2dyb3VuZFBhcnQ6Ci0gICAgICAgIGlmIChlbGVtZW50LT5zaGFkb3dQ
c2V1ZG9JZCgpID09ICItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBsYWNlaG9sZGVyIikKLSAgICAg
ICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoY29udHJvbHNIZWlnaHQpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE1lZGlhUGxheUJ1dHRvblBhcnQ6Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChj
b250cm9sc0hlaWdodCk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoY29udHJvbHNIZWlnaHQp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvblBhcnQ6Ci0gICAgICAg
IHN0eWxlLT5zZXRXaWR0aChjb250cm9sc0hlaWdodCk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWln
aHQoY29udHJvbHNIZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhUmV3aW5k
QnV0dG9uUGFydDoKLSAgICAgICAgLy8gV2UgaGktamFjayB0aGUgUmV3aW5kIEJ1dHRvbiBJRCB0
byB1c2UgaXQgZm9yIHRoZSBkaXZpZGVyIGltYWdlCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0aCho
YWxmQ29udHJvbHNXaWR0aCk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoY29udHJvbHNIZWln
aHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9u
UGFydDoKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKGNvbnRyb2xzSGVpZ2h0KTsKLSAgICAgICAg
c3R5bGUtPnNldEhlaWdodChjb250cm9sc0hlaWdodCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgTWVkaWFFeGl0RnVsbHNjcmVlbkJ1dHRvblBhcnQ6Ci0gICAgICAgIHN0eWxlLT5zZXRMZWZ0
KHplcm8pOwotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoY29udHJvbHNIZWlnaHQpOwotICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KGNvbnRyb2xzSGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBNZWRpYUN1cnJlbnRUaW1lUGFydDoKLSAgICBjYXNlIE1lZGlhVGltZVJlbWFpbmluZ1Bh
cnQ6Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoZGlzcGxheUhlaWdodCk7Ci0gICAgICAgIHN0
eWxlLT5zZXRQYWRkaW5nUmlnaHQocGFkZGluZyk7Ci0gICAgICAgIHN0eWxlLT5zZXRQYWRkaW5n
TGVmdChwYWRkaW5nKTsKLSAgICAgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20ocGFkZGluZyk7
Ci0gICAgICAgIHN0eWxlLT5zZXRGb250U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGZvbnRTaXplKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXJQYXJ0
OgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGNvbnRyb2xzSGVpZ2h0KTsKLSAgICAgICAgc3R5
bGUtPnNldEJvdHRvbSh2b2xPZmZzZXQpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5Ojph
ZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgZmxvYXQgZnVsbFNjcmVlbk11bHRpcGxp
ZXIgPSBkZXRlcm1pbmVGdWxsU2NyZWVuTXVsdGlwbGllcihlbGVtZW50KTsKLQotICAgIC8vIFdl
IHVzZSBtdWx0aXBsZXMgb2YgbWVkaWFDb250cm9sc0hlaWdodCB0byBtYWtlIGFsbCBvYmplY3Rz
IHNjYWxlIGV2ZW5seQotICAgIExlbmd0aCBjb250cm9sc0hlaWdodChtZWRpYUNvbnRyb2xzSGVp
Z2h0IC8gMiAqIGZ1bGxTY3JlZW5NdWx0aXBsaWVyLCBGaXhlZCk7Ci0gICAgc3dpdGNoIChzdHls
ZS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAgY2FzZSBNZWRpYVNsaWRlclBhcnQ6Ci0gICAgY2FzZSBN
ZWRpYVZvbHVtZVNsaWRlclBhcnQ6Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoY29udHJvbHNI
ZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBib29sIHBhaW50TWVkaWFCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZSogaW1hZ2UpCi17Ci0gICAgY29udGV4
dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZWN0KTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludE1lZGlhUGxh
eUJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCgqb2JqZWN0KTsKLQot
ICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSW1hZ2UqIG1lZGlhUGxheSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgicGxheSIp
LmxlYWtSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGF1c2UgPSBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoInBhdXNlIikubGVha1JlZigpOwotICAgIHN0YXRpYyBJbWFnZSogbWVk
aWFTdG9wID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzdG9wIikubGVha1JlZigpOwot
ICAgIEltYWdlKiBub25QbGF5SW1hZ2U7Ci0KLSAgICAvLyBUaGUgQmxhY2tCZXJyeSBwb3J0IHNl
dHMgdGhlIG1vdmllTG9hZFR5cGUgdG8gTGl2ZVN0cmVhbSBpZiBhbmQgb25seSBpZgotICAgIC8v
ICJzdG9wIiBtdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiAicGF1c2UiLgotICAgIGlmIChtZWRpYUVs
ZW1lbnQtPm1vdmllTG9hZFR5cGUoKSA9PSBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbSkKLSAgICAg
ICAgbm9uUGxheUltYWdlID0gbWVkaWFTdG9wOwotICAgIGVsc2UKLSAgICAgICAgbm9uUGxheUlt
YWdlID0gbWVkaWFQYXVzZTsKLQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5m
by5jb250ZXh0LCByZWN0LCBtZWRpYUVsZW1lbnQtPmNhblBsYXkoKSA/IG1lZGlhUGxheSA6IG5v
blBsYXlJbWFnZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwotICAgIFVOVVNF
RF9QQVJBTShwYWludEluZm8pOwotICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKLX0KLQotLy8gV2UgaGktamFjayB0aGUgUmV3aW5kIEJ1dHRvbiBjb2Rl
IHRvIHVzZSBpdCBmb3IgdGhlIGRpdmlkZXIgaW1hZ2UKLWJvb2wgUmVuZGVyVGhlbWVCbGFja0Jl
cnJ5OjpwYWludE1lZGlhUmV3aW5kQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZiBFTkFCTEUo
VklERU8pCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFF
bGVtZW50KCpvYmplY3QpOwotCi0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghbWVkaWFFbGVtZW50LT5pc0Z1bGxzY3JlZW4oKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGljIEltYWdlKiBkaXZpZGVyID0gSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKCJkaXZpZGVyIikubGVha1JlZigpOwotCi0gICAgcmV0dXJuIHBh
aW50TWVkaWFCdXR0b24ocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIGRpdmlkZXIpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLSAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsK
LSAgICBVTlVTRURfUEFSQU0ocmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJP
YmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCgqb2JqZWN0KTsKLQotICAgIGlmICghbWVkaWFF
bGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSW1hZ2UqIHNwZWFr
ZXIgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNwZWFrZXIiKS5sZWFrUmVmKCk7Ci0K
LSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgcmVjdCwgc3Bl
YWtlcik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwotICAgIFVOVVNFRF9QQVJB
TShwYWludEluZm8pOwotICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7
Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnBhaW50TWVkaWFGdWxs
c2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KCpvYmplY3Qp
OwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSW1hZ2UqIG1lZGlhRW50ZXJGdWxsc2NyZWVuID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKCJmdWxsc2NyZWVuIikubGVha1JlZigpOwotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFF
eGl0RnVsbHNjcmVlbiA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgiYmFjayIpLmxlYWtS
ZWYoKTsKLQotICAgIEltYWdlKiBidXR0b25JbWFnZSA9IG1lZGlhRW50ZXJGdWxsc2NyZWVuOwot
ICAgIEludFJlY3QgY3VycmVudFJlY3QocmVjdCk7Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQotICAgIGlmIChtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigp
ICYmIG1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVt
ZW50KCkgPT0gbWVkaWFFbGVtZW50KSB7Ci0gICAgICAgIGJ1dHRvbkltYWdlID0gbWVkaWFFeGl0
RnVsbHNjcmVlbjsKLSAgICAgICAgSW50UmVjdCBmdWxsc2NyZWVuUmVjdChyZWN0LngoKSArICgx
IC0gbWVkaWFGdWxsc2NyZWVuQnV0dG9uV2lkdGhSYXRpbykgKiByZWN0LndpZHRoKCkgLyAyLCBy
ZWN0LnkoKSArICgxIC0gbWVkaWFGdWxsc2NyZWVuQnV0dG9uSGVpZ2h0UmF0aW8pICogcmVjdC5o
ZWlnaHQoKSAvIDIsCi0gICAgICAgICAgICByZWN0LndpZHRoKCkgKiBtZWRpYUZ1bGxzY3JlZW5C
dXR0b25XaWR0aFJhdGlvLCByZWN0LmhlaWdodCgpICogbWVkaWFGdWxsc2NyZWVuQnV0dG9uSGVp
Z2h0UmF0aW8pOwotICAgICAgICBjdXJyZW50UmVjdCA9IGZ1bGxzY3JlZW5SZWN0OwotICAgIH0K
LSNlbmRpZgotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCBj
dXJyZW50UmVjdCwgYnV0dG9uSW1hZ2UpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob2JqZWN0
KTsKLSAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKLSAgICBVTlVTRURfUEFSQU0ocmVjdCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0Jl
cnJ5OjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmIEVOQUJMRShW
SURFTykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVs
ZW1lbnQoKm9iamVjdCk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGZsb2F0IGZ1bGxTY3JlZW5NdWx0aXBsaWVyID0gZGV0ZXJtaW5lRnVsbFNj
cmVlbk11bHRpcGxpZXIobWVkaWFFbGVtZW50KTsKLSAgICBmbG9hdCBsb2FkZWQgPSBtZWRpYUVs
ZW1lbnQtPnBlcmNlbnRMb2FkZWQoKTsKLSAgICBmbG9hdCBwb3NpdGlvbiA9IG1lZGlhRWxlbWVu
dC0+ZHVyYXRpb24oKSA+IDAgPyAobWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpIC8gbWVkaWFF
bGVtZW50LT5kdXJhdGlvbigpKSA6IDA7Ci0KLSAgICBpbnQgaW50cmluc2ljSGVpZ2h0ID0gY2Vp
bChtZWRpYVNsaWRlclRodW1iSGVpZ2h0IC8gNCk7Ci0gICAgaW50IHggPSBjZWlsKHJlY3QueCgp
ICsgbWVkaWFTbGlkZXJFbmRBZGp1c3QgKiBmdWxsU2NyZWVuTXVsdGlwbGllcik7Ci0gICAgaW50
IHkgPSBjZWlsKHJlY3QueSgpICsgKG1lZGlhQ29udHJvbHNIZWlnaHQgLyAyIC0gaW50cmluc2lj
SGVpZ2h0KSAvIDIgKiBmdWxsU2NyZWVuTXVsdGlwbGllciArIGZ1bGxTY3JlZW5NdWx0aXBsaWVy
IC8gMik7Ci0gICAgaW50IHcgPSBjZWlsKHJlY3Qud2lkdGgoKSAtIG1lZGlhU2xpZGVyRW5kQWRq
dXN0ICogMiAqIGZ1bGxTY3JlZW5NdWx0aXBsaWVyKTsKLSAgICBpbnQgaCA9IGNlaWwoaW50cmlu
c2ljSGVpZ2h0ICogZnVsbFNjcmVlbk11bHRpcGxpZXIpOwotICAgIEludFJlY3QgcmVjdDIoeCwg
eSwgdywgaCk7Ci0KLSAgICAvLyBXZSBzdWJ0cmFjdCBhIHNtYWxsIGFtb3VudCBmcm9tIHRoZSB3
aWR0aCBpbiB0aGUgY2FsY3VsYXRpb24gYmVsb3cgdG8KLSAgICAvLyBwcmV2ZW50IHRoZSBwbGF5
ZWQgYmFyIGZyb20gcG9raW5nIG91dCBwYXN0IHRoZSB0aHVtYiBhY2NpZGVudGFsbHkuCi0gICAg
aW50IHdQbGF5ZWQgPSBjZWlsKCh3IC0gbWVkaWFTbGlkZXJFbmRBZGp1c3QpICogcG9zaXRpb24p
OwotICAgIC8vIFdlIGFkanVzdCB0aGUgYnVmZmVyZWQgYmFyIHRvIG1ha2UgaXQgdmlzaWJsZSB0
byB0aGUgcmlnaHQgb2YgdGhlIHRodW1iLgotICAgIC8vIEEgc21hbGwgYW1vdW50IGlzIHN1YnRy
YWN0ZWQgZnJvbSB0aGUgbWVkaWFTbGlkZXJUaHVtYldpZHRoIGluIHRoZSBmaXJzdAotICAgIC8v
IHBhcnQgb2YgdGhlIGV4cHJlc3Npb24gdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCB0aGUg
c2xpZGVyIHRyYWNrJ3MKLSAgICAvLyB3aWR0aCB3YXMgc2hvcnRlbmVkIGFuZCB4IHBvc2l0aW9u
IHdhcyBpbmNyZW1lbnRlZCBhYm92ZSAodG8gbWFrZSBzdXJlCi0gICAgLy8gaXRzIHJvdW5kZWQg
ZW5kcyBnZXQgY292ZXJlZCBieSB0aGUgdGh1bWIpLgotICAgIGludCB3TG9hZGVkID0gY2VpbCgo
dyAtIChtZWRpYVNsaWRlclRodW1iV2lkdGggLSBtZWRpYVNsaWRlckVuZEFkanVzdCkgKiBmdWxs
U2NyZWVuTXVsdGlwbGllcikgKiBsb2FkZWQgKyBtZWRpYVNsaWRlclRodW1iV2lkdGggKiBmdWxs
U2NyZWVuTXVsdGlwbGllcik7Ci0KLSAgICBJbnRSZWN0IHBsYXllZCh4LCB5LCB3UGxheWVkLCBo
KTsKLSAgICBJbnRSZWN0IGJ1ZmZlcmVkKHgsIHksIHdMb2FkZWQgPiB3ID8gdyA6IHdMb2FkZWQs
IGgpOwotCi0gICAgc3RhdGljIEltYWdlKiBtZWRpYUJhY2tncm91bmQgPSBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoImNvcmVfc2xpZGVyX3ZpZGVvX2JnIikubGVha1JlZigpOwotICAgIHN0
YXRpYyBJbWFnZSogbWVkaWFQbGF5ZXIgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImNv
cmVfc2xpZGVyX3BsYXllZF9iZyIpLmxlYWtSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlh
Q2FjaGUgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImNvcmVfc2xpZGVyX2NhY2hlIiku
bGVha1JlZigpOwotCi0gICAgYm9vbCByZXN1bHQgPSBwYWludFNsaWRlclRyYWNrUmVjdChvYmpl
Y3QsIHBhaW50SW5mbywgcmVjdDIsIG1lZGlhQmFja2dyb3VuZCk7Ci0KLSAgICBpZiAobG9hZGVk
ID4gMCB8fCBwb3NpdGlvbiA+IDApIHsKLSAgICAgICAgLy8gVGhpcyBpcyB0byBwYWludCBidWZm
ZXJlZCBiYXIuCi0gICAgICAgIHBhaW50U2xpZGVyVHJhY2tSZWN0KG9iamVjdCwgcGFpbnRJbmZv
LCBidWZmZXJlZCwgbWVkaWFDYWNoZSk7Ci0KLSAgICAgICAgLy8gVGhpcyBpcyB0byBwYWludCBw
bGF5ZWQgcGFydCBvZiBiYXIgKGxlZnQgb2Ygc2xpZGVyIHRodW1iKSB1c2luZyBzZWxlY3Rpb24g
Y29sb3IuCi0gICAgICAgIHBhaW50U2xpZGVyVHJhY2tSZWN0KG9iamVjdCwgcGFpbnRJbmZvLCBw
bGF5ZWQsIG1lZGlhUGxheWVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLSAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsK
LSAgICBVTlVTRURfUEFSQU0ocmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQotewotI2lmIEVOQUJMRShWSURFTykKLSAgICBzdGF0aWMgSW1hZ2UqIGRpc2FibGVk
TWVkaWFTbGlkZXJUaHVtYiA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgiY29yZV9zbGlk
ZXJfaGFuZGxlX2Rpc2FibGVkIikubGVha1JlZigpOwotICAgIHN0YXRpYyBJbWFnZSogcHJlc3Nl
ZE1lZGlhU2xpZGVyVGh1bWIgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImNvcmVfc2xp
ZGVyX2hhbmRsZV9wcmVzc2VkIikubGVha1JlZigpOwotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFT
bGlkZXJUaHVtYiA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgiY29yZV9tZWRpYV9oYW5k
bGUiKS5sZWFrUmVmKCk7Ci0KLSAgICBpZiAoIWlzRW5hYmxlZChvYmplY3QpKQotICAgICAgICBy
ZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgcmVjdCwgZGlzYWJsZWRN
ZWRpYVNsaWRlclRodW1iKTsKLSAgICBpZiAoaXNQcmVzc2VkKG9iamVjdCkgfHwgaXNIb3ZlcmVk
KG9iamVjdCkgfHwgaXNGb2N1c2VkKG9iamVjdCkpCi0gICAgICAgIHJldHVybiBwYWludE1lZGlh
QnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBwcmVzc2VkTWVkaWFTbGlkZXJUaHVtYik7
Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1l
ZGlhU2xpZGVyVGh1bWIpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLSAgICBV
TlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKLSAgICBVTlVTRURfUEFSQU0ocmVjdCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmIEVOQUJMRShWSURF
TykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1l
bnQoKm9iamVjdCk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGZsb2F0IGZ1bGxTY3JlZW5NdWx0aXBsaWVyID0gZGV0ZXJtaW5lRnVsbFNjcmVl
bk11bHRpcGxpZXIobWVkaWFFbGVtZW50KTsKLSAgICBmbG9hdCB2b2x1bWUgPSBtZWRpYUVsZW1l
bnQtPnZvbHVtZSgpID4gMCA/IG1lZGlhRWxlbWVudC0+dm9sdW1lKCkgOiAwOwotCi0gICAgaW50
IGludHJpbnNpY0hlaWdodCA9IGNlaWwobWVkaWFTbGlkZXJUaHVtYkhlaWdodCAvIDQpOwotICAg
IGludCB4ID0gY2VpbChyZWN0LngoKSArIChtZWRpYUNvbnRyb2xzSGVpZ2h0IC0gaW50cmluc2lj
SGVpZ2h0KSAvIDIgKiBmdWxsU2NyZWVuTXVsdGlwbGllciAtIGZ1bGxTY3JlZW5NdWx0aXBsaWVy
IC8gMik7Ci0gICAgaW50IHkgPSBjZWlsKHJlY3QueSgpICsgKG1lZGlhQ29udHJvbHNIZWlnaHQg
LSBpbnRyaW5zaWNIZWlnaHQpIC8gMiAqIGZ1bGxTY3JlZW5NdWx0aXBsaWVyICsgZnVsbFNjcmVl
bk11bHRpcGxpZXIgLyAyKTsKLSAgICBpbnQgdyA9IGNlaWwocmVjdC53aWR0aCgpIC0gKG1lZGlh
Q29udHJvbHNIZWlnaHQgLSBpbnRyaW5zaWNIZWlnaHQpICogZnVsbFNjcmVlbk11bHRpcGxpZXIg
KyBmdWxsU2NyZWVuTXVsdGlwbGllciAvIDIpOwotICAgIGludCBoID0gY2VpbChpbnRyaW5zaWNI
ZWlnaHQgKiBmdWxsU2NyZWVuTXVsdGlwbGllcik7Ci0gICAgSW50UmVjdCByZWN0Mih4LCB5LCB3
LCBoKTsKLSAgICBJbnRSZWN0IHZvbHVtZVJlY3QoeCwgeSwgY2VpbCh3ICogdm9sdW1lKSwgaCk7
Ci0KLSAgICBzdGF0aWMgSW1hZ2UqIHZvbHVtZUJhY2tncm91bmQgPSBJbWFnZTo6bG9hZFBsYXRm
b3JtUmVzb3VyY2UoImNvcmVfc2xpZGVyX3ZpZGVvX2JnIikubGVha1JlZigpOwotICAgIHN0YXRp
YyBJbWFnZSogdm9sdW1lQmFyID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJjb3JlX3Ns
aWRlcl9wbGF5ZWRfYmciKS5sZWFrUmVmKCk7Ci0KLSAgICAvLyBUaGlzIGlzIHRvIHBhaW50IG1h
aW4gdm9sdW1lIHNsaWRlciBiYXIuCi0gICAgYm9vbCByZXN1bHQgPSBwYWludFNsaWRlclRyYWNr
UmVjdChvYmplY3QsIHBhaW50SW5mbywgcmVjdDIsIHZvbHVtZUJhY2tncm91bmQpOwotCi0gICAg
aWYgKHZvbHVtZSA+IDApIHsKLSAgICAgICAgLy8gVGhpcyBpcyB0byBwYWludCB2b2x1bWUgYmFy
IChsZWZ0IG9mIHZvbHVtZSBzbGlkZXIgdGh1bWIpIHVzaW5nIHNlbGVjdGlvbiBjb2xvci4KLSAg
ICAgICAgcmVzdWx0IHw9IHBhaW50U2xpZGVyVHJhY2tSZWN0KG9iamVjdCwgcGFpbnRJbmZvLCB2
b2x1bWVSZWN0LCB2b2x1bWVCYXIpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwotICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8p
OwotICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVt
YihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIFJlbmRlclNsaWRlciog
c2xpZGVyID0gZGV0ZXJtaW5lUmVuZGVyU2xpZGVyKG9iamVjdCk7Ci0gICAgZmxvYXQgZnVsbFNj
cmVlbk11bHRpcGxpZXIgPSBzbGlkZXIgPyBkZXRlcm1pbmVGdWxsU2NyZWVuTXVsdGlwbGllcih0
b0VsZW1lbnQoc2xpZGVyLT5ub2RlKCkpKSA6IDE7Ci0KLSAgICBpbnQgaW50cmluc2ljSGVpZ2h0
ID0gY2VpbChtZWRpYVNsaWRlclRodW1iSGVpZ2h0IC8gNCk7Ci0gICAgaW50IHkgPSBjZWlsKHJl
Y3QueSgpICsgKG1lZGlhQ29udHJvbHNIZWlnaHQgLyAyIC0gaW50cmluc2ljSGVpZ2h0IC8gMikg
LyAyICogZnVsbFNjcmVlbk11bHRpcGxpZXIpOwotICAgIEludFJlY3QgYWRqdXN0ZWRSZWN0KHJl
Y3QueCgpLCB5LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgcmV0dXJuIHBh
aW50TWVkaWFTbGlkZXJUaHVtYihvYmplY3QsIHBhaW50SW5mbywgYWRqdXN0ZWRSZWN0KTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhaW50SW5m
byk7Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
fQotCi1Db2xvciBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3Io
KSBjb25zdAotewotICAgIHJldHVybiBmb2N1c1JpbmdQZW47Ci19Ci0KLSNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQotQ29sb3IgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwbGF0Zm9ybVRhcEhpZ2hs
aWdodENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMCwgMTY4LCAyMjMsIDUwKTsK
LX0KLSNlbmRpZgotCi1Db2xvciBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnBsYXRmb3JtQWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMCwg
MTY4LCAyMjMsIDUwKTsKLX0KLQotZG91YmxlIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6YW5pbWF0
aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJv
Z3Jlc3MpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRl
KCkgPyAwLjAgOiAwLjE7Ci19Ci0KLWRvdWJsZSBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OmFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNz
KSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpID8g
MC4wIDogMi4wOwotfQotCi1ib29sIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6cGFpbnRQcm9ncmVz
c1RyYWNrUmVjdChjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QsIElt
YWdlKiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW5mby5jb250ZXh0KTsKLSAgICBpbmZvLmNvbnRl
eHQtPnNhdmUoKTsKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBpbmZvLmNvbnRleHQ7
Ci0gICAgZHJhd1RocmVlU2xpY2VIb3Jpem9udGFsKGNvbnRleHQsIHJlY3QsIGltYWdlLCBtZWRp
dW1TbGljZSk7Ci0gICAgY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotc3RhdGljIHZvaWQgZHJhd1Byb2dyZXNzVGV4dHVyZShHcmFwaGljc0NvbnRleHQqIGdjLCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGludCBuLCBJbWFnZSogaW1hZ2UpCi17Ci0gICAgaWYgKCFp
bWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZsb2F0IGZpbmFsVGV4dHVyZVBlcmNlbnRhZ2Ug
PSAoaW50KHJlY3Qud2lkdGgoKSkgJSBpbnQocHJvZ3Jlc3NUZXh0dXJlVW5pdFdpZHRoKSkgLyBw
cm9ncmVzc1RleHR1cmVVbml0V2lkdGg7Ci0gICAgRmxvYXRTaXplIGRzdFNsaWNlKHByb2dyZXNz
VGV4dHVyZVVuaXRXaWR0aCwgcmVjdC5oZWlnaHQoKSAtIDIpOwotICAgIEZsb2F0UmVjdCBzcmNS
ZWN0KDEsIDIsIGltYWdlLT53aWR0aCgpIC0gMiwgaW1hZ2UtPmhlaWdodCgpIC0gNCk7Ci0gICAg
RmxvYXRSZWN0IGRzdFJlY3QoRmxvYXRQb2ludChyZWN0LmxvY2F0aW9uKCkueCgpICsgMSwgcmVj
dC5sb2NhdGlvbigpLnkoKSArIDEpLCBkc3RTbGljZSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG47IGkrKykgewotICAgICAgICBnYy0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBkc3RSZWN0LCBzcmNSZWN0KTsKLSAgICAgICAgZHN0UmVjdC5tb3ZlKGRzdFNsaWNl
LndpZHRoKCksIDApOwotICAgIH0KLSAgICBpZiAoZmluYWxUZXh0dXJlUGVyY2VudGFnZSkgewot
ICAgICAgICBzcmNSZWN0LnNldFdpZHRoKHNyY1JlY3Qud2lkdGgoKSAqIGZpbmFsVGV4dHVyZVBl
cmNlbnRhZ2UgKiBmaW5hbFRleHR1cmVQZXJjZW50YWdlKTsKLSAgICAgICAgZHN0UmVjdC5zZXRX
aWR0aChkc3RSZWN0LndpZHRoKCkgKiBmaW5hbFRleHR1cmVQZXJjZW50YWdlICogZmluYWxUZXh0
dXJlUGVyY2VudGFnZSk7Ci0gICAgICAgIGdjLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIGRzdFJlY3QsIHNyY1JlY3QpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZUJsYWNrQmVycnk6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW9iamVj
dC0+aXNQcm9ncmVzcygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFJlbmRlclByb2dy
ZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mob2JqZWN0KTsKLQotICAgIHN0
YXRpYyBJbWFnZSogcHJvZ3Jlc3NUcmFjayA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
Y29yZV9wcm9ncmVzc2luZGljYXRvcl9iZyIpLmxlYWtSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2Uq
IHByb2dyZXNzQmFyID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJjb3JlX3Byb2dyZXNz
aW5kaWNhdG9yX3Byb2dyZXNzIikubGVha1JlZigpOwotICAgIHN0YXRpYyBJbWFnZSogcHJvZ3Jl
c3NQYXR0ZXJuID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJjb3JlX3Byb2dyZXNzaW5k
aWNhdG9yX3BhdHRlcm4iKS5sZWFrUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBwcm9ncmVzc0Nv
bXBsZXRlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJjb3JlX3Byb2dyZXNzaW5kaWNh
dG9yX2NvbXBsZXRlIikubGVha1JlZigpOwotCi0gICAgcGFpbnRQcm9ncmVzc1RyYWNrUmVjdChp
bmZvLCByZWN0LCBwcm9ncmVzc1RyYWNrKTsKLQotICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0ID0g
cmVjdDsKLSAgICBwcm9ncmVzc1JlY3Quc2V0WChwcm9ncmVzc1JlY3QueCgpICsgMSk7Ci0gICAg
cHJvZ3Jlc3NSZWN0LnNldEhlaWdodChwcm9ncmVzc1JlY3QuaGVpZ2h0KCkgLSAyKTsKLSAgICBw
cm9ncmVzc1JlY3Quc2V0WShwcm9ncmVzc1JlY3QueSgpICsgMSk7Ci0KLSAgICBpZiAocmVuZGVy
UHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkKLSAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRo
KChwcm9ncmVzc1JlY3Qud2lkdGgoKSAtIHByb2dyZXNzTWluV2lkdGgpICogcmVuZGVyUHJvZ3Jl
c3MtPnBvc2l0aW9uKCkgKyBwcm9ncmVzc01pbldpZHRoIC0gMik7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIC8vIEFuaW1hdGluZwotICAgICAgICBwcm9ncmVzc1JlY3Quc2V0V2lkdGgocHJvZ3Jlc3NS
ZWN0LndpZHRoKCkgLSAyKTsKLSAgICB9Ci0KLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0
aW9uKCkgPCAxKSB7Ci0gICAgICAgIHBhaW50UHJvZ3Jlc3NUcmFja1JlY3QoaW5mbywgcHJvZ3Jl
c3NSZWN0LCBwcm9ncmVzc0Jhcik7Ci0gICAgICAgIGludCBsb29wID0gZmxvb3IoKHByb2dyZXNz
UmVjdC53aWR0aCgpIC0gMikgLyBwcm9ncmVzc1RleHR1cmVVbml0V2lkdGgpOwotICAgICAgICBw
cm9ncmVzc1JlY3Quc2V0V2lkdGgocHJvZ3Jlc3NSZWN0LndpZHRoKCkgLSAyKTsKLSAgICAgICAg
ZHJhd1Byb2dyZXNzVGV4dHVyZShpbmZvLmNvbnRleHQsIHByb2dyZXNzUmVjdCwgbG9vcCwgcHJv
Z3Jlc3NQYXR0ZXJuKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGFpbnRQcm9ncmVzc1RyYWNrUmVj
dChpbmZvLCBwcm9ncmVzc1JlY3QsIHByb2dyZXNzQ29tcGxldGUpOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnBsYXRmb3JtQWN0aXZlVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1LCAx
NTAsIDUwKTsgLy8gT3JhbmdlLgotfQotCi1Db2xvciBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnBs
YXRmb3JtSW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAotewotICAgIHJl
dHVybiBDb2xvcigyNTUsIDI1NSwgMCk7IC8vIFllbGxvdy4KLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZUJsYWNrQmVycnk6OnN1cHBvcnRzRGF0YUxpc3RVSShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUp
IGNvbnN0Ci17Ci0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgLy8gV2Ugc3VwcG9y
dCBhbGwgbm9uLXBvcHVwIGRyaXZlbiB0eXBlcy4KLSAgICByZXR1cm4gdHlwZSA9PSBJbnB1dFR5
cGVOYW1lczo6dGV4dCgpIHx8IHR5cGUgPT0gSW5wdXRUeXBlTmFtZXM6OnNlYXJjaCgpIHx8IHR5
cGUgPT0gSW5wdXRUeXBlTmFtZXM6OnVybCgpCi0gICAgICAgIHx8IHR5cGUgPT0gSW5wdXRUeXBl
TmFtZXM6OnRlbGVwaG9uZSgpIHx8IHR5cGUgPT0gSW5wdXRUeXBlTmFtZXM6OmVtYWlsKCkgfHwg
dHlwZSA9PSBJbnB1dFR5cGVOYW1lczo6bnVtYmVyKCkKLSAgICAgICAgfHwgdHlwZSA9PSBJbnB1
dFR5cGVOYW1lczo6cmFuZ2UoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19
Ci0KLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLUludFNpemUgUmVuZGVyVGhlbWVCbGFj
a0JlcnJ5OjpzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoMSwg
Myk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnNsaWRlclRpY2tPZmZzZXRGcm9t
VHJhY2tDZW50ZXIoKSBjb25zdAotewotICAgIHJldHVybiAtOTsKLX0KLSNlbmRpZgotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L1JlbmRlclRoZW1lQmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvUmVuZGVyVGhlbWVCbGFja0JlcnJ5LmgJKHJldmlzaW9uIDE2
MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUmVuZGVyVGhlbWVC
bGFja0JlcnJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBS
ZW5kZXJUaGVtZUJsYWNrQmVycnlfaAotI2RlZmluZSBSZW5kZXJUaGVtZUJsYWNrQmVycnlfaAot
Ci0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBSZW5kZXJUaGVtZUJsYWNrQmVycnkgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFs
IH5SZW5kZXJUaGVtZUJsYWNrQmVycnkoKTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRGVm
YXVsdFN0eWxlU2hlZXQoKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7Ci0gICAgdmlydHVhbCBib29sIHVzZXNW
ZXJ0aWNhbFZvbHVtZVNsaWRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgdmlydHVhbCBTdHJpbmcgZXh0cmFGdWxsU2Ny
ZWVuU3R5bGVTaGVldCgpOwotI2VuZGlmCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIo
Y29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFs
IGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBz
eXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0
eWxlKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRS
YWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZvaWQgY2FsY3VsYXRlQnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRl
Y29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0KLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICB2aXJ0
dWFsIEludFNpemUgc2xpZGVyVGlja1NpemUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IGludCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29uc3QgT1ZFUlJJREU7Ci0j
ZW5kaWYKLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdmlydHVhbCBDb2xvciBwbGF0
Zm9ybVRhcEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgQ29s
b3IgcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIHN0
eWxlLT5oYXNBcHBlYXJhbmNlKCk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAg
dmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVkaWFD
b250cm9sU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9u
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVJld2luZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jl
c3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
ICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIo
UmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJh
dGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0K
LSAgICAvLyBIaWdobGlnaHRpbmcgY29sb3JzIGZvciBUZXh0TWF0Y2hlcy4KLSAgICB2aXJ0dWFs
IENvbG9yIHBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEYXRhTGlzdFVJKGNvbnN0IEF0
b21pY1N0cmluZyYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcm
IGRlZmF1bHRHVUlGb250KCk7Ci0KLSAgICAvLyBUaGUgZGVmYXVsdCB2YXJpYWJsZS13aWR0aCBm
b250IHNpemUuIFdlIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IGZvbnQKLSAgICAvLyBzaXplIGZv
ciB0aGUgInN5c3RlbSBmb250IiwgYW5kIGFzIGEgYmFzZSBzaXplICh3aGljaCB3ZSB0aGVuIHNo
cmluaykgZm9yCi0gICAgLy8gZm9ybSBjb250cm9sIGZvbnRzLgotICAgIHN0YXRpYyBmbG9hdCBk
ZWZhdWx0Rm9udFNpemU7Ci0KLSAgICBSZW5kZXJUaGVtZUJsYWNrQmVycnkoKTsKLSAgICB2b2lk
IHNldEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICBib29sIHBhaW50VGV4
dEZpZWxkT3JUZXh0QXJlYU9yU2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgYm9vbCBwYWludFNsaWRlclRyYWNrUmVjdChS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSW1hZ2UqKTsK
LQotICAgIGJvb2wgcGFpbnRQcm9ncmVzc1RyYWNrUmVjdChjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JiwgSW1hZ2UqKTsKLQotICAgIEludFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0
KFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVu
ZGVyZXIsIExheW91dFJlY3QgcGFydFJlY3QsIGNvbnN0IEludFJlY3QmIGxvY2FsT2Zmc2V0KSBj
b25zdDsKLQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUmVuZGVy
VGhlbWVCbGFja0JlcnJ5X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVy
cnkvU1NMS2V5R2VuZXJhdG9yQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9TU0xLZXlHZW5lcmF0b3JCbGFja0JlcnJ5LmNwcAko
cmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9T
U0xLZXlHZW5lcmF0b3JCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTU0xLZXlHZW5lcmF0b3IuaCIKLQotI2luY2x1ZGUgIlVSTC5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXZvaWQgZ2V0U3VwcG9ydGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4mKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJp
bmcodW5zaWduZWQsIFN0cmluZyBjb25zdCYsIFVSTCBjb25zdCYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU2Nyb2xsQW5pbWF0
b3JCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L1Njcm9sbEFuaW1hdG9yQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU2Nyb2xsQW5pbWF0b3JCbGFj
a0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotCi0jaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3JCbGFja0JlcnJ5LmgiCi0KLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgot
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFz
c093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWEpCi17Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhICYmIHNjcm9s
bGFibGVBcmVhLT5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBTY3JvbGxBbmltYXRvckJsYWNrQmVycnkoc2Nyb2xsYWJsZUFyZWEpKTsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKSk7Ci19Ci0K
LVNjcm9sbEFuaW1hdG9yQmxhY2tCZXJyeTo6U2Nyb2xsQW5pbWF0b3JCbGFja0JlcnJ5KFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKLSAgICA6IFNjcm9sbEFuaW1hdG9yTm9uZShzY3Jv
bGxhYmxlQXJlYSkKLSAgICAsIG1fZGlzYWJsZUNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRF
ZGdlV2hpbGVBbmltYXRpbmcoZmFsc2UpCi0gICAgLCBtX29yaWdpbmFsQ29uc3RyYW5zU2Nyb2xs
aW5nVG9Db250ZW50RWRnZSh0cnVlKQotewotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQmxhY2tC
ZXJyeTo6YW5pbWF0aW9uV2lsbFN0YXJ0KCkKLXsKLSAgICBpZiAobV9kaXNhYmxlQ29uc3RyYWlu
c1Njcm9sbGluZ1RvQ29udGVudEVkZ2VXaGlsZUFuaW1hdGluZykgewotICAgICAgICBtX29yaWdp
bmFsQ29uc3RyYW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSA9IHNjcm9sbGFibGVBcmVhKCktPmNv
bnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCk7Ci0gICAgICAgIHNjcm9sbGFibGVBcmVh
KCktPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKLSAgICB9Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JCbGFja0JlcnJ5OjphbmltYXRpb25EaWRGaW5pc2goKQot
ewotICAgIGlmIChtX2Rpc2FibGVDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZVdoaWxl
QW5pbWF0aW5nKSB7Ci0gICAgICAgIHNjcm9sbGFibGVBcmVhKCktPnNldENvbnN0cmFpbnNTY3Jv
bGxpbmdUb0NvbnRlbnRFZGdlKG1fb3JpZ2luYWxDb25zdHJhbnNTY3JvbGxpbmdUb0NvbnRlbnRF
ZGdlKTsKLSAgICAgICAgbV9kaXNhYmxlQ29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2VX
aGlsZUFuaW1hdGluZyA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckJs
YWNrQmVycnk6OnNldERpc2FibGVDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZVdoaWxl
QW5pbWF0aW5nKGJvb2wgdmFsdWUpCi17Ci0gICAgbV9kaXNhYmxlQ29uc3RyYWluc1Njcm9sbGlu
Z1RvQ29udGVudEVkZ2VXaGlsZUFuaW1hdGluZyA9IHZhbHVlOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU2Nyb2xsQW5pbWF0b3JCbGFja0JlcnJ5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9TY3Jv
bGxBbmltYXRvckJsYWNrQmVycnkuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9TY3JvbGxBbmltYXRvckJsYWNrQmVycnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JCbGFja0JlcnJ5X2gKLSNkZWZpbmUgU2Ny
b2xsQW5pbWF0b3JCbGFja0JlcnJ5X2gKLQotI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQot
Ci0jaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJTY3JvbGxBbmltYXRvck5v
bmUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTY3JvbGxhYmxlQXJlYTsKLQot
Y2xhc3MgU2Nyb2xsQW5pbWF0b3JCbGFja0JlcnJ5IDogcHVibGljIFNjcm9sbEFuaW1hdG9yTm9u
ZSB7Ci1wdWJsaWM6Ci0gICAgU2Nyb2xsQW5pbWF0b3JCbGFja0JlcnJ5KFNjcm9sbGFibGVBcmVh
Kik7Ci0KLSAgICB2b2lkIHNldERpc2FibGVDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRn
ZVdoaWxlQW5pbWF0aW5nKGJvb2wpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFu
aW1hdGlvbldpbGxTdGFydCgpOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25EaWRGaW5pc2go
KTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1fZGlzYWJsZUNvbnN0cmFpbnNTY3JvbGxpbmdUb0Nv
bnRlbnRFZGdlV2hpbGVBbmltYXRpbmc7Ci0gICAgYm9vbCBtX29yaWdpbmFsQ29uc3RyYW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotCi0jZW5kaWYgLy8gU2Nyb2xsQW5pbWF0
b3JCbGFja0JlcnJ5X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkv
U2Nyb2xsYmFyVGhlbWVCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1Njcm9sbGJhclRoZW1lQmxhY2tCZXJyeS5jcHAJKHJldmlz
aW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU2Nyb2xs
YmFyVGhlbWVCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzMyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFy
VGhlbWU6Om5hdGl2ZVRoZW1lKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU2Nyb2xsYmFyVGhlbWUsIHRoZW1lLCAoKSk7Ci0gICAgcmV0dXJuICZ0
aGVtZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYmxhY2tiZXJyeS9TZWFyY2hQb3B1cE1lbnVCbGFja0JlcnJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1NlYXJjaFBvcHVwTWVu
dUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ibGFja2JlcnJ5L1NlYXJjaFBvcHVwTWVudUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVu
dUJsYWNrQmVycnkuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLSNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TZWFy
Y2hQb3B1cE1lbnVCbGFja0JlcnJ5OjpTZWFyY2hQb3B1cE1lbnVCbGFja0JlcnJ5KFBvcHVwTWVu
dUNsaWVudCogY2xpZW50KQotICAgIDogbV9wb3B1cChhZG9wdFJlZihuZXcgUG9wdXBNZW51Qmxh
Y2tCZXJyeShjbGllbnQpKSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1Qb3B1cE1l
bnUqIFNlYXJjaFBvcHVwTWVudUJsYWNrQmVycnk6OnBvcHVwTWVudSgpCi17Ci0gICAgcmV0dXJu
IG1fcG9wdXAuZ2V0KCk7Ci19Ci0KLWJvb2wgU2VhcmNoUG9wdXBNZW51QmxhY2tCZXJyeTo6ZW5h
YmxlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgU2VhcmNoUG9wdXBNZW51QmxhY2tCZXJyeTo6c2F2ZVJlY2VudFNlYXJjaGVzKEF0b21p
Y1N0cmluZyBjb25zdCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFNlYXJjaFBvcHVwTWVudUJsYWNrQmVycnk6OmxvYWRSZWNlbnRT
ZWFyY2hlcyhBdG9taWNTdHJpbmcgY29uc3QmLCBWZWN0b3I8U3RyaW5nPiYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9TZWFyY2hQb3B1cE1lbnVCbGFja0JlcnJ5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9TZWFyY2hQ
b3B1cE1lbnVCbGFja0JlcnJ5LmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvU2VhcmNoUG9wdXBNZW51QmxhY2tCZXJyeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCi0gKi8KLQotI2lmbmRlZiBTZWFyY2hQb3B1cE1lbnVCbGFja0JlcnJ5X2gKLSNkZWZp
bmUgU2VhcmNoUG9wdXBNZW51QmxhY2tCZXJyeV9oCi0KLSNpbmNsdWRlICJQb3B1cE1lbnVCbGFj
a0JlcnJ5LmgiCi0jaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgU2VhcmNoUG9wdXBNZW51QmxhY2tCZXJyeSA6IHB1YmxpYyBTZWFyY2hQ
b3B1cE1lbnUgewotcHVibGljOgotICAgIFNlYXJjaFBvcHVwTWVudUJsYWNrQmVycnkoUG9wdXBN
ZW51Q2xpZW50Kik7Ci0KLSAgICB2aXJ0dWFsIFBvcHVwTWVudSogcG9wdXBNZW51KCk7Ci0gICAg
dmlydHVhbCB2b2lkIHNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcyk7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxTdHJpbmc+
JiBzZWFyY2hJdGVtcyk7Ci0gICAgdmlydHVhbCBib29sIGVuYWJsZWQoKTsKLQotcHJpdmF0ZToK
LSAgICBSZWZQdHI8UG9wdXBNZW51QmxhY2tCZXJyeT4gbV9wb3B1cDsKLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIFNlYXJjaFBvcHVwTWVudUJsYWNrQmVycnlfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYmxhY2tiZXJyeS9TaGFyZWRUaW1lckJsYWNrQmVycnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU2hhcmVkVGltZXJCbGFja0Jl
cnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxh
Y2tiZXJyeS9TaGFyZWRUaW1lckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNoYXJlZFRpbWVyLmgiCi0KLSNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TaW5nbGV0b24uaD4KLSNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNoYXJlZFRpbWVyQmxhY2tCZXJyeSA6IHB1YmxpYyBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6VGhyZWFkVW5zYWZlU2luZ2xldG9uPFNoYXJlZFRpbWVyQmxh
Y2tCZXJyeT4gewotICAgIGZyaWVuZCB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2
b2lkICgqZikoKSk7Ci0gICAgU0lOR0xFVE9OX0RFRklOSVRJT05fVEhSRUFEVU5TQUZFKFNoYXJl
ZFRpbWVyQmxhY2tCZXJyeSkKLQotcHVibGljOgotICAgIHZvaWQgc3RhcnQoZG91YmxlKTsKLSAg
ICB2b2lkIHN0b3AoKTsKLQotcHJpdmF0ZToKLSAgICBTaGFyZWRUaW1lckJsYWNrQmVycnkoKTsK
LSAgICB+U2hhcmVkVGltZXJCbGFja0JlcnJ5KCk7Ci0KLSAgICBib29sIG1fc3RhcnRlZDsKLSAg
ICB2b2lkICgqbV90aW1lckZ1bmN0aW9uKSgpOwotfTsKLQotU0lOR0xFVE9OX0lOSVRJQUxJWkVS
X1RIUkVBRFVOU0FGRShTaGFyZWRUaW1lckJsYWNrQmVycnkpCi0KLVNoYXJlZFRpbWVyQmxhY2tC
ZXJyeTo6U2hhcmVkVGltZXJCbGFja0JlcnJ5KCkKLSAgICA6IG1fc3RhcnRlZChmYWxzZSkKLSAg
ICAsIG1fdGltZXJGdW5jdGlvbigwKQotewotfQotCi1TaGFyZWRUaW1lckJsYWNrQmVycnk6On5T
aGFyZWRUaW1lckJsYWNrQmVycnkoKQotewotICAgIGlmIChtX3N0YXJ0ZWQpCi0gICAgICAgIHN0
b3AoKTsKLX0KLQotdm9pZCBTaGFyZWRUaW1lckJsYWNrQmVycnk6OnN0YXJ0KGRvdWJsZSBpbnRl
cnZhbCkKLXsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6dGltZXJTdGFydChpbnRlcnZhbCwg
bV90aW1lckZ1bmN0aW9uKTsKLSAgICBtX3N0YXJ0ZWQgPSB0cnVlOwotfQotCi12b2lkIFNoYXJl
ZFRpbWVyQmxhY2tCZXJyeTo6c3RvcCgpCi17Ci0gICAgaWYgKCFtX3N0YXJ0ZWQpCi0gICAgICAg
IHJldHVybjsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6dGltZXJTdG9wKCk7Ci0gICAgbV9z
dGFydGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZv
aWQgKCpmKSgpKQotewotICAgIFNoYXJlZFRpbWVyQmxhY2tCZXJyeTo6aW5zdGFuY2UoKS0+bV90
aW1lckZ1bmN0aW9uID0gZjsKLX0KLQotdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChk
b3VibGUgaW50ZXJ2YWwpCi17Ci0gICAgU2hhcmVkVGltZXJCbGFja0JlcnJ5OjppbnN0YW5jZSgp
LT5zdGFydChpbnRlcnZhbCk7Ci19Ci0KLXZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKLXsKLSAgICBT
aGFyZWRUaW1lckJsYWNrQmVycnk6Omluc3RhbmNlKCktPnN0b3AoKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5
L1NvdW5kQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYmxhY2tiZXJyeS9Tb3VuZEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1NvdW5kQmxhY2tCZXJyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU291bmQuaCIKLQot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9p
ZCBzeXN0ZW1CZWVwKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYmxhY2tiZXJyeS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAxNjE1OTApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdm9pZCBzZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZChib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvV2lkZ2V0
QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxh
Y2tiZXJyeS9XaWRnZXRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9XaWRnZXRCbGFja0JlcnJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
LCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXaWRn
ZXQuaCIKLQotI2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotV2lkZ2V0OjpXaWRnZXQoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQotewot
ICAgIGluaXQod2lkZ2V0KTsKLX0KLQotV2lkZ2V0Ojp+V2lkZ2V0KCkKLXsKLX0KLQotdm9pZCBX
aWRnZXQ6OmhpZGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2lkZ2V0
OjpwYWludChHcmFwaGljc0NvbnRleHQqLCBJbnRSZWN0IGNvbnN0JikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdpZGdldDo6c2V0Q3Vyc29yKEN1cnNvciBjb25zdCYgY3Vy
c29yKQotewotICAgIFNjcm9sbFZpZXcqIHRoZVJvb3QgPSByb290KCk7Ci0gICAgaWYgKCF0aGVS
b290KQotICAgICAgICByZXR1cm47Ci0gICAgUGxhdGZvcm1QYWdlQ2xpZW50IHBhZ2VDbGllbnQg
PSB0aGVSb290LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotCi0gICAgaWYg
KHBhZ2VDbGllbnQpCi0gICAgICAgIHBhZ2VDbGllbnQtPnNldEN1cnNvcihjdXJzb3IuaW1wbCgp
KTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIG1fZnJhbWUgPSByZWN0OwotCi0gICAgZnJhbWVSZWN0c0NoYW5nZWQoKTsKLX0K
LQotdm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIFdpZGdldDo6c2hvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZnJhbWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJDcmVkZW50aWFsLmgi
Ci0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudEJsYWNrQmVycnkuaCIKLSNp
bmNsdWRlICJQcm90ZWN0aW9uU3BhY2UuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9y
bUFzc2VydC5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNoTWFw
PFBhZ2VDbGllbnRCbGFja0JlcnJ5KiwgYm9vbD4gUGFnZVZpc2liaWxpdHlNYXA7Ci0KLXN0cnVj
dCBDaGFsbGVuZ2VJbmZvIHsKLSAgICBDaGFsbGVuZ2VJbmZvKGNvbnN0IFVSTCYsIGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYsIGNvbnN0IENyZWRlbnRpYWwmLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUNsaWVudCosIFBhZ2VDbGllbnRCbGFja0JlcnJ5Kik7Ci0KLSAgICBVUkwgdXJsOwotICAgIFBy
b3RlY3Rpb25TcGFjZSBzcGFjZTsKLSAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWw7Ci0gICAgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VDbGllbnQqIGF1dGhDbGllbnQ7Ci0gICAgUGFnZUNsaWVudEJs
YWNrQmVycnkqIHBhZ2VDbGllbnQ7Ci0gICAgYm9vbCBibG9ja2VkOwotfTsKLQotQ2hhbGxlbmdl
SW5mbzo6Q2hhbGxlbmdlSW5mbyhjb25zdCBVUkwmIGFVcmwsIGNvbnN0IFByb3RlY3Rpb25TcGFj
ZSYgYVNwYWNlLCBjb25zdCBDcmVkZW50aWFsJiBhQ3JlZGVudGlhbCwKLSAgICBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZUNsaWVudCogYW5BdXRoQ2xpZW50LCBQYWdlQ2xpZW50QmxhY2tCZXJyeSog
YVBhZ2VDbGllbnQpCi0gICAgOiB1cmwoYVVybCkKLSAgICAsIHNwYWNlKGFTcGFjZSkKLSAgICAs
IGNyZWRlbnRpYWwoYUNyZWRlbnRpYWwpCi0gICAgLCBhdXRoQ2xpZW50KGFuQXV0aENsaWVudCkK
LSAgICAsIHBhZ2VDbGllbnQoYVBhZ2VDbGllbnQpCi0gICAgLCBibG9ja2VkKGZhbHNlKQotewot
fQotCi1jbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXJQcml2YXRlIHsKLXB1Ymxp
YzoKLSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXJQcml2YXRlKCk7Ci0KLSAgICBi
b29sIHJlc3VtZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBhZ2VDbGllbnRCbGFja0JlcnJ5Kik7
Ci0gICAgdm9pZCBzdGFydEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKENoYWxsZW5nZUluZm8qKTsK
LSAgICBib29sIHBhZ2VFeGlzdHMoUGFnZUNsaWVudEJsYWNrQmVycnkqKTsKLQotICAgIENoYWxs
ZW5nZUluZm8qIG1fYWN0aXZlQ2hhbGxlbmdlOwotICAgIFBhZ2VWaXNpYmlsaXR5TWFwIG1fcGFn
ZVZpc2liaWxpdHlNYXA7Ci0gICAgVmVjdG9yPE93blB0cjxDaGFsbGVuZ2VJbmZvPiA+IG1fY2hh
bGxlbmdlczsKLX07Ci0KLUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlclByaXZhdGU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlclByaXZhdGUoKQotICAgIDogbV9hY3RpdmVDaGFs
bGVuZ2UoMCkKLXsKLX0KLQotYm9vbCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXJQcml2
YXRlOjpyZXN1bWVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQYWdlQ2xpZW50QmxhY2tCZXJyeSog
Y2xpZW50KQotewotICAgIEFTU0VSVCghbV9hY3RpdmVDaGFsbGVuZ2UpOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2NoYWxsZW5nZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KG1fY2hhbGxlbmdlc1tpXS0+cGFnZUNsaWVudCA9PSBjbGllbnQgJiYgbV9jaGFsbGVuZ2VzW2ld
LT5ibG9ja2VkKSB7Ci0gICAgICAgICAgICBzdGFydEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1f
Y2hhbGxlbmdlc1tpXS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZU1hbmFnZXJQcml2YXRlOjpzdGFydEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKENoYWxs
ZW5nZUluZm8qIGluZm8pCi17Ci0gICAgbV9hY3RpdmVDaGFsbGVuZ2UgPSBpbmZvOwotICAgIG1f
YWN0aXZlQ2hhbGxlbmdlLT5ibG9ja2VkID0gZmFsc2U7Ci0gICAgbV9hY3RpdmVDaGFsbGVuZ2Ut
PnBhZ2VDbGllbnQtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1fYWN0aXZlQ2hhbGxlbmdlLT51
cmwsIG1fYWN0aXZlQ2hhbGxlbmdlLT5zcGFjZSwgbV9hY3RpdmVDaGFsbGVuZ2UtPmNyZWRlbnRp
YWwpOwotfQotCi1ib29sIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlclByaXZhdGU6OnBh
Z2VFeGlzdHMoUGFnZUNsaWVudEJsYWNrQmVycnkqIGNsaWVudCkKLXsKLSAgICByZXR1cm4gbV9w
YWdlVmlzaWJpbGl0eU1hcC5maW5kKGNsaWVudCkgIT0gbV9wYWdlVmlzaWJpbGl0eU1hcC5lbmQo
KTsKLX0KLQotU0lOR0xFVE9OX0lOSVRJQUxJWkVSX1RIUkVBRFVOU0FGRShBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZU1hbmFnZXIpCi0KLUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlcjo6QXV0
aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyKCkKLSAgICA6IGQoYWRvcHRQdHIobmV3IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlclByaXZhdGUpKQotewotfQotCi12b2lkIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlTWFuYWdlcjo6cGFnZUNyZWF0ZWQoUGFnZUNsaWVudEJsYWNrQmVycnkq
IGNsaWVudCkKLXsKLSAgICBkLT5tX3BhZ2VWaXNpYmlsaXR5TWFwLmFkZChjbGllbnQsIHRydWUp
OwotfQotCi12b2lkIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlcjo6cGFnZURlbGV0ZWQo
UGFnZUNsaWVudEJsYWNrQmVycnkqIGNsaWVudCkKLXsKLSAgICBkLT5tX3BhZ2VWaXNpYmlsaXR5
TWFwLnJlbW92ZShjbGllbnQpOwotCi0gICAgaWYgKGQtPm1fYWN0aXZlQ2hhbGxlbmdlICYmIGQt
Pm1fYWN0aXZlQ2hhbGxlbmdlLT5wYWdlQ2xpZW50ID09IGNsaWVudCkKLSAgICAgICAgZC0+bV9h
Y3RpdmVDaGFsbGVuZ2UgPSAwOwotCi0gICAgVmVjdG9yPE93blB0cjxDaGFsbGVuZ2VJbmZvPiA+
IGV4aXN0aW5nOwotICAgIGQtPm1fY2hhbGxlbmdlcy5zd2FwKGV4aXN0aW5nKTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhpc3Rpbmcuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KGV4aXN0aW5nW2ldLT5wYWdlQ2xpZW50ICE9IGNsaWVudCkKLSAgICAgICAgICAgIGQtPm1fY2hh
bGxlbmdlcy5hcHBlbmQoZXhpc3RpbmdbaV0ucmVsZWFzZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyOjpwYWdlVmlzaWJpbGl0eUNoYW5nZWQoUGFn
ZUNsaWVudEJsYWNrQmVycnkqIGNsaWVudCwgYm9vbCB2aXNpYmxlKQotewotICAgIFBhZ2VWaXNp
YmlsaXR5TWFwOjppdGVyYXRvciBpdGVyID0gZC0+bV9wYWdlVmlzaWJpbGl0eU1hcC5maW5kKGNs
aWVudCk7Ci0KLSAgICBBU1NFUlQoaXRlciAhPSBkLT5tX3BhZ2VWaXNpYmlsaXR5TWFwLmVuZCgp
KTsKLSAgICBpZiAoaXRlciA9PSBkLT5tX3BhZ2VWaXNpYmlsaXR5TWFwLmVuZCgpKSB7Ci0gICAg
ICAgIGQtPm1fcGFnZVZpc2liaWxpdHlNYXAuYWRkKGNsaWVudCwgdmlzaWJsZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXRlci0+dmFsdWUgPT0gdmlzaWJsZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaXRlci0+dmFsdWUgPSB2aXNpYmxlOwotICAgIGlmICghdmlzaWJs
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGQtPm1fYWN0aXZlQ2hhbGxlbmdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBkLT5yZXN1bWVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjbGll
bnQpOwotfQotCi12b2lkIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlcjo6YXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgc3Bh
Y2UsCi0gICAgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCwgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VDbGllbnQqIGF1dGhDbGllbnQsIFBhZ2VDbGllbnRCbGFja0JlcnJ5KiBwYWdlQ2xpZW50
KQotewotICAgIEJMQUNLQkVSUllfQVNTRVJUKGF1dGhDbGllbnQpOwotICAgIEJMQUNLQkVSUllf
QVNTRVJUKHBhZ2VDbGllbnQpOwotCi0gICAgQ2hhbGxlbmdlSW5mbyogaW5mbyA9IG5ldyBDaGFs
bGVuZ2VJbmZvKHVybCwgc3BhY2UsIGNyZWRlbnRpYWwsIGF1dGhDbGllbnQsIHBhZ2VDbGllbnQp
OwotICAgIGQtPm1fY2hhbGxlbmdlcy5hcHBlbmQoYWRvcHRQdHIoaW5mbykpOwotCi0gICAgaWYg
KGQtPm1fYWN0aXZlQ2hhbGxlbmdlIHx8ICFwYWdlQ2xpZW50LT5pc1Zpc2libGUoKSkgewotICAg
ICAgICBpbmZvLT5ibG9ja2VkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGQtPnN0YXJ0QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoaW5mbyk7Ci19Ci0KLXZvaWQgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyOjpjYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZUNsaWVudCogY2xpZW50KQotewotICAgIEJMQUNLQkVSUllf
QVNTRVJUKGNsaWVudCk7Ci0KLSAgICBpZiAoZC0+bV9hY3RpdmVDaGFsbGVuZ2UgJiYgZC0+bV9h
Y3RpdmVDaGFsbGVuZ2UtPmF1dGhDbGllbnQgPT0gY2xpZW50KQotICAgICAgICBkLT5tX2FjdGl2
ZUNoYWxsZW5nZSA9IDA7Ci0KLSAgICBWZWN0b3I8T3duUHRyPENoYWxsZW5nZUluZm8+ID4gZXhp
c3Rpbmc7Ci0gICAgZC0+bV9jaGFsbGVuZ2VzLnN3YXAoZXhpc3RpbmcpOwotCi0gICAgQ2hhbGxl
bmdlSW5mbyogbmV4dCA9IDA7Ci0gICAgUGFnZUNsaWVudEJsYWNrQmVycnkqIHBhZ2UgPSAwOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleGlzdGluZy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoZXhpc3RpbmdbaV0tPmF1dGhDbGllbnQgIT0gY2xpZW50KSB7Ci0gICAgICAgICAg
ICBpZiAocGFnZSAmJiAhbmV4dCAmJiBleGlzdGluZ1tpXS0+cGFnZUNsaWVudCA9PSBwYWdlKQot
ICAgICAgICAgICAgICAgIG5leHQgPSBleGlzdGluZ1tpXS5nZXQoKTsKLSAgICAgICAgICAgIGQt
Pm1fY2hhbGxlbmdlcy5hcHBlbmQoZXhpc3RpbmdbaV0ucmVsZWFzZSgpKTsKLSAgICAgICAgfSBl
bHNlIGlmIChkLT5tX2FjdGl2ZUNoYWxsZW5nZSA9PSBleGlzdGluZ1tpXS5nZXQoKSkKLSAgICAg
ICAgICAgIHBhZ2UgPSBleGlzdGluZ1tpXS0+cGFnZUNsaWVudDsKLSAgICB9Ci0KLSAgICBpZiAo
bmV4dCkKLSAgICAgICAgZC0+c3RhcnRBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShuZXh0KTsKLX0K
LQotdm9pZCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXI6Om5vdGlmeUNoYWxsZW5nZVJl
c3VsdChjb25zdCBVUkwmLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHNwYWNlLAotICAgIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlUmVzdWx0IHJlc3VsdCwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVu
dGlhbCkKLXsKLSAgICBkLT5tX2FjdGl2ZUNoYWxsZW5nZSA9IDA7Ci0KLSAgICBWZWN0b3I8T3du
UHRyPENoYWxsZW5nZUluZm8+ID4gZXhpc3Rpbmc7Ci0gICAgZC0+bV9jaGFsbGVuZ2VzLnN3YXAo
ZXhpc3RpbmcpOwotCi0gICAgQ2hhbGxlbmdlSW5mbyogbmV4dCA9IDA7Ci0gICAgUGFnZUNsaWVu
dEJsYWNrQmVycnkqIHBhZ2UgPSAwOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleGlz
dGluZy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoZXhpc3RpbmdbaV0tPnNwYWNlICE9IHNw
YWNlKSB7Ci0gICAgICAgICAgICBpZiAocGFnZSAmJiAhbmV4dCAmJiBleGlzdGluZ1tpXS0+cGFn
ZUNsaWVudCA9PSBwYWdlKQotICAgICAgICAgICAgICAgIG5leHQgPSBleGlzdGluZ1tpXS5nZXQo
KTsKLSAgICAgICAgICAgIGQtPm1fY2hhbGxlbmdlcy5hcHBlbmQoZXhpc3RpbmdbaV0ucmVsZWFz
ZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhZ2UgPSBleGlzdGluZ1tpXS0+
cGFnZUNsaWVudDsKLSAgICAgICAgICAgIGV4aXN0aW5nW2ldLT5hdXRoQ2xpZW50LT5ub3RpZnlD
aGFsbGVuZ2VSZXN1bHQoZXhpc3RpbmdbaV0tPnVybCwgc3BhY2UsIHJlc3VsdCwgY3JlZGVudGlh
bCk7Ci0KLSAgICAgICAgICAgIC8vIEFmdGVyIGNhbGxpbmcgbm90aWZ5Q2hhbGxlbmdlUmVzdWx0
KCksIHBhZ2UgY291bGQgYmUgZGVzdHJveWVkIG9yIHNvbWV0aGluZy4KLSAgICAgICAgICAgIGlm
ICghZC0+cGFnZUV4aXN0cyhwYWdlKSB8fCAhcGFnZS0+aXNWaXNpYmxlKCkpCi0gICAgICAgICAg
ICAgICAgcGFnZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobmV4dCkKLSAgICAg
ICAgZC0+c3RhcnRBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShuZXh0KTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlci5o
CShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5
L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRl
ZiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXJfaAotI2RlZmluZSBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZU1hbmFnZXJfaAotCi0jaW5jbHVkZSAiQmxhY2tCZXJyeVBsYXRmb3JtU2luZ2xl
dG9uLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1jbGFzcyBQYWdlQ2xpZW50QmxhY2tC
ZXJyeTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZU1hbmFnZXJQcml2YXRlOwotY2xhc3MgQ3JlZGVudGlhbDsKLWNsYXNzIFVSTDsKLWNsYXNz
IFByb3RlY3Rpb25TcGFjZTsKLQotZW51bSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVJlc3VsdCB7
Ci0gICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTdWNjZXNzLAotICAgIEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlQ2FuY2VsbGVkCi19OwotCi1jbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNs
aWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUNoYWxsZW5nZVJlc3VsdChj
b25zdCBVUkwmLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZVJlc3VsdCwgY29uc3QgQ3JlZGVudGlhbCYpID0gMDsKLX07Ci0KLWNsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlTWFuYWdlciA6IHB1YmxpYyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VGhyZWFk
VW5zYWZlU2luZ2xldG9uPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlcj4gewotICAgIFNJ
TkdMRVRPTl9ERUZJTklUSU9OX1RIUkVBRFVOU0FGRShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1h
bmFnZXIpCi1wdWJsaWM6Ci0gICAgdm9pZCBwYWdlQ3JlYXRlZChQYWdlQ2xpZW50QmxhY2tCZXJy
eSopOwotICAgIHZvaWQgcGFnZURlbGV0ZWQoUGFnZUNsaWVudEJsYWNrQmVycnkqKTsKLSAgICB2
b2lkIHBhZ2VWaXNpYmlsaXR5Q2hhbmdlZChQYWdlQ2xpZW50QmxhY2tCZXJyeSosIGJvb2wgdmlz
aWJsZSk7Ci0KLSAgICB2b2lkIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IFVSTCYsIGNv
bnN0IFByb3RlY3Rpb25TcGFjZSYsIGNvbnN0IENyZWRlbnRpYWwmLCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUNsaWVudCosIFBhZ2VDbGllbnRCbGFja0JlcnJ5Kik7Ci0gICAgdm9pZCBjYW5jZWxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNsaWVudCopOwot
ICAgIHZvaWQgbm90aWZ5Q2hhbGxlbmdlUmVzdWx0KGNvbnN0IFVSTCYsIGNvbnN0IFByb3RlY3Rp
b25TcGFjZSYsIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUmVzdWx0LCBjb25zdCBDcmVkZW50aWFs
Jik7Ci0KLXByaXZhdGU6Ci0gICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyKCk7Ci0g
ICAgfkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlcigpOwotCi0gICAgT3duUHRyPEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlclByaXZhdGU+IGQ7Ci19OwotCi0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlcl9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZURhdGFiYXNl
QmFja2luZ1N0b3JlL0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZURhdGFiYXNlQmFja2lu
Z1N0b3JlL0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlLmNwcAkocmV2aXNpb24gMTYxNTkwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVEYXRhYmFzZUJhY2tp
bmdTdG9yZS9Db29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSnVsaWVuIENoYWZmcmFp
eCA8amNoYWZmcmFpeEBwbGV5by5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIw
MTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0jZGVmaW5lIEVO
QUJMRV9DT09LSUVfREVCVUcgMAotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29v
a2llRGF0YWJhc2VCYWNraW5nU3RvcmUuaCIKLQotI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIK
LSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGFyc2VkQ29va2llLmgiCi0jaW5jbHVk
ZSAiU1FMaXRlU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKLSNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEVfQ09PS0lFX0RFQlVHCi0jaW5jbHVkZSA8QmxhY2tCZXJy
eVBsYXRmb3JtTG9nLmg+Ci0jZGVmaW5lIENvb2tpZUxvZyhmb3JtYXQsIC4uLikgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZv
LCBmb3JtYXQsICMjIF9fVkFfQVJHU19fKQotI2Vsc2UKLSNkZWZpbmUgQ29va2llTG9nKGZvcm1h
dCwgLi4uKQotI2VuZGlmCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1FeGVjdXRhYmxl
TWVzc2FnZS5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU5hdmlnYXRvckhhbmRsZXIu
aD4KLQotdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1lc3NhZ2VDbGllbnQ7Ci11c2luZyBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6VHlwZWRSZXBseUJ1ZmZlcjsKLXVzaW5nIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpjcmVhdGVNZXRob2RDYWxsTWVzc2FnZTsKLQotc3RhdGljIGNvbnN0IGRvdWJs
ZSBzX2RhdGFiYXNlVGltZXJJbnRlcnZhbCA9IDI7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Q29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6OkNvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlKCkK
LSAgICA6IE1lc3NhZ2VDbGllbnQoTWVzc2FnZUNsaWVudDo6UmVwbHlGZWF0dXJlIHwgTWVzc2Fn
ZUNsaWVudDo6U3luY0ZlYXR1cmUpCi0gICAgLCBtX3RhYmxlTmFtZSgiY29va2llcyIpIC8vIFRo
aXMgaXMgY2hvc2VuIHRvIG1hdGNoIE1vemlsbGEncyB0YWJsZSBuYW1lLgotICAgICwgbV9kYlRp
bWVyKHRoaXMsICZDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZTo6c2VuZENoYW5nZXNUb0RhdGFi
YXNlVGltZXJGaXJlZCkKLSAgICAsIG1faW5zZXJ0U3RhdGVtZW50KDApCi0gICAgLCBtX3VwZGF0
ZVN0YXRlbWVudCgwKQotICAgICwgbV9kZWxldGVTdGF0ZW1lbnQoMCkKLXsKLSAgICBtX2RiVGlt
ZXJDbGllbnQgPSBuZXcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdlbmVyaWNUaW1lckNsaWVudCh0
aGlzKTsKLSAgICBtX2RiVGltZXIuc2V0Q2xpZW50KG1fZGJUaW1lckNsaWVudCk7Ci0KLSAgICBj
cmVhdGVUaHJlYWQoImNvb2tpZV9kYXRhYmFzZSIsIHB0aHJlYWRfYXR0cl9kZWZhdWx0KTsKLX0K
LQotQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6On5Db29raWVEYXRhYmFzZUJhY2tpbmdTdG9y
ZSgpCi17Ci0gICAgZGVsZXRlR3VhcmRlZE9iamVjdChtX2RiVGltZXJDbGllbnQpOwotICAgIG1f
ZGJUaW1lckNsaWVudCA9IDA7Ci0gICAgLy8gRklYTUU6IFRoaXMgb2JqZWN0IHdpbGwgbmV2ZXIg
YmUgZGVsZXRlZCBkdWUgdG8gdGhlIHNldCB1cCBvZiBDb29raWVNYW5hZ2VyIChpdCdzIGEgc2lu
Z2xldG9uKQotICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0gRGVzdHJ1Y3Rpbmci
KTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0
ZXgpOwotICAgICAgICBBU1NFUlQobV9jaGFuZ2VkQ29va2llcy5pc0VtcHR5KCkpOwotICAgIH0K
LSNlbmRpZgotfQotCi12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpvblRocmVhZEZp
bmlzaGVkKCkKLXsKLSAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBmbHVzaGluZyBjb29r
aWVzIHRvIGJhY2tpbmdTdG9yZS4uLiIpOwotICAgIC8vIFRoaXMgaXMgY2FsbGVkIGZyb20gc2h1
dGRvd24sIHNvIHdlIG5lZWQgdG8gYmUgc3VyZSB0aGUgT1MgZG9lc24ndCBraWxsIHVzIGJlZm9y
ZSB0aGUgZGIgd3JpdGUgZmluaXNoZXMuCi0gICAgLy8gT25jZSBzaG91bGQgYmUgZW5vdWdoIHNp
bmNlIHRoaXMgZXh0ZW5kcyB0ZXJpbWluYXRpb24gYnkgMiBzZWNvbmRzLgotICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpOYXZpZ2F0b3JIYW5kbGVyOjpzZW5kRXh0ZW5kVGVybWluYXRlKCk7Ci0g
ICAgc2VuZENoYW5nZXNUb0RhdGFiYXNlU3luY2hyb25vdXNseSgpOwotICAgIENvb2tpZUxvZygi
Q29va2llTWFuYWdlciAtIGZpbmlzaGVkIGZsdXNoaW5nIGNvb2tpZXMgdG8gYmFja2luZ1N0b3Jl
LiIpOwotCi0gICAgTWVzc2FnZUNsaWVudDo6b25UaHJlYWRGaW5pc2hlZCgpOwotfQotCi12b2lk
IENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpvcGVuKGNvbnN0IFN0cmluZyYgY29va2llSmFy
KQotewotICAgIGRpc3BhdGNoTWVzc2FnZShjcmVhdGVNZXRob2RDYWxsTWVzc2FnZSgmQ29va2ll
RGF0YWJhc2VCYWNraW5nU3RvcmU6Omludm9rZU9wZW4sIHRoaXMsIGNvb2tpZUphcikpOwotfQot
Ci12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjppbnZva2VPcGVuKGNvbnN0IFN0cmlu
ZyYgY29va2llSmFyKQotewotICAgIEFTU0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7Ci0gICAgaWYg
KG1fZGIuaXNPcGVuKCkpCi0gICAgICAgIGNsb3NlKCk7Ci0KLSAgICBpZiAoIW1fZGIub3Blbihj
b29raWVKYXIpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IG9wZW4gdGhlIGNvb2tp
ZSBkYXRhYmFzZS4gTm8gY29va2llIHdpbGwgYmUgc3RvcmVkISIpOwotICAgICAgICBMT0dfRVJS
T1IoIlNRTGl0ZSBFcnJvciBNZXNzYWdlOiAlcyIsIG1fZGIubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiUFJBR01BIGxv
Y2tpbmdfbW9kZT1FWENMVVNJVkU7Iik7Ci0gICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiUFJBR01B
IGpvdXJuYWxfbW9kZT1XQUw7Iik7Ci0KLSAgICBjb25zdCBTdHJpbmcgcHJpbWFyeUtleUZpZWxk
cygiUFJJTUFSWSBLRVkgKHByb3RvY29sLCBob3N0LCBwYXRoLCBuYW1lKSIpOwotICAgIGNvbnN0
IFN0cmluZyBkYXRhYmFzZUZpZWxkcygibmFtZSBURVhULCB2YWx1ZSBURVhULCBob3N0IFRFWFQs
IHBhdGggVEVYVCwgZXhwaXJ5IERPVUJMRSwgbGFzdEFjY2Vzc2VkIERPVUJMRSwgaXNTZWN1cmUg
SU5URUdFUiwgaXNIdHRwT25seSBJTlRFR0VSLCBjcmVhdGlvblRpbWUgRE9VQkxFLCBwcm90b2Nv
bCBURVhUIik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGNyZWF0ZVRhYmxlUXVlcnk7Ci0gICAgY3Jl
YXRlVGFibGVRdWVyeS5hcHBlbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICIpOwotICAg
IGNyZWF0ZVRhYmxlUXVlcnkuYXBwZW5kKG1fdGFibGVOYW1lKTsKLSAgICAvLyBUaGlzIHRhYmxl
IHNjaGVtYSBpcyBjb21wbGlhbnQgd2l0aCBNb3ppbGxhJ3MuCi0gICAgY3JlYXRlVGFibGVRdWVy
eS5hcHBlbmQoIiAoIiArIGRhdGFiYXNlRmllbGRzICsgIiwgIiArIHByaW1hcnlLZXlGaWVsZHMr
Iik7Iik7Ci0KLSAgICBtX2RiLnNldEJ1c3lUaW1lb3V0KDEwMDApOwotCi0gICAgaWYgKCFtX2Ri
LmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRhYmxlUXVlcnkudG9TdHJpbmcoKSkpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIHRoZSB0YWJsZSB0byBzdG9yZSB0aGUgY29va2ll
cyBpbnRvLiBObyBjb29raWUgd2lsbCBiZSBzdG9yZWQhIik7Ci0gICAgICAgIExPR19FUlJPUigi
U1FMaXRlIEVycm9yIE1lc3NhZ2U6ICVzIiwgbV9kYi5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
IGNsb3NlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGlu
c2VydFF1ZXJ5OwotICAgIGluc2VydFF1ZXJ5LmFwcGVuZCgiSU5TRVJUIE9SIFJFUExBQ0UgSU5U
TyAiKTsKLSAgICBpbnNlcnRRdWVyeS5hcHBlbmQobV90YWJsZU5hbWUpOwotICAgIGluc2VydFF1
ZXJ5LmFwcGVuZCgiIChuYW1lLCB2YWx1ZSwgaG9zdCwgcGF0aCwgZXhwaXJ5LCBsYXN0QWNjZXNz
ZWQsIGlzU2VjdXJlLCBpc0h0dHBPbmx5LCBjcmVhdGlvblRpbWUsIHByb3RvY29sKSBWQUxVRVMg
KD8xLCA/MiwgPzMsID80LCA/NSwgPzYsID83LCA/OCwgPzksID8xMCk7Iik7Ci0KLSAgICBtX2lu
c2VydFN0YXRlbWVudCA9IG5ldyBTUUxpdGVTdGF0ZW1lbnQobV9kYiwgaW5zZXJ0UXVlcnkudG9T
dHJpbmcoKSk7Ci0gICAgaWYgKG1faW5zZXJ0U3RhdGVtZW50LT5wcmVwYXJlKCkpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJDYW5ub3Qgc2F2ZSBjb29raWVzIik7Ci0gICAgICAgIExPR19FUlJPUigi
U1FMaXRlIEVycm9yIE1lc3NhZ2U6ICVzIiwgbV9kYi5sYXN0RXJyb3JNc2coKSk7Ci0gICAgfQot
Ci0gICAgU3RyaW5nQnVpbGRlciB1cGRhdGVRdWVyeTsKLSAgICB1cGRhdGVRdWVyeS5hcHBlbmQo
IlVQREFURSAiKTsKLSAgICB1cGRhdGVRdWVyeS5hcHBlbmQobV90YWJsZU5hbWUpOwotICAgIC8v
IFRoZSB3aGVyZSBzdGF0ZW1lbnQgaXMgY2hvc2VuIHRvIG1hdGNoIENvb2tpZU1hcCBrZXkuCi0g
ICAgdXBkYXRlUXVlcnkuYXBwZW5kKCIgU0VUIG5hbWUgPSA/MSwgdmFsdWUgPSA/MiwgaG9zdCA9
ID8zLCBwYXRoID0gPzQsIGV4cGlyeSA9ID81LCBsYXN0QWNjZXNzZWQgPSA/NiwgaXNTZWN1cmUg
PSA/NywgaXNIdHRwT25seSA9ID84LCBjcmVhdGlvblRpbWUgPSA/OSwgcHJvdG9jb2wgPSA/MTAg
d2hlcmUgbmFtZSA9ID8xIGFuZCBob3N0ID0gPzMgYW5kIHBhdGggPSA/NDsiKTsKLSAgICBtX3Vw
ZGF0ZVN0YXRlbWVudCA9IG5ldyBTUUxpdGVTdGF0ZW1lbnQobV9kYiwgdXBkYXRlUXVlcnkudG9T
dHJpbmcoKSk7Ci0KLSAgICBpZiAobV91cGRhdGVTdGF0ZW1lbnQtPnByZXBhcmUoKSkgewotICAg
ICAgICBMT0dfRVJST1IoIkNhbm5vdCB1cGRhdGUgY29va2llcyIpOwotICAgICAgICBMT0dfRVJS
T1IoIlNRTGl0ZSBFcnJvciBNZXNzYWdlOiAlcyIsIG1fZGIubGFzdEVycm9yTXNnKCkpOwotICAg
IH0KLQotICAgIFN0cmluZ0J1aWxkZXIgZGVsZXRlUXVlcnk7Ci0gICAgZGVsZXRlUXVlcnkuYXBw
ZW5kKCJERUxFVEUgRlJPTSAiKTsKLSAgICBkZWxldGVRdWVyeS5hcHBlbmQobV90YWJsZU5hbWUp
OwotICAgIC8vIFRoZSB3aGVyZSBzdGF0ZW1lbnQgaXMgY2hvc2VuIHRvIG1hdGNoIENvb2tpZU1h
cCBrZXkuCi0gICAgZGVsZXRlUXVlcnkuYXBwZW5kKCIgV0hFUkUgbmFtZT0/MSBhbmQgaG9zdD0/
MiBhbmQgcGF0aD0/MyBhbmQgcHJvdG9jb2w9PzQ7Iik7Ci0gICAgbV9kZWxldGVTdGF0ZW1lbnQg
PSBuZXcgU1FMaXRlU3RhdGVtZW50KG1fZGIsIGRlbGV0ZVF1ZXJ5LnRvU3RyaW5nKCkpOwotCi0g
ICAgaWYgKG1fZGVsZXRlU3RhdGVtZW50LT5wcmVwYXJlKCkpIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJDYW5ub3QgZGVsZXRlIGNvb2tpZXMiKTsKLSAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgRXJy
b3IgTWVzc2FnZTogJXMiLCBtX2RiLmxhc3RFcnJvck1zZygpKTsKLSAgICB9Ci0KLSAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6d2ViS2l0VGhyZWFkTWVzc2FnZUNsaWVudCgpLT5kaXNwYXRjaE1l
c3NhZ2UoY3JlYXRlTWV0aG9kQ2FsbE1lc3NhZ2UoJkNvb2tpZU1hbmFnZXI6OmdldEJhY2tpbmdT
dG9yZUNvb2tpZXMsICZjb29raWVNYW5hZ2VyKCkpKTsKLX0KLQotdm9pZCBDb29raWVEYXRhYmFz
ZUJhY2tpbmdTdG9yZTo6Y2xvc2UoKQotewotICAgIEFTU0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7
Ci0gICAgQ29va2llTG9nKCJDb29raWVCYWNraW5nU3RvcmUgLSBDbG9zaW5nIik7Ci0KLSAgICBz
aXplX3QgY2hhbmdlZENvb2tpZXNTaXplOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
ayhtX211dGV4KTsKLSAgICAgICAgaWYgKG1fZGJUaW1lci5zdGFydGVkKCkpCi0gICAgICAgICAg
ICBtX2RiVGltZXIuc3RvcCgpOwotICAgICAgICBjaGFuZ2VkQ29va2llc1NpemUgPSBtX2NoYW5n
ZWRDb29raWVzLnNpemUoKTsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlZENvb2tpZXNTaXplID4g
MCkKLSAgICAgICAgaW52b2tlU2VuZENoYW5nZXNUb0RhdGFiYXNlKCk7Ci0KLSAgICBkZWxldGUg
bV9pbnNlcnRTdGF0ZW1lbnQ7Ci0gICAgbV9pbnNlcnRTdGF0ZW1lbnQgPSAwOwotICAgIGRlbGV0
ZSBtX3VwZGF0ZVN0YXRlbWVudDsKLSAgICBtX3VwZGF0ZVN0YXRlbWVudCA9IDA7Ci0gICAgZGVs
ZXRlIG1fZGVsZXRlU3RhdGVtZW50OwotICAgIG1fZGVsZXRlU3RhdGVtZW50ID0gMDsKLQotICAg
IGlmIChtX2RiLmlzT3BlbigpKQotICAgICAgICBtX2RiLmNsb3NlKCk7Ci19Ci0KLXZvaWQgQ29v
a2llRGF0YWJhc2VCYWNraW5nU3RvcmU6Omluc2VydChjb25zdCBQYXNzUmVmUHRyPFBhcnNlZENv
b2tpZT4gY29va2llKQotewotICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0gYWRk
aW5nIGluc2VydGluZyBjb29raWUgJXMgdG8gcXVldWUuIiwgY29va2llLT50b1N0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwotICAgIGFkZFRvQ2hhbmdlUXVldWUoY29va2llLCBJbnNlcnQpOwotfQot
Ci12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjp1cGRhdGUoY29uc3QgUGFzc1JlZlB0
cjxQYXJzZWRDb29raWU+IGNvb2tpZSkKLXsKLSAgICBDb29raWVMb2coIkNvb2tpZUJhY2tpbmdT
dG9yZSAtIGFkZGluZyB1cGRhdGluZyBjb29raWUgJXMgdG8gcXVldWUuIiwgY29va2llLT50b1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGFkZFRvQ2hhbmdlUXVldWUoY29va2llLCBVcGRh
dGUpOwotfQotCi12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpyZW1vdmUoY29uc3Qg
UGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IGNvb2tpZSkKLXsKLSAgICBDb29raWVMb2coIkNvb2tp
ZUJhY2tpbmdTdG9yZSAtIGFkZGluZyBkZWxldGluZyBjb29raWUgJXMgdG8gcXVldWUuIiwgY29v
a2llLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGFkZFRvQ2hhbmdlUXVldWUoY29v
a2llLCBEZWxldGUpOwotfQotCi12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpyZW1v
dmVBbGwoKQotewotICAgIGRpc3BhdGNoTWVzc2FnZShjcmVhdGVNZXRob2RDYWxsTWVzc2FnZSgm
Q29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6Omludm9rZVJlbW92ZUFsbCwgdGhpcykpOwotfQot
Ci12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjppbnZva2VSZW1vdmVBbGwoKQotewot
ICAgIEFTU0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2RiLmlzT3BlbigpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBDb29raWVMb2coIkNvb2tpZUJhY2tpbmdTdG9yZSAtIHJl
bW92ZSBBbGwgY29va2llcyBmcm9tIGJhY2tpbmdzdG9yZSIpOwotCi0gICAgewotICAgICAgICBN
dXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgICAgICBtX2NoYW5nZWRDb29raWVzLmNsZWFy
KCk7Ci0gICAgfQotCi0gICAgU3RyaW5nQnVpbGRlciBkZWxldGVRdWVyeTsKLSAgICBkZWxldGVR
dWVyeS5hcHBlbmQoIkRFTEVURSBGUk9NICIpOwotICAgIGRlbGV0ZVF1ZXJ5LmFwcGVuZChtX3Rh
YmxlTmFtZSk7Ci0gICAgZGVsZXRlUXVlcnkuYXBwZW5kKCI7Iik7Ci0KLSAgICBTUUxpdGVTdGF0
ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGIsIGRlbGV0ZVF1ZXJ5LnRvU3RyaW5nKCkpOwotICAg
IGlmIChkZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IHByZXBhcmUgREVMRVRFICogc3RhdGVtZW50Iik7Ci0gICAgICAgIExPR19FUlJPUigi
U1FMaXRlIEVycm9yIE1lc3NhZ2U6ICVzIiwgbV9kYi5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRlQ29tbWFu
ZCgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ2Fubm90IGRlbGV0ZSBjb29raWUgZnJvbSBkYXRh
YmFzZSIpOwotICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBFcnJvciBNZXNzYWdlOiAlcyIsIG1f
ZGIubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIENv
b2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpnZXRDb29raWVzRnJvbURhdGFiYXNlKFZlY3RvcjxS
ZWZQdHI8UGFyc2VkQ29va2llPiA+JiBzdGFja09mQ29va2llcywgdW5zaWduZWQgbGltaXQpCi17
Ci0gICAgLy8gSXQgaXMgbm90IGEgaHVnZSBwZXJmb3JtYW5jZSBoaXQgdG8gd2FpdCBvbiB0aGUg
cmVwbHkgaGVyZSBiZWNhdXNlIHRoaXMgaXMgb25seSBkb25lIG9uY2UgZHVyaW5nIHNldHVwIGFu
ZCB3aGVuIHR1cm5pbmcgb2ZmIHByaXZhdGUgbW9kZS4KLSAgICBUeXBlZFJlcGx5QnVmZmVyPCBW
ZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPiogPiByZXBseUJ1ZmZlcigwKTsKLSAgICBkaXNw
YXRjaE1lc3NhZ2UoY3JlYXRlTWV0aG9kQ2FsbE1lc3NhZ2VXaXRoUmV0dXJuKCZDb29raWVEYXRh
YmFzZUJhY2tpbmdTdG9yZTo6aW52b2tlR2V0Q29va2llc1dpdGhMaW1pdCwgJnJlcGx5QnVmZmVy
LCB0aGlzLCBsaW1pdCkpOwotICAgIFZlY3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+KiBjb29r
aWVzID0gcmVwbHlCdWZmZXIucG9pbnRlcigpOwotICAgIGlmIChjb29raWVzKQotICAgICAgICBz
dGFja09mQ29va2llcy5zd2FwKCpjb29raWVzKTsKLSAgICBkZWxldGUgY29va2llczsKLX0KLQot
VmVjdG9yPFJlZlB0cjxQYXJzZWRDb29raWU+ID4qIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3Jl
OjppbnZva2VHZXRDb29raWVzV2l0aExpbWl0KHVuc2lnbmVkIGxpbWl0KQotewotICAgIEFTU0VS
VChpc0N1cnJlbnRUaHJlYWQoKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSB0YWJsZSBleGlz
dHMgdG8gYXZvaWQgZG9pbmcgYW4gdW5uZWNlc3NhcnkgcmVxdWVzdC4KLSAgICBpZiAoIW1fZGIu
aXNPcGVuKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5nQnVpbGRlciBzZWxlY3RR
dWVyeTsKLSAgICBzZWxlY3RRdWVyeS5hcHBlbmQoIlNFTEVDVCBuYW1lLCB2YWx1ZSwgaG9zdCwg
cGF0aCwgZXhwaXJ5LCBsYXN0QWNjZXNzZWQsIGlzU2VjdXJlLCBpc0h0dHBPbmx5LCBjcmVhdGlv
blRpbWUsIHByb3RvY29sIEZST00gIik7Ci0gICAgc2VsZWN0UXVlcnkuYXBwZW5kKG1fdGFibGVO
YW1lKTsKLSAgICBpZiAobGltaXQgPiAwKSB7Ci0gICAgICAgIHNlbGVjdFF1ZXJ5LmFwcGVuZCgi
IE9SREVSIEJZIGxhc3RBY2Nlc3NlZCBBU0MiKTsKLSAgICAgICAgc2VsZWN0UXVlcnkuYXBwZW5k
KCIgTElNSVQgIiArIFN0cmluZzo6bnVtYmVyKGxpbWl0KSk7Ci0gICAgfQotICAgIHNlbGVjdFF1
ZXJ5LmFwcGVuZCgiOyIpOwotCi0gICAgQ29va2llTG9nKCJDb29raWVCYWNraW5nU3RvcmUgLSBp
bnZva2VHZXRBbGxDb29raWVzIHdpdGggc2VsZWN0IHF1ZXJ5ICVzIiwgc2VsZWN0UXVlcnkudG9T
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RTdGF0
ZW1lbnQobV9kYiwgc2VsZWN0UXVlcnkudG9TdHJpbmcoKSk7Ci0KLSAgICBpZiAoc2VsZWN0U3Rh
dGVtZW50LnByZXBhcmUoKSkgewotICAgICAgICBMT0dfRVJST1IoIkNhbm5vdCByZXRyaWV2ZWQg
Y29va2llcyBmcm9tIHRoZSBkYXRhYmFzZSIpOwotICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBF
cnJvciBNZXNzYWdlOiAlcyIsIG1fZGIubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPiogY29va2llcyA9
IG5ldyBWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPjsKLSAgICB3aGlsZSAoc2VsZWN0U3Rh
dGVtZW50LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgYSBy
b3cgdG8gZmV0Y2gKLQotICAgICAgICBTdHJpbmcgbmFtZSA9IHNlbGVjdFN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApOwotICAgICAgICBTdHJpbmcgdmFsdWUgPSBzZWxlY3RTdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgxKTsKLSAgICAgICAgU3RyaW5nIGRvbWFpbiA9IHNlbGVjdFN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDIpOwotICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDMpOwotICAgICAgICBkb3VibGUgZXhwaXJ5ID0gc2VsZWN0U3RhdGVtZW50
LmdldENvbHVtbkRvdWJsZSg0KTsKLSAgICAgICAgZG91YmxlIGxhc3RBY2Nlc3NlZCA9IHNlbGVj
dFN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoNSk7Ci0gICAgICAgIGJvb2wgaXNTZWN1cmUgPSBz
ZWxlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDYpOwotICAgICAgICBib29sIGlzSHR0cE9ubHkg
PSBzZWxlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDcpOwotICAgICAgICBkb3VibGUgY3JlYXRp
b25UaW1lID0gc2VsZWN0U3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSg4KTsKLSAgICAgICAgU3Ry
aW5nIHByb3RvY29sID0gc2VsZWN0U3RhdGVtZW50LmdldENvbHVtblRleHQoOSk7Ci0KLSAgICAg
ICAgY29va2llcy0+YXBwZW5kKFBhcnNlZENvb2tpZTo6Y3JlYXRlKG5hbWUsIHZhbHVlLCBkb21h
aW4sIHByb3RvY29sLCBwYXRoLCBleHBpcnksIGxhc3RBY2Nlc3NlZCwgY3JlYXRpb25UaW1lLCBp
c1NlY3VyZSwgaXNIdHRwT25seSkpOwotICAgIH0KLQotICAgIHJldHVybiBjb29raWVzOwotfQot
Ci12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpvcGVuQW5kTG9hZERhdGFiYXNlU3lu
Y2hyb25vdXNseShjb25zdCBTdHJpbmcmIGNvb2tpZUphcikKLXsKLSAgICBDb29raWVMb2coIkNv
b2tpZUJhY2tpbmdTdG9yZSAtIGxvYWRpbmcgZGF0YWJhc2UgaW50byBDb29raWVNYW5hZ2VyIGlt
bWVkaWF0ZWx5Iik7Ci0KLSAgICBpZiAobV9kYi5pc09wZW4oKSkgewotICAgICAgICBpZiAoaXND
dXJyZW50VGhyZWFkKCkpCi0gICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6d2ViS2l0
VGhyZWFkTWVzc2FnZUNsaWVudCgpLT5kaXNwYXRjaFN5bmNNZXNzYWdlKGNyZWF0ZU1ldGhvZENh
bGxNZXNzYWdlKCZDb29raWVNYW5hZ2VyOjpnZXRCYWNraW5nU3RvcmVDb29raWVzLCAmY29va2ll
TWFuYWdlcigpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvb2tpZU1hbmFnZXIoKS5n
ZXRCYWNraW5nU3RvcmVDb29raWVzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGlzQ3Vy
cmVudFRocmVhZCgpKQotICAgICAgICAgICAgaW52b2tlT3Blbihjb29raWVKYXIpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBkaXNwYXRjaFN5bmNNZXNzYWdlKGNyZWF0ZU1ldGhvZENhbGxN
ZXNzYWdlKCZDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZTo6aW52b2tlT3BlbiwgdGhpcywgY29v
a2llSmFyKSk7Ci0gICAgfQotfQotCi12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpz
ZW5kQ2hhbmdlc1RvRGF0YWJhc2VTeW5jaHJvbm91c2x5KCkKLXsKLSAgICBDb29raWVMb2coIkNv
b2tpZUJhY2tpbmdTdG9yZSAtIHNlbmRpbmcgdG8gZGF0YWJhc2UgaW1tZWRpYXRlbHkiKTsKLSAg
ICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7Ci0gICAgICAgIGlmIChtX2Ri
VGltZXIuc3RhcnRlZCgpKQotICAgICAgICAgICAgbV9kYlRpbWVyLnN0b3AoKTsKLSAgICB9Ci0g
ICAgaWYgKGlzQ3VycmVudFRocmVhZCgpKQotICAgICAgICBpbnZva2VTZW5kQ2hhbmdlc1RvRGF0
YWJhc2UoKTsKLSAgICBlbHNlCi0gICAgICAgIGRpc3BhdGNoU3luY01lc3NhZ2UoY3JlYXRlTWV0
aG9kQ2FsbE1lc3NhZ2UoJkNvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjppbnZva2VTZW5kQ2hh
bmdlc1RvRGF0YWJhc2UsIHRoaXMpKTsKLX0KLQotdm9pZCBDb29raWVEYXRhYmFzZUJhY2tpbmdT
dG9yZTo6c2VuZENoYW5nZXNUb0RhdGFiYXNlKGludCBuZXh0SW50ZXJ2YWwpCi17Ci0gICAgTXV0
ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKLSAgICBpZiAoIW1fZGJUaW1lci5zdGFydGVkKCkpIHsK
LSAgICAgICAgQ29va2llTG9nKCJDb29raWVCYWNraW5nU3RvcmUgLSBTdGFydGluZyBvbmUgc2hv
dCBzZW5kIHRvIGRhdGFiYXNlIik7Ci0gICAgICAgIG1fZGJUaW1lci5zdGFydChuZXh0SW50ZXJ2
YWwpOwotICAgIH0gZWxzZSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBDb29raWVMb2coIkNv
b2tpZUJhY2tpbmdTdG9yZSAtIFRpbWVyIGFscmVhZHkgcnVubmluZywgc2tpcHBpbmcgdGhpcyBy
ZXF1ZXN0Iik7Ci0jZW5kaWYKLSAgICB9Ci19Ci0KLXZvaWQgQ29va2llRGF0YWJhc2VCYWNraW5n
U3RvcmU6OnNlbmRDaGFuZ2VzVG9EYXRhYmFzZVRpbWVyRmlyZWQoKQotewotICAgIGRpc3BhdGNo
TWVzc2FnZShjcmVhdGVNZXRob2RDYWxsTWVzc2FnZSgmQ29va2llRGF0YWJhc2VCYWNraW5nU3Rv
cmU6Omludm9rZVNlbmRDaGFuZ2VzVG9EYXRhYmFzZSwgdGhpcykpOwotfQotCi12b2lkIENvb2tp
ZURhdGFiYXNlQmFja2luZ1N0b3JlOjppbnZva2VTZW5kQ2hhbmdlc1RvRGF0YWJhc2UoKQotewot
ICAgIEFTU0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fZGIuaXNPcGVuKCkp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJUaW1lciBGaXJlZCwgYnV0IGRhdGFiYXNlIGlzIGNsb3Nl
ZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxDb29raWVBY3Rpb24+
IGNoYW5nZWRDb29raWVzOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4
KTsKLSAgICAgICAgY2hhbmdlZENvb2tpZXMuc3dhcChtX2NoYW5nZWRDb29raWVzKTsKLSAgICAg
ICAgQVNTRVJUKG1fY2hhbmdlZENvb2tpZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBpZiAo
Y2hhbmdlZENvb2tpZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENvb2tpZUxvZygiQ29va2llQmFj
a2luZ1N0b3JlIC0gVGltZXIgZmlyZWQsIGJ1dCBubyBjb29raWVzIGluIGNoYW5nZWxpc3QiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBDb29raWVMb2coIkNvb2tpZUJhY2tpbmdTdG9y
ZSAtIFRpbWVyIGZpcmVkLCBzZW5kaW5nIGNoYW5nZXMgdG8gZGF0YWJhc2UuIFdlIGhhdmUgJWQg
Y2hhbmdlcyIsIGNoYW5nZWRDb29raWVzLnNpemUoKSk7Ci0gICAgU1FMaXRlVHJhbnNhY3Rpb24g
dHJhbnNhY3Rpb24obV9kYiwgZmFsc2UpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0KLSAg
ICAvLyBJdGVyYXRlIHRocm91Z2ggZXZlcnkgZWxlbWVudCBpbiB0aGUgY2hhbmdlIGxpc3QgdG8g
bWFrZSBjYWxscwotICAgIC8vIElmIGVycm9yIG9jY3VycywgaWdub3JlIGl0IGFuZCBjb250aW51
ZSB0byB0aGUgbmV4dCBzdGF0ZW1lbnQKLSAgICBzaXplX3Qgc2l6ZU9mQ2hhbmdlID0gY2hhbmdl
ZENvb2tpZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZU9mQ2hhbmdl
OyBpKyspIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50KiBtX3N0YXRlbWVudDsKLSAgICAgICAg
Y29uc3QgUmVmUHRyPFBhcnNlZENvb2tpZT4gY29va2llID0gY2hhbmdlZENvb2tpZXNbaV0uZmly
c3Q7Ci0gICAgICAgIFVwZGF0ZVBhcmFtZXRlciBhY3Rpb24gPSBjaGFuZ2VkQ29va2llc1tpXS5z
ZWNvbmQ7Ci0KLSAgICAgICAgaWYgKGFjdGlvbiA9PSBEZWxldGUpIHsKLSAgICAgICAgICAgIG1f
c3RhdGVtZW50ID0gbV9kZWxldGVTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICBDb29raWVMb2coIkNv
b2tpZUJhY2tpbmdTdG9yZSAtIGRlbGV0aW5nIGNvb2tpZSAlcy4iLCBjb29raWUudG9TdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAgICAgICAgLy8gQmluZHMgYWxsIHRoZSB2YWx1ZXMK
LSAgICAgICAgICAgIGlmIChtX3N0YXRlbWVudC0+YmluZFRleHQoMSwgY29va2llLT5uYW1lKCkp
IHx8IG1fc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBjb29raWUtPmRvbWFpbigpKQotICAgICAgICAg
ICAgICAgIHx8IG1fc3RhdGVtZW50LT5iaW5kVGV4dCgzLCBjb29raWUtPnBhdGgoKSkgfHwgbV9z
dGF0ZW1lbnQtPmJpbmRUZXh0KDQsIGNvb2tpZS0+cHJvdG9jb2woKSkpIHsKLSAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkNhbm5vdCBiaW5kIGNvb2tpZSBkYXRhIHRvIGRlbGV0ZSIpOwotICAg
ICAgICAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIEVycm9yIE1lc3NhZ2U6ICVzIiwgbV9kYi5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoYWN0aW9uID09IFVwZGF0ZSkgewotICAgICAgICAgICAgICAgIENv
b2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0gdXBkYXRpbmcgY29va2llICVzLiIsIGNvb2tp
ZS0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlbWVu
dCA9IG1fdXBkYXRlU3RhdGVtZW50OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBDb29raWVMb2coIkNvb2tpZUJhY2tpbmdTdG9yZSAtIGluc2VydGluZyBjb29raWUgJXMu
IiwgY29va2llLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIG1f
c3RhdGVtZW50ID0gbV9pbnNlcnRTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIEJpbmRzIGFsbCB0aGUgdmFsdWVzCi0gICAgICAgICAgICBpZiAobV9zdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIGNvb2tpZS0+bmFtZSgpKSB8fCBtX3N0YXRlbWVudC0+YmluZFRleHQoMiwg
Y29va2llLT52YWx1ZSgpKQotICAgICAgICAgICAgICAgIHx8IG1fc3RhdGVtZW50LT5iaW5kVGV4
dCgzLCBjb29raWUtPmRvbWFpbigpKSB8fCBtX3N0YXRlbWVudC0+YmluZFRleHQoNCwgY29va2ll
LT5wYXRoKCkpCi0gICAgICAgICAgICAgICAgfHwgbV9zdGF0ZW1lbnQtPmJpbmREb3VibGUoNSwg
Y29va2llLT5leHBpcnkoKSkgfHwgbV9zdGF0ZW1lbnQtPmJpbmREb3VibGUoNiwgY29va2llLT5s
YXN0QWNjZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB8fCBtX3N0YXRlbWVudC0+YmluZEludDY0
KDcsIGNvb2tpZS0+aXNTZWN1cmUoKSkgfHwgbV9zdGF0ZW1lbnQtPmJpbmRJbnQ2NCg4LCBjb29r
aWUtPmlzSHR0cE9ubHkoKSkKLSAgICAgICAgICAgICAgICB8fCBtX3N0YXRlbWVudC0+YmluZERv
dWJsZSg5LCBjb29raWUtPmNyZWF0aW9uVGltZSgpKSB8fCBtX3N0YXRlbWVudC0+YmluZFRleHQo
MTAsIGNvb2tpZS0+cHJvdG9jb2woKSkpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNh
bm5vdCBiaW5kIGNvb2tpZSBkYXRhIHRvIHNhdmUiKTsKLSAgICAgICAgICAgICAgICBMT0dfRVJS
T1IoIlNRTGl0ZSBFcnJvciBNZXNzYWdlOiAlcyIsIG1fZGIubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHJjID0gbV9zdGF0
ZW1lbnQtPnN0ZXAoKTsKLSAgICAgICAgbV9zdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgICAgIGlm
IChyYyAhPSBTUUxSZXN1bHRPayAmJiByYyAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIkNhbm5vdCBtYWtlIGNhbGwgdG8gdGhlIGRhdGFiYXNlIik7Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoIlNRTGl0ZSBFcnJvciBNZXNzYWdlOiAlcyIsIG1fZGIubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKLSAg
ICBDb29raWVMb2coIkNvb2tpZUJhY2tpbmdTdG9yZSAtIHRyYW5zYWN0aW9uIGNvbXBsZXRlIik7
Ci19Ci0KLXZvaWQgQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6OmFkZFRvQ2hhbmdlUXVldWUo
Y29uc3QgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IGNoYW5nZWRDb29raWUsIFVwZGF0ZVBhcmFt
ZXRlciBhY3Rpb25QYXJhbSkKLXsKLSAgICBBU1NFUlQoIWNoYW5nZWRDb29raWUtPmlzU2Vzc2lv
bigpKTsKLSAgICBDb29raWVBY3Rpb24gYWN0aW9uKGNoYW5nZWRDb29raWUsIGFjdGlvblBhcmFt
KTsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7Ci0gICAgICAgIG1f
Y2hhbmdlZENvb2tpZXMuYXBwZW5kKGFjdGlvbik7Ci0gICAgICAgIENvb2tpZUxvZygiQ29va2ll
QmFja2luZ1N0b3JlIC0gbV9jaGFuZ2VkY29va2llcyBoYXMgJWQuIiwgbV9jaGFuZ2VkQ29va2ll
cy5zaXplKCkpOwotICAgIH0KLSAgICBzZW5kQ2hhbmdlc1RvRGF0YWJhc2Uoc19kYXRhYmFzZVRp
bWVySW50ZXJ2YWwpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlL0Nv
b2tpZURhdGFiYXNlQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZS9Db29raWVEYXRh
YmFzZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlL0Nvb2tpZURhdGFi
YXNlQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTExICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEBwbGV5by5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3Jl
X2gKLSNkZWZpbmUgQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmVfaAotCi0jaW5jbHVkZSAiU1FM
aXRlRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJy
eVBsYXRmb3JtTWVzc2FnZUNsaWVudC5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVRp
bWVyLmg+Ci0jaW5jbHVkZSA8R2VuZXJpY1RpbWVyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8VGhyZWFk
VGltZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgUGFyc2VkQ29va2llOwotCi1jbGFzcyBDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZSA6
IHB1YmxpYyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TWVzc2FnZUNsaWVudCAsIHB1YmxpYyBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6VGhyZWFkVGltZXJDbGllbnQgewotcHVibGljOgotICAgIHN0YXRp
YyBDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZSogY3JlYXRlKCkgeyByZXR1cm4gbmV3IENvb2tp
ZURhdGFiYXNlQmFja2luZ1N0b3JlOyB9Ci0KLSAgICB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBj
b29raWVKYXIpOwotCi0gICAgdm9pZCBpbnNlcnQoY29uc3QgUGFzc1JlZlB0cjxQYXJzZWRDb29r
aWU+KTsKLSAgICB2b2lkIHVwZGF0ZShjb25zdCBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4pOwot
ICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPik7Ci0KLSAgICB2
b2lkIHJlbW92ZUFsbCgpOwotCi0gICAgLy8gSWYgYSBsaW1pdCBpcyBub3Qgc2V0LCB0aGUgbWV0
aG9kIHdpbGwgcmV0dXJuIGFsbCBjb29raWVzIGluIHRoZSBkYXRhYmFzZQotICAgIHZvaWQgZ2V0
Q29va2llc0Zyb21EYXRhYmFzZShWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPiYgc3RhY2tP
ZkNvb2tpZXMsIHVuc2lnbmVkIGxpbWl0ID0gMCk7Ci0KLSAgICB2b2lkIG9wZW5BbmRMb2FkRGF0
YWJhc2VTeW5jaHJvbm91c2x5KGNvbnN0IFN0cmluZyYgY29va2llSmFyKTsKLSAgICB2b2lkIHNl
bmRDaGFuZ2VzVG9EYXRhYmFzZVN5bmNocm9ub3VzbHkoKTsKLQotICAgIC8vIE1lc3NhZ2VDbGll
bnQgbWV0aG9kcwotICAgIHZpcnR1YWwgdm9pZCBvblRocmVhZEZpbmlzaGVkKCk7Ci0KLSAgICAv
LyBUaHJlYWRUaW1lckNsaWVudCBtZXRob2RzCi0gICAgdmlydHVhbCBib29sIHdpbGxGaXJlVGlt
ZXIoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHVsc2VDb2RlKCkgY29u
c3QgeyByZXR1cm4gcHVsc2VDb2RlKCk7IH0KLSAgICB2aXJ0dWFsIGludCBnZXRDb25uZWN0aW9u
SWQoKSBjb25zdCB7IHJldHVybiBjb25uZWN0aW9uSWQoKTsgfQotICAgIHZpcnR1YWwgaW50IGRl
ZmF1bHRUaW1lclByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gdGhyZWFkUHJpb3JpdHkoKTsgfQot
Ci1wcml2YXRlOgotICAgIGVudW0gVXBkYXRlUGFyYW1ldGVyIHsKLSAgICAgICAgSW5zZXJ0LAot
ICAgICAgICBVcGRhdGUsCi0gICAgICAgIERlbGV0ZSwKLSAgICB9OwotCi0gICAgQ29va2llRGF0
YWJhc2VCYWNraW5nU3RvcmUoKTsKLSAgICB+Q29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUoKTsK
LQotICAgIHZvaWQgYWRkVG9DaGFuZ2VRdWV1ZShjb25zdCBQYXNzUmVmUHRyPFBhcnNlZENvb2tp
ZT4gY2hhbmdlZENvb2tpZSwgVXBkYXRlUGFyYW1ldGVyIGFjdGlvblBhcmFtKTsKLSAgICB2b2lk
IHNlbmRDaGFuZ2VzVG9EYXRhYmFzZShpbnQgaW50ZXJ2YWwpOwotICAgIHZvaWQgc2VuZENoYW5n
ZXNUb0RhdGFiYXNlVGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBpbnZva2VPcGVuKGNvbnN0IFN0
cmluZyYgY29va2llSmFyKTsKLSAgICB2b2lkIGludm9rZVJlbW92ZUFsbCgpOwotICAgIFZlY3Rv
cjxSZWZQdHI8UGFyc2VkQ29va2llPiA+KiBpbnZva2VHZXRDb29raWVzV2l0aExpbWl0KHVuc2ln
bmVkIGxpbWl0KTsKLSAgICB2b2lkIGludm9rZVNlbmRDaGFuZ2VzVG9EYXRhYmFzZSgpOwotCi0g
ICAgdm9pZCBjbG9zZSgpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgUmVmUHRyPFBh
cnNlZENvb2tpZT4sIFVwZGF0ZVBhcmFtZXRlcj4gQ29va2llQWN0aW9uOwotICAgIFZlY3RvcjxD
b29raWVBY3Rpb24+IG1fY2hhbmdlZENvb2tpZXM7Ci0gICAgTXV0ZXggbV9tdXRleDsKLQotICAg
IFN0cmluZyBtX3RhYmxlTmFtZTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VGltZXI8Q29v
a2llRGF0YWJhc2VCYWNraW5nU3RvcmU+IG1fZGJUaW1lcjsKLSAgICBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R2VuZXJpY1RpbWVyQ2xpZW50KiBtX2RiVGltZXJDbGllbnQ7Ci0gICAgU1FMaXRlRGF0
YWJhc2UgbV9kYjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgKm1faW5zZXJ0U3RhdGVtZW50OwotICAg
IFNRTGl0ZVN0YXRlbWVudCAqbV91cGRhdGVTdGF0ZW1lbnQ7Ci0gICAgU1FMaXRlU3RhdGVtZW50
ICptX2RlbGV0ZVN0YXRlbWVudDsKLX07Ci0KLUNvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlJiBj
b29raWVCYWNraW5nU3RvcmUoKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAx
NjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFn
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IEp1bGllbiBDaGFmZnJhaXggPGp1bGllbi5jaGFmZnJhaXhAZ21haWwu
Y29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2RlZmluZSBFTkFCTEVfQ09PS0lF
X0RFQlVHIDAKLSNkZWZpbmUgRU5BQkxFX0NPT0tJRV9TVVBFUl9WRVJCT1NFX0RFQlVHIDAKLSNk
ZWZpbmUgRU5BQkxFX0NPT0tJRV9MSU1JVF9ERUJVRyAwCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDb29raWVNYW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJDb29raWVEYXRhYmFzZUJh
Y2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIkNvb2tpZVBhcnNlci5oIgotI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIK
LSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1FeGVjdXRhYmxlTWVzc2FnZS5oPgotI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU1lc3NhZ2VDbGllbnQuaD4KLSNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1OYXZpZ2F0b3JIYW5kbGVyLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxuZXR3b3JrL0RvbWFpblRvb2xzLmg+Ci0jaW5jbHVk
ZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRV9DT09LSUVfREVCVUcK
LSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KLSNlbmRpZgotCi0jaWYgRU5BQkxF
X0NPT0tJRV9TVVBFUl9WRVJCT1NFX0RFQlVHCi0jZGVmaW5lIENvb2tpZUxvZyhmb3JtYXQsIC4u
LikgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
TG9nTGV2ZWxJbmZvLCBmb3JtYXQsICMjIF9fVkFfQVJHU19fKQotI2Vsc2UKLSNkZWZpbmUgQ29v
a2llTG9nKGZvcm1hdCwgLi4uKQotI2VuZGlmIC8vIEVOQUJMRV9DT09LSUVfU1VQRVJfVkVSQk9T
RV9ERUJVRwotCi0jaWYgRU5BQkxFX0NPT0tJRV9MSU1JVF9ERUJVRwotI2RlZmluZSBDb29raWVM
aW1pdExvZyhmb3JtYXQsIC4uLikgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCBmb3JtYXQsICMjIF9fVkFfQVJHU19fKQot
I2Vsc2UKLSNkZWZpbmUgQ29va2llTGltaXRMb2coZm9ybWF0LCAuLi4pCi0jZW5kaWYgLy8gRU5B
QkxFX0NPT0tJRV9MSU1JVF9ERUJVRwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIE1heCBj
b3VudCBjb25zdGFudHMuCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc19nbG9iYWxNYXhDb29raWVD
b3VudCA9IDYwMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgc19tYXhDb29raWVDb3VudFBlckhv
c3QgPSA2MDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2Nvb2tpZXNUb0RlbGV0ZVdoZW5MaW1p
dFJlYWNoZWQgPSA2MDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2RlbGF5VG9TdGFydENvb2tp
ZUNsZWFudXAgPSAxMDsKLQotQ29va2llTWFuYWdlciYgY29va2llTWFuYWdlcigpCi17Ci0gICAg
c3RhdGljIENvb2tpZU1hbmFnZXIgKmNvb2tpZU1hbmFnZXIgPSAwOwotICAgIGlmICghY29va2ll
TWFuYWdlcikgewotICAgICAgICAvLyBPcGVuIHRoZSBjb29raWVKYXIgbm93IGFuZCBnZXQgdGhl
IGJhY2tpbmcgc3RvcmUgY29va2llcyB0byBmaWxsIHRoZSBtYW5hZ2VyLgotICAgICAgICBjb29r
aWVNYW5hZ2VyID0gbmV3IENvb2tpZU1hbmFnZXI7Ci0gICAgICAgIGNvb2tpZU1hbmFnZXItPm1f
Y29va2llQmFja2luZ1N0b3JlLT5vcGVuKGNvb2tpZU1hbmFnZXItPmNvb2tpZUphcigpKTsKLSAg
ICB9Ci0gICAgcmV0dXJuICpjb29raWVNYW5hZ2VyOwotfQotCi1Db29raWVNYW5hZ2VyOjpDb29r
aWVNYW5hZ2VyKCkKLSAgICA6IG1fY291bnQoMCkKLSAgICAsIG1fcHJpdmF0ZU1vZGUoZmFsc2Up
Ci0gICAgLCBtX3Nob3VsZER1bXBBbGxDb29raWVzKGZhbHNlKQotICAgICwgbV9zeW5jZWRXaXRo
RGF0YWJhc2UoZmFsc2UpCi0gICAgLCBtX2Nvb2tpZUphckZpbGVOYW1lKHBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPmFw
cGxpY2F0aW9uRGF0YURpcmVjdG9yeSgpLmNfc3RyKCksICIvY29va2llQ29sbGVjdGlvbi5kYiIp
KQotICAgICwgbV9wb2xpY3koQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5cykKLSAgICAs
IG1fY29va2llQmFja2luZ1N0b3JlKENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpjcmVhdGUo
KSkKLSAgICAsIG1fbGltaXRUaW1lcih0aGlzLCAmQ29va2llTWFuYWdlcjo6Y29va2llTGltaXRD
bGVhblVwKQotewotfQotCi1Db29raWVNYW5hZ2VyOjp+Q29va2llTWFuYWdlcigpCi17Ci0gICAg
cmVtb3ZlQWxsQ29va2llcyhEb05vdFJlbW92ZUZyb21CYWNraW5nU3RvcmUpOwotICAgIC8vIEZJ
WE1FOiBtX21hbmFnZXJNYXAgYW5kIHRoZSB0b3AgbGF5ZXIgcHJvdG9jb2xNYXBzIGFyZSBub3Qg
cHJvcGVybHkgZGVsZXRlZC4KLSAgICAvLyBEbyBub3QgZGVsZXRlIGFueSBwcm90b2NvbCBtYXBz
IHRvIGF2b2lkIGRvdWJsZS1kZWxldGlvbiBvZiB0aGUgbWFwcyB0aGF0IGFyZQotICAgIC8vIGJl
aW5nIHVzZWQgZm9yIGJvdGggc2VjdXJlIGFuZCBub24tc2VjdXJlIHByb3RvY29sczsgdGhpcyBs
ZWFrIGlzIE9LIHNpbmNlCi0gICAgLy8gdGhlcmUncyBub3RoaW5nIGltcG9ydGFudCBpbiB0aGUg
aGFzaHRhYmxlIGRlc3RydWN0b3JzLCBhbmQgdGhlIG1lbW9yeSB3aWxsIGJlIHJlY2xhaW1lZCBv
biBleGl0Ci0KLSAgICAvLyBGSVhNRTogQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUgaXMgbm90
IGRlbGV0ZWQsIG9ubHkgZmx1c2hlZAotICAgIC8vIChjdXJyZW50bHkgdGhlIGRlc3RydWN0b3Ig
aXMgbmV2ZXIgY2FsbGVkIHNpbmNlIHRoaXMgY2xhc3MgaXMgYQotICAgIC8vIHNpbmdsZXRvbjsg
b24gZXhpdCwgdGhlIGRiIGlzIGZsdXNoZWQgbWFudWFsbHkuIFRoaXMgY2FsbCBpcyBvbmx5IGhl
cmUKLSAgICAvLyBhcyBhIGZhbGxiYWNrIGluIGNhc2UgdGhpcyBjbGFzcyBpcyBtYWRlIGEgbm9u
LXNpbmdsZXRvbi4KLSAgICBtX2Nvb2tpZUJhY2tpbmdTdG9yZS0+c2VuZENoYW5nZXNUb0RhdGFi
YXNlU3luY2hyb25vdXNseSgpOwotfQotCi0vLyBTb3J0aW5nIGxvZ2ljIGlzIGJhc2VkIG9uIENv
b2tpZSBTcGVjIFJGQzYyNjUsIHNlY3Rpb24gNS40LjIKLXN0YXRpYyBib29sIGNvb2tpZVNvcnRl
cihQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gYSwgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IGIp
Ci17Ci0gICAgaWYgKGEtPnBhdGgoKS5sZW5ndGgoKSA9PSBiLT5wYXRoKCkubGVuZ3RoKCkpCi0g
ICAgICAgIHJldHVybiBhLT5jcmVhdGlvblRpbWUoKSA8IGItPmNyZWF0aW9uVGltZSgpOwotICAg
IHJldHVybiBhLT5wYXRoKCkubGVuZ3RoKCkgPiBiLT5wYXRoKCkubGVuZ3RoKCk7Ci19Ci0KLS8v
IFJldHVybiB3aGV0aGVyIHdlIHNob3VsZCBpZ25vcmUgdGhlIHNjaGVtZQotc3RhdGljIGJvb2wg
c2hvdWxkSWdub3JlU2NoZW1lKGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCi17Ci0gICAgLy8gV2Ug
d2FudCB0byBpZ25vcmUgZmlsZSBhbmQgbG9jYWwgc2NoZW1lcwotICAgIHJldHVybiBwcm90b2Nv
bCA9PSAiZmlsZSIgfHwgcHJvdG9jb2wgPT0gImxvY2FsIjsKLX0KLQotdm9pZCBDb29raWVNYW5h
Z2VyOjpzZXRDb29raWVzKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBDb29r
aWVGaWx0ZXIgZmlsdGVyKQotewotICAgIC8vIElmIHRoZSBkYXRhYmFzZSBoYXNuJ3QgYmVlbiBz
eW5jLWVkIGF0IHRoaXMgcG9pbnQsIGZvcmNlIGEgc3luYyBsb2FkCi0gICAgaWYgKCFtX3N5bmNl
ZFdpdGhEYXRhYmFzZSAmJiAhbV9wcml2YXRlTW9kZSkKLSAgICAgICAgbV9jb29raWVCYWNraW5n
U3RvcmUtPm9wZW5BbmRMb2FkRGF0YWJhc2VTeW5jaHJvbm91c2x5KGNvb2tpZUphcigpKTsKLQot
ICAgIENvb2tpZUxvZygiQ29va2llTWFuYWdlciAtIFNldHRpbmcgY29va2llcyIpOwotICAgIENv
b2tpZVBhcnNlciBwYXJzZXIodXJsKTsKLSAgICBWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4g
PiBjb29raWVzID0gcGFyc2VyLnBhcnNlKHZhbHVlKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY29va2llcy5zaXplKCk7ICsraSkgewotICAgICAgICBCYWNraW5nU3RvcmVSZW1vdmFs
UG9saWN5IHRyZWF0bWVudCA9IG1fcHJpdmF0ZU1vZGUgPyBEb05vdFJlbW92ZUZyb21CYWNraW5n
U3RvcmUgOiBSZW1vdmVGcm9tQmFja2luZ1N0b3JlOwotICAgICAgICBjaGVja0FuZFRyZWF0Q29v
a2llKGNvb2tpZXNbaV0sIHRyZWF0bWVudCwgZmlsdGVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29v
a2llTWFuYWdlcjo6c2V0Q29va2llcyhjb25zdCBVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGNvb2tpZXMsIENvb2tpZUZpbHRlciBmaWx0ZXIpCi17Ci0gICAgLy8gSWYgdGhlIGRhdGFi
YXNlIGhhc24ndCBiZWVuIHN5bmMtZWQgYXQgdGhpcyBwb2ludCwgZm9yY2UgYSBzeW5jIGxvYWQK
LSAgICBpZiAoIW1fc3luY2VkV2l0aERhdGFiYXNlICYmICFtX3ByaXZhdGVNb2RlKQotICAgICAg
ICBtX2Nvb2tpZUJhY2tpbmdTdG9yZS0+b3BlbkFuZExvYWREYXRhYmFzZVN5bmNocm9ub3VzbHko
Y29va2llSmFyKCkpOwotCi0gICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gU2V0dGluZyBj
b29raWVzIik7Ci0gICAgQ29va2llUGFyc2VyIHBhcnNlcih1cmwpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29va2llcy5zaXplKCk7ICsraSkgewotICAgICAgICBCYWNraW5nU3RvcmVS
ZW1vdmFsUG9saWN5IHRyZWF0bWVudCA9IG1fcHJpdmF0ZU1vZGUgPyBEb05vdFJlbW92ZUZyb21C
YWNraW5nU3RvcmUgOiBSZW1vdmVGcm9tQmFja2luZ1N0b3JlOwotICAgICAgICBpZiAoUmVmUHRy
PFBhcnNlZENvb2tpZT4gcGFyc2VkQ29va2llID0gcGFyc2VyLnBhcnNlT25lQ29va2llKGNvb2tp
ZXNbaV0pKQotICAgICAgICAgICAgY2hlY2tBbmRUcmVhdENvb2tpZShwYXJzZWRDb29raWUsIHRy
ZWF0bWVudCwgZmlsdGVyKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBDb29raWVNYW5hZ2VyOjpnZXRD
b29raWUoY29uc3QgVVJMJiB1cmwsIENvb2tpZUZpbHRlciBmaWx0ZXIpIGNvbnN0Ci17Ci0gICAg
Ly8gSWYgdGhlIGRhdGFiYXNlIGhhc24ndCBiZWVuIHN5bmMtZWQgYXQgdGhpcyBwb2ludCwgZm9y
Y2UgYSBzeW5jIGxvYWQKLSAgICBpZiAoIW1fc3luY2VkV2l0aERhdGFiYXNlICYmICFtX3ByaXZh
dGVNb2RlKQotICAgICAgICBtX2Nvb2tpZUJhY2tpbmdTdG9yZS0+b3BlbkFuZExvYWREYXRhYmFz
ZVN5bmNocm9ub3VzbHkoY29va2llSmFyKCkpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxQYXJzZWRD
b29raWU+ID4gcmF3Q29va2llczsKLSAgICByYXdDb29raWVzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoc19tYXhDb29raWVDb3VudFBlckhvc3QpOwotCi0gICAgLy8gUmV0cmlldmUgY29va2llcyBy
ZWxhdGVkIHRvIHRoaXMgdXJsCi0gICAgZ2V0UmF3Q29va2llcyhyYXdDb29raWVzLCB1cmwsIGZp
bHRlcik7Ci0KLSAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSB0aGVyZSBhcmUgJWQgY29v
a2llcyBpbiByYXcgY29va2llc1xuIiwgcmF3Q29va2llcy5zaXplKCkpOwotCi0gICAgLy8gR2Vu
ZXJhdGUgdGhlIGNvb2tpZSBoZWFkZXIgc3RyaW5nIHVzaW5nIHRoZSByZXRyaWV2ZWQgY29va2ll
cwotICAgIFN0cmluZ0J1aWxkZXIgY29va2llU3RyaW5nQnVpbGRlcjsKLSAgICBjb29raWVTdHJp
bmdCdWlsZGVyLnJlc2VydmVDYXBhY2l0eSg1MTIpOwotICAgIHNpemVfdCBjb29raWVTaXplID0g
cmF3Q29va2llcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb29raWVTaXpl
OyBpKyspIHsKLSAgICAgICAgY29va2llU3RyaW5nQnVpbGRlci5hcHBlbmQocmF3Q29va2llc1tp
XS0+dG9OYW1lVmFsdWVQYWlyKCkpOwotICAgICAgICBpZiAoaSAhPSBjb29raWVTaXplLTEpCi0g
ICAgICAgICAgICBjb29raWVTdHJpbmdCdWlsZGVyLmFwcGVuZCgiOyAiKTsKLSAgICB9Ci0KLSAg
ICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBjb29raWVTdHJpbmcgaXMgLSAlc1xuIiwgY29v
a2llU3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJu
IGNvb2tpZVN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIENvb2tpZU1hbmFn
ZXI6OmdlbmVyYXRlSHRtbEZyYWdtZW50Rm9yQ29va2llcygpCi17Ci0gICAgLy8gSWYgdGhlIGRh
dGFiYXNlIGhhc24ndCBiZWVuIHN5bmMtZWQgYXQgdGhpcyBwb2ludCwgZm9yY2UgYSBzeW5jIGxv
YWQKLSAgICBpZiAoIW1fc3luY2VkV2l0aERhdGFiYXNlICYmICFtX3ByaXZhdGVNb2RlKQotICAg
ICAgICBtX2Nvb2tpZUJhY2tpbmdTdG9yZS0+b3BlbkFuZExvYWREYXRhYmFzZVN5bmNocm9ub3Vz
bHkoY29va2llSmFyKCkpOwotCi0gICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gZ2VuZXJh
dGVIdG1sRnJhZ21lbnRGb3JDb29raWVzXG4iKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8UGFyc2Vk
Q29va2llPiA+IGNvb2tpZUNhbmRpZGF0ZXM7Ci0gICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29v
a2llTWFwKj46Oml0ZXJhdG9yIGl0ID0gbV9tYW5hZ2VyTWFwLmJlZ2luKCk7IGl0ICE9IG1fbWFu
YWdlck1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5nZXRBbGxDaGlsZENvb2tp
ZXMoJmNvb2tpZUNhbmRpZGF0ZXMpOwotCi0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBSZWZQdHI8
UGFyc2VkQ29va2llPiBjb29raWUgPSAwOwotICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKCI8dGFi
bGUgc3R5bGU9XCJ3b3JkLXdyYXA6YnJlYWstd29yZFwiIGNlbGxTcGFjaW5nPVwiMFwiIGNlbGxQ
YWRkaW5nPVwiMFwiIGJvcmRlcj1cIjFcIj48dHI+PHRoPkRvbWFpbjwvdGg+PHRoPlBhdGg8L3Ro
Pjx0aD5Qcm90b2NvbDwvdGg+PHRoPk5hbWU8L3RoPjx0aD5WYWx1ZTwvdGg+PHRoPlNlY3VyZTwv
dGg+PHRoPkh0dHBPbmx5PC90aD48dGg+U2Vzc2lvbjwvdGg+PC90cj4iKSk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb29raWVDYW5kaWRhdGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGNvb2tpZSA9IGNvb2tpZUNhbmRpZGF0ZXNbaV07Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoU3Ry
aW5nKCI8dHI+PHRkIGFsaWduPVwiY2VudGVyXCI+IikpOwotICAgICAgICByZXN1bHQuYXBwZW5k
KGNvb2tpZS0+ZG9tYWluKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZygiPHRkIGFs
aWduPVwiY2VudGVyXCI+IikpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGNvb2tpZS0+cGF0aCgp
KTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmcoIjx0ZCBhbGlnbj1cImNlbnRlclwiPiIp
KTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChjb29raWUtPnByb3RvY29sKCkpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKFN0cmluZygiPHRkIGFsaWduPVwiY2VudGVyXCI+IikpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKGNvb2tpZS0+bmFtZSgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJp
bmcoIjx0ZCBhbGlnbj1cImNlbnRlclwiIHN0eWxlPSBcIndvcmQtYnJlYWs6YnJlYWstYWxsXCI+
IikpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGNvb2tpZS0+dmFsdWUoKSk7Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQoU3RyaW5nKCI8dGQgYWxpZ249XCJjZW50ZXJcIj4iKSk7Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQoU3RyaW5nKGNvb2tpZS0+aXNTZWN1cmUoKSA/ICJZZXMiIDogIk5vIikpOwot
ICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZygiPHRkIGFsaWduPVwiY2VudGVyXCI+IikpOwot
ICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZyhjb29raWUtPmlzSHR0cE9ubHkoKSA/ICJZZXMi
IDogIk5vIikpOwotICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZygiPHRkIGFsaWduPVwiY2Vu
dGVyXCI+IikpOwotICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZyhjb29raWUtPmlzU2Vzc2lv
bigpID8gIlllcyIgOiAiTm8iKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKCI8L3Rk
PjwvdHI+IikpOwotICAgIH0KLSAgICByZXN1bHQuYXBwZW5kKFN0cmluZygiPC90YWJsZT4iKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBDb29raWVNYW5hZ2VyOjpnZXRSYXdDb29r
aWVzKFZlY3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+ICZzdGFja09mQ29va2llcywgY29uc3Qg
VVJMJiByZXF1ZXN0VVJMLCBDb29raWVGaWx0ZXIgZmlsdGVyKSBjb25zdAotewotICAgIC8vIEZv
cmNlIGEgc3luYyBsb2FkIG9mIHRoZSBkYXRhYmFzZQotICAgIGlmICghbV9zeW5jZWRXaXRoRGF0
YWJhc2UgJiYgIW1fcHJpdmF0ZU1vZGUpCi0gICAgICAgIG1fY29va2llQmFja2luZ1N0b3JlLT5v
cGVuQW5kTG9hZERhdGFiYXNlU3luY2hyb25vdXNseShjb29raWVKYXIoKSk7Ci0KLSAgICBDb29r
aWVMb2coIkNvb2tpZU1hbmFnZXIgLSBnZXRSYXdDb29raWVzIC0gcHJvY2Vzc2luZyB1cmwgd2l0
aCBkb21haW4gLSAlcyAmIHByb3RvY29sOiAlcyAmIHBhdGg6ICVzXG4iLCByZXF1ZXN0VVJMLmhv
c3QoKS51dGY4KCkuZGF0YSgpLCByZXF1ZXN0VVJMLnByb3RvY29sKCkudXRmOCgpLmRhdGEoKSwg
cmVxdWVzdFVSTC5wYXRoKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBjb25zdCBib29sIGludmFs
aWRTY2hlbWUgPSBzaG91bGRJZ25vcmVTY2hlbWUocmVxdWVzdFVSTC5wcm90b2NvbCgpKTsKLSAg
ICBjb25zdCBib29sIHNwZWNpYWxDYXNlRm9yV2ViV29ya3MgPSBpbnZhbGlkU2NoZW1lICYmIG1f
c2hvdWxkRHVtcEFsbENvb2tpZXM7Ci0gICAgY29uc3QgYm9vbCBpc0Nvbm5lY3Rpb25TZWN1cmUg
PSByZXF1ZXN0VVJMLnByb3RvY29sSXMoImh0dHBzIikgfHwgcmVxdWVzdFVSTC5wcm90b2NvbElz
KCJ3c3MiKSB8fCBzcGVjaWFsQ2FzZUZvcldlYldvcmtzOwotCi0gICAgVmVjdG9yPFJlZlB0cjxQ
YXJzZWRDb29raWU+ID4gY29va2llQ2FuZGlkYXRlczsKLSAgICBWZWN0b3I8Q29va2llTWFwKj4g
cHJvdG9jb2xzVG9TZWFyY2g7Ci0KLSAgICAvLyBTcGVjaWFsIENhc2U6IElmIGEgc2VydmVyIHNl
dHMgYSAic2VjdXJlIiBjb29raWUgb3ZlciBhIG5vbi1zZWN1cmUgY2hhbm5lbCBhbmQgdHJpZXMg
dG8gYWNjZXNzIHRoZSBjb29raWUKLSAgICAvLyBvdmVyIGEgc2VjdXJlIGNoYW5uZWwsIGl0IHdp
bGwgbm90IHN1Y2NlZWQgYmVjYXVzZSB0aGUgc2VjdXJlIHByb3RvY29sIGlzbid0IG1hcHBlZCB0
byB0aGUgaW5zZWN1cmUgcHJvdG9jb2wgeWV0LgotICAgIC8vIFNldCB0aGUgbWFwIHRvIHRoZSBu
b24tc2VjdXJlIHZlcnNpb24sIHNvIGl0J2xsIHNlYXJjaCB0aGUgbWFwcGluZyBmb3IgYSBzZWN1
cmUgY29va2llLgotICAgIENvb2tpZU1hcCogdGFyZ2V0TWFwID0gbV9tYW5hZ2VyTWFwLmdldChy
ZXF1ZXN0VVJMLnByb3RvY29sKCkpOwotICAgIGlmICghdGFyZ2V0TWFwICYmIGlzQ29ubmVjdGlv
blNlY3VyZSkgewotICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBzcGVjaWFsIGNh
c2U6IHNlY3VyZSBwcm90b2NvbCBhcmUgbm90IGxpbmtlZCB5ZXQuIik7Ci0gICAgICAgIGlmIChy
ZXF1ZXN0VVJMLnByb3RvY29sSXMoImh0dHBzIikpCi0gICAgICAgICAgICB0YXJnZXRNYXAgPSBt
X21hbmFnZXJNYXAuZ2V0KCJodHRwIik7Ci0gICAgICAgIGVsc2UgaWYgKHJlcXVlc3RVUkwucHJv
dG9jb2xJcygid3NzIikpCi0gICAgICAgICAgICB0YXJnZXRNYXAgPSBtX21hbmFnZXJNYXAuZ2V0
KCJ3cyIpOwotICAgIH0KLQotICAgIC8vIERlY2lkZSB3aGljaCBzY2hlbWUgdHJlZSB3ZSBzaG91
bGQgbG9vayBhdC4KLSAgICAvLyBSZXR1cm4gb24gaW52YWxpZCBzY2hlbWVzLiBjb29raWVzIGFy
ZSBjdXJyZW50bHkgZGlzYWJsZWQgb24gZmlsZSBhbmQgbG9jYWwuCi0gICAgLy8gV2Ugb25seSB3
YW50IHRvIGVuYWJsZSB0aGVtIGZvciBXZWJXb3JrcyB0aGF0IGVuYWJsZWQgYSBzcGVjaWFsIGZs
YWcuCi0gICAgaWYgKHNwZWNpYWxDYXNlRm9yV2ViV29ya3MpCi0gICAgICAgIGNvcHlWYWx1ZXNU
b1ZlY3RvcihtX21hbmFnZXJNYXAsIHByb3RvY29sc1RvU2VhcmNoKTsKLSAgICBlbHNlIGlmIChp
bnZhbGlkU2NoZW1lKQotICAgICAgICByZXR1cm47Ci0gICAgZWxzZSB7Ci0gICAgICAgIHByb3Rv
Y29sc1RvU2VhcmNoLmFwcGVuZCh0YXJnZXRNYXApOwotICAgICAgICAvLyBGSVhNRTogdGhpcyBp
cyBhIGhhY2sgZm9yIHdlYndvcmtzIGFwcHM7IFJGQyA2MjY1IHNheXMgIkNvb2tpZXMgZG8gbm90
IHByb3ZpZGUgaXNvbGF0aW9uIGJ5IHNjaGVtZSIKLSAgICAgICAgLy8gc28gd2Ugc2hvdWxkIG5v
dCBiZSBjaGVja2luZyBwcm90b2NvbHMgYXQgYWxsLiBTZWUgUFIgMTM1NTk1Ci0gICAgICAgIGlm
IChtX3Nob3VsZER1bXBBbGxDb29raWVzKSB7Ci0gICAgICAgICAgICBwcm90b2NvbHNUb1NlYXJj
aC5hcHBlbmQobV9tYW5hZ2VyTWFwLmdldCgiZmlsZSIpKTsKLSAgICAgICAgICAgIHByb3RvY29s
c1RvU2VhcmNoLmFwcGVuZChtX21hbmFnZXJNYXAuZ2V0KCJsb2NhbCIpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFZlY3RvcjxTdHJpbmc+IGRlbGltaXRlZEhvc3Q7Ci0KLSAgICAvLyBJUCBh
ZGRyZXNzZXMgYXJlIHN0b3JlZCBpbiBhIHBhcnRpY3VsYXIgZm9ybWF0IChkdWUgdG8gaXB2Niku
IFJlZHVjZSB0aGUgaXAgYWRkcmVzcyBzbyB3ZSBjYW4gbWF0Y2gKLSAgICAvLyBpdCB3aXRoIHRo
ZSBvbmUgaW4gbWVtb3J5LgotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgY2Fub25p
Y2FsSVAgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Z2V0Q2Fub25pY2FsSVBGb3JtYXQocmVxdWVz
dFVSTC5ob3N0KCkpOwotICAgIGlmICghY2Fub25pY2FsSVAuZW1wdHkoKSkKLSAgICAgICAgZGVs
aW1pdGVkSG9zdC5hcHBlbmQoU3RyaW5nKGNhbm9uaWNhbElQLmNfc3RyKCkpKTsKLSAgICBlbHNl
Ci0gICAgICAgIHJlcXVlc3RVUkwuaG9zdCgpLmxvd2VyKCkuc3BsaXQoIi4iLCB0cnVlLCBkZWxp
bWl0ZWRIb3N0KTsKLQotICAgIC8vIEdvIHRocm91Z2ggYWxsIHRoZSBwcm90b2NvbCB0cmVlcyB0
aGF0IHdlIG5lZWQgdG8gc2VhcmNoIGZvcgotICAgIC8vIGFuZCBnZXQgYWxsIGNvb2tpZXMgdGhh
dCBhcmUgdmFsaWQgZm9yIHRoaXMgZG9tYWluCi0gICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBw
cm90b2NvbHNUb1NlYXJjaC5zaXplKCk7IGsrKykgewotICAgICAgICBDb29raWVNYXAqIGN1cnJl
bnRNYXAgPSBwcm90b2NvbHNUb1NlYXJjaFtrXTsKLQotICAgICAgICAvLyBpZiBubyBjb29raWVz
IGV4aXN0IGZvciB0aGlzIHByb3RvY29sLCBicmVhayByaWdodCBhd2F5Ci0gICAgICAgIGlmICgh
Y3VycmVudE1hcCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIENvb2tpZUxvZygi
Q29va2llTWFuYWdlciAtIGxvb2tpbmcgYXQgcHJvdG9jb2wgbWFwICVzIFxuIiwgY3VycmVudE1h
cC0+Z2V0TmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBm
b3IgbG9jYWwgYW5kIGZpbGVzIC0gYmVjYXVzZSBXZWJBcHBzIGV4cGVjdCB0byBnZXQgQUxMIGNv
b2tpZXMgZnJvbSB0aGUgYmFja2luZy1zdG9yZSBvbiBsb2NhbCBwcm90b2NvbAotICAgICAgICBp
ZiAoc3BlY2lhbENhc2VGb3JXZWJXb3JrcykgewotICAgICAgICAgICAgQ29va2llTG9nKCJDb29r
aWVNYW5hZ2VyIC0gc3BlY2lhbCBjYXNlIGZpbmQgaW4gcHJvdG9jb2wgbWFwIC0gJXNcbiIsIGN1
cnJlbnRNYXAtPmdldE5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGN1cnJlbnRN
YXAtPmdldEFsbENoaWxkQ29va2llcygmY29va2llQ2FuZGlkYXRlcyk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBHZXQgY29va2llcyBmcm9tIHRoZSBudWxsIGRvbWFpbiBtYXAK
LSAgICAgICAgICAgIGN1cnJlbnRNYXAtPmdldEFsbENvb2tpZXMoJmNvb2tpZUNhbmRpZGF0ZXMp
OwotCi0gICAgICAgICAgICAvLyBHZXQgY29va2llcyBmcm9tIEhvc3Qtb25seSBjb29raWVzCi0g
ICAgICAgICAgICBpZiAoY2Fub25pY2FsSVAuZW1wdHkoKSkgewotICAgICAgICAgICAgICAgIENv
b2tpZUxvZygiQ29va2llTWFuYWdlciAtIGxvb2tpbmcgZm9yIGhvc3Qtb25seSBjb29raWVzIGZv
ciBob3N0IC0gJXMiLCByZXF1ZXN0VVJMLmhvc3QoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgICAgICBDb29raWVNYXAqIGhvc3RNYXAgPSBjdXJyZW50TWFwLT5nZXRTdWJkb21haW5NYXAo
cmVxdWVzdFVSTC5ob3N0KCkpOwotICAgICAgICAgICAgICAgIGlmIChob3N0TWFwKQotICAgICAg
ICAgICAgICAgICAgICBob3N0TWFwLT5nZXRBbGxDb29raWVzKCZjb29raWVDYW5kaWRhdGVzKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gR2V0IGNvb2tpZXMgZnJvbSB0aGUgdmFs
aWQgZG9tYWluIG1hcHMKLSAgICAgICAgICAgIGludCBpID0gZGVsaW1pdGVkSG9zdC5zaXplKCkg
LSAxOwotICAgICAgICAgICAgd2hpbGUgKGkgPj0gMCkgewotICAgICAgICAgICAgICAgIENvb2tp
ZUxvZygiQ29va2llTWFuYWdlciAtIGZpbmRpbmcgJXMgaW4gY3VycmVudG1hcFxuIiwgZGVsaW1p
dGVkSG9zdFtpXS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50TWFwID0g
Y3VycmVudE1hcC0+Z2V0U3ViZG9tYWluTWFwKGRlbGltaXRlZEhvc3RbaV0pOwotICAgICAgICAg
ICAgICAgIC8vIGlmIHRoaXMgc3ViZG9tYWluL2RvbWFpbiBkb2VzIG5vdCBleGlzdCBpbiBvdXIg
bWFwcGluZyB0aGVuIHdlIHNpbXBseSBleGl0Ci0gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50
TWFwKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvb2tpZUxvZygiQ29va2llTWFuYWdlciAtIGNh
bm5vdCBmaW5kIG5leHQgbWFwIGV4aXRpbmcgdGhlIHdoaWxlIGxvb3AuXG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIENv
b2tpZUxvZygiQ29va2llTWFuYWdlciAtIGZvdW5kIHRoZSBtYXAsIGdyYWJiaW5nIGNvb2tpZXMg
ZnJvbSB0aGlzIG1hcFxuIik7Ci0gICAgICAgICAgICAgICAgY3VycmVudE1hcC0+Z2V0QWxsQ29v
a2llcygmY29va2llQ2FuZGlkYXRlcyk7Ci0gICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0g
dGhlcmUgYXJlICVkIGNvb2tpZXMgaW4gY2FuZGlkYXRlXG4iLCBjb29raWVDYW5kaWRhdGVzLnNp
emUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvb2tpZUNhbmRpZGF0ZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPFBhcnNlZENvb2tpZT4gY29va2llID0gY29va2ll
Q2FuZGlkYXRlc1tpXTsKLQotICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHBhdGgtbWF0Y2hl
cyBydWxlcyBpbiBSRkM2MjY1LCBzZWN0aW9uIDUuMS40LAotICAgICAgICAvLyB3ZSBzaG91bGQg
YWRkIGEgJy8nIGF0IHRoZSBlbmQgb2YgY29va2llLXBhdGggZm9yIGNvbXBhcmlzb24gaWYgdGhl
IGNvb2tpZS1wYXRoIGlzIG5vdCBlbmQgd2l0aCAnLycuCi0gICAgICAgIFN0cmluZyBwYXRoID0g
Y29va2llLT5wYXRoKCk7Ci0gICAgICAgIENvb2tpZUxvZygiQ29va2llTWFuYWdlciAtIGNvbXBh
cmluZyBjb29raWUgcGF0aCAlcyAobGVuICVkKSB0byByZXF1ZXN0IHBhdGggJXMgKGxlbiAlZCki
LCBwYXRoLnV0ZjgoKS5kYXRhKCksIHBhdGgubGVuZ3RoKCksIHJlcXVlc3RVUkwucGF0aCgpLnV0
ZjgoKS5kYXRhKCksIHBhdGgubGVuZ3RoKCkpOwotICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdD
YXNlKHBhdGgsIHJlcXVlc3RVUkwucGF0aCgpKSAmJiAhcGF0aC5lbmRzV2l0aCgiLyIsIGZhbHNl
KSkKLSAgICAgICAgICAgIHBhdGggPSBwYXRoICsgIi8iOwotCi0gICAgICAgIC8vIE9ubHkgc2Vj
dXJlIGNvbm5lY3Rpb25zIGhhdmUgYWNjZXNzIHRvIHNlY3VyZSBjb29raWVzLiBVbmxlc3Mgc3Bl
Y2lhbENhc2VGb3JXZWJXb3JrcyBpcyB0cnVlLgotICAgICAgICAvLyBHZXQgdGhlIGNvb2tpZXMg
ZmlsdGVyaW5nIG91dCBIdHRwT25seSBjb29raWVzIGlmIHJlcXVlc3RlZC4KLSAgICAgICAgaWYg
KHJlcXVlc3RVUkwucGF0aCgpLnN0YXJ0c1dpdGgocGF0aCwgZmFsc2UpICYmIChpc0Nvbm5lY3Rp
b25TZWN1cmUgfHwgIWNvb2tpZS0+aXNTZWN1cmUoKSkgJiYgKGZpbHRlciA9PSBXaXRoSHR0cE9u
bHlDb29raWVzIHx8ICFjb29raWUtPmlzSHR0cE9ubHkoKSkpIHsKLSAgICAgICAgICAgIENvb2tp
ZUxvZygiQ29va2llTWFuYWdlciAtIGNvb2tpZSBjaG9zZW4gLSAlc1xuIiwgY29va2llLT50b1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgY29va2llLT5zZXRMYXN0QWNjZXNz
ZWQoY3VycmVudFRpbWUoKSk7Ci0gICAgICAgICAgICBzdGFja09mQ29va2llcy5hcHBlbmQoY29v
a2llKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0ZDo6c3RhYmxlX3NvcnQoc3RhY2tPZkNv
b2tpZXMuYmVnaW4oKSwgc3RhY2tPZkNvb2tpZXMuZW5kKCksIGNvb2tpZVNvcnRlcik7Ci19Ci0K
LXZvaWQgQ29va2llTWFuYWdlcjo6cmVtb3ZlQWxsQ29va2llcyhCYWNraW5nU3RvcmVSZW1vdmFs
UG9saWN5IGJhY2tpbmdTdG9yZVJlbW92YWwpCi17Ci0gICAgSGFzaE1hcDxTdHJpbmcsIENvb2tp
ZU1hcCo+OjppdGVyYXRvciBmaXJzdCA9IG1fbWFuYWdlck1hcC5iZWdpbigpOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgZW5kID0gbV9tYW5hZ2VyTWFwLmVuZCgp
OwotICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IGZp
cnN0OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS0+ZGVsZXRlQWxsQ29va2ll
c0FuZERvbWFpbnMoKTsKLQotICAgIGlmIChiYWNraW5nU3RvcmVSZW1vdmFsID09IFJlbW92ZUZy
b21CYWNraW5nU3RvcmUpCi0gICAgICAgIG1fY29va2llQmFja2luZ1N0b3JlLT5yZW1vdmVBbGwo
KTsKLSAgICBtX2NvdW50ID0gMDsKLX0KLQotdm9pZCBDb29raWVNYW5hZ2VyOjpzZXRDb29raWVK
YXIoY29uc3QgY2hhciogZmlsZU5hbWUpCi17Ci0gICAgbV9jb29raWVKYXJGaWxlTmFtZSA9IFN0
cmluZyhmaWxlTmFtZSk7Ci0gICAgbV9jb29raWVCYWNraW5nU3RvcmUtPm9wZW4obV9jb29raWVK
YXJGaWxlTmFtZSk7Ci19Ci0KLXZvaWQgQ29va2llTWFuYWdlcjo6Y2hlY2tBbmRUcmVhdENvb2tp
ZShQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gcHJwQ2FuZGlkYXRlQ29va2llLCBCYWNraW5nU3Rv
cmVSZW1vdmFsUG9saWN5IHBvc3RUb0JhY2tpbmdTdG9yZSwgQ29va2llRmlsdGVyIGZpbHRlcikK
LXsKLSAgICBSZWZQdHI8UGFyc2VkQ29va2llPiBjYW5kaWRhdGVDb29raWUgPSBwcnBDYW5kaWRh
dGVDb29raWU7Ci0gICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gY2hlY2tBbmRUcmVhdENv
b2tpZSAtIHByb2Nlc3NpbmcgdXJsIHdpdGggZG9tYWluIC0gJXMgJiBwcm90b2NvbCAlc1xuIiwg
Y2FuZGlkYXRlQ29va2llLT5kb21haW4oKS51dGY4KCkuZGF0YSgpLCBjYW5kaWRhdGVDb29raWUt
PnByb3RvY29sKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAvLyBEZWxldGUgaW52YWxpZCBjb29r
aWVzOgotICAgIC8vIDEpIEEgY29va2llIHdoaWNoIGlzIG5vdCBmcm9tIGh0dHAgc2hvdWxkbid0
IGhhdmUgYSBodHRwT25seSBwcm9wZXJ0eS4KLSAgICAvLyAyKSBDb29raWVzIGNvbWluZyBmcm9t
IHNjaGVtZXMgdGhhdCB3ZSBkbyBub3Qgc3VwcG9ydCBhbmQgdGhlIHNwZWNpYWwgZmxhZyBpc24n
dCBvbgotICAgIGlmICgoZmlsdGVyID09IE5vSHR0cE9ubHlDb29raWUgJiYgY2FuZGlkYXRlQ29v
a2llLT5pc0h0dHBPbmx5KCkpIHx8IChzaG91bGRJZ25vcmVTY2hlbWUoY2FuZGlkYXRlQ29va2ll
LT5wcm90b2NvbCgpKSAmJiAhbV9zaG91bGREdW1wQWxsQ29va2llcykpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGNvbnN0IGJvb2wgaWdub3JlRG9tYWluID0gKGNhbmRpZGF0ZUNvb2tpZS0+cHJv
dG9jb2woKSA9PSAiZmlsZSIgfHwgY2FuZGlkYXRlQ29va2llLT5wcm90b2NvbCgpID09ICJsb2Nh
bCIpOwotCi0gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHByb3RvY29sIHRyZWUgdG8gYWRkIHRoZSBj
b29raWUgdG8uIENyZWF0ZSBvbmUgaWYgbmVjZXNzYXJ5LgotICAgIENvb2tpZU1hcCogY3VyTWFw
ID0gMDsKLSAgICBpZiAobV9tYW5hZ2VyTWFwLmNvbnRhaW5zKGNhbmRpZGF0ZUNvb2tpZS0+cHJv
dG9jb2woKSkpCi0gICAgICAgIGN1ck1hcCA9IG1fbWFuYWdlck1hcC5nZXQoY2FuZGlkYXRlQ29v
a2llLT5wcm90b2NvbCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMg
YSBzZWN1cmUgdmVyc2lvbiwgaWYgaXQgaXMsIGxpbmsgaXQgdG8gdGhlIG5vbi1zZWN1cmUgdmVy
c2lvbgotICAgICAgICAvLyBMaW5rIGN1ck1hcCB0byB0aGUgbmV3IHByb3RvY29sIGFzIHdlbGwg
YXMgdGhlIG9sZCBvbmUgaWYgaXQgZG9lc24ndCBleGlzdAotICAgICAgICBpZiAoY2FuZGlkYXRl
Q29va2llLT5wcm90b2NvbCgpID09ICJodHRwcyIpIHsKLSAgICAgICAgICAgIGN1ck1hcCA9IG1f
bWFuYWdlck1hcC5nZXQoImh0dHAiKTsKLSAgICAgICAgICAgIGlmICghY3VyTWFwKSB7Ci0gICAg
ICAgICAgICAgICAgY3VyTWFwID0gbmV3IENvb2tpZU1hcCgiaHR0cCIpOwotICAgICAgICAgICAg
ICAgIG1fbWFuYWdlck1hcC5hZGQoImh0dHAiLCBjdXJNYXApOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKGNhbmRpZGF0ZUNvb2tpZS0+cHJvdG9jb2woKSA9PSAid3NzIikgewot
ICAgICAgICAgICAgY3VyTWFwID0gbV9tYW5hZ2VyTWFwLmdldCgid3MiKTsKLSAgICAgICAgICAg
IGlmICghY3VyTWFwKSB7Ci0gICAgICAgICAgICAgICAgY3VyTWFwID0gbmV3IENvb2tpZU1hcCgi
d3MiKTsKLSAgICAgICAgICAgICAgICBtX21hbmFnZXJNYXAuYWRkKCJ3cyIsIGN1ck1hcCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY3VyTWFwID0gbmV3IENv
b2tpZU1hcChjYW5kaWRhdGVDb29raWUtPnByb3RvY29sKCkpOwotCi0gICAgICAgIENvb2tpZUxv
ZygiQ29va2llTWFuYWdlciAtIGFkZGluZyBwcm90b2NvbCBjb29raWVtYXAgLSAlc1xuIiwgY3Vy
TWFwLT5nZXROYW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAgICAgbV9tYW5hZ2VyTWFwLmFk
ZChjYW5kaWRhdGVDb29raWUtPnByb3RvY29sKCksIGN1ck1hcCk7Ci0gICAgfQotCi0gICAgLy8g
SWYgcHJvdG9jb2wgc3VwcG9ydCBkb21haW4sIHdlIGhhdmUgdG8gdHJhdmVyc2UgdGhlIGRvbWFp
biB0cmVlIHRvIGZpbmQgdGhlIHJpZ2h0Ci0gICAgLy8gY29va2llTWFwIHRvIGhhbmRsZSB3aXRo
Ci0gICAgaWYgKCFpZ25vcmVEb21haW4pCi0gICAgICAgIGN1ck1hcCA9IGZpbmRPckNyZWF0ZUNv
b2tpZU1hcChjdXJNYXAsIGNhbmRpZGF0ZUNvb2tpZSk7Ci0KLSAgICAvLyBOb3cgdGhhdCB3ZSBo
YXZlIHRoZSBwcm9wZXIgbWFwIGZvciB0aGlzIGNvb2tpZSwgd2UgY2FuIG1vZGlmeSBpdAotICAg
IC8vIElmIGNvb2tpZSBkb2VzIG5vdCBleGlzdCBhbmQgaGFzIGV4cGlyZWQsIGRlbGV0ZSBpdAot
ICAgIC8vIElmIGNvb2tpZSBleGlzdHMgYW5kIGl0IGhhcyBleHBpcmVkLCBzbyB3ZSBtdXN0IHJl
bW92ZSBpdCBmcm9tIHRoZSBtYXAsIGlmIG5vdCB1cGRhdGUgaXQKLSAgICAvLyBJZiBjb29raWUg
ZXhwaXJlZCBhbmQgY2FtZSBmcm9tIHRoZSBCYWNraW5nU3RvcmUgKHRoZXJlZm9yZSBkb2VzIG5v
dCBleGlzdCksIHdlIGhhdmUgdG8gcmVtb3ZlIGZyb20gZGF0YWJhc2UKLSAgICAvLyBJZiBjb29r
aWUgZG9lcyBub3QgZXhpc3QgJiBpdCdzIHZhbGlkLCBhZGQgaXQgdG8gdGhlIGN1cnJlbnQgbWFw
Ci0KLSAgICBpZiAoY2FuZGlkYXRlQ29va2llLT5oYXNFeHBpcmVkKCkgfHwgY2FuZGlkYXRlQ29v
a2llLT5pc0ZvcmNlRXhwaXJlZCgpKSB7Ci0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZ2V0
QmFja2luZ1N0b3JlQ29va2llcygpIHRvIGNhdGNoIGV4cGlyZWQgY29va2llcwotICAgICAgICBp
ZiAocG9zdFRvQmFja2luZ1N0b3JlID09IEJhY2tpbmdTdG9yZUNvb2tpZUVudHJ5KQotICAgICAg
ICAgICAgbV9jb29raWVCYWNraW5nU3RvcmUtPnJlbW92ZShjYW5kaWRhdGVDb29raWUpOwotICAg
ICAgICBlbHNlIGlmIChjdXJNYXApIHsKLSAgICAgICAgICAgIC8vIFJlbW92ZUNvb2tpZSB3aWxs
IHJldHVybiAwIGlmIHRoZSBjb29raWUgZG9lc24ndCBleGlzdC4KLSAgICAgICAgICAgIFJlZlB0
cjxQYXJzZWRDb29raWU+IGV4cGlyZWQgPSBjdXJNYXAtPnJlbW92ZUNvb2tpZShjYW5kaWRhdGVD
b29raWUsIGZpbHRlcik7Ci0gICAgICAgICAgICAvLyBDb29raWUgaXMgdXNlbGVzcywgUmVtb3Zl
IHRoZSBjb29raWUgZnJvbSB0aGUgYmFja2luZ3N0b3JlIGlmIGl0IGV4aXN0cy4KLSAgICAgICAg
ICAgIC8vIEJhY2t1cCBjaGVjayBmb3IgQmFja2luZ1N0b3JlQ29va2llRW50cnkgaW5jYXNlIHNv
bWVvbmUgaW5jb3JyZWN0bHkgdXNlcyB0aGlzIGVudW0uCi0gICAgICAgICAgICBpZiAoZXhwaXJl
ZCAmJiBwb3N0VG9CYWNraW5nU3RvcmUgIT0gQmFja2luZ1N0b3JlQ29va2llRW50cnkgJiYgIWV4
cGlyZWQtPmlzU2Vzc2lvbigpKSB7Ci0gICAgICAgICAgICAgICAgQ29va2llTG9nKCJDb29raWVN
YW5hZ2VyIC0gZXhwaXJlZCBjb29raWUgaXMgbm9uc2Vzc2lvbiwgZGVsZXRpbmcgZnJvbSBkYiIp
OwotICAgICAgICAgICAgICAgIG1fY29va2llQmFja2luZ1N0b3JlLT5yZW1vdmUoZXhwaXJlZCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQo
Y3VyTWFwKTsKLSAgICAgICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gYWRkaW5nIGNvb2tp
ZW1hcCAtICVzXG4iLCBjdXJNYXAtPmdldE5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
YWRkQ29va2llVG9NYXAoY3VyTWFwLCBjYW5kaWRhdGVDb29raWUsIHBvc3RUb0JhY2tpbmdTdG9y
ZSwgZmlsdGVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29va2llTWFuYWdlcjo6YWRkQ29va2llVG9N
YXAoQ29va2llTWFwKiB0YXJnZXRNYXAsIFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiBwcnBDYW5k
aWRhdGVDb29raWUsIEJhY2tpbmdTdG9yZVJlbW92YWxQb2xpY3kgcG9zdFRvQmFja2luZ1N0b3Jl
LCBDb29raWVGaWx0ZXIgZmlsdGVyKQotewotICAgIFJlZlB0cjxQYXJzZWRDb29raWU+IHJlcGxh
Y2VkQ29va2llID0gMDsKLSAgICBSZWZQdHI8UGFyc2VkQ29va2llPiBjYW5kaWRhdGVDb29raWUg
PSBwcnBDYW5kaWRhdGVDb29raWU7Ci0KLSAgICBpZiAoIXRhcmdldE1hcC0+YWRkT3JSZXBsYWNl
Q29va2llKGNhbmRpZGF0ZUNvb2tpZSwgcmVwbGFjZWRDb29raWUsIGZpbHRlcikpIHsKLSAgICAg
ICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gcmVqZWN0aW5nIG5ldyBjb29raWUgLSAlcy5c
biIsIGNhbmRpZGF0ZUNvb2tpZS0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChyZXBsYWNlZENvb2tpZSkgewotICAgICAgICBDb29r
aWVMb2coIkNvb2tpZU1hbmFnZXIgLSB1cGRhdGluZyBuZXcgY29va2llIC0gJXMuXG4iLCBjYW5k
aWRhdGVDb29raWUtPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAgICAgLy8gQSBj
b29raWUgd2FzIHJlcGxhY2VkIGluIHRhcmdldE1hcC4KLSAgICAgICAgLy8gSWYgb2xkIGNvb2tp
ZSBpcyBub24tc2Vzc2lvbiBhbmQgbmV3IG9uZSBpcywgd2UgaGF2ZSB0byBkZWxldGUgaXQgZnJv
bSBiYWNraW5nc3RvcmUKLSAgICAgICAgLy8gSWYgbmV3IGNvb2tpZSBpcyBub24tc2Vzc2lvbiBh
bmQgb2xkIG9uZSBpcywgd2UgaGF2ZSB0byBhZGQgaXQgdG8gYmFja2luZ3N0b3JlCi0gICAgICAg
IC8vIElmIGJvdGggc2Vzc2lvbnMgYXJlIG5vbi1zZXNzaW9uLCB0aGVuIHdlIHVwZGF0ZSBpdCBp
biB0aGUgYmFja2luZ3N0b3JlCi0gICAgICAgIGJvb2wgbmV3SXNTZXNzaW9uID0gY2FuZGlkYXRl
Q29va2llLT5pc1Nlc3Npb24oKTsKLSAgICAgICAgYm9vbCBvbGRJc1Nlc3Npb24gPSByZXBsYWNl
ZENvb2tpZS0+aXNTZXNzaW9uKCk7Ci0KLSAgICAgICAgaWYgKHBvc3RUb0JhY2tpbmdTdG9yZSA9
PSBSZW1vdmVGcm9tQmFja2luZ1N0b3JlKSB7Ci0gICAgICAgICAgICBpZiAoIW5ld0lzU2Vzc2lv
biAmJiAhb2xkSXNTZXNzaW9uKQotICAgICAgICAgICAgICAgIG1fY29va2llQmFja2luZ1N0b3Jl
LT51cGRhdGUoY2FuZGlkYXRlQ29va2llKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5ld0lzU2Vz
c2lvbiAmJiAhb2xkSXNTZXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgLy8gTXVzdCBtYW51YWxs
eSBkZWNyZWFzZSB0aGUgY291bnRlciBiZWNhdXNlIGl0IHdhcyBub3QgY291bnRlZCB3aGVuCi0g
ICAgICAgICAgICAgICAgLy8gdGhlIGNvb2tpZSB3YXMgcmVtb3ZlZCBpbiBjb29raWVWZWN0b3Iu
Ci0gICAgICAgICAgICAgICAgcmVtb3ZlZENvb2tpZSgpOwotICAgICAgICAgICAgICAgIG1fY29v
a2llQmFja2luZ1N0b3JlLT5yZW1vdmUocmVwbGFjZWRDb29raWUpOwotICAgICAgICAgICAgfSBl
bHNlIGlmICghbmV3SXNTZXNzaW9uICYmIG9sZElzU2Vzc2lvbikgewotICAgICAgICAgICAgICAg
IC8vIE11c3QgbWFudWFsbHkgaW5jcmVhc2UgdGhlIGNvdW50ZXIgYmVjYXVzZSBpdCB3YXMgbm90
IGNvdW50ZWQgd2hlbgotICAgICAgICAgICAgICAgIC8vIHRoZSBjb29raWUgd2FzIGFkZGVkIGlu
IGNvb2tpZVZlY3Rvci4KLSAgICAgICAgICAgICAgICBhZGRlZENvb2tpZSgpOwotICAgICAgICAg
ICAgICAgIG1fY29va2llQmFja2luZ1N0b3JlLT5pbnNlcnQoY2FuZGlkYXRlQ29va2llKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ29v
a2llTG9nKCJDb29raWVNYW5hZ2VyIC0gYWRkaW5nIG5ldyBjb29raWUgLSAlcy5cbiIsIGNhbmRp
ZGF0ZUNvb2tpZS0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIFJlZlB0cjxQYXJz
ZWRDb29raWU+IG9sZGVzdENvb2tpZSA9IDA7Ci0gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBub3Qg
cmVhY2hlZCB0aGUgcGVyIGNvb2tpZSBkb21haW4gbGltaXQuCi0gICAgLy8gSWYgdGhhdCBpcyBu
b3QgdHJ1ZSwgd2UgY2hlY2sgaWYgdGhlIGdsb2JhbCBsaW1pdCBoYXMgYmVlbiByZWFjaGVkIGlm
IGJhY2tpbmdzdG9yZSBtb2RlIGlzIG9uCi0gICAgLy8gVHdvIHBvaW50czoKLSAgICAvLyAxKSBX
ZSBvbmx5IGRvIGEgZ2xvYmFsIGNoZWNrIGlmIGJhY2tpbmdzdG9yZSBtb2RlIGlzIG9uIGJlY2F1
c2UgdGhlIGdsb2JhbCBjb29raWUgbGltaXQgb25seQotICAgIC8vICAgIGNvdW50cyBzZXNzaW9u
IGNvb2tpZXMgdGhhdCBhcmUgc2F2ZWQgaW4gdGhlIGRhdGFiYXNlLiBJZiB0aGUgdXNlciBnb2Vz
IG92ZXIgdGhlIGxpbWl0Ci0gICAgLy8gICAgd2hlbiB0aGV5IGFyZSBpbiBwcml2YXRlIG1vZGUs
IHdlIGtub3cgdGhhdCB0aGUgdG90YWwgY29va2llIGxpbWl0IHdpbGwgYmUgdW5kZXIgdGhlIGxp
bWl0Ci0gICAgLy8gICAgb25jZSB0aGUgdXNlciBnb2VzIGJhY2sgdG8gbm9ybWFsIG1vZGUgKG1l
bW9yeSBkZWxldGVkIGFuZCByZWxvYWRlZCBmcm9tIHRoZSBkYXRhYmFzZSkKLSAgICAvLyAyKSBX
ZSB1c2UgZWxzZSBpZiBmb3IgdGhpcyBzdGF0ZW1lbnQgYmVjYXVzZSBpZiB3ZSByZW1vdmUgYSBj
b29raWUgaW4gdGhlIDFzdCBzdGF0ZW1lbnQKLSAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRoZSBn
bG9iYWwgY291bnQgd2lsbCBuZXZlciBleGNlZWQgdGhlIGxpbWl0Ci0KLSAgICBDb29raWVMaW1p
dExvZygiQ29va2llTWFuYWdlciAtIGxvY2FsIGNvdW50OiAlZCAgZ2xvYmFsIGNvdW50OiAlZCIs
IHRhcmdldE1hcC0+Y291bnQoKSwgbV9jb3VudCk7Ci0gICAgaWYgKHRhcmdldE1hcC0+Y291bnQo
KSA+IHNfbWF4Q29va2llQ291bnRQZXJIb3N0KSB7Ci0gICAgICAgIENvb2tpZUxvZygiQ29va2ll
TWFuYWdlciAtIGRlbGV0aW5nIG9sZGVzdCBjb29raWUgZnJvbSB0aGlzIG1hcCBkdWUgdG8gZG9t
YWluIGNvdW50LlxuIik7Ci0gICAgICAgIG9sZGVzdENvb2tpZSA9IHRhcmdldE1hcC0+cmVtb3Zl
T2xkZXN0Q29va2llKCk7Ci0gICAgfSBlbHNlIGlmIChtX2NvdW50ID4gc19nbG9iYWxNYXhDb29r
aWVDb3VudCAmJiAocG9zdFRvQmFja2luZ1N0b3JlICE9IERvTm90UmVtb3ZlRnJvbUJhY2tpbmdT
dG9yZSkpIHsKLSAgICAgICAgQ29va2llTGltaXRMb2coIkNvb2tpZU1hbmFnZXIgLSBHbG9iYWwg
bGltaXQgcmVhY2hlZCwgaW5pdGlhdGUgY29va2llIGxpbWl0IGNsZWFuIHVwLiIpOwotICAgICAg
ICBpbml0aWF0ZUNvb2tpZUxpbWl0Q2xlYW5VcCgpOwotICAgIH0KLQotICAgIC8vIE9ubHkgYWRk
IG5vbiBzZXNzaW9uIGNvb2tpZSB0byB0aGUgYmFja2luZyBzdG9yZS4KLSAgICBpZiAocG9zdFRv
QmFja2luZ1N0b3JlID09IFJlbW92ZUZyb21CYWNraW5nU3RvcmUpIHsKLSAgICAgICAgaWYgKG9s
ZGVzdENvb2tpZSAmJiAhb2xkZXN0Q29va2llLT5pc1Nlc3Npb24oKSkgewotICAgICAgICAgICAg
Q29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gb2xkZXN0Q29va2llIGV4aXN0cywgZGVsZXRpbmcg
aXQgZnJvbSBiYWNraW5nc3RvcmUgYW5kIGRlc3RydWN0aW5nLlxuIik7Ci0gICAgICAgICAgICBt
X2Nvb2tpZUJhY2tpbmdTdG9yZS0+cmVtb3ZlKG9sZGVzdENvb2tpZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKCFjYW5kaWRhdGVDb29raWUtPmlzU2Vzc2lvbigpKQotICAgICAgICAgICAgbV9j
b29raWVCYWNraW5nU3RvcmUtPmluc2VydChjYW5kaWRhdGVDb29raWUpOwotICAgIH0KLX0KLQot
dm9pZCBDb29raWVNYW5hZ2VyOjpnZXRCYWNraW5nU3RvcmVDb29raWVzKCkKLXsKLSAgICAvLyBN
YWtlIHN1cmUgcHJpdmF0ZSBtb2RlIGlzIG9mZiB3aGVuIHRoZSBkYXRhYmFzZSB0aHJlYWQgY2Fs
bHMgdGhpcyBtZXRob2QKLSAgICBpZiAobV9wcml2YXRlTW9kZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gSWYgdGhlcmUgZXhpc3RzIGNvb2tpZXMgaW4gbWVtb3J5LCBmbHVzaCB0aGVtIG91
dCBhbmQgd2UnbGwgbG9hZCBldmVyeXRoaW5nIGZyb20gdGhlIGRhdGFiYXNlIGFnYWluCi0gICAg
aWYgKG1fY291bnQpCi0gICAgICAgIHJlbW92ZUFsbENvb2tpZXMoRG9Ob3RSZW1vdmVGcm9tQmFj
a2luZ1N0b3JlKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+IGNvb2tpZXM7
Ci0gICAgbV9jb29raWVCYWNraW5nU3RvcmUtPmdldENvb2tpZXNGcm9tRGF0YWJhc2UoY29va2ll
cyk7Ci0gICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gQmFja2luZ3N0b3JlIGhhcyAlZCBj
b29raWVzLCBsb2FkaW5nIHRoZW0gaW4gbWVtb3J5IG5vdyIsIGNvb2tpZXMuc2l6ZSgpKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
UmVmUHRyPFBhcnNlZENvb2tpZT4gbmV3Q29va2llID0gY29va2llc1tpXTsKLQotICAgICAgICAv
LyBUaGUgSVAgZmxhZyBpcyBub3QgcGVyc2lzdGVkIGluIHRoZSBkYXRhYmFzZS4KLSAgICAgICAg
aWYgKEJsYWNrQmVycnk6OlBsYXRmb3JtOjppc0lQQWRkcmVzcyhuZXdDb29raWUtPmRvbWFpbigp
KSkKLSAgICAgICAgICAgIG5ld0Nvb2tpZS0+c2V0RG9tYWluKG5ld0Nvb2tpZS0+ZG9tYWluKCks
IHRydWUpOwotCi0gICAgICAgIGNoZWNrQW5kVHJlYXRDb29raWUobmV3Q29va2llLCBCYWNraW5n
U3RvcmVDb29raWVFbnRyeSk7Ci0gICAgfQotICAgIENvb2tpZUxvZygiQ29va2llTWFuYWdlciAt
IEJhY2tpbmdzdG9yZSBsb2FkaW5nIGNvbXBsZXRlLiIpOwotCi0gICAgbV9zeW5jZWRXaXRoRGF0
YWJhc2UgPSB0cnVlOwotfQotCi12b2lkIENvb2tpZU1hbmFnZXI6OnNldFByaXZhdGVNb2RlKGJv
b2wgcHJpdmF0ZU1vZGUpCi17Ci0gICAgaWYgKG1fcHJpdmF0ZU1vZGUgPT0gcHJpdmF0ZU1vZGUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJpdmF0ZU1vZGUgPSBwcml2YXRlTW9kZTsKLQot
ICAgIC8vIElmIHdlIHN3aXRjaGVkIHRvIHByaXZhdGUgbW9kZSB3aGVuIHRoZSBkYXRhYmFzZSBj
b29raWVzIGhhdmVuJ3QgbG9hZGVkIGludG8gbWVtb3J5IHlldAotICAgIC8vIHdlIGNhbiByZXR1
cm4gYmVjYXVzZSB0aGVyZSdzIG5vdGhpbmcgaW4gbWVtb3J5IGFueXdheS4KLSAgICBpZiAobV9w
cml2YXRlTW9kZSAmJiAhbV9zeW5jZWRXaXRoRGF0YWJhc2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHJlbW92ZUFsbENvb2tpZXMoRG9Ob3RSZW1vdmVGcm9tQmFja2luZ1N0b3JlKTsKLQotICAg
IC8vIElmIHdlIGFyZSBzd2l0Y2hpbmcgYmFjayB0byBwdWJsaWMgbW9kZSwgcmVsb2FkIHRoZSBk
YXRhYmFzZSB0byBtZW1vcnkuCi0gICAgaWYgKCFtX3ByaXZhdGVNb2RlKQotICAgICAgICBnZXRC
YWNraW5nU3RvcmVDb29raWVzKCk7Ci19Ci0KLUNvb2tpZU1hcCogQ29va2llTWFuYWdlcjo6Zmlu
ZE9yQ3JlYXRlQ29va2llTWFwKENvb2tpZU1hcCogcHJvdG9jb2xNYXAsIGNvbnN0IFBhc3NSZWZQ
dHI8UGFyc2VkQ29va2llPiBjYW5kaWRhdGVDb29raWUpCi17Ci0gICAgLy8gRXhwbG9kZSB0aGUg
ZG9tYWluIHdpdGggdGhlICcuJyBkZWxpbWl0ZXIKLSAgICBWZWN0b3I8U3RyaW5nPiBkZWxpbWl0
ZWRIb3N0OwotCi0gICAgLy8gSWYgdGhlIGRvbWFpbiBpcyBhbiBJUCBhZGRyZXNzIG9yIGlzIGEg
aG9zdC1vbmx5IGRvbWFpbiwgZG9uJ3Qgc3BsaXQgaXQuCi0gICAgaWYgKGNhbmRpZGF0ZUNvb2tp
ZS0+ZG9tYWluSXNJUEFkZHJlc3MoKSB8fCBjYW5kaWRhdGVDb29raWUtPmlzSG9zdE9ubHkoKSkK
LSAgICAgICAgZGVsaW1pdGVkSG9zdC5hcHBlbmQoY2FuZGlkYXRlQ29va2llLT5kb21haW4oKSk7
Ci0gICAgZWxzZQotICAgICAgICBjYW5kaWRhdGVDb29raWUtPmRvbWFpbigpLnNwbGl0KCIuIiwg
ZGVsaW1pdGVkSG9zdCk7Ci0KLSAgICBDb29raWVNYXAqIGN1ck1hcCA9IHByb3RvY29sTWFwOwot
ICAgIHNpemVfdCBob3N0U2l6ZSA9IGRlbGltaXRlZEhvc3Quc2l6ZSgpOwotCi0gICAgQ29va2ll
TG9nKCJDb29raWVNYW5hZ2VyIC0gbG9va2luZyBhdCBwcm90b2NvbCBtYXAgJXMgXG4iLCBwcm90
b2NvbE1hcC0+Z2V0TmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgLy8gRmluZCAmIGNyZWF0
ZSBuZWNlc3NhcnkgQ29va2llTWFwcyBieSB0cmF2ZXJzaW5nIGRvd24gdGhlIGRvbWFpbiB0cmVl
Ci0gICAgLy8gRWFjaCBDb29raWVNYXAgcmVwcmVzZW50IGEgc3Vic2VjdGlvbiBvZiB0aGUgZG9t
YWluLCBkZWxpbWl0ZWQgYnkgIi4iCi0gICAgaW50IGkgPSBob3N0U2l6ZSAtIDE7Ci0gICAgd2hp
bGUgKGkgPj0gMCkgewotICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBmaW5kaW5n
ICVzIGluIGN1cnJlbnRtYXBcbiIsIGRlbGltaXRlZEhvc3RbaV0udXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgIENvb2tpZU1hcCogbmV4dE1hcCA9IGN1ck1hcC0+Z2V0U3ViZG9tYWluTWFwKGRlbGlt
aXRlZEhvc3RbaV0pOwotICAgICAgICBpZiAoIW5leHRNYXApIHsKLSAgICAgICAgICAgIENvb2tp
ZUxvZygiQ29va2llTWFuYWdlciAtIGNhbm5vdCBmaW5kIG1hcFxuIik7Ci0gICAgICAgICAgICBp
ZiAoY2FuZGlkYXRlQ29va2llLT5oYXNFeHBpcmVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBjcmVhdGluZyAlcyBp
biBjdXJyZW50bWFwICVzXG4iLCBkZWxpbWl0ZWRIb3N0W2ldLnV0ZjgoKS5kYXRhKCksIGN1ck1h
cC0+Z2V0TmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgbmV4dE1hcCA9IG5ldyBD
b29raWVNYXAoZGVsaW1pdGVkSG9zdFtpXSk7Ci0gICAgICAgICAgICBDb29raWVMb2coIkNvb2tp
ZU1hbmFnZXIgLSBhZGRpbmcgc3ViZG9tYWluIHRvIG1hcFxuIik7Ci0gICAgICAgICAgICBjdXJN
YXAtPmFkZFN1YmRvbWFpbk1hcChkZWxpbWl0ZWRIb3N0W2ldLCBuZXh0TWFwKTsKLSAgICAgICAg
fQotICAgICAgICBjdXJNYXAgPSBuZXh0TWFwOwotICAgICAgICBpLS07Ci0gICAgfQotICAgIHJl
dHVybiBjdXJNYXA7Ci19Ci0KLXZvaWQgQ29va2llTWFuYWdlcjo6cmVtb3ZlQ29va2llV2l0aE5h
bWUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICAvLyBE
aXNwYXRjaCB0aGUgbWVzc2FnZSBiZWNhdXNlIHRoZSBkYXRhYmFzZSBjb29raWVzIGFyZSBub3Qg
bG9hZGVkIGluIG1lbW9yeSB5ZXQuCi0gICAgaWYgKCFtX3N5bmNlZFdpdGhEYXRhYmFzZSAmJiAh
bV9wcml2YXRlTW9kZSkgewotICAgICAgICB0eXBlZGVmIHZvaWQgKFdlYkNvcmU6OkNvb2tpZU1h
bmFnZXI6OipGdW5jdGlvblR5cGUpKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYpOwotICAgICAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6d2ViS2l0VGhyZWFkTWVzc2FnZUNsaWVudCgpLT5kaXNw
YXRjaE1lc3NhZ2UoCi0gICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Y3JlYXRlTWV0
aG9kQ2FsbE1lc3NhZ2U8RnVuY3Rpb25UeXBlLCBDb29raWVNYW5hZ2VyLCBjb25zdCBVUkwsIGNv
bnN0IFN0cmluZz4oCi0gICAgICAgICAgICAgICAgJkNvb2tpZU1hbmFnZXI6OnJlbW92ZUNvb2tp
ZVdpdGhOYW1lLCB0aGlzLCB1cmwsIGNvb2tpZU5hbWUpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIFdlIGdldCBhbGwgY29va2llcyBmcm9tIGFsbCBkb21haW5zIHRoYXQgZG9t
YWluIG1hdGNoZXMgdGhlIHJlcXVlc3QgZG9tYWluCi0gICAgLy8gYW5kIGRlbGV0ZSBhbnkgY29v
a2llcyB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSB0aGF0IHBhdGggbWF0Y2hlcyB0aGUgcmVxdWVz
dCBwYXRoCi0gICAgVmVjdG9yPFJlZlB0cjxQYXJzZWRDb29raWU+ID4gcmVzdWx0czsKLSAgICBn
ZXRSYXdDb29raWVzKHJlc3VsdHMsIHVybCwgV2l0aEh0dHBPbmx5Q29va2llcyk7Ci0gICAgLy8g
RGVsZXRlIHRoZSBjb29raWVzIHRoYXQgcGF0aCBtYXRjaGVzIHRoZSByZXF1ZXN0IHBhdGgKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAg
UmVmUHRyPFBhcnNlZENvb2tpZT4gY29va2llID0gcmVzdWx0c1tpXTsKLSAgICAgICAgaWYgKCFl
cXVhbElnbm9yaW5nQ2FzZShjb29raWUtPm5hbWUoKSwgY29va2llTmFtZSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKHVybC5wYXRoKCkuc3RhcnRzV2l0aChjb29raWUtPnBh
dGgoKSwgZmFsc2UpKSB7Ci0gICAgICAgICAgICBjb29raWUtPmZvcmNlRXhwaXJlKCk7Ci0gICAg
ICAgICAgICBjaGVja0FuZFRyZWF0Q29va2llKGNvb2tpZSwgUmVtb3ZlRnJvbUJhY2tpbmdTdG9y
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29va2llTWFuYWdlcjo6aW5pdGlhdGVD
b29raWVMaW1pdENsZWFuVXAoKQotewotICAgIGlmICghbV9saW1pdFRpbWVyLmlzQWN0aXZlKCkp
IHsKLSAgICAgICAgQ29va2llTG9nKCJDb29raWVNYW5hZ2VyIC0gU3RhcnRpbmcgYSB0aW1lciBm
b3IgY29va2llIGNsZWFudXAiKTsKLSAgICAgICAgbV9saW1pdFRpbWVyLnN0YXJ0T25lU2hvdChz
X2RlbGF5VG9TdGFydENvb2tpZUNsZWFudXApOwotICAgIH0gZWxzZSB7Ci0jaWZuZGVmIE5ERUJV
RwotICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBDb29raWUgY2xlYW51cCB0aW1l
ciBhbHJlYWR5IHJ1bm5pbmciKTsKLSNlbmRpZgotICAgIH0KLX0KLQotdm9pZCBDb29raWVNYW5h
Z2VyOjpjb29raWVMaW1pdENsZWFuVXAoVGltZXI8Q29va2llTWFuYWdlcj4qIHRpbWVyKQotewot
ICAgIEFTU0VSVF9VTlVTRUQodGltZXIsIHRpbWVyID09ICZtX2xpbWl0VGltZXIpOwotCi0gICAg
Q29va2llTGltaXRMb2coIkNvb2tpZU1hbmFnZXIgLSBTdGFydGluZyBjb29raWUgY2xlYW4gdXAi
KTsKLQotICAgIHNpemVfdCBudW1iZXJPZkNvb2tpZXNPdmVyTGltaXQgPSAobV9jb3VudCA+IHNf
Z2xvYmFsTWF4Q29va2llQ291bnQpID8gbV9jb3VudCAtIHNfZ2xvYmFsTWF4Q29va2llQ291bnQg
OiAwOwotICAgIHNpemVfdCBhbW91bnRUb0RlbGV0ZSA9IHNfY29va2llc1RvRGVsZXRlV2hlbkxp
bWl0UmVhY2hlZCArIG51bWJlck9mQ29va2llc092ZXJMaW1pdDsKLQotICAgIENvb2tpZUxpbWl0
TG9nKCJDb29raWVNYW5hZ2VyIC0gRXhjZXNzOiAlZCAgQW1vdW50IHRvIERlbGV0ZTogJWQiLCBu
dW1iZXJPZkNvb2tpZXNPdmVyTGltaXQsIGFtb3VudFRvRGVsZXRlKTsKLQotICAgIC8vIENhbGwg
dGhlIGRhdGFiYXNlIHRvIGRlbGV0ZSAnYW1vdW50VG9EZWxldGUnIG9mIGNvb2tpZXMKLSAgICBW
ZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPiBjb29raWVzVG9EZWxldGU7Ci0gICAgY29va2ll
c1RvRGVsZXRlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYW1vdW50VG9EZWxldGUpOwotCi0gICAg
Q29va2llTGltaXRMb2coIkNvb2tpZU1hbmFnZXIgLSBDYWxsaW5nIGRhdGFiYXNlIHRvIGNsZWFu
IHVwIik7Ci0gICAgbV9jb29raWVCYWNraW5nU3RvcmUtPmdldENvb2tpZXNGcm9tRGF0YWJhc2Uo
Y29va2llc1RvRGVsZXRlLCBhbW91bnRUb0RlbGV0ZSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSBv
cmRlcmVkIGluIEFTQyBvcmRlciBieSBsYXN0QWNjZXNzZWQKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFtb3VudFRvRGVsZXRlOyArK2kpIHsKLSAgICAgICAgLy8gRXhwaXJlIHRoZW0gYW5k
IGNhbGwgY2hlY2thbmR0cmVhdCB0byBkZWxldGUgdGhlbSBmcm9tIG1lbW9yeSBhbmQgZGF0YWJh
c2UKLSAgICAgICAgUmVmUHRyPFBhcnNlZENvb2tpZT4gbmV3Q29va2llID0gY29va2llc1RvRGVs
ZXRlW2ldOwotICAgICAgICBDb29raWVMaW1pdExvZygiQ29va2llTWFuYWdlciAtIEV4cGlyZSBj
b29raWU6ICVzIGFuZCBkZWxldGUiLCBuZXdDb29raWUtPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgIG5ld0Nvb2tpZS0+Zm9yY2VFeHBpcmUoKTsKLSAgICAgICAgY2hlY2tBbmRU
cmVhdENvb2tpZShuZXdDb29raWUsIFJlbW92ZUZyb21CYWNraW5nU3RvcmUpOwotICAgIH0KLQot
ICAgIENvb2tpZUxpbWl0TG9nKCJDb29raWVNYW5hZ2VyIC0gQ29va2llIGNsZWFuIHVwIGNvbXBs
ZXRlLiIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuaAkocmV2aXNpb24g
MTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5h
Z2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgSnVsaWVuIENoYWZmcmFpeCA8anVsaWVuLmNoYWZmcmFpeEBnbWFpbC5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvb2tpZU1hbmFnZXJfaAotI2RlZmluZSBD
b29raWVNYW5hZ2VyX2gKLQotI2luY2x1ZGUgIkNvb2tpZU1hcC5oIgotI2luY2x1ZGUgIlBhcnNl
ZENvb2tpZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtR3VhcmRlZFBvaW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENv
b2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOwotY2xhc3MgVVJMOwotCi1lbnVtIEJhY2tpbmdTdG9y
ZVJlbW92YWxQb2xpY3kgewotICAgIFJlbW92ZUZyb21CYWNraW5nU3RvcmUsCi0gICAgQmFja2lu
Z1N0b3JlQ29va2llRW50cnksCi0gICAgRG9Ob3RSZW1vdmVGcm9tQmFja2luZ1N0b3JlCi19Owot
Ci1lbnVtIENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgewotICAgIENvb2tpZVN0b3JhZ2VBY2Nl
cHRQb2xpY3lBbHdheXMsCi0gICAgQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU5ldmVyLAotICAg
IENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbgotfTsK
LQotLyoKLSAgKiBUaGUgQ29va2llTWFuYWdlciBjbGFzcyBpcyBhIHNpbmdsZXRvbiBjbGFzcyB0
aGF0IGhhbmRsZXMgYW5kIHNlbGVjdGl2ZWx5IHBlcnNpc3RzCi0gICogaW5jb21pbmcgY29va2ll
cy4gVGhpcyBjbGFzcyBjb250YWlucyBhIHRyZWUgb2YgZG9tYWlucyBmb3IgcXVpY2tlcgotICAq
IGNvb2tpZSBkb21haW4gbG9va3VwLiBUaGUgdG9wIG9mIHRoZSB0cmVlIHJlcHJlc2VudHMgYSBu
dWxsIHZhbHVlIGZvciBhIG51bGwgZG9tYWluLgotICAqIFRoZSBudWxsIGRvbWFpbiBjb250YWlu
cyByZWZlcmVuY2VzIHRvIHRvcCBsZXZlbCBkb21haW5zIGFuZCBlYWNoIG5vZGUgYmVsb3cKLSAg
KiByZXByZXNlbnRzIGEgc3ViLXNlY3Rpb24gb2YgYSBkb21haW4sIGRlbGltaXRlZCBieSAiLiIK
LSAgKgotICAqIElmIGEgY29va2llIGhhcyBhIGRvbWFpbiAiYS5iLmNvbSIsIGl0IHdpbGwgYmUg
c3RvcmVkIGluIHRoZSBub2RlIG5hbWVkICJhIiBpbiB0aGlzIHRyZWUuCi0gICogaW4gdGhlIGJy
YW5jaCAiIi0+ImNvbSItPiJiIi0+ImEiCi0gICoKLSAgKiBDb29raWUgc3BlY3MgZm9sbG93IHRo
ZSBSRkMgNjI2NSBzcGVjIHNoZWV0LgotICAqIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3Jm
YzYyNjUKLSAgKi8KLQotY2xhc3MgQ29va2llTWFuYWdlcjogcHVibGljIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHdWFyZGVkUG9pbnRlckJhc2UgewotcHVibGljOgotICAgIGJvb2wgY2FuTG9jYWxB
Y2Nlc3NBbGxDb29raWVzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREdW1wQWxsQ29va2llczsg
fQotICAgIHZvaWQgc2V0Q2FuTG9jYWxBY2Nlc3NBbGxDb29raWVzKGJvb2wgZW5hYmxlZCkgeyBt
X3Nob3VsZER1bXBBbGxDb29raWVzID0gZW5hYmxlZDsgfQotCi0gICAgdm9pZCBzZXRDb29raWVz
KGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIENvb2tpZUZpbHRlciA9IFdpdGhIdHRw
T25seUNvb2tpZXMpOwotICAgIHZvaWQgc2V0Q29va2llcyhjb25zdCBVUkwmLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgY29va2llcywgQ29va2llRmlsdGVyKTsKLQotICAgIHZvaWQgcmVtb3ZlQWxs
Q29va2llcyhCYWNraW5nU3RvcmVSZW1vdmFsUG9saWN5KTsKLSAgICB2b2lkIHJlbW92ZUNvb2tp
ZVdpdGhOYW1lKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7Ci0KLSAgICB1
bnNpZ25lZCBzaG9ydCBjb29raWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2NvdW50OyB9Ci0K
LSAgICB2b2lkIHNldENvb2tpZUphcihjb25zdCBjaGFyKik7Ci0gICAgY29uc3QgU3RyaW5nJiBj
b29raWVKYXIoKSBjb25zdCB7IHJldHVybiBtX2Nvb2tpZUphckZpbGVOYW1lOyB9Ci0KLSAgICAv
LyBDb3VudCB1cGRhdGUgbWV0aG9kCi0gICAgdm9pZCByZW1vdmVkQ29va2llKCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX2NvdW50ID4gMCk7Ci0gICAgICAgIC0tbV9jb3VudDsKLSAgICB9Ci0g
ICAgdm9pZCBhZGRlZENvb2tpZSgpIHsgKyttX2NvdW50OyB9Ci0KLSAgICBzdGF0aWMgdW5zaWdu
ZWQgbWF4Q29va2llTGVuZ3RoKCkgeyByZXR1cm4gc19tYXhDb29raWVMZW5ndGg7IH0KLQotICAg
IHZvaWQgc2V0Q29va2llUG9saWN5KENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5KSB7
IG1fcG9saWN5ID0gcG9saWN5OyB9Ci0gICAgQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBjb29r
aWVQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX3BvbGljeTsgfQotICAgIHZvaWQgc2V0UHJpdmF0
ZU1vZGUoYm9vbCk7Ci0KLSAgICBTdHJpbmcgZ2VuZXJhdGVIdG1sRnJhZ21lbnRGb3JDb29raWVz
KCk7Ci0gICAgU3RyaW5nIGdldENvb2tpZShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIENvb2tpZUZp
bHRlcikgY29uc3Q7Ci0KLSAgICAvLyBSZXR1cm5zIGFsbCBjb29raWVzIHRoYXQgYXJlIGFzc29j
aWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIFVSTCBhcyByYXcgY29va2llcy4KLSAgICB2b2lkIGdl
dFJhd0Nvb2tpZXMoVmVjdG9yPFJlZlB0cjxQYXJzZWRDb29raWU+ID4mIHN0YWNrT2ZDb29raWVz
LCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIENvb2tpZUZpbHRlciA9IFdpdGhIdHRwT25seUNvb2tp
ZXMpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBDb29raWVNYW5hZ2VyJiBjb29raWVN
YW5hZ2VyKCk7Ci0gICAgZnJpZW5kIGNsYXNzIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOwot
Ci0gICAgQ29va2llTWFuYWdlcigpOwotICAgIHZpcnR1YWwgfkNvb2tpZU1hbmFnZXIoKTsKLQot
ICAgIHZvaWQgY2hlY2tBbmRUcmVhdENvb2tpZShQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gcHJw
Q2FuZGlkYXRlQ29va2llLCBCYWNraW5nU3RvcmVSZW1vdmFsUG9saWN5LCBDb29raWVGaWx0ZXIg
PSBXaXRoSHR0cE9ubHlDb29raWVzKTsKLQotICAgIHZvaWQgYWRkQ29va2llVG9NYXAoQ29va2ll
TWFwKiB0YXJnZXRNYXAsIFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiBwcnBDYW5kaWRhdGVDb29r
aWUsIEJhY2tpbmdTdG9yZVJlbW92YWxQb2xpY3kgcG9zdFRvQmFja2luZ1N0b3JlLCBDb29raWVG
aWx0ZXIgPSBXaXRoSHR0cE9ubHlDb29raWVzKTsKLQotICAgIENvb2tpZU1hcCogZmluZE9yQ3Jl
YXRlQ29va2llTWFwKENvb2tpZU1hcCogcHJvdG9jb2xNYXAsIGNvbnN0IFBhc3NSZWZQdHI8UGFy
c2VkQ29va2llPiBjYW5kaWRhdGVDb29raWUpOwotCi0gICAgdm9pZCBpbml0aWF0ZUNvb2tpZUxp
bWl0Q2xlYW5VcCgpOwotICAgIHZvaWQgY29va2llTGltaXRDbGVhblVwKFRpbWVyPENvb2tpZU1h
bmFnZXI+Kik7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj4gbV9tYW5hZ2VyTWFw
OwotCi0gICAgdW5zaWduZWQgc2hvcnQgbV9jb3VudDsKLQotICAgIGJvb2wgbV9wcml2YXRlTW9k
ZTsKLSAgICBib29sIG1fc2hvdWxkRHVtcEFsbENvb2tpZXM7Ci0gICAgYm9vbCBtX3N5bmNlZFdp
dGhEYXRhYmFzZTsKLQotICAgIFN0cmluZyBtX2Nvb2tpZUphckZpbGVOYW1lOwotCi0gICAgLy8g
RklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBiZSByZW1vdmVkLgotICAgIHZvaWQgZ2V0QmFja2lu
Z1N0b3JlQ29va2llcygpOwotCi0gICAgLy8gQ29va2llIHNpemUgbGltaXQgb2YgNGtCIGFzIGFk
dmlzZWQgcGVyIFJGQzIxMDkKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19tYXhDb29raWVM
ZW5ndGggPSA0MDk2OwotCi0gICAgQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBtX3BvbGljeTsK
LQotICAgIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlKiBtX2Nvb2tpZUJhY2tpbmdTdG9yZTsK
LSAgICBUaW1lcjxDb29raWVNYW5hZ2VyPiBtX2xpbWl0VGltZXI7Ci0KLSAgICBESVNBQkxFX0NP
UFkoQ29va2llTWFuYWdlcikKLX07Ci0KLS8vIEdldCB0aGUgZ2xvYmFsIGluc3RhbmNlLgotQ29v
a2llTWFuYWdlciYgY29va2llTWFuYWdlcigpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBDb29raWVNYW5hZ2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2JsYWNrYmVycnkvQ29va2llTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwyMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBK
dWxpZW4gQ2hhZmZyYWl4IDxqdWxpZW4uY2hhZmZyYWl4QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNkZWZpbmUgRU5BQkxFX0NPT0tJRV9ERUJVRyAwCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJDb29raWVNYXAuaCIKLQotI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIK
LSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGFyc2VkQ29va2llLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFX0NPT0tJRV9ERUJVRwotI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgotI2RlZmluZSBDb29raWVMb2coZm9ybWF0LCAu
Li4pIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkxvZ0xldmVsSW5mbywgZm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKLSNlbHNlCi0jZGVmaW5lIENv
b2tpZUxvZyhmb3JtYXQsIC4uLikKLSNlbmRpZiAvLyBFTkFCTEVfQ09PS0lFX0RFQlVHCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotQ29va2llTWFwOjpDb29raWVNYXAoY29uc3QgU3RyaW5nJiBu
YW1lKQotICAgIDogbV9vbGRlc3RDb29raWUoMCkKLSAgICAsIG1fbmFtZShuYW1lKQotewotfQot
Ci1Db29raWVNYXA6On5Db29raWVNYXAoKQotewotICAgIGRlbGV0ZUFsbENvb2tpZXNBbmREb21h
aW5zKCk7Ci19Ci0KLWJvb2wgQ29va2llTWFwOjphZGRPclJlcGxhY2VDb29raWUoUGFzc1JlZlB0
cjxQYXJzZWRDb29raWU+IHBycENhbmRpZGF0ZUNvb2tpZSwgUmVmUHRyPFBhcnNlZENvb2tpZT4m
IHJlcGxhY2VkQ29va2llLCBDb29raWVGaWx0ZXIgZmlsdGVyKQotewotICAgIFJlZlB0cjxQYXJz
ZWRDb29raWU+IGNhbmRpZGF0ZUNvb2tpZSA9IHBycENhbmRpZGF0ZUNvb2tpZTsKLSAgICBDb29r
aWVMb2coIkNvb2tpZU1hcCAtIEF0dGVtcHRpbmcgdG8gYWRkIGNvb2tpZSAtICVzIiwgY29va2ll
LT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBzaXplX3QgY29va2llQ291bnQgPSBtX2Nv
b2tpZVZlY3Rvci5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb29raWVDb3Vu
dDsgaSsrKSB7Ci0gICAgICAgIGlmIChtX2Nvb2tpZVZlY3RvcltpXS0+bmFtZSgpID09IGNhbmRp
ZGF0ZUNvb2tpZS0+bmFtZSgpICYmIG1fY29va2llVmVjdG9yW2ldLT5wYXRoKCkgPT0gY2FuZGlk
YXRlQ29va2llLT5wYXRoKCkpIHsKLQotICAgICAgICAgICAgaWYgKGZpbHRlciA9PSBOb0h0dHBP
bmx5Q29va2llICYmIG1fY29va2llVmVjdG9yW2ldLT5pc0h0dHBPbmx5KCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICByZXBsYWNlZENvb2tpZSA9IG1fY29v
a2llVmVjdG9yW2ldOwotICAgICAgICAgICAgbV9jb29raWVWZWN0b3JbaV0gPSBjYW5kaWRhdGVD
b29raWU7Ci0gICAgICAgICAgICBpZiAocmVwbGFjZWRDb29raWUgPT0gbV9vbGRlc3RDb29raWUp
Ci0gICAgICAgICAgICAgICAgdXBkYXRlT2xkZXN0Q29va2llKCk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29va2llVmVjdG9yLmFwcGVuZChj
YW5kaWRhdGVDb29raWUpOwotICAgIGlmICghY2FuZGlkYXRlQ29va2llLT5pc1Nlc3Npb24oKSkK
LSAgICAgICAgY29va2llTWFuYWdlcigpLmFkZGVkQ29va2llKCk7Ci0gICAgaWYgKCFtX29sZGVz
dENvb2tpZSB8fCBtX29sZGVzdENvb2tpZS0+bGFzdEFjY2Vzc2VkKCkgPiBjYW5kaWRhdGVDb29r
aWUtPmxhc3RBY2Nlc3NlZCgpKQotICAgICAgICBtX29sZGVzdENvb2tpZSA9IGNhbmRpZGF0ZUNv
b2tpZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IENv
b2tpZU1hcDo6cmVtb3ZlQ29va2llQXRJbmRleChpbnQgcG9zaXRpb24sIGNvbnN0IFBhc3NSZWZQ
dHI8UGFyc2VkQ29va2llPiBjb29raWUpCi17Ci0gICAgQVNTRVJUKDAgPD0gcG9zaXRpb24gJiYg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvc2l0aW9uKSA8IG1fY29va2llVmVjdG9yLnNpemUoKSk7
Ci0gICAgUmVmUHRyPFBhcnNlZENvb2tpZT4gcHJldkNvb2tpZSA9IG1fY29va2llVmVjdG9yW3Bv
c2l0aW9uXTsKLSAgICBtX2Nvb2tpZVZlY3Rvci5yZW1vdmUocG9zaXRpb24pOwotCi0gICAgaWYg
KHByZXZDb29raWUgPT0gbV9vbGRlc3RDb29raWUpCi0gICAgICAgIHVwZGF0ZU9sZGVzdENvb2tp
ZSgpOwotICAgIGVsc2UgaWYgKHByZXZDb29raWUgIT0gY29va2llKSB7Ci0gICAgICAgIC8vIFRo
ZSBjb29raWUgd2UgdXNlZCB0byBzZWFyY2ggaXMgZm9yY2UgZXhwaXJlZCwgd2UgbXVzdCBkbyB0
aGUgc2FtZQotICAgICAgICAvLyB0byB0aGUgY29va2llIGluIG1lbW9yeSB0b28uCi0gICAgICAg
IGlmIChjb29raWUtPmlzRm9yY2VFeHBpcmVkKCkpCi0gICAgICAgICAgICBwcmV2Q29va2llLT5m
b3JjZUV4cGlyZSgpOwotICAgIH0KLQotICAgIGlmICghcHJldkNvb2tpZS0+aXNTZXNzaW9uKCkp
Ci0gICAgICAgIGNvb2tpZU1hbmFnZXIoKS5yZW1vdmVkQ29va2llKCk7Ci0gICAgcmV0dXJuIHBy
ZXZDb29raWU7Ci19Ci0KLVBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiBDb29raWVNYXA6OnJlbW92
ZUNvb2tpZShjb25zdCBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gY29va2llLCBDb29raWVGaWx0
ZXIgZmlsdGVyKQotewotICAgIHNpemVfdCBjb29raWVDb3VudCA9IG1fY29va2llVmVjdG9yLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgY29va2llQ291
bnQ7ICsrcG9zaXRpb24pIHsKLSAgICAgICAgaWYgKG1fY29va2llVmVjdG9yW3Bvc2l0aW9uXS0+
bmFtZSgpID09IGNvb2tpZS0+bmFtZSgpICYmIG1fY29va2llVmVjdG9yW3Bvc2l0aW9uXS0+cGF0
aCgpID09IGNvb2tpZS0+cGF0aCgpKSB7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyID09IE5vSHR0
cE9ubHlDb29raWUgJiYgbV9jb29raWVWZWN0b3JbcG9zaXRpb25dLT5pc0h0dHBPbmx5KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gcmVtb3ZlQ29va2ll
QXRJbmRleChwb3NpdGlvbiwgY29va2llKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
MDsKLX0KLQotQ29va2llTWFwKiBDb29raWVNYXA6OmdldFN1YmRvbWFpbk1hcChjb25zdCBTdHJp
bmcmIHN1YmRvbWFpbikKLXsKLSNpZiBFTkFCTEVfQ09PS0lFX0RFQlVHCi0gICAgaWYgKCFtX3N1
YmRvbWFpbnMuY29udGFpbnMoc3ViZG9tYWluKSkKLSAgICAgICAgQ29va2llTG9nKCJDb29raWVN
YXAgLSAlcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIG1hcCIsIHN1YmRvbWFpbi51dGY4KCkuZGF0
YSgpKTsKLSNlbmRpZgotICAgIHJldHVybiBtX3N1YmRvbWFpbnMuZ2V0KHN1YmRvbWFpbik7Ci19
Ci0KLXZvaWQgQ29va2llTWFwOjphZGRTdWJkb21haW5NYXAoY29uc3QgU3RyaW5nJiBzdWJkb21h
aW4sIENvb2tpZU1hcCogbmV3RG9tYWluKQotewotICAgIENvb2tpZUxvZygiQ29va2llTWFwIC0g
QXR0ZW1wdGluZyB0byBhZGQgc3ViZG9tYWluIC0gJXMiLCBzdWJkb21haW4udXRmOCgpLmRhdGEo
KSk7Ci0gICAgbV9zdWJkb21haW5zLmFkZChzdWJkb21haW4sIG5ld0RvbWFpbik7Ci19Ci0KLXZv
aWQgQ29va2llTWFwOjpnZXRBbGxDb29raWVzKFZlY3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+
KiBzdGFja09mQ29va2llcykKLXsKLSAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIEF0dGVtcHRp
bmcgdG8gY29weSBNYXA6JXMgY29va2llcyB3aXRoICVkIGNvb2tpZXMgaW50byB2ZWN0b3JzIiwg
bV9uYW1lLnV0ZjgoKS5kYXRhKCksIG1fY29va2llVmVjdG9yLnNpemUoKSk7Ci0KLSAgICBzdGFj
a09mQ29va2llcy0+cmVzZXJ2ZUNhcGFjaXR5KHN0YWNrT2ZDb29raWVzLT5zaXplKCkgKyBtX2Nv
b2tpZVZlY3Rvci5zaXplKCkpOwotCi0gICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKLSAgICB3aGls
ZSAocG9zaXRpb24gPCBtX2Nvb2tpZVZlY3Rvci5zaXplKCkpIHsKLSAgICAgICAgUmVmUHRyPFBh
cnNlZENvb2tpZT4gbmV3Q29va2llID0gbV9jb29raWVWZWN0b3JbcG9zaXRpb25dOwotICAgICAg
ICBpZiAobmV3Q29va2llLT5oYXNFeHBpcmVkKCkpIHsKLSAgICAgICAgICAgIC8vIE5vdGljZSB0
aGF0IHdlIGRvbid0IGRlbGV0ZSBmcm9tIGJhY2tpbmdzdG9yZS4gVGhlc2UgZXhwaXJlZCBjb29r
aWVzIHdpbGwgYmUKLSAgICAgICAgICAgIC8vIGRlbGV0ZWQgd2hlbiBtYW5hZ2VyIGxvYWRzIHRo
ZSBiYWNraW5nc3RvcmUgYWdhaW4uCi0gICAgICAgICAgICByZW1vdmVDb29raWVBdEluZGV4KHBv
c2l0aW9uLCBuZXdDb29raWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhY2tP
ZkNvb2tpZXMtPmFwcGVuZChuZXdDb29raWUpOwotICAgICAgICAgICAgcG9zaXRpb24rKzsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIENvb2tpZUxvZygiQ29va2llTWFwIC0gc3RhY2sgb2YgY29v
a2llcyBub3cgaGF2ZSAlZCBjb29raWVzIGluIGl0IiwgKCpzdGFja09mQ29va2llcykuc2l6ZSgp
KTsKLX0KLQotUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IENvb2tpZU1hcDo6cmVtb3ZlT2xkZXN0
Q29va2llKCkKLXsKLSAgICAvLyBGSVhNRTogTWFrZSBzdXJlIGl0IGZpbmRzIHRoZSBHTE9CQUwg
b2xkZXN0IGNvb2tpZSwgbm90IHRoZSBmaXJzdCBvbGRlc3Rjb29raWUgaXQgZmluZHMuCi0gICAg
UmVmUHRyPFBhcnNlZENvb2tpZT4gb2xkZXN0Q29va2llID0gbV9vbGRlc3RDb29raWU7Ci0KLSAg
ICAvLyBJZiB0aGlzIG1hcCBoYXMgYW4gb2xkZXN0Q29va2llLCByZW1vdmUgaXQuIElmIG5vdCwg
ZG8gYSBERlMgdG8gc2VhcmNoIGZvciBhIGNoaWxkIHRoYXQgZG9lcwotICAgIGlmICghb2xkZXN0
Q29va2llKSB7Ci0KLSAgICAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBubyBvbGRlc3RDb29r
aWUgZXhpc3QiKTsKLQotICAgICAgICAvLyBCYXNlIGNhc2UgaXMgaWYgdGhlIG1hcCBoYXMgbm8g
Y2hpbGQgYW5kIG5vIGNvb2tpZXMsIHdlIHJldHVybiBhIG51bGwuCi0gICAgICAgIGlmICghbV9z
dWJkb21haW5zLnNpemUoKSkgewotICAgICAgICAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBu
byBzdWJkb21haW5zLCBiYXNlIGNhc2UgcmVhY2hlZCwgcmV0dXJuIDAiKTsKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBs
b29raW5nIGludG8gc3ViZG9tYWlucyIpOwotCi0gICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcs
IENvb2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IG1fc3ViZG9tYWlucy5iZWdpbigpOyBpdCAhPSBt
X3N1YmRvbWFpbnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIG9sZGVzdENvb2tpZSA9IGl0
LT52YWx1ZS0+cmVtb3ZlT2xkZXN0Q29va2llKCk7Ci0gICAgICAgICAgICBpZiAob2xkZXN0Q29v
a2llKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBvbGRlc3RDb29raWUgZXhpc3QuIik7Ci0gICAg
ICAgIG9sZGVzdENvb2tpZSA9IHJlbW92ZUNvb2tpZShtX29sZGVzdENvb2tpZSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG9sZGVzdENvb2tpZTsKLX0KLQotdm9pZCBDb29raWVNYXA6OnVwZGF0ZU9s
ZGVzdENvb2tpZSgpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBtX2Nvb2tpZVZlY3Rvci5zaXplKCk7
Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIG1fb2xkZXN0Q29va2llID0gMDsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fb2xkZXN0Q29va2llID0gbV9jb29raWVWZWN0b3JbMF07
Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
b2xkZXN0Q29va2llLT5sYXN0QWNjZXNzZWQoKSA+IG1fY29va2llVmVjdG9yW2ldLT5sYXN0QWNj
ZXNzZWQoKSkKLSAgICAgICAgICAgIG1fb2xkZXN0Q29va2llID0gbV9jb29raWVWZWN0b3JbaV07
Ci0gICAgfQotfQotCi12b2lkIENvb2tpZU1hcDo6ZGVsZXRlQWxsQ29va2llc0FuZERvbWFpbnMo
KQotewotICAgIGRlcHJlY2F0ZWREZWxldGVBbGxWYWx1ZXMobV9zdWJkb21haW5zKTsKLSAgICBt
X3N1YmRvbWFpbnMuY2xlYXIoKTsKLSAgICBtX2Nvb2tpZVZlY3Rvci5jbGVhcigpOwotCi0gICAg
bV9vbGRlc3RDb29raWUgPSAwOwotfQotCi12b2lkIENvb2tpZU1hcDo6Z2V0QWxsQ2hpbGRDb29r
aWVzKFZlY3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+KiBzdGFja09mQ29va2llcykKLXsKLSAg
ICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGdldEFsbENoaWxkQ29va2llcyBpbiBNYXAgLSAlcyIs
IGdldE5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBnZXRBbGxDb29raWVzKHN0YWNrT2ZDb29r
aWVzKTsKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgaXQg
PSBtX3N1YmRvbWFpbnMuYmVnaW4oKTsgaXQgIT0gbV9zdWJkb21haW5zLmVuZCgpOyArK2l0KQot
ICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcyhzdGFja09mQ29va2llcyk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2JsYWNrYmVycnkvQ29va2llTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBKdWxpZW4gQ2hhZmZyYWl4IDxq
dWxpZW4uY2hhZmZyYWl4QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29v
a2llTWFwX2gKLSNkZWZpbmUgQ29va2llTWFwX2gKLQotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1lbnVtIENvb2tpZUZpbHRlciB7Ci0gICAgTm9IdHRwT25seUNvb2tpZSwKLSAgICBXaXRo
SHR0cE9ubHlDb29raWVzLAotfTsKLQotY2xhc3MgUGFyc2VkQ29va2llOwotCi0vKiBBIGNvb2tp
ZSBtYXAgaXMgYSBub2RlIGluIHRoZSB0cmVlIGhlbGQgYnkgQ29va2llTWFuYWdlciB0aGF0IHJl
cHJlc2VudHMKLSAqIGNvb2tpZXMgdGhhdCBtYXRjaGVzIGEgY29tbW9uIGRvbWFpbi4KLSAqCi0g
KiBBIENvb2tpZU1hcCBob2xkcyByZWZlcmVuY2UgdG8gdGhlIGNvb2tpZXMgdGhhdCBpdCBjb250
YWlucyBhbmQgdGhlIGNoaWxkCi0gKiBkb21haW5zIHRoYXQgZXhpc3Qgd2l0aGluIHRoZSB0cmVl
LgotICoKLSAqIFRoZSBudW1iZXIgb2YgY29va2llIHBlciBob3N0IGlzIGxpbWl0ZWQgYnkgQ29v
a2llTWFuYWdlcjo6c19tYXhDb29raWVDb3VudFBlckhvc3QKLSAqLwotCi1jbGFzcyBDb29raWVN
YXAgewotCi1wdWJsaWM6Ci0gICAgQ29va2llTWFwKGNvbnN0IFN0cmluZyYgbmFtZSA9ICIiKTsK
LSAgICB+Q29va2llTWFwKCk7Ci0KLSAgICB1bnNpZ25lZCBjb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29va2llVmVjdG9yLnNpemUoKTsgfQotICAgIGNvbnN0IFN0cmluZyYgZ2V0TmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotCi0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZSBjYW5k
aWRhdGVDb29raWUgaXMgcmVqZWN0ZWQuCi0gICAgYm9vbCBhZGRPclJlcGxhY2VDb29raWUoUGFz
c1JlZlB0cjxQYXJzZWRDb29raWU+IHBycENhbmRpZGF0ZUNvb2tpZSwgUmVmUHRyPFBhcnNlZENv
b2tpZT4mIHJlcGxhY2VkQ29va2llLCBDb29raWVGaWx0ZXIgPSBXaXRoSHR0cE9ubHlDb29raWVz
KTsKLQotICAgIC8vIE5lZWQgdG8gcmV0dXJuIHRoZSByZWZlcmVuY2UgdG8gdGhlIHJlbW92ZWQg
Y29va2llIHNvIG1hbmFnZXIgY2FuIGRlYWwgd2l0aCBpdCAoZ2FyYmFnZSBjb2xsZWN0KS4KLSAg
ICBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gcmVtb3ZlQ29va2llKGNvbnN0IFBhc3NSZWZQdHI8
UGFyc2VkQ29va2llPiwgQ29va2llRmlsdGVyID0gV2l0aEh0dHBPbmx5Q29va2llcyk7Ci0KLSAg
ICAvLyBSZXR1cm5zIGEgbWFwIHdpdGggdGhhdCBnaXZlbiBzdWJkb21haW4uCi0gICAgQ29va2ll
TWFwKiBnZXRTdWJkb21haW5NYXAoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBhZGRTdWJkb21h
aW5NYXAoY29uc3QgU3RyaW5nJiwgQ29va2llTWFwKik7Ci0gICAgdm9pZCBkZWxldGVBbGxDb29r
aWVzQW5kRG9tYWlucygpOwotCi0gICAgdm9pZCBnZXRBbGxDb29raWVzKFZlY3RvcjxSZWZQdHI8
UGFyc2VkQ29va2llPiA+Kik7Ci0gICAgdm9pZCBnZXRBbGxDaGlsZENvb2tpZXMoVmVjdG9yPFJl
ZlB0cjxQYXJzZWRDb29raWU+ID4qIHN0YWNrT2ZDb29raWVzKTsKLSAgICBQYXNzUmVmUHRyPFBh
cnNlZENvb2tpZT4gcmVtb3ZlT2xkZXN0Q29va2llKCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1
cGRhdGVPbGRlc3RDb29raWUoKTsKLSAgICBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gcmVtb3Zl
Q29va2llQXRJbmRleChpbnQgcG9zaXRpb24sIGNvbnN0IFBhc3NSZWZQdHI8UGFyc2VkQ29va2ll
Pik7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPiBtX2Nvb2tpZVZlY3RvcjsK
LSAgICAvLyBUaGUga2V5IGlzIGEgc3Vic2VjdGlvbiBvZiB0aGUgZG9tYWluLgotICAgIC8vIGV4
OiBpZiBpbnNlcnRpbmcgYWNjb3VudHMuZ29vZ2xlLmNvbSAmIHRoaXMgY29va2llbWFwIGlzICJj
b20iLCB0aGlzIHN1YmRvbWFpbiBtYXAgd2lsbCBjb250YWluICJnb29nbGUiCi0gICAgLy8gdGhl
ICJnb29nbGUiIGNvb2tpZW1hcCB3aWxsIGNvbnRhaW4gImFjY291bnRzIiBpbiBpdHMgc3ViZG9t
YWluIG1hcC4KLSAgICBIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj4gbV9zdWJkb21haW5zOwot
Ci0gICAgLy8gU3RvcmUgdGhlIG9sZGVzdCBjb29raWUgdG8gc3BlZWQgdXAgTFJVIGNoZWNrcy4K
LSAgICBSZWZQdHI8UGFyc2VkQ29va2llPiBtX29sZGVzdENvb2tpZTsKLSAgICBjb25zdCBTdHJp
bmcgbV9uYW1lOwotCi0gICAgLy8gRklYTUUgOiBzaG91bGQgaGF2ZSBhIG1fc2hvdWxkVXBkYXRl
IGZsYWcgdG8gdXBkYXRlIHRoZSBuZXR3b3JrIGxheWVyIG9ubHkgd2hlbiB0aGUgbWFwIGhhcyBj
aGFuZ2VkLgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ29va2ll
TWFwX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5
L0Nvb2tpZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2JsYWNrYmVycnkvQ29va2llUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0
MzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKdWxpZW4gQ2hhZmZyYWl4IDxq
Y2hhZmZyYWl4QHBsZXlvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovIAotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ29va2llUGFyc2VyLmgiCi0KLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiUGFyc2VkQ29va2llLmgiCi0jaW5jbHVkZSA8bmV0d29yay9Eb21haW5U
b29scy5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotI2RlZmluZSBMT0dfRVJST1JfQU5EX1JFVFVSTihmb3JtYXQsIC4u
LikgXAotICAgIHsgXAotICAgICAgICBMT0dfRVJST1IoZm9ybWF0LCAjIyBfX1ZBX0FSR1NfXyk7
IFwKLSAgICAgICAgcmV0dXJuIDA7IFwKLSAgICB9Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0Nv
b2tpZUhlYWRlclNlcGFyYXRvcihVQ2hhciBjKQotewotICAgIHJldHVybiAoYyA9PSAnXHInIHx8
IGMgPT0nXG4nKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzTGlnaHR3ZWlnaHRTcGFjZShV
Q2hhciBjKQotewotICAgIHJldHVybiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKTsKLX0KLQotQ29v
a2llUGFyc2VyOjpDb29raWVQYXJzZXIoY29uc3QgVVJMJiBkZWZhdWx0Q29va2llVVJMKQotICAg
IDogbV9kZWZhdWx0Q29va2llVVJMKGRlZmF1bHRDb29raWVVUkwpCi17Ci0gICAgbV9kZWZhdWx0
Q29va2llSG9zdCA9IGRlZmF1bHRDb29raWVVUkwuaG9zdCgpOwotICAgIG1fZGVmYXVsdERvbWFp
bklzSVBBZGRyZXNzID0gZmFsc2U7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBo
b3N0RG9tYWluQ2Fub25pY2FsID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OmdldENhbm9uaWNhbElQ
Rm9ybWF0KG1fZGVmYXVsdENvb2tpZUhvc3QpOwotICAgIGlmICghaG9zdERvbWFpbkNhbm9uaWNh
bC5lbXB0eSgpKSB7Ci0gICAgICAgIG1fZGVmYXVsdENvb2tpZUhvc3QgPSBob3N0RG9tYWluQ2Fu
b25pY2FsOwotICAgICAgICBtX2RlZmF1bHREb21haW5Jc0lQQWRkcmVzcyA9IHRydWU7Ci0gICAg
fQotfQotCi1Db29raWVQYXJzZXI6On5Db29raWVQYXJzZXIoKQotewotfQotCi1WZWN0b3I8UmVm
UHRyPFBhcnNlZENvb2tpZT4gPiBDb29raWVQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgY29v
a2llcykKLXsKLSAgICB1bnNpZ25lZCBjb29raWVTdGFydCwgY29va2llRW5kID0gMDsKLSAgICBk
b3VibGUgY3VyVGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxQYXJzZWRD
b29raWU+LCA0PiBwYXJzZWRDb29raWVzOwotCi0gICAgdW5zaWduZWQgY29va2llc0xlbmd0aCA9
IGNvb2tpZXMubGVuZ3RoKCk7Ci0gICAgaWYgKCFjb29raWVzTGVuZ3RoKSAvLyBDb2RlIGJlbG93
IGRvZXNuJ3QgaGFuZGxlIHRoaXMgY2FzZQotICAgICAgICByZXR1cm4gcGFyc2VkQ29va2llczsK
LQotICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgaGVhZGVyIHRvIHBhcnNlIGFsbCB0aGUgY29va2ll
cy4KLSAgICB3aGlsZSAoY29va2llRW5kIDw9IGNvb2tpZXNMZW5ndGgpIHsKLSAgICAgICAgY29v
a2llU3RhcnQgPSBjb29raWVFbmQ7Ci0gICAgICAgIAotICAgICAgICAvLyBGaW5kIGEgY29va2ll
IHNlcGFyYXRvci4KLSAgICAgICAgd2hpbGUgKGNvb2tpZUVuZCA8PSBjb29raWVzTGVuZ3RoICYm
ICFpc0Nvb2tpZUhlYWRlclNlcGFyYXRvcihjb29raWVzW2Nvb2tpZUVuZF0pKQotICAgICAgICAg
ICAgY29va2llRW5kKys7Ci0KLSAgICAgICAgLy8gRGV0ZWN0IGFuIGVtcHR5IGNvb2tpZSBhbmQg
Z28gdG8gdGhlIG5leHQgb25lLgotICAgICAgICBpZiAoY29va2llU3RhcnQgPT0gY29va2llRW5k
KSB7Ci0gICAgICAgICAgICArK2Nvb2tpZUVuZDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGNvb2tpZUVuZCA8IGNvb2tpZXNMZW5ndGggJiYgaXNDb29r
aWVIZWFkZXJTZXBhcmF0b3IoY29va2llc1tjb29raWVFbmRdKSkKLSAgICAgICAgICAgICsrY29v
a2llRW5kOwotCi0gICAgICAgIFJlZlB0cjxQYXJzZWRDb29raWU+IGNvb2tpZSA9IHBhcnNlT25l
Q29va2llKGNvb2tpZXMsIGNvb2tpZVN0YXJ0LCBjb29raWVFbmQgLSAxLCBjdXJUaW1lKTsKLSAg
ICAgICAgaWYgKGNvb2tpZSkKLSAgICAgICAgICAgIHBhcnNlZENvb2tpZXMuYXBwZW5kKGNvb2tp
ZSk7Ci0gICAgfQotICAgIHJldHVybiBwYXJzZWRDb29raWVzOwotfQotCi1QYXNzUmVmUHRyPFBh
cnNlZENvb2tpZT4gQ29va2llUGFyc2VyOjpwYXJzZU9uZUNvb2tpZShjb25zdCBTdHJpbmcmIGNv
b2tpZSkKLXsKLSAgICByZXR1cm4gcGFyc2VPbmVDb29raWUoY29va2llLCAwLCBjb29raWUubGVu
Z3RoKCkgLSAxLCBjdXJyZW50VGltZSgpKTsKLX0KLQotLy8gVGhlIGNvb2tpZSBTdHJpbmcgcGFz
c2VkIGludG8gdGhpcyBtZXRob2Qgd2lsbCBvbmx5IGNvbnRpYW4gdGhlIG5hbWUgdmFsdWUgcGFp
cnMgYXMgd2VsbCBhcyBvdGhlciByZWxhdGVkIGNvb2tpZQotLy8gYXR0cmlidXRlcyBzdWNoIGFz
IG1heC1hZ2UgYW5kIGRvbWFpbi4gU2V0LUNvb2tpZSBzaG91bGQgbmV2ZXIgYmUgcGFydCBvZiB0
aGlzIHN0cmluZy4KLVBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiBDb29raWVQYXJzZXI6OnBhcnNl
T25lQ29va2llKGNvbnN0IFN0cmluZyYgY29va2llLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
ZW5kLCBkb3VibGUgY3VyVGltZSkKLXsKLSAgICBSZWZQdHI8UGFyc2VkQ29va2llPiByZXMgPSBQ
YXJzZWRDb29raWU6OmNyZWF0ZShjdXJUaW1lKTsKLQotICAgIGlmICghcmVzKQotICAgICAgICBM
T0dfRVJST1JfQU5EX1JFVFVSTigiT3V0IG9mIG1lbW9yeSIpOwotCi0gICAgcmVzLT5zZXRQcm90
b2NvbChtX2RlZmF1bHRDb29raWVVUkwucHJvdG9jb2woKSk7Ci0KLSAgICAvLyBQYXJzZSBbTkFN
RSAiPSJdIFZBTFVFCi0gICAgdW5zaWduZWQgdG9rZW5FbmQgPSBzdGFydDsgLy8gVG9rZW4gZW5k
IGNvbnRhaW5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgJz0nIG9yIHRoZSBlbmQgb2YgYSB0b2tlbgot
ICAgIHVuc2lnbmVkIHBhaXJFbmQgPSBzdGFydDsgLy8gUGFpciBlbmQgY29udGFpbnMgYWx3YXlz
IHRoZSBwb3NpdGlvbiBvZiB0aGUgJzsnCi0KLSAgICAvLyBGaW5kIHRoZSBmaXJzdCAnOycgd2hp
Y2ggaXMgbm90IGRvdWJsZS1xdW90ZWQgYW5kIHRoZSAnPScgKGlmIHRoZXkgZXhpc3QpLgotICAg
IGJvb2wgZm91bmRFcXVhbCA9IGZhbHNlOwotICAgIHdoaWxlIChwYWlyRW5kIDwgZW5kICYmIGNv
b2tpZVtwYWlyRW5kXSAhPSAnOycpIHsKLSAgICAgICAgaWYgKGNvb2tpZVtwYWlyRW5kXSA9PSAn
PScpIHsKLSAgICAgICAgICAgIGlmICh0b2tlbkVuZCA9PSBzdGFydCkgewotICAgICAgICAgICAg
ICAgIHRva2VuRW5kID0gcGFpckVuZDsKLSAgICAgICAgICAgICAgICBmb3VuZEVxdWFsID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb29raWVbcGFpckVuZF0gPT0g
JyInKSB7Ci0gICAgICAgICAgICBzaXplX3Qgc2Vjb25kUXVvdGVQb3NpdGlvbiA9IGNvb2tpZS5m
aW5kKCciJywgcGFpckVuZCArIDEpOwotICAgICAgICAgICAgaWYgKHNlY29uZFF1b3RlUG9zaXRp
b24gIT0gbm90Rm91bmQgJiYgc2Vjb25kUXVvdGVQb3NpdGlvbiA8PSBlbmQpIHsKLSAgICAgICAg
ICAgICAgICBwYWlyRW5kID0gc2Vjb25kUXVvdGVQb3NpdGlvbiArIDE7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcGFpckVuZCsr
OwotICAgIH0KLQotICAgIHVuc2lnbmVkIHRva2VuU3RhcnQgPSBzdGFydDsKLQotICAgIGJvb2wg
aGFzTmFtZSA9IGZhbHNlOyAvLyBUaGlzIGlzIGEgaGFjayB0byBhdm9pZCBjaGFuZ2luZyB0b28g
bXVjaCBpbiB0aGlzIGJydXRhbGx5IGJyaXR0bGUgY29kZS4KLSAgICBpZiAodG9rZW5FbmQgIT0g
c3RhcnQpIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgYSAnPScgc28gcGFyc2UgdGhlIE5BTUUKLSAg
ICAgICAgdW5zaWduZWQgbmFtZUVuZCA9IHRva2VuRW5kOwotCi0gICAgICAgIC8vIFRoZSB0b2tl
bkVuZCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlICc9JyBzbyB0aGUgbmFtZUVuZCBpcyBvbmUgbGVz
cwotICAgICAgICBuYW1lRW5kLS07Ci0KLSAgICAgICAgLy8gUmVtb3ZlIGxpZ2h0d2VpZ2h0IHNw
YWNlcy4KLSAgICAgICAgd2hpbGUgKG5hbWVFbmQgJiYgaXNMaWdodHdlaWdodFNwYWNlKGNvb2tp
ZVtuYW1lRW5kXSkpCi0gICAgICAgICAgICBuYW1lRW5kLS07Ci0KLSAgICAgICAgd2hpbGUgKHRv
a2VuU3RhcnQgPCBuYW1lRW5kICYmIGlzTGlnaHR3ZWlnaHRTcGFjZShjb29raWVbdG9rZW5TdGFy
dF0pKQotICAgICAgICAgICAgdG9rZW5TdGFydCsrOwotCi0gICAgICAgIGlmIChuYW1lRW5kICsg
MSA8PSB0b2tlblN0YXJ0KQotICAgICAgICAgICAgTE9HX0VSUk9SX0FORF9SRVRVUk4oIkVtcHR5
IG5hbWUuIFJlamVjdGluZyB0aGUgY29va2llIik7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUgPSBj
b29raWUuc3Vic3RyaW5nKHRva2VuU3RhcnQsIG5hbWVFbmQgKyAxIC0gc3RhcnQpOwotICAgICAg
ICByZXMtPnNldE5hbWUobmFtZSk7Ci0gICAgICAgIGhhc05hbWUgPSB0cnVlOwotICAgIH0KLQot
ICAgIC8vIE5vdyBwYXJzZSB0aGUgVkFMVUUKLSAgICB0b2tlblN0YXJ0ID0gdG9rZW5FbmQgKyAx
OwotICAgIGlmICghaGFzTmFtZSkKLSAgICAgICAgLS10b2tlblN0YXJ0OwotCi0gICAgLy8gU2tp
cCBsaWdodHdlaWdodCBzcGFjZXMgaW4gb3VyIHRva2VuCi0gICAgd2hpbGUgKHRva2VuU3RhcnQg
PCBwYWlyRW5kICYmIGlzTGlnaHR3ZWlnaHRTcGFjZShjb29raWVbdG9rZW5TdGFydF0pKQotICAg
ICAgICB0b2tlblN0YXJ0Kys7Ci0KLSAgICB0b2tlbkVuZCA9IHBhaXJFbmQ7Ci0gICAgd2hpbGUg
KHRva2VuRW5kID4gdG9rZW5TdGFydCAmJiBpc0xpZ2h0d2VpZ2h0U3BhY2UoY29va2llW3Rva2Vu
RW5kIC0gMV0pKQotICAgICAgICB0b2tlbkVuZC0tOwotCi0gICAgU3RyaW5nIHZhbHVlOwotICAg
IGlmICh0b2tlbkVuZCA9PSB0b2tlblN0YXJ0KSB7Ci0gICAgICAgIC8vIEZpcmVmb3ggYWNjZXB0
cyBlbXB0eSB2YWx1ZSBzbyB3ZSB3aWxsIGRvIHRoZSBzYW1lCi0gICAgICAgIHZhbHVlID0gU3Ry
aW5nKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZhbHVlID0gY29va2llLnN1YnN0cmluZyh0b2tl
blN0YXJ0LCB0b2tlbkVuZCAtIHRva2VuU3RhcnQpOwotCi0gICAgaWYgKGhhc05hbWUpCi0gICAg
ICAgIHJlcy0+c2V0VmFsdWUodmFsdWUpOwotICAgIGVsc2UgaWYgKGZvdW5kRXF1YWwpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAgICAgcmVzLT5zZXROYW1lKHZhbHVlKTsgLy8g
Tm8gTkFNRT1WQUxVRSwgb25seSBOQU1FCi0KLSAgICB3aGlsZSAocGFpckVuZCA8IGVuZCkgewot
ICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG5leHQgcGFpciBhcyBwYWlyRW5kIGlzIG9uIHRoZSAn
OycgYW5kIGZhc3QtZm9yd2FyZCBhbnkgbGlnaHR3ZWlnaHQgc3BhY2VzLgotICAgICAgICBwYWly
RW5kKys7Ci0gICAgICAgIHdoaWxlIChwYWlyRW5kIDwgZW5kICYmIGlzTGlnaHR3ZWlnaHRTcGFj
ZShjb29raWVbcGFpckVuZF0pKQotICAgICAgICAgICAgcGFpckVuZCsrOwotCi0gICAgICAgIHRv
a2VuU3RhcnQgPSBwYWlyRW5kOwotICAgICAgICB0b2tlbkVuZCA9IHRva2VuU3RhcnQ7IC8vIGlu
aXRpYWxpemUgdG9rZW4gZW5kIHRvIGNhdGNoIGZpcnN0ICc9JwotCi0gICAgICAgIHdoaWxlIChw
YWlyRW5kIDwgZW5kICYmIGNvb2tpZVtwYWlyRW5kXSAhPSAnOycpIHsKLSAgICAgICAgICAgIGlm
ICh0b2tlbkVuZCA9PSB0b2tlblN0YXJ0ICYmIGNvb2tpZVtwYWlyRW5kXSA9PSAnPScpCi0gICAg
ICAgICAgICAgICAgdG9rZW5FbmQgPSBwYWlyRW5kOwotICAgICAgICAgICAgcGFpckVuZCsrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUUgOiBzaG91bGQgd2Ugc2tpcCBsaWdodHdlaWdo
dCBzcGFjZXMgaGVyZSA/Ci0KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdG9rZW5FbmQgLSB0
b2tlblN0YXJ0OwotICAgICAgICB1bnNpZ25lZCB0b2tlblN0YXJ0U3ZnID0gdG9rZW5TdGFydDsK
LQotICAgICAgICBTdHJpbmcgcGFyc2VkVmFsdWU7Ci0gICAgICAgIGlmICh0b2tlblN0YXJ0ICE9
IHRva2VuRW5kKSB7Ci0gICAgICAgICAgICAvLyBUaGVyZSBpcyBhbiBlcXVhbCBzaWduIHNvIHJl
bW92ZSBsaWdodHdlaWdodCBzcGFjZXMgaW4gVkFMVUUKLSAgICAgICAgICAgIHRva2VuU3RhcnQg
PSB0b2tlbkVuZCArIDE7Ci0gICAgICAgICAgICB3aGlsZSAodG9rZW5TdGFydCA8IHBhaXJFbmQg
JiYgaXNMaWdodHdlaWdodFNwYWNlKGNvb2tpZVt0b2tlblN0YXJ0XSkpCi0gICAgICAgICAgICAg
ICAgdG9rZW5TdGFydCsrOwotCi0gICAgICAgICAgICB0b2tlbkVuZCA9IHBhaXJFbmQ7Ci0gICAg
ICAgICAgICB3aGlsZSAodG9rZW5FbmQgPiB0b2tlblN0YXJ0ICYmIGlzTGlnaHR3ZWlnaHRTcGFj
ZShjb29raWVbdG9rZW5FbmQgLSAxXSkpCi0gICAgICAgICAgICAgICAgdG9rZW5FbmQtLTsKLQot
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb29raWUuc3Vic3RyaW5nKHRva2VuU3RhcnQsIHRv
a2VuRW5kIC0gdG9rZW5TdGFydCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJ
ZiB0aGUgcGFyc2VkVmFsdWUgaXMgZW1wdHksIGluaXRpYWxpc2UgaXQgaW4gY2FzZSB3ZSBuZWVk
IGl0Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFN0cmluZygpOwotICAgICAgICAgICAgLy8g
SGFuZGxlIGEgdG9rZW4gd2l0aG91dCB2YWx1ZS4KLSAgICAgICAgICAgIGxlbmd0aCA9IHBhaXJF
bmQgLSB0b2tlblN0YXJ0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGV0ZWN0IHdoaWNoICJj
b29raWUtYXYiIGlzIHBhcnNlZAotICAgICAgICAvLyBMb29rIGF0IHRoZSBmaXJzdCBjaGFyIHRo
ZW4gcGFyc2UgdGhlIHdob2xlIGZvciBwZXJmb3JtYW5jZSBpc3N1ZQotICAgICAgICBzd2l0Y2gg
KGNvb2tpZVt0b2tlblN0YXJ0U3ZnXSkgewotICAgICAgICBjYXNlICdQJzoKLSAgICAgICAgY2Fz
ZSAncCcgOiB7Ci0gICAgICAgICAgICBpZiAobGVuZ3RoID49IDQgJiYgKChjb29raWUuZmluZCgi
YXRoIiwgdG9rZW5TdGFydFN2ZyArIDEsIGZhbHNlKSAtIHRva2VuU3RhcnRTdmcpID09IDEpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0aGUgcGF0aCB0byBiZSBkZWNvZGVkIHRvIG1h
dGNoIHRob3NlIHJldHVybmVkIGZyb20gVVJMOjpwYXRoKCkuCi0gICAgICAgICAgICAgICAgLy8g
VGhlIHBhdGggYXR0cmlidXRlIG1heSBvciBtYXkgbm90IGluY2x1ZGUgcGVyY2VudC1lbmNvZGVk
IGNoYXJhY3RlcnMuIEZvcnR1bmF0ZWx5Ci0gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgYXJl
IG5vIHBlcmNlbnQtZW5jb2RlZCBjaGFyYWN0ZXJzLCBkZWNvZGluZyB0aGUgdXJsIGlzIGEgbm8t
b3AuCi0gICAgICAgICAgICAgICAgcmVzLT5zZXRQYXRoKGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
cyhwYXJzZWRWYWx1ZSkpOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkaXNhYmxl
IHRoZSBmb2xsb3dpbmcgY2hlY2sgYmVjYXVzZSBzaXRlcyBsaWtlIEZhY2Vib29rIGFuZAotICAg
ICAgICAgICAgICAgIC8vIEdtYWlsIGN1cnJlbnRseSBkbyBub3QgZm9sbG93IHRoZSBzcGVjLgot
I2lmIDAKLSAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBwYXRoIGF0dHJpYnV0ZSBpcyBhIHBy
ZWZpeCBvZiB0aGUgcmVxdWVzdCBVUkkuCi0gICAgICAgICAgICAgICAgaWYgKCFtX2RlZmF1bHRD
b29raWVVUkwucGF0aCgpLnN0YXJ0c1dpdGgocmVzLT5wYXRoKCkpKQotICAgICAgICAgICAgICAg
ICAgICBMT0dfRVJST1JfQU5EX1JFVFVSTigiSW52YWxpZCBjb29raWUgYXR0cmlidXRlICVzIChw
YXRoKTogaXQgZG9lcyBub3QgbWF0aCB0aGUgVVJMIiwgY29va2llLmFzY2lpKCkuZGF0YSgpKTsK
LSNlbmRpZgotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJ
bnZhbGlkIGNvb2tpZSBhdHRyaWJ1dGUgJXMgKHBhdGgpIiwgY29va2llLmFzY2lpKCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSAnRCc6Ci0g
ICAgICAgIGNhc2UgJ2QnIDogewotICAgICAgICAgICAgaWYgKGxlbmd0aCA+PSA2ICYmICgoY29v
a2llLmZpbmQoIm9tYWluIiwgdG9rZW5TdGFydFN2ZyArIDEsIGZhbHNlKSAtIHRva2VuU3RhcnRT
dmcpID09IDEpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlLmxlbmd0aCgpID4g
MSAmJiBwYXJzZWRWYWx1ZVswXSA9PSAnIicgJiYgcGFyc2VkVmFsdWVbcGFyc2VkVmFsdWUubGVu
Z3RoKCkgLSAxXSA9PSAnIicpCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFy
c2VkVmFsdWUuc3Vic3RyaW5nKDEsIHBhcnNlZFZhbHVlLmxlbmd0aCgpIC0gMik7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZG9tYWluIGNvbnRhaW5zIGFuIGVtYmVkZGVkIGRv
dC4KLSAgICAgICAgICAgICAgICBzaXplX3QgZG90UG9zaXRpb24gPSBwYXJzZWRWYWx1ZS5maW5k
KCIuIiwgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRvdFBvc2l0aW9uID09IG5vdEZvdW5kIHx8
IGRvdFBvc2l0aW9uID09IHBhcnNlZFZhbHVlLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgICAg
ICBMT0dfRVJST1JfQU5EX1JFVFVSTigiSW52YWxpZCBjb29raWUgYXR0cmlidXRlICVzIChkb21h
aW4pOiBpdCBkb2VzIG5vdCBjb250YWluIGFuIGVtYmVkZGVkIGRvdCIsIGNvb2tpZS5hc2NpaSgp
LmRhdGEoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZG9tYWluIGRvZXMgbm90IHN0
YXJ0IHdpdGggYSBkb3QsIGFkZCBvbmUgZm9yIHNlY3VyaXR5IGNoZWNrcyBhbmQgdG8gZGlzdGlu
Z3Vpc2ggaXQgZnJvbSBob3N0LW9ubHkgZG9tYWlucwotICAgICAgICAgICAgICAgIC8vIEZvciBl
eGFtcGxlOiBhYi5jLmNvbSBkb3NlIG5vdCBkb21haW4gbWF0Y2ggYi5jLmNvbTsKLSAgICAgICAg
ICAgICAgICBTdHJpbmdCdWlsZGVyIHBhcnNlZFZhbHVlQnVpbGRlcjsKLSAgICAgICAgICAgICAg
ICBpZiAocGFyc2VkVmFsdWVbMF0gIT0gJy4nKQotICAgICAgICAgICAgICAgICAgICBwYXJzZWRW
YWx1ZUJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLiIpOwotICAgICAgICAgICAgICAgIHBhcnNlZFZh
bHVlQnVpbGRlci5hcHBlbmQocGFyc2VkVmFsdWUpOwotICAgICAgICAgICAgICAgIFN0cmluZyBy
ZWFsRG9tYWluID0gcGFyc2VkVmFsdWVCdWlsZGVyLnRvU3RyaW5nKCk7Ci0KLSAgICAgICAgICAg
ICAgICBTdHJpbmdCdWlsZGVyIGRlZmF1bHRIb3N0QnVpbGRlcjsKLSAgICAgICAgICAgICAgICBk
ZWZhdWx0SG9zdEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLiIpOwotICAgICAgICAgICAgICAgIGRl
ZmF1bHRIb3N0QnVpbGRlci5hcHBlbmQobV9kZWZhdWx0Q29va2llSG9zdCk7Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nIGRlZmF1bHRIb3N0ID0gZGVmYXVsdEhvc3RCdWlsZGVyLnRvU3RyaW5nKCk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBUcnkgdG8gcmV0dXJuIGFuIGNhbm9uaWNhbCBpcCBhZGRy
ZXNzIGlmIHRoZSBkb21haW4gaXMgYW4gaXAKLQotICAgICAgICAgICAgICAgIGJvb2wgaXNJUEFk
ZHJlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IGNoZWNrIGlmIHRoZSBj
dXJyZW50IGRvbWFpbiBpcyBhbiBJUCBhZGRyZXNzIHdoZW4gdGhlIGRlZmF1bHQgZG9tYWluIGlz
IGFuIElQIGFkZHJlc3MKLSAgICAgICAgICAgICAgICAvLyBXZSBrbm93IGlmIHRoZSBkZWZhdWx0
IGRvbWFpbiBpcyBub3QgYW4gSVAgYWRkcmVzcyBhbmQgdGhlIGN1cnJlbnQgZG9tYWluIGlzLCBp
dCB3b24ndCBzdWZmaXggbWF0Y2gKLSAgICAgICAgICAgICAgICAvLyBJZiBpdCBpcyBhbiBJUCBB
ZGRyZXNzLCB3ZSBzaG91bGQgdHJlYXQgaXQgb25seSBpZiBpdCBtYXRjaGVzIHRoZSBob3N0IGV4
YWN0bHkKLSAgICAgICAgICAgICAgICAvLyBXZSBkZXRlcm1pbmUgdGhlIGNhbm9uaWNhbCBJUCBm
b3JtYXQgYmVmb3JlIGNvbXBhcmluZyBiZWNhdXNlIElQdjYgY291bGQgYmUgcmVwcmVzZW50ZWQg
aW4gbXVsdGlwbGUgZm9ybWF0cwotICAgICAgICAgICAgICAgIGlmIChtX2RlZmF1bHREb21haW5J
c0lQQWRkcmVzcykgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVhbERvbWFpbkNhbm9u
aWNhbCA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpnZXRDYW5vbmljYWxJUEZvcm1hdChyZWFsRG9t
YWluKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWxEb21haW5DYW5vbmljYWwuaXNFbXB0
eSgpIHx8IHJlYWxEb21haW5DYW5vbmljYWwgIT0gZGVmYXVsdEhvc3QpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBMT0dfRVJST1JfQU5EX1JFVFVSTigiSW52YWxpZCBjb29raWUgYXR0cmlidXRl
ICVzIChkb21haW4pOiBkb21haW4gaXMgSVAgYnV0IGRvZXMgbm90IG1hdGNoIGhvc3QncyBJUCIs
IGNvb2tpZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlYWxEb21haW4g
PSByZWFsRG9tYWluQ2Fub25pY2FsOwotICAgICAgICAgICAgICAgICAgICBpc0lQQWRkcmVzcyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
VGhlIHJlcXVlc3QgaG9zdCBzaG91bGQgZG9tYWluIG1hdGNoIHRoZSBEb21haW4gYXR0cmlidXRl
LgotICAgICAgICAgICAgICAgICAgICAvLyBEb21haW4gc3RyaW5nIHN0YXJ0cyB3aXRoIGEgZG90
LCBzbyBhLmIuY29tIHNob3VsZCBkb21haW4gbWF0Y2ggLmEuYi5jb20uCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGFkZCBhICIuIiBhdCBiZWdpbm5pbmcgb2YgaG9zdCBuYW1lLCBiZWNhdXNlIGl0
IGNhbiBoYW5kbGUgbWFueSBjYXNlcyBzdWNoIGFzCi0gICAgICAgICAgICAgICAgICAgIC8vIGEu
Yi5jb20gbWF0Y2hlcyBiLmNvbSwgYS5iLmNvbSBtYXRjaGVzIC5CLmNvbSBhbmQgYS5iLmNvbSBt
YXRjaGVzIC5BLmIuQ29tCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBzbyBvbi4KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFkZWZhdWx0SG9zdC5lbmRzV2l0aChyZWFsRG9tYWluLCBmYWxz
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1JfQU5EX1JFVFVSTigiSW52YWxp
ZCBjb29raWUgYXR0cmlidXRlICVzIChkb21haW4pOiBpdCBkb2VzIG5vdCBkb21haW4gbWF0Y2gg
dGhlIGhvc3QiLCBjb29raWUuYXNjaWkoKS5kYXRhKCkpOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBjaGVjayBmb3IgYW4gZW1iZWRkZWQgZG90IGluIHRoZSBwb3J0aW9uIG9m
IHN0cmluZyBpbiB0aGUgaG9zdCBub3QgaW4gdGhlIGRvbWFpbgotICAgICAgICAgICAgICAgICAg
ICAvLyBidXQgdG8gbWF0Y2ggZmlyZWZveCBiZWhhdmlvdXIgd2UgZG8gbm90LgotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRvbWFpbiBpcyBhIHRvcCBsZXZlbCBk
b21haW4sIGlmIGl0IGlzIHRocm93IGl0IG91dAotICAgICAgICAgICAgICAgICAgICAvLyBodHRw
Oi8vcHVibGljc3VmZml4Lm9yZy9saXN0LwotICAgICAgICAgICAgICAgICAgICBpZiAoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OmlzVG9wTGV2ZWxEb21haW4ocmVhbERvbWFpbikpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBMT0dfRVJST1JfQU5EX1JFVFVSTigiSW52YWxpZCBjb29raWUgYXR0cmli
dXRlICVzIChkb21haW4pOiBpdCBkaWQgbm90IHBhc3MgdGhlIHRvcCBsZXZlbCBkb21haW4gY2hl
Y2siLCBjb29raWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXMtPnNldERvbWFpbihyZWFsRG9tYWluLCBpc0lQQWRkcmVzcyk7Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgY29va2llIGF0
dHJpYnV0ZSAlcyAoZG9tYWluKSIsIGNvb2tpZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgJ0UnIDoKLSAgICAgICAgY2FzZSAn
ZScgOiB7Ci0gICAgICAgICAgICBpZiAobGVuZ3RoID49IDcgJiYgKChjb29raWUuZmluZCgieHBp
cmVzIiwgdG9rZW5TdGFydFN2ZyArIDEsIGZhbHNlKSAtIHRva2VuU3RhcnRTdmcpID09IDEpKQot
ICAgICAgICAgICAgICAgIHJlcy0+c2V0RXhwaXJ5KHBhcnNlZFZhbHVlKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgY29va2llIGF0dHJpYnV0
ZSAlcyAoZXhwaXJlcykiLCBjb29raWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlICdNJyA6Ci0gICAgICAgIGNhc2UgJ20nIDog
ewotICAgICAgICAgICAgaWYgKGxlbmd0aCA+PSA3ICYmICgoY29va2llLmZpbmQoImF4LWFnZSIs
IHRva2VuU3RhcnRTdmcgKyAxLCBmYWxzZSkgLSB0b2tlblN0YXJ0U3ZnKSA9PSAxKSkKLSAgICAg
ICAgICAgICAgICByZXMtPnNldE1heEFnZShwYXJzZWRWYWx1ZSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIGNvb2tpZSBhdHRyaWJ1dGUgJXMg
KG1heC1hZ2UpIiwgY29va2llLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSAnQycgOgotICAgICAgICBjYXNlICdjJyA6IHsKLSAg
ICAgICAgICAgIGlmIChsZW5ndGggPj0gNyAmJiAoKGNvb2tpZS5maW5kKCJvbW1lbnQiLCB0b2tl
blN0YXJ0U3ZnICsgMSwgZmFsc2UpIC0gdG9rZW5TdGFydFN2ZykgPT0gMSkpCi0gICAgICAgICAg
ICAgICAgLy8gV2UgZG8gbm90IGhhdmUgcm9vbSBmb3IgdGhlIGNvbW1lbnQgcGFydCAoYW5kIHNv
IGRvIE1vemlsbGEpIHNvIGp1c3QgbG9nIHRoZSBjb21tZW50LgotICAgICAgICAgICAgICAgIExP
RyhOZXR3b3JrLCAiQ29tbWVudCAlcyBmb3IgUGFyc2VkQ29va2llIDogJXNcbiIsIHBhcnNlZFZh
bHVlLmFzY2lpKCkuZGF0YSgpLCBjb29raWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBjb29raWUgYXR0cmlidXRl
ICVzIChjb21tZW50KSIsIGNvb2tpZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgJ1YnIDoKLSAgICAgICAgY2FzZSAndicgOiB7
Ci0gICAgICAgICAgICBpZiAobGVuZ3RoID49IDcgJiYgKChjb29raWUuZmluZCgiZXJzaW9uIiwg
dG9rZW5TdGFydFN2ZyArIDEsIGZhbHNlKSAtIHRva2VuU3RhcnRTdmcpID09IDEpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIG91dC1vZi1kYXRlZCBDb29raWUgU3BlYyhSRkMy
OTY1LCBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyOTY1KSBkZWZpbmVkCi0gICAgICAg
ICAgICAgICAgLy8gdGhlIHZhbHVlIG9mIHZlcnNpb24gY2FuIG9ubHkgY29udGFpbiBESUdJVCwg
c29tZSByYW5kb20gc2l0ZXMsIGUuZy4gaHR0cHM6Ly9kZXZmb3J1bXMuYXBwbGUuY29tCi0gICAg
ICAgICAgICAgICAgLy8gd291bGQgdXNlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgdG8gcXVvdGUg
dGhlIGRpZ2l0LiBTbyB3ZSBuZWVkIHRvIGdldCByaWQgb2YgdGhlbSBmb3IgY29tcGxpYW5jZS4K
LSAgICAgICAgICAgICAgICBpZiAocGFyc2VkVmFsdWUubGVuZ3RoKCkgPiAxICYmIHBhcnNlZFZh
bHVlWzBdID09ICciJyAmJiBwYXJzZWRWYWx1ZVtwYXJzZWRWYWx1ZS5sZW5ndGgoKSAtIDFdID09
ICciJykKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZWRWYWx1ZS5zdWJz
dHJpbmcoMSwgcGFyc2VkVmFsdWUubGVuZ3RoKCkgLSAyKTsKLQotICAgICAgICAgICAgICAgIGlm
IChwYXJzZWRWYWx1ZS50b0ludCgpICE9IDEpCi0gICAgICAgICAgICAgICAgICAgIExPR19FUlJP
Ul9BTkRfUkVUVVJOKCJQYXJzZWRDb29raWUgdmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVkIChvbmx5
IHN1cHBvcnQgdmVyc2lvbj0xKSIsIHBhcnNlZFZhbHVlLnRvSW50KCkpOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIGNvb2tpZSBhdHRyaWJ1
dGUgJXMgKHZlcnNpb24pIiwgY29va2llLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSAnUycgOgotICAgICAgICBjYXNlICdzJyA6
IHsKLSAgICAgICAgICAgIC8vIFNlY3VyZSBpcyBhIHN0YW5kYWxvbmUgdG9rZW4gKCJTZWN1cmU7
IikKLSAgICAgICAgICAgIGlmIChsZW5ndGggPj0gNiAmJiAoKGNvb2tpZS5maW5kKCJlY3VyZSIs
IHRva2VuU3RhcnRTdmcgKyAxLCBmYWxzZSkgLSB0b2tlblN0YXJ0U3ZnKSA9PSAxKSkKLSAgICAg
ICAgICAgICAgICByZXMtPnNldFNlY3VyZUZsYWcodHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIGNvb2tpZSBhdHRyaWJ1dGUgJXMgKHNl
Y3VyZSkiLCBjb29raWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSAnSCc6Ci0gICAgICAgIGNhc2UgJ2gnOiB7Ci0gICAgICAgICAg
ICAvLyBIdHRwT25seSBpcyBhIHN0YW5kYWxvbmUgdG9rZW4gKCJIdHRwT25seTsiKQotICAgICAg
ICAgICAgaWYgKGxlbmd0aCA+PSA4ICYmICgoY29va2llLmZpbmQoInR0cE9ubHkiLCB0b2tlblN0
YXJ0U3ZnICsgMSwgZmFsc2UpIC0gdG9rZW5TdGFydFN2ZykgPT0gMSkpCi0gICAgICAgICAgICAg
ICAgcmVzLT5zZXRJc0h0dHBPbmx5KHRydWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIExPR19FUlJPUigiSW52YWxpZCBjb29raWUgYXR0cmlidXRlICVzIChIdHRwT25seSki
LCBjb29raWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBkZWZhdWx0IDogewotICAgICAgICAgICAgLy8gSWYgbGVuZ3RoID09IDAsIHdl
IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBjb29raWUgKGNhc2UgOiAiO1xyIikgc28gaWdu
b3JlIGl0Ci0gICAgICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICAgICAgICAgIExPR19FUlJP
UigiSW52YWxpZCB0b2tlbiBmb3IgY29va2llICVzIiwgY29va2llLmFzY2lpKCkuZGF0YSgpKTsK
LSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIGNvb2tp
ZSBpcyB2YWxpZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHNpemUgbGltaXQuCi0gICAgaWYgKCFyZXMt
PmlzVW5kZXJTaXplTGltaXQoKSkKLSAgICAgICAgTE9HX0VSUk9SX0FORF9SRVRVUk4oIlBhcnNl
ZENvb2tpZSAlcyBpcyBhYm92ZSB0aGUgNGtiIGluIGxlbmd0aCA6IFJFSkVDVEVEIiwgY29va2ll
LmFzY2lpKCkuZGF0YSgpKTsKLQotICAgIC8vIElmIHNvbWUgcGFpciB3YXMgbm90IHByb3ZpZGVk
LCBkdXJpbmcgcGFyc2luZyB0aGVuIGFwcGx5IHNvbWUgZGVmYXVsdCB2YWx1ZQotICAgIC8vIHRo
ZSByZXN0IGhhcyBiZWVuIGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLgotCi0gICAgLy8gSWYgbm8g
ZG9tYWluIHdhcyBwcm92aWRlZCwgc2V0IGl0IHRvIHRoZSBob3N0Ci0gICAgaWYgKCFyZXMtPmRv
bWFpbigpKQotICAgICAgICByZXMtPnNldERvbWFpbihtX2RlZmF1bHRDb29raWVIb3N0LCBtX2Rl
ZmF1bHREb21haW5Jc0lQQWRkcmVzcyk7Ci0KLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIENvb2tp
ZSBTcGVjaWZpY2FpdG9uIChSRkM2MjY1LCBzZWN0aW9uIDQuMS4yLjQgYW5kIDUuMi40LCBodHRw
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MjY1KSwKLSAgICAvLyBJZiBubyBwYXRoIHdhcyBw
cm92aWRlZCBvciB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBwYXRoIHZhbHVlIGlzIG5vdCAn
LycsIHNldCBpdCB0byB0aGUgaG9zdCdzIHBhdGgKLSAgICAvLwotICAgIC8vIFJFRkVSRU5DRQot
ICAgIC8vIDQuMS4yLjQuIFRoZSBQYXRoIEF0dHJpYnV0ZQotICAgIC8vCi0gICAgLy8gVGhlIHNj
b3BlIG9mIGVhY2ggY29va2llIGlzIGxpbWl0ZWQgdG8gYSBzZXQgb2YgcGF0aHMsIGNvbnRyb2xs
ZWQgYnkKLSAgICAvLyB0aGUgUGF0aCBhdHRyaWJ1dGUuIElmIHRoZSBzZXJ2ZXIgb21pdHMgdGhl
IFBhdGggYXR0cmlidXRlLCB0aGUgdXNlcgotICAgIC8vIGFnZW50IHdpbGwgdXNlIHRoZSAiZGly
ZWN0b3J5IiBvZiB0aGUgcmVxdWVzdC11cmkncyBwYXRoIGNvbXBvbmVudCBhcwotICAgIC8vIHRo
ZSBkZWZhdWx0IHZhbHVlLiAoU2VlIFNlY3Rpb24gNS4xLjQgZm9yIG1vcmUgZGV0YWlscy4pCi0g
ICAgLy8gLi4uLi4uLi4uLi4KLSAgICAvLyA1LjIuNC4gVGhlIFBhdGggQXR0cmlidXRlCi0gICAg
Ly8KLSAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNo
ZXMgdGhlIHN0cmluZyAiUGF0aCIsCi0gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNz
IHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy4KLSAgICAvLwotICAgIC8vIElmIHRoZSBhdHRyaWJ1
dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUKLSAgICAv
LyBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKCIvIik6Ci0gICAgLy8KLSAgICAvLyBMZXQg
Y29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC4KLSAgICAvLwotICAgIC8vIE90aGVyd2lz
ZToKLSAgICAvLwotICAgIC8vIExldCBjb29raWUtcGF0aCBiZSB0aGUgYXR0cmlidXRlLXZhbHVl
LgotICAgIC8vCi0gICAgLy8gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJp
YnV0ZS1saXN0IHdpdGggYW4gYXR0cmlidXRlLQotICAgIC8vIG5hbWUgb2YgUGF0aCBhbmQgYW4g
YXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1wYXRoLgotICAgIGlmICghcmVzLT5wYXRoKCkgfHwg
IXJlcy0+cGF0aCgpLmxlbmd0aCgpIHx8ICFyZXMtPnBhdGgoKS5zdGFydHNXaXRoKCIvIiwgZmFs
c2UpKSB7Ci0gICAgICAgIFN0cmluZyBwYXRoID0gbV9kZWZhdWx0Q29va2llVVJMLnN0cmluZygp
LnN1YnN0cmluZyhtX2RlZmF1bHRDb29raWVVUkwucGF0aFN0YXJ0KCksIG1fZGVmYXVsdENvb2tp
ZVVSTC5wYXRoQWZ0ZXJMYXN0U2xhc2goKSAtIG1fZGVmYXVsdENvb2tpZVVSTC5wYXRoU3RhcnQo
KSAtIDEpOwotICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBwYXRoID0g
Ii8iOwotICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIHJlYWRpbmcgdGhlIHJhdyB1cmwgc3RyaW5n
LCBpdCBjb3VsZCBjb250YWluIHBlcmNlbnQtZW5jb2RlZCBzZXF1ZW5jZXMuIFdlCi0gICAgICAg
IC8vIHdhbnQgaXQgdG8gYmUgY29tcGFyYWJsZSB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHVybC5w
YXRoKCksIHdoaWNoIGlzIG5vdCBwZXJjZW50LWVuY29kZWQsCi0gICAgICAgIC8vIHNvIHdlIG11
c3QgcmVtb3ZlIHRoZSBlc2NhcGUgc2VxdWVuY2VzLgotICAgICAgICByZXMtPnNldFBhdGgoZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKHBhdGgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ibGFja2JlcnJ5L0Nvb2tpZVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llUGFyc2VyLmgJKHJldmlzaW9uIDE2MTU5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llUGFyc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKdWxp
ZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHBsZXlvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgQ29va2llUGFyc2VyX2gKLSNkZWZpbmUgQ29va2llUGFyc2VyX2gKLQotI2luY2x1ZGUg
IlVSTC5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFz
cyBTdHJpbmc7Ci19Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBhcnNlZENvb2tpZTsK
LQotY2xhc3MgQ29va2llUGFyc2VyIHsKLXB1YmxpYzoKLSAgICBDb29raWVQYXJzZXIoY29uc3Qg
VVJMJiBkZWZhdWx0Q29va2llVVJMKTsKLSAgICB+Q29va2llUGFyc2VyKCk7Ci0KLSAgICAvLyBQ
YXJzZXMgYSBzZXF1ZW5jZSBvZiAiQ29va2llOiIgaGVhZGVyIGFuZCByZXR1cm4gdGhlIHBhcnNl
ZCBjb29raWVzLgotICAgIFZlY3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+IHBhcnNlKGNvbnN0
IFN0cmluZyYgY29va2llcyk7Ci0KLSAgICBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4gcGFyc2VP
bmVDb29raWUoY29uc3QgU3RyaW5nJiBjb29raWUpOwotCi1wcml2YXRlOgotICAgIC8vIEZJWE1F
OiBjdXJUaW1lLCBzdGFydCwgZW5kIHBhcmFtZXRlcnMgc2hvdWxkIGJlIHJlbW92ZWQuIEFuZCB0
aGlzIG1ldGhvZCBjYW4gYmUgcHVibGljLgotICAgIFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPiBw
YXJzZU9uZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZSwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGVuZCwgZG91YmxlIGN1clRpbWUpOwotCi0gICAgVVJMIG1fZGVmYXVsdENvb2tpZVVSTDsK
LSAgICBTdHJpbmcgbV9kZWZhdWx0Q29va2llSG9zdDsKLSAgICBib29sIG1fZGVmYXVsdERvbWFp
bklzSVBBZGRyZXNzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
Q29va2llUGFyc2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkv
Q3Vyc29yQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYmxhY2tiZXJyeS9DdXJzb3JCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DdXJzb3JCbGFja0JlcnJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwyODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ3Vyc29yLmgiCi0KLSNpbmNsdWRlICJJbWFnZS5oIgotCi0jaW5jbHVkZSA8c3RyaW5nPgot
Ci10eXBlZGVmIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3JUeXBlIEN1cnNvclR5cGU7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEFsbEN1cnNvcnMgewotICAgIEFsbEN1cnNv
cnMoKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6TnVtQ3Vyc29yVHlwZXM7ICsraSkKLSAgICAgICAgICAgIG1fY3Vyc29yc1tpXSA9IEN1
cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6QmxhY2tCZXJyeUN1cnNvcigoQ3Vyc29yVHlwZSlp
KSk7Ci0gICAgfQotICAgIEN1cnNvciBtX2N1cnNvcnNbQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok51
bUN1cnNvclR5cGVzXTsKLX07Ci0KLXN0YXRpYyBjb25zdCBDdXJzb3ImIGdldEN1cnNvcihDdXJz
b3JUeXBlIHR5cGUpCi17Ci0gICAgc3RhdGljIEFsbEN1cnNvcnMgYWxsQ3Vyc29yczsKLSAgICBy
ZXR1cm4gYWxsQ3Vyc29ycy5tX2N1cnNvcnNbdHlwZV07Ci19Ci0KLUN1cnNvcjo6Q3Vyc29yKGNv
bnN0IEN1cnNvciYgb3RoZXIpCi0gICAgOiBtX3BsYXRmb3JtQ3Vyc29yKG90aGVyLm1fcGxhdGZv
cm1DdXJzb3IpCi17Ci19Ci0KLUN1cnNvcjo6Q3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9pbnQm
IGhvdHNwb3QpCi06IG1fcGxhdGZvcm1DdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1cnNv
ckN1c3RvbWl6ZWQsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5nKCks
IGhvdHNwb3QpCi17Ci19Ci0KLUN1cnNvcjo6fkN1cnNvcigpCi17Ci19Ci0KLUN1cnNvciYgQ3Vy
c29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKLXsKLSAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gb3RoZXIubV9wbGF0Zm9ybUN1cnNvcjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUN1
cnNvcjo6Q3Vyc29yKFBsYXRmb3JtQ3Vyc29yIGMpCi06IG1fcGxhdGZvcm1DdXJzb3IoYykKLXsK
LX0KLQotY29uc3QgQ3Vyc29yJiBhbGlhc0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNv
cihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yQWxpYXMpOwotfQotCi1jb25zdCBDdXJzb3Im
IGNlbGxDdXJzb3IoKQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkN1cnNvckNlbGwpOwotfQotCi1jb25zdCBDdXJzb3ImIGNvbHVtblJlc2l6ZUN1cnNvcigp
Ci17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yQ29s
dW1uUmVzaXplKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBjb250ZXh0TWVudUN1cnNvcigpCi17Ci0g
ICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yQ29udGV4dE1l
bnUpOwotfQotCi1jb25zdCBDdXJzb3ImIGNvcHlDdXJzb3IoKQotewotICAgIHJldHVybiBnZXRD
dXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvckNvcHkpOwotfQotCi1jb25zdCBDdXJz
b3ImIGNyb3NzQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpDdXJzb3JDcm9zcyk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgZWFzdFJlc2l6ZUN1cnNv
cigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29y
RWFzdFJlc2l6ZSk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJzb3IoKQot
ewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvckVhc3RX
ZXN0UmVzaXplKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBncmFiYmluZ0N1cnNvcigpCi17Ci0gICAg
cmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29ySGFuZCk7Ci19Ci0K
LWNvbnN0IEN1cnNvciYgZ3JhYkN1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29ySGFuZCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgaGFuZEN1
cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vy
c29ySGFuZCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgaGVscEN1cnNvcigpCi17Ci0gICAgcmV0dXJu
IGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29ySGVscCk7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgaUJlYW1DdXJzb3IoKQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkN1cnNvckJlYW0pOwotfQotCi1jb25zdCBDdXJzb3ImIG1vdmVDdXJzb3Io
KQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvck1v
dmUpOwotfQotCi1jb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdl
dEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yTm9Ecm9wKTsKLX0KLQotY29uc3Qg
Q3Vyc29yJiBub25lQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpDdXJzb3JOb25lKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RSZXNp
emVDdXJzb3IoKQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkN1cnNvck5vcnRoRWFzdFJlc2l6ZSk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0U291
dGhXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpDdXJzb3JOb3J0aEVhc3RTb3V0aFdlc3RSZXNpemUpOwotfQotCi1jb25zdCBD
dXJzb3ImIG5vcnRoUmVzaXplQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpDdXJzb3JOb3J0aFJlc2l6ZSk7Ci19Ci0KLWNvbnN0IEN1cnNvciYg
bm9ydGhTb3V0aFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yTm9ydGhTb3V0aFJlc2l6ZSk7Ci19Ci0KLWNvbnN0IEN1cnNv
ciYgbm9ydGhXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpDdXJzb3JOb3J0aFdlc3RSZXNpemUpOwotfQotCi1jb25zdCBDdXJz
b3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1
cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29yTm9ydGhXZXN0U291dGhFYXN0UmVzaXpl
KTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3RBbGxvd2VkQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4g
Z2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3JOb3RBbGxvd2VkKTsKLX0KLQot
Y29uc3QgQ3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZ2V0Q3Vyc29yKEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3JQb2ludGVyKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBw
cm9ncmVzc0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6Q3Vyc29yUHJvZ3Jlc3MpOwotfQotCi1jb25zdCBDdXJzb3ImIHJvd1Jlc2l6ZUN1cnNv
cigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vyc29y
Um93UmVzaXplKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKQot
ewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvclNvdXRo
RWFzdFJlc2l6ZSk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhSZXNpemVDdXJzb3IoKQotewot
ICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvclNvdXRoUmVz
aXplKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKQotewotICAg
IHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvclNvdXRoV2VzdFJl
c2l6ZSk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgdmVydGljYWxUZXh0Q3Vyc29yKCkKLXsKLSAgICBy
ZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3JWZXJ0aWNhbFRleHQp
OwotfQotCi1jb25zdCBDdXJzb3ImIHdhaXRDdXJzb3IoKQotewotICAgIHJldHVybiBnZXRDdXJz
b3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkN1cnNvcldhaXQpOwotfQotCi1jb25zdCBDdXJzb3Im
IHdlc3RSZXNpemVDdXJzb3IoKQotewotICAgIHJldHVybiBnZXRDdXJzb3IoQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkN1cnNvcldlc3RSZXNpemUpOwotfQotCi1jb25zdCBDdXJzb3ImIHpvb21JbkN1
cnNvcigpCi17Ci0gICAgcmV0dXJuIGdldEN1cnNvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q3Vy
c29yWm9vbUluKTsKLX0KLQotY29uc3QgQ3Vyc29yJiB6b29tT3V0Q3Vyc29yKCkKLXsKLSAgICBy
ZXR1cm4gZ2V0Q3Vyc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDdXJzb3Jab29tT3V0KTsKLX0K
LQotY29uc3QgQ3Vyc29yJiBtaWRkbGVQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gbW92
ZUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIGVhc3RQYW5uaW5nQ3Vyc29yKCkKLXsKLSAg
ICByZXR1cm4gZWFzdFJlc2l6ZUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoUGFu
bmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIG5vcnRoUmVzaXplQ3Vyc29yKCk7Ci19Ci0KLWNv
bnN0IEN1cnNvciYgbm9ydGhFYXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIG5vcnRo
RWFzdFJlc2l6ZUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoV2VzdFBhbm5pbmdD
dXJzb3IoKQotewotICAgIHJldHVybiBub3J0aFdlc3RSZXNpemVDdXJzb3IoKTsKLX0KLQotY29u
c3QgQ3Vyc29yJiBzb3V0aFBhbm5pbmdDdXJzb3IoKQotewotICAgIHJldHVybiBzb3V0aFJlc2l6
ZUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoRWFzdFBhbm5pbmdDdXJzb3IoKQot
ewotICAgIHJldHVybiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29y
JiBzb3V0aFdlc3RQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gc291dGhXZXN0UmVzaXpl
Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgd2VzdFBhbm5pbmdDdXJzb3IoKQotewotICAg
IHJldHVybiB3ZXN0UmVzaXplQ3Vyc29yKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0RhdGFCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5
L0RyYWdEYXRhQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0RhdGFCbGFja0JlcnJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAy
MDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnRGF0
YS5oIgotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50Lmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ym9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnND
b2xvcigpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIERy
YWdEYXRhOjpjb250YWluc0ZpbGVzKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQo
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBv
bGljeSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUNvbG9yIERyYWdEYXRhOjphc0NvbG9yKCkg
Y29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBDb2xvcigpOwotfQot
Ci1TdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KEZyYW1lKikgY29uc3QKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIERyYWdEYXRh
Ojphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSwgU3RyaW5nKikgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSosIFBh
c3NSZWZQdHI8UmFuZ2U+LCBib29sLCBib29sJikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0RyYWdJbWFnZUJsYWNrQmVycnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvRHJhZ0lt
YWdlQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2JsYWNrYmVycnkvRHJhZ0ltYWdlQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRHJhZ0ltYWdlLmgi
Ci0KLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCogY3JlYXRl
RHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQqIGNyZWF0
ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBkZWxldGVEcmFn
SW1hZ2Uodm9pZCopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCogZGlzc29s
dmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKHZvaWQqLCBmbG9hdCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkKiBzY2FsZURyYWdJbWFnZSh2b2lkKiwgRmxv
YXRTaXplKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUlu
dFNpemUgZHJhZ0ltYWdlU2l6ZSh2b2lkKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBJbnRTaXplKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvRXZlbnRMb29wQmxhY2tCZXJyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9FdmVudExv
b3BCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9FdmVudExvb3BCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRXZlbnRMb29wLmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5
UGxhdGZvcm1NZXNzYWdlQ2xpZW50Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBF
dmVudExvb3A6OmN5Y2xlKCkKLXsKLSAgICBBU1NFUlQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ondl
YktpdFRocmVhZE1lc3NhZ2VDbGllbnQoKSk7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ondl
YktpdFRocmVhZE1lc3NhZ2VDbGllbnQoKS0+cHJvY2Vzc05leHRNZXNzYWdlKCk7Ci0gICAgbV9l
bmRlZCA9ICFCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6d2ViS2l0VGhyZWFkTWVzc2FnZUNsaWVudCgp
LT5pc1J1bm5pbmcoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9GaWxlU3lzdGVtQmxhY2tCZXJyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9GaWxlU3lzdGVt
QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2JsYWNrYmVycnkvRmlsZVN5c3RlbUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
LQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVNldHRpbmdzLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmluZyBob21lRGly
ZWN0b3J5UGF0aCgpCi17Ci0gICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5n
czo6aW5zdGFuY2UoKS0+YXBwbGljYXRpb25EYXRhRGlyZWN0b3J5KCkuY19zdHIoKTsKLX0KLQot
Q1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQotewot
ICAgIHJldHVybiBwYXRoLnV0ZjgoKTsKLX0KLQotYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1N
b2R1bGUpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0xvY2FsaXplZFN0cmlu
Z3NCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L0xvY2FsaXplZFN0cmluZ3NCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Mb2NhbGl6ZWRTdHJpbmdz
QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDE1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLQotI2luY2x1ZGUgIkludFNp
emUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybVN0cmluZy5oPgotI2luY2x1ZGUgPExvY2FsZUhhbmRsZXIuaD4KLSNpbmNsdWRlIDxM
b2NhbGl6ZVJlc291cmNlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1ERUZJTkVfU1RBVElDX0xPQ0FMKEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpMb2NhbGl6ZVJlc291cmNlLCBzX3Jlc291cmNlLCAoKSk7Ci0KLVN0cmluZyBmaWxlQnV0
dG9uQ2hvb3NlRmlsZUxhYmVsKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzX3Jl
c291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RklMRV9DSE9PU0VfQlVUVE9O
X0xBQkVMKSk7Ci19Ci0KLVN0cmluZyBmaWxlQnV0dG9uQ2hvb3NlTXVsdGlwbGVGaWxlc0xhYmVs
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6RklMRV9DSE9PU0VfTVVMVElQTEVfQlVUVE9OX0xBQkVMKSk7
Ci19Ci0KLVN0cmluZyBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkZJTEVfQlVUVE9OX05PX0ZJTEVfU0VMRUNURURfTEFCRUwpKTsKLX0KLQotU3RyaW5n
IHJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6UkVTRVRfQlVUVE9O
X0xBQkVMKSk7Ci19Ci0KLVN0cmluZyBzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKQotewotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTVUJNSVRfQlVUVE9OX0xBQkVMKSk7Ci19Ci0KLVN0cmluZyBpbnB1dEVsZW1l
bnRBbHRUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdl
dFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U1VCTUlUX0JVVFRPTl9MQUJFTCkpOwotfQot
Ci1zdGF0aWMgU3RyaW5nIHBsYXRmb3JtTGFuZ3VhZ2UoKQotewotICAgIFN0cmluZyBsYW5nID0g
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvY2FsZUhhbmRsZXI6Omluc3RhbmNlKCktPmxhbmd1YWdl
KCkuY19zdHIoKTsKLSAgICAvLyBnZXRMb2NhbGUoKSByZXR1cm5zIGEgUE9TSVggbG9jYWxlIHdo
aWNoIHVzZXMgJ18nIHRvIHNlcGFyYXRlIGxhbmd1YWdlIGFuZCBjb3VudHJ5LgotICAgIC8vIEhv
d2V2ZXIsIHdlIHVzZSAnLScgaW5zdGVhZCBvZiAnXycgaW4gV2ViQ29yZSAoZS5nLiBlbl91cyBz
aG91bGQgcmVhZCBlbi11cykKLSAgICBzaXplX3QgdW5kZXJzY29yZVBvc2l0aW9uID0gbGFuZy5m
aW5kKCdfJyk7Ci0gICAgU3RyaW5nIHJlcGxhY2VXaXRoID0gQVNDSUlMaXRlcmFsKCItIik7Ci0g
ICAgaWYgKHVuZGVyc2NvcmVQb3NpdGlvbiAhPSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIGxh
bmcucmVwbGFjZSh1bmRlcnNjb3JlUG9zaXRpb24sIHJlcGxhY2VXaXRoLmxlbmd0aCgpLCByZXBs
YWNlV2l0aCk7Ci0gICAgcmV0dXJuIGxhbmc7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IHBsYXRmb3Jt
VXNlclByZWZlcnJlZExhbmd1YWdlcygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZl
cnJlZExhbmd1YWdlczsKLSAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZChwbGF0Zm9y
bUxhbmd1YWdlKCkpOwotICAgIHJldHVybiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwotfQotCi1T
dHJpbmcgc2VhcmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKCkKLXsKLSAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U0VB
UkNIQUJMRV9JTkRFWF9JTlRST0RVQ1RJT04pKTsKLX0KLQotU3RyaW5nIHNlYXJjaE1lbnVOb1Jl
Y2VudFNlYXJjaGVzVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBzZWFyY2hNZW51UmVjZW50U2VhcmNoZXNUZXh0KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5n
IHNlYXJjaE1lbnVDbGVhclJlY2VudFNlYXJjaGVzVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBpbWFnZVRpdGxlKFN0cmlu
ZyBjb25zdCYgZmlsZW5hbWUsIEludFNpemUgY29uc3QmIHNpemUpCi17Ci0gICAgcmV0dXJuIGZp
bGVuYW1lICsgIiAoIiArIFN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgoKSkgKyAieCIgKyBTdHJp
bmc6Om51bWJlcihzaXplLmhlaWdodCgpKSArICIpIjsKLX0KLQotU3RyaW5nIEFYQnV0dG9uQWN0
aW9uVmVyYigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLVN0cmluZyBBWENoZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhEZWZpbml0
aW9uVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLVN0cmluZyBBWERlc2NyaXB0aW9uTGlzdFRleHQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhEZXNjcmlwdGlvbkxp
c3REZXRhaWxUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotU3RyaW5nIEFYRGVzY3JpcHRpb25MaXN0VGVybVRleHQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhGb290
ZXJSb2xlRGVzY3JpcHRpb25UZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFYTGlua0FjdGlvblZlcmIoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhSYWRp
b0J1dHRvbkFjdGlvblZlcmIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhUZXh0RmllbGRBY3Rpb25WZXJiKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFYVW5j
aGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFYTWVudUxpc3RQb3B1cEFjdGlvblZlcmIo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1T
dHJpbmcgQVhNZW51TGlzdEFjdGlvblZlcmIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhMaXN0SXRlbUFjdGlvblZlcmIoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJp
bmcgdW5rbm93bkZpbGVTaXplVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVBhdHRlcm5NaXNt
YXRjaFRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0
U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpWQUxJREFUSU9OX1BBVFRFUk5fTUlTTUFUQ0gp
KTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVG9vTG9uZ1RleHQoaW50LCBpbnQpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlVW5kZXJmbG93VGV4dChjb25zdCBTdHJpbmcmIHRleHQp
Ci17Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpWQUxJREFUSU9OX1JBTkdFX1VOREVSRkxPVyksIHRleHQudXRmOCgp
LmRhdGEoKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlT3ZlcmZsb3dUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoc19yZXNv
dXJjZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlZBTElEQVRJT05fUkFOR0VfT1ZF
UkZMT1cpLCB0ZXh0LnV0ZjgoKS5kYXRhKCkpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3Nh
Z2VTdGVwTWlzbWF0Y2hUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlZBTElEQVRJT05fU1RFUF9NSVNNQVRDSCkpOwotfQotCi1TdHJpbmcgdmFsaWRh
dGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VkFMSURBVElP
Tl9UWVBFX01JU01BVENIKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNt
YXRjaEZvckVtYWlsVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc19yZXNv
dXJjZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlZBTElEQVRJT05fVFlQRV9NSVNN
QVRDSF9FTUFJTCkpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hG
b3JNdWx0aXBsZUVtYWlsVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc19y
ZXNvdXJjZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlZBTElEQVRJT05fVFlQRV9N
SVNNQVRDSF9NVUxUSVBMRV9FTUFJTCkpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VU
eXBlTWlzbWF0Y2hGb3JVUkxUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChz
X3Jlc291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VkFMSURBVElPTl9UWVBF
X01JU01BVENIX1VSTCkpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3Np
bmdUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0
cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VkFMSURBVElPTl9WQUxVRV9NSVNTSU5HKSk7Ci19
Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckNoZWNrYm94VGV4dCgp
Ci17Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQot
Ci1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JGaWxlVGV4dCgpCi17Ci0g
ICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJp
bmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JNdWx0aXBsZUZpbGVUZXh0KCkKLXsK
LSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0
cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclJhZGlvVGV4dCgpCi17Ci0gICAg
cmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcg
dmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JTZWxlY3RUZXh0KCkKLXsKLSAgICByZXR1
cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxp
ZGF0aW9uTWVzc2FnZUJhZElucHV0Rm9yTnVtYmVyVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19
Ci0KLVN0cmluZyBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3RyaW5nKGNvbnN0IFN0cmlu
ZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50SGVscFRleHQoY29uc3QgU3RyaW5n
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQot
U3RyaW5nIGxvY2FsaXplZE1lZGlhVGltZURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBs
b2NhbGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbihmbG9hdCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIG1lZGlhRWxlbWVudExvYWRp
bmdTdGF0ZVRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotCi1TdHJpbmcgbWVkaWFFbGVtZW50TGl2ZUJyb2FkY2FzdFN0YXRlVGV4dCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyBtaXNzaW5nUGx1Z2luVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjcmFzaGVkUGx1Z2luVGV4dCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBibG9ja2Vk
UGx1Z2luQnlDb250ZW50U2VjdXJpdHlQb2xpY3lUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGluc2VjdXJlUGx1Z2luVmVy
c2lvblRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCi1TdHJpbmcgaW5hY3RpdmVQbHVnaW5UZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIG11bHRpcGxlRmlsZVVwbG9h
ZFRleHQodW5zaWduZWQpCi17Ci0gICAgcmV0dXJuIFN0cmluZygiLCAuLi4iKTsKLX0KLQotU3Ry
aW5nIGRlZmF1bHREZXRhaWxzU3VtbWFyeVRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpERVRBSUxT
X1NVTU1BUlkpKTsKLX0KLQotU3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVzU2VsZWN0ZWRMYWJlbCgp
Ci17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5nZXRTdHJpbmcoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkZJTEVfQlVUVE9OX05PX0ZJTEVfU0VMRUNURURfTEFCRUwpKTsK
LX0KLQotU3RyaW5nIHNuYXBzaG90dGVkUGx1Z0luTGFiZWxUaXRsZSgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBzbmFwc2hvdHRl
ZFBsdWdJbkxhYmVsU3VidGl0bGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgd2Vla0Zvcm1hdEluTERNTCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLSNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi1TdHJpbmcgdGV4dFRyYWNrQ2xvc2VkQ2FwdGlvbnNUZXh0KCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIHRleHRU
cmFja1N1YnRpdGxlc1RleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IFN0cmluZygpOwotfQotCi1TdHJpbmcgdGV4dFRyYWNrT2ZmTWVudUl0ZW1UZXh0KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIHRl
eHRUcmFja0F1dG9tYXRpY01lbnVJdGVtVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyB0ZXh0VHJhY2tOb0xhYmVsVGV4dCgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0jZW5k
aWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYmxhY2tiZXJyeS9Mb2dnaW5nQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Mb2dnaW5nQmxhY2tCZXJyeS5jcHAJKHJldmlz
aW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvTG9nZ2lu
Z0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0KLSNpZiAhTE9HX0RJU0FCTEVECi0KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TdHJp
bmcgbG9nTGV2ZWxTdHJpbmcoKQotewotICAgIHJldHVybiBnZXRlbnYoIldFQktJVF9ERUJVRyIp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyAhTE9HX0RJU0FCTEVE
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L01JTUVUeXBlUmVnaXN0
cnlCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L01JTUVUeXBlUmVnaXN0cnlCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9NSU1FVHlwZVJlZ2lzdHJ5
QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLQotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtQ29tbW9uRnVuY3Rp
b25zLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmluZyBNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVu
c2lvbikKLXsKLSAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OmdldE1JTUVUeXBlRm9y
RXh0ZW5zaW9uKGV4dGVuc2lvbi5sb3dlcigpKTsKLX0KLQotU3RyaW5nIE1JTUVUeXBlUmVnaXN0
cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkK
LXsKLSAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OmdldFByZWZlcnJlZEV4dGVuc2lv
bkZvck1JTUVUeXBlKHR5cGUubG93ZXIoKSk7Ci19Ci0KLWJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6
aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGFnZUNsaWVudEJsYWNrQmVycnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BhZ2VDbGllbnRCbGFja0Jl
cnJ5LmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNr
YmVycnkvUGFnZUNsaWVudEJsYWNrQmVycnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICovCi0KLSNpZm5kZWYgUGFnZUNsaWVudEJsYWNrQmVycnlfaAotI2RlZmluZSBQYWdlQ2xpZW50
QmxhY2tCZXJyeV9oCi0KLSNpbmNsdWRlICJDdXJzb3IuaCIKLSNpbmNsdWRlICJXZWJQYWdlQ2xp
ZW50LmgiCi0KLW5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBQbGF0Zm9ybSB7Ci1j
bGFzcyBOZXR3b3JrU3RyZWFtRmFjdG9yeTsKLW5hbWVzcGFjZSBHcmFwaGljcyB7Ci1jbGFzcyBX
aW5kb3c7Ci19Ci19Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlQ2xpZW50OwotY2xhc3MgQ3JlZGVudGlhbDsKLWNsYXNzIEludFJlY3Q7Ci1j
bGFzcyBJbnRTaXplOwotY2xhc3MgVVJMOwotY2xhc3MgUGx1Z2luVmlldzsKLWNsYXNzIFByb3Rl
Y3Rpb25TcGFjZTsKLX0KLQotY2xhc3MgUGFnZUNsaWVudEJsYWNrQmVycnkgewotcHVibGljOgot
ICAgIGVudW0gU2F2ZUNyZWRlbnRpYWxUeXBlIHsKLSAgICAgICAgU2F2ZUNyZWRlbnRpYWxOZXZl
ckZvclRoaXNTaXRlID0gMCwKLSAgICAgICAgU2F2ZUNyZWRlbnRpYWxOb3ROb3csCi0gICAgICAg
IFNhdmVDcmVkZW50aWFsWWVzCi0gICAgfTsKLQotICAgIHZpcnR1YWwgaW50IHBsYXllcklEKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoV2ViQ29yZTo6UGxhdGZvcm1D
dXJzb3IpID0gMDsKLSAgICB2aXJ0dWFsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrU3Ry
ZWFtRmFjdG9yeSogbmV0d29ya1N0cmVhbUZhY3RvcnkoKSA9IDA7Ci0gICAgdmlydHVhbCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogcGxhdGZvcm1XaW5kb3coKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZXZlbnRzU2NyZWVuRGltbWluZyhib29sKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNob3dWaXJ0dWFsS2V5Ym9hcmQoYm9vbCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBlbnN1cmVDb250ZW50VmlzaWJsZShib29sIGNlbnRlckluVmlldyA9IHRy
dWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgem9vbVRvQ29udGVudFJlY3QoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJQbHVnaW4oV2ViQ29y
ZTo6UGx1Z2luVmlldyosIGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFnZU9u
TG9hZCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGx1Z2luRW50ZXJGdWxsU2NyZWVu
KFdlYkNvcmU6OlBsdWdpblZpZXcqLCBjb25zdCBjaGFyKiB1bmlxdWVQbHVnaW5QcmVmaXgpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGx1Z2luRW50ZXJGdWxsU2NyZWVuKFdlYkNvcmU6OlBs
dWdpblZpZXcqLCBjb25zdCBjaGFyKiB1bmlxdWVQbHVnaW5QcmVmaXgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkUGx1Z2luRXhpdEZ1bGxTY3JlZW4oV2ViQ29yZTo6UGx1Z2luVmlldyosIGNv
bnN0IGNoYXIqIHVuaXF1ZVBsdWdpblByZWZpeCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblBs
dWdpblN0YXJ0QmFja2dyb3VuZFBsYXkoV2ViQ29yZTo6UGx1Z2luVmlldyosIGNvbnN0IGNoYXIq
IHVuaXF1ZVBsdWdpblByZWZpeCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblBsdWdpblN0b3BC
YWNrZ3JvdW5kUGxheShXZWJDb3JlOjpQbHVnaW5WaWV3KiwgY29uc3QgY2hhciogdW5pcXVlUGx1
Z2luUHJlZml4KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGxvY2tPcmllbnRhdGlvbihib29sIGxh
bmRzY2FwZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmxvY2tPcmllbnRhdGlvbigpID0gMDsK
LSAgICB2aXJ0dWFsIGludCBvcmllbnRhdGlvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRv
dWJsZSBjdXJyZW50Wm9vbUZhY3RvcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6
OkludFNpemUgdmlld3BvcnRTaXplKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50IHNob3dB
bGVydERpYWxvZyhCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VDbGllbnQ6OkFsZXJ0VHlwZSkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBXZWJDb3JlOjpQcm90ZWN0
aW9uU3BhY2UmLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJikgPSAwOwotICAgIHZpcnR1YWwg
U2F2ZUNyZWRlbnRpYWxUeXBlIG5vdGlmeVNob3VsZFNhdmVDcmVkZW50aWFsKGJvb2wpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgc3luY1Byb3h5Q3JlZGVudGlhbChjb25zdCBXZWJDb3JlOjpDcmVk
ZW50aWFsJikgPSAwOwotfTsKLQotI2VuZGlmIC8vIFBhZ2VDbGllbnRCbGFja0JlcnJ5X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGFyc2VkQ29va2llLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BhcnNlZENv
b2tpZS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Js
YWNrYmVycnkvUGFyc2VkQ29va2llLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBKdWxpZW4gQ2hhZmZyYWl4IDxqdWxp
ZW4uY2hhZmZyYWl4QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQYXJzZWRDb29raWUuaCIKLQotI2luY2x1ZGUgIkNvb2tpZU1hbmFn
ZXIuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8
Y3VybC9jdXJsLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXJzZWRDb29raWU6OlBhcnNlZENvb2tpZShkb3VibGUg
Y3VycmVudFRpbWUpCi0gICAgOiBtX2V4cGlyeSgtMSkKLSAgICAsIG1fY3JlYXRpb25UaW1lKGN1
cnJlbnRUaW1lKQotICAgICwgbV9sYXN0QWNjZXNzZWQoY3VycmVudFRpbWUpCi0gICAgLCBtX2lz
U2VjdXJlKGZhbHNlKQotICAgICwgbV9pc0h0dHBPbmx5KGZhbHNlKQotICAgICwgbV9pc1Nlc3Np
b24odHJ1ZSkKLSAgICAsIG1faXNGb3JjZUV4cGlyZWQoZmFsc2UpCi0gICAgLCBtX2RvbWFpbklz
SVBBZGRyZXNzKGZhbHNlKQotewotfQotCi1QYXJzZWRDb29raWU6OlBhcnNlZENvb2tpZShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgZG9tYWlu
LCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBp
cnksIGRvdWJsZSBsYXN0QWNjZXNzZWQsIGRvdWJsZSBjcmVhdGlvblRpbWUsIGJvb2wgaXNTZWN1
cmUsIGJvb2wgaXNIdHRwT25seSkKLSAgICA6IG1fbmFtZShuYW1lKQotICAgICwgbV92YWx1ZSh2
YWx1ZSkKLSAgICAsIG1fZG9tYWluKGRvbWFpbikKLSAgICAsIG1fcHJvdG9jb2wocHJvdG9jb2wp
Ci0gICAgLCBtX3BhdGgocGF0aCkKLSAgICAsIG1fZXhwaXJ5KGV4cGlyeSkKLSAgICAsIG1fY3Jl
YXRpb25UaW1lKGNyZWF0aW9uVGltZSkKLSAgICAsIG1fbGFzdEFjY2Vzc2VkKGxhc3RBY2Nlc3Nl
ZCkKLSAgICAsIG1faXNTZWN1cmUoaXNTZWN1cmUpCi0gICAgLCBtX2lzSHR0cE9ubHkoaXNIdHRw
T25seSkKLSAgICAsIG1faXNTZXNzaW9uKGZhbHNlKQotICAgICwgbV9pc0ZvcmNlRXhwaXJlZChm
YWxzZSkKLSAgICAsIG1fZG9tYWluSXNJUEFkZHJlc3MoZmFsc2UpCi17Ci19Ci0KLXZvaWQgUGFy
c2VkQ29va2llOjpzZXRFeHBpcnkoY29uc3QgU3RyaW5nJiBleHBpcnkpCi17Ci0gICAgLy8gSWYg
YSBjb29raWUgaGFzIGJvdGggdGhlIE1heC1BZ2UgYW5kIHRoZSBFeHBpcmVzIGF0dHJpYnV0ZSwK
LSAgICAvLyB0aGUgTWF4LUFnZSBhdHRyaWJ1dGUgaGFzIHByZWNlZGVuY2UgYW5kIGNvbnRyb2xz
IHRoZSBleHBpcmF0aW9uIGRhdGUgb2YgdGhlIGNvb2tpZS4KLSAgICBpZiAobV9leHBpcnkgIT0g
LTEgfHwgZXhwaXJ5LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1Nlc3Np
b24gPSBmYWxzZTsKLQotICAgIG1fZXhwaXJ5ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihjdXJsX2dl
dGRhdGUoZXhwaXJ5LnV0ZjgoKS5kYXRhKCksIDApKTsKLQotICAgIGlmIChtX2V4cGlyeSA9PSAt
MSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwYXJzZSBkYXRlIik7Ci0gICAgICAg
IC8vIEluIHRoaXMgY2FzZSwgY29uc2lkZXIgdGhhdCB0aGUgY29va2llIGlzIHNlc3Npb24gb25s
eQotICAgICAgICBtX2lzU2Vzc2lvbiA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFBhcnNlZENv
b2tpZTo6c2V0TWF4QWdlKGNvbnN0IFN0cmluZyYgbWF4QWdlKQotewotICAgIC8vIEFjY29yZGlu
ZyB0byB0aGUgSFRUUCBDb29raWUgc3BlY2lmaWNhdGlvbiAoUkZDNjI2NSwgaHR0cDovL3Rvb2xz
LmlldGYub3JnL2h0bWwvcmZjNjI2NSksCi0gICAgLy8gdGhlIGZpcnN0IGNoYXJhY3RlciBjYW4g
YmUgYSBESUdJVCBvciBhICItIiwgYW5kIHRoZSByZW1pbmRlcgotICAgIC8vIG9mIHRoZSB2YWx1
ZSBjYW4gb25seSBjb250YWluIERJR0lUIGNoYXJhY3RlcnMuCi0gICAgaWYgKG1heEFnZS5pc0Vt
cHR5KCkgfHwgKG1heEFnZVswXSAhPSAnLScgJiYgIWlzQVNDSUlEaWdpdChtYXhBZ2VbMF0pKSkg
ewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwYXJzZSBNYXgtQWdlIDogJXMsIGZpcnN0
IGNoYXJhY3RlciBjYW4gb25seSBiZSAnLScgb3IgYXNjaWkgZGlnaXQuIiwgbWF4QWdlLmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgb2s7Ci0gICAg
aW50IHZhbHVlID0gbWF4QWdlLnRvSW50U3RyaWN0KCZvayk7Ci0KLSAgICBpZiAoIW9rKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHBhcnNlIE1heC1BZ2UgOiAlcyIsIG1heEFnZS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9leHBpcnkgPSB2
YWx1ZTsKLSAgICBtX2lzU2Vzc2lvbiA9IGZhbHNlOwotCi0gICAgLy8gSWYgbWF4QWdlIHZhbHVl
IGlzIG5vdCBwb3NpdGl2ZSwgbGV0IGV4cGlyeS10aW1lIGJlIHRoZSBlYXJsaWVzdCByZXByZXNl
bnRhYmxlIHRpbWUuCi0gICAgaWYgKG1fZXhwaXJ5ID4gMCkKLSAgICAgICAgbV9leHBpcnkgKz0g
Y3VycmVudFRpbWUoKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZXhwaXJ5ID0gMDsKLX0KLQotYm9v
bCBQYXJzZWRDb29raWU6Omhhc0V4cGlyZWQoKSBjb25zdAotewotICAgIC8vIFNlc3Npb24gY29v
a2llcyBkbyBub3QgZXhwaXJlLCB0aGV5IHdpbGwganVzdCBub3QgYmUgc2F2ZWQgdG8gdGhlIGJh
Y2tpbmcgc3RvcmUuCi0gICAgcmV0dXJuICFtX2lzU2Vzc2lvbiAmJiAobV9pc0ZvcmNlRXhwaXJl
ZCB8fCBtX2V4cGlyeSA8IGN1cnJlbnRUaW1lKCkpOwotfQotCi1ib29sIFBhcnNlZENvb2tpZTo6
aXNVbmRlclNpemVMaW1pdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmFsdWUubGVuZ3RoKCkg
PD0gQ29va2llTWFuYWdlcjo6bWF4Q29va2llTGVuZ3RoKCkgJiYgbV9uYW1lLmxlbmd0aCgpIDw9
IENvb2tpZU1hbmFnZXI6Om1heENvb2tpZUxlbmd0aCgpOwotfQotCi1TdHJpbmcgUGFyc2VkQ29v
a2llOjp0b1N0cmluZygpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAg
IGJ1aWxkZXIuYXBwZW5kKG5hbWUoKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIiA9ICIpOwotICAg
IGJ1aWxkZXIuYXBwZW5kKHZhbHVlKCkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCI7IERvbWFpbiA9
ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGRvbWFpbigpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgi
OyBQYXRoID0gIik7Ci0gICAgYnVpbGRlci5hcHBlbmQocGF0aCgpKTsKLSAgICBidWlsZGVyLmFw
cGVuZCgiOyBQcm90b2NvbCA9ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKHByb3RvY29sKCkpOwot
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBQYXJzZWRDb29raWU6
OnRvTmFtZVZhbHVlUGFpcigpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IFN0cmluZyBlcXVh
bCgiPSIpOwotCi0gICAgc2l6ZV90IGNvb2tpZUxlbmd0aCA9IG1fbmFtZS5sZW5ndGgoKSArIG1f
dmFsdWUubGVuZ3RoKCkgKyAyOwotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3Vs
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvb2tpZUxlbmd0aCk7Ci0gICAgYXBwZW5kKHJlc3Vs
dCwgbV9uYW1lKTsKLSAgICBhcHBlbmQocmVzdWx0LCBlcXVhbCk7Ci0gICAgYXBwZW5kKHJlc3Vs
dCwgbV92YWx1ZSk7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwotfQotCi12
b2lkIFBhcnNlZENvb2tpZTo6YXBwZW5kV2ViQ29yZUNvb2tpZShWZWN0b3I8Q29va2llPiYgY29v
a2llVmVjdG9yKSBjb25zdAotewotICAgIGNvb2tpZVZlY3Rvci5hcHBlbmQoQ29va2llKFN0cmlu
ZyhtX25hbWUpLCBTdHJpbmcobV92YWx1ZSksIFN0cmluZyhtX2RvbWFpbiksCi0gICAgICAgIC8v
IFdlIG11bHRpcGx5IG1fZXhwaXJ5IGJ5IDEwMDAgdG8gY29udmVydCBmcm9tIHNlY29uZHMgdG8g
bWlsbGlzZWNvbmRzLgotICAgICAgICAvLyBUaGlzIHZhbHVlIGlzIHBhc3NlZCB0byBXZWIgSW5z
cGVjdG9yIGFuZCB1c2VkIGluIHRoZSBKYXZhU2NyaXB0IERhdGUgY29uc3RydWN0b3IuCi0gICAg
ICAgIFN0cmluZyhtX3BhdGgpLCAobV9leHBpcnkgKiAxMDAwKSwgbV9pc0h0dHBPbmx5LCBtX2lz
U2VjdXJlLCBtX2lzU2Vzc2lvbikpOwotfQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QYXJzZWRDb29raWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BhcnNlZENvb2tpZS5o
CShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5
L1BhcnNlZENvb2tpZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEp1bGllbiBDaGFmZnJhaXggPGp1bGllbi5jaGFmZnJh
aXhAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQYXJzZWRDb29raWVfaAot
I2RlZmluZSBQYXJzZWRDb29raWVfaAotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFVSTDsKLQotLy8gVGhpcyBjbGFzcyByZXByZXNlbnRz
IGEgY29va2llIGludGVybmFsbHkKLS8vIEl0IGNhbiBlaXRoZXIgYmUgY3JlYXRlZCBieSB0aGUg
Q29va2llUGFyc2VyIHdoaWNoIHdpbGwgdGhlbiBmaWxsIGl0Ci0vLyBvciBpdCBjYW4gYmUgY3Jl
YXRlZCBieSB0aGUgYmFja2luZyBzdG9yZSBmaWxsaW5nIGl0IGluIHRoZSBjb25zdHJ1Y3Rvci4K
LWNsYXNzIFBhcnNlZENvb2tpZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBhcnNlZENvb2tpZT4gewot
cHVibGljOgotCi0gICAgLy8gRGVmYXVsdCBjb29raWUgOiBlbXB0eSBkb21haW4sIG5vbiBzZWN1
cmUgYW5kIHNlc3Npb24KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IGNyZWF0
ZShkb3VibGUgY3VycmVudFRpbWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXJzZWRDb29raWUo
Y3VycmVudFRpbWUpKTsgfQotCi0gICAgLy8gRm9yIGJhY2tpbmcgc3RvcmUgY29va2llcyAodGhv
c2UgY29va2llcyBhcmUgbmV2ZXIgc2Vzc2lvbiBjb29raWVzKS4KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxQYXJzZWRDb29raWU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBj
b25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBpcnksIGRvdWJsZSBsYXN0QWNjZXNzZWQsIGRv
dWJsZSBjcmVhdGlvblRpbWUsIGJvb2wgaXNTZWN1cmUsIGJvb2wgaXNIdHRwT25seSkgIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBQYXJzZWRDb29raWUobmFtZSwgdmFsdWUsIGRvbWFpbiwgcHJvdG9j
b2wsIHBhdGgsIGV4cGlyeSwgbGFzdEFjY2Vzc2VkLCBjcmVhdGlvblRpbWUsIGlzU2VjdXJlLCBp
c0h0dHBPbmx5KSk7IH07Ci0KLSAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KLSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fbmFt
ZSA9IG5hbWU7IH0KLQotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlOyB9Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fdmFs
dWUgPSB2YWx1ZTsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9wYXRoOyB9Ci0gICAgdm9pZCBzZXRQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkgeyBtX3BhdGgg
PSBwYXRoOyB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIGRvbWFpbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZG9tYWluOyB9Ci0gICAgdm9pZCBzZXREb21haW4oY29uc3QgU3RyaW5nJiBkb21haW4sIGJvb2wg
ZG9tYWluSXNJUEFkZHJlc3MgPSBmYWxzZSkgeyBtX2RvbWFpbiA9IGRvbWFpbi5sb3dlcigpOyBt
X2RvbWFpbklzSVBBZGRyZXNzID0gZG9tYWluSXNJUEFkZHJlc3M7IH0KLQotICAgIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2woKSBjb25zdCB7IHJldHVybiBtX3Byb3RvY29sOyB9Ci0gICAgdm9pZCBz
ZXRQcm90b2NvbChjb25zdCBTdHJpbmcmIHByb3RvY29sKSB7IG1fcHJvdG9jb2wgPSBwcm90b2Nv
bDsgfQotCi0gICAgZG91YmxlIGV4cGlyeSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwaXJ5OyB9Ci0g
ICAgdm9pZCBzZXRFeHBpcnkoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBmb3JjZUV4cGlyZSgp
IHsgbV9pc0ZvcmNlRXhwaXJlZCAgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRNYXhBZ2UoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICBkb3VibGUgbGFzdEFjY2Vzc2VkKCkgY29uc3QgeyByZXR1cm4gbV9s
YXN0QWNjZXNzZWQ7IH0KLSAgICB2b2lkIHNldExhc3RBY2Nlc3NlZChkb3VibGUgbGFzdEFjY2Vz
c2VkKSB7IG1fbGFzdEFjY2Vzc2VkID0gbGFzdEFjY2Vzc2VkO30KLQotICAgIGRvdWJsZSBjcmVh
dGlvblRpbWUoKSBjb25zdCB7IHJldHVybiBtX2NyZWF0aW9uVGltZTsgfQotICAgIHZvaWQgc2V0
Q3JlYXRpb25UaW1lKGRvdWJsZSBjcmVhdGlvblRpbWUpIHsgbV9jcmVhdGlvblRpbWUgPSBjcmVh
dGlvblRpbWU7IH0KLQotICAgIGJvb2wgaXNTZWN1cmUoKSBjb25zdCB7IHJldHVybiBtX2lzU2Vj
dXJlOyB9Ci0gICAgdm9pZCBzZXRTZWN1cmVGbGFnKGJvb2wgc2VjdXJlKSB7IG1faXNTZWN1cmUg
PSBzZWN1cmU7IH0KLQotICAgIGJvb2wgaXNIdHRwT25seSgpIGNvbnN0IHsgcmV0dXJuIG1faXNI
dHRwT25seTsgfQotICAgIHZvaWQgc2V0SXNIdHRwT25seShib29sIGlzSHR0cE9ubHkpIHsgbV9p
c0h0dHBPbmx5ID0gaXNIdHRwT25seTsgfQotCi0gICAgYm9vbCBpc1Nlc3Npb24oKSBjb25zdCB7
IHJldHVybiBtX2lzU2Vzc2lvbjsgfQotCi0gICAgYm9vbCBpc0hvc3RPbmx5KCkgY29uc3QgeyBy
ZXR1cm4gIW1fZG9tYWluLnN0YXJ0c1dpdGgoIi4iKTsgfQotCi0gICAgYm9vbCBoYXNFeHBpcmVk
KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0ZvcmNlRXhwaXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNG
b3JjZUV4cGlyZWQ7IH0KLSAgICBib29sIGlzVW5kZXJTaXplTGltaXQoKSBjb25zdDsKLSAgICBi
b29sIGRvbWFpbklzSVBBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9kb21haW5Jc0lQQWRkcmVz
czsgfQotCi0gICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHRvTmFtZVZh
bHVlUGFpcigpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kV2ViQ29yZUNvb2tpZShWZWN0b3I8Q29v
a2llPiYgY29va2llVmVjdG9yKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICAvLyBEZWZhdWx0IGNv
b2tpZSA6IGVtcHR5IGRvbWFpbiwgbm9uIHNlY3VyZSBhbmQgc2Vzc2lvbgotICAgIFBhcnNlZENv
b2tpZShkb3VibGUgY3VycmVudFRpbWUpOwotCi0gICAgLy8gRm9yIGJhY2tpbmcgc3RvcmUgY29v
a2llcyAodGhvc2UgY29va2llcyBhcmUgbmV2ZXIgc2Vzc2lvbiBjb29raWVzKS4KLSAgICBQYXJz
ZWRDb29raWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBT
dHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3QgU3RyaW5nJiBwYXRo
LCBkb3VibGUgZXhwaXJ5LCBkb3VibGUgbGFzdEFjY2Vzc2VkLCBkb3VibGUgY3JlYXRpb25UaW1l
LCBib29sIGlzU2VjdXJlLCBib29sIGlzSHR0cE9ubHkpOwotCi0gICAgU3RyaW5nIG1fbmFtZTsK
LSAgICBTdHJpbmcgbV92YWx1ZTsKLSAgICBTdHJpbmcgbV9kb21haW47Ci0gICAgU3RyaW5nIG1f
cHJvdG9jb2w7Ci0gICAgU3RyaW5nIG1fcGF0aDsKLSAgICBkb3VibGUgbV9leHBpcnk7Ci0gICAg
ZG91YmxlIG1fY3JlYXRpb25UaW1lOwotICAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgdGhlIExSVSBy
ZXBsYWNlbWVudCBwb2xpY3kuCi0gICAgZG91YmxlIG1fbGFzdEFjY2Vzc2VkOwotCi0gICAgYm9v
bCBtX2lzU2VjdXJlOwotICAgIGJvb2wgbV9pc0h0dHBPbmx5OwotICAgIGJvb2wgbV9pc1Nlc3Np
b247Ci0gICAgYm9vbCBtX2lzRm9yY2VFeHBpcmVkOwotICAgIGJvb2wgbV9kb21haW5Jc0lQQWRk
cmVzczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBhcnNlZENv
b2tpZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1Bhc3RlYm9h
cmRCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L1Bhc3RlYm9hcmRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QYXN0ZWJvYXJkQmxhY2tCZXJyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBhc3RlYm9hcmQuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNp
bmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIKLQotI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUNsaXBib2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLVBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoKQotewotfQotCi1ib29sIFBhc3RlYm9hcmQ6OmNh
blNtYXJ0UmVwbGFjZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoKQotewotICAgIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpDbGlwYm9hcmQ6OmNsZWFyQ2xpcGJvYXJkKCk7Ci19Ci0KLXZvaWQgUGFzdGVib2Fy
ZDo6d3JpdGVJbWFnZShOb2RlKiwgVVJMIGNvbnN0JiwgU3RyaW5nIGNvbnN0JikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJh
bmdlKiBzZWxlY3RlZFJhbmdlLCBib29sLCBGcmFtZSogZnJhbWUsIFNob3VsZFNlcmlhbGl6ZVNl
bGVjdGVkVGV4dEZvckNsaXBib2FyZCBzaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQpCi17Ci0gICAgV1RGOjpTdHJpbmcgdGV4dCA9IHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVk
VGV4dEZvckNsaXBib2FyZCA9PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJvYXJkID8gZnJh
bWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSA6IGZyYW1lLT5lZGl0b3Io
KS0+c2VsZWN0ZWRUZXh0KCk7Ci0gICAgV1RGOjpTdHJpbmcgaHRtbCA9IGNyZWF0ZU1hcmt1cChz
ZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKTsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEF0b21pY1N0cmluZywgaW52b2tlU3RyaW5nLCAoImhyZWY9XCJpbnZva2U6Ly8i
KSk7Ci0gICAgc2l6ZV90IHN0YXJ0T2ZJbnZva2UgPSBodG1sLmZpbmQoaW52b2tlU3RyaW5nKTsK
LSAgICBpZiAoc3RhcnRPZkludm9rZSAhPSBub3RGb3VuZCkgewotICAgICAgICBzaXplX3QgZW5k
T2ZJbnZva2UgPSBodG1sLmZpbmQoIlwiIiwgc3RhcnRPZkludm9rZSArIGludm9rZVN0cmluZy5s
ZW5ndGgoKSkgKyAxOwotICAgICAgICBodG1sLnJlbW92ZShzdGFydE9mSW52b2tlLCBlbmRPZklu
dm9rZSAtIHN0YXJ0T2ZJbnZva2UpOwotICAgIH0KLSAgICBXVEY6OlN0cmluZyB1cmwgPSBmcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6Q2xpcGJvYXJkOjp3cml0ZSh0ZXh0LCBodG1sLCB1cmwpOwotfQotCi12b2lkIFBhc3RlYm9h
cmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRVUkwmIHBhc3RlYm9hcmRVUkwpCi17Ci0gICAgQVNT
RVJUKCFwYXN0ZWJvYXJkVVJMLnVybC5pc0VtcHR5KCkpOwotICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpDbGlwYm9hcmQ6OndyaXRlVVJMKHBhc3RlYm9hcmRVUkwudXJsLnN0cmluZygpKTsKLX0K
LQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFNt
YXJ0UmVwbGFjZU9wdGlvbikKLXsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJk
Ojp3cml0ZVBsYWluVGV4dCh0ZXh0KTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3Rl
Ym9hcmRQbGFpblRleHQmIHRleHQpCi17Ci0gICAgdGV4dC50ZXh0ID0gQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkNsaXBib2FyZDo6cmVhZFBsYWluVGV4dCgpOwotfQotCi1QYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQ
YXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9z
ZVBsYWluVGV4dCkKLXsKLSAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwotCi0gICAgLy8gTm90
ZTogV2UgYXJlIGFibGUgdG8gY2hlY2sgaWYgdGhlIGZvcm1hdCBleGlzdHMgcHJpb3IgdG8gcmVh
ZGluZyBidXQgdGhlIGNoZWNrICYgdGhlIGVhcmx5IHJldHVybgotICAgIC8vIHBhdGggb2YgZ2V0
X2NsaXBib2FyZF9kYXRhIGFyZSB0aGUgZXhhY3Qgc2FtZSwgc28ganVzdCB1c2UgZ2V0X2NsaXBi
b2FyZF9kYXRhIGFuZCB2YWxpZGF0ZSB0aGUKLSAgICAvLyByZXR1cm4gdmFsdWUgdG8gZGV0ZXJt
aW5lIGlmIHRoZSBkYXRhIHdhcyBwcmVzZW50LgotICAgIFN0cmluZyBodG1sID0gQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkNsaXBib2FyZDo6cmVhZEhUTUwoKTsKLSAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQ7Ci0gICAgaWYgKCFodG1sLmlzRW1wdHkoKSkgewotICAgICAgICBT
dHJpbmcgdXJsID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6cmVhZFVSTCgpOwot
ICAgICAgICBpZiAoZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRv
Y3VtZW50KCksIGh0bWwsIHVybCwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KSkK
LSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYg
KCFhbGxvd1BsYWluVGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTdHJpbmcgdGV4dCA9
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDbGlwYm9hcmQ6OnJlYWRQbGFpblRleHQoKTsKLSAgICBp
ZiAoZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQuZ2V0KCksIHRleHQp
KSB7Ci0gICAgICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZyYWdt
ZW50LnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBhc3NPd25QdHI8UGFz
dGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCkKLXsKLSAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFBhc3RlYm9hcmQpOwotfQotCi1QYXNzT3duUHRyPFBhc3RlYm9hcmQ+
IFBhc3RlYm9hcmQ6OmNyZWF0ZVByaXZhdGUoKQotewotICAgIHJldHVybiBjcmVhdGVGb3JDb3B5
QW5kUGFzdGUoKTsKLX0KLQotYm9vbCBQYXN0ZWJvYXJkOjpoYXNEYXRhKCkKLXsKLSAgICByZXR1
cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6aGFzUGxhaW5UZXh0KCkgfHwgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6aGFzSFRNTCgpIHx8IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpDbGlwYm9hcmQ6Omhhc1VSTCgpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OmNsZWFy
KGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJv
YXJkOjpjbGVhckNsaXBib2FyZEJ5VHlwZSh0eXBlLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1TdHJp
bmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCi17Ci0gICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6cmVh
ZENsaXBib2FyZEJ5VHlwZSh0eXBlLnV0ZjgoKS5kYXRhKCkpLmNfc3RyKCkpOwotfQotCi1ib29s
IFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiB0ZXh0KQotewotICAgIGlmICh0eXBlID09ICJ0ZXh0L3BsYWluIikgewotICAgICAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjp3cml0ZVBsYWluVGV4dCh0ZXh0KTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiKSB7Ci0g
ICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDbGlwYm9hcmQ6OndyaXRlSFRNTCh0ZXh0KTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh0eXBlID09ICJ0ZXh0L3VybCIp
IHsKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6d3JpdGVVUkwodGV4
dCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzKCkKLXsKLSAgICAvLyBXZSB1c2UgaGFy
ZGNvZGVkIGxpc3QgaGVyZSBzaW5jZSB0aGVyZSBzZWVtcyB0byBiZSBubyBBUEkgdG8gZ2V0IHRo
ZSBsaXN0LgotICAgIC8vIEZJWE1FOiBTaG91bGQgb21pdCB0eXBlcyB3aGVyZSB3ZSBoYXZlIG5v
IGRhdGEsIHVzaW5nIHRoZSBzYW1lIGZ1bmN0aW9ucyB1c2VkIGFib3ZlIGluIFBhc3RlYm9hcmQ6
Omhhc0RhdGEuCi0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgdHlwZXMuYWRkKCJ0ZXh0
L3BsYWluIik7Ci0gICAgdHlwZXMuYWRkKCJ0ZXh0L2h0bWwiKTsKLSAgICB0eXBlcy5hZGQoInRl
eHQvdXJsIik7Ci0gICAgcmV0dXJuIHR5cGVzOwotfQotCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJv
YXJkOjpyZWFkRmlsZW5hbWVzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBWZWN0b3I8U3RyaW5nPigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEJs
YWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNr
YmVycnkvUGxhdGZvcm1LZXlib2FyZEV2ZW50QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5o
IgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgotI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9y
bVNjcmVlbi5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgU3RyaW5nIGtl
eUlkZW50aWZpZXJGb3JCbGFja0JlcnJ5Q2hhcmFjdGVyKHVuc2lnbmVkIGNoYXJhY3RlcikKLXsK
LSAgICBzd2l0Y2ggKGNoYXJhY3RlcikgewotICAgIGNhc2UgS0VZQ09ERV9SRVRVUk46Ci0gICAg
Y2FzZSBLRVlDT0RFX0tQX0VOVEVSOgotICAgICAgICByZXR1cm4gIkVudGVyIjsKLSAgICBjYXNl
IEtFWUNPREVfQkFDS1NQQUNFOgotICAgICAgICByZXR1cm4gIlUrMDAwOCI7Ci0gICAgY2FzZSBL
RVlDT0RFX0RFTEVURToKLSAgICAgICAgcmV0dXJuICJVKzAwN0YiOwotICAgIGNhc2UgS0VZQ09E
RV9FU0NBUEU6Ci0gICAgICAgIHJldHVybiAiRXNjYXBlIjsKLSAgICBjYXNlIEtFWUNPREVfUEFV
U0U6Ci0gICAgICAgIHJldHVybiAiUGF1c2UiOwotICAgIGNhc2UgS0VZQ09ERV9QUklOVDoKLSAg
ICAgICAgcmV0dXJuICJQcmludFNjcmVlbiI7Ci0gICAgY2FzZSBLRVlDT0RFX1RBQjoKLSAgICBj
YXNlIEtFWUNPREVfQkFDS19UQUI6Ci0gICAgICAgIHJldHVybiAiVSswMDA5IjsKLSAgICBjYXNl
IEtFWUNPREVfTEVGVDoKLSAgICBjYXNlIEtFWUNPREVfS1BfTEVGVDoKLSAgICAgICAgcmV0dXJu
ICJMZWZ0IjsKLSAgICBjYXNlIEtFWUNPREVfUklHSFQ6Ci0gICAgY2FzZSBLRVlDT0RFX0tQX1JJ
R0hUOgotICAgICAgICByZXR1cm4gIlJpZ2h0IjsKLSAgICBjYXNlIEtFWUNPREVfVVA6Ci0gICAg
Y2FzZSBLRVlDT0RFX0tQX1VQOgotICAgICAgICByZXR1cm4gIlVwIjsKLSAgICBjYXNlIEtFWUNP
REVfRE9XTjoKLSAgICBjYXNlIEtFWUNPREVfS1BfRE9XTjoKLSAgICAgICAgcmV0dXJuICJEb3du
IjsKLSAgICBjYXNlIEtFWUNPREVfS1BfREVMRVRFOgotICAgICAgICByZXR1cm4gIlUrMDA3RiI7
Ci0gICAgY2FzZSBLRVlDT0RFX01FTlU6Ci0gICAgY2FzZSBLRVlDT0RFX0xFRlRfQUxUOgotICAg
IGNhc2UgS0VZQ09ERV9SSUdIVF9BTFQ6Ci0gICAgICAgIHJldHVybiAiQWx0IjsKLSAgICBjYXNl
IEtFWUNPREVfSE9NRToKLSAgICBjYXNlIEtFWUNPREVfS1BfSE9NRToKLSAgICAgICAgcmV0dXJu
ICJIb21lIjsKLSAgICBjYXNlIEtFWUNPREVfSU5TRVJUOgotICAgIGNhc2UgS0VZQ09ERV9LUF9J
TlNFUlQ6Ci0gICAgICAgIHJldHVybiAiSW5zZXJ0IjsKLSAgICBjYXNlIEtFWUNPREVfUEdfVVA6
Ci0gICAgY2FzZSBLRVlDT0RFX0tQX1BHX1VQOgotICAgICAgICByZXR1cm4gIlBhZ2VVcCI7Ci0g
ICAgY2FzZSBLRVlDT0RFX1BHX0RPV046Ci0gICAgY2FzZSBLRVlDT0RFX0tQX1BHX0RPV046Ci0g
ICAgICAgIHJldHVybiAiUGFnZURvd24iOwotICAgIGNhc2UgS0VZQ09ERV9FTkQ6Ci0gICAgY2Fz
ZSBLRVlDT0RFX0tQX0VORDoKLSAgICAgICAgcmV0dXJuICJFbmQiOwotICAgIGNhc2UgS0VZQ09E
RV9GMToKLSAgICAgICAgcmV0dXJuICJGMSI7Ci0gICAgY2FzZSBLRVlDT0RFX0YyOgotICAgICAg
ICByZXR1cm4gIkYyIjsKLSAgICBjYXNlIEtFWUNPREVfRjM6Ci0gICAgICAgIHJldHVybiAiRjMi
OwotICAgIGNhc2UgS0VZQ09ERV9GNDoKLSAgICAgICAgcmV0dXJuICJGNCI7Ci0gICAgY2FzZSBL
RVlDT0RFX0Y1OgotICAgICAgICByZXR1cm4gIkY1IjsKLSAgICBjYXNlIEtFWUNPREVfRjY6Ci0g
ICAgICAgIHJldHVybiAiRjYiOwotICAgIGNhc2UgS0VZQ09ERV9GNzoKLSAgICAgICAgcmV0dXJu
ICJGNyI7Ci0gICAgY2FzZSBLRVlDT0RFX0Y4OgotICAgICAgICByZXR1cm4gIkY4IjsKLSAgICBj
YXNlIEtFWUNPREVfRjk6Ci0gICAgICAgIHJldHVybiAiRjkiOwotICAgIGNhc2UgS0VZQ09ERV9G
MTA6Ci0gICAgICAgIHJldHVybiAiRjEwIjsKLSAgICBjYXNlIEtFWUNPREVfRjExOgotICAgICAg
ICByZXR1cm4gIkYxMSI7Ci0gICAgY2FzZSBLRVlDT0RFX0YxMjoKLSAgICAgICAgcmV0dXJuICJG
MTIiOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRY
IiwgV1RGOjp0b0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50
IHdpbmRvd3NLZXlDb2RlRm9yQmxhY2tCZXJyeUtleWNvZGUodW5zaWduZWQga2V5Y29kZSkKLXsK
LSAgICBzd2l0Y2ggKGtleWNvZGUpIHsKLSAgICBjYXNlIEtFWUNPREVfUkVUVVJOOgotICAgIGNh
c2UgS0VZQ09ERV9LUF9FTlRFUjoKLSAgICAgICAgcmV0dXJuIFZLX1JFVFVSTjsgLy8gKDBEKSBS
ZXR1cm4ga2V5Ci0gICAgY2FzZSBLRVlDT0RFX0JBQ0tTUEFDRToKLSAgICAgICAgcmV0dXJuIFZL
X0JBQ0s7IC8vICgwOCkgQkFDS1NQQUNFIGtleQotICAgIGNhc2UgS0VZQ09ERV9ERUxFVEU6Ci0g
ICAgICAgIHJldHVybiBWS19ERUxFVEU7IC8vICgyRSkgREVMIGtleQotICAgIGNhc2UgS0VZQ09E
RV9FU0NBUEU6Ci0gICAgICAgIHJldHVybiBWS19FU0NBUEU7Ci0gICAgY2FzZSBLRVlDT0RFX1NQ
QUNFOgotICAgICAgICByZXR1cm4gVktfU1BBQ0U7Ci0gICAgY2FzZSAnMCc6Ci0gICAgY2FzZSAn
KSc6Ci0gICAgICAgIHJldHVybiBWS18wOwotICAgIGNhc2UgJzEnOgotICAgIGNhc2UgJyEnOgot
ICAgICAgICByZXR1cm4gVktfMTsKLSAgICBjYXNlICcyJzoKLSAgICBjYXNlICdAJzoKLSAgICAg
ICAgcmV0dXJuIFZLXzI7Ci0gICAgY2FzZSAnMyc6Ci0gICAgY2FzZSAnIyc6Ci0gICAgICAgIHJl
dHVybiBWS18zOwotICAgIGNhc2UgJzQnOgotICAgIGNhc2UgJyQnOgotICAgICAgICByZXR1cm4g
VktfNDsKLSAgICBjYXNlICc1JzoKLSAgICBjYXNlICclJzoKLSAgICAgICAgcmV0dXJuIFZLXzU7
Ci0gICAgY2FzZSAnNic6Ci0gICAgY2FzZSAnXic6Ci0gICAgICAgIHJldHVybiBWS182OwotICAg
IGNhc2UgJzcnOgotICAgIGNhc2UgJyYnOgotICAgICAgICByZXR1cm4gVktfNzsKLSAgICBjYXNl
ICc4JzoKLSAgICBjYXNlICcqJzoKLSAgICAgICAgcmV0dXJuIFZLXzg7Ci0gICAgY2FzZSAnOSc6
Ci0gICAgY2FzZSAnKCc6Ci0gICAgICAgIHJldHVybiBWS185OwotICAgIGNhc2UgJ2EnOgotICAg
IGNhc2UgJ0EnOgotICAgICAgICByZXR1cm4gVktfQTsKLSAgICBjYXNlICdiJzoKLSAgICBjYXNl
ICdCJzoKLSAgICAgICAgcmV0dXJuIFZLX0I7Ci0gICAgY2FzZSAnYyc6Ci0gICAgY2FzZSAnQyc6
Ci0gICAgICAgIHJldHVybiBWS19DOwotICAgIGNhc2UgJ2QnOgotICAgIGNhc2UgJ0QnOgotICAg
ICAgICByZXR1cm4gVktfRDsKLSAgICBjYXNlICdlJzoKLSAgICBjYXNlICdFJzoKLSAgICAgICAg
cmV0dXJuIFZLX0U7Ci0gICAgY2FzZSAnZic6Ci0gICAgY2FzZSAnRic6Ci0gICAgICAgIHJldHVy
biBWS19GOwotICAgIGNhc2UgJ2cnOgotICAgIGNhc2UgJ0cnOgotICAgICAgICByZXR1cm4gVktf
RzsKLSAgICBjYXNlICdoJzoKLSAgICBjYXNlICdIJzoKLSAgICAgICAgcmV0dXJuIFZLX0g7Ci0g
ICAgY2FzZSAnaSc6Ci0gICAgY2FzZSAnSSc6Ci0gICAgICAgIHJldHVybiBWS19JOwotICAgIGNh
c2UgJ2onOgotICAgIGNhc2UgJ0onOgotICAgICAgICByZXR1cm4gVktfSjsKLSAgICBjYXNlICdr
JzoKLSAgICBjYXNlICdLJzoKLSAgICAgICAgcmV0dXJuIFZLX0s7Ci0gICAgY2FzZSAnbCc6Ci0g
ICAgY2FzZSAnTCc6Ci0gICAgICAgIHJldHVybiBWS19MOwotICAgIGNhc2UgJ20nOgotICAgIGNh
c2UgJ00nOgotICAgICAgICByZXR1cm4gVktfTTsKLSAgICBjYXNlICduJzoKLSAgICBjYXNlICdO
JzoKLSAgICAgICAgcmV0dXJuIFZLX047Ci0gICAgY2FzZSAnbyc6Ci0gICAgY2FzZSAnTyc6Ci0g
ICAgICAgIHJldHVybiBWS19POwotICAgIGNhc2UgJ3AnOgotICAgIGNhc2UgJ1AnOgotICAgICAg
ICByZXR1cm4gVktfUDsKLSAgICBjYXNlICdxJzoKLSAgICBjYXNlICdRJzoKLSAgICAgICAgcmV0
dXJuIFZLX1E7Ci0gICAgY2FzZSAncic6Ci0gICAgY2FzZSAnUic6Ci0gICAgICAgIHJldHVybiBW
S19SOwotICAgIGNhc2UgJ3MnOgotICAgIGNhc2UgJ1MnOgotICAgICAgICByZXR1cm4gVktfUzsK
LSAgICBjYXNlICd0JzoKLSAgICBjYXNlICdUJzoKLSAgICAgICAgcmV0dXJuIFZLX1Q7Ci0gICAg
Y2FzZSAndSc6Ci0gICAgY2FzZSAnVSc6Ci0gICAgICAgIHJldHVybiBWS19VOwotICAgIGNhc2Ug
J3YnOgotICAgIGNhc2UgJ1YnOgotICAgICAgICByZXR1cm4gVktfVjsKLSAgICBjYXNlICd3JzoK
LSAgICBjYXNlICdXJzoKLSAgICAgICAgcmV0dXJuIFZLX1c7Ci0gICAgY2FzZSAneCc6Ci0gICAg
Y2FzZSAnWCc6Ci0gICAgICAgIHJldHVybiBWS19YOwotICAgIGNhc2UgJ3knOgotICAgIGNhc2Ug
J1knOgotICAgICAgICByZXR1cm4gVktfWTsKLSAgICBjYXNlICd6JzoKLSAgICBjYXNlICdaJzoK
LSAgICAgICAgcmV0dXJuIFZLX1o7Ci0gICAgY2FzZSAnKyc6Ci0gICAgY2FzZSAnPSc6Ci0gICAg
ICAgIHJldHVybiBWS19PRU1fUExVUzsKLSAgICBjYXNlICctJzoKLSAgICBjYXNlICdfJzoKLSAg
ICAgICAgcmV0dXJuIFZLX09FTV9NSU5VUzsKLSAgICBjYXNlICc8JzoKLSAgICBjYXNlICcsJzoK
LSAgICAgICAgcmV0dXJuIFZLX09FTV9DT01NQTsKLSAgICBjYXNlICc+JzoKLSAgICBjYXNlICcu
JzoKLSAgICAgICAgcmV0dXJuIFZLX09FTV9QRVJJT0Q7Ci0gICAgY2FzZSAnOic6Ci0gICAgY2Fz
ZSAnOyc6Ci0gICAgICAgIHJldHVybiBWS19PRU1fMTsKLSAgICBjYXNlICcvJzoKLSAgICBjYXNl
ICc/JzoKLSAgICAgICAgcmV0dXJuIFZLX09FTV8yOwotICAgIGNhc2UgJ34nOgotICAgIGNhc2Ug
J2AnOgotICAgICAgICByZXR1cm4gVktfT0VNXzM7Ci0gICAgY2FzZSAneyc6Ci0gICAgY2FzZSAn
Wyc6Ci0gICAgICAgIHJldHVybiBWS19PRU1fNDsKLSAgICBjYXNlICd8JzoKLSAgICBjYXNlICdc
XCc6Ci0gICAgICAgIHJldHVybiBWS19PRU1fNTsKLSAgICBjYXNlICd9JzoKLSAgICBjYXNlICdd
JzoKLSAgICAgICAgcmV0dXJuIFZLX09FTV82OwotICAgIGNhc2UgJyInOgotICAgIGNhc2UgJ1wn
JzoKLSAgICAgICAgcmV0dXJuIFZLX09FTV83OwotICAgIGNhc2UgS0VZQ09ERV9QQVVTRToKLSAg
ICAgICAgcmV0dXJuIFZLX1BBVVNFOwotICAgIGNhc2UgS0VZQ09ERV9QUklOVDoKLSAgICAgICAg
cmV0dXJuIFZLX1BSSU5UOwotICAgIGNhc2UgS0VZQ09ERV9TQ1JPTExfTE9DSzoKLSAgICAgICAg
cmV0dXJuIFZLX1NDUk9MTDsKLSAgICBjYXNlIEtFWUNPREVfVEFCOgotICAgIGNhc2UgS0VZQ09E
RV9CQUNLX1RBQjoKLSAgICAgICAgcmV0dXJuIFZLX1RBQjsKLSAgICBjYXNlIEtFWUNPREVfTEVG
VDoKLSAgICBjYXNlIEtFWUNPREVfS1BfTEVGVDoKLSAgICAgICAgcmV0dXJuIFZLX0xFRlQ7Ci0g
ICAgY2FzZSBLRVlDT0RFX1JJR0hUOgotICAgIGNhc2UgS0VZQ09ERV9LUF9SSUdIVDoKLSAgICAg
ICAgcmV0dXJuIFZLX1JJR0hUOwotICAgIGNhc2UgS0VZQ09ERV9VUDoKLSAgICBjYXNlIEtFWUNP
REVfS1BfVVA6Ci0gICAgICAgIHJldHVybiBWS19VUDsKLSAgICBjYXNlIEtFWUNPREVfRE9XTjoK
LSAgICBjYXNlIEtFWUNPREVfS1BfRE9XTjoKLSAgICAgICAgcmV0dXJuIFZLX0RPV047Ci0gICAg
Y2FzZSBLRVlDT0RFX0tQX0RFTEVURToKLSAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsKLSAgICBj
YXNlIEtFWUNPREVfTUVOVToKLSAgICBjYXNlIEtFWUNPREVfTEVGVF9BTFQ6Ci0gICAgY2FzZSBL
RVlDT0RFX1JJR0hUX0FMVDoKLSAgICAgICAgcmV0dXJuIFZLX01FTlU7Ci0gICAgY2FzZSBLRVlD
T0RFX0hPTUU6Ci0gICAgY2FzZSBLRVlDT0RFX0tQX0hPTUU6Ci0gICAgICAgIHJldHVybiBWS19I
T01FOwotICAgIGNhc2UgS0VZQ09ERV9JTlNFUlQ6Ci0gICAgY2FzZSBLRVlDT0RFX0tQX0lOU0VS
VDoKLSAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsKLSAgICBjYXNlIEtFWUNPREVfUEdfVVA6Ci0g
ICAgY2FzZSBLRVlDT0RFX0tQX1BHX1VQOgotICAgICAgICByZXR1cm4gVktfUFJJT1I7Ci0gICAg
Y2FzZSBLRVlDT0RFX1BHX0RPV046Ci0gICAgY2FzZSBLRVlDT0RFX0tQX1BHX0RPV046Ci0gICAg
ICAgIHJldHVybiBWS19ORVhUOwotICAgIGNhc2UgS0VZQ09ERV9FTkQ6Ci0gICAgY2FzZSBLRVlD
T0RFX0tQX0VORDoKLSAgICAgICAgcmV0dXJuIFZLX0VORDsKLSAgICBjYXNlIEtFWUNPREVfQ0FQ
U19MT0NLOgotICAgICAgICByZXR1cm4gVktfQ0FQSVRBTDsKLSAgICBjYXNlIEtFWUNPREVfTEVG
VF9TSElGVDoKLSAgICBjYXNlIEtFWUNPREVfUklHSFRfU0hJRlQ6Ci0gICAgICAgIHJldHVybiBW
S19TSElGVDsKLSAgICBjYXNlIEtFWUNPREVfTEVGVF9DVFJMOgotICAgIGNhc2UgS0VZQ09ERV9S
SUdIVF9DVFJMOgotICAgICAgICByZXR1cm4gVktfQ09OVFJPTDsKLSAgICBjYXNlIEtFWUNPREVf
TlVNX0xPQ0s6Ci0gICAgICAgIHJldHVybiBWS19OVU1MT0NLOwotICAgIGNhc2UgS0VZQ09ERV9L
UF9QTFVTOgotICAgICAgICByZXR1cm4gVktfQUREOwotICAgIGNhc2UgS0VZQ09ERV9LUF9NSU5V
UzoKLSAgICAgICAgcmV0dXJuIFZLX1NVQlRSQUNUOwotICAgIGNhc2UgS0VZQ09ERV9LUF9NVUxU
SVBMWToKLSAgICAgICAgcmV0dXJuIFZLX01VTFRJUExZOwotICAgIGNhc2UgS0VZQ09ERV9LUF9E
SVZJREU6Ci0gICAgICAgIHJldHVybiBWS19ESVZJREU7Ci0gICAgY2FzZSBLRVlDT0RFX0tQX0ZJ
VkU6Ci0gICAgICAgIHJldHVybiBWS19OVU1QQUQ1OwotICAgIGNhc2UgS0VZQ09ERV9GMToKLSAg
ICAgICAgcmV0dXJuIFZLX0YxOwotICAgIGNhc2UgS0VZQ09ERV9GMjoKLSAgICAgICAgcmV0dXJu
IFZLX0YyOwotICAgIGNhc2UgS0VZQ09ERV9GMzoKLSAgICAgICAgcmV0dXJuIFZLX0YzOwotICAg
IGNhc2UgS0VZQ09ERV9GNDoKLSAgICAgICAgcmV0dXJuIFZLX0Y0OwotICAgIGNhc2UgS0VZQ09E
RV9GNToKLSAgICAgICAgcmV0dXJuIFZLX0Y1OwotICAgIGNhc2UgS0VZQ09ERV9GNjoKLSAgICAg
ICAgcmV0dXJuIFZLX0Y2OwotICAgIGNhc2UgS0VZQ09ERV9GNzoKLSAgICAgICAgcmV0dXJuIFZL
X0Y3OwotICAgIGNhc2UgS0VZQ09ERV9GODoKLSAgICAgICAgcmV0dXJuIFZLX0Y4OwotICAgIGNh
c2UgS0VZQ09ERV9GOToKLSAgICAgICAgcmV0dXJuIFZLX0Y5OwotICAgIGNhc2UgS0VZQ09ERV9G
MTA6Ci0gICAgICAgIHJldHVybiBWS19GMTA7Ci0gICAgY2FzZSBLRVlDT0RFX0YxMToKLSAgICAg
ICAgcmV0dXJuIFZLX0YxMTsKLSAgICBjYXNlIEtFWUNPREVfRjEyOgotICAgICAgICByZXR1cm4g
VktfRjEyOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdW5z
aWduZWQgYWRqdXN0Q2hhcmFjdGVyRnJvbU9TKHVuc2lnbmVkIGNoYXJhY3RlcikKLXsKLSAgICAv
LyBVc2Ugd2luZG93cyBrZXkgY2hhcmFjdGVyIGFzIEFTQ0lJIHZhbHVlIHdoZW4gcG9zc2libGUg
dG8gZW5oYW5jZSByZWFkYWJpbGl0eS4KLSAgICBzd2l0Y2ggKGNoYXJhY3RlcikgewotICAgIGNh
c2UgS0VZQ09ERV9CQUNLU1BBQ0U6Ci0gICAgICAgIHJldHVybiBWS19CQUNLOwotICAgIGNhc2Ug
S0VZQ09ERV9LUF9ERUxFVEU6Ci0gICAgY2FzZSBLRVlDT0RFX0RFTEVURToKLSAgICAgICAgcmV0
dXJuIDB4N2Y7Ci0gICAgY2FzZSBLRVlDT0RFX0VTQ0FQRToKLSAgICAgICAgcmV0dXJuIFZLX0VT
Q0FQRTsKLSAgICBjYXNlIEtFWUNPREVfUkVUVVJOOgotICAgIGNhc2UgS0VZQ09ERV9LUF9FTlRF
UjoKLSAgICAgICAgcmV0dXJuIFZLX1JFVFVSTjsKLSAgICBjYXNlIEtFWUNPREVfS1BfUExVUzoK
LSAgICAgICAgcmV0dXJuIFZLX0FERDsKLSAgICBjYXNlIEtFWUNPREVfS1BfTUlOVVM6Ci0gICAg
ICAgIHJldHVybiBWS19TVUJUUkFDVDsKLSAgICBjYXNlIEtFWUNPREVfS1BfTVVMVElQTFk6Ci0g
ICAgICAgIHJldHVybiBWS19NVUxUSVBMWTsKLSAgICBjYXNlIEtFWUNPREVfS1BfRElWSURFOgot
ICAgICAgICByZXR1cm4gVktfRElWSURFOwotICAgIGNhc2UgS0VZQ09ERV9LUF9GSVZFOgotICAg
IGNhc2UgS0VZQ09ERV9IT01FOgotICAgIGNhc2UgS0VZQ09ERV9LUF9IT01FOgotICAgIGNhc2Ug
S0VZQ09ERV9FTkQ6Ci0gICAgY2FzZSBLRVlDT0RFX0tQX0VORDoKLSAgICBjYXNlIEtFWUNPREVf
SU5TRVJUOgotICAgIGNhc2UgS0VZQ09ERV9LUF9JTlNFUlQ6Ci0gICAgY2FzZSBLRVlDT0RFX1BH
X1VQOgotICAgIGNhc2UgS0VZQ09ERV9LUF9QR19VUDoKLSAgICBjYXNlIEtFWUNPREVfUEdfRE9X
TjoKLSAgICBjYXNlIEtFWUNPREVfS1BfUEdfRE9XTjoKLSAgICBjYXNlIEtFWUNPREVfTUVOVToK
LSAgICBjYXNlIEtFWUNPREVfTEVGVF9BTFQ6Ci0gICAgY2FzZSBLRVlDT0RFX1JJR0hUX0FMVDoK
LSAgICBjYXNlIEtFWUNPREVfQ0FQU19MT0NLOgotICAgIGNhc2UgS0VZQ09ERV9MRUZUX1NISUZU
OgotICAgIGNhc2UgS0VZQ09ERV9SSUdIVF9TSElGVDoKLSAgICBjYXNlIEtFWUNPREVfTEVGVF9D
VFJMOgotICAgIGNhc2UgS0VZQ09ERV9SSUdIVF9DVFJMOgotICAgIGNhc2UgS0VZQ09ERV9OVU1f
TE9DSzoKLSAgICBjYXNlIEtFWUNPREVfUFJJTlQ6Ci0gICAgY2FzZSBLRVlDT0RFX1NDUk9MTF9M
T0NLOgotICAgIGNhc2UgS0VZQ09ERV9QQVVTRToKLSAgICBjYXNlIEtFWUNPREVfRjE6Ci0gICAg
Y2FzZSBLRVlDT0RFX0YyOgotICAgIGNhc2UgS0VZQ09ERV9GMzoKLSAgICBjYXNlIEtFWUNPREVf
RjQ6Ci0gICAgY2FzZSBLRVlDT0RFX0Y1OgotICAgIGNhc2UgS0VZQ09ERV9GNjoKLSAgICBjYXNl
IEtFWUNPREVfRjc6Ci0gICAgY2FzZSBLRVlDT0RFX0Y4OgotICAgIGNhc2UgS0VZQ09ERV9GOToK
LSAgICBjYXNlIEtFWUNPREVfRjEwOgotICAgIGNhc2UgS0VZQ09ERV9GMTE6Ci0gICAgY2FzZSBL
RVlDT0RFX0YxMjoKLSAgICBjYXNlIEtFWUNPREVfTEVGVDoKLSAgICBjYXNlIEtFWUNPREVfUklH
SFQ6Ci0gICAgY2FzZSBLRVlDT0RFX1VQOgotICAgIGNhc2UgS0VZQ09ERV9ET1dOOgotICAgICAg
ICByZXR1cm4gMDsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIGNoYXJhY3RlcjsKLX0KLQotc3RhdGljIGlubGluZSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6
OlR5cGUgdG9XZWJDb3JlUGxhdGZvcm1LZXlib2FyZEV2ZW50VHlwZShjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6S2V5Ym9hcmRFdmVudDo6VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OktleWJvYXJkRXZlbnQ6OktleURv
d246Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duOwotICAgIGNhc2UgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OktleWJvYXJkRXZlbnQ6OktleVVwOgotICAgICAgICByZXR1cm4g
UGxhdGZvcm1FdmVudDo6S2V5VXA7Ci0gICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6S2V5
Ym9hcmRFdmVudDo6S2V5Q2hhcjoKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUGxhdGZv
cm1FdmVudDo6Q2hhcjsKLSAgICB9Ci19Ci0KLVBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZv
cm1LZXlib2FyZEV2ZW50KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpLZXlib2FyZEV2ZW50
JiBldmVudCkKLSAgICA6IFBsYXRmb3JtRXZlbnQodG9XZWJDb3JlUGxhdGZvcm1LZXlib2FyZEV2
ZW50VHlwZShldmVudC50eXBlKCkpLCBldmVudC5zaGlmdEFjdGl2ZSgpIHx8IChldmVudC5jaGFy
YWN0ZXIoKSA9PSBLRVlDT0RFX0JBQ0tfVEFCKSwgZXZlbnQuY3RybEFjdGl2ZSgpLCBldmVudC5h
bHRBY3RpdmUoKSwgZXZlbnQubWV0YUFjdGl2ZSgpLCBjdXJyZW50VGltZSgpKQotICAgICwgbV9r
ZXlJZGVudGlmaWVyKGtleUlkZW50aWZpZXJGb3JCbGFja0JlcnJ5Q2hhcmFjdGVyKGV2ZW50LmNo
YXJhY3RlcigpKSkKLSAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKHdpbmRvd3NLZXlDb2Rl
Rm9yQmxhY2tCZXJyeUtleWNvZGUoZXZlbnQua2V5Y29kZSgpID8gZXZlbnQua2V5Y29kZSgpIDog
ZXZlbnQuY2hhcmFjdGVyKCkpKSAvLyBpZiBrZXljb2RlIGlzbid0IHZhbGlkLCB1c2UgY2hhcmFj
dGVyIGFzIGl0J3MgdW5jb252ZXJ0ZWQuCi0gICAgLCBtX2F1dG9SZXBlYXQoZmFsc2UpCi0gICAg
LCBtX2lzS2V5cGFkKGZhbHNlKQotICAgICwgbV91bm1vZGlmaWVkQ2hhcmFjdGVyKGV2ZW50LmNo
YXJhY3RlcigpKQotewotICAgIHVuc2lnbmVkIGNoYXJhY3RlciA9IGFkanVzdENoYXJhY3RlckZy
b21PUyhldmVudC5jaGFyYWN0ZXIoKSk7Ci0gICAgVUNoYXIgdXRmMTZbM10gPSB7MH07Ci0gICAg
aW50IGRlc3RMZW5ndGggPSAwOwotICAgIFVFcnJvckNvZGUgZWMgPSBVX1pFUk9fRVJST1I7Ci0g
ICAgdV9zdHJGcm9tVVRGMzIodXRmMTYsIDMsICZkZXN0TGVuZ3RoLCByZWludGVycHJldF9jYXN0
PFVDaGFyMzIqPigmY2hhcmFjdGVyKSwgMSwgJmVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAg
QkJMT0coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsQ3JpdGljYWwsICJQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCBFcnJvciBjb252ZXJ0aW5nIDB4JXgg
dG8gc3RyaW5nIGVjICglZCkuIiwgY2hhcmFjdGVyLCBlYyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgbV90ZXh0ID0gU3RyaW5nKHV0ZjE2LCBkZXN0TGVuZ3RoKTsKLSAgICBtX3VubW9k
aWZpZWRUZXh0ID0gbV90ZXh0OwotCi0gICAgaWYgKGV2ZW50LmNoYXJhY3RlcigpID09IEtFWUNP
REVfQkFDS19UQUIpCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OyAvLyBCYWNrVGFi
IHNob3VsZCBiZSB0cmVhdGVkIGFzIFNoaWZ0ICsgVGFiLgotCi0gICAgQkJMT0coQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIktleWJvYXJkIGV2ZW50IHJlY2VpdmVkIHRleHQ9
JWxjLCBrZXlJZGVudGlmaWVyPSVzLCB3aW5kb3dzVmlydHVhbEtleUNvZGU9JWQiLCBldmVudC5j
aGFyYWN0ZXIoKSwgbV9rZXlJZGVudGlmaWVyLmxhdGluMSgpLmRhdGEoKSwgbV93aW5kb3dzVmly
dHVhbEtleUNvZGUpOwotfQotCi1ib29sIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENh
cHNMb2NrU3RhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2
ZW50KFBsYXRmb3JtRXZlbnQ6OlR5cGUgdHlwZSwgYm9vbCBiYWNrd2FyZENvbXBhdGliaWxpdHlN
b2RlKQotewotICAgIC8vIENhbiBvbmx5IGNoYW5nZSB0eXBlIGZyb20gS2V5RG93biB0byBSYXdL
ZXlEb3duIG9yIENoYXIsIGFzIHdlIGxhY2sgaW5mb3JtYXRpb24gZm9yIG90aGVyIGNvbnZlcnNp
b25zLgotICAgIEFTU0VSVChtX3R5cGUgPT0gUGxhdGZvcm1FdmVudDo6S2V5RG93bik7Ci0gICAg
bV90eXBlID0gdHlwZTsKLQotICAgIGlmIChiYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3du
KSB7Ci0gICAgICAgIG1fdGV4dCA9IFN0cmluZygpOwotICAgICAgICBtX3VubW9kaWZpZWRUZXh0
ID0gU3RyaW5nKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9rZXlJZGVudGlmaWVyID0gU3Ry
aW5nKCk7Ci0gICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gMDsKLSAgICB9Ci19Ci0K
LXZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpnZXRDdXJyZW50TW9kaWZpZXJTdGF0ZShib29s
JiBzaGlmdEtleSwgYm9vbCYgY3RybEtleSwgYm9vbCYgYWx0S2V5LCBib29sJiBtZXRhS2V5KQot
ewotICAgIGludCBtb2RpZmllcnMgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlNj
cmVlbjo6cHJpbWFyeVNjcmVlbigpLT5nZXRDdXJyZW50TW9kaWZpZXJzU3RhdGUoKTsKLSAgICBz
aGlmdEtleSA9IG1vZGlmaWVycyAmIEtFWU1PRF9TSElGVDsKLSAgICBjdHJsS2V5ID0gbW9kaWZp
ZXJzICYgS0VZTU9EX0NUUkw7Ci0gICAgYWx0S2V5ID0gbW9kaWZpZXJzICYgS0VZTU9EX0FMVDsK
LSAgICBtZXRhS2V5ID0gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGxhdGZvcm1Nb3VzZUV2ZW50Qmxh
Y2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9QbGF0Zm9ybU1vdXNlRXZlbnRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QbGF0Zm9ybU1vdXNlRXZlbnRC
bGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLQotI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBsYXRmb3JtTW91c2VFdmVu
dDo6UGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IEludFBvaW50JiBldmVudFBvc2l0aW9uLCBjb25z
dCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFBsYXRmb3JtRXZlbnQ6OlR5cGUgdHlw
ZSwgaW50IGNsaWNrQ291bnQsIE1vdXNlQnV0dG9uIGJ1dHRvbiwgYm9vbCBzaGlmdEtleSwgYm9v
bCBjdHJsS2V5LCBib29sIGFsdEtleSwgTW91c2VJbnB1dE1ldGhvZCBtZXRob2QpCi0gICAgOiBQ
bGF0Zm9ybUV2ZW50KHR5cGUsIHNoaWZ0S2V5LCBjdHJsS2V5LCBhbHRLZXksIGZhbHNlLCBjdXJy
ZW50VGltZSgpKQotICAgICwgbV9wb3NpdGlvbihldmVudFBvc2l0aW9uKQotICAgICwgbV9nbG9i
YWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKLSAgICAsIG1fYnV0dG9uKGJ1dHRvbikKLSAgICAs
IG1fY2xpY2tDb3VudChjbGlja0NvdW50KQotICAgICwgbV9pbnB1dE1ldGhvZChtZXRob2QpCi17
Ci0gICAgQVNTRVJUKHR5cGUgIT0gTW91c2VTY3JvbGwpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BsYXRmb3Jt
U2NyZWVuQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYmxhY2tiZXJyeS9QbGF0Zm9ybVNjcmVlbkJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BsYXRmb3JtU2NyZWVu
QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKLQotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAi
U2V0dGluZ3MuaCIKLSNpbmNsdWRlICJXaWRnZXQuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybVNjcmVlbi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgc2NyZWVuSXNN
b25vY2hyb21lKFdpZGdldCopCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgc2NyZWVu
RGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KikKLXsKLSAgICByZXR1cm4gODsKLX0KLQotaW50IHNj
cmVlbkRlcHRoKFdpZGdldCopCi17Ci0gICAgcmV0dXJuIDI0OwotfQotCi0vLyBVc2UgbG9naWNh
bCAoZGVuc2l0eS1pbmRlcGVuZGVudCkgcGl4ZWxzIGluc3RlYWQgb2YgcGh5c2ljYWwgc2NyZWVu
IHBpeGVscy4KLXN0YXRpYyBGbG9hdFJlY3QgdG9Vc2VyU3BhY2UoRmxvYXRSZWN0IHJlY3QsIFdp
ZGdldCogd2lkZ2V0KQotewotICAgIGlmICh3aWRnZXQtPmlzRnJhbWVWaWV3KCkpIHsKLSAgICAg
ICAgUGFnZSogcGFnZSA9IHRvRnJhbWVWaWV3KHdpZGdldCktPmZyYW1lKCkucGFnZSgpOwotICAg
ICAgICBpZiAocGFnZSAmJiAhcGFnZS0+c2V0dGluZ3MoKS5hcHBseURldmljZVNjYWxlRmFjdG9y
SW5Db21wb3NpdG9yKCkpIHsKLSAgICAgICAgICAgIHJlY3Quc2NhbGUoMSAvIHBhZ2UtPmRldmlj
ZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICAgICAgcmVjdC5zZXRTaXplKGV4cGFuZGVkSW50U2l6
ZShyZWN0LnNpemUoKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZWN0OwotfQot
Ci1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBp
ZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotICAgIHJldHVybiB0b1Vz
ZXJTcGFjZShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpTY3JlZW46OnByaW1hcnlTY3JlZW4oKS0+c2l6ZSgpKSksIHdpZGdl
dCk7Ci19Ci0KLUZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQotewotICAgIGlm
ICghd2lkZ2V0KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0gICAgcmV0dXJuIHRvVXNl
clNwYWNlKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OlNjcmVlbjo6cHJpbWFyeVNjcmVlbigpLT5zaXplKCkpKSwgd2lkZ2V0
KTsKLX0KLQotdm9pZCBzY3JlZW5Db2xvclByb2ZpbGUoQ29sb3JQcm9maWxlJikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BsYXRmb3JtVG91Y2hFdmVudEJsYWNrQmVy
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkv
UGxhdGZvcm1Ub3VjaEV2ZW50QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGxhdGZvcm1Ub3VjaEV2ZW50QmxhY2tC
ZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybVRvdWNoRXZlbnQuaCIKLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0KLSNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Ub3VjaEV2ZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1zdGF0aWMgUGxhdGZvcm1FdmVudDo6VHlwZSB0b3VjaEV2ZW50VHlwZShCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6VG91Y2hFdmVudCogZXZlbnQpCi17Ci0gICAgc3dpdGNoIChldmVudC0+
bV90eXBlKSB7Ci0gICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hFdmVudDo6VG91
Y2hTdGFydDoKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6OlRvdWNoU3RhcnQ7Ci0gICAg
Y2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hFdmVudDo6VG91Y2hNb3ZlOgotICAgICAg
ICByZXR1cm4gUGxhdGZvcm1FdmVudDo6VG91Y2hNb3ZlOwotICAgIGNhc2UgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlRvdWNoRXZlbnQ6OlRvdWNoRW5kOgotICAgICAgICByZXR1cm4gUGxhdGZvcm1F
dmVudDo6VG91Y2hFbmQ7Ci0gICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hFdmVu
dDo6VG91Y2hDYW5jZWw6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpUb3VjaENhbmNl
bDsKLSAgICBjYXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaEV2ZW50OjpUb3VjaEluamVj
dGVkOgotICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6VG91Y2hNb3ZlOwotICAgIH0KLQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIC8vIFJldHVybmluZyBUb3VjaENhbmNlbCBq
dXN0IHRvIHNhdGlzZnkgdGhlIGNvbXBpbGVyJ3Mgd2lzaCB0byByZXR1cm4gYSB2YWxpZCB0eXBl
IGluIGEgbm9uLXZvaWQgZnVuY3Rpb24uCi0gICAgLy8gVGhpcyBjb2RlIHNob3VsZCBub3QgYmUg
cmVhY2hlZC4KLSAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6VG91Y2hDYW5jZWw7Ci19Ci0KLVBs
YXRmb3JtVG91Y2hFdmVudDo6UGxhdGZvcm1Ub3VjaEV2ZW50KEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpUb3VjaEV2ZW50KiBldmVudCkKLSAgICA6IFBsYXRmb3JtRXZlbnQodG91Y2hFdmVudFR5cGUo
ZXZlbnQpLCBldmVudC0+c2hpZnRBY3RpdmUoKSwgZXZlbnQtPmN0cmxBY3RpdmUoKSwgZXZlbnQt
PmFsdEFjdGl2ZSgpLCBmYWxzZSwgY3VycmVudFRpbWUoKSkKLSAgICAsIG1fcm90YXRpb24oMCkK
LSAgICAsIG1fc2NhbGUoMSkKLSAgICAsIG1fZG91YmxlVGFwKGZhbHNlKQotICAgICwgbV90b3Vj
aEhvbGQoZmFsc2UpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV2ZW50LT5tX3Bv
aW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV90b3VjaFBvaW50cy5hcHBlbmQoUGxhdGZvcm1U
b3VjaFBvaW50KGV2ZW50LT5tX3BvaW50c1tpXSkpOwotCi0gICAgaWYgKGV2ZW50LT5pc1BpbmNo
KCkpIHsKLSAgICAgICAgbV9yb3RhdGlvbiA9IGV2ZW50LT5waW5jaERhdGEoKS5tX2FuZ2xlICog
MTgwIC8gTV9QSTsKLSAgICAgICAgbV9zY2FsZSA9IGV2ZW50LT5waW5jaERhdGEoKS5tX3NjYWxl
OwotICAgIH0KLQotICAgIG1fZG91YmxlVGFwID0gZXZlbnQtPmlzRG91YmxlVGFwKCk7Ci0gICAg
bV90b3VjaEhvbGQgPSBldmVudC0+aXNUb3VjaEhvbGQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGxhdGZvcm1Ub3VjaFBvaW50QmxhY2tCZXJyeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QbGF0
Zm9ybVRvdWNoUG9pbnRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QbGF0Zm9ybVRvdWNoUG9pbnRCbGFja0JlcnJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1U
b3VjaFBvaW50LmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Bc3NlcnQuaD4KLSNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Ub3VjaEV2ZW50Lmg+Ci0KLSNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBsYXRmb3JtVG91Y2hQb2ludDo6
UGxhdGZvcm1Ub3VjaFBvaW50KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaFBvaW50
JiBwb2ludCkKLSAgICA6IG1faWQocG9pbnQuaWQoKSkKLSAgICAsIG1fc2NyZWVuUG9zKHBvaW50
LnNjcmVlblBvc2l0aW9uKCkpCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBjYWxjdWxhdGlu
ZyBhIG5ldyB2aWV3cG9ydCBwb3NpdGlvbiBmcm9tIHRoZSBjdXJyZW50IHNjcm9sbAotICAgIC8v
IHBvc2l0aW9uIGFuZCB0aGUgZG9jdW1lbnRDb250ZW50UG9zaXRpb24sIGluIGNhc2Ugd2Ugc2Ny
b2xsZWQgc2luY2UgdGhlIHBsYXRmb3JtCi0gICAgLy8gZXZlbnQgd2FzIGNyZWF0ZWQuCi0gICAg
LCBtX3Bvcyhwb2ludC5kb2N1bWVudFZpZXdwb3J0UG9zaXRpb24oKSkKLXsKLSAgICBzd2l0Y2gg
KHBvaW50LnN0YXRlKCkpIHsKLSAgICBjYXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaFBv
aW50OjpUb3VjaFJlbGVhc2VkOgotICAgICAgICBtX3N0YXRlID0gVG91Y2hSZWxlYXNlZDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludDo6
VG91Y2hNb3ZlZDoKLSAgICAgICAgbV9zdGF0ZSA9IFRvdWNoTW92ZWQ7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQ6OlRvdWNoUHJlc3Nl
ZDoKLSAgICAgICAgbV9zdGF0ZSA9IFRvdWNoUHJlc3NlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludDo6VG91Y2hTdGF0aW9uYXJ5Ogot
ICAgICAgICBtX3N0YXRlID0gVG91Y2hTdGF0aW9uYXJ5OwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBtX3N0YXRlID0gVG91Y2hTdGF0aW9uYXJ5OyAvLyBtYWtlIHN1cmUg
bV9zdGF0ZSBpcyBpbml0aWFsaXplZAotICAgICAgICBCTEFDS0JFUlJZX0FTU0VSVChmYWxzZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2JsYWNrYmVycnkvUG9wdXBNZW51QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Qb3B1cE1lbnVCbGFja0JlcnJ5LmNwcAko
cmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Q
b3B1cE1lbnVCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJQb3B1cE1lbnVCbGFja0JlcnJ5LmgiCi0KLSNpbmNsdWRlICJQb3B1cE1l
bnVDbGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Qb3B1cE1lbnVCbGFja0JlcnJ5
OjpQb3B1cE1lbnVCbGFja0JlcnJ5KFBvcHVwTWVudUNsaWVudCogY2xpZW50KQotICAgIDogbV9w
b3B1cENsaWVudChjbGllbnQpCi17Ci19Ci0KLVBvcHVwTWVudUJsYWNrQmVycnk6On5Qb3B1cE1l
bnVCbGFja0JlcnJ5KCkKLXsKLX0KLQotdm9pZCBQb3B1cE1lbnVCbGFja0JlcnJ5OjpzaG93KGNv
bnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQpCi17Ci19Ci0KLXZvaWQgUG9wdXBNZW51Qmxh
Y2tCZXJyeTo6aGlkZSgpCi17Ci0gICAgbV9wb3B1cENsaWVudC0+cG9wdXBEaWRIaWRlKCk7Ci19
Ci0KLXZvaWQgUG9wdXBNZW51QmxhY2tCZXJyeTo6dXBkYXRlRnJvbUVsZW1lbnQoKQotewotfQot
Ci12b2lkIFBvcHVwTWVudUJsYWNrQmVycnk6OmRpc2Nvbm5lY3RDbGllbnQoKQotewotICAgIG1f
cG9wdXBDbGllbnQgPSAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BvcHVwTWVudUJsYWNrQmVycnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1BvcHVwTWVudUJs
YWNrQmVycnkuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YmxhY2tiZXJyeS9Qb3B1cE1lbnVCbGFja0JlcnJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVm
IFBvcHVwTWVudUJsYWNrQmVycnlfaAotI2RlZmluZSBQb3B1cE1lbnVCbGFja0JlcnJ5X2gKLQot
I2luY2x1ZGUgIlBvcHVwTWVudS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBv
cHVwTWVudUNsaWVudDsKLQotY2xhc3MgUG9wdXBNZW51QmxhY2tCZXJyeSA6IHB1YmxpYyBQb3B1
cE1lbnUgewotcHVibGljOgotICAgIFBvcHVwTWVudUJsYWNrQmVycnkoUG9wdXBNZW51Q2xpZW50
Kik7Ci0gICAgflBvcHVwTWVudUJsYWNrQmVycnkoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzaG93
KGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQgaW5kZXgpOwotICAgIHZpcnR1YWwgdm9p
ZCBoaWRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgdmly
dHVhbCB2b2lkIGRpc2Nvbm5lY3RDbGllbnQoKTsKLQotcHJpdmF0ZToKLSAgICBQb3B1cE1lbnVD
bGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wdXBDbGllbnQ7IH0KLQotICAgIFBv
cHVwTWVudUNsaWVudCogbV9wb3B1cENsaWVudDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1Jl
bmRlclRoZW1lQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9SZW5kZXJUaGVtZUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1JlbmRlclRoZW1lQmxh
Y2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE3OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEz
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVt
ZUJsYWNrQmVycnkuaCIKLQotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIb3N0
V2luZG93LmgiCi0jaW5jbHVkZSAiSW5wdXRUeXBlLmgiCi0jaW5jbHVkZSAiSW5wdXRUeXBlTmFt
ZXMuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotI2luY2x1ZGUgIk1lZGlh
UGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAi
UGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgotI2luY2x1ZGUgIlJl
bmRlclByb2dyZXNzLmgiCi0jaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0KLSNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1T
Y3JlZW4uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBTaXplcyAodW5pdCBweCkKLWNv
bnN0IGZsb2F0IHByb2dyZXNzTWluV2lkdGggPSAxNjsKLWNvbnN0IGZsb2F0IHByb2dyZXNzVGV4
dHVyZVVuaXRXaWR0aCA9IDkuMDsKLWNvbnN0IGZsb2F0IG1lZGlhQ29udHJvbHNIZWlnaHQgPSA0
NDsKLWNvbnN0IGZsb2F0IG1lZGlhQmFja0J1dHRvbkhlaWdodCA9IDMzOwotLy8gU2NhbGUgZXhp
dC1mdWxsc2NyZWVuIGJ1dHRvbiBzaXplLgotY29uc3QgZmxvYXQgbWVkaWFGdWxsc2NyZWVuQnV0
dG9uSGVpZ2h0UmF0aW8gPSA1IC8gMTEuMDsKLWNvbnN0IGZsb2F0IG1lZGlhRnVsbHNjcmVlbkJ1
dHRvbldpZHRoUmF0aW8gPSAzIC8gMTEuMDsKLWNvbnN0IGZsb2F0IG1lZGlhU2xpZGVyRW5kQWRq
dXN0ID0gMjsKLWNvbnN0IGZsb2F0IG1lZGlhU2xpZGVyVHJhY2tSYWRpdXMgPSAzOwotY29uc3Qg
ZmxvYXQgbWVkaWFTbGlkZXJUaHVtYldpZHRoID0gMjU7Ci1jb25zdCBmbG9hdCBtZWRpYVNsaWRl
clRodW1iSGVpZ2h0ID0gMjU7Ci1jb25zdCBmbG9hdCBtZWRpYVNsaWRlclRodW1iUmFkaXVzID0g
MzsKLWNvbnN0IGZsb2F0IHNsaWRlclRodW1iV2lkdGggPSAxNTsKLWNvbnN0IGZsb2F0IHNsaWRl
clRodW1iSGVpZ2h0ID0gMjU7Ci0KLS8vIE11bHRpcGxpZXJzCi1jb25zdCB1bnNpZ25lZCBwYWRk
aW5nRGl2aXNvciA9IDEwOwotY29uc3QgdW5zaWduZWQgZnVsbFNjcmVlbkVubGFyZ2VtZW50RmFj
dG9yID0gMjsKLWNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yVGhyZXNob2xkID0gMi4wOwotCi0vLyBT
bGljZSBsZW5ndGgKLWNvbnN0IGludCBzbWFsbFNsaWNlID0gODsKLWNvbnN0IGludCBtZWRpdW1T
bGljZSA9IDEwOwotY29uc3QgaW50IGxhcmdlU2xpY2UgPSAxMzsKLQotLy8gU2xpZGVyIEF1cmEs
IGNhbGN1bGF0ZWQgZnJvbSBVWCBzcGVjCi1jb25zdCBmbG9hdCBhdXJhUmF0aW8gPSAxLjYyOwot
Ci0vLyBEcm9wZG93biBhcnJvdyBwb3NpdGlvbiwgY2FsY3VsYXRlZCBmcm9tIFVYIHNwZWMKLWNv
bnN0IGZsb2F0IHhQb3NpdGlvblJhdGlvID0gMzsKLWNvbnN0IGZsb2F0IHlQb3NpdGlvblJhdGlv
ID0gMC4zODsKLWNvbnN0IGZsb2F0IHdpZHRoUmF0aW8gPSAzOwotY29uc3QgZmxvYXQgaGVpZ2h0
UmF0aW8gPSAwLjIzOwotCi0vLyBDb2xvcnMKLWNvbnN0IFJHQkEzMiBmb2N1c1JpbmdQZW4gPSAw
eGZmYTNjOGZlOwotCi1mbG9hdCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OmRlZmF1bHRGb250U2l6
ZSA9IDE2OwotCi1jb25zdCBTdHJpbmcmIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6ZGVmYXVsdEdV
SUZvbnQoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBmb250RmFjZSwgKEFT
Q0lJTGl0ZXJhbCgiU2xhdGUgUHJvIikpKTsKLSAgICByZXR1cm4gZm9udEZhY2U7Ci19Ci0KLXN0
YXRpYyBSZW5kZXJTbGlkZXIqIGRldGVybWluZVJlbmRlclNsaWRlcihSZW5kZXJPYmplY3QqIG9i
amVjdCkKLXsKLSAgICBBU1NFUlQob2JqZWN0LT5pc1NsaWRlclRodW1iKCkpOwotICAgIC8vIFRo
ZSBSZW5kZXJTbGlkZXIgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIHNsaWRlciB0aHVtYi4KLSAgICB3
aGlsZSAob2JqZWN0ICYmICFvYmplY3QtPmlzU2xpZGVyKCkpCi0gICAgICAgIG9iamVjdCA9IG9i
amVjdC0+cGFyZW50KCk7Ci0gICAgcmV0dXJuIHRvUmVuZGVyU2xpZGVyKG9iamVjdCk7Ci19Ci0K
LXN0YXRpYyBmbG9hdCBkZXRlcm1pbmVGdWxsU2NyZWVuTXVsdGlwbGllcihFbGVtZW50KiBlbGVt
ZW50KQotewotICAgIGZsb2F0IGZ1bGxTY3JlZW5NdWx0aXBsaWVyID0gMS4wOwotI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFKFZJREVPKQotICAgIGlmIChlbGVtZW50ICYmIGVs
ZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpICYmIGVsZW1lbnQtPmRvY3Vt
ZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpID09IHBhcmVudE1lZGlhRWxl
bWVudChlbGVtZW50KSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGVsZW1lbnQtPmRvY3Vt
ZW50KCktPnBhZ2UoKSkgewotICAgICAgICAgICAgaWYgKHBhZ2UtPmRldmljZVNjYWxlRmFjdG9y
KCkgPCBzY2FsZUZhY3RvclRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICBmdWxsU2NyZWVuTXVs
dGlwbGllciA9IGZ1bGxTY3JlZW5FbmxhcmdlbWVudEZhY3RvcjsKLQotICAgICAgICAgICAgLy8g
VGhlIHdheSB0aGUgQmxhY2tCZXJyeSBwb3J0IGltcGxlbWVudHMgdGhlIEZVTExTQ1JFRU5fQVBJ
IGZvciBtZWRpYSBlbGVtZW50cwotICAgICAgICAgICAgLy8gbWlnaHQgcmVzdWx0IGluIHRoZSBj
b250cm9scyBiZWluZyBvdmVyc2l6ZWQsIHByb3BvcnRpb25hbGx5IHRvIHRoZSBjdXJyZW50IHBh
Z2UKLSAgICAgICAgICAgIC8vIHNjYWxlLiBUaGF0IGhhcHBlbnMgYmVjYXVzZSB0aGUgZnVsbHNj
cmVlbiBlbGVtZW50IGdldHMgc2l6ZWQgdG8gYmUgYXMgYmlnIGFzIHRoZQotICAgICAgICAgICAg
Ly8gdmlld3BvcnQgc2l6ZSwgYW5kIHRoZSB2aWV3cG9ydCBzaXplIG1pZ2h0IGdldCBvdXRzdHJl
dGNoZWQgdG8gZml0IHRvIHRoZSBzY3JlZW4gZGltZW5zaW9ucy4KLSAgICAgICAgICAgIC8vIFRv
IGZpeCB0aGF0LCBsZXRzIHN0cmlwcyBvdXQgdGhlIFBhZ2Ugc2NhbGUgZmFjdG9yIGZyb20gdGhl
IG1lZGlhIGNvbnRyb2xzIG11bHRpcGxpZXIuCi0gICAgICAgICAgICBmbG9hdCBzY2FsZUZhY3Rv
ciA9IGVsZW1lbnQtPmRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKS0+Y3VycmVudFpvb21GYWN0b3IoKTsKLSAgICAgICAgICAgIGZsb2F0IHNjYWxl
RmFjdG9yRnVkZ2UgPSAxIC8gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICAgICAgICAg
IGZ1bGxTY3JlZW5NdWx0aXBsaWVyIC89IHNjYWxlRmFjdG9yICogc2NhbGVGYWN0b3JGdWRnZTsK
LSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBmdWxsU2NyZWVuTXVsdGlwbGll
cjsKLX0KLQotc3RhdGljIHZvaWQgZHJhd0NvbnRyb2woR3JhcGhpY3NDb250ZXh0KiBnYywgY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBJbWFnZSogaW1nKQotewotICAgIGlmICghaW1nKQotICAgICAg
ICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgaW1nLT53aWR0aCgpLCBpbWct
PmhlaWdodCgpKTsKLSAgICBnYy0+ZHJhd0ltYWdlKGltZywgQ29sb3JTcGFjZURldmljZVJHQiwg
cmVjdCwgc3JjUmVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdUaHJlZVNsaWNlSG9yaXpvbnRh
bChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZSogaW1nLCBp
bnQgc2xpY2UpCi17Ci0gICAgaWYgKCFpbWcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0
U2l6ZSBkc3RTbGljZShyZWN0LmhlaWdodCgpIC8gMiwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgRmxv
YXRSZWN0IHNyY1JlY3QoMCwgMCwgc2xpY2UsIGltZy0+aGVpZ2h0KCkpOwotICAgIEZsb2F0UmVj
dCBkc3RSZWN0KHJlY3QubG9jYXRpb24oKSwgZHN0U2xpY2UpOwotCi0gICAgZ2MtPmRyYXdJbWFn
ZShpbWcsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdFJlY3QsIHNyY1JlY3QpOwotICAgIHNyY1Jl
Y3QubW92ZShpbWctPndpZHRoKCkgLSBzcmNSZWN0LndpZHRoKCksIDApOwotICAgIGRzdFJlY3Qu
bW92ZShyZWN0LndpZHRoKCkgLSBkc3RSZWN0LndpZHRoKCksIDApOwotICAgIGdjLT5kcmF3SW1h
Z2UoaW1nLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkc3RSZWN0LCBzcmNSZWN0KTsKLQotICAgIHNy
Y1JlY3QgPSBGbG9hdFJlY3Qoc2xpY2UsIDAsIGltZy0+d2lkdGgoKSAtIDIgKiBzbGljZSwgaW1n
LT5oZWlnaHQoKSk7Ci0gICAgZHN0UmVjdCA9IEZsb2F0UmVjdChyZWN0LngoKSArIGRzdFNsaWNl
LndpZHRoKCksIHJlY3QueSgpLCByZWN0LndpZHRoKCkgLSAyICogZHN0U2xpY2Uud2lkdGgoKSwg
ZHN0U2xpY2UuaGVpZ2h0KCkpOwotICAgIGdjLT5kcmF3SW1hZ2UoaW1nLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBkc3RSZWN0LCBzcmNSZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd1RocmVlU2xp
Y2VWZXJ0aWNhbChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFn
ZSogaW1nLCBpbnQgc2xpY2UpCi17Ci0gICAgaWYgKCFpbWcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEZsb2F0U2l6ZSBkc3RTbGljZShyZWN0LndpZHRoKCksIHJlY3Qud2lkdGgoKSAvIDIpOwot
ICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIGltZy0+d2lkdGgoKSwgc2xpY2UpOwotICAgIEZs
b2F0UmVjdCBkc3RSZWN0KHJlY3QubG9jYXRpb24oKSwgZHN0U2xpY2UpOwotCi0gICAgZ2MtPmRy
YXdJbWFnZShpbWcsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdFJlY3QsIHNyY1JlY3QpOwotICAg
IHNyY1JlY3QubW92ZSgwLCBpbWctPmhlaWdodCgpIC0gc3JjUmVjdC5oZWlnaHQoKSk7Ci0gICAg
ZHN0UmVjdC5tb3ZlKDAsIHJlY3QuaGVpZ2h0KCkgLSBkc3RSZWN0LmhlaWdodCgpKTsKLSAgICBn
Yy0+ZHJhd0ltYWdlKGltZywgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0UmVjdCwgc3JjUmVjdCk7
Ci0KLSAgICBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIHNsaWNlLCBpbWctPndpZHRoKCksIGltZy0+
aGVpZ2h0KCkgLSAyICogc2xpY2UpOwotICAgIGRzdFJlY3QgPSBGbG9hdFJlY3QocmVjdC54KCks
IHJlY3QueSgpICsgZHN0U2xpY2UuaGVpZ2h0KCksIGRzdFNsaWNlLndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkgLSAyICogZHN0U2xpY2UuaGVpZ2h0KCkpOwotICAgIGdjLT5kcmF3SW1hZ2UoaW1nLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBkc3RSZWN0LCBzcmNSZWN0KTsKLX0KLQotc3RhdGljIHZvaWQg
ZHJhd05pbmVTbGljZShHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBJbnRSZWN0JiByZWN0LCBk
b3VibGUgc2NhbGUsIEltYWdlKiBpbWcsIGludCBzbGljZSkKLXsKLSAgICBpZiAoIWltZykKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChyZWN0LmhlaWdodCgpICogc2NhbGUgPCAxMDEuMCkKLSAg
ICAgICAgc2NhbGUgPSAxMDEuMCAvIHJlY3QuaGVpZ2h0KCk7Ci0gICAgRmxvYXRTaXplIGRzdFNs
aWNlKHNsaWNlIC8gc2NhbGUsIHNsaWNlIC8gc2NhbGUpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0
KDAsIDAsIHNsaWNlLCBzbGljZSk7Ci0gICAgRmxvYXRSZWN0IGRzdFJlY3QocmVjdC5sb2NhdGlv
bigpLCBkc3RTbGljZSk7Ci0gICAgZ2MtPmRyYXdJbWFnZShpbWcsIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGRzdFJlY3QsIHNyY1JlY3QpOwotICAgIHNyY1JlY3QubW92ZShpbWctPndpZHRoKCkgLSBz
cmNSZWN0LndpZHRoKCksIDApOwotICAgIGRzdFJlY3QubW92ZShyZWN0LndpZHRoKCkgLSBkc3RS
ZWN0LndpZHRoKCksIDApOwotICAgIGdjLT5kcmF3SW1hZ2UoaW1nLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkc3RSZWN0LCBzcmNSZWN0KTsKLSAgICBzcmNSZWN0Lm1vdmUoMCwgaW1nLT5oZWlnaHQo
KSAtIHNyY1JlY3QuaGVpZ2h0KCkpOwotICAgIGRzdFJlY3QubW92ZSgwLCByZWN0LmhlaWdodCgp
IC0gZHN0UmVjdC5oZWlnaHQoKSk7Ci0gICAgZ2MtPmRyYXdJbWFnZShpbWcsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIGRzdFJlY3QsIHNyY1JlY3QpOwotICAgIHNyY1JlY3QubW92ZSgtKGltZy0+d2lk
dGgoKSAtIHNyY1JlY3Qud2lkdGgoKSksIDApOwotICAgIGRzdFJlY3QubW92ZSgtKHJlY3Qud2lk
dGgoKSAtIGRzdFJlY3Qud2lkdGgoKSksIDApOwotICAgIGdjLT5kcmF3SW1hZ2UoaW1nLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBkc3RSZWN0LCBzcmNSZWN0KTsKLQotICAgIHNyY1JlY3QgPSBGbG9h
dFJlY3Qoc2xpY2UsIDAsIGltZy0+d2lkdGgoKSAtIDIgKiBzbGljZSwgc2xpY2UpOwotICAgIGRz
dFJlY3QgPSBGbG9hdFJlY3QocmVjdC54KCkgKyBkc3RTbGljZS53aWR0aCgpLCByZWN0LnkoKSwg
cmVjdC53aWR0aCgpIC0gMiAqIGRzdFNsaWNlLndpZHRoKCksIGRzdFNsaWNlLmhlaWdodCgpKTsK
LSAgICBnYy0+ZHJhd0ltYWdlKGltZywgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0UmVjdCwgc3Jj
UmVjdCk7Ci0gICAgc3JjUmVjdC5tb3ZlKDAsIGltZy0+aGVpZ2h0KCkgLSBzcmNSZWN0LmhlaWdo
dCgpKTsKLSAgICBkc3RSZWN0Lm1vdmUoMCwgcmVjdC5oZWlnaHQoKSAtIGRzdFJlY3QuaGVpZ2h0
KCkpOwotICAgIGdjLT5kcmF3SW1hZ2UoaW1nLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkc3RSZWN0
LCBzcmNSZWN0KTsKLQotICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgc2xpY2UsIHNsaWNlLCBp
bWctPmhlaWdodCgpIC0gMiAqIHNsaWNlKTsKLSAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KHJlY3Qu
eCgpLCByZWN0LnkoKSArIGRzdFNsaWNlLmhlaWdodCgpLCBkc3RTbGljZS53aWR0aCgpLCByZWN0
LmhlaWdodCgpIC0gMiAqIGRzdFNsaWNlLmhlaWdodCgpKTsKLSAgICBnYy0+ZHJhd0ltYWdlKGlt
ZywgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgc3JjUmVjdC5t
b3ZlKGltZy0+d2lkdGgoKSAtIHNyY1JlY3Qud2lkdGgoKSwgMCk7Ci0gICAgZHN0UmVjdC5tb3Zl
KHJlY3Qud2lkdGgoKSAtIGRzdFJlY3Qud2lkdGgoKSwgMCk7Ci0gICAgZ2MtPmRyYXdJbWFnZShp
bWcsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdFJlY3QsIHNyY1JlY3QpOwotCi0gICAgc3JjUmVj
dCA9IEZsb2F0UmVjdChzbGljZSwgc2xpY2UsIGltZy0+d2lkdGgoKSAtIDIgKiBzbGljZSwgaW1n
LT5oZWlnaHQoKSAtIDIgKiBzbGljZSk7Ci0gICAgZHN0UmVjdCA9IEZsb2F0UmVjdChyZWN0Lngo
KSArIGRzdFNsaWNlLndpZHRoKCksIHJlY3QueSgpICsgZHN0U2xpY2UuaGVpZ2h0KCksIHJlY3Qu
d2lkdGgoKSAtIDIgKiBkc3RTbGljZS53aWR0aCgpLCByZWN0LmhlaWdodCgpIC0gMiAqIGRzdFNs
aWNlLmhlaWdodCgpKTsKLSAgICBnYy0+ZHJhd0ltYWdlKGltZywgQ29sb3JTcGFjZURldmljZVJH
QiwgZHN0UmVjdCwgc3JjUmVjdCk7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGxvYWRJbWFn
ZShjb25zdCBjaGFyKiBmaWxlbmFtZSkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IHJlc291cmNlOwot
ICAgIHJlc291cmNlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGZpbGVuYW1lKS5sZWFr
UmVmKCk7Ci0gICAgaWYgKCFyZXNvdXJjZSkgewotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6bG9nQWx3YXlzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4sICJSZW5kZXJU
aGVtZUJsYWNrQmVycnkgZmFpbGVkIHRvIGxvYWQgJXMucG5nIiwgZmlsZW5hbWUpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc291cmNlOwotfQotCi1QYXNzUmVmUHRy
PFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqKQotewotICAgIHN0
YXRpYyBSZW5kZXJUaGVtZSogdGhlbWUgPSBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OmNyZWF0ZSgp
LmxlYWtSZWYoKTsKLSAgICByZXR1cm4gdGhlbWU7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhl
bWU+IFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFJlbmRlclRoZW1lQmxhY2tCZXJyeSgpKTsKLX0KLQotUmVuZGVyVGhlbWVCbGFja0Jl
cnJ5OjpSZW5kZXJUaGVtZUJsYWNrQmVycnkoKQotewotfQotCi1SZW5kZXJUaGVtZUJsYWNrQmVy
cnk6On5SZW5kZXJUaGVtZUJsYWNrQmVycnkoKQotewotfQotCi1TdHJpbmcgUmVuZGVyVGhlbWVC
bGFja0JlcnJ5OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5n
KHRoZW1lQmxhY2tCZXJyeVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZUJsYWNrQmVy
cnlVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi1TdHJpbmcg
UmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNCbGFja0JlcnJ5VXNlckFnZW50U3R5bGVT
aGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNCbGFja0JlcnJ5VXNlckFnZW50U3R5bGVTaGVldCkp
OwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi1TdHJpbmcgUmVuZGVy
VGhlbWVCbGFja0JlcnJ5OjpleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCkKLXsKLSAgICByZXR1
cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNCbGFja0JlcnJ5RnVsbHNjcmVlblVzZXJBZ2VudFN0eWxl
U2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzQmxhY2tCZXJyeUZ1bGxzY3JlZW5Vc2VyQWdlbnRT
dHlsZVNoZWV0KSk7Ci19Ci0jZW5kaWYKLQotZG91YmxlIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6
Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsgLy8gVHVybiBvZmYg
Y2FyZXQgYmxpbmtpbmcuCi19Ci0KLXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpzeXN0ZW1G
b250KENTU1ZhbHVlSUQgdmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0Ci17Ci0gICAgZmxvYXQgZm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemU7Ci0KLSAgICAv
LyBCb3RoIENTU1ZhbHVlV2Via2l0Q29udHJvbCBhbmQgQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRy
b2wgc2hvdWxkIHVzZSBkZWZhdWx0IGZvbnQgc2l6ZSB3aGljaCBsb29rcyBiZXR0ZXIgb24gdGhl
IGNvbnRyb2xzLgotICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlV2Via2l0TWluaUNvbnRyb2wp
IHsKLSAgICAgICAgLy8gV2h5IDIgcG9pbnRzIHNtYWxsZXI/IEJlY2F1c2UgdGhhdCdzIHdoYXQg
R2Vja28gZG9lcy4gTm90ZSB0aGF0IHdlCi0gICAgICAgIC8vIGFyZSBhc3N1bWluZyBhIDk2ZHBp
IHNjcmVlbiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgdmFsdWUgd2UgdXNlIG9uIFdpbmRvd3MuCi0g
ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwb2ludHNQZXJJbmNoID0gNzIuMGY7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdCBwaXhlbHNQZXJJbmNoID0gOTYuMGY7Ci0gICAgICAgIGZvbnRT
aXplIC09ICgyLjBmIC8gcG9pbnRzUGVySW5jaCkgKiBwaXhlbHNQZXJJbmNoOwotICAgIH0KLQot
ICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShkZWZhdWx0R1VJRm9u
dCgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7Ci0g
ICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOwotICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldEl0YWxpYyhmYWxzZSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVCbGFja0Jl
cnJ5OjpzZXRCdXR0b25TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgTGVu
Z3RoIHZlcnRQYWRkaW5nKGludChzdHlsZS0+Zm9udFNpemUoKSAvIHBhZGRpbmdEaXZpc29yKSwg
Rml4ZWQpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKHZlcnRQYWRkaW5nKTsKLSAgICBzdHls
ZS0+c2V0UGFkZGluZ0JvdHRvbSh2ZXJ0UGFkZGluZyk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVC
bGFja0JlcnJ5OjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBzZXRCdXR0b25TdHlsZShzdHlsZSk7Ci0g
ICAgc3R5bGUtPnNldEN1cnNvcihDVVJTT1JfV0VCS0lUX0dSQUIpOwotfQotCi12b2lkIFJlbmRl
clRoZW1lQmxhY2tCZXJyeTo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBzZXRCdXR0b25TdHlsZShz
dHlsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludFRleHRBcmVhKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkT3JUZXh0QXJlYU9yU2VhcmNoRmll
bGQob2JqZWN0LCBpbmZvLCByZWN0KTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6
OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAotewotICAgIHNldEJ1dHRvblN0eWxlKHN0eWxlKTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnBhaW50VGV4dEZpZWxkT3JUZXh0QXJlYU9yU2VhcmNo
RmllbGQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQoaW5mby5jb250ZXh0KTsKLSAgICBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQgPSBpbmZvLmNvbnRleHQ7Ci0KLSAgICBzdGF0aWMgUmVmUHRyPElt
YWdlPiBiZywgYmdEaXNhYmxlZCwgYmdIaWdobGlnaHQ7Ci0gICAgaWYgKCFiZykgewotICAgICAg
ICBpZiAoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpTY3JlZW46OnByaW1hcnlTY3Jl
ZW4oKS0+ZGlzcGxheVRlY2hub2xvZ3koKSA9PSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6Ok9sZWREaXNwbGF5VGVjaG5vbG9neSkKLSAgICAgICAgICAgIGJnID0gbG9hZEltYWdlKCJj
b3JlX3RleHRpbnB1dF9iZ19vbGVkIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJnID0g
bG9hZEltYWdlKCJjb3JlX3RleHRpbnB1dF9iZyIpOwotICAgICAgICBiZ0Rpc2FibGVkID0gbG9h
ZEltYWdlKCJjb3JlX3RleHRpbnB1dF9iZ19kaXNhYmxlZCIpOwotICAgICAgICBiZ0hpZ2hsaWdo
dCA9IGxvYWRJbWFnZSgiY29yZV90ZXh0aW5wdXRfYmdfaGlnaGxpZ2h0Iik7Ci0gICAgfQotCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwotICAgIGlmIChpc0Vu
YWJsZWQob2JqZWN0KSAmJiBiZykKLSAgICAgICAgZHJhd05pbmVTbGljZShjb250ZXh0LCByZWN0
LCBjdG0ueFNjYWxlKCksIGJnLmdldCgpLCBzbWFsbFNsaWNlKTsKLSAgICBpZiAoIWlzRW5hYmxl
ZChvYmplY3QpICYmIGJnRGlzYWJsZWQpCi0gICAgICAgIGRyYXdOaW5lU2xpY2UoY29udGV4dCwg
cmVjdCwgY3RtLnhTY2FsZSgpLCBiZ0Rpc2FibGVkLmdldCgpLCBzbWFsbFNsaWNlKTsKLQotICAg
IGlmICgoaXNIb3ZlcmVkKG9iamVjdCkgfHwgaXNGb2N1c2VkKG9iamVjdCkgfHwgaXNQcmVzc2Vk
KG9iamVjdCkpICYmIGJnSGlnaGxpZ2h0KQotICAgICAgICBkcmF3TmluZVNsaWNlKGNvbnRleHQs
IHJlY3QsIGN0bS54U2NhbGUoKSwgYmdIaWdobGlnaHQuZ2V0KCksIHNtYWxsU2xpY2UpOwotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6cGFpbnRU
ZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGRPclRleHRBcmVh
T3JTZWFyY2hGaWVsZChvYmplY3QsIGluZm8sIHJlY3QpOwotfQotCi12b2lkIFJlbmRlclRoZW1l
QmxhY2tCZXJyeTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBzZXRCdXR0b25TdHlsZShzdHls
ZSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjphZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Q29udHJvbEZvbnRQ
aXhlbFNpemUgPSAxMDsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdENhbmNlbEJ1dHRv
blNpemUgPSAxMzsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluQ2FuY2VsQnV0dG9uU2l6ZSA9
IDU7Ci0KLSAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6
ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRy
b2xGb250UGl4ZWxTaXplOwotICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gbHJvdW5kZihzdGQ6
Om1heChtaW5DYW5jZWxCdXR0b25TaXplLCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSAqIGZvbnRT
Y2FsZSkpOwotICAgIExlbmd0aCBsZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpOwotICAg
IHN0eWxlLT5zZXRXaWR0aChsZW5ndGgpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQobGVuZ3RoKTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGRPclRleHRBcmVhT3JTZWFyY2hGaWVsZChv
YmplY3QsIGluZm8sIHJlY3QpOwotfQotCi1JbnRSZWN0IFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6
Y29udmVydFRvUGFpbnRpbmdSZWN0KFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIExheW91dFJlY3QgcGFydFJlY3QsIGNvbnN0IElu
dFJlY3QmIGxvY2FsT2Zmc2V0KSBjb25zdAotewotICAgIC8vIENvbXB1dGUgYW4gb2Zmc2V0IGJl
dHdlZW4gdGhlIHBhcnQgcmVuZGVyZXIgYW5kIHRoZSBpbnB1dCByZW5kZXJlci4KLSAgICBMYXlv
dXRTaXplIG9mZnNldEZyb21JbnB1dFJlbmRlcmVyID0gLXBhcnRSZW5kZXJlci0+b2Zmc2V0RnJv
bUFuY2VzdG9yQ29udGFpbmVyKGlucHV0UmVuZGVyZXIpOwotICAgIC8vIE1vdmUgdGhlIHJlY3Qg
aW50byBwYXJ0UmVuZGVyZXIncyBjb29yZHMuCi0gICAgcGFydFJlY3QubW92ZShvZmZzZXRGcm9t
SW5wdXRSZW5kZXJlcik7Ci0gICAgLy8gQWNjb3VudCBmb3IgdGhlIGxvY2FsIGRyYXdpbmcgb2Zm
c2V0LgotICAgIHBhcnRSZWN0Lm1vdmUobG9jYWxPZmZzZXQueCgpLCBsb2NhbE9mZnNldC55KCkp
OwotCi0gICAgcmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3QocGFydFJlY3QpOwotfQotCi0KLWJv
b2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJl
bmRlck9iamVjdCogY2FuY2VsQnV0dG9uT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBOb2RlKiBpbnB1dCA9IGNhbmNlbEJ1dHRvbk9i
amVjdC0+bm9kZSgpLT5kZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2RlKCk7Ci0gICAgaWYgKCFp
bnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
UmVuZGVyQm94KiBpbnB1dFJlbmRlckJveCA9IHRvUmVuZGVyQm94KGlucHV0LT5yZW5kZXJlcigp
KTsKLSAgICBMYXlvdXRSZWN0IGlucHV0Q29udGVudEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250
ZW50Qm94UmVjdCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgYnV0dG9uIHN0YXlz
IHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveC4KLSAgICBMYXlvdXRVbml0
IGNhbmNlbEJ1dHRvblNpemUgPSBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgc3Rk
OjptaW48TGF5b3V0VW5pdD4oaW5wdXRDb250ZW50Qm94LmhlaWdodCgpLCByLmhlaWdodCgpKSk7
Ci0gICAgLy8gQ2FsY3VsYXRlIGNhbmNlbCBidXR0b24ncyBjb29yZGluYXRlcyByZWxhdGl2ZSB0
byB0aGUgaW5wdXQgZWxlbWVudC4KLSAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5
LiBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRl
ciwgaXQgd2lsbAotICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0
aGUgZmllbGQuIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KLSAgICBM
YXlvdXRSZWN0IGNhbmNlbEJ1dHRvblJlY3QoY2FuY2VsQnV0dG9uT2JqZWN0LT5vZmZzZXRGcm9t
QW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5kZXJCb3gpLndpZHRoKCksCi0gICAgICAgIGlucHV0
Q29udGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gY2FuY2VsQnV0dG9u
U2l6ZSArIDEpIC8gMiwgY2FuY2VsQnV0dG9uU2l6ZSwgY2FuY2VsQnV0dG9uU2l6ZSk7Ci0gICAg
SW50UmVjdCBwYWludGluZ1JlY3QgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXRSZW5kZXJC
b3gsIGNhbmNlbEJ1dHRvbk9iamVjdCwgY2FuY2VsQnV0dG9uUmVjdCwgcik7Ci0KLSAgICBzdGF0
aWMgSW1hZ2UqIGNhbmNlbEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFy
Y2hDYW5jZWwiKS5sZWFrUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBjYW5jZWxQcmVzc2VkSW1h
Z2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbFByZXNzZWQiKS5s
ZWFrUmVmKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpc1ByZXNzZWQoY2Fu
Y2VsQnV0dG9uT2JqZWN0KSA/IGNhbmNlbFByZXNzZWRJbWFnZSA6IGNhbmNlbEltYWdlLAotICAg
ICAgICBjYW5jZWxCdXR0b25PYmplY3QtPnN0eWxlKCktPmNvbG9yU3BhY2UoKSwgcGFpbnRpbmdS
ZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFRoZXNlIHNlZW0gdG8gYmUgcmVhc29u
YWJsZSBwYWRkaW5nIHZhbHVlcyBmcm9tIG9ic2VydmF0aW9uLgotICAgIGNvbnN0IGludCBwYWRk
aW5nTGVmdCA9IDg7Ci0gICAgY29uc3QgaW50IHBhZGRpbmdSaWdodCA9IDQ7Ci0KLSAgICBjb25z
dCBpbnQgbWluSGVpZ2h0ID0gc3R5bGUtPmZvbnRTaXplKCkgKiAyOwotCi0gICAgc3R5bGUtPnJl
c2V0UGFkZGluZygpOwotICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwg
Rml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7Ci0KLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChtaW5IZWln
aHQgKyBwYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExl
bmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Q3Vyc29yKENVUlNPUl9X
RUJLSVRfR1JBQik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpjYWxjdWxhdGVC
dXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9IHN0
eWxlLT5mb250U2l6ZSgpOwotICAgIExlbmd0aCBsZW5ndGgoc2l6ZSwgRml4ZWQpOwotICAgIGlm
IChzdHlsZS0+YXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCB8fCBzdHlsZS0+YXBwZWFyYW5j
ZSgpID09IFJhZGlvUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgobGVuZ3RoKTsKLSAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChsZW5ndGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVu
IHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAgICAg
IHN0eWxlLT5zZXRXaWR0aChsZW5ndGgpOwotCi0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1
dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChsZW5ndGgpOwotfQotCi1ib29sIFJlbmRl
clRoZW1lQmxhY2tCZXJyeTo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVChp
bmZvLmNvbnRleHQpOwotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGluZm8uY29udGV4
dDsKLQotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IGRpc2FibGVkLCBpbmFjdGl2ZSwgcHJlc3Nl
ZCwgYWN0aXZlLCBhY3RpdmVNYXJrLCBkaXNhYmxlTWFyaywgcHJlc3NlZE1hcms7Ci0gICAgaWYg
KCFkaXNhYmxlZCkgewotICAgICAgICBkaXNhYmxlZCA9IGxvYWRJbWFnZSgiY29yZV9jaGVja2Jv
eF9kaXNhYmxlZCIpOwotICAgICAgICBpbmFjdGl2ZSA9IGxvYWRJbWFnZSgiY29yZV9jaGVja2Jv
eF9pbmFjdGl2ZSIpOwotICAgICAgICBwcmVzc2VkID0gbG9hZEltYWdlKCJjb3JlX2NoZWNrYm94
X3ByZXNzZWQiKTsKLSAgICAgICAgYWN0aXZlID0gbG9hZEltYWdlKCJjb3JlX2NoZWNrYm94X2Fj
dGl2ZSIpOwotICAgICAgICBhY3RpdmVNYXJrID0gbG9hZEltYWdlKCJjb3JlX2NoZWNrYm94X2Fj
dGl2ZV9tYXJrIik7Ci0gICAgICAgIGRpc2FibGVNYXJrID0gbG9hZEltYWdlKCJjb3JlX2NoZWNr
Ym94X2Rpc2FibGVkX21hcmsiKTsKLSAgICAgICAgcHJlc3NlZE1hcmsgPSBsb2FkSW1hZ2UoImNv
cmVfY2hlY2tib3hfcHJlc3NlZF9tYXJrIik7Ci0gICAgfQotCi0gICAgLy8gQ2FjdWxhdGUgd2hl
cmUgdG8gcHV0IGNlbnRlciBjaGVja21hcmsuCi0gICAgRmxvYXRSZWN0IHRtcFJlY3QocmVjdCk7
Ci0KLSAgICBmbG9hdCBjZW50ZXJYID0gKChmbG9hdChpbmFjdGl2ZS0+d2lkdGgoKSkgLSBmbG9h
dChhY3RpdmVNYXJrLT53aWR0aCgpKSkgLyBmbG9hdChpbmFjdGl2ZS0+d2lkdGgoKSkgKiB0bXBS
ZWN0LndpZHRoKCkgLyAyKSArIHRtcFJlY3QueCgpOwotICAgIGZsb2F0IGNlbnRlclkgPSAoKGZs
b2F0KGluYWN0aXZlLT5oZWlnaHQoKSkgLSBmbG9hdChhY3RpdmVNYXJrLT5oZWlnaHQoKSkpIC8g
ZmxvYXQoaW5hY3RpdmUtPmhlaWdodCgpKSAqIHRtcFJlY3QuaGVpZ2h0KCkgLyAyKSArIHRtcFJl
Y3QueSgpOwotICAgIGZsb2F0IHdpZHRoID0gZmxvYXQoYWN0aXZlTWFyay0+d2lkdGgoKSkgLyBm
bG9hdChpbmFjdGl2ZS0+d2lkdGgoKSkgKiB0bXBSZWN0LndpZHRoKCk7Ci0gICAgZmxvYXQgaGVp
Z2h0ID0gZmxvYXQoYWN0aXZlTWFyay0+aGVpZ2h0KCkpIC8gZmxvYXQoaW5hY3RpdmUtPmhlaWdo
dCgpKSAqIHRtcFJlY3QuaGVpZ2h0KCk7Ci0gICAgRmxvYXRSZWN0IGNlbnRlclJlY3QoY2VudGVy
WCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBpZiAoaXNFbmFibGVkKG9iamVjdCkp
IHsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChvYmplY3QpKSB7Ci0gICAgICAgICAgICBkcmF3Q29u
dHJvbChjb250ZXh0LCByZWN0LCBwcmVzc2VkLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChpc0No
ZWNrZWQob2JqZWN0KSkgewotICAgICAgICAgICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIGNl
bnRlclJlY3QsIHByZXNzZWRNYXJrLmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHJlY3QsIGluYWN0aXZlLmdl
dCgpKTsKLSAgICAgICAgICAgIGlmIChpc0NoZWNrZWQob2JqZWN0KSkgewotICAgICAgICAgICAg
ICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHJlY3QsIGFjdGl2ZS5nZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgZHJhd0NvbnRyb2woY29udGV4dCwgY2VudGVyUmVjdCwgYWN0aXZlTWFyay5nZXQoKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBkcmF3Q29u
dHJvbChjb250ZXh0LCByZWN0LCBkaXNhYmxlZC5nZXQoKSk7Ci0gICAgICAgIGlmIChpc0NoZWNr
ZWQob2JqZWN0KSkKLSAgICAgICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHJlY3QsIGRpc2Fi
bGVNYXJrLmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRl
clRoZW1lQmxhY2tCZXJyeTo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKLXsKLSAgICBjYWxjdWxhdGVCdXR0b25TaXplKHN0eWxlKTsKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZUJsYWNrQmVycnk6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQoaW5mby5j
b250ZXh0KTsKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBpbmZvLmNvbnRleHQ7Ci0K
LSAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiBkaXNhYmxlZCwgZGlzYWJsZWREb3QsIGluYWN0aXZl
LCBwcmVzc2VkLCBhY3RpdmUsIGFjdGl2ZURvdCwgcHJlc3NlZERvdDsKLSAgICBpZiAoIWRpc2Fi
bGVkKSB7Ci0gICAgICAgIGRpc2FibGVkID0gbG9hZEltYWdlKCJjb3JlX3JhZGlvYnV0dG9uX2Rp
c2FibGVkIik7Ci0gICAgICAgIGRpc2FibGVkRG90ID0gbG9hZEltYWdlKCJjb3JlX3JhZGlvYnV0
dG9uX2RvdF9kaXNhYmxlZCIpOwotICAgICAgICBpbmFjdGl2ZSA9IGxvYWRJbWFnZSgiY29yZV9y
YWRpb2J1dHRvbl9pbmFjdGl2ZSIpOwotICAgICAgICBwcmVzc2VkID0gbG9hZEltYWdlKCJjb3Jl
X3JhZGlvYnV0dG9uX3ByZXNzZWQiKTsKLSAgICAgICAgYWN0aXZlID0gbG9hZEltYWdlKCJjb3Jl
X3JhZGlvYnV0dG9uX2FjdGl2ZSIpOwotICAgICAgICBhY3RpdmVEb3QgPSBsb2FkSW1hZ2UoImNv
cmVfcmFkaW9idXR0b25fZG90X3NlbGVjdGVkIik7Ci0gICAgICAgIHByZXNzZWREb3QgPSBsb2Fk
SW1hZ2UoImNvcmVfcmFkaW9idXR0b25fZG90X3ByZXNzZWQiKTsKLSAgICB9Ci0KLSAgICAvLyBD
YWN1bGF0ZSB3aGVyZSB0byBwdXQgY2VudGVyIGNpcmNsZS4KLSAgICBGbG9hdFJlY3QgdG1wUmVj
dChyZWN0KTsKLQotICAgIGZsb2F0IGNlbnRlclggPSAoKGZsb2F0KGluYWN0aXZlLT53aWR0aCgp
KSAtIGZsb2F0KGFjdGl2ZURvdC0+d2lkdGgoKSkpIC8gZmxvYXQoaW5hY3RpdmUtPndpZHRoKCkp
ICogdG1wUmVjdC53aWR0aCgpIC8gMikrIHRtcFJlY3QueCgpOwotICAgIGZsb2F0IGNlbnRlclkg
PSAoKGZsb2F0KGluYWN0aXZlLT5oZWlnaHQoKSkgLSBmbG9hdChhY3RpdmVEb3QtPmhlaWdodCgp
KSkgLyBmbG9hdChpbmFjdGl2ZS0+aGVpZ2h0KCkpICogdG1wUmVjdC5oZWlnaHQoKSAvIDIpICsg
dG1wUmVjdC55KCk7Ci0gICAgZmxvYXQgd2lkdGggPSBmbG9hdChhY3RpdmVEb3QtPndpZHRoKCkp
IC8gZmxvYXQoaW5hY3RpdmUtPndpZHRoKCkpICogdG1wUmVjdC53aWR0aCgpOwotICAgIGZsb2F0
IGhlaWdodCA9IGZsb2F0KGFjdGl2ZURvdC0+aGVpZ2h0KCkpIC8gZmxvYXQoaW5hY3RpdmUtPmhl
aWdodCgpKSAqIHRtcFJlY3QuaGVpZ2h0KCk7Ci0gICAgRmxvYXRSZWN0IGNlbnRlclJlY3QoY2Vu
dGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBpZiAoaXNFbmFibGVkKG9iamVj
dCkpIHsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChvYmplY3QpKSB7Ci0gICAgICAgICAgICBkcmF3
Q29udHJvbChjb250ZXh0LCByZWN0LCBwcmVzc2VkLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChp
c0NoZWNrZWQob2JqZWN0KSkKLSAgICAgICAgICAgICAgICBkcmF3Q29udHJvbChjb250ZXh0LCBj
ZW50ZXJSZWN0LCBwcmVzc2VkRG90LmdldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHJlY3QsIGluYWN0aXZlLmdldCgpKTsKLSAgICAgICAg
ICAgIGlmIChpc0NoZWNrZWQob2JqZWN0KSkgewotICAgICAgICAgICAgICAgIGRyYXdDb250cm9s
KGNvbnRleHQsIHJlY3QsIGFjdGl2ZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgZHJhd0NvbnRy
b2woY29udGV4dCwgY2VudGVyUmVjdCwgYWN0aXZlRG90LmdldCgpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHJl
Y3QsIGRpc2FibGVkLmdldCgpKTsKLSAgICAgICAgaWYgKGlzQ2hlY2tlZChvYmplY3QpKQotICAg
ICAgICAgICAgZHJhd0NvbnRyb2woY29udGV4dCwgcmVjdCwgZGlzYWJsZWREb3QuZ2V0KCkpOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5
OjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGNhbGN1bGF0
ZUJ1dHRvblNpemUoc3R5bGUpOwotfQotCi0vLyBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgZmFs
c2UsIFdlYkNvcmUgYXNzdW1lcyB0aGUgYnV0dG9uIGlzIGZ1bGx5IGRlY29yYXRlZAotYm9vbCBS
ZW5kZXJUaGVtZUJsYWNrQmVycnk6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJU
KGluZm8uY29udGV4dCk7Ci0gICAgaW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0ID0gaW5mby5jb250ZXh0OwotCi0gICAgc3RhdGljIFJlZlB0cjxJbWFn
ZT4gZGlzYWJsZWQsIGluYWN0aXZlLCBwcmVzc2VkOwotICAgIGlmICghZGlzYWJsZWQpIHsKLSAg
ICAgICAgZGlzYWJsZWQgPSBsb2FkSW1hZ2UoImNvcmVfYnV0dG9uX2Rpc2FibGVkIik7Ci0gICAg
ICAgIGluYWN0aXZlID0gbG9hZEltYWdlKCJjb3JlX2J1dHRvbl9pbmFjdGl2ZSIpOwotICAgICAg
ICBwcmVzc2VkID0gbG9hZEltYWdlKCJjb3JlX2J1dHRvbl9wcmVzc2VkIik7Ci0gICAgfQotCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwotICAgIGlmICghaXNF
bmFibGVkKG9iamVjdCkpIHsKLSAgICAgICAgZHJhd05pbmVTbGljZShjb250ZXh0LCByZWN0LCBj
dG0ueFNjYWxlKCksIGluYWN0aXZlLmdldCgpLCBsYXJnZVNsaWNlKTsKLSAgICAgICAgZHJhd05p
bmVTbGljZShjb250ZXh0LCByZWN0LCBjdG0ueFNjYWxlKCksIGRpc2FibGVkLmdldCgpLCBsYXJn
ZVNsaWNlKTsKLSAgICB9IGVsc2UgaWYgKGlzUHJlc3NlZChvYmplY3QpKQotICAgICAgICBkcmF3
TmluZVNsaWNlKGNvbnRleHQsIHJlY3QsIGN0bS54U2NhbGUoKSwgcHJlc3NlZC5nZXQoKSwgbGFy
Z2VTbGljZSk7Ci0gICAgZWxzZQotICAgICAgICBkcmF3TmluZVNsaWNlKGNvbnRleHQsIHJlY3Qs
IGN0bS54U2NhbGUoKSwgaW5hY3RpdmUuZ2V0KCksIGxhcmdlU2xpY2UpOwotCi0gICAgY29udGV4
dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUJs
YWNrQmVycnk6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciogY3NzLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgYWRqdXN0TWVudUxp
c3RCdXR0b25TdHlsZShjc3MsIHN0eWxlLCBlbGVtZW50KTsKLX0KLQotc3RhdGljIEludFJlY3Qg
Y29tcHV0ZU1lbnVMaXN0QXJyb3dCdXR0b25SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgLy8gRklYTUU6IFRoZSBtZW51IGxpc3QgYXJyb3cgYnV0dG9uIHNob3VsZCBoYXZlIGEgbWlu
aW11bSBhbmQgbWF4aW11bSB3aWR0aCAodG8gZW5zdXJlIHVzYWJpbGl0eSkgb3IKLSAgICAvLyBz
Y2FsZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGZvbnQgc2l6ZSB1c2VkIGluIHRoZSBtZW51IGxpc3Qg
Y29udHJvbCBvciBzb21lIGNvbWJpbmF0aW9uIG9mIGJvdGguCi0gICAgcmV0dXJuIEludFJlY3Qo
SW50UG9pbnQocmVjdC5tYXhYKCkgLSByZWN0LmhlaWdodCgpLCByZWN0LnkoKSksIEludFNpemUo
cmVjdC5oZWlnaHQoKSwgcmVjdC5oZWlnaHQoKSkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQmxh
Y2tCZXJyeTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVChpbmZvLmNvbnRl
eHQpOwotICAgIGluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCA9IGluZm8uY29udGV4dDsKLQotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IGRpc2FibGVk
LCBpbmFjdGl2ZSwgcHJlc3NlZCwgYXJyb3dVcCwgYXJyb3dVcERpc2FibGVkOwotICAgIGlmICgh
ZGlzYWJsZWQpIHsKLSAgICAgICAgZGlzYWJsZWQgPSBsb2FkSW1hZ2UoImNvcmVfYnV0dG9uX2Rp
c2FibGVkIik7Ci0gICAgICAgIGluYWN0aXZlID0gbG9hZEltYWdlKCJjb3JlX2J1dHRvbl9pbmFj
dGl2ZSIpOwotICAgICAgICBwcmVzc2VkID0gbG9hZEltYWdlKCJjb3JlX2J1dHRvbl9wcmVzc2Vk
Iik7Ci0gICAgICAgIGFycm93VXAgPSBsb2FkSW1hZ2UoImNvcmVfZHJvcGRvd25fYnV0dG9uX2Fy
cm93dXAiKTsKLSAgICAgICAgYXJyb3dVcERpc2FibGVkID0gbG9hZEltYWdlKCJjb3JlX2Ryb3Bk
b3duX2J1dHRvbl9hcnJvd3VwX2Rpc2FibGVkIik7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IGFy
cm93QnV0dG9uUmVjdGFuZ2xlKGNvbXB1dGVNZW51TGlzdEFycm93QnV0dG9uUmVjdChyZWN0KSk7
Ci0gICAgZmxvYXQgeCA9IGFycm93QnV0dG9uUmVjdGFuZ2xlLngoKSArIGFycm93QnV0dG9uUmVj
dGFuZ2xlLndpZHRoKCkgLyB4UG9zaXRpb25SYXRpbzsKLSAgICBmbG9hdCB5ID0gYXJyb3dCdXR0
b25SZWN0YW5nbGUueSgpICsgYXJyb3dCdXR0b25SZWN0YW5nbGUuaGVpZ2h0KCkgKiB5UG9zaXRp
b25SYXRpbzsKLSAgICBmbG9hdCB3aWR0aCA9IGFycm93QnV0dG9uUmVjdGFuZ2xlLndpZHRoKCkg
LyB3aWR0aFJhdGlvOwotICAgIGZsb2F0IGhlaWdodCA9IGFycm93QnV0dG9uUmVjdGFuZ2xlLmhl
aWdodCgpICogaGVpZ2h0UmF0aW87Ci0gICAgRmxvYXRSZWN0IHRtcFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gY29udGV4dC0+Z2V0Q1RNKCk7
Ci0gICAgaWYgKCFpc0VuYWJsZWQob2JqZWN0KSkgewotICAgICAgICBkcmF3TmluZVNsaWNlKGNv
bnRleHQsIHJlY3QsIGN0bS54U2NhbGUoKSwgaW5hY3RpdmUuZ2V0KCksIGxhcmdlU2xpY2UpOwot
ICAgICAgICBkcmF3TmluZVNsaWNlKGNvbnRleHQsIHJlY3QsIGN0bS54U2NhbGUoKSwgZGlzYWJs
ZWQuZ2V0KCksIGxhcmdlU2xpY2UpOwotICAgICAgICBkcmF3Q29udHJvbChjb250ZXh0LCB0bXBS
ZWN0LCBhcnJvd1VwRGlzYWJsZWQuZ2V0KCkpOwotICAgIH0gZWxzZSBpZiAoaXNQcmVzc2VkKG9i
amVjdCkpIHsKLSAgICAgICAgZHJhd05pbmVTbGljZShjb250ZXh0LCByZWN0LCBjdG0ueFNjYWxl
KCksIHByZXNzZWQuZ2V0KCksIGxhcmdlU2xpY2UpOwotICAgICAgICBkcmF3Q29udHJvbChjb250
ZXh0LCB0bXBSZWN0LCBhcnJvd1VwLmdldCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkcmF3
TmluZVNsaWNlKGNvbnRleHQsIHJlY3QsIGN0bS54U2NhbGUoKSwgaW5hY3RpdmUuZ2V0KCksIGxh
cmdlU2xpY2UpOwotICAgICAgICBkcmF3Q29udHJvbChjb250ZXh0LCB0bXBSZWN0LCBhcnJvd1Vw
LmdldCgpKTsKLSAgICB9Ci0gICAgY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OnBhaW50TWVudUxpc3RCdXR0b25E
ZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludE1lbnVMaXN0KG9iamVjdCwg
aW5mbywgcmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjphZGp1c3RTbGlk
ZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAot
ewotICAgIGZsb2F0IGZ1bGxTY3JlZW5NdWx0aXBsaWVyID0gMTsKLSAgICBDb250cm9sUGFydCBw
YXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKLQotICAgIGlmIChwYXJ0ID09IE1lZGlhU2xpZGVy
VGh1bWJQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpIHsKLSAgICAg
ICAgUmVuZGVyU2xpZGVyKiBzbGlkZXIgPSBkZXRlcm1pbmVSZW5kZXJTbGlkZXIoZWxlbWVudC0+
cmVuZGVyZXIoKSk7Ci0gICAgICAgIGlmIChzbGlkZXIpCi0gICAgICAgICAgICBmdWxsU2NyZWVu
TXVsdGlwbGllciA9IGRldGVybWluZUZ1bGxTY3JlZW5NdWx0aXBsaWVyKHRvRWxlbWVudChzbGlk
ZXItPm5vZGUoKSkpOwotICAgIH0KLQotICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewotICAgICAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0ID8g
c2xpZGVyVGh1bWJIZWlnaHQgOiBzbGlkZXJUaHVtYldpZHRoKSAqIGZ1bGxTY3JlZW5NdWx0aXBs
aWVyLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCgocGFydCA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCA/IHNsaWRlclRodW1iV2lkdGggOiBzbGlkZXJUaHVtYkhl
aWdodCkgKiBmdWxsU2NyZWVuTXVsdGlwbGllciwgRml4ZWQpKTsKLSAgICB9IGVsc2UgaWYgKHBh
cnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQgfHwgcGFydCA9PSBNZWRpYVNsaWRlclRo
dW1iUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKG1lZGlhU2xpZGVyVGh1
bWJXaWR0aCAqIGZ1bGxTY3JlZW5NdWx0aXBsaWVyLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+
c2V0SGVpZ2h0KExlbmd0aChtZWRpYVNsaWRlclRodW1iSGVpZ2h0ICogZnVsbFNjcmVlbk11bHRp
cGxpZXIsIEZpeGVkKSk7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6
cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGNvbnN0IHN0YXRpYyBpbnQgU2xpZGVy
VHJhY2tIZWlnaHQgPSA1OwotICAgIEludFJlY3QgcmVjdDI7Ci0gICAgaWYgKG9iamVjdC0+c3R5
bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHJl
Y3QyLnNldEhlaWdodChTbGlkZXJUcmFja0hlaWdodCk7Ci0gICAgICAgIHJlY3QyLnNldFdpZHRo
KHJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIHJlY3QyLnNldFgocmVjdC54KCkpOwotICAgICAgICBy
ZWN0Mi5zZXRZKHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBTbGlkZXJUcmFja0hlaWdodCkg
LyAyKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZWN0Mi5zZXRIZWlnaHQocmVjdC5oZWlnaHQo
KSk7Ci0gICAgICAgIHJlY3QyLnNldFdpZHRoKFNsaWRlclRyYWNrSGVpZ2h0KTsKLSAgICAgICAg
cmVjdDIuc2V0WChyZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBTbGlkZXJUcmFja0hlaWdodCkg
LyAyKTsKLSAgICAgICAgcmVjdDIuc2V0WShyZWN0LnkoKSk7Ci0gICAgfQotICAgIHN0YXRpYyBJ
bWFnZSogc2xpZGVyVHJhY2sgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImNvcmVfcHJv
Z3Jlc3NpbmRpY2F0b3JfYmciKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIHBhaW50U2xpZGVyVHJh
Y2tSZWN0KG9iamVjdCwgaW5mbywgcmVjdDIsIHNsaWRlclRyYWNrKTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZUJsYWNrQmVycnk6OnBhaW50U2xpZGVyVHJhY2tSZWN0KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBp
bmFjdGl2ZSkKLXsKLSAgICBBU1NFUlQoaW5mby5jb250ZXh0KTsKLSAgICBpbmZvLmNvbnRleHQt
PnNhdmUoKTsKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBpbmZvLmNvbnRleHQ7Ci0K
LSAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiBkaXNhYmxlZDsKLSAgICBpZiAoIWRpc2FibGVkKQot
ICAgICAgICBkaXNhYmxlZCA9IGxvYWRJbWFnZSgiY29yZV9zbGlkZXJfZmlsbF9kaXNhYmxlZCIp
OwotCi0gICAgaWYgKHJlY3Qud2lkdGgoKSA+IHJlY3QuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYg
KGlzRW5hYmxlZChvYmplY3QpKQotICAgICAgICAgICAgZHJhd1RocmVlU2xpY2VIb3Jpem9udGFs
KGNvbnRleHQsIHJlY3QsIGluYWN0aXZlLCBtZWRpdW1TbGljZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGRyYXdUaHJlZVNsaWNlSG9yaXpvbnRhbChjb250ZXh0LCByZWN0LCBkaXNhYmxl
ZC5nZXQoKSwgKHNtYWxsU2xpY2UgLSAxKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGlz
RW5hYmxlZChvYmplY3QpKQotICAgICAgICAgICAgZHJhd1RocmVlU2xpY2VWZXJ0aWNhbChjb250
ZXh0LCByZWN0LCBpbmFjdGl2ZSwgbWVkaXVtU2xpY2UpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBkcmF3VGhyZWVTbGljZVZlcnRpY2FsKGNvbnRleHQsIHJlY3QsIGRpc2FibGVkLmdldCgp
LCAoc21hbGxTbGljZSAtIDEpKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6cGFpbnRT
bGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVChpbmZvLmNvbnRleHQpOwotICAgIGlu
Zm8uY29udGV4dC0+c2F2ZSgpOwotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGluZm8u
Y29udGV4dDsKLQotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IGRpc2FibGVkLCBpbmFjdGl2ZSwg
cHJlc3NlZCwgYXVyYTsKLSAgICBpZiAoIWRpc2FibGVkKSB7Ci0gICAgICAgIGRpc2FibGVkID0g
bG9hZEltYWdlKCJjb3JlX3NsaWRlcl9oYW5kbGVfZGlzYWJsZWQiKTsKLSAgICAgICAgaW5hY3Rp
dmUgPSBsb2FkSW1hZ2UoImNvcmVfc2xpZGVyX2hhbmRsZSIpOwotICAgICAgICBwcmVzc2VkID0g
bG9hZEltYWdlKCJjb3JlX3NsaWRlcl9oYW5kbGVfcHJlc3NlZCIpOwotICAgICAgICBhdXJhID0g
bG9hZEltYWdlKCJjb3JlX3NsaWRlcl9hdXJhIik7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHRt
cFJlY3QocmVjdCk7Ci0gICAgZmxvYXQgbGVuZ3RoID0gc3RkOjptYXgodG1wUmVjdC53aWR0aCgp
LCB0bXBSZWN0LmhlaWdodCgpKTsKLSAgICBpZiAodG1wUmVjdC53aWR0aCgpID4gdG1wUmVjdC5o
ZWlnaHQoKSkgewotICAgICAgICB0bXBSZWN0LnNldFkodG1wUmVjdC55KCkgLSAobGVuZ3RoIC0g
dG1wUmVjdC5oZWlnaHQoKSkgLyAyKTsKLSAgICAgICAgdG1wUmVjdC5zZXRIZWlnaHQobGVuZ3Ro
KTsKLSAgICB9IGVsc2UgewotICAgICAgICB0bXBSZWN0LnNldFgodG1wUmVjdC54KCkgLSAobGVu
Z3RoIC0gdG1wUmVjdC53aWR0aCgpKSAvIDIpOwotICAgICAgICB0bXBSZWN0LnNldFdpZHRoKGxl
bmd0aCk7Ci0gICAgfQotCi0gICAgZmxvYXQgYXVyYUhlaWdodCA9IGxlbmd0aCAqIGF1cmFSYXRp
bzsKLSAgICBmbG9hdCBhdXJhV2lkdGggPSBhdXJhSGVpZ2h0OwotICAgIGZsb2F0IGF1cmFYID0g
dG1wUmVjdC54KCkgLSAoYXVyYVdpZHRoIC0gdG1wUmVjdC53aWR0aCgpKSAvIDI7Ci0gICAgZmxv
YXQgYXVyYVkgPSB0bXBSZWN0LnkoKSAtIChhdXJhSGVpZ2h0IC0gdG1wUmVjdC5oZWlnaHQoKSkg
LyAyOwotICAgIEZsb2F0UmVjdCBhdXJhUmVjdChhdXJhWCwgYXVyYVksIGF1cmFXaWR0aCwgYXVy
YUhlaWdodCk7Ci0KLSAgICBpZiAoIWlzRW5hYmxlZChvYmplY3QpKSB7Ci0gICAgICAgIC8vIERp
c2FibGVkIGhhbmRsZSBzaHJpbmsgMzAlCi0gICAgICAgIHRtcFJlY3QubW92ZSh0bXBSZWN0Lndp
ZHRoKCkgKiAwLjA3NSwgdG1wUmVjdC5oZWlnaHQoKSAqIDAuMDc1KTsKLSAgICAgICAgdG1wUmVj
dC5jb250cmFjdCh0bXBSZWN0LndpZHRoKCkgKiAwLjE1LCB0bXBSZWN0LmhlaWdodCgpICogMC4x
NSk7Ci0gICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHRtcFJlY3QsIGRpc2FibGVkLmdldCgp
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoaXNQcmVzc2VkKG9iamVjdCkgfHwgaXNIb3Zl
cmVkKG9iamVjdCkgfHwgaXNGb2N1c2VkKG9iamVjdCkpIHsKLSAgICAgICAgICAgIGRyYXdDb250
cm9sKGNvbnRleHQsIHRtcFJlY3QsIHByZXNzZWQuZ2V0KCkpOwotICAgICAgICAgICAgZHJhd0Nv
bnRyb2woY29udGV4dCwgYXVyYVJlY3QsIGF1cmEuZ2V0KCkpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGRyYXdDb250cm9sKGNvbnRleHQsIHRtcFJlY3QsIGluYWN0aXZlLmdldCgpKTsK
LSAgICB9Ci0KLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6YWRqdXN0TWVkaWFDb250cm9sU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
LXsKLSAgICBmbG9hdCBmdWxsU2NyZWVuTXVsdGlwbGllciA9IGRldGVybWluZUZ1bGxTY3JlZW5N
dWx0aXBsaWVyKGVsZW1lbnQpOwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9
IHBhcmVudE1lZGlhRWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgdXNlIG11bHRpcGxlcyBvZiBtZWRpYUNvbnRyb2xz
SGVpZ2h0IHRvIG1ha2UgYWxsIG9iamVjdHMgc2NhbGUgZXZlbmx5Ci0gICAgTGVuZ3RoIHplcm8o
MCwgRml4ZWQpOwotICAgIExlbmd0aCBjb250cm9sc0hlaWdodChtZWRpYUNvbnRyb2xzSGVpZ2h0
ICogZnVsbFNjcmVlbk11bHRpcGxpZXIsIEZpeGVkKTsKLSAgICBMZW5ndGggaGFsZkNvbnRyb2xz
V2lkdGgobWVkaWFDb250cm9sc0hlaWdodCAvIDIgKiBmdWxsU2NyZWVuTXVsdGlwbGllciwgRml4
ZWQpOwotICAgIExlbmd0aCBkaXNwbGF5SGVpZ2h0KG1lZGlhQ29udHJvbHNIZWlnaHQgLyAzICog
ZnVsbFNjcmVlbk11bHRpcGxpZXIsIEZpeGVkKTsKLSAgICBMZW5ndGggdm9sT2Zmc2V0KG1lZGlh
Q29udHJvbHNIZWlnaHQgKiBmdWxsU2NyZWVuTXVsdGlwbGllciArIDUsIEZpeGVkKTsKLSAgICBM
ZW5ndGggcGFkZGluZyhtZWRpYUNvbnRyb2xzSGVpZ2h0IC8gMTAgKiBmdWxsU2NyZWVuTXVsdGlw
bGllciwgRml4ZWQpOwotICAgIGZsb2F0IGZvbnRTaXplID0gbWVkaWFDb250cm9sc0hlaWdodCAv
IDMgKiBmdWxsU2NyZWVuTXVsdGlwbGllcjsKLQotICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSkgewotICAgIGNhc2UgTWVkaWFDb250cm9sc0JhY2tncm91bmRQYXJ0OgotICAgICAgICBp
ZiAoZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSA9PSAiLXdlYmtpdC1tZWRpYS1jb250cm9scy1w
bGFjZWhvbGRlciIpCi0gICAgICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGNvbnRyb2xzSGVpZ2h0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYVBsYXlCdXR0b25QYXJ0OgotICAgICAg
ICBzdHlsZS0+c2V0V2lkdGgoY29udHJvbHNIZWlnaHQpOwotICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KGNvbnRyb2xzSGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYU11dGVC
dXR0b25QYXJ0OgotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoY29udHJvbHNIZWlnaHQpOwotICAg
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KGNvbnRyb2xzSGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBNZWRpYVJld2luZEJ1dHRvblBhcnQ6Ci0gICAgICAgIC8vIFdlIGhpLWphY2sgdGhl
IFJld2luZCBCdXR0b24gSUQgdG8gdXNlIGl0IGZvciB0aGUgZGl2aWRlciBpbWFnZQotICAgICAg
ICBzdHlsZS0+c2V0V2lkdGgoaGFsZkNvbnRyb2xzV2lkdGgpOwotICAgICAgICBzdHlsZS0+c2V0
SGVpZ2h0KGNvbnRyb2xzSGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYUVu
dGVyRnVsbHNjcmVlbkJ1dHRvblBhcnQ6Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChjb250cm9s
c0hlaWdodCk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoY29udHJvbHNIZWlnaHQpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b25QYXJ0OgotICAg
ICAgICBzdHlsZS0+c2V0TGVmdCh6ZXJvKTsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKGNvbnRy
b2xzSGVpZ2h0KTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChjb250cm9sc0hlaWdodCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFDdXJyZW50VGltZVBhcnQ6Ci0gICAgY2FzZSBN
ZWRpYVRpbWVSZW1haW5pbmdQYXJ0OgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGRpc3BsYXlI
ZWlnaHQpOwotICAgICAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KHBhZGRpbmcpOwotICAgICAg
ICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQocGFkZGluZyk7Ci0gICAgICAgIHN0eWxlLT5zZXRQYWRk
aW5nQm90dG9tKHBhZGRpbmcpOwotICAgICAgICBzdHlsZS0+c2V0Rm9udFNpemUoc3RhdGljX2Nh
c3Q8aW50Pihmb250U2l6ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhVm9sdW1l
U2xpZGVyQ29udGFpbmVyUGFydDoKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChjb250cm9sc0hl
aWdodCk7Ci0gICAgICAgIHN0eWxlLT5zZXRCb3R0b20odm9sT2Zmc2V0KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFJlbmRl
clRoZW1lQmxhY2tCZXJyeTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIGZsb2F0
IGZ1bGxTY3JlZW5NdWx0aXBsaWVyID0gZGV0ZXJtaW5lRnVsbFNjcmVlbk11bHRpcGxpZXIoZWxl
bWVudCk7Ci0KLSAgICAvLyBXZSB1c2UgbXVsdGlwbGVzIG9mIG1lZGlhQ29udHJvbHNIZWlnaHQg
dG8gbWFrZSBhbGwgb2JqZWN0cyBzY2FsZSBldmVubHkKLSAgICBMZW5ndGggY29udHJvbHNIZWln
aHQobWVkaWFDb250cm9sc0hlaWdodCAvIDIgKiBmdWxsU2NyZWVuTXVsdGlwbGllciwgRml4ZWQp
OwotICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgTWVkaWFTbGlk
ZXJQYXJ0OgotICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJQYXJ0OgotICAgICAgICBzdHlsZS0+
c2V0SGVpZ2h0KGNvbnRyb2xzSGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBwYWludE1lZGlhQnV0dG9u
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgSW1hZ2UqIGlt
YWdlKQotewotICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJH
QiwgcmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lQmxhY2tC
ZXJyeTo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmIEVOQUJMRShW
SURFTykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVs
ZW1lbnQoKm9iamVjdCk7Ci0KLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgc3RhdGljIEltYWdlKiBtZWRpYVBsYXkgPSBJbWFnZTo6bG9hZFBsYXRm
b3JtUmVzb3VyY2UoInBsYXkiKS5sZWFrUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBtZWRpYVBh
dXNlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJwYXVzZSIpLmxlYWtSZWYoKTsKLSAg
ICBzdGF0aWMgSW1hZ2UqIG1lZGlhU3RvcCA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
c3RvcCIpLmxlYWtSZWYoKTsKLSAgICBJbWFnZSogbm9uUGxheUltYWdlOwotCi0gICAgLy8gVGhl
IEJsYWNrQmVycnkgcG9ydCBzZXRzIHRoZSBtb3ZpZUxvYWRUeXBlIHRvIExpdmVTdHJlYW0gaWYg
YW5kIG9ubHkgaWYKLSAgICAvLyAic3RvcCIgbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgInBhdXNl
Ii4KLSAgICBpZiAobWVkaWFFbGVtZW50LT5tb3ZpZUxvYWRUeXBlKCkgPT0gTWVkaWFQbGF5ZXI6
OkxpdmVTdHJlYW0pCi0gICAgICAgIG5vblBsYXlJbWFnZSA9IG1lZGlhU3RvcDsKLSAgICBlbHNl
Ci0gICAgICAgIG5vblBsYXlJbWFnZSA9IG1lZGlhUGF1c2U7Ci0KLSAgICByZXR1cm4gcGFpbnRN
ZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5jYW5QbGF5
KCkgPyBtZWRpYVBsYXkgOiBub25QbGF5SW1hZ2UpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
b2JqZWN0KTsKLSAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKLSAgICBVTlVTRURfUEFSQU0o
cmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLS8vIFdlIGhpLWphY2sgdGhl
IFJld2luZCBCdXR0b24gY29kZSB0byB1c2UgaXQgZm9yIHRoZSBkaXZpZGVyIGltYWdlCi1ib29s
IFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6cGFpbnRNZWRpYVJld2luZEJ1dHRvbihSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxl
bWVudCA9IHBhcmVudE1lZGlhRWxlbWVudCgqb2JqZWN0KTsKLQotICAgIGlmICghbWVkaWFFbGVt
ZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1lZGlhRWxlbWVudC0+aXNG
dWxsc2NyZWVuKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBJbWFnZSog
ZGl2aWRlciA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgiZGl2aWRlciIpLmxlYWtSZWYo
KTsKLQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0
LCBkaXZpZGVyKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHBhaW50SW5mbyk7Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3QpOwotICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZgotfQotCi1ib29sIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6cGFpbnRNZWRp
YU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmIEVOQUJMRShWSURFTykKLSAgICBIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQoKm9iamVjdCk7
Ci0KLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
c3RhdGljIEltYWdlKiBzcGVha2VyID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzcGVh
a2VyIikubGVha1JlZigpOwotCi0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocGFpbnRJbmZv
LmNvbnRleHQsIHJlY3QsIHNwZWFrZXIpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob2JqZWN0
KTsKLSAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKLSAgICBVTlVTRURfUEFSQU0ocmVjdCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0Jl
cnJ5OjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgRU5B
QkxFKFZJREVPKQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHBhcmVudE1l
ZGlhRWxlbWVudCgqb2JqZWN0KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgc3RhdGljIEltYWdlKiBtZWRpYUVudGVyRnVsbHNjcmVlbiA9IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgiZnVsbHNjcmVlbiIpLmxlYWtSZWYoKTsKLSAgICBz
dGF0aWMgSW1hZ2UqIG1lZGlhRXhpdEZ1bGxzY3JlZW4gPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UoImJhY2siKS5sZWFrUmVmKCk7Ci0KLSAgICBJbWFnZSogYnV0dG9uSW1hZ2UgPSBtZWRp
YUVudGVyRnVsbHNjcmVlbjsKLSAgICBJbnRSZWN0IGN1cnJlbnRSZWN0KHJlY3QpOwotI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAobWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLT53
ZWJraXRJc0Z1bGxTY3JlZW4oKSAmJiBtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1
cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpID09IG1lZGlhRWxlbWVudCkgewotICAgICAgICBidXR0
b25JbWFnZSA9IG1lZGlhRXhpdEZ1bGxzY3JlZW47Ci0gICAgICAgIEludFJlY3QgZnVsbHNjcmVl
blJlY3QocmVjdC54KCkgKyAoMSAtIG1lZGlhRnVsbHNjcmVlbkJ1dHRvbldpZHRoUmF0aW8pICog
cmVjdC53aWR0aCgpIC8gMiwgcmVjdC55KCkgKyAoMSAtIG1lZGlhRnVsbHNjcmVlbkJ1dHRvbkhl
aWdodFJhdGlvKSAqIHJlY3QuaGVpZ2h0KCkgLyAyLAotICAgICAgICAgICAgcmVjdC53aWR0aCgp
ICogbWVkaWFGdWxsc2NyZWVuQnV0dG9uV2lkdGhSYXRpbywgcmVjdC5oZWlnaHQoKSAqIG1lZGlh
RnVsbHNjcmVlbkJ1dHRvbkhlaWdodFJhdGlvKTsKLSAgICAgICAgY3VycmVudFJlY3QgPSBmdWxs
c2NyZWVuUmVjdDsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihw
YWludEluZm8uY29udGV4dCwgY3VycmVudFJlY3QsIGJ1dHRvbkltYWdlKTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7Ci0gICAg
VU5VU0VEX1BBUkFNKHJlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1ib29s
IFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KCpvYmplY3QpOwotICAgIGlmICghbWVkaWFFbGVtZW50
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCBmdWxsU2NyZWVuTXVsdGlwbGll
ciA9IGRldGVybWluZUZ1bGxTY3JlZW5NdWx0aXBsaWVyKG1lZGlhRWxlbWVudCk7Ci0gICAgZmxv
YXQgbG9hZGVkID0gbWVkaWFFbGVtZW50LT5wZXJjZW50TG9hZGVkKCk7Ci0gICAgZmxvYXQgcG9z
aXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkgPiAwID8gKG1lZGlhRWxlbWVudC0+Y3Vy
cmVudFRpbWUoKSAvIG1lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSkgOiAwOwotCi0gICAgaW50IGlu
dHJpbnNpY0hlaWdodCA9IGNlaWwobWVkaWFTbGlkZXJUaHVtYkhlaWdodCAvIDQpOwotICAgIGlu
dCB4ID0gY2VpbChyZWN0LngoKSArIG1lZGlhU2xpZGVyRW5kQWRqdXN0ICogZnVsbFNjcmVlbk11
bHRpcGxpZXIpOwotICAgIGludCB5ID0gY2VpbChyZWN0LnkoKSArIChtZWRpYUNvbnRyb2xzSGVp
Z2h0IC8gMiAtIGludHJpbnNpY0hlaWdodCkgLyAyICogZnVsbFNjcmVlbk11bHRpcGxpZXIgKyBm
dWxsU2NyZWVuTXVsdGlwbGllciAvIDIpOwotICAgIGludCB3ID0gY2VpbChyZWN0LndpZHRoKCkg
LSBtZWRpYVNsaWRlckVuZEFkanVzdCAqIDIgKiBmdWxsU2NyZWVuTXVsdGlwbGllcik7Ci0gICAg
aW50IGggPSBjZWlsKGludHJpbnNpY0hlaWdodCAqIGZ1bGxTY3JlZW5NdWx0aXBsaWVyKTsKLSAg
ICBJbnRSZWN0IHJlY3QyKHgsIHksIHcsIGgpOwotCi0gICAgLy8gV2Ugc3VidHJhY3QgYSBzbWFs
bCBhbW91bnQgZnJvbSB0aGUgd2lkdGggaW4gdGhlIGNhbGN1bGF0aW9uIGJlbG93IHRvCi0gICAg
Ly8gcHJldmVudCB0aGUgcGxheWVkIGJhciBmcm9tIHBva2luZyBvdXQgcGFzdCB0aGUgdGh1bWIg
YWNjaWRlbnRhbGx5LgotICAgIGludCB3UGxheWVkID0gY2VpbCgodyAtIG1lZGlhU2xpZGVyRW5k
QWRqdXN0KSAqIHBvc2l0aW9uKTsKLSAgICAvLyBXZSBhZGp1c3QgdGhlIGJ1ZmZlcmVkIGJhciB0
byBtYWtlIGl0IHZpc2libGUgdG8gdGhlIHJpZ2h0IG9mIHRoZSB0aHVtYi4KLSAgICAvLyBBIHNt
YWxsIGFtb3VudCBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIG1lZGlhU2xpZGVyVGh1bWJXaWR0aCBp
biB0aGUgZmlyc3QKLSAgICAvLyBwYXJ0IG9mIHRoZSBleHByZXNzaW9uIHRvIGFjY291bnQgZm9y
IHRoZSBmYWN0IHRoYXQgdGhlIHNsaWRlciB0cmFjaydzCi0gICAgLy8gd2lkdGggd2FzIHNob3J0
ZW5lZCBhbmQgeCBwb3NpdGlvbiB3YXMgaW5jcmVtZW50ZWQgYWJvdmUgKHRvIG1ha2Ugc3VyZQot
ICAgIC8vIGl0cyByb3VuZGVkIGVuZHMgZ2V0IGNvdmVyZWQgYnkgdGhlIHRodW1iKS4KLSAgICBp
bnQgd0xvYWRlZCA9IGNlaWwoKHcgLSAobWVkaWFTbGlkZXJUaHVtYldpZHRoIC0gbWVkaWFTbGlk
ZXJFbmRBZGp1c3QpICogZnVsbFNjcmVlbk11bHRpcGxpZXIpICogbG9hZGVkICsgbWVkaWFTbGlk
ZXJUaHVtYldpZHRoICogZnVsbFNjcmVlbk11bHRpcGxpZXIpOwotCi0gICAgSW50UmVjdCBwbGF5
ZWQoeCwgeSwgd1BsYXllZCwgaCk7Ci0gICAgSW50UmVjdCBidWZmZXJlZCh4LCB5LCB3TG9hZGVk
ID4gdyA/IHcgOiB3TG9hZGVkLCBoKTsKLQotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFCYWNrZ3Jv
dW5kID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJjb3JlX3NsaWRlcl92aWRlb19iZyIp
LmxlYWtSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheWVyID0gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJjb3JlX3NsaWRlcl9wbGF5ZWRfYmciKS5sZWFrUmVmKCk7Ci0gICAg
c3RhdGljIEltYWdlKiBtZWRpYUNhY2hlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJj
b3JlX3NsaWRlcl9jYWNoZSIpLmxlYWtSZWYoKTsKLQotICAgIGJvb2wgcmVzdWx0ID0gcGFpbnRT
bGlkZXJUcmFja1JlY3Qob2JqZWN0LCBwYWludEluZm8sIHJlY3QyLCBtZWRpYUJhY2tncm91bmQp
OwotCi0gICAgaWYgKGxvYWRlZCA+IDAgfHwgcG9zaXRpb24gPiAwKSB7Ci0gICAgICAgIC8vIFRo
aXMgaXMgdG8gcGFpbnQgYnVmZmVyZWQgYmFyLgotICAgICAgICBwYWludFNsaWRlclRyYWNrUmVj
dChvYmplY3QsIHBhaW50SW5mbywgYnVmZmVyZWQsIG1lZGlhQ2FjaGUpOwotCi0gICAgICAgIC8v
IFRoaXMgaXMgdG8gcGFpbnQgcGxheWVkIHBhcnQgb2YgYmFyIChsZWZ0IG9mIHNsaWRlciB0aHVt
YikgdXNpbmcgc2VsZWN0aW9uIGNvbG9yLgotICAgICAgICBwYWludFNsaWRlclRyYWNrUmVjdChv
YmplY3QsIHBhaW50SW5mbywgcGxheWVkLCBtZWRpYVBsYXllcik7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHBhaW50SW5mbyk7Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3QpOwotICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZgotfQotCi1ib29sIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6cGFpbnRNZWRp
YVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgc3Rh
dGljIEltYWdlKiBkaXNhYmxlZE1lZGlhU2xpZGVyVGh1bWIgPSBJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoImNvcmVfc2xpZGVyX2hhbmRsZV9kaXNhYmxlZCIpLmxlYWtSZWYoKTsKLSAgICBz
dGF0aWMgSW1hZ2UqIHByZXNzZWRNZWRpYVNsaWRlclRodW1iID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJjb3JlX3NsaWRlcl9oYW5kbGVfcHJlc3NlZCIpLmxlYWtSZWYoKTsKLSAgICBz
dGF0aWMgSW1hZ2UqIG1lZGlhU2xpZGVyVGh1bWIgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoImNvcmVfbWVkaWFfaGFuZGxlIikubGVha1JlZigpOwotCi0gICAgaWYgKCFpc0VuYWJsZWQo
b2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocGFpbnRJbmZvLmNvbnRl
eHQsIHJlY3QsIGRpc2FibGVkTWVkaWFTbGlkZXJUaHVtYik7Ci0gICAgaWYgKGlzUHJlc3NlZChv
YmplY3QpIHx8IGlzSG92ZXJlZChvYmplY3QpIHx8IGlzRm9jdXNlZChvYmplY3QpKQotICAgICAg
ICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgcmVjdCwgcHJlc3Nl
ZE1lZGlhU2xpZGVyVGh1bWIpOwotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5m
by5jb250ZXh0LCByZWN0LCBtZWRpYVNsaWRlclRodW1iKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKG9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7Ci0gICAgVU5VU0VEX1BB
UkFNKHJlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1ib29sIFJlbmRlclRo
ZW1lQmxhY2tCZXJyeTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
ID0gcGFyZW50TWVkaWFFbGVtZW50KCpvYmplY3QpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCBmdWxsU2NyZWVuTXVsdGlwbGllciA9
IGRldGVybWluZUZ1bGxTY3JlZW5NdWx0aXBsaWVyKG1lZGlhRWxlbWVudCk7Ci0gICAgZmxvYXQg
dm9sdW1lID0gbWVkaWFFbGVtZW50LT52b2x1bWUoKSA+IDAgPyBtZWRpYUVsZW1lbnQtPnZvbHVt
ZSgpIDogMDsKLQotICAgIGludCBpbnRyaW5zaWNIZWlnaHQgPSBjZWlsKG1lZGlhU2xpZGVyVGh1
bWJIZWlnaHQgLyA0KTsKLSAgICBpbnQgeCA9IGNlaWwocmVjdC54KCkgKyAobWVkaWFDb250cm9s
c0hlaWdodCAtIGludHJpbnNpY0hlaWdodCkgLyAyICogZnVsbFNjcmVlbk11bHRpcGxpZXIgLSBm
dWxsU2NyZWVuTXVsdGlwbGllciAvIDIpOwotICAgIGludCB5ID0gY2VpbChyZWN0LnkoKSArICht
ZWRpYUNvbnRyb2xzSGVpZ2h0IC0gaW50cmluc2ljSGVpZ2h0KSAvIDIgKiBmdWxsU2NyZWVuTXVs
dGlwbGllciArIGZ1bGxTY3JlZW5NdWx0aXBsaWVyIC8gMik7Ci0gICAgaW50IHcgPSBjZWlsKHJl
Y3Qud2lkdGgoKSAtIChtZWRpYUNvbnRyb2xzSGVpZ2h0IC0gaW50cmluc2ljSGVpZ2h0KSAqIGZ1
bGxTY3JlZW5NdWx0aXBsaWVyICsgZnVsbFNjcmVlbk11bHRpcGxpZXIgLyAyKTsKLSAgICBpbnQg
aCA9IGNlaWwoaW50cmluc2ljSGVpZ2h0ICogZnVsbFNjcmVlbk11bHRpcGxpZXIpOwotICAgIElu
dFJlY3QgcmVjdDIoeCwgeSwgdywgaCk7Ci0gICAgSW50UmVjdCB2b2x1bWVSZWN0KHgsIHksIGNl
aWwodyAqIHZvbHVtZSksIGgpOwotCi0gICAgc3RhdGljIEltYWdlKiB2b2x1bWVCYWNrZ3JvdW5k
ID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJjb3JlX3NsaWRlcl92aWRlb19iZyIpLmxl
YWtSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIHZvbHVtZUJhciA9IEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZSgiY29yZV9zbGlkZXJfcGxheWVkX2JnIikubGVha1JlZigpOwotCi0gICAgLy8g
VGhpcyBpcyB0byBwYWludCBtYWluIHZvbHVtZSBzbGlkZXIgYmFyLgotICAgIGJvb2wgcmVzdWx0
ID0gcGFpbnRTbGlkZXJUcmFja1JlY3Qob2JqZWN0LCBwYWludEluZm8sIHJlY3QyLCB2b2x1bWVC
YWNrZ3JvdW5kKTsKLQotICAgIGlmICh2b2x1bWUgPiAwKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
dG8gcGFpbnQgdm9sdW1lIGJhciAobGVmdCBvZiB2b2x1bWUgc2xpZGVyIHRodW1iKSB1c2luZyBz
ZWxlY3Rpb24gY29sb3IuCi0gICAgICAgIHJlc3VsdCB8PSBwYWludFNsaWRlclRyYWNrUmVjdChv
YmplY3QsIHBhaW50SW5mbywgdm9sdW1lUmVjdCwgdm9sdW1lQmFyKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLSAgICBVTlVT
RURfUEFSQU0ocGFpbnRJbmZvKTsKLSAgICBVTlVTRURfUEFSQU0ocmVjdCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludE1l
ZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmIEVOQUJMRShWSURFTykK
LSAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IGRldGVybWluZVJlbmRlclNsaWRlcihvYmplY3Qp
OwotICAgIGZsb2F0IGZ1bGxTY3JlZW5NdWx0aXBsaWVyID0gc2xpZGVyID8gZGV0ZXJtaW5lRnVs
bFNjcmVlbk11bHRpcGxpZXIodG9FbGVtZW50KHNsaWRlci0+bm9kZSgpKSkgOiAxOwotCi0gICAg
aW50IGludHJpbnNpY0hlaWdodCA9IGNlaWwobWVkaWFTbGlkZXJUaHVtYkhlaWdodCAvIDQpOwot
ICAgIGludCB5ID0gY2VpbChyZWN0LnkoKSArIChtZWRpYUNvbnRyb2xzSGVpZ2h0IC8gMiAtIGlu
dHJpbnNpY0hlaWdodCAvIDIpIC8gMiAqIGZ1bGxTY3JlZW5NdWx0aXBsaWVyKTsKLSAgICBJbnRS
ZWN0IGFkanVzdGVkUmVjdChyZWN0LngoKSwgeSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKLQotICAgIHJldHVybiBwYWludE1lZGlhU2xpZGVyVGh1bWIob2JqZWN0LCBwYWludEluZm8s
IGFkanVzdGVkUmVjdCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwotICAgIFVO
VVNFRF9QQVJBTShwYWludEluZm8pOwotICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwbGF0
Zm9ybUZvY3VzUmluZ0NvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZm9jdXNSaW5nUGVuOwot
fQotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLUNvbG9yIFJlbmRlclRoZW1lQmxhY2tCZXJy
eTo6cGxhdGZvcm1UYXBIaWdobGlnaHRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvbG9y
KDAsIDE2OCwgMjIzLCA1MCk7Ci19Ci0jZW5kaWYKLQotQ29sb3IgUmVuZGVyVGhlbWVCbGFja0Jl
cnJ5OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIENvbG9yKDAsIDE2OCwgMjIzLCA1MCk7Ci19Ci0KLWRvdWJsZSBSZW5kZXJUaGVt
ZUJsYWNrQmVycnk6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVy
UHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJQcm9n
cmVzcy0+aXNEZXRlcm1pbmF0ZSgpID8gMC4wIDogMC4xOwotfQotCi1kb3VibGUgUmVuZGVyVGhl
bWVCbGFja0JlcnJ5OjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyUHJvZ3Jlc3Mt
PmlzRGV0ZXJtaW5hdGUoKSA/IDAuMCA6IDIuMDsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUJsYWNr
QmVycnk6OnBhaW50UHJvZ3Jlc3NUcmFja1JlY3QoY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBJbWFnZSogaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGluZm8uY29udGV4
dCk7Ci0gICAgaW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0ID0gaW5mby5jb250ZXh0OwotICAgIGRyYXdUaHJlZVNsaWNlSG9yaXpvbnRhbChjb250ZXh0
LCByZWN0LCBpbWFnZSwgbWVkaXVtU2xpY2UpOwotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdQcm9ncmVzc1RleHR1cmUoR3Jh
cGhpY3NDb250ZXh0KiBnYywgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBpbnQgbiwgSW1hZ2UqIGlt
YWdlKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBmbG9hdCBmaW5h
bFRleHR1cmVQZXJjZW50YWdlID0gKGludChyZWN0LndpZHRoKCkpICUgaW50KHByb2dyZXNzVGV4
dHVyZVVuaXRXaWR0aCkpIC8gcHJvZ3Jlc3NUZXh0dXJlVW5pdFdpZHRoOwotICAgIEZsb2F0U2l6
ZSBkc3RTbGljZShwcm9ncmVzc1RleHR1cmVVbml0V2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSAyKTsK
LSAgICBGbG9hdFJlY3Qgc3JjUmVjdCgxLCAyLCBpbWFnZS0+d2lkdGgoKSAtIDIsIGltYWdlLT5o
ZWlnaHQoKSAtIDQpOwotICAgIEZsb2F0UmVjdCBkc3RSZWN0KEZsb2F0UG9pbnQocmVjdC5sb2Nh
dGlvbigpLngoKSArIDEsIHJlY3QubG9jYXRpb24oKS55KCkgKyAxKSwgZHN0U2xpY2UpOwotCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgZ2MtPmRyYXdJbWFnZShp
bWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgICAgIGRz
dFJlY3QubW92ZShkc3RTbGljZS53aWR0aCgpLCAwKTsKLSAgICB9Ci0gICAgaWYgKGZpbmFsVGV4
dHVyZVBlcmNlbnRhZ2UpIHsKLSAgICAgICAgc3JjUmVjdC5zZXRXaWR0aChzcmNSZWN0LndpZHRo
KCkgKiBmaW5hbFRleHR1cmVQZXJjZW50YWdlICogZmluYWxUZXh0dXJlUGVyY2VudGFnZSk7Ci0g
ICAgICAgIGRzdFJlY3Quc2V0V2lkdGgoZHN0UmVjdC53aWR0aCgpICogZmluYWxUZXh0dXJlUGVy
Y2VudGFnZSAqIGZpbmFsVGV4dHVyZVBlcmNlbnRhZ2UpOwotICAgICAgICBnYy0+ZHJhd0ltYWdl
KGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkc3RSZWN0LCBzcmNSZWN0KTsKLSAgICB9Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgaWYgKCFvYmplY3QtPmlzUHJvZ3Jlc3MoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNz
KG9iamVjdCk7Ci0KLSAgICBzdGF0aWMgSW1hZ2UqIHByb2dyZXNzVHJhY2sgPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoImNvcmVfcHJvZ3Jlc3NpbmRpY2F0b3JfYmciKS5sZWFrUmVmKCk7
Ci0gICAgc3RhdGljIEltYWdlKiBwcm9ncmVzc0JhciA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNv
dXJjZSgiY29yZV9wcm9ncmVzc2luZGljYXRvcl9wcm9ncmVzcyIpLmxlYWtSZWYoKTsKLSAgICBz
dGF0aWMgSW1hZ2UqIHByb2dyZXNzUGF0dGVybiA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgiY29yZV9wcm9ncmVzc2luZGljYXRvcl9wYXR0ZXJuIikubGVha1JlZigpOwotICAgIHN0YXRp
YyBJbWFnZSogcHJvZ3Jlc3NDb21wbGV0ZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
Y29yZV9wcm9ncmVzc2luZGljYXRvcl9jb21wbGV0ZSIpLmxlYWtSZWYoKTsKLQotICAgIHBhaW50
UHJvZ3Jlc3NUcmFja1JlY3QoaW5mbywgcmVjdCwgcHJvZ3Jlc3NUcmFjayk7Ci0KLSAgICBJbnRS
ZWN0IHByb2dyZXNzUmVjdCA9IHJlY3Q7Ci0gICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJvZ3Jlc3NS
ZWN0LngoKSArIDEpOwotICAgIHByb2dyZXNzUmVjdC5zZXRIZWlnaHQocHJvZ3Jlc3NSZWN0Lmhl
aWdodCgpIC0gMik7Ci0gICAgcHJvZ3Jlc3NSZWN0LnNldFkocHJvZ3Jlc3NSZWN0LnkoKSArIDEp
OwotCi0gICAgaWYgKHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpCi0gICAgICAgIHBy
b2dyZXNzUmVjdC5zZXRXaWR0aCgocHJvZ3Jlc3NSZWN0LndpZHRoKCkgLSBwcm9ncmVzc01pbldp
ZHRoKSAqIHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpICsgcHJvZ3Jlc3NNaW5XaWR0aCAtIDIp
OwotICAgIGVsc2UgewotICAgICAgICAvLyBBbmltYXRpbmcKLSAgICAgICAgcHJvZ3Jlc3NSZWN0
LnNldFdpZHRoKHByb2dyZXNzUmVjdC53aWR0aCgpIC0gMik7Ci0gICAgfQotCi0gICAgaWYgKHJl
bmRlclByb2dyZXNzLT5wb3NpdGlvbigpIDwgMSkgewotICAgICAgICBwYWludFByb2dyZXNzVHJh
Y2tSZWN0KGluZm8sIHByb2dyZXNzUmVjdCwgcHJvZ3Jlc3NCYXIpOwotICAgICAgICBpbnQgbG9v
cCA9IGZsb29yKChwcm9ncmVzc1JlY3Qud2lkdGgoKSAtIDIpIC8gcHJvZ3Jlc3NUZXh0dXJlVW5p
dFdpZHRoKTsKLSAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRoKHByb2dyZXNzUmVjdC53aWR0
aCgpIC0gMik7Ci0gICAgICAgIGRyYXdQcm9ncmVzc1RleHR1cmUoaW5mby5jb250ZXh0LCBwcm9n
cmVzc1JlY3QsIGxvb3AsIHByb2dyZXNzUGF0dGVybik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBh
aW50UHJvZ3Jlc3NUcmFja1JlY3QoaW5mbywgcHJvZ3Jlc3NSZWN0LCBwcm9ncmVzc0NvbXBsZXRl
KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVCbGFja0JlcnJ5
OjpwbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIENvbG9yKDI1NSwgMTUwLCA1MCk7IC8vIE9yYW5nZS4KLX0KLQotQ29sb3IgUmVuZGVy
VGhlbWVCbGFja0JlcnJ5OjpwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1LCAyNTUsIDApOyAvLyBZZWxsb3cuCi19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpzdXBwb3J0c0RhdGFMaXN0VUkoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlKSBjb25zdAotewotI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5U
KQotICAgIC8vIFdlIHN1cHBvcnQgYWxsIG5vbi1wb3B1cCBkcml2ZW4gdHlwZXMuCi0gICAgcmV0
dXJuIHR5cGUgPT0gSW5wdXRUeXBlTmFtZXM6OnRleHQoKSB8fCB0eXBlID09IElucHV0VHlwZU5h
bWVzOjpzZWFyY2goKSB8fCB0eXBlID09IElucHV0VHlwZU5hbWVzOjp1cmwoKQotICAgICAgICB8
fCB0eXBlID09IElucHV0VHlwZU5hbWVzOjp0ZWxlcGhvbmUoKSB8fCB0eXBlID09IElucHV0VHlw
ZU5hbWVzOjplbWFpbCgpIHx8IHR5cGUgPT0gSW5wdXRUeXBlTmFtZXM6Om51bWJlcigpCi0gICAg
ICAgIHx8IHR5cGUgPT0gSW5wdXRUeXBlTmFtZXM6OnJhbmdlKCk7Ci0jZWxzZQotICAgIHJldHVy
biBmYWxzZTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi1JbnRT
aXplIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6c2xpZGVyVGlja1NpemUoKSBjb25zdAotewotICAg
IHJldHVybiBJbnRTaXplKDEsIDMpOwotfQotCi1pbnQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5Ojpz
bGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gLTk7
Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9SZW5kZXJUaGVtZUJsYWNrQmVycnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1JlbmRlclRoZW1lQmxhY2tC
ZXJyeS5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L1JlbmRlclRoZW1lQmxhY2tCZXJyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyOSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpZm5kZWYgUmVuZGVyVGhlbWVCbGFja0JlcnJ5X2gKLSNkZWZpbmUgUmVuZGVy
VGhlbWVCbGFja0JlcnJ5X2gKLQotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyVGhlbWVCbGFja0JlcnJ5IDogcHVibGljIFJlbmRl
clRoZW1lIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3Jl
YXRlKCk7Ci0gICAgdmlydHVhbCB+UmVuZGVyVGhlbWVCbGFja0JlcnJ5KCk7Ci0KLSAgICB2aXJ0
dWFsIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7Ci0KLSNpZiBFTkFCTEUoVklERU8p
Ci0gICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOwotICAg
IHZpcnR1YWwgYm9vbCB1c2VzVmVydGljYWxWb2x1bWVTbGlkZXIoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotI2VuZGlmCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHZpcnR1YWwg
U3RyaW5nIGV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKTsKLSNlbmRpZgotICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotCi0gICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24m
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldENo
ZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFJh
ZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNhbGN1bGF0ZUJ1dHRvblNpemUoUmVuZGVyU3R5bGUq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBh
aW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1i
U2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0jaWYgRU5BQkxFKERBVEFMSVNU
X0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIHNsaWRlclRpY2tTaXplKCkgY29uc3QgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCBpbnQgc2xpZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigp
IGNvbnN0IE9WRVJSSURFOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1UYXBIaWdobGlnaHRDb2xvcigpIGNvbnN0OwotI2VuZGlm
Ci0KLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdCB7IHJldHVybiBzdHlsZS0+aGFzQXBwZWFyYW5jZSgpOyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVt
ZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1
YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRl
cnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0gICAgdmlydHVhbCBk
b3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNv
bnN0OwotCi0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0OwotCi0gICAgLy8gSGlnaGxpZ2h0aW5nIGNvbG9ycyBmb3IgVGV4dE1h
dGNoZXMuCi0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGln
aHRDb2xvcigpIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVRleHRT
ZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRz
RGF0YUxpc3RVSShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBz
dGF0aWMgY29uc3QgU3RyaW5nJiBkZWZhdWx0R1VJRm9udCgpOwotCi0gICAgLy8gVGhlIGRlZmF1
bHQgdmFyaWFibGUtd2lkdGggZm9udCBzaXplLiBXZSB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBm
b250Ci0gICAgLy8gc2l6ZSBmb3IgdGhlICJzeXN0ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ugc2l6
ZSAod2hpY2ggd2UgdGhlbiBzaHJpbmspIGZvcgotICAgIC8vIGZvcm0gY29udHJvbCBmb250cy4K
LSAgICBzdGF0aWMgZmxvYXQgZGVmYXVsdEZvbnRTaXplOwotCi0gICAgUmVuZGVyVGhlbWVCbGFj
a0JlcnJ5KCk7Ci0gICAgdm9pZCBzZXRCdXR0b25TdHlsZShSZW5kZXJTdHlsZSopIGNvbnN0Owot
Ci0gICAgYm9vbCBwYWludFRleHRGaWVsZE9yVGV4dEFyZWFPclNlYXJjaEZpZWxkKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIGJvb2wgcGFp
bnRTbGlkZXJUcmFja1JlY3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYsIEltYWdlKik7Ci0KLSAgICBib29sIHBhaW50UHJvZ3Jlc3NUcmFja1JlY3QoY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIEltYWdlKik7Ci0KLSAgICBJbnRSZWN0IGNv
bnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJl
bmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBMYXlvdXRSZWN0IHBhcnRSZWN0LCBjb25zdCBJbnRS
ZWN0JiBsb2NhbE9mZnNldCkgY29uc3Q7Ci0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFJlbmRlclRoZW1lQmxhY2tCZXJyeV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1NTTEtleUdlbmVyYXRvckJsYWNrQmVycnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU1NMS2V5R2VuZXJh
dG9yQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2JsYWNrYmVycnkvU1NMS2V5R2VuZXJhdG9yQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1NMS2V5R2VuZXJhdG9yLmgi
Ci0KLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIGdldFN1cHBvcnRlZEtleVNpemVzKFZlY3RvcjxTdHJp
bmc+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1TdHJpbmcgc2lnbmVkUHVibGlj
S2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkLCBTdHJpbmcgY29uc3QmLCBVUkwgY29uc3Qm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L1Njcm9sbEFuaW1hdG9yQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9TY3JvbGxBbmltYXRvckJsYWNrQmVycnkuY3Bw
CShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5
L1Njcm9sbEFuaW1hdG9yQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAgKzAs
MCBAQAotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElO
RykKLQotI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yQmxhY2tCZXJyeS5oIgotCi0jaW5jbHVkZSAi
U2Nyb2xsYWJsZUFyZWEuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9y
OjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQotewotICAgIGlmIChzY3Jv
bGxhYmxlQXJlYSAmJiBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JCbGFja0JlcnJ5KHNjcm9s
bGFibGVBcmVhKSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvcihzY3Jv
bGxhYmxlQXJlYSkpOwotfQotCi1TY3JvbGxBbmltYXRvckJsYWNrQmVycnk6OlNjcm9sbEFuaW1h
dG9yQmxhY2tCZXJyeShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCi0gICAgOiBTY3Jv
bGxBbmltYXRvck5vbmUoc2Nyb2xsYWJsZUFyZWEpCi0gICAgLCBtX2Rpc2FibGVDb25zdHJhaW5z
U2Nyb2xsaW5nVG9Db250ZW50RWRnZVdoaWxlQW5pbWF0aW5nKGZhbHNlKQotICAgICwgbV9vcmln
aW5hbENvbnN0cmFuc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSkKLXsKLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvckJsYWNrQmVycnk6OmFuaW1hdGlvbldpbGxTdGFydCgpCi17Ci0gICAgaWYg
KG1fZGlzYWJsZUNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlV2hpbGVBbmltYXRpbmcp
IHsKLSAgICAgICAgbV9vcmlnaW5hbENvbnN0cmFuc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UgPSBz
Y3JvbGxhYmxlQXJlYSgpLT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpOwotICAg
ICAgICBzY3JvbGxhYmxlQXJlYSgpLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRn
ZShmYWxzZSk7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQmxhY2tCZXJyeTo6YW5p
bWF0aW9uRGlkRmluaXNoKCkKLXsKLSAgICBpZiAobV9kaXNhYmxlQ29uc3RyYWluc1Njcm9sbGlu
Z1RvQ29udGVudEVkZ2VXaGlsZUFuaW1hdGluZykgewotICAgICAgICBzY3JvbGxhYmxlQXJlYSgp
LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShtX29yaWdpbmFsQ29uc3RyYW5z
U2Nyb2xsaW5nVG9Db250ZW50RWRnZSk7Ci0gICAgICAgIG1fZGlzYWJsZUNvbnN0cmFpbnNTY3Jv
bGxpbmdUb0NvbnRlbnRFZGdlV2hpbGVBbmltYXRpbmcgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLXZv
aWQgU2Nyb2xsQW5pbWF0b3JCbGFja0JlcnJ5OjpzZXREaXNhYmxlQ29uc3RyYWluc1Njcm9sbGlu
Z1RvQ29udGVudEVkZ2VXaGlsZUFuaW1hdGluZyhib29sIHZhbHVlKQotewotICAgIG1fZGlzYWJs
ZUNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlV2hpbGVBbmltYXRpbmcgPSB2YWx1ZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNNT09USF9T
Q1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1Njcm9s
bEFuaW1hdG9yQmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2JsYWNrYmVycnkvU2Nyb2xsQW5pbWF0b3JCbGFja0JlcnJ5LmgJKHJldmlzaW9uIDE2MTU5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU2Nyb2xsQW5pbWF0b3JC
bGFja0JlcnJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIFNjcm9sbEFuaW1hdG9yQmxhY2tC
ZXJyeV9oCi0jZGVmaW5lIFNjcm9sbEFuaW1hdG9yQmxhY2tCZXJyeV9oCi0KLSNpZiBFTkFCTEUo
U01PT1RIX1NDUk9MTElORykKLQotI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVk
ZSAiU2Nyb2xsQW5pbWF0b3JOb25lLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
U2Nyb2xsYWJsZUFyZWE7Ci0KLWNsYXNzIFNjcm9sbEFuaW1hdG9yQmxhY2tCZXJyeSA6IHB1Ymxp
YyBTY3JvbGxBbmltYXRvck5vbmUgewotcHVibGljOgotICAgIFNjcm9sbEFuaW1hdG9yQmxhY2tC
ZXJyeShTY3JvbGxhYmxlQXJlYSopOwotCi0gICAgdm9pZCBzZXREaXNhYmxlQ29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2VXaGlsZUFuaW1hdGluZyhib29sKTsKLQotcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25XaWxsU3RhcnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YW5pbWF0aW9uRGlkRmluaXNoKCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX2Rpc2FibGVDb25z
dHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZVdoaWxlQW5pbWF0aW5nOwotICAgIGJvb2wgbV9v
cmlnaW5hbENvbnN0cmFuc1Njcm9sbGluZ1RvQ29udGVudEVkZ2U7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKLQotI2Vu
ZGlmIC8vIFNjcm9sbEFuaW1hdG9yQmxhY2tCZXJyeV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ibGFja2JlcnJ5L1Njcm9sbGJhclRoZW1lQmxhY2tCZXJyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9TY3JvbGxiYXJUaGVtZUJs
YWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ibGFja2JlcnJ5L1Njcm9sbGJhclRoZW1lQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKLQotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU2Nyb2xs
YmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNjcm9sbGJhclRoZW1lLCB0aGVtZSwg
KCkpOwotICAgIHJldHVybiAmdGhlbWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU2VhcmNoUG9wdXBNZW51Qmxh
Y2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9TZWFyY2hQb3B1cE1lbnVCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9TZWFyY2hQb3B1cE1lbnVCbGFja0Jl
cnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTZWFyY2hQb3B1cE1lbnVCbGFja0JlcnJ5LmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotU2VhcmNoUG9wdXBNZW51QmxhY2tCZXJyeTo6U2VhcmNoUG9wdXBNZW51
QmxhY2tCZXJyeShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkKLSAgICA6IG1fcG9wdXAoYWRvcHRS
ZWYobmV3IFBvcHVwTWVudUJsYWNrQmVycnkoY2xpZW50KSkpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotUG9wdXBNZW51KiBTZWFyY2hQb3B1cE1lbnVCbGFja0JlcnJ5Ojpwb3B1cE1l
bnUoKQotewotICAgIHJldHVybiBtX3BvcHVwLmdldCgpOwotfQotCi1ib29sIFNlYXJjaFBvcHVw
TWVudUJsYWNrQmVycnk6OmVuYWJsZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFNlYXJjaFBvcHVwTWVudUJsYWNrQmVycnk6OnNhdmVS
ZWNlbnRTZWFyY2hlcyhBdG9taWNTdHJpbmcgY29uc3QmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBTZWFyY2hQb3B1cE1lbnVCbGFj
a0JlcnJ5Ojpsb2FkUmVjZW50U2VhcmNoZXMoQXRvbWljU3RyaW5nIGNvbnN0JiwgVmVjdG9yPFN0
cmluZz4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU2VhcmNoUG9w
dXBNZW51QmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2JsYWNrYmVycnkvU2VhcmNoUG9wdXBNZW51QmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNjE1OTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1NlYXJjaFBvcHVwTWVudUJs
YWNrQmVycnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgU2VhcmNoUG9wdXBNZW51
QmxhY2tCZXJyeV9oCi0jZGVmaW5lIFNlYXJjaFBvcHVwTWVudUJsYWNrQmVycnlfaAotCi0jaW5j
bHVkZSAiUG9wdXBNZW51QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNlYXJjaFBvcHVwTWVudUJsYWNrQmVy
cnkgOiBwdWJsaWMgU2VhcmNoUG9wdXBNZW51IHsKLXB1YmxpYzoKLSAgICBTZWFyY2hQb3B1cE1l
bnVCbGFja0JlcnJ5KFBvcHVwTWVudUNsaWVudCopOwotCi0gICAgdmlydHVhbCBQb3B1cE1lbnUq
IHBvcHVwTWVudSgpOwotICAgIHZpcnR1YWwgdm9pZCBzYXZlUmVjZW50U2VhcmNoZXMoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpOwot
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpOwotICAgIHZpcnR1YWwgYm9vbCBlbmFi
bGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFBvcHVwTWVudUJsYWNrQmVycnk+IG1fcG9w
dXA7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBTZWFyY2hQb3B1cE1lbnVCbGFja0JlcnJ5X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU2hhcmVkVGltZXJCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5
L1NoYXJlZFRpbWVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU2hhcmVkVGltZXJCbGFja0JlcnJ5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
aGFyZWRUaW1lci5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2luZ2xldG9uLmg+
Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTaGFyZWRUaW1lckJs
YWNrQmVycnkgOiBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRocmVhZFVuc2FmZVNpbmds
ZXRvbjxTaGFyZWRUaW1lckJsYWNrQmVycnk+IHsKLSAgICBmcmllbmQgdm9pZCBzZXRTaGFyZWRU
aW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYpKCkpOwotICAgIFNJTkdMRVRPTl9ERUZJTklUSU9O
X1RIUkVBRFVOU0FGRShTaGFyZWRUaW1lckJsYWNrQmVycnkpCi0KLXB1YmxpYzoKLSAgICB2b2lk
IHN0YXJ0KGRvdWJsZSk7Ci0gICAgdm9pZCBzdG9wKCk7Ci0KLXByaXZhdGU6Ci0gICAgU2hhcmVk
VGltZXJCbGFja0JlcnJ5KCk7Ci0gICAgflNoYXJlZFRpbWVyQmxhY2tCZXJyeSgpOwotCi0gICAg
Ym9vbCBtX3N0YXJ0ZWQ7Ci0gICAgdm9pZCAoKm1fdGltZXJGdW5jdGlvbikoKTsKLX07Ci0KLVNJ
TkdMRVRPTl9JTklUSUFMSVpFUl9USFJFQURVTlNBRkUoU2hhcmVkVGltZXJCbGFja0JlcnJ5KQot
Ci1TaGFyZWRUaW1lckJsYWNrQmVycnk6OlNoYXJlZFRpbWVyQmxhY2tCZXJyeSgpCi0gICAgOiBt
X3N0YXJ0ZWQoZmFsc2UpCi0gICAgLCBtX3RpbWVyRnVuY3Rpb24oMCkKLXsKLX0KLQotU2hhcmVk
VGltZXJCbGFja0JlcnJ5Ojp+U2hhcmVkVGltZXJCbGFja0JlcnJ5KCkKLXsKLSAgICBpZiAobV9z
dGFydGVkKQotICAgICAgICBzdG9wKCk7Ci19Ci0KLXZvaWQgU2hhcmVkVGltZXJCbGFja0JlcnJ5
OjpzdGFydChkb3VibGUgaW50ZXJ2YWwpCi17Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OnRp
bWVyU3RhcnQoaW50ZXJ2YWwsIG1fdGltZXJGdW5jdGlvbik7Ci0gICAgbV9zdGFydGVkID0gdHJ1
ZTsKLX0KLQotdm9pZCBTaGFyZWRUaW1lckJsYWNrQmVycnk6OnN0b3AoKQotewotICAgIGlmICgh
bV9zdGFydGVkKQotICAgICAgICByZXR1cm47Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OnRp
bWVyU3RvcCgpOwotICAgIG1fc3RhcnRlZCA9IGZhbHNlOwotfQotCi12b2lkIHNldFNoYXJlZFRp
bWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKLXsKLSAgICBTaGFyZWRUaW1lckJsYWNrQmVy
cnk6Omluc3RhbmNlKCktPm1fdGltZXJGdW5jdGlvbiA9IGY7Ci19Ci0KLXZvaWQgc2V0U2hhcmVk
VGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQotewotICAgIFNoYXJlZFRpbWVyQmxh
Y2tCZXJyeTo6aW5zdGFuY2UoKS0+c3RhcnQoaW50ZXJ2YWwpOwotfQotCi12b2lkIHN0b3BTaGFy
ZWRUaW1lcigpCi17Ci0gICAgU2hhcmVkVGltZXJCbGFja0JlcnJ5OjppbnN0YW5jZSgpLT5zdG9w
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYmxhY2tiZXJyeS9Tb3VuZEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvU291bmRCbGFja0JlcnJ5LmNwcAkocmV2
aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Tb3Vu
ZEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNvdW5kLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXZvaWQgc3lzdGVtQmVlcCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAko
cmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgc2V0Q29va2llU3RvcmFn
ZVByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ibGFja2JlcnJ5L1dpZGdldEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvV2lkZ2V0QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9u
IDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvV2lkZ2V0Qmxh
Y2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0KLSNpbmNsdWRlICJDdXJzb3IuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2Nyb2xs
Vmlldy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdpZGdldDo6V2lkZ2V0KFBsYXRmb3Jt
V2lkZ2V0IHdpZGdldCkKLXsKLSAgICBpbml0KHdpZGdldCk7Ci19Ci0KLVdpZGdldDo6fldpZGdl
dCgpCi17Ci19Ci0KLXZvaWQgV2lkZ2V0OjpoaWRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgSW50UmVjdCBjb25z
dCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEN1cnNv
cihDdXJzb3IgY29uc3QmIGN1cnNvcikKLXsKLSAgICBTY3JvbGxWaWV3KiB0aGVSb290ID0gcm9v
dCgpOwotICAgIGlmICghdGhlUm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAgIFBsYXRmb3JtUGFn
ZUNsaWVudCBwYWdlQ2xpZW50ID0gdGhlUm9vdC0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKTsKLQotICAgIGlmIChwYWdlQ2xpZW50KQotICAgICAgICBwYWdlQ2xpZW50LT5zZXRD
dXJzb3IoY3Vyc29yLmltcGwoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRGb2N1cyhib29sKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX2ZyYW1lID0gcmVjdDsKLQotICAgIGZyYW1l
UmVjdHNDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNob3coKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUludFJlY3QgV2lkZ2V0OjpmcmFtZVJlY3QoKSBjb25z
dAotewotICAgIHJldHVybiBtX2ZyYW1lOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZURhdGFiYXNlQmFj
a2luZ1N0b3JlL0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0
b3JlL0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVEYXRhYmFzZUJhY2tpbmdT
dG9yZS9Db29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSnVsaWVuIENoYWZmcmFpeCA8
amNoYWZmcmFpeEBwbGV5by5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0jZGVmaW5lIEVOQUJM
RV9DT09LSUVfREVCVUcgMAotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29va2ll
RGF0YWJhc2VCYWNraW5nU3RvcmUuaCIKLQotI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKLSNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGFyc2VkQ29va2llLmgiCi0jaW5jbHVkZSAi
U1FMaXRlU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEVfQ09PS0lFX0RFQlVHCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtTG9nLmg+Ci0jZGVmaW5lIENvb2tpZUxvZyhmb3JtYXQsIC4uLikgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCBm
b3JtYXQsICMjIF9fVkFfQVJHU19fKQotI2Vsc2UKLSNkZWZpbmUgQ29va2llTG9nKGZvcm1hdCwg
Li4uKQotI2VuZGlmCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1FeGVjdXRhYmxlTWVz
c2FnZS5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU5hdmlnYXRvckhhbmRsZXIuaD4K
LQotdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1lc3NhZ2VDbGllbnQ7Ci11c2luZyBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6VHlwZWRSZXBseUJ1ZmZlcjsKLXVzaW5nIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpjcmVhdGVNZXRob2RDYWxsTWVzc2FnZTsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBz
X2RhdGFiYXNlVGltZXJJbnRlcnZhbCA9IDI7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ29v
a2llRGF0YWJhc2VCYWNraW5nU3RvcmU6OkNvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlKCkKLSAg
ICA6IE1lc3NhZ2VDbGllbnQoTWVzc2FnZUNsaWVudDo6UmVwbHlGZWF0dXJlIHwgTWVzc2FnZUNs
aWVudDo6U3luY0ZlYXR1cmUpCi0gICAgLCBtX3RhYmxlTmFtZSgiY29va2llcyIpIC8vIFRoaXMg
aXMgY2hvc2VuIHRvIG1hdGNoIE1vemlsbGEncyB0YWJsZSBuYW1lLgotICAgICwgbV9kYlRpbWVy
KHRoaXMsICZDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZTo6c2VuZENoYW5nZXNUb0RhdGFiYXNl
VGltZXJGaXJlZCkKLSAgICAsIG1faW5zZXJ0U3RhdGVtZW50KDApCi0gICAgLCBtX3VwZGF0ZVN0
YXRlbWVudCgwKQotICAgICwgbV9kZWxldGVTdGF0ZW1lbnQoMCkKLXsKLSAgICBtX2RiVGltZXJD
bGllbnQgPSBuZXcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdlbmVyaWNUaW1lckNsaWVudCh0aGlz
KTsKLSAgICBtX2RiVGltZXIuc2V0Q2xpZW50KG1fZGJUaW1lckNsaWVudCk7Ci0KLSAgICBjcmVh
dGVUaHJlYWQoImNvb2tpZV9kYXRhYmFzZSIsIHB0aHJlYWRfYXR0cl9kZWZhdWx0KTsKLX0KLQot
Q29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6On5Db29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZSgp
Ci17Ci0gICAgZGVsZXRlR3VhcmRlZE9iamVjdChtX2RiVGltZXJDbGllbnQpOwotICAgIG1fZGJU
aW1lckNsaWVudCA9IDA7Ci0gICAgLy8gRklYTUU6IFRoaXMgb2JqZWN0IHdpbGwgbmV2ZXIgYmUg
ZGVsZXRlZCBkdWUgdG8gdGhlIHNldCB1cCBvZiBDb29raWVNYW5hZ2VyIChpdCdzIGEgc2luZ2xl
dG9uKQotICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0gRGVzdHJ1Y3RpbmciKTsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgp
OwotICAgICAgICBBU1NFUlQobV9jaGFuZ2VkQ29va2llcy5pc0VtcHR5KCkpOwotICAgIH0KLSNl
bmRpZgotfQotCi12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpvblRocmVhZEZpbmlz
aGVkKCkKLXsKLSAgICBDb29raWVMb2coIkNvb2tpZU1hbmFnZXIgLSBmbHVzaGluZyBjb29raWVz
IHRvIGJhY2tpbmdTdG9yZS4uLiIpOwotICAgIC8vIFRoaXMgaXMgY2FsbGVkIGZyb20gc2h1dGRv
d24sIHNvIHdlIG5lZWQgdG8gYmUgc3VyZSB0aGUgT1MgZG9lc24ndCBraWxsIHVzIGJlZm9yZSB0
aGUgZGIgd3JpdGUgZmluaXNoZXMuCi0gICAgLy8gT25jZSBzaG91bGQgYmUgZW5vdWdoIHNpbmNl
IHRoaXMgZXh0ZW5kcyB0ZXJpbWluYXRpb24gYnkgMiBzZWNvbmRzLgotICAgIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpOYXZpZ2F0b3JIYW5kbGVyOjpzZW5kRXh0ZW5kVGVybWluYXRlKCk7Ci0gICAg
c2VuZENoYW5nZXNUb0RhdGFiYXNlU3luY2hyb25vdXNseSgpOwotICAgIENvb2tpZUxvZygiQ29v
a2llTWFuYWdlciAtIGZpbmlzaGVkIGZsdXNoaW5nIGNvb2tpZXMgdG8gYmFja2luZ1N0b3JlLiIp
OwotCi0gICAgTWVzc2FnZUNsaWVudDo6b25UaHJlYWRGaW5pc2hlZCgpOwotfQotCi12b2lkIENv
b2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpvcGVuKGNvbnN0IFN0cmluZyYgY29va2llSmFyKQot
ewotICAgIGRpc3BhdGNoTWVzc2FnZShjcmVhdGVNZXRob2RDYWxsTWVzc2FnZSgmQ29va2llRGF0
YWJhc2VCYWNraW5nU3RvcmU6Omludm9rZU9wZW4sIHRoaXMsIGNvb2tpZUphcikpOwotfQotCi12
b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjppbnZva2VPcGVuKGNvbnN0IFN0cmluZyYg
Y29va2llSmFyKQotewotICAgIEFTU0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7Ci0gICAgaWYgKG1f
ZGIuaXNPcGVuKCkpCi0gICAgICAgIGNsb3NlKCk7Ci0KLSAgICBpZiAoIW1fZGIub3Blbihjb29r
aWVKYXIpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IG9wZW4gdGhlIGNvb2tpZSBk
YXRhYmFzZS4gTm8gY29va2llIHdpbGwgYmUgc3RvcmVkISIpOwotICAgICAgICBMT0dfRVJST1Io
IlNRTGl0ZSBFcnJvciBNZXNzYWdlOiAlcyIsIG1fZGIubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiUFJBR01BIGxvY2tp
bmdfbW9kZT1FWENMVVNJVkU7Iik7Ci0gICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiUFJBR01BIGpv
dXJuYWxfbW9kZT1XQUw7Iik7Ci0KLSAgICBjb25zdCBTdHJpbmcgcHJpbWFyeUtleUZpZWxkcygi
UFJJTUFSWSBLRVkgKHByb3RvY29sLCBob3N0LCBwYXRoLCBuYW1lKSIpOwotICAgIGNvbnN0IFN0
cmluZyBkYXRhYmFzZUZpZWxkcygibmFtZSBURVhULCB2YWx1ZSBURVhULCBob3N0IFRFWFQsIHBh
dGggVEVYVCwgZXhwaXJ5IERPVUJMRSwgbGFzdEFjY2Vzc2VkIERPVUJMRSwgaXNTZWN1cmUgSU5U
RUdFUiwgaXNIdHRwT25seSBJTlRFR0VSLCBjcmVhdGlvblRpbWUgRE9VQkxFLCBwcm90b2NvbCBU
RVhUIik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGNyZWF0ZVRhYmxlUXVlcnk7Ci0gICAgY3JlYXRl
VGFibGVRdWVyeS5hcHBlbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICIpOwotICAgIGNy
ZWF0ZVRhYmxlUXVlcnkuYXBwZW5kKG1fdGFibGVOYW1lKTsKLSAgICAvLyBUaGlzIHRhYmxlIHNj
aGVtYSBpcyBjb21wbGlhbnQgd2l0aCBNb3ppbGxhJ3MuCi0gICAgY3JlYXRlVGFibGVRdWVyeS5h
cHBlbmQoIiAoIiArIGRhdGFiYXNlRmllbGRzICsgIiwgIiArIHByaW1hcnlLZXlGaWVsZHMrIik7
Iik7Ci0KLSAgICBtX2RiLnNldEJ1c3lUaW1lb3V0KDEwMDApOwotCi0gICAgaWYgKCFtX2RiLmV4
ZWN1dGVDb21tYW5kKGNyZWF0ZVRhYmxlUXVlcnkudG9TdHJpbmcoKSkpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIHRoZSB0YWJsZSB0byBzdG9yZSB0aGUgY29va2llcyBp
bnRvLiBObyBjb29raWUgd2lsbCBiZSBzdG9yZWQhIik7Ci0gICAgICAgIExPR19FUlJPUigiU1FM
aXRlIEVycm9yIE1lc3NhZ2U6ICVzIiwgbV9kYi5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGNs
b3NlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGluc2Vy
dFF1ZXJ5OwotICAgIGluc2VydFF1ZXJ5LmFwcGVuZCgiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAi
KTsKLSAgICBpbnNlcnRRdWVyeS5hcHBlbmQobV90YWJsZU5hbWUpOwotICAgIGluc2VydFF1ZXJ5
LmFwcGVuZCgiIChuYW1lLCB2YWx1ZSwgaG9zdCwgcGF0aCwgZXhwaXJ5LCBsYXN0QWNjZXNzZWQs
IGlzU2VjdXJlLCBpc0h0dHBPbmx5LCBjcmVhdGlvblRpbWUsIHByb3RvY29sKSBWQUxVRVMgKD8x
LCA/MiwgPzMsID80LCA/NSwgPzYsID83LCA/OCwgPzksID8xMCk7Iik7Ci0KLSAgICBtX2luc2Vy
dFN0YXRlbWVudCA9IG5ldyBTUUxpdGVTdGF0ZW1lbnQobV9kYiwgaW5zZXJ0UXVlcnkudG9TdHJp
bmcoKSk7Ci0gICAgaWYgKG1faW5zZXJ0U3RhdGVtZW50LT5wcmVwYXJlKCkpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJDYW5ub3Qgc2F2ZSBjb29raWVzIik7Ci0gICAgICAgIExPR19FUlJPUigiU1FM
aXRlIEVycm9yIE1lc3NhZ2U6ICVzIiwgbV9kYi5sYXN0RXJyb3JNc2coKSk7Ci0gICAgfQotCi0g
ICAgU3RyaW5nQnVpbGRlciB1cGRhdGVRdWVyeTsKLSAgICB1cGRhdGVRdWVyeS5hcHBlbmQoIlVQ
REFURSAiKTsKLSAgICB1cGRhdGVRdWVyeS5hcHBlbmQobV90YWJsZU5hbWUpOwotICAgIC8vIFRo
ZSB3aGVyZSBzdGF0ZW1lbnQgaXMgY2hvc2VuIHRvIG1hdGNoIENvb2tpZU1hcCBrZXkuCi0gICAg
dXBkYXRlUXVlcnkuYXBwZW5kKCIgU0VUIG5hbWUgPSA/MSwgdmFsdWUgPSA/MiwgaG9zdCA9ID8z
LCBwYXRoID0gPzQsIGV4cGlyeSA9ID81LCBsYXN0QWNjZXNzZWQgPSA/NiwgaXNTZWN1cmUgPSA/
NywgaXNIdHRwT25seSA9ID84LCBjcmVhdGlvblRpbWUgPSA/OSwgcHJvdG9jb2wgPSA/MTAgd2hl
cmUgbmFtZSA9ID8xIGFuZCBob3N0ID0gPzMgYW5kIHBhdGggPSA/NDsiKTsKLSAgICBtX3VwZGF0
ZVN0YXRlbWVudCA9IG5ldyBTUUxpdGVTdGF0ZW1lbnQobV9kYiwgdXBkYXRlUXVlcnkudG9TdHJp
bmcoKSk7Ci0KLSAgICBpZiAobV91cGRhdGVTdGF0ZW1lbnQtPnByZXBhcmUoKSkgewotICAgICAg
ICBMT0dfRVJST1IoIkNhbm5vdCB1cGRhdGUgY29va2llcyIpOwotICAgICAgICBMT0dfRVJST1Io
IlNRTGl0ZSBFcnJvciBNZXNzYWdlOiAlcyIsIG1fZGIubGFzdEVycm9yTXNnKCkpOwotICAgIH0K
LQotICAgIFN0cmluZ0J1aWxkZXIgZGVsZXRlUXVlcnk7Ci0gICAgZGVsZXRlUXVlcnkuYXBwZW5k
KCJERUxFVEUgRlJPTSAiKTsKLSAgICBkZWxldGVRdWVyeS5hcHBlbmQobV90YWJsZU5hbWUpOwot
ICAgIC8vIFRoZSB3aGVyZSBzdGF0ZW1lbnQgaXMgY2hvc2VuIHRvIG1hdGNoIENvb2tpZU1hcCBr
ZXkuCi0gICAgZGVsZXRlUXVlcnkuYXBwZW5kKCIgV0hFUkUgbmFtZT0/MSBhbmQgaG9zdD0/MiBh
bmQgcGF0aD0/MyBhbmQgcHJvdG9jb2w9PzQ7Iik7Ci0gICAgbV9kZWxldGVTdGF0ZW1lbnQgPSBu
ZXcgU1FMaXRlU3RhdGVtZW50KG1fZGIsIGRlbGV0ZVF1ZXJ5LnRvU3RyaW5nKCkpOwotCi0gICAg
aWYgKG1fZGVsZXRlU3RhdGVtZW50LT5wcmVwYXJlKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJD
YW5ub3QgZGVsZXRlIGNvb2tpZXMiKTsKLSAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgRXJyb3Ig
TWVzc2FnZTogJXMiLCBtX2RiLmxhc3RFcnJvck1zZygpKTsKLSAgICB9Ci0KLSAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6d2ViS2l0VGhyZWFkTWVzc2FnZUNsaWVudCgpLT5kaXNwYXRjaE1lc3Nh
Z2UoY3JlYXRlTWV0aG9kQ2FsbE1lc3NhZ2UoJkNvb2tpZU1hbmFnZXI6OmdldEJhY2tpbmdTdG9y
ZUNvb2tpZXMsICZjb29raWVNYW5hZ2VyKCkpKTsKLX0KLQotdm9pZCBDb29raWVEYXRhYmFzZUJh
Y2tpbmdTdG9yZTo6Y2xvc2UoKQotewotICAgIEFTU0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7Ci0g
ICAgQ29va2llTG9nKCJDb29raWVCYWNraW5nU3RvcmUgLSBDbG9zaW5nIik7Ci0KLSAgICBzaXpl
X3QgY2hhbmdlZENvb2tpZXNTaXplOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayht
X211dGV4KTsKLSAgICAgICAgaWYgKG1fZGJUaW1lci5zdGFydGVkKCkpCi0gICAgICAgICAgICBt
X2RiVGltZXIuc3RvcCgpOwotICAgICAgICBjaGFuZ2VkQ29va2llc1NpemUgPSBtX2NoYW5nZWRD
b29raWVzLnNpemUoKTsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlZENvb2tpZXNTaXplID4gMCkK
LSAgICAgICAgaW52b2tlU2VuZENoYW5nZXNUb0RhdGFiYXNlKCk7Ci0KLSAgICBkZWxldGUgbV9p
bnNlcnRTdGF0ZW1lbnQ7Ci0gICAgbV9pbnNlcnRTdGF0ZW1lbnQgPSAwOwotICAgIGRlbGV0ZSBt
X3VwZGF0ZVN0YXRlbWVudDsKLSAgICBtX3VwZGF0ZVN0YXRlbWVudCA9IDA7Ci0gICAgZGVsZXRl
IG1fZGVsZXRlU3RhdGVtZW50OwotICAgIG1fZGVsZXRlU3RhdGVtZW50ID0gMDsKLQotICAgIGlm
IChtX2RiLmlzT3BlbigpKQotICAgICAgICBtX2RiLmNsb3NlKCk7Ci19Ci0KLXZvaWQgQ29va2ll
RGF0YWJhc2VCYWNraW5nU3RvcmU6Omluc2VydChjb25zdCBQYXNzUmVmUHRyPFBhcnNlZENvb2tp
ZT4gY29va2llKQotewotICAgIENvb2tpZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0gYWRkaW5n
IGluc2VydGluZyBjb29raWUgJXMgdG8gcXVldWUuIiwgY29va2llLT50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgIGFkZFRvQ2hhbmdlUXVldWUoY29va2llLCBJbnNlcnQpOwotfQotCi12
b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjp1cGRhdGUoY29uc3QgUGFzc1JlZlB0cjxQ
YXJzZWRDb29raWU+IGNvb2tpZSkKLXsKLSAgICBDb29raWVMb2coIkNvb2tpZUJhY2tpbmdTdG9y
ZSAtIGFkZGluZyB1cGRhdGluZyBjb29raWUgJXMgdG8gcXVldWUuIiwgY29va2llLT50b1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGFkZFRvQ2hhbmdlUXVldWUoY29va2llLCBVcGRhdGUp
OwotfQotCi12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpyZW1vdmUoY29uc3QgUGFz
c1JlZlB0cjxQYXJzZWRDb29raWU+IGNvb2tpZSkKLXsKLSAgICBDb29raWVMb2coIkNvb2tpZUJh
Y2tpbmdTdG9yZSAtIGFkZGluZyBkZWxldGluZyBjb29raWUgJXMgdG8gcXVldWUuIiwgY29va2ll
LT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGFkZFRvQ2hhbmdlUXVldWUoY29va2ll
LCBEZWxldGUpOwotfQotCi12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpyZW1vdmVB
bGwoKQotewotICAgIGRpc3BhdGNoTWVzc2FnZShjcmVhdGVNZXRob2RDYWxsTWVzc2FnZSgmQ29v
a2llRGF0YWJhc2VCYWNraW5nU3RvcmU6Omludm9rZVJlbW92ZUFsbCwgdGhpcykpOwotfQotCi12
b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjppbnZva2VSZW1vdmVBbGwoKQotewotICAg
IEFTU0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2RiLmlzT3BlbigpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBDb29raWVMb2coIkNvb2tpZUJhY2tpbmdTdG9yZSAtIHJlbW92
ZSBBbGwgY29va2llcyBmcm9tIGJhY2tpbmdzdG9yZSIpOwotCi0gICAgewotICAgICAgICBNdXRl
eExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgICAgICBtX2NoYW5nZWRDb29raWVzLmNsZWFyKCk7
Ci0gICAgfQotCi0gICAgU3RyaW5nQnVpbGRlciBkZWxldGVRdWVyeTsKLSAgICBkZWxldGVRdWVy
eS5hcHBlbmQoIkRFTEVURSBGUk9NICIpOwotICAgIGRlbGV0ZVF1ZXJ5LmFwcGVuZChtX3RhYmxl
TmFtZSk7Ci0gICAgZGVsZXRlUXVlcnkuYXBwZW5kKCI7Iik7Ci0KLSAgICBTUUxpdGVTdGF0ZW1l
bnQgZGVsZXRlU3RhdGVtZW50KG1fZGIsIGRlbGV0ZVF1ZXJ5LnRvU3RyaW5nKCkpOwotICAgIGlm
IChkZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IHByZXBhcmUgREVMRVRFICogc3RhdGVtZW50Iik7Ci0gICAgICAgIExPR19FUlJPUigiU1FM
aXRlIEVycm9yIE1lc3NhZ2U6ICVzIiwgbV9kYi5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgp
KSB7Ci0gICAgICAgIExPR19FUlJPUigiQ2Fubm90IGRlbGV0ZSBjb29raWUgZnJvbSBkYXRhYmFz
ZSIpOwotICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBFcnJvciBNZXNzYWdlOiAlcyIsIG1fZGIu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIENvb2tp
ZURhdGFiYXNlQmFja2luZ1N0b3JlOjpnZXRDb29raWVzRnJvbURhdGFiYXNlKFZlY3RvcjxSZWZQ
dHI8UGFyc2VkQ29va2llPiA+JiBzdGFja09mQ29va2llcywgdW5zaWduZWQgbGltaXQpCi17Ci0g
ICAgLy8gSXQgaXMgbm90IGEgaHVnZSBwZXJmb3JtYW5jZSBoaXQgdG8gd2FpdCBvbiB0aGUgcmVw
bHkgaGVyZSBiZWNhdXNlIHRoaXMgaXMgb25seSBkb25lIG9uY2UgZHVyaW5nIHNldHVwIGFuZCB3
aGVuIHR1cm5pbmcgb2ZmIHByaXZhdGUgbW9kZS4KLSAgICBUeXBlZFJlcGx5QnVmZmVyPCBWZWN0
b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPiogPiByZXBseUJ1ZmZlcigwKTsKLSAgICBkaXNwYXRj
aE1lc3NhZ2UoY3JlYXRlTWV0aG9kQ2FsbE1lc3NhZ2VXaXRoUmV0dXJuKCZDb29raWVEYXRhYmFz
ZUJhY2tpbmdTdG9yZTo6aW52b2tlR2V0Q29va2llc1dpdGhMaW1pdCwgJnJlcGx5QnVmZmVyLCB0
aGlzLCBsaW1pdCkpOwotICAgIFZlY3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+KiBjb29raWVz
ID0gcmVwbHlCdWZmZXIucG9pbnRlcigpOwotICAgIGlmIChjb29raWVzKQotICAgICAgICBzdGFj
a09mQ29va2llcy5zd2FwKCpjb29raWVzKTsKLSAgICBkZWxldGUgY29va2llczsKLX0KLQotVmVj
dG9yPFJlZlB0cjxQYXJzZWRDb29raWU+ID4qIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpp
bnZva2VHZXRDb29raWVzV2l0aExpbWl0KHVuc2lnbmVkIGxpbWl0KQotewotICAgIEFTU0VSVChp
c0N1cnJlbnRUaHJlYWQoKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSB0YWJsZSBleGlzdHMg
dG8gYXZvaWQgZG9pbmcgYW4gdW5uZWNlc3NhcnkgcmVxdWVzdC4KLSAgICBpZiAoIW1fZGIuaXNP
cGVuKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5nQnVpbGRlciBzZWxlY3RRdWVy
eTsKLSAgICBzZWxlY3RRdWVyeS5hcHBlbmQoIlNFTEVDVCBuYW1lLCB2YWx1ZSwgaG9zdCwgcGF0
aCwgZXhwaXJ5LCBsYXN0QWNjZXNzZWQsIGlzU2VjdXJlLCBpc0h0dHBPbmx5LCBjcmVhdGlvblRp
bWUsIHByb3RvY29sIEZST00gIik7Ci0gICAgc2VsZWN0UXVlcnkuYXBwZW5kKG1fdGFibGVOYW1l
KTsKLSAgICBpZiAobGltaXQgPiAwKSB7Ci0gICAgICAgIHNlbGVjdFF1ZXJ5LmFwcGVuZCgiIE9S
REVSIEJZIGxhc3RBY2Nlc3NlZCBBU0MiKTsKLSAgICAgICAgc2VsZWN0UXVlcnkuYXBwZW5kKCIg
TElNSVQgIiArIFN0cmluZzo6bnVtYmVyKGxpbWl0KSk7Ci0gICAgfQotICAgIHNlbGVjdFF1ZXJ5
LmFwcGVuZCgiOyIpOwotCi0gICAgQ29va2llTG9nKCJDb29raWVCYWNraW5nU3RvcmUgLSBpbnZv
a2VHZXRBbGxDb29raWVzIHdpdGggc2VsZWN0IHF1ZXJ5ICVzIiwgc2VsZWN0UXVlcnkudG9TdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RTdGF0ZW1l
bnQobV9kYiwgc2VsZWN0UXVlcnkudG9TdHJpbmcoKSk7Ci0KLSAgICBpZiAoc2VsZWN0U3RhdGVt
ZW50LnByZXBhcmUoKSkgewotICAgICAgICBMT0dfRVJST1IoIkNhbm5vdCByZXRyaWV2ZWQgY29v
a2llcyBmcm9tIHRoZSBkYXRhYmFzZSIpOwotICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBFcnJv
ciBNZXNzYWdlOiAlcyIsIG1fZGIubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPiogY29va2llcyA9IG5l
dyBWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPjsKLSAgICB3aGlsZSAoc2VsZWN0U3RhdGVt
ZW50LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgYSByb3cg
dG8gZmV0Y2gKLQotICAgICAgICBTdHJpbmcgbmFtZSA9IHNlbGVjdFN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDApOwotICAgICAgICBTdHJpbmcgdmFsdWUgPSBzZWxlY3RTdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgxKTsKLSAgICAgICAgU3RyaW5nIGRvbWFpbiA9IHNlbGVjdFN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDIpOwotICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDMpOwotICAgICAgICBkb3VibGUgZXhwaXJ5ID0gc2VsZWN0U3RhdGVtZW50Lmdl
dENvbHVtbkRvdWJsZSg0KTsKLSAgICAgICAgZG91YmxlIGxhc3RBY2Nlc3NlZCA9IHNlbGVjdFN0
YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoNSk7Ci0gICAgICAgIGJvb2wgaXNTZWN1cmUgPSBzZWxl
Y3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDYpOwotICAgICAgICBib29sIGlzSHR0cE9ubHkgPSBz
ZWxlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDcpOwotICAgICAgICBkb3VibGUgY3JlYXRpb25U
aW1lID0gc2VsZWN0U3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSg4KTsKLSAgICAgICAgU3RyaW5n
IHByb3RvY29sID0gc2VsZWN0U3RhdGVtZW50LmdldENvbHVtblRleHQoOSk7Ci0KLSAgICAgICAg
Y29va2llcy0+YXBwZW5kKFBhcnNlZENvb2tpZTo6Y3JlYXRlKG5hbWUsIHZhbHVlLCBkb21haW4s
IHByb3RvY29sLCBwYXRoLCBleHBpcnksIGxhc3RBY2Nlc3NlZCwgY3JlYXRpb25UaW1lLCBpc1Nl
Y3VyZSwgaXNIdHRwT25seSkpOwotICAgIH0KLQotICAgIHJldHVybiBjb29raWVzOwotfQotCi12
b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpvcGVuQW5kTG9hZERhdGFiYXNlU3luY2hy
b25vdXNseShjb25zdCBTdHJpbmcmIGNvb2tpZUphcikKLXsKLSAgICBDb29raWVMb2coIkNvb2tp
ZUJhY2tpbmdTdG9yZSAtIGxvYWRpbmcgZGF0YWJhc2UgaW50byBDb29raWVNYW5hZ2VyIGltbWVk
aWF0ZWx5Iik7Ci0KLSAgICBpZiAobV9kYi5pc09wZW4oKSkgewotICAgICAgICBpZiAoaXNDdXJy
ZW50VGhyZWFkKCkpCi0gICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6d2ViS2l0VGhy
ZWFkTWVzc2FnZUNsaWVudCgpLT5kaXNwYXRjaFN5bmNNZXNzYWdlKGNyZWF0ZU1ldGhvZENhbGxN
ZXNzYWdlKCZDb29raWVNYW5hZ2VyOjpnZXRCYWNraW5nU3RvcmVDb29raWVzLCAmY29va2llTWFu
YWdlcigpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvb2tpZU1hbmFnZXIoKS5nZXRC
YWNraW5nU3RvcmVDb29raWVzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGlzQ3VycmVu
dFRocmVhZCgpKQotICAgICAgICAgICAgaW52b2tlT3Blbihjb29raWVKYXIpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBkaXNwYXRjaFN5bmNNZXNzYWdlKGNyZWF0ZU1ldGhvZENhbGxNZXNz
YWdlKCZDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZTo6aW52b2tlT3BlbiwgdGhpcywgY29va2ll
SmFyKSk7Ci0gICAgfQotfQotCi12b2lkIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjpzZW5k
Q2hhbmdlc1RvRGF0YWJhc2VTeW5jaHJvbm91c2x5KCkKLXsKLSAgICBDb29raWVMb2coIkNvb2tp
ZUJhY2tpbmdTdG9yZSAtIHNlbmRpbmcgdG8gZGF0YWJhc2UgaW1tZWRpYXRlbHkiKTsKLSAgICB7
Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7Ci0gICAgICAgIGlmIChtX2RiVGlt
ZXIuc3RhcnRlZCgpKQotICAgICAgICAgICAgbV9kYlRpbWVyLnN0b3AoKTsKLSAgICB9Ci0gICAg
aWYgKGlzQ3VycmVudFRocmVhZCgpKQotICAgICAgICBpbnZva2VTZW5kQ2hhbmdlc1RvRGF0YWJh
c2UoKTsKLSAgICBlbHNlCi0gICAgICAgIGRpc3BhdGNoU3luY01lc3NhZ2UoY3JlYXRlTWV0aG9k
Q2FsbE1lc3NhZ2UoJkNvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlOjppbnZva2VTZW5kQ2hhbmdl
c1RvRGF0YWJhc2UsIHRoaXMpKTsKLX0KLQotdm9pZCBDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9y
ZTo6c2VuZENoYW5nZXNUb0RhdGFiYXNlKGludCBuZXh0SW50ZXJ2YWwpCi17Ci0gICAgTXV0ZXhM
b2NrZXIgbG9jayhtX211dGV4KTsKLSAgICBpZiAoIW1fZGJUaW1lci5zdGFydGVkKCkpIHsKLSAg
ICAgICAgQ29va2llTG9nKCJDb29raWVCYWNraW5nU3RvcmUgLSBTdGFydGluZyBvbmUgc2hvdCBz
ZW5kIHRvIGRhdGFiYXNlIik7Ci0gICAgICAgIG1fZGJUaW1lci5zdGFydChuZXh0SW50ZXJ2YWwp
OwotICAgIH0gZWxzZSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBDb29raWVMb2coIkNvb2tp
ZUJhY2tpbmdTdG9yZSAtIFRpbWVyIGFscmVhZHkgcnVubmluZywgc2tpcHBpbmcgdGhpcyByZXF1
ZXN0Iik7Ci0jZW5kaWYKLSAgICB9Ci19Ci0KLXZvaWQgQ29va2llRGF0YWJhc2VCYWNraW5nU3Rv
cmU6OnNlbmRDaGFuZ2VzVG9EYXRhYmFzZVRpbWVyRmlyZWQoKQotewotICAgIGRpc3BhdGNoTWVz
c2FnZShjcmVhdGVNZXRob2RDYWxsTWVzc2FnZSgmQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6
Omludm9rZVNlbmRDaGFuZ2VzVG9EYXRhYmFzZSwgdGhpcykpOwotfQotCi12b2lkIENvb2tpZURh
dGFiYXNlQmFja2luZ1N0b3JlOjppbnZva2VTZW5kQ2hhbmdlc1RvRGF0YWJhc2UoKQotewotICAg
IEFTU0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fZGIuaXNPcGVuKCkpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJUaW1lciBGaXJlZCwgYnV0IGRhdGFiYXNlIGlzIGNsb3NlZC4i
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxDb29raWVBY3Rpb24+IGNo
YW5nZWRDb29raWVzOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsK
LSAgICAgICAgY2hhbmdlZENvb2tpZXMuc3dhcChtX2NoYW5nZWRDb29raWVzKTsKLSAgICAgICAg
QVNTRVJUKG1fY2hhbmdlZENvb2tpZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoY2hh
bmdlZENvb2tpZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENvb2tpZUxvZygiQ29va2llQmFja2lu
Z1N0b3JlIC0gVGltZXIgZmlyZWQsIGJ1dCBubyBjb29raWVzIGluIGNoYW5nZWxpc3QiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBDb29raWVMb2coIkNvb2tpZUJhY2tpbmdTdG9yZSAt
IFRpbWVyIGZpcmVkLCBzZW5kaW5nIGNoYW5nZXMgdG8gZGF0YWJhc2UuIFdlIGhhdmUgJWQgY2hh
bmdlcyIsIGNoYW5nZWRDb29raWVzLnNpemUoKSk7Ci0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJh
bnNhY3Rpb24obV9kYiwgZmFsc2UpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0KLSAgICAv
LyBJdGVyYXRlIHRocm91Z2ggZXZlcnkgZWxlbWVudCBpbiB0aGUgY2hhbmdlIGxpc3QgdG8gbWFr
ZSBjYWxscwotICAgIC8vIElmIGVycm9yIG9jY3VycywgaWdub3JlIGl0IGFuZCBjb250aW51ZSB0
byB0aGUgbmV4dCBzdGF0ZW1lbnQKLSAgICBzaXplX3Qgc2l6ZU9mQ2hhbmdlID0gY2hhbmdlZENv
b2tpZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZU9mQ2hhbmdlOyBp
KyspIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50KiBtX3N0YXRlbWVudDsKLSAgICAgICAgY29u
c3QgUmVmUHRyPFBhcnNlZENvb2tpZT4gY29va2llID0gY2hhbmdlZENvb2tpZXNbaV0uZmlyc3Q7
Ci0gICAgICAgIFVwZGF0ZVBhcmFtZXRlciBhY3Rpb24gPSBjaGFuZ2VkQ29va2llc1tpXS5zZWNv
bmQ7Ci0KLSAgICAgICAgaWYgKGFjdGlvbiA9PSBEZWxldGUpIHsKLSAgICAgICAgICAgIG1fc3Rh
dGVtZW50ID0gbV9kZWxldGVTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICBDb29raWVMb2coIkNvb2tp
ZUJhY2tpbmdTdG9yZSAtIGRlbGV0aW5nIGNvb2tpZSAlcy4iLCBjb29raWUudG9TdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKLQotICAgICAgICAgICAgLy8gQmluZHMgYWxsIHRoZSB2YWx1ZXMKLSAg
ICAgICAgICAgIGlmIChtX3N0YXRlbWVudC0+YmluZFRleHQoMSwgY29va2llLT5uYW1lKCkpIHx8
IG1fc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBjb29raWUtPmRvbWFpbigpKQotICAgICAgICAgICAg
ICAgIHx8IG1fc3RhdGVtZW50LT5iaW5kVGV4dCgzLCBjb29raWUtPnBhdGgoKSkgfHwgbV9zdGF0
ZW1lbnQtPmJpbmRUZXh0KDQsIGNvb2tpZS0+cHJvdG9jb2woKSkpIHsKLSAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNhbm5vdCBiaW5kIGNvb2tpZSBkYXRhIHRvIGRlbGV0ZSIpOwotICAgICAg
ICAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIEVycm9yIE1lc3NhZ2U6ICVzIiwgbV9kYi5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoYWN0aW9uID09IFVwZGF0ZSkgewotICAgICAgICAgICAgICAgIENvb2tp
ZUxvZygiQ29va2llQmFja2luZ1N0b3JlIC0gdXBkYXRpbmcgY29va2llICVzLiIsIGNvb2tpZS0+
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlbWVudCA9
IG1fdXBkYXRlU3RhdGVtZW50OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBDb29raWVMb2coIkNvb2tpZUJhY2tpbmdTdG9yZSAtIGluc2VydGluZyBjb29raWUgJXMuIiwg
Y29va2llLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIG1fc3Rh
dGVtZW50ID0gbV9pbnNlcnRTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIEJpbmRzIGFsbCB0aGUgdmFsdWVzCi0gICAgICAgICAgICBpZiAobV9zdGF0ZW1lbnQtPmJp
bmRUZXh0KDEsIGNvb2tpZS0+bmFtZSgpKSB8fCBtX3N0YXRlbWVudC0+YmluZFRleHQoMiwgY29v
a2llLT52YWx1ZSgpKQotICAgICAgICAgICAgICAgIHx8IG1fc3RhdGVtZW50LT5iaW5kVGV4dCgz
LCBjb29raWUtPmRvbWFpbigpKSB8fCBtX3N0YXRlbWVudC0+YmluZFRleHQoNCwgY29va2llLT5w
YXRoKCkpCi0gICAgICAgICAgICAgICAgfHwgbV9zdGF0ZW1lbnQtPmJpbmREb3VibGUoNSwgY29v
a2llLT5leHBpcnkoKSkgfHwgbV9zdGF0ZW1lbnQtPmJpbmREb3VibGUoNiwgY29va2llLT5sYXN0
QWNjZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB8fCBtX3N0YXRlbWVudC0+YmluZEludDY0KDcs
IGNvb2tpZS0+aXNTZWN1cmUoKSkgfHwgbV9zdGF0ZW1lbnQtPmJpbmRJbnQ2NCg4LCBjb29raWUt
PmlzSHR0cE9ubHkoKSkKLSAgICAgICAgICAgICAgICB8fCBtX3N0YXRlbWVudC0+YmluZERvdWJs
ZSg5LCBjb29raWUtPmNyZWF0aW9uVGltZSgpKSB8fCBtX3N0YXRlbWVudC0+YmluZFRleHQoMTAs
IGNvb2tpZS0+cHJvdG9jb2woKSkpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNhbm5v
dCBiaW5kIGNvb2tpZSBkYXRhIHRvIHNhdmUiKTsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1Io
IlNRTGl0ZSBFcnJvciBNZXNzYWdlOiAlcyIsIG1fZGIubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHJjID0gbV9zdGF0ZW1l
bnQtPnN0ZXAoKTsKLSAgICAgICAgbV9zdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgICAgIGlmIChy
YyAhPSBTUUxSZXN1bHRPayAmJiByYyAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIkNhbm5vdCBtYWtlIGNhbGwgdG8gdGhlIGRhdGFiYXNlIik7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIlNRTGl0ZSBFcnJvciBNZXNzYWdlOiAlcyIsIG1fZGIubGFzdEVycm9yTXNn
KCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKLSAgICBD
b29raWVMb2coIkNvb2tpZUJhY2tpbmdTdG9yZSAtIHRyYW5zYWN0aW9uIGNvbXBsZXRlIik7Ci19
Ci0KLXZvaWQgQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmU6OmFkZFRvQ2hhbmdlUXVldWUoY29u
c3QgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+IGNoYW5nZWRDb29raWUsIFVwZGF0ZVBhcmFtZXRl
ciBhY3Rpb25QYXJhbSkKLXsKLSAgICBBU1NFUlQoIWNoYW5nZWRDb29raWUtPmlzU2Vzc2lvbigp
KTsKLSAgICBDb29raWVBY3Rpb24gYWN0aW9uKGNoYW5nZWRDb29raWUsIGFjdGlvblBhcmFtKTsK
LSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7Ci0gICAgICAgIG1fY2hh
bmdlZENvb2tpZXMuYXBwZW5kKGFjdGlvbik7Ci0gICAgICAgIENvb2tpZUxvZygiQ29va2llQmFj
a2luZ1N0b3JlIC0gbV9jaGFuZ2VkY29va2llcyBoYXMgJWQuIiwgbV9jaGFuZ2VkQ29va2llcy5z
aXplKCkpOwotICAgIH0KLSAgICBzZW5kQ2hhbmdlc1RvRGF0YWJhc2Uoc19kYXRhYmFzZVRpbWVy
SW50ZXJ2YWwpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlL0Nvb2tp
ZURhdGFiYXNlQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9Db29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZS9Db29raWVEYXRhYmFz
ZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlL0Nvb2tpZURhdGFiYXNl
QmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEBwbGV5by5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlX2gK
LSNkZWZpbmUgQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmVfaAotCi0jaW5jbHVkZSAiU1FMaXRl
RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtTWVzc2FnZUNsaWVudC5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVRpbWVy
Lmg+Ci0jaW5jbHVkZSA8R2VuZXJpY1RpbWVyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8VGhyZWFkVGlt
ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgUGFyc2VkQ29va2llOwotCi1jbGFzcyBDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZSA6IHB1
YmxpYyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TWVzc2FnZUNsaWVudCAsIHB1YmxpYyBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6VGhyZWFkVGltZXJDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBD
b29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZSogY3JlYXRlKCkgeyByZXR1cm4gbmV3IENvb2tpZURh
dGFiYXNlQmFja2luZ1N0b3JlOyB9Ci0KLSAgICB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBjb29r
aWVKYXIpOwotCi0gICAgdm9pZCBpbnNlcnQoY29uc3QgUGFzc1JlZlB0cjxQYXJzZWRDb29raWU+
KTsKLSAgICB2b2lkIHVwZGF0ZShjb25zdCBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4pOwotICAg
IHZvaWQgcmVtb3ZlKGNvbnN0IFBhc3NSZWZQdHI8UGFyc2VkQ29va2llPik7Ci0KLSAgICB2b2lk
IHJlbW92ZUFsbCgpOwotCi0gICAgLy8gSWYgYSBsaW1pdCBpcyBub3Qgc2V0LCB0aGUgbWV0aG9k
IHdpbGwgcmV0dXJuIGFsbCBjb29raWVzIGluIHRoZSBkYXRhYmFzZQotICAgIHZvaWQgZ2V0Q29v
a2llc0Zyb21EYXRhYmFzZShWZWN0b3I8UmVmUHRyPFBhcnNlZENvb2tpZT4gPiYgc3RhY2tPZkNv
b2tpZXMsIHVuc2lnbmVkIGxpbWl0ID0gMCk7Ci0KLSAgICB2b2lkIG9wZW5BbmRMb2FkRGF0YWJh
c2VTeW5jaHJvbm91c2x5KGNvbnN0IFN0cmluZyYgY29va2llSmFyKTsKLSAgICB2b2lkIHNlbmRD
aGFuZ2VzVG9EYXRhYmFzZVN5bmNocm9ub3VzbHkoKTsKLQotICAgIC8vIE1lc3NhZ2VDbGllbnQg
bWV0aG9kcwotICAgIHZpcnR1YWwgdm9pZCBvblRocmVhZEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBU
aHJlYWRUaW1lckNsaWVudCBtZXRob2RzCi0gICAgdmlydHVhbCBib29sIHdpbGxGaXJlVGltZXIo
KSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHVsc2VDb2RlKCkgY29uc3Qg
eyByZXR1cm4gcHVsc2VDb2RlKCk7IH0KLSAgICB2aXJ0dWFsIGludCBnZXRDb25uZWN0aW9uSWQo
KSBjb25zdCB7IHJldHVybiBjb25uZWN0aW9uSWQoKTsgfQotICAgIHZpcnR1YWwgaW50IGRlZmF1
bHRUaW1lclByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gdGhyZWFkUHJpb3JpdHkoKTsgfQotCi1w
cml2YXRlOgotICAgIGVudW0gVXBkYXRlUGFyYW1ldGVyIHsKLSAgICAgICAgSW5zZXJ0LAotICAg
ICAgICBVcGRhdGUsCi0gICAgICAgIERlbGV0ZSwKLSAgICB9OwotCi0gICAgQ29va2llRGF0YWJh
c2VCYWNraW5nU3RvcmUoKTsKLSAgICB+Q29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUoKTsKLQot
ICAgIHZvaWQgYWRkVG9DaGFuZ2VRdWV1ZShjb25zdCBQYXNzUmVmUHRyPFBhcnNlZENvb2tpZT4g
Y2hhbmdlZENvb2tpZSwgVXBkYXRlUGFyYW1ldGVyIGFjdGlvblBhcmFtKTsKLSAgICB2b2lkIHNl
bmRDaGFuZ2VzVG9EYXRhYmFzZShpbnQgaW50ZXJ2YWwpOwotICAgIHZvaWQgc2VuZENoYW5nZXNU
b0RhdGFiYXNlVGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBpbnZva2VPcGVuKGNvbnN0IFN0cmlu
ZyYgY29va2llSmFyKTsKLSAgICB2b2lkIGludm9rZVJlbW92ZUFsbCgpOwotICAgIFZlY3RvcjxS
ZWZQdHI8UGFyc2VkQ29va2llPiA+KiBpbnZva2VHZXRDb29raWVzV2l0aExpbWl0KHVuc2lnbmVk
IGxpbWl0KTsKLSAgICB2b2lkIGludm9rZVNlbmRDaGFuZ2VzVG9EYXRhYmFzZSgpOwotCi0gICAg
dm9pZCBjbG9zZSgpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgUmVmUHRyPFBhcnNl
ZENvb2tpZT4sIFVwZGF0ZVBhcmFtZXRlcj4gQ29va2llQWN0aW9uOwotICAgIFZlY3RvcjxDb29r
aWVBY3Rpb24+IG1fY2hhbmdlZENvb2tpZXM7Ci0gICAgTXV0ZXggbV9tdXRleDsKLQotICAgIFN0
cmluZyBtX3RhYmxlTmFtZTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VGltZXI8Q29va2ll
RGF0YWJhc2VCYWNraW5nU3RvcmU+IG1fZGJUaW1lcjsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R2VuZXJpY1RpbWVyQ2xpZW50KiBtX2RiVGltZXJDbGllbnQ7Ci0gICAgU1FMaXRlRGF0YWJh
c2UgbV9kYjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgKm1faW5zZXJ0U3RhdGVtZW50OwotICAgIFNR
TGl0ZVN0YXRlbWVudCAqbV91cGRhdGVTdGF0ZW1lbnQ7Ci0gICAgU1FMaXRlU3RhdGVtZW50ICpt
X2RlbGV0ZVN0YXRlbWVudDsKLX07Ci0KLUNvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlJiBjb29r
aWVCYWNraW5nU3RvcmUoKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
Q29va2llRGF0YWJhc2VCYWNraW5nU3RvcmVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52
YXNMYXllcldlYktpdFRocmVhZC5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDYW52YXNMYXllcldlYktpdFRocmVhZC5oIgotCi0jaW5jbHVkZSAiTGF5ZXJDb21w
b3NpdGluZ1RocmVhZC5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtR0xFUzJQcm9ncmFtLmg+Ci0KLXVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6R0xFUzJQcm9ncmFtOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQ2FudmFzTGF5
ZXJXZWJLaXRUaHJlYWQ6OmRlbGV0ZVRleHR1cmVzKCkKLXsKLX0KLQotY2xhc3MgQ2FudmFzTGF5
ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCA6IHB1YmxpYyBMYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiwgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFNpemUm
KTsKLQotICAgIHZvaWQgbGF5ZXJDb21wb3NpdGluZ1RocmVhZERlc3Ryb3llZChMYXllckNvbXBv
c2l0aW5nVGhyZWFkKikgeyB9Ci0gICAgdm9pZCBsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqLCBib29sKSB7IH0KLSAgICB2b2lkIHVwbG9hZFRleHR1cmVzSWZO
ZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopIHsgfQotCi0gICAgdm9pZCBkcmF3VGV4dHVy
ZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNvbnN0IEdMRVMyUHJvZ3JhbSYsIGRvdWJsZSBz
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCk7Ci0gICAgdm9pZCBkZWxldGVUZXh0dXJl
cyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0KLSAgICB2b2lkIGNvbW1pdFBlbmRpbmdUZXh0
dXJlVXBsb2FkcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0KLSAgICB2b2lkIGNsZWFyQnVm
ZmVyKCkgeyBtX2J1ZmZlciA9IDA7IH0KLQotcHJpdmF0ZToKLSAgICBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogbV9idWZmZXI7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwotICAgIElu
dFNpemUgbV9zaXplOwotfTsKLQotQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6
Q2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVyLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQot
ICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBt
X3NpemUoc2l6ZSkKLXsKLX0KLQotdm9pZCBDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50OjpkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IEdM
RVMyUHJvZ3JhbSYsIGRvdWJsZSwgY29uc3QgRmxvYXRSZWN0JiAvKmNsaXBSZWN0Ki8pCi17Ci0g
ICAgaWYgKCFtX2J1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggZHQgPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOwotICAgIGR0LnRyYW5zbGF0ZSgtbGF5
ZXItPmJvdW5kcygpLndpZHRoKCkgLyAyLjAsIC1sYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkgLyAy
LjApOwotICAgIGR0LnNjYWxlTm9uVW5pZm9ybShzdGF0aWNfY2FzdDxkb3VibGU+KGxheWVyLT5i
b3VuZHMoKS53aWR0aCgpKSAvIG1fc2l6ZS53aWR0aCgpLCBzdGF0aWNfY2FzdDxkb3VibGU+KGxh
eWVyLT5ib3VuZHMoKS5oZWlnaHQoKSkgLyBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGJsaXRUb0J1
ZmZlcigwLCBtX2J1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmPihkdCksCi0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczo6U291cmNlT3Zlciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obGF5ZXIt
PmRyYXdPcGFjaXR5KCkgKiAyNTUpKTsKLX0KLQotdm9pZCBDYW52YXNMYXllckNvbXBvc2l0aW5n
VGhyZWFkQ2xpZW50OjpkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKLXsK
LSAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUsIHRoZSBidWZmZXIgaXMgbm90IG93bmVkIGJ5IHVz
LgotfQotCi12b2lkIENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmNvbW1pdFBl
bmRpbmdUZXh0dXJlVXBsb2FkcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKLXsKLSAgICBpZiAo
IW1fYnVmZmVyIHx8ICFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoaXMg
bWV0aG9kIGlzIGNhbGxlZCBkdXJpbmcgYSBzeW5jaHJvbml6YXRpb24gcG9pbnQgYmV0d2VlbiBX
ZWJLaXQgYW5kIGNvbXBvc2l0aW5nIHRocmVhZC4KLSAgICAvLyBUaGlzIGlzIG91ciBvbmx5IGNo
YW5jZSB0byB0cmFuc2ZlciB0aGUgYmFjayBkaXNwbGF5IGxpc3QgdG8gdGhlIGZyb250IGRpc3Bs
YXkgbGlzdCB3aXRob3V0Ci0gICAgLy8gcmFjZSBjb25kaXRpb25zLgotICAgIC8vIDEuIEZsdXNo
IGJhY2sgZGlzcGxheSBsaXN0IHRvIGZyb250Ci0gICAgbV9jb250ZXh0LT5mbHVzaCgpOwotICAg
IC8vIDIuIERyYXcgZnJvbnQgZGlzcGxheSBsaXN0IHRvIEZCTwotICAgIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6dXBkYXRlQnVmZmVyQmFja2luZ1N1cmZhY2UobV9idWZmZXIpOwot
fQotCi0KLUNhbnZhc0xheWVyV2ViS2l0VGhyZWFkOjpDYW52YXNMYXllcldlYktpdFRocmVhZChC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVyLCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRTaXplJiBzaXplKQotICAgIDogTGF5ZXJXZWJLaXRUaHJlYWQoQ2FudmFzTGF5ZXIs
IDApCi17Ci0gICAgbV9jb21wb3NpdGluZ1RocmVhZENsaWVudCA9IG5ldyBDYW52YXNMYXllckNv
bXBvc2l0aW5nVGhyZWFkQ2xpZW50KGJ1ZmZlciwgY29udGV4dCwgc2l6ZSk7Ci0gICAgbGF5ZXJD
b21wb3NpdGluZ1RocmVhZCgpLT5zZXRDbGllbnQobV9jb21wb3NpdGluZ1RocmVhZENsaWVudCk7
Ci19Ci0KLUNhbnZhc0xheWVyV2ViS2l0VGhyZWFkOjp+Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQo
KQotewotICAgIGxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKS0+c2V0Q2xpZW50KDApOwotICAgIGRl
bGV0ZSBtX2NvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OwotfQotCi12b2lkIENhbnZhc0xheWVyV2Vi
S2l0VGhyZWFkOjpjbGVhckJ1ZmZlcihDYW52YXNMYXllcldlYktpdFRocmVhZCogbGF5ZXIpCi17
Ci0gICAgbGF5ZXItPm1fY29tcG9zaXRpbmdUaHJlYWRDbGllbnQtPmNsZWFyQnVmZmVyKCk7Ci19
Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVy
V2ViS2l0VGhyZWFkLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
LCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWRfaAot
I2RlZmluZSBDYW52YXNMYXllcldlYktpdFRocmVhZF9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0KLSNpbmNsdWRl
ICJFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkLmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1HcmFwaGljcy5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhbnZhc0xheWVyQ29tcG9z
aXRpbmdUaHJlYWRDbGllbnQ7Ci0KLWNsYXNzIENhbnZhc0xheWVyV2ViS2l0VGhyZWFkIDogcHVi
bGljIExheWVyV2ViS2l0VGhyZWFkIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
YW52YXNMYXllcldlYktpdFRocmVhZD4gY3JlYXRlKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6QnVmZmVyKiBidWZmZXIsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc0xheWVyV2ViS2l0VGhyZWFkKGJ1
ZmZlciwgY29udGV4dCwgc2l6ZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgfkNhbnZhc0xheWVy
V2ViS2l0VGhyZWFkKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBjbGVhckJ1ZmZlcihDYW52YXNMYXll
cldlYktpdFRocmVhZCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRl
eHR1cmVzKCk7Ci0KLXByaXZhdGU6Ci0gICAgQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50U2l6ZSYpOwotICAg
IENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQqIG1fY29tcG9zaXRpbmdUaHJlYWRD
bGllbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0K
LSNlbmRpZiAvLyBDYW52YXNMYXllcldlYktpdFRocmVhZF9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Rpc3BsYXlSZWZyZXNoTW9uaXRvckJsYWNr
QmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvRGlzcGxheVJlZnJlc2hNb25pdG9yQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9u
IDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
RGlzcGxheVJlZnJlc2hNb25pdG9yQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
X0RJU1BMQVlfTU9OSVRPUikKLQotI2luY2x1ZGUgIkRpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgot
Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEaXNwbGF5QW5pbWF0aW9uQ2xpZW50
IDogcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpBbmltYXRpb25GcmFtZVJhdGVDbGllbnQg
ewotcHVibGljOgotICAgIERpc3BsYXlBbmltYXRpb25DbGllbnQoRGlzcGxheVJlZnJlc2hNb25p
dG9yICopOwotICAgIH5EaXNwbGF5QW5pbWF0aW9uQ2xpZW50KCkgeyB9Ci1wcml2YXRlOgotICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRpb25GcmFtZUNoYW5nZWQoKTsKLSAgICBEaXNwbGF5UmVmcmVz
aE1vbml0b3IqIG1fbW9uaXRvcjsKLX07Ci0KLURpc3BsYXlBbmltYXRpb25DbGllbnQ6OkRpc3Bs
YXlBbmltYXRpb25DbGllbnQoRGlzcGxheVJlZnJlc2hNb25pdG9yICptb25pdG9yKQotICAgIDog
bV9tb25pdG9yKG1vbml0b3IpCi17Ci19Ci0KLXZvaWQgRGlzcGxheUFuaW1hdGlvbkNsaWVudDo6
YW5pbWF0aW9uRnJhbWVDaGFuZ2VkKCkKLXsKLSAgICBtX21vbml0b3ItPmRpc3BsYXlMaW5rRmly
ZWQoKTsKLX0KLQotRGlzcGxheVJlZnJlc2hNb25pdG9yOjp+RGlzcGxheVJlZnJlc2hNb25pdG9y
KCkKLXsKLSAgICBzdG9wQW5pbWF0aW9uQ2xpZW50KCk7Ci0gICAgY2FuY2VsQ2FsbE9uTWFpblRo
cmVhZChEaXNwbGF5UmVmcmVzaE1vbml0b3I6OmhhbmRsZURpc3BsYXlSZWZyZXNoZWROb3RpZmlj
YXRpb25Pbk1haW5UaHJlYWQsIHRoaXMpOwotfQotCi12b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRv
cjo6c3RhcnRBbmltYXRpb25DbGllbnQoKQotewotICAgIGlmIChtX2FuaW1hdGlvbkNsaWVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hbmltYXRpb25DbGllbnQgPSBuZXcgRGlzcGxheUFu
aW1hdGlvbkNsaWVudCh0aGlzKTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6QW5pbWF0aW9u
RnJhbWVSYXRlQ29udHJvbGxlcjo6aW5zdGFuY2UoKS0+YWRkQ2xpZW50KG1fYW5pbWF0aW9uQ2xp
ZW50KTsKLX0KLQotdm9pZCBEaXNwbGF5UmVmcmVzaE1vbml0b3I6OnN0b3BBbmltYXRpb25DbGll
bnQoKQotewotICAgIGlmICghbV9hbmltYXRpb25DbGllbnQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpBbmltYXRpb25GcmFtZVJhdGVDb250cm9sbGVyOjpp
bnN0YW5jZSgpLT5yZW1vdmVDbGllbnQobV9hbmltYXRpb25DbGllbnQpOwotICAgIGRlbGV0ZSBt
X2FuaW1hdGlvbkNsaWVudDsKLSAgICBtX2FuaW1hdGlvbkNsaWVudCA9IDA7Ci19Ci0KLWJvb2wg
RGlzcGxheVJlZnJlc2hNb25pdG9yOjpyZXF1ZXN0UmVmcmVzaENhbGxiYWNrKCkKLXsKLSAgICBN
dXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotCi0gICAgc3RhcnRBbmltYXRpb25DbGllbnQoKTsK
LQotICAgIG1fc2NoZWR1bGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBE
aXNwbGF5UmVmcmVzaE1vbml0b3I6OmRpc3BsYXlMaW5rRmlyZWQoKQotewotICAgIGlmICghbV9t
dXRleC50cnlMb2NrKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wcmV2aW91c0Zy
YW1lRG9uZSkgewotICAgICAgICBtX211dGV4LnVubG9jaygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9wcmV2aW91c0ZyYW1lRG9uZSA9IGZhbHNlOwotCi0gICAgbV9tb25vdG9u
aWNBbmltYXRpb25TdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKLQot
ICAgIGNhbGxPbk1haW5UaHJlYWQoaGFuZGxlRGlzcGxheVJlZnJlc2hlZE5vdGlmaWNhdGlvbk9u
TWFpblRocmVhZCwgdGhpcyk7Ci0gICAgbV9tdXRleC51bmxvY2soKTsKLX0KLQotfQotCi0jZW5k
aWYgLy8gVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2luZ0J1ZmZl
ckJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvRHJhd2luZ0J1ZmZlckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAx
NjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Ry
YXdpbmdCdWZmZXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRHJh
d2luZ0J1ZmZlci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNsdWRlICJMYXllcldlYktpdFRocmVhZC5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IERyYXdpbmdCdWZmZXJJ
bnRlcm5hbCB7Ci0gICAgdW5zaWduZWQgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlOwotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IHBs
YXRmb3JtTGF5ZXI7Ci0jZW5kaWYKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9y
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
LXsKLSAgICB1bnNpZ25lZCBvZmZzY3JlZW5Db2xvclRleHR1cmUgPSBjb250ZXh0LT5jcmVhdGVU
ZXh0dXJlKCk7Ci0gICAgaWYgKCFvZmZzY3JlZW5Db2xvclRleHR1cmUpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7Ci0gICAgY29udGV4dC0+dGV4UGFyYW1ldGVy
aShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOwotICAgIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsK
LSAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFKTsKLSAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwotICAgIGNvbnRleHQtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCAwKTsKLSAgICByZXR1cm4gb2Zmc2NyZWVuQ29sb3JU
ZXh0dXJlOwotfQotCi1EcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fZmJvKGNvbnRleHQtPmNyZWF0ZUZyYW1l
YnVmZmVyKCkpCi17Ci0gICAgbV9pbnRlcm5hbCA9IGFkb3B0UHRyKG5ldyBEcmF3aW5nQnVmZmVy
SW50ZXJuYWwpOwotCi0gICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9y
VGV4dHVyZSA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKGNvbnRleHQsIHNpemUpOwotfQotCi1EcmF3
aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigpCi17Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVy
ZShtX2ludGVybmFsLT5vZmZzY3JlZW5Db2xvclRleHR1cmUpOwotCi0gICAgY2xlYXIoKTsKLX0K
LQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLXZvaWQgRHJhd2luZ0J1ZmZlcjo6
cHVibGlzaFRvUGxhdGZvcm1MYXllcigpCi17Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2NhbGxiYWNrKQotICAgICAgICBtX2NhbGxiYWNrLT53aWxs
UHVibGlzaCgpOwotCi0gICAgLy8gRklYTUU6IFdlIGRvIHRoZSBjb3B5IGluIHRoZSBjYW52YXMn
IChjaGlsZCkgY29udGV4dCBzbyB0aGF0IGl0IGV4ZWN1dGVzIGluIHRoZSBjb3JyZWN0IG9yZGVy
IHJlbGF0aXZlIHRvCi0gICAgLy8gb3RoZXIgY29tbWFuZHMgaW4gdGhlIGNoaWxkIGNvbnRleHQu
IFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwYXJlbnQgdGV4dHVyZSBhbHdheXMgY29udGFpbnMgYSBj
b21wbGV0ZQotICAgIC8vIGZyYW1lIGFuZCBub3Qgc29tZSBpbnRlcm1lZGlhdGUgcmVzdWx0LiBI
b3dldmVyLCB0aGVyZSBpcyBubyBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIHRoYXQgdGhpcyBj
b3B5Ci0gICAgLy8gaGFwcGVucyBiZWZvcmUgdGhlIGNvbXBvc2l0b3IgZHJhd3MuIFRoaXMgbWVh
bnMgd2UgbWlnaHQgZHJhdyBzdGFsZSBmcmFtZXMgc29tZXRpbWVzLiBJZGVhbGx5IHRoaXMKLSAg
ICAvLyB3b3VsZCBpbnNlcnQgYSBmZW5jZSBpbnRvIHRoZSBjaGlsZCBjb21tYW5kIHN0cmVhbSB0
aGF0IHRoZSBjb21wb3NpdG9yIGNvdWxkIHdhaXQgZm9yLgotICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgbV9jb250ZXh0LT5mbHVzaCgpOwotfQotI2VuZGlmCi0KLWJv
b2wgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICBp
ZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fc2l6ZSA9
PSBuZXdTaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3NpemUgPSBuZXdTaXpl
OwotCi0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgbV9pbnRlcm5hbC0+b2Zmc2NyZWVuQ29sb3JUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQt
PnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci1QbGF0Zm9ybUxheWVyKiBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkKLXsKLSAgICBy
ZXR1cm4gbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllci5nZXQoKTsKLX0KLSNlbmRpZgotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9F
R0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuY3BwCShyZXZpc2lvbiAxNjE1OTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdl
TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50LmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJM
YXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xF
UzJQcm9ncmFtLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJTaGFyZWRUZXh0
dXJlLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KLSNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jaW5jbHVk
ZSA8RUdML2VnbGV4dC5oPgotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPEdMRVMy
L2dsMmV4dC5oPgotCi11c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudDo6fkVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCgpCi17Ci0g
ICAgLy8gU29tZW9uZSBzaG91bGQgaGF2ZSBjYWxsZWQgZGVsZXRlVGV4dHVyZXMoKSBieSBub3cK
LSAgICBBU1NFUlQoIW1fdGV4dHVyZUFjY2Vzc29yKTsKLX0KLQotdm9pZCBFR0xJbWFnZUxheWVy
Q29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCopCi17Ci19Ci0KLXZvaWQgRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50OjpkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNv
bnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSwgZG91YmxlIC8qc2NhbGUqLywgY29uc3QgRmxvYXRS
ZWN0JiAvKmNsaXBSZWN0Ki8pCi17Ci0gICAgaWYgKCFtX3RleHR1cmVBY2Nlc3NvciB8fCAhbV90
ZXh0dXJlQWNjZXNzb3ItPnRleHR1cmVJRCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnbEVu
YWJsZShHTF9CTEVORCk7Ci0gICAgZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JD
X0FMUEhBKTsKLSAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS5tX3Byb2dyYW0pOwotICAgIGdsVW5p
Zm9ybTFmKHByb2dyYW0ub3BhY2l0eUxvY2F0aW9uKCksIGxheWVyLT5kcmF3T3BhY2l0eSgpKTsK
LSAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCksIDIs
IEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkuZGF0YSgp
KTsKLSAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS50ZXhDb29yZExvY2F0aW9uKCks
IDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgbGF5ZXItPnRleHR1cmVDb29yZGluYXRlcyhMYXll
ckNvbXBvc2l0aW5nVGhyZWFkOjpVcHNpZGVEb3duKS5kYXRhKCkpOwotICAgIGdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlQWNjZXNzb3ItPnRleHR1cmVJRCgpKTsKLSAgICBn
bERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCBsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMo
KS5zaXplKCkpOwotfQotCi12b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVu
dDo6ZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCi17Ci0gICAgZGVsZXRl
IG1fdGV4dHVyZUFjY2Vzc29yOwotICAgIG1fdGV4dHVyZUFjY2Vzc29yID0gMDsKLX0KLQotdm9p
ZCBFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmJpbmRDb250ZW50c1RleHR1
cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCi17Ci0gICAgaWYgKG1fdGV4dHVyZUFjY2Vzc29y
KQotICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUFjY2Vzc29y
LT50ZXh0dXJlSUQoKSk7Ci19Ci0KLXZvaWQgRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50OjpzZXRUZXh0dXJlQWNjZXNzb3IoR0xFUzJTaGFyZWRUZXh0dXJlQWNjZXNzb3IqIHRl
eHR1cmVBY2Nlc3NvcikKLXsKLSAgICBpZiAobV90ZXh0dXJlQWNjZXNzb3IgPT0gdGV4dHVyZUFj
Y2Vzc29yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZWxldGUgbV90ZXh0dXJlQWNjZXNzb3I7
Ci0gICAgbV90ZXh0dXJlQWNjZXNzb3IgPSB0ZXh0dXJlQWNjZXNzb3I7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1h
Z2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRp
bmdUaHJlYWRDbGllbnQuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5n
VGhyZWFkQ2xpZW50X2gKLSNkZWZpbmUgRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50X2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkxh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KLQotbmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFBsYXRmb3JtIHsK
LW5hbWVzcGFjZSBHcmFwaGljcyB7Ci1jbGFzcyBHTEVTMlNoYXJlZFRleHR1cmVBY2Nlc3NvcjsK
LX0KLX0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMYXllckNvbXBvc2l0aW5n
VGhyZWFkOwotCi1jbGFzcyBFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50PiwgcHVibGljIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVu
dD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRUdMSW1hZ2VM
YXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgfkVH
TEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCgpOwotCi0gICAgdmlydHVhbCB2b2lk
IGxheWVyQ29tcG9zaXRpbmdUaHJlYWREZXN0cm95ZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCop
Ci0gICAgewotICAgICAgICBkZXJlZigpOyAvLyBNYXRjaGVkIGJ5IHJlZigpIGluIGNvbnN0cnVj
dG9yCi0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGxheWVyVmlzaWJpbGl0eUNoYW5nZWQoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCosIGJvb2wgdmlzaWJsZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0gICAg
dmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mLCBkb3VibGUgc2Nh
bGUsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVU
ZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmlu
ZENvbnRlbnRzVGV4dHVyZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0KLSAgICB2b2lkIHNl
dFRleHR1cmVBY2Nlc3NvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyU2hh
cmVkVGV4dHVyZUFjY2Vzc29yKik7Ci0KLXByaXZhdGU6Ci0gICAgRUdMSW1hZ2VMYXllckNvbXBv
c2l0aW5nVGhyZWFkQ2xpZW50KCkKLSAgICAgICAgOiBtX3RleHR1cmVBY2Nlc3NvcigwKQotICAg
IHsKLSAgICAgICAgcmVmKCk7IC8vIE1hdGNoZWQgYnkgZGVyZWYoKSBpbiBsYXllckNvbXBvc2l0
aW5nVGhyZWFkRGVzdHJveWVkKCkKLSAgICB9Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OkdMRVMyU2hhcmVkVGV4dHVyZUFjY2Vzc29yKiBtX3RleHR1cmVBY2Nlc3NvcjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLQotI2VuZGlmIC8vIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0VHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllcldlYktpdFRo
cmVhZC5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEs
IDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkVHTElt
YWdlTGF5ZXJXZWJLaXRUaHJlYWQuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLQotI2luY2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKLSNpbmNsdWRlICJMYXll
clJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMkNvbnRleHRTdGF0ZS5oPgotI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybUdMRVMyU2hhcmVkVGV4dHVyZS5oPgotI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+
Ci0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KLSNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1FR0xJbWFnZUxheWVyV2ViS2l0VGhy
ZWFkOjpFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkKExheWVyVHlwZSB0eXBlKQotICAgIDogTGF5
ZXJXZWJLaXRUaHJlYWQodHlwZSwgMCkKLSAgICAsIG1fY2xpZW50KEVHTEltYWdlTGF5ZXJDb21w
b3NpdGluZ1RocmVhZENsaWVudDo6Y3JlYXRlKCkpCi0gICAgLCBtX25lZWRzRGlzcGxheShmYWxz
ZSkKLSAgICAsIG1fcHJvZ3JhbSgwKQotICAgICwgbV90ZXh0dXJlKDApCi0gICAgLCBtX3RleHR1
cmVBY2Nlc3NvcigwKQotewotICAgIGxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKS0+c2V0Q2xpZW50
KG1fY2xpZW50LmdldCgpKTsKLX0KLQotRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6fkVHTElt
YWdlTGF5ZXJXZWJLaXRUaHJlYWQoKQotewotICAgIC8vIFRoZSBzdWJjbGFzcyBpcyByZXNwb25z
aWJsZSBmb3IgY2FsbGluZyBkZWxldGVGcm9udEJ1ZmZlcigpCi0gICAgLy8gYmVmb3JlIHdlIGdl
dCB0aGlzIGZhci4KLSAgICBBU1NFUlQoIW1fcHJvZ3JhbSk7Ci0gICAgQVNTRVJUKCFtX3RleHR1
cmUpOwotICAgIEFTU0VSVCghbV90ZXh0dXJlQWNjZXNzb3IpOwotfQotCi12b2lkIEVHTEltYWdl
TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzRGlzcGxheSgpCi17Ci0gICAgbV9uZWVkc0Rpc3Bs
YXkgPSB0cnVlOwotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQgRUdMSW1hZ2VMYXll
cldlYktpdFRocmVhZDo6dXBkYXRlRnJvbnRCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5z
aWduZWQgYmFja0J1ZmZlclRleHR1cmUpCi17Ci0gICAgaWYgKCFtX25lZWRzRGlzcGxheSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChz
aXplICE9IG1fc2l6ZSkgewotICAgICAgICAgICAgZGVsZXRlRnJvbnRCdWZmZXIoKTsKLSAgICAg
ICAgICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBtX25lZWRzRGlzcGxh
eSA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR0xlbnVtIGN1cnJlbnRB
Y3RpdmVUZXh0dXJlID0gMDsKLSAgICBnbEdldEludGVnZXJ2KEdMX0FDVElWRV9URVhUVVJFLCBy
ZWludGVycHJldF9jYXN0PEdMaW50Kj4oJmN1cnJlbnRBY3RpdmVUZXh0dXJlKSk7Ci0gICAgZ2xB
Y3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKLQotICAgIHsKLSAgICAgICAgR0xFUzJDb250ZXh0
U3RhdGU6OlRleHR1cmVBbmRGQk9TdGF0ZVNhdmVyIHRleHR1cmVBbmRGQk9TdGF0ZVNhdmVyOwot
Ci0gICAgICAgIGlmICghY3JlYXRlVGV4dHVyZUlmTmVlZGVkKHNpemUpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0KLSAgICAgICAgYmxp
dFRvRnJvbnRCdWZmZXIoYmFja0J1ZmZlclRleHR1cmUpOwotICAgIH0KLQotICAgIGdsQWN0aXZl
VGV4dHVyZShjdXJyZW50QWN0aXZlVGV4dHVyZSk7Ci19Ci0KLXZvaWQgRUdMSW1hZ2VMYXllcldl
YktpdFRocmVhZDo6ZGVsZXRlRnJvbnRCdWZmZXIoKQotewotICAgIGRlbGV0ZSBtX3RleHR1cmU7
Ci0gICAgbV90ZXh0dXJlID0gMDsKLSAgICBnbERlbGV0ZVByb2dyYW0obV9wcm9ncmFtKTsKLSAg
ICBtX3Byb2dyYW0gPSAwOwotCi0gICAgLy8gVGhlIHRleHR1cmUgYWNjZXNzb3IgaXMgaW4gb3Vy
IEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCdzIGN1c3RvZHkKLSAgICAvLyBh
dCB0aGlzIHBvaW50LCBhbmQgdGhhdCBvYmplY3QgaXMgcmVzcG9uc2libGUgZm9yIGRlbGV0aW5n
IGl0LgotICAgIG1fdGV4dHVyZUFjY2Vzc29yID0gMDsKLQotICAgIC8vIElmIGFueW9uZSB0cmll
cyB0byByZW5kZXIgdXMgYWZ0ZXIgdGhpcywgd2UncmUgY2VydGFpbmx5IGdvaW5nIHRvIG5lZWQg
ZGlzcGxheS4KLSAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7Ci19Ci0KLXZvaWQgRUdMSW1hZ2VM
YXllcldlYktpdFRocmVhZDo6Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCkKLXsKLSAgICAv
LyBUaGlzIGNhbGwgaXMgc2VyaWFsaXplZCB3aXRoIHRoZSBjb21wb3NpdGluZyB0aHJlYWQsIHNv
IGl0J3Mgc2FmZSB0byB1cGRhdGUgdGhlCi0gICAgLy8gaW1hZ2UgYW5kIGRlc3Ryb3kgYW55IG9s
ZCBpbWFnZXMuCi0KLSAgICBtX2NsaWVudC0+c2V0VGV4dHVyZUFjY2Vzc29yKG1fdGV4dHVyZUFj
Y2Vzc29yKTsKLX0KLQotYm9vbCBFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkOjpjcmVhdGVUZXh0
dXJlSWZOZWVkZWQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoIW1fdGV4dHVyZSB8
fCBzaXplICE9IG1fc2l6ZSkgewotICAgICAgICBkZWxldGUgbV90ZXh0dXJlOwotICAgICAgICBt
X3RleHR1cmUgPSBuZXcgR0xFUzJTaGFyZWRUZXh0dXJlKHNpemUpOwotICAgICAgICBpZiAoIW1f
dGV4dHVyZS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBkZWxldGUgbV90ZXh0dXJlOwotICAg
ICAgICAgICAgbV90ZXh0dXJlID0gMDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1fdGV4dHVyZUFjY2Vzc29yID0gbV90ZXh0dXJlLT5jcmVhdGVUZXh0
dXJlQWNjZXNzb3IoKTsKLQotICAgICAgICBtX3NpemUgPSBzaXplOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZVNo
YWRlcklmTmVlZGVkKCkKLXsKLSAgICAvLyBTaGFkZXJzIGZvciBkcmF3aW5nIHRoZSBsYXllciBj
b250ZW50cy4KLSAgICBzdGF0aWMgY2hhciB2ZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9Ci0gICAgICAg
ICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgotICAgICAgICAiYXR0cmlidXRlIHZl
YzIgYV90ZXhDb29yZDsgICBcbiIKLSAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAg
ICAgXG4iCi0gICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgotICAgICAg
ICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgIiAgZ2xfUG9zaXRp
b24gPSBhX3Bvc2l0aW9uOyAgXG4iCi0gICAgICAgICIgIHZfdGV4Q29vcmQgPSBhX3RleENvb3Jk
OyAgIFxuIgotICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7Ci0KLSAg
ICBzdGF0aWMgY2hhciBmcmFnbWVudFNoYWRlclN0cmluZ1JHQkFbXSA9Ci0gICAgICAgICJ2YXJ5
aW5nIG1lZGl1bXAgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAg
ICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgIFxu
IgotICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCi0gICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKLSAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHNf
dGV4dHVyZSwgdl90ZXhDb29yZCk7IFxuIgotICAgICAgICAifSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwotCi0gICAgaWYgKCFtX3Byb2dyYW0p
IHsKLSAgICAgICAgbV9wcm9ncmFtID0gTGF5ZXJSZW5kZXJlcjo6bG9hZFNoYWRlclByb2dyYW0o
dmVydGV4U2hhZGVyU3RyaW5nLCBmcmFnbWVudFNoYWRlclN0cmluZ1JHQkEpOwotICAgICAgICBp
ZiAoIW1fcHJvZ3JhbSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZ2xCaW5kQXR0cmli
TG9jYXRpb24obV9wcm9ncmFtLCBHTEVTMlByb2dyYW06OlBvc2l0aW9uQXR0cmlidXRlSW5kZXgs
ICJhX3Bvc2l0aW9uIik7Ci0gICAgICAgIGdsQmluZEF0dHJpYkxvY2F0aW9uKG1fcHJvZ3JhbSwg
R0xFUzJQcm9ncmFtOjpUZXhDb29yZEF0dHJpYnV0ZUluZGV4LCAiYV90ZXhDb29yZCIpOwotICAg
ICAgICBnbExpbmtQcm9ncmFtKG1fcHJvZ3JhbSk7Ci0gICAgICAgIHVuc2lnbmVkIHNhbXBsZXJM
b2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fcHJvZ3JhbSwgInNfdGV4dHVyZSIpOwot
ICAgICAgICBnbFVzZVByb2dyYW0obV9wcm9ncmFtKTsKLSAgICAgICAgZ2xVbmlmb3JtMWkoc2Ft
cGxlckxvY2F0aW9uLCAwKTsKLSAgICB9Ci19Ci0KLXZvaWQgRUdMSW1hZ2VMYXllcldlYktpdFRo
cmVhZDo6YmxpdFRvRnJvbnRCdWZmZXIodW5zaWduZWQgYmFja0J1ZmZlclRleHR1cmUpCi17Ci0g
ICAgaWYgKCFiYWNrQnVmZmVyVGV4dHVyZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR0xFUzJD
b250ZXh0U3RhdGU6OlByb2dyYW1TdGF0ZVNhdmVyIHByb2dyYW1TdGF0ZVNhdmVyOwotCi0gICAg
Y3JlYXRlU2hhZGVySWZOZWVkZWQoKTsKLQotICAgIEdMRVMyQ29udGV4dFN0YXRlOjpCdWZmZXJC
aW5kaW5nU2F2ZXIgYnVmZmVyQmluZGluZ1NhdmVyOwotICAgIEdMRVMyQ29udGV4dFN0YXRlOjpW
aWV3cG9ydFNhdmVyIHZpZXdwb3J0U2F2ZXI7Ci0gICAgR0xFUzJDb250ZXh0U3RhdGU6Okdsb2Jh
bEZsYWdTdGF0ZVNhdmVyIGZsYWdTdGF0ZVNhdmVyKEdMRVMyQ29udGV4dFN0YXRlOjpHbG9iYWxG
bGFnU3RhdGU6OkRvbnRSZXN0b3JlQmxlbmRGdW5jKTsKLQotICAgIGdsRGlzYWJsZShHTF9ERVBU
SF9URVNUKTsKLSAgICBnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKTsKLSAgICBnbERpc2FibGUo
R0xfU0NJU1NPUl9URVNUKTsKLSAgICBnbERpc2FibGUoR0xfQ1VMTF9GQUNFKTsKLSAgICBnbERp
c2FibGUoR0xfQkxFTkQpOwotCi0gICAgZ2xWaWV3cG9ydCgwLCAwLCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpKTsKLSAgICBtYWtlQnVmZmVyQ3VycmVudChtX3RleHR1cmUtPmJ1ZmZl
cigpLCBHTEVTMik7Ci0gICAgZ2xVc2VQcm9ncmFtKG1fcHJvZ3JhbSk7Ci0gICAgZ2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCBiYWNrQnVmZmVyVGV4dHVyZSk7Ci0gICAgZ2xDb2xvck1hc2so
dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0KLSAgICB7Ci0gICAgICAgIEdMRVMyQ29udGV4dFN0
YXRlOjpWZXJ0ZXhBdHRyaWJ1dGVTdGF0ZVNhdmVyIHZlcnRleEF0dHJpYlN0YXRlU2F2ZXI7Ci0g
ICAgICAgIEdMRVMyQ29udGV4dFN0YXRlOjpWZXJ0ZXhBcnJheU9FU1N0YXRlU2F2ZXIgdmVydGV4
QXJyYXlPRVNTdGF0ZVNhdmVyOwotCi0gICAgICAgIHN0YXRpYyBmbG9hdCB0ZXhjb29yZHNbNCAq
IDJdID0geyAwLCAwLCAgMCwgMSwgIDEsIDEsICAxLCAwIH07Ci0gICAgICAgIHN0YXRpYyBmbG9h
dCB2ZXJ0aWNlc1tdID0geyAtMSwgLTEsIC0xLCAxLCAxLCAxLCAxLCAtMSB9OwotICAgICAgICBn
bEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKTsKLSAgICAgICAgZ2xCaW5kQnVmZmVyKEdM
X0VMRU1FTlRfQVJSQVlfQlVGRkVSLCAwKTsKLSAgICAgICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShHTEVTMlByb2dyYW06OlBvc2l0aW9uQXR0cmlidXRlSW5kZXgpOwotICAgICAgICBnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KEdMRVMyUHJvZ3JhbTo6VGV4Q29vcmRBdHRyaWJ1dGVJbmRl
eCk7Ci0gICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihHTEVTMlByb2dyYW06OlBvc2l0aW9u
QXR0cmlidXRlSW5kZXgsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdmVydGljZXMpOwotICAg
ICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIoR0xFUzJQcm9ncmFtOjpUZXhDb29yZEF0dHJpYnV0
ZUluZGV4LCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7Ci0gICAgICAgIGds
RHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwotCi0gICAgICAgIC8vIElmIHdlIGRv
bid0IGZsdXNoLCB0aGUgRUdMSW1hZ2UgbWF5IG5ldmVyIHVwZGF0ZSBpdHMgYXBwZWFyYW5jZQot
ICAgICAgICBnbEZsdXNoKCk7Ci0KLSAgICAgICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
R0xFUzJQcm9ncmFtOjpQb3NpdGlvbkF0dHJpYnV0ZUluZGV4KTsKLSAgICAgICAgZ2xEaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoR0xFUzJQcm9ncmFtOjpUZXhDb29yZEF0dHJpYnV0ZUluZGV4KTsK
LSAgICB9Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
RUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJXZWJLaXRU
aHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgRUdMSW1hZ2VMYXll
cldlYktpdFRocmVhZF9oCi0jZGVmaW5lIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWRfaAotCi0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiRUdMSW1hZ2VMYXll
ckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgiCi0jaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQu
aCIKLQotbmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFBsYXRmb3JtIHsKLW5hbWVz
cGFjZSBHcmFwaGljcyB7Ci1jbGFzcyBHTEVTMlNoYXJlZFRleHR1cmU7Ci1jbGFzcyBHTEVTMlNo
YXJlZFRleHR1cmVBY2Nlc3NvcjsKLX0KLX0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0v
LyBCYXNlIGNsYXNzIGZvciBFR0xJbWFnZSBiYXNlZCBsYXllcnMKLS8vIFRoZSBzdWJjbGFzcyBt
dXN0IHJlaW1wbGVtZW50IHVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCkgdG8gY2FsbCB1
cGRhdGVGcm9udEJ1ZmZlcgotLy8gd2l0aCB0aGUgYXBwcm9wcmlhdGUgcGFyYW1ldGVycywgYW5k
IG1ha2Ugc3VyZSB0byBjYWxsIGRlbGV0ZUZyb250QnVmZmVyKCkgZnJvbSBpdHMKLS8vIGRlc3Ry
dWN0b3IuCi1jbGFzcyBFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkIDogcHVibGljIExheWVyV2Vi
S2l0VGhyZWFkIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5FR0xJbWFnZUxheWVyV2ViS2l0VGhy
ZWFkKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0KLXByb3RlY3Rl
ZDoKLSAgICBFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkKExheWVyVHlwZSk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcygpOwotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVUZXh0dXJlcygpID0gMDsKLQotICAgIC8vIFRoZSBjb250ZXh0IG11c3QgYmUgY3VycmVu
dCBiZWZvcmUgeW91IGNhbGwgYW55IG9mIHRoZXNlCi0gICAgdm9pZCB1cGRhdGVGcm9udEJ1ZmZl
cihjb25zdCBJbnRTaXplJiwgdW5zaWduZWQgYmFja0J1ZmZlclRleHR1cmUpOwotICAgIHZvaWQg
ZGVsZXRlRnJvbnRCdWZmZXIoKTsKLQotcHJpdmF0ZToKLSAgICBib29sIGNyZWF0ZVRleHR1cmVJ
Zk5lZWRlZChjb25zdCBJbnRTaXplJik7Ci0gICAgdm9pZCBjcmVhdGVTaGFkZXJJZk5lZWRlZCgp
OwotICAgIHZvaWQgYmxpdFRvRnJvbnRCdWZmZXIodW5zaWduZWQgYmFja0J1ZmZlclRleHR1cmUp
OwotCi0gICAgUmVmUHRyPEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudD4gbV9j
bGllbnQ7Ci0gICAgYm9vbCBtX25lZWRzRGlzcGxheTsKLSAgICB1bnNpZ25lZCBtX3Byb2dyYW07
Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlNoYXJlZFRleHR1cmUq
IG1fdGV4dHVyZTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyU2hh
cmVkVGV4dHVyZUFjY2Vzc29yKiBtX3RleHR1cmVBY2Nlc3NvcjsKLSAgICBJbnRTaXplIG1fc2l6
ZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQot
I2VuZGlmIC8vIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWRfaApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9GbG9hdFBvaW50QmxhY2tCZXJyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9GbG9hdFBvaW50QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRmxvYXRQb2ludEJsYWNrQmVycnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVByaW1pdGl2ZXMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpGbG9hdFBvaW50JiBwKQotICAgIDogbV94KHAueCgpKQotICAgICwg
bV95KHAueSgpKQotewotfQotCi1GbG9hdFBvaW50OjpvcGVyYXRvciBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6RmxvYXRQb2ludCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpGbG9hdFBvaW50KG1feCwgbV95KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9GbG9hdFJl
Y3RCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0Zsb2F0UmVjdEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Zsb2F0
UmVjdEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtUHJp
bWl0aXZlcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UmVjdDo6RmxvYXRSZWN0
KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBtX2xv
Y2F0aW9uKHJlY3QueCgpLCByZWN0LnkoKSkKLSAgICAsIG1fc2l6ZShyZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpCi17Ci19Ci0KLUZsb2F0UmVjdDo6b3BlcmF0b3IgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkZsb2F0UmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpGbG9hdFJlY3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKLX0KLQotRmxvYXRS
ZWN0IEZsb2F0UmVjdDo6bm9ybWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0IG5vcm1h
bGl6ZWRSZWN0ID0gKnRoaXM7Ci0KLSAgICBpZiAod2lkdGgoKSA8IDApIHsKLSAgICAgICAgbm9y
bWFsaXplZFJlY3Quc2V0WCh4KCkgKyB3aWR0aCgpKTsKLSAgICAgICAgbm9ybWFsaXplZFJlY3Qu
c2V0V2lkdGgoLXdpZHRoKCkpOwotICAgIH0KLSAgICBpZiAoaGVpZ2h0KCkgPCAwKSB7Ci0gICAg
ICAgIG5vcm1hbGl6ZWRSZWN0LnNldFkoeSgpICsgaGVpZ2h0KCkpOwotICAgICAgICBub3JtYWxp
emVkUmVjdC5zZXRIZWlnaHQoLWhlaWdodCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vcm1hbGl6
ZWRSZWN0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Zsb2F0U2l6ZUJsYWNrQmVycnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
RmxvYXRTaXplQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRmxvYXRTaXplQmxhY2tCZXJyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXpl
LmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1QcmltaXRpdmVzLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotRmxvYXRTaXplOjpGbG9hdFNpemUoY29uc3QgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkZsb2F0U2l6ZSYgc2l6ZSkKLSAgICA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKQot
ICAgICwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKLXsKLX0KLQotRmxvYXRTaXplOjpvcGVyYXRv
ciBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0U2l6ZShtX3dpZHRoLCBtX2hlaWdodCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvRm9udEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9udEJsYWNrQmVycnkuY3Bw
CShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0ZvbnRCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCi0jaW5j
bHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLQotI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oPgotCi0jaW5jbHVkZSA8ZnNfYXBpLmg+
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotc3RhdGljIGlubGluZSBmbG9hdCBGU0Zp
eGVkVG9GbG9hdChGU19GSVhFRCBuKSB7IHJldHVybiBuIC8gNjU1MzYuMDsgfQotc3RhdGljIGlu
bGluZSBGU19GSVhFRCBGbG9hdFRvRlNGaXhlZChmbG9hdCBuKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGU19GSVhFRD4obiAqIDY1NTM2KTsgfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWZsb2F0
IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0Ci17Ci0gICAgaWYgKCFydW4ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
R2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7Ci0gICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMs
IHJ1bik7Ci0gICAgc2hhcGVyLnNldERyYXdSYW5nZShmcm9tLCB0byk7Ci0gICAgaWYgKCFzaGFw
ZXIuc2hhcGUoJmdseXBoQnVmZmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZsb2F0UG9pbnQg
YWRqdXN0ZWRQb2ludCA9IHNoYXBlci5hZGp1c3RTdGFydFBvaW50KHBvaW50KTsKLSAgICBmbG9h
dCBzdGFydFggPSBhZGp1c3RlZFBvaW50LngoKTsKLQotICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250
ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBhZGp1c3RlZFBvaW50KTsKLSAgICByZXR1cm4gYWRqdXN0
ZWRQb2ludC54KCkgLSBzdGFydFg7Ci19Ci0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogLyogZmFsbGJhY2tGb250cyAqLywgR2x5cGhPdmVyZmxvdyogLyogZ2x5cGhPdmVyZmxvdyAq
LykgY29uc3QKLXsKLSAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKLSAgICBp
ZiAoIXNoYXBlci5zaGFwZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc2hhcGVy
LnRvdGFsV2lkdGgoKTsKLX0KLQotLy8gUmV0dXJuIHRoZSBjb2RlIHBvaW50IGluZGV4IGZvciB0
aGUgZ2l2ZW4gfHh8IG9mZnNldCBpbnRvIHRoZSB0ZXh0IHJ1bi4KLWludCBGb250OjpvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRp
b24sIGJvb2wpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3Qg
YSBwcm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZs
b2F0aW5nLXBvaW50IG51bWJlcnMKLSAgICAvLyB0byBGb250OjpvZmZzZXRGb3JQb3NpdGlvbigp
LiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80MDY3MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxl
bS4KLSAgICBpbnQgdGFyZ2V0WCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pOwotCi0gICAg
SGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7Ci0gICAgaWYgKCFzaGFwZXIuc2hhcGUo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHNoYXBlci5vZmZzZXRGb3JQb3NpdGlv
bih0YXJnZXRYKTsKLX0KLQotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVp
Z2h0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBl
cih0aGlzLCBydW4pOwotICAgIGlmICghc2hhcGVyLnNoYXBlKCkpCi0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKLSAgICByZXR1cm4gc2hhcGVyLnNlbGVjdGlvblJlY3QocG9pbnQsIGhlaWdo
dCwgZnJvbSwgdG8pOwotfQotCi12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0Ci17Ci0gICAgRlNfU1RBVEUqIGlUeXBlID0gZm9udC0+cGxhdGZvcm1EYXRh
KCkuc2NhbGVkRm9udChjb250ZXh0LT5nZXRDVE0oKS55U2NhbGUoKSk7Ci0gICAgaWYgKCFpVHlw
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvaW50ID0gcG9p
bnQ7Ci0KLSAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbCkKLSAgICAgICAgYWRqdXN0ZWRQb2ludC5tb3ZlKC0oZm9udC0+Zm9udE1ldHJpY3MoKS5m
bG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQtPmZvbnRNZXRyaWNzKCkuZmxv
YXRBc2NlbnQoKSksIDApOwotCi0gICAgYm9vbCBzb2Z0d2FyZUJsdXJSZXF1aXJlZCA9IGNvbnRl
eHQtPnN0YXRlKCkuc2hhZG93Qmx1ciAvIGZvbnQtPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpID4g
MC41OwotCi0gICAgRmxvYXRTaXplIGN1cnJlbnRTaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgY3Vy
cmVudFNoYWRvd0JsdXI7Ci0gICAgQ29sb3IgY3VycmVudFNoYWRvd0NvbG9yOwotICAgIENvbG9y
U3BhY2UgY3VycmVudENvbG9yU3BhY2U7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgc2hhZG93IGJs
dXIsIGFuZCBpdCBpcyB0b28gYmlnIHRvIGFwcGx5IGF0IHRleHQtcmVuZGVyIHRpbWUsIHdlIG11
c3QgcmVuZGVyIGl0IG5vdy4KLSAgICBpZiAoY29udGV4dC0+aGFzU2hhZG93KCkgJiYgc29mdHdh
cmVCbHVyUmVxdWlyZWQpIHsKLSAgICAgICAgY29udGV4dC0+Z2V0U2hhZG93KGN1cnJlbnRTaGFk
b3dPZmZzZXQsIGN1cnJlbnRTaGFkb3dCbHVyLCBjdXJyZW50U2hhZG93Q29sb3IsIGN1cnJlbnRD
b2xvclNwYWNlKTsKLQotICAgICAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSBzdGF0ZSA9
IGNvbnRleHQtPnN0YXRlKCk7Ci0gICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBzdGF0ZS5zaGFk
b3dPZmZzZXQ7Ci0gICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLSAg
ICAgICAgICAgIG9mZnNldC5zZXRIZWlnaHQoLW9mZnNldC5oZWlnaHQoKSk7Ci0gICAgICAgIFNo
YWRvd0JsdXIgc2hhZG93KEZsb2F0U2l6ZShzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5zaGFkb3dC
bHVyKSwgb2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwgc3RhdGUuc2hhZG93Q29sb3JTcGFjZSk7
Ci0gICAgICAgIEZsb2F0UG9pbnQgbWluUG9pbnQoYWRqdXN0ZWRQb2ludC54KCksIGFkanVzdGVk
UG9pbnQueSgpIC0gZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQg
bWF4UG9pbnQoYWRqdXN0ZWRQb2ludC54KCksIGFkanVzdGVkUG9pbnQueSgpICsgZm9udE1ldHJp
Y3MoKS5kZXNjZW50KCkpOwotICAgICAgICBGbG9hdFBvaW50IGN1cnJlbnRQb2ludCA9IGFkanVz
dGVkUG9pbnQ7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsK
LSAgICAgICAgICAgIGN1cnJlbnRQb2ludCArPSAqZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSAr
IGkpOwotICAgICAgICAgICAgbWluUG9pbnQuc2V0WChzdGQ6Om1pbihtaW5Qb2ludC54KCksIGN1
cnJlbnRQb2ludC54KCkpKTsKLSAgICAgICAgICAgIG1pblBvaW50LnNldFkoc3RkOjptaW4obWlu
UG9pbnQueSgpLCBjdXJyZW50UG9pbnQueSgpKSk7Ci0gICAgICAgICAgICBtYXhQb2ludCA9IG1h
eFBvaW50LmV4cGFuZGVkVG8oY3VycmVudFBvaW50KTsKLSAgICAgICAgfQotICAgICAgICBjb25z
dCBGbG9hdFJlY3QgYm91bmRpbmdSZWN0KG1pblBvaW50LngoKSwgbWluUG9pbnQueSgpLCBtYXhQ
b2ludC54KCkgLSBtaW5Qb2ludC54KCksIG1heFBvaW50LnkoKSAtIG1pblBvaW50LnkoKSk7Ci0g
ICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy5iZWdpblNoYWRv
d0xheWVyKGNvbnRleHQsIGJvdW5kaW5nUmVjdCk7Ci0gICAgICAgIGlmIChzaGFkb3dDb250ZXh0
KSB7Ci0gICAgICAgICAgICBpVHlwZSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQo
c2hhZG93Q29udGV4dC0+Z2V0Q1RNKCkueVNjYWxlKCkpOwotICAgICAgICAgICAgc2hhZG93Q29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmFkZEdseXBocyhnbHlwaEJ1ZmZlci5nbHlwaHMoZnJv
bSksCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6RmxvYXRTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLAotICAgICAg
ICAgICAgICAgIG51bUdseXBocywgYWRqdXN0ZWRQb2ludCwgaVR5cGUsIDAsIDApOwotICAgICAg
ICAgICAgaVR5cGUgPSBmb250LT5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KGNvbnRleHQtPmdl
dENUTSgpLnlTY2FsZSgpKTsKLSAgICAgICAgICAgIHNoYWRvdy5lbmRTaGFkb3dMYXllcihjb250
ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2xl
YXJTaGFkb3coKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRk
R2x5cGhzKGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRTaXplKj4oZ2x5cGhCdWZmZXIuYWR2
YW5jZXMoZnJvbSkpLAotICAgICAgICBudW1HbHlwaHMsIGFkanVzdGVkUG9pbnQsIGlUeXBlLAot
ICAgICAgICBjb250ZXh0LT5maWxsR3JhZGllbnQoKSA/IGNvbnRleHQtPmZpbGxHcmFkaWVudCgp
LT5wbGF0Zm9ybUdyYWRpZW50KCkgOiAoY29udGV4dC0+ZmlsbFBhdHRlcm4oKSA/IGNvbnRleHQt
PmZpbGxQYXR0ZXJuKCktPnBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkgOiBzdGF0
aWNfY2FzdDxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBhaW50Kj4oMCkpLAotICAg
ICAgICBjb250ZXh0LT5zdHJva2VHcmFkaWVudCgpID8gY29udGV4dC0+c3Ryb2tlR3JhZGllbnQo
KS0+cGxhdGZvcm1HcmFkaWVudCgpIDogKGNvbnRleHQtPnN0cm9rZVBhdHRlcm4oKSA/IGNvbnRl
eHQtPnN0cm9rZVBhdHRlcm4oKS0+cGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSA6
IHN0YXRpY19jYXN0PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGFpbnQqPigwKSkp
OwotCi0gICAgaWYgKHNvZnR3YXJlQmx1clJlcXVpcmVkKQotICAgICAgICBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+c2V0U2hhZG93KGN1cnJlbnRTaGFkb3dPZmZzZXQsIGN1cnJlbnRTaGFk
b3dCbHVyLCBjdXJyZW50U2hhZG93Q29sb3IuaXNWYWxpZCgpID8gY3VycmVudFNoYWRvd0NvbG9y
LnJnYigpIDogbWFrZVJHQkEoMCwgMCwgMCwgMHhGRiAvIDMpLCBjb250ZXh0LT5zdGF0ZSgpLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLX0KLQotYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFj
a0ZvbnRzRm9yQ29tcGxleFRleHQoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBG
b250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyog
Y29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcm
IC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAq
LywgaW50IC8qIHRvICovKSBjb25zdAotewotICAgIC8vIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LWJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250Q2FjaGVCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDYWNoZUJs
YWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDYWNoZUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5M
LgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9udENhY2hlLmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udERlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIklUeXBl
VXRpbHMuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmln
Lmg+Ci0jaW5jbHVkZSA8ZnNfYXBpLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS9sb2NpZC5oPgotI2lu
Y2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQot
ewotICAgIC8vIEl0J3MgZmluZSB0byBjYWxsIEZjSW5pdCBtdWx0aXBsZSB0aW1lcyBwZXIgdGhl
IGRvY3VtZW50YXRpb24uCi0gICAgaWYgKCFGY0luaXQoKSkKLSAgICAgICAgQ1JBU0goKTsKLX0K
LQotdm9pZCBGb250Q2FjaGU6OmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbnVtQ2hhcmFjdGVycywgY29uc3QgY2hhciosIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIFNpbXBsZUZvbnRGYW1pbHkqIGZhbWlseSkKLXsK
LSAgICBGY0NoYXJTZXQqIGNzZXQgPSBGY0NoYXJTZXRDcmVhdGUoKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bUNoYXJhY3RlcnM7ICsraSkgewotICAgICAgICBpZiAoVTE2X0lTX1NV
UlJPR0FURShjaGFyYWN0ZXJzW2ldKQotICAgICAgICAgICAgJiYgVTE2X0lTX1NVUlJPR0FURV9M
RUFEKGNoYXJhY3RlcnNbaV0pCi0gICAgICAgICAgICAmJiBpICE9IG51bUNoYXJhY3RlcnMgLSAx
Ci0gICAgICAgICAgICAmJiBVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1tpICsgMV0pKSB7Ci0gICAg
ICAgICAgICBGY0NoYXJTZXRBZGRDaGFyKGNzZXQsIFUxNl9HRVRfU1VQUExFTUVOVEFSWShjaGFy
YWN0ZXJzW2ldLCBjaGFyYWN0ZXJzW2krMV0pKTsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBGY0NoYXJTZXRBZGRDaGFyKGNzZXQsIGNoYXJhY3RlcnNbaV0p
OwotICAgIH0KLSAgICBGY1BhdHRlcm4qIHBhdHRlcm4gPSBGY1BhdHRlcm5DcmVhdGUoKTsKLQot
ICAgIEZjVmFsdWUgZmN2YWx1ZTsKLSAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVDaGFyU2V0Owot
ICAgIGZjdmFsdWUudS5jID0gY3NldDsKLSAgICBGY1BhdHRlcm5BZGQocGF0dGVybiwgRkNfQ0hB
UlNFVCwgZmN2YWx1ZSwgRmNGYWxzZSk7Ci0KLSAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVCb29s
OwotICAgIGZjdmFsdWUudS5iID0gRmNUcnVlOwotICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBG
Q19TQ0FMQUJMRSwgZmN2YWx1ZSwgRmNGYWxzZSk7Ci0KLSAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5
cGVJbnRlZ2VyOwotICAgIGZjdmFsdWUudS5pID0gKGRlc2NyaXB0aW9uLndlaWdodCgpID49IEZv
bnRXZWlnaHRCb2xkKSA/IEZDX1dFSUdIVF9CT0xEIDogRkNfV0VJR0hUX05PUk1BTDsKLSAgICBG
Y1BhdHRlcm5BZGQocGF0dGVybiwgRkNfV0VJR0hULCBmY3ZhbHVlLCBGY0ZhbHNlKTsKLQotICAg
IGZjdmFsdWUudHlwZSA9IEZjVHlwZUludGVnZXI7Ci0gICAgZmN2YWx1ZS51LmkgPSAoZGVzY3Jp
cHRpb24uaXRhbGljKCkgPT0gRm9udEl0YWxpY09uKSA/IEZDX1NMQU5UX0lUQUxJQyA6IEZDX1NM
QU5UX1JPTUFOOwotICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19TTEFOVCwgZmN2YWx1ZSwg
RmNGYWxzZSk7Ci0KLSAgICBGY0NvbmZpZ1N1YnN0aXR1dGUoMCwgcGF0dGVybiwgRmNNYXRjaFBh
dHRlcm4pOwotICAgIEZjRGVmYXVsdFN1YnN0aXR1dGUocGF0dGVybik7Ci0KLSAgICBGY1Jlc3Vs
dCByZXN1bHQ7Ci0gICAgRmNGb250U2V0KiBmb250U2V0ID0gRmNGb250U29ydCgwLCBwYXR0ZXJu
LCAwLCAwLCAmcmVzdWx0KTsKLSAgICBGY1BhdHRlcm5EZXN0cm95KHBhdHRlcm4pOwotICAgIEZj
Q2hhclNldERlc3Ryb3koY3NldCk7Ci0KLSAgICBpZiAoIWZvbnRTZXQpIHsKLSAgICAgICAgZmFt
aWx5LT5uYW1lID0gU3RyaW5nKCk7Ci0gICAgICAgIGZhbWlseS0+aXNCb2xkID0gZmFsc2U7Ci0g
ICAgICAgIGZhbWlseS0+aXNJdGFsaWMgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIGZvbnRjb25maWcgaGF2ZSBhIGJ1ZyB3aGVyZSB0
aGV5IGNhbm5vdCBzZWxlY3QKLSAgICAvLyBvbmx5IHNjYWxhYmxlIGZvbnRzIHNvIHdlIGhhdmUg
dG8gbWFudWFsbHkgZmlsdGVyIHRoZSByZXN1bHRzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Zm9udFNldC0+bmZvbnQ7ICsraSkgewotICAgICAgICBGY1BhdHRlcm4qIGN1cnJlbnQgPSBmb250
U2V0LT5mb250c1tpXTsKLSAgICAgICAgRmNCb29sIGlzU2NhbGFibGU7Ci0KLSAgICAgICAgaWYg
KEZjUGF0dGVybkdldEJvb2woY3VycmVudCwgRkNfU0NBTEFCTEUsIDAsICZpc1NjYWxhYmxlKSAh
PSBGY1Jlc3VsdE1hdGNoCi0gICAgICAgICAgICB8fCAhaXNTY2FsYWJsZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIC8vIGZvbnRjb25maWcgY2FuIGFsc28gcmV0dXJuIGZvbnRz
IHdoaWNoIGFyZSB1bnJlYWRhYmxlCi0gICAgICAgIEZjQ2hhcjgqIGNGaWxlbmFtZTsKLSAgICAg
ICAgaWYgKEZjUGF0dGVybkdldFN0cmluZyhjdXJyZW50LCBGQ19GSUxFLCAwLCAmY0ZpbGVuYW1l
KSAhPSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYg
KGFjY2VzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPihjRmlsZW5hbWUpLCBSX09LKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEZjQ2hhcjgqIGZhbWlseU5hbWU7Ci0gICAgICAg
IGlmIChGY1BhdHRlcm5HZXRTdHJpbmcoY3VycmVudCwgRkNfRkFNSUxZLCAwLCAmZmFtaWx5TmFt
ZSkgPT0gRmNSZXN1bHRNYXRjaCkgewotICAgICAgICAgICAgY29uc3QgY2hhciogY2hhckZhbWls
eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZhbWlseU5hbWUpOwotICAgICAgICAgICAgZmFt
aWx5LT5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOChjaGFyRmFtaWx5LCBzdHJsZW4oY2hhckZhbWls
eSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHdlaWdodDsKLSAgICAgICAgaWYgKEZjUGF0
dGVybkdldEludGVnZXIoY3VycmVudCwgRkNfV0VJR0hULCAwLCAmd2VpZ2h0KSA9PSBGY1Jlc3Vs
dE1hdGNoKQotICAgICAgICAgICAgZmFtaWx5LT5pc0JvbGQgPSB3ZWlnaHQgPj0gRkNfV0VJR0hU
X0JPTEQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhbWlseS0+aXNCb2xkID0gZmFsc2U7
Ci0KLSAgICAgICAgaW50IHNsYW50OwotICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdlcihj
dXJyZW50LCBGQ19TTEFOVCwgMCwgJnNsYW50KSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICAg
ICAgZmFtaWx5LT5pc0l0YWxpYyA9IHNsYW50ICE9IEZDX1NMQU5UX1JPTUFOOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBmYW1pbHktPmlzSXRhbGljID0gZmFsc2U7Ci0KLSAgICAgICAgRmNG
b250U2V0RGVzdHJveShmb250U2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZj
Rm9udFNldERlc3Ryb3koZm9udFNldCk7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGJvb2wsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQotewotICAgIGljdTo6TG9jYWxlIGxvY2Fs
ZSA9IGljdTo6TG9jYWxlOjpnZXREZWZhdWx0KCk7Ci0gICAgRm9udENhY2hlOjpTaW1wbGVGb250
RmFtaWx5IGZhbWlseTsKLSAgICBGb250Q2FjaGU6OmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJz
KGNoYXJhY3RlcnMsIGxlbmd0aCwgbG9jYWxlLmdldExhbmd1YWdlKCksIGZvbnREZXNjcmlwdGlv
biwgJmZhbWlseSk7Ci0gICAgaWYgKGZhbWlseS5uYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBBdG9taWNTdHJpbmcgYXRvbWljRmFtaWx5KGZhbWlseS5uYW1lKTsKLSAg
ICAvLyBDaGFuZ2VzIHdlaWdodCBhbmQvb3IgaXRhbGljIG9mIGdpdmVuIEZvbnREZXNjcmlwdGlv
biBkZXBlbmRzIG9uCi0gICAgLy8gdGhlIHJlc3VsdCBvZiBmb250Y29uZmlnIHNvIHRoYXQga2Vl
cGluZyB0aGUgY29ycmVjdCBmb250IG1hcHBpbmcKLSAgICAvLyBvZiB0aGUgZ2l2ZW4gY2hhcmFj
dGVycy4gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzIxMDkgZm9yIGRldGFpbHMuCi0gICAgYm9vbCBz
aG91bGRTZXRGYWtlQm9sZCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkU2V0RmFrZUl0YWxpYyA9
IGZhbHNlOwotICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OwotICAgIGlmIChmYW1pbHkuaXNCb2xkICYmIGRlc2NyaXB0aW9uLndlaWdodCgpIDwgRm9udFdl
aWdodEJvbGQpCi0gICAgICAgIGRlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Qm9sZCk7
Ci0gICAgaWYgKCFmYW1pbHkuaXNCb2xkICYmIGRlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRX
ZWlnaHRCb2xkKSB7Ci0gICAgICAgIHNob3VsZFNldEZha2VCb2xkID0gdHJ1ZTsKLSAgICAgICAg
ZGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOwotICAgIH0KLSAgICBpZiAo
ZmFtaWx5LmlzSXRhbGljICYmIGRlc2NyaXB0aW9uLml0YWxpYygpID09IEZvbnRJdGFsaWNPZmYp
Ci0gICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250SXRhbGljT24pOwotICAgIGlmICgh
ZmFtaWx5LmlzSXRhbGljICYmIGRlc2NyaXB0aW9uLml0YWxpYygpID09IEZvbnRJdGFsaWNPbikg
ewotICAgICAgICBzaG91bGRTZXRGYWtlSXRhbGljID0gdHJ1ZTsKLSAgICAgICAgZGVzY3JpcHRp
b24uc2V0SXRhbGljKEZvbnRJdGFsaWNPZmYpOwotICAgIH0KLQotICAgIEZvbnRQbGF0Zm9ybURh
dGEqIHN1YnN0aXR1dGVQbGF0Zm9ybURhdGEgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGRl
c2NyaXB0aW9uLCBhdG9taWNGYW1pbHksIERvTm90UmV0YWluKTsKLSAgICBpZiAoIXN1YnN0aXR1
dGVQbGF0Zm9ybURhdGEpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZvbnRQbGF0Zm9ybURhdGEg
cGxhdGZvcm1EYXRhID0gRm9udFBsYXRmb3JtRGF0YSgqc3Vic3RpdHV0ZVBsYXRmb3JtRGF0YSk7
Ci0gICAgcGxhdGZvcm1EYXRhLnNldEZha2VCb2xkKHNob3VsZFNldEZha2VCb2xkKTsKLSAgICBw
bGF0Zm9ybURhdGEuc2V0RmFrZUl0YWxpYyhzaG91bGRTZXRGYWtlSXRhbGljKTsKLSAgICByZXR1
cm4gZ2V0Q2FjaGVkRm9udERhdGEoJnBsYXRmb3JtRGF0YSwgRG9Ob3RSZXRhaW4pOwotfQotCi1Q
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBzYW5zU3RyLCAo
IlNhbnMiKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHNl
cmlmU3RyLCAoIlNlcmlmIikpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWlj
U3RyaW5nLCBtb25vc3BhY2VTdHIsICgiTW9ub3NwYWNlIikpOwotCi0gICAgRm9udFBsYXRmb3Jt
RGF0YSogZm9udFBsYXRmb3JtRGF0YSA9IDA7Ci0gICAgc3dpdGNoIChkZXNjcmlwdGlvbi5nZW5l
cmljRmFtaWx5KCkpIHsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6Ci0g
ICAgICAgIGZvbnRQbGF0Zm9ybURhdGEgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGRlc2Ny
aXB0aW9uLCBzZXJpZlN0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpNb25vc3BhY2VGYW1pbHk6Ci0gICAgICAgIGZvbnRQbGF0Zm9ybURhdGEgPSBnZXRDYWNo
ZWRGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBtb25vc3BhY2VTdHIpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5OgotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGZvbnRQbGF0Zm9ybURhdGEgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKGRlc2NyaXB0aW9uLCBzYW5zU3RyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
aWYgKCFmb250UGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgQXRvbWljU3RyaW5nLCBhcmlhbFN0ciwgKCJBcmlhbCIpKTsKLSAgICAgICAgZm9udFBsYXRm
b3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIGFyaWFsU3Ry
KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZm9udFBsYXRmb3JtRGF0YSk7Ci0gICAgcmV0dXJuIGdl
dENhY2hlZEZvbnREYXRhKGZvbnRQbGF0Zm9ybURhdGEpOwotfQotCi12b2lkIEZvbnRDYWNoZTo6
Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGljIFN0cmluZyBnZXRGYW1pbHlO
YW1lU3RyaW5nRnJvbUZvbnREZXNjcmlwdGlvbkFuZEZhbWlseShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAg
Ly8gSWYgd2UncmUgY3JlYXRpbmcgYSBmYWxsYmFjayBmb250IChlLmcuICItd2Via2l0LW1vbm9z
cGFjZSIpLCBjb252ZXJ0IHRoZSBuYW1lIGludG8KLSAgICAvLyB0aGUgZmFsbGJhY2sgbmFtZSAo
bGlrZSAibW9ub3NwYWNlIikgdGhhdCBmb250Y29uZmlnIHVuZGVyc3RhbmRzLgotICAgIGlmIChm
YW1pbHkubGVuZ3RoKCkgJiYgIWZhbWlseS5zdGFydHNXaXRoKCItd2Via2l0LSIpKQotICAgICAg
ICByZXR1cm4gZmFtaWx5LnN0cmluZygpOwotCi0gICAgc3dpdGNoIChmb250RGVzY3JpcHRpb24u
Z2VuZXJpY0ZhbWlseSgpKSB7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFt
aWx5OgotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKLSAgICAgICAgcmV0
dXJuICJzZXJpZiI7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToK
LSAgICAgICAgcmV0dXJuICJzYW5zLXNlcmlmIjsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6
TW9ub3NwYWNlRmFtaWx5OgotICAgICAgICByZXR1cm4gIm1vbm9zcGFjZSI7Ci0gICAgY2FzZSBG
b250RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHk6Ci0gICAgICAgIHJldHVybiAiY3Vyc2l2ZSI7
Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OkZhbnRhc3lGYW1pbHk6Ci0gICAgICAgIHJldHVy
biAiZmFudGFzeSI7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci19Ci0KLWludCBmb250V2VpZ2h0VG9G
b250Y29uZmlnV2VpZ2h0KEZvbnRXZWlnaHQgd2VpZ2h0KQotewotICAgIHN3aXRjaCAod2VpZ2h0
KSB7Ci0gICAgY2FzZSBGb250V2VpZ2h0MTAwOgotICAgICAgICByZXR1cm4gRkNfV0VJR0hUX1RI
SU47Ci0gICAgY2FzZSBGb250V2VpZ2h0MjAwOgotICAgICAgICByZXR1cm4gRkNfV0VJR0hUX1VM
VFJBTElHSFQ7Ci0gICAgY2FzZSBGb250V2VpZ2h0MzAwOgotICAgICAgICByZXR1cm4gRkNfV0VJ
R0hUX0xJR0hUOwotICAgIGNhc2UgRm9udFdlaWdodDQwMDoKLSAgICAgICAgcmV0dXJuIEZDX1dF
SUdIVF9SRUdVTEFSOwotICAgIGNhc2UgRm9udFdlaWdodDUwMDoKLSAgICAgICAgcmV0dXJuIEZD
X1dFSUdIVF9NRURJVU07Ci0gICAgY2FzZSBGb250V2VpZ2h0NjAwOgotICAgICAgICByZXR1cm4g
RkNfV0VJR0hUX1NFTUlCT0xEOwotICAgIGNhc2UgRm9udFdlaWdodDcwMDoKLSAgICAgICAgcmV0
dXJuIEZDX1dFSUdIVF9CT0xEOwotICAgIGNhc2UgRm9udFdlaWdodDgwMDoKLSAgICAgICAgcmV0
dXJuIEZDX1dFSUdIVF9FWFRSQUJPTEQ7Ci0gICAgY2FzZSBGb250V2VpZ2h0OTAwOgotICAgICAg
ICByZXR1cm4gRkNfV0VJR0hUX1VMVFJBQkxBQ0s7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBGQ19XRUlHSFRfUkVHVUxBUjsKLSAg
ICB9Ci19Ci0KLVBhc3NPd25QdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKLXsKLSAgICAvLyBUaGUgQ1NTIGZvbnQgbWF0Y2hp
bmcgYWxnb3JpdGhtIChodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZvbnRzLyNmb250LW1hdGNo
aW5nLWFsZ29yaXRobSkKLSAgICAvLyBzYXlzIHRoYXQgd2UgbXVzdCBmaW5kIGFuIGV4YWN0IG1h
dGNoIGZvciBmb250IGZhbWlseSwgc2xhbnQgKGl0YWxpYyBvciBvYmxpcXVlIGNhbiBiZSB1c2Vk
KQotICAgIC8vIGFuZCBmb250IHdlaWdodCAod2Ugb25seSBtYXRjaCBib2xkL25vbi1ib2xkIGhl
cmUpLgotICAgIEZjUGF0dGVybiogcGF0dGVybiA9IEZjUGF0dGVybkNyZWF0ZSgpOwotICAgIFN0
cmluZyBmYW1pbHlOYW1lU3RyaW5nKGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRm9udERlc2NyaXB0
aW9uQW5kRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KSk7Ci0gICAgaWYgKCFGY1BhdHRl
cm5BZGRTdHJpbmcocGF0dGVybiwgRkNfRkFNSUxZLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZj
Q2hhcjgqPihmYW1pbHlOYW1lU3RyaW5nLnV0ZjgoKS5kYXRhKCkpKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBib29sIGl0YWxpYyA9IGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKTsK
LSAgICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfU0xBTlQsIGl0YWxpYyA/
IEZDX1NMQU5UX0lUQUxJQyA6IEZDX1NMQU5UX1JPTUFOKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgaWYgKCFGY1BhdHRlcm5BZGRJbnRlZ2VyKHBhdHRlcm4sIEZDX1dFSUdIVCwgZm9u
dFdlaWdodFRvRm9udGNvbmZpZ1dlaWdodChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkpKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFGY1BhdHRlcm5BZGREb3VibGUocGF0dGVy
biwgRkNfUElYRUxfU0laRSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFRoZSBzdHJhdGVneSBpcyBvcmlnaW5h
bGx5IGZyb20gU2tpYSAoc3JjL3BvcnRzL1NrRm9udEhvc3RfZm9udGNvbmZpZy5jcHApOgotCi0g
ICAgLy8gQWxsb3cgRm9udGNvbmZpZyB0byBkbyBwcmUtbWF0Y2ggc3Vic3RpdHV0aW9uLiBVbmxl
c3Mgd2UgYXJlIGFjY2Vzc2luZyBhICJmYWxsYmFjayIKLSAgICAvLyBmYW1pbHkgbGlrZSAic2Fu
cywiIHRoaXMgaXMgdGhlIG9ubHkgdGltZSB3ZSBhbGxvdyBGb250Y29uZmlnIHRvIHN1YnN0aXR1
dGUgb25lCi0gICAgLy8gZmFtaWx5IG5hbWUgZm9yIGFub3RoZXIgKGkuZS4gaWYgdGhlIGZvbnRz
IGFyZSBhbGlhc2VkIHRvIGVhY2ggb3RoZXIpLgotICAgIEZjQ29uZmlnU3Vic3RpdHV0ZSgwLCBw
YXR0ZXJuLCBGY01hdGNoUGF0dGVybik7Ci0gICAgRmNEZWZhdWx0U3Vic3RpdHV0ZShwYXR0ZXJu
KTsKLQotICAgIEZjQ2hhcjgqIGZvbnRDb25maWdGYW1pbHlOYW1lQWZ0ZXJDb25maWd1cmF0aW9u
OwotICAgIEZjUGF0dGVybkdldFN0cmluZyhwYXR0ZXJuLCBGQ19GQU1JTFksIDAsICZmb250Q29u
ZmlnRmFtaWx5TmFtZUFmdGVyQ29uZmlndXJhdGlvbik7Ci0gICAgU3RyaW5nIGZhbWlseU5hbWVB
ZnRlckNvbmZpZ3VyYXRpb24gPSBTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGZvbnRDb25maWdGYW1pbHlOYW1lQWZ0ZXJDb25maWd1cmF0aW9uKSk7Ci0KLSAgICBGY1Jl
c3VsdCBmb250Q29uZmlnUmVzdWx0OwotICAgIEZjUGF0dGVybiogcmVzdWx0UGF0dGVybiA9IEZj
Rm9udE1hdGNoKDAsIHBhdHRlcm4sICZmb250Q29uZmlnUmVzdWx0KTsKLSAgICBGY1BhdHRlcm5E
ZXN0cm95KHBhdHRlcm4pOwotICAgIGlmICghcmVzdWx0UGF0dGVybikgLy8gTm8gbWF0Y2guCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRmNDaGFyOCogZm9udENvbmZpZ0ZhbWlseU5h
bWVBZnRlck1hdGNoaW5nOwotICAgIEZjUGF0dGVybkdldFN0cmluZyhyZXN1bHRQYXR0ZXJuLCBG
Q19GQU1JTFksIDAsICZmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcpOwotICAgIFN0
cmluZyBmYW1pbHlOYW1lQWZ0ZXJNYXRjaGluZyA9IFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlck1hdGNoaW5nKSk7Ci0KLSAg
ICAvLyBJZiBGb250Y29uZmlnIGdhdmUgdXNlIGEgZGlmZmVyZW50IGZvbnQgZmFtaWx5IHRoYW4g
dGhlIG9uZSB3ZSByZXF1ZXN0ZWQsIHdlIHNob3VsZCBpZ25vcmUgaXQKLSAgICAvLyBhbmQgYWxs
b3cgV2ViQ29yZSB0byBnaXZlIHVzIHRoZSBuZXh0IGZvbnQgb24gdGhlIENTUyBmYWxsYmFjayBs
aXN0LiBUaGUgb25seSBleGNlcHRpb24gaXMgaWYKLSAgICAvLyB0aGlzIGZhbWlseSBuYW1lIGlz
IGEgY29tbW9ubHkgdXNlZCBnZW5lcmljIGZhbWlseS4KLSAgICBpZiAoIWVxdWFsSWdub3JpbmdD
YXNlKGZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb24sIGZhbWlseU5hbWVBZnRlck1hdGNoaW5n
KQotICAgICAgICAmJiAhKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJzYW5z
IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgInNhbnMtc2VyaWYiKQot
ICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgInNlcmlm
IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgIm1vbm9zcGFjZSIpCi0g
ICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAiZmFudGFz
eSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJjdXJzaXZlIikpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGludCBmb250V2VpZ2h0OwotICAgIEZjUGF0
dGVybkdldEludGVnZXIocmVzdWx0UGF0dGVybiwgRkNfV0VJR0hULCAwLCAmZm9udFdlaWdodCk7
Ci0gICAgYm9vbCBzaG91bGRGYWtlQm9sZCA9IGZvbnRXZWlnaHQgPCBGQ19XRUlHSFRfQk9MRCAm
JiBmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkgPj0gRm9udFdlaWdodEJvbGQ7Ci0KLSAgICBpbnQg
Zm9udFNsYW50OwotICAgIEZjUGF0dGVybkdldEludGVnZXIocmVzdWx0UGF0dGVybiwgRkNfU0xB
TlQsIDAsICZmb250U2xhbnQpOwotICAgIGJvb2wgc2hvdWxkRmFrZUl0YWxpYyA9IGZvbnRTbGFu
dCA9PSBGQ19TTEFOVF9ST01BTiAmJiBmb250RGVzY3JpcHRpb24uaXRhbGljKCkgPT0gRm9udEl0
YWxpY09uOwotCi0gICAgRmNDaGFyOCogZm9udEZpbGVOYW1lOwotICAgIEZjUGF0dGVybkdldFN0
cmluZyhyZXN1bHRQYXR0ZXJuLCBGQ19GSUxFLCAwLCAmZm9udEZpbGVOYW1lKTsKLSAgICAvLyBm
cHJpbnRmKHN0ZGVyciwgIkxvb2tpbmcgZm9yICVzIGZvdW5kICVzOiBpOiVkIGI6JWRcbiIsIGZh
bWlseS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCksIGZvbnRGaWxlTmFtZSwgc2hvdWxkRmFrZUl0
YWxpYywgc2hvdWxkRmFrZUJvbGQpOwotICAgIEZjUGF0dGVybkRlc3Ryb3kocmVzdWx0UGF0dGVy
bik7Ci0KLSAgICBGSUxFQ0hBUiBuYW1lW01BWF9GT05UX05BTUVfTEVOKzFdOwotICAgIG1lbXNl
dChuYW1lLCAwLCBNQVhfRk9OVF9OQU1FX0xFTisxKTsKLSAgICAvLyBmcHJpbnRmKHN0ZGVyciwg
IkZTX2xvYWRfZm9udCAlczogIiwgZm9udEZpbGVOYW1lKTsKLSAgICBpZiAoRlNfbG9hZF9mb250
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Z2V0SVR5cGUoKSwgcmVpbnRlcnByZXRf
Y2FzdDxGSUxFQ0hBUio+KGZvbnRGaWxlTmFtZSksIDAsIDAsIE1BWF9GT05UX05BTUVfTEVOLCBu
YW1lKSAhPSBTVUNDRVNTKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAvLyBmcHJpbnRm
KHN0ZGVyciwgIiAlc1xuIiwgbmFtZSk7Ci0KLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZvbnRQ
bGF0Zm9ybURhdGEobmFtZSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBzaG91bGRG
YWtlQm9sZCwgc2hvdWxkRmFrZUl0YWxpYywgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCi0gKi8KLSNpZm5kZWYgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCi0jZGVmaW5lIEZv
bnRDdXN0b21QbGF0Zm9ybURhdGFfaAotCi0jaW5jbHVkZSAiRm9udE9yaWVudGF0aW9uLmgiCi0j
aW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlICJGb250V2lkdGhWYXJpYW50
LmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLXR5cGVkZWYgY2hhciBGSUxFQ0hBUjsKLXN0cnVjdCBGU19TVEFURTsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotY2xhc3MgTW9u
b3R5cGVGb250OwotY2xhc3MgU2hhcmVkQnVmZmVyOwotCi1zdHJ1Y3QgRm9udEN1c3RvbVBsYXRm
b3JtRGF0YSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udEN1c3RvbVBsYXRmb3JtRGF0
YSk7Ci1wdWJsaWM6Ci0gICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YShGSUxFQ0hBUiogZm9udE5h
bWUsIFNoYXJlZEJ1ZmZlciYpOwotICAgIH5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCk7Ci0KLSAg
ICBGb250UGxhdGZvcm1EYXRhIGZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgc3ludGhl
dGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250
YWwsCi0gICAgICAgIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJp
bmdNb2RlID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7Ci0KLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c0Zvcm1hdChjb25zdCBTdHJpbmcmKTsKLQotICAgIEZJTEVDSEFSKiBtX2ZvbnROYW1lOwotICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fYnVmZmVyOwotfTsKLQotc3RkOjp1bmlxdWVfcHRyPEZv
bnRDdXN0b21QbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVk
QnVmZmVyJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEZvbnRDdXN0
b21QbGF0Zm9ybURhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQmxhY2tCZXJyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIkZv
bnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJJVHlwZVV0aWxzLmgiCi0jaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQuaD4KLSNpbmNsdWRlIDxmc19hcGkuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhKEZJTEVDSEFSKiBmb250
TmFtZSwgU2hhcmVkQnVmZmVyJiBidWZmZXIpCi0gICAgOiBtX2ZvbnROYW1lKHN0cmR1cChmb250
TmFtZSkpCi0gICAgLCBtX2J1ZmZlcigmYnVmZmVyKQotewotfQotCi1Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCi17Ci0gICAgRlNfTE9ORyByZXQgPSBG
U19kZWxldGVfZm9udChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmdldElUeXBlKCks
IGNvbnN0X2Nhc3Q8RklMRUNIQVIqPihtX2ZvbnROYW1lKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChy
ZXQsIHJldCA9PSBTVUNDRVNTKTsKLSAgICBmcmVlKG1fZm9udE5hbWUpOwotfQotCi1Gb250UGxh
dGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNp
emUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIEZvbnRPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIEZvbnRSZW5k
ZXJpbmdNb2RlKQotewotICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKG1fZm9udE5hbWUsIHNp
emUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgb3JpZW50YXRpb24sIHdpZHRoVmFy
aWFudCk7Ci19Ci0KLWJvb2wgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6c3VwcG9ydHNGb3JtYXQo
Y29uc3QgU3RyaW5nJiBmb3JtYXQpCi17Ci0gICAgYm9vbCBpc1N1cHBvcnRlZCA9IGVxdWFsSWdu
b3JpbmdDYXNlKGZvcm1hdCwgInRydWV0eXBlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybWF0
LCAib3BlbnR5cGUiKTsKLSNpZiBVU0UoT1BFTlRZUEVfU0FOSVRJWkVSKQotICAgIGlzU3VwcG9y
dGVkID0gaXNTdXBwb3J0ZWQgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybWF0LCAid29mZiIpOwot
I2VuZGlmCi0gICAgcmV0dXJuIGlzU3VwcG9ydGVkOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9u
dEN1c3RvbVBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRC
dWZmZXImIGJ1ZmZlcikKLXsKLSAgICBGSUxFQ0hBUiBuYW1lW01BWF9GT05UX05BTUVfTEVOKzFd
OwotICAgIG1lbXNldChuYW1lLCAwLCBNQVhfRk9OVF9OQU1FX0xFTisxKTsKLSAgICBpZiAoRlNf
bG9hZF9mb250KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Z2V0SVR5cGUoKSwgMCwg
Y29uc3RfY2FzdDxGU19CWVRFKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBGU19CWVRFKj4oYnVm
ZmVyLmRhdGEoKSkpLCAwLCBNQVhfRk9OVF9OQU1FX0xFTiwgbmFtZSkgIT0gU1VDQ0VTUykKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxGb250
Q3VzdG9tUGxhdGZvcm1EYXRhPihuYW1lLCBidWZmZXIpOwotfQotCi19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRQbGF0Zm9ybURhdGFCbGFj
a0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0ZvbnRQbGF0Zm9ybURhdGFCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYx
NTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250
UGxhdGZvcm1EYXRhQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjI5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUg
IkhhcmZCdXp6RmFjZS5oIgotI2luY2x1ZGUgIklUeXBlVXRpbHMuaCIKLQotI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPGZzX2FwaS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoRklMRUNIQVIqIG5hbWUsIGZsb2F0
IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3Jp
ZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KQotICAg
IDogbV9zeW50aGV0aWNCb2xkKHN5bnRoZXRpY0JvbGQpCi0gICAgLCBtX3N5bnRoZXRpY09ibGlx
dWUoc3ludGhldGljT2JsaXF1ZSkKLSAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCi0g
ICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fd2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCkKLSAg
ICAsIG1fZm9udCgwKQotICAgICwgbV9uYW1lKGZhc3RTdHJEdXAobmFtZSkpCi0gICAgLCBtX3Nj
YWxlZEZvbnQoMCkKLSAgICAsIG1faGFyZkJ1enpGYWNlKCkKLSAgICAsIG1faXNDb2xvckJpdG1h
cEZvbnQoZmFsc2UpCi17Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIG1fZm9udCA9IEZTX25ld19j
bGllbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpnZXRJVHlwZSgpLCAwKTsKLSAg
ICBBU1NFUlQobV9mb250KTsKLSAgICBhcHBseVN0YXRlKG1fZm9udCk7Ci19Ci0KLUZvbnRQbGF0
Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKLXsKLSAgICBpZiAobV9zY2FsZWRGb250KSB7
Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Y2xlYXJHbHlwaENhY2hl
Rm9yRm9udChtX3NjYWxlZEZvbnQpOwotICAgICAgICBGU19lbmRfY2xpZW50KG1fc2NhbGVkRm9u
dCk7Ci0gICAgfQotICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IGhhc2hUYWJsZURlbGV0ZWRG
b250VmFsdWUoKSkKLSAgICAgICAgRlNfZW5kX2NsaWVudChtX2ZvbnQpOwotICAgIGZhc3RGcmVl
KG1fbmFtZSk7Ci19Ci0KLWNvbnN0IGNoYXIqIEZvbnRQbGF0Zm9ybURhdGE6Om5hbWUoKSBjb25z
dAotewotICAgIHJldHVybiBtX25hbWU7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6YXBw
bHlTdGF0ZShGU19TVEFURSogZm9udCwgZmxvYXQgc2NhbGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KGZvbnQpOwotICAgIEFTU0VSVChtX25hbWUpOwotICAgIGlmIChGU19zZXRfZm9udChmb250LCBt
X25hbWUpICE9IFNVQ0NFU1MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChGU19z
ZXRfY21hcChmb250LCAzLCAxMCkgIT0gU1VDQ0VTUykgLy8gRmlyc3QgdHJ5IFdpbmRvd3MgVW5p
Y29kZSB3aXRoIHN1cnJvZ2F0ZXMuLi4KLSAgICAgICAgaWYgKEZTX3NldF9jbWFwKGZvbnQsIDMs
IDEpICE9IFNVQ0NFU1MpIC8vIHRyeSBub3JtYWwgV2luZG93cyBVbmljb2RlCi0gICAgICAgICAg
ICBpZiAoRlNfc2V0X2NtYXAoZm9udCwgMSwgMCkgIT0gU1VDQ0VTUykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9zeW50aGV0aWNCb2xkKSB7Ci0gICAgICAgIGlm
IChGU19zZXRfYm9sZF9wY3QoZm9udCwgSVRZUEVGQUtFQk9MREFNT1VOVCkgIT0gU1VDQ0VTUykK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgRlNfc2V0X2ZsYWdzKGZvbnQsIEZM
QUdTX0NIRUNLX0NPTlRPVVJfV0lORElOR19PTik7IC8vIHdlIG5lZWQgY29ycmVjdGx5LXdvdW5k
IGNvbnRvdXJzIHRvIGZha2UgYm9sZAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChGU19zZXRf
Ym9sZF9wY3QoZm9udCwgMCkgIT0gU1VDQ0VTUykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgRlNfc2V0X2ZsYWdzKGZvbnQsIEZMQUdTX0NIRUNLX0NPTlRPVVJfV0lORElOR19P
RkYpOwotICAgIH0KLQotICAgIEZTX0ZJWEVEIHNrZXcgPSAwOwotICAgIGlmIChtX3N5bnRoZXRp
Y09ibGlxdWUpCi0gICAgICAgIHNrZXcgPSAxMzkzMDsgLy8gMTIgZGVncmVlcwotCi0gICAgRlNf
RklYRUQgZml4ZWRTY2FsZSA9IHN0ZDo6bWluKEZpeE11bChmbG9hdFRvSVR5cGVGaXhlZChzY2Fs
ZSksIGZsb2F0VG9JVHlwZUZpeGVkKG1fc2l6ZSkpLCBNQVhJVFlQRUZPTlRTQ0FMRSk7Ci0gICAg
aWYgKEZTX3NldF9zY2FsZShmb250LCBmaXhlZFNjYWxlLCBGaXhNdWwoZml4ZWRTY2FsZSwgc2tl
dyksIDAsIGZpeGVkU2NhbGUpICE9IFNVQ0NFU1MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmIChGU19zZXRfZmxhZ3MoZm9udCwgRkxBR1NfQ01BUF9PRkYpICE9IFNVQ0NFU1MpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChGU19zZXRfZmxhZ3MoZm9udCwgRkxBR1Nf
SElOVFNfT0ZGKSAhPSBTVUNDRVNTKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
RlNfc2V0X2ZsYWdzKGZvbnQsIEZMQUdTX0RFRkFVTFRfQ1NNX09GRikgIT0gU1VDQ0VTUykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fb3JpZW50YXRpb24gPT0gVmVydGljYWwp
IHsKLSAgICAgICAgaWYgKEZTX3NldF9mbGFncyhmb250LCBGTEFHU19WRVJUSUNBTF9PTikgIT0g
U1VDQ0VTUykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBzb3VyY2UpCi17Ci0gICAgbV9oYXJmQnV6ekZhY2UgPSBzb3VyY2Uu
bV9oYXJmQnV6ekZhY2U7Ci0gICAgbV9zY2FsZWRGb250ID0gMDsKLSAgICBpZiAoc291cmNlLm1f
Zm9udCAmJiBzb3VyY2UubV9mb250ICE9IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkgewot
ICAgICAgICBtX2ZvbnQgPSBGU19uZXdfY2xpZW50KHNvdXJjZS5tX2ZvbnQsIDApOwotICAgICAg
ICBtX25hbWUgPSBmYXN0U3RyRHVwKHNvdXJjZS5uYW1lKCkpOwotICAgICAgICBib29sIHJldCA9
IGFwcGx5U3RhdGUobV9mb250KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fZm9udCA9IHNvdXJjZS5tX2ZvbnQ7Ci19Ci0KLWNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUFzc2lnbihjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKLXsKLSAgICBtX2hhcmZCdXp6RmFjZSA9IG90aGVy
Lm1faGFyZkJ1enpGYWNlOwotICAgIG1fc2NhbGVkRm9udCA9IDA7Ci0gICAgaWYgKG90aGVyLm1f
Zm9udCAmJiBvdGhlci5tX2ZvbnQgIT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpKSB7Ci0g
ICAgICAgIG1fZm9udCA9IEZTX25ld19jbGllbnQob3RoZXIubV9mb250LCAwKTsKLSAgICAgICAg
ZmFzdEZyZWUobV9uYW1lKTsKLSAgICAgICAgbV9uYW1lID0gZmFzdFN0ckR1cChvdGhlci5uYW1l
KCkpOwotICAgICAgICBib29sIHJldCA9IGFwcGx5U3RhdGUobV9mb250KTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChyZXQsIHJldCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fZm9udCA9IG90aGVy
Lm1fZm9udDsKLQotICAgIHJldHVybiAqdGhpczsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRh
OjpwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fZm9udCA9PSBvdGhlci5tX2ZvbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgaWYgKCFtX2ZvbnQgfHwgbV9mb250ID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUo
KSB8fCAhb3RoZXIubV9mb250IHx8IG90aGVyLm1fZm9udCA9PSBoYXNoVGFibGVEZWxldGVkRm9u
dFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX2ZvbnQtPmN1
cl9zZm50ID09IG90aGVyLm1fZm9udC0+Y3VyX3NmbnQ7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1T
dHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVy
biAiaVR5cGUgRm9udCBEYXRhIjsKLX0KLSNlbmRpZgotCi1IYXJmQnV6ekZhY2UqIEZvbnRQbGF0
Zm9ybURhdGE6OmhhcmZCdXp6RmFjZSgpCi17Ci0gICAgaWYgKCFtX2hhcmZCdXp6RmFjZSkgewot
ICAgICAgICB1aW50NjRfdCB1bmlxdWVJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Piht
X2ZvbnQpOwotICAgICAgICBtX2hhcmZCdXp6RmFjZSA9IEhhcmZCdXp6RmFjZTo6Y3JlYXRlKGNv
bnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpLCB1bmlxdWVJRCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1faGFyZkJ1enpGYWNlLmdldCgpOwotfQotCi1GU19TVEFURSogRm9udFBsYXRm
b3JtRGF0YTo6c2NhbGVkRm9udChmbG9hdCBzY2FsZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2Nh
bGUgPiAwLjApOwotICAgIGlmIChtX3NjYWxlID09IHNjYWxlICYmIG1fc2NhbGVkRm9udCkKLSAg
ICAgICAgcmV0dXJuIG1fc2NhbGVkRm9udDsKLQotICAgIC8vIFRoaXMgbXVzdCBiZSBhbiBTVkcg
Rm9udC4gSXQgc2VlbXMgbGlrZSB0aGVyZSBpcyBhbiB1cHN0cmVhbSBidWcgd2hlcmUgd2ViIGFu
ZCBTVkcgZm9udHMKLSAgICAvLyBhcmUgdXNlZCBpbiBvbmUgVGV4dFJ1bi4gT3RoZXIgcG9ydHMg
c2VlbSB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aCBoYXZpbmcgYW4gU1ZHIEZvbnQgaW4KLSAgICAv
LyB0aGlzIHBhdGggc28gYmFpbCBvdXQgaW5zdGVhZCBvZiBjcmFzaC4KLSAgICBpZiAoIW1fZm9u
dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9zY2FsZWRGb250KSB7Ci0gICAgICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Y2xlYXJHbHlwaENhY2hlRm9yRm9udCht
X3NjYWxlZEZvbnQpOwotICAgICAgICBpZiAoRlNfZW5kX2NsaWVudChtX3NjYWxlZEZvbnQpICE9
IFNVQ0NFU1MpCi0gICAgICAgICAgICBDUkFTSCgpOwotICAgIH0KLQotICAgIG1fc2NhbGVkRm9u
dCA9IEZTX25ld19jbGllbnQobV9mb250LCAwKTsKLSAgICBpZiAoIWFwcGx5U3RhdGUobV9zY2Fs
ZWRGb250LCBzY2FsZSkpIHsKLSAgICAgICAgaWYgKEZTX2VuZF9jbGllbnQobV9zY2FsZWRGb250
KSAhPSBTVUNDRVNTKQotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgbV9zY2FsZWRGb250
ID0gMDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgbV9zY2FsZSA9IHNjYWxlOwot
Ci0gICAgcmV0dXJuIG1fc2NhbGVkRm9udDsKLX0KLQotdm9pZCBGb250UGxhdGZvcm1EYXRhOjpz
ZXRGYWtlQm9sZChib29sIGZha2VCb2xkKQotewotICAgIG1fc3ludGhldGljQm9sZCA9IGZha2VC
b2xkOwotICAgIGFwcGx5U3RhdGUobV9mb250KTsKLX0KLQotdm9pZCBGb250UGxhdGZvcm1EYXRh
OjpzZXRGYWtlSXRhbGljKGJvb2wgZmFrZUl0YWxpYykKLXsKLSAgICBtX3N5bnRoZXRpY09ibGlx
dWUgPSBmYWtlSXRhbGljOwotICAgIGFwcGx5U3RhdGUobV9mb250KTsKLX0KLQotY29uc3Qgdm9p
ZCogRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Gb250SGFuZGxlKCkgY29uc3QKLXsKLSAgICBB
U1NFUlQobV9mb250KTsKLSAgICByZXR1cm4gbV9mb250LT5jdXJfc2ZudDsKLX0KLQotYm9vbCBG
b250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKSBjb25zdAotewotICAgIEZTX0JZVEUqIHBv
c3RUYWJsZTsKLSAgICBGU19VTE9ORyBsZW5ndGg7Ci0gICAgaWYgKG1fZm9udCAmJiAocG9zdFRh
YmxlID0gRlNfZ2V0X3RhYmxlKG1fZm9udCwgVEFHX3Bvc3QsIFRCTF9FWFRSQUNULCAmbGVuZ3Ro
KSkpIHsKLSAgICAgICAgYm9vbCBmaXhlZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFRGX1BPU1QqPihw
b3N0VGFibGUpLT5pc0ZpeGVkUGl0Y2g7Ci0gICAgICAgIEZTX2ZyZWVfdGFibGUobV9mb250LCBw
b3N0VGFibGUpOwotICAgICAgICByZXR1cm4gZml4ZWQ7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9HbHlwaFBhZ2VUcmVlTm9kZUJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR2x5cGhQYWdlVHJlZU5vZGVC
bGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HbHlwaFBhZ2VUcmVlTm9kZUJsYWNrQmVycnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZVRy
ZWVOb2RlLmgiCi0KLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgPGZzX2Fw
aS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFz
cyBXb3JsZFR5cGVTY29wZWRQdHIgewotcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkRlc3Ry
b3lGdW5jdGlvbikoVCopOwotCi0gICAgV29ybGRUeXBlU2NvcGVkUHRyKFQqIHB0ciwgRGVzdHJv
eUZ1bmN0aW9uIGRlc3Ryb3kpCi0gICAgICAgIDogbV9wdHIocHRyKQotICAgICAgICAsIG1fZGVz
dHJveShkZXN0cm95KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZGVzdHJveSk7Ci0gICAgfQot
ICAgIH5Xb3JsZFR5cGVTY29wZWRQdHIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fcHRyKQotICAg
ICAgICAgICAgKCptX2Rlc3Ryb3kpKG1fcHRyKTsKLSAgICB9Ci0KLSAgICBUKiBnZXQoKSB7IHJl
dHVybiBtX3B0cjsgfQotcHJpdmF0ZToKLSAgICBUKiBtX3B0cjsKLSAgICBEZXN0cm95RnVuY3Rp
b24gbV9kZXN0cm95OwotfTsKLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7
Ci0gICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSAo
cG9zaXRpb24gPCBidWZmZXJMZW5ndGgpIHsKLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0g
ICAgICAgIHVuc2lnbmVkIG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgICAgICBVMTZfTkVY
VChidWZmZXIsIG5leHRQb3NpdGlvbiwgYnVmZmVyTGVuZ3RoLCBjaGFyYWN0ZXIpOwotCi0gICAg
ICAgIEZTX1VTSE9SVCBnbHlwaCA9IEZTX21hcF9jaGFyKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5mb250KCksIHN0YXRpY19jYXN0PEZTX1VMT05HPihjaGFyYWN0ZXIpKTsKLSAgICAgICAgaWYg
KCFnbHlwaCkKLSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAs
IDApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAg
ICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRh
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGkrKzsKLSAgICAgICAgcG9zaXRpb24gPSBuZXh0UG9z
aXRpb247Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhdmVHbHlwaHM7Ci19Ci0KLX0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhZGllbnRCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0dyYWRpZW50QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhZGllbnRCbGFja0Jl
cnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKLSAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdy
YWRpZW50LmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUg
IlVSTC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBEZXRlcm1pbmUgdGhlIHRvdGFsIG51bWJlciBvZiBz
dG9wcyBuZWVkZWQsIGluY2x1ZGluZyBwc2V1ZG8tc3RvcHMgYXQgdGhlCi0vLyBlbmRzIGFzIG5l
Y2Vzc2FyeS4KLXN0YXRpYyBzaXplX3QgdG90YWxTdG9wc05lZWRlZChjb25zdCBHcmFkaWVudDo6
Q29sb3JTdG9wKiBzdG9wRGF0YSwgc2l6ZV90IGNvdW50KQotewotICAgIC8vIE4uQi46IFRoZSB0
ZXN0cyBpbiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBrZXB0IGluIHN5bmMgd2l0aCB0aGUgb25lcyBp
bgotICAgIC8vIGZpbGxTdG9wcygpLCBvciBiYWRuZXNzIGhhcHBlbnMuCi0gICAgY29uc3QgR3Jh
ZGllbnQ6OkNvbG9yU3RvcCogc3RvcCA9IHN0b3BEYXRhOwotICAgIHNpemVfdCBjb3VudFVzZWQg
PSBjb3VudDsKLSAgICBpZiAoY291bnQgPCAxIHx8IHN0b3AtPnN0b3AgPiAwLjApCi0gICAgICAg
IGNvdW50VXNlZCsrOwotICAgIHN0b3AgKz0gY291bnQgLSAxOwotICAgIGlmIChjb3VudCA8IDEg
fHwgc3RvcC0+c3RvcCA8IDEuMCkKLSAgICAgICAgY291bnRVc2VkKys7Ci0gICAgcmV0dXJuIGNv
dW50VXNlZDsKLX0KLQotLy8gQ29sbGVjdCBzb3J0ZWQgc3RvcCBwb3NpdGlvbiBhbmQgY29sb3Ig
aW5mb3JtYXRpb24gaW50byB0aGUgcG9zIGFuZCBjb2xvcnMKLS8vIGJ1ZmZlcnMsIGVuc3VyaW5n
IHN0b3BzIGF0IGJvdGggMC4wIGFuZCAxLjAuIFRoZSBidWZmZXJzIG11c3QgYmUgbGFyZ2UKLS8v
IGVub3VnaCB0byBob2xkIGluZm9ybWF0aW9uIGZvciBhbGwgc3RvcHMsIGluY2x1ZGluZyB0aGUg
bmV3IGVuZHBvaW50cyBpZgotLy8gc3RvcHMgYXQgMC4wIGFuZCAxLjAgYXJlbid0IGFscmVhZHkg
aW5jbHVkZWQuCi1zdGF0aWMgdm9pZCBmaWxsU3RvcHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3Rv
cCogc3RvcERhdGEsIHNpemVfdCBjb3VudCwgZmxvYXQqIHBvcywgdW5zaWduZWQqIGNvbG9ycykK
LXsKLSAgICBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wKiBzdG9wID0gc3RvcERhdGE7Ci0gICAg
c2l6ZV90IHN0YXJ0ID0gMDsKLSAgICBpZiAoY291bnQgPCAxKSB7Ci0gICAgICAgIC8vIEEgZ3Jh
ZGllbnQgd2l0aCBubyBzdG9wcyBtdXN0IGJlIHRyYW5zcGFyZW50IGJsYWNrLgotICAgICAgICBw
b3NbMF0gPSAwLjA7Ci0gICAgICAgIGNvbG9yc1swXSA9IDA7Ci0gICAgICAgIHN0YXJ0ID0gMTsK
LSAgICB9IGVsc2UgaWYgKHN0b3AtPnN0b3AgPiAwLjApIHsKLSAgICAgICAgLy8gQ29weSB0aGUg
Zmlyc3Qgc3RvcCB0byAwLjAuIFRoZSBmaXJzdCBzdG9wIHBvc2l0aW9uIG1heSBoYXZlIGEgc2xp
Z2h0Ci0gICAgICAgIC8vIHJvdW5kaW5nIGVycm9yLCBidXQgd2UgZG9uJ3QgY2FyZSBpbiB0aGlz
IGZsb2F0IGNvbXBhcmlzb24sIHNpbmNlCi0gICAgICAgIC8vIDAuMCBjb21lcyB0aHJvdWdoIGNs
ZWFubHkgYW5kIHBlb3BsZSBhcmVuJ3QgbGlrZWx5IHRvIHdhbnQgYSBncmFkaWVudAotICAgICAg
ICAvLyB3aXRoIGEgc3RvcCBhdCAoMCArIGVwc2lsb24pLgotICAgICAgICBwb3NbMF0gPSAwLjA7
Ci0gICAgICAgIGNvbG9yc1swXSA9IENvbG9yKHN0b3AtPnJlZCwgc3RvcC0+Z3JlZW4sIHN0b3At
PmJsdWUsIHN0b3AtPmFscGhhKS5yZ2IoKTsKLSAgICAgICAgc3RhcnQgPSAxOwotICAgIH0KLQot
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgY291bnQ7IGkrKykgewotICAg
ICAgICBwb3NbaV0gPSBzdG9wLT5zdG9wOwotICAgICAgICBjb2xvcnNbaV0gPSBDb2xvcihzdG9w
LT5yZWQsIHN0b3AtPmdyZWVuLCBzdG9wLT5ibHVlLCBzdG9wLT5hbHBoYSkucmdiKCk7Ci0gICAg
ICAgICsrc3RvcDsKLSAgICB9Ci0KLSAgICAvLyBDb3B5IHRoZSBsYXN0IHN0b3AgdG8gMS4wIGlm
IG5lZWRlZC4gU2VlIGNvbW1lbnQgYWJvdmUgYWJvdXQgdGhpcyBmbG9hdAotICAgIC8vIGNvbXBh
cmlzb24uCi0gICAgaWYgKGNvdW50IDwgMSB8fCAoLS1zdG9wKS0+c3RvcCA8IDEuMCkgewotICAg
ICAgICBwb3Nbc3RhcnQgKyBjb3VudF0gPSAxLjA7Ci0gICAgICAgIGNvbG9yc1tzdGFydCArIGNv
dW50XSA9IGNvbG9yc1tzdGFydCArIGNvdW50IC0gMV07Ci0gICAgfQotfQotCi0KLUJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R3JhZGllbnQqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRp
ZW50KCkKLXsKLSAgICBpZiAobV9ncmFkaWVudCkKLSAgICAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7
Ci0KLSAgICBpZiAobV9yYWRpYWwpCi0gICAgICAgIG1fZ3JhZGllbnQgPSBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkdyYWRpZW50OjpjcmVhdGVSYWRpYWxHcmFkaWVudChtX3AwLCBt
X3AxLCBtX3IwLCBtX3IxLCBtX2FzcGVjdFJhdGlvLCAoQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpHcmFkaWVudDo6U3ByZWFkTWV0aG9kKW1fc3ByZWFkTWV0aG9kKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fZ3JhZGllbnQgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6Okdy
YWRpZW50OjpjcmVhdGVMaW5lYXJHcmFkaWVudChtX3AwLCBtX3AxLCAoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpHcmFkaWVudDo6U3ByZWFkTWV0aG9kKW1fc3ByZWFkTWV0aG9kKTsK
LQotICAgIHNvcnRTdG9wc0lmTmVjZXNzYXJ5KCk7Ci0gICAgQVNTRVJUKG1fc3RvcHNTb3J0ZWQp
OwotCi0gICAgc2l6ZV90IGNvdW50VXNlZCA9IHRvdGFsU3RvcHNOZWVkZWQobV9zdG9wcy5kYXRh
KCksIG1fc3RvcHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoY291bnRVc2VkID49IDIpOwotICAgIEFT
U0VSVChjb3VudFVzZWQgPj0gbV9zdG9wcy5zaXplKCkpOwotCi0gICAgVmVjdG9yPGZsb2F0PiBw
b3MoY291bnRVc2VkKTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGNvbG9ycyhjb3VudFVzZWQpOwot
ICAgIGZpbGxTdG9wcyhtX3N0b3BzLmRhdGEoKSwgbV9zdG9wcy5zaXplKCksIHBvcy5kYXRhKCks
IGNvbG9ycy5kYXRhKCkpOwotICAgIG1fZ3JhZGllbnQtPnNldENvbG9yU3RvcHMocG9zLmRhdGEo
KSwgY29sb3JzLmRhdGEoKSwgY291bnRVc2VkKTsKLQotICAgIGlmICghbV9ncmFkaWVudFNwYWNl
VHJhbnNmb3JtYXRpb24uaXNJZGVudGl0eSgpKQotICAgICAgICBtX2dyYWRpZW50LT5zZXRMb2Nh
bE1hdHJpeChyZWludGVycHJldF9jYXN0PGNvbnN0IGRvdWJsZSo+KCZtX2dyYWRpZW50U3BhY2VU
cmFuc2Zvcm1hdGlvbikpOwotCi0gICAgcmV0dXJuIG1fZ3JhZGllbnQ7Ci19Ci0KLXZvaWQgR3Jh
ZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci0gICAgZGVsZXRlIG1fZ3JhZGllbnQ7Ci0gICAg
bV9ncmFkaWVudCA9IDA7Ci19Ci0KLXZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcGxhdGZvcm1HcmFkaWVu
dCgpLT5maWxsKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKLX0KLQotdm9pZCBH
cmFkaWVudDo6c2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKQotewotICAgIHBsYXRmb3JtR3Jh
ZGllbnQoKS0+c2V0TG9jYWxNYXRyaXgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBkb3VibGUqPigm
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKSk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhp
Y3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MjMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgVVNFKDNEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgotI2luY2x1ZGUgIldlYkdM
TGF5ZXJXZWJLaXRUaHJlYWQuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBo
aWNzLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg+Ci0j
aW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+Ci0jaW5jbHVkZSA8VGlsZWRJbWFnZS5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoQXR0cmlidXRlcyBhdHRyaWJzLCBIb3N0V2luZG93
KiBob3N0V2luZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKLXsKLSAgICAvLyBUaGlzIGlt
cGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5
IHRvIGEgd2luZG93LgotICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdy
YXBoaWNzQ29udGV4dDNEKGF0dHJpYnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7Ci19Ci0K
LUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJT
dHlsZSByZW5kZXJTdHlsZSkKLSAgICA6IG1fY3VycmVudFdpZHRoKDApCi0gICAgLCBtX2N1cnJl
bnRIZWlnaHQoMCkKLSAgICAsIG1fY29udGV4dChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OmNyZWF0ZVdlYkdMQ29udGV4dCgpKQotICAgICwgbV9jb21waWxlcihTSF9FU1NMX09VVFBV
VCkKLSAgICAsIG1fYXR0cnMoYXR0cnMpCi0gICAgLCBtX3RleHR1cmUoMCkKLSAgICAsIG1fZmJv
KDApCi0gICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQotICAgICwgbV9sYXllckNvbXBvc2l0
ZWQoZmFsc2UpCi0gICAgLCBtX2ludGVybmFsQ29sb3JGb3JtYXQoR0xfUkdCQSkKLSAgICAsIG1f
aXNJbWFnaW5hdGlvbkhhcmR3YXJlKDApCi17Ci0gICAgaWYgKHJlbmRlclN0eWxlICE9IFJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KSB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgICAgICBtX2NvbXBvc2l0aW5nTGF5ZXIgPSBXZWJHTExheWVyV2ViS2l0VGhyZWFkOjpj
cmVhdGUoKTsKLSNlbmRpZgotICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgICAg
ICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgotICAgICAgICA6OmdsR2VuVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtX3RleHR1cmUpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsK
LSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLQotICAgICAgICAvLyBDcmVhdGUgYW4g
RkJPLgotICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgaWYgKG1f
YXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgOjpnbEdlblJlbmRl
cmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgbV9zdGF0ZS5ib3Vu
ZEZCTyA9IG1fZmJvOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAg
ICBzdGF0aWNfY2FzdDxXZWJHTExheWVyV2ViS2l0VGhyZWFkKj4obV9jb21wb3NpdGluZ0xheWVy
LmdldCgpKS0+c2V0V2ViR0xDb250ZXh0KHRoaXMpOwotI2VuZGlmCi0gICAgfQotCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBjb25zdCBjaGFyKiByZW5kZXJlciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfUkVOREVSRVIpKTsKLSAgICBt
X2lzSW1hZ2luYXRpb25IYXJkd2FyZSA9IHN0ZDo6c3Ryc3RyKHJlbmRlcmVyLCAiUG93ZXJWUiBT
R1giKTsKLQotICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVpbHRJblJlc291
cmNlcyBBTkdMRVJlc291cmNlczsKLSAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJl
c291cmNlcyk7Ci0KLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRF
WF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5H
TEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4
VmFyeWluZ1ZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9D
T01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5p
dHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5J
Rk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7
Ci0KLSAgICBHQzNEaW50IHJhbmdlWzJdLCBwcmVjaXNpb247Ci0gICAgZ2V0U2hhZGVyUHJlY2lz
aW9uRm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpISUdIX0ZMT0FULCByYW5nZSwgJnByZWNpc2lvbik7Ci0gICAgQU5HTEVSZXNvdXJj
ZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID0gKHJhbmdlWzBdIHx8IHJhbmdlWzFdIHx8IHByZWNp
c2lvbik7Ci0KLSAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0K
LSAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6
On5HcmFwaGljc0NvbnRleHQzRCgpCi17Ci0gICAgaWYgKG1fdGV4dHVyZSkgewotICAgICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3Rl
eHR1cmUpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCi0g
ICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpOwotICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgfQot
Ci0gICAgc3RhdGljX2Nhc3Q8V2ViR0xMYXllcldlYktpdFRocmVhZCAqPihtX2NvbXBvc2l0aW5n
TGF5ZXIuZ2V0KCkpLT53ZWJHTENvbnRleHREZXN0cm95ZWQoKTsgLy8gTXVzdCByZWxlYXNlIGNv
bXBvc2l0aW5nIGxheWVyIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBjb250ZXh0LgotICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6ZGVzdHJveVdlYkdMQ29udGV4dChtX2NvbnRleHQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAg
aWYgKG1fbGF5ZXJDb21wb3NpdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpCi0gICAgICAgIHJlc29sdmVN
dWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLQotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1
ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKLXsKLSAgICAvLyBBIEJsYWNrQmVycnktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24g
b2YgcmVzaGFwZUZCT3MgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgY29udGFpbnM6Ci0gICAgLy8g
IC0gYW4gSW1hZ2luYXRpb24tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYW50aS1hbGlhc2lu
ZwotICAgIC8vICAtIGFuIEltYWdpbmF0aW9uLXNwZWNpZmljIGZpeCBmb3IgRkJPcyBvZiBzaXpl
IGxlc3MgdGhhbiAoMTYsMTYpCi0KLSAgICBpbnQgZmJvV2lkdGggPSBzaXplLndpZHRoKCk7Ci0g
ICAgaW50IGZib0hlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0KLSAgICAvLyBJbWFnaW5hdGlvbi1z
cGVjaWZpYyBmaXgKLSAgICBpZiAobV9pc0ltYWdpbmF0aW9uSGFyZHdhcmUpIHsKLSAgICAgICAg
ZmJvV2lkdGggPSBzdGQ6Om1heChmYm9XaWR0aCwgMTYpOwotICAgICAgICBmYm9IZWlnaHQgPSBz
dGQ6Om1heChmYm9IZWlnaHQsIDE2KTsKLSAgICB9Ci0KLSAgICBHTHVpbnQgaW50ZXJuYWxDb2xv
ckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKLSAg
ICBpZiAobV9hdHRycy5hbHBoYSkgewotICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xf
UkdCQTsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0g
R0xfUkdCOwotICAgIH0KLSAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgp
IHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMg
cmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAgICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4
dDNEIGNvbnN0cnVjdG9yLgotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsICYmIG1fYXR0cnMu
ZGVwdGgpCi0gICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRI
MjRfU1RFTkNJTDhfRVhUOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbnRlcm5hbERlcHRo
U3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgIH0KLQotICAgIEdMaW50
IHNhbXBsZUNvdW50ID0gODsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAg
R0xpbnQgbWF4U2FtcGxlQ291bnQ7Ci0gICAgICAgIC8vIEhhcmRjb2RlIHRoZSBtYXhpbXVtIG51
bWJlciBvZiBzYW1wbGVzIGR1ZSB0byBoZWFkZXIgaXNzdWUgKFBSMTMyMTgzKQotICAgICAgICAv
LyA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1NBTVBMRVNfSU1HLCAmbWF4U2FtcGxlQ291bnQpOwot
ICAgICAgICBtYXhTYW1wbGVDb3VudCA9IDQ7Ci0gICAgICAgIHNhbXBsZUNvdW50ID0gc3RkOjpt
aW4oOCwgbWF4U2FtcGxlQ291bnQpOwotICAgIH0KLQotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8g
PSBmYWxzZTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykgewotICAgICAgICBt
dXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgfQotCi0gICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgZmJvV2lkdGgsIGZib0hlaWdo
dCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgRXh0ZW5zaW9u
czNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAgIGlmIChtX2F0dHJzLmFudGlh
bGlhcykgewotICAgICAgICBleHRlbnNpb25zLT5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2Ft
cGxlSU1HKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmUsIDAsIHNhbXBsZUNvdW50KTsKLQotICAgICAgICBpZiAobV9h
dHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAgIDo6Z2xCaW5kUmVu
ZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
LSAgICAgICAgICAgIGV4dGVuc2lvbnMtPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlN
RyhHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQsIGZib1dpZHRoLCBmYm9IZWlnaHQpOwotCi0gICAgICAgICAgICBpZiAobV9hdHRycy5z
dGVuY2lsKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJV
RkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChtX2F0dHJz
LmRlcHRoKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAw
KTsKLQotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKLSAg
ICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdl
RVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBmYm9X
aWR0aCwgZmJvSGVpZ2h0KTsKLQotICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAg
ICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBt
X2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAg
ICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQo
R0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOjpnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0KLSAgICBsb2dGcmFtZUJ1ZmZlclN0YXR1cyhf
X0xJTkVfXyk7Ci0KLSAgICByZXR1cm4gbXVzdFJlc3RvcmVGQk87Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmxvZ0ZyYW1lQnVmZmVyU3RhdHVzKGludCBsaW5lKQotewotICAgIEJCTE9H
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJDaGVja2luZyBGcmFtZUJ1ZmZl
ciBzdGF0dXMgYXQgbGluZSAlZDogIiwgbGluZSk7Ci0gICAgc3dpdGNoIChnbENoZWNrRnJhbWVi
dWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSkgewotICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEU6Ci0gICAgICAgIEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dM
ZXZlbEluZm8sICJDT01QTEVURSB8ICIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDoKLSAgICAgICAgQkJMT0coQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIklOQ09NUExFVEUgQVRUQUNITUVOVCB8ICIpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lO
R19BVFRBQ0hNRU5UOgotICAgICAgICBCQkxPRyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2
ZWxJbmZvLCAiTUlTU0lORyBBVFRBQ0hNRU5UIHwgIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOgotICAgICAgICBCQkxPRyhC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiSU5DT01QTEVURSBESU1FTlNJT05T
IHwgIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JU
RUQ6Ci0gICAgICAgIEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJV
TlNVUFBPUlRFRCB8ICIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTVVMVElTQU1QTEVfRVhUOgotICAgICAgICBCQkxPRyhCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiSU5DT01QTEVURSBNVUxUSVNBTVBMRSB8ICIpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGdsR2V0RXJyb3IoKSkgewotICAgIGNhc2Ug
R0xfTk9fRVJST1I6Ci0gICAgICAgIEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZl
bEluZm8sICJOTyBFUlJPUiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdMX0lOVkFMSURf
RU5VTToKLSAgICAgICAgQkJMT0coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywg
IklOVkFMSUQgRU5VTSIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdMX0lOVkFMSURfVkFM
VUU6Ci0gICAgICAgIEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJJ
TlZBTElEIFZBTFVFIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfSU5WQUxJRF9PUEVS
QVRJT046Ci0gICAgICAgIEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8s
ICJJTlZBTElEIE9QRVJBVElPTiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdMX09VVF9P
Rl9NRU1PUlk6Ci0gICAgICAgIEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbElu
Zm8sICJPVVQgT0YgTUVNT1JZIik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBCQkxPRyhC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiXG4iKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0lNRyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIHZvaWQqIGRhdGEpCi17Ci0gICAgLy8gQ3VycmVudGx5IG9ubHkgZm9ybWF0PVJHQkEsIHR5
cGU9VU5TSUdORURfQllURSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb246IGh0dHA6
Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LwotICAgIC8vIElm
IHRoaXMgZXZlciBjaGFuZ2VzLCB0aGlzIGNvZGUgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQuCi0K
LSAgICAvLyBDYWxjdWxhdGUgdGhlIHN0cmlkZXMgb2Ygb3VyIGRhdGEgYW5kIGNhbnZhcwotICAg
IHVuc2lnbmVkIGZvcm1hdFNpemUgPSA0OyAvLyBSR0JBIFVOU0lHTkVEX0JZVEUKLSAgICB1bnNp
Z25lZCBkYXRhU3RyaWRlID0gd2lkdGggKiBmb3JtYXRTaXplOwotICAgIHVuc2lnbmVkIGNhbnZh
c1N0cmlkZSA9IG1fY3VycmVudFdpZHRoICogZm9ybWF0U2l6ZTsKLQotICAgIC8vIElmIHdlIGFy
ZSB1c2luZyBhIHBhY2sgYWxpZ25tZW50IG9mIDgsIHRoZW4gd2UgbmVlZCB0byBhbGlnbiBvdXIg
c3RyaWRlcyB0byA4IGJ5dGUgYm91bmRhcmllcwotICAgIC8vIFNlZTogaHR0cDovL2VuLndpa2lw
ZWRpYS5vcmcvd2lraS9EYXRhX3N0cnVjdHVyZV9hbGlnbm1lbnQgKGNvbXB1dGluZyBwYWRkaW5n
KQotICAgIGludCBwYWNrQWxpZ25tZW50OwotICAgIGdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElH
Tk1FTlQsICZwYWNrQWxpZ25tZW50KTsKLSAgICBpZiAoOCA9PSBwYWNrQWxpZ25tZW50KSB7Ci0g
ICAgICAgIGRhdGFTdHJpZGUgPSAoZGF0YVN0cmlkZSArIDcpICYgfjc7Ci0gICAgICAgIGNhbnZh
c1N0cmlkZSA9IChjYW52YXNTdHJpZGUgKyA3KSAmIH43OwotICAgIH0KLQotICAgIHVuc2lnbmVk
IGNoYXIqIGNhbnZhc0RhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltjYW52YXNTdHJpZGUgKiBtX2N1
cnJlbnRIZWlnaHRdOwotICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBt
X2N1cnJlbnRIZWlnaHQsIGZvcm1hdCwgdHlwZSwgY2FudmFzRGF0YSk7Ci0KLSAgICAvLyBJZiB3
ZSBmYWlsZWQgdG8gcmVhZCBvdXIgY2FudmFzIGRhdGEgZHVlIHRvIGEgR0wgZXJyb3IsIGRvbid0
IGNvbnRpbnVlCi0gICAgaW50IGVycm9yID0gZ2xHZXRFcnJvcigpOwotICAgIGlmIChHTF9OT19F
UlJPUiAhPSBlcnJvcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDbGVhciBvdXIgZGF0YSBpbiBjYXNlIHNvbWUg
b2YgaXQgbGllcyBvdXRzaWRlIHRoZSBib3VuZHMgb2Ygb3VyIGNhbnZhcwotICAgIC8vIFRPRE86
IGRvbid0IGRvIHRoaXMgaWYgYWxsIG9mIHRoZSBkYXRhIGxpZXMgaW5zaWRlIHRoZSBib3VuZHMg
b2YgdGhlIGNhbnZhcwotICAgIG1lbXNldChkYXRhLCAwLCBkYXRhU3RyaWRlICogaGVpZ2h0KTsK
LQotICAgIC8vIENhbGN1bGF0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIG91ciBjYW52YXMgYW5kIGRh
dGEgYm91bmRzCi0gICAgSW50UmVjdCBkYXRhUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAg
ICBJbnRSZWN0IGNhbnZhc1JlY3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdo
dCk7Ci0gICAgSW50UmVjdCBub25aZXJvRGF0YVJlY3QgPSBpbnRlcnNlY3Rpb24oZGF0YVJlY3Qs
IGNhbnZhc1JlY3QpOwotCi0gICAgdW5zaWduZWQgeERhdGFPZmZzZXQgPSB4IDwgMCA/IC14ICog
Zm9ybWF0U2l6ZSA6IDA7Ci0gICAgdW5zaWduZWQgeURhdGFPZmZzZXQgPSB5IDwgMCA/IC15ICog
ZGF0YVN0cmlkZSA6IDA7Ci0gICAgdW5zaWduZWQgeENhbnZhc09mZnNldCA9IG5vblplcm9EYXRh
UmVjdC54KCkgKiBmb3JtYXRTaXplOwotICAgIHVuc2lnbmVkIHlDYW52YXNPZmZzZXQgPSBub25a
ZXJvRGF0YVJlY3QueSgpICogY2FudmFzU3RyaWRlOwotICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArIHhEYXRhT2Zmc2V0ICsgeURhdGFP
ZmZzZXQ7Ci0gICAgdW5zaWduZWQgY2hhciogc3JjID0gY2FudmFzRGF0YSArIHhDYW52YXNPZmZz
ZXQgKyB5Q2FudmFzT2Zmc2V0OwotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vblplcm9E
YXRhUmVjdC5oZWlnaHQoKTsgcm93KyspIHsKLSAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCBub25a
ZXJvRGF0YVJlY3Qud2lkdGgoKSAqIGZvcm1hdFNpemUpOwotICAgICAgICBkc3QgKz0gZGF0YVN0
cmlkZTsKLSAgICAgICAgc3JjICs9IGNhbnZhc1N0cmlkZTsKLSAgICB9Ci0KLSAgICBkZWxldGUg
W10gY2FudmFzRGF0YTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0Nh
bnZhc0J1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0gICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjp1c2VXZWJHTENvbnRleHQobV9jb250ZXh0KTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3ND
b250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGV4dHVy
ZTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGV4dDsK
LX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLVBsYXRmb3JtTGF5ZXIqIEdy
YXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9j
b21wb3NpdGluZ0xheWVyLmdldCgpOwotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBp
bWFnZVdpZHRoLCBpbnQgaW1hZ2VIZWlnaHQsIGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hl
aWdodCwKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgRmxvYXRSZWN0IHNy
YygwLCAwLCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0KTsKLSAgICBGbG9hdFJlY3QgZHN0KDAs
IDAsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKLSAgICBkb3VibGUgb2xkVHJhbnNmb3JtWzZd
OwotICAgIGRvdWJsZSBmbGlwWVRyYW5zZm9ybVs2XSA9IHsgMS4wZiwgMC4wZiwgMC4wZiwgLTEu
MGYsIDAuMGYsIGltYWdlSGVpZ2h0IH07Ci0gICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmdldFRyYW5zZm9ybShvbGRUcmFuc2Zvcm0pOwotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5zZXRUcmFuc2Zvcm0oZmxpcFlUcmFuc2Zvcm0pOwotICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6VGlsZWRJbWFnZSBpbWFnZShJbnRTaXplKGltYWdlV2lkdGgsIGltYWdl
SGVpZ2h0KSwgcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgdW5zaWduZWQqPihpbWFnZVBpeGVs
cykpOwotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5hZGRJbWFnZShkc3QsIHNyYywg
JmltYWdlKTsKLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0VHJhbnNmb3JtKG9s
ZFRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0
Q2FsbGJhY2soUGFzc093blB0cjxDb250ZXh0TG9zdENhbGxiYWNrPiBjYWxsYmFjaykKLXsKLSAg
ICBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RPcGVuR0xFUyo+KGdldEV4dGVuc2lvbnMoKSktPnNl
dEVYVENvbnRleHRMb3N0Q2FsbGJhY2soY2FsbGJhY2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpzZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhQYXNzT3duUHRyPEVycm9yTWVzc2FnZUNh
bGxiYWNrPikKLXsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjp+SW1h
Z2VFeHRyYWN0b3IoKQotewotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJh
Y3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCkKLXsKLSAgICBp
ZiAoIW1faW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAg
ICBpZiAoIW5hdGl2ZUltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2ltYWdl
V2lkdGggPSBuYXRpdmVJbWFnZS0+d2lkdGgoKTsKLSAgICBtX2ltYWdlSGVpZ2h0ID0gbmF0aXZl
SW1hZ2UtPmhlaWdodCgpOwotICAgIGlmICghbV9pbWFnZVdpZHRoIHx8ICFtX2ltYWdlSGVpZ2h0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBpbWFnZVNpemUgPSBtX2lt
YWdlV2lkdGggKiBtX2ltYWdlSGVpZ2h0OwotICAgIG1faW1hZ2VEYXRhLnJlc2l6ZShpbWFnZVNp
emUpOwotICAgIGlmICghbmF0aXZlSW1hZ2UtPnJlYWRQaXhlbHMobV9pbWFnZURhdGEuZGF0YSgp
LCBpbWFnZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBSYXcgaW1hZ2Ug
ZGF0YSBpcyBwcmVtdWx0aXBsaWVkCi0gICAgbV9hbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7Ci0g
ICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQotICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvVW5t
dWx0aXBseTsKLQotICAgIG1faW1hZ2VQaXhlbERhdGEgPSBtX2ltYWdlRGF0YS5kYXRhKCk7Ci0g
ICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXRCR1JBODsKLSAgICBtX2ltYWdlU291
cmNlVW5wYWNrQWxpZ25tZW50ID0gMDsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoM0RfR1JBUEhJQ1MpCi0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0
QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24g
MTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9H
cmFwaGljc0NvbnRleHRCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NjAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg+Ci0j
aW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSB7Ci1wdWJs
aWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBwbGF0Zm9ybUNvbnRleHQpCi0gICAgICAgIDogbV9wbGF0Zm9ybUNvbnRleHQocGxh
dGZvcm1Db250ZXh0KQotICAgICAgICAsIG1faXNDb21wb3NpdGVkKGZhbHNlKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogbV9wbGF0Zm9ybUNvbnRleHQ7Ci0g
ICAgYm9vbCBtX2lzQ29tcG9zaXRlZDsKLX07Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0
Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAg
ICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHBsYXRmb3JtQ29u
dGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQotewot
ICAgIGRlbGV0ZSBtX2RhdGE7Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+
bV9wbGF0Zm9ybUNvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZv
cm1TdGF0ZSgpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNhdmUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVzdG9yZSgp
OwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRGaWxsQ29sb3IobV9zdGF0ZS5maWxsQ29sb3Iu
cmdiKCkpOwotICAgIGlmIChoYXNTaGFkb3coKSkKLSAgICAgICAgc2V0UGxhdGZvcm1TaGFkb3co
bV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dD
b2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsKLSAgICBlbHNlCi0gICAgICAgIGNsZWFy
UGxhdGZvcm1TaGFkb3coKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlQ29sb3Io
bV9zdGF0ZS5zdHJva2VDb2xvci5yZ2IoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFN0
cm9rZVN0eWxlKHN0YXRpY19jYXN0PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U3Ry
b2tlU3R5bGU+KG1fc3RhdGUuc3Ryb2tlU3R5bGUpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
c2V0U3Ryb2tlVGhpY2tuZXNzKG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLSAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0VGV4dERyYXdpbmdNb2RlKG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wg
YWNjZWxlcmF0ZWQpCi17Ci0gICAgbV9kYXRhLT5tX2lzQ29tcG9zaXRlZCA9IGFjY2VsZXJhdGVk
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25z
dAotewotICAgIHJldHVybiBtX2RhdGEtPm1faXNDb21wb3NpdGVkOwotfQotCi1BZmZpbmVUcmFu
c2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlKSBjb25zdAot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVUcmFu
c2Zvcm0oKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQ7Ci0gICAgcGxhdGZvcm1Db250
ZXh0KCktPmdldFRyYW5zZm9ybSgoZG91YmxlKikmcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtYXRpb24pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGN1cnJlbnQ7Ci0gICAgcGxhdGZv
cm1Db250ZXh0KCktPmdldFRyYW5zZm9ybSgoZG91YmxlKikmY3VycmVudCk7Ci0gICAgY3VycmVu
dCAqPSB0cmFuc2Zvcm1hdGlvbjsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0VHJhbnNmb3Jt
KChkb3VibGUqKSZjdXJyZW50KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybWF0aW9uKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5z
ZXRUcmFuc2Zvcm0oKGNvbnN0IGRvdWJsZSopJnRyYW5zZm9ybWF0aW9uKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3JzKQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFmZmlu
ZVRyYW5zZm9ybSBjdXJyZW50OwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5nZXRUcmFuc2Zvcm0o
KGRvdWJsZSopJmN1cnJlbnQpOwotICAgIGN1cnJlbnQuc2NhbGVOb25Vbmlmb3JtKHNjYWxlRmFj
dG9ycy53aWR0aCgpLCBzY2FsZUZhY3RvcnMuaGVpZ2h0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5zZXRUcmFuc2Zvcm0oKGRvdWJsZSopJmN1cnJlbnQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGN1cnJlbnQ7Ci0g
ICAgcGxhdGZvcm1Db250ZXh0KCktPmdldFRyYW5zZm9ybSgoZG91YmxlKikmY3VycmVudCk7Ci0g
ICAgY3VycmVudC5yb3RhdGUocmFkMmRlZyhyYWRpYW5zKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0
KCktPnNldFRyYW5zZm9ybSgoZG91YmxlKikmY3VycmVudCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBjdXJy
ZW50OwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5nZXRUcmFuc2Zvcm0oKGRvdWJsZSopJmN1cnJl
bnQpOwotICAgIGN1cnJlbnQudHJhbnNsYXRlKGR4LCBkeSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0
KCktPnNldFRyYW5zZm9ybSgoZG91YmxlKikmY3VycmVudCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5hZGRFbGxpcHNlKEZsb2F0UmVjdChyZWN0KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBw
b2ludHMsIGJvb2wpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmFkZENvbnZleFBvbHlnb24obnVtUG9pbnRz
LCAoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0UG9pbnQqKXBvaW50cyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5hZGREcmF3UmVjdChGbG9hdFJlY3QocmVjdCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6R3JhZGllbnQqIHBsYXRmb3JtR3JhZGllbnQgPSBmaWxsR3Jh
ZGllbnQoKSA/IGZpbGxHcmFkaWVudCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkgOiAwOwotICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGF0dGVybiogcGxhdGZvcm1QYXR0ZXJuID0g
ZmlsbFBhdHRlcm4oKSA/IGZpbGxQYXR0ZXJuKCktPnBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFu
c2Zvcm0oKSkgOiAwOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5hZGRGaWxsUmVjdChyZWN0LCBw
bGF0Zm9ybUdyYWRpZW50LCBwbGF0Zm9ybVBhdHRlcm4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEZpbGxDb2xvcihjb2xvci5yZ2IoKSk7
Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmFkZEZpbGxSZWN0KHJlY3QpOwotICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5zZXRGaWxsQ29sb3IobV9zdGF0ZS5maWxsQ29sb3IucmdiKCkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+YWRkQ2xlYXJSZWN0KHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoc3Ryb2tlR3JhZGllbnQoKSB8fCBzdHJva2VQYXR0ZXJuKCkpIHsKLSAgICAgICAgUGF0aCBw
YXRoOwotICAgICAgICBwYXRoLmFkZFJlY3QocmVjdCk7Ci0gICAgICAgIGZsb2F0IG9sZExpbmVX
aWR0aCA9IG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOwotICAgICAgICBzZXRQbGF0Zm9ybVN0cm9r
ZVRoaWNrbmVzcyhsaW5lV2lkdGgpOwotICAgICAgICBzdHJva2VQYXRoKHBhdGgpOwotICAgICAg
ICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhvbGRMaW5lV2lkdGgpOwotICAgIH0gZWxzZQot
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YWRkU3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0
LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9h
dFJvdW5kZWRSZWN0IHIgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRSb3VuZGVkUmVjdChG
bG9hdFJlY3QocmVjdCksIEZsb2F0U2l6ZSh0b3BMZWZ0KSwgRmxvYXRTaXplKHRvcFJpZ2h0KSwg
RmxvYXRTaXplKGJvdHRvbUxlZnQpLCBGbG9hdFNpemUoYm90dG9tUmlnaHQpKTsKLSAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+c2V0RmlsbENvbG9yKGNvbG9yLnJnYigpKTsKLSAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+YWRkUm91bmRlZFJlY3Qocik7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEZp
bGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvci5yZ2IoKSk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3Vu
ZGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0U2l6ZSBhZGp1c3RlZE9mZnNldCA9
IG9mZnNldDsKLQotICAgIGlmIChtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0g
ICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRl
ZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAvLyBXZSBmbGlwIHRoZSBo
ZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAg
ICAgICBhZGp1c3RlZE9mZnNldC5zZXRIZWlnaHQoLW9mZnNldC5oZWlnaHQoKSk7Ci0gICAgfQot
Ci0gICAgLy8gaWYgdGhlcmUgaXMgYW4gaW52YWxpZCBzaGFkb3cgY29sb3IsIHdlJ3JlIHN1cHBv
c2VkIHRvIHVzZSBBcHBsZSdzIENHIGRlZmF1bHQKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0
U2hhZG93KGFkanVzdGVkT2Zmc2V0LCBibHVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvci5yZ2Io
KSA6IG1ha2VSR0JBKDAsIDAsIDAsIDB4RkYgLyAzKSwgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJh
bnNmb3Jtcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93
KCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xlYXJTaGFkb3coKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5iZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQotewotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5l
Q2FwIGxjKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRMaW5lQ2FwKChCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OkxpbmVDYXApbGMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldExpbmVEYXNoKGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCksIGRh
c2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpv
aW4gbGopCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldExpbmVKb2luKChCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OkxpbmVKb2luKWxqKTsgLy8gbmFtaW5nIGNvaW5jaWRlcwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRBbHBoYShmbG9hdCBvcGFjaXR5KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRBbHBoYShvcGFjaXR5
KTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXAocmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwT3V0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBP
dXQoRmxvYXRSZWN0KHJlY3QpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252
ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9v
bCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcENvbnZleFBvbHlnb24obnVtUG9pbnRzLCAoY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0UG9pbnQqKXBvaW50cyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgUm91bmRlZFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0Um91bmRlZFJlY3QgciA9IEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpGbG9hdFJvdW5kZWRSZWN0KAotICAgICAgICBGbG9hdFJlY3QocmVjdC5yZWN0KCkpLAot
ICAgICAgICBGbG9hdFNpemUocmVjdC5yYWRpaSgpLnRvcExlZnQoKSksCi0gICAgICAgIEZsb2F0
U2l6ZShyZWN0LnJhZGlpKCkudG9wUmlnaHQoKSksCi0gICAgICAgIEZsb2F0U2l6ZShyZWN0LnJh
ZGlpKCkuYm90dG9tTGVmdCgpKSwKLSAgICAgICAgRmxvYXRTaXplKHJlY3QucmFkaWkoKS5ib3R0
b21SaWdodCgpKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBSb3VuZGVkUmVjdChyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBSb3Vu
ZGVkUmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRSb3VuZGVkUmVjdCByID0g
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0Um91bmRlZFJlY3QoCi0gICAgICAgIEZsb2F0UmVj
dChyZWN0LnJlY3QoKSksCi0gICAgICAgIEZsb2F0U2l6ZShyZWN0LnJhZGlpKCkudG9wTGVmdCgp
KSwKLSAgICAgICAgRmxvYXRTaXplKHJlY3QucmFkaWkoKS50b3BSaWdodCgpKSwKLSAgICAgICAg
RmxvYXRTaXplKHJlY3QucmFkaWkoKS5ib3R0b21MZWZ0KCkpLAotICAgICAgICBGbG9hdFNpemUo
cmVjdC5yYWRpaSgpLmJvdHRvbVJpZ2h0KCkpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xp
cE91dFJvdW5kZWRSZWN0KHIpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJv
dW5kcygpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IHJldHVybiB0aGUgbWF4IEludFJlY3QgZm9y
IG5vdwotICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KElOVF9NSU4gLyAyLCBJTlRfTUlOIC8g
MiksIEludFNpemUoSU5UX01BWCwgSU5UX01BWCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBJbnRSZWN0JikKLXsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5n
TW9kZUZsYWdzIG1vZGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFRleHREcmF3aW5nTW9kZShtb2Rl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRTdHJva2VD
b2xvcihjb2xvci5yZ2IoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0cm9rZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ry
b2tlU3R5bGUoKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U3Ryb2tlU3R5bGUpc3Ry
b2tlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tu
ZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlVGhpY2tuZXNz
KHRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxD
b2xvcihjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNl
dEZpbGxDb2xvcihjb2xvci5yZ2IoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2Rl
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5zZXRDb21wb3NpdGVPcGVyYXRpb24oc3RhdGljX2Nhc3Q8Qmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpDb21wb3NpdGVPcGVyYXRvcj4ob3ApLCBibGVu
ZE1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRp
YWxpYXMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFVzZUFudGlhbGlhc2luZyhl
bmFibGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSkKLXsKLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0SGlnaFF1YWxpdHlGaWx0ZXIoaW50ZXJwb2xhdGlvblF1
YWxpdHkgIT0gSW50ZXJwb2xhdGlvbk5vbmUpOwotfQotCi1JbnRlcnBvbGF0aW9uUXVhbGl0eSBH
cmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdAotewotICAg
IHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+aGlnaFF1YWxpdHlGaWx0ZXIoKSA/IEludGVycG9s
YXRpb25EZWZhdWx0IDogSW50ZXJwb2xhdGlvbk5vbmU7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVy
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5
ZXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MDMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0KLS8qKiBGSVhNRQotICogVGhpcyBmaWxlIGJvcnJvd3MgY29kZSBo
ZWF2aWx5IGZyb20gcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmNwcAot
ICogKGFuZCBoZW5jZSBpdCBpbmNsdWRlcyBib3RoIGNvcHlyaWdodHMpCi0gKiBJZGVhbGx5IHRo
ZSBjb21tb24gY29kZSAobW9zdGx5IHRoZSBjb2RlIHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIGxh
eWVyIGhpZXJhcmNoeSkKLSAqIHNob3VsZCBiZSBrZXB0IHNlcGFyYXRlIGFuZCBzaGFyZWQgYmV0
d2VlbiBwbGF0Zm9ybXMuIEl0IHdvdWxkIGJlIGEgd2VsbCB3b3J0aHdoaWxlCi0gKiBlZmZvcnQg
b25jZSB0aGUgV2luZG93cyBpbXBsZW1lbnRhdGlvbiAoYmluYXJpZXMgYW5kIGhlYWRlcnMpIG9m
IENvcmVBbmltYXRpb24gaXMKLSAqIGNoZWNrZWQgaW4gdG8gdGhlIFdlYktpdCByZXBvc2l0b3J5
LiBVbnRpbCB0aGVuIG9ubHkgQXBwbGUgY2FuIG1ha2UgdGhpcyBoYXBwZW4uCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0j
aW5jbHVkZSAiR3JhcGhpY3NMYXllckJsYWNrQmVycnkuaCIKLQotI2luY2x1ZGUgIkZsb2F0Q29u
dmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJGYWN0b3J5LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJMYXllckFuaW1hdGlv
bi5oIgotI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLQotI2lmIERFQlVHX0xBWUVSX0FOSU1BVElPTgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lk
IHNldExheWVyQm9yZGVyQ29sb3IoTGF5ZXJXZWJLaXRUaHJlYWQmIGxheWVyLCBjb25zdCBDb2xv
ciYgY29sb3IpCi17Ci0gICAgbGF5ZXIuc2V0Qm9yZGVyQ29sb3IoY29sb3IpOwotfQotCi1zdGF0
aWMgdm9pZCBjbGVhckJvcmRlckNvbG9yKExheWVyV2ViS2l0VGhyZWFkJiBsYXllcikKLXsKLSAg
ICBsYXllci5zZXRCb3JkZXJDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOwotfQotCi1zdGF0aWMg
dm9pZCBzZXRMYXllckJhY2tncm91bmRDb2xvcihMYXllcldlYktpdFRocmVhZCYgbGF5ZXIsIGNv
bnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBsYXllci5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3Ip
OwotfQotCi1zdGF0aWMgdm9pZCBjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKExheWVyV2ViS2l0
VGhyZWFkJiBsYXllcikKLXsKLSAgICBsYXllci5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRy
YW5zcGFyZW50KTsKLX0KLQotUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVy
OjpjcmVhdGUoR3JhcGhpY3NMYXllckZhY3RvcnkqIGZhY3RvcnksIEdyYXBoaWNzTGF5ZXJDbGll
bnQqIGNsaWVudCkKLXsKLSAgICBpZiAoIWZhY3RvcnkpCi0gICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgR3JhcGhpY3NMYXllckJsYWNrQmVycnkoY2xpZW50KSk7Ci0KLSAgICByZXR1cm4gZmFj
dG9yeS0+Y3JlYXRlR3JhcGhpY3NMYXllcihjbGllbnQpOwotfQotCi1HcmFwaGljc0xheWVyQmxh
Y2tCZXJyeTo6R3JhcGhpY3NMYXllckJsYWNrQmVycnkoR3JhcGhpY3NMYXllckNsaWVudCogY2xp
ZW50KQotICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCi0gICAgLCBtX3N1c3BlbmRUaW1lKDAp
Ci0gICAgLCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlKE5vQ29udGVudHNMYXllcikKLXsKLSAgICBt
X2xheWVyID0gTGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZShMYXllckRhdGE6OkxheWVyLCB0aGlz
KTsKLQotICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwotfQotCi1HcmFwaGljc0xheWVyQmxh
Y2tCZXJyeTo6fkdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5KCkKLXsKLSAgICAvLyBEbyBjbGVhbnVw
IHdoaWxlIHdlIGNhbiBzdGlsbCBzYWZlbHkgY2FsbCBtZXRob2RzIG9uIHRoZSBkZXJpdmVkIGNs
YXNzLgotICAgIHdpbGxCZURlc3Ryb3llZCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFj
a0JlcnJ5Ojp3aWxsQmVEZXN0cm95ZWQoKQotewotICAgIGlmIChtX2xheWVyKQotICAgICAgICBt
X2xheWVyLT5zZXRPd25lcigwKTsKLSAgICBpZiAobV9jb250ZW50c0xheWVyKQotICAgICAgICBt
X2NvbnRlbnRzTGF5ZXItPnNldE93bmVyKDApOwotICAgIGlmIChtX3RyYW5zZm9ybUxheWVyKQot
ICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRPd25lcigwKTsKLQotICAgIEdyYXBoaWNzTGF5
ZXI6OndpbGxCZURlc3Ryb3llZCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5
OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgaW5OYW1lKQotewotICAgIFN0cmluZyBuYW1lID0gU3Ry
aW5nOjpmb3JtYXQoIkdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5KCVwKSBHcmFwaGljc0xheWVyKCVw
KSAiLCBtX2xheWVyLmdldCgpLCB0aGlzKSArIGluTmFtZTsKLSAgICBHcmFwaGljc0xheWVyOjpz
ZXROYW1lKG5hbWUpOwotfQotCi1ib29sIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRDaGls
ZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKLXsKLSAgICBib29s
IGNoaWxkcmVuQ2hhbmdlZCA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsK
LSAgICAvLyBGSVhNRTogR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4gY2FsbHMgYWRkQ2hpbGQo
KSBmb3IgZWFjaCBzdWJsYXllciwgd2hpY2gKLSAgICAvLyB3aWxsIGVuZCB1cCBjYWxsaW5nIHVw
ZGF0ZVN1YmxheWVyTGlzdCgpIE4gdGltZXMuCi0gICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKLSAg
ICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Ci0KLSAgICByZXR1cm4gY2hpbGRyZW5DaGFuZ2Vk
OwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjphZGRDaGlsZChHcmFwaGljc0xh
eWVyKiBjaGlsZExheWVyKQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGNoaWxkTGF5
ZXIpOwotICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJC
bGFja0JlcnJ5OjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwgaW50
IGluZGV4KQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChjaGlsZExheWVy
LCBpbmRleCk7Ci0gICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NM
YXllckJsYWNrQmVycnk6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwg
R3JhcGhpY3NMYXllciogc2libGluZykKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJl
bG93KGNoaWxkTGF5ZXIsIHNpYmxpbmcpOwotICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwotfQot
Ci12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjphZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5
ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIgKnNpYmxpbmcpCi17Ci0gICAgR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRBYm92ZShjaGlsZExheWVyLCBzaWJsaW5nKTsKLSAgICB1cGRhdGVTdWJs
YXllckxpc3QoKTsKLX0KLQotYm9vbCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6cmVwbGFjZUNo
aWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKLXsK
LSAgICBpZiAoIUdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgbmV3Q2hpbGQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6cmVtb3Zl
RnJvbVBhcmVudCgpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwot
ICAgIGxheWVyRm9yU3VwZXJsYXllcigpLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwotfQotCi12
b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkKLXsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwb2ludCk7Ci0gICAg
dXBkYXRlTGF5ZXJQb3NpdGlvbigpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5
OjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHBvaW50KQotewotICAgIGlmIChw
b2ludCA9PSBtX2FuY2hvclBvaW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xh
eWVyOjpzZXRBbmNob3JQb2ludChwb2ludCk7Ci0gICAgdXBkYXRlQW5jaG9yUG9pbnQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPT0gbV9zaXplKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0xheWVyOjpzZXRTaXplKHNpemUpOwotICAgIHVwZGF0ZUxheWVyU2l6ZSgpOwot
fQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAodHJhbnNmb3JtID09IG1f
dHJhbnNmb3JtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFu
c2Zvcm0odHJhbnNmb3JtKTsKLSAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKLX0KLQotdm9pZCBHcmFw
aGljc0xheWVyQmxhY2tCZXJyeTo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAodHJhbnNmb3JtID09IG1fY2hpbGRy
ZW5UcmFuc2Zvcm0pCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENo
aWxkcmVuVHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgdXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0o
KTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0UHJlc2VydmVzM0QoYm9v
bCBwcmVzZXJ2ZXMzRCkKLXsKLSAgICBpZiAocHJlc2VydmVzM0QgPT0gbV9wcmVzZXJ2ZXMzRCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QocHJl
c2VydmVzM0QpOwotICAgIHVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKTsKLX0KLQotdm9pZCBHcmFw
aGljc0xheWVyQmxhY2tCZXJyeTo6c2V0TWFza3NUb0JvdW5kcyhib29sIG1hc2tzVG9Cb3VuZHMp
Ci17Ci0gICAgaWYgKG1hc2tzVG9Cb3VuZHMgPT0gbV9tYXNrc1RvQm91bmRzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKG1hc2tzVG9Cb3Vu
ZHMpOwotICAgIHVwZGF0ZU1hc2tzVG9Cb3VuZHMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVy
QmxhY2tCZXJyeTo6c2V0RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KQotewotICAgIC8v
IE5vdGUgY2FyZWZ1bGx5IHRoaXMgZWFybHktZXhpdCBpcyBvbmx5IGNvcnJlY3QgYmVjYXVzZSB3
ZSBhbHNvIHByb3Blcmx5IGluaXRpYWxpemUKLSAgICAvLyBMYXllcldlYktpdFRocmVhZDo6aXNE
cmF3YWJsZSgpIHdoZW5ldmVyIG1fY29udGVudHNMYXllciBpcyBzZXQgdG8gYSBuZXcgbGF5ZXIg
aW4gc2V0dXBDb250ZW50c0xheWVyKCkuCi0gICAgaWYgKGRyYXdzQ29udGVudCA9PSBtX2RyYXdz
Q29udGVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3ND
b250ZW50KGRyYXdzQ29udGVudCk7Ci0gICAgdXBkYXRlTGF5ZXJJc0RyYXdhYmxlKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGNv
bnRlbnRzVmlzaWJsZSkKLXsKLSAgICAvLyBOb3RlIGNhcmVmdWxseSB0aGlzIGVhcmx5LWV4aXQg
aXMgb25seSBjb3JyZWN0IGJlY2F1c2Ugd2UgYWxzbyBwcm9wZXJseSBpbml0aWFsaXplCi0gICAg
Ly8gTGF5ZXJXZWJLaXRUaHJlYWQ6OmlzRHJhd2FibGUoKSB3aGVuZXZlciBtX2NvbnRlbnRzTGF5
ZXIgaXMgc2V0IHRvIGEgbmV3IGxheWVyIGluIHNldHVwQ29udGVudHNMYXllcigpLgotICAgIGlm
IChjb250ZW50c1Zpc2libGUgPT0gbV9jb250ZW50c1Zpc2libGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShjb250ZW50c1Zpc2libGUp
OwotICAgIHVwZGF0ZUxheWVySXNEcmF3YWJsZSgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJC
bGFja0JlcnJ5OjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbWFza0xheWVyKQotewotICAg
IGlmIChtYXNrTGF5ZXIgPT0gbV9tYXNrTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihtYXNrTGF5ZXIpOwotCi0gICAgTGF5ZXJXZWJLaXRU
aHJlYWQqIG1hc2tMYXllcldlYktpdCA9IG1fbWFza0xheWVyID8gbV9tYXNrTGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKSA6IDA7Ci0gICAgaWYgKG1hc2tMYXllcldlYktpdCkKLSAgICAgICAgbWFza0xh
eWVyV2ViS2l0LT5zZXRJc01hc2sodHJ1ZSk7Ci0gICAgbV9sYXllci0+c2V0TWFza0xheWVyKG1h
c2tMYXllcldlYktpdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldFJl
cGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIEdyYXBoaWNzTGF5
ZXJCbGFja0JlcnJ5KiBsYXllcldlYktpdCA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJCbGFj
a0JlcnJ5Kj4obGF5ZXIpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVy
KGxheWVyKTsKLSAgICBMYXllcldlYktpdFRocmVhZCogcmVwbGljYUxheWVyID0gbGF5ZXJXZWJL
aXQgPyBsYXllcldlYktpdC0+cHJpbWFyeUxheWVyKCkgOiAwOwotICAgIHByaW1hcnlMYXllcigp
LT5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxheWVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVy
QmxhY2tCZXJyeTo6c2V0SGFzRml4ZWRDb250YWluZXIoYm9vbCBoYXNGaXhlZENvbnRhaW5lcikK
LXsKLSAgICBpZiAoaGFzRml4ZWRDb250YWluZXIgPT0gbV9oYXNGaXhlZENvbnRhaW5lcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0SGFzRml4ZWRDb250YWluZXIo
aGFzRml4ZWRDb250YWluZXIpOwotICAgIHVwZGF0ZUhhc0ZpeGVkQ29udGFpbmVyKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldEhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRy
ZWUoYm9vbCBoYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKQotewotICAgIGlmIChoYXNGaXhlZEFu
Y2VzdG9ySW5ET01UcmVlID09IG1faGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0SGFzRml4ZWRBbmNlc3RvckluRE9NVHJl
ZShoYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKTsKLSAgICB1cGRhdGVIYXNGaXhlZEFuY2VzdG9y
SW5ET01UcmVlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1ib29sIEdyYXBoaWNz
TGF5ZXJCbGFja0JlcnJ5OjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRl
cnMpCi17Ci0gICAgaWYgKG1fZmlsdGVycyA9PSBmaWx0ZXJzKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGJvb2wgY2FuQ29tcG9zaXRlRmlsdGVycyA9IExheWVyV2ViS2l0VGhyZWFkOjpm
aWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpOwotICAgIGlmIChjYW5Db21wb3NpdGVGaWx0
ZXJzKSB7Ci0gICAgICAgIG1fZmlsdGVycyA9IGZpbHRlcnM7Ci0gICAgICAgIEdyYXBoaWNzTGF5
ZXI6OnNldEZpbHRlcnMoZmlsdGVycyk7Ci0gICAgICAgIHVwZGF0ZUZpbHRlcnMoKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBtX2ZpbHRlcnMuY2xlYXIoKTsKLSAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY2FuQ29tcG9zaXRlRmlsdGVyczsKLX0KLSNlbmRp
ZgotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChjb2xvciA9PSBtX2JhY2tncm91bmRDb2xvcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2dyb3VuZENvbG9y
KGNvbG9yKTsKLQotICAgIHVwZGF0ZUxheWVyQmFja2dyb3VuZENvbG9yKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldENvbnRlbnRzT3BhcXVlKGJvb2wgb3BhcXVlKQot
ewotICAgIGlmIChtX2NvbnRlbnRzT3BhcXVlID09IG9wYXF1ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUob3BhcXVlKTsKLSAgICB1cGRh
dGVDb250ZW50c09wYXF1ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojpz
ZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCB2aXNpYmxlKQotewotICAgIGlmIChtX2JhY2tmYWNl
VmlzaWJpbGl0eSA9PSB2aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xh
eWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkodmlzaWJsZSk7Ci0gICAgdXBkYXRlQmFja2ZhY2VW
aXNpYmlsaXR5KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldE9wYWNp
dHkoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBmbG9hdCBjbGFtcGVkT3BhY2l0eSA9IGNsYW1wVG8o
b3BhY2l0eSwgMC4wZiwgMS4wZik7Ci0KLSAgICBpZiAobV9vcGFjaXR5ID09IGNsYW1wZWRPcGFj
aXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KGNs
YW1wZWRPcGFjaXR5KTsKLSAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0T3BhY2l0eShvcGFjaXR5KTsK
LX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0Q29udGVudHNOZWVkc0Rpc3Bs
YXkoKQotewotICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpCi0gICAgICAgIG1fY29udGVudHNMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OnNldE5lZWRzRGlzcGxheSgpCi17Ci0gICAgaWYgKGRyYXdzQ29udGVudCgpKQotICAgICAgICBt
X2xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tC
ZXJyeTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU2hvdWxk
Q2xpcFRvTGF5ZXIpCi17Ci0gICAgaWYgKGRyYXdzQ29udGVudCgpKQotICAgICAgICBtX2xheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlm
IChyZWN0ID09IG1fY29udGVudHNSZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1JlY3QocmVjdCk7Ci0gICAgdXBkYXRlQ29udGVudHNSZWN0KCk7
Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPExheWVyQW5pbWF0aW9uPiByZW1vdmVBbmltYXRpb25C
eUlkQW5kUHJvcGVydHkoaW50IGlkLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4mIGxpc3QpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChsaXN0W2ldLT5pZCgpID09
IGlkICYmIGxpc3RbaV0tPnByb3BlcnR5KCkgPT0gcHJvcGVydHkpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxMYXllckFuaW1hdGlvbj4gbGF5ZXJBbmltYXRpb24gPSBsaXN0W2ldOwotICAgICAgICAg
ICAgbGlzdC5yZW1vdmUoaSk7Ci0gICAgICAgICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb247Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gUGFzc1JlZlB0cjxMYXllckFuaW1hdGlvbj4o
KTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJBbmltYXRpb24+IHJlbW92ZUFuaW1hdGlv
bkJ5TmFtZShjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIFZlY3RvcjxSZWZQdHI8TGF5ZXJB
bmltYXRpb24+ID4mIGxpc3QpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChsaXN0W2ldLT5uYW1lKCkgPT0gYW5pbWF0aW9uTmFt
ZSkgewotICAgICAgICAgICAgUmVmUHRyPExheWVyQW5pbWF0aW9uPiBsYXllckFuaW1hdGlvbiA9
IGxpc3RbaV07Ci0gICAgICAgICAgICBsaXN0LnJlbW92ZShpKTsKLSAgICAgICAgICAgIHJldHVy
biBsYXllckFuaW1hdGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBQYXNzUmVm
UHRyPExheWVyQW5pbWF0aW9uPigpOwotfQotCi1ib29sIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5
OjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50
U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgLy8gVGhpcyBpcyB3aGF0
IEdyYXBoaWNzTGF5ZXJDQSBjaGVja3MgZm9yLgotICAgIGlmICghYW5pbWF0aW9uIHx8IGFuaW1h
dGlvbi0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkgfHwgdmFsdWVzLnNpemUoKSA8IDIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIG9ubHkgc3VwcG9ydCB0aGVzZSB0d28ga2lu
ZHMgb2YgcHJvcGVydGllcyBhdCB0aGUgbW9tZW50LgotICAgIGlmICh2YWx1ZXMucHJvcGVydHko
KSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtICYmIHZhbHVlcy5wcm9wZXJ0eSgp
ICE9IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBSZW1vdmUgYW55IHJ1bm5pbmcgYW5pbWF0aW9uIGZvciB0aGUgc2FtZSBwcm9wZXJ0eS4K
LSAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBpcyBzdXBlcnN0aXRpb24sIEkgZ290IHRoZSBpZGVh
IGZyb20gR3JhcGhpY3NMYXllclF0Ci0gICAgLy8gV2ViQ29yZSBtaWdodCBiZSBhZGRpbmcgYW4g
YW5pbWF0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSwgYnV0IGZvciBhIGRpZmZlcmVudCBwcm9wZXJ0
eQotICAgIHJlbW92ZUFuaW1hdGlvbkJ5SWRBbmRQcm9wZXJ0eShMYXllckFuaW1hdGlvbjo6aWRG
cm9tQW5pbWF0aW9uKGFuaW1hdGlvbiksIHZhbHVlcy5wcm9wZXJ0eSgpLCBtX3J1bm5pbmdBbmlt
YXRpb25zKTsKLSAgICByZW1vdmVBbmltYXRpb25CeUlkQW5kUHJvcGVydHkoTGF5ZXJBbmltYXRp
b246OmlkRnJvbUFuaW1hdGlvbihhbmltYXRpb24pLCB2YWx1ZXMucHJvcGVydHkoKSwgbV9zdXNw
ZW5kZWRBbmltYXRpb25zKTsKLQotICAgIFJlZlB0cjxMYXllckFuaW1hdGlvbj4gbGF5ZXJBbmlt
YXRpb24gPSBMYXllckFuaW1hdGlvbjo6Y3JlYXRlKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9u
LCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKLQotI2lmIERFQlVHX0xBWUVSX0FOSU1BVElP
TgotICAgIGZwcmludGYoc3RkZXJyLCAiTGF5ZXJBbmltYXRpb24gMHglMDh4OiBBZGRpbmcgYW5p
bWF0aW9uICVzIGZvciBwcm9wZXJ0eSAlZFxuIiwgKGludClsYXllckFuaW1hdGlvbi5nZXQoKSwg
YW5pbWF0aW9uTmFtZS5sYXRpbjEoKS5kYXRhKCksIHZhbHVlcy5wcm9wZXJ0eSgpKTsKLSNlbmRp
ZgotCi0gICAgbV9ydW5uaW5nQW5pbWF0aW9ucy5hcHBlbmQobGF5ZXJBbmltYXRpb24pOwotCi0g
ICAgdXBkYXRlQW5pbWF0aW9ucygpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NMYXllckJsYWNrQmVycnk6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgLy8gV2ViQ29yZSBtaWdodCBoYXZl
IGFkZGVkIHNldmVyYWwgYW5pbWF0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUsIGJ1dCBmb3IgZGlm
ZmVyZW50IHByb3BlcnRpZXMKLQotICAgIHdoaWxlIChSZWZQdHI8TGF5ZXJBbmltYXRpb24+IGFu
aW1hdGlvbiA9IHJlbW92ZUFuaW1hdGlvbkJ5TmFtZShhbmltYXRpb25OYW1lLCBtX3J1bm5pbmdB
bmltYXRpb25zKSkgewotI2lmIERFQlVHX0xBWUVSX0FOSU1BVElPTgotICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkxheWVyQW5pbWF0aW9uIDB4JTA4eDogUGF1c2luZyBhbmltYXRpb24gJXNcbiIs
IChpbnQpYW5pbWF0aW9uLmdldCgpLCBhbmltYXRpb24tPm5hbWUoKS5sYXRpbjEoKS5kYXRhKCkp
OwotI2VuZGlmCi0KLSAgICAgICAgLy8gTGF5ZXJBbmltYXRpb24gaXMgcmVhZG9ubHkuIENyZWF0
ZSBhIG5ldyBhbmltYXRpb24gd2l0aCB0aGUgc2FtZSBkYXRhIGV4Y2VwdCBmb3IgdGltZU9mZnNl
dC4KLSAgICAgICAgLy8gV2ViQ29yZSB3aWxsIGFkanVzdCB0aGUgdGltZU9mZnNldCBmb3IgcGF1
c2VkIGFuaW1hdGlvbnMgc28gaXQgY2FuIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZQotICAgICAg
ICAvLyBwcm9ncmVzcyBmb3IgdGhlIHBhdXNlZCBhbmltYXRpb24gd2l0aG91dCBrbm93aW5nIHRo
ZSBleGFjdCB0aW1lc3RhbXAgd2hlbiB0aGUgYW5pbWF0aW9uIHdhcwotICAgICAgICAvLyBwYXVz
ZWQuCi0gICAgICAgIC8vIElmIGFuIGFuaW1hdGlvbiB3YXMgc3RhcnRlZCB3aXRoIGEgdGltZU9m
ZnNldCBkdF9vcmlnIGFuZCBwYXVzZWQgZHRfcGF1c2Ugc2Vjb25kcyBsYXRlciwgdGhlCi0gICAg
ICAgIC8vIGNsb25lZCBhbmltYXRpb24gd2lsbCBoYXZlIGEgdGltZU9mZnNldCBvZiBkdF9wYXVz
ZSArIGR0X29yaWcuCi0gICAgICAgIGFuaW1hdGlvbiA9IGFuaW1hdGlvbi0+Y2xvbmUodGltZU9m
ZnNldCk7Ci0gICAgICAgIG1fc3VzcGVuZGVkQW5pbWF0aW9ucy5hcHBlbmQoYW5pbWF0aW9uKTsK
LQotI2lmIERFQlVHX0xBWUVSX0FOSU1BVElPTgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxh
eWVyQW5pbWF0aW9uIDB4JTA4eDogUGF1c2VkIGFuaW1hdGlvbiAlc1xuIiwgKGludClhbmltYXRp
b24uZ2V0KCksIGFuaW1hdGlvbi0+bmFtZSgpLmxhdGluMSgpLmRhdGEoKSk7Ci0jZW5kaWYKLSAg
ICB9OwotCi0gICAgdXBkYXRlQW5pbWF0aW9ucygpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJC
bGFja0JlcnJ5OjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQot
ewotICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBhZGRlZCBzZXZlcmFsIGFuaW1hdGlvbnMgd2l0
aCB0aGUgc2FtZSBuYW1lLCBidXQgZm9yIGRpZmZlcmVudCBwcm9wZXJ0aWVzCi0KLSNpZiBERUJV
R19MQVlFUl9BTklNQVRJT04KLSAgICBmcHJpbnRmKHN0ZGVyciwgIkxheWVyQW5pbWF0aW9uOiBS
ZW1vdmluZyBhbmltYXRpb24gJXNcbiIsIGFuaW1hdGlvbk5hbWUubGF0aW4xKCkuZGF0YSgpKTsK
LSNlbmRpZgotCi0gICAgd2hpbGUgKHJlbW92ZUFuaW1hdGlvbkJ5TmFtZShhbmltYXRpb25OYW1l
LCBtX3J1bm5pbmdBbmltYXRpb25zKSkgeyB9Ci0gICAgd2hpbGUgKHJlbW92ZUFuaW1hdGlvbkJ5
TmFtZShhbmltYXRpb25OYW1lLCBtX3N1c3BlbmRlZEFuaW1hdGlvbnMpKSB7IH0KLQotICAgIHVw
ZGF0ZUFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c3Vz
cGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCi17Ci0jaWYgREVCVUdfTEFZRVJfQU5JTUFUSU9O
Ci0gICAgZnByaW50ZihzdGRlcnIsICJMYXllckFuaW1hdGlvbjogU3VzcGVuZGluZyBhbmltYXRp
b25zXG4iKTsKLSNlbmRpZgotICAgIG1fc3VzcGVuZFRpbWUgPSB0aW1lOwotfQotCi12b2lkIEdy
YXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSNpZiBERUJVR19M
QVlFUl9BTklNQVRJT04KLSAgICBmcHJpbnRmKHN0ZGVyciwgIkxheWVyQW5pbWF0aW9uOiBSZXN1
bWluZyBhbmltYXRpb25zXG4iKTsKLSNlbmRpZgotICAgIG1fc3VzcGVuZFRpbWUgPSAwOwotfQot
Ci12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2Uq
IGltYWdlKQotewotICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7Ci0gICAgaWYgKGlt
YWdlKSB7Ci0gICAgICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBDb250ZW50c0xheWVyRm9y
SW1hZ2U7Ci0gICAgICAgIGlmICghbV9jb250ZW50c0xheWVyKQotICAgICAgICAgICAgY2hpbGRy
ZW5DaGFuZ2VkID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQ
dXJwb3NlID0gTm9Db250ZW50c0xheWVyOwotICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKQot
ICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1cGRhdGVD
b250ZW50c0ltYWdlKGltYWdlKTsKLQotICAgIGlmIChjaGlsZHJlbkNoYW5nZWQpCi0gICAgICAg
IHVwZGF0ZVN1YmxheWVyTGlzdCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5
Ojp1cGRhdGVDb250ZW50c0ltYWdlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoaW1hZ2UpIHsK
LSAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxMYXllcldlYktpdFRocmVhZD4gaW1hZ2VMYXllciA9IExheWVyV2ViS2l0VGhyZWFkOjpjcmVh
dGUoTGF5ZXJEYXRhOjpMYXllciwgdGhpcyk7Ci0KLSAgICAgICAgICAgIHNldHVwQ29udGVudHNM
YXllcihpbWFnZUxheWVyLmdldCgpKTsKLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IGlt
YWdlTGF5ZXI7Ci0gICAgICAgICAgICAvLyBtX2NvbnRlbnRzTGF5ZXIgd2lsbCBiZSBwYXJlbnRl
ZCBieSB1cGRhdGVTdWJsYXllckxpc3QuCi0gICAgICAgIH0KLSAgICAgICAgbV9jb250ZW50c0xh
eWVyLT5zZXRDb250ZW50cyhpbWFnZSk7Ci0KLSAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTm8gaW1hZ2UuIG1fY29udGVudHNMYXllciB3aWxs
IGJlIHJlbW92ZWQgdmlhIHVwZGF0ZVN1YmxheWVyTGlzdC4KLSAgICAgICAgbV9jb250ZW50c0xh
eWVyID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldENv
bnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKLXsKLSAgICBib29s
IGNoaWxkcmVuQ2hhbmdlZCA9IGZhbHNlOwotICAgIGlmIChwbGF0Zm9ybUxheWVyKSB7Ci0gICAg
ICAgIHBsYXRmb3JtTGF5ZXItPnNldE93bmVyKHRoaXMpOwotICAgICAgICBpZiAobV9jb250ZW50
c0xheWVyLmdldCgpICE9IHBsYXRmb3JtTGF5ZXIpIHsKLSAgICAgICAgICAgIHNldHVwQ29udGVu
dHNMYXllcihwbGF0Zm9ybUxheWVyKTsKLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IHBs
YXRmb3JtTGF5ZXI7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVu
dHNMYXllckZvckNhbnZhczsKLSAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAg
ICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1f
Y29udGVudHNMYXllcikgewotICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKLQot
ICAgICAgICAgICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlh
IHVwZGF0ZVN1YmxheWVyTGlzdC4KLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IDA7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQotICAgICAgICB1cGRh
dGVTdWJsYXllckxpc3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0
Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQotewotICAgIGJvb2wgY2hpbGRy
ZW5DaGFuZ2VkID0gZmFsc2U7Ci0gICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIGlmICghbV9jb250
ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNMYXllclB1cnBvc2UgIT0gQ29udGVudHNMYXll
ckZvclZpZGVvKSB7Ci0gICAgICAgICAgICBzZXR1cENvbnRlbnRzTGF5ZXIobGF5ZXIpOwotICAg
ICAgICAgICAgbV9jb250ZW50c0xheWVyID0gbGF5ZXI7Ci0gICAgICAgICAgICBtX2NvbnRlbnRz
TGF5ZXJQdXJwb3NlID0gQ29udGVudHNMYXllckZvclZpZGVvOwotICAgICAgICAgICAgY2hpbGRy
ZW5DaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXllci0+b3duZXIo
KSAhPSB0aGlzKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0T3duZXIodGhpcyk7Ci0gICAgICAg
ICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRl
Q29udGVudHNSZWN0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fY29udGVudHNMYXll
cikgewotICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKLQotICAgICAgICAgICAg
Ly8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlhIHVwZGF0ZVN1Ymxh
eWVyTGlzdC4KLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IDA7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQotICAgICAgICB1cGRhdGVTdWJsYXllckxp
c3QoKTsKLX0KLQotUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllckJsYWNrQmVycnk6Omhvc3RM
YXllckZvclN1YmxheWVycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIg
PyBtX3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsKLX0KLQotUGxhdGZvcm1M
YXllciogR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OmxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIgPyBtX3RyYW5zZm9ybUxheWVyLmdldCgp
IDogbV9sYXllci5nZXQoKTsKLX0KLQotUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllckJsYWNr
QmVycnk6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBwcmltYXJ5TGF5ZXIo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0RGVidWdCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgIHNldExheWVyQmFja2dyb3VuZENvbG9yKCptX2xheWVyLCBjb2xvcik7Ci0gICAgZWxz
ZQotICAgICAgICBjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKCptX2xheWVyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0RGVidWdCb3JkZXIoY29uc3QgQ29sb3ImIGNv
bG9yLCBmbG9hdCBib3JkZXJXaWR0aCkKLXsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgIHNldExheWVyQm9yZGVyQ29sb3IoKm1fbGF5ZXIsIGNvbG9yKTsKLSAgICAgICAgbV9s
YXllci0+c2V0Qm9yZGVyV2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGNsZWFyQm9yZGVyQ29sb3IoKm1fbGF5ZXIpOwotICAgICAgICBtX2xheWVyLT5zZXRCb3JkZXJX
aWR0aCgwKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0
ZVN1YmxheWVyTGlzdCgpCi17Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4g
PiBuZXdTdWJsYXllcnM7Ci0KLSAgICBpZiAobV90cmFuc2Zvcm1MYXllcikgewotICAgICAgICAv
LyBBZGQgdGhlIHByaW1hcnkgbGF5ZXIgZmlyc3QuIEV2ZW4gaWYgd2UgaGF2ZSBuZWdhdGl2ZSB6
LW9yZGVyIGNoaWxkcmVuLCB0aGUgcHJpbWFyeSBsYXllciBhbHdheXMgY29tZXMgYmVoaW5kLgot
ICAgICAgICBuZXdTdWJsYXllcnMuYXBwZW5kKG1fbGF5ZXIuZ2V0KCkpOwotICAgIH0gZWxzZSBp
ZiAobV9jb250ZW50c0xheWVyKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgdGhlIGNvbnRlbnRz
IGxheWVyIGluIHRoZSBjb3JyZWN0IG9yZGVyIHdpdGggbmVnYXRpdmUgei1vcmRlciBjaGlsZHJl
bi4KLSAgICAgICAgLy8gVGhpcyBkb2VzIG5vdCBjYXVzZSB2aXNpYmxlIHJlbmRlcmluZyBpc3N1
ZXMgYmVjYXVzZSBjdXJyZW50bHkgY29udGVudHMgbGF5ZXJzIGFyZSBvbmx5IHVzZWQKLSAgICAg
ICAgLy8gZm9yIHJlcGxhY2VkIGVsZW1lbnRzIHRoYXQgZG9uJ3QgaGF2ZSBjaGlsZHJlbi4KLSAg
ICAgICAgbmV3U3VibGF5ZXJzLmFwcGVuZChtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpOwotICAgIH0K
LQotICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGF5ZXJzID0gY2hpbGRy
ZW4oKTsKLSAgICBzaXplX3QgbnVtQ2hpbGRyZW4gPSBjaGlsZExheWVycy5zaXplKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7Ci0gICAgICAgIEdyYXBo
aWNzTGF5ZXJCbGFja0JlcnJ5KiBjdXJDaGlsZCA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJC
bGFja0JlcnJ5Kj4oY2hpbGRMYXllcnNbaV0pOwotCi0gICAgICAgIExheWVyV2ViS2l0VGhyZWFk
KiBjaGlsZExheWVyID0gY3VyQ2hpbGQtPmxheWVyRm9yU3VwZXJsYXllcigpOwotICAgICAgICBu
ZXdTdWJsYXllcnMuYXBwZW5kKGNoaWxkTGF5ZXIpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbmV3U3VibGF5ZXJzLnNpemUoKTsgKytpKQotICAgICAgICBuZXdTdWJsYXll
cnNbaV0tPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Ci0KLSAgICBpZiAobV90cmFuc2Zvcm1MYXll
cikgewotICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRTdWJsYXllcnMobmV3U3VibGF5ZXJz
KTsKLQotICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7Ci0gICAgICAgICAgICAvLyBJZiB3
ZSBoYXZlIGEgdHJhbnNmb3JtIGxheWVyLCB0aGVuIHRoZSBjb250ZW50cyBsYXllciBpcyBwYXJl
bnRlZCBpbiB0aGUKLSAgICAgICAgICAgIC8vIHByaW1hcnkgbGF5ZXIgKHdoaWNoIGlzIGl0c2Vs
ZiBhIGNoaWxkIG9mIHRoZSB0cmFuc2Zvcm0gbGF5ZXIpLgotICAgICAgICAgICAgbV9sYXllci0+
cmVtb3ZlQWxsU3VibGF5ZXJzKCk7Ci0gICAgICAgICAgICBtX2xheWVyLT5hZGRTdWJsYXllciht
X2NvbnRlbnRzTGF5ZXIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fbGF5ZXIt
PnNldFN1YmxheWVycyhuZXdTdWJsYXllcnMpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFj
a0JlcnJ5Ojp1cGRhdGVMYXllclBvc2l0aW9uKCkKLXsKLSAgICAvLyBQb3NpdGlvbiBpcyBvZmZz
ZXQgb24gdGhlIGxheWVyIGJ5IHRoZSBsYXllciBhbmNob3IgcG9pbnQuCi0gICAgRmxvYXRQb2lu
dCBsYXllclBvc2l0aW9uKAotICAgICAgICBtX3Bvc2l0aW9uLngoKSArIG1fYW5jaG9yUG9pbnQu
eCgpICogbV9zaXplLndpZHRoKCksCi0gICAgICAgIG1fcG9zaXRpb24ueSgpICsgbV9hbmNob3JQ
b2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCkpOwotCi0gICAgcHJpbWFyeUxheWVyKCktPnNldFBv
c2l0aW9uKGxheWVyUG9zaXRpb24pOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5
Ojp1cGRhdGVMYXllclNpemUoKQotewotICAgIEludFNpemUgbGF5ZXJTaXplKG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3RyYW5zZm9ybUxheWVyKSB7Ci0gICAg
ICAgIG1fdHJhbnNmb3JtTGF5ZXItPnNldEJvdW5kcyhsYXllclNpemUpOwotICAgICAgICAvLyBU
aGUgYW5jaG9yIG9mIHRoZSBjb250ZW50cyBsYXllciBpcyBhbHdheXMgYXQgMC41LCAwLjUsIHNv
IHRoZSBwb3NpdGlvbiBpcyBjZW50ZXItcmVsYXRpdmUuCi0gICAgICAgIEZsb2F0UG9pbnQgY2Vu
dGVyUG9pbnQobV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyKTsKLSAgICAg
ICAgbV9sYXllci0+c2V0UG9zaXRpb24oY2VudGVyUG9pbnQpOwotICAgIH0KLQotICAgIG1fbGF5
ZXItPnNldEJvdW5kcyhsYXllclNpemUpOwotCi0gICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IHJl
c2l6ZSBtX2NvbnRlbnRzTGF5ZXIuIEl0J3MgdXAgdGhlIGNhbGxlciB0byBkbyB0aGF0LgotCi0g
ICAgLy8gSWYgd2UndmUgY2hhbmdlZCB0aGUgYm91bmRzLCB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRl
IHRoZSBwb3NpdGlvbgotICAgIC8vIG9mIHRoZSBsYXllciwgdGFraW5nIGFuY2hvciBwb2ludCBp
bnRvIGFjY291bnQuCi0gICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwotfQotCi12b2lkIEdyYXBo
aWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVBbmNob3JQb2ludCgpCi17Ci0gICAgcHJpbWFyeUxh
eWVyKCktPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQobV9hbmNob3JQb2ludC54KCksIG1fYW5j
aG9yUG9pbnQueSgpKSk7Ci0gICAgcHJpbWFyeUxheWVyKCktPnNldEFuY2hvclBvaW50WihtX2Fu
Y2hvclBvaW50LnooKSk7Ci0gICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwotfQotCi12b2lkIEdy
YXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVUcmFuc2Zvcm0oKQotewotICAgIHByaW1hcnlM
YXllcigpLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzTGF5
ZXJCbGFja0JlcnJ5Ojp1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSgpCi17Ci0gICAgcHJpbWFyeUxh
eWVyKCktPnNldFN1YmxheWVyVHJhbnNmb3JtKG1fY2hpbGRyZW5UcmFuc2Zvcm0pOwotfQotCi12
b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVNYXNrc1RvQm91bmRzKCkKLXsKLSAg
ICBtX2xheWVyLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7Ci0gICAgdXBkYXRl
RGVidWdJbmRpY2F0b3JzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVw
ZGF0ZUNvbnRlbnRzT3BhcXVlKCkKLXsKLSAgICBtX2xheWVyLT5zZXRPcGFxdWUobV9jb250ZW50
c09wYXF1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUJhY2tm
YWNlVmlzaWJpbGl0eSgpCi17Ci0gICAgbV9sYXllci0+c2V0RG91YmxlU2lkZWQobV9iYWNrZmFj
ZVZpc2liaWxpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVM
YXllclByZXNlcnZlczNEKCkKLXsKLSAgICBpZiAobV9wcmVzZXJ2ZXMzRCAmJiAhbV90cmFuc2Zv
cm1MYXllcikgewotICAgICAgICAvLyBDcmVhdGUgdGhlIHRyYW5zZm9ybSBsYXllci4KLSAgICAg
ICAgbV90cmFuc2Zvcm1MYXllciA9IExheWVyV2ViS2l0VGhyZWFkOjpjcmVhdGUoTGF5ZXJEYXRh
OjpUcmFuc2Zvcm1MYXllciwgdGhpcyk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgcG9zaXRpb24g
ZnJvbSB0aGlzIGxheWVyLgotICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7Ci0gICAgICAg
IHVwZGF0ZUxheWVyU2l6ZSgpOwotICAgICAgICB1cGRhdGVBbmNob3JQb2ludCgpOwotICAgICAg
ICB1cGRhdGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgdXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0oKTsK
LSAgICAgICAgdXBkYXRlQW5pbWF0aW9ucygpOwotCi0gICAgICAgIG1fbGF5ZXItPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQobV9zaXplLndpZHRoKCkgLyAyLjBmLCBtX3NpemUuaGVpZ2h0KCkgLyAy
LjBmKSk7Ci0KLSAgICAgICAgbV9sYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLjVm
LCAwLjVmKSk7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5OwotICAgICAg
ICBtX2xheWVyLT5zZXRUcmFuc2Zvcm0oaWRlbnRpdHkpOwotCi0gICAgICAgIC8vIFNldCB0aGUg
b2xkIGxheWVyIHRvIG9wYWNpdHkgb2YgMS4gRnVydGhlciBkb3duIHdlIHdpbGwgc2V0IHRoZSBv
cGFjaXR5IG9uIHRoZSB0cmFuc2Zvcm0gbGF5ZXIuCi0gICAgICAgIG1fbGF5ZXItPnNldE9wYWNp
dHkoMSk7Ci0KLSAgICAgICAgLy8gTW92ZSB0aGlzIGxheWVyIHRvIGJlIGEgY2hpbGQgb2YgdGhl
IHRyYW5zZm9ybSBsYXllci4KLSAgICAgICAgaWYgKG1fbGF5ZXItPnN1cGVybGF5ZXIoKSkKLSAg
ICAgICAgICAgIG1fbGF5ZXItPnN1cGVybGF5ZXIoKS0+cmVwbGFjZVN1YmxheWVyKG1fbGF5ZXIu
Z2V0KCksIG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkpOwotICAgICAgICBtX3RyYW5zZm9ybUxheWVy
LT5hZGRTdWJsYXllcihtX2xheWVyLmdldCgpKTsKLQotICAgICAgICBtX3RyYW5zZm9ybUxheWVy
LT5zZXRQcmVzZXJ2ZXMzRCh0cnVlKTsKLSAgICAgICAgbV9sYXllci0+c2V0UHJlc2VydmVzM0Qo
dHJ1ZSk7Ci0KLSAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Ci0gICAgfSBlbHNlIGlmICgh
bV9wcmVzZXJ2ZXMzRCAmJiBtX3RyYW5zZm9ybUxheWVyKSB7Ci0gICAgICAgIC8vIFJlbGFjZSB0
aGUgdHJhbnNmb3JtTGF5ZXIgaW4gdGhlIHBhcmVudCB3aXRoIHRoaXMgbGF5ZXIuCi0gICAgICAg
IG1fbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Ci0gICAgICAgIGlmIChtX3RyYW5zZm9y
bUxheWVyLT5zdXBlcmxheWVyKCkpCi0gICAgICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zdXBl
cmxheWVyKCktPnJlcGxhY2VTdWJsYXllcihtX3RyYW5zZm9ybUxheWVyLmdldCgpLCBtX2xheWVy
LmdldCgpKTsKLQotICAgICAgICAvLyBSZWxlYXNlIHRoZSB0cmFuc2Zvcm0gbGF5ZXIuCi0gICAg
ICAgIG1fdHJhbnNmb3JtTGF5ZXIgPSAwOwotCi0gICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb24o
KTsKLSAgICAgICAgdXBkYXRlTGF5ZXJTaXplKCk7Ci0gICAgICAgIHVwZGF0ZUFuY2hvclBvaW50
KCk7Ci0gICAgICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwotICAgICAgICB1cGRhdGVDaGlsZHJlblRy
YW5zZm9ybSgpOwotICAgICAgICB1cGRhdGVBbmltYXRpb25zKCk7Ci0KLSAgICAgICAgbV9sYXll
ci0+c2V0UHJlc2VydmVzM0QoZmFsc2UpOwotCi0gICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgp
OwotICAgIH0KLQotICAgIHVwZGF0ZU9wYWNpdHlPbkxheWVyKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUxheWVySXNEcmF3YWJsZSgpCi17Ci0gICAgLy8gRm9y
IHRoZSByZXN0IG9mIHRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdG9yIGNvZGUsIHRoZXJlIGlzIG5v
IHJlYXNvbiB0byBtYWtlIGEKLSAgICAvLyBkaXN0aW5jdGlvbiBiZXR3ZWVuIGRyYXdzQ29udGVu
dCBhbmQgY29udGVudHNWaXNpYmxlLiBTbywgZm9yIG1fbGF5ZXIsIHRoZXNlIHR3bwotICAgIC8v
IGZsYWdzIGFyZSBjb21iaW5lZCBoZXJlLiBtX2NvbnRlbnRzTGF5ZXIgc2hvdWxkbid0IHJlY2Vp
dmUgdGhlIGRyYXdzQ29udGVudCBmbGFnCi0gICAgLy8gc28gaXQgaXMgb25seSBnaXZlbiBjb250
ZW50c1Zpc2libGUuCi0gICAgbV9sYXllci0+c2V0RHJhd2FibGUobV9kcmF3c0NvbnRlbnQgJiYg
bV9jb250ZW50c1Zpc2libGUpOwotCi0gICAgaWYgKG1fY29udGVudHNMYXllcikKLSAgICAgICAg
bV9jb250ZW50c0xheWVyLT5zZXREcmF3YWJsZShtX2NvbnRlbnRzVmlzaWJsZSk7Ci0KLSAgICBp
ZiAobV9kcmF3c0NvbnRlbnQpCi0gICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwot
Ci0gICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OnVwZGF0ZUhhc0ZpeGVkQ29udGFpbmVyKCkKLXsKLSAgICBtX2xheWVyLT5zZXRI
YXNGaXhlZENvbnRhaW5lcihtX2hhc0ZpeGVkQ29udGFpbmVyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlSGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpCi17Ci0g
ICAgbV9sYXllci0+c2V0SGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZShtX2hhc0ZpeGVkQW5jZXN0
b3JJbkRPTVRyZWUpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVM
YXllckJhY2tncm91bmRDb2xvcigpCi17Ci0gICAgaWYgKG1fYmFja2dyb3VuZENvbG9yLmlzVmFs
aWQoKSkKLSAgICAgICAgc2V0TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fbGF5ZXIsIG1fYmFja2dy
b3VuZENvbG9yKTsKLSAgICBlbHNlCi0gICAgICAgIGNsZWFyTGF5ZXJCYWNrZ3JvdW5kQ29sb3Io
Km1fbGF5ZXIpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBHcmFwaGljc0xh
eWVyQmxhY2tCZXJyeTo6dXBkYXRlRmlsdGVycygpCi17Ci0gICAgaWYgKCFtX2ZpbHRlcnMuc2l6
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0RmlsdGVycyht
X2ZpbHRlcnMpOwotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVw
ZGF0ZUFuaW1hdGlvbnMoKQotewotICAgIC8vIFdoZW4gdGhlcmUgaXMgYSB0cmFuc2Zvcm0gbGF5
ZXIsIHRoZSB0cmFuc2Zvcm0gbXVzdCBiZSBzZXQgb24gdGhhdCBsYXllcgotICAgIC8vIGluc3Rl
YWQgb2YgdGhlIGNvbnRlbnQgbGF5ZXIuIE9wYWNpdHkgY2FuIGJlIHNldCBvbiB0aGUgdHJhbnNm
b3JtIGxheWVyIG9yIHRoZQotICAgIC8vIGxheWVyIHdpdGggZXF1YWwgb3V0Y29tZSwgYnV0IGN1
cnJlbnRseSBpdCBpcyBhbHNvIHNldCBvbiB0aGUgdHJhbnNmb3JtCi0gICAgLy8gbGF5ZXIuIFNp
bmNlIHdlIG9ubHkgYWNjZWxlcmF0ZSBhbmltYXRpb25zIG9mIHRoZXNlIHR3byBwcm9wZXJ0aWVz
LCBpdAotICAgIC8vIGlzIHNhZmUgdG8gbW92ZSBhbGwgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB0
byB0aGUgdHJhbnNmb3JtIGxheWVyLCBhbmQKLSAgICAvLyByZW1vdmUgdGhlbSBmcm9tIHRoZSBs
YXllciBwcm9wZXIuCi0gICAgLy8gU28gdGhlIGZvbGxvd2luZyBjb2RlLCB3aGlsZSBpdCBsb29r
cyBzdHJhbmdlLCBpcyBjb3JyZWN0OgotICAgIC8vIHdlIHRyYW5zZmVyIGFsbCBhbmltYXRpb25z
IHRvIHRoZSB0cmFuc2Zvcm0gbGF5ZXIgaWYgaXQgZXhpc3RzLgotICAgIC8vIEZJWE1FOiBJZiBv
dGhlciBwcm9wZXJ0aWVzIGJlY29tZSBhbmltYXRlZCwgaXQgbWF5IG5vdCBiZSBlcXVpdmFsZW50
IHRvCi0gICAgLy8gbW92ZSB0aGVtIHRvIHRoZSB0cmFuc2Zvcm0gbGF5ZXIuIFRoZW4gdGhpcyBj
b2RlIG5lZWRzIHRvIGJlIHJldmlzaXRlZAotICAgIC8vIHRvIG9ubHkgbW92ZSB0aGUgdHJhbnNm
b3JtIGFuaW1hdGlvbnMgdG8gdGhlIHRyYW5zZm9ybSBsYXllci4KLSAgICBwcmltYXJ5TGF5ZXIo
KS0+c2V0UnVubmluZ0FuaW1hdGlvbnMobV9ydW5uaW5nQW5pbWF0aW9ucyk7Ci0gICAgcHJpbWFy
eUxheWVyKCktPnNldFN1c3BlbmRlZEFuaW1hdGlvbnMobV9zdXNwZW5kZWRBbmltYXRpb25zKTsK
LQotICAgIC8vIFdlIG5lZWQgdG8gbW92ZSB0aGUgYW5pbWF0aW9ucyB0byB0aGUgdHJhbnNmb3Jt
IGxheWVyIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBpZiAobV90cmFuc2Zvcm1MYXllcikgewotICAg
ICAgICBtX2xheWVyLT5zZXRSdW5uaW5nQW5pbWF0aW9ucyhWZWN0b3I8UmVmUHRyPExheWVyQW5p
bWF0aW9uPiA+KCkpOwotICAgICAgICBtX2xheWVyLT5zZXRTdXNwZW5kZWRBbmltYXRpb25zKFZl
Y3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4oKSk7Ci0gICAgfQotfQotCi12b2lkIEdyYXBo
aWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVDb250ZW50c1ZpZGVvKCkKLXsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUNv
bnRlbnRzUmVjdCgpCi17Ci0gICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2NvbnRlbnRzTGF5ZXItPnBvc2l0aW9uKCkgIT0gbV9jb250ZW50c1Jl
Y3QubG9jYXRpb24oKSkKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRQb3NpdGlvbihtX2Nv
bnRlbnRzUmVjdC5sb2NhdGlvbigpKTsKLQotICAgIGlmIChtX2NvbnRlbnRzTGF5ZXItPmJvdW5k
cygpICE9IG1fY29udGVudHNSZWN0LnNpemUoKSkKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5z
ZXRCb3VuZHMobV9jb250ZW50c1JlY3Quc2l6ZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVy
QmxhY2tCZXJyeTo6c2V0dXBDb250ZW50c0xheWVyKExheWVyV2ViS2l0VGhyZWFkKiBjb250ZW50
c0xheWVyKQotewotICAgIGlmIChjb250ZW50c0xheWVyID09IG1fY29udGVudHNMYXllcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY29udGVudHNMYXllcikgewotICAgICAgICBtX2Nv
bnRlbnRzTGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Ci0gICAgICAgIG1fY29udGVudHNM
YXllciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGNvbnRlbnRzTGF5ZXIpIHsKLSAgICAgICAgbV9j
b250ZW50c0xheWVyID0gY29udGVudHNMYXllcjsKLQotICAgICAgICBtX2NvbnRlbnRzTGF5ZXIt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6Onplcm8oKSk7Ci0KLSAgICAgICAgLy8gSXQgaXMg
bmVjZXNzYXJ5IHRvIHVwZGF0ZSBzZXREcmF3YWJsZSBhcyBzb29uIGFzIHdlIHJlY2VpdmUgdGhl
IG5ldyBjb250ZW50c0xheWVyLCBmb3IKLSAgICAgICAgLy8gdGhlIGNvcnJlY3RuZXNzIG9mIGVh
cmx5IGV4aXQgY29uZGl0aW9ucyBpbiBzZXREcmF3c0NvbnRlbnQoKSBhbmQgc2V0Q29udGVudHNW
aXNpYmxlKCkuCi0gICAgICAgIG1fY29udGVudHNMYXllci0+c2V0RHJhd2FibGUobV9jb250ZW50
c1Zpc2libGUpOwotCi0gICAgICAgIC8vIEluc2VydCB0aGUgY29udGVudCBsYXllciBmaXJzdC4g
VmlkZW8gZWxlbWVudHMgcmVxdWlyZSB0aGlzLCBiZWNhdXNlIHRoZXkgaGF2ZQotICAgICAgICAv
LyBzaGFkb3cgY29udGVudCB0aGF0IG11c3QgZGlzcGxheSBpbiBmcm9udCBvZiB0aGUgdmlkZW8u
Ci0gICAgICAgIG1fbGF5ZXItPmluc2VydFN1YmxheWVyKG1fY29udGVudHNMYXllci5nZXQoKSwg
MCk7Ci0KLSAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7Ci0KLSAgICAgICAgaWYgKGlzU2hv
d2luZ0RlYnVnQm9yZGVyKCkpIHsKLSAgICAgICAgICAgIHNldExheWVyQm9yZGVyQ29sb3IoKm1f
Y29udGVudHNMYXllciwgQ29sb3IoMCwgMCwgMTI4LCAxODApKTsKLSAgICAgICAgICAgIG1fY29u
dGVudHNMYXllci0+c2V0Qm9yZGVyV2lkdGgoMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdXBk
YXRlRGVidWdJbmRpY2F0b3JzKCk7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gc2ltcGx5IG1pbWlj
cyB0aGUgb3BlcmF0aW9uIG9mIEdyYXBoaWNzTGF5ZXJDQQotdm9pZCBHcmFwaGljc0xheWVyQmxh
Y2tCZXJyeTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQotewotICAgIHByaW1hcnlMYXllcigpLT5z
ZXRPcGFjaXR5KG1fb3BhY2l0eSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVy
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgR3JhcGhpY3NMYXllckJsYWNrQmVycnlfaAotI2RlZmluZSBHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeV9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0K
LSNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5o
IgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBMYXllckFuaW1hdGlvbjsKLWNsYXNzIExheWVyV2ViS2l0VGhyZWFkOwotCi1jbGFzcyBHcmFw
aGljc0xheWVyQmxhY2tCZXJyeSA6IHB1YmxpYyBHcmFwaGljc0xheWVyIHsKLXB1YmxpYzoKLSAg
ICBHcmFwaGljc0xheWVyQmxhY2tCZXJyeShHcmFwaGljc0xheWVyQ2xpZW50Kik7Ci0gICAgdmly
dHVhbCB+R3JhcGhpY3NMYXllckJsYWNrQmVycnkoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRO
YW1lKGNvbnN0IFN0cmluZyYpOwotCi0gICAgdmlydHVhbCBib29sIHNldENoaWxkcmVuKGNvbnN0
IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoR3Jh
cGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NM
YXllciosIGludCBpbmRleCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQWJvdmUoR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRD
aGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsKLSAgICB2
aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGlj
c0xheWVyKiBuZXdDaGlsZCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgp
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJik7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd3ND
b250ZW50KGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Zpc2libGUoYm9vbCk7
Ci0gICAgdmlydHVhbCB2b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKik7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0SGFzRml4ZWRDb250YWluZXIoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUoYm9vbCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIGZpbHRlciBjYW4gYmUgcmVuZGVyZWQgYnkgdGhl
IGNvbXBvc2l0b3IKLSAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVy
YXRpb25zICYpOwotICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlcnM7IH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
T3BhcXVlKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9v
bCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBGbG9hdFJlY3QmLCBTaG91bGRDbGlwVG9MYXllciA9IENsaXBUb0xheWVy
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwotCi0gICAg
dmlydHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50
U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lLCBkb3VibGUgdGltZU9mZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOwotICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSk7Ci0gICAg
dmlydHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01l
ZGlhKFBsYXRmb3JtTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZh
cyhQbGF0Zm9ybUxheWVyKik7Ci0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JhY2tncm91bmRDb2xv
cihjb25zdCBDb2xvciYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JvcmRlcihjb25zdCBD
b2xvciYsIGZsb2F0IGJvcmRlcldpZHRoKTsKLQotICAgIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJl
ZCgpCi0gICAgewotICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+
bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIG5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQoZG91YmxlIHRpbWUpCi0gICAgewotICAgICAgICBpZiAobV9jbGllbnQpCi0g
ICAgICAgICAgICBtX2NsaWVudC0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCB0aW1lKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwot
Ci0gICAgdm9pZCB1cGRhdGVPcGFjaXR5T25MYXllcigpOwotCi0gICAgTGF5ZXJXZWJLaXRUaHJl
YWQqIHByaW1hcnlMYXllcigpIGNvbnN0ICB7IHJldHVybiBtX3RyYW5zZm9ybUxheWVyLmdldCgp
ID8gbV90cmFuc2Zvcm1MYXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7IH0KLSAgICBMYXllcldl
YktpdFRocmVhZCogaG9zdExheWVyRm9yU3VibGF5ZXJzKCkgY29uc3Q7Ci0gICAgTGF5ZXJXZWJL
aXRUaHJlYWQqIGxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0OwotCi0gICAgdm9pZCB1cGRhdGVT
dWJsYXllckxpc3QoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKLSAgICB2b2lk
IHVwZGF0ZUxheWVyU2l6ZSgpOwotICAgIHZvaWQgdXBkYXRlQW5jaG9yUG9pbnQoKTsKLSAgICB2
b2lkIHVwZGF0ZVRyYW5zZm9ybSgpOwotICAgIHZvaWQgdXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0o
KTsKLSAgICB2b2lkIHVwZGF0ZU1hc2tzVG9Cb3VuZHMoKTsKLSAgICB2b2lkIHVwZGF0ZUNvbnRl
bnRzT3BhcXVlKCk7Ci0gICAgdm9pZCB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsKLSAgICB2
b2lkIHVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVySXNEcmF3
YWJsZSgpOwotICAgIHZvaWQgdXBkYXRlSGFzRml4ZWRDb250YWluZXIoKTsKLSAgICB2b2lkIHVw
ZGF0ZUhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyQmFj
a2dyb3VuZENvbG9yKCk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgdXBkYXRl
RmlsdGVycygpOwotI2VuZGlmCi0gICAgdm9pZCB1cGRhdGVBbmltYXRpb25zKCk7Ci0KLSAgICB2
b2lkIHVwZGF0ZUNvbnRlbnRzSW1hZ2UoSW1hZ2UqKTsKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRz
VmlkZW8oKTsKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwotCi0gICAgdm9pZCBzZXR1
cENvbnRlbnRzTGF5ZXIoTGF5ZXJXZWJLaXRUaHJlYWQqKTsKLSAgICBMYXllcldlYktpdFRocmVh
ZCogY29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllci5nZXQoKTsg
fQotCi0gICAgUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBtX2xheWVyOwotICAgIFJlZlB0cjxM
YXllcldlYktpdFRocmVhZD4gbV90cmFuc2Zvcm1MYXllcjsKLSAgICBSZWZQdHI8TGF5ZXJXZWJL
aXRUaHJlYWQ+IG1fY29udGVudHNMYXllcjsKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAg
ICBGaWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKLSNlbmRpZgotCi0gICAgVmVjdG9yPFJlZlB0
cjxMYXllckFuaW1hdGlvbj4gPiBtX3J1bm5pbmdBbmltYXRpb25zOwotICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJBbmltYXRpb24+ID4gbV9zdXNwZW5kZWRBbmltYXRpb25zOwotICAgIGRvdWJsZSBt
X3N1c3BlbmRUaW1lOwotCi0gICAgZW51bSBDb250ZW50c0xheWVyUHVycG9zZSB7Ci0gICAgICAg
IE5vQ29udGVudHNMYXllciA9IDAsCi0gICAgICAgIENvbnRlbnRzTGF5ZXJGb3JJbWFnZSwKLSAg
ICAgICAgQ29udGVudHNMYXllckZvclZpZGVvLAotICAgICAgICBDb250ZW50c0xheWVyRm9yQ2Fu
dmFzLAotICAgIH07Ci0KLSAgICBDb250ZW50c0xheWVyUHVycG9zZSBtX2NvbnRlbnRzTGF5ZXJQ
dXJwb3NlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSVR5cGVVdGlscy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSVR5cGVVdGlscy5oCShy
ZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0lUeXBlVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSVR5cGVVdGlsc19oCi0jZGVmaW5lIElU
eXBlVXRpbHNfaAotCi0jaW5jbHVkZSA8ZnNfYXBpLmg+Ci0KLXN0YXRpYyBpbmxpbmUgRlNfRklY
RUQgZmxvYXRUb0lUeXBlRml4ZWQoZmxvYXQgZikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RlNfRklY
RUQ+KGYgKiA2NTUzNi4wKTsgfQotc3RhdGljIGlubGluZSBGU19GSVhFRCBpbnRUb0lUeXBlRml4
ZWQoaW50IGkpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEZTX0ZJWEVEPihpIDw8IDE2KTsgfQotCi1z
dGF0aWMgaW5saW5lIGZsb2F0IGlUeXBlRml4ZWRUb0Zsb2F0KEZTX0ZJWEVEIG4pIHsgcmV0dXJu
IG4gLyA2NTUzNi4wOyB9Ci0KLXN0YXRpYyBjb25zdCBGU19GSVhFRCBNQVhJVFlQRUZPTlRTQ0FM
RSA9IGludFRvSVR5cGVGaXhlZCgxMDAwMCkgLSAxOwotCi1zdGF0aWMgY29uc3QgRlNfRklYRUQg
SVRZUEVGQUtFQk9MREFNT1VOVCA9IGZsb2F0VG9JVHlwZUZpeGVkKDAuMDYpOyAvLyA2JSBwc2V1
ZG8gYm9sZAotCi0jZW5kaWYgLy8gSVR5cGVVdGlsc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ljb25CbGFja0JlcnJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ljb25CbGFj
a0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9JY29uQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSWNvbi5oIgotCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotSWNvbjo6fkljb24oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgSW50UmVjdCBjb25zdCYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29u
Rm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKQotewotICAgIC8vIEZJWE1FOiByZW1vdmUg
MCB0ZW1wbGF0ZSBwYXJhbSB3aGVuIHRoaXMgaXMgaW1wbGVtZW50ZWQKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQmxhY2tC
ZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9JbWFnZUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQmxhY2tCZXJyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkltYWdlLmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAi
SW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotCi0jaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtUmVzb3VyY2VTdG9yZS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5n
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpSZXNvdXJjZURhdGE7Ci11c2luZyBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6UmVzb3VyY2VTdG9yZTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVm
UHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciAqbmFtZSkK
LXsKLSAgICBSZXNvdXJjZURhdGEgZGF0YSA9IFJlc291cmNlU3RvcmU6Omluc3RhbmNlKCktPnJl
cXVlc3RSZXNvdXJjZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjpmcm9tVXRmOChuYW1l
KSk7Ci0gICAgaWYgKCFkYXRhLmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpu
dWxsSW1hZ2UoKTsKLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLmxlbigpKTsKLSAgICBpZiAoIWJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpudWxsSW1hZ2UoKTsKLQotICAgIFJlZlB0cjxC
aXRtYXBJbWFnZT4gaW1nID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwotICAgIGltZy0+c2V0RGF0
YShidWZmZXIucmVsZWFzZSgpLCB0cnVlIC8qIGFsbERhdGFSZWNlaXZlZCAqLyk7Ci0gICAgcmV0
dXJuIGltZy5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjph
c05ld05hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbmV3IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6VGlsZWRJbWFnZShtX3NpemUsIG1fYnl0ZXMpOwotfQotCi1ib29s
IEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1l
dGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgaWYgKG1fZnJh
bWUpIHsKLSAgICAgICAgZGVsZXRlIG1fZnJhbWU7Ci0gICAgICAgIG1fZnJhbWUgPSAwOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1CaXRtYXBJ
bWFnZTo6Qml0bWFwSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlLCBJbWFnZU9i
c2VydmVyKiBvYnNlcnZlcikKLSAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9jdXJyZW50
RnJhbWUoMCkKLSAgICAsIG1fZnJhbWVzKDApCi0gICAgLCBtX2ZyYW1lVGltZXIoMCkKLSAgICAs
IG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQotICAgICwgbV9yZXBldGl0aW9uQ291
bnRTdGF0dXMoVW5rbm93bikKLSAgICAsIG1fcmVwZXRpdGlvbnNDb21wbGV0ZSgwKQotICAgICwg
bV9kZWNvZGVkU2l6ZSgwKQotICAgICwgbV9mcmFtZUNvdW50KDEpCi0gICAgLCBtX2lzU29saWRD
b2xvcihmYWxzZSkKLSAgICAsIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IoZmFsc2UpCi0gICAgLCBt
X2FuaW1hdGlvbkZpbmlzaGVkKHRydWUpCi0gICAgLCBtX2FsbERhdGFSZWNlaXZlZCh0cnVlKQot
ICAgICwgbV9oYXZlU2l6ZSh0cnVlKQotICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCi0gICAg
LCBtX2hhdmVGcmFtZUNvdW50KHRydWUpCi17Ci0gICAgaW50IHdpZHRoID0gbmF0aXZlSW1hZ2Ut
PnNpemUoKS53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBuYXRpdmVJbWFnZS0+c2l6ZSgpLmhl
aWdodCgpOwotICAgIG1fZGVjb2RlZFNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQ7Ci0gICAgbV9z
aXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLQotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0g
ICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IG5hdGl2ZUltYWdlOwotICAgIG1fZnJhbWVzWzBdLm1f
aGFzQWxwaGEgPSBuYXRpdmVJbWFnZS0+aGFzQWxwaGEoKTsKLSAgICBtX2ZyYW1lc1swXS5tX2hh
dmVNZXRhZGF0YSA9IHRydWU7Ci0gICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7Ci19Ci0KLXZvaWQg
Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCi17Ci0gICAgbV9pc1NvbGlkQ29sb3Ig
PSBzaXplKCkud2lkdGgoKSA9PSAxICYmIHNpemUoKS5oZWlnaHQoKSA9PSAxICYmIGZyYW1lQ291
bnQoKSA9PSAxOwotICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOwotICAgIGlmICht
X2lzU29saWRDb2xvcikgewotICAgICAgICB1bnNpZ25lZCBidWZmZXI7Ci0gICAgICAgIE5hdGl2
ZUltYWdlUHRyIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAg
aW1hZ2UtPnJlYWRQaXhlbHMoJmJ1ZmZlciwgMSk7Ci0gICAgICAgIG1fc29saWRDb2xvciA9IENv
bG9yKGJ1ZmZlcik7Ci0gICAgfQotfQotCi12b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxh
dGZvcm1EYXRhKCkKLXsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlLCBJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0gICAgc3RhcnRBbmltYXRp
b24oKTsKLQotICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJl
Y3Qgbm9ybURzdFJlY3QgPSBkc3RSZWN0Lm5vcm1hbGl6ZWQoKTsKLSAgICBGbG9hdFJlY3Qgbm9y
bVNyY1JlY3QgPSBzcmNSZWN0Lm5vcm1hbGl6ZWQoKTsKLQotICAgIGlmIChub3JtU3JjUmVjdC5p
c0VtcHR5KCkgfHwgbm9ybURzdFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47IC8vIE5v
dGhpbmcgdG8gZHJhdy4KLQotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcp
Ci0gICAgbm9ybVNyY1JlY3QgPSBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKG5vcm1T
cmNSZWN0LCBpbWFnZS0+c2l6ZSgpKTsKLSNlbmRpZgotCi0gICAgLy8gdXNlIHNpbWlsYXIgb3Jp
ZW50YXRpb24gY29kZSBhcyBJbWFnZVNraWEKLSAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBvcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50
YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsgIAotCi0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzYXZlQ29udGV4dCgqY29udGV4dCwgZmFsc2UpOwotICAgIGlmIChvcmllbnRhdGlv
biAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgewotICAgICAgICBzYXZlQ29udGV4dC5zYXZl
KCk7Ci0KLSAgICAgICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8g
YmUgYXQgKDAsIDApCi0gICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShub3JtRHN0UmVjdC54KCks
IG5vcm1Ec3RSZWN0LnkoKSk7Ci0gICAgICAgIG5vcm1Ec3RSZWN0LnNldExvY2F0aW9uKEZsb2F0
UG9pbnQoKSk7Ci0KLSAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKG9yaWVudGF0aW9uLnRyYW5z
Zm9ybUZyb21EZWZhdWx0KG5vcm1Ec3RSZWN0LnNpemUoKSkpOwotICAgICAgICBpZiAob3JpZW50
YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAgICAgICAgICAgLy8gVGhlIGRlc3RpbmF0
aW9uIHJlY3Qgd2lsbCBoYXZlIGl0cyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQg
Zm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3
YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sg
aGVyZS4KLSAgICAgICAgICAgIG5vcm1Ec3RSZWN0ID0gRmxvYXRSZWN0KG5vcm1Ec3RSZWN0Lngo
KSwgbm9ybURzdFJlY3QueSgpLCBub3JtRHN0UmVjdC5oZWlnaHQoKSwgbm9ybURzdFJlY3Qud2lk
dGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBvbGRPcGVy
YXRvciA9IGNvbnRleHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpOwotICAgIGNvbnRleHQtPnNldENv
bXBvc2l0ZU9wZXJhdGlvbihvcCk7Ci0gICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmFk
ZEltYWdlKG5vcm1Ec3RSZWN0LCBub3JtU3JjUmVjdCwgaW1hZ2UpOwotICAgIGNvbnRleHQtPnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihvbGRPcGVyYXRvcik7Ci0KLSAgICBpZiAoSW1hZ2VPYnNlcnZl
ciogb2JzZXJ2ZXIgPSBpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIG9ic2VydmVyLT5kaWREcmF3
KHRoaXMpOwotfQotCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBCbGVuZE1v
ZGUpCi17Ci0gICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIHBhdHRl
cm5UcmFuc2Zvcm1hdGlvbiBjb250YWlucyB0aGUgdGlsZSBzY2FsZSBmYWN0b3IgcmVsYXRpdmUg
dG8KLSAgICAvLyBkb2N1bWVudCBjb29yZGluYXRlcy4gcGhhc2UgaXMgZ2l2ZW4gaW4gZG9jdW1l
bnQgY29vcmRpbmF0ZXMgYW5kCi0gICAgLy8gY29ycmVzcG9uZHMgdG8gYSB0ZXh0dXJlIGRyYXdu
IHdpdGggc3JjIHN0YXJ0aW5nIGF0ICgwLCAwKS4KLSAgICAvLyBUaHVzLCBkc3RSZWN0IHN0YXJ0
cyBhdCBwaGFzZSArIHBhdHRlcm5UcmFuc2Zvcm1hdGlvbi5tYXBQb2ludChzcmNSZWN0LmxvY2F0
aW9uKCkpLgotICAgIEFmZmluZVRyYW5zZm9ybSBzcmNUcmFuc2Zvcm07Ci0gICAgc3JjVHJhbnNm
b3JtLnRyYW5zbGF0ZShwaGFzZS54KCksIHBoYXNlLnkoKSk7Ci0gICAgc3JjVHJhbnNmb3JtLm11
bHRpcGx5KHBhdHRlcm5UcmFuc2Zvcm1hdGlvbik7Ci0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJf
RE9XTl9TQU1QTElORykKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdExvY2FsKHNyY1JlY3QpOwotICAg
IGNvbnN0IEludFNpemUgdW5zY2FsZWRTaXplID0gc2l6ZSgpOwotICAgIGNvbnN0IEludFNpemUg
c2NhbGVkU2l6ZSA9IGltYWdlLT5zaXplKCk7Ci0gICAgaWYgKHVuc2NhbGVkU2l6ZSAhPSBzY2Fs
ZWRTaXplKSB7Ci0gICAgICAgIHNyY1JlY3RMb2NhbCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3du
U2FtcGxpbmcoc3JjUmVjdCwgc2NhbGVkU2l6ZSk7Ci0gICAgICAgIC8vIElmIHRoZSBpbWFnZSBo
YXMgYmVlbiBkb3duIHNhbXBsZWQsIHRoZSB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgdGFrZSB0aGUg
c2NhbGUgaW50byBhY2NvdW50LgotICAgICAgICBmbG9hdCB4c2NhbGUgPSBzdGF0aWNfY2FzdDxm
bG9hdD4odW5zY2FsZWRTaXplLndpZHRoKCkpIC8gc2NhbGVkU2l6ZS53aWR0aCgpOwotICAgICAg
ICBmbG9hdCB5c2NhbGUgPSBzdGF0aWNfY2FzdDxmbG9hdD4odW5zY2FsZWRTaXplLmhlaWdodCgp
KSAvIHNjYWxlZFNpemUuaGVpZ2h0KCk7Ci0gICAgICAgIHNyY1RyYW5zZm9ybS5zY2FsZU5vblVu
aWZvcm0oeHNjYWxlLCB5c2NhbGUpOwotICAgIH0KLSNlbHNlCi0gICAgRmxvYXRSZWN0IHNyY1Jl
Y3RMb2NhbChzcmNSZWN0KTsKLSNlbmRpZgotICAgIHNyY1RyYW5zZm9ybS50cmFuc2xhdGUoc3Jj
UmVjdExvY2FsLngoKSwgc3JjUmVjdExvY2FsLnkoKSk7Ci0gICAgZG91YmxlIHNyY1RyYW5zZm9y
bUFycmF5WzZdID0gewotICAgICAgICBzcmNUcmFuc2Zvcm0uYSgpLCBzcmNUcmFuc2Zvcm0uYigp
LAotICAgICAgICBzcmNUcmFuc2Zvcm0uYygpLCBzcmNUcmFuc2Zvcm0uZCgpLAotICAgICAgICBz
cmNUcmFuc2Zvcm0uZSgpLCBzcmNUcmFuc2Zvcm0uZigpCi0gICAgfTsKLQotICAgIENvbXBvc2l0
ZU9wZXJhdG9yIG9sZE9wZXJhdG9yID0gY29udGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0g
ICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKLSAgICBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+YWRkUGF0dGVybihkc3RSZWN0LCBzcmNSZWN0TG9jYWwsIHNyY1RyYW5z
Zm9ybUFycmF5LCBpbWFnZSk7Ci0gICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9s
ZE9wZXJhdG9yKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JbWFnZUJ1ZmZlckJsYWNrQmVycnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvSW1hZ2VCdWZmZXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JbWFnZUJ1ZmZlckJsYWNr
QmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyNiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkJhc2U2NC5oIgot
I2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpQRUdJbWFnZUVuY29kZXIuaCIKLSNpbmNsdWRl
ICJMYXllck1lc3NhZ2UuaCIKLSNpbmNsdWRlICJQTkdJbWFnZUVuY29kZXIuaCIKLSNpbmNsdWRl
ICJUaWxlZEltYWdlLmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMkNvbnRl
eHRTdGF0ZS5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+Ci0jaW5j
bHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8Qmxh
Y2tCZXJyeVBsYXRmb3JtU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1X
aW5kb3cuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIGJvb2wgbWFrZUJ1ZmZlckN1cnJlbnQoSG9zdFdpbmRvdyogd2luZG93KQotewot
ICAgIEFTU0VSVChpc0NvbXBvc2l0aW5nVGhyZWFkKCkpOwotCi0gICAgaWYgKHdpbmRvdyAmJiB3
aW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpKSB7Ci0gICAgICAgIGlmIChCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogcGxhdGZvcm1XaW5kb3cgPSB3aW5kb3ctPnBsYXRm
b3JtUGFnZUNsaWVudCgpLT5wbGF0Zm9ybVdpbmRvdygpKSB7Ci0gICAgICAgICAgICBpZiAoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjptYWtlQnVmZmVyQ3VycmVudChwbGF0Zm9ybVdp
bmRvdy0+YnVmZmVyKCksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzIpKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
SWYgd2UgZG9uJ3QgaGF2ZSBhIHdpbmRvdyBidXQgdGhlIGFwcGxpY2F0aW9uIHN0YXRlIHNhdmVy
IGlzIGVuYWJsZWQsCi0gICAgLy8gd2UncmUgdXNpbmcgYSBCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2VDb21wb3NpdG9yIGZvciByZW5kZXJpbmcsCi0gICAgLy8gdGhhdCBtYWtlcyBzdXJlIGEg
Y29udGV4dCBpcyBhbHdheXMgY3VycmVudCBvbiB0aGUgY29tcG9zaXRpbmcgdGhyZWFkLgotICAg
IGlmIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGluZ3M6OmlzR0xFUzJBcHBTdGF0ZVNhdmVy
RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE90aGVyd2lzZSwgd2Un
bGwgaGF2ZSB0byB0cnkgYW5kIGZhbGwgYmFjayB0byBvdXIgbGFzdCBob3BlLgotICAgIHJldHVy
biBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6Om1ha2VTaGFyZWRSZXNvdXJjZUNvbnRl
eHRDdXJyZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzIpOwotfQotCi1z
dGF0aWMgYm9vbCBnZXRJbWFnZURhdGFJbnRlcm5hbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIHNpemUsIHVuc2lnbmVkIGNoYXIq
IHJlc3VsdCwgYm9vbCB1bm11bHRpcGx5LCBIb3N0V2luZG93KiB3aW5kb3cpCi17Ci0gICAgaWYg
KCFtYWtlQnVmZmVyQ3VycmVudCh3aW5kb3cpKSB7Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpsb2dBbHdheXMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsV2FybiwKLSAgICAg
ICAgICAgICJJbWFnZUJ1ZmZlckJsYWNrQmVycnkgZ2V0SW1hZ2VEYXRhSW50ZXJuYWwoKSBlcnJv
cjogY2Fubm90IG1ha2UgYnVmZmVyIGN1cnJlbnQsIHJldHVybmluZyB6ZXJvZWQtb3V0IHBpeGVs
cy4iKTsKLSAgICAgICAgbWVtc2V0KHJlc3VsdCwgMCwgcmVjdC53aWR0aCgpICogcmVjdC5oZWln
aHQoKSAqIDQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gcmVhZFBp
eGVscyBjYW4gY2FsbCB1cGRhdGVCYWNraW5nIHdoaWNoIGRyYXdzIHRoZSBkaXNwbGF5IGxpc3Qu
IFRoaXMgaXMgb3V0LW9mLWJhbmQgcmVuZGVyaW5nIGFuZCB3ZSBuZWVkCi0gICAgLy8gdG8gcHJv
dGVjdCB0aGUgZW1iZWRkZXIgZnJvbSBzdGF0ZSBtdXRhdGlvbnMuCi0gICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMkNvbnRleHRTdGF0ZTo6QXBwU3RhdGVTYXZlciBhcHBT
dGF0ZVNhdmVyOwotCi0gICAgLy8gQW55IHBpeGVscyBvdXRzaWRlIHRoZSBjYW52YXMgYXJlIHJl
dHVybmVkIGFzIHRyYW5zcGFyZW50IGJsYWNrIGluIHRoZSByZXN1bHRpbmcgSW1hZ2VEYXRhIG9i
amVjdC4KLSAgICBpZiAocmVjdC54KCkgPCAwCi0gICAgICAgIHx8IHJlY3QueSgpIDwgMAotICAg
ICAgICB8fCByZWN0Lm1heFgoKSA+IHNpemUud2lkdGgoKQotICAgICAgICB8fCByZWN0Lm1heFko
KSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChyZXN1bHQsIDAsIHJlY3Qud2lkdGgo
KSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsKLQotICAgIEludFJlY3Qgc3VicmVjdCA9IHJlY3Q7Ci0g
ICAgc3VicmVjdC5pbnRlcnNlY3Qoc2l6ZSk7Ci0gICAgLy8gbm90aGluZyB0byBkbyBpZiByZWN0
IGlzIGNvbXBsZXRlbHkgb3V0c2lkZSBvZiB0aGUgaW1hZ2UgYXJlYQotICAgIGlmIChzdWJyZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gYWRqdXN0IGZvciBuZWdh
dGl2ZSB4IGFuZCB5IGluZGV4Ci0gICAgaWYgKHJlY3QueCgpIDwgMCkKLSAgICAgICAgcmVzdWx0
ICs9ICgtcmVjdC54KCkgKiA0KTsKLSAgICBpZiAocmVjdC55KCkgPCAwKQotICAgICAgICByZXN1
bHQgKz0gKC1yZWN0LnkoKSAqIHJlY3Qud2lkdGgoKSAqIDQpOwotCi0gICAgLy8gRklYTUU6IFdl
IG5lZWQgdG8gaW1wbGVtZW50IGEgdGlsZWQgYnVmZmVyLgotICAgIGNvbnN0IGludCBtYXhUaWxl
U2l6ZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6VGlsZWRJbWFnZTo6ZGVmYXVs
dFRpbGVTaXplKCk7Ci0gICAgSW50UmVjdCByID0gc3VicmVjdDsKLSAgICBJbnRSZWN0IHRpbGVS
ZWN0KDAsIDAsIG1heFRpbGVTaXplLCBtYXhUaWxlU2l6ZSk7Ci0gICAgci5pbnRlcnNlY3QodGls
ZVJlY3QpOwotICAgIGlmICghci5pc0VtcHR5KCkpCi0gICAgICAgIGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5yZWFkUGl4ZWxzKHIsIHJlc3VsdCwgdW5tdWx0aXBseSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpnZXRJbWFnZURhdGEoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBzaXpl
LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQsIGJvb2wgdW5tdWx0aXBseSkgY29uc3QKLXsKLSAgICBp
ZiAoIWlzQ29tcG9zaXRpbmdUaHJlYWQoKSkgewotICAgICAgICAvLyBVc2UgY3JlYXRlRnVuY3Rp
b25DYWxsTWVzc2FnZSBpbnN0ZWFkIG9mIGNyZWF0ZU1ldGhvZENhbGxNZXNzYWdlIHRvIGF2b2lk
IGRlYWRsb2NrCi0gICAgICAgIC8vIHdpdGggR3VhcmRlZCBwb2ludGVycy4KLSAgICAgICAgZGlz
cGF0Y2hTeW5jQ29tcG9zaXRpbmdNZXNzYWdlKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVG
dW5jdGlvbkNhbGxNZXNzYWdlKAotICAgICAgICAgICAgJmdldEltYWdlRGF0YUludGVybmFsLCBj
b250ZXh0LCByZWN0LCBzaXplLCByZXN1bHQsIHVubXVsdGlwbHksIG1fd2luZG93KSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBnZXRJbWFnZURhdGFJbnRlcm5hbChjb250ZXh0LCBy
ZWN0LCBzaXplLCByZXN1bHQsIHVubXVsdGlwbHksIG1fd2luZG93KTsKLX0KLQotc3RhdGljIGJv
b2wgZmx1c2hBbmREcmF3KGNvbnN0IEltYWdlQnVmZmVyRGF0YSogb2JqZWN0LCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIENvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wpCi17Ci0g
ICAgaWYgKCFtYWtlQnVmZmVyQ3VycmVudChvYmplY3QtPm1fd2luZG93KSkgewotICAgICAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nQWx3YXlzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dM
ZXZlbFdhcm4sCi0gICAgICAgICAgICAiSW1hZ2VCdWZmZXJCbGFja0JlcnJ5IGZsdXNoQW5kRHJh
dygpIGVycm9yOiBjYW5ub3QgbWFrZSBidWZmZXIgY3VycmVudCwgaWdub3JpbmcgY2FsbC4iKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHVzaW5nIG5hbWVzcGFjZSBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M7Ci0KLSAgICAvLyBmbHVzaEFuZERyYXdCdWZmZXIg
Y2FsbHMgdXBkYXRlQmFja2luZyB3aGljaCBkcmF3cyB0aGUgZGlzcGxheSBsaXN0LiBUaGlzIGlz
IG91dC1vZi1iYW5kIHJlbmRlcmluZyBhbmQgd2UgbmVlZAotICAgIC8vIHRvIHByb3RlY3QgdGhl
IGVtYmVkZGVyIGZyb20gc3RhdGUgbXV0YXRpb25zLgotICAgIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczo6R0xFUzJDb250ZXh0U3RhdGU6OkFwcFN0YXRlU2F2ZXIgYXBwU3RhdGVTYXZl
cjsKLQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9sZE9wZXJhdG9yID0gY29udGV4dC0+Y29tcG9z
aXRlT3BlcmF0aW9uKCk7Ci0gICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsK
LSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Zmx1c2hBbmREcmF3QnVmZmVyKG9iamVj
dC0+bV9idWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICBjb250ZXh0LT5zZXRDb21wb3Np
dGVPcGVyYXRpb24ob2xkT3BlcmF0b3IpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElt
YWdlQnVmZmVyRGF0YTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIHRoaXNDb250ZXh0LCBHcmFwaGlj
c0NvbnRleHQqIG90aGVyQ29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKSBjb25zdAotewotICAgIGNvbnN0
IEZsb2F0UmVjdCBub3JtRGVzdFJlY3QgPSBkZXN0UmVjdC5ub3JtYWxpemVkKCk7Ci0gICAgY29u
c3QgRmxvYXRSZWN0IG5vcm1TcmNSZWN0ID0gc3JjUmVjdC5ub3JtYWxpemVkKCk7Ci0KLSAgICBp
ZiAobm9ybVNyY1JlY3QuaXNFbXB0eSgpIHx8IG5vcm1EZXN0UmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkcmF3LgotCi0gICAgaWYgKHRoaXNDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+aXNFbXB0eSgpICYmIHBsYXRmb3JtQnVmZmVySGFuZGxlKG1fYnVm
ZmVyKSkgewotICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvbGRPcGVyYXRvciA9IG90aGVyQ29u
dGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0gICAgICAgIG90aGVyQ29udGV4dC0+c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG9wKTsKLSAgICAgICAgb3RoZXJDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+ZHJhd0J1ZmZlcihtX2J1ZmZlciwgbm9ybURlc3RSZWN0LCBub3JtU3JjUmVjdCk7Ci0g
ICAgICAgIG90aGVyQ29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9sZE9wZXJhdG9yKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBkaXNwYXRjaFN5bmNDb21wb3NpdGluZ01lc3NhZ2UoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OmNyZWF0ZUZ1bmN0aW9uQ2FsbE1lc3NhZ2UoCi0gICAgICAgICAg
ICAmZmx1c2hBbmREcmF3LCB0aGlzLCBvdGhlckNvbnRleHQsIHN0eWxlQ29sb3JTcGFjZSwgbm9y
bURlc3RSZWN0LCBub3JtU3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSkpOwotICAgIH0K
LX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIGZsb2F0
LCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIEhvc3RXaW5kb3cqIHdp
bmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fc2l6ZShzaXplKQotICAgICwgbV9sb2dpY2Fs
U2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUoMSkKLXsKLSAgICBzdWNjZXNzID0g
ZmFsc2U7Ci0KLSAgICAvLyBUaGVyZSBpcyBubyBleHBsaWNpdGx5IGRlZmluZWQgZGVmYXVsdCBj
dG9yIGZvciBJbWFnZUJ1ZmZlckRhdGE6Om1fZGF0YSwKLSAgICAvLyBvbiBwdXJwb3NlIC0gcHJl
Y2F1dGlvbi4gSGVuY2UgdXBvbiBjcmVhdGlvbiBtX2RhdGEgd2lsbCBjb250YWluIGdhcmJhZ2UK
LSAgICAvLyBsZWFkaW5nIHRvIGNyYXNoIHVwIGR0b3IuIFRvIGF2b2lkIHRoZSBjYXNlLCBpbml0
aWxpemUgaXQgZXhwbGljaXRseS4KLSAgICBtX2RhdGEubV9idWZmZXIgPSAwOwotICAgIG1fZGF0
YS5tX3BsYXRmb3JtTGF5ZXIgPSBudWxscHRyOwotICAgIG1fZGF0YS5tX3dpbmRvdyA9IDA7Ci0K
LSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gYW55
dGhpbmcgYmlnZ2VyIHRoZW4gZGVmYXVsdFRpbGVTaXplIGlzIGp1c3QgYSBwcm9ibGVtIGZvciB0
aGUgSFcuCi0gICAgY29uc3QgaW50IG1heFRpbGVTaXplID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpUaWxlZEltYWdlOjpkZWZhdWx0VGlsZVNpemUoKTsKLSAgICBpZiAobWF4VGls
ZVNpemUgPD0gc2l6ZS53aWR0aCgpIHx8IG1heFRpbGVTaXplIDw9IHNpemUuaGVpZ2h0KCkpIHsK
LSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6TG9nTGV2ZWxXYXJuLCAiUmVxdWVzdGVkIEltYWdlQnVmZmVyIHNpemUgWyVkICVkXSBp
cyB0b28gYmlnLiBIVyBhbGxvd3MgdXAgdG8gWyVkICVkXS4iLAotICAgICAgICAgICAgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpLCBtYXhUaWxlU2l6ZSwgbWF4VGlsZVNpemUpOwotICAgIH0K
LQotICAgIG1fZGF0YS5tX2J1ZmZlciA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
Y3JlYXRlQnVmZmVyKG1fc2l6ZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpBbHdh
eXNCYWNrZWQpOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6RHJhd2FibGUq
IGRyYXdhYmxlID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpsb2NrQnVmZmVyRHJh
d2FibGUobV9kYXRhLm1fYnVmZmVyKTsKLSAgICBpZiAoIWRyYXdhYmxlKSB7Ci0gICAgICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6ZGVzdHJveUJ1ZmZlcihtX2RhdGEubV9idWZm
ZXIpOwotICAgICAgICBtX2RhdGEubV9idWZmZXIgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9kYXRhLm1fcGxhdGZvcm1MYXllciA9IENhbnZhc0xheWVyV2ViS2l0VGhyZWFk
OjpjcmVhdGUobV9kYXRhLm1fYnVmZmVyLCBkcmF3YWJsZSwgbV9zaXplKTsKLSAgICBtX2RhdGEu
bV93aW5kb3cgPSB3aW5kb3c7Ci0gICAgbV9jb250ZXh0ID0gYWRvcHRQdHIobmV3IEdyYXBoaWNz
Q29udGV4dChkcmF3YWJsZSkpOwotICAgIG1fY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKG1fcmVz
b2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSkpOwotICAgIG1fY29udGV4dC0+c2V0SXNB
Y2NlbGVyYXRlZENvbnRleHQocmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZCk7Ci0gICAgc3Vj
Y2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQotewotICAgIG1f
Y29udGV4dC5jbGVhcigpOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgd2UgY2xlYXIgdGhlIGJ1ZmZl
ciBpbiB0aGUgY29tcG9zaXRpbmcgdGhyZWFkIGJlZm9yZSB0aGUgYnVmZmVyIGlzIGRlc3Ryb3ll
ZC4KLSAgICBpZiAobV9kYXRhLm1fcGxhdGZvcm1MYXllcikgewotICAgICAgICBkaXNwYXRjaFN5
bmNDb21wb3NpdGluZ01lc3NhZ2UoQmxhY2tCZXJyeTo6UGxhdGZvcm06OmNyZWF0ZUZ1bmN0aW9u
Q2FsbE1lc3NhZ2UoCi0gICAgICAgICAgICAmQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OmNsZWFy
QnVmZmVyLCBtX2RhdGEubV9wbGF0Zm9ybUxheWVyLmdldCgpKSk7Ci0gICAgfQotCi0gICAgaWYg
KG1fZGF0YS5tX2J1ZmZlcikgewotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OnJlbGVhc2VCdWZmZXJEcmF3YWJsZShtX2RhdGEubV9idWZmZXIpOwotICAgICAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ryb3lCdWZmZXIobV9kYXRhLm1fYnVmZmVy
KTsKLSAgICAgICAgbV9kYXRhLm1fYnVmZmVyID0gMDsKLSAgICB9Ci19Ci0KLUdyYXBoaWNzQ29u
dGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRl
eHQuZ2V0KCk7Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fcGxhdGZvcm1MYXllci5nZXQoKTsKLX0K
LQotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVD
b3B5LCBTY2FsZUJlaGF2aW9yKSBjb25zdAotewotICAgIC8vIEZJWE1FIHJlc3BlY3QgY29weUJl
aGF2aW91ciBlbnVtLgotICAgIFZlY3Rvcjx1bnNpZ25lZD4gcGl4ZWxzOwotICAgIHBpeGVscy5y
ZXNlcnZlQ2FwYWNpdHkobV9zaXplLmFyZWEoKSk7Ci0gICAgbV9kYXRhLmdldEltYWdlRGF0YSht
X2NvbnRleHQuZ2V0KCksIEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fc2l6ZSksIEludFJlY3Qo
SW50UG9pbnQoMCwgMCksIG1fc2l6ZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+
KHBpeGVscy5kYXRhKCkpLCBmYWxzZSAvKiB1bm11bHRpcGx5ICovKTsKLSAgICByZXR1cm4gQml0
bWFwSW1hZ2U6OmNyZWF0ZShuZXcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxl
ZEltYWdlKG1fc2l6ZSwgcGl4ZWxzLmRhdGEoKSwgZmFsc2UgLyogZGF0YUlzQkdSQSAqLykpOwot
fQotCi12b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAotewotICAgIFdURl9BTElHTkVEKHVuc2lnbmVkIGNo
YXIqLCBpbWFnZURhdGEsIDQpID0gbmV3IHVuc2lnbmVkIGNoYXJbbV9zaXplLndpZHRoKCkgKiBt
X3NpemUuaGVpZ2h0KCkgKiA0XTsKLSAgICBtX2RhdGEuZ2V0SW1hZ2VEYXRhKG1fY29udGV4dC5n
ZXQoKSwgSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9zaXplKSwgSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgbV9zaXplKSwgaW1hZ2VEYXRhLCBmYWxzZSAvKiB1bm11bHRpcGx5ICovKTsKLSAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlRpbGVkSW1hZ2UqIG5hdGl2ZUltYWdlID0g
bmV3IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6VGlsZWRJbWFnZShtX3NpemUsIHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oaW1hZ2VEYXRhKSwgZmFsc2UgLyogZGF0YUlz
QkdSQSAqLyk7Ci0gICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmFkZE1hc2tMYXllcihy
ZWN0LCBuYXRpdmVJbWFnZSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgQmxlbmRNb2RlLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKLXsKLSAgICBtX2RhdGEu
ZHJhdyhtX2NvbnRleHQuZ2V0KCksIGNvbnRleHQsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwotfQotCi12b2lkIEltYWdlQnVmZmVy
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQotewotICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgIGltYWdlLT5k
cmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5
bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwbGF0
Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mKQotewotfQotCi1QYXNz
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0g
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZChyZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpICogNCk7Ci0g
ICAgbV9kYXRhLmdldEltYWdlRGF0YShtX2NvbnRleHQuZ2V0KCksIHJlY3QsIEludFJlY3QoSW50
UG9pbnQoMCwgMCksIG1fc2l6ZSksIHJlc3VsdC0+ZGF0YSgpLCB0cnVlKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRl
U3lzdGVtKSBjb25zdAotewotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcmVzdWx0ID0g
VWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVjdC53aWR0aCgpICogcmVj
dC5oZWlnaHQoKSAqIDQpOwotICAgIG1fZGF0YS5nZXRJbWFnZURhdGEobV9jb250ZXh0LmdldCgp
LCByZWN0LCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3NpemUpLCByZXN1bHQtPmRhdGEoKSwg
ZmFsc2UpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5
dGVBcnJheShNdWx0aXBseSBtdWx0aXBsaWVkLCBVaW50OENsYW1wZWRBcnJheSogc291cmNlLCBj
b25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKQotewotICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6VGlsZWRJbWFnZSBpbWFnZShzb3VyY2VTaXplLCByZWlu
dGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHNvdXJjZS0+ZGF0YSgpKSwgZmFsc2UgLyogdGhp
cyBkYXRhIGlzIFJHQkEsIG5vdCBCR1JBICovLCBtdWx0aXBsaWVkID09IFByZW11bHRpcGxpZWQp
OwotICAgIG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnNhdmUoKTsKLSAgICBjb25zdCBk
b3VibGUgbWF0cml4W10gPSB7IDEuLCAwLiwgMC4sIDEuLCAwLiwgMC4gfTsKLSAgICBtX2NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKLSAgICBtX2NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXRBbHBoYSgxLjApOwotICAgIG1fY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPnJlc2V0Q2xpcCgpOwotICAgIG1fY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPnNldENvbXBvc2l0ZU9wZXJhdGlvbihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OkNvbXBvc2l0ZUNvcHkpOwotICAgIG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmFk
ZEltYWdlKEZsb2F0UmVjdChkZXN0UG9pbnQgKyBzb3VyY2VSZWN0LmxvY2F0aW9uKCksIHNvdXJj
ZVJlY3Quc2l6ZSgpKSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCAmaW1hZ2UpOwotICAgIG1fY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnJlc3RvcmUoKTsKLX0KLQotU3RyaW5nIEltYWdlQnVm
ZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFs
aXR5LCBDb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChtX3NpemUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgRW5jb2Rl
SlBFRywKLSAgICAgICAgRW5jb2RlUE5HLAotICAgIH0gZW5jb2RlVHlwZSA9IG1pbWVUeXBlLmxv
d2VyKCkgPT0gImltYWdlL3BuZyIgPyBFbmNvZGVQTkcgOiBFbmNvZGVKUEVHOwotCi0gICAgLy8g
QWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L3RoZS1jYW52YXMtZWxlbWVu
dC5odG1sLAotICAgIC8vICJGb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbiBh
bHBoYSBjaGFubmVsLCB0aGUgaW1hZ2UgbXVzdCBiZSIKLSAgICAvLyAiY29tcG9zaXRlZCBvbnRv
IGEgc29saWQgYmxhY2sgYmFja2dyb3VuZCB1c2luZyB0aGUgc291cmNlLW92ZXIgb3BlcmF0b3Is
IgotICAgIC8vICJhbmQgdGhlIHJlc3VsdGluZyBpbWFnZSBtdXN0IGJlIHRoZSBvbmUgdXNlZCB0
byBjcmVhdGUgdGhlIGRhdGE6IFVSTC4iCi0gICAgLy8gSlBFRyBkb2Vzbid0IGhhdmUgYWxwaGEg
Y2hhbm5lbCwgc28gd2UgbmVlZCBwcmVtdWx0aXBsaWVkIGRhdGEuCi0gICAgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBpbWFnZURhdGEgPSBlbmNvZGVUeXBlID09IEVuY29kZVBORwotICAgICAg
ICA/IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3Np
emUpKQotICAgICAgICA6IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2lu
dCgwLCAwKSwgbV9zaXplKSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gb3V0cHV0OwotICAgIGNvbnN0
IGNoYXIqIGhlYWRlcjsKLSAgICBpZiAoZW5jb2RlVHlwZSA9PSBFbmNvZGVQTkcpIHsKLSAgICAg
ICAgaWYgKCFjb21wcmVzc1JHQkFCaWdFbmRpYW5Ub1BORyhpbWFnZURhdGEtPmRhdGEoKSwgbV9z
aXplLCBvdXRwdXQpKQotICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotICAgICAgICBoZWFk
ZXIgPSAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KCFjb21wcmVzc1JHQkFCaWdFbmRpYW5Ub0pQRUcoaW1hZ2VEYXRhLT5kYXRhKCksIG1fc2l6ZSwg
b3V0cHV0LCBxdWFsaXR5KSkKLSAgICAgICAgICAgIHJldHVybiAiZGF0YTosIjsKLSAgICAgICAg
aGVhZGVyID0gImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsIjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8
Y2hhcj4gYmFzZTY0OwotICAgIGJhc2U2NEVuY29kZShvdXRwdXQsIGJhc2U2NCk7Ci0KLSAgICBv
dXRwdXQuY2xlYXIoKTsKLQotICAgIFZlY3RvcjxjaGFyPiB1cmw7Ci0gICAgdXJsLmFwcGVuZCho
ZWFkZXIsIHN0cmxlbihoZWFkZXIpKTsKLSAgICB1cmwuYXBwZW5kKGJhc2U2NCk7Ci0KLSAgICBy
ZXR1cm4gU3RyaW5nKHVybC5kYXRhKCksIHVybC5zaXplKCkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0ltYWdlQnVmZmVyRGF0YUJsYWNrQmVycnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQnVmZmVyRGF0YUJsYWNrQmVy
cnkuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9JbWFnZUJ1ZmZlckRhdGFCbGFja0JlcnJ5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaWZuZGVmIEltYWdlQnVmZmVyRGF0YUJsYWNrQmVycnlfaAotI2RlZmluZSBJbWFnZUJ1ZmZl
ckRhdGFCbGFja0JlcnJ5X2gKLQotI2luY2x1ZGUgIkNhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1HcmFwaGljcy5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUd1YXJkZWRQb2lu
dGVyLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEludFJlY3Q7Ci1j
bGFzcyBIb3N0V2luZG93OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEgewotcHVibGljOgotICAg
IHZvaWQgZ2V0SW1hZ2VEYXRhKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRSZWN0JiwgdW5zaWduZWQgY2hhciogcmVzdWx0LCBib29sIHVubXVsdGlwbHkpIGNvbnN0
OwotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqIHRoaXNDb250ZXh0LCBHcmFwaGljc0Nv
bnRleHQqIG90aGVyQ29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3Bl
cmF0b3IsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKSBjb25zdDsKLQotICAgIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBtX2J1ZmZlcjsKLSAgICBSZWZQdHI8Q2FudmFz
TGF5ZXJXZWJLaXRUaHJlYWQ+IG1fcGxhdGZvcm1MYXllcjsKLSAgICBIb3N0V2luZG93KiBtX3dp
bmRvdzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEltYWdlQnVm
ZmVyRGF0YUJsYWNrQmVycnlfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9JbnRQb2ludEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW50UG9pbnRCbGFja0JlcnJ5
LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9JbnRQb2ludEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0KLSNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1QcmltaXRpdmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotSW50UG9pbnQ6OkludFBvaW50KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRQb2lu
dCYgcCkKLSAgICA6IG1feChwLngoKSkKLSAgICAsIG1feShwLnkoKSkKLXsKLX0KLQotSW50UG9p
bnQ6Om9wZXJhdG9yIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRQb2ludCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRQb2ludChtX3gsIG1feSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvSW50UmVjdEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW50UmVjdEJsYWNrQmVy
cnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0ludFJlY3RCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLSNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1QcmltaXRpdmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotSW50UmVjdDo6SW50UmVjdChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCYg
cmVjdCkKLSAgICA6IG1fbG9jYXRpb24ocmVjdC54KCksIHJlY3QueSgpKSwgbV9zaXplKHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkKLXsKLX0KLQotSW50UmVjdDo6b3BlcmF0b3IgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkludFJlY3QoKSBjb25zdAotewotICAgIHJldHVybiBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6SW50UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0ludFNpemVCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ludFNpemVCbGFja0JlcnJ5
LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9JbnRTaXplQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotCi0jaW5jbHVkZSA8
QmxhY2tCZXJyeVBsYXRmb3JtUHJpbWl0aXZlcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUludFNpemU6OkludFNpemUoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFNpemUmIHNp
emUpCi0gICAgOiBtX3dpZHRoKHNpemUud2lkdGgoKSkKLSAgICAsIG1faGVpZ2h0KHNpemUuaGVp
Z2h0KCkpCi17Ci19Ci0KLUludFNpemU6Om9wZXJhdG9yIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJ
bnRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFNp
emUobV93aWR0aCwgbV9oZWlnaHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQW5pbWF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckFuaW1hdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXllckFuaW1hdGlvbi5o
IgotCi0jaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJM
YXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKLSNpbmNsdWRlICJVbml0QmV6aWVyLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotLy8gRklYTUU6IFNv
bWUgZnVuY3Rpb25zIGJlbG93IGFyZSBjb3BpZWQgZnJvbSBBbmltYXRpb25CYXNlIGFuZCBLZXlm
cmFtZUFuaW1hdGlvbi4KLS8vIFdlIG5lZWQgdG8gcmVmYWN0b3IgdGhlc2UgY29kZSB0byBpbmNy
ZWFzZSBjb2RlIHJldXNlLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgyMjkzCi0KLS8vIFRoZSBlcHNpbG9uIHZhbHVlIHdlIHBhc3MgdG8gVW5pdEJlemllcjo6
c29sdmUgZ2l2ZW4gdGhhdCB0aGUgYW5pbWF0aW9uIGlzIGdvaW5nIHRvIHJ1biBvdmVyIHxkdXJ8
IHNlY29uZHMuIFRoZSBsb25nZXIgdGhlCi0vLyBhbmltYXRpb24sIHRoZSBtb3JlIHByZWNpc2lv
biB3ZSBuZWVkIGluIHRoZSB0aW1pbmcgZnVuY3Rpb24gcmVzdWx0IHRvIGF2b2lkIHVnbHkgZGlz
Y29udGludWl0aWVzLgotc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBk
dXJhdGlvbikKLXsKLSAgICByZXR1cm4gMS4wIC8gKDIwMC4wICogZHVyYXRpb24pOwotfQotCi1z
dGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24oZG91YmxlIHAxeCwg
ZG91YmxlIHAxeSwgZG91YmxlIHAyeCwgZG91YmxlIHAyeSwgZG91YmxlIHQsIGRvdWJsZSBkdXJh
dGlvbikKLXsKLSAgICAvLyBDb252ZXJ0IGZyb20gaW5wdXQgdGltZSB0byBwYXJhbWV0cmljIHZh
bHVlIGluIGN1cnZlLCB0aGVuIGZyb20KLSAgICAvLyB0aGF0IHRvIG91dHB1dCB0aW1lLgotICAg
IFVuaXRCZXppZXIgYmV6aWVyKHAxeCwgcDF5LCBwMngsIHAyeSk7Ci0gICAgcmV0dXJuIGJlemll
ci5zb2x2ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRpb24pKTsKLX0KLQotc3RhdGljIGlubGluZSBk
b3VibGUgc29sdmVTdGVwc0Z1bmN0aW9uKGludCBudW1TdGVwcywgYm9vbCBzdGVwQXRTdGFydCwg
ZG91YmxlIHQpCi17Ci0gICAgaWYgKHN0ZXBBdFN0YXJ0KQotICAgICAgICByZXR1cm4gbWluKDEu
MCwgKGZsb29yKG51bVN0ZXBzICogdCkgKyAxKSAvIG51bVN0ZXBzKTsKLSAgICByZXR1cm4gZmxv
b3IobnVtU3RlcHMgKiB0KSAvIG51bVN0ZXBzOwotfQotCi1zdGF0aWMgY29uc3QgVGltaW5nRnVu
Y3Rpb24qIHRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uVmFs
dWUqIGFuaW1WYWx1ZSwgY29uc3QgTGF5ZXJBbmltYXRpb24qIGFuaW0pCi17Ci0gICAgaWYgKGFu
aW1WYWx1ZS0+dGltaW5nRnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIGFuaW1WYWx1ZS0+dGlt
aW5nRnVuY3Rpb24oKTsKLSAgICBpZiAoYW5pbS0+dGltaW5nRnVuY3Rpb24oKSkKLSAgICAgICAg
cmV0dXJuIGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCk7Ci0KLSAgICByZXR1cm4gQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbjo6ZGVmYXVsdFRpbWluZ0Z1bmN0aW9uKCk7Ci19Ci0KLXN0YXRpYyBkb3Vi
bGUgcHJvZ3Jlc3MoZG91YmxlIGVsYXBzZWRUaW1lLCBjb25zdCBMYXllckFuaW1hdGlvbiogbGF5
ZXJBbmltYXRpb24sIGRvdWJsZSBzY2FsZSwgZG91YmxlIG9mZnNldCwgY29uc3QgVGltaW5nRnVu
Y3Rpb24qIHRmLCBib29sJiBhbmltYXRpb25GaW5pc2hlZCkKLXsKLSAgICBkb3VibGUgZHVyID0g
bGF5ZXJBbmltYXRpb24tPmR1cmF0aW9uKCk7Ci0gICAgaWYgKGxheWVyQW5pbWF0aW9uLT5pdGVy
YXRpb25Db3VudCgpID4gMCkKLSAgICAgICAgZHVyICo9IGxheWVyQW5pbWF0aW9uLT5pdGVyYXRp
b25Db3VudCgpOwotCi0gICAgaWYgKCFsYXllckFuaW1hdGlvbi0+ZHVyYXRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIDEuMDsKLSAgICBpZiAobGF5ZXJBbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkg
PiAwICYmIGVsYXBzZWRUaW1lID49IGR1cikgewotICAgICAgICBhbmltYXRpb25GaW5pc2hlZCA9
IHRydWU7Ci0gICAgICAgIHJldHVybiAobGF5ZXJBbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkg
JSAyKSA/IDEuMCA6IDAuMDsKLSAgICB9Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBmcmFjdGlvbmFs
IHRpbWUsIHRha2luZyBpbnRvIGFjY291bnQgZGlyZWN0aW9uLgotICAgIC8vIFRoZXJlIGlzIG5v
IG5lZWQgdG8gd29ycnkgYWJvdXQgaXRlcmF0aW9ucywgd2UgYXNzdW1lIHRoYXQgd2Ugd291bGQg
aGF2ZQotICAgIC8vIHNob3J0IGNpcmN1aXRlZCBhYm92ZSBpZiB3ZSB3ZXJlIGRvbmUuCi0gICAg
ZG91YmxlIGZyYWN0aW9uYWxUaW1lID0gZWxhcHNlZFRpbWUgLyBsYXllckFuaW1hdGlvbi0+ZHVy
YXRpb24oKTsKLSAgICBpbnQgaW50ZWdyYWxUaW1lID0gc3RhdGljX2Nhc3Q8aW50PihmcmFjdGlv
bmFsVGltZSk7Ci0gICAgZnJhY3Rpb25hbFRpbWUgLT0gaW50ZWdyYWxUaW1lOwotCi0gICAgaWYg
KChsYXllckFuaW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJl
Y3Rpb25BbHRlcm5hdGUpICYmIChpbnRlZ3JhbFRpbWUgJiAxKSkKLSAgICAgICAgZnJhY3Rpb25h
bFRpbWUgPSAxIC0gZnJhY3Rpb25hbFRpbWU7Ci0KLSAgICBpZiAoc2NhbGUgIT0gMSB8fCBvZmZz
ZXQpCi0gICAgICAgIGZyYWN0aW9uYWxUaW1lID0gKGZyYWN0aW9uYWxUaW1lIC0gb2Zmc2V0KSAq
IHNjYWxlOwotCi0gICAgaWYgKCF0ZikKLSAgICAgICAgdGYgPSBsYXllckFuaW1hdGlvbi0+dGlt
aW5nRnVuY3Rpb24oKTsKLQotICAgIGlmICh0Zi0+aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9u
KCkpIHsKLSAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiogY3RmID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbio+KHRmKTsKLSAgICAgICAg
cmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihjdGYtPngxKCksIGN0Zi0+eTEoKSwgY3Rm
LT54MigpLCBjdGYtPnkyKCksIGZyYWN0aW9uYWxUaW1lLCBsYXllckFuaW1hdGlvbi0+ZHVyYXRp
b24oKSk7Ci0gICAgfQotCi0gICAgaWYgKHRmLT5pc1N0ZXBzVGltaW5nRnVuY3Rpb24oKSkgewot
ICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKiBzdGYgPSBzdGF0aWNfY2FzdDxjb25z
dCBTdGVwc1RpbWluZ0Z1bmN0aW9uKj4odGYpOwotICAgICAgICByZXR1cm4gc29sdmVTdGVwc0Z1
bmN0aW9uKHN0Zi0+bnVtYmVyT2ZTdGVwcygpLCBzdGYtPnN0ZXBBdFN0YXJ0KCksIGZyYWN0aW9u
YWxUaW1lKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZnJhY3Rpb25hbFRpbWU7Ci19Ci0KLXN0YXRp
YyB2b2lkIGZldGNoSW50ZXJ2YWxFbmRwb2ludHMoZG91YmxlIGVsYXBzZWRUaW1lLCBjb25zdCBM
YXllckFuaW1hdGlvbiogbGF5ZXJBbmltYXRpb24sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiYgZnJv
bVZhbHVlLCBjb25zdCBBbmltYXRpb25WYWx1ZSomIHRvVmFsdWUsIGRvdWJsZSYgcHJvZywgYm9v
bCYgYW5pbWF0aW9uRmluaXNoZWQpCi17Ci0gICAgLy8gRmluZCB0aGUgZmlyc3Qga2V5LgotICAg
IGlmIChsYXllckFuaW1hdGlvbi0+ZHVyYXRpb24oKSAmJiBsYXllckFuaW1hdGlvbi0+aXRlcmF0
aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUpCi0gICAgICAg
IGVsYXBzZWRUaW1lID0gbWluKGVsYXBzZWRUaW1lLCBsYXllckFuaW1hdGlvbi0+ZHVyYXRpb24o
KSAqIGxheWVyQW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKTsKLQotICAgIGRvdWJsZSBmcmFj
dGlvbmFsVGltZSA9IGxheWVyQW5pbWF0aW9uLT5kdXJhdGlvbigpID8gKGVsYXBzZWRUaW1lIC8g
bGF5ZXJBbmltYXRpb24tPmR1cmF0aW9uKCkpIDogMTsKLQotICAgIC8vIEZJWE1FOiBzdGFydFRp
bWUgY2FuIGJlIGJlZm9yZSB0aGUgY3VycmVudCBhbmltYXRpb24gImZyYW1lIiB0aW1lLiBUaGlz
IGlzIHRvIHN5bmMgd2l0aCB0aGUgZnJhbWUgdGltZQotICAgIC8vIGNvbmNlcHQgaW4gQW5pbWF0
aW9uVGltZUNvbnRyb2xsZXIuIFNvIHdlIG5lZWQgdG8gc29tZWhvdyBzeW5jIHRoZSB0d28uIFVu
dGlsIHRoZW4sIHRoZSBwb3NzaWJsZQotICAgIC8vIGVycm9yIGlzIHNtYWxsIGFuZCB3aWxsIHBy
b2JhYmx5IG5vdCBiZSBub3RpY2VhYmxlLiBVbnRpbCB3ZSBmaXggdGhpcywgcmVtb3ZlIHRoZSBh
c3NlcnQuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUy
MDM3Ci0gICAgLy8gQVNTRVJUKGZyYWN0aW9uYWxUaW1lID49IDApOwotICAgIGlmIChmcmFjdGlv
bmFsVGltZSA8IDApCi0gICAgICAgIGZyYWN0aW9uYWxUaW1lID0gMDsKLQotICAgIC8vIEZJWE1F
OiBzaGFyZSB0aGlzIGNvZGUgd2l0aCBBbmltYXRpb25CYXNlOjpwcm9ncmVzcygpLgotICAgIGlu
dCBpdGVyYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWN0aW9uYWxUaW1lKTsKLSAgICBpZiAo
bGF5ZXJBbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25D
b3VudEluZmluaXRlKQotICAgICAgICBpdGVyYXRpb24gPSBtaW4oaXRlcmF0aW9uLCBsYXllckFu
aW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAtIDEpOwotCi0gICAgZnJhY3Rpb25hbFRpbWUgLT0g
aXRlcmF0aW9uOwotCi0gICAgYm9vbCByZXZlcnNpbmcgPSAobGF5ZXJBbmltYXRpb24tPmRpcmVj
dGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKSAmJiAoaXRl
cmF0aW9uICYgMSk7Ci0gICAgaWYgKHJldmVyc2luZykKLSAgICAgICAgZnJhY3Rpb25hbFRpbWUg
PSAxIC0gZnJhY3Rpb25hbFRpbWU7Ci0KLSAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0gbGF5ZXJB
bmltYXRpb24tPnZhbHVlQ291bnQoKTsKLSAgICBpZiAoIW51bUtleWZyYW1lcykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKCFsYXllckFuaW1hdGlvbi0+dmFsdWVBdCgwKS0+a2V5VGlt
ZSgpKTsKLSAgICBBU1NFUlQobGF5ZXJBbmltYXRpb24tPnZhbHVlQXQobGF5ZXJBbmltYXRpb24t
PnZhbHVlQ291bnQoKSAtIDEpLT5rZXlUaW1lKCkgPT0gMSk7Ci0KLSAgICBpbnQgcHJldkluZGV4
ID0gLTE7Ci0gICAgaW50IG5leHRJbmRleCA9IC0xOwotCi0gICAgLy8gRklYTUU6IHdpdGggYSBs
b3Qgb2Yga2V5cywgdGhpcyBsaW5lYXIgc2VhcmNoIHdpbGwgYmUgc2xvdy4gV2UgY291bGQgYmlu
YXJ5IHNlYXJjaC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytp
KSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBjdXJyS2V5ZnJhbWUgPSBsYXllckFu
aW1hdGlvbi0+dmFsdWVBdChpKTsKLQotICAgICAgICBpZiAoZnJhY3Rpb25hbFRpbWUgPCBjdXJy
S2V5ZnJhbWUtPmtleVRpbWUoKSkgewotICAgICAgICAgICAgbmV4dEluZGV4ID0gaTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJldkluZGV4ID0gaTsKLSAgICB9
Ci0KLSAgICBkb3VibGUgc2NhbGUgPSAxOwotICAgIGRvdWJsZSBvZmZzZXQgPSAwOwotCi0gICAg
aWYgKHByZXZJbmRleCA9PSAtMSkKLSAgICAgICAgcHJldkluZGV4ID0gMDsKLQotICAgIGlmIChu
ZXh0SW5kZXggPT0gLTEpCi0gICAgICAgIG5leHRJbmRleCA9IGxheWVyQW5pbWF0aW9uLT52YWx1
ZUNvdW50KCkgLSAxOwotCi0gICAgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHByZXZLZXlmcmFtZSA9
IGxheWVyQW5pbWF0aW9uLT52YWx1ZUF0KHByZXZJbmRleCk7Ci0gICAgY29uc3QgQW5pbWF0aW9u
VmFsdWUqIG5leHRLZXlmcmFtZSA9IGxheWVyQW5pbWF0aW9uLT52YWx1ZUF0KG5leHRJbmRleCk7
Ci0KLSAgICBmcm9tVmFsdWUgPSBwcmV2S2V5ZnJhbWU7Ci0gICAgdG9WYWx1ZSA9IG5leHRLZXlm
cmFtZTsKLQotICAgIG9mZnNldCA9IHByZXZLZXlmcmFtZS0+a2V5VGltZSgpOwotICAgIHNjYWxl
ID0gMS4wIC8gKG5leHRLZXlmcmFtZS0+a2V5VGltZSgpIC0gcHJldktleWZyYW1lLT5rZXlUaW1l
KCkpOwotCi0gICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uID0gdGltaW5n
RnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShwcmV2S2V5ZnJhbWUsIGxheWVyQW5pbWF0aW9uKTsK
LQotICAgIHByb2cgPSBwcm9ncmVzcyhlbGFwc2VkVGltZSwgbGF5ZXJBbmltYXRpb24sIHNjYWxl
LCBvZmZzZXQsIHRpbWluZ0Z1bmN0aW9uLCBhbmltYXRpb25GaW5pc2hlZCk7Ci19Ci0KLXZvaWQg
TGF5ZXJBbmltYXRpb246OmFwcGx5KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3Vi
bGUgZWxhcHNlZFRpbWUpCi17Ci0gICAgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20gPSAwOwot
ICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0byA9IDA7Ci0gICAgZG91YmxlIHByb2dyZXNzID0g
MC4wOwotICAgIGJvb2wgYW5pbWF0aW9uRmluaXNoZWQgPSBmYWxzZTsKLQotICAgIGZldGNoSW50
ZXJ2YWxFbmRwb2ludHMoZWxhcHNlZFRpbWUsIHRoaXMsIGZyb20sIHRvLCBwcm9ncmVzcywgYW5p
bWF0aW9uRmluaXNoZWQpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eSgpKSB7Ci0gICAgY2FzZSBB
bmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgotICAgICAgICBsYXllci0+c2V0VHJhbnNm
b3JtKGJsZW5kVHJhbnNmb3JtKHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZh
bHVlKj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVzcykpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5OgotICAgICAgICBsYXllci0+c2V0T3BhY2l0eShi
bGVuZE9wYWNpdHkoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KGZyb20p
LT52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlKj4odG8pLT52
YWx1ZSgpLCBwcm9ncmVzcykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3I6Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0Rmls
dGVyOgotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQ6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX2ZpbmlzaGVkID0g
YW5pbWF0aW9uRmluaXNoZWQ7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4IExheWVyQW5pbWF0
aW9uOjpibGVuZFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmcm9tLCBjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdAotewotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHQ7Ci0KLSAgICBpZiAobV90cmFuc2Zvcm1GdW5jdGlvbkxp
c3RWYWxpZCkgewotICAgICAgICAvLyBBIHRyaWNrIHRvIGF2b2lkIHRvdWNoaW5nIHRoZSByZWZj
b3VudCBvZiBzaGFyZWQgVHJhbnNmb3JtT3BlcmF0aW9ucyBvbiB0aGUgd3JvbmcgdGhyZWFkLgot
ICAgICAgICAvLyBTaW5jZSBUcmFuc2Zvck9wZXJhdGlvbiBpcyBub3QgVGhyZWFkU2FmZVJlZkNv
dW50ZWQsIHdlIGFyZSBvbmx5IGFsbG93ZWQgdG8gdG91Y2ggdGhlIHJlZgotICAgICAgICAvLyBj
b3VudCBvZiBzaGFyZWQgb3BlcmF0aW9ucyB3aGVuIHRoZSBXZWJLaXQgdGhyZWFkIGFuZCBjb21w
b3NpdGluZyB0aHJlYWQgYXJlIGluIHN5bmMuCi0gICAgICAgIFZlY3RvcjxUcmFuc2Zvcm1PcGVy
YXRpb24qPiByZXN1bHQ7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9u
PiA+IG93bmVkOwotCi0gICAgICAgIHVuc2lnbmVkIGZyb21TaXplID0gZnJvbS0+b3BlcmF0aW9u
cygpLnNpemUoKTsKLSAgICAgICAgdW5zaWduZWQgdG9TaXplID0gdG8tPm9wZXJhdGlvbnMoKS5z
aXplKCk7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBtYXgoZnJvbVNpemUsIHRvU2l6ZSk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAg
IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gKGkgPCBmcm9tU2l6ZSkgPyBmcm9tLT5vcGVy
YXRpb25zKClbaV0uZ2V0KCkgOiAwOwotICAgICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiB0
b09wID0gKGkgPCB0b1NpemUpID8gdG8tPm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7Ci0gICAg
ICAgICAgICBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZGVkT3AgPSB0b09wID8gdG9P
cC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcykgOiAoZnJvbU9wID8gZnJvbU9wLT5ibGVuZCgwLCBw
cm9ncmVzcywgdHJ1ZSkgOiBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4oMCkpOwotICAg
ICAgICAgICAgaWYgKGJsZW5kZWRPcCkgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
YmxlbmRlZE9wLmdldCgpKTsKLSAgICAgICAgICAgICAgICBvd25lZC5hcHBlbmQoYmxlbmRlZE9w
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFRyYW5zZm9y
bU9wZXJhdGlvbj4gaWRlbnRpdHlPcCA9IElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoKTsKLSAgICAgICAgICAgICAgICBvd25lZC5hcHBlbmQoaWRlbnRpdHlPcCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHRvT3AgPyB0b09wIDogaWRlbnRpdHlPcC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGZyb21PcCA/IGZyb21PcCA6
IGlkZW50aXR5T3AuZ2V0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
SW50U2l6ZSBzeiA9IGJveFNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlc3VsdC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdFtpXS0+YXBwbHkodCwgc3op
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIENvbnZlcnQgdGhlIFRyYW5zZm9ybU9wZXJhdGlv
bnMgaW50byBtYXRyaWNlcy4KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbVQ7Ci0g
ICAgICAgIGZyb20tPmFwcGx5KGJveFNpemUoKSwgZnJvbVQpOwotICAgICAgICB0by0+YXBwbHko
Ym94U2l6ZSgpLCB0KTsKLQotICAgICAgICB0LmJsZW5kKGZyb21ULCBwcm9ncmVzcyk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLWZsb2F0IExheWVyQW5pbWF0aW9uOjpibGVuZE9wYWNp
dHkoZmxvYXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKLXsKLSAgICBm
bG9hdCBvcGFjaXR5ID0gZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3M7Ci0KLSAgICByZXR1
cm4gbWF4KDAuMGYsIG1pbihvcGFjaXR5LCAxLjBmKSk7Ci19Ci0KLXZvaWQgTGF5ZXJBbmltYXRp
b246OnZhbGlkYXRlVHJhbnNmb3JtTGlzdHMoKQotewotICAgIG1fdHJhbnNmb3JtRnVuY3Rpb25M
aXN0VmFsaWQgPSBmYWxzZTsKLQotICAgIGlmIChtX3ZhbHVlcy5zaXplKCkgPCAyIHx8IHByb3Bl
cnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRW1wdHkgdHJhbnNmb3JtcyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUg
Zmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRoZSByZWZlcmVuY2UuCi0gICAgc2l6ZV90IG51bUtl
eWZyYW1lcyA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICBzaXplX3QgZmlyc3ROb25FbXB0eVRyYW5z
Zm9ybUtleWZyYW1lSW5kZXggPSBudW1LZXlmcmFtZXM7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKiBjdXJyZW50S2V5ZnJhbWUgPSBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1B
bmltYXRpb25WYWx1ZSo+KG1fdmFsdWVzLmF0KGkpKTsKLSAgICAgICAgaWYgKGN1cnJlbnRLZXlm
cmFtZS0+dmFsdWUoKS0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICBmaXJzdE5vbkVtcHR5VHJhbnNm
b3JtS2V5ZnJhbWVJbmRleCA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCA9PSBudW1L
ZXlmcmFtZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
bnMqIGZpcnN0VmFsID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUq
PihtX3ZhbHVlcy5hdChmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCkpLT52YWx1
ZSgpOwotCi0gICAgLy8gU2VlIGlmIHRoZSBrZXlmcmFtZXMgYXJlIHZhbGlkLgotICAgIGZvciAo
c2l6ZV90IGkgPSBmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCArIDE7IGkgPCBu
dW1LZXlmcmFtZXM7ICsraSkgewotICAgICAgICBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1
ZSogY3VycmVudEtleWZyYW1lID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUqPihtX3ZhbHVlcy5hdChpKSk7Ci0gICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
bnMqIHZhbCA9IGN1cnJlbnRLZXlmcmFtZS0+dmFsdWUoKTsKLQotICAgICAgICAvLyBBIG51bGwg
dHJhbnNmb3JtIG1hdGNoZXMgYW55dGhpbmcuCi0gICAgICAgIGlmICh2YWwtPm9wZXJhdGlvbnMo
KS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBJZiB0aGUg
c2l6ZXMgb2YgdGhlIGZ1bmN0aW9uIGxpc3RzIGRvbid0IG1hdGNoLCB0aGUgbGlzdHMgZG9uJ3Qg
bWF0Y2guCi0gICAgICAgIGlmIChmaXJzdFZhbC0+b3BlcmF0aW9ucygpLnNpemUoKSAhPSB2YWwt
Pm9wZXJhdGlvbnMoKS5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8g
SWYgdGhlIHR5cGVzIG9mIGVhY2ggZnVuY3Rpb24gYXJlIG5vdCB0aGUgc2FtZSwgdGhlIGxpc3Rz
IGRvbid0IG1hdGNoLgotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGZpcnN0VmFsLT5v
cGVyYXRpb25zKCkuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIGlmICghZmlyc3RWYWwtPm9w
ZXJhdGlvbnMoKVtqXS0+aXNTYW1lVHlwZSgqdmFsLT5vcGVyYXRpb25zKClbal0pKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEtleWZyYW1lcyBh
cmUgdmFsaWQuCi0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCA9IHRydWU7Ci19Ci0K
LX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJBbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyQW5pbWF0aW9uLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgot
ICovCi0KLSNpZm5kZWYgTGF5ZXJBbmltYXRpb25faAotI2RlZmluZSBMYXllckFuaW1hdGlvbl9o
Ci0KLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNkZWZpbmUgREVCVUdfTEFZRVJf
QU5JTUFUSU9OIDAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBbmltYXRpb247Ci1j
bGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOwotY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7
Ci0KLWNsYXNzIExheWVyQW5pbWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPExh
eWVyQW5pbWF0aW9uPiB7Ci1wdWJsaWM6Ci0gICAgLy8gVGhlIHNldFN0YXJ0VGltZSBtZXRob2Qg
aXMgbm90IHRocmVhZHNhZmUgYW5kIG11c3Qgb25seSBiZSBjYWxsZWQgb24gYSBuZXdseQotICAg
IC8vIGNyZWF0ZWQgTGF5ZXJBbmltYXRpb24gYmVmb3JlIHNlbmRpbmcgaXQgb2ZmIHRvIHRoZSBj
b21wb3NpdGluZyB0aHJlYWQuCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJBbmltYXRpb24+
IGNyZWF0ZShjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBi
b3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBk
b3VibGUgdGltZU9mZnNldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5
ZXJBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIG5hbWUsIHRpbWVPZmZzZXQp
KTsKLSAgICB9Ci0KLSAgICBQYXNzUmVmUHRyPExheWVyQW5pbWF0aW9uPiBjbG9uZShkb3VibGUg
dGltZU9mZnNldCkKLSAgICB7Ci0gICAgICAgIExheWVyQW5pbWF0aW9uKiBhbmltYXRpb24gPSBu
ZXcgTGF5ZXJBbmltYXRpb24oKnRoaXMpOwotICAgICAgICAvLyBUaGUgY2xvbmVkIGFuaW1hdGlv
biBzaG91bGQgZ2V0IGEgZGlmZmVyZW50IHRpbWVPZmZzZXQgaWYgaXQncyBwYXVzZWQuCi0gICAg
ICAgIGFuaW1hdGlvbi0+bV90aW1lT2Zmc2V0ID0gdGltZU9mZnNldDsKLQotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoYW5pbWF0aW9uKTsKLSAgICB9Ci0KLSAgICB+TGF5ZXJBbmltYXRpb24oKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAobV9uYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwot
ICAgICAgICByZXR1cm4gU3RyaW5nKG1fbmFtZSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTdGFy
dFRpbWUoZG91YmxlIHRpbWUpIHsgbV9zdGFydFRpbWUgPSB0aW1lOyB9Ci0KLSAgICAvLyBUaGVz
ZSBmdW5jdGlvbnMgYXJlIHRocmVhZCBzYWZlIChpbW11dGFibGUgc3RhdGUpLgotICAgIHN0YXRp
YyBpbnQgaWRGcm9tQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uKSB7IHJldHVy
biByZWludGVycHJldF9jYXN0PGludD4oYW5pbWF0aW9uKTsgfQotICAgIGJvb2wgaXNFcXVhbFRv
QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uKSBjb25zdCB7IHJldHVybiBpZEZy
b21BbmltYXRpb24oYW5pbWF0aW9uKSA9PSBpZCgpOyB9Ci0gICAgaW50IGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZDsgfQotICAgIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLnByb3BlcnR5KCk7IH0KLSAgICBJbnRTaXplIGJveFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2JveFNpemU7IH0KLSAgICBkb3VibGUgdGltZU9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGltZU9mZnNldDsgfQotICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXJ0VGltZTsgfQotICAgIHNpemVfdCB2YWx1ZUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90aW1pbmdGdW5jdGlvbi5nZXQoKTsgfQotICAgIGRv
dWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICBpbnQgaXRl
cmF0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdGlvbkNvdW50OyB9Ci0gICAgQW5p
bWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
aXJlY3Rpb247IH0KLSAgICBjb25zdCBBbmltYXRpb25WYWx1ZSogdmFsdWVBdChzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZXMuYXQoaSk7IH0KLSAgICBib29sIGZpbmlzaGVkKCkgY29u
c3QgeyByZXR1cm4gbV9maW5pc2hlZDsgfQotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmxl
bmRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZnJvbSwgY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyosIGRvdWJsZSBwcm9ncmVzcykgY29uc3Q7Ci0gICAgZmxvYXQgYmxlbmRP
cGFjaXR5KGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0OwotICAg
IHZvaWQgYXBwbHkoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBlbGFwc2VkVGltZSk7
Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
IHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRp
b24sIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCi0gICAgICAgIDogbV9p
ZChyZWludGVycHJldF9jYXN0PGludD4oYW5pbWF0aW9uKSkKLSAgICAgICAgLCBtX3ZhbHVlcyh2
YWx1ZXMpCi0gICAgICAgICwgbV9ib3hTaXplKGJveFNpemUpCi0gICAgICAgICwgbV90aW1lT2Zm
c2V0KHRpbWVPZmZzZXQpCi0gICAgICAgICwgbV9zdGFydFRpbWUoMCkKLSAgICAgICAgLCBtX3Rp
bWluZ0Z1bmN0aW9uKDApCi0gICAgICAgICwgbV9kdXJhdGlvbihhbmltYXRpb24tPmR1cmF0aW9u
KCkpCi0gICAgICAgICwgbV9pdGVyYXRpb25Db3VudChhbmltYXRpb24tPml0ZXJhdGlvbkNvdW50
KCkpCi0gICAgICAgICwgbV9kaXJlY3Rpb24oYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSkKLSAgICAg
ICAgLCBtX2ZpbmlzaGVkKGZhbHNlKQotICAgIHsKLSAgICAgICAgaWYgKGFuaW1hdGlvbi0+aXNU
aW1pbmdGdW5jdGlvblNldCgpKQotICAgICAgICAgICAgbV90aW1pbmdGdW5jdGlvbiA9IGFuaW1h
dGlvbi0+dGltaW5nRnVuY3Rpb24oKTsKLQotICAgICAgICB2YWxpZGF0ZVRyYW5zZm9ybUxpc3Rz
KCk7Ci0gICAgICAgIHNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgTGF5ZXJBbmltYXRpb24o
Y29uc3QgTGF5ZXJBbmltYXRpb24mIG90aGVyKQotICAgICAgICA6ICBUaHJlYWRTYWZlUmVmQ291
bnRlZDxMYXllckFuaW1hdGlvbj4oKQotICAgICAgICAsIG1faWQob3RoZXIubV9pZCkKLSAgICAg
ICAgLCBtX3ZhbHVlcyhvdGhlci5tX3ZhbHVlcykKLSAgICAgICAgLCBtX2JveFNpemUob3RoZXIu
bV9ib3hTaXplKQotICAgICAgICAsIG1fdGltZU9mZnNldChvdGhlci5tX3RpbWVPZmZzZXQpCi0g
ICAgICAgICwgbV9zdGFydFRpbWUob3RoZXIubV9zdGFydFRpbWUpCi0gICAgICAgICwgbV90cmFu
c2Zvcm1GdW5jdGlvbkxpc3RWYWxpZChvdGhlci5tX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlk
KQotICAgICAgICAsIG1fdGltaW5nRnVuY3Rpb24ob3RoZXIubV90aW1pbmdGdW5jdGlvbikKLSAg
ICAgICAgLCBtX2R1cmF0aW9uKG90aGVyLm1fZHVyYXRpb24pCi0gICAgICAgICwgbV9pdGVyYXRp
b25Db3VudChvdGhlci5tX2l0ZXJhdGlvbkNvdW50KQotICAgICAgICAsIG1fZGlyZWN0aW9uKG90
aGVyLm1fZGlyZWN0aW9uKQotICAgICAgICAsIG1fZmluaXNoZWQoZmFsc2UpCi0gICAgewotICAg
ICAgICBzZXROYW1lKG90aGVyLm5hbWUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCB2YWxpZGF0ZVRy
YW5zZm9ybUxpc3RzKCk7Ci0KLSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQot
ICAgIHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICAgICAg
bV9uYW1lLnJlc2l6ZShsZW5ndGgpOwotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICAgICAg
bWVtY3B5KG1fbmFtZS5kYXRhKCksIG5hbWUuY2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIpICog
bGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBpbnQgbV9pZDsKLQotICAgIC8vIE5PVEU6IERvbid0IGV4
cG9zZSB0aGUgS2V5ZnJhbWVWYWx1ZUxpc3QgZGlyZWN0bHksIHNpbmNlIGl0cyBjb3B5Ci0gICAg
Ly8gY29uc3RydWN0b3IgbXV0YXRlcyByZWZjb3VudHMgYW5kIHRodXMgaXMgbm90IHRocmVhZCBz
YWZlLgotICAgIEtleWZyYW1lVmFsdWVMaXN0IG1fdmFsdWVzOwotICAgIEludFNpemUgbV9ib3hT
aXplOwotICAgIFZlY3RvcjxVQ2hhcj4gbV9uYW1lOyAvLyBNdXN0IG5vdCB1c2UgU3RyaW5nIG1l
bWJlciB3aGVuIGRlcml2aW5nIGZyb20gVGhyZWFkU2FmZVJlZkNvdW50ZWQKLSAgICBkb3VibGUg
bV90aW1lT2Zmc2V0OwotICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKLSAgICBib29sIG1fdHJhbnNm
b3JtRnVuY3Rpb25MaXN0VmFsaWQ7Ci0KLSAgICBSZWZQdHI8VGltaW5nRnVuY3Rpb24+IG1fdGlt
aW5nRnVuY3Rpb247Ci0gICAgZG91YmxlIG1fZHVyYXRpb247Ci0gICAgaW50IG1faXRlcmF0aW9u
Q291bnQ7Ci0gICAgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0g
ICAgYm9vbCBtX2ZpbmlzaGVkOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTGF5ZXJBbmltYXRpb25f
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
ckNvbXBvc2l0aW5nVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCShyZXZp
c2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1
ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKLQotI2luY2x1ZGUgIkxheWVyQ29tcG9zaXRp
bmdUaHJlYWRDbGllbnQuaCIKLSNpbmNsdWRlICJMYXllck1lc3NhZ2UuaCIKLSNpbmNsdWRlICJM
YXllclJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNsaWVudC5oIgotI2luY2x1
ZGUgIkxheWVyVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKLSNp
ZiBFTkFCTEUoVklERU8pCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmgiCi0jZW5kaWYKLSNpbmNsdWRlICJQbHVnaW5WaWV3
LmgiCi0jaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCi0jaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29t
cG9zaXRpbmdUaHJlYWQuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMyQ29u
dGV4dFN0YXRlLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KLSNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi11c2luZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3Jh
bTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIExheWVyT3ZlcnJpZGU6OnJlbW92ZUFu
aW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tp
XS0+bmFtZSgpID09IG5hbWUpIHsKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5yZW1vdmUoaSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8
TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6Y3JlYXRlKExh
eWVyVHlwZSB0eXBlLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KiBjbGllbnQpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllckNvbXBvc2l0aW5nVGhyZWFkKHR5cGUsIGNsaWVu
dCkpOwotfQotCi1MYXllckNvbXBvc2l0aW5nVGhyZWFkOjpMYXllckNvbXBvc2l0aW5nVGhyZWFk
KExheWVyVHlwZSB0eXBlLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KiBjbGllbnQpCi0g
ICAgOiBMYXllckRhdGEodHlwZSkKLSAgICAsIG1fbGF5ZXJSZW5kZXJlcigwKQotICAgICwgbV9z
dXBlcmxheWVyKDApCi0gICAgLCBtX2NlbnRlclcoMCkKLSAgICAsIG1fcGx1Z2luQnVmZmVyKDAp
Ci0gICAgLCBtX2RyYXdPcGFjaXR5KDApCi0gICAgLCBtX3Zpc2libGUoZmFsc2UpCi0gICAgLCBt
X2NvbW1pdFNjaGVkdWxlZChmYWxzZSkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKLSNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCi0gICAgLCBtX2ZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKGZhbHNlKQot
I2VuZGlmCi17Ci19Ci0KLUxheWVyQ29tcG9zaXRpbmdUaHJlYWQ6On5MYXllckNvbXBvc2l0aW5n
VGhyZWFkKCkKLXsKLSAgICBBU1NFUlQoaXNDb21wb3NpdGluZ1RocmVhZCgpKTsKLQotICAgIEFT
U0VSVCghc3VwZXJsYXllcigpKTsKLQotICAgIC8vIFJlbW92ZSB0aGUgc3VwZXJsYXllciByZWZl
cmVuY2UgZnJvbSBhbGwgc3VibGF5ZXJzLgotICAgIHdoaWxlIChtX3N1YmxheWVycy5zaXplKCkp
Ci0gICAgICAgIG1fc3VibGF5ZXJzWzBdLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwotCi0gICAg
Ly8gRGVsZXRlIGFsbCBhbGxvY2F0ZWQgdGV4dHVyZXMKLSAgICBkZWxldGVUZXh0dXJlcygpOwot
Ci0gICAgLy8gV2UganVzdCBkZWxldGVkIGFsbCBvdXIgdGV4dHVyZXMsIG5vIG5lZWQgZm9yIHRo
ZQotICAgIC8vIGxheWVyIHJlbmRlcmVyIHRvIHRyYWNrIHVzIGFueW1vcmUKLSAgICBpZiAobV9s
YXllclJlbmRlcmVyKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnJlbW92ZUxheWVyKHRoaXMp
OwotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+bGF5ZXJDb21wb3NpdGlu
Z1RocmVhZERlc3Ryb3llZCh0aGlzKTsKLX0KLQotdm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFk
OjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXIqIHJlbmRlcmVyKQotewotICAgIC8vIEl0
J3Mgbm90IGV4cGVjdGVkIHRoYXQgbGF5ZXJzIHdpbGwgZXZlciBzd2l0Y2ggcmVuZGVyZXJzLgot
ICAgIEFTU0VSVCghcmVuZGVyZXIgfHwgIW1fbGF5ZXJSZW5kZXJlciB8fCByZW5kZXJlciA9PSBt
X2xheWVyUmVuZGVyZXIpOwotCi0gICAgbV9sYXllclJlbmRlcmVyID0gcmVuZGVyZXI7Ci0gICAg
aWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5hZGRMYXllcih0
aGlzKTsKLX0KLQotdm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpkZWxldGVUZXh0dXJlcygp
Ci17Ci0gICAgcmVsZWFzZVRleHR1cmVSZXNvdXJjZXMoKTsKLQotICAgIGlmIChtX2NsaWVudCkK
LSAgICAgICAgbV9jbGllbnQtPmRlbGV0ZVRleHR1cmVzKHRoaXMpOwotfQotCi12b2lkIExheWVy
Q29tcG9zaXRpbmdUaHJlYWQ6OnNldERyYXdUcmFuc2Zvcm0oZG91YmxlIHNjYWxlLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cHJvamVjdGlvbk1hdHJpeCkKLXsKLSAgICBtX2RyYXdUcmFuc2Zvcm0gPSBwcm9qZWN0aW9uTWF0
cml4ICogbWF0cml4OwotCi0gICAgRmxvYXRSZWN0IGJvdW5kc1JlY3QoLW9yaWdpbigpLCBib3Vu
ZHMoKSk7Ci0KLSAgICBpZiAoc2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKLSAgICAgICAgYm91bmRz
UmVjdC5zY2FsZSgxIC8gc2NhbGUpOwotCi0gICAgbV9jZW50ZXJXID0gMDsKLSAgICBtX3RyYW5z
Zm9ybWVkQm91bmRzLmNsZWFyKCk7Ci0gICAgbV93cy5jbGVhcigpOwotICAgIG1fdGV4dHVyZUNv
b3JkaW5hdGVzLmNsZWFyKCk7Ci0gICAgaWYgKG1hdHJpeC5oYXNQZXJzcGVjdGl2ZSgpICYmICFt
X2xheWVyUmVuZGVyZXJTdXJmYWNlKSB7Ci0gICAgICAgIC8vIFBlcmZvcm0gcHJvY2Vzc2luZyBh
Y2NvcmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2Zvcm1zIDYuMgotICAg
ICAgICAvLyBJZiB3IDwgMCBmb3IgYWxsIGZvdXIgY29ybmVycyBvZiB0aGUgdHJhbnNmb3JtZWQg
Ym94LCB0aGUgYm94IGlzIG5vdCByZW5kZXJlZC4KLSAgICAgICAgLy8gSWYgdyA8IDAgZm9yIG9u
ZSB0byB0aHJlZSBjb3JuZXJzIG9mIHRoZSB0cmFuc2Zvcm1lZCBib3gsIHRoZSBib3gKLSAgICAg
ICAgLy8gbXVzdCBiZSByZXBsYWNlZCBieSBhIHBvbHlnb24gdGhhdCBoYXMgYW55IHBhcnRzIHdp
dGggdyA8IDAgY3V0IG91dC4KLSAgICAgICAgLy8gSWYgdyA9IDAsICh44oCyLCB54oCyLCB64oCy
KSA9ICh4IOKLhSBuLCB5IOKLhSBuLCB6IOKLhSBuKQotICAgICAgICAvLyBXZSBpbXBsZW1lbnQg
dGhpcyBieSBpbnRlcnNlY3Rpbmcgd2l0aCB0aGUgaW1hZ2UgcGxhbmUsIGkuZS4gdGhlIGxhc3Qg
cm93IG9mIHRoZSBjb2x1bW4tbWFqb3IgbWF0cml4LgotICAgICAgICAvLyBUbyBhdm9pZCBwcm9i
bGVtcyB3aXRoIHcgY2xvc2UgdG8gMCwgd2UgdXNlIHcgPSBlcHNpbG9uIGFzIHRoZSBuZWFyIHBs
YW5lIGJ5IHN1YnRyYWN0aW5nIGVwc2lsb24gZnJvbSBtYXRyaXgubTQ0KCkuCi0gICAgICAgIGNv
bnN0IGZsb2F0IGVwc2lsb24gPSAxZS0zOwotICAgICAgICBWZWN0b3I8RmxvYXRQb2ludDNELCA0
PiBxdWFkID0gdG9WZWN0b3I8RmxvYXRQb2ludDNELCA0Pihib3VuZHNSZWN0KTsKLSAgICAgICAg
VmVjdG9yPEZsb2F0UG9pbnQzRCwgND4gcG9seWdvbiA9IGludGVyc2VjdChxdWFkLCBMYXllckNs
aXBQbGFuZShGbG9hdFBvaW50M0QobWF0cml4Lm0xNCgpLCBtYXRyaXgubTI0KCksIG1hdHJpeC5t
MzQoKSksIG1hdHJpeC5tNDQoKSAtIGVwc2lsb24pKTsKLQotICAgICAgICAvLyBDb21wdXRlIHRo
ZSBjbGlwcGVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAgIGlmIChwb2x5Z29uICE9IHF1
YWQpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9seWdvbi5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCYgcCA9IHBvbHlnb25baV07Ci0g
ICAgICAgICAgICAgICAgbV90ZXh0dXJlQ29vcmRpbmF0ZXMuYXBwZW5kKEZsb2F0UG9pbnQocC54
KCkgLyBib3VuZHNSZWN0LndpZHRoKCkgKyAwLjVmLCBwLnkoKSAvIGJvdW5kc1JlY3QuaGVpZ2h0
KCkgKyAwLjVmKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3
ID4gMCwgKHjigLIsIHnigLIsIHrigLIpID0gKHgvdywgeS93LCB6L3cpCi0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcG9seWdvbi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgZmxv
YXQgdzsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBwID0gbXVsdFZlY01hdHJpeChtYXRyaXgs
IHBvbHlnb25baV0sIHcpOwotICAgICAgICAgICAgaWYgKHcgIT0gMSkgewotICAgICAgICAgICAg
ICAgIHAuc2V0WChwLngoKSAvIHcpOwotICAgICAgICAgICAgICAgIHAuc2V0WShwLnkoKSAvIHcp
OwotICAgICAgICAgICAgICAgIHAuc2V0WihwLnooKSAvIHcpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBGbG9hdFBvaW50M0QgcSA9IHByb2plY3Rpb25NYXRyaXgubWFwUG9pbnQocCk7
Ci0gICAgICAgICAgICBtX3RyYW5zZm9ybWVkQm91bmRzLmFwcGVuZChGbG9hdFBvaW50KHEueCgp
LCBxLnkoKSkpOwotICAgICAgICAgICAgbV93cy5hcHBlbmQodyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtX2NlbnRlclcgPSBtYXRyaXgubTQ0KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fdHJh
bnNmb3JtZWRCb3VuZHMgPSB0b1ZlY3RvcjxGbG9hdFBvaW50LCA0PihtX2RyYXdUcmFuc2Zvcm0u
bWFwUXVhZChib3VuZHNSZWN0KSk7Ci0KLSAgICBtX2JvdW5kaW5nQm94ID0gV2ViQ29yZTo6Ym91
bmRpbmdCb3gobV90cmFuc2Zvcm1lZEJvdW5kcyk7Ci19Ci0KLWNvbnN0IFZlY3RvcjxGbG9hdFBv
aW50PiYgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZUNvb3JkaW5hdGVzKFRleHR1cmVD
b29yZGluYXRlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKG1fdGV4
dHVyZUNvb3JkaW5hdGVzLnNpemUoKSkgewotICAgICAgICBpZiAob3JpZW50YXRpb24gPT0gVXBz
aWRlRG93bikgewotICAgICAgICAgICAgc3RhdGljIFZlY3RvcjxGbG9hdFBvaW50PiB1cHNpZGVE
b3duQ29vcmRpbmF0ZXM7Ci0gICAgICAgICAgICB1cHNpZGVEb3duQ29vcmRpbmF0ZXMgPSBtX3Rl
eHR1cmVDb29yZGluYXRlczsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXBz
aWRlRG93bkNvb3JkaW5hdGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIHVwc2lkZURv
d25Db29yZGluYXRlc1tpXS5zZXRZKDEgLSB1cHNpZGVEb3duQ29vcmRpbmF0ZXNbaV0ueSgpKTsK
LSAgICAgICAgICAgIHJldHVybiB1cHNpZGVEb3duQ29vcmRpbmF0ZXM7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gbV90ZXh0dXJlQ29vcmRpbmF0ZXM7Ci0gICAgfQotCi0gICAgaWYgKG9y
aWVudGF0aW9uID09IFVwc2lkZURvd24pIHsKLSAgICAgICAgc3RhdGljIEZsb2F0UG9pbnQgZGF0
YVs0XSA9IHsgRmxvYXRQb2ludCgwLCAxKSwgIEZsb2F0UG9pbnQoMSwgMSksICBGbG9hdFBvaW50
KDEsIDApLCAgRmxvYXRQb2ludCgwLCAwKSB9OwotICAgICAgICBzdGF0aWMgVmVjdG9yPEZsb2F0
UG9pbnQ+KiB1cHNpZGVEb3duQ29vcmRpbmF0ZXMgPSAwOwotICAgICAgICBpZiAoIXVwc2lkZURv
d25Db29yZGluYXRlcykgewotICAgICAgICAgICAgdXBzaWRlRG93bkNvb3JkaW5hdGVzID0gbmV3
IFZlY3RvcjxGbG9hdFBvaW50PigpOwotICAgICAgICAgICAgdXBzaWRlRG93bkNvb3JkaW5hdGVz
LT5hcHBlbmQoZGF0YSwgNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICp1cHNpZGVEb3du
Q29vcmRpbmF0ZXM7Ci0gICAgfQotCi0gICAgc3RhdGljIEZsb2F0UG9pbnQgZGF0YVs0XSA9IHsg
RmxvYXRQb2ludCgwLCAwKSwgIEZsb2F0UG9pbnQoMSwgMCksICBGbG9hdFBvaW50KDEsIDEpLCAg
RmxvYXRQb2ludCgwLCAxKSB9OwotICAgIHN0YXRpYyBWZWN0b3I8RmxvYXRQb2ludD4qIGNvb3Jk
aW5hdGVzID0gMDsKLSAgICBpZiAoIWNvb3JkaW5hdGVzKSB7Ci0gICAgICAgIGNvb3JkaW5hdGVz
ID0gbmV3IFZlY3RvcjxGbG9hdFBvaW50PigpOwotICAgICAgICBjb29yZGluYXRlcy0+YXBwZW5k
KGRhdGEsIDQpOwotICAgIH0KLSAgICByZXR1cm4gKmNvb3JkaW5hdGVzOwotfQotCi1GbG9hdFF1
YWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6dHJhbnNmb3JtZWRIb2xlUHVuY2hSZWN0KCkgY29u
c3QKLXsKLSAgICBGbG9hdFJlY3QgaG9sZVB1bmNoUmVjdChtX2hvbGVQdW5jaFJlY3QpOwotICAg
IGhvbGVQdW5jaFJlY3QubW92ZUJ5KC1vcmlnaW4oKSk7Ci0gICAgcmV0dXJuIG1fZHJhd1RyYW5z
Zm9ybS5tYXBRdWFkKGhvbGVQdW5jaFJlY3QpOwotfQotCi12b2lkIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ6OmRyYXdUZXh0dXJlcyhjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0sIGRvdWJsZSBz
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGlw
UmVjdCkKLXsKLSAgICBpZiAobV9wbHVnaW5WaWV3KSB7Ci0gICAgICAgIGlmIChtX2lzVmlzaWJs
ZSkgewotICAgICAgICAgICAgLy8gVGhlIGxheWVyIGNvbnRhaW5zIEZsYXNoLCB2aWRlbywgb3Ig
b3RoZXIgcGx1Z2luIGNvbnRlbnRzLgotICAgICAgICAgICAgbV9wbHVnaW5CdWZmZXIgPSBtX3Bs
dWdpblZpZXctPmxvY2tGcm9udEJ1ZmZlckZvclJlYWQoKTsKLQotICAgICAgICAgICAgaWYgKCFt
X3BsdWdpbkJ1ZmZlcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlm
ICghQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpsb2NrQW5kQmluZEJ1ZmZlckdMVGV4
dHVyZShtX3BsdWdpbkJ1ZmZlciwgR0xfVEVYVFVSRV8yRCkpIHsKLSAgICAgICAgICAgICAgICBt
X3BsdWdpblZpZXctPnVubG9ja0Zyb250QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPmFkZExheWVy
VG9SZWxlYXNlVGV4dHVyZVJlc291cmNlc0xpc3QodGhpcyk7Ci0KLSAgICAgICAgICAgIGdsRW5h
YmxlKEdMX0JMRU5EKTsKLSAgICAgICAgICAgIGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01J
TlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZihwcm9ncmFtLm9wYWNpdHlM
b2NhdGlvbigpLCBkcmF3T3BhY2l0eSgpKTsKLSAgICAgICAgICAgIGdsVmVydGV4QXR0cmliUG9p
bnRlcihwcm9ncmFtLnBvc2l0aW9uTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAw
LCBtX3RyYW5zZm9ybWVkQm91bmRzLmRhdGEoKSk7Ci0gICAgICAgICAgICBnbFZlcnRleEF0dHJp
YlBvaW50ZXIocHJvZ3JhbS50ZXhDb29yZExvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxT
RSwgMCwgdGV4dHVyZUNvb3JkaW5hdGVzKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGdsRHJhd0Fy
cmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIG1fdHJhbnNmb3JtZWRCb3VuZHMuc2l6ZSgpKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotI2lmIEVOQUJMRShWSURFTykKLSAgICBp
ZiAobV9tZWRpYVBsYXllcikgewotICAgICAgICBpZiAobV9pc1Zpc2libGUpIHsKLSAgICAgICAg
ICAgIEludFJlY3QgcGFpbnRSZWN0OwotICAgICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+
Y2xpZW50KCktPnNob3VsZENoaWxkV2luZG93c1VzZURvY3VtZW50Q29vcmRpbmF0ZXMoKSkgewot
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3BlY2lmeSB0aGUgbWVkaWEgcGxheWVyIGxv
Y2F0aW9uIGluIGNvbnRlbnRzIGNvb3JkaW5hdGVzLiBUaGUgJ3Zpc2libGVSZWN0JwotICAgICAg
ICAgICAgICAgIC8vIHNwZWNpZmllcyB0aGUgY29udGVudCByZWdpb24gY292ZXJlZCBieSBvdXIg
dmlld3BvcnQuIFNvIHdlIHRyYW5zZm9ybSBmcm9tIG91cgotICAgICAgICAgICAgICAgIC8vIG5v
cm1hbGl6ZWQgZGV2aWNlIGNvb3JkaW5hdGVzIFstMSwgMV0gdG8gdGhlICd2aXNpYmxlUmVjdCcu
Ci0gICAgICAgICAgICAgICAgZmxvYXQgdnJ3MiA9IHZpc2libGVSZWN0LndpZHRoKCkgLyAyLjA7
Ci0gICAgICAgICAgICAgICAgZmxvYXQgdnJoMiA9IHZpc2libGVSZWN0LmhlaWdodCgpIC8gMi4w
OwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcChtX3RyYW5zZm9ybWVkQm91bmRzWzBdLngo
KSAqIHZydzIgKyB2cncyICsgdmlzaWJsZVJlY3QueCgpLAotICAgICAgICAgICAgICAgICAgICAt
bV90cmFuc2Zvcm1lZEJvdW5kc1swXS55KCkgKiB2cmgyICsgdnJoMiArIHZpc2libGVSZWN0Lnko
KSk7Ci0gICAgICAgICAgICAgICAgcGFpbnRSZWN0ID0gSW50UmVjdChyb3VuZGVkSW50UG9pbnQo
cCksIG1fYm91bmRzKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHBhaW50
UmVjdCA9IG1fbGF5ZXJSZW5kZXJlci0+dG9XaW5kb3dDb29yZGluYXRlcyhtX2JvdW5kaW5nQm94
KTsKLQotICAgICAgICAgICAgbV9tZWRpYVBsYXllci0+cGFpbnQoMCwgcGFpbnRSZWN0KTsKLSAg
ICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZSogbXBwID0gc3RhdGljX2Nhc3Q8TWVkaWFQbGF5
ZXJQcml2YXRlKj4obV9tZWRpYVBsYXllci0+cGxhdGZvcm1NZWRpYSgpLm1lZGlhLnFueE1lZGlh
UGxheWVyKTsKLSAgICAgICAgICAgIG1wcC0+ZHJhd0J1ZmZlcmluZ0FuaW1hdGlvbihtX2RyYXdU
cmFuc2Zvcm0sIHByb2dyYW0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRyYXdUZXh0dXJl
cyh0aGlzLCBwcm9ncmFtLCBzY2FsZSwgY2xpcFJlY3QpOwotfQotCi12b2lkIExheWVyQ29tcG9z
aXRpbmdUaHJlYWQ6OmRyYXdTdXJmYWNlKGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqIG1hc2spCi17Ci0gICAgdXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczsKLQotICAgIGlmIChtX2xheWVyUmVuZGVyZXItPmxheWVyQWxyZWFkeU9uU3Vy
ZmFjZSh0aGlzKSkgewotICAgICAgICBMYXllclRleHR1cmUqIHN1cmZhY2VUZXh0dXJlID0gbGF5
ZXJSZW5kZXJlclN1cmZhY2UoKS0+dGV4dHVyZSgpOwotICAgICAgICBpZiAoIXN1cmZhY2VUZXh0
dXJlKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgp
LT50ZXh0dXJlQWNjZXNzZWQobGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+dGV4dHVyZSgpKTsKLSAg
ICAgICAgR0x1aW50IHN1cmZhY2VUZXhJRCA9IHN1cmZhY2VUZXh0dXJlLT5wbGF0Zm9ybVRleHR1
cmUoKTsKLQotICAgICAgICBpZiAoIXN1cmZhY2VUZXhJRCkgewotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAobWFzaykgewotICAgICAgICAgICAgaWYgKExheWVyVGV4dHVyZSogbWFza1RleHR1cmUg
PSBtYXNrLT5jb250ZW50c1RleHR1cmUoKSkgewotICAgICAgICAgICAgICAgIEdMdWludCBtYXNr
VGV4SUQgPSBtYXNrVGV4dHVyZS0+cGxhdGZvcm1UZXh0dXJlKCk7Ci0KLSAgICAgICAgICAgICAg
ICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOwotICAgICAgICAgICAgICAgIGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1RleElEKTsKLSAgICAgICAgICAgICAgICBnbEFjdGl2
ZVRleHR1cmUoR0xfVEVYVFVSRTApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09O
RV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IHN1cmZhY2VUZXhJRCk7Ci0KLSAgICAgICAgRmxvYXRRdWFkIHN1cmZhY2VRdWFkID0gZHJhd1Ry
YW5zZm9ybS5tYXBRdWFkKEZsb2F0UmVjdCgtb3JpZ2luKCksIGJvdW5kcygpKSk7Ci0gICAgICAg
IGdsVW5pZm9ybTFmKHByb2dyYW0ub3BhY2l0eUxvY2F0aW9uKCksIGxheWVyUmVuZGVyZXJTdXJm
YWNlKCktPmRyYXdPcGFjaXR5KCkpOwotICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJv
Z3JhbS5wb3NpdGlvbkxvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJnN1cmZh
Y2VRdWFkKTsKLQotICAgICAgICBzdGF0aWMgZmxvYXQgdGV4Y29vcmRzWzQgKiAyXSA9IHsgMCwg
MCwgIDEsIDAsICAxLCAxLCAgMCwgMSB9OwotICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIo
cHJvZ3JhbS50ZXhDb29yZExvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4
Y29vcmRzKTsKLSAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7Ci0g
ICAgfQotfQotCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnJlbGVhc2VUZXh0dXJlUmVz
b3VyY2VzKCkKLXsKLSAgICBpZiAobV9wbHVnaW5WaWV3ICYmIG1fcGx1Z2luQnVmZmVyKSB7Ci0g
ICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cmVsZWFzZUJ1ZmZlckdMVGV4
dHVyZShtX3BsdWdpbkJ1ZmZlcik7Ci0gICAgICAgIG1fcGx1Z2luQnVmZmVyID0gMDsKLSAgICAg
ICAgbV9wbHVnaW5WaWV3LT51bmxvY2tGcm9udEJ1ZmZlcigpOwotICAgIH0KLX0KLQotdm9pZCBM
YXllckNvbXBvc2l0aW5nVGhyZWFkOjpzZXRQbHVnaW5WaWV3KFBsdWdpblZpZXcqIHBsdWdpblZp
ZXcpCi17Ci0gICAgaWYgKCFpc0NvbXBvc2l0aW5nVGhyZWFkKCkpIHsKLSAgICAgICAgZGlzcGF0
Y2hTeW5jQ29tcG9zaXRpbmdNZXNzYWdlKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVNZXRo
b2RDYWxsTWVzc2FnZSgKLSAgICAgICAgICAgICZMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpzZXRQ
bHVnaW5WaWV3LAotICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgIHBsdWdpblZpZXcpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcGx1Z2luVmlldyA9IHBsdWdpblZpZXc7
Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnNl
dE1lZGlhUGxheWVyKE1lZGlhUGxheWVyKiBtZWRpYVBsYXllcikKLXsKLSAgICBpZiAoIWlzQ29t
cG9zaXRpbmdUaHJlYWQoKSkgewotICAgICAgICBkaXNwYXRjaFN5bmNDb21wb3NpdGluZ01lc3Nh
Z2UoQmxhY2tCZXJyeTo6UGxhdGZvcm06OmNyZWF0ZU1ldGhvZENhbGxNZXNzYWdlKAotICAgICAg
ICAgICAgJkxheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnNldE1lZGlhUGxheWVyLAotICAgICAgICAg
ICAgdGhpcywKLSAgICAgICAgICAgIG1lZGlhUGxheWVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX21lZGlhUGxheWVyID0gbWVkaWFQbGF5ZXI7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpyZW1vdmVTdWJsYXllcihMYXllckNvbXBvc2l0aW5n
VGhyZWFkKiBzdWJsYXllcikKLXsKLSAgICBBU1NFUlQoaXNDb21wb3NpdGluZ1RocmVhZCgpKTsK
LQotICAgIGludCBmb3VuZEluZGV4ID0gaW5kZXhPZlN1YmxheWVyKHN1YmxheWVyKTsKLSAgICBp
ZiAoZm91bmRJbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3VibGF5ZXItPnNl
dFN1cGVybGF5ZXIoMCk7Ci0gICAgbV9zdWJsYXllcnMucmVtb3ZlKGZvdW5kSW5kZXgpOwotfQot
Ci1pbnQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6aW5kZXhPZlN1YmxheWVyKGNvbnN0IExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqIHJlZmVyZW5jZSkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fc3VibGF5ZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3N1YmxheWVyc1tp
XSA9PSByZWZlcmVuY2UpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0gICAgcmV0dXJu
IC0xOwotfQotCi1jb25zdCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBMYXllckNvbXBvc2l0aW5n
VGhyZWFkOjpyb290TGF5ZXIoKSBjb25zdAotewotICAgIGNvbnN0IExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqIGxheWVyID0gdGhpczsKLSAgICBmb3IgKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIHN1
cGVybGF5ZXIgPSBsYXllci0+c3VwZXJsYXllcigpOyBzdXBlcmxheWVyOyBsYXllciA9IHN1cGVy
bGF5ZXIsIHN1cGVybGF5ZXIgPSBzdXBlcmxheWVyLT5zdXBlcmxheWVyKCkpIHsgfQotICAgIHJl
dHVybiBsYXllcjsKLX0KLQotdm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjphZGRTdWJsYXll
cihMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllcikKLXsKLSAgICBsYXllci0+cmVtb3ZlRnJv
bVN1cGVybGF5ZXIoKTsKLSAgICBsYXllci0+c2V0U3VwZXJsYXllcih0aGlzKTsKLSAgICBtX3N1
YmxheWVycy5hcHBlbmQobGF5ZXIpOwotfQotCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6
OnJlbW92ZUZyb21TdXBlcmxheWVyKCkKLXsKLSAgICBpZiAobV9zdXBlcmxheWVyKQotICAgICAg
ICBtX3N1cGVybGF5ZXItPnJlbW92ZVN1YmxheWVyKHRoaXMpOwotfQotCi12b2lkIExheWVyQ29t
cG9zaXRpbmdUaHJlYWQ6OnNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ29t
cG9zaXRpbmdUaHJlYWQ+ID4mIHN1YmxheWVycykKLXsKLSAgICBpZiAoc3VibGF5ZXJzID09IG1f
c3VibGF5ZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAobV9zdWJsYXllcnMuc2l6
ZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiBsYXllciA9IG1f
c3VibGF5ZXJzWzBdLmdldCgpOwotICAgICAgICBBU1NFUlQobGF5ZXItPnN1cGVybGF5ZXIoKSk7
Ci0gICAgICAgIGxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwotICAgIH0KLQotICAgIG1f
c3VibGF5ZXJzLmNsZWFyKCk7Ci0KLSAgICBzaXplX3QgbGlzdFNpemUgPSBzdWJsYXllcnMuc2l6
ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7IGkrKykgewotICAgICAg
ICBSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gc3VibGF5ZXIgPSBzdWJsYXllcnNbaV07
Ci0gICAgICAgIHN1YmxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwotICAgICAgICBzdWJs
YXllci0+c2V0U3VwZXJsYXllcih0aGlzKTsKLSAgICAgICAgbV9zdWJsYXllcnMuaW5zZXJ0KGks
IHN1YmxheWVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6dXBk
YXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAg
ICAgbV9jbGllbnQtPnVwbG9hZFRleHR1cmVzSWZOZWVkZWQodGhpcyk7Ci19Ci0KLUxheWVyVGV4
dHVyZSogTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6Y29udGVudHNUZXh0dXJlKCkKLXsKLSAgICBp
ZiAobV9jbGllbnQpCi0gICAgICAgIHJldHVybiBtX2NsaWVudC0+Y29udGVudHNUZXh0dXJlKHRo
aXMpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6
c2V0VmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAgaWYgKHZpc2libGUgPT0gbV92aXNpYmxl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Zpc2libGUgPSB2aXNpYmxlOwotCi0gICAgaWYg
KG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZCh0aGlz
LCB2aXNpYmxlKTsKLX0KLQotdm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpzZXROZWVkc0Nv
bW1pdCgpCi17Ci0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5zZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6
OnNjaGVkdWxlQ29tbWl0KCkKLXsKLSAgICBpZiAoIW1fY2xpZW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIWlzV2ViS2l0VGhyZWFkKCkpIHsKLSAgICAgICAgaWYgKG1fY29tbWl0U2No
ZWR1bGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fY29tbWl0U2NoZWR1bGVk
ID0gdHJ1ZTsKLQotICAgICAgICBkaXNwYXRjaFdlYktpdE1lc3NhZ2UoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OmNyZWF0ZU1ldGhvZENhbGxNZXNzYWdlKCZMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpz
Y2hlZHVsZUNvbW1pdCwgdGhpcykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9j
b21taXRTY2hlZHVsZWQgPSBmYWxzZTsKLQotICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbW1pdCgp
OwotfQotCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmNvbW1pdFBlbmRpbmdUZXh0dXJl
VXBsb2FkcygpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+Y29tbWl0
UGVuZGluZ1RleHR1cmVVcGxvYWRzKHRoaXMpOwotfQotCi1ib29sIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ6OnVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGN1cnJlbnRUaW1lKQotewotICAgIC8vIFRo
ZSBjb21taXQgbWVjaGFuaXNtIGFsd2F5cyBvdmVyd3JpdGVzIG91ciBzdGF0ZSB3aXRoIHN0YXRl
IGZyb20gdGhlCi0gICAgLy8gV2ViS2l0IHRocmVhZC4gVGhpcyBtZWFucyB3ZSBoYXZlIHRvIHJl
c3RvcmUgdGhlIGxhc3QgYW5pbWF0ZWQgdmFsdWUgZm9yCi0gICAgLy8gc3VzcGVuZGVkIGFuaW1h
dGlvbnMuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N1c3BlbmRlZEFuaW1hdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTGF5ZXJBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1fc3Vz
cGVuZGVkQW5pbWF0aW9uc1tpXS5nZXQoKTsKLSAgICAgICAgLy8gRnJvbSBsb29raW5nIGF0IHRo
ZSBXZWJDb3JlIGNvZGUsIGl0IGFwcGVhcnMgdGhhdCB3aGVuIHRoZSBhbmltYXRpb24KLSAgICAg
ICAgLy8gaXMgcGF1c2VkLCB0aGUgdGltZU9mZnNldCBpcyBtb2RpZmllZCBzbyBpdCB3aWxsIGJl
IGFuIGFwcHJvcHJpYXRlCi0gICAgICAgIC8vIGVsYXBzZWRUaW1lLgotICAgICAgICBkb3VibGUg
ZWxhcHNlZFRpbWUgPSBhbmltYXRpb24tPnRpbWVPZmZzZXQoKTsKLSAgICAgICAgYW5pbWF0aW9u
LT5hcHBseSh0aGlzLCBlbGFwc2VkVGltZSk7Ci0gICAgfQotCi0gICAgYm9vbCBhbGxBbmltYXRp
b25zRmluaXNoZWQgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ydW5uaW5n
QW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBMYXllckFuaW1hdGlvbiogYW5pbWF0
aW9uID0gbV9ydW5uaW5nQW5pbWF0aW9uc1tpXS5nZXQoKTsKLSAgICAgICAgZG91YmxlIGVsYXBz
ZWRUaW1lID0gKG1fc3VzcGVuZFRpbWUgPyBtX3N1c3BlbmRUaW1lIDogY3VycmVudFRpbWUpIC0g
YW5pbWF0aW9uLT5zdGFydFRpbWUoKSArIGFuaW1hdGlvbi0+dGltZU9mZnNldCgpOwotICAgICAg
ICBhbmltYXRpb24tPmFwcGx5KHRoaXMsIGVsYXBzZWRUaW1lKTsKLSAgICAgICAgaWYgKCFhbmlt
YXRpb24tPmZpbmlzaGVkKCkpCi0gICAgICAgICAgICBhbGxBbmltYXRpb25zRmluaXNoZWQgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgYW55IG92ZXJyaWRlcywgYXBwbHkg
dGhlbQotICAgIGlmIChtX292ZXJyaWRlKSB7Ci0gICAgICAgIGlmIChtX292ZXJyaWRlLT5pc1Bv
c2l0aW9uU2V0KCkpCi0gICAgICAgICAgICBtX3Bvc2l0aW9uID0gbV9vdmVycmlkZS0+cG9zaXRp
b24oKTsKLSAgICAgICAgaWYgKG1fb3ZlcnJpZGUtPmlzQW5jaG9yUG9pbnRTZXQoKSkKLSAgICAg
ICAgICAgIG1fYW5jaG9yUG9pbnQgPSBtX292ZXJyaWRlLT5hbmNob3JQb2ludCgpOwotICAgICAg
ICBpZiAobV9vdmVycmlkZS0+aXNCb3VuZHNTZXQoKSkKLSAgICAgICAgICAgIG1fYm91bmRzID0g
bV9vdmVycmlkZS0+Ym91bmRzKCk7Ci0gICAgICAgIGlmIChtX292ZXJyaWRlLT5pc1RyYW5zZm9y
bVNldCgpKQotICAgICAgICAgICAgbV90cmFuc2Zvcm0gPSBtX292ZXJyaWRlLT50cmFuc2Zvcm0o
KTsKLSAgICAgICAgaWYgKG1fb3ZlcnJpZGUtPmlzT3BhY2l0eVNldCgpKQotICAgICAgICAgICAg
bV9vcGFjaXR5ID0gbV9vdmVycmlkZS0+b3BhY2l0eSgpOwotCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9vdmVycmlkZS0+YW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBMYXllckFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9vdmVycmlkZS0+YW5pbWF0aW9u
cygpW2ldLmdldCgpOwotICAgICAgICAgICAgZG91YmxlIGVsYXBzZWRUaW1lID0gKG1fc3VzcGVu
ZFRpbWUgPyBtX3N1c3BlbmRUaW1lIDogY3VycmVudFRpbWUpIC0gYW5pbWF0aW9uLT5zdGFydFRp
bWUoKSArIGFuaW1hdGlvbi0+dGltZU9mZnNldCgpOwotICAgICAgICAgICAgYW5pbWF0aW9uLT5h
cHBseSh0aGlzLCBlbGFwc2VkVGltZSk7Ci0gICAgICAgICAgICBpZiAoIWFuaW1hdGlvbi0+Zmlu
aXNoZWQoKSkKLSAgICAgICAgICAgICAgICBhbGxBbmltYXRpb25zRmluaXNoZWQgPSBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAhYWxsQW5pbWF0aW9uc0ZpbmlzaGVkOwot
fQotCi1ib29sIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6Omhhc1Zpc2libGVIb2xlUHVuY2hSZWN0
KCkgY29uc3QKLXsKLSAgICBpZiAobV9wbHVnaW5WaWV3ICYmICFtX2lzVmlzaWJsZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIGlmIChtX21lZGlhUGxh
eWVyICYmICFtX2lzVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSAg
ICByZXR1cm4gaGFzSG9sZVB1bmNoUmVjdCgpOwotfQotCi12b2lkIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ6OmNyZWF0ZUxheWVyUmVuZGVyZXJTdXJmYWNlKCkKLXsKLSAgICBBU1NFUlQoIW1fbGF5
ZXJSZW5kZXJlclN1cmZhY2UpOwotICAgIG1fbGF5ZXJSZW5kZXJlclN1cmZhY2UgPSBhZG9wdFB0
cihuZXcgTGF5ZXJSZW5kZXJlclN1cmZhY2UobV9sYXllclJlbmRlcmVyLCB0aGlzKSk7Ci19Ci0K
LXZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcnVubmluZ0FuaW1hdGlv
bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fcnVubmluZ0FuaW1hdGlvbnNbaV0tPm5h
bWUoKSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICBtX3J1bm5pbmdBbmltYXRpb25zLnJlbW92ZShp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotTGF5ZXJPdmVy
cmlkZSogTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6b3ZlcnJpZGUoKQotewotICAgIGlmICghbV9v
dmVycmlkZSkKLSAgICAgICAgbV9vdmVycmlkZSA9IExheWVyT3ZlcnJpZGU6OmNyZWF0ZSgpOwot
ICAgIHJldHVybiBtX292ZXJyaWRlLmdldCgpOwotfQotCi12b2lkIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ6OmNsZWFyT3ZlcnJpZGUoKQotewotICAgIG1fb3ZlcnJpZGUuY2xlYXIoKTsKLX0KLQot
dm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpkaXNjYXJkRnJvbnRWaXNpYmlsaXR5KCkKLXsK
LSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaXNjYXJkRnJvbnRWaXNpYmls
aXR5KCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJD
b21wb3NpdGluZ1RocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oCShyZXZpc2lvbiAx
NjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyQ29tcG9zaXRpbmdUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzMjEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBMYXllckNvbXBvc2l0aW5nVGhyZWFk
X2gKLSNkZWZpbmUgTGF5ZXJDb21wb3NpdGluZ1RocmVhZF9oCi0KLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCi0jaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiTGF5ZXJBbmltYXRpb24uaCIKLSNpbmNsdWRlICJM
YXllckRhdGEuaCIKLSNpbmNsdWRlICJMYXllckZpbHRlclJlbmRlcmVyLmgiCi0jaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlclN1cmZhY2UuaCIKLSNpbmNsdWRlICJMYXllclRpbGVyLmgiCi0KLSNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HdWFyZGVkUG9pbnRlci5oPgotI2luY2x1ZGUgPEd1YXJk
ZWRQb2ludGVyRGVsZXRlci5oPgotCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2Ug
UGxhdGZvcm0gewotbmFtZXNwYWNlIEdyYXBoaWNzIHsKLWNsYXNzIEJ1ZmZlcjsKLWNsYXNzIEdM
RVMyUHJvZ3JhbTsKLX0KLX0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMYXll
ckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OwotY2xhc3MgTGF5ZXJSZW5kZXJlcjsKLQotY2xhc3Mg
TGF5ZXJPdmVycmlkZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJPdmVy
cmlkZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyT3ZlcnJpZGUoKSk7IH0K
LQotICAgIGJvb2wgaXNQb3NpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb25TZXQ7
IH0KLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsg
fQotICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9w
b3NpdGlvbiA9IHBvc2l0aW9uOyBtX3Bvc2l0aW9uU2V0ID0gdHJ1ZTsgfQotCi0gICAgYm9vbCBp
c0FuY2hvclBvaW50U2V0KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludFNldDsgfQotICAg
IEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9
Ci0gICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkg
eyBtX2FuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQ7IG1fYW5jaG9yUG9pbnRTZXQgPSB0cnVlOyB9
Ci0KLSAgICBib29sIGlzQm91bmRzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHNTZXQ7IH0K
LSAgICBJbnRTaXplIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9Ci0gICAgdm9p
ZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgYm91bmRzKSB7IG1fYm91bmRzID0gYm91bmRzOyBt
X2JvdW5kc1NldCA9IHRydWU7IH0KLQotICAgIGJvb2wgaXNUcmFuc2Zvcm1TZXQoKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zZm9ybVNldDsgfQotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotICAgIHZvaWQgc2V0
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFu
c2Zvcm0gPSB0cmFuc2Zvcm07IG1fdHJhbnNmb3JtU2V0ID0gdHJ1ZTsgfQotCi0gICAgYm9vbCBp
c09wYWNpdHlTZXQoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHlTZXQ7IH0KLSAgICBmbG9hdCBv
cGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9Ci0gICAgdm9pZCBzZXRPcGFjaXR5
KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgbV9vcGFjaXR5U2V0ID0gdHJ1
ZTsgfQotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiYgYW5pbWF0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uczsgfQotICAgIHZvaWQgYWRkQW5pbWF0
aW9uKFBhc3NSZWZQdHI8TGF5ZXJBbmltYXRpb24+IGFuaW1hdGlvbikgeyBtX2FuaW1hdGlvbnMu
YXBwZW5kKGFuaW1hdGlvbik7IH0KLSAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJp
bmcmIG5hbWUpOwotCi1wcml2YXRlOgotICAgIExheWVyT3ZlcnJpZGUoKQotICAgICAgICA6IG1f
b3BhY2l0eSgxLjApCi0gICAgICAgICwgbV9wb3NpdGlvblNldChmYWxzZSkKLSAgICAgICAgLCBt
X2FuY2hvclBvaW50U2V0KGZhbHNlKQotICAgICAgICAsIG1fYm91bmRzU2V0KGZhbHNlKQotICAg
ICAgICAsIG1fdHJhbnNmb3JtU2V0KGZhbHNlKQotICAgICAgICAsIG1fb3BhY2l0eVNldChmYWxz
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwotICAgIEZsb2F0
UG9pbnQgbV9hbmNob3JQb2ludDsKLSAgICBJbnRTaXplIG1fYm91bmRzOwotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIGZsb2F0IG1fb3BhY2l0eTsKLQotICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4gbV9hbmltYXRpb25zOwotCi0gICAgdW5zaWdu
ZWQgbV9wb3NpdGlvblNldCA6IDE7Ci0gICAgdW5zaWduZWQgbV9hbmNob3JQb2ludFNldCA6IDE7
Ci0gICAgdW5zaWduZWQgbV9ib3VuZHNTZXQgOiAxOwotICAgIHVuc2lnbmVkIG1fdHJhbnNmb3Jt
U2V0IDogMTsKLSAgICB1bnNpZ25lZCBtX29wYWNpdHlTZXQgOiAxOwotfTsKLQotY2xhc3MgTGF5
ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjsKLQotY2xhc3MgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiwgcHVi
bGljIExheWVyRGF0YSwgcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHdWFyZGVkUG9pbnRl
ckJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ+IGNyZWF0ZShMYXllclR5cGUsIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQqKTsK
LQotICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2xpZW50OyB9Ci0gICAgdm9pZCBzZXRDbGllbnQoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9Ci0KLSAgICAvLyBUaHJlYWQg
c2FmZQotICAgIHZvaWQgc2V0UGx1Z2luVmlldyhQbHVnaW5WaWV3Kik7Ci0jaWYgRU5BQkxFKFZJ
REVPKQotICAgIHZvaWQgc2V0TWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXIqKTsKLSNlbmRpZgotCi0g
ICAgLy8gTm90IHRocmVhZCBzYWZlCi0KLSAgICAvLyBUaGVzZSB3aWxsIGJlIG92ZXJ3cml0dGVu
IG9uIHRoZSBuZXh0IGNvbW1pdCBpZiB0aGlzIGxheWVyIGhhcyBhIExheWVyV2ViS2l0VGhyZWFk
IGNvdW50ZXJwYXJ0LgotICAgIC8vIFVzZWZ1bCBmb3Igc3RhbmQtYWxvbmUgbGF5ZXJzIHRoYXQg
YXJlIGNyZWF0ZWQgYW5kIG1hbmFnZWQgb24gdGhlIGNvbXBvc2l0aW5nIHRocmVhZC4KLSAgICAv
LyBUaGVzZSBmdW5jdGlvbnMgY2FuIGFsc28gYmUgdXNlZCB0byB1cGRhdGUgYW5pbWF0ZWQgcHJv
cGVydGllcyBpbiBMYXllckFuaW1hdGlvbi4KLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgfQotICAgIHZvaWQg
c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIHsgbV9hbmNob3JQ
b2ludCA9IGFuY2hvclBvaW50OyB9Ci0gICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYg
Ym91bmRzKSB7IG1fYm91bmRzID0gYm91bmRzOyB9Ci0gICAgdm9pZCBzZXRTaXplSXNTY2FsZUlu
dmFyaWFudChib29sIGludmFyaWFudCkgeyBtX3NpemVJc1NjYWxlSW52YXJpYW50ID0gaW52YXJp
YW50OyB9Ci0gICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCkgeyBtX3RyYW5zZm9ybSA9IG1hdHJpeDsgfQotICAgIHZvaWQgc2V0T3BhY2l0eShm
bG9hdCBvcGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IH0KLSAgICB2b2lkIGFkZFN1Ymxh
eWVyKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKLSAgICB2b2lkIHJlbW92ZUZyb21TdXBlcmxh
eWVyKCk7Ci0gICAgdm9pZCBzZXROZWVkc1RleHR1cmUoYm9vbCBuZWVkc1RleHR1cmUpIHsgbV9u
ZWVkc1RleHR1cmUgPSBuZWVkc1RleHR1cmU7IH0KLQotICAgIHZvaWQgY29tbWl0UGVuZGluZ1Rl
eHR1cmVVcGxvYWRzKCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2UgaGF2ZSBhbiBhbmlt
YXRpb24KLSAgICBib29sIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGN1cnJlbnRUaW1lKTsKLSAg
ICB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCk7Ci0gICAgTGF5ZXJUZXh0dXJl
KiBjb250ZW50c1RleHR1cmUoKTsKLQotICAgIGNvbnN0IExheWVyQ29tcG9zaXRpbmdUaHJlYWQq
IHJvb3RMYXllcigpIGNvbnN0OwotICAgIHZvaWQgc2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYpOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYgc3VibGF5ZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9zdWJsYXllcnM7IH0KLSAgICB2b2lkIHNldFN1cGVybGF5ZXIoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCogc3VwZXJsYXllcikgeyBtX3N1cGVybGF5ZXIgPSBzdXBlcmxheWVyOyB9Ci0gICAgTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCogc3VwZXJsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc3VwZXJs
YXllcjsgfQotCi0gICAgLy8gVGhlIGxheWVyIHJlbmRlcmVyIG11c3QgYmUgc2V0IGlmIHRoZSBs
YXllciBoYXMgYmVlbiByZW5kZXJlZAotICAgIExheWVyUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIo
KSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVyZXI7IH0KLSAgICB2b2lkIHNldExheWVyUmVu
ZGVyZXIoTGF5ZXJSZW5kZXJlciopOwotCi0gICAgLy8gVGhlIGRyYXcgdHJhbnNmb3JtIGV4cGVj
dHMgdGhlIG9yaWdpbiB0byBiZSBsb2NhdGVkIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgot
ICAgIEZsb2F0UG9pbnQgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gRmxvYXRQb2ludChtX2JvdW5k
cy53aWR0aCgpIC8gMi4wZiwgbV9ib3VuZHMuaGVpZ2h0KCkgLyAyLjBmKTsgfQotCi0gICAgdm9p
ZCBzZXREcmF3VHJhbnNmb3JtKGRvdWJsZSBzY2FsZSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rp
b25NYXRyaXgpOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9Ci0KLSAgICB2b2lkIHNldERyYXdP
cGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNpdHk7IH0KLSAgICBm
bG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KLQotICAg
IHZvaWQgY3JlYXRlTGF5ZXJSZW5kZXJlclN1cmZhY2UoKTsKLSAgICBMYXllclJlbmRlcmVyU3Vy
ZmFjZSogbGF5ZXJSZW5kZXJlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVy
ZXJTdXJmYWNlLmdldCgpOyB9Ci0gICAgdm9pZCBjbGVhckxheWVyUmVuZGVyZXJTdXJmYWNlKCkg
eyBtX2xheWVyUmVuZGVyZXJTdXJmYWNlLmNsZWFyKCk7IH0KLQotICAgIHZvaWQgc2V0TWFza0xh
eWVyKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIG1hc2tMYXllcikgeyBtX21hc2tMYXllciA9IG1h
c2tMYXllcjsgfQotICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIG1hc2tMYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFza0xheWVyLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldFJlcGxpY2FMYXll
cihMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllcikgeyBtX3JlcGxpY2FMYXllciA9IGxheWVy
OyB9Ci0gICAgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogcmVwbGljYUxheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXBsaWNhTGF5ZXIuZ2V0KCk7IH0KLQotICAgIC8vIFRoZXNlIHVzZSBub3JtYWxp
emVkIGRldmljZSBjb29yZGluYXRlcwotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fYm91bmRpbmdCb3g7IH0KLSAgICAvLyBUaGUgYm91bmRzIGFyZSBwcm9jZXNz
ZWQgYWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdHJhbnNmb3JtcyBwYXJh
Z3JhcGggNi4yLCB3aGljaCBjYW4gcmVzdWx0IGluIGEgcG9seWdvbiB3aXRoIG1vcmUgdGhhbiA0
IHNpZGVzLgotICAgIGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50LCA0PiYgdHJhbnNmb3JtZWRCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybWVkQm91bmRzOyB9Ci0gICAgY29uc3QgVmVj
dG9yPGZsb2F0LCA0PiYgd3MoKSBjb25zdCB7IHJldHVybiBtX3dzOyB9Ci0KLSAgICBlbnVtIFRl
eHR1cmVDb29yZGluYXRlT3JpZW50YXRpb24gewotICAgICAgICBSaWdodFNpZGVVcCA9IDAsCi0g
ICAgICAgIFVwc2lkZURvd24KLSAgICB9OwotCi0gICAgY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+
JiB0ZXh0dXJlQ29vcmRpbmF0ZXMoVGV4dHVyZUNvb3JkaW5hdGVPcmllbnRhdGlvbiA9IFJpZ2h0
U2lkZVVwKSBjb25zdDsKLSAgICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRIb2xlUHVuY2hSZWN0KCkg
Y29uc3Q7Ci0gICAgZmxvYXQgY2VudGVyVygpIGNvbnN0IHsgcmV0dXJuIG1fY2VudGVyVzsgfQot
Ci0gICAgdm9pZCBkZWxldGVUZXh0dXJlcygpOwotCi0gICAgdm9pZCBkcmF3VGV4dHVyZXMoY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mLCBkb3VibGUg
c2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xp
cFJlY3QpOwotICAgIHZvaWQgZHJhd1N1cmZhY2UoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqIG1hc2spOwotCi0gICAgdm9pZCByZWxlYXNlVGV4dHVyZVJl
c291cmNlcygpOwotCi0gICAgLy8gTGF5ZXIgdmlzaWJpbGl0eSBpcyBkZXRlcm1pbmVkIGJ5IHRo
ZSBMYXllclJlbmRlcmVyIHdoZW4gZHJhd2luZy4KLSAgICAvLyBTbyB3ZSBkb24ndCBoYXZlIGFu
IGFjY3VyYXRlIHZhbHVlIGZvciB2aXNpYmlsaXR5IHVudGlsIGl0J3MgdG9vIGxhdGUsCi0gICAg
Ly8gYnV0IHRoZSBhdHRyaWJ1dGUgc3RpbGwgaXMgdXNlZnVsLgotICAgIGJvb2wgaXNWaXNpYmxl
KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9Ci0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wp
OwotCi0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIGEgY29tbWl0IG9mIHRoZSB3aG9sZSBsYXllciB0
cmVlIG9uIHRoZSBXZWJLaXQgdGhyZWFkLAotICAgIC8vIHNvbWV0aW1lIGFmdGVyIHJlbmRlcmlu
ZyBpcyBmaW5pc2hlZC4gVXNlZCB3aGVuIHJlbmRlcmluZyByZXN1bHRzIGluIGEKLSAgICAvLyBu
ZWVkIGZvciBjb21taXQsIGZvciBleGFtcGxlIHdoZW4gYSBkaXJ0eSBsYXllciBiZWNvbWVzIHZp
c2libGUuCi0gICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwotCi0gICAgLy8gTm9ybWFsbHkgeW91
IHdvdWxkIHNjaGVkdWxlIGEgY29tbWl0IGZyb20gdGhlIHdlYmtpdCB0aHJlYWQsIGJ1dAotICAg
IC8vIHRoaXMgYWxsb3dzIHlvdSB0byBkbyBpdCBmcm9tIHRoZSBjb21wb3NpdGluZyB0aHJlYWQu
Ci0gICAgdm9pZCBzY2hlZHVsZUNvbW1pdCgpOwotCi0gICAgYm9vbCBoYXNSdW5uaW5nQW5pbWF0
aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX3J1bm5pbmdBbmltYXRpb25zLmlzRW1wdHkoKTsgfQot
Ci0gICAgYm9vbCBoYXNWaXNpYmxlSG9sZVB1bmNoUmVjdCgpIGNvbnN0OwotCi0gICAgdm9pZCBh
ZGRBbmltYXRpb24oTGF5ZXJBbmltYXRpb24qIGFuaW1hdGlvbikgeyBtX3J1bm5pbmdBbmltYXRp
b25zLmFwcGVuZChhbmltYXRpb24pOyB9Ci0gICAgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3Qg
U3RyaW5nJiBuYW1lKTsKLQotICAgIHZvaWQgc2V0UnVubmluZ0FuaW1hdGlvbnMoY29uc3QgVmVj
dG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiYgYW5pbWF0aW9ucykgeyBtX3J1bm5pbmdBbmlt
YXRpb25zID0gYW5pbWF0aW9uczsgfQotICAgIHZvaWQgc2V0U3VzcGVuZGVkQW5pbWF0aW9ucyhj
b25zdCBWZWN0b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+JiBhbmltYXRpb25zKSB7IG1fc3Vz
cGVuZGVkQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnM7IH0KLQotICAgIExheWVyT3ZlcnJpZGUqIG92
ZXJyaWRlKCk7Ci0gICAgdm9pZCBjbGVhck92ZXJyaWRlKCk7Ci0KLSAgICB2b2lkIGRpc2NhcmRG
cm9udFZpc2liaWxpdHkoKTsKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBib29sIGZp
bHRlck9wZXJhdGlvbnNDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJPcGVyYXRpb25z
Q2hhbmdlZDsgfQotICAgIHZvaWQgc2V0RmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQoYm9vbCBjaGFu
Z2VkKSB7IG1fZmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQgPSBjaGFuZ2VkOyB9Ci0KLSAgICBWZWN0
b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gZmlsdGVyQWN0aW9ucygpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyQWN0aW9uczsgfQotICAgIHZvaWQgc2V0RmlsdGVyQWN0aW9u
cyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4mIGFjdGlv
bnMpIHsgbV9maWx0ZXJBY3Rpb25zID0gYWN0aW9uczsgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIH5MYXllckNvbXBvc2l0aW5nVGhyZWFkKCk7Ci0KLXByaXZhdGU6Ci0gICAg
TGF5ZXJDb21wb3NpdGluZ1RocmVhZChMYXllclR5cGUsIExheWVyQ29tcG9zaXRpbmdUaHJlYWRD
bGllbnQqKTsKLQotICAgIHZvaWQgdXBkYXRlVGlsZUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHRp
bGUpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHN1YmxheWVyIG9yIC0xIGlm
IG5vdCBmb3VuZC4KLSAgICBpbnQgaW5kZXhPZlN1YmxheWVyKGNvbnN0IExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqKTsKLQotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVt
b3ZlRnJvbVN1cGVybGF5ZXIuCi0gICAgdm9pZCByZW1vdmVTdWJsYXllcihMYXllckNvbXBvc2l0
aW5nVGhyZWFkKik7Ci0KLSAgICBMYXllclJlbmRlcmVyKiBtX2xheWVyUmVuZGVyZXI7Ci0KLSAg
ICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiBMYXllckxp
c3Q7Ci0gICAgTGF5ZXJMaXN0IG1fc3VibGF5ZXJzOwotICAgIExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqIG1fc3VwZXJsYXllcjsKLQotICAgIC8vIFZlcnRleCBkYXRhIGZvciB0aGUgYm91bmRzIG9m
IHRoaXMgbGF5ZXIKLSAgICBWZWN0b3I8RmxvYXRQb2ludCwgND4gbV90cmFuc2Zvcm1lZEJvdW5k
czsKLSAgICBWZWN0b3I8ZmxvYXQsIDQ+IG1fd3M7Ci0gICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG1f
dGV4dHVyZUNvb3JkaW5hdGVzOyAvLyBPbmx5IHVzZWQgd2hlbiBhIDNEIGxheWVyIGlzIGNsaXBw
ZWQgYWdhaW5zdCB6ID0gMAotICAgIGZsb2F0IG1fY2VudGVyVzsKLSAgICBGbG9hdFJlY3QgbV9i
b3VuZGluZ0JveDsKLQotICAgIE93blB0cjxMYXllclJlbmRlcmVyU3VyZmFjZT4gbV9sYXllclJl
bmRlcmVyU3VyZmFjZTsKLQotICAgIFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiBtX21h
c2tMYXllcjsKLSAgICBSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gbV9yZXBsaWNhTGF5
ZXI7Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogbV9wbHVn
aW5CdWZmZXI7Ci0KLSAgICAvLyBUaGUgZ2xvYmFsIHByb3BlcnR5IHZhbHVlcywgYWZ0ZXIgY29u
Y2F0ZW5hdGlvbiB3aXRoIHBhcmVudCB2YWx1ZXMKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X2RyYXdUcmFuc2Zvcm07Ci0gICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKLQotICAgIGJvb2wgbV92
aXNpYmxlOwotICAgIGJvb2wgbV9jb21taXRTY2hlZHVsZWQ7Ci0KLSAgICBWZWN0b3I8UmVmUHRy
PExheWVyQW5pbWF0aW9uPiA+IG1fcnVubmluZ0FuaW1hdGlvbnM7Ci0gICAgVmVjdG9yPFJlZlB0
cjxMYXllckFuaW1hdGlvbj4gPiBtX3N1c3BlbmRlZEFuaW1hdGlvbnM7Ci0KLSAgICBPd25QdHI8
TGF5ZXJPdmVycmlkZT4gbV9vdmVycmlkZTsKLSAgICBMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50KiBtX2NsaWVudDsKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBib29sIG1fZmls
dGVyT3BlcmF0aW9uc0NoYW5nZWQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRl
cmVyQWN0aW9uPiA+IG1fZmlsdGVyQWN0aW9uczsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCBvYmplY3RzIG11c3QgYmUgZGVzdHJveWVkIG9uIHRoZSBjb21wb3NpdGluZyB0aHJlYWQuCi0v
LyBCdXQgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIGJlIGhlbGQgYnkg
dGhlIFdlYktpdCB0aHJlYWQuCi0vLyBTbyB3ZSBjcmVhdGUgYSBjdXN0b20gc3BlY2lhbGl6YXRp
b24gb2YgVGhyZWFkU2FmZVJlZkNvdW50ZWQgd2hpY2ggY2FsbHMgYQotLy8gZnVuY3Rpb24gdGhh
dCBlbnN1cmVzIHRoZSBkZXN0cnVjdG9yIGlzIGNhbGxlZCBvbiB0aGUgY29ycmVjdCB0aHJlYWQs
IHJhdGhlcgotLy8gdGhhbiBjYWxsaW5nIGRlbGV0ZSBkaXJlY3RseS4KLXRlbXBsYXRlPD4KLWlu
bGluZSB2b2lkIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdU
aHJlYWQ+OjpkZXJlZigpCi17Ci0gICAgaWYgKGRlcmVmQmFzZSgpKSB7Ci0gICAgICAgIC8vIERl
bGV0ZSBvbiB0aGUgY29tcG9zaXRpbmcgdGhyZWFkLgotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3VhcmRlZFBvaW50ZXJEZWxldGVyOjpkZWxldGVPblRocmVhZCgKLSAgICAgICAgICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgp
LAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCo+KHRoaXMpKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0KLSNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgJKHJldmlzaW9uIDE2MTU5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBMYXllckNv
bXBvc2l0aW5nVGhyZWFkQ2xpZW50X2gKLSNkZWZpbmUgTGF5ZXJDb21wb3NpdGluZ1RocmVhZENs
aWVudF9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLW5hbWVzcGFjZSBC
bGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBQbGF0Zm9ybSB7Ci1uYW1lc3BhY2UgR3JhcGhpY3Mgewot
Y2xhc3MgR0xFUzJQcm9ncmFtOwotfQotfQotfQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBGbG9hdFJlY3Q7Ci1jbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOwotY2xhc3MgTGF5ZXJU
ZXh0dXJlOwotCi1jbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5MYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KCkgeyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgbGF5ZXJDb21wb3NpdGluZ1RocmVhZERlc3Ryb3llZChMYXllckNvbXBvc2l0
aW5nVGhyZWFkKikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGxheWVyVmlzaWJpbGl0eUNoYW5n
ZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGJvb2wgdmlzaWJsZSkgPSAwOwotCi0gICAgdmly
dHVhbCB2b2lkIHVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCop
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYs
IGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikgPSAwOwotCi0g
ICAgLy8gT3B0aW9uYWwuIEFsbG93cyBsYXllcnMgdG8gc2VydmUgYXMgYSBtYXNrIGZvciBvdGhl
ciBsYXllcnMKLSAgICB2aXJ0dWFsIExheWVyVGV4dHVyZSogY29udGVudHNUZXh0dXJlKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqKSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBPcHRpb25hbC4gQWxs
b3cgdGhlIGxheWVyIHRvIGNvbW1pdCB0aHJlYWQgc2Vuc2l0aXZlIGNvbnRlbnQgZHVyaW5nIGEg
c3luYyBwb2ludAotICAgIHZpcnR1YWwgdm9pZCBjb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMo
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopIHsgfQotCi0gICAgLy8gVW5saWtlIHRoZSBvdGhlciBt
ZXRob2RzIGhlcmUsIHRoaXMgb25lIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBXZWJLaXQgdGhyZWFk
Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tbWl0KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlzY2FyZEZyb250VmlzaWJpbGl0eSgpIHsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllckRhdGEuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMSwyNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBMYXll
ckRhdGFfaAotI2RlZmluZSBMYXllckRhdGFfaAotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNs
dWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7Ci1jbGFzcyBQ
bHVnaW5WaWV3OwotI2lmIEVOQUJMRShWSURFTykKLWNsYXNzIE1lZGlhUGxheWVyOwotI2VuZGlm
Ci0KLWNsYXNzIExheWVyRGF0YSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBMYXllclR5cGUgeyBMYXll
ciwgVHJhbnNmb3JtTGF5ZXIsIFdlYkdMTGF5ZXIsIENhbnZhc0xheWVyLCBDdXN0b21MYXllciB9
OwotICAgIGVudW0gRmlsdGVyVHlwZSB7IExpbmVhciwgTmVhcmVzdCwgVHJpbGluZWFyLCBMYW5j
em9zIH07Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgZW51bSBDU1NGaWx0ZXJTaGFk
ZXJzIHsKLSAgICAgICAgQ1NTRmlsdGVyU2hhZGVyR3JheXNjYWxlID0gMCwKLSAgICAgICAgQ1NT
RmlsdGVyU2hhZGVyU2VwaWEsCi0gICAgICAgIENTU0ZpbHRlclNoYWRlclNhdHVyYXRlLAotICAg
ICAgICBDU1NGaWx0ZXJTaGFkZXJIdWVSb3RhdGUsCi0gICAgICAgIENTU0ZpbHRlclNoYWRlcklu
dmVydCwKLSAgICAgICAgQ1NTRmlsdGVyU2hhZGVyQnJpZ2h0bmVzcywKLSAgICAgICAgQ1NTRmls
dGVyU2hhZGVyQ29udHJhc3QsCi0gICAgICAgIENTU0ZpbHRlclNoYWRlck9wYWNpdHksCi0gICAg
ICAgIENTU0ZpbHRlclNoYWRlckJsdXJZLAotICAgICAgICBDU1NGaWx0ZXJTaGFkZXJCbHVyWCwK
LSAgICAgICAgQ1NTRmlsdGVyU2hhZGVyU2hhZG93LAotICAgICAgICBDU1NGaWx0ZXJTaGFkZXJQ
YXNzdGhyb3VnaCwKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgICAgIENTU0ZpbHRlclNo
YWRlckN1c3RvbSwKLSNlbmRpZgotICAgICAgICBOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnMKLSAg
ICB9OwotI2VuZGlmCi0KLSAgICBMYXllckRhdGEoTGF5ZXJUeXBlIHR5cGUpCi0gICAgICAgIDog
bV9sYXllclR5cGUodHlwZSkKLSAgICAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQotICAg
ICAgICAsIG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCi0gICAgICAgICwgbV9ib3JkZXJD
b2xvcigwLCAwLCAwLCAwKQotICAgICAgICAsIG1fb3BhY2l0eSgxLjApCi0gICAgICAgICwgbV9h
bmNob3JQb2ludFooMC4wKQotICAgICAgICAsIG1fYm9yZGVyV2lkdGgoMC4wKQotICAgICAgICAs
IG1fcGx1Z2luVmlldygwKQotI2lmIEVOQUJMRShWSURFTykKLSAgICAgICAgLCBtX21lZGlhUGxh
eWVyKDApCi0jZW5kaWYKLSAgICAgICAgLCBtX3N1c3BlbmRUaW1lKDApCi0gICAgICAgICwgbV9j
b250ZW50c1NjYWxlKDEuMCkKLSAgICAgICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCi0gICAgICAg
ICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQotICAgICAgICAsIG1faXNPcGFxdWUoZmFsc2UpCi0g
ICAgICAgICwgbV9wcmVzZXJ2ZXMzRChmYWxzZSkKLSAgICAgICAgLCBtX25lZWRzRGlzcGxheU9u
Qm91bmRzQ2hhbmdlKGZhbHNlKQotICAgICAgICAsIG1fbmVlZHNUZXh0dXJlKGZhbHNlKQotICAg
ICAgICAsIG1faXNGaXhlZFBvc2l0aW9uKGZhbHNlKQotICAgICAgICAsIG1faGFzRml4ZWRDb250
YWluZXIoZmFsc2UpCi0gICAgICAgICwgbV9oYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKGZhbHNl
KQotICAgICAgICAsIG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKGZhbHNlKQot
ICAgICAgICAsIG1fc2l6ZUlzU2NhbGVJbnZhcmlhbnQoZmFsc2UpCi0gICAgICAgICwgbV9jb250
ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudChmYWxzZSkKLSAgICAgICAgLCBtX2lzVmlzaWJsZSh0
cnVlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5MYXllckRhdGEoKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmNo
b3JQb2ludDsgfQotCi0gICAgZmxvYXQgYW5jaG9yUG9pbnRaKCkgY29uc3QgeyByZXR1cm4gbV9h
bmNob3JQb2ludFo7IH0KLQotICAgIENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9Ci0KLSAgICBDb2xvciBib3JkZXJDb2xvcigpIGNvbnN0
IHsgcmV0dXJuIG1fYm9yZGVyQ29sb3I7IH0KLQotICAgIGZsb2F0IGJvcmRlcldpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9ib3JkZXJXaWR0aDsgfQotCi0gICAgSW50U2l6ZSBib3VuZHMoKSBjb25z
dCB7IHJldHVybiBtX2JvdW5kczsgfQotCi0gICAgYm9vbCBzaXplSXNTY2FsZUludmFyaWFudCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUlzU2NhbGVJbnZhcmlhbnQ7IH0KLQotICAgIGJvb2wgY29u
dGVudHNSZXNvbHV0aW9uSW5kZXBlbmRlbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzUmVz
b2x1dGlvbkluZGVwZW5kZW50OyB9Ci0KLSAgICBib29sIGRvdWJsZVNpZGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9kb3VibGVTaWRlZDsgfQotCi0gICAgRmxvYXRSZWN0IGZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZTsgfQotCi0gICAgYm9vbCBtYXNrc1RvQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gbV9tYXNrc1RvQm91bmRzOyB9Ci0KLSAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1
cm4gbV9vcGFjaXR5OyB9Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgRmlsdGVyT3Bl
cmF0aW9ucyBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9Ci0jZW5kaWYKLQot
ICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX2lzT3BhcXVlOyB9Ci0KLSAgICBG
bG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotCi0gICAg
Ly8gVGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGZvciBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm0s
IHNlZSBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSgpCi0gICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9z
dWJsYXllclRyYW5zZm9ybTsgfQotCi0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KLSAgICBib29sIHByZXNl
cnZlczNEKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZXMzRDsgfQotCi0gICAgYm9vbCBuZWVk
c1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHlwZSA9PSBXZWJHTExheWVyIHx8IG1f
bGF5ZXJUeXBlID09IENhbnZhc0xheWVyIHx8IG1fbmVlZHNUZXh0dXJlOyB9Ci0KLSAgICBib29s
IGlzRml4ZWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXhlZFBvc2l0aW9uOyB9Ci0g
ICAgYm9vbCBoYXNGaXhlZENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRml4ZWRDb250
YWluZXI7IH0KLSAgICBib29sIGhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWU7IH0KLSAgICBib29sIGlzQ29udGFpbmVy
Rm9yRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1faXNDb250YWluZXJGb3JG
aXhlZFBvc2l0aW9uTGF5ZXJzOyB9Ci0gICAgYm9vbCBpc0ZpeGVkVG9Ub3AoKSBjb25zdCB7IHJl
dHVybiBtX2lzRml4ZWRUb1RvcDsgfQotICAgIGJvb2wgaXNGaXhlZFRvTGVmdCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNGaXhlZFRvTGVmdDsgfQotCi0gICAgSW50UmVjdCBmcmFtZVZpc2libGVSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpc2libGVSZWN0OyB9Ci0gICAgSW50U2l6ZSBmcmFt
ZUNvbnRlbnRzU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDb250ZW50c1NpemU7IH0KLQot
ICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpblZpZXc7
IH0KLQotICAgIEludFJlY3QgaG9sZVB1bmNoUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faG9sZVB1
bmNoUmVjdDsgfQotICAgIGJvb2wgaGFzSG9sZVB1bmNoUmVjdCgpIGNvbnN0IHsgcmV0dXJuICFt
X2hvbGVQdW5jaFJlY3QuaXNFbXB0eSgpOyB9Ci0KLSAgICBkb3VibGUgY29udGVudHNTY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY2FsZTsgfQotCi0jaWYgRU5BQkxFKFZJREVPKQot
ICAgIE1lZGlhUGxheWVyKiBtZWRpYVBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFQbGF5
ZXI7IH0KLSNlbmRpZgotCi0gICAgdm9pZCByZXBsaWNhdGUoTGF5ZXJEYXRhICp0bykgY29uc3Qg
eyAqdG8gPSAqdGhpczsgfQotCi0gICAgTGF5ZXJUeXBlIGxheWVyVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5ZXJUeXBlOyB9Ci0KLSAgICBib29sIGlzQ2FudmFzTGF5ZXIoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fbGF5ZXJUeXBlID09IENhbnZhc0xheWVyOwotICAgIH0KLQot
ICAgIGJvb2wgaXNMYXllclZpc2libGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
aXNWaXNpYmxlOwotICAgIH0KLQotICAgIGJvb2wgaW5jbHVkZVZpc2liaWxpdHkoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgaWYgKHBsdWdpblZpZXcoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgICAgICBpZiAobWVkaWFQbGF5ZXIoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKGlzQ2FudmFzTGF5ZXIo
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLXByb3RlY3RlZDoKLSAgICBMYXllclR5cGUgbV9sYXllclR5cGU7Ci0KLSAgICBJbnRT
aXplIG1fYm91bmRzOwotICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50
IG1fYW5jaG9yUG9pbnQ7Ci0gICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0gICAgQ29sb3Ig
bV9ib3JkZXJDb2xvcjsKLQotICAgIEZsb2F0UmVjdCBtX2ZyYW1lOwotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5
ZXJUcmFuc2Zvcm07Ci0KLSAgICBmbG9hdCBtX29wYWNpdHk7Ci0jaWYgRU5BQkxFKENTU19GSUxU
RVJTKQotICAgIEZpbHRlck9wZXJhdGlvbnMgbV9maWx0ZXJzOwotI2VuZGlmCi0gICAgZmxvYXQg
bV9hbmNob3JQb2ludFo7Ci0gICAgZmxvYXQgbV9ib3JkZXJXaWR0aDsKLQotICAgIFBsdWdpblZp
ZXcqIG1fcGx1Z2luVmlldzsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgTWVkaWFQbGF5ZXIqIG1f
bWVkaWFQbGF5ZXI7Ci0jZW5kaWYKLSAgICBJbnRSZWN0IG1faG9sZVB1bmNoUmVjdDsKLQotICAg
IEludFJlY3QgbV9mcmFtZVZpc2libGVSZWN0OwotICAgIEludFNpemUgbV9mcmFtZUNvbnRlbnRz
U2l6ZTsKLQotICAgIGRvdWJsZSBtX3N1c3BlbmRUaW1lOwotICAgIGRvdWJsZSBtX2NvbnRlbnRz
U2NhbGU7Ci0KLSAgICB1bnNpZ25lZCBtX2RvdWJsZVNpZGVkIDogMTsKLSAgICB1bnNpZ25lZCBt
X21hc2tzVG9Cb3VuZHMgOiAxOwotICAgIHVuc2lnbmVkIG1faXNPcGFxdWUgOiAxOwotICAgIHVu
c2lnbmVkIG1fcHJlc2VydmVzM0QgOiAxOwotICAgIHVuc2lnbmVkIG1fbmVlZHNEaXNwbGF5T25C
b3VuZHNDaGFuZ2UgOiAxOwotCi0gICAgdW5zaWduZWQgbV9uZWVkc1RleHR1cmUgOiAxOwotICAg
IHVuc2lnbmVkIG1faXNGaXhlZFBvc2l0aW9uIDogMTsKLSAgICB1bnNpZ25lZCBtX2hhc0ZpeGVk
Q29udGFpbmVyIDogMTsKLSAgICB1bnNpZ25lZCBtX2hhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUg
OiAxOwotICAgIHVuc2lnbmVkIG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzOiAx
OwotICAgIHVuc2lnbmVkIG1faXNGaXhlZFRvVG9wIDogMTsKLSAgICB1bnNpZ25lZCBtX2lzRml4
ZWRUb0xlZnQgOiAxOwotCi0gICAgdW5zaWduZWQgbV9zaXplSXNTY2FsZUludmFyaWFudCA6IDE7
Ci0gICAgdW5zaWduZWQgbV9jb250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCA6IDE7Ci0KLSAg
ICAvLyBUaGUgZm9sbG93aW5nIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBtZWRpYSAodmlkZW8pLCBw
bHVnaW4gYW5kIGNhbnZhcyBsYXllcnMuCi0gICAgdW5zaWduZWQgbV9pc1Zpc2libGUgOiAxOwot
Ci0gICAgLy8gQ0FVVElPTjogYWxsIHRoZSBkYXRhIG1lbWJlcnMgYXJlIGNvcGllZCBmcm9tIG9u
ZSBpbnN0YW5jZSB0byBhbm90aGVyCi0gICAgLy8gaS5lLiBmcm9tIG9uZSB0aHJlYWQgdG8gYW5v
dGhlciBpbiB0aGUgcmVwbGljYXRlIG1ldGhvZC4KLSAgICAvLyBCZXdhcmUgb2YgYWRkaW5nIGFu
eSBtZW1iZXIgZGF0YSBlLmcuIG9mIHR5cGUgU3RyaW5nIHdob3NlIGRlZmF1bHQKLSAgICAvLyBh
c3NpZ25tZW50IG9wZXJhdG9yIGRvZXNuJ3QgYmVoYXZlIHByb3Blcmx5IGlmIHRoZSB0d28gU3Ry
aW5nIGluc3RhbmNlcwotICAgIC8vIGFyZSBvd25lZCBieSBkaWZmZXJlbnQgdGhyZWFkcy4KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLQotI2VuZGlmIC8vIExheWVyRGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0KLSNpbmNsdWRl
ICJMYXllckZpbHRlclJlbmRlcmVyLmgiCi0KLSNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIK
LSNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCi0jaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVGV4dHVyZUNh
Y2hlQ29tcG9zaXRpbmdUaHJlYWQuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdy
YXBoaWNzLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+Ci0jaW5jbHVkZSA8
VmVjdG9yLmg+Ci0KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBTdXJmYWNlRnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgU3VyZmFjZUZ1bmN0b3IoTGF5ZXJSZW5k
ZXJlclN1cmZhY2UqIHN1cmZhY2UpCi0gICAgICAgIDogbV9zdXJmYWNlKHN1cmZhY2UpCi0gICAg
ewotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIExheWVyUmVuZGVyZXJTdXJmYWNlKiBtX3N1cmZh
Y2U7Ci19OwotCi1jbGFzcyBJbnZlcnNlU3VyZmFjZVdpZHRoIDogcHVibGljIFN1cmZhY2VGdW5j
dG9yIHsKLXB1YmxpYzoKLSAgICBJbnZlcnNlU3VyZmFjZVdpZHRoKExheWVyUmVuZGVyZXJTdXJm
YWNlKiBzdXJmYWNlKSA6IFN1cmZhY2VGdW5jdG9yKHN1cmZhY2UpIHsgfQotCi0gICAgZmxvYXQg
b3BlcmF0b3IoKSAoKSB7IHJldHVybiAxLjBmIC8gbV9zdXJmYWNlLT5zaXplKCkud2lkdGgoKTsg
fQotfTsKLQotY2xhc3MgSW52ZXJzZVN1cmZhY2VIZWlnaHQgOiBwdWJsaWMgU3VyZmFjZUZ1bmN0
b3IgewotcHVibGljOgotICAgIEludmVyc2VTdXJmYWNlSGVpZ2h0KExheWVyUmVuZGVyZXJTdXJm
YWNlKiBzdXJmYWNlKSA6IFN1cmZhY2VGdW5jdG9yKHN1cmZhY2UpIHsgfQotCi0gICAgZmxvYXQg
b3BlcmF0b3IoKSAoKSB7IHJldHVybiAxLjBmIC8gbV9zdXJmYWNlLT5zaXplKCkuaGVpZ2h0KCk7
IH0KLX07Ci0KLXN0YXRpYyBpbnQgb3BlcmF0aW9uVHlwZVRvUHJvZ3JhbUlEKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSYgdCkKLXsKLSAgICBzd2l0Y2ggKHQpIHsKLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICByZXR1cm4gTGF5ZXJEYXRh
OjpDU1NGaWx0ZXJTaGFkZXJHcmF5c2NhbGU7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNF
UElBOgotICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJTZXBpYTsKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgICAgIHJldHVybiBMYXllckRh
dGE6OkNTU0ZpbHRlclNoYWRlclNhdHVyYXRlOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpI
VUVfUk9UQVRFOgotICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJIdWVS
b3RhdGU7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICAgICAgcmV0dXJu
IExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVySW52ZXJ0OwotICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpPUEFDSVRZOgotICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJP
cGFjaXR5OwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgICAgICBy
ZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCcmlnaHRuZXNzOwotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVyQ29udHJhc3Q7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAg
ICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZOwotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NT
RmlsdGVyU2hhZGVyU2hhZG93OwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6Q1VTVE9NOgotICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0
ZXJTaGFkZXJDdXN0b207Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX0KLQotVW5pZm9ybTo6VW5p
Zm9ybShpbnQgY19sb2NhdGlvbikKLSAgICA6IG1fbG9jYXRpb24oY19sb2NhdGlvbikKLXsKLX0K
LQotdm9pZCBVbmlmb3JtMWY6OmFwcGx5KCkKLXsKLSAgICBnbFVuaWZvcm0xZihsb2NhdGlvbigp
LCBtX3ZhbCk7Ci19Ci0KLVBhc3NSZWZQdHI8VW5pZm9ybT4gVW5pZm9ybTFmOjpjcmVhdGUoaW50
IGxvY2F0aW9uLCBmbG9hdCB2YWwpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmlmb3Jt
MWYobG9jYXRpb24sIHZhbCkpOwotfQotCi1Vbmlmb3JtMWY6OlVuaWZvcm0xZihpbnQgY19sb2Nh
dGlvbiwgZmxvYXQgY192YWwpCi0gICAgOiBVbmlmb3JtKGNfbG9jYXRpb24pCi0gICAgLCBtX3Zh
bChjX3ZhbCkKLXsKLX0KLQotdm9pZCBVbmlmb3JtMWk6OmFwcGx5KCkKLXsKLSAgICBnbFVuaWZv
cm0xaShsb2NhdGlvbigpLCBtX3ZhbCk7Ci19Ci0KLVBhc3NSZWZQdHI8VW5pZm9ybT4gVW5pZm9y
bTFpOjpjcmVhdGUoaW50IGxvY2F0aW9uLCBpbnQgdmFsKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVW5pZm9ybTFpKGxvY2F0aW9uLCB2YWwpKTsKLX0KLQotVW5pZm9ybTFpOjpVbmlmb3Jt
MWkoaW50IGNfbG9jYXRpb24sIGludCBjX3ZhbCkKLSAgICA6IFVuaWZvcm0oY19sb2NhdGlvbikK
LSAgICAsIG1fdmFsKGNfdmFsKQotewotfQotCi12b2lkIFVuaWZvcm0yZjo6YXBwbHkoKQotewot
ICAgIGdsVW5pZm9ybTJmKGxvY2F0aW9uKCksIG1fdmFsWzBdLCBtX3ZhbFsxXSk7Ci19Ci0KLVBh
c3NSZWZQdHI8VW5pZm9ybT4gVW5pZm9ybTJmOjpjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2
YWwwLCBmbG9hdCB2YWwxKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVW5pZm9ybTJmKGxv
Y2F0aW9uLCB2YWwwLCB2YWwxKSk7Ci19Ci0KLVVuaWZvcm0yZjo6VW5pZm9ybTJmKGludCBjX2xv
Y2F0aW9uLCBmbG9hdCBjX3ZhbDAsIGZsb2F0IGNfdmFsMSkKLSAgICA6IFVuaWZvcm0oY19sb2Nh
dGlvbikKLXsKLSAgICBtX3ZhbFswXSA9IGNfdmFsMDsKLSAgICBtX3ZhbFsxXSA9IGNfdmFsMTsK
LX0KLQotdm9pZCBVbmlmb3JtM2Y6OmFwcGx5KCkKLXsKLSAgICBnbFVuaWZvcm0zZihsb2NhdGlv
bigpLCBtX3ZhbFswXSwgbV92YWxbMV0sIG1fdmFsWzJdKTsKLX0KLQotUGFzc1JlZlB0cjxVbmlm
b3JtPiBVbmlmb3JtM2Y6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZh
bDEsIGZsb2F0IHZhbDIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmlmb3JtM2YobG9j
YXRpb24sIHZhbDAsIHZhbDEsIHZhbDIpKTsKLX0KLQotVW5pZm9ybTNmOjpVbmlmb3JtM2YoaW50
IGNfbG9jYXRpb24sIGZsb2F0IGNfdmFsMCwgZmxvYXQgY192YWwxLCBmbG9hdCBjX3ZhbDIpCi0g
ICAgOiBVbmlmb3JtKGNfbG9jYXRpb24pCi17Ci0gICAgbV92YWxbMF0gPSBjX3ZhbDA7Ci0gICAg
bV92YWxbMV0gPSBjX3ZhbDE7Ci0gICAgbV92YWxbMl0gPSBjX3ZhbDI7Ci19Ci0KLXZvaWQgVW5p
Zm9ybTRmOjphcHBseSgpCi17Ci0gICAgZ2xVbmlmb3JtNGYobG9jYXRpb24oKSwgbV92YWxbMF0s
IG1fdmFsWzFdLCBtX3ZhbFsyXSwgbV92YWxbM10pOwotfQotCi1QYXNzUmVmUHRyPFVuaWZvcm0+
IFVuaWZvcm00Zjo6Y3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSwg
ZmxvYXQgdmFsMiwgZmxvYXQgdmFsMykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaWZv
cm00Zihsb2NhdGlvbiwgdmFsMCwgdmFsMSwgdmFsMiwgdmFsMykpOwotfQotCi1Vbmlmb3JtNGY6
OlVuaWZvcm00ZihpbnQgY19sb2NhdGlvbiwgZmxvYXQgY192YWwwLCBmbG9hdCBjX3ZhbDEsIGZs
b2F0IGNfdmFsMiwgZmxvYXQgY192YWwzKQotICAgIDogVW5pZm9ybShjX2xvY2F0aW9uKQotewot
ICAgIG1fdmFsWzBdID0gY192YWwwOwotICAgIG1fdmFsWzFdID0gY192YWwxOwotICAgIG1fdmFs
WzJdID0gY192YWwyOwotICAgIG1fdmFsWzNdID0gY192YWwzOwotfQotCi12b2lkIE1hdHJpeDRm
djo6YXBwbHkoKQotewotICAgIGdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbigpLCBtX3NpemUs
IG1fdHJhbnNwb3NlLCBtX2FycmF5KTsKLX0KLQotUGFzc1JlZlB0cjxQYXJhbWV0ZXI+IE1hdHJp
eDRmdjo6Y3JlYXRlKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIHNpemUsIEdMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdMZmxvYXQqIGFycmF5KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWF0cml4
NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KSk7Ci19Ci0KLU1hdHJpeDRmdjo6
TWF0cml4NGZ2KEdMaW50IGNsb2NhdGlvbiwgR0xzaXplaSBzaXplLCBHTGJvb2xlYW4gdHJhbnNw
b3NlLCBHTGZsb2F0KiBhcnJheSkKLSAgICA6IFVuaWZvcm0oY2xvY2F0aW9uKQotICAgICwgbV9z
aXplKHNpemUpCi0gICAgLCBtX3RyYW5zcG9zZSh0cmFuc3Bvc2UpCi0gICAgLCBtX2FycmF5KDAp
Ci17Ci0gICAgbV9hcnJheSA9IG5ldyBHTGZsb2F0W3NpemUgKiA0ICogNF07Ci0gICAgc3RkOjpt
ZW1jcHkobV9hcnJheSwgYXJyYXksIHNpemUgKiA0ICogNCAqIHNpemVvZihHTGZsb2F0KSk7Ci19
Ci0KLU1hdHJpeDRmdjo6fk1hdHJpeDRmdigpCi17Ci0gICAgZGVsZXRlW10gbV9hcnJheTsKLX0K
LQotdm9pZCBCdWZmZXI6OmFwcGx5KCkKLXsKLSAgICBnbEJpbmRCdWZmZXIobV9idWZmZXIsIG1f
b2JqZWN0KTsKLX0KLQotdm9pZCBCdWZmZXI6OnJlc3RvcmVTdGF0ZSgpCi17Ci0gICAgZ2xCaW5k
QnVmZmVyKG1fYnVmZmVyLCAwKTsKLX0KLQotUGFzc1JlZlB0cjxQYXJhbWV0ZXI+IEJ1ZmZlcjo6
Y3JlYXRlKEdMZW51bSBidWZmZXIsIEdMdWludCBvYmplY3QpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBCdWZmZXIoYnVmZmVyLCBvYmplY3QpKTsKLX0KLQotQnVmZmVyOjpCdWZmZXIoR0xl
bnVtIGJ1ZmZlciwgR0x1aW50IG9iamVjdCkKLSAgICA6IFBhcmFtZXRlcigpCi0gICAgLCBtX2J1
ZmZlcihidWZmZXIpCi0gICAgLCBtX29iamVjdChvYmplY3QpCi17Ci19Ci0KLXZvaWQgVmVydGV4
QXR0cmliZjo6YXBwbHkoKQotewotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX2xvY2F0aW9u
LCBtX3NpemUsIEdMX0ZMT0FULCBmYWxzZSwgbV9ieXRlc1BlclZlcnRleCwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4obV9vZmZzZXQpKSk7Ci0gICAgZ2xF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX2xvY2F0aW9uKTsKLX0KLQotdm9pZCBWZXJ0ZXhBdHRy
aWJmOjpyZXN0b3JlU3RhdGUoKQotewotICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG1f
bG9jYXRpb24pOwotfQotCi1QYXNzUmVmUHRyPFBhcmFtZXRlcj4gVmVydGV4QXR0cmliZjo6Y3Jl
YXRlKGludCBsb2NhdGlvbiwgaW50IHNpemUsIGludCBieXRlc1BlclZlcnRleCwgaW50IG9mZnNl
dCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZlcnRleEF0dHJpYmYobG9jYXRpb24sIHNp
emUsIGJ5dGVzUGVyVmVydGV4LCBvZmZzZXQpKTsKLX0KLQotCi1WZXJ0ZXhBdHRyaWJmOjpWZXJ0
ZXhBdHRyaWJmKGludCBsb2NhdGlvbiwgaW50IHNpemUsIGludCBieXRlc1BlclZlcnRleCwgaW50
IG9mZnNldCkKLSAgICA6IFBhcmFtZXRlcigpCi0gICAgLCBtX2xvY2F0aW9uKGxvY2F0aW9uKQot
ICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX2J5dGVzUGVyVmVydGV4KGJ5dGVzUGVyVmVydGV4
KQotICAgICwgbV9vZmZzZXQob2Zmc2V0KQotewotfQotCi1QYXNzUmVmUHRyPExheWVyRmlsdGVy
UmVuZGVyZXJBY3Rpb24+IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShpbnQgcHJv
Z3JhbUlkKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJGaWx0ZXJSZW5kZXJlckFj
dGlvbihwcm9ncmFtSWQpKTsKLX0KLQotTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6TGF5ZXJG
aWx0ZXJSZW5kZXJlckFjdGlvbihpbnQgY19wcm9ncmFtSWQpCi0gICAgOiBtX3Byb2dyYW1JZChj
X3Byb2dyYW1JZCkKLSAgICAsIG1fcHVzaFNuYXBzaG90KGZhbHNlKQotICAgICwgbV9wb3BTbmFw
c2hvdChmYWxzZSkKLSAgICAsIG1fZHJhd2luZ01vZGUoRHJhd1RyaWFuZ2xlRmFuQXJyYXlzKQot
ewotfQotCi12b2lkIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OnVzZUFjdGlvbk9uKExheWVy
RmlsdGVyUmVuZGVyZXIqIHJlbmRlcmVyKQotewotICAgIEFTU0VSVChtX3Byb2dyYW1JZCAhPSAt
MSk7Ci0gICAgaWYgKG1fcHJvZ3JhbUlkID09IC0xKSB7Ci0gICAgICAgIGdsVXNlUHJvZ3JhbShy
ZW5kZXJlci0+bV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hh
ZGVyUGFzc3Rocm91Z2hdKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBnbFVzZVByb2dy
YW0ocmVuZGVyZXItPm1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFttX3Byb2dyYW1JZF0pOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BhcmFtZXRlcnMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1fcGFyYW1ldGVyc1tpXS0+YXBwbHkoKTsKLX0KLQotdm9pZCBMYXllckZpbHRlclJlbmRl
cmVyQWN0aW9uOjpyZXN0b3JlU3RhdGUoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3BhcmFtZXRlcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcGFyYW1ldGVyc1tpXS0+cmVz
dG9yZVN0YXRlKCk7Ci19Ci0KLVBhc3NPd25QdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlcj4gTGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6Y3JlYXRlKGNvbnN0IGludCYgcG9zaXRpb25Mb2NhdGlvbiwgY29uc3Qg
aW50JiB0ZXhDb29yZExvY2F0aW9uKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJG
aWx0ZXJSZW5kZXJlcihwb3NpdGlvbkxvY2F0aW9uLCB0ZXhDb29yZExvY2F0aW9uKSk7Ci19Ci0K
LUxheWVyRmlsdGVyUmVuZGVyZXI6OkxheWVyRmlsdGVyUmVuZGVyZXIoY29uc3QgaW50JiBwb3Np
dGlvbkxvY2F0aW9uLCBjb25zdCBpbnQmIHRleENvb3JkTG9jYXRpb24pCi0gICAgOiBtX3Bvc2l0
aW9uTG9jYXRpb24ocG9zaXRpb25Mb2NhdGlvbikKLSAgICAsIG1fdGV4Q29vcmRMb2NhdGlvbih0
ZXhDb29yZExvY2F0aW9uKQotewotICAgIC8vIElmIHlvdSBldmVyIG1vdmUgdGhpcyBzdHVmZiwg
cGxlYXNlIG1ha2Ugc3VyZSB0aGF0Ci0gICAgLy8gZXZlcnl0aGluZyBpbiB0aGlzIGNvbnN0cnVj
dG9yIGlzIGNhbGxlZCBCRUZPUkUgYWN0aW9uc0Zvck9wZXJhdGlvbnMuCi0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IExheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzOyArK2kpCi0g
ICAgICAgIG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtpXSA9IDA7Ci0KLSAgICBpZiAoIShtX2Vu
YWJsZWQgPSBpbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkpKQotICAgICAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6bG9nQWx3YXlzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4s
ICJDU1MgRmlsdGVycyBhcmUgbm90IGVuYWJsZWQgZHVlIHRvIGZhaWxlZCBpbml0aWFsaXphdGlv
bi4iKTsKLX0KLQotLy8gQmluZHMgdGhlIGdpdmVuIGF0dHJpYnV0ZSBuYW1lIHRvIGEgY29tbW9u
IGxvY2F0aW9uIGFjcm9zcyBhbGwgcHJvZ3JhbXMKLS8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3Iu
IFRoaXMgYWxsb3dzIHRoZSBjb2RlIHRvIGJpbmQgdGhlIGF0dHJpYnV0ZXMgb25seSBvbmNlCi0v
LyBldmVuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gcHJvZ3JhbXMuCi0vLwotLy8gVGhpcyBpcyBh
biBleHRlbnNpb24gb2YgTGF5ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uIGFu
ZCB0aGUgbG9jYXRpb25zCi0vLyB3aWxsIG1hdGNoIHRob3NlIG9mIExheWVyUmVuZGVyZXIuIFNl
ZSBMYXllckZpbHRlclJlbmRlcmVyOjpMYXllckZpbHRlclJlbmRlcmVyKCkKLXZvaWQgTGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKGludCBsb2NhdGlvbiwgY29u
c3QgY2hhciogYXR0cmliTmFtZSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IExheWVyRGF0
YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzOyArK2kpCi0gICAgICAgIGdsQmluZEF0dHJpYkxv
Y2F0aW9uKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtpXSwgbG9jYXRpb24sIGF0dHJpYk5hbWUp
OwotfQotCi1ib29sIExheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVj
dHMoKQotewotICAgIC8vIFNlZSBhbHNvIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAot
Ci0gICAgY2hhciBzdGFuZGFyZFZlcnRleFNoYWRlclN0cmluZ1tdID0KLSAgICAgICAgImF0dHJp
YnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCi0gICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Rl
eENvb3JkOyAgIFxuIgotICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICBcbiIK
LSAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAiICBnbF9Qb3NpdGlvbiA9IGFf
cG9zaXRpb247ICBcbiIKLSAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFfdGV4Q29vcmQ7ICAgXG4i
Ci0gICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKLQotICAgIGNoYXIg
b2Zmc2V0VmVydGV4U2hhZGVyU3RyaW5nW10gPQotICAgICAgICAiYXR0cmlidXRlIHZlYzQgYV9w
b3NpdGlvbjsgICAgICAgICAgICAgIFxuIgotICAgICAgICAiYXR0cmlidXRlIHZlYzIgYV90ZXhD
b29yZDsgICAgICAgICAgICAgIFxuIgotICAgICAgICAidW5pZm9ybSBtZWRpdW1wIHZlYzIgdV9v
ZmZzZXQ7ICAgICAgICAgIFxuIgotICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAg
ICAgICAgICAgICAgIFxuIgotICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIgotICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgotICAgICAgICAiICBnbF9Qb3NpdGlvbiA9IGFfcG9zaXRpb247ICAgICAgICAg
ICAgIFxuIgotICAgICAgICAiICB2X3RleENvb3JkID0gYV90ZXhDb29yZCAtIHVfb2Zmc2V0OyAg
IFxuIgotICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IjsKLQotI2RlZmluZSBTVEFOREFSRF9GSUxURVIoeC4uLikgXAotICAgICAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7IFxuIlwKLSAgICAgICAgIlxuIlwKLSAgICAgICAgInZhcnlpbmcgbWVk
aXVtcCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAotICAgICAgICAidW5pZm9ybSBsb3dwIHNhbXBsZXIy
RCBzX3RleHR1cmU7XG4iXAotICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtc
biJcCi0jeFwKLSAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0gc2hh
ZGUodGV4dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZCkpOyB9IgotCi0jZGVmaW5lIEJMVVJf
RklMVEVSKHguLi4pIFwKLSAgICAgICAgInByZWNpc2lvbiBoaWdocCBmbG9hdDsgXG4iXAotICAg
ICAgICAiXG4iXAotICAgICAgICAidmFyeWluZyBtZWRpdW1wIHZlYzIgdl90ZXhDb29yZDtcbiJc
Ci0gICAgICAgICJ1bmlmb3JtIGxvd3Agc2FtcGxlcjJEIHNfdGV4dHVyZTtcbiJcCi0gICAgICAg
ICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYW1vdW50O1xuIlwKLSAgICAgICAgInVuaWZvcm0gaGln
aHAgZmxvYXQgdV9ibHVyU2l6ZTtcbiJcCi0gICAgICAgICJjb25zdCBmbG9hdCBwaSA9IDMuMTQx
NTkyNztcbiJcCi0jeFwKLSAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIlwKLSAgICAgICAgIntc
biJcCi0gICAgICAgICJ2ZWMzIGluY3I7XG4iXAotICAgICAgICAiaW5jci54ID0gMS4wIC8gKHNx
cnQoMi4wICogcGkpICogdV9hbW91bnQpO1xuIlwKLSAgICAgICAgImluY3IueSA9IGV4cCgtMC41
IC8gKHVfYW1vdW50ICogdV9hbW91bnQpKTtcbiJcCi0gICAgICAgICJpbmNyLnogPSBpbmNyLnkg
KiBpbmNyLnk7XG4iXAotICAgICAgICAiXG4iXAotICAgICAgICAidmVjNCBhdmcgPSB2ZWM0KDAu
MCwgMC4wLCAwLjAsIDAuMCk7XG4iXAotICAgICAgICAiZmxvYXQgY29lZmZpY2llbnRTdW0gPSAw
LjA7XG4iXAotICAgICAgICAiXG4iXAotICAgICAgICAiYXZnICs9IHRleHR1cmUyRChzX3RleHR1
cmUsIHZfdGV4Q29vcmQueHkpICogaW5jci54O1xuIlwKLSAgICAgICAgImNvZWZmaWNpZW50U3Vt
ICs9IGluY3IueDtcbiJcCi0gICAgICAgICJpbmNyLnh5ICo9IGluY3IueXo7XG4iXAotICAgICAg
ICAiXG4iXAotICAgICAgICAiZm9yIChmbG9hdCBpID0gMS4wOyBpIDw9IHVfYW1vdW50OyBpKysp
IHtcbiJcCi0gICAgICAgICIgICAgYXZnICs9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29v
cmQueHkgLSBpICogdV9ibHVyU2l6ZSAqIGJsdXJNdWx0aXBseVZlYykgKiBpbmNyLng7XG4iXAot
ICAgICAgICAiICAgIGF2ZyArPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkLnh5ICsg
aSAqIHVfYmx1clNpemUgKiBibHVyTXVsdGlwbHlWZWMpICogaW5jci54O1xuIlwKLSAgICAgICAg
IiAgICBjb2VmZmljaWVudFN1bSArPSAyLjAgKiBpbmNyLng7XG4iXAotICAgICAgICAiICAgIGlu
Y3IueHkgKj0gaW5jci55ejtcbiJcCi0gICAgICAgICJ9XG4iXAotICAgICAgICAiXG4iXAotICAg
ICAgICAiZ2xfRnJhZ0NvbG9yID0gYXZnIC8gY29lZmZpY2llbnRTdW07XG4iXAotICAgICAgICAi
fSIKLQotICAgIGNvbnN0IGNoYXIqIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0Zp
bHRlclNoYWRlcnNdOwotCi0gICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRl
ckdyYXlzY2FsZV0gPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgIGxvd3AgdmVjNCBzaGFkZShs
b3dwIHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50
ID0gMS4wIC0gdV9hbW91bnQ7Ci0gICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTI2ICsgMC43
ODc0ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNv
bG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAg
ICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiArIDAu
Mjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBj
b2xvci5iLAotICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29s
b3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgKyAw
LjkyNzggKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAg
ICAgICAgfQotICAgICk7Ci0KLSAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hh
ZGVyU2VwaWFdID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93
cCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIGZsb2F0IGFtb3VudCA9
IDEuMCAtIHVfYW1vdW50OwotICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMzkzICsgMC42MDcg
KiBhbW91bnQpICogY29sb3IuciArICgwLjc2OSAtIDAuNzY5ICogYW1vdW50KSAqIGNvbG9yLmcg
KyAoMC4xODkgLSAwLjE4OSAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICgw
LjM0OSAtIDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMxNCAqIGFtb3Vu
dCkgKiBjb2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAg
ICAgICAgICAgICAoMC4yNzIgLSAwLjI3MiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNTM0IC0g
MC41MzQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjEzMSArIDAuODY5ICogYW1vdW50KSAqIGNv
bG9yLmIsCi0gICAgICAgICAgICAgICAgY29sb3IuYSk7Ci0gICAgICAgIH0KLSAgICApOwotCi0g
ICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclNhdHVyYXRlXSA9IFNUQU5E
QVJEX0ZJTFRFUigKLSAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMjEzICsgMC43ODcgKiB1X2Ftb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAu
MDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICgwLjIx
MyAtIDAuMjEzICogdV9hbW91bnQpICogY29sb3IuciArICgwLjcxNSArIDAuMjg1ICogdV9hbW91
bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcyICogdV9hbW91bnQpICogY29sb3IuYiwKLSAg
ICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43
MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgKyAwLjkyOCAqIHVfYW1v
dW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgY29sb3IuYSk7Ci0gICAgICAgIH0KLSAg
ICApOwotCi0gICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckh1ZVJvdGF0
ZV0gPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQg
Y29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhpZ2hwIGZsb2F0IHBpID0gMy4xNDE1OTI2
NTM1ODk3OTMyMzg0NjsKLSAgICAgICAgICAgIGhpZ2hwIGZsb2F0IGMgPSBjb3ModV9hbW91bnQg
KiBwaSAvIDE4MC4wKTsKLSAgICAgICAgICAgIGhpZ2hwIGZsb2F0IHMgPSBzaW4odV9hbW91bnQg
KiBwaSAvIDE4MC4wKTsKLSAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnIgKiAoMC4yMTMg
KyBjICogMC43ODcgLSBzICogMC4yMTMpICsgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSAt
IHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyICsgcyAqIDAuOTI4KSwK
LSAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzICsgcyAqIDAuMTQz
KSArIGNvbG9yLmcgKiAoMC43MTUgKyBjICogMC4yODUgKyBzICogMC4xNDApICsgY29sb3IuYiAq
ICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMgKiAwLjI4MyksCi0gICAgICAgICAgICAgICAgY29sb3Iu
ciAqICgwLjIxMyAtIGMgKiAwLjIxMyAtIHMgKiAwLjc4NykgKyAgY29sb3IuZyAqICgwLjcxNSAt
IGMgKiAwLjcxNSArIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyICsgYyAqIDAuOTI4ICsg
cyAqIDAuMDcyKSwKLSAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAgICAgfQotICAgICk7
Ci0KLSAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVySW52ZXJ0XSA9IFNU
QU5EQVJEX0ZJTFRFUigKLSAgICAgICAgbG93cCBmbG9hdCBpbnZlcnQobG93cCBmbG9hdCBuKSB7
IHJldHVybiAoMS4wIC0gbikgKiB1X2Ftb3VudCArIG4gKiAoMS4wIC0gdV9hbW91bnQpOyB9Ci0g
ICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiB2ZWM0KGludmVydChjb2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcpLCBpbnZl
cnQoY29sb3IuYiksIGNvbG9yLmEpOwotICAgICAgICB9Ci0gICAgKTsKLQotICAgIHNoYWRlclN0
cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCcmlnaHRuZXNzXSA9IFNUQU5EQVJEX0ZJTFRF
UigKLSAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfYW1vdW50KSwgY29s
b3IuYSk7Ci0gICAgICAgIH0KLSAgICApOwotCi0gICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNT
U0ZpbHRlclNoYWRlckNvbnRyYXN0XSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgbG93cCBm
bG9hdCBjb250cmFzdChsb3dwIGZsb2F0IG4pIHsgcmV0dXJuIChuIC0gMC41KSAqIHVfYW1vdW50
ICsgMC41OyB9Ci0gICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbnRyYXN0KGNvbG9yLnIpLCBjb250cmFz
dChjb2xvci5nKSwgY29udHJhc3QoY29sb3IuYiksIGNvbG9yLmEpOwotICAgICAgICB9Ci0gICAg
KTsKLQotICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJPcGFjaXR5XSA9
IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xv
cikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciwgY29sb3IuZywg
Y29sb3IuYiwgY29sb3IuYSAqIHVfYW1vdW50KTsKLSAgICAgICAgfQotICAgICk7Ci0KLSAgICBz
aGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clhdID0gQkxVUl9GSUxURVIo
Ci0gICAgICAgIGNvbnN0IHZlYzIgIGJsdXJNdWx0aXBseVZlYyAgICAgID0gdmVjMigxLjAsIDAu
MCk7Ci0gICAgKTsKLQotICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJC
bHVyWV0gPSBCTFVSX0ZJTFRFUigKLSAgICAgICAgY29uc3QgdmVjMiAgYmx1ck11bHRpcGx5VmVj
ICAgICAgPSB2ZWMyKDAuMCwgMS4wKTsKLSAgICApOwotCi0gICAgc2hhZGVyU3Ryc1tMYXllckRh
dGE6OkNTU0ZpbHRlclNoYWRlclNoYWRvd10gPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgIHVu
aWZvcm0gbG93cCB2ZWMzIHVfY29sb3I7Ci0gICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZl
YzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb2xvci5hID4gMC41KQotICAg
ICAgICAgICAgICAgIHJldHVybiB2ZWM0KHVfY29sb3IuciwgdV9jb2xvci5nLCB1X2NvbG9yLmIs
IGNvbG9yLmEpOwotICAgICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgICAgICB9Ci0gICAgKTsK
LQotICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJQYXNzdGhyb3VnaF0g
PSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29s
b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb2xvcjsKLSAgICAgICAgfQotICAg
ICk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IExheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0
ZXJTaGFkZXJzOyBpKyspIHsKLSAgICAgICAgaWYgKGkgPT0gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJT
aGFkZXJTaGFkb3cpCi0gICAgICAgICAgICBtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbaV0gPSBM
YXllclJlbmRlcmVyOjpsb2FkU2hhZGVyUHJvZ3JhbShvZmZzZXRWZXJ0ZXhTaGFkZXJTdHJpbmcs
IHNoYWRlclN0cnNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Nzc0ZpbHRlclBy
b2dyYW1PYmplY3RbaV0gPSBMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyUHJvZ3JhbShzdGFuZGFy
ZFZlcnRleFNoYWRlclN0cmluZywgc2hhZGVyU3Ryc1tpXSk7Ci0gICAgICAgIGlmICghbV9jc3NG
aWx0ZXJQcm9ncmFtT2JqZWN0W2ldKSB7Ci0gICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6bG9nQWx3YXlzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4sICJDb3VsZCBu
b3QgbG9hZCBDU1MgRmlsdGVyIFNoYWRlciAlaSIsIGkpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gU2V0IEFUVFJJQiBsb2NhdGlvbnMgLSB0
aGVzZSB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9ncmFtcyBpbiBMYXllclJlbmRlcmVyLmNw
cAotICAgIGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbihtX3Bvc2l0aW9uTG9jYXRpb24sICJhX3Bv
c2l0aW9uIik7Ci0gICAgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKG1fdGV4Q29vcmRMb2NhdGlv
biwgImFfdGV4Q29vcmQiKTsKLQotICAgIC8vIFJlLWxpbmsgdG8gdGFrZSBlZmZlY3QKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IExheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzOyAr
K2kpCi0gICAgICAgIGdsTGlua1Byb2dyYW0obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldKTsK
LQotICAgIC8vIEdldCBVTklGT1JNIGxvY2F0aW9ucwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnM7ICsraSkKLSAgICAgICAgbV9hbW91
bnRMb2NhdGlvbltpXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY3NzRmlsdGVyUHJvZ3JhbU9i
amVjdFtpXSwgInVfYW1vdW50Iik7Ci0KLSAgICBtX2JsdXJBbW91bnRMb2NhdGlvblswXSA9IGds
R2V0VW5pZm9ybUxvY2F0aW9uKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNT
U0ZpbHRlclNoYWRlckJsdXJZXSwgInVfYmx1clNpemUiKTsKLSAgICBtX2JsdXJBbW91bnRMb2Nh
dGlvblsxXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtM
YXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJYXSwgInVfYmx1clNpemUiKTsKLQotICAgIG1f
c2hhZG93Q29sb3JMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY3NzRmlsdGVyUHJv
Z3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclNoYWRvd10sICJ1X2NvbG9yIik7
Ci0gICAgbV9vZmZzZXRMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY3NzRmlsdGVy
UHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclNoYWRvd10sICJ1X29mZnNl
dCIpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6
cGluZyhMYXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFjZSkKLXsKLSAgICBHTHVpbnQgdGV4aWQg
PSBtX3RleHR1cmUtPnBsYXRmb3JtVGV4dHVyZSgpOwotCi0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRCgKLSAgICAgICAgR0xfRlJBTUVCVUZGRVIsCi0gICAgICAgIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLAotICAgICAgICBHTF9URVhUVVJFXzJELAotICAgICAgICB0ZXhpZCwKLSAgICAgICAgMAot
ICAgICk7Ci0gICAgZ2xCaW5kVGV4dHVyZSgKLSAgICAgICAgR0xfVEVYVFVSRV8yRCwKLSAgICAg
ICAgc3VyZmFjZS0+dGV4dHVyZSgpLT5wbGF0Zm9ybVRleHR1cmUoKQotICAgICk7Ci19Ci0KLXZv
aWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cG9uZyhMYXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFj
ZSkKLXsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKAotICAgICAgICBHTF9GUkFNRUJVRkZF
UiwKLSAgICAgICAgR0xfQ09MT1JfQVRUQUNITUVOVDAsCi0gICAgICAgIEdMX1RFWFRVUkVfMkQs
Ci0gICAgICAgIHN1cmZhY2UtPnRleHR1cmUoKS0+cGxhdGZvcm1UZXh0dXJlKCksCi0gICAgICAg
IDAKLSAgICApOwotICAgIGdsQmluZFRleHR1cmUoCi0gICAgICAgIEdMX1RFWFRVUkVfMkQsCi0g
ICAgICAgIG1fdGV4dHVyZS0+cGxhdGZvcm1UZXh0dXJlKCkKLSAgICApOwotfQotCi12b2lkIExh
eWVyRmlsdGVyUmVuZGVyZXI6OnB1c2hTbmFwc2hvdChMYXllclJlbmRlcmVyU3VyZmFjZSogc3Vy
ZmFjZSwgaW50IHNvdXJjZUlkKQotewotICAgIEdMdWludCB0ZXhpZCA9IG1fc25hcHNob3RUZXh0
dXJlLT5wbGF0Zm9ybVRleHR1cmUoKTsKLQotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoCi0g
ICAgICAgIEdMX0ZSQU1FQlVGRkVSLAotICAgICAgICBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwKLSAg
ICAgICAgR0xfVEVYVFVSRV8yRCwKLSAgICAgICAgdGV4aWQsCi0gICAgICAgIDAKLSAgICApOwot
Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzb3VyY2VJZCk7Ci0gICAgZ2xDbGVh
cihHTF9DT0xPUl9CVUZGRVJfQklUKTsgLy8gdG8gdHJhbnNwYXJlbmN5Ci0KLSAgICBnbFZpZXdw
b3J0KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBzdXJmYWNlLT5zaXplKCkuaGVpZ2h0
KCkpOwotCi0gICAgZ2xVc2VQcm9ncmFtKG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXllckRh
dGE6OkNTU0ZpbHRlclNoYWRlclBhc3N0aHJvdWdoXSk7Ci0gICAgZ2xEcmF3QXJyYXlzKEdMX1RS
SUFOR0xFX0ZBTiwgMCwgNCk7Ci19Ci0KLXZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cG9wU25h
cHNob3QoKQotewotICAgIC8vIFRoZSBuYW1lIGlzIHNsaWdodGx5IG1pc2xlYWRpbmcuCi0gICAg
Ly8gVGhpcyBEUkFXUyB0aGUgcHJldmlvdXMgdGV4dHVyZSB1c2luZyB0aGUgY3VycmVudCBMYXll
ckZpbHRlclJlbmRlcmVyQWN0aW9uLCB0aGVuIHNldHMgdGhlIHRleHR1cmUKLSAgICAvLyB0byB0
aGUgc25hcHNob3QgdGV4dHVyZS4gTmV4dCB0aW1lIGdsRHJhd0FycmF5cyBpcyBjYWxsZWQsIHRo
ZSBzbmFwc2hvdCB3aWxsIGJlIGRyYXduLgotCi0gICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xF
X0ZBTiwgMCwgNCk7Ci0gICAgZ2xCaW5kVGV4dHVyZSgKLSAgICAgICAgR0xfVEVYVFVSRV8yRCwK
LSAgICAgICAgbV9zbmFwc2hvdFRleHR1cmUtPnBsYXRmb3JtVGV4dHVyZSgpCi0gICAgKTsKLX0K
LQotVmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IExheWVyRmlsdGVy
UmVuZGVyZXI6OmFjdGlvbnNGb3JPcGVyYXRpb25zKExheWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJm
YWNlLCBjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgb3BzKQotewotICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiByZXQ7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBG
aWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiA9ICpvcHNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChv
cGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6QkxVUiAmJiBz
dGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5zdGREZXZp
YXRpb24oKS52YWx1ZSgpIDwgMC4xKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aW50IHByb2dyYW1JZCA9IG9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRChvcGVyYXRpb24uZ2V0T3Bl
cmF0aW9uVHlwZSgpKTsKLSAgICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVyQWN0
aW9uOjpjcmVhdGUocHJvZ3JhbUlkKSk7Ci0KLSAgICAgICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0
T3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NB
TEU6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SFVFX1JPVEFURToKLSAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFBhcmFtZXRlcihVbmlm
b3JtMWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9uW3Byb2dyYW1JZF0KLSAgICAgICAgICAgICAg
ICAsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihv
cGVyYXRpb24pLmFtb3VudCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgICAgICByZXQubGFzdCgp
LT5hcHBlbmRQYXJhbWV0ZXIoVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltwcm9n
cmFtSWRdCi0gICAgICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAg
ICAgICAgewotICAgICAgICAgICAgLy8gQmx1ciBpcyBhIHR3by1zdGVwIHByb2Nlc3M6Ci0gICAg
ICAgICAgICAvLyAgICAgMS4gYmx1ciBYCi0gICAgICAgICAgICAvLyAgICAgMi4gYmx1ciBZCi0g
ICAgICAgICAgICAvLyBUaGlzIHdheSB3ZSBjYW4gaGF2ZSAybiB0aW1lIGluc3RlYWQgb2Ygbl4y
IHRpbWUpCi0KLSAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSBzdGF0aWNfY2FzdDxjb25zdCBC
bHVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5zdGREZXZpYXRpb24oKS52YWx1ZSgpOwot
Ci0gICAgICAgICAgICAvLyBCTFVSIFk6Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRQ
YXJhbWV0ZXIoVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltMYXllckRhdGE6OkNT
U0ZpbHRlclNoYWRlckJsdXJZXSwgYW1vdW50KSk7Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5h
cHBlbmRQYXJhbWV0ZXIoVW5pZm9ybTFmOjpjcmVhdGVXaXRoRnVuY3RvcihtX2JsdXJBbW91bnRM
b2NhdGlvblswXSwgSW52ZXJzZVN1cmZhY2VIZWlnaHQoc3VyZmFjZSkpKTsKLQotICAgICAgICAg
ICAgLy8gQkxVUiBYOgotICAgICAgICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVy
QWN0aW9uOjpjcmVhdGUoTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWCkpOwotICAgICAg
ICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1v
dW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWF0sIGFtb3VudCkpOwot
ICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRl
V2l0aEZ1bmN0b3IobV9ibHVyQW1vdW50TG9jYXRpb25bMV0sIEludmVyc2VTdXJmYWNlV2lkdGgo
c3VyZmFjZSkpKTsKLQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIFNoYWRvdyBpcyBhIGZvdXItc3RlcCBwcm9jZXNzOgotICAgICAgICAgICAgLy8g
ICAgIDEuIGNhcHR1cmUgc25hcHNob3QKLSAgICAgICAgICAgIC8vICAgICAgICB0dXJuIGludG8g
YSBzb2xpZCBvZmZzZXQgbWFzawotICAgICAgICAgICAgLy8gICAgIDIuIGJsdXIgWAotICAgICAg
ICAgICAgLy8gICAgIDMuIGJsdXIgWQotICAgICAgICAgICAgLy8gICAgIDQuIHJlcGFpbnQgb3Jp
Z2luYWwgb24gdG9wIG9mIG1hc2sKLSAgICAgICAgICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJP
cGVyYXRpb24mIGRzZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uJj4ob3BlcmF0aW9uKTsKLSAgICAgICAgICAgIHJldC5sYXN0KCktPnNldFB1c2hTbmFwc2hv
dCgpOwotICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0yZjo6
Y3JlYXRlKG1fb2Zmc2V0TG9jYXRpb24KLSAgICAgICAgICAgICAgICAsIGZsb2F0KGRzZm8ueCgp
KSAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS53aWR0aCgpKQotICAgICAgICAgICAgICAgICwgZmxv
YXQoZHNmby55KCkpIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKSkpOwotICAgICAg
ICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0zZjo6Y3JlYXRlKG1fc2hh
ZG93Q29sb3JMb2NhdGlvbgotICAgICAgICAgICAgICAgICwgZmxvYXQoZHNmby5jb2xvcigpLnJl
ZCgpKSAvIDI1NS4wZgotICAgICAgICAgICAgICAgICwgZmxvYXQoZHNmby5jb2xvcigpLmdyZWVu
KCkpIC8gMjU1LjBmCi0gICAgICAgICAgICAgICAgLCBmbG9hdChkc2ZvLmNvbG9yKCkuYmx1ZSgp
KSAvIDI1NS4wZikpOwotCi0gICAgICAgICAgICAvLyBCTFVSIFkKLSAgICAgICAgICAgIHJldC5h
cHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKExheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVyQmx1clkpKTsKLSAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFBhcmFtZXRl
cihVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9uW0xheWVyRGF0YTo6Q1NTRmlsdGVy
U2hhZGVyQmx1clldCi0gICAgICAgICAgICAgICAgLCBkc2ZvLnN0ZERldmlhdGlvbigpKSk7Ci0g
ICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0ZXIoVW5pZm9ybTFmOjpjcmVhdGVX
aXRoRnVuY3RvcihtX2JsdXJBbW91bnRMb2NhdGlvblswXSwgSW52ZXJzZVN1cmZhY2VIZWlnaHQo
c3VyZmFjZSkpKTsKLQotICAgICAgICAgICAgLy8gQkxVUiBYCi0gICAgICAgICAgICByZXQuYXBw
ZW5kKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShMYXllckRhdGE6OkNTU0ZpbHRl
clNoYWRlckJsdXJYKSk7Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0ZXIo
VW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltMYXllckRhdGE6OkNTU0ZpbHRlclNo
YWRlckJsdXJYXQotICAgICAgICAgICAgICAgICwgZHNmby5zdGREZXZpYXRpb24oKSkpOwotICAg
ICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlV2l0
aEZ1bmN0b3IobV9ibHVyQW1vdW50TG9jYXRpb25bMV0sIEludmVyc2VTdXJmYWNlV2lkdGgoc3Vy
ZmFjZSkpKTsKLQotICAgICAgICAgICAgLy8gUmVwYWludCBvcmlnaW5hbCBpbWFnZQotICAgICAg
ICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpjcmVhdGUoTGF5ZXJE
YXRhOjpDU1NGaWx0ZXJTaGFkZXJQYXNzdGhyb3VnaCkpOwotICAgICAgICAgICAgcmV0Lmxhc3Qo
KS0+c2V0UG9wU25hcHNob3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXQuc2l6ZSgpICUg
MikgLy8gV2UgbmVlZCBhbiBldmVuIG51bWJlciBvZiBhY3Rpb25zLiBTZWUgcGluZy1wb25nIG5v
dGUgaW4gYXBwbHlMYXllckZpbHRlcnMoKS4KLSAgICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRl
clJlbmRlcmVyQWN0aW9uOjpjcmVhdGUoTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJQYXNzdGhy
b3VnaCkpOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCBMYXllckZpbHRlclJlbmRlcmVy
OjphcHBseUFjdGlvbnModW5zaWduZWQmIGZibywgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5
ZXIsIFZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiBhY3Rpb25zKQot
ewotICAgIGdsQ2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKLSAgICBBU1NFUlQo
IShhY3Rpb25zLnNpemUoKSAlIDIpKTsgLy8gU2VlIHBpbmctcG9uZ2luZyBub3RlIGJlbG93Lgot
Ci0gICAgaWYgKCFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbGF5ZXIt
PmZpbHRlcnMoKS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV90ZXh0dXJl
KQotICAgICAgICBtX3RleHR1cmUgPSB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT5j
cmVhdGVUZXh0dXJlKCk7Ci0KLSAgICBib29sIHJlcXVpcmVTbmFwc2hvdCA9IGZhbHNlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhY3Rpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChhY3Rpb25zW2ldLT5zaG91bGRQdXNoU25hcHNob3QoKSkKLSAgICAgICAgICAgIHJlcXVp
cmVTbmFwc2hvdCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFtX3NuYXBzaG90VGV4dHVyZSAm
JiByZXF1aXJlU25hcHNob3QpCi0gICAgICAgIG1fc25hcHNob3RUZXh0dXJlID0gdGV4dHVyZUNh
Y2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+Y3JlYXRlVGV4dHVyZSgpOwotCi0gICAgTGF5ZXJSZW5k
ZXJlclN1cmZhY2UqIHN1cmZhY2UgPSBsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKTsKLQot
ICAgIC8vIEZyb20gdGhlIGNvZGUgaW4gTGF5ZXJSZW5kZXJlciwgd2Ugc2VlIHRoYXQgdGhlIGxh
eWVyIHdpbGwgaGF2ZSBhIHRyaXZpYWwgdHJhbnNmb3JtIHRoYXQgd2lsbAotICAgIC8vIHJlc3Vs
dCBpbiB0aGUgdHJhbnNmb3JtZWQgYm91bmRzIGJlaW5nIGEgcG9seWdvbiB3aXRoIDQgdmVydGlj
ZXMsIGkuZS4gYSBxdWFkLgotICAgIC8vIFRoZSBMYXllckZpbHRlclJlbmRlcmVyIGRlcGVuZHMg
b24gdGhlIGxheWVyIGJlaW5nIGEgcXVhZCwgc28gYXNzZXJ0IHRvIG1ha2Ugc3VyZS4KLSAgICBB
U1NFUlQobGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkuc2l6ZSgpID09IDQpOwotICAgIGlmIChs
YXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKS5zaXplKCkgIT0gNCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xfRkxP
QVQsIEdMX0ZBTFNFLCAwLCBsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKS5kYXRhKCkpOwotICAg
IGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9uKTsKLSAgICBnbFZl
cnRleEF0dHJpYlBvaW50ZXIobV90ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFM
U0UsIDAsIGxheWVyLT50ZXh0dXJlQ29vcmRpbmF0ZXMoKS5kYXRhKCkpOwotICAgIGdsRW5hYmxl
VmVydGV4QXR0cmliQXJyYXkobV90ZXhDb29yZExvY2F0aW9uKTsKLQotICAgIG1fdGV4dHVyZS0+
cHJvdGVjdChzdXJmYWNlLT50ZXh0dXJlKCktPnNpemUoKSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpBbHdheXNCYWNrZWQpOwotICAgIGlmIChyZXF1aXJlU25hcHNob3QpCi0gICAg
ICAgIG1fc25hcHNob3RUZXh0dXJlLT5wcm90ZWN0KHN1cmZhY2UtPnRleHR1cmUoKS0+c2l6ZSgp
LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkFsd2F5c0JhY2tlZCk7Ci0KLSAgICBp
ZiAoIWZibykKLSAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0KLSAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhY3Rpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8vIE5PVEUgQUJPVVQg
UElORy1QT05HSU5HCi0gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAg
IC8vIFVuZGVyIE9wZW5HTCBFUyAyLjAsIHdlIGNhbm5vdCB1c2UgdGhlIGZibyB3ZSBhcmUgd3Jp
dHRpbmcgdG8gYXMgYSB0ZXh0dXJlLCBzbyB3ZSBuZWVkIHRvIHBsYXkgcGluZy1wb25nOgotICAg
ICAgICAvLyAgMSkgRHJhdyBwYXJlbnQgc3VyZmFjZSB0byBvdXIgdGV4dHVyZSB3aXRoIGVmZmVj
dC4KLSAgICAgICAgLy8gIDIpIERyYXcgb3VyIHN1cmZhY2UgdG8gcGFyZW50IHRleHR1cmUgd2l0
aCBlZmZlY3QuCi0gICAgICAgIC8vICAzKSBSZXBlYXQuCi0gICAgICAgIC8vIEJlY2F1c2Ugd2Ug
ZXZlbnR1YWxseSBoYXZlIHRvIGVuZCBvbiB0aGUgcGFyZW50IHRleHR1cmUsIHdlIG5lZWQgYW4g
ZXZlbiBudW1iZXIgb2YgYWN0aW9ucy4KLSAgICAgICAgLy8gYWN0aW9uc0Zvck9wZXJhdGlvbnMg
dGFrZXMgY2FyZSBvZiB0aGF0LgotCi0gICAgICAgIGlmIChhY3Rpb25zW2ldLT5zaG91bGRQdXNo
U25hcHNob3QoKSkgewotICAgICAgICAgICAgUmVmUHRyPExheWVyVGV4dHVyZT4gY3VycmVudFRl
eHR1cmUgPSAoIShpICUgMikgPyBzdXJmYWNlLT50ZXh0dXJlKCkgOiBtX3RleHR1cmUpOwotICAg
ICAgICAgICAgcHVzaFNuYXBzaG90KHN1cmZhY2UsIGN1cnJlbnRUZXh0dXJlLT5wbGF0Zm9ybVRl
eHR1cmUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEoaSAlIDIpKQotICAgICAgICAgICAg
cGluZyhzdXJmYWNlKTsgLy8gU2V0IGZyYW1lYnVmZmVyIHRvIG91cnMsIGFuZCB0ZXh0dXJlIHRv
IHBhcmVudAotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb25nKHN1cmZhY2UpOyAvLyBTZXQg
dGV4dHVyZSB0byBwYXJlbnQsIGFuZCBmcmFtZWJ1ZmZlciB0byB1cwotCi0gICAgICAgIGdsQ2xl
YXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7IC8vIHRvIHRyYW5zcGFyZW5jeQotICAgICAgICBnbFZp
ZXdwb3J0KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBzdXJmYWNlLT5zaXplKCkuaGVp
Z2h0KCkpOwotCi0gICAgICAgIGFjdGlvbnNbaV0tPnVzZUFjdGlvbk9uKHRoaXMpOwotCi0gICAg
ICAgIGlmIChhY3Rpb25zW2ldLT5zaG91bGRQb3BTbmFwc2hvdCgpKQotICAgICAgICAgICAgcG9w
U25hcHNob3QoKTsKLQotICAgICAgICBzd2l0Y2ggKGFjdGlvbnNbaV0tPmRyYXdpbmdNb2RlKCkp
IHsKLSAgICAgICAgY2FzZSBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpEcmF3VHJpYW5nbGVG
YW5BcnJheXM6Ci0gICAgICAgICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExheWVyRmlsdGVyUmVuZGVyZXJB
Y3Rpb246OkRyYXdUcmlhbmdsZUVsZW1lbnRzVVNob3J0MDoKLSAgICAgICAgICAgIGdsRHJhd0Vs
ZW1lbnRzKEdMX1RSSUFOR0xFUywgYWN0aW9uc1tpXS0+ZHJhd2luZ01vZGVQYXJhbWV0ZXIoKSwg
R0xfVU5TSUdORURfU0hPUlQsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KDApKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uOjpOdW1iZXJPZkRyYXdpbmdNb2RlczoKLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBhY3Rpb25zW2ldLT5yZXN0b3JlU3RhdGUoKTsKLQotICAgICAgICBnbFZlcnRleEF0dHJp
YlBvaW50ZXIobV9wb3NpdGlvbkxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIGxh
eWVyLT50cmFuc2Zvcm1lZEJvdW5kcygpLmRhdGEoKSk7Ci0gICAgICAgIGdsRW5hYmxlVmVydGV4
QXR0cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9uKTsKLSAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQ
b2ludGVyKG1fdGV4Q29vcmRMb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBsYXll
ci0+dGV4dHVyZUNvb3JkaW5hdGVzKCkuZGF0YSgpKTsKLSAgICAgICAgZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShtX3RleENvb3JkTG9jYXRpb24pOwotICAgIH0KLQotICAgIG1fdGV4dHVyZS0+
dW5wcm90ZWN0KCk7Ci0gICAgaWYgKHJlcXVpcmVTbmFwc2hvdCkKLSAgICAgICAgbV9zbmFwc2hv
dFRleHR1cmUtPnVucHJvdGVjdCgpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
MCk7Ci0KLSAgICBnbENsZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgJiYgVVNFKENTU19GSUxURVJTKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJl
bmRlcmVyLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0K
LSNpZm5kZWYgTGF5ZXJGaWx0ZXJSZW5kZXJlcl9oCi0jZGVmaW5lIExheWVyRmlsdGVyUmVuZGVy
ZXJfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5ZXJEYXRhLmgiCi0j
aW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMyQ29udGV4dC5oPgotI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUludFJlY3RSZWdpb24uaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFk
OwotY2xhc3MgTGF5ZXJGaWx0ZXJSZW5kZXJlcjsKLWNsYXNzIExheWVyRmlsdGVyUmVuZGVyZXJB
Y3Rpb247Ci1jbGFzcyBMYXllclJlbmRlcmVyU3VyZmFjZTsKLQotY2xhc3MgUGFyYW1ldGVyIDog
cHVibGljIFJlZkNvdW50ZWQ8UGFyYW1ldGVyPiB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UGFyYW1ldGVyKTsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlc3RvcmVTdGF0ZSgpIHsgfQotICAgIHZpcnR1YWwgflBhcmFtZXRlcigp
IHsgfQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFBhcmFtZXRlcigpIHsgfQotfTsKLQotY2xh
c3MgVW5pZm9ybSA6IHB1YmxpYyBQYXJhbWV0ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFVuaWZvcm0pOwotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpID0gMDsKLSAgICB2
aXJ0dWFsIH5Vbmlmb3JtKCkgeyB9Ci0KLXByb3RlY3RlZDoKLSAgICBVbmlmb3JtKGludCBsb2Nh
dGlvbik7Ci0gICAgY29uc3QgaW50JiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRp
b247IH0KLQotcHJpdmF0ZToKLSAgICBpbnQgbV9sb2NhdGlvbjsKLX07Ci0KLWNsYXNzIFVuaWZv
cm0xZiA6IHB1YmxpYyBVbmlmb3JtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxV
bmlmb3JtPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwpOwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlmb3JtPiBjcmVhdGVX
aXRoRnVuY3RvcihpbnQgbG9jYXRpb24sIEZ1bmN0b3IpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgVW5p
Zm9ybTFmKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eSgpOwotCi0gICAgZmxvYXQgbV92YWw7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgotY2xhc3MgVW5pZm9ybTFmV2l0aEZ1bmN0b3IgOiBwdWJsaWMgVW5pZm9ybTFmIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlmb3JtPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBG
dW5jdG9yIGZ1bmN0b3IpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaWZv
cm0xZldpdGhGdW5jdG9yKGxvY2F0aW9uLCBmdW5jdG9yKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgVW5pZm9ybTFmV2l0aEZ1bmN0b3IoaW50IGxvY2F0aW9uLCBGdW5jdG9yIGZ1bmN0b3Ip
Ci0gICAgICAgIDogVW5pZm9ybTFmKGxvY2F0aW9uLCAwKQotICAgICAgICAsIG1fZnVuY3Rvcihm
dW5jdG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKQotICAgIHsK
LSAgICAgICAgbV92YWwgPSBtX2Z1bmN0b3IoKTsKLSAgICAgICAgVW5pZm9ybTFmOjphcHBseSgp
OwotICAgIH0KLQotICAgIEZ1bmN0b3IgbV9mdW5jdG9yOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KLWlubGluZSBQYXNzUmVmUHRyPFVuaWZvcm0+IFVuaWZvcm0xZjo6Y3JlYXRl
V2l0aEZ1bmN0b3IoaW50IGxvY2F0aW9uLCBGdW5jdG9yIGZ1bmN0b3IpCi17Ci0gICAgcmV0dXJu
IFVuaWZvcm0xZldpdGhGdW5jdG9yPEZ1bmN0b3I+OjpjcmVhdGUobG9jYXRpb24sIGZ1bmN0b3Ip
OwotfQotCi1jbGFzcyBVbmlmb3JtMWkgOiBwdWJsaWMgVW5pZm9ybSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8VW5pZm9ybT4gY3JlYXRlKGludCBsb2NhdGlvbiwgaW50IHZhbCk7
Ci0KLXByb3RlY3RlZDoKLSAgICBVbmlmb3JtMWkoaW50IGxvY2F0aW9uLCBpbnQgdmFsKTsKLQot
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKLSAgICBpbnQgbV92YWw7Ci19Owot
Ci1jbGFzcyBVbmlmb3JtMmYgOiBwdWJsaWMgVW5pZm9ybSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8VW5pZm9ybT4gY3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxv
YXQgdmFsMSk7Ci0KLXByb3RlY3RlZDoKLSAgICBVbmlmb3JtMmYoaW50IGxvY2F0aW9uLCBmbG9h
dCB2YWwwLCBmbG9hdCB2YWwxKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
KTsKLSAgICBmbG9hdCBtX3ZhbFsyXTsKLX07Ci0KLWNsYXNzIFVuaWZvcm0zZiA6IHB1YmxpYyBV
bmlmb3JtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlmb3JtPiBjcmVhdGUo
aW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwxLCBmbG9hdCB2YWwyKTsKLQotcHJv
dGVjdGVkOgotICAgIFVuaWZvcm0zZihpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZh
bDEsIGZsb2F0IHZhbDIpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOwot
ICAgIGZsb2F0IG1fdmFsWzNdOwotfTsKLQotY2xhc3MgVW5pZm9ybTRmIDogcHVibGljIFVuaWZv
cm0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm0+IGNyZWF0ZShpbnQg
bG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIsIGZsb2F0IHZhbDMp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgVW5pZm9ybTRmKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwg
ZmxvYXQgdmFsMSwgZmxvYXQgdmFsMiwgZmxvYXQgdmFsMyk7Ci0KLXByaXZhdGU6Ci0gICAgdmly
dHVhbCB2b2lkIGFwcGx5KCk7Ci0gICAgZmxvYXQgbV92YWxbNF07Ci19OwotCi1jbGFzcyBNYXRy
aXg0ZnYgOiBwdWJsaWMgVW5pZm9ybSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
UGFyYW1ldGVyPiBjcmVhdGUoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWksIEdMYm9vbGVhbiB0cmFu
c3Bvc2UsIEdMZmxvYXQqIGFycmF5KTsKLQotcHJvdGVjdGVkOgotICAgIE1hdHJpeDRmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBsZW5ndGgsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEdMZmxvYXQq
IGFycmF5KTsKLSAgICB+TWF0cml4NGZ2KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lk
IGFwcGx5KCk7Ci0gICAgR0xpbnQgbV9sb2NhdGlvbjsKLSAgICBHTHNpemVpIG1fc2l6ZTsKLSAg
ICBHTGJvb2xlYW4gbV90cmFuc3Bvc2U7Ci0gICAgR0xmbG9hdCogbV9hcnJheTsKLX07Ci0KLWNs
YXNzIEJ1ZmZlciA6IHB1YmxpYyBQYXJhbWV0ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFBhcmFtZXRlcj4gY3JlYXRlKEdMZW51bSBidWZmZXIsIEdMdWludCBpbmRleCk7Ci0K
LXByb3RlY3RlZDoKLSAgICBCdWZmZXIoR0xlbnVtIGJ1ZmZlciwgR0x1aW50IGluZGV4KTsKLQot
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVz
dG9yZVN0YXRlKCk7Ci0gICAgR0xlbnVtIG1fYnVmZmVyOwotICAgIEdMdWludCBtX29iamVjdDsK
LX07Ci0KLWNsYXNzIFZlcnRleEF0dHJpYmYgOiBwdWJsaWMgUGFyYW1ldGVyIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYXJhbWV0ZXI+IGNyZWF0ZShpbnQgbG9jYXRpb24sIGlu
dCBzaXplLCBpbnQgYnl0ZXNQZXJWZXJ0ZXgsIGludCBvZmZzZXQpOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgVmVydGV4QXR0cmliZihpbnQgbG9jYXRpb24sIGludCBzaXplLCBpbnQgYnl0ZXNQZXJWZXJ0
ZXgsIGludCBvZmZzZXQpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOwot
ICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlU3RhdGUoKTsKLSAgICBpbnQgbV9sb2NhdGlvbjsKLSAg
ICBpbnQgbV9zaXplOwotICAgIGludCBtX2J5dGVzUGVyVmVydGV4OwotICAgIGludCBtX29mZnNl
dDsKLX07Ci0KLWNsYXNzIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24gOiBwdWJsaWMgUmVmQ291
bnRlZDxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gY3JlYXRlKGludCBwcm9ncmFtSWQp
OwotICAgICAgICAvLyBBIHZlY3RvciBvZiBhY3Rpb25zIG11c3QgaGF2ZSBhbiBldmVuIGNvdW50
LCBzbyBpZiB5b3UgaGF2ZSBhbiBvZGQgY291bnQsIGFkZCBhIHBhc3N0aHJvdWdoIGV2ZW50IGF0
IHRoZSBlbmQuCi0gICAgICAgIC8vIFNlZSB0aGUgcGluZy1wb25nIG5vdGUgaW4gTGF5ZXJGaWx0
ZXJSZW5kZXJlcjo6YXBwbHlBY3Rpb25zLgotCi0gICAgYm9vbCBzaG91bGRQdXNoU25hcHNob3Qo
KSBjb25zdCB7IHJldHVybiBtX3B1c2hTbmFwc2hvdDsgfQotICAgIHZvaWQgc2V0UHVzaFNuYXBz
aG90KCkgeyBtX3B1c2hTbmFwc2hvdCA9IHRydWU7IH0KLQotICAgIGJvb2wgc2hvdWxkUG9wU25h
cHNob3QoKSBjb25zdCB7IHJldHVybiBtX3BvcFNuYXBzaG90OyB9Ci0gICAgdm9pZCBzZXRQb3BT
bmFwc2hvdCgpIHsgbV9wb3BTbmFwc2hvdCA9IHRydWU7IH0KLQotICAgIHZvaWQgYXBwZW5kUGFy
YW1ldGVyKGNvbnN0IFJlZlB0cjxQYXJhbWV0ZXI+JiB1bmlmb3JtKSB7IG1fcGFyYW1ldGVycy5h
cHBlbmQodW5pZm9ybSk7IH0KLSAgICB2b2lkIHVzZUFjdGlvbk9uKExheWVyRmlsdGVyUmVuZGVy
ZXIqKTsKLSAgICB2b2lkIHJlc3RvcmVTdGF0ZSgpOwotCi0gICAgZW51bSBEcmF3aW5nTW9kZSB7
Ci0gICAgICAgIERyYXdUcmlhbmdsZUZhbkFycmF5cyA9IDAsCi0gICAgICAgIERyYXdUcmlhbmds
ZUVsZW1lbnRzVVNob3J0MCwKLSAgICAgICAgTnVtYmVyT2ZEcmF3aW5nTW9kZXMKLSAgICB9Owot
Ci0gICAgRHJhd2luZ01vZGUgZHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdN
b2RlOyB9Ci0gICAgdm9pZCBzZXREcmF3aW5nTW9kZShjb25zdCBEcmF3aW5nTW9kZSYgbW9kZSkg
eyBtX2RyYXdpbmdNb2RlID0gbW9kZTsgfQotCi0gICAgaW50IGRyYXdpbmdNb2RlUGFyYW1ldGVy
KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nTW9kZVBhcmFtZXRlcjsgfQotICAgIHZvaWQgc2V0
RHJhd2luZ01vZGVQYXJhbWV0ZXIoaW50IHApIHsgbV9kcmF3aW5nTW9kZVBhcmFtZXRlciA9IHA7
IH0KLQotCi1wcm90ZWN0ZWQ6Ci0gICAgaW50IG1fcHJvZ3JhbUlkOwotICAgIGJvb2wgbV9wdXNo
U25hcHNob3Q7Ci0gICAgYm9vbCBtX3BvcFNuYXBzaG90OwotCi0gICAgVmVjdG9yPFJlZlB0cjxQ
YXJhbWV0ZXI+ID4gbV9wYXJhbWV0ZXJzOwotCi0gICAgRHJhd2luZ01vZGUgbV9kcmF3aW5nTW9k
ZTsKLSAgICBpbnQgbV9kcmF3aW5nTW9kZVBhcmFtZXRlcjsKLQotcHJpdmF0ZToKLSAgICBMYXll
ckZpbHRlclJlbmRlcmVyQWN0aW9uKGludCBwcm9ncmFtSWQpOwotfTsKLQotY2xhc3MgTGF5ZXJG
aWx0ZXJSZW5kZXJlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJGaWx0ZXJSZW5k
ZXJlcik7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxMYXllckZpbHRlclJlbmRl
cmVyPiBjcmVhdGUoY29uc3QgaW50JiBwb3NpdGlvbkxvY2F0aW9uLCBjb25zdCBpbnQmIHRleENv
b3JkTG9jYXRpb24pOwotICAgIHZvaWQgYXBwbHlBY3Rpb25zKHVuc2lnbmVkJiBmYm8sIExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqLCBWZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rp
b24+ID4pOwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiBh
Y3Rpb25zRm9yT3BlcmF0aW9ucyhMYXllclJlbmRlcmVyU3VyZmFjZSosIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+Jik7Ci0KLSAgICAvLyBJZiBpbml0aWFsaXphdGlvbiBm
YWlscywgb3IgZGlzYWJsZSgpIGlzIGNhbGxlZCwgdGhpcyBpcyBmYWxzZS4KLSAgICBib29sIGlz
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQotICAgIHZvaWQgZGlzYWJsZSgp
IHsgbV9lbmFibGVkID0gZmFsc2U7IH0KLQotcHJpdmF0ZToKLSAgICBMYXllckZpbHRlclJlbmRl
cmVyKGNvbnN0IGludCYgcG9zaXRpb25Mb2NhdGlvbiwgY29uc3QgaW50JiB0ZXhDb29yZExvY2F0
aW9uKTsKLSAgICB2b2lkIGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbihpbnQgbG9jYXRpb24sIGNv
bnN0IGNoYXIqIGF0dHJpYk5hbWUpOwotICAgIGJvb2wgaW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0
cygpOwotCi0gICAgLy8gU2VlIG5vdGUgYWJvdXQgcGluZy1wb25naW5nIGluIGFwcGx5QWN0aW9u
cygpCi0gICAgdm9pZCBwaW5nKExheWVyUmVuZGVyZXJTdXJmYWNlKik7Ci0gICAgdm9pZCBwb25n
KExheWVyUmVuZGVyZXJTdXJmYWNlKik7Ci0KLSAgICAvLyBUaGlzIGlzIGZvciBzaGFkb3dzLCB3
aGVyZSB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHNoYWRvdywgYW5kIHRoZW4gcmVwYWludCB0aGUgb3Jp
Z2luYWwgaW1hZ2UKLSAgICAvLyBvbiB0b3Agb2YgdGhlIHNoYWRvdy4KLSAgICB2b2lkIHB1c2hT
bmFwc2hvdChMYXllclJlbmRlcmVyU3VyZmFjZSosIGludCBzb3VyY2VJZCk7Ci0gICAgdm9pZCBw
b3BTbmFwc2hvdCgpOwotCi0gICAgYm9vbCBtX2VuYWJsZWQ7Ci0KLSAgICAvLyBFU1NMIGF0dHJp
YnV0ZXMgc2hhcmVkIHdpdGggTGF5ZXJSZW5kZXJlciAtIHNlZSBjb25zdHJ1Y3RvcjoKLSAgICBj
b25zdCBpbnQgbV9wb3NpdGlvbkxvY2F0aW9uOwotICAgIGNvbnN0IGludCBtX3RleENvb3JkTG9j
YXRpb247Ci0KLSAgICAvLyBFU1NMIHByb2dyYW0gb2JqZWN0IElEczoKLSAgICB1bnNpZ25lZCBt
X2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRl
cnNdOwotCi0gICAgLy8gRVNTTCB1bmlmb3JtIGxvY2F0aW9uczoKLSAgICBpbnQgbV9hbW91bnRM
b2NhdGlvbltMYXllckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyc107Ci0gICAgaW50IG1f
Ymx1ckFtb3VudExvY2F0aW9uWzJdOyAvLyAwID0gWSwgMSA9IFgKLSAgICBpbnQgbV9zaGFkb3dD
b2xvckxvY2F0aW9uOwotICAgIGludCBtX29mZnNldExvY2F0aW9uOwotCi0gICAgLy8gVGV4dHVy
ZXMgZm9yIHBsYXlpbmcgcGluZy1wb25nIC0gc2VlIG5vdGUgaW4gYXBwbHlBY3Rpb25zKCkKLSAg
ICBSZWZQdHI8TGF5ZXJUZXh0dXJlPiBtX3RleHR1cmU7Ci0gICAgUmVmUHRyPExheWVyVGV4dHVy
ZT4gbV9zbmFwc2hvdFRleHR1cmU7Ci0KLSAgICBmcmllbmQgY2xhc3MgTGF5ZXJGaWx0ZXJSZW5k
ZXJlckFjdGlvbjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgJiYgRU5BQkxFKENTU19GSUxURVJTKQotCi0jZW5kaWYgLy8gTGF5ZXJGaWx0ZXJSZW5k
ZXJlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyTWVzc2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJNZXNzYWdlLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJNZXNzYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIExheWVyTWVzc2FnZV9oCi0jZGVmaW5lIExheWVyTWVz
c2FnZV9oCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1FeGVjdXRhYmxlTWVzc2FnZS5o
PgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU1lc3NhZ2UuaD4KLSNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1NZXNzYWdlQ2xpZW50Lmg+Ci0KLXR5cGVkZWYgQmxhY2tCZXJyeTo6UGxh
dGZvcm06Ok1lc3NhZ2UgUGxhdGZvcm1NZXNzYWdlOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWlubGluZSBib29sIGlzQ29tcG9zaXRpbmdUaHJlYWQoKQotewotICAgIHJldHVybiBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRocmVhZE1lc3NhZ2VDbGllbnQoKS0+aXNDdXJy
ZW50VGhyZWFkKCk7Ci19Ci0KLWlubGluZSBwdGhyZWFkX3QgY29tcG9zaXRpbmdUaHJlYWQoKQot
ewotICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRocmVhZE1l
c3NhZ2VDbGllbnQoKS0+dGhyZWFkSWRlbnRpZmllcigpOwotfQotCi1pbmxpbmUgYm9vbCBpc1dl
YktpdFRocmVhZCgpCi17Ci0gICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjp3ZWJLaXRU
aHJlYWRNZXNzYWdlQ2xpZW50KCktPmlzQ3VycmVudFRocmVhZCgpOwotfQotCi1pbmxpbmUgcHRo
cmVhZF90IHdlYktpdFRocmVhZCgpCi17Ci0gICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3Jt
Ojp3ZWJLaXRUaHJlYWRNZXNzYWdlQ2xpZW50KCktPnRocmVhZElkZW50aWZpZXIoKTsKLX0KLQot
aW5saW5lIHZvaWQgZGlzcGF0Y2hDb21wb3NpdGluZ01lc3NhZ2UoUGxhdGZvcm1NZXNzYWdlKiBt
c2cpCi17Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNz
YWdlQ2xpZW50KCktPmRpc3BhdGNoTWVzc2FnZShtc2cpOwotfQotCi1pbmxpbmUgdm9pZCBkaXNw
YXRjaFN5bmNDb21wb3NpdGluZ01lc3NhZ2UoUGxhdGZvcm1NZXNzYWdlKiBtc2cpCi17Ci0gICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xpZW50KCkt
PmRpc3BhdGNoU3luY01lc3NhZ2UobXNnKTsKLX0KLQotZW51bSBQbGF0Zm9ybU1lc3NhZ2VQcmlv
cml0eSB7IFBsYXRmb3JtTWVzc2FnZVByaW9yaXR5TG93ID0gLTEsIFBsYXRmb3JtTWVzc2FnZVBy
aW9yaXR5Tm9ybWFsID0gMCwgUGxhdGZvcm1NZXNzYWdlUHJpb3JpdHlIaWdoID0gMSB9OwotCi1p
bmxpbmUgdm9pZCBkaXNwYXRjaFdlYktpdE1lc3NhZ2UoUGxhdGZvcm1NZXNzYWdlKiBtc2csIFBs
YXRmb3JtTWVzc2FnZVByaW9yaXR5IHByaW9yaXR5ID0gUGxhdGZvcm1NZXNzYWdlUHJpb3JpdHlO
b3JtYWwpCi17Ci0gICAgaWYgKHByaW9yaXR5ICE9IFBsYXRmb3JtTWVzc2FnZVByaW9yaXR5Tm9y
bWFsKQotICAgICAgICBtc2ctPnNldFByaW9yaXR5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjp3ZWJL
aXRUaHJlYWRNZXNzYWdlQ2xpZW50KCktPnRocmVhZFByaW9yaXR5KCkgKyBwcmlvcml0eSk7Ci0g
ICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OndlYktpdFRocmVhZE1lc3NhZ2VDbGllbnQoKS0+ZGlz
cGF0Y2hNZXNzYWdlKG1zZyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIExheWVyTWVzc2FnZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAJKHJldmlz
aW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJSZW5kZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIyNyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlci5o
IgotCi0jaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgotI2luY2x1ZGUgIkxheWVy
RmlsdGVyUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2xpZW50LmgiCi0jaW5j
bHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuaCIKLQotI2luY2x1ZGUgPEJsYWNr
QmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9n
Lmg+Ci0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNk
ZWZpbmUgREVCVUdfTEFZRVJfQU5JTUFUSU9OUyAwIC8vIFNob3cgcnVubmluZyBhbmltYXRpb25z
IGFzIGdyZWVuLgotI2RlZmluZSBERUJVR19DTElQUElORyAwCi0KLXVzaW5nIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJDb250ZXh0OwotdXNpbmcgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW07Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZm5kZWYgTkRFQlVHCi0jZGVmaW5lIGNoZWNrR0xFcnJv
cigpIFwKLXsgXAotICAgIGlmIChHTGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCkpIFwKLSAgICAg
ICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
TG9nTGV2ZWxDcml0aWNhbCwgIiVzOiVkIEdMIEVycm9yOiAweCV4ICIsIF9fRklMRV9fLCBfX0xJ
TkVfXywgZXJyb3IpOyBcCi19Ci0jZWxzZQotI2RlZmluZSBjaGVja0dMRXJyb3IoKQotI2VuZGlm
Ci0KLUdMdWludCBMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyKEdMZW51bSB0eXBlLCBjb25zdCBj
aGFyKiBzaGFkZXJTb3VyY2UpCi17Ci0gICAgR0x1aW50IHNoYWRlciA9IGdsQ3JlYXRlU2hhZGVy
KHR5cGUpOwotICAgIGlmICghc2hhZGVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBnbFNoYWRl
clNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2UsIDApOwotICAgIGdsQ29tcGlsZVNoYWRl
cihzaGFkZXIpOwotICAgIEdMaW50IGNvbXBpbGVkOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVy
LCBHTF9DT01QSUxFX1NUQVRVUywgJmNvbXBpbGVkKTsKLSAgICBpZiAoIWNvbXBpbGVkKSB7Ci0g
ICAgICAgIGNoYXIgaW5mb0xvZ1syMDQ4XTsKLSAgICAgICAgR0xzaXplaSBsZW5ndGg7Ci0gICAg
ICAgIGdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIDIwNDgsICZsZW5ndGgsIGluZm9Mb2cpOwot
ICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nQWx3YXlzKEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpMb2dMZXZlbENyaXRpY2FsLCAiRmFpbGVkIHRvIGNvbXBpbGUgc2hhZGVyOlxuJXNcbmxv
ZzogJXMiLCBzaGFkZXJTb3VyY2UsIGluZm9Mb2cpOwotICAgICAgICBnbERlbGV0ZVNoYWRlcihz
aGFkZXIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHNoYWRlcjsKLX0K
LQotR0x1aW50IExheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZl
cnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi17Ci0g
ICAgR0x1aW50IHZlcnRleFNoYWRlcjsKLSAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXI7Ci0gICAg
R0x1aW50IHByb2dyYW1PYmplY3Q7Ci0gICAgR0xpbnQgbGlua2VkOwotICAgIHZlcnRleFNoYWRl
ciA9IGxvYWRTaGFkZXIoR0xfVkVSVEVYX1NIQURFUiwgdmVydGV4U2hhZGVyU291cmNlKTsKLSAg
ICBpZiAoIXZlcnRleFNoYWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZnJhZ21lbnRTaGFk
ZXIgPSBsb2FkU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUiwgZnJhZ21lbnRTaGFkZXJTb3VyY2Up
OwotICAgIGlmICghZnJhZ21lbnRTaGFkZXIpIHsKLSAgICAgICAgZ2xEZWxldGVTaGFkZXIodmVy
dGV4U2hhZGVyKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHByb2dyYW1PYmplY3Qg
PSBnbENyZWF0ZVByb2dyYW0oKTsKLSAgICBpZiAocHJvZ3JhbU9iamVjdCkgewotICAgICAgICBn
bEF0dGFjaFNoYWRlcihwcm9ncmFtT2JqZWN0LCB2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBnbEF0
dGFjaFNoYWRlcihwcm9ncmFtT2JqZWN0LCBmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIGdsTGlu
a1Byb2dyYW0ocHJvZ3JhbU9iamVjdCk7Ci0gICAgICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dyYW1P
YmplY3QsIEdMX0xJTktfU1RBVFVTLCAmbGlua2VkKTsKLSAgICAgICAgaWYgKCFsaW5rZWQpIHsK
LSAgICAgICAgICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtT2JqZWN0KTsKLSAgICAgICAgICAg
IHByb2dyYW1PYmplY3QgPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIGdsRGVsZXRlU2hhZGVy
KHZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotICAg
IHJldHVybiBwcm9ncmFtT2JqZWN0OwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBMYXllclJl
bmRlcmVyOjpvcnRob01hdHJpeChmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9t
LCBmbG9hdCB0b3AsIGZsb2F0IG5lYXJaLCBmbG9hdCBmYXJaKQotewotICAgIGZsb2F0IGRlbHRh
WCA9IHJpZ2h0IC0gbGVmdDsKLSAgICBmbG9hdCBkZWx0YVkgPSB0b3AgLSBib3R0b207Ci0gICAg
ZmxvYXQgZGVsdGFaID0gZmFyWiAtIG5lYXJaOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9y
dGhvOwotICAgIGlmICghZGVsdGFYIHx8ICFkZWx0YVkgfHwgIWRlbHRhWikKLSAgICAgICAgcmV0
dXJuIG9ydGhvOwotICAgIG9ydGhvLnNldE0xMSgyLjBmIC8gZGVsdGFYKTsKLSAgICBvcnRoby5z
ZXRNNDEoLShyaWdodCArIGxlZnQpIC8gZGVsdGFYKTsKLSAgICBvcnRoby5zZXRNMjIoMi4wZiAv
IGRlbHRhWSk7Ci0gICAgb3J0aG8uc2V0TTQyKC0odG9wICsgYm90dG9tKSAvIGRlbHRhWSk7Ci0g
ICAgb3J0aG8uc2V0TTMzKC0yLjBmIC8gZGVsdGFaKTsKLSAgICBvcnRoby5zZXRNNDMoLShuZWFy
WiArIGZhclopIC8gZGVsdGFaKTsKLSAgICByZXR1cm4gb3J0aG87Ci19Ci0KLXN0YXRpYyBWZWN0
b3I8TGF5ZXJDb21wb3NpdGluZ1RocmVhZCo+IHJhd1B0clZlY3RvckZyb21SZWZQdHJWZWN0b3Io
Y29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiA+JiBzdWJsYXllcnMp
Ci17Ci0gICAgVmVjdG9yPExheWVyQ29tcG9zaXRpbmdUaHJlYWQqPiBzdWJsYXllckxpc3Q7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCi0gICAgICAg
IHN1YmxheWVyTGlzdC5hcHBlbmQoc3VibGF5ZXJzW2ldLmdldCgpKTsKLQotICAgIHJldHVybiBz
dWJsYXllckxpc3Q7Ci19Ci0KLVBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlcj4gTGF5ZXJSZW5kZXJl
cjo6Y3JlYXRlKExheWVyUmVuZGVyZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IExheWVyUmVuZGVyZXIoY2xpZW50KSk7Ci19Ci0KLUxheWVyUmVuZGVyZXI6Okxh
eWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNsaWVudCogY2xpZW50KQotICAgIDogbV9jbGllbnQo
Y2xpZW50KQotICAgICwgbV9zY2FsZSgxLjApCi0gICAgLCBtX2FuaW1hdGlvblRpbWUoLW51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCi0gICAgLCBtX2ZibygwKQotICAgICwgbV9j
dXJyZW50TGF5ZXJSZW5kZXJlclN1cmZhY2UoMCkKLSAgICAsIG1faXNSb2J1c3RuZXNzU3VwcG9y
dGVkKGZhbHNlKQotICAgICwgbV9uZWVkc0NvbW1pdChmYWxzZSkKLSAgICAsIG1fc3RlbmNpbENs
ZWFyZWQoZmFsc2UpCi17Ci0gICAgLy8gV2UncmUgbm93IGluaXRpYWxpemluZyBsYXppbHksIHNv
IGEgY2hlY2sgaWYgdGhlIGNvbnRleHQgY2FuIGJlIG1hZGUgY3VycmVudAotICAgIC8vIHdpbGwg
aGF2ZSB0byBzdWZmaWNlIHRvIGRldGVybWluZSBpZiBoYXJkd2FyZSBjb21wb3NpdGluZyBpcyBw
b3NzaWJsZS4KLSAgICBtX2hhcmR3YXJlQ29tcG9zaXRpbmcgPSBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBpZiAobV9oYXJkd2FyZUNvbXBvc2l0aW5nKSB7Ci0gICAgICAgIG1faXNSb2J1c3Ru
ZXNzU3VwcG9ydGVkID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xH
ZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKS5jb250YWlucygiR0xfRVhUX3JvYnVzdG5lc3MiKTsK
LSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9nbEdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VUR1JBUEhJ
Q1NSRVNFVFNUQVRVU0VYVFBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNFWFQiKSk7Ci0gICAgfQotfQotCi1MYXllclJlbmRlcmVyOjp+TGF5ZXJSZW5kZXJl
cigpCi17Ci0gICAgaWYgKG1faGFyZHdhcmVDb21wb3NpdGluZykgewotICAgICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICAgICAgaWYgKG1fZmJvKQotICAgICAgICAgICAgZ2xEZWxldGVG
cmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IE51bWJlck9mUHJvZ3JhbXM7ICsraSkKLSAgICAgICAgICAgIGdsRGVsZXRlUHJvZ3JhbShtX3By
b2dyYW1zW2ldLm1fcHJvZ3JhbSk7Ci0KLSAgICAgICAgLy8gRnJlZSB1cCBhbGwgR0wgdGV4dHVy
ZXMuCi0gICAgICAgIHdoaWxlIChtX2xheWVycy5iZWdpbigpICE9IG1fbGF5ZXJzLmVuZCgpKSB7
Ci0gICAgICAgICAgICBMYXllclNldDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5ZXJzLmJlZ2luKCk7
Ci0gICAgICAgICAgICAoKml0ZXIpLT5kZWxldGVUZXh0dXJlcygpOwotICAgICAgICAgICAgKCpp
dGVyKS0+c2V0TGF5ZXJSZW5kZXJlcigwKTsKLSAgICAgICAgICAgIHJlbW92ZUxheWVyKCppdGVy
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCkt
PmNsZWFyKCk7Ci0gICAgfQotfQotCi12b2lkIExheWVyUmVuZGVyZXI6OnJlbGVhc2VMYXllclJl
c291cmNlcygpCi17Ci0gICAgaWYgKG1faGFyZHdhcmVDb21wb3NpdGluZykgewotICAgICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgLy8gRnJlZSB1cCBhbGwgR0wgdGV4dHVyZXMu
Ci0gICAgICAgIGZvciAoTGF5ZXJTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX2xheWVycy5iZWdpbigp
OyBpdGVyICE9IG1fbGF5ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICAoKml0ZXIpLT5k
ZWxldGVUZXh0dXJlcygpOwotCi0gICAgICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFk
KCktPmNsZWFyKCk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUxheWVy
Vyhjb25zdCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBhLCBjb25zdCBMYXllckNvbXBvc2l0aW5n
VGhyZWFkKiBiKQotewotICAgIHJldHVybiBhLT5jZW50ZXJXKCkgPiBiLT5jZW50ZXJXKCk7Ci19
Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlcjo6cHJlcGFyZUZyYW1lKGRvdWJsZSBhbmltYXRpb25UaW1l
LCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiByb290TGF5ZXIpCi17Ci0gICAgaWYgKGFuaW1hdGlv
blRpbWUgIT0gbV9hbmltYXRpb25UaW1lKSB7Ci0gICAgICAgIG1fYW5pbWF0aW9uVGltZSA9IGFu
aW1hdGlvblRpbWU7Ci0KLSAgICAgICAgLy8gQWhhLCBuZXcgZnJhbWUhIFJlc2V0IHJlbmRlcmlu
ZyByZXN1bHRzLgotICAgICAgICBib29sIHdhc0VtcHR5ID0gbV9sYXN0UmVuZGVyaW5nUmVzdWx0
cy5pc0VtcHR5KCk7Ci0gICAgICAgIG1fbGFzdFJlbmRlcmluZ1Jlc3VsdHMgPSBMYXllclJlbmRl
cmluZ1Jlc3VsdHMoKTsKLSAgICAgICAgbV9sYXN0UmVuZGVyaW5nUmVzdWx0cy53YXNFbXB0eSA9
IHdhc0VtcHR5OwotICAgIH0KLQotICAgIGlmICghcm9vdExheWVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBib29sIGlzQ29udGV4dEN1cnJlbnQgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBwcmVwYXJlRnJhbWVSZWN1cnNpdmUocm9vdExheWVyLCBhbmltYXRpb25UaW1lLCBpc0NvbnRl
eHRDdXJyZW50KTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyOjpzZXRWaWV3cG9ydChjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5b3V0UmVjdCwgY29uc3QgSW50U2l6
ZSYgY29udGVudHNTaXplKQotewotICAgIC8vIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8g
Y2FsY3VsYXRlIHBvc2l0aW9uIG9mIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzCi0gICAgbV92aXNp
YmxlUmVjdCA9IHZpc2libGVSZWN0OwotICAgIG1fbGF5b3V0UmVjdCA9IGxheW91dFJlY3Q7Ci0g
ICAgbV9jb250ZW50c1NpemUgPSBjb250ZW50c1NpemU7Ci0KLSAgICBtX3ZpZXdwb3J0ID0gdGFy
Z2V0UmVjdDsKLSAgICBtX3NjaXNzb3JSZWN0ID0gY2xpcFJlY3Q7Ci0KLSAgICAvLyBUaGUgY2xp
cFJlY3QgcGFyYW1ldGVyIHVzZXMgcmVuZGVyIHRhcmdldCBjb29yZGluYXRlcywgbWFwIHRvIG5v
cm1hbGl6ZWQgZGV2aWNlIGNvb3JkaW5hdGVzCi0gICAgbV9jbGlwUmVjdCA9IGNsaXBSZWN0Owot
ICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KHRhcmdldFJlY3QpOwotICAgIG1fY2xpcFJlY3QgPSBG
bG9hdFJlY3QoLTEgKyAyICogKG1fY2xpcFJlY3QueCgpIC0gdGFyZ2V0UmVjdC54KCkpIC8gdGFy
Z2V0UmVjdC53aWR0aCgpLAotICAgICAgICAtMSArIDIgKiAobV9jbGlwUmVjdC55KCkgLSB0YXJn
ZXRSZWN0LnkoKSkgLyB0YXJnZXRSZWN0LmhlaWdodCgpLAotICAgICAgICAyICogbV9jbGlwUmVj
dC53aWR0aCgpIC8gdGFyZ2V0UmVjdC53aWR0aCgpLAotICAgICAgICAyICogbV9jbGlwUmVjdC5o
ZWlnaHQoKSAvIHRhcmdldFJlY3QuaGVpZ2h0KCkpOwotCi0jaWYgREVCVUdfQ0xJUFBJTkcKLSAg
ICBwcmludGYoIkxheWVyUmVuZGVyZXI6OnNldFZpZXdwb3J0KCkgbV92aXNpYmxlUmVjdD0oJS4y
ZiwlLjJmICUuMmZ4JS4yZiksIG1fbGF5b3V0UmVjdD0oJWQsJWQgJWR4JWQpLCBtX2NvbnRlbnRz
U2l6ZT0oJWR4JWQpLCBtX3ZpZXdwb3J0PSglZCwlZCAlZHglZCksIG1fc2Npc3NvclJlY3Q9KCVk
LCVkICVkeCVkKSwgbV9jbGlwUmVjdD0oJS4yZiwlLjJmICUuMmZ4JS4yZilcbiIsCi0gICAgICAg
IG1fdmlzaWJsZVJlY3QueCgpLCBtX3Zpc2libGVSZWN0LnkoKSwgbV92aXNpYmxlUmVjdC53aWR0
aCgpLCBtX3Zpc2libGVSZWN0LmhlaWdodCgpLAotICAgICAgICBtX2xheW91dFJlY3QueCgpLCBt
X2xheW91dFJlY3QueSgpLCBtX2xheW91dFJlY3Qud2lkdGgoKSwgbV9sYXlvdXRSZWN0LmhlaWdo
dCgpLAotICAgICAgICBtX2NvbnRlbnRzU2l6ZS53aWR0aCgpLCBtX2NvbnRlbnRzU2l6ZS5oZWln
aHQoKSwKLSAgICAgICAgbV92aWV3cG9ydC54KCksIG1fdmlld3BvcnQueSgpLCBtX3ZpZXdwb3J0
LndpZHRoKCksIG1fdmlld3BvcnQuaGVpZ2h0KCksCi0gICAgICAgIG1fc2Npc3NvclJlY3QueCgp
LCBtX3NjaXNzb3JSZWN0LnkoKSwgbV9zY2lzc29yUmVjdC53aWR0aCgpLCBtX3NjaXNzb3JSZWN0
LmhlaWdodCgpLAotICAgICAgICBtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xp
cFJlY3Qud2lkdGgoKSwgbV9jbGlwUmVjdC5oZWlnaHQoKSk7Ci0gICAgZmZsdXNoKHN0ZG91dCk7
Ci0jZW5kaWYKLQotICAgIGlmICghbV9oYXJkd2FyZUNvbXBvc2l0aW5nKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBPa2F5LCB3ZSdyZSBnb2luZyB0byBkbyBzb21lIGRyYXdpbmcuCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gR2V0
IHJpZCBvZiBhbnkgYm91bmQgYnVmZmVyIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBpbnRlcnByZXRh
dGlvbiBvZiBvdXIKLSAgICAvLyBnbFZlcnRleEF0dHJpYlBvaW50ZXIgY2FsbHMuCi0gICAgZ2xC
aW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCk7Ci0gICAgZ2xCaW5kQnVmZmVyKEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSLCAwKTsKLQotICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7
Ci0gICAgZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpOwotICAgIGdsRGlzYWJsZShHTF9DVUxMX0ZB
Q0UpOwotICAgIGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpOwotCi0gICAgLy8gSWYgY3VsbGlu
ZyBpcyBlbmFibGVkIHRoZW4gd2Ugd2lsbCBjdWxsIHRoZSBiYWNrZmFjZS4KLSAgICBnbEN1bGxG
YWNlKEdMX0JBQ0spOwotCi0gICAgLy8gVGhlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
c0NvbnRleHQgdXNlcyBPcGVuR0wgY29udmVudGlvbnMsIHNvIGV2ZXJ5dGhpbmcgaXMgdXBzaWRl
IGRvd24KLSAgICBnbEZyb250RmFjZShHTF9DVyk7Ci0KLSAgICBjaGVja0dMRXJyb3IoKTsKLQot
ICAgIGdsVmlld3BvcnQobV92aWV3cG9ydC54KCksIG1fdmlld3BvcnQueSgpLCBtX3ZpZXdwb3J0
LndpZHRoKCksIG1fdmlld3BvcnQuaGVpZ2h0KCkpOwotCi0gICAgZ2xFbmFibGUoR0xfU0NJU1NP
Ul9URVNUKTsKLSNpZiBERUJVR19DTElQUElORwotICAgIHByaW50ZigiTGF5ZXJSZW5kZXJlcjo6
Y29tcG9zaXRlTGF5ZXJzKCk6IGNsaXBwaW5nIHRvICglZCwlZCAlZHglZClcbiIsIG1fc2Npc3Nv
clJlY3QueCgpLCBtX3NjaXNzb3JSZWN0LnkoKSwgbV9zY2lzc29yUmVjdC53aWR0aCgpLCBtX3Nj
aXNzb3JSZWN0LmhlaWdodCgpKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZgotICAgIGds
U2Npc3NvcihtX3NjaXNzb3JSZWN0LngoKSwgbV9zY2lzc29yUmVjdC55KCksIG1fc2Npc3NvclJl
Y3Qud2lkdGgoKSwgbV9zY2lzc29yUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBtX3N0ZW5jaWxDbGVh
cmVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIExheWVyQ29tcG9zaXRpbmdUaHJlYWQq
IHJvb3RMYXllcikKLXsKLSAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKLSAgICBp
ZiAoIW1faGFyZHdhcmVDb21wb3NpdGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFy
b290TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFVzZWQgdG8gZHJhdyBzY2FsZSBp
bnZhcmlhbnQgbGF5ZXJzLiBXZSBhc3N1bWUgdW5pZm9ybSBzY2FsZS4KLSAgICAvLyBUaGUgbWF0
cml4IG1hcHMgdG8gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMsIGEgc3lzdGVtIHRoYXQg
bWFwcyB0aGUKLSAgICAvLyB2aWV3cG9ydCB0byB0aGUgaW50ZXJ2YWwgLTEgdG8gMS4KLSAgICAv
LyBTbyBpdCBoYXMgdG8gc2NhbGUgZG93biBieSBhIGZhY3RvciBlcXVhbCB0byBvbmUgaGFsZiB0
aGUgdmlld3BvcnQuCi0gICAgbV9zY2FsZSA9IG1hdHJpeC5tMTEoKSAqIG1fdmlld3BvcnQud2lk
dGgoKSAvIDI7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4g
c3VyZmFjZUxheWVyczsKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ+ID4mIHN1YmxheWVycyA9IHJvb3RMYXllci0+c3VibGF5ZXJzKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgZmxvYXQg
b3BhY2l0eSA9IDE7Ci0gICAgICAgIEZsb2F0UmVjdCBjbGlwUmVjdChtX2NsaXBSZWN0KTsKLSAg
ICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSwgbWF0cml4LCBzdXJmYWNlTGF5ZXJzLCBvcGFjaXR5LCBjbGlwUmVjdCk7
Ci0gICAgfQotCi0gICAgLy8gRGVjb21wb3NlIHRoZSBkaXJ0eSByZWN0IGludG8gYSBzZXQgb2Yg
bm9uLW92ZXJsYXBpbmcgcmVjdGFuZ2xlcwotICAgIC8vICh0aGV5IG5lZWQgdG8gbm90IG92ZXJs
YXAgc28gdGhhdCB0aGUgYmxlbmRpbmcgY29kZSBkb2Vzbid0IGRyYXcgYW55IHJlZ2lvbiB0d2lj
ZSkuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllclJlbmRlcmluZ1Jlc3VsdHM6Ok51bWJl
ck9mRGlydHlSZWN0czsgKytpKSB7Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRS
ZWN0UmVnaW9uIHJlZ2lvbihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdChtX2xhc3RSZW5k
ZXJpbmdSZXN1bHRzLmRpcnR5UmVjdChpKSkpOwotICAgICAgICBtX2xhc3RSZW5kZXJpbmdSZXN1
bHRzLmRpcnR5UmVnaW9uID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb246OnVu
aW9uUmVnaW9ucyhtX2xhc3RSZW5kZXJpbmdSZXN1bHRzLmRpcnR5UmVnaW9uLCByZWdpb24pOwot
ICAgIH0KLQotICAgIC8vIElmIHdlIHdvbid0IGRyYXcgYW55dGhpbmcsIGRvbid0IHRvdWNoIHRo
ZSBPcGVuR0wgQVBJcy4KLSAgICBpZiAobV9sYXN0UmVuZGVyaW5nUmVzdWx0cy5pc0VtcHR5KCkg
JiYgbV9sYXN0UmVuZGVyaW5nUmVzdWx0cy53YXNFbXB0eSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gT2theSwgd2UncmUgZ29pbmcgdG8gZG8gc29tZSBkcmF3aW5nLgotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHNvbWUgbGF5
ZXJzIHNob3VsZCBiZSBkcmF3biBvbiB0ZW1wb3Jhcnkgc3VyZmFjZXMsIHdlIHNob3VsZCBkbyBp
dCBmaXJzdC4KLSAgICBpZiAoIXN1cmZhY2VMYXllcnMuaXNFbXB0eSgpKQotICAgICAgICBkcmF3
TGF5ZXJzT25TdXJmYWNlcyhzdXJmYWNlTGF5ZXJzKTsKLQotICAgIC8vIERvbid0IHJlbmRlciB0
aGUgcm9vdCBsYXllciwgdGhlIEJsYWNrQmVycnkgcG9ydCB1c2VzIHRoZSBCYWNraW5nU3RvcmUg
dG8gZHJhdyB0aGUKLSAgICAvLyByb290IGxheWVyLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGludCBjdXJyZW50U3RlbmNpbFZh
bHVlID0gMDsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KG1fY2xpcFJlY3QpOwotICAgICAg
ICBjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpLCBjdXJyZW50U3Rl
bmNpbFZhbHVlLCBjbGlwUmVjdCk7Ci0gICAgfQotCi0gICAgbV9jbGllbnQtPmNvbnRleHQoKS0+
c3dhcEJ1ZmZlcnMoKTsKLQotICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIGds
RGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpOwotCi0gICAgLy8gUFIgMTQ3MjU0LCB0aGUgRUdMIGlt
cGxlbWVudGF0aW9uIGNyYXNoZXMgd2hlbiB0aGUgbGFzdCBib3VuZCB0ZXh0dXJlCi0gICAgLy8g
d2FzIGFuIEVHTEltYWdlLCBhbmQgeW91IHRyeSB0byBiaW5kIGFub3RoZXIgdGV4dHVyZSBhbmQg
dGhlIHBpeG1hcAotICAgIC8vIGJhY2tpbmcgdGhlIEVHTEltYWdlIHdhcyBkZWxldGVkIGluIGJl
dHdlZW4uIE1ha2UgdGhpcyBlYXNpZXIgZm9yIHRoZQotICAgIC8vIGRyaXZlciBieSB1bmJpbmRp
bmcgZWFybHkgKHdoZW4gdGhlIHBpeG1hcCBpcyBob3BlZnVsbHkgc3RpbGwgYXJvdW5kKS4KLSAg
ICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgTGF5ZXJTZXQ6Oml0ZXJh
dG9yIGl0ZXIgPSBtX2xheWVyc0xvY2tpbmdUZXh0dXJlUmVzb3VyY2VzLmJlZ2luKCk7Ci0gICAg
Zm9yICg7IGl0ZXIgIT0gbV9sYXllcnNMb2NraW5nVGV4dHVyZVJlc291cmNlcy5lbmQoKTsgKytp
dGVyKQotICAgICAgICAoKml0ZXIpLT5yZWxlYXNlVGV4dHVyZVJlc291cmNlcygpOwotCi0gICAg
bV9sYXllcnNMb2NraW5nVGV4dHVyZVJlc291cmNlcy5jbGVhcigpOwotCi0gICAgaWYgKG1fbmVl
ZHNDb21taXQpIHsKLSAgICAgICAgbV9uZWVkc0NvbW1pdCA9IGZhbHNlOwotICAgICAgICByb290
TGF5ZXItPnNjaGVkdWxlQ29tbWl0KCk7Ci0gICAgfQotCi0gICAgdGV4dHVyZUNhY2hlQ29tcG9z
aXRpbmdUaHJlYWQoKS0+Y29sbGVjdEdhcmJhZ2UoKTsKLX0KLQotc3RhdGljIGZsb2F0IHRleGNv
b3Jkc1s0ICogMl0gPSB7IDAsIDAsICAxLCAwLCAgMSwgMSwgIDAsIDEgfTsKLQotdm9pZCBMYXll
clJlbmRlcmVyOjpjb21wb3NpdGVCdWZmZXIoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBjb250ZW50cywgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciwgYm9vbCBjb250ZW50c09wYXF1ZSwgZmxvYXQgb3Bh
Y2l0eSkKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRR
dWFkIHZlcnRpY2VzKHRyYW5zZm9ybS5tYXBQb2ludChjb250ZW50cy5taW5YTWluWUNvcm5lcigp
KSwKLSAgICAgICAgdHJhbnNmb3JtLm1hcFBvaW50KGNvbnRlbnRzLm1pblhNYXhZQ29ybmVyKCkp
LAotICAgICAgICB0cmFuc2Zvcm0ubWFwUG9pbnQoY29udGVudHMubWF4WE1heFlDb3JuZXIoKSks
Ci0gICAgICAgIHRyYW5zZm9ybS5tYXBQb2ludChjb250ZW50cy5tYXhYTWluWUNvcm5lcigpKSk7
Ci0KLSAgICBpZiAoIXZlcnRpY2VzLmJvdW5kaW5nQm94KCkuaW50ZXJzZWN0cyhtX2NsaXBSZWN0
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjb250ZW50c09wYXF1ZSB8fCBvcGFjaXR5
IDwgMS4wZikgewotICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0gICAgICAgIGdsQmxlbmRG
dW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGdsRGlzYWJsZShHTF9CTEVORCk7Ci0KLSAgICBpZiAoQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpsb2NrQW5kQmluZEJ1ZmZlckdMVGV4dHVyZShidWZmZXIsIEdMX1RFWFRVUkVfMkQp
KSB7Ci0gICAgICAgIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSA9IHVzZVByb2dyYW0oTGF5
ZXJQcm9ncmFtUkdCQSk7Ci0gICAgICAgIGdsVW5pZm9ybTFmKHByb2dyYW0ub3BhY2l0eUxvY2F0
aW9uKCksIG9wYWNpdHkpOwotCi0gICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFt
LnBvc2l0aW9uTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmdmVydGljZXMp
OwotICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS50ZXhDb29yZExvY2F0aW9u
KCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29vcmRzKTsKLQotICAgICAgICBnbERy
YXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpyZWxlYXNlQnVmZmVyR0xUZXh0dXJlKGJ1ZmZlcik7Ci0gICAgfQot
fQotCi12b2lkIExheWVyUmVuZGVyZXI6OmRyYXdDb2xvcihjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNvbnRlbnRzLCBjb25zdCBDb2xvciYg
Y29sb3IpCi17Ci0gICAgRmxvYXRRdWFkIHZlcnRpY2VzKHRyYW5zZm9ybS5tYXBQb2ludChjb250
ZW50cy5taW5YTWluWUNvcm5lcigpKSwKLSAgICAgICAgdHJhbnNmb3JtLm1hcFBvaW50KGNvbnRl
bnRzLm1pblhNYXhZQ29ybmVyKCkpLAotICAgICAgICB0cmFuc2Zvcm0ubWFwUG9pbnQoY29udGVu
dHMubWF4WE1heFlDb3JuZXIoKSksCi0gICAgICAgIHRyYW5zZm9ybS5tYXBQb2ludChjb250ZW50
cy5tYXhYTWluWUNvcm5lcigpKSk7Ci0KLSAgICBpZiAoIXZlcnRpY2VzLmJvdW5kaW5nQm94KCku
aW50ZXJzZWN0cyhtX2NsaXBSZWN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgR0xF
UzJQcm9ncmFtJiBwcm9ncmFtID0gdXNlUHJvZ3JhbShDb2xvclByb2dyYW0pOwotCi0gICAgaWYg
KGNvbG9yLmFscGhhKCkgPCAyNTUpIHsKLSAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAg
ICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgIH0g
ZWxzZQotICAgICAgICBnbERpc2FibGUoR0xfQkxFTkQpOwotCi0gICAgZ2xVbmlmb3JtNGYobV9j
b2xvckNvbG9yTG9jYXRpb24sIGNvbG9yLnJlZCgpIC8gMjU1LjAsIGNvbG9yLmdyZWVuKCkgLyAy
NTUuMCwgY29sb3IuYmx1ZSgpIC8gMjU1LjAsIGNvbG9yLmFscGhhKCkgLyAyNTUuMCk7Ci0gICAg
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0ucG9zaXRpb25Mb2NhdGlvbigpLCAyLCBHTF9G
TE9BVCwgR0xfRkFMU0UsIDAsICZ2ZXJ0aWNlcyk7Ci0KLSAgICBnbERyYXdBcnJheXMoR0xfVFJJ
QU5HTEVfRkFOLCAwLCA0KTsKLX0KLQotYm9vbCBMYXllclJlbmRlcmVyOjp1c2VTdXJmYWNlKExh
eWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNlKQotewotICAgIGlmIChtX2N1cnJlbnRMYXllclJl
bmRlcmVyU3VyZmFjZSA9PSBzdXJmYWNlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIG1f
Y3VycmVudExheWVyUmVuZGVyZXJTdXJmYWNlID0gc3VyZmFjZTsKLSAgICBpZiAoIXN1cmZhY2Up
IHsKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgICAg
ICBnbFZpZXdwb3J0KG1fdmlld3BvcnQueCgpLCBtX3ZpZXdwb3J0LnkoKSwgbV92aWV3cG9ydC53
aWR0aCgpLCBtX3ZpZXdwb3J0LmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgc3VyZmFjZS0+ZW5zdXJlVGV4dHVyZSgpOwotCi0gICAgR0x1aW50IHRleGlkID0g
c3VyZmFjZS0+dGV4dHVyZSgpLT5wbGF0Zm9ybVRleHR1cmUoKTsKLQotICAgIGlmICghbV9mYm8p
Ci0gICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgbV9mYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdM
X0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCB0ZXhpZCwgMCk7Ci0KLSNpZm5kZWYg
TkRFQlVHCi0gICAgR0xlbnVtIHN0YXR1cyA9IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9G
UkFNRUJVRkZFUik7Ci0gICAgaWYgKHN0YXR1cyAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkg
ewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyBlcnJv
ciAleFxuIiwgc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgZ2xWaWV3cG9ydCgwLCAwLCBzdXJmYWNlLT5zaXplKCkud2lkdGgoKSwgc3VyZmFjZS0+
c2l6ZSgpLmhlaWdodCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXllclJlbmRl
cmVyOjpkcmF3TGF5ZXJzT25TdXJmYWNlcyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9z
aXRpbmdUaHJlYWQ+ID4mIHN1cmZhY2VMYXllcnMpCi17Ci0gICAgLy8gTm9ybWFsbHksIGFuIHVw
c2lkZS1kb3duIHRyYW5zZm9ybSBpcyB1c2VkLCBhcyBpcyB0aGUgR0wgY3VzdG9tLiBIb3dldmVy
LCB3aGVuIGRyYXdpbmcKLSAgICAvLyBsYXllcnMgdG8gc3VyZmFjZXMsIGEgcmlnaHQtc2lkZS11
cCB0cmFuc2Zvcm0gaXMgdXNlZCwgc28gd2UgbmVlZCB0byBzd2l0Y2ggdGhlIHdpbmRpbmcgb3Jk
ZXIKLSAgICAvLyBmb3IgY3VsbGluZy4KLSAgICBnbEZyb250RmFjZShHTF9DQ1cpOwotCi0gICAg
Zm9yIChpbnQgaSA9IHN1cmZhY2VMYXllcnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAg
ICAgICAgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIgPSBzdXJmYWNlTGF5ZXJzW2ldLmdl
dCgpOwotICAgICAgICBMYXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFjZSA9IGxheWVyLT5sYXll
clJlbmRlcmVyU3VyZmFjZSgpOwotICAgICAgICBpZiAoIXN1cmZhY2UgfHwgIXVzZVN1cmZhY2Uo
c3VyZmFjZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBnbERpc2FibGUoR0xf
U0NJU1NPUl9URVNUKTsKLSAgICAgICAgZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgICAg
ICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwotCi0gICAgICAgIGludCBjdXJyZW50U3Rl
bmNpbFZhbHVlID0gMDsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KC0xLCAtMSwgMiwgMik7
Ci0gICAgICAgIGNvbXBvc2l0ZUxheWVyc1JlY3Vyc2l2ZShzdXJmYWNlTGF5ZXJzW2ldLmdldCgp
LCBjdXJyZW50U3RlbmNpbFZhbHVlLCBjbGlwUmVjdCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCi0gICAgICAgIGlmICghbV9maWx0ZXJSZW5kZXJlcikKLSAgICAgICAgICAgIG1fZmlsdGVy
UmVuZGVyZXIgPSBMYXllckZpbHRlclJlbmRlcmVyOjpjcmVhdGUoR0xFUzJQcm9ncmFtOjpQb3Np
dGlvbkF0dHJpYnV0ZUluZGV4LCBHTEVTMlByb2dyYW06OlRleENvb3JkQXR0cmlidXRlSW5kZXgp
OwotICAgICAgICBpZiAobGF5ZXItPmZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKCkpIHsKLSAgICAg
ICAgICAgIGxheWVyLT5zZXRGaWx0ZXJPcGVyYXRpb25zQ2hhbmdlZChmYWxzZSk7Ci0gICAgICAg
ICAgICBsYXllci0+c2V0RmlsdGVyQWN0aW9ucyhtX2ZpbHRlclJlbmRlcmVyLT5hY3Rpb25zRm9y
T3BlcmF0aW9ucyhzdXJmYWNlLCBsYXllci0+ZmlsdGVycygpLm9wZXJhdGlvbnMoKSkpOwotICAg
ICAgICB9Ci0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5QWN0aW9ucyhtX2ZibywgbGF5
ZXIsIGxheWVyLT5maWx0ZXJBY3Rpb25zKCkpOwotICAgICAgICBnbENsZWFyQ29sb3IoMCwgMCwg
MCwgMCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBnbEZyb250RmFjZShHTF9DVyk7Ci0KLSAgICAv
LyBJZiB0aGVyZSBhcmUgbGF5ZXJzIGRyYXduIG9uIHN1cmZhY2VzLCB3ZSBuZWVkIHRvIHN3aXRj
aCB0byBkZWZhdWx0IGZyYW1lYnVmZmVyLgotICAgIC8vIE90aGVyd2lzZSwgd2UganVzdCBuZWVk
IHRvIHNldCB2aWV3cG9ydC4KLSAgICB1c2VTdXJmYWNlKDApOwotICAgIGdsRW5hYmxlKEdMX1ND
SVNTT1JfVEVTVCk7Ci0gICAgZ2xTY2lzc29yKG1fc2Npc3NvclJlY3QueCgpLCBtX3NjaXNzb3JS
ZWN0LnkoKSwgbV9zY2lzc29yUmVjdC53aWR0aCgpLCBtX3NjaXNzb3JSZWN0LmhlaWdodCgpKTsK
LX0KLQotdm9pZCBMYXllclJlbmRlcmVyOjphZGRMYXllcihMYXllckNvbXBvc2l0aW5nVGhyZWFk
KiBsYXllcikKLXsKLSAgICBtX2xheWVycy5hZGQobGF5ZXIpOwotfQotCi1ib29sIExheWVyUmVu
ZGVyZXI6OnJlbW92ZUxheWVyKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyKQotewotICAg
IHJldHVybiBtX2xheWVycy5yZW1vdmUobGF5ZXIpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXI6
OmFkZExheWVyVG9SZWxlYXNlVGV4dHVyZVJlc291cmNlc0xpc3QoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCogbGF5ZXIpCi17Ci0gICAgbV9sYXllcnNMb2NraW5nVGV4dHVyZVJlc291cmNlcy5hZGQo
bGF5ZXIpOwotfQotCi1zdGF0aWMgaW50IGdsUm91bmQoZmxvYXQgZikKLXsKLSAgICByZXR1cm4g
Zmxvb3JmKGYgKyAwLjVmKTsKLX0KLQotLy8gVHJhbnNmb3JtIG5vcm1hbGl6ZWQgZGV2aWNlIGNv
b3JkaW5hdGVzIHRvIHdpbmRvdyBjb29yZGluYXRlcwotLy8gYXMgc3BlY2lmaWVkIGluIHRoZSBP
cGVuR0wgRVMgMi4wIHNwZWMgc2VjdGlvbiAyLjEyLjEuCi1JbnRSZWN0IExheWVyUmVuZGVyZXI6
OnRvT3BlbkdMV2luZG93Q29vcmRpbmF0ZXMoY29uc3QgRmxvYXRSZWN0JiByKSBjb25zdAotewot
ICAgIGZsb2F0IHZ3MiA9IG1fdmlld3BvcnQud2lkdGgoKSAvIDIuMDsKLSAgICBmbG9hdCB2aDIg
PSBtX3ZpZXdwb3J0LmhlaWdodCgpIC8gMi4wOwotICAgIGZsb2F0IG94ID0gbV92aWV3cG9ydC54
KCkgKyB2dzI7Ci0gICAgZmxvYXQgb3kgPSBtX3ZpZXdwb3J0LnkoKSArIHZoMjsKLSAgICByZXR1
cm4gSW50UmVjdChnbFJvdW5kKHIueCgpICogdncyICsgb3gpLCBnbFJvdW5kKHIueSgpICogdmgy
ICsgb3kpLCBnbFJvdW5kKHIud2lkdGgoKSAqIHZ3MiksIGdsUm91bmQoci5oZWlnaHQoKSAqIHZo
MikpOwotfQotCi1zdGF0aWMgRmxvYXRSZWN0IHRvUGl4ZWxDb29yZGluYXRlcyhjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0LCBpbnQgc3VyZmFjZUhlaWdodCkK
LXsKLSAgICBmbG9hdCB2dzIgPSB2aWV3cG9ydC53aWR0aCgpIC8gMi4wOwotICAgIGZsb2F0IHZo
MiA9IHZpZXdwb3J0LmhlaWdodCgpIC8gMi4wOwotICAgIGZsb2F0IG94ID0gdmlld3BvcnQueCgp
ICsgdncyOwotICAgIGZsb2F0IG95ID0gc3VyZmFjZUhlaWdodCAtICh2aWV3cG9ydC55KCkgKyB2
aDIpOwotICAgIHJldHVybiBGbG9hdFJlY3QocmVjdC54KCkgKiB2dzIgKyBveCwgLShyZWN0Lnko
KSArIHJlY3QuaGVpZ2h0KCkpICogdmgyICsgb3ksIHJlY3Qud2lkdGgoKSAqIHZ3MiwgcmVjdC5o
ZWlnaHQoKSAqIHZoMik7Ci19Ci0KLS8vIFRyYW5zZm9ybSBub3JtYWxpemVkIGRldmljZSBjb29y
ZGluYXRlcyB0byB3aW5kb3cgY29vcmRpbmF0ZXMgYXMgV2ViS2l0IHVuZGVyc3RhbmRzIHRoZW0u
Ci0vLwotLy8gVGhlIE9wZW5HTCBzdXJmYWNlIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgV2ViS2l0
IHdpbmRvdywgYW5kIE9wZW5HTCB3aW5kb3cgY29vcmRpbmF0ZXMKLS8vIGhhdmUgb3JpZ2luIGlu
IGJvdHRvbSBsZWZ0IHdoaWxlIFdlYktpdCB3aW5kb3cgY29vcmRpbmF0ZXMgb3JpZ2luIGlzIGlu
IHRvcCBsZWZ0LgotLy8gVGhlIHZpZXdwb3J0IGlzIHNldHVwIHRvIGNvdmVyIHRoZSB1cHBlciBw
b3J0aW9uIG9mIHRoZSBsYXJnZXIgT3BlbkdMIHN1cmZhY2UuCi1JbnRSZWN0IExheWVyUmVuZGVy
ZXI6OnRvV2luZG93Q29vcmRpbmF0ZXMoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAotewot
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHRvUGl4ZWxDb29yZGluYXRlcyhyZWN0LCBtX3Zp
ZXdwb3J0LCBtX2NsaWVudC0+Y29udGV4dCgpLT5zdXJmYWNlU2l6ZSgpLmhlaWdodCgpKSk7Ci19
Ci0KLUludFJlY3QgTGF5ZXJSZW5kZXJlcjo6dG9QaXhlbFZpZXdwb3J0Q29vcmRpbmF0ZXMoY29u
c3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAotewotICAgIC8vIFRoZSBjbGlwIHJlY3QgZGVmaW5l
cyB0aGUgd2ViIHBhZ2UncyBwaXhlbCB2aWV3cG9ydCAodG8gdXNlIFZpZXdwb3J0QWNjZXNzb3Ig
dGVybWlub2xvZ3kpLAotICAgIC8vIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBHTCB2aWV3
cG9ydC4gU28gdHJhbnNsYXRlIGZyb20gd2luZG93IGNvb3JkaW5hdGVzIHRvIHBpeGVsCi0gICAg
Ly8gdmlld3BvcnQgY29vcmRpbmF0ZXMuCi0gICAgaW50IHN1cmZhY2VIZWlnaHQgPSBtX2NsaWVu
dC0+Y29udGV4dCgpLT5zdXJmYWNlU2l6ZSgpLmhlaWdodCgpOwotICAgIEZsb2F0UmVjdCBwaXhl
bFZpZXdwb3J0ID0gdG9QaXhlbENvb3JkaW5hdGVzKG1fY2xpcFJlY3QsIG1fdmlld3BvcnQsIHN1
cmZhY2VIZWlnaHQpOwotICAgIEZsb2F0UmVjdCByZXN1bHQgPSB0b1BpeGVsQ29vcmRpbmF0ZXMo
cmVjdCwgbV92aWV3cG9ydCwgc3VyZmFjZUhlaWdodCk7Ci0gICAgcmVzdWx0Lm1vdmUoLXBpeGVs
Vmlld3BvcnQueCgpLCAtcGl4ZWxWaWV3cG9ydC55KCkpOwotICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KHJlc3VsdCk7Ci19Ci0KLUludFJlY3QgTGF5ZXJSZW5kZXJlcjo6dG9Eb2N1bWVudFZp
ZXdwb3J0Q29vcmRpbmF0ZXMoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAotewotICAgIC8v
IFNpbWlsYXIgdG8gdG9QaXhlbFZpZXdwb3J0Q29vcmRpbmF0ZXMgZXhjZXB0IHRoYXQgdGhpcyBh
bHNvIHRha2VzIGFueSB6b29tIGludG8gYWNjb3VudC4KLSAgICBGbG9hdFJlY3QgcmVzdWx0ID0g
dG9QaXhlbFZpZXdwb3J0Q29vcmRpbmF0ZXMocmVjdCk7Ci0gICAgcmVzdWx0LnNjYWxlKDEgLyBt
X3NjYWxlKTsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChyZXN1bHQpOwotfQotCi12b2lk
IExheWVyUmVuZGVyZXI6OmRyYXdEZWJ1Z0JvcmRlcihjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4m
IHRyYW5zZm9ybWVkQm91bmRzLCBjb25zdCBDb2xvciYgYm9yZGVyQ29sb3IsIGZsb2F0IGJvcmRl
cldpZHRoKQotewotICAgIGlmIChib3JkZXJDb2xvci5hbHBoYSgpIDwgMjU1KSB7Ci0gICAgICAg
IGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAgICAgICAgZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVf
TUlOVVNfU1JDX0FMUEhBKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2xEaXNhYmxlKEdMX0JMRU5E
KTsKLQotICAgIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSA9IHVzZVByb2dyYW0oQ29sb3JQ
cm9ncmFtKTsKLSAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5wb3NpdGlvbkxvY2F0
aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdHJhbnNmb3JtZWRCb3VuZHMuZGF0YSgp
KTsKLSAgICBnbFVuaWZvcm00ZihtX2NvbG9yQ29sb3JMb2NhdGlvbiwgYm9yZGVyQ29sb3IucmVk
KCkgLyAyNTUuMCwgYm9yZGVyQ29sb3IuZ3JlZW4oKSAvIDI1NS4wLCBib3JkZXJDb2xvci5ibHVl
KCkgLyAyNTUuMCwgYm9yZGVyQ29sb3IuYWxwaGEoKSAvIDI1NS4wKTsKLQotICAgIGdsTGluZVdp
ZHRoKGJvcmRlcldpZHRoKTsKLSAgICBnbERyYXdBcnJheXMoR0xfTElORV9MT09QLCAwLCB0cmFu
c2Zvcm1lZEJvdW5kcy5zaXplKCkpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXI6OmRpc2NhcmRG
cm9udFZpc2liaWxpdHkoKQotewotICAgIGlmIChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpIHsKLSAg
ICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIGZvciAoTGF5ZXJTZXQ6Oml0ZXJh
dG9yIGl0ZXIgPSBtX2xheWVycy5iZWdpbigpOyBpdGVyICE9IG1fbGF5ZXJzLmVuZCgpOyArK2l0
ZXIpCi0gICAgICAgICAgICAoKml0ZXIpLT5kaXNjYXJkRnJvbnRWaXNpYmlsaXR5KCk7Ci0gICAg
fQotfQotCi0vLyBEcmF3cyBhIGRlYnVnIGJvcmRlciBhcm91bmQgdGhlIGxheWVyJ3MgYm91bmRz
Lgotdm9pZCBMYXllclJlbmRlcmVyOjpkcmF3RGVidWdCb3JkZXIoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCogbGF5ZXIpCi17Ci0gICAgQ29sb3IgYm9yZGVyQ29sb3IgPSBsYXllci0+Ym9yZGVyQ29s
b3IoKTsKLQotI2lmIERFQlVHX0xBWUVSX0FOSU1BVElPTlMKLSAgICBpZiAobGF5ZXItPmhhc1J1
bm5pbmdBbmltYXRpb25zKCkpCi0gICAgICAgIGJvcmRlckNvbG9yID0gIENvbG9yKDB4MDAsIDB4
RkYsIDB4MDAsIDB4RkYpOwotI2VuZGlmCi0KLSAgICBpZiAoIWJvcmRlckNvbG9yLmFscGhhKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlJ3JlIHJlbmRlcmluZyB0byBhIHN1cmZh
Y2UsIGRvbid0IGluY2x1ZGUgZGVidWcgYm9yZGVyIGluc2lkZSB0aGUgc3VyZmFjZS4KLSAgICBp
ZiAobV9jdXJyZW50TGF5ZXJSZW5kZXJlclN1cmZhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFZlY3RvcjxGbG9hdFBvaW50PiB0cmFuc2Zvcm1lZEJvdW5kczsKLSAgICBpZiAobGF5ZXJBbHJl
YWR5T25TdXJmYWNlKGxheWVyKSkKLSAgICAgICAgdHJhbnNmb3JtZWRCb3VuZHMgPSBsYXllci0+
bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+dHJhbnNmb3JtZWRCb3VuZHMoKTsKLSAgICBlbHNlCi0g
ICAgICAgIHRyYW5zZm9ybWVkQm91bmRzID0gbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCk7Ci0K
LSAgICBkcmF3RGVidWdCb3JkZXIodHJhbnNmb3JtZWRCb3VuZHMsIGJvcmRlckNvbG9yLCBzdGQ6
Om1heCgxLjBmLCBsYXllci0+Ym9yZGVyV2lkdGgoKSkpOwotfQotCi0vLyBDbGVhcnMgYSByZWN0
YW5nbGUgaW5zaWRlIHRoZSBsYXllcidzIGJvdW5kcy4KLXZvaWQgTGF5ZXJSZW5kZXJlcjo6ZHJh
d0hvbGVQdW5jaFJlY3QoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCi17Ci0gICAgY29u
c3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNlUHJvZ3JhbShDb2xvclByb2dyYW0pOwotICAg
IGdsVW5pZm9ybTRmKG1fY29sb3JDb2xvckxvY2F0aW9uLCAwLCAwLCAwLCAwKTsKLQotICAgIGds
RW5hYmxlKEdMX0JMRU5EKTsKLSAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX1pFUk8pOwotICAg
IEZsb2F0UXVhZCBob2xlID0gbGF5ZXItPnRyYW5zZm9ybWVkSG9sZVB1bmNoUmVjdCgpOwotICAg
IGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnBvc2l0aW9uTG9jYXRpb24oKSwgMiwgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCAmaG9sZSk7Ci0gICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xF
X0ZBTiwgMCwgNCk7Ci0gICAgY2hlY2tHTEVycm9yKCk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJl
cjo6cHJlcGFyZUZyYW1lUmVjdXJzaXZlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBk
b3VibGUgYW5pbWF0aW9uVGltZSwgYm9vbCBpc0NvbnRleHRDdXJyZW50KQotewotICAgIC8vIFRo
aXMgbWlnaHQgY2F1c2UgdGhlIGxheWVyIHRvIHJlY29tcHV0ZSBzb21lIGF0dHJpYnV0ZXMuCi0g
ICAgbV9sYXN0UmVuZGVyaW5nUmVzdWx0cy5uZWVkc0FuaW1hdGlvbkZyYW1lIHw9IGxheWVyLT51
cGRhdGVBbmltYXRpb25zKGFuaW1hdGlvblRpbWUpOwotCi0gICAgaWYgKGlzQ29udGV4dEN1cnJl
bnQpIHsKLSAgICAgICAgLy8gRXZlbiBub24tdmlzaWJsZSBsYXllcnMgbmVlZCB0byBwZXJmb3Jt
IHRoZWlyIHRleHR1cmUgam9icywgb3IgdGhleSB3aWxsCi0gICAgICAgIC8vIHBpbGUgdXAgYW5k
IHdhc3RlIG1lbW9yeS4KLSAgICAgICAgaWYgKGxheWVyLT5uZWVkc1RleHR1cmUoKSkKLSAgICAg
ICAgICAgIGxheWVyLT51cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgpOwotICAgICAgICBp
ZiAobGF5ZXItPm1hc2tMYXllcigpICYmIGxheWVyLT5tYXNrTGF5ZXIoKS0+bmVlZHNUZXh0dXJl
KCkpCi0gICAgICAgICAgICBsYXllci0+bWFza0xheWVyKCktPnVwZGF0ZVRleHR1cmVDb250ZW50
c0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAg
ICAgICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIHJlcGxpY2EgPSBsYXllci0+cmVwbGljYUxh
eWVyKCk7Ci0gICAgICAgICAgICBpZiAocmVwbGljYS0+bmVlZHNUZXh0dXJlKCkpCi0gICAgICAg
ICAgICAgICAgcmVwbGljYS0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsKLSAgICAg
ICAgICAgIGlmIChyZXBsaWNhLT5tYXNrTGF5ZXIoKSAmJiByZXBsaWNhLT5tYXNrTGF5ZXIoKS0+
bmVlZHNUZXh0dXJlKCkpCi0gICAgICAgICAgICAgICAgcmVwbGljYS0+bWFza0xheWVyKCktPnVw
ZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4mIHN1YmxheWVycyA9
IGxheWVyLT5zdWJsYXllcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVy
cy5zaXplKCk7IGkrKykKLSAgICAgICAgcHJlcGFyZUZyYW1lUmVjdXJzaXZlKHN1YmxheWVyc1tp
XS5nZXQoKSwgYW5pbWF0aW9uVGltZSwgaXNDb250ZXh0Q3VycmVudCk7Ci19Ci0KLXZvaWQgTGF5
ZXJSZW5kZXJlcjo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQq
IGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBv
c2l0aW5nVGhyZWFkPiA+JiBzdXJmYWNlTGF5ZXJzLCBmbG9hdCBvcGFjaXR5LCBGbG9hdFJlY3Qg
Y2xpcFJlY3QpCi17Ci0gICAgLy8gVGhlIGNvbnRyYWN0IGZvciBMYXllckNvbXBvc2l0aW5nVGhy
ZWFkOjpzZXRMYXllclJlbmRlcmVyIGlzIGl0IG11c3QgYmUgc2V0IGlmIHRoZSBsYXllciBoYXMg
YmVlbiByZW5kZXJlZC4KLSAgICAvLyBTbyBkbyBpdCBub3csIGJlZm9yZSB3ZSByZW5kZXIgaXQg
aW4gY29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlLgotICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVy
KHRoaXMpOwotICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgIGxheWVyLT5tYXNr
TGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKLSAgICBpZiAobGF5ZXItPnJlcGxpY2FM
YXllcigpKSB7Ci0gICAgICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIHJlcGxpY2EgPSBsYXll
ci0+cmVwbGljYUxheWVyKCk7Ci0gICAgICAgIHJlcGxpY2EtPnNldExheWVyUmVuZGVyZXIodGhp
cyk7Ci0gICAgICAgIGlmIChyZXBsaWNhLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgIHJlcGxp
Y2EtPm1hc2tMYXllcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwotICAgIH0KLQotICAgIC8v
IENvbXB1dGUgdGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb24gdGhhdCB3aWxsIGJlIGFwcGxp
ZWQgdG8gdGhpcyBsYXllciBhbmQKLSAgICAvLyBhbGwgaXRzIHN1YmxheWVycy4gSXQncyBpbXBv
cnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3NpdGlvbgotICAgIC8vIGlzIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIncyBhbmNob3IgcG9pbnQuIEFsc28sIHRoZSBjb29yZGlu
YXRlIHN5c3RlbSB1c2VkCi0gICAgLy8gYXNzdW1lcyB0aGF0IHRoZSBvcmlnaW4gaXMgYXQgdGhl
IGxvd2VyIGxlZnQgZXZlbiB0aG91Z2ggdGhlIGNvb3JkaW5hdGVzIHRoZSBicm93c2VyCi0gICAg
Ly8gZ2l2ZXMgdXMgZm9yIHRoZSBsYXllcnMgYXJlIGZvciB0aGUgdXBwZXIgbGVmdCBjb3JuZXIu
IFRoZSBZIGZsaXAgaGFwcGVucyB2aWEKLSAgICAvLyB0aGUgb3J0aG9ncmFwaGljIHByb2plY3Rp
b24gYXBwbGllZCBhdCByZW5kZXIgdGltZS4KLSAgICAvLyBUaGUgdHJhbnNmb3JtYXRpb24gY2hh
aW4gZm9yIHRoZSBsYXllciBpcyAodXNpbmcgdGhlIE1hdHJpeCB4IFZlY3RvciBvcmRlcik6Ci0g
ICAgLy8gTSA9IE1bcF0gKiBUcltsXSAqIE1bbF0gKiBUcltjXQotICAgIC8vIFdoZXJlIE1bcF0g
aXMgdGhlIHBhcmVudCBtYXRyaXggcGFzc2VkIGRvd24gdG8gdGhlIGZ1bmN0aW9uCi0gICAgLy8g
ICAgICAgVHJbbF0gaXMgdGhlIHRyYW5zbGF0aW9uIG1hdHJpeCBsb2NhdGluZyB0aGUgbGF5ZXIn
cyBhbmNob3IgcG9pbnQKLSAgICAvLyAgICAgICBUcltjXSBpcyB0aGUgdHJhbnNsYXRpb24gb2Zm
c2V0IGJldHdlZW4gdGhlIGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIK
LSAgICAvLyAgICAgICBNW2xdIGlzIHRoZSBsYXllcidzIG1hdHJpeCAoYXBwbGllZCBhdCB0aGUg
YW5jaG9yIHBvaW50KQotICAgIC8vIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBjb29yZGluYXRl
IHN5c3RlbSB3aG9zZSBvcmlnaW4gaXMgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuCi0gICAgLy8g
Tm90ZSB0aGF0IHRoZSBmaW5hbCBtYXRyaXggdXNlZCBieSB0aGUgc2hhZGVyIGZvciB0aGUgbGF5
ZXIgaXMgUCAqIE0gKiBTIC4gVGhpcyBmaW5hbCBwcm9kdWN0Ci0gICAgLy8gaXMgY29tcHV0ZWQg
aW4gZHJhd1RleHR1cmVkUXVhZCgpLgotICAgIC8vIFdoZXJlOiBQIGlzIHRoZSBwcm9qZWN0aW9u
IG1hdHJpeAotICAgIC8vICAgICAgICBNIGlzIHRoZSBsYXllcidzIG1hdHJpeCBjb21wdXRlZCBh
Ym92ZQotICAgIC8vICAgICAgICBTIGlzIHRoZSBzY2FsZSBhZGp1c3RtZW50ICh0byBzY2FsZSB1
cCB0byB0aGUgbGF5ZXIgc2l6ZSkKLSAgICBGbG9hdFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5k
cygpOwotICAgIGlmIChsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKLSAgICAgICAgYm91
bmRzLnNjYWxlKDEuMCAvIG1fc2NhbGUpOwotICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQgPSBs
YXllci0+YW5jaG9yUG9pbnQoKTsKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbGF5ZXItPnBv
c2l0aW9uKCk7Ci0KLSAgICAvLyBMYXllciB3aG9zZSBoYXNGaXhlZENvbnRhaW5lciBpcyB0cnVl
IHdpbGwgZ2V0IHNjcm9sbGVkIHJlbGF0aXZlIHRvCi0gICAgLy8gdGhlIGZpeGVkIHBvc2l0aW9u
ZWQgcGFyZW50LgotICAgIGlmICghbGF5ZXItPmhhc0ZpeGVkQ29udGFpbmVyKCkgJiYgKGxheWVy
LT5pc0ZpeGVkUG9zaXRpb24oKSB8fCBsYXllci0+aGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgp
KSkgewotICAgICAgICBGbG9hdFJlY3QgbGF5b3V0UmVjdCA9IG1fbGF5b3V0UmVjdDsKLSAgICAg
ICAgRmxvYXRTaXplIGNvbnRlbnRzU2l6ZSA9IG1fY29udGVudHNTaXplOwotICAgICAgICBGbG9h
dFJlY3QgdmlzaWJsZVJlY3QgPSBtX3Zpc2libGVSZWN0OwotICAgICAgICBmb3IgKExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqIGN1cnIgPSBsYXllci0+c3VwZXJsYXllcigpOyBjdXJyOyBjdXJyID0g
Y3Vyci0+c3VwZXJsYXllcigpKSB7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyLT5pc0NvbnRhaW5l
ckZvckZpeGVkUG9zaXRpb25MYXllcnMoKSkgewotICAgICAgICAgICAgICAgIGxheW91dFJlY3Qg
PSBjdXJyLT5mcmFtZVZpc2libGVSZWN0KCk7Ci0gICAgICAgICAgICAgICAgY29udGVudHNTaXpl
ID0gY3Vyci0+ZnJhbWVDb250ZW50c1NpemUoKTsKLQotICAgICAgICAgICAgICAgIC8vIElmIHdl
IHJlYWNoIGEgY29udGFpbmVyIGZvciBmaXhlZCBwb3NpdGlvbiBsYXllcnMsIGFuZCBpdCBoYXMg
aXRzIG92ZXJyaWRlJ3MgcG9zaXRpb24gc2V0LCBpdCBtZWFucyBpdCBpcyBhIHNjcm9sbGFibGUg
aWZyYW1lCi0gICAgICAgICAgICAgICAgLy8gY3VycmVudGx5IGJlaW5nIHNjcm9sbGVkLiBPdGhl
cndpc2UsIHVzZSB0aGUgV2ViS2l0LXRocmVhZCBzY3JvbGwgcG9zaXRpb24gc3RvcmVkIGluIGZy
YW1lVmlzaWJsZVJlY3QoKS4KLSAgICAgICAgICAgICAgICBpZiAoY3Vyci0+b3ZlcnJpZGUoKS0+
aXNQb3NpdGlvblNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEludmVydGVkIGxvZ2lj
IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vIEZsb2F0UG9pbnQgbGF5ZXJQb3NpdGlvbigtc2Ny
b2xsUG9zaXRpb24ueCgpICsgYW5jaG9yLngoKSAqIGJvdW5kcy53aWR0aCgpLAotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgLXNjcm9sbFBvc2l0aW9uLnko
KSArIGFuY2hvci55KCkgKiBib3VuZHMuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgICAgICBG
bG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgLShjdXJy
LT5vdmVycmlkZSgpLT5wb3NpdGlvbigpLngoKSAtIChjdXJyLT5hbmNob3JQb2ludCgpLngoKSAq
IGN1cnItPmJvdW5kcygpLndpZHRoKCkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC0oY3Vy
ci0+b3ZlcnJpZGUoKS0+cG9zaXRpb24oKS55KCkgLSAoY3Vyci0+YW5jaG9yUG9pbnQoKS55KCkg
KiBjdXJyLT5ib3VuZHMoKS5oZWlnaHQoKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgdmlzaWJs
ZVJlY3QgPSBGbG9hdFJlY3Qoc2Nyb2xsUG9zaXRpb24sIGxheW91dFJlY3Quc2l6ZSgpKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJlY3QgPSBs
YXlvdXRSZWN0OwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBGbG9hdFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlvbiA9IEZsb2F0
UG9pbnQoMCwgMCkgKyAoY29udGVudHNTaXplIC0gdmlzaWJsZVJlY3Quc2l6ZSgpKTsKLSAgICAg
ICAgRmxvYXRQb2ludCBtYXhpbXVtTGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBGbG9hdFBvaW50KDAs
IDApICsgKGNvbnRlbnRzU2l6ZSAtIGxheW91dFJlY3Quc2l6ZSgpKTsKLQotICAgICAgICAvLyBU
aGUgYmFzaWMgaWRlYSBoZXJlIGlzIHRvIHNldCB2aXNpYmxlIHgveSB0byB0aGUgdmFsdWUgd2Ug
d2FudCwgYW5kCi0gICAgICAgIC8vIGxheW91dCB4L3kgdG8gdGhlIHZhbHVlIFdlYkNvcmUgbGF5
b3V0ZWQgdGhlIGZpeGVkIGVsZW1lbnQgdG8uCi0gICAgICAgIGZsb2F0IHZpc2libGVZOwotICAg
ICAgICBmbG9hdCBsYXlvdXRZOwotICAgICAgICBpZiAobGF5ZXItPmlzRml4ZWRUb1RvcCgpKSB7
Ci0gICAgICAgICAgICB2aXNpYmxlWSA9IG1heCgwLjBmLCBtaW4obWF4aW11bVNjcm9sbFBvc2l0
aW9uLnkoKSwgdmlzaWJsZVJlY3QueSgpKSk7Ci0gICAgICAgICAgICBsYXlvdXRZID0gbWF4KDAu
MGYsIG1pbihtYXhpbXVtTGF5b3V0U2Nyb2xsUG9zaXRpb24ueSgpLCBsYXlvdXRSZWN0LnkoKSkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmlzaWJsZVkgPSBtaW4oY29udGVudHNT
aXplLmhlaWdodCgpLCB2aXNpYmxlUmVjdC55KCkgKyB2aXNpYmxlUmVjdC5oZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBsYXlvdXRZID0gbWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgbWF4KDAuMGYs
IGxheW91dFJlY3QueSgpKSArIGxheW91dFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHBvc2l0aW9uLnNldFkocG9zaXRpb24ueSgpICsgKHZpc2libGVZIC0gbGF5b3V0WSkpOwot
Ci0gICAgICAgIGZsb2F0IHZpc2libGVYOwotICAgICAgICBmbG9hdCBsYXlvdXRYOwotICAgICAg
ICBpZiAobGF5ZXItPmlzRml4ZWRUb0xlZnQoKSkgewotICAgICAgICAgICAgdmlzaWJsZVggPSBt
YXgoMC4wZiwgbWluKG1heGltdW1TY3JvbGxQb3NpdGlvbi54KCksIHZpc2libGVSZWN0LngoKSkp
OwotICAgICAgICAgICAgbGF5b3V0WCA9IG1heCgwLjBmLCBtaW4obWF4aW11bUxheW91dFNjcm9s
bFBvc2l0aW9uLngoKSwgbGF5b3V0UmVjdC54KCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHZpc2libGVYID0gbWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlUmVjdC54
KCkgKyB2aXNpYmxlUmVjdC53aWR0aCgpKTsKLSAgICAgICAgICAgIGxheW91dFggPSBtaW4oY29u
dGVudHNTaXplLndpZHRoKCksIG1heCgwLjBmLCBsYXlvdXRSZWN0LngoKSkgKyBsYXlvdXRSZWN0
LndpZHRoKCkpOwotICAgICAgICB9Ci0gICAgICAgIHBvc2l0aW9uLnNldFgocG9zaXRpb24ueCgp
ICsgKHZpc2libGVYIC0gbGF5b3V0WCkpOwotICAgIH0KLQotICAgIC8vIE9mZnNldCBiZXR3ZWVu
IGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KLSAgICBmbG9hdCBjZW50
ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lkdGgoKTsKLSAg
ICBmbG9hdCBjZW50ZXJPZmZzZXRZID0gKDAuNSAtIGFuY2hvclBvaW50LnkoKSkgKiBib3VuZHMu
aGVpZ2h0KCk7Ci0KLSAgICAvLyBNID0gTVtwXQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxv
Y2FsTWF0cml4ID0gbWF0cml4OwotICAgIC8vIE0gPSBNW3BdICogVHJbbF0KLSAgICBsb2NhbE1h
dHJpeC50cmFuc2xhdGUzZChwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSwgbGF5ZXItPmFuY2hv
clBvaW50WigpKTsKLSAgICAvLyBNID0gTVtwXSAqIFRyW2xdICogTVtsXQotICAgIGxvY2FsTWF0
cml4Lm11bHRpcGx5KGxheWVyLT50cmFuc2Zvcm0oKSk7Ci0gICAgLy8gTSA9IE1bcF0gKiBUclts
XSAqIE1bbF0gKiBUcltjXQotICAgIGxvY2FsTWF0cml4LnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNl
dFgsIGNlbnRlck9mZnNldFksIC1sYXllci0+YW5jaG9yUG9pbnRaKCkpOwotCi0gICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBsYXllcidzIG9wYWNpdHkuCi0gICAgb3BhY2l0eSAqPSBsYXllci0+b3BhY2l0
eSgpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxQcm9qZWN0aW9uTWF0cml4ID0g
cHJvamVjdGlvbk1hdHJpeDsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgYm9vbCB1c2VM
YXllclJlbmRlcmVyU3VyZmFjZSA9IGxheWVyLT5tYXNrTGF5ZXIoKSB8fCBsYXllci0+cmVwbGlj
YUxheWVyKCkgfHwgbGF5ZXItPmZpbHRlcnMoKS5zaXplKCk7Ci0jZWxzZQotICAgIGJvb2wgdXNl
TGF5ZXJSZW5kZXJlclN1cmZhY2UgPSBsYXllci0+bWFza0xheWVyKCkgfHwgbGF5ZXItPnJlcGxp
Y2FMYXllcigpOwotI2VuZGlmCi0gICAgaWYgKCF1c2VMYXllclJlbmRlcmVyU3VyZmFjZSkgewot
ICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkob3BhY2l0eSk7Ci0gICAgICAgIGxheWVyLT5j
bGVhckxheWVyUmVuZGVyZXJTdXJmYWNlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFs
YXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKSkKLSAgICAgICAgICAgIGxheWVyLT5jcmVhdGVM
YXllclJlbmRlcmVyU3VyZmFjZSgpOwotCi0gICAgICAgIExheWVyUmVuZGVyZXJTdXJmYWNlKiBz
dXJmYWNlID0gbGF5ZXItPmxheWVyUmVuZGVyZXJTdXJmYWNlKCk7Ci0KLSAgICAgICAgbGF5ZXIt
PnNldERyYXdPcGFjaXR5KDEuMCk7Ci0gICAgICAgIHN1cmZhY2UtPnNldERyYXdPcGFjaXR5KG9w
YWNpdHkpOwotCi0gICAgICAgIHN1cmZhY2UtPnNldERyYXdUcmFuc2Zvcm0obG9jYWxNYXRyaXgs
IHByb2plY3Rpb25NYXRyaXgpOwotICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKSB7
Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhTWF0cml4ID0gbG9jYWxN
YXRyaXg7Ci0gICAgICAgICAgICByZXBsaWNhTWF0cml4LnRyYW5zbGF0ZTNkKC0wLjUgKiBib3Vu
ZHMud2lkdGgoKSwgLTAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7Ci0gICAgICAgICAgICByZXBs
aWNhTWF0cml4LnRyYW5zbGF0ZTNkKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54
KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCksIDApOwotICAgICAgICAg
ICAgcmVwbGljYU1hdHJpeC5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVyKCktPnRyYW5zZm9y
bSgpKTsKLSAgICAgICAgICAgIHJlcGxpY2FNYXRyaXgudHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0
WCwgY2VudGVyT2Zmc2V0WSwgMCk7Ci0gICAgICAgICAgICBzdXJmYWNlLT5zZXRSZXBsaWNhRHJh
d1RyYW5zZm9ybShyZXBsaWNhTWF0cml4LCBwcm9qZWN0aW9uTWF0cml4KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVj
dChGbG9hdFBvaW50Ojp6ZXJvKCksIGJvdW5kcykpOwotICAgICAgICBzdXJmYWNlLT5zZXRDb250
ZW50UmVjdChjb250ZW50UmVjdCk7Ci0KLSAgICAgICAgbG9jYWxQcm9qZWN0aW9uTWF0cml4ID0g
b3J0aG9NYXRyaXgoY29udGVudFJlY3QueCgpLCBjb250ZW50UmVjdC5tYXhYKCksIGNvbnRlbnRS
ZWN0LnkoKSwgY29udGVudFJlY3QubWF4WSgpLCAtMTAwMCwgMTAwMCk7Ci0gICAgICAgIC8vIFRo
ZSBvcmlnaW4gb2YgdGhlIG5ldyBzdXJmYWNlIGlzIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0
aGUgbGF5ZXIuCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm07Ci0g
ICAgICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoMC41ICogYm91bmRzLndpZHRoKCksIDAu
NSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIC8vIFRoaXMgbGF5ZXIgd2lsbCBzdGFy
dCB1c2luZyBuZXcgdHJhbnNmb3JtYXRpb24uCi0gICAgICAgIGxvY2FsTWF0cml4ID0gZHJhd1Ry
YW5zZm9ybTsKLQotICAgICAgICBzdXJmYWNlTGF5ZXJzLmFwcGVuZChsYXllcik7Ci0gICAgfQot
Ci0gICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm0obV9zY2FsZSwgbG9jYWxNYXRyaXgsIGxvY2Fs
UHJvamVjdGlvbk1hdHJpeCk7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgYm9vbCBsYXllclZp
c2libGUgPSBjbGlwUmVjdC5pbnRlcnNlY3RzKGxheWVyLT5ib3VuZGluZ0JveCgpKSB8fCBsYXll
ci0+bWVkaWFQbGF5ZXIoKTsKLSNlbHNlCi0gICAgYm9vbCBsYXllclZpc2libGUgPSBjbGlwUmVj
dC5pbnRlcnNlY3RzKGxheWVyLT5ib3VuZGluZ0JveCgpKTsKLSNlbmRpZgotCi0gICAgaWYgKGxh
eWVyLT5uZWVkc1RleHR1cmUoKSAmJiBsYXllclZpc2libGUpIHsKLSAgICAgICAgSW50UmVjdCBk
aXJ0eVJlY3QgPSB0b1dpbmRvd0Nvb3JkaW5hdGVzKGludGVyc2VjdGlvbihsYXllci0+Ym91bmRp
bmdCb3goKSwgY2xpcFJlY3QpKTsKLSAgICAgICAgbV9sYXN0UmVuZGVyaW5nUmVzdWx0cy5hZGRE
aXJ0eVJlY3QoZGlydHlSZWN0KTsKLSAgICB9Ci0KLSAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3Vu
ZHMoKSkKLSAgICAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGxheWVyLT5ib3VuZGluZ0JveCgpKTsK
LQotICAgIC8vIEZsYXR0ZW4gdG8gMkQgaWYgdGhlIGxheWVyIGRvZXNuJ3QgcHJlc2VydmUgM0Qu
Ci0gICAgaWYgKCFsYXllci0+cHJlc2VydmVzM0QoKSkgewotICAgICAgICBsb2NhbE1hdHJpeC5z
ZXRNMTMoMCk7Ci0gICAgICAgIGxvY2FsTWF0cml4LnNldE0yMygwKTsKLSAgICAgICAgbG9jYWxN
YXRyaXguc2V0TTMxKDApOwotICAgICAgICBsb2NhbE1hdHJpeC5zZXRNMzIoMCk7Ci0gICAgICAg
IGxvY2FsTWF0cml4LnNldE0zMygxKTsKLSAgICAgICAgbG9jYWxNYXRyaXguc2V0TTM0KDApOwot
ICAgICAgICBsb2NhbE1hdHJpeC5zZXRNNDMoMCk7Ci0gICAgfQotCi0gICAgLy8gQXBwbHkgdGhl
IHN1YmxheWVyIHRyYW5zZm9ybS4KLSAgICBsb2NhbE1hdHJpeC5tdWx0aXBseShsYXllci0+c3Vi
bGF5ZXJUcmFuc2Zvcm0oKSk7Ci0KLSAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSBzdWJsYXllcnMg
aXMgYWN0dWFsbHkgdGhlIGJvdHRvbSBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIKLSAgICAvLyAo
b3IgdG9wIGxlZnQgd2hlbiBsb29raW5nIGl0IGl0IGZyb20gdGhlIGJyb3dzZXIncyBwZXNwZWN0
aXZlKSBpbnN0ZWFkIG9mIHRoZSBjZW50ZXIuCi0gICAgLy8gVGhlIG1hdHJpeCBwYXNzZWQgZG93
biB0byB0aGUgc3VibGF5ZXJzIGlzIHRoZXJlZm9yZToKLSAgICAvLyBNW3NdID0gTSAqIFRyWy1j
ZW50ZXJdCi0gICAgbG9jYWxNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0aCgpICogMC41
LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAwKTsKLQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPnN1YmxheWVycygp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQotICAg
ICAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpLCBsb2NhbE1hdHJp
eCwgbG9jYWxQcm9qZWN0aW9uTWF0cml4LCBzdXJmYWNlTGF5ZXJzLCBvcGFjaXR5LCBjbGlwUmVj
dCk7Ci19Ci0KLXN0YXRpYyBib29sIGhhc1JvdGF0aW9uYWxDb21wb25lbnQoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG0pCi17Ci0gICAgcmV0dXJuIG0ubTEyKCkgfHwgbS5tMTMoKSB8fCBt
Lm0yMygpIHx8IG0ubTIxKCkgfHwgbS5tMzEoKSB8fCBtLm0zMigpOwotfQotCi1ib29sIExheWVy
UmVuZGVyZXI6OmxheWVyQWxyZWFkeU9uU3VyZmFjZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBs
YXllcikgY29uc3QKLXsKLSAgICByZXR1cm4gbGF5ZXItPmxheWVyUmVuZGVyZXJTdXJmYWNlKCkg
JiYgbGF5ZXItPmxheWVyUmVuZGVyZXJTdXJmYWNlKCkgIT0gbV9jdXJyZW50TGF5ZXJSZW5kZXJl
clN1cmZhY2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3QzRFByZXNlcnZpbmdMYXllcnMoVmVj
dG9yPExheWVyQ29tcG9zaXRpbmdUaHJlYWQqPiYgbGF5ZXJzKQotewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGF5ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqIGxheWVyID0gbGF5ZXJzW2ldOwotICAgICAgICBpZiAoIWxheWVyLT5wcmVzZXJ2
ZXMzRCgpIHx8ICFsYXllci0+c3VibGF5ZXJzKCkuc2l6ZSgpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgVmVjdG9yPExheWVyQ29tcG9zaXRpbmdUaHJlYWQqPiBzdWJsYXllcnMg
PSByYXdQdHJWZWN0b3JGcm9tUmVmUHRyVmVjdG9yKGxheWVyLT5zdWJsYXllcnMoKSk7Ci0gICAg
ICAgIGNvbGxlY3QzRFByZXNlcnZpbmdMYXllcnMoc3VibGF5ZXJzKTsKLSAgICAgICAgbGF5ZXJz
Lmluc2VydChpKzEsIHN1YmxheWVycyk7Ci0gICAgICAgIGkgKz0gc3VibGF5ZXJzLnNpemUoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZl
KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBpbnQgc3RlbmNpbFZhbHVlLCBGbG9hdFJl
Y3QgY2xpcFJlY3QpCi17Ci0gICAgRmxvYXRSZWN0IHJlY3Q7Ci0gICAgaWYgKGxheWVyQWxyZWFk
eU9uU3VyZmFjZShsYXllcikpCi0gICAgICAgIHJlY3QgPSBsYXllci0+bGF5ZXJSZW5kZXJlclN1
cmZhY2UoKS0+Ym91bmRpbmdCb3goKTsKLSAgICBlbHNlCi0gICAgICAgIHJlY3QgPSBsYXllci0+
Ym91bmRpbmdCb3goKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBib29sIGxheWVyVmlzaWJs
ZSA9IGNsaXBSZWN0LmludGVyc2VjdHMocmVjdCkgfHwgbGF5ZXItPm1lZGlhUGxheWVyKCk7Ci0j
ZWxzZQotICAgIGJvb2wgbGF5ZXJWaXNpYmxlID0gY2xpcFJlY3QuaW50ZXJzZWN0cyhyZWN0KTsK
LSNlbmRpZgotCi0gICAgaWYgKGxheWVyLT5pc0NhbnZhc0xheWVyKCkpCi0gICAgICAgIGxheWVy
VmlzaWJsZSA9IGxheWVyVmlzaWJsZSAmJiBsYXllci0+aXNMYXllclZpc2libGUoKTsKLQotICAg
IGxheWVyLT5zZXRWaXNpYmxlKGxheWVyVmlzaWJsZSk7Ci0KLSAgICAvLyBOb3RlIHRoYXQgdGhl
cmUgYXJlIHR3byB0eXBlcyBvZiBsYXllcnM6Ci0gICAgLy8gMS4gTGF5ZXJzIHRoYXQgaGF2ZSB0
aGVpciBvd24gR3JhcGhpY3NDb250ZXh0IGFuZCBjYW4gZHJhdyB0aGVpciBjb250ZW50cyBvbiBk
ZW1hbmQgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSA9PSB0cnVlKS4KLSAgICAvLyAyLiBMYXllcnMg
dGhhdCBhcmUganVzdCBjb250YWluZXJzIG9mIGltYWdlcy92aWRlby9ldGMgdGhhdCBkb24ndCBv
d24gYSBHcmFwaGljc0NvbnRleHQgKGxheWVyLT5jb250ZW50cygpID09IHRydWUpLgotCi0gICAg
aWYgKChsYXllci0+bmVlZHNUZXh0dXJlKCkgfHwgbGF5ZXItPmxheWVyUmVuZGVyZXJTdXJmYWNl
KCkpICYmIGxheWVyVmlzaWJsZSkgewotICAgICAgICB1cGRhdGVTY2lzc29ySWZOZWVkZWQoY2xp
cFJlY3QpOwotCi0gICAgICAgIGlmIChzdGVuY2lsVmFsdWUpIHsKLSAgICAgICAgICAgIGdsU3Rl
bmNpbEZ1bmMoR0xfRVFVQUwsIHN0ZW5jaWxWYWx1ZSwgMHhmZik7Ci0gICAgICAgICAgICBnbFN0
ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9LRUVQKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsYXllci0+ZG91YmxlU2lkZWQoKSkKLSAgICAgICAgICAgIGdsRGlzYWJsZShHTF9DVUxM
X0ZBQ0UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnbEVuYWJsZShHTF9DVUxMX0ZBQ0Up
OwotCi0gICAgICAgIGlmIChsYXllci0+aGFzVmlzaWJsZUhvbGVQdW5jaFJlY3QoKSkKLSAgICAg
ICAgICAgIGRyYXdIb2xlUHVuY2hSZWN0KGxheWVyKTsKLQotICAgICAgICAvLyBEcmF3IHRoZSBz
dXJmYWNlIG9udG8gYW5vdGhlciBzdXJmYWNlIG9yIHNjcmVlbi4KLSAgICAgICAgYm9vbCBkcmF3
U3VyZmFjZSA9IGxheWVyQWxyZWFkeU9uU3VyZmFjZShsYXllcik7Ci0KLSAgICAgICAgaWYgKCFk
cmF3U3VyZmFjZSkgewotICAgICAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0g
dXNlUHJvZ3JhbShMYXllclByb2dyYW1SR0JBKTsKLSAgICAgICAgICAgIGxheWVyLT5kcmF3VGV4
dHVyZXMocHJvZ3JhbSwgbV9zY2FsZSwgbV92aXNpYmxlUmVjdCwgY2xpcFJlY3QpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRHJhdyB0aGUgcmVmbGVjdGlvbiBpZiBpdCBleGlz
dHMuCi0gICAgICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSWYgdGhpcyBsYXllciBhbmQgaXRzIHJlZmxlY3Rpb24gYm90aCBoYXZlIG1hc2ss
IHdlIG5lZWQgYW5vdGhlciB0ZW1wb3Jhcnkgc3VyZmFjZS4KLSAgICAgICAgICAgICAgICAvLyBT
aW5jZSB0aGlzIHVzZSBjYXNlIHNob3VsZCBiZSByYXJlLCBjdXJyZW50bHkgaXQncyBub3QgaGFu
ZGxlZCBhbmQgdGhlIG1hc2sgZm9yCi0gICAgICAgICAgICAgICAgLy8gdGhlIHJlZmxlY3Rpb24g
aXMgYXBwbGllZCBvbmx5IHdoZW4gdGhpcyBsYXllciBoYXMgbm8gbWFzay4KLSAgICAgICAgICAg
ICAgICBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBtYXNrID0gbGF5ZXItPm1hc2tMYXllcigpOwot
ICAgICAgICAgICAgICAgIGlmICghbWFzayAmJiBsYXllci0+cmVwbGljYUxheWVyKCkpCi0gICAg
ICAgICAgICAgICAgICAgIG1hc2sgPSBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigp
OwotCi0gICAgICAgICAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNlUHJv
Z3JhbShtYXNrID8gTGF5ZXJNYXNrUHJvZ3JhbVJHQkEgOiBMYXllclByb2dyYW1SR0JBKTsKLSAg
ICAgICAgICAgICAgICBsYXllci0+ZHJhd1N1cmZhY2UocHJvZ3JhbSwgbGF5ZXItPmxheWVyUmVu
ZGVyZXJTdXJmYWNlKCktPnJlcGxpY2FEcmF3VHJhbnNmb3JtKCksIG1hc2spOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0gPSB1c2VQcm9n
cmFtKGxheWVyLT5tYXNrTGF5ZXIoKSA/IExheWVyTWFza1Byb2dyYW1SR0JBIDogTGF5ZXJQcm9n
cmFtUkdCQSk7Ci0gICAgICAgICAgICBsYXllci0+ZHJhd1N1cmZhY2UocHJvZ3JhbSwgbGF5ZXIt
PmxheWVyUmVuZGVyZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zvcm0oKSwgbGF5ZXItPm1hc2tMYXll
cigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIERyYXcgdGhlIGRlYnVnIGJvcmRlciBp
ZiB0aGVyZSBpcyBvbmUuCi0gICAgZHJhd0RlYnVnQm9yZGVyKGxheWVyKTsKLQotICAgIC8vIFRo
ZSB0ZXh0dXJlIGZvciB0aGUgTGF5ZXJSZW5kZXJlclN1cmZhY2UgY2FuIGJlIHJlbGVhc2VkIGFm
dGVyIHRoZSBzdXJmYWNlIHdhcyBkcmF3biBvbiBhbm90aGVyIHN1cmZhY2UuCi0gICAgaWYgKGxh
eWVyQWxyZWFkeU9uU3VyZmFjZShsYXllcikpIHsKLSAgICAgICAgbGF5ZXItPmxheWVyUmVuZGVy
ZXJTdXJmYWNlKCktPnJlbGVhc2VUZXh0dXJlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBJZiB3ZSBuZWVkIHRvIG1hc2sgdG8gYm91bmRzIGJ1dCB0aGUgdHJhbnNmb3JtYXRp
b24gaGFzIGEgcm90YXRpb25hbCBjb21wb25lbnQKLSAgICAvLyB0byBpdCwgc2Npc3NvcmluZyBp
cyBub3QgZW5vdWdoIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgc3RlbmNpbCBidWZmZXIgZm9yIGNs
aXBwaW5nLgotICAgIGJvb2wgc3RlbmNpbENsaXAgPSBsYXllci0+bWFza3NUb0JvdW5kcygpICYm
IGhhc1JvdGF0aW9uYWxDb21wb25lbnQobGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0KLSAgICBp
ZiAoc3RlbmNpbENsaXApIHsKLSAgICAgICAgaWYgKCFtX3N0ZW5jaWxDbGVhcmVkKSB7Ci0gICAg
ICAgICAgICBnbFN0ZW5jaWxNYXNrKDB4ZmZmZmZmZmYpOwotICAgICAgICAgICAgZ2xDbGVhclN0
ZW5jaWwoMCk7Ci0gICAgICAgICAgICBnbENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCk7Ci0g
ICAgICAgICAgICBtX3N0ZW5jaWxDbGVhcmVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGdsRW5hYmxlKEdMX1NURU5DSUxfVEVTVCk7Ci0gICAgICAgIGdsU3RlbmNpbEZ1bmMoR0xfRVFV
QUwsIHN0ZW5jaWxWYWx1ZSwgMHhmZik7Ci0gICAgICAgIGdsU3RlbmNpbE9wKEdMX0tFRVAsIEdM
X0lOQ1IsIEdMX0lOQ1IpOwotCi0gICAgICAgIHVwZGF0ZVNjaXNzb3JJZk5lZWRlZChjbGlwUmVj
dCk7Ci0gICAgICAgIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSA9IHVzZVByb2dyYW0oQ29s
b3JQcm9ncmFtKTsKLSAgICAgICAgZ2xDb2xvck1hc2soR0xfRkFMU0UsIEdMX0ZBTFNFLCBHTF9G
QUxTRSwgR0xfRkFMU0UpOwotICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5w
b3NpdGlvbkxvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgbGF5ZXItPnRyYW5z
Zm9ybWVkQm91bmRzKCkuZGF0YSgpKTsKLSAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xF
X0ZBTiwgMCwgbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkuc2l6ZSgpKTsKLSAgICAgICAgZ2xD
b2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7Ci0gICAgfQotCi0g
ICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkpCi0gICAgICAgIGNsaXBSZWN0LmludGVyc2Vj
dChsYXllci0+Ym91bmRpbmdCb3goKSk7Ci0KLSAgICAvLyBIZXJlLCB3ZSBuZWVkIHRvIHNvcnQg
dGhlIHdob2xlIHN1YnRyZWUgb2YgbGF5ZXJzIHdpdGggcHJlc2VydmUtM2QuIEl0Ci0gICAgLy8g
YWZmZWN0cyBhbGwgY2hpbGRyZW4sIGFuZCB0aGUgY2hpbGRyZW4gb2YgYW55IGNoaWxkcmVuIHdp
dGggcHJlc2VydmUtM2QsCi0gICAgLy8gYW5kIHNvIG9uLgotICAgIFZlY3RvcjxMYXllckNvbXBv
c2l0aW5nVGhyZWFkKj4gc3VibGF5ZXJzID0gcmF3UHRyVmVjdG9yRnJvbVJlZlB0clZlY3Rvcihs
YXllci0+c3VibGF5ZXJzKCkpOwotCi0gICAgYm9vbCBwcmVzZXJ2ZXMzRCA9IGxheWVyLT5wcmVz
ZXJ2ZXMzRCgpOwotICAgIGJvb2wgc3VwZXJsYXllclByZXNlcnZlczNEID0gbGF5ZXItPnN1cGVy
bGF5ZXIoKSAmJiBsYXllci0+c3VwZXJsYXllcigpLT5wcmVzZXJ2ZXMzRCgpOwotCi0gICAgLy8g
Q29sbGVjdCBhbmQgcmVuZGVyIGFsbCBzdWJsYXllcnMgd2l0aCBwcmVzZXJ2ZXMtM0QuCi0gICAg
Ly8gSWYgdGhlIHN1cGVybGF5ZXIgcHJlc2VydmVzIDNELCB3ZSd2ZSBhbHJlYWR5IGNvbGxlY3Rl
ZCBhbmQgcmVuZGVyZWQgaXRzCi0gICAgLy8gY2hpbGRyZW4sIHNvIGJhaWwuCi0gICAgaWYgKHBy
ZXNlcnZlczNEICYmICFzdXBlcmxheWVyUHJlc2VydmVzM0QpIHsKLSAgICAgICAgY29sbGVjdDNE
UHJlc2VydmluZ0xheWVycyhzdWJsYXllcnMpOwotICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KHN1
YmxheWVycy5iZWdpbigpLCBzdWJsYXllcnMuZW5kKCksIGNvbXBhcmVMYXllclcpOwotICAgIH0K
LQotICAgIGludCBuZXdTdGVuY2lsVmFsdWUgPSBzdGVuY2lsQ2xpcCA/IHN0ZW5jaWxWYWx1ZSsx
IDogc3RlbmNpbFZhbHVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIHN1YmxheWVyID0g
c3VibGF5ZXJzW2ldOwotICAgICAgICAvLyBUaGUgcm9vdCBvZiB0aGUgM2QtcHJlc2VydmluZyBz
dWJ0cmVlIGhhcyBjb2xsZWN0ZWQgYWxsCi0gICAgICAgIC8vIDNkLXByZXNlcnZpbmcgbGF5ZXJz
IGFuZCB0aGVpciBjaGlsZHJlbiBhbmQgd2lsbCByZW5kZXIgdGhlbSBhbGwgaW4KLSAgICAgICAg
Ly8gdGhlIHJpZ2h0IG9yZGVyLgotICAgICAgICBpZiAocHJlc2VydmVzM0QgJiYgc3VwZXJsYXll
clByZXNlcnZlczNEKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY29tcG9zaXRl
TGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyLCBuZXdTdGVuY2lsVmFsdWUsIGNsaXBSZWN0KTsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RlbmNpbENsaXApIHsKLSAgICAgICAgZ2xTdGVuY2lsRnVuYyhHTF9M
RVFVQUwsIHN0ZW5jaWxWYWx1ZSwgMHhmZik7Ci0gICAgICAgIGdsU3RlbmNpbE9wKEdMX0tFRVAs
IEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UpOwotCi0gICAgICAgIHVwZGF0ZVNjaXNzb3JJZk5lZWRl
ZChjbGlwUmVjdCk7Ci0gICAgICAgIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSA9IHVzZVBy
b2dyYW0oQ29sb3JQcm9ncmFtKTsKLSAgICAgICAgZ2xDb2xvck1hc2soR0xfRkFMU0UsIEdMX0ZB
TFNFLCBHTF9GQUxTRSwgR0xfRkFMU0UpOwotICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIo
cHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgbGF5
ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkuZGF0YSgpKTsKLSAgICAgICAgZ2xEcmF3QXJyYXlzKEdM
X1RSSUFOR0xFX0ZBTiwgMCwgbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkuc2l6ZSgpKTsKLSAg
ICAgICAgZ2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7Ci0K
LSAgICAgICAgaWYgKCFzdGVuY2lsVmFsdWUpCi0gICAgICAgICAgICBnbERpc2FibGUoR0xfU1RF
TkNJTF9URVNUKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlcjo6dXBkYXRlU2Npc3Nv
cklmTmVlZGVkKGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0jaWYgREVCVUdfQ0xJUFBJ
TkcKLSAgICBwcmludGYoIkxheWVyUmVuZGVyZXI6OnVwZGF0ZVNjaXNzb3JJZk5lZWRlZCgpOiBj
bGlwUmVjdD0oJS4yZiwlLjJmICUuMmZ4JS4yZilcbiIsIGNsaXBSZWN0LngoKSwgY2xpcFJlY3Qu
eSgpLCBjbGlwUmVjdC53aWR0aCgpLCBjbGlwUmVjdC5oZWlnaHQoKSk7Ci0gICAgZmZsdXNoKHN0
ZG91dCk7Ci0jZW5kaWYKLSAgICBJbnRSZWN0IGNsaXBSZWN0V0MgPSB0b09wZW5HTFdpbmRvd0Nv
b3JkaW5hdGVzKGNsaXBSZWN0KTsKLSAgICBpZiAobV9zY2lzc29yUmVjdCA9PSBjbGlwUmVjdFdD
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NjaXNzb3JSZWN0ID0gY2xpcFJlY3RXQzsKLSNp
ZiBERUJVR19DTElQUElORwotICAgIHByaW50ZigiTGF5ZXJSZW5kZXJlcjo6dXBkYXRlU2Npc3Nv
cklmTmVlZGVkKCk6IGNsaXBwaW5nIHRvICglZCwlZCAlZHglZClcbiIsIG1fc2Npc3NvclJlY3Qu
eCgpLCBtX3NjaXNzb3JSZWN0LnkoKSwgbV9zY2lzc29yUmVjdC53aWR0aCgpLCBtX3NjaXNzb3JS
ZWN0LmhlaWdodCgpKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZgotICAgIGdsU2Npc3Nv
cihtX3NjaXNzb3JSZWN0LngoKSwgbV9zY2lzc29yUmVjdC55KCksIG1fc2Npc3NvclJlY3Qud2lk
dGgoKSwgbV9zY2lzc29yUmVjdC5oZWlnaHQoKSk7Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJlcjo6
bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBib29sIHJldCA9IG1fY2xpZW50LT5jb250ZXh0
KCktPm1ha2VDdXJyZW50KCk7Ci0gICAgaWYgKHJldCAmJiBtX2lzUm9idXN0bmVzc1N1cHBvcnRl
ZCkgewotICAgICAgICBHTGVudW0gcmVzZXRTdGF0dXMgPSBtX2dsR2V0R3JhcGhpY3NSZXNldFN0
YXR1c0VYVCgpOwotICAgICAgICBpZiAocmVzZXRTdGF0dXMgIT0gR0xfTk9fRVJST1IpCi0gICAg
ICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nQWx3YXlzKEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpMb2dMZXZlbENyaXRpY2FsLCAiUm9idXN0IE9wZW5HTCBjb250ZXh0IGhhcyBiZWVuIHJl
c2V0IHdpdGggc3RhdHVzIDB4JXguIENvbnRpbnVpbmcgYW55d2F5LiIsIHJlc2V0U3RhdHVzKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotYm9vbCBMYXllclJlbmRlcmVyOjpjcmVhdGVQ
cm9ncmFtKFByb2dyYW1JbmRleCBwcm9ncmFtKQotewotICAgIC8vIFNoYWRlcnMgZm9yIGRyYXdp
bmcgdGhlIGxheWVyIGNvbnRlbnRzLgotICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclN0cmlu
ZyA9Ci0gICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgotICAgICAgICAi
YXR0cmlidXRlIHZlYzIgYV90ZXhDb29yZDsgICBcbiIKLSAgICAgICAgInZhcnlpbmcgdmVjMiB2
X3RleENvb3JkOyAgICAgXG4iCi0gICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAg
IFxuIgotICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAg
IiAgZ2xfUG9zaXRpb24gPSBhX3Bvc2l0aW9uOyAgXG4iCi0gICAgICAgICIgIHZfdGV4Q29vcmQg
PSBhX3RleENvb3JkOyAgIFxuIgotICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiI7Ci0KLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclN0cmluZ1JHQkEgPQotICAg
ICAgICAidmFyeWluZyBtZWRpdW1wIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcbiIKLSAgICAgICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190ZXh0dXJlOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIGxvd3AgZmxvYXQg
YWxwaGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAidm9p
ZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biIKLSAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRChz
X3RleHR1cmUsIHZfdGV4Q29vcmQpICogYWxwaGE7IFxuIgotICAgICAgICAifSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7Ci0KLSAg
ICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclN0cmluZ01hc2tSR0JBID0KLSAgICAgICAgInZh
cnlpbmcgbWVkaXVtcCB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
XG4iCi0gICAgICAgICJ1bmlmb3JtIGxvd3Agc2FtcGxlcjJEIHNfdGV4dHVyZTsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAidW5pZm9ybSBsb3dwIHNhbXBsZXIyRCBzX21h
c2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgInVuaWZvcm0gbG93
cCBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAg
ICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgotICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgIiAgbG93cCB2ZWM0IHRleENvbG9y
ID0gdGV4dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZCk7ICAgXG4iCi0gICAgICAgICIgIGxv
d3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQoc19tYXNrLCB2X3RleENvb3JkKTsgICAgIFxu
IgotICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRleENvbG9yLnks
IHRleENvbG9yLnosIHRleENvbG9yLncpICogYWxwaGEgKiBtYXNrQ29sb3IudzsgICAgICAgICAg
IFxuIgotICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiI7Ci0KLSAgICAvLyBTaGFkZXJzIGZvciBkcmF3aW5nIHRoZSBk
ZWJ1ZyBib3JkZXJzIGFyb3VuZCB0aGUgbGF5ZXJzLgotICAgIGNvbnN0IGNoYXIqIGNvbG9yVmVy
dGV4U2hhZGVyU3RyaW5nID0KLSAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAg
XG4iCi0gICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAi
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgIiAgIGdsX1Bvc2l0aW9u
ID0gYV9wb3NpdGlvbjsgXG4iCi0gICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIjsKLQotICAgIGNvbnN0IGNoYXIqIGNvbG9yRnJhZ21lbnRTaGFkZXJTdHJpbmcgPQotICAg
ICAgICAidW5pZm9ybSBsb3dwIHZlYzQgY29sb3I7ICAgICBcbiIKLSAgICAgICAgInZvaWQgbWFp
bigpICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgotICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsgICAgICBcbiIKLSAg
ICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwotCi0gICAgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyID0gMDsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlciA9IDA7
Ci0KLSAgICBzd2l0Y2ggKHByb2dyYW0pIHsKLSAgICBjYXNlIExheWVyUHJvZ3JhbVJHQkE6Ci0g
ICAgY2FzZSBMYXllck1hc2tQcm9ncmFtUkdCQToKLSAgICAgICAgdmVydGV4U2hhZGVyID0gdmVy
dGV4U2hhZGVyU3RyaW5nOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbG9yUHJvZ3JhbToK
LSAgICAgICAgdmVydGV4U2hhZGVyID0gY29sb3JWZXJ0ZXhTaGFkZXJTdHJpbmc7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTnVtYmVyT2ZQcm9ncmFtczoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHN3aXRjaCAocHJvZ3JhbSkgewotICAgIGNhc2UgTGF5ZXJQcm9ncmFt
UkdCQToKLSAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlclN0cmluZ1JHQkE7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGF5ZXJNYXNrUHJvZ3JhbVJHQkE6Ci0gICAgICAg
IGZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXJTdHJpbmdNYXNrUkdCQTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDb2xvclByb2dyYW06Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyID0g
Y29sb3JGcmFnbWVudFNoYWRlclN0cmluZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOdW1i
ZXJPZlByb2dyYW1zOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF2
ZXJ0ZXhTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBHTHVpbnQgcHJvZ3JhbU9iamVjdCA9IGxvYWRTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRl
ciwgZnJhZ21lbnRTaGFkZXIpOwotICAgIGlmICghcHJvZ3JhbU9iamVjdCkgewotICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcHJvZ3JhbSAldSIsIHByb2dyYW0pOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9wcm9ncmFtc1twcm9ncmFtXS5tX3Byb2dy
YW0gPSBwcm9ncmFtT2JqZWN0OwotCi0gICAgLy8gQmluZHMgdGhlIGdpdmVuIGF0dHJpYnV0ZSBu
YW1lIHRvIGEgY29tbW9uIGxvY2F0aW9uIGFjcm9zcyBhbGwgcHJvZ3JhbXMKLSAgICAvLyB1c2Vk
IGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGFsbG93cyB0aGUgY29kZSB0byBiaW5kIHRoZSBhdHRy
aWJ1dGVzIG9ubHkgb25jZQotICAgIC8vIGV2ZW4gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBwcm9n
cmFtcy4KLSAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtT2JqZWN0LCBHTEVTMlByb2dy
YW06OlBvc2l0aW9uQXR0cmlidXRlSW5kZXgsICJhX3Bvc2l0aW9uIik7Ci0gICAgZ2xCaW5kQXR0
cmliTG9jYXRpb24ocHJvZ3JhbU9iamVjdCwgR0xFUzJQcm9ncmFtOjpUZXhDb29yZEF0dHJpYnV0
ZUluZGV4LCAiYV90ZXhDb29yZCIpOwotCi0gICAgY2hlY2tHTEVycm9yKCk7Ci0KLSAgICAvLyBS
ZS1saW5rIHRoZSBzaGFkZXIgdG8gZ2V0IHRoZSBuZXcgYXR0cmliIGxvY2F0aW9uIHRvIHRha2Ug
ZWZmZWN0LgotICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbU9iamVjdCk7Ci0KLSAgICBjaGVja0dM
RXJyb3IoKTsKLQotICAgIC8vIEdldCBsb2NhdGlvbnMgb2YgdW5pZm9ybXMgZm9yIHRoZSBsYXll
ciBjb250ZW50IHNoYWRlciBwcm9ncmFtLgotICAgIG1fcHJvZ3JhbXNbcHJvZ3JhbV0ubV9sb2Nh
dGlvbnNbR0xFUzJQcm9ncmFtOjpPcGFjaXR5VW5pZm9ybV0gPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtT2JqZWN0LCAiYWxwaGEiKTsKLSAgICBzd2l0Y2ggKHByb2dyYW0pIHsKLSAgICBj
YXNlIExheWVyUHJvZ3JhbVJHQkE6IHsKLSAgICAgICAgR0xpbnQgc2FtcGxlckxvY2F0aW9uID0g
Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbU9iamVjdCwgInNfdGV4dHVyZSIpOwotICAgICAg
ICBnbFVzZVByb2dyYW0ocHJvZ3JhbU9iamVjdCk7Ci0gICAgICAgIGdsVW5pZm9ybTFpKHNhbXBs
ZXJMb2NhdGlvbiwgMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIExheWVyTWFz
a1Byb2dyYW1SR0JBOiB7Ci0gICAgICAgIEdMaW50IG1hc2tTYW1wbGVyTG9jYXRpb24gPSBnbEdl
dFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtT2JqZWN0LCAic190ZXh0dXJlIik7Ci0gICAgICAgIEdM
aW50IG1hc2tTYW1wbGVyTG9jYXRpb25NYXNrID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bU9iamVjdCwgInNfbWFzayIpOwotICAgICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbU9iamVjdCk7
Ci0gICAgICAgIGdsVW5pZm9ybTFpKG1hc2tTYW1wbGVyTG9jYXRpb24sIDApOwotICAgICAgICBn
bFVuaWZvcm0xaShtYXNrU2FtcGxlckxvY2F0aW9uTWFzaywgMSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIENvbG9yUHJvZ3JhbToKLSAgICAgICAgLy8gR2V0IGxvY2F0aW9ucyBv
ZiB1bmlmb3JtcyBmb3IgdGhlIGRlYnVnIGJvcmRlciBzaGFkZXIgcHJvZ3JhbS4KLSAgICAgICAg
bV9jb2xvckNvbG9yTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtT2JqZWN0
LCAiY29sb3IiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOdW1iZXJPZlByb2dyYW1zOgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWNv
bnN0IEdMRVMyUHJvZ3JhbSYgTGF5ZXJSZW5kZXJlcjo6dXNlUHJvZ3JhbShQcm9ncmFtSW5kZXgg
aW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgTnVtYmVyT2ZQcm9ncmFtcyk7Ci0gICAgY29u
c3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gbV9wcm9ncmFtc1tpbmRleF07Ci0gICAgaWYgKCFw
cm9ncmFtLmlzVmFsaWQoKSAmJiAhY3JlYXRlUHJvZ3JhbShpbmRleCkpCi0gICAgICAgIHJldHVy
biBwcm9ncmFtOwotCi0gICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0ubV9wcm9ncmFtKTsKLQotICAg
IGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCkpOwot
ICAgIGlmIChpbmRleCAhPSBDb2xvclByb2dyYW0pCi0gICAgICAgIGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS50ZXhDb29yZExvY2F0aW9uKCkpOwotCi0gICAgcmV0dXJuIHByb2dy
YW07Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJpbmdSZXN1bHRzOjphZGREaXJ0eVJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICBJbnRSZWN0IGRpcnR5VW5pb25bTnVtYmVyT2ZEaXJ0eVJl
Y3RzXTsKLSAgICBpbnQgc21hbGxlc3RJbmNyZWFzZSA9IElOVF9NQVg7Ci0gICAgaW50IG1vZGlm
aWVkUmVjdCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1iZXJPZkRpcnR5UmVjdHM7
ICsraSkgewotICAgICAgICBkaXJ0eVVuaW9uW2ldID0gbV9kaXJ0eVJlY3RzW2ldOwotICAgICAg
ICBkaXJ0eVVuaW9uW2ldLnVuaXRlKHJlY3QpOwotICAgICAgICBpbnQgaW5jcmVhc2UgPSBkaXJ0
eVVuaW9uW2ldLndpZHRoKCkqZGlydHlVbmlvbltpXS5oZWlnaHQoKSAtIG1fZGlydHlSZWN0c1tp
XS53aWR0aCgpKm1fZGlydHlSZWN0c1tpXS5oZWlnaHQoKTsKLSAgICAgICAgaWYgKGluY3JlYXNl
IDwgc21hbGxlc3RJbmNyZWFzZSkgewotICAgICAgICAgICAgc21hbGxlc3RJbmNyZWFzZSA9IGlu
Y3JlYXNlOwotICAgICAgICAgICAgbW9kaWZpZWRSZWN0ID0gaTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIG1fZGlydHlSZWN0c1ttb2RpZmllZFJlY3RdID0gZGlydHlVbmlvblttb2RpZmllZFJl
Y3RdOwotfQotCi1ib29sIExheWVyUmVuZGVyaW5nUmVzdWx0czo6aXNFbXB0eSgpIGNvbnN0Ci17
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1iZXJPZkRpcnR5UmVjdHM7ICsraSkgewotICAg
ICAgICBpZiAoIW1fZGlydHlSZWN0c1tpXS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyUmVuZGVyZXIuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMjE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIs
IDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IExheWVyUmVuZGVyZXJfaAotI2RlZmluZSBMYXllclJlbmRlcmVyX2gKLQotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgi
Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheWVyRGF0YS5oIgotI2luY2x1ZGUg
IkxheWVyRmlsdGVyUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJDb250ZXh0Lmg+Ci0jaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJQcm9ncmFtLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJy
eVBsYXRmb3JtSW50UmVjdFJlZ2lvbi5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29s
b3I7Ci1jbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOwotY2xhc3MgTGF5ZXJSZW5kZXJlckNs
aWVudDsKLWNsYXNzIExheWVyUmVuZGVyZXJTdXJmYWNlOwotCi1jbGFzcyBMYXllclJlbmRlcmlu
Z1Jlc3VsdHMgewotcHVibGljOgotICAgIExheWVyUmVuZGVyaW5nUmVzdWx0cygpIDogd2FzRW1w
dHkodHJ1ZSksIG5lZWRzQW5pbWF0aW9uRnJhbWUoZmFsc2UpIHsgfQotCi0gICAgc3RhdGljIGNv
bnN0IGludCBOdW1iZXJPZkRpcnR5UmVjdHMgPSAzOwotICAgIGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdChpbnQgaSkgY29uc3QgeyByZXR1cm4gbV9kaXJ0eVJlY3RzW2ldOyB9Ci0gICAgdm9pZCBh
ZGREaXJ0eVJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICBib29sIGlzRW1wdHko
KSBjb25zdDsKLQotICAgIGJvb2wgd2FzRW1wdHk7Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6SW50UmVjdFJlZ2lvbiBkaXJ0eVJlZ2lvbjsKLQotICAgIGJvb2wgbmVlZHNBbmltYXRpb25G
cmFtZTsKLQotcHJpdmF0ZToKLSAgICBJbnRSZWN0IG1fZGlydHlSZWN0c1tOdW1iZXJPZkRpcnR5
UmVjdHNdOwotfTsKLQotLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRl
ZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgotY2xhc3MgTGF5ZXJSZW5kZXJlciB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJSZW5kZXJlcik7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG9ydGhvTWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBm
bG9hdCBib3R0b20sIGZsb2F0IHRvcCwgZmxvYXQgbmVhclosIGZsb2F0IGZhclopOwotCi0gICAg
c3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlcj4gY3JlYXRlKExheWVyUmVuZGVyZXJDbGll
bnQqKTsKLQotICAgIExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNsaWVudCopOwotICAgIH5M
YXllclJlbmRlcmVyKCk7Ci0KLSAgICBMYXllclJlbmRlcmVyQ2xpZW50KiBjbGllbnQoKSBjb25z
dCB7IHJldHVybiBtX2NsaWVudDsgfQotCi0gICAgdm9pZCByZWxlYXNlTGF5ZXJSZXNvdXJjZXMo
KTsKLQotICAgIC8vIEluIG9yZGVyIHRvIHJlbmRlciB0aGUgbGF5ZXJzLCB5b3UgbXVzdCBkbyB0
aGUgZm9sbG93aW5nIDMgb3BlcmF0aW9ucywgaW4gb3JkZXIuCi0KLSAgICAvLyAxLiBVcGxvYWQg
dGV4dHVyZXMgYW5kIG90aGVyIG9wZXJhdGlvbnMgdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGF0
IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBmcmFtZS4KLSAgICAvLyBOb3RlLCB0aGlzIGNhbGwgYWxz
byByZXNldHMgdGhlIGxhc3QgcmVuZGVyaW5nIHJlc3VsdHMuCi0gICAgdm9pZCBwcmVwYXJlRnJh
bWUoZG91YmxlIGFuaW1hdGlvblRpbWUsIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIHJvb3RMYXll
cik7Ci0KLSAgICAvLyAyLiBTZXQgdGhlIE9wZW5HTCB2aWV3cG9ydCBhbmQgc3RvcmUgb3RoZXIg
dmlld3BvcnQtcmVsYXRlZCBwYXJhbWV0ZXJzCi0gICAgLy8gICB2aWV3cG9ydCBpcyB0aGUgR0wg
dmlld3BvcnQKLSAgICAvLyAgIGNsaXBSZWN0IGlzIGFuIGFkZGl0aW9uYWwgY2xpcCByZWN0LCBp
ZiBjbGlwcGluZyBpcyByZXF1aXJlZCBiZXlvbmQgdGhlIGNsaXBwaW5nIGVmZmVjdCBvZiB0aGUg
dmlld3BvcnQuCi0gICAgLy8gICB2aXNpYmxlUmVjdCBpcyB0aGUgc3VicmVjdCBvZiB0aGUgd2Vi
IHBhZ2UgdGhhdCB5b3Ugd2lzaCB0byBjb21wb3NpdGUsIGV4cHJlc3NlZCBpbiBjb250ZW50IGNv
b3JkaW5hdGVzCi0gICAgLy8gVGhlIGxhc3QgdHdvIHBhcmFtZXRlcnMgYXJlIHJlcXVpcmVkIHRv
IGRyYXcgZml4ZWQgcG9zaXRpb24gZWxlbWVudHMgaW4gdGhlIHJpZ2h0IHBsYWNlOgotICAgIC8v
ICAgbGF5b3V0UmVjdCBpcyB0aGUgc3VicmVjdCBvZiB0aGUgd2ViIHBhZ2UgdGhhdCB0aGUgV2Vi
S2l0IHRocmVhZCBiZWxpZXZlcyBpcyB2aXNpYmxlIChzY3JvbGwgcG9zaXRpb24sIGFjdHVhbCB2
aXNpYmxlIHNpemUpLgotICAgIC8vICAgY29udGVudHNTaXplIGlzIHRoZSBjb250ZW50cyBzaXpl
IG9mIHRoZSB3ZWIgcGFnZQotICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmll
d3BvcnQsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVS
ZWN0LCBjb25zdCBJbnRSZWN0JiBsYXlvdXRSZWN0LCBjb25zdCBJbnRTaXplJiBjb250ZW50c1Np
emUpOwotCi0gICAgLy8gMy4gUHJlcGFyZXMgYWxsIHRoZSBsYXllcnMgZm9yIGNvbXBvc2l0aW5n
Ci0gICAgLy8gdHJhbnNmb3JtIGlzIHRoZSBtb2RlbC12aWV3LXByb2plY3QgbWF0cml4IHRoYXQg
Z29lcyBhbGwgdGhlIHdheSBmcm9tIGNvbnRlbnRzIHRvIG5vcm1hbGl6ZWQgZGV2aWNlIGNvb3Jk
aW5hdGVzLgotICAgIHZvaWQgY29tcG9zaXRlTGF5ZXJzKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogcm9vdExheWVyKTsKLSAgICB2b2lkIGNvbXBv
c2l0ZUJ1ZmZlcihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYg
Y29udGVudHMsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiwgYm9vbCBj
b250ZW50c09wYXF1ZSwgZmxvYXQgb3BhY2l0eSk7Ci0gICAgdm9pZCBkcmF3Q29sb3IoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmIGNvbnRlbnRzLCBjb25zdCBD
b2xvciYpOwotCi0gICAgLy8gS2VlcCB0cmFjayBvZiBsYXllcnMgdGhhdCBuZWVkIGNsZWFudXAg
d2hlbiB0aGUgTGF5ZXJSZW5kZXJlciBpcyBkZXN0cm95ZWQKLSAgICB2b2lkIGFkZExheWVyKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKLSAgICBib29sIHJlbW92ZUxheWVyKExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqKTsKLQotICAgIC8vIEtlZXAgdHJhY2sgb2YgbGF5ZXJzIHRoYXQgbmVlZCB0
byByZWxlYXNlIHRoZWlyIHRleHR1cmVzIHdoZW4gd2Ugc3dhcCBidWZmZXJzCi0gICAgdm9pZCBh
ZGRMYXllclRvUmVsZWFzZVRleHR1cmVSZXNvdXJjZXNMaXN0KExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqKTsKLQotICAgIGJvb2wgaGFyZHdhcmVDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFyZHdhcmVDb21wb3NpdGluZzsgfQotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpHTEVTMkNvbnRleHQqIGNvbnRleHQoKSBjb25zdDsKLQotICAgIGNvbnN0IExheWVyUmVu
ZGVyaW5nUmVzdWx0cyYgbGFzdFJlbmRlcmluZ1Jlc3VsdHMoKSBjb25zdCB7IHJldHVybiBtX2xh
c3RSZW5kZXJpbmdSZXN1bHRzOyB9Ci0KLSAgICAvLyBTY2hlZHVsZSBhIGNvbW1pdCBvbiB0aGUg
V2ViS2l0IHRocmVhZCBhdCB0aGUgZW5kIG9mIHJlbmRlcmluZwotICAgIC8vIFVzZWQgd2hlbiBh
IGxheWVyIGRpc2NvdmVycyBkdXJpbmcgcmVuZGVyaW5nIHRoYXQgaXQgbmVlZHMgYSBjb21taXQu
Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpIHsgbV9uZWVkc0NvbW1pdCA9IHRydWU7IH0KLQot
ICAgIEludFJlY3QgdG9XaW5kb3dDb29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsK
LSAgICBJbnRSZWN0IHRvUGl4ZWxWaWV3cG9ydENvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UmVjdCYp
IGNvbnN0OwotICAgIEludFJlY3QgdG9Eb2N1bWVudFZpZXdwb3J0Q29vcmRpbmF0ZXMoY29uc3Qg
RmxvYXRSZWN0JikgY29uc3Q7Ci0KLSAgICAvLyBJZiB0aGUgbGF5ZXIgaGFzIGFscmVhZHkgYmVl
biBkcmF3ZWQgb24gYSBzdXJmYWNlLgotICAgIGJvb2wgbGF5ZXJBbHJlYWR5T25TdXJmYWNlKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqKSBjb25zdDsKLQotICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVy
KGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50PiYsIGNvbnN0IENvbG9yJiwgZmxvYXQgYm9yZGVyV2lk
dGgpOwotCi0gICAgdm9pZCBkaXNjYXJkRnJvbnRWaXNpYmlsaXR5KCk7Ci0KLSAgICBzdGF0aWMg
R0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSk7
Ci0gICAgc3RhdGljIEdMdWludCBsb2FkU2hhZGVyUHJvZ3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKTsKLQotcHJpdmF0
ZToKLSAgICB2b2lkIHByZXBhcmVGcmFtZVJlY3Vyc2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFk
KiwgZG91YmxlIGFuaW1hdGlvblRpbWUsIGJvb2wgaXNDb250ZXh0Q3VycmVudCk7Ci0gICAgdm9p
ZCB1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwcm9qZWN0aW9uTWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJl
YWQ+ID4mIHN1cmZhY2VMYXllcnMsIGZsb2F0IG9wYWNpdHksIEZsb2F0UmVjdCBjbGlwUmVjdCk7
Ci0gICAgdm9pZCBjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCosIGludCBzdGVuY2lsVmFsdWUsIEZsb2F0UmVjdCBjbGlwUmVjdCk7Ci0gICAgdm9pZCB1cGRh
dGVTY2lzc29ySWZOZWVkZWQoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCk7Ci0KLSAgICBib29s
IHVzZVN1cmZhY2UoTGF5ZXJSZW5kZXJlclN1cmZhY2UqKTsKLSAgICB2b2lkIGRyYXdMYXllcnNP
blN1cmZhY2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYg
c3VyZmFjZUxheWVycyk7Ci0KLSAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcihMYXllckNvbXBvc2l0
aW5nVGhyZWFkKik7Ci0gICAgdm9pZCBkcmF3SG9sZVB1bmNoUmVjdChMYXllckNvbXBvc2l0aW5n
VGhyZWFkKik7Ci0KLSAgICBJbnRSZWN0IHRvT3BlbkdMV2luZG93Q29vcmRpbmF0ZXMoY29uc3Qg
RmxvYXRSZWN0JikgY29uc3Q7Ci0KLSAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgZW51bSBQcm9ncmFtSW5kZXggewotICAgICAgICBMYXllclByb2dyYW1SR0JBLAotICAgICAg
ICBMYXllck1hc2tQcm9ncmFtUkdCQSwKLSAgICAgICAgQ29sb3JQcm9ncmFtLAotICAgICAgICBO
dW1iZXJPZlByb2dyYW1zCi0gICAgfTsKLQotICAgIGJvb2wgY3JlYXRlUHJvZ3JhbShQcm9ncmFt
SW5kZXgpOwotICAgIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQ
cm9ncmFtJiB1c2VQcm9ncmFtKFByb2dyYW1JbmRleCk7Ci0KLSAgICBMYXllclJlbmRlcmVyQ2xp
ZW50KiBtX2NsaWVudDsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xF
UzJQcm9ncmFtIG1fcHJvZ3JhbXNbTnVtYmVyT2ZQcm9ncmFtc107Ci0KLSAgICAvLyBTaGFkZXIg
dW5pZm9ybSBhbmQgYXR0cmlidXRlIGxvY2F0aW9ucy4KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Ci0gICAgT3duUHRyPExheWVyRmlsdGVyUmVuZGVyZXI+IG1fZmlsdGVyUmVuZGVyZXI7Ci0jZW5k
aWYKLQotICAgIGludCBtX2NvbG9yQ29sb3JMb2NhdGlvbjsKLQotICAgIC8vIEN1cnJlbnQgZHJh
dyBjb25maWd1cmF0aW9uLgotICAgIGRvdWJsZSBtX3NjYWxlOwotICAgIGRvdWJsZSBtX2FuaW1h
dGlvblRpbWU7Ci0gICAgRmxvYXRSZWN0IG1fdmlzaWJsZVJlY3Q7Ci0gICAgSW50UmVjdCBtX2xh
eW91dFJlY3Q7Ci0gICAgSW50U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKLQotICAgIEludFJlY3QgbV92
aWV3cG9ydDsgLy8gSW4gcmVuZGVyIHRhcmdldCBjb29yZGluYXRlcwotICAgIEludFJlY3QgbV9z
Y2lzc29yUmVjdDsgLy8gSW4gcmVuZGVyIHRhcmdldCBjb29yZGluYXRlcwotICAgIEZsb2F0UmVj
dCBtX2NsaXBSZWN0OyAvLyBJbiBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcwotCi0gICAg
dW5zaWduZWQgbV9mYm87Ci0gICAgTGF5ZXJSZW5kZXJlclN1cmZhY2UqIG1fY3VycmVudExheWVy
UmVuZGVyZXJTdXJmYWNlOwotCi0gICAgYm9vbCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7Ci0KLSAg
ICAvLyBNYXAgYXNzb2NpYXRpbmcgbGF5ZXJzIHdpdGggdGV4dHVyZXMgaWRzIHVzZWQgYnkgdGhl
IEdMIGNvbXBvc2l0b3IuCi0gICAgdHlwZWRlZiBIYXNoU2V0PExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqPiBMYXllclNldDsKLSAgICBMYXllclNldCBtX2xheWVyczsKLSAgICBMYXllclNldCBtX2xh
eWVyc0xvY2tpbmdUZXh0dXJlUmVzb3VyY2VzOwotCi0gICAgYm9vbCBtX2lzUm9idXN0bmVzc1N1
cHBvcnRlZDsKLSAgICBQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNFWFRQUk9DIG1fZ2xHZXRH
cmFwaGljc1Jlc2V0U3RhdHVzRVhUOwotCi0gICAgTGF5ZXJSZW5kZXJpbmdSZXN1bHRzIG1fbGFz
dFJlbmRlcmluZ1Jlc3VsdHM7Ci0gICAgYm9vbCBtX25lZWRzQ29tbWl0OwotICAgIGJvb2wgbV9z
dGVuY2lsQ2xlYXJlZDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXJDbGllbnQu
aAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllclJlbmRlcmVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVm
IExheWVyUmVuZGVyZXJDbGllbnRfaAotI2RlZmluZSBMYXllclJlbmRlcmVyQ2xpZW50X2gKLQot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotbmFtZXNwYWNlIEJsYWNrQmVycnkg
ewotbmFtZXNwYWNlIFBsYXRmb3JtIHsKLW5hbWVzcGFjZSBHcmFwaGljcyB7Ci1jbGFzcyBHTEVT
MkNvbnRleHQ7Ci19Ci19Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTGF5ZXJS
ZW5kZXJlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+TGF5ZXJSZW5kZXJlckNsaWVu
dCgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGxheWVyUmVuZGVyZXJEZXN0cm95ZWQoKSB7IH0K
LQotICAgIHZpcnR1YWwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMkNvbnRl
eHQqIGNvbnRleHQoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hpbGRX
aW5kb3dzVXNlRG9jdW1lbnRDb29yZGluYXRlcygpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyUmVuZGVyZXJTdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXJTdXJmYWNlLmNwcAkocmV2aXNp
b24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllclJlbmRlcmVyU3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJM
YXllclJlbmRlcmVyU3VyZmFjZS5oIgotCi0jaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZC5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMYXllclV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotTGF5ZXJSZW5kZXJlclN1cmZhY2U6OkxheWVyUmVuZGVyZXJTdXJm
YWNlKExheWVyUmVuZGVyZXIqIHJlbmRlcmVyLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBvd25l
cikKLSAgICA6IG1fb3duZXJMYXllcihvd25lcikKLSAgICAsIG1fbGF5ZXJSZW5kZXJlcihyZW5k
ZXJlcikKLSAgICAsIG1fb3BhY2l0eSgxLjApCi17Ci19Ci0KLUxheWVyUmVuZGVyZXJTdXJmYWNl
Ojp+TGF5ZXJSZW5kZXJlclN1cmZhY2UoKQotewotfQotCi12b2lkIExheWVyUmVuZGVyZXJTdXJm
YWNlOjpzZXRDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBt
X2NvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7Ci0gICAgbV9zaXplID0gY29udGVudFJlY3Quc2l6
ZSgpOwotfQotCi1GbG9hdFJlY3QgTGF5ZXJSZW5kZXJlclN1cmZhY2U6OmJvdW5kaW5nQm94KCkg
Y29uc3QKLXsKLSAgICBGbG9hdFJlY3QgcmVjdCA9IFdlYkNvcmU6OmJvdW5kaW5nQm94KHRyYW5z
Zm9ybWVkQm91bmRzKCkpOwotCi0gICAgaWYgKG1fb3duZXJMYXllci0+cmVwbGljYUxheWVyKCkp
Ci0gICAgICAgIHJlY3QudW5pdGUobV9yZXBsaWNhRHJhd1RyYW5zZm9ybS5tYXBRdWFkKEZsb2F0
UmVjdCgtb3JpZ2luKCksIHNpemUoKSkpLmJvdW5kaW5nQm94KCkpOwotCi0gICAgcmV0dXJuIHJl
Y3Q7Ci19Ci0KLVZlY3RvcjxGbG9hdFBvaW50LCA0PiBMYXllclJlbmRlcmVyU3VyZmFjZTo6dHJh
bnNmb3JtZWRCb3VuZHMoKSBjb25zdAotewotICAgIHJldHVybiB0b1ZlY3RvcjxGbG9hdFBvaW50
LCA0PihtX2RyYXdUcmFuc2Zvcm0ubWFwUXVhZChGbG9hdFJlY3QoLW9yaWdpbigpLCBzaXplKCkp
KSk7Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJlclN1cmZhY2U6OmVuc3VyZVRleHR1cmUoKQotewot
ICAgIGlmICghbV90ZXh0dXJlKQotICAgICAgICBtX3RleHR1cmUgPSB0ZXh0dXJlQ2FjaGVDb21w
b3NpdGluZ1RocmVhZCgpLT5jcmVhdGVUZXh0dXJlKCk7Ci0KLSAgICByZXR1cm4gbV90ZXh0dXJl
LT5wcm90ZWN0KG1fc2l6ZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpBbHdheXNC
YWNrZWQpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJTdXJmYWNlOjpyZWxlYXNlVGV4dHVyZSgp
Ci17Ci0gICAgbV90ZXh0dXJlLT51bnByb3RlY3QoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3Vy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlclN1cmZhY2UuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3Vy
ZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBMYXllclJlbmRlcmVyU3VyZmFjZV9oCi0j
ZGVmaW5lIExheWVyUmVuZGVyZXJTdXJmYWNlX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOwotY2xhc3MgTGF5ZXJSZW5kZXJlcjsKLQotY2xhc3Mg
TGF5ZXJSZW5kZXJlclN1cmZhY2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExheWVyUmVu
ZGVyZXJTdXJmYWNlKTsKLXB1YmxpYzoKLSAgICBMYXllclJlbmRlcmVyU3VyZmFjZShMYXllclJl
bmRlcmVyKiwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogb3duZXIpOwotICAgIH5MYXllclJlbmRl
cmVyU3VyZmFjZSgpOwotCi0gICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9Ci0KLSAgICBGbG9hdFJlY3QgY29udGVudFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRSZWN0OyB9Ci0gICAgdm9pZCBzZXRDb250ZW50UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAg
RmxvYXRSZWN0IGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQotICAgIHZv
aWQgc2V0Q2xpcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fY2xpcFJlY3QgPSByZWN0
OyB9Ci0KLSAgICBGbG9hdFBvaW50IG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UG9pbnQo
bV9zaXplLndpZHRoKCkgLyAyLjBmLCBtX3NpemUuaGVpZ2h0KCkgLyAyLjBmKTsgfQotCi0gICAg
dm9pZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4KSB7IG1fZHJhd1Ry
YW5zZm9ybSA9IHByb2plY3Rpb25NYXRyaXggKiBtYXRyaXg7IH0KLSAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5z
Zm9ybTsgfQotICAgIHZvaWQgc2V0UmVwbGljYURyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rp
b25NYXRyaXgpIHsgbV9yZXBsaWNhRHJhd1RyYW5zZm9ybSA9IHByb2plY3Rpb25NYXRyaXggKiBt
YXRyaXg7IH0KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYURyYXdUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOyB9Ci0KLSAgICAv
LyBUaGVzZSB1c2Ugbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMKLSAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3goKSBjb25zdDsKLSAgICBWZWN0b3I8RmxvYXRQb2ludCwgND4gdHJhbnNmb3Jt
ZWRCb3VuZHMoKSBjb25zdDsKLQotICAgIGJvb2wgZW5zdXJlVGV4dHVyZSgpOwotICAgIHZvaWQg
cmVsZWFzZVRleHR1cmUoKTsKLSAgICBMYXllclRleHR1cmUqIHRleHR1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KLQotICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgeyByZXR1
cm4gbV9vcGFjaXR5OyB9Ci0gICAgdm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7
IG1fb3BhY2l0eSA9IG9wYWNpdHk7IH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8TGF5ZXJUZXh0
dXJlPiBtX3RleHR1cmU7Ci0KLSAgICBGbG9hdFJlY3QgbV9jb250ZW50UmVjdDsKLSAgICBGbG9h
dFJlY3QgbV9jbGlwUmVjdDsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VyZmFjZU1h
dHJpeDsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07Ci0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhRHJhd1RyYW5zZm9ybTsKLQotICAgIExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqIG1fb3duZXJMYXllcjsKLSAgICBMYXllclJlbmRlcmVyKiBtX2xheWVy
UmVuZGVyZXI7Ci0KLSAgICBmbG9hdCBtX29wYWNpdHk7Ci0KLSAgICBJbnRTaXplIG1fc2l6ZTsK
LX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2Vu
ZGlmIC8vIExheWVyUmVuZGVyZXJTdXJmYWNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGV4dHVyZS5j
cHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCi0KLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5o
IgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJDb250ZXh0U3RhdGUuaD4KLSNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1MYXllclRleHR1cmU6OkxheWVyVGV4dHVyZShib29sIGlzQ29sb3IpCi0gICAg
OiBtX3Byb3RlY3Rpb25Db3VudCgwKQotICAgICwgbV9idWZmZXIoMCkKLSAgICAsIG1faXNDb2xv
cihpc0NvbG9yKQotICAgICwgbV9idWZmZXJTaXplSW5CeXRlcygwKQotewotICAgIHRleHR1cmVD
YWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPmluc3RhbGwodGhpcywgSW50U2l6ZSgpLCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJhY2tlZFdoZW5OZWNlc3NhcnkpOwotfQotCi1MYXll
clRleHR1cmU6On5MYXllclRleHR1cmUoKQotewotICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkKCktPnRleHR1cmVEZXN0cm95ZWQodGhpcyk7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJl
Ojp1cGRhdGVDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciog
YnVmZmVyKQotewotICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpkZXN0cm95QnVmZmVyKG1fYnVmZmVyKTsKLSAgICBtX2J1ZmZlciA9IGJ1
ZmZlcjsKLSAgICBzaXplX3QgbmV3QnVmZmVyU2l6ZUluQnl0ZXMgPSBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OmJ1ZmZlclNpemVJbkJ5dGVzKG1fYnVmZmVyKTsKLSAgICB0ZXh0dXJl
Q2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlU2l6ZUluQnl0ZXNDaGFuZ2VkKHRoaXMs
IG5ld0J1ZmZlclNpemVJbkJ5dGVzIC0gbV9idWZmZXJTaXplSW5CeXRlcyk7Ci0gICAgbV9idWZm
ZXJTaXplSW5CeXRlcyA9IG5ld0J1ZmZlclNpemVJbkJ5dGVzOwotfQotCi12b2lkIExheWVyVGV4
dHVyZTo6c2V0Q29udGVudHNUb0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBSR0JB
MzIgcmdiYSA9IGNvbG9yLnJnYigpOwotCi0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ryb3lCdWZmZXIobV9idWZmZXIpOwotCi0g
ICAgbV9idWZmZXIgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmNyZWF0ZUJ1ZmZl
cihJbnRTaXplKDEsIDEpLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJhY2tlZFdo
ZW5OZWNlc3NhcnkpOwotICAgIGlmIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KiBnYyA9IGxvY2tCdWZmZXJEcmF3YWJsZShtX2J1ZmZlcikp
IHsKLSAgICAgICAgZ2MtPnNldEZpbGxDb2xvcihyZ2JhKTsKLSAgICAgICAgZ2MtPmFkZEZpbGxS
ZWN0KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJlY3QoMCwgMCwgMSwgMSkpOwotICAgIH0K
LSAgICByZWxlYXNlQnVmZmVyRHJhd2FibGUobV9idWZmZXIpOwotCi0gICAgSW50U2l6ZSBvbGRT
aXplID0gbV9zaXplOwotICAgIG1fc2l6ZSA9IEludFNpemUoMSwgMSk7Ci0gICAgaWYgKG1fc2l6
ZSAhPSBvbGRTaXplKQotICAgICAgICB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT50
ZXh0dXJlUmVzaXplZCh0aGlzLCBvbGRTaXplKTsKLX0KLQotYm9vbCBMYXllclRleHR1cmU6OnBy
b3RlY3QoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpCdWZmZXJUeXBlIHR5cGUpCi17Ci0gICAgaWYgKCFtX2J1ZmZlcikgewotICAgICAgICAvLyBX
ZSBtYXkgaGF2ZSBiZWVuIGV2aWN0ZWQgYnkgdGhlIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkLAotICAgICAgICAvLyBhdHRlbXB0IHRvIGluc3RhbGwgdXMgYWdhaW4uCi0gICAgICAgIGlm
ICghdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+aW5zdGFsbCh0aGlzLCBzaXplLCB0
eXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICArK21fcHJvdGVj
dGlvbkNvdW50OwotCi0gICAgaWYgKG1fc2l6ZSA9PSBzaXplKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnJlc2l6ZVRleHR1cmUo
dGhpcywgc2l6ZSwgdHlwZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm0zRE9i
amVjdCBMYXllclRleHR1cmU6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgdXNpbmcg
bmFtZXNwYWNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczsKLQotICAgIFBsYXRmb3Jt
M0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlID0gcmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybTNET2Jq
ZWN0PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShtX2J1ZmZlcikpOwotCi0gICAgLy8gRm9yY2UgY3Jl
YXRpb24gaWYgaXQncyAwLgotICAgIGlmICghcGxhdGZvcm1UZXh0dXJlKSB7Ci0gICAgICAgIC8v
IFRoaXMgY2FsbCBjYW4gY2F1c2UgZGlzcGxheSBsaXN0IHRvIHJlbmRlciB0byBiYWNraW5nLCB3
aGljaCBjYW4gbXV0YXRlIGEgbG90IG9mIEdMIHN0YXRlLgotICAgICAgICBHTEVTMkNvbnRleHRT
dGF0ZTo6VmVydGV4QXR0cmlidXRlU3RhdGVTYXZlciB2ZXJ0ZXhBdHRyaWJTdGF0ZVNhdmVyOwot
ICAgICAgICBHTEVTMkNvbnRleHRTdGF0ZTo6UHJvZ3JhbVN0YXRlU2F2ZXIgcHJvZ3JhbVNhdmVy
OwotICAgICAgICBHTEVTMkNvbnRleHRTdGF0ZTo6VGV4dHVyZUFuZEZCT1N0YXRlU2F2ZXIgdGV4
dHVyZVNhdmVyOwotCi0gICAgICAgIGxvY2tBbmRCaW5kQnVmZmVyR0xUZXh0dXJlKG1fYnVmZmVy
LCBHTF9URVhUVVJFXzJEKTsKLSAgICAgICAgcGxhdGZvcm1UZXh0dXJlID0gcmVpbnRlcnByZXRf
Y2FzdDxQbGF0Zm9ybTNET2JqZWN0PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShtX2J1ZmZlcikpOwot
ICAgIH0KLQotICAgIHJldHVybiBwbGF0Zm9ybVRleHR1cmU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUZXh0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9MYXllclRleHR1cmUuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRleHR1cmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAx
MyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIExheWVyVGV4dHVyZV9oCi0jZGVmaW5lIExheWVyVGV4
dHVyZV9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJH
cmFwaGljc1R5cGVzM0QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0KLSNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBDb2xvcjsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1Ro
cmVhZDsKLQotLy8gTGF5ZXJUZXh0dXJlIGVuY2Fwc3VsYXRlcyBhIHZvbGF0aWxlIHRleHR1cmUg
LSBhdCBhbnkgdGltZSwgdGhlIHVuZGVybHlpbmcgT3BlbkdMCi0vLyB0ZXh0dXJlIG1heSBiZSBk
ZWxldGVkIGJ5IHRoZSBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC4gVGhlIHVzZXIgbXVz
dAotLy8gY2hlY2sgdXNpbmcgTGF5ZXJUZXh0dXJlOjppc0RpcnR5KCkgaW1tZWRpYXRlbHkgYmVm
b3JlIHVzaW5nIGl0LCBldmVyeSB0aW1lLgotLy8gVGhlIG9ubHkgd2F5IHRvIHByZXZlbnQgZXZp
Y3Rpb24gdGhpcyBpcyB0byBjYWxsIExheWVyVGV4dHVyZTo6cHJvdGVjdCgpLgotLy8gSWYgdGhl
IHRleHR1cmUgaXNEaXJ0eSgpLCB5b3UgbXVzdCB1cGRhdGVDb250ZW50cygpIGJlZm9yZSB5b3Ug
Y2FuIHVzZSBpdC4KLWNsYXNzIExheWVyVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVy
VGV4dHVyZT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZT4g
Y3JlYXRlKGJvb2wgaXNDb2xvciA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBMYXllclRleHR1cmUoaXNDb2xvcikpOwotICAgIH0KLQotICAgIH5MYXllclRleHR1
cmUoKTsKLQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2J1ZmZlcjsgfQot
Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0KLSAgICBib29sIGlzQ29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX2lzQ29sb3I7IH0KLQotICAgIGJvb2wgaXNQcm90ZWN0ZWQoKSBjb25zdCB7IHJldHVy
biBtX3Byb3RlY3Rpb25Db3VudCA+IDA7IH0KLSAgICB2b2lkIHByb3RlY3QoKSB7ICsrbV9wcm90
ZWN0aW9uQ291bnQ7IH0KLSAgICB2b2lkIHVucHJvdGVjdCgpIHsgLS1tX3Byb3RlY3Rpb25Db3Vu
dDsgfQotCi0gICAgLy8gVGhpcyB3aWxsIGVuc3VyZSBhIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgZm9y
IHRoaXMgdGV4dHVyZSB3aXRoIHRoZSByZXF1ZXN0ZWQgYmFja2luZyBhbmQgc2l6ZS4KLSAgICBi
b29sIHByb3RlY3QoY29uc3QgSW50U2l6ZSYsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6QnVmZmVyVHlwZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QmFja2VkV2hl
bk5lY2Vzc2FyeSk7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNv
bnN0OwotCi0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OkJ1ZmZlciopOwotICAgIHZvaWQgc2V0Q29udGVudHNUb0NvbG9yKGNvbnN0IENvbG9y
Jik7Ci0KLSAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBp
bnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQotICAgIGludCBoZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KLSAgICBzdGF0aWMgaW50IGJ5
dGVzUGVyUGl4ZWwoKSB7IHJldHVybiA0OyB9Ci0KLSAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBj
b25zdCB7IHJldHVybiBtX2J1ZmZlclNpemVJbkJ5dGVzOyB9Ci0KLXByaXZhdGU6Ci0gICAgZnJp
ZW5kIGNsYXNzIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOwotCi0gICAgTGF5ZXJUZXh0
dXJlKGJvb2wgaXNDb2xvciA9IGZhbHNlKTsKLSAgICB2b2lkIHNldEJ1ZmZlcihCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVyKQotICAgIHsKLSAgICAgICAgbV9i
dWZmZXIgPSBidWZmZXI7Ci0KLSAgICAgICAgLy8gV2UgYXNzdW1lIGl0IGlzIGEgbmV3bHkgYWxs
b2NhdGVkIGJ1ZmZlciwKLSAgICAgICAgLy8gYW5kIHRodXMgZW1wdHksIG9yIDAsIHdoaWNoIHdv
dWxkIG9mIGNvdXJzZQotICAgICAgICAvLyBiZSBlbXB0eS4KLSAgICAgICAgbV9zaXplID0gSW50
U2l6ZSgpOwotICAgICAgICBtX2J1ZmZlclNpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0KLSAgICB2
b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9Ci0KLSAg
ICBpbnQgbV9wcm90ZWN0aW9uQ291bnQ7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpCdWZmZXIqIG1fYnVmZmVyOwotICAgIEludFNpemUgbV9zaXplOwotICAgIGJvb2wgbV9p
c0NvbG9yOwotICAgIHNpemVfdCBtX2J1ZmZlclNpemVJbkJ5dGVzOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
Ci0jZW5kaWYgLy8gTGF5ZXJUZXh0dXJlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5jcHAJKHJldmlz
aW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRl
ICJMYXllclRpbGUuaCIKLQotI2luY2x1ZGUgIlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFk
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTGF5ZXJUaWxlOjpMYXllclRpbGUoKQotICAg
IDogbV9zY2FsZSgwKQotICAgICwgbV9jb250ZW50c0RpcnR5KGZhbHNlKQotICAgICwgbV92aXNp
YmxlKGZhbHNlKQotewotfQotCi1MYXllclRpbGU6On5MYXllclRpbGUoKQotewotICAgIC8vIE1h
a2Ugc3VyZSB0byB1bnByb3RlY3QgdGhlIHRleHR1cmUgaWYgbmVlZGVkLgotICAgIHNldFZpc2li
bGUoZmFsc2UpOwotfQotCi12b2lkIExheWVyVGlsZTo6c2V0Q29udGVudHMoQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGNvbnRlbnRzKQotewotICAgIG1fc2NhbGUgPSAw
OyAvLyBSZXNvbHV0aW9uIGluZGVwZW5kZW50Ci0gICAgc2V0VGV4dHVyZSh0ZXh0dXJlQ2FjaGVD
b21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlRm9yQ29udGVudHMoY29udGVudHMpKTsKLX0KLQot
dm9pZCBMYXllclRpbGU6OnVwZGF0ZUNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6QnVmZmVyKiBjb250ZW50cywgZG91YmxlIHNjYWxlKQotewotICAgIG1fc2NhbGUgPSBz
Y2FsZTsKLSAgICBzZXRUZXh0dXJlKHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnVw
ZGF0ZUNvbnRlbnRzKG1fdGV4dHVyZSwgY29udGVudHMpKTsKLX0KLQotdm9pZCBMYXllclRpbGU6
OmRpc2NhcmRDb250ZW50cygpCi17Ci0gICAgbV9zY2FsZSA9IDA7IC8vIFVua25vd24gc2NhbGUK
LSAgICBzZXRUZXh0dXJlKDApOwotfQotCi12b2lkIExheWVyVGlsZTo6c2V0VmlzaWJsZShib29s
IHZpc2libGUpCi17Ci0gICAgaWYgKHZpc2libGUgPT0gbV92aXNpYmxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3Zpc2libGUgPSB2aXNpYmxlOwotCi0gICAgaWYgKCFtX3RleHR1cmUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIFByb3RlY3QgdGhlIHRleHR1cmUgZnJvbSBiZWluZyBl
dmljdGVkIGZyb20gY2FjaGUKLSAgICAvLyBpZiB3ZSBhcmUgdmlzaWJsZS4KLSAgICBpZiAodmlz
aWJsZSkKLSAgICAgICAgbV90ZXh0dXJlLT5wcm90ZWN0KCk7Ci0gICAgZWxzZQotICAgICAgICBt
X3RleHR1cmUtPnVucHJvdGVjdCgpOwotfQotCi12b2lkIExheWVyVGlsZTo6c2V0VGV4dHVyZShQ
YXNzUmVmUHRyPExheWVyVGV4dHVyZT4gdGV4dHVyZSkKLXsKLSAgICAvLyBDbGVhciB0aGlzIGZs
YWcgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlIHRleHR1cmUgcGFyYW1ldGVyLgotICAg
IC8vIElmIGl0J3MgMCwgaXNEaXJ0eSgpIHdpbGwgcmV0dXJuIHRydWUgYW55d2F5LgotICAgIC8v
IElmIGl0J3MgdGhlIHNhbWUgdGV4dHVyZSwgcGVyaGFwcyB0aGVyZSB3YXMgbm8gbW9yZSBkZXRh
aWxlZCB0ZXh0dXJlCi0gICAgLy8gYXZhaWxhYmxlIHRoYW4gdGhlIG9uZSB3ZSBhbHJlYWR5IGhh
ZCwgYW5kIGtlZXBpbmcgdGhlIGRpcnR5IGZsYWcgd2lsbAotICAgIC8vIHJlc3VsdCBpbiBhbiBl
bmRsZXNzIGxvb3Agb2YgdXBkYXRpbmcgdG8gdGhlIHNhbWUgdGV4dHVyZS4KLSAgICBtX2NvbnRl
bnRzRGlydHkgPSBmYWxzZTsKLQotICAgIGlmICh0ZXh0dXJlID09IG1fdGV4dHVyZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gTW92ZSBwcm90ZWN0aW9uIG92ZXIgdG8gdGhlIG5ldyB0ZXh0
dXJlLgotICAgIGlmIChtX3Zpc2libGUpIHsKLSAgICAgICAgaWYgKG1fdGV4dHVyZSkKLSAgICAg
ICAgICAgIG1fdGV4dHVyZS0+dW5wcm90ZWN0KCk7Ci0gICAgICAgIGlmICh0ZXh0dXJlKQotICAg
ICAgICAgICAgdGV4dHVyZS0+cHJvdGVjdCgpOwotICAgIH0KLQotICAgIG1fdGV4dHVyZSA9IHRl
eHR1cmU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuaAkocmV2aXNpb24gMTYxNTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRp
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgTGF5ZXJUaWxlX2gKLSNk
ZWZpbmUgTGF5ZXJUaWxlX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQot
I2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgotCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBUaWxlSW5kZXg7Ci0K
LWNsYXNzIExheWVyVGlsZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgTGF5ZXJUaWxlKCk7Ci0gICAgfkxheWVyVGlsZSgpOwotCi0gICAgTGF5ZXJUZXh0dXJl
KiB0ZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9Ci0KLSAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZTsgfQotICAgIHZvaWQgc2V0Vmlz
aWJsZShib29sKTsKLQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dHNEaXJ0eSB8fCAhbV90ZXh0dXJlIHx8IG1fdGV4dHVyZS0+aXNEaXJ0eSgpOyB9Ci0KLSAgICBi
b29sIGhhc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmUgJiYgbV90ZXh0dXJlLT5i
dWZmZXIoKTsgfQotCi0gICAgdm9pZCBzZXRDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OkJ1ZmZlciopOwotICAgIHZvaWQgdXBkYXRlQ29udGVudHMoQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqLCBkb3VibGUgc2NhbGUpOwotICAgIHZvaWQgZGlz
Y2FyZENvbnRlbnRzKCk7Ci0KLSAgICAvLyBSZXR1cm5zIDAgaWYgY29udGVudHMgYXJlIHJlc29s
dXRpb24gaW5kZXBlbmRlbnQgb3Igc2NhbGUgaXMgc2ltcGx5IHVua25vd24uCi0gICAgZG91Ymxl
IGNvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9Ci0KLSAgICAvLyBUaGUg
dGV4dHVyZSBjb250ZW50cyBhcmUgZGlydHkgZHVlIHRvIGFwcGVhcmFuY2Ugb2YgcGFnZSBjaGFu
Z2luZywgb3IgYSBjaGFuZ2UgaW4gY29udGVudHMgc2NhbGUuCi0gICAgdm9pZCBzZXRDb250ZW50
c0RpcnR5KCkgeyBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9p
ZCBzZXRUZXh0dXJlKFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlPik7Ci0KLSAgICAvLyBOZXZlciBh
c3NpZ24gdG8gbV90ZXh0dXJlIGRpcmVjdGx5LCB1c2Ugc2V0VGV4dHVyZSgpIGFib3ZlLgotICAg
IFJlZlB0cjxMYXllclRleHR1cmU+IG1fdGV4dHVyZTsKLSAgICBkb3VibGUgbV9zY2FsZTsKLSAg
ICBib29sIG1fY29udGVudHNEaXJ0eSA6IDE7Ci0gICAgYm9vbCBtX3Zpc2libGUgOiAxOwotfTsK
LQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYg
Ly8gVGV4dHVyZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyVGlsZUluZGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVJbmRleC5oCShyZXZpc2lvbiAxNjE1
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
VGlsZUluZGV4LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIExheWVyVGlsZUluZGV4
X2gKLSNkZWZpbmUgTGF5ZXJUaWxlSW5kZXhfaAotCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVGlsZUlu
ZGV4IHsKLXB1YmxpYzoKLSAgICBUaWxlSW5kZXgoKQotICAgICAgICA6IG1faShzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgICwgbV9qKHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICB7Ci0gICAgfQotICAgIFRpbGVJbmRleCh1bnNp
Z25lZCBpLCB1bnNpZ25lZCBqKQotICAgICAgICA6IG1faShpKQotICAgICAgICAsIG1faihqKQot
ICAgIHsKLSAgICB9Ci0gICAgflRpbGVJbmRleCgpIHsgfQotCi0gICAgdW5zaWduZWQgaSgpIGNv
bnN0IHsgcmV0dXJuIG1faTsgfQotICAgIHVuc2lnbmVkIGooKSBjb25zdCB7IHJldHVybiBtX2o7
IH0KLSAgICB2b2lkIHNldEluZGV4KHVuc2lnbmVkIGksIHVuc2lnbmVkIGopCi0gICAgewotICAg
ICAgICBtX2kgPSBpOwotICAgICAgICBtX2ogPSBqOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1
bnNpZ25lZCBtX2k7Ci0gICAgdW5zaWduZWQgbV9qOwotfTsKLQotaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUaWxlSW5kZXgmIGEsIGNvbnN0IFRpbGVJbmRleCYgYikKLXsKLSAgICByZXR1
cm4gYS5pKCkgPT0gYi5pKCkgJiYgYS5qKCkgPT0gYi5qKCk7Ci19Ci0KLWlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgVGlsZUluZGV4JiBhLCBjb25zdCBUaWxlSW5kZXgmIGIpCi17Ci0gICAg
cmV0dXJuIGEuaSgpICE9IGIuaSgpIHx8IGEuaigpICE9IGIuaigpOwotfQotCi19Ci0KLW5hbWVz
cGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBJbnRIYXNoPFdlYkNvcmU6OlRpbGVJbmRl
eD4gewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OlRpbGVJbmRleCYg
a2V5KSB7IHJldHVybiBpbnRIYXNoKChzdGF0aWNfY2FzdDx1aW50NjRfdD4oa2V5LmkoKSkgPDwg
MzIgfCBrZXkuaigpKSk7IH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpU
aWxlSW5kZXgmIGEsIGNvbnN0IFdlYkNvcmU6OlRpbGVJbmRleCYgYikgeyByZXR1cm4gYSA9PSBi
OyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSB0cnVlOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OlRpbGVJ
bmRleD4gewotICAgIHR5cGVkZWYgSW50SGFzaDxXZWJDb3JlOjpUaWxlSW5kZXg+IEhhc2g7Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdlYkNvcmU6OlRpbGVJbmRleD4gOiBH
ZW5lcmljSGFzaFRyYWl0czxXZWJDb3JlOjpUaWxlSW5kZXg+IHsKLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwotICAgIHN0YXRpYyBXZWJDb3JlOjpUaWxlSW5kZXggZW1w
dHlWYWx1ZSgpIHsgcmV0dXJuIFdlYkNvcmU6OlRpbGVJbmRleCgpOyB9Ci0gICAgc3RhdGljIHZv
aWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFdlYkNvcmU6OlRpbGVJbmRleCYgc2xvdCkKLSAgICB7
Ci0gICAgICAgIG5ldyAoJnNsb3QpIFdlYkNvcmU6OlRpbGVJbmRleChzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkgLSAxLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgLSAxKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qg
V2ViQ29yZTo6VGlsZUluZGV4JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5p
KCkgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gMSAmJiB2YWx1ZS5q
KCkgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gMTsKLSAgICB9Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIExheWVyVGlsZUluZGV4X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllclRpbGVyLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJMYXllclRpbGVyLmgiCi0KLSNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUg
IkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKLSNpbmNsdWRlICJMYXllck1lc3NhZ2UuaCIKLSNp
bmNsdWRlICJMYXllclJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiTGF5ZXJVdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJMYXllcldlYktpdFRocmVhZC5oIgotI2luY2x1ZGUgIlRleHR1cmVDYWNoZUNvbXBv
c2l0aW5nVGhyZWFkLmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMlByb2dy
YW0uaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TY3JlZW4uaD4KLSNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1TZXR0aW5ncy5oPgotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2lu
Y2x1ZGUgX05UT19DUFVfSERSXyhzbXB4Y2hnLmgpCi0KLSNkZWZpbmUgREVCVUdfTEFZRVJfVklT
SUJJTElUWSAwIC8vIFNob3cgdmlzaWJsZSByZWdpb24gb2YgbGF5ZXJzIGFzIGEgdGhpY2sgYm9y
ZGVyLCBhbmQgcHJpbnQgdmlzaWJsZSByZWN0LgotI2lmIERFQlVHX0xBWUVSX1ZJU0lCSUxJVFkK
LSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotdXNp
bmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW07Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTGF5ZXJWaXNpYmlsaXR5IHsKLXB1YmxpYzoKLSAgICBM
YXllclZpc2liaWxpdHkoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSGFzaFNl
dDxUaWxlSW5kZXg+JiB0aWxlc05lZWRpbmdSZW5kZXIpCi0gICAgICAgIDogbV92aXNpYmxlUmVj
dCh2aXNpYmxlUmVjdCkKLSAgICAgICAgLCBtX3RpbGVzTmVlZGluZ1JlbmRlcih0aWxlc05lZWRp
bmdSZW5kZXIpCi0gICAgewotICAgIH0KLQotICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlzaWJsZVJlY3Q7IH0KLSAgICB2b2lkIHNldFZpc2libGVSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpIHsgbV92aXNpYmxlUmVjdCA9IHZpc2libGVSZWN0
OyB9Ci0KLSAgICBib29sIG5lZWRzUmVuZGVyKCkgY29uc3QgeyByZXR1cm4gIW1fdGlsZXNOZWVk
aW5nUmVuZGVyLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgdGlsZU5lZWRzUmVuZGVyKGNvbnN0IFRp
bGVJbmRleCYgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZXNOZWVkaW5nUmVuZGVyLmNvbnRh
aW5zKGluZGV4KTsgfQotICAgIHZvaWQgbWFya1RpbGVBc1JlbmRlcmVkKGNvbnN0IFRpbGVJbmRl
eCYgaW5kZXgpIHsgbV90aWxlc05lZWRpbmdSZW5kZXIucmVtb3ZlKGluZGV4KTsgbV90aWxlc1Jl
bmRlcmVkLmFkZChpbmRleCk7IH0KLSAgICB2b2lkIHN3YXBUaWxlc05lZWRpbmdSZW5kZXIoSGFz
aFNldDxUaWxlSW5kZXg+JiB0aWxlc05lZWRpbmdSZW5kZXIpIHsgbV90aWxlc05lZWRpbmdSZW5k
ZXIuc3dhcCh0aWxlc05lZWRpbmdSZW5kZXIpOyB9Ci0gICAgdm9pZCBjbGVhclRpbGVzUmVuZGVy
ZWQoKSB7IG1fdGlsZXNSZW5kZXJlZC5jbGVhcigpOyB9Ci0KLSAgICB2b2lkIG1lcmdlKExheWVy
VmlzaWJpbGl0eSogdmlzaWJpbGl0eSkKLSAgICB7Ci0gICAgICAgIGlmICghdmlzaWJpbGl0eSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV90aWxlc1JlbmRlcmVkLnN3YXAodmlzaWJp
bGl0eS0+bV90aWxlc1JlbmRlcmVkKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFRpbGVJbmRleD46
Oml0ZXJhdG9yIGl0ID0gbV90aWxlc1JlbmRlcmVkLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXNSZW5k
ZXJlZC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIG1fdGlsZXNOZWVkaW5nUmVuZGVyLnJlbW92
ZSgqaXQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBGbG9hdFJlY3QgbV92aXNpYmxlUmVjdDsK
LSAgICBIYXNoU2V0PFRpbGVJbmRleD4gbV90aWxlc05lZWRpbmdSZW5kZXI7Ci0gICAgSGFzaFNl
dDxUaWxlSW5kZXg+IG1fdGlsZXNSZW5kZXJlZDsKLX07Ci0KLS8vIFRoaXMgaXMgdXNlZCB0byBt
YWtlIHRoZSB2aWV3cG9ydCBhcyB1c2VkIGluIHRleHR1cmUgdmlzaWJpbGl0eSBjYWxjdWxhdGlv
bnMKLS8vIHNsaWdodGx5IGxhcmdlciBzbyB0ZXh0dXJlcyBhcmUgdXBsb2FkZWQgYmVmb3JlIGJl
Y29taW5nIHJlYWxseSB2aXNpYmxlLgotLy8gSW5mbGF0aW9uIGlzIGdyZWF0ZXIgaW4gWSBkaXJl
Y3Rpb24gKG9uZSBzY3JlZW5mdWwgaW4gZWl0aGVyIGRpcmVjdGlvbikgc2luY2UKLS8vIHNjcm9s
bGluZyB2ZXJ0aWNhbGx5IGlzIG1vcmUgY29tbW9uLCBhbmQgZWFzaWx5IHJlYWNoZXMgaGlnaGVy
IHZlbG9jaXR5LCB0aGFuCi0vLyBzY3JvbGxpbmcgaG9yaXpvbnRhbGx5LgotLy8gVGhlIHZpZXdw
b3J0SW5mbGF0aW9uIGlzIGV4cHJlc3NlZCBhcyBhIGZyYWN0aW9uIHRvIG11bHRpcGx5IHRoZSB2
aWV3cG9ydCBieSwgYW5kCi0vLyBpdCBpcyBjZW50ZXJlZC4KLS8vIEEgaGVpZ2h0IG9mIDMgbWVh
bnMgdG8gY29uc2lkZXIgb25lIHNjcmVlbmZ1bCBhYm92ZSBhbmQgb25lIHNjcmVlbmZ1bCBiZWxv
dyB0aGUKLS8vIGN1cnJlbnQgdmlld3BvcnQgYXMgdmlzaWJsZS4KLWNvbnN0IEZsb2F0U2l6ZSB2
aWV3cG9ydEluZmxhdGlvbigxLjJmLCAzLjBmKTsKLQotLy8gVGhpcyBpcyBhIHNtYWxsIG9wdGlt
aXphdGlvbiB0byBjdXQgZG93biBvbiBjYWxscyB0byBvcGVyYXRvciBuZXcuCi0vLyBTaW5jZSB0
aGUgY29tcG9zaXRpbmcgdGhyZWFkIG5vcm1hbGx5IHN3YXBzIGluIG5ldyB2aXNpYmlsaXR5IG9i
amVjdHMgbXVjaCBtb3JlCi0vLyBvZnRlbiB0aGFuIHRoZSBXZWJLaXQgdGhyZWFkIHN3YXBzIHRo
ZW0gb3V0LCBpdCdzIGxpa2VseSB0aGF0IGl0IHdpbGwgc3dhcCBvdXQKLS8vIHRoZSBwcmV2aW91
cyB2aXNpYmlsaXR5IG9iamVjdCBhbmQgd2UgY2FuIHJldXNlIHRoYXQuCi1zdGF0aWMgTGF5ZXJW
aXNpYmlsaXR5KiBzX3NwYXJlVmlzaWJpbGl0eSA9IDA7Ci0KLXN0YXRpYyBJbnRTaXplIGRlZmF1
bHRUaWxlU2l6ZSgpCi17Ci0gICAgc3RhdGljIEludFNpemUgc2l6ZShCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPnRpbGVTaXplKCkpOwotICAgIHJldHVybiBzaXpl
OwotfQotCi1MYXllclRpbGVyOjpMYXllclRpbGVyKExheWVyV2ViS2l0VGhyZWFkKiBsYXllcikK
LSAgICA6IG1fbGF5ZXIobGF5ZXIpCi0gICAgLCBtX25lZWRzQmFja2luZyhmYWxzZSkKLSAgICAs
IG1fY29udGVudHNEaXJ0eShmYWxzZSkKLSAgICAsIG1fdGlsZVNpemUoZGVmYXVsdFRpbGVTaXpl
KCkpCi0gICAgLCBtX2NsZWFyVGV4dHVyZUpvYnMoZmFsc2UpCi0gICAgLCBtX2Zyb250VmlzaWJp
bGl0eSgwKQotICAgICwgbV9iYWNrVmlzaWJpbGl0eSgwKQotewotICAgIHJlZigpOyAvLyBUaGlz
IHJlZigpIGlzIG1hdGNoZWQgYnkgYSBkZXJlZiBpbiBsYXllckNvbXBvc2l0aW5nVGhyZWFkRGVz
dHJveWVkKCk7Ci19Ci0KLUxheWVyVGlsZXI6On5MYXllclRpbGVyKCkKLXsKLSAgICAvLyBTb21l
b25lIHNob3VsZCBoYXZlIGNhbGxlZCBMYXllclRpbGVyOjpkZWxldGVUZXh0dXJlcygpCi0gICAg
Ly8gYmVmb3JlIG5vdy4gV2UgY2FuJ3QgY2FsbCBpdCBoZXJlIGJlY2F1c2Ugd2UgaGF2ZSBubwot
ICAgIC8vIE9wZW5HTCBjb250ZXh0LgotICAgIEFTU0VSVChtX3RpbGVzLmlzRW1wdHkoKSk7Ci0K
LSAgICBkZWxldGUgbV9mcm9udFZpc2liaWxpdHk7Ci0gICAgZGVsZXRlIG1fYmFja1Zpc2liaWxp
dHk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6bGF5ZXJXZWJLaXRUaHJlYWREZXN0cm95ZWQoKQot
ewotICAgIG1fbGF5ZXIgPSAwOwotfQotCi12b2lkIExheWVyVGlsZXI6OmxheWVyQ29tcG9zaXRp
bmdUaHJlYWREZXN0cm95ZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCi17Ci0gICAgQVNTRVJU
KGlzQ29tcG9zaXRpbmdUaHJlYWQoKSk7Ci0gICAgZGVyZWYoKTsgLy8gTWF0Y2hlZCBieSByZWYo
KSBpbiBjb25zdHJ1Y3RvcjsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpzZXROZWVkc0Rpc3BsYXko
Y29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgbV9kaXJ0eVJlY3QudW5pdGUoZGly
dHlSZWN0KTsKLSAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIExheWVyVGls
ZXI6OnNldE5lZWRzRGlzcGxheSgpCi17Ci0gICAgbV9kaXJ0eVJlY3Quc2V0TG9jYXRpb24oRmxv
YXRQb2ludDo6emVybygpKTsKLSAgICBtX2RpcnR5UmVjdC5zZXRTaXplKG1fbGF5ZXItPmJvdW5k
cygpKTsKLSAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIExheWVyVGlsZXI6
OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKGRvdWJsZSBzY2FsZSkKLXsKLSAgICB1cGRh
dGVUaWxlU2l6ZSgpOwotCi0gICAgLy8gSWYgd2UncmUgZGlydHksIHN0YXJ0IGZyZXNoLiBPdGhl
cndpc2UsIHdlIGtlZXAgdHJhY2sgb2YgdGlsZXMgcmVuZGVyZWQgc28gZmFyIGJ5IG1lcmdpbmcK
LSAgICAvLyB0aGVtIGludG8gdGhlIG5ldyB2aXNpYmlsaXR5IG9iamVjdCBmdXJ0aGVyIGRvd24s
IHRvIGF2b2lkIHJlLXJlbmRlcmluZyB0aGUgc2FtZSBjb250ZW50LgotICAgIGlmIChtX2NvbnRl
bnRzRGlydHkgJiYgbV9iYWNrVmlzaWJpbGl0eSkKLSAgICAgICAgbV9iYWNrVmlzaWJpbGl0eS0+
Y2xlYXJUaWxlc1JlbmRlcmVkKCk7Ci0KLSAgICAvLyBTd2FwIGluIHRoZSBuZXcgdmlzaWJpbGl0
eSBvYmplY3QgYW5kIG1lcmdlIG9sZCB2aXNpYmlsaXR5IG9iamVjdCBpbnRvIGl0LgotICAgIGlm
IChMYXllclZpc2liaWxpdHkqIGZyb250VmlzaWJpbGl0eSA9IHRha2VGcm9udFZpc2liaWxpdHko
KSkgewotICAgICAgICBmcm9udFZpc2liaWxpdHktPm1lcmdlKG1fYmFja1Zpc2liaWxpdHkpOwot
ICAgICAgICBkZWxldGUgbV9iYWNrVmlzaWJpbGl0eTsKLSAgICAgICAgbV9iYWNrVmlzaWJpbGl0
eSA9IGZyb250VmlzaWJpbGl0eTsKLSAgICB9Ci0KLSAgICBib29sIG5lZWRzUmVuZGVyID0gbV9i
YWNrVmlzaWJpbGl0eSAmJiBtX2JhY2tWaXNpYmlsaXR5LT5uZWVkc1JlbmRlcigpOwotICAgIGlm
ICghbV9jb250ZW50c0RpcnR5ICYmICFuZWVkc1JlbmRlcikKLSAgICAgICAgcmV0dXJuOwotCi0j
aWYgREVCVUdfTEFZRVJfVklTSUJJTElUWQotICAgIGlmIChtX2JhY2tWaXNpYmlsaXR5ICYmICFt
X2JhY2tWaXNpYmlsaXR5LT52aXNpYmxlUmVjdCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcHJpbnRm
KCJMYXllciAweCVwIGxvY2FsIHZpc2libGUgcmVjdCAlc1xuIiwgbV9sYXllciwgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkZsb2F0UmVjdChtX2JhY2tWaXNpYmlsaXR5LT52aXNpYmxlUmVjdCgpKS50
b1N0cmluZygpLmNfc3RyKCkpOwotI2VuZGlmCi0KLSAgICAvLyBUaGVyZSdzIG5vIHBvaW50IGlu
IGRyYXdpbmcgY29udGVudHMgYXQgYSBoaWdoZXIgcmVzb2x1dGlvbiBmb3Igc2NhbGUgaW52YXJp
YW50IGxheWVycy4KLSAgICBpZiAobV9sYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKLSAg
ICAgICAgc2NhbGUgPSAxOwotCi0gICAgLy8gUmVuZGVyIG9ubHkgdmlzaWJsZSB0aWxlcy4gTWFz
ayBsYXllcnMgYXJlIGEgc3BlY2lhbCBjYXNlLCBiZWNhdXNlIHRoZXkncmUgbmV2ZXIgY29uc2lk
ZXJlZAotICAgIC8vIHZpc2libGUuIFdvcmthcm91bmQgdGhpcyBieSBhbHdheXMgcmVuZGVyaW5n
IHRoZW0gKGEgdmVyeSBmYXN0IG9wZXJhdGlvbiB3aXRoIHRoZQotICAgIC8vIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljc0NvbnRleHQgc2luY2UgaXQgd2lsbCBqdXN0IHJlc3VsdCBpbiBy
ZWYnaW5nIHRoZSBtYXNrIGltYWdlKS4KLSAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3Q7Ci0gICAg
aWYgKG1fbGF5ZXItPmlzTWFzaygpIHx8IG1fbGF5ZXItPmZpbHRlcnMoKS5zaXplKCkpCi0gICAg
ICAgIHZpc2libGVSZWN0ID0gRmxvYXRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fbGF5ZXItPmJv
dW5kcygpKTsKLSAgICBlbHNlIGlmIChtX2JhY2tWaXNpYmlsaXR5KQotICAgICAgICB2aXNpYmxl
UmVjdCA9IG1fYmFja1Zpc2liaWxpdHktPnZpc2libGVSZWN0KCk7Ci0gICAgZWxzZQotICAgICAg
ICB2aXNpYmxlUmVjdCA9IEZsb2F0UmVjdChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRSZWN0
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+bGF5ZXJUaWxlclBy
ZWZpbGxSZWN0KCkpKTsKLQotICAgIEludFJlY3QgZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChtX2RpcnR5UmVjdCk7Ci0gICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplOwotCi0gICAg
aWYgKG1fbGF5ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAgIC8vIExheWVyIGNvbnRlbnRz
IG11c3QgYmUgZHJhd24gaW50byBhIGNhbnZhcy4KLSAgICAgICAgSW50UmVjdCB1bnRyYW5zZm9y
bWVkRGlydHlSZWN0KGRpcnR5UmVjdCk7Ci0gICAgICAgIEludFJlY3QgYm91bmRzUmVjdChJbnRQ
b2ludDo6emVybygpLCBtX2xheWVyLT5ib3VuZHMoKSk7Ci0gICAgICAgIEludFJlY3QgdW50cmFu
c2Zvcm1lZEJvdW5kc1JlY3QoYm91bmRzUmVjdCk7Ci0gICAgICAgIHJlcXVpcmVkVGV4dHVyZVNp
emUgPSBib3VuZHNSZWN0LnNpemUoKTsKLQotICAgICAgICBpZiAoc2NhbGUgIT0gMSkgewotICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgICAgICAgICAgbWF0cml4
LnNjYWxlKHNjYWxlKTsKLQotICAgICAgICAgICAgZGlydHlSZWN0ID0gbWF0cml4Lm1hcFJlY3Qo
dW50cmFuc2Zvcm1lZERpcnR5UmVjdCk7Ci0gICAgICAgICAgICByZXF1aXJlZFRleHR1cmVTaXpl
ID0gbWF0cml4Lm1hcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZXF1aXJlZFRleHR1
cmVTaXplKSkuc2l6ZSgpOwotICAgICAgICAgICAgYm91bmRzUmVjdCA9IG1hdHJpeC5tYXBSZWN0
KHVudHJhbnNmb3JtZWRCb3VuZHNSZWN0KTsKLSAgICAgICAgICAgIC8vIFRoZSB2aXNpYmxlIHJl
Y3QgaXMgdXNpbmcgdW5zY2FsZWQgY29vcmRpbmF0ZXMgaW4gbW9zdCBjYXNlcy4KLSAgICAgICAg
ICAgIGlmIChtX2JhY2tWaXNpYmlsaXR5IHx8IG1fbGF5ZXItPmlzTWFzaygpIHx8IG1fbGF5ZXIt
PmZpbHRlcnMoKS5zaXplKCkpCi0gICAgICAgICAgICAgICAgdmlzaWJsZVJlY3QgPSBtYXRyaXgu
bWFwUmVjdCh2aXNpYmxlUmVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVxdWlyZWRU
ZXh0dXJlU2l6ZSAhPSBtX3BlbmRpbmdUZXh0dXJlU2l6ZSkKLSAgICAgICAgICAgIGRpcnR5UmVj
dCA9IGJvdW5kc1JlY3Q7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gQ2xpcCB0aGUg
ZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRoZSBsYXllciB0byBhdm9pZCBkcmF3aW5nCi0gICAg
ICAgICAgICAvLyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGJhY2tpbmcgdGV4dHVyZS4KLSAg
ICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoYm91bmRzUmVjdCk7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKG1fbGF5ZXItPmNvbnRlbnRzKCkpIHsKLSAgICAgICAgLy8gTGF5ZXIgaXMg
YSBjb250YWluZXIsIGFuZCBpdCBjb250YWlucyBhbiBJbWFnZS4KLSAgICAgICAgcmVxdWlyZWRU
ZXh0dXJlU2l6ZSA9IG1fbGF5ZXItPmNvbnRlbnRzKCktPnNpemUoKTsKLSAgICAgICAgZGlydHlS
ZWN0ID0gSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZXF1aXJlZFRleHR1cmVTaXplKTsKLSAg
ICB9Ci0KLSAgICBpZiAobV9wZW5kaW5nVGV4dHVyZVNpemUgIT0gcmVxdWlyZWRUZXh0dXJlU2l6
ZSkgewotICAgICAgICBtX3BlbmRpbmdUZXh0dXJlU2l6ZSA9IHJlcXVpcmVkVGV4dHVyZVNpemU7
Ci0gICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6cmVzaXplQ29udGVudHMobV9wZW5k
aW5nVGV4dHVyZVNpemUpKTsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRlbnRzRGlydHkgPSBtX2Nv
bnRlbnRzRGlydHk7Ci0gICAgaWYgKG1fY29udGVudHNEaXJ0eSkgewotICAgICAgICAvLyBJZiB3
ZSdyZSBub3QgZ29pbmcgdG8gcmUtcmVuZGVyIGFsbCB0aGUgY292ZXJlZCB0aWxlcywgbWFyayB0
aG9zZSBub3QgY292ZXJlZCBhcyBkaXJ0eS4KLSAgICAgICAgaWYgKCF2aXNpYmxlUmVjdC5jb250
YWlucyhkaXJ0eVJlY3QpKQotICAgICAgICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpk
aXJ0eUNvbnRlbnRzKGRpcnR5UmVjdCkpOwotICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxz
ZTsKLSAgICAgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKLSAgICB9Ci0KLSAgICAvLyBJ
ZiB3ZSBuZWVkIGRpc3BsYXkgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCB0byBiZSBkaXNwbGF5
ZWQsIGR1ZSB0byB0ZXh0dXJlIHNpemUgYmVjb21pbmcgMCB4IDAsCi0gICAgLy8gb3IgaWYgd2Un
cmUgcmUtcmVuZGVyaW5nIHRoZSB3aG9sZSB0aGluZyBhbnl3YXksIGNsZWFyIG9sZCB0ZXh0dXJl
IGpvYnMuCi0gICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUuaXNFbXB0eSgpIHx8IGRpcnR5UmVj
dCA9PSBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlcXVpcmVkVGV4dHVyZVNpemUpKQotICAg
ICAgICBjbGVhclRleHR1cmVKb2JzKCk7Ci0KLSAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIYXNoU2V0PFRpbGVJbmRleD4gcmVuZGVySm9iczsK
LSAgICBUaWxlSW5kZXggZmlyc3Q7Ci0gICAgVGlsZUluZGV4IGxhc3Q7Ci0gICAgaWYgKG1fbGF5
ZXItPmNvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KCkpIHsKLSAgICAgICAgLy8gUmVzb2x1
dGlvbiBpbmRlcGVuZGVudCBsYXllcnMgaGF2ZSBhbGwgdGhlIG5lZWRlZCBkYXRhIGluIHRoZSBm
aXJzdCB0aWxlLgotICAgICAgICBmaXJzdCA9IGxhc3QgPSBUaWxlSW5kZXgoMCwgMCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgZmlyc3QgPSBpbmRleE9mVGlsZShmbG9vcmVkSW50UG9pbnQodmlz
aWJsZVJlY3QubWluWE1pbllDb3JuZXIoKSkpOwotICAgICAgICBsYXN0ID0gaW5kZXhPZlRpbGUo
Y2VpbGVkSW50UG9pbnQodmlzaWJsZVJlY3QubWF4WE1heFlDb3JuZXIoKSkgKyBJbnRQb2ludCgt
MSwgLTEpKTsgLy8gVGhlIG9yaWdpbiBzaG91bGQgYmUgdGhlIHRvcCBsZWZ0IG9mIHRoZSBib3R0
b20gcmlnaHQgcGl4ZWwuCi0gICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0LmkoKTsg
aSA8PSBsYXN0LmkoKTsgKytpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IGZpcnN0Lmoo
KTsgaiA8PSBsYXN0LmooKTsgKytqKSB7Ci0gICAgICAgICAgICBUaWxlSW5kZXggaW5kZXgoaSwg
aik7Ci0gICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGUoaW5kZXgsIHJl
cXVpcmVkVGV4dHVyZVNpemUpOwotICAgICAgICAgICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKG1fYmFja1Zpc2li
aWxpdHkgJiYgbV9iYWNrVmlzaWJpbGl0eS0+dGlsZU5lZWRzUmVuZGVyKGluZGV4KSkgewotI2lm
IERFQlVHX0xBWUVSX1ZJU0lCSUxJVFkKLSAgICAgICAgICAgICAgICBwcmludGYoIlRpbGUgYXQg
KCVkLCAlZCkgbmVlZHMgcmVuZGVyXG4iLCBpbmRleC5pKCksIGluZGV4LmooKSk7Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICByZW5kZXJKb2JzLmFkZChpbmRleCk7Ci0gICAgICAgICAgICAgICAg
bV9iYWNrVmlzaWJpbGl0eS0+bWFya1RpbGVBc1JlbmRlcmVkKGluZGV4KTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoY29udGVudHNEaXJ0eSAmJiBkaXJ0eVJlY3QuaW50ZXJzZWN0cyh0aWxlUmVj
dCkpCi0gICAgICAgICAgICAgICAgcmVuZGVySm9icy5hZGQoaW5kZXgpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHJlbmRlckpvYnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoSW1hZ2UqIGltYWdlID0gbV9sYXllci0+Y29udGVudHMoKSkgewotICAgICAgICAv
LyBJZiB3ZSBuZWVkIGJhY2tpbmcsIHdlIGhhdmUgbm8gY2hvaWNlIGJ1dCB0byBlbmZvcmNlIHRo
ZSB0aWxlIHNpemUsIHdoaWNoIGNvdWxkIGNhdXNlIGNsaXBwaW5nLgotICAgICAgICAvLyBPdGhl
cndpc2UsIGRvbid0IGNsaXAgLSBpbmNsdWRlIHRoZSB3aG9sZSBpbWFnZS4KLSAgICAgICAgSW50
U2l6ZSBidWZmZXJTaXplID0gbV9uZWVkc0JhY2tpbmcgPyB0aWxlU2l6ZSgpIDogaW1hZ2UtPnNp
emUoKTsKLSAgICAgICAgaWYgKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVy
KiBidWZmZXIgPSBjcmVhdGVCdWZmZXIoYnVmZmVyU2l6ZSkpIHsKLSAgICAgICAgICAgIEludFJl
Y3QgY29udGVudHNSZWN0KEludFBvaW50Ojp6ZXJvKCksIGltYWdlLT5zaXplKCkpOwotICAgICAg
ICAgICAgbV9sYXllci0+cGFpbnRDb250ZW50cyhidWZmZXIsIGNvbnRlbnRzUmVjdCwgc2NhbGUp
OwotICAgICAgICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpzZXRDb250ZW50cyhidWZm
ZXIsIGNvbnRlbnRzUmVjdCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2xheWVyLT5k
cmF3c0NvbnRlbnQoKSkgewotICAgICAgICBmb3IgKEhhc2hTZXQ8VGlsZUluZGV4Pjo6aXRlcmF0
b3IgaXQgPSByZW5kZXJKb2JzLmJlZ2luKCk7IGl0ICE9IHJlbmRlckpvYnMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgICAgIGlmIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZl
ciogYnVmZmVyID0gY3JlYXRlQnVmZmVyKHRpbGVTaXplKCkpKSB7Ci0gICAgICAgICAgICAgICAg
SW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlKCppdCwgcmVxdWlyZWRUZXh0dXJlU2l6ZSk7
Ci0gICAgICAgICAgICAgICAgbV9sYXllci0+cGFpbnRDb250ZW50cyhidWZmZXIsIHRpbGVSZWN0
LCBzY2FsZSk7Ci0gICAgICAgICAgICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjp1cGRh
dGVDb250ZW50cyhidWZmZXIsIHRpbGVSZWN0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLUJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBMYXll
clRpbGVyOjpjcmVhdGVCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlclR5cGUgYnVmZmVyVHlwZSA9IG1fbmVlZHNC
YWNraW5nID8gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpBbHdheXNCYWNrZWQgOiBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJhY2tlZFdoZW5OZWNlc3Nhcnk7Ci0gICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciA9IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Y3JlYXRlQnVmZmVyKHNpemUsIGJ1ZmZlclR5cGUpOwot
ICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6YWRkVGV4dHVyZUpvYihj
b25zdCBUZXh0dXJlSm9iJiBqb2IpCi17Ci0gICAgbV9wZW5kaW5nVGV4dHVyZUpvYnMuYXBwZW5k
KGpvYik7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6Y2xlYXJUZXh0dXJlSm9icygpCi17Ci0gICAg
Ly8gQ2xlYXIgYW55IGNvbW1pdHRlZCB0ZXh0dXJlIGpvYnMgb24gbmV4dCBpbnZvY2F0aW9uIG9m
IExheWVyVGlsZXI6OmNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcygpLgotICAgIG1fY2xlYXJU
ZXh0dXJlSm9icyA9IHRydWU7Ci0KLSAgICByZW1vdmVVcGRhdGVDb250ZW50c0pvYnMobV9wZW5k
aW5nVGV4dHVyZUpvYnMpOwotfQotCi1zdGF0aWMgc2l6ZV90IGJhY2tpbmdTaXplSW5CeXRlcyA9
IDA7Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6d2lsbENvbW1pdCgpCi17Ci0gICAgYmFja2luZ1NpemVJ
bkJ5dGVzID0gMDsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpjb21taXRQZW5kaW5nVGV4dHVyZVVw
bG9hZHMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCi17Ci0gICAgaWYgKG1fY2xlYXJUZXh0dXJl
Sm9icykgewotICAgICAgICByZW1vdmVVcGRhdGVDb250ZW50c0pvYnMobV90ZXh0dXJlSm9icyk7
Ci0gICAgICAgIG1fY2xlYXJUZXh0dXJlSm9icyA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRo
ZXJlJ3Mgbm8gcG9pbnQgaW4gcmVuZGVyaW5nIG1vcmUgdGhhbiB0aGUgY2FjaGUgY2FwYWNpdHkg
ZHVyaW5nIG9uZSBmcmFtZS4KLSAgICBjb25zdCBzaXplX3QgbWF4QmFja2luZ1BlckZyYW1lID0g
dGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+bWVtb3J5TGltaXQoKTsKLQotICAgIGZv
ciAoVmVjdG9yPFRleHR1cmVKb2I+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1RleHR1cmVKb2Jz
LmJlZ2luKCk7IGl0ICE9IG1fcGVuZGluZ1RleHR1cmVKb2JzLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIFRleHR1cmVKb2ImIHRleHR1cmVKb2IgPSAqaXQ7Ci0KLSAgICAgICAgLy8gVXBkYXRlIGJh
Y2tpbmcgc3VyZmFjZSBmb3IgYmFja2VkIHRpbGVzIG5vdywgdG8gYXZvaWQgZHJvcHBpbmcgZnJh
bWVzIGR1cmluZyBhbmltYXRpb24uCi0gICAgICAgIGlmICh0ZXh0dXJlSm9iLm1fY29udGVudHMg
JiYgYmFja2luZ1NpemVJbkJ5dGVzIDwgbWF4QmFja2luZ1BlckZyYW1lKSB7Ci0gICAgICAgICAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnVwZGF0ZUJ1ZmZlckJhY2tpbmdTdXJm
YWNlKHRleHR1cmVKb2IubV9jb250ZW50cyk7Ci0gICAgICAgICAgICBiYWNraW5nU2l6ZUluQnl0
ZXMgKz0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpidWZmZXJTaXplSW5CeXRlcyh0
ZXh0dXJlSm9iLm1fY29udGVudHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV90ZXh0dXJlSm9i
cy5hcHBlbmQodGV4dHVyZUpvYik7Ci0gICAgfQotICAgIG1fcGVuZGluZ1RleHR1cmVKb2JzLmNs
ZWFyKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6ZGlzY2FyZEZyb250VmlzaWJpbGl0eSgpCi17
Ci0gICAgZGVsZXRlIG1fZnJvbnRWaXNpYmlsaXR5OwotICAgIG1fZnJvbnRWaXNpYmlsaXR5ID0g
MDsKLX0KLQotTGF5ZXJWaXNpYmlsaXR5KiBMYXllclRpbGVyOjpzd2FwRnJvbnRWaXNpYmlsaXR5
KExheWVyVmlzaWJpbGl0eSogdmlzaWJpbGl0eSkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxMYXllclZpc2liaWxpdHkqPihfc21wX3hjaGcocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCo+KCZtX2Zyb250VmlzaWJpbGl0eSksIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KHZpc2li
aWxpdHkpKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6c2V0RnJvbnRWaXNpYmlsaXR5KGNvbnN0
IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QsIEhhc2hTZXQ8VGlsZUluZGV4PiYgdGlsZXNOZWVkaW5n
UmVuZGVyKQotewotICAgIExheWVyVmlzaWJpbGl0eSogdmlzaWJpbGl0eSA9IHNfc3BhcmVWaXNp
YmlsaXR5OwotICAgIGlmICh2aXNpYmlsaXR5KSB7Ci0gICAgICAgIHZpc2liaWxpdHktPnNldFZp
c2libGVSZWN0KHZpc2libGVSZWN0KTsKLSAgICAgICAgdmlzaWJpbGl0eS0+c3dhcFRpbGVzTmVl
ZGluZ1JlbmRlcih0aWxlc05lZWRpbmdSZW5kZXIpOwotICAgIH0gZWxzZQotICAgICAgICB2aXNp
YmlsaXR5ID0gbmV3IExheWVyVmlzaWJpbGl0eSh2aXNpYmxlUmVjdCwgdGlsZXNOZWVkaW5nUmVu
ZGVyKTsKLSAgICBzX3NwYXJlVmlzaWJpbGl0eSA9IHN3YXBGcm9udFZpc2liaWxpdHkodmlzaWJp
bGl0eSk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXll
ckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKQotewotICAgIC8vIEZvciB2aXNpYmxl
IGxheWVycywgd2UgaGFuZGxlIHRoZSB0aWxlLWxldmVsIHZpc2liaWxpdHkKLSAgICAvLyBpbiB0
aGUgZHJhdyBsb29wLCBzZWUgTGF5ZXJUaWxlcjo6ZHJhd1RleHR1cmVzKCkuCi0gICAgaWYgKHZp
c2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hTZXQ8VGlsZUluZGV4PiBlbXB0eVRp
bGVTZXQ7Ci0gICAgc2V0RnJvbnRWaXNpYmlsaXR5KEZsb2F0UmVjdCgpLCBlbXB0eVRpbGVTZXQp
OwotfQotCi12b2lkIExheWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCogbGF5ZXIpCi17Ci0gICAgVGlsZUpvYnNNYXAgdGlsZUpvYnNNYXA7Ci0g
ICAgRGVxdWU8VGV4dHVyZUpvYj46OmNvbnN0X2l0ZXJhdG9yIHRleHR1cmVKb2JJdGVyRW5kID0g
bV90ZXh0dXJlSm9icy5lbmQoKTsKLSAgICBmb3IgKERlcXVlPFRleHR1cmVKb2I+Ojpjb25zdF9p
dGVyYXRvciB0ZXh0dXJlSm9iSXRlciA9IG1fdGV4dHVyZUpvYnMuYmVnaW4oKTsgdGV4dHVyZUpv
Ykl0ZXIgIT0gdGV4dHVyZUpvYkl0ZXJFbmQ7ICsrdGV4dHVyZUpvYkl0ZXIpCi0gICAgICAgIHBy
b2Nlc3NUZXh0dXJlSm9iKCp0ZXh0dXJlSm9iSXRlciwgdGlsZUpvYnNNYXApOwotCi0gICAgVGls
ZUpvYnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRpbGVKb2JzSXRlckVuZCA9IHRpbGVKb2JzTWFwLmVu
ZCgpOwotICAgIGZvciAoVGlsZUpvYnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRpbGVKb2JzSXRlciA9
IHRpbGVKb2JzTWFwLmJlZ2luKCk7IHRpbGVKb2JzSXRlciAhPSB0aWxlSm9ic0l0ZXJFbmQ7ICsr
dGlsZUpvYnNJdGVyKSB7Ci0gICAgICAgIEludFBvaW50IG9yaWdpbiA9IG9yaWdpbk9mVGlsZSh0
aWxlSm9ic0l0ZXItPmtleSk7Ci0KLSAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlcy5n
ZXQodGlsZUpvYnNJdGVyLT5rZXkpOwotICAgICAgICBpZiAoIXRpbGUpIHsKLSAgICAgICAgICAg
IGlmIChvcmlnaW4ueCgpID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG9yaWdp
bi55KCkgPj0gbV9yZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICB0aWxlID0gbmV3IExheWVyVGlsZSgpOwotICAgICAg
ICAgICAgbV90aWxlcy5hZGQodGlsZUpvYnNJdGVyLT5rZXksIHRpbGUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcGVyZm9ybVRpbGVKb2IobGF5ZXIsIHRpbGUsICp0aWxlSm9ic0l0ZXItPnZhbHVl
KTsKLSAgICB9Ci0KLSAgICBtX3RleHR1cmVKb2JzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgTGF5ZXJU
aWxlcjo6cHJvY2Vzc1RleHR1cmVKb2IoY29uc3QgVGV4dHVyZUpvYiYgam9iLCBUaWxlSm9ic01h
cCYgdGlsZUpvYnNNYXApCi17Ci0gICAgaWYgKGpvYi5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6UmVz
aXplQ29udGVudHMpIHsKLSAgICAgICAgSW50U2l6ZSBwZW5kaW5nVGV4dHVyZVNpemUgPSBqb2Iu
bV9kaXJ0eVJlY3Quc2l6ZSgpOwotICAgICAgICBpZiAocGVuZGluZ1RleHR1cmVTaXplLndpZHRo
KCkgPCBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBwZW5kaW5nVGV4dHVyZVNpemUu
aGVpZ2h0KCkgPCBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBw
cnVuZVRleHR1cmVzKHBlbmRpbmdUZXh0dXJlU2l6ZSk7Ci0KLSAgICAgICAgbV9yZXF1aXJlZFRl
eHR1cmVTaXplID0gcGVuZGluZ1RleHR1cmVTaXplOwotICAgICAgICByZXR1cm47Ci0gICAgfSBl
bHNlIGlmIChqb2IubV90eXBlID09IFRleHR1cmVKb2I6OkRpcnR5Q29udGVudHMpIHsKLSAgICAg
ICAgVGlsZUluZGV4IGZpcnN0ID0gaW5kZXhPZlRpbGUoam9iLm1fZGlydHlSZWN0Lm1pblhNaW5Z
Q29ybmVyKCkpOwotICAgICAgICBUaWxlSW5kZXggbGFzdCA9IGluZGV4T2ZUaWxlKGpvYi5tX2Rp
cnR5UmVjdC5tYXhYTWF4WUNvcm5lcigpICsgSW50UG9pbnQoLTEsIC0xKSk7IC8vIFRoZSBvcmln
aW4gc2hvdWxkIGJlIHRoZSB0b3AgbGVmdCBvZiB0aGUgYm90dG9tIHJpZ2h0IHBpeGVsLgotICAg
ICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBt
X3RpbGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0
KS5rZXk7Ci0gICAgICAgICAgICBpZiAoaW5kZXguaSgpID49IGZpcnN0LmkoKSAmJiBpbmRleC5q
KCkgPj0gZmlyc3QuaigpICYmIGluZGV4LmkoKSA8PSBsYXN0LmkoKSAmJiBpbmRleC5qKCkgPD0g
bGFzdC5qKCkpCi0gICAgICAgICAgICAgICAgKCppdCkudmFsdWUtPnNldENvbnRlbnRzRGlydHko
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYWRkVGlsZUpvYihp
bmRleE9mVGlsZShqb2IubV9kaXJ0eVJlY3QubWluWE1pbllDb3JuZXIoKSksIGpvYiwgdGlsZUpv
YnNNYXApOwotfQotCi12b2lkIExheWVyVGlsZXI6OmFkZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4
JiBpbmRleCwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBUaWxlSm9ic01hcCYgdGlsZUpvYnNNYXAp
Ci17Ci0gICAgLy8gSGFzaE1hcDo6YWRkIGFsd2F5cyByZXR1cm5zIGEgdmFsaWQgaXRlcmF0b3Ig
ZXZlbiB0aGUga2V5IGFscmVhZHkgZXhpc3RzLgotICAgIFRpbGVKb2JzTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gdGlsZUpvYnNNYXAuYWRkKGluZGV4LCAmam9iKTsKLQotICAgIC8vIFN1Y2Nlc3Nm
dWxseSBhZGRlZCB0aGUgbmV3IGpvYi4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIE92ZXJyaWRlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgaWYg
KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgJiYgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bV9jb250
ZW50cykKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpkZXN0cm95QnVm
ZmVyKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1fY29udGVudHMpOwotCi0gICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9ICZqb2I7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVK
b2IoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIExheWVyVGlsZSogdGlsZSwgY29uc3Qg
VGV4dHVyZUpvYiYgam9iKQotewotICAgIHN3aXRjaCAoam9iLm1fdHlwZSkgewotICAgIGNhc2Ug
VGV4dHVyZUpvYjo6U2V0Q29udGVudHM6Ci0gICAgICAgIHRpbGUtPnNldENvbnRlbnRzKGpvYi5t
X2NvbnRlbnRzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVGV4dHVyZUpvYjo6VXBkYXRl
Q29udGVudHM6Ci0gICAgICAgIHRpbGUtPnVwZGF0ZUNvbnRlbnRzKGpvYi5tX2NvbnRlbnRzLCBs
YXllci0+Y29udGVudHNTY2FsZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVGV4dHVy
ZUpvYjo6VW5rbm93bjoKLSAgICBjYXNlIFRleHR1cmVKb2I6OlJlc2l6ZUNvbnRlbnRzOgotICAg
IGNhc2UgVGV4dHVyZUpvYjo6RGlydHlDb250ZW50czoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLWJvb2wgTGF5ZXJUaWxlcjo6ZHJhd1RpbGUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCog
bGF5ZXIsIExheWVyVGlsZSogdGlsZSwgY29uc3QgVGlsZUluZGV4JiBpbmRleCwgZG91YmxlIHNj
YWxlLCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RDbGlwKQotewot
ICAgIHVuc2lnbmVkIGNoYXIgZ2xvYmFsQWxwaGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihsYXllci0+ZHJhd09wYWNpdHkoKSAqIDI1NSk7Ci0gICAgYm9vbCBzaG91bGREcmF3VGlsZSA9
IGRzdC5pbnRlcnNlY3RzKGRzdENsaXApICYmIGdsb2JhbEFscGhhOwotCi0gICAgLy8gRXZlbiBp
ZiB0aGUgdGlsZSBoYXMgd3Jvbmcgc2NhbGUsIGl0IGNhbiBiZSB1c2VkIGFzIGEgInByZXZpZXci
IGlmIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmxhcCB3aXRoIG90aGVyIHRpbGVzLgotICAgIGJv
b2wgdGlsZUhhc0NvcnJlY3RTY2FsZSA9IHRpbGUtPmNvbnRlbnRzU2NhbGUoKSA9PSAwLjAgfHwg
dGlsZS0+Y29udGVudHNTY2FsZSgpID09IGxheWVyLT5jb250ZW50c1NjYWxlKCk7Ci0gICAgaWYg
KCF0aWxlSGFzQ29ycmVjdFNjYWxlKQotICAgICAgICBzaG91bGREcmF3VGlsZSA9IHNob3VsZERy
YXdUaWxlICYmIChtX3RpbGVzLnNpemUoKSA9PSAxICYmICFpbmRleC5pKCkgJiYgIWluZGV4Lmoo
KSk7Ci0KLSAgICBpZiAodGlsZS0+aGFzVGV4dHVyZSgpKSB7Ci0gICAgICAgIExheWVyVGV4dHVy
ZSogdGV4dHVyZSA9IHRpbGUtPnRleHR1cmUoKTsKLSAgICAgICAgdGV4dHVyZUNhY2hlQ29tcG9z
aXRpbmdUaHJlYWQoKS0+dGV4dHVyZUFjY2Vzc2VkKHRleHR1cmUpOwotCi0gICAgICAgIGlmIChz
aG91bGREcmF3VGlsZSkgewotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1Ry
YW5zZm9ybSA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICBkcmF3VHJhbnNm
b3JtLnRyYW5zbGF0ZShkc3QueCgpLCBkc3QueSgpKTsKLSAgICAgICAgICAgIGlmIChsYXllci0+
Y29udGVudHNSZXNvbHV0aW9uSW5kZXBlbmRlbnQoKSkKLSAgICAgICAgICAgICAgICBkcmF3VHJh
bnNmb3JtLnNjYWxlTm9uVW5pZm9ybShkc3Qud2lkdGgoKSAvIG1fcmVxdWlyZWRUZXh0dXJlU2l6
ZS53aWR0aCgpLCBkc3QuaGVpZ2h0KCkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkp
OwotICAgICAgICAgICAgZWxzZSBpZiAodGlsZS0+Y29udGVudHNTY2FsZSgpKQotICAgICAgICAg
ICAgICAgIGRyYXdUcmFuc2Zvcm0uc2NhbGUoMSAvIHRpbGUtPmNvbnRlbnRzU2NhbGUoKSk7Ci0g
ICAgICAgICAgICBpZiAobGF5ZXItPnNpemVJc1NjYWxlSW52YXJpYW50KCkpCi0gICAgICAgICAg
ICAgICAgZHJhd1RyYW5zZm9ybS5zY2FsZSgxIC8gc2NhbGUpOwotICAgICAgICAgICAgYmxpdFRv
QnVmZmVyKDAsIHRleHR1cmUtPmJ1ZmZlcigpLCByZWludGVycHJldF9jYXN0PEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCY+KGRyYXdUcmFuc2Zvcm0pLAotICAgICAg
ICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U291cmNlT3ZlciwgZ2xv
YmFsQWxwaGEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRo
ZSB0aWxlIG5lZWRzIHRvIGJlIChyZS0pcmVuZGVyZWQuCi0gICAgcmV0dXJuICF0aWxlLT5pc0Rp
cnR5KCkgJiYgdGlsZUhhc0NvcnJlY3RTY2FsZTsKLX0KLQotc3RhdGljIEZsb2F0UmVjdCBpbmZs
YXRlVmlld3BvcnQoY29uc3QgRmxvYXRSZWN0JiB2aWV3cG9ydCkKLXsKLSAgICAvLyBFdmVyeXRo
aW5nIGlzIGV4cHJlc3NlZCBpbiBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcy4KLSAgICBG
bG9hdFNpemUgdmlld3BvcnRTaXplKHZpZXdwb3J0LnNpemUoKSk7Ci0gICAgdmlld3BvcnRTaXpl
LnNjYWxlKHZpZXdwb3J0SW5mbGF0aW9uLndpZHRoKCksIHZpZXdwb3J0SW5mbGF0aW9uLmhlaWdo
dCgpKTsKLQotICAgIEZsb2F0U2l6ZSB2aWV3cG9ydE9mZnNldCh2aWV3cG9ydC5zaXplKCkpOwot
ICAgIHZpZXdwb3J0T2Zmc2V0LnNjYWxlKHZpZXdwb3J0SW5mbGF0aW9uLndpZHRoKCkgLSAxLCB2
aWV3cG9ydEluZmxhdGlvbi5oZWlnaHQoKSAtIDEpOwotICAgIHZpZXdwb3J0T2Zmc2V0LnNjYWxl
KDAuNSk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KHZpZXdwb3J0LmxvY2F0aW9uKCkgLSB2aWV3
cG9ydE9mZnNldCwgdmlld3BvcnRTaXplKTsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpkcmF3VGV4
dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IEdMRVMyUHJvZ3JhbSYs
IGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBGbG9hdFJl
Y3QgYm91bmRzUmVjdCgtbGF5ZXItPm9yaWdpbigpLCBsYXllci0+Ym91bmRzKCkpOwotICAgIGlm
IChsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKLSAgICAgICAgYm91bmRzUmVjdC5zY2Fs
ZSgxIC8gc2NhbGUpOwotCi0gICAgRmxvYXRSZWN0IGluZmxhdGVkVmlld3BvcnQgPSBpbmZsYXRl
Vmlld3BvcnQoY2xpcFJlY3QpOwotCi0gICAgLy8gVW5wcm9qZWN0aW5nIHBvaW50cyBvdXRzaWRl
IHRoZSB0cmFuc2Zvcm1lZCBib3VuZHMgZ2l2ZXMgcG9vciBudW1lcmljYWwgc3RhYmlsaXR5IGlm
IHRoZXJlJ3MgYSBwZXJzcGVjdGl2ZSBlZmZlY3QsCi0gICAgLy8gc28gdW5wcm9qZWN0IHRoZSBj
bGlwcGVkIHRyYW5zZm9ybWVkIGJvdW5kcyBpbnN0ZWFkLgotICAgIFZlY3RvcjxGbG9hdFBvaW50
LCA0PiBjbGlwUG9seWdvbiA9IGludGVyc2VjdFBvbHlnb25XaXRoUmVjdChsYXllci0+dHJhbnNm
b3JtZWRCb3VuZHMoKSwgY2xpcFJlY3QpOwotICAgIGlmIChjbGlwUG9seWdvbi5pc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gVGhlIExheWVyUmVuZGVyZXIgZmlndXJlcyB3ZSdyZSB2aXNpYmxlLCBv
ciBpdCB3b3VsZG4ndCBoYXZlIGNhbGxlZCBpbnRvIHRoaXMgbWV0aG9kLCBidXQgd2UgYmVnIHRv
IGRpZmZlci4KLSAgICAgICAgbGF5ZXItPnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IG5vcm1hbGl6ZWRMYXllckNsaXBSZWN0ID0gRmxv
YXRSZWN0KDAsIDAsIDEsIDEpOwotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkTGF5ZXJWaXNpYmxl
UmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAxLCAxKTsKLQotICAgIGlmIChjbGlwUG9seWdvbiAhPSBs
YXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKSkgewotICAgICAgICBWZWN0b3I8RmxvYXRQb2ludCwg
ND4gbm9ybWFsaXplZExheWVyQ2xpcFBvbHlnb24gPSB1bnByb2plY3QobGF5ZXIsIGNsaXBQb2x5
Z29uKTsKLSAgICAgICAgbm9ybWFsaXplZExheWVyQ2xpcFJlY3QuaW50ZXJzZWN0KGJvdW5kaW5n
Qm94KG5vcm1hbGl6ZWRMYXllckNsaXBQb2x5Z29uKSk7Ci0KLSAgICAgICAgVmVjdG9yPEZsb2F0
UG9pbnQsIDQ+IHZpc2libGVQb2x5Z29uID0gaW50ZXJzZWN0UG9seWdvbldpdGhSZWN0KGxheWVy
LT50cmFuc2Zvcm1lZEJvdW5kcygpLCBpbmZsYXRlZFZpZXdwb3J0KTsKLSAgICAgICAgVmVjdG9y
PEZsb2F0UG9pbnQsIDQ+IG5vcm1hbGl6ZWRMYXllclZpc2libGVQb2x5Z29uID0gdW5wcm9qZWN0
KGxheWVyLCB2aXNpYmxlUG9seWdvbik7Ci0gICAgICAgIG5vcm1hbGl6ZWRMYXllclZpc2libGVS
ZWN0LmludGVyc2VjdChib3VuZGluZ0JveChub3JtYWxpemVkTGF5ZXJWaXNpYmxlUG9seWdvbikp
OwotICAgIH0KLQotICAgIEZsb2F0U2l6ZSB0aWxlU2l6ZTsKLSAgICBGbG9hdFJlY3QgZHN0Q2xp
cDsKLSAgICBUaWxlSW5kZXggZmlyc3Q7Ci0gICAgVGlsZUluZGV4IGxhc3Q7Ci0gICAgaWYgKGxh
eWVyLT5jb250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCgpKSB7Ci0gICAgICAgIC8vIFJlc29s
dXRpb24gaW5kZXBlbmRlbnQgbGF5ZXJzIGhhdmUgYWxsIHRoZSBuZWVkZWQgZGF0YSBpbiB0aGUg
Zmlyc3QgdGlsZQotICAgICAgICB0aWxlU2l6ZSA9IGJvdW5kc1JlY3Quc2l6ZSgpOwotICAgICAg
ICBkc3RDbGlwID0gYm91bmRzUmVjdDsKLSAgICAgICAgZmlyc3QgPSBsYXN0ID0gVGlsZUluZGV4
KDAsIDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3Qg
PSBub3JtYWxpemVkTGF5ZXJWaXNpYmxlUmVjdDsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LnNj
YWxlKG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3JlcXVpcmVkVGV4dHVyZVNpemUu
aGVpZ2h0KCkpOwotCi0gICAgICAgIHRpbGVTaXplID0gbV90aWxlU2l6ZTsKLSAgICAgICAgdGls
ZVNpemUuc2NhbGUoYm91bmRzUmVjdC53aWR0aCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLndp
ZHRoKCksIGJvdW5kc1JlY3QuaGVpZ2h0KCkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0
KCkpOwotCi0gICAgICAgIGRzdENsaXAgPSBub3JtYWxpemVkTGF5ZXJDbGlwUmVjdDsKLSAgICAg
ICAgZHN0Q2xpcC5zY2FsZShib3VuZHNSZWN0LndpZHRoKCksIGJvdW5kc1JlY3QuaGVpZ2h0KCkp
OwotICAgICAgICBkc3RDbGlwLm1vdmVCeShib3VuZHNSZWN0LmxvY2F0aW9uKCkpOwotCi0gICAg
ICAgIC8vIFRoZSBsYXllciBjb250YWlucyBwaXhlbHMgd2l0aCBjb29yZGluYXRlcyAoMCAuLi4g
bV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgLSAxLCAwIC4uLiBtX3JlcXVpcmVkVGV4dHVy
ZVNpemUuaGVpZ2h0KCkgLSAxKSwKLSAgICAgICAgLy8gc28gY2xhbXAgdGhlIGRlc3RpbmF0aW9u
UmVjdC10by10aWxlaW5kZXggY2FsY3VsYXRpb24gYXBwcm9wcmlhdGVseS4KLSAgICAgICAgZmly
c3QgPSBpbmRleE9mVGlsZShmbG9vcmVkSW50UG9pbnQoZGVzdGluYXRpb25SZWN0Lm1pblhNaW5Z
Q29ybmVyKCkpKTsKLSAgICAgICAgbGFzdCA9IGluZGV4T2ZUaWxlKGNlaWxlZEludFBvaW50KGRl
c3RpbmF0aW9uUmVjdC5tYXhYTWF4WUNvcm5lcigpKS5zaHJ1bmtUbyhJbnRQb2ludCgtMSwgLTEp
ICsgbV9yZXF1aXJlZFRleHR1cmVTaXplKSk7Ci0gICAgfQotCi0gICAgSGFzaFNldDxUaWxlSW5k
ZXg+IHRpbGVzTmVlZGluZ1JlbmRlcjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdC5pKCk7
IGkgPD0gbGFzdC5pKCk7ICsraSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBmaXJzdC5q
KCk7IGogPD0gbGFzdC5qKCk7ICsraikgewotICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4KGks
IGopOwotICAgICAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlcy5nZXQoaW5kZXgpOwot
ICAgICAgICAgICAgaWYgKCF0aWxlKSB7Ci0gICAgICAgICAgICAgICAgdGlsZSA9IG5ldyBMYXll
clRpbGUoKTsKLSAgICAgICAgICAgICAgICBtX3RpbGVzLmFkZChpbmRleCwgdGlsZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB0aWxlLT5zZXRWaXNpYmxlKHRydWUpOwotICAgICAgICAg
ICAgRmxvYXRQb2ludCB0aWxlT3JpZ2luKGluZGV4LmkoKSAqIHRpbGVTaXplLndpZHRoKCksIGlu
ZGV4LmooKSAqIHRpbGVTaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBkc3Qo
dGlsZU9yaWdpbiAtIDAuNSAqIGJvdW5kc1JlY3Quc2l6ZSgpLCB0aWxlU2l6ZS5zaHJ1bmtUbyhi
b3VuZHNSZWN0LnNpemUoKSAtIHRvRmxvYXRTaXplKHRpbGVPcmlnaW4pKSk7Ci0gICAgICAgICAg
ICBpZiAoIWRyYXdUaWxlKGxheWVyLCB0aWxlLCBpbmRleCwgc2NhbGUsIGRzdCwgZHN0Q2xpcCkp
Ci0gICAgICAgICAgICAgICAgdGlsZXNOZWVkaW5nUmVuZGVyLmFkZChpbmRleCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdp
bigpOyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRleCBpbmRl
eCA9ICgqaXQpLmtleTsKLSAgICAgICAgaWYgKGluZGV4LmkoKSA8IGZpcnN0LmkoKSB8fCBpbmRl
eC5qKCkgPCBmaXJzdC5qKCkgfHwgaW5kZXguaSgpID4gbGFzdC5pKCkgfHwgaW5kZXguaigpID4g
bGFzdC5qKCkpCi0gICAgICAgICAgICAoKml0KS52YWx1ZS0+c2V0VmlzaWJsZShmYWxzZSk7Ci0g
ICAgfQotCi0gICAgLy8gVGhlIHZpc2libGUgcmVjdCB3aWxsIGJlIHVzZWQgb24gdGhlIFdlYktp
dCB0aHJlYWQgYW5kIHNob3VsZCB1c2UgdGhlIGJvdW5kcyBleHByZXNzZWQgaW4KLSAgICAvLyBk
b2N1bWVudCBjb29yZGluYXRlcywgbm90IGNvcnJlY3RlZCBmb3Igc2NhbGUgaW52YXJpYW5jZS4g
U28gdXNlICJsYXllci0+Ym91bmRzKCkiIGluc3RlYWQKLSAgICAvLyBvZiB0aGUgbG9jYWwgdmFy
aWFibGUgImJvdW5kc1JlY3Quc2l6ZSgpIi4KLSAgICBGbG9hdFJlY3QgbGF5ZXJWaXNpYmxlUmVj
dCA9IG5vcm1hbGl6ZWRMYXllclZpc2libGVSZWN0OwotICAgIGxheWVyVmlzaWJsZVJlY3Quc2Nh
bGUobGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7Ci0K
LSNpZiBERUJVR19MQVlFUl9WSVNJQklMSVRZCi0gICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHYgPSB1
bnByb2plY3QobGF5ZXIsIGNsaXBQb2x5Z29uKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHYuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgdltpXS5zY2FsZShsYXllci0+Ym91bmRzKCkud2lk
dGgoKSwgbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKLSAgICAgICAgdltpXS5tb3ZlKHRvRmxv
YXRTaXplKGJvdW5kc1JlY3QubG9jYXRpb24oKSkpOwotICAgICAgICB2W2ldID0gbGF5ZXItPmRy
YXdUcmFuc2Zvcm0oKS5tYXBQb2ludCh2W2ldKTsKLSAgICB9Ci0KLSAgICAvLyBVc2UgYSB0aGlj
ayBib3JkZXIgdG8gbWFrZSB0aGUgYm9yZGVyIHZpc2libGUgZXZlbiBmb3IgdGhlIHJvb3QgbGF5
ZXIgKHdoaWNoIHR5cGljYWxseSBjb3ZlcnMgdGhlIHNjcmVlbiB3aWR0aCBhbmQvb3IgaGVpZ2h0
KS4KLSAgICB1bnNpZ25lZCB0bXAgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPih0aGlzKTsK
LSAgICBpbnQgdCA9IHJhbmRfcigmdG1wKTsKLSAgICBnbERpc2FibGUoR0xfU0NJU1NPUl9URVNU
KTsKLSAgICAvLyBXaGVuIGRlYnVnZ2luZywgZHJhdyBmaXJzdCBsYXllci0+dHJhbnNmb3JtZWRC
b3VuZHMoKSwgdGhlbiBjbGlwUG9seWdvbiwgdGhlbiB2Ci0gICAgLy8gdG8gZmluZCBvdXQgd2hl
cmUgdGhlIHByb2JsZW0gaXMgKGNsaXBwaW5nIHRvIGltYWdlIHBsYW5lLCBjbGlwcGluZyB0byB2
aWV3cG9ydCBvciB1bnByb2plY3RpbmcpLgotICAgIGxheWVyLT5sYXllclJlbmRlcmVyKCktPmRy
YXdEZWJ1Z0JvcmRlcigvKiBsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKSAqLyAvKiBjbGlwUG9s
eWdvbiAqLyB2LCBtYWtlUkdCQUZyb21IU0xBKHN0YXRpY19jYXN0PGRvdWJsZT4odCkgLyBSQU5E
X01BWCwgMSwgMC41LCAxKSwgNSk7Ci0gICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKLSNl
bmRpZgotCi0gICAgLy8gSWYgd2Ugc2NoZWR1bGUgYSBjb21taXQsIHZpc2liaWxpdHkgd2lsbCBi
ZSB1cGRhdGVkLCBhbmQgZGlzcGxheSB3aWxsCi0gICAgLy8gaGFwcGVuIGlmIHRoZXJlIGFyZSBh
bnkgdmlzaWJsZSBhbmQgZGlydHkgdGV4dHVyZXMuCi0gICAgaWYgKCF0aWxlc05lZWRpbmdSZW5k
ZXIuaXNFbXB0eSgpKQotICAgICAgICBsYXllci0+c2V0TmVlZHNDb21taXQoKTsKLQotICAgIHNl
dEZyb250VmlzaWJpbGl0eShsYXllclZpc2libGVSZWN0LCB0aWxlc05lZWRpbmdSZW5kZXIpOwot
fQotCi12b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqKQotewotICAgIC8vIFNpbmNlIHRleHR1cmVzIGFyZSBkZWxldGVkIGJ5IGEgc3luY2hyb25v
dXMgbWVzc2FnZQotICAgIC8vIGZyb20gV2ViS2l0IHRocmVhZCB0byBjb21wb3NpdGluZyB0aHJl
YWQsIHdlIGRvbid0IG5lZWQKLSAgICAvLyBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBo
ZXJlLCBldmVuIHRob3VnaCB3ZSBhcmUKLSAgICAvLyB0b3VjaGluZyBzb21lIFdlYktpdCB0aHJl
YWQgc3RhdGUuCi0gICAgaWYgKG1fdGlsZXMuc2l6ZSgpKSB7Ci0gICAgICAgIGZvciAoVGlsZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsr
aXQpCi0gICAgICAgICAgICAoKml0KS52YWx1ZS0+ZGlzY2FyZENvbnRlbnRzKCk7Ci0gICAgICAg
IG1fdGlsZXMuY2xlYXIoKTsKLQotICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwotICAg
IH0KLQotICAgIC8vIEZvciB2YXJpb3VzIHJlYXNvbnMsIGUuZy4gcGFnZSBjYWNoZSwgc29tZW9u
ZSBtYXkgdHJ5Ci0gICAgLy8gdG8gcmVuZGVyIHVzIGFmdGVyIHRoZSB0ZXh0dXJlcyB3ZXJlIGRl
bGV0ZWQuCi0gICAgbV9wZW5kaW5nVGV4dHVyZVNpemUgPSBJbnRTaXplKCk7Ci0gICAgbV9yZXF1
aXJlZFRleHR1cmVTaXplID0gSW50U2l6ZSgpOwotfQotCi12b2lkIExheWVyVGlsZXI6OnBydW5l
VGV4dHVyZXMoY29uc3QgSW50U2l6ZSYgcGVuZGluZ1RleHR1cmVTaXplKQotewotICAgIC8vIFBy
dW5lIHRpbGVzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQuCi0gICAgVmVjdG9yPFRpbGVJbmRl
eD4gdGlsZXNUb0RlbGV0ZTsKLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxl
cy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRl
eCBpbmRleCA9ICgqaXQpLmtleTsKLQotICAgICAgICBJbnRQb2ludCBvcmlnaW4gPSBvcmlnaW5P
ZlRpbGUoaW5kZXgpOwotICAgICAgICBpZiAob3JpZ2luLngoKSA+PSBwZW5kaW5nVGV4dHVyZVNp
emUud2lkdGgoKSB8fCBvcmlnaW4ueSgpID49IHBlbmRpbmdUZXh0dXJlU2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgICAgIHRpbGVzVG9EZWxldGUuYXBwZW5kKGluZGV4KTsKLSAgICB9Ci0KLSAgICBm
b3IgKFZlY3RvcjxUaWxlSW5kZXg+OjppdGVyYXRvciBpdCA9IHRpbGVzVG9EZWxldGUuYmVnaW4o
KTsgaXQgIT0gdGlsZXNUb0RlbGV0ZS5lbmQoKTsgKytpdCkgewotICAgICAgICBPd25QdHI8TGF5
ZXJUaWxlPiB0aWxlID0gYWRvcHRQdHIobV90aWxlcy50YWtlKCppdCkpOwotICAgICAgICB0aWxl
LT5kaXNjYXJkQ29udGVudHMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRl
VGlsZVNpemUoKQotewotICAgIEludFNpemUgc2l6ZSA9IG1fbGF5ZXItPmlzTWFzaygpID8gbV9s
YXllci0+Ym91bmRzKCkgOiBkZWZhdWx0VGlsZVNpemUoKTsKLSAgICBjb25zdCBJbnRTaXplIG1h
eFRleHR1cmVTaXplKDIwNDgsIDIwNDgpOwotICAgIHNpemUgPSBzaXplLnNocnVua1RvKG1heFRl
eHR1cmVTaXplKTsKLQotICAgIGlmIChtX3RpbGVTaXplID09IHNpemUgfHwgc2l6ZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEludmFsaWRhdGUgdGhlIHdob2xlIGxheWVy
IGlmIHRpbGUgc2l6ZSBjaGFuZ2VzLgotICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgIG1fdGls
ZVNpemUgPSBzaXplOwotfQotCi12b2lkIExheWVyVGlsZXI6OnNldE5lZWRzQmFja2luZyhib29s
IG5lZWRzQmFja2luZykKLXsKLSAgICBpZiAobV9uZWVkc0JhY2tpbmcgPT0gbmVlZHNCYWNraW5n
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25lZWRzQmFja2luZyA9IG5lZWRzQmFja2luZzsK
LSAgICB1cGRhdGVUaWxlU2l6ZSgpOwotfQotCi12b2lkIExheWVyVGlsZXI6OmRpc2NhcmRCYWNr
VmlzaWJpbGl0eSgpCi17Ci0gICAgZGVsZXRlIG1fYmFja1Zpc2liaWxpdHk7Ci0gICAgbV9iYWNr
VmlzaWJpbGl0eSA9IDA7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6c2NoZWR1bGVDb21taXQoKQot
ewotICAgIEFTU0VSVChpc1dlYktpdFRocmVhZCgpKTsKLQotICAgIGlmIChtX2xheWVyKQotICAg
ICAgICBtX2xheWVyLT5zZXROZWVkc0NvbW1pdCgpOwotfQotCi1UaWxlSW5kZXggTGF5ZXJUaWxl
cjo6aW5kZXhPZlRpbGUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9yaWdpbikKLXsKLSAgICBp
bnQgb2Zmc2V0WCA9IG9yaWdpbi54KCk7Ci0gICAgaW50IG9mZnNldFkgPSBvcmlnaW4ueSgpOwot
ICAgIGlmIChvZmZzZXRYKQotICAgICAgICBvZmZzZXRYID0gb2Zmc2V0WCAvIHRpbGVTaXplKCku
d2lkdGgoKTsKLSAgICBpZiAob2Zmc2V0WSkKLSAgICAgICAgb2Zmc2V0WSA9IG9mZnNldFkgLyB0
aWxlU2l6ZSgpLmhlaWdodCgpOwotICAgIHJldHVybiBUaWxlSW5kZXgob2Zmc2V0WCwgb2Zmc2V0
WSk7Ci19Ci0KLUludFBvaW50IExheWVyVGlsZXI6Om9yaWdpbk9mVGlsZShjb25zdCBUaWxlSW5k
ZXgmIGluZGV4KQotewotICAgIHJldHVybiBJbnRQb2ludChpbmRleC5pKCkgKiB0aWxlU2l6ZSgp
LndpZHRoKCksIGluZGV4LmooKSAqIHRpbGVTaXplKCkuaGVpZ2h0KCkpOwotfQotCi1JbnRSZWN0
IExheWVyVGlsZXI6OnJlY3RGb3JUaWxlKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IElu
dFNpemUmIGJvdW5kcykKLXsKLSAgICBJbnRQb2ludCBvcmlnaW4gPSBvcmlnaW5PZlRpbGUoaW5k
ZXgpOwotICAgIEludFNpemUgc2l6ZSA9IHRpbGVTaXplKCkuc2hydW5rVG8oYm91bmRzIC0gdG9J
bnRTaXplKG9yaWdpbikpOwotICAgIHJldHVybiBJbnRSZWN0KG9yaWdpbiwgc2l6ZSk7Ci19Ci0K
LUxheWVyVGV4dHVyZSogTGF5ZXJUaWxlcjo6Y29udGVudHNUZXh0dXJlKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqKQotewotICAgIEFTU0VSVChtX3RpbGVzLnNpemUoKSA9PSAxKTsKLSAgICBpZiAo
bV90aWxlcy5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25zdCBMYXll
clRpbGUqIHRpbGUgPSBtX3RpbGVzLmJlZ2luKCktPnZhbHVlOwotCi0gICAgQVNTRVJUKHRpbGUt
Pmhhc1RleHR1cmUoKSk7Ci0gICAgaWYgKCF0aWxlLT5oYXNUZXh0dXJlKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIHRpbGUtPnRleHR1cmUoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oCShyZXZpc2lvbiAxNjE1
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
VGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIExheWVyVGlsZXJf
aAotI2RlZmluZSBMYXllclRpbGVyX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNs
dWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgiCi0jaW5jbHVkZSAiTGF5ZXJUaWxl
LmgiCi0jaW5jbHVkZSAiTGF5ZXJUaWxlSW5kZXguaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybUdMRVMyUHJvZ3JhbS5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBM
YXllckNvbXBvc2l0aW5nVGhyZWFkOwotY2xhc3MgTGF5ZXJWaXNpYmlsaXR5OwotY2xhc3MgTGF5
ZXJXZWJLaXRUaHJlYWQ7Ci0KLWNsYXNzIExheWVyVGlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8TGF5ZXJUaWxlcj4sIHB1YmxpYyBMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50
IHsKLXB1YmxpYzoKLSAgICBUaWxlSW5kZXggaW5kZXhPZlRpbGUoY29uc3QgSW50UG9pbnQmIG9y
aWdpbik7Ci0gICAgSW50UG9pbnQgb3JpZ2luT2ZUaWxlKGNvbnN0IFRpbGVJbmRleCYpOwotICAg
IEludFJlY3QgcmVjdEZvclRpbGUoY29uc3QgVGlsZUluZGV4JiwgY29uc3QgSW50U2l6ZSYgYm91
bmRzKTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVGlsZXI+IGNyZWF0ZShMYXllcldl
YktpdFRocmVhZCogbGF5ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExh
eWVyVGlsZXIobGF5ZXIpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5MYXllclRpbGVyKCk7Ci0K
LSAgICBJbnRTaXplIHRpbGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90aWxlU2l6ZTsgfQotCi0g
ICAgLy8gV2ViS2l0IHRocmVhZAotICAgIExheWVyV2ViS2l0VGhyZWFkKiBsYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fbGF5ZXI7IH0KLSAgICB2b2lkIGxheWVyV2ViS2l0VGhyZWFkRGVzdHJveWVk
KCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3Qp
OwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCB1cGRhdGVUZXh0dXJlQ29u
dGVudHNJZk5lZWRlZChkb3VibGUgc2NhbGUpOwotICAgIHZvaWQgc2V0TmVlZHNCYWNraW5nKGJv
b2wpOwotICAgIHZvaWQgZGlzY2FyZEJhY2tWaXNpYmlsaXR5KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlQ29tbWl0KCk7Ci0KLSAgICAvLyBDb21wb3NpdGluZyB0aHJlYWQKLSAgICB2aXJ0
dWFsIHZvaWQgbGF5ZXJDb21wb3NpdGluZ1RocmVhZERlc3Ryb3llZChMYXllckNvbXBvc2l0aW5n
VGhyZWFkKik7Ci0gICAgdmlydHVhbCB2b2lkIGxheWVyVmlzaWJpbGl0eUNoYW5nZWQoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCosIGJvb2wgdmlzaWJsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHVwbG9h
ZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwotICAgIHZpcnR1YWwg
TGF5ZXJUZXh0dXJlKiBjb250ZW50c1RleHR1cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJiwgZG91Ymxl
IHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwotICAgIHN0YXRpYyB2b2lkIHdp
bGxDb21taXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRz
KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzY2FyZEZyb250
VmlzaWJpbGl0eSgpOwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBUZXh0dXJlSm9iIHsKLSAgICAg
ICAgZW51bSBUeXBlIHsgVW5rbm93biwgU2V0Q29udGVudHMsIFVwZGF0ZUNvbnRlbnRzLCBSZXNp
emVDb250ZW50cywgRGlydHlDb250ZW50cyB9OwotCi0gICAgICAgIFRleHR1cmVKb2IoKQotICAg
ICAgICAgICAgOiBtX3R5cGUoVW5rbm93bikKLSAgICAgICAgICAgICwgbV9jb250ZW50cygwKQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBUZXh0dXJlSm9iKFR5cGUgdHlwZSwgY29u
c3QgSW50U2l6ZSYgbmV3U2l6ZSkKLSAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgICAg
ICAgICAsIG1fY29udGVudHMoMCkKLSAgICAgICAgICAgICwgbV9kaXJ0eVJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgbmV3U2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0g
UmVzaXplQ29udGVudHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgVGV4dHVyZUpvYihUeXBlIHR5
cGUsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLSAgICAgICAgICAgIDogbV90eXBlKHR5cGUp
Ci0gICAgICAgICAgICAsIG1fY29udGVudHMoMCkKLSAgICAgICAgICAgICwgbV9kaXJ0eVJlY3Qo
ZGlydHlSZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBEaXJ0eUNv
bnRlbnRzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFRleHR1cmVKb2IoVHlwZSB0eXBlLCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogY29udGVudHMsIGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCkKLSAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgICAgICAgICAs
IG1fY29udGVudHMoY29udGVudHMpCi0gICAgICAgICAgICAsIG1fZGlydHlSZWN0KGRpcnR5UmVj
dCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVXBkYXRlQ29udGVudHMg
fHwgdHlwZSA9PSBTZXRDb250ZW50cyk7Ci0gICAgICAgICAgICBBU1NFUlQoY29udGVudHMpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFRleHR1cmVKb2Igc2V0Q29udGVudHMoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50c1JlY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBUZXh0dXJlSm9i
KFNldENvbnRlbnRzLCBjb250ZW50cywgY29udGVudHNSZWN0KTsKLSAgICAgICAgfQotICAgICAg
ICBzdGF0aWMgVGV4dHVyZUpvYiB1cGRhdGVDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OkJ1ZmZlciogY29udGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgeyBy
ZXR1cm4gVGV4dHVyZUpvYihVcGRhdGVDb250ZW50cywgY29udGVudHMsIGRpcnR5UmVjdCk7IH0K
LSAgICAgICAgc3RhdGljIFRleHR1cmVKb2IgcmVzaXplQ29udGVudHMoY29uc3QgSW50U2l6ZSYg
bmV3U2l6ZSkgeyByZXR1cm4gVGV4dHVyZUpvYihSZXNpemVDb250ZW50cywgbmV3U2l6ZSk7IH0K
LSAgICAgICAgc3RhdGljIFRleHR1cmVKb2IgZGlydHlDb250ZW50cyhjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpIHsgcmV0dXJuIFRleHR1cmVKb2IoRGlydHlDb250ZW50cywgZGlydHlSZWN0KTsg
fQotCi0gICAgICAgIGJvb2wgaXNOdWxsKCkgeyByZXR1cm4gbV90eXBlID09IFVua25vd247IH0K
LQotICAgICAgICBUeXBlIG1fdHlwZTsKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpCdWZmZXIqIG1fY29udGVudHM7Ci0gICAgICAgIEludFJlY3QgbV9kaXJ0eVJlY3Q7
Ci0gICAgICAgIFRpbGVJbmRleCBtX2luZGV4OwotICAgIH07Ci0KLSAgICB0eXBlZGVmIEhhc2hN
YXA8VGlsZUluZGV4LCBMYXllclRpbGUqPiBUaWxlTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxU
aWxlSW5kZXgsIGNvbnN0IFRleHR1cmVKb2IqPiBUaWxlSm9ic01hcDsKLQotICAgIExheWVyVGls
ZXIoTGF5ZXJXZWJLaXRUaHJlYWQqKTsKLQotICAgIC8vIFN3YXBzIGluIGEgbmV3IGZyb250IHZp
c2liaWxpdHkgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgb25lLCBhdG9taWNhbGx5LgotICAgIExh
eWVyVmlzaWJpbGl0eSogc3dhcEZyb250VmlzaWJpbGl0eShMYXllclZpc2liaWxpdHkqKTsKLQot
ICAgIC8vIFdlYktpdCB0aHJlYWQKLSAgICB2b2lkIHVwZGF0ZVRpbGVTaXplKCk7Ci0gICAgdm9p
ZCBhZGRUZXh0dXJlSm9iKGNvbnN0IFRleHR1cmVKb2ImKTsKLSAgICB2b2lkIGNsZWFyVGV4dHVy
ZUpvYnMoKTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogY3Jl
YXRlQnVmZmVyKGNvbnN0IEludFNpemUmKTsKLSAgICBMYXllclZpc2liaWxpdHkqIHRha2VGcm9u
dFZpc2liaWxpdHkoKSB7IHJldHVybiBzd2FwRnJvbnRWaXNpYmlsaXR5KDApOyB9Ci0KLSAgICAv
LyBDb21wb3NpdGluZyB0aHJlYWQKLSAgICB2b2lkIHVwZGF0ZVRpbGVDb250ZW50cyhjb25zdCBU
ZXh0dXJlSm9iJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgYWRkVGlsZUpvYihjb25zdCBU
aWxlSW5kZXgmLCBjb25zdCBUZXh0dXJlSm9iJiwgVGlsZUpvYnNNYXAmKTsKLSAgICB2b2lkIHBl
cmZvcm1UaWxlSm9iKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBMYXllclRpbGUqLCBjb25zdCBU
ZXh0dXJlSm9iJik7Ci0gICAgdm9pZCBwcm9jZXNzVGV4dHVyZUpvYihjb25zdCBUZXh0dXJlSm9i
JiwgVGlsZUpvYnNNYXAmKTsKLSAgICB2b2lkIHBydW5lVGV4dHVyZXMoY29uc3QgSW50U2l6ZSYg
cGVuZGluZ1RleHR1cmVTaXplKTsKLSAgICB2b2lkIHZpc2liaWxpdHlDaGFuZ2VkKGJvb2wgbmVl
ZHNEaXNwbGF5KTsKLSAgICBib29sIGRyYXdUaWxlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBM
YXllclRpbGUqLCBjb25zdCBUaWxlSW5kZXgmLCBkb3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdENsaXApOwotICAgIHZvaWQgc2V0RnJvbnRWaXNp
YmlsaXR5KGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QsIEhhc2hTZXQ8VGlsZUluZGV4PiYg
dGlsZXNOZWVkaW5nUmVuZGVyKTsKLQotICAgIC8vIENsZWFyIGFsbCBwZW5kaW5nIHVwZGF0ZSBj
b250ZW50IHRleHR1cmUgam9icwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGlj
IHZvaWQgcmVtb3ZlVXBkYXRlQ29udGVudHNKb2JzKFQmIGpvYnMpCi0gICAgewotICAgICAgICAv
LyBDbGVhciBhbGwgcGVuZGluZyB1cGRhdGUgY29udGVudCBqb2JzCi0gICAgICAgIFQgbGlzdDsK
LSAgICAgICAgZm9yICh0eXBlbmFtZSBUOjppdGVyYXRvciBpdCA9IGpvYnMuYmVnaW4oKTsgaXQg
IT0gam9icy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKCgqaXQpLm1fdHlwZSAhPSBU
ZXh0dXJlSm9iOjpVcGRhdGVDb250ZW50cykKLSAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZCgq
aXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6ZGVzdHJveUJ1ZmZlcigoKml0KS5tX2NvbnRlbnRzKTsKLSAgICAgICAg
fQotICAgICAgICBqb2JzID0gbGlzdDsKLSAgICB9Ci0KLSAgICBMYXllcldlYktpdFRocmVhZCog
bV9sYXllcjsKLQotICAgIFRpbGVNYXAgbV90aWxlczsKLQotICAgIGJvb2wgbV9uZWVkc0JhY2tp
bmc7Ci0KLSAgICBib29sIG1fY29udGVudHNEaXJ0eTsKLSAgICBGbG9hdFJlY3QgbV9kaXJ0eVJl
Y3Q7Ci0KLSAgICBJbnRTaXplIG1fcGVuZGluZ1RleHR1cmVTaXplOyAvLyBSZXNpemVkLCBidXQg
bm90IGNvbW1pdHRlZCB5ZXQuCi0gICAgSW50U2l6ZSBtX3JlcXVpcmVkVGV4dHVyZVNpemU7Ci0g
ICAgSW50U2l6ZSBtX3RpbGVTaXplOwotCi0gICAgYm9vbCBtX2NsZWFyVGV4dHVyZUpvYnM7Ci0g
ICAgVmVjdG9yPFRleHR1cmVKb2I+IG1fcGVuZGluZ1RleHR1cmVKb2JzOyAvLyBBZGRlZCwgYnV0
IG5vdCBjb21taXR0ZWQgeWV0LgotICAgIERlcXVlPFRleHR1cmVKb2I+IG1fdGV4dHVyZUpvYnM7
Ci0KLSAgICBMYXllclZpc2liaWxpdHkqIG1fZnJvbnRWaXNpYmlsaXR5OwotICAgIExheWVyVmlz
aWJpbGl0eSogbV9iYWNrVmlzaWJpbGl0eTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmIC8vIExheWVyVGlsZXJfaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclV0aWxpdGllcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclV0aWxpdGllcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICovCi0KLSNpZm5kZWYgTGF5ZXJVdGlsaXRpZXNfaAotI2RlZmluZSBMYXllclV0aWxpdGllc19o
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgi
Ci0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0KLSNpbmNsdWRlIDxhbGdv
cml0aG0+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LS8vIGRldGVybWluYW50IG9mIGNvbHVtbiB2ZWN0b3JzCi1pbmxpbmUgZmxvYXQgZGV0ZXJtaW5h
bnQoY29uc3QgRmxvYXRTaXplJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCi17Ci0gICAgcmV0dXJu
IGEud2lkdGgoKSAqIGIuaGVpZ2h0KCkgLSBhLmhlaWdodCgpICogYi53aWR0aCgpOwotfQotCi0v
LyBkb3QgcHJvZHVjdAotaW5saW5lIGZsb2F0IGRvdChjb25zdCBGbG9hdFNpemUmIGEsIGNvbnN0
IEZsb2F0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gYS53aWR0aCgpICogYi53aWR0aCgpICsgYS5o
ZWlnaHQoKSAqIGIuaGVpZ2h0KCk7Ci19Ci0KLS8vIFJlcHJlc2VudHMgYSBsaW5lLCBub3QgYSBm
aW5pdGUgbGluZSBzZWdtZW50Ci1jbGFzcyBMYXllckNsaXBFZGdlIHsKLXB1YmxpYzoKLSAgICBM
YXllckNsaXBFZGdlKGNvbnN0IEZsb2F0UG9pbnQmIGZpcnN0LCBjb25zdCBGbG9hdFBvaW50JiBz
ZWNvbmQpCi0gICAgICAgIDogbV9maXJzdChmaXJzdCkKLSAgICAgICAgLCBtX3NlY29uZChzZWNv
bmQpCi0gICAgewotICAgIH0KLQotICAgIGlubGluZSBib29sIGlzUG9pbnRJbnNpZGUoY29uc3Qg
RmxvYXRQb2ludCYgcCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIEZvciBudW1lcmljIHJvYnVz
dG5lc3MsIHdlIHByZWZlciB0byBjb25zaWRlciBhIHBvaW50IHRvIGJlIGluc2lkZSByYXRoZXIg
dGhhbgotICAgICAgICAvLyBjbGlwIGl0IGFnYWluLgotICAgICAgICBjb25zdCBmbG9hdCBlcHNp
bG9uID0gMWUtNjsKLSAgICAgICAgcmV0dXJuIGRldGVybWluYW50KG1fc2Vjb25kIC0gbV9maXJz
dCwgcCAtIG1fZmlyc3QpID4gLWVwc2lsb247Ci0gICAgfQotCi0gICAgaW5saW5lIEZsb2F0UG9p
bnQgY29tcHV0ZUludGVyc2VjdGlvbihjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQ
b2ludCYgcDIpIGNvbnN0Ci0gICAgewotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMyA9IG1f
Zmlyc3Q7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHA0ID0gbV9zZWNvbmQ7Ci0gICAgICAg
IGZsb2F0IGRlbm9taW5hdG9yID0gZGV0ZXJtaW5hbnQocDEgLSBwMiwgcDMgLSBwNCk7Ci0gICAg
ICAgIEZsb2F0U2l6ZSBkZXRlcm1pbmFudHMoZGV0ZXJtaW5hbnQodG9GbG9hdFNpemUocDEpLCB0
b0Zsb2F0U2l6ZShwMikpLCBkZXRlcm1pbmFudCh0b0Zsb2F0U2l6ZShwMyksIHRvRmxvYXRTaXpl
KHA0KSkpOwotICAgICAgICBGbG9hdFBvaW50IHJlc3VsdCgKLSAgICAgICAgICAgIGRldGVybWlu
YW50KGRldGVybWluYW50cywgRmxvYXRTaXplKHAxLngoKSAtIHAyLngoKSwgcDMueCgpIC0gcDQu
eCgpKSkgLyBkZW5vbWluYXRvciwKLSAgICAgICAgICAgIGRldGVybWluYW50KGRldGVybWluYW50
cywgRmxvYXRTaXplKHAxLnkoKSAtIHAyLnkoKSwgcDMueSgpIC0gcDQueSgpKSkgLyBkZW5vbWlu
YXRvcik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEZs
b2F0UG9pbnQgbV9maXJzdDsKLSAgICBGbG9hdFBvaW50IG1fc2Vjb25kOwotfTsKLQotLy8gU3Bl
Y2lmaWVzIGEgY2xpcCBwbGFuZSB3aXRoIG5vcm1hbCBuIGFuZCBjb250YWluaW5nIHBvaW50IHBf
MAotLy8gYXMgcCAqIG4gKyBkID0gMCwgZCA9IC1wXzAgKiBuLiBUaGUgYXN0ZXJpc2sgaXMgZG90
IHByb2R1Y3QuCi1jbGFzcyBMYXllckNsaXBQbGFuZSB7Ci1wdWJsaWM6Ci0gICAgTGF5ZXJDbGlw
UGxhbmUoRmxvYXRQb2ludDNEIG4sIGZsb2F0IGQpCi0gICAgICAgIDogbV9uKG4pCi0gICAgICAg
ICwgbV9kKGQpCi0gICAgewotICAgIH0KLQotICAgIGlubGluZSBib29sIGlzUG9pbnRJbnNpZGUo
Y29uc3QgRmxvYXRQb2ludDNEJiBwKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHAgKiBt
X24gKyBtX2QgPiAwOwotICAgIH0KLQotICAgIGlubGluZSBGbG9hdFBvaW50M0QgY29tcHV0ZUlu
dGVyc2VjdGlvbihjb25zdCBGbG9hdFBvaW50M0QmIHAxLCBjb25zdCBGbG9hdFBvaW50M0QmIHAy
KSBjb25zdAotICAgIHsKLSAgICAgICAgZmxvYXQgdSA9ICgtbV9kIC0gcDEgKiBtX24pIC8gKChw
MiAtIHAxKSAqIG1fbik7Ci0gICAgICAgIHJldHVybiBwMSArIHUgKiAocDIgLSBwMSk7Ci0gICAg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgRmxvYXRQb2ludDNEIG1fbjsKLSAgICBmbG9hdCBtX2Q7Ci19
OwotCi0vLyBTdXRoZXJsYW5kIC0gSG9kZ21hbiwgaW5uZXIgbG9vcAotdGVtcGxhdGU8dHlwZW5h
bWUgUG9pbnQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgQ2xpcFByaW1pdGl2ZT4K
LWlubGluZSBWZWN0b3I8UG9pbnQsIGlubGluZUNhcGFjaXR5PiBpbnRlcnNlY3QoY29uc3QgVmVj
dG9yPFBvaW50LCBpbmxpbmVDYXBhY2l0eT4mIGlucHV0TGlzdCwgY29uc3QgQ2xpcFByaW1pdGl2
ZSYgY2xpcFByaW1pdGl2ZSkKLXsKLSAgICBWZWN0b3I8UG9pbnQsIGlubGluZUNhcGFjaXR5PiBv
dXRwdXRMaXN0OwotICAgIFBvaW50IHM7Ci0gICAgaWYgKCFpbnB1dExpc3QuaXNFbXB0eSgpKQot
ICAgICAgICBzID0gaW5wdXRMaXN0Lmxhc3QoKTsKLSAgICBmb3IgKHR5cGVuYW1lIFZlY3RvcjxQ
b2ludCwgaW5saW5lQ2FwYWNpdHk+Ojpjb25zdF9pdGVyYXRvciBlSXRlcmF0b3IgPSBpbnB1dExp
c3QuYmVnaW4oKTsgZUl0ZXJhdG9yICE9IGlucHV0TGlzdC5lbmQoKTsgKytlSXRlcmF0b3IpIHsK
LSAgICAgICAgY29uc3QgUG9pbnQmIGUgPSAqZUl0ZXJhdG9yOwotICAgICAgICBpZiAoY2xpcFBy
aW1pdGl2ZS5pc1BvaW50SW5zaWRlKGUpKSB7Ci0gICAgICAgICAgICBpZiAoIWNsaXBQcmltaXRp
dmUuaXNQb2ludEluc2lkZShzKSkKLSAgICAgICAgICAgICAgICBvdXRwdXRMaXN0LmFwcGVuZChj
bGlwUHJpbWl0aXZlLmNvbXB1dGVJbnRlcnNlY3Rpb24ocywgZSkpOwotICAgICAgICAgICAgb3V0
cHV0TGlzdC5hcHBlbmQoZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2xpcFByaW1pdGl2ZS5pc1Bv
aW50SW5zaWRlKHMpKQotICAgICAgICAgICAgb3V0cHV0TGlzdC5hcHBlbmQoY2xpcFByaW1pdGl2
ZS5jb21wdXRlSW50ZXJzZWN0aW9uKHMsIGUpKTsKLSAgICAgICAgcyA9IGU7Ci0gICAgfQotICAg
IHJldHVybiBvdXRwdXRMaXN0OwotfQotCi0vLyBTdXRoZXJsYW5kIC0gSG9kZ21hbiwgbWFpbiBk
cml2ZXIKLXRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLWlubGluZSBWZWN0b3I8Rmxv
YXRQb2ludCwgaW5saW5lQ2FwYWNpdHk+IGludGVyc2VjdFBvbHlnb25XaXRoUmVjdChjb25zdCBW
ZWN0b3I8RmxvYXRQb2ludCwgaW5saW5lQ2FwYWNpdHk+JiBzdWJqZWN0UG9seWdvbiwgY29uc3Qg
RmxvYXRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBGbG9hdFF1YWQgY2xpcFF1YWQoY2xpcFJlY3Qp
OwotICAgIFZlY3RvcjxMYXllckNsaXBFZGdlPiBlZGdlczsKLSAgICBlZGdlcy5hcHBlbmQoTGF5
ZXJDbGlwRWRnZShjbGlwUXVhZC5wMSgpLCBjbGlwUXVhZC5wMigpKSk7Ci0gICAgZWRnZXMuYXBw
ZW5kKExheWVyQ2xpcEVkZ2UoY2xpcFF1YWQucDIoKSwgY2xpcFF1YWQucDMoKSkpOwotICAgIGVk
Z2VzLmFwcGVuZChMYXllckNsaXBFZGdlKGNsaXBRdWFkLnAzKCksIGNsaXBRdWFkLnA0KCkpKTsK
LSAgICBlZGdlcy5hcHBlbmQoTGF5ZXJDbGlwRWRnZShjbGlwUXVhZC5wNCgpLCBjbGlwUXVhZC5w
MSgpKSk7Ci0KLSAgICBWZWN0b3I8RmxvYXRQb2ludD4gb3V0cHV0TGlzdCA9IHN1YmplY3RQb2x5
Z29uOwotICAgIGZvciAoVmVjdG9yPExheWVyQ2xpcEVkZ2U+Ojpjb25zdF9pdGVyYXRvciBjbGlw
RWRnZUl0ZXJhdG9yID0gZWRnZXMuYmVnaW4oKTsgY2xpcEVkZ2VJdGVyYXRvciAhPSBlZGdlcy5l
bmQoKTsgKytjbGlwRWRnZUl0ZXJhdG9yKSB7Ci0gICAgICAgIGNvbnN0IExheWVyQ2xpcEVkZ2Um
IGNsaXBFZGdlID0gKmNsaXBFZGdlSXRlcmF0b3I7Ci0gICAgICAgIFZlY3RvcjxGbG9hdFBvaW50
PiBpbnB1dExpc3QgPSBvdXRwdXRMaXN0OwotICAgICAgICBvdXRwdXRMaXN0ID0gaW50ZXJzZWN0
KGlucHV0TGlzdCwgY2xpcEVkZ2UpOwotICAgIH0KLSAgICByZXR1cm4gb3V0cHV0TGlzdDsKLX0K
LQotdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5saW5lIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveChjb25zdCBWZWN0b3I8RmxvYXRQb2ludCwgaW5saW5lQ2FwYWNpdHk+JiBwb2ludHMp
Ci17Ci0gICAgaWYgKHBvaW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKLSAgICBmbG9hdCB4bWluLCB4bWF4LCB5bWluLCB5bWF4OwotICAgIHhtaW4gPSB5bWluID0g
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7Ci0gICAgeG1heCA9IHltYXgg
PSAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwb2ludHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcCA9IHBvaW50c1tpXTsKLSAgICAgICAgaWYgKHAueCgpIDwgeG1pbikKLSAgICAgICAg
ICAgIHhtaW4gPSBwLngoKTsKLSAgICAgICAgaWYgKHAueCgpID4geG1heCkKLSAgICAgICAgICAg
IHhtYXggPSBwLngoKTsKLSAgICAgICAgaWYgKHAueSgpIDwgeW1pbikKLSAgICAgICAgICAgIHlt
aW4gPSBwLnkoKTsKLSAgICAgICAgaWYgKHAueSgpID4geW1heCkKLSAgICAgICAgICAgIHltYXgg
PSBwLnkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCh4bWluLCB5bWluLCB4bWF4IC0g
eG1pbiwgeW1heCAtIHltaW4pOwotfQotCi1pbmxpbmUgRmxvYXRQb2ludDNEIGNvbXB1dGVCYXJ5
Y2VudHJpY0Nvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQm
IHQxLCBjb25zdCBGbG9hdFBvaW50JiB0MiwgY29uc3QgRmxvYXRQb2ludCYgdDMsIGJvb2wmIG9r
KQotewotICAgIC8vIENvbXB1dGUgdmVjdG9ycwotICAgIEZsb2F0U2l6ZSB2MCA9IHQyIC0gdDE7
Ci0gICAgRmxvYXRTaXplIHYxID0gdDMgLSB0MTsKLSAgICBGbG9hdFNpemUgdjIgPSBwIC0gdDE7
Ci0KLSAgICAvLyBDb21wdXRlIGRvdCBwcm9kdWN0cwotICAgIGZsb2F0IGRvdDAwID0gZG90KHYw
LCB2MCk7Ci0gICAgZmxvYXQgZG90MDEgPSBkb3QodjAsIHYxKTsKLSAgICBmbG9hdCBkb3QwMiA9
IGRvdCh2MCwgdjIpOwotICAgIGZsb2F0IGRvdDExID0gZG90KHYxLCB2MSk7Ci0gICAgZmxvYXQg
ZG90MTIgPSBkb3QodjEsIHYyKTsKLQotICAgIC8vIENvbXB1dGUgYmFyeWNlbnRyaWMgY29vcmRp
bmF0ZXMKLSAgICBmbG9hdCBkZW5vbWluYXRvciA9IChkb3QwMCAqIGRvdDExIC0gZG90MDEgKiBk
b3QwMSk7Ci0gICAgb2sgPSAoZGVub21pbmF0b3IgIT0gMC4wKTsKLSAgICBpZiAoIW9rKQotICAg
ICAgICByZXR1cm4gRmxvYXRQb2ludDNEKCk7Ci0KLSAgICBmbG9hdCB2ID0gKGRvdDExICogZG90
MDIgLSBkb3QwMSAqIGRvdDEyKSAvIGRlbm9taW5hdG9yOwotICAgIGZsb2F0IHcgPSAoZG90MDAg
KiBkb3QxMiAtIGRvdDAxICogZG90MDIpIC8gZGVub21pbmF0b3I7Ci0KLSAgICByZXR1cm4gRmxv
YXRQb2ludDNEKDEuMGYgLSB2IC0gdywgdiwgdyk7Ci19Ci0KLWlubGluZSBmbG9hdCBtYW5oYXR0
YW5EaXN0YW5jZVRvVmlld3BvcnQoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICBmbG9hdCBk
ID0gMDsKLSAgICBpZiAoZmFic2YocC54KCkpID4gMSkKLSAgICAgICAgZCArPSBmYWJzZihwLngo
KSkgLSAxOwotICAgIGlmIChmYWJzZihwLnkoKSkgPiAxKQotICAgICAgICBkICs9IGZhYnNmKHAu
eSgpKSAtIDE7Ci0gICAgcmV0dXJuIGQ7Ci19Ci0KLXN0cnVjdCBVbnByb2plY3Rpb25WZXJ0ZXgg
ewotICAgIEZsb2F0UG9pbnQgeHk7Ci0gICAgZmxvYXQgdzsKLSAgICBGbG9hdFNpemUgdXY7Ci19
OwotCi1pbmxpbmUgYm9vbCBjb21wYXJlTWFuaGF0dGFuRGlzdGFuY2VUb1ZpZXdwb3J0KGNvbnN0
IFVucHJvamVjdGlvblZlcnRleCYgYSwgY29uc3QgVW5wcm9qZWN0aW9uVmVydGV4JiBiKQotewot
ICAgIHJldHVybiBtYW5oYXR0YW5EaXN0YW5jZVRvVmlld3BvcnQoYS54eSkgPCBtYW5oYXR0YW5E
aXN0YW5jZVRvVmlld3BvcnQoYi54eSk7Ci19Ci0KLXRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KLWlubGluZSBWZWN0b3I8RmxvYXRQb2ludCwgaW5saW5lQ2FwYWNpdHk+IHVucHJvamVj
dChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQs
IGlubGluZUNhcGFjaXR5PiYgcG9pbnRzKQotewotICAgIC8vIFVzZSBwZXJzcGVjdGl2ZSBjb3Jy
ZWN0IHRleHR1cmluZyBsb2dpYyB0byBmaW5kIHRoZSBsb2NhdGlvbnMgb2YgdGhlc2UgcG9pbnRz
IGluIG5vcm1hbGl6ZWQgbGF5ZXIgY29vcmRpbmF0ZXMKLSAgICBWZWN0b3I8RmxvYXRQb2ludCwg
ND4gYm91bmRzID0gbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCk7Ci0gICAgVmVjdG9yPGZsb2F0
LCA0PiB3cyA9IGxheWVyLT53cygpOwotICAgIGlmICh3cy5pc0VtcHR5KCkpCi0gICAgICAgIHdz
LmZpbGwoMC4wZiwgYm91bmRzLnNpemUoKSk7Ci0gICAgY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+
JiB0ZXhDb29yZHMgPSBsYXllci0+dGV4dHVyZUNvb3JkaW5hdGVzKCk7Ci0gICAgaWYgKGJvdW5k
cy5zaXplKCkgPCAzKQotICAgICAgICByZXR1cm4gVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNh
cGFjaXR5PigpOwotCi0gICAgVmVjdG9yPFVucHJvamVjdGlvblZlcnRleCwgND4gdmVydGljZXMo
Ym91bmRzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBib3VuZHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgdmVydGljZXNbaV0ueHkgPSBib3VuZHNbaV07Ci0gICAgICAgIHZl
cnRpY2VzW2ldLncgPSB3c1tpXTsKLSAgICAgICAgdmVydGljZXNbaV0udXYgPSB0b0Zsb2F0U2l6
ZSh0ZXhDb29yZHNbaV0pOwotICAgIH0KLSAgICAvLyBFYWNoIHBvaW50IG5lZWRzIHRvIGJlIHF1
YWxpZmllZCBhcyBseWluZyBpbiBvbmUgb2YgdGhlIHRyaWFuZ2xlcyBmb3JtZWQgYnkgdGhlICJi
b3VuZHMiIHRyaWFuZ2xlIHN0cmlwCi0gICAgLy8gVHJ5IHRvIHVzZSBvbmx5IHBvaW50cyB0aGF0
IGFyZSBvbnNjcmVlbiwgZm9yIG51bWVyaWNhbCBzdGFiaWxpdHkKLSAgICBzdGQ6OnNvcnQodmVy
dGljZXMuYmVnaW4oKSwgdmVydGljZXMuZW5kKCksIGNvbXBhcmVNYW5oYXR0YW5EaXN0YW5jZVRv
Vmlld3BvcnQpOwotCi0gICAgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5PiByZXN1
bHQ7Ci0KLSAgICBzaXplX3QgaTAgPSAwOwotCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcDAgPSB2
ZXJ0aWNlc1tpMF0ueHk7Ci0gICAgZmxvYXQgdzAgPSB2ZXJ0aWNlc1tpMF0udzsKLSAgICBGbG9h
dFNpemUgdXYwID0gdmVydGljZXNbaTBdLnV2OwotCi0gICAgZm9yIChzaXplX3QgaiA9IDA7IGog
PCBwb2ludHMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcCA9IHBv
aW50c1tqXTsKLSAgICAgICAgRmxvYXRQb2ludCB0ZXhDb29yZDsKLSAgICAgICAgZm9yIChzaXpl
X3QgZGkgPSAxOyBkaSArIDEgPCB2ZXJ0aWNlcy5zaXplKCk7ICsrZGkpIHsKLSAgICAgICAgICAg
IHNpemVfdCBpID0gKGkwICsgZGkpICUgdmVydGljZXMuc2l6ZSgpOwotICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcDEgPSB2ZXJ0aWNlc1tpXS54eTsKLSAgICAgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHAyID0gdmVydGljZXNbaSArIDFdLnh5OwotICAgICAgICAgICAgZmxvYXQgdzEg
PSB2ZXJ0aWNlc1tpXS53OwotICAgICAgICAgICAgZmxvYXQgdzIgPSB2ZXJ0aWNlc1tpICsgMV0u
dzsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSB1djEgPSB2ZXJ0aWNlc1tpXS51djsKLSAgICAgICAg
ICAgIEZsb2F0U2l6ZSB1djIgPSB2ZXJ0aWNlc1tpICsgMV0udXY7Ci0KLSAgICAgICAgICAgIGJv
b2wgb2s7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgYiA9IGNvbXB1dGVCYXJ5Y2VudHJpY0Nv
b3JkaW5hdGVzKHAsIHAwLCBwMSwgcDIsIG9rKTsKLSAgICAgICAgICAgIGlmICghb2spCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICh3MCAmJiB3MSAmJiB3Mikg
ewotICAgICAgICAgICAgICAgIC8vIFBlcnNwZWN0aXZlIGNvcnJlY3QgaW50ZXJwb2xhdGlvbgot
ICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBidyhiLngoKSAvIHcwLCBiLnkoKSAvIHcxLCBi
LnooKSAvIHcyKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBkZW5vbWluYXRvciA9IGJ3LngoKSAr
IGJ3LnkoKSArIGJ3LnooKTsKLSAgICAgICAgICAgICAgICB0ZXhDb29yZCA9IEZsb2F0UG9pbnQ6
Onplcm8oKSArIChidy54KCkgKiB1djAgKyBidy55KCkgKiB1djEgKyBidy56KCkgKiB1djIpOwot
ICAgICAgICAgICAgICAgIHRleENvb3JkLnNldFgodGV4Q29vcmQueCgpIC8gZGVub21pbmF0b3Ip
OwotICAgICAgICAgICAgICAgIHRleENvb3JkLnNldFkodGV4Q29vcmQueSgpIC8gZGVub21pbmF0
b3IpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBMaW5lYXIgaW50
ZXJwb2xhdGlvbgotICAgICAgICAgICAgICAgIHRleENvb3JkID0gRmxvYXRQb2ludDo6emVybygp
ICsgKGIueCgpICogdXYwICsgYi55KCkgKiB1djEgKyBiLnooKSAqIHV2Mik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5k
KHRleENvb3JkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIEZsb2F0
UG9pbnQzRCBtdWx0VmVjTWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGNvbnN0IEZsb2F0UG9pbnQzRCYgcCwgZmxvYXQmIHcpCi17Ci0gICAgRmxvYXRQb2ludDNEIHJl
c3VsdCgKLSAgICAgICAgbWF0cml4Lm00MSgpICsgcC54KCkgKiBtYXRyaXgubTExKCkgKyBwLnko
KSAqIG1hdHJpeC5tMjEoKSArIHAueigpICogbWF0cml4Lm0zMSgpLAotICAgICAgICBtYXRyaXgu
bTQyKCkgKyBwLngoKSAqIG1hdHJpeC5tMTIoKSArIHAueSgpICogbWF0cml4Lm0yMigpICsgcC56
KCkgKiBtYXRyaXgubTMyKCksCi0gICAgICAgIG1hdHJpeC5tNDMoKSArIHAueCgpICogbWF0cml4
Lm0xMygpICsgcC55KCkgKiBtYXRyaXgubTIzKCkgKyBwLnooKSAqIG1hdHJpeC5tMzMoKSk7Ci0g
ICAgdyA9IG1hdHJpeC5tNDQoKSArIHAueCgpICogbWF0cml4Lm0xNCgpICsgcC55KCkgKiBtYXRy
aXgubTI0KCkgKyBwLnooKSAqIG1hdHJpeC5tMzQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBQb2ludCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5saW5l
IFZlY3RvcjxQb2ludCwgaW5saW5lQ2FwYWNpdHk+IHRvVmVjdG9yKGNvbnN0IEZsb2F0UXVhZCYg
cXVhZCkKLXsKLSAgICBWZWN0b3I8UG9pbnQsIGlubGluZUNhcGFjaXR5PiByZXN1bHQ7Ci0gICAg
cmVzdWx0LmFwcGVuZChxdWFkLnAxKCkpOwotICAgIHJlc3VsdC5hcHBlbmQocXVhZC5wMigpKTsK
LSAgICByZXN1bHQuYXBwZW5kKHF1YWQucDMoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChxdWFkLnA0
KCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmIC8vIExheWVy
VXRpbGl0aWVzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCShyZXZp
c2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyV2ViS2l0VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NzIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFk
LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJMYXllckNvbXBv
c2l0aW5nVGhyZWFkLmgiCi0jaW5jbHVkZSAiTGF5ZXJNZXNzYWdlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJCYWNraW5nLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLQot
I2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKLQotUGFzc1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4gTGF5ZXJXZWJLaXRUaHJlYWQ6OmNy
ZWF0ZShMYXllclR5cGUgdHlwZSwgR3JhcGhpY3NMYXllckJsYWNrQmVycnkqIG93bmVyKQotewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJXZWJLaXRUaHJlYWQodHlwZSwgb3duZXIpKTsK
LX0KLQotTGF5ZXJXZWJLaXRUaHJlYWQ6OkxheWVyV2ViS2l0VGhyZWFkKExheWVyVHlwZSB0eXBl
LCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeSogb3duZXIpCi0gICAgOiBMYXllckRhdGEodHlwZSkK
LSAgICAsIG1fb3duZXIob3duZXIpCi0gICAgLCBtX3N1cGVybGF5ZXIoMCkKLSAgICAsIG1fY29u
dGVudHMoMCkKLSAgICAsIG1faXNEcmF3YWJsZShmYWxzZSkKLSAgICAsIG1faXNNYXNrKGZhbHNl
KQotICAgICwgbV9hbmltYXRpb25zQ2hhbmdlZChmYWxzZSkKLSAgICAsIG1fY2xlYXJPdmVycmlk
ZU9uQ29tbWl0KGZhbHNlKQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICAsIG1fZmlsdGVy
c0NoYW5nZWQoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fZGlkU3RhcnRBbmltYXRpb25zKGZhbHNl
KQotewotICAgIGlmICh0eXBlID09IExheWVyKQotICAgICAgICBtX3RpbGVyID0gTGF5ZXJUaWxl
cjo6Y3JlYXRlKHRoaXMpOwotICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZCA9IExheWVyQ29t
cG9zaXRpbmdUaHJlYWQ6OmNyZWF0ZSh0eXBlLCBtX3RpbGVyLmdldCgpKTsKLX0KLQotTGF5ZXJX
ZWJLaXRUaHJlYWQ6On5MYXllcldlYktpdFRocmVhZCgpCi17Ci0gICAgaWYgKG1fdGlsZXIpCi0g
ICAgICAgIG1fdGlsZXItPmxheWVyV2ViS2l0VGhyZWFkRGVzdHJveWVkKCk7Ci0KLSAgICAvLyBP
dXIgc3VwZXJsYXllciBzaG91bGQgYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB1cyBzbyB0aGVy
ZSBzaG91bGQgYmUgbm8KLSAgICAvLyB3YXkgZm9yIHVzIHRvIGJlIGRlc3Ryb3llZCB3aGlsZSB3
ZSBzdGlsbCBoYXZlIGEgc3VwZXJsYXllci4KLSAgICBBU1NFUlQoIXN1cGVybGF5ZXIoKSk7Ci0K
LSAgICAvLyBSZW1vdmUgdGhlIHN1cGVybGF5ZXIgcmVmZXJlbmNlIGZyb20gYWxsIHN1YmxheWVy
cy4KLSAgICByZW1vdmVBbGwobV9zdWJsYXllcnMpOwotICAgIHJlbW92ZUFsbChtX292ZXJsYXlz
KTsKLX0KLQotdm9pZCBMYXllcldlYktpdFRocmVhZDo6cGFpbnRDb250ZW50cyhCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVyLCBjb25zdCBJbnRSZWN0JiBjb250
ZW50c1JlY3QsIGRvdWJsZSBzY2FsZSkKLXsKLSAgICBpZiAoIWRyYXdzQ29udGVudCgpICYmICFj
b250ZW50cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgSW50UmVjdCB1bnRyYW5zZm9ybWVkQ29udGVudHNSZWN0ID0gY29udGVu
dHNSZWN0OwotICAgIEZsb2F0UmVjdCBjbGlwUmVjdCA9IGNvbnRlbnRzUmVjdDsKLSAgICBpZiAo
c2NhbGUgIT0gMS4wKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAg
ICAgICAgbWF0cml4LnNjYWxlKDEuMCAvIHNjYWxlKTsKLSAgICAgICAgdW50cmFuc2Zvcm1lZENv
bnRlbnRzUmVjdCA9IG1hdHJpeC5tYXBSZWN0KGNvbnRlbnRzUmVjdCk7Ci0gICAgICAgIGNsaXBS
ZWN0ID0gbWF0cml4Lm1hcFJlY3QoY2xpcFJlY3QpOwotCi0gICAgICAgIC8vIFdlIGV4dHJhY3Qg
ZnJvbSB0aGUgY29udGVudHNSZWN0IGJ1dCBkcmF3IGEgc2xpZ2h0bHkgbGFyZ2VyIHJlZ2lvbiB0
aGFuCi0gICAgICAgIC8vIHdlIHdlcmUgdG9sZCB0bywgaW4gb3JkZXIgdG8gYXZvaWQgcGl4ZWxz
IGJlaW5nIHJlbmRlcmVkIG9ubHkgcGFydGlhbGx5LgotICAgICAgICBjb25zdCBpbnQgYXRMZWFz
dE9uZURldmljZVBpeGVsID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZigxLjAgLyBzY2FsZSkpOwot
ICAgICAgICB1bnRyYW5zZm9ybWVkQ29udGVudHNSZWN0LmluZmxhdGUoYXRMZWFzdE9uZURldmlj
ZVBpeGVsKTsKLSAgICB9Ci0KLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1D
b250ZXh0ID0gbG9ja0J1ZmZlckRyYXdhYmxlKGJ1ZmZlcik7Ci0gICAgR3JhcGhpY3NDb250ZXh0
IGdyYXBoaWNzQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpOwotICAgIGlmIChjb250ZW50cygpKSB7
Ci0gICAgICAgIC8vIEltYWdlcyBuZWVkcyB0byBiZSBjZW50ZXJlZCBhbmQgd2lsbCBiZSBzY2Fs
ZWQgdG8gZml0IHRoZSBib3VuZHMgb24gdGhlIGNvbXBvc2l0aW5nIHRocmVhZAotICAgICAgICBp
ZiAoIWNvbnRlbnRzKCktPnNpemUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQuZHJhd0ltYWdlKGNvbnRlbnRzKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50
KDAsIDApKTsKLSAgICB9IGVsc2UgewotICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRl
KC1jb250ZW50c1JlY3QueCgpLCAtY29udGVudHNSZWN0LnkoKSk7Ci0gICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zY2FsZShGbG9hdFNpemUoc2NhbGUsIHNjYWxlKSk7Ci0gICAgICAgIGdyYXBoaWNz
Q29udGV4dC5jbGlwKGNsaXBSZWN0KTsKLSAgICAgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xh
eWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCB1bnRyYW5zZm9ybWVkQ29udGVudHNSZWN0KTsK
LSAgICB9Ci0KLSAgICByZWxlYXNlQnVmZmVyRHJhd2FibGUoYnVmZmVyKTsKLX0KLQotdm9pZCBM
YXllcldlYktpdFRocmVhZDo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKQotewotICAg
IGlmIChtX3RpbGVyKQotICAgICAgICBtX3RpbGVyLT51cGRhdGVUZXh0dXJlQ29udGVudHNJZk5l
ZWRlZChtX2lzTWFzayA/IDEuMCA6IGNvbnRlbnRzU2NhbGUoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJX
ZWJLaXRUaHJlYWQ6OmNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcygpCi17Ci0gICAgbGF5ZXJD
b21wb3NpdGluZ1RocmVhZCgpLT5jb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMoKTsKLX0KLQot
dm9pZCBMYXllcldlYktpdFRocmVhZDo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQotewot
ICAgIC8vIENoZWNrIGlmIHRoZSBpbWFnZSBoYXMgY2hhbmdlZC4KLSAgICBpZiAobV9jb250ZW50
cyA9PSBjb250ZW50cykgewotICAgICAgICAvLyBTZXQgbmVlZHMgZGlzcGxheSBmb3IgYW5pbWF0
ZWQgaW1hZ2VzLgotICAgICAgICBpZiAoY29udGVudHMpCi0gICAgICAgICAgICBzZXROZWVkc0Rp
c3BsYXkoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRlbnRzID0gY29udGVu
dHM7Ci0gICAgc2V0TmVlZHNUZXh0dXJlKG1faXNEcmF3YWJsZSAmJiAodGhpcy0+Y29udGVudHMo
KSB8fCBkcmF3c0NvbnRlbnQoKSB8fCBwbHVnaW5WaWV3KCkpKTsKLQotICAgIGlmIChtX2NvbnRl
bnRzKQotICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBlbHNlCi0gICAgICAgIHNldE5l
ZWRzQ29tbWl0KCk7Ci0KLSAgICAvLyBJZiB0aGlzIGxheWVyIGNvbnRhaW5zIGEgYml0bWFwIGlt
YWdlIGl0IGlzbid0IHJlcmVuZGVyZWQgYXQgZGlmZmVyZW50IHNjYWxlIChpdCBpcyByZXNvbHV0
aW9uIGluZGVwZW5kZW50KQotICAgIG1fY29udGVudHNSZXNvbHV0aW9uSW5kZXBlbmRlbnQgPSBz
dGF0aWNfY2FzdDxib29sPihtX2NvbnRlbnRzKTsKLX0KLQotdm9pZCBMYXllcldlYktpdFRocmVh
ZDo6c2V0RHJhd2FibGUoYm9vbCBpc0RyYXdhYmxlKQotewotICAgIGlmIChtX2lzRHJhd2FibGUg
PT0gaXNEcmF3YWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc0RyYXdhYmxlID0gaXNE
cmF3YWJsZTsKLQotICAgIHNldE5lZWRzVGV4dHVyZShtX2lzRHJhd2FibGUgJiYgKGRyYXdzQ29u
dGVudCgpIHx8IGNvbnRlbnRzKCkgfHwgcGx1Z2luVmlldygpIHx8IG1lZGlhUGxheWVyKCkpKTsK
LSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpzZXRO
ZWVkc0NvbW1pdCgpCi17Ci0gICAgLy8gQ2FsbCBub3RpZnlGbHVzaFJlcXVpcmVkKCksIHdoaWNo
IGluIHRoaXMgaW1wbGVtZW50YXRpb24gcGx1bWJzIHRocm91Z2ggdG8KLSAgICAvLyBjYWxsIHNj
aGVkdWxlUm9vdExheWVyQ29tbWl0KCkgb24gdGhlIFdlYlZpZXcsIHdoaWNoIHdpbGwgY2F1c2Ug
dXMgdG8gY29tbWl0Ci0gICAgLy8gY2hhbmdlcyBkb25lIG9uIHRoZSBXZWJLaXQgdGhyZWFkIGZv
ciBkaXNwbGF5IG9uIHRoZSBDb21wb3NpdGluZyB0aHJlYWQuCi0gICAgaWYgKG1fb3duZXIpCi0g
ICAgICAgIG1fb3duZXItPm5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKLX0KLQotdm9pZCBMYXllcldl
YktpdFRocmVhZDo6bm90aWZ5QW5pbWF0aW9uc1N0YXJ0ZWQoZG91YmxlIHRpbWUpCi17Ci0gICAg
aWYgKG1fZGlkU3RhcnRBbmltYXRpb25zKSB7Ci0gICAgICAgIG1fZGlkU3RhcnRBbmltYXRpb25z
ID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX293bmVyKQotICAgICAgICAgICAgbV9vd25lci0+bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aW1lKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbGlzdFNpemUg
PSBtX3N1YmxheWVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6
ZTsgKytpKQotICAgICAgICBtX3N1YmxheWVyc1tpXS0+bm90aWZ5QW5pbWF0aW9uc1N0YXJ0ZWQo
dGltZSk7Ci0KLSAgICBsaXN0U2l6ZSA9IG1fb3ZlcmxheXMuc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKLSAgICAgICAgbV9vdmVybGF5c1tpXS0+bm90
aWZ5QW5pbWF0aW9uc1N0YXJ0ZWQodGltZSk7Ci19Ci0KLXZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6
OmNvbW1pdE9uV2ViS2l0VGhyZWFkKGRvdWJsZSBzY2FsZSkKLXsKLSAgICAvLyBVcGRhdGluZyB0
ZXh0dXJlIGNvbnRlbnRzIHJlcXVpcmUgdGhlIGxhdGVzdCB2aXNpYmlsaXR5IGluZm8uCi0gICAg
dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHNjYWxlKTsKLX0KLQotYm9vbCBMYXllcldlYktpdFRocmVh
ZDo6c3RhcnRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQotewotICAgIGJvb2wgZGlkU3RhcnRBbmlt
YXRpb25zID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3J1bm5pbmdBbmlt
YXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9ydW5uaW5nQW5pbWF0aW9uc1tp
XS0+c3RhcnRUaW1lKCkpIHsKLSAgICAgICAgICAgIG1fcnVubmluZ0FuaW1hdGlvbnNbaV0tPnNl
dFN0YXJ0VGltZSh0aW1lKTsKLSAgICAgICAgICAgIG1fZGlkU3RhcnRBbmltYXRpb25zID0gZGlk
U3RhcnRBbmltYXRpb25zID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNpemVfdCBs
aXN0U2l6ZSA9IG1fc3VibGF5ZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxpc3RTaXplOyArK2kpCi0gICAgICAgIGRpZFN0YXJ0QW5pbWF0aW9ucyB8PSBtX3N1YmxheWVy
c1tpXS0+c3RhcnRBbmltYXRpb25zKHRpbWUpOwotCi0gICAgbGlzdFNpemUgPSBtX292ZXJsYXlz
LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpCi0gICAg
ICAgIGRpZFN0YXJ0QW5pbWF0aW9ucyB8PSBtX292ZXJsYXlzW2ldLT5zdGFydEFuaW1hdGlvbnMo
dGltZSk7Ci0KLSAgICByZXR1cm4gZGlkU3RhcnRBbmltYXRpb25zOwotfQotCi12b2lkIExheWVy
V2ViS2l0VGhyZWFkOjp1cGRhdGVUZXh0dXJlQ29udGVudHMoZG91YmxlIHNjYWxlKQotewotICAg
IGlmIChtX2NvbnRlbnRzU2NhbGUgIT0gc2NhbGUpIHsKLSAgICAgICAgbV9jb250ZW50c1NjYWxl
ID0gc2NhbGU7Ci0KLSAgICAgICAgLy8gT25seSB3ZWIgY29udGVudCBjYW4gcmVkcmF3IGF0IHRo
ZSBuZXcgc2NhbGUuCi0gICAgICAgIC8vIENhbnZhcywgaW1hZ2VzLCB2aWRlbyBldGMgY2FuJ3Qu
Ci0gICAgICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgICAgIHNldE5lZWRzRGlzcGxh
eSgpOwotICAgIH0KLQotICAgIHVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCk7Ci0KLSAg
ICBpZiAoaW5jbHVkZVZpc2liaWxpdHkoKSkgewotICAgICAgICAvLyBUaGUgUmVuZGVyTGF5ZXJC
YWNraW5nIGNhc3QgbG9va3MgdW5zYWZlIGdpdmVuIHRoYXQgdGhlcmUgYXJlIHR3byBjbGFzc2Vz
Ci0gICAgICAgIC8vIGRlcml2ZWQgZnJvbSBHcmFwaGljc0xheWVyQ2xpZW50IGJ1dCB0aGlzIGNv
ZGUgaXMgb25seSByZWFjaGFibGUgZm9yCi0gICAgICAgIC8vIHRoaW5ncyB0aGF0IHByb2R1Y2Ug
UmVuZGVyTGF5ZXJCYWNraW5nIGRlcml2YXRpdmVzOyBpLmUuLCBwbHVnaW5zIGFuZCBtZWRpYS4K
LSAgICAgICAgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKHN0YXRpY19jYXN0PFJlbmRlckxheWVy
QmFja2luZyo+KG1fb3duZXItPmNsaWVudCgpKS0+b3duaW5nTGF5ZXIoKSk7Ci0gICAgICAgIGJv
b2wgaXNWaXNpYmxlKHJlbmRlckxheWVyLT5oYXNWaXNpYmxlQ29udGVudCgpIHx8IHJlbmRlckxh
eWVyLT5oYXNWaXNpYmxlRGVzY2VuZGFudCgpKTsKLSAgICAgICAgaWYgKG1faXNWaXNpYmxlICE9
IGlzVmlzaWJsZSkgewotICAgICAgICAgICAgbV9pc1Zpc2libGUgPSBpc1Zpc2libGU7Ci0gICAg
ICAgICAgICBzZXROZWVkc0NvbW1pdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2l6ZV90
IGxpc3RTaXplID0gbV9zdWJsYXllcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGlzdFNpemU7ICsraSkKLSAgICAgICAgbV9zdWJsYXllcnNbaV0tPnVwZGF0ZVRleHR1cmVD
b250ZW50cyhzY2FsZSk7Ci0KLSAgICBsaXN0U2l6ZSA9IG1fb3ZlcmxheXMuc2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKLSAgICAgICAgbV9vdmVybGF5
c1tpXS0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHNjYWxlKTsKLQotICAgIGlmIChtYXNrTGF5ZXIo
KSkKLSAgICAgICAgbWFza0xheWVyKCktPnVwZGF0ZVRleHR1cmVDb250ZW50cyhzY2FsZSk7Ci0K
LSAgICBpZiAocmVwbGljYUxheWVyKCkpCi0gICAgICAgIHJlcGxpY2FMYXllcigpLT51cGRhdGVU
ZXh0dXJlQ29udGVudHMoc2NhbGUpOwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpjb21t
aXRPbkNvbXBvc2l0aW5nVGhyZWFkKCkKLXsKLSAgICBGbG9hdFBvaW50IG9sZFBvc2l0aW9uID0g
bV9wb3NpdGlvbjsKLSAgICBtX3Bvc2l0aW9uICs9IG1fYWJzb2x1dGVPZmZzZXQ7Ci0gICAgLy8g
Q29weSB0aGUgYmFzZSB2YXJpYWJsZXMgZnJvbSB0aGlzIG9iamVjdCBpbnRvIG1fbGF5ZXJDb21w
b3NpdGluZ1RocmVhZAotICAgIHJlcGxpY2F0ZShtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQuZ2V0
KCkpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBpZiAobV9maWx0ZXJzQ2hhbmdlZCkg
ewotICAgICAgICBtX2ZpbHRlcnNDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIG1fbGF5ZXJDb21w
b3NpdGluZ1RocmVhZC0+c2V0RmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQodHJ1ZSk7Ci0gICAgfQot
I2VuZGlmCi0gICAgaWYgKG1fYW5pbWF0aW9uc0NoYW5nZWQpIHsKLSAgICAgICAgbV9sYXllckNv
bXBvc2l0aW5nVGhyZWFkLT5zZXRSdW5uaW5nQW5pbWF0aW9ucyhtX3J1bm5pbmdBbmltYXRpb25z
KTsKLSAgICAgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5zZXRTdXNwZW5kZWRBbmltYXRp
b25zKG1fc3VzcGVuZGVkQW5pbWF0aW9ucyk7Ci0gICAgICAgIG1fYW5pbWF0aW9uc0NoYW5nZWQg
PSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG1fY2xlYXJPdmVycmlkZU9uQ29tbWl0KSB7Ci0gICAg
ICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+Y2xlYXJPdmVycmlkZSgpOwotICAgICAgICBt
X2NsZWFyT3ZlcnJpZGVPbkNvbW1pdCA9IGZhbHNlOwotICAgIH0KLSAgICBtX3Bvc2l0aW9uID0g
b2xkUG9zaXRpb247Ci0gICAgdXBkYXRlTGF5ZXJIaWVyYXJjaHkoKTsKLQotICAgIGNvbW1pdFBl
bmRpbmdUZXh0dXJlVXBsb2FkcygpOwotCi0gICAgc2l6ZV90IGxpc3RTaXplID0gbV9zdWJsYXll
cnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKLSAg
ICAgICAgbV9zdWJsYXllcnNbaV0tPmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQoKTsKLQotICAg
IGxpc3RTaXplID0gbV9vdmVybGF5cy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsaXN0U2l6ZTsgKytpKQotICAgICAgICBtX292ZXJsYXlzW2ldLT5jb21taXRPbkNvbXBvc2l0
aW5nVGhyZWFkKCk7Ci0KLSAgICBpZiAobWFza0xheWVyKCkpIHsKLSAgICAgICAgbWFza0xheWVy
KCktPmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQoKTsKLSAgICAgICAgbGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCgpLT5zZXRNYXNrTGF5ZXIobWFza0xheWVyKCktPmxheWVyQ29tcG9zaXRpbmdUaHJl
YWQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKS0+c2V0
TWFza0xheWVyKDApOwotCi0gICAgaWYgKHJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgIHJlcGxp
Y2FMYXllcigpLT5jb21taXRPbkNvbXBvc2l0aW5nVGhyZWFkKCk7Ci0gICAgICAgIGxheWVyQ29t
cG9zaXRpbmdUaHJlYWQoKS0+c2V0UmVwbGljYUxheWVyKHJlcGxpY2FMYXllcigpLT5sYXllckNv
bXBvc2l0aW5nVGhyZWFkKCkpOwotICAgIH0gZWxzZQotICAgICAgICBsYXllckNvbXBvc2l0aW5n
VGhyZWFkKCktPnNldFJlcGxpY2FMYXllcigwKTsKLX0KLQotdm9pZCBMYXllcldlYktpdFRocmVh
ZDo6YWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4gc3VibGF5ZXIpCi17
Ci0gICAgaW5zZXJ0KG1fc3VibGF5ZXJzLCBzdWJsYXllciwgbV9zdWJsYXllcnMuc2l6ZSgpKTsK
LX0KLQotdm9pZCBMYXllcldlYktpdFRocmVhZDo6YWRkT3ZlcmxheShQYXNzUmVmUHRyPExheWVy
V2ViS2l0VGhyZWFkPiBvdmVybGF5KQotewotICAgIGluc2VydChtX292ZXJsYXlzLCBvdmVybGF5
LCBtX292ZXJsYXlzLnNpemUoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6Omluc2Vy
dChWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+JiBsaXN0LCBQYXNzUmVmUHRyPExh
eWVyV2ViS2l0VGhyZWFkPiBzdWJsYXllciwgc2l6ZV90IGluZGV4KQotewotICAgIHN1YmxheWVy
LT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwotICAgIGluZGV4ID0gbWluKGluZGV4LCBsaXN0LnNp
emUoKSk7Ci0gICAgc3VibGF5ZXItPnNldFN1cGVybGF5ZXIodGhpcyk7Ci0gICAgbGlzdC5pbnNl
cnQoaW5kZXgsIHN1YmxheWVyKTsKLQotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQg
TGF5ZXJXZWJLaXRUaHJlYWQ6OnJlbW92ZUZyb21TdXBlcmxheWVyKCkKLXsKLSAgICBpZiAobV9z
dXBlcmxheWVyKQotICAgICAgICBtX3N1cGVybGF5ZXItPnJlbW92ZVN1YmxheWVyT3JPdmVybGF5
KHRoaXMpOwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpyZW1vdmVTdWJsYXllck9yT3Zl
cmxheShMYXllcldlYktpdFRocmVhZCogc3VibGF5ZXIpCi17Ci0gICAgcmVtb3ZlKG1fc3VibGF5
ZXJzLCBzdWJsYXllcik7Ci0gICAgcmVtb3ZlKG1fb3ZlcmxheXMsIHN1YmxheWVyKTsKLX0KLQot
dm9pZCBMYXllcldlYktpdFRocmVhZDo6cmVtb3ZlKFZlY3RvcjxSZWZQdHI8TGF5ZXJXZWJLaXRU
aHJlYWQ+ID4mIHZlY3RvciwgTGF5ZXJXZWJLaXRUaHJlYWQqIHN1YmxheWVyKQotewotICAgIHNp
emVfdCBmb3VuZEluZGV4ID0gdmVjdG9yLmZpbmQoc3VibGF5ZXIpOwotICAgIGlmIChmb3VuZElu
ZGV4ID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdWJsYXllci0+c2V0U3Vw
ZXJsYXllcigwKTsKLSAgICB2ZWN0b3IucmVtb3ZlKGZvdW5kSW5kZXgpOwotCi0gICAgc2V0TmVl
ZHNDb21taXQoKTsKLX0KLQotdm9pZCBMYXllcldlYktpdFRocmVhZDo6cmVwbGFjZVN1YmxheWVy
KExheWVyV2ViS2l0VGhyZWFkKiByZWZlcmVuY2UsIFBhc3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJl
YWQ+IG5ld0xheWVyKQotewotICAgIEFTU0VSVF9BUkcocmVmZXJlbmNlLCByZWZlcmVuY2UpOwot
ICAgIEFTU0VSVF9BUkcocmVmZXJlbmNlLCByZWZlcmVuY2UtPnN1cGVybGF5ZXIoKSA9PSB0aGlz
KTsKLQotICAgIGlmIChyZWZlcmVuY2UgPT0gbmV3TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHNpemVfdCByZWZlcmVuY2VJbmRleCA9IG1fc3VibGF5ZXJzLmZpbmQocmVmZXJlbmNlKTsK
LSAgICBpZiAocmVmZXJlbmNlSW5kZXggPT0gbm90Rm91bmQpIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZWZlcmVuY2UtPnJl
bW92ZUZyb21TdXBlcmxheWVyKCk7Ci0KLSAgICBpZiAobmV3TGF5ZXIpIHsKLSAgICAgICAgbmV3
TGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Ci0gICAgICAgIGluc2VydFN1YmxheWVyKG5l
d0xheWVyLCByZWZlcmVuY2VJbmRleCk7Ci0gICAgfQotfQotCi12b2lkIExheWVyV2ViS2l0VGhy
ZWFkOjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAobV9ib3VuZHMg
PT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBmaXJzdFJlc2l6ZSA9ICFtX2Jv
dW5kcy53aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBzaXplLndpZHRoKCkgJiYgc2l6
ZS5oZWlnaHQoKTsKLQotICAgIG1fYm91bmRzID0gc2l6ZTsKLQotICAgIGJvdW5kc0NoYW5nZWQo
KTsKLQotICAgIGlmIChmaXJzdFJlc2l6ZSkKLSAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0g
ICAgZWxzZQotICAgICAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVyV2ViS2l0
VGhyZWFkOjpzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHJlY3Qg
PT0gbV9mcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mcmFtZSA9IHJlY3Q7Ci0gICAg
c2V0TmVlZHNEaXNwbGF5KCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1ib29sIExh
eWVyV2ViS2l0VGhyZWFkOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgLy8gVGhlcmUgaXMgd29yayBhc3NvY2lhdGVkIHdpdGgg
Y29tcG9zaXRpbmcgZmlsdGVycywgZXZlbiBpZiB0aGVyZSBhcmUgemVybyBmaWx0ZXJzLAotICAg
IC8vIHNvIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzLCBjbGFpbSB3ZSBjYW4ndCBjb21wb3NpdGUg
dGhlbS4KLSAgICBpZiAoIWZpbHRlcnMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgewotICAg
ICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlcnMuYXQo
aSk7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkp
IHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKLSNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCi0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006Ci0jZW5k
aWYKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5k
aWYKLQotY29uc3QgTGF5ZXJXZWJLaXRUaHJlYWQqIExheWVyV2ViS2l0VGhyZWFkOjpyb290TGF5
ZXIoKSBjb25zdAotewotICAgIGNvbnN0IExheWVyV2ViS2l0VGhyZWFkKiBsYXllciA9IHRoaXM7
Ci0gICAgTGF5ZXJXZWJLaXRUaHJlYWQqIHN1cGVybGF5ZXIgPSBsYXllci0+c3VwZXJsYXllcigp
OwotCi0gICAgd2hpbGUgKHN1cGVybGF5ZXIpIHsKLSAgICAgICAgbGF5ZXIgPSBzdXBlcmxheWVy
OwotICAgICAgICBzdXBlcmxheWVyID0gc3VwZXJsYXllci0+c3VwZXJsYXllcigpOwotICAgIH0K
LSAgICByZXR1cm4gbGF5ZXI7Ci19Ci0KLXZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJlbW92ZUFs
bChWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+JiB2ZWN0b3IpCi17Ci0gICAgaWYg
KCF2ZWN0b3Iuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAodmVjdG9yLnNp
emUoKSkgewotICAgICAgICBSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IGxheWVyID0gdmVjdG9y
WzBdLmdldCgpOwotICAgICAgICBBU1NFUlQobGF5ZXItPnN1cGVybGF5ZXIoKSA9PSB0aGlzKTsK
LSAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Ci0gICAgfQotCi0gICAgc2V0
TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBMYXllcldlYktpdFRocmVhZDo6c2V0U3VibGF5ZXJz
KGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+ID4mIHN1YmxheWVycykKLXsK
LSAgICBpZiAoc3VibGF5ZXJzID09IG1fc3VibGF5ZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICByZW1vdmVBbGxTdWJsYXllcnMoKTsKLSAgICBzaXplX3QgbGlzdFNpemUgPSBzdWJsYXllcnMu
c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKLSAgICAg
ICAgYWRkU3VibGF5ZXIoc3VibGF5ZXJzW2ldKTsKLX0KLQotdm9pZCBMYXllcldlYktpdFRocmVh
ZDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQotewot
ICAgIGlmIChtX3RpbGVyKQotICAgICAgICBtX3RpbGVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHlS
ZWN0KTsKLSAgICBzZXROZWVkc0NvbW1pdCgpOyAvLyBGSVhNRTogUmVwbGFjZSB0aGlzIHdpdGgg
YSBtb3JlIHRhcmdldGVkIG1lc3NhZ2UgZm9yIGRpcnR5IHJlY3QgaGFuZGxpbmcgd2l0aCBwbHVn
aW4gY29udGVudD8KLX0KLQotdm9pZCBMYXllcldlYktpdFRocmVhZDo6c2V0TmVlZHNEaXNwbGF5
KCkKLXsKLSAgICBpZiAobV90aWxlcikKLSAgICAgICAgbV90aWxlci0+c2V0TmVlZHNEaXNwbGF5
KCk7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsgLy8gRklYTUU6IFJlcGxhY2UgdGhpcyB3aXRoIGEg
bW9yZSB0YXJnZXRlZCBtZXNzYWdlIGZvciBkaXJ0eSByZWN0IGhhbmRsaW5nIHdpdGggcGx1Z2lu
IGNvbnRlbnQ/Ci19Ci0KLXZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZUxheWVySGllcmFy
Y2h5KCkKLXsKLSAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldFN1cGVybGF5ZXIoc3Vw
ZXJsYXllcigpID8gc3VwZXJsYXllcigpLT5tX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQuZ2V0KCkg
OiAwKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiBzdWJs
YXllcnM7Ci0gICAgc2l6ZV90IGxpc3RTaXplID0gbV9vdmVybGF5cy5zaXplKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKQotICAgICAgICBzdWJsYXllcnMuYXBw
ZW5kKG1fb3ZlcmxheXNbaV0tPm1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC5nZXQoKSk7Ci0gICAg
bGlzdFNpemUgPSBtX3N1YmxheWVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsaXN0U2l6ZTsgKytpKQotICAgICAgICBzdWJsYXllcnMuYXBwZW5kKG1fc3VibGF5ZXJzW2ld
LT5tX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQuZ2V0KCkpOwotICAgIG1fbGF5ZXJDb21wb3NpdGlu
Z1RocmVhZC0+c2V0U3VibGF5ZXJzKHN1YmxheWVycyk7Ci19Ci0KLXZvaWQgTGF5ZXJXZWJLaXRU
aHJlYWQ6OnNldElzTWFzayhib29sIGlzTWFzaykKLXsKLSAgICBtX2lzTWFzayA9IGlzTWFzazsK
LSAgICBpZiAoaXNNYXNrICYmIG1fdGlsZXIpCi0gICAgICAgIG1fdGlsZXItPnNldE5lZWRzQmFj
a2luZyh0cnVlKTsKLX0KLQotdm9pZCBMYXllcldlYktpdFRocmVhZDo6c2V0UnVubmluZ0FuaW1h
dGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiYgYW5pbWF0aW9ucykK
LXsKLSAgICBtX3J1bm5pbmdBbmltYXRpb25zID0gYW5pbWF0aW9uczsKLSAgICBtX2FuaW1hdGlv
bnNDaGFuZ2VkID0gdHJ1ZTsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVy
V2ViS2l0VGhyZWFkOjpzZXRTdXNwZW5kZWRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8
TGF5ZXJBbmltYXRpb24+ID4mIGFuaW1hdGlvbnMpCi17Ci0gICAgbV9zdXNwZW5kZWRBbmltYXRp
b25zID0gYW5pbWF0aW9uczsKLSAgICBtX2FuaW1hdGlvbnNDaGFuZ2VkID0gdHJ1ZTsKLSAgICBz
ZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpyZWxlYXNlTGF5
ZXJSZXNvdXJjZXMoKQotewotICAgIGRlbGV0ZVRleHR1cmVzKCk7Ci0KLSAgICBzaXplX3QgbGlz
dFNpemUgPSBtX3N1YmxheWVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aXN0U2l6ZTsgKytpKQotICAgICAgICBtX3N1YmxheWVyc1tpXS0+cmVsZWFzZUxheWVyUmVzb3Vy
Y2VzKCk7Ci0KLSAgICBsaXN0U2l6ZSA9IG1fb3ZlcmxheXMuc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKLSAgICAgICAgbV9vdmVybGF5c1tpXS0+cmVs
ZWFzZUxheWVyUmVzb3VyY2VzKCk7Ci0KLSAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1h
c2tMYXllcigpLT5yZWxlYXNlTGF5ZXJSZXNvdXJjZXMoKTsKLQotICAgIGlmIChyZXBsaWNhTGF5
ZXIoKSkKLSAgICAgICAgcmVwbGljYUxheWVyKCktPnJlbGVhc2VMYXllclJlc291cmNlcygpOwot
fQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpkaXNjYXJkQmFja1Zpc2liaWxpdHkoKQotewot
ICAgIGlmIChtX3RpbGVyKQotICAgICAgICBtX3RpbGVyLT5kaXNjYXJkQmFja1Zpc2liaWxpdHko
KTsKLQotICAgIHNpemVfdCBsaXN0U2l6ZSA9IG1fc3VibGF5ZXJzLnNpemUoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpCi0gICAgICAgIG1fc3VibGF5ZXJzW2ld
LT5kaXNjYXJkQmFja1Zpc2liaWxpdHkoKTsKLQotICAgIGxpc3RTaXplID0gbV9vdmVybGF5cy5z
aXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKQotICAgICAg
ICBtX292ZXJsYXlzW2ldLT5kaXNjYXJkQmFja1Zpc2liaWxpdHkoKTsKLQotICAgIGlmIChtYXNr
TGF5ZXIoKSkKLSAgICAgICAgbWFza0xheWVyKCktPmRpc2NhcmRCYWNrVmlzaWJpbGl0eSgpOwot
Ci0gICAgaWYgKHJlcGxpY2FMYXllcigpKQotICAgICAgICByZXBsaWNhTGF5ZXIoKS0+ZGlzY2Fy
ZEJhY2tWaXNpYmlsaXR5KCk7Ci19Ci0KLUludFJlY3QgTGF5ZXJXZWJLaXRUaHJlYWQ6Om1hcEZy
b21UcmFuc2Zvcm1lZChjb25zdCBJbnRSZWN0JiBjb250ZW50c1JlY3QsIGRvdWJsZSBzY2FsZSkK
LXsKLSAgICBJbnRSZWN0IHVudHJhbnNmb3JtZWRDb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3Q7
Ci0KLSAgICBpZiAoc2NhbGUgIT0gMS4wKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1hdHJpeDsKLSAgICAgICAgbWF0cml4LnNjYWxlKDEuMCAvIHNjYWxlKTsKLSAgICAgICAgdW50
cmFuc2Zvcm1lZENvbnRlbnRzUmVjdCA9IG1hdHJpeC5tYXBSZWN0KGNvbnRlbnRzUmVjdCk7Ci0K
LSAgICAgICAgLy8gV2UgZXh0cmFjdCBmcm9tIHRoZSBjb250ZW50c1JlY3QgYnV0IGRyYXcgYSBz
bGlnaHRseSBsYXJnZXIgcmVnaW9uIHRoYW4KLSAgICAgICAgLy8gd2Ugd2VyZSB0b2xkIHRvLCBp
biBvcmRlciB0byBhdm9pZCBwaXhlbHMgYmVpbmcgcmVuZGVyZWQgb25seSBwYXJ0aWFsbHkuCi0g
ICAgICAgIGNvbnN0IGludCBhdExlYXN0T25lRGV2aWNlUGl4ZWwgPSBzdGF0aWNfY2FzdDxpbnQ+
KGNlaWxmKDEuMCAvIHNjYWxlKSk7Ci0gICAgICAgIHVudHJhbnNmb3JtZWRDb250ZW50c1JlY3Qu
aW5mbGF0ZShhdExlYXN0T25lRGV2aWNlUGl4ZWwpOwotICAgIH0KLQotICAgIHJldHVybiB1bnRy
YW5zZm9ybWVkQ29udGVudHNSZWN0OwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5oCShyZXZp
c2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyV2ViS2l0VGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjc1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYgTGF5ZXJXZWJLaXRUaHJlYWRfaAot
I2RlZmluZSBMYXllcldlYktpdFRocmVhZF9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0KLSNpbmNsdWRlICJHcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oIgotI2luY2x1ZGUg
IkxheWVyQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiTGF5ZXJEYXRhLmgiCi0jaW5jbHVkZSAiTGF5
ZXJUaWxlci5oIgotCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZDsKLQotY2xhc3MgTGF5ZXJXZWJLaXRUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxMYXll
cldlYktpdFRocmVhZD4sIHB1YmxpYyBMYXllckRhdGEgewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBjcmVhdGUoTGF5ZXJUeXBlLCBHcmFwaGljc0xh
eWVyQmxhY2tCZXJyeSogb3duZXIgPSAwKTsKLQotICAgIHZpcnR1YWwgfkxheWVyV2ViS2l0VGhy
ZWFkKCk7Ci0KLSAgICB2b2lkIGFkZFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJl
YWQ+KTsKLSAgICB2b2lkIGluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJl
YWQ+IGxheWVyLCBzaXplX3QgaW5kZXgpIHsgaW5zZXJ0KG1fc3VibGF5ZXJzLCBsYXllciwgaW5k
ZXgpOyB9Ci0gICAgdm9pZCByZXBsYWNlU3VibGF5ZXIoTGF5ZXJXZWJLaXRUaHJlYWQqIHJlZmVy
ZW5jZSwgUGFzc1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4gbmV3TGF5ZXIpOwotICAgIHZvaWQg
cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLQotICAgIHZvaWQgYWRkT3ZlcmxheShQYXNzUmVmUHRy
PExheWVyV2ViS2l0VGhyZWFkPik7Ci0KLSAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIGFuY2hvclBvaW50KSB7IG1fYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludDsgc2V0
TmVlZHNDb21taXQoKTsgfQotCi0gICAgdm9pZCBzZXRBbmNob3JQb2ludFooZmxvYXQgYW5jaG9y
UG9pbnRaKSB7IG1fYW5jaG9yUG9pbnRaID0gYW5jaG9yUG9pbnRaOyBzZXROZWVkc0NvbW1pdCgp
OyB9Ci0KLSAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsg
bV9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsgc2V0TmVlZHNDb21taXQoKTsgfQotCi0gICAgdm9p
ZCBzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9ib3JkZXJDb2xvciA9IGNv
bG9yOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0KLSAgICB2b2lkIHNldEJvcmRlcldpZHRoKGZsb2F0
IHdpZHRoKSB7IG1fYm9yZGVyV2lkdGggPSB3aWR0aDsgc2V0TmVlZHNDb21taXQoKTsgfQotCi0g
ICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYpOwotCi0gICAgdm9pZCBzZXRTaXplSXNT
Y2FsZUludmFyaWFudChib29sIGludmFyaWFudCkgeyBtX3NpemVJc1NjYWxlSW52YXJpYW50ID0g
aW52YXJpYW50OyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0KLSAgICB2b2lkIHNldERvdWJsZVNpZGVk
KGJvb2wgZG91YmxlU2lkZWQpIHsgbV9kb3VibGVTaWRlZCA9IGRvdWJsZVNpZGVkOyBzZXROZWVk
c0NvbW1pdCgpOyB9Ci0KLSAgICB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0g
ICAgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wgbWFza3NUb0JvdW5kcykgeyBtX21hc2tzVG9C
b3VuZHMgPSBtYXNrc1RvQm91bmRzOyB9Ci0KLSAgICB2b2lkIHNldE1hc2tMYXllcihMYXllcldl
YktpdFRocmVhZCogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVyOyB9Ci0gICAg
TGF5ZXJXZWJLaXRUaHJlYWQqIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVy
LmdldCgpOyB9Ci0KLSAgICBib29sIGlzTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXNrOyB9
Ci0gICAgdm9pZCBzZXRJc01hc2soYm9vbCk7Ci0KLSAgICB2b2lkIHNldFJlcGxpY2FMYXllcihM
YXllcldlYktpdFRocmVhZCogbGF5ZXIpIHsgbV9yZXBsaWNhTGF5ZXIgPSBsYXllcjsgfQotICAg
IExheWVyV2ViS2l0VGhyZWFkKiByZXBsaWNhTGF5ZXIoKSB7IHJldHVybiBtX3JlcGxpY2FMYXll
ci5nZXQoKTsgfQotCi0gICAgLy8gRklYTUU6IE1vdmUgdG8gYSBuZXcgc3ViY2xhc3MsIENvbnRl
bnRMYXllcldlYktpdFRocmVhZC4gVGhpcyBpcyBvbmx5IHVzZWQgZm9yIGxheWVycyB0aGF0IGRy
YXcgY29udGVudAotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLQot
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkp
IHsgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQotCi0gICAg
dm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgc2V0
TmVlZHNDb21taXQoKTsgfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0
RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSB7IG1fZmlsdGVycyA9IGZp
bHRlcnM7IG1fZmlsdGVyc0NoYW5nZWQgPSB0cnVlOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAg
c3RhdGljIGJvb2wgZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRPcGFxdWUoYm9vbCBpc09wYXF1ZSkg
eyBtX2lzT3BhcXVlID0gaXNPcGFxdWU7IHNldE5lZWRzQ29tbWl0KCk7IH0KLQotICAgIHZvaWQg
c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBv
c2l0aW9uOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0KLSAgICBjb25zdCBMYXllcldlYktpdFRocmVh
ZCogcm9vdExheWVyKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbW92ZUFsbFN1YmxheWVycygpIHsg
cmVtb3ZlQWxsKG1fc3VibGF5ZXJzKTsgfQotCi0gICAgdm9pZCBzZXRTdWJsYXllcnMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gPiYpOwotCi0gICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gPiYgc3VibGF5ZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9zdWJsYXllcnM7IH0KLQotICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3N1YmxheWVyVHJhbnNmb3JtID0gdHJh
bnNmb3JtOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0KLSAgICBMYXllcldlYktpdFRocmVhZCogc3Vw
ZXJsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc3VwZXJsYXllcjsgfQotCi0gICAgdm9pZCBzZXRU
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3RyYW5z
Zm9ybSA9IHRyYW5zZm9ybTsgc2V0TmVlZHNDb21taXQoKTsgfQotCi0gICAgdm9pZCBzZXRQcmVz
ZXJ2ZXMzRChib29sIHByZXNlcnZlczNEKSB7IG1fcHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRDsg
c2V0TmVlZHNDb21taXQoKTsgfQotCi0gICAgdm9pZCBzZXRGaXhlZFBvc2l0aW9uKGJvb2wgZml4
ZWQpCi0gICAgewotICAgICAgICBpZiAobV9pc0ZpeGVkUG9zaXRpb24gPT0gZml4ZWQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faXNGaXhlZFBvc2l0aW9uID0gZml4ZWQ7Ci0gICAg
ICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRIYXNGaXhlZENvbnRh
aW5lcihib29sIGZpeGVkKSB7IG1faGFzRml4ZWRDb250YWluZXIgPSBmaXhlZDsgc2V0TmVlZHND
b21taXQoKTsgfQotICAgIHZvaWQgc2V0SGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZShib29sIGZp
eGVkKSB7IG1faGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSA9IGZpeGVkOyBzZXROZWVkc0NvbW1p
dCgpOyB9Ci0KLSAgICB2b2lkIHNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhi
b29sIGZpeGVkKQotICAgIHsKLSAgICAgICAgaWYgKG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0
aW9uTGF5ZXJzID09IGZpeGVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2lzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyA9IGZpeGVkOwotICAgICAgICBzZXROZWVkc0Nv
bW1pdCgpOwotICAgIH0KLQotICAgIHZvaWQgc2V0Rml4ZWRUb1RvcChib29sIGZpeGVkVG9Ub3Ap
Ci0gICAgewotICAgICAgICBpZiAobV9pc0ZpeGVkVG9Ub3AgPT0gZml4ZWRUb1RvcCkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbV9pc0ZpeGVkVG9Ub3AgPSBmaXhlZFRvVG9wOwotICAg
ICAgICBzZXROZWVkc0NvbW1pdCgpOwotICAgIH0KLQotICAgIHZvaWQgc2V0Rml4ZWRUb0xlZnQo
Ym9vbCBmaXhlZFRvTGVmdCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzRml4ZWRUb0xlZnQgPT0g
Zml4ZWRUb0xlZnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faXNGaXhlZFRvTGVm
dCA9IGZpeGVkVG9MZWZ0OwotICAgICAgICBzZXROZWVkc0NvbW1pdCgpOwotICAgIH0KLQotICAg
IHZvaWQgc2V0RnJhbWVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotICAgIHsKLSAg
ICAgICAgaWYgKG1fZnJhbWVWaXNpYmxlUmVjdCA9PSByZWN0KQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX2ZyYW1lVmlzaWJsZVJlY3QgPSByZWN0OwotICAgICAgICBzZXROZWVkc0Nv
bW1pdCgpOwotICAgIH0KLQotICAgIHZvaWQgc2V0RnJhbWVDb250ZW50c1NpemUoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ZyYW1lQ29udGVudHNTaXplID09IHNp
emUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZnJhbWVDb250ZW50c1NpemUgPSBz
aXplOwotICAgICAgICBzZXROZWVkc0NvbW1pdCgpOwotICAgIH0KLQotICAgIHZvaWQgc2V0Q29u
dGVudHMoSW1hZ2UqKTsKLSAgICBJbWFnZSogY29udGVudHMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRlbnRzLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldE93bmVyKEdyYXBoaWNzTGF5ZXJCbGFja0Jl
cnJ5KiBvd25lcikgeyBtX293bmVyID0gb3duZXI7IH0KLSAgICAvLyBOT1RFOiBDYW4gYmUgMC4K
LSAgICBHcmFwaGljc0xheWVyQmxhY2tCZXJyeSogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293
bmVyOyB9Ci0KLSAgICBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXIg
JiYgbV9vd25lci0+ZHJhd3NDb250ZW50KCk7IH0KLSAgICB2b2lkIHNldERyYXdhYmxlKGJvb2wp
OwotCi0gICAgLy8gMS4gQ29tbWl0IG9uIFdlYktpdCB0aHJlYWQKLSAgICB2b2lkIGNvbW1pdE9u
V2ViS2l0VGhyZWFkKGRvdWJsZSBzY2FsZSk7Ci0KLSAgICAvLyAyLiBDb21taXQgb24gQ29tcG9z
aXRpbmcgdGhyZWFkCi0gICAgdm9pZCBjb21taXRPbkNvbXBvc2l0aW5nVGhyZWFkKCk7Ci0gICAg
Ym9vbCBzdGFydEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOwotCi0gICAgLy8gMy4gTm90aWZ5IHdo
ZW4gcmV0dXJuaW5nIHRvIFdlYktpdCB0aHJlYWQKLSAgICB2b2lkIG5vdGlmeUFuaW1hdGlvbnNT
dGFydGVkKGRvdWJsZSB0aW1lKTsKLQotICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVy
Q29tcG9zaXRpbmdUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyQ29tcG9zaXRpbmdUaHJl
YWQuZ2V0KCk7IH0KLQotICAgIC8vIE9ubHkgdXNlZCB3aGVuIHRoaXMgbGF5ZXIgaXMgdGhlIHJv
b3QgbGF5ZXIgb2YgYSBmcmFtZS4KLSAgICB2b2lkIHNldEFic29sdXRlT2Zmc2V0KGNvbnN0IEZs
b2F0U2l6ZSYgb2Zmc2V0KSB7IG1fYWJzb2x1dGVPZmZzZXQgPSBvZmZzZXQ7IH0KLQotICAgIHZv
aWQgcGFpbnRDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlcios
IGNvbnN0IEludFJlY3QmIHRyYW5zZm9ybWVkQ29udGVudHNSZWN0LCBkb3VibGUgc2NhbGUpOwot
Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwotCi0gICAgdm9pZCBzZXRSdW5uaW5nQW5pbWF0
aW9ucyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+Jik7Ci0gICAgdm9pZCBz
ZXRTdXNwZW5kZWRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+
ID4mKTsKLQotICAgIC8vIEFsbG93cyB5b3UgdG8gY2xlYXIgdGhlIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ6Om92ZXJyaWRlcyBmcm9tIHRoZSBXSyB0aHJlYWQKLSAgICB2b2lkIGNsZWFyT3ZlcnJp
ZGUoKSB7IG1fY2xlYXJPdmVycmlkZU9uQ29tbWl0ID0gdHJ1ZTsgc2V0TmVlZHNDb21taXQoKTsg
fQotCi0gICAgdm9pZCByZWxlYXNlTGF5ZXJSZXNvdXJjZXMoKTsKLQotICAgIHZvaWQgZGlzY2Fy
ZEJhY2tWaXNpYmlsaXR5KCk7Ci0KLSAgICBzdGF0aWMgSW50UmVjdCBtYXBGcm9tVHJhbnNmb3Jt
ZWQoY29uc3QgSW50UmVjdCYsIGRvdWJsZSBzY2FsZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBMYXll
cldlYktpdFRocmVhZChMYXllclR5cGUsIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5KiBvd25lcik7
Ci0KLSAgICB2b2lkIHNldE5lZWRzVGV4dHVyZShib29sIG5lZWRzVGV4dHVyZSkgeyBtX25lZWRz
VGV4dHVyZSA9IG5lZWRzVGV4dHVyZTsgfQotICAgIGJvb2wgaXNEcmF3YWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNEcmF3YWJsZTsgfQotCi0gICAgdm9pZCB1cGRhdGVWaXNpYmlsaXR5KCk7Ci0g
ICAgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHMoZG91YmxlIHNjYWxlKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBib3VuZHNDaGFuZ2VkKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1
cmVDb250ZW50c0lmTmVlZGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1pdFBlbmRpbmdUZXh0
dXJlVXBsb2FkcygpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlcygpIHsgfQotCi1w
cml2YXRlOgotICAgIHZvaWQgdXBkYXRlTGF5ZXJIaWVyYXJjaHkoKTsKLQotICAgIHZvaWQgc2V0
U3VwZXJsYXllcihMYXllcldlYktpdFRocmVhZCogc3VwZXJsYXllcikgeyBtX3N1cGVybGF5ZXIg
PSBzdXBlcmxheWVyOyB9Ci0KLSAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9t
IHJlbW92ZUZyb21TdXBlcmxheWVyLgotICAgIHZvaWQgcmVtb3ZlU3VibGF5ZXJPck92ZXJsYXko
TGF5ZXJXZWJLaXRUaHJlYWQqKTsKLSAgICB2b2lkIHJlbW92ZShWZWN0b3I8UmVmUHRyPExheWVy
V2ViS2l0VGhyZWFkPiA+JiwgTGF5ZXJXZWJLaXRUaHJlYWQqKTsKLSAgICB2b2lkIHJlbW92ZUFs
bChWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+Jik7Ci0gICAgdm9pZCBpbnNlcnQo
VmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gPiYsIFBhc3NSZWZQdHI8TGF5ZXJXZWJL
aXRUaHJlYWQ+LCBzaXplX3QgaW5kZXgpOwotCi0gICAgR3JhcGhpY3NMYXllckJsYWNrQmVycnkq
IG1fb3duZXI7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+IG1fcnVubmlu
Z0FuaW1hdGlvbnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiBtX3N1c3Bl
bmRlZEFuaW1hdGlvbnM7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+
IG1fc3VibGF5ZXJzOwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+ID4gbV9v
dmVybGF5czsKLSAgICBMYXllcldlYktpdFRocmVhZCogbV9zdXBlcmxheWVyOwotICAgIFJlZlB0
cjxMYXllcldlYktpdFRocmVhZD4gbV9tYXNrTGF5ZXI7Ci0gICAgUmVmUHRyPExheWVyV2ViS2l0
VGhyZWFkPiBtX3JlcGxpY2FMYXllcjsKLQotICAgIFJlZlB0cjxJbWFnZT4gbV9jb250ZW50czsK
LQotICAgIFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiBtX2xheWVyQ29tcG9zaXRpbmdU
aHJlYWQ7Ci0gICAgUmVmUHRyPExheWVyVGlsZXI+IG1fdGlsZXI7Ci0gICAgRmxvYXRTaXplIG1f
YWJzb2x1dGVPZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9pc0RyYXdhYmxlIDogMTsKLSAgICB1bnNp
Z25lZCBtX2lzTWFzayA6IDE7Ci0gICAgdW5zaWduZWQgbV9hbmltYXRpb25zQ2hhbmdlZCA6IDE7
Ci0gICAgdW5zaWduZWQgbV9jbGVhck92ZXJyaWRlT25Db21taXQgOiAxOwotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICB1bnNpZ25lZCBtX2ZpbHRlcnNDaGFuZ2VkIDogMTsKLSNlbmRpZgot
ICAgIHVuc2lnbmVkIG1fZGlkU3RhcnRBbmltYXRpb25zIDogMTsKLX07Ci0KLX0KLQotI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJs
YWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9u
IDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA0
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmgiCi0KLSNpbmNsdWRlICJDb29raWVNYW5hZ2VyLmgi
Ci0jaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJET01GaWxlU3lzdGVt
QmFzZS5oIgotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVBy
aXZhdGUuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybURldmljZUluZm8u
aD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1QcmltaXRpdmVzLmg+Ci0jaW5jbHVkZSA8
QmxhY2tCZXJyeVBsYXRmb3JtU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZv
cm1XZWJGaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5
Lmg+Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiVmlkZW9M
YXllcldlYktpdFRocmVhZC5oIgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMyUHJv
Z3JhbS5oPgotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxUaWxl
ZEltYWdlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgQmxhY2tC
ZXJyeTo6UGxhdGZvcm07Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gU3RhdGljIGNhbGxi
YWNrIGZ1bmN0aW9ucyBmb3IgZmFjdG9yeQotUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2U+IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVBsYXllclByaXZhdGUocGxheWVyKSk7
Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlh
RW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKLXsKLSAgICByZWdpc3RyYXIoY3JlYXRlLCBnZXRT
dXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlLCAwLCAwLCAwKTsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8V1RGOjpTdHJpbmc+JiB0eXBl
cykKLXsKLSAgICBzZXQ8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZz4gc3VwcG9ydGVkID0g
UGxhdGZvcm1QbGF5ZXI6OmFsbFN1cHBvcnRlZE1pbWVUeXBlcygpOwotICAgIHNldDxCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPjo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZC5iZWdpbigpOwot
ICAgIGZvciAoOyBpICE9IHN1cHBvcnRlZC5lbmQoKTsgaSsrKQotICAgICAgICB0eXBlcy5hZGQo
KmkpOwotfQotCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6
c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMpCi17Ci0gICAgYm9vbCBpc1JUU1AgPSBwYXJhbWV0ZXJzLnVybC5wcm90b2NvbElzKCJydHNw
Iik7Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlID0gcGFyYW1ldGVycy50eXBlOwotCi0gICAgaWYg
KCFpc1JUU1AgJiYgKHR5cGUuaXNOdWxsKCkgfHwgdHlwZS5pc0VtcHR5KCkpKSB7Ci0gICAgICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyIGRvZXMgbm90IHN1cHBvcnQgdHlwZTsgdHlwZSBpcyBu
dWxsIG9yIGVtcHR5LiIpOwotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9y
dGVkOwotICAgIH0KLQotICAgIC8vIHNwZWMgc2F5cyB3ZSBzaG91bGQgbm90IHJldHVybiAicHJv
YmFibHkiIGlmIHRoZSBjb2RlY3Mgc3RyaW5nIGlzIGVtcHR5Ci0gICAgaWYgKGlzUlRTUCB8fCBQ
bGF0Zm9ybVBsYXllcjo6bWltZVR5cGVTdXBwb3J0ZWQodHlwZS5hc2NpaSgpLmRhdGEoKSkpIHsK
LSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXIgc3VwcG9ydHMgdHlwZSAlcy4iLCBpc1JU
U1AgPyAicnRzcCIgOiB0eXBlLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHBhcmFt
ZXRlcnMuY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1l
ZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKLSAgICB9Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlICVzLiIsIHR5cGUuYXNjaWkoKS5kYXRhKCkpOwotICAg
IHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpub3RpZnlBcHBBY3RpdmF0ZWRFdmVudChib29sIGFjdGl2YXRlZCkKLXsKLSAg
ICBQbGF0Zm9ybVBsYXllcjo6bm90aWZ5QXBwQWN0aXZhdGVkRXZlbnQoYWN0aXZhdGVkKTsKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldENlcnRpZmljYXRlUGF0aChjb25zdCBXVEY6
OlN0cmluZyYgY2FQYXRoKQotewotICAgIFBsYXRmb3JtUGxheWVyOjpzZXRDZXJ0aWZpY2F0ZVBh
dGgoY2FQYXRoKTsKLX0KLQotTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUo
TWVkaWFQbGF5ZXIqIHBsYXllcikKLSAgICA6IG1fd2ViQ29yZVBsYXllcihwbGF5ZXIpCi0gICAg
LCBtX3BsYXRmb3JtUGxheWVyKDApCi0gICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6
RW1wdHkpCi0gICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQotICAg
ICwgbV9mdWxsc2NyZWVuV2ViUGFnZUNsaWVudCgwKQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICAsIG1fYnVmZmVyaW5nVGltZXIodGhpcywgJk1lZGlhUGxheWVyUHJpdmF0
ZTo6YnVmZmVyaW5nVGltZXJGaXJlZCkKLSAgICAsIG1fc2hvd0J1ZmZlcmluZ0ltYWdlKGZhbHNl
KQotI2VuZGlmCi0gICAgLCBtX3VzZXJEcml2ZW5TZWVrVGltZXIodGhpcywgJk1lZGlhUGxheWVy
UHJpdmF0ZTo6dXNlckRyaXZlblNlZWtUaW1lckZpcmVkKQotICAgICwgbV9sYXN0U2Vla1RpbWUo
MCkKLSAgICAsIG1fbGFzdExvYWRpbmdUaW1lKDApCi0gICAgLCBtX2xhc3RTZWVrVGltZVBlbmRp
bmcoZmFsc2UpCi0gICAgLCBtX2lzQXV0aGVudGljYXRpb25DaGFsbGVuZ2luZyhmYWxzZSkKLSAg
ICAsIG1fd2FpdE1ldGFkYXRhVGltZXIodGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZTo6d2FpdE1l
dGFkYXRhVGltZXJGaXJlZCkKLSAgICAsIG1fd2FpdE1ldGFkYXRhUG9wRGlhbG9nQ291bnRlcigw
KQotewotfQotCi1NZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQotewot
ICAgIGlmIChtX2lzQXV0aGVudGljYXRpb25DaGFsbGVuZ2luZykKLSAgICAgICAgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VNYW5hZ2VyOjppbnN0YW5jZSgpLT5jYW5jZWxBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSh0aGlzKTsKLQotICAgIGlmIChpc0Z1bGxzY3JlZW4oKSkKLSAgICAgICAgbV93ZWJD
b3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckV4aXRGdWxsc2NyZWVu
KCk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIC8vIFJlbW92ZSBtZWRp
YSBwbGF5ZXIgZnJvbSBwbGF0Zm9ybSBsYXllci4KLSAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQot
ICAgICAgICBzdGF0aWNfY2FzdDxWaWRlb0xheWVyV2ViS2l0VGhyZWFkKj4obV9wbGF0Zm9ybUxh
eWVyLmdldCgpKS0+c2V0TWVkaWFQbGF5ZXIoMCk7Ci0jZW5kaWYKLQotICAgIGlmIChtX3BsYXRm
b3JtUGxheWVyKSB7Ci0gICAgICAgIGlmIChtX3BsYXRmb3JtUGxheWVyLT5kaWFsb2dTdGF0ZSgp
ID09IFBsYXRmb3JtUGxheWVyOjpEaWFsb2dTaG93bikgewotICAgICAgICAgICAgbV9wbGF0Zm9y
bVBsYXllci0+c2V0RGlhbG9nU3RhdGUoUGxhdGZvcm1QbGF5ZXI6Ok1lZGlhUGxheWVyUHJpdmF0
ZURlc3Ryb3llZCk7Ci0gICAgICAgICAgICBtX3BsYXRmb3JtUGxheWVyLT5zdG9wKCk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgZGVsZXRlR3VhcmRlZE9iamVjdChtX3BsYXRmb3JtUGxh
eWVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFdU
Rjo6U3RyaW5nJiB1cmwpCi17Ci0gICAgV1RGOjpTdHJpbmcgbW9kaWZpZWRVcmwodXJsKTsKLQot
ICAgIGlmIChtb2RpZmllZFVybC5zdGFydHNXaXRoKCJsb2NhbDovLyIpKSB7Ci0gICAgICAgIFVS
TCBrdXJsID0gVVJMKFVSTCgpLCBtb2RpZmllZFVybCk7Ci0gICAgICAgIGt1cmwuc2V0UHJvdG9j
b2woImZpbGUiKTsKLSAgICAgICAgV1RGOjpTdHJpbmcgdGVtcFBhdGgoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5hcHBsaWNhdGlvbkxvY2FsRGlyZWN0b3J5KCku
Y19zdHIoKSk7Ci0gICAgICAgIHRlbXBQYXRoLmFwcGVuZChrdXJsLnBhdGgoKSk7Ci0gICAgICAg
IGt1cmwuc2V0UGF0aCh0ZW1wUGF0aCk7Ci0gICAgICAgIG1vZGlmaWVkVXJsID0ga3VybC5zdHJp
bmcoKTsKLSAgICB9Ci0gICAgLy8gZmlsZXN5c3RlbTogVVJMcyByZWZlciB0byBlbnRpdGllcyBp
biB0aGUgV2ViIEZpbGUgU3lzdGVtIChXRlMpIGFuZCBhcmUKLSAgICAvLyBpbnRlbmRlZCB0byBi
ZSB1c2VhYmxlIGJ5IEhUTUwgNSBtZWRpYSBlbGVtZW50cyBkaXJlY3RseS4gVW5mb3J0dW5hdGVs
eQotICAgIC8vIHRoZSBsb2FkZXIgZm9yIG91ciBtZWRpYSBwbGF5ZXIgaXMgaW1wbGVtZW50ZWQg
aW4gYSBzZXBhcmF0ZSBwcm9jZXNzIGFuZAotICAgIC8vIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRv
IFdGUywgc28gd2UgdHJhbnNsYXRlIHRvIGEgZmlsZTovLyBVUkwuIE5vcm1hbGx5Ci0gICAgLy8g
dGhpcyB3b3VsZCBiZSBhIHNlY3VyaXR5IHZpb2xhdGlvbiwgYnV0IHNpbmNlIHRoZSBNZWRpYUVs
ZW1lbnQgaGFzCi0gICAgLy8gYWxyZWFkeSBkb25lIGEgc2VjdXJpdHkgY2hlY2sgb24gdGhlIGZp
bGVzeXN0ZW06IFVSTCBhcyBwYXJ0IG9mIHRoZQotICAgIC8vIG1lZGlhIHJlc291cmNlIHNlbGVj
dGlvbiBhbGdvcml0aG0sIHdlIHNob3VsZCBiZSBPSyBoZXJlLgotICAgIGlmIChtb2RpZmllZFVy
bC5zdGFydHNXaXRoKCJmaWxlc3lzdGVtOiIpKSB7Ci0gICAgICAgIFVSTCBrdXJsID0gVVJMKFVS
TCgpLCBtb2RpZmllZFVybCk7Ci0gICAgICAgIFVSTCBtZWRpYVVSTDsKLSAgICAgICAgV1RGOjpT
dHJpbmcgZnNQYXRoOwotICAgICAgICBGaWxlU3lzdGVtVHlwZSBmc1R5cGU7Ci0gICAgICAgIFdl
YkZpbGVTeXN0ZW06OlR5cGUgdHlwZTsKLQotICAgICAgICAvLyBFeHRyYWN0IHRoZSByb290IGFu
ZCBmaWxlIHBhdGhzIGZyb20gV0ZTCi0gICAgICAgIERPTUZpbGVTeXN0ZW1CYXNlOjpjcmFja0Zp
bGVTeXN0ZW1VUkwoa3VybCwgZnNUeXBlLCBmc1BhdGgpOwotICAgICAgICBpZiAoZnNUeXBlID09
IEZpbGVTeXN0ZW1UeXBlVGVtcG9yYXJ5KQotICAgICAgICAgICAgdHlwZSA9IFdlYkZpbGVTeXN0
ZW06OlRlbXBvcmFyeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHlwZSA9IFdlYkZpbGVT
eXN0ZW06OlBlcnNpc3RlbnQ7Ci0gICAgICAgIFdURjo6U3RyaW5nIGZzUm9vdCA9IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpXZWJGaWxlU3lzdGVtOjpyb290UGF0aEZvcldlYkZpbGVTeXN0ZW0odHlw
ZSk7Ci0KLSAgICAgICAgLy8gQnVpbGQgYSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U2VjdXJpdHlP
cmlnaW4gZnJvbSB0aGUgZG9jdW1lbnQncyAKLSAgICAgICAgLy8gV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4gYW5kIHNlcmlhbGl6ZSBpdCB0byBidWlsZCB0aGUgbGFzdAotICAgICAgICAvLyBwYXRo
IGNvbXBvbmVudAotICAgICAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogd2tPcmlnaW4gPSBt
X3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyT3duaW5nRG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OlNlY3VyaXR5T3JpZ2luIGJiT3JpZ2luKHdrT3JpZ2luLT5wcm90b2NvbCgpLCB3a09yaWdpbi0+
aG9zdCgpLCB3a09yaWdpbi0+cG9ydCgpKTsKLSAgICAgICAgV1RGOjpTdHJpbmcgc2VjT3JpZ2lu
KGJiT3JpZ2luLnNlcmlhbGl6ZSgnXycpKTsKLQotICAgICAgICAvLyBCdWlsZCBhIGZpbGU6Ly8g
VVJMIGZyb20gdGhlIHBhdGggY29tcG9uZW50cyBhbmQgZXh0cmFjdCBpdCB0byAKLSAgICAgICAg
Ly8gYSBzdHJpbmcgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZwotICAgICAgICBtZWRpYVVSTC5zZXRQ
cm90b2NvbCgiZmlsZSIpOwotICAgICAgICBtZWRpYVVSTC5zZXRQYXRoKGZzUm9vdCArICIvIiAr
IHNlY09yaWdpbiArICIvIiArIGZzUGF0aCk7Ci0gICAgICAgIG1vZGlmaWVkVXJsID0gbWVkaWFV
Ukwuc3RyaW5nKCk7Ci0gICAgfSBlbHNlIGlmIChtb2RpZmllZFVybC5zdGFydHNXaXRoKCJmaWxl
Oi8vIikgfHwgbW9kaWZpZWRVcmwuc3RhcnRzV2l0aCgiZGF0YToiKSkgewotICAgICAgICAvLyBU
aGUgUU5YIE11bHRpbWVkaWEgRnJhbWV3b3JrIGNhbm5vdCBoYW5kbGUgZmlsZW5hbWVzIG9yIGRh
dGEgY29udGFpbmluZyBVUkwgZXNjYXBlIHNlcXVlbmNlcy4KLSAgICAgICAgbW9kaWZpZWRVcmwg
PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMobW9kaWZpZWRVcmwpOwotICAgIH0KLQotICAgIHZv
aWQqIHRhYklkID0gbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBs
YXllckhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgaW50IHBsYXllcklE
ID0gbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckhvc3RX
aW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnBsYXllcklEKCk7Ci0gICAgYm9vbCBpc1Zp
ZGVvID0gbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllcklz
VmlkZW8oKTsKLQotICAgIGRlbGV0ZUd1YXJkZWRPYmplY3QobV9wbGF0Zm9ybVBsYXllcik7Ci0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIG1fcGxhdGZvcm1QbGF5ZXIgPSBQ
bGF0Zm9ybVBsYXllcjo6Y3JlYXRlKHRoaXMsIHRhYklkLCBpc1ZpZGVvLCB0cnVlLCBtb2RpZmll
ZFVybCk7Ci0jZWxzZQotICAgIG1fcGxhdGZvcm1QbGF5ZXIgPSBQbGF0Zm9ybVBsYXllcjo6Y3Jl
YXRlKHRoaXMsIHRhYklkLCBpc1ZpZGVvLCBmYWxzZSwgbW9kaWZpZWRVcmwpOwotI2VuZGlmCi0K
LSAgICBXVEY6OlN0cmluZyBjb29raWVQYWlyczsKLSAgICBpZiAoIXVybC5pc0VtcHR5KCkpCi0g
ICAgICAgIGNvb2tpZVBhaXJzID0gY29va2llTWFuYWdlcigpLmdldENvb2tpZShVUkwoUGFyc2Vk
VVJMU3RyaW5nLCB1cmwpLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKLSAgICBtX3BsYXRmb3JtUGxh
eWVyLT5sb2FkKHBsYXllcklELCBtb2RpZmllZFVybCwgbV93ZWJDb3JlUGxheWVyLT51c2VyQWdl
bnQoKSwgY29va2llUGFpcnMpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2Vs
TG9hZCgpCi17Ci0gICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIG1fcGxhdGZvcm1Q
bGF5ZXItPmNhbmNlbExvYWQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnByZXBh
cmVUb1BsYXkoKQotewotICAgIGlmIChtX3BsYXRmb3JtUGxheWVyKQotICAgICAgICBtX3BsYXRm
b3JtUGxheWVyLT5wcmVwYXJlVG9QbGF5KCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpwbGF5KCkKLXsKLSAgICBpZiAobV9wbGF0Zm9ybVBsYXllcikKLSAgICAgICAgbV9wbGF0Zm9y
bVBsYXllci0+cGxheSgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2UoKQot
ewotICAgIGlmIChtX3BsYXRmb3JtUGxheWVyKQotICAgICAgICBtX3BsYXRmb3JtUGxheWVyLT5w
YXVzZSgpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNGdWxsc2NyZWVu
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzVmlkZW8oKTsKLX0KLQotSW50U2l6ZSBNZWRpYVBs
YXllclByaXZhdGU6Om5hdHVyYWxTaXplKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1Q
bGF5ZXIpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICAvLyBDYW5ub3QgcmV0dXJu
IGVtcHR5IHNpemUsIG90aGVyd2lzZSBwYWludCgpIHdpbGwgbmV2ZXIgZ2V0IGNhbGxlZC4KLSAg
ICAvLyBBbHNvLCB0aGUgdmFsdWVzIGhlcmUgd2lsbCBhZmZlY3QgdGhlIGFzcGVjdCByYXRpbyBv
ZiB0aGUgb3V0cHV0IHJlY3RhbmdsZSB0aGF0IHdpbGwKLSAgICAvLyBiZSB1c2VkIGZvciByZW5k
ZXJlcmluZyB0aGUgdmlkZW8sIHNvIHdlIG11c3QgdGFrZSBQQVIgaW50byBhY2NvdW50LgotICAg
IC8vIE5vdywgaG9wZSB0aGF0IG1ldGFkYXRhIGhhcyBiZWVuIHByb3ZpZGVkIGJlZm9yZSB0aGlz
IGdldHMgY2FsbGVkIGlmIHRoaXMgaXMgYSB2aWRlby4KLSAgICBkb3VibGUgcGl4ZWxXaWR0aCA9
IHN0YXRpY19jYXN0PGRvdWJsZT4obV9wbGF0Zm9ybVBsYXllci0+cGl4ZWxXaWR0aCgpKTsKLSAg
ICBkb3VibGUgcGl4ZWxIZWlnaHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fcGxhdGZvcm1QbGF5
ZXItPnBpeGVsSGVpZ2h0KCkpOwotICAgIGlmICghbV9wbGF0Zm9ybVBsYXllci0+cGl4ZWxXaWR0
aCgpIHx8ICFtX3BsYXRmb3JtUGxheWVyLT5waXhlbEhlaWdodCgpKQotICAgICAgICBwaXhlbFdp
ZHRoID0gcGl4ZWxIZWlnaHQgPSAxLjA7Ci0KLSAgICAvLyBVc2UgZmxvYXRpbmcgcG9pbnQgYXJp
dGhtZXRpYyB0byBlbGltaW5hdGUgdGhlIGNoYW5jZSBvZiBpbnRlZ2VyCi0gICAgLy8gb3ZlcmZs
b3cuIFBBUiBudW1iZXJzIGNhbiBiZSA1IGRpZ2l0cyBvciBtb3JlLgotICAgIGRvdWJsZSBhZGp1
c3RlZFNvdXJjZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3BsYXRmb3JtUGxheWVyLT5z
b3VyY2VXaWR0aCgpKSAqIHBpeGVsV2lkdGggLyBwaXhlbEhlaWdodDsKLSAgICByZXR1cm4gSW50
U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkU291cmNlV2lkdGggKyAwLjUpLCBtX3BsYXRm
b3JtUGxheWVyLT5zb3VyY2VIZWlnaHQoKSk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
OjpoYXNWaWRlbygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAg
IHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5oYXNWaWRlbygpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F1ZGlvKCkgY29uc3QKLXsKLSAgICBp
ZiAobV9wbGF0Zm9ybVBsYXllcikKLSAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1QbGF5ZXItPmhh
c0F1ZGlvKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6c2V0VmlzaWJsZShib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWZsb2F0
IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIGlmIChtX3BsYXRm
b3JtUGxheWVyKQotICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+ZHVyYXRpb24oKTsK
LSAgICByZXR1cm4gMC4wZjsKLX0KLQotc3RhdGljIGNvbnN0IGRvdWJsZSBTZWVrU3VibWlzc2lv
bkRlbGF5ID0gMC4xOyAvLyBSZWFzb25hYmxlIHRocm90dGxpbmcgdmFsdWUuCi1zdGF0aWMgY29u
c3QgZG91YmxlIFNob3J0TWVkaWFUaHJlc2hvbGQgPSBTZWVrU3VibWlzc2lvbkRlbGF5ICogMi4w
OwotCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIHJldHVybiAwLjBmOwotCi0gICAgLy8g
Rm9yIHZlcnkgc2hvcnQgbWVkaWEgb24gdGhlIG9yZGVyIG9mIFNlZWtTdWJtaXNzaW9uRGVsYXkg
d2UgZ2V0Ci0gICAgLy8gdW53YW50ZWQgcmVwZWF0cyBpZiB3ZSBkb24ndCByZXR1cm4gdGhlIG1v
c3QgdXAtdG8tZGF0ZSBjdXJyZW50VGltZSgpLgotICAgIGJvb2wgc2hvcnRNZWRpYSA9IG1fcGxh
dGZvcm1QbGF5ZXItPmR1cmF0aW9uKCkgPCBTaG9ydE1lZGlhVGhyZXNob2xkOwotICAgIHJldHVy
biBtX3VzZXJEcml2ZW5TZWVrVGltZXIuaXNBY3RpdmUoKSAmJiAhc2hvcnRNZWRpYSA/IG1fbGFz
dFNlZWtUaW1lOiBtX3BsYXRmb3JtUGxheWVyLT5jdXJyZW50VGltZSgpOwotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCB0aW1lKQotewotICAgIGlmICghbV9wbGF0Zm9y
bVBsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXN0U2Vla1RpbWUgPSB0aW1lOwot
ICAgIG1fbGFzdFNlZWtUaW1lUGVuZGluZyA9IHRydWU7Ci0gICAgaWYgKCFtX3VzZXJEcml2ZW5T
ZWVrVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgdXNlckRyaXZlblNlZWtUaW1lckZpcmVkKDAp
OwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXNlckRyaXZlblNlZWtUaW1lckZpcmVk
KFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKQotewotICAgIGlmIChtX2xhc3RTZWVrVGltZVBl
bmRpbmcpIHsKLSAgICAgICAgbV9wbGF0Zm9ybVBsYXllci0+c2VlayhtX2xhc3RTZWVrVGltZSk7
Ci0gICAgICAgIG1fbGFzdFNlZWtUaW1lUGVuZGluZyA9IGZhbHNlOwotICAgICAgICBtX3VzZXJE
cml2ZW5TZWVrVGltZXIuc3RhcnRPbmVTaG90KFNlZWtTdWJtaXNzaW9uRGVsYXkpOwotICAgIH0K
LX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmcoKSBjb25zdAotewotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUoZmxvYXQg
cmF0ZSkKLXsKLSAgICBpZiAobV9wbGF0Zm9ybVBsYXllcikKLSAgICAgICAgbV9wbGF0Zm9ybVBs
YXllci0+c2V0UmF0ZShyYXRlKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNl
ZCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIHJldHVybiBt
X3BsYXRmb3JtUGxheWVyLT5wYXVzZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQotewotICAgIGlmICht
X3BsYXRmb3JtUGxheWVyKQotICAgICAgICBtX3BsYXRmb3JtUGxheWVyLT5zZXRWb2x1bWUodm9s
dW1lKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldE11dGVkKGJvb2wgbXV0ZWQp
Ci17Ci0gICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIG1fcGxhdGZvcm1QbGF5ZXIt
PnNldE11dGVkKG11dGVkKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Om11dGVkKCkg
Y29uc3QKLXsKLSAgICBpZiAobV9wbGF0Zm9ybVBsYXllcikKLSAgICAgICAgcmV0dXJuIG1fcGxh
dGZvcm1QbGF5ZXItPm11dGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1NZWRpYVBsYXll
cjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7Ci19Ci0KLU1lZGlhUGxheWVyOjpSZWFkeVN0
YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVhZHlTdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcmVhZHlTdGF0ZTsKLX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vl
a2FibGUoKSBjb25zdAotewotICAgIGlmIChtX3BsYXRmb3JtUGxheWVyKQotICAgICAgICByZXR1
cm4gbV9wbGF0Zm9ybVBsYXllci0+bWF4VGltZVNlZWthYmxlKCk7Ci0gICAgcmV0dXJuIDAuMGY7
Ci19Ci0KLVBhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJl
ZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsYXRmb3JtUGxheWVyKQotICAgICAgICByZXR1cm4g
VGltZVJhbmdlczo6Y3JlYXRlKCk7Ci0KLSAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdl
cyA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwotICAgIGlmIChmbG9hdCBidWZmZXJMb2FkZWQgPSBt
X3BsYXRmb3JtUGxheWVyLT5idWZmZXJMb2FkZWQoKSkKLSAgICAgICAgdGltZVJhbmdlcy0+YWRk
KDAsIGJ1ZmZlckxvYWRlZCk7Ci0gICAgcmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOwotfQot
Ci1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGZsb2F0IGJ1ZmZlckxvYWRlZCA9IG1fcGxhdGZvcm1QbGF5ZXItPmJ1ZmZlckxvYWRlZCgpOwot
ICAgIGlmIChidWZmZXJMb2FkZWQgPT0gbV9sYXN0TG9hZGluZ1RpbWUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fbGFzdExvYWRpbmdUaW1lID0gYnVmZmVyTG9hZGVkOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0U2l6ZShjb25zdCBJ
bnRTaXplJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmICghbV9wbGF0Zm9ybVBsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChzdXBwb3J0c0FjY2VsZXJh
dGVkUmVuZGVyaW5nKCkpIHsKLSAgICAgICAgLy8gT25seSBwcm9jZXNzIHBhaW50IGNhbGxzIGNv
bWluZyB2aWEgdGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGNvZGUKLSAgICAgICAgLy8gcGF0
aCwgd2hlcmUgd2UgZ2V0IGNhbGxlZCB3aXRoIGEgbnVsbCBncmFwaGljcyBjb250ZXh0LiBTZWUK
LSAgICAgICAgLy8gTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKCkuIElnbm9y
ZSBjYWxscyBmcm9tIHRoZSByZWd1bGFyCi0gICAgICAgIC8vIHJlbmRlcmluZyBwYXRoLgotICAg
ICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgICAgICBtX3BsYXRmb3JtUGxheWVyLT5ub3RpZnlP
dXRwdXRVcGRhdGUoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3QocmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLQotICAgICAgICByZXR1cm47Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICBwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChjb250ZXh0LCBy
ZWN0KTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50Q3VycmVudEZyYW1lSW5D
b250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBpZiAoIWhhc1ZpZGVvKCkgfHwgY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFt
X3dlYkNvcmVQbGF5ZXItPnZpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpEcmF3YWJsZSogZHN0ID0gY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCBwbGF0Zm9y
bVJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwot
ICAgIEludFJlY3QgY2xpcHBlZFJlY3QgPSBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xp
ZW50KCktPm1lZGlhUGxheWVyV2luZG93Q2xpcFJlY3QoKTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6SW50UmVjdCBwbGF0Zm9ybVdpbmRvd0NsaXBSZWN0KGNsaXBwZWRSZWN0LngoKSwgY2xp
cHBlZFJlY3QueSgpLCBjbGlwcGVkUmVjdC53aWR0aCgpLCBjbGlwcGVkUmVjdC5oZWlnaHQoKSk7
Ci0gICAgbV9wbGF0Zm9ybVBsYXllci0+cGFpbnQoZHN0LCBwbGF0Zm9ybVJlY3QsIHBsYXRmb3Jt
V2luZG93Q2xpcFJlY3QpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXZhaWxh
YmxlVmlkZW9GcmFtZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAg
ICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5oYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzU2luZ2xl
U2VjdXJpdHlPcmlnaW4oKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1NZWRpYVBs
YXllcjo6TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllTG9hZFR5cGUoKSBj
b25zdAotewotICAgIGlmIChtX3BsYXRmb3JtUGxheWVyKQotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGU+KG1fcGxhdGZvcm1QbGF5ZXItPm1vdmll
TG9hZFR5cGUoKSk7Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyOjpVbmtub3duOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6cHJlcGFyZUZvclJlbmRlcmluZygpCi17Ci0gICAgaWYgKG1f
cGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIG1fcGxhdGZvcm1QbGF5ZXItPnByZXBhcmVGb3JSZW5k
ZXJpbmcoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlc2l6ZVNvdXJjZURpbWVu
c2lvbnMoKQotewotICAgIGlmICghbV93ZWJDb3JlUGxheWVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5
ZXJJc1ZpZGVvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlIGRvbid0IGtub3cg
d2hhdCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgdmlkZW8gc291cmNlIGlzLCB0aGVuIHdl
IG5lZWQgdG8gc2V0IGl0IHRvIHNvbWV0aGluZyBzYW5lLgotICAgIGlmIChtX3BsYXRmb3JtUGxh
eWVyLT5zb3VyY2VXaWR0aCgpICYmIG1fcGxhdGZvcm1QbGF5ZXItPnNvdXJjZUhlaWdodCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX3dlYkNvcmVQbGF5ZXIt
Pm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyQ29udGVudEJveFJlY3QoKTsKLSAgICBt
X3BsYXRmb3JtUGxheWVyLT5zZXRTb3VyY2VEaW1lbnNpb24ocmVjdC53aWR0aCgpLnRvVW5zaWdu
ZWQoKSwgcmVjdC5oZWlnaHQoKS50b1Vuc2lnbmVkKCkpOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6c2V0RnVsbHNjcmVlbldlYlBhZ2VDbGllbnQoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgaWYgKG1fZnVsbHNjcmVlbldlYlBhZ2VDbGll
bnQgPT0gY2xpZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Z1bGxzY3JlZW5XZWJQYWdl
Q2xpZW50ID0gY2xpZW50OwotICAgIG1fcGxhdGZvcm1QbGF5ZXItPnRvZ2dsZUZ1bGxzY3JlZW4o
Y2xpZW50KTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgcmVwYWludCBpcyBuZWVkZWQgZXNwZWNp
YWxseSBpZiB2aWRlbyBpcyBwYXVzZWQgYW5kCi0gICAgLy8gZnVsbHNjcmVlbiBpcyBleGl0aW5n
LCBzbyB0aGF0IGEgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludCgpIGlzCi0gICAgLy8gdHJpZ2dl
cmVkIGFuZCB0aGUgY29kZSBpbiBvdXRwdXRVcGRhdGUoKSBzZXRzIHRoZSBjb3JyZWN0IHdpbmRv
dwotICAgIC8vIHJlY3RhbmdsZS4KLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgbV93ZWJDb3Jl
UGxheWVyLT5yZXBhaW50KCk7Ci19Ci0KLUJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
V2luZG93KiBNZWRpYVBsYXllclByaXZhdGU6OmdldFdpbmRvdygpCi17Ci0gICAgcmV0dXJuIG1f
cGxhdGZvcm1QbGF5ZXItPmdldFdpbmRvdygpOwotfQotCi1CbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OldpbmRvdyogTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRQZWVyV2luZG93KGNvbnN0
IGNoYXIqIHVuaXF1ZUlEKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5n
ZXRQZWVyV2luZG93KHVuaXF1ZUlEKTsKLX0KLQotQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJl
Y3QgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRXaW5kb3dTY3JlZW5SZWN0KCkgY29uc3QKLXsKLSAg
ICB1bnNpZ25lZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OwotICAgIG1fcGxhdGZvcm1QbGF5ZXItPmdl
dFdpbmRvd1Bvc2l0aW9uKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIHJldHVybiBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotY29uc3Qg
Y2hhciogTWVkaWFQbGF5ZXJQcml2YXRlOjptbXJDb250ZXh0TmFtZSgpCi17Ci0gICAgcmV0dXJu
IG1fcGxhdGZvcm1QbGF5ZXItPm1tckNvbnRleHROYW1lKCk7Ci19Ci0KLWZsb2F0IE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cGVyY2VudExvYWRlZCgpCi17Ci0gICAgaWYgKCFtX3BsYXRmb3JtUGxheWVy
LT5kdXJhdGlvbigpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IGJ1ZmZlcmVkID0g
MDsKLSAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IHRoaXMtPmJ1ZmZlcmVkKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uOwotICAgICAgICBmbG9h
dCBzdGFydCA9IHRpbWVSYW5nZXMtPnN0YXJ0KGksIGlnbm9yZWRFeGNlcHRpb24pOwotICAgICAg
ICBmbG9hdCBlbmQgPSB0aW1lUmFuZ2VzLT5lbmQoaSwgaWdub3JlZEV4Y2VwdGlvbik7Ci0gICAg
ICAgIGJ1ZmZlcmVkICs9IGVuZCAtIHN0YXJ0OwotICAgIH0KLQotICAgIGZsb2F0IGxvYWRlZCA9
IGJ1ZmZlcmVkIC8gbV9wbGF0Zm9ybVBsYXllci0+ZHVyYXRpb24oKTsKLSAgICByZXR1cm4gbG9h
ZGVkOwotfQotCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OnNvdXJjZVdpZHRoKCkKLXsK
LSAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+c291cmNlV2lkdGgoKTsKLX0KLQotdW5zaWdu
ZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzb3VyY2VIZWlnaHQoKQotewotICAgIHJldHVybiBtX3Bs
YXRmb3JtUGxheWVyLT5zb3VyY2VIZWlnaHQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldEFsbG93UFBTVm9sdW1lVXBkYXRlcyhib29sIGFsbG93KQotewotICAgIGlmIChtX3Bs
YXRmb3JtUGxheWVyKQotICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+c2V0QWxsb3dQ
UFNWb2x1bWVVcGRhdGVzKGFsbG93KTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnVw
ZGF0ZVN0YXRlcygpCi17Ci0gICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3Jr
U3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKLSAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRS
ZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOwotCi0gICAgUGxhdGZvcm1QbGF5ZXI6OkVycm9yIGN1
cnJlbnRFcnJvciA9IG1fcGxhdGZvcm1QbGF5ZXItPmVycm9yKCk7Ci0KLSAgICBpZiAoY3VycmVu
dEVycm9yICE9IFBsYXRmb3JtUGxheWVyOjpNZWRpYU9LKSB7Ci0gICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKLSAgICAgICAgaWYgKGN1cnJlbnRFcnJvciA9
PSBQbGF0Zm9ybVBsYXllcjo6TWVkaWFEZWNvZGVFcnJvcikKLSAgICAgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OkRlY29kZUVycm9yOwotICAgICAgICBlbHNlIGlmIChjdXJy
ZW50RXJyb3IgPT0gUGxhdGZvcm1QbGF5ZXI6Ok1lZGlhTWV0YURhdGFFcnJvcgotICAgICAgICAg
ICAgfHwgY3VycmVudEVycm9yID09IFBsYXRmb3JtUGxheWVyOjpNZWRpYUF1ZGlvUmVjZWl2ZUVy
cm9yCi0gICAgICAgICAgICB8fCBjdXJyZW50RXJyb3IgPT0gUGxhdGZvcm1QbGF5ZXI6Ok1lZGlh
VmlkZW9SZWNlaXZlRXJyb3IpCi0gICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpOZXR3b3JrRXJyb3I7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoIChtX3BsYXRm
b3JtUGxheWVyLT5tZWRpYVN0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVBsYXllcjo6
TU1SUGxheVN0YXRlSWRsZToKLSAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6OklkbGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVBsYXll
cjo6TU1SUGxheVN0YXRlUGxheWluZzoKLSAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVk
aWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQbGF0
Zm9ybVBsYXllcjo6TU1SUGxheVN0YXRlU3RvcHBlZDoKLSAgICAgICAgICAgIG1fbmV0d29ya1N0
YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBQbGF0Zm9ybVBsYXllcjo6TU1SUGxheVN0YXRlVW5rbm93bjoKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChtX3BsYXRm
b3JtUGxheWVyLT5zdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1QbGF5ZXI6Ok1QX1NU
QVRFX0lETEU6Ci0gICAgICAgICAgICBpZiAoaXNGdWxsc2NyZWVuKCkpCi0gICAgICAgICAgICAg
ICAgbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckV4aXRG
dWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVBs
YXllcjo6TVBfU1RBVEVfQUNUSVZFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UGxhdGZvcm1QbGF5ZXI6Ok1QX1NUQVRFX1VOU1VQUE9SVEVEOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoKGR1cmF0aW9uKCkgfHwgbW92aWVMb2FkVHlwZSgpID09IE1lZGlhUGxheWVyOjpMaXZl
U3RyZWFtKQotICAgICAgICAgICAgJiYgbV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZl
RW5vdWdoRGF0YSkKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
RW5vdWdoRGF0YTsKLSAgICB9Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3Rh
dGUpCi0gICAgICAgIG1fd2ViQ29yZVBsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLSAgICBp
ZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0YXRlKQotICAgICAgICBtX3dlYkNvcmVQ
bGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLX0KLQotLy8gSVBsYXRmb3JtUGxheWVyTGlz
dGVuZXIgY2FsbGJhY2tzIGltcGxlbWVudGF0aW9uCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
b25TdGF0ZUNoYW5nZWQoUGxhdGZvcm1QbGF5ZXI6Ok1wU3RhdGUpCi17Ci0gICAgdXBkYXRlU3Rh
dGVzKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvbk1lZGlhU3RhdHVzQ2hhbmdl
ZChQbGF0Zm9ybVBsYXllcjo6TU1SUGxheVN0YXRlKQotewotICAgIHVwZGF0ZVN0YXRlcygpOwot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25FcnJvcihQbGF0Zm9ybVBsYXllcjo6RXJy
b3IpCi17Ci0gICAgdXBkYXRlU3RhdGVzKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpvbkR1cmF0aW9uQ2hhbmdlZChmbG9hdCkKLXsKLSAgICB1cGRhdGVTdGF0ZXMoKTsKLSAgICBt
X3dlYkNvcmVQbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6b25UaW1lQ2hhbmdlZChmbG9hdCkKLXsKLSAgICBtX3dlYkNvcmVQbGF5ZXItPnRp
bWVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvblBhdXNlU3RhdGVD
aGFuZ2VkKCkKLXsKLSAgICBpZiAoIWlzRnVsbHNjcmVlbigpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBQYXVzZWQgc3RhdGUgY2hhbmdlIG5vdCBkdWUgdG8gbG9jYWwgY29udHJvbGxlci4K
LSAgICBpZiAobV9wbGF0Zm9ybVBsYXllci0+aXNQYXVzZWQoKSkKLSAgICAgICAgbV93ZWJDb3Jl
UGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllclBhdXNlKCk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIC8vIFRoZSBITUkgZnVsbHNjcmVlbiB3aWRnZXQgaGFzIHJlc3VtZWQgcGxh
eS4gQ2hlY2sgaWYgdGhlCi0gICAgICAgIC8vIHBhdXNlIHRpbWVvdXQgb2NjdXJyZWQuCi0gICAg
ICAgIG1fcGxhdGZvcm1QbGF5ZXItPnByb2Nlc3NQYXVzZVRpbWVvdXRJZk5lY2Vzc2FyeSgpOwot
ICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVy
UGxheSgpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uUmF0ZUNoYW5n
ZWQoZmxvYXQpCi17Ci0gICAgbV93ZWJDb3JlUGxheWVyLT5yYXRlQ2hhbmdlZCgpOwotfQotCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25Wb2x1bWVDaGFuZ2VkKGZsb2F0IHZvbHVtZSkKLXsK
LSAgICBtX3dlYkNvcmVQbGF5ZXItPnZvbHVtZUNoYW5nZWQodm9sdW1lKTsKLX0KLQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6Om9uUmVwYWludCgpCi17Ci0gICAgbV93ZWJDb3JlUGxheWVyLT5y
ZXBhaW50KCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvblNpemVDaGFuZ2VkKCkK
LXsKLSAgICByZXNpemVTb3VyY2VEaW1lbnNpb25zKCk7Ci0gICAgaWYgKGhhc1ZpZGVvKCkpCi0g
ICAgICAgIG1fd2ViQ29yZVBsYXllci0+c2l6ZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6Om9uUGxheU5vdGlmaWVkKCkKLXsKLSAgICBtX3dlYkNvcmVQbGF5ZXItPm1l
ZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyUGxheSgpOwotfQotCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6b25QYXVzZU5vdGlmaWVkKCkKLXsKLSAgICBtX3dlYkNvcmVQbGF5ZXItPm1l
ZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyUGF1c2UoKTsKLX0KLQotc3RhdGljIGNvbnN0
IGludCBwb3B1cERpYWxvZ0ludGVydmFsID0gMTA7Ci1zdGF0aWMgY29uc3QgZG91YmxlIGNoZWNr
TWV0YWRhdGFSZWFkeUludGVydmFsID0gMC41Owotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9u
V2FpdE1ldGFkYXRhTm90aWZpZWQoYm9vbCBoYXNGaW5pc2hlZCwgaW50IHRpbWVXYWl0ZWQpCi17
Ci0gICAgaWYgKCFoYXNGaW5pc2hlZCkgewotICAgICAgICBpZiAoIW1fd2FpdE1ldGFkYXRhVGlt
ZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHBvcHVwIGRpYWxv
ZyBldmVyeSAxMCBzZWNvbmRzIGFmdGVyIG1ldGFkYXRhIHN0YXJ0IHRvIGxvYWQuCi0gICAgICAg
ICAgICAvLyBUaGlzIHNob3VsZCBiZSBzZXQgb25seSBvbmNlIGF0IHRoZSBmaXJzdCB0aW1lIHdo
ZW4gdXNlciBwcmVzcyB0aGUgcGxheSBidXR0b24uCi0gICAgICAgICAgICBtX3dhaXRNZXRhZGF0
YVBvcERpYWxvZ0NvdW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHRpbWVXYWl0ZWQgLyBjaGVja01l
dGFkYXRhUmVhZHlJbnRlcnZhbCk7Ci0gICAgICAgICAgICBtX3dhaXRNZXRhZGF0YVRpbWVyLnN0
YXJ0T25lU2hvdChjaGVja01ldGFkYXRhUmVhZHlJbnRlcnZhbCk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKG1fd2FpdE1ldGFkYXRhVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBtX3dh
aXRNZXRhZGF0YVRpbWVyLnN0b3AoKTsKLSAgICAgICAgbV93YWl0TWV0YWRhdGFQb3BEaWFsb2dD
b3VudGVyID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp3YWl0TWV0
YWRhdGFUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKQotewotICAgIGlmICht
X3BsYXRmb3JtUGxheWVyLT5pc01ldGFkYXRhUmVhZHkoKSkgewotICAgICAgICBtX3dhaXRNZXRh
ZGF0YVBvcERpYWxvZ0NvdW50ZXIgPSAwOwotICAgICAgICBtX3BsYXRmb3JtUGxheWVyLT5wbGF5
V2l0aE1ldGFkYXRhUmVhZHkoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0YXRp
YyBjb25zdCBpbnQgaGl0VGltZVRvUG9wdXBEaWFsb2cgPSBzdGF0aWNfY2FzdDxpbnQ+KHBvcHVw
RGlhbG9nSW50ZXJ2YWwgLyBjaGVja01ldGFkYXRhUmVhZHlJbnRlcnZhbCk7Ci0gICAgbV93YWl0
TWV0YWRhdGFQb3BEaWFsb2dDb3VudGVyKys7Ci0gICAgaWYgKG1fd2FpdE1ldGFkYXRhUG9wRGlh
bG9nQ291bnRlciA8IGhpdFRpbWVUb1BvcHVwRGlhbG9nKSB7Ci0gICAgICAgIG1fd2FpdE1ldGFk
YXRhVGltZXIuc3RhcnRPbmVTaG90KGNoZWNrTWV0YWRhdGFSZWFkeUludGVydmFsKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3dhaXRNZXRhZGF0YVBvcERpYWxvZ0NvdW50ZXIgPSAw
OwotCi0gICAgUGxhdGZvcm1QbGF5ZXI6OkRpYWxvZ1Jlc3VsdCB3YWl0ID0gbV9wbGF0Zm9ybVBs
YXllci0+c2hvd0Vycm9yRGlhbG9nKFBsYXRmb3JtUGxheWVyOjpNZWRpYU1ldGFEYXRhVGltZW91
dEVycm9yKTsKLSAgICBpZiAod2FpdCA9PSBQbGF0Zm9ybVBsYXllcjo6RGlhbG9nRW1lcmdlbmN5
RXhpdCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh3YWl0ID09IFBsYXRmb3JtUGxheWVyOjpE
aWFsb2dSZXNwb25zZTApCi0gICAgICAgIG9uUGF1c2VOb3RpZmllZCgpOwotICAgIGVsc2Ugewot
ICAgICAgICBpZiAobV9wbGF0Zm9ybVBsYXllci0+aXNNZXRhZGF0YVJlYWR5KCkpCi0gICAgICAg
ICAgICBtX3BsYXRmb3JtUGxheWVyLT5wbGF5V2l0aE1ldGFkYXRhUmVhZHkoKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV93YWl0TWV0YWRhdGFUaW1lci5zdGFydE9uZVNob3QoY2hlY2tN
ZXRhZGF0YVJlYWR5SW50ZXJ2YWwpOwotICAgIH0KLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvbkJ1ZmZlcmluZyhib29sIGZs
YWcpCi17Ci0gICAgc2V0QnVmZmVyaW5nKGZsYWcpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBQcm90
ZWN0aW9uU3BhY2UgZ2VuZXJhdGVQcm90ZWN0aW9uU3BhY2VGcm9tTU1SQXV0aENoYWxsZW5nZShj
b25zdCBNTVJBdXRoQ2hhbGxlbmdlJiBhdXRoQ2hhbGxlbmdlKQotewotICAgIFVSTCB1cmwoUGFy
c2VkVVJMU3RyaW5nLCBXVEY6OlN0cmluZyhhdXRoQ2hhbGxlbmdlLnVybCgpLmNfc3RyKCkpKTsK
LSAgICBBU1NFUlQodXJsLmlzVmFsaWQoKSk7Ci0KLSAgICByZXR1cm4gUHJvdGVjdGlvblNwYWNl
KHVybC5ob3N0KCksIHVybC5wb3J0KCksCi0gICAgICAgIHN0YXRpY19jYXN0PFByb3RlY3Rpb25T
cGFjZVNlcnZlclR5cGU+KGF1dGhDaGFsbGVuZ2Uuc2VydmVyVHlwZSgpKSwKLSAgICAgICAgYXV0
aENoYWxsZW5nZS5yZWFsbSgpLmNfc3RyKCksCi0gICAgICAgIHN0YXRpY19jYXN0PFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lPihhdXRoQ2hhbGxlbmdlLmF1dGhTY2hlbWUoKSkp
OwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25BdXRoZW50aWNhdGlvbk5lZWRlZChN
TVJBdXRoQ2hhbGxlbmdlJiBhdXRoQ2hhbGxlbmdlKQotewotICAgIFVSTCB1cmwoUGFyc2VkVVJM
U3RyaW5nLCBXVEY6OlN0cmluZyhhdXRoQ2hhbGxlbmdlLnVybCgpLmNfc3RyKCkpKTsKLSAgICBp
ZiAoIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFByb3RlY3Rpb25TcGFj
ZSBwcm90ZWN0aW9uU3BhY2UgPSBnZW5lcmF0ZVByb3RlY3Rpb25TcGFjZUZyb21NTVJBdXRoQ2hh
bGxlbmdlKGF1dGhDaGFsbGVuZ2UpOwotICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbCA9IENyZWRl
bnRpYWxTdG9yYWdlOjpnZXQocHJvdGVjdGlvblNwYWNlKTsKLSAgICBpZiAoIWNyZWRlbnRpYWwu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIG5vdGlmeUNoYWxsZW5nZVJlc3VsdCh1cmwsIHByb3RlY3Rp
b25TcGFjZSwgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTdWNjZXNzLCBjcmVkZW50aWFsKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1faXNBdXRoZW50aWNhdGlvbkNoYWxsZW5naW5n
ID0gdHJ1ZTsKLSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXI6Omluc3RhbmNlKCkt
PmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHVybCwgcHJvdGVjdGlvblNwYWNlLCBjcmVkZW50aWFs
LAotICAgICAgICB0aGlzLCBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1l
ZGlhUGxheWVySG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpub3RpZnlDaGFsbGVuZ2VSZXN1bHQoY29uc3QgVVJMJiB1cmws
IGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUmVzdWx0IHJl
c3VsdCwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKLXsKLSAgICBtX2lzQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2luZyA9IGZhbHNlOwotCi0gICAgaWYgKHJlc3VsdCAhPSBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVN1Y2Nlc3MgfHwgIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcGxhdGZvcm1QbGF5ZXItPnJlbG9hZFdpdGhDcmVkZW50aWFsKGNyZWRlbnRpYWwu
dXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCksIHN0YXRpY19jYXN0PE1NUkF1dGhDaGFsbGVu
Z2U6OkNyZWRlbnRpYWxQZXJzaXN0ZW5jZT4oY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpKSk7Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvbkF1dGhlbnRpY2F0aW9uQWNjZXB0ZWQoY29u
c3QgTU1SQXV0aENoYWxsZW5nZSYgYXV0aENoYWxsZW5nZSkgY29uc3QKLXsKLSAgICBVUkwgdXJs
KFBhcnNlZFVSTFN0cmluZywgV1RGOjpTdHJpbmcoYXV0aENoYWxsZW5nZS51cmwoKS5jX3N0cigp
KSk7Ci0gICAgaWYgKCF1cmwuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQcm90
ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlID0gZ2VuZXJhdGVQcm90ZWN0aW9uU3BhY2VGcm9t
TU1SQXV0aENoYWxsZW5nZShhdXRoQ2hhbGxlbmdlKTsKLSAgICBDcmVkZW50aWFsIHNhdmVkQ3Jl
ZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpnZXQocHJvdGVjdGlvblNwYWNlKTsKLSAgICBp
ZiAoc2F2ZWRDcmVkZW50aWFsLmlzRW1wdHkoKSkKLSAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6
OnNldChDcmVkZW50aWFsKGF1dGhDaGFsbGVuZ2UudXNlcm5hbWUoKS5jX3N0cigpLCBhdXRoQ2hh
bGxlbmdlLnBhc3N3b3JkKCkuY19zdHIoKSwgc3RhdGljX2Nhc3Q8Q3JlZGVudGlhbFBlcnNpc3Rl
bmNlPihhdXRoQ2hhbGxlbmdlLnBlcnNpc3RlbmNlKCkpKSwgcHJvdGVjdGlvblNwYWNlLCB1cmwp
OwotfQotCi1pbnQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvblNob3dFcnJvckRpYWxvZyhQbGF0Zm9y
bVBsYXllcjo6RXJyb3IgdHlwZSkKLXsKLSAgICB1c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6
V2ViS2l0OwotCi0gICAgV2ViUGFnZUNsaWVudDo6QWxlcnRUeXBlIGF0eXBlOwotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgUGxhdGZvcm1QbGF5ZXI6Ok1lZGlhT0s6Ci0gICAgICAgIGF0
eXBlID0gV2ViUGFnZUNsaWVudDo6TWVkaWFPSzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQ
bGF0Zm9ybVBsYXllcjo6TWVkaWFEZWNvZGVFcnJvcjoKLSAgICAgICAgYXR5cGUgPSBXZWJQYWdl
Q2xpZW50OjpNZWRpYURlY29kZUVycm9yOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRm
b3JtUGxheWVyOjpNZWRpYU1ldGFEYXRhRXJyb3I6Ci0gICAgICAgIGF0eXBlID0gV2ViUGFnZUNs
aWVudDo6TWVkaWFNZXRhRGF0YUVycm9yOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRm
b3JtUGxheWVyOjpNZWRpYU1ldGFEYXRhVGltZW91dEVycm9yOgotICAgICAgICBhdHlwZSA9IFdl
YlBhZ2VDbGllbnQ6Ok1lZGlhTWV0YURhdGFUaW1lb3V0RXJyb3I7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUGxhdGZvcm1QbGF5ZXI6Ok1lZGlhTm9NZXRhRGF0YUVycm9yOgotICAgICAgICBh
dHlwZSA9IFdlYlBhZ2VDbGllbnQ6Ok1lZGlhTm9NZXRhRGF0YUVycm9yOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFBsYXRmb3JtUGxheWVyOjpNZWRpYVZpZGVvUmVjZWl2ZUVycm9yOgotICAg
ICAgICBhdHlwZSA9IFdlYlBhZ2VDbGllbnQ6Ok1lZGlhVmlkZW9SZWNlaXZlRXJyb3I7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZvcm1QbGF5ZXI6Ok1lZGlhQXVkaW9SZWNlaXZlRXJy
b3I6Ci0gICAgICAgIGF0eXBlID0gV2ViUGFnZUNsaWVudDo6TWVkaWFBdWRpb1JlY2VpdmVFcnJv
cjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybVBsYXllcjo6TWVkaWFJbnZhbGlk
RXJyb3I6Ci0gICAgICAgIGF0eXBlID0gV2ViUGFnZUNsaWVudDo6TWVkaWFJbnZhbGlkRXJyb3I7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIExPRyhNZWRpYSwgIkFsZXJ0
IHR5cGUgZG9lcyBub3QgZXhpc3QuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAg
cmV0dXJuIG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJI
b3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5zaG93QWxlcnREaWFsb2coYXR5cGUp
OwotfQotCi1zdGF0aWMgV2ViTWVkaWFTdHJlYW1Tb3VyY2UgdG9XZWJNZWRpYVN0cmVhbVNvdXJj
ZShNZWRpYVN0cmVhbVNvdXJjZSogc3JjKQotewotICAgIHJldHVybiBXZWJNZWRpYVN0cmVhbVNv
dXJjZShzcmMtPmlkKCksIHN0YXRpY19jYXN0PFdlYk1lZGlhU3RyZWFtU291cmNlOjpUeXBlPihz
cmMtPnR5cGUoKSksIHNyYy0+bmFtZSgpKTsKLX0KLQotc3RhdGljIFdlYk1lZGlhU3RyZWFtUHJp
dmF0ZSB0b1dlYk1lZGlhU3RyZWFtUHJpdmF0ZShNZWRpYVN0cmVhbVByaXZhdGUqIGQpCi17Ci0g
ICAgdmVjdG9yPFdlYk1lZGlhU3RyZWFtU291cmNlPiBhdWRpb1NvdXJjZXM7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBkLT5udW1iZXJPZkF1ZGlvQ29tcG9uZW50cygpOyBpKyspCi0gICAg
ICAgIGF1ZGlvU291cmNlcy5wdXNoX2JhY2sodG9XZWJNZWRpYVN0cmVhbVNvdXJjZShkLT5hdWRp
b0NvbXBvbmVudChpKS0+c291cmNlKCkpKTsKLQotICAgIHZlY3RvcjxXZWJNZWRpYVN0cmVhbVNv
dXJjZT4gdmlkZW9Tb3VyY2VzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZC0+bnVtYmVy
T2ZWaWRlb0NvbXBvbmVudHMoKTsgaSsrKQotICAgICAgICB2aWRlb1NvdXJjZXMucHVzaF9iYWNr
KHRvV2ViTWVkaWFTdHJlYW1Tb3VyY2UoZC0+dmlkZW9Db21wb25lbnQoaSktPnNvdXJjZSgpKSk7
Ci0KLSAgICByZXR1cm4gV2ViTWVkaWFTdHJlYW1Qcml2YXRlKGQtPmlkKCksIGF1ZGlvU291cmNl
cywgdmlkZW9Tb3VyY2VzKTsKLX0KLQotV2ViTWVkaWFTdHJlYW1Qcml2YXRlIE1lZGlhUGxheWVy
UHJpdmF0ZTo6bG9va3VwTWVkaWFTdHJlYW0oY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgdXJsKQotewotICAgIE1lZGlhU3RyZWFtUHJpdmF0ZSogZGVzY3JpcHRvciA9IE1lZGlh
U3RyZWFtUmVnaXN0cnk6OnJlZ2lzdHJ5KCkubG9va3VwTWVkaWFTdHJlYW1Qcml2YXRlKFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh1cmwuY19zdHIoKSkpOwotICAgIGlmICghZGVzY3JpcHRvcikKLSAg
ICAgICAgcmV0dXJuIFdlYk1lZGlhU3RyZWFtUHJpdmF0ZSgpOwotCi0gICAgcmV0dXJuIHRvV2Vi
TWVkaWFTdHJlYW1Qcml2YXRlKGRlc2NyaXB0b3IpOwotfQotCi1CbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OldpbmRvdyogTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybVdpbmRvdygp
Ci17Ci0gICAgcmV0dXJuIG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVk
aWFQbGF5ZXJIb3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5wbGF0Zm9ybVdpbmRv
dygpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNQcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xp
ZW50KCktPm1lZGlhUGxheWVySXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLX0KLQotYm9vbCBN
ZWRpYVBsYXllclByaXZhdGU6OmlzRnVsbHNjcmVlbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZnVsbHNjcmVlbldlYlBhZ2VDbGllbnQ7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpp
c0VsZW1lbnRQYXVzZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYkNvcmVQbGF5ZXItPm1l
ZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVySXNQYXVzZWQoKTsKLX0KLQotYm9vbCBNZWRp
YVBsYXllclByaXZhdGU6OmlzVGFiVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2Vi
Q29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJIb3N0V2luZG93KCkt
PnBsYXRmb3JtUGFnZUNsaWVudCgpLT5pc1Zpc2libGUoKTsKLX0KLQotYm9vbCBNZWRpYVBsYXll
clByaXZhdGU6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdAotewotICAgIGlm
IChtX3BsYXRmb3JtUGxheWVyKQotICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+c3Vw
cG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLXN0YXRpYyBjb25zdCBkb3VibGUgQnVmZmVy
aW5nQW5pbWF0aW9uRGVsYXkgPSAxLjAgLyAyNDsKLXN0YXRpYyB1bnNpZ25lZCogc19idWZmZXJp
bmdJbWFnZURhdGEgPSAwOwotc3RhdGljIEludFNpemUgc19idWZmZXJpbmdJbWFnZVNpemU7Ci0K
LVBsYXRmb3JtTWVkaWEgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybU1lZGlhKCkgY29uc3QK
LXsKLSAgICBQbGF0Zm9ybU1lZGlhIHBtOwotICAgIHBtLnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpR
TlhNZWRpYVBsYXllclR5cGU7Ci0gICAgcG0ubWVkaWEucW54TWVkaWFQbGF5ZXIgPSBjb25zdF9j
YXN0PE1lZGlhUGxheWVyUHJpdmF0ZSo+KHRoaXMpOwotICAgIHJldHVybiBwbTsKLX0KLQotUGxh
dGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsK
LSAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVy
LmdldCgpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkQnVmZmVyaW5nSW1h
Z2VEYXRhKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBsb2FkZWQgPSBmYWxzZTsKLSAgICBpZiAoIWxv
YWRlZCkgewotICAgICAgICBzdGF0aWMgSW1hZ2UqIGJ1ZmZlcmluZ0ljb24gPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoInZpZGJ1ZmZlciIpLmxlYWtSZWYoKTsKLQotICAgICAgICBOYXRp
dmVJbWFnZVB0ciBuYXRpdmVJbWFnZSA9IGJ1ZmZlcmluZ0ljb24tPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7Ci0gICAgICAgIGlmICghbmF0aXZlSW1hZ2UpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgbG9hZGVkID0gdHJ1ZTsKLSAgICAgICAgc19idWZmZXJpbmdJbWFnZVNp
emUgPSBidWZmZXJpbmdJY29uLT5zaXplKCk7Ci0gICAgICAgIGludCBidWZTaXplID0gYnVmZmVy
aW5nSWNvbi0+ZGVjb2RlZFNpemUoKTsKLSAgICAgICAgc19idWZmZXJpbmdJbWFnZURhdGEgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCo+KG1hbGxvYyhidWZTaXplKSk7Ci0KLSAgICAgICAgbmF0aXZl
SW1hZ2UtPnJlYWRQaXhlbHMoc19idWZmZXJpbmdJbWFnZURhdGEsIHNfYnVmZmVyaW5nSW1hZ2VT
aXplLndpZHRoKCkgKiBzX2J1ZmZlcmluZ0ltYWdlU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAg
YnVmZmVyaW5nSWNvbi0+ZGVyZWYoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpidWZmZXJpbmdUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKQotewot
ICAgIGlmIChtX3Nob3dCdWZmZXJpbmdJbWFnZSkgewotICAgICAgICBpZiAoIWlzRnVsbHNjcmVl
bigpICYmIG1fcGxhdGZvcm1MYXllcikKLSAgICAgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0
TmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgIG1fYnVmZmVyaW5nVGltZXIuc3RhcnRPbmVTaG90KEJ1
ZmZlcmluZ0FuaW1hdGlvbkRlbGF5KTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZXRCdWZmZXJpbmcoYm9vbCBidWZmZXJpbmcpCi17Ci0gICAgaWYgKCFtX3dlYkNvcmVQ
bGF5ZXIgfHwgIW1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKSB8fCAhbV93ZWJD
b3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllcklzVmlkZW8oKSkKLSAg
ICAgICAgYnVmZmVyaW5nID0gZmFsc2U7IC8vIEJ1ZmZlcmluZyBhbmltYXRpb24gbm90IHZpc2li
bGUgZm9yIGF1ZGlvLgotCi0gICAgaWYgKGJ1ZmZlcmluZyAhPSBtX3Nob3dCdWZmZXJpbmdJbWFn
ZSkgewotICAgICAgICBtX3Nob3dCdWZmZXJpbmdJbWFnZSA9IGJ1ZmZlcmluZzsKLSAgICAgICAg
aWYgKGJ1ZmZlcmluZykgewotICAgICAgICAgICAgbG9hZEJ1ZmZlcmluZ0ltYWdlRGF0YSgpOwot
ICAgICAgICAgICAgbV9idWZmZXJpbmdUaW1lci5zdGFydE9uZVNob3QoQnVmZmVyaW5nQW5pbWF0
aW9uRGVsYXkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fYnVmZmVyaW5nVGltZXIu
c3RvcCgpOwotCi0gICAgICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIpCi0gICAgICAgICAgICBtX3Bs
YXRmb3JtTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwotICAgIH0KLX0KLQotc3RhdGljIHVuc2ln
bmVkIGFsbG9jYXRlVGV4dHVyZUlkKCkKLXsKLSAgICB1bnNpZ25lZCB0ZXhpZDsKLSAgICBnbEdl
blRleHR1cmVzKDEsICZ0ZXhpZCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0
ZXhpZCk7Ci0gICAgLy8gRG8gYmFzaWMgbGluZWFyIGZpbHRlcmluZyBvbiByZXNpemUuCi0gICAg
Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xf
TElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9N
QUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIC8vIE5QT1QgdGV4dHVyZXMgaW4gR0wgRVMgb25s
eSB3b3JrIHdoZW4gdGhlIHdyYXAgbW9kZSBpcyBzZXQgdG8gR0xfQ0xBTVBfVE9fRURHRS4KLSAg
ICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgcmV0dXJuIHRleGlkOwotfQotCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHJhd0J1ZmZlcmluZ0FuaW1hdGlvbihjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBHcmFwaGljczo6R0xFUzJQcm9ncmFtJiBw
cm9ncmFtKQotewotICAgIGlmIChtX3Nob3dCdWZmZXJpbmdJbWFnZSAmJiBzX2J1ZmZlcmluZ0lt
YWdlRGF0YSAmJiAhaXNGdWxsc2NyZWVuKCkpIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcmVuZGVyTWF0cml4ID0gbWF0cml4OwotCi0gICAgICAgIC8vIFJvdGF0ZSB0aGUgYnVmZmVy
aW5nIGluZGljYXRvciBzbyB0aGF0IGl0IHRha2VzIDEgc2Vjb25kIHRvIGRvIDEgcmV2b2x1dGlv
bi4KLSAgICAgICAgdGltZXNwZWMgdGltZTsKLSAgICAgICAgY2xvY2tfZ2V0dGltZShDTE9DS19N
T05PVE9OSUMsICZ0aW1lKTsKLSAgICAgICAgcmVuZGVyTWF0cml4LnJvdGF0ZSh0aW1lLnR2X25z
ZWMgLyAxMDAwMDAwMDAwLjAgKiAzNjAuMCk7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgaW5pdGlh
bGl6ZWQgPSBmYWxzZTsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIHRleElkID0gYWxsb2NhdGVU
ZXh0dXJlSWQoKTsKLSAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXhJZCk7
Ci0gICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgIGluaXRpYWxpemVkID0g
dHJ1ZTsKLSAgICAgICAgICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JB
LCBzX2J1ZmZlcmluZ0ltYWdlU2l6ZS53aWR0aCgpLCBzX2J1ZmZlcmluZ0ltYWdlU2l6ZS5oZWln
aHQoKSwKLSAgICAgICAgICAgICAgICAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBzX2J1
ZmZlcmluZ0ltYWdlRGF0YSk7Ci0gICAgICAgICAgICBmcmVlKHNfYnVmZmVyaW5nSW1hZ2VEYXRh
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IHRleGNvb3Jkc1tdID0geyAwLCAwLCAgMSwg
MCwgIDEsIDEsICAwLCAxIH07Ci0gICAgICAgIEZsb2F0UmVjdCBidWZmZXJpbmdJbWFnZVJlY3Qo
RmxvYXRQb2ludCgtc19idWZmZXJpbmdJbWFnZVNpemUud2lkdGgoKSAvIDIuMGYsIC1zX2J1ZmZl
cmluZ0ltYWdlU2l6ZS5oZWlnaHQoKSAvIDIuMGYpLCBzX2J1ZmZlcmluZ0ltYWdlU2l6ZSk7Ci0g
ICAgICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZFF1YWQgPSByZW5kZXJNYXRyaXgubWFwUXVhZChi
dWZmZXJpbmdJbWFnZVJlY3QpOwotCi0gICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAgICAg
ICAgZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAg
Z2xVbmlmb3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwgMS4wKTsKLSAgICAgICAgZ2xW
ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0ucG9zaXRpb25Mb2NhdGlvbigpLCAyLCBHTF9GTE9B
VCwgR0xfRkFMU0UsIDAsICZ0cmFuc2Zvcm1lZFF1YWQpOwotICAgICAgICBnbFZlcnRleEF0dHJp
YlBvaW50ZXIocHJvZ3JhbS50ZXhDb29yZExvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxT
RSwgMCwgdGV4Y29vcmRzKTsKLSAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwg
MCwgNCk7Ci0gICAgfQotfQotI2VuZGlmCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvbkNv
bmRpdGlvbmFsbHlFbnRlckZ1bGxzY3JlZW4oKQotewotICAgIERvY3VtZW50KiBvd25pbmdEb2N1
bWVudCA9IG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJP
d25pbmdEb2N1bWVudCgpOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpEZXZpY2VJbmZvKiBp
bmZvID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkRldmljZUluZm86Omluc3RhbmNlKCk7Ci0KLSAg
ICAvLyBEb24ndCBhbGxvdyB2aWRlbyBpbiA8ZW1iZWQ+IGFuZCA8b2JqZWN0PiBjb250YWluZXJz
IHRvIGdvIGZ1bGxzY3JlZW4KLSAgICAvLyBvbiBwbGF5IGJlY2F1c2UgdGhpcyBkb2VzIG5vdCBj
dXJyZW50bHkgd29yay4gRGV0ZWN0IHRoaXMgYnkgY2hlY2tpbmcKLSAgICAvLyBmb3IgTWVkaWFE
b2N1bWVudCB3aXRoIGEgcGFyZW50IGRvY3VtZW50LgotICAgIGlmIChvd25pbmdEb2N1bWVudC0+
aXNNZWRpYURvY3VtZW50KCkgJiYgb3duaW5nRG9jdW1lbnQtPnBhcmVudERvY3VtZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChpbmZvLT5pc01vYmlsZSgpKSB7Ci0gICAgICAgIC8v
IFRoaXMgaXMgYSBtb2JpbGUgZGV2aWNlIChzbWFsbCBzY3JlZW4pLCBub3QgYSB0YWJsZXQsIHNv
IHdlCi0gICAgICAgIC8vIGVudGVyIGZ1bGxzY3JlZW4gdmlkZW8gb24gdXNlci1pbml0aWF0ZWQg
cGxheXMuCi0gICAgICAgIGJvb2wgbm90aGluZ0lzRnVsbHNjcmVlbiA9ICFtX3dlYkNvcmVQbGF5
ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVySXNGdWxsc2NyZWVuKCk7Ci0jaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgICAgICBpZiAob3duaW5nRG9jdW1lbnQtPndlYmtp
dElzRnVsbFNjcmVlbigpKQotICAgICAgICAgICAgbm90aGluZ0lzRnVsbHNjcmVlbiA9IGZhbHNl
OwotI2VuZGlmCi0gICAgICAgIGlmIChub3RoaW5nSXNGdWxsc2NyZWVuKQotICAgICAgICAgICAg
bV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckVudGVyRnVs
bHNjcmVlbigpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uRXhpdEZ1
bGxzY3JlZW4oKQotewotICAgIGlmIChtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50
KCktPm1lZGlhUGxheWVySXNGdWxsc2NyZWVuKCkpCi0gICAgICAgIG1fd2ViQ29yZVBsYXllci0+
bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJFeGl0RnVsbHNjcmVlbigpOwotfQotCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25DcmVhdGVIb2xlUHVuY2hSZWN0KCkKLXsKLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgLy8gQ3JlYXRlIHBsYXRmb3JtIGxheWVy
IGZvciB2aWRlbyAoY3JlYXRlIGhvbGUgcHVuY2ggcmVjdCkuCi0gICAgaWYgKCFtX3BsYXRmb3Jt
TGF5ZXIgJiYgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpKSB7Ci0gICAgICAgIG1fc2hv
d0J1ZmZlcmluZ0ltYWdlID0gZmFsc2U7Ci0gICAgICAgIG1fcGxhdGZvcm1MYXllciA9IFZpZGVv
TGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZShtX3dlYkNvcmVQbGF5ZXIpOwotICAgIH0KLSNlbmRp
ZgotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25EZXN0cm95SG9sZVB1bmNoUmVjdCgp
Ci17Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHNldEJ1ZmZlcmluZyhm
YWxzZSk7Ci0gICAgLy8gUmVtb3ZlIG1lZGlhIHBsYXllciBmcm9tIHBsYXRmb3JtIGxheWVyIChy
ZW1vdmUgaG9sZSBwdW5jaCByZWN0KS4KLSAgICBpZiAobV9wbGF0Zm9ybUxheWVyKSB7Ci0gICAg
ICAgIHN0YXRpY19jYXN0PFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQqPihtX3BsYXRmb3JtTGF5ZXIu
Z2V0KCkpLT5zZXRNZWRpYVBsYXllcigwKTsKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyLmNsZWFy
KCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShWSURFTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQ
cml2YXRlQmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnku
aAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnlf
aAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5X2gKLQotI2lmIEVOQUJMRShW
SURFTykKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXIuaCIKLSNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9y
bVBsYXllci5oPgotCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci0KLW5hbWVzcGFjZSBQbGF0Zm9y
bSB7Ci1jbGFzcyBJbnRSZWN0OwotCi1uYW1lc3BhY2UgR3JhcGhpY3MgewotY2xhc3MgR0xFUzJQ
cm9ncmFtOwotfQotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlBhZ2VDbGllbnQ7
Ci19Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRl
IDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSwgcHVibGljIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlQ2xpZW50LCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06OklQbGF0Zm9y
bVBsYXllckxpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZh
dGUoKTsKLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFj
ZT4gY3JlYXRlKE1lZGlhUGxheWVyKik7Ci0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVu
Z2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVk
VHlwZXMoSGFzaFNldDxXVEY6OlN0cmluZz4mKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVy
cyYpOwotICAgIHN0YXRpYyB2b2lkIG5vdGlmeUFwcEFjdGl2YXRlZEV2ZW50KGJvb2wpOwotICAg
IHN0YXRpYyB2b2lkIHNldENlcnRpZmljYXRlUGF0aChjb25zdCBXVEY6OlN0cmluZyYpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGxvYWQoY29uc3QgV1RGOjpTdHJpbmcmIHVybCk7Ci0gICAgdmlydHVh
bCB2b2lkIGNhbmNlbExvYWQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9QbGF5KCk7
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgUGxhdGZvcm1N
ZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3Q7Ci0gICAgdm9pZCBkcmF3QnVmZmVyaW5nQW5pbWF0aW9uKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpHTEVTMlByb2dyYW0mKTsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHBsYXko
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0Z1bGxzY3JlZW4oKSBjb25zdDsKLQotICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgp
IGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIGhhc0F1ZGlvKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShi
b29sKTsKLQotICAgIHZpcnR1YWwgZmxvYXQgZHVyYXRpb24oKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VlayhmbG9h
dCB0aW1lKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2Vla2luZygpIGNvbnN0OwotCi0gICAgdmlydHVh
bCB2b2lkIHNldFJhdGUoZmxvYXQpOwotCi0gICAgdmlydHVhbCBib29sIHBhdXNlZCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBtdXRlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c011dGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRWb2x1bWUoZmxvYXQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNdXRlZChib29sKTsKLQotICAg
IHZpcnR1YWwgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
U2l6ZShjb25zdCBJbnRTaXplJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50Q3VycmVu
dEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLQotICAg
IHZpcnR1YWwgYm9vbCBoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3Q7Ci0KLSNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgLy8gV2hldGhlciBhY2NlbGVyYXRlZCByZW5k
ZXJpbmcgaXMgc3VwcG9ydGVkIGJ5IHRoZSBtZWRpYSBlbmdpbmUgZm9yIHRoZSBjdXJyZW50IG1l
ZGlhLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29u
c3Q7Ci0gICAgLy8gQ2FsbGVkIHdoZW4gdGhlIHJlbmRlcmluZyBzeXN0ZW0gZmxpcHMgdGhlIGlu
dG8gb3Igb3V0IG9mIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBtb2RlLgotICAgIHZpcnR1YWwgdm9p
ZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpIHsgfQotI2VuZGlmCi0KLSAgICB2
aXJ0dWFsIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgbW92aWVMb2FkVHlwZSgpIGNvbnN0OwotCi0g
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JSZW5kZXJpbmcoKTsKLQotICAgIHZvaWQgcmVzaXpl
U291cmNlRGltZW5zaW9ucygpOwotICAgIHZvaWQgc2V0RnVsbHNjcmVlbldlYlBhZ2VDbGllbnQo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlQ2xpZW50Kik7Ci0gICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpXaW5kb3cqIGdldFdpbmRvdygpOwotICAgIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6V2luZG93KiBnZXRQZWVyV2luZG93KGNvbnN0IGNoYXIqKSBjb25z
dDsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCBnZXRXaW5kb3dTY3JlZW5SZWN0
KCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciogbW1yQ29udGV4dE5hbWUoKTsKLSAgICBmbG9hdCBw
ZXJjZW50TG9hZGVkKCk7Ci0gICAgdW5zaWduZWQgc291cmNlV2lkdGgoKTsKLSAgICB1bnNpZ25l
ZCBzb3VyY2VIZWlnaHQoKTsKLSAgICB2b2lkIHNldEFsbG93UFBTVm9sdW1lVXBkYXRlcyhib29s
KTsKLQotICAgIC8vIElQbGF0Zm9ybVBsYXllckxpc3RlbmVyIGltcGxlbWVudGF0aW9uLgotICAg
IHZpcnR1YWwgdm9pZCBvblN0YXRlQ2hhbmdlZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6UGxhdGZv
cm1QbGF5ZXI6Ok1wU3RhdGUpOwotICAgIHZpcnR1YWwgdm9pZCBvbk1lZGlhU3RhdHVzQ2hhbmdl
ZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6UGxhdGZvcm1QbGF5ZXI6Ok1NUlBsYXlTdGF0ZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIG9uRXJyb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlBsYXRmb3JtUGxh
eWVyOjpFcnJvcik7Ci0gICAgdmlydHVhbCB2b2lkIG9uRHVyYXRpb25DaGFuZ2VkKGZsb2F0KTsK
LSAgICB2aXJ0dWFsIHZvaWQgb25UaW1lQ2hhbmdlZChmbG9hdCk7Ci0gICAgdmlydHVhbCB2b2lk
IG9uUmF0ZUNoYW5nZWQoZmxvYXQpOwotICAgIHZpcnR1YWwgdm9pZCBvblZvbHVtZUNoYW5nZWQo
ZmxvYXQpOwotICAgIHZpcnR1YWwgdm9pZCBvblBhdXNlU3RhdGVDaGFuZ2VkKCk7Ci0gICAgdmly
dHVhbCB2b2lkIG9uUmVwYWludCgpOwotICAgIHZpcnR1YWwgdm9pZCBvblNpemVDaGFuZ2VkKCk7
Ci0gICAgdmlydHVhbCB2b2lkIG9uUGxheU5vdGlmaWVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIG9u
UGF1c2VOb3RpZmllZCgpOwotICAgIHZpcnR1YWwgdm9pZCBvbldhaXRNZXRhZGF0YU5vdGlmaWVk
KGJvb2wgaGFzRmluaXNoZWQsIGludCB0aW1lV2FpdGVkKTsKLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIG9uQnVmZmVyaW5nKGJvb2wpOwotI2VuZGlm
Ci0gICAgdmlydHVhbCB2b2lkIG9uQXV0aGVudGljYXRpb25OZWVkZWQoQmxhY2tCZXJyeTo6UGxh
dGZvcm06Ok1NUkF1dGhDaGFsbGVuZ2UmKTsKLSAgICB2aXJ0dWFsIHZvaWQgb25BdXRoZW50aWNh
dGlvbkFjY2VwdGVkKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNTVJBdXRoQ2hhbGxlbmdl
JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIG9uQ29uZGl0aW9uYWxseUVudGVyRnVsbHNjcmVl
bigpOwotICAgIHZpcnR1YWwgdm9pZCBvbkV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgdmlydHVhbCB2
b2lkIG9uQ3JlYXRlSG9sZVB1bmNoUmVjdCgpOwotICAgIHZpcnR1YWwgdm9pZCBvbkRlc3Ryb3lI
b2xlUHVuY2hSZWN0KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q2hhbGxlbmdlUmVzdWx0
KGNvbnN0IFVSTCYsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUmVzdWx0LCBjb25zdCBDcmVkZW50aWFsJik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNGdWxsc2NyZWVu
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRWxlbWVudFBhdXNlZCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpc1RhYlZpc2libGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBvblNo
b3dFcnJvckRpYWxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6UGxhdGZvcm1QbGF5ZXI6OkVycm9y
KTsKLSAgICB2aXJ0dWFsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6V2luZG93KiBw
bGF0Zm9ybVdpbmRvdygpOwotICAgIHZpcnR1YWwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OldlYk1l
ZGlhU3RyZWFtUHJpdmF0ZSBsb29rdXBNZWRpYVN0cmVhbShjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nJiB1cmwpOwotCi1wcml2YXRlOgotICAgIE1lZGlhUGxheWVyUHJpdmF0ZShN
ZWRpYVBsYXllciopOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0ZXMoKTsKLSAgICBXVEY6OlN0cmlu
ZyB1c2VyQWdlbnQoY29uc3QgV1RGOjpTdHJpbmcmKSBjb25zdDsKLQotICAgIHZpcnR1YWwgV1RG
OjpTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiAiQmxhY2tCZXJyeSI7
IH0KLQotICAgIE1lZGlhUGxheWVyKiBtX3dlYkNvcmVQbGF5ZXI7Ci0gICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlBsYXRmb3JtUGxheWVyKiBtX3BsYXRmb3JtUGxheWVyOwotCi0gICAgbXV0YWJs
ZSBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOwotICAgIE1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKLQotICAgIEJsYWNrQmVycnk6OldlYktpdDo6
V2ViUGFnZUNsaWVudCogbV9mdWxsc2NyZWVuV2ViUGFnZUNsaWVudDsKLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBidWZmZXJpbmdUaW1lckZpcmVkKFRpbWVyPE1l
ZGlhUGxheWVyUHJpdmF0ZT4qKTsKLSAgICB2b2lkIHNldEJ1ZmZlcmluZyhib29sKTsKLQotICAg
IFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9idWZmZXJpbmdUaW1lcjsKLSAgICBSZWZQdHI8
UGxhdGZvcm1MYXllcj4gbV9wbGF0Zm9ybUxheWVyOwotICAgIGJvb2wgbV9zaG93QnVmZmVyaW5n
SW1hZ2U7Ci0jZW5kaWYKLQotICAgIHZvaWQgdXNlckRyaXZlblNlZWtUaW1lckZpcmVkKFRpbWVy
PE1lZGlhUGxheWVyUHJpdmF0ZT4qKTsKLSAgICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+IG1f
dXNlckRyaXZlblNlZWtUaW1lcjsKLSAgICBmbG9hdCBtX2xhc3RTZWVrVGltZTsKLSAgICBtdXRh
YmxlIGZsb2F0IG1fbGFzdExvYWRpbmdUaW1lOwotICAgIGJvb2wgbV9sYXN0U2Vla1RpbWVQZW5k
aW5nOwotICAgIGJvb2wgbV9pc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdpbmc7Ci0gICAgdm9pZCB3
YWl0TWV0YWRhdGFUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKTsKLSAgICBU
aW1lcjxNZWRpYVBsYXllclByaXZhdGU+IG1fd2FpdE1ldGFkYXRhVGltZXI7Ci0gICAgaW50IG1f
d2FpdE1ldGFkYXRhUG9wRGlhbG9nQ291bnRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKLSNlbmRpZiAvLyBNZWRpYVBsYXllclByaXZh
dGVCbGFja0JlcnJ5X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvUGF0aEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvUGF0aEJsYWNrQmVycnkuY3BwCShyZXZpc2lv
biAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L1BhdGhCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzMTcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUGF0aC5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKLQot
I2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtUGF0aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgR3JhcGhpY3NDb250ZXh0KiBzY3Jh
dGNoQ29udGV4dCgpCi17Ci0gICAgc3RhdGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6QnVmZmVyKiBidWZmZXIgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmNyZWF0
ZUJ1ZmZlcihJbnRTaXplKCksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6TmV2ZXJC
YWNrZWQpOwotICAgIHN0YXRpYyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGdjID0gbG9ja0J1
ZmZlckRyYXdhYmxlKGJ1ZmZlcik7Ci0gICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dCBnYyhwZ2Mp
OwotICAgIHJldHVybiAmZ2M7Ci19Ci0KLVBhdGg6OlBhdGgoKSA6IG1fcGF0aChuZXcgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQYXRoKQotewotfQotCi1QYXRoOjpQYXRoKGNvbnN0
IFBsYXRmb3JtUGF0aCYgcGF0aCkKLSAgICA6IG1fcGF0aChuZXcgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpQYXRoKHBhdGgpKQotewotfQotCi1QYXRoOjp+UGF0aCgpCi17Ci0gICAg
aWYgKG1fcGF0aCkgewotICAgICAgICBkZWxldGUgbV9wYXRoOwotICAgICAgICBtX3BhdGggPSAw
OwotICAgIH0KLX0KLQotUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKLXsKLSAgICBtX3Bh
dGggPSBuZXcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQYXRoKCpvdGhlci5tX3Bh
dGgpOwotfQotCi1QYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCi17Ci0g
ICAgaWYgKG1fcGF0aCkgewotICAgICAgICBkZWxldGUgbV9wYXRoOwotICAgICAgICBtX3BhdGgg
PSAwOwotICAgIH0KLSAgICBtX3BhdGggPSBuZXcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpQYXRoKCpvdGhlci5tX3BhdGgpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotRmxvYXRQ
b2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhdGgtPmN1
cnJlbnRQb2ludCgpOwotfQotCi1ib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAotewotICAgIHJldHVybiBtX3BhdGgtPmNvbnRh
aW5zKHBvaW50LCAoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpXaW5kUnVsZSkocnVs
ZSkpOwotfQotCi1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciog
YXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgR3JhcGhpY3ND
b250ZXh0KiBzY3JhdGNoID0gc2NyYXRjaENvbnRleHQoKTsKLSAgICBzY3JhdGNoLT5zYXZlKCk7
Ci0KLSAgICBpZiAoYXBwbGllcikKLSAgICAgICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoc2NyYXRj
aCk7Ci0KLSAgICBib29sIHJlc3VsdCA9IHNjcmF0Y2hDb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpLT5zdHJva2VDb250YWlucygqbV9wYXRoLCBwb2ludCk7Ci0gICAgc2NyYXRjaC0+cmVzdG9y
ZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb247
Ci0gICAgdHJhbnNmb3JtYXRpb24udHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7Ci0gICAgdHJhbnNmb3JtKHRyYW5zZm9ybWF0aW9uKTsKLX0KLQotRmxvYXRSZWN0IFBhdGg6
OmJvdW5kaW5nUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGF0aC0+Z2V0Qm91bmRzKCk7
Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBs
aWVyKiBhcHBsaWVyKSBjb25zdAotewotICAgIEdyYXBoaWNzQ29udGV4dCogc2NyYXRjaCA9IHNj
cmF0Y2hDb250ZXh0KCk7Ci0gICAgc2NyYXRjaC0+c2F2ZSgpOwotCi0gICAgaWYgKGFwcGxpZXIp
Ci0gICAgICAgIGFwcGxpZXItPnN0cm9rZVN0eWxlKHNjcmF0Y2gpOwotCi0gICAgRmxvYXRSZWN0
IHJlc3VsdCA9IHNjcmF0Y2gtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VCb3VuZHMoKm1f
cGF0aCk7Ci0KLSAgICBzY3JhdGNoLT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgbV9w
YXRoLT5tb3ZlVG8ocG9pbnQpOwotfQotCi12b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKLXsKLSAgICBtX3BhdGgtPmFkZExpbmVUbyhwb2ludCk7Ci19Ci0KLXZv
aWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50LCBj
b25zdCBGbG9hdFBvaW50JiBlbmRQb2ludCkKLXsKLSAgICBtX3BhdGgtPmFkZFF1YWRDdXJ2ZVRv
KGNvbnRyb2xQb2ludCwgZW5kUG9pbnQpOwotfQotCi12b2lkIFBhdGg6OmFkZEJlemllckN1cnZl
VG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgY29u
dHJvbFBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYgZW5kUG9pbnQpCi17Ci0gICAgbV9wYXRoLT5h
ZGRCZXppZXJDdXJ2ZVRvKGNvbnRyb2xQb2ludDEsIGNvbnRyb2xQb2ludDIsIGVuZFBvaW50KTsK
LX0KLQotdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MiwgZmxvYXQgcmFkaXVzKQotewotICAgIG1fcGF0aC0+YWRkQXJj
VG8ocG9pbnQxLCBwb2ludDIsIHJhZGl1cyk7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRo
KCkKLXsKLSAgICBtX3BhdGgtPmNsb3NlU3VicGF0aCgpOwotfQotCi12b2lkIFBhdGg6OmFkZEFy
Yyhjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmds
ZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSkKLXsKLSAgICBtX3BhdGgtPmFk
ZEFyYyhjZW50ZXIsIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2Up
OwotfQotCi12b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAg
IG1fcGF0aC0+YWRkUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3BhdGgtPmFkZEVsbGlwc2UocmVjdCk7Ci19Ci0K
LXZvaWQgUGF0aDo6cGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYg
dG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3Qg
RmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKLXsKLSAgICBpZiAocmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChyZWN0LndpZHRoKCkgPCB0b3BMZWZ0UmFkaXVz
LndpZHRoKCkgKyB0b3BSaWdodFJhZGl1cy53aWR0aCgpCi0gICAgICAgIHx8IHJlY3Qud2lkdGgo
KSA8IGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSArIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkK
LSAgICAgICAgfHwgcmVjdC5oZWlnaHQoKSA8IHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKyBib3R0
b21MZWZ0UmFkaXVzLmhlaWdodCgpCi0gICAgICAgIHx8IHJlY3QuaGVpZ2h0KCkgPCB0b3BSaWdo
dFJhZGl1cy5oZWlnaHQoKSArIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKSB7Ci0gICAgICAg
IC8vIElmIGFsbCB0aGUgcmFkaWkgY2Fubm90IGJlIGFjY29tbW9kYXRlZCwgcmV0dXJuIGEgcmVj
dC4KLSAgICAgICAgYWRkUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJvdW5kZWRSZWN0IHJyKHJlY3QsIHRvcExlZnRS
YWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1
cyk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBnZW5lcmljIHBhdGggcmVmbGVjdHMgdGhlIGNvbnRl
bnRzIG9mIHRoZSByb3VuZGVkIHJlY3RzCi0gICAgbV9wYXRoLT5hZGRSb3VuZGVkUmVjdChycik7
Ci19Ci0KLXZvaWQgUGF0aDo6Y2xlYXIoKQotewotICAgIG1fcGF0aC0+cmVzZXQoKTsKLX0KLQot
Ym9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYXRoLT5pc0VtcHR5
KCk7Ci19Ci0KLWJvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9wYXRoLT5oYXNDdXJyZW50UG9pbnQoKTsKLX0KLQotdm9pZCBQYXRoOjphcHBseSh2b2lk
KiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdAotewotICAgIG1fcGF0
aC0+YXBwbHkoaW5mbywgKHZvaWQqKWZ1bmN0aW9uKTsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2Zv
cm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm1hdGlvbikKLXsKLSAgICBtX3BhdGgt
PnRyYW5zZm9ybShyZWludGVycHJldF9jYXN0PGNvbnN0IGRvdWJsZSo+KCZ0cmFuc2Zvcm1hdGlv
bikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKLXsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBhdGgqIHBwID0gcGF0
aC5wbGF0Zm9ybVBhdGgoKTsKLSAgICBpZiAocHAtPmlzRW1wdHkoKSB8fCBwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6R3JhZGllbnQqIHBsYXRmb3JtR3JhZGllbnQgPSBmaWxsR3JhZGllbnQoKSA/IGZpbGxH
cmFkaWVudCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkgOiAwOwotICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6UGF0dGVybiogcGxhdGZvcm1QYXR0ZXJuID0gZmlsbFBhdHRlcm4oKSA/
IGZpbGxQYXR0ZXJuKCktPnBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkgOiAwOwot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5hZGRGaWxsUGF0aCgqcHAsIChCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OldpbmRSdWxlKW1fc3RhdGUuZmlsbFJ1bGUsIHBsYXRmb3JtR3JhZGll
bnQsIHBsYXRmb3JtUGF0dGVybik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpQYXRoKiBwcCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7Ci0gICAgaWYgKHBwLT5pc0VtcHR5
KCkgfHwgcGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdyYWRpZW50KiBncmFkaWVudCA9IHN0cm9rZUdyYWRp
ZW50KCkgPyBzdHJva2VHcmFkaWVudCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkgOiAwOwotICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGF0dGVybiogcGF0dGVybiA9IHN0cm9rZVBh
dHRlcm4oKSA/IHN0cm9rZVBhdHRlcm4oKS0+cGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9y
bSgpKSA6IDA7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmFkZFN0cm9rZVBhdGgoKnBwLCBncmFk
aWVudCwgcGF0dGVybik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYsIGludCwgaW50LCBjb25zdCBDb2xvciYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGludCwgaW50LCBjb25zdCBDb2xvciYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBv
aW50JiBmcm9tLCBjb25zdCBJbnRQb2ludCYgdG8pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmFkZERyYXdM
aW5lKGZyb20sIHRvKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZURvY3VtZW50
TWFya2VyUmVzb3VyY2VzKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YWRkRHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlcihwdCwgd2lkdGgsIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKXN0eWxlKTsKLX0KLQotRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0
LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZykKLXsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHB0
LCBGbG9hdFNpemUod2lkdGgsIHN0cm9rZVRoaWNrbmVzcygpKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdp
ZHRoLCBib29sIHByaW50aW5nKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5hZGREcmF3TGluZUZvclRleHQo
cHQsIHdpZHRoLCBwcmludGluZyk7Ci19Ci0KLS8vIEZJWE1FOiBkb24ndCBpZ25vcmUgdGhlIHdp
bmRpbmcgcnVsZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzA2
NAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUp
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQYXRoKiBwcCA9IHBhdGgucGxhdGZvcm1Q
YXRoKCk7Ci0gICAgcHAtPmFwcGx5QXNDbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChwYXRoLnBsYXRmb3JtUGF0aCgpLT5pc1JlY3Rhbmd1bGFyKCkpCi0gICAgICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5jbGlwKHBhdGguYm91bmRpbmdSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAg
Y2xpcChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xpcChwYXRoLCBmaWxsUnVsZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQYXRoKiBwcCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7Ci0g
ICAgcHAtPmFwcGx5QXNDbGlwT3V0KHBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9QYXR0ZXJuQmxhY2tC
ZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9QYXR0ZXJuQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvUGF0dGVybkJsYWNrQmVy
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBh
dHRlcm4uaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkltYWdl
LmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0KLSNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFBhdHRlcm46OnBsYXRm
b3JtRGVzdHJveSgpCi17Ci0gICAgZGVsZXRlIG1fcGF0dGVybjsKLSAgICBtX3BhdHRlcm4gPSAw
OwotfQotCi1QbGF0Zm9ybVBhdHRlcm5QdHIgUGF0dGVybjo6cGxhdGZvcm1QYXR0ZXJuKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpCi17Ci0gICAgaWYgKG1fcGF0dGVybikKLSAgICAgICAgcmV0dXJu
IG1fcGF0dGVybjsKLQotICAgIGNvbnN0IE5hdGl2ZUltYWdlUHRyIGltYWdlID0gbV90aWxlSW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0KLSAgICBtX3BhdHRlcm4gPSBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBhdHRlcm46OmNyZWF0ZSgpOwotCi0gICAgbV9w
YXR0ZXJuLT5zZXRJbWFnZShpbWFnZSwgbV9yZXBlYXRYLCBtX3JlcGVhdFkpOwotICAgIG1fcGF0
dGVybi0+c2V0TG9jYWxNYXRyaXgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBkb3VibGUqPigmbV9w
YXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbikpOwotCi0gICAgcmV0dXJuIG1fcGF0dGVybjsKLX0K
LQotdm9pZCBQYXR0ZXJuOjpzZXRQbGF0Zm9ybVBhdHRlcm5TcGFjZVRyYW5zZm9ybSgpCi17Ci0g
ICAgaWYgKG1fcGF0dGVybikKLSAgICAgICAgbV9wYXR0ZXJuLT5zZXRMb2NhbE1hdHJpeChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGRvdWJsZSo+KCZtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9u
KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
UGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhy
ZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJQbHVnaW5MYXllcldlYktpdFRocmVhZC5oIgotCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgot
I2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbHVnaW5M
YXllcldlYktpdFRocmVhZDo6UGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQoUGx1Z2luVmlldyogcGx1
Z2luVmlldykKLSAgICA6IExheWVyV2ViS2l0VGhyZWFkKExheWVyLCAwKQotICAgICwgbV9uZWVk
c0Rpc3BsYXkoZmFsc2UpCi17Ci0gICAgc2V0UGx1Z2luVmlldyhwbHVnaW5WaWV3KTsKLX0KLQot
UGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQ6On5QbHVnaW5MYXllcldlYktpdFRocmVhZCgpCi17Ci19
Ci0KLXZvaWQgUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFBsdWdpblZpZXcoUGx1Z2luVmll
dyogcGx1Z2luVmlldykKLXsKLSAgICBtX3BsdWdpblZpZXcgPSBwbHVnaW5WaWV3OwotICAgIHNl
dE5lZWRzVGV4dHVyZShpc0RyYXdhYmxlKCkgJiYgcGx1Z2luVmlldyk7Ci0KLSAgICBpZiAobV9w
bHVnaW5WaWV3KQotICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgLy8gV2UgY2FuJ3QgYWZmb3JkIHRvIHdhaXQgdW50aWwgdGhlIG5leHQgY29tbWl0Ci0gICAg
ICAgIC8vIHRvIHNldCB0aGUgbV9wbHVnaW5WaWV3IHRvIDAgaW4gdGhlIGltcGwsIGJlY2F1c2Ug
aXQgaXMKLSAgICAgICAgLy8gYWJvdXQgdG8gYmUgZGVzdHJveWVkLgotICAgICAgICBsYXllckNv
bXBvc2l0aW5nVGhyZWFkKCktPnNldFBsdWdpblZpZXcoMCk7Ci0gICAgICAgIHNldE5lZWRzQ29t
bWl0KCk7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkOjpzZXRIb2xl
UHVuY2hSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgbV9ob2xlUHVuY2hSZWN0ID0g
cmVjdDsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIFBsdWdpbkxheWVyV2ViS2l0
VGhyZWFkOjpzZXROZWVkc0Rpc3BsYXkoKQotewotICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsK
LSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIFBsdWdpbkxheWVyV2ViS2l0VGhyZWFk
Ojp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX25lZWRzRGlz
cGxheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLQot
ICAgIGlmICghbV9wbHVnaW5WaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BsdWdpblZp
ZXctPnVwZGF0ZUJ1ZmZlcihJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fcGx1Z2luVmlldy0+
c2l6ZSgpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsdWdpbkxheWVy
V2ViS2l0VGhyZWFkLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
LCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWRfaAot
I2RlZmluZSBQbHVnaW5MYXllcldlYktpdFRocmVhZF9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJMYXllcldlYktpdFRocmVhZC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsdWdpblZpZXc7Ci0KLWNsYXNzIFBsdWdpbkxheWVyV2Vi
S2l0VGhyZWFkIDogcHVibGljIExheWVyV2ViS2l0VGhyZWFkIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQbHVnaW5MYXllcldlYktpdFRocmVhZD4gY3JlYXRlKFBsdWdpblZpZXcq
IHBsdWdpblZpZXcpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpbkxh
eWVyV2ViS2l0VGhyZWFkKHBsdWdpblZpZXcpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5QbHVn
aW5MYXllcldlYktpdFRocmVhZCgpOwotCi0gICAgdm9pZCBzZXRQbHVnaW5WaWV3KFBsdWdpblZp
ZXcqKTsKLSAgICB2b2lkIHNldEhvbGVQdW5jaFJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0gICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAg
UGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQoUGx1Z2luVmlldyopOwotICAgIGJvb2wgbV9uZWVkc0Rp
c3BsYXk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNlbmRpZiAvLyBQbHVnaW5MYXllcldlYktpdFRocmVh
ZF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1Np
bXBsZUZvbnREYXRhQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9TaW1wbGVGb250RGF0YUJsYWNrQmVycnkuY3Bw
CShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L1NpbXBsZUZvbnREYXRhQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMjE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0K
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9u
dENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiSVR5cGVV
dGlscy5oIgotCi0jaW5jbHVkZSA8ZnNfYXBpLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS9ub3JtbHpy
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBmbG9hdCBGU0ZpeGVk
VG9GbG9hdChGU19GSVhFRCBuKSB7IHJldHVybiBuIC8gNjU1MzYuMDsgfQotCi0jZGVmaW5lIG9w
ZW5UeXBlVGFnKGEsIGIsIGMsIGQpIChGU19VTE9ORykoKGEgPDwgMjQpIHwgKGIgPDwgMTYpIHwg
KGMgPDwgOCkgfCBkKQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewot
ICAgIEZTX0ZJWEVEIGFzY2VuZGVyID0gMDsKLSAgICBGU19GSVhFRCBkZXNjZW5kZXIgPSAwOwot
ICAgIEZTX0ZJWEVEIGxlYWRpbmcgPSAwOwotICAgIEZzQXNjRGVzY0xlYWRTb3VyY2Ugc291cmNl
OwotICAgIEZTX0xPTkcgcmVzdWx0OwotICAgIGlmIChtX3BsYXRmb3JtRGF0YS5zaXplKCkgPiAw
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBoYWNrISBGU19nZXRfYXNjZW5kZXJfZGVzY2VuZGVyX2xl
YWRpbmcoKSByZXR1cm5zIEVSUl9OT19DVVJSRU5UX1NGTlQgd2hlbiBzaXplIGlzIDAsIGV2ZW4g
dGhvdWdoIHdlIGNhbGxlZCBGU19zZXRfc2NhbGUgYW5kIG1fcGxhdGZvcm1EYXRhLmZvbnQoKS0+
Y3VyX3NmbnQgaXMgbm90IDAKLSAgICAgICAgcmVzdWx0ID0gRlNfZ2V0X2FzY2VuZGVyX2Rlc2Nl
bmRlcl9sZWFkaW5nKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgJmFzY2VuZGVyLCAmZGVzY2VuZGVy
LCAmbGVhZGluZywgJnNvdXJjZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQgPT0gU1VDQ0VTUyk7Ci0gICAgfQotCi0gICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoRlNf
Uk9VTkQoYXNjZW5kZXIpKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoRlNfUk9VTkQo
ZGVzY2VuZGVyKSk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGlUeXBlRml4ZWRUb0Zs
b2F0KGxlYWRpbmcpKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYo
bV9mb250TWV0cmljcy5hc2NlbnQoKSkgKyBscm91bmRmKG1fZm9udE1ldHJpY3MuZGVzY2VudCgp
KSArIGxyb3VuZGYobV9mb250TWV0cmljcy5saW5lR2FwKCkpKTsKLQotICAgIEZPTlRfTUVUUklD
UyBtZXRyaWNzOwotICAgIHJlc3VsdCA9IEZTX2ZvbnRfbWV0cmljcyhtX3BsYXRmb3JtRGF0YS5m
b250KCksICZtZXRyaWNzKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IFNV
Q0NFU1MpOwotCi0gICAgLy8gbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKEZTX2dldF9kZXNp
Z25fdW5pdHMobV9wbGF0Zm9ybURhdGEoKS5mb250KCkpKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dFVuaXRzUGVyRW0obWV0cmljcy51bml0c1BlckVtKTsKLQotICAgIEZTX1VTSE9SVCB4UmFuZ2Ug
PSBtZXRyaWNzLmZvbnRfYmJveC54TWF4IC0gbWV0cmljcy5mb250X2Jib3gueE1pbjsKLSAgICBt
X21heENoYXJXaWR0aCA9IHJvdW5kZigoeFJhbmdlICogcm91bmRmKG1fcGxhdGZvcm1EYXRhLnNp
emUoKSkpIC8gbWV0cmljcy51bml0c1BlckVtKTsKLQotICAgIFRURl9PUzIgb3MyOwotICAgIGlm
IChGU19nZXRfdGFibGVfc3RydWN0dXJlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgVEFHX09TMiwg
Jm9zMikgPT0gU1VDQ0VTUyAmJiBvczIuc3hIZWlnaHQgJiYgb3MyLnhBdmdDaGFyV2lkdGgpIHsK
LSAgICAgICAgRlNfVVNIT1JUIHlwcGVtID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpLT5scG07Ci0g
ICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChzdGF0aWNfY2FzdDxmbG9hdD4ob3MyLnN4
SGVpZ2h0KSAqIHlwcGVtIC8gbWV0cmljcy51bml0c1BlckVtKTsKLSAgICAgICAgbV9hdmdDaGFy
V2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4ob3MyLnhBdmdDaGFyV2lkdGgpICogeXBwZW0gLyBt
ZXRyaWNzLnVuaXRzUGVyRW07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSEFDSwotICAgICAg
ICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQobV9mb250TWV0cmljcy5hc2NlbnQoKSAqIDAuNTYp
OwotICAgICAgICBtX2ZvbnRNZXRyaWNzLnNldEhhc1hIZWlnaHQoZmFsc2UpOwotICAgICAgICBt
X2F2Z0NoYXJXaWR0aCA9IG1fZm9udE1ldHJpY3MueEhlaWdodCgpOwotCi0gICAgICAgIEdseXBo
UGFnZSogZ2x5cGhQYWdlWmVybyA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodGhp
cywgMCktPnBhZ2UoKTsKLQotICAgICAgICBpZiAoZ2x5cGhQYWdlWmVybykgewotICAgICAgICAg
ICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgeENoYXIgPSAneCc7Ci0gICAgICAgICAgICBjb25zdCBH
bHlwaCB4R2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoeENoYXIp
LmdseXBoOwotCi0gICAgICAgICAgICBpZiAoeEdseXBoKSB7Ci0gICAgICAgICAgICAgICAgLy8g
SW4gd2lkdGhGb3JHbHlwaCgpLCB4R2x5cGggd2lsbCBiZSBjb21wYXJlZCB3aXRoCi0gICAgICAg
ICAgICAgICAgLy8gbV96ZXJvV2lkdGhTcGFjZUdseXBoLCB3aGljaCBpc24ndCBpbml0aWFsaXpl
ZCB5ZXQgaGVyZS4KLSAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIGl0IHdpdGggemVybyB0
byBtYWtlIHN1cmUgd2lkdGhGb3JHbHlwaCgpIHJldHVybnMKLSAgICAgICAgICAgICAgICAvLyB0
aGUgcmlnaHQgd2lkdGguCi0gICAgICAgICAgICAgICAgbV96ZXJvV2lkdGhTcGFjZUdseXBoID0g
MDsKLSAgICAgICAgICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHdpZHRoRm9yR2x5cGgoeEdseXBo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX3BsYXRmb3Jt
RGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrKCkpCi0gICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBGU19nZXRfdGFibGUobV9wbGF0
Zm9ybURhdGEuZm9udCgpLCBvcGVuVHlwZVRhZygndicsICdoJywgJ2UnLCAnYScpLCBUQkxfUVVF
UlksIDApCi0gICAgICAgICAgICB8fCBGU19nZXRfdGFibGUobV9wbGF0Zm9ybURhdGEuZm9udCgp
LCBvcGVuVHlwZVRhZygnVicsICdPJywgJ1InLCAnRycpLCBUQkxfUVVFUlksIDApOwotfQotCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQotewotfQotCi12b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQotewotfQotCi1QYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0
b3IpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgc2NhbGVkU2l6ZSA9IGxyb3VuZGYoZm9udERl
c2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogc2NhbGVGYWN0b3IpOwotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU2ltcGxlRm9udERhdGEoCi0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEobV9wbGF0
Zm9ybURhdGEuZm9udCgpLT5jdXJfbGZudC0+bmFtZSwKLSAgICAgICAgICAgIHNjYWxlZFNpemUs
Ci0gICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksCi0gICAgICAgICAg
ICBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksCi0gICAgICAgICAgICBtX3BsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpLAotICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEud2lkdGhW
YXJpYW50KCkpLAotICAgICAgICBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKLX0KLQotYm9vbCBT
aW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKSBjb25zdAotewotICAgIGludCBwb3NpdGlvbiA9IDA7Ci0KLSAgICB3aGls
ZSAocG9zaXRpb24gPCBsZW5ndGgpIHsKLSAgICAgICAgLy8gRklYTUU6IHVzZSBzaGFwZXI/Ci0g
ICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotICAgICAgICBpbnQgbmV4dFBvc2l0aW9uID0gcG9z
aXRpb247Ci0gICAgICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIG5leHRQb3NpdGlvbiwgbGVuZ3Ro
LCBjaGFyYWN0ZXIpOwotCi0gICAgICAgIEZTX1VTSE9SVCBnbHlwaCA9IEZTX21hcF9jaGFyKG1f
cGxhdGZvcm1EYXRhLmZvbnQoKSwgc3RhdGljX2Nhc3Q8RlNfVUxPTkc+KGNoYXJhY3RlcikpOwot
ICAgICAgICBpZiAoIWdseXBoKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IHBvc2l0aW9uID0gbmV4dFBvc2l0aW9uOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCi17Ci0gICAgbV90cmVhdEFz
Rml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4ZWRQaXRjaCgpOwotfQotCi1GbG9hdFJl
Y3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0Ci17Ci0gICAgRlNfR0xZUEhNQVAqIGdseXBobWFwID0gRlNfZ2V0X2dseXBobWFwKG1fcGxh
dGZvcm1EYXRhLmZvbnQoKSwgZ2x5cGgsIEZTX01BUF9ESVNUQU5DRUZJRUxEIHwgRlNfTUFQX0dS
QVlNQVA4KTsKLSAgICBpZiAoIWdseXBobWFwKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7
Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRzKGdseXBobWFwLT5sb194LCBnbHlwaG1hcC0+aGVpZ2h0
IC0gZ2x5cGhtYXAtPmhpX3ksIGdseXBobWFwLT53aWR0aCwgZ2x5cGhtYXAtPmhlaWdodCk7Ci0g
ICAgRlNfZnJlZV9jaGFyKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgZ2x5cGhtYXApOwotCi0gICAg
cmV0dXJuIGJvdW5kczsKLX0KLQotZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBGU19TSE9SVCBpZHgsIGlkeTsKLSAg
ICBGU19GSVhFRCBkeCwgZHk7Ci0gICAgRlNfRklYRUQgczAwLCBzMDEsIHMxMCwgczExOwotICAg
IGJvb2wgbmVlZHNGYWtlQm9sZFJlc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgp
ICYmIG1fdHJlYXRBc0ZpeGVkUGl0Y2g7Ci0KLSAgICBpZiAobmVlZHNGYWtlQm9sZFJlc2V0KSB7
Ci0gICAgICAgIEZTX2dldF9zY2FsZShtX3BsYXRmb3JtRGF0YS5mb250KCksICZzMDAsICZzMDEs
ICZzMTAsICZzMTEpOwotICAgICAgICBGU19zZXRfYm9sZF9wY3QobV9wbGF0Zm9ybURhdGEuZm9u
dCgpLCAwKTsKLSAgICAgICAgRlNfc2V0X3NjYWxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgczAw
LCBzMDEsIHMxMCwgczExKTsKLSAgICB9Ci0KLSAgICBpZiAoRlNfZ2V0X2FkdmFuY2UobV9wbGF0
Zm9ybURhdGEuZm9udCgpLCBnbHlwaCwgRlNfTUFQX0RJU1RBTkNFRklFTEQgfCBGU19NQVBfR1JB
WU1BUDgsICZpZHgsICZpZHksICZkeCwgJmR5KSAhPSBTVUNDRVNTKQotICAgICAgICBkeCA9IDA7
Ci0KLSAgICBpZiAobmVlZHNGYWtlQm9sZFJlc2V0KSB7Ci0gICAgICAgIEZTX3NldF9ib2xkX3Bj
dChtX3BsYXRmb3JtRGF0YS5mb250KCksIElUWVBFRkFLRUJPTERBTU9VTlQpOwotICAgICAgICBG
U19zZXRfc2NhbGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBzMDAsIHMwMSwgczEwLCBzMTEpOwot
ICAgIH0KLQotICAgIHJldHVybiBpVHlwZUZpeGVkVG9GbG9hdChkeCk7Ci19Ci0KLWJvb2wgU2lt
cGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAotewotICAgIGlmICghbV9jb21i
aW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQpCi0gICAgICAgIG1fY29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2VTdXBwb3J0ID0gYWRvcHRQdHIobmV3IEhhc2hNYXA8U3RyaW5nLCBib29sPik7
Ci0KLSAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBib29sPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9
IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0LT5hZGQoU3RyaW5nKGNoYXJhY3Rl
cnMsIGxlbmd0aCksIGZhbHNlKTsKLSAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIFVFcnJvckNvZGUg
ZXJyb3IgPSBVX1pFUk9fRVJST1I7Ci0gICAgVmVjdG9yPFVDaGFyLCA0PiBub3JtYWxpemVkQ2hh
cmFjdGVycyhsZW5ndGgpOwotICAgIGludDMyX3Qgbm9ybWFsaXplZExlbmd0aCA9IHVub3JtX25v
cm1hbGl6ZShjaGFyYWN0ZXJzLCBsZW5ndGgsIFVOT1JNX05GQywgVU5PUk1fVU5JQ09ERV8zXzIs
ICZub3JtYWxpemVkQ2hhcmFjdGVyc1swXSwgbGVuZ3RoLCAmZXJyb3IpOwotICAgIGlmIChVX0ZB
SUxVUkUoZXJyb3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgcG9zaXRpb24g
PSAwOwotICAgIHdoaWxlIChwb3NpdGlvbiA8IG5vcm1hbGl6ZWRMZW5ndGgpIHsKLSAgICAgICAg
VUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsK
LSAgICAgICAgVTE2X05FWFQobm9ybWFsaXplZENoYXJhY3RlcnMsIG5leHRQb3NpdGlvbiwgbm9y
bWFsaXplZExlbmd0aCwgY2hhcmFjdGVyKTsKLQotICAgICAgICBpZiAoIXVfaGFzQmluYXJ5UHJv
cGVydHkoY2hhcmFjdGVyLCBVQ0hBUl9ERUZBVUxUX0lHTk9SQUJMRV9DT0RFX1BPSU5UKSkgewot
ICAgICAgICAgICAgRlNfVVNIT1JUIGdseXBoID0gRlNfbWFwX2NoYXIobV9wbGF0Zm9ybURhdGEu
Zm9udCgpLCBzdGF0aWNfY2FzdDxGU19VTE9ORz4oY2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBp
ZiAoIWdseXBoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHBvc2l0aW9uID0gbmV4dFBvc2l0aW9uOwotICAgIH0KLQotICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNv
bXBvc2l0aW5nVGhyZWFkLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVh
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgiCi0KLSNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLSNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlcjsKLXVzaW5nIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6QnVmZmVyVHlwZTsKLQotI2RlZmluZSBERUJVR19URVhUVVJFX01F
TU9SWV9VU0FHRSAwCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGludCBk
ZWZhdWx0TWVtb3J5TGltaXQgPSA2NCAqIDEwMjQgKiAxMDI0OyAvLyBNZWFzdXJlZCBpbiBieXRl
cy4KLQotLy8gVXNlZCB0byBwcm90ZWN0IGEgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlIGZyb20gYmVp
bmcgaW1tZWRpYXRlbHkgZXZpY3RlZAotLy8gYmVmb3JlIHNvbWVvbmUgaGFzIGEgY2hhbmNlIHRv
IHByb3RlY3QgaXQgZm9yIGxlZ2l0aW1hdGUgcmVhc29ucy4KLWNsYXNzIFRleHR1cmVQcm90ZWN0
b3IgewotcHVibGljOgotICAgIFRleHR1cmVQcm90ZWN0b3IoTGF5ZXJUZXh0dXJlKiB0ZXh0dXJl
KQotICAgICAgICA6IG1fdGV4dHVyZSh0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgbV90ZXh0dXJl
LT5wcm90ZWN0KCk7Ci0gICAgfQotCi0gICAgflRleHR1cmVQcm90ZWN0b3IoKQotICAgIHsKLSAg
ICAgICAgbV90ZXh0dXJlLT51bnByb3RlY3QoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTGF5
ZXJUZXh0dXJlKiBtX3RleHR1cmU7Ci19OwotCi1UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVh
ZDo6VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKQotICAgIDogbV9tZW1vcnlVc2FnZSgw
KQotICAgICwgbV9tZW1vcnlMaW1pdChkZWZhdWx0TWVtb3J5TGltaXQpCi17Ci19Ci0KLUJ1ZmZl
ciogVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OmNyZWF0ZUJ1ZmZlcihjb25zdCBJbnRT
aXplJiBzaXplLCBCdWZmZXJUeXBlIHR5cGUpCi17Ci0gICAgcmV0dXJuIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6Y3JlYXRlQnVmZmVyKHNpemUsIHR5cGUpOwotfQotCi12b2lkIFRl
eHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjpjb2xsZWN0R2FyYmFnZSgpCi17Ci0gICAgZm9y
IChHYXJiYWdlOjppdGVyYXRvciBpdCA9IG1fZ2FyYmFnZS5iZWdpbigpOyBpdCAhPSBtX2dhcmJh
Z2UuZW5kKCk7ICsraXQpCi0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
ZGVzdHJveUJ1ZmZlcigoKml0KS5idWZmZXIpOwotCi0gICAgbV9nYXJiYWdlLmNsZWFyKCk7Ci19
Ci0KLXZvaWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVSZXNpemVkKExh
eWVyVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgb2xkU2l6ZSkKLXsKLSAgICBpbnQg
ZGVsdGEgPSAodGV4dHVyZS0+d2lkdGgoKSAqIHRleHR1cmUtPmhlaWdodCgpIC0gb2xkU2l6ZS53
aWR0aCgpICogb2xkU2l6ZS5oZWlnaHQoKSkgKiBMYXllclRleHR1cmU6OmJ5dGVzUGVyUGl4ZWwo
KTsKLSAgICBpbmNNZW1vcnlVc2FnZShkZWx0YSk7Ci0gICAgaWYgKGRlbHRhID4gMCkKLSAgICAg
ICAgcHJ1bmUoKTsKLX0KLQotdm9pZCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4
dHVyZVNpemVJbkJ5dGVzQ2hhbmdlZChMYXllclRleHR1cmUqLCBpbnQgZGVsdGEpCi17Ci0gICAg
aW5jTWVtb3J5VXNhZ2UoZGVsdGEpOwotICAgIGlmIChkZWx0YSA+IDApCi0gICAgICAgIHBydW5l
KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVEZXN0
cm95ZWQoTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIGlmICh0ZXh0dXJlLT5pc0NvbG9y
KCkpIHsKLSAgICAgICAgbV9nYXJiYWdlLmFwcGVuZChab21iaWVUZXh0dXJlKHRleHR1cmUpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFRleHR1cmVTZXQ6Oml0ZXJhdG9yIGl0ID0g
bV90ZXh0dXJlcy5maW5kKHRleHR1cmUpOwotICAgIGV2aWN0KGl0KTsKLSAgICBtX3RleHR1cmVz
LnJlbW92ZShpdCk7Ci19Ci0KLWJvb2wgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6Omlu
c3RhbGwoTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiBzaXplLCBCdWZmZXJU
eXBlIHR5cGUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmICghdGV4dHVyZS0+YnVmZmVyKCkgJiYgIXNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IEJ1ZmZlciogYnVmZmVyID0gY3JlYXRlQnVmZmVyKHNpemUsIHR5cGUpOwotICAgICAgICBBU1NF
UlQoYnVmZmVyKTsKLQotICAgICAgICB0ZXh0dXJlLT5zZXRCdWZmZXIoYnVmZmVyKTsKLSAgICAg
ICAgdGV4dHVyZS0+c2V0U2l6ZShzaXplKTsKLSAgICAgICAgdGV4dHVyZVJlc2l6ZWQodGV4dHVy
ZSwgSW50U2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoIXRleHR1cmUtPmlzQ29sb3IoKSkKLSAg
ICAgICAgbV90ZXh0dXJlcy5hZGQodGV4dHVyZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6cmVzaXplVGV4dHVyZShMYXllclRl
eHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFNpemUmIHNpemUsIEJ1ZmZlclR5cGUgdHlwZSkKLXsK
LSAgICBJbnRTaXplIG9sZFNpemUgPSB0ZXh0dXJlLT5zaXplKCk7Ci0KLSAgICAvLyBSZWFsbG9j
YXRlIHRoZSBidWZmZXIKLSAgICBCdWZmZXIqIGJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlcihzaXplLCB0
eXBlKTsKLSAgICBBU1NFUlQoYnVmZmVyKTsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczo6ZGVzdHJveUJ1ZmZlcih0ZXh0dXJlLT5idWZmZXIoKSk7Ci0gICAgdGV4dHVyZS0+
c2V0QnVmZmVyKGJ1ZmZlcik7Ci0gICAgdGV4dHVyZS0+c2V0U2l6ZShzaXplKTsKLSAgICB0ZXh0
dXJlUmVzaXplZCh0ZXh0dXJlLCBvbGRTaXplKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6ZXZpY3QoY29uc3QgVGV4dHVyZVNldDo6
aXRlcmF0b3ImIGl0KQotewotICAgIGlmIChpdCA9PSBtX3RleHR1cmVzLmVuZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBMYXllclRleHR1cmUqIHRleHR1cmUgPSAqaXQ7Ci0gICAgaWYgKHRl
eHR1cmUtPmJ1ZmZlcigpKSB7Ci0gICAgICAgIGludCBkZWx0YSA9IDA7Ci0gICAgICAgIGRlbHRh
ICs9IHRleHR1cmUtPndpZHRoKCkgKiB0ZXh0dXJlLT5oZWlnaHQoKSAqIExheWVyVGV4dHVyZTo6
Ynl0ZXNQZXJQaXhlbCgpOwotICAgICAgICBkZWx0YSArPSB0ZXh0dXJlLT5zaXplSW5CeXRlcygp
OwotICAgICAgICBpZiAoZGVsdGEpCi0gICAgICAgICAgICBkZWNNZW1vcnlVc2FnZShkZWx0YSk7
Ci0gICAgICAgIG1fZ2FyYmFnZS5hcHBlbmQoWm9tYmllVGV4dHVyZSh0ZXh0dXJlKSk7Ci0gICAg
fQotCi0gICAgdGV4dHVyZS0+c2V0QnVmZmVyKDApOwotfQotCi12b2lkIFRleHR1cmVDYWNoZUNv
bXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlQWNjZXNzZWQoTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlKQot
ewotICAgIGlmICh0ZXh0dXJlLT5pc0NvbG9yKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRl
eHR1cmVTZXQ6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHRleHR1cmUpOwotICAgIGlm
IChpdCA9PSBtX3RleHR1cmVzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RleHR1
cmVzLnJlbW92ZShpdCk7Ci0gICAgbV90ZXh0dXJlcy5hZGQodGV4dHVyZSk7Ci19Ci0KLVRleHR1
cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKiB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgp
Ci17Ci0gICAgc3RhdGljIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKiBzdGF0aWNDYWNo
ZSA9IG5ldyBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDsKLSAgICByZXR1cm4gc3RhdGlj
Q2FjaGU7Ci19Ci0KLXZvaWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnBydW5lKHNp
emVfdCBsaW1pdCkKLXsKLSAgICB3aGlsZSAobV9tZW1vcnlVc2FnZSA+IGxpbWl0KSB7Ci0gICAg
ICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChUZXh0dXJlU2V0OjppdGVyYXRv
ciBpdCA9IG1fdGV4dHVyZXMuYmVnaW4oKTsgaXQgIT0gbV90ZXh0dXJlcy5lbmQoKTsgKytpdCkg
ewotICAgICAgICAgICAgTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlID0gKml0OwotICAgICAgICAgICAg
aWYgKHRleHR1cmUtPmlzUHJvdGVjdGVkKCkgfHwgKHRleHR1cmUtPnNpemUoKS5pc0VtcHR5KCkg
JiYgIXRleHR1cmUtPnNpemVJbkJ5dGVzKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgZXZpY3QoaXQpOwotICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6
Y2xlYXIoKQotewotICAgIG1fY29sb3JzLmNsZWFyKCk7Ci0gICAgY29sbGVjdEdhcmJhZ2UoKTsK
LX0KLQotdm9pZCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6c2V0TWVtb3J5VXNhZ2Uo
c2l6ZV90IG1lbW9yeVVzYWdlKQotewotICAgIG1fbWVtb3J5VXNhZ2UgPSBtZW1vcnlVc2FnZTsK
LSNpZiBERUJVR19URVhUVVJFX01FTU9SWV9VU0FHRQotICAgIGZwcmludGYoc3RkZXJyLCAiVGV4
dHVyZSBtZW1vcnkgdXNhZ2UgJXUga0JcbiIsIG1fbWVtb3J5VXNhZ2UgLyAxMDI0KTsKLSNlbmRp
ZgotfQotCi1QYXNzUmVmUHRyPExheWVyVGV4dHVyZT4gVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdU
aHJlYWQ6OnRleHR1cmVGb3JDb250ZW50cyhCdWZmZXIqIGNvbnRlbnRzKQotewotICAgIFJlZlB0
cjxMYXllclRleHR1cmU+IHRleHR1cmUgPSBjcmVhdGVUZXh0dXJlKCk7Ci0KLSAgICAvLyBQcm90
ZWN0IG5ld2x5IGNyZWF0ZWQgdGV4dHVyZSBmcm9tIGJlaW5nIGV2aWN0ZWQuCi0gICAgVGV4dHVy
ZVByb3RlY3RvciBwcm90ZWN0b3IodGV4dHVyZS5nZXQoKSk7Ci0KLSAgICB0ZXh0dXJlLT51cGRh
dGVDb250ZW50cyhjb250ZW50cyk7Ci0KLSAgICByZXR1cm4gdGV4dHVyZS5yZWxlYXNlKCk7Ci19
Ci0KLVBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVh
ZDo6dGV4dHVyZUZvckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICAvLyBKdXN0IHRv
IG1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgZm9vbGVkIGJ5IHNvbWUgbWFsaWNpb3VzIHdlYiBwYWdl
Ci0gICAgLy8gaW50byBjYWNoaW5nIG1pbGxpb25zIG9mIGNvbG9yIHRleHR1cmVzLgotICAgIGlm
IChtX2NvbG9ycy5zaXplKCkgPiAxMDApCi0gICAgICAgIG1fY29sb3JzLmNsZWFyKCk7Ci0KLSAg
ICBDb2xvclRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jb2xvcnMuZmluZChjb2xvcik7Ci0g
ICAgUmVmUHRyPExheWVyVGV4dHVyZT4gdGV4dHVyZTsKLSAgICBpZiAoaXQgPT0gbV9jb2xvcnMu
ZW5kKCkpIHsKLSAgICAgICAgdGV4dHVyZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKHRydWUgLyog
aXNDb2xvciAqLyk7Ci0jaWYgREVCVUdfVEVYVFVSRV9NRU1PUllfVVNBR0UKLSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDcmVhdGluZyB0ZXh0dXJlIDB4JXggZm9yIGNvbG9yIDB4JXhcbiIsIHRl
eHR1cmUuZ2V0KCksIGNvbG9yLnJnYigpKTsKLSNlbmRpZgotICAgICAgICBtX2NvbG9ycy5zZXQo
Y29sb3IsIHRleHR1cmUpOwotICAgIH0gZWxzZQotICAgICAgICB0ZXh0dXJlID0gKCppdCkudmFs
dWU7Ci0KLSAgICAvLyBDb2xvciB0ZXh0dXJlcyBjYW4ndCBiZSBldmljdGVkLCBzbyBubyBuZWVk
IGZvciBUZXh0dXJlUHJvdGVjdG9yLgotCi0gICAgaWYgKHRleHR1cmUtPnNpemUoKSAhPSBJbnRT
aXplKDEsIDEpKQotICAgICAgICB0ZXh0dXJlLT5zZXRDb250ZW50c1RvQ29sb3IoY29sb3IpOwot
Ci0gICAgcmV0dXJuIHRleHR1cmUucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPExheWVyVGV4
dHVyZT4gVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0
IFJlZlB0cjxMYXllclRleHR1cmU+JiB0ZXh0dXJlSW4sIEJ1ZmZlciogY29udGVudHMpCi17Ci0g
ICAgUmVmUHRyPExheWVyVGV4dHVyZT4gdGV4dHVyZSh0ZXh0dXJlSW4pOwotCi0gICAgLy8gSWYg
dGhlIHRleHR1cmUgd2FzIDAsIG9yIG5lZWRzIHRvIHRyYW5zaXRpb24gZnJvbSBhIHNvbGlkIGNv
bG9yIHRleHR1cmUgdG8gYSBjb250ZW50cyB0ZXh0dXJlLAotICAgIC8vIGNyZWF0ZSBhIG5ldyB0
ZXh0dXJlLgotICAgIGlmICghdGV4dHVyZSB8fCB0ZXh0dXJlLT5pc0NvbG9yKCkpCi0gICAgICAg
IHRleHR1cmUgPSBjcmVhdGVUZXh0dXJlKCk7Ci0KLSAgICAvLyBQcm90ZWN0IG5ld2x5IGNyZWF0
ZWQgdGV4dHVyZSBmcm9tIGJlaW5nIGV2aWN0ZWQuCi0gICAgVGV4dHVyZVByb3RlY3RvciBwcm90
ZWN0b3IodGV4dHVyZS5nZXQoKSk7Ci0KLSAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhjb250
ZW50cyk7Ci0KLSAgICByZXR1cm4gdGV4dHVyZS5yZWxlYXNlKCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJl
Q2FjaGVDb21wb3NpdGluZ1RocmVhZC5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBUZXh0dXJlQ2Fj
aGVDb21wb3NpdGluZ1RocmVhZF9oCi0jZGVmaW5lIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkNv
bG9yLmgiCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCi0jaW5jbHVkZSAiTGF5ZXJUaWxlSW5k
ZXguaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgSW50UmVjdDsKLQotLy8gQSBMUlUgY2FjaGUgZm9yIE9wZW5HTCB0
ZXh0dXJlcy4KLWNsYXNzIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCk7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZnJpZW5kIFRleHR1cmVDYWNoZUNv
bXBvc2l0aW5nVGhyZWFkKiB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpOwotCi0gICAg
Ly8gQ3JlYXRlcyBhIG5ldyB0ZXh0dXJlIG1hbmFnZWQgYnkgdGhpcyBjYWNoZS4KLSAgICBQYXNz
UmVmUHRyPExheWVyVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gTGF5ZXJUZXh0dXJlOjpjcmVhdGUoKTsKLSAgICB9Ci0KLSAgICAvLyBSZXRyaWV2ZSBhIHRl
eHR1cmUgZnJvbSB0aGUgY2FjaGUuCi0gICAgUGFzc1JlZlB0cjxMYXllclRleHR1cmU+IHRleHR1
cmVGb3JDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciopOwot
ICAgIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlPiB0ZXh0dXJlRm9yQ29sb3IoY29uc3QgQ29sb3Im
KTsKLQotICAgIC8vIFVwZGF0ZSBjb250ZW50cyBvZiBhbiBleGlzdGluZyB0ZXh0dXJlLCBvciBj
cmVhdGUgYSBuZXcgb25lIGlmIHRleHR1cmUgaXMgMC4KLSAgICBQYXNzUmVmUHRyPExheWVyVGV4
dHVyZT4gdXBkYXRlQ29udGVudHMoY29uc3QgUmVmUHRyPExheWVyVGV4dHVyZT4mLCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciopOwotCi0gICAgc2l6ZV90IG1lbW9yeVVz
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlVc2FnZTsgfQotICAgIHNpemVfdCBtZW1vcnlM
aW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5TGltaXQ7IH0KLSAgICB2b2lkIHNldE1lbW9y
eUxpbWl0KHNpemVfdCBsaW1pdCkgeyBtX21lbW9yeUxpbWl0ID0gbGltaXQ7IH0KLQotICAgIC8v
IEV2aWN0IHVucHJvdGVjdGVkIHRleHR1cmVzIHVudGlsIHdlIHJlYWNoIHRoZSBsaW1pdCBwcm92
aWRlZC4KLSAgICB2b2lkIHBydW5lKHNpemVfdCBsaW1pdCk7Ci0gICAgdm9pZCBwcnVuZSgpIHsg
cHJ1bmUobWVtb3J5TGltaXQoKSk7IH0KLQotICAgIC8vIEV2aWN0IGFsbCB0ZXh0dXJlcyBmcm9t
IHRoZSBjYWNoZS4KLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIExSVSBs
aXN0LgotICAgIHZvaWQgdGV4dHVyZUFjY2Vzc2VkKExheWVyVGV4dHVyZSopOwotCi0gICAgLy8g
RGVsZXRpbmcgZGVzdHJveWVkIHRleHR1cmVzIGlzIHByb3ZpZGVkIGFzIGEgc2VwYXJhdGUgbWV0
aG9kLCBiZWNhdXNlCi0gICAgLy8gdGhlcmUgbWlnaHQgbm90IGJlIGFuIE9wZW5HTCBjb250ZXh0
IGN1cnJlbnQgd2hlbiB0aGUgdGV4dHVyZSBkZXN0cnVjdG9yCi0gICAgLy8gd2FzIGNhbGxlZC4g
Q2FsbGluZyB0aGlzIG1ha2VzIHN1cmUgdG8gZnJlZSBhbnkgc3VjaCB0ZXh0dXJlcy4KLSAgICB2
b2lkIGNvbGxlY3RHYXJiYWdlKCk7Ci0KLSAgICB2b2lkIHRleHR1cmVEZXN0cm95ZWQoTGF5ZXJU
ZXh0dXJlKik7Ci0gICAgdm9pZCB0ZXh0dXJlUmVzaXplZChMYXllclRleHR1cmUqLCBjb25zdCBJ
bnRTaXplJiBvbGRTaXplKTsKLSAgICB2b2lkIHRleHR1cmVTaXplSW5CeXRlc0NoYW5nZWQoTGF5
ZXJUZXh0dXJlKiwgaW50IGRlbHRhKTsKLQotICAgIC8vIFVuZG8gdGhlIGVmZmVjdHMgb2YgZXZp
Y3Rpb24sIGlmIHBvc3NpYmxlLgotICAgIGJvb2wgaW5zdGFsbChMYXllclRleHR1cmUqLCBjb25z
dCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSA9IEludFNpemUoMCwgMCksIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6QnVmZmVyVHlwZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6QmFja2VkV2hlbk5lY2Vzc2FyeSk7Ci0gICAgYm9vbCByZXNpemVUZXh0dXJlKExheWVyVGV4
dHVyZSosIGNvbnN0IEludFNpemUmIG5ld1NpemUsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6QnVmZmVyVHlwZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QmFja2Vk
V2hlbk5lY2Vzc2FyeSk7Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IFpvbWJpZVRleHR1cmUgewot
ICAgICAgICBleHBsaWNpdCBab21iaWVUZXh0dXJlKExheWVyVGV4dHVyZSogdGV4dHVyZSkKLSAg
ICAgICAgICAgIDogYnVmZmVyKHRleHR1cmUtPmJ1ZmZlcigpKQotICAgICAgICAgICAgLCBzaXpl
KHRleHR1cmUtPnNpemUoKSkKLSAgICAgICAgICAgICwgc2l6ZUluQnl0ZXModGV4dHVyZS0+c2l6
ZUluQnl0ZXMoKSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlcjsKLSAgICAgICAgSW50U2l6ZSBzaXpl
OwotICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXM7Ci0gICAgfTsKLSAgICB0eXBlZGVmIExpc3RI
YXNoU2V0PExheWVyVGV4dHVyZSogPiBUZXh0dXJlU2V0OwotICAgIHR5cGVkZWYgSGFzaE1hcDxU
aWxlSW5kZXgsIFJlZlB0cjxMYXllclRleHR1cmU+ID4gVGV4dHVyZU1hcDsKLSAgICB0eXBlZGVm
IFZlY3Rvcjxab21iaWVUZXh0dXJlPiBHYXJiYWdlOwotCi0gICAgVGV4dHVyZUNhY2hlQ29tcG9z
aXRpbmdUaHJlYWQoKTsKLSAgICB+VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKTsKLQot
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBjcmVhdGVCdWZmZXIo
Y29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6QnVmZmVyVHlwZSk7Ci0KLSAgICB2b2lkIGluY01lbW9yeVVzYWdlKGludCBkZWx0YSkgeyBz
ZXRNZW1vcnlVc2FnZShtZW1vcnlVc2FnZSgpICsgZGVsdGEpOyB9Ci0gICAgdm9pZCBkZWNNZW1v
cnlVc2FnZShpbnQgZGVsdGEpIHsgc2V0TWVtb3J5VXNhZ2UobWVtb3J5VXNhZ2UoKSAtIGRlbHRh
KTsgfQotICAgIHZvaWQgc2V0TWVtb3J5VXNhZ2Uoc2l6ZV90KTsKLQotICAgIHZvaWQgZXZpY3Qo
Y29uc3QgVGV4dHVyZVNldDo6aXRlcmF0b3ImKTsKLQotICAgIC8vIExSVSBzZXQgb2Ygd2VhayBw
b2ludGVycyB0byB0ZXh0dXJlcy4KLSAgICBUZXh0dXJlU2V0IG1fdGV4dHVyZXM7Ci0gICAgc2l6
ZV90IG1fbWVtb3J5VXNhZ2U7Ci0gICAgc2l6ZV90IG1fbWVtb3J5TGltaXQ7Ci0KLSAgICBzdHJ1
Y3QgQ29sb3JIYXNoIHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ29sb3Im
IGtleSkgeyByZXR1cm4gV1RGOjppbnRIYXNoKGtleS5yZ2IoKSk7IH0KLSAgICAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKSB7IHJldHVybiBhID09
IGI7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwotICAgIH07Ci0gICAgc3RydWN0IENvbG9ySGFzaFRyYWl0cyA6IFdURjo6
R2VuZXJpY0hhc2hUcmFpdHM8Q29sb3I+IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IHRydWU7Ci0gICAgICAgIC8vIFRoZSBkZWxldGVkIHZhbHVlIGlzIGFu
IGludmFsaWQgY29sb3Igd2l0aCBhbiBSR0IgdmFsdWUgb2YgMHhGRkZGRkZGRi4KLSAgICAgICAg
Ly8gU3VjaCB2YWx1ZXMgZG8gbm90IG5hdHVyYWxseSBvY2N1ciBhcyBjb2xvcnMuCi0gICAgICAg
IC8vIEFuZCBlbXB0eSB2YWx1ZSBpcyBhbiBpbnZhbGlkIGNvbG9yIHdpdGggYW4gUkdCIHZhbHVl
IG9mIDB4MC4KLSAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKENvbG9y
JiBzbG90KSB7IG5ldyAoJnNsb3QpIENvbG9yKCk7ICpyZWludGVycHJldF9jYXN0PFJHQkEzMio+
KCZzbG90KSA9IENvbG9yOjp3aGl0ZTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRW
YWx1ZShjb25zdCBDb2xvciYgdmFsdWUpIHsgcmV0dXJuICF2YWx1ZS5pc1ZhbGlkKCkgJiYgdmFs
dWUucmdiKCkgPT0gQ29sb3I6OndoaXRlOyB9Ci0gICAgfTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8
Q29sb3IsIFJlZlB0cjxMYXllclRleHR1cmU+LCBDb2xvckhhc2gsIENvbG9ySGFzaFRyYWl0cz4g
Q29sb3JUZXh0dXJlTWFwOwotICAgIENvbG9yVGV4dHVyZU1hcCBtX2NvbG9yczsKLSAgICBHYXJi
YWdlIG1fZ2FyYmFnZTsKLX07Ci0KLVRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKiB0ZXh0
dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNlbmRpZiAvLyBUZXh0
dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L1ZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVmlkZW9M
YXllcldlYktpdFRocmVhZC5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVmlkZW9MYXllcldlYktpdFRocmVhZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJW
aWRlb0xheWVyV2ViS2l0VGhyZWFkLmgiCi0KLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNs
dWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIK
LQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6OlZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQoTWVk
aWFQbGF5ZXIqIG1lZGlhUGxheWVyKQotICAgIDogTGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXIsIDAp
Ci17Ci0gICAgc2V0TWVkaWFQbGF5ZXIobWVkaWFQbGF5ZXIpOwotfQotCi1WaWRlb0xheWVyV2Vi
S2l0VGhyZWFkOjp+VmlkZW9MYXllcldlYktpdFRocmVhZCgpCi17Ci19Ci0KLXZvaWQgVmlkZW9M
YXllcldlYktpdFRocmVhZDo6c2V0TWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVy
KQotewotICAgIG1fbWVkaWFQbGF5ZXIgPSBtZWRpYVBsYXllcjsKLQotICAgIC8vIFRoaXMgaXMg
YSBiaXQgb2YgYSBtaXNub21lciwgc2luY2Ugd2UgZG9uJ3QgbmVlZCBhbiBhY3R1YWwgR0wgdGV4
dHVyZS4KLSAgICAvLyBIb3dldmVyLCB0aGUgTGF5ZXJSZW5kZXJlciB3aWxsIG9ubHkgcHJvY2Vz
cyBsYXllcnMgdGhhdCAibmVlZCB0ZXh0dXJlcyIKLSAgICBzZXROZWVkc1RleHR1cmUoaXNEcmF3
YWJsZSgpICYmIChjb250ZW50cygpIHx8IGRyYXdzQ29udGVudCgpIHx8IHRoaXMtPm1lZGlhUGxh
eWVyKCkpKTsKLQotICAgIGlmICghbV9tZWRpYVBsYXllcikgewotICAgICAgICAvLyBXZSBjYW4n
dCBhZmZvcmQgdG8gd2FpdCB1bnRpbCB0aGUgbmV4dCBjb21taXQgdG8gc2V0IHRoZSBtX21lZGlh
UGxheWVyCi0gICAgICAgIC8vIHRvIDAgaW4gdGhlIGltcGwsIGJlY2F1c2UgaXQgaXMgYWJvdXQg
dG8gYmUgZGVzdHJveWVkLgotICAgICAgICBsYXllckNvbXBvc2l0aW5nVGhyZWFkKCktPnNldE1l
ZGlhUGxheWVyKDApOwotCi0gICAgICAgIC8vIENsZWFyIGhvbGUgcHVuY2ggcmVjdC4KLSAgICAg
ICAgc2V0SG9sZVB1bmNoUmVjdChJbnRSZWN0KCkpOwotICAgIH0KLQotICAgIHNldE5lZWRzQ29t
bWl0KCk7Ci19Ci0KLXZvaWQgVmlkZW9MYXllcldlYktpdFRocmVhZDo6c2V0SG9sZVB1bmNoUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIG1faG9sZVB1bmNoUmVjdCA9IHJlY3Q7Ci0g
ICAgc2V0TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpz
ZXROZWVkc0Rpc3BsYXkoKQotewotICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGRpc3BsYXkg
cGVyIHNlLCBidXQgc29tZSBjb2RlIG1heSBkZXBlbmQgb24KLSAgICAvLyBzZXROZWVkc0Rpc3Bs
YXkoKSB0byBjYWxsIHNldE5lZWRzQ29tbWl0KCkKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQot
Ci12b2lkIFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6OmJvdW5kc0NoYW5nZWQoKQotewotICAgIGlm
ICghbWVkaWFQbGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRm9yIHZpZGVvIGxh
eWVycywgdGhlIGVudGlyZSBsYXllciBzaG91bGQgYmUgaG9sZSBwdW5jaGVkCi0gICAgLy8gSG9s
ZSBwdW5jaCByZWN0YW5nbGUgc2l6ZSBpcyBlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGlzIGxheWVy
LgotICAgIC8vIE5vdGUgdGhhdCBhbHRob3VnaCB3ZSBrbm93IHRoZSAqc2l6ZSogb2YgdGhpcyBs
YXllciwgd2Ugd29uJ3Qga25vdyB0aGUgcG9zaXRpb24gb2YgdGhpcyBsYXllcgotICAgIC8vIHVu
dGlsIHRoZSBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpzZXREcmF3VHJhbnNmb3JtIG1ldGhvZCBp
cyBjYWxsZWQgZnJvbSB0aGUgTGF5ZXJSZW5kZXJlci4KLSAgICBzZXRIb2xlUHVuY2hSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9ib3VuZHMpKTsKLX0KLQotdm9pZCBWaWRlb0xheWVy
V2ViS2l0VGhyZWFkOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgpCi17Ci0gICAgLy8g
VGhlcmUgYXJlIG5vIHRleHR1cmUgY29udGVudHMsIHZpZGVvIGlzIHNob3duIGluIGEgc3BlY2lh
bCBzY3JlZW4gd2luZG93Ci0gICAgLy8gYmVoaW5kIHRoZSB3ZWIgcGFnZS4KLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L1ZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1ZpZGVvTGF5ZXJXZWJLaXRU
aHJlYWQuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9WaWRlb0xheWVyV2ViS2l0VGhyZWFkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaWZuZGVmIFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWRfaAotI2RlZmluZSBW
aWRlb0xheWVyV2ViS2l0VGhyZWFkX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRpYVBsYXllcjsKLQotY2xhc3MgVmlkZW9M
YXllcldlYktpdFRocmVhZCA6IHB1YmxpYyBMYXllcldlYktpdFRocmVhZCB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VmlkZW9MYXllcldlYktpdFRocmVhZD4gY3JlYXRlKE1lZGlh
UGxheWVyKiBtZWRpYVBsYXllcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VmlkZW9MYXllcldlYktpdFRocmVhZChtZWRpYVBsYXllcikpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgflZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQoKTsKLQotICAgIHZvaWQgc2V0TWVkaWFQbGF5ZXIo
TWVkaWFQbGF5ZXIqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLQot
cHJvdGVjdGVkOgotICAgIHZvaWQgc2V0SG9sZVB1bmNoUmVjdChjb25zdCBJbnRSZWN0Jik7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgYm91bmRzQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgpOwotCi1wcml2YXRlOgotICAgIFZpZGVvTGF5ZXJX
ZWJLaXRUaHJlYWQoTWVkaWFQbGF5ZXIqKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFZJREVP
KQotCi0jZW5kaWYgLy8gVmlkZW9MYXllcldlYktpdFRocmVhZF9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1dlYkdMTGF5ZXJXZWJLaXRUaHJlYWQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvV2ViR0xMYXllcldlYktpdFRocmVhZC5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvV2ViR0xMYXllcldlYktp
dFRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2ViR0xMYXllcldlYktpdFRocmVhZC5oIgotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoV0VCR0wpCi0KLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1XZWJHTExheWVyV2ViS2l0VGhyZWFkOjpXZWJHTExheWVyV2ViS2l0VGhyZWFkKCkKLSAg
ICA6IEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQoV2ViR0xMYXllcikKLSAgICAsIG1fd2ViR0xD
b250ZXh0KDApCi17Ci19Ci0KLVdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQ6On5XZWJHTExheWVyV2Vi
S2l0VGhyZWFkKCkKLXsKLSAgICBkZWxldGVUZXh0dXJlcygpOwotfQotCi12b2lkIFdlYkdMTGF5
ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCkKLXsKLSAgICBp
ZiAoIW1fd2ViR0xDb250ZXh0IHx8ICFtX3dlYkdMQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2ViR0xDb250ZXh0LT5wcmVwYXJlVGV4dHVy
ZSgpOwotCi0gICAgdXBkYXRlRnJvbnRCdWZmZXIobV93ZWJHTENvbnRleHQtPmdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCksIG1fd2ViR0xDb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKSk7Ci19
Ci0KLXZvaWQgV2ViR0xMYXllcldlYktpdFRocmVhZDo6ZGVsZXRlVGV4dHVyZXMoKQotewotICAg
IGlmIChtX3dlYkdMQ29udGV4dCAmJiBtX3dlYkdMQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIGRlbGV0ZUZyb250QnVmZmVyKCk7Ci19Ci0KLXZvaWQgV2ViR0xMYXllcldl
YktpdFRocmVhZDo6d2ViR0xDb250ZXh0RGVzdHJveWVkKCkKLXsKLSAgICBkZWxldGVUZXh0dXJl
cygpOwotICAgIG1fd2ViR0xDb250ZXh0ID0gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoV0VC
R0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1dl
YkdMTGF5ZXJXZWJLaXRUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1dlYkdMTGF5ZXJXZWJLaXRUaHJlYWQuaAkocmV2aXNp
b24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9XZWJHTExheWVyV2ViS2l0VGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0j
aWZuZGVmIFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWRfaAotI2RlZmluZSBXZWJHTExheWVyV2ViS2l0
VGhyZWFkX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFdF
QkdMKQotCi0jaW5jbHVkZSAiRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotCi1jbGFzcyBXZWJHTExh
eWVyV2ViS2l0VGhyZWFkIDogcHVibGljIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQ+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMTGF5ZXJXZWJLaXRU
aHJlYWQoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+V2ViR0xMYXllcldlYktpdFRocmVhZCgp
OwotCi0gICAgdm9pZCBzZXRXZWJHTENvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
IHsgbV93ZWJHTENvbnRleHQgPSBjb250ZXh0OyB9Ci0gICAgdm9pZCB3ZWJHTENvbnRleHREZXN0
cm95ZWQoKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlQ29u
dGVudHNJZk5lZWRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlcygpOwotCi1w
cml2YXRlOgotICAgIFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQoKTsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBtX3dlYkdMQ29udGV4dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFdFQkdMKQot
Ci0jZW5kaWYgLy8gV2ViR0xMYXllcldlYktpdFRocmVhZF9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktp
dFRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkNhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmgiCi0KLSNpbmNsdWRlICJM
YXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0KLSNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1HTEVTMlByb2dyYW0uaD4KLQotdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpHTEVTMlByb2dyYW07Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBD
YW52YXNMYXllcldlYktpdFRocmVhZDo6ZGVsZXRlVGV4dHVyZXMoKQotewotfQotCi1jbGFzcyBD
YW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50IDogcHVibGljIExheWVyQ29tcG9zaXRp
bmdUaHJlYWRDbGllbnQgewotcHVibGljOgotICAgIENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJl
YWRDbGllbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqLCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50U2l6ZSYpOwotCi0gICAgdm9pZCBsYXllckNvbXBvc2l0aW5nVGhyZWFkRGVzdHJveWVkKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqKSB7IH0KLSAgICB2b2lkIGxheWVyVmlzaWJpbGl0eUNoYW5n
ZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGJvb2wpIHsgfQotICAgIHZvaWQgdXBsb2FkVGV4
dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKikgeyB9Ci0KLSAgICB2b2lkIGRy
YXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgY29uc3QgR0xFUzJQcm9ncmFtJiwg
ZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKLSAgICB2b2lkIGRlbGV0
ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKLQotICAgIHZvaWQgY29tbWl0UGVu
ZGluZ1RleHR1cmVVcGxvYWRzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKLQotICAgIHZvaWQg
Y2xlYXJCdWZmZXIoKSB7IG1fYnVmZmVyID0gMDsgfQotCi1wcml2YXRlOgotICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBtX2J1ZmZlcjsKLSAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7
Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi1DYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50OjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZmZXIsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUm
IHNpemUpCi0gICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkK
LSAgICAsIG1fc2l6ZShzaXplKQotewotfQotCi12b2lkIENhbnZhc0xheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwg
Y29uc3QgR0xFUzJQcm9ncmFtJiwgZG91YmxlLCBjb25zdCBGbG9hdFJlY3QmIC8qY2xpcFJlY3Qq
LykKLXsKLSAgICBpZiAoIW1fYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBkdCA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0gICAgZHQudHJhbnNs
YXRlKC1sYXllci0+Ym91bmRzKCkud2lkdGgoKSAvIDIuMCwgLWxheWVyLT5ib3VuZHMoKS5oZWln
aHQoKSAvIDIuMCk7Ci0gICAgZHQuc2NhbGVOb25Vbmlmb3JtKHN0YXRpY19jYXN0PGRvdWJsZT4o
bGF5ZXItPmJvdW5kcygpLndpZHRoKCkpIC8gbV9zaXplLndpZHRoKCksIHN0YXRpY19jYXN0PGRv
dWJsZT4obGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKSAvIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
YmxpdFRvQnVmZmVyKDAsIG1fYnVmZmVyLCByZWludGVycHJldF9jYXN0PEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCY+KGR0KSwKLSAgICAgICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpTb3VyY2VPdmVyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihsYXllci0+ZHJhd09wYWNpdHkoKSAqIDI1NSkpOwotfQotCi12b2lkIENhbnZhc0xheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqKQotewotICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwgdGhlIGJ1ZmZlciBpcyBub3Qgb3du
ZWQgYnkgdXMuCi19Ci0KLXZvaWQgQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6
Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQotewot
ICAgIGlmICghbV9idWZmZXIgfHwgIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGR1cmluZyBhIHN5bmNocm9uaXphdGlvbiBwb2ludCBi
ZXR3ZWVuIFdlYktpdCBhbmQgY29tcG9zaXRpbmcgdGhyZWFkLgotICAgIC8vIFRoaXMgaXMgb3Vy
IG9ubHkgY2hhbmNlIHRvIHRyYW5zZmVyIHRoZSBiYWNrIGRpc3BsYXkgbGlzdCB0byB0aGUgZnJv
bnQgZGlzcGxheSBsaXN0IHdpdGhvdXQKLSAgICAvLyByYWNlIGNvbmRpdGlvbnMuCi0gICAgLy8g
MS4gRmx1c2ggYmFjayBkaXNwbGF5IGxpc3QgdG8gZnJvbnQKLSAgICBtX2NvbnRleHQtPmZsdXNo
KCk7Ci0gICAgLy8gMi4gRHJhdyBmcm9udCBkaXNwbGF5IGxpc3QgdG8gRkJPCi0gICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjp1cGRhdGVCdWZmZXJCYWNraW5nU3VyZmFjZShtX2J1
ZmZlcik7Ci19Ci0KLQotQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OkNhbnZhc0xheWVyV2ViS2l0
VGhyZWFkKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZmZXIsIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCi0gICAgOiBMYXllcldlYktpdFRocmVhZChDYW52
YXNMYXllciwgMCkKLXsKLSAgICBtX2NvbXBvc2l0aW5nVGhyZWFkQ2xpZW50ID0gbmV3IENhbnZh
c0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQoYnVmZmVyLCBjb250ZXh0LCBzaXplKTsKLSAg
ICBsYXllckNvbXBvc2l0aW5nVGhyZWFkKCktPnNldENsaWVudChtX2NvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50KTsKLX0KLQotQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6On5DYW52YXNMYXllcldlYktp
dFRocmVhZCgpCi17Ci0gICAgbGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpLT5zZXRDbGllbnQoMCk7
Ci0gICAgZGVsZXRlIG1fY29tcG9zaXRpbmdUaHJlYWRDbGllbnQ7Ci19Ci0KLXZvaWQgQ2FudmFz
TGF5ZXJXZWJLaXRUaHJlYWQ6OmNsZWFyQnVmZmVyKENhbnZhc0xheWVyV2ViS2l0VGhyZWFkKiBs
YXllcikKLXsKLSAgICBsYXllci0+bV9jb21wb3NpdGluZ1RocmVhZENsaWVudC0+Y2xlYXJCdWZm
ZXIoKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2Fu
dmFzTGF5ZXJXZWJLaXRUaHJlYWQuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBDYW52YXNMYXllcldlYktpdFRo
cmVhZF9oCi0jZGVmaW5lIENhbnZhc0xheWVyV2ViS2l0VGhyZWFkX2gKLQotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLQot
I2luY2x1ZGUgIkVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQuaCIKLQotI2luY2x1ZGUgPEJsYWNr
QmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FudmFzTGF5
ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDsKLQotY2xhc3MgQ2FudmFzTGF5ZXJXZWJLaXRUaHJl
YWQgOiBwdWJsaWMgTGF5ZXJXZWJLaXRUaHJlYWQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENhbnZhc0xheWVyV2ViS2l0VGhyZWFkPiBjcmVhdGUoQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzTGF5ZXJXZWJLaXRU
aHJlYWQoYnVmZmVyLCBjb250ZXh0LCBzaXplKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+Q2Fu
dmFzTGF5ZXJXZWJLaXRUaHJlYWQoKTsKLQotICAgIHN0YXRpYyB2b2lkIGNsZWFyQnVmZmVyKENh
bnZhc0xheWVyV2ViS2l0VGhyZWFkKik7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlVGV4dHVyZXMoKTsKLQotcHJpdmF0ZToKLSAgICBDYW52YXNMYXllcldlYktpdFRocmVh
ZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciosIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXpl
Jik7Ci0gICAgQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCogbV9jb21wb3NpdGlu
Z1RocmVhZENsaWVudDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKLQotI2VuZGlmIC8vIENhbnZhc0xheWVyV2ViS2l0VGhyZWFkX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRGlzcGxheVJlZnJlc2hNb25p
dG9yQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9EaXNwbGF5UmVmcmVzaE1vbml0b3JCbGFja0JlcnJ5LmNwcAko
cmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9EaXNwbGF5UmVmcmVzaE1vbml0b3JCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCi0jaW5jbHVkZSAiRGlzcGxheVJlZnJlc2hNb25p
dG9yLmgiCi0KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERpc3BsYXlBbmltYXRp
b25DbGllbnQgOiBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkFuaW1hdGlvbkZyYW1lUmF0
ZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgRGlzcGxheUFuaW1hdGlvbkNsaWVudChEaXNwbGF5UmVm
cmVzaE1vbml0b3IgKik7Ci0gICAgfkRpc3BsYXlBbmltYXRpb25DbGllbnQoKSB7IH0KLXByaXZh
dGU6Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkZyYW1lQ2hhbmdlZCgpOwotICAgIERpc3Bs
YXlSZWZyZXNoTW9uaXRvciogbV9tb25pdG9yOwotfTsKLQotRGlzcGxheUFuaW1hdGlvbkNsaWVu
dDo6RGlzcGxheUFuaW1hdGlvbkNsaWVudChEaXNwbGF5UmVmcmVzaE1vbml0b3IgKm1vbml0b3Ip
Ci0gICAgOiBtX21vbml0b3IobW9uaXRvcikKLXsKLX0KLQotdm9pZCBEaXNwbGF5QW5pbWF0aW9u
Q2xpZW50OjphbmltYXRpb25GcmFtZUNoYW5nZWQoKQotewotICAgIG1fbW9uaXRvci0+ZGlzcGxh
eUxpbmtGaXJlZCgpOwotfQotCi1EaXNwbGF5UmVmcmVzaE1vbml0b3I6On5EaXNwbGF5UmVmcmVz
aE1vbml0b3IoKQotewotICAgIHN0b3BBbmltYXRpb25DbGllbnQoKTsKLSAgICBjYW5jZWxDYWxs
T25NYWluVGhyZWFkKERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6aGFuZGxlRGlzcGxheVJlZnJlc2hl
ZE5vdGlmaWNhdGlvbk9uTWFpblRocmVhZCwgdGhpcyk7Ci19Ci0KLXZvaWQgRGlzcGxheVJlZnJl
c2hNb25pdG9yOjpzdGFydEFuaW1hdGlvbkNsaWVudCgpCi17Ci0gICAgaWYgKG1fYW5pbWF0aW9u
Q2xpZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FuaW1hdGlvbkNsaWVudCA9IG5ldyBE
aXNwbGF5QW5pbWF0aW9uQ2xpZW50KHRoaXMpOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpB
bmltYXRpb25GcmFtZVJhdGVDb250cm9sbGVyOjppbnN0YW5jZSgpLT5hZGRDbGllbnQobV9hbmlt
YXRpb25DbGllbnQpOwotfQotCi12b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6c3RvcEFuaW1h
dGlvbkNsaWVudCgpCi17Ci0gICAgaWYgKCFtX2FuaW1hdGlvbkNsaWVudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkFuaW1hdGlvbkZyYW1lUmF0ZUNvbnRy
b2xsZXI6Omluc3RhbmNlKCktPnJlbW92ZUNsaWVudChtX2FuaW1hdGlvbkNsaWVudCk7Ci0gICAg
ZGVsZXRlIG1fYW5pbWF0aW9uQ2xpZW50OwotICAgIG1fYW5pbWF0aW9uQ2xpZW50ID0gMDsKLX0K
LQotYm9vbCBEaXNwbGF5UmVmcmVzaE1vbml0b3I6OnJlcXVlc3RSZWZyZXNoQ2FsbGJhY2soKQot
ewotICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7Ci0KLSAgICBzdGFydEFuaW1hdGlvbkNs
aWVudCgpOwotCi0gICAgbV9zY2hlZHVsZWQgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6ZGlzcGxheUxpbmtGaXJlZCgpCi17Ci0gICAg
aWYgKCFtX211dGV4LnRyeUxvY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3By
ZXZpb3VzRnJhbWVEb25lKSB7Ci0gICAgICAgIG1fbXV0ZXgudW5sb2NrKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX3ByZXZpb3VzRnJhbWVEb25lID0gZmFsc2U7Ci0KLSAgICBt
X21vbm90b25pY0FuaW1hdGlvblN0YXJ0VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChoYW5kbGVEaXNwbGF5UmVmcmVzaGVkTm90aWZp
Y2F0aW9uT25NYWluVGhyZWFkLCB0aGlzKTsKLSAgICBtX211dGV4LnVubG9jaygpOwotfQotCi19
Ci0KLSNlbmRpZiAvLyBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9S
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9EcmF3
aW5nQnVmZmVyQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9EcmF3aW5nQnVmZmVyQmxhY2tCZXJyeS5jcHAJKHJl
dmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvRHJhd2luZ0J1ZmZlckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEz
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJEcmF3aW5nQnVmZmVyLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkxheWVyV2ViS2l0
VGhyZWFkLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRHJhd2lu
Z0J1ZmZlckludGVybmFsIHsKLSAgICB1bnNpZ25lZCBvZmZzY3JlZW5Db2xvclRleHR1cmU7Ci0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFJlZlB0cjxMYXllcldlYktpdFRo
cmVhZD4gcGxhdGZvcm1MYXllcjsKLSNlbmRpZgotfTsKLQotc3RhdGljIHVuc2lnbmVkIGdlbmVy
YXRlQ29sb3JUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXpl
JiBzaXplKQotewotICAgIHVuc2lnbmVkIG9mZnNjcmVlbkNvbG9yVGV4dHVyZSA9IGNvbnRleHQt
PmNyZWF0ZVRleHR1cmUoKTsKLSAgICBpZiAoIW9mZnNjcmVlbkNvbG9yVGV4dHVyZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlKTsKLSAgICBjb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCk7Ci0gICAg
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5F
QVJFU1QpOwotICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250
ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGNvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7Ci0gICAgY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUsIDApOwotICAgIHJldHVybiBvZmZzY3Jl
ZW5Db2xvclRleHR1cmU7Ci19Ci0KLURyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCi0gICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9mYm8oY29udGV4dC0+Y3Jl
YXRlRnJhbWVidWZmZXIoKSkKLXsKLSAgICBtX2ludGVybmFsID0gYWRvcHRQdHIobmV3IERyYXdp
bmdCdWZmZXJJbnRlcm5hbCk7Ci0KLSAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgbV9pbnRlcm5hbC0+b2Zmc2Ny
ZWVuQ29sb3JUZXh0dXJlID0gZ2VuZXJhdGVDb2xvclRleHR1cmUoY29udGV4dCwgc2l6ZSk7Ci19
Ci0KLURyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKLXsKLSAgICBpZiAoIW1fY29udGV4
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgbV9jb250ZXh0LT5kZWxl
dGVUZXh0dXJlKG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7Ci0KLSAgICBjbGVh
cigpOwotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotdm9pZCBEcmF3aW5n
QnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2FsbGJhY2spCi0gICAgICAgIG1fY2FsbGJh
Y2stPndpbGxQdWJsaXNoKCk7Ci0KLSAgICAvLyBGSVhNRTogV2UgZG8gdGhlIGNvcHkgaW4gdGhl
IGNhbnZhcycgKGNoaWxkKSBjb250ZXh0IHNvIHRoYXQgaXQgZXhlY3V0ZXMgaW4gdGhlIGNvcnJl
Y3Qgb3JkZXIgcmVsYXRpdmUgdG8KLSAgICAvLyBvdGhlciBjb21tYW5kcyBpbiB0aGUgY2hpbGQg
Y29udGV4dC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHBhcmVudCB0ZXh0dXJlIGFsd2F5cyBjb250
YWlucyBhIGNvbXBsZXRlCi0gICAgLy8gZnJhbWUgYW5kIG5vdCBzb21lIGludGVybWVkaWF0ZSBy
ZXN1bHQuIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIHN5bmNocm9uaXphdGlvbiB0byBlbnN1cmUgdGhh
dCB0aGlzIGNvcHkKLSAgICAvLyBoYXBwZW5zIGJlZm9yZSB0aGUgY29tcG9zaXRvciBkcmF3cy4g
VGhpcyBtZWFucyB3ZSBtaWdodCBkcmF3IHN0YWxlIGZyYW1lcyBzb21ldGltZXMuIElkZWFsbHkg
dGhpcwotICAgIC8vIHdvdWxkIGluc2VydCBhIGZlbmNlIGludG8gdGhlIGNoaWxkIGNvbW1hbmQg
c3RyZWFtIHRoYXQgdGhlIGNvbXBvc2l0b3IgY291bGQgd2FpdCBmb3IuCi0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2NvbnRleHQtPmZsdXNoKCk7Ci19Ci0jZW5k
aWYKLQotYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplKQot
ewotICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
bV9zaXplID09IG5ld1NpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fc2l6ZSA9
IG5ld1NpemU7Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX2ludGVybmFsLT5vZmZzY3JlZW5Db2xvclRleHR1cmUpOwotICAgIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgMCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLVBsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKQot
ewotICAgIHJldHVybiBtX2ludGVybmFsLT5wbGF0Zm9ybUxheWVyLmdldCgpOwotfQotI2VuZGlm
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5jcHAJKHJldmlzaW9u
IDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2lu
Y2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1HTEVTMlByb2dyYW0uaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMlNo
YXJlZFRleHR1cmUuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgot
I2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgotI2luY2x1ZGUgPEVHTC9lZ2wuaD4K
LSNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVk
ZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRUdMSW1hZ2VMYXllckNvbXBv
c2l0aW5nVGhyZWFkQ2xpZW50Ojp+RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50
KCkKLXsKLSAgICAvLyBTb21lb25lIHNob3VsZCBoYXZlIGNhbGxlZCBkZWxldGVUZXh0dXJlcygp
IGJ5IG5vdwotICAgIEFTU0VSVCghbV90ZXh0dXJlQWNjZXNzb3IpOwotfQotCi12b2lkIEVHTElt
YWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChM
YXllckNvbXBvc2l0aW5nVGhyZWFkKikKLXsKLX0KLQotdm9pZCBFR0xJbWFnZUxheWVyQ29tcG9z
aXRpbmdUaHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBs
YXllciwgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtLCBkb3VibGUgLypzY2FsZSovLCBjb25z
dCBGbG9hdFJlY3QmIC8qY2xpcFJlY3QqLykKLXsKLSAgICBpZiAoIW1fdGV4dHVyZUFjY2Vzc29y
IHx8ICFtX3RleHR1cmVBY2Nlc3Nvci0+dGV4dHVyZUlEKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9N
SU5VU19TUkNfQUxQSEEpOwotICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLm1fcHJvZ3JhbSk7Ci0g
ICAgZ2xVbmlmb3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwgbGF5ZXItPmRyYXdPcGFj
aXR5KCkpOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnBvc2l0aW9uTG9jYXRp
b24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMo
KS5kYXRhKCkpOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnRleENvb3JkTG9j
YXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBsYXllci0+dGV4dHVyZUNvb3JkaW5h
dGVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OlVwc2lkZURvd24pLmRhdGEoKSk7Ci0gICAgZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVBY2Nlc3Nvci0+dGV4dHVyZUlEKCkp
OwotICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIGxheWVyLT50cmFuc2Zvcm1l
ZEJvdW5kcygpLnNpemUoKSk7Ci19Ci0KLXZvaWQgRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50OjpkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKLXsKLSAg
ICBkZWxldGUgbV90ZXh0dXJlQWNjZXNzb3I7Ci0gICAgbV90ZXh0dXJlQWNjZXNzb3IgPSAwOwot
fQotCi12b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6YmluZENvbnRl
bnRzVGV4dHVyZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKLXsKLSAgICBpZiAobV90ZXh0dXJl
QWNjZXNzb3IpCi0gICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
QWNjZXNzb3ItPnRleHR1cmVJRCgpKTsKLX0KLQotdm9pZCBFR0xJbWFnZUxheWVyQ29tcG9zaXRp
bmdUaHJlYWRDbGllbnQ6OnNldFRleHR1cmVBY2Nlc3NvcihHTEVTMlNoYXJlZFRleHR1cmVBY2Nl
c3NvciogdGV4dHVyZUFjY2Vzc29yKQotewotICAgIGlmIChtX3RleHR1cmVBY2Nlc3NvciA9PSB0
ZXh0dXJlQWNjZXNzb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlbGV0ZSBtX3RleHR1cmVB
Y2Nlc3NvcjsKLSAgICBtX3RleHR1cmVBY2Nlc3NvciA9IHRleHR1cmVBY2Nlc3NvcjsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudC5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBFR0xJbWFnZUxheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnRfaAotI2RlZmluZSBFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnRfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5j
bHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
YWZlUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgUGxh
dGZvcm0gewotbmFtZXNwYWNlIEdyYXBoaWNzIHsKLWNsYXNzIEdMRVMyU2hhcmVkVGV4dHVyZUFj
Y2Vzc29yOwotfQotfQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExheWVyQ29t
cG9zaXRpbmdUaHJlYWQ7Ci0KLWNsYXNzIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENs
aWVudCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxFR0xJbWFnZUxheWVyQ29tcG9zaXRp
bmdUaHJlYWRDbGllbnQ+LCBwdWJsaWMgTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBF
R0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQoKSk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB+RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KCk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgbGF5ZXJDb21wb3NpdGluZ1RocmVhZERlc3Ryb3llZChMYXllckNvbXBvc2l0aW5n
VGhyZWFkKikKLSAgICB7Ci0gICAgICAgIGRlcmVmKCk7IC8vIE1hdGNoZWQgYnkgcmVmKCkgaW4g
Y29uc3RydWN0b3IKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hh
bmdlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKSB7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCB1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQq
LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYsIGRv
dWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKLQotICAg
IHZvaWQgc2V0VGV4dHVyZUFjY2Vzc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
R0xFUzJTaGFyZWRUZXh0dXJlQWNjZXNzb3IqKTsKLQotcHJpdmF0ZToKLSAgICBFR0xJbWFnZUxh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQoKQotICAgICAgICA6IG1fdGV4dHVyZUFjY2Vzc29y
KDApCi0gICAgewotICAgICAgICByZWYoKTsgLy8gTWF0Y2hlZCBieSBkZXJlZigpIGluIGxheWVy
Q29tcG9zaXRpbmdUaHJlYWREZXN0cm95ZWQoKQotICAgIH0KLQotICAgIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6R0xFUzJTaGFyZWRUZXh0dXJlQWNjZXNzb3IqIG1fdGV4dHVyZUFj
Y2Vzc29yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYgLy8gRUdMSW1hZ2VMYXllckNvbXBvc2l0
aW5nVGhyZWFkQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVy
V2ViS2l0VGhyZWFkLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwyMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgotI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5o
IgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMyQ29udGV4dFN0YXRlLmg+Ci0jaW5j
bHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJTaGFyZWRUZXh0dXJlLmg+Ci0jaW5jbHVkZSA8
QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZv
cm1Mb2cuaD4KLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jaW5jbHVkZSA8RUdML2VnbGV4dC5oPgot
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi11c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUVHTEltYWdlTGF5ZXJX
ZWJLaXRUaHJlYWQ6OkVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXJUeXBlIHR5cGUpCi0g
ICAgOiBMYXllcldlYktpdFRocmVhZCh0eXBlLCAwKQotICAgICwgbV9jbGllbnQoRUdMSW1hZ2VM
YXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpjcmVhdGUoKSkKLSAgICAsIG1fbmVlZHNEaXNw
bGF5KGZhbHNlKQotICAgICwgbV9wcm9ncmFtKDApCi0gICAgLCBtX3RleHR1cmUoMCkKLSAgICAs
IG1fdGV4dHVyZUFjY2Vzc29yKDApCi17Ci0gICAgbGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpLT5z
ZXRDbGllbnQobV9jbGllbnQuZ2V0KCkpOwotfQotCi1FR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFk
Ojp+RUdMSW1hZ2VMYXllcldlYktpdFRocmVhZCgpCi17Ci0gICAgLy8gVGhlIHN1YmNsYXNzIGlz
IHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGRlbGV0ZUZyb250QnVmZmVyKCkKLSAgICAvLyBiZWZv
cmUgd2UgZ2V0IHRoaXMgZmFyLgotICAgIEFTU0VSVCghbV9wcm9ncmFtKTsKLSAgICBBU1NFUlQo
IW1fdGV4dHVyZSk7Ci0gICAgQVNTRVJUKCFtX3RleHR1cmVBY2Nlc3Nvcik7Ci19Ci0KLXZvaWQg
RUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBtX25l
ZWRzRGlzcGxheSA9IHRydWU7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBFR0xJ
bWFnZUxheWVyV2ViS2l0VGhyZWFkOjp1cGRhdGVGcm9udEJ1ZmZlcihjb25zdCBJbnRTaXplJiBz
aXplLCB1bnNpZ25lZCBiYWNrQnVmZmVyVGV4dHVyZSkKLXsKLSAgICBpZiAoIW1fbmVlZHNEaXNw
bGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgaWYgKHNpemUgIT0gbV9zaXplKSB7Ci0gICAgICAgICAgICBkZWxldGVGcm9udEJ1ZmZlcigp
OwotICAgICAgICAgICAgbV9zaXplID0gc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fbmVl
ZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHTGVudW0g
Y3VycmVudEFjdGl2ZVRleHR1cmUgPSAwOwotICAgIGdsR2V0SW50ZWdlcnYoR0xfQUNUSVZFX1RF
WFRVUkUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmY3VycmVudEFjdGl2ZVRleHR1cmUpKTsK
LSAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwotCi0gICAgewotICAgICAgICBHTEVT
MkNvbnRleHRTdGF0ZTo6VGV4dHVyZUFuZEZCT1N0YXRlU2F2ZXIgdGV4dHVyZUFuZEZCT1N0YXRl
U2F2ZXI7Ci0KLSAgICAgICAgaWYgKCFjcmVhdGVUZXh0dXJlSWZOZWVkZWQoc2l6ZSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLQotICAg
ICAgICBibGl0VG9Gcm9udEJ1ZmZlcihiYWNrQnVmZmVyVGV4dHVyZSk7Ci0gICAgfQotCi0gICAg
Z2xBY3RpdmVUZXh0dXJlKGN1cnJlbnRBY3RpdmVUZXh0dXJlKTsKLX0KLQotdm9pZCBFR0xJbWFn
ZUxheWVyV2ViS2l0VGhyZWFkOjpkZWxldGVGcm9udEJ1ZmZlcigpCi17Ci0gICAgZGVsZXRlIG1f
dGV4dHVyZTsKLSAgICBtX3RleHR1cmUgPSAwOwotICAgIGdsRGVsZXRlUHJvZ3JhbShtX3Byb2dy
YW0pOwotICAgIG1fcHJvZ3JhbSA9IDA7Ci0KLSAgICAvLyBUaGUgdGV4dHVyZSBhY2Nlc3NvciBp
cyBpbiBvdXIgRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50J3MgY3VzdG9keQot
ICAgIC8vIGF0IHRoaXMgcG9pbnQsIGFuZCB0aGF0IG9iamVjdCBpcyByZXNwb25zaWJsZSBmb3Ig
ZGVsZXRpbmcgaXQuCi0gICAgbV90ZXh0dXJlQWNjZXNzb3IgPSAwOwotCi0gICAgLy8gSWYgYW55
b25lIHRyaWVzIHRvIHJlbmRlciB1cyBhZnRlciB0aGlzLCB3ZSdyZSBjZXJ0YWlubHkgZ29pbmcg
dG8gbmVlZCBkaXNwbGF5LgotICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLX0KLQotdm9pZCBF
R0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkOjpjb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMoKQot
ewotICAgIC8vIFRoaXMgY2FsbCBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGNvbXBvc2l0aW5nIHRo
cmVhZCwgc28gaXQncyBzYWZlIHRvIHVwZGF0ZSB0aGUKLSAgICAvLyBpbWFnZSBhbmQgZGVzdHJv
eSBhbnkgb2xkIGltYWdlcy4KLQotICAgIG1fY2xpZW50LT5zZXRUZXh0dXJlQWNjZXNzb3IobV90
ZXh0dXJlQWNjZXNzb3IpOwotfQotCi1ib29sIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6OmNy
ZWF0ZVRleHR1cmVJZk5lZWRlZChjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGlmICghbV90
ZXh0dXJlIHx8IHNpemUgIT0gbV9zaXplKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3RleHR1cmU7Ci0g
ICAgICAgIG1fdGV4dHVyZSA9IG5ldyBHTEVTMlNoYXJlZFRleHR1cmUoc2l6ZSk7Ci0gICAgICAg
IGlmICghbV90ZXh0dXJlLT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtX3RleHR1
cmU7Ci0gICAgICAgICAgICBtX3RleHR1cmUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgbV90ZXh0dXJlQWNjZXNzb3IgPSBtX3RleHR1cmUtPmNy
ZWF0ZVRleHR1cmVBY2Nlc3NvcigpOwotCi0gICAgICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6
Y3JlYXRlU2hhZGVySWZOZWVkZWQoKQotewotICAgIC8vIFNoYWRlcnMgZm9yIGRyYXdpbmcgdGhl
IGxheWVyIGNvbnRlbnRzLgotICAgIHN0YXRpYyBjaGFyIHZlcnRleFNoYWRlclN0cmluZ1tdID0K
LSAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCi0gICAgICAgICJhdHRy
aWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxuIgotICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4
Q29vcmQ7ICAgICBcbiIKLSAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgXG4i
Ci0gICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAiICBn
bF9Qb3NpdGlvbiA9IGFfcG9zaXRpb247ICBcbiIKLSAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFf
dGV4Q29vcmQ7ICAgXG4iCi0gICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IjsKLQotICAgIHN0YXRpYyBjaGFyIGZyYWdtZW50U2hhZGVyU3RyaW5nUkdCQVtdID0KLSAgICAg
ICAgInZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgIFxu
IgotICAgICAgICAidW5pZm9ybSBsb3dwIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAgICAg
ICAgICAgXG4iCi0gICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKLSAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB0ZXh0
dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkKTsgXG4iCi0gICAgICAgICJ9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7Ci0KLSAgICBpZiAoIW1f
cHJvZ3JhbSkgewotICAgICAgICBtX3Byb2dyYW0gPSBMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVy
UHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nUkdCQSk7Ci0g
ICAgICAgIGlmICghbV9wcm9ncmFtKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBnbEJp
bmRBdHRyaWJMb2NhdGlvbihtX3Byb2dyYW0sIEdMRVMyUHJvZ3JhbTo6UG9zaXRpb25BdHRyaWJ1
dGVJbmRleCwgImFfcG9zaXRpb24iKTsKLSAgICAgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24obV9w
cm9ncmFtLCBHTEVTMlByb2dyYW06OlRleENvb3JkQXR0cmlidXRlSW5kZXgsICJhX3RleENvb3Jk
Iik7Ci0gICAgICAgIGdsTGlua1Byb2dyYW0obV9wcm9ncmFtKTsKLSAgICAgICAgdW5zaWduZWQg
c2FtcGxlckxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9wcm9ncmFtLCAic190ZXh0
dXJlIik7Ci0gICAgICAgIGdsVXNlUHJvZ3JhbShtX3Byb2dyYW0pOwotICAgICAgICBnbFVuaWZv
cm0xaShzYW1wbGVyTG9jYXRpb24sIDApOwotICAgIH0KLX0KLQotdm9pZCBFR0xJbWFnZUxheWVy
V2ViS2l0VGhyZWFkOjpibGl0VG9Gcm9udEJ1ZmZlcih1bnNpZ25lZCBiYWNrQnVmZmVyVGV4dHVy
ZSkKLXsKLSAgICBpZiAoIWJhY2tCdWZmZXJUZXh0dXJlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHTEVTMkNvbnRleHRTdGF0ZTo6UHJvZ3JhbVN0YXRlU2F2ZXIgcHJvZ3JhbVN0YXRlU2F2ZXI7
Ci0KLSAgICBjcmVhdGVTaGFkZXJJZk5lZWRlZCgpOwotCi0gICAgR0xFUzJDb250ZXh0U3RhdGU6
OkJ1ZmZlckJpbmRpbmdTYXZlciBidWZmZXJCaW5kaW5nU2F2ZXI7Ci0gICAgR0xFUzJDb250ZXh0
U3RhdGU6OlZpZXdwb3J0U2F2ZXIgdmlld3BvcnRTYXZlcjsKLSAgICBHTEVTMkNvbnRleHRTdGF0
ZTo6R2xvYmFsRmxhZ1N0YXRlU2F2ZXIgZmxhZ1N0YXRlU2F2ZXIoR0xFUzJDb250ZXh0U3RhdGU6
Okdsb2JhbEZsYWdTdGF0ZTo6RG9udFJlc3RvcmVCbGVuZEZ1bmMpOwotCi0gICAgZ2xEaXNhYmxl
KEdMX0RFUFRIX1RFU1QpOwotICAgIGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpOwotICAgIGds
RGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIGdsRGlzYWJsZShHTF9DVUxMX0ZBQ0UpOwot
ICAgIGdsRGlzYWJsZShHTF9CTEVORCk7Ci0KLSAgICBnbFZpZXdwb3J0KDAsIDAsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIG1ha2VCdWZmZXJDdXJyZW50KG1fdGV4dHVy
ZS0+YnVmZmVyKCksIEdMRVMyKTsKLSAgICBnbFVzZVByb2dyYW0obV9wcm9ncmFtKTsKLSAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGJhY2tCdWZmZXJUZXh0dXJlKTsKLSAgICBnbENv
bG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKLQotICAgIHsKLSAgICAgICAgR0xFUzJD
b250ZXh0U3RhdGU6OlZlcnRleEF0dHJpYnV0ZVN0YXRlU2F2ZXIgdmVydGV4QXR0cmliU3RhdGVT
YXZlcjsKLSAgICAgICAgR0xFUzJDb250ZXh0U3RhdGU6OlZlcnRleEFycmF5T0VTU3RhdGVTYXZl
ciB2ZXJ0ZXhBcnJheU9FU1N0YXRlU2F2ZXI7Ci0KLSAgICAgICAgc3RhdGljIGZsb2F0IHRleGNv
b3Jkc1s0ICogMl0gPSB7IDAsIDAsICAwLCAxLCAgMSwgMSwgIDEsIDAgfTsKLSAgICAgICAgc3Rh
dGljIGZsb2F0IHZlcnRpY2VzW10gPSB7IC0xLCAtMSwgLTEsIDEsIDEsIDEsIDEsIC0xIH07Ci0g
ICAgICAgIGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApOwotICAgICAgICBnbEJpbmRC
dWZmZXIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDApOwotICAgICAgICBnbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KEdMRVMyUHJvZ3JhbTo6UG9zaXRpb25BdHRyaWJ1dGVJbmRleCk7Ci0gICAg
ICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0xFUzJQcm9ncmFtOjpUZXhDb29yZEF0dHJp
YnV0ZUluZGV4KTsKLSAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMRVMyUHJvZ3JhbTo6
UG9zaXRpb25BdHRyaWJ1dGVJbmRleCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB2ZXJ0aWNl
cyk7Ci0gICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihHTEVTMlByb2dyYW06OlRleENvb3Jk
QXR0cmlidXRlSW5kZXgsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29vcmRzKTsKLSAg
ICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7Ci0KLSAgICAgICAgLy8g
SWYgd2UgZG9uJ3QgZmx1c2gsIHRoZSBFR0xJbWFnZSBtYXkgbmV2ZXIgdXBkYXRlIGl0cyBhcHBl
YXJhbmNlCi0gICAgICAgIGdsRmx1c2goKTsKLQotICAgICAgICBnbERpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheShHTEVTMlByb2dyYW06OlBvc2l0aW9uQXR0cmlidXRlSW5kZXgpOwotICAgICAgICBn
bERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTEVTMlByb2dyYW06OlRleENvb3JkQXR0cmlidXRl
SW5kZXgpOwotICAgIH0KLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyV2ViS2l0VGhy
ZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9FR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkLmgJKHJldmlzaW9uIDE2MTU5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXll
cldlYktpdFRocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBFR0xJ
bWFnZUxheWVyV2ViS2l0VGhyZWFkX2gKLSNkZWZpbmUgRUdMSW1hZ2VMYXllcldlYktpdFRocmVh
ZF9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJFR0xJ
bWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaCIKLSNpbmNsdWRlICJMYXllcldlYktp
dFRocmVhZC5oIgotCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgUGxhdGZvcm0g
ewotbmFtZXNwYWNlIEdyYXBoaWNzIHsKLWNsYXNzIEdMRVMyU2hhcmVkVGV4dHVyZTsKLWNsYXNz
IEdMRVMyU2hhcmVkVGV4dHVyZUFjY2Vzc29yOwotfQotfQotfQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIEJhc2UgY2xhc3MgZm9yIEVHTEltYWdlIGJhc2VkIGxheWVycwotLy8gVGhlIHN1
YmNsYXNzIG11c3QgcmVpbXBsZW1lbnQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKSB0
byBjYWxsIHVwZGF0ZUZyb250QnVmZmVyCi0vLyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBwYXJhbWV0
ZXJzLCBhbmQgbWFrZSBzdXJlIHRvIGNhbGwgZGVsZXRlRnJvbnRCdWZmZXIoKSBmcm9tIGl0cwot
Ly8gZGVzdHJ1Y3Rvci4KLWNsYXNzIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQgOiBwdWJsaWMg
TGF5ZXJXZWJLaXRUaHJlYWQgewotcHVibGljOgotICAgIHZpcnR1YWwgfkVHTEltYWdlTGF5ZXJX
ZWJLaXRUaHJlYWQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLQot
cHJvdGVjdGVkOgotICAgIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXJUeXBlKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZVRleHR1cmVzKCkgPSAwOwotCi0gICAgLy8gVGhlIGNvbnRleHQgbXVzdCBi
ZSBjdXJyZW50IGJlZm9yZSB5b3UgY2FsbCBhbnkgb2YgdGhlc2UKLSAgICB2b2lkIHVwZGF0ZUZy
b250QnVmZmVyKGNvbnN0IEludFNpemUmLCB1bnNpZ25lZCBiYWNrQnVmZmVyVGV4dHVyZSk7Ci0g
ICAgdm9pZCBkZWxldGVGcm9udEJ1ZmZlcigpOwotCi1wcml2YXRlOgotICAgIGJvb2wgY3JlYXRl
VGV4dHVyZUlmTmVlZGVkKGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIGNyZWF0ZVNoYWRlcklm
TmVlZGVkKCk7Ci0gICAgdm9pZCBibGl0VG9Gcm9udEJ1ZmZlcih1bnNpZ25lZCBiYWNrQnVmZmVy
VGV4dHVyZSk7Ci0KLSAgICBSZWZQdHI8RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50PiBtX2NsaWVudDsKLSAgICBib29sIG1fbmVlZHNEaXNwbGF5OwotICAgIHVuc2lnbmVkIG1f
cHJvZ3JhbTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyU2hhcmVk
VGV4dHVyZSogbV90ZXh0dXJlOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
R0xFUzJTaGFyZWRUZXh0dXJlQWNjZXNzb3IqIG1fdGV4dHVyZUFjY2Vzc29yOwotICAgIEludFNp
emUgbV9zaXplOwotfTsKLQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotCi0jZW5kaWYgLy8gRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZF9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Zsb2F0UG9pbnRCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0Zsb2F0UG9pbnRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9GbG9hdFBvaW50Qmxh
Y2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtUHJpbWl0aXZl
cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0UG9pbnQmIHApCi0gICAgOiBtX3gocC54KCkp
Ci0gICAgLCBtX3kocC55KCkpCi17Ci19Ci0KLUZsb2F0UG9pbnQ6Om9wZXJhdG9yIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpGbG9hdFBvaW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkZsb2F0UG9pbnQobV94LCBtX3kpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0Zsb2F0UmVjdEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRmxvYXRSZWN0QmxhY2tCZXJyeS5jcHAJKHJldmlz
aW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvRmxvYXRSZWN0QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1QcmltaXRpdmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRSZWN0OjpG
bG9hdFJlY3QoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0UmVjdCYgcmVjdCkKLSAg
ICA6IG1fbG9jYXRpb24ocmVjdC54KCksIHJlY3QueSgpKQotICAgICwgbV9zaXplKHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSkKLXsKLX0KLQotRmxvYXRSZWN0OjpvcGVyYXRvciBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6RmxvYXRSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkZsb2F0UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotfQot
Ci1GbG9hdFJlY3QgRmxvYXRSZWN0Ojpub3JtYWxpemVkKCkgY29uc3QKLXsKLSAgICBGbG9hdFJl
Y3Qgbm9ybWFsaXplZFJlY3QgPSAqdGhpczsKLQotICAgIGlmICh3aWR0aCgpIDwgMCkgewotICAg
ICAgICBub3JtYWxpemVkUmVjdC5zZXRYKHgoKSArIHdpZHRoKCkpOwotICAgICAgICBub3JtYWxp
emVkUmVjdC5zZXRXaWR0aCgtd2lkdGgoKSk7Ci0gICAgfQotICAgIGlmIChoZWlnaHQoKSA8IDAp
IHsKLSAgICAgICAgbm9ybWFsaXplZFJlY3Quc2V0WSh5KCkgKyBoZWlnaHQoKSk7Ci0gICAgICAg
IG5vcm1hbGl6ZWRSZWN0LnNldEhlaWdodCgtaGVpZ2h0KCkpOwotICAgIH0KLSAgICByZXR1cm4g
bm9ybWFsaXplZFJlY3Q7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRmxvYXRTaXplQmxhY2tCZXJy
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9GbG9hdFNpemVCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9GbG9hdFNpemVCbGFja0Jl
cnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJG
bG9hdFNpemUuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVByaW1pdGl2ZXMuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRTaXplJiBzaXplKQotICAgIDogbV93aWR0aChzaXplLndp
ZHRoKCkpCi0gICAgLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQotewotfQotCi1GbG9hdFNpemU6
Om9wZXJhdG9yIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFNpemUoKSBjb25zdAotewotICAg
IHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRTaXplKG1fd2lkdGgsIG1faGVpZ2h0
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250QmxhY2tC
ZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvRm9udEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICov
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotCi0jaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIu
aCIKLSNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotCi0jaW5j
bHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg+Ci0KLSNpbmNsdWRlIDxm
c19hcGkuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1zdGF0aWMgaW5saW5lIGZs
b2F0IEZTRml4ZWRUb0Zsb2F0KEZTX0ZJWEVEIG4pIHsgcmV0dXJuIG4gLyA2NTUzNi4wOyB9Ci1z
dGF0aWMgaW5saW5lIEZTX0ZJWEVEIEZsb2F0VG9GU0ZpeGVkKGZsb2F0IG4pIHsgcmV0dXJuIHN0
YXRpY19jYXN0PEZTX0ZJWEVEPihuICogNjU1MzYpOyB9Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKLXsKLSAgICBpZiAoIXJ1bi5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKLSAgICBIYXJmQnV6elNoYXBlciBzaGFw
ZXIodGhpcywgcnVuKTsKLSAgICBzaGFwZXIuc2V0RHJhd1JhbmdlKGZyb20sIHRvKTsKLSAgICBp
ZiAoIXNoYXBlci5zaGFwZSgmZ2x5cGhCdWZmZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgRmxv
YXRQb2ludCBhZGp1c3RlZFBvaW50ID0gc2hhcGVyLmFkanVzdFN0YXJ0UG9pbnQocG9pbnQpOwot
ICAgIGZsb2F0IHN0YXJ0WCA9IGFkanVzdGVkUG9pbnQueCgpOwotCi0gICAgZHJhd0dseXBoQnVm
ZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIGFkanVzdGVkUG9pbnQpOwotICAgIHJldHVy
biBhZGp1c3RlZFBvaW50LngoKSAtIHN0YXJ0WDsKLX0KLQotZmxvYXQgRm9udDo6ZmxvYXRXaWR0
aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiAvKiBmYWxsYmFja0ZvbnRzICovLCBHbHlwaE92ZXJmbG93KiAvKiBnbHlwaE92
ZXJmbG93ICovKSBjb25zdAotewotICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4p
OwotICAgIGlmICghc2hhcGVyLnNoYXBlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBzaGFwZXIudG90YWxXaWR0aCgpOwotfQotCi0vLyBSZXR1cm4gdGhlIGNvZGUgcG9pbnQgaW5k
ZXggZm9yIHRoZSBnaXZlbiB8eHwgb2Zmc2V0IGludG8gdGhlIHRleHQgcnVuLgotaW50IEZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9u
IGlzIG5vdCBhIHByb2JsZW0gZm9yIEhUTUwsIGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBw
YXNzZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVycwotICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBv
c2l0aW9uKCkuIEJ1ZyBodHRwOi8vd2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhp
cyBwcm9ibGVtLgotICAgIGludCB0YXJnZXRYID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbik7
Ci0KLSAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKLSAgICBpZiAoIXNoYXBl
ci5zaGFwZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc2hhcGVyLm9mZnNldEZv
clBvc2l0aW9uKHRhcmdldFgpOwotfQotCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgSGFyZkJ1enpTaGFw
ZXIgc2hhcGVyKHRoaXMsIHJ1bik7Ci0gICAgaWYgKCFzaGFwZXIuc2hhcGUoKSkKLSAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOwotICAgIHJldHVybiBzaGFwZXIuc2VsZWN0aW9uUmVjdChwb2lu
dCwgaGVpZ2h0LCBmcm9tLCB0byk7Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBGU19TVEFURSogaVR5cGUgPSBmb250LT5wbGF0
Zm9ybURhdGEoKS5zY2FsZWRGb250KGNvbnRleHQtPmdldENUTSgpLnlTY2FsZSgpKTsKLSAgICBp
ZiAoIWlUeXBlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9p
bnQgPSBwb2ludDsKLQotICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQotICAgICAgICBhZGp1c3RlZFBvaW50Lm1vdmUoLShmb250LT5mb250TWV0
cmljcygpLmZsb2F0QXNjZW50KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC0+Zm9udE1ldHJp
Y3MoKS5mbG9hdEFzY2VudCgpKSwgMCk7Ci0KLSAgICBib29sIHNvZnR3YXJlQmx1clJlcXVpcmVk
ID0gY29udGV4dC0+c3RhdGUoKS5zaGFkb3dCbHVyIC8gZm9udC0+Zm9udE1ldHJpY3MoKS54SGVp
Z2h0KCkgPiAwLjU7Ci0KLSAgICBGbG9hdFNpemUgY3VycmVudFNoYWRvd09mZnNldDsKLSAgICBm
bG9hdCBjdXJyZW50U2hhZG93Qmx1cjsKLSAgICBDb2xvciBjdXJyZW50U2hhZG93Q29sb3I7Ci0g
ICAgQ29sb3JTcGFjZSBjdXJyZW50Q29sb3JTcGFjZTsKLQotICAgIC8vIElmIHdlIGhhdmUgYSBz
aGFkb3cgYmx1ciwgYW5kIGl0IGlzIHRvbyBiaWcgdG8gYXBwbHkgYXQgdGV4dC1yZW5kZXIgdGlt
ZSwgd2UgbXVzdCByZW5kZXIgaXQgbm93LgotICAgIGlmIChjb250ZXh0LT5oYXNTaGFkb3coKSAm
JiBzb2Z0d2FyZUJsdXJSZXF1aXJlZCkgewotICAgICAgICBjb250ZXh0LT5nZXRTaGFkb3coY3Vy
cmVudFNoYWRvd09mZnNldCwgY3VycmVudFNoYWRvd0JsdXIsIGN1cnJlbnRTaGFkb3dDb2xvciwg
Y3VycmVudENvbG9yU3BhY2UpOwotCi0gICAgICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
IHN0YXRlID0gY29udGV4dC0+c3RhdGUoKTsKLSAgICAgICAgRmxvYXRTaXplIG9mZnNldCA9IHN0
YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKQotICAgICAgICAgICAgb2Zmc2V0LnNldEhlaWdodCgtb2Zmc2V0LmhlaWdodCgpKTsKLSAg
ICAgICAgU2hhZG93Qmx1ciBzaGFkb3coRmxvYXRTaXplKHN0YXRlLnNoYWRvd0JsdXIsIHN0YXRl
LnNoYWRvd0JsdXIpLCBvZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLCBzdGF0ZS5zaGFkb3dDb2xv
clNwYWNlKTsKLSAgICAgICAgRmxvYXRQb2ludCBtaW5Qb2ludChhZGp1c3RlZFBvaW50LngoKSwg
YWRqdXN0ZWRQb2ludC55KCkgLSBmb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAgRmxv
YXRQb2ludCBtYXhQb2ludChhZGp1c3RlZFBvaW50LngoKSwgYWRqdXN0ZWRQb2ludC55KCkgKyBm
b250TWV0cmljcygpLmRlc2NlbnQoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgY3VycmVudFBvaW50
ID0gYWRqdXN0ZWRQb2ludDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7
ICsraSkgewotICAgICAgICAgICAgY3VycmVudFBvaW50ICs9ICpnbHlwaEJ1ZmZlci5hZHZhbmNl
cyhmcm9tICsgaSk7Ci0gICAgICAgICAgICBtaW5Qb2ludC5zZXRYKHN0ZDo6bWluKG1pblBvaW50
LngoKSwgY3VycmVudFBvaW50LngoKSkpOwotICAgICAgICAgICAgbWluUG9pbnQuc2V0WShzdGQ6
Om1pbihtaW5Qb2ludC55KCksIGN1cnJlbnRQb2ludC55KCkpKTsKLSAgICAgICAgICAgIG1heFBv
aW50ID0gbWF4UG9pbnQuZXhwYW5kZWRUbyhjdXJyZW50UG9pbnQpOwotICAgICAgICB9Ci0gICAg
ICAgIGNvbnN0IEZsb2F0UmVjdCBib3VuZGluZ1JlY3QobWluUG9pbnQueCgpLCBtaW5Qb2ludC55
KCksIG1heFBvaW50LngoKSAtIG1pblBvaW50LngoKSwgbWF4UG9pbnQueSgpIC0gbWluUG9pbnQu
eSgpKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LmJl
Z2luU2hhZG93TGF5ZXIoY29udGV4dCwgYm91bmRpbmdSZWN0KTsKLSAgICAgICAgaWYgKHNoYWRv
d0NvbnRleHQpIHsKLSAgICAgICAgICAgIGlUeXBlID0gZm9udC0+cGxhdGZvcm1EYXRhKCkuc2Nh
bGVkRm9udChzaGFkb3dDb250ZXh0LT5nZXRDVE0oKS55U2NhbGUoKSk7Ci0gICAgICAgICAgICBz
aGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRkR2x5cGhzKGdseXBoQnVmZmVyLmds
eXBocyhmcm9tKSwKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpGbG9hdFNpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSks
Ci0gICAgICAgICAgICAgICAgbnVtR2x5cGhzLCBhZGp1c3RlZFBvaW50LCBpVHlwZSwgMCwgMCk7
Ci0gICAgICAgICAgICBpVHlwZSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoY29u
dGV4dC0+Z2V0Q1RNKCkueVNjYWxlKCkpOwotICAgICAgICAgICAgc2hhZG93LmVuZFNoYWRvd0xh
eWVyKGNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5jbGVhclNoYWRvdygpOwotICAgIH0KLQotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5hZGRHbHlwaHMoZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLAotICAgICAgICByZWludGVy
cHJldF9jYXN0PGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFNpemUqPihnbHlwaEJ1
ZmZlci5hZHZhbmNlcyhmcm9tKSksCi0gICAgICAgIG51bUdseXBocywgYWRqdXN0ZWRQb2ludCwg
aVR5cGUsCi0gICAgICAgIGNvbnRleHQtPmZpbGxHcmFkaWVudCgpID8gY29udGV4dC0+ZmlsbEdy
YWRpZW50KCktPnBsYXRmb3JtR3JhZGllbnQoKSA6IChjb250ZXh0LT5maWxsUGF0dGVybigpID8g
Y29udGV4dC0+ZmlsbFBhdHRlcm4oKS0+cGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgp
KSA6IHN0YXRpY19jYXN0PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGFpbnQqPigw
KSksCi0gICAgICAgIGNvbnRleHQtPnN0cm9rZUdyYWRpZW50KCkgPyBjb250ZXh0LT5zdHJva2VH
cmFkaWVudCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkgOiAoY29udGV4dC0+c3Ryb2tlUGF0dGVybigp
ID8gY29udGV4dC0+c3Ryb2tlUGF0dGVybigpLT5wbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNm
b3JtKCkpIDogc3RhdGljX2Nhc3Q8QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQYWlu
dCo+KDApKSk7Ci0KLSAgICBpZiAoc29mdHdhcmVCbHVyUmVxdWlyZWQpCi0gICAgICAgIGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXRTaGFkb3coY3VycmVudFNoYWRvd09mZnNldCwgY3Vy
cmVudFNoYWRvd0JsdXIsIGN1cnJlbnRTaGFkb3dDb2xvci5pc1ZhbGlkKCkgPyBjdXJyZW50U2hh
ZG93Q29sb3IucmdiKCkgOiBtYWtlUkdCQSgwLCAwLCAwLCAweEZGIC8gMyksIGNvbnRleHQtPnN0
YXRlKCkuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwotfQotCi1ib29sIEZvbnQ6OmNhblJldHVy
bkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250
ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21p
Y1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAv
KiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Ci17Ci0gICAgLy8gbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4
dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDYWNoZUJsYWNrQmVycnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9u
dENhY2hlQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9udENhY2hlQmxhY2tCZXJyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJG
b250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0jaW5jbHVk
ZSAiSVR5cGVVdGlscy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxmb250Y29uZmlnL2Zv
bnRjb25maWcuaD4KLSNpbmNsdWRlIDxmc19hcGkuaD4KLSNpbmNsdWRlIDx1bmljb2RlL2xvY2lk
Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGb250Q2FjaGU6OnBsYXRmb3Jt
SW5pdCgpCi17Ci0gICAgLy8gSXQncyBmaW5lIHRvIGNhbGwgRmNJbml0IG11bHRpcGxlIHRpbWVz
IHBlciB0aGUgZG9jdW1lbnRhdGlvbi4KLSAgICBpZiAoIUZjSW5pdCgpKQotICAgICAgICBDUkFT
SCgpOwotfQotCi12b2lkIEZvbnRDYWNoZTo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGFyYWN0ZXJzLCBjb25zdCBjaGFyKiwg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2ltcGxlRm9udEZhbWlseSogZmFt
aWx5KQotewotICAgIEZjQ2hhclNldCogY3NldCA9IEZjQ2hhclNldENyZWF0ZSgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytpKSB7Ci0gICAgICAgIGlmIChV
MTZfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcnNbaV0pCi0gICAgICAgICAgICAmJiBVMTZfSVNfU1VS
Uk9HQVRFX0xFQUQoY2hhcmFjdGVyc1tpXSkKLSAgICAgICAgICAgICYmIGkgIT0gbnVtQ2hhcmFj
dGVycyAtIDEKLSAgICAgICAgICAgICYmIFUxNl9JU19UUkFJTChjaGFyYWN0ZXJzW2kgKyAxXSkp
IHsKLSAgICAgICAgICAgIEZjQ2hhclNldEFkZENoYXIoY3NldCwgVTE2X0dFVF9TVVBQTEVNRU5U
QVJZKGNoYXJhY3RlcnNbaV0sIGNoYXJhY3RlcnNbaSsxXSkpOwotICAgICAgICAgICAgaSsrOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEZjQ2hhclNldEFkZENoYXIoY3NldCwgY2hhcmFj
dGVyc1tpXSk7Ci0gICAgfQotICAgIEZjUGF0dGVybiogcGF0dGVybiA9IEZjUGF0dGVybkNyZWF0
ZSgpOwotCi0gICAgRmNWYWx1ZSBmY3ZhbHVlOwotICAgIGZjdmFsdWUudHlwZSA9IEZjVHlwZUNo
YXJTZXQ7Ci0gICAgZmN2YWx1ZS51LmMgPSBjc2V0OwotICAgIEZjUGF0dGVybkFkZChwYXR0ZXJu
LCBGQ19DSEFSU0VULCBmY3ZhbHVlLCBGY0ZhbHNlKTsKLQotICAgIGZjdmFsdWUudHlwZSA9IEZj
VHlwZUJvb2w7Ci0gICAgZmN2YWx1ZS51LmIgPSBGY1RydWU7Ci0gICAgRmNQYXR0ZXJuQWRkKHBh
dHRlcm4sIEZDX1NDQUxBQkxFLCBmY3ZhbHVlLCBGY0ZhbHNlKTsKLQotICAgIGZjdmFsdWUudHlw
ZSA9IEZjVHlwZUludGVnZXI7Ci0gICAgZmN2YWx1ZS51LmkgPSAoZGVzY3JpcHRpb24ud2VpZ2h0
KCkgPj0gRm9udFdlaWdodEJvbGQpID8gRkNfV0VJR0hUX0JPTEQgOiBGQ19XRUlHSFRfTk9STUFM
OwotICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19XRUlHSFQsIGZjdmFsdWUsIEZjRmFsc2Up
OwotCi0gICAgZmN2YWx1ZS50eXBlID0gRmNUeXBlSW50ZWdlcjsKLSAgICBmY3ZhbHVlLnUuaSA9
IChkZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBGb250SXRhbGljT24pID8gRkNfU0xBTlRfSVRBTElD
IDogRkNfU0xBTlRfUk9NQU47Ci0gICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX1NMQU5ULCBm
Y3ZhbHVlLCBGY0ZhbHNlKTsKLQotICAgIEZjQ29uZmlnU3Vic3RpdHV0ZSgwLCBwYXR0ZXJuLCBG
Y01hdGNoUGF0dGVybik7Ci0gICAgRmNEZWZhdWx0U3Vic3RpdHV0ZShwYXR0ZXJuKTsKLQotICAg
IEZjUmVzdWx0IHJlc3VsdDsKLSAgICBGY0ZvbnRTZXQqIGZvbnRTZXQgPSBGY0ZvbnRTb3J0KDAs
IHBhdHRlcm4sIDAsIDAsICZyZXN1bHQpOwotICAgIEZjUGF0dGVybkRlc3Ryb3kocGF0dGVybik7
Ci0gICAgRmNDaGFyU2V0RGVzdHJveShjc2V0KTsKLQotICAgIGlmICghZm9udFNldCkgewotICAg
ICAgICBmYW1pbHktPm5hbWUgPSBTdHJpbmcoKTsKLSAgICAgICAgZmFtaWx5LT5pc0JvbGQgPSBm
YWxzZTsKLSAgICAgICAgZmFtaWx5LT5pc0l0YWxpYyA9IGZhbHNlOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgZm9udGNvbmZpZyBoYXZlIGEgYnVn
IHdoZXJlIHRoZXkgY2Fubm90IHNlbGVjdAotICAgIC8vIG9ubHkgc2NhbGFibGUgZm9udHMgc28g
d2UgaGF2ZSB0byBtYW51YWxseSBmaWx0ZXIgdGhlIHJlc3VsdHMuCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBmb250U2V0LT5uZm9udDsgKytpKSB7Ci0gICAgICAgIEZjUGF0dGVybiogY3VycmVu
dCA9IGZvbnRTZXQtPmZvbnRzW2ldOwotICAgICAgICBGY0Jvb2wgaXNTY2FsYWJsZTsKLQotICAg
ICAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChjdXJyZW50LCBGQ19TQ0FMQUJMRSwgMCwgJmlzU2Nh
bGFibGUpICE9IEZjUmVzdWx0TWF0Y2gKLSAgICAgICAgICAgIHx8ICFpc1NjYWxhYmxlKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gZm9udGNvbmZpZyBjYW4gYWxzbyByZXR1
cm4gZm9udHMgd2hpY2ggYXJlIHVucmVhZGFibGUKLSAgICAgICAgRmNDaGFyOCogY0ZpbGVuYW1l
OwotICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0U3RyaW5nKGN1cnJlbnQsIEZDX0ZJTEUsIDAsICZj
RmlsZW5hbWUpICE9IEZjUmVzdWx0TWF0Y2gpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBpZiAoYWNjZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNGaWxlbmFtZSksIFJfT0sp
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgRmNDaGFyOCogZmFtaWx5TmFtZTsK
LSAgICAgICAgaWYgKEZjUGF0dGVybkdldFN0cmluZyhjdXJyZW50LCBGQ19GQU1JTFksIDAsICZm
YW1pbHlOYW1lKSA9PSBGY1Jlc3VsdE1hdGNoKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBj
aGFyRmFtaWx5ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFtaWx5TmFtZSk7Ci0gICAgICAg
ICAgICBmYW1pbHktPm5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KGNoYXJGYW1pbHksIHN0cmxlbihj
aGFyRmFtaWx5KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgd2VpZ2h0OwotICAgICAgICBp
ZiAoRmNQYXR0ZXJuR2V0SW50ZWdlcihjdXJyZW50LCBGQ19XRUlHSFQsIDAsICZ3ZWlnaHQpID09
IEZjUmVzdWx0TWF0Y2gpCi0gICAgICAgICAgICBmYW1pbHktPmlzQm9sZCA9IHdlaWdodCA+PSBG
Q19XRUlHSFRfQk9MRDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFtaWx5LT5pc0JvbGQg
PSBmYWxzZTsKLQotICAgICAgICBpbnQgc2xhbnQ7Ci0gICAgICAgIGlmIChGY1BhdHRlcm5HZXRJ
bnRlZ2VyKGN1cnJlbnQsIEZDX1NMQU5ULCAwLCAmc2xhbnQpID09IEZjUmVzdWx0TWF0Y2gpCi0g
ICAgICAgICAgICBmYW1pbHktPmlzSXRhbGljID0gc2xhbnQgIT0gRkNfU0xBTlRfUk9NQU47Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhbWlseS0+aXNJdGFsaWMgPSBmYWxzZTsKLQotICAg
ICAgICBGY0ZvbnRTZXREZXN0cm95KGZvbnRTZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgRmNGb250U2V0RGVzdHJveShmb250U2V0KTsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgYm9v
bCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCi17Ci0gICAgaWN1OjpMb2Nh
bGUgbG9jYWxlID0gaWN1OjpMb2NhbGU6OmdldERlZmF1bHQoKTsKLSAgICBGb250Q2FjaGU6OlNp
bXBsZUZvbnRGYW1pbHkgZmFtaWx5OwotICAgIEZvbnRDYWNoZTo6Z2V0Rm9udEZhbWlseUZvckNo
YXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoLCBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKSwgZm9udERl
c2NyaXB0aW9uLCAmZmFtaWx5KTsKLSAgICBpZiAoZmFtaWx5Lm5hbWUuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIEF0b21pY1N0cmluZyBhdG9taWNGYW1pbHkoZmFtaWx5Lm5h
bWUpOwotICAgIC8vIENoYW5nZXMgd2VpZ2h0IGFuZC9vciBpdGFsaWMgb2YgZ2l2ZW4gRm9udERl
c2NyaXB0aW9uIGRlcGVuZHMgb24KLSAgICAvLyB0aGUgcmVzdWx0IG9mIGZvbnRjb25maWcgc28g
dGhhdCBrZWVwaW5nIHRoZSBjb3JyZWN0IGZvbnQgbWFwcGluZwotICAgIC8vIG9mIHRoZSBnaXZl
biBjaGFyYWN0ZXJzLiBTZWUgaHR0cDovL2NyYnVnLmNvbS8zMjEwOSBmb3IgZGV0YWlscy4KLSAg
ICBib29sIHNob3VsZFNldEZha2VCb2xkID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRTZXRGYWtl
SXRhbGljID0gZmFsc2U7Ci0gICAgRm9udERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7Ci0gICAgaWYgKGZhbWlseS5pc0JvbGQgJiYgZGVzY3JpcHRpb24ud2VpZ2h0KCkg
PCBGb250V2VpZ2h0Qm9sZCkKLSAgICAgICAgZGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWln
aHRCb2xkKTsKLSAgICBpZiAoIWZhbWlseS5pc0JvbGQgJiYgZGVzY3JpcHRpb24ud2VpZ2h0KCkg
Pj0gRm9udFdlaWdodEJvbGQpIHsKLSAgICAgICAgc2hvdWxkU2V0RmFrZUJvbGQgPSB0cnVlOwot
ICAgICAgICBkZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgfQot
ICAgIGlmIChmYW1pbHkuaXNJdGFsaWMgJiYgZGVzY3JpcHRpb24uaXRhbGljKCkgPT0gRm9udEl0
YWxpY09mZikKLSAgICAgICAgZGVzY3JpcHRpb24uc2V0SXRhbGljKEZvbnRJdGFsaWNPbik7Ci0g
ICAgaWYgKCFmYW1pbHkuaXNJdGFsaWMgJiYgZGVzY3JpcHRpb24uaXRhbGljKCkgPT0gRm9udEl0
YWxpY09uKSB7Ci0gICAgICAgIHNob3VsZFNldEZha2VJdGFsaWMgPSB0cnVlOwotICAgICAgICBk
ZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udEl0YWxpY09mZik7Ci0gICAgfQotCi0gICAgRm9udFBs
YXRmb3JtRGF0YSogc3Vic3RpdHV0ZVBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9y
bURhdGEoZGVzY3JpcHRpb24sIGF0b21pY0ZhbWlseSwgRG9Ob3RSZXRhaW4pOwotICAgIGlmICgh
c3Vic3RpdHV0ZVBsYXRmb3JtRGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRm9udFBsYXRm
b3JtRGF0YSBwbGF0Zm9ybURhdGEgPSBGb250UGxhdGZvcm1EYXRhKCpzdWJzdGl0dXRlUGxhdGZv
cm1EYXRhKTsKLSAgICBwbGF0Zm9ybURhdGEuc2V0RmFrZUJvbGQoc2hvdWxkU2V0RmFrZUJvbGQp
OwotICAgIHBsYXRmb3JtRGF0YS5zZXRGYWtlSXRhbGljKHNob3VsZFNldEZha2VJdGFsaWMpOwot
ICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YSgmcGxhdGZvcm1EYXRhLCBEb05vdFJldGFpbik7
Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRS
ZXRhaW4pCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHNh
bnNTdHIsICgiU2FucyIpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0
cmluZywgc2VyaWZTdHIsICgiU2VyaWYiKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIG1vbm9zcGFjZVN0ciwgKCJNb25vc3BhY2UiKSk7Ci0KLSAgICBGb250
UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhID0gMDsKLSAgICBzd2l0Y2ggKGRlc2NyaXB0
aW9uLmdlbmVyaWNGYW1pbHkoKSkgewotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZh
bWlseToKLSAgICAgICAgZm9udFBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURh
dGEoZGVzY3JpcHRpb24sIHNlcmlmU3RyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKLSAgICAgICAgZm9udFBsYXRmb3JtRGF0YSA9
IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIG1vbm9zcGFjZVN0cik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZm9udFBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIHNhbnNTdHIpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBpZiAoIWZvbnRQbGF0Zm9ybURhdGEpIHsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGFyaWFsU3RyLCAoIkFyaWFsIikpOwotICAgICAgICBm
b250UGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwg
YXJpYWxTdHIpOwotICAgIH0KLQotICAgIEFTU0VSVChmb250UGxhdGZvcm1EYXRhKTsKLSAgICBy
ZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9udFBsYXRmb3JtRGF0YSk7Ci19Ci0KLXZvaWQgRm9u
dENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5z
aWduZWQ+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMgU3RyaW5nIGdl
dEZhbWlseU5hbWVTdHJpbmdGcm9tRm9udERlc2NyaXB0aW9uQW5kRmFtaWx5KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkK
LXsKLSAgICAvLyBJZiB3ZSdyZSBjcmVhdGluZyBhIGZhbGxiYWNrIGZvbnQgKGUuZy4gIi13ZWJr
aXQtbW9ub3NwYWNlIiksIGNvbnZlcnQgdGhlIG5hbWUgaW50bwotICAgIC8vIHRoZSBmYWxsYmFj
ayBuYW1lIChsaWtlICJtb25vc3BhY2UiKSB0aGF0IGZvbnRjb25maWcgdW5kZXJzdGFuZHMuCi0g
ICAgaWYgKGZhbWlseS5sZW5ndGgoKSAmJiAhZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJraXQtIikp
Ci0gICAgICAgIHJldHVybiBmYW1pbHkuc3RyaW5nKCk7Ci0KLSAgICBzd2l0Y2ggKGZvbnREZXNj
cmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpIHsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3Rh
bmRhcmRGYW1pbHk6Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgotICAg
ICAgICByZXR1cm4gInNlcmlmIjsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1Nlcmlm
RmFtaWx5OgotICAgICAgICByZXR1cm4gInNhbnMtc2VyaWYiOwotICAgIGNhc2UgRm9udERlc2Ny
aXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6Ci0gICAgICAgIHJldHVybiAibW9ub3NwYWNlIjsKLSAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseToKLSAgICAgICAgcmV0dXJuICJj
dXJzaXZlIjsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseToKLSAgICAg
ICAgcmV0dXJuICJmYW50YXN5IjsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICIiOwotICAgIH0KLX0KLQotaW50IGZvbnRX
ZWlnaHRUb0ZvbnRjb25maWdXZWlnaHQoRm9udFdlaWdodCB3ZWlnaHQpCi17Ci0gICAgc3dpdGNo
ICh3ZWlnaHQpIHsKLSAgICBjYXNlIEZvbnRXZWlnaHQxMDA6Ci0gICAgICAgIHJldHVybiBGQ19X
RUlHSFRfVEhJTjsKLSAgICBjYXNlIEZvbnRXZWlnaHQyMDA6Ci0gICAgICAgIHJldHVybiBGQ19X
RUlHSFRfVUxUUkFMSUdIVDsKLSAgICBjYXNlIEZvbnRXZWlnaHQzMDA6Ci0gICAgICAgIHJldHVy
biBGQ19XRUlHSFRfTElHSFQ7Ci0gICAgY2FzZSBGb250V2VpZ2h0NDAwOgotICAgICAgICByZXR1
cm4gRkNfV0VJR0hUX1JFR1VMQVI7Ci0gICAgY2FzZSBGb250V2VpZ2h0NTAwOgotICAgICAgICBy
ZXR1cm4gRkNfV0VJR0hUX01FRElVTTsKLSAgICBjYXNlIEZvbnRXZWlnaHQ2MDA6Ci0gICAgICAg
IHJldHVybiBGQ19XRUlHSFRfU0VNSUJPTEQ7Ci0gICAgY2FzZSBGb250V2VpZ2h0NzAwOgotICAg
ICAgICByZXR1cm4gRkNfV0VJR0hUX0JPTEQ7Ci0gICAgY2FzZSBGb250V2VpZ2h0ODAwOgotICAg
ICAgICByZXR1cm4gRkNfV0VJR0hUX0VYVFJBQk9MRDsKLSAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6
Ci0gICAgICAgIHJldHVybiBGQ19XRUlHSFRfVUxUUkFCTEFDSzsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIEZDX1dFSUdIVF9SRUdV
TEFSOwotICAgIH0KLX0KLQotUGFzc093blB0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIC8vIFRoZSBDU1MgZm9u
dCBtYXRjaGluZyBhbGdvcml0aG0gKGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZm9udHMvI2Zv
bnQtbWF0Y2hpbmctYWxnb3JpdGhtKQotICAgIC8vIHNheXMgdGhhdCB3ZSBtdXN0IGZpbmQgYW4g
ZXhhY3QgbWF0Y2ggZm9yIGZvbnQgZmFtaWx5LCBzbGFudCAoaXRhbGljIG9yIG9ibGlxdWUgY2Fu
IGJlIHVzZWQpCi0gICAgLy8gYW5kIGZvbnQgd2VpZ2h0ICh3ZSBvbmx5IG1hdGNoIGJvbGQvbm9u
LWJvbGQgaGVyZSkuCi0gICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7
Ci0gICAgU3RyaW5nIGZhbWlseU5hbWVTdHJpbmcoZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21Gb250
RGVzY3JpcHRpb25BbmRGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpKTsKLSAgICBpZiAo
IUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLCBGQ19GQU1JTFksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgRmNDaGFyOCo+KGZhbWlseU5hbWVTdHJpbmcudXRmOCgpLmRhdGEoKSkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJvb2wgaXRhbGljID0gZm9udERlc2NyaXB0aW9uLml0
YWxpYygpOwotICAgIGlmICghRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLCBGQ19TTEFOVCwg
aXRhbGljID8gRkNfU0xBTlRfSVRBTElDIDogRkNfU0xBTlRfUk9NQU4pKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfV0VJ
R0hULCBmb250V2VpZ2h0VG9Gb250Y29uZmlnV2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQo
KSkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIUZjUGF0dGVybkFkZERvdWJs
ZShwYXR0ZXJuLCBGQ19QSVhFTF9TSVpFLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNp
emUoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gVGhlIHN0cmF0ZWd5IGlz
IG9yaWdpbmFsbHkgZnJvbSBTa2lhIChzcmMvcG9ydHMvU2tGb250SG9zdF9mb250Y29uZmlnLmNw
cCk6Ci0KLSAgICAvLyBBbGxvdyBGb250Y29uZmlnIHRvIGRvIHByZS1tYXRjaCBzdWJzdGl0dXRp
b24uIFVubGVzcyB3ZSBhcmUgYWNjZXNzaW5nIGEgImZhbGxiYWNrIgotICAgIC8vIGZhbWlseSBs
aWtlICJzYW5zLCIgdGhpcyBpcyB0aGUgb25seSB0aW1lIHdlIGFsbG93IEZvbnRjb25maWcgdG8g
c3Vic3RpdHV0ZSBvbmUKLSAgICAvLyBmYW1pbHkgbmFtZSBmb3IgYW5vdGhlciAoaS5lLiBpZiB0
aGUgZm9udHMgYXJlIGFsaWFzZWQgdG8gZWFjaCBvdGhlcikuCi0gICAgRmNDb25maWdTdWJzdGl0
dXRlKDAsIHBhdHRlcm4sIEZjTWF0Y2hQYXR0ZXJuKTsKLSAgICBGY0RlZmF1bHRTdWJzdGl0dXRl
KHBhdHRlcm4pOwotCi0gICAgRmNDaGFyOCogZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZp
Z3VyYXRpb247Ci0gICAgRmNQYXR0ZXJuR2V0U3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgMCwg
JmZvbnRDb25maWdGYW1pbHlOYW1lQWZ0ZXJDb25maWd1cmF0aW9uKTsKLSAgICBTdHJpbmcgZmFt
aWx5TmFtZUFmdGVyQ29uZmlndXJhdGlvbiA9IFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb24pKTsKLQot
ICAgIEZjUmVzdWx0IGZvbnRDb25maWdSZXN1bHQ7Ci0gICAgRmNQYXR0ZXJuKiByZXN1bHRQYXR0
ZXJuID0gRmNGb250TWF0Y2goMCwgcGF0dGVybiwgJmZvbnRDb25maWdSZXN1bHQpOwotICAgIEZj
UGF0dGVybkRlc3Ryb3kocGF0dGVybik7Ci0gICAgaWYgKCFyZXN1bHRQYXR0ZXJuKSAvLyBObyBt
YXRjaC4KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGY0NoYXI4KiBmb250Q29uZmln
RmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmc7Ci0gICAgRmNQYXR0ZXJuR2V0U3RyaW5nKHJlc3VsdFBh
dHRlcm4sIEZDX0ZBTUlMWSwgMCwgJmZvbnRDb25maWdGYW1pbHlOYW1lQWZ0ZXJNYXRjaGluZyk7
Ci0gICAgU3RyaW5nIGZhbWlseU5hbWVBZnRlck1hdGNoaW5nID0gU3RyaW5nOjpmcm9tVVRGOChy
ZWludGVycHJldF9jYXN0PGNoYXIqPihmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcp
KTsKLQotICAgIC8vIElmIEZvbnRjb25maWcgZ2F2ZSB1c2UgYSBkaWZmZXJlbnQgZm9udCBmYW1p
bHkgdGhhbiB0aGUgb25lIHdlIHJlcXVlc3RlZCwgd2Ugc2hvdWxkIGlnbm9yZSBpdAotICAgIC8v
IGFuZCBhbGxvdyBXZWJDb3JlIHRvIGdpdmUgdXMgdGhlIG5leHQgZm9udCBvbiB0aGUgQ1NTIGZh
bGxiYWNrIGxpc3QuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBpZgotICAgIC8vIHRoaXMgZmFtaWx5
IG5hbWUgaXMgYSBjb21tb25seSB1c2VkIGdlbmVyaWMgZmFtaWx5LgotICAgIGlmICghZXF1YWxJ
Z25vcmluZ0Nhc2UoZmFtaWx5TmFtZUFmdGVyQ29uZmlndXJhdGlvbiwgZmFtaWx5TmFtZUFmdGVy
TWF0Y2hpbmcpCi0gICAgICAgICYmICEoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmlu
ZywgInNhbnMiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAic2Fucy1z
ZXJpZiIpCi0gICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5n
LCAic2VyaWYiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAibW9ub3Nw
YWNlIikKLSAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcs
ICJmYW50YXN5IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgImN1cnNp
dmUiKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaW50IGZvbnRXZWlnaHQ7Ci0g
ICAgRmNQYXR0ZXJuR2V0SW50ZWdlcihyZXN1bHRQYXR0ZXJuLCBGQ19XRUlHSFQsIDAsICZmb250
V2VpZ2h0KTsKLSAgICBib29sIHNob3VsZEZha2VCb2xkID0gZm9udFdlaWdodCA8IEZDX1dFSUdI
VF9CT0xEICYmIGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9sZDsKLQot
ICAgIGludCBmb250U2xhbnQ7Ci0gICAgRmNQYXR0ZXJuR2V0SW50ZWdlcihyZXN1bHRQYXR0ZXJu
LCBGQ19TTEFOVCwgMCwgJmZvbnRTbGFudCk7Ci0gICAgYm9vbCBzaG91bGRGYWtlSXRhbGljID0g
Zm9udFNsYW50ID09IEZDX1NMQU5UX1JPTUFOICYmIGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSA9
PSBGb250SXRhbGljT247Ci0KLSAgICBGY0NoYXI4KiBmb250RmlsZU5hbWU7Ci0gICAgRmNQYXR0
ZXJuR2V0U3RyaW5nKHJlc3VsdFBhdHRlcm4sIEZDX0ZJTEUsIDAsICZmb250RmlsZU5hbWUpOwot
ICAgIC8vIGZwcmludGYoc3RkZXJyLCAiTG9va2luZyBmb3IgJXMgZm91bmQgJXM6IGk6JWQgYjol
ZFxuIiwgZmFtaWx5LnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgZm9udEZpbGVOYW1lLCBzaG91
bGRGYWtlSXRhbGljLCBzaG91bGRGYWtlQm9sZCk7Ci0gICAgRmNQYXR0ZXJuRGVzdHJveShyZXN1
bHRQYXR0ZXJuKTsKLQotICAgIEZJTEVDSEFSIG5hbWVbTUFYX0ZPTlRfTkFNRV9MRU4rMV07Ci0g
ICAgbWVtc2V0KG5hbWUsIDAsIE1BWF9GT05UX05BTUVfTEVOKzEpOwotICAgIC8vIGZwcmludGYo
c3RkZXJyLCAiRlNfbG9hZF9mb250ICVzOiAiLCBmb250RmlsZU5hbWUpOwotICAgIGlmIChGU19s
b2FkX2ZvbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpnZXRJVHlwZSgpLCByZWlu
dGVycHJldF9jYXN0PEZJTEVDSEFSKj4oZm9udEZpbGVOYW1lKSwgMCwgMCwgTUFYX0ZPTlRfTkFN
RV9MRU4sIG5hbWUpICE9IFNVQ0NFU1MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIC8v
IGZwcmludGYoc3RkZXJyLCAiICVzXG4iLCBuYW1lKTsKLQotICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgRm9udFBsYXRmb3JtRGF0YShuYW1lLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCks
IHNob3VsZEZha2VCb2xkLCBzaG91bGRGYWtlSXRhbGljLCBmb250RGVzY3JpcHRpb24ub3JpZW50
YXRpb24oKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKLSAqLwotI2lmbmRlZiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKLSNk
ZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCi0KLSNpbmNsdWRlICJGb250T3JpZW50YXRp
b24uaCIKLSNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgotI2luY2x1ZGUgIkZvbnRXaWR0
aFZhcmlhbnQuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotdHlwZWRlZiBjaGFyIEZJTEVDSEFSOwotc3RydWN0IEZTX1NU
QVRFOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci1j
bGFzcyBNb25vdHlwZUZvbnQ7Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci0KLXN0cnVjdCBGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250Q3VzdG9tUGxh
dGZvcm1EYXRhKTsKLXB1YmxpYzoKLSAgICBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKEZJTEVDSEFS
KiBmb250TmFtZSwgU2hhcmVkQnVmZmVyJik7Ci0gICAgfkZvbnRDdXN0b21QbGF0Zm9ybURhdGEo
KTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgRm9udE9yaWVudGF0aW9uID0g
SG9yaXpvbnRhbCwKLSAgICAgICAgRm9udFdpZHRoVmFyaWFudCA9IFJlZ3VsYXJXaWR0aCwgRm9u
dFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdNb2RlKTsKLQotICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzRm9ybWF0KGNvbnN0IFN0cmluZyYpOwotCi0gICAgRklMRUNIQVIqIG1fZm9udE5h
bWU7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9idWZmZXI7Ci19OwotCi1zdGQ6OnVuaXF1
ZV9wdHI8Rm9udEN1c3RvbVBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0
YShTaGFyZWRCdWZmZXImKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFCbGFja0JlcnJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgotCi0jaW5j
bHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIklUeXBlVXRpbHMuaCIKLSNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPGZzX2FwaS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoRklMRUNI
QVIqIGZvbnROYW1lLCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKLSAgICA6IG1fZm9udE5hbWUoc3Ry
ZHVwKGZvbnROYW1lKSkKLSAgICAsIG1fYnVmZmVyKCZidWZmZXIpCi17Ci19Ci0KLUZvbnRDdXN0
b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKLXsKLSAgICBGU19MT05H
IHJldCA9IEZTX2RlbGV0ZV9mb250KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Z2V0
SVR5cGUoKSwgY29uc3RfY2FzdDxGSUxFQ0hBUio+KG1fZm9udE5hbWUpKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHJldCwgcmV0ID09IFNVQ0NFU1MpOwotICAgIGZyZWUobV9mb250TmFtZSk7Ci19Ci0K
LUZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0
YShpbnQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgRm9u
dE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCwg
Rm9udFJlbmRlcmluZ01vZGUpCi17Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250
TmFtZSwgc2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBvcmllbnRhdGlvbiwg
d2lkdGhWYXJpYW50KTsKLX0KLQotYm9vbCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpzdXBwb3J0
c0Zvcm1hdChjb25zdCBTdHJpbmcmIGZvcm1hdCkKLXsKLSAgICBib29sIGlzU3VwcG9ydGVkID0g
ZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybWF0LCAidHJ1ZXR5cGUiKSB8fCBlcXVhbElnbm9yaW5nQ2Fz
ZShmb3JtYXQsICJvcGVudHlwZSIpOwotI2lmIFVTRShPUEVOVFlQRV9TQU5JVElaRVIpCi0gICAg
aXNTdXBwb3J0ZWQgPSBpc1N1cHBvcnRlZCB8fCBlcXVhbElnbm9yaW5nQ2FzZShmb3JtYXQsICJ3
b2ZmIik7Ci0jZW5kaWYKLSAgICByZXR1cm4gaXNTdXBwb3J0ZWQ7Ci19Ci0KLXN0ZDo6dW5pcXVl
X3B0cjxGb250Q3VzdG9tUGxhdGZvcm1EYXRhPiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQotewotICAgIEZJTEVDSEFSIG5hbWVbTUFYX0ZPTlRfTkFN
RV9MRU4rMV07Ci0gICAgbWVtc2V0KG5hbWUsIDAsIE1BWF9GT05UX05BTUVfTEVOKzEpOwotICAg
IGlmIChGU19sb2FkX2ZvbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpnZXRJVHlw
ZSgpLCAwLCBjb25zdF9jYXN0PEZTX0JZVEUqPihyZWludGVycHJldF9jYXN0PGNvbnN0IEZTX0JZ
VEUqPihidWZmZXIuZGF0YSgpKSksIDAsIE1BWF9GT05UX05BTUVfTEVOLCBuYW1lKSAhPSBTVUND
RVNTKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEZvbnRDdXN0b21QbGF0Zm9ybURhdGE+KG5hbWUsIGJ1ZmZlcik7Ci19Ci0KLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9udFBsYXRmb3Jt
RGF0YUJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvRm9udFBsYXRmb3JtRGF0YUJsYWNrQmVycnkuY3BwCShyZXZp
c2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0ZvbnRQbGF0Zm9ybURhdGFCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwy
MjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotCi0j
aW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCi0jaW5jbHVkZSAiSVR5cGVVdGlscy5oIgotCi0jaW5j
bHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8ZnNf
YXBpLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShGSUxFQ0hBUiogbmFt
ZSwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUs
IEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlh
bnQpCi0gICAgOiBtX3N5bnRoZXRpY0JvbGQoc3ludGhldGljQm9sZCkKLSAgICAsIG1fc3ludGhl
dGljT2JsaXF1ZShzeW50aGV0aWNPYmxpcXVlKQotICAgICwgbV9vcmllbnRhdGlvbihvcmllbnRh
dGlvbikKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV93aWR0aFZhcmlhbnQod2lkdGhWYXJp
YW50KQotICAgICwgbV9mb250KDApCi0gICAgLCBtX25hbWUoZmFzdFN0ckR1cChuYW1lKSkKLSAg
ICAsIG1fc2NhbGVkRm9udCgwKQotICAgICwgbV9oYXJmQnV6ekZhY2UoKQotICAgICwgbV9pc0Nv
bG9yQml0bWFwRm9udChmYWxzZSkKLXsKLSAgICBBU1NFUlQobmFtZSk7Ci0gICAgbV9mb250ID0g
RlNfbmV3X2NsaWVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmdldElUeXBlKCks
IDApOwotICAgIEFTU0VSVChtX2ZvbnQpOwotICAgIGFwcGx5U3RhdGUobV9mb250KTsKLX0KLQot
Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQotewotICAgIGlmIChtX3NjYWxl
ZEZvbnQpIHsKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpjbGVhckds
eXBoQ2FjaGVGb3JGb250KG1fc2NhbGVkRm9udCk7Ci0gICAgICAgIEZTX2VuZF9jbGllbnQobV9z
Y2FsZWRGb250KTsKLSAgICB9Ci0gICAgaWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0gaGFzaFRhYmxl
RGVsZXRlZEZvbnRWYWx1ZSgpKQotICAgICAgICBGU19lbmRfY2xpZW50KG1fZm9udCk7Ci0gICAg
ZmFzdEZyZWUobV9uYW1lKTsKLX0KLQotY29uc3QgY2hhciogRm9udFBsYXRmb3JtRGF0YTo6bmFt
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmFtZTsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1E
YXRhOjphcHBseVN0YXRlKEZTX1NUQVRFKiBmb250LCBmbG9hdCBzY2FsZSkgY29uc3QKLXsKLSAg
ICBBU1NFUlQoZm9udCk7Ci0gICAgQVNTRVJUKG1fbmFtZSk7Ci0gICAgaWYgKEZTX3NldF9mb250
KGZvbnQsIG1fbmFtZSkgIT0gU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKEZTX3NldF9jbWFwKGZvbnQsIDMsIDEwKSAhPSBTVUNDRVNTKSAvLyBGaXJzdCB0cnkgV2lu
ZG93cyBVbmljb2RlIHdpdGggc3Vycm9nYXRlcy4uLgotICAgICAgICBpZiAoRlNfc2V0X2NtYXAo
Zm9udCwgMywgMSkgIT0gU1VDQ0VTUykgLy8gdHJ5IG5vcm1hbCBXaW5kb3dzIFVuaWNvZGUKLSAg
ICAgICAgICAgIGlmIChGU19zZXRfY21hcChmb250LCAxLCAwKSAhPSBTVUNDRVNTKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3N5bnRoZXRpY0JvbGQpIHsKLSAg
ICAgICAgaWYgKEZTX3NldF9ib2xkX3BjdChmb250LCBJVFlQRUZBS0VCT0xEQU1PVU5UKSAhPSBT
VUNDRVNTKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBGU19zZXRfZmxhZ3Mo
Zm9udCwgRkxBR1NfQ0hFQ0tfQ09OVE9VUl9XSU5ESU5HX09OKTsgLy8gd2UgbmVlZCBjb3JyZWN0
bHktd291bmQgY29udG91cnMgdG8gZmFrZSBib2xkCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KEZTX3NldF9ib2xkX3BjdChmb250LCAwKSAhPSBTVUNDRVNTKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBGU19zZXRfZmxhZ3MoZm9udCwgRkxBR1NfQ0hFQ0tfQ09OVE9VUl9X
SU5ESU5HX09GRik7Ci0gICAgfQotCi0gICAgRlNfRklYRUQgc2tldyA9IDA7Ci0gICAgaWYgKG1f
c3ludGhldGljT2JsaXF1ZSkKLSAgICAgICAgc2tldyA9IDEzOTMwOyAvLyAxMiBkZWdyZWVzCi0K
LSAgICBGU19GSVhFRCBmaXhlZFNjYWxlID0gc3RkOjptaW4oRml4TXVsKGZsb2F0VG9JVHlwZUZp
eGVkKHNjYWxlKSwgZmxvYXRUb0lUeXBlRml4ZWQobV9zaXplKSksIE1BWElUWVBFRk9OVFNDQUxF
KTsKLSAgICBpZiAoRlNfc2V0X3NjYWxlKGZvbnQsIGZpeGVkU2NhbGUsIEZpeE11bChmaXhlZFNj
YWxlLCBza2V3KSwgMCwgZml4ZWRTY2FsZSkgIT0gU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKEZTX3NldF9mbGFncyhmb250LCBGTEFHU19DTUFQX09GRikgIT0gU1VD
Q0VTUykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKEZTX3NldF9mbGFncyhmb250
LCBGTEFHU19ISU5UU19PRkYpICE9IFNVQ0NFU1MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmIChGU19zZXRfZmxhZ3MoZm9udCwgRkxBR1NfREVGQVVMVF9DU01fT0ZGKSAhPSBTVUND
RVNTKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9vcmllbnRhdGlvbiA9PSBW
ZXJ0aWNhbCkgewotICAgICAgICBpZiAoRlNfc2V0X2ZsYWdzKGZvbnQsIEZMQUdTX1ZFUlRJQ0FM
X09OKSAhPSBTVUNDRVNTKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNvdXJjZSkKLXsKLSAgICBtX2hhcmZCdXp6RmFjZSA9
IHNvdXJjZS5tX2hhcmZCdXp6RmFjZTsKLSAgICBtX3NjYWxlZEZvbnQgPSAwOwotICAgIGlmIChz
b3VyY2UubV9mb250ICYmIHNvdXJjZS5tX2ZvbnQgIT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1
ZSgpKSB7Ci0gICAgICAgIG1fZm9udCA9IEZTX25ld19jbGllbnQoc291cmNlLm1fZm9udCwgMCk7
Ci0gICAgICAgIG1fbmFtZSA9IGZhc3RTdHJEdXAoc291cmNlLm5hbWUoKSk7Ci0gICAgICAgIGJv
b2wgcmV0ID0gYXBwbHlTdGF0ZShtX2ZvbnQpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJldCwg
cmV0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9mb250ID0gc291cmNlLm1fZm9udDsKLX0KLQot
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhQXNz
aWduKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQotewotICAgIG1faGFyZkJ1enpGYWNl
ID0gb3RoZXIubV9oYXJmQnV6ekZhY2U7Ci0gICAgbV9zY2FsZWRGb250ID0gMDsKLSAgICBpZiAo
b3RoZXIubV9mb250ICYmIG90aGVyLm1fZm9udCAhPSBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVl
KCkpIHsKLSAgICAgICAgbV9mb250ID0gRlNfbmV3X2NsaWVudChvdGhlci5tX2ZvbnQsIDApOwot
ICAgICAgICBmYXN0RnJlZShtX25hbWUpOwotICAgICAgICBtX25hbWUgPSBmYXN0U3RyRHVwKG90
aGVyLm5hbWUoKSk7Ci0gICAgICAgIGJvb2wgcmV0ID0gYXBwbHlTdGF0ZShtX2ZvbnQpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJldCwgcmV0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9mb250
ID0gb3RoZXIubV9mb250OwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1ib29sIEZvbnRQbGF0
Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikg
Y29uc3QKLXsKLSAgICBpZiAobV9mb250ID09IG90aGVyLm1fZm9udCkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoIW1fZm9udCB8fCBtX2ZvbnQgPT0gaGFzaFRhYmxlRGVsZXRlZEZv
bnRWYWx1ZSgpIHx8ICFvdGhlci5tX2ZvbnQgfHwgb3RoZXIubV9mb250ID09IGhhc2hUYWJsZURl
bGV0ZWRGb250VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1f
Zm9udC0+Y3VyX3NmbnQgPT0gb3RoZXIubV9mb250LT5jdXJfc2ZudDsKLX0KLQotI2lmbmRlZiBO
REVCVUcKLVN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICJpVHlwZSBGb250IERhdGEiOwotfQotI2VuZGlmCi0KLUhhcmZCdXp6RmFjZSog
Rm9udFBsYXRmb3JtRGF0YTo6aGFyZkJ1enpGYWNlKCkKLXsKLSAgICBpZiAoIW1faGFyZkJ1enpG
YWNlKSB7Ci0gICAgICAgIHVpbnQ2NF90IHVuaXF1ZUlEID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KG1fZm9udCk7Ci0gICAgICAgIG1faGFyZkJ1enpGYWNlID0gSGFyZkJ1enpGYWNlOjpj
cmVhdGUoY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odGhpcyksIHVuaXF1ZUlEKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbV9oYXJmQnV6ekZhY2UuZ2V0KCk7Ci19Ci0KLUZTX1NUQVRFKiBG
b250UGxhdGZvcm1EYXRhOjpzY2FsZWRGb250KGZsb2F0IHNjYWxlKSBjb25zdAotewotICAgIEFT
U0VSVChzY2FsZSA+IDAuMCk7Ci0gICAgaWYgKG1fc2NhbGUgPT0gc2NhbGUgJiYgbV9zY2FsZWRG
b250KQotICAgICAgICByZXR1cm4gbV9zY2FsZWRGb250OwotCi0gICAgLy8gVGhpcyBtdXN0IGJl
IGFuIFNWRyBGb250LiBJdCBzZWVtcyBsaWtlIHRoZXJlIGlzIGFuIHVwc3RyZWFtIGJ1ZyB3aGVy
ZSB3ZWIgYW5kIFNWRyBmb250cwotICAgIC8vIGFyZSB1c2VkIGluIG9uZSBUZXh0UnVuLiBPdGhl
ciBwb3J0cyBzZWVtIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRoIGhhdmluZyBhbiBTVkcgRm9udCBp
bgotICAgIC8vIHRoaXMgcGF0aCBzbyBiYWlsIG91dCBpbnN0ZWFkIG9mIGNyYXNoLgotICAgIGlm
ICghbV9mb250KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX3NjYWxlZEZvbnQpIHsK
LSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpjbGVhckdseXBoQ2FjaGVG
b3JGb250KG1fc2NhbGVkRm9udCk7Ci0gICAgICAgIGlmIChGU19lbmRfY2xpZW50KG1fc2NhbGVk
Rm9udCkgIT0gU1VDQ0VTUykKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgfQotCi0gICAgbV9z
Y2FsZWRGb250ID0gRlNfbmV3X2NsaWVudChtX2ZvbnQsIDApOwotICAgIGlmICghYXBwbHlTdGF0
ZShtX3NjYWxlZEZvbnQsIHNjYWxlKSkgewotICAgICAgICBpZiAoRlNfZW5kX2NsaWVudChtX3Nj
YWxlZEZvbnQpICE9IFNVQ0NFU1MpCi0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICBtX3Nj
YWxlZEZvbnQgPSAwOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBtX3NjYWxlID0g
c2NhbGU7Ci0KLSAgICByZXR1cm4gbV9zY2FsZWRGb250OwotfQotCi12b2lkIEZvbnRQbGF0Zm9y
bURhdGE6OnNldEZha2VCb2xkKGJvb2wgZmFrZUJvbGQpCi17Ci0gICAgbV9zeW50aGV0aWNCb2xk
ID0gZmFrZUJvbGQ7Ci0gICAgYXBwbHlTdGF0ZShtX2ZvbnQpOwotfQotCi12b2lkIEZvbnRQbGF0
Zm9ybURhdGE6OnNldEZha2VJdGFsaWMoYm9vbCBmYWtlSXRhbGljKQotewotICAgIG1fc3ludGhl
dGljT2JsaXF1ZSA9IGZha2VJdGFsaWM7Ci0gICAgYXBwbHlTdGF0ZShtX2ZvbnQpOwotfQotCi1j
b25zdCB2b2lkKiBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUZvbnRIYW5kbGUoKSBjb25zdAot
ewotICAgIEFTU0VSVChtX2ZvbnQpOwotICAgIHJldHVybiBtX2ZvbnQtPmN1cl9zZm50OwotfQot
Ci1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpIGNvbnN0Ci17Ci0gICAgRlNf
QllURSogcG9zdFRhYmxlOwotICAgIEZTX1VMT05HIGxlbmd0aDsKLSAgICBpZiAobV9mb250ICYm
IChwb3N0VGFibGUgPSBGU19nZXRfdGFibGUobV9mb250LCBUQUdfcG9zdCwgVEJMX0VYVFJBQ1Qs
ICZsZW5ndGgpKSkgewotICAgICAgICBib29sIGZpeGVkID0gcmVpbnRlcnByZXRfY2FzdDxUVEZf
UE9TVCo+KHBvc3RUYWJsZSktPmlzRml4ZWRQaXRjaDsKLSAgICAgICAgRlNfZnJlZV90YWJsZSht
X2ZvbnQsIHBvc3RUYWJsZSk7Ci0gICAgICAgIHJldHVybiBmaXhlZDsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0dseXBoUGFnZVRyZWVOb2RlQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HbHlwaFBhZ2VU
cmVlTm9kZUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dseXBoUGFnZVRyZWVOb2RlQmxhY2tCZXJy
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5
cGhQYWdlVHJlZU5vZGUuaCIKLQotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVk
ZSA8ZnNfYXBpLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWNsYXNzIFdvcmxkVHlwZVNjb3BlZFB0ciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lk
ICgqRGVzdHJveUZ1bmN0aW9uKShUKik7Ci0KLSAgICBXb3JsZFR5cGVTY29wZWRQdHIoVCogcHRy
LCBEZXN0cm95RnVuY3Rpb24gZGVzdHJveSkKLSAgICAgICAgOiBtX3B0cihwdHIpCi0gICAgICAg
ICwgbV9kZXN0cm95KGRlc3Ryb3kpCi0gICAgewotICAgICAgICBBU1NFUlQobV9kZXN0cm95KTsK
LSAgICB9Ci0gICAgfldvcmxkVHlwZVNjb3BlZFB0cigpCi0gICAgewotICAgICAgICBpZiAobV9w
dHIpCi0gICAgICAgICAgICAoKm1fZGVzdHJveSkobV9wdHIpOwotICAgIH0KLQotICAgIFQqIGdl
dCgpIHsgcmV0dXJuIG1fcHRyOyB9Ci1wcml2YXRlOgotICAgIFQqIG1fcHRyOwotICAgIERlc3Ry
b3lGdW5jdGlvbiBtX2Rlc3Ryb3k7Ci19OwotCi1ib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAgICBib29sIGhhdmVHbHlwaHMg
PSBmYWxzZTsKLSAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7Ci0gICAgaW50IGkgPSAwOwotICAg
IHdoaWxlIChwb3NpdGlvbiA8IGJ1ZmZlckxlbmd0aCkgewotICAgICAgICBVQ2hhcjMyIGNoYXJh
Y3RlcjsKLSAgICAgICAgdW5zaWduZWQgbmV4dFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgICAg
IFUxNl9ORVhUKGJ1ZmZlciwgbmV4dFBvc2l0aW9uLCBidWZmZXJMZW5ndGgsIGNoYXJhY3Rlcik7
Ci0KLSAgICAgICAgRlNfVVNIT1JUIGdseXBoID0gRlNfbWFwX2NoYXIoZm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLmZvbnQoKSwgc3RhdGljX2Nhc3Q8RlNfVUxPTkc+KGNoYXJhY3RlcikpOwotICAg
ICAgICBpZiAoIWdseXBoKQotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0
ICsgaSwgMCwgMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRy
dWU7Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwg
Zm9udERhdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaSsrOwotICAgICAgICBwb3NpdGlvbiA9
IG5leHRQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFkaWVu
dEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvR3JhZGllbnRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFkaWVu
dEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0j
aW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIERldGVybWluZSB0aGUgdG90YWwgbnVt
YmVyIG9mIHN0b3BzIG5lZWRlZCwgaW5jbHVkaW5nIHBzZXVkby1zdG9wcyBhdCB0aGUKLS8vIGVu
ZHMgYXMgbmVjZXNzYXJ5Lgotc3RhdGljIHNpemVfdCB0b3RhbFN0b3BzTmVlZGVkKGNvbnN0IEdy
YWRpZW50OjpDb2xvclN0b3AqIHN0b3BEYXRhLCBzaXplX3QgY291bnQpCi17Ci0gICAgLy8gTi5C
LjogVGhlIHRlc3RzIGluIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGtlcHQgaW4gc3luYyB3aXRoIHRo
ZSBvbmVzIGluCi0gICAgLy8gZmlsbFN0b3BzKCksIG9yIGJhZG5lc3MgaGFwcGVucy4KLSAgICBj
b25zdCBHcmFkaWVudDo6Q29sb3JTdG9wKiBzdG9wID0gc3RvcERhdGE7Ci0gICAgc2l6ZV90IGNv
dW50VXNlZCA9IGNvdW50OwotICAgIGlmIChjb3VudCA8IDEgfHwgc3RvcC0+c3RvcCA+IDAuMCkK
LSAgICAgICAgY291bnRVc2VkKys7Ci0gICAgc3RvcCArPSBjb3VudCAtIDE7Ci0gICAgaWYgKGNv
dW50IDwgMSB8fCBzdG9wLT5zdG9wIDwgMS4wKQotICAgICAgICBjb3VudFVzZWQrKzsKLSAgICBy
ZXR1cm4gY291bnRVc2VkOwotfQotCi0vLyBDb2xsZWN0IHNvcnRlZCBzdG9wIHBvc2l0aW9uIGFu
ZCBjb2xvciBpbmZvcm1hdGlvbiBpbnRvIHRoZSBwb3MgYW5kIGNvbG9ycwotLy8gYnVmZmVycywg
ZW5zdXJpbmcgc3RvcHMgYXQgYm90aCAwLjAgYW5kIDEuMC4gVGhlIGJ1ZmZlcnMgbXVzdCBiZSBs
YXJnZQotLy8gZW5vdWdoIHRvIGhvbGQgaW5mb3JtYXRpb24gZm9yIGFsbCBzdG9wcywgaW5jbHVk
aW5nIHRoZSBuZXcgZW5kcG9pbnRzIGlmCi0vLyBzdG9wcyBhdCAwLjAgYW5kIDEuMCBhcmVuJ3Qg
YWxyZWFkeSBpbmNsdWRlZC4KLXN0YXRpYyB2b2lkIGZpbGxTdG9wcyhjb25zdCBHcmFkaWVudDo6
Q29sb3JTdG9wKiBzdG9wRGF0YSwgc2l6ZV90IGNvdW50LCBmbG9hdCogcG9zLCB1bnNpZ25lZCog
Y29sb3JzKQotewotICAgIGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AqIHN0b3AgPSBzdG9wRGF0
YTsKLSAgICBzaXplX3Qgc3RhcnQgPSAwOwotICAgIGlmIChjb3VudCA8IDEpIHsKLSAgICAgICAg
Ly8gQSBncmFkaWVudCB3aXRoIG5vIHN0b3BzIG11c3QgYmUgdHJhbnNwYXJlbnQgYmxhY2suCi0g
ICAgICAgIHBvc1swXSA9IDAuMDsKLSAgICAgICAgY29sb3JzWzBdID0gMDsKLSAgICAgICAgc3Rh
cnQgPSAxOwotICAgIH0gZWxzZSBpZiAoc3RvcC0+c3RvcCA+IDAuMCkgewotICAgICAgICAvLyBD
b3B5IHRoZSBmaXJzdCBzdG9wIHRvIDAuMC4gVGhlIGZpcnN0IHN0b3AgcG9zaXRpb24gbWF5IGhh
dmUgYSBzbGlnaHQKLSAgICAgICAgLy8gcm91bmRpbmcgZXJyb3IsIGJ1dCB3ZSBkb24ndCBjYXJl
IGluIHRoaXMgZmxvYXQgY29tcGFyaXNvbiwgc2luY2UKLSAgICAgICAgLy8gMC4wIGNvbWVzIHRo
cm91Z2ggY2xlYW5seSBhbmQgcGVvcGxlIGFyZW4ndCBsaWtlbHkgdG8gd2FudCBhIGdyYWRpZW50
Ci0gICAgICAgIC8vIHdpdGggYSBzdG9wIGF0ICgwICsgZXBzaWxvbikuCi0gICAgICAgIHBvc1sw
XSA9IDAuMDsKLSAgICAgICAgY29sb3JzWzBdID0gQ29sb3Ioc3RvcC0+cmVkLCBzdG9wLT5ncmVl
biwgc3RvcC0+Ymx1ZSwgc3RvcC0+YWxwaGEpLnJnYigpOwotICAgICAgICBzdGFydCA9IDE7Ci0g
ICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgaSsr
KSB7Ci0gICAgICAgIHBvc1tpXSA9IHN0b3AtPnN0b3A7Ci0gICAgICAgIGNvbG9yc1tpXSA9IENv
bG9yKHN0b3AtPnJlZCwgc3RvcC0+Z3JlZW4sIHN0b3AtPmJsdWUsIHN0b3AtPmFscGhhKS5yZ2Io
KTsKLSAgICAgICAgKytzdG9wOwotICAgIH0KLQotICAgIC8vIENvcHkgdGhlIGxhc3Qgc3RvcCB0
byAxLjAgaWYgbmVlZGVkLiBTZWUgY29tbWVudCBhYm92ZSBhYm91dCB0aGlzIGZsb2F0Ci0gICAg
Ly8gY29tcGFyaXNvbi4KLSAgICBpZiAoY291bnQgPCAxIHx8ICgtLXN0b3ApLT5zdG9wIDwgMS4w
KSB7Ci0gICAgICAgIHBvc1tzdGFydCArIGNvdW50XSA9IDEuMDsKLSAgICAgICAgY29sb3JzW3N0
YXJ0ICsgY291bnRdID0gY29sb3JzW3N0YXJ0ICsgY291bnQgLSAxXTsKLSAgICB9Ci19Ci0KLQot
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHcmFkaWVudCogR3JhZGllbnQ6OnBsYXRm
b3JtR3JhZGllbnQoKQotewotICAgIGlmIChtX2dyYWRpZW50KQotICAgICAgICByZXR1cm4gbV9n
cmFkaWVudDsKLQotICAgIGlmIChtX3JhZGlhbCkKLSAgICAgICAgbV9ncmFkaWVudCA9IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R3JhZGllbnQ6OmNyZWF0ZVJhZGlhbEdyYWRpZW50
KG1fcDAsIG1fcDEsIG1fcjAsIG1fcjEsIG1fYXNwZWN0UmF0aW8sIChCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkdyYWRpZW50OjpTcHJlYWRNZXRob2QpbV9zcHJlYWRNZXRob2QpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9ncmFkaWVudCA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6R3JhZGllbnQ6OmNyZWF0ZUxpbmVhckdyYWRpZW50KG1fcDAsIG1fcDEsIChCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdyYWRpZW50OjpTcHJlYWRNZXRob2QpbV9zcHJlYWRN
ZXRob2QpOwotCi0gICAgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKLSAgICBBU1NFUlQobV9zdG9w
c1NvcnRlZCk7Ci0KLSAgICBzaXplX3QgY291bnRVc2VkID0gdG90YWxTdG9wc05lZWRlZChtX3N0
b3BzLmRhdGEoKSwgbV9zdG9wcy5zaXplKCkpOwotICAgIEFTU0VSVChjb3VudFVzZWQgPj0gMik7
Ci0gICAgQVNTRVJUKGNvdW50VXNlZCA+PSBtX3N0b3BzLnNpemUoKSk7Ci0KLSAgICBWZWN0b3I8
ZmxvYXQ+IHBvcyhjb3VudFVzZWQpOwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gY29sb3JzKGNvdW50
VXNlZCk7Ci0gICAgZmlsbFN0b3BzKG1fc3RvcHMuZGF0YSgpLCBtX3N0b3BzLnNpemUoKSwgcG9z
LmRhdGEoKSwgY29sb3JzLmRhdGEoKSk7Ci0gICAgbV9ncmFkaWVudC0+c2V0Q29sb3JTdG9wcyhw
b3MuZGF0YSgpLCBjb2xvcnMuZGF0YSgpLCBjb3VudFVzZWQpOwotCi0gICAgaWYgKCFtX2dyYWRp
ZW50U3BhY2VUcmFuc2Zvcm1hdGlvbi5pc0lkZW50aXR5KCkpCi0gICAgICAgIG1fZ3JhZGllbnQt
PnNldExvY2FsTWF0cml4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZG91YmxlKj4oJm1fZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybWF0aW9uKSk7Ci0KLSAgICByZXR1cm4gbV9ncmFkaWVudDsKLX0KLQot
dm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBkZWxldGUgbV9ncmFkaWVu
dDsKLSAgICBtX2dyYWRpZW50ID0gMDsKLX0KLQotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBwbGF0Zm9y
bUdyYWRpZW50KCktPmZpbGwoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwotfQot
Ci12b2lkIEdyYWRpZW50OjpzZXRQbGF0Zm9ybUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCi17Ci0gICAgcGxh
dGZvcm1HcmFkaWVudCgpLT5zZXRMb2NhbE1hdHJpeChyZWludGVycHJldF9jYXN0PGNvbnN0IGRv
dWJsZSo+KCZncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pKTsKLX0KLQotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQz
REJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAkocmV2aXNp
b24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQy
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBVU0UoM0RfR1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCi0jaW5jbHVk
ZSAiV2ViR0xMYXllcldlYktpdFRocmVhZC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KLSNpbmNsdWRlIDxUaWxl
ZEltYWdlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJpYnMsIEhv
c3RXaW5kb3cqIGhvc3RXaW5kb3csIFJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQotewotICAgIC8v
IFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcg
ZGlyZWN0bHkgdG8gYSB3aW5kb3cuCi0gICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlicywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUp
KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQotICAgIDogbV9jdXJyZW50V2lkdGgoMCkKLSAgICAs
IG1fY3VycmVudEhlaWdodCgwKQotICAgICwgbV9jb250ZXh0KEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczo6Y3JlYXRlV2ViR0xDb250ZXh0KCkpCi0gICAgLCBtX2NvbXBpbGVyKFNIX0VT
U0xfT1VUUFVUKQotICAgICwgbV9hdHRycyhhdHRycykKLSAgICAsIG1fdGV4dHVyZSgwKQotICAg
ICwgbV9mYm8oMCkKLSAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCi0gICAgLCBtX2xheWVy
Q29tcG9zaXRlZChmYWxzZSkKLSAgICAsIG1faW50ZXJuYWxDb2xvckZvcm1hdChHTF9SR0JBKQot
ICAgICwgbV9pc0ltYWdpbmF0aW9uSGFyZHdhcmUoMCkKLXsKLSAgICBpZiAocmVuZGVyU3R5bGUg
IT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0gICAgICAgIG1fY29tcG9zaXRpbmdMYXllciA9IFdlYkdMTGF5ZXJXZWJLaXRU
aHJlYWQ6OmNyZWF0ZSgpOwotI2VuZGlmCi0gICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCi0gICAgICAgIDo6
Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgOjpn
bFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgICAgIC8vIENy
ZWF0ZSBhbiBGQk8uCi0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAg
ICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICA6Omds
R2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBtX3N0
YXRlLmJvdW5kRkJPID0gbV9mYm87Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0gICAgICAgIHN0YXRpY19jYXN0PFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQqPihtX2NvbXBvc2l0
aW5nTGF5ZXIuZ2V0KCkpLT5zZXRXZWJHTENvbnRleHQodGhpcyk7Ci0jZW5kaWYKLSAgICB9Ci0K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGNvbnN0IGNoYXIqIHJlbmRlcmVyID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9SRU5ERVJFUikp
OwotICAgIG1faXNJbWFnaW5hdGlvbkhhcmR3YXJlID0gc3RkOjpzdHJzdHIocmVuZGVyZXIsICJQ
b3dlclZSIFNHWCIpOwotCi0gICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCi0gICAgU2hCdWls
dEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwotICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMo
JkFOR0xFUmVzb3VyY2VzKTsKLQotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKLSAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RP
UlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7Ci0gICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291
cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZl
cnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJl
SW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1W
ZWN0b3JzKTsKLQotICAgIEdDM0RpbnQgcmFuZ2VbMl0sIHByZWNpc2lvbjsKLSAgICBnZXRTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKLSAgICBBTkdM
RVJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2VbMV0g
fHwgcHJlY2lzaW9uKTsKLQotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKLQotICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotfQotCi1HcmFwaGljc0Nv
bnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBpZiAobV90ZXh0dXJlKSB7Ci0g
ICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5k
ZXB0aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcik7Ci0gICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWNfY2FzdDxXZWJHTExheWVyV2ViS2l0VGhyZWFkICo+KG1fY29t
cG9zaXRpbmdMYXllci5nZXQoKSktPndlYkdMQ29udGV4dERlc3Ryb3llZCgpOyAvLyBNdXN0IHJl
bGVhc2UgY29tcG9zaXRpbmcgbGF5ZXIgYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIGNvbnRleHQuCi0g
ICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpkZXN0cm95V2ViR0xDb250ZXh0KG1f
Y29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkK
LXsKLSAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykKLSAgICAgICAg
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotCi0gICAgbV9sYXllckNvbXBvc2l0
ZWQgPSB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25z
dCBJbnRTaXplJiBzaXplKQotewotICAgIC8vIEEgQmxhY2tCZXJyeS1zcGVjaWZpYyBpbXBsZW1l
bnRhdGlvbiBvZiByZXNoYXBlRkJPcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBpdCBjb250YWluczoK
LSAgICAvLyAgLSBhbiBJbWFnaW5hdGlvbi1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBhbnRp
LWFsaWFzaW5nCi0gICAgLy8gIC0gYW4gSW1hZ2luYXRpb24tc3BlY2lmaWMgZml4IGZvciBGQk9z
IG9mIHNpemUgbGVzcyB0aGFuICgxNiwxNikKLQotICAgIGludCBmYm9XaWR0aCA9IHNpemUud2lk
dGgoKTsKLSAgICBpbnQgZmJvSGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLQotICAgIC8vIEltYWdp
bmF0aW9uLXNwZWNpZmljIGZpeAotICAgIGlmIChtX2lzSW1hZ2luYXRpb25IYXJkd2FyZSkgewot
ICAgICAgICBmYm9XaWR0aCA9IHN0ZDo6bWF4KGZib1dpZHRoLCAxNik7Ci0gICAgICAgIGZib0hl
aWdodCA9IHN0ZDo6bWF4KGZib0hlaWdodCwgMTYpOwotICAgIH0KLQotICAgIEdMdWludCBpbnRl
cm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQg
PSAwOwotICAgIGlmIChtX2F0dHJzLmFscGhhKSB7Ci0gICAgICAgIGludGVybmFsQ29sb3JGb3Jt
YXQgPSBHTF9SR0JBOwotICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAgY29sb3JG
b3JtYXQgPSBHTF9SR0I7Ci0gICAgfQotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkgewotICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3Rl
bmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgotICAgICAgICAvLyBTZWUgR3JhcGhp
Y3NDb250ZXh0M0QgY29uc3RydWN0b3IuCi0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgJiYg
bV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0g
R0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGludGVy
bmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgfQotCi0g
ICAgR0xpbnQgc2FtcGxlQ291bnQgPSA4OwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewot
ICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsKLSAgICAgICAgLy8gSGFyZGNvZGUgdGhlIG1h
eGltdW0gbnVtYmVyIG9mIHNhbXBsZXMgZHVlIHRvIGhlYWRlciBpc3N1ZSAoUFIxMzIxODMpCi0g
ICAgICAgIC8vIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19JTUcsICZtYXhTYW1wbGVD
b3VudCk7Ci0gICAgICAgIG1heFNhbXBsZUNvdW50ID0gNDsKLSAgICAgICAgc2FtcGxlQ291bnQg
PSBzdGQ6Om1pbig4LCBtYXhTYW1wbGVDb3VudCk7Ci0gICAgfQotCi0gICAgYm9vbCBtdXN0UmVz
dG9yZUZCTyA9IGZhbHNlOwotICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJvKSB7Ci0g
ICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0KLSAg
ICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBmYm9XaWR0aCwg
ZmJvSGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0KLSAgICBF
eHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgaWYgKG1fYXR0
cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGV4dGVuc2lvbnMtPmZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUcoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9F
WFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCwgc2FtcGxlQ291bnQpOwotCi0gICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgewotICAgICAgICAgICAgOjpn
bEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIpOwotICAgICAgICAgICAgZXh0ZW5zaW9ucy0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlSU1HKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbERlcHRo
U3RlbmNpbEZvcm1hdCwgZmJvV2lkdGgsIGZib0hlaWdodCk7Ci0KLSAgICAgICAgICAgIGlmICht
X2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xf
UkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgaWYg
KG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIDo6Z2xC
aW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmUsIDApOwotCi0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkgewotICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVS
X0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQsIGZib1dpZHRoLCBmYm9IZWlnaHQpOwotCi0gICAgICAgICAgICBpZiAobV9hdHRycy5zdGVu
Y2lsKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZF
Ul9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLmRl
cHRoKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJf
RVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1
ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLQotICAgIGxvZ0ZyYW1lQnVmZmVy
U3RhdHVzKF9fTElORV9fKTsKLQotICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6bG9nRnJhbWVCdWZmZXJTdGF0dXMoaW50IGxpbmUpCi17Ci0g
ICAgQkJMT0coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIkNoZWNraW5nIEZy
YW1lQnVmZmVyIHN0YXR1cyBhdCBsaW5lICVkOiAiLCBsaW5lKTsKLSAgICBzd2l0Y2ggKGdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpKSB7Ci0gICAgY2FzZSBH
TF9GUkFNRUJVRkZFUl9DT01QTEVURToKLSAgICAgICAgQkJMT0coQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkxvZ0xldmVsSW5mbywgIkNPTVBMRVRFIHwgIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOgotICAgICAgICBCQkxPRyhC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiSU5DT01QTEVURSBBVFRBQ0hNRU5U
IHwgIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9NSVNTSU5HX0FUVEFDSE1FTlQ6Ci0gICAgICAgIEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpMb2dMZXZlbEluZm8sICJNSVNTSU5HIEFUVEFDSE1FTlQgfCAiKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM6Ci0gICAgICAg
IEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJJTkNPTVBMRVRFIERJ
TUVOU0lPTlMgfCAiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9V
TlNVUFBPUlRFRDoKLSAgICAgICAgQkJMT0coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVs
SW5mbywgIlVOU1VQUE9SVEVEIHwgIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9FWFQ6Ci0gICAgICAgIEJCTE9HKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJJTkNPTVBMRVRFIE1VTFRJU0FNUExFIHwgIik7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoZ2xHZXRFcnJvcigpKSB7Ci0g
ICAgY2FzZSBHTF9OT19FUlJPUjoKLSAgICAgICAgQkJMT0coQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkxvZ0xldmVsSW5mbywgIk5PIEVSUk9SIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xf
SU5WQUxJRF9FTlVNOgotICAgICAgICBCQkxPRyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2
ZWxJbmZvLCAiSU5WQUxJRCBFTlVNIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfSU5W
QUxJRF9WQUxVRToKLSAgICAgICAgQkJMT0coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVs
SW5mbywgIklOVkFMSUQgVkFMVUUiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHTF9JTlZB
TElEX09QRVJBVElPTjoKLSAgICAgICAgQkJMT0coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xl
dmVsSW5mbywgIklOVkFMSUQgT1BFUkFUSU9OIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R0xfT1VUX09GX01FTU9SWToKLSAgICAgICAgQkJMT0coQmxhY2tCZXJyeTo6UGxhdGZvcm06Okxv
Z0xldmVsSW5mbywgIk9VVCBPRiBNRU1PUlkiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJcbiIpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzSU1HKEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgdm9pZCogZGF0YSkKLXsKLSAgICAvLyBDdXJyZW50bHkgb25seSBmb3JtYXQ9
UkdCQSwgdHlwZT1VTlNJR05FRF9CWVRFIGlzIHN1cHBvcnRlZCBieSB0aGUgc3BlY2lmaWNhdGlv
bjogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zcGVjcy9sYXRlc3QvCi0g
ICAgLy8gSWYgdGhpcyBldmVyIGNoYW5nZXMsIHRoaXMgY29kZSB3aWxsIG5lZWQgdG8gYmUgdXBk
YXRlZC4KLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RyaWRlcyBvZiBvdXIgZGF0YSBhbmQgY2Fu
dmFzCi0gICAgdW5zaWduZWQgZm9ybWF0U2l6ZSA9IDQ7IC8vIFJHQkEgVU5TSUdORURfQllURQot
ICAgIHVuc2lnbmVkIGRhdGFTdHJpZGUgPSB3aWR0aCAqIGZvcm1hdFNpemU7Ci0gICAgdW5zaWdu
ZWQgY2FudmFzU3RyaWRlID0gbV9jdXJyZW50V2lkdGggKiBmb3JtYXRTaXplOwotCi0gICAgLy8g
SWYgd2UgYXJlIHVzaW5nIGEgcGFjayBhbGlnbm1lbnQgb2YgOCwgdGhlbiB3ZSBuZWVkIHRvIGFs
aWduIG91ciBzdHJpZGVzIHRvIDggYnl0ZSBib3VuZGFyaWVzCi0gICAgLy8gU2VlOiBodHRwOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGFfc3RydWN0dXJlX2FsaWdubWVudCAoY29tcHV0aW5n
IHBhZGRpbmcpCi0gICAgaW50IHBhY2tBbGlnbm1lbnQ7Ci0gICAgZ2xHZXRJbnRlZ2VydihHTF9Q
QUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOwotICAgIGlmICg4ID09IHBhY2tBbGlnbm1l
bnQpIHsKLSAgICAgICAgZGF0YVN0cmlkZSA9IChkYXRhU3RyaWRlICsgNykgJiB+NzsKLSAgICAg
ICAgY2FudmFzU3RyaWRlID0gKGNhbnZhc1N0cmlkZSArIDcpICYgfjc7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgY2hhciogY2FudmFzRGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2NhbnZhc1N0cmlk
ZSAqIG1fY3VycmVudEhlaWdodF07Ci0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50
V2lkdGgsIG1fY3VycmVudEhlaWdodCwgZm9ybWF0LCB0eXBlLCBjYW52YXNEYXRhKTsKLQotICAg
IC8vIElmIHdlIGZhaWxlZCB0byByZWFkIG91ciBjYW52YXMgZGF0YSBkdWUgdG8gYSBHTCBlcnJv
ciwgZG9uJ3QgY29udGludWUKLSAgICBpbnQgZXJyb3IgPSBnbEdldEVycm9yKCk7Ci0gICAgaWYg
KEdMX05PX0VSUk9SICE9IGVycm9yKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9y
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENsZWFyIG91ciBkYXRhIGluIGNh
c2Ugc29tZSBvZiBpdCBsaWVzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiBvdXIgY2FudmFzCi0gICAg
Ly8gVE9ETzogZG9uJ3QgZG8gdGhpcyBpZiBhbGwgb2YgdGhlIGRhdGEgbGllcyBpbnNpZGUgdGhl
IGJvdW5kcyBvZiB0aGUgY2FudmFzCi0gICAgbWVtc2V0KGRhdGEsIDAsIGRhdGFTdHJpZGUgKiBo
ZWlnaHQpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gb2Ygb3VyIGNhbnZh
cyBhbmQgZGF0YSBib3VuZHMKLSAgICBJbnRSZWN0IGRhdGFSZWN0KHgsIHksIHdpZHRoLCBoZWln
aHQpOwotICAgIEludFJlY3QgY2FudmFzUmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJy
ZW50SGVpZ2h0KTsKLSAgICBJbnRSZWN0IG5vblplcm9EYXRhUmVjdCA9IGludGVyc2VjdGlvbihk
YXRhUmVjdCwgY2FudmFzUmVjdCk7Ci0KLSAgICB1bnNpZ25lZCB4RGF0YU9mZnNldCA9IHggPCAw
ID8gLXggKiBmb3JtYXRTaXplIDogMDsKLSAgICB1bnNpZ25lZCB5RGF0YU9mZnNldCA9IHkgPCAw
ID8gLXkgKiBkYXRhU3RyaWRlIDogMDsKLSAgICB1bnNpZ25lZCB4Q2FudmFzT2Zmc2V0ID0gbm9u
WmVyb0RhdGFSZWN0LngoKSAqIGZvcm1hdFNpemU7Ci0gICAgdW5zaWduZWQgeUNhbnZhc09mZnNl
dCA9IG5vblplcm9EYXRhUmVjdC55KCkgKiBjYW52YXNTdHJpZGU7Ci0gICAgdW5zaWduZWQgY2hh
ciogZHN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpICsgeERhdGFPZmZzZXQg
KyB5RGF0YU9mZnNldDsKLSAgICB1bnNpZ25lZCBjaGFyKiBzcmMgPSBjYW52YXNEYXRhICsgeENh
bnZhc09mZnNldCArIHlDYW52YXNPZmZzZXQ7Ci0gICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwg
bm9uWmVyb0RhdGFSZWN0LmhlaWdodCgpOyByb3crKykgewotICAgICAgICBtZW1jcHkoZHN0LCBz
cmMsIG5vblplcm9EYXRhUmVjdC53aWR0aCgpICogZm9ybWF0U2l6ZSk7Ci0gICAgICAgIGRzdCAr
PSBkYXRhU3RyaWRlOwotICAgICAgICBzcmMgKz0gY2FudmFzU3RyaWRlOwotICAgIH0KLQotICAg
IGRlbGV0ZSBbXSBjYW52YXNEYXRhOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnVzZVdlYkdMQ29udGV4dChtX2NvbnRleHQpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxp
YW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV90ZXh0dXJlOwotfQotCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4
dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9j
b250ZXh0OwotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotUGxhdGZvcm1M
YXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2NvbXBvc2l0aW5nTGF5ZXIuZ2V0KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVs
cywgaW50IGltYWdlV2lkdGgsIGludCBpbWFnZUhlaWdodCwgaW50IGNhbnZhc1dpZHRoLCBpbnQg
Y2FudmFzSGVpZ2h0LAotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBGbG9h
dFJlY3Qgc3JjKDAsIDAsIGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQpOwotICAgIEZsb2F0UmVj
dCBkc3QoMCwgMCwgaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpOwotICAgIGRvdWJsZSBvbGRUcmFu
c2Zvcm1bNl07Ci0gICAgZG91YmxlIGZsaXBZVHJhbnNmb3JtWzZdID0geyAxLjBmLCAwLjBmLCAw
LjBmLCAtMS4wZiwgMC4wZiwgaW1hZ2VIZWlnaHQgfTsKLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Z2V0VHJhbnNmb3JtKG9sZFRyYW5zZm9ybSk7Ci0gICAgY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPnNldFRyYW5zZm9ybShmbGlwWVRyYW5zZm9ybSk7Ci0gICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxlZEltYWdlIGltYWdlKEludFNpemUoaW1hZ2VXaWR0
aCwgaW1hZ2VIZWlnaHQpLCByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1bnNpZ25lZCo+KGlt
YWdlUGl4ZWxzKSk7Ci0gICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmFkZEltYWdlKGRz
dCwgc3JjLCAmaW1hZ2UpOwotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXRUcmFu
c2Zvcm0ob2xkVHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29u
dGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+IGNhbGxiYWNr
KQotewotICAgIHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRE9wZW5HTEVTKj4oZ2V0RXh0ZW5zaW9u
cygpKS0+c2V0RVhUQ29udGV4dExvc3RDYWxsYmFjayhjYWxsYmFjayk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKFBhc3NPd25QdHI8RXJyb3JN
ZXNzYWdlQ2FsbGJhY2s+KQotewotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0
b3I6On5JbWFnZUV4dHJhY3RvcigpCi17Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Oklt
YWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sKQot
ewotICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOwotICAgIGlmICghbmF0aXZlSW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1faW1hZ2VXaWR0aCA9IG5hdGl2ZUltYWdlLT53aWR0aCgpOwotICAgIG1faW1hZ2VIZWlnaHQg
PSBuYXRpdmVJbWFnZS0+aGVpZ2h0KCk7Ci0gICAgaWYgKCFtX2ltYWdlV2lkdGggfHwgIW1faW1h
Z2VIZWlnaHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGltYWdlU2l6
ZSA9IG1faW1hZ2VXaWR0aCAqIG1faW1hZ2VIZWlnaHQ7Ci0gICAgbV9pbWFnZURhdGEucmVzaXpl
KGltYWdlU2l6ZSk7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZS0+cmVhZFBpeGVscyhtX2ltYWdlRGF0
YS5kYXRhKCksIGltYWdlU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFJh
dyBpbWFnZSBkYXRhIGlzIHByZW11bHRpcGxpZWQKLSAgICBtX2FscGhhT3AgPSBBbHBoYURvTm90
aGluZzsKLSAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgIG1fYWxwaGFPcCA9IEFs
cGhhRG9Vbm11bHRpcGx5OwotCi0gICAgbV9pbWFnZVBpeGVsRGF0YSA9IG1faW1hZ2VEYXRhLmRh
dGEoKTsKLSAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gRGF0YUZvcm1hdEJHUkE4OwotICAgIG1f
aW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQgPSAwOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRSgzRF9HUkFQSElDUykKLQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGlj
c0NvbnRleHRCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dEJsYWNrQmVycnkuY3BwCShy
ZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0dyYXBoaWNzQ29udGV4dEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQ2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLSNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
IHsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCkKLSAgICAgICAgOiBtX3BsYXRmb3JtQ29u
dGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgICAgICwgbV9pc0NvbXBvc2l0ZWQoZmFsc2UpCi0g
ICAgewotICAgIH0KLQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBtX3BsYXRmb3JtQ29u
dGV4dDsKLSAgICBib29sIG1faXNDb21wb3NpdGVkOwotfTsKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0
KQotewotICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUocGxh
dGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJv
eSgpCi17Ci0gICAgZGVsZXRlIG1fZGF0YTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9kYXRhLT5tX3BsYXRmb3JtQ29udGV4dDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNh
dmVQbGF0Zm9ybVN0YXRlKCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2F2ZSgpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5y
ZXN0b3JlKCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEZpbGxDb2xvcihtX3N0YXRlLmZp
bGxDb2xvci5yZ2IoKSk7Ci0gICAgaWYgKGhhc1NoYWRvdygpKQotICAgICAgICBzZXRQbGF0Zm9y
bVNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRl
LnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UpOwotICAgIGVsc2UKLSAgICAg
ICAgY2xlYXJQbGF0Zm9ybVNoYWRvdygpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRTdHJv
a2VDb2xvcihtX3N0YXRlLnN0cm9rZUNvbG9yLnJnYigpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+c2V0U3Ryb2tlU3R5bGUoc3RhdGljX2Nhc3Q8QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpTdHJva2VTdHlsZT4obV9zdGF0ZS5zdHJva2VTdHlsZSkpOwotICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5zZXRTdHJva2VUaGlja25lc3MobV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5zZXRUZXh0RHJhd2luZ01vZGUobV9zdGF0ZS50ZXh0RHJhd2lu
Z01vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoYm9vbCBhY2NlbGVyYXRlZCkKLXsKLSAgICBtX2RhdGEtPm1faXNDb21wb3NpdGVkID0gYWNj
ZWxlcmF0ZWQ7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9pc0NvbXBvc2l0ZWQ7Ci19Ci0KLUFm
ZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEFm
ZmluZVRyYW5zZm9ybSgpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHJlc3VsdDsKLSAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+Z2V0VHJhbnNmb3JtKChkb3VibGUqKSZyZXN1bHQpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm1hdGlvbikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gY3VycmVudDsKLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VHJhbnNmb3JtKChkb3VibGUqKSZjdXJyZW50KTsKLSAg
ICBjdXJyZW50ICo9IHRyYW5zZm9ybWF0aW9uOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRU
cmFuc2Zvcm0oKGRvdWJsZSopJmN1cnJlbnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtYXRpb24pCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250
ZXh0KCktPnNldFRyYW5zZm9ybSgoY29uc3QgZG91YmxlKikmdHJhbnNmb3JtYXRpb24pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZUZhY3Rv
cnMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIGN1cnJlbnQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmdldFRy
YW5zZm9ybSgoZG91YmxlKikmY3VycmVudCk7Ci0gICAgY3VycmVudC5zY2FsZU5vblVuaWZvcm0o
c2NhbGVGYWN0b3JzLndpZHRoKCksIHNjYWxlRmFjdG9ycy5oZWlnaHQoKSk7Ci0gICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldFRyYW5zZm9ybSgoZG91YmxlKikmY3VycmVudCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKLXsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gY3Vy
cmVudDsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VHJhbnNmb3JtKChkb3VibGUqKSZjdXJy
ZW50KTsKLSAgICBjdXJyZW50LnJvdGF0ZShyYWQyZGVnKHJhZGlhbnMpKTsKLSAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0VHJhbnNmb3JtKChkb3VibGUqKSZjdXJyZW50KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQWZmaW5lVHJhbnNm
b3JtIGN1cnJlbnQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmdldFRyYW5zZm9ybSgoZG91Ymxl
KikmY3VycmVudCk7Ci0gICAgY3VycmVudC50cmFuc2xhdGUoZHgsIGR5KTsKLSAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0VHJhbnNmb3JtKChkb3VibGUqKSZjdXJyZW50KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1D
b250ZXh0KCktPmFkZEVsbGlwc2UoRmxvYXRSZWN0KHJlY3QpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0
UG9pbnQqIHBvaW50cywgYm9vbCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YWRkQ29udmV4UG9seWdvbihu
dW1Qb2ludHMsIChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRQb2ludCopcG9pbnRz
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgcGxhdGZvcm1Db250ZXh0KCktPmFkZERyYXdSZWN0KEZsb2F0UmVjdChyZWN0KSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHcmFkaWVudCogcGxhdGZvcm1HcmFkaWVudCA9
IGZpbGxHcmFkaWVudCgpID8gZmlsbEdyYWRpZW50KCktPnBsYXRmb3JtR3JhZGllbnQoKSA6IDA7
Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQYXR0ZXJuKiBwbGF0Zm9ybVBh
dHRlcm4gPSBmaWxsUGF0dGVybigpID8gZmlsbFBhdHRlcm4oKS0+cGxhdGZvcm1QYXR0ZXJuKEFm
ZmluZVRyYW5zZm9ybSgpKSA6IDA7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmFkZEZpbGxSZWN0
KHJlY3QsIHBsYXRmb3JtR3JhZGllbnQsIHBsYXRmb3JtUGF0dGVybik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29sb3JTcGFjZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RmlsbENvbG9yKGNvbG9y
LnJnYigpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YWRkRmlsbFJlY3QocmVjdCk7Ci0gICAg
cGxhdGZvcm1Db250ZXh0KCktPnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvci5yZ2IoKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5hZGRDbGVhclJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChzdHJva2VHcmFkaWVudCgpIHx8IHN0cm9rZVBhdHRlcm4oKSkgewotICAgICAg
ICBQYXRoIHBhdGg7Ci0gICAgICAgIHBhdGguYWRkUmVjdChyZWN0KTsKLSAgICAgICAgZmxvYXQg
b2xkTGluZVdpZHRoID0gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7Ci0gICAgICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKGxpbmVXaWR0aCk7Ci0gICAgICAgIHN0cm9rZVBhdGgocGF0aCk7
Ci0gICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKG9sZExpbmVXaWR0aCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5hZGRTdHJva2VSZWN0KHJlY3QsIGxp
bmVXaWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYg
dG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRv
bVJpZ2h0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkZsb2F0Um91bmRlZFJlY3QgciA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJvdW5k
ZWRSZWN0KEZsb2F0UmVjdChyZWN0KSwgRmxvYXRTaXplKHRvcExlZnQpLCBGbG9hdFNpemUodG9w
UmlnaHQpLCBGbG9hdFNpemUoYm90dG9tTGVmdCksIEZsb2F0U2l6ZShib3R0b21SaWdodCkpOwot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRGaWxsQ29sb3IoY29sb3IucmdiKCkpOwotICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5hZGRSb3VuZGVkUmVjdChyKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+c2V0RmlsbENvbG9yKG1fc3RhdGUuZmlsbENvbG9yLnJnYigpKTsKLX0KLQotRmxvYXRSZWN0
IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIFJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9h
dCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRTaXplIGFkanVzdGVk
T2Zmc2V0ID0gb2Zmc2V0OwotCi0gICAgaWYgKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpIHsKLSAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBh
c3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgIC8vIFdlIGZs
aXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBh
eGlzCi0gICAgICAgIGFkanVzdGVkT2Zmc2V0LnNldEhlaWdodCgtb2Zmc2V0LmhlaWdodCgpKTsK
LSAgICB9Ci0KLSAgICAvLyBpZiB0aGVyZSBpcyBhbiBpbnZhbGlkIHNoYWRvdyBjb2xvciwgd2Un
cmUgc3VwcG9zZWQgdG8gdXNlIEFwcGxlJ3MgQ0cgZGVmYXVsdAotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5zZXRTaGFkb3coYWRqdXN0ZWRPZmZzZXQsIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNv
bG9yLnJnYigpIDogbWFrZVJHQkEoMCwgMCwgMCwgMHhGRiAvIDMpLCBtX3N0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZv
cm1TaGFkb3coKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGVhclNoYWRvdygpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNp
dHkpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgcGxhdGZvcm1Db250ZXh0KCktPmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihvcGFj
aXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5
TGF5ZXIoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5lbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCk7
Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygp
Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
Q2FwKExpbmVDYXAgbGMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldExpbmVDYXAoKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6TGluZUNhcClsYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNl
dCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0TGluZURhc2goZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNp
emUoKSwgZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9p
bihMaW5lSm9pbiBsaikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0TGluZUpvaW4oKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6TGluZUpvaW4pbGopOyAvLyBuYW1pbmcgY29pbmNpZGVzCi19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5zZXRNaXRlckxpbWl0KGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldEFscGhhKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEFscGhh
KG9wYWNpdHkpOwotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcChyZWN0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+Y2xpcE91dChGbG9hdFJlY3QocmVjdCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9p
bnRzLCBib29sKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwQ29udmV4UG9seWdvbihudW1Qb2ludHMs
IChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRQb2ludCopcG9pbnRzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBSb3VuZGVkUmVjdCYg
cmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRSb3VuZGVkUmVjdCByID0gQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkZsb2F0Um91bmRlZFJlY3QoCi0gICAgICAgIEZsb2F0UmVjdChyZWN0LnJl
Y3QoKSksCi0gICAgICAgIEZsb2F0U2l6ZShyZWN0LnJhZGlpKCkudG9wTGVmdCgpKSwKLSAgICAg
ICAgRmxvYXRTaXplKHJlY3QucmFkaWkoKS50b3BSaWdodCgpKSwKLSAgICAgICAgRmxvYXRTaXpl
KHJlY3QucmFkaWkoKS5ib3R0b21MZWZ0KCkpLAotICAgICAgICBGbG9hdFNpemUocmVjdC5yYWRp
aSgpLmJvdHRvbVJpZ2h0KCkpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFJvdW5kZWRS
ZWN0KHIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNv
bnN0IFJvdW5kZWRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJvdW5kZWRS
ZWN0IHIgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRSb3VuZGVkUmVjdCgKLSAgICAgICAg
RmxvYXRSZWN0KHJlY3QucmVjdCgpKSwKLSAgICAgICAgRmxvYXRTaXplKHJlY3QucmFkaWkoKS50
b3BMZWZ0KCkpLAotICAgICAgICBGbG9hdFNpemUocmVjdC5yYWRpaSgpLnRvcFJpZ2h0KCkpLAot
ICAgICAgICBGbG9hdFNpemUocmVjdC5yYWRpaSgpLmJvdHRvbUxlZnQoKSksCi0gICAgICAgIEZs
b2F0U2l6ZShyZWN0LnJhZGlpKCkuYm90dG9tUmlnaHQoKSkpOwotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jbGlwT3V0Um91bmRlZFJlY3Qocik7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0
OjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogcmV0dXJuIHRoZSBtYXggSW50
UmVjdCBmb3Igbm93Ci0gICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoSU5UX01JTiAvIDIsIElO
VF9NSU4gLyAyKSwgSW50U2l6ZShJTlRfTUFYLCBJTlRfTUFYKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEludFJlY3QmKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4
dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0VGV4dERyYXdpbmdN
b2RlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VD
b2xvcihjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNl
dFN0cm9rZUNvbG9yKGNvbG9yLnJnYigpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3Ryb2tlKQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5zZXRTdHJva2VTdHlsZSgoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpTdHJva2VT
dHlsZSlzdHJva2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJv
a2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRTdHJva2VU
aGlja25lc3ModGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSkKLXsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+c2V0RmlsbENvbG9yKGNvbG9yLnJnYigpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBC
bGVuZE1vZGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldENvbXBvc2l0ZU9wZXJhdGlvbihzdGF0aWNf
Y2FzdDxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkNvbXBvc2l0ZU9wZXJhdG9yPihv
cCksIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNo
b3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0VXNlQW50aWFs
aWFzaW5nKGVuYWJsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5
KQotewotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRIaWdoUXVhbGl0eUZpbHRlcihpbnRlcnBv
bGF0aW9uUXVhbGl0eSAhPSBJbnRlcnBvbGF0aW9uTm9uZSk7Ci19Ci0KLUludGVycG9sYXRpb25R
dWFsaXR5IEdyYXBoaWNzQ29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5oaWdoUXVhbGl0eUZpbHRlcigpID8g
SW50ZXJwb2xhdGlvbkRlZmF1bHQgOiBJbnRlcnBvbGF0aW9uTm9uZTsKLX0KLQotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVy
QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2
MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3Jh
cGhpY3NMYXllckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkwMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotLyoqIEZJWE1FCi0gKiBUaGlzIGZpbGUgYm9ycm93
cyBjb2RlIGhlYXZpbHkgZnJvbSBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckNB
Q0YuY3BwCi0gKiAoYW5kIGhlbmNlIGl0IGluY2x1ZGVzIGJvdGggY29weXJpZ2h0cykKLSAqIElk
ZWFsbHkgdGhlIGNvbW1vbiBjb2RlIChtb3N0bHkgdGhlIGNvZGUgdGhhdCBrZWVwcyB0cmFjayBv
ZiB0aGUgbGF5ZXIgaGllcmFyY2h5KQotICogc2hvdWxkIGJlIGtlcHQgc2VwYXJhdGUgYW5kIHNo
YXJlZCBiZXR3ZWVuIHBsYXRmb3Jtcy4gSXQgd291bGQgYmUgYSB3ZWxsIHdvcnRod2hpbGUKLSAq
IGVmZm9ydCBvbmNlIHRoZSBXaW5kb3dzIGltcGxlbWVudGF0aW9uIChiaW5hcmllcyBhbmQgaGVh
ZGVycykgb2YgQ29yZUFuaW1hdGlvbiBpcwotICogY2hlY2tlZCBpbiB0byB0aGUgV2ViS2l0IHJl
cG9zaXRvcnkuIFVudGlsIHRoZW4gb25seSBBcHBsZSBjYW4gbWFrZSB0aGlzIGhhcHBlbi4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0KLSNpbmNsdWRlICJHcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oIgotCi0jaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NMYXllckZhY3RvcnkuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkxheWVy
QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotCi0jaWYgREVCVUdfTEFZRVJfQU5JTUFUSU9OCi0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIHZvaWQgc2V0TGF5ZXJCb3JkZXJDb2xvcihMYXllcldlYktpdFRocmVhZCYgbGF5ZXIsIGNv
bnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBsYXllci5zZXRCb3JkZXJDb2xvcihjb2xvcik7Ci19
Ci0KLXN0YXRpYyB2b2lkIGNsZWFyQm9yZGVyQ29sb3IoTGF5ZXJXZWJLaXRUaHJlYWQmIGxheWVy
KQotewotICAgIGxheWVyLnNldEJvcmRlckNvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHNldExheWVyQmFja2dyb3VuZENvbG9yKExheWVyV2ViS2l0VGhyZWFkJiBs
YXllciwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGxheWVyLnNldEJhY2tncm91bmRDb2xv
cihjb2xvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFyTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoTGF5
ZXJXZWJLaXRUaHJlYWQmIGxheWVyKQotewotICAgIGxheWVyLnNldEJhY2tncm91bmRDb2xvcihD
b2xvcjo6dHJhbnNwYXJlbnQpOwotfQotCi1QYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyRmFjdG9yeSogZmFjdG9yeSwgR3JhcGhpY3NM
YXllckNsaWVudCogY2xpZW50KQotewotICAgIGlmICghZmFjdG9yeSkKLSAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBHcmFwaGljc0xheWVyQmxhY2tCZXJyeShjbGllbnQpKTsKLQotICAgIHJl
dHVybiBmYWN0b3J5LT5jcmVhdGVHcmFwaGljc0xheWVyKGNsaWVudCk7Ci19Ci0KLUdyYXBoaWNz
TGF5ZXJCbGFja0JlcnJ5OjpHcmFwaGljc0xheWVyQmxhY2tCZXJyeShHcmFwaGljc0xheWVyQ2xp
ZW50KiBjbGllbnQpCi0gICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKLSAgICAsIG1fc3VzcGVu
ZFRpbWUoMCkKLSAgICAsIG1fY29udGVudHNMYXllclB1cnBvc2UoTm9Db250ZW50c0xheWVyKQot
ewotICAgIG1fbGF5ZXIgPSBMYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKExheWVyRGF0YTo6TGF5
ZXIsIHRoaXMpOwotCi0gICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7Ci19Ci0KLUdyYXBoaWNz
TGF5ZXJCbGFja0JlcnJ5Ojp+R3JhcGhpY3NMYXllckJsYWNrQmVycnkoKQotewotICAgIC8vIERv
IGNsZWFudXAgd2hpbGUgd2UgY2FuIHN0aWxsIHNhZmVseSBjYWxsIG1ldGhvZHMgb24gdGhlIGRl
cml2ZWQgY2xhc3MuCi0gICAgd2lsbEJlRGVzdHJveWVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NM
YXllckJsYWNrQmVycnk6OndpbGxCZURlc3Ryb3llZCgpCi17Ci0gICAgaWYgKG1fbGF5ZXIpCi0g
ICAgICAgIG1fbGF5ZXItPnNldE93bmVyKDApOwotICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpCi0g
ICAgICAgIG1fY29udGVudHNMYXllci0+c2V0T3duZXIoMCk7Ci0gICAgaWYgKG1fdHJhbnNmb3Jt
TGF5ZXIpCi0gICAgICAgIG1fdHJhbnNmb3JtTGF5ZXItPnNldE93bmVyKDApOwotCi0gICAgR3Jh
cGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBpbk5hbWUpCi17Ci0gICAgU3RyaW5nIG5h
bWUgPSBTdHJpbmc6OmZvcm1hdCgiR3JhcGhpY3NMYXllckJsYWNrQmVycnkoJXApIEdyYXBoaWNz
TGF5ZXIoJXApICIsIG1fbGF5ZXIuZ2V0KCksIHRoaXMpICsgaW5OYW1lOwotICAgIEdyYXBoaWNz
TGF5ZXI6OnNldE5hbWUobmFtZSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQotewot
ICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hp
bGRyZW4pOwotICAgIC8vIEZJWE1FOiBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbiBjYWxscyBh
ZGRDaGlsZCgpIGZvciBlYWNoIHN1YmxheWVyLCB3aGljaAotICAgIC8vIHdpbGwgZW5kIHVwIGNh
bGxpbmcgdXBkYXRlU3VibGF5ZXJMaXN0KCkgTiB0aW1lcy4KLSAgICBpZiAoY2hpbGRyZW5DaGFu
Z2VkKQotICAgICAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKLQotICAgIHJldHVybiBjaGlsZHJl
bkNoYW5nZWQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OmFkZENoaWxkKEdy
YXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQo
Y2hpbGRMYXllcik7Ci0gICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NMYXllckJsYWNrQmVycnk6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBjaGlsZExh
eWVyLCBpbnQgaW5kZXgpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGNo
aWxkTGF5ZXIsIGluZGV4KTsKLSAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0xheWVyQmxhY2tCZXJyeTo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBjaGls
ZExheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFk
ZENoaWxkQmVsb3coY2hpbGRMYXllciwgc2libGluZyk7Ci0gICAgdXBkYXRlU3VibGF5ZXJMaXN0
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OmFkZENoaWxkQWJvdmUoR3Jh
cGhpY3NMYXllciogY2hpbGRMYXllciwgR3JhcGhpY3NMYXllciAqc2libGluZykKLXsKLSAgICBH
cmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGNoaWxkTGF5ZXIsIHNpYmxpbmcpOwotICAgIHVw
ZGF0ZVN1YmxheWVyTGlzdCgpOwotfQotCi1ib29sIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojpy
ZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0No
aWxkKQotewotICAgIGlmICghR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBu
ZXdDaGlsZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVwZGF0ZVN1YmxheWVyTGlz
dCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5
OjpyZW1vdmVGcm9tUGFyZW50KCkKLXsKLSAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFy
ZW50KCk7Ci0gICAgbGF5ZXJGb3JTdXBlcmxheWVyKCktPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KQotewotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHBvaW50
KTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQpCi17Ci0g
ICAgaWYgKHBvaW50ID09IG1fYW5jaG9yUG9pbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHBvaW50KTsKLSAgICB1cGRhdGVBbmNob3JQb2lu
dCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7Ci0gICAgdXBkYXRlTGF5ZXJT
aXplKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldFRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIGlmICh0cmFuc2Zv
cm0gPT0gbV90cmFuc2Zvcm0pCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwotICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwotfQotCi12
b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIGlmICh0cmFuc2Zvcm0gPT0g
bV9jaGlsZHJlblRyYW5zZm9ybSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXll
cjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odHJhbnNmb3JtKTsKLSAgICB1cGRhdGVDaGlsZHJlblRy
YW5zZm9ybSgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRQcmVzZXJ2
ZXMzRChib29sIHByZXNlcnZlczNEKQotewotICAgIGlmIChwcmVzZXJ2ZXMzRCA9PSBtX3ByZXNl
cnZlczNEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2
ZXMzRChwcmVzZXJ2ZXMzRCk7Ci0gICAgdXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpOwotfQotCi12
b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgbWFza3NU
b0JvdW5kcykKLXsKLSAgICBpZiAobWFza3NUb0JvdW5kcyA9PSBtX21hc2tzVG9Cb3VuZHMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMobWFz
a3NUb0JvdW5kcyk7Ci0gICAgdXBkYXRlTWFza3NUb0JvdW5kcygpOwotfQotCi12b2lkIEdyYXBo
aWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCi17
Ci0gICAgLy8gTm90ZSBjYXJlZnVsbHkgdGhpcyBlYXJseS1leGl0IGlzIG9ubHkgY29ycmVjdCBi
ZWNhdXNlIHdlIGFsc28gcHJvcGVybHkgaW5pdGlhbGl6ZQotICAgIC8vIExheWVyV2ViS2l0VGhy
ZWFkOjppc0RyYXdhYmxlKCkgd2hlbmV2ZXIgbV9jb250ZW50c0xheWVyIGlzIHNldCB0byBhIG5l
dyBsYXllciBpbiBzZXR1cENvbnRlbnRzTGF5ZXIoKS4KLSAgICBpZiAoZHJhd3NDb250ZW50ID09
IG1fZHJhd3NDb250ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpz
ZXREcmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KTsKLSAgICB1cGRhdGVMYXllcklzRHJhd2FibGUo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0Q29udGVudHNWaXNpYmxl
KGJvb2wgY29udGVudHNWaXNpYmxlKQotewotICAgIC8vIE5vdGUgY2FyZWZ1bGx5IHRoaXMgZWFy
bHktZXhpdCBpcyBvbmx5IGNvcnJlY3QgYmVjYXVzZSB3ZSBhbHNvIHByb3Blcmx5IGluaXRpYWxp
emUKLSAgICAvLyBMYXllcldlYktpdFRocmVhZDo6aXNEcmF3YWJsZSgpIHdoZW5ldmVyIG1fY29u
dGVudHNMYXllciBpcyBzZXQgdG8gYSBuZXcgbGF5ZXIgaW4gc2V0dXBDb250ZW50c0xheWVyKCku
Ci0gICAgaWYgKGNvbnRlbnRzVmlzaWJsZSA9PSBtX2NvbnRlbnRzVmlzaWJsZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNpYmxlKGNvbnRlbnRz
VmlzaWJsZSk7Ci0gICAgdXBkYXRlTGF5ZXJJc0RyYXdhYmxlKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NMYXllckJsYWNrQmVycnk6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBtYXNrTGF5ZXIp
Ci17Ci0gICAgaWYgKG1hc2tMYXllciA9PSBtX21hc2tMYXllcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKG1hc2tMYXllcik7Ci0KLSAgICBMYXll
cldlYktpdFRocmVhZCogbWFza0xheWVyV2ViS2l0ID0gbV9tYXNrTGF5ZXIgPyBtX21hc2tMYXll
ci0+cGxhdGZvcm1MYXllcigpIDogMDsKLSAgICBpZiAobWFza0xheWVyV2ViS2l0KQotICAgICAg
ICBtYXNrTGF5ZXJXZWJLaXQtPnNldElzTWFzayh0cnVlKTsKLSAgICBtX2xheWVyLT5zZXRNYXNr
TGF5ZXIobWFza0xheWVyV2ViS2l0KTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJy
eTo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgR3Jh
cGhpY3NMYXllckJsYWNrQmVycnkqIGxheWVyV2ViS2l0ID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NM
YXllckJsYWNrQmVycnkqPihsYXllcik7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRl
ZEJ5TGF5ZXIobGF5ZXIpOwotICAgIExheWVyV2ViS2l0VGhyZWFkKiByZXBsaWNhTGF5ZXIgPSBs
YXllcldlYktpdCA/IGxheWVyV2ViS2l0LT5wcmltYXJ5TGF5ZXIoKSA6IDA7Ci0gICAgcHJpbWFy
eUxheWVyKCktPnNldFJlcGxpY2FMYXllcihyZXBsaWNhTGF5ZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRIYXNGaXhlZENvbnRhaW5lcihib29sIGhhc0ZpeGVkQ29u
dGFpbmVyKQotewotICAgIGlmIChoYXNGaXhlZENvbnRhaW5lciA9PSBtX2hhc0ZpeGVkQ29udGFp
bmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRIYXNGaXhlZENv
bnRhaW5lcihoYXNGaXhlZENvbnRhaW5lcik7Ci0gICAgdXBkYXRlSGFzRml4ZWRDb250YWluZXIo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0SGFzRml4ZWRBbmNlc3Rv
ckluRE9NVHJlZShib29sIGhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUpCi17Ci0gICAgaWYgKGhh
c0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUgPT0gbV9oYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRIYXNGaXhlZEFuY2VzdG9y
SW5ET01UcmVlKGhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUpOwotICAgIHVwZGF0ZUhhc0ZpeGVk
QW5jZXN0b3JJbkRPTVRyZWUoKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLWJvb2wg
R3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgZmlsdGVycykKLXsKLSAgICBpZiAobV9maWx0ZXJzID09IGZpbHRlcnMpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgYm9vbCBjYW5Db21wb3NpdGVGaWx0ZXJzID0gTGF5ZXJXZWJLaXRU
aHJlYWQ6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmlsdGVycyk7Ci0gICAgaWYgKGNhbkNvbXBv
c2l0ZUZpbHRlcnMpIHsKLSAgICAgICAgbV9maWx0ZXJzID0gZmlsdGVyczsKLSAgICAgICAgR3Jh
cGhpY3NMYXllcjo6c2V0RmlsdGVycyhmaWx0ZXJzKTsKLSAgICAgICAgdXBkYXRlRmlsdGVycygp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZmlsdGVycy5jbGVhcigpOwotICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOwot
fQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldEJhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKGNvbG9yID09IG1fYmFja2dyb3Vu
ZENvbG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZ3Jv
dW5kQ29sb3IoY29sb3IpOwotCi0gICAgdXBkYXRlTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBv
cGFxdWUpCi17Ci0gICAgaWYgKG1fY29udGVudHNPcGFxdWUgPT0gb3BhcXVlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShvcGFxdWUpOwot
ICAgIHVwZGF0ZUNvbnRlbnRzT3BhcXVlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNr
QmVycnk6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZpc2libGUpCi17Ci0gICAgaWYgKG1f
YmFja2ZhY2VWaXNpYmlsaXR5ID09IHZpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eSh2aXNpYmxlKTsKLSAgICB1cGRhdGVC
YWNrZmFjZVZpc2liaWxpdHkoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6
c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQotewotICAgIGZsb2F0IGNsYW1wZWRPcGFjaXR5ID0g
Y2xhbXBUbyhvcGFjaXR5LCAwLjBmLCAxLjBmKTsKLQotICAgIGlmIChtX29wYWNpdHkgPT0gY2xh
bXBlZE9wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9w
YWNpdHkoY2xhbXBlZE9wYWNpdHkpOwotICAgIHByaW1hcnlMYXllcigpLT5zZXRPcGFjaXR5KG9w
YWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRDb250ZW50c05l
ZWRzRGlzcGxheSgpCi17Ci0gICAgaWYgKG1fY29udGVudHNMYXllcikKLSAgICAgICAgbV9jb250
ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxh
Y2tCZXJyeTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBpZiAoZHJhd3NDb250ZW50KCkpCi0g
ICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5
ZXJCbGFja0JlcnJ5OjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBTaG91bGRDbGlwVG9MYXllcikKLXsKLSAgICBpZiAoZHJhd3NDb250ZW50KCkpCi0gICAgICAg
IG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKHJlY3QgPT0gbV9jb250ZW50c1JlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChyZWN0KTsKLSAgICB1cGRhdGVDb250ZW50
c1JlY3QoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJBbmltYXRpb24+IHJlbW92ZUFu
aW1hdGlvbkJ5SWRBbmRQcm9wZXJ0eShpbnQgaWQsIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0
eSwgVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiYgbGlzdCkKLXsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGxpc3RbaV0t
PmlkKCkgPT0gaWQgJiYgbGlzdFtpXS0+cHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkgewotICAgICAg
ICAgICAgUmVmUHRyPExheWVyQW5pbWF0aW9uPiBsYXllckFuaW1hdGlvbiA9IGxpc3RbaV07Ci0g
ICAgICAgICAgICBsaXN0LnJlbW92ZShpKTsKLSAgICAgICAgICAgIHJldHVybiBsYXllckFuaW1h
dGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBQYXNzUmVmUHRyPExheWVyQW5p
bWF0aW9uPigpOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxMYXllckFuaW1hdGlvbj4gcmVtb3Zl
QW5pbWF0aW9uQnlOYW1lKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgVmVjdG9yPFJlZlB0
cjxMYXllckFuaW1hdGlvbj4gPiYgbGlzdCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGxpc3RbaV0tPm5hbWUoKSA9PSBhbmlt
YXRpb25OYW1lKSB7Ci0gICAgICAgICAgICBSZWZQdHI8TGF5ZXJBbmltYXRpb24+IGxheWVyQW5p
bWF0aW9uID0gbGlzdFtpXTsKLSAgICAgICAgICAgIGxpc3QucmVtb3ZlKGkpOwotICAgICAgICAg
ICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IFBhc3NSZWZQdHI8TGF5ZXJBbmltYXRpb24+KCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBj
b25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICAvLyBUaGlz
IGlzIHdoYXQgR3JhcGhpY3NMYXllckNBIGNoZWNrcyBmb3IuCi0gICAgaWYgKCFhbmltYXRpb24g
fHwgYW5pbWF0aW9uLT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSB8fCB2YWx1ZXMuc2l6ZSgpIDwg
MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2Ugb25seSBzdXBwb3J0IHRoZXNl
IHR3byBraW5kcyBvZiBwcm9wZXJ0aWVzIGF0IHRoZSBtb21lbnQuCi0gICAgaWYgKHZhbHVlcy5w
cm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0gJiYgdmFsdWVzLnBy
b3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIFJlbW92ZSBhbnkgcnVubmluZyBhbmltYXRpb24gZm9yIHRoZSBzYW1lIHBy
b3BlcnR5LgotICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIGlzIHN1cGVyc3RpdGlvbiwgSSBnb3Qg
dGhlIGlkZWEgZnJvbSBHcmFwaGljc0xheWVyUXQKLSAgICAvLyBXZWJDb3JlIG1pZ2h0IGJlIGFk
ZGluZyBhbiBhbmltYXRpb24gd2l0aCB0aGUgc2FtZSBuYW1lLCBidXQgZm9yIGEgZGlmZmVyZW50
IHByb3BlcnR5Ci0gICAgcmVtb3ZlQW5pbWF0aW9uQnlJZEFuZFByb3BlcnR5KExheWVyQW5pbWF0
aW9uOjppZEZyb21BbmltYXRpb24oYW5pbWF0aW9uKSwgdmFsdWVzLnByb3BlcnR5KCksIG1fcnVu
bmluZ0FuaW1hdGlvbnMpOwotICAgIHJlbW92ZUFuaW1hdGlvbkJ5SWRBbmRQcm9wZXJ0eShMYXll
ckFuaW1hdGlvbjo6aWRGcm9tQW5pbWF0aW9uKGFuaW1hdGlvbiksIHZhbHVlcy5wcm9wZXJ0eSgp
LCBtX3N1c3BlbmRlZEFuaW1hdGlvbnMpOwotCi0gICAgUmVmUHRyPExheWVyQW5pbWF0aW9uPiBs
YXllckFuaW1hdGlvbiA9IExheWVyQW5pbWF0aW9uOjpjcmVhdGUodmFsdWVzLCBib3hTaXplLCBh
bmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOwotCi0jaWYgREVCVUdfTEFZRVJf
QU5JTUFUSU9OCi0gICAgZnByaW50ZihzdGRlcnIsICJMYXllckFuaW1hdGlvbiAweCUwOHg6IEFk
ZGluZyBhbmltYXRpb24gJXMgZm9yIHByb3BlcnR5ICVkXG4iLCAoaW50KWxheWVyQW5pbWF0aW9u
LmdldCgpLCBhbmltYXRpb25OYW1lLmxhdGluMSgpLmRhdGEoKSwgdmFsdWVzLnByb3BlcnR5KCkp
OwotI2VuZGlmCi0KLSAgICBtX3J1bm5pbmdBbmltYXRpb25zLmFwcGVuZChsYXllckFuaW1hdGlv
bik7Ci0KLSAgICB1cGRhdGVBbmltYXRpb25zKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICAvLyBXZWJDb3JlIG1p
Z2h0IGhhdmUgYWRkZWQgc2V2ZXJhbCBhbmltYXRpb25zIHdpdGggdGhlIHNhbWUgbmFtZSwgYnV0
IGZvciBkaWZmZXJlbnQgcHJvcGVydGllcwotCi0gICAgd2hpbGUgKFJlZlB0cjxMYXllckFuaW1h
dGlvbj4gYW5pbWF0aW9uID0gcmVtb3ZlQW5pbWF0aW9uQnlOYW1lKGFuaW1hdGlvbk5hbWUsIG1f
cnVubmluZ0FuaW1hdGlvbnMpKSB7Ci0jaWYgREVCVUdfTEFZRVJfQU5JTUFUSU9OCi0gICAgICAg
IGZwcmludGYoc3RkZXJyLCAiTGF5ZXJBbmltYXRpb24gMHglMDh4OiBQYXVzaW5nIGFuaW1hdGlv
biAlc1xuIiwgKGludClhbmltYXRpb24uZ2V0KCksIGFuaW1hdGlvbi0+bmFtZSgpLmxhdGluMSgp
LmRhdGEoKSk7Ci0jZW5kaWYKLQotICAgICAgICAvLyBMYXllckFuaW1hdGlvbiBpcyByZWFkb25s
eS4gQ3JlYXRlIGEgbmV3IGFuaW1hdGlvbiB3aXRoIHRoZSBzYW1lIGRhdGEgZXhjZXB0IGZvciB0
aW1lT2Zmc2V0LgotICAgICAgICAvLyBXZWJDb3JlIHdpbGwgYWRqdXN0IHRoZSB0aW1lT2Zmc2V0
IGZvciBwYXVzZWQgYW5pbWF0aW9ucyBzbyBpdCBjYW4gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhl
Ci0gICAgICAgIC8vIHByb2dyZXNzIGZvciB0aGUgcGF1c2VkIGFuaW1hdGlvbiB3aXRob3V0IGtu
b3dpbmcgdGhlIGV4YWN0IHRpbWVzdGFtcCB3aGVuIHRoZSBhbmltYXRpb24gd2FzCi0gICAgICAg
IC8vIHBhdXNlZC4KLSAgICAgICAgLy8gSWYgYW4gYW5pbWF0aW9uIHdhcyBzdGFydGVkIHdpdGgg
YSB0aW1lT2Zmc2V0IGR0X29yaWcgYW5kIHBhdXNlZCBkdF9wYXVzZSBzZWNvbmRzIGxhdGVyLCB0
aGUKLSAgICAgICAgLy8gY2xvbmVkIGFuaW1hdGlvbiB3aWxsIGhhdmUgYSB0aW1lT2Zmc2V0IG9m
IGR0X3BhdXNlICsgZHRfb3JpZy4KLSAgICAgICAgYW5pbWF0aW9uID0gYW5pbWF0aW9uLT5jbG9u
ZSh0aW1lT2Zmc2V0KTsKLSAgICAgICAgbV9zdXNwZW5kZWRBbmltYXRpb25zLmFwcGVuZChhbmlt
YXRpb24pOwotCi0jaWYgREVCVUdfTEFZRVJfQU5JTUFUSU9OCi0gICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiTGF5ZXJBbmltYXRpb24gMHglMDh4OiBQYXVzZWQgYW5pbWF0aW9uICVzXG4iLCAoaW50
KWFuaW1hdGlvbi5nZXQoKSwgYW5pbWF0aW9uLT5uYW1lKCkubGF0aW4xKCkuZGF0YSgpKTsKLSNl
bmRpZgotICAgIH07Ci0KLSAgICB1cGRhdGVBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NMYXllckJsYWNrQmVycnk6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUpCi17Ci0gICAgLy8gV2ViQ29yZSBtaWdodCBoYXZlIGFkZGVkIHNldmVyYWwgYW5pbWF0
aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUsIGJ1dCBmb3IgZGlmZmVyZW50IHByb3BlcnRpZXMKLQot
I2lmIERFQlVHX0xBWUVSX0FOSU1BVElPTgotICAgIGZwcmludGYoc3RkZXJyLCAiTGF5ZXJBbmlt
YXRpb246IFJlbW92aW5nIGFuaW1hdGlvbiAlc1xuIiwgYW5pbWF0aW9uTmFtZS5sYXRpbjEoKS5k
YXRhKCkpOwotI2VuZGlmCi0KLSAgICB3aGlsZSAocmVtb3ZlQW5pbWF0aW9uQnlOYW1lKGFuaW1h
dGlvbk5hbWUsIG1fcnVubmluZ0FuaW1hdGlvbnMpKSB7IH0KLSAgICB3aGlsZSAocmVtb3ZlQW5p
bWF0aW9uQnlOYW1lKGFuaW1hdGlvbk5hbWUsIG1fc3VzcGVuZGVkQW5pbWF0aW9ucykpIHsgfQot
Ci0gICAgdXBkYXRlQW5pbWF0aW9ucygpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0Jl
cnJ5OjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKLXsKLSNpZiBERUJVR19MQVlFUl9B
TklNQVRJT04KLSAgICBmcHJpbnRmKHN0ZGVyciwgIkxheWVyQW5pbWF0aW9uOiBTdXNwZW5kaW5n
IGFuaW1hdGlvbnNcbiIpOwotI2VuZGlmCi0gICAgbV9zdXNwZW5kVGltZSA9IHRpbWU7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnJlc3VtZUFuaW1hdGlvbnMoKQotewotI2lm
IERFQlVHX0xBWUVSX0FOSU1BVElPTgotICAgIGZwcmludGYoc3RkZXJyLCAiTGF5ZXJBbmltYXRp
b246IFJlc3VtaW5nIGFuaW1hdGlvbnNcbiIpOwotI2VuZGlmCi0gICAgbV9zdXNwZW5kVGltZSA9
IDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldENvbnRlbnRzVG9JbWFn
ZShJbWFnZSogaW1hZ2UpCi17Ci0gICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKLSAg
ICBpZiAoaW1hZ2UpIHsKLSAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRz
TGF5ZXJGb3JJbWFnZTsKLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIpCi0gICAgICAgICAg
ICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY29udGVu
dHNMYXllclB1cnBvc2UgPSBOb0NvbnRlbnRzTGF5ZXI7Ci0gICAgICAgIGlmIChtX2NvbnRlbnRz
TGF5ZXIpCi0gICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOwotICAgIH0KLQotICAg
IHVwZGF0ZUNvbnRlbnRzSW1hZ2UoaW1hZ2UpOwotCi0gICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkK
LSAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OnVwZGF0ZUNvbnRlbnRzSW1hZ2UoSW1hZ2UqIGltYWdlKQotewotICAgIGlmIChp
bWFnZSkgewotICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5nZXQoKSkgewotICAgICAgICAg
ICAgUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBpbWFnZUxheWVyID0gTGF5ZXJXZWJLaXRUaHJl
YWQ6OmNyZWF0ZShMYXllckRhdGE6OkxheWVyLCB0aGlzKTsKLQotICAgICAgICAgICAgc2V0dXBD
b250ZW50c0xheWVyKGltYWdlTGF5ZXIuZ2V0KCkpOwotICAgICAgICAgICAgbV9jb250ZW50c0xh
eWVyID0gaW1hZ2VMYXllcjsKLSAgICAgICAgICAgIC8vIG1fY29udGVudHNMYXllciB3aWxsIGJl
IHBhcmVudGVkIGJ5IHVwZGF0ZVN1YmxheWVyTGlzdC4KLSAgICAgICAgfQotICAgICAgICBtX2Nv
bnRlbnRzTGF5ZXItPnNldENvbnRlbnRzKGltYWdlKTsKLQotICAgICAgICB1cGRhdGVDb250ZW50
c1JlY3QoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBObyBpbWFnZS4gbV9jb250ZW50c0xh
eWVyIHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBkYXRlU3VibGF5ZXJMaXN0LgotICAgICAgICBtX2Nv
bnRlbnRzTGF5ZXIgPSAwOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJy
eTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQotewot
ICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7Ci0gICAgaWYgKHBsYXRmb3JtTGF5ZXIp
IHsKLSAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0T3duZXIodGhpcyk7Ci0gICAgICAgIGlmICht
X2NvbnRlbnRzTGF5ZXIuZ2V0KCkgIT0gcGxhdGZvcm1MYXllcikgewotICAgICAgICAgICAgc2V0
dXBDb250ZW50c0xheWVyKHBsYXRmb3JtTGF5ZXIpOwotICAgICAgICAgICAgbV9jb250ZW50c0xh
eWVyID0gcGxhdGZvcm1MYXllcjsKLSAgICAgICAgICAgIG1fY29udGVudHNMYXllclB1cnBvc2Ug
PSBDb250ZW50c0xheWVyRm9yQ2FudmFzOwotICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxh
eSgpOwotICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAobV9jb250ZW50c0xheWVyKSB7Ci0gICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0
cnVlOwotCi0gICAgICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxheWVyIHdpbGwgYmUgcmVt
b3ZlZCB2aWEgdXBkYXRlU3VibGF5ZXJMaXN0LgotICAgICAgICAgICAgbV9jb250ZW50c0xheWVy
ID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjaGlsZHJlbkNoYW5nZWQpCi0gICAg
ICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0Jl
cnJ5OjpzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciogbGF5ZXIpCi17Ci0gICAgYm9v
bCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKLSAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgaWYg
KCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgfHwgbV9jb250ZW50c0xheWVyUHVycG9zZSAhPSBDb250
ZW50c0xheWVyRm9yVmlkZW8pIHsKLSAgICAgICAgICAgIHNldHVwQ29udGVudHNMYXllcihsYXll
cik7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBsYXllcjsKLSAgICAgICAgICAgIG1f
Y29udGVudHNMYXllclB1cnBvc2UgPSBDb250ZW50c0xheWVyRm9yVmlkZW87Ci0gICAgICAgICAg
ICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxheWVy
LT5vd25lcigpICE9IHRoaXMpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRPd25lcih0aGlzKTsK
LSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICAgICAgfQotICAgICAg
ICB1cGRhdGVDb250ZW50c1JlY3QoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9jb250
ZW50c0xheWVyKSB7Ci0gICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOwotCi0gICAg
ICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxheWVyIHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBk
YXRlU3VibGF5ZXJMaXN0LgotICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gMDsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChjaGlsZHJlbkNoYW5nZWQpCi0gICAgICAgIHVwZGF0ZVN1
YmxheWVyTGlzdCgpOwotfQotCi1QbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVyQmxhY2tCZXJy
eTo6aG9zdExheWVyRm9yU3VibGF5ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zv
cm1MYXllciA/IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgOiBtX2xheWVyLmdldCgpOwotfQotCi1Q
bGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6bGF5ZXJGb3JTdXBlcmxheWVy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm1MYXllciA/IG1fdHJhbnNmb3JtTGF5
ZXIuZ2V0KCkgOiBtX2xheWVyLmdldCgpOwotfQotCi1QbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xh
eWVyQmxhY2tCZXJyeTo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHByaW1h
cnlMYXllcigpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXREZWJ1Z0Jh
Y2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKGNvbG9yLmlzVmFs
aWQoKSkKLSAgICAgICAgc2V0TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fbGF5ZXIsIGNvbG9yKTsK
LSAgICBlbHNlCi0gICAgICAgIGNsZWFyTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fbGF5ZXIpOwot
fQotCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXREZWJ1Z0JvcmRlcihjb25zdCBD
b2xvciYgY29sb3IsIGZsb2F0IGJvcmRlcldpZHRoKQotewotICAgIGlmIChjb2xvci5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgc2V0TGF5ZXJCb3JkZXJDb2xvcigqbV9sYXllciwgY29sb3IpOwotICAg
ICAgICBtX2xheWVyLT5zZXRCb3JkZXJXaWR0aChib3JkZXJXaWR0aCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgY2xlYXJCb3JkZXJDb2xvcigqbV9sYXllcik7Ci0gICAgICAgIG1fbGF5ZXItPnNl
dEJvcmRlcldpZHRoKDApOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJy
eTo6dXBkYXRlU3VibGF5ZXJMaXN0KCkKLXsKLSAgICBWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0
VGhyZWFkPiA+IG5ld1N1YmxheWVyczsKLQotICAgIGlmIChtX3RyYW5zZm9ybUxheWVyKSB7Ci0g
ICAgICAgIC8vIEFkZCB0aGUgcHJpbWFyeSBsYXllciBmaXJzdC4gRXZlbiBpZiB3ZSBoYXZlIG5l
Z2F0aXZlIHotb3JkZXIgY2hpbGRyZW4sIHRoZSBwcmltYXJ5IGxheWVyIGFsd2F5cyBjb21lcyBi
ZWhpbmQuCi0gICAgICAgIG5ld1N1YmxheWVycy5hcHBlbmQobV9sYXllci5nZXQoKSk7Ci0gICAg
fSBlbHNlIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKLSAgICAgICAgLy8gRklYTUU6IGFkZCB0aGUg
Y29udGVudHMgbGF5ZXIgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgd2l0aCBuZWdhdGl2ZSB6LW9yZGVy
IGNoaWxkcmVuLgotICAgICAgICAvLyBUaGlzIGRvZXMgbm90IGNhdXNlIHZpc2libGUgcmVuZGVy
aW5nIGlzc3VlcyBiZWNhdXNlIGN1cnJlbnRseSBjb250ZW50cyBsYXllcnMgYXJlIG9ubHkgdXNl
ZAotICAgICAgICAvLyBmb3IgcmVwbGFjZWQgZWxlbWVudHMgdGhhdCBkb24ndCBoYXZlIGNoaWxk
cmVuLgotICAgICAgICBuZXdTdWJsYXllcnMuYXBwZW5kKG1fY29udGVudHNMYXllci5nZXQoKSk7
Ci0gICAgfQotCi0gICAgY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRMYXllcnMg
PSBjaGlsZHJlbigpOwotICAgIHNpemVfdCBudW1DaGlsZHJlbiA9IGNoaWxkTGF5ZXJzLnNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpIHsKLSAgICAg
ICAgR3JhcGhpY3NMYXllckJsYWNrQmVycnkqIGN1ckNoaWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhp
Y3NMYXllckJsYWNrQmVycnkqPihjaGlsZExheWVyc1tpXSk7Ci0KLSAgICAgICAgTGF5ZXJXZWJL
aXRUaHJlYWQqIGNoaWxkTGF5ZXIgPSBjdXJDaGlsZC0+bGF5ZXJGb3JTdXBlcmxheWVyKCk7Ci0g
ICAgICAgIG5ld1N1YmxheWVycy5hcHBlbmQoY2hpbGRMYXllcik7Ci0gICAgfQotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBuZXdTdWJsYXllcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG5l
d1N1YmxheWVyc1tpXS0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLQotICAgIGlmIChtX3RyYW5z
Zm9ybUxheWVyKSB7Ci0gICAgICAgIG1fdHJhbnNmb3JtTGF5ZXItPnNldFN1YmxheWVycyhuZXdT
dWJsYXllcnMpOwotCi0gICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKLSAgICAgICAgICAg
IC8vIElmIHdlIGhhdmUgYSB0cmFuc2Zvcm0gbGF5ZXIsIHRoZW4gdGhlIGNvbnRlbnRzIGxheWVy
IGlzIHBhcmVudGVkIGluIHRoZQotICAgICAgICAgICAgLy8gcHJpbWFyeSBsYXllciAod2hpY2gg
aXMgaXRzZWxmIGEgY2hpbGQgb2YgdGhlIHRyYW5zZm9ybSBsYXllcikuCi0gICAgICAgICAgICBt
X2xheWVyLT5yZW1vdmVBbGxTdWJsYXllcnMoKTsKLSAgICAgICAgICAgIG1fbGF5ZXItPmFkZFN1
YmxheWVyKG1fY29udGVudHNMYXllcik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAg
bV9sYXllci0+c2V0U3VibGF5ZXJzKG5ld1N1YmxheWVycyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NM
YXllckJsYWNrQmVycnk6OnVwZGF0ZUxheWVyUG9zaXRpb24oKQotewotICAgIC8vIFBvc2l0aW9u
IGlzIG9mZnNldCBvbiB0aGUgbGF5ZXIgYnkgdGhlIGxheWVyIGFuY2hvciBwb2ludC4KLSAgICBG
bG9hdFBvaW50IGxheWVyUG9zaXRpb24oCi0gICAgICAgIG1fcG9zaXRpb24ueCgpICsgbV9hbmNo
b3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKSwKLSAgICAgICAgbV9wb3NpdGlvbi55KCkgKyBt
X2FuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBwcmltYXJ5TGF5ZXIo
KS0+c2V0UG9zaXRpb24obGF5ZXJQb3NpdGlvbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OnVwZGF0ZUxheWVyU2l6ZSgpCi17Ci0gICAgSW50U2l6ZSBsYXllclNpemUobV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIp
IHsKLSAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0Qm91bmRzKGxheWVyU2l6ZSk7Ci0gICAg
ICAgIC8vIFRoZSBhbmNob3Igb2YgdGhlIGNvbnRlbnRzIGxheWVyIGlzIGFsd2F5cyBhdCAwLjUs
IDAuNSwgc28gdGhlIHBvc2l0aW9uIGlzIGNlbnRlci1yZWxhdGl2ZS4KLSAgICAgICAgRmxvYXRQ
b2ludCBjZW50ZXJQb2ludChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIp
OwotICAgICAgICBtX2xheWVyLT5zZXRQb3NpdGlvbihjZW50ZXJQb2ludCk7Ci0gICAgfQotCi0g
ICAgbV9sYXllci0+c2V0Qm91bmRzKGxheWVyU2l6ZSk7Ci0KLSAgICAvLyBOb3RlIHRoYXQgd2Ug
ZG9uJ3QgcmVzaXplIG1fY29udGVudHNMYXllci4gSXQncyB1cCB0aGUgY2FsbGVyIHRvIGRvIHRo
YXQuCi0KLSAgICAvLyBJZiB3ZSd2ZSBjaGFuZ2VkIHRoZSBib3VuZHMsIHdlIG5lZWQgdG8gcmVj
YWxjdWxhdGUgdGhlIHBvc2l0aW9uCi0gICAgLy8gb2YgdGhlIGxheWVyLCB0YWtpbmcgYW5jaG9y
IHBvaW50IGludG8gYWNjb3VudC4KLSAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUFuY2hvclBvaW50KCkKLXsKLSAgICBw
cmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludChtX2FuY2hvclBvaW50Lngo
KSwgbV9hbmNob3JQb2ludC55KCkpKTsKLSAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9yUG9p
bnRaKG1fYW5jaG9yUG9pbnQueigpKTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZVRyYW5zZm9ybSgpCi17Ci0gICAg
cHJpbWFyeUxheWVyKCktPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUNoaWxkcmVuVHJhbnNmb3JtKCkKLXsKLSAgICBw
cmltYXJ5TGF5ZXIoKS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9jaGlsZHJlblRyYW5zZm9ybSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZU1hc2tzVG9Cb3VuZHMo
KQotewotICAgIG1fbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobV9tYXNrc1RvQm91bmRzKTsKLSAg
ICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tC
ZXJyeTo6dXBkYXRlQ29udGVudHNPcGFxdWUoKQotewotICAgIG1fbGF5ZXItPnNldE9wYXF1ZSht
X2NvbnRlbnRzT3BhcXVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6dXBk
YXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKLXsKLSAgICBtX2xheWVyLT5zZXREb3VibGVTaWRlZCht
X2JhY2tmYWNlVmlzaWJpbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKQotewotICAgIGlmIChtX3ByZXNlcnZlczNEICYmICFt
X3RyYW5zZm9ybUxheWVyKSB7Ci0gICAgICAgIC8vIENyZWF0ZSB0aGUgdHJhbnNmb3JtIGxheWVy
LgotICAgICAgICBtX3RyYW5zZm9ybUxheWVyID0gTGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZShM
YXllckRhdGE6OlRyYW5zZm9ybUxheWVyLCB0aGlzKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBw
b3NpdGlvbiBmcm9tIHRoaXMgbGF5ZXIuCi0gICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsK
LSAgICAgICAgdXBkYXRlTGF5ZXJTaXplKCk7Ci0gICAgICAgIHVwZGF0ZUFuY2hvclBvaW50KCk7
Ci0gICAgICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwotICAgICAgICB1cGRhdGVDaGlsZHJlblRyYW5z
Zm9ybSgpOwotICAgICAgICB1cGRhdGVBbmltYXRpb25zKCk7Ci0KLSAgICAgICAgbV9sYXllci0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludChtX3NpemUud2lkdGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWln
aHQoKSAvIDIuMGYpKTsKLQotICAgICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDAuNWYsIDAuNWYpKTsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHk7
Ci0gICAgICAgIG1fbGF5ZXItPnNldFRyYW5zZm9ybShpZGVudGl0eSk7Ci0KLSAgICAgICAgLy8g
U2V0IHRoZSBvbGQgbGF5ZXIgdG8gb3BhY2l0eSBvZiAxLiBGdXJ0aGVyIGRvd24gd2Ugd2lsbCBz
ZXQgdGhlIG9wYWNpdHkgb24gdGhlIHRyYW5zZm9ybSBsYXllci4KLSAgICAgICAgbV9sYXllci0+
c2V0T3BhY2l0eSgxKTsKLQotICAgICAgICAvLyBNb3ZlIHRoaXMgbGF5ZXIgdG8gYmUgYSBjaGls
ZCBvZiB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBpZiAobV9sYXllci0+c3VwZXJsYXll
cigpKQotICAgICAgICAgICAgbV9sYXllci0+c3VwZXJsYXllcigpLT5yZXBsYWNlU3VibGF5ZXIo
bV9sYXllci5nZXQoKSwgbV90cmFuc2Zvcm1MYXllci5nZXQoKSk7Ci0gICAgICAgIG1fdHJhbnNm
b3JtTGF5ZXItPmFkZFN1YmxheWVyKG1fbGF5ZXIuZ2V0KCkpOwotCi0gICAgICAgIG1fdHJhbnNm
b3JtTGF5ZXItPnNldFByZXNlcnZlczNEKHRydWUpOwotICAgICAgICBtX2xheWVyLT5zZXRQcmVz
ZXJ2ZXMzRCh0cnVlKTsKLQotICAgICAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKLSAgICB9IGVs
c2UgaWYgKCFtX3ByZXNlcnZlczNEICYmIG1fdHJhbnNmb3JtTGF5ZXIpIHsKLSAgICAgICAgLy8g
UmVsYWNlIHRoZSB0cmFuc2Zvcm1MYXllciBpbiB0aGUgcGFyZW50IHdpdGggdGhpcyBsYXllci4K
LSAgICAgICAgbV9sYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLSAgICAgICAgaWYgKG1f
dHJhbnNmb3JtTGF5ZXItPnN1cGVybGF5ZXIoKSkKLSAgICAgICAgICAgIG1fdHJhbnNmb3JtTGF5
ZXItPnN1cGVybGF5ZXIoKS0+cmVwbGFjZVN1YmxheWVyKG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCks
IG1fbGF5ZXIuZ2V0KCkpOwotCi0gICAgICAgIC8vIFJlbGVhc2UgdGhlIHRyYW5zZm9ybSBsYXll
ci4KLSAgICAgICAgbV90cmFuc2Zvcm1MYXllciA9IDA7Ci0KLSAgICAgICAgdXBkYXRlTGF5ZXJQ
b3NpdGlvbigpOwotICAgICAgICB1cGRhdGVMYXllclNpemUoKTsKLSAgICAgICAgdXBkYXRlQW5j
aG9yUG9pbnQoKTsKLSAgICAgICAgdXBkYXRlVHJhbnNmb3JtKCk7Ci0gICAgICAgIHVwZGF0ZUNo
aWxkcmVuVHJhbnNmb3JtKCk7Ci0gICAgICAgIHVwZGF0ZUFuaW1hdGlvbnMoKTsKLQotICAgICAg
ICBtX2xheWVyLT5zZXRQcmVzZXJ2ZXMzRChmYWxzZSk7Ci0KLSAgICAgICAgdXBkYXRlU3VibGF5
ZXJMaXN0KCk7Ci0gICAgfQotCi0gICAgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlTGF5ZXJJc0RyYXdhYmxlKCkKLXsKLSAg
ICAvLyBGb3IgdGhlIHJlc3Qgb2YgdGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0b3IgY29kZSwgdGhl
cmUgaXMgbm8gcmVhc29uIHRvIG1ha2UgYQotICAgIC8vIGRpc3RpbmN0aW9uIGJldHdlZW4gZHJh
d3NDb250ZW50IGFuZCBjb250ZW50c1Zpc2libGUuIFNvLCBmb3IgbV9sYXllciwgdGhlc2UgdHdv
Ci0gICAgLy8gZmxhZ3MgYXJlIGNvbWJpbmVkIGhlcmUuIG1fY29udGVudHNMYXllciBzaG91bGRu
J3QgcmVjZWl2ZSB0aGUgZHJhd3NDb250ZW50IGZsYWcKLSAgICAvLyBzbyBpdCBpcyBvbmx5IGdp
dmVuIGNvbnRlbnRzVmlzaWJsZS4KLSAgICBtX2xheWVyLT5zZXREcmF3YWJsZShtX2RyYXdzQ29u
dGVudCAmJiBtX2NvbnRlbnRzVmlzaWJsZSk7Ci0KLSAgICBpZiAobV9jb250ZW50c0xheWVyKQot
ICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldERyYXdhYmxlKG1fY29udGVudHNWaXNpYmxlKTsK
LQotICAgIGlmIChtX2RyYXdzQ29udGVudCkKLSAgICAgICAgbV9sYXllci0+c2V0TmVlZHNEaXNw
bGF5KCk7Ci0KLSAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlSGFzRml4ZWRDb250YWluZXIoKQotewotICAgIG1fbGF5
ZXItPnNldEhhc0ZpeGVkQ29udGFpbmVyKG1faGFzRml4ZWRDb250YWluZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVIYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVl
KCkKLXsKLSAgICBtX2xheWVyLT5zZXRIYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKG1faGFzRml4
ZWRBbmNlc3RvckluRE9NVHJlZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OnVwZGF0ZUxheWVyQmFja2dyb3VuZENvbG9yKCkKLXsKLSAgICBpZiAobV9iYWNrZ3JvdW5kQ29s
b3IuaXNWYWxpZCgpKQotICAgICAgICBzZXRMYXllckJhY2tncm91bmRDb2xvcigqbV9sYXllciwg
bV9iYWNrZ3JvdW5kQ29sb3IpOwotICAgIGVsc2UKLSAgICAgICAgY2xlYXJMYXllckJhY2tncm91
bmRDb2xvcigqbV9sYXllcik7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIEdy
YXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVGaWx0ZXJzKCkKLXsKLSAgICBpZiAoIW1fZmls
dGVycy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByaW1hcnlMYXllcigpLT5zZXRG
aWx0ZXJzKG1fZmlsdGVycyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tC
ZXJyeTo6dXBkYXRlQW5pbWF0aW9ucygpCi17Ci0gICAgLy8gV2hlbiB0aGVyZSBpcyBhIHRyYW5z
Zm9ybSBsYXllciwgdGhlIHRyYW5zZm9ybSBtdXN0IGJlIHNldCBvbiB0aGF0IGxheWVyCi0gICAg
Ly8gaW5zdGVhZCBvZiB0aGUgY29udGVudCBsYXllci4gT3BhY2l0eSBjYW4gYmUgc2V0IG9uIHRo
ZSB0cmFuc2Zvcm0gbGF5ZXIgb3IgdGhlCi0gICAgLy8gbGF5ZXIgd2l0aCBlcXVhbCBvdXRjb21l
LCBidXQgY3VycmVudGx5IGl0IGlzIGFsc28gc2V0IG9uIHRoZSB0cmFuc2Zvcm0KLSAgICAvLyBs
YXllci4gU2luY2Ugd2Ugb25seSBhY2NlbGVyYXRlIGFuaW1hdGlvbnMgb2YgdGhlc2UgdHdvIHBy
b3BlcnRpZXMsIGl0Ci0gICAgLy8gaXMgc2FmZSB0byBtb3ZlIGFsbCBhY2NlbGVyYXRlZCBhbmlt
YXRpb25zIHRvIHRoZSB0cmFuc2Zvcm0gbGF5ZXIsIGFuZAotICAgIC8vIHJlbW92ZSB0aGVtIGZy
b20gdGhlIGxheWVyIHByb3Blci4KLSAgICAvLyBTbyB0aGUgZm9sbG93aW5nIGNvZGUsIHdoaWxl
IGl0IGxvb2tzIHN0cmFuZ2UsIGlzIGNvcnJlY3Q6Ci0gICAgLy8gd2UgdHJhbnNmZXIgYWxsIGFu
aW1hdGlvbnMgdG8gdGhlIHRyYW5zZm9ybSBsYXllciBpZiBpdCBleGlzdHMuCi0gICAgLy8gRklY
TUU6IElmIG90aGVyIHByb3BlcnRpZXMgYmVjb21lIGFuaW1hdGVkLCBpdCBtYXkgbm90IGJlIGVx
dWl2YWxlbnQgdG8KLSAgICAvLyBtb3ZlIHRoZW0gdG8gdGhlIHRyYW5zZm9ybSBsYXllci4gVGhl
biB0aGlzIGNvZGUgbmVlZHMgdG8gYmUgcmV2aXNpdGVkCi0gICAgLy8gdG8gb25seSBtb3ZlIHRo
ZSB0cmFuc2Zvcm0gYW5pbWF0aW9ucyB0byB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgIHByaW1h
cnlMYXllcigpLT5zZXRSdW5uaW5nQW5pbWF0aW9ucyhtX3J1bm5pbmdBbmltYXRpb25zKTsKLSAg
ICBwcmltYXJ5TGF5ZXIoKS0+c2V0U3VzcGVuZGVkQW5pbWF0aW9ucyhtX3N1c3BlbmRlZEFuaW1h
dGlvbnMpOwotCi0gICAgLy8gV2UgbmVlZCB0byBtb3ZlIHRoZSBhbmltYXRpb25zIHRvIHRoZSB0
cmFuc2Zvcm0gbGF5ZXIgaWYgdGhlcmUgaXMgb25lLgotICAgIGlmIChtX3RyYW5zZm9ybUxheWVy
KSB7Ci0gICAgICAgIG1fbGF5ZXItPnNldFJ1bm5pbmdBbmltYXRpb25zKFZlY3RvcjxSZWZQdHI8
TGF5ZXJBbmltYXRpb24+ID4oKSk7Ci0gICAgICAgIG1fbGF5ZXItPnNldFN1c3BlbmRlZEFuaW1h
dGlvbnMoVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPigpKTsKLSAgICB9Ci19Ci0KLXZv
aWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUNvbnRlbnRzVmlkZW8oKQotewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6
dXBkYXRlQ29udGVudHNSZWN0KCkKLXsKLSAgICBpZiAoIW1fY29udGVudHNMYXllcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY29udGVudHNMYXllci0+cG9zaXRpb24oKSAhPSBtX2Nv
bnRlbnRzUmVjdC5sb2NhdGlvbigpKQotICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldFBvc2l0
aW9uKG1fY29udGVudHNSZWN0LmxvY2F0aW9uKCkpOwotCi0gICAgaWYgKG1fY29udGVudHNMYXll
ci0+Ym91bmRzKCkgIT0gbV9jb250ZW50c1JlY3Quc2l6ZSgpKQotICAgICAgICBtX2NvbnRlbnRz
TGF5ZXItPnNldEJvdW5kcyhtX2NvbnRlbnRzUmVjdC5zaXplKCkpOwotfQotCi12b2lkIEdyYXBo
aWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXR1cENvbnRlbnRzTGF5ZXIoTGF5ZXJXZWJLaXRUaHJlYWQq
IGNvbnRlbnRzTGF5ZXIpCi17Ci0gICAgaWYgKGNvbnRlbnRzTGF5ZXIgPT0gbV9jb250ZW50c0xh
eWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jb250ZW50c0xheWVyKSB7Ci0gICAg
ICAgIG1fY29udGVudHNMYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLSAgICAgICAgbV9j
b250ZW50c0xheWVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoY29udGVudHNMYXllcikgewotICAg
ICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBjb250ZW50c0xheWVyOwotCi0gICAgICAgIG1fY29udGVu
dHNMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDo6emVybygpKTsKLQotICAgICAgICAv
LyBJdCBpcyBuZWNlc3NhcnkgdG8gdXBkYXRlIHNldERyYXdhYmxlIGFzIHNvb24gYXMgd2UgcmVj
ZWl2ZSB0aGUgbmV3IGNvbnRlbnRzTGF5ZXIsIGZvcgotICAgICAgICAvLyB0aGUgY29ycmVjdG5l
c3Mgb2YgZWFybHkgZXhpdCBjb25kaXRpb25zIGluIHNldERyYXdzQ29udGVudCgpIGFuZCBzZXRD
b250ZW50c1Zpc2libGUoKS4KLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXREcmF3YWJsZSht
X2NvbnRlbnRzVmlzaWJsZSk7Ci0KLSAgICAgICAgLy8gSW5zZXJ0IHRoZSBjb250ZW50IGxheWVy
IGZpcnN0LiBWaWRlbyBlbGVtZW50cyByZXF1aXJlIHRoaXMsIGJlY2F1c2UgdGhleSBoYXZlCi0g
ICAgICAgIC8vIHNoYWRvdyBjb250ZW50IHRoYXQgbXVzdCBkaXNwbGF5IGluIGZyb250IG9mIHRo
ZSB2aWRlby4KLSAgICAgICAgbV9sYXllci0+aW5zZXJ0U3VibGF5ZXIobV9jb250ZW50c0xheWVy
LmdldCgpLCAwKTsKLQotICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKLQotICAgICAgICBp
ZiAoaXNTaG93aW5nRGVidWdCb3JkZXIoKSkgewotICAgICAgICAgICAgc2V0TGF5ZXJCb3JkZXJD
b2xvcigqbV9jb250ZW50c0xheWVyLCBDb2xvcigwLCAwLCAxMjgsIDE4MCkpOwotICAgICAgICAg
ICAgbV9jb250ZW50c0xheWVyLT5zZXRCb3JkZXJXaWR0aCgxKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBzaW1w
bHkgbWltaWNzIHRoZSBvcGVyYXRpb24gb2YgR3JhcGhpY3NMYXllckNBCi12b2lkIEdyYXBoaWNz
TGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVPcGFjaXR5T25MYXllcigpCi17Ci0gICAgcHJpbWFyeUxh
eWVyKCktPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tC
ZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuaAkocmV2aXNpb24gMTYxNTkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVy
QmxhY2tCZXJyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHcmFwaGljc0xheWVyQmxhY2tCZXJyeV9oCi0jZGVmaW5l
IEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5X2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLQotI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0xheWVyLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIExheWVyQW5pbWF0aW9uOwotY2xhc3MgTGF5ZXJXZWJLaXRUaHJlYWQ7Ci0KLWNs
YXNzIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5IDogcHVibGljIEdyYXBoaWNzTGF5ZXIgewotcHVi
bGljOgotICAgIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5KEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsK
LSAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyQmxhY2tCZXJyeSgpOwotCi0gICAgdmlydHVhbCB2
b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2V0Q2hpbGRy
ZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRD
aGlsZChHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQXRJbmRleChH
cmFwaGljc0xheWVyKiwgaW50IGluZGV4KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBYm92
ZShHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciogc2libGluZyk7Ci0gICAgdmlydHVhbCB2
b2lkIGFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcp
OwotICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQs
IEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKTsKLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9t
UGFyZW50KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2lu
dCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXREcmF3c0NvbnRlbnQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVmlzaWJs
ZShib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRIYXNGaXhlZENvbnRhaW5lcihib29sKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0SGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZShib29sKTsKLQotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgZmlsdGVyIGNhbiBiZSByZW5kZXJl
ZCBieSB0aGUgY29tcG9zaXRvcgotICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJzKGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMgJik7Ci0gICAgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsgfQotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNPcGFxdWUoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJp
bGl0eShib29sKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKLQotICAg
IHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYsIFNob3VsZENsaXBUb0xheWVyID0gQ2xp
cFRvTGF5ZXIpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKLQot
ICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBj
b25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGF1c2VB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUpOwotCi0gICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1l
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotCi0gICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKLQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldERlYnVnQmFja2dy
b3VuZENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldERlYnVnQm9yZGVy
KGNvbnN0IENvbG9yJiwgZmxvYXQgYm9yZGVyV2lkdGgpOwotCi0gICAgdm9pZCBub3RpZnlGbHVz
aFJlcXVpcmVkKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgIG1f
Y2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgbm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2Ns
aWVudCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5ub3RpZnlBbmltYXRpb25TdGFydGVkKHRoaXMs
IHRpbWUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJv
eWVkKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZU9wYWNpdHlPbkxheWVyKCk7Ci0KLSAgICBMYXllcldl
YktpdFRocmVhZCogcHJpbWFyeUxheWVyKCkgY29uc3QgIHsgcmV0dXJuIG1fdHJhbnNmb3JtTGF5
ZXIuZ2V0KCkgPyBtX3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsgfQotICAg
IExheWVyV2ViS2l0VGhyZWFkKiBob3N0TGF5ZXJGb3JTdWJsYXllcnMoKSBjb25zdDsKLSAgICBM
YXllcldlYktpdFRocmVhZCogbGF5ZXJGb3JTdXBlcmxheWVyKCkgY29uc3Q7Ci0KLSAgICB2b2lk
IHVwZGF0ZVN1YmxheWVyTGlzdCgpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwot
ICAgIHZvaWQgdXBkYXRlTGF5ZXJTaXplKCk7Ci0gICAgdm9pZCB1cGRhdGVBbmNob3JQb2ludCgp
OwotICAgIHZvaWQgdXBkYXRlVHJhbnNmb3JtKCk7Ci0gICAgdm9pZCB1cGRhdGVDaGlsZHJlblRy
YW5zZm9ybSgpOwotICAgIHZvaWQgdXBkYXRlTWFza3NUb0JvdW5kcygpOwotICAgIHZvaWQgdXBk
YXRlQ29udGVudHNPcGFxdWUoKTsKLSAgICB2b2lkIHVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgp
OwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpOwotICAgIHZvaWQgdXBkYXRlTGF5
ZXJJc0RyYXdhYmxlKCk7Ci0gICAgdm9pZCB1cGRhdGVIYXNGaXhlZENvbnRhaW5lcigpOwotICAg
IHZvaWQgdXBkYXRlSGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpOwotICAgIHZvaWQgdXBkYXRl
TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9p
ZCB1cGRhdGVGaWx0ZXJzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoKTsK
LQotICAgIHZvaWQgdXBkYXRlQ29udGVudHNJbWFnZShJbWFnZSopOwotICAgIHZvaWQgdXBkYXRl
Q29udGVudHNWaWRlbygpOwotICAgIHZvaWQgdXBkYXRlQ29udGVudHNSZWN0KCk7Ci0KLSAgICB2
b2lkIHNldHVwQ29udGVudHNMYXllcihMYXllcldlYktpdFRocmVhZCopOwotICAgIExheWVyV2Vi
S2l0VGhyZWFkKiBjb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVy
LmdldCgpOyB9Ci0KLSAgICBSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IG1fbGF5ZXI7Ci0gICAg
UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBtX3RyYW5zZm9ybUxheWVyOwotICAgIFJlZlB0cjxM
YXllcldlYktpdFRocmVhZD4gbV9jb250ZW50c0xheWVyOwotCi0jaWYgRU5BQkxFKENTU19GSUxU
RVJTKQotICAgIEZpbHRlck9wZXJhdGlvbnMgbV9maWx0ZXJzOwotI2VuZGlmCi0KLSAgICBWZWN0
b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+IG1fcnVubmluZ0FuaW1hdGlvbnM7Ci0gICAgVmVj
dG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiBtX3N1c3BlbmRlZEFuaW1hdGlvbnM7Ci0gICAg
ZG91YmxlIG1fc3VzcGVuZFRpbWU7Ci0KLSAgICBlbnVtIENvbnRlbnRzTGF5ZXJQdXJwb3NlIHsK
LSAgICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKLSAgICAgICAgQ29udGVudHNMYXllckZvcklt
YWdlLAotICAgICAgICBDb250ZW50c0xheWVyRm9yVmlkZW8sCi0gICAgICAgIENvbnRlbnRzTGF5
ZXJGb3JDYW52YXMsCi0gICAgfTsKLQotICAgIENvbnRlbnRzTGF5ZXJQdXJwb3NlIG1fY29udGVu
dHNMYXllclB1cnBvc2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JVHlwZVV0aWxzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JVHlwZVV0
aWxzLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvSVR5cGVVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJVHlwZVV0aWxzX2gKLSNk
ZWZpbmUgSVR5cGVVdGlsc19oCi0KLSNpbmNsdWRlIDxmc19hcGkuaD4KLQotc3RhdGljIGlubGlu
ZSBGU19GSVhFRCBmbG9hdFRvSVR5cGVGaXhlZChmbG9hdCBmKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGU19GSVhFRD4oZiAqIDY1NTM2LjApOyB9Ci1zdGF0aWMgaW5saW5lIEZTX0ZJWEVEIGludFRv
SVR5cGVGaXhlZChpbnQgaSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RlNfRklYRUQ+KGkgPDwgMTYp
OyB9Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgaVR5cGVGaXhlZFRvRmxvYXQoRlNfRklYRUQgbikg
eyByZXR1cm4gbiAvIDY1NTM2LjA7IH0KLQotc3RhdGljIGNvbnN0IEZTX0ZJWEVEIE1BWElUWVBF
Rk9OVFNDQUxFID0gaW50VG9JVHlwZUZpeGVkKDEwMDAwKSAtIDE7Ci0KLXN0YXRpYyBjb25zdCBG
U19GSVhFRCBJVFlQRUZBS0VCT0xEQU1PVU5UID0gZmxvYXRUb0lUeXBlRml4ZWQoMC4wNik7IC8v
IDYlIHBzZXVkbyBib2xkCi0KLSNlbmRpZiAvLyBJVHlwZVV0aWxzX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSWNvbkJsYWNrQmVycnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
SWNvbkJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ljb25CbGFja0JlcnJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJY29uLmgiCi0KLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1JY29uOjp+SWNvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBJbnRSZWN0IGNvbnN0JikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1QYXNzUmVmUHRyPEljb24+IEljb246OmNy
ZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpCi17Ci0gICAgLy8gRklYTUU6
IHJlbW92ZSAwIHRlbXBsYXRlIHBhcmFtIHdoZW4gdGhpcyBpcyBpbXBsZW1lbnRlZAotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW1h
Z2VCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW1hZ2VCbGFj
a0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9u
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLSNp
bmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0KLSNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1SZXNvdXJjZVN0b3JlLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LQotdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlJlc291cmNlRGF0YTsKLXVzaW5nIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpSZXNvdXJjZVN0b3JlOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFy
ICpuYW1lKQotewotICAgIFJlc291cmNlRGF0YSBkYXRhID0gUmVzb3VyY2VTdG9yZTo6aW5zdGFu
Y2UoKS0+cmVxdWVzdFJlc291cmNlKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmZyb21V
dGY4KG5hbWUpKTsKLSAgICBpZiAoIWRhdGEuZGF0YSgpKQotICAgICAgICByZXR1cm4gQml0bWFw
SW1hZ2U6Om51bGxJbWFnZSgpOwotCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEubGVuKCkpOwotICAgIGlmICgh
YnVmZmVyKQotICAgICAgICByZXR1cm4gQml0bWFwSW1hZ2U6Om51bGxJbWFnZSgpOwotCi0gICAg
UmVmUHRyPEJpdG1hcEltYWdlPiBpbWcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7Ci0gICAgaW1n
LT5zZXREYXRhKGJ1ZmZlci5yZWxlYXNlKCksIHRydWUgLyogYWxsRGF0YVJlY2VpdmVkICovKTsK
LSAgICByZXR1cm4gaW1nLnJlbGVhc2UoKTsKLX0KLQotUGFzc05hdGl2ZUltYWdlUHRyIEltYWdl
RnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBuZXcgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxlZEltYWdlKG1fc2l6ZSwgbV9ieXRlcyk7Ci19
Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYg
KGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBp
ZiAobV9mcmFtZSkgewotICAgICAgICBkZWxldGUgbV9mcmFtZTsKLSAgICAgICAgbV9mcmFtZSA9
IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LUJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2Us
IEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQotICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCi0gICAgLCBt
X2N1cnJlbnRGcmFtZSgwKQotICAgICwgbV9mcmFtZXMoMCkKLSAgICAsIG1fZnJhbWVUaW1lcigw
KQotICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUpCi0gICAgLCBtX3JlcGV0
aXRpb25Db3VudFN0YXR1cyhVbmtub3duKQotICAgICwgbV9yZXBldGl0aW9uc0NvbXBsZXRlKDAp
Ci0gICAgLCBtX2RlY29kZWRTaXplKDApCi0gICAgLCBtX2ZyYW1lQ291bnQoMSkKLSAgICAsIG1f
aXNTb2xpZENvbG9yKGZhbHNlKQotICAgICwgbV9jaGVja2VkRm9yU29saWRDb2xvcihmYWxzZSkK
LSAgICAsIG1fYW5pbWF0aW9uRmluaXNoZWQodHJ1ZSkKLSAgICAsIG1fYWxsRGF0YVJlY2VpdmVk
KHRydWUpCi0gICAgLCBtX2hhdmVTaXplKHRydWUpCi0gICAgLCBtX3NpemVBdmFpbGFibGUodHJ1
ZSkKLSAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKLXsKLSAgICBpbnQgd2lkdGggPSBuYXRp
dmVJbWFnZS0+c2l6ZSgpLndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IG5hdGl2ZUltYWdlLT5z
aXplKCkuaGVpZ2h0KCk7Ci0gICAgbV9kZWNvZGVkU2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogNDsK
LSAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotCi0gICAgbV9mcmFtZXMuZ3Jv
dygxKTsKLSAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gbmF0aXZlSW1hZ2U7Ci0gICAgbV9mcmFt
ZXNbMF0ubV9oYXNBbHBoYSA9IG5hdGl2ZUltYWdlLT5oYXNBbHBoYSgpOwotICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKLX0K
LQotdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKLXsKLSAgICBtX2lzU29s
aWRDb2xvciA9IHNpemUoKS53aWR0aCgpID09IDEgJiYgc2l6ZSgpLmhlaWdodCgpID09IDEgJiYg
ZnJhbWVDb3VudCgpID09IDE7Ci0gICAgbV9jaGVja2VkRm9yU29saWRDb2xvciA9IHRydWU7Ci0g
ICAgaWYgKG1faXNTb2xpZENvbG9yKSB7Ci0gICAgICAgIHVuc2lnbmVkIGJ1ZmZlcjsKLSAgICAg
ICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwot
ICAgICAgICBpbWFnZS0+cmVhZFBpeGVscygmYnVmZmVyLCAxKTsKLSAgICAgICAgbV9zb2xpZENv
bG9yID0gQ29sb3IoYnVmZmVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmludmFs
aWRhdGVQbGF0Zm9ybURhdGEoKQotewotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSAgICBzdGFy
dEFuaW1hdGlvbigpOwotCi0gICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEZsb2F0UmVjdCBub3JtRHN0UmVjdCA9IGRzdFJlY3Qubm9ybWFsaXplZCgpOwotICAgIEZsb2F0
UmVjdCBub3JtU3JjUmVjdCA9IHNyY1JlY3Qubm9ybWFsaXplZCgpOwotCi0gICAgaWYgKG5vcm1T
cmNSZWN0LmlzRW1wdHkoKSB8fCBub3JtRHN0UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsgLy8gTm90aGluZyB0byBkcmF3LgotCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElORykKLSAgICBub3JtU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxp
bmcobm9ybVNyY1JlY3QsIGltYWdlLT5zaXplKCkpOwotI2VuZGlmCi0KLSAgICAvLyB1c2Ugc2lt
aWxhciBvcmllbnRhdGlvbiBjb2RlIGFzIEltYWdlU2tpYQotICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb247Ci0gICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIG9yaWVudGF0aW9uID0gZnJh
bWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOyAgCi0KLSAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHNhdmVDb250ZXh0KCpjb250ZXh0LCBmYWxzZSk7Ci0gICAgaWYgKG9y
aWVudGF0aW9uICE9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uKSB7Ci0gICAgICAgIHNhdmVDb250
ZXh0LnNhdmUoKTsKLQotICAgICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9y
aWdpbiB0byBiZSBhdCAoMCwgMCkKLSAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKG5vcm1Ec3RS
ZWN0LngoKSwgbm9ybURzdFJlY3QueSgpKTsKLSAgICAgICAgbm9ybURzdFJlY3Quc2V0TG9jYXRp
b24oRmxvYXRQb2ludCgpKTsKLQotICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0ob3JpZW50YXRp
b24udHJhbnNmb3JtRnJvbURlZmF1bHQobm9ybURzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlm
IChvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUg
ZGVzdGluYXRpb24gcmVjdCB3aWxsIGhhdmUgaXRzIHdpZHRoIGFuZCBoZWlnaHQgYWxyZWFkeSBy
ZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCi0gICAgICAgICAgICAvLyB0aGUgaW1hZ2Us
IGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVyc2Ug
aXQgYmFjayBoZXJlLgotICAgICAgICAgICAgbm9ybURzdFJlY3QgPSBGbG9hdFJlY3Qobm9ybURz
dFJlY3QueCgpLCBub3JtRHN0UmVjdC55KCksIG5vcm1Ec3RSZWN0LmhlaWdodCgpLCBub3JtRHN0
UmVjdC53aWR0aCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIENvbXBvc2l0ZU9wZXJhdG9y
IG9sZE9wZXJhdG9yID0gY29udGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0gICAgY29udGV4
dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+YWRkSW1hZ2Uobm9ybURzdFJlY3QsIG5vcm1TcmNSZWN0LCBpbWFnZSk7Ci0gICAgY29u
dGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9sZE9wZXJhdG9yKTsKLQotICAgIGlmIChJbWFn
ZU9ic2VydmVyKiBvYnNlcnZlciA9IGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgb2JzZXJ2ZXIt
PmRpZERyYXcodGhpcyk7Ci19Ci0KLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IEJsZW5kTW9kZSkKLXsKLSAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSA9IG5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gcGF0dGVyblRyYW5zZm9ybWF0aW9uIGNvbnRhaW5zIHRoZSB0aWxlIHNjYWxlIGZhY3RvciBy
ZWxhdGl2ZSB0bwotICAgIC8vIGRvY3VtZW50IGNvb3JkaW5hdGVzLiBwaGFzZSBpcyBnaXZlbiBp
biBkb2N1bWVudCBjb29yZGluYXRlcyBhbmQKLSAgICAvLyBjb3JyZXNwb25kcyB0byBhIHRleHR1
cmUgZHJhd24gd2l0aCBzcmMgc3RhcnRpbmcgYXQgKDAsIDApLgotICAgIC8vIFRodXMsIGRzdFJl
Y3Qgc3RhcnRzIGF0IHBoYXNlICsgcGF0dGVyblRyYW5zZm9ybWF0aW9uLm1hcFBvaW50KHNyY1Jl
Y3QubG9jYXRpb24oKSkuCi0gICAgQWZmaW5lVHJhbnNmb3JtIHNyY1RyYW5zZm9ybTsKLSAgICBz
cmNUcmFuc2Zvcm0udHJhbnNsYXRlKHBoYXNlLngoKSwgcGhhc2UueSgpKTsKLSAgICBzcmNUcmFu
c2Zvcm0ubXVsdGlwbHkocGF0dGVyblRyYW5zZm9ybWF0aW9uKTsKLSNpZiBFTkFCTEUoSU1BR0Vf
REVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIEZsb2F0UmVjdCBzcmNSZWN0TG9jYWwoc3JjUmVj
dCk7Ci0gICAgY29uc3QgSW50U2l6ZSB1bnNjYWxlZFNpemUgPSBzaXplKCk7Ci0gICAgY29uc3Qg
SW50U2l6ZSBzY2FsZWRTaXplID0gaW1hZ2UtPnNpemUoKTsKLSAgICBpZiAodW5zY2FsZWRTaXpl
ICE9IHNjYWxlZFNpemUpIHsKLSAgICAgICAgc3JjUmVjdExvY2FsID0gYWRqdXN0U291cmNlUmVj
dEZvckRvd25TYW1wbGluZyhzcmNSZWN0LCBzY2FsZWRTaXplKTsKLSAgICAgICAgLy8gSWYgdGhl
IGltYWdlIGhhcyBiZWVuIGRvd24gc2FtcGxlZCwgdGhlIHRyYW5zZm9ybWF0aW9uIHNob3VsZCB0
YWtlIHRoZSBzY2FsZSBpbnRvIGFjY291bnQuCi0gICAgICAgIGZsb2F0IHhzY2FsZSA9IHN0YXRp
Y19jYXN0PGZsb2F0Pih1bnNjYWxlZFNpemUud2lkdGgoKSkgLyBzY2FsZWRTaXplLndpZHRoKCk7
Ci0gICAgICAgIGZsb2F0IHlzY2FsZSA9IHN0YXRpY19jYXN0PGZsb2F0Pih1bnNjYWxlZFNpemUu
aGVpZ2h0KCkpIC8gc2NhbGVkU2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgc3JjVHJhbnNmb3JtLnNj
YWxlTm9uVW5pZm9ybSh4c2NhbGUsIHlzY2FsZSk7Ci0gICAgfQotI2Vsc2UKLSAgICBGbG9hdFJl
Y3Qgc3JjUmVjdExvY2FsKHNyY1JlY3QpOwotI2VuZGlmCi0gICAgc3JjVHJhbnNmb3JtLnRyYW5z
bGF0ZShzcmNSZWN0TG9jYWwueCgpLCBzcmNSZWN0TG9jYWwueSgpKTsKLSAgICBkb3VibGUgc3Jj
VHJhbnNmb3JtQXJyYXlbNl0gPSB7Ci0gICAgICAgIHNyY1RyYW5zZm9ybS5hKCksIHNyY1RyYW5z
Zm9ybS5iKCksCi0gICAgICAgIHNyY1RyYW5zZm9ybS5jKCksIHNyY1RyYW5zZm9ybS5kKCksCi0g
ICAgICAgIHNyY1RyYW5zZm9ybS5lKCksIHNyY1RyYW5zZm9ybS5mKCkKLSAgICB9OwotCi0gICAg
Q29tcG9zaXRlT3BlcmF0b3Igb2xkT3BlcmF0b3IgPSBjb250ZXh0LT5jb21wb3NpdGVPcGVyYXRp
b24oKTsKLSAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOwotICAgIGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5hZGRQYXR0ZXJuKGRzdFJlY3QsIHNyY1JlY3RMb2NhbCwg
c3JjVHJhbnNmb3JtQXJyYXksIGltYWdlKTsKLSAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVy
YXRpb24ob2xkT3BlcmF0b3IpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQnVmZmVyQmxh
Y2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9JbWFnZUJ1ZmZlckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQnVm
ZmVyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzI2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiQmFz
ZTY0LmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSlBFR0ltYWdlRW5jb2Rlci5oIgot
I2luY2x1ZGUgIkxheWVyTWVzc2FnZS5oIgotI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5oIgot
I2luY2x1ZGUgIlRpbGVkSW1hZ2UuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdM
RVMyQ29udGV4dFN0YXRlLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3Mu
aD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TZXR0aW5ncy5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybVdpbmRvdy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgYm9vbCBtYWtlQnVmZmVyQ3VycmVudChIb3N0V2luZG93KiB3aW5k
b3cpCi17Ci0gICAgQVNTRVJUKGlzQ29tcG9zaXRpbmdUaHJlYWQoKSk7Ci0KLSAgICBpZiAod2lu
ZG93ICYmIHdpbmRvdy0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIHsKLSAgICAgICAgaWYgKEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6V2luZG93KiBwbGF0Zm9ybVdpbmRvdyA9IHdpbmRv
dy0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnBsYXRmb3JtV2luZG93KCkpIHsKLSAgICAgICAgICAg
IGlmIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6Om1ha2VCdWZmZXJDdXJyZW50KHBs
YXRmb3JtV2luZG93LT5idWZmZXIoKSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpH
TEVTMikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgd2luZG93IGJ1dCB0aGUgYXBwbGljYXRpb24gc3Rh
dGUgc2F2ZXIgaXMgZW5hYmxlZCwKLSAgICAvLyB3ZSdyZSB1c2luZyBhIEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZUNvbXBvc2l0b3IgZm9yIHJlbmRlcmluZywKLSAgICAvLyB0aGF0IG1ha2Vz
IHN1cmUgYSBjb250ZXh0IGlzIGFsd2F5cyBjdXJyZW50IG9uIHRoZSBjb21wb3NpdGluZyB0aHJl
YWQuCi0gICAgaWYgKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aXNHTEVTMkFwcFN0
YXRlU2F2ZXJFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gT3RoZXJ3
aXNlLCB3ZSdsbCBoYXZlIHRvIHRyeSBhbmQgZmFsbCBiYWNrIHRvIG91ciBsYXN0IGhvcGUuCi0g
ICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6bWFrZVNoYXJlZFJlc291
cmNlQ29udGV4dEN1cnJlbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMik7
Ci19Ci0KLXN0YXRpYyBib29sIGdldEltYWdlRGF0YUludGVybmFsKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgc2l6ZSwgdW5zaWdu
ZWQgY2hhciogcmVzdWx0LCBib29sIHVubXVsdGlwbHksIEhvc3RXaW5kb3cqIHdpbmRvdykKLXsK
LSAgICBpZiAoIW1ha2VCdWZmZXJDdXJyZW50KHdpbmRvdykpIHsKLSAgICAgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxXYXJu
LAotICAgICAgICAgICAgIkltYWdlQnVmZmVyQmxhY2tCZXJyeSBnZXRJbWFnZURhdGFJbnRlcm5h
bCgpIGVycm9yOiBjYW5ub3QgbWFrZSBidWZmZXIgY3VycmVudCwgcmV0dXJuaW5nIHplcm9lZC1v
dXQgcGl4ZWxzLiIpOwotICAgICAgICBtZW1zZXQocmVzdWx0LCAwLCByZWN0LndpZHRoKCkgKiBy
ZWN0LmhlaWdodCgpICogNCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyByZWFkUGl4ZWxzIGNhbiBjYWxsIHVwZGF0ZUJhY2tpbmcgd2hpY2ggZHJhd3MgdGhlIGRpc3Bs
YXkgbGlzdC4gVGhpcyBpcyBvdXQtb2YtYmFuZCByZW5kZXJpbmcgYW5kIHdlIG5lZWQKLSAgICAv
LyB0byBwcm90ZWN0IHRoZSBlbWJlZGRlciBmcm9tIHN0YXRlIG11dGF0aW9ucy4KLSAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyQ29udGV4dFN0YXRlOjpBcHBTdGF0ZVNh
dmVyIGFwcFN0YXRlU2F2ZXI7Ci0KLSAgICAvLyBBbnkgcGl4ZWxzIG91dHNpZGUgdGhlIGNhbnZh
cyBhcmUgcmV0dXJuZWQgYXMgdHJhbnNwYXJlbnQgYmxhY2sgaW4gdGhlIHJlc3VsdGluZyBJbWFn
ZURhdGEgb2JqZWN0LgotICAgIGlmIChyZWN0LngoKSA8IDAKLSAgICAgICAgfHwgcmVjdC55KCkg
PCAwCi0gICAgICAgIHx8IHJlY3QubWF4WCgpID4gc2l6ZS53aWR0aCgpCi0gICAgICAgIHx8IHJl
Y3QubWF4WSgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbWVtc2V0KHJlc3VsdCwgMCwgcmVj
dC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOwotCi0gICAgSW50UmVjdCBzdWJyZWN0ID0g
cmVjdDsKLSAgICBzdWJyZWN0LmludGVyc2VjdChzaXplKTsKLSAgICAvLyBub3RoaW5nIHRvIGRv
IGlmIHJlY3QgaXMgY29tcGxldGVseSBvdXRzaWRlIG9mIHRoZSBpbWFnZSBhcmVhCi0gICAgaWYg
KHN1YnJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBhZGp1c3Qg
Zm9yIG5lZ2F0aXZlIHggYW5kIHkgaW5kZXgKLSAgICBpZiAocmVjdC54KCkgPCAwKQotICAgICAg
ICByZXN1bHQgKz0gKC1yZWN0LngoKSAqIDQpOwotICAgIGlmIChyZWN0LnkoKSA8IDApCi0gICAg
ICAgIHJlc3VsdCArPSAoLXJlY3QueSgpICogcmVjdC53aWR0aCgpICogNCk7Ci0KLSAgICAvLyBG
SVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQgYSB0aWxlZCBidWZmZXIuCi0gICAgY29uc3QgaW50
IG1heFRpbGVTaXplID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxlZEltYWdl
OjpkZWZhdWx0VGlsZVNpemUoKTsKLSAgICBJbnRSZWN0IHIgPSBzdWJyZWN0OwotICAgIEludFJl
Y3QgdGlsZVJlY3QoMCwgMCwgbWF4VGlsZVNpemUsIG1heFRpbGVTaXplKTsKLSAgICByLmludGVy
c2VjdCh0aWxlUmVjdCk7Ci0gICAgaWYgKCFyLmlzRW1wdHkoKSkKLSAgICAgICAgY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPnJlYWRQaXhlbHMociwgcmVzdWx0LCB1bm11bHRpcGx5KTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmdldEltYWdlRGF0YShH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJl
Y3QmIHNpemUsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCwgYm9vbCB1bm11bHRpcGx5KSBjb25zdAot
ewotICAgIGlmICghaXNDb21wb3NpdGluZ1RocmVhZCgpKSB7Ci0gICAgICAgIC8vIFVzZSBjcmVh
dGVGdW5jdGlvbkNhbGxNZXNzYWdlIGluc3RlYWQgb2YgY3JlYXRlTWV0aG9kQ2FsbE1lc3NhZ2Ug
dG8gYXZvaWQgZGVhZGxvY2sKLSAgICAgICAgLy8gd2l0aCBHdWFyZGVkIHBvaW50ZXJzLgotICAg
ICAgICBkaXNwYXRjaFN5bmNDb21wb3NpdGluZ01lc3NhZ2UoQmxhY2tCZXJyeTo6UGxhdGZvcm06
OmNyZWF0ZUZ1bmN0aW9uQ2FsbE1lc3NhZ2UoCi0gICAgICAgICAgICAmZ2V0SW1hZ2VEYXRhSW50
ZXJuYWwsIGNvbnRleHQsIHJlY3QsIHNpemUsIHJlc3VsdCwgdW5tdWx0aXBseSwgbV93aW5kb3cp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGdldEltYWdlRGF0YUludGVybmFsKGNv
bnRleHQsIHJlY3QsIHNpemUsIHJlc3VsdCwgdW5tdWx0aXBseSwgbV93aW5kb3cpOwotfQotCi1z
dGF0aWMgYm9vbCBmbHVzaEFuZERyYXcoY29uc3QgSW1hZ2VCdWZmZXJEYXRhKiBvYmplY3QsIEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9v
bCkKLXsKLSAgICBpZiAoIW1ha2VCdWZmZXJDdXJyZW50KG9iamVjdC0+bV93aW5kb3cpKSB7Ci0g
ICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkxvZ0xldmVsV2FybiwKLSAgICAgICAgICAgICJJbWFnZUJ1ZmZlckJsYWNrQmVycnkgZmx1
c2hBbmREcmF3KCkgZXJyb3I6IGNhbm5vdCBtYWtlIGJ1ZmZlciBjdXJyZW50LCBpZ25vcmluZyBj
YWxsLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdXNpbmcgbmFtZXNw
YWNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczsKLQotICAgIC8vIGZsdXNoQW5kRHJh
d0J1ZmZlciBjYWxscyB1cGRhdGVCYWNraW5nIHdoaWNoIGRyYXdzIHRoZSBkaXNwbGF5IGxpc3Qu
IFRoaXMgaXMgb3V0LW9mLWJhbmQgcmVuZGVyaW5nIGFuZCB3ZSBuZWVkCi0gICAgLy8gdG8gcHJv
dGVjdCB0aGUgZW1iZWRkZXIgZnJvbSBzdGF0ZSBtdXRhdGlvbnMuCi0gICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMkNvbnRleHRTdGF0ZTo6QXBwU3RhdGVTYXZlciBhcHBT
dGF0ZVNhdmVyOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0b3Igb2xkT3BlcmF0b3IgPSBjb250ZXh0
LT5jb21wb3NpdGVPcGVyYXRpb24oKTsKLSAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRp
b24ob3ApOwotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5mbHVzaEFuZERyYXdCdWZm
ZXIob2JqZWN0LT5tX2J1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QpOwotICAgIGNvbnRleHQtPnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihvbGRPcGVyYXRvcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogdGhpc0NvbnRleHQs
IEdyYXBoaWNzQ29udGV4dCogb3RoZXJDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgRmxvYXRSZWN0IG5vcm1EZXN0UmVjdCA9IGRlc3RSZWN0Lm5vcm1hbGl6ZWQoKTsK
LSAgICBjb25zdCBGbG9hdFJlY3Qgbm9ybVNyY1JlY3QgPSBzcmNSZWN0Lm5vcm1hbGl6ZWQoKTsK
LQotICAgIGlmIChub3JtU3JjUmVjdC5pc0VtcHR5KCkgfHwgbm9ybURlc3RSZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRyYXcuCi0KLSAgICBpZiAodGhpc0Nv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5pc0VtcHR5KCkgJiYgcGxhdGZvcm1CdWZmZXJIYW5k
bGUobV9idWZmZXIpKSB7Ci0gICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9sZE9wZXJhdG9yID0g
b3RoZXJDb250ZXh0LT5jb21wb3NpdGVPcGVyYXRpb24oKTsKLSAgICAgICAgb3RoZXJDb250ZXh0
LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOwotICAgICAgICBvdGhlckNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5kcmF3QnVmZmVyKG1fYnVmZmVyLCBub3JtRGVzdFJlY3QsIG5vcm1TcmNS
ZWN0KTsKLSAgICAgICAgb3RoZXJDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob2xkT3Bl
cmF0b3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRpc3BhdGNoU3luY0NvbXBvc2l0aW5nTWVz
c2FnZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Y3JlYXRlRnVuY3Rpb25DYWxsTWVzc2FnZSgKLSAg
ICAgICAgICAgICZmbHVzaEFuZERyYXcsIHRoaXMsIG90aGVyQ29udGV4dCwgc3R5bGVDb2xvclNw
YWNlLCBub3JtRGVzdFJlY3QsIG5vcm1TcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKSk7
Ci0gICAgfQotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgZmxvYXQsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgSG9zdFdp
bmRvdyogd2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogbV9zaXplKHNpemUpCi0gICAgLCBt
X2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZSgxKQotewotICAgIHN1
Y2Nlc3MgPSBmYWxzZTsKLQotICAgIC8vIFRoZXJlIGlzIG5vIGV4cGxpY2l0bHkgZGVmaW5lZCBk
ZWZhdWx0IGN0b3IgZm9yIEltYWdlQnVmZmVyRGF0YTo6bV9kYXRhLAotICAgIC8vIG9uIHB1cnBv
c2UgLSBwcmVjYXV0aW9uLiBIZW5jZSB1cG9uIGNyZWF0aW9uIG1fZGF0YSB3aWxsIGNvbnRhaW4g
Z2FyYmFnZQotICAgIC8vIGxlYWRpbmcgdG8gY3Jhc2ggdXAgZHRvci4gVG8gYXZvaWQgdGhlIGNh
c2UsIGluaXRpbGl6ZSBpdCBleHBsaWNpdGx5LgotICAgIG1fZGF0YS5tX2J1ZmZlciA9IDA7Ci0g
ICAgbV9kYXRhLm1fcGxhdGZvcm1MYXllciA9IG51bGxwdHI7Ci0gICAgbV9kYXRhLm1fd2luZG93
ID0gMDsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBhbnl0aGluZyBiaWdnZXIgdGhlbiBkZWZhdWx0VGlsZVNpemUgaXMganVzdCBhIHByb2Js
ZW0gZm9yIHRoZSBIVy4KLSAgICBjb25zdCBpbnQgbWF4VGlsZVNpemUgPSBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OlRpbGVkSW1hZ2U6OmRlZmF1bHRUaWxlU2l6ZSgpOwotICAgIGlm
IChtYXhUaWxlU2l6ZSA8PSBzaXplLndpZHRoKCkgfHwgbWF4VGlsZVNpemUgPD0gc2l6ZS5oZWln
aHQoKSkgewotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nQWx3YXlzKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4sICJSZXF1ZXN0ZWQgSW1hZ2VCdWZmZXIgc2l6ZSBb
JWQgJWRdIGlzIHRvbyBiaWcuIEhXIGFsbG93cyB1cCB0byBbJWQgJWRdLiIsCi0gICAgICAgICAg
ICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIG1heFRpbGVTaXplLCBtYXhUaWxlU2l6ZSk7
Ci0gICAgfQotCi0gICAgbV9kYXRhLm1fYnVmZmVyID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpjcmVhdGVCdWZmZXIobV9zaXplLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OkFsd2F5c0JhY2tlZCk7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpE
cmF3YWJsZSogZHJhd2FibGUgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmxvY2tC
dWZmZXJEcmF3YWJsZShtX2RhdGEubV9idWZmZXIpOwotICAgIGlmICghZHJhd2FibGUpIHsKLSAg
ICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpkZXN0cm95QnVmZmVyKG1fZGF0
YS5tX2J1ZmZlcik7Ci0gICAgICAgIG1fZGF0YS5tX2J1ZmZlciA9IDA7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBtX2RhdGEubV9wbGF0Zm9ybUxheWVyID0gQ2FudmFzTGF5ZXJXZWJL
aXRUaHJlYWQ6OmNyZWF0ZShtX2RhdGEubV9idWZmZXIsIGRyYXdhYmxlLCBtX3NpemUpOwotICAg
IG1fZGF0YS5tX3dpbmRvdyA9IHdpbmRvdzsKLSAgICBtX2NvbnRleHQgPSBhZG9wdFB0cihuZXcg
R3JhcGhpY3NDb250ZXh0KGRyYXdhYmxlKSk7Ci0gICAgbV9jb250ZXh0LT5zY2FsZShGbG9hdFNp
emUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKSk7Ci0gICAgbV9jb250ZXh0
LT5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChyZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkKTsK
LSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCi17
Ci0gICAgbV9jb250ZXh0LmNsZWFyKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB3ZSBjbGVhciB0
aGUgYnVmZmVyIGluIHRoZSBjb21wb3NpdGluZyB0aHJlYWQgYmVmb3JlIHRoZSBidWZmZXIgaXMg
ZGVzdHJveWVkLgotICAgIGlmIChtX2RhdGEubV9wbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgIGRp
c3BhdGNoU3luY0NvbXBvc2l0aW5nTWVzc2FnZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Y3JlYXRl
RnVuY3Rpb25DYWxsTWVzc2FnZSgKLSAgICAgICAgICAgICZDYW52YXNMYXllcldlYktpdFRocmVh
ZDo6Y2xlYXJCdWZmZXIsIG1fZGF0YS5tX3BsYXRmb3JtTGF5ZXIuZ2V0KCkpKTsKLSAgICB9Ci0K
LSAgICBpZiAobV9kYXRhLm1fYnVmZmVyKSB7Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczo6cmVsZWFzZUJ1ZmZlckRyYXdhYmxlKG1fZGF0YS5tX2J1ZmZlcik7Ci0gICAg
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6ZGVzdHJveUJ1ZmZlcihtX2RhdGEu
bV9idWZmZXIpOwotICAgICAgICBtX2RhdGEubV9idWZmZXIgPSAwOwotICAgIH0KLX0KLQotR3Jh
cGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsKLX0KLQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEubV9wbGF0Zm9ybUxheWVyLmdl
dCgpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tp
bmdTdG9yZUNvcHksIFNjYWxlQmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUUgcmVzcGVj
dCBjb3B5QmVoYXZpb3VyIGVudW0uCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBwaXhlbHM7Ci0gICAg
cGl4ZWxzLnJlc2VydmVDYXBhY2l0eShtX3NpemUuYXJlYSgpKTsKLSAgICBtX2RhdGEuZ2V0SW1h
Z2VEYXRhKG1fY29udGV4dC5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9zaXplKSwg
SW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9zaXplKSwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ocGl4ZWxzLmRhdGEoKSksIGZhbHNlIC8qIHVubXVsdGlwbHkgKi8pOwotICAgIHJl
dHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKG5ldyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OlRpbGVkSW1hZ2UobV9zaXplLCBwaXhlbHMuZGF0YSgpLCBmYWxzZSAvKiBkYXRhSXNCR1JB
ICovKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgV1RGX0FMSUdORUQodW5z
aWduZWQgY2hhciosIGltYWdlRGF0YSwgNCkgPSBuZXcgdW5zaWduZWQgY2hhclttX3NpemUud2lk
dGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDRdOwotICAgIG1fZGF0YS5nZXRJbWFnZURhdGEobV9j
b250ZXh0LmdldCgpLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3NpemUpLCBJbnRSZWN0KElu
dFBvaW50KDAsIDApLCBtX3NpemUpLCBpbWFnZURhdGEsIGZhbHNlIC8qIHVubXVsdGlwbHkgKi8p
OwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6VGlsZWRJbWFnZSogbmF0aXZl
SW1hZ2UgPSBuZXcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxlZEltYWdlKG1f
c2l6ZSwgcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihpbWFnZURhdGEpLCBmYWxzZSAv
KiBkYXRhSXNCR1JBICovKTsKLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRkTWFz
a0xheWVyKHJlY3QsIG5hdGl2ZUltYWdlKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQotewotICAg
IG1fZGF0YS5kcmF3KG1fY29udGV4dC5nZXQoKSwgY29udGV4dCwgc3R5bGVDb2xvclNwYWNlLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgUmVm
UHRyPEltYWdlPiBpbWFnZSA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAg
aW1hZ2UtPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZm
ZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYpCi17Ci19
Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSkgY29u
c3QKLXsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHJlc3VsdCA9IFVpbnQ4Q2xhbXBl
ZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkg
KiA0KTsKLSAgICBtX2RhdGEuZ2V0SW1hZ2VEYXRhKG1fY29udGV4dC5nZXQoKSwgcmVjdCwgSW50
UmVjdChJbnRQb2ludCgwLCAwKSwgbV9zaXplKSwgcmVzdWx0LT5kYXRhKCksIHRydWUpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdl
QnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIENv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBy
ZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChyZWN0LndpZHRo
KCkgKiByZWN0LmhlaWdodCgpICogNCk7Ci0gICAgbV9kYXRhLmdldEltYWdlRGF0YShtX2NvbnRl
eHQuZ2V0KCksIHJlY3QsIEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fc2l6ZSksIHJlc3VsdC0+
ZGF0YSgpLCBmYWxzZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
cjo6cHV0Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBz
b3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxlZEltYWdlIGltYWdlKHNvdXJjZVNp
emUsIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oc291cmNlLT5kYXRhKCkpLCBmYWxz
ZSAvKiB0aGlzIGRhdGEgaXMgUkdCQSwgbm90IEJHUkEgKi8sIG11bHRpcGxpZWQgPT0gUHJlbXVs
dGlwbGllZCk7Ci0gICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2F2ZSgpOwotICAg
IGNvbnN0IGRvdWJsZSBtYXRyaXhbXSA9IHsgMS4sIDAuLCAwLiwgMS4sIDAuLCAwLiB9OwotICAg
IG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnNldFRyYW5zZm9ybShtYXRyaXgpOwotICAg
IG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnNldEFscGhhKDEuMCk7Ci0gICAgbV9jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cmVzZXRDbGlwKCk7Ci0gICAgbV9jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczo6Q29tcG9zaXRlQ29weSk7Ci0gICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+YWRkSW1hZ2UoRmxvYXRSZWN0KGRlc3RQb2ludCArIHNvdXJjZVJlY3QubG9jYXRpb24o
KSwgc291cmNlUmVjdC5zaXplKCkpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksICZpbWFnZSk7Ci0g
ICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cmVzdG9yZSgpOwotfQotCi1TdHJpbmcg
SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3Vi
bGUqIHF1YWxpdHksIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKG1fc2l6ZS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIGVudW0gewotICAgICAg
ICBFbmNvZGVKUEVHLAotICAgICAgICBFbmNvZGVQTkcsCi0gICAgfSBlbmNvZGVUeXBlID0gbWlt
ZVR5cGUubG93ZXIoKSA9PSAiaW1hZ2UvcG5nIiA/IEVuY29kZVBORyA6IEVuY29kZUpQRUc7Ci0K
LSAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvdGhlLWNhbnZh
cy1lbGVtZW50Lmh0bWwsCi0gICAgLy8gIkZvciBpbWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBw
b3J0IGFuIGFscGhhIGNoYW5uZWwsIHRoZSBpbWFnZSBtdXN0IGJlIgotICAgIC8vICJjb21wb3Np
dGVkIG9udG8gYSBzb2xpZCBibGFjayBiYWNrZ3JvdW5kIHVzaW5nIHRoZSBzb3VyY2Utb3ZlciBv
cGVyYXRvciwiCi0gICAgLy8gImFuZCB0aGUgcmVzdWx0aW5nIGltYWdlIG11c3QgYmUgdGhlIG9u
ZSB1c2VkIHRvIGNyZWF0ZSB0aGUgZGF0YTogVVJMLiIKLSAgICAvLyBKUEVHIGRvZXNuJ3QgaGF2
ZSBhbHBoYSBjaGFubmVsLCBzbyB3ZSBuZWVkIHByZW11bHRpcGxpZWQgZGF0YS4KLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IGltYWdlRGF0YSA9IGVuY29kZVR5cGUgPT0gRW5jb2RlUE5H
Ci0gICAgICAgID8gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoMCwg
MCksIG1fc2l6ZSkpCi0gICAgICAgIDogZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KEludFBvaW50KDAsIDApLCBtX3NpemUpKTsKLQotICAgIFZlY3RvcjxjaGFyPiBvdXRwdXQ7Ci0g
ICAgY29uc3QgY2hhciogaGVhZGVyOwotICAgIGlmIChlbmNvZGVUeXBlID09IEVuY29kZVBORykg
ewotICAgICAgICBpZiAoIWNvbXByZXNzUkdCQUJpZ0VuZGlhblRvUE5HKGltYWdlRGF0YS0+ZGF0
YSgpLCBtX3NpemUsIG91dHB1dCkpCi0gICAgICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0gICAg
ICAgIGhlYWRlciA9ICJkYXRhOmltYWdlL3BuZztiYXNlNjQsIjsKLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoIWNvbXByZXNzUkdCQUJpZ0VuZGlhblRvSlBFRyhpbWFnZURhdGEtPmRhdGEoKSwg
bV9zaXplLCBvdXRwdXQsIHF1YWxpdHkpKQotICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwot
ICAgICAgICBoZWFkZXIgPSAiZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwiOwotICAgIH0KLQotICAg
IFZlY3RvcjxjaGFyPiBiYXNlNjQ7Ci0gICAgYmFzZTY0RW5jb2RlKG91dHB1dCwgYmFzZTY0KTsK
LQotICAgIG91dHB1dC5jbGVhcigpOwotCi0gICAgVmVjdG9yPGNoYXI+IHVybDsKLSAgICB1cmwu
YXBwZW5kKGhlYWRlciwgc3RybGVuKGhlYWRlcikpOwotICAgIHVybC5hcHBlbmQoYmFzZTY0KTsK
LQotICAgIHJldHVybiBTdHJpbmcodXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvSW1hZ2VCdWZmZXJEYXRhQmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW1hZ2VCdWZmZXJEYXRh
QmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQnVmZmVyRGF0YUJsYWNrQmVycnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhQmxhY2tCZXJyeV9oCi0jZGVmaW5lIElt
YWdlQnVmZmVyRGF0YUJsYWNrQmVycnlfaAotCi0jaW5jbHVkZSAiQ2FudmFzTGF5ZXJXZWJLaXRU
aHJlYWQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotI2luY2x1ZGUgPEJsYWNr
QmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3Vh
cmRlZFBvaW50ZXIuaD4KLSNpbmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSW50
UmVjdDsKLWNsYXNzIEhvc3RXaW5kb3c7Ci0KLWNsYXNzIEltYWdlQnVmZmVyRGF0YSB7Ci1wdWJs
aWM6Ci0gICAgdm9pZCBnZXRJbWFnZURhdGEoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFJlY3QmLCB1bnNpZ25lZCBjaGFyKiByZXN1bHQsIGJvb2wgdW5tdWx0aXBs
eSkgY29uc3Q7Ci0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCogdGhpc0NvbnRleHQsIEdy
YXBoaWNzQ29udGV4dCogb3RoZXJDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21w
b3NpdGVPcGVyYXRvciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpIGNvbnN0OwotCi0gICAgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIG1fYnVmZmVyOwotICAgIFJlZlB0
cjxDYW52YXNMYXllcldlYktpdFRocmVhZD4gbV9wbGF0Zm9ybUxheWVyOwotICAgIEhvc3RXaW5k
b3cqIG1fd2luZG93OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
SW1hZ2VCdWZmZXJEYXRhQmxhY2tCZXJyeV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0ludFBvaW50QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JbnRQb2ludEJs
YWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0ludFBvaW50QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLQot
I2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVByaW1pdGl2ZXMuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1JbnRQb2ludDo6SW50UG9pbnQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkludFBvaW50JiBwKQotICAgIDogbV94KHAueCgpKQotICAgICwgbV95KHAueSgpKQotewotfQot
Ci1JbnRQb2ludDo6b3BlcmF0b3IgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFBvaW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFBvaW50KG1feCwgbV95
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JbnRSZWN0QmxhY2tCZXJyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JbnRSZWN0
QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW50UmVjdEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLQot
I2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVByaW1pdGl2ZXMuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1JbnRSZWN0OjpJbnRSZWN0KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJ
bnRSZWN0JiByZWN0KQotICAgIDogbV9sb2NhdGlvbihyZWN0LngoKSwgcmVjdC55KCkpLCBtX3Np
emUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKQotewotfQotCi1JbnRSZWN0OjpvcGVyYXRv
ciBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW50U2l6ZUJsYWNrQmVycnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW50U2l6ZUJs
YWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0ludFNpemVCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0KLSNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1QcmltaXRpdmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotSW50U2l6ZTo6SW50U2l6ZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50
U2l6ZSYgc2l6ZSkKLSAgICA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKQotICAgICwgbV9oZWlnaHQo
c2l6ZS5oZWlnaHQoKSkKLXsKLX0KLQotSW50U2l6ZTo6b3BlcmF0b3IgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkludFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6SW50U2l6ZShtX3dpZHRoLCBtX2hlaWdodCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRpb24uY3BwCShyZXZpc2lvbiAxNjE1OTApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQW5pbWF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheWVyQW5p
bWF0aW9uLmgiCi0KLSNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2lu
Y2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgotI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRo
bT4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0vLyBG
SVhNRTogU29tZSBmdW5jdGlvbnMgYmVsb3cgYXJlIGNvcGllZCBmcm9tIEFuaW1hdGlvbkJhc2Ug
YW5kIEtleWZyYW1lQW5pbWF0aW9uLgotLy8gV2UgbmVlZCB0byByZWZhY3RvciB0aGVzZSBjb2Rl
IHRvIGluY3JlYXNlIGNvZGUgcmV1c2UuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODIyOTMKLQotLy8gVGhlIGVwc2lsb24gdmFsdWUgd2UgcGFzcyB0byBVbml0
QmV6aWVyOjpzb2x2ZSBnaXZlbiB0aGF0IHRoZSBhbmltYXRpb24gaXMgZ29pbmcgdG8gcnVuIG92
ZXIgfGR1cnwgc2Vjb25kcy4gVGhlIGxvbmdlciB0aGUKLS8vIGFuaW1hdGlvbiwgdGhlIG1vcmUg
cHJlY2lzaW9uIHdlIG5lZWQgaW4gdGhlIHRpbWluZyBmdW5jdGlvbiByZXN1bHQgdG8gYXZvaWQg
dWdseSBkaXNjb250aW51aXRpZXMuCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24o
ZG91YmxlIGR1cmF0aW9uKQotewotICAgIHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJhdGlvbik7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihkb3Vi
bGUgcDF4LCBkb3VibGUgcDF5LCBkb3VibGUgcDJ4LCBkb3VibGUgcDJ5LCBkb3VibGUgdCwgZG91
YmxlIGR1cmF0aW9uKQotewotICAgIC8vIENvbnZlcnQgZnJvbSBpbnB1dCB0aW1lIHRvIHBhcmFt
ZXRyaWMgdmFsdWUgaW4gY3VydmUsIHRoZW4gZnJvbQotICAgIC8vIHRoYXQgdG8gb3V0cHV0IHRp
bWUuCi0gICAgVW5pdEJlemllciBiZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KTsKLSAgICByZXR1
cm4gYmV6aWVyLnNvbHZlKHQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbikpOwotfQotCi1zdGF0aWMg
aW5saW5lIGRvdWJsZSBzb2x2ZVN0ZXBzRnVuY3Rpb24oaW50IG51bVN0ZXBzLCBib29sIHN0ZXBB
dFN0YXJ0LCBkb3VibGUgdCkKLXsKLSAgICBpZiAoc3RlcEF0U3RhcnQpCi0gICAgICAgIHJldHVy
biBtaW4oMS4wLCAoZmxvb3IobnVtU3RlcHMgKiB0KSArIDEpIC8gbnVtU3RlcHMpOwotICAgIHJl
dHVybiBmbG9vcihudW1TdGVwcyAqIHQpIC8gbnVtU3RlcHM7Ci19Ci0KLXN0YXRpYyBjb25zdCBU
aW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShjb25zdCBBbmlt
YXRpb25WYWx1ZSogYW5pbVZhbHVlLCBjb25zdCBMYXllckFuaW1hdGlvbiogYW5pbSkKLXsKLSAg
ICBpZiAoYW5pbVZhbHVlLT50aW1pbmdGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gYW5pbVZh
bHVlLT50aW1pbmdGdW5jdGlvbigpOwotICAgIGlmIChhbmltLT50aW1pbmdGdW5jdGlvbigpKQot
ICAgICAgICByZXR1cm4gYW5pbS0+dGltaW5nRnVuY3Rpb24oKTsKLQotICAgIHJldHVybiBDdWJp
Y0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0VGltaW5nRnVuY3Rpb24oKTsKLX0KLQotc3Rh
dGljIGRvdWJsZSBwcm9ncmVzcyhkb3VibGUgZWxhcHNlZFRpbWUsIGNvbnN0IExheWVyQW5pbWF0
aW9uKiBsYXllckFuaW1hdGlvbiwgZG91YmxlIHNjYWxlLCBkb3VibGUgb2Zmc2V0LCBjb25zdCBU
aW1pbmdGdW5jdGlvbiogdGYsIGJvb2wmIGFuaW1hdGlvbkZpbmlzaGVkKQotewotICAgIGRvdWJs
ZSBkdXIgPSBsYXllckFuaW1hdGlvbi0+ZHVyYXRpb24oKTsKLSAgICBpZiAobGF5ZXJBbmltYXRp
b24tPml0ZXJhdGlvbkNvdW50KCkgPiAwKQotICAgICAgICBkdXIgKj0gbGF5ZXJBbmltYXRpb24t
Pml0ZXJhdGlvbkNvdW50KCk7Ci0KLSAgICBpZiAoIWxheWVyQW5pbWF0aW9uLT5kdXJhdGlvbigp
KQotICAgICAgICByZXR1cm4gMS4wOwotICAgIGlmIChsYXllckFuaW1hdGlvbi0+aXRlcmF0aW9u
Q291bnQoKSA+IDAgJiYgZWxhcHNlZFRpbWUgPj0gZHVyKSB7Ci0gICAgICAgIGFuaW1hdGlvbkZp
bmlzaGVkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIChsYXllckFuaW1hdGlvbi0+aXRlcmF0aW9u
Q291bnQoKSAlIDIpID8gMS4wIDogMC4wOwotICAgIH0KLQotICAgIC8vIENvbXB1dGUgdGhlIGZy
YWN0aW9uYWwgdGltZSwgdGFraW5nIGludG8gYWNjb3VudCBkaXJlY3Rpb24uCi0gICAgLy8gVGhl
cmUgaXMgbm8gbmVlZCB0byB3b3JyeSBhYm91dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUgdGhhdCB3
ZSB3b3VsZCBoYXZlCi0gICAgLy8gc2hvcnQgY2lyY3VpdGVkIGFib3ZlIGlmIHdlIHdlcmUgZG9u
ZS4KLSAgICBkb3VibGUgZnJhY3Rpb25hbFRpbWUgPSBlbGFwc2VkVGltZSAvIGxheWVyQW5pbWF0
aW9uLT5kdXJhdGlvbigpOwotICAgIGludCBpbnRlZ3JhbFRpbWUgPSBzdGF0aWNfY2FzdDxpbnQ+
KGZyYWN0aW9uYWxUaW1lKTsKLSAgICBmcmFjdGlvbmFsVGltZSAtPSBpbnRlZ3JhbFRpbWU7Ci0K
LSAgICBpZiAoKGxheWVyQW5pbWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1h
dGlvbkRpcmVjdGlvbkFsdGVybmF0ZSkgJiYgKGludGVncmFsVGltZSAmIDEpKQotICAgICAgICBm
cmFjdGlvbmFsVGltZSA9IDEgLSBmcmFjdGlvbmFsVGltZTsKLQotICAgIGlmIChzY2FsZSAhPSAx
IHx8IG9mZnNldCkKLSAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAoZnJhY3Rpb25hbFRpbWUgLSBv
ZmZzZXQpICogc2NhbGU7Ci0KLSAgICBpZiAoIXRmKQotICAgICAgICB0ZiA9IGxheWVyQW5pbWF0
aW9uLT50aW1pbmdGdW5jdGlvbigpOwotCi0gICAgaWYgKHRmLT5pc0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb24oKSkgewotICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBj
dGYgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4odGYpOwot
ICAgICAgICByZXR1cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGN0Zi0+eDEoKSwgY3RmLT55
MSgpLCBjdGYtPngyKCksIGN0Zi0+eTIoKSwgZnJhY3Rpb25hbFRpbWUsIGxheWVyQW5pbWF0aW9u
LT5kdXJhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBpZiAodGYtPmlzU3RlcHNUaW1pbmdGdW5jdGlv
bigpKSB7Ci0gICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZiA9IHN0YXRpY19j
YXN0PGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qPih0Zik7Ci0gICAgICAgIHJldHVybiBzb2x2
ZVN0ZXBzRnVuY3Rpb24oc3RmLT5udW1iZXJPZlN0ZXBzKCksIHN0Zi0+c3RlcEF0U3RhcnQoKSwg
ZnJhY3Rpb25hbFRpbWUpOwotICAgIH0KLQotICAgIHJldHVybiBmcmFjdGlvbmFsVGltZTsKLX0K
LQotc3RhdGljIHZvaWQgZmV0Y2hJbnRlcnZhbEVuZHBvaW50cyhkb3VibGUgZWxhcHNlZFRpbWUs
IGNvbnN0IExheWVyQW5pbWF0aW9uKiBsYXllckFuaW1hdGlvbiwgY29uc3QgQW5pbWF0aW9uVmFs
dWUqJiBmcm9tVmFsdWUsIGNvbnN0IEFuaW1hdGlvblZhbHVlKiYgdG9WYWx1ZSwgZG91YmxlJiBw
cm9nLCBib29sJiBhbmltYXRpb25GaW5pc2hlZCkKLXsKLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBr
ZXkuCi0gICAgaWYgKGxheWVyQW5pbWF0aW9uLT5kdXJhdGlvbigpICYmIGxheWVyQW5pbWF0aW9u
LT5pdGVyYXRpb25Db3VudCgpICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSkK
LSAgICAgICAgZWxhcHNlZFRpbWUgPSBtaW4oZWxhcHNlZFRpbWUsIGxheWVyQW5pbWF0aW9uLT5k
dXJhdGlvbigpICogbGF5ZXJBbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkpOwotCi0gICAgZG91
YmxlIGZyYWN0aW9uYWxUaW1lID0gbGF5ZXJBbmltYXRpb24tPmR1cmF0aW9uKCkgPyAoZWxhcHNl
ZFRpbWUgLyBsYXllckFuaW1hdGlvbi0+ZHVyYXRpb24oKSkgOiAxOwotCi0gICAgLy8gRklYTUU6
IHN0YXJ0VGltZSBjYW4gYmUgYmVmb3JlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiAiZnJhbWUiIHRp
bWUuIFRoaXMgaXMgdG8gc3luYyB3aXRoIHRoZSBmcmFtZSB0aW1lCi0gICAgLy8gY29uY2VwdCBp
biBBbmltYXRpb25UaW1lQ29udHJvbGxlci4gU28gd2UgbmVlZCB0byBzb21laG93IHN5bmMgdGhl
IHR3by4gVW50aWwgdGhlbiwgdGhlIHBvc3NpYmxlCi0gICAgLy8gZXJyb3IgaXMgc21hbGwgYW5k
IHdpbGwgcHJvYmFibHkgbm90IGJlIG5vdGljZWFibGUuIFVudGlsIHdlIGZpeCB0aGlzLCByZW1v
dmUgdGhlIGFzc2VydC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTIwMzcKLSAgICAvLyBBU1NFUlQoZnJhY3Rpb25hbFRpbWUgPj0gMCk7Ci0gICAgaWYg
KGZyYWN0aW9uYWxUaW1lIDwgMCkKLSAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAwOwotCi0gICAg
Ly8gRklYTUU6IHNoYXJlIHRoaXMgY29kZSB3aXRoIEFuaW1hdGlvbkJhc2U6OnByb2dyZXNzKCku
Ci0gICAgaW50IGl0ZXJhdGlvbiA9IHN0YXRpY19jYXN0PGludD4oZnJhY3Rpb25hbFRpbWUpOwot
ICAgIGlmIChsYXllckFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0
ZXJhdGlvbkNvdW50SW5maW5pdGUpCi0gICAgICAgIGl0ZXJhdGlvbiA9IG1pbihpdGVyYXRpb24s
IGxheWVyQW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpIC0gMSk7Ci0KLSAgICBmcmFjdGlvbmFs
VGltZSAtPSBpdGVyYXRpb247Ci0KLSAgICBib29sIHJldmVyc2luZyA9IChsYXllckFuaW1hdGlv
bi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUp
ICYmIChpdGVyYXRpb24gJiAxKTsKLSAgICBpZiAocmV2ZXJzaW5nKQotICAgICAgICBmcmFjdGlv
bmFsVGltZSA9IDEgLSBmcmFjdGlvbmFsVGltZTsKLQotICAgIHNpemVfdCBudW1LZXlmcmFtZXMg
PSBsYXllckFuaW1hdGlvbi0+dmFsdWVDb3VudCgpOwotICAgIGlmICghbnVtS2V5ZnJhbWVzKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIWxheWVyQW5pbWF0aW9uLT52YWx1ZUF0KDAp
LT5rZXlUaW1lKCkpOwotICAgIEFTU0VSVChsYXllckFuaW1hdGlvbi0+dmFsdWVBdChsYXllckFu
aW1hdGlvbi0+dmFsdWVDb3VudCgpIC0gMSktPmtleVRpbWUoKSA9PSAxKTsKLQotICAgIGludCBw
cmV2SW5kZXggPSAtMTsKLSAgICBpbnQgbmV4dEluZGV4ID0gLTE7Ci0KLSAgICAvLyBGSVhNRTog
d2l0aCBhIGxvdCBvZiBrZXlzLCB0aGlzIGxpbmVhciBzZWFyY2ggd2lsbCBiZSBzbG93LiBXZSBj
b3VsZCBiaW5hcnkgc2VhcmNoLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtS2V5ZnJh
bWVzOyArK2kpIHsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGN1cnJLZXlmcmFtZSA9
IGxheWVyQW5pbWF0aW9uLT52YWx1ZUF0KGkpOwotCi0gICAgICAgIGlmIChmcmFjdGlvbmFsVGlt
ZSA8IGN1cnJLZXlmcmFtZS0+a2V5VGltZSgpKSB7Ci0gICAgICAgICAgICBuZXh0SW5kZXggPSBp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBwcmV2SW5kZXggPSBp
OwotICAgIH0KLQotICAgIGRvdWJsZSBzY2FsZSA9IDE7Ci0gICAgZG91YmxlIG9mZnNldCA9IDA7
Ci0KLSAgICBpZiAocHJldkluZGV4ID09IC0xKQotICAgICAgICBwcmV2SW5kZXggPSAwOwotCi0g
ICAgaWYgKG5leHRJbmRleCA9PSAtMSkKLSAgICAgICAgbmV4dEluZGV4ID0gbGF5ZXJBbmltYXRp
b24tPnZhbHVlQ291bnQoKSAtIDE7Ci0KLSAgICBjb25zdCBBbmltYXRpb25WYWx1ZSogcHJldktl
eWZyYW1lID0gbGF5ZXJBbmltYXRpb24tPnZhbHVlQXQocHJldkluZGV4KTsKLSAgICBjb25zdCBB
bmltYXRpb25WYWx1ZSogbmV4dEtleWZyYW1lID0gbGF5ZXJBbmltYXRpb24tPnZhbHVlQXQobmV4
dEluZGV4KTsKLQotICAgIGZyb21WYWx1ZSA9IHByZXZLZXlmcmFtZTsKLSAgICB0b1ZhbHVlID0g
bmV4dEtleWZyYW1lOwotCi0gICAgb2Zmc2V0ID0gcHJldktleWZyYW1lLT5rZXlUaW1lKCk7Ci0g
ICAgc2NhbGUgPSAxLjAgLyAobmV4dEtleWZyYW1lLT5rZXlUaW1lKCkgLSBwcmV2S2V5ZnJhbWUt
PmtleVRpbWUoKSk7Ci0KLSAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24g
PSB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKHByZXZLZXlmcmFtZSwgbGF5ZXJBbmlt
YXRpb24pOwotCi0gICAgcHJvZyA9IHByb2dyZXNzKGVsYXBzZWRUaW1lLCBsYXllckFuaW1hdGlv
biwgc2NhbGUsIG9mZnNldCwgdGltaW5nRnVuY3Rpb24sIGFuaW1hdGlvbkZpbmlzaGVkKTsKLX0K
LQotdm9pZCBMYXllckFuaW1hdGlvbjo6YXBwbHkoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5
ZXIsIGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJv
bSA9IDA7Ci0gICAgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvID0gMDsKLSAgICBkb3VibGUgcHJv
Z3Jlc3MgPSAwLjA7Ci0gICAgYm9vbCBhbmltYXRpb25GaW5pc2hlZCA9IGZhbHNlOwotCi0gICAg
ZmV0Y2hJbnRlcnZhbEVuZHBvaW50cyhlbGFwc2VkVGltZSwgdGhpcywgZnJvbSwgdG8sIHByb2dy
ZXNzLCBhbmltYXRpb25GaW5pc2hlZCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5KCkpIHsKLSAg
ICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06Ci0gICAgICAgIGxheWVyLT5z
ZXRUcmFuc2Zvcm0oYmxlbmRUcmFuc2Zvcm0oc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5p
bWF0aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3Jt
QW5pbWF0aW9uVmFsdWUqPih0byktPnZhbHVlKCksIHByb2dyZXNzKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgIGxheWVyLT5zZXRP
cGFjaXR5KGJsZW5kT3BhY2l0eShzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVl
Kj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUq
Pih0byktPnZhbHVlKCksIHByb2dyZXNzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQW5p
bWF0ZWRQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlX
ZWJraXRGaWx0ZXI6Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5SW52YWxpZDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fZmlu
aXNoZWQgPSBhbmltYXRpb25GaW5pc2hlZDsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggTGF5
ZXJBbmltYXRpb246OmJsZW5kVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZy
b20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
Ci17Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKLQotICAgIGlmIChtX3RyYW5zZm9ybUZ1
bmN0aW9uTGlzdFZhbGlkKSB7Ci0gICAgICAgIC8vIEEgdHJpY2sgdG8gYXZvaWQgdG91Y2hpbmcg
dGhlIHJlZmNvdW50IG9mIHNoYXJlZCBUcmFuc2Zvcm1PcGVyYXRpb25zIG9uIHRoZSB3cm9uZyB0
aHJlYWQuCi0gICAgICAgIC8vIFNpbmNlIFRyYW5zZm9yT3BlcmF0aW9uIGlzIG5vdCBUaHJlYWRT
YWZlUmVmQ291bnRlZCwgd2UgYXJlIG9ubHkgYWxsb3dlZCB0byB0b3VjaCB0aGUgcmVmCi0gICAg
ICAgIC8vIGNvdW50IG9mIHNoYXJlZCBvcGVyYXRpb25zIHdoZW4gdGhlIFdlYktpdCB0aHJlYWQg
YW5kIGNvbXBvc2l0aW5nIHRocmVhZCBhcmUgaW4gc3luYy4KLSAgICAgICAgVmVjdG9yPFRyYW5z
Zm9ybU9wZXJhdGlvbio+IHJlc3VsdDsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxUcmFuc2Zvcm1P
cGVyYXRpb24+ID4gb3duZWQ7Ci0KLSAgICAgICAgdW5zaWduZWQgZnJvbVNpemUgPSBmcm9tLT5v
cGVyYXRpb25zKCkuc2l6ZSgpOwotICAgICAgICB1bnNpZ25lZCB0b1NpemUgPSB0by0+b3BlcmF0
aW9ucygpLnNpemUoKTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1heChmcm9tU2l6ZSwgdG9T
aXplKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg
ICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSAoaSA8IGZyb21TaXplKSA/IGZy
b20tPm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1PcGVy
YXRpb24qIHRvT3AgPSAoaSA8IHRvU2l6ZSkgPyB0by0+b3BlcmF0aW9ucygpW2ldLmdldCgpIDog
MDsKLSAgICAgICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRv
T3AgPyB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNzKSA6IChmcm9tT3AgPyBmcm9tT3AtPmJs
ZW5kKDAsIHByb2dyZXNzLCB0cnVlKSA6IFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPigw
KSk7Ci0gICAgICAgICAgICBpZiAoYmxlbmRlZE9wKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChibGVuZGVkT3AuZ2V0KCkpOwotICAgICAgICAgICAgICAgIG93bmVkLmFwcGVuZChi
bGVuZGVkT3ApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8
VHJhbnNmb3JtT3BlcmF0aW9uPiBpZGVudGl0eU9wID0gSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIG93bmVkLmFwcGVuZChpZGVudGl0eU9wKTsK
LSAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPiAwLjUpCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQodG9PcCA/IHRvT3AgOiBpZGVudGl0eU9wLmdldCgpKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZnJvbU9wID8g
ZnJvbU9wIDogaWRlbnRpdHlPcC5nZXQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBJbnRTaXplIHN6ID0gYm94U2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQotICAgICAgICAgICAgcmVzdWx0W2ldLT5hcHBs
eSh0LCBzeik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQ29udmVydCB0aGUgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBpbnRvIG1hdHJpY2VzLgotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBm
cm9tVDsKLSAgICAgICAgZnJvbS0+YXBwbHkoYm94U2l6ZSgpLCBmcm9tVCk7Ci0gICAgICAgIHRv
LT5hcHBseShib3hTaXplKCksIHQpOwotCi0gICAgICAgIHQuYmxlbmQoZnJvbVQsIHByb2dyZXNz
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0KLQotZmxvYXQgTGF5ZXJBbmltYXRpb246OmJs
ZW5kT3BhY2l0eShmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdAot
ewotICAgIGZsb2F0IG9wYWNpdHkgPSBmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzczsKLQot
ICAgIHJldHVybiBtYXgoMC4wZiwgbWluKG9wYWNpdHksIDEuMGYpKTsKLX0KLQotdm9pZCBMYXll
ckFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2Zvcm1MaXN0cygpCi17Ci0gICAgbV90cmFuc2Zvcm1G
dW5jdGlvbkxpc3RWYWxpZCA9IGZhbHNlOwotCi0gICAgaWYgKG1fdmFsdWVzLnNpemUoKSA8IDIg
fHwgcHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBFbXB0eSB0cmFuc2Zvcm1zIG1hdGNoIGFueXRoaW5nLCBzbyBm
aW5kIHRoZSBmaXJzdCBub24tZW1wdHkgZW50cnkgYXMgdGhlIHJlZmVyZW5jZS4KLSAgICBzaXpl
X3QgbnVtS2V5ZnJhbWVzID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgIHNpemVfdCBmaXJzdE5vbkVt
cHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1lczsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAgICAgY29uc3QgVHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUqIGN1cnJlbnRLZXlmcmFtZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlKj4obV92YWx1ZXMuYXQoaSkpOwotICAgICAgICBpZiAoY3Vy
cmVudEtleWZyYW1lLT52YWx1ZSgpLT5zaXplKCkpIHsKLSAgICAgICAgICAgIGZpcnN0Tm9uRW1w
dHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4
ID09IG51bUtleWZyYW1lcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyogZmlyc3RWYWwgPSBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRp
b25WYWx1ZSo+KG1fdmFsdWVzLmF0KGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4
KSktPnZhbHVlKCk7Ci0KLSAgICAvLyBTZWUgaWYgdGhlIGtleWZyYW1lcyBhcmUgdmFsaWQuCi0g
ICAgZm9yIChzaXplX3QgaSA9IGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ICsg
MTsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKiBjdXJyZW50S2V5ZnJhbWUgPSBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1B
bmltYXRpb25WYWx1ZSo+KG1fdmFsdWVzLmF0KGkpKTsKLSAgICAgICAgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyogdmFsID0gY3VycmVudEtleWZyYW1lLT52YWx1ZSgpOwotCi0gICAgICAgIC8v
IEEgbnVsbCB0cmFuc2Zvcm0gbWF0Y2hlcyBhbnl0aGluZy4KLSAgICAgICAgaWYgKHZhbC0+b3Bl
cmF0aW9ucygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8v
IElmIHRoZSBzaXplcyBvZiB0aGUgZnVuY3Rpb24gbGlzdHMgZG9uJ3QgbWF0Y2gsIHRoZSBsaXN0
cyBkb24ndCBtYXRjaC4KLSAgICAgICAgaWYgKGZpcnN0VmFsLT5vcGVyYXRpb25zKCkuc2l6ZSgp
ICE9IHZhbC0+b3BlcmF0aW9ucygpLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAvLyBJZiB0aGUgdHlwZXMgb2YgZWFjaCBmdW5jdGlvbiBhcmUgbm90IHRoZSBzYW1lLCB0
aGUgbGlzdHMgZG9uJ3QgbWF0Y2guCi0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgZmly
c3RWYWwtPm9wZXJhdGlvbnMoKS5zaXplKCk7ICsraikgewotICAgICAgICAgICAgaWYgKCFmaXJz
dFZhbC0+b3BlcmF0aW9ucygpW2pdLT5pc1NhbWVUeXBlKCp2YWwtPm9wZXJhdGlvbnMoKVtqXSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gS2V5
ZnJhbWVzIGFyZSB2YWxpZC4KLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkID0gdHJ1
ZTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9MYXllckFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRpb24uaAkocmV2aXNpb24gMTYxNTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckFu
aW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqCi0gKi8KLQotI2lmbmRlZiBMYXllckFuaW1hdGlvbl9oCi0jZGVmaW5lIExheWVyQW5p
bWF0aW9uX2gKLQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotI2RlZmluZSBERUJV
R19MQVlFUl9BTklNQVRJT04gMAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFuaW1h
dGlvbjsKLWNsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ7Ci1jbGFzcyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDsKLQotY2xhc3MgTGF5ZXJBbmltYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8TGF5ZXJBbmltYXRpb24+IHsKLXB1YmxpYzoKLSAgICAvLyBUaGUgc2V0U3RhcnRUaW1l
IG1ldGhvZCBpcyBub3QgdGhyZWFkc2FmZSBhbmQgbXVzdCBvbmx5IGJlIGNhbGxlZCBvbiBhIG5l
d2x5Ci0gICAgLy8gY3JlYXRlZCBMYXllckFuaW1hdGlvbiBiZWZvcmUgc2VuZGluZyBpdCBvZmYg
dG8gdGhlIGNvbXBvc2l0aW5nIHRocmVhZC4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllckFu
aW1hdGlvbj4gY3JlYXRlKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IElu
dFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBMYXllckFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbmFtZSwgdGlt
ZU9mZnNldCkpOwotICAgIH0KLQotICAgIFBhc3NSZWZQdHI8TGF5ZXJBbmltYXRpb24+IGNsb25l
KGRvdWJsZSB0aW1lT2Zmc2V0KQotICAgIHsKLSAgICAgICAgTGF5ZXJBbmltYXRpb24qIGFuaW1h
dGlvbiA9IG5ldyBMYXllckFuaW1hdGlvbigqdGhpcyk7Ci0gICAgICAgIC8vIFRoZSBjbG9uZWQg
YW5pbWF0aW9uIHNob3VsZCBnZXQgYSBkaWZmZXJlbnQgdGltZU9mZnNldCBpZiBpdCdzIHBhdXNl
ZC4KLSAgICAgICAgYW5pbWF0aW9uLT5tX3RpbWVPZmZzZXQgPSB0aW1lT2Zmc2V0OwotCi0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihhbmltYXRpb24pOwotICAgIH0KLQotICAgIH5MYXllckFuaW1h
dGlvbigpCi0gICAgewotICAgIH0KLQotICAgIFN0cmluZyBuYW1lKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGlmIChtX25hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcobV9uYW1lKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldFN0YXJ0VGltZShkb3VibGUgdGltZSkgeyBtX3N0YXJ0VGltZSA9IHRpbWU7IH0KLQotICAg
IC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhyZWFkIHNhZmUgKGltbXV0YWJsZSBzdGF0ZSkuCi0g
ICAgc3RhdGljIGludCBpZEZyb21BbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24p
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50PihhbmltYXRpb24pOyB9Ci0gICAgYm9vbCBp
c0VxdWFsVG9BbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIGNvbnN0IHsgcmV0
dXJuIGlkRnJvbUFuaW1hdGlvbihhbmltYXRpb24pID09IGlkKCk7IH0KLSAgICBpbnQgaWQoKSBj
b25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZXMucHJvcGVydHkoKTsgfQotICAgIEludFNpemUgYm94U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2l6ZTsgfQotICAgIGRvdWJsZSB0aW1lT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV90aW1lT2Zmc2V0OyB9Ci0gICAgZG91YmxlIHN0YXJ0VGltZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9Ci0gICAgc2l6ZV90IHZhbHVlQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiog
dGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0aW9uLmdldCgpOyB9
Ci0gICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAg
IGludCBpdGVyYXRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0aW9uQ291bnQ7IH0K
LSAgICBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX2RpcmVjdGlvbjsgfQotICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB2YWx1ZUF0KHNp
emVfdCBpKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5hdChpKTsgfQotICAgIGJvb2wgZmluaXNo
ZWQoKSBjb25zdCB7IHJldHVybiBtX2ZpbmlzaGVkOyB9Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBibGVuZFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmcm9tLCBjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdDsKLSAgICBmbG9h
dCBibGVuZE9wYWNpdHkoZmxvYXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Q7Ci0gICAgdm9pZCBhcHBseShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIGVsYXBz
ZWRUaW1lKTsKLQotcHJpdmF0ZToKLSAgICBMYXllckFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24q
IGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgdGltZU9mZnNldCkKLSAgICAg
ICAgOiBtX2lkKHJlaW50ZXJwcmV0X2Nhc3Q8aW50PihhbmltYXRpb24pKQotICAgICAgICAsIG1f
dmFsdWVzKHZhbHVlcykKLSAgICAgICAgLCBtX2JveFNpemUoYm94U2l6ZSkKLSAgICAgICAgLCBt
X3RpbWVPZmZzZXQodGltZU9mZnNldCkKLSAgICAgICAgLCBtX3N0YXJ0VGltZSgwKQotICAgICAg
ICAsIG1fdGltaW5nRnVuY3Rpb24oMCkKLSAgICAgICAgLCBtX2R1cmF0aW9uKGFuaW1hdGlvbi0+
ZHVyYXRpb24oKSkKLSAgICAgICAgLCBtX2l0ZXJhdGlvbkNvdW50KGFuaW1hdGlvbi0+aXRlcmF0
aW9uQ291bnQoKSkKLSAgICAgICAgLCBtX2RpcmVjdGlvbihhbmltYXRpb24tPmRpcmVjdGlvbigp
KQotICAgICAgICAsIG1fZmluaXNoZWQoZmFsc2UpCi0gICAgewotICAgICAgICBpZiAoYW5pbWF0
aW9uLT5pc1RpbWluZ0Z1bmN0aW9uU2V0KCkpCi0gICAgICAgICAgICBtX3RpbWluZ0Z1bmN0aW9u
ID0gYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpOwotCi0gICAgICAgIHZhbGlkYXRlVHJhbnNm
b3JtTGlzdHMoKTsKLSAgICAgICAgc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBMYXllckFu
aW1hdGlvbihjb25zdCBMYXllckFuaW1hdGlvbiYgb3RoZXIpCi0gICAgICAgIDogIFRocmVhZFNh
ZmVSZWZDb3VudGVkPExheWVyQW5pbWF0aW9uPigpCi0gICAgICAgICwgbV9pZChvdGhlci5tX2lk
KQotICAgICAgICAsIG1fdmFsdWVzKG90aGVyLm1fdmFsdWVzKQotICAgICAgICAsIG1fYm94U2l6
ZShvdGhlci5tX2JveFNpemUpCi0gICAgICAgICwgbV90aW1lT2Zmc2V0KG90aGVyLm1fdGltZU9m
ZnNldCkKLSAgICAgICAgLCBtX3N0YXJ0VGltZShvdGhlci5tX3N0YXJ0VGltZSkKLSAgICAgICAg
LCBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkKG90aGVyLm1fdHJhbnNmb3JtRnVuY3Rpb25M
aXN0VmFsaWQpCi0gICAgICAgICwgbV90aW1pbmdGdW5jdGlvbihvdGhlci5tX3RpbWluZ0Z1bmN0
aW9uKQotICAgICAgICAsIG1fZHVyYXRpb24ob3RoZXIubV9kdXJhdGlvbikKLSAgICAgICAgLCBt
X2l0ZXJhdGlvbkNvdW50KG90aGVyLm1faXRlcmF0aW9uQ291bnQpCi0gICAgICAgICwgbV9kaXJl
Y3Rpb24ob3RoZXIubV9kaXJlY3Rpb24pCi0gICAgICAgICwgbV9maW5pc2hlZChmYWxzZSkKLSAg
ICB7Ci0gICAgICAgIHNldE5hbWUob3RoZXIubmFtZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHZh
bGlkYXRlVHJhbnNmb3JtTGlzdHMoKTsKLQotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcm
IG5hbWUpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwot
ICAgICAgICBtX25hbWUucmVzaXplKGxlbmd0aCk7Ci0gICAgICAgIGlmIChsZW5ndGgpCi0gICAg
ICAgICAgICBtZW1jcHkobV9uYW1lLmRhdGEoKSwgbmFtZS5jaGFyYWN0ZXJzKCksIHNpemVvZihV
Q2hhcikgKiBsZW5ndGgpOwotICAgIH0KLQotICAgIGludCBtX2lkOwotCi0gICAgLy8gTk9URTog
RG9uJ3QgZXhwb3NlIHRoZSBLZXlmcmFtZVZhbHVlTGlzdCBkaXJlY3RseSwgc2luY2UgaXRzIGNv
cHkKLSAgICAvLyBjb25zdHJ1Y3RvciBtdXRhdGVzIHJlZmNvdW50cyBhbmQgdGh1cyBpcyBub3Qg
dGhyZWFkIHNhZmUuCi0gICAgS2V5ZnJhbWVWYWx1ZUxpc3QgbV92YWx1ZXM7Ci0gICAgSW50U2l6
ZSBtX2JveFNpemU7Ci0gICAgVmVjdG9yPFVDaGFyPiBtX25hbWU7IC8vIE11c3Qgbm90IHVzZSBT
dHJpbmcgbWVtYmVyIHdoZW4gZGVyaXZpbmcgZnJvbSBUaHJlYWRTYWZlUmVmQ291bnRlZAotICAg
IGRvdWJsZSBtX3RpbWVPZmZzZXQ7Ci0gICAgZG91YmxlIG1fc3RhcnRUaW1lOwotICAgIGJvb2wg
bV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZDsKLQotICAgIFJlZlB0cjxUaW1pbmdGdW5jdGlv
bj4gbV90aW1pbmdGdW5jdGlvbjsKLSAgICBkb3VibGUgbV9kdXJhdGlvbjsKLSAgICBpbnQgbV9p
dGVyYXRpb25Db3VudDsKLSAgICBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBtX2RpcmVj
dGlvbjsKLSAgICBib29sIG1fZmluaXNoZWQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMYXllckFu
aW1hdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5j
cHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIsIDIw
MTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
Ci0jaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgotCi0jaW5jbHVkZSAiTGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudC5oIgotI2luY2x1ZGUgIkxheWVyTWVzc2FnZS5oIgotI2lu
Y2x1ZGUgIkxheWVyUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiTGF5ZXJVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJMYXllcldlYktpdFRocmVh
ZC5oIgotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1
ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaCIKLSNlbmRpZgotI2luY2x1ZGUgIlBs
dWdpblZpZXcuaCIKLSNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKLSNpbmNsdWRlICJUZXh0dXJl
Q2FjaGVDb21wb3NpdGluZ1RocmVhZC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3Jt
R0xFUzJDb250ZXh0U3RhdGUuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGlj
cy5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0KLXVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xF
UzJQcm9ncmFtOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgTGF5ZXJPdmVycmlkZTo6
cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hbmlt
YXRpb25zW2ldLT5uYW1lKCkgPT0gbmFtZSkgewotICAgICAgICAgICAgbV9hbmltYXRpb25zLnJl
bW92ZShpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotUGFz
c1JlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpj
cmVhdGUoTGF5ZXJUeXBlIHR5cGUsIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQqIGNsaWVu
dCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyQ29tcG9zaXRpbmdUaHJlYWQodHlw
ZSwgY2xpZW50KSk7Ci19Ci0KLUxheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OkxheWVyQ29tcG9zaXRp
bmdUaHJlYWQoTGF5ZXJUeXBlIHR5cGUsIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQqIGNs
aWVudCkKLSAgICA6IExheWVyRGF0YSh0eXBlKQotICAgICwgbV9sYXllclJlbmRlcmVyKDApCi0g
ICAgLCBtX3N1cGVybGF5ZXIoMCkKLSAgICAsIG1fY2VudGVyVygwKQotICAgICwgbV9wbHVnaW5C
dWZmZXIoMCkKLSAgICAsIG1fZHJhd09wYWNpdHkoMCkKLSAgICAsIG1fdmlzaWJsZShmYWxzZSkK
LSAgICAsIG1fY29tbWl0U2NoZWR1bGVkKGZhbHNlKQotICAgICwgbV9jbGllbnQoY2xpZW50KQot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICAsIG1fZmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQo
ZmFsc2UpCi0jZW5kaWYKLXsKLX0KLQotTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6fkxheWVyQ29t
cG9zaXRpbmdUaHJlYWQoKQotewotICAgIEFTU0VSVChpc0NvbXBvc2l0aW5nVGhyZWFkKCkpOwot
Ci0gICAgQVNTRVJUKCFzdXBlcmxheWVyKCkpOwotCi0gICAgLy8gUmVtb3ZlIHRoZSBzdXBlcmxh
eWVyIHJlZmVyZW5jZSBmcm9tIGFsbCBzdWJsYXllcnMuCi0gICAgd2hpbGUgKG1fc3VibGF5ZXJz
LnNpemUoKSkKLSAgICAgICAgbV9zdWJsYXllcnNbMF0tPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7
Ci0KLSAgICAvLyBEZWxldGUgYWxsIGFsbG9jYXRlZCB0ZXh0dXJlcwotICAgIGRlbGV0ZVRleHR1
cmVzKCk7Ci0KLSAgICAvLyBXZSBqdXN0IGRlbGV0ZWQgYWxsIG91ciB0ZXh0dXJlcywgbm8gbmVl
ZCBmb3IgdGhlCi0gICAgLy8gbGF5ZXIgcmVuZGVyZXIgdG8gdHJhY2sgdXMgYW55bW9yZQotICAg
IGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVtb3ZlTGF5
ZXIodGhpcyk7Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5sYXllckNv
bXBvc2l0aW5nVGhyZWFkRGVzdHJveWVkKHRoaXMpOwotfQotCi12b2lkIExheWVyQ29tcG9zaXRp
bmdUaHJlYWQ6OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlciogcmVuZGVyZXIpCi17Ci0g
ICAgLy8gSXQncyBub3QgZXhwZWN0ZWQgdGhhdCBsYXllcnMgd2lsbCBldmVyIHN3aXRjaCByZW5k
ZXJlcnMuCi0gICAgQVNTRVJUKCFyZW5kZXJlciB8fCAhbV9sYXllclJlbmRlcmVyIHx8IHJlbmRl
cmVyID09IG1fbGF5ZXJSZW5kZXJlcik7Ci0KLSAgICBtX2xheWVyUmVuZGVyZXIgPSByZW5kZXJl
cjsKLSAgICBpZiAobV9sYXllclJlbmRlcmVyKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmFk
ZExheWVyKHRoaXMpOwotfQotCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRlbGV0ZVRl
eHR1cmVzKCkKLXsKLSAgICByZWxlYXNlVGV4dHVyZVJlc291cmNlcygpOwotCi0gICAgaWYgKG1f
Y2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGVsZXRlVGV4dHVyZXModGhpcyk7Ci19Ci0KLXZv
aWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6c2V0RHJhd1RyYW5zZm9ybShkb3VibGUgc2NhbGUs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBwcm9qZWN0aW9uTWF0cml4KQotewotICAgIG1fZHJhd1RyYW5zZm9ybSA9IHByb2pl
Y3Rpb25NYXRyaXggKiBtYXRyaXg7Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRzUmVjdCgtb3JpZ2lu
KCksIGJvdW5kcygpKTsKLQotICAgIGlmIChzaXplSXNTY2FsZUludmFyaWFudCgpKQotICAgICAg
ICBib3VuZHNSZWN0LnNjYWxlKDEgLyBzY2FsZSk7Ci0KLSAgICBtX2NlbnRlclcgPSAwOwotICAg
IG1fdHJhbnNmb3JtZWRCb3VuZHMuY2xlYXIoKTsKLSAgICBtX3dzLmNsZWFyKCk7Ci0gICAgbV90
ZXh0dXJlQ29vcmRpbmF0ZXMuY2xlYXIoKTsKLSAgICBpZiAobWF0cml4Lmhhc1BlcnNwZWN0aXZl
KCkgJiYgIW1fbGF5ZXJSZW5kZXJlclN1cmZhY2UpIHsKLSAgICAgICAgLy8gUGVyZm9ybSBwcm9j
ZXNzaW5nIGFjY29yZGluZyB0byBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRyYW5zZm9ybXMg
Ni4yCi0gICAgICAgIC8vIElmIHcgPCAwIGZvciBhbGwgZm91ciBjb3JuZXJzIG9mIHRoZSB0cmFu
c2Zvcm1lZCBib3gsIHRoZSBib3ggaXMgbm90IHJlbmRlcmVkLgotICAgICAgICAvLyBJZiB3IDwg
MCBmb3Igb25lIHRvIHRocmVlIGNvcm5lcnMgb2YgdGhlIHRyYW5zZm9ybWVkIGJveCwgdGhlIGJv
eAotICAgICAgICAvLyBtdXN0IGJlIHJlcGxhY2VkIGJ5IGEgcG9seWdvbiB0aGF0IGhhcyBhbnkg
cGFydHMgd2l0aCB3IDwgMCBjdXQgb3V0LgotICAgICAgICAvLyBJZiB3ID0gMCwgKHjigLIsIHni
gLIsIHrigLIpID0gKHgg4ouFIG4sIHkg4ouFIG4sIHog4ouFIG4pCi0gICAgICAgIC8vIFdlIGlt
cGxlbWVudCB0aGlzIGJ5IGludGVyc2VjdGluZyB3aXRoIHRoZSBpbWFnZSBwbGFuZSwgaS5lLiB0
aGUgbGFzdCByb3cgb2YgdGhlIGNvbHVtbi1tYWpvciBtYXRyaXguCi0gICAgICAgIC8vIFRvIGF2
b2lkIHByb2JsZW1zIHdpdGggdyBjbG9zZSB0byAwLCB3ZSB1c2UgdyA9IGVwc2lsb24gYXMgdGhl
IG5lYXIgcGxhbmUgYnkgc3VidHJhY3RpbmcgZXBzaWxvbiBmcm9tIG1hdHJpeC5tNDQoKS4KLSAg
ICAgICAgY29uc3QgZmxvYXQgZXBzaWxvbiA9IDFlLTM7Ci0gICAgICAgIFZlY3RvcjxGbG9hdFBv
aW50M0QsIDQ+IHF1YWQgPSB0b1ZlY3RvcjxGbG9hdFBvaW50M0QsIDQ+KGJvdW5kc1JlY3QpOwot
ICAgICAgICBWZWN0b3I8RmxvYXRQb2ludDNELCA0PiBwb2x5Z29uID0gaW50ZXJzZWN0KHF1YWQs
IExheWVyQ2xpcFBsYW5lKEZsb2F0UG9pbnQzRChtYXRyaXgubTE0KCksIG1hdHJpeC5tMjQoKSwg
bWF0cml4Lm0zNCgpKSwgbWF0cml4Lm00NCgpIC0gZXBzaWxvbikpOwotCi0gICAgICAgIC8vIENv
bXB1dGUgdGhlIGNsaXBwZWQgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAgaWYgKHBvbHln
b24gIT0gcXVhZCkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2x5Z29u
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludDNEJiBwID0gcG9seWdv
bltpXTsKLSAgICAgICAgICAgICAgICBtX3RleHR1cmVDb29yZGluYXRlcy5hcHBlbmQoRmxvYXRQ
b2ludChwLngoKSAvIGJvdW5kc1JlY3Qud2lkdGgoKSArIDAuNWYsIHAueSgpIC8gYm91bmRzUmVj
dC5oZWlnaHQoKSArIDAuNWYpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIElmIHcgPiAwLCAoeOKAsiwgeeKAsiwgeuKAsikgPSAoeC93LCB5L3csIHovdykKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2x5Z29uLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBmbG9hdCB3OwotICAgICAgICAgICAgRmxvYXRQb2ludDNEIHAgPSBtdWx0VmVjTWF0cml4
KG1hdHJpeCwgcG9seWdvbltpXSwgdyk7Ci0gICAgICAgICAgICBpZiAodyAhPSAxKSB7Ci0gICAg
ICAgICAgICAgICAgcC5zZXRYKHAueCgpIC8gdyk7Ci0gICAgICAgICAgICAgICAgcC5zZXRZKHAu
eSgpIC8gdyk7Ci0gICAgICAgICAgICAgICAgcC5zZXRaKHAueigpIC8gdyk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBxID0gcHJvamVjdGlvbk1hdHJpeC5tYXBQ
b2ludChwKTsKLSAgICAgICAgICAgIG1fdHJhbnNmb3JtZWRCb3VuZHMuYXBwZW5kKEZsb2F0UG9p
bnQocS54KCksIHEueSgpKSk7Ci0gICAgICAgICAgICBtX3dzLmFwcGVuZCh3KTsKLSAgICAgICAg
fQotCi0gICAgICAgIG1fY2VudGVyVyA9IG1hdHJpeC5tNDQoKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgbV90cmFuc2Zvcm1lZEJvdW5kcyA9IHRvVmVjdG9yPEZsb2F0UG9pbnQsIDQ+KG1fZHJhd1Ry
YW5zZm9ybS5tYXBRdWFkKGJvdW5kc1JlY3QpKTsKLQotICAgIG1fYm91bmRpbmdCb3ggPSBXZWJD
b3JlOjpib3VuZGluZ0JveChtX3RyYW5zZm9ybWVkQm91bmRzKTsKLX0KLQotY29uc3QgVmVjdG9y
PEZsb2F0UG9pbnQ+JiBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlQ29vcmRpbmF0ZXMo
VGV4dHVyZUNvb3JkaW5hdGVPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKLXsKLSAgICBp
ZiAobV90ZXh0dXJlQ29vcmRpbmF0ZXMuc2l6ZSgpKSB7Ci0gICAgICAgIGlmIChvcmllbnRhdGlv
biA9PSBVcHNpZGVEb3duKSB7Ci0gICAgICAgICAgICBzdGF0aWMgVmVjdG9yPEZsb2F0UG9pbnQ+
IHVwc2lkZURvd25Db29yZGluYXRlczsKLSAgICAgICAgICAgIHVwc2lkZURvd25Db29yZGluYXRl
cyA9IG1fdGV4dHVyZUNvb3JkaW5hdGVzOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB1cHNpZGVEb3duQ29vcmRpbmF0ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAg
dXBzaWRlRG93bkNvb3JkaW5hdGVzW2ldLnNldFkoMSAtIHVwc2lkZURvd25Db29yZGluYXRlc1tp
XS55KCkpOwotICAgICAgICAgICAgcmV0dXJuIHVwc2lkZURvd25Db29yZGluYXRlczsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBtX3RleHR1cmVDb29yZGluYXRlczsKLSAgICB9Ci0KLSAg
ICBpZiAob3JpZW50YXRpb24gPT0gVXBzaWRlRG93bikgewotICAgICAgICBzdGF0aWMgRmxvYXRQ
b2ludCBkYXRhWzRdID0geyBGbG9hdFBvaW50KDAsIDEpLCAgRmxvYXRQb2ludCgxLCAxKSwgIEZs
b2F0UG9pbnQoMSwgMCksICBGbG9hdFBvaW50KDAsIDApIH07Ci0gICAgICAgIHN0YXRpYyBWZWN0
b3I8RmxvYXRQb2ludD4qIHVwc2lkZURvd25Db29yZGluYXRlcyA9IDA7Ci0gICAgICAgIGlmICgh
dXBzaWRlRG93bkNvb3JkaW5hdGVzKSB7Ci0gICAgICAgICAgICB1cHNpZGVEb3duQ29vcmRpbmF0
ZXMgPSBuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCk7Ci0gICAgICAgICAgICB1cHNpZGVEb3duQ29v
cmRpbmF0ZXMtPmFwcGVuZChkYXRhLCA0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnVw
c2lkZURvd25Db29yZGluYXRlczsKLSAgICB9Ci0KLSAgICBzdGF0aWMgRmxvYXRQb2ludCBkYXRh
WzRdID0geyBGbG9hdFBvaW50KDAsIDApLCAgRmxvYXRQb2ludCgxLCAwKSwgIEZsb2F0UG9pbnQo
MSwgMSksICBGbG9hdFBvaW50KDAsIDEpIH07Ci0gICAgc3RhdGljIFZlY3RvcjxGbG9hdFBvaW50
PiogY29vcmRpbmF0ZXMgPSAwOwotICAgIGlmICghY29vcmRpbmF0ZXMpIHsKLSAgICAgICAgY29v
cmRpbmF0ZXMgPSBuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCk7Ci0gICAgICAgIGNvb3JkaW5hdGVz
LT5hcHBlbmQoZGF0YSwgNCk7Ci0gICAgfQotICAgIHJldHVybiAqY29vcmRpbmF0ZXM7Ci19Ci0K
LUZsb2F0UXVhZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjp0cmFuc2Zvcm1lZEhvbGVQdW5jaFJl
Y3QoKSBjb25zdAotewotICAgIEZsb2F0UmVjdCBob2xlUHVuY2hSZWN0KG1faG9sZVB1bmNoUmVj
dCk7Ci0gICAgaG9sZVB1bmNoUmVjdC5tb3ZlQnkoLW9yaWdpbigpKTsKLSAgICByZXR1cm4gbV9k
cmF3VHJhbnNmb3JtLm1hcFF1YWQoaG9sZVB1bmNoUmVjdCk7Ci19Ci0KLXZvaWQgTGF5ZXJDb21w
b3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSwg
ZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGNsaXBSZWN0KQotewotICAgIGlmIChtX3BsdWdpblZpZXcpIHsKLSAgICAgICAgaWYgKG1f
aXNWaXNpYmxlKSB7Ci0gICAgICAgICAgICAvLyBUaGUgbGF5ZXIgY29udGFpbnMgRmxhc2gsIHZp
ZGVvLCBvciBvdGhlciBwbHVnaW4gY29udGVudHMuCi0gICAgICAgICAgICBtX3BsdWdpbkJ1ZmZl
ciA9IG1fcGx1Z2luVmlldy0+bG9ja0Zyb250QnVmZmVyRm9yUmVhZCgpOwotCi0gICAgICAgICAg
ICBpZiAoIW1fcGx1Z2luQnVmZmVyKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgaWYgKCFCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmxvY2tBbmRCaW5kQnVm
ZmVyR0xUZXh0dXJlKG1fcGx1Z2luQnVmZmVyLCBHTF9URVhUVVJFXzJEKSkgewotICAgICAgICAg
ICAgICAgIG1fcGx1Z2luVmlldy0+dW5sb2NrRnJvbnRCdWZmZXIoKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
YWRkTGF5ZXJUb1JlbGVhc2VUZXh0dXJlUmVzb3VyY2VzTGlzdCh0aGlzKTsKLQotICAgICAgICAg
ICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAgICAgICAgICAgZ2xCbGVuZEZ1bmMoR0xfT05FLCBH
TF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmKHByb2dyYW0u
b3BhY2l0eUxvY2F0aW9uKCksIGRyYXdPcGFjaXR5KCkpOwotICAgICAgICAgICAgZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKHByb2dyYW0ucG9zaXRpb25Mb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgR0xf
RkFMU0UsIDAsIG1fdHJhbnNmb3JtZWRCb3VuZHMuZGF0YSgpKTsKLSAgICAgICAgICAgIGdsVmVy
dGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnRleENvb3JkTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQs
IEdMX0ZBTFNFLCAwLCB0ZXh0dXJlQ29vcmRpbmF0ZXMoKS5kYXRhKCkpOwotICAgICAgICAgICAg
Z2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgbV90cmFuc2Zvcm1lZEJvdW5kcy5zaXpl
KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWYgRU5BQkxFKFZJREVP
KQotICAgIGlmIChtX21lZGlhUGxheWVyKSB7Ci0gICAgICAgIGlmIChtX2lzVmlzaWJsZSkgewot
ICAgICAgICAgICAgSW50UmVjdCBwYWludFJlY3Q7Ci0gICAgICAgICAgICBpZiAobV9sYXllclJl
bmRlcmVyLT5jbGllbnQoKS0+c2hvdWxkQ2hpbGRXaW5kb3dzVXNlRG9jdW1lbnRDb29yZGluYXRl
cygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzcGVjaWZ5IHRoZSBtZWRpYSBw
bGF5ZXIgbG9jYXRpb24gaW4gY29udGVudHMgY29vcmRpbmF0ZXMuIFRoZSAndmlzaWJsZVJlY3Qn
Ci0gICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVzIHRoZSBjb250ZW50IHJlZ2lvbiBjb3ZlcmVk
IGJ5IG91ciB2aWV3cG9ydC4gU28gd2UgdHJhbnNmb3JtIGZyb20gb3VyCi0gICAgICAgICAgICAg
ICAgLy8gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMgWy0xLCAxXSB0byB0aGUgJ3Zpc2li
bGVSZWN0Jy4KLSAgICAgICAgICAgICAgICBmbG9hdCB2cncyID0gdmlzaWJsZVJlY3Qud2lkdGgo
KSAvIDIuMDsKLSAgICAgICAgICAgICAgICBmbG9hdCB2cmgyID0gdmlzaWJsZVJlY3QuaGVpZ2h0
KCkgLyAyLjA7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwKG1fdHJhbnNmb3JtZWRCb3Vu
ZHNbMF0ueCgpICogdnJ3MiArIHZydzIgKyB2aXNpYmxlUmVjdC54KCksCi0gICAgICAgICAgICAg
ICAgICAgIC1tX3RyYW5zZm9ybWVkQm91bmRzWzBdLnkoKSAqIHZyaDIgKyB2cmgyICsgdmlzaWJs
ZVJlY3QueSgpKTsKLSAgICAgICAgICAgICAgICBwYWludFJlY3QgPSBJbnRSZWN0KHJvdW5kZWRJ
bnRQb2ludChwKSwgbV9ib3VuZHMpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgcGFpbnRSZWN0ID0gbV9sYXllclJlbmRlcmVyLT50b1dpbmRvd0Nvb3JkaW5hdGVzKG1fYm91
bmRpbmdCb3gpOwotCi0gICAgICAgICAgICBtX21lZGlhUGxheWVyLT5wYWludCgwLCBwYWludFJl
Y3QpOwotICAgICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtcHAgPSBzdGF0aWNfY2FzdDxN
ZWRpYVBsYXllclByaXZhdGUqPihtX21lZGlhUGxheWVyLT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEu
cW54TWVkaWFQbGF5ZXIpOwotICAgICAgICAgICAgbXBwLT5kcmF3QnVmZmVyaW5nQW5pbWF0aW9u
KG1fZHJhd1RyYW5zZm9ybSwgcHJvZ3JhbSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZHJh
d1RleHR1cmVzKHRoaXMsIHByb2dyYW0sIHNjYWxlLCBjbGlwUmVjdCk7Ci19Ci0KLXZvaWQgTGF5
ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1N1cmZhY2UoY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9n
cmFtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCogbWFzaykKLXsKLSAgICB1c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOwotCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+bGF5ZXJBbHJl
YWR5T25TdXJmYWNlKHRoaXMpKSB7Ci0gICAgICAgIExheWVyVGV4dHVyZSogc3VyZmFjZVRleHR1
cmUgPSBsYXllclJlbmRlcmVyU3VyZmFjZSgpLT50ZXh0dXJlKCk7Ci0gICAgICAgIGlmICghc3Vy
ZmFjZVRleHR1cmUpIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkKCktPnRleHR1cmVBY2Nlc3NlZChsYXllclJlbmRlcmVyU3VyZmFjZSgpLT50ZXh0dXJl
KCkpOwotICAgICAgICBHTHVpbnQgc3VyZmFjZVRleElEID0gc3VyZmFjZVRleHR1cmUtPnBsYXRm
b3JtVGV4dHVyZSgpOwotCi0gICAgICAgIGlmICghc3VyZmFjZVRleElEKSB7Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChtYXNrKSB7Ci0gICAgICAgICAgICBpZiAoTGF5ZXJUZXh0dXJlKiBtYXNr
VGV4dHVyZSA9IG1hc2stPmNvbnRlbnRzVGV4dHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgR0x1
aW50IG1hc2tUZXhJRCA9IG1hc2tUZXh0dXJlLT5wbGF0Zm9ybVRleHR1cmUoKTsKLQotICAgICAg
ICAgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSk7Ci0gICAgICAgICAgICAgICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4SUQpOwotICAgICAgICAgICAgICAg
IGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0gICAgICAgIGdsQmxlbmRGdW5jKEdMX09O
RSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgc3VyZmFjZVRleElEKTsKLQotICAgICAgICBGbG9hdFF1YWQgc3VyZmFjZVF1YWQg
PSBkcmF3VHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRSZWN0KC1vcmlnaW4oKSwgYm91bmRzKCkpKTsK
LSAgICAgICAgZ2xVbmlmb3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwgbGF5ZXJSZW5k
ZXJlclN1cmZhY2UoKS0+ZHJhd09wYWNpdHkoKSk7Ci0gICAgICAgIGdsVmVydGV4QXR0cmliUG9p
bnRlcihwcm9ncmFtLnBvc2l0aW9uTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAw
LCAmc3VyZmFjZVF1YWQpOwotCi0gICAgICAgIHN0YXRpYyBmbG9hdCB0ZXhjb29yZHNbNCAqIDJd
ID0geyAwLCAwLCAgMSwgMCwgIDEsIDEsICAwLCAxIH07Ci0gICAgICAgIGdsVmVydGV4QXR0cmli
UG9pbnRlcihwcm9ncmFtLnRleENvb3JkTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNF
LCAwLCB0ZXhjb29yZHMpOwotICAgICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAw
LCA0KTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6cmVsZWFzZVRl
eHR1cmVSZXNvdXJjZXMoKQotewotICAgIGlmIChtX3BsdWdpblZpZXcgJiYgbV9wbHVnaW5CdWZm
ZXIpIHsKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpyZWxlYXNlQnVm
ZmVyR0xUZXh0dXJlKG1fcGx1Z2luQnVmZmVyKTsKLSAgICAgICAgbV9wbHVnaW5CdWZmZXIgPSAw
OwotICAgICAgICBtX3BsdWdpblZpZXctPnVubG9ja0Zyb250QnVmZmVyKCk7Ci0gICAgfQotfQot
Ci12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnNldFBsdWdpblZpZXcoUGx1Z2luVmlldyog
cGx1Z2luVmlldykKLXsKLSAgICBpZiAoIWlzQ29tcG9zaXRpbmdUaHJlYWQoKSkgewotICAgICAg
ICBkaXNwYXRjaFN5bmNDb21wb3NpdGluZ01lc3NhZ2UoQmxhY2tCZXJyeTo6UGxhdGZvcm06OmNy
ZWF0ZU1ldGhvZENhbGxNZXNzYWdlKAotICAgICAgICAgICAgJkxheWVyQ29tcG9zaXRpbmdUaHJl
YWQ6OnNldFBsdWdpblZpZXcsCi0gICAgICAgICAgICB0aGlzLAotICAgICAgICAgICAgcGx1Z2lu
VmlldykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9wbHVnaW5WaWV3ID0gcGx1
Z2luVmlldzsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZDo6c2V0TWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKQotewotICAgIGlm
ICghaXNDb21wb3NpdGluZ1RocmVhZCgpKSB7Ci0gICAgICAgIGRpc3BhdGNoU3luY0NvbXBvc2l0
aW5nTWVzc2FnZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Y3JlYXRlTWV0aG9kQ2FsbE1lc3NhZ2Uo
Ci0gICAgICAgICAgICAmTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6c2V0TWVkaWFQbGF5ZXIsCi0g
ICAgICAgICAgICB0aGlzLAotICAgICAgICAgICAgbWVkaWFQbGF5ZXIpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fbWVkaWFQbGF5ZXIgPSBtZWRpYVBsYXllcjsKLX0KLSNlbmRp
ZgotCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnJlbW92ZVN1YmxheWVyKExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqIHN1YmxheWVyKQotewotICAgIEFTU0VSVChpc0NvbXBvc2l0aW5nVGhy
ZWFkKCkpOwotCi0gICAgaW50IGZvdW5kSW5kZXggPSBpbmRleE9mU3VibGF5ZXIoc3VibGF5ZXIp
OwotICAgIGlmIChmb3VuZEluZGV4ID09IC0xKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdWJs
YXllci0+c2V0U3VwZXJsYXllcigwKTsKLSAgICBtX3N1YmxheWVycy5yZW1vdmUoZm91bmRJbmRl
eCk7Ci19Ci0KLWludCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjppbmRleE9mU3VibGF5ZXIoY29u
c3QgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogcmVmZXJlbmNlKQotewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9zdWJsYXllcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKG1fc3Vi
bGF5ZXJzW2ldID09IHJlZmVyZW5jZSkKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLSAg
ICByZXR1cm4gLTE7Ci19Ci0KLWNvbnN0IExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIExheWVyQ29t
cG9zaXRpbmdUaHJlYWQ6OnJvb3RMYXllcigpIGNvbnN0Ci17Ci0gICAgY29uc3QgTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCogbGF5ZXIgPSB0aGlzOwotICAgIGZvciAoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCogc3VwZXJsYXllciA9IGxheWVyLT5zdXBlcmxheWVyKCk7IHN1cGVybGF5ZXI7IGxheWVy
ID0gc3VwZXJsYXllciwgc3VwZXJsYXllciA9IHN1cGVybGF5ZXItPnN1cGVybGF5ZXIoKSkgeyB9
Ci0gICAgcmV0dXJuIGxheWVyOwotfQotCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmFk
ZFN1YmxheWVyKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyKQotewotICAgIGxheWVyLT5y
ZW1vdmVGcm9tU3VwZXJsYXllcigpOwotICAgIGxheWVyLT5zZXRTdXBlcmxheWVyKHRoaXMpOwot
ICAgIG1fc3VibGF5ZXJzLmFwcGVuZChsYXllcik7Ci19Ci0KLXZvaWQgTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZDo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKQotewotICAgIGlmIChtX3N1cGVybGF5ZXIp
Ci0gICAgICAgIG1fc3VwZXJsYXllci0+cmVtb3ZlU3VibGF5ZXIodGhpcyk7Ci19Ci0KLXZvaWQg
TGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6c2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8
TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYgc3VibGF5ZXJzKQotewotICAgIGlmIChzdWJsYXll
cnMgPT0gbV9zdWJsYXllcnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxlIChtX3N1Ymxh
eWVycy5zaXplKCkpIHsKLSAgICAgICAgUmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+IGxh
eWVyID0gbV9zdWJsYXllcnNbMF0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChsYXllci0+c3VwZXJs
YXllcigpKTsKLSAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Ci0gICAgfQot
Ci0gICAgbV9zdWJsYXllcnMuY2xlYXIoKTsKLQotICAgIHNpemVfdCBsaXN0U2l6ZSA9IHN1Ymxh
eWVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgaSsrKSB7
Ci0gICAgICAgIFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiBzdWJsYXllciA9IHN1Ymxh
eWVyc1tpXTsKLSAgICAgICAgc3VibGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Ci0gICAg
ICAgIHN1YmxheWVyLT5zZXRTdXBlcmxheWVyKHRoaXMpOwotICAgICAgICBtX3N1YmxheWVycy5p
bnNlcnQoaSwgc3VibGF5ZXIpOwotICAgIH0KLX0KLQotdm9pZCBMYXllckNvbXBvc2l0aW5nVGhy
ZWFkOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fY2xpZW50
KQotICAgICAgICBtX2NsaWVudC0+dXBsb2FkVGV4dHVyZXNJZk5lZWRlZCh0aGlzKTsKLX0KLQot
TGF5ZXJUZXh0dXJlKiBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpjb250ZW50c1RleHR1cmUoKQot
ewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5jb250ZW50c1Rl
eHR1cmUodGhpcyk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXllckNvbXBvc2l0aW5n
VGhyZWFkOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAodmlzaWJsZSA9PSBt
X3Zpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmlzaWJsZSA9IHZpc2libGU7Ci0K
LSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5sYXllclZpc2liaWxpdHlDaGFu
Z2VkKHRoaXMsIHZpc2libGUpOwotfQotCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnNl
dE5lZWRzQ29tbWl0KCkKLXsKLSAgICBpZiAobV9sYXllclJlbmRlcmVyKQotICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPnNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZDo6c2NoZWR1bGVDb21taXQoKQotewotICAgIGlmICghbV9jbGllbnQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghaXNXZWJLaXRUaHJlYWQoKSkgewotICAgICAgICBpZiAobV9j
b21taXRTY2hlZHVsZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9jb21taXRT
Y2hlZHVsZWQgPSB0cnVlOwotCi0gICAgICAgIGRpc3BhdGNoV2ViS2l0TWVzc2FnZShCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6Y3JlYXRlTWV0aG9kQ2FsbE1lc3NhZ2UoJkxheWVyQ29tcG9zaXRpbmdU
aHJlYWQ6OnNjaGVkdWxlQ29tbWl0LCB0aGlzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX2NvbW1pdFNjaGVkdWxlZCA9IGZhbHNlOwotCi0gICAgbV9jbGllbnQtPnNjaGVkdWxl
Q29tbWl0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6Y29tbWl0UGVuZGlu
Z1RleHR1cmVVcGxvYWRzKCkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50
LT5jb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHModGhpcyk7Ci19Ci0KLWJvb2wgTGF5ZXJDb21w
b3NpdGluZ1RocmVhZDo6dXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgY3VycmVudFRpbWUpCi17Ci0g
ICAgLy8gVGhlIGNvbW1pdCBtZWNoYW5pc20gYWx3YXlzIG92ZXJ3cml0ZXMgb3VyIHN0YXRlIHdp
dGggc3RhdGUgZnJvbSB0aGUKLSAgICAvLyBXZWJLaXQgdGhyZWFkLiBUaGlzIG1lYW5zIHdlIGhh
dmUgdG8gcmVzdG9yZSB0aGUgbGFzdCBhbmltYXRlZCB2YWx1ZSBmb3IKLSAgICAvLyBzdXNwZW5k
ZWQgYW5pbWF0aW9ucy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3VzcGVuZGVkQW5p
bWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBMYXllckFuaW1hdGlvbiogYW5pbWF0aW9u
ID0gbV9zdXNwZW5kZWRBbmltYXRpb25zW2ldLmdldCgpOwotICAgICAgICAvLyBGcm9tIGxvb2tp
bmcgYXQgdGhlIFdlYkNvcmUgY29kZSwgaXQgYXBwZWFycyB0aGF0IHdoZW4gdGhlIGFuaW1hdGlv
bgotICAgICAgICAvLyBpcyBwYXVzZWQsIHRoZSB0aW1lT2Zmc2V0IGlzIG1vZGlmaWVkIHNvIGl0
IHdpbGwgYmUgYW4gYXBwcm9wcmlhdGUKLSAgICAgICAgLy8gZWxhcHNlZFRpbWUuCi0gICAgICAg
IGRvdWJsZSBlbGFwc2VkVGltZSA9IGFuaW1hdGlvbi0+dGltZU9mZnNldCgpOwotICAgICAgICBh
bmltYXRpb24tPmFwcGx5KHRoaXMsIGVsYXBzZWRUaW1lKTsKLSAgICB9Ci0KLSAgICBib29sIGFs
bEFuaW1hdGlvbnNGaW5pc2hlZCA9IHRydWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3J1bm5pbmdBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIExheWVyQW5pbWF0aW9u
KiBhbmltYXRpb24gPSBtX3J1bm5pbmdBbmltYXRpb25zW2ldLmdldCgpOwotICAgICAgICBkb3Vi
bGUgZWxhcHNlZFRpbWUgPSAobV9zdXNwZW5kVGltZSA/IG1fc3VzcGVuZFRpbWUgOiBjdXJyZW50
VGltZSkgLSBhbmltYXRpb24tPnN0YXJ0VGltZSgpICsgYW5pbWF0aW9uLT50aW1lT2Zmc2V0KCk7
Ci0gICAgICAgIGFuaW1hdGlvbi0+YXBwbHkodGhpcywgZWxhcHNlZFRpbWUpOwotICAgICAgICBp
ZiAoIWFuaW1hdGlvbi0+ZmluaXNoZWQoKSkKLSAgICAgICAgICAgIGFsbEFuaW1hdGlvbnNGaW5p
c2hlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgb3ZlcnJpZGVz
LCBhcHBseSB0aGVtCi0gICAgaWYgKG1fb3ZlcnJpZGUpIHsKLSAgICAgICAgaWYgKG1fb3ZlcnJp
ZGUtPmlzUG9zaXRpb25TZXQoKSkKLSAgICAgICAgICAgIG1fcG9zaXRpb24gPSBtX292ZXJyaWRl
LT5wb3NpdGlvbigpOwotICAgICAgICBpZiAobV9vdmVycmlkZS0+aXNBbmNob3JQb2ludFNldCgp
KQotICAgICAgICAgICAgbV9hbmNob3JQb2ludCA9IG1fb3ZlcnJpZGUtPmFuY2hvclBvaW50KCk7
Ci0gICAgICAgIGlmIChtX292ZXJyaWRlLT5pc0JvdW5kc1NldCgpKQotICAgICAgICAgICAgbV9i
b3VuZHMgPSBtX292ZXJyaWRlLT5ib3VuZHMoKTsKLSAgICAgICAgaWYgKG1fb3ZlcnJpZGUtPmlz
VHJhbnNmb3JtU2V0KCkpCi0gICAgICAgICAgICBtX3RyYW5zZm9ybSA9IG1fb3ZlcnJpZGUtPnRy
YW5zZm9ybSgpOwotICAgICAgICBpZiAobV9vdmVycmlkZS0+aXNPcGFjaXR5U2V0KCkpCi0gICAg
ICAgICAgICBtX29wYWNpdHkgPSBtX292ZXJyaWRlLT5vcGFjaXR5KCk7Ci0KLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX292ZXJyaWRlLT5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIExheWVyQW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX292ZXJyaWRlLT5h
bmltYXRpb25zKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSAo
bV9zdXNwZW5kVGltZSA/IG1fc3VzcGVuZFRpbWUgOiBjdXJyZW50VGltZSkgLSBhbmltYXRpb24t
PnN0YXJ0VGltZSgpICsgYW5pbWF0aW9uLT50aW1lT2Zmc2V0KCk7Ci0gICAgICAgICAgICBhbmlt
YXRpb24tPmFwcGx5KHRoaXMsIGVsYXBzZWRUaW1lKTsKLSAgICAgICAgICAgIGlmICghYW5pbWF0
aW9uLT5maW5pc2hlZCgpKQotICAgICAgICAgICAgICAgIGFsbEFuaW1hdGlvbnNGaW5pc2hlZCA9
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICFhbGxBbmltYXRpb25zRmlu
aXNoZWQ7Ci19Ci0KLWJvb2wgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6aGFzVmlzaWJsZUhvbGVQ
dW5jaFJlY3QoKSBjb25zdAotewotICAgIGlmIChtX3BsdWdpblZpZXcgJiYgIW1faXNWaXNpYmxl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgaWYgKG1f
bWVkaWFQbGF5ZXIgJiYgIW1faXNWaXNpYmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5k
aWYKLQotICAgIHJldHVybiBoYXNIb2xlUHVuY2hSZWN0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJDb21w
b3NpdGluZ1RocmVhZDo6Y3JlYXRlTGF5ZXJSZW5kZXJlclN1cmZhY2UoKQotewotICAgIEFTU0VS
VCghbV9sYXllclJlbmRlcmVyU3VyZmFjZSk7Ci0gICAgbV9sYXllclJlbmRlcmVyU3VyZmFjZSA9
IGFkb3B0UHRyKG5ldyBMYXllclJlbmRlcmVyU3VyZmFjZShtX2xheWVyUmVuZGVyZXIsIHRoaXMp
KTsKLX0KLQotdm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpyZW1vdmVBbmltYXRpb24oY29u
c3QgU3RyaW5nJiBuYW1lKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ydW5uaW5n
QW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9ydW5uaW5nQW5pbWF0aW9u
c1tpXS0+bmFtZSgpID09IG5hbWUpIHsKLSAgICAgICAgICAgIG1fcnVubmluZ0FuaW1hdGlvbnMu
cmVtb3ZlKGkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi1M
YXllck92ZXJyaWRlKiBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpvdmVycmlkZSgpCi17Ci0gICAg
aWYgKCFtX292ZXJyaWRlKQotICAgICAgICBtX292ZXJyaWRlID0gTGF5ZXJPdmVycmlkZTo6Y3Jl
YXRlKCk7Ci0gICAgcmV0dXJuIG1fb3ZlcnJpZGUuZ2V0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJDb21w
b3NpdGluZ1RocmVhZDo6Y2xlYXJPdmVycmlkZSgpCi17Ci0gICAgbV9vdmVycmlkZS5jbGVhcigp
OwotfQotCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRpc2NhcmRGcm9udFZpc2liaWxp
dHkoKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRpc2NhcmRGcm9u
dFZpc2liaWxpdHkoKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgJKHJl
dmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyMSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaWZuZGVmIExheWVyQ29tcG9zaXRp
bmdUaHJlYWRfaAotI2RlZmluZSBMYXllckNvbXBvc2l0aW5nVGhyZWFkX2gKLQotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIK
LSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJMYXllckFuaW1hdGlvbi5oIgotI2lu
Y2x1ZGUgIkxheWVyRGF0YS5oIgotI2luY2x1ZGUgIkxheWVyRmlsdGVyUmVuZGVyZXIuaCIKLSNp
bmNsdWRlICJMYXllclJlbmRlcmVyU3VyZmFjZS5oIgotI2luY2x1ZGUgIkxheWVyVGlsZXIuaCIK
LQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUd1YXJkZWRQb2ludGVyLmg+Ci0jaW5jbHVk
ZSA8R3VhcmRlZFBvaW50ZXJEZWxldGVyLmg+Ci0KLW5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKLW5h
bWVzcGFjZSBQbGF0Zm9ybSB7Ci1uYW1lc3BhY2UgR3JhcGhpY3MgewotY2xhc3MgQnVmZmVyOwot
Y2xhc3MgR0xFUzJQcm9ncmFtOwotfQotfQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ7Ci1jbGFzcyBMYXllclJlbmRlcmVyOwot
Ci1jbGFzcyBMYXllck92ZXJyaWRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxM
YXllck92ZXJyaWRlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJPdmVycmlk
ZSgpKTsgfQotCi0gICAgYm9vbCBpc1Bvc2l0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9wb3Np
dGlvblNldDsgfQotICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bv
c2l0aW9uOyB9Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlv
bikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IG1fcG9zaXRpb25TZXQgPSB0cnVlOyB9Ci0KLSAg
ICBib29sIGlzQW5jaG9yUG9pbnRTZXQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50U2V0
OyB9Ci0gICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9y
UG9pbnQ7IH0KLSAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hv
clBvaW50KSB7IG1fYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludDsgbV9hbmNob3JQb2ludFNldCA9
IHRydWU7IH0KLQotICAgIGJvb2wgaXNCb3VuZHNTZXQoKSBjb25zdCB7IHJldHVybiBtX2JvdW5k
c1NldDsgfQotICAgIEludFNpemUgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0K
LSAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBib3VuZHMpIHsgbV9ib3VuZHMgPSBi
b3VuZHM7IG1fYm91bmRzU2V0ID0gdHJ1ZTsgfQotCi0gICAgYm9vbCBpc1RyYW5zZm9ybVNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtU2V0OyB9Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0gICAg
dm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkg
eyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgbV90cmFuc2Zvcm1TZXQgPSB0cnVlOyB9Ci0KLSAg
ICBib29sIGlzT3BhY2l0eVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eVNldDsgfQotICAg
IGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KLSAgICB2b2lkIHNl
dE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyBtX29wYWNpdHlT
ZXQgPSB0cnVlOyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+
JiBhbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zOyB9Ci0gICAgdm9pZCBh
ZGRBbmltYXRpb24oUGFzc1JlZlB0cjxMYXllckFuaW1hdGlvbj4gYW5pbWF0aW9uKSB7IG1fYW5p
bWF0aW9ucy5hcHBlbmQoYW5pbWF0aW9uKTsgfQotICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNv
bnN0IFN0cmluZyYgbmFtZSk7Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJPdmVycmlkZSgpCi0gICAg
ICAgIDogbV9vcGFjaXR5KDEuMCkKLSAgICAgICAgLCBtX3Bvc2l0aW9uU2V0KGZhbHNlKQotICAg
ICAgICAsIG1fYW5jaG9yUG9pbnRTZXQoZmFsc2UpCi0gICAgICAgICwgbV9ib3VuZHNTZXQoZmFs
c2UpCi0gICAgICAgICwgbV90cmFuc2Zvcm1TZXQoZmFsc2UpCi0gICAgICAgICwgbV9vcGFjaXR5
U2V0KGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247Ci0g
ICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50OwotICAgIEludFNpemUgbV9ib3VuZHM7Ci0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07Ci0gICAgZmxvYXQgbV9vcGFjaXR5Owot
Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7Ci0KLSAg
ICB1bnNpZ25lZCBtX3Bvc2l0aW9uU2V0IDogMTsKLSAgICB1bnNpZ25lZCBtX2FuY2hvclBvaW50
U2V0IDogMTsKLSAgICB1bnNpZ25lZCBtX2JvdW5kc1NldCA6IDE7Ci0gICAgdW5zaWduZWQgbV90
cmFuc2Zvcm1TZXQgOiAxOwotICAgIHVuc2lnbmVkIG1fb3BhY2l0eVNldCA6IDE7Ci19OwotCi1j
bGFzcyBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOwotCi1jbGFzcyBMYXllckNvbXBvc2l0aW5n
VGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPExheWVyQ29tcG9zaXRpbmdUaHJl
YWQ+LCBwdWJsaWMgTGF5ZXJEYXRhLCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okd1YXJk
ZWRQb2ludGVyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDb21w
b3NpdGluZ1RocmVhZD4gY3JlYXRlKExheWVyVHlwZSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZENs
aWVudCopOwotCi0gICAgTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCogY2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KLSAgICB2b2lkIHNldENsaWVudChMYXllckNvbXBvc2l0
aW5nVGhyZWFkQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KLQotICAgIC8v
IFRocmVhZCBzYWZlCi0gICAgdm9pZCBzZXRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKLSNpZiBF
TkFCTEUoVklERU8pCi0gICAgdm9pZCBzZXRNZWRpYVBsYXllcihNZWRpYVBsYXllciopOwotI2Vu
ZGlmCi0KLSAgICAvLyBOb3QgdGhyZWFkIHNhZmUKLQotICAgIC8vIFRoZXNlIHdpbGwgYmUgb3Zl
cndyaXR0ZW4gb24gdGhlIG5leHQgY29tbWl0IGlmIHRoaXMgbGF5ZXIgaGFzIGEgTGF5ZXJXZWJL
aXRUaHJlYWQgY291bnRlcnBhcnQuCi0gICAgLy8gVXNlZnVsIGZvciBzdGFuZC1hbG9uZSBsYXll
cnMgdGhhdCBhcmUgY3JlYXRlZCBhbmQgbWFuYWdlZCBvbiB0aGUgY29tcG9zaXRpbmcgdGhyZWFk
LgotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBjYW4gYWxzbyBiZSB1c2VkIHRvIHVwZGF0ZSBhbmlt
YXRlZCBwcm9wZXJ0aWVzIGluIExheWVyQW5pbWF0aW9uLgotICAgIHZvaWQgc2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9Ci0g
ICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgeyBt
X2FuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQ7IH0KLSAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJ
bnRTaXplJiBib3VuZHMpIHsgbV9ib3VuZHMgPSBib3VuZHM7IH0KLSAgICB2b2lkIHNldFNpemVJ
c1NjYWxlSW52YXJpYW50KGJvb2wgaW52YXJpYW50KSB7IG1fc2l6ZUlzU2NhbGVJbnZhcmlhbnQg
PSBpbnZhcmlhbnQ7IH0KLSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0cml4KSB7IG1fdHJhbnNmb3JtID0gbWF0cml4OyB9Ci0gICAgdm9pZCBzZXRP
cGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQotICAgIHZvaWQg
YWRkU3VibGF5ZXIoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwotICAgIHZvaWQgcmVtb3ZlRnJv
bVN1cGVybGF5ZXIoKTsKLSAgICB2b2lkIHNldE5lZWRzVGV4dHVyZShib29sIG5lZWRzVGV4dHVy
ZSkgeyBtX25lZWRzVGV4dHVyZSA9IG5lZWRzVGV4dHVyZTsgfQotCi0gICAgdm9pZCBjb21taXRQ
ZW5kaW5nVGV4dHVyZVVwbG9hZHMoKTsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBoYXZl
IGFuIGFuaW1hdGlvbgotICAgIGJvb2wgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgY3VycmVudFRp
bWUpOwotICAgIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsKLSAgICBMYXll
clRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSgpOwotCi0gICAgY29uc3QgTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCogcm9vdExheWVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdWJsYXllcnMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiA+Jik7Ci0gICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiA+JiBzdWJsYXllcnMoKSBjb25zdCB7
IHJldHVybiBtX3N1YmxheWVyczsgfQotICAgIHZvaWQgc2V0U3VwZXJsYXllcihMYXllckNvbXBv
c2l0aW5nVGhyZWFkKiBzdXBlcmxheWVyKSB7IG1fc3VwZXJsYXllciA9IHN1cGVybGF5ZXI7IH0K
LSAgICBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBzdXBlcmxheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9zdXBlcmxheWVyOyB9Ci0KLSAgICAvLyBUaGUgbGF5ZXIgcmVuZGVyZXIgbXVzdCBiZSBzZXQg
aWYgdGhlIGxheWVyIGhhcyBiZWVuIHJlbmRlcmVkCi0gICAgTGF5ZXJSZW5kZXJlciogbGF5ZXJS
ZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlcjsgfQotICAgIHZvaWQgc2V0
TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyKik7Ci0KLSAgICAvLyBUaGUgZHJhdyB0cmFuc2Zv
cm0gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGxvY2F0ZWQgYXQgdGhlIGNlbnRlciBvZiB0aGUg
bGF5ZXIuCi0gICAgRmxvYXRQb2ludCBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50
KG1fYm91bmRzLndpZHRoKCkgLyAyLjBmLCBtX2JvdW5kcy5oZWlnaHQoKSAvIDIuMGYpOyB9Ci0K
LSAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oZG91YmxlIHNjYWxlLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cHJvamVjdGlvbk1hdHJpeCk7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KLQotICAgIHZvaWQg
c2V0RHJhd09wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0gb3BhY2l0eTsg
fQotICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eTsg
fQotCi0gICAgdm9pZCBjcmVhdGVMYXllclJlbmRlcmVyU3VyZmFjZSgpOwotICAgIExheWVyUmVu
ZGVyZXJTdXJmYWNlKiBsYXllclJlbmRlcmVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
ZXJSZW5kZXJlclN1cmZhY2UuZ2V0KCk7IH0KLSAgICB2b2lkIGNsZWFyTGF5ZXJSZW5kZXJlclN1
cmZhY2UoKSB7IG1fbGF5ZXJSZW5kZXJlclN1cmZhY2UuY2xlYXIoKTsgfQotCi0gICAgdm9pZCBz
ZXRNYXNrTGF5ZXIoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbWFza0xheWVyKSB7IG1fbWFza0xh
eWVyID0gbWFza0xheWVyOyB9Ci0gICAgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbWFza0xheWVy
KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0UmVw
bGljYUxheWVyKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyKSB7IG1fcmVwbGljYUxheWVy
ID0gbGF5ZXI7IH0KLSAgICBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiByZXBsaWNhTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX3JlcGxpY2FMYXllci5nZXQoKTsgfQotCi0gICAgLy8gVGhlc2UgdXNl
IG5vcm1hbGl6ZWQgZGV2aWNlIGNvb3JkaW5hdGVzCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94
KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveDsgfQotICAgIC8vIFRoZSBib3VuZHMgYXJl
IHByb2Nlc3NlZCBhY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2Zv
cm1zIHBhcmFncmFwaCA2LjIsIHdoaWNoIGNhbiByZXN1bHQgaW4gYSBwb2x5Z29uIHdpdGggbW9y
ZSB0aGFuIDQgc2lkZXMuCi0gICAgY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQsIDQ+JiB0cmFuc2Zv
cm1lZEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtZWRCb3VuZHM7IH0KLSAgICBj
b25zdCBWZWN0b3I8ZmxvYXQsIDQ+JiB3cygpIGNvbnN0IHsgcmV0dXJuIG1fd3M7IH0KLQotICAg
IGVudW0gVGV4dHVyZUNvb3JkaW5hdGVPcmllbnRhdGlvbiB7Ci0gICAgICAgIFJpZ2h0U2lkZVVw
ID0gMCwKLSAgICAgICAgVXBzaWRlRG93bgotICAgIH07Ci0KLSAgICBjb25zdCBWZWN0b3I8Rmxv
YXRQb2ludD4mIHRleHR1cmVDb29yZGluYXRlcyhUZXh0dXJlQ29vcmRpbmF0ZU9yaWVudGF0aW9u
ID0gUmlnaHRTaWRlVXApIGNvbnN0OwotICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZEhvbGVQdW5j
aFJlY3QoKSBjb25zdDsKLSAgICBmbG9hdCBjZW50ZXJXKCkgY29uc3QgeyByZXR1cm4gbV9jZW50
ZXJXOyB9Ci0KLSAgICB2b2lkIGRlbGV0ZVRleHR1cmVzKCk7Ci0KLSAgICB2b2lkIGRyYXdUZXh0
dXJlcyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYs
IGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBjbGlwUmVjdCk7Ci0gICAgdm9pZCBkcmF3U3VyZmFjZShjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbWFzayk7Ci0KLSAgICB2b2lkIHJlbGVhc2VU
ZXh0dXJlUmVzb3VyY2VzKCk7Ci0KLSAgICAvLyBMYXllciB2aXNpYmlsaXR5IGlzIGRldGVybWlu
ZWQgYnkgdGhlIExheWVyUmVuZGVyZXIgd2hlbiBkcmF3aW5nLgotICAgIC8vIFNvIHdlIGRvbid0
IGhhdmUgYW4gYWNjdXJhdGUgdmFsdWUgZm9yIHZpc2liaWxpdHkgdW50aWwgaXQncyB0b28gbGF0
ZSwKLSAgICAvLyBidXQgdGhlIGF0dHJpYnV0ZSBzdGlsbCBpcyB1c2VmdWwuCi0gICAgYm9vbCBp
c1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGU7IH0KLSAgICB2b2lkIHNldFZpc2li
bGUoYm9vbCk7Ci0KLSAgICAvLyBUaGlzIHdpbGwgY2F1c2UgYSBjb21taXQgb2YgdGhlIHdob2xl
IGxheWVyIHRyZWUgb24gdGhlIFdlYktpdCB0aHJlYWQsCi0gICAgLy8gc29tZXRpbWUgYWZ0ZXIg
cmVuZGVyaW5nIGlzIGZpbmlzaGVkLiBVc2VkIHdoZW4gcmVuZGVyaW5nIHJlc3VsdHMgaW4gYQot
ICAgIC8vIG5lZWQgZm9yIGNvbW1pdCwgZm9yIGV4YW1wbGUgd2hlbiBhIGRpcnR5IGxheWVyIGJl
Y29tZXMgdmlzaWJsZS4KLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7Ci0KLSAgICAvLyBOb3Jt
YWxseSB5b3Ugd291bGQgc2NoZWR1bGUgYSBjb21taXQgZnJvbSB0aGUgd2Via2l0IHRocmVhZCwg
YnV0Ci0gICAgLy8gdGhpcyBhbGxvd3MgeW91IHRvIGRvIGl0IGZyb20gdGhlIGNvbXBvc2l0aW5n
IHRocmVhZC4KLSAgICB2b2lkIHNjaGVkdWxlQ29tbWl0KCk7Ci0KLSAgICBib29sIGhhc1J1bm5p
bmdBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gIW1fcnVubmluZ0FuaW1hdGlvbnMuaXNFbXB0
eSgpOyB9Ci0KLSAgICBib29sIGhhc1Zpc2libGVIb2xlUHVuY2hSZWN0KCkgY29uc3Q7Ci0KLSAg
ICB2b2lkIGFkZEFuaW1hdGlvbihMYXllckFuaW1hdGlvbiogYW5pbWF0aW9uKSB7IG1fcnVubmlu
Z0FuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7IH0KLSAgICB2b2lkIHJlbW92ZUFuaW1hdGlv
bihjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgdm9pZCBzZXRSdW5uaW5nQW5pbWF0aW9ucyhj
b25zdCBWZWN0b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+JiBhbmltYXRpb25zKSB7IG1fcnVu
bmluZ0FuaW1hdGlvbnMgPSBhbmltYXRpb25zOyB9Ci0gICAgdm9pZCBzZXRTdXNwZW5kZWRBbmlt
YXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4mIGFuaW1hdGlvbnMp
IHsgbV9zdXNwZW5kZWRBbmltYXRpb25zID0gYW5pbWF0aW9uczsgfQotCi0gICAgTGF5ZXJPdmVy
cmlkZSogb3ZlcnJpZGUoKTsKLSAgICB2b2lkIGNsZWFyT3ZlcnJpZGUoKTsKLQotICAgIHZvaWQg
ZGlzY2FyZEZyb250VmlzaWJpbGl0eSgpOwotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAg
IGJvb2wgZmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlck9w
ZXJhdGlvbnNDaGFuZ2VkOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJPcGVyYXRpb25zQ2hhbmdlZChi
b29sIGNoYW5nZWQpIHsgbV9maWx0ZXJPcGVyYXRpb25zQ2hhbmdlZCA9IGNoYW5nZWQ7IH0KLQot
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiBmaWx0ZXJBY3Rp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJBY3Rpb25zOyB9Ci0gICAgdm9pZCBzZXRGaWx0
ZXJBY3Rpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4g
PiYgYWN0aW9ucykgeyBtX2ZpbHRlckFjdGlvbnMgPSBhY3Rpb25zOyB9Ci0jZW5kaWYKLQotcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgfkxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKTsKLQotcHJpdmF0
ZToKLSAgICBMYXllckNvbXBvc2l0aW5nVGhyZWFkKExheWVyVHlwZSwgTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudCopOwotCi0gICAgdm9pZCB1cGRhdGVUaWxlQ29udGVudHMoY29uc3QgSW50
UmVjdCYgdGlsZSk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgc3VibGF5ZXIg
b3IgLTEgaWYgbm90IGZvdW5kLgotICAgIGludCBpbmRleE9mU3VibGF5ZXIoY29uc3QgTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopOwotCi0gICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZnJvbSByZW1vdmVGcm9tU3VwZXJsYXllci4KLSAgICB2b2lkIHJlbW92ZVN1YmxheWVyKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqKTsKLQotICAgIExheWVyUmVuZGVyZXIqIG1fbGF5ZXJSZW5kZXJl
cjsKLQotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiA+
IExheWVyTGlzdDsKLSAgICBMYXllckxpc3QgbV9zdWJsYXllcnM7Ci0gICAgTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCogbV9zdXBlcmxheWVyOwotCi0gICAgLy8gVmVydGV4IGRhdGEgZm9yIHRoZSBi
b3VuZHMgb2YgdGhpcyBsYXllcgotICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0PiBtX3RyYW5zZm9y
bWVkQm91bmRzOwotICAgIFZlY3RvcjxmbG9hdCwgND4gbV93czsKLSAgICBWZWN0b3I8RmxvYXRQ
b2ludD4gbV90ZXh0dXJlQ29vcmRpbmF0ZXM7IC8vIE9ubHkgdXNlZCB3aGVuIGEgM0QgbGF5ZXIg
aXMgY2xpcHBlZCBhZ2FpbnN0IHogPSAwCi0gICAgZmxvYXQgbV9jZW50ZXJXOwotICAgIEZsb2F0
UmVjdCBtX2JvdW5kaW5nQm94OwotCi0gICAgT3duUHRyPExheWVyUmVuZGVyZXJTdXJmYWNlPiBt
X2xheWVyUmVuZGVyZXJTdXJmYWNlOwotCi0gICAgUmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJl
YWQ+IG1fbWFza0xheWVyOwotICAgIFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiBtX3Jl
cGxpY2FMYXllcjsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVy
KiBtX3BsdWdpbkJ1ZmZlcjsKLQotICAgIC8vIFRoZSBnbG9iYWwgcHJvcGVydHkgdmFsdWVzLCBh
ZnRlciBjb25jYXRlbmF0aW9uIHdpdGggcGFyZW50IHZhbHVlcwotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKLSAgICBmbG9hdCBtX2RyYXdPcGFjaXR5OwotCi0gICAg
Ym9vbCBtX3Zpc2libGU7Ci0gICAgYm9vbCBtX2NvbW1pdFNjaGVkdWxlZDsKLQotICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4gbV9ydW5uaW5nQW5pbWF0aW9uczsKLSAgICBWZWN0
b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+IG1fc3VzcGVuZGVkQW5pbWF0aW9uczsKLQotICAg
IE93blB0cjxMYXllck92ZXJyaWRlPiBtX292ZXJyaWRlOwotICAgIExheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQqIG1fY2xpZW50OwotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIGJv
b2wgbV9maWx0ZXJPcGVyYXRpb25zQ2hhbmdlZDsKLSAgICBWZWN0b3I8UmVmUHRyPExheWVyRmls
dGVyUmVuZGVyZXJBY3Rpb24+ID4gbV9maWx0ZXJBY3Rpb25zOwotI2VuZGlmCi19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyBMYXllckNvbXBvc2l0
aW5nVGhyZWFkIG9iamVjdHMgbXVzdCBiZSBkZXN0cm95ZWQgb24gdGhlIGNvbXBvc2l0aW5nIHRo
cmVhZC4KLS8vIEJ1dCBpdCdzIHBvc3NpYmxlIGZvciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gYmUg
aGVsZCBieSB0aGUgV2ViS2l0IHRocmVhZC4KLS8vIFNvIHdlIGNyZWF0ZSBhIGN1c3RvbSBzcGVj
aWFsaXphdGlvbiBvZiBUaHJlYWRTYWZlUmVmQ291bnRlZCB3aGljaCBjYWxscyBhCi0vLyBmdW5j
dGlvbiB0aGF0IGVuc3VyZXMgdGhlIGRlc3RydWN0b3IgaXMgY2FsbGVkIG9uIHRoZSBjb3JyZWN0
IHRocmVhZCwgcmF0aGVyCi0vLyB0aGFuIGNhbGxpbmcgZGVsZXRlIGRpcmVjdGx5LgotdGVtcGxh
dGU8PgotaW5saW5lIHZvaWQgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViQ29yZTo6TGF5ZXJDb21w
b3NpdGluZ1RocmVhZD46OmRlcmVmKCkKLXsKLSAgICBpZiAoZGVyZWZCYXNlKCkpIHsKLSAgICAg
ICAgLy8gRGVsZXRlIG9uIHRoZSBjb21wb3NpdGluZyB0aHJlYWQuCi0gICAgICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHdWFyZGVkUG9pbnRlckRlbGV0ZXI6OmRlbGV0ZU9uVGhyZWFkKAotICAg
ICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdl
Q2xpZW50KCksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpMYXllckNvbXBvc2l0
aW5nVGhyZWFkKj4odGhpcykpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLQot
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRp
bmdUaHJlYWRDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaAkocmV2aXNp
b24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVm
IExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnRfaAotI2RlZmluZSBMYXllckNvbXBvc2l0aW5n
VGhyZWFkQ2xpZW50X2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotbmFt
ZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFBsYXRmb3JtIHsKLW5hbWVzcGFjZSBHcmFw
aGljcyB7Ci1jbGFzcyBHTEVTMlByb2dyYW07Ci19Ci19Ci19Ci1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ7Ci1jbGFz
cyBMYXllclRleHR1cmU7Ci0KLWNsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgewot
cHVibGljOgotICAgIHZpcnR1YWwgfkxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQoKSB7IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBsYXllckNvbXBvc2l0aW5nVGhyZWFkRGVzdHJveWVkKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmls
aXR5Q2hhbmdlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5n
VGhyZWFkKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCosIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQ
cm9ncmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSA9
IDA7Ci0KLSAgICAvLyBPcHRpb25hbC4gQWxsb3dzIGxheWVycyB0byBzZXJ2ZSBhcyBhIG1hc2sg
Zm9yIG90aGVyIGxheWVycwotICAgIHZpcnR1YWwgTGF5ZXJUZXh0dXJlKiBjb250ZW50c1RleHR1
cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIE9wdGlv
bmFsLiBBbGxvdyB0aGUgbGF5ZXIgdG8gY29tbWl0IHRocmVhZCBzZW5zaXRpdmUgY29udGVudCBk
dXJpbmcgYSBzeW5jIHBvaW50Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1pdFBlbmRpbmdUZXh0dXJl
VXBsb2FkcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikgeyB9Ci0KLSAgICAvLyBVbmxpa2UgdGhl
IG90aGVyIG1ldGhvZHMgaGVyZSwgdGhpcyBvbmUgd2lsbCBiZSBjYWxsZWQgb24gdGhlIFdlYktp
dCB0aHJlYWQKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21taXQoKSB7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCBkaXNjYXJkRnJvbnRWaXNpYmlsaXR5KCkgeyB9Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllckRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDI3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
LCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaWZu
ZGVmIExheWVyRGF0YV9oCi0jZGVmaW5lIExheWVyRGF0YV9oCi0KLSNpbmNsdWRlICJDb2xvci5o
IgotI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsK
LWNsYXNzIFBsdWdpblZpZXc7Ci0jaWYgRU5BQkxFKFZJREVPKQotY2xhc3MgTWVkaWFQbGF5ZXI7
Ci0jZW5kaWYKLQotY2xhc3MgTGF5ZXJEYXRhIHsKLXB1YmxpYzoKLSAgICBlbnVtIExheWVyVHlw
ZSB7IExheWVyLCBUcmFuc2Zvcm1MYXllciwgV2ViR0xMYXllciwgQ2FudmFzTGF5ZXIsIEN1c3Rv
bUxheWVyIH07Ci0gICAgZW51bSBGaWx0ZXJUeXBlIHsgTGluZWFyLCBOZWFyZXN0LCBUcmlsaW5l
YXIsIExhbmN6b3MgfTsKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBlbnVtIENTU0Zp
bHRlclNoYWRlcnMgewotICAgICAgICBDU1NGaWx0ZXJTaGFkZXJHcmF5c2NhbGUgPSAwLAotICAg
ICAgICBDU1NGaWx0ZXJTaGFkZXJTZXBpYSwKLSAgICAgICAgQ1NTRmlsdGVyU2hhZGVyU2F0dXJh
dGUsCi0gICAgICAgIENTU0ZpbHRlclNoYWRlckh1ZVJvdGF0ZSwKLSAgICAgICAgQ1NTRmlsdGVy
U2hhZGVySW52ZXJ0LAotICAgICAgICBDU1NGaWx0ZXJTaGFkZXJCcmlnaHRuZXNzLAotICAgICAg
ICBDU1NGaWx0ZXJTaGFkZXJDb250cmFzdCwKLSAgICAgICAgQ1NTRmlsdGVyU2hhZGVyT3BhY2l0
eSwKLSAgICAgICAgQ1NTRmlsdGVyU2hhZGVyQmx1clksCi0gICAgICAgIENTU0ZpbHRlclNoYWRl
ckJsdXJYLAotICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTaGFkb3csCi0gICAgICAgIENTU0ZpbHRl
clNoYWRlclBhc3N0aHJvdWdoLAotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgQ1NT
RmlsdGVyU2hhZGVyQ3VzdG9tLAotI2VuZGlmCi0gICAgICAgIE51bWJlck9mQ1NTRmlsdGVyU2hh
ZGVycwotICAgIH07Ci0jZW5kaWYKLQotICAgIExheWVyRGF0YShMYXllclR5cGUgdHlwZSkKLSAg
ICAgICAgOiBtX2xheWVyVHlwZSh0eXBlKQotICAgICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAw
LjUpCi0gICAgICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkKLSAgICAgICAgLCBt
X2JvcmRlckNvbG9yKDAsIDAsIDAsIDApCi0gICAgICAgICwgbV9vcGFjaXR5KDEuMCkKLSAgICAg
ICAgLCBtX2FuY2hvclBvaW50WigwLjApCi0gICAgICAgICwgbV9ib3JkZXJXaWR0aCgwLjApCi0g
ICAgICAgICwgbV9wbHVnaW5WaWV3KDApCi0jaWYgRU5BQkxFKFZJREVPKQotICAgICAgICAsIG1f
bWVkaWFQbGF5ZXIoMCkKLSNlbmRpZgotICAgICAgICAsIG1fc3VzcGVuZFRpbWUoMCkKLSAgICAg
ICAgLCBtX2NvbnRlbnRzU2NhbGUoMS4wKQotICAgICAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkK
LSAgICAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCi0gICAgICAgICwgbV9pc09wYXF1ZShm
YWxzZSkKLSAgICAgICAgLCBtX3ByZXNlcnZlczNEKGZhbHNlKQotICAgICAgICAsIG1fbmVlZHNE
aXNwbGF5T25Cb3VuZHNDaGFuZ2UoZmFsc2UpCi0gICAgICAgICwgbV9uZWVkc1RleHR1cmUoZmFs
c2UpCi0gICAgICAgICwgbV9pc0ZpeGVkUG9zaXRpb24oZmFsc2UpCi0gICAgICAgICwgbV9oYXNG
aXhlZENvbnRhaW5lcihmYWxzZSkKLSAgICAgICAgLCBtX2hhc0ZpeGVkQW5jZXN0b3JJbkRPTVRy
ZWUoZmFsc2UpCi0gICAgICAgICwgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMo
ZmFsc2UpCi0gICAgICAgICwgbV9zaXplSXNTY2FsZUludmFyaWFudChmYWxzZSkKLSAgICAgICAg
LCBtX2NvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KGZhbHNlKQotICAgICAgICAsIG1faXNW
aXNpYmxlKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgfkxheWVyRGF0YSgpCi0g
ICAgewotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVy
biBtX2FuY2hvclBvaW50OyB9Ci0KLSAgICBmbG9hdCBhbmNob3JQb2ludFooKSBjb25zdCB7IHJl
dHVybiBtX2FuY2hvclBvaW50WjsgfQotCi0gICAgQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3I7IH0KLQotICAgIENvbG9yIGJvcmRlckNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJDb2xvcjsgfQotCi0gICAgZmxvYXQgYm9yZGVyV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlcldpZHRoOyB9Ci0KLSAgICBJbnRTaXplIGJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9Ci0KLSAgICBib29sIHNpemVJc1NjYWxlSW52
YXJpYW50KCkgY29uc3QgeyByZXR1cm4gbV9zaXplSXNTY2FsZUludmFyaWFudDsgfQotCi0gICAg
Ym9vbCBjb250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudHNSZXNvbHV0aW9uSW5kZXBlbmRlbnQ7IH0KLQotICAgIGJvb2wgZG91YmxlU2lkZWQoKSBj
b25zdCB7IHJldHVybiBtX2RvdWJsZVNpZGVkOyB9Ci0KLSAgICBGbG9hdFJlY3QgZnJhbWUoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lOyB9Ci0KLSAgICBib29sIG1hc2tzVG9Cb3VuZHMoKSBjb25z
dCB7IHJldHVybiBtX21hc2tzVG9Cb3VuZHM7IH0KLQotICAgIGZsb2F0IG9wYWNpdHkoKSBjb25z
dCB7IHJldHVybiBtX29wYWNpdHk7IH0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBG
aWx0ZXJPcGVyYXRpb25zIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KLSNl
bmRpZgotCi0gICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNPcGFxdWU7IH0K
LQotICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9
Ci0KLSAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIHBlcnNwZWN0aXZlIHRy
YW5zZm9ybSwgc2VlIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKCkKLSAgICBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX3N1YmxheWVyVHJhbnNmb3JtOyB9Ci0KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQotICAgIGJv
b2wgcHJlc2VydmVzM0QoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlczNEOyB9Ci0KLSAgICBi
b29sIG5lZWRzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUeXBlID09IFdlYkdMTGF5
ZXIgfHwgbV9sYXllclR5cGUgPT0gQ2FudmFzTGF5ZXIgfHwgbV9uZWVkc1RleHR1cmU7IH0KLQot
ICAgIGJvb2wgaXNGaXhlZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0ZpeGVkUG9zaXRp
b247IH0KLSAgICBib29sIGhhc0ZpeGVkQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNG
aXhlZENvbnRhaW5lcjsgfQotICAgIGJvb2wgaGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZTsgfQotICAgIGJvb2wgaXND
b250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnRh
aW5lckZvckZpeGVkUG9zaXRpb25MYXllcnM7IH0KLSAgICBib29sIGlzRml4ZWRUb1RvcCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNGaXhlZFRvVG9wOyB9Ci0gICAgYm9vbCBpc0ZpeGVkVG9MZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbV9pc0ZpeGVkVG9MZWZ0OyB9Ci0KLSAgICBJbnRSZWN0IGZyYW1lVmlz
aWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lVmlzaWJsZVJlY3Q7IH0KLSAgICBJbnRT
aXplIGZyYW1lQ29udGVudHNTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUNvbnRlbnRzU2l6
ZTsgfQotCi0gICAgUGx1Z2luVmlldyogcGx1Z2luVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1
Z2luVmlldzsgfQotCi0gICAgSW50UmVjdCBob2xlUHVuY2hSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9ob2xlUHVuY2hSZWN0OyB9Ci0gICAgYm9vbCBoYXNIb2xlUHVuY2hSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gIW1faG9sZVB1bmNoUmVjdC5pc0VtcHR5KCk7IH0KLQotICAgIGRvdWJsZSBjb250ZW50
c1NjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1NjYWxlOyB9Ci0KLSNpZiBFTkFCTEUo
VklERU8pCi0gICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9t
ZWRpYVBsYXllcjsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHJlcGxpY2F0ZShMYXllckRhdGEgKnRv
KSBjb25zdCB7ICp0byA9ICp0aGlzOyB9Ci0KLSAgICBMYXllclR5cGUgbGF5ZXJUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllclR5cGU7IH0KLQotICAgIGJvb2wgaXNDYW52YXNMYXllcigpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9sYXllclR5cGUgPT0gQ2FudmFzTGF5ZXI7Ci0g
ICAgfQotCi0gICAgYm9vbCBpc0xheWVyVmlzaWJsZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9pc1Zpc2libGU7Ci0gICAgfQotCi0gICAgYm9vbCBpbmNsdWRlVmlzaWJpbGl0eSgp
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiAocGx1Z2luVmlldygpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgICAgIGlmIChtZWRpYVBsYXllcigp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLQotICAgICAgICBpZiAoaXNDYW52
YXNMYXllcigpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIExheWVyVHlwZSBtX2xheWVyVHlwZTsKLQot
ICAgIEludFNpemUgbV9ib3VuZHM7Ci0gICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwotICAgIEZs
b2F0UG9pbnQgbV9hbmNob3JQb2ludDsKLSAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLSAg
ICBDb2xvciBtX2JvcmRlckNvbG9yOwotCi0gICAgRmxvYXRSZWN0IG1fZnJhbWU7Ci0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9zdWJsYXllclRyYW5zZm9ybTsKLQotICAgIGZsb2F0IG1fb3BhY2l0eTsKLSNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi0gICAgRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7Ci0jZW5kaWYKLSAg
ICBmbG9hdCBtX2FuY2hvclBvaW50WjsKLSAgICBmbG9hdCBtX2JvcmRlcldpZHRoOwotCi0gICAg
UGx1Z2luVmlldyogbV9wbHVnaW5WaWV3OwotI2lmIEVOQUJMRShWSURFTykKLSAgICBNZWRpYVBs
YXllciogbV9tZWRpYVBsYXllcjsKLSNlbmRpZgotICAgIEludFJlY3QgbV9ob2xlUHVuY2hSZWN0
OwotCi0gICAgSW50UmVjdCBtX2ZyYW1lVmlzaWJsZVJlY3Q7Ci0gICAgSW50U2l6ZSBtX2ZyYW1l
Q29udGVudHNTaXplOwotCi0gICAgZG91YmxlIG1fc3VzcGVuZFRpbWU7Ci0gICAgZG91YmxlIG1f
Y29udGVudHNTY2FsZTsKLQotICAgIHVuc2lnbmVkIG1fZG91YmxlU2lkZWQgOiAxOwotICAgIHVu
c2lnbmVkIG1fbWFza3NUb0JvdW5kcyA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc09wYXF1ZSA6IDE7
Ci0gICAgdW5zaWduZWQgbV9wcmVzZXJ2ZXMzRCA6IDE7Ci0gICAgdW5zaWduZWQgbV9uZWVkc0Rp
c3BsYXlPbkJvdW5kc0NoYW5nZSA6IDE7Ci0KLSAgICB1bnNpZ25lZCBtX25lZWRzVGV4dHVyZSA6
IDE7Ci0gICAgdW5zaWduZWQgbV9pc0ZpeGVkUG9zaXRpb24gOiAxOwotICAgIHVuc2lnbmVkIG1f
aGFzRml4ZWRDb250YWluZXIgOiAxOwotICAgIHVuc2lnbmVkIG1faGFzRml4ZWRBbmNlc3Rvcklu
RE9NVHJlZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25M
YXllcnM6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0ZpeGVkVG9Ub3AgOiAxOwotICAgIHVuc2lnbmVk
IG1faXNGaXhlZFRvTGVmdCA6IDE7Ci0KLSAgICB1bnNpZ25lZCBtX3NpemVJc1NjYWxlSW52YXJp
YW50IDogMTsKLSAgICB1bnNpZ25lZCBtX2NvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50IDog
MTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgb25seSBhdmFpbGFibGUgZm9yIG1lZGlhICh2
aWRlbyksIHBsdWdpbiBhbmQgY2FudmFzIGxheWVycy4KLSAgICB1bnNpZ25lZCBtX2lzVmlzaWJs
ZSA6IDE7Ci0KLSAgICAvLyBDQVVUSU9OOiBhbGwgdGhlIGRhdGEgbWVtYmVycyBhcmUgY29waWVk
IGZyb20gb25lIGluc3RhbmNlIHRvIGFub3RoZXIKLSAgICAvLyBpLmUuIGZyb20gb25lIHRocmVh
ZCB0byBhbm90aGVyIGluIHRoZSByZXBsaWNhdGUgbWV0aG9kLgotICAgIC8vIEJld2FyZSBvZiBh
ZGRpbmcgYW55IG1lbWJlciBkYXRhIGUuZy4gb2YgdHlwZSBTdHJpbmcgd2hvc2UgZGVmYXVsdAot
ICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3IgZG9lc24ndCBiZWhhdmUgcHJvcGVybHkgaWYgdGhl
IHR3byBTdHJpbmcgaW5zdGFuY2VzCi0gICAgLy8gYXJlIG93bmVkIGJ5IGRpZmZlcmVudCB0aHJl
YWRzLgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYgLy8gTGF5ZXJEYXRhX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRl
cmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShDU1NfRklMVEVSUykKLQot
I2luY2x1ZGUgIkxheWVyRmlsdGVyUmVuZGVyZXIuaCIKLQotI2luY2x1ZGUgIkZpbHRlck9wZXJh
dGlvbi5oIgotI2luY2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKLSNpbmNsdWRlICJM
YXllclJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJU
ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KLSNp
bmNsdWRlIDxWZWN0b3IuaD4KLQotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8bGltaXRz
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIFN1cmZhY2VGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBTdXJmYWNlRnVuY3RvcihM
YXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFjZSkKLSAgICAgICAgOiBtX3N1cmZhY2Uoc3VyZmFj
ZSkKLSAgICB7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgTGF5ZXJSZW5kZXJlclN1cmZhY2Uq
IG1fc3VyZmFjZTsKLX07Ci0KLWNsYXNzIEludmVyc2VTdXJmYWNlV2lkdGggOiBwdWJsaWMgU3Vy
ZmFjZUZ1bmN0b3IgewotcHVibGljOgotICAgIEludmVyc2VTdXJmYWNlV2lkdGgoTGF5ZXJSZW5k
ZXJlclN1cmZhY2UqIHN1cmZhY2UpIDogU3VyZmFjZUZ1bmN0b3Ioc3VyZmFjZSkgeyB9Ci0KLSAg
ICBmbG9hdCBvcGVyYXRvcigpICgpIHsgcmV0dXJuIDEuMGYgLyBtX3N1cmZhY2UtPnNpemUoKS53
aWR0aCgpOyB9Ci19OwotCi1jbGFzcyBJbnZlcnNlU3VyZmFjZUhlaWdodCA6IHB1YmxpYyBTdXJm
YWNlRnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgSW52ZXJzZVN1cmZhY2VIZWlnaHQoTGF5ZXJSZW5k
ZXJlclN1cmZhY2UqIHN1cmZhY2UpIDogU3VyZmFjZUZ1bmN0b3Ioc3VyZmFjZSkgeyB9Ci0KLSAg
ICBmbG9hdCBvcGVyYXRvcigpICgpIHsgcmV0dXJuIDEuMGYgLyBtX3N1cmZhY2UtPnNpemUoKS5o
ZWlnaHQoKTsgfQotfTsKLQotc3RhdGljIGludCBvcGVyYXRpb25UeXBlVG9Qcm9ncmFtSUQoY29u
c3QgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlJiB0KQotewotICAgIHN3aXRjaCAodCkg
ewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgICAgIHJldHVybiBM
YXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckdyYXlzY2FsZTsKLSAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0VQSUE6Ci0gICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclNl
cGlhOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICAgICAgcmV0dXJu
IExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2F0dXJhdGU7Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNo
YWRlckh1ZVJvdGF0ZTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgICAg
ICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJJbnZlcnQ7Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRl
clNoYWRlck9wYWNpdHk7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0g
ICAgICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJyaWdodG5lc3M7Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgICAgICByZXR1cm4gTGF5ZXJEYXRh
OjpDU1NGaWx0ZXJTaGFkZXJDb250cmFzdDsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxV
UjoKLSAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clk7Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgotICAgICAgICByZXR1cm4gTGF5ZXJE
YXRhOjpDU1NGaWx0ZXJTaGFkZXJTaGFkb3c7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006Ci0gICAgICAgIHJldHVybiBMYXllckRhdGE6
OkNTU0ZpbHRlclNoYWRlckN1c3RvbTsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi1Vbmlm
b3JtOjpVbmlmb3JtKGludCBjX2xvY2F0aW9uKQotICAgIDogbV9sb2NhdGlvbihjX2xvY2F0aW9u
KQotewotfQotCi12b2lkIFVuaWZvcm0xZjo6YXBwbHkoKQotewotICAgIGdsVW5pZm9ybTFmKGxv
Y2F0aW9uKCksIG1fdmFsKTsKLX0KLQotUGFzc1JlZlB0cjxVbmlmb3JtPiBVbmlmb3JtMWY6OmNy
ZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFVuaWZvcm0xZihsb2NhdGlvbiwgdmFsKSk7Ci19Ci0KLVVuaWZvcm0xZjo6VW5pZm9ybTFmKGlu
dCBjX2xvY2F0aW9uLCBmbG9hdCBjX3ZhbCkKLSAgICA6IFVuaWZvcm0oY19sb2NhdGlvbikKLSAg
ICAsIG1fdmFsKGNfdmFsKQotewotfQotCi12b2lkIFVuaWZvcm0xaTo6YXBwbHkoKQotewotICAg
IGdsVW5pZm9ybTFpKGxvY2F0aW9uKCksIG1fdmFsKTsKLX0KLQotUGFzc1JlZlB0cjxVbmlmb3Jt
PiBVbmlmb3JtMWk6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGludCB2YWwpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBVbmlmb3JtMWkobG9jYXRpb24sIHZhbCkpOwotfQotCi1Vbmlmb3JtMWk6
OlVuaWZvcm0xaShpbnQgY19sb2NhdGlvbiwgaW50IGNfdmFsKQotICAgIDogVW5pZm9ybShjX2xv
Y2F0aW9uKQotICAgICwgbV92YWwoY192YWwpCi17Ci19Ci0KLXZvaWQgVW5pZm9ybTJmOjphcHBs
eSgpCi17Ci0gICAgZ2xVbmlmb3JtMmYobG9jYXRpb24oKSwgbV92YWxbMF0sIG1fdmFsWzFdKTsK
LX0KLQotUGFzc1JlZlB0cjxVbmlmb3JtPiBVbmlmb3JtMmY6OmNyZWF0ZShpbnQgbG9jYXRpb24s
IGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmlm
b3JtMmYobG9jYXRpb24sIHZhbDAsIHZhbDEpKTsKLX0KLQotVW5pZm9ybTJmOjpVbmlmb3JtMmYo
aW50IGNfbG9jYXRpb24sIGZsb2F0IGNfdmFsMCwgZmxvYXQgY192YWwxKQotICAgIDogVW5pZm9y
bShjX2xvY2F0aW9uKQotewotICAgIG1fdmFsWzBdID0gY192YWwwOwotICAgIG1fdmFsWzFdID0g
Y192YWwxOwotfQotCi12b2lkIFVuaWZvcm0zZjo6YXBwbHkoKQotewotICAgIGdsVW5pZm9ybTNm
KGxvY2F0aW9uKCksIG1fdmFsWzBdLCBtX3ZhbFsxXSwgbV92YWxbMl0pOwotfQotCi1QYXNzUmVm
UHRyPFVuaWZvcm0+IFVuaWZvcm0zZjo6Y3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwg
ZmxvYXQgdmFsMSwgZmxvYXQgdmFsMikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaWZv
cm0zZihsb2NhdGlvbiwgdmFsMCwgdmFsMSwgdmFsMikpOwotfQotCi1Vbmlmb3JtM2Y6OlVuaWZv
cm0zZihpbnQgY19sb2NhdGlvbiwgZmxvYXQgY192YWwwLCBmbG9hdCBjX3ZhbDEsIGZsb2F0IGNf
dmFsMikKLSAgICA6IFVuaWZvcm0oY19sb2NhdGlvbikKLXsKLSAgICBtX3ZhbFswXSA9IGNfdmFs
MDsKLSAgICBtX3ZhbFsxXSA9IGNfdmFsMTsKLSAgICBtX3ZhbFsyXSA9IGNfdmFsMjsKLX0KLQot
dm9pZCBVbmlmb3JtNGY6OmFwcGx5KCkKLXsKLSAgICBnbFVuaWZvcm00Zihsb2NhdGlvbigpLCBt
X3ZhbFswXSwgbV92YWxbMV0sIG1fdmFsWzJdLCBtX3ZhbFszXSk7Ci19Ci0KLVBhc3NSZWZQdHI8
VW5pZm9ybT4gVW5pZm9ybTRmOjpjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9h
dCB2YWwxLCBmbG9hdCB2YWwyLCBmbG9hdCB2YWwzKQotewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVW5pZm9ybTRmKGxvY2F0aW9uLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKSk7Ci19Ci0KLVVu
aWZvcm00Zjo6VW5pZm9ybTRmKGludCBjX2xvY2F0aW9uLCBmbG9hdCBjX3ZhbDAsIGZsb2F0IGNf
dmFsMSwgZmxvYXQgY192YWwyLCBmbG9hdCBjX3ZhbDMpCi0gICAgOiBVbmlmb3JtKGNfbG9jYXRp
b24pCi17Ci0gICAgbV92YWxbMF0gPSBjX3ZhbDA7Ci0gICAgbV92YWxbMV0gPSBjX3ZhbDE7Ci0g
ICAgbV92YWxbMl0gPSBjX3ZhbDI7Ci0gICAgbV92YWxbM10gPSBjX3ZhbDM7Ci19Ci0KLXZvaWQg
TWF0cml4NGZ2OjphcHBseSgpCi17Ci0gICAgZ2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uKCks
IG1fc2l6ZSwgbV90cmFuc3Bvc2UsIG1fYXJyYXkpOwotfQotCi1QYXNzUmVmUHRyPFBhcmFtZXRl
cj4gTWF0cml4NGZ2OjpjcmVhdGUoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgc2l6ZSwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0xmbG9hdCogYXJyYXkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpKTsKLX0KLQotTWF0
cml4NGZ2OjpNYXRyaXg0ZnYoR0xpbnQgY2xvY2F0aW9uLCBHTHNpemVpIHNpemUsIEdMYm9vbGVh
biB0cmFuc3Bvc2UsIEdMZmxvYXQqIGFycmF5KQotICAgIDogVW5pZm9ybShjbG9jYXRpb24pCi0g
ICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fdHJhbnNwb3NlKHRyYW5zcG9zZSkKLSAgICAsIG1f
YXJyYXkoMCkKLXsKLSAgICBtX2FycmF5ID0gbmV3IEdMZmxvYXRbc2l6ZSAqIDQgKiA0XTsKLSAg
ICBzdGQ6Om1lbWNweShtX2FycmF5LCBhcnJheSwgc2l6ZSAqIDQgKiA0ICogc2l6ZW9mKEdMZmxv
YXQpKTsKLX0KLQotTWF0cml4NGZ2Ojp+TWF0cml4NGZ2KCkKLXsKLSAgICBkZWxldGVbXSBtX2Fy
cmF5OwotfQotCi12b2lkIEJ1ZmZlcjo6YXBwbHkoKQotewotICAgIGdsQmluZEJ1ZmZlcihtX2J1
ZmZlciwgbV9vYmplY3QpOwotfQotCi12b2lkIEJ1ZmZlcjo6cmVzdG9yZVN0YXRlKCkKLXsKLSAg
ICBnbEJpbmRCdWZmZXIobV9idWZmZXIsIDApOwotfQotCi1QYXNzUmVmUHRyPFBhcmFtZXRlcj4g
QnVmZmVyOjpjcmVhdGUoR0xlbnVtIGJ1ZmZlciwgR0x1aW50IG9iamVjdCkKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcihidWZmZXIsIG9iamVjdCkpOwotfQotCi1CdWZmZXI6OkJ1
ZmZlcihHTGVudW0gYnVmZmVyLCBHTHVpbnQgb2JqZWN0KQotICAgIDogUGFyYW1ldGVyKCkKLSAg
ICAsIG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1fb2JqZWN0KG9iamVjdCkKLXsKLX0KLQotdm9p
ZCBWZXJ0ZXhBdHRyaWJmOjphcHBseSgpCi17Ci0gICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1f
bG9jYXRpb24sIG1fc2l6ZSwgR0xfRkxPQVQsIGZhbHNlLCBtX2J5dGVzUGVyVmVydGV4LCByZWlu
dGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihtX29mZnNldCkpKTsK
LSAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fbG9jYXRpb24pOwotfQotCi12b2lkIFZl
cnRleEF0dHJpYmY6OnJlc3RvcmVTdGF0ZSgpCi17Ci0gICAgZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkobV9sb2NhdGlvbik7Ci19Ci0KLVBhc3NSZWZQdHI8UGFyYW1ldGVyPiBWZXJ0ZXhBdHRy
aWJmOjpjcmVhdGUoaW50IGxvY2F0aW9uLCBpbnQgc2l6ZSwgaW50IGJ5dGVzUGVyVmVydGV4LCBp
bnQgb2Zmc2V0KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmVydGV4QXR0cmliZihsb2Nh
dGlvbiwgc2l6ZSwgYnl0ZXNQZXJWZXJ0ZXgsIG9mZnNldCkpOwotfQotCi0KLVZlcnRleEF0dHJp
YmY6OlZlcnRleEF0dHJpYmYoaW50IGxvY2F0aW9uLCBpbnQgc2l6ZSwgaW50IGJ5dGVzUGVyVmVy
dGV4LCBpbnQgb2Zmc2V0KQotICAgIDogUGFyYW1ldGVyKCkKLSAgICAsIG1fbG9jYXRpb24obG9j
YXRpb24pCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fYnl0ZXNQZXJWZXJ0ZXgoYnl0ZXNQ
ZXJWZXJ0ZXgpCi0gICAgLCBtX29mZnNldChvZmZzZXQpCi17Ci19Ci0KLVBhc3NSZWZQdHI8TGF5
ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRl
KGludCBwcm9ncmFtSWQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllckZpbHRlclJl
bmRlcmVyQWN0aW9uKHByb2dyYW1JZCkpOwotfQotCi1MYXllckZpbHRlclJlbmRlcmVyQWN0aW9u
OjpMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uKGludCBjX3Byb2dyYW1JZCkKLSAgICA6IG1fcHJv
Z3JhbUlkKGNfcHJvZ3JhbUlkKQotICAgICwgbV9wdXNoU25hcHNob3QoZmFsc2UpCi0gICAgLCBt
X3BvcFNuYXBzaG90KGZhbHNlKQotICAgICwgbV9kcmF3aW5nTW9kZShEcmF3VHJpYW5nbGVGYW5B
cnJheXMpCi17Ci19Ci0KLXZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6dXNlQWN0aW9u
T24oTGF5ZXJGaWx0ZXJSZW5kZXJlciogcmVuZGVyZXIpCi17Ci0gICAgQVNTRVJUKG1fcHJvZ3Jh
bUlkICE9IC0xKTsKLSAgICBpZiAobV9wcm9ncmFtSWQgPT0gLTEpIHsKLSAgICAgICAgZ2xVc2VQ
cm9ncmFtKHJlbmRlcmVyLT5tX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpDU1NG
aWx0ZXJTaGFkZXJQYXNzdGhyb3VnaF0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGds
VXNlUHJvZ3JhbShyZW5kZXJlci0+bV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W21fcHJvZ3JhbUlk
XSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGFyYW1ldGVycy5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV9wYXJhbWV0ZXJzW2ldLT5hcHBseSgpOwotfQotCi12b2lkIExheWVyRmls
dGVyUmVuZGVyZXJBY3Rpb246OnJlc3RvcmVTdGF0ZSgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fcGFyYW1ldGVycy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9wYXJhbWV0ZXJz
W2ldLT5yZXN0b3JlU3RhdGUoKTsKLX0KLQotUGFzc093blB0cjxMYXllckZpbHRlclJlbmRlcmVy
PiBMYXllckZpbHRlclJlbmRlcmVyOjpjcmVhdGUoY29uc3QgaW50JiBwb3NpdGlvbkxvY2F0aW9u
LCBjb25zdCBpbnQmIHRleENvb3JkTG9jYXRpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBMYXllckZpbHRlclJlbmRlcmVyKHBvc2l0aW9uTG9jYXRpb24sIHRleENvb3JkTG9jYXRpb24p
KTsKLX0KLQotTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6TGF5ZXJGaWx0ZXJSZW5kZXJlcihjb25zdCBp
bnQmIHBvc2l0aW9uTG9jYXRpb24sIGNvbnN0IGludCYgdGV4Q29vcmRMb2NhdGlvbikKLSAgICA6
IG1fcG9zaXRpb25Mb2NhdGlvbihwb3NpdGlvbkxvY2F0aW9uKQotICAgICwgbV90ZXhDb29yZExv
Y2F0aW9uKHRleENvb3JkTG9jYXRpb24pCi17Ci0gICAgLy8gSWYgeW91IGV2ZXIgbW92ZSB0aGlz
IHN0dWZmLCBwbGVhc2UgbWFrZSBzdXJlIHRoYXQKLSAgICAvLyBldmVyeXRoaW5nIGluIHRoaXMg
Y29uc3RydWN0b3IgaXMgY2FsbGVkIEJFRk9SRSBhY3Rpb25zRm9yT3BlcmF0aW9ucy4KLQotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnM7
ICsraSkKLSAgICAgICAgbV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldID0gMDsKLQotICAgIGlm
ICghKG1fZW5hYmxlZCA9IGluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKSkpCi0gICAgICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xl
dmVsV2FybiwgIkNTUyBGaWx0ZXJzIGFyZSBub3QgZW5hYmxlZCBkdWUgdG8gZmFpbGVkIGluaXRp
YWxpemF0aW9uLiIpOwotfQotCi0vLyBCaW5kcyB0aGUgZ2l2ZW4gYXR0cmlidXRlIG5hbWUgdG8g
YSBjb21tb24gbG9jYXRpb24gYWNyb3NzIGFsbCBwcm9ncmFtcwotLy8gdXNlZCBieSB0aGUgY29t
cG9zaXRvci4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdG8gYmluZCB0aGUgYXR0cmlidXRlcyBvbmx5
IG9uY2UKLS8vIGV2ZW4gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBwcm9ncmFtcy4KLS8vCi0vLyBU
aGlzIGlzIGFuIGV4dGVuc2lvbiBvZiBMYXllclJlbmRlcmVyOjpiaW5kQ29tbW9uQXR0cmliTG9j
YXRpb24gYW5kIHRoZSBsb2NhdGlvbnMKLS8vIHdpbGwgbWF0Y2ggdGhvc2Ugb2YgTGF5ZXJSZW5k
ZXJlci4gU2VlIExheWVyRmlsdGVyUmVuZGVyZXI6OkxheWVyRmlsdGVyUmVuZGVyZXIoKQotdm9p
ZCBMYXllckZpbHRlclJlbmRlcmVyOjpiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24oaW50IGxvY2F0
aW9uLCBjb25zdCBjaGFyKiBhdHRyaWJOYW1lKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnM7ICsraSkKLSAgICAgICAgZ2xCaW5k
QXR0cmliTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldLCBsb2NhdGlvbiwgYXR0
cmliTmFtZSk7Ci19Ci0KLWJvb2wgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJl
ZEdMT2JqZWN0cygpCi17Ci0gICAgLy8gU2VlIGFsc28gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuY3BwCi0KLSAgICBjaGFyIHN0YW5kYXJkVmVydGV4U2hhZGVyU3RyaW5nW10gPQotICAgICAg
ICAiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsgICBcbiIKLSAgICAgICAgImF0dHJpYnV0ZSB2
ZWMyIGFfdGV4Q29vcmQ7ICAgXG4iCi0gICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsg
ICAgIFxuIgotICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBcbiIKLSAgICAg
ICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICIgIGdsX1Bvc2l0
aW9uID0gYV9wb3NpdGlvbjsgIFxuIgotICAgICAgICAiICB2X3RleENvb3JkID0gYV90ZXhDb29y
ZDsgICBcbiIKLSAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwotCi0g
ICAgY2hhciBvZmZzZXRWZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9Ci0gICAgICAgICJhdHRyaWJ1dGUg
dmVjNCBhX3Bvc2l0aW9uOyAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJhdHRyaWJ1dGUgdmVj
MiBhX3RleENvb3JkOyAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIG1lZGl1bXAg
dmVjMiB1X29mZnNldDsgICAgICAgICAgXG4iCi0gICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhD
b29yZDsgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICIgIGdsX1Bvc2l0aW9uID0gYV9wb3NpdGlvbjsg
ICAgICAgICAgICAgXG4iCi0gICAgICAgICIgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkIC0gdV9v
ZmZzZXQ7ICAgXG4iCi0gICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iOwotCi0jZGVmaW5lIFNUQU5EQVJEX0ZJTFRFUih4Li4uKSBcCi0gICAgICAgICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgXG4iXAotICAgICAgICAiXG4iXAotICAgICAgICAidmFy
eWluZyBtZWRpdW1wIHZlYzIgdl90ZXhDb29yZDtcbiJcCi0gICAgICAgICJ1bmlmb3JtIGxvd3Ag
c2FtcGxlcjJEIHNfdGV4dHVyZTtcbiJcCi0gICAgICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVf
YW1vdW50O1xuIlwKLSN4XAotICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4geyBnbF9GcmFnQ29s
b3IgPSBzaGFkZSh0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkKSk7IH0iCi0KLSNkZWZp
bmUgQkxVUl9GSUxURVIoeC4uLikgXAotICAgICAgICAicHJlY2lzaW9uIGhpZ2hwIGZsb2F0OyBc
biJcCi0gICAgICAgICJcbiJcCi0gICAgICAgICJ2YXJ5aW5nIG1lZGl1bXAgdmVjMiB2X3RleENv
b3JkO1xuIlwKLSAgICAgICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190ZXh0dXJlO1xuIlwK
LSAgICAgICAgInVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hbW91bnQ7XG4iXAotICAgICAgICAidW5p
Zm9ybSBoaWdocCBmbG9hdCB1X2JsdXJTaXplO1xuIlwKLSAgICAgICAgImNvbnN0IGZsb2F0IHBp
ID0gMy4xNDE1OTI3O1xuIlwKLSN4XAotICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4iXAotICAg
ICAgICAie1xuIlwKLSAgICAgICAgInZlYzMgaW5jcjtcbiJcCi0gICAgICAgICJpbmNyLnggPSAx
LjAgLyAoc3FydCgyLjAgKiBwaSkgKiB1X2Ftb3VudCk7XG4iXAotICAgICAgICAiaW5jci55ID0g
ZXhwKC0wLjUgLyAodV9hbW91bnQgKiB1X2Ftb3VudCkpO1xuIlwKLSAgICAgICAgImluY3IueiA9
IGluY3IueSAqIGluY3IueTtcbiJcCi0gICAgICAgICJcbiJcCi0gICAgICAgICJ2ZWM0IGF2ZyA9
IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiJcCi0gICAgICAgICJmbG9hdCBjb2VmZmljaWVu
dFN1bSA9IDAuMDtcbiJcCi0gICAgICAgICJcbiJcCi0gICAgICAgICJhdmcgKz0gdGV4dHVyZTJE
KHNfdGV4dHVyZSwgdl90ZXhDb29yZC54eSkgKiBpbmNyLng7XG4iXAotICAgICAgICAiY29lZmZp
Y2llbnRTdW0gKz0gaW5jci54O1xuIlwKLSAgICAgICAgImluY3IueHkgKj0gaW5jci55ejtcbiJc
Ci0gICAgICAgICJcbiJcCi0gICAgICAgICJmb3IgKGZsb2F0IGkgPSAxLjA7IGkgPD0gdV9hbW91
bnQ7IGkrKykge1xuIlwKLSAgICAgICAgIiAgICBhdmcgKz0gdGV4dHVyZTJEKHNfdGV4dHVyZSwg
dl90ZXhDb29yZC54eSAtIGkgKiB1X2JsdXJTaXplICogYmx1ck11bHRpcGx5VmVjKSAqIGluY3Iu
eDtcbiJcCi0gICAgICAgICIgICAgYXZnICs9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29v
cmQueHkgKyBpICogdV9ibHVyU2l6ZSAqIGJsdXJNdWx0aXBseVZlYykgKiBpbmNyLng7XG4iXAot
ICAgICAgICAiICAgIGNvZWZmaWNpZW50U3VtICs9IDIuMCAqIGluY3IueDtcbiJcCi0gICAgICAg
ICIgICAgaW5jci54eSAqPSBpbmNyLnl6O1xuIlwKLSAgICAgICAgIn1cbiJcCi0gICAgICAgICJc
biJcCi0gICAgICAgICJnbF9GcmFnQ29sb3IgPSBhdmcgLyBjb2VmZmljaWVudFN1bTtcbiJcCi0g
ICAgICAgICJ9IgotCi0gICAgY29uc3QgY2hhciogc2hhZGVyU3Ryc1tMYXllckRhdGE6Ok51bWJl
ck9mQ1NTRmlsdGVyU2hhZGVyc107Ci0KLSAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmls
dGVyU2hhZGVyR3JheXNjYWxlXSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgbG93cCB2ZWM0
IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgewotICAgICAgICAgICAgbG93cCBmbG9h
dCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKLSAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjIx
MjYgKyAwLjc4NzQgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91
bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKLSAg
ICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43
MTUyICsgMC4yODQ4ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1v
dW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAu
MDcyMiArIDAuOTI3OCAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgIGNvbG9y
LmEpOwotICAgICAgICB9Ci0gICAgKTsKLQotICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NG
aWx0ZXJTaGFkZXJTZXBpYV0gPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgIGxvd3AgdmVjNCBz
aGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgZmxvYXQg
YW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7Ci0gICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4zOTMg
KyAwLjYwNyAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91bnQpICog
Y29sb3IuZyArICgwLjE4OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAg
ICAgICAgKDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQpICogY29sb3IuciArICgwLjY4NiArIDAuMzE0
ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xNjggLSAwLjE2OCAqIGFtb3VudCkgKiBjb2xvci5i
LAotICAgICAgICAgICAgICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNvbG9yLnIgKyAo
MC41MzQgLSAwLjUzNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44NjkgKiBhbW91
bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAgICAgfQotICAg
ICk7Ci0KLSAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2F0dXJhdGVd
ID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNv
bG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4NyAq
IHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9y
LmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAg
ICAgKDAuMjEzIC0gMC4yMTMgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1ICsgMC4yODUg
KiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xv
ci5iLAotICAgICAgICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9hbW91bnQpICogY29sb3Iu
ciArICgwLjcxNSAtIDAuNzE1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiArIDAuOTI4
ICogdV9hbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAg
ICAgfQotICAgICk7Ci0KLSAgICBzaGFkZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVy
SHVlUm90YXRlXSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxv
d3AgdmVjNCBjb2xvcikKLSAgICAgICAgewotICAgICAgICAgICAgaGlnaHAgZmxvYXQgcGkgPSAz
LjE0MTU5MjY1MzU4OTc5MzIzODQ2OwotICAgICAgICAgICAgaGlnaHAgZmxvYXQgYyA9IGNvcyh1
X2Ftb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgaGlnaHAgZmxvYXQgcyA9IHNpbih1
X2Ftb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciAq
ICgwLjIxMyArIGMgKiAwLjc4NyAtIHMgKiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAq
IDAuNzE1IC0gcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICog
MC45MjgpLAotICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgKyBz
ICogMC4xNDMpICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAwLjE0MCkgKyBj
b2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwKLSAgICAgICAgICAgICAg
ICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAuNzg3KSArICBjb2xvci5nICog
KDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgKyBjICog
MC45MjggKyBzICogMC4wNzIpLAotICAgICAgICAgICAgICAgIGNvbG9yLmEpOwotICAgICAgICB9
Ci0gICAgKTsKLQotICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJJbnZl
cnRdID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICBsb3dwIGZsb2F0IGludmVydChsb3dwIGZs
b2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAgLSB1X2Ftb3Vu
dCk7IH0KLSAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZlcnQoY29sb3Iu
ZyksIGludmVydChjb2xvci5iKSwgY29sb3IuYSk7Ci0gICAgICAgIH0KLSAgICApOwotCi0gICAg
c2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJyaWdodG5lc3NdID0gU1RBTkRB
UkRfRklMVEVSKAotICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yZ2IgKiAoMS4wICsgdV9hbW91
bnQpLCBjb2xvci5hKTsKLSAgICAgICAgfQotICAgICk7Ci0KLSAgICBzaGFkZXJTdHJzW0xheWVy
RGF0YTo6Q1NTRmlsdGVyU2hhZGVyQ29udHJhc3RdID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAg
ICBsb3dwIGZsb2F0IGNvbnRyYXN0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKG4gLSAwLjUpICog
dV9hbW91bnQgKyAwLjU7IH0KLSAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xv
cikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3QoY29sb3Iuciks
IGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7Ci0gICAgICAg
IH0KLSAgICApOwotCi0gICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlck9w
YWNpdHldID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2
ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yLCBj
b2xvci5nLCBjb2xvci5iLCBjb2xvci5hICogdV9hbW91bnQpOwotICAgICAgICB9Ci0gICAgKTsK
LQotICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWF0gPSBCTFVS
X0ZJTFRFUigKLSAgICAgICAgY29uc3QgdmVjMiAgYmx1ck11bHRpcGx5VmVjICAgICAgPSB2ZWMy
KDEuMCwgMC4wKTsKLSAgICApOwotCi0gICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRl
clNoYWRlckJsdXJZXSA9IEJMVVJfRklMVEVSKAotICAgICAgICBjb25zdCB2ZWMyICBibHVyTXVs
dGlwbHlWZWMgICAgICA9IHZlYzIoMC4wLCAxLjApOwotICAgICk7Ci0KLSAgICBzaGFkZXJTdHJz
W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2hhZG93XSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAg
ICAgICAgdW5pZm9ybSBsb3dwIHZlYzMgdV9jb2xvcjsKLSAgICAgICAgbG93cCB2ZWM0IHNoYWRl
KGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNvbG9yLmEgPiAw
LjUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQodV9jb2xvci5yLCB1X2NvbG9yLmcsIHVf
Y29sb3IuYiwgY29sb3IuYSk7Ci0gICAgICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgICAgIH0K
LSAgICApOwotCi0gICAgc2hhZGVyU3Ryc1tMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclBhc3N0
aHJvdWdoXSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgICAg
ICB9Ci0gICAgKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTGF5ZXJEYXRhOjpOdW1iZXJP
ZkNTU0ZpbHRlclNoYWRlcnM7IGkrKykgewotICAgICAgICBpZiAoaSA9PSBMYXllckRhdGE6OkNT
U0ZpbHRlclNoYWRlclNoYWRvdykKLSAgICAgICAgICAgIG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVj
dFtpXSA9IExheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXJQcm9ncmFtKG9mZnNldFZlcnRleFNoYWRl
clN0cmluZywgc2hhZGVyU3Ryc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3Nz
RmlsdGVyUHJvZ3JhbU9iamVjdFtpXSA9IExheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXJQcm9ncmFt
KHN0YW5kYXJkVmVydGV4U2hhZGVyU3RyaW5nLCBzaGFkZXJTdHJzW2ldKTsKLSAgICAgICAgaWYg
KCFtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbaV0pIHsKLSAgICAgICAgICAgIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsV2Fybiwg
IkNvdWxkIG5vdCBsb2FkIENTUyBGaWx0ZXIgU2hhZGVyICVpIiwgaSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgQVRUUklCIGxvY2F0
aW9ucyAtIHRoZXNlIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIHByb2dyYW1zIGluIExheWVyUmVu
ZGVyZXIuY3BwCi0gICAgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKG1fcG9zaXRpb25Mb2NhdGlv
biwgImFfcG9zaXRpb24iKTsKLSAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24obV90ZXhDb29y
ZExvY2F0aW9uLCAiYV90ZXhDb29yZCIpOwotCi0gICAgLy8gUmUtbGluayB0byB0YWtlIGVmZmVj
dAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTGF5ZXJEYXRhOjpOdW1iZXJPZkNTU0ZpbHRlclNo
YWRlcnM7ICsraSkKLSAgICAgICAgZ2xMaW5rUHJvZ3JhbShtX2Nzc0ZpbHRlclByb2dyYW1PYmpl
Y3RbaV0pOwotCi0gICAgLy8gR2V0IFVOSUZPUk0gbG9jYXRpb25zCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyczsgKytpKQotICAgICAg
ICBtX2Ftb3VudExvY2F0aW9uW2ldID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9jc3NGaWx0ZXJQ
cm9ncmFtT2JqZWN0W2ldLCAidV9hbW91bnQiKTsKLQotICAgIG1fYmx1ckFtb3VudExvY2F0aW9u
WzBdID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVy
RGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clldLCAidV9ibHVyU2l6ZSIpOwotICAgIG1fYmx1ckFt
b3VudExvY2F0aW9uWzFdID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9jc3NGaWx0ZXJQcm9ncmFt
T2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clhdLCAidV9ibHVyU2l6ZSIpOwot
Ci0gICAgbV9zaGFkb3dDb2xvckxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9jc3NG
aWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2hhZG93XSwgInVf
Y29sb3IiKTsKLSAgICBtX29mZnNldExvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9j
c3NGaWx0ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2hhZG93XSwg
InVfb2Zmc2V0Iik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXllckZpbHRlclJl
bmRlcmVyOjpwaW5nKExheWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNlKQotewotICAgIEdMdWlu
dCB0ZXhpZCA9IG1fdGV4dHVyZS0+cGxhdGZvcm1UZXh0dXJlKCk7Ci0KLSAgICBnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEKAotICAgICAgICBHTF9GUkFNRUJVRkZFUiwKLSAgICAgICAgR0xfQ09MT1Jf
QVRUQUNITUVOVDAsCi0gICAgICAgIEdMX1RFWFRVUkVfMkQsCi0gICAgICAgIHRleGlkLAotICAg
ICAgICAwCi0gICAgKTsKLSAgICBnbEJpbmRUZXh0dXJlKAotICAgICAgICBHTF9URVhUVVJFXzJE
LAotICAgICAgICBzdXJmYWNlLT50ZXh0dXJlKCktPnBsYXRmb3JtVGV4dHVyZSgpCi0gICAgKTsK
LX0KLQotdm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjpwb25nKExheWVyUmVuZGVyZXJTdXJmYWNl
KiBzdXJmYWNlKQotewotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoCi0gICAgICAgIEdMX0ZS
QU1FQlVGRkVSLAotICAgICAgICBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwKLSAgICAgICAgR0xfVEVY
VFVSRV8yRCwKLSAgICAgICAgc3VyZmFjZS0+dGV4dHVyZSgpLT5wbGF0Zm9ybVRleHR1cmUoKSwK
LSAgICAgICAgMAotICAgICk7Ci0gICAgZ2xCaW5kVGV4dHVyZSgKLSAgICAgICAgR0xfVEVYVFVS
RV8yRCwKLSAgICAgICAgbV90ZXh0dXJlLT5wbGF0Zm9ybVRleHR1cmUoKQotICAgICk7Ci19Ci0K
LXZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cHVzaFNuYXBzaG90KExheWVyUmVuZGVyZXJTdXJm
YWNlKiBzdXJmYWNlLCBpbnQgc291cmNlSWQpCi17Ci0gICAgR0x1aW50IHRleGlkID0gbV9zbmFw
c2hvdFRleHR1cmUtPnBsYXRmb3JtVGV4dHVyZSgpOwotCi0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRCgKLSAgICAgICAgR0xfRlJBTUVCVUZGRVIsCi0gICAgICAgIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLAotICAgICAgICBHTF9URVhUVVJFXzJELAotICAgICAgICB0ZXhpZCwKLSAgICAgICAgMAot
ICAgICk7Ci0KLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHNvdXJjZUlkKTsKLSAg
ICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOyAvLyB0byB0cmFuc3BhcmVuY3kKLQotICAg
IGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCksIHN1cmZhY2UtPnNpemUo
KS5oZWlnaHQoKSk7Ci0KLSAgICBnbFVzZVByb2dyYW0obV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0
W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91Z2hdKTsKLSAgICBnbERyYXdBcnJh
eXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKLX0KLQotdm9pZCBMYXllckZpbHRlclJlbmRlcmVy
Ojpwb3BTbmFwc2hvdCgpCi17Ci0gICAgLy8gVGhlIG5hbWUgaXMgc2xpZ2h0bHkgbWlzbGVhZGlu
Zy4KLSAgICAvLyBUaGlzIERSQVdTIHRoZSBwcmV2aW91cyB0ZXh0dXJlIHVzaW5nIHRoZSBjdXJy
ZW50IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24sIHRoZW4gc2V0cyB0aGUgdGV4dHVyZQotICAg
IC8vIHRvIHRoZSBzbmFwc2hvdCB0ZXh0dXJlLiBOZXh0IHRpbWUgZ2xEcmF3QXJyYXlzIGlzIGNh
bGxlZCwgdGhlIHNuYXBzaG90IHdpbGwgYmUgZHJhd24uCi0KLSAgICBnbERyYXdBcnJheXMoR0xf
VFJJQU5HTEVfRkFOLCAwLCA0KTsKLSAgICBnbEJpbmRUZXh0dXJlKAotICAgICAgICBHTF9URVhU
VVJFXzJELAotICAgICAgICBtX3NuYXBzaG90VGV4dHVyZS0+cGxhdGZvcm1UZXh0dXJlKCkKLSAg
ICApOwotfQotCi1WZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gTGF5
ZXJGaWx0ZXJSZW5kZXJlcjo6YWN0aW9uc0Zvck9wZXJhdGlvbnMoTGF5ZXJSZW5kZXJlclN1cmZh
Y2UqIHN1cmZhY2UsIGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBvcHMp
Ci17Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IHJldDsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uID0gKm9wc1tpXS5nZXQoKTsKLSAgICAg
ICAgaWYgKG9wZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpC
TFVSICYmIHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24p
LnN0ZERldmlhdGlvbigpLnZhbHVlKCkgPCAwLjEpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBpbnQgcHJvZ3JhbUlkID0gb3BlcmF0aW9uVHlwZVRvUHJvZ3JhbUlEKG9wZXJhdGlv
bi5nZXRPcGVyYXRpb25UeXBlKCkpOwotICAgICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVyUmVu
ZGVyZXJBY3Rpb246OmNyZWF0ZShwcm9ncmFtSWQpKTsKLQotICAgICAgICBzd2l0Y2ggKG9wZXJh
dGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRToKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1l
dGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bcHJvZ3JhbUlkXQotICAgICAg
ICAgICAgICAgICwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QlJJR0hUTkVTUzoKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNU
OgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgICAgIHJl
dC5sYXN0KCktPmFwcGVuZFBhcmFtZXRlcihVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0
aW9uW3Byb2dyYW1JZF0KLSAgICAgICAgICAgICAgICAsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBCbHVyIGlzIGEgdHdvLXN0ZXAgcHJvY2Vz
czoKLSAgICAgICAgICAgIC8vICAgICAxLiBibHVyIFgKLSAgICAgICAgICAgIC8vICAgICAyLiBi
bHVyIFkKLSAgICAgICAgICAgIC8vIFRoaXMgd2F5IHdlIGNhbiBoYXZlIDJuIHRpbWUgaW5zdGVh
ZCBvZiBuXjIgdGltZSkKLQotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLnN0ZERldmlhdGlvbigpLnZh
bHVlKCk7Ci0KLSAgICAgICAgICAgIC8vIEJMVVIgWToKLSAgICAgICAgICAgIHJldC5sYXN0KCkt
PmFwcGVuZFBhcmFtZXRlcihVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9uW0xheWVy
RGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clldLCBhbW91bnQpKTsKLSAgICAgICAgICAgIHJldC5s
YXN0KCktPmFwcGVuZFBhcmFtZXRlcihVbmlmb3JtMWY6OmNyZWF0ZVdpdGhGdW5jdG9yKG1fYmx1
ckFtb3VudExvY2F0aW9uWzBdLCBJbnZlcnNlU3VyZmFjZUhlaWdodChzdXJmYWNlKSkpOwotCi0g
ICAgICAgICAgICAvLyBCTFVSIFg6Ci0gICAgICAgICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVy
UmVuZGVyZXJBY3Rpb246OmNyZWF0ZShMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJYKSk7
Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0ZXIoVW5pZm9ybTFmOjpjcmVh
dGUobV9hbW91bnRMb2NhdGlvbltMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJYXSwgYW1v
dW50KSk7Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0ZXIoVW5pZm9ybTFm
OjpjcmVhdGVXaXRoRnVuY3RvcihtX2JsdXJBbW91bnRMb2NhdGlvblsxXSwgSW52ZXJzZVN1cmZh
Y2VXaWR0aChzdXJmYWNlKSkpOwotCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgotICAgICAgICAgICAg
ewotICAgICAgICAgICAgLy8gU2hhZG93IGlzIGEgZm91ci1zdGVwIHByb2Nlc3M6Ci0gICAgICAg
ICAgICAvLyAgICAgMS4gY2FwdHVyZSBzbmFwc2hvdAotICAgICAgICAgICAgLy8gICAgICAgIHR1
cm4gaW50byBhIHNvbGlkIG9mZnNldCBtYXNrCi0gICAgICAgICAgICAvLyAgICAgMi4gYmx1ciBY
Ci0gICAgICAgICAgICAvLyAgICAgMy4gYmx1ciBZCi0gICAgICAgICAgICAvLyAgICAgNC4gcmVw
YWludCBvcmlnaW5hbCBvbiB0b3Agb2YgbWFzawotICAgICAgICAgICAgY29uc3QgRHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbiYgZHNmbyA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0
ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwotICAgICAgICAgICAgcmV0Lmxhc3QoKS0+c2V0UHVz
aFNuYXBzaG90KCk7Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0ZXIoVW5p
Zm9ybTJmOjpjcmVhdGUobV9vZmZzZXRMb2NhdGlvbgotICAgICAgICAgICAgICAgICwgZmxvYXQo
ZHNmby54KCkpIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCkpCi0gICAgICAgICAgICAg
ICAgLCBmbG9hdChkc2ZvLnkoKSkgLyBmbG9hdChzdXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpKSk7
Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0ZXIoVW5pZm9ybTNmOjpjcmVh
dGUobV9zaGFkb3dDb2xvckxvY2F0aW9uCi0gICAgICAgICAgICAgICAgLCBmbG9hdChkc2ZvLmNv
bG9yKCkucmVkKCkpIC8gMjU1LjBmCi0gICAgICAgICAgICAgICAgLCBmbG9hdChkc2ZvLmNvbG9y
KCkuZ3JlZW4oKSkgLyAyNTUuMGYKLSAgICAgICAgICAgICAgICAsIGZsb2F0KGRzZm8uY29sb3Io
KS5ibHVlKCkpIC8gMjU1LjBmKSk7Ci0KLSAgICAgICAgICAgIC8vIEJMVVIgWQotICAgICAgICAg
ICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpjcmVhdGUoTGF5ZXJEYXRh
OjpDU1NGaWx0ZXJTaGFkZXJCbHVyWSkpOwotICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5k
UGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpD
U1NGaWx0ZXJTaGFkZXJCbHVyWV0KLSAgICAgICAgICAgICAgICAsIGRzZm8uc3RkRGV2aWF0aW9u
KCkpKTsKLSAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFBhcmFtZXRlcihVbmlmb3JtMWY6
OmNyZWF0ZVdpdGhGdW5jdG9yKG1fYmx1ckFtb3VudExvY2F0aW9uWzBdLCBJbnZlcnNlU3VyZmFj
ZUhlaWdodChzdXJmYWNlKSkpOwotCi0gICAgICAgICAgICAvLyBCTFVSIFgKLSAgICAgICAgICAg
IHJldC5hcHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKExheWVyRGF0YTo6
Q1NTRmlsdGVyU2hhZGVyQmx1clgpKTsKLSAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFBh
cmFtZXRlcihVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9uW0xheWVyRGF0YTo6Q1NT
RmlsdGVyU2hhZGVyQmx1clhdCi0gICAgICAgICAgICAgICAgLCBkc2ZvLnN0ZERldmlhdGlvbigp
KSk7Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0ZXIoVW5pZm9ybTFmOjpj
cmVhdGVXaXRoRnVuY3RvcihtX2JsdXJBbW91bnRMb2NhdGlvblsxXSwgSW52ZXJzZVN1cmZhY2VX
aWR0aChzdXJmYWNlKSkpOwotCi0gICAgICAgICAgICAvLyBSZXBhaW50IG9yaWdpbmFsIGltYWdl
Ci0gICAgICAgICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0
ZShMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlclBhc3N0aHJvdWdoKSk7Ci0gICAgICAgICAgICBy
ZXQubGFzdCgpLT5zZXRQb3BTbmFwc2hvdCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJldC5z
aXplKCkgJSAyKSAvLyBXZSBuZWVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFjdGlvbnMuIFNlZSBwaW5n
LXBvbmcgbm90ZSBpbiBhcHBseUxheWVyRmlsdGVycygpLgotICAgICAgICByZXQuYXBwZW5kKExh
eWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRl
clBhc3N0aHJvdWdoKSk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi12b2lkIExheWVyRmlsdGVy
UmVuZGVyZXI6OmFwcGx5QWN0aW9ucyh1bnNpZ25lZCYgZmJvLCBMYXllckNvbXBvc2l0aW5nVGhy
ZWFkKiBsYXllciwgVmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IGFj
dGlvbnMpCi17Ci0gICAgZ2xDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwotICAg
IEFTU0VSVCghKGFjdGlvbnMuc2l6ZSgpICUgMikpOyAvLyBTZWUgcGluZy1wb25naW5nIG5vdGUg
YmVsb3cuCi0KLSAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFsYXllci0+ZmlsdGVycygpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFt
X3RleHR1cmUpCi0gICAgICAgIG1fdGV4dHVyZSA9IHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkKCktPmNyZWF0ZVRleHR1cmUoKTsKLQotICAgIGJvb2wgcmVxdWlyZVNuYXBzaG90ID0gZmFs
c2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKGFjdGlvbnNbaV0tPnNob3VsZFB1c2hTbmFwc2hvdCgpKQotICAgICAgICAg
ICAgcmVxdWlyZVNuYXBzaG90ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fc25hcHNob3RU
ZXh0dXJlICYmIHJlcXVpcmVTbmFwc2hvdCkKLSAgICAgICAgbV9zbmFwc2hvdFRleHR1cmUgPSB0
ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT5jcmVhdGVUZXh0dXJlKCk7Ci0KLSAgICBM
YXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFjZSA9IGxheWVyLT5sYXllclJlbmRlcmVyU3VyZmFj
ZSgpOwotCi0gICAgLy8gRnJvbSB0aGUgY29kZSBpbiBMYXllclJlbmRlcmVyLCB3ZSBzZWUgdGhh
dCB0aGUgbGF5ZXIgd2lsbCBoYXZlIGEgdHJpdmlhbCB0cmFuc2Zvcm0gdGhhdCB3aWxsCi0gICAg
Ly8gcmVzdWx0IGluIHRoZSB0cmFuc2Zvcm1lZCBib3VuZHMgYmVpbmcgYSBwb2x5Z29uIHdpdGgg
NCB2ZXJ0aWNlcywgaS5lLiBhIHF1YWQuCi0gICAgLy8gVGhlIExheWVyRmlsdGVyUmVuZGVyZXIg
ZGVwZW5kcyBvbiB0aGUgbGF5ZXIgYmVpbmcgYSBxdWFkLCBzbyBhc3NlcnQgdG8gbWFrZSBzdXJl
LgotICAgIEFTU0VSVChsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKS5zaXplKCkgPT0gNCk7Ci0g
ICAgaWYgKGxheWVyLT50cmFuc2Zvcm1lZEJvdW5kcygpLnNpemUoKSAhPSA0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobV9wb3NpdGlvbkxvY2F0aW9uLCAy
LCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIGxheWVyLT50cmFuc2Zvcm1lZEJvdW5kcygpLmRhdGEo
KSk7Ci0gICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3Bvc2l0aW9uTG9jYXRpb24pOwot
ICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3RleENvb3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FU
LCBHTF9GQUxTRSwgMCwgbGF5ZXItPnRleHR1cmVDb29yZGluYXRlcygpLmRhdGEoKSk7Ci0gICAg
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3RleENvb3JkTG9jYXRpb24pOwotCi0gICAgbV90
ZXh0dXJlLT5wcm90ZWN0KHN1cmZhY2UtPnRleHR1cmUoKS0+c2l6ZSgpLCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkFsd2F5c0JhY2tlZCk7Ci0gICAgaWYgKHJlcXVpcmVTbmFwc2hv
dCkKLSAgICAgICAgbV9zbmFwc2hvdFRleHR1cmUtPnByb3RlY3Qoc3VyZmFjZS0+dGV4dHVyZSgp
LT5zaXplKCksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QWx3YXlzQmFja2VkKTsK
LQotICAgIGlmICghZmJvKQotICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmZmJvKTsKLQot
ICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8gTk9U
RSBBQk9VVCBQSU5HLVBPTkdJTkcKLSAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0K
LSAgICAgICAgLy8gVW5kZXIgT3BlbkdMIEVTIDIuMCwgd2UgY2Fubm90IHVzZSB0aGUgZmJvIHdl
IGFyZSB3cml0dGluZyB0byBhcyBhIHRleHR1cmUsIHNvIHdlIG5lZWQgdG8gcGxheSBwaW5nLXBv
bmc6Ci0gICAgICAgIC8vICAxKSBEcmF3IHBhcmVudCBzdXJmYWNlIHRvIG91ciB0ZXh0dXJlIHdp
dGggZWZmZWN0LgotICAgICAgICAvLyAgMikgRHJhdyBvdXIgc3VyZmFjZSB0byBwYXJlbnQgdGV4
dHVyZSB3aXRoIGVmZmVjdC4KLSAgICAgICAgLy8gIDMpIFJlcGVhdC4KLSAgICAgICAgLy8gQmVj
YXVzZSB3ZSBldmVudHVhbGx5IGhhdmUgdG8gZW5kIG9uIHRoZSBwYXJlbnQgdGV4dHVyZSwgd2Ug
bmVlZCBhbiBldmVuIG51bWJlciBvZiBhY3Rpb25zLgotICAgICAgICAvLyBhY3Rpb25zRm9yT3Bl
cmF0aW9ucyB0YWtlcyBjYXJlIG9mIHRoYXQuCi0KLSAgICAgICAgaWYgKGFjdGlvbnNbaV0tPnNo
b3VsZFB1c2hTbmFwc2hvdCgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlPiBj
dXJyZW50VGV4dHVyZSA9ICghKGkgJSAyKSA/IHN1cmZhY2UtPnRleHR1cmUoKSA6IG1fdGV4dHVy
ZSk7Ci0gICAgICAgICAgICBwdXNoU25hcHNob3Qoc3VyZmFjZSwgY3VycmVudFRleHR1cmUtPnBs
YXRmb3JtVGV4dHVyZSgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIShpICUgMikpCi0gICAg
ICAgICAgICBwaW5nKHN1cmZhY2UpOyAvLyBTZXQgZnJhbWVidWZmZXIgdG8gb3VycywgYW5kIHRl
eHR1cmUgdG8gcGFyZW50Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvbmcoc3VyZmFjZSk7
IC8vIFNldCB0ZXh0dXJlIHRvIHBhcmVudCwgYW5kIGZyYW1lYnVmZmVyIHRvIHVzCi0KLSAgICAg
ICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsgLy8gdG8gdHJhbnNwYXJlbmN5Ci0gICAg
ICAgIGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCksIHN1cmZhY2UtPnNp
emUoKS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgYWN0aW9uc1tpXS0+dXNlQWN0aW9uT24odGhpcyk7
Ci0KLSAgICAgICAgaWYgKGFjdGlvbnNbaV0tPnNob3VsZFBvcFNuYXBzaG90KCkpCi0gICAgICAg
ICAgICBwb3BTbmFwc2hvdCgpOwotCi0gICAgICAgIHN3aXRjaCAoYWN0aW9uc1tpXS0+ZHJhd2lu
Z01vZGUoKSkgewotICAgICAgICBjYXNlIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OkRyYXdU
cmlhbmdsZUZhbkFycmF5czoKLSAgICAgICAgICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9G
QU4sIDAsIDQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTGF5ZXJGaWx0ZXJS
ZW5kZXJlckFjdGlvbjo6RHJhd1RyaWFuZ2xlRWxlbWVudHNVU2hvcnQwOgotICAgICAgICAgICAg
Z2xEcmF3RWxlbWVudHMoR0xfVFJJQU5HTEVTLCBhY3Rpb25zW2ldLT5kcmF3aW5nTW9kZVBhcmFt
ZXRlcigpLCBHTF9VTlNJR05FRF9TSE9SVCwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4oMCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246Ok51bWJlck9mRHJhd2luZ01vZGVzOgotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGFjdGlvbnNbaV0tPnJlc3RvcmVTdGF0ZSgpOwotCi0gICAgICAgIGdsVmVy
dGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxT
RSwgMCwgbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkuZGF0YSgpKTsKLSAgICAgICAgZ2xFbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShtX3Bvc2l0aW9uTG9jYXRpb24pOwotICAgICAgICBnbFZlcnRl
eEF0dHJpYlBvaW50ZXIobV90ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0Us
IDAsIGxheWVyLT50ZXh0dXJlQ29vcmRpbmF0ZXMoKS5kYXRhKCkpOwotICAgICAgICBnbEVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KG1fdGV4Q29vcmRMb2NhdGlvbik7Ci0gICAgfQotCi0gICAgbV90
ZXh0dXJlLT51bnByb3RlY3QoKTsKLSAgICBpZiAocmVxdWlyZVNuYXBzaG90KQotICAgICAgICBt
X3NuYXBzaG90VGV4dHVyZS0+dW5wcm90ZWN0KCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKLQotICAgIGdsQ2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBVU0UoQ1NTX0ZJTFRFUlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
RmlsdGVyUmVuZGVyZXIuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMzAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
Ci0gKi8KLQotI2lmbmRlZiBMYXllckZpbHRlclJlbmRlcmVyX2gKLSNkZWZpbmUgTGF5ZXJGaWx0
ZXJSZW5kZXJlcl9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJM
RShDU1NfRklMVEVSUykKLQotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXllckRh
dGEuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJDb250ZXh0Lmg+
Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtSW50UmVjdFJlZ2lvbi5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8
d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExheWVyQ29tcG9zaXRp
bmdUaHJlYWQ7Ci1jbGFzcyBMYXllckZpbHRlclJlbmRlcmVyOwotY2xhc3MgTGF5ZXJGaWx0ZXJS
ZW5kZXJlckFjdGlvbjsKLWNsYXNzIExheWVyUmVuZGVyZXJTdXJmYWNlOwotCi1jbGFzcyBQYXJh
bWV0ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxQYXJhbWV0ZXI+IHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShQYXJhbWV0ZXIpOwotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRlKCkgeyB9Ci0gICAgdmlydHVhbCB+UGFy
YW1ldGVyKCkgeyB9Ci1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgUGFyYW1ldGVyKCkgeyB9Ci19
OwotCi1jbGFzcyBVbmlmb3JtIDogcHVibGljIFBhcmFtZXRlciB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoVW5pZm9ybSk7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5KCkgPSAw
OwotICAgIHZpcnR1YWwgflVuaWZvcm0oKSB7IH0KLQotcHJvdGVjdGVkOgotICAgIFVuaWZvcm0o
aW50IGxvY2F0aW9uKTsKLSAgICBjb25zdCBpbnQmIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9sb2NhdGlvbjsgfQotCi1wcml2YXRlOgotICAgIGludCBtX2xvY2F0aW9uOwotfTsKLQotY2xh
c3MgVW5pZm9ybTFmIDogcHVibGljIFVuaWZvcm0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFVuaWZvcm0+IGNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbCk7Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm0+
IGNyZWF0ZVdpdGhGdW5jdG9yKGludCBsb2NhdGlvbiwgRnVuY3Rvcik7Ci0KLXByb3RlY3RlZDoK
LSAgICBVbmlmb3JtMWYoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwpOwotCi0gICAgdmlydHVhbCB2
b2lkIGFwcGx5KCk7Ci0KLSAgICBmbG9hdCBtX3ZhbDsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Ci1jbGFzcyBVbmlmb3JtMWZXaXRoRnVuY3RvciA6IHB1YmxpYyBVbmlmb3JtMWYg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm0+IGNyZWF0ZShpbnQgbG9j
YXRpb24sIEZ1bmN0b3IgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVW5pZm9ybTFmV2l0aEZ1bmN0b3IobG9jYXRpb24sIGZ1bmN0b3IpKTsKLSAgICB9Ci0KLXBy
b3RlY3RlZDoKLSAgICBVbmlmb3JtMWZXaXRoRnVuY3RvcihpbnQgbG9jYXRpb24sIEZ1bmN0b3Ig
ZnVuY3RvcikKLSAgICAgICAgOiBVbmlmb3JtMWYobG9jYXRpb24sIDApCi0gICAgICAgICwgbV9m
dW5jdG9yKGZ1bmN0b3IpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgp
Ci0gICAgewotICAgICAgICBtX3ZhbCA9IG1fZnVuY3RvcigpOwotICAgICAgICBVbmlmb3JtMWY6
OmFwcGx5KCk7Ci0gICAgfQotCi0gICAgRnVuY3RvciBtX2Z1bmN0b3I7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIFBhc3NSZWZQdHI8VW5pZm9ybT4gVW5pZm9ybTFm
OjpjcmVhdGVXaXRoRnVuY3RvcihpbnQgbG9jYXRpb24sIEZ1bmN0b3IgZnVuY3RvcikKLXsKLSAg
ICByZXR1cm4gVW5pZm9ybTFmV2l0aEZ1bmN0b3I8RnVuY3Rvcj46OmNyZWF0ZShsb2NhdGlvbiwg
ZnVuY3Rvcik7Ci19Ci0KLWNsYXNzIFVuaWZvcm0xaSA6IHB1YmxpYyBVbmlmb3JtIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlmb3JtPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBp
bnQgdmFsKTsKLQotcHJvdGVjdGVkOgotICAgIFVuaWZvcm0xaShpbnQgbG9jYXRpb24sIGludCB2
YWwpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOwotICAgIGludCBtX3Zh
bDsKLX07Ci0KLWNsYXNzIFVuaWZvcm0yZiA6IHB1YmxpYyBVbmlmb3JtIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlmb3JtPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2
YWwwLCBmbG9hdCB2YWwxKTsKLQotcHJvdGVjdGVkOgotICAgIFVuaWZvcm0yZihpbnQgbG9jYXRp
b24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9p
ZCBhcHBseSgpOwotICAgIGZsb2F0IG1fdmFsWzJdOwotfTsKLQotY2xhc3MgVW5pZm9ybTNmIDog
cHVibGljIFVuaWZvcm0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm0+
IGNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgVW5pZm9ybTNmKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwg
ZmxvYXQgdmFsMSwgZmxvYXQgdmFsMik7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGx5KCk7Ci0gICAgZmxvYXQgbV92YWxbM107Ci19OwotCi1jbGFzcyBVbmlmb3JtNGYgOiBwdWJs
aWMgVW5pZm9ybSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VW5pZm9ybT4gY3Jl
YXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSwgZmxvYXQgdmFsMiwgZmxv
YXQgdmFsMyk7Ci0KLXByb3RlY3RlZDoKLSAgICBVbmlmb3JtNGYoaW50IGxvY2F0aW9uLCBmbG9h
dCB2YWwwLCBmbG9hdCB2YWwxLCBmbG9hdCB2YWwyLCBmbG9hdCB2YWwzKTsKLQotcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKLSAgICBmbG9hdCBtX3ZhbFs0XTsKLX07Ci0KLWNs
YXNzIE1hdHJpeDRmdiA6IHB1YmxpYyBVbmlmb3JtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxQYXJhbWV0ZXI+IGNyZWF0ZShHTGludCBsb2NhdGlvbiwgR0xzaXplaSwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgR0xmbG9hdCogYXJyYXkpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgTWF0cml4
NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGxlbmd0aCwgR0xib29sZWFuIHRyYW5zcG9zZSwg
R0xmbG9hdCogYXJyYXkpOwotICAgIH5NYXRyaXg0ZnYoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoKTsKLSAgICBHTGludCBtX2xvY2F0aW9uOwotICAgIEdMc2l6ZWkgbV9z
aXplOwotICAgIEdMYm9vbGVhbiBtX3RyYW5zcG9zZTsKLSAgICBHTGZsb2F0KiBtX2FycmF5Owot
fTsKLQotY2xhc3MgQnVmZmVyIDogcHVibGljIFBhcmFtZXRlciB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8UGFyYW1ldGVyPiBjcmVhdGUoR0xlbnVtIGJ1ZmZlciwgR0x1aW50IGlu
ZGV4KTsKLQotcHJvdGVjdGVkOgotICAgIEJ1ZmZlcihHTGVudW0gYnVmZmVyLCBHTHVpbnQgaW5k
ZXgpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOwotICAgIHZpcnR1YWwg
dm9pZCByZXN0b3JlU3RhdGUoKTsKLSAgICBHTGVudW0gbV9idWZmZXI7Ci0gICAgR0x1aW50IG1f
b2JqZWN0OwotfTsKLQotY2xhc3MgVmVydGV4QXR0cmliZiA6IHB1YmxpYyBQYXJhbWV0ZXIgewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhcmFtZXRlcj4gY3JlYXRlKGludCBsb2Nh
dGlvbiwgaW50IHNpemUsIGludCBieXRlc1BlclZlcnRleCwgaW50IG9mZnNldCk7Ci0KLXByb3Rl
Y3RlZDoKLSAgICBWZXJ0ZXhBdHRyaWJmKGludCBsb2NhdGlvbiwgaW50IHNpemUsIGludCBieXRl
c1BlclZlcnRleCwgaW50IG9mZnNldCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGx5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc3RvcmVTdGF0ZSgpOwotICAgIGludCBtX2xvY2F0
aW9uOwotICAgIGludCBtX3NpemU7Ci0gICAgaW50IG1fYnl0ZXNQZXJWZXJ0ZXg7Ci0gICAgaW50
IG1fb2Zmc2V0OwotfTsKLQotY2xhc3MgTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiBjcmVhdGUoaW50IHBy
b2dyYW1JZCk7Ci0gICAgICAgIC8vIEEgdmVjdG9yIG9mIGFjdGlvbnMgbXVzdCBoYXZlIGFuIGV2
ZW4gY291bnQsIHNvIGlmIHlvdSBoYXZlIGFuIG9kZCBjb3VudCwgYWRkIGEgcGFzc3Rocm91Z2gg
ZXZlbnQgYXQgdGhlIGVuZC4KLSAgICAgICAgLy8gU2VlIHRoZSBwaW5nLXBvbmcgbm90ZSBpbiBM
YXllckZpbHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnMuCi0KLSAgICBib29sIHNob3VsZFB1c2hT
bmFwc2hvdCgpIGNvbnN0IHsgcmV0dXJuIG1fcHVzaFNuYXBzaG90OyB9Ci0gICAgdm9pZCBzZXRQ
dXNoU25hcHNob3QoKSB7IG1fcHVzaFNuYXBzaG90ID0gdHJ1ZTsgfQotCi0gICAgYm9vbCBzaG91
bGRQb3BTbmFwc2hvdCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wU25hcHNob3Q7IH0KLSAgICB2b2lk
IHNldFBvcFNuYXBzaG90KCkgeyBtX3BvcFNuYXBzaG90ID0gdHJ1ZTsgfQotCi0gICAgdm9pZCBh
cHBlbmRQYXJhbWV0ZXIoY29uc3QgUmVmUHRyPFBhcmFtZXRlcj4mIHVuaWZvcm0pIHsgbV9wYXJh
bWV0ZXJzLmFwcGVuZCh1bmlmb3JtKTsgfQotICAgIHZvaWQgdXNlQWN0aW9uT24oTGF5ZXJGaWx0
ZXJSZW5kZXJlciopOwotICAgIHZvaWQgcmVzdG9yZVN0YXRlKCk7Ci0KLSAgICBlbnVtIERyYXdp
bmdNb2RlIHsKLSAgICAgICAgRHJhd1RyaWFuZ2xlRmFuQXJyYXlzID0gMCwKLSAgICAgICAgRHJh
d1RyaWFuZ2xlRWxlbWVudHNVU2hvcnQwLAotICAgICAgICBOdW1iZXJPZkRyYXdpbmdNb2Rlcwot
ICAgIH07Ci0KLSAgICBEcmF3aW5nTW9kZSBkcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZHJhd2luZ01vZGU7IH0KLSAgICB2b2lkIHNldERyYXdpbmdNb2RlKGNvbnN0IERyYXdpbmdNb2Rl
JiBtb2RlKSB7IG1fZHJhd2luZ01vZGUgPSBtb2RlOyB9Ci0KLSAgICBpbnQgZHJhd2luZ01vZGVQ
YXJhbWV0ZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdNb2RlUGFyYW1ldGVyOyB9Ci0gICAg
dm9pZCBzZXREcmF3aW5nTW9kZVBhcmFtZXRlcihpbnQgcCkgeyBtX2RyYXdpbmdNb2RlUGFyYW1l
dGVyID0gcDsgfQotCi0KLXByb3RlY3RlZDoKLSAgICBpbnQgbV9wcm9ncmFtSWQ7Ci0gICAgYm9v
bCBtX3B1c2hTbmFwc2hvdDsKLSAgICBib29sIG1fcG9wU25hcHNob3Q7Ci0KLSAgICBWZWN0b3I8
UmVmUHRyPFBhcmFtZXRlcj4gPiBtX3BhcmFtZXRlcnM7Ci0KLSAgICBEcmF3aW5nTW9kZSBtX2Ry
YXdpbmdNb2RlOwotICAgIGludCBtX2RyYXdpbmdNb2RlUGFyYW1ldGVyOwotCi1wcml2YXRlOgot
ICAgIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24oaW50IHByb2dyYW1JZCk7Ci19OwotCi1jbGFz
cyBMYXllckZpbHRlclJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllckZp
bHRlclJlbmRlcmVyKTsKLQotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyRmls
dGVyUmVuZGVyZXI+IGNyZWF0ZShjb25zdCBpbnQmIHBvc2l0aW9uTG9jYXRpb24sIGNvbnN0IGlu
dCYgdGV4Q29vcmRMb2NhdGlvbik7Ci0gICAgdm9pZCBhcHBseUFjdGlvbnModW5zaWduZWQmIGZi
bywgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIFZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5k
ZXJlckFjdGlvbj4gPik7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0
aW9uPiA+IGFjdGlvbnNGb3JPcGVyYXRpb25zKExheWVyUmVuZGVyZXJTdXJmYWNlKiwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mKTsKLQotICAgIC8vIElmIGluaXRpYWxp
emF0aW9uIGZhaWxzLCBvciBkaXNhYmxlKCkgaXMgY2FsbGVkLCB0aGlzIGlzIGZhbHNlLgotICAg
IGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9Ci0gICAgdm9pZCBk
aXNhYmxlKCkgeyBtX2VuYWJsZWQgPSBmYWxzZTsgfQotCi1wcml2YXRlOgotICAgIExheWVyRmls
dGVyUmVuZGVyZXIoY29uc3QgaW50JiBwb3NpdGlvbkxvY2F0aW9uLCBjb25zdCBpbnQmIHRleENv
b3JkTG9jYXRpb24pOwotICAgIHZvaWQgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKGludCBsb2Nh
dGlvbiwgY29uc3QgY2hhciogYXR0cmliTmFtZSk7Ci0gICAgYm9vbCBpbml0aWFsaXplU2hhcmVk
R0xPYmplY3RzKCk7Ci0KLSAgICAvLyBTZWUgbm90ZSBhYm91dCBwaW5nLXBvbmdpbmcgaW4gYXBw
bHlBY3Rpb25zKCkKLSAgICB2b2lkIHBpbmcoTGF5ZXJSZW5kZXJlclN1cmZhY2UqKTsKLSAgICB2
b2lkIHBvbmcoTGF5ZXJSZW5kZXJlclN1cmZhY2UqKTsKLQotICAgIC8vIFRoaXMgaXMgZm9yIHNo
YWRvd3MsIHdoZXJlIHdlIG5lZWQgdG8gY3JlYXRlIGEgc2hhZG93LCBhbmQgdGhlbiByZXBhaW50
IHRoZSBvcmlnaW5hbCBpbWFnZQotICAgIC8vIG9uIHRvcCBvZiB0aGUgc2hhZG93LgotICAgIHZv
aWQgcHVzaFNuYXBzaG90KExheWVyUmVuZGVyZXJTdXJmYWNlKiwgaW50IHNvdXJjZUlkKTsKLSAg
ICB2b2lkIHBvcFNuYXBzaG90KCk7Ci0KLSAgICBib29sIG1fZW5hYmxlZDsKLQotICAgIC8vIEVT
U0wgYXR0cmlidXRlcyBzaGFyZWQgd2l0aCBMYXllclJlbmRlcmVyIC0gc2VlIGNvbnN0cnVjdG9y
OgotICAgIGNvbnN0IGludCBtX3Bvc2l0aW9uTG9jYXRpb247Ci0gICAgY29uc3QgaW50IG1fdGV4
Q29vcmRMb2NhdGlvbjsKLQotICAgIC8vIEVTU0wgcHJvZ3JhbSBvYmplY3QgSURzOgotICAgIHVu
c2lnbmVkIG1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6Ok51bWJlck9mQ1NTRmls
dGVyU2hhZGVyc107Ci0KLSAgICAvLyBFU1NMIHVuaWZvcm0gbG9jYXRpb25zOgotICAgIGludCBt
X2Ftb3VudExvY2F0aW9uW0xheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzXTsKLSAg
ICBpbnQgbV9ibHVyQW1vdW50TG9jYXRpb25bMl07IC8vIDAgPSBZLCAxID0gWAotICAgIGludCBt
X3NoYWRvd0NvbG9yTG9jYXRpb247Ci0gICAgaW50IG1fb2Zmc2V0TG9jYXRpb247Ci0KLSAgICAv
LyBUZXh0dXJlcyBmb3IgcGxheWluZyBwaW5nLXBvbmcgLSBzZWUgbm90ZSBpbiBhcHBseUFjdGlv
bnMoKQotICAgIFJlZlB0cjxMYXllclRleHR1cmU+IG1fdGV4dHVyZTsKLSAgICBSZWZQdHI8TGF5
ZXJUZXh0dXJlPiBtX3NuYXBzaG90VGV4dHVyZTsKLQotICAgIGZyaWVuZCBjbGFzcyBMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uOwotfTsKLQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0KLSNlbmRpZiAvLyBMYXllckZp
bHRlclJlbmRlcmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJNZXNzYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllck1lc3NhZ2UuaAkocmV2aXNpb24gMTYxNTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllck1l
c3NhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgTGF5ZXJNZXNzYWdlX2gKLSNkZWZpbmUg
TGF5ZXJNZXNzYWdlX2gKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUV4ZWN1dGFibGVN
ZXNzYWdlLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWVzc2FnZS5oPgotI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU1lc3NhZ2VDbGllbnQuaD4KLQotdHlwZWRlZiBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6TWVzc2FnZSBQbGF0Zm9ybU1lc3NhZ2U7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotaW5saW5lIGJvb2wgaXNDb21wb3NpdGluZ1RocmVhZCgpCi17Ci0gICAgcmV0dXJu
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgp
LT5pc0N1cnJlbnRUaHJlYWQoKTsKLX0KLQotaW5saW5lIHB0aHJlYWRfdCBjb21wb3NpdGluZ1Ro
cmVhZCgpCi17Ci0gICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjp1c2VySW50ZXJmYWNl
VGhyZWFkTWVzc2FnZUNsaWVudCgpLT50aHJlYWRJZGVudGlmaWVyKCk7Ci19Ci0KLWlubGluZSBi
b29sIGlzV2ViS2l0VGhyZWFkKCkKLXsKLSAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06
OndlYktpdFRocmVhZE1lc3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50VGhyZWFkKCk7Ci19Ci0KLWlu
bGluZSBwdGhyZWFkX3Qgd2ViS2l0VGhyZWFkKCkKLXsKLSAgICByZXR1cm4gQmxhY2tCZXJyeTo6
UGxhdGZvcm06OndlYktpdFRocmVhZE1lc3NhZ2VDbGllbnQoKS0+dGhyZWFkSWRlbnRpZmllcigp
OwotfQotCi1pbmxpbmUgdm9pZCBkaXNwYXRjaENvbXBvc2l0aW5nTWVzc2FnZShQbGF0Zm9ybU1l
c3NhZ2UqIG1zZykKLXsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRo
cmVhZE1lc3NhZ2VDbGllbnQoKS0+ZGlzcGF0Y2hNZXNzYWdlKG1zZyk7Ci19Ci0KLWlubGluZSB2
b2lkIGRpc3BhdGNoU3luY0NvbXBvc2l0aW5nTWVzc2FnZShQbGF0Zm9ybU1lc3NhZ2UqIG1zZykK
LXsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRocmVhZE1lc3NhZ2VD
bGllbnQoKS0+ZGlzcGF0Y2hTeW5jTWVzc2FnZShtc2cpOwotfQotCi1lbnVtIFBsYXRmb3JtTWVz
c2FnZVByaW9yaXR5IHsgUGxhdGZvcm1NZXNzYWdlUHJpb3JpdHlMb3cgPSAtMSwgUGxhdGZvcm1N
ZXNzYWdlUHJpb3JpdHlOb3JtYWwgPSAwLCBQbGF0Zm9ybU1lc3NhZ2VQcmlvcml0eUhpZ2ggPSAx
IH07Ci0KLWlubGluZSB2b2lkIGRpc3BhdGNoV2ViS2l0TWVzc2FnZShQbGF0Zm9ybU1lc3NhZ2Uq
IG1zZywgUGxhdGZvcm1NZXNzYWdlUHJpb3JpdHkgcHJpb3JpdHkgPSBQbGF0Zm9ybU1lc3NhZ2VQ
cmlvcml0eU5vcm1hbCkKLXsKLSAgICBpZiAocHJpb3JpdHkgIT0gUGxhdGZvcm1NZXNzYWdlUHJp
b3JpdHlOb3JtYWwpCi0gICAgICAgIG1zZy0+c2V0UHJpb3JpdHkoQmxhY2tCZXJyeTo6UGxhdGZv
cm06OndlYktpdFRocmVhZE1lc3NhZ2VDbGllbnQoKS0+dGhyZWFkUHJpb3JpdHkoKSArIHByaW9y
aXR5KTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6d2ViS2l0VGhyZWFkTWVzc2FnZUNsaWVu
dCgpLT5kaXNwYXRjaE1lc3NhZ2UobXNnKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gTGF5ZXJNZXNzYWdlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNw
cAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjI3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNsdWRlICJMYXllclJl
bmRlcmVyLmgiCi0KLSNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCi0jaW5jbHVk
ZSAiTGF5ZXJGaWx0ZXJSZW5kZXJlci5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDbGllbnQu
aCIKLSNpbmNsdWRlICJUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5oIgotCi0jaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1Mb2cuaD4KLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotI2RlZmluZSBERUJVR19MQVlFUl9BTklNQVRJT05TIDAgLy8gU2hvdyBydW5uaW5nIGFu
aW1hdGlvbnMgYXMgZ3JlZW4uCi0jZGVmaW5lIERFQlVHX0NMSVBQSU5HIDAKLQotdXNpbmcgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMkNvbnRleHQ7Ci11c2luZyBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbTsKLXVzaW5nIG5hbWVzcGFjZSBz
dGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgY2hl
Y2tHTEVycm9yKCkgXAoteyBcCi0gICAgaWYgKEdMZW51bSBlcnJvciA9IGdsR2V0RXJyb3IoKSkg
XAotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nQWx3YXlzKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpMb2dMZXZlbENyaXRpY2FsLCAiJXM6JWQgR0wgRXJyb3I6IDB4JXggIiwgX19GSUxF
X18sIF9fTElORV9fLCBlcnJvcik7IFwKLX0KLSNlbHNlCi0jZGVmaW5lIGNoZWNrR0xFcnJvcigp
Ci0jZW5kaWYKLQotR0x1aW50IExheWVyUmVuZGVyZXI6OmxvYWRTaGFkZXIoR0xlbnVtIHR5cGUs
IGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkKLXsKLSAgICBHTHVpbnQgc2hhZGVyID0gZ2xDcmVh
dGVTaGFkZXIodHlwZSk7Ci0gICAgaWYgKCFzaGFkZXIpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZSwgMCk7Ci0gICAgZ2xDb21w
aWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgR0xpbnQgY29tcGlsZWQ7Ci0gICAgZ2xHZXRTaGFkZXJp
dihzaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAmY29tcGlsZWQpOwotICAgIGlmICghY29tcGls
ZWQpIHsKLSAgICAgICAgY2hhciBpbmZvTG9nWzIwNDhdOwotICAgICAgICBHTHNpemVpIGxlbmd0
aDsKLSAgICAgICAgZ2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgMjA0OCwgJmxlbmd0aCwgaW5m
b0xvZyk7Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkxvZ0xldmVsQ3JpdGljYWwsICJGYWlsZWQgdG8gY29tcGlsZSBzaGFkZXI6
XG4lc1xubG9nOiAlcyIsIHNoYWRlclNvdXJjZSwgaW5mb0xvZyk7Ci0gICAgICAgIGdsRGVsZXRl
U2hhZGVyKHNoYWRlcik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gc2hh
ZGVyOwotfQotCi1HTHVpbnQgTGF5ZXJSZW5kZXJlcjo6bG9hZFNoYWRlclByb2dyYW0oY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZSkKLXsKLSAgICBHTHVpbnQgdmVydGV4U2hhZGVyOwotICAgIEdMdWludCBmcmFnbWVudFNoYWRl
cjsKLSAgICBHTHVpbnQgcHJvZ3JhbU9iamVjdDsKLSAgICBHTGludCBsaW5rZWQ7Ci0gICAgdmVy
dGV4U2hhZGVyID0gbG9hZFNoYWRlcihHTF9WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UpOwotICAgIGlmICghdmVydGV4U2hhZGVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBmcmFn
bWVudFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNoYWRl
clNvdXJjZSk7Ci0gICAgaWYgKCFmcmFnbWVudFNoYWRlcikgewotICAgICAgICBnbERlbGV0ZVNo
YWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcHJvZ3Jh
bU9iamVjdCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGlmIChwcm9ncmFtT2JqZWN0KSB7Ci0g
ICAgICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1PYmplY3QsIHZlcnRleFNoYWRlcik7Ci0gICAg
ICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1PYmplY3QsIGZyYWdtZW50U2hhZGVyKTsKLSAgICAg
ICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtT2JqZWN0KTsKLSAgICAgICAgZ2xHZXRQcm9ncmFtaXYo
cHJvZ3JhbU9iamVjdCwgR0xfTElOS19TVEFUVVMsICZsaW5rZWQpOwotICAgICAgICBpZiAoIWxp
bmtlZCkgewotICAgICAgICAgICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW1PYmplY3QpOwotICAg
ICAgICAgICAgcHJvZ3JhbU9iamVjdCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZ2xEZWxl
dGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRl
cik7Ci0gICAgcmV0dXJuIHByb2dyYW1PYmplY3Q7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4
IExheWVyUmVuZGVyZXI6Om9ydGhvTWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9h
dCBib3R0b20sIGZsb2F0IHRvcCwgZmxvYXQgbmVhclosIGZsb2F0IGZhclopCi17Ci0gICAgZmxv
YXQgZGVsdGFYID0gcmlnaHQgLSBsZWZ0OwotICAgIGZsb2F0IGRlbHRhWSA9IHRvcCAtIGJvdHRv
bTsKLSAgICBmbG9hdCBkZWx0YVogPSBmYXJaIC0gbmVhclo7Ci0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggb3J0aG87Ci0gICAgaWYgKCFkZWx0YVggfHwgIWRlbHRhWSB8fCAhZGVsdGFaKQotICAg
ICAgICByZXR1cm4gb3J0aG87Ci0gICAgb3J0aG8uc2V0TTExKDIuMGYgLyBkZWx0YVgpOwotICAg
IG9ydGhvLnNldE00MSgtKHJpZ2h0ICsgbGVmdCkgLyBkZWx0YVgpOwotICAgIG9ydGhvLnNldE0y
MigyLjBmIC8gZGVsdGFZKTsKLSAgICBvcnRoby5zZXRNNDIoLSh0b3AgKyBib3R0b20pIC8gZGVs
dGFZKTsKLSAgICBvcnRoby5zZXRNMzMoLTIuMGYgLyBkZWx0YVopOwotICAgIG9ydGhvLnNldE00
MygtKG5lYXJaICsgZmFyWikgLyBkZWx0YVopOwotICAgIHJldHVybiBvcnRobzsKLX0KLQotc3Rh
dGljIFZlY3RvcjxMYXllckNvbXBvc2l0aW5nVGhyZWFkKj4gcmF3UHRyVmVjdG9yRnJvbVJlZlB0
clZlY3Rvcihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4mIHN1
YmxheWVycykKLXsKLSAgICBWZWN0b3I8TGF5ZXJDb21wb3NpdGluZ1RocmVhZCo+IHN1YmxheWVy
TGlzdDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykK
LSAgICAgICAgc3VibGF5ZXJMaXN0LmFwcGVuZChzdWJsYXllcnNbaV0uZ2V0KCkpOwotCi0gICAg
cmV0dXJuIHN1YmxheWVyTGlzdDsKLX0KLQotUGFzc093blB0cjxMYXllclJlbmRlcmVyPiBMYXll
clJlbmRlcmVyOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNsaWVudCogY2xpZW50KQotewotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTGF5ZXJSZW5kZXJlcihjbGllbnQpKTsKLX0KLQotTGF5ZXJSZW5k
ZXJlcjo6TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2xpZW50KiBjbGllbnQpCi0gICAgOiBt
X2NsaWVudChjbGllbnQpCi0gICAgLCBtX3NjYWxlKDEuMCkKLSAgICAsIG1fYW5pbWF0aW9uVGlt
ZSgtbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkKLSAgICAsIG1fZmJvKDApCi0g
ICAgLCBtX2N1cnJlbnRMYXllclJlbmRlcmVyU3VyZmFjZSgwKQotICAgICwgbV9pc1JvYnVzdG5l
c3NTdXBwb3J0ZWQoZmFsc2UpCi0gICAgLCBtX25lZWRzQ29tbWl0KGZhbHNlKQotICAgICwgbV9z
dGVuY2lsQ2xlYXJlZChmYWxzZSkKLXsKLSAgICAvLyBXZSdyZSBub3cgaW5pdGlhbGl6aW5nIGxh
emlseSwgc28gYSBjaGVjayBpZiB0aGUgY29udGV4dCBjYW4gYmUgbWFkZSBjdXJyZW50Ci0gICAg
Ly8gd2lsbCBoYXZlIHRvIHN1ZmZpY2UgdG8gZGV0ZXJtaW5lIGlmIGhhcmR3YXJlIGNvbXBvc2l0
aW5nIGlzIHBvc3NpYmxlLgotICAgIG1faGFyZHdhcmVDb21wb3NpdGluZyA9IG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGlmIChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpIHsKLSAgICAgICAgbV9p
c1JvYnVzdG5lc3NTdXBwb3J0ZWQgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpLmNvbnRhaW5zKCJHTF9FWFRfcm9idXN0
bmVzcyIpOwotICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NTdXBwb3J0ZWQpCi0gICAgICAgICAg
ICBtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xH
RVRHUkFQSElDU1JFU0VUU1RBVFVTRVhUUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsR2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0VYVCIpKTsKLSAgICB9Ci19Ci0KLUxheWVyUmVuZGVyZXI6On5MYXll
clJlbmRlcmVyKCkKLXsKLSAgICBpZiAobV9oYXJkd2FyZUNvbXBvc2l0aW5nKSB7Ci0gICAgICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBpZiAobV9mYm8pCi0gICAgICAgICAgICBn
bERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgTnVtYmVyT2ZQcm9ncmFtczsgKytpKQotICAgICAgICAgICAgZ2xEZWxldGVQcm9n
cmFtKG1fcHJvZ3JhbXNbaV0ubV9wcm9ncmFtKTsKLQotICAgICAgICAvLyBGcmVlIHVwIGFsbCBH
TCB0ZXh0dXJlcy4KLSAgICAgICAgd2hpbGUgKG1fbGF5ZXJzLmJlZ2luKCkgIT0gbV9sYXllcnMu
ZW5kKCkpIHsKLSAgICAgICAgICAgIExheWVyU2V0OjppdGVyYXRvciBpdGVyID0gbV9sYXllcnMu
YmVnaW4oKTsKLSAgICAgICAgICAgICgqaXRlciktPmRlbGV0ZVRleHR1cmVzKCk7Ci0gICAgICAg
ICAgICAoKml0ZXIpLT5zZXRMYXllclJlbmRlcmVyKDApOwotICAgICAgICAgICAgcmVtb3ZlTGF5
ZXIoKml0ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdU
aHJlYWQoKS0+Y2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlcjo6cmVsZWFz
ZUxheWVyUmVzb3VyY2VzKCkKLXsKLSAgICBpZiAobV9oYXJkd2FyZUNvbXBvc2l0aW5nKSB7Ci0g
ICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICAvLyBGcmVlIHVwIGFsbCBHTCB0
ZXh0dXJlcy4KLSAgICAgICAgZm9yIChMYXllclNldDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5ZXJz
LmJlZ2luKCk7IGl0ZXIgIT0gbV9sYXllcnMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICgq
aXRlciktPmRlbGV0ZVRleHR1cmVzKCk7Ci0KLSAgICAgICAgdGV4dHVyZUNhY2hlQ29tcG9zaXRp
bmdUaHJlYWQoKS0+Y2xlYXIoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21w
YXJlTGF5ZXJXKGNvbnN0IExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGEsIGNvbnN0IExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqIGIpCi17Ci0gICAgcmV0dXJuIGEtPmNlbnRlclcoKSA+IGItPmNlbnRl
clcoKTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyOjpwcmVwYXJlRnJhbWUoZG91YmxlIGFuaW1h
dGlvblRpbWUsIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIHJvb3RMYXllcikKLXsKLSAgICBpZiAo
YW5pbWF0aW9uVGltZSAhPSBtX2FuaW1hdGlvblRpbWUpIHsKLSAgICAgICAgbV9hbmltYXRpb25U
aW1lID0gYW5pbWF0aW9uVGltZTsKLQotICAgICAgICAvLyBBaGEsIG5ldyBmcmFtZSEgUmVzZXQg
cmVuZGVyaW5nIHJlc3VsdHMuCi0gICAgICAgIGJvb2wgd2FzRW1wdHkgPSBtX2xhc3RSZW5kZXJp
bmdSZXN1bHRzLmlzRW1wdHkoKTsKLSAgICAgICAgbV9sYXN0UmVuZGVyaW5nUmVzdWx0cyA9IExh
eWVyUmVuZGVyaW5nUmVzdWx0cygpOwotICAgICAgICBtX2xhc3RSZW5kZXJpbmdSZXN1bHRzLndh
c0VtcHR5ID0gd2FzRW1wdHk7Ci0gICAgfQotCi0gICAgaWYgKCFyb290TGF5ZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGJvb2wgaXNDb250ZXh0Q3VycmVudCA9IG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIHByZXBhcmVGcmFtZVJlY3Vyc2l2ZShyb290TGF5ZXIsIGFuaW1hdGlvblRpbWUs
IGlzQ29udGV4dEN1cnJlbnQpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXI6OnNldFZpZXdwb3J0
KGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXlvdXRSZWN0LCBjb25z
dCBJbnRTaXplJiBjb250ZW50c1NpemUpCi17Ci0gICAgLy8gVGhlc2UgcGFyYW1ldGVycyBhcmUg
dXNlZCB0byBjYWxjdWxhdGUgcG9zaXRpb24gb2YgZml4ZWQgcG9zaXRpb24gZWxlbWVudHMKLSAg
ICBtX3Zpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7Ci0gICAgbV9sYXlvdXRSZWN0ID0gbGF5b3V0
UmVjdDsKLSAgICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsKLQotICAgIG1fdmlld3Bv
cnQgPSB0YXJnZXRSZWN0OwotICAgIG1fc2Npc3NvclJlY3QgPSBjbGlwUmVjdDsKLQotICAgIC8v
IFRoZSBjbGlwUmVjdCBwYXJhbWV0ZXIgdXNlcyByZW5kZXIgdGFyZ2V0IGNvb3JkaW5hdGVzLCBt
YXAgdG8gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMKLSAgICBtX2NsaXBSZWN0ID0gY2xp
cFJlY3Q7Ci0gICAgbV9jbGlwUmVjdC5pbnRlcnNlY3QodGFyZ2V0UmVjdCk7Ci0gICAgbV9jbGlw
UmVjdCA9IEZsb2F0UmVjdCgtMSArIDIgKiAobV9jbGlwUmVjdC54KCkgLSB0YXJnZXRSZWN0Lngo
KSkgLyB0YXJnZXRSZWN0LndpZHRoKCksCi0gICAgICAgIC0xICsgMiAqIChtX2NsaXBSZWN0Lnko
KSAtIHRhcmdldFJlY3QueSgpKSAvIHRhcmdldFJlY3QuaGVpZ2h0KCksCi0gICAgICAgIDIgKiBt
X2NsaXBSZWN0LndpZHRoKCkgLyB0YXJnZXRSZWN0LndpZHRoKCksCi0gICAgICAgIDIgKiBtX2Ns
aXBSZWN0LmhlaWdodCgpIC8gdGFyZ2V0UmVjdC5oZWlnaHQoKSk7Ci0KLSNpZiBERUJVR19DTElQ
UElORwotICAgIHByaW50ZigiTGF5ZXJSZW5kZXJlcjo6c2V0Vmlld3BvcnQoKSBtX3Zpc2libGVS
ZWN0PSglLjJmLCUuMmYgJS4yZnglLjJmKSwgbV9sYXlvdXRSZWN0PSglZCwlZCAlZHglZCksIG1f
Y29udGVudHNTaXplPSglZHglZCksIG1fdmlld3BvcnQ9KCVkLCVkICVkeCVkKSwgbV9zY2lzc29y
UmVjdD0oJWQsJWQgJWR4JWQpLCBtX2NsaXBSZWN0PSglLjJmLCUuMmYgJS4yZnglLjJmKVxuIiwK
LSAgICAgICAgbV92aXNpYmxlUmVjdC54KCksIG1fdmlzaWJsZVJlY3QueSgpLCBtX3Zpc2libGVS
ZWN0LndpZHRoKCksIG1fdmlzaWJsZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgIG1fbGF5b3V0UmVj
dC54KCksIG1fbGF5b3V0UmVjdC55KCksIG1fbGF5b3V0UmVjdC53aWR0aCgpLCBtX2xheW91dFJl
Y3QuaGVpZ2h0KCksCi0gICAgICAgIG1fY29udGVudHNTaXplLndpZHRoKCksIG1fY29udGVudHNT
aXplLmhlaWdodCgpLAotICAgICAgICBtX3ZpZXdwb3J0LngoKSwgbV92aWV3cG9ydC55KCksIG1f
dmlld3BvcnQud2lkdGgoKSwgbV92aWV3cG9ydC5oZWlnaHQoKSwKLSAgICAgICAgbV9zY2lzc29y
UmVjdC54KCksIG1fc2Npc3NvclJlY3QueSgpLCBtX3NjaXNzb3JSZWN0LndpZHRoKCksIG1fc2Np
c3NvclJlY3QuaGVpZ2h0KCksCi0gICAgICAgIG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0Lnko
KSwgbV9jbGlwUmVjdC53aWR0aCgpLCBtX2NsaXBSZWN0LmhlaWdodCgpKTsKLSAgICBmZmx1c2go
c3Rkb3V0KTsKLSNlbmRpZgotCi0gICAgaWYgKCFtX2hhcmR3YXJlQ29tcG9zaXRpbmcpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIE9rYXksIHdlJ3JlIGdvaW5nIHRvIGRvIHNvbWUgZHJhd2lu
Zy4KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBHZXQgcmlkIG9mIGFueSBib3VuZCBidWZmZXIgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGlu
dGVycHJldGF0aW9uIG9mIG91cgotICAgIC8vIGdsVmVydGV4QXR0cmliUG9pbnRlciBjYWxscy4K
LSAgICBnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKTsKLSAgICBnbEJpbmRCdWZmZXIo
R0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDApOwotCi0gICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUwKTsKLSAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7Ci0gICAgZ2xEaXNhYmxlKEdM
X0NVTExfRkFDRSk7Ci0gICAgZ2xEaXNhYmxlKEdMX1NURU5DSUxfVEVTVCk7Ci0KLSAgICAvLyBJ
ZiBjdWxsaW5nIGlzIGVuYWJsZWQgdGhlbiB3ZSB3aWxsIGN1bGwgdGhlIGJhY2tmYWNlLgotICAg
IGdsQ3VsbEZhY2UoR0xfQkFDSyk7Ci0KLSAgICAvLyBUaGUgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzQ29udGV4dCB1c2VzIE9wZW5HTCBjb252ZW50aW9ucywgc28gZXZlcnl0aGluZyBp
cyB1cHNpZGUgZG93bgotICAgIGdsRnJvbnRGYWNlKEdMX0NXKTsKLQotICAgIGNoZWNrR0xFcnJv
cigpOwotCi0gICAgZ2xWaWV3cG9ydChtX3ZpZXdwb3J0LngoKSwgbV92aWV3cG9ydC55KCksIG1f
dmlld3BvcnQud2lkdGgoKSwgbV92aWV3cG9ydC5oZWlnaHQoKSk7Ci0KLSAgICBnbEVuYWJsZShH
TF9TQ0lTU09SX1RFU1QpOwotI2lmIERFQlVHX0NMSVBQSU5HCi0gICAgcHJpbnRmKCJMYXllclJl
bmRlcmVyOjpjb21wb3NpdGVMYXllcnMoKTogY2xpcHBpbmcgdG8gKCVkLCVkICVkeCVkKVxuIiwg
bV9zY2lzc29yUmVjdC54KCksIG1fc2Npc3NvclJlY3QueSgpLCBtX3NjaXNzb3JSZWN0LndpZHRo
KCksIG1fc2Npc3NvclJlY3QuaGVpZ2h0KCkpOwotICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlm
Ci0gICAgZ2xTY2lzc29yKG1fc2Npc3NvclJlY3QueCgpLCBtX3NjaXNzb3JSZWN0LnkoKSwgbV9z
Y2lzc29yUmVjdC53aWR0aCgpLCBtX3NjaXNzb3JSZWN0LmhlaWdodCgpKTsKLQotICAgIG1fc3Rl
bmNpbENsZWFyZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVM
YXllcnMoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCogcm9vdExheWVyKQotewotICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcp
OwotICAgIGlmICghbV9oYXJkd2FyZUNvbXBvc2l0aW5nKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIXJvb3RMYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVXNlZCB0byBkcmF3
IHNjYWxlIGludmFyaWFudCBsYXllcnMuIFdlIGFzc3VtZSB1bmlmb3JtIHNjYWxlLgotICAgIC8v
IFRoZSBtYXRyaXggbWFwcyB0byBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcywgYSBzeXN0
ZW0gdGhhdCBtYXBzIHRoZQotICAgIC8vIHZpZXdwb3J0IHRvIHRoZSBpbnRlcnZhbCAtMSB0byAx
LgotICAgIC8vIFNvIGl0IGhhcyB0byBzY2FsZSBkb3duIGJ5IGEgZmFjdG9yIGVxdWFsIHRvIG9u
ZSBoYWxmIHRoZSB2aWV3cG9ydC4KLSAgICBtX3NjYWxlID0gbWF0cml4Lm0xMSgpICogbV92aWV3
cG9ydC53aWR0aCgpIC8gMjsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZD4gPiBzdXJmYWNlTGF5ZXJzOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21w
b3NpdGluZ1RocmVhZD4gPiYgc3VibGF5ZXJzID0gcm9vdExheWVyLT5zdWJsYXllcnMoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykgewotICAgICAg
ICBmbG9hdCBvcGFjaXR5ID0gMTsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KG1fY2xpcFJl
Y3QpOwotICAgICAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpLCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBtYXRyaXgsIHN1cmZhY2VMYXllcnMsIG9wYWNpdHksIGNs
aXBSZWN0KTsKLSAgICB9Ci0KLSAgICAvLyBEZWNvbXBvc2UgdGhlIGRpcnR5IHJlY3QgaW50byBh
IHNldCBvZiBub24tb3ZlcmxhcGluZyByZWN0YW5nbGVzCi0gICAgLy8gKHRoZXkgbmVlZCB0byBu
b3Qgb3ZlcmxhcCBzbyB0aGF0IHRoZSBibGVuZGluZyBjb2RlIGRvZXNuJ3QgZHJhdyBhbnkgcmVn
aW9uIHR3aWNlKS4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IExheWVyUmVuZGVyaW5nUmVzdWx0
czo6TnVtYmVyT2ZEaXJ0eVJlY3RzOyArK2kpIHsKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkludFJlY3RSZWdpb24gcmVnaW9uKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0KG1f
bGFzdFJlbmRlcmluZ1Jlc3VsdHMuZGlydHlSZWN0KGkpKSk7Ci0gICAgICAgIG1fbGFzdFJlbmRl
cmluZ1Jlc3VsdHMuZGlydHlSZWdpb24gPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJl
Z2lvbjo6dW5pb25SZWdpb25zKG1fbGFzdFJlbmRlcmluZ1Jlc3VsdHMuZGlydHlSZWdpb24sIHJl
Z2lvbik7Ci0gICAgfQotCi0gICAgLy8gSWYgd2Ugd29uJ3QgZHJhdyBhbnl0aGluZywgZG9uJ3Qg
dG91Y2ggdGhlIE9wZW5HTCBBUElzLgotICAgIGlmIChtX2xhc3RSZW5kZXJpbmdSZXN1bHRzLmlz
RW1wdHkoKSAmJiBtX2xhc3RSZW5kZXJpbmdSZXN1bHRzLndhc0VtcHR5KQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBPa2F5LCB3ZSdyZSBnb2luZyB0byBkbyBzb21lIGRyYXdpbmcuCi0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYg
c29tZSBsYXllcnMgc2hvdWxkIGJlIGRyYXduIG9uIHRlbXBvcmFyeSBzdXJmYWNlcywgd2Ugc2hv
dWxkIGRvIGl0IGZpcnN0LgotICAgIGlmICghc3VyZmFjZUxheWVycy5pc0VtcHR5KCkpCi0gICAg
ICAgIGRyYXdMYXllcnNPblN1cmZhY2VzKHN1cmZhY2VMYXllcnMpOwotCi0gICAgLy8gRG9uJ3Qg
cmVuZGVyIHRoZSByb290IGxheWVyLCB0aGUgQmxhY2tCZXJyeSBwb3J0IHVzZXMgdGhlIEJhY2tp
bmdTdG9yZSB0byBkcmF3IHRoZQotICAgIC8vIHJvb3QgbGF5ZXIuCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaW50IGN1cnJlbnRT
dGVuY2lsVmFsdWUgPSAwOwotICAgICAgICBGbG9hdFJlY3QgY2xpcFJlY3QobV9jbGlwUmVjdCk7
Ci0gICAgICAgIGNvbXBvc2l0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIGN1
cnJlbnRTdGVuY2lsVmFsdWUsIGNsaXBSZWN0KTsKLSAgICB9Ci0KLSAgICBtX2NsaWVudC0+Y29u
dGV4dCgpLT5zd2FwQnVmZmVycygpOwotCi0gICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7
Ci0gICAgZ2xEaXNhYmxlKEdMX1NURU5DSUxfVEVTVCk7Ci0KLSAgICAvLyBQUiAxNDcyNTQsIHRo
ZSBFR0wgaW1wbGVtZW50YXRpb24gY3Jhc2hlcyB3aGVuIHRoZSBsYXN0IGJvdW5kIHRleHR1cmUK
LSAgICAvLyB3YXMgYW4gRUdMSW1hZ2UsIGFuZCB5b3UgdHJ5IHRvIGJpbmQgYW5vdGhlciB0ZXh0
dXJlIGFuZCB0aGUgcGl4bWFwCi0gICAgLy8gYmFja2luZyB0aGUgRUdMSW1hZ2Ugd2FzIGRlbGV0
ZWQgaW4gYmV0d2Vlbi4gTWFrZSB0aGlzIGVhc2llciBmb3IgdGhlCi0gICAgLy8gZHJpdmVyIGJ5
IHVuYmluZGluZyBlYXJseSAod2hlbiB0aGUgcGl4bWFwIGlzIGhvcGVmdWxseSBzdGlsbCBhcm91
bmQpLgotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICBMYXllclNl
dDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5ZXJzTG9ja2luZ1RleHR1cmVSZXNvdXJjZXMuYmVnaW4o
KTsKLSAgICBmb3IgKDsgaXRlciAhPSBtX2xheWVyc0xvY2tpbmdUZXh0dXJlUmVzb3VyY2VzLmVu
ZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnJlbGVhc2VUZXh0dXJlUmVzb3VyY2VzKCk7
Ci0KLSAgICBtX2xheWVyc0xvY2tpbmdUZXh0dXJlUmVzb3VyY2VzLmNsZWFyKCk7Ci0KLSAgICBp
ZiAobV9uZWVkc0NvbW1pdCkgewotICAgICAgICBtX25lZWRzQ29tbWl0ID0gZmFsc2U7Ci0gICAg
ICAgIHJvb3RMYXllci0+c2NoZWR1bGVDb21taXQoKTsKLSAgICB9Ci0KLSAgICB0ZXh0dXJlQ2Fj
aGVDb21wb3NpdGluZ1RocmVhZCgpLT5jb2xsZWN0R2FyYmFnZSgpOwotfQotCi1zdGF0aWMgZmxv
YXQgdGV4Y29vcmRzWzQgKiAyXSA9IHsgMCwgMCwgIDEsIDAsICAxLCAxLCAgMCwgMSB9OwotCi12
b2lkIExheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUJ1ZmZlcihjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNvbnRlbnRzLCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVyLCBib29sIGNvbnRlbnRzT3BhcXVlLCBm
bG9hdCBvcGFjaXR5KQotewotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBGbG9hdFF1YWQgdmVydGljZXModHJhbnNmb3JtLm1hcFBvaW50KGNvbnRlbnRzLm1pblhNaW5Z
Q29ybmVyKCkpLAotICAgICAgICB0cmFuc2Zvcm0ubWFwUG9pbnQoY29udGVudHMubWluWE1heFlD
b3JuZXIoKSksCi0gICAgICAgIHRyYW5zZm9ybS5tYXBQb2ludChjb250ZW50cy5tYXhYTWF4WUNv
cm5lcigpKSwKLSAgICAgICAgdHJhbnNmb3JtLm1hcFBvaW50KGNvbnRlbnRzLm1heFhNaW5ZQ29y
bmVyKCkpKTsKLQotICAgIGlmICghdmVydGljZXMuYm91bmRpbmdCb3goKS5pbnRlcnNlY3RzKG1f
Y2xpcFJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWNvbnRlbnRzT3BhcXVlIHx8
IG9wYWNpdHkgPCAxLjBmKSB7Ci0gICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAgICAgICAg
Z2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgZ2xEaXNhYmxlKEdMX0JMRU5EKTsKLQotICAgIGlmIChCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OmxvY2tBbmRCaW5kQnVmZmVyR0xUZXh0dXJlKGJ1ZmZlciwgR0xfVEVY
VFVSRV8yRCkpIHsKLSAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNlUHJv
Z3JhbShMYXllclByb2dyYW1SR0JBKTsKLSAgICAgICAgZ2xVbmlmb3JtMWYocHJvZ3JhbS5vcGFj
aXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7Ci0KLSAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
KHByb2dyYW0ucG9zaXRpb25Mb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsICZ2
ZXJ0aWNlcyk7Ci0gICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnRleENvb3Jk
TG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0ZXhjb29yZHMpOwotCi0gICAg
ICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwotICAgICAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnJlbGVhc2VCdWZmZXJHTFRleHR1cmUoYnVmZmVyKTsK
LSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlcjo6ZHJhd0NvbG9yKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgY29udGVudHMsIGNvbnN0
IENvbG9yJiBjb2xvcikKLXsKLSAgICBGbG9hdFF1YWQgdmVydGljZXModHJhbnNmb3JtLm1hcFBv
aW50KGNvbnRlbnRzLm1pblhNaW5ZQ29ybmVyKCkpLAotICAgICAgICB0cmFuc2Zvcm0ubWFwUG9p
bnQoY29udGVudHMubWluWE1heFlDb3JuZXIoKSksCi0gICAgICAgIHRyYW5zZm9ybS5tYXBQb2lu
dChjb250ZW50cy5tYXhYTWF4WUNvcm5lcigpKSwKLSAgICAgICAgdHJhbnNmb3JtLm1hcFBvaW50
KGNvbnRlbnRzLm1heFhNaW5ZQ29ybmVyKCkpKTsKLQotICAgIGlmICghdmVydGljZXMuYm91bmRp
bmdCb3goKS5pbnRlcnNlY3RzKG1fY2xpcFJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
b25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0gPSB1c2VQcm9ncmFtKENvbG9yUHJvZ3JhbSk7Ci0K
LSAgICBpZiAoY29sb3IuYWxwaGEoKSA8IDI1NSkgewotICAgICAgICBnbEVuYWJsZShHTF9CTEVO
RCk7Ci0gICAgICAgIGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGdsRGlzYWJsZShHTF9CTEVORCk7Ci0KLSAgICBnbFVuaWZv
cm00ZihtX2NvbG9yQ29sb3JMb2NhdGlvbiwgY29sb3IucmVkKCkgLyAyNTUuMCwgY29sb3IuZ3Jl
ZW4oKSAvIDI1NS4wLCBjb2xvci5ibHVlKCkgLyAyNTUuMCwgY29sb3IuYWxwaGEoKSAvIDI1NS4w
KTsKLSAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCks
IDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJnZlcnRpY2VzKTsKLQotICAgIGdsRHJhd0FycmF5
cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwotfQotCi1ib29sIExheWVyUmVuZGVyZXI6OnVzZVN1
cmZhY2UoTGF5ZXJSZW5kZXJlclN1cmZhY2UqIHN1cmZhY2UpCi17Ci0gICAgaWYgKG1fY3VycmVu
dExheWVyUmVuZGVyZXJTdXJmYWNlID09IHN1cmZhY2UpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgbV9jdXJyZW50TGF5ZXJSZW5kZXJlclN1cmZhY2UgPSBzdXJmYWNlOwotICAgIGlmICgh
c3VyZmFjZSkgewotICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7
Ci0gICAgICAgIGdsVmlld3BvcnQobV92aWV3cG9ydC54KCksIG1fdmlld3BvcnQueSgpLCBtX3Zp
ZXdwb3J0LndpZHRoKCksIG1fdmlld3BvcnQuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBzdXJmYWNlLT5lbnN1cmVUZXh0dXJlKCk7Ci0KLSAgICBHTHVpbnQg
dGV4aWQgPSBzdXJmYWNlLT50ZXh0dXJlKCktPnBsYXRmb3JtVGV4dHVyZSgpOwotCi0gICAgaWYg
KCFtX2ZibykKLSAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICBnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJV
RkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHRleGlkLCAwKTsKLQot
I2lmbmRlZiBOREVCVUcKLSAgICBHTGVudW0gc3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKEdMX0ZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NP
TVBMRVRFKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzIGVycm9yICV4XG4iLCBzdGF0dXMpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
I2VuZGlmCi0KLSAgICBnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBz
dXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIExh
eWVyUmVuZGVyZXI6OmRyYXdMYXllcnNPblN1cmZhY2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5
ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYgc3VyZmFjZUxheWVycykKLXsKLSAgICAvLyBOb3JtYWxs
eSwgYW4gdXBzaWRlLWRvd24gdHJhbnNmb3JtIGlzIHVzZWQsIGFzIGlzIHRoZSBHTCBjdXN0b20u
IEhvd2V2ZXIsIHdoZW4gZHJhd2luZwotICAgIC8vIGxheWVycyB0byBzdXJmYWNlcywgYSByaWdo
dC1zaWRlLXVwIHRyYW5zZm9ybSBpcyB1c2VkLCBzbyB3ZSBuZWVkIHRvIHN3aXRjaCB0aGUgd2lu
ZGluZyBvcmRlcgotICAgIC8vIGZvciBjdWxsaW5nLgotICAgIGdsRnJvbnRGYWNlKEdMX0NDVyk7
Ci0KLSAgICBmb3IgKGludCBpID0gc3VyZmFjZUxheWVycy5zaXplKCkgLSAxOyBpID49IDA7IGkt
LSkgewotICAgICAgICBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciA9IHN1cmZhY2VMYXll
cnNbaV0uZ2V0KCk7Ci0gICAgICAgIExheWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNlID0gbGF5
ZXItPmxheWVyUmVuZGVyZXJTdXJmYWNlKCk7Ci0gICAgICAgIGlmICghc3VyZmFjZSB8fCAhdXNl
U3VyZmFjZShzdXJmYWNlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGdsRGlz
YWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgICAgICBnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7
Ci0gICAgICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0KLSAgICAgICAgaW50IGN1
cnJlbnRTdGVuY2lsVmFsdWUgPSAwOwotICAgICAgICBGbG9hdFJlY3QgY2xpcFJlY3QoLTEsIC0x
LCAyLCAyKTsKLSAgICAgICAgY29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKHN1cmZhY2VMYXllcnNb
aV0uZ2V0KCksIGN1cnJlbnRTdGVuY2lsVmFsdWUsIGNsaXBSZWN0KTsKLQotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICAgICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICAgICAg
bV9maWx0ZXJSZW5kZXJlciA9IExheWVyRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZShHTEVTMlByb2dy
YW06OlBvc2l0aW9uQXR0cmlidXRlSW5kZXgsIEdMRVMyUHJvZ3JhbTo6VGV4Q29vcmRBdHRyaWJ1
dGVJbmRleCk7Ci0gICAgICAgIGlmIChsYXllci0+ZmlsdGVyT3BlcmF0aW9uc0NoYW5nZWQoKSkg
ewotICAgICAgICAgICAgbGF5ZXItPnNldEZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKGZhbHNlKTsK
LSAgICAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXJBY3Rpb25zKG1fZmlsdGVyUmVuZGVyZXItPmFj
dGlvbnNGb3JPcGVyYXRpb25zKHN1cmZhY2UsIGxheWVyLT5maWx0ZXJzKCkub3BlcmF0aW9ucygp
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlBY3Rpb25zKG1f
ZmJvLCBsYXllciwgbGF5ZXItPmZpbHRlckFjdGlvbnMoKSk7Ci0gICAgICAgIGdsQ2xlYXJDb2xv
cigwLCAwLCAwLCAwKTsKLSNlbmRpZgotICAgIH0KLQotICAgIGdsRnJvbnRGYWNlKEdMX0NXKTsK
LQotICAgIC8vIElmIHRoZXJlIGFyZSBsYXllcnMgZHJhd24gb24gc3VyZmFjZXMsIHdlIG5lZWQg
dG8gc3dpdGNoIHRvIGRlZmF1bHQgZnJhbWVidWZmZXIuCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSBq
dXN0IG5lZWQgdG8gc2V0IHZpZXdwb3J0LgotICAgIHVzZVN1cmZhY2UoMCk7Ci0gICAgZ2xFbmFi
bGUoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBnbFNjaXNzb3IobV9zY2lzc29yUmVjdC54KCksIG1f
c2Npc3NvclJlY3QueSgpLCBtX3NjaXNzb3JSZWN0LndpZHRoKCksIG1fc2Npc3NvclJlY3QuaGVp
Z2h0KCkpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXI6OmFkZExheWVyKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqIGxheWVyKQotewotICAgIG1fbGF5ZXJzLmFkZChsYXllcik7Ci19Ci0KLWJvb2wg
TGF5ZXJSZW5kZXJlcjo6cmVtb3ZlTGF5ZXIoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIp
Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJzLnJlbW92ZShsYXllcik7Ci19Ci0KLXZvaWQgTGF5ZXJS
ZW5kZXJlcjo6YWRkTGF5ZXJUb1JlbGVhc2VUZXh0dXJlUmVzb3VyY2VzTGlzdChMYXllckNvbXBv
c2l0aW5nVGhyZWFkKiBsYXllcikKLXsKLSAgICBtX2xheWVyc0xvY2tpbmdUZXh0dXJlUmVzb3Vy
Y2VzLmFkZChsYXllcik7Ci19Ci0KLXN0YXRpYyBpbnQgZ2xSb3VuZChmbG9hdCBmKQotewotICAg
IHJldHVybiBmbG9vcmYoZiArIDAuNWYpOwotfQotCi0vLyBUcmFuc2Zvcm0gbm9ybWFsaXplZCBk
ZXZpY2UgY29vcmRpbmF0ZXMgdG8gd2luZG93IGNvb3JkaW5hdGVzCi0vLyBhcyBzcGVjaWZpZWQg
aW4gdGhlIE9wZW5HTCBFUyAyLjAgc3BlYyBzZWN0aW9uIDIuMTIuMS4KLUludFJlY3QgTGF5ZXJS
ZW5kZXJlcjo6dG9PcGVuR0xXaW5kb3dDb29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmIHIpIGNv
bnN0Ci17Ci0gICAgZmxvYXQgdncyID0gbV92aWV3cG9ydC53aWR0aCgpIC8gMi4wOwotICAgIGZs
b2F0IHZoMiA9IG1fdmlld3BvcnQuaGVpZ2h0KCkgLyAyLjA7Ci0gICAgZmxvYXQgb3ggPSBtX3Zp
ZXdwb3J0LngoKSArIHZ3MjsKLSAgICBmbG9hdCBveSA9IG1fdmlld3BvcnQueSgpICsgdmgyOwot
ICAgIHJldHVybiBJbnRSZWN0KGdsUm91bmQoci54KCkgKiB2dzIgKyBveCksIGdsUm91bmQoci55
KCkgKiB2aDIgKyBveSksIGdsUm91bmQoci53aWR0aCgpICogdncyKSwgZ2xSb3VuZChyLmhlaWdo
dCgpICogdmgyKSk7Ci19Ci0KLXN0YXRpYyBGbG9hdFJlY3QgdG9QaXhlbENvb3JkaW5hdGVzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgdmlld3BvcnQsIGludCBzdXJmYWNl
SGVpZ2h0KQotewotICAgIGZsb2F0IHZ3MiA9IHZpZXdwb3J0LndpZHRoKCkgLyAyLjA7Ci0gICAg
ZmxvYXQgdmgyID0gdmlld3BvcnQuaGVpZ2h0KCkgLyAyLjA7Ci0gICAgZmxvYXQgb3ggPSB2aWV3
cG9ydC54KCkgKyB2dzI7Ci0gICAgZmxvYXQgb3kgPSBzdXJmYWNlSGVpZ2h0IC0gKHZpZXdwb3J0
LnkoKSArIHZoMik7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LngoKSAqIHZ3MiArIG94LCAt
KHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkgKiB2aDIgKyBveSwgcmVjdC53aWR0aCgpICogdncy
LCByZWN0LmhlaWdodCgpICogdmgyKTsKLX0KLQotLy8gVHJhbnNmb3JtIG5vcm1hbGl6ZWQgZGV2
aWNlIGNvb3JkaW5hdGVzIHRvIHdpbmRvdyBjb29yZGluYXRlcyBhcyBXZWJLaXQgdW5kZXJzdGFu
ZHMgdGhlbS4KLS8vCi0vLyBUaGUgT3BlbkdMIHN1cmZhY2UgbWF5IGJlIGxhcmdlciB0aGFuIHRo
ZSBXZWJLaXQgd2luZG93LCBhbmQgT3BlbkdMIHdpbmRvdyBjb29yZGluYXRlcwotLy8gaGF2ZSBv
cmlnaW4gaW4gYm90dG9tIGxlZnQgd2hpbGUgV2ViS2l0IHdpbmRvdyBjb29yZGluYXRlcyBvcmln
aW4gaXMgaW4gdG9wIGxlZnQuCi0vLyBUaGUgdmlld3BvcnQgaXMgc2V0dXAgdG8gY292ZXIgdGhl
IHVwcGVyIHBvcnRpb24gb2YgdGhlIGxhcmdlciBPcGVuR0wgc3VyZmFjZS4KLUludFJlY3QgTGF5
ZXJSZW5kZXJlcjo6dG9XaW5kb3dDb29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodG9QaXhlbENvb3JkaW5hdGVzKHJl
Y3QsIG1fdmlld3BvcnQsIG1fY2xpZW50LT5jb250ZXh0KCktPnN1cmZhY2VTaXplKCkuaGVpZ2h0
KCkpKTsKLX0KLQotSW50UmVjdCBMYXllclJlbmRlcmVyOjp0b1BpeGVsVmlld3BvcnRDb29yZGlu
YXRlcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIGNsaXAgcmVj
dCBkZWZpbmVzIHRoZSB3ZWIgcGFnZSdzIHBpeGVsIHZpZXdwb3J0ICh0byB1c2UgVmlld3BvcnRB
Y2Nlc3NvciB0ZXJtaW5vbG9neSksCi0gICAgLy8gbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhl
IEdMIHZpZXdwb3J0LiBTbyB0cmFuc2xhdGUgZnJvbSB3aW5kb3cgY29vcmRpbmF0ZXMgdG8gcGl4
ZWwKLSAgICAvLyB2aWV3cG9ydCBjb29yZGluYXRlcy4KLSAgICBpbnQgc3VyZmFjZUhlaWdodCA9
IG1fY2xpZW50LT5jb250ZXh0KCktPnN1cmZhY2VTaXplKCkuaGVpZ2h0KCk7Ci0gICAgRmxvYXRS
ZWN0IHBpeGVsVmlld3BvcnQgPSB0b1BpeGVsQ29vcmRpbmF0ZXMobV9jbGlwUmVjdCwgbV92aWV3
cG9ydCwgc3VyZmFjZUhlaWdodCk7Ci0gICAgRmxvYXRSZWN0IHJlc3VsdCA9IHRvUGl4ZWxDb29y
ZGluYXRlcyhyZWN0LCBtX3ZpZXdwb3J0LCBzdXJmYWNlSGVpZ2h0KTsKLSAgICByZXN1bHQubW92
ZSgtcGl4ZWxWaWV3cG9ydC54KCksIC1waXhlbFZpZXdwb3J0LnkoKSk7Ci0gICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3QocmVzdWx0KTsKLX0KLQotSW50UmVjdCBMYXllclJlbmRlcmVyOjp0b0Rv
Y3VtZW50Vmlld3BvcnRDb29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Ci17
Ci0gICAgLy8gU2ltaWxhciB0byB0b1BpeGVsVmlld3BvcnRDb29yZGluYXRlcyBleGNlcHQgdGhh
dCB0aGlzIGFsc28gdGFrZXMgYW55IHpvb20gaW50byBhY2NvdW50LgotICAgIEZsb2F0UmVjdCBy
ZXN1bHQgPSB0b1BpeGVsVmlld3BvcnRDb29yZGluYXRlcyhyZWN0KTsKLSAgICByZXN1bHQuc2Nh
bGUoMSAvIG1fc2NhbGUpOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlc3VsdCk7Ci19
Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlcjo6ZHJhd0RlYnVnQm9yZGVyKGNvbnN0IFZlY3RvcjxGbG9h
dFBvaW50PiYgdHJhbnNmb3JtZWRCb3VuZHMsIGNvbnN0IENvbG9yJiBib3JkZXJDb2xvciwgZmxv
YXQgYm9yZGVyV2lkdGgpCi17Ci0gICAgaWYgKGJvcmRlckNvbG9yLmFscGhhKCkgPCAyNTUpIHsK
LSAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUs
IEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgIH0gZWxzZQotICAgICAgICBnbERpc2FibGUo
R0xfQkxFTkQpOwotCi0gICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNlUHJvZ3Jh
bShDb2xvclByb2dyYW0pOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnBvc2l0
aW9uTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0cmFuc2Zvcm1lZEJvdW5k
cy5kYXRhKCkpOwotICAgIGdsVW5pZm9ybTRmKG1fY29sb3JDb2xvckxvY2F0aW9uLCBib3JkZXJD
b2xvci5yZWQoKSAvIDI1NS4wLCBib3JkZXJDb2xvci5ncmVlbigpIC8gMjU1LjAsIGJvcmRlckNv
bG9yLmJsdWUoKSAvIDI1NS4wLCBib3JkZXJDb2xvci5hbHBoYSgpIC8gMjU1LjApOwotCi0gICAg
Z2xMaW5lV2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIGdsRHJhd0FycmF5cyhHTF9MSU5FX0xPT1As
IDAsIHRyYW5zZm9ybWVkQm91bmRzLnNpemUoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlcjo6
ZGlzY2FyZEZyb250VmlzaWJpbGl0eSgpCi17Ci0gICAgaWYgKG1faGFyZHdhcmVDb21wb3NpdGlu
ZykgewotICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgZm9yIChMYXllclNl
dDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9sYXllcnMuZW5k
KCk7ICsraXRlcikKLSAgICAgICAgICAgICgqaXRlciktPmRpc2NhcmRGcm9udFZpc2liaWxpdHko
KTsKLSAgICB9Ci19Ci0KLS8vIERyYXdzIGEgZGVidWcgYm9yZGVyIGFyb3VuZCB0aGUgbGF5ZXIn
cyBib3VuZHMuCi12b2lkIExheWVyUmVuZGVyZXI6OmRyYXdEZWJ1Z0JvcmRlcihMYXllckNvbXBv
c2l0aW5nVGhyZWFkKiBsYXllcikKLXsKLSAgICBDb2xvciBib3JkZXJDb2xvciA9IGxheWVyLT5i
b3JkZXJDb2xvcigpOwotCi0jaWYgREVCVUdfTEFZRVJfQU5JTUFUSU9OUwotICAgIGlmIChsYXll
ci0+aGFzUnVubmluZ0FuaW1hdGlvbnMoKSkKLSAgICAgICAgYm9yZGVyQ29sb3IgPSAgQ29sb3Io
MHgwMCwgMHhGRiwgMHgwMCwgMHhGRik7Ci0jZW5kaWYKLQotICAgIGlmICghYm9yZGVyQ29sb3Iu
YWxwaGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UncmUgcmVuZGVyaW5nIHRv
IGEgc3VyZmFjZSwgZG9uJ3QgaW5jbHVkZSBkZWJ1ZyBib3JkZXIgaW5zaWRlIHRoZSBzdXJmYWNl
LgotICAgIGlmIChtX2N1cnJlbnRMYXllclJlbmRlcmVyU3VyZmFjZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHRyYW5zZm9ybWVkQm91bmRzOwotICAgIGlmIChs
YXllckFscmVhZHlPblN1cmZhY2UobGF5ZXIpKQotICAgICAgICB0cmFuc2Zvcm1lZEJvdW5kcyA9
IGxheWVyLT5sYXllclJlbmRlcmVyU3VyZmFjZSgpLT50cmFuc2Zvcm1lZEJvdW5kcygpOwotICAg
IGVsc2UKLSAgICAgICAgdHJhbnNmb3JtZWRCb3VuZHMgPSBsYXllci0+dHJhbnNmb3JtZWRCb3Vu
ZHMoKTsKLQotICAgIGRyYXdEZWJ1Z0JvcmRlcih0cmFuc2Zvcm1lZEJvdW5kcywgYm9yZGVyQ29s
b3IsIHN0ZDo6bWF4KDEuMGYsIGxheWVyLT5ib3JkZXJXaWR0aCgpKSk7Ci19Ci0KLS8vIENsZWFy
cyBhIHJlY3RhbmdsZSBpbnNpZGUgdGhlIGxheWVyJ3MgYm91bmRzLgotdm9pZCBMYXllclJlbmRl
cmVyOjpkcmF3SG9sZVB1bmNoUmVjdChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllcikKLXsK
LSAgICBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0gPSB1c2VQcm9ncmFtKENvbG9yUHJvZ3Jh
bSk7Ci0gICAgZ2xVbmlmb3JtNGYobV9jb2xvckNvbG9yTG9jYXRpb24sIDAsIDAsIDAsIDApOwot
Ci0gICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAgIGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfWkVS
Tyk7Ci0gICAgRmxvYXRRdWFkIGhvbGUgPSBsYXllci0+dHJhbnNmb3JtZWRIb2xlUHVuY2hSZWN0
KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0ucG9zaXRpb25Mb2NhdGlvbigp
LCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsICZob2xlKTsKLSAgICBnbERyYXdBcnJheXMoR0xf
VFJJQU5HTEVfRkFOLCAwLCA0KTsKLSAgICBjaGVja0dMRXJyb3IoKTsKLX0KLQotdm9pZCBMYXll
clJlbmRlcmVyOjpwcmVwYXJlRnJhbWVSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCog
bGF5ZXIsIGRvdWJsZSBhbmltYXRpb25UaW1lLCBib29sIGlzQ29udGV4dEN1cnJlbnQpCi17Ci0g
ICAgLy8gVGhpcyBtaWdodCBjYXVzZSB0aGUgbGF5ZXIgdG8gcmVjb21wdXRlIHNvbWUgYXR0cmli
dXRlcy4KLSAgICBtX2xhc3RSZW5kZXJpbmdSZXN1bHRzLm5lZWRzQW5pbWF0aW9uRnJhbWUgfD0g
bGF5ZXItPnVwZGF0ZUFuaW1hdGlvbnMoYW5pbWF0aW9uVGltZSk7Ci0KLSAgICBpZiAoaXNDb250
ZXh0Q3VycmVudCkgewotICAgICAgICAvLyBFdmVuIG5vbi12aXNpYmxlIGxheWVycyBuZWVkIHRv
IHBlcmZvcm0gdGhlaXIgdGV4dHVyZSBqb2JzLCBvciB0aGV5IHdpbGwKLSAgICAgICAgLy8gcGls
ZSB1cCBhbmQgd2FzdGUgbWVtb3J5LgotICAgICAgICBpZiAobGF5ZXItPm5lZWRzVGV4dHVyZSgp
KQotICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCk7Ci0g
ICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkgJiYgbGF5ZXItPm1hc2tMYXllcigpLT5uZWVk
c1RleHR1cmUoKSkKLSAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+dXBkYXRlVGV4dHVy
ZUNvbnRlbnRzSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkg
ewotICAgICAgICAgICAgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogcmVwbGljYSA9IGxheWVyLT5y
ZXBsaWNhTGF5ZXIoKTsKLSAgICAgICAgICAgIGlmIChyZXBsaWNhLT5uZWVkc1RleHR1cmUoKSkK
LSAgICAgICAgICAgICAgICByZXBsaWNhLT51cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgp
OwotICAgICAgICAgICAgaWYgKHJlcGxpY2EtPm1hc2tMYXllcigpICYmIHJlcGxpY2EtPm1hc2tM
YXllcigpLT5uZWVkc1RleHR1cmUoKSkKLSAgICAgICAgICAgICAgICByZXBsaWNhLT5tYXNrTGF5
ZXIoKS0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYgc3Vi
bGF5ZXJzID0gbGF5ZXItPnN1YmxheWVycygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c3VibGF5ZXJzLnNpemUoKTsgaSsrKQotICAgICAgICBwcmVwYXJlRnJhbWVSZWN1cnNpdmUoc3Vi
bGF5ZXJzW2ldLmdldCgpLCBhbmltYXRpb25UaW1lLCBpc0NvbnRleHRDdXJyZW50KTsKLX0KLQot
dm9pZCBMYXllclJlbmRlcmVyOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBWZWN0b3I8UmVmUHRyPExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4mIHN1cmZhY2VMYXllcnMsIGZsb2F0IG9wYWNpdHksIEZs
b2F0UmVjdCBjbGlwUmVjdCkKLXsKLSAgICAvLyBUaGUgY29udHJhY3QgZm9yIExheWVyQ29tcG9z
aXRpbmdUaHJlYWQ6OnNldExheWVyUmVuZGVyZXIgaXMgaXQgbXVzdCBiZSBzZXQgaWYgdGhlIGxh
eWVyIGhhcyBiZWVuIHJlbmRlcmVkLgotICAgIC8vIFNvIGRvIGl0IG5vdywgYmVmb3JlIHdlIHJl
bmRlciBpdCBpbiBjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUuCi0gICAgbGF5ZXItPnNldExheWVy
UmVuZGVyZXIodGhpcyk7Ci0gICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgbGF5
ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwotICAgIGlmIChsYXllci0+
cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogcmVwbGlj
YSA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKLSAgICAgICAgcmVwbGljYS0+c2V0TGF5ZXJSZW5k
ZXJlcih0aGlzKTsKLSAgICAgICAgaWYgKHJlcGxpY2EtPm1hc2tMYXllcigpKQotICAgICAgICAg
ICAgcmVwbGljYS0+bWFza0xheWVyKCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci0gICAgfQot
Ci0gICAgLy8gQ29tcHV0ZSB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiB0aGF0IHdpbGwg
YmUgYXBwbGllZCB0byB0aGlzIGxheWVyIGFuZAotICAgIC8vIGFsbCBpdHMgc3VibGF5ZXJzLiBJ
dCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IHRoZSBsYXllcidzIHBvc2l0aW9uCi0gICAg
Ly8gaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXllcidzIGFuY2hvciBwb2ludC4gQWxzbywgdGhl
IGNvb3JkaW5hdGUgc3lzdGVtIHVzZWQKLSAgICAvLyBhc3N1bWVzIHRoYXQgdGhlIG9yaWdpbiBp
cyBhdCB0aGUgbG93ZXIgbGVmdCBldmVuIHRob3VnaCB0aGUgY29vcmRpbmF0ZXMgdGhlIGJyb3dz
ZXIKLSAgICAvLyBnaXZlcyB1cyBmb3IgdGhlIGxheWVycyBhcmUgZm9yIHRoZSB1cHBlciBsZWZ0
IGNvcm5lci4gVGhlIFkgZmxpcCBoYXBwZW5zIHZpYQotICAgIC8vIHRoZSBvcnRob2dyYXBoaWMg
cHJvamVjdGlvbiBhcHBsaWVkIGF0IHJlbmRlciB0aW1lLgotICAgIC8vIFRoZSB0cmFuc2Zvcm1h
dGlvbiBjaGFpbiBmb3IgdGhlIGxheWVyIGlzICh1c2luZyB0aGUgTWF0cml4IHggVmVjdG9yIG9y
ZGVyKToKLSAgICAvLyBNID0gTVtwXSAqIFRyW2xdICogTVtsXSAqIFRyW2NdCi0gICAgLy8gV2hl
cmUgTVtwXSBpcyB0aGUgcGFyZW50IG1hdHJpeCBwYXNzZWQgZG93biB0byB0aGUgZnVuY3Rpb24K
LSAgICAvLyAgICAgICBUcltsXSBpcyB0aGUgdHJhbnNsYXRpb24gbWF0cml4IGxvY2F0aW5nIHRo
ZSBsYXllcidzIGFuY2hvciBwb2ludAotICAgIC8vICAgICAgIFRyW2NdIGlzIHRoZSB0cmFuc2xh
dGlvbiBvZmZzZXQgYmV0d2VlbiB0aGUgYW5jaG9yIHBvaW50IGFuZCB0aGUgY2VudGVyIG9mIHRo
ZSBsYXllcgotICAgIC8vICAgICAgIE1bbF0gaXMgdGhlIGxheWVyJ3MgbWF0cml4IChhcHBsaWVk
IGF0IHRoZSBhbmNob3IgcG9pbnQpCi0gICAgLy8gVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIGNv
b3JkaW5hdGUgc3lzdGVtIHdob3NlIG9yaWdpbiBpcyB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4K
LSAgICAvLyBOb3RlIHRoYXQgdGhlIGZpbmFsIG1hdHJpeCB1c2VkIGJ5IHRoZSBzaGFkZXIgZm9y
IHRoZSBsYXllciBpcyBQICogTSAqIFMgLiBUaGlzIGZpbmFsIHByb2R1Y3QKLSAgICAvLyBpcyBj
b21wdXRlZCBpbiBkcmF3VGV4dHVyZWRRdWFkKCkuCi0gICAgLy8gV2hlcmU6IFAgaXMgdGhlIHBy
b2plY3Rpb24gbWF0cml4Ci0gICAgLy8gICAgICAgIE0gaXMgdGhlIGxheWVyJ3MgbWF0cml4IGNv
bXB1dGVkIGFib3ZlCi0gICAgLy8gICAgICAgIFMgaXMgdGhlIHNjYWxlIGFkanVzdG1lbnQgKHRv
IHNjYWxlIHVwIHRvIHRoZSBsYXllciBzaXplKQotICAgIEZsb2F0U2l6ZSBib3VuZHMgPSBsYXll
ci0+Ym91bmRzKCk7Ci0gICAgaWYgKGxheWVyLT5zaXplSXNTY2FsZUludmFyaWFudCgpKQotICAg
ICAgICBib3VuZHMuc2NhbGUoMS4wIC8gbV9zY2FsZSk7Ci0gICAgRmxvYXRQb2ludCBhbmNob3JQ
b2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwotICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBs
YXllci0+cG9zaXRpb24oKTsKLQotICAgIC8vIExheWVyIHdob3NlIGhhc0ZpeGVkQ29udGFpbmVy
IGlzIHRydWUgd2lsbCBnZXQgc2Nyb2xsZWQgcmVsYXRpdmUgdG8KLSAgICAvLyB0aGUgZml4ZWQg
cG9zaXRpb25lZCBwYXJlbnQuCi0gICAgaWYgKCFsYXllci0+aGFzRml4ZWRDb250YWluZXIoKSAm
JiAobGF5ZXItPmlzRml4ZWRQb3NpdGlvbigpIHx8IGxheWVyLT5oYXNGaXhlZEFuY2VzdG9ySW5E
T01UcmVlKCkpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBsYXlvdXRSZWN0ID0gbV9sYXlvdXRSZWN0
OwotICAgICAgICBGbG9hdFNpemUgY29udGVudHNTaXplID0gbV9jb250ZW50c1NpemU7Ci0gICAg
ICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IG1fdmlzaWJsZVJlY3Q7Ci0gICAgICAgIGZvciAo
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogY3VyciA9IGxheWVyLT5zdXBlcmxheWVyKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5zdXBlcmxheWVyKCkpIHsKLQotICAgICAgICAgICAgaWYgKGN1cnItPmlz
Q29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycygpKSB7Ci0gICAgICAgICAgICAgICAgbGF5
b3V0UmVjdCA9IGN1cnItPmZyYW1lVmlzaWJsZVJlY3QoKTsKLSAgICAgICAgICAgICAgICBjb250
ZW50c1NpemUgPSBjdXJyLT5mcmFtZUNvbnRlbnRzU2l6ZSgpOwotCi0gICAgICAgICAgICAgICAg
Ly8gSWYgd2UgcmVhY2ggYSBjb250YWluZXIgZm9yIGZpeGVkIHBvc2l0aW9uIGxheWVycywgYW5k
IGl0IGhhcyBpdHMgb3ZlcnJpZGUncyBwb3NpdGlvbiBzZXQsIGl0IG1lYW5zIGl0IGlzIGEgc2Ny
b2xsYWJsZSBpZnJhbWUKLSAgICAgICAgICAgICAgICAvLyBjdXJyZW50bHkgYmVpbmcgc2Nyb2xs
ZWQuIE90aGVyd2lzZSwgdXNlIHRoZSBXZWJLaXQtdGhyZWFkIHNjcm9sbCBwb3NpdGlvbiBzdG9y
ZWQgaW4gZnJhbWVWaXNpYmxlUmVjdCgpLgotICAgICAgICAgICAgICAgIGlmIChjdXJyLT5vdmVy
cmlkZSgpLT5pc1Bvc2l0aW9uU2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSW52ZXJ0
ZWQgbG9naWMgb2YKLSAgICAgICAgICAgICAgICAgICAgLy8gRmxvYXRQb2ludCBsYXllclBvc2l0
aW9uKC1zY3JvbGxQb3NpdGlvbi54KCkgKyBhbmNob3IueCgpICogYm91bmRzLndpZHRoKCksCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAtc2Nyb2xsUG9z
aXRpb24ueSgpICsgYW5jaG9yLnkoKSAqIGJvdW5kcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAg
ICAtKGN1cnItPm92ZXJyaWRlKCktPnBvc2l0aW9uKCkueCgpIC0gKGN1cnItPmFuY2hvclBvaW50
KCkueCgpICogY3Vyci0+Ym91bmRzKCkud2lkdGgoKSkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgLShjdXJyLT5vdmVycmlkZSgpLT5wb3NpdGlvbigpLnkoKSAtIChjdXJyLT5hbmNob3JQb2lu
dCgpLnkoKSAqIGN1cnItPmJvdW5kcygpLmhlaWdodCgpKSkpOwotICAgICAgICAgICAgICAgICAg
ICB2aXNpYmxlUmVjdCA9IEZsb2F0UmVjdChzY3JvbGxQb3NpdGlvbiwgbGF5b3V0UmVjdC5zaXpl
KCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB2aXNpYmxl
UmVjdCA9IGxheW91dFJlY3Q7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIEZsb2F0UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9u
ID0gRmxvYXRQb2ludCgwLCAwKSArIChjb250ZW50c1NpemUgLSB2aXNpYmxlUmVjdC5zaXplKCkp
OwotICAgICAgICBGbG9hdFBvaW50IG1heGltdW1MYXlvdXRTY3JvbGxQb3NpdGlvbiA9IEZsb2F0
UG9pbnQoMCwgMCkgKyAoY29udGVudHNTaXplIC0gbGF5b3V0UmVjdC5zaXplKCkpOwotCi0gICAg
ICAgIC8vIFRoZSBiYXNpYyBpZGVhIGhlcmUgaXMgdG8gc2V0IHZpc2libGUgeC95IHRvIHRoZSB2
YWx1ZSB3ZSB3YW50LCBhbmQKLSAgICAgICAgLy8gbGF5b3V0IHgveSB0byB0aGUgdmFsdWUgV2Vi
Q29yZSBsYXlvdXRlZCB0aGUgZml4ZWQgZWxlbWVudCB0by4KLSAgICAgICAgZmxvYXQgdmlzaWJs
ZVk7Ci0gICAgICAgIGZsb2F0IGxheW91dFk7Ci0gICAgICAgIGlmIChsYXllci0+aXNGaXhlZFRv
VG9wKCkpIHsKLSAgICAgICAgICAgIHZpc2libGVZID0gbWF4KDAuMGYsIG1pbihtYXhpbXVtU2Ny
b2xsUG9zaXRpb24ueSgpLCB2aXNpYmxlUmVjdC55KCkpKTsKLSAgICAgICAgICAgIGxheW91dFkg
PSBtYXgoMC4wZiwgbWluKG1heGltdW1MYXlvdXRTY3JvbGxQb3NpdGlvbi55KCksIGxheW91dFJl
Y3QueSgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2aXNpYmxlWSA9IG1pbihj
b250ZW50c1NpemUuaGVpZ2h0KCksIHZpc2libGVSZWN0LnkoKSArIHZpc2libGVSZWN0LmhlaWdo
dCgpKTsKLSAgICAgICAgICAgIGxheW91dFkgPSBtaW4oY29udGVudHNTaXplLmhlaWdodCgpLCBt
YXgoMC4wZiwgbGF5b3V0UmVjdC55KCkpICsgbGF5b3V0UmVjdC5oZWlnaHQoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcG9zaXRpb24uc2V0WShwb3NpdGlvbi55KCkgKyAodmlzaWJsZVkgLSBsYXlv
dXRZKSk7Ci0KLSAgICAgICAgZmxvYXQgdmlzaWJsZVg7Ci0gICAgICAgIGZsb2F0IGxheW91dFg7
Ci0gICAgICAgIGlmIChsYXllci0+aXNGaXhlZFRvTGVmdCgpKSB7Ci0gICAgICAgICAgICB2aXNp
YmxlWCA9IG1heCgwLjBmLCBtaW4obWF4aW11bVNjcm9sbFBvc2l0aW9uLngoKSwgdmlzaWJsZVJl
Y3QueCgpKSk7Ci0gICAgICAgICAgICBsYXlvdXRYID0gbWF4KDAuMGYsIG1pbihtYXhpbXVtTGF5
b3V0U2Nyb2xsUG9zaXRpb24ueCgpLCBsYXlvdXRSZWN0LngoKSkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgdmlzaWJsZVggPSBtaW4oY29udGVudHNTaXplLndpZHRoKCksIHZpc2li
bGVSZWN0LngoKSArIHZpc2libGVSZWN0LndpZHRoKCkpOwotICAgICAgICAgICAgbGF5b3V0WCA9
IG1pbihjb250ZW50c1NpemUud2lkdGgoKSwgbWF4KDAuMGYsIGxheW91dFJlY3QueCgpKSArIGxh
eW91dFJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcG9zaXRpb24uc2V0WChwb3Np
dGlvbi54KCkgKyAodmlzaWJsZVggLSBsYXlvdXRYKSk7Ci0gICAgfQotCi0gICAgLy8gT2Zmc2V0
IGJldHdlZW4gYW5jaG9yIHBvaW50IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBxdWFkLgotICAgIGZs
b2F0IGNlbnRlck9mZnNldFggPSAoMC41IC0gYW5jaG9yUG9pbnQueCgpKSAqIGJvdW5kcy53aWR0
aCgpOwotICAgIGZsb2F0IGNlbnRlck9mZnNldFkgPSAoMC41IC0gYW5jaG9yUG9pbnQueSgpKSAq
IGJvdW5kcy5oZWlnaHQoKTsKLQotICAgIC8vIE0gPSBNW3BdCi0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbG9jYWxNYXRyaXggPSBtYXRyaXg7Ci0gICAgLy8gTSA9IE1bcF0gKiBUcltsXQotICAg
IGxvY2FsTWF0cml4LnRyYW5zbGF0ZTNkKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpLCBsYXll
ci0+YW5jaG9yUG9pbnRaKCkpOwotICAgIC8vIE0gPSBNW3BdICogVHJbbF0gKiBNW2xdCi0gICAg
bG9jYWxNYXRyaXgubXVsdGlwbHkobGF5ZXItPnRyYW5zZm9ybSgpKTsKLSAgICAvLyBNID0gTVtw
XSAqIFRyW2xdICogTVtsXSAqIFRyW2NdCi0gICAgbG9jYWxNYXRyaXgudHJhbnNsYXRlM2QoY2Vu
dGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFooKSk7Ci0KLSAg
ICAvLyBDYWxjdWxhdGUgdGhlIGxheWVyJ3Mgb3BhY2l0eS4KLSAgICBvcGFjaXR5ICo9IGxheWVy
LT5vcGFjaXR5KCk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFByb2plY3Rpb25N
YXRyaXggPSBwcm9qZWN0aW9uTWF0cml4OwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBi
b29sIHVzZUxheWVyUmVuZGVyZXJTdXJmYWNlID0gbGF5ZXItPm1hc2tMYXllcigpIHx8IGxheWVy
LT5yZXBsaWNhTGF5ZXIoKSB8fCBsYXllci0+ZmlsdGVycygpLnNpemUoKTsKLSNlbHNlCi0gICAg
Ym9vbCB1c2VMYXllclJlbmRlcmVyU3VyZmFjZSA9IGxheWVyLT5tYXNrTGF5ZXIoKSB8fCBsYXll
ci0+cmVwbGljYUxheWVyKCk7Ci0jZW5kaWYKLSAgICBpZiAoIXVzZUxheWVyUmVuZGVyZXJTdXJm
YWNlKSB7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eShvcGFjaXR5KTsKLSAgICAgICAg
bGF5ZXItPmNsZWFyTGF5ZXJSZW5kZXJlclN1cmZhY2UoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoIWxheWVyLT5sYXllclJlbmRlcmVyU3VyZmFjZSgpKQotICAgICAgICAgICAgbGF5ZXIt
PmNyZWF0ZUxheWVyUmVuZGVyZXJTdXJmYWNlKCk7Ci0KLSAgICAgICAgTGF5ZXJSZW5kZXJlclN1
cmZhY2UqIHN1cmZhY2UgPSBsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKTsKLQotICAgICAg
ICBsYXllci0+c2V0RHJhd09wYWNpdHkoMS4wKTsKLSAgICAgICAgc3VyZmFjZS0+c2V0RHJhd09w
YWNpdHkob3BhY2l0eSk7Ci0KLSAgICAgICAgc3VyZmFjZS0+c2V0RHJhd1RyYW5zZm9ybShsb2Nh
bE1hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCk7Ci0gICAgICAgIGlmIChsYXllci0+cmVwbGljYUxh
eWVyKCkpIHsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FNYXRyaXgg
PSBsb2NhbE1hdHJpeDsKLSAgICAgICAgICAgIHJlcGxpY2FNYXRyaXgudHJhbnNsYXRlM2QoLTAu
NSAqIGJvdW5kcy53aWR0aCgpLCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKLSAgICAgICAg
ICAgIHJlcGxpY2FNYXRyaXgudHJhbnNsYXRlM2QobGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3Np
dGlvbigpLngoKSwgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7Ci0g
ICAgICAgICAgICByZXBsaWNhTWF0cml4Lm11bHRpcGx5KGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
dHJhbnNmb3JtKCkpOwotICAgICAgICAgICAgcmVwbGljYU1hdHJpeC50cmFuc2xhdGUzZChjZW50
ZXJPZmZzZXRYLCBjZW50ZXJPZmZzZXRZLCAwKTsKLSAgICAgICAgICAgIHN1cmZhY2UtPnNldFJl
cGxpY2FEcmF3VHJhbnNmb3JtKHJlcGxpY2FNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
RmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgYm91bmRzKSk7Ci0gICAgICAgIHN1cmZhY2Ut
PnNldENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKLQotICAgICAgICBsb2NhbFByb2plY3Rpb25N
YXRyaXggPSBvcnRob01hdHJpeChjb250ZW50UmVjdC54KCksIGNvbnRlbnRSZWN0Lm1heFgoKSwg
Y29udGVudFJlY3QueSgpLCBjb250ZW50UmVjdC5tYXhZKCksIC0xMDAwLCAxMDAwKTsKLSAgICAg
ICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgbmV3IHN1cmZhY2UgaXMgdGhlIHVwcGVyIGxlZnQgY29y
bmVyIG9mIHRoZSBsYXllci4KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5z
Zm9ybTsKLSAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMud2lk
dGgoKSwgMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKLSAgICAgICAgLy8gVGhpcyBsYXllciB3
aWxsIHN0YXJ0IHVzaW5nIG5ldyB0cmFuc2Zvcm1hdGlvbi4KLSAgICAgICAgbG9jYWxNYXRyaXgg
PSBkcmF3VHJhbnNmb3JtOwotCi0gICAgICAgIHN1cmZhY2VMYXllcnMuYXBwZW5kKGxheWVyKTsK
LSAgICB9Ci0KLSAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShtX3NjYWxlLCBsb2NhbE1hdHJp
eCwgbG9jYWxQcm9qZWN0aW9uTWF0cml4KTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBib29s
IGxheWVyVmlzaWJsZSA9IGNsaXBSZWN0LmludGVyc2VjdHMobGF5ZXItPmJvdW5kaW5nQm94KCkp
IHx8IGxheWVyLT5tZWRpYVBsYXllcigpOwotI2Vsc2UKLSAgICBib29sIGxheWVyVmlzaWJsZSA9
IGNsaXBSZWN0LmludGVyc2VjdHMobGF5ZXItPmJvdW5kaW5nQm94KCkpOwotI2VuZGlmCi0KLSAg
ICBpZiAobGF5ZXItPm5lZWRzVGV4dHVyZSgpICYmIGxheWVyVmlzaWJsZSkgewotICAgICAgICBJ
bnRSZWN0IGRpcnR5UmVjdCA9IHRvV2luZG93Q29vcmRpbmF0ZXMoaW50ZXJzZWN0aW9uKGxheWVy
LT5ib3VuZGluZ0JveCgpLCBjbGlwUmVjdCkpOwotICAgICAgICBtX2xhc3RSZW5kZXJpbmdSZXN1
bHRzLmFkZERpcnR5UmVjdChkaXJ0eVJlY3QpOwotICAgIH0KLQotICAgIGlmIChsYXllci0+bWFz
a3NUb0JvdW5kcygpKQotICAgICAgICBjbGlwUmVjdC5pbnRlcnNlY3QobGF5ZXItPmJvdW5kaW5n
Qm94KCkpOwotCi0gICAgLy8gRmxhdHRlbiB0byAyRCBpZiB0aGUgbGF5ZXIgZG9lc24ndCBwcmVz
ZXJ2ZSAzRC4KLSAgICBpZiAoIWxheWVyLT5wcmVzZXJ2ZXMzRCgpKSB7Ci0gICAgICAgIGxvY2Fs
TWF0cml4LnNldE0xMygwKTsKLSAgICAgICAgbG9jYWxNYXRyaXguc2V0TTIzKDApOwotICAgICAg
ICBsb2NhbE1hdHJpeC5zZXRNMzEoMCk7Ci0gICAgICAgIGxvY2FsTWF0cml4LnNldE0zMigwKTsK
LSAgICAgICAgbG9jYWxNYXRyaXguc2V0TTMzKDEpOwotICAgICAgICBsb2NhbE1hdHJpeC5zZXRN
MzQoMCk7Ci0gICAgICAgIGxvY2FsTWF0cml4LnNldE00MygwKTsKLSAgICB9Ci0KLSAgICAvLyBB
cHBseSB0aGUgc3VibGF5ZXIgdHJhbnNmb3JtLgotICAgIGxvY2FsTWF0cml4Lm11bHRpcGx5KGxh
eWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKLQotICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIHN1
YmxheWVycyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIGxlZnQgY29ybmVyIG9mIHRoZSBsYXllcgot
ICAgIC8vIChvciB0b3AgbGVmdCB3aGVuIGxvb2tpbmcgaXQgaXQgZnJvbSB0aGUgYnJvd3Nlcidz
IHBlc3BlY3RpdmUpIGluc3RlYWQgb2YgdGhlIGNlbnRlci4KLSAgICAvLyBUaGUgbWF0cml4IHBh
c3NlZCBkb3duIHRvIHRoZSBzdWJsYXllcnMgaXMgdGhlcmVmb3JlOgotICAgIC8vIE1bc10gPSBN
ICogVHJbLWNlbnRlcl0KLSAgICBsb2NhbE1hdHJpeC50cmFuc2xhdGUzZCgtYm91bmRzLndpZHRo
KCkgKiAwLjUsIC1ib3VuZHMuaGVpZ2h0KCkgKiAwLjUsIDApOwotCi0gICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiA+JiBzdWJsYXllcnMgPSBsYXllci0+c3Vi
bGF5ZXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBp
KyspCi0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIGxv
Y2FsTWF0cml4LCBsb2NhbFByb2plY3Rpb25NYXRyaXgsIHN1cmZhY2VMYXllcnMsIG9wYWNpdHks
IGNsaXBSZWN0KTsKLX0KLQotc3RhdGljIGJvb2wgaGFzUm90YXRpb25hbENvbXBvbmVudChjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKLXsKLSAgICByZXR1cm4gbS5tMTIoKSB8fCBtLm0x
MygpIHx8IG0ubTIzKCkgfHwgbS5tMjEoKSB8fCBtLm0zMSgpIHx8IG0ubTMyKCk7Ci19Ci0KLWJv
b2wgTGF5ZXJSZW5kZXJlcjo6bGF5ZXJBbHJlYWR5T25TdXJmYWNlKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqIGxheWVyKSBjb25zdAotewotICAgIHJldHVybiBsYXllci0+bGF5ZXJSZW5kZXJlclN1
cmZhY2UoKSAmJiBsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKSAhPSBtX2N1cnJlbnRMYXll
clJlbmRlcmVyU3VyZmFjZTsKLX0KLQotc3RhdGljIHZvaWQgY29sbGVjdDNEUHJlc2VydmluZ0xh
eWVycyhWZWN0b3I8TGF5ZXJDb21wb3NpdGluZ1RocmVhZCo+JiBsYXllcnMpCi17Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsYXllcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCogbGF5ZXIgPSBsYXllcnNbaV07Ci0gICAgICAgIGlmICghbGF5ZXIt
PnByZXNlcnZlczNEKCkgfHwgIWxheWVyLT5zdWJsYXllcnMoKS5zaXplKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBWZWN0b3I8TGF5ZXJDb21wb3NpdGluZ1RocmVhZCo+IHN1
YmxheWVycyA9IHJhd1B0clZlY3RvckZyb21SZWZQdHJWZWN0b3IobGF5ZXItPnN1YmxheWVycygp
KTsKLSAgICAgICAgY29sbGVjdDNEUHJlc2VydmluZ0xheWVycyhzdWJsYXllcnMpOwotICAgICAg
ICBsYXllcnMuaW5zZXJ0KGkrMSwgc3VibGF5ZXJzKTsKLSAgICAgICAgaSArPSBzdWJsYXllcnMu
c2l6ZSgpOwotICAgIH0KLX0KLQotdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNS
ZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludCBzdGVuY2lsVmFsdWUs
IEZsb2F0UmVjdCBjbGlwUmVjdCkKLXsKLSAgICBGbG9hdFJlY3QgcmVjdDsKLSAgICBpZiAobGF5
ZXJBbHJlYWR5T25TdXJmYWNlKGxheWVyKSkKLSAgICAgICAgcmVjdCA9IGxheWVyLT5sYXllclJl
bmRlcmVyU3VyZmFjZSgpLT5ib3VuZGluZ0JveCgpOwotICAgIGVsc2UKLSAgICAgICAgcmVjdCA9
IGxheWVyLT5ib3VuZGluZ0JveCgpOwotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIGJvb2wgbGF5
ZXJWaXNpYmxlID0gY2xpcFJlY3QuaW50ZXJzZWN0cyhyZWN0KSB8fCBsYXllci0+bWVkaWFQbGF5
ZXIoKTsKLSNlbHNlCi0gICAgYm9vbCBsYXllclZpc2libGUgPSBjbGlwUmVjdC5pbnRlcnNlY3Rz
KHJlY3QpOwotI2VuZGlmCi0KLSAgICBpZiAobGF5ZXItPmlzQ2FudmFzTGF5ZXIoKSkKLSAgICAg
ICAgbGF5ZXJWaXNpYmxlID0gbGF5ZXJWaXNpYmxlICYmIGxheWVyLT5pc0xheWVyVmlzaWJsZSgp
OwotCi0gICAgbGF5ZXItPnNldFZpc2libGUobGF5ZXJWaXNpYmxlKTsKLQotICAgIC8vIE5vdGUg
dGhhdCB0aGVyZSBhcmUgdHdvIHR5cGVzIG9mIGxheWVyczoKLSAgICAvLyAxLiBMYXllcnMgdGhh
dCBoYXZlIHRoZWlyIG93biBHcmFwaGljc0NvbnRleHQgYW5kIGNhbiBkcmF3IHRoZWlyIGNvbnRl
bnRzIG9uIGRlbWFuZCAobGF5ZXItPmRyYXdzQ29udGVudCgpID09IHRydWUpLgotICAgIC8vIDIu
IExheWVycyB0aGF0IGFyZSBqdXN0IGNvbnRhaW5lcnMgb2YgaW1hZ2VzL3ZpZGVvL2V0YyB0aGF0
IGRvbid0IG93biBhIEdyYXBoaWNzQ29udGV4dCAobGF5ZXItPmNvbnRlbnRzKCkgPT0gdHJ1ZSku
Ci0KLSAgICBpZiAoKGxheWVyLT5uZWVkc1RleHR1cmUoKSB8fCBsYXllci0+bGF5ZXJSZW5kZXJl
clN1cmZhY2UoKSkgJiYgbGF5ZXJWaXNpYmxlKSB7Ci0gICAgICAgIHVwZGF0ZVNjaXNzb3JJZk5l
ZWRlZChjbGlwUmVjdCk7Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxWYWx1ZSkgewotICAgICAgICAg
ICAgZ2xTdGVuY2lsRnVuYyhHTF9FUVVBTCwgc3RlbmNpbFZhbHVlLCAweGZmKTsKLSAgICAgICAg
ICAgIGdsU3RlbmNpbE9wKEdMX0tFRVAsIEdMX0tFRVAsIEdMX0tFRVApOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGxheWVyLT5kb3VibGVTaWRlZCgpKQotICAgICAgICAgICAgZ2xEaXNhYmxl
KEdMX0NVTExfRkFDRSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdsRW5hYmxlKEdMX0NV
TExfRkFDRSk7Ci0KLSAgICAgICAgaWYgKGxheWVyLT5oYXNWaXNpYmxlSG9sZVB1bmNoUmVjdCgp
KQotICAgICAgICAgICAgZHJhd0hvbGVQdW5jaFJlY3QobGF5ZXIpOwotCi0gICAgICAgIC8vIERy
YXcgdGhlIHN1cmZhY2Ugb250byBhbm90aGVyIHN1cmZhY2Ugb3Igc2NyZWVuLgotICAgICAgICBi
b29sIGRyYXdTdXJmYWNlID0gbGF5ZXJBbHJlYWR5T25TdXJmYWNlKGxheWVyKTsKLQotICAgICAg
ICBpZiAoIWRyYXdTdXJmYWNlKSB7Ci0gICAgICAgICAgICBjb25zdCBHTEVTMlByb2dyYW0mIHBy
b2dyYW0gPSB1c2VQcm9ncmFtKExheWVyUHJvZ3JhbVJHQkEpOwotICAgICAgICAgICAgbGF5ZXIt
PmRyYXdUZXh0dXJlcyhwcm9ncmFtLCBtX3NjYWxlLCBtX3Zpc2libGVSZWN0LCBjbGlwUmVjdCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBEcmF3IHRoZSByZWZsZWN0aW9uIGlm
IGl0IGV4aXN0cy4KLSAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGFuZCBpdHMgcmVmbGVjdGlvbiBib3RoIGhh
dmUgbWFzaywgd2UgbmVlZCBhbm90aGVyIHRlbXBvcmFyeSBzdXJmYWNlLgotICAgICAgICAgICAg
ICAgIC8vIFNpbmNlIHRoaXMgdXNlIGNhc2Ugc2hvdWxkIGJlIHJhcmUsIGN1cnJlbnRseSBpdCdz
IG5vdCBoYW5kbGVkIGFuZCB0aGUgbWFzayBmb3IKLSAgICAgICAgICAgICAgICAvLyB0aGUgcmVm
bGVjdGlvbiBpcyBhcHBsaWVkIG9ubHkgd2hlbiB0aGlzIGxheWVyIGhhcyBubyBtYXNrLgotICAg
ICAgICAgICAgICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIG1hc2sgPSBsYXllci0+bWFza0xh
eWVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtYXNrICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIo
KSkKLSAgICAgICAgICAgICAgICAgICAgbWFzayA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFz
a0xheWVyKCk7Ci0KLSAgICAgICAgICAgICAgICBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0g
PSB1c2VQcm9ncmFtKG1hc2sgPyBMYXllck1hc2tQcm9ncmFtUkdCQSA6IExheWVyUHJvZ3JhbVJH
QkEpOwotICAgICAgICAgICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShwcm9ncmFtLCBsYXllci0+
bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+cmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgbWFzayk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSA9
IHVzZVByb2dyYW0obGF5ZXItPm1hc2tMYXllcigpID8gTGF5ZXJNYXNrUHJvZ3JhbVJHQkEgOiBM
YXllclByb2dyYW1SR0JBKTsKLSAgICAgICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShwcm9ncmFt
LCBsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgpLCBsYXllci0+
bWFza0xheWVyKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRHJhdyB0aGUgZGVidWcg
Ym9yZGVyIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBkcmF3RGVidWdCb3JkZXIobGF5ZXIpOwotCi0g
ICAgLy8gVGhlIHRleHR1cmUgZm9yIHRoZSBMYXllclJlbmRlcmVyU3VyZmFjZSBjYW4gYmUgcmVs
ZWFzZWQgYWZ0ZXIgdGhlIHN1cmZhY2Ugd2FzIGRyYXduIG9uIGFub3RoZXIgc3VyZmFjZS4KLSAg
ICBpZiAobGF5ZXJBbHJlYWR5T25TdXJmYWNlKGxheWVyKSkgewotICAgICAgICBsYXllci0+bGF5
ZXJSZW5kZXJlclN1cmZhY2UoKS0+cmVsZWFzZVRleHR1cmUoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIElmIHdlIG5lZWQgdG8gbWFzayB0byBib3VuZHMgYnV0IHRoZSB0cmFu
c2Zvcm1hdGlvbiBoYXMgYSByb3RhdGlvbmFsIGNvbXBvbmVudAotICAgIC8vIHRvIGl0LCBzY2lz
c29yaW5nIGlzIG5vdCBlbm91Z2ggYW5kIHdlIG5lZWQgdG8gdXNlIHRoZSBzdGVuY2lsIGJ1ZmZl
ciBmb3IgY2xpcHBpbmcuCi0gICAgYm9vbCBzdGVuY2lsQ2xpcCA9IGxheWVyLT5tYXNrc1RvQm91
bmRzKCkgJiYgaGFzUm90YXRpb25hbENvbXBvbmVudChsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsK
LQotICAgIGlmIChzdGVuY2lsQ2xpcCkgewotICAgICAgICBpZiAoIW1fc3RlbmNpbENsZWFyZWQp
IHsKLSAgICAgICAgICAgIGdsU3RlbmNpbE1hc2soMHhmZmZmZmZmZik7Ci0gICAgICAgICAgICBn
bENsZWFyU3RlbmNpbCgwKTsKLSAgICAgICAgICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJf
QklUKTsKLSAgICAgICAgICAgIG1fc3RlbmNpbENsZWFyZWQgPSB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKTsKLSAgICAgICAgZ2xTdGVuY2lsRnVu
YyhHTF9FUVVBTCwgc3RlbmNpbFZhbHVlLCAweGZmKTsKLSAgICAgICAgZ2xTdGVuY2lsT3AoR0xf
S0VFUCwgR0xfSU5DUiwgR0xfSU5DUik7Ci0KLSAgICAgICAgdXBkYXRlU2Npc3NvcklmTmVlZGVk
KGNsaXBSZWN0KTsKLSAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNlUHJv
Z3JhbShDb2xvclByb2dyYW0pOwotICAgICAgICBnbENvbG9yTWFzayhHTF9GQUxTRSwgR0xfRkFM
U0UsIEdMX0ZBTFNFLCBHTF9GQUxTRSk7Ci0gICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihw
cm9ncmFtLnBvc2l0aW9uTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBsYXll
ci0+dHJhbnNmb3JtZWRCb3VuZHMoKS5kYXRhKCkpOwotICAgICAgICBnbERyYXdBcnJheXMoR0xf
VFJJQU5HTEVfRkFOLCAwLCBsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKS5zaXplKCkpOwotICAg
ICAgICBnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKLSAg
ICB9Ci0KLSAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkKLSAgICAgICAgY2xpcFJlY3Qu
aW50ZXJzZWN0KGxheWVyLT5ib3VuZGluZ0JveCgpKTsKLQotICAgIC8vIEhlcmUsIHdlIG5lZWQg
dG8gc29ydCB0aGUgd2hvbGUgc3VidHJlZSBvZiBsYXllcnMgd2l0aCBwcmVzZXJ2ZS0zZC4gSXQK
LSAgICAvLyBhZmZlY3RzIGFsbCBjaGlsZHJlbiwgYW5kIHRoZSBjaGlsZHJlbiBvZiBhbnkgY2hp
bGRyZW4gd2l0aCBwcmVzZXJ2ZS0zZCwKLSAgICAvLyBhbmQgc28gb24uCi0gICAgVmVjdG9yPExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqPiBzdWJsYXllcnMgPSByYXdQdHJWZWN0b3JGcm9tUmVmUHRy
VmVjdG9yKGxheWVyLT5zdWJsYXllcnMoKSk7Ci0KLSAgICBib29sIHByZXNlcnZlczNEID0gbGF5
ZXItPnByZXNlcnZlczNEKCk7Ci0gICAgYm9vbCBzdXBlcmxheWVyUHJlc2VydmVzM0QgPSBsYXll
ci0+c3VwZXJsYXllcigpICYmIGxheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCk7Ci0K
LSAgICAvLyBDb2xsZWN0IGFuZCByZW5kZXIgYWxsIHN1YmxheWVycyB3aXRoIHByZXNlcnZlcy0z
RC4KLSAgICAvLyBJZiB0aGUgc3VwZXJsYXllciBwcmVzZXJ2ZXMgM0QsIHdlJ3ZlIGFscmVhZHkg
Y29sbGVjdGVkIGFuZCByZW5kZXJlZCBpdHMKLSAgICAvLyBjaGlsZHJlbiwgc28gYmFpbC4KLSAg
ICBpZiAocHJlc2VydmVzM0QgJiYgIXN1cGVybGF5ZXJQcmVzZXJ2ZXMzRCkgewotICAgICAgICBj
b2xsZWN0M0RQcmVzZXJ2aW5nTGF5ZXJzKHN1YmxheWVycyk7Ci0gICAgICAgIHN0ZDo6c3RhYmxl
X3NvcnQoc3VibGF5ZXJzLmJlZ2luKCksIHN1YmxheWVycy5lbmQoKSwgY29tcGFyZUxheWVyVyk7
Ci0gICAgfQotCi0gICAgaW50IG5ld1N0ZW5jaWxWYWx1ZSA9IHN0ZW5jaWxDbGlwID8gc3RlbmNp
bFZhbHVlKzEgOiBzdGVuY2lsVmFsdWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJs
YXllcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogc3Vi
bGF5ZXIgPSBzdWJsYXllcnNbaV07Ci0gICAgICAgIC8vIFRoZSByb290IG9mIHRoZSAzZC1wcmVz
ZXJ2aW5nIHN1YnRyZWUgaGFzIGNvbGxlY3RlZCBhbGwKLSAgICAgICAgLy8gM2QtcHJlc2Vydmlu
ZyBsYXllcnMgYW5kIHRoZWlyIGNoaWxkcmVuIGFuZCB3aWxsIHJlbmRlciB0aGVtIGFsbCBpbgot
ICAgICAgICAvLyB0aGUgcmlnaHQgb3JkZXIuCi0gICAgICAgIGlmIChwcmVzZXJ2ZXMzRCAmJiBz
dXBlcmxheWVyUHJlc2VydmVzM0QpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBj
b21wb3NpdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXIsIG5ld1N0ZW5jaWxWYWx1ZSwgY2xpcFJl
Y3QpOwotICAgIH0KLQotICAgIGlmIChzdGVuY2lsQ2xpcCkgewotICAgICAgICBnbFN0ZW5jaWxG
dW5jKEdMX0xFUVVBTCwgc3RlbmNpbFZhbHVlLCAweGZmKTsKLSAgICAgICAgZ2xTdGVuY2lsT3Ao
R0xfS0VFUCwgR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSk7Ci0KLSAgICAgICAgdXBkYXRlU2Npc3Nv
cklmTmVlZGVkKGNsaXBSZWN0KTsKLSAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFt
ID0gdXNlUHJvZ3JhbShDb2xvclByb2dyYW0pOwotICAgICAgICBnbENvbG9yTWFzayhHTF9GQUxT
RSwgR0xfRkFMU0UsIEdMX0ZBTFNFLCBHTF9GQUxTRSk7Ci0gICAgICAgIGdsVmVydGV4QXR0cmli
UG9pbnRlcihwcm9ncmFtLnBvc2l0aW9uTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNF
LCAwLCBsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKS5kYXRhKCkpOwotICAgICAgICBnbERyYXdB
cnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCBsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKS5zaXpl
KCkpOwotICAgICAgICBnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9U
UlVFKTsKLQotICAgICAgICBpZiAoIXN0ZW5jaWxWYWx1ZSkKLSAgICAgICAgICAgIGdsRGlzYWJs
ZShHTF9TVEVOQ0lMX1RFU1QpOwotICAgIH0KLX0KLQotdm9pZCBMYXllclJlbmRlcmVyOjp1cGRh
dGVTY2lzc29ySWZOZWVkZWQoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKLXsKLSNpZiBERUJV
R19DTElQUElORwotICAgIHByaW50ZigiTGF5ZXJSZW5kZXJlcjo6dXBkYXRlU2Npc3NvcklmTmVl
ZGVkKCk6IGNsaXBSZWN0PSglLjJmLCUuMmYgJS4yZnglLjJmKVxuIiwgY2xpcFJlY3QueCgpLCBj
bGlwUmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0LmhlaWdodCgpKTsKLSAgICBm
Zmx1c2goc3Rkb3V0KTsKLSNlbmRpZgotICAgIEludFJlY3QgY2xpcFJlY3RXQyA9IHRvT3BlbkdM
V2luZG93Q29vcmRpbmF0ZXMoY2xpcFJlY3QpOwotICAgIGlmIChtX3NjaXNzb3JSZWN0ID09IGNs
aXBSZWN0V0MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Npc3NvclJlY3QgPSBjbGlwUmVj
dFdDOwotI2lmIERFQlVHX0NMSVBQSU5HCi0gICAgcHJpbnRmKCJMYXllclJlbmRlcmVyOjp1cGRh
dGVTY2lzc29ySWZOZWVkZWQoKTogY2xpcHBpbmcgdG8gKCVkLCVkICVkeCVkKVxuIiwgbV9zY2lz
c29yUmVjdC54KCksIG1fc2Npc3NvclJlY3QueSgpLCBtX3NjaXNzb3JSZWN0LndpZHRoKCksIG1f
c2Npc3NvclJlY3QuaGVpZ2h0KCkpOwotICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmCi0gICAg
Z2xTY2lzc29yKG1fc2Npc3NvclJlY3QueCgpLCBtX3NjaXNzb3JSZWN0LnkoKSwgbV9zY2lzc29y
UmVjdC53aWR0aCgpLCBtX3NjaXNzb3JSZWN0LmhlaWdodCgpKTsKLX0KLQotYm9vbCBMYXllclJl
bmRlcmVyOjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIGJvb2wgcmV0ID0gbV9jbGllbnQt
PmNvbnRleHQoKS0+bWFrZUN1cnJlbnQoKTsKLSAgICBpZiAocmV0ICYmIG1faXNSb2J1c3RuZXNz
U3VwcG9ydGVkKSB7Ci0gICAgICAgIEdMZW51bSByZXNldFN0YXR1cyA9IG1fZ2xHZXRHcmFwaGlj
c1Jlc2V0U3RhdHVzRVhUKCk7Ci0gICAgICAgIGlmIChyZXNldFN0YXR1cyAhPSBHTF9OT19FUlJP
UikKLSAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkxvZ0xldmVsQ3JpdGljYWwsICJSb2J1c3QgT3BlbkdMIGNvbnRleHQgaGFz
IGJlZW4gcmVzZXQgd2l0aCBzdGF0dXMgMHgleC4gQ29udGludWluZyBhbnl3YXkuIiwgcmVzZXRT
dGF0dXMpOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi1ib29sIExheWVyUmVuZGVyZXI6
OmNyZWF0ZVByb2dyYW0oUHJvZ3JhbUluZGV4IHByb2dyYW0pCi17Ci0gICAgLy8gU2hhZGVycyBm
b3IgZHJhd2luZyB0aGUgbGF5ZXIgY29udGVudHMuCi0gICAgY29uc3QgY2hhciogdmVydGV4U2hh
ZGVyU3RyaW5nID0KLSAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCi0g
ICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxuIgotICAgICAgICAidmFyeWlu
ZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICBcbiIKLSAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAg
ICAgICAgICAgXG4iCi0gICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgot
ICAgICAgICAiICBnbF9Qb3NpdGlvbiA9IGFfcG9zaXRpb247ICBcbiIKLSAgICAgICAgIiAgdl90
ZXhDb29yZCA9IGFfdGV4Q29vcmQ7ICAgXG4iCi0gICAgICAgICJ9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIjsKLQotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU3RyaW5nUkdC
QSA9Ci0gICAgICAgICJ2YXJ5aW5nIG1lZGl1bXAgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAidW5pZm9ybSBsb3dwIHNhbXBsZXIyRCBzX3Rl
eHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgInVuaWZvcm0gbG93
cCBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAg
ICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgotICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdGV4
dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZCkgKiBhbHBoYTsgXG4iCi0gICAgICAgICJ9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IjsKLQotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU3RyaW5nTWFza1JHQkEgPQotICAg
ICAgICAidmFyeWluZyBtZWRpdW1wIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcbiIKLSAgICAgICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190ZXh0dXJlOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIGxvd3Agc2FtcGxl
cjJEIHNfbWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAidW5p
Zm9ybSBsb3dwIGZsb2F0IGFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biIKLSAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAiICBsb3dwIHZlYzQg
dGV4Q29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkKTsgICBcbiIKLSAgICAg
ICAgIiAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRChzX21hc2ssIHZfdGV4Q29vcmQp
OyAgICAgXG4iCi0gICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4
Q29sb3IueSwgdGV4Q29sb3IueiwgdGV4Q29sb3IudykgKiBhbHBoYSAqIG1hc2tDb2xvci53OyAg
ICAgICAgICAgXG4iCi0gICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKLQotICAgIC8vIFNoYWRlcnMgZm9yIGRyYXdp
bmcgdGhlIGRlYnVnIGJvcmRlcnMgYXJvdW5kIHRoZSBsYXllcnMuCi0gICAgY29uc3QgY2hhciog
Y29sb3JWZXJ0ZXhTaGFkZXJTdHJpbmcgPQotICAgICAgICAiYXR0cmlidXRlIHZlYzQgYV9wb3Np
dGlvbjsgICBcbiIKLSAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgXG4iCi0g
ICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAiICAgZ2xf
UG9zaXRpb24gPSBhX3Bvc2l0aW9uOyBcbiIKLSAgICAgICAgIn0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iOwotCi0gICAgY29uc3QgY2hhciogY29sb3JGcmFnbWVudFNoYWRlclN0cmlu
ZyA9Ci0gICAgICAgICJ1bmlmb3JtIGxvd3AgdmVjNCBjb2xvcjsgICAgIFxuIgotICAgICAgICAi
dm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgInsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOyAgICAg
IFxuIgotICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7Ci0KLSAgICBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXIgPSAwOwotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyID0gMDsKLQotICAgIHN3aXRjaCAocHJvZ3JhbSkgewotICAgIGNhc2UgTGF5ZXJQcm9ncmFt
UkdCQToKLSAgICBjYXNlIExheWVyTWFza1Byb2dyYW1SR0JBOgotICAgICAgICB2ZXJ0ZXhTaGFk
ZXIgPSB2ZXJ0ZXhTaGFkZXJTdHJpbmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29sb3JQ
cm9ncmFtOgotICAgICAgICB2ZXJ0ZXhTaGFkZXIgPSBjb2xvclZlcnRleFNoYWRlclN0cmluZzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOdW1iZXJPZlByb2dyYW1zOgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwcm9ncmFtKSB7Ci0gICAgY2FzZSBMYXll
clByb2dyYW1SR0JBOgotICAgICAgICBmcmFnbWVudFNoYWRlciA9IGZyYWdtZW50U2hhZGVyU3Ry
aW5nUkdCQTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMYXllck1hc2tQcm9ncmFtUkdCQToK
LSAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlclN0cmluZ01hc2tSR0JBOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbG9yUHJvZ3JhbToKLSAgICAgICAgZnJhZ21lbnRT
aGFkZXIgPSBjb2xvckZyYWdtZW50U2hhZGVyU3RyaW5nOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE51bWJlck9mUHJvZ3JhbXM6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIXZlcnRleFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdMdWludCBwcm9ncmFtT2JqZWN0ID0gbG9hZFNoYWRlclByb2dyYW0odmVy
dGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgaWYgKCFwcm9ncmFtT2JqZWN0KSB7Ci0g
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwcm9ncmFtICV1IiwgcHJvZ3JhbSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3Byb2dyYW1zW3Byb2dyYW1d
Lm1fcHJvZ3JhbSA9IHByb2dyYW1PYmplY3Q7Ci0KLSAgICAvLyBCaW5kcyB0aGUgZ2l2ZW4gYXR0
cmlidXRlIG5hbWUgdG8gYSBjb21tb24gbG9jYXRpb24gYWNyb3NzIGFsbCBwcm9ncmFtcwotICAg
IC8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuIFRoaXMgYWxsb3dzIHRoZSBjb2RlIHRvIGJpbmQg
dGhlIGF0dHJpYnV0ZXMgb25seSBvbmNlCi0gICAgLy8gZXZlbiB3aGVuIHN3aXRjaGluZyBiZXR3
ZWVuIHByb2dyYW1zLgotICAgIGdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW1PYmplY3QsIEdM
RVMyUHJvZ3JhbTo6UG9zaXRpb25BdHRyaWJ1dGVJbmRleCwgImFfcG9zaXRpb24iKTsKLSAgICBn
bEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtT2JqZWN0LCBHTEVTMlByb2dyYW06OlRleENvb3Jk
QXR0cmlidXRlSW5kZXgsICJhX3RleENvb3JkIik7Ci0KLSAgICBjaGVja0dMRXJyb3IoKTsKLQot
ICAgIC8vIFJlLWxpbmsgdGhlIHNoYWRlciB0byBnZXQgdGhlIG5ldyBhdHRyaWIgbG9jYXRpb24g
dG8gdGFrZSBlZmZlY3QuCi0gICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtT2JqZWN0KTsKLQotICAg
IGNoZWNrR0xFcnJvcigpOwotCi0gICAgLy8gR2V0IGxvY2F0aW9ucyBvZiB1bmlmb3JtcyBmb3Ig
dGhlIGxheWVyIGNvbnRlbnQgc2hhZGVyIHByb2dyYW0uCi0gICAgbV9wcm9ncmFtc1twcm9ncmFt
XS5tX2xvY2F0aW9uc1tHTEVTMlByb2dyYW06Ok9wYWNpdHlVbmlmb3JtXSA9IGdsR2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW1PYmplY3QsICJhbHBoYSIpOwotICAgIHN3aXRjaCAocHJvZ3JhbSkg
ewotICAgIGNhc2UgTGF5ZXJQcm9ncmFtUkdCQTogewotICAgICAgICBHTGludCBzYW1wbGVyTG9j
YXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtT2JqZWN0LCAic190ZXh0dXJlIik7
Ci0gICAgICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtT2JqZWN0KTsKLSAgICAgICAgZ2xVbmlmb3Jt
MWkoc2FtcGxlckxvY2F0aW9uLCAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
TGF5ZXJNYXNrUHJvZ3JhbVJHQkE6IHsKLSAgICAgICAgR0xpbnQgbWFza1NhbXBsZXJMb2NhdGlv
biA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1PYmplY3QsICJzX3RleHR1cmUiKTsKLSAg
ICAgICAgR0xpbnQgbWFza1NhbXBsZXJMb2NhdGlvbk1hc2sgPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtT2JqZWN0LCAic19tYXNrIik7Ci0gICAgICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFt
T2JqZWN0KTsKLSAgICAgICAgZ2xVbmlmb3JtMWkobWFza1NhbXBsZXJMb2NhdGlvbiwgMCk7Ci0g
ICAgICAgIGdsVW5pZm9ybTFpKG1hc2tTYW1wbGVyTG9jYXRpb25NYXNrLCAxKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ29sb3JQcm9ncmFtOgotICAgICAgICAvLyBHZXQgbG9j
YXRpb25zIG9mIHVuaWZvcm1zIGZvciB0aGUgZGVidWcgYm9yZGVyIHNoYWRlciBwcm9ncmFtLgot
ICAgICAgICBtX2NvbG9yQ29sb3JMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW1PYmplY3QsICJjb2xvciIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE51bWJlck9mUHJv
Z3JhbXM6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotY29uc3QgR0xFUzJQcm9ncmFtJiBMYXllclJlbmRlcmVyOjp1c2VQcm9ncmFtKFByb2dy
YW1JbmRleCBpbmRleCkKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBOdW1iZXJPZlByb2dyYW1zKTsK
LSAgICBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0gPSBtX3Byb2dyYW1zW2luZGV4XTsKLSAg
ICBpZiAoIXByb2dyYW0uaXNWYWxpZCgpICYmICFjcmVhdGVQcm9ncmFtKGluZGV4KSkKLSAgICAg
ICAgcmV0dXJuIHByb2dyYW07Ci0KLSAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS5tX3Byb2dyYW0p
OwotCi0gICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLnBvc2l0aW9uTG9jYXRp
b24oKSk7Ci0gICAgaWYgKGluZGV4ICE9IENvbG9yUHJvZ3JhbSkKLSAgICAgICAgZ2xFbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLnRleENvb3JkTG9jYXRpb24oKSk7Ci0KLSAgICByZXR1
cm4gcHJvZ3JhbTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmluZ1Jlc3VsdHM6OmFkZERpcnR5UmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEludFJlY3QgZGlydHlVbmlvbltOdW1iZXJP
ZkRpcnR5UmVjdHNdOwotICAgIGludCBzbWFsbGVzdEluY3JlYXNlID0gSU5UX01BWDsKLSAgICBp
bnQgbW9kaWZpZWRSZWN0ID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE51bWJlck9mRGly
dHlSZWN0czsgKytpKSB7Ci0gICAgICAgIGRpcnR5VW5pb25baV0gPSBtX2RpcnR5UmVjdHNbaV07
Ci0gICAgICAgIGRpcnR5VW5pb25baV0udW5pdGUocmVjdCk7Ci0gICAgICAgIGludCBpbmNyZWFz
ZSA9IGRpcnR5VW5pb25baV0ud2lkdGgoKSpkaXJ0eVVuaW9uW2ldLmhlaWdodCgpIC0gbV9kaXJ0
eVJlY3RzW2ldLndpZHRoKCkqbV9kaXJ0eVJlY3RzW2ldLmhlaWdodCgpOwotICAgICAgICBpZiAo
aW5jcmVhc2UgPCBzbWFsbGVzdEluY3JlYXNlKSB7Ci0gICAgICAgICAgICBzbWFsbGVzdEluY3Jl
YXNlID0gaW5jcmVhc2U7Ci0gICAgICAgICAgICBtb2RpZmllZFJlY3QgPSBpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgbV9kaXJ0eVJlY3RzW21vZGlmaWVkUmVjdF0gPSBkaXJ0eVVuaW9uW21v
ZGlmaWVkUmVjdF07Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJpbmdSZXN1bHRzOjppc0VtcHR5KCkg
Y29uc3QKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE51bWJlck9mRGlydHlSZWN0czsgKytp
KSB7Ci0gICAgICAgIGlmICghbV9kaXJ0eVJlY3RzW2ldLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5k
ZXJlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwyMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAx
MSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgTGF5ZXJSZW5kZXJlcl9oCi0jZGVmaW5lIExheWVyUmVuZGVyZXJfaAotCi0jaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNET3Bl
bkdMRVMuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5ZXJEYXRhLmgiCi0j
aW5jbHVkZSAiTGF5ZXJGaWx0ZXJSZW5kZXJlci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMkNvbnRleHQuaD4K
LSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMlByb2dyYW0uaD4KLSNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1JbnRSZWN0UmVnaW9uLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBDb2xvcjsKLWNsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ7Ci1jbGFzcyBMYXllclJl
bmRlcmVyQ2xpZW50OwotY2xhc3MgTGF5ZXJSZW5kZXJlclN1cmZhY2U7Ci0KLWNsYXNzIExheWVy
UmVuZGVyaW5nUmVzdWx0cyB7Ci1wdWJsaWM6Ci0gICAgTGF5ZXJSZW5kZXJpbmdSZXN1bHRzKCkg
OiB3YXNFbXB0eSh0cnVlKSwgbmVlZHNBbmltYXRpb25GcmFtZShmYWxzZSkgeyB9Ci0KLSAgICBz
dGF0aWMgY29uc3QgaW50IE51bWJlck9mRGlydHlSZWN0cyA9IDM7Ci0gICAgY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KGludCBpKSBjb25zdCB7IHJldHVybiBtX2RpcnR5UmVjdHNbaV07IH0KLSAg
ICB2b2lkIGFkZERpcnR5UmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0OwotCi0gICAgYm9vbCB3YXNFbXB0eTsKLQotICAgIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIGRpcnR5UmVnaW9uOwotCi0gICAgYm9vbCBuZWVkc0Fu
aW1hdGlvbkZyYW1lOwotCi1wcml2YXRlOgotICAgIEludFJlY3QgbV9kaXJ0eVJlY3RzW051bWJl
ck9mRGlydHlSZWN0c107Ci19OwotCi0vLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBj
b21wb3NpdGVkIHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCi1jbGFzcyBMYXllclJlbmRlcmVyIHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllclJlbmRlcmVyKTsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG9NYXRyaXgoZmxvYXQgbGVmdCwgZmxvYXQg
cmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wLCBmbG9hdCBuZWFyWiwgZmxvYXQgZmFyWik7
Ci0KLSAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyPiBjcmVhdGUoTGF5ZXJSZW5k
ZXJlckNsaWVudCopOwotCi0gICAgTGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2xpZW50Kik7
Ci0gICAgfkxheWVyUmVuZGVyZXIoKTsKLQotICAgIExheWVyUmVuZGVyZXJDbGllbnQqIGNsaWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0KLSAgICB2b2lkIHJlbGVhc2VMYXllclJl
c291cmNlcygpOwotCi0gICAgLy8gSW4gb3JkZXIgdG8gcmVuZGVyIHRoZSBsYXllcnMsIHlvdSBt
dXN0IGRvIHRoZSBmb2xsb3dpbmcgMyBvcGVyYXRpb25zLCBpbiBvcmRlci4KLQotICAgIC8vIDEu
IFVwbG9hZCB0ZXh0dXJlcyBhbmQgb3RoZXIgb3BlcmF0aW9ucyB0aGF0IHNob3VsZCBiZSBwZXJm
b3JtZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGZyYW1lLgotICAgIC8vIE5vdGUsIHRoaXMg
Y2FsbCBhbHNvIHJlc2V0cyB0aGUgbGFzdCByZW5kZXJpbmcgcmVzdWx0cy4KLSAgICB2b2lkIHBy
ZXBhcmVGcmFtZShkb3VibGUgYW5pbWF0aW9uVGltZSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCog
cm9vdExheWVyKTsKLQotICAgIC8vIDIuIFNldCB0aGUgT3BlbkdMIHZpZXdwb3J0IGFuZCBzdG9y
ZSBvdGhlciB2aWV3cG9ydC1yZWxhdGVkIHBhcmFtZXRlcnMKLSAgICAvLyAgIHZpZXdwb3J0IGlz
IHRoZSBHTCB2aWV3cG9ydAotICAgIC8vICAgY2xpcFJlY3QgaXMgYW4gYWRkaXRpb25hbCBjbGlw
IHJlY3QsIGlmIGNsaXBwaW5nIGlzIHJlcXVpcmVkIGJleW9uZCB0aGUgY2xpcHBpbmcgZWZmZWN0
IG9mIHRoZSB2aWV3cG9ydC4KLSAgICAvLyAgIHZpc2libGVSZWN0IGlzIHRoZSBzdWJyZWN0IG9m
IHRoZSB3ZWIgcGFnZSB0aGF0IHlvdSB3aXNoIHRvIGNvbXBvc2l0ZSwgZXhwcmVzc2VkIGluIGNv
bnRlbnQgY29vcmRpbmF0ZXMKLSAgICAvLyBUaGUgbGFzdCB0d28gcGFyYW1ldGVycyBhcmUgcmVx
dWlyZWQgdG8gZHJhdyBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBpbiB0aGUgcmlnaHQgcGxhY2U6
Ci0gICAgLy8gICBsYXlvdXRSZWN0IGlzIHRoZSBzdWJyZWN0IG9mIHRoZSB3ZWIgcGFnZSB0aGF0
IHRoZSBXZWJLaXQgdGhyZWFkIGJlbGlldmVzIGlzIHZpc2libGUgKHNjcm9sbCBwb3NpdGlvbiwg
YWN0dWFsIHZpc2libGUgc2l6ZSkuCi0gICAgLy8gICBjb250ZW50c1NpemUgaXMgdGhlIGNvbnRl
bnRzIHNpemUgb2YgdGhlIHdlYiBwYWdlCi0gICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRS
ZWN0JiB2aWV3cG9ydCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGxheW91dFJlY3QsIGNvbnN0IEludFNpemUmIGNv
bnRlbnRzU2l6ZSk7Ci0KLSAgICAvLyAzLiBQcmVwYXJlcyBhbGwgdGhlIGxheWVycyBmb3IgY29t
cG9zaXRpbmcKLSAgICAvLyB0cmFuc2Zvcm0gaXMgdGhlIG1vZGVsLXZpZXctcHJvamVjdCBtYXRy
aXggdGhhdCBnb2VzIGFsbCB0aGUgd2F5IGZyb20gY29udGVudHMgdG8gbm9ybWFsaXplZCBkZXZp
Y2UgY29vcmRpbmF0ZXMuCi0gICAgdm9pZCBjb21wb3NpdGVMYXllcnMoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiByb290TGF5ZXIpOwotICAgIHZv
aWQgY29tcG9zaXRlQnVmZmVyKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxv
YXRSZWN0JiBjb250ZW50cywgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIq
LCBib29sIGNvbnRlbnRzT3BhcXVlLCBmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lkIGRyYXdDb2xv
cihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYgY29udGVudHMs
IGNvbnN0IENvbG9yJik7Ci0KLSAgICAvLyBLZWVwIHRyYWNrIG9mIGxheWVycyB0aGF0IG5lZWQg
Y2xlYW51cCB3aGVuIHRoZSBMYXllclJlbmRlcmVyIGlzIGRlc3Ryb3llZAotICAgIHZvaWQgYWRk
TGF5ZXIoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwotICAgIGJvb2wgcmVtb3ZlTGF5ZXIoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCopOwotCi0gICAgLy8gS2VlcCB0cmFjayBvZiBsYXllcnMgdGhh
dCBuZWVkIHRvIHJlbGVhc2UgdGhlaXIgdGV4dHVyZXMgd2hlbiB3ZSBzd2FwIGJ1ZmZlcnMKLSAg
ICB2b2lkIGFkZExheWVyVG9SZWxlYXNlVGV4dHVyZVJlc291cmNlc0xpc3QoTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCopOwotCi0gICAgYm9vbCBoYXJkd2FyZUNvbXBvc2l0aW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXJkd2FyZUNvbXBvc2l0aW5nOyB9Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OkdMRVMyQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwotCi0gICAgY29uc3Qg
TGF5ZXJSZW5kZXJpbmdSZXN1bHRzJiBsYXN0UmVuZGVyaW5nUmVzdWx0cygpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdFJlbmRlcmluZ1Jlc3VsdHM7IH0KLQotICAgIC8vIFNjaGVkdWxlIGEgY29tbWl0
IG9uIHRoZSBXZWJLaXQgdGhyZWFkIGF0IHRoZSBlbmQgb2YgcmVuZGVyaW5nCi0gICAgLy8gVXNl
ZCB3aGVuIGEgbGF5ZXIgZGlzY292ZXJzIGR1cmluZyByZW5kZXJpbmcgdGhhdCBpdCBuZWVkcyBh
IGNvbW1pdC4KLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCkgeyBtX25lZWRzQ29tbWl0ID0gdHJ1
ZTsgfQotCi0gICAgSW50UmVjdCB0b1dpbmRvd0Nvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UmVjdCYp
IGNvbnN0OwotICAgIEludFJlY3QgdG9QaXhlbFZpZXdwb3J0Q29vcmRpbmF0ZXMoY29uc3QgRmxv
YXRSZWN0JikgY29uc3Q7Ci0gICAgSW50UmVjdCB0b0RvY3VtZW50Vmlld3BvcnRDb29yZGluYXRl
cyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKLQotICAgIC8vIElmIHRoZSBsYXllciBoYXMgYWxy
ZWFkeSBiZWVuIGRyYXdlZCBvbiBhIHN1cmZhY2UuCi0gICAgYm9vbCBsYXllckFscmVhZHlPblN1
cmZhY2UoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopIGNvbnN0OwotCi0gICAgdm9pZCBkcmF3RGVi
dWdCb3JkZXIoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiwgY29uc3QgQ29sb3ImLCBmbG9hdCBi
b3JkZXJXaWR0aCk7Ci0KLSAgICB2b2lkIGRpc2NhcmRGcm9udFZpc2liaWxpdHkoKTsKLQotICAg
IHN0YXRpYyBHTHVpbnQgbG9hZFNoYWRlcihHTGVudW0gdHlwZSwgY29uc3QgY2hhciogc2hhZGVy
U291cmNlKTsKLSAgICBzdGF0aWMgR0x1aW50IGxvYWRTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwot
Ci1wcml2YXRlOgotICAgIHZvaWQgcHJlcGFyZUZyYW1lUmVjdXJzaXZlKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqLCBkb3VibGUgYW5pbWF0aW9uVGltZSwgYm9vbCBpc0NvbnRleHRDdXJyZW50KTsK
LSAgICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3Np
dGluZ1RocmVhZD4gPiYgc3VyZmFjZUxheWVycywgZmxvYXQgb3BhY2l0eSwgRmxvYXRSZWN0IGNs
aXBSZWN0KTsKLSAgICB2b2lkIGNvbXBvc2l0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNvbXBvc2l0
aW5nVGhyZWFkKiwgaW50IHN0ZW5jaWxWYWx1ZSwgRmxvYXRSZWN0IGNsaXBSZWN0KTsKLSAgICB2
b2lkIHVwZGF0ZVNjaXNzb3JJZk5lZWRlZChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKLQot
ICAgIGJvb2wgdXNlU3VyZmFjZShMYXllclJlbmRlcmVyU3VyZmFjZSopOwotICAgIHZvaWQgZHJh
d0xheWVyc09uU3VyZmFjZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhy
ZWFkPiA+JiBzdXJmYWNlTGF5ZXJzKTsKLQotICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqKTsKLSAgICB2b2lkIGRyYXdIb2xlUHVuY2hSZWN0KExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqKTsKLQotICAgIEludFJlY3QgdG9PcGVuR0xXaW5kb3dDb29yZGluYXRl
cyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKLQotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0KLSAgICBlbnVtIFByb2dyYW1JbmRleCB7Ci0gICAgICAgIExheWVyUHJvZ3JhbVJHQkEs
Ci0gICAgICAgIExheWVyTWFza1Byb2dyYW1SR0JBLAotICAgICAgICBDb2xvclByb2dyYW0sCi0g
ICAgICAgIE51bWJlck9mUHJvZ3JhbXMKLSAgICB9OwotCi0gICAgYm9vbCBjcmVhdGVQcm9ncmFt
KFByb2dyYW1JbmRleCk7Ci0gICAgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpHTEVTMlByb2dyYW0mIHVzZVByb2dyYW0oUHJvZ3JhbUluZGV4KTsKLQotICAgIExheWVyUmVu
ZGVyZXJDbGllbnQqIG1fY2xpZW50OwotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpHTEVTMlByb2dyYW0gbV9wcm9ncmFtc1tOdW1iZXJPZlByb2dyYW1zXTsKLQotICAgIC8v
IFNoYWRlciB1bmlmb3JtIGFuZCBhdHRyaWJ1dGUgbG9jYXRpb25zLgotI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKLSAgICBPd25QdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlcj4gbV9maWx0ZXJSZW5kZXJl
cjsKLSNlbmRpZgotCi0gICAgaW50IG1fY29sb3JDb2xvckxvY2F0aW9uOwotCi0gICAgLy8gQ3Vy
cmVudCBkcmF3IGNvbmZpZ3VyYXRpb24uCi0gICAgZG91YmxlIG1fc2NhbGU7Ci0gICAgZG91Ymxl
IG1fYW5pbWF0aW9uVGltZTsKLSAgICBGbG9hdFJlY3QgbV92aXNpYmxlUmVjdDsKLSAgICBJbnRS
ZWN0IG1fbGF5b3V0UmVjdDsKLSAgICBJbnRTaXplIG1fY29udGVudHNTaXplOwotCi0gICAgSW50
UmVjdCBtX3ZpZXdwb3J0OyAvLyBJbiByZW5kZXIgdGFyZ2V0IGNvb3JkaW5hdGVzCi0gICAgSW50
UmVjdCBtX3NjaXNzb3JSZWN0OyAvLyBJbiByZW5kZXIgdGFyZ2V0IGNvb3JkaW5hdGVzCi0gICAg
RmxvYXRSZWN0IG1fY2xpcFJlY3Q7IC8vIEluIG5vcm1hbGl6ZWQgZGV2aWNlIGNvb3JkaW5hdGVz
Ci0KLSAgICB1bnNpZ25lZCBtX2ZibzsKLSAgICBMYXllclJlbmRlcmVyU3VyZmFjZSogbV9jdXJy
ZW50TGF5ZXJSZW5kZXJlclN1cmZhY2U7Ci0KLSAgICBib29sIG1faGFyZHdhcmVDb21wb3NpdGlu
ZzsKLQotICAgIC8vIE1hcCBhc3NvY2lhdGluZyBsYXllcnMgd2l0aCB0ZXh0dXJlcyBpZHMgdXNl
ZCBieSB0aGUgR0wgY29tcG9zaXRvci4KLSAgICB0eXBlZGVmIEhhc2hTZXQ8TGF5ZXJDb21wb3Np
dGluZ1RocmVhZCo+IExheWVyU2V0OwotICAgIExheWVyU2V0IG1fbGF5ZXJzOwotICAgIExheWVy
U2V0IG1fbGF5ZXJzTG9ja2luZ1RleHR1cmVSZXNvdXJjZXM7Ci0KLSAgICBib29sIG1faXNSb2J1
c3RuZXNzU3VwcG9ydGVkOwotICAgIFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0VYVFBST0Mg
bV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQ7Ci0KLSAgICBMYXllclJlbmRlcmluZ1Jlc3Vs
dHMgbV9sYXN0UmVuZGVyaW5nUmVzdWx0czsKLSAgICBib29sIG1fbmVlZHNDb21taXQ7Ci0gICAg
Ym9vbCBtX3N0ZW5jaWxDbGVhcmVkOwotfTsKLQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlckNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJl
ckNsaWVudC5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0K
LSNpZm5kZWYgTGF5ZXJSZW5kZXJlckNsaWVudF9oCi0jZGVmaW5lIExheWVyUmVuZGVyZXJDbGll
bnRfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi1uYW1lc3BhY2UgQmxh
Y2tCZXJyeSB7Ci1uYW1lc3BhY2UgUGxhdGZvcm0gewotbmFtZXNwYWNlIEdyYXBoaWNzIHsKLWNs
YXNzIEdMRVMyQ29udGV4dDsKLX0KLX0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBMYXllclJlbmRlcmVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5MYXllclJlbmRl
cmVyQ2xpZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJSZW5kZXJlckRlc3Ryb3ll
ZCgpIHsgfQotCi0gICAgdmlydHVhbCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdM
RVMyQ29udGV4dCogY29udGV4dCgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRDaGlsZFdpbmRvd3NVc2VEb2N1bWVudENvb3JkaW5hdGVzKCkgPSAwOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJSZW5kZXJlclN1cmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlclN1cmZhY2UuY3Bw
CShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyUmVuZGVyZXJTdXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2lu
Y2x1ZGUgIkxheWVyUmVuZGVyZXJTdXJmYWNlLmgiCi0KLSNpbmNsdWRlICJMYXllckNvbXBvc2l0
aW5nVGhyZWFkLmgiCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlci5oIgotI2luY2x1ZGUgIkxheWVy
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1MYXllclJlbmRlcmVyU3VyZmFjZTo6TGF5ZXJSZW5k
ZXJlclN1cmZhY2UoTGF5ZXJSZW5kZXJlciogcmVuZGVyZXIsIExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqIG93bmVyKQotICAgIDogbV9vd25lckxheWVyKG93bmVyKQotICAgICwgbV9sYXllclJlbmRl
cmVyKHJlbmRlcmVyKQotICAgICwgbV9vcGFjaXR5KDEuMCkKLXsKLX0KLQotTGF5ZXJSZW5kZXJl
clN1cmZhY2U6On5MYXllclJlbmRlcmVyU3VyZmFjZSgpCi17Ci19Ci0KLXZvaWQgTGF5ZXJSZW5k
ZXJlclN1cmZhY2U6OnNldENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQot
ewotICAgIG1fY29udGVudFJlY3QgPSBjb250ZW50UmVjdDsKLSAgICBtX3NpemUgPSBjb250ZW50
UmVjdC5zaXplKCk7Ci19Ci0KLUZsb2F0UmVjdCBMYXllclJlbmRlcmVyU3VyZmFjZTo6Ym91bmRp
bmdCb3goKSBjb25zdAotewotICAgIEZsb2F0UmVjdCByZWN0ID0gV2ViQ29yZTo6Ym91bmRpbmdC
b3godHJhbnNmb3JtZWRCb3VuZHMoKSk7Ci0KLSAgICBpZiAobV9vd25lckxheWVyLT5yZXBsaWNh
TGF5ZXIoKSkKLSAgICAgICAgcmVjdC51bml0ZShtX3JlcGxpY2FEcmF3VHJhbnNmb3JtLm1hcFF1
YWQoRmxvYXRSZWN0KC1vcmlnaW4oKSwgc2l6ZSgpKSkuYm91bmRpbmdCb3goKSk7Ci0KLSAgICBy
ZXR1cm4gcmVjdDsKLX0KLQotVmVjdG9yPEZsb2F0UG9pbnQsIDQ+IExheWVyUmVuZGVyZXJTdXJm
YWNlOjp0cmFuc2Zvcm1lZEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRvVmVjdG9yPEZs
b2F0UG9pbnQsIDQ+KG1fZHJhd1RyYW5zZm9ybS5tYXBRdWFkKEZsb2F0UmVjdCgtb3JpZ2luKCks
IHNpemUoKSkpKTsKLX0KLQotYm9vbCBMYXllclJlbmRlcmVyU3VyZmFjZTo6ZW5zdXJlVGV4dHVy
ZSgpCi17Ci0gICAgaWYgKCFtX3RleHR1cmUpCi0gICAgICAgIG1fdGV4dHVyZSA9IHRleHR1cmVD
YWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPmNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHJldHVybiBt
X3RleHR1cmUtPnByb3RlY3QobV9zaXplLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OkFsd2F5c0JhY2tlZCk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlclN1cmZhY2U6OnJlbGVhc2VU
ZXh0dXJlKCkKLXsKLSAgICBtX3RleHR1cmUtPnVucHJvdGVjdCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVu
ZGVyZXJTdXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5oCShyZXZpc2lvbiAxNjE1OTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVu
ZGVyZXJTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIExheWVyUmVuZGVyZXJTdXJm
YWNlX2gKLSNkZWZpbmUgTGF5ZXJSZW5kZXJlclN1cmZhY2VfaAotCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmUuaCIK
LSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ7Ci1jbGFzcyBMYXllclJlbmRlcmVyOwot
Ci1jbGFzcyBMYXllclJlbmRlcmVyU3VyZmFjZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
TGF5ZXJSZW5kZXJlclN1cmZhY2UpOwotcHVibGljOgotICAgIExheWVyUmVuZGVyZXJTdXJmYWNl
KExheWVyUmVuZGVyZXIqLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBvd25lcik7Ci0gICAgfkxh
eWVyUmVuZGVyZXJTdXJmYWNlKCk7Ci0KLSAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KLQotICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudFJlY3Q7IH0KLSAgICB2b2lkIHNldENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3Qm
KTsKLSAgICBGbG9hdFJlY3QgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9
Ci0gICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsgbV9jbGlwUmVj
dCA9IHJlY3Q7IH0KLQotICAgIEZsb2F0UG9pbnQgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gRmxv
YXRQb2ludChtX3NpemUud2lkdGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWlnaHQoKSAvIDIuMGYpOyB9
Ci0KLSAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgpIHsg
bV9kcmF3VHJhbnNmb3JtID0gcHJvamVjdGlvbk1hdHJpeCAqIG1hdHJpeDsgfQotICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9k
cmF3VHJhbnNmb3JtOyB9Ci0gICAgdm9pZCBzZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cHJvamVjdGlvbk1hdHJpeCkgeyBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtID0gcHJvamVjdGlvbk1h
dHJpeCAqIG1hdHJpeDsgfQotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNh
RHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYURyYXdUcmFuc2Zvcm07IH0K
LQotICAgIC8vIFRoZXNlIHVzZSBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcwotICAgIEZs
b2F0UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0OwotICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0PiB0
cmFuc2Zvcm1lZEJvdW5kcygpIGNvbnN0OwotCi0gICAgYm9vbCBlbnN1cmVUZXh0dXJlKCk7Ci0g
ICAgdm9pZCByZWxlYXNlVGV4dHVyZSgpOwotICAgIExheWVyVGV4dHVyZSogdGV4dHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsgfQotCi0gICAgZmxvYXQgZHJhd09wYWNpdHko
KSB7IHJldHVybiBtX29wYWNpdHk7IH0KLSAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9w
YWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQotCi1wcml2YXRlOgotICAgIFJlZlB0cjxM
YXllclRleHR1cmU+IG1fdGV4dHVyZTsKLQotICAgIEZsb2F0UmVjdCBtX2NvbnRlbnRSZWN0Owot
ICAgIEZsb2F0UmVjdCBtX2NsaXBSZWN0OwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9z
dXJmYWNlTWF0cml4OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOwotCi0gICAg
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbV9vd25lckxheWVyOwotICAgIExheWVyUmVuZGVyZXIq
IG1fbGF5ZXJSZW5kZXJlcjsKLQotICAgIGZsb2F0IG1fb3BhY2l0eTsKLQotICAgIEludFNpemUg
bV9zaXplOwotfTsKLQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotCi0jZW5kaWYgLy8gTGF5ZXJSZW5kZXJlclN1cmZhY2VfaApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRleHR1cmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJU
ZXh0dXJlLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmUuaCIK
LQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkLmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMkNvbnRleHRTdGF0
ZS5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oPgotI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUxheWVyVGV4dHVyZTo6TGF5ZXJUZXh0dXJlKGJvb2wgaXNDb2xv
cikKLSAgICA6IG1fcHJvdGVjdGlvbkNvdW50KDApCi0gICAgLCBtX2J1ZmZlcigwKQotICAgICwg
bV9pc0NvbG9yKGlzQ29sb3IpCi0gICAgLCBtX2J1ZmZlclNpemVJbkJ5dGVzKDApCi17Ci0gICAg
dGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+aW5zdGFsbCh0aGlzLCBJbnRTaXplKCks
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QmFja2VkV2hlbk5lY2Vzc2FyeSk7Ci19
Ci0KLUxheWVyVGV4dHVyZTo6fkxheWVyVGV4dHVyZSgpCi17Ci0gICAgdGV4dHVyZUNhY2hlQ29t
cG9zaXRpbmdUaHJlYWQoKS0+dGV4dHVyZURlc3Ryb3llZCh0aGlzKTsKLX0KLQotdm9pZCBMYXll
clRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ryb3lCdWZmZXIobV9idWZmZXIpOwotICAgIG1fYnVm
ZmVyID0gYnVmZmVyOwotICAgIHNpemVfdCBuZXdCdWZmZXJTaXplSW5CeXRlcyA9IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6YnVmZmVyU2l6ZUluQnl0ZXMobV9idWZmZXIpOwotICAg
IHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRleHR1cmVTaXplSW5CeXRlc0NoYW5n
ZWQodGhpcywgbmV3QnVmZmVyU2l6ZUluQnl0ZXMgLSBtX2J1ZmZlclNpemVJbkJ5dGVzKTsKLSAg
ICBtX2J1ZmZlclNpemVJbkJ5dGVzID0gbmV3QnVmZmVyU2l6ZUluQnl0ZXM7Ci19Ci0KLXZvaWQg
TGF5ZXJUZXh0dXJlOjpzZXRDb250ZW50c1RvQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIFJHQkEzMiByZ2JhID0gY29sb3IucmdiKCk7Ci0KLSAgICBpZiAobV9idWZmZXIpCi0gICAg
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6ZGVzdHJveUJ1ZmZlcihtX2J1ZmZl
cik7Ci0KLSAgICBtX2J1ZmZlciA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Y3Jl
YXRlQnVmZmVyKEludFNpemUoMSwgMSksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
QmFja2VkV2hlbk5lY2Vzc2FyeSk7Ci0gICAgaWYgKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGdjID0gbG9ja0J1ZmZlckRyYXdhYmxlKG1f
YnVmZmVyKSkgewotICAgICAgICBnYy0+c2V0RmlsbENvbG9yKHJnYmEpOwotICAgICAgICBnYy0+
YWRkRmlsbFJlY3QoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0UmVjdCgwLCAwLCAxLCAxKSk7
Ci0gICAgfQotICAgIHJlbGVhc2VCdWZmZXJEcmF3YWJsZShtX2J1ZmZlcik7Ci0KLSAgICBJbnRT
aXplIG9sZFNpemUgPSBtX3NpemU7Ci0gICAgbV9zaXplID0gSW50U2l6ZSgxLCAxKTsKLSAgICBp
ZiAobV9zaXplICE9IG9sZFNpemUpCi0gICAgICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkKCktPnRleHR1cmVSZXNpemVkKHRoaXMsIG9sZFNpemUpOwotfQotCi1ib29sIExheWVyVGV4
dHVyZTo6cHJvdGVjdChjb25zdCBJbnRTaXplJiBzaXplLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OkJ1ZmZlclR5cGUgdHlwZSkKLXsKLSAgICBpZiAoIW1fYnVmZmVyKSB7Ci0gICAg
ICAgIC8vIFdlIG1heSBoYXZlIGJlZW4gZXZpY3RlZCBieSB0aGUgVGV4dHVyZUNhY2hlQ29tcG9z
aXRpbmdUaHJlYWQsCi0gICAgICAgIC8vIGF0dGVtcHQgdG8gaW5zdGFsbCB1cyBhZ2Fpbi4KLSAg
ICAgICAgaWYgKCF0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT5pbnN0YWxsKHRoaXMs
IHNpemUsIHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgICsr
bV9wcm90ZWN0aW9uQ291bnQ7Ci0KLSAgICBpZiAobV9zaXplID09IHNpemUpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+cmVzaXpl
VGV4dHVyZSh0aGlzLCBzaXplLCB0eXBlKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1QbGF0
Zm9ybTNET2JqZWN0IExheWVyVGV4dHVyZTo6cGxhdGZvcm1UZXh0dXJlKCkgY29uc3QKLXsKLSAg
ICB1c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOwotCi0gICAg
UGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUgPSByZWludGVycHJldF9jYXN0PFBsYXRm
b3JtM0RPYmplY3Q+KHBsYXRmb3JtQnVmZmVySGFuZGxlKG1fYnVmZmVyKSk7Ci0KLSAgICAvLyBG
b3JjZSBjcmVhdGlvbiBpZiBpdCdzIDAuCi0gICAgaWYgKCFwbGF0Zm9ybVRleHR1cmUpIHsKLSAg
ICAgICAgLy8gVGhpcyBjYWxsIGNhbiBjYXVzZSBkaXNwbGF5IGxpc3QgdG8gcmVuZGVyIHRvIGJh
Y2tpbmcsIHdoaWNoIGNhbiBtdXRhdGUgYSBsb3Qgb2YgR0wgc3RhdGUuCi0gICAgICAgIEdMRVMy
Q29udGV4dFN0YXRlOjpWZXJ0ZXhBdHRyaWJ1dGVTdGF0ZVNhdmVyIHZlcnRleEF0dHJpYlN0YXRl
U2F2ZXI7Ci0gICAgICAgIEdMRVMyQ29udGV4dFN0YXRlOjpQcm9ncmFtU3RhdGVTYXZlciBwcm9n
cmFtU2F2ZXI7Ci0gICAgICAgIEdMRVMyQ29udGV4dFN0YXRlOjpUZXh0dXJlQW5kRkJPU3RhdGVT
YXZlciB0ZXh0dXJlU2F2ZXI7Ci0KLSAgICAgICAgbG9ja0FuZEJpbmRCdWZmZXJHTFRleHR1cmUo
bV9idWZmZXIsIEdMX1RFWFRVUkVfMkQpOwotICAgICAgICBwbGF0Zm9ybVRleHR1cmUgPSByZWlu
dGVycHJldF9jYXN0PFBsYXRmb3JtM0RPYmplY3Q+KHBsYXRmb3JtQnVmZmVySGFuZGxlKG1fYnVm
ZmVyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsYXRmb3JtVGV4dHVyZTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clRleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyVGV4dHVyZS5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGV4dHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgTGF5ZXJUZXh0dXJlX2gKLSNkZWZpbmUg
TGF5ZXJUZXh0dXJlX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2lu
Y2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLQotI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIENvbG9yOwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIFRleHR1cmVDYWNoZUNvbXBv
c2l0aW5nVGhyZWFkOwotCi0vLyBMYXllclRleHR1cmUgZW5jYXBzdWxhdGVzIGEgdm9sYXRpbGUg
dGV4dHVyZSAtIGF0IGFueSB0aW1lLCB0aGUgdW5kZXJseWluZyBPcGVuR0wKLS8vIHRleHR1cmUg
bWF5IGJlIGRlbGV0ZWQgYnkgdGhlIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLiBUaGUg
dXNlciBtdXN0Ci0vLyBjaGVjayB1c2luZyBMYXllclRleHR1cmU6OmlzRGlydHkoKSBpbW1lZGlh
dGVseSBiZWZvcmUgdXNpbmcgaXQsIGV2ZXJ5IHRpbWUuCi0vLyBUaGUgb25seSB3YXkgdG8gcHJl
dmVudCBldmljdGlvbiB0aGlzIGlzIHRvIGNhbGwgTGF5ZXJUZXh0dXJlOjpwcm90ZWN0KCkuCi0v
LyBJZiB0aGUgdGV4dHVyZSBpc0RpcnR5KCksIHlvdSBtdXN0IHVwZGF0ZUNvbnRlbnRzKCkgYmVm
b3JlIHlvdSBjYW4gdXNlIGl0LgotY2xhc3MgTGF5ZXJUZXh0dXJlIDogcHVibGljIFJlZkNvdW50
ZWQ8TGF5ZXJUZXh0dXJlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJU
ZXh0dXJlPiBjcmVhdGUoYm9vbCBpc0NvbG9yID0gZmFsc2UpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IExheWVyVGV4dHVyZShpc0NvbG9yKSk7Ci0gICAgfQotCi0gICAgfkxh
eWVyVGV4dHVyZSgpOwotCi0gICAgYm9vbCBpc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gIW1fYnVm
ZmVyOyB9Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0KLQotICAgIGJvb2wgaXNDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1faXNDb2xvcjsgfQotCi0gICAgYm9vbCBpc1Byb3RlY3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvdGVjdGlvbkNvdW50ID4gMDsgfQotICAgIHZvaWQgcHJvdGVjdCgpIHsg
KyttX3Byb3RlY3Rpb25Db3VudDsgfQotICAgIHZvaWQgdW5wcm90ZWN0KCkgeyAtLW1fcHJvdGVj
dGlvbkNvdW50OyB9Ci0KLSAgICAvLyBUaGlzIHdpbGwgZW5zdXJlIGEgYnVmZmVyIGlzIGFsbG9j
YXRlZCBmb3IgdGhpcyB0ZXh0dXJlIHdpdGggdGhlIHJlcXVlc3RlZCBiYWNraW5nIGFuZCBzaXpl
LgotICAgIGJvb2wgcHJvdGVjdChjb25zdCBJbnRTaXplJiwgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpCdWZmZXJUeXBlID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpC
YWNrZWRXaGVuTmVjZXNzYXJ5KTsKLQotICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0
dXJlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6QnVmZmVyKik7Ci0gICAgdm9pZCBzZXRDb250ZW50c1RvQ29sb3IoY29u
c3QgQ29sb3ImKTsKLQotICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQotICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9Ci0gICAg
aW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQotICAgIHN0YXRp
YyBpbnQgYnl0ZXNQZXJQaXhlbCgpIHsgcmV0dXJuIDQ7IH0KLQotICAgIHNpemVfdCBzaXplSW5C
eXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyU2l6ZUluQnl0ZXM7IH0KLQotcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ7Ci0KLSAgICBM
YXllclRleHR1cmUoYm9vbCBpc0NvbG9yID0gZmFsc2UpOwotICAgIHZvaWQgc2V0QnVmZmVyKEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZmZXIpCi0gICAgewotICAg
ICAgICBtX2J1ZmZlciA9IGJ1ZmZlcjsKLQotICAgICAgICAvLyBXZSBhc3N1bWUgaXQgaXMgYSBu
ZXdseSBhbGxvY2F0ZWQgYnVmZmVyLAotICAgICAgICAvLyBhbmQgdGh1cyBlbXB0eSwgb3IgMCwg
d2hpY2ggd291bGQgb2YgY291cnNlCi0gICAgICAgIC8vIGJlIGVtcHR5LgotICAgICAgICBtX3Np
emUgPSBJbnRTaXplKCk7Ci0gICAgICAgIG1fYnVmZmVyU2l6ZUluQnl0ZXMgPSAwOwotICAgIH0K
LQotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7
IH0KLQotICAgIGludCBtX3Byb3RlY3Rpb25Db3VudDsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OkJ1ZmZlciogbV9idWZmZXI7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAg
Ym9vbCBtX2lzQ29sb3I7Ci0gICAgc2l6ZV90IG1fYnVmZmVyU2l6ZUluQnl0ZXM7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0KLSNlbmRpZiAvLyBMYXllclRleHR1cmVfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmNw
cAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllclRpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQot
I2luY2x1ZGUgIkxheWVyVGlsZS5oIgotCi0jaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRp
bmdUaHJlYWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1MYXllclRpbGU6OkxheWVyVGls
ZSgpCi0gICAgOiBtX3NjYWxlKDApCi0gICAgLCBtX2NvbnRlbnRzRGlydHkoZmFsc2UpCi0gICAg
LCBtX3Zpc2libGUoZmFsc2UpCi17Ci19Ci0KLUxheWVyVGlsZTo6fkxheWVyVGlsZSgpCi17Ci0g
ICAgLy8gTWFrZSBzdXJlIHRvIHVucHJvdGVjdCB0aGUgdGV4dHVyZSBpZiBuZWVkZWQuCi0gICAg
c2V0VmlzaWJsZShmYWxzZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlOjpzZXRDb250ZW50cyhCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogY29udGVudHMpCi17Ci0gICAgbV9z
Y2FsZSA9IDA7IC8vIFJlc29sdXRpb24gaW5kZXBlbmRlbnQKLSAgICBzZXRUZXh0dXJlKHRleHR1
cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRleHR1cmVGb3JDb250ZW50cyhjb250ZW50cykp
OwotfQotCi12b2lkIExheWVyVGlsZTo6dXBkYXRlQ29udGVudHMoQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpCdWZmZXIqIGNvbnRlbnRzLCBkb3VibGUgc2NhbGUpCi17Ci0gICAgbV9z
Y2FsZSA9IHNjYWxlOwotICAgIHNldFRleHR1cmUodGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJl
YWQoKS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlLCBjb250ZW50cykpOwotfQotCi12b2lkIExh
eWVyVGlsZTo6ZGlzY2FyZENvbnRlbnRzKCkKLXsKLSAgICBtX3NjYWxlID0gMDsgLy8gVW5rbm93
biBzY2FsZQotICAgIHNldFRleHR1cmUoMCk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlOjpzZXRWaXNp
YmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAodmlzaWJsZSA9PSBtX3Zpc2libGUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fdmlzaWJsZSA9IHZpc2libGU7Ci0KLSAgICBpZiAoIW1fdGV4
dHVyZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgdGV4dHVyZSBmcm9t
IGJlaW5nIGV2aWN0ZWQgZnJvbSBjYWNoZQotICAgIC8vIGlmIHdlIGFyZSB2aXNpYmxlLgotICAg
IGlmICh2aXNpYmxlKQotICAgICAgICBtX3RleHR1cmUtPnByb3RlY3QoKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fdGV4dHVyZS0+dW5wcm90ZWN0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlOjpzZXRU
ZXh0dXJlKFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlPiB0ZXh0dXJlKQotewotICAgIC8vIENsZWFy
IHRoaXMgZmxhZyByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGUgdGV4dHVyZSBwYXJhbWV0
ZXIuCi0gICAgLy8gSWYgaXQncyAwLCBpc0RpcnR5KCkgd2lsbCByZXR1cm4gdHJ1ZSBhbnl3YXku
Ci0gICAgLy8gSWYgaXQncyB0aGUgc2FtZSB0ZXh0dXJlLCBwZXJoYXBzIHRoZXJlIHdhcyBubyBt
b3JlIGRldGFpbGVkIHRleHR1cmUKLSAgICAvLyBhdmFpbGFibGUgdGhhbiB0aGUgb25lIHdlIGFs
cmVhZHkgaGFkLCBhbmQga2VlcGluZyB0aGUgZGlydHkgZmxhZyB3aWxsCi0gICAgLy8gcmVzdWx0
IGluIGFuIGVuZGxlc3MgbG9vcCBvZiB1cGRhdGluZyB0byB0aGUgc2FtZSB0ZXh0dXJlLgotICAg
IG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOwotCi0gICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNb3ZlIHByb3RlY3Rpb24gb3ZlciB0byB0aGUg
bmV3IHRleHR1cmUuCi0gICAgaWYgKG1fdmlzaWJsZSkgewotICAgICAgICBpZiAobV90ZXh0dXJl
KQotICAgICAgICAgICAgbV90ZXh0dXJlLT51bnByb3RlY3QoKTsKLSAgICAgICAgaWYgKHRleHR1
cmUpCi0gICAgICAgICAgICB0ZXh0dXJlLT5wcm90ZWN0KCk7Ci0gICAgfQotCi0gICAgbV90ZXh0
dXJlID0gdGV4dHVyZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5oCShyZXZpc2lv
biAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyVGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBMYXllclRp
bGVfaAotI2RlZmluZSBMYXllclRpbGVfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50UmVjdDsKLWNsYXNzIFRpbGVJ
bmRleDsKLQotY2xhc3MgTGF5ZXJUaWxlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBMYXllclRpbGUoKTsKLSAgICB+TGF5ZXJUaWxlKCk7Ci0KLSAgICBMYXll
clRleHR1cmUqIHRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KLQot
ICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9Ci0gICAgdm9p
ZCBzZXRWaXNpYmxlKGJvb2wpOwotCi0gICAgYm9vbCBpc0RpcnR5KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50c0RpcnR5IHx8ICFtX3RleHR1cmUgfHwgbV90ZXh0dXJlLT5pc0RpcnR5KCk7IH0K
LQotICAgIGJvb2wgaGFzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZSAmJiBtX3Rl
eHR1cmUtPmJ1ZmZlcigpOyB9Ci0KLSAgICB2b2lkIHNldENvbnRlbnRzKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKik7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciosIGRvdWJsZSBzY2FsZSk7Ci0gICAg
dm9pZCBkaXNjYXJkQ29udGVudHMoKTsKLQotICAgIC8vIFJldHVybnMgMCBpZiBjb250ZW50cyBh
cmUgcmVzb2x1dGlvbiBpbmRlcGVuZGVudCBvciBzY2FsZSBpcyBzaW1wbHkgdW5rbm93bi4KLSAg
ICBkb3VibGUgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KLQotICAg
IC8vIFRoZSB0ZXh0dXJlIGNvbnRlbnRzIGFyZSBkaXJ0eSBkdWUgdG8gYXBwZWFyYW5jZSBvZiBw
YWdlIGNoYW5naW5nLCBvciBhIGNoYW5nZSBpbiBjb250ZW50cyBzY2FsZS4KLSAgICB2b2lkIHNl
dENvbnRlbnRzRGlydHkoKSB7IG1fY29udGVudHNEaXJ0eSA9IHRydWU7IH0KLQotcHJpdmF0ZToK
LSAgICB2b2lkIHNldFRleHR1cmUoUGFzc1JlZlB0cjxMYXllclRleHR1cmU+KTsKLQotICAgIC8v
IE5ldmVyIGFzc2lnbiB0byBtX3RleHR1cmUgZGlyZWN0bHksIHVzZSBzZXRUZXh0dXJlKCkgYWJv
dmUuCi0gICAgUmVmUHRyPExheWVyVGV4dHVyZT4gbV90ZXh0dXJlOwotICAgIGRvdWJsZSBtX3Nj
YWxlOwotICAgIGJvb2wgbV9jb250ZW50c0RpcnR5IDogMTsKLSAgICBib29sIG1fdmlzaWJsZSA6
IDE7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0K
LSNlbmRpZiAvLyBUZXh0dXJlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlSW5kZXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZUluZGV4LmgJKHJldmlz
aW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJUaWxlSW5kZXguaAkod29ya2luZyBjb3B5KQpAQCAtMSw5MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgTGF5ZXJU
aWxlSW5kZXhfaAotI2RlZmluZSBMYXllclRpbGVJbmRleF9oCi0KLSNpbmNsdWRlIDxsaW1pdHM+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBUaWxlSW5kZXggewotcHVibGljOgotICAgIFRpbGVJbmRleCgpCi0gICAgICAgIDogbV9pKHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgLCBtX2ooc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgIHsKLSAgICB9Ci0gICAgVGlsZUlu
ZGV4KHVuc2lnbmVkIGksIHVuc2lnbmVkIGopCi0gICAgICAgIDogbV9pKGkpCi0gICAgICAgICwg
bV9qKGopCi0gICAgewotICAgIH0KLSAgICB+VGlsZUluZGV4KCkgeyB9Ci0KLSAgICB1bnNpZ25l
ZCBpKCkgY29uc3QgeyByZXR1cm4gbV9pOyB9Ci0gICAgdW5zaWduZWQgaigpIGNvbnN0IHsgcmV0
dXJuIG1fajsgfQotICAgIHZvaWQgc2V0SW5kZXgodW5zaWduZWQgaSwgdW5zaWduZWQgaikKLSAg
ICB7Ci0gICAgICAgIG1faSA9IGk7Ci0gICAgICAgIG1faiA9IGo7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIHVuc2lnbmVkIG1faTsKLSAgICB1bnNpZ25lZCBtX2o7Ci19OwotCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFRpbGVJbmRleCYgYSwgY29uc3QgVGlsZUluZGV4JiBiKQotewot
ICAgIHJldHVybiBhLmkoKSA9PSBiLmkoKSAmJiBhLmooKSA9PSBiLmooKTsKLX0KLQotaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBUaWxlSW5kZXgmIGEsIGNvbnN0IFRpbGVJbmRleCYgYikK
LXsKLSAgICByZXR1cm4gYS5pKCkgIT0gYi5pKCkgfHwgYS5qKCkgIT0gYi5qKCk7Ci19Ci0KLX0K
LQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEludEhhc2g8V2ViQ29yZTo6
VGlsZUluZGV4PiB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2ViQ29yZTo6VGls
ZUluZGV4JiBrZXkpIHsgcmV0dXJuIGludEhhc2goKHN0YXRpY19jYXN0PHVpbnQ2NF90PihrZXku
aSgpKSA8PCAzMiB8IGtleS5qKCkpKTsgfQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdl
YkNvcmU6OlRpbGVJbmRleCYgYSwgY29uc3QgV2ViQ29yZTo6VGlsZUluZGV4JiBiKSB7IHJldHVy
biBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29y
ZTo6VGlsZUluZGV4PiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPFdlYkNvcmU6OlRpbGVJbmRleD4g
SGFzaDsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6VGlsZUlu
ZGV4PiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OlRpbGVJbmRleD4gewotICAgIHN0YXRp
YyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7Ci0gICAgc3RhdGljIFdlYkNvcmU6OlRpbGVJ
bmRleCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gV2ViQ29yZTo6VGlsZUluZGV4KCk7IH0KLSAgICBz
dGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoV2ViQ29yZTo6VGlsZUluZGV4JiBzbG90
KQotICAgIHsKLSAgICAgICAgbmV3ICgmc2xvdCkgV2ViQ29yZTo6VGlsZUluZGV4KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIDEsIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSAtIDEpOwotICAgIH0KLSAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShjb25zdCBXZWJDb3JlOjpUaWxlSW5kZXgmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHZhbHVlLmkoKSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSAxICYm
IHZhbHVlLmooKSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSAxOwot
ICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gTGF5ZXJUaWxlSW5k
ZXhfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9M
YXllclRpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDczNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkxheWVyVGlsZXIuaCIKLQot
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0j
aW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgotI2luY2x1ZGUgIkxheWVyTWVzc2Fn
ZS5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMYXllclV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCi0jaW5jbHVkZSAiVGV4dHVyZUNh
Y2hlQ29tcG9zaXRpbmdUaHJlYWQuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdM
RVMyUHJvZ3JhbS5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVNjcmVlbi5oPgotI2lu
Y2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVNldHRpbmdzLmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+Ci0jaW5jbHVkZSBfTlRPX0NQVV9IRFJfKHNtcHhjaGcuaCkKLQotI2RlZmluZSBERUJVR19M
QVlFUl9WSVNJQklMSVRZIDAgLy8gU2hvdyB2aXNpYmxlIHJlZ2lvbiBvZiBsYXllcnMgYXMgYSB0
aGljayBib3JkZXIsIGFuZCBwcmludCB2aXNpYmxlIHJlY3QuCi0jaWYgREVCVUdfTEFZRVJfVklT
SUJJTElUWQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBz
dGQ7Ci11c2luZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbTsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMYXllclZpc2liaWxpdHkgewotcHVibGlj
OgotICAgIExheWVyVmlzaWJpbGl0eShjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25z
dCBIYXNoU2V0PFRpbGVJbmRleD4mIHRpbGVzTmVlZGluZ1JlbmRlcikKLSAgICAgICAgOiBtX3Zp
c2libGVSZWN0KHZpc2libGVSZWN0KQotICAgICAgICAsIG1fdGlsZXNOZWVkaW5nUmVuZGVyKHRp
bGVzTmVlZGluZ1JlbmRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHZpc2libGVS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlUmVjdDsgfQotICAgIHZvaWQgc2V0VmlzaWJs
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkgeyBtX3Zpc2libGVSZWN0ID0gdmlz
aWJsZVJlY3Q7IH0KLQotICAgIGJvb2wgbmVlZHNSZW5kZXIoKSBjb25zdCB7IHJldHVybiAhbV90
aWxlc05lZWRpbmdSZW5kZXIuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCB0aWxlTmVlZHNSZW5kZXIo
Y29uc3QgVGlsZUluZGV4JiBpbmRleCkgY29uc3QgeyByZXR1cm4gbV90aWxlc05lZWRpbmdSZW5k
ZXIuY29udGFpbnMoaW5kZXgpOyB9Ci0gICAgdm9pZCBtYXJrVGlsZUFzUmVuZGVyZWQoY29uc3Qg
VGlsZUluZGV4JiBpbmRleCkgeyBtX3RpbGVzTmVlZGluZ1JlbmRlci5yZW1vdmUoaW5kZXgpOyBt
X3RpbGVzUmVuZGVyZWQuYWRkKGluZGV4KTsgfQotICAgIHZvaWQgc3dhcFRpbGVzTmVlZGluZ1Jl
bmRlcihIYXNoU2V0PFRpbGVJbmRleD4mIHRpbGVzTmVlZGluZ1JlbmRlcikgeyBtX3RpbGVzTmVl
ZGluZ1JlbmRlci5zd2FwKHRpbGVzTmVlZGluZ1JlbmRlcik7IH0KLSAgICB2b2lkIGNsZWFyVGls
ZXNSZW5kZXJlZCgpIHsgbV90aWxlc1JlbmRlcmVkLmNsZWFyKCk7IH0KLQotICAgIHZvaWQgbWVy
Z2UoTGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmlsaXR5KQotICAgIHsKLSAgICAgICAgaWYgKCF2aXNp
YmlsaXR5KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3RpbGVzUmVuZGVyZWQuc3dh
cCh2aXNpYmlsaXR5LT5tX3RpbGVzUmVuZGVyZWQpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8VGls
ZUluZGV4Pjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzUmVuZGVyZWQuYmVnaW4oKTsgaXQgIT0gbV90
aWxlc1JlbmRlcmVkLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgbV90aWxlc05lZWRpbmdSZW5k
ZXIucmVtb3ZlKCppdCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEZsb2F0UmVjdCBtX3Zpc2li
bGVSZWN0OwotICAgIEhhc2hTZXQ8VGlsZUluZGV4PiBtX3RpbGVzTmVlZGluZ1JlbmRlcjsKLSAg
ICBIYXNoU2V0PFRpbGVJbmRleD4gbV90aWxlc1JlbmRlcmVkOwotfTsKLQotLy8gVGhpcyBpcyB1
c2VkIHRvIG1ha2UgdGhlIHZpZXdwb3J0IGFzIHVzZWQgaW4gdGV4dHVyZSB2aXNpYmlsaXR5IGNh
bGN1bGF0aW9ucwotLy8gc2xpZ2h0bHkgbGFyZ2VyIHNvIHRleHR1cmVzIGFyZSB1cGxvYWRlZCBi
ZWZvcmUgYmVjb21pbmcgcmVhbGx5IHZpc2libGUuCi0vLyBJbmZsYXRpb24gaXMgZ3JlYXRlciBp
biBZIGRpcmVjdGlvbiAob25lIHNjcmVlbmZ1bCBpbiBlaXRoZXIgZGlyZWN0aW9uKSBzaW5jZQot
Ly8gc2Nyb2xsaW5nIHZlcnRpY2FsbHkgaXMgbW9yZSBjb21tb24sIGFuZCBlYXNpbHkgcmVhY2hl
cyBoaWdoZXIgdmVsb2NpdHksIHRoYW4KLS8vIHNjcm9sbGluZyBob3Jpem9udGFsbHkuCi0vLyBU
aGUgdmlld3BvcnRJbmZsYXRpb24gaXMgZXhwcmVzc2VkIGFzIGEgZnJhY3Rpb24gdG8gbXVsdGlw
bHkgdGhlIHZpZXdwb3J0IGJ5LCBhbmQKLS8vIGl0IGlzIGNlbnRlcmVkLgotLy8gQSBoZWlnaHQg
b2YgMyBtZWFucyB0byBjb25zaWRlciBvbmUgc2NyZWVuZnVsIGFib3ZlIGFuZCBvbmUgc2NyZWVu
ZnVsIGJlbG93IHRoZQotLy8gY3VycmVudCB2aWV3cG9ydCBhcyB2aXNpYmxlLgotY29uc3QgRmxv
YXRTaXplIHZpZXdwb3J0SW5mbGF0aW9uKDEuMmYsIDMuMGYpOwotCi0vLyBUaGlzIGlzIGEgc21h
bGwgb3B0aW1pemF0aW9uIHRvIGN1dCBkb3duIG9uIGNhbGxzIHRvIG9wZXJhdG9yIG5ldy4KLS8v
IFNpbmNlIHRoZSBjb21wb3NpdGluZyB0aHJlYWQgbm9ybWFsbHkgc3dhcHMgaW4gbmV3IHZpc2li
aWxpdHkgb2JqZWN0cyBtdWNoIG1vcmUKLS8vIG9mdGVuIHRoYW4gdGhlIFdlYktpdCB0aHJlYWQg
c3dhcHMgdGhlbSBvdXQsIGl0J3MgbGlrZWx5IHRoYXQgaXQgd2lsbCBzd2FwIG91dAotLy8gdGhl
IHByZXZpb3VzIHZpc2liaWxpdHkgb2JqZWN0IGFuZCB3ZSBjYW4gcmV1c2UgdGhhdC4KLXN0YXRp
YyBMYXllclZpc2liaWxpdHkqIHNfc3BhcmVWaXNpYmlsaXR5ID0gMDsKLQotc3RhdGljIEludFNp
emUgZGVmYXVsdFRpbGVTaXplKCkKLXsKLSAgICBzdGF0aWMgSW50U2l6ZSBzaXplKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+dGlsZVNpemUoKSk7Ci0gICAgcmV0
dXJuIHNpemU7Ci19Ci0KLUxheWVyVGlsZXI6OkxheWVyVGlsZXIoTGF5ZXJXZWJLaXRUaHJlYWQq
IGxheWVyKQotICAgIDogbV9sYXllcihsYXllcikKLSAgICAsIG1fbmVlZHNCYWNraW5nKGZhbHNl
KQotICAgICwgbV9jb250ZW50c0RpcnR5KGZhbHNlKQotICAgICwgbV90aWxlU2l6ZShkZWZhdWx0
VGlsZVNpemUoKSkKLSAgICAsIG1fY2xlYXJUZXh0dXJlSm9icyhmYWxzZSkKLSAgICAsIG1fZnJv
bnRWaXNpYmlsaXR5KDApCi0gICAgLCBtX2JhY2tWaXNpYmlsaXR5KDApCi17Ci0gICAgcmVmKCk7
IC8vIFRoaXMgcmVmKCkgaXMgbWF0Y2hlZCBieSBhIGRlcmVmIGluIGxheWVyQ29tcG9zaXRpbmdU
aHJlYWREZXN0cm95ZWQoKTsKLX0KLQotTGF5ZXJUaWxlcjo6fkxheWVyVGlsZXIoKQotewotICAg
IC8vIFNvbWVvbmUgc2hvdWxkIGhhdmUgY2FsbGVkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVz
KCkKLSAgICAvLyBiZWZvcmUgbm93LiBXZSBjYW4ndCBjYWxsIGl0IGhlcmUgYmVjYXVzZSB3ZSBo
YXZlIG5vCi0gICAgLy8gT3BlbkdMIGNvbnRleHQuCi0gICAgQVNTRVJUKG1fdGlsZXMuaXNFbXB0
eSgpKTsKLQotICAgIGRlbGV0ZSBtX2Zyb250VmlzaWJpbGl0eTsKLSAgICBkZWxldGUgbV9iYWNr
VmlzaWJpbGl0eTsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpsYXllcldlYktpdFRocmVhZERlc3Ry
b3llZCgpCi17Ci0gICAgbV9sYXllciA9IDA7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6bGF5ZXJD
b21wb3NpdGluZ1RocmVhZERlc3Ryb3llZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKLXsKLSAg
ICBBU1NFUlQoaXNDb21wb3NpdGluZ1RocmVhZCgpKTsKLSAgICBkZXJlZigpOyAvLyBNYXRjaGVk
IGJ5IHJlZigpIGluIGNvbnN0cnVjdG9yOwotfQotCi12b2lkIExheWVyVGlsZXI6OnNldE5lZWRz
RGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBtX2RpcnR5UmVjdC51
bml0ZShkaXJ0eVJlY3QpOwotICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQg
TGF5ZXJUaWxlcjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBtX2RpcnR5UmVjdC5zZXRMb2Nh
dGlvbihGbG9hdFBvaW50Ojp6ZXJvKCkpOwotICAgIG1fZGlydHlSZWN0LnNldFNpemUobV9sYXll
ci0+Ym91bmRzKCkpOwotICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgTGF5
ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoZG91YmxlIHNjYWxlKQotewot
ICAgIHVwZGF0ZVRpbGVTaXplKCk7Ci0KLSAgICAvLyBJZiB3ZSdyZSBkaXJ0eSwgc3RhcnQgZnJl
c2guIE90aGVyd2lzZSwgd2Uga2VlcCB0cmFjayBvZiB0aWxlcyByZW5kZXJlZCBzbyBmYXIgYnkg
bWVyZ2luZwotICAgIC8vIHRoZW0gaW50byB0aGUgbmV3IHZpc2liaWxpdHkgb2JqZWN0IGZ1cnRo
ZXIgZG93biwgdG8gYXZvaWQgcmUtcmVuZGVyaW5nIHRoZSBzYW1lIGNvbnRlbnQuCi0gICAgaWYg
KG1fY29udGVudHNEaXJ0eSAmJiBtX2JhY2tWaXNpYmlsaXR5KQotICAgICAgICBtX2JhY2tWaXNp
YmlsaXR5LT5jbGVhclRpbGVzUmVuZGVyZWQoKTsKLQotICAgIC8vIFN3YXAgaW4gdGhlIG5ldyB2
aXNpYmlsaXR5IG9iamVjdCBhbmQgbWVyZ2Ugb2xkIHZpc2liaWxpdHkgb2JqZWN0IGludG8gaXQu
Ci0gICAgaWYgKExheWVyVmlzaWJpbGl0eSogZnJvbnRWaXNpYmlsaXR5ID0gdGFrZUZyb250Vmlz
aWJpbGl0eSgpKSB7Ci0gICAgICAgIGZyb250VmlzaWJpbGl0eS0+bWVyZ2UobV9iYWNrVmlzaWJp
bGl0eSk7Ci0gICAgICAgIGRlbGV0ZSBtX2JhY2tWaXNpYmlsaXR5OwotICAgICAgICBtX2JhY2tW
aXNpYmlsaXR5ID0gZnJvbnRWaXNpYmlsaXR5OwotICAgIH0KLQotICAgIGJvb2wgbmVlZHNSZW5k
ZXIgPSBtX2JhY2tWaXNpYmlsaXR5ICYmIG1fYmFja1Zpc2liaWxpdHktPm5lZWRzUmVuZGVyKCk7
Ci0gICAgaWYgKCFtX2NvbnRlbnRzRGlydHkgJiYgIW5lZWRzUmVuZGVyKQotICAgICAgICByZXR1
cm47Ci0KLSNpZiBERUJVR19MQVlFUl9WSVNJQklMSVRZCi0gICAgaWYgKG1fYmFja1Zpc2liaWxp
dHkgJiYgIW1fYmFja1Zpc2liaWxpdHktPnZpc2libGVSZWN0KCkuaXNFbXB0eSgpKQotICAgICAg
ICBwcmludGYoIkxheWVyIDB4JXAgbG9jYWwgdmlzaWJsZSByZWN0ICVzXG4iLCBtX2xheWVyLCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRSZWN0KG1fYmFja1Zpc2liaWxpdHktPnZpc2libGVS
ZWN0KCkpLnRvU3RyaW5nKCkuY19zdHIoKSk7Ci0jZW5kaWYKLQotICAgIC8vIFRoZXJlJ3Mgbm8g
cG9pbnQgaW4gZHJhd2luZyBjb250ZW50cyBhdCBhIGhpZ2hlciByZXNvbHV0aW9uIGZvciBzY2Fs
ZSBpbnZhcmlhbnQgbGF5ZXJzLgotICAgIGlmIChtX2xheWVyLT5zaXplSXNTY2FsZUludmFyaWFu
dCgpKQotICAgICAgICBzY2FsZSA9IDE7Ci0KLSAgICAvLyBSZW5kZXIgb25seSB2aXNpYmxlIHRp
bGVzLiBNYXNrIGxheWVycyBhcmUgYSBzcGVjaWFsIGNhc2UsIGJlY2F1c2UgdGhleSdyZSBuZXZl
ciBjb25zaWRlcmVkCi0gICAgLy8gdmlzaWJsZS4gV29ya2Fyb3VuZCB0aGlzIGJ5IGFsd2F5cyBy
ZW5kZXJpbmcgdGhlbSAoYSB2ZXJ5IGZhc3Qgb3BlcmF0aW9uIHdpdGggdGhlCi0gICAgLy8gQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzQ29udGV4dCBzaW5jZSBpdCB3aWxsIGp1c3QgcmVz
dWx0IGluIHJlZidpbmcgdGhlIG1hc2sgaW1hZ2UpLgotICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVj
dDsKLSAgICBpZiAobV9sYXllci0+aXNNYXNrKCkgfHwgbV9sYXllci0+ZmlsdGVycygpLnNpemUo
KSkKLSAgICAgICAgdmlzaWJsZVJlY3QgPSBGbG9hdFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9s
YXllci0+Ym91bmRzKCkpOwotICAgIGVsc2UgaWYgKG1fYmFja1Zpc2liaWxpdHkpCi0gICAgICAg
IHZpc2libGVSZWN0ID0gbV9iYWNrVmlzaWJpbGl0eS0+dmlzaWJsZVJlY3QoKTsKLSAgICBlbHNl
Ci0gICAgICAgIHZpc2libGVSZWN0ID0gRmxvYXRSZWN0KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
bG9hdFJlY3QoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5sYXll
clRpbGVyUHJlZmlsbFJlY3QoKSkpOwotCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7
Ci0KLSAgICBpZiAobV9sYXllci0+ZHJhd3NDb250ZW50KCkpIHsKLSAgICAgICAgLy8gTGF5ZXIg
Y29udGVudHMgbXVzdCBiZSBkcmF3biBpbnRvIGEgY2FudmFzLgotICAgICAgICBJbnRSZWN0IHVu
dHJhbnNmb3JtZWREaXJ0eVJlY3QoZGlydHlSZWN0KTsKLSAgICAgICAgSW50UmVjdCBib3VuZHNS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fbGF5ZXItPmJvdW5kcygpKTsKLSAgICAgICAgSW50UmVj
dCB1bnRyYW5zZm9ybWVkQm91bmRzUmVjdChib3VuZHNSZWN0KTsKLSAgICAgICAgcmVxdWlyZWRU
ZXh0dXJlU2l6ZSA9IGJvdW5kc1JlY3Quc2l6ZSgpOwotCi0gICAgICAgIGlmIChzY2FsZSAhPSAx
KSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0gICAgICAgICAg
ICBtYXRyaXguc2NhbGUoc2NhbGUpOwotCi0gICAgICAgICAgICBkaXJ0eVJlY3QgPSBtYXRyaXgu
bWFwUmVjdCh1bnRyYW5zZm9ybWVkRGlydHlSZWN0KTsKLSAgICAgICAgICAgIHJlcXVpcmVkVGV4
dHVyZVNpemUgPSBtYXRyaXgubWFwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlcXVp
cmVkVGV4dHVyZVNpemUpKS5zaXplKCk7Ci0gICAgICAgICAgICBib3VuZHNSZWN0ID0gbWF0cml4
Lm1hcFJlY3QodW50cmFuc2Zvcm1lZEJvdW5kc1JlY3QpOwotICAgICAgICAgICAgLy8gVGhlIHZp
c2libGUgcmVjdCBpcyB1c2luZyB1bnNjYWxlZCBjb29yZGluYXRlcyBpbiBtb3N0IGNhc2VzLgot
ICAgICAgICAgICAgaWYgKG1fYmFja1Zpc2liaWxpdHkgfHwgbV9sYXllci0+aXNNYXNrKCkgfHwg
bV9sYXllci0+ZmlsdGVycygpLnNpemUoKSkKLSAgICAgICAgICAgICAgICB2aXNpYmxlUmVjdCA9
IG1hdHJpeC5tYXBSZWN0KHZpc2libGVSZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChy
ZXF1aXJlZFRleHR1cmVTaXplICE9IG1fcGVuZGluZ1RleHR1cmVTaXplKQotICAgICAgICAgICAg
ZGlydHlSZWN0ID0gYm91bmRzUmVjdDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBD
bGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxheWVyIHRvIGF2b2lkIGRyYXdp
bmcKLSAgICAgICAgICAgIC8vIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgYmFja2luZyB0ZXh0
dXJlLgotICAgICAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChib3VuZHNSZWN0KTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAobV9sYXllci0+Y29udGVudHMoKSkgewotICAgICAgICAvLyBM
YXllciBpcyBhIGNvbnRhaW5lciwgYW5kIGl0IGNvbnRhaW5zIGFuIEltYWdlLgotICAgICAgICBy
ZXF1aXJlZFRleHR1cmVTaXplID0gbV9sYXllci0+Y29udGVudHMoKS0+c2l6ZSgpOwotICAgICAg
ICBkaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlcXVpcmVkVGV4dHVyZVNp
emUpOwotICAgIH0KLQotICAgIGlmIChtX3BlbmRpbmdUZXh0dXJlU2l6ZSAhPSByZXF1aXJlZFRl
eHR1cmVTaXplKSB7Ci0gICAgICAgIG1fcGVuZGluZ1RleHR1cmVTaXplID0gcmVxdWlyZWRUZXh0
dXJlU2l6ZTsKLSAgICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpyZXNpemVDb250ZW50
cyhtX3BlbmRpbmdUZXh0dXJlU2l6ZSkpOwotICAgIH0KLQotICAgIGJvb2wgY29udGVudHNEaXJ0
eSA9IG1fY29udGVudHNEaXJ0eTsKLSAgICBpZiAobV9jb250ZW50c0RpcnR5KSB7Ci0gICAgICAg
IC8vIElmIHdlJ3JlIG5vdCBnb2luZyB0byByZS1yZW5kZXIgYWxsIHRoZSBjb3ZlcmVkIHRpbGVz
LCBtYXJrIHRob3NlIG5vdCBjb3ZlcmVkIGFzIGRpcnR5LgotICAgICAgICBpZiAoIXZpc2libGVS
ZWN0LmNvbnRhaW5zKGRpcnR5UmVjdCkpCi0gICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1
cmVKb2I6OmRpcnR5Q29udGVudHMoZGlydHlSZWN0KSk7Ci0gICAgICAgIG1fY29udGVudHNEaXJ0
eSA9IGZhbHNlOwotICAgICAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOwotICAgIH0KLQot
ICAgIC8vIElmIHdlIG5lZWQgZGlzcGxheSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIHRvIGJl
IGRpc3BsYXllZCwgZHVlIHRvIHRleHR1cmUgc2l6ZSBiZWNvbWluZyAwIHggMCwKLSAgICAvLyBv
ciBpZiB3ZSdyZSByZS1yZW5kZXJpbmcgdGhlIHdob2xlIHRoaW5nIGFueXdheSwgY2xlYXIgb2xk
IHRleHR1cmUgam9icy4KLSAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZS5pc0VtcHR5KCkgfHwg
ZGlydHlSZWN0ID09IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVxdWlyZWRUZXh0dXJlU2l6
ZSkpCi0gICAgICAgIGNsZWFyVGV4dHVyZUpvYnMoKTsKLQotICAgIGlmICh2aXNpYmxlUmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hTZXQ8VGlsZUluZGV4PiByZW5k
ZXJKb2JzOwotICAgIFRpbGVJbmRleCBmaXJzdDsKLSAgICBUaWxlSW5kZXggbGFzdDsKLSAgICBp
ZiAobV9sYXllci0+Y29udGVudHNSZXNvbHV0aW9uSW5kZXBlbmRlbnQoKSkgewotICAgICAgICAv
LyBSZXNvbHV0aW9uIGluZGVwZW5kZW50IGxheWVycyBoYXZlIGFsbCB0aGUgbmVlZGVkIGRhdGEg
aW4gdGhlIGZpcnN0IHRpbGUuCi0gICAgICAgIGZpcnN0ID0gbGFzdCA9IFRpbGVJbmRleCgwLCAw
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmaXJzdCA9IGluZGV4T2ZUaWxlKGZsb29yZWRJbnRQ
b2ludCh2aXNpYmxlUmVjdC5taW5YTWluWUNvcm5lcigpKSk7Ci0gICAgICAgIGxhc3QgPSBpbmRl
eE9mVGlsZShjZWlsZWRJbnRQb2ludCh2aXNpYmxlUmVjdC5tYXhYTWF4WUNvcm5lcigpKSArIElu
dFBvaW50KC0xLCAtMSkpOyAvLyBUaGUgb3JpZ2luIHNob3VsZCBiZSB0aGUgdG9wIGxlZnQgb2Yg
dGhlIGJvdHRvbSByaWdodCBwaXhlbC4KLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gZmly
c3QuaSgpOyBpIDw9IGxhc3QuaSgpOyArK2kpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
Zmlyc3QuaigpOyBqIDw9IGxhc3QuaigpOyArK2opIHsKLSAgICAgICAgICAgIFRpbGVJbmRleCBp
bmRleChpLCBqKTsKLSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZShp
bmRleCwgcmVxdWlyZWRUZXh0dXJlU2l6ZSk7Ci0gICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAobV9i
YWNrVmlzaWJpbGl0eSAmJiBtX2JhY2tWaXNpYmlsaXR5LT50aWxlTmVlZHNSZW5kZXIoaW5kZXgp
KSB7Ci0jaWYgREVCVUdfTEFZRVJfVklTSUJJTElUWQotICAgICAgICAgICAgICAgIHByaW50Zigi
VGlsZSBhdCAoJWQsICVkKSBuZWVkcyByZW5kZXJcbiIsIGluZGV4LmkoKSwgaW5kZXguaigpKTsK
LSNlbmRpZgotICAgICAgICAgICAgICAgIHJlbmRlckpvYnMuYWRkKGluZGV4KTsKLSAgICAgICAg
ICAgICAgICBtX2JhY2tWaXNpYmlsaXR5LT5tYXJrVGlsZUFzUmVuZGVyZWQoaW5kZXgpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50c0RpcnR5ICYmIGRpcnR5UmVjdC5pbnRlcnNlY3Rz
KHRpbGVSZWN0KSkKLSAgICAgICAgICAgICAgICByZW5kZXJKb2JzLmFkZChpbmRleCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVuZGVySm9icy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChJbWFnZSogaW1hZ2UgPSBtX2xheWVyLT5jb250ZW50cygpKSB7Ci0g
ICAgICAgIC8vIElmIHdlIG5lZWQgYmFja2luZywgd2UgaGF2ZSBubyBjaG9pY2UgYnV0IHRvIGVu
Zm9yY2UgdGhlIHRpbGUgc2l6ZSwgd2hpY2ggY291bGQgY2F1c2UgY2xpcHBpbmcuCi0gICAgICAg
IC8vIE90aGVyd2lzZSwgZG9uJ3QgY2xpcCAtIGluY2x1ZGUgdGhlIHdob2xlIGltYWdlLgotICAg
ICAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBtX25lZWRzQmFja2luZyA/IHRpbGVTaXplKCkgOiBp
bWFnZS0+c2l6ZSgpOwotICAgICAgICBpZiAoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpCdWZmZXIqIGJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlcihidWZmZXJTaXplKSkgewotICAgICAgICAg
ICAgSW50UmVjdCBjb250ZW50c1JlY3QoSW50UG9pbnQ6Onplcm8oKSwgaW1hZ2UtPnNpemUoKSk7
Ci0gICAgICAgICAgICBtX2xheWVyLT5wYWludENvbnRlbnRzKGJ1ZmZlciwgY29udGVudHNSZWN0
LCBzY2FsZSk7Ci0gICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVKb2I6OnNldENvbnRl
bnRzKGJ1ZmZlciwgY29udGVudHNSZWN0KSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1f
bGF5ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAgIGZvciAoSGFzaFNldDxUaWxlSW5kZXg+
OjppdGVyYXRvciBpdCA9IHJlbmRlckpvYnMuYmVnaW4oKTsgaXQgIT0gcmVuZGVySm9icy5lbmQo
KTsgKytpdCkgewotICAgICAgICAgICAgaWYgKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6QnVmZmVyKiBidWZmZXIgPSBjcmVhdGVCdWZmZXIodGlsZVNpemUoKSkpIHsKLSAgICAgICAg
ICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGUoKml0LCByZXF1aXJlZFRleHR1
cmVTaXplKTsKLSAgICAgICAgICAgICAgICBtX2xheWVyLT5wYWludENvbnRlbnRzKGJ1ZmZlciwg
dGlsZVJlY3QsIHNjYWxlKTsKLSAgICAgICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVK
b2I6OnVwZGF0ZUNvbnRlbnRzKGJ1ZmZlciwgdGlsZVJlY3QpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZm
ZXIqIExheWVyVGlsZXI6OmNyZWF0ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQotewotICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyVHlwZSBidWZmZXJUeXBlID0g
bV9uZWVkc0JhY2tpbmcgPyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkFsd2F5c0Jh
Y2tlZCA6IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QmFja2VkV2hlbk5lY2Vzc2Fy
eTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVyID0g
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpjcmVhdGVCdWZmZXIoc2l6ZSwgYnVmZmVy
VHlwZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotdm9pZCBMYXllclRpbGVyOjphZGRUZXh0
dXJlSm9iKGNvbnN0IFRleHR1cmVKb2ImIGpvYikKLXsKLSAgICBtX3BlbmRpbmdUZXh0dXJlSm9i
cy5hcHBlbmQoam9iKTsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpjbGVhclRleHR1cmVKb2JzKCkK
LXsKLSAgICAvLyBDbGVhciBhbnkgY29tbWl0dGVkIHRleHR1cmUgam9icyBvbiBuZXh0IGludm9j
YXRpb24gb2YgTGF5ZXJUaWxlcjo6Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCkuCi0gICAg
bV9jbGVhclRleHR1cmVKb2JzID0gdHJ1ZTsKLQotICAgIHJlbW92ZVVwZGF0ZUNvbnRlbnRzSm9i
cyhtX3BlbmRpbmdUZXh0dXJlSm9icyk7Ci19Ci0KLXN0YXRpYyBzaXplX3QgYmFja2luZ1NpemVJ
bkJ5dGVzID0gMDsKLQotdm9pZCBMYXllclRpbGVyOjp3aWxsQ29tbWl0KCkKLXsKLSAgICBiYWNr
aW5nU2l6ZUluQnl0ZXMgPSAwOwotfQotCi12b2lkIExheWVyVGlsZXI6OmNvbW1pdFBlbmRpbmdU
ZXh0dXJlVXBsb2FkcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKLXsKLSAgICBpZiAobV9jbGVh
clRleHR1cmVKb2JzKSB7Ci0gICAgICAgIHJlbW92ZVVwZGF0ZUNvbnRlbnRzSm9icyhtX3RleHR1
cmVKb2JzKTsKLSAgICAgICAgbV9jbGVhclRleHR1cmVKb2JzID0gZmFsc2U7Ci0gICAgfQotCi0g
ICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiByZW5kZXJpbmcgbW9yZSB0aGFuIHRoZSBjYWNoZSBj
YXBhY2l0eSBkdXJpbmcgb25lIGZyYW1lLgotICAgIGNvbnN0IHNpemVfdCBtYXhCYWNraW5nUGVy
RnJhbWUgPSB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT5tZW1vcnlMaW1pdCgpOwot
Ci0gICAgZm9yIChWZWN0b3I8VGV4dHVyZUpvYj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVGV4
dHVyZUpvYnMuYmVnaW4oKTsgaXQgIT0gbV9wZW5kaW5nVGV4dHVyZUpvYnMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgVGV4dHVyZUpvYiYgdGV4dHVyZUpvYiA9ICppdDsKLQotICAgICAgICAvLyBV
cGRhdGUgYmFja2luZyBzdXJmYWNlIGZvciBiYWNrZWQgdGlsZXMgbm93LCB0byBhdm9pZCBkcm9w
cGluZyBmcmFtZXMgZHVyaW5nIGFuaW1hdGlvbi4KLSAgICAgICAgaWYgKHRleHR1cmVKb2IubV9j
b250ZW50cyAmJiBiYWNraW5nU2l6ZUluQnl0ZXMgPCBtYXhCYWNraW5nUGVyRnJhbWUpIHsKLSAg
ICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6dXBkYXRlQnVmZmVyQmFj
a2luZ1N1cmZhY2UodGV4dHVyZUpvYi5tX2NvbnRlbnRzKTsKLSAgICAgICAgICAgIGJhY2tpbmdT
aXplSW5CeXRlcyArPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmJ1ZmZlclNpemVJ
bkJ5dGVzKHRleHR1cmVKb2IubV9jb250ZW50cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3Rl
eHR1cmVKb2JzLmFwcGVuZCh0ZXh0dXJlSm9iKTsKLSAgICB9Ci0gICAgbV9wZW5kaW5nVGV4dHVy
ZUpvYnMuY2xlYXIoKTsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpkaXNjYXJkRnJvbnRWaXNpYmls
aXR5KCkKLXsKLSAgICBkZWxldGUgbV9mcm9udFZpc2liaWxpdHk7Ci0gICAgbV9mcm9udFZpc2li
aWxpdHkgPSAwOwotfQotCi1MYXllclZpc2liaWxpdHkqIExheWVyVGlsZXI6OnN3YXBGcm9udFZp
c2liaWxpdHkoTGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmlsaXR5KQotewotICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PExheWVyVmlzaWJpbGl0eSo+KF9zbXBfeGNoZyhyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkKj4oJm1fZnJvbnRWaXNpYmlsaXR5KSwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4odmlzaWJpbGl0eSkpKTsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpzZXRGcm9udFZpc2liaWxp
dHkoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxl
c05lZWRpbmdSZW5kZXIpCi17Ci0gICAgTGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmlsaXR5ID0gc19z
cGFyZVZpc2liaWxpdHk7Ci0gICAgaWYgKHZpc2liaWxpdHkpIHsKLSAgICAgICAgdmlzaWJpbGl0
eS0+c2V0VmlzaWJsZVJlY3QodmlzaWJsZVJlY3QpOwotICAgICAgICB2aXNpYmlsaXR5LT5zd2Fw
VGlsZXNOZWVkaW5nUmVuZGVyKHRpbGVzTmVlZGluZ1JlbmRlcik7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHZpc2liaWxpdHkgPSBuZXcgTGF5ZXJWaXNpYmlsaXR5KHZpc2libGVSZWN0LCB0aWxlc05l
ZWRpbmdSZW5kZXIpOwotICAgIHNfc3BhcmVWaXNpYmlsaXR5ID0gc3dhcEZyb250VmlzaWJpbGl0
eSh2aXNpYmlsaXR5KTsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFu
Z2VkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpCi17Ci0gICAgLy8gRm9y
IHZpc2libGUgbGF5ZXJzLCB3ZSBoYW5kbGUgdGhlIHRpbGUtbGV2ZWwgdmlzaWJpbGl0eQotICAg
IC8vIGluIHRoZSBkcmF3IGxvb3AsIHNlZSBMYXllclRpbGVyOjpkcmF3VGV4dHVyZXMoKS4KLSAg
ICBpZiAodmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSGFzaFNldDxUaWxlSW5kZXg+
IGVtcHR5VGlsZVNldDsKLSAgICBzZXRGcm9udFZpc2liaWxpdHkoRmxvYXRSZWN0KCksIGVtcHR5
VGlsZVNldCk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChM
YXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllcikKLXsKLSAgICBUaWxlSm9ic01hcCB0aWxlSm9i
c01hcDsKLSAgICBEZXF1ZTxUZXh0dXJlSm9iPjo6Y29uc3RfaXRlcmF0b3IgdGV4dHVyZUpvYkl0
ZXJFbmQgPSBtX3RleHR1cmVKb2JzLmVuZCgpOwotICAgIGZvciAoRGVxdWU8VGV4dHVyZUpvYj46
OmNvbnN0X2l0ZXJhdG9yIHRleHR1cmVKb2JJdGVyID0gbV90ZXh0dXJlSm9icy5iZWdpbigpOyB0
ZXh0dXJlSm9iSXRlciAhPSB0ZXh0dXJlSm9iSXRlckVuZDsgKyt0ZXh0dXJlSm9iSXRlcikKLSAg
ICAgICAgcHJvY2Vzc1RleHR1cmVKb2IoKnRleHR1cmVKb2JJdGVyLCB0aWxlSm9ic01hcCk7Ci0K
LSAgICBUaWxlSm9ic01hcDo6Y29uc3RfaXRlcmF0b3IgdGlsZUpvYnNJdGVyRW5kID0gdGlsZUpv
YnNNYXAuZW5kKCk7Ci0gICAgZm9yIChUaWxlSm9ic01hcDo6Y29uc3RfaXRlcmF0b3IgdGlsZUpv
YnNJdGVyID0gdGlsZUpvYnNNYXAuYmVnaW4oKTsgdGlsZUpvYnNJdGVyICE9IHRpbGVKb2JzSXRl
ckVuZDsgKyt0aWxlSm9ic0l0ZXIpIHsKLSAgICAgICAgSW50UG9pbnQgb3JpZ2luID0gb3JpZ2lu
T2ZUaWxlKHRpbGVKb2JzSXRlci0+a2V5KTsKLQotICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBt
X3RpbGVzLmdldCh0aWxlSm9ic0l0ZXItPmtleSk7Ci0gICAgICAgIGlmICghdGlsZSkgewotICAg
ICAgICAgICAgaWYgKG9yaWdpbi54KCkgPj0gbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkg
fHwgb3JpZ2luLnkoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHRpbGUgPSBuZXcgTGF5ZXJUaWxlKCk7
Ci0gICAgICAgICAgICBtX3RpbGVzLmFkZCh0aWxlSm9ic0l0ZXItPmtleSwgdGlsZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBwZXJmb3JtVGlsZUpvYihsYXllciwgdGlsZSwgKnRpbGVKb2JzSXRl
ci0+dmFsdWUpOwotICAgIH0KLQotICAgIG1fdGV4dHVyZUpvYnMuY2xlYXIoKTsKLX0KLQotdm9p
ZCBMYXllclRpbGVyOjpwcm9jZXNzVGV4dHVyZUpvYihjb25zdCBUZXh0dXJlSm9iJiBqb2IsIFRp
bGVKb2JzTWFwJiB0aWxlSm9ic01hcCkKLXsKLSAgICBpZiAoam9iLm1fdHlwZSA9PSBUZXh0dXJl
Sm9iOjpSZXNpemVDb250ZW50cykgewotICAgICAgICBJbnRTaXplIHBlbmRpbmdUZXh0dXJlU2l6
ZSA9IGpvYi5tX2RpcnR5UmVjdC5zaXplKCk7Ci0gICAgICAgIGlmIChwZW5kaW5nVGV4dHVyZVNp
emUud2lkdGgoKSA8IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpIHx8IHBlbmRpbmdUZXh0
dXJlU2l6ZS5oZWlnaHQoKSA8IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKLSAgICAg
ICAgICAgIHBydW5lVGV4dHVyZXMocGVuZGluZ1RleHR1cmVTaXplKTsKLQotICAgICAgICBtX3Jl
cXVpcmVkVGV4dHVyZVNpemUgPSBwZW5kaW5nVGV4dHVyZVNpemU7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9IGVsc2UgaWYgKGpvYi5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlydHlDb250ZW50cykg
ewotICAgICAgICBUaWxlSW5kZXggZmlyc3QgPSBpbmRleE9mVGlsZShqb2IubV9kaXJ0eVJlY3Qu
bWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIFRpbGVJbmRleCBsYXN0ID0gaW5kZXhPZlRpbGUo
am9iLm1fZGlydHlSZWN0Lm1heFhNYXhZQ29ybmVyKCkgKyBJbnRQb2ludCgtMSwgLTEpKTsgLy8g
VGhlIG9yaWdpbiBzaG91bGQgYmUgdGhlIHRvcCBsZWZ0IG9mIHRoZSBib3R0b20gcmlnaHQgcGl4
ZWwuCi0gICAgICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7
IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFRpbGVJbmRleCBpbmRl
eCA9ICgqaXQpLmtleTsKLSAgICAgICAgICAgIGlmIChpbmRleC5pKCkgPj0gZmlyc3QuaSgpICYm
IGluZGV4LmooKSA+PSBmaXJzdC5qKCkgJiYgaW5kZXguaSgpIDw9IGxhc3QuaSgpICYmIGluZGV4
LmooKSA8PSBsYXN0LmooKSkKLSAgICAgICAgICAgICAgICAoKml0KS52YWx1ZS0+c2V0Q29udGVu
dHNEaXJ0eSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRU
aWxlSm9iKGluZGV4T2ZUaWxlKGpvYi5tX2RpcnR5UmVjdC5taW5YTWluWUNvcm5lcigpKSwgam9i
LCB0aWxlSm9ic01hcCk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6YWRkVGlsZUpvYihjb25zdCBU
aWxlSW5kZXgmIGluZGV4LCBjb25zdCBUZXh0dXJlSm9iJiBqb2IsIFRpbGVKb2JzTWFwJiB0aWxl
Sm9ic01hcCkKLXsKLSAgICAvLyBIYXNoTWFwOjphZGQgYWx3YXlzIHJldHVybnMgYSB2YWxpZCBp
dGVyYXRvciBldmVuIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMuCi0gICAgVGlsZUpvYnNNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSB0aWxlSm9ic01hcC5hZGQoaW5kZXgsICZqb2IpOwotCi0gICAgLy8g
U3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBuZXcgam9iLgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3ZlcnJpZGUgdGhlIHByZXZpb3VzIGpvYi4K
LSAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSAmJiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LT5tX2NvbnRlbnRzKQotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRl
c3Ryb3lCdWZmZXIocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bV9jb250ZW50cyk7Ci0KLSAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gJmpvYjsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpwZXJm
b3JtVGlsZUpvYihMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgTGF5ZXJUaWxlKiB0aWxl
LCBjb25zdCBUZXh0dXJlSm9iJiBqb2IpCi17Ci0gICAgc3dpdGNoIChqb2IubV90eXBlKSB7Ci0g
ICAgY2FzZSBUZXh0dXJlSm9iOjpTZXRDb250ZW50czoKLSAgICAgICAgdGlsZS0+c2V0Q29udGVu
dHMoam9iLm1fY29udGVudHMpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUZXh0dXJlSm9i
OjpVcGRhdGVDb250ZW50czoKLSAgICAgICAgdGlsZS0+dXBkYXRlQ29udGVudHMoam9iLm1fY29u
dGVudHMsIGxheWVyLT5jb250ZW50c1NjYWxlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBUZXh0dXJlSm9iOjpVbmtub3duOgotICAgIGNhc2UgVGV4dHVyZUpvYjo6UmVzaXplQ29udGVu
dHM6Ci0gICAgY2FzZSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzOgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLX0KLQotYm9vbCBMYXllclRpbGVyOjpkcmF3VGlsZShMYXllckNvbXBvc2l0aW5n
VGhyZWFkKiBsYXllciwgTGF5ZXJUaWxlKiB0aWxlLCBjb25zdCBUaWxlSW5kZXgmIGluZGV4LCBk
b3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdENs
aXApCi17Ci0gICAgdW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGxheWVyLT5kcmF3T3BhY2l0eSgpICogMjU1KTsKLSAgICBib29sIHNob3VsZERy
YXdUaWxlID0gZHN0LmludGVyc2VjdHMoZHN0Q2xpcCkgJiYgZ2xvYmFsQWxwaGE7Ci0KLSAgICAv
LyBFdmVuIGlmIHRoZSB0aWxlIGhhcyB3cm9uZyBzY2FsZSwgaXQgY2FuIGJlIHVzZWQgYXMgYSAi
cHJldmlldyIgaWYgdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVybGFwIHdpdGggb3RoZXIgdGlsZXMu
Ci0gICAgYm9vbCB0aWxlSGFzQ29ycmVjdFNjYWxlID0gdGlsZS0+Y29udGVudHNTY2FsZSgpID09
IDAuMCB8fCB0aWxlLT5jb250ZW50c1NjYWxlKCkgPT0gbGF5ZXItPmNvbnRlbnRzU2NhbGUoKTsK
LSAgICBpZiAoIXRpbGVIYXNDb3JyZWN0U2NhbGUpCi0gICAgICAgIHNob3VsZERyYXdUaWxlID0g
c2hvdWxkRHJhd1RpbGUgJiYgKG1fdGlsZXMuc2l6ZSgpID09IDEgJiYgIWluZGV4LmkoKSAmJiAh
aW5kZXguaigpKTsKLQotICAgIGlmICh0aWxlLT5oYXNUZXh0dXJlKCkpIHsKLSAgICAgICAgTGF5
ZXJUZXh0dXJlKiB0ZXh0dXJlID0gdGlsZS0+dGV4dHVyZSgpOwotICAgICAgICB0ZXh0dXJlQ2Fj
aGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlQWNjZXNzZWQodGV4dHVyZSk7Ci0KLSAgICAg
ICAgaWYgKHNob3VsZERyYXdUaWxlKSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBkcmF3VHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIGRy
YXdUcmFuc2Zvcm0udHJhbnNsYXRlKGRzdC54KCksIGRzdC55KCkpOwotICAgICAgICAgICAgaWYg
KGxheWVyLT5jb250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCgpKQotICAgICAgICAgICAgICAg
IGRyYXdUcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGRzdC53aWR0aCgpIC8gbV9yZXF1aXJlZFRl
eHR1cmVTaXplLndpZHRoKCksIGRzdC5oZWlnaHQoKSAvIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0aWxlLT5jb250ZW50c1NjYWxlKCkpCi0g
ICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9ybS5zY2FsZSgxIC8gdGlsZS0+Y29udGVudHNTY2Fs
ZSgpKTsKLSAgICAgICAgICAgIGlmIChsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKLSAg
ICAgICAgICAgICAgICBkcmF3VHJhbnNmb3JtLnNjYWxlKDEgLyBzY2FsZSk7Ci0gICAgICAgICAg
ICBibGl0VG9CdWZmZXIoMCwgdGV4dHVyZS0+YnVmZmVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Qmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4Jj4oZHJhd1RyYW5zZm9ybSks
Ci0gICAgICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpTb3VyY2VP
dmVyLCBnbG9iYWxBbHBoYSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gZmFs
c2UgaWYgdGhlIHRpbGUgbmVlZHMgdG8gYmUgKHJlLSlyZW5kZXJlZC4KLSAgICByZXR1cm4gIXRp
bGUtPmlzRGlydHkoKSAmJiB0aWxlSGFzQ29ycmVjdFNjYWxlOwotfQotCi1zdGF0aWMgRmxvYXRS
ZWN0IGluZmxhdGVWaWV3cG9ydChjb25zdCBGbG9hdFJlY3QmIHZpZXdwb3J0KQotewotICAgIC8v
IEV2ZXJ5dGhpbmcgaXMgZXhwcmVzc2VkIGluIG5vcm1hbGl6ZWQgZGV2aWNlIGNvb3JkaW5hdGVz
LgotICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemUodmlld3BvcnQuc2l6ZSgpKTsKLSAgICB2aWV3
cG9ydFNpemUuc2NhbGUodmlld3BvcnRJbmZsYXRpb24ud2lkdGgoKSwgdmlld3BvcnRJbmZsYXRp
b24uaGVpZ2h0KCkpOwotCi0gICAgRmxvYXRTaXplIHZpZXdwb3J0T2Zmc2V0KHZpZXdwb3J0LnNp
emUoKSk7Ci0gICAgdmlld3BvcnRPZmZzZXQuc2NhbGUodmlld3BvcnRJbmZsYXRpb24ud2lkdGgo
KSAtIDEsIHZpZXdwb3J0SW5mbGF0aW9uLmhlaWdodCgpIC0gMSk7Ci0gICAgdmlld3BvcnRPZmZz
ZXQuc2NhbGUoMC41KTsKLQotICAgIHJldHVybiBGbG9hdFJlY3Qodmlld3BvcnQubG9jYXRpb24o
KSAtIHZpZXdwb3J0T2Zmc2V0LCB2aWV3cG9ydFNpemUpOwotfQotCi12b2lkIExheWVyVGlsZXI6
OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgY29uc3QgR0xFUzJQ
cm9ncmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQotewotICAg
IEZsb2F0UmVjdCBib3VuZHNSZWN0KC1sYXllci0+b3JpZ2luKCksIGxheWVyLT5ib3VuZHMoKSk7
Ci0gICAgaWYgKGxheWVyLT5zaXplSXNTY2FsZUludmFyaWFudCgpKQotICAgICAgICBib3VuZHNS
ZWN0LnNjYWxlKDEgLyBzY2FsZSk7Ci0KLSAgICBGbG9hdFJlY3QgaW5mbGF0ZWRWaWV3cG9ydCA9
IGluZmxhdGVWaWV3cG9ydChjbGlwUmVjdCk7Ci0KLSAgICAvLyBVbnByb2plY3RpbmcgcG9pbnRz
IG91dHNpZGUgdGhlIHRyYW5zZm9ybWVkIGJvdW5kcyBnaXZlcyBwb29yIG51bWVyaWNhbCBzdGFi
aWxpdHkgaWYgdGhlcmUncyBhIHBlcnNwZWN0aXZlIGVmZmVjdCwKLSAgICAvLyBzbyB1bnByb2pl
Y3QgdGhlIGNsaXBwZWQgdHJhbnNmb3JtZWQgYm91bmRzIGluc3RlYWQuCi0gICAgVmVjdG9yPEZs
b2F0UG9pbnQsIDQ+IGNsaXBQb2x5Z29uID0gaW50ZXJzZWN0UG9seWdvbldpdGhSZWN0KGxheWVy
LT50cmFuc2Zvcm1lZEJvdW5kcygpLCBjbGlwUmVjdCk7Ci0gICAgaWYgKGNsaXBQb2x5Z29uLmlz
RW1wdHkoKSkgewotICAgICAgICAvLyBUaGUgTGF5ZXJSZW5kZXJlciBmaWd1cmVzIHdlJ3JlIHZp
c2libGUsIG9yIGl0IHdvdWxkbid0IGhhdmUgY2FsbGVkIGludG8gdGhpcyBtZXRob2QsIGJ1dCB3
ZSBiZWcgdG8gZGlmZmVyLgotICAgICAgICBsYXllci0+c2V0VmlzaWJsZShmYWxzZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZExheWVyQ2xpcFJl
Y3QgPSBGbG9hdFJlY3QoMCwgMCwgMSwgMSk7Ci0gICAgRmxvYXRSZWN0IG5vcm1hbGl6ZWRMYXll
clZpc2libGVSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIDEsIDEpOwotCi0gICAgaWYgKGNsaXBQb2x5
Z29uICE9IGxheWVyLT50cmFuc2Zvcm1lZEJvdW5kcygpKSB7Ci0gICAgICAgIFZlY3RvcjxGbG9h
dFBvaW50LCA0PiBub3JtYWxpemVkTGF5ZXJDbGlwUG9seWdvbiA9IHVucHJvamVjdChsYXllciwg
Y2xpcFBvbHlnb24pOwotICAgICAgICBub3JtYWxpemVkTGF5ZXJDbGlwUmVjdC5pbnRlcnNlY3Qo
Ym91bmRpbmdCb3gobm9ybWFsaXplZExheWVyQ2xpcFBvbHlnb24pKTsKLQotICAgICAgICBWZWN0
b3I8RmxvYXRQb2ludCwgND4gdmlzaWJsZVBvbHlnb24gPSBpbnRlcnNlY3RQb2x5Z29uV2l0aFJl
Y3QobGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCksIGluZmxhdGVkVmlld3BvcnQpOwotICAgICAg
ICBWZWN0b3I8RmxvYXRQb2ludCwgND4gbm9ybWFsaXplZExheWVyVmlzaWJsZVBvbHlnb24gPSB1
bnByb2plY3QobGF5ZXIsIHZpc2libGVQb2x5Z29uKTsKLSAgICAgICAgbm9ybWFsaXplZExheWVy
VmlzaWJsZVJlY3QuaW50ZXJzZWN0KGJvdW5kaW5nQm94KG5vcm1hbGl6ZWRMYXllclZpc2libGVQ
b2x5Z29uKSk7Ci0gICAgfQotCi0gICAgRmxvYXRTaXplIHRpbGVTaXplOwotICAgIEZsb2F0UmVj
dCBkc3RDbGlwOwotICAgIFRpbGVJbmRleCBmaXJzdDsKLSAgICBUaWxlSW5kZXggbGFzdDsKLSAg
ICBpZiAobGF5ZXItPmNvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KCkpIHsKLSAgICAgICAg
Ly8gUmVzb2x1dGlvbiBpbmRlcGVuZGVudCBsYXllcnMgaGF2ZSBhbGwgdGhlIG5lZWRlZCBkYXRh
IGluIHRoZSBmaXJzdCB0aWxlCi0gICAgICAgIHRpbGVTaXplID0gYm91bmRzUmVjdC5zaXplKCk7
Ci0gICAgICAgIGRzdENsaXAgPSBib3VuZHNSZWN0OwotICAgICAgICBmaXJzdCA9IGxhc3QgPSBU
aWxlSW5kZXgoMCwgMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRmxvYXRSZWN0IGRlc3RpbmF0
aW9uUmVjdCA9IG5vcm1hbGl6ZWRMYXllclZpc2libGVSZWN0OwotICAgICAgICBkZXN0aW5hdGlv
blJlY3Quc2NhbGUobV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCksIG1fcmVxdWlyZWRUZXh0
dXJlU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgdGlsZVNpemUgPSBtX3RpbGVTaXplOwotICAg
ICAgICB0aWxlU2l6ZS5zY2FsZShib3VuZHNSZWN0LndpZHRoKCkgLyBtX3JlcXVpcmVkVGV4dHVy
ZVNpemUud2lkdGgoKSwgYm91bmRzUmVjdC5oZWlnaHQoKSAvIG1fcmVxdWlyZWRUZXh0dXJlU2l6
ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgZHN0Q2xpcCA9IG5vcm1hbGl6ZWRMYXllckNsaXBSZWN0
OwotICAgICAgICBkc3RDbGlwLnNjYWxlKGJvdW5kc1JlY3Qud2lkdGgoKSwgYm91bmRzUmVjdC5o
ZWlnaHQoKSk7Ci0gICAgICAgIGRzdENsaXAubW92ZUJ5KGJvdW5kc1JlY3QubG9jYXRpb24oKSk7
Ci0KLSAgICAgICAgLy8gVGhlIGxheWVyIGNvbnRhaW5zIHBpeGVscyB3aXRoIGNvb3JkaW5hdGVz
ICgwIC4uLiBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSAtIDEsIDAgLi4uIG1fcmVxdWly
ZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSAtIDEpLAotICAgICAgICAvLyBzbyBjbGFtcCB0aGUgZGVz
dGluYXRpb25SZWN0LXRvLXRpbGVpbmRleCBjYWxjdWxhdGlvbiBhcHByb3ByaWF0ZWx5LgotICAg
ICAgICBmaXJzdCA9IGluZGV4T2ZUaWxlKGZsb29yZWRJbnRQb2ludChkZXN0aW5hdGlvblJlY3Qu
bWluWE1pbllDb3JuZXIoKSkpOwotICAgICAgICBsYXN0ID0gaW5kZXhPZlRpbGUoY2VpbGVkSW50
UG9pbnQoZGVzdGluYXRpb25SZWN0Lm1heFhNYXhZQ29ybmVyKCkpLnNocnVua1RvKEludFBvaW50
KC0xLCAtMSkgKyBtX3JlcXVpcmVkVGV4dHVyZVNpemUpKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0
PFRpbGVJbmRleD4gdGlsZXNOZWVkaW5nUmVuZGVyOwotICAgIGZvciAodW5zaWduZWQgaSA9IGZp
cnN0LmkoKTsgaSA8PSBsYXN0LmkoKTsgKytpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9
IGZpcnN0LmooKTsgaiA8PSBsYXN0LmooKTsgKytqKSB7Ci0gICAgICAgICAgICBUaWxlSW5kZXgg
aW5kZXgoaSwgaik7Ci0gICAgICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldChp
bmRleCk7Ci0gICAgICAgICAgICBpZiAoIXRpbGUpIHsKLSAgICAgICAgICAgICAgICB0aWxlID0g
bmV3IExheWVyVGlsZSgpOwotICAgICAgICAgICAgICAgIG1fdGlsZXMuYWRkKGluZGV4LCB0aWxl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRpbGUtPnNldFZpc2libGUodHJ1ZSk7Ci0g
ICAgICAgICAgICBGbG9hdFBvaW50IHRpbGVPcmlnaW4oaW5kZXguaSgpICogdGlsZVNpemUud2lk
dGgoKSwgaW5kZXguaigpICogdGlsZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAgRmxvYXRS
ZWN0IGRzdCh0aWxlT3JpZ2luIC0gMC41ICogYm91bmRzUmVjdC5zaXplKCksIHRpbGVTaXplLnNo
cnVua1RvKGJvdW5kc1JlY3Quc2l6ZSgpIC0gdG9GbG9hdFNpemUodGlsZU9yaWdpbikpKTsKLSAg
ICAgICAgICAgIGlmICghZHJhd1RpbGUobGF5ZXIsIHRpbGUsIGluZGV4LCBzY2FsZSwgZHN0LCBk
c3RDbGlwKSkKLSAgICAgICAgICAgICAgICB0aWxlc05lZWRpbmdSZW5kZXIuYWRkKGluZGV4KTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Rp
bGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVGlsZUlu
ZGV4IGluZGV4ID0gKCppdCkua2V5OwotICAgICAgICBpZiAoaW5kZXguaSgpIDwgZmlyc3QuaSgp
IHx8IGluZGV4LmooKSA8IGZpcnN0LmooKSB8fCBpbmRleC5pKCkgPiBsYXN0LmkoKSB8fCBpbmRl
eC5qKCkgPiBsYXN0LmooKSkKLSAgICAgICAgICAgICgqaXQpLnZhbHVlLT5zZXRWaXNpYmxlKGZh
bHNlKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgdmlzaWJsZSByZWN0IHdpbGwgYmUgdXNlZCBvbiB0
aGUgV2ViS2l0IHRocmVhZCBhbmQgc2hvdWxkIHVzZSB0aGUgYm91bmRzIGV4cHJlc3NlZCBpbgot
ICAgIC8vIGRvY3VtZW50IGNvb3JkaW5hdGVzLCBub3QgY29ycmVjdGVkIGZvciBzY2FsZSBpbnZh
cmlhbmNlLiBTbyB1c2UgImxheWVyLT5ib3VuZHMoKSIgaW5zdGVhZAotICAgIC8vIG9mIHRoZSBs
b2NhbCB2YXJpYWJsZSAiYm91bmRzUmVjdC5zaXplKCkiLgotICAgIEZsb2F0UmVjdCBsYXllclZp
c2libGVSZWN0ID0gbm9ybWFsaXplZExheWVyVmlzaWJsZVJlY3Q7Ci0gICAgbGF5ZXJWaXNpYmxl
UmVjdC5zY2FsZShsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgbGF5ZXItPmJvdW5kcygpLmhlaWdo
dCgpKTsKLQotI2lmIERFQlVHX0xBWUVSX1ZJU0lCSUxJVFkKLSAgICBWZWN0b3I8RmxvYXRQb2lu
dD4gdiA9IHVucHJvamVjdChsYXllciwgY2xpcFBvbHlnb24pOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdi5zaXplKCk7ICsraSkgewotICAgICAgICB2W2ldLnNjYWxlKGxheWVyLT5ib3Vu
ZHMoKS53aWR0aCgpLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOwotICAgICAgICB2W2ldLm1v
dmUodG9GbG9hdFNpemUoYm91bmRzUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgICAgIHZbaV0gPSBs
YXllci0+ZHJhd1RyYW5zZm9ybSgpLm1hcFBvaW50KHZbaV0pOwotICAgIH0KLQotICAgIC8vIFVz
ZSBhIHRoaWNrIGJvcmRlciB0byBtYWtlIHRoZSBib3JkZXIgdmlzaWJsZSBldmVuIGZvciB0aGUg
cm9vdCBsYXllciAod2hpY2ggdHlwaWNhbGx5IGNvdmVycyB0aGUgc2NyZWVuIHdpZHRoIGFuZC9v
ciBoZWlnaHQpLgotICAgIHVuc2lnbmVkIHRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+
KHRoaXMpOwotICAgIGludCB0ID0gcmFuZF9yKCZ0bXApOwotICAgIGdsRGlzYWJsZShHTF9TQ0lT
U09SX1RFU1QpOwotICAgIC8vIFdoZW4gZGVidWdnaW5nLCBkcmF3IGZpcnN0IGxheWVyLT50cmFu
c2Zvcm1lZEJvdW5kcygpLCB0aGVuIGNsaXBQb2x5Z29uLCB0aGVuIHYKLSAgICAvLyB0byBmaW5k
IG91dCB3aGVyZSB0aGUgcHJvYmxlbSBpcyAoY2xpcHBpbmcgdG8gaW1hZ2UgcGxhbmUsIGNsaXBw
aW5nIHRvIHZpZXdwb3J0IG9yIHVucHJvamVjdGluZykuCi0gICAgbGF5ZXItPmxheWVyUmVuZGVy
ZXIoKS0+ZHJhd0RlYnVnQm9yZGVyKC8qIGxheWVyLT50cmFuc2Zvcm1lZEJvdW5kcygpICovIC8q
IGNsaXBQb2x5Z29uICovIHYsIG1ha2VSR0JBRnJvbUhTTEEoc3RhdGljX2Nhc3Q8ZG91YmxlPih0
KSAvIFJBTkRfTUFYLCAxLCAwLjUsIDEpLCA1KTsKLSAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RF
U1QpOwotI2VuZGlmCi0KLSAgICAvLyBJZiB3ZSBzY2hlZHVsZSBhIGNvbW1pdCwgdmlzaWJpbGl0
eSB3aWxsIGJlIHVwZGF0ZWQsIGFuZCBkaXNwbGF5IHdpbGwKLSAgICAvLyBoYXBwZW4gaWYgdGhl
cmUgYXJlIGFueSB2aXNpYmxlIGFuZCBkaXJ0eSB0ZXh0dXJlcy4KLSAgICBpZiAoIXRpbGVzTmVl
ZGluZ1JlbmRlci5pc0VtcHR5KCkpCi0gICAgICAgIGxheWVyLT5zZXROZWVkc0NvbW1pdCgpOwot
Ci0gICAgc2V0RnJvbnRWaXNpYmlsaXR5KGxheWVyVmlzaWJsZVJlY3QsIHRpbGVzTmVlZGluZ1Jl
bmRlcik7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6ZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCopCi17Ci0gICAgLy8gU2luY2UgdGV4dHVyZXMgYXJlIGRlbGV0ZWQgYnkgYSBz
eW5jaHJvbm91cyBtZXNzYWdlCi0gICAgLy8gZnJvbSBXZWJLaXQgdGhyZWFkIHRvIGNvbXBvc2l0
aW5nIHRocmVhZCwgd2UgZG9uJ3QgbmVlZAotICAgIC8vIGFueSBzeW5jaHJvbml6YXRpb24gbWVj
aGFuaXNtIGhlcmUsIGV2ZW4gdGhvdWdoIHdlIGFyZQotICAgIC8vIHRvdWNoaW5nIHNvbWUgV2Vi
S2l0IHRocmVhZCBzdGF0ZS4KLSAgICBpZiAobV90aWxlcy5zaXplKCkpIHsKLSAgICAgICAgZm9y
IChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxlcy5l
bmQoKTsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLnZhbHVlLT5kaXNjYXJkQ29udGVudHMoKTsK
LSAgICAgICAgbV90aWxlcy5jbGVhcigpOwotCi0gICAgICAgIG1fY29udGVudHNEaXJ0eSA9IHRy
dWU7Ci0gICAgfQotCi0gICAgLy8gRm9yIHZhcmlvdXMgcmVhc29ucywgZS5nLiBwYWdlIGNhY2hl
LCBzb21lb25lIG1heSB0cnkKLSAgICAvLyB0byByZW5kZXIgdXMgYWZ0ZXIgdGhlIHRleHR1cmVz
IHdlcmUgZGVsZXRlZC4KLSAgICBtX3BlbmRpbmdUZXh0dXJlU2l6ZSA9IEludFNpemUoKTsKLSAg
ICBtX3JlcXVpcmVkVGV4dHVyZVNpemUgPSBJbnRTaXplKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxl
cjo6cHJ1bmVUZXh0dXJlcyhjb25zdCBJbnRTaXplJiBwZW5kaW5nVGV4dHVyZVNpemUpCi17Ci0g
ICAgLy8gUHJ1bmUgdGlsZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KLSAgICBWZWN0b3I8
VGlsZUluZGV4PiB0aWxlc1RvRGVsZXRlOwotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
VGlsZUluZGV4IGluZGV4ID0gKCppdCkua2V5OwotCi0gICAgICAgIEludFBvaW50IG9yaWdpbiA9
IG9yaWdpbk9mVGlsZShpbmRleCk7Ci0gICAgICAgIGlmIChvcmlnaW4ueCgpID49IHBlbmRpbmdU
ZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG9yaWdpbi55KCkgPj0gcGVuZGluZ1RleHR1cmVTaXplLmhl
aWdodCgpKQotICAgICAgICAgICAgdGlsZXNUb0RlbGV0ZS5hcHBlbmQoaW5kZXgpOwotICAgIH0K
LQotICAgIGZvciAoVmVjdG9yPFRpbGVJbmRleD46Oml0ZXJhdG9yIGl0ID0gdGlsZXNUb0RlbGV0
ZS5iZWdpbigpOyBpdCAhPSB0aWxlc1RvRGVsZXRlLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIE93
blB0cjxMYXllclRpbGU+IHRpbGUgPSBhZG9wdFB0cihtX3RpbGVzLnRha2UoKml0KSk7Ci0gICAg
ICAgIHRpbGUtPmRpc2NhcmRDb250ZW50cygpOwotICAgIH0KLX0KLQotdm9pZCBMYXllclRpbGVy
Ojp1cGRhdGVUaWxlU2l6ZSgpCi17Ci0gICAgSW50U2l6ZSBzaXplID0gbV9sYXllci0+aXNNYXNr
KCkgPyBtX2xheWVyLT5ib3VuZHMoKSA6IGRlZmF1bHRUaWxlU2l6ZSgpOwotICAgIGNvbnN0IElu
dFNpemUgbWF4VGV4dHVyZVNpemUoMjA0OCwgMjA0OCk7Ci0gICAgc2l6ZSA9IHNpemUuc2hydW5r
VG8obWF4VGV4dHVyZVNpemUpOwotCi0gICAgaWYgKG1fdGlsZVNpemUgPT0gc2l6ZSB8fCBzaXpl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSW52YWxpZGF0ZSB0aGUgd2hv
bGUgbGF5ZXIgaWYgdGlsZSBzaXplIGNoYW5nZXMuCi0gICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0g
ICAgbV90aWxlU2l6ZSA9IHNpemU7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6c2V0TmVlZHNCYWNr
aW5nKGJvb2wgbmVlZHNCYWNraW5nKQotewotICAgIGlmIChtX25lZWRzQmFja2luZyA9PSBuZWVk
c0JhY2tpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmVlZHNCYWNraW5nID0gbmVlZHNC
YWNraW5nOwotICAgIHVwZGF0ZVRpbGVTaXplKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlcjo6ZGlz
Y2FyZEJhY2tWaXNpYmlsaXR5KCkKLXsKLSAgICBkZWxldGUgbV9iYWNrVmlzaWJpbGl0eTsKLSAg
ICBtX2JhY2tWaXNpYmlsaXR5ID0gMDsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpzY2hlZHVsZUNv
bW1pdCgpCi17Ci0gICAgQVNTRVJUKGlzV2ViS2l0VGhyZWFkKCkpOwotCi0gICAgaWYgKG1fbGF5
ZXIpCi0gICAgICAgIG1fbGF5ZXItPnNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLVRpbGVJbmRleCBM
YXllclRpbGVyOjppbmRleE9mVGlsZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgb3JpZ2luKQot
ewotICAgIGludCBvZmZzZXRYID0gb3JpZ2luLngoKTsKLSAgICBpbnQgb2Zmc2V0WSA9IG9yaWdp
bi55KCk7Ci0gICAgaWYgKG9mZnNldFgpCi0gICAgICAgIG9mZnNldFggPSBvZmZzZXRYIC8gdGls
ZVNpemUoKS53aWR0aCgpOwotICAgIGlmIChvZmZzZXRZKQotICAgICAgICBvZmZzZXRZID0gb2Zm
c2V0WSAvIHRpbGVTaXplKCkuaGVpZ2h0KCk7Ci0gICAgcmV0dXJuIFRpbGVJbmRleChvZmZzZXRY
LCBvZmZzZXRZKTsKLX0KLQotSW50UG9pbnQgTGF5ZXJUaWxlcjo6b3JpZ2luT2ZUaWxlKGNvbnN0
IFRpbGVJbmRleCYgaW5kZXgpCi17Ci0gICAgcmV0dXJuIEludFBvaW50KGluZGV4LmkoKSAqIHRp
bGVTaXplKCkud2lkdGgoKSwgaW5kZXguaigpICogdGlsZVNpemUoKS5oZWlnaHQoKSk7Ci19Ci0K
LUludFJlY3QgTGF5ZXJUaWxlcjo6cmVjdEZvclRpbGUoY29uc3QgVGlsZUluZGV4JiBpbmRleCwg
Y29uc3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIEludFBvaW50IG9yaWdpbiA9IG9yaWdpbk9m
VGlsZShpbmRleCk7Ci0gICAgSW50U2l6ZSBzaXplID0gdGlsZVNpemUoKS5zaHJ1bmtUbyhib3Vu
ZHMgLSB0b0ludFNpemUob3JpZ2luKSk7Ci0gICAgcmV0dXJuIEludFJlY3Qob3JpZ2luLCBzaXpl
KTsKLX0KLQotTGF5ZXJUZXh0dXJlKiBMYXllclRpbGVyOjpjb250ZW50c1RleHR1cmUoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopCi17Ci0gICAgQVNTRVJUKG1fdGlsZXMuc2l6ZSgpID09IDEpOwot
ICAgIGlmIChtX3RpbGVzLnNpemUoKSAhPSAxKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNv
bnN0IExheWVyVGlsZSogdGlsZSA9IG1fdGlsZXMuYmVnaW4oKS0+dmFsdWU7Ci0KLSAgICBBU1NF
UlQodGlsZS0+aGFzVGV4dHVyZSgpKTsKLSAgICBpZiAoIXRpbGUtPmhhc1RleHR1cmUoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gdGlsZS0+dGV4dHVyZSgpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmgJKHJldmlz
aW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJUaWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgTGF5
ZXJUaWxlcl9oCi0jZGVmaW5lIExheWVyVGlsZXJfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5o
IgotI2luY2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaCIKLSNpbmNsdWRlICJM
YXllclRpbGUuaCIKLSNpbmNsdWRlICJMYXllclRpbGVJbmRleC5oIgotCi0jaW5jbHVkZSA8Qmxh
Y2tCZXJyeVBsYXRmb3JtR0xFUzJQcm9ncmFtLmg+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ7Ci1jbGFzcyBMYXllclZpc2liaWxpdHk7Ci1j
bGFzcyBMYXllcldlYktpdFRocmVhZDsKLQotY2xhc3MgTGF5ZXJUaWxlciA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxMYXllclRpbGVyPiwgcHVibGljIExheWVyQ29tcG9zaXRpbmdUaHJl
YWRDbGllbnQgewotcHVibGljOgotICAgIFRpbGVJbmRleCBpbmRleE9mVGlsZShjb25zdCBJbnRQ
b2ludCYgb3JpZ2luKTsKLSAgICBJbnRQb2ludCBvcmlnaW5PZlRpbGUoY29uc3QgVGlsZUluZGV4
Jik7Ci0gICAgSW50UmVjdCByZWN0Rm9yVGlsZShjb25zdCBUaWxlSW5kZXgmLCBjb25zdCBJbnRT
aXplJiBib3VuZHMpOwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUaWxlcj4gY3JlYXRl
KExheWVyV2ViS2l0VGhyZWFkKiBsYXllcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTGF5ZXJUaWxlcihsYXllcikpOwotICAgIH0KLQotICAgIHZpcnR1YWwgfkxheWVyVGls
ZXIoKTsKLQotICAgIEludFNpemUgdGlsZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3RpbGVTaXpl
OyB9Ci0KLSAgICAvLyBXZWJLaXQgdGhyZWFkCi0gICAgTGF5ZXJXZWJLaXRUaHJlYWQqIGxheWVy
KCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQotICAgIHZvaWQgbGF5ZXJXZWJLaXRUaHJlYWRE
ZXN0cm95ZWQoKTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRp
cnR5UmVjdCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2b2lkIHVwZGF0ZVRl
eHR1cmVDb250ZW50c0lmTmVlZGVkKGRvdWJsZSBzY2FsZSk7Ci0gICAgdm9pZCBzZXROZWVkc0Jh
Y2tpbmcoYm9vbCk7Ci0gICAgdm9pZCBkaXNjYXJkQmFja1Zpc2liaWxpdHkoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21taXQoKTsKLQotICAgIC8vIENvbXBvc2l0aW5nIHRocmVhZAot
ICAgIHZpcnR1YWwgdm9pZCBsYXllckNvbXBvc2l0aW5nVGhyZWFkRGVzdHJveWVkKExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdl
ZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0gICAg
dmlydHVhbCBMYXllclRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZShMYXllckNvbXBvc2l0aW5nVGhy
ZWFkKik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhy
ZWFkKiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0m
LCBkb3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpOwotICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0gICAgc3RhdGlj
IHZvaWQgd2lsbENvbW1pdCgpOwotICAgIHZpcnR1YWwgdm9pZCBjb21taXRQZW5kaW5nVGV4dHVy
ZVVwbG9hZHMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNj
YXJkRnJvbnRWaXNpYmlsaXR5KCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IFRleHR1cmVKb2Ig
ewotICAgICAgICBlbnVtIFR5cGUgeyBVbmtub3duLCBTZXRDb250ZW50cywgVXBkYXRlQ29udGVu
dHMsIFJlc2l6ZUNvbnRlbnRzLCBEaXJ0eUNvbnRlbnRzIH07Ci0KLSAgICAgICAgVGV4dHVyZUpv
YigpCi0gICAgICAgICAgICA6IG1fdHlwZShVbmtub3duKQotICAgICAgICAgICAgLCBtX2NvbnRl
bnRzKDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFRleHR1cmVKb2IoVHlwZSB0
eXBlLCBjb25zdCBJbnRTaXplJiBuZXdTaXplKQotICAgICAgICAgICAgOiBtX3R5cGUodHlwZSkK
LSAgICAgICAgICAgICwgbV9jb250ZW50cygwKQotICAgICAgICAgICAgLCBtX2RpcnR5UmVjdChJ
bnRQb2ludDo6emVybygpLCBuZXdTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
dHlwZSA9PSBSZXNpemVDb250ZW50cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBUZXh0dXJlSm9i
KFR5cGUgdHlwZSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotICAgICAgICAgICAgOiBtX3R5
cGUodHlwZSkKLSAgICAgICAgICAgICwgbV9jb250ZW50cygwKQotICAgICAgICAgICAgLCBtX2Rp
cnR5UmVjdChkaXJ0eVJlY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0eXBlID09
IERpcnR5Q29udGVudHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgVGV4dHVyZUpvYihUeXBlIHR5
cGUsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBjb250ZW50cywgY29u
c3QgSW50UmVjdCYgZGlydHlSZWN0KQotICAgICAgICAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAg
ICAgICAgICwgbV9jb250ZW50cyhjb250ZW50cykKLSAgICAgICAgICAgICwgbV9kaXJ0eVJlY3Qo
ZGlydHlSZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBVcGRhdGVD
b250ZW50cyB8fCB0eXBlID09IFNldENvbnRlbnRzKTsKLSAgICAgICAgICAgIEFTU0VSVChjb250
ZW50cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgVGV4dHVyZUpvYiBzZXRDb250ZW50
cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogY29udGVudHMsIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRzUmVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFRl
eHR1cmVKb2IoU2V0Q29udGVudHMsIGNvbnRlbnRzLCBjb250ZW50c1JlY3QpOwotICAgICAgICB9
Ci0gICAgICAgIHN0YXRpYyBUZXh0dXJlSm9iIHVwZGF0ZUNvbnRlbnRzKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0KSB7IHJldHVybiBUZXh0dXJlSm9iKFVwZGF0ZUNvbnRlbnRzLCBjb250ZW50cywgZGlydHlS
ZWN0KTsgfQotICAgICAgICBzdGF0aWMgVGV4dHVyZUpvYiByZXNpemVDb250ZW50cyhjb25zdCBJ
bnRTaXplJiBuZXdTaXplKSB7IHJldHVybiBUZXh0dXJlSm9iKFJlc2l6ZUNvbnRlbnRzLCBuZXdT
aXplKTsgfQotICAgICAgICBzdGF0aWMgVGV4dHVyZUpvYiBkaXJ0eUNvbnRlbnRzKGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkgeyByZXR1cm4gVGV4dHVyZUpvYihEaXJ0eUNvbnRlbnRzLCBkaXJ0
eVJlY3QpOyB9Ci0KLSAgICAgICAgYm9vbCBpc051bGwoKSB7IHJldHVybiBtX3R5cGUgPT0gVW5r
bm93bjsgfQotCi0gICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogbV9jb250ZW50czsKLSAgICAgICAgSW50UmVjdCBtX2Rp
cnR5UmVjdDsKLSAgICAgICAgVGlsZUluZGV4IG1faW5kZXg7Ci0gICAgfTsKLQotICAgIHR5cGVk
ZWYgSGFzaE1hcDxUaWxlSW5kZXgsIExheWVyVGlsZSo+IFRpbGVNYXA7Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFRpbGVJbmRleCwgY29uc3QgVGV4dHVyZUpvYio+IFRpbGVKb2JzTWFwOwotCi0gICAg
TGF5ZXJUaWxlcihMYXllcldlYktpdFRocmVhZCopOwotCi0gICAgLy8gU3dhcHMgaW4gYSBuZXcg
ZnJvbnQgdmlzaWJpbGl0eSBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBvbmUsIGF0b21pY2FsbHku
Ci0gICAgTGF5ZXJWaXNpYmlsaXR5KiBzd2FwRnJvbnRWaXNpYmlsaXR5KExheWVyVmlzaWJpbGl0
eSopOwotCi0gICAgLy8gV2ViS2l0IHRocmVhZAotICAgIHZvaWQgdXBkYXRlVGlsZVNpemUoKTsK
LSAgICB2b2lkIGFkZFRleHR1cmVKb2IoY29uc3QgVGV4dHVyZUpvYiYpOwotICAgIHZvaWQgY2xl
YXJUZXh0dXJlSm9icygpOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVm
ZmVyKiBjcmVhdGVCdWZmZXIoY29uc3QgSW50U2l6ZSYpOwotICAgIExheWVyVmlzaWJpbGl0eSog
dGFrZUZyb250VmlzaWJpbGl0eSgpIHsgcmV0dXJuIHN3YXBGcm9udFZpc2liaWxpdHkoMCk7IH0K
LQotICAgIC8vIENvbXBvc2l0aW5nIHRocmVhZAotICAgIHZvaWQgdXBkYXRlVGlsZUNvbnRlbnRz
KGNvbnN0IFRleHR1cmVKb2ImLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBhZGRUaWxlSm9i
KGNvbnN0IFRpbGVJbmRleCYsIGNvbnN0IFRleHR1cmVKb2ImLCBUaWxlSm9ic01hcCYpOwotICAg
IHZvaWQgcGVyZm9ybVRpbGVKb2IoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIExheWVyVGlsZSos
IGNvbnN0IFRleHR1cmVKb2ImKTsKLSAgICB2b2lkIHByb2Nlc3NUZXh0dXJlSm9iKGNvbnN0IFRl
eHR1cmVKb2ImLCBUaWxlSm9ic01hcCYpOwotICAgIHZvaWQgcHJ1bmVUZXh0dXJlcyhjb25zdCBJ
bnRTaXplJiBwZW5kaW5nVGV4dHVyZVNpemUpOwotICAgIHZvaWQgdmlzaWJpbGl0eUNoYW5nZWQo
Ym9vbCBuZWVkc0Rpc3BsYXkpOwotICAgIGJvb2wgZHJhd1RpbGUoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCosIExheWVyVGlsZSosIGNvbnN0IFRpbGVJbmRleCYsIGRvdWJsZSBzY2FsZSwgY29uc3Qg
RmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0Q2xpcCk7Ci0gICAgdm9pZCBzZXRG
cm9udFZpc2liaWxpdHkoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgSGFzaFNldDxUaWxl
SW5kZXg+JiB0aWxlc05lZWRpbmdSZW5kZXIpOwotCi0gICAgLy8gQ2xlYXIgYWxsIHBlbmRpbmcg
dXBkYXRlIGNvbnRlbnQgdGV4dHVyZSBqb2JzCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICBzdGF0aWMgdm9pZCByZW1vdmVVcGRhdGVDb250ZW50c0pvYnMoVCYgam9icykKLSAgICB7Ci0g
ICAgICAgIC8vIENsZWFyIGFsbCBwZW5kaW5nIHVwZGF0ZSBjb250ZW50IGpvYnMKLSAgICAgICAg
VCBsaXN0OwotICAgICAgICBmb3IgKHR5cGVuYW1lIFQ6Oml0ZXJhdG9yIGl0ID0gam9icy5iZWdp
bigpOyBpdCAhPSBqb2JzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoKCppdCkubV90
eXBlICE9IFRleHR1cmVKb2I6OlVwZGF0ZUNvbnRlbnRzKQotICAgICAgICAgICAgICAgIGxpc3Qu
YXBwZW5kKCppdCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpkZXN0cm95QnVmZmVyKCgqaXQpLm1fY29udGVudHMpOwot
ICAgICAgICB9Ci0gICAgICAgIGpvYnMgPSBsaXN0OwotICAgIH0KLQotICAgIExheWVyV2ViS2l0
VGhyZWFkKiBtX2xheWVyOwotCi0gICAgVGlsZU1hcCBtX3RpbGVzOwotCi0gICAgYm9vbCBtX25l
ZWRzQmFja2luZzsKLQotICAgIGJvb2wgbV9jb250ZW50c0RpcnR5OwotICAgIEZsb2F0UmVjdCBt
X2RpcnR5UmVjdDsKLQotICAgIEludFNpemUgbV9wZW5kaW5nVGV4dHVyZVNpemU7IC8vIFJlc2l6
ZWQsIGJ1dCBub3QgY29tbWl0dGVkIHlldC4KLSAgICBJbnRTaXplIG1fcmVxdWlyZWRUZXh0dXJl
U2l6ZTsKLSAgICBJbnRTaXplIG1fdGlsZVNpemU7Ci0KLSAgICBib29sIG1fY2xlYXJUZXh0dXJl
Sm9iczsKLSAgICBWZWN0b3I8VGV4dHVyZUpvYj4gbV9wZW5kaW5nVGV4dHVyZUpvYnM7IC8vIEFk
ZGVkLCBidXQgbm90IGNvbW1pdHRlZCB5ZXQuCi0gICAgRGVxdWU8VGV4dHVyZUpvYj4gbV90ZXh0
dXJlSm9iczsKLQotICAgIExheWVyVmlzaWJpbGl0eSogbV9mcm9udFZpc2liaWxpdHk7Ci0gICAg
TGF5ZXJWaXNpYmlsaXR5KiBtX2JhY2tWaXNpYmlsaXR5OwotfTsKLQotfQotCi0jZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYgLy8gTGF5ZXJUaWxlcl9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllclV0aWxpdGllcy5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVXRpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCi0gKi8KLQotI2lmbmRlZiBMYXllclV0aWxpdGllc19oCi0jZGVmaW5lIExheWVyVXRp
bGl0aWVzX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJGbG9h
dFF1YWQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJMYXllckNvbXBvc2l0
aW5nVGhyZWFkLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLQotI2luY2x1
ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotLy8gZGV0ZXJtaW5hbnQgb2YgY29sdW1uIHZlY3RvcnMKLWlubGluZSBmbG9hdCBk
ZXRlcm1pbmFudChjb25zdCBGbG9hdFNpemUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKLXsKLSAg
ICByZXR1cm4gYS53aWR0aCgpICogYi5oZWlnaHQoKSAtIGEuaGVpZ2h0KCkgKiBiLndpZHRoKCk7
Ci19Ci0KLS8vIGRvdCBwcm9kdWN0Ci1pbmxpbmUgZmxvYXQgZG90KGNvbnN0IEZsb2F0U2l6ZSYg
YSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVybiBhLndpZHRoKCkgKiBiLndpZHRo
KCkgKyBhLmhlaWdodCgpICogYi5oZWlnaHQoKTsKLX0KLQotLy8gUmVwcmVzZW50cyBhIGxpbmUs
IG5vdCBhIGZpbml0ZSBsaW5lIHNlZ21lbnQKLWNsYXNzIExheWVyQ2xpcEVkZ2UgewotcHVibGlj
OgotICAgIExheWVyQ2xpcEVkZ2UoY29uc3QgRmxvYXRQb2ludCYgZmlyc3QsIGNvbnN0IEZsb2F0
UG9pbnQmIHNlY29uZCkKLSAgICAgICAgOiBtX2ZpcnN0KGZpcnN0KQotICAgICAgICAsIG1fc2Vj
b25kKHNlY29uZCkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgaXNQb2ludEluc2lk
ZShjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gRm9yIG51bWVy
aWMgcm9idXN0bmVzcywgd2UgcHJlZmVyIHRvIGNvbnNpZGVyIGEgcG9pbnQgdG8gYmUgaW5zaWRl
IHJhdGhlciB0aGFuCi0gICAgICAgIC8vIGNsaXAgaXQgYWdhaW4uCi0gICAgICAgIGNvbnN0IGZs
b2F0IGVwc2lsb24gPSAxZS02OwotICAgICAgICByZXR1cm4gZGV0ZXJtaW5hbnQobV9zZWNvbmQg
LSBtX2ZpcnN0LCBwIC0gbV9maXJzdCkgPiAtZXBzaWxvbjsKLSAgICB9Ci0KLSAgICBpbmxpbmUg
RmxvYXRQb2ludCBjb21wdXRlSW50ZXJzZWN0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25z
dCBGbG9hdFBvaW50JiBwMikgY29uc3QKLSAgICB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHAzID0gbV9maXJzdDsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDQgPSBtX3NlY29uZDsK
LSAgICAgICAgZmxvYXQgZGVub21pbmF0b3IgPSBkZXRlcm1pbmFudChwMSAtIHAyLCBwMyAtIHA0
KTsKLSAgICAgICAgRmxvYXRTaXplIGRldGVybWluYW50cyhkZXRlcm1pbmFudCh0b0Zsb2F0U2l6
ZShwMSksIHRvRmxvYXRTaXplKHAyKSksIGRldGVybWluYW50KHRvRmxvYXRTaXplKHAzKSwgdG9G
bG9hdFNpemUocDQpKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgcmVzdWx0KAotICAgICAgICAgICAg
ZGV0ZXJtaW5hbnQoZGV0ZXJtaW5hbnRzLCBGbG9hdFNpemUocDEueCgpIC0gcDIueCgpLCBwMy54
KCkgLSBwNC54KCkpKSAvIGRlbm9taW5hdG9yLAotICAgICAgICAgICAgZGV0ZXJtaW5hbnQoZGV0
ZXJtaW5hbnRzLCBGbG9hdFNpemUocDEueSgpIC0gcDIueSgpLCBwMy55KCkgLSBwNC55KCkpKSAv
IGRlbm9taW5hdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgRmxvYXRQb2ludCBtX2ZpcnN0OwotICAgIEZsb2F0UG9pbnQgbV9zZWNvbmQ7Ci19Owot
Ci0vLyBTcGVjaWZpZXMgYSBjbGlwIHBsYW5lIHdpdGggbm9ybWFsIG4gYW5kIGNvbnRhaW5pbmcg
cG9pbnQgcF8wCi0vLyBhcyBwICogbiArIGQgPSAwLCBkID0gLXBfMCAqIG4uIFRoZSBhc3Rlcmlz
ayBpcyBkb3QgcHJvZHVjdC4KLWNsYXNzIExheWVyQ2xpcFBsYW5lIHsKLXB1YmxpYzoKLSAgICBM
YXllckNsaXBQbGFuZShGbG9hdFBvaW50M0QgbiwgZmxvYXQgZCkKLSAgICAgICAgOiBtX24obikK
LSAgICAgICAgLCBtX2QoZCkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgaXNQb2lu
dEluc2lkZShjb25zdCBGbG9hdFBvaW50M0QmIHApIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gcCAqIG1fbiArIG1fZCA+IDA7Ci0gICAgfQotCi0gICAgaW5saW5lIEZsb2F0UG9pbnQzRCBj
b21wdXRlSW50ZXJzZWN0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCYgcDEsIGNvbnN0IEZsb2F0UG9p
bnQzRCYgcDIpIGNvbnN0Ci0gICAgewotICAgICAgICBmbG9hdCB1ID0gKC1tX2QgLSBwMSAqIG1f
bikgLyAoKHAyIC0gcDEpICogbV9uKTsKLSAgICAgICAgcmV0dXJuIHAxICsgdSAqIChwMiAtIHAx
KTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBGbG9hdFBvaW50M0QgbV9uOwotICAgIGZsb2F0
IG1fZDsKLX07Ci0KLS8vIFN1dGhlcmxhbmQgLSBIb2RnbWFuLCBpbm5lciBsb29wCi10ZW1wbGF0
ZTx0eXBlbmFtZSBQb2ludCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBDbGlwUHJp
bWl0aXZlPgotaW5saW5lIFZlY3RvcjxQb2ludCwgaW5saW5lQ2FwYWNpdHk+IGludGVyc2VjdChj
b25zdCBWZWN0b3I8UG9pbnQsIGlubGluZUNhcGFjaXR5PiYgaW5wdXRMaXN0LCBjb25zdCBDbGlw
UHJpbWl0aXZlJiBjbGlwUHJpbWl0aXZlKQotewotICAgIFZlY3RvcjxQb2ludCwgaW5saW5lQ2Fw
YWNpdHk+IG91dHB1dExpc3Q7Ci0gICAgUG9pbnQgczsKLSAgICBpZiAoIWlucHV0TGlzdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHMgPSBpbnB1dExpc3QubGFzdCgpOwotICAgIGZvciAodHlwZW5hbWUg
VmVjdG9yPFBvaW50LCBpbmxpbmVDYXBhY2l0eT46OmNvbnN0X2l0ZXJhdG9yIGVJdGVyYXRvciA9
IGlucHV0TGlzdC5iZWdpbigpOyBlSXRlcmF0b3IgIT0gaW5wdXRMaXN0LmVuZCgpOyArK2VJdGVy
YXRvcikgewotICAgICAgICBjb25zdCBQb2ludCYgZSA9ICplSXRlcmF0b3I7Ci0gICAgICAgIGlm
IChjbGlwUHJpbWl0aXZlLmlzUG9pbnRJbnNpZGUoZSkpIHsKLSAgICAgICAgICAgIGlmICghY2xp
cFByaW1pdGl2ZS5pc1BvaW50SW5zaWRlKHMpKQotICAgICAgICAgICAgICAgIG91dHB1dExpc3Qu
YXBwZW5kKGNsaXBQcmltaXRpdmUuY29tcHV0ZUludGVyc2VjdGlvbihzLCBlKSk7Ci0gICAgICAg
ICAgICBvdXRwdXRMaXN0LmFwcGVuZChlKTsKLSAgICAgICAgfSBlbHNlIGlmIChjbGlwUHJpbWl0
aXZlLmlzUG9pbnRJbnNpZGUocykpCi0gICAgICAgICAgICBvdXRwdXRMaXN0LmFwcGVuZChjbGlw
UHJpbWl0aXZlLmNvbXB1dGVJbnRlcnNlY3Rpb24ocywgZSkpOwotICAgICAgICBzID0gZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG91dHB1dExpc3Q7Ci19Ci0KLS8vIFN1dGhlcmxhbmQgLSBIb2RnbWFu
LCBtYWluIGRyaXZlcgotdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5saW5lIFZl
Y3RvcjxGbG9hdFBvaW50LCBpbmxpbmVDYXBhY2l0eT4gaW50ZXJzZWN0UG9seWdvbldpdGhSZWN0
KGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50LCBpbmxpbmVDYXBhY2l0eT4mIHN1YmplY3RQb2x5Z29u
LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQotewotICAgIEZsb2F0UXVhZCBjbGlwUXVhZChj
bGlwUmVjdCk7Ci0gICAgVmVjdG9yPExheWVyQ2xpcEVkZ2U+IGVkZ2VzOwotICAgIGVkZ2VzLmFw
cGVuZChMYXllckNsaXBFZGdlKGNsaXBRdWFkLnAxKCksIGNsaXBRdWFkLnAyKCkpKTsKLSAgICBl
ZGdlcy5hcHBlbmQoTGF5ZXJDbGlwRWRnZShjbGlwUXVhZC5wMigpLCBjbGlwUXVhZC5wMygpKSk7
Ci0gICAgZWRnZXMuYXBwZW5kKExheWVyQ2xpcEVkZ2UoY2xpcFF1YWQucDMoKSwgY2xpcFF1YWQu
cDQoKSkpOwotICAgIGVkZ2VzLmFwcGVuZChMYXllckNsaXBFZGdlKGNsaXBRdWFkLnA0KCksIGNs
aXBRdWFkLnAxKCkpKTsKLQotICAgIFZlY3RvcjxGbG9hdFBvaW50PiBvdXRwdXRMaXN0ID0gc3Vi
amVjdFBvbHlnb247Ci0gICAgZm9yIChWZWN0b3I8TGF5ZXJDbGlwRWRnZT46OmNvbnN0X2l0ZXJh
dG9yIGNsaXBFZGdlSXRlcmF0b3IgPSBlZGdlcy5iZWdpbigpOyBjbGlwRWRnZUl0ZXJhdG9yICE9
IGVkZ2VzLmVuZCgpOyArK2NsaXBFZGdlSXRlcmF0b3IpIHsKLSAgICAgICAgY29uc3QgTGF5ZXJD
bGlwRWRnZSYgY2xpcEVkZ2UgPSAqY2xpcEVkZ2VJdGVyYXRvcjsKLSAgICAgICAgVmVjdG9yPEZs
b2F0UG9pbnQ+IGlucHV0TGlzdCA9IG91dHB1dExpc3Q7Ci0gICAgICAgIG91dHB1dExpc3QgPSBp
bnRlcnNlY3QoaW5wdXRMaXN0LCBjbGlwRWRnZSk7Ci0gICAgfQotICAgIHJldHVybiBvdXRwdXRM
aXN0OwotfQotCi10ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1pbmxpbmUgRmxvYXRS
ZWN0IGJvdW5kaW5nQm94KGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50LCBpbmxpbmVDYXBhY2l0eT4m
IHBvaW50cykKLXsKLSAgICBpZiAocG9pbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOwotICAgIGZsb2F0IHhtaW4sIHhtYXgsIHltaW4sIHltYXg7Ci0gICAgeG1pbiA9
IHltaW4gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsKLSAgICB4bWF4
ID0geW1heCA9IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHBvaW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwID0gcG9pbnRzW2ldOwotICAgICAgICBpZiAocC54KCkgPCB4bWluKQot
ICAgICAgICAgICAgeG1pbiA9IHAueCgpOwotICAgICAgICBpZiAocC54KCkgPiB4bWF4KQotICAg
ICAgICAgICAgeG1heCA9IHAueCgpOwotICAgICAgICBpZiAocC55KCkgPCB5bWluKQotICAgICAg
ICAgICAgeW1pbiA9IHAueSgpOwotICAgICAgICBpZiAocC55KCkgPiB5bWF4KQotICAgICAgICAg
ICAgeW1heCA9IHAueSgpOwotICAgIH0KLSAgICByZXR1cm4gRmxvYXRSZWN0KHhtaW4sIHltaW4s
IHhtYXggLSB4bWluLCB5bWF4IC0geW1pbik7Ci19Ci0KLWlubGluZSBGbG9hdFBvaW50M0QgY29t
cHV0ZUJhcnljZW50cmljQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxv
YXRQb2ludCYgdDEsIGNvbnN0IEZsb2F0UG9pbnQmIHQyLCBjb25zdCBGbG9hdFBvaW50JiB0Mywg
Ym9vbCYgb2spCi17Ci0gICAgLy8gQ29tcHV0ZSB2ZWN0b3JzCi0gICAgRmxvYXRTaXplIHYwID0g
dDIgLSB0MTsKLSAgICBGbG9hdFNpemUgdjEgPSB0MyAtIHQxOwotICAgIEZsb2F0U2l6ZSB2MiA9
IHAgLSB0MTsKLQotICAgIC8vIENvbXB1dGUgZG90IHByb2R1Y3RzCi0gICAgZmxvYXQgZG90MDAg
PSBkb3QodjAsIHYwKTsKLSAgICBmbG9hdCBkb3QwMSA9IGRvdCh2MCwgdjEpOwotICAgIGZsb2F0
IGRvdDAyID0gZG90KHYwLCB2Mik7Ci0gICAgZmxvYXQgZG90MTEgPSBkb3QodjEsIHYxKTsKLSAg
ICBmbG9hdCBkb3QxMiA9IGRvdCh2MSwgdjIpOwotCi0gICAgLy8gQ29tcHV0ZSBiYXJ5Y2VudHJp
YyBjb29yZGluYXRlcwotICAgIGZsb2F0IGRlbm9taW5hdG9yID0gKGRvdDAwICogZG90MTEgLSBk
b3QwMSAqIGRvdDAxKTsKLSAgICBvayA9IChkZW5vbWluYXRvciAhPSAwLjApOwotICAgIGlmICgh
b2spCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50M0QoKTsKLQotICAgIGZsb2F0IHYgPSAoZG90
MTEgKiBkb3QwMiAtIGRvdDAxICogZG90MTIpIC8gZGVub21pbmF0b3I7Ci0gICAgZmxvYXQgdyA9
IChkb3QwMCAqIGRvdDEyIC0gZG90MDEgKiBkb3QwMikgLyBkZW5vbWluYXRvcjsKLQotICAgIHJl
dHVybiBGbG9hdFBvaW50M0QoMS4wZiAtIHYgLSB3LCB2LCB3KTsKLX0KLQotaW5saW5lIGZsb2F0
IG1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydChjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAg
IGZsb2F0IGQgPSAwOwotICAgIGlmIChmYWJzZihwLngoKSkgPiAxKQotICAgICAgICBkICs9IGZh
YnNmKHAueCgpKSAtIDE7Ci0gICAgaWYgKGZhYnNmKHAueSgpKSA+IDEpCi0gICAgICAgIGQgKz0g
ZmFic2YocC55KCkpIC0gMTsKLSAgICByZXR1cm4gZDsKLX0KLQotc3RydWN0IFVucHJvamVjdGlv
blZlcnRleCB7Ci0gICAgRmxvYXRQb2ludCB4eTsKLSAgICBmbG9hdCB3OwotICAgIEZsb2F0U2l6
ZSB1djsKLX07Ci0KLWlubGluZSBib29sIGNvbXBhcmVNYW5oYXR0YW5EaXN0YW5jZVRvVmlld3Bv
cnQoY29uc3QgVW5wcm9qZWN0aW9uVmVydGV4JiBhLCBjb25zdCBVbnByb2plY3Rpb25WZXJ0ZXgm
IGIpCi17Ci0gICAgcmV0dXJuIG1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydChhLnh5KSA8IG1h
bmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydChiLnh5KTsKLX0KLQotdGVtcGxhdGU8c2l6ZV90IGlu
bGluZUNhcGFjaXR5PgotaW5saW5lIFZlY3RvcjxGbG9hdFBvaW50LCBpbmxpbmVDYXBhY2l0eT4g
dW5wcm9qZWN0KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBjb25zdCBWZWN0b3I8Rmxv
YXRQb2ludCwgaW5saW5lQ2FwYWNpdHk+JiBwb2ludHMpCi17Ci0gICAgLy8gVXNlIHBlcnNwZWN0
aXZlIGNvcnJlY3QgdGV4dHVyaW5nIGxvZ2ljIHRvIGZpbmQgdGhlIGxvY2F0aW9ucyBvZiB0aGVz
ZSBwb2ludHMgaW4gbm9ybWFsaXplZCBsYXllciBjb29yZGluYXRlcwotICAgIFZlY3RvcjxGbG9h
dFBvaW50LCA0PiBib3VuZHMgPSBsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKTsKLSAgICBWZWN0
b3I8ZmxvYXQsIDQ+IHdzID0gbGF5ZXItPndzKCk7Ci0gICAgaWYgKHdzLmlzRW1wdHkoKSkKLSAg
ICAgICAgd3MuZmlsbCgwLjBmLCBib3VuZHMuc2l6ZSgpKTsKLSAgICBjb25zdCBWZWN0b3I8Rmxv
YXRQb2ludD4mIHRleENvb3JkcyA9IGxheWVyLT50ZXh0dXJlQ29vcmRpbmF0ZXMoKTsKLSAgICBp
ZiAoYm91bmRzLnNpemUoKSA8IDMpCi0gICAgICAgIHJldHVybiBWZWN0b3I8RmxvYXRQb2ludCwg
aW5saW5lQ2FwYWNpdHk+KCk7Ci0KLSAgICBWZWN0b3I8VW5wcm9qZWN0aW9uVmVydGV4LCA0PiB2
ZXJ0aWNlcyhib3VuZHMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJvdW5k
cy5zaXplKCk7ICsraSkgewotICAgICAgICB2ZXJ0aWNlc1tpXS54eSA9IGJvdW5kc1tpXTsKLSAg
ICAgICAgdmVydGljZXNbaV0udyA9IHdzW2ldOwotICAgICAgICB2ZXJ0aWNlc1tpXS51diA9IHRv
RmxvYXRTaXplKHRleENvb3Jkc1tpXSk7Ci0gICAgfQotICAgIC8vIEVhY2ggcG9pbnQgbmVlZHMg
dG8gYmUgcXVhbGlmaWVkIGFzIGx5aW5nIGluIG9uZSBvZiB0aGUgdHJpYW5nbGVzIGZvcm1lZCBi
eSB0aGUgImJvdW5kcyIgdHJpYW5nbGUgc3RyaXAKLSAgICAvLyBUcnkgdG8gdXNlIG9ubHkgcG9p
bnRzIHRoYXQgYXJlIG9uc2NyZWVuLCBmb3IgbnVtZXJpY2FsIHN0YWJpbGl0eQotICAgIHN0ZDo6
c29ydCh2ZXJ0aWNlcy5iZWdpbigpLCB2ZXJ0aWNlcy5lbmQoKSwgY29tcGFyZU1hbmhhdHRhbkRp
c3RhbmNlVG9WaWV3cG9ydCk7Ci0KLSAgICBWZWN0b3I8RmxvYXRQb2ludCwgaW5saW5lQ2FwYWNp
dHk+IHJlc3VsdDsKLQotICAgIHNpemVfdCBpMCA9IDA7Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50
JiBwMCA9IHZlcnRpY2VzW2kwXS54eTsKLSAgICBmbG9hdCB3MCA9IHZlcnRpY2VzW2kwXS53Owot
ICAgIEZsb2F0U2l6ZSB1djAgPSB2ZXJ0aWNlc1tpMF0udXY7Ci0KLSAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IHBvaW50cy5zaXplKCk7ICsraikgewotICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwID0gcG9pbnRzW2pdOwotICAgICAgICBGbG9hdFBvaW50IHRleENvb3JkOwotICAgICAgICBm
b3IgKHNpemVfdCBkaSA9IDE7IGRpICsgMSA8IHZlcnRpY2VzLnNpemUoKTsgKytkaSkgewotICAg
ICAgICAgICAgc2l6ZV90IGkgPSAoaTAgKyBkaSkgJSB2ZXJ0aWNlcy5zaXplKCk7Ci0gICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBwMSA9IHZlcnRpY2VzW2ldLnh5OwotICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcDIgPSB2ZXJ0aWNlc1tpICsgMV0ueHk7Ci0gICAgICAgICAgICBm
bG9hdCB3MSA9IHZlcnRpY2VzW2ldLnc7Ci0gICAgICAgICAgICBmbG9hdCB3MiA9IHZlcnRpY2Vz
W2kgKyAxXS53OwotICAgICAgICAgICAgRmxvYXRTaXplIHV2MSA9IHZlcnRpY2VzW2ldLnV2Owot
ICAgICAgICAgICAgRmxvYXRTaXplIHV2MiA9IHZlcnRpY2VzW2kgKyAxXS51djsKLQotICAgICAg
ICAgICAgYm9vbCBvazsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBiID0gY29tcHV0ZUJhcnlj
ZW50cmljQ29vcmRpbmF0ZXMocCwgcDAsIHAxLCBwMiwgb2spOwotICAgICAgICAgICAgaWYgKCFv
aykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKHcwICYmIHcx
ICYmIHcyKSB7Ci0gICAgICAgICAgICAgICAgLy8gUGVyc3BlY3RpdmUgY29ycmVjdCBpbnRlcnBv
bGF0aW9uCi0gICAgICAgICAgICAgICAgRmxvYXRQb2ludDNEIGJ3KGIueCgpIC8gdzAsIGIueSgp
IC8gdzEsIGIueigpIC8gdzIpOwotICAgICAgICAgICAgICAgIGZsb2F0IGRlbm9taW5hdG9yID0g
YncueCgpICsgYncueSgpICsgYncueigpOwotICAgICAgICAgICAgICAgIHRleENvb3JkID0gRmxv
YXRQb2ludDo6emVybygpICsgKGJ3LngoKSAqIHV2MCArIGJ3LnkoKSAqIHV2MSArIGJ3LnooKSAq
IHV2Mik7Ci0gICAgICAgICAgICAgICAgdGV4Q29vcmQuc2V0WCh0ZXhDb29yZC54KCkgLyBkZW5v
bWluYXRvcik7Ci0gICAgICAgICAgICAgICAgdGV4Q29vcmQuc2V0WSh0ZXhDb29yZC55KCkgLyBk
ZW5vbWluYXRvcik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIExp
bmVhciBpbnRlcnBvbGF0aW9uCi0gICAgICAgICAgICAgICAgdGV4Q29vcmQgPSBGbG9hdFBvaW50
Ojp6ZXJvKCkgKyAoYi54KCkgKiB1djAgKyBiLnkoKSAqIHV2MSArIGIueigpICogdXYyKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJlc3Vs
dC5hcHBlbmQodGV4Q29vcmQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxp
bmUgRmxvYXRQb2ludDNEIG11bHRWZWNNYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCwgY29uc3QgRmxvYXRQb2ludDNEJiBwLCBmbG9hdCYgdykKLXsKLSAgICBGbG9hdFBv
aW50M0QgcmVzdWx0KAotICAgICAgICBtYXRyaXgubTQxKCkgKyBwLngoKSAqIG1hdHJpeC5tMTEo
KSArIHAueSgpICogbWF0cml4Lm0yMSgpICsgcC56KCkgKiBtYXRyaXgubTMxKCksCi0gICAgICAg
IG1hdHJpeC5tNDIoKSArIHAueCgpICogbWF0cml4Lm0xMigpICsgcC55KCkgKiBtYXRyaXgubTIy
KCkgKyBwLnooKSAqIG1hdHJpeC5tMzIoKSwKLSAgICAgICAgbWF0cml4Lm00MygpICsgcC54KCkg
KiBtYXRyaXgubTEzKCkgKyBwLnkoKSAqIG1hdHJpeC5tMjMoKSArIHAueigpICogbWF0cml4Lm0z
MygpKTsKLSAgICB3ID0gbWF0cml4Lm00NCgpICsgcC54KCkgKiBtYXRyaXgubTE0KCkgKyBwLnko
KSAqIG1hdHJpeC5tMjQoKSArIHAueigpICogbWF0cml4Lm0zNCgpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFBvaW50LCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
Ci1pbmxpbmUgVmVjdG9yPFBvaW50LCBpbmxpbmVDYXBhY2l0eT4gdG9WZWN0b3IoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQotewotICAgIFZlY3RvcjxQb2ludCwgaW5saW5lQ2FwYWNpdHk+IHJlc3Vs
dDsKLSAgICByZXN1bHQuYXBwZW5kKHF1YWQucDEoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChxdWFk
LnAyKCkpOwotICAgIHJlc3VsdC5hcHBlbmQocXVhZC5wMygpKTsKLSAgICByZXN1bHQuYXBwZW5k
KHF1YWQucDQoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYg
Ly8gTGF5ZXJVdGlsaXRpZXNfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5j
cHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiTGF5ZXJXZWJL
aXRUaHJlYWQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKLSNpbmNsdWRlICJMYXllck1lc3NhZ2UuaCIKLSNpbmNs
dWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KLSNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2Ugc3RkOwotCi1QYXNzUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBMYXllcldlYktpdFRo
cmVhZDo6Y3JlYXRlKExheWVyVHlwZSB0eXBlLCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeSogb3du
ZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllcldlYktpdFRocmVhZCh0eXBlLCBv
d25lcikpOwotfQotCi1MYXllcldlYktpdFRocmVhZDo6TGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXJU
eXBlIHR5cGUsIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5KiBvd25lcikKLSAgICA6IExheWVyRGF0
YSh0eXBlKQotICAgICwgbV9vd25lcihvd25lcikKLSAgICAsIG1fc3VwZXJsYXllcigwKQotICAg
ICwgbV9jb250ZW50cygwKQotICAgICwgbV9pc0RyYXdhYmxlKGZhbHNlKQotICAgICwgbV9pc01h
c2soZmFsc2UpCi0gICAgLCBtX2FuaW1hdGlvbnNDaGFuZ2VkKGZhbHNlKQotICAgICwgbV9jbGVh
ck92ZXJyaWRlT25Db21taXQoZmFsc2UpCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgICwg
bV9maWx0ZXJzQ2hhbmdlZChmYWxzZSkKLSNlbmRpZgotICAgICwgbV9kaWRTdGFydEFuaW1hdGlv
bnMoZmFsc2UpCi17Ci0gICAgaWYgKHR5cGUgPT0gTGF5ZXIpCi0gICAgICAgIG1fdGlsZXIgPSBM
YXllclRpbGVyOjpjcmVhdGUodGhpcyk7Ci0gICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkID0g
TGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6Y3JlYXRlKHR5cGUsIG1fdGlsZXIuZ2V0KCkpOwotfQot
Ci1MYXllcldlYktpdFRocmVhZDo6fkxheWVyV2ViS2l0VGhyZWFkKCkKLXsKLSAgICBpZiAobV90
aWxlcikKLSAgICAgICAgbV90aWxlci0+bGF5ZXJXZWJLaXRUaHJlYWREZXN0cm95ZWQoKTsKLQot
ICAgIC8vIE91ciBzdXBlcmxheWVyIHNob3VsZCBiZSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHVz
IHNvIHRoZXJlIHNob3VsZCBiZSBubwotICAgIC8vIHdheSBmb3IgdXMgdG8gYmUgZGVzdHJveWVk
IHdoaWxlIHdlIHN0aWxsIGhhdmUgYSBzdXBlcmxheWVyLgotICAgIEFTU0VSVCghc3VwZXJsYXll
cigpKTsKLQotICAgIC8vIFJlbW92ZSB0aGUgc3VwZXJsYXllciByZWZlcmVuY2UgZnJvbSBhbGwg
c3VibGF5ZXJzLgotICAgIHJlbW92ZUFsbChtX3N1YmxheWVycyk7Ci0gICAgcmVtb3ZlQWxsKG1f
b3ZlcmxheXMpOwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpwYWludENvbnRlbnRzKEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZmZXIsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRzUmVjdCwgZG91YmxlIHNjYWxlKQotewotICAgIGlmICghZHJhd3NDb250ZW50
KCkgJiYgIWNvbnRlbnRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghYnVmZmVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IHVudHJhbnNmb3JtZWRDb250ZW50c1JlY3Qg
PSBjb250ZW50c1JlY3Q7Ci0gICAgRmxvYXRSZWN0IGNsaXBSZWN0ID0gY29udGVudHNSZWN0Owot
ICAgIGlmIChzY2FsZSAhPSAxLjApIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4OwotICAgICAgICBtYXRyaXguc2NhbGUoMS4wIC8gc2NhbGUpOwotICAgICAgICB1bnRyYW5z
Zm9ybWVkQ29udGVudHNSZWN0ID0gbWF0cml4Lm1hcFJlY3QoY29udGVudHNSZWN0KTsKLSAgICAg
ICAgY2xpcFJlY3QgPSBtYXRyaXgubWFwUmVjdChjbGlwUmVjdCk7Ci0KLSAgICAgICAgLy8gV2Ug
ZXh0cmFjdCBmcm9tIHRoZSBjb250ZW50c1JlY3QgYnV0IGRyYXcgYSBzbGlnaHRseSBsYXJnZXIg
cmVnaW9uIHRoYW4KLSAgICAgICAgLy8gd2Ugd2VyZSB0b2xkIHRvLCBpbiBvcmRlciB0byBhdm9p
ZCBwaXhlbHMgYmVpbmcgcmVuZGVyZWQgb25seSBwYXJ0aWFsbHkuCi0gICAgICAgIGNvbnN0IGlu
dCBhdExlYXN0T25lRGV2aWNlUGl4ZWwgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKDEuMCAvIHNj
YWxlKSk7Ci0gICAgICAgIHVudHJhbnNmb3JtZWRDb250ZW50c1JlY3QuaW5mbGF0ZShhdExlYXN0
T25lRGV2aWNlUGl4ZWwpOwotICAgIH0KLQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBw
bGF0Zm9ybUNvbnRleHQgPSBsb2NrQnVmZmVyRHJhd2FibGUoYnVmZmVyKTsKLSAgICBHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgaWYgKGNvbnRl
bnRzKCkpIHsKLSAgICAgICAgLy8gSW1hZ2VzIG5lZWRzIHRvIGJlIGNlbnRlcmVkIGFuZCB3aWxs
IGJlIHNjYWxlZCB0byBmaXQgdGhlIGJvdW5kcyBvbiB0aGUgY29tcG9zaXRpbmcgdGhyZWFkCi0g
ICAgICAgIGlmICghY29udGVudHMoKS0+c2l6ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoY29udGVudHMoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
SW50UG9pbnQoMCwgMCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC50
cmFuc2xhdGUoLWNvbnRlbnRzUmVjdC54KCksIC1jb250ZW50c1JlY3QueSgpKTsKLSAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShzY2FsZSwgc2NhbGUpKTsKLSAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LmNsaXAoY2xpcFJlY3QpOwotICAgICAgICBtX293bmVyLT5wYWludEdy
YXBoaWNzTGF5ZXJDb250ZW50cyhncmFwaGljc0NvbnRleHQsIHVudHJhbnNmb3JtZWRDb250ZW50
c1JlY3QpOwotICAgIH0KLQotICAgIHJlbGVhc2VCdWZmZXJEcmF3YWJsZShidWZmZXIpOwotfQot
Ci12b2lkIExheWVyV2ViS2l0VGhyZWFkOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgp
Ci17Ci0gICAgaWYgKG1fdGlsZXIpCi0gICAgICAgIG1fdGlsZXItPnVwZGF0ZVRleHR1cmVDb250
ZW50c0lmTmVlZGVkKG1faXNNYXNrID8gMS4wIDogY29udGVudHNTY2FsZSgpKTsKLX0KLQotdm9p
ZCBMYXllcldlYktpdFRocmVhZDo6Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCkKLXsKLSAg
ICBsYXllckNvbXBvc2l0aW5nVGhyZWFkKCktPmNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2Fkcygp
OwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpzZXRDb250ZW50cyhJbWFnZSogY29udGVu
dHMpCi17Ci0gICAgLy8gQ2hlY2sgaWYgdGhlIGltYWdlIGhhcyBjaGFuZ2VkLgotICAgIGlmICht
X2NvbnRlbnRzID09IGNvbnRlbnRzKSB7Ci0gICAgICAgIC8vIFNldCBuZWVkcyBkaXNwbGF5IGZv
ciBhbmltYXRlZCBpbWFnZXMuCi0gICAgICAgIGlmIChjb250ZW50cykKLSAgICAgICAgICAgIHNl
dE5lZWRzRGlzcGxheSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGVudHMg
PSBjb250ZW50czsKLSAgICBzZXROZWVkc1RleHR1cmUobV9pc0RyYXdhYmxlICYmICh0aGlzLT5j
b250ZW50cygpIHx8IGRyYXdzQ29udGVudCgpIHx8IHBsdWdpblZpZXcoKSkpOwotCi0gICAgaWYg
KG1fY29udGVudHMpCi0gICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgIGVsc2UKLSAgICAg
ICAgc2V0TmVlZHNDb21taXQoKTsKLQotICAgIC8vIElmIHRoaXMgbGF5ZXIgY29udGFpbnMgYSBi
aXRtYXAgaW1hZ2UgaXQgaXNuJ3QgcmVyZW5kZXJlZCBhdCBkaWZmZXJlbnQgc2NhbGUgKGl0IGlz
IHJlc29sdXRpb24gaW5kZXBlbmRlbnQpCi0gICAgbV9jb250ZW50c1Jlc29sdXRpb25JbmRlcGVu
ZGVudCA9IHN0YXRpY19jYXN0PGJvb2w+KG1fY29udGVudHMpOwotfQotCi12b2lkIExheWVyV2Vi
S2l0VGhyZWFkOjpzZXREcmF3YWJsZShib29sIGlzRHJhd2FibGUpCi17Ci0gICAgaWYgKG1faXNE
cmF3YWJsZSA9PSBpc0RyYXdhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzRHJhd2Fi
bGUgPSBpc0RyYXdhYmxlOwotCi0gICAgc2V0TmVlZHNUZXh0dXJlKG1faXNEcmF3YWJsZSAmJiAo
ZHJhd3NDb250ZW50KCkgfHwgY29udGVudHMoKSB8fCBwbHVnaW5WaWV3KCkgfHwgbWVkaWFQbGF5
ZXIoKSkpOwotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJXZWJLaXRUaHJl
YWQ6OnNldE5lZWRzQ29tbWl0KCkKLXsKLSAgICAvLyBDYWxsIG5vdGlmeUZsdXNoUmVxdWlyZWQo
KSwgd2hpY2ggaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBwbHVtYnMgdGhyb3VnaCB0bwotICAgIC8v
IGNhbGwgc2NoZWR1bGVSb290TGF5ZXJDb21taXQoKSBvbiB0aGUgV2ViVmlldywgd2hpY2ggd2ls
bCBjYXVzZSB1cyB0byBjb21taXQKLSAgICAvLyBjaGFuZ2VzIGRvbmUgb24gdGhlIFdlYktpdCB0
aHJlYWQgZm9yIGRpc3BsYXkgb24gdGhlIENvbXBvc2l0aW5nIHRocmVhZC4KLSAgICBpZiAobV9v
d25lcikKLSAgICAgICAgbV9vd25lci0+bm90aWZ5Rmx1c2hSZXF1aXJlZCgpOwotfQotCi12b2lk
IExheWVyV2ViS2l0VGhyZWFkOjpub3RpZnlBbmltYXRpb25zU3RhcnRlZChkb3VibGUgdGltZSkK
LXsKLSAgICBpZiAobV9kaWRTdGFydEFuaW1hdGlvbnMpIHsKLSAgICAgICAgbV9kaWRTdGFydEFu
aW1hdGlvbnMgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fb3duZXIpCi0gICAgICAgICAgICBtX293
bmVyLT5ub3RpZnlBbmltYXRpb25TdGFydGVkKHRpbWUpOwotICAgIH0KLQotICAgIHNpemVfdCBs
aXN0U2l6ZSA9IG1fc3VibGF5ZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxpc3RTaXplOyArK2kpCi0gICAgICAgIG1fc3VibGF5ZXJzW2ldLT5ub3RpZnlBbmltYXRpb25z
U3RhcnRlZCh0aW1lKTsKLQotICAgIGxpc3RTaXplID0gbV9vdmVybGF5cy5zaXplKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKQotICAgICAgICBtX292ZXJsYXlz
W2ldLT5ub3RpZnlBbmltYXRpb25zU3RhcnRlZCh0aW1lKTsKLX0KLQotdm9pZCBMYXllcldlYktp
dFRocmVhZDo6Y29tbWl0T25XZWJLaXRUaHJlYWQoZG91YmxlIHNjYWxlKQotewotICAgIC8vIFVw
ZGF0aW5nIHRleHR1cmUgY29udGVudHMgcmVxdWlyZSB0aGUgbGF0ZXN0IHZpc2liaWxpdHkgaW5m
by4KLSAgICB1cGRhdGVUZXh0dXJlQ29udGVudHMoc2NhbGUpOwotfQotCi1ib29sIExheWVyV2Vi
S2l0VGhyZWFkOjpzdGFydEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCi17Ci0gICAgYm9vbCBkaWRT
dGFydEFuaW1hdGlvbnMgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcnVu
bmluZ0FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFtX3J1bm5pbmdBbmlt
YXRpb25zW2ldLT5zdGFydFRpbWUoKSkgewotICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9u
c1tpXS0+c2V0U3RhcnRUaW1lKHRpbWUpOwotICAgICAgICAgICAgbV9kaWRTdGFydEFuaW1hdGlv
bnMgPSBkaWRTdGFydEFuaW1hdGlvbnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
c2l6ZV90IGxpc3RTaXplID0gbV9zdWJsYXllcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGlzdFNpemU7ICsraSkKLSAgICAgICAgZGlkU3RhcnRBbmltYXRpb25zIHw9IG1f
c3VibGF5ZXJzW2ldLT5zdGFydEFuaW1hdGlvbnModGltZSk7Ci0KLSAgICBsaXN0U2l6ZSA9IG1f
b3ZlcmxheXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsr
aSkKLSAgICAgICAgZGlkU3RhcnRBbmltYXRpb25zIHw9IG1fb3ZlcmxheXNbaV0tPnN0YXJ0QW5p
bWF0aW9ucyh0aW1lKTsKLQotICAgIHJldHVybiBkaWRTdGFydEFuaW1hdGlvbnM7Ci19Ci0KLXZv
aWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50cyhkb3VibGUgc2NhbGUp
Ci17Ci0gICAgaWYgKG1fY29udGVudHNTY2FsZSAhPSBzY2FsZSkgewotICAgICAgICBtX2NvbnRl
bnRzU2NhbGUgPSBzY2FsZTsKLQotICAgICAgICAvLyBPbmx5IHdlYiBjb250ZW50IGNhbiByZWRy
YXcgYXQgdGhlIG5ldyBzY2FsZS4KLSAgICAgICAgLy8gQ2FudmFzLCBpbWFnZXMsIHZpZGVvIGV0
YyBjYW4ndC4KLSAgICAgICAgaWYgKGRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgc2V0TmVl
ZHNEaXNwbGF5KCk7Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQo
KTsKLQotICAgIGlmIChpbmNsdWRlVmlzaWJpbGl0eSgpKSB7Ci0gICAgICAgIC8vIFRoZSBSZW5k
ZXJMYXllckJhY2tpbmcgY2FzdCBsb29rcyB1bnNhZmUgZ2l2ZW4gdGhhdCB0aGVyZSBhcmUgdHdv
IGNsYXNzZXMKLSAgICAgICAgLy8gZGVyaXZlZCBmcm9tIEdyYXBoaWNzTGF5ZXJDbGllbnQgYnV0
IHRoaXMgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSBmb3IKLSAgICAgICAgLy8gdGhpbmdzIHRoYXQg
cHJvZHVjZSBSZW5kZXJMYXllckJhY2tpbmcgZGVyaXZhdGl2ZXM7IGkuZS4sIHBsdWdpbnMgYW5k
IG1lZGlhLgotICAgICAgICBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIoc3RhdGljX2Nhc3Q8UmVu
ZGVyTGF5ZXJCYWNraW5nKj4obV9vd25lci0+Y2xpZW50KCkpLT5vd25pbmdMYXllcigpKTsKLSAg
ICAgICAgYm9vbCBpc1Zpc2libGUocmVuZGVyTGF5ZXItPmhhc1Zpc2libGVDb250ZW50KCkgfHwg
cmVuZGVyTGF5ZXItPmhhc1Zpc2libGVEZXNjZW5kYW50KCkpOwotICAgICAgICBpZiAobV9pc1Zp
c2libGUgIT0gaXNWaXNpYmxlKSB7Ci0gICAgICAgICAgICBtX2lzVmlzaWJsZSA9IGlzVmlzaWJs
ZTsKLSAgICAgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBzaXplX3QgbGlzdFNpemUgPSBtX3N1YmxheWVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKQotICAgICAgICBtX3N1YmxheWVyc1tpXS0+dXBkYXRl
VGV4dHVyZUNvbnRlbnRzKHNjYWxlKTsKLQotICAgIGxpc3RTaXplID0gbV9vdmVybGF5cy5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKQotICAgICAgICBt
X292ZXJsYXlzW2ldLT51cGRhdGVUZXh0dXJlQ29udGVudHMoc2NhbGUpOwotCi0gICAgaWYgKG1h
c2tMYXllcigpKQotICAgICAgICBtYXNrTGF5ZXIoKS0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHNj
YWxlKTsKLQotICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgcmVwbGljYUxheWVyKCkt
PnVwZGF0ZVRleHR1cmVDb250ZW50cyhzY2FsZSk7Ci19Ci0KLXZvaWQgTGF5ZXJXZWJLaXRUaHJl
YWQ6OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQoKQotewotICAgIEZsb2F0UG9pbnQgb2xkUG9z
aXRpb24gPSBtX3Bvc2l0aW9uOwotICAgIG1fcG9zaXRpb24gKz0gbV9hYnNvbHV0ZU9mZnNldDsK
LSAgICAvLyBDb3B5IHRoZSBiYXNlIHZhcmlhYmxlcyBmcm9tIHRoaXMgb2JqZWN0IGludG8gbV9s
YXllckNvbXBvc2l0aW5nVGhyZWFkCi0gICAgcmVwbGljYXRlKG1fbGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZC5nZXQoKSk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIGlmIChtX2ZpbHRlcnND
aGFuZ2VkKSB7Ci0gICAgICAgIG1fZmlsdGVyc0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgbV9s
YXllckNvbXBvc2l0aW5nVGhyZWFkLT5zZXRGaWx0ZXJPcGVyYXRpb25zQ2hhbmdlZCh0cnVlKTsK
LSAgICB9Ci0jZW5kaWYKLSAgICBpZiAobV9hbmltYXRpb25zQ2hhbmdlZCkgewotICAgICAgICBt
X2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldFJ1bm5pbmdBbmltYXRpb25zKG1fcnVubmluZ0Fu
aW1hdGlvbnMpOwotICAgICAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldFN1c3BlbmRl
ZEFuaW1hdGlvbnMobV9zdXNwZW5kZWRBbmltYXRpb25zKTsKLSAgICAgICAgbV9hbmltYXRpb25z
Q2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAobV9jbGVhck92ZXJyaWRlT25Db21taXQp
IHsKLSAgICAgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5jbGVhck92ZXJyaWRlKCk7Ci0g
ICAgICAgIG1fY2xlYXJPdmVycmlkZU9uQ29tbWl0ID0gZmFsc2U7Ci0gICAgfQotICAgIG1fcG9z
aXRpb24gPSBvbGRQb3NpdGlvbjsKLSAgICB1cGRhdGVMYXllckhpZXJhcmNoeSgpOwotCi0gICAg
Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCk7Ci0KLSAgICBzaXplX3QgbGlzdFNpemUgPSBt
X3N1YmxheWVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsg
KytpKQotICAgICAgICBtX3N1YmxheWVyc1tpXS0+Y29tbWl0T25Db21wb3NpdGluZ1RocmVhZCgp
OwotCi0gICAgbGlzdFNpemUgPSBtX292ZXJsYXlzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxpc3RTaXplOyArK2kpCi0gICAgICAgIG1fb3ZlcmxheXNbaV0tPmNvbW1pdE9u
Q29tcG9zaXRpbmdUaHJlYWQoKTsKLQotICAgIGlmIChtYXNrTGF5ZXIoKSkgewotICAgICAgICBt
YXNrTGF5ZXIoKS0+Y29tbWl0T25Db21wb3NpdGluZ1RocmVhZCgpOwotICAgICAgICBsYXllckNv
bXBvc2l0aW5nVGhyZWFkKCktPnNldE1hc2tMYXllcihtYXNrTGF5ZXIoKS0+bGF5ZXJDb21wb3Np
dGluZ1RocmVhZCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCgpLT5zZXRNYXNrTGF5ZXIoMCk7Ci0KLSAgICBpZiAocmVwbGljYUxheWVyKCkpIHsKLSAgICAg
ICAgcmVwbGljYUxheWVyKCktPmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQoKTsKLSAgICAgICAg
bGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpLT5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxheWVyKCkt
PmxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxheWVyQ29t
cG9zaXRpbmdUaHJlYWQoKS0+c2V0UmVwbGljYUxheWVyKDApOwotfQotCi12b2lkIExheWVyV2Vi
S2l0VGhyZWFkOjphZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBzdWJs
YXllcikKLXsKLSAgICBpbnNlcnQobV9zdWJsYXllcnMsIHN1YmxheWVyLCBtX3N1YmxheWVycy5z
aXplKCkpOwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjphZGRPdmVybGF5KFBhc3NSZWZQ
dHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IG92ZXJsYXkpCi17Ci0gICAgaW5zZXJ0KG1fb3ZlcmxheXMs
IG92ZXJsYXksIG1fb3ZlcmxheXMuc2l6ZSgpKTsKLX0KLQotdm9pZCBMYXllcldlYktpdFRocmVh
ZDo6aW5zZXJ0KFZlY3RvcjxSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+ID4mIGxpc3QsIFBhc3NS
ZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IHN1YmxheWVyLCBzaXplX3QgaW5kZXgpCi17Ci0gICAg
c3VibGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Ci0gICAgaW5kZXggPSBtaW4oaW5kZXgs
IGxpc3Quc2l6ZSgpKTsKLSAgICBzdWJsYXllci0+c2V0U3VwZXJsYXllcih0aGlzKTsKLSAgICBs
aXN0Lmluc2VydChpbmRleCwgc3VibGF5ZXIpOwotCi0gICAgc2V0TmVlZHNDb21taXQoKTsKLX0K
LQotdm9pZCBMYXllcldlYktpdFRocmVhZDo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKQotewotICAg
IGlmIChtX3N1cGVybGF5ZXIpCi0gICAgICAgIG1fc3VwZXJsYXllci0+cmVtb3ZlU3VibGF5ZXJP
ck92ZXJsYXkodGhpcyk7Ci19Ci0KLXZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJlbW92ZVN1Ymxh
eWVyT3JPdmVybGF5KExheWVyV2ViS2l0VGhyZWFkKiBzdWJsYXllcikKLXsKLSAgICByZW1vdmUo
bV9zdWJsYXllcnMsIHN1YmxheWVyKTsKLSAgICByZW1vdmUobV9vdmVybGF5cywgc3VibGF5ZXIp
OwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpyZW1vdmUoVmVjdG9yPFJlZlB0cjxMYXll
cldlYktpdFRocmVhZD4gPiYgdmVjdG9yLCBMYXllcldlYktpdFRocmVhZCogc3VibGF5ZXIpCi17
Ci0gICAgc2l6ZV90IGZvdW5kSW5kZXggPSB2ZWN0b3IuZmluZChzdWJsYXllcik7Ci0gICAgaWYg
KGZvdW5kSW5kZXggPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN1YmxheWVy
LT5zZXRTdXBlcmxheWVyKDApOwotICAgIHZlY3Rvci5yZW1vdmUoZm91bmRJbmRleCk7Ci0KLSAg
ICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpyZXBsYWNl
U3VibGF5ZXIoTGF5ZXJXZWJLaXRUaHJlYWQqIHJlZmVyZW5jZSwgUGFzc1JlZlB0cjxMYXllcldl
YktpdFRocmVhZD4gbmV3TGF5ZXIpCi17Ci0gICAgQVNTRVJUX0FSRyhyZWZlcmVuY2UsIHJlZmVy
ZW5jZSk7Ci0gICAgQVNTRVJUX0FSRyhyZWZlcmVuY2UsIHJlZmVyZW5jZS0+c3VwZXJsYXllcigp
ID09IHRoaXMpOwotCi0gICAgaWYgKHJlZmVyZW5jZSA9PSBuZXdMYXllcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc2l6ZV90IHJlZmVyZW5jZUluZGV4ID0gbV9zdWJsYXllcnMuZmluZChyZWZl
cmVuY2UpOwotICAgIGlmIChyZWZlcmVuY2VJbmRleCA9PSBub3RGb3VuZCkgewotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlZmVy
ZW5jZS0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLQotICAgIGlmIChuZXdMYXllcikgewotICAg
ICAgICBuZXdMYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLSAgICAgICAgaW5zZXJ0U3Vi
bGF5ZXIobmV3TGF5ZXIsIHJlZmVyZW5jZUluZGV4KTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJX
ZWJLaXRUaHJlYWQ6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGlmICht
X2JvdW5kcyA9PSBzaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGZpcnN0UmVzaXpl
ID0gIW1fYm91bmRzLndpZHRoKCkgJiYgIW1fYm91bmRzLmhlaWdodCgpICYmIHNpemUud2lkdGgo
KSAmJiBzaXplLmhlaWdodCgpOwotCi0gICAgbV9ib3VuZHMgPSBzaXplOwotCi0gICAgYm91bmRz
Q2hhbmdlZCgpOwotCi0gICAgaWYgKGZpcnN0UmVzaXplKQotICAgICAgICBzZXROZWVkc0Rpc3Bs
YXkoKTsKLSAgICBlbHNlCi0gICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQgTGF5
ZXJXZWJLaXRUaHJlYWQ6OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBp
ZiAocmVjdCA9PSBtX2ZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ZyYW1lID0gcmVj
dDsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
LWJvb2wgTGF5ZXJXZWJLaXRUaHJlYWQ6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICAvLyBUaGVyZSBpcyB3b3JrIGFzc29jaWF0
ZWQgd2l0aCBjb21wb3NpdGluZyBmaWx0ZXJzLCBldmVuIGlmIHRoZXJlIGFyZSB6ZXJvIGZpbHRl
cnMsCi0gICAgLy8gc28gaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnMsIGNsYWltIHdlIGNhbid0IGNv
bXBvc2l0ZSB0aGVtLgotICAgIGlmICghZmlsdGVycy5zaXplKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0gZmls
dGVycy5hdChpKTsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlv
blR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNVU1RP
TToKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLSNlbmRpZgotCi1jb25zdCBMYXllcldlYktpdFRocmVhZCogTGF5ZXJXZWJLaXRUaHJlYWQ6
OnJvb3RMYXllcigpIGNvbnN0Ci17Ci0gICAgY29uc3QgTGF5ZXJXZWJLaXRUaHJlYWQqIGxheWVy
ID0gdGhpczsKLSAgICBMYXllcldlYktpdFRocmVhZCogc3VwZXJsYXllciA9IGxheWVyLT5zdXBl
cmxheWVyKCk7Ci0KLSAgICB3aGlsZSAoc3VwZXJsYXllcikgewotICAgICAgICBsYXllciA9IHN1
cGVybGF5ZXI7Ci0gICAgICAgIHN1cGVybGF5ZXIgPSBzdXBlcmxheWVyLT5zdXBlcmxheWVyKCk7
Ci0gICAgfQotICAgIHJldHVybiBsYXllcjsKLX0KLQotdm9pZCBMYXllcldlYktpdFRocmVhZDo6
cmVtb3ZlQWxsKFZlY3RvcjxSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+ID4mIHZlY3RvcikKLXsK
LSAgICBpZiAoIXZlY3Rvci5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxlICh2
ZWN0b3Iuc2l6ZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gbGF5ZXIg
PSB2ZWN0b3JbMF0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChsYXllci0+c3VwZXJsYXllcigpID09
IHRoaXMpOwotICAgICAgICBsYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLSAgICB9Ci0K
LSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpzZXRT
dWJsYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gPiYgc3VibGF5
ZXJzKQotewotICAgIGlmIChzdWJsYXllcnMgPT0gbV9zdWJsYXllcnMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHJlbW92ZUFsbFN1YmxheWVycygpOwotICAgIHNpemVfdCBsaXN0U2l6ZSA9IHN1
YmxheWVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytp
KQotICAgICAgICBhZGRTdWJsYXllcihzdWJsYXllcnNbaV0pOwotfQotCi12b2lkIExheWVyV2Vi
S2l0VGhyZWFkOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJl
Y3QpCi17Ci0gICAgaWYgKG1fdGlsZXIpCi0gICAgICAgIG1fdGlsZXItPnNldE5lZWRzRGlzcGxh
eShkaXJ0eVJlY3QpOwotICAgIHNldE5lZWRzQ29tbWl0KCk7IC8vIEZJWE1FOiBSZXBsYWNlIHRo
aXMgd2l0aCBhIG1vcmUgdGFyZ2V0ZWQgbWVzc2FnZSBmb3IgZGlydHkgcmVjdCBoYW5kbGluZyB3
aXRoIHBsdWdpbiBjb250ZW50PwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpzZXROZWVk
c0Rpc3BsYXkoKQotewotICAgIGlmIChtX3RpbGVyKQotICAgICAgICBtX3RpbGVyLT5zZXROZWVk
c0Rpc3BsYXkoKTsKLSAgICBzZXROZWVkc0NvbW1pdCgpOyAvLyBGSVhNRTogUmVwbGFjZSB0aGlz
IHdpdGggYSBtb3JlIHRhcmdldGVkIG1lc3NhZ2UgZm9yIGRpcnR5IHJlY3QgaGFuZGxpbmcgd2l0
aCBwbHVnaW4gY29udGVudD8KLX0KLQotdm9pZCBMYXllcldlYktpdFRocmVhZDo6dXBkYXRlTGF5
ZXJIaWVyYXJjaHkoKQotewotICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0U3VwZXJs
YXllcihzdXBlcmxheWVyKCkgPyBzdXBlcmxheWVyKCktPm1fbGF5ZXJDb21wb3NpdGluZ1RocmVh
ZC5nZXQoKSA6IDApOwotCi0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFk
PiA+IHN1YmxheWVyczsKLSAgICBzaXplX3QgbGlzdFNpemUgPSBtX292ZXJsYXlzLnNpemUoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpCi0gICAgICAgIHN1Ymxh
eWVycy5hcHBlbmQobV9vdmVybGF5c1tpXS0+bV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLmdldCgp
KTsKLSAgICBsaXN0U2l6ZSA9IG1fc3VibGF5ZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxpc3RTaXplOyArK2kpCi0gICAgICAgIHN1YmxheWVycy5hcHBlbmQobV9zdWJs
YXllcnNbaV0tPm1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC5nZXQoKSk7Ci0gICAgbV9sYXllckNv
bXBvc2l0aW5nVGhyZWFkLT5zZXRTdWJsYXllcnMoc3VibGF5ZXJzKTsKLX0KLQotdm9pZCBMYXll
cldlYktpdFRocmVhZDo6c2V0SXNNYXNrKGJvb2wgaXNNYXNrKQotewotICAgIG1faXNNYXNrID0g
aXNNYXNrOwotICAgIGlmIChpc01hc2sgJiYgbV90aWxlcikKLSAgICAgICAgbV90aWxlci0+c2V0
TmVlZHNCYWNraW5nKHRydWUpOwotfQotCi12b2lkIExheWVyV2ViS2l0VGhyZWFkOjpzZXRSdW5u
aW5nQW5pbWF0aW9ucyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+JiBhbmlt
YXRpb25zKQotewotICAgIG1fcnVubmluZ0FuaW1hdGlvbnMgPSBhbmltYXRpb25zOwotICAgIG1f
YW5pbWF0aW9uc0NoYW5nZWQgPSB0cnVlOwotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZv
aWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFN1c3BlbmRlZEFuaW1hdGlvbnMoY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiYgYW5pbWF0aW9ucykKLXsKLSAgICBtX3N1c3BlbmRl
ZEFuaW1hdGlvbnMgPSBhbmltYXRpb25zOwotICAgIG1fYW5pbWF0aW9uc0NoYW5nZWQgPSB0cnVl
OwotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJl
bGVhc2VMYXllclJlc291cmNlcygpCi17Ci0gICAgZGVsZXRlVGV4dHVyZXMoKTsKLQotICAgIHNp
emVfdCBsaXN0U2l6ZSA9IG1fc3VibGF5ZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxpc3RTaXplOyArK2kpCi0gICAgICAgIG1fc3VibGF5ZXJzW2ldLT5yZWxlYXNlTGF5
ZXJSZXNvdXJjZXMoKTsKLQotICAgIGxpc3RTaXplID0gbV9vdmVybGF5cy5zaXplKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKQotICAgICAgICBtX292ZXJsYXlz
W2ldLT5yZWxlYXNlTGF5ZXJSZXNvdXJjZXMoKTsKLQotICAgIGlmIChtYXNrTGF5ZXIoKSkKLSAg
ICAgICAgbWFza0xheWVyKCktPnJlbGVhc2VMYXllclJlc291cmNlcygpOwotCi0gICAgaWYgKHJl
cGxpY2FMYXllcigpKQotICAgICAgICByZXBsaWNhTGF5ZXIoKS0+cmVsZWFzZUxheWVyUmVzb3Vy
Y2VzKCk7Ci19Ci0KLXZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OmRpc2NhcmRCYWNrVmlzaWJpbGl0
eSgpCi17Ci0gICAgaWYgKG1fdGlsZXIpCi0gICAgICAgIG1fdGlsZXItPmRpc2NhcmRCYWNrVmlz
aWJpbGl0eSgpOwotCi0gICAgc2l6ZV90IGxpc3RTaXplID0gbV9zdWJsYXllcnMuc2l6ZSgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKLSAgICAgICAgbV9zdWJs
YXllcnNbaV0tPmRpc2NhcmRCYWNrVmlzaWJpbGl0eSgpOwotCi0gICAgbGlzdFNpemUgPSBtX292
ZXJsYXlzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kp
Ci0gICAgICAgIG1fb3ZlcmxheXNbaV0tPmRpc2NhcmRCYWNrVmlzaWJpbGl0eSgpOwotCi0gICAg
aWYgKG1hc2tMYXllcigpKQotICAgICAgICBtYXNrTGF5ZXIoKS0+ZGlzY2FyZEJhY2tWaXNpYmls
aXR5KCk7Ci0KLSAgICBpZiAocmVwbGljYUxheWVyKCkpCi0gICAgICAgIHJlcGxpY2FMYXllcigp
LT5kaXNjYXJkQmFja1Zpc2liaWxpdHkoKTsKLX0KLQotSW50UmVjdCBMYXllcldlYktpdFRocmVh
ZDo6bWFwRnJvbVRyYW5zZm9ybWVkKGNvbnN0IEludFJlY3QmIGNvbnRlbnRzUmVjdCwgZG91Ymxl
IHNjYWxlKQotewotICAgIEludFJlY3QgdW50cmFuc2Zvcm1lZENvbnRlbnRzUmVjdCA9IGNvbnRl
bnRzUmVjdDsKLQotICAgIGlmIChzY2FsZSAhPSAxLjApIHsKLSAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4OwotICAgICAgICBtYXRyaXguc2NhbGUoMS4wIC8gc2NhbGUpOwotICAg
ICAgICB1bnRyYW5zZm9ybWVkQ29udGVudHNSZWN0ID0gbWF0cml4Lm1hcFJlY3QoY29udGVudHNS
ZWN0KTsKLQotICAgICAgICAvLyBXZSBleHRyYWN0IGZyb20gdGhlIGNvbnRlbnRzUmVjdCBidXQg
ZHJhdyBhIHNsaWdodGx5IGxhcmdlciByZWdpb24gdGhhbgotICAgICAgICAvLyB3ZSB3ZXJlIHRv
bGQgdG8sIGluIG9yZGVyIHRvIGF2b2lkIHBpeGVscyBiZWluZyByZW5kZXJlZCBvbmx5IHBhcnRp
YWxseS4KLSAgICAgICAgY29uc3QgaW50IGF0TGVhc3RPbmVEZXZpY2VQaXhlbCA9IHN0YXRpY19j
YXN0PGludD4oY2VpbGYoMS4wIC8gc2NhbGUpKTsKLSAgICAgICAgdW50cmFuc2Zvcm1lZENvbnRl
bnRzUmVjdC5pbmZsYXRlKGF0TGVhc3RPbmVEZXZpY2VQaXhlbCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHVudHJhbnNmb3JtZWRDb250ZW50c1JlY3Q7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFk
LmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyNzUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBMYXllcldlYktpdFRo
cmVhZF9oCi0jZGVmaW5lIExheWVyV2ViS2l0VGhyZWFkX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmgiCi0j
aW5jbHVkZSAiTGF5ZXJBbmltYXRpb24uaCIKLSNpbmNsdWRlICJMYXllckRhdGEuaCIKLSNpbmNs
dWRlICJMYXllclRpbGVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMYXllckNvbXBv
c2l0aW5nVGhyZWFkOwotCi1jbGFzcyBMYXllcldlYktpdFRocmVhZCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPExheWVyV2ViS2l0VGhyZWFkPiwgcHVibGljIExheWVyRGF0YSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IGNyZWF0ZShMYXllclR5cGUsIEdy
YXBoaWNzTGF5ZXJCbGFja0JlcnJ5KiBvd25lciA9IDApOwotCi0gICAgdmlydHVhbCB+TGF5ZXJX
ZWJLaXRUaHJlYWQoKTsKLQotICAgIHZvaWQgYWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllcldl
YktpdFRocmVhZD4pOwotICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllcldl
YktpdFRocmVhZD4gbGF5ZXIsIHNpemVfdCBpbmRleCkgeyBpbnNlcnQobV9zdWJsYXllcnMsIGxh
eWVyLCBpbmRleCk7IH0KLSAgICB2b2lkIHJlcGxhY2VTdWJsYXllcihMYXllcldlYktpdFRocmVh
ZCogcmVmZXJlbmNlLCBQYXNzUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBuZXdMYXllcik7Ci0g
ICAgdm9pZCByZW1vdmVGcm9tU3VwZXJsYXllcigpOwotCi0gICAgdm9pZCBhZGRPdmVybGF5KFBh
c3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+KTsKLQotICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIHsgbV9hbmNob3JQb2ludCA9IGFuY2hvclBv
aW50OyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0KLSAgICB2b2lkIHNldEFuY2hvclBvaW50WihmbG9h
dCBhbmNob3JQb2ludFopIHsgbV9hbmNob3JQb2ludFogPSBhbmNob3JQb2ludFo7IHNldE5lZWRz
Q29tbWl0KCk7IH0KLQotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikgeyBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9yOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0K
LSAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX2JvcmRlckNv
bG9yID0gY29sb3I7IHNldE5lZWRzQ29tbWl0KCk7IH0KLQotICAgIHZvaWQgc2V0Qm9yZGVyV2lk
dGgoZmxvYXQgd2lkdGgpIHsgbV9ib3JkZXJXaWR0aCA9IHdpZHRoOyBzZXROZWVkc0NvbW1pdCgp
OyB9Ci0KLSAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJbnRTaXplJik7Ci0KLSAgICB2b2lkIHNl
dFNpemVJc1NjYWxlSW52YXJpYW50KGJvb2wgaW52YXJpYW50KSB7IG1fc2l6ZUlzU2NhbGVJbnZh
cmlhbnQgPSBpbnZhcmlhbnQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KLQotICAgIHZvaWQgc2V0RG91
YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRlZCkgeyBtX2RvdWJsZVNpZGVkID0gZG91YmxlU2lkZWQ7
IHNldE5lZWRzQ29tbWl0KCk7IH0KLQotICAgIHZvaWQgc2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0
Jik7Ci0KLSAgICB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCBtYXNrc1RvQm91bmRzKSB7IG1f
bWFza3NUb0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHM7IH0KLQotICAgIHZvaWQgc2V0TWFza0xheWVy
KExheWVyV2ViS2l0VGhyZWFkKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7
IH0KLSAgICBMYXllcldlYktpdFRocmVhZCogbWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9t
YXNrTGF5ZXIuZ2V0KCk7IH0KLQotICAgIGJvb2wgaXNNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9p
c01hc2s7IH0KLSAgICB2b2lkIHNldElzTWFzayhib29sKTsKLQotICAgIHZvaWQgc2V0UmVwbGlj
YUxheWVyKExheWVyV2ViS2l0VGhyZWFkKiBsYXllcikgeyBtX3JlcGxpY2FMYXllciA9IGxheWVy
OyB9Ci0gICAgTGF5ZXJXZWJLaXRUaHJlYWQqIHJlcGxpY2FMYXllcigpIHsgcmV0dXJuIG1fcmVw
bGljYUxheWVyLmdldCgpOyB9Ci0KLSAgICAvLyBGSVhNRTogTW92ZSB0byBhIG5ldyBzdWJjbGFz
cywgQ29udGVudExheWVyV2ViS2l0VGhyZWFkLiBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgbGF5ZXJz
IHRoYXQgZHJhdyBjb250ZW50Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eSgpOwotCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShib29sIG5lZWRz
RGlzcGxheSkgeyBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlID0gbmVlZHNEaXNwbGF5OyB9
Ci0KLSAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFj
aXR5OyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAg
dm9pZCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIHsgbV9maWx0
ZXJzID0gZmlsdGVyczsgbV9maWx0ZXJzQ2hhbmdlZCA9IHRydWU7IHNldE5lZWRzQ29tbWl0KCk7
IH0KLSAgICBzdGF0aWMgYm9vbCBmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNldE9wYXF1ZShib29sIGlz
T3BhcXVlKSB7IG1faXNPcGFxdWUgPSBpc09wYXF1ZTsgc2V0TmVlZHNDb21taXQoKTsgfQotCi0g
ICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0
aW9uID0gcG9zaXRpb247IHNldE5lZWRzQ29tbWl0KCk7IH0KLQotICAgIGNvbnN0IExheWVyV2Vi
S2l0VGhyZWFkKiByb290TGF5ZXIoKSBjb25zdDsKLQotICAgIHZvaWQgcmVtb3ZlQWxsU3VibGF5
ZXJzKCkgeyByZW1vdmVBbGwobV9zdWJsYXllcnMpOyB9Ci0KLSAgICB2b2lkIHNldFN1YmxheWVy
cyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+Jik7Ci0KLSAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+JiBzdWJsYXllcnMoKSBjb25zdCB7
IHJldHVybiBtX3N1YmxheWVyczsgfQotCi0gICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fc3VibGF5ZXJUcmFuc2Zv
cm0gPSB0cmFuc2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0KLQotICAgIExheWVyV2ViS2l0VGhy
ZWFkKiBzdXBlcmxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zdXBlcmxheWVyOyB9Ci0KLSAgICB2
b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7
IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0KLSAgICB2b2lk
IHNldFByZXNlcnZlczNEKGJvb2wgcHJlc2VydmVzM0QpIHsgbV9wcmVzZXJ2ZXMzRCA9IHByZXNl
cnZlczNEOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0KLSAgICB2b2lkIHNldEZpeGVkUG9zaXRpb24o
Ym9vbCBmaXhlZCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzRml4ZWRQb3NpdGlvbiA9PSBmaXhl
ZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9pc0ZpeGVkUG9zaXRpb24gPSBmaXhl
ZDsKLSAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEhhc0Zp
eGVkQ29udGFpbmVyKGJvb2wgZml4ZWQpIHsgbV9oYXNGaXhlZENvbnRhaW5lciA9IGZpeGVkOyBz
ZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAgdm9pZCBzZXRIYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVl
KGJvb2wgZml4ZWQpIHsgbV9oYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlID0gZml4ZWQ7IHNldE5l
ZWRzQ29tbWl0KCk7IH0KLQotICAgIHZvaWQgc2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9u
TGF5ZXJzKGJvb2wgZml4ZWQpCi0gICAgewotICAgICAgICBpZiAobV9pc0NvbnRhaW5lckZvckZp
eGVkUG9zaXRpb25MYXllcnMgPT0gZml4ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzID0gZml4ZWQ7Ci0gICAgICAgIHNl
dE5lZWRzQ29tbWl0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRGaXhlZFRvVG9wKGJvb2wgZml4
ZWRUb1RvcCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzRml4ZWRUb1RvcCA9PSBmaXhlZFRvVG9w
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2lzRml4ZWRUb1RvcCA9IGZpeGVkVG9U
b3A7Ci0gICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRGaXhl
ZFRvTGVmdChib29sIGZpeGVkVG9MZWZ0KQotICAgIHsKLSAgICAgICAgaWYgKG1faXNGaXhlZFRv
TGVmdCA9PSBmaXhlZFRvTGVmdCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9pc0Zp
eGVkVG9MZWZ0ID0gZml4ZWRUb0xlZnQ7Ci0gICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0gICAg
fQotCi0gICAgdm9pZCBzZXRGcmFtZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi0g
ICAgewotICAgICAgICBpZiAobV9mcmFtZVZpc2libGVSZWN0ID09IHJlY3QpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fZnJhbWVWaXNpYmxlUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHNl
dE5lZWRzQ29tbWl0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRGcmFtZUNvbnRlbnRzU2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKG1fZnJhbWVDb250ZW50c1Np
emUgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZUNvbnRlbnRz
U2l6ZSA9IHNpemU7Ci0gICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0gICAgfQotCi0gICAgdm9p
ZCBzZXRDb250ZW50cyhJbWFnZSopOwotICAgIEltYWdlKiBjb250ZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGVudHMuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0T3duZXIoR3JhcGhpY3NMYXll
ckJsYWNrQmVycnkqIG93bmVyKSB7IG1fb3duZXIgPSBvd25lcjsgfQotICAgIC8vIE5PVEU6IENh
biBiZSAwLgotICAgIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5KiBvd25lcigpIGNvbnN0IHsgcmV0
dXJuIG1fb3duZXI7IH0KLQotICAgIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
bV9vd25lciAmJiBtX293bmVyLT5kcmF3c0NvbnRlbnQoKTsgfQotICAgIHZvaWQgc2V0RHJhd2Fi
bGUoYm9vbCk7Ci0KLSAgICAvLyAxLiBDb21taXQgb24gV2ViS2l0IHRocmVhZAotICAgIHZvaWQg
Y29tbWl0T25XZWJLaXRUaHJlYWQoZG91YmxlIHNjYWxlKTsKLQotICAgIC8vIDIuIENvbW1pdCBv
biBDb21wb3NpdGluZyB0aHJlYWQKLSAgICB2b2lkIGNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQo
KTsKLSAgICBib29sIHN0YXJ0QW5pbWF0aW9ucyhkb3VibGUgdGltZSk7Ci0KLSAgICAvLyAzLiBO
b3RpZnkgd2hlbiByZXR1cm5pbmcgdG8gV2ViS2l0IHRocmVhZAotICAgIHZvaWQgbm90aWZ5QW5p
bWF0aW9uc1N0YXJ0ZWQoZG91YmxlIHRpbWUpOwotCi0gICAgTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCogbGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJDb21wb3Np
dGluZ1RocmVhZC5nZXQoKTsgfQotCi0gICAgLy8gT25seSB1c2VkIHdoZW4gdGhpcyBsYXllciBp
cyB0aGUgcm9vdCBsYXllciBvZiBhIGZyYW1lLgotICAgIHZvaWQgc2V0QWJzb2x1dGVPZmZzZXQo
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQpIHsgbV9hYnNvbHV0ZU9mZnNldCA9IG9mZnNldDsgfQot
Ci0gICAgdm9pZCBwYWludENvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
QnVmZmVyKiwgY29uc3QgSW50UmVjdCYgdHJhbnNmb3JtZWRDb250ZW50c1JlY3QsIGRvdWJsZSBz
Y2FsZSk7Ci0KLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7Ci0KLSAgICB2b2lkIHNldFJ1bm5p
bmdBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4mKTsKLSAg
ICB2b2lkIHNldFN1c3BlbmRlZEFuaW1hdGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckFu
aW1hdGlvbj4gPiYpOwotCi0gICAgLy8gQWxsb3dzIHlvdSB0byBjbGVhciB0aGUgTGF5ZXJDb21w
b3NpdGluZ1RocmVhZDo6b3ZlcnJpZGVzIGZyb20gdGhlIFdLIHRocmVhZAotICAgIHZvaWQgY2xl
YXJPdmVycmlkZSgpIHsgbV9jbGVhck92ZXJyaWRlT25Db21taXQgPSB0cnVlOyBzZXROZWVkc0Nv
bW1pdCgpOyB9Ci0KLSAgICB2b2lkIHJlbGVhc2VMYXllclJlc291cmNlcygpOwotCi0gICAgdm9p
ZCBkaXNjYXJkQmFja1Zpc2liaWxpdHkoKTsKLQotICAgIHN0YXRpYyBJbnRSZWN0IG1hcEZyb21U
cmFuc2Zvcm1lZChjb25zdCBJbnRSZWN0JiwgZG91YmxlIHNjYWxlKTsKLQotcHJvdGVjdGVkOgot
ICAgIExheWVyV2ViS2l0VGhyZWFkKExheWVyVHlwZSwgR3JhcGhpY3NMYXllckJsYWNrQmVycnkq
IG93bmVyKTsKLQotICAgIHZvaWQgc2V0TmVlZHNUZXh0dXJlKGJvb2wgbmVlZHNUZXh0dXJlKSB7
IG1fbmVlZHNUZXh0dXJlID0gbmVlZHNUZXh0dXJlOyB9Ci0gICAgYm9vbCBpc0RyYXdhYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0RyYXdhYmxlOyB9Ci0KLSAgICB2b2lkIHVwZGF0ZVZpc2liaWxp
dHkoKTsKLSAgICB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50cyhkb3VibGUgc2NhbGUpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGJvdW5kc0NoYW5nZWQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0UGVu
ZGluZ1RleHR1cmVVcGxvYWRzKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmVzKCkg
eyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVMYXllckhpZXJhcmNoeSgpOwotCi0gICAg
dm9pZCBzZXRTdXBlcmxheWVyKExheWVyV2ViS2l0VGhyZWFkKiBzdXBlcmxheWVyKSB7IG1fc3Vw
ZXJsYXllciA9IHN1cGVybGF5ZXI7IH0KLQotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGZyb20gcmVtb3ZlRnJvbVN1cGVybGF5ZXIuCi0gICAgdm9pZCByZW1vdmVTdWJsYXllck9y
T3ZlcmxheShMYXllcldlYktpdFRocmVhZCopOwotICAgIHZvaWQgcmVtb3ZlKFZlY3RvcjxSZWZQ
dHI8TGF5ZXJXZWJLaXRUaHJlYWQ+ID4mLCBMYXllcldlYktpdFRocmVhZCopOwotICAgIHZvaWQg
cmVtb3ZlQWxsKFZlY3RvcjxSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+ID4mKTsKLSAgICB2b2lk
IGluc2VydChWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+JiwgUGFzc1JlZlB0cjxM
YXllcldlYktpdFRocmVhZD4sIHNpemVfdCBpbmRleCk7Ci0KLSAgICBHcmFwaGljc0xheWVyQmxh
Y2tCZXJyeSogbV9vd25lcjsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4g
bV9ydW5uaW5nQW5pbWF0aW9uczsKLSAgICBWZWN0b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+
IG1fc3VzcGVuZGVkQW5pbWF0aW9uczsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJXZWJLaXRU
aHJlYWQ+ID4gbV9zdWJsYXllcnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRocmVh
ZD4gPiBtX292ZXJsYXlzOwotICAgIExheWVyV2ViS2l0VGhyZWFkKiBtX3N1cGVybGF5ZXI7Ci0g
ICAgUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBtX21hc2tMYXllcjsKLSAgICBSZWZQdHI8TGF5
ZXJXZWJLaXRUaHJlYWQ+IG1fcmVwbGljYUxheWVyOwotCi0gICAgUmVmUHRyPEltYWdlPiBtX2Nv
bnRlbnRzOwotCi0gICAgUmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+IG1fbGF5ZXJDb21w
b3NpdGluZ1RocmVhZDsKLSAgICBSZWZQdHI8TGF5ZXJUaWxlcj4gbV90aWxlcjsKLSAgICBGbG9h
dFNpemUgbV9hYnNvbHV0ZU9mZnNldDsKLSAgICB1bnNpZ25lZCBtX2lzRHJhd2FibGUgOiAxOwot
ICAgIHVuc2lnbmVkIG1faXNNYXNrIDogMTsKLSAgICB1bnNpZ25lZCBtX2FuaW1hdGlvbnNDaGFu
Z2VkIDogMTsKLSAgICB1bnNpZ25lZCBtX2NsZWFyT3ZlcnJpZGVPbkNvbW1pdCA6IDE7Ci0jaWYg
RU5BQkxFKENTU19GSUxURVJTKQotICAgIHVuc2lnbmVkIG1fZmlsdGVyc0NoYW5nZWQgOiAxOwot
I2VuZGlmCi0gICAgdW5zaWduZWQgbV9kaWRTdGFydEFuaW1hdGlvbnMgOiAxOwotfTsKLQotfQot
Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQ
cml2YXRlQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmNwcAko
cmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1
ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaCIKLQotI2luY2x1ZGUgIkNvb2tpZU1h
bmFnZXIuaCIKLSNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5oIgotI2luY2x1ZGUgIkRPTUZp
bGVTeXN0ZW1CYXNlLmgiCi0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIk1lZGlh
U3RyZWFtUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtUmVnaXN0cnkuaCIKLSNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtRGV2
aWNlSW5mby5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVByaW1pdGl2ZXMuaD4KLSNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TZXR0aW5ncy5oPgotI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybVdlYkZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxGcmFtZUxvYWRlckNsaWVudEJs
YWNrQmVycnkuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNsdWRl
ICJWaWRlb0xheWVyV2ViS2l0VGhyZWFkLmgiCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3Jt
R0xFUzJQcm9ncmFtLmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jZW5kaWYKLQotI2luY2x1
ZGUgPFRpbGVkSW1hZ2UuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLXVzaW5nIG5hbWVzcGFj
ZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBTdGF0
aWMgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciBmYWN0b3J5Ci1QYXNzT3duUHRyPE1lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIq
IHBsYXllcikKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1lZGlhUGxheWVyUHJpdmF0ZShw
bGF5ZXIpKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdp
bmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQotewotICAgIHJlZ2lzdHJhcihjcmVh
dGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUsIDAsIDAsIDApOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxXVEY6OlN0cmlu
Zz4mIHR5cGVzKQotewotICAgIHNldDxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiBzdXBw
b3J0ZWQgPSBQbGF0Zm9ybVBsYXllcjo6YWxsU3VwcG9ydGVkTWltZVR5cGVzKCk7Ci0gICAgc2V0
PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+OjppdGVyYXRvciBpID0gc3VwcG9ydGVkLmJl
Z2luKCk7Ci0gICAgZm9yICg7IGkgIT0gc3VwcG9ydGVkLmVuZCgpOyBpKyspCi0gICAgICAgIHR5
cGVzLmFkZCgqaSk7Ci19Ci0KLU1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYg
cGFyYW1ldGVycykKLXsKLSAgICBib29sIGlzUlRTUCA9IHBhcmFtZXRlcnMudXJsLnByb3RvY29s
SXMoInJ0c3AiKTsKLSAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSBwYXJhbWV0ZXJzLnR5cGU7Ci0K
LSAgICBpZiAoIWlzUlRTUCAmJiAodHlwZS5pc051bGwoKSB8fCB0eXBlLmlzRW1wdHkoKSkpIHsK
LSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlOyB0
eXBlIGlzIG51bGwgb3IgZW1wdHkuIik7Ci0gICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNO
b3RTdXBwb3J0ZWQ7Ci0gICAgfQotCi0gICAgLy8gc3BlYyBzYXlzIHdlIHNob3VsZCBub3QgcmV0
dXJuICJwcm9iYWJseSIgaWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkKLSAgICBpZiAoaXNS
VFNQIHx8IFBsYXRmb3JtUGxheWVyOjptaW1lVHlwZVN1cHBvcnRlZCh0eXBlLmFzY2lpKCkuZGF0
YSgpKSkgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllciBzdXBwb3J0cyB0eXBlICVz
LiIsIGlzUlRTUCA/ICJydHNwIiA6IHR5cGUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1
cm4gcGFyYW1ldGVycy5jb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9y
dGVkIDogTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOwotICAgIH0KLSAgICBMT0coTWVkaWEsICJN
ZWRpYVBsYXllciBkb2VzIG5vdCBzdXBwb3J0IHR5cGUgJXMuIiwgdHlwZS5hc2NpaSgpLmRhdGEo
KSk7Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKLX0KLQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6Om5vdGlmeUFwcEFjdGl2YXRlZEV2ZW50KGJvb2wgYWN0aXZhdGVk
KQotewotICAgIFBsYXRmb3JtUGxheWVyOjpub3RpZnlBcHBBY3RpdmF0ZWRFdmVudChhY3RpdmF0
ZWQpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Q2VydGlmaWNhdGVQYXRoKGNv
bnN0IFdURjo6U3RyaW5nJiBjYVBhdGgpCi17Ci0gICAgUGxhdGZvcm1QbGF5ZXI6OnNldENlcnRp
ZmljYXRlUGF0aChjYVBhdGgpOwotfQotCi1NZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVy
UHJpdmF0ZShNZWRpYVBsYXllciogcGxheWVyKQotICAgIDogbV93ZWJDb3JlUGxheWVyKHBsYXll
cikKLSAgICAsIG1fcGxhdGZvcm1QbGF5ZXIoMCkKLSAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlh
UGxheWVyOjpFbXB0eSkKLSAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhp
bmcpCi0gICAgLCBtX2Z1bGxzY3JlZW5XZWJQYWdlQ2xpZW50KDApCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotICAgICwgbV9idWZmZXJpbmdUaW1lcih0aGlzLCAmTWVkaWFQbGF5
ZXJQcml2YXRlOjpidWZmZXJpbmdUaW1lckZpcmVkKQotICAgICwgbV9zaG93QnVmZmVyaW5nSW1h
Z2UoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fdXNlckRyaXZlblNlZWtUaW1lcih0aGlzLCAmTWVk
aWFQbGF5ZXJQcml2YXRlOjp1c2VyRHJpdmVuU2Vla1RpbWVyRmlyZWQpCi0gICAgLCBtX2xhc3RT
ZWVrVGltZSgwKQotICAgICwgbV9sYXN0TG9hZGluZ1RpbWUoMCkKLSAgICAsIG1fbGFzdFNlZWtU
aW1lUGVuZGluZyhmYWxzZSkKLSAgICAsIG1faXNBdXRoZW50aWNhdGlvbkNoYWxsZW5naW5nKGZh
bHNlKQotICAgICwgbV93YWl0TWV0YWRhdGFUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRl
Ojp3YWl0TWV0YWRhdGFUaW1lckZpcmVkKQotICAgICwgbV93YWl0TWV0YWRhdGFQb3BEaWFsb2dD
b3VudGVyKDApCi17Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0
ZSgpCi17Ci0gICAgaWYgKG1faXNBdXRoZW50aWNhdGlvbkNoYWxsZW5naW5nKQotICAgICAgICBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXI6Omluc3RhbmNlKCktPmNhbmNlbEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKHRoaXMpOwotCi0gICAgaWYgKGlzRnVsbHNjcmVlbigpKQotICAgICAg
ICBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyRXhpdEZ1
bGxzY3JlZW4oKTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgLy8gUmVt
b3ZlIG1lZGlhIHBsYXllciBmcm9tIHBsYXRmb3JtIGxheWVyLgotICAgIGlmIChtX3BsYXRmb3Jt
TGF5ZXIpCi0gICAgICAgIHN0YXRpY19jYXN0PFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQqPihtX3Bs
YXRmb3JtTGF5ZXIuZ2V0KCkpLT5zZXRNZWRpYVBsYXllcigwKTsKLSNlbmRpZgotCi0gICAgaWYg
KG1fcGxhdGZvcm1QbGF5ZXIpIHsKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXItPmRpYWxv
Z1N0YXRlKCkgPT0gUGxhdGZvcm1QbGF5ZXI6OkRpYWxvZ1Nob3duKSB7Ci0gICAgICAgICAgICBt
X3BsYXRmb3JtUGxheWVyLT5zZXREaWFsb2dTdGF0ZShQbGF0Zm9ybVBsYXllcjo6TWVkaWFQbGF5
ZXJQcml2YXRlRGVzdHJveWVkKTsKLSAgICAgICAgICAgIG1fcGxhdGZvcm1QbGF5ZXItPnN0b3Ao
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkZWxldGVHdWFyZGVkT2JqZWN0KG1fcGxh
dGZvcm1QbGF5ZXIpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQo
Y29uc3QgV1RGOjpTdHJpbmcmIHVybCkKLXsKLSAgICBXVEY6OlN0cmluZyBtb2RpZmllZFVybCh1
cmwpOwotCi0gICAgaWYgKG1vZGlmaWVkVXJsLnN0YXJ0c1dpdGgoImxvY2FsOi8vIikpIHsKLSAg
ICAgICAgVVJMIGt1cmwgPSBVUkwoVVJMKCksIG1vZGlmaWVkVXJsKTsKLSAgICAgICAga3VybC5z
ZXRQcm90b2NvbCgiZmlsZSIpOwotICAgICAgICBXVEY6OlN0cmluZyB0ZW1wUGF0aChCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPmFwcGxpY2F0aW9uTG9jYWxEaXJl
Y3RvcnkoKS5jX3N0cigpKTsKLSAgICAgICAgdGVtcFBhdGguYXBwZW5kKGt1cmwucGF0aCgpKTsK
LSAgICAgICAga3VybC5zZXRQYXRoKHRlbXBQYXRoKTsKLSAgICAgICAgbW9kaWZpZWRVcmwgPSBr
dXJsLnN0cmluZygpOwotICAgIH0KLSAgICAvLyBmaWxlc3lzdGVtOiBVUkxzIHJlZmVyIHRvIGVu
dGl0aWVzIGluIHRoZSBXZWIgRmlsZSBTeXN0ZW0gKFdGUykgYW5kIGFyZQotICAgIC8vIGludGVu
ZGVkIHRvIGJlIHVzZWFibGUgYnkgSFRNTCA1IG1lZGlhIGVsZW1lbnRzIGRpcmVjdGx5LiBVbmZv
cnR1bmF0ZWx5Ci0gICAgLy8gdGhlIGxvYWRlciBmb3Igb3VyIG1lZGlhIHBsYXllciBpcyBpbXBs
ZW1lbnRlZCBpbiBhIHNlcGFyYXRlIHByb2Nlc3MgYW5kCi0gICAgLy8gZG9lcyBub3QgaGF2ZSBh
Y2Nlc3MgdG8gV0ZTLCBzbyB3ZSB0cmFuc2xhdGUgdG8gYSBmaWxlOi8vIFVSTC4gTm9ybWFsbHkK
LSAgICAvLyB0aGlzIHdvdWxkIGJlIGEgc2VjdXJpdHkgdmlvbGF0aW9uLCBidXQgc2luY2UgdGhl
IE1lZGlhRWxlbWVudCBoYXMKLSAgICAvLyBhbHJlYWR5IGRvbmUgYSBzZWN1cml0eSBjaGVjayBv
biB0aGUgZmlsZXN5c3RlbTogVVJMIGFzIHBhcnQgb2YgdGhlCi0gICAgLy8gbWVkaWEgcmVzb3Vy
Y2Ugc2VsZWN0aW9uIGFsZ29yaXRobSwgd2Ugc2hvdWxkIGJlIE9LIGhlcmUuCi0gICAgaWYgKG1v
ZGlmaWVkVXJsLnN0YXJ0c1dpdGgoImZpbGVzeXN0ZW06IikpIHsKLSAgICAgICAgVVJMIGt1cmwg
PSBVUkwoVVJMKCksIG1vZGlmaWVkVXJsKTsKLSAgICAgICAgVVJMIG1lZGlhVVJMOwotICAgICAg
ICBXVEY6OlN0cmluZyBmc1BhdGg7Ci0gICAgICAgIEZpbGVTeXN0ZW1UeXBlIGZzVHlwZTsKLSAg
ICAgICAgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlOwotCi0gICAgICAgIC8vIEV4dHJhY3QgdGhl
IHJvb3QgYW5kIGZpbGUgcGF0aHMgZnJvbSBXRlMKLSAgICAgICAgRE9NRmlsZVN5c3RlbUJhc2U6
OmNyYWNrRmlsZVN5c3RlbVVSTChrdXJsLCBmc1R5cGUsIGZzUGF0aCk7Ci0gICAgICAgIGlmIChm
c1R5cGUgPT0gRmlsZVN5c3RlbVR5cGVUZW1wb3JhcnkpCi0gICAgICAgICAgICB0eXBlID0gV2Vi
RmlsZVN5c3RlbTo6VGVtcG9yYXJ5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0eXBlID0g
V2ViRmlsZVN5c3RlbTo6UGVyc2lzdGVudDsKLSAgICAgICAgV1RGOjpTdHJpbmcgZnNSb290ID0g
QmxhY2tCZXJyeTo6UGxhdGZvcm06OldlYkZpbGVTeXN0ZW06OnJvb3RQYXRoRm9yV2ViRmlsZVN5
c3RlbSh0eXBlKTsKLQotICAgICAgICAvLyBCdWlsZCBhIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
ZWN1cml0eU9yaWdpbiBmcm9tIHRoZSBkb2N1bWVudCdzIAotICAgICAgICAvLyBXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbiBhbmQgc2VyaWFsaXplIGl0IHRvIGJ1aWxkIHRoZSBsYXN0Ci0gICAgICAg
IC8vIHBhdGggY29tcG9uZW50Ci0gICAgICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiB3a09y
aWdpbiA9IG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJP
d25pbmdEb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOwotICAgICAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U2VjdXJpdHlPcmlnaW4gYmJPcmlnaW4od2tPcmlnaW4tPnByb3RvY29sKCksIHdr
T3JpZ2luLT5ob3N0KCksIHdrT3JpZ2luLT5wb3J0KCkpOwotICAgICAgICBXVEY6OlN0cmluZyBz
ZWNPcmlnaW4oYmJPcmlnaW4uc2VyaWFsaXplKCdfJykpOwotCi0gICAgICAgIC8vIEJ1aWxkIGEg
ZmlsZTovLyBVUkwgZnJvbSB0aGUgcGF0aCBjb21wb25lbnRzIGFuZCBleHRyYWN0IGl0IHRvIAot
ICAgICAgICAvLyBhIHN0cmluZyBmb3IgZnVydGhlciBwcm9jZXNzaW5nCi0gICAgICAgIG1lZGlh
VVJMLnNldFByb3RvY29sKCJmaWxlIik7Ci0gICAgICAgIG1lZGlhVVJMLnNldFBhdGgoZnNSb290
ICsgIi8iICsgc2VjT3JpZ2luICsgIi8iICsgZnNQYXRoKTsKLSAgICAgICAgbW9kaWZpZWRVcmwg
PSBtZWRpYVVSTC5zdHJpbmcoKTsKLSAgICB9IGVsc2UgaWYgKG1vZGlmaWVkVXJsLnN0YXJ0c1dp
dGgoImZpbGU6Ly8iKSB8fCBtb2RpZmllZFVybC5zdGFydHNXaXRoKCJkYXRhOiIpKSB7Ci0gICAg
ICAgIC8vIFRoZSBRTlggTXVsdGltZWRpYSBGcmFtZXdvcmsgY2Fubm90IGhhbmRsZSBmaWxlbmFt
ZXMgb3IgZGF0YSBjb250YWluaW5nIFVSTCBlc2NhcGUgc2VxdWVuY2VzLgotICAgICAgICBtb2Rp
ZmllZFVybCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtb2RpZmllZFVybCk7Ci0gICAgfQot
Ci0gICAgdm9pZCogdGFiSWQgPSBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkt
Pm1lZGlhUGxheWVySG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSAgICBpbnQg
cGxheWVySUQgPSBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxh
eWVySG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+cGxheWVySUQoKTsKLSAgICBi
b29sIGlzVmlkZW8gPSBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlh
UGxheWVySXNWaWRlbygpOwotCi0gICAgZGVsZXRlR3VhcmRlZE9iamVjdChtX3BsYXRmb3JtUGxh
eWVyKTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgbV9wbGF0Zm9ybVBs
YXllciA9IFBsYXRmb3JtUGxheWVyOjpjcmVhdGUodGhpcywgdGFiSWQsIGlzVmlkZW8sIHRydWUs
IG1vZGlmaWVkVXJsKTsKLSNlbHNlCi0gICAgbV9wbGF0Zm9ybVBsYXllciA9IFBsYXRmb3JtUGxh
eWVyOjpjcmVhdGUodGhpcywgdGFiSWQsIGlzVmlkZW8sIGZhbHNlLCBtb2RpZmllZFVybCk7Ci0j
ZW5kaWYKLQotICAgIFdURjo6U3RyaW5nIGNvb2tpZVBhaXJzOwotICAgIGlmICghdXJsLmlzRW1w
dHkoKSkKLSAgICAgICAgY29va2llUGFpcnMgPSBjb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llKFVS
TChQYXJzZWRVUkxTdHJpbmcsIHVybCksIFdpdGhIdHRwT25seUNvb2tpZXMpOwotICAgIG1fcGxh
dGZvcm1QbGF5ZXItPmxvYWQocGxheWVySUQsIG1vZGlmaWVkVXJsLCBtX3dlYkNvcmVQbGF5ZXIt
PnVzZXJBZ2VudCgpLCBjb29raWVQYWlycyk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpjYW5jZWxMb2FkKCkKLXsKLSAgICBpZiAobV9wbGF0Zm9ybVBsYXllcikKLSAgICAgICAgbV9w
bGF0Zm9ybVBsYXllci0+Y2FuY2VsTG9hZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6cHJlcGFyZVRvUGxheSgpCi17Ci0gICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAg
IG1fcGxhdGZvcm1QbGF5ZXItPnByZXBhcmVUb1BsYXkoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnBsYXkoKQotewotICAgIGlmIChtX3BsYXRmb3JtUGxheWVyKQotICAgICAgICBt
X3BsYXRmb3JtUGxheWVyLT5wbGF5KCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpw
YXVzZSgpCi17Ci0gICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIG1fcGxhdGZvcm1Q
bGF5ZXItPnBhdXNlKCk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c0Z1
bGxzY3JlZW4oKSBjb25zdAotewotICAgIHJldHVybiBoYXNWaWRlbygpOwotfQotCi1JbnRTaXpl
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBjb25zdAotewotICAgIGlmICghbV9w
bGF0Zm9ybVBsYXllcikKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIC8vIENhbm5v
dCByZXR1cm4gZW1wdHkgc2l6ZSwgb3RoZXJ3aXNlIHBhaW50KCkgd2lsbCBuZXZlciBnZXQgY2Fs
bGVkLgotICAgIC8vIEFsc28sIHRoZSB2YWx1ZXMgaGVyZSB3aWxsIGFmZmVjdCB0aGUgYXNwZWN0
IHJhdGlvIG9mIHRoZSBvdXRwdXQgcmVjdGFuZ2xlIHRoYXQgd2lsbAotICAgIC8vIGJlIHVzZWQg
Zm9yIHJlbmRlcmVyaW5nIHRoZSB2aWRlbywgc28gd2UgbXVzdCB0YWtlIFBBUiBpbnRvIGFjY291
bnQuCi0gICAgLy8gTm93LCBob3BlIHRoYXQgbWV0YWRhdGEgaGFzIGJlZW4gcHJvdmlkZWQgYmVm
b3JlIHRoaXMgZ2V0cyBjYWxsZWQgaWYgdGhpcyBpcyBhIHZpZGVvLgotICAgIGRvdWJsZSBwaXhl
bFdpZHRoID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3BsYXRmb3JtUGxheWVyLT5waXhlbFdpZHRo
KCkpOwotICAgIGRvdWJsZSBwaXhlbEhlaWdodCA9IHN0YXRpY19jYXN0PGRvdWJsZT4obV9wbGF0
Zm9ybVBsYXllci0+cGl4ZWxIZWlnaHQoKSk7Ci0gICAgaWYgKCFtX3BsYXRmb3JtUGxheWVyLT5w
aXhlbFdpZHRoKCkgfHwgIW1fcGxhdGZvcm1QbGF5ZXItPnBpeGVsSGVpZ2h0KCkpCi0gICAgICAg
IHBpeGVsV2lkdGggPSBwaXhlbEhlaWdodCA9IDEuMDsKLQotICAgIC8vIFVzZSBmbG9hdGluZyBw
b2ludCBhcml0aG1ldGljIHRvIGVsaW1pbmF0ZSB0aGUgY2hhbmNlIG9mIGludGVnZXIKLSAgICAv
LyBvdmVyZmxvdy4gUEFSIG51bWJlcnMgY2FuIGJlIDUgZGlnaXRzIG9yIG1vcmUuCi0gICAgZG91
YmxlIGFkanVzdGVkU291cmNlV2lkdGggPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fcGxhdGZvcm1Q
bGF5ZXItPnNvdXJjZVdpZHRoKCkpICogcGl4ZWxXaWR0aCAvIHBpeGVsSGVpZ2h0OwotICAgIHJl
dHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWRTb3VyY2VXaWR0aCArIDAuNSks
IG1fcGxhdGZvcm1QbGF5ZXItPnNvdXJjZUhlaWdodCgpKTsKLX0KLQotYm9vbCBNZWRpYVBsYXll
clByaXZhdGU6Omhhc1ZpZGVvKCkgY29uc3QKLXsKLSAgICBpZiAobV9wbGF0Zm9ybVBsYXllcikK
LSAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1QbGF5ZXItPmhhc1ZpZGVvKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXVkaW8oKSBjb25zdAot
ewotICAgIGlmIChtX3BsYXRmb3JtUGxheWVyKQotICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybVBs
YXllci0+aGFzQXVkaW8oKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYg
KG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5kdXJh
dGlvbigpOwotICAgIHJldHVybiAwLjBmOwotfQotCi1zdGF0aWMgY29uc3QgZG91YmxlIFNlZWtT
dWJtaXNzaW9uRGVsYXkgPSAwLjE7IC8vIFJlYXNvbmFibGUgdGhyb3R0bGluZyB2YWx1ZS4KLXN0
YXRpYyBjb25zdCBkb3VibGUgU2hvcnRNZWRpYVRocmVzaG9sZCA9IFNlZWtTdWJtaXNzaW9uRGVs
YXkgKiAyLjA7Ci0KLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25z
dAotewotICAgIGlmICghbV9wbGF0Zm9ybVBsYXllcikKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0K
LSAgICAvLyBGb3IgdmVyeSBzaG9ydCBtZWRpYSBvbiB0aGUgb3JkZXIgb2YgU2Vla1N1Ym1pc3Np
b25EZWxheSB3ZSBnZXQKLSAgICAvLyB1bndhbnRlZCByZXBlYXRzIGlmIHdlIGRvbid0IHJldHVy
biB0aGUgbW9zdCB1cC10by1kYXRlIGN1cnJlbnRUaW1lKCkuCi0gICAgYm9vbCBzaG9ydE1lZGlh
ID0gbV9wbGF0Zm9ybVBsYXllci0+ZHVyYXRpb24oKSA8IFNob3J0TWVkaWFUaHJlc2hvbGQ7Ci0g
ICAgcmV0dXJuIG1fdXNlckRyaXZlblNlZWtUaW1lci5pc0FjdGl2ZSgpICYmICFzaG9ydE1lZGlh
ID8gbV9sYXN0U2Vla1RpbWU6IG1fcGxhdGZvcm1QbGF5ZXItPmN1cnJlbnRUaW1lKCk7Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrKGZsb2F0IHRpbWUpCi17Ci0gICAgaWYgKCFt
X3BsYXRmb3JtUGxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RTZWVrVGltZSA9
IHRpbWU7Ci0gICAgbV9sYXN0U2Vla1RpbWVQZW5kaW5nID0gdHJ1ZTsKLSAgICBpZiAoIW1fdXNl
ckRyaXZlblNlZWtUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICB1c2VyRHJpdmVuU2Vla1RpbWVy
RmlyZWQoMCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1c2VyRHJpdmVuU2Vla1Rp
bWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopCi17Ci0gICAgaWYgKG1fbGFzdFNl
ZWtUaW1lUGVuZGluZykgewotICAgICAgICBtX3BsYXRmb3JtUGxheWVyLT5zZWVrKG1fbGFzdFNl
ZWtUaW1lKTsKLSAgICAgICAgbV9sYXN0U2Vla1RpbWVQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAg
IG1fdXNlckRyaXZlblNlZWtUaW1lci5zdGFydE9uZVNob3QoU2Vla1N1Ym1pc3Npb25EZWxheSk7
Ci0gICAgfQotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2luZygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0
ZShmbG9hdCByYXRlKQotewotICAgIGlmIChtX3BsYXRmb3JtUGxheWVyKQotICAgICAgICBtX3Bs
YXRmb3JtUGxheWVyLT5zZXRSYXRlKHJhdGUpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0
ZTo6cGF1c2VkKCkgY29uc3QKLXsKLSAgICBpZiAobV9wbGF0Zm9ybVBsYXllcikKLSAgICAgICAg
cmV0dXJuIG1fcGxhdGZvcm1QbGF5ZXItPnBhdXNlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCi17Ci0g
ICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIG1fcGxhdGZvcm1QbGF5ZXItPnNldFZv
bHVtZSh2b2x1bWUpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQoYm9v
bCBtdXRlZCkKLXsKLSAgICBpZiAobV9wbGF0Zm9ybVBsYXllcikKLSAgICAgICAgbV9wbGF0Zm9y
bVBsYXllci0+c2V0TXV0ZWQobXV0ZWQpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6
bXV0ZWQoKSBjb25zdAotewotICAgIGlmIChtX3BsYXRmb3JtUGxheWVyKQotICAgICAgICByZXR1
cm4gbV9wbGF0Zm9ybVBsYXllci0+bXV0ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU1l
ZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUo
KSBjb25zdAotewotICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKLX0KLQotTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9yZWFkeVN0YXRlOwotfQotCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1h
eFRpbWVTZWVrYWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAg
ICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5tYXhUaW1lU2Vla2FibGUoKTsKLSAgICByZXR1
cm4gMC4wZjsKLX0KLQotUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGU6
OmJ1ZmZlcmVkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAg
IHJldHVybiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKLQotICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiB0
aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7Ci0gICAgaWYgKGZsb2F0IGJ1ZmZlckxv
YWRlZCA9IG1fcGxhdGZvcm1QbGF5ZXItPmJ1ZmZlckxvYWRlZCgpKQotICAgICAgICB0aW1lUmFu
Z2VzLT5hZGQoMCwgYnVmZmVyTG9hZGVkKTsKLSAgICByZXR1cm4gdGltZVJhbmdlcy5yZWxlYXNl
KCk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBj
b25zdAotewotICAgIGlmICghbV9wbGF0Zm9ybVBsYXllcikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgZmxvYXQgYnVmZmVyTG9hZGVkID0gbV9wbGF0Zm9ybVBsYXllci0+YnVmZmVyTG9h
ZGVkKCk7Ci0gICAgaWYgKGJ1ZmZlckxvYWRlZCA9PSBtX2xhc3RMb2FkaW5nVGltZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9sYXN0TG9hZGluZ1RpbWUgPSBidWZmZXJMb2FkZWQ7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXpl
KGNvbnN0IEludFNpemUmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFtX3BsYXRmb3JtUGxheWVyKQotICAgICAgICByZXR1
cm47Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKHN1cHBvcnRz
QWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSkgewotICAgICAgICAvLyBPbmx5IHByb2Nlc3MgcGFpbnQg
Y2FsbHMgY29taW5nIHZpYSB0aGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgY29kZQotICAgICAg
ICAvLyBwYXRoLCB3aGVyZSB3ZSBnZXQgY2FsbGVkIHdpdGggYSBudWxsIGdyYXBoaWNzIGNvbnRl
eHQuIFNlZQotICAgICAgICAvLyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpkcmF3VGV4dHVyZXMo
KS4gSWdub3JlIGNhbGxzIGZyb20gdGhlIHJlZ3VsYXIKLSAgICAgICAgLy8gcmVuZGVyaW5nIHBh
dGguCi0gICAgICAgIGlmICghY29udGV4dCkKLSAgICAgICAgICAgIG1fcGxhdGZvcm1QbGF5ZXIt
Pm5vdGlmeU91dHB1dFVwZGF0ZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdChyZWN0Lngo
KSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOwotCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGNv
bnRleHQsIHJlY3QpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnRDdXJyZW50
RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmICghaGFzVmlkZW8oKSB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkgfHwgIW1fd2ViQ29yZVBsYXllci0+dmlzaWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkRyYXdhYmxlKiBkc3QgPSBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0
IHBsYXRmb3JtUmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7Ci0gICAgSW50UmVjdCBjbGlwcGVkUmVjdCA9IG1fd2ViQ29yZVBsYXllci0+bWVkaWFQ
bGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJXaW5kb3dDbGlwUmVjdCgpOwotICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpJbnRSZWN0IHBsYXRmb3JtV2luZG93Q2xpcFJlY3QoY2xpcHBlZFJlY3Qu
eCgpLCBjbGlwcGVkUmVjdC55KCksIGNsaXBwZWRSZWN0LndpZHRoKCksIGNsaXBwZWRSZWN0Lmhl
aWdodCgpKTsKLSAgICBtX3BsYXRmb3JtUGxheWVyLT5wYWludChkc3QsIHBsYXRmb3JtUmVjdCwg
cGxhdGZvcm1XaW5kb3dDbGlwUmVjdCk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpo
YXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3QKLXsKLSAgICBpZiAobV9wbGF0Zm9ybVBsYXll
cikKLSAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1QbGF5ZXItPmhhc0F2YWlsYWJsZVZpZGVvRnJh
bWUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpo
YXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LU1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVMb2Fk
VHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZT4obV9wbGF0Zm9ybVBsYXll
ci0+bW92aWVMb2FkVHlwZSgpKTsKLSAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OlVua25vd247Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwcmVwYXJlRm9yUmVuZGVyaW5nKCkKLXsKLSAg
ICBpZiAobV9wbGF0Zm9ybVBsYXllcikKLSAgICAgICAgbV9wbGF0Zm9ybVBsYXllci0+cHJlcGFy
ZUZvclJlbmRlcmluZygpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVzaXplU291
cmNlRGltZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX3dlYkNvcmVQbGF5ZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5t
ZWRpYVBsYXllcklzVmlkZW8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UgZG9u
J3Qga25vdyB3aGF0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB2aWRlbyBzb3VyY2UgaXMs
IHRoZW4gd2UgbmVlZCB0byBzZXQgaXQgdG8gc29tZXRoaW5nIHNhbmUuCi0gICAgaWYgKG1fcGxh
dGZvcm1QbGF5ZXItPnNvdXJjZVdpZHRoKCkgJiYgbV9wbGF0Zm9ybVBsYXllci0+c291cmNlSGVp
Z2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheW91dFJlY3QgcmVjdCA9IG1fd2ViQ29y
ZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJDb250ZW50Qm94UmVjdCgp
OwotICAgIG1fcGxhdGZvcm1QbGF5ZXItPnNldFNvdXJjZURpbWVuc2lvbihyZWN0LndpZHRoKCku
dG9VbnNpZ25lZCgpLCByZWN0LmhlaWdodCgpLnRvVW5zaWduZWQoKSk7Ci19Ci0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzZXRGdWxsc2NyZWVuV2ViUGFnZUNsaWVudChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYlBhZ2VDbGllbnQqIGNsaWVudCkKLXsKLSAgICBpZiAobV9mdWxsc2NyZWVuV2Vi
UGFnZUNsaWVudCA9PSBjbGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZnVsbHNjcmVl
bldlYlBhZ2VDbGllbnQgPSBjbGllbnQ7Ci0gICAgbV9wbGF0Zm9ybVBsYXllci0+dG9nZ2xlRnVs
bHNjcmVlbihjbGllbnQpOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyByZXBhaW50IGlzIG5lZWRl
ZCBlc3BlY2lhbGx5IGlmIHZpZGVvIGlzIHBhdXNlZCBhbmQKLSAgICAvLyBmdWxsc2NyZWVuIGlz
IGV4aXRpbmcsIHNvIHRoYXQgYSBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KCkgaXMKLSAgICAv
LyB0cmlnZ2VyZWQgYW5kIHRoZSBjb2RlIGluIG91dHB1dFVwZGF0ZSgpIHNldHMgdGhlIGNvcnJl
Y3Qgd2luZG93Ci0gICAgLy8gcmVjdGFuZ2xlLgotICAgIGlmICghY2xpZW50KQotICAgICAgICBt
X3dlYkNvcmVQbGF5ZXItPnJlcGFpbnQoKTsKLX0KLQotQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpXaW5kb3cqIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0V2luZG93KCkKLXsKLSAgICBy
ZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+Z2V0V2luZG93KCk7Ci19Ci0KLUJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6V2luZG93KiBNZWRpYVBsYXllclByaXZhdGU6OmdldFBlZXJXaW5k
b3coY29uc3QgY2hhciogdW5pcXVlSUQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1Q
bGF5ZXItPmdldFBlZXJXaW5kb3codW5pcXVlSUQpOwotfQotCi1CbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6SW50UmVjdCBNZWRpYVBsYXllclByaXZhdGU6OmdldFdpbmRvd1NjcmVlblJlY3QoKSBjb25z
dAotewotICAgIHVuc2lnbmVkIHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0gICAgbV9wbGF0Zm9ybVBs
YXllci0+Z2V0V2luZG93UG9zaXRpb24oeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgcmV0dXJu
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQot
Ci1jb25zdCBjaGFyKiBNZWRpYVBsYXllclByaXZhdGU6Om1tckNvbnRleHROYW1lKCkKLXsKLSAg
ICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+bW1yQ29udGV4dE5hbWUoKTsKLX0KLQotZmxvYXQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpwZXJjZW50TG9hZGVkKCkKLXsKLSAgICBpZiAoIW1fcGxhdGZv
cm1QbGF5ZXItPmR1cmF0aW9uKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZmxvYXQgYnVm
ZmVyZWQgPSAwOwotICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gdGhpcy0+YnVm
ZmVyZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGltZVJhbmdlcy0+bGVuZ3Ro
KCk7ICsraSkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGlnbm9yZWRFeGNlcHRpb247Ci0gICAg
ICAgIGZsb2F0IHN0YXJ0ID0gdGltZVJhbmdlcy0+c3RhcnQoaSwgaWdub3JlZEV4Y2VwdGlvbik7
Ci0gICAgICAgIGZsb2F0IGVuZCA9IHRpbWVSYW5nZXMtPmVuZChpLCBpZ25vcmVkRXhjZXB0aW9u
KTsKLSAgICAgICAgYnVmZmVyZWQgKz0gZW5kIC0gc3RhcnQ7Ci0gICAgfQotCi0gICAgZmxvYXQg
bG9hZGVkID0gYnVmZmVyZWQgLyBtX3BsYXRmb3JtUGxheWVyLT5kdXJhdGlvbigpOwotICAgIHJl
dHVybiBsb2FkZWQ7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c291cmNlV2lk
dGgoKQotewotICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5zb3VyY2VXaWR0aCgpOwotfQot
Ci11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OnNvdXJjZUhlaWdodCgpCi17Ci0gICAgcmV0
dXJuIG1fcGxhdGZvcm1QbGF5ZXItPnNvdXJjZUhlaWdodCgpOwotfQotCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0QWxsb3dQUFNWb2x1bWVVcGRhdGVzKGJvb2wgYWxsb3cpCi17Ci0gICAg
aWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5z
ZXRBbGxvd1BQU1ZvbHVtZVVwZGF0ZXMoYWxsb3cpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6dXBkYXRlU3RhdGVzKCkKLXsKLSAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9s
ZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOwotICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0
YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7Ci0KLSAgICBQbGF0Zm9ybVBsYXllcjo6
RXJyb3IgY3VycmVudEVycm9yID0gbV9wbGF0Zm9ybVBsYXllci0+ZXJyb3IoKTsKLQotICAgIGlm
IChjdXJyZW50RXJyb3IgIT0gUGxhdGZvcm1QbGF5ZXI6Ok1lZGlhT0spIHsKLSAgICAgICAgbV9y
ZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICBpZiAoY3VycmVu
dEVycm9yID09IFBsYXRmb3JtUGxheWVyOjpNZWRpYURlY29kZUVycm9yKQotICAgICAgICAgICAg
bV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RGVjb2RlRXJyb3I7Ci0gICAgICAgIGVsc2Ug
aWYgKGN1cnJlbnRFcnJvciA9PSBQbGF0Zm9ybVBsYXllcjo6TWVkaWFNZXRhRGF0YUVycm9yCi0g
ICAgICAgICAgICB8fCBjdXJyZW50RXJyb3IgPT0gUGxhdGZvcm1QbGF5ZXI6Ok1lZGlhQXVkaW9S
ZWNlaXZlRXJyb3IKLSAgICAgICAgICAgIHx8IGN1cnJlbnRFcnJvciA9PSBQbGF0Zm9ybVBsYXll
cjo6TWVkaWFWaWRlb1JlY2VpdmVFcnJvcikKLSAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcjsKLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2gg
KG1fcGxhdGZvcm1QbGF5ZXItPm1lZGlhU3RhdGUoKSkgewotICAgICAgICBjYXNlIFBsYXRmb3Jt
UGxheWVyOjpNTVJQbGF5U3RhdGVJZGxlOgotICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6SWRsZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBsYXRm
b3JtUGxheWVyOjpNTVJQbGF5U3RhdGVQbGF5aW5nOgotICAgICAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFBsYXRmb3JtUGxheWVyOjpNTVJQbGF5U3RhdGVTdG9wcGVkOgotICAgICAgICAgICAgbV9u
ZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFBsYXRmb3JtUGxheWVyOjpNTVJQbGF5U3RhdGVVbmtub3duOgotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2gg
KG1fcGxhdGZvcm1QbGF5ZXItPnN0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVBsYXll
cjo6TVBfU1RBVEVfSURMRToKLSAgICAgICAgICAgIGlmIChpc0Z1bGxzY3JlZW4oKSkKLSAgICAg
ICAgICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxh
eWVyRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBs
YXRmb3JtUGxheWVyOjpNUF9TVEFURV9BQ1RJVkU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBQbGF0Zm9ybVBsYXllcjo6TVBfU1RBVEVfVU5TVVBQT1JURUQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGlmICgoZHVyYXRpb24oKSB8fCBtb3ZpZUxvYWRUeXBlKCkgPT0gTWVkaWFQbGF5
ZXI6OkxpdmVTdHJlYW0pCi0gICAgICAgICAgICAmJiBtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5
ZXI6OkhhdmVFbm91Z2hEYXRhKQotICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5
ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgIH0KLQotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xk
UmVhZHlTdGF0ZSkKLSAgICAgICAgbV93ZWJDb3JlUGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgp
OwotICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUpCi0gICAgICAgIG1f
d2ViQ29yZVBsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwotfQotCi0vLyBJUGxhdGZvcm1Q
bGF5ZXJMaXN0ZW5lciBjYWxsYmFja3MgaW1wbGVtZW50YXRpb24KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpvblN0YXRlQ2hhbmdlZChQbGF0Zm9ybVBsYXllcjo6TXBTdGF0ZSkKLXsKLSAgICB1
cGRhdGVTdGF0ZXMoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uTWVkaWFTdGF0
dXNDaGFuZ2VkKFBsYXRmb3JtUGxheWVyOjpNTVJQbGF5U3RhdGUpCi17Ci0gICAgdXBkYXRlU3Rh
dGVzKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvbkVycm9yKFBsYXRmb3JtUGxh
eWVyOjpFcnJvcikKLXsKLSAgICB1cGRhdGVTdGF0ZXMoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6Om9uRHVyYXRpb25DaGFuZ2VkKGZsb2F0KQotewotICAgIHVwZGF0ZVN0YXRlcygp
OwotICAgIG1fd2ViQ29yZVBsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpvblRpbWVDaGFuZ2VkKGZsb2F0KQotewotICAgIG1fd2ViQ29yZVBs
YXllci0+dGltZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uUGF1
c2VTdGF0ZUNoYW5nZWQoKQotewotICAgIGlmICghaXNGdWxsc2NyZWVuKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFBhdXNlZCBzdGF0ZSBjaGFuZ2Ugbm90IGR1ZSB0byBsb2NhbCBjb250
cm9sbGVyLgotICAgIGlmIChtX3BsYXRmb3JtUGxheWVyLT5pc1BhdXNlZCgpKQotICAgICAgICBt
X3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyUGF1c2UoKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgLy8gVGhlIEhNSSBmdWxsc2NyZWVuIHdpZGdldCBoYXMgcmVz
dW1lZCBwbGF5LiBDaGVjayBpZiB0aGUKLSAgICAgICAgLy8gcGF1c2UgdGltZW91dCBvY2N1cnJl
ZC4KLSAgICAgICAgbV9wbGF0Zm9ybVBsYXllci0+cHJvY2Vzc1BhdXNlVGltZW91dElmTmVjZXNz
YXJ5KCk7Ci0gICAgICAgIG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVk
aWFQbGF5ZXJQbGF5KCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25S
YXRlQ2hhbmdlZChmbG9hdCkKLXsKLSAgICBtX3dlYkNvcmVQbGF5ZXItPnJhdGVDaGFuZ2VkKCk7
Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvblZvbHVtZUNoYW5nZWQoZmxvYXQgdm9s
dW1lKQotewotICAgIG1fd2ViQ29yZVBsYXllci0+dm9sdW1lQ2hhbmdlZCh2b2x1bWUpOwotfQot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25SZXBhaW50KCkKLXsKLSAgICBtX3dlYkNvcmVQ
bGF5ZXItPnJlcGFpbnQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uU2l6ZUNo
YW5nZWQoKQotewotICAgIHJlc2l6ZVNvdXJjZURpbWVuc2lvbnMoKTsKLSAgICBpZiAoaGFzVmlk
ZW8oKSkKLSAgICAgICAgbV93ZWJDb3JlUGxheWVyLT5zaXplQ2hhbmdlZCgpOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6b25QbGF5Tm90aWZpZWQoKQotewotICAgIG1fd2ViQ29yZVBs
YXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJQbGF5KCk7Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpvblBhdXNlTm90aWZpZWQoKQotewotICAgIG1fd2ViQ29yZVBs
YXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJQYXVzZSgpOwotfQotCi1zdGF0
aWMgY29uc3QgaW50IHBvcHVwRGlhbG9nSW50ZXJ2YWwgPSAxMDsKLXN0YXRpYyBjb25zdCBkb3Vi
bGUgY2hlY2tNZXRhZGF0YVJlYWR5SW50ZXJ2YWwgPSAwLjU7Ci12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6b25XYWl0TWV0YWRhdGFOb3RpZmllZChib29sIGhhc0ZpbmlzaGVkLCBpbnQgdGltZVdh
aXRlZCkKLXsKLSAgICBpZiAoIWhhc0ZpbmlzaGVkKSB7Ci0gICAgICAgIGlmICghbV93YWl0TWV0
YWRhdGFUaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcG9w
dXAgZGlhbG9nIGV2ZXJ5IDEwIHNlY29uZHMgYWZ0ZXIgbWV0YWRhdGEgc3RhcnQgdG8gbG9hZC4K
LSAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHNldCBvbmx5IG9uY2UgYXQgdGhlIGZpcnN0
IHRpbWUgd2hlbiB1c2VyIHByZXNzIHRoZSBwbGF5IGJ1dHRvbi4KLSAgICAgICAgICAgIG1fd2Fp
dE1ldGFkYXRhUG9wRGlhbG9nQ291bnRlciA9IHN0YXRpY19jYXN0PGludD4odGltZVdhaXRlZCAv
IGNoZWNrTWV0YWRhdGFSZWFkeUludGVydmFsKTsKLSAgICAgICAgICAgIG1fd2FpdE1ldGFkYXRh
VGltZXIuc3RhcnRPbmVTaG90KGNoZWNrTWV0YWRhdGFSZWFkeUludGVydmFsKTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAobV93YWl0TWV0YWRhdGFUaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAg
ICAgIG1fd2FpdE1ldGFkYXRhVGltZXIuc3RvcCgpOwotICAgICAgICBtX3dhaXRNZXRhZGF0YVBv
cERpYWxvZ0NvdW50ZXIgPSAwOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OndhaXRNZXRhZGF0YVRpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopCi17Ci0g
ICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXItPmlzTWV0YWRhdGFSZWFkeSgpKSB7Ci0gICAgICAgIG1f
d2FpdE1ldGFkYXRhUG9wRGlhbG9nQ291bnRlciA9IDA7Ci0gICAgICAgIG1fcGxhdGZvcm1QbGF5
ZXItPnBsYXlXaXRoTWV0YWRhdGFSZWFkeSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc3RhdGljIGNvbnN0IGludCBoaXRUaW1lVG9Qb3B1cERpYWxvZyA9IHN0YXRpY19jYXN0PGlu
dD4ocG9wdXBEaWFsb2dJbnRlcnZhbCAvIGNoZWNrTWV0YWRhdGFSZWFkeUludGVydmFsKTsKLSAg
ICBtX3dhaXRNZXRhZGF0YVBvcERpYWxvZ0NvdW50ZXIrKzsKLSAgICBpZiAobV93YWl0TWV0YWRh
dGFQb3BEaWFsb2dDb3VudGVyIDwgaGl0VGltZVRvUG9wdXBEaWFsb2cpIHsKLSAgICAgICAgbV93
YWl0TWV0YWRhdGFUaW1lci5zdGFydE9uZVNob3QoY2hlY2tNZXRhZGF0YVJlYWR5SW50ZXJ2YWwp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fd2FpdE1ldGFkYXRhUG9wRGlhbG9nQ291
bnRlciA9IDA7Ci0KLSAgICBQbGF0Zm9ybVBsYXllcjo6RGlhbG9nUmVzdWx0IHdhaXQgPSBtX3Bs
YXRmb3JtUGxheWVyLT5zaG93RXJyb3JEaWFsb2coUGxhdGZvcm1QbGF5ZXI6Ok1lZGlhTWV0YURh
dGFUaW1lb3V0RXJyb3IpOwotICAgIGlmICh3YWl0ID09IFBsYXRmb3JtUGxheWVyOjpEaWFsb2dF
bWVyZ2VuY3lFeGl0KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHdhaXQgPT0gUGxhdGZvcm1Q
bGF5ZXI6OkRpYWxvZ1Jlc3BvbnNlMCkKLSAgICAgICAgb25QYXVzZU5vdGlmaWVkKCk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGlmIChtX3BsYXRmb3JtUGxheWVyLT5pc01ldGFkYXRhUmVhZHkoKSkK
LSAgICAgICAgICAgIG1fcGxhdGZvcm1QbGF5ZXItPnBsYXlXaXRoTWV0YWRhdGFSZWFkeSgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3dhaXRNZXRhZGF0YVRpbWVyLnN0YXJ0T25lU2hv
dChjaGVja01ldGFkYXRhUmVhZHlJbnRlcnZhbCk7Ci0gICAgfQotfQotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uQnVmZmVyaW5n
KGJvb2wgZmxhZykKLXsKLSAgICBzZXRCdWZmZXJpbmcoZmxhZyk7Ci19Ci0jZW5kaWYKLQotc3Rh
dGljIFByb3RlY3Rpb25TcGFjZSBnZW5lcmF0ZVByb3RlY3Rpb25TcGFjZUZyb21NTVJBdXRoQ2hh
bGxlbmdlKGNvbnN0IE1NUkF1dGhDaGFsbGVuZ2UmIGF1dGhDaGFsbGVuZ2UpCi17Ci0gICAgVVJM
IHVybChQYXJzZWRVUkxTdHJpbmcsIFdURjo6U3RyaW5nKGF1dGhDaGFsbGVuZ2UudXJsKCkuY19z
dHIoKSkpOwotICAgIEFTU0VSVCh1cmwuaXNWYWxpZCgpKTsKLQotICAgIHJldHVybiBQcm90ZWN0
aW9uU3BhY2UodXJsLmhvc3QoKSwgdXJsLnBvcnQoKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8UHJv
dGVjdGlvblNwYWNlU2VydmVyVHlwZT4oYXV0aENoYWxsZW5nZS5zZXJ2ZXJUeXBlKCkpLAotICAg
ICAgICBhdXRoQ2hhbGxlbmdlLnJlYWxtKCkuY19zdHIoKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWU+KGF1dGhDaGFsbGVuZ2UuYXV0aFNj
aGVtZSgpKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvbkF1dGhlbnRpY2F0aW9u
TmVlZGVkKE1NUkF1dGhDaGFsbGVuZ2UmIGF1dGhDaGFsbGVuZ2UpCi17Ci0gICAgVVJMIHVybChQ
YXJzZWRVUkxTdHJpbmcsIFdURjo6U3RyaW5nKGF1dGhDaGFsbGVuZ2UudXJsKCkuY19zdHIoKSkp
OwotICAgIGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUHJvdGVj
dGlvblNwYWNlIHByb3RlY3Rpb25TcGFjZSA9IGdlbmVyYXRlUHJvdGVjdGlvblNwYWNlRnJvbU1N
UkF1dGhDaGFsbGVuZ2UoYXV0aENoYWxsZW5nZSk7Ci0gICAgQ3JlZGVudGlhbCBjcmVkZW50aWFs
ID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChwcm90ZWN0aW9uU3BhY2UpOwotICAgIGlmICghY3Jl
ZGVudGlhbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbm90aWZ5Q2hhbGxlbmdlUmVzdWx0KHVybCwg
cHJvdGVjdGlvblNwYWNlLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVN1Y2Nlc3MsIGNyZWRlbnRp
YWwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9pc0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdpbmcgPSB0cnVlOwotICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlcjo6aW5z
dGFuY2UoKS0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UodXJsLCBwcm90ZWN0aW9uU3BhY2UsIGNy
ZWRlbnRpYWwsCi0gICAgICAgIHRoaXMsIG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGll
bnQoKS0+bWVkaWFQbGF5ZXJIb3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om5vdGlmeUNoYWxsZW5nZVJlc3VsdChjb25zdCBV
UkwmIHVybCwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VS
ZXN1bHQgcmVzdWx0LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIG1faXNB
dXRoZW50aWNhdGlvbkNoYWxsZW5naW5nID0gZmFsc2U7Ci0KLSAgICBpZiAocmVzdWx0ICE9IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU3VjY2VzcyB8fCAhdXJsLmlzVmFsaWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9wbGF0Zm9ybVBsYXllci0+cmVsb2FkV2l0aENyZWRlbnRpYWwoY3Jl
ZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSwgc3RhdGljX2Nhc3Q8TU1SQXV0
aENoYWxsZW5nZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlPihjcmVkZW50aWFsLnBlcnNpc3RlbmNl
KCkpKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uQXV0aGVudGljYXRpb25BY2Nl
cHRlZChjb25zdCBNTVJBdXRoQ2hhbGxlbmdlJiBhdXRoQ2hhbGxlbmdlKSBjb25zdAotewotICAg
IFVSTCB1cmwoUGFyc2VkVVJMU3RyaW5nLCBXVEY6OlN0cmluZyhhdXRoQ2hhbGxlbmdlLnVybCgp
LmNfc3RyKCkpKTsKLSAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2UgPSBnZW5lcmF0ZVByb3RlY3Rpb25T
cGFjZUZyb21NTVJBdXRoQ2hhbGxlbmdlKGF1dGhDaGFsbGVuZ2UpOwotICAgIENyZWRlbnRpYWwg
c2F2ZWRDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChwcm90ZWN0aW9uU3BhY2Up
OwotICAgIGlmIChzYXZlZENyZWRlbnRpYWwuaXNFbXB0eSgpKQotICAgICAgICBDcmVkZW50aWFs
U3RvcmFnZTo6c2V0KENyZWRlbnRpYWwoYXV0aENoYWxsZW5nZS51c2VybmFtZSgpLmNfc3RyKCks
IGF1dGhDaGFsbGVuZ2UucGFzc3dvcmQoKS5jX3N0cigpLCBzdGF0aWNfY2FzdDxDcmVkZW50aWFs
UGVyc2lzdGVuY2U+KGF1dGhDaGFsbGVuZ2UucGVyc2lzdGVuY2UoKSkpLCBwcm90ZWN0aW9uU3Bh
Y2UsIHVybCk7Ci19Ci0KLWludCBNZWRpYVBsYXllclByaXZhdGU6Om9uU2hvd0Vycm9yRGlhbG9n
KFBsYXRmb3JtUGxheWVyOjpFcnJvciB0eXBlKQotewotICAgIHVzaW5nIG5hbWVzcGFjZSBCbGFj
a0JlcnJ5OjpXZWJLaXQ7Ci0KLSAgICBXZWJQYWdlQ2xpZW50OjpBbGVydFR5cGUgYXR5cGU7Ci0g
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBQbGF0Zm9ybVBsYXllcjo6TWVkaWFPSzoKLSAg
ICAgICAgYXR5cGUgPSBXZWJQYWdlQ2xpZW50OjpNZWRpYU9LOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBsYXRmb3JtUGxheWVyOjpNZWRpYURlY29kZUVycm9yOgotICAgICAgICBhdHlwZSA9
IFdlYlBhZ2VDbGllbnQ6Ok1lZGlhRGVjb2RlRXJyb3I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUGxhdGZvcm1QbGF5ZXI6Ok1lZGlhTWV0YURhdGFFcnJvcjoKLSAgICAgICAgYXR5cGUgPSBX
ZWJQYWdlQ2xpZW50OjpNZWRpYU1ldGFEYXRhRXJyb3I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUGxhdGZvcm1QbGF5ZXI6Ok1lZGlhTWV0YURhdGFUaW1lb3V0RXJyb3I6Ci0gICAgICAgIGF0
eXBlID0gV2ViUGFnZUNsaWVudDo6TWVkaWFNZXRhRGF0YVRpbWVvdXRFcnJvcjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybVBsYXllcjo6TWVkaWFOb01ldGFEYXRhRXJyb3I6Ci0g
ICAgICAgIGF0eXBlID0gV2ViUGFnZUNsaWVudDo6TWVkaWFOb01ldGFEYXRhRXJyb3I7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZvcm1QbGF5ZXI6Ok1lZGlhVmlkZW9SZWNlaXZlRXJy
b3I6Ci0gICAgICAgIGF0eXBlID0gV2ViUGFnZUNsaWVudDo6TWVkaWFWaWRlb1JlY2VpdmVFcnJv
cjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybVBsYXllcjo6TWVkaWFBdWRpb1Jl
Y2VpdmVFcnJvcjoKLSAgICAgICAgYXR5cGUgPSBXZWJQYWdlQ2xpZW50OjpNZWRpYUF1ZGlvUmVj
ZWl2ZUVycm9yOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRmb3JtUGxheWVyOjpNZWRp
YUludmFsaWRFcnJvcjoKLSAgICAgICAgYXR5cGUgPSBXZWJQYWdlQ2xpZW50OjpNZWRpYUludmFs
aWRFcnJvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgTE9HKE1lZGlh
LCAiQWxlcnQgdHlwZSBkb2VzIG5vdCBleGlzdC4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAg
IH0KLSAgICByZXR1cm4gbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRp
YVBsYXllckhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnNob3dBbGVydERpYWxv
ZyhhdHlwZSk7Ci19Ci0KLXN0YXRpYyBXZWJNZWRpYVN0cmVhbVNvdXJjZSB0b1dlYk1lZGlhU3Ry
ZWFtU291cmNlKE1lZGlhU3RyZWFtU291cmNlKiBzcmMpCi17Ci0gICAgcmV0dXJuIFdlYk1lZGlh
U3RyZWFtU291cmNlKHNyYy0+aWQoKSwgc3RhdGljX2Nhc3Q8V2ViTWVkaWFTdHJlYW1Tb3VyY2U6
OlR5cGU+KHNyYy0+dHlwZSgpKSwgc3JjLT5uYW1lKCkpOwotfQotCi1zdGF0aWMgV2ViTWVkaWFT
dHJlYW1Qcml2YXRlIHRvV2ViTWVkaWFTdHJlYW1Qcml2YXRlKE1lZGlhU3RyZWFtUHJpdmF0ZSog
ZCkKLXsKLSAgICB2ZWN0b3I8V2ViTWVkaWFTdHJlYW1Tb3VyY2U+IGF1ZGlvU291cmNlczsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGQtPm51bWJlck9mQXVkaW9Db21wb25lbnRzKCk7IGkr
KykKLSAgICAgICAgYXVkaW9Tb3VyY2VzLnB1c2hfYmFjayh0b1dlYk1lZGlhU3RyZWFtU291cmNl
KGQtPmF1ZGlvQ29tcG9uZW50KGkpLT5zb3VyY2UoKSkpOwotCi0gICAgdmVjdG9yPFdlYk1lZGlh
U3RyZWFtU291cmNlPiB2aWRlb1NvdXJjZXM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBk
LT5udW1iZXJPZlZpZGVvQ29tcG9uZW50cygpOyBpKyspCi0gICAgICAgIHZpZGVvU291cmNlcy5w
dXNoX2JhY2sodG9XZWJNZWRpYVN0cmVhbVNvdXJjZShkLT52aWRlb0NvbXBvbmVudChpKS0+c291
cmNlKCkpKTsKLQotICAgIHJldHVybiBXZWJNZWRpYVN0cmVhbVByaXZhdGUoZC0+aWQoKSwgYXVk
aW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpOwotfQotCi1XZWJNZWRpYVN0cmVhbVByaXZhdGUgTWVk
aWFQbGF5ZXJQcml2YXRlOjpsb29rdXBNZWRpYVN0cmVhbShjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nJiB1cmwpCi17Ci0gICAgTWVkaWFTdHJlYW1Qcml2YXRlKiBkZXNjcmlwdG9y
ID0gTWVkaWFTdHJlYW1SZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29rdXBNZWRpYVN0cmVhbVByaXZh
dGUoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHVybC5jX3N0cigpKSk7Ci0gICAgaWYgKCFkZXNjcmlw
dG9yKQotICAgICAgICByZXR1cm4gV2ViTWVkaWFTdHJlYW1Qcml2YXRlKCk7Ci0KLSAgICByZXR1
cm4gdG9XZWJNZWRpYVN0cmVhbVByaXZhdGUoZGVzY3JpcHRvcik7Ci19Ci0KLUJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6V2luZG93KiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3Jt
V2luZG93KCkKLXsKLSAgICByZXR1cm4gbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVu
dCgpLT5tZWRpYVBsYXllckhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnBsYXRm
b3JtV2luZG93KCk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjppc1Byb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViQ29yZVBsYXllci0+bWVkaWFQ
bGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwotfQot
Ci1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNGdWxsc2NyZWVuKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9mdWxsc2NyZWVuV2ViUGFnZUNsaWVudDsKLX0KLQotYm9vbCBNZWRpYVBsYXllclBy
aXZhdGU6OmlzRWxlbWVudFBhdXNlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViQ29yZVBs
YXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJJc1BhdXNlZCgpOwotfQotCi1i
b29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNUYWJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckhvc3RX
aW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPmlzVmlzaWJsZSgpOwotfQotCi1ib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXIpCi0gICAgICAgIHJldHVybiBtX3BsYXRmb3JtUGxh
eWVyLT5zdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotc3RhdGljIGNvbnN0IGRvdWJs
ZSBCdWZmZXJpbmdBbmltYXRpb25EZWxheSA9IDEuMCAvIDI0Owotc3RhdGljIHVuc2lnbmVkKiBz
X2J1ZmZlcmluZ0ltYWdlRGF0YSA9IDA7Ci1zdGF0aWMgSW50U2l6ZSBzX2J1ZmZlcmluZ0ltYWdl
U2l6ZTsKLQotUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTWVkaWEo
KSBjb25zdAotewotICAgIFBsYXRmb3JtTWVkaWEgcG07Ci0gICAgcG0udHlwZSA9IFBsYXRmb3Jt
TWVkaWE6OlFOWE1lZGlhUGxheWVyVHlwZTsKLSAgICBwbS5tZWRpYS5xbnhNZWRpYVBsYXllciA9
IGNvbnN0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlKj4odGhpcyk7Ci0gICAgcmV0dXJuIHBtOwot
fQotCi1QbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTGF5ZXIoKSBj
b25zdAotewotICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIpCi0gICAgICAgIHJldHVybiBtX3BsYXRm
b3JtTGF5ZXIuZ2V0KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRCdWZm
ZXJpbmdJbWFnZURhdGEoKQotewotICAgIHN0YXRpYyBib29sIGxvYWRlZCA9IGZhbHNlOwotICAg
IGlmICghbG9hZGVkKSB7Ci0gICAgICAgIHN0YXRpYyBJbWFnZSogYnVmZmVyaW5nSWNvbiA9IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidmlkYnVmZmVyIikubGVha1JlZigpOwotCi0gICAg
ICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlID0gYnVmZmVyaW5nSWNvbi0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBsb2FkZWQgPSB0cnVlOwotICAgICAgICBzX2J1ZmZlcmlu
Z0ltYWdlU2l6ZSA9IGJ1ZmZlcmluZ0ljb24tPnNpemUoKTsKLSAgICAgICAgaW50IGJ1ZlNpemUg
PSBidWZmZXJpbmdJY29uLT5kZWNvZGVkU2l6ZSgpOwotICAgICAgICBzX2J1ZmZlcmluZ0ltYWdl
RGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkKj4obWFsbG9jKGJ1ZlNpemUpKTsKLQotICAgICAg
ICBuYXRpdmVJbWFnZS0+cmVhZFBpeGVscyhzX2J1ZmZlcmluZ0ltYWdlRGF0YSwgc19idWZmZXJp
bmdJbWFnZVNpemUud2lkdGgoKSAqIHNfYnVmZmVyaW5nSW1hZ2VTaXplLmhlaWdodCgpKTsKLQot
ICAgICAgICBidWZmZXJpbmdJY29uLT5kZXJlZigpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OmJ1ZmZlcmluZ1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRl
PiopCi17Ci0gICAgaWYgKG1fc2hvd0J1ZmZlcmluZ0ltYWdlKSB7Ci0gICAgICAgIGlmICghaXNG
dWxsc2NyZWVuKCkgJiYgbV9wbGF0Zm9ybUxheWVyKQotICAgICAgICAgICAgbV9wbGF0Zm9ybUxh
eWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICAgICAgbV9idWZmZXJpbmdUaW1lci5zdGFydE9u
ZVNob3QoQnVmZmVyaW5nQW5pbWF0aW9uRGVsYXkpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNldEJ1ZmZlcmluZyhib29sIGJ1ZmZlcmluZykKLXsKLSAgICBpZiAoIW1f
d2ViQ29yZVBsYXllciB8fCAhbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpIHx8
ICFtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVySXNWaWRl
bygpKQotICAgICAgICBidWZmZXJpbmcgPSBmYWxzZTsgLy8gQnVmZmVyaW5nIGFuaW1hdGlvbiBu
b3QgdmlzaWJsZSBmb3IgYXVkaW8uCi0KLSAgICBpZiAoYnVmZmVyaW5nICE9IG1fc2hvd0J1ZmZl
cmluZ0ltYWdlKSB7Ci0gICAgICAgIG1fc2hvd0J1ZmZlcmluZ0ltYWdlID0gYnVmZmVyaW5nOwot
ICAgICAgICBpZiAoYnVmZmVyaW5nKSB7Ci0gICAgICAgICAgICBsb2FkQnVmZmVyaW5nSW1hZ2VE
YXRhKCk7Ci0gICAgICAgICAgICBtX2J1ZmZlcmluZ1RpbWVyLnN0YXJ0T25lU2hvdChCdWZmZXJp
bmdBbmltYXRpb25EZWxheSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9idWZmZXJp
bmdUaW1lci5zdG9wKCk7Ci0KLSAgICAgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKLSAgICAgICAg
ICAgIG1fcGxhdGZvcm1MYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgfQotfQotCi1zdGF0
aWMgdW5zaWduZWQgYWxsb2NhdGVUZXh0dXJlSWQoKQotewotICAgIHVuc2lnbmVkIHRleGlkOwot
ICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleGlkKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIHRleGlkKTsKLSAgICAvLyBEbyBiYXNpYyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6
ZS4KLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgLy8gTlBPVCB0ZXh0dXJlcyBpbiBH
TCBFUyBvbmx5IHdvcmsgd2hlbiB0aGUgd3JhcCBtb2RlIGlzIHNldCB0byBHTF9DTEFNUF9UT19F
REdFLgotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICByZXR1cm4gdGV4aWQ7
Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkcmF3QnVmZmVyaW5nQW5pbWF0aW9uKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEdyYXBoaWNzOjpHTEVTMlBy
b2dyYW0mIHByb2dyYW0pCi17Ci0gICAgaWYgKG1fc2hvd0J1ZmZlcmluZ0ltYWdlICYmIHNfYnVm
ZmVyaW5nSW1hZ2VEYXRhICYmICFpc0Z1bGxzY3JlZW4oKSkgewotICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBtYXRyaXg7Ci0KLSAgICAgICAgLy8gUm90YXRlIHRo
ZSBidWZmZXJpbmcgaW5kaWNhdG9yIHNvIHRoYXQgaXQgdGFrZXMgMSBzZWNvbmQgdG8gZG8gMSBy
ZXZvbHV0aW9uLgotICAgICAgICB0aW1lc3BlYyB0aW1lOwotICAgICAgICBjbG9ja19nZXR0aW1l
KENMT0NLX01PTk9UT05JQywgJnRpbWUpOwotICAgICAgICByZW5kZXJNYXRyaXgucm90YXRlKHRp
bWUudHZfbnNlYyAvIDEwMDAwMDAwMDAuMCAqIDM2MC4wKTsKLQotICAgICAgICBzdGF0aWMgYm9v
bCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgdW5zaWduZWQgdGV4SWQgPSBh
bGxvY2F0ZVRleHR1cmVJZCgpOwotICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IHRleElkKTsKLSAgICAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICAgICAgaW5pdGlh
bGl6ZWQgPSB0cnVlOwotICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IEdMX1JHQkEsIHNfYnVmZmVyaW5nSW1hZ2VTaXplLndpZHRoKCksIHNfYnVmZmVyaW5nSW1hZ2VT
aXplLmhlaWdodCgpLAotICAgICAgICAgICAgICAgIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIHNfYnVmZmVyaW5nSW1hZ2VEYXRhKTsKLSAgICAgICAgICAgIGZyZWUoc19idWZmZXJpbmdJ
bWFnZURhdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgdGV4Y29vcmRzW10gPSB7IDAs
IDAsICAxLCAwLCAgMSwgMSwgIDAsIDEgfTsKLSAgICAgICAgRmxvYXRSZWN0IGJ1ZmZlcmluZ0lt
YWdlUmVjdChGbG9hdFBvaW50KC1zX2J1ZmZlcmluZ0ltYWdlU2l6ZS53aWR0aCgpIC8gMi4wZiwg
LXNfYnVmZmVyaW5nSW1hZ2VTaXplLmhlaWdodCgpIC8gMi4wZiksIHNfYnVmZmVyaW5nSW1hZ2VT
aXplKTsKLSAgICAgICAgRmxvYXRRdWFkIHRyYW5zZm9ybWVkUXVhZCA9IHJlbmRlck1hdHJpeC5t
YXBRdWFkKGJ1ZmZlcmluZ0ltYWdlUmVjdCk7Ci0KLSAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQp
OwotICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOwot
ICAgICAgICBnbFVuaWZvcm0xZihwcm9ncmFtLm9wYWNpdHlMb2NhdGlvbigpLCAxLjApOwotICAg
ICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCksIDIs
IEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJnRyYW5zZm9ybWVkUXVhZCk7Ci0gICAgICAgIGdsVmVy
dGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnRleENvb3JkTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQs
IEdMX0ZBTFNFLCAwLCB0ZXhjb29yZHMpOwotICAgICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5H
TEVfRkFOLCAwLCA0KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6Om9uQ29uZGl0aW9uYWxseUVudGVyRnVsbHNjcmVlbigpCi17Ci0gICAgRG9jdW1lbnQqIG93
bmluZ0RvY3VtZW50ID0gbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRp
YVBsYXllck93bmluZ0RvY3VtZW50KCk7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkRldmlj
ZUluZm8qIGluZm8gPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RGV2aWNlSW5mbzo6aW5zdGFuY2Uo
KTsKLQotICAgIC8vIERvbid0IGFsbG93IHZpZGVvIGluIDxlbWJlZD4gYW5kIDxvYmplY3Q+IGNv
bnRhaW5lcnMgdG8gZ28gZnVsbHNjcmVlbgotICAgIC8vIG9uIHBsYXkgYmVjYXVzZSB0aGlzIGRv
ZXMgbm90IGN1cnJlbnRseSB3b3JrLiBEZXRlY3QgdGhpcyBieSBjaGVja2luZwotICAgIC8vIGZv
ciBNZWRpYURvY3VtZW50IHdpdGggYSBwYXJlbnQgZG9jdW1lbnQuCi0gICAgaWYgKG93bmluZ0Rv
Y3VtZW50LT5pc01lZGlhRG9jdW1lbnQoKSAmJiBvd25pbmdEb2N1bWVudC0+cGFyZW50RG9jdW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGluZm8tPmlzTW9iaWxlKCkpIHsKLSAg
ICAgICAgLy8gVGhpcyBpcyBhIG1vYmlsZSBkZXZpY2UgKHNtYWxsIHNjcmVlbiksIG5vdCBhIHRh
YmxldCwgc28gd2UKLSAgICAgICAgLy8gZW50ZXIgZnVsbHNjcmVlbiB2aWRlbyBvbiB1c2VyLWlu
aXRpYXRlZCBwbGF5cy4KLSAgICAgICAgYm9vbCBub3RoaW5nSXNGdWxsc2NyZWVuID0gIW1fd2Vi
Q29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJJc0Z1bGxzY3JlZW4o
KTsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgICAgIGlmIChvd25pbmdEb2N1bWVu
dC0+d2Via2l0SXNGdWxsU2NyZWVuKCkpCi0gICAgICAgICAgICBub3RoaW5nSXNGdWxsc2NyZWVu
ID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG5vdGhpbmdJc0Z1bGxzY3JlZW4pCi0gICAg
ICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVy
RW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
b25FeGl0RnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5
ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJJc0Z1bGxzY3JlZW4oKSkKLSAgICAgICAgbV93ZWJDb3Jl
UGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckV4aXRGdWxsc2NyZWVuKCk7
Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvbkNyZWF0ZUhvbGVQdW5jaFJlY3QoKQot
ewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAvLyBDcmVhdGUgcGxhdGZv
cm0gbGF5ZXIgZm9yIHZpZGVvIChjcmVhdGUgaG9sZSBwdW5jaCByZWN0KS4KLSAgICBpZiAoIW1f
cGxhdGZvcm1MYXllciAmJiBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkpIHsKLSAgICAg
ICAgbV9zaG93QnVmZmVyaW5nSW1hZ2UgPSBmYWxzZTsKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVy
ID0gVmlkZW9MYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKG1fd2ViQ29yZVBsYXllcik7Ci0gICAg
fQotI2VuZGlmCi19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvbkRlc3Ryb3lIb2xlUHVu
Y2hSZWN0KCkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgc2V0QnVm
ZmVyaW5nKGZhbHNlKTsKLSAgICAvLyBSZW1vdmUgbWVkaWEgcGxheWVyIGZyb20gcGxhdGZvcm0g
bGF5ZXIgKHJlbW92ZSBob2xlIHB1bmNoIHJlY3QpLgotICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIp
IHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8VmlkZW9MYXllcldlYktpdFRocmVhZCo+KG1fcGxhdGZv
cm1MYXllci5nZXQoKSktPnNldE1lZGlhUGxheWVyKDApOwotICAgICAgICBtX3BsYXRmb3JtTGF5
ZXIuY2xlYXIoKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRp
YVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxh
Y2tCZXJyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwNSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlQmxh
Y2tCZXJyeV9oCi0jZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnlfaAotCi0jaWYg
RU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlci5o
IgotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJy
eVBsYXRmb3JtUGxheWVyLmg+Ci0KLW5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKLQotbmFtZXNwYWNl
IFBsYXRmb3JtIHsKLWNsYXNzIEludFJlY3Q7Ci0KLW5hbWVzcGFjZSBHcmFwaGljcyB7Ci1jbGFz
cyBHTEVTMlByb2dyYW07Ci19Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViUGFn
ZUNsaWVudDsKLX0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRpYVBsYXll
clByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBwdWJsaWMgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VDbGllbnQsIHB1YmxpYyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
SVBsYXRmb3JtUGxheWVyTGlzdGVuZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfk1lZGlhUGxh
eWVyUHJpdmF0ZSgpOwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRl
SW50ZXJmYWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIqKTsKLSAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRT
dXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFdURjo6U3RyaW5nPiYpOwotICAgIHN0YXRpYyBNZWRpYVBs
YXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQ
YXJhbWV0ZXJzJik7Ci0gICAgc3RhdGljIHZvaWQgbm90aWZ5QXBwQWN0aXZhdGVkRXZlbnQoYm9v
bCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0Q2VydGlmaWNhdGVQYXRoKGNvbnN0IFdURjo6U3RyaW5n
Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBXVEY6OlN0cmluZyYgdXJsKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2FuY2VsTG9hZCgpOwotCi0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVU
b1BsYXkoKTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCBQ
bGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBsYXRmb3Jt
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLSAgICB2b2lkIGRyYXdCdWZmZXJpbmdBbmlt
YXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYpOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZv
aWQgcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpOwotCi0gICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OwotCi0gICAgdmlydHVhbCBJbnRTaXplIG5hdHVy
YWxTaXplKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRW
aXNpYmxlKGJvb2wpOwotCi0gICAgdmlydHVhbCBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OwotCi0g
ICAgdmlydHVhbCBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBz
ZWVrKGZsb2F0IHRpbWUpOwotICAgIHZpcnR1YWwgYm9vbCBzZWVraW5nKCkgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmF0ZShmbG9hdCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGF1c2Vk
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIG11dGVkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzTXV0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVh
bCB2b2lkIHNldFZvbHVtZShmbG9hdCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldE11dGVkKGJvb2wp
OwotCi0gICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgp
IGNvbnN0OwotCi0gICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
dm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwYWludChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
OwotCi0gICAgdmlydHVhbCBib29sIGhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdDsKLQot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAvLyBXaGV0aGVyIGFjY2VsZXJh
dGVkIHJlbmRlcmluZyBpcyBzdXBwb3J0ZWQgYnkgdGhlIG1lZGlhIGVuZ2luZSBmb3IgdGhlIGN1
cnJlbnQgbWVkaWEuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJp
bmcoKSBjb25zdDsKLSAgICAvLyBDYWxsZWQgd2hlbiB0aGUgcmVuZGVyaW5nIHN5c3RlbSBmbGlw
cyB0aGUgaW50byBvciBvdXQgb2YgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIG1vZGUuCi0gICAgdmly
dHVhbCB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgeyB9Ci0jZW5kaWYK
LQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0OwotCi0g
ICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvclJlbmRlcmluZygpOwotCi0gICAgdm9p
ZCByZXNpemVTb3VyY2VEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBzZXRGdWxsc2NyZWVuV2ViUGFn
ZUNsaWVudChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VDbGllbnQqKTsKLSAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogZ2V0V2luZG93KCk7Ci0gICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpXaW5kb3cqIGdldFBlZXJXaW5kb3coY29uc3QgY2hh
ciopIGNvbnN0OwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0IGdldFdpbmRvd1Nj
cmVlblJlY3QoKSBjb25zdDsKLSAgICBjb25zdCBjaGFyKiBtbXJDb250ZXh0TmFtZSgpOwotICAg
IGZsb2F0IHBlcmNlbnRMb2FkZWQoKTsKLSAgICB1bnNpZ25lZCBzb3VyY2VXaWR0aCgpOwotICAg
IHVuc2lnbmVkIHNvdXJjZUhlaWdodCgpOwotICAgIHZvaWQgc2V0QWxsb3dQUFNWb2x1bWVVcGRh
dGVzKGJvb2wpOwotCi0gICAgLy8gSVBsYXRmb3JtUGxheWVyTGlzdGVuZXIgaW1wbGVtZW50YXRp
b24uCi0gICAgdmlydHVhbCB2b2lkIG9uU3RhdGVDaGFuZ2VkKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpQbGF0Zm9ybVBsYXllcjo6TXBTdGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lkIG9uTWVkaWFTdGF0
dXNDaGFuZ2VkKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQbGF0Zm9ybVBsYXllcjo6TU1SUGxheVN0
YXRlKTsKLSAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6UGxh
dGZvcm1QbGF5ZXI6OkVycm9yKTsKLSAgICB2aXJ0dWFsIHZvaWQgb25EdXJhdGlvbkNoYW5nZWQo
ZmxvYXQpOwotICAgIHZpcnR1YWwgdm9pZCBvblRpbWVDaGFuZ2VkKGZsb2F0KTsKLSAgICB2aXJ0
dWFsIHZvaWQgb25SYXRlQ2hhbmdlZChmbG9hdCk7Ci0gICAgdmlydHVhbCB2b2lkIG9uVm9sdW1l
Q2hhbmdlZChmbG9hdCk7Ci0gICAgdmlydHVhbCB2b2lkIG9uUGF1c2VTdGF0ZUNoYW5nZWQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgb25SZXBhaW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIG9uU2l6ZUNo
YW5nZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgb25QbGF5Tm90aWZpZWQoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgb25QYXVzZU5vdGlmaWVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIG9uV2FpdE1ldGFkYXRh
Tm90aWZpZWQoYm9vbCBoYXNGaW5pc2hlZCwgaW50IHRpbWVXYWl0ZWQpOwotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgb25CdWZmZXJpbmcoYm9vbCk7
Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgb25BdXRoZW50aWNhdGlvbk5lZWRlZChCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6TU1SQXV0aENoYWxsZW5nZSYpOwotICAgIHZpcnR1YWwgdm9pZCBvbkF1
dGhlbnRpY2F0aW9uQWNjZXB0ZWQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1NUkF1dGhD
aGFsbGVuZ2UmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgb25Db25kaXRpb25hbGx5RW50ZXJG
dWxsc2NyZWVuKCk7Ci0gICAgdmlydHVhbCB2b2lkIG9uRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICB2
aXJ0dWFsIHZvaWQgb25DcmVhdGVIb2xlUHVuY2hSZWN0KCk7Ci0gICAgdmlydHVhbCB2b2lkIG9u
RGVzdHJveUhvbGVQdW5jaFJlY3QoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDaGFsbGVu
Z2VSZXN1bHQoY29uc3QgVVJMJiwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VSZXN1bHQsIGNvbnN0IENyZWRlbnRpYWwmKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0Z1
bGxzY3JlZW4oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNFbGVtZW50UGF1c2VkKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzVGFiVmlzaWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
aW50IG9uU2hvd0Vycm9yRGlhbG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQbGF0Zm9ybVBsYXll
cjo6RXJyb3IpOwotICAgIHZpcnR1YWwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpX
aW5kb3cqIHBsYXRmb3JtV2luZG93KCk7Ci0gICAgdmlydHVhbCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6V2ViTWVkaWFTdHJlYW1Qcml2YXRlIGxvb2t1cE1lZGlhU3RyZWFtKGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCk7Ci0KLXByaXZhdGU6Ci0gICAgTWVkaWFQbGF5ZXJQ
cml2YXRlKE1lZGlhUGxheWVyKik7Ci0KLSAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwotICAgIFdU
Rjo6U3RyaW5nIHVzZXJBZ2VudChjb25zdCBXVEY6OlN0cmluZyYpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBXVEY6OlN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuICJCbGFj
a0JlcnJ5IjsgfQotCi0gICAgTWVkaWFQbGF5ZXIqIG1fd2ViQ29yZVBsYXllcjsKLSAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6UGxhdGZvcm1QbGF5ZXIqIG1fcGxhdGZvcm1QbGF5ZXI7Ci0KLSAg
ICBtdXRhYmxlIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7Ci0gICAg
TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotCi0gICAgQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJQYWdlQ2xpZW50KiBtX2Z1bGxzY3JlZW5XZWJQYWdlQ2xpZW50OwotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2b2lkIGJ1ZmZlcmluZ1RpbWVyRmlyZWQo
VGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopOwotICAgIHZvaWQgc2V0QnVmZmVyaW5nKGJvb2wp
OwotCi0gICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiBtX2J1ZmZlcmluZ1RpbWVyOwotICAg
IFJlZlB0cjxQbGF0Zm9ybUxheWVyPiBtX3BsYXRmb3JtTGF5ZXI7Ci0gICAgYm9vbCBtX3Nob3dC
dWZmZXJpbmdJbWFnZTsKLSNlbmRpZgotCi0gICAgdm9pZCB1c2VyRHJpdmVuU2Vla1RpbWVyRmly
ZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopOwotICAgIFRpbWVyPE1lZGlhUGxheWVyUHJp
dmF0ZT4gbV91c2VyRHJpdmVuU2Vla1RpbWVyOwotICAgIGZsb2F0IG1fbGFzdFNlZWtUaW1lOwot
ICAgIG11dGFibGUgZmxvYXQgbV9sYXN0TG9hZGluZ1RpbWU7Ci0gICAgYm9vbCBtX2xhc3RTZWVr
VGltZVBlbmRpbmc7Ci0gICAgYm9vbCBtX2lzQXV0aGVudGljYXRpb25DaGFsbGVuZ2luZzsKLSAg
ICB2b2lkIHdhaXRNZXRhZGF0YVRpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiop
OwotICAgIFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4gbV93YWl0TWV0YWRhdGFUaW1lcjsKLSAg
ICBpbnQgbV93YWl0TWV0YWRhdGFQb3BEaWFsb2dDb3VudGVyOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotI2VuZGlmIC8vIE1lZGlhUGxh
eWVyUHJpdmF0ZUJsYWNrQmVycnlfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9QYXRoQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9QYXRoQmxhY2tCZXJyeS5jcHAJ
KHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvUGF0aEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMxNyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGll
ci5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KLSNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1QYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBHcmFwaGljc0NvbnRl
eHQqIHNjcmF0Y2hDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6Y3JlYXRlQnVmZmVyKEludFNpemUoKSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpOZXZlckJhY2tlZCk7Ci0gICAgc3RhdGljIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwZ2Mg
PSBsb2NrQnVmZmVyRHJhd2FibGUoYnVmZmVyKTsKLSAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0
IGdjKHBnYyk7Ci0gICAgcmV0dXJuICZnYzsKLX0KLQotUGF0aDo6UGF0aCgpIDogbV9wYXRoKG5l
dyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBhdGgpCi17Ci19Ci0KLVBhdGg6OlBh
dGgoY29uc3QgUGxhdGZvcm1QYXRoJiBwYXRoKQotICAgIDogbV9wYXRoKG5ldyBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBhdGgocGF0aCkpCi17Ci19Ci0KLVBhdGg6On5QYXRoKCkK
LXsKLSAgICBpZiAobV9wYXRoKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3BhdGg7Ci0gICAgICAgIG1f
cGF0aCA9IDA7Ci0gICAgfQotfQotCi1QYXRoOjpQYXRoKGNvbnN0IFBhdGgmIG90aGVyKQotewot
ICAgIG1fcGF0aCA9IG5ldyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBhdGgoKm90
aGVyLm1fcGF0aCk7Ci19Ci0KLVBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhl
cikKLXsKLSAgICBpZiAobV9wYXRoKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3BhdGg7Ci0gICAgICAg
IG1fcGF0aCA9IDA7Ci0gICAgfQotICAgIG1fcGF0aCA9IG5ldyBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OlBhdGgoKm90aGVyLm1fcGF0aCk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
Ci1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cGF0aC0+Y3VycmVudFBvaW50KCk7Ci19Ci0KLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGF0
aC0+Y29udGFpbnMocG9pbnQsIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRS
dWxlKShydWxlKSk7Ci19Ci0KLWJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVB
cHBsaWVyKiBhcHBsaWVyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBH
cmFwaGljc0NvbnRleHQqIHNjcmF0Y2ggPSBzY3JhdGNoQ29udGV4dCgpOwotICAgIHNjcmF0Y2gt
PnNhdmUoKTsKLQotICAgIGlmIChhcHBsaWVyKQotICAgICAgICBhcHBsaWVyLT5zdHJva2VTdHls
ZShzY3JhdGNoKTsKLQotICAgIGJvb2wgcmVzdWx0ID0gc2NyYXRjaENvbnRleHQoKS0+cGxhdGZv
cm1Db250ZXh0KCktPnN0cm9rZUNvbnRhaW5zKCptX3BhdGgsIHBvaW50KTsKLSAgICBzY3JhdGNo
LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2xh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zv
cm1hdGlvbjsKLSAgICB0cmFuc2Zvcm1hdGlvbi50cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKLSAgICB0cmFuc2Zvcm0odHJhbnNmb3JtYXRpb24pOwotfQotCi1GbG9hdFJl
Y3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYXRoLT5nZXRC
b3VuZHMoKTsKLX0KLQotRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VT
dHlsZUFwcGxpZXIqIGFwcGxpZXIpIGNvbnN0Ci17Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBzY3Jh
dGNoID0gc2NyYXRjaENvbnRleHQoKTsKLSAgICBzY3JhdGNoLT5zYXZlKCk7Ci0KLSAgICBpZiAo
YXBwbGllcikKLSAgICAgICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoc2NyYXRjaCk7Ci0KLSAgICBG
bG9hdFJlY3QgcmVzdWx0ID0gc2NyYXRjaC0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0cm9rZUJv
dW5kcygqbV9wYXRoKTsKLQotICAgIHNjcmF0Y2gtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi12b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsK
LSAgICBtX3BhdGgtPm1vdmVUbyhwb2ludCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkTGluZVRvKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIG1fcGF0aC0+YWRkTGluZVRvKHBvaW50KTsK
LX0KLQotdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9s
UG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZFBvaW50KQotewotICAgIG1fcGF0aC0+YWRkUXVh
ZEN1cnZlVG8oY29udHJvbFBvaW50LCBlbmRQb2ludCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkQmV6
aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBGbG9hdFBv
aW50JiBjb250cm9sUG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiBlbmRQb2ludCkKLXsKLSAgICBt
X3BhdGgtPmFkZEJlemllckN1cnZlVG8oY29udHJvbFBvaW50MSwgY29udHJvbFBvaW50MiwgZW5k
UG9pbnQpOwotfQotCi12b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBmbG9hdCByYWRpdXMpCi17Ci0gICAgbV9wYXRo
LT5hZGRBcmNUbyhwb2ludDEsIHBvaW50MiwgcmFkaXVzKTsKLX0KLQotdm9pZCBQYXRoOjpjbG9z
ZVN1YnBhdGgoKQotewotICAgIG1fcGF0aC0+Y2xvc2VTdWJwYXRoKCk7Ci19Ci0KLXZvaWQgUGF0
aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzLCBmbG9hdCBz
dGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3aXNlKQotewotICAgIG1f
cGF0aC0+YWRkQXJjKGNlbnRlciwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNs
b2Nrd2lzZSk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgbV9wYXRoLT5hZGRSZWN0KHJlY3QpOwotfQotCi12b2lkIFBhdGg6OmFkZEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcGF0aC0+YWRkRWxsaXBzZShyZWN0
KTsKLX0KLQotdm9pZCBQYXRoOjpwbGF0Zm9ybUFkZFBhdGhGb3JSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxv
YXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVz
LCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQotewotICAgIGlmIChyZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHJlY3Qud2lkdGgoKSA8IHRvcExl
ZnRSYWRpdXMud2lkdGgoKSArIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkKLSAgICAgICAgfHwgcmVj
dC53aWR0aCgpIDwgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpICsgYm90dG9tUmlnaHRSYWRpdXMu
d2lkdGgoKQotICAgICAgICB8fCByZWN0LmhlaWdodCgpIDwgdG9wTGVmdFJhZGl1cy5oZWlnaHQo
KSArIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkKLSAgICAgICAgfHwgcmVjdC5oZWlnaHQoKSA8
IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpICsgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpIHsK
LSAgICAgICAgLy8gSWYgYWxsIHRoZSByYWRpaSBjYW5ub3QgYmUgYWNjb21tb2RhdGVkLCByZXR1
cm4gYSByZWN0LgotICAgICAgICBhZGRSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0Um91bmRlZFJlY3QgcnIocmVjdCwg
dG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJp
Z2h0UmFkaXVzKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGdlbmVyaWMgcGF0aCByZWZsZWN0cyB0
aGUgY29udGVudHMgb2YgdGhlIHJvdW5kZWQgcmVjdHMKLSAgICBtX3BhdGgtPmFkZFJvdW5kZWRS
ZWN0KHJyKTsKLX0KLQotdm9pZCBQYXRoOjpjbGVhcigpCi17Ci0gICAgbV9wYXRoLT5yZXNldCgp
OwotfQotCi1ib29sIFBhdGg6OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhdGgt
PmlzRW1wdHkoKTsKLX0KLQotYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3BhdGgtPmhhc0N1cnJlbnRQb2ludCgpOwotfQotCi12b2lkIFBhdGg6OmFw
cGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0Ci17Ci0g
ICAgbV9wYXRoLT5hcHBseShpbmZvLCAodm9pZCopZnVuY3Rpb24pOwotfQotCi12b2lkIFBhdGg6
OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybWF0aW9uKQotewotICAg
IG1fcGF0aC0+dHJhbnNmb3JtKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZG91YmxlKj4oJnRyYW5z
Zm9ybWF0aW9uKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQotewotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGF0aCog
cHAgPSBwYXRoLnBsYXRmb3JtUGF0aCgpOwotICAgIGlmIChwcC0+aXNFbXB0eSgpIHx8IHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpHcmFkaWVudCogcGxhdGZvcm1HcmFkaWVudCA9IGZpbGxHcmFkaWVudCgp
ID8gZmlsbEdyYWRpZW50KCktPnBsYXRmb3JtR3JhZGllbnQoKSA6IDA7Ci0gICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQYXR0ZXJuKiBwbGF0Zm9ybVBhdHRlcm4gPSBmaWxsUGF0
dGVybigpID8gZmlsbFBhdHRlcm4oKS0+cGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgp
KSA6IDA7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmFkZEZpbGxQYXRoKCpwcCwgKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6V2luZFJ1bGUpbV9zdGF0ZS5maWxsUnVsZSwgcGxhdGZv
cm1HcmFkaWVudCwgcGxhdGZvcm1QYXR0ZXJuKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OlBhdGgqIHBwID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsKLSAgICBpZiAocHAt
PmlzRW1wdHkoKSB8fCBwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R3JhZGllbnQqIGdyYWRpZW50ID0gc3Ry
b2tlR3JhZGllbnQoKSA/IHN0cm9rZUdyYWRpZW50KCktPnBsYXRmb3JtR3JhZGllbnQoKSA6IDA7
Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQYXR0ZXJuKiBwYXR0ZXJuID0g
c3Ryb2tlUGF0dGVybigpID8gc3Ryb2tlUGF0dGVybigpLT5wbGF0Zm9ybVBhdHRlcm4oQWZmaW5l
VHJhbnNmb3JtKCkpIDogMDsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YWRkU3Ryb2tlUGF0aCgq
cHAsIGdyYWRpZW50LCBwYXR0ZXJuKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+JiwgaW50LCBpbnQsIGNvbnN0IENvbG9yJikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgaW50LCBpbnQsIGNvbnN0IENvbG9yJikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29u
c3QgSW50UG9pbnQmIGZyb20sIGNvbnN0IEludFBvaW50JiB0bykKLXsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
YWRkRHJhd0xpbmUoZnJvbSwgdG8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRl
RG9jdW1lbnRNYXJrZXJSZXNvdXJjZXMoKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwdCwgZmxvYXQgd2lk
dGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5hZGRE
cmF3TGluZUZvckRvY3VtZW50TWFya2VyKHB0LCB3aWR0aCwgKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpc3R5bGUpOwotfQotCi1GbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYgcHQsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQotewotICAgIHJldHVybiBGbG9h
dFJlY3QocHQsIEZsb2F0U2l6ZSh3aWR0aCwgc3Ryb2tlVGhpY2tuZXNzKCkpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwdCwg
ZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmFkZERyYXdMaW5l
Rm9yVGV4dChwdCwgd2lkdGgsIHByaW50aW5nKTsKLX0KLQotLy8gRklYTUU6IGRvbid0IGlnbm9y
ZSB0aGUgd2luZGluZyBydWxlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA3MDY0Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoLCBX
aW5kUnVsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBhdGgqIHBwID0gcGF0aC5w
bGF0Zm9ybVBhdGgoKTsKLSAgICBwcC0+YXBwbHlBc0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKHBhdGgucGxhdGZvcm1QYXRoKCktPmlzUmVjdGFuZ3VsYXIoKSkKLSAgICAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmNsaXAocGF0aC5ib3VuZGluZ1JlY3QoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBjbGlwKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xp
cChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjbGlwKHBhdGgsIGZpbGxSdWxl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBhdGgqIHBwID0gcGF0aC5wbGF0Zm9ybVBh
dGgoKTsKLSAgICBwcC0+YXBwbHlBc0NsaXBPdXQocGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BhdHRl
cm5CbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L1BhdHRlcm5CbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9QYXR0ZXJu
QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUGF0dGVybi5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgotI2luY2x1ZGUgIlBhdGgu
aCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oPgotCi11
c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgUGF0dGVy
bjo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBkZWxldGUgbV9wYXR0ZXJuOwotICAgIG1fcGF0
dGVybiA9IDA7Ci19Ci0KLVBsYXRmb3JtUGF0dGVyblB0ciBQYXR0ZXJuOjpwbGF0Zm9ybVBhdHRl
cm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikKLXsKLSAgICBpZiAobV9wYXR0ZXJuKQotICAgICAg
ICByZXR1cm4gbV9wYXR0ZXJuOwotCi0gICAgY29uc3QgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBt
X3RpbGVJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLQotICAgIG1fcGF0dGVy
biA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGF0dGVybjo6Y3JlYXRlKCk7Ci0K
LSAgICBtX3BhdHRlcm4tPnNldEltYWdlKGltYWdlLCBtX3JlcGVhdFgsIG1fcmVwZWF0WSk7Ci0g
ICAgbV9wYXR0ZXJuLT5zZXRMb2NhbE1hdHJpeChyZWludGVycHJldF9jYXN0PGNvbnN0IGRvdWJs
ZSo+KCZtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uKSk7Ci0KLSAgICByZXR1cm4gbV9wYXR0
ZXJuOwotfQotCi12b2lkIFBhdHRlcm46OnNldFBsYXRmb3JtUGF0dGVyblNwYWNlVHJhbnNmb3Jt
KCkKLXsKLSAgICBpZiAobV9wYXR0ZXJuKQotICAgICAgICBtX3BhdHRlcm4tPnNldExvY2FsTWF0
cml4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZG91YmxlKj4oJm1fcGF0dGVyblNwYWNlVHJhbnNm
b3JtYXRpb24pKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9QbHVnaW5MYXllcldlYktpdFRocmVh
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9QbHVnaW5MYXllcldlYktpdFRocmVhZC5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvUGx1Z2luTGF5ZXJX
ZWJLaXRUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmgiCi0KLSNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhy
ZWFkLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVBsdWdpbkxheWVyV2ViS2l0VGhyZWFkOjpQbHVnaW5MYXllcldlYktpdFRocmVhZChQbHVnaW5W
aWV3KiBwbHVnaW5WaWV3KQotICAgIDogTGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXIsIDApCi0gICAg
LCBtX25lZWRzRGlzcGxheShmYWxzZSkKLXsKLSAgICBzZXRQbHVnaW5WaWV3KHBsdWdpblZpZXcp
OwotfQotCi1QbHVnaW5MYXllcldlYktpdFRocmVhZDo6flBsdWdpbkxheWVyV2ViS2l0VGhyZWFk
KCkKLXsKLX0KLQotdm9pZCBQbHVnaW5MYXllcldlYktpdFRocmVhZDo6c2V0UGx1Z2luVmlldyhQ
bHVnaW5WaWV3KiBwbHVnaW5WaWV3KQotewotICAgIG1fcGx1Z2luVmlldyA9IHBsdWdpblZpZXc7
Ci0gICAgc2V0TmVlZHNUZXh0dXJlKGlzRHJhd2FibGUoKSAmJiBwbHVnaW5WaWV3KTsKLQotICAg
IGlmIChtX3BsdWdpblZpZXcpCi0gICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgIGVsc2Ug
ewotICAgICAgICAvLyBXZSBjYW4ndCBhZmZvcmQgdG8gd2FpdCB1bnRpbCB0aGUgbmV4dCBjb21t
aXQKLSAgICAgICAgLy8gdG8gc2V0IHRoZSBtX3BsdWdpblZpZXcgdG8gMCBpbiB0aGUgaW1wbCwg
YmVjYXVzZSBpdCBpcwotICAgICAgICAvLyBhYm91dCB0byBiZSBkZXN0cm95ZWQuCi0gICAgICAg
IGxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKS0+c2V0UGx1Z2luVmlldygwKTsKLSAgICAgICAgc2V0
TmVlZHNDb21taXQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQ6
OnNldEhvbGVQdW5jaFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX2hvbGVQdW5j
aFJlY3QgPSByZWN0OwotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQgUGx1Z2luTGF5
ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzRGlzcGxheSgpCi17Ci0gICAgbV9uZWVkc0Rpc3BsYXkg
PSB0cnVlOwotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQgUGx1Z2luTGF5ZXJXZWJL
aXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1f
bmVlZHNEaXNwbGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25lZWRzRGlzcGxheSA9IGZh
bHNlOwotCi0gICAgaWYgKCFtX3BsdWdpblZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
cGx1Z2luVmlldy0+dXBkYXRlQnVmZmVyKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9wbHVn
aW5WaWV3LT5zaXplKCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9QbHVnaW5MYXllcldlYktpdFRocmVhZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvUGx1
Z2luTGF5ZXJXZWJLaXRUaHJlYWQuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9QbHVnaW5MYXllcldlYktpdFRocmVhZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5MYXllcldlYktpdFRo
cmVhZF9oCi0jZGVmaW5lIFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkX2gKLQotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGx1Z2luVmlldzsKLQotY2xhc3MgUGx1Z2lu
TGF5ZXJXZWJLaXRUaHJlYWQgOiBwdWJsaWMgTGF5ZXJXZWJLaXRUaHJlYWQgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkPiBjcmVhdGUoUGx1
Z2luVmlldyogcGx1Z2luVmlldykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQocGx1Z2luVmlldykpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgflBsdWdpbkxheWVyV2ViS2l0VGhyZWFkKCk7Ci0KLSAgICB2b2lkIHNldFBsdWdpblZpZXco
UGx1Z2luVmlldyopOwotICAgIHZvaWQgc2V0SG9sZVB1bmNoUmVjdChjb25zdCBJbnRSZWN0Jik7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0KLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsKLQotcHJpdmF0
ZToKLSAgICBQbHVnaW5MYXllcldlYktpdFRocmVhZChQbHVnaW5WaWV3Kik7Ci0gICAgYm9vbCBt
X25lZWRzRGlzcGxheTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmIC8vIFBsdWdpbkxheWVyV2Vi
S2l0VGhyZWFkX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvU2ltcGxlRm9udERhdGFCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1NpbXBsZUZvbnREYXRhQmxhY2tC
ZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvU2ltcGxlRm9udERhdGFCbGFja0JlcnJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwyMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNs
dWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRl
ICJJVHlwZVV0aWxzLmgiCi0KLSNpbmNsdWRlIDxmc19hcGkuaD4KLSNpbmNsdWRlIDx1bmljb2Rl
L25vcm1senIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGZsb2F0
IEZTRml4ZWRUb0Zsb2F0KEZTX0ZJWEVEIG4pIHsgcmV0dXJuIG4gLyA2NTUzNi4wOyB9Ci0KLSNk
ZWZpbmUgb3BlblR5cGVUYWcoYSwgYiwgYywgZCkgKEZTX1VMT05HKSgoYSA8PCAyNCkgfCAoYiA8
PCAxNikgfCAoYyA8PCA4KSB8IGQpCi0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5p
dCgpCi17Ci0gICAgRlNfRklYRUQgYXNjZW5kZXIgPSAwOwotICAgIEZTX0ZJWEVEIGRlc2NlbmRl
ciA9IDA7Ci0gICAgRlNfRklYRUQgbGVhZGluZyA9IDA7Ci0gICAgRnNBc2NEZXNjTGVhZFNvdXJj
ZSBzb3VyY2U7Ci0gICAgRlNfTE9ORyByZXN1bHQ7Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnNp
emUoKSA+IDApIHsKLSAgICAgICAgLy8gRklYTUU6IGhhY2shIEZTX2dldF9hc2NlbmRlcl9kZXNj
ZW5kZXJfbGVhZGluZygpIHJldHVybnMgRVJSX05PX0NVUlJFTlRfU0ZOVCB3aGVuIHNpemUgaXMg
MCwgZXZlbiB0aG91Z2ggd2UgY2FsbGVkIEZTX3NldF9zY2FsZSBhbmQgbV9wbGF0Zm9ybURhdGEu
Zm9udCgpLT5jdXJfc2ZudCBpcyBub3QgMAotICAgICAgICByZXN1bHQgPSBGU19nZXRfYXNjZW5k
ZXJfZGVzY2VuZGVyX2xlYWRpbmcobV9wbGF0Zm9ybURhdGEuZm9udCgpLCAmYXNjZW5kZXIsICZk
ZXNjZW5kZXIsICZsZWFkaW5nLCAmc291cmNlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1
bHQsIHJlc3VsdCA9PSBTVUNDRVNTKTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFz
Y2VudChGU19ST1VORChhc2NlbmRlcikpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChG
U19ST1VORChkZXNjZW5kZXIpKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAoaVR5cGVG
aXhlZFRvRmxvYXQobGVhZGluZykpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmco
bHJvdW5kZihtX2ZvbnRNZXRyaWNzLmFzY2VudCgpKSArIGxyb3VuZGYobV9mb250TWV0cmljcy5k
ZXNjZW50KCkpICsgbHJvdW5kZihtX2ZvbnRNZXRyaWNzLmxpbmVHYXAoKSkpOwotCi0gICAgRk9O
VF9NRVRSSUNTIG1ldHJpY3M7Ci0gICAgcmVzdWx0ID0gRlNfZm9udF9tZXRyaWNzKG1fcGxhdGZv
cm1EYXRhLmZvbnQoKSwgJm1ldHJpY3MpOwotICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQgPT0gU1VDQ0VTUyk7Ci0KLSAgICAvLyBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0oRlNf
Z2V0X2Rlc2lnbl91bml0cyhtX3BsYXRmb3JtRGF0YSgpLmZvbnQoKSkpOwotICAgIG1fZm9udE1l
dHJpY3Muc2V0VW5pdHNQZXJFbShtZXRyaWNzLnVuaXRzUGVyRW0pOwotCi0gICAgRlNfVVNIT1JU
IHhSYW5nZSA9IG1ldHJpY3MuZm9udF9iYm94LnhNYXggLSBtZXRyaWNzLmZvbnRfYmJveC54TWlu
OwotICAgIG1fbWF4Q2hhcldpZHRoID0gcm91bmRmKCh4UmFuZ2UgKiByb3VuZGYobV9wbGF0Zm9y
bURhdGEuc2l6ZSgpKSkgLyBtZXRyaWNzLnVuaXRzUGVyRW0pOwotCi0gICAgVFRGX09TMiBvczI7
Ci0gICAgaWYgKEZTX2dldF90YWJsZV9zdHJ1Y3R1cmUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBU
QUdfT1MyLCAmb3MyKSA9PSBTVUNDRVNTICYmIG9zMi5zeEhlaWdodCAmJiBvczIueEF2Z0NoYXJX
aWR0aCkgewotICAgICAgICBGU19VU0hPUlQgeXBwZW0gPSBtX3BsYXRmb3JtRGF0YS5mb250KCkt
PmxwbTsKLSAgICAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHN0YXRpY19jYXN0PGZsb2F0
PihvczIuc3hIZWlnaHQpICogeXBwZW0gLyBtZXRyaWNzLnVuaXRzUGVyRW0pOwotICAgICAgICBt
X2F2Z0NoYXJXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0PihvczIueEF2Z0NoYXJXaWR0aCkgKiB5
cHBlbSAvIG1ldHJpY3MudW5pdHNQZXJFbTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBIQUNL
Ci0gICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChtX2ZvbnRNZXRyaWNzLmFzY2VudCgp
ICogMC41Nik7Ci0gICAgICAgIG1fZm9udE1ldHJpY3Muc2V0SGFzWEhlaWdodChmYWxzZSk7Ci0g
ICAgICAgIG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVpZ2h0KCk7Ci0KLSAgICAg
ICAgR2x5cGhQYWdlKiBnbHlwaFBhZ2VaZXJvID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RD
aGlsZCh0aGlzLCAwKS0+cGFnZSgpOwotCi0gICAgICAgIGlmIChnbHlwaFBhZ2VaZXJvKSB7Ci0g
ICAgICAgICAgICBzdGF0aWMgY29uc3QgVUNoYXIzMiB4Q2hhciA9ICd4JzsKLSAgICAgICAgICAg
IGNvbnN0IEdseXBoIHhHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3Rl
cih4Q2hhcikuZ2x5cGg7Ci0KLSAgICAgICAgICAgIGlmICh4R2x5cGgpIHsKLSAgICAgICAgICAg
ICAgICAvLyBJbiB3aWR0aEZvckdseXBoKCksIHhHbHlwaCB3aWxsIGJlIGNvbXBhcmVkIHdpdGgK
LSAgICAgICAgICAgICAgICAvLyBtX3plcm9XaWR0aFNwYWNlR2x5cGgsIHdoaWNoIGlzbid0IGlu
aXRpYWxpemVkIHlldCBoZXJlLgotICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgaXQgd2l0
aCB6ZXJvIHRvIG1ha2Ugc3VyZSB3aWR0aEZvckdseXBoKCkgcmV0dXJucwotICAgICAgICAgICAg
ICAgIC8vIHRoZSByaWdodCB3aWR0aC4KLSAgICAgICAgICAgICAgICBtX3plcm9XaWR0aFNwYWNl
R2x5cGggPSAwOwotICAgICAgICAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlw
aCh4R2x5cGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1f
cGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0
aW9uRmFsbGJhY2soKSkKLSAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IEZTX2dldF90YWJs
ZShtX3BsYXRmb3JtRGF0YS5mb250KCksIG9wZW5UeXBlVGFnKCd2JywgJ2gnLCAnZScsICdhJyks
IFRCTF9RVUVSWSwgMCkKLSAgICAgICAgICAgIHx8IEZTX2dldF90YWJsZShtX3BsYXRmb3JtRGF0
YS5mb250KCksIG9wZW5UeXBlVGFnKCdWJywgJ08nLCAnUicsICdHJyksIFRCTF9RVUVSWSwgMCk7
Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17Ci19
Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLVBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxl
ZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCBzY2FsZWRTaXplID0gbHJvdW5k
Zihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTaW1wbGVGb250RGF0YSgKLSAgICAgICAgRm9udFBsYXRmb3JtRGF0
YShtX3BsYXRmb3JtRGF0YS5mb250KCktPmN1cl9sZm50LT5uYW1lLAotICAgICAgICAgICAgc2Nh
bGVkU2l6ZSwKLSAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwKLSAg
ICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSwKLSAgICAgICAgICAg
IG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCksCi0gICAgICAgICAgICBtX3BsYXRmb3JtRGF0
YS53aWR0aFZhcmlhbnQoKSksCi0gICAgICAgIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOwotfQot
Ci1ib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgaW50IHBvc2l0aW9uID0gMDsKLQot
ICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewotICAgICAgICAvLyBGSVhNRTogdXNlIHNo
YXBlcj8KLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAgICAgIGludCBuZXh0UG9zaXRp
b24gPSBwb3NpdGlvbjsKLSAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVycywgbmV4dFBvc2l0aW9u
LCBsZW5ndGgsIGNoYXJhY3Rlcik7Ci0KLSAgICAgICAgRlNfVVNIT1JUIGdseXBoID0gRlNfbWFw
X2NoYXIobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBzdGF0aWNfY2FzdDxGU19VTE9ORz4oY2hhcmFj
dGVyKSk7Ci0gICAgICAgIGlmICghZ2x5cGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgcG9zaXRpb24gPSBuZXh0UG9zaXRpb247Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKLXsKLSAgICBt
X3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuaXNGaXhlZFBpdGNoKCk7Ci19Ci0K
LUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBn
bHlwaCkgY29uc3QKLXsKLSAgICBGU19HTFlQSE1BUCogZ2x5cGhtYXAgPSBGU19nZXRfZ2x5cGht
YXAobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBnbHlwaCwgRlNfTUFQX0RJU1RBTkNFRklFTEQgfCBG
U19NQVBfR1JBWU1BUDgpOwotICAgIGlmICghZ2x5cGhtYXApCi0gICAgICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKLQotICAgIEZsb2F0UmVjdCBib3VuZHMoZ2x5cGhtYXAtPmxvX3gsIGdseXBobWFw
LT5oZWlnaHQgLSBnbHlwaG1hcC0+aGlfeSwgZ2x5cGhtYXAtPndpZHRoLCBnbHlwaG1hcC0+aGVp
Z2h0KTsKLSAgICBGU19mcmVlX2NoYXIobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBnbHlwaG1hcCk7
Ci0KLSAgICByZXR1cm4gYm91bmRzOwotfQotCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIEZTX1NIT1JUIGlkeCwg
aWR5OwotICAgIEZTX0ZJWEVEIGR4LCBkeTsKLSAgICBGU19GSVhFRCBzMDAsIHMwMSwgczEwLCBz
MTE7Ci0gICAgYm9vbCBuZWVkc0Zha2VCb2xkUmVzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0
aWNCb2xkKCkgJiYgbV90cmVhdEFzRml4ZWRQaXRjaDsKLQotICAgIGlmIChuZWVkc0Zha2VCb2xk
UmVzZXQpIHsKLSAgICAgICAgRlNfZ2V0X3NjYWxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgJnMw
MCwgJnMwMSwgJnMxMCwgJnMxMSk7Ci0gICAgICAgIEZTX3NldF9ib2xkX3BjdChtX3BsYXRmb3Jt
RGF0YS5mb250KCksIDApOwotICAgICAgICBGU19zZXRfc2NhbGUobV9wbGF0Zm9ybURhdGEuZm9u
dCgpLCBzMDAsIHMwMSwgczEwLCBzMTEpOwotICAgIH0KLQotICAgIGlmIChGU19nZXRfYWR2YW5j
ZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGdseXBoLCBGU19NQVBfRElTVEFOQ0VGSUVMRCB8IEZT
X01BUF9HUkFZTUFQOCwgJmlkeCwgJmlkeSwgJmR4LCAmZHkpICE9IFNVQ0NFU1MpCi0gICAgICAg
IGR4ID0gMDsKLQotICAgIGlmIChuZWVkc0Zha2VCb2xkUmVzZXQpIHsKLSAgICAgICAgRlNfc2V0
X2JvbGRfcGN0KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgSVRZUEVGQUtFQk9MREFNT1VOVCk7Ci0g
ICAgICAgIEZTX3NldF9zY2FsZShtX3BsYXRmb3JtRGF0YS5mb250KCksIHMwMCwgczAxLCBzMTAs
IHMxMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlUeXBlRml4ZWRUb0Zsb2F0KGR4KTsKLX0KLQot
Ym9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydCkKLSAgICAgICAgbV9jb21iaW5p
bmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQgPSBhZG9wdFB0cihuZXcgSGFzaE1hcDxTdHJpbmcs
IGJvb2w+KTsKLQotICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIGJvb2w+OjpBZGRSZXN1bHQgYWRk
UmVzdWx0ID0gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQtPmFkZChTdHJpbmco
Y2hhcmFjdGVycywgbGVuZ3RoKSwgZmFsc2UpOwotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgVUVy
cm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKLSAgICBWZWN0b3I8VUNoYXIsIDQ+IG5vcm1h
bGl6ZWRDaGFyYWN0ZXJzKGxlbmd0aCk7Ci0gICAgaW50MzJfdCBub3JtYWxpemVkTGVuZ3RoID0g
dW5vcm1fbm9ybWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCwgVU5PUk1fTkZDLCBVTk9STV9VTklD
T0RFXzNfMiwgJm5vcm1hbGl6ZWRDaGFyYWN0ZXJzWzBdLCBsZW5ndGgsICZlcnJvcik7Ci0gICAg
aWYgKFVfRkFJTFVSRShlcnJvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBw
b3NpdGlvbiA9IDA7Ci0gICAgd2hpbGUgKHBvc2l0aW9uIDwgbm9ybWFsaXplZExlbmd0aCkgewot
ICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAgICAgICAgaW50IG5leHRQb3NpdGlvbiA9IHBv
c2l0aW9uOwotICAgICAgICBVMTZfTkVYVChub3JtYWxpemVkQ2hhcmFjdGVycywgbmV4dFBvc2l0
aW9uLCBub3JtYWxpemVkTGVuZ3RoLCBjaGFyYWN0ZXIpOwotCi0gICAgICAgIGlmICghdV9oYXNC
aW5hcnlQcm9wZXJ0eShjaGFyYWN0ZXIsIFVDSEFSX0RFRkFVTFRfSUdOT1JBQkxFX0NPREVfUE9J
TlQpKSB7Ci0gICAgICAgICAgICBGU19VU0hPUlQgZ2x5cGggPSBGU19tYXBfY2hhcihtX3BsYXRm
b3JtRGF0YS5mb250KCksIHN0YXRpY19jYXN0PEZTX1VMT05HPihjaGFyYWN0ZXIpKTsKLSAgICAg
ICAgICAgIGlmICghZ2x5cGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcG9zaXRpb24gPSBuZXh0UG9zaXRpb247Ci0gICAgfQotCi0gICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVy
ZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0
aW5nVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNjMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuaCIKLQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkludFJlY3QuaCIKLQot
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXVz
aW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyOwotdXNpbmcgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXJUeXBlOwotCi0jZGVmaW5lIERFQlVHX1RF
WFRVUkVfTUVNT1JZX1VTQUdFIDAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29u
c3QgaW50IGRlZmF1bHRNZW1vcnlMaW1pdCA9IDY0ICogMTAyNCAqIDEwMjQ7IC8vIE1lYXN1cmVk
IGluIGJ5dGVzLgotCi0vLyBVc2VkIHRvIHByb3RlY3QgYSBuZXdseSBjcmVhdGVkIHRleHR1cmUg
ZnJvbSBiZWluZyBpbW1lZGlhdGVseSBldmljdGVkCi0vLyBiZWZvcmUgc29tZW9uZSBoYXMgYSBj
aGFuY2UgdG8gcHJvdGVjdCBpdCBmb3IgbGVnaXRpbWF0ZSByZWFzb25zLgotY2xhc3MgVGV4dHVy
ZVByb3RlY3RvciB7Ci1wdWJsaWM6Ci0gICAgVGV4dHVyZVByb3RlY3RvcihMYXllclRleHR1cmUq
IHRleHR1cmUpCi0gICAgICAgIDogbV90ZXh0dXJlKHRleHR1cmUpCi0gICAgewotICAgICAgICBt
X3RleHR1cmUtPnByb3RlY3QoKTsKLSAgICB9Ci0KLSAgICB+VGV4dHVyZVByb3RlY3RvcigpCi0g
ICAgewotICAgICAgICBtX3RleHR1cmUtPnVucHJvdGVjdCgpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBMYXllclRleHR1cmUqIG1fdGV4dHVyZTsKLX07Ci0KLVRleHR1cmVDYWNoZUNvbXBvc2l0
aW5nVGhyZWFkOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpCi0gICAgOiBtX21lbW9y
eVVzYWdlKDApCi0gICAgLCBtX21lbW9yeUxpbWl0KGRlZmF1bHRNZW1vcnlMaW1pdCkKLXsKLX0K
LQotQnVmZmVyKiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6Y3JlYXRlQnVmZmVyKGNv
bnN0IEludFNpemUmIHNpemUsIEJ1ZmZlclR5cGUgdHlwZSkKLXsKLSAgICByZXR1cm4gQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpjcmVhdGVCdWZmZXIoc2l6ZSwgdHlwZSk7Ci19Ci0K
LXZvaWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OmNvbGxlY3RHYXJiYWdlKCkKLXsK
LSAgICBmb3IgKEdhcmJhZ2U6Oml0ZXJhdG9yIGl0ID0gbV9nYXJiYWdlLmJlZ2luKCk7IGl0ICE9
IG1fZ2FyYmFnZS5lbmQoKTsgKytpdCkKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpkZXN0cm95QnVmZmVyKCgqaXQpLmJ1ZmZlcik7Ci0KLSAgICBtX2dhcmJhZ2UuY2xl
YXIoKTsKLX0KLQotdm9pZCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZVJl
c2l6ZWQoTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiBvbGRTaXplKQotewot
ICAgIGludCBkZWx0YSA9ICh0ZXh0dXJlLT53aWR0aCgpICogdGV4dHVyZS0+aGVpZ2h0KCkgLSBv
bGRTaXplLndpZHRoKCkgKiBvbGRTaXplLmhlaWdodCgpKSAqIExheWVyVGV4dHVyZTo6Ynl0ZXNQ
ZXJQaXhlbCgpOwotICAgIGluY01lbW9yeVVzYWdlKGRlbHRhKTsKLSAgICBpZiAoZGVsdGEgPiAw
KQotICAgICAgICBwcnVuZSgpOwotfQotCi12b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkOjp0ZXh0dXJlU2l6ZUluQnl0ZXNDaGFuZ2VkKExheWVyVGV4dHVyZSosIGludCBkZWx0YSkK
LXsKLSAgICBpbmNNZW1vcnlVc2FnZShkZWx0YSk7Ci0gICAgaWYgKGRlbHRhID4gMCkKLSAgICAg
ICAgcHJ1bmUoKTsKLX0KLQotdm9pZCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4
dHVyZURlc3Ryb3llZChMYXllclRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgaWYgKHRleHR1cmUt
PmlzQ29sb3IoKSkgewotICAgICAgICBtX2dhcmJhZ2UuYXBwZW5kKFpvbWJpZVRleHR1cmUodGV4
dHVyZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVGV4dHVyZVNldDo6aXRlcmF0
b3IgaXQgPSBtX3RleHR1cmVzLmZpbmQodGV4dHVyZSk7Ci0gICAgZXZpY3QoaXQpOwotICAgIG1f
dGV4dHVyZXMucmVtb3ZlKGl0KTsKLX0KLQotYm9vbCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1Ro
cmVhZDo6aW5zdGFsbChMYXllclRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFNpemUmIHNpemUs
IEJ1ZmZlclR5cGUgdHlwZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKCF0ZXh0dXJlLT5idWZmZXIoKSAmJiAhc2l6ZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgQnVmZmVyKiBidWZmZXIgPSBjcmVhdGVCdWZmZXIoc2l6ZSwgdHlwZSk7Ci0gICAg
ICAgIEFTU0VSVChidWZmZXIpOwotCi0gICAgICAgIHRleHR1cmUtPnNldEJ1ZmZlcihidWZmZXIp
OwotICAgICAgICB0ZXh0dXJlLT5zZXRTaXplKHNpemUpOwotICAgICAgICB0ZXh0dXJlUmVzaXpl
ZCh0ZXh0dXJlLCBJbnRTaXplKCkpOwotICAgIH0KLQotICAgIGlmICghdGV4dHVyZS0+aXNDb2xv
cigpKQotICAgICAgICBtX3RleHR1cmVzLmFkZCh0ZXh0dXJlKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjpyZXNpemVUZXh0dXJl
KExheWVyVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgQnVmZmVyVHlwZSB0
eXBlKQotewotICAgIEludFNpemUgb2xkU2l6ZSA9IHRleHR1cmUtPnNpemUoKTsKLQotICAgIC8v
IFJlYWxsb2NhdGUgdGhlIGJ1ZmZlcgotICAgIEJ1ZmZlciogYnVmZmVyID0gY3JlYXRlQnVmZmVy
KHNpemUsIHR5cGUpOwotICAgIEFTU0VSVChidWZmZXIpOwotCi0gICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpkZXN0cm95QnVmZmVyKHRleHR1cmUtPmJ1ZmZlcigpKTsKLSAgICB0
ZXh0dXJlLT5zZXRCdWZmZXIoYnVmZmVyKTsKLSAgICB0ZXh0dXJlLT5zZXRTaXplKHNpemUpOwot
ICAgIHRleHR1cmVSZXNpemVkKHRleHR1cmUsIG9sZFNpemUpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjpldmljdChjb25zdCBUZXh0
dXJlU2V0OjppdGVyYXRvciYgaXQpCi17Ci0gICAgaWYgKGl0ID09IG1fdGV4dHVyZXMuZW5kKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIExheWVyVGV4dHVyZSogdGV4dHVyZSA9ICppdDsKLSAg
ICBpZiAodGV4dHVyZS0+YnVmZmVyKCkpIHsKLSAgICAgICAgaW50IGRlbHRhID0gMDsKLSAgICAg
ICAgZGVsdGEgKz0gdGV4dHVyZS0+d2lkdGgoKSAqIHRleHR1cmUtPmhlaWdodCgpICogTGF5ZXJU
ZXh0dXJlOjpieXRlc1BlclBpeGVsKCk7Ci0gICAgICAgIGRlbHRhICs9IHRleHR1cmUtPnNpemVJ
bkJ5dGVzKCk7Ci0gICAgICAgIGlmIChkZWx0YSkKLSAgICAgICAgICAgIGRlY01lbW9yeVVzYWdl
KGRlbHRhKTsKLSAgICAgICAgbV9nYXJiYWdlLmFwcGVuZChab21iaWVUZXh0dXJlKHRleHR1cmUp
KTsKLSAgICB9Ci0KLSAgICB0ZXh0dXJlLT5zZXRCdWZmZXIoMCk7Ci19Ci0KLXZvaWQgVGV4dHVy
ZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVBY2Nlc3NlZChMYXllclRleHR1cmUqIHRl
eHR1cmUpCi17Ci0gICAgaWYgKHRleHR1cmUtPmlzQ29sb3IoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgVGV4dHVyZVNldDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmZpbmQodGV4dHVyZSk7
Ci0gICAgaWYgKGl0ID09IG1fdGV4dHVyZXMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fdGV4dHVyZXMucmVtb3ZlKGl0KTsKLSAgICBtX3RleHR1cmVzLmFkZCh0ZXh0dXJlKTsKLX0K
LQotVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQqIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkKCkKLXsKLSAgICBzdGF0aWMgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQqIHN0
YXRpY0NhY2hlID0gbmV3IFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOwotICAgIHJldHVy
biBzdGF0aWNDYWNoZTsKLX0KLQotdm9pZCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6
cHJ1bmUoc2l6ZV90IGxpbWl0KQotewotICAgIHdoaWxlIChtX21lbW9yeVVzYWdlID4gbGltaXQp
IHsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKFRleHR1cmVTZXQ6
Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5iZWdpbigpOyBpdCAhPSBtX3RleHR1cmVzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgICAgICBMYXllclRleHR1cmUqIHRleHR1cmUgPSAqaXQ7Ci0gICAg
ICAgICAgICBpZiAodGV4dHVyZS0+aXNQcm90ZWN0ZWQoKSB8fCAodGV4dHVyZS0+c2l6ZSgpLmlz
RW1wdHkoKSAmJiAhdGV4dHVyZS0+c2l6ZUluQnl0ZXMoKSkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBldmljdChpdCk7Ci0gICAgICAgICAgICBmb3VuZCA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWZvdW5kKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkOjpjbGVhcigpCi17Ci0gICAgbV9jb2xvcnMuY2xlYXIoKTsKLSAgICBjb2xsZWN0R2Fy
YmFnZSgpOwotfQotCi12b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRNZW1v
cnlVc2FnZShzaXplX3QgbWVtb3J5VXNhZ2UpCi17Ci0gICAgbV9tZW1vcnlVc2FnZSA9IG1lbW9y
eVVzYWdlOwotI2lmIERFQlVHX1RFWFRVUkVfTUVNT1JZX1VTQUdFCi0gICAgZnByaW50ZihzdGRl
cnIsICJUZXh0dXJlIG1lbW9yeSB1c2FnZSAldSBrQlxuIiwgbV9tZW1vcnlVc2FnZSAvIDEwMjQp
OwotI2VuZGlmCi19Ci0KLVBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21w
b3NpdGluZ1RocmVhZDo6dGV4dHVyZUZvckNvbnRlbnRzKEJ1ZmZlciogY29udGVudHMpCi17Ci0g
ICAgUmVmUHRyPExheWVyVGV4dHVyZT4gdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUoKTsKLQotICAg
IC8vIFByb3RlY3QgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlIGZyb20gYmVpbmcgZXZpY3RlZC4KLSAg
ICBUZXh0dXJlUHJvdGVjdG9yIHByb3RlY3Rvcih0ZXh0dXJlLmdldCgpKTsKLQotICAgIHRleHR1
cmUtPnVwZGF0ZUNvbnRlbnRzKGNvbnRlbnRzKTsKLQotICAgIHJldHVybiB0ZXh0dXJlLnJlbGVh
c2UoKTsKLX0KLQotUGFzc1JlZlB0cjxMYXllclRleHR1cmU+IFRleHR1cmVDYWNoZUNvbXBvc2l0
aW5nVGhyZWFkOjp0ZXh0dXJlRm9yQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIC8v
IEp1c3QgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCBmb29sZWQgYnkgc29tZSBtYWxpY2lvdXMg
d2ViIHBhZ2UKLSAgICAvLyBpbnRvIGNhY2hpbmcgbWlsbGlvbnMgb2YgY29sb3IgdGV4dHVyZXMu
Ci0gICAgaWYgKG1fY29sb3JzLnNpemUoKSA+IDEwMCkKLSAgICAgICAgbV9jb2xvcnMuY2xlYXIo
KTsKLQotICAgIENvbG9yVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2NvbG9ycy5maW5kKGNv
bG9yKTsKLSAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlPiB0ZXh0dXJlOwotICAgIGlmIChpdCA9PSBt
X2NvbG9ycy5lbmQoKSkgewotICAgICAgICB0ZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVhdGUo
dHJ1ZSAvKiBpc0NvbG9yICovKTsKLSNpZiBERUJVR19URVhUVVJFX01FTU9SWV9VU0FHRQotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW5nIHRleHR1cmUgMHgleCBmb3IgY29sb3IgMHgl
eFxuIiwgdGV4dHVyZS5nZXQoKSwgY29sb3IucmdiKCkpOwotI2VuZGlmCi0gICAgICAgIG1fY29s
b3JzLnNldChjb2xvciwgdGV4dHVyZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHRleHR1cmUgPSAo
Kml0KS52YWx1ZTsKLQotICAgIC8vIENvbG9yIHRleHR1cmVzIGNhbid0IGJlIGV2aWN0ZWQsIHNv
IG5vIG5lZWQgZm9yIFRleHR1cmVQcm90ZWN0b3IuCi0KLSAgICBpZiAodGV4dHVyZS0+c2l6ZSgp
ICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHRleHR1cmUtPnNldENvbnRlbnRzVG9Db2xvcihj
b2xvcik7Ci0KLSAgICByZXR1cm4gdGV4dHVyZS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
TGF5ZXJUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dXBkYXRlQ29udGVu
dHMoY29uc3QgUmVmUHRyPExheWVyVGV4dHVyZT4mIHRleHR1cmVJbiwgQnVmZmVyKiBjb250ZW50
cykKLXsKLSAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlPiB0ZXh0dXJlKHRleHR1cmVJbik7Ci0KLSAg
ICAvLyBJZiB0aGUgdGV4dHVyZSB3YXMgMCwgb3IgbmVlZHMgdG8gdHJhbnNpdGlvbiBmcm9tIGEg
c29saWQgY29sb3IgdGV4dHVyZSB0byBhIGNvbnRlbnRzIHRleHR1cmUsCi0gICAgLy8gY3JlYXRl
IGEgbmV3IHRleHR1cmUuCi0gICAgaWYgKCF0ZXh0dXJlIHx8IHRleHR1cmUtPmlzQ29sb3IoKSkK
LSAgICAgICAgdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIC8vIFByb3RlY3QgbmV3
bHkgY3JlYXRlZCB0ZXh0dXJlIGZyb20gYmVpbmcgZXZpY3RlZC4KLSAgICBUZXh0dXJlUHJvdGVj
dG9yIHByb3RlY3Rvcih0ZXh0dXJlLmdldCgpKTsKLQotICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRl
bnRzKGNvbnRlbnRzKTsKLQotICAgIHJldHVybiB0ZXh0dXJlLnJlbGVhc2UoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29t
cG9zaXRpbmdUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIFRl
eHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkX2gKLSNkZWZpbmUgVGV4dHVyZUNhY2hlQ29tcG9z
aXRpbmdUaHJlYWRfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5j
bHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKLSNpbmNsdWRlICJMYXll
clRpbGVJbmRleC5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgot
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRSZWN0OwotCi0vLyBBIExSVSBjYWNoZSBmb3Ig
T3BlbkdMIHRleHR1cmVzLgotY2xhc3MgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKTsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBmcmllbmQgVGV4dHVy
ZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQqIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCk7
Ci0KLSAgICAvLyBDcmVhdGVzIGEgbmV3IHRleHR1cmUgbWFuYWdlZCBieSB0aGlzIGNhY2hlLgot
ICAgIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBMYXllclRleHR1cmU6OmNyZWF0ZSgpOwotICAgIH0KLQotICAgIC8vIFJldHJp
ZXZlIGEgdGV4dHVyZSBmcm9tIHRoZSBjYWNoZS4KLSAgICBQYXNzUmVmUHRyPExheWVyVGV4dHVy
ZT4gdGV4dHVyZUZvckNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVm
ZmVyKik7Ci0gICAgUGFzc1JlZlB0cjxMYXllclRleHR1cmU+IHRleHR1cmVGb3JDb2xvcihjb25z
dCBDb2xvciYpOwotCi0gICAgLy8gVXBkYXRlIGNvbnRlbnRzIG9mIGFuIGV4aXN0aW5nIHRleHR1
cmUsIG9yIGNyZWF0ZSBhIG5ldyBvbmUgaWYgdGV4dHVyZSBpcyAwLgotICAgIFBhc3NSZWZQdHI8
TGF5ZXJUZXh0dXJlPiB1cGRhdGVDb250ZW50cyhjb25zdCBSZWZQdHI8TGF5ZXJUZXh0dXJlPiYs
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKik7Ci0KLSAgICBzaXplX3Qg
bWVtb3J5VXNhZ2UoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeVVzYWdlOyB9Ci0gICAgc2l6ZV90
IG1lbW9yeUxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlMaW1pdDsgfQotICAgIHZvaWQg
c2V0TWVtb3J5TGltaXQoc2l6ZV90IGxpbWl0KSB7IG1fbWVtb3J5TGltaXQgPSBsaW1pdDsgfQot
Ci0gICAgLy8gRXZpY3QgdW5wcm90ZWN0ZWQgdGV4dHVyZXMgdW50aWwgd2UgcmVhY2ggdGhlIGxp
bWl0IHByb3ZpZGVkLgotICAgIHZvaWQgcHJ1bmUoc2l6ZV90IGxpbWl0KTsKLSAgICB2b2lkIHBy
dW5lKCkgeyBwcnVuZShtZW1vcnlMaW1pdCgpKTsgfQotCi0gICAgLy8gRXZpY3QgYWxsIHRleHR1
cmVzIGZyb20gdGhlIGNhY2hlLgotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIC8vIFVwZGF0ZSB0
aGUgTFJVIGxpc3QuCi0gICAgdm9pZCB0ZXh0dXJlQWNjZXNzZWQoTGF5ZXJUZXh0dXJlKik7Ci0K
LSAgICAvLyBEZWxldGluZyBkZXN0cm95ZWQgdGV4dHVyZXMgaXMgcHJvdmlkZWQgYXMgYSBzZXBh
cmF0ZSBtZXRob2QsIGJlY2F1c2UKLSAgICAvLyB0aGVyZSBtaWdodCBub3QgYmUgYW4gT3BlbkdM
IGNvbnRleHQgY3VycmVudCB3aGVuIHRoZSB0ZXh0dXJlIGRlc3RydWN0b3IKLSAgICAvLyB3YXMg
Y2FsbGVkLiBDYWxsaW5nIHRoaXMgbWFrZXMgc3VyZSB0byBmcmVlIGFueSBzdWNoIHRleHR1cmVz
LgotICAgIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKLQotICAgIHZvaWQgdGV4dHVyZURlc3Ryb3ll
ZChMYXllclRleHR1cmUqKTsKLSAgICB2b2lkIHRleHR1cmVSZXNpemVkKExheWVyVGV4dHVyZSos
IGNvbnN0IEludFNpemUmIG9sZFNpemUpOwotICAgIHZvaWQgdGV4dHVyZVNpemVJbkJ5dGVzQ2hh
bmdlZChMYXllclRleHR1cmUqLCBpbnQgZGVsdGEpOwotCi0gICAgLy8gVW5kbyB0aGUgZWZmZWN0
cyBvZiBldmljdGlvbiwgaWYgcG9zc2libGUuCi0gICAgYm9vbCBpbnN0YWxsKExheWVyVGV4dHVy
ZSosIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplID0gSW50U2l6ZSgwLCAwKSwgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXJUeXBlID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpCYWNrZWRXaGVuTmVjZXNzYXJ5KTsKLSAgICBib29sIHJlc2l6ZVRleHR1cmUo
TGF5ZXJUZXh0dXJlKiwgY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpCdWZmZXJUeXBlID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpCYWNrZWRXaGVuTmVjZXNzYXJ5KTsKLQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgWm9tYmllVGV4
dHVyZSB7Ci0gICAgICAgIGV4cGxpY2l0IFpvbWJpZVRleHR1cmUoTGF5ZXJUZXh0dXJlKiB0ZXh0
dXJlKQotICAgICAgICAgICAgOiBidWZmZXIodGV4dHVyZS0+YnVmZmVyKCkpCi0gICAgICAgICAg
ICAsIHNpemUodGV4dHVyZS0+c2l6ZSgpKQotICAgICAgICAgICAgLCBzaXplSW5CeXRlcyh0ZXh0
dXJlLT5zaXplSW5CeXRlcygpKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVyOwotICAgICAgICBJbnRT
aXplIHNpemU7Ci0gICAgICAgIHNpemVfdCBzaXplSW5CeXRlczsKLSAgICB9OwotICAgIHR5cGVk
ZWYgTGlzdEhhc2hTZXQ8TGF5ZXJUZXh0dXJlKiA+IFRleHR1cmVTZXQ7Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFRpbGVJbmRleCwgUmVmUHRyPExheWVyVGV4dHVyZT4gPiBUZXh0dXJlTWFwOwotICAg
IHR5cGVkZWYgVmVjdG9yPFpvbWJpZVRleHR1cmU+IEdhcmJhZ2U7Ci0KLSAgICBUZXh0dXJlQ2Fj
aGVDb21wb3NpdGluZ1RocmVhZCgpOwotICAgIH5UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVh
ZCgpOwotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGNyZWF0
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpCdWZmZXJUeXBlKTsKLQotICAgIHZvaWQgaW5jTWVtb3J5VXNhZ2UoaW50IGRl
bHRhKSB7IHNldE1lbW9yeVVzYWdlKG1lbW9yeVVzYWdlKCkgKyBkZWx0YSk7IH0KLSAgICB2b2lk
IGRlY01lbW9yeVVzYWdlKGludCBkZWx0YSkgeyBzZXRNZW1vcnlVc2FnZShtZW1vcnlVc2FnZSgp
IC0gZGVsdGEpOyB9Ci0gICAgdm9pZCBzZXRNZW1vcnlVc2FnZShzaXplX3QpOwotCi0gICAgdm9p
ZCBldmljdChjb25zdCBUZXh0dXJlU2V0OjppdGVyYXRvciYpOwotCi0gICAgLy8gTFJVIHNldCBv
ZiB3ZWFrIHBvaW50ZXJzIHRvIHRleHR1cmVzLgotICAgIFRleHR1cmVTZXQgbV90ZXh0dXJlczsK
LSAgICBzaXplX3QgbV9tZW1vcnlVc2FnZTsKLSAgICBzaXplX3QgbV9tZW1vcnlMaW1pdDsKLQot
ICAgIHN0cnVjdCBDb2xvckhhc2ggewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBDb2xvciYga2V5KSB7IHJldHVybiBXVEY6OmludEhhc2goa2V5LnJnYigpKTsgfQotICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpIHsgcmV0
dXJuIGEgPT0gYjsgfQotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IHRydWU7Ci0gICAgfTsKLSAgICBzdHJ1Y3QgQ29sb3JIYXNoVHJhaXRz
IDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxDb2xvcj4gewotICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKLSAgICAgICAgLy8gVGhlIGRlbGV0ZWQgdmFs
dWUgaXMgYW4gaW52YWxpZCBjb2xvciB3aXRoIGFuIFJHQiB2YWx1ZSBvZiAweEZGRkZGRkZGLgot
ICAgICAgICAvLyBTdWNoIHZhbHVlcyBkbyBub3QgbmF0dXJhbGx5IG9jY3VyIGFzIGNvbG9ycy4K
LSAgICAgICAgLy8gQW5kIGVtcHR5IHZhbHVlIGlzIGFuIGludmFsaWQgY29sb3Igd2l0aCBhbiBS
R0IgdmFsdWUgb2YgMHgwLgotICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFs
dWUoQ29sb3ImIHNsb3QpIHsgbmV3ICgmc2xvdCkgQ29sb3IoKTsgKnJlaW50ZXJwcmV0X2Nhc3Q8
UkdCQTMyKj4oJnNsb3QpID0gQ29sb3I6OndoaXRlOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGlz
RGVsZXRlZFZhbHVlKGNvbnN0IENvbG9yJiB2YWx1ZSkgeyByZXR1cm4gIXZhbHVlLmlzVmFsaWQo
KSAmJiB2YWx1ZS5yZ2IoKSA9PSBDb2xvcjo6d2hpdGU7IH0KLSAgICB9OwotICAgIHR5cGVkZWYg
SGFzaE1hcDxDb2xvciwgUmVmUHRyPExheWVyVGV4dHVyZT4sIENvbG9ySGFzaCwgQ29sb3JIYXNo
VHJhaXRzPiBDb2xvclRleHR1cmVNYXA7Ci0gICAgQ29sb3JUZXh0dXJlTWFwIG1fY29sb3JzOwot
ICAgIEdhcmJhZ2UgbV9nYXJiYWdlOwotfTsKLQotVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJl
YWQqIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2VuZGlm
IC8vIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVmlkZW9MYXllcldlYktpdFRocmVhZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9WaWRlb0xheWVyV2ViS2l0VGhyZWFkLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9WaWRlb0xheWVyV2ViS2l0VGhy
ZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFZJREVPKQotI2lu
Y2x1ZGUgIlZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQuaCIKLQotI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgotI2luY2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKLSNpbmNsdWRlICJNZWRpYVBs
YXllci5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotVmlkZW9MYXllcldlYktpdFRocmVhZDo6VmlkZW9MYXllcldlYktpdFRo
cmVhZChNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIpCi0gICAgOiBMYXllcldlYktpdFRocmVhZChM
YXllciwgMCkKLXsKLSAgICBzZXRNZWRpYVBsYXllcihtZWRpYVBsYXllcik7Ci19Ci0KLVZpZGVv
TGF5ZXJXZWJLaXRUaHJlYWQ6On5WaWRlb0xheWVyV2ViS2l0VGhyZWFkKCkKLXsKLX0KLQotdm9p
ZCBWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpzZXRNZWRpYVBsYXllcihNZWRpYVBsYXllciogbWVk
aWFQbGF5ZXIpCi17Ci0gICAgbV9tZWRpYVBsYXllciA9IG1lZGlhUGxheWVyOwotCi0gICAgLy8g
VGhpcyBpcyBhIGJpdCBvZiBhIG1pc25vbWVyLCBzaW5jZSB3ZSBkb24ndCBuZWVkIGFuIGFjdHVh
bCBHTCB0ZXh0dXJlLgotICAgIC8vIEhvd2V2ZXIsIHRoZSBMYXllclJlbmRlcmVyIHdpbGwgb25s
eSBwcm9jZXNzIGxheWVycyB0aGF0ICJuZWVkIHRleHR1cmVzIgotICAgIHNldE5lZWRzVGV4dHVy
ZShpc0RyYXdhYmxlKCkgJiYgKGNvbnRlbnRzKCkgfHwgZHJhd3NDb250ZW50KCkgfHwgdGhpcy0+
bWVkaWFQbGF5ZXIoKSkpOwotCi0gICAgaWYgKCFtX21lZGlhUGxheWVyKSB7Ci0gICAgICAgIC8v
IFdlIGNhbid0IGFmZm9yZCB0byB3YWl0IHVudGlsIHRoZSBuZXh0IGNvbW1pdCB0byBzZXQgdGhl
IG1fbWVkaWFQbGF5ZXIKLSAgICAgICAgLy8gdG8gMCBpbiB0aGUgaW1wbCwgYmVjYXVzZSBpdCBp
cyBhYm91dCB0byBiZSBkZXN0cm95ZWQuCi0gICAgICAgIGxheWVyQ29tcG9zaXRpbmdUaHJlYWQo
KS0+c2V0TWVkaWFQbGF5ZXIoMCk7Ci0KLSAgICAgICAgLy8gQ2xlYXIgaG9sZSBwdW5jaCByZWN0
LgotICAgICAgICBzZXRIb2xlUHVuY2hSZWN0KEludFJlY3QoKSk7Ci0gICAgfQotCi0gICAgc2V0
TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpzZXRIb2xl
UHVuY2hSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgbV9ob2xlUHVuY2hSZWN0ID0g
cmVjdDsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIFZpZGVvTGF5ZXJXZWJLaXRU
aHJlYWQ6OnNldE5lZWRzRGlzcGxheSgpCi17Ci0gICAgLy8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQg
ZGlzcGxheSBwZXIgc2UsIGJ1dCBzb21lIGNvZGUgbWF5IGRlcGVuZCBvbgotICAgIC8vIHNldE5l
ZWRzRGlzcGxheSgpIHRvIGNhbGwgc2V0TmVlZHNDb21taXQoKQotICAgIHNldE5lZWRzQ29tbWl0
KCk7Ci19Ci0KLXZvaWQgVmlkZW9MYXllcldlYktpdFRocmVhZDo6Ym91bmRzQ2hhbmdlZCgpCi17
Ci0gICAgaWYgKCFtZWRpYVBsYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGb3Ig
dmlkZW8gbGF5ZXJzLCB0aGUgZW50aXJlIGxheWVyIHNob3VsZCBiZSBob2xlIHB1bmNoZWQKLSAg
ICAvLyBIb2xlIHB1bmNoIHJlY3RhbmdsZSBzaXplIGlzIGVxdWFsIHRvIHRoZSBzaXplIG9mIHRo
aXMgbGF5ZXIuCi0gICAgLy8gTm90ZSB0aGF0IGFsdGhvdWdoIHdlIGtub3cgdGhlICpzaXplKiBv
ZiB0aGlzIGxheWVyLCB3ZSB3b24ndCBrbm93IHRoZSBwb3NpdGlvbiBvZiB0aGlzIGxheWVyCi0g
ICAgLy8gdW50aWwgdGhlIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnNldERyYXdUcmFuc2Zvcm0g
bWV0aG9kIGlzIGNhbGxlZCBmcm9tIHRoZSBMYXllclJlbmRlcmVyLgotICAgIHNldEhvbGVQdW5j
aFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2JvdW5kcykpOwotfQotCi12b2lkIFZp
ZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCkKLXsK
LSAgICAvLyBUaGVyZSBhcmUgbm8gdGV4dHVyZSBjb250ZW50cywgdmlkZW8gaXMgc2hvd24gaW4g
YSBzcGVjaWFsIHNjcmVlbiB3aW5kb3cKLSAgICAvLyBiZWhpbmQgdGhlIHdlYiBwYWdlLgotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIEVOQUJMRShWSURFTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvVmlkZW9MYXllcldlYktpdFRocmVhZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVmlkZW9MYXll
cldlYktpdFRocmVhZC5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1ZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
LCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgVmlkZW9MYXllcldlYktpdFRocmVhZF9oCi0j
ZGVmaW5lIFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWRfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRlICJMYXllcldlYktpdFRocmVh
ZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE1lZGlhUGxheWVyOwotCi1jbGFz
cyBWaWRlb0xheWVyV2ViS2l0VGhyZWFkIDogcHVibGljIExheWVyV2ViS2l0VGhyZWFkIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWaWRlb0xheWVyV2ViS2l0VGhyZWFkPiBjcmVh
dGUoTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBWaWRlb0xheWVyV2ViS2l0VGhyZWFkKG1lZGlhUGxheWVyKSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB+VmlkZW9MYXllcldlYktpdFRocmVhZCgpOwotCi0gICAgdm9pZCBzZXRNZWRp
YVBsYXllcihNZWRpYVBsYXllciopOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRIb2xlUHVuY2hSZWN0KGNvbnN0IEludFJl
Y3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBib3VuZHNDaGFuZ2VkKCk7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgVmlk
ZW9MYXllcldlYktpdFRocmVhZChNZWRpYVBsYXllciopOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFC
TEUoVklERU8pCi0KLSNlbmRpZiAvLyBWaWRlb0xheWVyV2ViS2l0VGhyZWFkX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvV2ViR0xMYXllcldlYktp
dFRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9XZWJHTExheWVyV2ViS2l0VGhyZWFkLmNwcAkocmV2aXNpb24gMTYxNTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9XZWJHTExh
eWVyV2ViS2l0VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJHTExheWVyV2ViS2l0VGhyZWFkLmgiCi0KLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShXRUJHTCkKLQotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQ6OldlYkdMTGF5ZXJXZWJLaXRUaHJl
YWQoKQotICAgIDogRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZChXZWJHTExheWVyKQotICAgICwg
bV93ZWJHTENvbnRleHQoMCkKLXsKLX0KLQotV2ViR0xMYXllcldlYktpdFRocmVhZDo6fldlYkdM
TGF5ZXJXZWJLaXRUaHJlYWQoKQotewotICAgIGRlbGV0ZVRleHR1cmVzKCk7Ci19Ci0KLXZvaWQg
V2ViR0xMYXllcldlYktpdFRocmVhZDo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKQot
ewotICAgIGlmICghbV93ZWJHTENvbnRleHQgfHwgIW1fd2ViR0xDb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93ZWJHTENvbnRleHQtPnByZXBh
cmVUZXh0dXJlKCk7Ci0KLSAgICB1cGRhdGVGcm9udEJ1ZmZlcihtX3dlYkdMQ29udGV4dC0+Z2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSwgbV93ZWJHTENvbnRleHQtPnBsYXRmb3JtVGV4dHVy
ZSgpKTsKLX0KLQotdm9pZCBXZWJHTExheWVyV2ViS2l0VGhyZWFkOjpkZWxldGVUZXh0dXJlcygp
Ci17Ci0gICAgaWYgKG1fd2ViR0xDb250ZXh0ICYmIG1fd2ViR0xDb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgZGVsZXRlRnJvbnRCdWZmZXIoKTsKLX0KLQotdm9pZCBXZWJH
TExheWVyV2ViS2l0VGhyZWFkOjp3ZWJHTENvbnRleHREZXN0cm95ZWQoKQotewotICAgIGRlbGV0
ZVRleHR1cmVzKCk7Ci0gICAgbV93ZWJHTENvbnRleHQgPSAwOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVO
QUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvV2ViR0xMYXllcldlYktpdFRocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvV2ViR0xMYXllcldlYktpdFRocmVhZC5o
CShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L1dlYkdMTGF5ZXJXZWJLaXRUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICovCi0KLSNpZm5kZWYgV2ViR0xMYXllcldlYktpdFRocmVhZF9oCi0jZGVmaW5lIFdlYkdMTGF5
ZXJXZWJLaXRUaHJlYWRfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBF
TkFCTEUoV0VCR0wpCi0KLSNpbmNsdWRlICJFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci0KLWNsYXNz
IFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQgOiBwdWJsaWMgRUdMSW1hZ2VMYXllcldlYktpdFRocmVh
ZCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xMYXllcldlYktpdFRocmVh
ZD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xMYXll
cldlYktpdFRocmVhZCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5XZWJHTExheWVyV2ViS2l0
VGhyZWFkKCk7Ci0KLSAgICB2b2lkIHNldFdlYkdMQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkgeyBtX3dlYkdMQ29udGV4dCA9IGNvbnRleHQ7IH0KLSAgICB2b2lkIHdlYkdMQ29u
dGV4dERlc3Ryb3llZCgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRl
eHR1cmVDb250ZW50c0lmTmVlZGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmVz
KCk7Ci0KLXByaXZhdGU6Ci0gICAgV2ViR0xMYXllcldlYktpdFRocmVhZCgpOwotCi0gICAgR3Jh
cGhpY3NDb250ZXh0M0QqIG1fd2ViR0xDb250ZXh0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUo
V0VCR0wpCi0KLSNlbmRpZiAvLyBXZWJHTExheWVyV2ViS2l0VGhyZWFkX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYmxhY2tiZXJyeS9DdXN0b21GaWx0
ZXJWYWxpZGF0ZWRQcm9ncmFtQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9ibGFja2JlcnJ5L0N1c3RvbUZpbHRlclZh
bGlkYXRlZFByb2dyYW1CbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9ibGFja2JlcnJ5L0N1c3RvbUZpbHRl
clZhbGlkYXRlZFByb2dyYW1CbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCc
QVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
LSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0KLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJW
YWxpZGF0ZWRQcm9ncmFtLmgiCi0KLSNpbmNsdWRlICJMYXllckNvbXBpbGVkUHJvZ3JhbS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUxheWVyQ29tcGlsZWRQcm9ncmFtKiBDdXN0b21GaWx0
ZXJWYWxpZGF0ZWRQcm9ncmFtOjpwbGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbSgpCi17Ci0gICAgQVNT
RVJUKG1faXNJbml0aWFsaXplZCAmJiAhbV92YWxpZGF0ZWRWZXJ0ZXhTaGFkZXIuaXNOdWxsKCkg
JiYgIW1fdmFsaWRhdGVkRnJhZ21lbnRTaGFkZXIuaXNOdWxsKCkpOwotCi0gICAgaWYgKCFtX3Bs
YXRmb3JtQ29tcGlsZWRQcm9ncmFtKQotICAgICAgICBtX3BsYXRmb3JtQ29tcGlsZWRQcm9ncmFt
ID0gTGF5ZXJDb21waWxlZFByb2dyYW06OmNyZWF0ZShtX3ZhbGlkYXRlZFZlcnRleFNoYWRlciwg
bV92YWxpZGF0ZWRGcmFnbWVudFNoYWRlcikubGVha1JlZigpOwotCi0gICAgcmV0dXJuIG1fcGxh
dGZvcm1Db21waWxlZFByb2dyYW07Ci19Ci0KLXZvaWQgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJv
Z3JhbTo6cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBtX3BsYXRmb3JtQ29tcGlsZWRQcm9ncmFtID0g
MDsKLX0KLQotdm9pZCBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOjpwbGF0Zm9ybURlc3Ry
b3koKQotewotICAgIGRlcmVmSWZOb3ROdWxsKG1fcGxhdGZvcm1Db21waWxlZFByb2dyYW0pOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQURF
UlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2JsYWNr
YmVycnkvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbUJsYWNrQmVycnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYmxhY2tiZXJy
eS9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2
MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYmxhY2ti
ZXJyeS9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotCi0jaW5jbHVk
ZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgotCi0jaW5jbHVkZSAiTGF5ZXJDb21w
aWxlZFByb2dyYW0uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1MYXllckNvbXBpbGVkUHJv
Z3JhbSogQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTo6cGxhdGZvcm1Db21waWxlZFByb2dy
YW0oKQotewotICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQgJiYgIW1fdmFsaWRhdGVkVmVydGV4
U2hhZGVyLmlzTnVsbCgpICYmICFtX3ZhbGlkYXRlZEZyYWdtZW50U2hhZGVyLmlzTnVsbCgpKTsK
LQotICAgIGlmICghbV9wbGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbSkKLSAgICAgICAgbV9wbGF0Zm9y
bUNvbXBpbGVkUHJvZ3JhbSA9IExheWVyQ29tcGlsZWRQcm9ncmFtOjpjcmVhdGUobV92YWxpZGF0
ZWRWZXJ0ZXhTaGFkZXIsIG1fdmFsaWRhdGVkRnJhZ21lbnRTaGFkZXIpLmxlYWtSZWYoKTsKLQot
ICAgIHJldHVybiBtX3BsYXRmb3JtQ29tcGlsZWRQcm9ncmFtOwotfQotCi12b2lkIEN1c3RvbUZp
bHRlclZhbGlkYXRlZFByb2dyYW06OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgbV9wbGF0Zm9ybUNv
bXBpbGVkUHJvZ3JhbSA9IDA7Ci19Ci0KLXZvaWQgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3Jh
bTo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBkZXJlZklmTm90TnVsbChtX3BsYXRmb3JtQ29t
cGlsZWRQcm9ncmFtKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKENTU19TSEFERVJTKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFn
ZURlY29kZXIuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDI0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLS8vIEltcGxlbWVudGF0aW9uIG5vdGVzOgotLy8gQ3VycmVudCBpbXBs
ZW1lbnRhdGlvbiBwcm92aWRlcyB0aGUgc291cmNlIGltYWdlIHNpemUgd2l0aG91dCBkb2luZyBh
IGZ1bGwKLS8vIGRlY29kZS4gSXQgc2VlbXMgdGhhdCBsaWJpbWcgZG9lcyBub3Qgc3VwcG9ydCBw
YXJ0aWFsIGRlY29kaW5nLgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlBFR0lt
YWdlRGVjb2Rlci5oIgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpbWcvaW1nLmg+
Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IGltZ19saWJfdCBzX2lsaWI7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGxpYkluaXQoKQotewotICAg
IHN0YXRpYyBib29sIHNfaW5pdGlhbGl6ZWQ7Ci0gICAgaWYgKHNfaW5pdGlhbGl6ZWQpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgaWYgKGltZ19saWJfYXR0YWNoKCZzX2lsaWIpICE9IElNR19F
UlJfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gYXR0YWNoIHRvIGxpYmltZy4i
KTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBzX2luaXRpYWxpemVkID0gdHJ1ZTsK
LSAgICByZXR1cm4gMDsKLX0KLQotY2xhc3MgSW1hZ2VSZWFkZXIgewotcHVibGljOgotICAgIElt
YWdlUmVhZGVyKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKLSAgICAgICAgOiBt
X2RhdGEoZGF0YSkKLSAgICAgICAgLCBtX3NpemUoZGF0YVNpemUpCi0gICAgICAgICwgbV93aWR0
aCgwKQotICAgICAgICAsIG1faGVpZ2h0KDApCi0gICAgewotICAgICAgICBsaWJJbml0KCk7Ci0g
ICAgfQotCi0gICAgdm9pZCB1cGRhdGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRh
U2l6ZSk7Ci0gICAgaW50IHNldFNpemUoc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0KTsKLSAg
ICBpbnQgc2l6ZUV4dHJhY3Qoc2l6ZV90JiB3aWR0aCwgc2l6ZV90JiBoZWlnaHQpOwotICAgIGlu
dCBkZWNvZGUoc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBJbWFnZUZyYW1lKik7Ci0KLXBy
aXZhdGU6Ci0gICAgY29uc3QgY2hhciogbV9kYXRhOwotICAgIHNpemVfdCBtX3NpemU7Ci0gICAg
c2l6ZV90IG1fd2lkdGg7Ci0gICAgc2l6ZV90IG1faGVpZ2h0OwotfTsKLQotLy8gRnVuY3Rpb24g
dG8gZ2V0IHRoZSBvcmlnaW5hbCBzaXplIG9mIGFuIGltYWdlCi1zdGF0aWMgaW50IGltZ0RlY29k
ZVNldHVwKF9VaW50cHRydCBkYXRhLCBpbWdfdCogaW1nLCB1bnNpZ25lZCBmbGFncykKLXsKLSAg
ICBJbWFnZVJlYWRlciogcmVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxJbWFnZVJlYWRlcio+KGRh
dGEpOwotCi0gICAgaWYgKChpbWctPmZsYWdzICYgKElNR19XIHwgSU1HX0gpKSA9PSAoSU1HX1cg
fCBJTUdfSCkpCi0gICAgICAgIHJlYWRlci0+c2V0U2l6ZShpbWctPncsIGltZy0+aCk7Ci0KLSAg
ICAvLyBBbHdheXM6IHdhbnQgdG8gc3RvcCBwcm9jZXNzaW5nIHdoZXRoZXIgZ2V0IGEgc2l6ZSBv
ciBub3QuCi0gICAgcmV0dXJuIElNR19FUlJfSU5UUjsKLX0KLQotdm9pZCBJbWFnZVJlYWRlcjo6
dXBkYXRlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCi17Ci0gICAgbV9k
YXRhID0gZGF0YTsKLSAgICBtX3NpemUgPSBkYXRhU2l6ZTsKLX0KLQotaW50IEltYWdlUmVhZGVy
OjpzZXRTaXplKHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCkKLXsKLSAgICBtX3dpZHRoID0g
d2lkdGg7Ci0gICAgbV9oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBJ
bWFnZVJlYWRlcjo6c2l6ZUV4dHJhY3Qoc2l6ZV90JiB3aWR0aCwgc2l6ZV90JiBoZWlnaHQpCi17
Ci0gICAgaW1nX2RlY29kZV9jYWxsb3V0c190IGNhbGxvdXRzOwotICAgIGltZ190IGltZzsKLSAg
ICBpb19zdHJlYW1fdCogaW9zdHJlYW0gPSBpb19vcGVuKElPX01FTSwgSU9fUkVBRCwgbV9zaXpl
LCBtX2RhdGEpOwotICAgIGlmICghaW9zdHJlYW0pCi0gICAgICAgIHJldHVybiAtMTsKLQotICAg
IG1lbXNldCgmaW1nLCAwLCBzaXplb2YoaW1nKSk7Ci0gICAgbWVtc2V0KCZjYWxsb3V0cywgMCwg
c2l6ZW9mKGNhbGxvdXRzKSk7Ci0gICAgY2FsbG91dHMuc2V0dXBfZiA9IGltZ0RlY29kZVNldHVw
OwotICAgIGNhbGxvdXRzLmRhdGEgPSByZWludGVycHJldF9jYXN0PF9VaW50cHRydD4odGhpcyk7
Ci0KLSAgICBpbnQgcmMgPSBpbWdfbG9hZChzX2lsaWIsIGlvc3RyZWFtLCAmY2FsbG91dHMsICZp
bWcpOwotICAgIGlvX2Nsb3NlKGlvc3RyZWFtKTsKLSAgICBpZiAocmMgIT0gSU1HX0VSUl9JTlRS
KQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKCFtX3dpZHRoIHx8ICFtX2hlaWdodCkKLSAg
ICAgICAgcmV0dXJuIC0xOwotCi0gICAgd2lkdGggPSBtX3dpZHRoOwotICAgIGhlaWdodCA9IG1f
aGVpZ2h0OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBJbWFnZVJlYWRlcjo6ZGVjb2RlKHNp
emVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgSW1hZ2VGcmFtZSogYUZyYW1lKQotewotICAgIGlm
IChsaWJJbml0KCkgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGltZ190IGltZzsK
LSAgICBtZW1zZXQoJmltZywgMCwgc2l6ZW9mKGltZykpOwotICAgIGltZy5mb3JtYXQgPSBJTUdf
Rk1UX1JHQjg4ODsKLSAgICBpbWcudyA9IHdpZHRoOwotICAgIGltZy5oID0gaGVpZ2h0OwotCi0g
ICAgY29uc3QgaW50IENvbG9yQ29tcG9uZW50cyA9IDM7Ci0gICAgLy8gVXNlIGEgbXVsdGlwbGUg
b2YgMiBieXRlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlCi0gICAgaW50IHN0cmlkZSA9IChDb2xv
ckNvbXBvbmVudHMgKiB3aWR0aCArIDMpICYgfjM7Ci0gICAgYXV0byBidWZmZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPF91aW50OFtdPihzdHJpZGUgKiBoZWlnaHQpOwotICAgIGlmICghYnVmZmVyKQot
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgaW1nLmFjY2Vzcy5kaXJlY3QuZGF0YSA9IGJ1ZmZlci5n
ZXQoKTsKLSAgICBpbWcuYWNjZXNzLmRpcmVjdC5zdHJpZGUgPSBzdHJpZGU7Ci0gICAgaW1nLmZs
YWdzID0gSU1HX1cgfCBJTUdfSCB8IElNR19ESVJFQ1QgfCBJTUdfRk9STUFUOwotCi0gICAgaW9f
c3RyZWFtX3QqIGlvc3RyZWFtID0gaW9fb3BlbihJT19NRU0sIElPX1JFQUQsIG1fc2l6ZSwgbV9k
YXRhKTsKLSAgICBpZiAoIWlvc3RyZWFtKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpbnQg
cmMgPSBpbWdfbG9hZF9yZXNpemUoc19pbGliLCBpb3N0cmVhbSwgMCwgJmltZyk7Ci0gICAgaW9f
Y2xvc2UoaW9zdHJlYW0pOwotICAgIGlmIChyYyAhPSBJTUdfRVJSX09LKQotICAgICAgICByZXR1
cm4gLTE7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHsKLSAg
ICAgICAgX3VpbnQ4KiBjdXJQdHIgPSBidWZmZXIuZ2V0KCkgKyBqICogc3RyaWRlOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2lkdGg7IGkrKykgewotICAgICAgICAgICAgYUZy
YW1lLT5zZXRSR0JBKGksIGosIGN1clB0clswXSwgY3VyUHRyWzFdLCBjdXJQdHJbMl0sIDI1NSk7
Ci0gICAgICAgICAgICBjdXJQdHIgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
MDsKLX0KLQotSlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0ltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6
QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sCi0gICAgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQotICAgIDogSW1hZ2VEZWNv
ZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLXsKLX0KLQotdm9p
ZCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCi17Ci0gICAgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFsbERhdGFS
ZWNlaXZlZCk7Ci0KLSAgICBpZiAobV9yZWFkZXIpCi0gICAgICAgIG1fcmVhZGVyLT51cGRhdGVE
YXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7Ci19Ci0KLWJvb2wgSlBFR0ltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKLXsKLSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNT
aXplQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgaWYgKCFtX3JlYWRlcikgewotICAgICAgICAgICAg
aWYgKG1fZGF0YSkKLSAgICAgICAgICAgICAgICBtX3JlYWRlciA9IGFkb3B0UHRyKG5ldyBJbWFn
ZVJlYWRlcihtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpKTsKLSAgICAgICAgICAgIGlm
ICghbV9yZWFkZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIHNpemVfdCB3aWR0aCwgaGVpZ2h0OwotCi0gICAgICAgIGlmIChtX3JlYWRlci0+c2l6
ZUV4dHJhY3Qod2lkdGgsIGhlaWdodCkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmICghc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUoKTsKLX0KLQotSW1hZ2VGcmFtZSogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdElu
ZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoIWlzQWxsRGF0YVJlY2VpdmVkKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgaWYgKGluZGV4KQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQotICAgICAgICBtX2ZyYW1lQnVmZmVy
Q2FjaGUucmVzaXplKDEpOwotCi0gICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVy
Q2FjaGVbMF07Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgaXQncyBhbHJlYWR5IGRlY29kZWQu
Ci0gICAgLy8gRklYTUU6IENvdWxkIHNpemUgY2hhbmdlIGJldHdlZW4gY2FsbHMgdG8gdGhpcyBt
ZXRob2Q/Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxl
dGUpCi0gICAgICAgIHJldHVybiAmZnJhbWU7Ci0KLSAgICBpZiAoZnJhbWUuc3RhdHVzKCkgPT0g
SW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewotICAgICAgICBpZiAoIXNpemUoKS53aWR0aCgpIHx8
ICFzaXplKCkuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIGlmICghaXNTaXplQXZhaWxhYmxlKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFmcmFt
ZS5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAg
ICBzZXRGYWlsZWQoKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAg
IGZyYW1lLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOwotICAgICAgICAvLyBG
b3IgSlBFR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KLSAgICAg
ICAgZnJhbWUuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkp
KTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVhZGVyIHx8IG1fcmVhZGVyLT5kZWNvZGUoc2l6ZSgp
LndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgJmZyYW1lKSA9PSAtMSkgewotICAgICAgICBzZXRG
YWlsZWQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZnJhbWUuc2V0U3RhdHVz
KEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOwotICAgIHJldHVybiAmZnJhbWU7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1h
Z2VEZWNvZGVyLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBKUEVHSW1hZ2VEZWNvZGVyX2gKLSNkZWZpbmUgSlBFR0ltYWdlRGVjb2Rl
cl9oCi0KLSNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW1hZ2VSZWFkZXI7Ci0KLWNsYXNzIEpQ
RUdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEpQRUdJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJj
ZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwotCi0gICAgICAgIC8vIEltYWdlRGVjb2Rl
cgotICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0
dXJuICJqcGciOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKLSAg
ICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCk7
Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV1RGOjpPd25QdHI8SW1hZ2VS
ZWFkZXI+IG1fcmVhZGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gSlBFR0ltYWdlRGVjb2Rlcl9oCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVH
SW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwyNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKLSAqLwotCi0vLyBJbXBsZW1lbnRhdGlvbiBub3RlczoKLS8vIEN1cnJlbnQg
aW1wbGVtZW50YXRpb24gcHJvdmlkZXMgdGhlIHNvdXJjZSBpbWFnZSBzaXplIHdpdGhvdXQgZG9p
bmcgYSBmdWxsCi0vLyBkZWNvZGUuIEl0IHNlZW1zIHRoYXQgbGliaW1nIGRvZXMgbm90IHN1cHBv
cnQgcGFydGlhbCBkZWNvZGluZy4KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpQ
RUdJbWFnZURlY29kZXIuaCIKLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW1nL2lt
Zy5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBpbWdfbGliX3Qgc19pbGliOwotCi1zdGF0aWMgaW5saW5lIGludCBsaWJJbml0KCkKLXsK
LSAgICBzdGF0aWMgYm9vbCBzX2luaXRpYWxpemVkOwotICAgIGlmIChzX2luaXRpYWxpemVkKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChpbWdfbGliX2F0dGFjaCgmc19pbGliKSAhPSBJ
TUdfRVJSX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGF0dGFjaCB0byBsaWJp
bWcuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgc19pbml0aWFsaXplZCA9IHRy
dWU7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWNsYXNzIEltYWdlUmVhZGVyIHsKLXB1YmxpYzoKLSAg
ICBJbWFnZVJlYWRlcihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCi0gICAgICAg
IDogbV9kYXRhKGRhdGEpCi0gICAgICAgICwgbV9zaXplKGRhdGFTaXplKQotICAgICAgICAsIG1f
d2lkdGgoMCkKLSAgICAgICAgLCBtX2hlaWdodCgwKQotICAgIHsKLSAgICAgICAgbGliSW5pdCgp
OwotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
ZGF0YVNpemUpOwotICAgIGludCBzZXRTaXplKHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCk7
Ci0gICAgaW50IHNpemVFeHRyYWN0KHNpemVfdCYgd2lkdGgsIHNpemVfdCYgaGVpZ2h0KTsKLSAg
ICBpbnQgZGVjb2RlKHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgSW1hZ2VGcmFtZSopOwot
Ci1wcml2YXRlOgotICAgIGNvbnN0IGNoYXIqIG1fZGF0YTsKLSAgICBzaXplX3QgbV9zaXplOwot
ICAgIHNpemVfdCBtX3dpZHRoOwotICAgIHNpemVfdCBtX2hlaWdodDsKLX07Ci0KLS8vIEZ1bmN0
aW9uIHRvIGdldCB0aGUgb3JpZ2luYWwgc2l6ZSBvZiBhbiBpbWFnZQotc3RhdGljIGludCBpbWdE
ZWNvZGVTZXR1cChfVWludHB0cnQgZGF0YSwgaW1nX3QqIGltZywgdW5zaWduZWQgZmxhZ3MpCi17
Ci0gICAgSW1hZ2VSZWFkZXIqIHJlYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW1hZ2VSZWFkZXIq
PihkYXRhKTsKLQotICAgIGlmICgoaW1nLT5mbGFncyAmIChJTUdfVyB8IElNR19IKSkgPT0gKElN
R19XIHwgSU1HX0gpKQotICAgICAgICByZWFkZXItPnNldFNpemUoaW1nLT53LCBpbWctPmgpOwot
Ci0gICAgLy8gQWx3YXlzOiB3YW50IHRvIHN0b3AgcHJvY2Vzc2luZyB3aGV0aGVyIGdldCBhIHNp
emUgb3Igbm90LgotICAgIHJldHVybiBJTUdfRVJSX0lOVFI7Ci19Ci0KLXZvaWQgSW1hZ2VSZWFk
ZXI6OnVwZGF0ZURhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQotewotICAg
IG1fZGF0YSA9IGRhdGE7Ci0gICAgbV9zaXplID0gZGF0YVNpemU7Ci19Ci0KLWludCBJbWFnZVJl
YWRlcjo6c2V0U2l6ZShzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpCi17Ci0gICAgbV93aWR0
aCA9IHdpZHRoOwotICAgIG1faGVpZ2h0ID0gaGVpZ2h0OwotICAgIHJldHVybiAwOwotfQotCi1p
bnQgSW1hZ2VSZWFkZXI6OnNpemVFeHRyYWN0KHNpemVfdCYgd2lkdGgsIHNpemVfdCYgaGVpZ2h0
KQotewotICAgIGltZ19kZWNvZGVfY2FsbG91dHNfdCBjYWxsb3V0czsKLSAgICBpbWdfdCBpbWc7
Ci0gICAgaW9fc3RyZWFtX3QqIGlvc3RyZWFtID0gaW9fb3BlbihJT19NRU0sIElPX1JFQUQsIG1f
c2l6ZSwgbV9kYXRhKTsKLSAgICBpZiAoIWlvc3RyZWFtKQotICAgICAgICByZXR1cm4gLTE7Ci0K
LSAgICBtZW1zZXQoJmltZywgMCwgc2l6ZW9mKGltZykpOwotICAgIG1lbXNldCgmY2FsbG91dHMs
IDAsIHNpemVvZihjYWxsb3V0cykpOwotICAgIGNhbGxvdXRzLnNldHVwX2YgPSBpbWdEZWNvZGVT
ZXR1cDsKLSAgICBjYWxsb3V0cy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxfVWludHB0cnQ+KHRo
aXMpOwotCi0gICAgaW50IHJjID0gaW1nX2xvYWQoc19pbGliLCBpb3N0cmVhbSwgJmNhbGxvdXRz
LCAmaW1nKTsKLSAgICBpb19jbG9zZShpb3N0cmVhbSk7Ci0gICAgaWYgKHJjICE9IElNR19FUlJf
SU5UUikKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICghbV93aWR0aCB8fCAhbV9oZWlnaHQp
Ci0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHdpZHRoID0gbV93aWR0aDsKLSAgICBoZWlnaHQg
PSBtX2hlaWdodDsKLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgSW1hZ2VSZWFkZXI6OmRlY29k
ZShzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIEltYWdlRnJhbWUqIGFGcmFtZSkKLXsKLSAg
ICBpZiAobGliSW5pdCgpID09IC0xKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpbWdfdCBp
bWc7Ci0gICAgbWVtc2V0KCZpbWcsIDAsIHNpemVvZihpbWcpKTsKLSAgICBpbWcuZm9ybWF0ID0g
SU1HX0ZNVF9SR0I4ODg7Ci0gICAgaW1nLncgPSB3aWR0aDsKLSAgICBpbWcuaCA9IGhlaWdodDsK
LQotICAgIGNvbnN0IGludCBDb2xvckNvbXBvbmVudHMgPSAzOwotICAgIC8vIFVzZSBhIG11bHRp
cGxlIG9mIDIgYnl0ZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZQotICAgIGludCBzdHJpZGUgPSAo
Q29sb3JDb21wb25lbnRzICogd2lkdGggKyAzKSAmIH4zOwotICAgIGF1dG8gYnVmZmVyID0gc3Rk
OjptYWtlX3VuaXF1ZTxfdWludDhbXT4oc3RyaWRlICogaGVpZ2h0KTsKLSAgICBpZiAoIWJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGltZy5hY2Nlc3MuZGlyZWN0LmRhdGEgPSBidWZm
ZXIuZ2V0KCk7Ci0gICAgaW1nLmFjY2Vzcy5kaXJlY3Quc3RyaWRlID0gc3RyaWRlOwotICAgIGlt
Zy5mbGFncyA9IElNR19XIHwgSU1HX0ggfCBJTUdfRElSRUNUIHwgSU1HX0ZPUk1BVDsKLQotICAg
IGlvX3N0cmVhbV90KiBpb3N0cmVhbSA9IGlvX29wZW4oSU9fTUVNLCBJT19SRUFELCBtX3NpemUs
IG1fZGF0YSk7Ci0gICAgaWYgKCFpb3N0cmVhbSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAg
aW50IHJjID0gaW1nX2xvYWRfcmVzaXplKHNfaWxpYiwgaW9zdHJlYW0sIDAsICZpbWcpOwotICAg
IGlvX2Nsb3NlKGlvc3RyZWFtKTsKLSAgICBpZiAocmMgIT0gSU1HX0VSUl9PSykKLSAgICAgICAg
cmV0dXJuIC0xOwotCi0gICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGhlaWdodDsgaisrKSB7
Ci0gICAgICAgIF91aW50OCogY3VyUHRyID0gYnVmZmVyLmdldCgpICsgaiAqIHN0cmlkZTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKLSAgICAgICAgICAg
IGFGcmFtZS0+c2V0UkdCQShpLCBqLCBjdXJQdHJbMF0sIGN1clB0clsxXSwgY3VyUHRyWzJdLCAy
NTUpOwotICAgICAgICAgICAgY3VyUHRyICs9IDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLUpQRUdJbWFnZURlY29kZXI6OkpQRUdJbWFnZURlY29kZXIoSW1hZ2VTb3Vy
Y2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLAotICAgIEltYWdlU291cmNlOjpHYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICA6IEltYWdl
RGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCi17Ci19Ci0K
LXZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQotewotICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRhLCBhbGxE
YXRhUmVjZWl2ZWQpOwotCi0gICAgaWYgKG1fcmVhZGVyKQotICAgICAgICBtX3JlYWRlci0+dXBk
YXRlRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotfQotCi1ib29sIEpQRUdJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCi17Ci0gICAgaWYgKCFJbWFnZURlY29kZXI6
OmlzU2l6ZUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIGlmICghbV9yZWFkZXIpIHsKLSAgICAgICAg
ICAgIGlmIChtX2RhdGEpCi0gICAgICAgICAgICAgICAgbV9yZWFkZXIgPSBhZG9wdFB0cihuZXcg
SW1hZ2VSZWFkZXIobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fcmVhZGVyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICBzaXplX3Qgd2lkdGgsIGhlaWdodDsKLQotICAgICAgICBpZiAobV9yZWFkZXIt
PnNpemVFeHRyYWN0KHdpZHRoLCBoZWlnaHQpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoIXNldFNpemUod2lkdGgsIGhlaWdodCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZh
aWxhYmxlKCk7Ci19Ci0KLUltYWdlRnJhbWUqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVy
QXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKCFpc0FsbERhdGFSZWNlaXZlZCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChpbmRleCkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKLSAgICAgICAgbV9mcmFtZUJ1
ZmZlckNhY2hlLnJlc2l6ZSgxKTsKLQotICAgIEltYWdlRnJhbWUmIGZyYW1lID0gbV9mcmFtZUJ1
ZmZlckNhY2hlWzBdOwotCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgYWxyZWFkeSBkZWNv
ZGVkLgotICAgIC8vIEZJWE1FOiBDb3VsZCBzaXplIGNoYW5nZSBiZXR3ZWVuIGNhbGxzIHRvIHRo
aXMgbWV0aG9kPwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNv
bXBsZXRlKQotICAgICAgICByZXR1cm4gJmZyYW1lOwotCi0gICAgaWYgKGZyYW1lLnN0YXR1cygp
ID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFzaXplKCkud2lkdGgo
KSB8fCAhc2l6ZSgpLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzU2l6ZUF2YWlsYWJs
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
ZnJhbWUuc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkgewotICAgICAg
ICAgICAgc2V0RmFpbGVkKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAg
ICAgICBmcmFtZS5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKLSAgICAgICAg
Ly8gRm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0g
ICAgICAgIGZyYW1lLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6
ZSgpKSk7Ci0gICAgfQotCi0gICAgaWYgKCFtX3JlYWRlciB8fCBtX3JlYWRlci0+ZGVjb2RlKHNp
emUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCksICZmcmFtZSkgPT0gLTEpIHsKLSAgICAgICAg
c2V0RmFpbGVkKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGZyYW1lLnNldFN0
YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKLSAgICByZXR1cm4gJmZyYW1lOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBF
R0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgSlBFR0ltYWdlRGVjb2Rlcl9oCi0jZGVmaW5lIEpQRUdJbWFnZURl
Y29kZXJfaAotCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0jaW5jbHVkZSA8d3RmL093blB0
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEltYWdlUmVhZGVyOwotCi1jbGFz
cyBKUEVHSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7Ci0gICAgcHVibGljOgot
ICAgICAgICBKUEVHSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VT
b3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKLQotICAgICAgICAvLyBJbWFnZURl
Y29kZXIKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7
IHJldHVybiAianBnIjsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotICAgICAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXpl
X3QpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciosIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdURjo6T3duUHRyPElt
YWdlUmVhZGVyPiBtX3JlYWRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEpQRUdJbWFnZURlY29kZXJfaAotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9ibGFja2JlcnJ5L01lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vYmxhY2ti
ZXJyeS9NZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ibGFja2JlcnJ5L01lZGlhU3Ry
ZWFtQ2VudGVyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5LmgiCi0K
LSNpbmNsdWRlICJNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50LmgiCi0jaW5jbHVkZSAiTWVkaWFT
dHJlYW1Qcml2YXRlLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0
Q2xpZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU1lZGlhU3RyZWFtQ2VudGVyJiBN
ZWRpYVN0cmVhbUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIoKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChNZWRpYVN0cmVhbUNlbnRlckJsYWNr
QmVycnksIGNlbnRlciwgKCkpOwotICAgIHJldHVybiBjZW50ZXI7Ci19Ci0KLU1lZGlhU3RyZWFt
Q2VudGVyQmxhY2tCZXJyeTo6TWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5KCkKLXsKLX0KLQot
TWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5Ojp+TWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5
KCkKLXsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnk6OnZhbGlkYXRlUmVx
dWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBh
c3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4p
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSAgICAKLXZvaWQgTWVkaWFTdHJlYW1DZW50
ZXJCbGFja0JlcnJ5OjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3Jl
YXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+LCBQYXNzUmVmUHRyPE1l
ZGlhQ29uc3RyYWludHM+KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgTWVk
aWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5OjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudD4pCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ibGFja2JlcnJ5L01lZGlhU3RyZWFtQ2VudGVyQmxh
Y2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2JsYWNrYmVycnkvTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5LmgJKHJldmlzaW9uIDE2
MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2JsYWNrYmVycnkv
TWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
LSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tC
ZXJyeV9oCi0jZGVmaW5lIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeV9oCi0KLSNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIuaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTWVkaWFTdHJlYW1Qcml2YXRlOwotY2xh
c3MgTWVkaWFTdHJlYW1Tb3VyY2U7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVu
dDsKLQotY2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5IDogcHVibGljIE1lZGlhU3Ry
ZWFtQ2VudGVyIHsKLXB1YmxpYzoKLSAgICBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkoKTsK
LSAgICB+TWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9u
Q2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFpbnRzLCBQ
YXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3RyYWludHMpOwotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25D
bGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBh
c3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25zdHJhaW50cyk7Ci0gICAgdmlydHVh
bCBib29sIGdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1U
cmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50PikgT1ZFUlJJREU7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jZW5kaWYgLy8g
TWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2JsYWNrYmVycnkvTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ibGFj
a2JlcnJ5L01lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2JsYWNrYmVycnkvTWVkaWFT
dHJlYW1DZW50ZXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkuaCIK
LQotI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaCIKLSNpbmNsdWRlICJNZWRp
YVN0cmVhbVByaXZhdGUuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVl
c3RDbGllbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTWVkaWFTdHJlYW1DZW50ZXIm
IE1lZGlhU3RyZWFtQ2VudGVyOjpwbGF0Zm9ybUNlbnRlcigpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE1lZGlhU3RyZWFtQ2VudGVyQmxh
Y2tCZXJyeSwgY2VudGVyLCAoKSk7Ci0gICAgcmV0dXJuIGNlbnRlcjsKLX0KLQotTWVkaWFTdHJl
YW1DZW50ZXJCbGFja0JlcnJ5OjpNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkoKQotewotfQot
Ci1NZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnk6On5NZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVy
cnkoKQotewotfQotCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeTo6dmFsaWRhdGVS
ZXF1ZXN0Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50Piwg
UGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRz
PikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotICAgIAotdm9pZCBNZWRpYVN0cmVhbUNl
bnRlckJsYWNrQmVycnk6OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1D
cmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4sIFBhc3NSZWZQdHI8
TWVkaWFDb25zdHJhaW50cz4pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBN
ZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnk6OmdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50PikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2JsYWNrYmVycnkvTWVkaWFTdHJlYW1DZW50ZXJC
bGFja0JlcnJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vYmxhY2tiZXJyeS9NZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkuaAkocmV2aXNpb24g
MTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vYmxhY2tiZXJy
eS9NZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTWVkaWFTdHJlYW1DZW50ZXJCbGFj
a0JlcnJ5X2gKLSNkZWZpbmUgTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5X2gKLQotI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlci5oIgotCi0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRpYVN0cmVhbVByaXZhdGU7Ci1j
bGFzcyBNZWRpYVN0cmVhbVNvdXJjZTsKLWNsYXNzIE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xp
ZW50OwotCi1jbGFzcyBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkgOiBwdWJsaWMgTWVkaWFT
dHJlYW1DZW50ZXIgewotcHVibGljOgotICAgIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeSgp
OwotICAgIH5NZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkoKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRp
b25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMs
IFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25zdHJhaW50cyk7Ci0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlv
bkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywg
UGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KSBPVkVSUklERTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNlbmRpZiAv
LyBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnlfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZV9oCi0jZGVmaW5lIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlX2gKLQotI2luY2x1ZGUgIkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIDogcHVibGljIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
QmFzZSB7Ci1wdWJsaWM6Ci0gICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKQotICAgICAgICA6
IG1faXNTdG9yZWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBjb25zdCBDcmVk
ZW50aWFsJiBwcm9wb3NlZENyZWRlbnRpYWwsIHVuc2lnbmVkIHByZXZpb3VzRmFpbHVyZUNvdW50
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCi0gICAgICAgIDogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlKHByb3RlY3Rpb25T
cGFjZSwgcHJvcG9zZWRDcmVkZW50aWFsLCBwcmV2aW91c0ZhaWx1cmVDb3VudCwgcmVzcG9uc2Us
IGVycm9yKQotICAgICAgICAsIG1faXNTdG9yZWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgc2V0U3RvcmVkKGJvb2wgaXNTdG9yZWQpIHsgbV9pc1N0b3JlZCA9IGlzU3RvcmVkOyB9
Ci0gICAgYm9vbCBpc1N0b3JlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdG9yZWQ7IH0KLQotICAg
IGJvb2wgaGFzQ3JlZGVudGlhbHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gIXByb3Bvc2VkQ3Jl
ZGVudGlhbCgpLmlzRW1wdHkoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gRGVzY3JpYmVz
IGlmIGF0dGFjaGVkIGNyZWRlbnRpYWxzIGFyZSBzdG9yZWQgaW4gQ3JlZGVudGlhbFN0b3JhZ2Uu
Ci0gICAgYm9vbCBtX2lzU3RvcmVkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0F1dG9maWxsQmFja2luZ1N0b3JlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvQXV0
b2ZpbGxCYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvQXV0b2ZpbGxCYWNraW5nU3RvcmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkF1dG9maWxs
QmFja2luZ1N0b3JlLmgiCi0KLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiU1FM
aXRlU3RhdGVtZW50LmgiCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2V0dGluZ3MuaD4K
LQotI2RlZmluZSBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRShzdGF0ZW1lbnQsIHJldHVyblZhbHVl
LCAuLi4pIFwKLSAgICBpZiAoc3RhdGVtZW50KSB7IFwKLSAgICAgICAgTE9HX0VSUk9SKF9fVkFf
QVJHU19fKTsgXAotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7IFwKLSAgICB9Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotQXV0b2ZpbGxCYWNraW5nU3RvcmUmIGF1dG9maWxsQmFja2luZ1N0
b3JlKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF1dG9maWxsQmFja2luZ1N0b3JlLCBi
YWNraW5nU3RvcmUsICgpKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZS5tX2RhdGFiYXNlLmlzT3Bl
bigpKQotICAgICAgICBiYWNraW5nU3RvcmUub3BlbihwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5hcHBsaWNhdGlvbkRh
dGFEaXJlY3RvcnkoKS5jX3N0cigpLCAiL2F1dG9maWxsLmRiIikpOwotICAgIHJldHVybiBiYWNr
aW5nU3RvcmU7Ci19Ci0KLUF1dG9maWxsQmFja2luZ1N0b3JlOjpBdXRvZmlsbEJhY2tpbmdTdG9y
ZSgpCi0gICAgOiBtX2FkZFN0YXRlbWVudCgwKQotICAgICwgbV91cGRhdGVTdGF0ZW1lbnQoMCkK
LSAgICAsIG1fY29udGFpbnNTdGF0ZW1lbnQoMCkKLSAgICAsIG1fZ2V0U3RhdGVtZW50KDApCi17
Ci19Ci0KLUF1dG9maWxsQmFja2luZ1N0b3JlOjp+QXV0b2ZpbGxCYWNraW5nU3RvcmUoKQotewot
ICAgIGRlbGV0ZSBtX2FkZFN0YXRlbWVudDsKLSAgICBtX2FkZFN0YXRlbWVudCA9IDA7Ci0gICAg
ZGVsZXRlIG1fdXBkYXRlU3RhdGVtZW50OwotICAgIG1fdXBkYXRlU3RhdGVtZW50ID0gMDsKLSAg
ICBkZWxldGUgbV9jb250YWluc1N0YXRlbWVudDsKLSAgICBtX2NvbnRhaW5zU3RhdGVtZW50ID0g
MDsKLSAgICBkZWxldGUgbV9nZXRTdGF0ZW1lbnQ7Ci0gICAgbV9nZXRTdGF0ZW1lbnQgPSAwOwot
Ci0gICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2Uo
KTsKLX0KLQotYm9vbCBBdXRvZmlsbEJhY2tpbmdTdG9yZTo6b3Blbihjb25zdCBTdHJpbmcmIGRi
UGF0aCkKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UuaXNPcGVuKCkpOwotCi0gICAgSEFORExF
X1NRTF9FWEVDX0ZBSUxVUkUoIW1fZGF0YWJhc2Uub3BlbihkYlBhdGgpLCBmYWxzZSwKLSAgICAg
ICAgIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGZpbGUgJXMgZm9yIGF1dG9maWxsIGRhdGFiYXNl
IiwgZGJQYXRoLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhp
c3RzKCJhdXRvZmlsbCIpKSB7Ci0gICAgICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKCFtX2Rh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgYXV0b2ZpbGwgKGlkIElOVEVHRVIg
UFJJTUFSWSBLRVksIG5hbWUgVkFSQ0hBUiBOT1QgTlVMTCwgdmFsdWUgVkFSQ0hBUiBOT1QgTlVM
TCwgY291bnQgSU5URUdFUiBERUZBVUxUIDEpIiksCi0gICAgICAgICAgICBmYWxzZSwgIkZhaWxl
ZCB0byBjcmVhdGUgdGFibGUgYXV0b2ZpbGwgZm9yIGF1dG9maWxsIGRhdGFiYXNlIik7Ci0KLSAg
ICAgICAgLy8gQ3JlYXRlIGluZGV4IGZvciB0YWJsZSBhdXRvZmlsbC4KLSAgICAgICAgSEFORExF
X1NRTF9FWEVDX0ZBSUxVUkUoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBJTkRF
WCBhdXRvZmlsbF9uYW1lIE9OIGF1dG9maWxsIChuYW1lKSIpLAotICAgICAgICAgICAgZmFsc2Us
ICJGYWlsZWQgdG8gY3JlYXRlIGF1dG9maWxsX25hbWUgaW5kZXggZm9yIHRhYmxlIGF1dG9maWxs
Iik7Ci0gICAgfQotCi0gICAgLy8gUHJlcGFyZSB0aGUgc3RhdGVtZW50cy4KLSAgICBtX2FkZFN0
YXRlbWVudCA9IG5ldyBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIGF1
dG9maWxsIChuYW1lLCB2YWx1ZSkgVkFMVUVTICg/LCA/KSIpOwotICAgIEhBTkRMRV9TUUxfRVhF
Q19GQUlMVVJFKG1fYWRkU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2ssCi0gICAg
ICAgIGZhbHNlLCAiRmFpbGVkIHRvIHByZXBhcmUgYWRkIHN0YXRlbWVudCIpOwotCi0gICAgbV91
cGRhdGVTdGF0ZW1lbnQgPSBuZXcgU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUg
YXV0b2ZpbGwgU0VUIGNvdW50ID0gKFNFTEVDVCBjb3VudCArIDEgZnJvbSBhdXRvZmlsbCBXSEVS
RSBuYW1lID0gPyBBTkQgdmFsdWUgPSA/KSBXSEVSRSBuYW1lID0gPyBBTkQgdmFsdWUgPSA/Iik7
Ci0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUobV91cGRhdGVTdGF0ZW1lbnQtPnByZXBhcmUo
KSAhPSBTUUxSZXN1bHRPaywKLSAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gcHJlcGFyZSB1cGRh
dGUgc3RhdGVtZW50Iik7Ci0KLSAgICBtX2NvbnRhaW5zU3RhdGVtZW50ID0gbmV3IFNRTGl0ZVN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00gYXV0b2ZpbGwgV0hFUkUg
bmFtZSA9ID8gQU5EIHZhbHVlID0gPyIpOwotICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKG1f
Y29udGFpbnNTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaywKLSAgICAgICAgZmFs
c2UsICJGYWlsZWQgdG8gcHJlcGFyZSBjb250YWlucyBzdGF0ZW1lbnQiKTsKLQotICAgIG1fZ2V0
U3RhdGVtZW50ID0gbmV3IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHZhbHVl
IEZST00gYXV0b2ZpbGwgV0hFUkUgbmFtZSA9ID8gYW5kIHZhbHVlIGxpa2UgPyBPUkRFUiBCWSBj
b3VudCBERVNDIik7Ci0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUobV9nZXRTdGF0ZW1lbnQt
PnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaywKLSAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gcHJl
cGFyZSBnZXQgc3RhdGVtZW50Iik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBdXRv
ZmlsbEJhY2tpbmdTdG9yZTo6YWRkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAobmFtZS5pc0VtcHR5KCkgfHwgdmFsdWUuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0g
ICAgQVNTRVJUKG1fZGF0YWJhc2UudGFibGVFeGlzdHMoImF1dG9maWxsIikpOwotCi0gICAgaWYg
KGNvbnRhaW5zKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHVwZGF0ZShuYW1lLCB2YWx1
ZSk7Ci0KLSAgICBpZiAoIW1fYWRkU3RhdGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBtX2FkZFN0YXRlbWVudC0+YmluZFRleHQoMSwgbmFtZSk7Ci0gICAgbV9hZGRTdGF0ZW1l
bnQtPmJpbmRUZXh0KDIsIHZhbHVlKTsKLQotICAgIGludCByZXN1bHQgPSBtX2FkZFN0YXRlbWVu
dC0+c3RlcCgpOwotICAgIG1fYWRkU3RhdGVtZW50LT5yZXNldCgpOwotICAgIEhBTkRMRV9TUUxf
RVhFQ19GQUlMVVJFKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lLCBmYWxzZSwKLSAgICAgICAgIkZh
aWxlZCB0byBhZGQgYXV0b2ZpbGwgaXRlbSBpbnRvIHRhYmxlIGF1dG9maWxsIC0gJWkiLCByZXN1
bHQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQXV0b2ZpbGxCYWNraW5nU3RvcmU6
OnVwZGF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKCFtX3VwZGF0ZVN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV91
cGRhdGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG5hbWUpOwotICAgIG1fdXBkYXRlU3RhdGVtZW50
LT5iaW5kVGV4dCgyLCB2YWx1ZSk7Ci0gICAgbV91cGRhdGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDMs
IG5hbWUpOwotICAgIG1fdXBkYXRlU3RhdGVtZW50LT5iaW5kVGV4dCg0LCB2YWx1ZSk7Ci0KLSAg
ICBpbnQgcmVzdWx0ID0gbV91cGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKTsKLSAgICBtX3VwZGF0ZVN0
YXRlbWVudC0+cmVzZXQoKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRShyZXN1bHQgIT0g
U1FMUmVzdWx0RG9uZSwgZmFsc2UsCi0gICAgICAgICJGYWlsZWQgdG8gdXBkYXRlIGF1dG9maWxs
IGl0ZW0gaW4gdGFibGUgYXV0b2ZpbGwgLSAlaSIsIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBBdXRvZmlsbEJhY2tpbmdTdG9yZTo6Y29udGFpbnMoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAotewotICAgIGlmICghbV9jb250YWlu
c1N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9jb250YWluc1N0YXRl
bWVudC0+YmluZFRleHQoMSwgbmFtZSk7Ci0gICAgbV9jb250YWluc1N0YXRlbWVudC0+YmluZFRl
eHQoMiwgdmFsdWUpOwotCi0gICAgaW50IHJlc3VsdCA9IG1fY29udGFpbnNTdGF0ZW1lbnQtPnN0
ZXAoKTsKLSAgICBpbnQgbnVtYmVyT2ZSb3dzID0gbV9jb250YWluc1N0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDApOwotICAgIG1fY29udGFpbnNTdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgSEFORExF
X1NRTF9FWEVDX0ZBSUxVUkUocmVzdWx0ICE9IFNRTFJlc3VsdFJvdywgZmFsc2UsCi0gICAgICAg
ICJGYWlsZWQgdG8gZXhlY3V0ZSBzZWxlY3QgYXV0b2ZpbGwgaXRlbSBmcm9tIHRhYmxlIGF1dG9m
aWxsIGluIGNvbnRhaW5zIC0gJWkiLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIG51bWJlck9mUm93
czsKLX0KLQotVmVjdG9yPFN0cmluZz4gQXV0b2ZpbGxCYWNraW5nU3RvcmU6OmdldChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWVIaW50KQotewotICAgIEFTU0VSVChtX2Rh
dGFiYXNlLmlzT3BlbigpKTsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS50YWJsZUV4aXN0cygiYXV0
b2ZpbGwiKSk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBjYW5kaWRhdGVzOwotICAgIGlmIChuYW1l
LmlzRW1wdHkoKSB8fCB2YWx1ZUhpbnQuaXNFbXB0eSgpIHx8ICFtX2dldFN0YXRlbWVudCkKLSAg
ICAgICAgcmV0dXJuIGNhbmRpZGF0ZXM7Ci0KLSAgICBTdHJpbmcgdmFsdWUgPSB2YWx1ZUhpbnQg
KyAiJSI7Ci0gICAgbV9nZXRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG5hbWUpOwotICAgIG1fZ2V0
U3RhdGVtZW50LT5iaW5kVGV4dCgyLCB2YWx1ZSk7Ci0KLSAgICBpbnQgcmVzdWx0OwotICAgIHdo
aWxlICgocmVzdWx0ID0gbV9nZXRTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KQot
ICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChtX2dldFN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgw
KSk7Ci0gICAgbV9nZXRTdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgSEFORExFX1NRTF9FWEVDX0ZB
SUxVUkUocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUsIGNhbmRpZGF0ZXMsCi0gICAgICAgICJGYWls
ZWQgdG8gZXhlY3V0ZSBzZWxlY3QgYXV0b2ZpbGwgaXRlbSBmcm9tIHRhYmxlIGF1dG9maWxsIGlu
IGdldCAtICVpIiwgcmVzdWx0KTsKLQotICAgIHJldHVybiBjYW5kaWRhdGVzOwotfQotCi1ib29s
IEF1dG9maWxsQmFja2luZ1N0b3JlOjpjbGVhcigpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2Uu
aXNPcGVuKCkpOwotICAgIEFTU0VSVChtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJhdXRvZmlsbCIp
KTsKLQotICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21t
YW5kKCJERUxFVEUgRlJPTSBhdXRvZmlsbCIpLAotICAgICAgICBmYWxzZSwgIkZhaWxlZCB0byBj
bGVhciB0YWJsZSBhdXRvZmlsbCIpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9BdXRvZmlsbEJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9BdXRvZmlsbEJhY2tpbmdTdG9yZS5oCShy
ZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNr
YmVycnkvQXV0b2ZpbGxCYWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgQXV0
b2ZpbGxCYWNraW5nU3RvcmVfaAotI2RlZmluZSBBdXRvZmlsbEJhY2tpbmdTdG9yZV9oCi0KLSNp
bmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3Jt
TWlzYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1dG9maWxsQmFja2luZ1N0
b3JlIHsKLXB1YmxpYzoKLSAgICBmcmllbmQgQXV0b2ZpbGxCYWNraW5nU3RvcmUmIGF1dG9maWxs
QmFja2luZ1N0b3JlKCk7Ci0KLSAgICB+QXV0b2ZpbGxCYWNraW5nU3RvcmUoKTsKLSAgICBib29s
IG9wZW4oY29uc3QgU3RyaW5nJiBkYlBhdGgpOwotICAgIGJvb2wgYWRkKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gZ2V0KGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZUhpbnQpOwotICAgIGJvb2wgY2xlYXIo
KTsKLQotcHJpdmF0ZToKLSAgICBBdXRvZmlsbEJhY2tpbmdTdG9yZSgpOwotICAgIGJvb2wgdXBk
YXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgYm9vbCBj
b250YWlucyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0Owot
Ci0gICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQqIG1f
YWRkU3RhdGVtZW50OwotICAgIFNRTGl0ZVN0YXRlbWVudCogbV91cGRhdGVTdGF0ZW1lbnQ7Ci0g
ICAgU1FMaXRlU3RhdGVtZW50KiBtX2NvbnRhaW5zU3RhdGVtZW50OwotICAgIFNRTGl0ZVN0YXRl
bWVudCogbV9nZXRTdGF0ZW1lbnQ7Ci0KLSAgICBESVNBQkxFX0NPUFkoQXV0b2ZpbGxCYWNraW5n
U3RvcmUpCi19OwotCi1BdXRvZmlsbEJhY2tpbmdTdG9yZSYgYXV0b2ZpbGxCYWNraW5nU3RvcmUo
KTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXV0b2ZpbGxCYWNraW5n
U3RvcmVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L0Jsb2JTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9CbG9iU3RyZWFtLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0Jsb2JTdHJlYW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJsb2JTdHJlYW0u
aCIKLQotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0KLXVzaW5nIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpGaWx0ZXJTdHJlYW07Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQmxvYlN0cmVh
bTo6QmxvYlN0cmVhbShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSkKLSAgICA6IEZpbHRlclN0cmVhbSgpCi0gICAgLCBtX3Jlc3BvbnNlKHJl
c3BvbnNlKQotewotICAgIHJlZ2lzdGVyU3RyZWFtSWQoKTsKLSAgICBoYW5kbGUtPnNldENsaWVu
dCh0aGlzKTsKLX0KLQotQmxvYlN0cmVhbTo6fkJsb2JTdHJlYW0oKQotewotfQotCi12b2lkIEJs
b2JTdHJlYW06OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuLCBpbnQpCi17Ci0gICAgbm90aWZ5RGF0YVJlY2VpdmVkKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpjcmVhdGVOZXR3b3JrQnVmZmVyQnlXcmFwcGluZ0RhdGEoZGF0YSwgbGVu
KSk7Ci19Ci0KLXZvaWQgQmxvYlN0cmVhbTo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRs
ZSosIGRvdWJsZSkKLXsKLSAgICBub3RpZnlDbG9zZShGaWx0ZXJTdHJlYW06OlN0YXR1c1N1Y2Nl
c3MpOwotfQotCi12b2lkIEJsb2JTdHJlYW06OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZUVycm9yJikKLXsKLSAgICBub3RpZnlDbG9zZShGaWx0ZXJTdHJlYW06OlN0YXR1
c0Vycm9ySU8pOwotfQotCi1CbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIEJsb2JTdHJlYW06
OnVybCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVzcG9uc2UudXJsKCkuc3RyaW5nKCk7Ci19
Ci0KLWNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgQmxvYlN0cmVhbTo6bWltZVR5
cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jlc3BvbnNlLm1pbWVUeXBlKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvYmxhY2tiZXJyeS9CbG9iU3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0Jsb2JTdHJlYW0uaAkocmV2aXNpb24gMTYxNTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0Jsb2JTdHJl
YW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgQmxvYlN0cmVhbV9oCi0jZGVmaW5lIEJsb2JT
dHJlYW1faAotCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCi0KLSNpbmNsdWRlIDxuZXR3b3JrL0ZpbHRlclN0cmVhbS5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlc291cmNlSGFuZGxlOwotCi1jbGFzcyBC
bG9iU3RyZWFtIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbSB7Ci1wdWJsaWM6Ci0gICAgQmxvYlN0cmVhbShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiwgUmVzb3VyY2VIYW5kbGUqKTsKLSAgICB2aXJ0dWFsIH5CbG9i
U3RyZWFtKCk7Ci0KLSAgICAvLyBGcm9tIGNsYXNzIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0
ZXJTdHJlYW0uCi0gICAgdmlydHVhbCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIHVybCgp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OlN0cmluZyBtaW1lVHlwZSgpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgLy8gRnJvbSBjbGFzcyBS
ZXNvdXJjZUhhbmRsZUNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgdW5zaWduZWQsIGludCkgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
UmVzb3VyY2VFcnJvciYpIE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIFJlc291cmNlUmVzcG9u
c2UgbV9yZXNwb25zZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEJsb2JTdHJlYW1faApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9Db29raWVKYXJCbGFja0JlcnJ5LmNwcAko
cmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L0Nvb2tpZUphckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCi0KLSNpbmNsdWRlICJD
b29raWVNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi12b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYsIGNvbnN0IFVSTCYgLypmaXJzdFBhcnR5Ki8sIGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIGNvb2tpZU1hbmFnZXIoKS5zZXRDb29raWVzKHVybCwg
dmFsdWUsIE5vSHR0cE9ubHlDb29raWUpOwotfQotCi1TdHJpbmcgY29va2llc0ZvckRPTShjb25z
dCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBVUkwmIC8qZmlyc3RQYXJ0eSovLCBjb25z
dCBVUkwmIHVybCkKLXsKLSAgICAvLyAnSHR0cE9ubHknIGNvb2tpZXMgc2hvdWxkIG5vIGJlIGFj
Y2Vzc2libGUgZnJvbSBzY3JpcHRzLCBzbyB3ZSBmaWx0ZXIgdGhlbSBvdXQgaGVyZS4KLSAgICBy
ZXR1cm4gY29va2llTWFuYWdlcigpLmdldENvb2tpZSh1cmwsIE5vSHR0cE9ubHlDb29raWUpOwot
fQotCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiAvKmZpcnN0UGFydHkqLywgY29uc3QgVVJMJiB1cmwp
Ci17Ci0gICAgcmV0dXJuIGNvb2tpZU1hbmFnZXIoKS5nZXRDb29raWUodXJsLCBXaXRoSHR0cE9u
bHlDb29raWVzKTsKLX0KLQotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mLCBjb25zdCBVUkwmIC8qZmlyc3RQYXJ0eSovLCBjb25zdCBVUkwmIC8qdXJsKi8p
Ci17Ci0gICAgcmV0dXJuICFjb29raWVNYW5hZ2VyKCkuY29va2llSmFyKCkuaXNFbXB0eSgpOwot
fQotCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29u
c3QgVVJMJiAvKmZpcnN0UGFydHkqLywgY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQotewotICAgIFZlY3RvcjxSZWZQdHI8UGFyc2VkQ29va2llPiA+IHJlc3VsdDsK
LSAgICBjb29raWVNYW5hZ2VyKCkuZ2V0UmF3Q29va2llcyhyZXN1bHQsIHVybCwgV2l0aEh0dHBP
bmx5Q29va2llcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyBp
KyspCi0gICAgICAgIHJlc3VsdFtpXS0+YXBwZW5kV2ViQ29yZUNvb2tpZShyYXdDb29raWVzKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBkZWxldGVDb29raWUoY29uc3QgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBjb29raWVNYW5hZ2VyKCkucmVtb3ZlQ29va2llV2l0aE5hbWUodXJsLCBuYW1lKTsKLX0KLQot
dm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
LCBIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uJiwgY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0NyZWRlbnRpYWxCYWNraW5nU3Rv
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0NyZWRlbnRpYWxCYWNr
aW5nU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxMSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJDcmVkZW50aWFsQmFja2luZ1N0b3JlLmgiCi0KLSNpZiBFTkFCTEUoQkxBQ0tCRVJSWV9D
UkVERU5USUFMX1BFUlNJU1QpCi0jaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNs
dWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiUHJvdGVjdGlv
blNwYWNlSGFzaC5oIgotI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgotI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybUVuY3J5cHRvci5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9y
bVNldHRpbmdzLmg+Ci0jaW5jbHVkZSA8Q2VydE1ncldyYXBwZXIuaD4KLQotI2RlZmluZSBIQU5E
TEVfU1FMX0VYRUNfRkFJTFVSRShzdGF0ZW1lbnQsIHJldHVyblZhbHVlLCAuLi4pIFwKLSAgICBp
ZiAoc3RhdGVtZW50KSB7IFwKLSAgICAgICAgTE9HX0VSUk9SKF9fVkFfQVJHU19fKTsgXAotICAg
ICAgICByZXR1cm4gcmV0dXJuVmFsdWU7IFwKLSAgICB9Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIHVuc2lnbmVkIGhhc2hDcmVkZW50aWFsSW5mbyhjb25zdCBQcm90ZWN0aW9uU3Bh
Y2UmIHNwYWNlLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKQotewotICAgIFN0cmluZyBoYXNoU3Ry
aW5nID0gU3RyaW5nOjpmb3JtYXQoIiVzQCVzQCVkQCVkQCVzQCVkIiwKLSAgICAgICAgdXNlcm5h
bWUudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgc3BhY2UuaG9zdCgpLnV0ZjgoKS5kYXRhKCksIHNw
YWNlLnBvcnQoKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzcGFjZS5zZXJ2ZXJUeXBlKCkp
LAotICAgICAgICBzcGFjZS5yZWFsbSgpLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgIHN0YXRpY19j
YXN0PGludD4oc3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSkpOwotICAgIHJldHVybiBTdHJp
bmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGhhc2hTdHJpbmcuY2hhcmFjdGVy
cygpLCBoYXNoU3RyaW5nLmxlbmd0aCgpKTsKLX0KLQotQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYg
Y3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDcmVk
ZW50aWFsQmFja2luZ1N0b3JlLCBiYWNraW5nU3RvcmUsICgpKTsKLSAgICBpZiAoIWJhY2tpbmdT
dG9yZS5tX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICBiYWNraW5nU3RvcmUub3BlbihwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0
YW5jZSgpLT5hcHBsaWNhdGlvbkRhdGFEaXJlY3RvcnkoKS5jX3N0cigpLCAiL2NyZWRlbnRpYWxz
LmRiIikpOwotICAgIHJldHVybiBiYWNraW5nU3RvcmU7Ci19Ci0KLUNyZWRlbnRpYWxCYWNraW5n
U3RvcmU6OkNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKQotewotfQotCi1DcmVkZW50aWFsQmFja2lu
Z1N0b3JlOjp+Q3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpCi17Ci0gICAgaWYgKG1fZGF0YWJhc2Uu
aXNPcGVuKCkpCi0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLX0KLQotYm9vbCBDcmVkZW50
aWFsQmFja2luZ1N0b3JlOjpvcGVuKGNvbnN0IFN0cmluZyYgZGJQYXRoKQotewotICAgIEFTU0VS
VCghbV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0KLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRSgh
bV9kYXRhYmFzZS5vcGVuKGRiUGF0aCksIGZhbHNlLAotICAgICAgICAiRmFpbGVkIHRvIG9wZW4g
ZGF0YWJhc2UgZmlsZSAlcyBmb3IgbG9naW4gZGF0YWJhc2UiLCBkYlBhdGgudXRmOCgpLmRhdGEo
KSk7Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoImxvZ2lucyIpKSB7Ci0gICAg
ICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJD
UkVBVEUgVEFCTEUgbG9naW5zIChob3N0IFZBUkNIQVIgTk9UIE5VTEwsIHBvcnQgSU5URUdFUiwg
c2VydmljZV90eXBlIElOVEVHRVIgTk9UIE5VTEwsIHJlYWxtIFZBUkNIQVIsIGF1dGhfc2NoZW1l
IElOVEVHRVIgTk9UIE5VTEwsIHVzZXJuYW1lIFZBUkNIQVIsIHBhc3N3b3JkIEJMT0IpICIpLAot
ICAgICAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gY3JlYXRlIHRhYmxlIGxvZ2lucyBmb3IgbG9n
aW4gZGF0YWJhc2UiKTsKLQotICAgICAgICAvLyBDcmVhdGUgaW5kZXggZm9yIHRhYmxlIGxvZ2lu
cy4KLSAgICAgICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUoIW1fZGF0YWJhc2UuZXhlY3V0ZUNv
bW1hbmQoIkNSRUFURSBJTkRFWCBsb2dpbnNfaW5kZXggT04gbG9naW5zIChob3N0KSIpLAotICAg
ICAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gY3JlYXRlIGluZGV4IGZvciB0YWJsZSBsb2dpbnMi
KTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIm5ldmVyX3JlbWVt
YmVyIikpIHsKLSAgICAgICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUoIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBuZXZlcl9yZW1lbWJlciAoaG9zdCBWQVJDSEFSIE5P
VCBOVUxMLCBwb3J0IElOVEVHRVIsIHNlcnZpY2VfdHlwZSBJTlRFR0VSIE5PVCBOVUxMLCByZWFs
bSBWQVJDSEFSLCBhdXRoX3NjaGVtZSBJTlRFR0VSIE5PVCBOVUxMKSAiKSwKLSAgICAgICAgICAg
IGZhbHNlLCAiRmFpbGVkIHRvIGNyZWF0ZSB0YWJsZSBuZXZlcl9yZW1lbWJlciBmb3IgbG9naW4g
ZGF0YWJhc2UiKTsKLQotICAgICAgICAvLyBDcmVhdGUgaW5kZXggZm9yIHRhYmxlIG5ldmVyX3Jl
bWVtYmVyLgotICAgICAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRSghbV9kYXRhYmFzZS5leGVj
dXRlQ29tbWFuZCgiQ1JFQVRFIElOREVYIG5ldmVyX3JlbWVtYmVyX2luZGV4IE9OIG5ldmVyX3Jl
bWVtYmVyIChob3N0KSIpLAotICAgICAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gY3JlYXRlIGlu
ZGV4IGZvciB0YWJsZSBuZXZlcl9yZW1lbWJlciIpOwotICAgIH0KLQotICAgIC8vIFByZXBhcmUg
dGhlIHN0YXRlbWVudHMuCi0gICAgbV9hZGRMb2dpblN0YXRlbWVudCA9IGFkb3B0UHRyKG5ldyBT
UUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gbG9naW5z
IChob3N0LCBwb3J0LCBzZXJ2aWNlX3R5cGUsIHJlYWxtLCBhdXRoX3NjaGVtZSwgdXNlcm5hbWUs
IHBhc3N3b3JkKSBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8pIikpOwotICAgIEhBTkRMRV9T
UUxfRVhFQ19GQUlMVVJFKG1fYWRkTG9naW5TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaywKLSAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gcHJlcGFyZSBhZGRMb2dpbiBzdGF0ZW1l
bnQiKTsKLQotICAgIG1fdXBkYXRlTG9naW5TdGF0ZW1lbnQgPSBhZG9wdFB0cihuZXcgU1FMaXRl
U3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgbG9naW5zIFNFVCB1c2VybmFtZSA9ID8sIHBh
c3N3b3JkID0gPyBXSEVSRSBob3N0ID0gPyBBTkQgcG9ydCA9ID8gQU5EIHNlcnZpY2VfdHlwZSA9
ID8gQU5EIHJlYWxtID0gPyBBTkQgYXV0aF9zY2hlbWUgPSA/IikpOwotICAgIEhBTkRMRV9TUUxf
RVhFQ19GQUlMVVJFKG1fdXBkYXRlTG9naW5TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaywKLSAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gcHJlcGFyZSB1cGRhdGVMb2dpbiBzdGF0
ZW1lbnQiKTsKLQotICAgIG1faGFzTG9naW5TdGF0ZW1lbnQgPSBhZG9wdFB0cihuZXcgU1FMaXRl
U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBsb2dpbnMgV0hFUkUg
aG9zdCA9ID8gQU5EIHBvcnQgPSA/IEFORCBzZXJ2aWNlX3R5cGUgPSA/IEFORCByZWFsbSA9ID8g
QU5EIGF1dGhfc2NoZW1lID0gPyIpKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRShtX2hh
c0xvZ2luU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2ssCi0gICAgICAgIGZhbHNl
LCAiRmFpbGVkIHRvIHByZXBhcmUgaGFzTG9naW4gc3RhdGVtZW50Iik7Ci0KLSAgICBtX2dldExv
Z2luU3RhdGVtZW50ID0gYWRvcHRQdHIobmV3IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAi
U0VMRUNUIHVzZXJuYW1lLCBwYXNzd29yZCBGUk9NIGxvZ2lucyBXSEVSRSBob3N0ID0gPyBBTkQg
cG9ydCA9ID8gQU5EIHNlcnZpY2VfdHlwZSA9ID8gQU5EIHJlYWxtID0gPyBBTkQgYXV0aF9zY2hl
bWUgPSA/IikpOwotICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKG1fZ2V0TG9naW5TdGF0ZW1l
bnQtPnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaywKLSAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8g
cHJlcGFyZSBnZXRMb2dpbiBzdGF0ZW1lbnQiKTsKLQotICAgIG1fcmVtb3ZlTG9naW5TdGF0ZW1l
bnQgPSBhZG9wdFB0cihuZXcgU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJP
TSBsb2dpbnMgV0hFUkUgaG9zdCA9ID8gQU5EIHBvcnQgPSA/IEFORCBzZXJ2aWNlX3R5cGUgPSA/
IEFORCByZWFsbSA9ID8gQU5EIGF1dGhfc2NoZW1lID0gPyIpKTsKLSAgICBIQU5ETEVfU1FMX0VY
RUNfRkFJTFVSRShtX3JlbW92ZUxvZ2luU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2ssCi0gICAgICAgIGZhbHNlLCAiRmFpbGVkIHRvIHByZXBhcmUgcmVtb3ZlTG9naW4gc3RhdGVt
ZW50Iik7Ci0KLSAgICBtX2FkZE5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQgPSBhZG9wdFB0cihuZXcg
U1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIG5ldmVy
X3JlbWVtYmVyIChob3N0LCBwb3J0LCBzZXJ2aWNlX3R5cGUsIHJlYWxtLCBhdXRoX3NjaGVtZSkg
VkFMVUVTICg/LCA/LCA/LCA/LCA/KSIpKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRSht
X2FkZE5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaywKLSAg
ICAgICAgZmFsc2UsICJGYWlsZWQgdG8gcHJlcGFyZSBhZGROZXZlclJlbWVtYmVyIHN0YXRlbWVu
dCIpOwotCi0gICAgbV9oYXNOZXZlclJlbWVtYmVyU3RhdGVtZW50ID0gYWRvcHRQdHIobmV3IFNR
TGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00gbmV2ZXJfcmVt
ZW1iZXIgV0hFUkUgaG9zdCA9ID8gQU5EIHBvcnQgPSA/IEFORCBzZXJ2aWNlX3R5cGUgPSA/IEFO
RCByZWFsbSA9ID8gQU5EIGF1dGhfc2NoZW1lID0gPyIpKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNf
RkFJTFVSRShtX2hhc05ldmVyUmVtZW1iZXJTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaywKLSAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gcHJlcGFyZSBoYXNOZXZlclJlbWVtYmVy
IHN0YXRlbWVudCIpOwotCi0gICAgbV9yZW1vdmVOZXZlclJlbWVtYmVyU3RhdGVtZW50ID0gYWRv
cHRQdHIobmV3IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gbmV2ZXJf
cmVtZW1iZXIgV0hFUkUgaG9zdCA9ID8gQU5EIHBvcnQgPSA/IEFORCBzZXJ2aWNlX3R5cGUgPSA/
IEFORCByZWFsbSA9ID8gQU5EIGF1dGhfc2NoZW1lID0gPyIpKTsKLSAgICBIQU5ETEVfU1FMX0VY
RUNfRkFJTFVSRShtX3JlbW92ZU5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBT
UUxSZXN1bHRPaywKLSAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gcHJlcGFyZSByZW1vdmVOZXZl
clJlbWVtYmVyIHN0YXRlbWVudCIpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ3Jl
ZGVudGlhbEJhY2tpbmdTdG9yZTo6YWRkTG9naW4oY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90
ZWN0aW9uU3BhY2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCi17Ci0gICAgQVNTRVJU
KG1fZGF0YWJhc2UuaXNPcGVuKCkpOwotICAgIEFTU0VSVChtX2RhdGFiYXNlLnRhYmxlRXhpc3Rz
KCJsb2dpbnMiKSk7Ci0KLSAgICBpZiAoIW1fYWRkTG9naW5TdGF0ZW1lbnQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG1fYWRkTG9naW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHByb3Rl
Y3Rpb25TcGFjZS5ob3N0KCkpOwotICAgIG1fYWRkTG9naW5TdGF0ZW1lbnQtPmJpbmRJbnQoMiwg
cHJvdGVjdGlvblNwYWNlLnBvcnQoKSk7Ci0gICAgbV9hZGRMb2dpblN0YXRlbWVudC0+YmluZElu
dCgzLCBzdGF0aWNfY2FzdDxpbnQ+KHByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUeXBlKCkpKTsKLSAg
ICBtX2FkZExvZ2luU3RhdGVtZW50LT5iaW5kVGV4dCg0LCBwcm90ZWN0aW9uU3BhY2UucmVhbG0o
KSk7Ci0gICAgbV9hZGRMb2dpblN0YXRlbWVudC0+YmluZEludCg1LCBzdGF0aWNfY2FzdDxpbnQ+
KHByb3RlY3Rpb25TcGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpKSk7Ci0gICAgbV9hZGRMb2dp
blN0YXRlbWVudC0+YmluZFRleHQoNiwgY3JlZGVudGlhbC51c2VyKCkpOwotICAgIGlmIChjZXJ0
TWdyV3JhcHBlcigpLT5pc1JlYWR5KCkpCi0gICAgICAgIG1fYWRkTG9naW5TdGF0ZW1lbnQtPmJp
bmRCbG9iKDcsICIiKTsKLSAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIGNpcGhlcnRleHQgPSBl
bmNyeXB0ZWRTdHJpbmcoY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKLSAgICAgICAgQVNTRVJUKGNp
cGhlcnRleHQuaXM4Qml0KCkpOwotICAgICAgICBtX2FkZExvZ2luU3RhdGVtZW50LT5iaW5kQmxv
Yig3LCBjaXBoZXJ0ZXh0LmNoYXJhY3RlcnM4KCksIGNpcGhlcnRleHQubGVuZ3RoKCkpOwotICAg
IH0KLQotICAgIGludCByZXN1bHQgPSBtX2FkZExvZ2luU3RhdGVtZW50LT5zdGVwKCk7Ci0gICAg
bV9hZGRMb2dpblN0YXRlbWVudC0+cmVzZXQoKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVS
RShyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSwgZmFsc2UsCi0gICAgICAgICJGYWlsZWQgdG8gYWRk
IGxvZ2luIGluZm8gaW50byB0YWJsZSBsb2dpbnMgLSAlaSIsIHJlc3VsdCk7Ci0KLSAgICBpZiAo
IWNlcnRNZ3JXcmFwcGVyKCktPmlzUmVhZHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBTdHJpbmcgY2lwaGVydGV4dCA9IGVuY3J5cHRlZFN0cmluZyhjcmVkZW50aWFsLnBhc3N3b3Jk
KCkpOwotICAgIEFTU0VSVChjaXBoZXJ0ZXh0LmlzOEJpdCgpKTsKLSAgICB1bnNpZ25lZCBoYXNo
ID0gaGFzaENyZWRlbnRpYWxJbmZvKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbC51c2VyKCkp
OwotICAgIHJldHVybiBjZXJ0TWdyV3JhcHBlcigpLT5zYXZlUGFzc3dvcmQoaGFzaCwgc3RkOjpz
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2lwaGVydGV4dC5jaGFyYWN0ZXJz
OCgpKSwgY2lwaGVydGV4dC5sZW5ndGgoKSkpOwotfQotCi1ib29sIENyZWRlbnRpYWxCYWNraW5n
U3RvcmU6OnVwZGF0ZUxvZ2luKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNl
LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNl
LmlzT3BlbigpKTsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS50YWJsZUV4aXN0cygibG9naW5zIikp
OwotCi0gICAgaWYgKCFtX3VwZGF0ZUxvZ2luU3RhdGVtZW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBtX3VwZGF0ZUxvZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBjcmVkZW50aWFs
LnVzZXIoKSk7Ci0gICAgaWYgKGNlcnRNZ3JXcmFwcGVyKCktPmlzUmVhZHkoKSkKLSAgICAgICAg
bV91cGRhdGVMb2dpblN0YXRlbWVudC0+YmluZEJsb2IoMiwgIiIpOwotICAgIGVsc2UgewotICAg
ICAgICBTdHJpbmcgY2lwaGVydGV4dCA9IGVuY3J5cHRlZFN0cmluZyhjcmVkZW50aWFsLnBhc3N3
b3JkKCkpOwotICAgICAgICBBU1NFUlQoY2lwaGVydGV4dC5pczhCaXQoKSk7Ci0gICAgICAgIG1f
dXBkYXRlTG9naW5TdGF0ZW1lbnQtPmJpbmRCbG9iKDIsIGNpcGhlcnRleHQuY2hhcmFjdGVyczgo
KSwgY2lwaGVydGV4dC5sZW5ndGgoKSk7Ci0gICAgfQotICAgIG1fdXBkYXRlTG9naW5TdGF0ZW1l
bnQtPmJpbmRUZXh0KDMsIHByb3RlY3Rpb25TcGFjZS5ob3N0KCkpOwotICAgIG1fdXBkYXRlTG9n
aW5TdGF0ZW1lbnQtPmJpbmRJbnQoNCwgcHJvdGVjdGlvblNwYWNlLnBvcnQoKSk7Ci0gICAgbV91
cGRhdGVMb2dpblN0YXRlbWVudC0+YmluZEludCg1LCBzdGF0aWNfY2FzdDxpbnQ+KHByb3RlY3Rp
b25TcGFjZS5zZXJ2ZXJUeXBlKCkpKTsKLSAgICBtX3VwZGF0ZUxvZ2luU3RhdGVtZW50LT5iaW5k
VGV4dCg2LCBwcm90ZWN0aW9uU3BhY2UucmVhbG0oKSk7Ci0gICAgbV91cGRhdGVMb2dpblN0YXRl
bWVudC0+YmluZEludCg3LCBzdGF0aWNfY2FzdDxpbnQ+KHByb3RlY3Rpb25TcGFjZS5hdXRoZW50
aWNhdGlvblNjaGVtZSgpKSk7Ci0KLSAgICBpbnQgcmVzdWx0ID0gbV91cGRhdGVMb2dpblN0YXRl
bWVudC0+c3RlcCgpOwotICAgIG1fdXBkYXRlTG9naW5TdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAg
SEFORExFX1NRTF9FWEVDX0ZBSUxVUkUocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUsIGZhbHNlLAot
ICAgICAgICAiRmFpbGVkIHRvIHVwZGF0ZSBsb2dpbiBpbmZvIGluIHRhYmxlIGxvZ2lucyAtICVp
IiwgcmVzdWx0KTsKLQotICAgIGlmICghY2VydE1ncldyYXBwZXIoKS0+aXNSZWFkeSgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZyBjaXBoZXJ0ZXh0ID0gZW5jcnlwdGVkU3Ry
aW5nKGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7Ci0gICAgQVNTRVJUKGNpcGhlcnRleHQuaXM4Qml0
KCkpOwotICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQ3JlZGVudGlhbEluZm8ocHJvdGVjdGlvblNw
YWNlLCBjcmVkZW50aWFsLnVzZXIoKSk7Ci0gICAgcmV0dXJuIGNlcnRNZ3JXcmFwcGVyKCktPnNh
dmVQYXNzd29yZChoYXNoLCBzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihjaXBoZXJ0ZXh0LmNoYXJhY3RlcnM4KCkpLCBjaXBoZXJ0ZXh0Lmxlbmd0aCgpKSk7Ci19Ci0K
LWJvb2wgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6aGFzTG9naW4oY29uc3QgUHJvdGVjdGlvblNw
YWNlJiBwcm90ZWN0aW9uU3BhY2UpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkp
OwotICAgIEFTU0VSVChtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJsb2dpbnMiKSk7Ci0KLSAgICBp
ZiAoIW1faGFzTG9naW5TdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1f
aGFzTG9naW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHByb3RlY3Rpb25TcGFjZS5ob3N0KCkpOwot
ICAgIG1faGFzTG9naW5TdGF0ZW1lbnQtPmJpbmRJbnQoMiwgcHJvdGVjdGlvblNwYWNlLnBvcnQo
KSk7Ci0gICAgbV9oYXNMb2dpblN0YXRlbWVudC0+YmluZEludCgzLCBzdGF0aWNfY2FzdDxpbnQ+
KHByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUeXBlKCkpKTsKLSAgICBtX2hhc0xvZ2luU3RhdGVtZW50
LT5iaW5kVGV4dCg0LCBwcm90ZWN0aW9uU3BhY2UucmVhbG0oKSk7Ci0gICAgbV9oYXNMb2dpblN0
YXRlbWVudC0+YmluZEludCg1LCBzdGF0aWNfY2FzdDxpbnQ+KHByb3RlY3Rpb25TcGFjZS5hdXRo
ZW50aWNhdGlvblNjaGVtZSgpKSk7Ci0KLSAgICBpbnQgcmVzdWx0ID0gbV9oYXNMb2dpblN0YXRl
bWVudC0+c3RlcCgpOwotICAgIGludCBudW1PZlJvdyA9IG1faGFzTG9naW5TdGF0ZW1lbnQtPmdl
dENvbHVtbkludCgwKTsKLSAgICBtX2hhc0xvZ2luU3RhdGVtZW50LT5yZXNldCgpOwotICAgIEhB
TkRMRV9TUUxfRVhFQ19GQUlMVVJFKHJlc3VsdCAhPSBTUUxSZXN1bHRSb3csIGZhbHNlLAotICAg
ICAgICAiRmFpbGVkIHRvIGV4ZWN1dGUgc2VsZWN0IGxvZ2luIGluZm8gZnJvbSB0YWJsZSBsb2dp
bnMgaW4gaGFzTG9naW4gLSAlaSIsIHJlc3VsdCk7Ci0KLSAgICBpZiAobnVtT2ZSb3cpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQ3JlZGVudGlhbCBDcmVk
ZW50aWFsQmFja2luZ1N0b3JlOjpnZXRMb2dpbihjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3Rl
Y3Rpb25TcGFjZSkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgQVNT
RVJUKG1fZGF0YWJhc2UudGFibGVFeGlzdHMoImxvZ2lucyIpKTsKLQotICAgIGlmICghbV9nZXRM
b2dpblN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIENyZWRlbnRpYWwoKTsKLQotICAgIG1fZ2V0
TG9naW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHByb3RlY3Rpb25TcGFjZS5ob3N0KCkpOwotICAg
IG1fZ2V0TG9naW5TdGF0ZW1lbnQtPmJpbmRJbnQoMiwgcHJvdGVjdGlvblNwYWNlLnBvcnQoKSk7
Ci0gICAgbV9nZXRMb2dpblN0YXRlbWVudC0+YmluZEludCgzLCBzdGF0aWNfY2FzdDxpbnQ+KHBy
b3RlY3Rpb25TcGFjZS5zZXJ2ZXJUeXBlKCkpKTsKLSAgICBtX2dldExvZ2luU3RhdGVtZW50LT5i
aW5kVGV4dCg0LCBwcm90ZWN0aW9uU3BhY2UucmVhbG0oKSk7Ci0gICAgbV9nZXRMb2dpblN0YXRl
bWVudC0+YmluZEludCg1LCBzdGF0aWNfY2FzdDxpbnQ+KHByb3RlY3Rpb25TcGFjZS5hdXRoZW50
aWNhdGlvblNjaGVtZSgpKSk7Ci0KLSAgICBpbnQgcmVzdWx0ID0gbV9nZXRMb2dpblN0YXRlbWVu
dC0+c3RlcCgpOwotICAgIFN0cmluZyB1c2VybmFtZSA9IG1fZ2V0TG9naW5TdGF0ZW1lbnQtPmdl
dENvbHVtblRleHQoMCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gbV9nZXRMb2dpblN0YXRlbWVu
dC0+Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpOwotICAgIG1fZ2V0TG9naW5TdGF0ZW1lbnQtPnJl
c2V0KCk7Ci0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUocmVzdWx0ICE9IFNRTFJlc3VsdFJv
dywgQ3JlZGVudGlhbCgpLAotICAgICAgICAiRmFpbGVkIHRvIGV4ZWN1dGUgc2VsZWN0IGxvZ2lu
IGluZm8gZnJvbSB0YWJsZSBsb2dpbnMgaW4gZ2V0TG9naW4gLSAlaSIsIHJlc3VsdCk7Ci0KLSAg
ICBpZiAoIWNlcnRNZ3JXcmFwcGVyKCktPmlzUmVhZHkoKSkKLSAgICAgICAgcmV0dXJuIENyZWRl
bnRpYWwodXNlcm5hbWUsIGRlY3J5cHRlZFN0cmluZyhwYXNzd29yZCksIENyZWRlbnRpYWxQZXJz
aXN0ZW5jZVBlcm1hbmVudCk7Ci0KLSAgICB1bnNpZ25lZCBoYXNoID0gaGFzaENyZWRlbnRpYWxJ
bmZvKHByb3RlY3Rpb25TcGFjZSwgdXNlcm5hbWUpOwotCi0gICAgc3RkOjpzdHJpbmcgcGFzc3dv
cmRCbG9iOwotICAgIGlmICghY2VydE1ncldyYXBwZXIoKS0+Z2V0UGFzc3dvcmQoaGFzaCwgcGFz
c3dvcmRCbG9iKSkKLSAgICAgICAgcmV0dXJuIENyZWRlbnRpYWwoKTsKLQotICAgIHJldHVybiBD
cmVkZW50aWFsKHVzZXJuYW1lLCBkZWNyeXB0ZWRTdHJpbmcoU3RyaW5nKHBhc3N3b3JkQmxvYi5k
YXRhKCksIHBhc3N3b3JkQmxvYi5sZW5ndGgoKSkpLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJt
YW5lbnQpOwotfQotCi1ib29sIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OnJlbW92ZUxvZ2luKGNv
bnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBjb25zdCBTdHJpbmcmIHVzZXJu
YW1lKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKLSAgICBBU1NFUlQobV9k
YXRhYmFzZS50YWJsZUV4aXN0cygibG9naW5zIikpOwotCi0gICAgaWYgKCFtX3JlbW92ZUxvZ2lu
U3RhdGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3JlbW92ZUxvZ2luU3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBwcm90ZWN0aW9uU3BhY2UuaG9zdCgpKTsKLSAgICBtX3JlbW92
ZUxvZ2luU3RhdGVtZW50LT5iaW5kSW50KDIsIHByb3RlY3Rpb25TcGFjZS5wb3J0KCkpOwotICAg
IG1fcmVtb3ZlTG9naW5TdGF0ZW1lbnQtPmJpbmRJbnQoMywgc3RhdGljX2Nhc3Q8aW50Pihwcm90
ZWN0aW9uU3BhY2Uuc2VydmVyVHlwZSgpKSk7Ci0gICAgbV9yZW1vdmVMb2dpblN0YXRlbWVudC0+
YmluZFRleHQoNCwgcHJvdGVjdGlvblNwYWNlLnJlYWxtKCkpOwotICAgIG1fcmVtb3ZlTG9naW5T
dGF0ZW1lbnQtPmJpbmRJbnQoNSwgc3RhdGljX2Nhc3Q8aW50Pihwcm90ZWN0aW9uU3BhY2UuYXV0
aGVudGljYXRpb25TY2hlbWUoKSkpOwotCi0gICAgaW50IHJlc3VsdCA9IG1fcmVtb3ZlTG9naW5T
dGF0ZW1lbnQtPnN0ZXAoKTsKLSAgICBtX3JlbW92ZUxvZ2luU3RhdGVtZW50LT5yZXNldCgpOwot
ICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lLCBmYWxz
ZSwKLSAgICAgICAgIkZhaWxlZCB0byByZW1vdmUgbG9naW4gaW5mbyBmcm9tIHRhYmxlIGxvZ2lu
cyAtICVpIiwgcmVzdWx0KTsKLQotICAgIGlmICghY2VydE1ncldyYXBwZXIoKS0+aXNSZWFkeSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQ3JlZGVu
dGlhbEluZm8ocHJvdGVjdGlvblNwYWNlLCB1c2VybmFtZSk7Ci0gICAgaWYgKCFjZXJ0TWdyV3Jh
cHBlcigpLT5yZW1vdmVQYXNzd29yZChoYXNoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6YWRkTmV2
ZXJSZW1lbWJlcihjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKLXsKLSAg
ICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UudGFi
bGVFeGlzdHMoIm5ldmVyX3JlbWVtYmVyIikpOwotCi0gICAgaWYgKCFtX2FkZE5ldmVyUmVtZW1i
ZXJTdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fYWRkTmV2ZXJSZW1l
bWJlclN0YXRlbWVudC0+YmluZFRleHQoMSwgcHJvdGVjdGlvblNwYWNlLmhvc3QoKSk7Ci0gICAg
bV9hZGROZXZlclJlbWVtYmVyU3RhdGVtZW50LT5iaW5kSW50KDIsIHByb3RlY3Rpb25TcGFjZS5w
b3J0KCkpOwotICAgIG1fYWRkTmV2ZXJSZW1lbWJlclN0YXRlbWVudC0+YmluZEludCgzLCBzdGF0
aWNfY2FzdDxpbnQ+KHByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUeXBlKCkpKTsKLSAgICBtX2FkZE5l
dmVyUmVtZW1iZXJTdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIHByb3RlY3Rpb25TcGFjZS5yZWFsbSgp
KTsKLSAgICBtX2FkZE5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQtPmJpbmRJbnQoNSwgc3RhdGljX2Nh
c3Q8aW50Pihwcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSkpOwotCi0gICAg
aW50IHJlc3VsdCA9IG1fYWRkTmV2ZXJSZW1lbWJlclN0YXRlbWVudC0+c3RlcCgpOwotICAgIG1f
YWRkTmV2ZXJSZW1lbWJlclN0YXRlbWVudC0+cmVzZXQoKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNf
RkFJTFVSRShyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSwgZmFsc2UsCi0gICAgICAgICJGYWlsZWQg
dG8gYWRkIG5hdmVyIHNhdmVkIGl0ZW0gaW5mbyBpbnRvIHRhYmxlIG5ldmVyX3JlbWVtYmVyIC0g
JWkiLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ3JlZGVudGlhbEJh
Y2tpbmdTdG9yZTo6aGFzTmV2ZXJSZW1lbWJlcihjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3Rl
Y3Rpb25TcGFjZSkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgQVNT
RVJUKG1fZGF0YWJhc2UudGFibGVFeGlzdHMoIm5ldmVyX3JlbWVtYmVyIikpOwotCi0gICAgaWYg
KCFtX2hhc05ldmVyUmVtZW1iZXJTdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIG1faGFzTmV2ZXJSZW1lbWJlclN0YXRlbWVudC0+YmluZFRleHQoMSwgcHJvdGVjdGlvblNw
YWNlLmhvc3QoKSk7Ci0gICAgbV9oYXNOZXZlclJlbWVtYmVyU3RhdGVtZW50LT5iaW5kSW50KDIs
IHByb3RlY3Rpb25TcGFjZS5wb3J0KCkpOwotICAgIG1faGFzTmV2ZXJSZW1lbWJlclN0YXRlbWVu
dC0+YmluZEludCgzLCBzdGF0aWNfY2FzdDxpbnQ+KHByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUeXBl
KCkpKTsKLSAgICBtX2hhc05ldmVyUmVtZW1iZXJTdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIHByb3Rl
Y3Rpb25TcGFjZS5yZWFsbSgpKTsKLSAgICBtX2hhc05ldmVyUmVtZW1iZXJTdGF0ZW1lbnQtPmJp
bmRJbnQoNSwgc3RhdGljX2Nhc3Q8aW50Pihwcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25T
Y2hlbWUoKSkpOwotCi0gICAgaW50IHJlc3VsdCA9IG1faGFzTmV2ZXJSZW1lbWJlclN0YXRlbWVu
dC0+c3RlcCgpOwotICAgIGludCBudW1PZlJvdyA9IG1faGFzTmV2ZXJSZW1lbWJlclN0YXRlbWVu
dC0+Z2V0Q29sdW1uSW50KDApOwotICAgIG1faGFzTmV2ZXJSZW1lbWJlclN0YXRlbWVudC0+cmVz
ZXQoKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRShyZXN1bHQgIT0gU1FMUmVzdWx0Um93
LCBmYWxzZSwKLSAgICAgICAgIkZhaWxlZCB0byBleGVjdXRlIHNlbGVjdCB0byBmaW5kIG5hdmVy
IHNhdmVkIHNpdGUgZnJvbSB0YWJsZSBuZXZlcl9yZW1lbWJlciAtICVpIiwgcmVzdWx0KTsKLQot
ICAgIGlmIChudW1PZlJvdykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OnJlbW92ZU5ldmVyUmVtZW1iZXIo
Y29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCi17Ci0gICAgQVNTRVJUKG1f
ZGF0YWJhc2UuaXNPcGVuKCkpOwotICAgIEFTU0VSVChtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJu
ZXZlcl9yZW1lbWJlciIpKTsKLQotICAgIGlmICghbV9yZW1vdmVOZXZlclJlbWVtYmVyU3RhdGVt
ZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3JlbW92ZU5ldmVyUmVtZW1iZXJT
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHByb3RlY3Rpb25TcGFjZS5ob3N0KCkpOwotICAgIG1fcmVt
b3ZlTmV2ZXJSZW1lbWJlclN0YXRlbWVudC0+YmluZEludCgyLCBwcm90ZWN0aW9uU3BhY2UucG9y
dCgpKTsKLSAgICBtX3JlbW92ZU5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQtPmJpbmRJbnQoMywgc3Rh
dGljX2Nhc3Q8aW50Pihwcm90ZWN0aW9uU3BhY2Uuc2VydmVyVHlwZSgpKSk7Ci0gICAgbV9yZW1v
dmVOZXZlclJlbWVtYmVyU3RhdGVtZW50LT5iaW5kVGV4dCg0LCBwcm90ZWN0aW9uU3BhY2UucmVh
bG0oKSk7Ci0gICAgbV9yZW1vdmVOZXZlclJlbWVtYmVyU3RhdGVtZW50LT5iaW5kSW50KDUsIHN0
YXRpY19jYXN0PGludD4ocHJvdGVjdGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkpKTsK
LQotICAgIGludCByZXN1bHQgPSBtX3JlbW92ZU5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQtPnN0ZXAo
KTsKLSAgICBtX3JlbW92ZU5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgSEFO
RExFX1NRTF9FWEVDX0ZBSUxVUkUocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUsIGZhbHNlLAotICAg
ICAgICAiRmFpbGVkIHRvIHJlbW92ZSBuZXZlciBzYXZlZCBzaXRlIGZyb20gdGFibGUgbmV2ZXJf
cmVtZW1iZXIgLSAlaSIsIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBD
cmVkZW50aWFsQmFja2luZ1N0b3JlOjpjbGVhckxvZ2lucygpCi17Ci0gICAgQVNTRVJUKG1fZGF0
YWJhc2UuaXNPcGVuKCkpOwotICAgIEFTU0VSVChtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJsb2dp
bnMiKSk7Ci0KLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRSghbV9kYXRhYmFzZS5leGVjdXRl
Q29tbWFuZCgiREVMRVRFIEZST00gbG9naW5zIiksCi0gICAgICAgIGZhbHNlLCAiRmFpbGVkIHRv
IGNsZWFyIHRhYmxlIGxvZ2lucyIpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ3Jl
ZGVudGlhbEJhY2tpbmdTdG9yZTo6Y2xlYXJOZXZlclJlbWVtYmVyKCkKLXsKLSAgICBBU1NFUlQo
bV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UudGFibGVFeGlzdHMo
Im5ldmVyX3JlbWVtYmVyIikpOwotCi0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUoIW1fZGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9NIG5ldmVyX3JlbWVtYmVyIiksCi0gICAg
ICAgIGZhbHNlLCAiRmFpbGVkIHRvIGNsZWFyIHRhYmxlIG5ldmVyX3JlbWVtYmVyIik7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotU3RyaW5nIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OmVuY3J5
cHRlZFN0cmluZyhjb25zdCBTdHJpbmcmIHBsYWluVGV4dCkgY29uc3QKLXsKLSAgICBXVEY6OkNT
dHJpbmcgdXRmOCA9IHBsYWluVGV4dC51dGY4KFN0cmluZzo6U3RyaWN0Q29udmVyc2lvbik7Ci0g
ICAgc3RkOjpzdHJpbmcgY2lwaGVyVGV4dDsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RW5j
cnlwdG9yOjplbmNyeXB0U3RyaW5nKHN0ZDo6c3RyaW5nKHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0
aCgpKSwgJmNpcGhlclRleHQpOwotICAgIHJldHVybiBTdHJpbmcoY2lwaGVyVGV4dC5kYXRhKCks
IGNpcGhlclRleHQubGVuZ3RoKCkpOwotfQotCi1TdHJpbmcgQ3JlZGVudGlhbEJhY2tpbmdTdG9y
ZTo6ZGVjcnlwdGVkU3RyaW5nKGNvbnN0IFN0cmluZyYgY2lwaGVyVGV4dCkgY29uc3QKLXsKLSAg
ICBzdGQ6OnN0cmluZyB0ZXh0ID0gY2lwaGVyVGV4dC5pczhCaXQoKSA/Ci0gICAgICAgIHN0ZDo6
c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNpcGhlclRleHQuY2hhcmFjdGVy
czgoKSksIGNpcGhlclRleHQubGVuZ3RoKCkgKiBzaXplb2YoTENoYXIpKSA6Ci0gICAgICAgIHN0
ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNpcGhlclRleHQuY2hhcmFj
dGVyczE2KCkpLCBjaXBoZXJUZXh0Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7Ci0KLSAgICBz
dGQ6OnN0cmluZyBwbGFpblRleHQ7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkVuY3J5cHRv
cjo6ZGVjcnlwdFN0cmluZyh0ZXh0LCAmcGxhaW5UZXh0KTsKLQotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KHBsYWluVGV4dC5kYXRhKCksIHBsYWluVGV4dC5sZW5ndGgoKSk7Ci19Ci0KLUJs
YWNrQmVycnk6OlBsYXRmb3JtOjpDZXJ0TWdyV3JhcHBlciogQ3JlZGVudGlhbEJhY2tpbmdTdG9y
ZTo6Y2VydE1ncldyYXBwZXIoKQotewotICAgIGlmICghbV9jZXJ0TWdyV3JhcHBlcikKLSAgICAg
ICAgbV9jZXJ0TWdyV3JhcHBlciA9IGFkb3B0UHRyKG5ldyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
Q2VydE1ncldyYXBwZXIoKSk7Ci0KLSAgICByZXR1cm4gbV9jZXJ0TWdyV3JhcHBlci5nZXQoKTsK
LX0KLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQkxBQ0tC
RVJSWV9DUkVERU5USUFMX1BFUlNJU1QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2JsYWNrYmVycnkvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9DcmVkZW50aWFsQmFj
a2luZ1N0b3JlLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvYmxhY2tiZXJyeS9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAq
LwotCi0jaWZuZGVmIENyZWRlbnRpYWxCYWNraW5nU3RvcmVfaAotI2RlZmluZSBDcmVkZW50aWFs
QmFja2luZ1N0b3JlX2gKLQotI2lmIEVOQUJMRShCTEFDS0JFUlJZX0NSRURFTlRJQUxfUEVSU0lT
VCkKLQotI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKLSNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5o
IgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWlzYy5oPgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLQotbmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFBsYXRmb3JtIHsK
LWNsYXNzIENlcnRNZ3JXcmFwcGVyOwotfQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIFByb3RlY3Rpb25TcGFjZTsKLQotY2xhc3MgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSB7Ci1w
dWJsaWM6Ci0gICAgZnJpZW5kIENyZWRlbnRpYWxCYWNraW5nU3RvcmUmIGNyZWRlbnRpYWxCYWNr
aW5nU3RvcmUoKTsKLQotICAgIH5DcmVkZW50aWFsQmFja2luZ1N0b3JlKCk7Ci0gICAgYm9vbCBv
cGVuKGNvbnN0IFN0cmluZyYgZGJQYXRoKTsKLSAgICBib29sIGFkZExvZ2luKGNvbnN0IFByb3Rl
Y3Rpb25TcGFjZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKLSAgICBib29sIHVwZGF0ZUxvZ2luKGNv
bnN0IFByb3RlY3Rpb25TcGFjZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKLSAgICBib29sIGhhc0xv
Z2luKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpOwotICAgIENyZWRlbnRpYWwgZ2V0TG9naW4oY29u
c3QgUHJvdGVjdGlvblNwYWNlJik7Ci0gICAgYm9vbCByZW1vdmVMb2dpbihjb25zdCBQcm90ZWN0
aW9uU3BhY2UmLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKTsKLSAgICBib29sIGFkZE5ldmVyUmVt
ZW1iZXIoY29uc3QgUHJvdGVjdGlvblNwYWNlJik7Ci0gICAgYm9vbCBoYXNOZXZlclJlbWVtYmVy
KGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpOwotICAgIGJvb2wgcmVtb3ZlTmV2ZXJSZW1lbWJlcihj
b25zdCBQcm90ZWN0aW9uU3BhY2UmKTsKLSAgICBib29sIGNsZWFyTG9naW5zKCk7Ci0gICAgYm9v
bCBjbGVhck5ldmVyUmVtZW1iZXIoKTsKLQotcHJpdmF0ZToKLSAgICBDcmVkZW50aWFsQmFja2lu
Z1N0b3JlKCk7Ci0gICAgU3RyaW5nIGVuY3J5cHRlZFN0cmluZyhjb25zdCBTdHJpbmcmIHBsYWlu
VGV4dCkgY29uc3Q7Ci0gICAgU3RyaW5nIGRlY3J5cHRlZFN0cmluZyhjb25zdCBTdHJpbmcmIGNp
cGhlclRleHQpIGNvbnN0OwotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNlcnRNZ3JXcmFw
cGVyKiBjZXJ0TWdyV3JhcHBlcigpOwotCi0gICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsK
LSAgICBPd25QdHI8U1FMaXRlU3RhdGVtZW50PiBtX2FkZExvZ2luU3RhdGVtZW50OwotICAgIE93
blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlTG9naW5TdGF0ZW1lbnQ7Ci0gICAgT3duUHRy
PFNRTGl0ZVN0YXRlbWVudD4gbV9oYXNMb2dpblN0YXRlbWVudDsKLSAgICBPd25QdHI8U1FMaXRl
U3RhdGVtZW50PiBtX2dldExvZ2luU3RhdGVtZW50OwotICAgIE93blB0cjxTUUxpdGVTdGF0ZW1l
bnQ+IG1fcmVtb3ZlTG9naW5TdGF0ZW1lbnQ7Ci0gICAgT3duUHRyPFNRTGl0ZVN0YXRlbWVudD4g
bV9hZGROZXZlclJlbWVtYmVyU3RhdGVtZW50OwotICAgIE93blB0cjxTUUxpdGVTdGF0ZW1lbnQ+
IG1faGFzTmV2ZXJSZW1lbWJlclN0YXRlbWVudDsKLSAgICBPd25QdHI8U1FMaXRlU3RhdGVtZW50
PiBtX3JlbW92ZU5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQ7Ci0KLSAgICBPd25QdHI8QmxhY2tCZXJy
eTo6UGxhdGZvcm06OkNlcnRNZ3JXcmFwcGVyPiBtX2NlcnRNZ3JXcmFwcGVyOwotCi0gICAgRElT
QUJMRV9DT1BZKENyZWRlbnRpYWxCYWNraW5nU3RvcmUpCi19OwotCi1DcmVkZW50aWFsQmFja2lu
Z1N0b3JlJiBjcmVkZW50aWFsQmFja2luZ1N0b3JlKCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShCTEFDS0JFUlJZX0NSRURFTlRJQUxfUEVSU0lTVCkKLQot
I2VuZGlmIC8vIENyZWRlbnRpYWxCYWNraW5nU3RvcmVfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0NyZWRlbnRpYWxTdG9yYWdlQmxhY2tCZXJyeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L0NyZWRlbnRpYWxTdG9yYWdlQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9DcmVkZW50aWFsU3Rv
cmFnZUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCi0KLSNpbmNsdWRlICJDcmVkZW50aWFsLmgi
Ci0jaWYgRU5BQkxFKEJMQUNLQkVSUllfQ1JFREVOVElBTF9QRVJTSVNUKQotI2luY2x1ZGUgIkNy
ZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUNyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldEZyb21QZXJzaXN0ZW50U3RvcmFnZShj
b25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKLXsKLSNpZiBFTkFCTEUoQkxB
Q0tCRVJSWV9DUkVERU5USUFMX1BFUlNJU1QpCi0gICAgcmV0dXJuIGNyZWRlbnRpYWxCYWNraW5n
U3RvcmUoKS5nZXRMb2dpbihwcm90ZWN0aW9uU3BhY2UpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0ocHJvdGVjdGlvblNwYWNlKTsKLSAgICByZXR1cm4gQ3JlZGVudGlhbCgpOwotI2VuZGlmCi19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvYmxhY2tiZXJyeS9ETlNCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvRE5TQmxhY2tCZXJyeS5jcHAJ
KHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9ETlNCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgRE5TUHJl
ZmV0Y2hCbGFja0JlcnJ5X0gKLSNkZWZpbmUgRE5TUHJlZmV0Y2hCbGFja0JlcnJ5X0gKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkROUy5oIgotCi0jaW5jbHVkZSAiRE5TUmVzb2x2
ZVF1ZXVlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1Db21tb25GdW5jdGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotYm9vbCBETlNSZXNvbHZlUXVldWU6OnBsYXRmb3JtUHJveHlJc0VuYWJsZWRJblN5c3Rl
bVByZWZlcmVuY2VzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBETlNSZXNvbHZlUXVldWU6OnBsYXRmb3JtUmVzb2x2ZShjb25zdCBTdHJp
bmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgcHJlZmV0Y2hETlMoY29u
c3QgU3RyaW5nJiBob3N0KQotewotICAgIGlmIChob3N0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpwcmVmZXRjaEROUyhob3N0KTsKLX0KLQot
fQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvRGVmZXJyZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvRGVmZXJyZWREYXRhLmNwcAkocmV2aXNpb24gMTYxNTkwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0RlZmVycmVkRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkRlZmVycmVkRGF0YS5oIgotCi0jaW5jbHVkZSAiTmV0d29ya0pvYi5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURlZmVycmVkRGF0YTo6RGVmZXJyZWREYXRhKE5ldHdvcmtK
b2ImIGpvYikKLSAgICA6IG1fam9iKGpvYikKLSAgICAsIG1fcHJvY2Vzc0RhdGFUaW1lcih0aGlz
LCAmRGVmZXJyZWREYXRhOjpmaXJlUHJvY2Vzc0RhdGFUaW1lcikKLSAgICAsIG1fZGVmZXJyZWRT
dGF0dXNSZWNlaXZlZChmYWxzZSkKLSAgICAsIG1fc3RhdHVzKDApCi0gICAgLCBtX2J5dGVzU2Vu
dCgwKQotICAgICwgbV90b3RhbEJ5dGVzVG9CZVNlbnQoMCkKLSAgICAsIG1fZGVmZXJyZWRDbG9z
ZVN0YXR1cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtOjpTdGF0dXNTdWNjZXNz
KQotICAgICwgbV9kZWZlcnJlZENsb3NlKGZhbHNlKQotICAgICwgbV9pblByb2Nlc3NEZWZlcnJl
ZERhdGEoZmFsc2UpCi17Ci19Ci0KLXZvaWQgRGVmZXJyZWREYXRhOjpkZWZlck9wZW4oaW50IHN0
YXR1cywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fZGVmZXJyZWRTdGF0dXNSZWNl
aXZlZCA9IHRydWU7Ci0gICAgbV9zdGF0dXMgPSBzdGF0dXM7Ci0gICAgbV9tZXNzYWdlID0gbWVz
c2FnZTsKLX0KLQotdm9pZCBEZWZlcnJlZERhdGE6OmRlZmVySGVhZGVyUmVjZWl2ZWQoY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbV9oZWFkZXJLZXlzLmFw
cGVuZChrZXkpOwotICAgIG1faGVhZGVyVmFsdWVzLmFwcGVuZCh2YWx1ZSk7Ci19Ci0KLXZvaWQg
RGVmZXJyZWREYXRhOjpkZWZlck11bHRpcGFydEhlYWRlclJlY2VpdmVkKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIG1fbXVsdGlwYXJ0SGVhZGVyS2V5cy5h
cHBlbmQoa2V5KTsKLSAgICBtX211bHRpcGFydGhlYWRlclZhbHVlcy5hcHBlbmQodmFsdWUpOwot
fQotCi12b2lkIERlZmVycmVkRGF0YTo6ZGVmZXJEYXRhU2VudCh1bnNpZ25lZCBsb25nIGxvbmcg
Ynl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQotewotICAg
IG1fYnl0ZXNTZW50ID0gYnl0ZXNTZW50OwotICAgIG1fdG90YWxCeXRlc1RvQmVTZW50ID0gdG90
YWxCeXRlc1RvQmVTZW50OwotfQotCi12b2lkIERlZmVycmVkRGF0YTo6ZGVmZXJEYXRhUmVjZWl2
ZWQoY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQotewotICAgIG1fZGF0YVNlZ21lbnRzLmFw
cGVuZChWZWN0b3I8Y2hhcj4oKSk7Ci0gICAgbV9kYXRhU2VnbWVudHMucmJlZ2luKCktPmFwcGVu
ZChidWYsIGxlbik7Ci19Ci0KLXZvaWQgRGVmZXJyZWREYXRhOjpkZWZlckNsb3NlKGludCBzdGF0
dXMpCi17Ci0gICAgbV9kZWZlcnJlZENsb3NlU3RhdHVzID0gc3RhdHVzOwotICAgIG1fZGVmZXJy
ZWRDbG9zZSA9IHRydWU7Ci19Ci0KLWJvb2wgRGVmZXJyZWREYXRhOjpwcm9jZXNzSGVhZGVycyhW
ZWN0b3I8U3RyaW5nPiYgaGVhZGVyS2V5cywgVmVjdG9yPFN0cmluZz4mIGhlYWRlclZhbHVlcywg
SGFuZGxlSGVhZGVyc0Z1bmN0aW9uIGZ1bmN0aW9uKQotewotICAgIHNpemVfdCBudW1IZWFkZXJz
ID0gaGVhZGVyS2V5cy5zaXplKCk7Ci0gICAgQVNTRVJUKGhlYWRlclZhbHVlcy5zaXplKCkgPT0g
bnVtSGVhZGVycyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1IZWFkZXJzOyArK2kp
IHsKLSAgICAgICAgKG1fam9iLipmdW5jdGlvbikoaGVhZGVyS2V5c1tpXSwgaGVhZGVyVmFsdWVz
W2ldKTsKLQotICAgICAgICBpZiAobV9qb2IuaXNEZWZlcnJpbmdMb2FkaW5nKCkpIHsKLSAgICAg
ICAgICAgIC8vIFJlbW92ZSBhbGwgdGhlIGhlYWRlcnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBw
cm9jZXNzZWQuCi0gICAgICAgICAgICBoZWFkZXJLZXlzLnJlbW92ZSgwLCBpICsgMSk7Ci0gICAg
ICAgICAgICBoZWFkZXJWYWx1ZXMucmVtb3ZlKDAsIGkgKyAxKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX2pvYi5pc0NhbmNlbGxlZCgpKSB7
Ci0gICAgICAgICAgICAvLyBEb24ndCBib3RoZXIgcmVtb3ZpbmcgaGVhZGVyczsgam9iIHdpbGwg
YmUgZGVsZXRlZC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBoZWFkZXJLZXlzLmNsZWFyKCk7Ci0gICAgaGVhZGVyVmFsdWVzLmNsZWFyKCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGVmZXJyZWREYXRhOjpwcm9jZXNzRGVmZXJyZWREYXRh
KCkKLXsKLSAgICBpZiAobV9pblByb2Nlc3NEZWZlcnJlZERhdGEpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlY3Vyc2lvbkd1YXJkIGd1YXJkKG1faW5Qcm9jZXNzRGVmZXJyZWREYXRhKTsKLQot
ICAgIC8vIFNlbmRpbmcgZGF0YSB0byB3ZWJraXQgY2F1c2VzIGl0IHRvIGJlIHBhcnNlZCBhbmQg
amF2YXNjcmlwdCBleGVjdXRlZCwKLSAgICAvLyB3aGljaCBtaWdodCBjYXVzZSBpdCB0byBjYW5j
ZWwgdGhlIGpvYiBvciBzZXQgZGVmZXJzTG9hZGluZyBhZ2Fpbi4gU28KLSAgICAvLyB0byBiZSBz
YWZlLCBjaGVjayB0aGlzIGFmdGVyIGV2ZXJ5IHN0ZXAuCi0gICAgaWYgKG1fam9iLmlzRGVmZXJy
aW5nTG9hZGluZygpIHx8IG1fam9iLmlzQ2FuY2VsbGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2RlZmVycmVkU3RhdHVzUmVjZWl2ZWQpIHsKLSAgICAgICAgbV9qb2IuaGFuZGxl
Tm90aWZ5U3RhdHVzUmVjZWl2ZWQobV9zdGF0dXMsIG1fbWVzc2FnZSk7Ci0gICAgICAgIG1fZGVm
ZXJyZWRTdGF0dXNSZWNlaXZlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV9qb2IuaXNEZWZlcnJp
bmdMb2FkaW5nKCkgfHwgbV9qb2IuaXNDYW5jZWxsZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIXByb2Nlc3NIZWFkZXJzKG1faGVhZGVyS2V5cywgbV9oZWFkZXJW
YWx1ZXMsICZOZXR3b3JrSm9iOjpoYW5kbGVOb3RpZnlIZWFkZXJSZWNlaXZlZCkKLSAgICAgICAg
fHwgIXByb2Nlc3NIZWFkZXJzKG1fbXVsdGlwYXJ0SGVhZGVyS2V5cywgbV9tdWx0aXBhcnRoZWFk
ZXJWYWx1ZXMsICZOZXR3b3JrSm9iOjpoYW5kbGVOb3RpZnlNdWx0aXBhcnRIZWFkZXJSZWNlaXZl
ZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9ubHkgcHJvY2VzcyAzMmsgb2YgZGF0YSBh
dCBhIHRpbWUgdG8gYXZvaWQgYmxvY2tpbmcgdGhlIGV2ZW50IGxvb3AgZm9yIHRvbyBsb25nLgot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhEYXRhID0gMzIgKiAxMDI0OwotCi0gICAgdW5z
aWduZWQgdG90YWxEYXRhID0gMDsKLSAgICB3aGlsZSAoIW1fZGF0YVNlZ21lbnRzLmlzRW1wdHko
KSkgewotICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciA9IG1fZGF0YVNlZ21lbnRz
LmZpcnN0KCk7Ci0gICAgICAgIG1fam9iLmhhbmRsZU5vdGlmeURhdGFSZWNlaXZlZChidWZmZXIu
ZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKLSAgICAgICAgdG90YWxEYXRhICs9IGJ1ZmZlci5zaXpl
KCk7Ci0KLSAgICAgICAgaWYgKG1fam9iLmlzQ2FuY2VsbGVkKCkpIHsKLSAgICAgICAgICAgIC8v
IERvbid0IGJvdGhlciByZW1vdmluZyBzZWdtZW50OyBqb2Igd2lsbCBiZSBkZWxldGVkLgotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9kYXRhU2VnbWVudHMucmVt
b3ZlRmlyc3QoKTsKLQotICAgICAgICBpZiAobV9qb2IuaXNEZWZlcnJpbmdMb2FkaW5nKCkpIHsK
LSAgICAgICAgICAgIC8vIFN0b3AgcHJvY2Vzc2luZyB1bnRpbCBkZWZlcnJlZCBsb2FkaW5nIGlz
IHR1cm5lZCBvZmYgYWdhaW4uCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAodG90YWxEYXRhID49IG1heERhdGEgJiYgIW1fZGF0YVNlZ21lbnRzLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgLy8gUGF1c2UgZm9yIG5vdywgYW5kIHNjaGVkdWxlIGEgdGltZXIg
dG8gY29udGludWUgYWZ0ZXIgcnVubmluZyB0aGUgZXZlbnQgbG9vcC4KLSAgICAgICAgICAgIHNj
aGVkdWxlUHJvY2Vzc0RlZmVycmVkRGF0YSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdG90YWxCeXRlc1RvQmVTZW50KSB7Ci0gICAgICAgIG1f
am9iLmhhbmRsZU5vdGlmeURhdGFTZW50KG1fYnl0ZXNTZW50LCBtX3RvdGFsQnl0ZXNUb0JlU2Vu
dCk7Ci0gICAgICAgIG1fYnl0ZXNTZW50ID0gMDsKLSAgICAgICAgbV90b3RhbEJ5dGVzVG9CZVNl
bnQgPSAwOwotICAgIH0KLQotICAgIGlmIChtX2RlZmVycmVkQ2xvc2UpIHsKLSAgICAgICAgbV9q
b2IuaGFuZGxlTm90aWZ5Q2xvc2UobV9kZWZlcnJlZENsb3NlU3RhdHVzKTsKLSAgICAgICAgbV9k
ZWZlcnJlZENsb3NlID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX2pvYi5pc0RlZmVycmluZ0xvYWRp
bmcoKSB8fCBtX2pvYi5pc0NhbmNlbGxlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0K
LX0KLQotdm9pZCBEZWZlcnJlZERhdGE6OmZpcmVQcm9jZXNzRGF0YVRpbWVyKFRpbWVyPERlZmVy
cmVkRGF0YT4qKQotewotICAgIHByb2Nlc3NEZWZlcnJlZERhdGEoKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L0RlZmVycmVkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9EZWZlcnJlZERhdGEuaAkocmV2aXNpb24gMTYxNTkwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0RlZmVycmVkRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBEZWZlcnJlZERhdGFfaAot
I2RlZmluZSBEZWZlcnJlZERhdGFfaAotCi0jaW5jbHVkZSAiVGltZXIuaCIKLQotI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBOZXR3b3JrSm9i
OwotCi1jbGFzcyBSZWN1cnNpb25HdWFyZCB7Ci1wdWJsaWM6Ci0gICAgUmVjdXJzaW9uR3VhcmQo
Ym9vbCYgZ3VhcmQpCi0gICAgICAgIDogbV9ndWFyZChndWFyZCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVCghbV9ndWFyZCk7Ci0gICAgICAgIG1fZ3VhcmQgPSB0cnVlOwotICAgIH0KLQotICAgIH5S
ZWN1cnNpb25HdWFyZCgpCi0gICAgewotICAgICAgICBtX2d1YXJkID0gZmFsc2U7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIGJvb2wmIG1fZ3VhcmQ7Ci19OwotCi1jbGFzcyBEZWZlcnJlZERhdGEg
ewotcHVibGljOgotICAgIERlZmVycmVkRGF0YShOZXR3b3JrSm9iJik7Ci0gICAgdm9pZCBkZWZl
ck9wZW4oaW50IHN0YXR1cywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIGRlZmVy
SGVhZGVyUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwot
ICAgIHZvaWQgZGVmZXJNdWx0aXBhcnRIZWFkZXJSZWNlaXZlZChjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBkZWZlckRhdGFSZWNlaXZlZChjb25zdCBj
aGFyKiBidWYsIHNpemVfdCBsZW4pOwotICAgIHZvaWQgZGVmZXJEYXRhU2VudCh1bnNpZ25lZCBs
b25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50
KTsKLSAgICB2b2lkIGRlZmVyQ2xvc2UoaW50IHN0YXR1cyk7Ci0KLSAgICBib29sIGhhc0RlZmVy
cmVkRGF0YSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9kZWZlcnJlZFN0YXR1c1Jl
Y2VpdmVkIHx8ICFtX2hlYWRlcktleXMuaXNFbXB0eSgpIHx8ICFtX211bHRpcGFydEhlYWRlcktl
eXMuaXNFbXB0eSgpIHx8ICFtX2RhdGFTZWdtZW50cy5pc0VtcHR5KCkgfHwgbV9kZWZlcnJlZENs
b3NlOwotICAgIH0KLQotICAgIHZvaWQgcHJvY2Vzc0RlZmVycmVkRGF0YSgpOwotCi0gICAgdm9p
ZCBzY2hlZHVsZVByb2Nlc3NEZWZlcnJlZERhdGEoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3By
b2Nlc3NEYXRhVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fcHJvY2Vzc0RhdGFUaW1l
ci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHR5cGVkZWYgdm9pZCAo
TmV0d29ya0pvYjo6KkhhbmRsZUhlYWRlcnNGdW5jdGlvbikoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUpOwotCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgam9iIGlz
IGRlZmVycmVkIG9yIGNhbmNlbGVkLCBvdGhlcndpc2UgcmV0dXJucyB0cnVlLgotICAgIGJvb2wg
cHJvY2Vzc0hlYWRlcnMoVmVjdG9yPFN0cmluZz4mIGhlYWRlcktleXMsIFZlY3RvcjxTdHJpbmc+
JiBoZWFkZXJWYWx1ZXMsIEhhbmRsZUhlYWRlcnNGdW5jdGlvbik7Ci0KLSAgICB2b2lkIGZpcmVQ
cm9jZXNzRGF0YVRpbWVyKFRpbWVyPERlZmVycmVkRGF0YT4qKTsKLSAgICBOZXR3b3JrSm9iJiBt
X2pvYjsKLSAgICBUaW1lcjxEZWZlcnJlZERhdGE+IG1fcHJvY2Vzc0RhdGFUaW1lcjsKLSAgICBi
b29sIG1fZGVmZXJyZWRTdGF0dXNSZWNlaXZlZDsKLSAgICBpbnQgbV9zdGF0dXM7Ci0gICAgU3Ry
aW5nIG1fbWVzc2FnZTsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX2hlYWRlcktleXM7Ci0gICAgVmVj
dG9yPFN0cmluZz4gbV9oZWFkZXJWYWx1ZXM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9tdWx0aXBh
cnRIZWFkZXJLZXlzOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fbXVsdGlwYXJ0aGVhZGVyVmFsdWVz
OwotICAgIERlcXVlPFZlY3RvcjxjaGFyPiA+IG1fZGF0YVNlZ21lbnRzOwotICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBtX2J5dGVzU2VudDsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV90b3RhbEJ5
dGVzVG9CZVNlbnQ7Ci0gICAgaW50IG1fZGVmZXJyZWRDbG9zZVN0YXR1czsKLSAgICBib29sIG1f
ZGVmZXJyZWRDbG9zZTsKLSAgICBib29sIG1faW5Qcm9jZXNzRGVmZXJyZWREYXRhOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRGVmZXJyZWREYXRhX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvTmV0d29ya0pvYi5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEs
IDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Ik5ldHdvcmtKb2IuaCIKLQotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdl
ci5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJDcmVkZW50aWFsQmFja2luZ1N0b3Jl
LmgiCi0jaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIkhUVFBQ
YXJzZXJzLmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiTUlNRVNuaWZmaW5nLmgiCi0j
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5ldHdvcmtNYW5hZ2VyLmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJTU0ZpbHRlclN0cmVhbS5oIgotI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotCi0jaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtTG9nLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2V0dGluZ3Mu
aD4KLSNpbmNsdWRlIDxMb2NhbGl6ZVJlc291cmNlLmg+Ci0jaW5jbHVkZSA8bmV0d29yay9NdWx0
aXBhcnRTdHJlYW0uaD4KLSNpbmNsdWRlIDxuZXR3b3JrL05ldHdvcmtTdHJlYW1GYWN0b3J5Lmg+
Ci0KLXVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgaW50IHNfcmVkaXJlY3RNYXhpbXVtID0gMTA7
Ci0KLWlubGluZSBzdGF0aWMgYm9vbCBpc0luZm8oaW50IHN0YXR1c0NvZGUpCi17Ci0gICAgcmV0
dXJuIDEwMCA8PSBzdGF0dXNDb2RlICYmIHN0YXR1c0NvZGUgPCAyMDA7Ci19Ci0KLWlubGluZSBz
dGF0aWMgYm9vbCBpc1JlZGlyZWN0KGludCBzdGF0dXNDb2RlKQotewotICAgIHJldHVybiAzMDAg
PD0gc3RhdHVzQ29kZSAmJiBzdGF0dXNDb2RlIDwgNDAwICYmIHN0YXR1c0NvZGUgIT0gMzA0Owot
fQotCi1pbmxpbmUgc3RhdGljIGJvb2wgaXNVbmF1dGhvcml6ZWQoaW50IHN0YXR1c0NvZGUpCi17
Ci0gICAgcmV0dXJuIHN0YXR1c0NvZGUgPT0gNDAxOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgYXBwZW5kYWJsZUhlYWRlcnNbXSA9IHsiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2lu
IiwgImFsbG93IiwKLSAgICAic2V0LWNvb2tpZSIsICJzZXQtY29va2llMiIsICJ2YXJ5IiwgInZp
YSIsICJ3YXJuaW5nIn07Ci0KLXN0YXRpYyBib29sIGlzQXBwZW5kYWJsZUhlYWRlcihjb25zdCBT
dHJpbmcmIGtleSkKLXsKLSAgICAvLyBOb24tc3RhbmRhcmQgaGVhZGVyIGZpZWxkcyBhcmUgY29u
dmVudGlvbmFsbHkgbWFya2VkIGJ5IHByZWZpeGluZyB0aGUgZmllbGQgbmFtZSB3aXRoIFgtLgot
ICAgIGlmIChrZXkuc3RhcnRzV2l0aCgieC0iKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihhcHBlbmRhYmxlSGVhZGVycykgL3NpemVv
ZihjaGFyKik7IGkrKykKLSAgICAgICAgaWYgKGtleSA9PSBhcHBlbmRhYmxlSGVhZGVyc1tpXSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1OZXR3
b3JrSm9iOjpOZXR3b3JrSm9iKCkKLSAgICA6IEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcigwKQot
ICAgICwgbV9wbGF5ZXJJZCgwKQotICAgICwgbV9kZWxldGVKb2JUaW1lcih0aGlzLCAmTmV0d29y
a0pvYjo6ZmlyZURlbGV0ZUpvYlRpbWVyKQotICAgICwgbV9zdHJlYW1GYWN0b3J5KDApCi0gICAg
LCBtX2lzRmlsZShmYWxzZSkKLSAgICAsIG1faXNGVFAoZmFsc2UpCi0gICAgLCBtX2lzRlRQRGly
KHRydWUpCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV9pc1J1bm5pbmcodHJ1ZSkgLy8gQWx3YXlz
IHN0YXJ0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpb24uCi0jZW5kaWYKLSAgICAsIG1fY2Fu
Y2VsbGVkKGZhbHNlKQotICAgICwgbV9zdGF0dXNSZWNlaXZlZChmYWxzZSkKLSAgICAsIG1fZGF0
YVJlY2VpdmVkKGZhbHNlKQotICAgICwgbV9yZXNwb25zZVNlbnQoZmFsc2UpCi0gICAgLCBtX2Nh
bGxpbmdDbGllbnQoZmFsc2UpCi0gICAgLCBtX25lZWRzUmV0cnlBc0ZUUERpcmVjdG9yeShmYWxz
ZSkKLSAgICAsIG1faXNPdmVycmlkZUNvbnRlbnRUeXBlKGZhbHNlKQotICAgICwgbV9uZXdKb2JX
aXRoQ3JlZGVudGlhbHNTdGFydGVkKGZhbHNlKQotICAgICwgbV9pc0hlYWRNZXRob2QoZmFsc2Up
Ci0gICAgLCBtX2V4dGVuZGVkU3RhdHVzQ29kZSgwKQotICAgICwgbV9yZWRpcmVjdENvdW50KDAp
Ci0gICAgLCBtX2RlZmVycmVkRGF0YSgqdGhpcykKLSAgICAsIG1fZGVmZXJMb2FkaW5nQ291bnQo
MCkKLSAgICAsIG1faXNBdXRoZW50aWNhdGlvbkNoYWxsZW5naW5nKGZhbHNlKQotewotfQotCi1O
ZXR3b3JrSm9iOjp+TmV0d29ya0pvYigpCi17Ci0gICAgaWYgKG1faXNBdXRoZW50aWNhdGlvbkNo
YWxsZW5naW5nKQotICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXI6Omluc3Rh
bmNlKCktPmNhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHRoaXMpOwotfQotCi12b2lkIE5l
dHdvcmtKb2I6OmluaXRpYWxpemUoaW50IHBsYXllcklkLAotICAgIGNvbnN0IFN0cmluZyYgcGFn
ZUdyb3VwTmFtZSwKLSAgICBjb25zdCBVUkwmIHVybCwKLSAgICBjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6TmV0d29ya1JlcXVlc3QmIHJlcXVlc3QsCi0gICAgUGFzc1JlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gaGFuZGxlLAotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrU3RyZWFt
RmFjdG9yeSogc3RyZWFtRmFjdG9yeSwKLSAgICBGcmFtZSogZnJhbWUsCi0gICAgaW50IGRlZmVy
TG9hZGluZ0NvdW50LAotICAgIGludCByZWRpcmVjdENvdW50KQotewotICAgIEJMQUNLQkVSUllf
QVNTRVJUKGhhbmRsZSk7Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQoZnJhbWUpOwotCi0gICAgbV9w
bGF5ZXJJZCA9IHBsYXllcklkOwotICAgIG1fcGFnZUdyb3VwTmFtZSA9IHBhZ2VHcm91cE5hbWU7
Ci0KLSAgICBtX3Jlc3BvbnNlLnNldFVSTCh1cmwpOwotICAgIG1faXNGaWxlID0gdXJsLnByb3Rv
Y29sSXMoImZpbGUiKSB8fCB1cmwucHJvdG9jb2xJcygibG9jYWwiKTsKLSAgICBtX2lzRlRQID0g
dXJsLnByb3RvY29sSXMoImZ0cCIpOwotCi0gICAgbV9oYW5kbGUgPSBoYW5kbGU7Ci0KLSAgICBt
X3N0cmVhbUZhY3RvcnkgPSBzdHJlYW1GYWN0b3J5OwotCi0gICAgaWYgKGZyYW1lICYmIGZyYW1l
LT5sb2FkZXIoKS0+cGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkKCkgIT0gRnJhbWVM
b2FkZXI6Ok5vRGlzbWlzc2FsKSB7Ci0gICAgICAgIC8vIEluIHRoZSBjYXNlIHRoZSBmcmFtZSB3
aWxsIGJlIGRldGFjaGVkIHNvb24sIHdlIHN0aWxsIG5lZWQgdG8gcGluZyB0aGUgc2VydmVyLCBi
dXQgaXQgaXMKLSAgICAgICAgLy8gbm8gbG9uZ2VyIHNhZmUgdG8gcmVmZXJlbmNlIHRoZSBGcmFt
ZSBvYmplY3QuCi0gICAgICAgIC8vIFNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC82NTkxMCBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNDU3
LgotICAgICAgICAvLyBtX2ZyYW1lIHdvdWxkIGJlIHNldCB0byB6ZXJvLgotICAgICAgICBvYnNl
cnZlRnJhbWUoMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG9ic2VydmVGcmFtZShmcmFtZSk7Ci0K
LSAgICBtX3JlZGlyZWN0Q291bnQgPSByZWRpcmVjdENvdW50OwotICAgIG1fZGVmZXJMb2FkaW5n
Q291bnQgPSBkZWZlckxvYWRpbmdDb3VudDsKLQotICAgIG1faXNIZWFkTWV0aG9kID0gbV9oYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKS51cHBlcigpID09ICJIRUFEIjsKLQotICAg
IC8vIFdlIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBjYWxsIG5vdGlmeUhlYWRlclJlY2VpdmVk
LCBhcyB0aGUgQ29udGVudC1UeXBlCi0gICAgLy8gd2lsbCB1bHRpbWF0ZWx5IGdldCBwYXJzZWQg
d2hlbiBzZW5kUmVzcG9uc2VJZk5lZWRlZCBnZXRzIGNhbGxlZC4KLSAgICBpZiAoIXJlcXVlc3Qu
Z2V0T3ZlcnJpZGVDb250ZW50VHlwZSgpLmVtcHR5KCkpIHsKLSAgICAgICAgbV9jb250ZW50VHlw
ZSA9IFN0cmluZyhyZXF1ZXN0LmdldE92ZXJyaWRlQ29udGVudFR5cGUoKSk7Ci0gICAgICAgIG1f
aXNPdmVycmlkZUNvbnRlbnRUeXBlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlcXVlc3Qu
Z2V0U3VnZ2VzdGVkU2F2ZU5hbWUoKS5lbXB0eSgpKQotICAgICAgICBtX2NvbnRlbnREaXNwb3Np
dGlvbiA9ICJmaWxlbmFtZT0iICsgU3RyaW5nKHJlcXVlc3QuZ2V0U3VnZ2VzdGVkU2F2ZU5hbWUo
KSk7Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtKiB3cmFwcGVkU3Ry
ZWFtID0gbV9zdHJlYW1GYWN0b3J5LT5jcmVhdGVOZXR3b3JrU3RyZWFtKHJlcXVlc3QsIG1fcGxh
eWVySWQpOwotICAgIEFTU0VSVCh3cmFwcGVkU3RyZWFtKTsKLQotICAgIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0VHlwZSB0YXJnZXRUeXBlID0gcmVxdWVzdC5n
ZXRUYXJnZXRUeXBlKCk7Ci0gICAgaWYgKCh0YXJnZXRUeXBlID09IEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNNYWluRnJhbWUKLSAgICAgICAgfHwgdGFyZ2V0
VHlwZSA9PSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OlRhcmdldElzU3Vi
ZnJhbWUpCi0gICAgICAgICYmICFtX2lzT3ZlcnJpZGVDb250ZW50VHlwZSkgewotICAgICAgICBS
U1NGaWx0ZXJTdHJlYW0qIGZpbHRlciA9IG5ldyBSU1NGaWx0ZXJTdHJlYW0oKTsKLSAgICAgICAg
ZmlsdGVyLT5zZXRXcmFwcGVkU3RyZWFtKHdyYXBwZWRTdHJlYW0pOwotICAgICAgICB3cmFwcGVk
U3RyZWFtID0gZmlsdGVyOwotICAgIH0KLQotICAgIHNldFdyYXBwZWRTdHJlYW0od3JhcHBlZFN0
cmVhbSk7Ci19Ci0KLWludCBOZXR3b3JrSm9iOjpjYW5jZWxKb2IoKQotewotICAgIG1fY2FuY2Vs
bGVkID0gdHJ1ZTsKLQotICAgIHJldHVybiBzdHJlYW1DYW5jZWwoKTsKLX0KLQotdm9pZCBOZXR3
b3JrSm9iOjp1cGRhdGVEZWZlckxvYWRpbmdDb3VudChpbnQgZGVsdGEpCi17Ci0gICAgbV9kZWZl
ckxvYWRpbmdDb3VudCArPSBkZWx0YTsKLSAgICBBU1NFUlQobV9kZWZlckxvYWRpbmdDb3VudCA+
PSAwKTsKLQotICAgIGlmICghaXNEZWZlcnJpbmdMb2FkaW5nKCkpIHsKLSAgICAgICAgLy8gVGhl
cmUgbWlnaHQgYWxyZWFkeSBiZSBhIHRpbWVyIHNldCB0byBjYWxsIHRoaXMsIGJ1dCBpdCdzIHNh
ZmUgdG8gc2NoZWR1bGUgaXQgYWdhaW4uCi0gICAgICAgIG1fZGVmZXJyZWREYXRhLnNjaGVkdWxl
UHJvY2Vzc0RlZmVycmVkRGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBOZXR3b3JrSm9iOjpub3Rp
ZnlTdGF0dXNSZWNlaXZlZChpbnQgc3RhdHVzLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChzaG91bGREZWZlckxvYWRpbmcoKSkKLSAgICAg
ICAgbV9kZWZlcnJlZERhdGEuZGVmZXJPcGVuKHN0YXR1cywgbWVzc2FnZSk7Ci0gICAgZWxzZQot
ICAgICAgICBoYW5kbGVOb3RpZnlTdGF0dXNSZWNlaXZlZChzdGF0dXMsIG1lc3NhZ2UpOwotfQot
Ci12b2lkIE5ldHdvcmtKb2I6OmhhbmRsZU5vdGlmeVN0YXR1c1JlY2VpdmVkKGludCBzdGF0dXMs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICAvLyBDaGVjayBmb3IgbWVzc2FnZXMgb3V0
IG9mIG9yZGVyIG9yIGFmdGVyIGNhbmNlbC4KLSAgICBpZiAobV9yZXNwb25zZVNlbnQgfHwgbV9j
YW5jZWxsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpc0luZm8oc3RhdHVzKSkKLSAg
ICAgICAgcmV0dXJuOyAvLyBpZ25vcmUKLQotICAgIG1fc3RhdHVzUmVjZWl2ZWQgPSB0cnVlOwot
Ci0gICAgLy8gQ29udmVydCBub24tSFRUUCBzdGF0dXMgY29kZXMgdG8gZ2VuZXJpYyBIVFRQIGNv
ZGVzLgotICAgIG1fZXh0ZW5kZWRTdGF0dXNDb2RlID0gc3RhdHVzOwotICAgIGlmICghc3RhdHVz
KQotICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7Ci0gICAgZWxzZSBp
ZiAoc3RhdHVzIDwgMCkKLSAgICAgICAgbV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSg0MDQp
OwotICAgIGVsc2UKLSAgICAgICAgbV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShzdGF0dXMp
OwotCi0gICAgbV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChtZXNzYWdlKTsKLQotICAgIGlm
IChpc1VuYXV0aG9yaXplZChtX2V4dGVuZGVkU3RhdHVzQ29kZSkpCi0gICAgICAgIHB1cmdlQ3Jl
ZGVudGlhbHMoKTsKLX0KLQotdm9pZCBOZXR3b3JrSm9iOjpub3RpZnlIZWFkZXJzUmVjZWl2ZWQo
Y29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0JiBo
ZWFkZXJzKQotewotICAgIGJvb2wgY29va2llc0VuYWJsZWQgPSBtX2ZyYW1lICYmIG1fZnJhbWUt
PmxvYWRlcigpICYmIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKQotICAgICAgICAmJiBzdGF0
aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkqPihtX2ZyYW1lLT5sb2FkZXIoKS0+
Y2xpZW50KCkpLT5jb29raWVzRW5hYmxlZCgpOwotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
Ok5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmRJdCA9IGhlYWRl
cnMuZW5kKCk7Ci0gICAgZm9yIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6
OkhlYWRlckxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBl
bmRJdDsgKytpdCkgewotCi0gICAgICAgIC8vIEhhbmRsZSBTZXQtQ29va2llIGhlYWRlcnMgaW1t
ZWRpYXRlbHksIGV2ZW4gaWYgbG9hZGluZyBpcyBiZWluZyBkZWZlcnJlZCwgc2luY2UgYW55IHJl
cXVlc3QKLSAgICAgICAgLy8gY3JlYXRlZCB3aGlsZSBsb2FkaW5nIGlzIGRlZmVycmVkIHNob3Vs
ZCBpbmNsdWRlIGFsbCBjb29raWVzIHJlY2VpdmVkLiAoVGhpcyBlc3BlY2lhbGx5Ci0gICAgICAg
IC8vIGFmZmVjdHMgU2V0LUNvb2tpZSBoZWFkZXJzIHNlbnQgd2l0aCBhIDQwMSByZXNwb25zZSAt
IG9mdGVuIHRoaXMgY2F1c2VzIGFuIGF1dGggZGlhbG9nIHRvIGJlCi0gICAgICAgIC8vIG9wZW5l
ZCwgd2hpY2ggZGVmZXJzIGxvYWRpbmcsIGJ1dCB0aGUgZm9sbG93dXAgcmVxdWVzdCB1c2luZyB0
aGUgY3JlZGVudGlhbHMgZnJvbSB0aGUgZGlhbG9nCi0gICAgICAgIC8vIG5lZWRzIHRvIGluY2x1
ZGUgdGhlIGNvb2tpZS4pCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgaXMgc2FmZSBiZWNh
dXNlIGhhbmRsZVNldENvb2tpZUhlYWRlciBvbmx5IHVwZGF0ZXMgdGhlIGNvb2tpZWphciwgaXQg
ZG9lc24ndCBjYWxsIGJhY2sKLSAgICAgICAgLy8gaW50byB0aGUgbG9hZGVyLgotICAgICAgICBT
dHJpbmcga2V5U3RyaW5nKGl0LT5maXJzdCk7Ci0gICAgICAgIGlmIChjb29raWVzRW5hYmxlZCAm
JiBlcXVhbElnbm9yaW5nQ2FzZShrZXlTdHJpbmcsICJzZXQtY29va2llIikpCi0gICAgICAgICAg
ICBoYW5kbGVTZXRDb29raWVIZWFkZXIoaXQtPnNlY29uZCk7Ci0KLSAgICAgICAgaWYgKHNob3Vs
ZERlZmVyTG9hZGluZygpKQotICAgICAgICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJIZWFkZXJS
ZWNlaXZlZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShrZXlTdHJpbmcsICJMb2NhdGlvbiIpKSB7Ci0gICAgICAgICAgICAgICAgLy8gTG9jYXRpb24s
IGxpa2UgYWxsIGhlYWRlcnMsIGlzIHN1cHBvc2VkIHRvIGJlIExhdGluLTEuIEJ1dCBzb21lIHNp
dGVzICh3aWtpcGVkaWEpIHNlbmQgaXQgaW4gVVRGLTguCi0gICAgICAgICAgICAgICAgLy8gQWxs
IGJ5dGUgc3RyaW5ncyB0aGF0IGFyZSB2YWxpZCBVVEYtOCBhcmUgYWxzbyB2YWxpZCBMYXRpbi0x
IChhbHRob3VnaCBvdXRzaWRlIEFTQ0lJLCB0aGUgbWVhbmluZyB3aWxsCi0gICAgICAgICAgICAg
ICAgLy8gZGlmZmVyKSwgYnV0IHRoZSByZXZlcnNlIGlzbid0IHRydWUuIFNvIHRyeSBVVEYtOCBm
aXJzdCBhbmQgZmFsbCBiYWNrIHRvIExhdGluLTEgaWYgaXQncyBpbnZhbGlkLgotICAgICAgICAg
ICAgICAgIC8vIChIaWdoIExhdGluLTEgc2hvdWxkIGJlIHVybC1lbmNvZGVkIGFueXdheS4pCi0g
ICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogbWF5YmUgd2Ugc2hv
dWxkIGRvIHRoaXMgd2l0aCBvdGhlciBoZWFkZXJzPwotICAgICAgICAgICAgICAgIC8vIFNraXAg
aXQgZm9yIG5vdyAtIHdlIGRvbid0IHdhbnQgdG8gcmV3cml0ZSByYW5kb20gYnl0ZXMgdW5sZXNz
IHdlJ3JlIHN1cmUuIChEZWZpbml0ZWx5IGRvbid0IHdhbnQgdG8KLSAgICAgICAgICAgICAgICAv
LyByZXdyaXRlIGNvb2tpZXMsIGZvciBpbnN0YW5jZS4pIE5lZWRzIG1vcmUgaW52ZXN0aWdhdGlv
bi4KLSAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbHVlU3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICB2YWx1
ZVN0cmluZyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICB2YWx1ZVN0cmluZyA9IGl0LT5zZWNvbmQ7Ci0KLSAgICAgICAgICAgIGhhbmRsZU5vdGlmeUhl
YWRlclJlY2VpdmVkKGtleVN0cmluZywgdmFsdWVTdHJpbmcpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIE5ldHdvcmtKb2I6Om5vdGlmeU11bHRpcGFydEhlYWRlclJlY2VpdmVkKGNvbnN0
IGNoYXIqIGtleSwgY29uc3QgY2hhciogdmFsdWUpCi17Ci0gICAgaWYgKHNob3VsZERlZmVyTG9h
ZGluZygpKQotICAgICAgICBtX2RlZmVycmVkRGF0YS5kZWZlck11bHRpcGFydEhlYWRlclJlY2Vp
dmVkKGtleSwgdmFsdWUpOwotICAgIGVsc2UKLSAgICAgICAgaGFuZGxlTm90aWZ5TXVsdGlwYXJ0
SGVhZGVyUmVjZWl2ZWQoa2V5LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6bm90aWZ5
QXV0aFJlY2VpdmVkKE5ldHdvcmtSZXF1ZXN0OjpBdXRoVHlwZSBhdXRoVHlwZSwgTmV0d29ya1Jl
cXVlc3Q6OkF1dGhQcm90b2NvbCBhdXRoUHJvdG9jb2wsIE5ldHdvcmtSZXF1ZXN0OjpBdXRoU2No
ZW1lIGF1dGhTY2hlbWUsIGNvbnN0IGNoYXIqIHJlYWxtLCBBdXRoUmVzdWx0IHJlc3VsdCkKLXsK
LSAgICBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIHNlcnZlclR5cGU7Ci0gICAgc3dpdGNoIChh
dXRoVHlwZSkgewotICAgIGNhc2UgTmV0d29ya1JlcXVlc3Q6OkF1dGhUeXBlSG9zdDoKLSAgICAg
ICAgc3dpdGNoIChhdXRoUHJvdG9jb2wpIHsKLSAgICAgICAgY2FzZSBOZXR3b3JrUmVxdWVzdDo6
QXV0aFByb3RvY29sSFRUUDoKLSAgICAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3Bh
Y2VTZXJ2ZXJIVFRQOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTmV0d29ya1Jl
cXVlc3Q6OkF1dGhQcm90b2NvbEhUVFBTOgotICAgICAgICAgICAgc2VydmVyVHlwZSA9IFByb3Rl
Y3Rpb25TcGFjZVNlcnZlckhUVFBTOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
TmV0d29ya1JlcXVlc3Q6OkF1dGhQcm90b2NvbEZUUDoKLSAgICAgICAgICAgIHNlcnZlclR5cGUg
PSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJGVFA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBOZXR3b3JrUmVxdWVzdDo6QXV0aFByb3RvY29sRlRQUzoKLSAgICAgICAgICAgIHNlcnZl
clR5cGUgPSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJGVFBTOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5ldHdv
cmtSZXF1ZXN0OjpBdXRoVHlwZVByb3h5OgotICAgICAgICBzd2l0Y2ggKGF1dGhQcm90b2NvbCkg
ewotICAgICAgICBjYXNlIE5ldHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2xIVFRQOgotICAgICAg
ICAgICAgc2VydmVyVHlwZSA9IFByb3RlY3Rpb25TcGFjZVByb3h5SFRUUDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE5ldHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2xIVFRQUzoK
LSAgICAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3BhY2VQcm94eUhUVFBTOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTmV0d29ya1JlcXVlc3Q6OkF1dGhQcm90b2Nv
bEZUUDoKLSAgICAgICAgY2FzZSBOZXR3b3JrUmVxdWVzdDo6QXV0aFByb3RvY29sRlRQUzoKLSAg
ICAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3BhY2VQcm94eUZUUDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBzY2hl
bWU7Ci0gICAgc3dpdGNoIChhdXRoU2NoZW1lKSB7Ci0gICAgY2FzZSBOZXR3b3JrUmVxdWVzdDo6
QXV0aFNjaGVtZURlZmF1bHQ6Ci0gICAgICAgIHNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lRGVmYXVsdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOZXR3b3Jr
UmVxdWVzdDo6QXV0aFNjaGVtZUhUVFBCYXNpYzoKLSAgICAgICAgc2NoZW1lID0gUHJvdGVjdGlv
blNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQQmFzaWM7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTmV0d29ya1JlcXVlc3Q6OkF1dGhTY2hlbWVIVFRQRGlnZXN0OgotICAgICAgICBzY2hl
bWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdlc3Q7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgTmV0d29ya1JlcXVlc3Q6OkF1dGhTY2hlbWVOZWdvdGlhdGU6
Ci0gICAgICAgIHNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVn
b3RpYXRlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5ldHdvcmtSZXF1ZXN0OjpBdXRoU2No
ZW1lTlRMTToKLSAgICAgICAgc2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVOVExNOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE9uIHN1Y2Nl
c3MsIHVwZGF0ZSBzdG9yZWQgY3JlZGVudGlhbHMgaWYgbmVjZXNzYXJ5Ci0gICAgLy8gT24gZmFp
bHVyZSwgcHVyZ2UgY3JlZGVudGlhbHMgYW5kIHNlbmQgbmV3IHJlcXVlc3QKLSAgICAvLyBPbiBy
ZXRyeSwgdXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscyBpZiBuZWNlc3NhcnkgYW5kIHNlbmQgbmV3
IHJlcXVlc3QKLSAgICBpZiAocmVzdWx0ID09IEF1dGhSZXN1bHRGYWlsdXJlKQotICAgICAgICBw
dXJnZUNyZWRlbnRpYWxzKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFVwZGF0ZSB0aGUgY3Jl
ZGVudGlhbHMgdGhhdCB3aWxsIGJlIHN0b3JlZCB0byBtYXRjaCB0aGUgc2NoZW1lIHRoYXQgd2Fz
IGFjdHVhbGx5IHVzZWQKLSAgICAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5n
ZSA9IGF1dGhUeXBlID09IE5ldHdvcmtSZXF1ZXN0OjpBdXRoVHlwZVByb3h5ID8gbV9oYW5kbGUt
PmdldEludGVybmFsKCktPm1fcHJveHlXZWJDaGFsbGVuZ2UgOiBtX2hhbmRsZS0+Z2V0SW50ZXJu
YWwoKS0+bV9ob3N0V2ViQ2hhbGxlbmdlOwotICAgICAgICBpZiAoY2hhbGxlbmdlLmhhc0NyZWRl
bnRpYWxzKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgb2xkU3BhY2Ug
PSBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCk7Ci0gICAgICAgICAgICBpZiAob2xkU3BhY2Uu
YXV0aGVudGljYXRpb25TY2hlbWUoKSAhPSBzY2hlbWUgJiYgb2xkU3BhY2Uuc2VydmVyVHlwZSgp
ID09IHNlcnZlclR5cGUpIHsKLSAgICAgICAgICAgICAgICBQcm90ZWN0aW9uU3BhY2UgbmV3U3Bh
Y2Uob2xkU3BhY2UuaG9zdCgpLCBvbGRTcGFjZS5wb3J0KCksIG9sZFNwYWNlLnNlcnZlclR5cGUo
KSwgb2xkU3BhY2UucmVhbG0oKSwgc2NoZW1lKTsKLSAgICAgICAgICAgICAgICB1cGRhdGVDdXJy
ZW50V2ViQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG5ld1NwYWNlLCBjaGFsbGVu
Z2UucHJvcG9zZWRDcmVkZW50aWFsKCksIGNoYWxsZW5nZS5wcmV2aW91c0ZhaWx1cmVDb3VudCgp
LCBjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCksIGNoYWxsZW5nZS5lcnJvcigpKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3RvcmVDcmVkZW50aWFscygpOwotICAgIH0K
LSAgICBpZiAocmVzdWx0ICE9IEF1dGhSZXN1bHRTdWNjZXNzKSB7Ci0gICAgICAgIHN3aXRjaCAo
c2VuZFJlcXVlc3RXaXRoQ3JlZGVudGlhbHMoc2VydmVyVHlwZSwgc2NoZW1lLCByZWFsbSwgcmVz
dWx0ICE9IEF1dGhSZXN1bHRSZXRyeSkpIHsKLSAgICAgICAgY2FzZSBTZW5kUmVxdWVzdFN1Y2Nl
ZWRlZDoKLSAgICAgICAgICAgIG1fbmV3Sm9iV2l0aENyZWRlbnRpYWxzU3RhcnRlZCA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZW5kUmVxdWVzdENhbmNlbGxlZDoK
LSAgICAgICAgICAgIHN0cmVhbUZhaWxlZFRvR2V0Q3JlZGVudGlhbHMoYXV0aFR5cGUsIGF1dGhQ
cm90b2NvbCwgYXV0aFNjaGVtZSk7Ci0gICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKLSAgICAg
ICAgY2FzZSBTZW5kUmVxdWVzdFdhaXRpbmc6Ci0gICAgICAgICAgICBtX25ld0pvYldpdGhDcmVk
ZW50aWFsc1N0YXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIE5ldHdvcmtKb2I6Om5vdGlmeVN0cmluZ0hlYWRlclJlY2VpdmVkKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmIChzaG91bGRE
ZWZlckxvYWRpbmcoKSkKLSAgICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJIZWFkZXJSZWNlaXZl
ZChrZXksIHZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAgIGhhbmRsZU5vdGlmeUhlYWRlclJlY2Vp
dmVkKGtleSwgdmFsdWUpOwotfQotCi12b2lkIE5ldHdvcmtKb2I6OmhhbmRsZU5vdGlmeUhlYWRl
clJlY2VpdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IC8vIENoZWNrIGZvciBtZXNzYWdlcyBvdXQgb2Ygb3JkZXIgb3IgYWZ0ZXIgY2FuY2VsLgotICAg
IGlmICghbV9zdGF0dXNSZWNlaXZlZCB8fCBtX3Jlc3BvbnNlU2VudCB8fCBtX2NhbmNlbGxlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGxvd2VyS2V5ID0ga2V5Lmxvd2VyKCk7Ci0g
ICAgaWYgKGxvd2VyS2V5ID09ICJjb250ZW50LXR5cGUiKQotICAgICAgICBtX2NvbnRlbnRUeXBl
ID0gdmFsdWUubG93ZXIoKTsKLSAgICBlbHNlIGlmIChsb3dlcktleSA9PSAiY29udGVudC1kaXNw
b3NpdGlvbiIpCi0gICAgICAgIG1fY29udGVudERpc3Bvc2l0aW9uID0gdmFsdWU7Ci0gICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uoa2V5LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29y
a1JlcXVlc3Q6OkhFQURFUl9CTEFDS0JFUlJZX0ZUUCkpCi0gICAgICAgIGhhbmRsZUZUUEhlYWRl
cih2YWx1ZSk7Ci0KLSAgICBpZiAobV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuY29udGFp
bnMoa2V5LnV0ZjgoKS5kYXRhKCkpICYmIGlzQXBwZW5kYWJsZUhlYWRlcihsb3dlcktleSkpIHsK
LSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHNldmVyYWwgaGVhZGVycyB3aXRoIHNhbWUga2V5LCB3
ZSBzaG91bGQgY29tYmluZSB0aGUgZm9sbG93aW5nIG9uZXMgd2l0aCB0aGUgZmlyc3QuCi0gICAg
ICAgIG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGtleSwgbV9yZXNwb25zZS5odHRwSGVh
ZGVyRmllbGQoa2V5KSArICIsICIgKyB2YWx1ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVz
cG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGtleSwgdmFsdWUpOwotfQotCi12b2lkIE5ldHdvcmtK
b2I6OmhhbmRsZU5vdGlmeU11bHRpcGFydEhlYWRlclJlY2VpdmVkKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICghbV9tdWx0aXBhcnRSZXNwb25zZSkg
ewotICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcmVzcG9uc2UgYmFzZWQgb24gdGhlIG9yaWdpbmFs
IHNldCBvZiBoZWFkZXJzICsgdGhlCi0gICAgICAgIC8vIHJlcGxhY2VtZW50IGhlYWRlcnMuIFdl
IG9ubHkgcmVwbGFjZSB0aGUgc2FtZSBmZXcgaGVhZGVycyB0aGF0IGdlY2tvCi0gICAgICAgIC8v
IGRvZXMuIFNlZSBuZXR3ZXJrL3N0cmVhbWNvbnYvY29udmVydGVycy9uc011bHRpTWl4ZWRDb252
LmNwcC4KLSAgICAgICAgbV9tdWx0aXBhcnRSZXNwb25zZSA9IGFkb3B0UHRyKG5ldyBSZXNvdXJj
ZVJlc3BvbnNlKTsKLSAgICAgICAgbV9tdWx0aXBhcnRSZXNwb25zZS0+c2V0VVJMKG1fcmVzcG9u
c2UudXJsKCkpOwotCi0gICAgICAgIC8vIFRoZSBsaXN0IG9mIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpyZXBsYWNlSGVhZGVycyB0aGF0IHdlIGRvIG5vdCBjb3B5IGZyb20gdGhlIG9yaWdpbmFsCi0g
ICAgICAgIC8vIHJlc3BvbnNlIHdoZW4gZ2VuZXJhdGluZyBhIHJlc3BvbnNlLgotICAgICAgICBj
b25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiBtYXAgPSBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZHMoKTsKLQotICAgICAgICBmb3IgKFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkgewotICAgICAg
ICAgICAgYm9vbCBuZWVkc0NvcHlmcm9tT3JpZ2luYWxSZXNwb25zZSA9IHRydWU7Ci0gICAgICAg
ICAgICBpbnQgcmVwbGFjZUhlYWRlcnNJbmRleCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06Ok11bHRpcGFydFN0cmVhbTo6cmVwbGFjZUhlYWRlcnNbcmVwbGFj
ZUhlYWRlcnNJbmRleF0pIHsKLSAgICAgICAgICAgICAgICBpZiAoaXQtPmtleS5sb3dlcigpID09
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNdWx0aXBhcnRTdHJlYW06OnJlcGxhY2VIZWFkZXJzW3Jl
cGxhY2VIZWFkZXJzSW5kZXhdKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5lZWRzQ29weWZyb21P
cmlnaW5hbFJlc3BvbnNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXBsYWNlSGVhZGVyc0luZGV4Kys7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobmVlZHNDb3B5ZnJvbU9yaWdpbmFsUmVzcG9u
c2UpCi0gICAgICAgICAgICAgICAgbV9tdWx0aXBhcnRSZXNwb25zZS0+c2V0SFRUUEhlYWRlckZp
ZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX211bHRpcGFy
dFJlc3BvbnNlLT5zZXRJc011bHRpcGFydFBheWxvYWQodHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYg
KGtleS5sb3dlcigpID09ICJjb250ZW50LXR5cGUiKSB7Ci0gICAgICAgIFN0cmluZyBjb250ZW50
VHlwZSA9IHZhbHVlLmxvd2VyKCk7Ci0gICAgICAgIG1fbXVsdGlwYXJ0UmVzcG9uc2UtPnNldE1p
bWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsKLSAgICAg
ICAgbV9tdWx0aXBhcnRSZXNwb25zZS0+c2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNl
dEZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsKLSAgICB9Ci0gICAgbV9tdWx0aXBhcnRSZXNw
b25zZS0+c2V0SFRUUEhlYWRlckZpZWxkKGtleSwgdmFsdWUpOwotfQotCi12b2lkIE5ldHdvcmtK
b2I6OmhhbmRsZVNldENvb2tpZUhlYWRlcihjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFVS
TCB1cmwgPSBtX3Jlc3BvbnNlLnVybCgpOwotICAgIENvb2tpZU1hbmFnZXImIG1hbmFnZXIgPSBj
b29raWVNYW5hZ2VyKCk7Ci0gICAgaWYgKChtYW5hZ2VyLmNvb2tpZVBvbGljeSgpID09IENvb2tp
ZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbikKLSAgICAgICAg
JiYgKG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5maXJzdFBhcnR5Rm9yQ29va2llcygpICE9IHVy
bCkKLSAgICAgICAgJiYgbWFuYWdlci5nZXRDb29raWUodXJsLCBXaXRoSHR0cE9ubHlDb29raWVz
KS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtYW5hZ2VyLnNldENvb2tpZXModXJs
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6bm90aWZ5RGF0YVJlY2VpdmVkUGxhaW4o
Y29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQotewotICAgIGlmIChzaG91bGREZWZlckxvYWRp
bmcoKSkKLSAgICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJEYXRhUmVjZWl2ZWQoYnVmLCBsZW4p
OwotICAgIGVsc2UKLSAgICAgICAgaGFuZGxlTm90aWZ5RGF0YVJlY2VpdmVkKGJ1ZiwgbGVuKTsK
LX0KLQotdm9pZCBOZXR3b3JrSm9iOjpoYW5kbGVOb3RpZnlEYXRhUmVjZWl2ZWQoY29uc3QgY2hh
ciogYnVmLCBzaXplX3QgbGVuKQotewotICAgIC8vIENoZWNrIGZvciBtZXNzYWdlcyBvdXQgb2Yg
b3JkZXIgb3IgYWZ0ZXIgY2FuY2VsLgotICAgIGlmICgoIW1faXNGaWxlICYmICFtX3N0YXR1c1Jl
Y2VpdmVkKSB8fCBtX2NhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFidWYg
fHwgIWxlbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGxvYWRGaWxlIEFQSSBzZXRz
IHRoZSBvdmVycmlkZSBjb250ZW50IHR5cGUsCi0gICAgLy8gdGhpcyB3aWxsIGFsd2F5cyBiZSB1
c2VkIGFzIHRoZSBjb250ZW50IHR5cGUgYW5kIHNob3VsZCBub3QgYmUgb3ZlcnJpZGRlbi4KLSAg
ICBpZiAoIW1fZGF0YVJlY2VpdmVkICYmICFtX2lzT3ZlcnJpZGVDb250ZW50VHlwZSkgewotICAg
ICAgICBib29sIHNob3VsZFNuaWZmID0gdHJ1ZTsKLQotICAgICAgICAvLyBEb24ndCBib3RoZXIg
c25pZmZpbmcgdGhlIGNvbnRlbnQgdHlwZSBvZiBhIGZpbGUgdGhhdAotICAgICAgICAvLyBpcyBv
biBhIGZpbGUgc3lzdGVtIGlmIGl0IGhhcyBhIE1JTUUgbWFwcGFibGUgZmlsZSBleHRlbnNpb24u
Ci0gICAgICAgIC8vIFRoZSBmaWxlIGV4dGVuc2lvbiBpcyBsaWtlbHkgdG8gYmUgY29ycmVjdC4K
LSAgICAgICAgaWYgKG1faXNGaWxlKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsRmlsZW5hbWUg
PSBtX3Jlc3BvbnNlLnVybCgpLmxhc3RQYXRoQ29tcG9uZW50KCk7Ci0gICAgICAgICAgICBzaXpl
X3QgcG9zID0gdXJsRmlsZW5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKLSAgICAgICAgICAgIGlmIChw
b3MgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gdXJs
RmlsZW5hbWUuc3Vic3RyaW5nKHBvcyArIDEpOwotICAgICAgICAgICAgICAgIFN0cmluZyBtaW1l
VHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lv
bik7Ci0gICAgICAgICAgICAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgICAgIHNob3VsZFNuaWZmID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoc2hvdWxkU25pZmYpIHsKLSAgICAgICAgICAgIE1JTUVTbmlmZmVyIHNu
aWZmZXIgPSBNSU1FU25pZmZlcihtX2NvbnRlbnRUeXBlLmxhdGluMSgpLmRhdGEoKSwgTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGUobV9jb250ZW50VHlw
ZSkpOwotICAgICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIHR5cGUgPSBzbmlmZmVyLnNuaWZmKGJ1
Ziwgc3RkOjptaW4obGVuLCBzbmlmZmVyLmRhdGFTaXplKCkpKSkKLSAgICAgICAgICAgICAgICBt
X3NuaWZmZWRNaW1lVHlwZSA9IFN0cmluZyh0eXBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IG1fZGF0YVJlY2VpdmVkID0gdHJ1ZTsKLQotICAgIC8vIFByb3RlY3QgYWdhaW5zdCByZWVudHJh
bmN5LgotICAgIHVwZGF0ZURlZmVyTG9hZGluZ0NvdW50KDEpOwotCi0gICAgaWYgKHNob3VsZFNl
bmRDbGllbnREYXRhKCkpIHsKLSAgICAgICAgc2VuZFJlc3BvbnNlSWZOZWVkZWQoKTsKLSAgICAg
ICAgc2VuZE11bHRpcGFydFJlc3BvbnNlSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKGlzQ2xpZW50
QXZhaWxhYmxlKCkpIHsKLSAgICAgICAgICAgIFJlY3Vyc2lvbkd1YXJkIGd1YXJkKG1fY2FsbGlu
Z0NsaWVudCk7Ci0gICAgICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVEYXRh
KG1faGFuZGxlLmdldCgpLCBidWYsIGxlbiwgbGVuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHVwZGF0ZURlZmVyTG9hZGluZ0NvdW50KC0xKTsKLX0KLQotdm9pZCBOZXR3b3JrSm9iOjpub3Rp
ZnlEYXRhU2VudCh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxv
bmcgdG90YWxCeXRlc1RvQmVTZW50KQotewotICAgIGlmIChzaG91bGREZWZlckxvYWRpbmcoKSkK
LSAgICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJEYXRhU2VudChieXRlc1NlbnQsIHRvdGFsQnl0
ZXNUb0JlU2VudCk7Ci0gICAgZWxzZQotICAgICAgICBoYW5kbGVOb3RpZnlEYXRhU2VudChieXRl
c1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6aGFuZGxl
Tm90aWZ5RGF0YVNlbnQodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKLXsKLSAgICBpZiAobV9jYW5jZWxsZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFByb3RlY3QgYWdhaW5zdCByZWVudHJhbmN5LgotICAgIHVw
ZGF0ZURlZmVyTG9hZGluZ0NvdW50KDEpOwotCi0gICAgaWYgKGlzQ2xpZW50QXZhaWxhYmxlKCkp
IHsKLSAgICAgICAgUmVjdXJzaW9uR3VhcmQgZ3VhcmQobV9jYWxsaW5nQ2xpZW50KTsKLSAgICAg
ICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRTZW5kRGF0YShtX2hhbmRsZS5nZXQoKSwgYnl0ZXNT
ZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOwotICAgIH0KLQotICAgIHVwZGF0ZURlZmVyTG9hZGlu
Z0NvdW50KC0xKTsKLX0KLQotdm9pZCBOZXR3b3JrSm9iOjpub3RpZnlDbG9zZShpbnQgc3RhdHVz
KQotewotICAgIGlmIChzaG91bGREZWZlckxvYWRpbmcoKSkKLSAgICAgICAgbV9kZWZlcnJlZERh
dGEuZGVmZXJDbG9zZShzdGF0dXMpOwotICAgIGVsc2UKLSAgICAgICAgaGFuZGxlTm90aWZ5Q2xv
c2Uoc3RhdHVzKTsKLX0KLQotdm9pZCBOZXR3b3JrSm9iOjpoYW5kbGVOb3RpZnlDbG9zZShpbnQg
c3RhdHVzKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBtX2lzUnVubmluZyA9IGZhbHNlOwotI2Vu
ZGlmCi0KLSAgICBpZiAoIW1fY2FuY2VsbGVkKSB7Ci0gICAgICAgIGlmICghbV9zdGF0dXNSZWNl
aXZlZCkgewotICAgICAgICAgICAgLy8gQ29ubmVjdGlvbiBmYWlsZWQgYmVmb3JlIHNlbmRpbmcg
bm90aWZ5U3RhdHVzUmVjZWl2ZWQ6IHVzZSBnZW5lcmljIE5ldHdvcmtFcnJvci4KLSAgICAgICAg
ICAgIG5vdGlmeVN0YXR1c1JlY2VpdmVkKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJTdHJl
YW06OlN0YXR1c05ldHdvcmtFcnJvciwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZW1w
dHlTdHJpbmcoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2hvdWxkUmVsZWFzZUNsaWVu
dFJlc291cmNlKCkpIHsKLSAgICAgICAgICAgIGlmIChpc1JlZGlyZWN0KG1fZXh0ZW5kZWRTdGF0
dXNDb2RlKSAmJiAobV9yZWRpcmVjdENvdW50ID49IHNfcmVkaXJlY3RNYXhpbXVtKSkKLSAgICAg
ICAgICAgICAgICBtX2V4dGVuZGVkU3RhdHVzQ29kZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
aWx0ZXJTdHJlYW06OlN0YXR1c1Rvb01hbnlSZWRpcmVjdHM7Ci0KLSAgICAgICAgICAgIHNlbmRS
ZXNwb25zZUlmTmVlZGVkKCk7Ci0KLSAgICAgICAgICAgIGlmIChpc0NsaWVudEF2YWlsYWJsZSgp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRXJyb3Ioc3RhdHVzKSkKLSAgICAgICAgICAgICAg
ICAgICAgbV9leHRlbmRlZFN0YXR1c0NvZGUgPSBzdGF0dXM7Ci0gICAgICAgICAgICAgICAgUmVj
dXJzaW9uR3VhcmQgZ3VhcmQobV9jYWxsaW5nQ2xpZW50KTsKLSAgICAgICAgICAgICAgICBpZiAo
c2hvdWxkTm90aWZ5Q2xpZW50RmFpbGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5n
IGRvbWFpbiA9IG1fZXh0ZW5kZWRTdGF0dXNDb2RlIDwgMCA/IFJlc291cmNlRXJyb3I6OnBsYXRm
b3JtRXJyb3JEb21haW4gOiBSZXNvdXJjZUVycm9yOjpodHRwRXJyb3JEb21haW47Ci0gICAgICAg
ICAgICAgICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3IoZG9tYWluLCBtX2V4dGVuZGVkU3RhdHVz
Q29kZSwgbV9yZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgbV9yZXNwb25zZS5odHRwU3RhdHVzVGV4
dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKG1f
aGFuZGxlLmdldCgpLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZS5n
ZXQoKSwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBXaG9l
dmVyIGNhbGxlZCBub3RpZnlDbG9zZSBzdGlsbCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBqb2Is
IHNvCi0gICAgLy8gc2NoZWR1bGUgdGhlIGRlbGV0aW9uIHdpdGggYSB0aW1lci4KLSAgICBtX2Rl
bGV0ZUpvYlRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLQotICAgIC8vIERldGFjaCBmcm9tIHRoZSBS
ZXNvdXJjZUhhbmRsZSBpbiBhbnkgY2FzZS4KLSAgICBtX2hhbmRsZSA9IDA7Ci0gICAgbV9tdWx0
aXBhcnRSZXNwb25zZSA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgTmV0d29ya0pvYjo6c2hvdWxkUmVs
ZWFzZUNsaWVudFJlc291cmNlKCkKLXsKLSAgICBpZiAoKG1fbmVlZHNSZXRyeUFzRlRQRGlyZWN0
b3J5ICYmIHJldHJ5QXNGVFBEaXJlY3RvcnkoKSkgfHwgKGlzUmVkaXJlY3QobV9leHRlbmRlZFN0
YXR1c0NvZGUpICYmIGhhbmRsZVJlZGlyZWN0KCkpIHx8IG1fbmV3Sm9iV2l0aENyZWRlbnRpYWxz
U3RhcnRlZCB8fCBtX2lzQXV0aGVudGljYXRpb25DaGFsbGVuZ2luZykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5ldHdvcmtKb2I6OnNob3VsZE5v
dGlmeUNsaWVudEZhaWxlZCgpIGNvbnN0Ci17Ci0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qg
PSBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCk7Ci0gICAgaWYgKHJlcXVlc3QuZm9yY2VEb3dubG9h
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZXh0ZW5kZWRTdGF0dXNDb2Rl
IDwgMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGlzRXJyb3IobV9leHRlbmRlZFN0
YXR1c0NvZGUpICYmICFtX2RhdGFSZWNlaXZlZCAmJiAhbV9pc0hlYWRNZXRob2QgJiYgcmVxdWVz
dC50YXJnZXRUeXBlKCkgIT0gUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1hIUikKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTmV0d29ya0pvYjo6
cmV0cnlBc0ZUUERpcmVjdG9yeSgpCi17Ci0gICAgbV9uZWVkc1JldHJ5QXNGVFBEaXJlY3Rvcnkg
PSBmYWxzZTsKLQotICAgIEFTU0VSVChtX2hhbmRsZSk7Ci0gICAgUmVzb3VyY2VSZXF1ZXN0IG5l
d1JlcXVlc3QgPSBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCk7Ci0gICAgVVJMIHVybCA9IG5ld1Jl
cXVlc3QudXJsKCk7Ci0gICAgdXJsLnNldFBhdGgodXJsLnBhdGgoKSArICIvIik7Ci0gICAgbmV3
UmVxdWVzdC5zZXRVUkwodXJsKTsKLSAgICBuZXdSZXF1ZXN0LnNldE11c3RIYW5kbGVJbnRlcm5h
bGx5KHRydWUpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBVSS4KLSAgICBoYW5kbGVOb3RpZnlIZWFk
ZXJSZWNlaXZlZCgiTG9jYXRpb24iLCB1cmwuc3RyaW5nKCkpOwotCi0gICAgcmV0dXJuIHN0YXJ0
TmV3Sm9iV2l0aFJlcXVlc3QobmV3UmVxdWVzdCk7Ci19Ci0KLWJvb2wgTmV0d29ya0pvYjo6c3Rh
cnROZXdKb2JXaXRoUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGJvb2wgaW5j
cmVhc2VSZWRpcmVjdENvdW50LCBib29sIHJlcmVhZENvb2tpZXMpCi17Ci0gICAgLy8gbV9mcmFt
ZSBjYW4gYmUgbnVsbCBpZiB0aGlzIGlzIGEgUGluZ0xvYWRlciBqb2IgKFNlZSBOZXR3b3JrSm9i
Ojppbml0aWFsaXplKS4KLSAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgc3RhcnQgbmV3IHJl
cXVlc3QuCi0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoaXNDbGllbnRBdmFpbGFibGUoKSkgewotICAgICAgICBSZWN1cnNpb25HdWFyZCBndWFyZCht
X2NhbGxpbmdDbGllbnQpOwotICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPndpbGxTZW5kUmVx
dWVzdChtX2hhbmRsZS5nZXQoKSwgbmV3UmVxdWVzdCwgbV9yZXNwb25zZSk7Ci0KLSAgICAgICAg
Ly8gbV9jYW5jZWxsZWQgY2FuIGJlY29tZSB0cnVlIGlmIHRoZSB1cmwgZmFpbHMgdGhlIHBvbGlj
eSBjaGVjay4KLSAgICAgICAgLy8gbmV3UmVxdWVzdCBjYW4gYmUgY2xlYXJlZCB3aGVuIHRoZSBy
ZWRpcmVjdCBpcyByZWplY3RlZC4KLSAgICAgICAgaWYgKG1fY2FuY2VsbGVkIHx8IG5ld1JlcXVl
c3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFBhc3MgdGhlIG93bmVyc2hpcCBvZiB0aGUgUmVzb3VyY2VIYW5kbGUgdG8gdGhlIG5ldyBOZXR3
b3JrSm9iLgotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gbV9oYW5kbGU7Ci0g
ICAgY2FuY2VsSm9iKCk7Ci0KLSAgICBpbnQgc3RhdHVzID0gTmV0d29ya01hbmFnZXI6Omluc3Rh
bmNlKCktPnN0YXJ0Sm9iKG1fcGxheWVySWQsCi0gICAgICAgIG1fcGFnZUdyb3VwTmFtZSwKLSAg
ICAgICAgaGFuZGxlLAotICAgICAgICBuZXdSZXF1ZXN0LAotICAgICAgICBtX3N0cmVhbUZhY3Rv
cnksCi0gICAgICAgIG1fZnJhbWUsCi0gICAgICAgIG1fZGVmZXJMb2FkaW5nQ291bnQsCi0gICAg
ICAgIGluY3JlYXNlUmVkaXJlY3RDb3VudCA/IG1fcmVkaXJlY3RDb3VudCArIDEgOiBtX3JlZGly
ZWN0Q291bnQsCi0gICAgICAgIHJlcmVhZENvb2tpZXMpOwotICAgIHJldHVybiBzdGF0dXMgPT0g
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbTo6U3RhdHVzU3VjY2VzczsKLX0KLQot
Ym9vbCBOZXR3b3JrSm9iOjpoYW5kbGVSZWRpcmVjdCgpCi17Ci0gICAgQVNTRVJUKG1faGFuZGxl
KTsKLSAgICBpZiAoIW1faGFuZGxlIHx8IG1fcmVkaXJlY3RDb3VudCA+PSBzX3JlZGlyZWN0TWF4
aW11bSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIGxvY2F0aW9uID0gbV9y
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkxvY2F0aW9uIik7Ci0gICAgaWYgKGxvY2F0aW9uLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBVUkwgbmV3VVJMKG1fcmVzcG9u
c2UudXJsKCksIGxvY2F0aW9uKTsKLSAgICBpZiAoIW5ld1VSTC5pc1ZhbGlkKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChuZXdVUkwucHJvdG9jb2xJc0RhdGEoKSkgewotICAg
ICAgICBtX2V4dGVuZGVkU3RhdHVzQ29kZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJT
dHJlYW06OlN0YXR1c0ludmFsaWRSZWRpcmVjdFRvRGF0YTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1ZXN0ID0gbV9oYW5kbGUtPmZp
cnN0UmVxdWVzdCgpOwotICAgIG5ld1JlcXVlc3Quc2V0VVJMKG5ld1VSTCk7Ci0gICAgbmV3UmVx
dWVzdC5zZXRNdXN0SGFuZGxlSW50ZXJuYWxseSh0cnVlKTsKLQotICAgIFN0cmluZyBtZXRob2Qg
PSBuZXdSZXF1ZXN0Lmh0dHBNZXRob2QoKS51cHBlcigpOwotICAgIGlmIChtZXRob2QgIT0gIkdF
VCIgJiYgbWV0aG9kICE9ICJIRUFEIikgewotICAgICAgICBuZXdSZXF1ZXN0LnNldEhUVFBNZXRo
b2QoIkdFVCIpOwotICAgICAgICBuZXdSZXF1ZXN0LnNldEhUVFBCb2R5KDApOwotICAgICAgICBu
ZXdSZXF1ZXN0LmNsZWFySFRUUENvbnRlbnRMZW5ndGgoKTsKLSAgICAgICAgbmV3UmVxdWVzdC5j
bGVhckhUVFBDb250ZW50VHlwZSgpOwotICAgIH0KLQotICAgIC8vIElmIHRoaXMgcmVxdWVzdCBp
cyBjaGFsbGVuZ2VkLCBzdG9yZSB0aGUgY3JlZGVudGlhbHMgbm93IChpZiB0aGV5IGFyZSBudWxs
IHRoaXMgd2lsbCBkbyBub3RoaW5nKQotICAgIHN0b3JlQ3JlZGVudGlhbHMoKTsKLQotICAgIC8v
IERvIG5vdCBzZW5kIGV4aXN0aW5nIGNyZWRlbnRpYWxzIHdpdGggdGhlIG5ldyByZXF1ZXN0Lgot
ICAgIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UubnVsbGlm
eSgpOwotICAgIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Byb3h5V2ViQ2hhbGxlbmdlLm51
bGxpZnkoKTsKLSAgICBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9ob3N0V2ViQ2hhbGxlbmdl
Lm51bGxpZnkoKTsKLQotICAgIHJldHVybiBzdGFydE5ld0pvYldpdGhSZXF1ZXN0KG5ld1JlcXVl
c3QsIC8qIGluY3JlYXNlUmVkaXJlY3RDb3VudCAqLyB0cnVlLCAvKiByZXJlYWRDb29raWVzICov
IHRydWUpOwotfQotCi12b2lkIE5ldHdvcmtKb2I6OnNlbmRSZXNwb25zZUlmTmVlZGVkKCkKLXsK
LSAgICBpZiAobV9yZXNwb25zZVNlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcmVzcG9u
c2VTZW50ID0gdHJ1ZTsKLQotICAgIGlmIChzaG91bGROb3RpZnlDbGllbnRGYWlsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIHVybEZpbGVuYW1lOwotICAgIGlmICghbV9yZXNw
b25zZS51cmwoKS5wcm90b2NvbElzRGF0YSgpKQotICAgICAgICB1cmxGaWxlbmFtZSA9IG1fcmVz
cG9uc2UudXJsKCkubGFzdFBhdGhDb21wb25lbnQoKTsKLQotICAgIC8vIEdldCB0aGUgTUlNRSB0
eXBlIHRoYXQgd2FzIHNldCBieSB0aGUgY29udGVudCBzbmlmZmVyCi0gICAgLy8gaWYgdGhlcmUn
cyBubyBjdXN0b20gc25pZmZlciBoZWFkZXIsIHRyeSB0byBzZXQgaXQgZnJvbSB0aGUgQ29udGVu
dC1UeXBlIGhlYWRlcgotICAgIC8vIGlmIHRoaXMgZmFpbHMsIGd1ZXNzIGl0IGZyb20gZXh0ZW5z
aW9uLgotICAgIFN0cmluZyBtaW1lVHlwZSA9IG1fc25pZmZlZE1pbWVUeXBlOwotICAgIGlmICht
X2lzRlRQICYmIG1faXNGVFBEaXIpCi0gICAgICAgIG1pbWVUeXBlID0gImFwcGxpY2F0aW9uL3gt
ZnRwLWRpcmVjdG9yeSI7Ci0gICAgZWxzZSBpZiAobWltZVR5cGUuaXNOdWxsKCkpCi0gICAgICAg
IG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtX2NvbnRlbnRUeXBlKTsK
LSAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCi0gICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVS
ZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKHVybEZpbGVuYW1lKTsKLSAgICBpZiAoIW1fZGF0
YVJlY2VpdmVkICYmIG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKSB7Ci0g
ICAgICAgIC8vIEZvciBlbXB0eSBjb250ZW50LCBpZiBjYW4ndCBndWVzcyBpdHMgbWltZXR5cGUg
ZnJvbSBmaWxlbmFtZSwgd2UgbWFudWFsbHkKLSAgICAgICAgLy8gc2V0IHRoZSBtaW1ldHlwZSB0
byAidGV4dC9wbGFpbiIgaW4gY2FzZSBpdCBnb2VzIHRvIGRvd25sb2FkLgotICAgICAgICBtaW1l
VHlwZSA9ICJ0ZXh0L3BsYWluIjsKLSAgICB9Ci0gICAgbV9yZXNwb25zZS5zZXRNaW1lVHlwZSht
aW1lVHlwZSk7Ci0KLSAgICAvLyBTZXQgZW5jb2RpbmcgZnJvbSBDb250ZW50LVR5cGUgaGVhZGVy
LgotICAgIG1fcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21N
ZWRpYVR5cGUobV9jb250ZW50VHlwZSkpOwotCi0gICAgLy8gU2V0IGNvbnRlbnQgbGVuZ3RoIGZy
b20gaGVhZGVyLgotICAgIFN0cmluZyBjb250ZW50TGVuZ3RoID0gbV9yZXNwb25zZS5odHRwSGVh
ZGVyRmllbGQoIkNvbnRlbnQtTGVuZ3RoIik7Ci0gICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVs
bCgpKQotICAgICAgICBtX3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChjb250ZW50
TGVuZ3RoLnRvSW50NjQoKSk7Ci0KLSAgICBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUgPSBmaWxl
bmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW9uKG1fY29udGVudERpc3Bvc2l0aW9uKTsKLSAg
ICBpZiAoc3VnZ2VzdGVkRmlsZW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIENoZWNrIGFu
ZCBzZWUgaWYgYW4gZXh0ZW5zaW9uIGFscmVhZHkgZXhpc3RzLgotICAgICAgICBTdHJpbmcgbWlt
ZUV4dGVuc2lvbiA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1J
TUVUeXBlKG1pbWVUeXBlKTsKLSAgICAgICAgaWYgKHVybEZpbGVuYW1lLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgaWYgKG1pbWVFeHRlbnNpb24uaXNFbXB0eSgpKSAvLyBObyBleHRlbnNpb24g
Zm91bmQgZm9yIHRoZSBtaW1lVHlwZS4KLSAgICAgICAgICAgICAgICBzdWdnZXN0ZWRGaWxlbmFt
ZSA9IFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9jYWxpemVSZXNvdXJjZTo6Z2V0U3Ry
aW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGSUxFTkFNRV9VTlRJVExFRCkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHN1Z2dlc3RlZEZpbGVuYW1lID0gU3RyaW5nKEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpMb2NhbGl6ZVJlc291cmNlOjpnZXRTdHJpbmcoQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkZJTEVOQU1FX1VOVElUTEVEKSkgKyAiLiIgKyBtaW1lRXh0ZW5zaW9uOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHVybEZpbGVuYW1lLnJldmVyc2VGaW5kKCcu
JykgPT0gbm90Rm91bmQgJiYgIW1pbWVFeHRlbnNpb24uaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgIHN1Z2dlc3RlZEZpbGVuYW1lID0gdXJsRmlsZW5hbWUgKyAnLicgKyBtaW1lRXh0ZW5zaW9u
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN1Z2dlc3RlZEZpbGVuYW1lID0g
dXJsRmlsZW5hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9yZXNwb25zZS5zZXRTdWdnZXN0
ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0KLSAgICBpZiAoaXNDbGllbnRBdmFpbGFi
bGUoKSkgewotICAgICAgICBSZWN1cnNpb25HdWFyZCBndWFyZChtX2NhbGxpbmdDbGllbnQpOwot
ICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZShtX2hhbmRsZS5n
ZXQoKSwgbV9yZXNwb25zZSk7Ci0gICAgfQotfQotCi12b2lkIE5ldHdvcmtKb2I6OnNlbmRNdWx0
aXBhcnRSZXNwb25zZUlmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9tdWx0aXBhcnRSZXNwb25zZSAm
JiBpc0NsaWVudEF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlk
UmVjZWl2ZVJlc3BvbnNlKG1faGFuZGxlLmdldCgpLCAqbV9tdWx0aXBhcnRSZXNwb25zZSk7Ci0g
ICAgICAgIG1fbXVsdGlwYXJ0UmVzcG9uc2UgPSBudWxscHRyOwotICAgIH0KLX0KLQotYm9vbCBO
ZXR3b3JrSm9iOjpoYW5kbGVGVFBIZWFkZXIoY29uc3QgU3RyaW5nJiBoZWFkZXIpCi17Ci0gICAg
c2l6ZV90IHNwYWNlUG9zID0gaGVhZGVyLmZpbmQoJyAnKTsKLSAgICBpZiAoc3BhY2VQb3MgPT0g
bm90Rm91bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgc3RhdHVzQ29kZSA9
IGhlYWRlci5sZWZ0KHNwYWNlUG9zKTsKLSAgICBzd2l0Y2ggKHN0YXR1c0NvZGUudG9JbnQoKSkg
ewotICAgIGNhc2UgMjEzOgotICAgICAgICBtX2lzRlRQRGlyID0gZmFsc2U7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgNTMwOgotICAgICAgICBwdXJnZUNyZWRlbnRpYWxzKCk7Ci0gICAgICAg
IGlmIChtX3Jlc3BvbnNlLnVybCgpLnByb3RvY29sSXMoImZ0cHMiKSkKLSAgICAgICAgICAgIHNl
bmRSZXF1ZXN0V2l0aENyZWRlbnRpYWxzKFByb3RlY3Rpb25TcGFjZVNlcnZlckZUUFMsIFByb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lRGVmYXVsdCwgImZ0cCIpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzZW5kUmVxdWVzdFdpdGhDcmVkZW50aWFscyhQcm90ZWN0aW9uU3Bh
Y2VTZXJ2ZXJGVFAsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lRGVmYXVsdCwg
ImZ0cCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDIzMDoKLSAgICAgICAgc3RvcmVDcmVk
ZW50aWFscygpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDU1MDoKLSAgICAgICAgLy8gVGhl
IHVzZXIgbWlnaHQgaGF2ZSBlbnRlcmVkIGFuIFVSTCB3aGljaCBwb2ludCB0byBhIGRpcmVjdG9y
eSBidXQgZm9yZ290IHR5cGUgJy8nLAotICAgICAgICAvLyBlLmcuLCBmdHA6Ly9mdHAudHJvbGx0
ZWNoLmNvbS9xdC9zb3VyY2Ugd2hlcmUgJ3NvdXJjZScgaXMgYSBkaXJlY3RvcnkuIFdlIG5lZWQg
dG8KLSAgICAgICAgLy8gYWRkZWQgJy8nIGFuZCB0cnkgYWdhaW4uCi0gICAgICAgIGlmIChtX2hh
bmRsZSAmJiAhbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnBhdGgoKS5lbmRzV2l0aCgi
LyIpKQotICAgICAgICAgICAgbV9uZWVkc1JldHJ5QXNGVFBEaXJlY3RvcnkgPSB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotTmV0d29ya0pvYjo6
U2VuZFJlcXVlc3RSZXN1bHQgTmV0d29ya0pvYjo6c2VuZFJlcXVlc3RXaXRoQ3JlZGVudGlhbHMo
UHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSB0eXBlLCBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNh
dGlvblNjaGVtZSBzY2hlbWUsIGNvbnN0IFN0cmluZyYgcmVhbG0sIGJvb2wgcmVxdWlyZUNyZWRl
bnRpYWxzKQotewotICAgIEFTU0VSVChtX2hhbmRsZSk7Ci0gICAgaWYgKCFtX2hhbmRsZSkKLSAg
ICAgICAgcmV0dXJuIFNlbmRSZXF1ZXN0Q2FuY2VsbGVkOwotCi0gICAgVVJMIG5ld1VSTCA9IG1f
cmVzcG9uc2UudXJsKCk7Ci0gICAgaWYgKCFuZXdVUkwuaXNWYWxpZCgpKQotICAgICAgICByZXR1
cm4gU2VuZFJlcXVlc3RDYW5jZWxsZWQ7Ci0KLSAgICAvLyBJTVBPUlRBTlQ6IGlmIGEgbmV3IHNv
dXJjZSBvZiBjcmVkZW50aWFscyBpcyBhZGRlZCB0byB0aGlzIG1ldGhvZCwgYmUgc3VyZSB0byBo
YW5kbGUgaXQgaW4KLSAgICAvLyBwdXJnZUNyZWRlbnRpYWxzIGFzIHdlbGwhCi0KLSAgICBTdHJp
bmcgaG9zdDsKLSAgICBpbnQgcG9ydDsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6UHJveHlJ
bmZvIHByb3h5SW5mbzsKLSAgICBpZiAodHlwZSA9PSBQcm90ZWN0aW9uU3BhY2VQcm94eUhUVFAg
fHwgdHlwZSA9PSBQcm90ZWN0aW9uU3BhY2VQcm94eUhUVFBTKSB7Ci0gICAgICAgIHByb3h5SW5m
byA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+cHJveHlJbmZv
KG5ld1VSTC5zdHJpbmcoKSk7Ci0gICAgICAgIEFTU0VSVCghcHJveHlJbmZvLmFkZHJlc3MuZW1w
dHkoKSk7Ci0gICAgICAgIGlmIChwcm94eUluZm8uYWRkcmVzcy5lbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIHJlc3BvbnNlIHVybCBpZiB0aGVyZSdzIG5vIHByb3h5
Ci0gICAgICAgICAgICAvLyBGSVhNRTogaXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gaGFuZGxlIHRo
aXM/Ci0gICAgICAgICAgICBob3N0ID0gbV9yZXNwb25zZS51cmwoKS5ob3N0KCk7Ci0gICAgICAg
ICAgICBwb3J0ID0gbV9yZXNwb25zZS51cmwoKS5wb3J0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBwcm94eUluZm8gcmV0dXJucyBob3N0OnBvcnQsIHdpdGhvdXQgYSBwcm90
b2NvbC4gVVJMIGNhbid0IHBhcnNlIHRoaXMsIHNvIHN0aWNrIGh0dHAKLSAgICAgICAgICAgIC8v
IG9uIHRoZSBmcm9udC4KLSAgICAgICAgICAgIC8vIChXZSBjb3VsZCBzcGxpdCBpbnRvIGhvc3Qg
YW5kIHBvcnQgYnkgaGFuZCwgYnV0IHRoYXQgZ2V0cyBoYXJkIHRvIHBhcnNlIHdpdGggSVB2NiB1
cmxzLAotICAgICAgICAgICAgLy8gc28gYmV0dGVyIHRvIHJldXNlIFVSTCdzIHBhcnNpbmcuKQot
ICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBwcm94eUFkZHJlc3M7Ci0gICAgICAgICAgICBpZiAo
dHlwZSA9PSBQcm90ZWN0aW9uU3BhY2VQcm94eUhUVFApCi0gICAgICAgICAgICAgICAgcHJveHlB
ZGRyZXNzLmFwcGVuZCgiaHR0cDovLyIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHByb3h5QWRkcmVzcy5hcHBlbmQoImh0dHBzOi8vIik7Ci0gICAgICAgICAgICBwcm94eUFk
ZHJlc3MuYXBwZW5kKHByb3h5SW5mby5hZGRyZXNzKTsKLQotICAgICAgICAgICAgVVJMIHByb3h5
VVJMKFVSTCgpLCBwcm94eUFkZHJlc3MudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBob3N0ID0g
cHJveHlVUkwuaG9zdCgpOwotICAgICAgICAgICAgcG9ydCA9IHByb3h5VVJMLnBvcnQoKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGhvc3QgPSBtX3Jlc3BvbnNlLnVybCgpLmhv
c3QoKTsKLSAgICAgICAgcG9ydCA9IG1fcmVzcG9uc2UudXJsKCkucG9ydCgpOwotICAgIH0KLQot
ICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2UoaG9zdCwgcG9ydCwgdHlwZSwgcmVh
bG0sIHNjaGVtZSk7Ci0KLSAgICAvLyBXZSd2ZSBnb3QgdGhlIHNjaGVtZSBhbmQgcmVhbG0uIE5v
dyB3ZSBuZWVkIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLgotICAgIENyZWRlbnRpYWwgY3JlZGVu
dGlhbDsKLQotICAgIGlmICghcmVxdWlyZUNyZWRlbnRpYWxzKSB7Ci0gICAgICAgIC8vIERvbid0
IG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgY3JlZGVudGlhbHMgd2l0aCB0aGUgZW1wdHkgY3JlZGVu
dGlhbAotICAgICAgICB1cGRhdGVDdXJyZW50V2ViQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCwgMCwgbV9yZXNwb25zZSwgUmVzb3Vy
Y2VFcnJvcigpKSwgLyogYWxsb3dPdmVyd3JpdGUgKi8gZmFsc2UpOwotICAgIH0gZWxzZSBpZiAo
IShjcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChwcm90ZWN0aW9uU3BhY2UpKS5p
c0VtcHR5KCkKLSNpZiBFTkFCTEUoQkxBQ0tCRVJSWV9DUkVERU5USUFMX1BFUlNJU1QpCi0gICAg
ICAgICAgICB8fCAhKGNyZWRlbnRpYWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0RnJvbVBlcnNp
c3RlbnRTdG9yYWdlKHByb3RlY3Rpb25TcGFjZSkpLmlzRW1wdHkoKQotI2VuZGlmCi0gICAgICAg
ICAgICApIHsKLSAgICAgICAgLy8gRmlyc3Qgc2VhcmNoIHRoZSBDcmVkZW50aWFsU3RvcmFnZSBh
bmQgUGVyc2lzdGVudCBDcmVkZW50aWFsIFN0b3JhZ2UKLSAgICAgICAgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UgY2hhbGxlbmdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCwgMCwgbV9yZXNw
b25zZSwgUmVzb3VyY2VFcnJvcigpKTsKLSAgICAgICAgY2hhbGxlbmdlLnNldFN0b3JlZCh0cnVl
KTsKLSAgICAgICAgdXBkYXRlQ3VycmVudFdlYkNoYWxsZW5nZShjaGFsbGVuZ2UpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVChjcmVkZW50aWFsLmlzRW1wdHkoKSk7Ci0gICAgICAgIGlm
IChtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudGFyZ2V0VHlwZSgpID09IFJlc291cmNlUmVxdWVz
dDo6VGFyZ2V0SXNGYXZpY29uKSB7Ci0gICAgICAgICAgICAvLyBUaGUgZmF2aWNvbiBsb2FkaW5n
IGlzIHRyaWdnZXJyZWQgYWZ0ZXIgdGhlIG1haW4gcmVzb3VyY2UgaGFzIGJlZW4gbG9hZGVkCi0g
ICAgICAgICAgICAvLyBhbmQgcGFyc2VkLCBzbyBpZiB3ZSBjYW5jZWwgdGhlIGF1dGhlbnRpY2F0
aW9uIGNoYWxsZW5nZSB3aGVuIGxvYWRpbmcgdGhlIG1haW4KLSAgICAgICAgICAgIC8vIHJlc291
cmNlLCB3ZSBzaG91bGQgYWxzbyBjYW5jZWwgbG9hZGluZyB0aGUgZmF2aWNvbiB3aGVuIGl0IHN0
YXJ0cyB0bwotICAgICAgICAgICAgLy8gbG9hZC4gSWYgbm90IHdlIHdpbGwgcmVjZWl2ZSBhbm90
aGVyIGNoYWxsZW5nZSB3aGljaCBtYXkgY29uZnVzZSB0aGUgdXNlci4KLSAgICAgICAgICAgIHJl
dHVybiBTZW5kUmVxdWVzdENhbmNlbGxlZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENyZWRl
bnRpYWxTdG9yZSBpcyBlbXB0eS4gQXNrIHRoZSB1c2VyIHZpYSBkaWFsb2cuCi0gICAgICAgIFN0
cmluZyB1c2VybmFtZTsKLSAgICAgICAgU3RyaW5nIHBhc3N3b3JkOwotCi0gICAgICAgIGlmICgh
cHJveHlJbmZvLmFkZHJlc3MuZW1wdHkoKSkgewotICAgICAgICAgICAgdXNlcm5hbWUgPSBwcm94
eUluZm8udXNlcm5hbWU7Ci0gICAgICAgICAgICBwYXNzd29yZCA9IHByb3h5SW5mby5wYXNzd29y
ZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVzZXJuYW1lID0gbV9oYW5kbGUtPmdl
dEludGVybmFsKCktPm1fdXNlcjsKLSAgICAgICAgICAgIHBhc3N3b3JkID0gbV9oYW5kbGUtPmdl
dEludGVybmFsKCktPm1fcGFzczsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEJlZm9yZSBhc2tp
bmcgdGhlIHVzZXIgZm9yIGNyZWRlbnRpYWxzLCB3ZSBjaGVjayBpZiB0aGUgVVJMIGNvbnRhaW5z
IHRoYXQuCi0gICAgICAgIGlmICh1c2VybmFtZS5pc0VtcHR5KCkgJiYgcGFzc3dvcmQuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBpZiAobV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnRhcmdldFR5
cGUoKSAhPSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzTWFpbkZyYW1lICYmIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+aXNDaHJvbWVQcm9jZXNzKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFNlbmRSZXF1ZXN0Q2FuY2VsbGVkOwotCi0gICAgICAgICAgICBp
ZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
U2VuZFJlcXVlc3RDYW5jZWxsZWQ7Ci0KLSAgICAgICAgICAgIC8vIERPIG92ZXJ3cml0ZSBhbnkg
ZXhpc3RpbmcgY3JlZGVudGlhbHMgd2l0aCB0aGUgZW1wdHkgY3JlZGVudGlhbAotICAgICAgICAg
ICAgdXBkYXRlQ3VycmVudFdlYkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShwcm90
ZWN0aW9uU3BhY2UsIGNyZWRlbnRpYWwsIDAsIG1fcmVzcG9uc2UsIFJlc291cmNlRXJyb3IoKSkp
OwotCi0gICAgICAgICAgICBtX2lzQXV0aGVudGljYXRpb25DaGFsbGVuZ2luZyA9IHRydWU7Ci0g
ICAgICAgICAgICB1cGRhdGVEZWZlckxvYWRpbmdDb3VudCgxKTsKLQotICAgICAgICAgICAgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyOjppbnN0YW5jZSgpLT5hdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShuZXdVUkwsIHByb3RlY3Rpb25TcGFjZSwKLSAgICAgICAgICAgICAgICBDcmVkZW50
aWFsKCksIHRoaXMsIG1fZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkucGxhdGZvcm1Q
YWdlQ2xpZW50KCkpOwotICAgICAgICAgICAgcmV0dXJuIFNlbmRSZXF1ZXN0V2FpdGluZzsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNyZWRlbnRpYWwgPSBDcmVkZW50aWFsKHVzZXJuYW1lLCBwYXNz
d29yZCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbik7Ci0KLSAgICAgICAgdXBkYXRl
Q3VycmVudFdlYkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShwcm90ZWN0aW9uU3Bh
Y2UsIGNyZWRlbnRpYWwsIDAsIG1fcmVzcG9uc2UsIFJlc291cmNlRXJyb3IoKSkpOwotICAgIH0K
LQotICAgIG5vdGlmeUNoYWxsZW5nZVJlc3VsdChuZXdVUkwsIHByb3RlY3Rpb25TcGFjZSwgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VTdWNjZXNzLCBjcmVkZW50aWFsKTsKLSAgICByZXR1cm4gbV9u
ZXdKb2JXaXRoQ3JlZGVudGlhbHNTdGFydGVkID8gU2VuZFJlcXVlc3RTdWNjZWVkZWQgOiBTZW5k
UmVxdWVzdENhbmNlbGxlZDsKLX0KLQotdm9pZCBOZXR3b3JrSm9iOjpzdG9yZUNyZWRlbnRpYWxz
KCkKLXsKLSAgICBpZiAoIW1faGFuZGxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdG9yZUNy
ZWRlbnRpYWxzKG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX2hvc3RXZWJDaGFsbGVuZ2UpOwot
ICAgIHN0b3JlQ3JlZGVudGlhbHMobV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcHJveHlXZWJD
aGFsbGVuZ2UpOwotfQotCi12b2lkIE5ldHdvcmtKb2I6OnN0b3JlQ3JlZGVudGlhbHMoQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKLXsKLSAgICBpZiAoY2hhbGxlbmdlLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY2hhbGxlbmdlLmlzU3RvcmVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIE9idmlvdXNseSB3ZSBjYW4ndCBoYXZlIHN1Y2Nlc3Nm
dWxseSBhdXRoZW50aWNhdGVkIHdpdGggZW1wdHkgY3JlZGVudGlhbHMuIChUbyBzdG9yZSBlbXB0
eQotICAgIC8vIGNyZWRlbnRpYWxzLCB1c2UgcHVyZ2VDcmVkZW50aWFscy4pCi0KLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGFzc2VydCBoZXJlLCBidXQgdGhlcmUgaXMgb25lIHBhdGggKHdoZW4g
dGhlIGNyZWRlbnRpYWxzIGFyZSByZWFkIGZyb20gdGhlCi0gICAgLy8gcHJveHkgY29uZmlnIGVu
dGlyZWx5IGluIHRoZSBwbGF0Zm9ybSBsYXllcikgd2hlcmUgc3RvcmVDcmVkZW50aWFscyBpcyBj
YWxsZWQgd2l0aCBhbiBlbXB0eQotICAgIC8vIGNoYWxsZW5nZS4gVGhlIGNyZWRlbnRpYWxzIHNo
b3VsZCBiZSBwYXNzZWQgYmFjayBmcm9tIHRoZSBwbGF0Zm9ybSBsYXllciBmb3Igc3RvcmFnZSBp
biB0aGlzCi0gICAgLy8gY2FzZSAtIHNlZSBQUiAyODc3OTEuCi0gICAgaWYgKGNoYWxsZW5nZS5w
cm9wb3NlZENyZWRlbnRpYWwoKS51c2VyKCkuaXNFbXB0eSgpIHx8IGNoYWxsZW5nZS5wcm9wb3Nl
ZENyZWRlbnRpYWwoKS5wYXNzd29yZCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ3JlZGVudGlhbFN0b3JhZ2U6OnNldChjaGFsbGVuZ2UucHJvcG9zZWRDcmVkZW50aWFsKCks
IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgbV9yZXNwb25zZS51cmwoKSk7Ci0gICAgY2hh
bGxlbmdlLnNldFN0b3JlZCh0cnVlKTsKLQotICAgIGlmIChjaGFsbGVuZ2UucHJvdGVjdGlvblNw
YWNlKCkuc2VydmVyVHlwZSgpID09IFByb3RlY3Rpb25TcGFjZVByb3h5SFRUUCB8fCBjaGFsbGVu
Z2UucHJvdGVjdGlvblNwYWNlKCkuc2VydmVyVHlwZSgpID09IFByb3RlY3Rpb25TcGFjZVByb3h5
SFRUUFMpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBwcm94eUFkZHJlc3M7Ci0gICAgICAgIHBy
b3h5QWRkcmVzcy5hcHBlbmQoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLmhvc3QoKSk7Ci0g
ICAgICAgIHByb3h5QWRkcmVzcy5hcHBlbmQoIjoiKTsKLSAgICAgICAgcHJveHlBZGRyZXNzLmFw
cGVuZE51bWJlcihjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucG9ydCgpKTsKLQotICAgICAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6UHJveHlJbmZvIHByb3h5SW5mbzsKLSAgICAgICAgcHJv
eHlJbmZvLmFkZHJlc3MgPSBwcm94eUFkZHJlc3MudG9TdHJpbmcoKTsKLSAgICAgICAgcHJveHlJ
bmZvLnVzZXJuYW1lID0gY2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpLnVzZXIoKTsKLSAg
ICAgICAgcHJveHlJbmZvLnBhc3N3b3JkID0gY2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgp
LnBhc3N3b3JkKCk7Ci0KLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjpp
bnN0YW5jZSgpLT5zdG9yZVByb3h5Q3JlZGVudGlhbHMocHJveHlJbmZvKTsKLSAgICAgICAgaWYg
KG1fZnJhbWUgJiYgbV9mcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgp
LT5jaHJvbWUoKS5jbGllbnQoKS5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c3luY1Byb3h5Q3JlZGVu
dGlhbChjaGFsbGVuZ2UucHJvcG9zZWRDcmVkZW50aWFsKCkpOwotICAgIH0KLX0KLQotdm9pZCBO
ZXR3b3JrSm9iOjpwdXJnZUNyZWRlbnRpYWxzKCkKLXsKLSAgICBpZiAoIW1faGFuZGxlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwdXJnZUNyZWRlbnRpYWxzKG1faGFuZGxlLT5nZXRJbnRlcm5h
bCgpLT5tX2hvc3RXZWJDaGFsbGVuZ2UpOwotICAgIHB1cmdlQ3JlZGVudGlhbHMobV9oYW5kbGUt
PmdldEludGVybmFsKCktPm1fcHJveHlXZWJDaGFsbGVuZ2UpOwotCi0gICAgbV9oYW5kbGUtPmdl
dEludGVybmFsKCktPm1fY3VycmVudFdlYkNoYWxsZW5nZS5udWxsaWZ5KCk7Ci0gICAgbV9oYW5k
bGUtPmdldEludGVybmFsKCktPm1fcHJveHlXZWJDaGFsbGVuZ2UubnVsbGlmeSgpOwotICAgIG1f
aGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX2hvc3RXZWJDaGFsbGVuZ2UubnVsbGlmeSgpOwotfQot
Ci12b2lkIE5ldHdvcmtKb2I6OnB1cmdlQ3JlZGVudGlhbHMoQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGNoYWxsZW5nZSkKLXsKLSAgICBpZiAoY2hhbGxlbmdlLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBjb25zdCBTdHJpbmcmIHB1cmdlVXNlcm5hbWUgPSBjaGFsbGVuZ2UucHJv
cG9zZWRDcmVkZW50aWFsKCkudXNlcigpOwotICAgIGNvbnN0IFN0cmluZyYgcHVyZ2VQYXNzd29y
ZCA9IGNoYWxsZW5nZS5wcm9wb3NlZENyZWRlbnRpYWwoKS5wYXNzd29yZCgpOwotCi0gICAgLy8g
U2luY2UgdGhpcyBjcmVkZW50aWFsIGRpZG4ndCB3b3JrLCByZW1vdmUgaXQgZnJvbSBhbGwgc291
cmNlcyB3aGljaCB3b3VsZCByZXR1cm4gaXQKLSAgICAvLyBJTVBPUlRBTlQ6IGV2ZXJ5IHNvdXJj
ZSB0aGF0IGlzIGNoZWNrZWQgZm9yIGEgcGFzc3dvcmQgaW4gc2VuZFJlcXVlc3RXaXRoQ3JlZGVu
dGlhbHMgc2hvdWxkCi0gICAgLy8gYmUgaGFuZGxlZCBoZXJlIQotCi0gICAgaWYgKGNoYWxsZW5n
ZS5wcm90ZWN0aW9uU3BhY2UoKS5zZXJ2ZXJUeXBlKCkgPT0gUHJvdGVjdGlvblNwYWNlUHJveHlI
VFRQIHx8IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5zZXJ2ZXJUeXBlKCkgPT0gUHJvdGVj
dGlvblNwYWNlUHJveHlIVFRQUykgewotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6UHJv
eHlJbmZvIHByb3h5SW5mbyA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFu
Y2UoKS0+cHJveHlJbmZvKG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSk7
Ci0gICAgICAgIGlmICghcHJveHlJbmZvLmFkZHJlc3MuZW1wdHkoKSAmJiBwdXJnZVVzZXJuYW1l
ID09IHByb3h5SW5mby51c2VybmFtZS5jX3N0cigpICYmIHB1cmdlUGFzc3dvcmQgPT0gcHJveHlJ
bmZvLnBhc3N3b3JkLmNfc3RyKCkpIHsKLSAgICAgICAgICAgIHByb3h5SW5mby51c2VybmFtZS5j
bGVhcigpOwotICAgICAgICAgICAgcHJveHlJbmZvLnBhc3N3b3JkLmNsZWFyKCk7Ci0gICAgICAg
ICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPnN0b3JlUHJv
eHlDcmVkZW50aWFscyhwcm94eUluZm8pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2hh
bmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV91c2VyID09IHB1cmdlVXNlcm5hbWUgJiYgbV9oYW5kbGUt
PmdldEludGVybmFsKCktPm1fcGFzcyA9PSBwdXJnZVBhc3N3b3JkKSB7Ci0gICAgICAgIG1faGFu
ZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3VzZXIgPSAiIjsKLSAgICAgICAgbV9oYW5kbGUtPmdldElu
dGVybmFsKCktPm1fcGFzcyA9ICIiOwotICAgIH0KLQotICAgIC8vIERvIG5vdCBjb21wYXJlIGNy
ZWRlbnRpYWwgb2JqZWN0cyB3aXRoID09IGhlcmUsIHNpbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQg
dGhlIHBlcnNpc3RlbmNlLgotCi0gICAgY29uc3QgQ3JlZGVudGlhbCYgc3RvcmVkQ3JlZGVudGlh
bCA9IENyZWRlbnRpYWxTdG9yYWdlOjpnZXQoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpKTsK
LSAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbC51c2VyKCkgPT0gcHVyZ2VVc2VybmFtZSAmJiBzdG9y
ZWRDcmVkZW50aWFsLnBhc3N3b3JkKCkgPT0gcHVyZ2VQYXNzd29yZCkgewotICAgICAgICBDcmVk
ZW50aWFsU3RvcmFnZTo6cmVtb3ZlKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7Ci0gICAg
ICAgIGNoYWxsZW5nZS5zZXRTdG9yZWQoZmFsc2UpOwotICAgIH0KLSNpZiBFTkFCTEUoQkxBQ0tC
RVJSWV9DUkVERU5USUFMX1BFUlNJU1QpCi0gICAgY29uc3QgQ3JlZGVudGlhbCYgcGVyc2lzdGVk
Q3JlZGVudGlhbCA9IGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKS5nZXRMb2dpbihjaGFsbGVuZ2Uu
cHJvdGVjdGlvblNwYWNlKCkpOwotICAgIGlmIChwZXJzaXN0ZWRDcmVkZW50aWFsLnVzZXIoKSA9
PSBwdXJnZVVzZXJuYW1lICYmIHBlcnNpc3RlZENyZWRlbnRpYWwucGFzc3dvcmQoKSA9PSBwdXJn
ZVBhc3N3b3JkKQotICAgICAgICBjcmVkZW50aWFsQmFja2luZ1N0b3JlKCkucmVtb3ZlTG9naW4o
Y2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBwdXJnZVVzZXJuYW1lKTsKLSNlbmRpZgotfQot
Ci1ib29sIE5ldHdvcmtKb2I6OnNob3VsZFNlbmRDbGllbnREYXRhKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gKCFpc1JlZGlyZWN0KG1fZXh0ZW5kZWRTdGF0dXNDb2RlKSB8fCAhbV9yZXNwb25zZS5o
dHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMoIkxvY2F0aW9uIikpCi0gICAgICAgICYmICFtX25l
ZWRzUmV0cnlBc0ZUUERpcmVjdG9yeTsKLX0KLQotdm9pZCBOZXR3b3JrSm9iOjpmaXJlRGVsZXRl
Sm9iVGltZXIoVGltZXI8TmV0d29ya0pvYj4qKQotewotICAgIE5ldHdvcmtNYW5hZ2VyOjppbnN0
YW5jZSgpLT5kZWxldGVKb2IodGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6bm90aWZ5Q2hh
bGxlbmdlUmVzdWx0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3Rl
Y3Rpb25TcGFjZSwgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VSZXN1bHQgcmVzdWx0LCBjb25zdCBD
cmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIEFTU0VSVCh1cmwuaXNWYWxpZCgpKTsKLSAg
ICBBU1NFUlQodXJsID09IG1fcmVzcG9uc2UudXJsKCkpOwotICAgIEFTU0VSVCghcHJvdGVjdGlv
blNwYWNlLmhvc3QoKS5pc0VtcHR5KCkpOwotCi0gICAgaWYgKG1faXNBdXRoZW50aWNhdGlvbkNo
YWxsZW5naW5nKSB7Ci0gICAgICAgIG1faXNBdXRoZW50aWNhdGlvbkNoYWxsZW5naW5nID0gZmFs
c2U7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTdWNjZXNz
KQotICAgICAgICAgICAgY2FuY2VsSm9iKCk7Ci0gICAgICAgIHVwZGF0ZURlZmVyTG9hZGluZ0Nv
dW50KC0xKTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0ICE9IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlU3VjY2VzcykgewotICAgICAgICBOZXR3b3JrUmVxdWVzdDo6QXV0aFR5cGUgYXV0aFR5cGU7
Ci0gICAgICAgIE5ldHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2wgYXV0aFByb3RvY29sOwotICAg
ICAgICBOZXR3b3JrUmVxdWVzdDo6QXV0aFNjaGVtZSBhdXRoU2NoZW1lOwotICAgICAgICBwcm90
ZWN0aW9uU3BhY2VUb1BsYXRmb3JtQXV0aChwcm90ZWN0aW9uU3BhY2UsIGF1dGhUeXBlLCBhdXRo
UHJvdG9jb2wsIGF1dGhTY2hlbWUpOwotICAgICAgICBzdHJlYW1GYWlsZWRUb0dldENyZWRlbnRp
YWxzKGF1dGhUeXBlLCBhdXRoUHJvdG9jb2wsIGF1dGhTY2hlbWUpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgdXBkYXRlQ3VycmVudFdlYkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShwcm90ZWN0aW9uU3BhY2UsIGNyZWRlbnRpYWwsIDAsIG1fcmVzcG9uc2UsIFJlc291
cmNlRXJyb3IoKSksIC8qIGFsbG93T3ZlcndyaXRlICovIGZhbHNlKTsKLQotICAgIFJlc291cmNl
UmVxdWVzdCBuZXdSZXF1ZXN0ID0gbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpOwotICAgIG5ld1Jl
cXVlc3Quc2V0VVJMKHVybCk7Ci0gICAgbmV3UmVxdWVzdC5zZXRNdXN0SGFuZGxlSW50ZXJuYWxs
eSh0cnVlKTsKLSAgICBtX25ld0pvYldpdGhDcmVkZW50aWFsc1N0YXJ0ZWQgPSBzdGFydE5ld0pv
YldpdGhSZXF1ZXN0KG5ld1JlcXVlc3QsIC8qIGluY3JlYXNlUmVkaXJlY3RDb3VudCAqLyBmYWxz
ZSwgLyogcmVyZWFkQ29va2llcyAqLyB0cnVlKTsKLX0KLQotdm9pZCBOZXR3b3JrSm9iOjpmcmFt
ZURlc3Ryb3llZCgpCi17Ci0gICAgaWYgKG1fZnJhbWUgJiYgIW1fY2FuY2VsbGVkKQotICAgICAg
ICBjYW5jZWxKb2IoKTsKLSAgICBGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXI6OmZyYW1lRGVzdHJv
eWVkKCk7Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6d2lsbERldGFjaFBhZ2UoKQotewotICAgIGlm
IChtX2ZyYW1lICYmICFtX2NhbmNlbGxlZCkKLSAgICAgICAgY2FuY2VsSm9iKCk7Ci19Ci0KLXZv
aWQgTmV0d29ya0pvYjo6dXBkYXRlQ3VycmVudFdlYkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBib29sIGFsbG93T3ZlcndyaXRlKQotewotICAgIGlm
IChhbGxvd092ZXJ3cml0ZSB8fCAhbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fY3VycmVudFdl
YkNoYWxsZW5nZS5oYXNDcmVkZW50aWFscygpKQotICAgICAgICBtX2hhbmRsZS0+Z2V0SW50ZXJu
YWwoKS0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlID0gY2hhbGxlbmdlOwotICAgIGlmIChjaGFsbGVu
Z2UucHJvdGVjdGlvblNwYWNlKCkuc2VydmVyVHlwZSgpID09IFByb3RlY3Rpb25TcGFjZVByb3h5
SFRUUCB8fCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuc2VydmVyVHlwZSgpID09IFByb3Rl
Y3Rpb25TcGFjZVByb3h5SFRUUFMpIHsKLSAgICAgICAgaWYgKGFsbG93T3ZlcndyaXRlIHx8ICFt
X2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9wcm94eVdlYkNoYWxsZW5nZS5oYXNDcmVkZW50aWFs
cygpKQotICAgICAgICAgICAgbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcHJveHlXZWJDaGFs
bGVuZ2UgPSBjaGFsbGVuZ2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGFsbG93T3Zlcndy
aXRlIHx8ICFtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9ob3N0V2ViQ2hhbGxlbmdlLmhhc0Ny
ZWRlbnRpYWxzKCkpCi0gICAgICAgICAgICBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9ob3N0
V2ViQ2hhbGxlbmdlID0gY2hhbGxlbmdlOwotICAgIH0KLX0KLQotY29uc3QgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZyBOZXR3b3JrSm9iOjptaW1lVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fcmVzcG9uc2UubWltZVR5cGUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtK
b2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNr
YmVycnkvTmV0d29ya0pvYi5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya0pvYi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDIwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAy
MDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgTmV0d29ya0pvYl9oCi0jZGVmaW5lIE5l
dHdvcmtKb2JfaAotCi0jaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYW5hZ2VyLmgi
Ci0jaW5jbHVkZSAiRGVmZXJyZWREYXRhLmgiCi0jaW5jbHVkZSAiRnJhbWVEZXN0cnVjdGlvbk9i
c2VydmVyLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLQotI2luY2x1ZGUgPG5ldHdvcmsvRmls
dGVyU3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBQbGF0Zm9ybSB7Ci1j
bGFzcyBOZXR3b3JrUmVxdWVzdDsKLWNsYXNzIE5ldHdvcmtTdHJlYW1GYWN0b3J5OwotfQotfQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENyZWRlbnRpYWw7Ci1jbGFzcyBGcmFtZTsK
LWNsYXNzIFVSTDsKLWNsYXNzIFByb3RlY3Rpb25TcGFjZTsKLWNsYXNzIFJlc291cmNlUmVxdWVz
dDsKLQotY2xhc3MgTmV0d29ya0pvYiA6IHB1YmxpYyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNs
aWVudCwgcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJTdHJlYW0sIHB1YmxpYyBG
cmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIgewotcHVibGljOgotICAgIE5ldHdvcmtKb2IoKTsKLSAg
ICB+TmV0d29ya0pvYigpOwotCi0gICAgdm9pZCBpbml0aWFsaXplKGludCBwbGF5ZXJJZCwKLSAg
ICAgICAgY29uc3QgU3RyaW5nJiBwYWdlR3JvdXBOYW1lLAotICAgICAgICBjb25zdCBVUkwmLAot
ICAgICAgICBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3QmLAotICAg
ICAgICBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiwKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06Ok5ldHdvcmtTdHJlYW1GYWN0b3J5KiwKLSAgICAgICAgRnJhbWUqLAotICAgICAgICBp
bnQgZGVmZXJMb2FkaW5nQ291bnQsCi0gICAgICAgIGludCByZWRpcmVjdENvdW50KTsKLSAgICBQ
YXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRs
ZTsgfQotI2lmbmRlZiBOREVCVUcKLSAgICBib29sIGlzUnVubmluZygpIGNvbnN0IHsgcmV0dXJu
IG1faXNSdW5uaW5nOyB9Ci0jZW5kaWYKLSAgICBib29sIGlzQ2FuY2VsbGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYW5jZWxsZWQ7IH0KLSAgICBpbnQgY2FuY2VsSm9iKCk7Ci0gICAgYm9vbCBpc0Rl
ZmVycmluZ0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2RlZmVyTG9hZGluZ0NvdW50ID4gMDsg
fQotICAgIHZvaWQgdXBkYXRlRGVmZXJMb2FkaW5nQ291bnQoaW50IGRlbHRhKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5U3RhdHVzUmVjZWl2ZWQoaW50IHN0YXR1cywgY29uc3QgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBoYW5kbGVOb3RpZnlTdGF0
dXNSZWNlaXZlZChpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlIZWFkZXJzUmVjZWl2ZWQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
Ok5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0JiBoZWFkZXJzKTsKLSAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5TXVsdGlwYXJ0SGVhZGVyUmVjZWl2ZWQoY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFy
KiB2YWx1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUF1dGhSZWNlaXZlZChCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkF1dGhUeXBlLAotICAgICAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkF1dGhQcm90b2NvbCwKLSAgICAgICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpBdXRoU2NoZW1lLAotICAgICAgICBjb25z
dCBjaGFyKiByZWFsbSwKLSAgICAgICAgQXV0aFJlc3VsdCk7Ci0gICAgLy8gbm90aWZ5U3RyaW5n
SGVhZGVyUmVjZWl2ZWQgZXhpc3RzIG9ubHkgdG8gcmVzb2x2ZSBhbWJpZ3VpdHkgYmV0d2VlbiBj
aGFyKiBhbmQgU3RyaW5nIHBhcmFtZXRlcnMKLSAgICB2b2lkIG5vdGlmeVN0cmluZ0hlYWRlclJl
Y2VpdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lk
IGhhbmRsZU5vdGlmeUhlYWRlclJlY2VpdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKTsKLSAgICB2b2lkIGhhbmRsZU5vdGlmeU11bHRpcGFydEhlYWRlclJlY2VpdmVk
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGhhbmRs
ZVNldENvb2tpZUhlYWRlcihjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIG5vdGlmeURh
dGFSZWNlaXZlZFBsYWluKGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbik7Ci0gICAgdm9pZCBo
YW5kbGVOb3RpZnlEYXRhUmVjZWl2ZWQoY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5RGF0YVNlbnQodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7Ci0gICAgdm9pZCBoYW5k
bGVOb3RpZnlEYXRhU2VudCh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBs
b25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q2xv
c2UoaW50IHN0YXR1cyk7Ci0gICAgdm9pZCBoYW5kbGVOb3RpZnlDbG9zZShpbnQgc3RhdHVzKTsK
LSAgICB2aXJ0dWFsIGludCBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX2V4dGVuZGVkU3RhdHVz
Q29kZTsgfQotICAgIHZpcnR1YWwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBt
aW1lVHlwZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUNoYWxsZW5nZVJlc3Vs
dChjb25zdCBVUkwmLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZVJlc3VsdCwgY29uc3QgQ3JlZGVudGlhbCYpOwotCi0gICAgLy8gSW1wbGVtZW50YXRpb24g
b2YgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyIHB1cmUgdmlydHVhbHMuCi0gICAgdmlydHVhbCB2
b2lkIGZyYW1lRGVzdHJveWVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxEZXRhY2hQYWdlKCk7
Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc0NsaWVudEF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJu
ICFtX2NhbmNlbGxlZCAmJiBtX2hhbmRsZSAmJiBtX2hhbmRsZS0+Y2xpZW50KCk7IH0KLQotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlEYXRhUmVjZWl2ZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5l
dHdvcmtCdWZmZXIqIGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG5vdGlmeURhdGFSZWNlaXZlZFBs
YWluKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpuZXR3b3JrQnVmZmVyRGF0YShidWZmZXIpLCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6bmV0d29ya0J1ZmZlckRhdGFMZW5ndGgoYnVmZmVyKSk7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHNldFdhc0Rpc2tDYWNoZWQoYm9vbCB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgbV9yZXNwb25zZS5zZXRXYXNDYWNoZWQodmFsdWUpOwotICAgIH0KLQotICAgIGJv
b2wgc2hvdWxkU2VuZENsaWVudERhdGEoKSBjb25zdDsKLQotICAgIGJvb2wgc2hvdWxkUmVsZWFz
ZUNsaWVudFJlc291cmNlKCk7Ci0gICAgYm9vbCBzaG91bGROb3RpZnlDbGllbnRGYWlsZWQoKSBj
b25zdDsKLQotICAgIGJvb2wgc2hvdWxkRGVmZXJMb2FkaW5nKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBpc0RlZmVycmluZ0xvYWRpbmcoKSB8fCBtX2RlZmVycmVkRGF0YS5oYXNEZWZl
cnJlZERhdGEoKTsKLSAgICB9Ci0KLSAgICBib29sIHJldHJ5QXNGVFBEaXJlY3RvcnkoKTsKLQot
ICAgIGJvb2wgc3RhcnROZXdKb2JXaXRoUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVl
c3QsIGJvb2wgaW5jcmVhc1JlZGlyZWN0Q291bnQgPSBmYWxzZSwgYm9vbCByZXJlYWRDb29raWVz
ID0gZmFsc2UpOwotCi0gICAgYm9vbCBoYW5kbGVSZWRpcmVjdCgpOwotCi0gICAgLy8gVGhpcyBj
YW4gY2F1c2UgbV9jYW5jZWxsZWQgdG8gYmUgc2V0IHRvIHRydWUsIGlmIGl0IHBhc3NlcyB1cCBh
biBlcnJvciB0byBtX2hhbmRsZS0+Y2xpZW50KCkgd2hpY2ggY2F1c2VzIHRoZSBqb2IgdG8gYmUg
Y2FuY2VsbGVkCi0gICAgdm9pZCBzZW5kUmVzcG9uc2VJZk5lZWRlZCgpOwotICAgIHZvaWQgc2Vu
ZE11bHRpcGFydFJlc3BvbnNlSWZOZWVkZWQoKTsKLQotICAgIHZvaWQgZmlyZURlbGV0ZUpvYlRp
bWVyKFRpbWVyPE5ldHdvcmtKb2I+Kik7Ci0KLSAgICBib29sIGhhbmRsZUZUUEhlYWRlcihjb25z
dCBTdHJpbmcmIGhlYWRlcik7Ci0KLSAgICAvLyBUaGUgc2VydmVyIG5lZWRzIGF1dGhlbnRpY2F0
aW9uIGNyZWRlbnRpYWxzLiBTZWFyY2ggaW4gdGhlIENyZWRlbnRpYWxTdG9yYWdlCi0gICAgLy8g
b3IgcHJvbXB0IHRoZSB1c2VyIHZpYSBkaWFsb2csIHRoZW4gcmVzZW5kIHRoZSByZXF1ZXN0IHdp
dGggdGhlIGNyZWRlbnRpYWxzLgotICAgIGVudW0gU2VuZFJlcXVlc3RSZXN1bHQgewotICAgICAg
ICBTZW5kUmVxdWVzdFN1Y2NlZWRlZCwKLSAgICAgICAgU2VuZFJlcXVlc3RDYW5jZWxsZWQsCi0g
ICAgICAgIFNlbmRSZXF1ZXN0V2FpdGluZwotICAgIH07Ci0gICAgU2VuZFJlcXVlc3RSZXN1bHQg
c2VuZFJlcXVlc3RXaXRoQ3JlZGVudGlhbHMoUHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSwgUHJv
dGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWUsIGNvbnN0IFN0cmluZyYgcmVhbG0sIGJv
b2wgcmVxdWlyZUNyZWRlbnRpYWxzID0gdHJ1ZSk7Ci0KLSAgICB2b2lkIHN0b3JlQ3JlZGVudGlh
bHMoKTsKLSAgICB2b2lkIHN0b3JlQ3JlZGVudGlhbHMoQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
KTsKLSAgICB2b2lkIHB1cmdlQ3JlZGVudGlhbHMoKTsKLSAgICB2b2lkIHB1cmdlQ3JlZGVudGlh
bHMoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLQotICAgIGJvb2wgaXNFcnJvcihpbnQgc3Rh
dHVzQ29kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0dXNDb2RlIDwgMCB8fCAo
NDAwIDw9IHN0YXR1c0NvZGUgJiYgc3RhdHVzQ29kZSA8IDYwMCk7Ci0gICAgfQotCi0gICAgdm9p
ZCB1cGRhdGVDdXJyZW50V2ViQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiwgYm9vbCBhbGxvd092ZXJ3cml0ZSA9IHRydWUpOwotCi1wcml2YXRlOgotICAgIGludCBtX3Bs
YXllcklkOwotICAgIFN0cmluZyBtX3BhZ2VHcm91cE5hbWU7Ci0gICAgUmVmUHRyPFJlc291cmNl
SGFuZGxlPiBtX2hhbmRsZTsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7Ci0gICAg
T3duUHRyPFJlc291cmNlUmVzcG9uc2U+IG1fbXVsdGlwYXJ0UmVzcG9uc2U7Ci0gICAgVGltZXI8
TmV0d29ya0pvYj4gbV9kZWxldGVKb2JUaW1lcjsKLSAgICBTdHJpbmcgbV9jb250ZW50VHlwZTsK
LSAgICBTdHJpbmcgbV9zbmlmZmVkTWltZVR5cGU7Ci0gICAgU3RyaW5nIG1fY29udGVudERpc3Bv
c2l0aW9uOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrU3RyZWFtRmFjdG9yeSog
bV9zdHJlYW1GYWN0b3J5OwotICAgIGJvb2wgbV9pc0ZpbGU7Ci0gICAgYm9vbCBtX2lzRlRQOwot
ICAgIGJvb2wgbV9pc0ZUUERpcjsKLSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBtX2lzUnVubmlu
ZzsKLSNlbmRpZgotICAgIGJvb2wgbV9jYW5jZWxsZWQ7Ci0gICAgYm9vbCBtX3N0YXR1c1JlY2Vp
dmVkOwotICAgIGJvb2wgbV9kYXRhUmVjZWl2ZWQ7Ci0gICAgYm9vbCBtX3Jlc3BvbnNlU2VudDsK
LSAgICBib29sIG1fY2FsbGluZ0NsaWVudDsKLSAgICBib29sIG1fbmVlZHNSZXRyeUFzRlRQRGly
ZWN0b3J5OwotICAgIGJvb2wgbV9pc092ZXJyaWRlQ29udGVudFR5cGU7Ci0gICAgYm9vbCBtX25l
d0pvYldpdGhDcmVkZW50aWFsc1N0YXJ0ZWQ7Ci0gICAgYm9vbCBtX2lzSGVhZE1ldGhvZDsKLQot
ICAgIC8vIElmIGFuIEhUVFAgc3RhdHVzIGNvZGUgaXMgcmVjZWl2ZWQsIG1fZXh0ZW5kZWRTdGF0
dXNDb2RlIGFuZCBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlIHdpbGwgYm90aCBiZSBzZXQgdG8g
aXQuCi0gICAgLy8gSWYgYSBwbGF0Zm9ybSBlcnJvciBjb2RlIGlzIHJlY2VpdmVkLCBtX2V4dGVu
ZGVkU3RhdHVzQ29kZSB3aWxsIGJlIHNldCB0byBpdCBhbmQgbV9yZXNwb25zZS5odHRwU3RhdHVz
Q29kZSB3aWxsIGJlIHNldCB0byA0MDQuCi0gICAgaW50IG1fZXh0ZW5kZWRTdGF0dXNDb2RlOwot
Ci0gICAgaW50IG1fcmVkaXJlY3RDb3VudDsKLQotICAgIERlZmVycmVkRGF0YSBtX2RlZmVycmVk
RGF0YTsKLSAgICBpbnQgbV9kZWZlckxvYWRpbmdDb3VudDsKLQotICAgIGJvb2wgbV9pc0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBOZXR3b3JrSm9iX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvYmxhY2tiZXJyeS9OZXR3b3JrTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtNYW5hZ2VyLmNwcAkocmV2
aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L05ldHdvcmtNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya01hbmFnZXIuaCIK
LQotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCi0j
aW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnku
aCIKLSNpbmNsdWRlICJOZXR3b3JrSm9iLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
LSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtTG9nLmg+Ci0jaW5jbHVkZSA8QnVpbGRJbmZvcm1hdGlvbi5oPgotI2luY2x1ZGUgPG5ldHdv
cmsvRmlsdGVyU3RyZWFtLmg+Ci0jaW5jbHVkZSA8bmV0d29yay9OZXR3b3JrUmVxdWVzdC5oPgot
Ci11c2luZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotU0lOR0xFVE9OX0lOSVRJQUxJWkVSX1RIUkVBRFVOU0FGRShOZXR3b3Jr
TWFuYWdlcikKLQotaW50IE5ldHdvcmtNYW5hZ2VyOjpzdGFydEpvYihpbnQgcGxheWVySWQsIFBh
c3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGpvYiwgRnJhbWUqIGZyYW1lLCBib29sIGRlZmVyc0xv
YWRpbmcpCi17Ci0gICAgQVNTRVJUKGpvYi5nZXQoKSk7Ci0gICAgLy8gV2Ugc2hvdWxkbid0IGNh
bGwgbWV0aG9kcyBvbiBQYXNzUmVmUHRyIHNvIG1ha2UgYSBuZXcgUmVmUHQuCi0gICAgUmVmUHRy
PFJlc291cmNlSGFuZGxlPiByZWZKb2Ioam9iKTsKLSAgICByZXR1cm4gc3RhcnRKb2IocGxheWVy
SWQsIHJlZkpvYiwgcmVmSm9iLT5maXJzdFJlcXVlc3QoKSwgZnJhbWUsIGRlZmVyc0xvYWRpbmcp
OwotfQotCi1pbnQgTmV0d29ya01hbmFnZXI6OnN0YXJ0Sm9iKGludCBwbGF5ZXJJZCwgUGFzc1Jl
ZlB0cjxSZXNvdXJjZUhhbmRsZT4gam9iLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IEZyYW1lKiBmcmFtZSwgYm9vbCBkZWZlcnNMb2FkaW5nKQotewotICAgIFBhZ2UqIHBhZ2UgPSBm
cmFtZS0+cGFnZSgpOwotICAgIEFTU0VSVChwYWdlKTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6TmV0d29ya1N0cmVhbUZhY3RvcnkqIHN0cmVhbUZhY3RvcnkgPSBwYWdlLT5jaHJvbWUoKS5w
bGF0Zm9ybVBhZ2VDbGllbnQoKS0+bmV0d29ya1N0cmVhbUZhY3RvcnkoKTsKLSAgICByZXR1cm4g
c3RhcnRKb2IocGxheWVySWQsIHBhZ2UtPmdyb3VwTmFtZSgpLCBqb2IsIHJlcXVlc3QsIHN0cmVh
bUZhY3RvcnksIGZyYW1lLCBkZWZlcnNMb2FkaW5nID8gMSA6IDApOwotfQotCi12b2lkIHByb3Rl
Y3Rpb25TcGFjZVRvUGxhdGZvcm1BdXRoKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlv
blNwYWNlLCBOZXR3b3JrUmVxdWVzdDo6QXV0aFR5cGUmIGF1dGhUeXBlLCBOZXR3b3JrUmVxdWVz
dDo6QXV0aFByb3RvY29sJiBhdXRoUHJvdG9jb2wsIE5ldHdvcmtSZXF1ZXN0OjpBdXRoU2NoZW1l
JiBhdXRoU2NoZW1lKQotewotICAgIGF1dGhTY2hlbWUgPSBOZXR3b3JrUmVxdWVzdDo6QXV0aFNj
aGVtZU5vbmU7Ci0gICAgc3dpdGNoIChwcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hl
bWUoKSkgewotICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVEZWZh
dWx0OgotICAgICAgICBhdXRoU2NoZW1lID0gTmV0d29ya1JlcXVlc3Q6OkF1dGhTY2hlbWVEZWZh
dWx0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0
aW9uU2NoZW1lSFRUUEJhc2ljOgotICAgICAgICBhdXRoU2NoZW1lID0gTmV0d29ya1JlcXVlc3Q6
OkF1dGhTY2hlbWVIVFRQQmFzaWM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJvdGVjdGlv
blNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQRGlnZXN0OgotICAgICAgICBhdXRoU2NoZW1l
ID0gTmV0d29ya1JlcXVlc3Q6OkF1dGhTY2hlbWVIVFRQRGlnZXN0OwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlOgot
ICAgICAgICBhdXRoU2NoZW1lID0gTmV0d29ya1JlcXVlc3Q6OkF1dGhTY2hlbWVOZWdvdGlhdGU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVOVExNOgotICAgICAgICBhdXRoU2NoZW1lID0gTmV0d29ya1JlcXVlc3Q6OkF1dGhTY2hl
bWVOVExNOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgYXV0aFR5cGUgPSBOZXR3
b3JrUmVxdWVzdDo6QXV0aFR5cGVOb25lOwotICAgIGF1dGhQcm90b2NvbCA9IE5ldHdvcmtSZXF1
ZXN0OjpBdXRoUHJvdG9jb2xOb25lOwotICAgIHN3aXRjaCAocHJvdGVjdGlvblNwYWNlLnNlcnZl
clR5cGUoKSkgewotICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlU2VydmVySFRUUDoKLSAgICAgICAg
YXV0aFR5cGUgPSBOZXR3b3JrUmVxdWVzdDo6QXV0aFR5cGVIb3N0OwotICAgICAgICBhdXRoUHJv
dG9jb2wgPSBOZXR3b3JrUmVxdWVzdDo6QXV0aFByb3RvY29sSFRUUDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQUzoKLSAgICAgICAgYXV0aFR5cGUg
PSBOZXR3b3JrUmVxdWVzdDo6QXV0aFR5cGVIb3N0OwotICAgICAgICBhdXRoUHJvdG9jb2wgPSBO
ZXR3b3JrUmVxdWVzdDo6QXV0aFByb3RvY29sSFRUUFM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUHJvdGVjdGlvblNwYWNlU2VydmVyRlRQOgotICAgICAgICBhdXRoVHlwZSA9IE5ldHdvcmtS
ZXF1ZXN0OjpBdXRoVHlwZUhvc3Q7Ci0gICAgICAgIGF1dGhQcm90b2NvbCA9IE5ldHdvcmtSZXF1
ZXN0OjpBdXRoUHJvdG9jb2xGVFA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJvdGVjdGlv
blNwYWNlU2VydmVyRlRQUzoKLSAgICAgICAgYXV0aFR5cGUgPSBOZXR3b3JrUmVxdWVzdDo6QXV0
aFR5cGVIb3N0OwotICAgICAgICBhdXRoUHJvdG9jb2wgPSBOZXR3b3JrUmVxdWVzdDo6QXV0aFBy
b3RvY29sRlRQUzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VQcm94
eUhUVFA6Ci0gICAgICAgIGF1dGhUeXBlID0gTmV0d29ya1JlcXVlc3Q6OkF1dGhUeXBlUHJveHk7
Ci0gICAgICAgIGF1dGhQcm90b2NvbCA9IE5ldHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2xIVFRQ
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFByb3RlY3Rpb25TcGFjZVByb3h5SFRUUFM6Ci0g
ICAgICAgIGF1dGhUeXBlID0gTmV0d29ya1JlcXVlc3Q6OkF1dGhUeXBlUHJveHk7Ci0gICAgICAg
IGF1dGhQcm90b2NvbCA9IE5ldHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2xIVFRQUzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VQcm94eUZUUDoKLSAgICAgICAgYXV0
aFR5cGUgPSBOZXR3b3JrUmVxdWVzdDo6QXV0aFR5cGVQcm94eTsKLSAgICAgICAgYXV0aFByb3Rv
Y29sID0gTmV0d29ya1JlcXVlc3Q6OkF1dGhQcm90b2NvbEZUUDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgc2V0QXV0aENyZWRlbnRpYWxzKE5ldHdvcmtSZXF1
ZXN0JiBwbGF0Zm9ybVJlcXVlc3QsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFs
bGVuZ2UpCi17Ci0gICAgaWYgKGNoYWxsZW5nZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQ3JlZGVudGlhbCBjcmVkZW50aWFsID0gY2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlh
bCgpOwotICAgIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlID0gY2hhbGxl
bmdlLnByb3RlY3Rpb25TcGFjZSgpOwotCi0gICAgU3RyaW5nIHVzZXJuYW1lID0gY3JlZGVudGlh
bC51c2VyKCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gY3JlZGVudGlhbC5wYXNzd29yZCgpOwot
Ci0gICAgTmV0d29ya1JlcXVlc3Q6OkF1dGhUeXBlIGF1dGhUeXBlOwotICAgIE5ldHdvcmtSZXF1
ZXN0OjpBdXRoUHJvdG9jb2wgYXV0aFByb3RvY29sOwotICAgIE5ldHdvcmtSZXF1ZXN0OjpBdXRo
U2NoZW1lIGF1dGhTY2hlbWU7Ci0gICAgcHJvdGVjdGlvblNwYWNlVG9QbGF0Zm9ybUF1dGgocHJv
dGVjdGlvblNwYWNlLCBhdXRoVHlwZSwgYXV0aFByb3RvY29sLCBhdXRoU2NoZW1lKTsKLQotICAg
IGlmIChhdXRoVHlwZSAhPSBOZXR3b3JrUmVxdWVzdDo6QXV0aFR5cGVOb25lICYmIGF1dGhQcm90
b2NvbCAhPSBOZXR3b3JrUmVxdWVzdDo6QXV0aFByb3RvY29sTm9uZSAmJiBhdXRoU2NoZW1lICE9
IE5ldHdvcmtSZXF1ZXN0OjpBdXRoU2NoZW1lTm9uZSkKLSAgICAgICAgcGxhdGZvcm1SZXF1ZXN0
LnNldENyZWRlbnRpYWxzKGF1dGhUeXBlLCBhdXRoUHJvdG9jb2wsIGF1dGhTY2hlbWUsIHVzZXJu
YW1lLnV0ZjgoKS5kYXRhKCksIHBhc3N3b3JkLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1pbnQgTmV0
d29ya01hbmFnZXI6OnN0YXJ0Sm9iKGludCBwbGF5ZXJJZCwgY29uc3QgU3RyaW5nJiBwYWdlR3Jv
dXBOYW1lLCBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBqb2IsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtTdHJlYW1GYWN0b3J5
KiBzdHJlYW1GYWN0b3J5LCBGcmFtZSogZnJhbWUsIGludCBkZWZlckxvYWRpbmdDb3VudCwgaW50
IHJlZGlyZWN0Q291bnQsIGJvb2wgcmVyZWFkQ29va2llcykKLXsKLSAgICAvLyBNYWtlIHN1cmUg
dGhlIFJlc291cmNlSGFuZGxlIGRvZXNuJ3QgZ28gb3V0IG9mIHNjb3BlIHdoaWxlIGNhbGxpbmcg
Y2FsbGJhY2tzLgotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gZ3VhcmRKb2Ioam9iKTsKLQot
ICAgIFVSTCB1cmwgPSByZXF1ZXN0LnVybCgpOwotCi0gICAgLy8gT25seSBsb2FkIHRoZSBpbml0
aWFsIHVybCBvbmNlLgotICAgIGJvb2wgaXNJbml0aWFsID0gKHVybCA9PSBtX2luaXRpYWxVUkwp
OwotICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgIG1faW5pdGlhbFVSTCA9IFVSTCgpOwotCi0g
ICAgLy8gQWx3YXlzIHJlcmVhZCBjb29raWVzIG9uIGEgcmVkaXJlY3QKLSAgICBpZiAocmVkaXJl
Y3RDb3VudCkKLSAgICAgICAgcmVyZWFkQ29va2llcyA9IHRydWU7Ci0KLSAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3QgcGxhdGZvcm1SZXF1ZXN0OwotICAgIHJlcXVlc3Qu
aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdChwbGF0Zm9ybVJlcXVlc3QsIGZyYW1lLT5sb2FkZXIo
KSAmJiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpICYmIHN0YXRpY19jYXN0PEZyYW1lTG9hZGVy
Q2xpZW50QmxhY2tCZXJyeSo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5jb29raWVzRW5h
YmxlZCgpLCBpc0luaXRpYWwsIHJlcmVhZENvb2tpZXMpOwotCi0gICAgLy8gR1VSTCBhbmQgVVJM
IGNvbnNpZGVyIHZhbGlkIFVSTHMgZGlmZmVyZW50bHksIGZvciBleGFtcGxlIGh0dHA6Ly8gaXMg
cGFyc2VkIGFzCi0gICAgLy8gaHR0cDovIGJ5IFVSTCBhbmQgY29uc2lkZXJlZCB2YWxpZCwgd2hp
bGUgR1VSTCBjb25zaWRlcnMgaXQgaW52YWxpZC4KLSAgICBpZiAoIXBsYXRmb3JtUmVxdWVzdC51
cmwoKS5pc192YWxpZCgpKQotICAgICAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZp
bHRlclN0cmVhbTo6U3RhdHVzRXJyb3JJbnZhbGlkVXJsOwotCi0gICAgY29uc3QgU3RyaW5nJiBk
b2N1bWVudFVybCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKLSAgICBpZiAo
IWRvY3VtZW50VXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNldFJlZmVy
cmVyKGRvY3VtZW50VXJsKTsKLQotICAgIHBsYXRmb3JtUmVxdWVzdC5zZXRTZWN1cml0eU9yaWdp
bihmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSk7Ci0K
LSAgICAvLyBBdHRhY2ggYW55IGFwcGxpY2FibGUgYXV0aCBjcmVkZW50aWFscyB0byB0aGUgTmV0
d29ya1JlcXVlc3QuCi0gICAgc2V0QXV0aENyZWRlbnRpYWxzKHBsYXRmb3JtUmVxdWVzdCwgZ3Vh
cmRKb2ItPmdldEludGVybmFsKCktPm1faG9zdFdlYkNoYWxsZW5nZSk7Ci0gICAgc2V0QXV0aENy
ZWRlbnRpYWxzKHBsYXRmb3JtUmVxdWVzdCwgZ3VhcmRKb2ItPmdldEludGVybmFsKCktPm1fcHJv
eHlXZWJDaGFsbGVuZ2UpOwotCi0gICAgaWYgKCFyZXF1ZXN0Lm92ZXJyaWRlQ29udGVudFR5cGUo
KS5pc0VtcHR5KCkpCi0gICAgICAgIHBsYXRmb3JtUmVxdWVzdC5zZXRPdmVycmlkZUNvbnRlbnRU
eXBlKHJlcXVlc3Qub3ZlcnJpZGVDb250ZW50VHlwZSgpKTsKLQotICAgIE5ldHdvcmtKb2IqIG5l
dHdvcmtKb2IgPSBuZXcgTmV0d29ya0pvYjsKLSAgICBuZXR3b3JrSm9iLT5pbml0aWFsaXplKHBs
YXllcklkLCBwYWdlR3JvdXBOYW1lLCB1cmwsIHBsYXRmb3JtUmVxdWVzdCwgZ3VhcmRKb2IsIHN0
cmVhbUZhY3RvcnksIGZyYW1lLCBkZWZlckxvYWRpbmdDb3VudCwgcmVkaXJlY3RDb3VudCk7Ci0K
LSAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBvbmx5IG9uZSBOZXR3b3JrSm9iIGZvciBvbmUgUmVz
b3VyY2VIYW5kbGUuCi0gICAgQVNTRVJUKCFmaW5kSm9iRm9ySGFuZGxlKGd1YXJkSm9iKSk7Ci0K
LSAgICBtX2pvYnMuYXBwZW5kKG5ldHdvcmtKb2IpOwotCi0gICAgc3dpdGNoIChuZXR3b3JrSm9i
LT5zdHJlYW1PcGVuKCkpIHsKLSAgICBjYXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJT
dHJlYW06OlJlc3VsdE9rOgotICAgICAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZp
bHRlclN0cmVhbTo6U3RhdHVzU3VjY2VzczsKLSAgICBjYXNlIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpGaWx0ZXJTdHJlYW06OlJlc3VsdE5vdFJlYWR5OgotICAgICAgICByZXR1cm4gQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbTo6U3RhdHVzRXJyb3JOb3RSZWFkeTsKLSAgICBjYXNl
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJTdHJlYW06OlJlc3VsdE5vdEhhbmRsZWQ6Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbTo6U3RhdHVzRXJyb3JDb25uZWN0aW9u
RmFpbGVkOwotfQotCi1ib29sIE5ldHdvcmtNYW5hZ2VyOjpzdG9wSm9iKFBhc3NSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IGpvYikKLXsKLSAgICBpZiAoTmV0d29ya0pvYiogbmV0d29ya0pvYiA9IGZp
bmRKb2JGb3JIYW5kbGUoam9iKSkKLSAgICAgICAgcmV0dXJuICFuZXR3b3JrSm9iLT5jYW5jZWxK
b2IoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU5ldHdvcmtKb2IqIE5ldHdvcmtNYW5hZ2Vy
OjpmaW5kSm9iRm9ySGFuZGxlKFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGpvYikKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qb2JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IE5ldHdvcmtKb2IqIG5ldHdvcmtKb2IgPSBtX2pvYnNbaV07Ci0gICAgICAgIC8vIFdlIGhhdmUg
b25seSBvbmUgam9iIGZvciBvbmUgaGFuZGxlIChub3QgaW5jbHVkaW5nIGNhbmNlbGxlZCBqb2Jz
IHdoaWNoIG1heSBoYW5nCi0gICAgICAgIC8vIGFyb3VuZCBicmllZmx5KSwgc28gcmV0dXJuIHRo
ZSBmaXJzdCBub24tY2FuY2VsbGVkIGpvYi4KLSAgICAgICAgaWYgKCFuZXR3b3JrSm9iLT5pc0Nh
bmNlbGxlZCgpICYmIG5ldHdvcmtKb2ItPmhhbmRsZSgpID09IGpvYikKLSAgICAgICAgICAgIHJl
dHVybiBuZXR3b3JrSm9iOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBOZXR3b3Jr
TWFuYWdlcjo6ZGVsZXRlSm9iKE5ldHdvcmtKb2IqIGpvYikKLXsKLSAgICBBU1NFUlQoIWpvYi0+
aXNSdW5uaW5nKCkpOwotICAgIHNpemVfdCBwb3NpdGlvbiA9IG1fam9icy5maW5kKGpvYik7Ci0g
ICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKQotICAgICAgICBtX2pvYnMucmVtb3ZlKHBvc2l0
aW9uKTsKLSAgICBkZWxldGUgam9iOwotfQotCi12b2lkIE5ldHdvcmtNYW5hZ2VyOjpzZXREZWZl
cnNMb2FkaW5nKFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGpvYiwgYm9vbCBkZWZlcnNMb2Fk
aW5nKQotewotICAgIGlmIChOZXR3b3JrSm9iKiBuZXR3b3JrSm9iID0gZmluZEpvYkZvckhhbmRs
ZShqb2IpKQotICAgICAgICBuZXR3b3JrSm9iLT51cGRhdGVEZWZlckxvYWRpbmdDb3VudChkZWZl
cnNMb2FkaW5nID8gMSA6IC0xKTsKLX0KLQotdm9pZCBOZXR3b3JrTWFuYWdlcjo6cGF1c2VMb2Fk
KFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGpvYiwgYm9vbCBwYXVzZSkKLXsKLSAgICBpZiAo
TmV0d29ya0pvYiogbmV0d29ya0pvYiA9IGZpbmRKb2JGb3JIYW5kbGUoam9iKSkKLSAgICAgICAg
bmV0d29ya0pvYi0+c3RyZWFtUGF1c2UocGF1c2UpOwotfQotCi1CbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6RmlsdGVyU3RyZWFtKiBOZXR3b3JrTWFuYWdlcjo6c3RyZWFtRm9ySGFuZGxlKFBhc3NSZWZQ
dHI8UmVzb3VyY2VIYW5kbGU+IGpvYikKLXsKLSAgICBOZXR3b3JrSm9iKiBuZXR3b3JrSm9iID0g
ZmluZEpvYkZvckhhbmRsZShqb2IpOwotICAgIHJldHVybiBuZXR3b3JrSm9iID8gbmV0d29ya0pv
Yi0+d3JhcHBlZFN0cmVhbSgpIDogMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtNYW5h
Z2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L05ldHdvcmtNYW5hZ2VyLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrTWFuYWdlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCi0gKi8KLQotI2lmbmRlZiBOZXR3b3JrTWFuYWdlcl9oCi0jZGVmaW5lIE5ldHdvcmtN
YW5hZ2VyX2gKLQotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgi
Ci0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TaW5nbGV0b24uaD4KLSNpbmNsdWRlIDxu
ZXR3b3JrL05ldHdvcmtSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgUGxhdGZvcm0gewotY2xhc3MgRmlsdGVyU3Ry
ZWFtOwotY2xhc3MgTmV0d29ya1N0cmVhbUZhY3Rvcnk7Ci19Ci19Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRnJhbWU7Ci1jbGFzcyBOZXR3b3JrSm9iOwotCi12b2lkIHByb3RlY3Rp
b25TcGFjZVRvUGxhdGZvcm1BdXRoKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6QXV0aFR5cGUmLCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6TmV0d29ya1JlcXVlc3Q6OkF1dGhQcm90b2NvbCYsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpO
ZXR3b3JrUmVxdWVzdDo6QXV0aFNjaGVtZSYpOwotCi1jbGFzcyBOZXR3b3JrTWFuYWdlciA6IHB1
YmxpYyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VGhyZWFkVW5zYWZlU2luZ2xldG9uPE5ldHdvcmtN
YW5hZ2VyPiB7Ci0gICAgU0lOR0xFVE9OX0RFRklOSVRJT05fVEhSRUFEVU5TQUZFKE5ldHdvcmtN
YW5hZ2VyKQotcHVibGljOgotICAgIHZvaWQgc2V0SW5pdGlhbFVSTChjb25zdCBVUkwmIHVybCkg
eyBtX2luaXRpYWxVUkwgPSB1cmw7IH0KLSAgICBVUkwgaW5pdGlhbFVSTCgpIHsgcmV0dXJuIG1f
aW5pdGlhbFVSTDsgfQotICAgIGludCBzdGFydEpvYihpbnQgcGxheWVySWQsIFBhc3NSZWZQdHI8
UmVzb3VyY2VIYW5kbGU+IGpvYiwgRnJhbWUqLCBib29sIGRlZmVyc0xvYWRpbmcpOwotICAgIGlu
dCBzdGFydEpvYihpbnQgcGxheWVySWQsIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGpvYiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgRnJhbWUqLCBib29sIGRlZmVyc0xvYWRpbmcpOwotICAg
IGJvb2wgc3RvcEpvYihQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPik7Ci0gICAgdm9pZCBzZXRE
ZWZlcnNMb2FkaW5nKFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGpvYiwgYm9vbCBkZWZlcnNM
b2FkaW5nKTsKLSAgICB2b2lkIHBhdXNlTG9hZChQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBq
b2IsIGJvb2wgcGF1c2UpOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJTdHJlYW0q
IHN0cmVhbUZvckhhbmRsZShQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPik7Ci0KLXByaXZhdGU6
Ci0gICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtKb2I7Ci0KLSAgICBOZXR3b3JrSm9iKiBmaW5kSm9i
Rm9ySGFuZGxlKFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+KTsKLSAgICB2b2lkIGRlbGV0ZUpv
YihOZXR3b3JrSm9iKik7Ci0gICAgaW50IHN0YXJ0Sm9iKGludCBwbGF5ZXJJZCwgY29uc3QgU3Ry
aW5nJiBwYWdlR3JvdXBOYW1lLCBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtTdHJlYW1GYWN0b3J5
KiwgRnJhbWUqLCBpbnQgZGVmZXJMb2FkaW5nQ291bnQgPSAwLCBpbnQgcmVkaXJlY3RDb3VudCA9
IDAsIGJvb2wgcmVyZWFkQ29va2llcyA9IGZhbHNlKTsKLQotICAgIFZlY3RvcjxOZXR3b3JrSm9i
Kj4gbV9qb2JzOwotICAgIFVSTCBtX2luaXRpYWxVUkw7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBOZXR3b3JrTWFuYWdlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya1N0YXRlTm90aWZpZXJCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Js
YWNrYmVycnkvTmV0d29ya1N0YXRlTm90aWZpZXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYx
NTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdv
cmtTdGF0ZU5vdGlmaWVyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9q
ZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Ik5ldHdvcmtTdGF0ZU5vdGlmaWVyLmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1T
ZXR0aW5ncy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU5ldHdvcmtTdGF0ZU5vdGlmaWVy
OjpOZXR3b3JrU3RhdGVOb3RpZmllcigpCi0gICAgOiBtX2lzT25MaW5lKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+aXNOZXR3b3JrQXZhaWxhYmxlKCkpCi17Ci19
Ci0KLXZvaWQgTmV0d29ya1N0YXRlTm90aWZpZXI6Om5ldHdvcmtTdGF0ZUNoYW5nZShib29sIG9u
bGluZSkKLXsKLSAgICBpZiAobV9pc09uTGluZSA9PSBvbmxpbmUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1faXNPbkxpbmUgPSBvbmxpbmU7Ci0KLSAgICBub3RpZnlOZXR3b3JrU3RhdGVDaGFu
Z2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Byb3h5U2VydmVyQmxhY2tCZXJyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1By
b3h5U2VydmVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9Qcm94eVNlcnZlckJsYWNrQmVycnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQcm94eVNlcnZl
ci5oIgotCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1WZWN0b3I8UHJveHlTZXJ2ZXI+IHByb3h5U2VydmVyc0Zv
clVSTChjb25zdCBVUkwmLCBjb25zdCBOZXR3b3JraW5nQ29udGV4dCopCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVmVjdG9yPFByb3h5U2VydmVyPigpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUVycm9yLmgJKHJldmlzaW9uIDE2
MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNv
dXJjZUVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIFJlc291cmNlRXJyb3JfaAotI2Rl
ZmluZSBSZXNvdXJjZUVycm9yX2gKLQotI2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNlLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1YmxpYyBSZXNv
dXJjZUVycm9yQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGh0
dHBFcnJvckRvbWFpbjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgcGxhdGZvcm1FcnJv
ckRvbWFpbjsKLQotICAgIFJlc291cmNlRXJyb3IoKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZXNv
dXJjZUVycm9yKGNvbnN0IFN0cmluZyYgZG9tYWluLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGZhaWxpbmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3JpcHRpb24pCi0gICAg
ICAgIDogUmVzb3VyY2VFcnJvckJhc2UoZG9tYWluLCBlcnJvckNvZGUsIGZhaWxpbmdVUkwsIGxv
Y2FsaXplZERlc2NyaXB0aW9uKQotICAgIHsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBSZXNvdXJjZUVycm9yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUVycm9yQmxhY2tCZXJyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlRXJyb3JCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3JCbGFja0Jl
cnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUVycm9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgY2hhciogY29u
c3QgUmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yRG9tYWluID0gIkhUVFAiOwotY29uc3QgY2hhciog
Y29uc3QgUmVzb3VyY2VFcnJvcjo6cGxhdGZvcm1FcnJvckRvbWFpbiA9ICJCbGFja0JlcnJ5UGxh
dGZvcm0iOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tC
ZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0KLSNpbmNsdWRlICJFdmVudExvb3AuaCIKLSNpbmNs
dWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5oIgot
I2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHRCbGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAi
TmV0d29ya01hbmFnZXIuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUVycm9yLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKLSNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgotI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIgLy8gZm9yIFN0b3JlZENyZWRlbnRp
YWxzCi0KLSNpbmNsdWRlIDxuZXR3b3JrL0ZpbHRlclN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciA6IHB1YmxpYyBSZXNvdXJj
ZUhhbmRsZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0
YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgaW50KTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSk7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9y
Jik7Ci0KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc291cmNlUmVzcG9uc2UoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc3BvbnNlOyB9Ci0gICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKCkgY29u
c3QgeyByZXR1cm4gbV9lcnJvcjsgfQotICAgIFZlY3RvcjxjaGFyPiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhOyB9Ci0gICAgYm9vbCBpc0RvbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRG9u
ZTsgfQotCi1wcml2YXRlOgotICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKLSAgICBS
ZXNvdXJjZUVycm9yIG1fZXJyb3I7Ci0gICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKLSAgICBib29s
IG1faXNEb25lOwotfTsKLQotV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpXZWJDb3JlU3luY2hy
b25vdXNMb2FkZXIoKQotICAgIDogbV9pc0RvbmUoZmFsc2UpCi17Ci19Ci0KLXZvaWQgV2ViQ29y
ZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBtX3Jlc3BvbnNlID0gcmVz
cG9uc2U7Ci19Ci0KLXZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRSZWNlaXZlRGF0
YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgaW50
KQotewotICAgIG1fZGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBXZWJDb3Jl
U3luY2hyb25vdXNMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3Vi
bGUpCi17Ci0gICAgbV9pc0RvbmUgPSB0cnVlOwotfQotCi12b2lkIFdlYkNvcmVTeW5jaHJvbm91
c0xvYWRlcjo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKQotewotICAgIG1fZXJyb3IgPSBlcnJvcjsKLSAgICBtX2lzRG9uZSA9IHRydWU7Ci19Ci0K
LVJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1SZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFJlc291cmNlSGFuZGxlOjps
b2Fkc0Jsb2NrZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcoYm9v
bCBkZWZlcnNMb2FkaW5nKQotewotICAgIE5ldHdvcmtNYW5hZ2VyOjppbnN0YW5jZSgpLT5zZXRE
ZWZlcnNMb2FkaW5nKHRoaXMsIGRlZmVyc0xvYWRpbmcpOwotfQotCi1ib29sIFJlc291cmNlSGFu
ZGxlOjpzdGFydCgpCi17Ci0gICAgaWYgKCFkLT5tX2NvbnRleHQgfHwgIWQtPm1fY29udGV4dC0+
aXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogY2xlYW4g
dXAgdXNlIG9mIEZyYW1lIG5vdyB0aGF0IHdlIGhhdmUgTmV0d29ya2luZ0NvbnRleHQgKHNlZSBS
SU0gQnVnICMxNTE1KQotICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lTmV0d29y
a2luZ0NvbnRleHRCbGFja0JlcnJ5Kj4oZC0+bV9jb250ZXh0LmdldCgpKS0+ZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+bG9hZGVyKCkgfHwgIWZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCkgfHwgIWNsaWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHBsYXll
cklkID0gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKSktPnBsYXllcklkKCk7Ci0gICAgaWYgKE5ldHdvcmtNYW5hZ2VyOjpp
bnN0YW5jZSgpLT5zdGFydEpvYihwbGF5ZXJJZCwgdGhpcywgZnJhbWUsIGQtPm1fZGVmZXJzTG9h
ZGluZykgIT0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbTo6U3RhdHVzU3VjY2Vz
cykKLSAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGF1c2VMb2FkKGJvb2wgcGF1c2Up
Ci17Ci0gICAgaWYgKE5ldHdvcmtNYW5hZ2VyOjppbnN0YW5jZSgpKQotICAgICAgICBOZXR3b3Jr
TWFuYWdlcjo6aW5zdGFuY2UoKS0+cGF1c2VMb2FkKHRoaXMsIHBhdXNlKTsKLX0KLQotdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKLXsKLSAgICBOZXR3b3JrTWFuYWdlcjo6aW5zdGFuY2Uo
KS0+c3RvcEpvYih0aGlzKTsKLSAgICBzZXRDbGllbnQoMCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VI
YW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50
aWFscywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpCi17Ci0gICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgQVNTRVJUKGZhbHNlICYmICJsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5IGNhbGxlZCB3aXRoIGludmFsaWQgbmV0d29ya2luZyBjb250ZXh0Iik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogY2xlYW4gdXAgdXNlIG9mIEZyYW1lIG5vdyB0
aGF0IHdlIGhhdmUgTmV0d29ya2luZ0NvbnRleHQgKHNlZSBSSU0gQnVnICMxNTE1KQotICAgIEZy
YW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lTmV0d29ya2luZ0NvbnRleHRCbGFja0JlcnJ5
Kj4oY29udGV4dCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmxvYWRlcigp
IHx8ICFmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpIHx8ICFmcmFtZS0+cGFnZSgpKSB7Ci0gICAg
ICAgIEFTU0VSVChmYWxzZSAmJiAibG9hZFJlc291cmNlU3luY2hyb25vdXNseSBjYWxsZWQgd2l0
aG91dCBhIGZyYW1lIG9yIGZyYW1lIGNsaWVudCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgUGFnZUdyb3VwTG9hZERlZmVycmVyIGRlZmVycmVyKGZyYW1lLT5wYWdlKCksIHRydWUp
OwotICAgIFRpbWVyQmFzZTo6ZmlyZVRpbWVyc0luTmVzdGVkRXZlbnRMb29wKCk7Ci0KLSAgICBp
bnQgcGxheWVySWQgPSBzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkqPihm
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+cGxheWVySWQoKTsKLQotICAgIFdlYkNvcmVTeW5j
aHJvbm91c0xvYWRlciBzeW5jTG9hZGVyOwotCi0gICAgYm9vbCBkZWZlcnNMb2FkaW5nID0gZmFs
c2U7Ci0gICAgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSBmYWxzZTsKLQotICAgIFJlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKGNvbnRl
eHQsIHJlcXVlc3QsICZzeW5jTG9hZGVyLCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250ZW50U25p
ZmYpKTsKLSAgICBpbnQgc3RhdHVzID0gTmV0d29ya01hbmFnZXI6Omluc3RhbmNlKCktPnN0YXJ0
Sm9iKHBsYXllcklkLCBoYW5kbGUsIGZyYW1lLCBkZWZlcnNMb2FkaW5nKTsKLSAgICBpZiAoc3Rh
dHVzICE9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJTdHJlYW06OlN0YXR1c1N1Y2Nlc3Mp
IHsKLSAgICAgICAgaGFuZGxlLT5jYW5jZWwoKTsKLSAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVy
cm9yKFJlc291cmNlRXJyb3I6OnBsYXRmb3JtRXJyb3JEb21haW4sIHN0YXR1cywgcmVxdWVzdC51
cmwoKS5zdHJpbmcoKSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmco
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBkb3VibGUgc3luY0xvYWRU
aW1lT3V0ID0gNjA7IC8vIHNlY29uZHMKLQotICAgIGRvdWJsZSBzdGFydFRpbWUgPSBjdXJyZW50
VGltZSgpOwotICAgIEV2ZW50TG9vcCBsb29wOwotICAgIHdoaWxlICghc3luY0xvYWRlci5pc0Rv
bmUoKSAmJiAhbG9vcC5lbmRlZCgpKSB7Ci0gICAgICAgIGxvb3AuY3ljbGUoKTsKLSAgICAgICAg
aWYgKGN1cnJlbnRUaW1lKCkgLSBzdGFydFRpbWUgPiBzeW5jTG9hZFRpbWVPdXQpIHsKLSAgICAg
ICAgICAgIGhhbmRsZS0+Y2FuY2VsKCk7Ci0gICAgICAgICAgICBlcnJvciA9IFJlc291cmNlRXJy
b3IoUmVzb3VyY2VFcnJvcjo6cGxhdGZvcm1FcnJvckRvbWFpbiwgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkZpbHRlclN0cmVhbTo6U3RhdHVzTmV0d29ya0Vycm9yLCByZXF1ZXN0LnVybCgpLnN0cmlu
ZygpLCAiVGltZSBvdXQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGVycm9yID0gc3luY0xvYWRlci5yZXNvdXJjZUVycm9yKCk7Ci0gICAgZGF0YSA9IHN5
bmNMb2FkZXIuZGF0YSgpOwotICAgIHJlc3BvbnNlID0gc3luY0xvYWRlci5yZXNvdXJjZVJlc3Bv
bnNlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VS
ZXF1ZXN0LmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwx
NTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaWZuZGVmIFJlc291cmNlUmVxdWVzdF9oCi0jZGVmaW5lIFJlc291cmNlUmVxdWVzdF9oCi0K
LSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3RCYXNlLmgiCi0KLW5hbWVzcGFjZSBCbGFja0JlcnJ5
IHsKLW5hbWVzcGFjZSBQbGF0Zm9ybSB7Ci1jbGFzcyBOZXR3b3JrUmVxdWVzdDsKLX0KLX0KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZXNvdXJjZVJlcXVlc3QgOiBwdWJsaWMgUmVz
b3VyY2VSZXF1ZXN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgLy8gVGhlIHR5cGUgb2YgdGhpcyBSZXNv
dXJjZVJlcXVlc3QsIGJhc2VkIG9uIGhvdyB0aGUgcmVzb3VyY2Ugd2lsbCBiZSB1c2VkLgotICAg
IGVudW0gVGFyZ2V0VHlwZSB7Ci0gICAgICAgIFRhcmdldElzTWFpbkZyYW1lLAotICAgICAgICBU
YXJnZXRJc1N1YmZyYW1lLAotICAgICAgICBUYXJnZXRJc1N1YnJlc291cmNlLCAvLyBSZXNvdXJj
ZSBpcyBhIGdlbmVyaWMgc3VicmVzb3VyY2UuIChHZW5lcmFsbHkgYSBzcGVjaWZpYyB0eXBlIHNo
b3VsZCBiZSBzcGVjaWZpZWQpCi0gICAgICAgIFRhcmdldElzU3R5bGVTaGVldCwKLSAgICAgICAg
VGFyZ2V0SXNTY3JpcHQsCi0gICAgICAgIFRhcmdldElzRm9udFJlc291cmNlLAotICAgICAgICBU
YXJnZXRJc0ltYWdlLAotICAgICAgICBUYXJnZXRJc09iamVjdCwKLSAgICAgICAgVGFyZ2V0SXNN
ZWRpYSwKLSAgICAgICAgVGFyZ2V0SXNXb3JrZXIsCi0gICAgICAgIFRhcmdldElzU2hhcmVkV29y
a2VyLAotICAgICAgICBUYXJnZXRJc1ByZWZldGNoLAotICAgICAgICBUYXJnZXRJc0Zhdmljb24s
Ci0gICAgICAgIFRhcmdldElzWEhSLAotICAgICAgICBUYXJnZXRJc1RleHRUcmFjaywKLSAgICAg
ICAgVGFyZ2V0SXNVbnNwZWNpZmllZCwKLSAgICB9OwotICAgIFJlc291cmNlUmVxdWVzdChjb25z
dCBTdHJpbmcmIHVybCkKLSAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKFVSTChQYXJzZWRV
UkxTdHJpbmcsIHVybCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgICwgbV9pc1hN
TEhUVFBSZXF1ZXN0KGZhbHNlKQotICAgICAgICAsIG1fbXVzdEhhbmRsZUludGVybmFsbHkoZmFs
c2UpCi0gICAgICAgICwgbV9mb3JjZURvd25sb2FkKGZhbHNlKQotICAgICAgICAsIG1fdGFyZ2V0
VHlwZShUYXJnZXRJc1Vuc3BlY2lmaWVkKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZVJl
cXVlc3QoY29uc3QgVVJMJiB1cmwpCi0gICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSh1cmws
IFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgICwgbV9pc1hNTEhUVFBSZXF1ZXN0KGZh
bHNlKQotICAgICAgICAsIG1fbXVzdEhhbmRsZUludGVybmFsbHkoZmFsc2UpCi0gICAgICAgICwg
bV9mb3JjZURvd25sb2FkKGZhbHNlKQotICAgICAgICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1Vu
c3BlY2lmaWVkKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5
IHBvbGljeSA9IFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgIDogUmVzb3VyY2VSZXF1
ZXN0QmFzZSh1cmwsIHBvbGljeSkKLSAgICAgICAgLCBtX2lzWE1MSFRUUFJlcXVlc3QoZmFsc2Up
Ci0gICAgICAgICwgbV9tdXN0SGFuZGxlSW50ZXJuYWxseShmYWxzZSkKLSAgICAgICAgLCBtX2Zv
cmNlRG93bmxvYWQoZmFsc2UpCi0gICAgICAgICwgbV90YXJnZXRUeXBlKFRhcmdldElzVW5zcGVj
aWZpZWQpCi0gICAgewotICAgICAgICBzZXRIVFRQUmVmZXJyZXIocmVmZXJyZXIpOwotICAgIH0K
LQotICAgIFJlc291cmNlUmVxdWVzdCgpCi0gICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShV
UkwoKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKLSAgICAgICAgLCBtX2lzWE1MSFRUUFJlcXVl
c3QoZmFsc2UpCi0gICAgICAgICwgbV9tdXN0SGFuZGxlSW50ZXJuYWxseShmYWxzZSkKLSAgICAg
ICAgLCBtX2ZvcmNlRG93bmxvYWQoZmFsc2UpCi0gICAgICAgICwgbV90YXJnZXRUeXBlKFRhcmdl
dElzVW5zcGVjaWZpZWQpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgc2V0VG9rZW4oY29uc3Qg
U3RyaW5nJiB0b2tlbikgeyBtX3Rva2VuID0gdG9rZW47IH0KLSAgICBTdHJpbmcgdG9rZW4oKSBj
b25zdCB7IHJldHVybiBtX3Rva2VuOyB9Ci0KLSAgICAvLyBGSVhNRTogRm9yIFJJTSBCdWcgIzQ1
Mi4gVGhlIEJsYWNrQmVycnkgYXBwbGljYXRpb24gd2FudHMgdGhlIGFuY2hvciB0ZXh0IGZvciBh
IGNsaWNrZWQgaHlwZXJsaW5rIHNvIGFzIHRvCi0gICAgLy8gbWFrZSBhbiBpbmZvcm1lZCBkZWNp
c2lvbiBhcyB0byB3aGV0aGVyIHRvIGFsbG93IHRoZSBuYXZpZ2F0aW9uLiBXZSBzaG91bGQgbW92
ZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaW50byBhCi0gICAgLy8gVUkvUG9saWN5IGRlbGVnYXRlLgot
ICAgIHZvaWQgc2V0QW5jaG9yVGV4dChjb25zdCBTdHJpbmcmIGFuY2hvclRleHQpIHsgbV9hbmNo
b3JUZXh0ID0gYW5jaG9yVGV4dDsgfQotICAgIFN0cmluZyBhbmNob3JUZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmNob3JUZXh0OyB9Ci0KLSAgICB2b2lkIHNldE92ZXJyaWRlQ29udGVudFR5cGUo
Y29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgeyBtX292ZXJyaWRlQ29udGVudFR5cGUgPSBjb250
ZW50VHlwZTsgfQotICAgIFN0cmluZyBvdmVycmlkZUNvbnRlbnRUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9vdmVycmlkZUNvbnRlbnRUeXBlOyB9Ci0KLSAgICB2b2lkIHNldElzWE1MSFRUUFJlcXVl
c3QoYm9vbCBpc1hNTEhUVFBSZXF1ZXN0KSB7IG1faXNYTUxIVFRQUmVxdWVzdCA9IGlzWE1MSFRU
UFJlcXVlc3Q7IH0KLSAgICBib29sIGlzWE1MSFRUUFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBt
X2lzWE1MSFRUUFJlcXVlc3Q7IH0KLQotICAgIC8vIE1hcmtzIHJlcXVlc3RzIHdoaWNoIG11c3Qg
YmUgaGFuZGxlZCBieSB3ZWJraXQgZXZlbiBpZiBMaW5rc0hhbmRsZWRFeHRlcm5hbGx5IGlzIHNl
dC4KLSAgICB2b2lkIHNldE11c3RIYW5kbGVJbnRlcm5hbGx5KGJvb2wgbXVzdEhhbmRsZUludGVy
bmFsbHkpIHsgbV9tdXN0SGFuZGxlSW50ZXJuYWxseSA9IG11c3RIYW5kbGVJbnRlcm5hbGx5OyB9
Ci0gICAgYm9vbCBtdXN0SGFuZGxlSW50ZXJuYWxseSgpIGNvbnN0IHsgcmV0dXJuIG1fbXVzdEhh
bmRsZUludGVybmFsbHk7IH0KLQotICAgIHZvaWQgaW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdChC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3QmLCBib29sIGNvb2tpZXNFbmFibGVk
LCBib29sIGlzSW5pdGlhbCA9IGZhbHNlLCBib29sIHJlcmVhZENvb2tpZXMgPSBmYWxzZSkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRGb3JjZURvd25sb2FkKGJvb2wgZm9yY2VEb3dubG9hZCkgeyBtX2Zv
cmNlRG93bmxvYWQgPSBmb3JjZURvd25sb2FkOyB9Ci0gICAgYm9vbCBmb3JjZURvd25sb2FkKCkg
Y29uc3QgeyByZXR1cm4gbV9mb3JjZURvd25sb2FkOyB9Ci0gICAgdm9pZCBzZXRTdWdnZXN0ZWRT
YXZlTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9zdWdnZXN0ZWRTYXZlTmFtZSA9IG5hbWU7
IH0KLSAgICBTdHJpbmcgc3VnZ2VzdGVkU2F2ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX3N1Z2dl
c3RlZFNhdmVOYW1lOyB9Ci0KLSAgICAvLyBXaGF0IHRoaXMgcmVxdWVzdCBpcyBmb3IuCi0gICAg
VGFyZ2V0VHlwZSB0YXJnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRUeXBlOyB9Ci0g
ICAgdm9pZCBzZXRUYXJnZXRUeXBlKFRhcmdldFR5cGUgdHlwZSkgeyBtX3RhcmdldFR5cGUgPSB0
eXBlOyB9Ci0KLSAgICBzdGF0aWMgVGFyZ2V0VHlwZSB0YXJnZXRUeXBlRnJvbU1pbWVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOwotCi0gICAgdm9pZCBjbGVhckhUVFBDb250ZW50TGVuZ3Ro
KCk7Ci0gICAgdm9pZCBjbGVhckhUVFBDb250ZW50VHlwZSgpOwotCi1wcml2YXRlOgotICAgIGZy
aWVuZCBjbGFzcyBSZXNvdXJjZVJlcXVlc3RCYXNlOwotCi0gICAgU3RyaW5nIG1fdG9rZW47Ci0g
ICAgU3RyaW5nIG1fYW5jaG9yVGV4dDsKLSAgICBTdHJpbmcgbV9vdmVycmlkZUNvbnRlbnRUeXBl
OwotICAgIFN0cmluZyBtX3N1Z2dlc3RlZFNhdmVOYW1lOwotICAgIGJvb2wgbV9pc1hNTEhUVFBS
ZXF1ZXN0OwotICAgIGJvb2wgbV9tdXN0SGFuZGxlSW50ZXJuYWxseTsKLSAgICBib29sIG1fZm9y
Y2VEb3dubG9hZDsKLSAgICBUYXJnZXRUeXBlIG1fdGFyZ2V0VHlwZTsKLQotICAgIHZvaWQgZG9V
cGRhdGVQbGF0Zm9ybVJlcXVlc3QoKSB7IH0KLSAgICB2b2lkIGRvVXBkYXRlUmVzb3VyY2VSZXF1
ZXN0KCkgeyB9Ci0gICAgdm9pZCBkb1VwZGF0ZVBsYXRmb3JtSFRUUEJvZHkoKSB7IH0KLSAgICB2
b2lkIGRvVXBkYXRlUmVzb3VyY2VIVFRQQm9keSgpIHsgfQotCi0gICAgUGFzc093blB0cjxDcm9z
c1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IGRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRy
PENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4pIGNvbnN0OwotICAgIHZvaWQgZG9QbGF0
Zm9ybUFkb3B0KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPik7Ci19
OwotCi1zdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhIDogcHVibGljIENyb3Nz
VGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YUJhc2UgewotICAgIFN0cmluZyBtX3Rva2VuOwotICAg
IFN0cmluZyBtX2FuY2hvclRleHQ7Ci0gICAgU3RyaW5nIG1fb3ZlcnJpZGVDb250ZW50VHlwZTsK
LSAgICBTdHJpbmcgbV9zdWdnZXN0ZWRTYXZlTmFtZTsKLSAgICBib29sIG1faXNYTUxIVFRQUmVx
dWVzdDsKLSAgICBib29sIG1fbXVzdEhhbmRsZUludGVybmFsbHk7Ci0gICAgYm9vbCBtX2ZvcmNl
RG93bmxvYWQ7Ci0gICAgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRUeXBlIG1fdGFyZ2V0VHlwZTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFJlc291cmNlUmVxdWVz
dF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVz
b3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3Bw
CShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Js
YWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMjYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgotCi0jaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5SW1wbC5oIgotI2luY2x1ZGUgIkNvb2tpZU1h
bmFnZXIuaCIKLSNpbmNsdWRlIDxuZXR3b3JrL05ldHdvcmtSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi11bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0
KCkKLXsKLSAgICByZXR1cm4gMTAwMDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTmV0d29ya1JlcXVl
c3Q6OkNhY2hlUG9saWN5IHBsYXRmb3JtQ2FjaGVQb2xpY3lGb3JSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBzd2l0Y2ggKHJlcXVlc3QuY2FjaGVQb2xpY3ko
KSkgewotICAgIGNhc2UgV2ViQ29yZTo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeToKLSAgICAgICAg
cmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpVc2VQcm90b2NvbENhY2hlUG9saWN5OwotICAgIGNhc2Ug
V2ViQ29yZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGE6Ci0gICAgICAgIHJldHVybiBOZXR3b3Jr
UmVxdWVzdDo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGE7Ci0gICAgY2FzZSBXZWJDb3JlOjpSZXR1
cm5DYWNoZURhdGFFbHNlTG9hZDoKLSAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpSZXR1
cm5DYWNoZURhdGFFbHNlTG9hZDsKLSAgICBjYXNlIFdlYkNvcmU6OlJldHVybkNhY2hlRGF0YURv
bnRMb2FkOgotICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlJldHVybkNhY2hlRGF0YURv
bnRMb2FkOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VXNl
UHJvdG9jb2xDYWNoZVBvbGljeTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTmV0d29ya1Jl
cXVlc3Q6OlRhcmdldFR5cGUgcGxhdGZvcm1UYXJnZXRUeXBlRm9yUmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgaWYgKHJlcXVlc3QuaXNYTUxIVFRQUmVxdWVz
dCgpKQotICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzWE1MSFRUUFJlcXVl
c3Q7Ci0gICAgaWYgKHJlcXVlc3QuZm9yY2VEb3dubG9hZCgpKQotICAgICAgICByZXR1cm4gTmV0
d29ya1JlcXVlc3Q6OlRhcmdldElzRG93bmxvYWQ7Ci0KLSAgICBzd2l0Y2ggKHJlcXVlc3QudGFy
Z2V0VHlwZSgpKSB7Ci0gICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzTWFpbkZyYW1l
OgotICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzTWFpbkZyYW1lOwotICAg
IGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1N1YmZyYW1lOgotICAgICAgICByZXR1cm4g
TmV0d29ya1JlcXVlc3Q6OlRhcmdldElzU3ViZnJhbWU7Ci0gICAgY2FzZSBSZXNvdXJjZVJlcXVl
c3Q6OlRhcmdldElzU3VicmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6
VGFyZ2V0SXNTdWJyZXNvdXJjZTsKLSAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNT
dHlsZVNoZWV0OgotICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzU3R5bGVT
aGVldDsKLSAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTY3JpcHQ6Ci0gICAgICAg
IHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNTY3JpcHQ7Ci0gICAgY2FzZSBSZXNvdXJj
ZVJlcXVlc3Q6OlRhcmdldElzRm9udFJlc291cmNlOgotICAgICAgICByZXR1cm4gTmV0d29ya1Jl
cXVlc3Q6OlRhcmdldElzRm9udFJlc291cmNlOwotICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpU
YXJnZXRJc0ltYWdlOgotICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzSW1h
Z2U7Ci0gICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzT2JqZWN0OgotICAgICAgICBy
ZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzT2JqZWN0OwotICAgIGNhc2UgUmVzb3VyY2VS
ZXF1ZXN0OjpUYXJnZXRJc01lZGlhOgotICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRh
cmdldElzTWVkaWE7Ci0gICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzV29ya2VyOgot
ICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzV29ya2VyOwotICAgIGNhc2Ug
UmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1NoYXJlZFdvcmtlcjoKLSAgICAgICAgcmV0dXJuIE5l
dHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1NoYXJlZFdvcmtlcjsKLQotICAgICAgICAvLyBGSVhNRTog
dGhpcyBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gdGhlIHJpZ2h0IHZhbHVlLCBidXQKLSAgICAgICAg
Ly8gd2UgbmVlZCB0byBjb29yZGluYXRlIHdpdGggQUlSIGFwaSBjaGFuZ2UuCi0gICAgY2FzZSBS
ZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzRmF2aWNvbjoKLSAgICAgICAgcmV0dXJuIE5ldHdvcmtS
ZXF1ZXN0OjpUYXJnZXRJc0ltYWdlOwotICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJ
c1ByZWZldGNoOgotICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzU3VicmVz
b3VyY2U7Ci0gICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzWEhSOgotICAgICAgICBy
ZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzU3VicmVzb3VyY2U7Ci0gICAgY2FzZSBSZXNv
dXJjZVJlcXVlc3Q6OlRhcmdldElzVGV4dFRyYWNrOgotICAgICAgICByZXR1cm4gTmV0d29ya1Jl
cXVlc3Q6OlRhcmdldElzU3VicmVzb3VyY2U7Ci0gICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRh
cmdldElzVW5zcGVjaWZpZWQ6Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0
SXNTdWJyZXNvdXJjZTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzVW5rbm93bjsKLSAg
ICB9Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0
VHlwZT4gTWltZVR5cGVSZXNvdXJjZVJlcXVlc3RUeXBlTWFwOwotCi1zdGF0aWMgY29uc3QgTWlt
ZVR5cGVSZXNvdXJjZVJlcXVlc3RUeXBlTWFwJiBtaW1lVHlwZVJlcXVlc3RUeXBlTWFwKCkKLXsK
LSAgICBzdGF0aWMgTWltZVR5cGVSZXNvdXJjZVJlcXVlc3RUeXBlTWFwKiBtYXAgPSAwOwotICAg
IGlmICghbWFwKSB7Ci0gICAgICAgIG1hcCA9IG5ldyBNaW1lVHlwZVJlc291cmNlUmVxdWVzdFR5
cGVNYXA7Ci0KLSAgICAgICAgaWYgKG1hcCkgewotICAgICAgICAgICAgLy8gVGhlIGxpc3QgaGVy
ZSBzaG91bGQgbWF0Y2ggZXh0ZW5zaW9uTWFwW10gaW4gTUlNRVR5cGVSZWdpc3RyeUJsYWNrQmVy
cnkuY3BwCi0gICAgICAgICAgICBtYXAtPmFkZChTdHJpbmcoInRleHQvY3NzIiksIFJlc291cmNl
UmVxdWVzdDo6VGFyZ2V0SXNTdHlsZVNoZWV0KTsKLSAgICAgICAgICAgIG1hcC0+YWRkKFN0cmlu
ZygiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiksIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNT
Y3JpcHQpOwotICAgICAgICAgICAgbWFwLT5hZGQoU3RyaW5nKCJpbWFnZS9ibXAiKSwgUmVzb3Vy
Y2VSZXF1ZXN0OjpUYXJnZXRJc0ltYWdlKTsKLSAgICAgICAgICAgIG1hcC0+YWRkKFN0cmluZygi
aW1hZ2UvZ2lmIiksIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNJbWFnZSk7Ci0gICAgICAgICAg
ICBtYXAtPmFkZChTdHJpbmcoImltYWdlL3gtaWNvbiIpLCBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdl
dElzSW1hZ2UpOwotICAgICAgICAgICAgbWFwLT5hZGQoU3RyaW5nKCJpbWFnZS9qcGVnIiksIFJl
c291cmNlUmVxdWVzdDo6VGFyZ2V0SXNJbWFnZSk7Ci0gICAgICAgICAgICBtYXAtPmFkZChTdHJp
bmcoImltYWdlL3BuZyIpLCBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzSW1hZ2UpOwotICAgICAg
ICAgICAgbWFwLT5hZGQoU3RyaW5nKCJpbWFnZS94LXBvcnRhYmxlLWJpdG1hcCIpLCBSZXNvdXJj
ZVJlcXVlc3Q6OlRhcmdldElzSW1hZ2UpOwotICAgICAgICAgICAgbWFwLT5hZGQoU3RyaW5nKCJp
bWFnZS94LXBvcnRhYmxlLWdyYXltYXAiKSwgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc0ltYWdl
KTsKLSAgICAgICAgICAgIG1hcC0+YWRkKFN0cmluZygiaW1hZ2UveC1wb3J0YWJsZS1waXhtYXAi
KSwgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc0ltYWdlKTsKLSAgICAgICAgICAgIG1hcC0+YWRk
KFN0cmluZygiaW1hZ2Uvc3ZnK3htbCIpLCBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzSW1hZ2Up
OwotICAgICAgICAgICAgbWFwLT5hZGQoU3RyaW5nKCJpbWFnZS90aWZmIiksIFJlc291cmNlUmVx
dWVzdDo6VGFyZ2V0SXNJbWFnZSk7Ci0gICAgICAgICAgICBtYXAtPmFkZChTdHJpbmcoImltYWdl
L3gteGJpdG1hcCIpLCBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzSW1hZ2UpOwotICAgICAgICAg
ICAgbWFwLT5hZGQoU3RyaW5nKCJpbWFnZS94LXhwbSIpLCBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdl
dElzSW1hZ2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICptYXA7Ci19Ci0KLVJl
c291cmNlUmVxdWVzdDo6VGFyZ2V0VHlwZSBSZXNvdXJjZVJlcXVlc3Q6OnRhcmdldFR5cGVGcm9t
TWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBjb25zdCBNaW1lVHlwZVJl
c291cmNlUmVxdWVzdFR5cGVNYXAmIG1hcCA9IG1pbWVUeXBlUmVxdWVzdFR5cGVNYXAoKTsKLQot
ICAgIE1pbWVUeXBlUmVzb3VyY2VSZXF1ZXN0VHlwZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IG1hcC5maW5kKG1pbWVUeXBlKTsKLSAgICBpZiAoaXRlciA9PSBtYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzVW5zcGVjaWZpZWQ7Ci0KLSAgICByZXR1
cm4gaXRlci0+dmFsdWU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojppbml0aWFsaXplUGxh
dGZvcm1SZXF1ZXN0KE5ldHdvcmtSZXF1ZXN0JiBwbGF0Zm9ybVJlcXVlc3QsIGJvb2wgY29va2ll
c0VuYWJsZWQsIGJvb2wgaXNJbml0aWFsLCBib29sIHJlcmVhZENvb2tpZXMpIGNvbnN0Ci17Ci0g
ICAgLy8gSWYgdGhpcyBpcyB0aGUgaW5pdGlhbCBsb2FkLCBza2lwIHRoZSByZXF1ZXN0IGJvZHkg
YW5kIGhlYWRlcnMuCi0gICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgcGxhdGZvcm1SZXF1ZXN0
LnNldFJlcXVlc3RJbml0aWFsKHRpbWVvdXRJbnRlcnZhbCgpKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgcGxhdGZvcm1SZXF1ZXN0LnNldFJlcXVlc3RVcmwodXJsKCkuc3RyaW5nKCksCi0gICAgICAg
ICAgICBodHRwTWV0aG9kKCksCi0gICAgICAgICAgICAgICAgcGxhdGZvcm1DYWNoZVBvbGljeUZv
clJlcXVlc3QoKnRoaXMpLAotICAgICAgICAgICAgICAgIHBsYXRmb3JtVGFyZ2V0VHlwZUZvclJl
cXVlc3QoKnRoaXMpLAotICAgICAgICAgICAgICAgIHRpbWVvdXRJbnRlcnZhbCgpKTsKLQotICAg
ICAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0Q29uZGl0aW9uYWwoaXNDb25kaXRpb25hbCgpKTsKLSAg
ICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNldFN1Z2dlc3RlZFNhdmVOYW1lKHN1Z2dlc3RlZFNhdmVO
YW1lKCkpOwotCi0gICAgICAgIGlmIChodHRwQm9keSgpICYmICFodHRwQm9keSgpLT5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEgPSBodHRwQm9keSgp
OwotI2lmIEVOQUJMRShCTE9CKQotICAgICAgICAgICAgZm9ybURhdGEgPSBmb3JtRGF0YS0+cmVz
b2x2ZUJsb2JSZWZlcmVuY2VzKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxG
b3JtRGF0YUVsZW1lbnQ+JiBlbGVtZW50cyA9IGZvcm1EYXRhLT5lbGVtZW50cygpOwotICAgICAg
ICAgICAgLy8gVXNlIHNldERhdGEgZm9yIHNpbXBsZSBmb3JtcyBiZWNhdXNlIGl0IGlzIHNsaWdo
dGx5IG1vcmUgZWZmaWNpZW50LgotICAgICAgICAgICAgaWYgKGVsZW1lbnRzLnNpemUoKSA9PSAx
ICYmIGVsZW1lbnRzWzBdLm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpCi0gICAgICAg
ICAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNldERhdGEoZWxlbWVudHNbMF0ubV9kYXRhLmRhdGEo
KSwgZWxlbWVudHNbMF0ubV9kYXRhLnNpemUoKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlbGVtZW50ID0g
ZWxlbWVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBG
b3JtRGF0YUVsZW1lbnQ6OmRhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybVJl
cXVlc3QuYWRkTXVsdGlwYXJ0RGF0YShlbGVtZW50Lm1fZGF0YS5kYXRhKCksIGVsZW1lbnQubV9k
YXRhLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQubV90eXBl
ID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBwbGF0Zm9ybVJlcXVlc3QuYWRkTXVsdGlwYXJ0RmlsZW5hbWUoZWxlbWVudC5tX2ZpbGVuYW1l
LmNoYXJhY3RlcnMoKSwgZWxlbWVudC5tX2ZpbGVuYW1lLmxlbmd0aCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIEJsb2JzIHNob3VsZCBiZSByZXNvbHZlZCBhdCB0aGlzIHBvaW50LgotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdoZW4gUmVz
b3VyY2VSZXF1ZXN0IGlzIHJldXNlZCBieSBDYWNoZVJlc291cmNlTG9hZGVyLCBwYWdlIHJlZnJl
c2hpbmcgb3IgcmVkaXJlY3Rpb24sIGl0cyBjb29raWVzIG1heSBiZSBkaXJ0aWVkLiBXZSB3b24n
dCB1c2UgdGhlc2UgY29va2llcyBhbnkgbW9yZS4KLSAgICAgICAgYm9vbCBjb29raWVIZWFkZXJN
YXlCZURpcnR5ID0gcmVyZWFkQ29va2llcyB8fCBjYWNoZVBvbGljeSgpID09IFdlYkNvcmU6OlJl
bG9hZElnbm9yaW5nQ2FjaGVEYXRhIHx8IGNhY2hlUG9saWN5KCkgPT0gV2ViQ29yZTo6UmV0dXJu
Q2FjaGVEYXRhRWxzZUxvYWQ7Ci0KLSAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBodHRwSGVhZGVy
RmllbGRzKCkuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+a2V5
OwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnZhbHVlOwotICAgICAgICAgICAgaWYg
KCFrZXkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGtleSwgIkNvb2tpZSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHdvbid0IHVzZSB0
aGUgb2xkIGNvb2tpZXMgb2YgcmVzb3VyY2VSZXF1ZXN0IGZvciBuZXcgbG9jYXRpb24gYmVjYXVz
ZSB0aGVzZSBjb29raWVzIG1heSBiZSBjaGFuZ2VkIGJ5IHJlZGlyZWN0aW9uLgotICAgICAgICAg
ICAgICAgICAgICBpZiAoY29va2llSGVhZGVyTWF5QmVEaXJ0eSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNr
IHRoZSBlbmNvZGluZyBhbmQgZW5jb2RlIHRoZSBjb29raWUncyB2YWx1ZSB1c2luZyBsYXRpbjEg
b3IgdXRmOCB0byBzdXBwb3J0IHVuaWNvZGUgZGF0YS4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCF2YWx1ZS5jb250YWluc09ubHlMYXRpbjEoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
cGxhdGZvcm1SZXF1ZXN0LmFkZEhlYWRlcigiQ29va2llIiwgdmFsdWUudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwbGF0Zm9ybVJlcXVlc3QuYWRk
SGVhZGVyKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gSWYgcmVxdWVzdCdzIGNvb2tpZXMgbWF5IGJlIGRpcnR5LCB0aGV5IG11c3QgYmUgc2V0IGFn
YWluLgotICAgICAgICAvLyBJZiB0aGVyZSBhcmVuJ3QgY29va2llcyBpbiB0aGUgaGVhZGVyIGxp
c3QsIHdlIG5lZWQgdHJ5aW5nIHRvIGFkZCBjb29raWVzLgotICAgICAgICBpZiAoY29va2llc0Vu
YWJsZWQgJiYgKGNvb2tpZUhlYWRlck1heUJlRGlydHkgfHwgIWh0dHBIZWFkZXJGaWVsZHMoKS5j
b250YWlucygiQ29va2llIikpICYmICF1cmwoKS5pc051bGwoKSkgewotICAgICAgICAgICAgLy8g
UHJlcGFyZSBhIGNvb2tpZSBoZWFkZXIgaWYgdGhlcmUgYXJlIGNvb2tpZXMgcmVsYXRlZCB0byB0
aGlzIHVybC4KLSAgICAgICAgICAgIFN0cmluZyBjb29raWVQYWlycyA9IGNvb2tpZU1hbmFnZXIo
KS5nZXRDb29raWUodXJsKCksIFdpdGhIdHRwT25seUNvb2tpZXMpOwotICAgICAgICAgICAgaWYg
KCFjb29raWVQYWlycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcGxhdGZvcm1SZXF1ZXN0
LmFkZEhlYWRlcigiQ29va2llIiwgY29va2llUGFpcnMuY29udGFpbnNPbmx5TGF0aW4xKCkgPyBj
b29raWVQYWlycy5sYXRpbjEoKS5kYXRhKCkgOiBjb29raWVQYWlycy51dGY4KCkuZGF0YSgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICghaHR0cEhlYWRlckZpZWxkcygpLmNvbnRhaW5zKCJB
Y2NlcHQtTGFuZ3VhZ2UiKSkKLSAgICAgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5hZGRBY2NlcHRM
YW5ndWFnZUhlYWRlcigpOwotICAgIH0KLX0KLQotUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291
cmNlUmVxdWVzdERhdGE+IFJlc291cmNlUmVxdWVzdDo6ZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NP
d25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiBkYXRhKSBjb25zdAotewotICAg
IGRhdGEtPm1fdG9rZW4gPSBtX3Rva2VuOwotICAgIGRhdGEtPm1fYW5jaG9yVGV4dCA9IG1fYW5j
aG9yVGV4dDsKLSAgICBkYXRhLT5tX292ZXJyaWRlQ29udGVudFR5cGUgPSBtX292ZXJyaWRlQ29u
dGVudFR5cGU7Ci0gICAgZGF0YS0+bV9zdWdnZXN0ZWRTYXZlTmFtZSA9IG1fc3VnZ2VzdGVkU2F2
ZU5hbWU7Ci0gICAgZGF0YS0+bV9pc1hNTEhUVFBSZXF1ZXN0ID0gbV9pc1hNTEhUVFBSZXF1ZXN0
OwotICAgIGRhdGEtPm1fbXVzdEhhbmRsZUludGVybmFsbHkgPSBtX211c3RIYW5kbGVJbnRlcm5h
bGx5OwotICAgIGRhdGEtPm1fZm9yY2VEb3dubG9hZCA9IG1fZm9yY2VEb3dubG9hZDsKLSAgICBk
YXRhLT5tX3RhcmdldFR5cGUgPSBtX3RhcmdldFR5cGU7Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1BsYXRmb3JtQWRvcHQoUGFzc093blB0cjxDcm9zc1Ro
cmVhZFJlc291cmNlUmVxdWVzdERhdGE+IGRhdGEpCi17Ci0gICAgbV90b2tlbiA9IGRhdGEtPm1f
dG9rZW47Ci0gICAgbV9hbmNob3JUZXh0ID0gZGF0YS0+bV9hbmNob3JUZXh0OwotICAgIG1fb3Zl
cnJpZGVDb250ZW50VHlwZSA9IGRhdGEtPm1fb3ZlcnJpZGVDb250ZW50VHlwZTsKLSAgICBtX3N1
Z2dlc3RlZFNhdmVOYW1lID0gZGF0YS0+bV9zdWdnZXN0ZWRTYXZlTmFtZTsKLSAgICBtX2lzWE1M
SFRUUFJlcXVlc3QgPSBkYXRhLT5tX2lzWE1MSFRUUFJlcXVlc3Q7Ci0gICAgbV9tdXN0SGFuZGxl
SW50ZXJuYWxseSA9IGRhdGEtPm1fbXVzdEhhbmRsZUludGVybmFsbHk7Ci0gICAgbV9mb3JjZURv
d25sb2FkID0gZGF0YS0+bV9mb3JjZURvd25sb2FkOwotICAgIG1fdGFyZ2V0VHlwZSA9IGRhdGEt
Pm1fdGFyZ2V0VHlwZTsKLX0KLQotdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmNsZWFySFRUUENvbnRl
bnRMZW5ndGgoKQotewotICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwotCi0gICAgbV9odHRw
SGVhZGVyRmllbGRzLnJlbW92ZSgiQ29udGVudC1MZW5ndGgiKTsKLQotICAgIGlmICh1cmwoKS5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRl
ZCA9IGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlUmVxdWVzdDo6Y2xlYXJIVFRQQ29udGVudFR5
cGUoKQotewotICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwotCi0gICAgbV9odHRwSGVhZGVy
RmllbGRzLnJlbW92ZSgiQ29udGVudC1UeXBlIik7Ci0KLSAgICBpZiAodXJsKCkucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxz
ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVzcG9uc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXNw
b25zZS5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQot
I2lmbmRlZiBSZXNvdXJjZVJlc3BvbnNlX2gKLSNkZWZpbmUgUmVzb3VyY2VSZXNwb25zZV9oCi0K
LSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIFJlc291cmNlUmVzcG9uc2UgOiBwdWJsaWMgUmVzb3VyY2VSZXNwb25zZUJhc2Ug
ewotcHVibGljOgotICAgIFJlc291cmNlUmVzcG9uc2UoKQotICAgICAgICA6IG1faXNNdWx0aXBh
cnRQYXlsb2FkKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZVJlc3BvbnNlKGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRM
ZW5ndGgsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSkKLSAgICAgICAgOiBSZXNvdXJjZVJlc3BvbnNlQmFzZSh1cmwsIG1pbWVUeXBlLCBleHBl
Y3RlZExlbmd0aCwgdGV4dEVuY29kaW5nTmFtZSwgZmlsZW5hbWUpCi0gICAgICAgICwgbV9pc011
bHRpcGFydFBheWxvYWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIFBhc3NPd25QdHI8Q3Jv
c3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25Q
dHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4pIGNvbnN0OwotICAgIHZvaWQgZG9Q
bGF0Zm9ybUFkb3B0KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4p
OwotCi0gICAgdm9pZCBzZXRJc011bHRpcGFydFBheWxvYWQoYm9vbCB2YWx1ZSkgeyBtX2lzTXVs
dGlwYXJ0UGF5bG9hZCA9IHZhbHVlOyB9Ci0gICAgYm9vbCBpc011bHRpcGFydFBheWxvYWQoKSBj
b25zdCB7IHJldHVybiBtX2lzTXVsdGlwYXJ0UGF5bG9hZDsgfQotCi0gICAgYm9vbCBwbGF0Zm9y
bVJlc3BvbnNlSXNVcFRvRGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBtX2lzTXVsdGlwYXJ0UGF5bG9hZDsKLX07Ci0KLXN0cnVjdCBDcm9zc1RocmVh
ZFJlc291cmNlUmVzcG9uc2VEYXRhIDogcHVibGljIENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25z
ZURhdGFCYXNlIHsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFJl
c291cmNlUmVzcG9uc2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9i
bGFja2JlcnJ5L1Jlc291cmNlUmVzcG9uc2VCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXNwb25z
ZUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXNwb25zZUJsYWNrQmVycnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVz
cG9uc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPENyb3NzVGhyZWFk
UmVzb3VyY2VSZXNwb25zZURhdGE+IFJlc291cmNlUmVzcG9uc2U6OmRvUGxhdGZvcm1Db3B5RGF0
YShQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IGRhdGEpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KLXZvaWQgUmVzb3VyY2VSZXNwb25zZTo6ZG9QbGF0
Zm9ybUFkb3B0KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4pCi17
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9Tb2NrZXRTdHJlYW1FcnJvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9Tb2NrZXRTdHJlYW1F
cnJvci5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2JsYWNrYmVycnkvU29ja2V0U3RyZWFtRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNlb2tqdSBLd29uIChzZW9ranUu
a3dvbkBnbWFpbC5jb20pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBTb2NrZXRTdHJlYW1FcnJvcl9oCi0jZGVmaW5lIFNvY2tldFN0
cmVhbUVycm9yX2gKLQotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yQmFzZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUVycm9yIDogcHVibGljIFNvY2tl
dFN0cmVhbUVycm9yQmFzZSB7Ci1wdWJsaWM6Ci0gICAgU29ja2V0U3RyZWFtRXJyb3IoKSB7IH0K
LSAgICBleHBsaWNpdCBTb2NrZXRTdHJlYW1FcnJvcihpbnQgZXJyb3JDb2RlKQotICAgICAgICA6
IFNvY2tldFN0cmVhbUVycm9yQmFzZShlcnJvckNvZGUpCi0gICAgewotICAgIH0KLSAgICBTb2Nr
ZXRTdHJlYW1FcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nJiBkZXNjcmlwdGlvbikKLSAgICAgICAgOiBTb2NrZXRTdHJlYW1FcnJvckJhc2UoZXJy
b3JDb2RlLCBTdHJpbmcoKSwgZGVzY3JpcHRpb24pCi0gICAgewotICAgIH0KLQotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU29ja2V0U3RyZWFtRXJyb3JfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1NvY2tldFN0cmVh
bUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
YmxhY2tiZXJyeS9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1NvY2tldFN0cmVhbUhhbmRs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
U29ja2V0U3RyZWFtSGFuZGxlX2gKLSNkZWZpbmUgU29ja2V0U3RyZWFtSGFuZGxlX2gKLQotI2lu
Y2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKLQotI2luY2x1ZGUgPG5ldHdvcmsvRmls
dGVyU3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLWNsYXNzIENyZWRlbnRpYWw7
Ci1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUhh
bmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4sIHB1YmxpYyBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtLCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxl
QmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxl
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBncm91cE5hbWUsIGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQqIGNsaWVudCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNvY2tldFN0
cmVhbUhhbmRsZShncm91cE5hbWUsIHVybCwgY2xpZW50KSk7IH0KLQotICAgIHZpcnR1YWwgflNv
Y2tldFN0cmVhbUhhbmRsZSgpOwotCi0gICAgLy8gRmlsdGVyU3RyZWFtIGludGVyZmFjZQotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlTdGF0dXNSZWNlaXZlZChpbnQgc3RhdHVzLCBjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5RGF0YVJlY2VpdmVkKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrQnVmZmVyKik7Ci0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeVJlYWR5VG9TZW5kRGF0YSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlDbG9zZShpbnQgc3RhdHVzKTsKLSAgICB2aXJ0dWFsIGludCBzdGF0dXMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXR1czsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBpbnQgcGxh
dGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUNsb3NlKCk7Ci0KLXByaXZhdGU6Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKGNv
bnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQqKTsKLQotICAgIE93blB0cjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtPiBt
X3NvY2tldFN0cmVhbTsKLSAgICBpbnQgbV9zdGF0dXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBTb2NrZXRTdHJlYW1IYW5kbGVfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1NvY2tldFN0cmVhbUhhbmRsZUJsYWNr
QmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
YmxhY2tiZXJyeS9Tb2NrZXRTdHJlYW1IYW5kbGVCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYx
NTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1NvY2tl
dFN0cmVhbUhhbmRsZUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTb2NrZXRT
dHJlYW1IYW5kbGUuaCIKLQotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudEJsYWNrQmVycnku
aCIKLSNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5o
IgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgotCi0jaW5jbHVkZSA8bmV0
d29yay9OZXR3b3JrU3RyZWFtRmFjdG9yeS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0
cmVhbUhhbmRsZShjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSwgY29uc3QgVVJMJiB1cmwsIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KQotICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFz
ZSh1cmwsIGNsaWVudCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAl
cCBuZXcgY2xpZW50ICVwIiwgdGhpcywgbV9jbGllbnQpOwotCi0gICAgLy8gRmluZCBhIHBsYXll
cklkIHRvIHBhc3MgdG8gdGhlIHBsYXRmb3JtIGNsaWVudC4gSXQgY2FuIGJlIGZyb20gYW55IHBh
Z2UKLSAgICAvLyBpbiB0aGUgUGFnZUdyb3VwLCBzaW5jZSB0aGV5IGFsbCBzaGFyZSB0aGUgc2Ft
ZSBuZXR3b3JrIHByb2ZpbGUgYW5kCi0gICAgLy8gcmVzb3VyY2VzLgotICAgIFBhZ2VHcm91cCog
cGFnZUdyb3VwID0gUGFnZUdyb3VwOjpwYWdlR3JvdXAoZ3JvdXBOYW1lKTsKLSAgICBBU1NFUlQo
cGFnZUdyb3VwICYmICFwYWdlR3JvdXAtPnBhZ2VzKCkuaXNFbXB0eSgpKTsKLSAgICBQYWdlKiBw
YWdlID0gKihwYWdlR3JvdXAtPnBhZ2VzKCkuYmVnaW4oKSk7Ci0gICAgQVNTRVJUKHBhZ2UgJiYg
cGFnZS0+bWFpbkZyYW1lKCkpOwotICAgIGludCBwbGF5ZXJJZCA9IHN0YXRpY19jYXN0PEZyYW1l
TG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+Y2xp
ZW50KCkpLT5wbGF5ZXJJZCgpOwotCi0gICAgLy8gQ3JlYXRlIGEgcGxhdGZvcm0gc29ja2V0IHN0
cmVhbQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrU3RyZWFtRmFjdG9yeSogZmFj
dG9yeSA9IHBhZ2UtPmNocm9tZSgpLnBsYXRmb3JtUGFnZUNsaWVudCgpLT5uZXR3b3JrU3RyZWFt
RmFjdG9yeSgpOwotICAgIEFTU0VSVChmYWN0b3J5KTsKLQotICAgIC8vIE9wZW4gdGhlIHNvY2tl
dAotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdCByZXF1ZXN0OwotICAg
IFNUQVRJQ19MT0NBTF9TVFJJTkcoc19jb25uZWN0LCAiQ09OTkVDVCIpOwotICAgIHJlcXVlc3Qu
c2V0UmVxdWVzdFVybCh1cmwuc3RyaW5nKCksIHNfY29ubmVjdCk7Ci0gICAgbV9zb2NrZXRTdHJl
YW0gPSBhZG9wdFB0cihmYWN0b3J5LT5jcmVhdGVOZXR3b3JrU3RyZWFtKHJlcXVlc3QsIHBsYXll
cklkKSk7Ci0gICAgQVNTRVJUKG1fc29ja2V0U3RyZWFtKTsKLQotICAgIG1fc29ja2V0U3RyZWFt
LT5zZXRMaXN0ZW5lcih0aGlzKTsKLSAgICBtX3NvY2tldFN0cmVhbS0+c3RyZWFtT3BlbigpOwot
fQotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoKQotewotICAgIExP
RyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIGRlbGV0ZSIsIHRoaXMpOwotICAgIHNl
dENsaWVudCgwKTsKLX0KLQotaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNv
bnN0IGNoYXIqIGJ1ZiwgaW50IGxlbmd0aCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0
cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybVNlbmQiLCB0aGlzKTsKLSAgICBBU1NFUlQobV9zb2NrZXRT
dHJlYW0pOwotICAgIHJldHVybiBtX3NvY2tldFN0cmVhbS0+c3RyZWFtU2VuZERhdGEoYnVmLCBs
ZW5ndGgpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCi17
Ci0gICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIs
IHRoaXMpOwotICAgIEFTU0VSVChtX3NvY2tldFN0cmVhbSk7Ci0gICAgbV9zb2NrZXRTdHJlYW0t
PnN0cmVhbUNsb3NlKCk7Ci19Ci0KLS8vIEZpbHRlclN0cmVhbSBpbnRlcmZhY2UKLQotdm9pZCBT
b2NrZXRTdHJlYW1IYW5kbGU6Om5vdGlmeVN0YXR1c1JlY2VpdmVkKGludCBzdGF0dXMsIGNvbnN0
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmKQotewotICAgIEFTU0VSVChtX2NsaWVudCk7
Ci0KLSAgICAvLyBUaGUgY2xpZW50IGNhbiBjbG9zZSB0aGUgaGFuZGxlLCBwb3RlbnRpYWxseSBy
ZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UuCi0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRs
ZT4gcHJvdGVjdCh0aGlzKTsKLSAgICBtX3N0YXR1cyA9IHN0YXR1czsKLSAgICBpZiAoRmlsdGVy
U3RyZWFtOjpTdGF0dXNTdWNjZXNzICE9IHN0YXR1cykKLSAgICAgICAgbV9jbGllbnQtPmRpZEZh
aWxTb2NrZXRTdHJlYW0odGhpcywgU29ja2V0U3RyZWFtRXJyb3Ioc3RhdHVzLCBtZXNzYWdlKSk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fc3RhdGUgPSBPcGVuOwotICAgICAgICBtX2NsaWVudC0+
ZGlkT3BlblNvY2tldFN0cmVhbSh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlOjpub3RpZnlEYXRhUmVjZWl2ZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtC
dWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBBU1NFUlQobV9jbGllbnQpOwotCi0gICAgLy8gVGhlIGNs
aWVudCBjYW4gY2xvc2UgdGhlIGhhbmRsZSwgcG90ZW50aWFsbHkgcmVtb3ZpbmcgdGhlIGxhc3Qg
cmVmZXJlbmNlLgotICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3QodGhpcyk7
Ci0gICAgbV9jbGllbnQtPmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKHRoaXMsIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpuZXR3b3JrQnVmZmVyRGF0YShidWZmZXIpLCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6bmV0d29ya0J1ZmZlckRhdGFMZW5ndGgoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlOjpub3RpZnlSZWFkeVRvU2VuZERhdGEoKQotewotICAgIHNlbmRQZW5kaW5n
RGF0YSgpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6bm90aWZ5Q2xvc2UoaW50IHN0
YXR1cykKLXsKLSAgICBBU1NFUlQobV9jbGllbnQpOwotCi0gICAgLy8gVGhlIGNsaWVudCBjYW4g
Y2xvc2UgdGhlIGhhbmRsZSwgcG90ZW50aWFsbHkgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNl
LgotICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3QodGhpcyk7Ci0KLSAgICBp
ZiAoc3RhdHVzIDwgMCB8fCAoNDAwIDw9IHN0YXR1cyAmJiBzdGF0dXMgPCA2MDApKQotICAgICAg
ICBtX3N0YXR1cyA9IHN0YXR1czsKLQotICAgIGlmIChGaWx0ZXJTdHJlYW06OlN0YXR1c1N1Y2Nl
c3MgIT0gc3RhdHVzKQotICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbFNvY2tldFN0cmVhbSh0aGlz
LCBTb2NrZXRTdHJlYW1FcnJvcihzdGF0dXMpKTsKLQotICAgIG1fY2xpZW50LT5kaWRDbG9zZVNv
Y2tldFN0cmVhbSh0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1MxMFBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L3Jzcy9SU1MxMFBhcnNlci5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTMTBQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJSU1MxMFBhcnNlci5oIgotCi0jaW5jbHVkZSAiQmxhY2tCZXJyeVBsYXRmb3JtQXNzZXJ0
LmgiCi0jaW5jbHVkZSAibGlieG1sL3BhcnNlci5oIgotI2luY2x1ZGUgImxpYnhtbC94bWx3cml0
ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SU1MxMFBhcnNlcjo6UlNTMTBQYXJzZXIo
KQotewotfQotCi1ib29sIFJTUzEwUGFyc2VyOjpwYXJzZUJ1ZmZlcihjb25zdCBjaGFyKiBidWZm
ZXIsIGludCBsZW5ndGgsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogZW5jb2RpbmcpCi17
Ci0gICAgcmV0dXJuIHBhcnNlWG1sRG9jKHhtbFJlYWRNZW1vcnkoYnVmZmVyLCBsZW5ndGgsIHVy
bCwgZW5jb2RpbmcsIFhNTF9QQVJTRV9OT0JMQU5LUyB8IFhNTF9QQVJTRV9OT05FVCkpOwotfQot
Ci1ib29sIFJTUzEwUGFyc2VyOjpwYXJzZVhtbERvYyh4bWxEb2NQdHIgZG9jKQotewotICAgIGlm
ICghZG9jKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB4bWxOb2RlKiBub2RlID0geG1s
RG9jR2V0Um9vdEVsZW1lbnQoZG9jKTsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgeG1sRnJl
ZURvYyhkb2MpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yICg7IG5v
ZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KG5vZGUtPm5hbWUpKTsKLQotICAgICAgICBpZiAobmFtZSA9PSAi
UkRGIikgewotICAgICAgICAgICAgeG1sTm9kZSogY2hpbGRub2RlID0gbm9kZS0+Y2hpbGRyZW47
Ci0gICAgICAgICAgICBmb3IgKDsgY2hpbGRub2RlOyBjaGlsZG5vZGUgPSBjaGlsZG5vZGUtPm5l
eHQpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGRub2RlLT50eXBlID09IFhNTF9FTEVNRU5U
X05PREUpIHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IFN0cmluZyhyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihjaGlsZG5vZGUtPm5hbWUpKTsKLSAgICAgICAgICAgICAgICAgICAg
bmFtZSA9IG5hbWUubG93ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gImNo
YW5uZWwiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCTEFDS0JFUlJZX0FTU0VSVCghbV9y
b290KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9yb290KQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcm9vdCA9IHBhcnNlRmVlZChjaGlsZG5vZGUtPmNoaWxkcmVuKTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJpdGVtIikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgQkxBQ0tCRVJSWV9BU1NFUlQobV9yb290KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX3Jvb3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
U1NJdGVtKiBpdGVtID0gcGFyc2VJdGVtKGNoaWxkbm9kZS0+Y2hpbGRyZW4pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpdGVtKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3Jvb3QtPm1faXRlbXMuYXBwZW5kKGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgeG1sRnJlZURvYyhkb2MpOwotCi0gICAgcmV0
dXJuIG1fcm9vdDsKLX0KLQotYm9vbCBSU1MxMFBhcnNlcjo6cGFyc2VJdGVtQmFzZUF0dHJpYnV0
ZShSU1NJdGVtQmFzZSogaXRlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCB4bWxOb2RlKiBub2RlKQot
ewotICAgIGlmIChuYW1lID09ICJsaW5rIikKLSAgICAgICAgaXRlbS0+bV9saW5rID0gdGV4dEZy
b21YTUxOb2RlKG5vZGUpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gInRpdGxlIikKLSAgICAgICAg
aXRlbS0+bV90aXRsZSA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICBlbHNlIGlmIChuYW1l
ID09ICJkZXNjcmlwdGlvbiIpCi0gICAgICAgIGl0ZW0tPm1fZGVzY3JpcHRpb24gPSB0ZXh0RnJv
bVhNTE5vZGUobm9kZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotUlNTSXRlbSogUlNTMTBQYXJzZXI6OnBhcnNlSXRlbSh4bWxOb2Rl
KiBub2RlKQotewotICAgIEJMQUNLQkVSUllfQVNTRVJUKG5vZGUpOwotCi0gICAgUlNTSXRlbSog
aXRlbSA9IG5ldyBSU1NJdGVtKCk7Ci0KLSAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPm5l
eHQpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
bm9kZS0+bmFtZSkpOwotICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpOwotCi0gICAgICAgIHBh
cnNlSXRlbUJhc2VBdHRyaWJ1dGUoaXRlbSwgbmFtZSwgbm9kZSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGl0ZW07Ci19Ci0KLVJTU0ZlZWQqIFJTUzEwUGFyc2VyOjpwYXJzZUZlZWQoeG1sTm9kZSog
bm9kZSkKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VSVChub2RlKTsKLQotICAgIFJTU0ZlZWQqIGZl
ZWQgPSBuZXcgUlNTRmVlZCgpOwotCi0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0
KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5v
ZGUtPm5hbWUpKTsKLSAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKTsKLQotICAgICAgICBwYXJz
ZUl0ZW1CYXNlQXR0cmlidXRlKGZlZWQsIG5hbWUsIG5vZGUpOwotICAgIH0KLQotICAgIHJldHVy
biBmZWVkOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTUzEwUGFyc2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1Mx
MFBhcnNlci5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTUzEwUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaWZuZGVmIFJTUzEwUGFyc2VyX2gKLSNkZWZpbmUgUlNTMTBQYXJzZXJf
aAotCi0jaW5jbHVkZSAiUlNTUGFyc2VyQmFzZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFJTUzEwUGFyc2VyIDogcHVibGljIFJTU1BhcnNlckJhc2UgewotcHVibGljOgotICAg
IFJTUzEwUGFyc2VyKCk7Ci0KLSAgICBib29sIHBhcnNlQnVmZmVyKGNvbnN0IGNoYXIqIGJ1ZmZl
ciwgaW50IGxlbmd0aCwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiBlbmNvZGluZyk7Ci0K
LXByaXZhdGU6Ci0gICAgYm9vbCBwYXJzZVhtbERvYyh4bWxEb2NQdHIpOwotICAgIGJvb2wgcGFy
c2VJdGVtQmFzZUF0dHJpYnV0ZShSU1NJdGVtQmFzZSosIGNvbnN0IFN0cmluZyYgbmFtZSwgeG1s
Tm9kZSopOwotICAgIFJTU0l0ZW0qIHBhcnNlSXRlbSh4bWxOb2RlKik7Ci0gICAgUlNTRmVlZCog
cGFyc2VGZWVkKHhtbE5vZGUqKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFJTUzEwUGFyc2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvYmxhY2tiZXJyeS9yc3MvUlNTMjBQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTMjBQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNr
YmVycnkvcnNzL1JTUzIwUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUlNTMjBQYXJzZXIuaCIKLQotI2lu
Y2x1ZGUgIkJsYWNrQmVycnlQbGF0Zm9ybUFzc2VydC5oIgotI2luY2x1ZGUgImxpYnhtbC9wYXJz
ZXIuaCIKLSNpbmNsdWRlICJsaWJ4bWwveG1sd3JpdGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotUlNTMjBQYXJzZXI6OlJTUzIwUGFyc2VyKCkKLXsKLX0KLQotYm9vbCBSU1MyMFBhcnNl
cjo6cGFyc2VCdWZmZXIoY29uc3QgY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoLCBjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIGVuY29kaW5nKQotewotICAgIHJldHVybiBwYXJzZVhtbERvYyh4
bWxSZWFkTWVtb3J5KGJ1ZmZlciwgbGVuZ3RoLCB1cmwsIGVuY29kaW5nLCBYTUxfUEFSU0VfTk9C
TEFOS1MgfCBYTUxfUEFSU0VfTk9ORVQpKTsKLX0KLQotYm9vbCBSU1MyMFBhcnNlcjo6cGFyc2VY
bWxEb2MoeG1sRG9jUHRyIGRvYykKLXsKLSAgICBpZiAoIWRvYykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgeG1sTm9kZSogbm9kZSA9IHhtbERvY0dldFJvb3RFbGVtZW50KGRvYyk7Ci0g
ICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIHhtbEZyZWVEb2MoZG9jKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewot
ICAgICAgICBTdHJpbmcgbmFtZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihub2RlLT5u
YW1lKSk7Ci0gICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCk7Ci0KLSAgICAgICAgaWYgKG5hbWUg
PT0gInJzcyIpIHsKLSAgICAgICAgICAgIHhtbE5vZGUqIGNoYW5uZWwgPSBub2RlLT5jaGlsZHJl
bjsKLSAgICAgICAgICAgIGlmIChjaGFubmVsLT50eXBlID09IFhNTF9FTEVNRU5UX05PREUpIHsK
LSAgICAgICAgICAgICAgICBuYW1lID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2hh
bm5lbC0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKTsKLSAgICAg
ICAgICAgICAgICBpZiAobmFtZSA9PSAiY2hhbm5lbCIpCi0gICAgICAgICAgICAgICAgICAgIG1f
cm9vdCA9IHBhcnNlRmVlZChjaGFubmVsLT5jaGlsZHJlbik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHhtbEZyZWVEb2MoZG9jKTsK
LQotICAgIHJldHVybiBtX3Jvb3Q7Ci19Ci0KLWJvb2wgUlNTMjBQYXJzZXI6OnBhcnNlSXRlbUJh
c2VBdHRyaWJ1dGUoUlNTSXRlbUJhc2UqIGl0ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgeG1sTm9k
ZSogbm9kZSkKLXsKLSAgICBpZiAobmFtZSA9PSAibGluayIpCi0gICAgICAgIGl0ZW0tPm1fbGlu
ayA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICBlbHNlIGlmIChuYW1lID09ICJ0aXRsZSIp
Ci0gICAgICAgIGl0ZW0tPm1fdGl0bGUgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgZWxz
ZSBpZiAobmFtZSA9PSAiZGVzY3JpcHRpb24iKQotICAgICAgICBpdGVtLT5tX2Rlc2NyaXB0aW9u
ID0gdGV4dEZyb21YTUxOb2RlKG5vZGUpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gInB1YmRhdGUi
KQotICAgICAgICBpdGVtLT5tX3B1YkRhdGUgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUlNT
SXRlbSogUlNTMjBQYXJzZXI6OnBhcnNlSXRlbSh4bWxOb2RlKiBub2RlKQotewotICAgIEJMQUNL
QkVSUllfQVNTRVJUKG5vZGUpOwotCi0gICAgUlNTSXRlbSogaXRlbSA9IG5ldyBSU1NJdGVtKCk7
Ci0KLSAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICAgICAgU3RyaW5n
IG5hbWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obm9kZS0+bmFtZSkpOwotICAgICAg
ICBuYW1lID0gbmFtZS5sb3dlcigpOwotCi0gICAgICAgIGlmIChwYXJzZUl0ZW1CYXNlQXR0cmli
dXRlKGl0ZW0sIG5hbWUsIG5vZGUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aWYgKG5hbWUgPT0gImF1dGhvciIpCi0gICAgICAgICAgICBpdGVtLT5tX2F1dGhvciA9IHRleHRG
cm9tWE1MTm9kZShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAiY3JlYXRvciIpIHsK
LSAgICAgICAgICAgIGlmIChpdGVtLT5tX2F1dGhvci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgaXRlbS0+bV9hdXRob3IgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAobmFtZSA9PSAiY2F0ZWdvcnkiKQotICAgICAgICAgICAgaXRlbS0+bV9jYXRlZ29yaWVz
LmFwcGVuZCh0ZXh0RnJvbVhNTE5vZGUobm9kZSkpOwotICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJjb21tZW50cyIpCi0gICAgICAgICAgICBpdGVtLT5tX2NvbW1lbnRzID0gdGV4dEZyb21YTUxO
b2RlKG5vZGUpOwotICAgICAgICBlbHNlIGlmIChuYW1lID09ICJlbmNsb3N1cmUiKSB7Ci0gICAg
ICAgICAgICAvLyBSaWdodCBub3cgd2UgYXNzdW1lIHRoZXJlIGlzIG9ubHkgb25lIGVuY2xvc3Vy
ZSBwZXIgaXRlbSwgYW5kIHdlIGhhbmRsZSBvbmx5Ci0gICAgICAgICAgICAvLyB0aGUgZmlyc3Qg
ZW5jbG9zdXJlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBvbmVzLgotICAgICAgICAgICAgLy8gUmVm
ZXJlbmNlOiBodHRwOi8vd3d3LnJzc2JvYXJkLm9yZy9yc3MtcHJvZmlsZSNlbGVtZW50LWNoYW5u
ZWwtaXRlbS1lbmNsb3N1cmUKLSAgICAgICAgICAgIGlmICghaXRlbS0+bV9lbmNsb3N1cmUpCi0g
ICAgICAgICAgICAgICAgaXRlbS0+bV9lbmNsb3N1cmUgPSBwYXJzZUVuY2xvc3VyZShub2RlKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpdGVtOwotfQotCi1SU1NGZWVkKiBSU1My
MFBhcnNlcjo6cGFyc2VGZWVkKHhtbE5vZGUqIG5vZGUpCi17Ci0gICAgQkxBQ0tCRVJSWV9BU1NF
UlQobm9kZSk7Ci0KLSAgICBSU1NGZWVkKiBmZWVkID0gbmV3IFJTU0ZlZWQoKTsKLQotICAgIGZv
ciAoOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgICAgICBTdHJpbmcgbmFtZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihub2RlLT5uYW1lKSk7Ci0gICAgICAgIG5hbWUgPSBu
YW1lLmxvd2VyKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlSXRlbUJhc2VBdHRyaWJ1dGUoZmVlZCwg
bmFtZSwgbm9kZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAobmFtZSA9
PSAiaXRlbSIpCi0gICAgICAgICAgICBmZWVkLT5tX2l0ZW1zLmFwcGVuZChwYXJzZUl0ZW0obm9k
ZS0+Y2hpbGRyZW4pKTsKLSAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAibGFuZ3VhZ2UiKQotICAg
ICAgICAgICAgZmVlZC0+bV9sYW5ndWFnZSA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICAg
ICAgZWxzZSBpZiAobmFtZSA9PSAidHRsIikKLSAgICAgICAgICAgIGZlZWQtPm1fdHRsID0gdGV4
dEZyb21YTUxOb2RlKG5vZGUpOwotICAgIH0KLQotICAgIHJldHVybiBmZWVkOwotfQotCi1SU1NF
bmNsb3N1cmUqIFJTUzIwUGFyc2VyOjpwYXJzZUVuY2xvc3VyZSh4bWxOb2RlKiBub2RlKQotewot
ICAgIEJMQUNLQkVSUllfQVNTRVJUKG5vZGUpOwotCi0gICAgUlNTRW5jbG9zdXJlKiBlbmNsb3N1
cmUgPSBuZXcgUlNTRW5jbG9zdXJlKCk7Ci0KLSAgICBmb3IgKHhtbEF0dHIqIGF0dHIgPSBub2Rl
LT5wcm9wZXJ0aWVzOyBhdHRyOyBhdHRyID0gYXR0ci0+bmV4dCkgewotICAgICAgICBTdHJpbmcg
bmFtZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihhdHRyLT5uYW1lKSk7Ci0gICAgICAg
IG5hbWUgPSBuYW1lLmxvd2VyKCk7Ci0KLSAgICAgICAgaWYgKG5hbWUgPT0gInVybCIpCi0gICAg
ICAgICAgICBlbmNsb3N1cmUtPm1fdXJsID0gdGV4dEZyb21YTUxBdHRyKGF0dHIpOwotICAgICAg
ICBlbHNlIGlmIChuYW1lID09ICJ0eXBlIikKLSAgICAgICAgICAgIGVuY2xvc3VyZS0+bV90eXBl
ID0gdGV4dEZyb21YTUxBdHRyKGF0dHIpOwotICAgICAgICBlbHNlIGlmIChuYW1lID09ICJsZW5n
dGgiKQotICAgICAgICAgICAgZW5jbG9zdXJlLT5tX2xlbmd0aCA9IHRleHRGcm9tWE1MQXR0cihh
dHRyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW5jbG9zdXJlOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvcnNzL1JTUzIwUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1MyMFBhcnNlci5oCShyZXZpc2lvbiAxNjE1OTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTUzIw
UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIFJTUzIw
UGFyc2VyX2gKLSNkZWZpbmUgUlNTMjBQYXJzZXJfaAotCi0jaW5jbHVkZSAiUlNTUGFyc2VyQmFz
ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJTUzIwUGFyc2VyIDogcHVibGlj
IFJTU1BhcnNlckJhc2UgewotcHVibGljOgotICAgIFJTUzIwUGFyc2VyKCk7Ci0KLSAgICBib29s
IHBhcnNlQnVmZmVyKGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCwgY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiBlbmNvZGluZyk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBwYXJzZVht
bERvYyh4bWxEb2NQdHIpOwotICAgIGJvb2wgcGFyc2VJdGVtQmFzZUF0dHJpYnV0ZShSU1NJdGVt
QmFzZSosIGNvbnN0IFN0cmluZyYgbmFtZSwgeG1sTm9kZSopOwotICAgIFJTU0l0ZW0qIHBhcnNl
SXRlbSh4bWxOb2RlKik7Ci0gICAgUlNTRmVlZCogcGFyc2VGZWVkKHhtbE5vZGUqKTsKLSAgICBS
U1NFbmNsb3N1cmUqIHBhcnNlRW5jbG9zdXJlKHhtbE5vZGUqKTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFJTUzIwUGFyc2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTQXRvbVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jz
cy9SU1NBdG9tUGFyc2VyLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NBdG9tUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUlNTQXRvbVBhcnNlci5oIgotCi0jaW5jbHVkZSAiQmxhY2tCZXJyeVBsYXRmb3JtQXNzZXJ0
LmgiCi0jaW5jbHVkZSAibGlieG1sL3BhcnNlci5oIgotI2luY2x1ZGUgImxpYnhtbC94bWx3cml0
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBib29sIGlzUmVsYXRpdmVQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gIShwYXRoLnN0YXJ0c1dpdGgoIi8iKSB8fCBwYXRoLmZp
bmQoIjovIikgIT0gV1RGOjpub3RGb3VuZCk7Ci19Ci0KLVJTU0F0b21MaW5rOjpUeXBlIFJTU0F0
b21MaW5rOjpyZWxUeXBlKCkKLXsKLSAgICBpZiAobV90eXBlSW5FbnVtICE9IFR5cGVVbmtub3du
KQotICAgICAgICByZXR1cm4gbV90eXBlSW5FbnVtOwotCi0gICAgaWYgKG1fcmVsLmlzRW1wdHko
KSkKLSAgICAgICAgbV90eXBlSW5FbnVtID0gVHlwZUFsdGVybmF0ZTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgU3RyaW5nIGxvd3JlbCA9IG1fcmVsLmxvd2VyKCk7Ci0gICAgICAgIGlmIChsb3dyZWwg
PT0gImFsdGVybmF0ZSIpCi0gICAgICAgICAgICBtX3R5cGVJbkVudW0gPSBUeXBlQWx0ZXJuYXRl
OwotICAgICAgICBlbHNlIGlmIChsb3dyZWwgPT0gImVuY2xvc3VyZSIpCi0gICAgICAgICAgICBt
X3R5cGVJbkVudW0gPSBUeXBlRW5jbG9zdXJlOwotICAgICAgICBlbHNlIGlmIChsb3dyZWwgPT0g
InJlbGF0ZWQiKQotICAgICAgICAgICAgbV90eXBlSW5FbnVtID0gVHlwZVJlbGF0ZWQ7Ci0gICAg
ICAgIGVsc2UgaWYgKGxvd3JlbCA9PSAic2VsZiIpCi0gICAgICAgICAgICBtX3R5cGVJbkVudW0g
PSBUeXBlU2VsZjsKLSAgICAgICAgZWxzZSBpZiAobG93cmVsID09ICJ2aWEiKQotICAgICAgICAg
ICAgbV90eXBlSW5FbnVtID0gVHlwZVZpYTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV90
eXBlSW5FbnVtID0gVHlwZVVuc3VwcG9ydGVkOwotICAgIH0KLQotICAgIHJldHVybiBtX3R5cGVJ
bkVudW07Ci19Ci0KLVJTU0F0b21QYXJzZXI6OlJTU0F0b21QYXJzZXIoKQotewotfQotCi1ib29s
IFJTU0F0b21QYXJzZXI6OnBhcnNlQnVmZmVyKGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0
aCwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiBlbmNvZGluZykKLXsKLSAgICBtX3VybCA9
IFVSTChibGFua1VSTCgpLCB1cmwpOwotICAgIHJldHVybiBwYXJzZVhtbERvYyh4bWxSZWFkTWVt
b3J5KGJ1ZmZlciwgbGVuZ3RoLCB1cmwsIGVuY29kaW5nLCBYTUxfUEFSU0VfTk9CTEFOS1MgfCBY
TUxfUEFSU0VfTk9ORVQpKTsKLX0KLQotYm9vbCBSU1NBdG9tUGFyc2VyOjpwYXJzZVhtbERvYyh4
bWxEb2NQdHIgZG9jKQotewotICAgIGlmICghZG9jKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICB4bWxOb2RlKiBub2RlID0geG1sRG9jR2V0Um9vdEVsZW1lbnQoZG9jKTsKLSAgICBpZiAo
IW5vZGUpIHsKLSAgICAgICAgeG1sRnJlZURvYyhkb2MpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgICAg
IFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5vZGUtPm5hbWUpKTsK
LSAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKTsKLQotICAgICAgICBpZiAobmFtZSA9PSAiZmVl
ZCIpIHsKLSAgICAgICAgICAgIG1fcm9vdCA9IHBhcnNlRmVlZChub2RlLT5jaGlsZHJlbik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHhtbEZyZWVEb2MoZG9j
KTsKLSAgICByZXR1cm4gbV9yb290OwotfQotCi1ib29sIFJTU0F0b21QYXJzZXI6OnBhcnNlSXRl
bUJhc2VBdHRyaWJ1dGUoUlNTSXRlbUJhc2UqIGl0ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgeG1s
Tm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBiYXNlKQotewotICAgIGlmIChuYW1lID09ICJ0aXRs
ZSIpCi0gICAgICAgIGl0ZW0tPm1fdGl0bGUgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAg
ZWxzZSBpZiAobmFtZSA9PSAiaWQiKQotICAgICAgICBpdGVtLT5tX2lkID0gdGV4dEZyb21YTUxO
b2RlKG5vZGUpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gImF1dGhvciIpCi0gICAgICAgIGl0ZW0t
Pm1fYXV0aG9yID0gcGFyc2VBdXRob3Iobm9kZSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAidXBk
YXRlZCIpCi0gICAgICAgIGl0ZW0tPm1fdXBkYXRlZCA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsK
LSAgICBlbHNlIGlmIChuYW1lID09ICJjb250ZW50IikKLSAgICAgICAgaXRlbS0+bV9kZXNjcmlw
dGlvbiA9IHBhcnNlQ29udGVudChiYXNlLCBub2RlKTsKLSAgICBlbHNlIGlmIChuYW1lID09ICJw
dWJsaXNoZWQiKQotICAgICAgICBpdGVtLT5tX3B1YkRhdGUgPSB0ZXh0RnJvbVhNTE5vZGUobm9k
ZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotUlNTSXRlbSogUlNTQXRvbVBhcnNlcjo6cGFyc2VJdGVtKHhtbE5vZGUqIG5vZGUpCi17
Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQobm9kZSk7Ci0KLSAgICBSU1NJdGVtKiBpdGVtID0gbmV3
IFJTU0l0ZW0oKTsKLQotICAgIFN0cmluZyBiYXNlOwotICAgIGZvciAoeG1sQXR0ciogYXR0ciA9
IG5vZGUtPnByb3BlcnRpZXM7IGF0dHI7IGF0dHIgPSBhdHRyLT5uZXh0KSB7Ci0gICAgICAgIFN0
cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHItPm5hbWUpKTsKLSAg
ICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKTsKLSAgICAgICAgaWYgKG5hbWUgPT0gImJhc2UiKQot
ICAgICAgICAgICAgYmFzZSA9IHRleHRGcm9tWE1MQXR0cihhdHRyKTsKLSAgICB9Ci0KLSAgICBu
b2RlID0gbm9kZS0+Y2hpbGRyZW47Ci0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0
KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5v
ZGUtPm5hbWUpKTsKLSAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKTsKLQotICAgICAgICBpZiAo
cGFyc2VJdGVtQmFzZUF0dHJpYnV0ZShpdGVtLCBuYW1lLCBub2RlLCBiYXNlKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChuYW1lID09ICJsaW5rIikgewotICAgICAgICAg
ICAgUlNTQXRvbUxpbmsqIGxpbmsgPSBwYXJzZUxpbmsobm9kZSk7Ci0gICAgICAgICAgICBpZiAo
aXNSZWxhdGl2ZVBhdGgobGluay0+bV9ocmVmKSkKLSAgICAgICAgICAgICAgICBsaW5rLT5tX2hy
ZWYgPSBiYXNlICsgIi8iICsgbGluay0+bV9ocmVmOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGxp
bmstPnJlbFR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBSU1NBdG9tTGluazo6VHlwZUFsdGVy
bmF0ZToKLSAgICAgICAgICAgICAgICBpdGVtLT5tX2xpbmsgPSBsaW5rLT5tX2hyZWY7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJTU0F0b21MaW5rOjpUeXBlRW5j
bG9zdXJlOgotICAgICAgICAgICAgICAgIEJMQUNLQkVSUllfQVNTRVJUKCFpdGVtLT5tX2VuY2xv
c3VyZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdGVtLT5tX2VuY2xvc3VyZSkKLSAgICAgICAg
ICAgICAgICAgICAgaXRlbS0+bV9lbmNsb3N1cmUgPSBlbmNsb3N1cmVGcm9tTGluayhsaW5rKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWxldGUgbGluazsKLSAg
ICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJjYXRlZ29yeSIpCi0gICAgICAgICAgICBpdGVtLT5t
X2NhdGVnb3JpZXMuYXBwZW5kKHBhcnNlQ2F0ZWdvcnkobm9kZSkpOwotICAgIH0KLQotICAgIHJl
dHVybiBpdGVtOwotfQotCi1SU1NGZWVkKiBSU1NBdG9tUGFyc2VyOjpwYXJzZUZlZWQoeG1sTm9k
ZSogbm9kZSkKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VSVChub2RlKTsKLQotICAgIFJTU0ZlZWQq
IGZlZWQgPSBuZXcgUlNTRmVlZCgpOwotCi0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5u
ZXh0KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KG5vZGUtPm5hbWUpKTsKLSAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKTsKLQotICAgICAgICBp
ZiAocGFyc2VJdGVtQmFzZUF0dHJpYnV0ZShmZWVkLCBuYW1lLCBub2RlLCBlbXB0eVN0cmluZygp
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChuYW1lID09ICJlbnRyeSIp
Ci0gICAgICAgICAgICBmZWVkLT5tX2l0ZW1zLmFwcGVuZChwYXJzZUl0ZW0obm9kZSkpOwotICAg
ICAgICBlbHNlIGlmIChuYW1lID09ICJsaW5rIikgewotICAgICAgICAgICAgUlNTQXRvbUxpbmsq
IGxpbmsgPSBwYXJzZUxpbmsobm9kZSk7Ci0gICAgICAgICAgICBpZiAobGluay0+cmVsVHlwZSgp
ID09IFJTU0F0b21MaW5rOjpUeXBlQWx0ZXJuYXRlKQotICAgICAgICAgICAgICAgIGZlZWQtPm1f
bGluayA9IGxpbmstPm1faHJlZjsKLSAgICAgICAgICAgIGRlbGV0ZSBsaW5rOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZlZWQ7Ci19Ci0KLVJTU0F0b21MaW5rKiBSU1NBdG9tUGFy
c2VyOjpwYXJzZUxpbmsoeG1sTm9kZSogbm9kZSkKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VSVChu
b2RlKTsKLQotICAgIFJTU0F0b21MaW5rKiBsaW5rID0gbmV3IFJTU0F0b21MaW5rKCk7Ci0KLSAg
ICBmb3IgKHhtbEF0dHIqIGF0dHIgPSBub2RlLT5wcm9wZXJ0aWVzOyBhdHRyOyBhdHRyID0gYXR0
ci0+bmV4dCkgewotICAgICAgICBTdHJpbmcgbmFtZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihhdHRyLT5uYW1lKSk7Ci0gICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCk7Ci0KLSAgICAg
ICAgaWYgKG5hbWUgPT0gImhyZWYiKQotICAgICAgICAgICAgbGluay0+bV9ocmVmID0gdGV4dEZy
b21YTUxBdHRyKGF0dHIpOwotICAgICAgICBlbHNlIGlmIChuYW1lID09ICJyZWwiKQotICAgICAg
ICAgICAgbGluay0+bV9yZWwgPSB0ZXh0RnJvbVhNTEF0dHIoYXR0cik7Ci0gICAgICAgIGVsc2Ug
aWYgKG5hbWUgPT0gInR5cGUiKQotICAgICAgICAgICAgbGluay0+bV90eXBlID0gdGV4dEZyb21Y
TUxBdHRyKGF0dHIpOwotICAgICAgICBlbHNlIGlmIChuYW1lID09ICJocmVmbGFuZyIpCi0gICAg
ICAgICAgICBsaW5rLT5tX2hyZWZsYW5nID0gdGV4dEZyb21YTUxBdHRyKGF0dHIpOwotICAgICAg
ICBlbHNlIGlmIChuYW1lID09ICJ0aXRsZSIpCi0gICAgICAgICAgICBsaW5rLT5tX3RpdGxlID0g
dGV4dEZyb21YTUxBdHRyKGF0dHIpOwotICAgICAgICBlbHNlIGlmIChuYW1lID09ICJsZW5ndGgi
KQotICAgICAgICAgICAgbGluay0+bV9sZW5ndGggPSB0ZXh0RnJvbVhNTEF0dHIoYXR0cik7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGxpbms7Ci19Ci0KLVJTU0VuY2xvc3VyZSogUlNTQXRvbVBhcnNl
cjo6ZW5jbG9zdXJlRnJvbUxpbmsoUlNTQXRvbUxpbmsqIGxpbmspCi17Ci0gICAgQkxBQ0tCRVJS
WV9BU1NFUlQobGluayk7Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQobGluay0+cmVsVHlwZSgpID09
IFJTU0F0b21MaW5rOjpUeXBlRW5jbG9zdXJlKTsKLQotICAgIFJTU0VuY2xvc3VyZSogZW5jbG9z
dXJlID0gbmV3IFJTU0VuY2xvc3VyZSgpOwotCi0gICAgZW5jbG9zdXJlLT5tX3VybCA9IGxpbmst
Pm1faHJlZjsKLSAgICBlbmNsb3N1cmUtPm1fdHlwZSA9IGxpbmstPm1fdHlwZTsKLSAgICBlbmNs
b3N1cmUtPm1fbGVuZ3RoID0gbGluay0+bV9sZW5ndGg7Ci0KLSAgICByZXR1cm4gZW5jbG9zdXJl
OwotfQotCi1TdHJpbmcgUlNTQXRvbVBhcnNlcjo6cGFyc2VDb250ZW50KGNvbnN0IFN0cmluZyYg
YmFzZSwgeG1sTm9kZSogbm9kZSkKLXsKLSAgICAvLyBTZWU6IGh0dHA6Ly90b29scy5pZXRmLm9y
Zy9odG1sL3JmYzQyODcjcGFnZS0xNgotCi0gICAgQkxBQ0tCRVJSWV9BU1NFUlQobm9kZSk7Ci0g
ICAgLy8gV2h5IGRvZXMgQmxhY2tiZXJyeSBoYXZlIGl0cyBvd24gUlNTIHBhcnNlcj8KLQotICAg
IFN0cmluZyBjb250ZW50OwotICAgIFN0cmluZyB0eXBlID0gImRlZmF1bHQiOwotICAgIFN0cmlu
ZyBzcmM7Ci0gICAgZm9yICh4bWxBdHRyKiBhdHRyID0gbm9kZS0+cHJvcGVydGllczsgYXR0cjsg
YXR0ciA9IGF0dHItPm5leHQpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oYXR0ci0+bmFtZSkpOwotICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigp
OwotCi0gICAgICAgIGlmIChuYW1lID09ICJ0eXBlIikKLSAgICAgICAgICAgIHR5cGUgPSB0ZXh0
RnJvbVhNTEF0dHIoYXR0cik7Ci0gICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInNyYyIpCi0gICAg
ICAgICAgICBzcmMgPSB0ZXh0RnJvbVhNTEF0dHIoYXR0cik7Ci0gICAgfQotCi0gICAgaWYgKCFz
cmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChpc1JlbGF0aXZlUGF0aChzcmMpKQotICAgICAg
ICAgICAgc3JjID0gYmFzZSArICIvIiArIHNyYzsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOwotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxhIGhyZWY9XCIiKTsKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoc3JjICsgIlwiPiIgKyBzcmMgKyAiPC9hPiIpOwotICAgICAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KLQotICAgIGlmICh0eXBlID09ICJ0ZXh0
IiB8fCB0eXBlLnN0YXJ0c1dpdGgoInRleHQvIikpCi0gICAgICAgIGNvbnRlbnQgPSB0ZXh0RnJv
bVhNTE5vZGUobm9kZSk7Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiaHRtbCIpCi0gICAgICAgIGNv
bnRlbnQgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAieGh0
bWwiKSB7Ci0gICAgICAgIHhtbEJ1ZmZlclB0ciBidWZmZXIgPSB4bWxCdWZmZXJDcmVhdGUoKTsK
LSAgICAgICAgeG1sTm9kZSAqIGN1ciA9IG5vZGUtPmNoaWxkcmVuOwotICAgICAgICBpZiAoY3Vy
ICYmIGN1ci0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICAvLyBFbmNv
ZGluZyBvZiBidWZmZXIgaXMgdXRmLTguCi0gICAgICAgICAgICB4bWxOb2RlRHVtcChidWZmZXIs
IGN1ci0+ZG9jLCBjdXIsIDAsIDApOwotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwotICAgICAgICAgICAgaWYgKCFiYXNlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPGJhc2UgaHJlZj0nIik7Ci0gICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQobV91cmwuYmFzZUFzU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiLyIpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJh
c2UpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLycgLz4iKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKChjb25zdCBjaGFyKil4bWxC
dWZmZXJDb250ZW50KGJ1ZmZlcikpOwotICAgICAgICAgICAgY29udGVudCA9IGJ1aWxkZXIudG9T
dHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICB4bWxCdWZmZXJGcmVlKGJ1ZmZlcik7Ci0gICAg
fSBlbHNlIGlmICh0eXBlLmVuZHNXaXRoKCIreG1sIikgfHwgdHlwZS5lbmRzV2l0aCgiL3htbCIp
KQotICAgICAgICAvLyBGSVhNRTogc2VlIGF0b20gc3BlYyA0LjEuMy4zLjQuCi0gICAgICAgIGNv
bnRlbnQgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgZWxzZQotICAgICAgICBjb250ZW50
ID0gdGV4dEZyb21YTUxOb2RlKG5vZGUpOwotCi0gICAgcmV0dXJuIGNvbnRlbnQ7Ci19Ci0KLVN0
cmluZyBSU1NBdG9tUGFyc2VyOjpwYXJzZUF1dGhvcih4bWxOb2RlKiBub2RlKQotewotICAgIEJM
QUNLQkVSUllfQVNTRVJUKG5vZGUpOwotCi0gICAgU3RyaW5nIHVzZXJuYW1lOwotICAgIFN0cmlu
ZyBlbWFpbDsKLQotICAgIGZvciAobm9kZSA9IG5vZGUtPmNoaWxkcmVuOyBub2RlOyBub2RlID0g
bm9kZS0+bmV4dCkgewotICAgICAgICBTdHJpbmcgbmFtZShyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihub2RlLT5uYW1lKSk7Ci0gICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCk7Ci0KLSAg
ICAgICAgaWYgKG5hbWUgPT0gIm5hbWUiKQotICAgICAgICAgICAgdXNlcm5hbWUgPSB0ZXh0RnJv
bVhNTE5vZGUobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gImVtYWlsIikKLSAgICAg
ICAgICAgIGVtYWlsID0gdGV4dEZyb21YTUxOb2RlKG5vZGUpOwotICAgIH0KLQotICAgIGlmICgh
ZW1haWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHVzZXJuYW1lID0gdXNlcm5hbWUgKyAiICgiOwot
ICAgICAgICB1c2VybmFtZSA9IHVzZXJuYW1lICsgZW1haWw7Ci0gICAgICAgIHVzZXJuYW1lID0g
dXNlcm5hbWUgKyAiKSI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVzZXJuYW1lOwotfQotCi1TdHJp
bmcgUlNTQXRvbVBhcnNlcjo6cGFyc2VDYXRlZ29yeSh4bWxOb2RlKiBub2RlKQotewotICAgIEJM
QUNLQkVSUllfQVNTRVJUKG5vZGUpOwotCi0gICAgU3RyaW5nIGNhdGVnb3J5OwotCi0gICAgZm9y
ICh4bWxBdHRyKiBhdHRyID0gbm9kZS0+cHJvcGVydGllczsgYXR0cjsgYXR0ciA9IGF0dHItPm5l
eHQpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
YXR0ci0+bmFtZSkpOwotICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpOwotCi0gICAgICAgIC8v
IElmIHRoZXJlJ3MgYSBsYWJlbCwgd2UgdXNlIGl0LCBpZiBub3QsIHVzZSB0ZXJtIGF0dHJpYnV0
ZSwgYXMgbGFiZWwgaXMKLSAgICAgICAgLy8gb3B0aW9uYWwsIGJ1dCB0ZXJtIGlzIG1hbmRhdG9y
eS4KLSAgICAgICAgaWYgKG5hbWUgPT0gImxhYmVsIikgewotICAgICAgICAgICAgY2F0ZWdvcnkg
PSB0ZXh0RnJvbVhNTEF0dHIoYXR0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChuYW1lID09ICJ0ZXJtIikKLSAgICAgICAgICAgIGNhdGVnb3J5ID0gdGV4
dEZyb21YTUxBdHRyKGF0dHIpOwotICAgIH0KLQotICAgIHJldHVybiBjYXRlZ29yeTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NBdG9tUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NBdG9tUGFyc2VyLmgJ
KHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9yc3MvUlNTQXRvbVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0g
Ki8KLQotI2lmbmRlZiBSU1NBdG9tUGFyc2VyX2gKLSNkZWZpbmUgUlNTQXRvbVBhcnNlcl9oCi0K
LSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJSU1NQYXJzZXJCYXNlLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgUlNTQXRvbUxpbmsgewotcHVibGljOgotICAgIGVudW0gVHlw
ZSB7Ci0gICAgICAgIFR5cGVVbmtub3duLAotICAgICAgICBUeXBlQWx0ZXJuYXRlLAotICAgICAg
ICBUeXBlUmVsYXRlZCwKLSAgICAgICAgVHlwZVNlbGYsCi0gICAgICAgIFR5cGVFbmNsb3N1cmUs
Ci0gICAgICAgIFR5cGVWaWEsCi0gICAgICAgIFR5cGVVbnN1cHBvcnRlZAotICAgIH07Ci0KLSAg
ICBSU1NBdG9tTGluaygpCi0gICAgICAgIDogbV90eXBlSW5FbnVtKFR5cGVVbmtub3duKQotICAg
IHsgfQotCi0gICAgVHlwZSByZWxUeXBlKCk7Ci0KLSAgICBTdHJpbmcgbV9yZWw7Ci0gICAgU3Ry
aW5nIG1faHJlZjsKLSAgICBTdHJpbmcgbV9ocmVmbGFuZzsKLSAgICBTdHJpbmcgbV90eXBlOwot
ICAgIFN0cmluZyBtX3RpdGxlOwotICAgIFN0cmluZyBtX2xlbmd0aDsKLQotcHJpdmF0ZToKLSAg
ICBUeXBlIG1fdHlwZUluRW51bTsKLX07Ci0KLWNsYXNzIFJTU0F0b21QYXJzZXIgOiBwdWJsaWMg
UlNTUGFyc2VyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgUlNTQXRvbVBhcnNlcigpOwotCi0gICAgYm9v
bCBwYXJzZUJ1ZmZlcihjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW5ndGgsIGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogZW5jb2RpbmcpOwotCi1wcml2YXRlOgotICAgIGJvb2wgcGFyc2VY
bWxEb2MoeG1sRG9jUHRyKTsKLSAgICBib29sIHBhcnNlSXRlbUJhc2VBdHRyaWJ1dGUoUlNTSXRl
bUJhc2UqLCBjb25zdCBTdHJpbmcmIG5hbWUsIHhtbE5vZGUqLCBjb25zdCBTdHJpbmcmIGJhc2Up
OwotICAgIFJTU0l0ZW0qIHBhcnNlSXRlbSh4bWxOb2RlKik7Ci0gICAgUlNTRmVlZCogcGFyc2VG
ZWVkKHhtbE5vZGUqKTsKLSAgICBSU1NBdG9tTGluayogcGFyc2VMaW5rKHhtbE5vZGUqKTsKLSAg
ICBSU1NFbmNsb3N1cmUqIGVuY2xvc3VyZUZyb21MaW5rKFJTU0F0b21MaW5rKik7Ci0KLSAgICBT
dHJpbmcgcGFyc2VDb250ZW50KGNvbnN0IFN0cmluZyYgYmFzZSwgeG1sTm9kZSopOwotICAgIFN0
cmluZyBwYXJzZUF1dGhvcih4bWxOb2RlKik7Ci0gICAgU3RyaW5nIHBhcnNlQ2F0ZWdvcnkoeG1s
Tm9kZSopOwotICAgIFVSTCBtX3VybDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFJTU0F0b21QYXJzZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NGaWx0ZXJTdHJlYW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTRmlsdGVy
U3RyZWFtLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NGaWx0ZXJTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDY3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEx
LCAyMDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJSU1NGaWx0ZXJTdHJlYW0uaCIKLQotI2luY2x1ZGUgIlJTUzEwUGFyc2VyLmgiCi0jaW5jbHVk
ZSAiUlNTMjBQYXJzZXIuaCIKLSNpbmNsdWRlICJSU1NBdG9tUGFyc2VyLmgiCi0jaW5jbHVkZSAi
UlNTR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiVGV4dENvZGVjSUNVLmgiCi0KLSNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1Bc3NlcnQuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1M
b2cuaD4KLSNpbmNsdWRlIDxTY29wZVBvaW50ZXIuaD4KLSNpbmNsdWRlIDxuZXR3b3JrL05ldHdv
cmtSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbENyaXRpY2FsOwotdXNpbmcgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkxvZ0xldmVsSW5mbzsKLXVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dM
ZXZlbFdhcm47Ci11c2luZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfdXRmOEVu
Y29kaW5nTmFtZSA9ICJVVEYtOCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19sYXRpbjFF
bmNvZGluZ05hbWUgPSAiSVNPLTg4NTktMSI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19n
YmtFbmNvZGluZ05hbWUgPSAiR0JLIjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfY29u
dGVudEVuY29kaW5nSGVhZGVyS2V5ID0gIkNvbnRlbnQtRW5jb2RpbmciOwotc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IHNfY29udGVudExlbmd0aEhlYWRlcktleSA9ICJDb250ZW50LUxlbmd0aCI7
Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19jb250ZW50VHlwZUhlYWRlcktleSA9ICJDb250
ZW50LVR5cGUiOwotCi1zdGF0aWMgaW50IGlzQVNDSUlTcGFjZUxvd2VyQnl0ZShpbnQgY2gpCi17
Ci0gICAgcmV0dXJuIGlzQVNDSUlTcGFjZTxpbnQ+KGNoICYgMHhmZik7Ci19Ci0KLXN0YXRpYyBz
dGQ6OnN0cmluZyYgc3RyaXBXaGl0ZVNwYWNlKHN0ZDo6c3RyaW5nJiBzdHIpCi17Ci0gICAgc3Ry
LmVyYXNlKHN0ci5iZWdpbigpLCBzdGQ6OmZpbmRfaWYoc3RyLmJlZ2luKCksIHN0ci5lbmQoKSwg
c3RkOjpub3QxKHN0ZDo6cHRyX2Z1bjxpbnQsIGludD4oaXNBU0NJSVNwYWNlTG93ZXJCeXRlKSkp
KTsKLSAgICBzdHIuZXJhc2Uoc3RkOjpmaW5kX2lmKHN0ci5yYmVnaW4oKSwgc3RyLnJlbmQoKSwg
c3RkOjpub3QxKHN0ZDo6cHRyX2Z1bjxpbnQsIGludD4oaXNBU0NJSVNwYWNlTG93ZXJCeXRlKSkp
LmJhc2UoKSwgc3RyLmVuZCgpKTsKLSAgICByZXR1cm4gc3RyOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3Qgc3RkOjpzdHJpbmcmIGZpcnN0LCBjb25zdCBj
aGFyKiBzZWNvbmQpCi17Ci0gICAgcmV0dXJuICFzdHJjYXNlY21wKGZpcnN0LmNfc3RyKCksIHNl
Y29uZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0b21NSU1FVHlwZShjb25zdCBzdGQ6
OnN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG1pbWVU
eXBlLCAiYXBwbGljYXRpb24vYXRvbSt4bWwiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlz
UlNTTUlNRVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVUeXBlKQotewotICAgIHJldHVybiBl
cXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgImFwcGxpY2F0aW9uL3Jzcyt4bWwiKTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGlzUG90ZW50aWFsUlNTTUlNRVR5cGUoY29uc3Qgc3RkOjpzdHJp
bmcmIG1pbWVUeXBlKQotewotICAgIHJldHVybiAhc3RybmNtcChtaW1lVHlwZS5kYXRhKCksICJ0
ZXh0L3htbCIsIDgpIHx8ICFzdHJuY21wKG1pbWVUeXBlLmRhdGEoKSwgImFwcGxpY2F0aW9uL3ht
bCIsIDE1KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzUlNTQ29udGVudChSU1NGaWx0ZXJT
dHJlYW06OlJlc291cmNlVHlwZSB0eXBlKQotewotICAgIHJldHVybiB0eXBlID09IFJTU0ZpbHRl
clN0cmVhbTo6VHlwZVJTUzEwCi0gICAgICAgIHx8IHR5cGUgPT0gUlNTRmlsdGVyU3RyZWFtOjpU
eXBlUlNTMjAKLSAgICAgICAgfHwgdHlwZSA9PSBSU1NGaWx0ZXJTdHJlYW06OlR5cGVSU1NBdG9t
OwotfQotCi1zdGF0aWMgUlNTRmlsdGVyU3RyZWFtOjpSZXNvdXJjZVR5cGUgUlNTVHlwZUZyb21D
b250ZW50VHlwZShjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudFR5cGUpCi17Ci0gICAgaWYgKGNv
bnRlbnRUeXBlLmVtcHR5KCkpCi0gICAgICAgIHJldHVybiBSU1NGaWx0ZXJTdHJlYW06OlR5cGVV
bmtub3duOwotCi0gICAgc3RkOjpzdHJpbmcgbWltZVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgdmVy
c2lvbjsKLSAgICBib29sIGlzUlNTID0gZmFsc2U7Ci0KLSAgICAvLyBUaGUgY29udGVudFR5cGUg
Y2FuIGNvbnRhaW4gYm90aCBhIG1pbWUgdHlwZSBhbmQgdmVyc2lvbiBhdHRyaWJ1dGVzCi0gICAg
Ly8gSWYgd2UgYWxyZWFkeSBrbm93IHRoZSB0eXBlIGlzIEF0b20sIHdlIGRvbid0IG5lZWQgZWl0
aGVyIG9mIHRoZXNlLCBzbyBza2lwIGl0Ci0gICAgZm9yIChzaXplX3Qgc3RhcnQgPSAwLCBkZWxp
bWl0ZXIgPSAwOyBkZWxpbWl0ZXIgIT0gc3RkOjpzdHJpbmc6Om5wb3M7IHN0YXJ0ID0gZGVsaW1p
dGVyICsgMSkgewotICAgICAgICBkZWxpbWl0ZXIgPSBjb250ZW50VHlwZS5maW5kKCc7Jywgc3Rh
cnQpOwotCi0gICAgICAgIHN0ZDo6c3RyaW5nIGNvbXBvbmVudCA9IGNvbnRlbnRUeXBlLnN1YnN0
cihzdGFydCwgZGVsaW1pdGVyID09IHN0ZDo6c3RyaW5nOjpucG9zID8gZGVsaW1pdGVyIDogZGVs
aW1pdGVyIC0gc3RhcnQpOwotCi0gICAgICAgIGlmIChtaW1lVHlwZS5lbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBpZiAoaXNBdG9tTUlNRVR5cGUoY29tcG9uZW50KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlUlNTQXRvbTsKLQotICAgICAgICAgICAgaWYgKGlz
UlNTTUlNRVR5cGUoY29tcG9uZW50KSkgewotICAgICAgICAgICAgICAgIC8vIGRlZmluaXRlbHkg
bm90IGEgdmVyc2lvbiBhdHRyaWJ1dGUsIHNraXAgdG8gbmV4dCB0b2tlbgotICAgICAgICAgICAg
ICAgIG1pbWVUeXBlID0gY29tcG9uZW50OwotICAgICAgICAgICAgICAgIGlzUlNTID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIHNpemVfdCBlcXVhbHNpZ24gPSBjb21wb25lbnQuZmluZCgnPScpOwotICAgICAgICBp
ZiAoZXF1YWxzaWduICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGVxdWFsSWdub3JpbmdDYXNlKGNv
bXBvbmVudC5zdWJzdHIoMCwgZXF1YWxzaWduKSwgInZlcnNpb24iKSkKLSAgICAgICAgICAgIHZl
cnNpb24gPSBjb21wb25lbnQuc3Vic3RyKGVxdWFsc2lnbiArIDEpOwotCi0gICAgICAgIC8vIENo
ZWNrIGlmIHdlIG5vdyBoYXZlIGZvdW5kIGJvdGggTUlNRSB0eXBlIGFuZCB2ZXJzaW9uCi0gICAg
ICAgIGlmICghbWltZVR5cGUuZW1wdHkoKSAmJiAhdmVyc2lvbi5lbXB0eSgpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGlzUlNTKSB7Ci0gICAgICAgIGlmICghdmVyc2lv
bi5jb21wYXJlKCIxLjAiKSkKLSAgICAgICAgICAgIHJldHVybiBSU1NGaWx0ZXJTdHJlYW06OlR5
cGVSU1MxMDsKLQotICAgICAgICByZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlUlNTMjA7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIFJTU0ZpbHRlclN0cmVhbTo6VHlwZVVua25vd247Ci19Ci0KLXN0
YXRpYyBSU1NGaWx0ZXJTdHJlYW06OlJlc291cmNlVHlwZSBSU1NUeXBlRnJvbUNvbnRlbnQoY29u
c3QgY2hhciogc3RyLCBpbnQgc3RyTGVuKQotewotICAgIC8vIExvY2F0ZSB4bWwgc2lnbmF0dXJl
LgotICAgIGNvbnN0IGNoYXIqIHBvcyA9IHN0cjsKLQotICAgIC8vIExvY2F0ZSB0aGUgUlNTIHRh
Z3MuCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgcG9zID0gc3RyY2hyKHBvcywgJzwnKTsK
LSAgICAgICAgaWYgKCFwb3MgfHwgKHBvcyAtIHN0ciA+PSBzdHJMZW4pKSB7Ci0gICAgICAgICAg
ICBCQkxPRyhMb2dMZXZlbEluZm8sICJSU1NUeXBlRnJvbUNvbnRlbnQoKTogY2FuIG5vdCBmaW5k
IGFueSBzdGFydCB0YWciKTsKLSAgICAgICAgICAgIHJldHVybiBSU1NGaWx0ZXJTdHJlYW06OlR5
cGVVbmtub3duOwotICAgICAgICB9Ci0KLSAgICAgICAgKytwb3M7Ci0KLSAgICAgICAgaWYgKCFz
dHJuY2FzZWNtcChwb3MsICJyc3MiLCAzKSkgewotICAgICAgICAgICAgaWYgKGlzU3BhY2VPck5l
d2xpbmUoKihwb3MgKyAzKSkpIHsKLSAgICAgICAgICAgICAgICBCQkxPRyhMb2dMZXZlbEluZm8s
ICJSU1NUeXBlRnJvbUNvbnRlbnQoKTogZm91bmQgUlNTIDIuMCB0YWciKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlUlNTMjA7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEJCTE9HKExvZ0xldmVsSW5mbywgIlJTU1R5cGVGcm9tQ29udGVudCgpOiB3
cm9uZyBSU1MgMi4wIHRhZzogJS4qcyIsIDMyLCBwb3MpOwotICAgICAgICAgICAgcmV0dXJuIFJT
U0ZpbHRlclN0cmVhbTo6VHlwZVVua25vd247Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0
cm5jYXNlY21wKHBvcywgImZlZWQiLCA0KSkgewotICAgICAgICAgICAgaWYgKGlzU3BhY2VPck5l
d2xpbmUoKihwb3MgKyA0KSkpIHsKLSAgICAgICAgICAgICAgICBCQkxPRyhMb2dMZXZlbEluZm8s
ICJSU1NUeXBlRnJvbUNvbnRlbnQoKTogZm91bmQgQXRvbSAxLjAgdGFnIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIFJTU0ZpbHRlclN0cmVhbTo6VHlwZVJTU0F0b207Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIEJCTE9HKExvZ0xldmVsSW5mbywgIlJTU1R5cGVGcm9tQ29udGVudCgp
OiB3cm9uZyBBdG9tIDEuMCB0YWc6ICUuKnMiLCAzMiwgcG9zKTsKLSAgICAgICAgICAgIHJldHVy
biBSU1NGaWx0ZXJTdHJlYW06OlR5cGVVbmtub3duOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCFzdHJuY2FzZWNtcChwb3MsICJyZGY6UkRGIiwgNykpIHsKLSAgICAgICAgICAgIGlmIChpc1Nw
YWNlT3JOZXdsaW5lKCoocG9zICsgNykpKSB7Ci0gICAgICAgICAgICAgICAgQkJMT0coTG9nTGV2
ZWxJbmZvLCAiUlNTVHlwZUZyb21Db250ZW50KCk6IGZvdW5kIFJTUyAxLjAgdGFnIik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIFJTU0ZpbHRlclN0cmVhbTo6VHlwZVJTUzEwOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBCQkxPRyhMb2dMZXZlbEluZm8sICJSU1NUeXBlRnJvbUNvbnRl
bnQoKTogd3JvbmcgUlNTIDEuMCB0YWc6ICUuKnMiLCAzMiwgcG9zKTsKLSAgICAgICAgICAgIHJl
dHVybiBSU1NGaWx0ZXJTdHJlYW06OlR5cGVVbmtub3duOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFzdHJuY2FzZWNtcChwb3MsICI/eG1sIiwgNCkpIHsKLSAgICAgICAgICAgIEJCTE9HKExv
Z0xldmVsSW5mbywgIlJTU1R5cGVGcm9tQ29udGVudCgpOiBmb3VuZCBhbm90aGVyIHhtbCB0YWci
KTsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYW5vdGhlciB4bWwgaW5mbywgc2tpcCBpdC4KLSAg
ICAgICAgICAgIHBvcyArPSA0OwotICAgICAgICAgICAgcG9zID0gc3Ryc3RyKHBvcywgIj8+Iik7
Ci0KLSAgICAgICAgICAgIGlmICghcG9zIHx8IChwb3MgLSBzdHIgPj0gc3RyTGVuKSkgewotICAg
ICAgICAgICAgICAgIEJCTE9HKExvZ0xldmVsSW5mbywgIlJTU1R5cGVGcm9tQ29udGVudCgpOiBl
eHRyYSB4bWwgdGFnIHRvbyBsb25nIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFJTU0ZpbHRl
clN0cmVhbTo6VHlwZVVua25vd247Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBvcyAr
PSAyOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0
cm5jYXNlY21wKHBvcywgIiEtLSIsIDMpKSB7Ci0gICAgICAgICAgICBCQkxPRyhMb2dMZXZlbElu
Zm8sICJSU1NUeXBlRnJvbUNvbnRlbnQoKTogZm91bmQgY29tbWVudHMiKTsKLSAgICAgICAgICAg
IC8vIFRoaXMgaXMgY29tbWVudHMsIHNraXAgaXQuCi0gICAgICAgICAgICBwb3MgKz0gMzsKLSAg
ICAgICAgICAgIHBvcyA9IHN0cnN0cihwb3MsICItLT4iKTsKLQotICAgICAgICAgICAgaWYgKCFw
b3MgfHwgKHBvcyAtIHN0ciA+PSBzdHJMZW4pKSB7Ci0gICAgICAgICAgICAgICAgQkJMT0coTG9n
TGV2ZWxJbmZvLCAiUlNTVHlwZUZyb21Db250ZW50KCk6IGNvbW1lbnRzIHRvbyBsb25nIik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIFJTU0ZpbHRlclN0cmVhbTo6VHlwZVVua25vd247Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBvcyArPSAzOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBCQkxPRyhMb2dMZXZlbEluZm8sICJSU1NUeXBlRnJvbUNv
bnRlbnQoKTogbm9uIHJzcyB0eXBlICglLipzKSBmb3VuZCIsIDMyLCBwb3MpOwotICAgICAgICBy
ZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlVW5rbm93bjsKLSAgICB9Ci0KLSAgICByZXR1cm4g
UlNTRmlsdGVyU3RyZWFtOjpUeXBlVW5rbm93bjsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8UlNT
UGFyc2VyQmFzZT4gY3JlYXRlUGFyc2VyKFJTU0ZpbHRlclN0cmVhbTo6UmVzb3VyY2VUeXBlIHR5
cGUpCi17Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQoaXNSU1NDb250ZW50KHR5cGUpKTsKLQotICAg
IHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgUlNTRmlsdGVyU3RyZWFtOjpUeXBlUlNTQXRvbToK
LSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSU1NBdG9tUGFyc2VyKCkpOwotICAgIGNhc2Ug
UlNTRmlsdGVyU3RyZWFtOjpUeXBlUlNTMTA6Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
UlNTMTBQYXJzZXIoKSk7Ci0gICAgY2FzZSBSU1NGaWx0ZXJTdHJlYW06OlR5cGVSU1MyMDoKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSU1MyMFBhcnNlcigpKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBSU1MyMFBhcnNlcigpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGZpbmRYTUxFbmNvZGlu
Z1Bvc2l0aW9uKGNvbnN0IGNoYXIqIHN0ciwgY29uc3QgY2hhciomIGVuY29kaW5nU3RhcnQsIGNv
bnN0IGNoYXIqJiBlbmNvZGluZ0VuZCkKLXsKLSAgICBlbmNvZGluZ1N0YXJ0ID0gc3Ryc3RyKHN0
ciwgIjw/eG1sICIpOwotICAgIGlmICghZW5jb2RpbmdTdGFydCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgZW5jb2RpbmdTdGFydCArPSA2OyAvLyBMZW5ndGggb2YgIjw/eG1sICIuCi0g
ICAgY2hhciogZW5kUG9zID0gc3Ryc3RyKGNvbnN0X2Nhc3Q8Y2hhcio+KGVuY29kaW5nU3RhcnQp
LCAiPz4iKTsKLSAgICBpZiAoIWVuZFBvcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ZW5jb2RpbmdTdGFydCA9IHN0cnN0cihjb25zdF9jYXN0PGNoYXIqPihlbmNvZGluZ1N0YXJ0KSwg
ImVuY29kaW5nIik7Ci0KLSAgICBpZiAoIWVuY29kaW5nU3RhcnQgfHwgZW5jb2RpbmdTdGFydCA+
IGVuZFBvcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZW5jb2RpbmdTdGFydCArPSA4
OwotCi0gICAgd2hpbGUgKGVuY29kaW5nU3RhcnQgPCBlbmRQb3MgJiYgKmVuY29kaW5nU3RhcnQg
PD0gJyAnKQotICAgICAgICArK2VuY29kaW5nU3RhcnQ7Ci0KLSAgICBpZiAoZW5jb2RpbmdTdGFy
dCA9PSBlbmRQb3MgfHwgKmVuY29kaW5nU3RhcnQgIT0gJz0nKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICArK2VuY29kaW5nU3RhcnQ7Ci0KLSAgICB3aGlsZSAoZW5jb2RpbmdTdGFydCA8
IGVuZFBvcyAmJiAqZW5jb2RpbmdTdGFydCA8PSAnICcpCi0gICAgICAgICsrZW5jb2RpbmdTdGFy
dDsKLQotICAgIGlmIChlbmNvZGluZ1N0YXJ0ID09IGVuZFBvcykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgY2hhciBxdW90ZSA9ICplbmNvZGluZ1N0YXJ0OwotICAgIGlmIChxdW90ZSAh
PSAnXCInICYmIHF1b3RlICE9ICdcJycpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICsr
ZW5jb2RpbmdTdGFydDsKLSAgICBlbmNvZGluZ0VuZCA9IHN0cmNocihjb25zdF9jYXN0PGNoYXIq
PihlbmNvZGluZ1N0YXJ0KSwgcXVvdGUpOwotCi0gICAgaWYgKCFlbmNvZGluZ0VuZCB8fCBlbmNv
ZGluZ0VuZCA9PSBlbmNvZGluZ1N0YXJ0IHx8IGVuY29kaW5nRW5kID4gZW5kUG9zKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgZmlu
ZFhNTExhbmd1YWdlUG9zaXRpb24oY29uc3QgY2hhciogc3RyLCBjb25zdCBjaGFyKiYgbGFuZ1N0
YXJ0LCBjb25zdCBjaGFyKiYgbGFuZ0VuZCkKLXsKLSAgICBsYW5nU3RhcnQgPSBzdHJzdHIoY29u
c3RfY2FzdDxjaGFyKj4oc3RyKSwgIjxsYW5ndWFnZT4iKTsKLSAgICBpZiAoIWxhbmdTdGFydCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbGFuZ1N0YXJ0ICs9IDEwOyAvLyBMZW5ndGgg
b2YgIjxsYW5ndWFnZT4iLgotICAgIGNoYXIqIGVuZFBvcyA9IHN0cnN0cihjb25zdF9jYXN0PGNo
YXIqPihsYW5nU3RhcnQpLCAiPC9sYW5ndWFnZT4iKTsKLSAgICBpZiAoIWVuZFBvcykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgd2hpbGUgKGxhbmdTdGFydCA8IGVuZFBvcyAmJiAqbGFu
Z1N0YXJ0IDw9ICcgJykKLSAgICAgICAgKytsYW5nU3RhcnQ7Ci0KLSAgICBpZiAobGFuZ1N0YXJ0
ID09IGVuZFBvcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbGFuZ0VuZCA9IGVuZFBv
cyAtIDE7Ci0KLSAgICB3aGlsZSAobGFuZ0VuZCA+IGxhbmdTdGFydCAmJiAqbGFuZ0VuZCA8PSAn
ICcpCi0gICAgICAgIC0tbGFuZ0VuZDsKLQotICAgICsrbGFuZ0VuZDsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRFbmNvZGluZ0Zvckxhbmd1YWdlKGNv
bnN0IGNoYXIqIGxhbmd1YWdlKQotewotICAgIGlmICghc3RyY2FzZWNtcChsYW5ndWFnZSwgImVu
IikgfHwgIXN0cmNhc2VjbXAobGFuZ3VhZ2UsICJlbi1VUyIpKQotICAgICAgICByZXR1cm4gc19s
YXRpbjFFbmNvZGluZ05hbWU7Ci0gICAgaWYgKCFzdHJjYXNlY21wKGxhbmd1YWdlLCAiemgtY24i
KSkKLSAgICAgICAgcmV0dXJuIHNfZ2JrRW5jb2RpbmdOYW1lOwotCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLXN0YXRpYyBib29sIGlzVHJhbnNjb2RpbmdOZWVkZWQoY29uc3Qgc3RkOjpzdHJpbmcmIGVu
Y29kaW5nKQotewotICAgIC8vIFdoZW4gdGhlcmUncyBubyBlbmNvZGluZyBpbmZvcm1hdGlvbiwg
b3IgdGhlIGVuY29kaW5nIGNhbiBub3QgYmUgZm91bmQgaW4gYWxsIGVuY29kaW5ncwotICAgIC8v
IHN1cHBvcnRlZCBpbiBvdXIgcGhvbmUsIHdlIHdpbGwgdHJ5IHRvIHRyYW5zY29kZSB0aGUgY29u
dGVudCBhbnl3YXksIHN1cHBvc2VkIHRvIEFTQ0lJLgotICAgIGlmIChlbmNvZGluZy5lbXB0eSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBUZXh0RW5jb2Rpbmcoc191dGY4
RW5jb2RpbmdOYW1lKSAhPSBUZXh0RW5jb2RpbmcoZW5jb2RpbmcuY19zdHIoKSk7Ci19Ci0KLWVu
dW0gVHJhbnNjb2RlUmVzdWx0IHsKLSAgICBTdWNjZXNzLAotICAgIFNvdXJjZUVuY29kaW5nVW5z
dXBwb3J0ZWQsCi0gICAgU291cmNlQnJva2VuLAotICAgIFRhcmdldEVuY29kaW5nVW5zdXBwb3J0
ZWQsCi0gICAgVGFyZ2V0QnVmZmVySW5zdWZmaWNpZW50Ci19OwotCi1zdGF0aWMgVHJhbnNjb2Rl
UmVzdWx0IHRyYW5zY29kZShjb25zdCBjaGFyKiBzb3VyY2VFbmNvZGluZywKLSAgICBjb25zdCBj
aGFyKiB0YXJnZXRFbmNvZGluZywKLSAgICBjb25zdCBjaGFyKiYgc291cmNlU3RhcnQsCi0gICAg
aW50IHNvdXJjZUxlbmd0aCwKLSAgICBjaGFyKiYgdGFyZ2V0U3RhcnQsCi0gICAgdW5zaWduZWQg
dGFyZ2V0TGVuZ3RoKQotewotICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmdTb3VyY2Uoc291
cmNlRW5jb2RpbmcpOwotICAgIGlmICghdGV4dEVuY29kaW5nU291cmNlLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIFNvdXJjZUVuY29kaW5nVW5zdXBwb3J0ZWQ7Ci0KLSAgICBUZXh0RW5jb2Rp
bmcgdGV4dEVuY29kaW5nVGFyZ2V0KHRhcmdldEVuY29kaW5nKTsKLSAgICBpZiAoIXRleHRFbmNv
ZGluZ1RhcmdldC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBUYXJnZXRFbmNvZGluZ1Vuc3Vw
cG9ydGVkOwotCi0gICAgYm9vbCBzYXdFcnJvciA9IGZhbHNlOwotICAgIFN0cmluZyB1Y3MyID0g
VGV4dENvZGVjSUNVKHRleHRFbmNvZGluZ1NvdXJjZSkuZGVjb2RlKHNvdXJjZVN0YXJ0LCBzb3Vy
Y2VMZW5ndGgsIHRydWUsIHRydWUsIHNhd0Vycm9yKTsKLQotICAgIGlmIChzYXdFcnJvcikKLSAg
ICAgICAgcmV0dXJuIFNvdXJjZUJyb2tlbjsKLQotICAgIENTdHJpbmcgZW5jb2RlZCA9IFRleHRD
b2RlY0lDVSh0ZXh0RW5jb2RpbmdUYXJnZXQpLmVuY29kZSh1Y3MyLmNoYXJhY3RlcnMoKSwgdWNz
Mi5sZW5ndGgoKSwgV2ViQ29yZTo6RW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgIGlmIChl
bmNvZGVkLmxlbmd0aCgpID4gdGFyZ2V0TGVuZ3RoKQotICAgICAgICByZXR1cm4gVGFyZ2V0QnVm
ZmVySW5zdWZmaWNpZW50OwotCi0gICAgc3RybmNweSh0YXJnZXRTdGFydCwgZW5jb2RlZC5kYXRh
KCksIGVuY29kZWQubGVuZ3RoKCkpOwotICAgIHRhcmdldFN0YXJ0ICs9IGVuY29kZWQubGVuZ3Ro
KCk7Ci0KLSAgICByZXR1cm4gU3VjY2VzczsKLX0KLQotc3RhdGljIGJvb2wgdHJhbnNjb2RlQ29u
dGVudChjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudCwgY29uc3Qgc3RkOjpzdHJpbmcmIGVuY29k
aW5nLCBzdGQ6OnN0cmluZyYgcmVzdWx0KQotewotICAgIHVuc2lnbmVkIHV0ZjhsZW5ndGggPSBj
b250ZW50LnNpemUoKSAqIDMgLyAyOyAvLyBVc2UgbWF4aW11bSBudW1iZXIgdXRmLTggbGVuZ3Ro
LgotICAgIFNjb3BlQXJyYXk8Y2hhcj4gYnVmZmVyKG5ldyBjaGFyW3V0ZjhsZW5ndGggKyAxXSk7
Ci0KLSAgICBzdGQ6OnN0cmluZyB4bWxIZWFkZXJTdHJpbmc7Ci0KLSAgICBjb25zdCBjaGFyKiBz
dGFydCA9IGNvbnRlbnQuY19zdHIoKTsKLSAgICBjb25zdCBjaGFyKiB4bWxTdGFydCA9IHN0cnN0
cihzdGFydCwgIjw/eG1sICIpOwotICAgIGNvbnN0IGNoYXIqIHhtbEVuZDsKLSAgICBpZiAoeG1s
U3RhcnQpIHsKLSAgICAgICAgeG1sRW5kID0gc3Ryc3RyKHhtbFN0YXJ0LCAiPz4iKTsKLSAgICAg
ICAgaWYgKCF4bWxFbmQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHhtbEVu
ZCArPSAyOyAvLyBMZW5ndGggb2YgIj8+Ii4KLQotICAgICAgICBjb25zdCBjaGFyKiBlbmNvZGlu
Z1N0YXJ0OwotICAgICAgICBjb25zdCBjaGFyKiBlbmNvZGluZ0VuZDsKLSAgICAgICAgaWYgKGZp
bmRYTUxFbmNvZGluZ1Bvc2l0aW9uKHN0YXJ0LCBlbmNvZGluZ1N0YXJ0LCBlbmNvZGluZ0VuZCkp
IHsKLSAgICAgICAgICAgIHhtbEhlYWRlclN0cmluZy5hc3NpZ24oc3RhcnQsIGVuY29kaW5nU3Rh
cnQgLSBzdGFydCk7Ci0gICAgICAgICAgICB4bWxIZWFkZXJTdHJpbmcuYXBwZW5kKHNfdXRmOEVu
Y29kaW5nTmFtZSk7Ci0gICAgICAgICAgICB4bWxIZWFkZXJTdHJpbmcuYXBwZW5kKGVuY29kaW5n
RW5kLCB4bWxFbmQgLSBlbmNvZGluZ0VuZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICB4bWxIZWFkZXJTdHJpbmcuYXNzaWduKHN0YXJ0LCAoeG1sRW5kIC0gMikgLSBzdGFydCk7Ci0g
ICAgICAgICAgICB4bWxIZWFkZXJTdHJpbmcuYXBwZW5kKCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4i
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHhtbEVuZCA9IHN0YXJ0OwotICAg
ICAgICB4bWxIZWFkZXJTdHJpbmcgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwi
VVRGLThcIj8+IjsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBjb250ZW50U3RhcnQgPSB4bWxF
bmQ7Ci0gICAgY2hhciogYnVmZmVyU3RhcnQgPSAmYnVmZmVyWzBdOwotCi0gICAgVHJhbnNjb2Rl
UmVzdWx0IHRyYW5zY29kZVJlc3VsdCA9IHRyYW5zY29kZShlbmNvZGluZy5jX3N0cigpLCBzX3V0
ZjhFbmNvZGluZ05hbWUsIGNvbnRlbnRTdGFydCwgY29udGVudC5sZW5ndGgoKSAtICh4bWxFbmQg
LSB4bWxTdGFydCksIGJ1ZmZlclN0YXJ0LCB1dGY4bGVuZ3RoKTsKLQotICAgIC8vIElmIHRoZSBl
bmNvZGluZyBpcyBub3Qgc3VwcG9ydGVkLCBvciBpZiB3ZSBmYWlsZWQgdG8gdHJhbnNjb2RlIHRo
ZSBjb250ZW50LCB3ZSB3aWxsIGp1c3QKLSAgICAvLyBlbmNvZGUgdGhlIGNvbnRlbnQgdG8gQVND
SUkgY29udGVudCwgYW5kIHJlcGxhY2luZyBhbnkgbm9uLUFTQ0lJIGNoYXJhY3RlciB3aXRoIGEg
cXVlc3Rpb24KLSAgICAvLyBtYXJrLiBUaGlzIHdpbGwgYmUgYmV0dGVyIHRoYW4gZGlzcGxheWlu
ZyB0aGUgcmF3IHRleHQsIGFzIHRoZSByYXcgdGV4dCBjYW4gbm90IGJlIGRpc3BsYXllZAotICAg
IC8vIGNvcnJlY3RseSBhbnl3YXksIGFzIHRoZWlyIGVuY29kaW5nIGlzIG5vdCBzdXBwb3J0ZWQu
Ci0KLSAgICBpZiAoU3VjY2VzcyAhPSB0cmFuc2NvZGVSZXN1bHQpIHsKLSAgICAgICAgaW50IGkg
PSAwOwotICAgICAgICBmb3IgKDsgY29udGVudFN0YXJ0IDwgc3RhcnQgKyBjb250ZW50LnNpemUo
KSA7ICsrY29udGVudFN0YXJ0LCArK2kpIHsKLSAgICAgICAgICAgIGlmIChpc0FTQ0lJUHJpbnRh
YmxlKCpjb250ZW50U3RhcnQpKQotICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICpjb250ZW50
U3RhcnQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gJz8n
OwotICAgICAgICB9Ci0KLSAgICAgICAgYnVmZmVyW2ldID0gMDsKLSAgICB9IGVsc2UKLSAgICAg
ICAgKmJ1ZmZlclN0YXJ0ID0gMDsKLQotICAgIHJlc3VsdC5hc3NpZ24oeG1sSGVhZGVyU3RyaW5n
KTsKLSAgICByZXN1bHQuYXBwZW5kKCZidWZmZXJbMF0pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLVJTU0ZpbHRlclN0cmVhbTo6UlNTRmlsdGVyU3RyZWFtKCkKLSAgICA6IEZpbHRlclN0cmVh
bSgpCi0gICAgLCBtX3Jlc291cmNlVHlwZShUeXBlVW5rbm93bikKLSAgICAsIG1fY29udGVudFR5
cGVJbmRleCgtMSkKLSAgICAsIG1fY2hhcnNldENoZWNrZWQoZmFsc2UpCi0gICAgLCBtX2VuY29k
aW5nQ2hlY2tlZChmYWxzZSkKLXsKLX0KLQotdm9pZCBSU1NGaWx0ZXJTdHJlYW06Om5vdGlmeVN0
YXR1c1JlY2VpdmVkKGludCBzdGF0dXMsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgLy8gTm9uLUhUVFAgZXJyb3JzIGhhdmUgbm8gZGF0YSB0byBk
aXNwbGF5LCBhbmQgcmVkaXJlY3RzIHdpbGwgbmV2ZXIgYmUgZGlzcGxheWVkLAotICAgIC8vIHNv
IG5vIG5lZWQgdG8gY2hlY2sgaWYgdGhleSBoYXZlIFJTUyBkYXRhCi0gICAgLy8gSFRUUCBlcnJv
cnMgbWF5IGhhdmUgZGF0YSwgYW5kIGluIHRoZW9yeSBpdCBjb3VsZCBiZSBSU1MgZGF0YSAoYWx0
aG91Z2ggaXQncyBoaWdobHkKLSAgICAvLyB1bmxpa2VseSkgc28gYmV0dGVyIHRvIGtlZXAgY2hl
Y2tpbmcgdGhlbS4KLSAgICBpZiAoc3RhdHVzIDwgMCB8fCAoMzAwIDw9IHN0YXR1cyAmJiBzdGF0
dXMgPCA0MDAgJiYgc3RhdHVzICE9IDMwNCkpIHsKLSAgICAgICAgbV9yZXNvdXJjZVR5cGUgPSBU
eXBlTm90UlNTOwotICAgICAgICAvLyBJdCBpcyBwb3NzaWJsZSB3ZSB3aWxsIGdldCAyIHN0YXR1
cyBjb2RlLgotICAgICAgICBzZW5kU2F2ZWRIZWFkZXJzKCk7Ci0gICAgfQotCi0gICAgRmlsdGVy
U3RyZWFtOjpub3RpZnlTdGF0dXNSZWNlaXZlZChzdGF0dXMsIG1lc3NhZ2UpOwotfQotCi12b2lk
IFJTU0ZpbHRlclN0cmVhbTo6bm90aWZ5SGVhZGVyc1JlY2VpdmVkKGNvbnN0IE5ldHdvcmtSZXF1
ZXN0OjpIZWFkZXJMaXN0JiBoZWFkZXJzKQotewotICAgIGlmICghaXNSU1NDb250ZW50KG1fcmVz
b3VyY2VUeXBlKSkgewotICAgICAgICBOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKLSAgICAgICAgTmV0d29ya1JlcXVlc3Q6Okhl
YWRlckxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBoZWFkZXJzLmJlZ2luKCk7Ci0gICAgICAg
IGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoaXRlci0+Zmlyc3QudG9TdGRTdHJpbmcoKSwgc19jb250ZW50VHlwZUhlYWRlcktl
eSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXRlci0+c2Vjb25kLmZpbmQoInhtbCIpICE9IHN0
ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY29udGVudFR5cGVJbmRl
eCA9IHN0ZDo6ZGlzdGFuY2UoTmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3Q6OmNvbnN0X2l0ZXJh
dG9yKGhlYWRlcnMuYmVnaW4oKSksIGl0ZXIpOwotICAgICAgICAgICAgICAgICAgICBSZXNvdXJj
ZVR5cGUgdHlwZSA9IFJTU1R5cGVGcm9tQ29udGVudFR5cGUoaXRlci0+c2Vjb25kLnRvU3RkU3Ry
aW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNSU1NDb250ZW50KHR5cGUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9yZXNvdXJjZVR5cGUgPSB0eXBlOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmICghaXNQb3RlbnRpYWxSU1NNSU1FVHlwZShpdGVyLT5zZWNvbmQudG9T
dGRTdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Jlc291cmNlVHlwZSA9IFR5
cGVOb3RSU1M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fY29udGVudFR5cGVJbmRl
eCA8IDApCi0gICAgICAgIG1fcmVzb3VyY2VUeXBlID0gVHlwZU5vdFJTUzsKLQotICAgIGlmICht
X3Jlc291cmNlVHlwZSA9PSBUeXBlTm90UlNTKSB7Ci0gICAgICAgIHNlbmRTYXZlZEhlYWRlcnMo
KTsKLSAgICAgICAgRmlsdGVyU3RyZWFtOjpub3RpZnlIZWFkZXJzUmVjZWl2ZWQoaGVhZGVycyk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIHNhdmVIZWFkZXJzKGhlYWRlcnMpOwotfQotCi12b2lkIFJT
U0ZpbHRlclN0cmVhbTo6bm90aWZ5RGF0YVJlY2VpdmVkKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpO
ZXR3b3JrQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgLy8gSGVyZSB3ZSBhc3N1bWUgdGhlIGZpcnN0
IHBhY2tldCBvZiBkYXRhIGlzIGVub3VnaCBmb3IgdXMgdG8gc25pZmYgdGhlIGNvbnRlbnQgdHlw
ZS4KLSAgICAvLyBJZiBzb21lZGF5IHNvbWUgZGVjZW50IHJlYWwgbGlmZSB3ZWIgc2l0ZSB2b2lk
IHRoaXMgYXNzdW1wdGlvbiwgd2Ugc2hvdWxkIHJlLWltcGxlbWVudAotICAgIC8vIHRoaXMgY29k
ZS4gQnV0IGZvciBub3cgaXQgc2hvdWxkIGJlIGp1c3QgZmluZS4KLSAgICBpZiAobV9yZXNvdXJj
ZVR5cGUgPT0gVHlwZVVua25vd24pCi0gICAgICAgIG1fcmVzb3VyY2VUeXBlID0gUlNTVHlwZUZy
b21Db250ZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpuZXR3b3JrQnVmZmVyRGF0YShidWZmZXIp
LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bmV0d29ya0J1ZmZlckRhdGFMZW5ndGgoYnVmZmVyKSk7
Ci0KLSAgICAvLyBJZiB3ZSBkb24ndCBrbm93IHRoZSByZXNvdXJjZSB0eXBlIGF0IHRoaXMgc3Rh
Z2UsIHRoZW4gaXQgaXMgbm90IGEgUlNTIGNvbnRlbnQuCi0gICAgaWYgKG1fcmVzb3VyY2VUeXBl
ID09IFR5cGVVbmtub3duKQotICAgICAgICBtX3Jlc291cmNlVHlwZSA9IFR5cGVOb3RSU1M7Ci0K
LSAgICBpZiAoaXNSU1NDb250ZW50KG1fcmVzb3VyY2VUeXBlKSkKLSAgICAgICAgYXBwZW5kRGF0
YShidWZmZXIpOwotICAgIGVsc2UgewotICAgICAgICBzZW5kU2F2ZWRIZWFkZXJzKCk7Ci0gICAg
ICAgIEZpbHRlclN0cmVhbTo6bm90aWZ5RGF0YVJlY2VpdmVkKGJ1ZmZlcik7Ci0gICAgfQotfQot
Ci12b2lkIFJTU0ZpbHRlclN0cmVhbTo6bm90aWZ5Q2xvc2UoaW50IHN0YXR1cykKLXsKLSAgICAv
LyBJZiB0aGVyZSB3YXMgbm8gZGF0YSwgd2UgbWlnaHQgZ2V0IGhlcmUgd2l0aCB0aGUgdHlwZSBz
dGlsbCB1bmtub3duLiBObyBkYXRhIGF0IGFsbCAtPiBubyBSU1MKLSAgICAvLyBkYXRhLgotICAg
IGlmIChtX3Jlc291cmNlVHlwZSA9PSBUeXBlVW5rbm93bikKLSAgICAgICAgbV9yZXNvdXJjZVR5
cGUgPSBUeXBlTm90UlNTOwotCi0gICAgaWYgKGlzUlNTQ29udGVudChtX3Jlc291cmNlVHlwZSkp
Ci0gICAgICAgIGhhbmRsZVJTU0NvbnRlbnQoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc2VuZFNh
dmVkSGVhZGVycygpOwotICAgICAgICBGaWx0ZXJTdHJlYW06Om5vdGlmeUNsb3NlKHN0YXR1cyk7
Ci0gICAgfQotfQotCi1ib29sIFJTU0ZpbHRlclN0cmVhbTo6Y29udmVydENvbnRlbnRUb0h0bWwo
c3RkOjpzdHJpbmcmIHJlc3VsdCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBj
b25zdCBzdGQ6OnN0cmluZyYgYmFzZSA9IHVybCgpLnRvU3RkU3RyaW5nKCk7Ci0gICAgY29uc3Qg
c3RkOjpzdHJpbmcmIGVuYyA9IGVuY29kaW5nKCk7Ci0KLSAgICBPd25QdHI8UlNTUGFyc2VyQmFz
ZT4gcGFyc2VyID0gY3JlYXRlUGFyc2VyKG1fcmVzb3VyY2VUeXBlKTsKLQotICAgIGlmIChpc1Ry
YW5zY29kaW5nTmVlZGVkKGVuYykpIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgdHJhbnNjb2RlZENv
bnRlbnQ7Ci0gICAgICAgIGlmICh0cmFuc2NvZGVDb250ZW50KG1fY29udGVudCwgZW5jLCB0cmFu
c2NvZGVkQ29udGVudCkpCi0gICAgICAgICAgICBzdWNjZXNzID0gcGFyc2VyLT5wYXJzZUJ1ZmZl
cih0cmFuc2NvZGVkQ29udGVudC5kYXRhKCksIHRyYW5zY29kZWRDb250ZW50Lmxlbmd0aCgpLCBi
YXNlLmNfc3RyKCksIHNfdXRmOEVuY29kaW5nTmFtZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN1
Y2Nlc3MgPSBwYXJzZXItPnBhcnNlQnVmZmVyKG1fY29udGVudC5kYXRhKCksIG1fY29udGVudC5s
ZW5ndGgoKSwgYmFzZS5jX3N0cigpLCBzX3V0ZjhFbmNvZGluZ05hbWUpOwotCi0gICAgaWYgKCFz
dWNjZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRToKLSAgICAvLyBU
aGUgSFRNTCBzdHJpbmcgZ2VuZXJhdGVkIGJlbG93IHB1cnBvcnRzIHRvIGJlIGEgVVRGOC1lbmNv
ZGVkCi0gICAgLy8gV1RGOjpTdHJpbmcsIGFsdGhvdWdoIGl0cyBjaGFyYWN0ZXJzOCgpIGRhdGEg
c2hvdWxkIGJlIExhdGluMS4KLSAgICAvLyBXZSBidWlsZCB0aGVuIGV4dHJhY3QgdGhpcyBzdHJp
bmcsIHByZXRlbmRpbmcgdGhhdCB3ZSBkb24ndCBrbm93Ci0gICAgLy8gdGhhdCB3ZSBwYXNzIGlu
Y29ycmVjdGx5LWVuY29kZWQgY2hhciBkYXRhIGJvdGggd2F5cy4KLSAgICAvLyBXZSBzaG91bGQg
dXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgaW5zdGVhZCBvZiBXVEY6OlN0cmluZy4K
LSAgICBPd25QdHI8UlNTR2VuZXJhdG9yPiBnZW5lcmF0b3IgPSBhZG9wdFB0cihuZXcgUlNTR2Vu
ZXJhdG9yKCkpOwotICAgIFN0cmluZyBodG1sID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZUh0bWwocGFy
c2VyLT5tX3Jvb3QpOwotICAgIEFTU0VSVChodG1sLmlzOEJpdCgpKTsKLSAgICByZXN1bHQuYXNz
aWduKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGh0bWwuY2hhcmFjdGVyczgoKSksIGh0
bWwubGVuZ3RoKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUlNTRmlsdGVyU3Ry
ZWFtOjpoYW5kbGVSU1NDb250ZW50KCkKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VSVChpc1JTU0Nv
bnRlbnQobV9yZXNvdXJjZVR5cGUpKTsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3
b3JrQnVmZmVyKiBidWZmZXI7Ci0gICAgc3RkOjpzdHJpbmcgaHRtbDsKLSAgICBpZiAoIWNvbnZl
cnRDb250ZW50VG9IdG1sKGh0bWwpKQotICAgICAgICBidWZmZXIgPSBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6Y3JlYXRlTmV0d29ya0J1ZmZlckJ5Q29weWluZ0RhdGEobV9jb250ZW50LmNfc3RyKCks
IG1fY29udGVudC5zaXplKCkpOwotICAgIGVsc2UgewotICAgICAgICB1cGRhdGVSU1NIZWFkZXJz
KGh0bWwuc2l6ZSgpKTsKLSAgICAgICAgYnVmZmVyID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OmNy
ZWF0ZU5ldHdvcmtCdWZmZXJCeUNvcHlpbmdEYXRhKGh0bWwuY19zdHIoKSwgaHRtbC5zaXplKCkp
OwotICAgIH0KLQotICAgIHNlbmRTYXZlZEhlYWRlcnMoKTsKLSAgICBGaWx0ZXJTdHJlYW06Om5v
dGlmeURhdGFSZWNlaXZlZChidWZmZXIpOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpyZWxl
YXNlTmV0d29ya0J1ZmZlcihidWZmZXIpOwotICAgIEZpbHRlclN0cmVhbTo6bm90aWZ5Q2xvc2Uo
RmlsdGVyU3RyZWFtOjpTdGF0dXNTdWNjZXNzKTsKLX0KLQotY29uc3Qgc3RkOjpzdHJpbmcmIFJT
U0ZpbHRlclN0cmVhbTo6Y2hhcnNldCgpCi17Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQobV9jb250
ZW50VHlwZUluZGV4ID49IDApOwotCi0gICAgaWYgKG1fY2hhcnNldENoZWNrZWQpCi0gICAgICAg
IHJldHVybiBtX2NoYXJzZXQ7Ci0KLSAgICBtX2NoYXJzZXRDaGVja2VkID0gdHJ1ZTsKLQotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjaGFyc2V0UHJlZml4ID0gImNoYXJzZXQ9IjsKLSAgICBzdGF0
aWMgY29uc3QgaW50IGNoYXJzZXRQcmVmaXhMZW4gPSBzdHJsZW4oY2hhcnNldFByZWZpeCk7Ci0g
ICAgc2l6ZV90IHBvcyA9IChtX2hlYWRlcnMuYXQobV9jb250ZW50VHlwZUluZGV4KS5zZWNvbmQp
LmZpbmQoY2hhcnNldFByZWZpeCk7Ci0gICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykg
ewotICAgICAgICBtX2NoYXJzZXQgPSBtX2hlYWRlcnMuYXQobV9jb250ZW50VHlwZUluZGV4KS5z
ZWNvbmQuc3Vic3RyKHBvcyArIGNoYXJzZXRQcmVmaXhMZW4pLnRvU3RkU3RyaW5nKCk7Ci0gICAg
ICAgIHN0cmlwV2hpdGVTcGFjZShtX2NoYXJzZXQpOwotICAgIH0KLQotICAgIHJldHVybiBtX2No
YXJzZXQ7Ci19Ci0KLWNvbnN0IHN0ZDo6c3RyaW5nJiBSU1NGaWx0ZXJTdHJlYW06OmVuY29kaW5n
KCkKLXsKLSAgICBpZiAobV9lbmNvZGluZ0NoZWNrZWQpCi0gICAgICAgIHJldHVybiBtX2VuY29k
aW5nOwotCi0gICAgbV9lbmNvZGluZ0NoZWNrZWQgPSB0cnVlOwotICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBzdHIgPSBjaGFyc2V0KCk7Ci0KLSAgICBpZiAoIXN0ci5lbXB0eSgpKSB7Ci0gICAgICAg
IG1fZW5jb2RpbmcgPSBzdHI7Ci0gICAgICAgIHJldHVybiBtX2VuY29kaW5nOwotICAgIH0KLQot
ICAgIGNvbnN0IGNoYXIqIHN0YXJ0ID0gbV9jb250ZW50LmNfc3RyKCk7Ci0gICAgY29uc3QgY2hh
ciogZW5jb2RpbmdTdGFydCA9IDA7Ci0gICAgY29uc3QgY2hhciogZW5jb2RpbmdFbmQgPSAwOwot
ICAgIGlmIChmaW5kWE1MRW5jb2RpbmdQb3NpdGlvbihzdGFydCwgZW5jb2RpbmdTdGFydCwgZW5j
b2RpbmdFbmQpKSB7Ci0gICAgICAgIG1fZW5jb2RpbmcgPSBzdGQ6OnN0cmluZyhlbmNvZGluZ1N0
YXJ0LCBlbmNvZGluZ0VuZCAtIGVuY29kaW5nU3RhcnQpOwotICAgICAgICByZXR1cm4gbV9lbmNv
ZGluZzsKLSAgICB9Ci0KLSAgICBpZiAoZmluZFhNTExhbmd1YWdlUG9zaXRpb24oc3RhcnQsIGVu
Y29kaW5nU3RhcnQsIGVuY29kaW5nRW5kKSkgewotICAgICAgICBzdGQ6OnN0cmluZyBsYW5ndWFn
ZVN0cmluZyhlbmNvZGluZ1N0YXJ0LCBlbmNvZGluZ0VuZCAtIGVuY29kaW5nU3RhcnQpOwotICAg
ICAgICBjb25zdCBjaGFyKiBkZWZhdWx0RW5jb2RpbmcgPSBkZWZhdWx0RW5jb2RpbmdGb3JMYW5n
dWFnZShsYW5ndWFnZVN0cmluZy5jX3N0cigpKTsKLSAgICAgICAgaWYgKGRlZmF1bHRFbmNvZGlu
ZykgewotICAgICAgICAgICAgbV9lbmNvZGluZyA9IGRlZmF1bHRFbmNvZGluZzsKLSAgICAgICAg
ICAgIHJldHVybiBtX2VuY29kaW5nOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1f
ZW5jb2Rpbmc7Ci19Ci0KLXZvaWQgUlNTRmlsdGVyU3RyZWFtOjpzYXZlSGVhZGVycyhjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3QmIGhlYWRlcnMp
Ci17Ci0gICAgbV9oZWFkZXJzID0gaGVhZGVyczsKLX0KLQotdm9pZCBSU1NGaWx0ZXJTdHJlYW06
OnJlbW92ZUhlYWRlcihjb25zdCBjaGFyKiBrZXkpCi17Ci0gICAgTmV0d29ya1JlcXVlc3Q6Okhl
YWRlckxpc3Q6Oml0ZXJhdG9yIGVuZCA9IG1faGVhZGVycy5lbmQoKTsKLSAgICBmb3IgKE5ldHdv
cmtSZXF1ZXN0OjpIZWFkZXJMaXN0OjppdGVyYXRvciBpdGVyID0gbV9oZWFkZXJzLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCFzdHJjYXNlY21wKGl0ZXItPmZp
cnN0LmNfc3RyKCksIGtleSkpIHsKLSAgICAgICAgICAgIG1faGVhZGVycy5lcmFzZShpdGVyKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSU1NGaWx0
ZXJTdHJlYW06OnVwZGF0ZUhlYWRlcihjb25zdCBjaGFyKiBrZXksIGNvbnN0IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTdHJpbmcmIHZhbHVlKQotewotICAgIE5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJM
aXN0OjppdGVyYXRvciBpdGVyID0gbV9oZWFkZXJzLmJlZ2luKCk7Ci0gICAgTmV0d29ya1JlcXVl
c3Q6OkhlYWRlckxpc3Q6Oml0ZXJhdG9yIGVuZCA9IG1faGVhZGVycy5lbmQoKTsKLSAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoIXN0cmNhc2VjbXAoaXRlci0+
Zmlyc3QuY19zdHIoKSwga2V5KSkgewotICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdmFsdWU7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2hlYWRlcnMu
aW5zZXJ0KGl0ZXIsIHN0ZDo6bWFrZV9wYWlyKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6
OmZyb21Bc2NpaShrZXkpLCB2YWx1ZSkpOwotfQotCi12b2lkIFJTU0ZpbHRlclN0cmVhbTo6dXBk
YXRlUlNTSGVhZGVycyhzaXplX3Qgc2l6ZSkKLXsKLSAgICBTVEFUSUNfTE9DQUxfU1RSSU5HKHNf
aHRtbENvbnRlbnRUeXBlLCAidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Iik7Ci0KLSAgICByZW1v
dmVIZWFkZXIoc19jb250ZW50RW5jb2RpbmdIZWFkZXJLZXkpOwotICAgIHVwZGF0ZUhlYWRlcihz
X2NvbnRlbnRUeXBlSGVhZGVyS2V5LCBzX2h0bWxDb250ZW50VHlwZSk7Ci0gICAgdXBkYXRlSGVh
ZGVyKHNfY29udGVudExlbmd0aEhlYWRlcktleSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
Zzo6bnVtYmVyKHNpemUpKTsKLX0KLQotdm9pZCBSU1NGaWx0ZXJTdHJlYW06OnNlbmRTYXZlZEhl
YWRlcnMoKQotewotICAgIGlmICghbV9oZWFkZXJzLmVtcHR5KCkpIHsKLSAgICAgICAgRmlsdGVy
U3RyZWFtOjpub3RpZnlIZWFkZXJzUmVjZWl2ZWQobV9oZWFkZXJzKTsKLSAgICAgICAgbV9jb250
ZW50VHlwZUluZGV4ID0gLTE7Ci0gICAgICAgIG1faGVhZGVycy5jbGVhcigpOwotICAgIH0KLX0K
LQotdm9pZCBSU1NGaWx0ZXJTdHJlYW06OmFwcGVuZERhdGEoQmxhY2tCZXJyeTo6UGxhdGZvcm06
Ok5ldHdvcmtCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBtX2NvbnRlbnQuYXBwZW5kKG5ldHdvcmtC
dWZmZXJEYXRhKGJ1ZmZlciksIG5ldHdvcmtCdWZmZXJEYXRhTGVuZ3RoKGJ1ZmZlcikpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU0ZpbHRlclN0cmVhbS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTRmlsdGVyU3Ry
ZWFtLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvYmxhY2tiZXJyeS9yc3MvUlNTRmlsdGVyU3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaWZuZGVmIFJTU0ZpbHRlclN0cmVhbV9oCi0jZGVmaW5lIFJTU0ZpbHRl
clN0cmVhbV9oCi0KLSNpbmNsdWRlIDxuZXR3b3JrL0ZpbHRlclN0cmVhbS5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJTU0ZpbHRlclN0cmVhbSA6IHB1YmxpYyBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtIHsKLXB1YmxpYzoKLSAgICBlbnVtIFJlc291cmNl
VHlwZSB7Ci0gICAgICAgIFR5cGVVbmtub3duLAotICAgICAgICBUeXBlTm90UlNTLAotICAgICAg
ICBUeXBlUlNTMTAsCi0gICAgICAgIFR5cGVSU1MyMCwKLSAgICAgICAgVHlwZVJTU0F0b20KLSAg
ICB9OwotCi0gICAgUlNTRmlsdGVyU3RyZWFtKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
U3RhdHVzUmVjZWl2ZWQoaW50IHN0YXR1cywgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgbWVzc2FnZSk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUhlYWRlcnNSZWNlaXZlZChj
b25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RGF0YVJlY2VpdmVkKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpOZXR3b3JrQnVmZmVyKik7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUNsb3NlKGludCBzdGF0
dXMpOwotCi1wcml2YXRlOgotICAgIGJvb2wgY29udmVydENvbnRlbnRUb0h0bWwoc3RkOjpzdHJp
bmcmIHJlc3VsdCk7Ci0gICAgdm9pZCBoYW5kbGVSU1NDb250ZW50KCk7Ci0KLSAgICBjb25zdCBz
dGQ6OnN0cmluZyYgY2hhcnNldCgpOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGluZygp
OwotCi0gICAgdm9pZCBzYXZlSGVhZGVycyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0
d29ya1JlcXVlc3Q6OkhlYWRlckxpc3QmKTsKLSAgICB2b2lkIHJlbW92ZUhlYWRlcihjb25zdCBj
aGFyKiBrZXkpOwotICAgIHZvaWQgdXBkYXRlSGVhZGVyKGNvbnN0IGNoYXIqIGtleSwgY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgdXBkYXRlUlNT
SGVhZGVycyhzaXplX3QpOwotICAgIHZvaWQgc2VuZFNhdmVkSGVhZGVycygpOwotCi0gICAgdm9p
ZCBhcHBlbmREYXRhKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrQnVmZmVyKik7Ci0KLSAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3QgbV9oZWFk
ZXJzOwotICAgIHN0ZDo6c3RyaW5nIG1fY29udGVudDsKLSAgICBzdGQ6OnN0cmluZyBtX2NoYXJz
ZXQ7Ci0gICAgc3RkOjpzdHJpbmcgbV9lbmNvZGluZzsKLQotICAgIFJlc291cmNlVHlwZSBtX3Jl
c291cmNlVHlwZTsKLSAgICBpbnQgbV9jb250ZW50VHlwZUluZGV4OwotCi0gICAgYm9vbCBtX2No
YXJzZXRDaGVja2VkOwotICAgIGJvb2wgbV9lbmNvZGluZ0NoZWNrZWQ7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBSU1NGaWx0ZXJTdHJlYW1faApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9yc3MvUlNTR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJSU1NHZW5lcmF0b3IuaCIKLQotI2luY2x1ZGUgIkxvY2FsaXplUmVzb3VyY2UuaCIK
LSNpbmNsdWRlICJSU1NQYXJzZXJCYXNlLmgiCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBzX2RlZmF1bHRGZWVkVGl0bGUgPSBpMThuKCJV
bnRpdGxlZCBGZWVkIik7Ci1zdGF0aWMgY29uc3QgY2hhciogc19kZWZhdWx0RW50cnlUaXRsZSA9
IGkxOG4oIlVudGl0bGVkIEVudHJ5Iik7Ci0KLVJTU0dlbmVyYXRvcjo6UlNTR2VuZXJhdG9yKCkK
LXsKLX0KLQotUlNTR2VuZXJhdG9yOjp+UlNTR2VuZXJhdG9yKCkKLXsKLX0KLQotU3RyaW5nIFJT
U0dlbmVyYXRvcjo6Z2VuZXJhdGVIdG1sKFJTU0ZlZWQqIGZlZWQpCi17Ci0gICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPGh0bWw+PGhlYWQ+PG1l
dGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7Y2hhcnNl
dD11dGYtOFwiIC8+Iik7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8bWV0YSBuYW1lPVwi
dmlld3BvcnRcIiBjb250ZW50PVwiaW5pdGlhbC1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9IG5v
XCI+Iik7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8dGl0bGU+Iik7Ci0KLSAgICBpZiAo
IWZlZWQtPm1fdGl0bGUuaXNFbXB0eSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZChmZWVkLT5t
X3RpdGxlKTsKLSAgICBlbHNlIGlmICghZmVlZC0+bV9saW5rLmlzRW1wdHkoKSkKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoZmVlZC0+bV9saW5rKTsKLSAgICBlbHNlCi0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHNfZGVmYXVsdEZlZWRUaXRsZSk7Ci0KLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IjwvdGl0bGU+PC9oZWFkPjxib2R5PiIpOwotCi0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8
aDI+Iik7Ci0gICAgaWYgKCFmZWVkLT5tX2xpbmsuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiPGEgaHJlZj1cIiIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChm
ZWVkLT5tX2xpbmspOwotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiPiIpOwotICAg
IH0KLSAgICBpZiAoIWZlZWQtPm1fdGl0bGUuaXNFbXB0eSgpKQotICAgICAgICBidWlsZGVyLmFw
cGVuZChmZWVkLT5tX3RpdGxlKTsKLSAgICBlbHNlCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHNf
ZGVmYXVsdEZlZWRUaXRsZSk7Ci0KLSAgICBpZiAoIWZlZWQtPm1fbGluay5pc0VtcHR5KCkpCi0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPC9hPiIpOwotCi0gICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCI8L2gyPiIpOwotCi0gICAgaWYgKCFmZWVkLT5tX2Rlc2NyaXB0aW9uLmlzRW1w
dHkoKSkgewotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxwPiIpOwotICAgICAgICBi
dWlsZGVyLmFwcGVuZChmZWVkLT5tX2Rlc2NyaXB0aW9uKTsKLSAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCI8L3A+Iik7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGZlZWQtPm1faXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUlNTSXRlbSogaXRlbSA9IGZl
ZWQtPm1faXRlbXNbaV07Ci0gICAgICAgIFN0cmluZyBhcnRpY2xlTmFtZTsKLSAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCI8ZGl2IGlkPVwiIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGFydGljbGVOYW1lKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiBjbGFzcz1c
ImFydGljbGVcIj5cbjxhIGhyZWY9XCIiKTsKLSAgICAgICAgaWYgKCFpdGVtLT5tX2xpbmsuaXNF
bXB0eSgpKQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaXRlbS0+bV9saW5rKTsKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIj48Yj4iKTsKLSAgICAgICAgaWYgKCFpdGVtLT5t
X3RpdGxlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0ZW0tPm1fdGl0
bGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChzX2RlZmF1bHRF
bnRyeVRpdGxlKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8L2I+PC9hPlxuPGJy
IC8+Iik7Ci0KLSAgICAgICAgaWYgKCFpdGVtLT5tX2F1dGhvci5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGkxOG4oIkJ5IikpOwotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgPGI+Iik7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVtLT5t
X2F1dGhvcik7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjwvYj4gIik7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWZlZWQtPm1fYXV0aG9yLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGkxOG4oIkJ5IikpOwotICAgICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIDxiPiIpOwotICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGZlZWQtPm1fYXV0aG9yKTsKLSAgICAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIjwvYj4gIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWl0ZW0tPm1fY2F0ZWdvcmllcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlm
ICghaXRlbS0+bV9hdXRob3IuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGkxOG4oInVuZGVyICIpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChpMThuKCJVbmRlciAiKSk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpdGVtLT5tX2NhdGVnb3JpZXMuc2l6ZSgpIDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8Yj4iKTsKLSAgICAgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChpdGVtLT5tX2NhdGVnb3JpZXNbaV0pOwotICAgICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPC9iPiIpOwotCi0gICAgICAgICAgICAgICAgaWYgKGkgPCBp
dGVtLT5tX2NhdGVnb3JpZXMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8YnIgLz4iKTsKLSAgICAgICAgaWYgKCFpdGVtLT5t
X3B1YkRhdGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaXRlbS0+bV9w
dWJEYXRlKTsKLQotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxiciAvPiIpOwotICAg
ICAgICBpZiAoIWl0ZW0tPm1fZGVzY3JpcHRpb24uaXNFbXB0eSgpKQotICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoaXRlbS0+bV9kZXNjcmlwdGlvbik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiPGJyIC8+Iik7Ci0KLSAgICAgICAgaWYgKGl0ZW0tPm1fZW5jbG9zdXJlKSB7Ci0g
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxiciAvPiIpOwotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8YSBocmVmPVwiIik7Ci0gICAgICAgICAgICBidWlsZGVy
LmFwcGVuZChpdGVtLT5tX2VuY2xvc3VyZS0+bV91cmwpOwotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJcIj4iKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGkxOG4oIkVt
YmVkZGVkICIpKTsKLQotICAgICAgICAgICAgUlNTRW5jbG9zdXJlOjpUeXBlIHR5cGUgPSBpdGVt
LT5tX2VuY2xvc3VyZS0+dHlwZUluRW51bSgpOwotICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIFJTU0VuY2xvc3VyZTo6VHlwZUltYWdlOgotICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKGkxOG4oIkltYWdlIikpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBSU1NFbmNsb3N1cmU6OlR5cGVBdWRpbzoKLSAgICAgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZChpMThuKCJBdWRpbyIpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgUlNTRW5jbG9zdXJlOjpUeXBlVmlkZW86Ci0gICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoaTE4bigiVmlkZW8iKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFJTU0VuY2xvc3VyZTo6VHlwZUFwcGxpY2F0aW9uOgotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChpMThuKCJV
bmtub3duIENvbnRlbnQiKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGkxOG4oIiBTb3VyY2U6ICIpKTsKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0ZW0tPm1fZW5jbG9zdXJlLT5zdWdnZXN0ZWROYW1lKCkp
OwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8L2E+PGJyIC8+PGJyIC8+Iik7
Ci0gICAgICAgIH0KLQotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxiciAvPjwvZGl2
PlxuIik7Ci0gICAgfQotCi0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8L2JvZHk+PC9odG1s
PlxuIik7Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNr
YmVycnkvcnNzL1JTU0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE2
MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3Mv
UlNTR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVm
IFJTU0dlbmVyYXRvcl9oCi0jZGVmaW5lIFJTU0dlbmVyYXRvcl9oCi0KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSU1NGZWVk
OwotCi1jbGFzcyBSU1NHZW5lcmF0b3IgewotcHVibGljOgotICAgIFJTU0dlbmVyYXRvcigpOwot
ICAgIH5SU1NHZW5lcmF0b3IoKTsKLQotICAgIFN0cmluZyBnZW5lcmF0ZUh0bWwoUlNTRmVlZCop
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUlNTR2VuZXJhdG9y
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3Mv
UlNTUGFyc2VyQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NQYXJzZXJCYXNlLmNwcAkocmV2aXNpb24gMTYxNTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NQ
YXJzZXJCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUlNTUGFyc2VyQmFzZS5oIgotCi0jaW5jbHVkZSAibGli
eG1sL3BhcnNlci5oIgotI2luY2x1ZGUgImxpYnhtbC94bWx3cml0ZXIuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUlNTRW5j
bG9zdXJlOjpSU1NFbmNsb3N1cmUoKQotICAgIDogbV90eXBlSW5FbnVtKFR5cGVVbmtub3duKQot
eyB9Ci0KLVJTU0VuY2xvc3VyZTo6VHlwZSBSU1NFbmNsb3N1cmU6OnR5cGVJbkVudW0oKQotewot
ICAgIGlmIChUeXBlVW5rbm93biAhPSBtX3R5cGVJbkVudW0pCi0gICAgICAgIHJldHVybiBtX3R5
cGVJbkVudW07Ci0KLSAgICBzaXplX3QgZGl2ID0gbV90eXBlLmZpbmQoJy8nKTsKLSAgICBpZiAo
V1RGOjpub3RGb3VuZCA9PSBkaXYgfHwgIWRpdikgewotICAgICAgICBtX3R5cGVJbkVudW0gPSBU
eXBlVW5zdXBwb3J0ZWQ7Ci0gICAgICAgIHJldHVybiBtX3R5cGVJbkVudW07Ci0gICAgfQotCi0g
ICAgU3RyaW5nIGJhc2UgPSBtX3R5cGUuc3Vic3RyaW5nKDAsIGRpdikubG93ZXIoKTsKLSAgICBp
ZiAoYmFzZSA9PSAiaW1hZ2UiKQotICAgICAgICBtX3R5cGVJbkVudW0gPSBUeXBlSW1hZ2U7Ci0g
ICAgZWxzZSBpZiAoYmFzZSA9PSAiYXVkaW8iKQotICAgICAgICBtX3R5cGVJbkVudW0gPSBUeXBl
QXVkaW87Ci0gICAgZWxzZSBpZiAoYmFzZSA9PSAidmlkZW8iKQotICAgICAgICBtX3R5cGVJbkVu
dW0gPSBUeXBlVmlkZW87Ci0gICAgZWxzZSBpZiAoYmFzZSA9PSAiYXBwbGljYXRpb24iKQotICAg
ICAgICBtX3R5cGVJbkVudW0gPSBUeXBlQXBwbGljYXRpb247Ci0gICAgZWxzZQotICAgICAgICBt
X3R5cGVJbkVudW0gPSBUeXBlVW5zdXBwb3J0ZWQ7Ci0KLSAgICByZXR1cm4gbV90eXBlSW5FbnVt
OwotfQotCi1TdHJpbmcgUlNTRW5jbG9zdXJlOjpzdWdnZXN0ZWROYW1lKCkgY29uc3QKLXsKLSAg
ICBzaXplX3Qgc3RhcnQgPSBtX3VybC5yZXZlcnNlRmluZCgnLycpOwotICAgIGlmIChXVEY6Om5v
dEZvdW5kID09IHN0YXJ0KQotICAgICAgICBzdGFydCA9IDA7Ci0gICAgZWxzZQotICAgICAgICAr
K3N0YXJ0OwotCi0gICAgcmV0dXJuIG1fdXJsLnN1YnN0cmluZyhzdGFydCk7Ci19Ci0KLVJTU0Zl
ZWQ6OlJTU0ZlZWQoKQotewotfQotCi1SU1NGZWVkOjp+UlNTRmVlZCgpCi17Ci0gICAgY2xlYXIo
KTsKLX0KLQotdm9pZCBSU1NGZWVkOjpjbGVhcigpCi17Ci0gICAgZGVwcmVjYXRlZERlbGV0ZUFs
bFZhbHVlcyhtX2l0ZW1zKTsKLSAgICBtX2l0ZW1zLmNsZWFyKCk7Ci19Ci0KLVJTU0l0ZW06OlJT
U0l0ZW0oKQotICAgIDogbV9lbmNsb3N1cmUoMCkKLXsKLX0KLQotUlNTSXRlbTo6flJTU0l0ZW0o
KQotewotICAgIGNsZWFyKCk7Ci19Ci0KLXZvaWQgUlNTSXRlbTo6Y2xlYXIoKQotewotICAgIGRl
bGV0ZSBtX2VuY2xvc3VyZTsKLX0KLQotUlNTUGFyc2VyQmFzZTo6UlNTUGFyc2VyQmFzZSgpCi0g
ICAgOiBtX3Jvb3QoMCkKLXsKLX0KLQotUlNTUGFyc2VyQmFzZTo6flJTU1BhcnNlckJhc2UoKQot
ewotICAgIGRlbGV0ZSBtX3Jvb3Q7Ci19Ci0KLVN0cmluZyB0ZXh0RnJvbVhNTEF0dHIoeG1sQXR0
ciogYXR0cikKLXsKLSAgICBpZiAoIWF0dHIpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwotCi0gICAgU3RyaW5nQnVpbGRlciB0ZXh0OwotCi0gICAgZm9yICh4bWxOb2RlKiBub2RlID0g
YXR0ci0+Y2hpbGRyZW47IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgICAgIGlmIChu
b2RlLT50eXBlID09IFhNTF9URVhUX05PREUpCi0gICAgICAgICAgICB0ZXh0LmFwcGVuZChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihub2RlLT5jb250ZW50KSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRleHQudG9TdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKLX0KLQotU3RyaW5nIHRl
eHRGcm9tWE1MTm9kZSh4bWxOb2RlKiBub2RlKQotewotICAgIGlmICghbm9kZSkKLSAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHRleHQ7Ci0KLSAgICBm
b3IgKG5vZGUgPSBub2RlLT5jaGlsZHJlbjsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAg
ICAgICAgaWYgKChub2RlLT50eXBlID09IFhNTF9URVhUX05PREUpIHx8IChub2RlLT50eXBlID09
IFhNTF9DREFUQV9TRUNUSU9OX05PREUpKQotICAgICAgICAgICAgdGV4dC5hcHBlbmQocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4obm9kZS0+Y29udGVudCkpOwotICAgIH0KLQotICAgIHJl
dHVybiB0ZXh0LnRvU3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9yc3MvUlNTUGFyc2VyQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTUGFyc2VyQmFzZS5oCShyZXZpc2lvbiAx
NjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNz
L1JTU1BhcnNlckJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0KLSNp
Zm5kZWYgUlNTUGFyc2VyQmFzZV9oCi0jZGVmaW5lIFJTU1BhcnNlckJhc2VfaAotCi0jaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWlzYy5oPgotI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJTU0l0ZW07Ci0KLWNsYXNzIFJTU0VuY2xv
c3VyZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgVHlwZVVua25vd24sCi0g
ICAgICAgIFR5cGVJbWFnZSwKLSAgICAgICAgVHlwZUF1ZGlvLAotICAgICAgICBUeXBlVmlkZW8s
Ci0gICAgICAgIFR5cGVBcHBsaWNhdGlvbiwKLSAgICAgICAgVHlwZVVuc3VwcG9ydGVkCi0gICAg
fTsKLQotICAgIFJTU0VuY2xvc3VyZSgpOwotCi0gICAgVHlwZSB0eXBlSW5FbnVtKCk7Ci0gICAg
U3RyaW5nIHN1Z2dlc3RlZE5hbWUoKSBjb25zdDsKLQotICAgIFN0cmluZyBtX3VybDsKLSAgICBT
dHJpbmcgbV90eXBlOwotICAgIFN0cmluZyBtX2xlbmd0aDsKLQotcHJpdmF0ZToKLSAgICBUeXBl
IG1fdHlwZUluRW51bTsKLX07Ci0KLWNsYXNzIFJTU0l0ZW1CYXNlIHsKLXB1YmxpYzoKLSAgICBT
dHJpbmcgbV90aXRsZTsKLSAgICBTdHJpbmcgbV9saW5rOwotICAgIFN0cmluZyBtX2Rlc2NyaXB0
aW9uOwotICAgIFN0cmluZyBtX3VwZGF0ZWQ7Ci0gICAgU3RyaW5nIG1fYXV0aG9yOwotICAgIFN0
cmluZyBtX3B1YkRhdGU7Ci0gICAgU3RyaW5nIG1faWQ7Ci19OwotCi1jbGFzcyBSU1NGZWVkOiBw
dWJsaWMgUlNTSXRlbUJhc2UgewotcHVibGljOgotICAgIFJTU0ZlZWQoKTsKLSAgICB+UlNTRmVl
ZCgpOwotCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgU3RyaW5nIG1fbGFuZ3VhZ2U7Ci0gICAg
U3RyaW5nIG1fdHRsOwotCi0gICAgVmVjdG9yPFJTU0l0ZW0qPiBtX2l0ZW1zOwotfTsKLQotY2xh
c3MgUlNTSXRlbTogcHVibGljIFJTU0l0ZW1CYXNlIHsKLXB1YmxpYzoKLSAgICBSU1NJdGVtKCk7
Ci0gICAgflJTU0l0ZW0oKTsKLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIFN0cmluZyBtX2Nv
bW1lbnRzOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fY2F0ZWdvcmllczsKLSAgICBSU1NFbmNsb3N1
cmUqIG1fZW5jbG9zdXJlOwotcHJpdmF0ZToKLSAgICBESVNBQkxFX0NPUFkoUlNTSXRlbSkKLX07
Ci0KLWNsYXNzIFJTU1BhcnNlckJhc2UgewotcHVibGljOgotICAgIFJTU1BhcnNlckJhc2UoKTsK
LSAgICB2aXJ0dWFsIH5SU1NQYXJzZXJCYXNlKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VC
dWZmZXIoY29uc3QgY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoLCBjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIGVuY29kaW5nKSA9IDA7Ci0KLSAgICBSU1NGZWVkKiBtX3Jvb3Q7Ci1wcml2YXRl
OgotICAgIERJU0FCTEVfQ09QWShSU1NQYXJzZXJCYXNlKQotfTsKLQotU3RyaW5nIHRleHRGcm9t
WE1MQXR0cih4bWxBdHRyKik7Ci1TdHJpbmcgdGV4dEZyb21YTUxOb2RlKHhtbE5vZGUqKTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUlNTUGFyc2VyQmFzZV9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2JsYWNrYmVycnkvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAkocmV2aXNpb24gMTYxNTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlX2gKLSNkZWZpbmUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Vf
aAotCi0jaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgOiBwdWJsaWMgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlIHsKLXB1YmxpYzoKLSAgICBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSgpCi0gICAgICAgIDogbV9pc1N0b3JlZChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0
aW9uU3BhY2UsIGNvbnN0IENyZWRlbnRpYWwmIHByb3Bvc2VkQ3JlZGVudGlhbCwgdW5zaWduZWQg
cHJldmlvdXNGYWlsdXJlQ291bnQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKLSAgICAgICAgOiBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZUJhc2UocHJvdGVjdGlvblNwYWNlLCBwcm9wb3NlZENyZWRlbnRpYWwsIHByZXZpb3VzRmFp
bHVyZUNvdW50LCByZXNwb25zZSwgZXJyb3IpCi0gICAgICAgICwgbV9pc1N0b3JlZChmYWxzZSkK
LSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTdG9yZWQoYm9vbCBpc1N0b3JlZCkgeyBtX2lz
U3RvcmVkID0gaXNTdG9yZWQ7IH0KLSAgICBib29sIGlzU3RvcmVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc1N0b3JlZDsgfQotCi0gICAgYm9vbCBoYXNDcmVkZW50aWFscygpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHJldHVybiAhcHJvcG9zZWRDcmVkZW50aWFsKCkuaXNFbXB0eSgpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICAvLyBEZXNjcmliZXMgaWYgYXR0YWNoZWQgY3JlZGVudGlhbHMgYXJlIHN0b3JlZCBp
biBDcmVkZW50aWFsU3RvcmFnZS4KLSAgICBib29sIG1faXNTdG9yZWQ7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvQXV0b2ZpbGxC
YWNraW5nU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9BdXRvZmlsbEJhY2tpbmdTdG9yZS5jcHAJKHJldmlzaW9uIDE2MTU5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9BdXRvZmls
bEJhY2tpbmdTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaW5jbHVkZSAiQXV0b2ZpbGxCYWNraW5nU3RvcmUuaCIKLQotI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKLSNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlIDxCbGFja0JlcnJ5
UGxhdGZvcm1TZXR0aW5ncy5oPgotCi0jZGVmaW5lIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKHN0
YXRlbWVudCwgcmV0dXJuVmFsdWUsIC4uLikgXAotICAgIGlmIChzdGF0ZW1lbnQpIHsgXAotICAg
ICAgICBMT0dfRVJST1IoX19WQV9BUkdTX18pOyBcCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1
ZTsgXAotICAgIH0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdXRvZmlsbEJhY2tpbmdTdG9y
ZSYgYXV0b2ZpbGxCYWNraW5nU3RvcmUoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXV0
b2ZpbGxCYWNraW5nU3RvcmUsIGJhY2tpbmdTdG9yZSwgKCkpOwotICAgIGlmICghYmFja2luZ1N0
b3JlLm1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIGJhY2tpbmdTdG9yZS5vcGVuKHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGluZ3M6Omluc3Rh
bmNlKCktPmFwcGxpY2F0aW9uRGF0YURpcmVjdG9yeSgpLmNfc3RyKCksICIvYXV0b2ZpbGwuZGIi
KSk7Ci0gICAgcmV0dXJuIGJhY2tpbmdTdG9yZTsKLX0KLQotQXV0b2ZpbGxCYWNraW5nU3RvcmU6
OkF1dG9maWxsQmFja2luZ1N0b3JlKCkKLSAgICA6IG1fYWRkU3RhdGVtZW50KDApCi0gICAgLCBt
X3VwZGF0ZVN0YXRlbWVudCgwKQotICAgICwgbV9jb250YWluc1N0YXRlbWVudCgwKQotICAgICwg
bV9nZXRTdGF0ZW1lbnQoMCkKLXsKLX0KLQotQXV0b2ZpbGxCYWNraW5nU3RvcmU6On5BdXRvZmls
bEJhY2tpbmdTdG9yZSgpCi17Ci0gICAgZGVsZXRlIG1fYWRkU3RhdGVtZW50OwotICAgIG1fYWRk
U3RhdGVtZW50ID0gMDsKLSAgICBkZWxldGUgbV91cGRhdGVTdGF0ZW1lbnQ7Ci0gICAgbV91cGRh
dGVTdGF0ZW1lbnQgPSAwOwotICAgIGRlbGV0ZSBtX2NvbnRhaW5zU3RhdGVtZW50OwotICAgIG1f
Y29udGFpbnNTdGF0ZW1lbnQgPSAwOwotICAgIGRlbGV0ZSBtX2dldFN0YXRlbWVudDsKLSAgICBt
X2dldFN0YXRlbWVudCA9IDA7Ci0KLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAg
ICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotfQotCi1ib29sIEF1dG9maWxsQmFja2luZ1N0b3JlOjpv
cGVuKGNvbnN0IFN0cmluZyYgZGJQYXRoKQotewotICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09w
ZW4oKSk7Ci0KLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRSghbV9kYXRhYmFzZS5vcGVuKGRi
UGF0aCksIGZhbHNlLAotICAgICAgICAiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2UgZmlsZSAlcyBm
b3IgYXV0b2ZpbGwgZGF0YWJhc2UiLCBkYlBhdGgudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBpZiAo
IW1fZGF0YWJhc2UudGFibGVFeGlzdHMoImF1dG9maWxsIikpIHsKLSAgICAgICAgSEFORExFX1NR
TF9FWEVDX0ZBSUxVUkUoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBh
dXRvZmlsbCAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBWQVJDSEFSIE5PVCBOVUxMLCB2
YWx1ZSBWQVJDSEFSIE5PVCBOVUxMLCBjb3VudCBJTlRFR0VSIERFRkFVTFQgMSkiKSwKLSAgICAg
ICAgICAgIGZhbHNlLCAiRmFpbGVkIHRvIGNyZWF0ZSB0YWJsZSBhdXRvZmlsbCBmb3IgYXV0b2Zp
bGwgZGF0YWJhc2UiKTsKLQotICAgICAgICAvLyBDcmVhdGUgaW5kZXggZm9yIHRhYmxlIGF1dG9m
aWxsLgotICAgICAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRSghbV9kYXRhYmFzZS5leGVjdXRl
Q29tbWFuZCgiQ1JFQVRFIElOREVYIGF1dG9maWxsX25hbWUgT04gYXV0b2ZpbGwgKG5hbWUpIiks
Ci0gICAgICAgICAgICBmYWxzZSwgIkZhaWxlZCB0byBjcmVhdGUgYXV0b2ZpbGxfbmFtZSBpbmRl
eCBmb3IgdGFibGUgYXV0b2ZpbGwiKTsKLSAgICB9Ci0KLSAgICAvLyBQcmVwYXJlIHRoZSBzdGF0
ZW1lbnRzLgotICAgIG1fYWRkU3RhdGVtZW50ID0gbmV3IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFi
YXNlLCAiSU5TRVJUIElOVE8gYXV0b2ZpbGwgKG5hbWUsIHZhbHVlKSBWQUxVRVMgKD8sID8pIik7
Ci0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUobV9hZGRTdGF0ZW1lbnQtPnByZXBhcmUoKSAh
PSBTUUxSZXN1bHRPaywKLSAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gcHJlcGFyZSBhZGQgc3Rh
dGVtZW50Iik7Ci0KLSAgICBtX3VwZGF0ZVN0YXRlbWVudCA9IG5ldyBTUUxpdGVTdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgIlVQREFURSBhdXRvZmlsbCBTRVQgY291bnQgPSAoU0VMRUNUIGNvdW50ICsg
MSBmcm9tIGF1dG9maWxsIFdIRVJFIG5hbWUgPSA/IEFORCB2YWx1ZSA9ID8pIFdIRVJFIG5hbWUg
PSA/IEFORCB2YWx1ZSA9ID8iKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRShtX3VwZGF0
ZVN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rLAotICAgICAgICBmYWxzZSwgIkZh
aWxlZCB0byBwcmVwYXJlIHVwZGF0ZSBzdGF0ZW1lbnQiKTsKLQotICAgIG1fY29udGFpbnNTdGF0
ZW1lbnQgPSBuZXcgU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikg
RlJPTSBhdXRvZmlsbCBXSEVSRSBuYW1lID0gPyBBTkQgdmFsdWUgPSA/Iik7Ci0gICAgSEFORExF
X1NRTF9FWEVDX0ZBSUxVUkUobV9jb250YWluc1N0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTFJl
c3VsdE9rLAotICAgICAgICBmYWxzZSwgIkZhaWxlZCB0byBwcmVwYXJlIGNvbnRhaW5zIHN0YXRl
bWVudCIpOwotCi0gICAgbV9nZXRTdGF0ZW1lbnQgPSBuZXcgU1FMaXRlU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBhdXRvZmlsbCBXSEVSRSBuYW1lID0gPyBhbmQgdmFs
dWUgbGlrZSA/IE9SREVSIEJZIGNvdW50IERFU0MiKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJ
TFVSRShtX2dldFN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rLAotICAgICAgICBm
YWxzZSwgIkZhaWxlZCB0byBwcmVwYXJlIGdldCBzdGF0ZW1lbnQiKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEF1dG9maWxsQmFja2luZ1N0b3JlOjphZGQoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmIChuYW1lLmlzRW1wdHkoKSB8fCB2
YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChtX2Rh
dGFiYXNlLmlzT3BlbigpKTsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS50YWJsZUV4aXN0cygiYXV0
b2ZpbGwiKSk7Ci0KLSAgICBpZiAoY29udGFpbnMobmFtZSwgdmFsdWUpKQotICAgICAgICByZXR1
cm4gdXBkYXRlKG5hbWUsIHZhbHVlKTsKLQotICAgIGlmICghbV9hZGRTdGF0ZW1lbnQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fYWRkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBuYW1l
KTsKLSAgICBtX2FkZFN0YXRlbWVudC0+YmluZFRleHQoMiwgdmFsdWUpOwotCi0gICAgaW50IHJl
c3VsdCA9IG1fYWRkU3RhdGVtZW50LT5zdGVwKCk7Ci0gICAgbV9hZGRTdGF0ZW1lbnQtPnJlc2V0
KCk7Ci0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUs
IGZhbHNlLAotICAgICAgICAiRmFpbGVkIHRvIGFkZCBhdXRvZmlsbCBpdGVtIGludG8gdGFibGUg
YXV0b2ZpbGwgLSAlaSIsIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBB
dXRvZmlsbEJhY2tpbmdTdG9yZTo6dXBkYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1fdXBkYXRlU3RhdGVtZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBtX3VwZGF0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgbmFtZSk7Ci0g
ICAgbV91cGRhdGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIHZhbHVlKTsKLSAgICBtX3VwZGF0ZVN0
YXRlbWVudC0+YmluZFRleHQoMywgbmFtZSk7Ci0gICAgbV91cGRhdGVTdGF0ZW1lbnQtPmJpbmRU
ZXh0KDQsIHZhbHVlKTsKLQotICAgIGludCByZXN1bHQgPSBtX3VwZGF0ZVN0YXRlbWVudC0+c3Rl
cCgpOwotICAgIG1fdXBkYXRlU3RhdGVtZW50LT5yZXNldCgpOwotICAgIEhBTkRMRV9TUUxfRVhF
Q19GQUlMVVJFKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lLCBmYWxzZSwKLSAgICAgICAgIkZhaWxl
ZCB0byB1cGRhdGUgYXV0b2ZpbGwgaXRlbSBpbiB0YWJsZSBhdXRvZmlsbCAtICVpIiwgcmVzdWx0
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEF1dG9maWxsQmFja2luZ1N0b3JlOjpj
b250YWlucyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2NvbnRhaW5zU3RhdGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBtX2NvbnRhaW5zU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBuYW1lKTsKLSAgICBtX2NvbnRh
aW5zU3RhdGVtZW50LT5iaW5kVGV4dCgyLCB2YWx1ZSk7Ci0KLSAgICBpbnQgcmVzdWx0ID0gbV9j
b250YWluc1N0YXRlbWVudC0+c3RlcCgpOwotICAgIGludCBudW1iZXJPZlJvd3MgPSBtX2NvbnRh
aW5zU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCk7Ci0gICAgbV9jb250YWluc1N0YXRlbWVudC0+
cmVzZXQoKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRShyZXN1bHQgIT0gU1FMUmVzdWx0
Um93LCBmYWxzZSwKLSAgICAgICAgIkZhaWxlZCB0byBleGVjdXRlIHNlbGVjdCBhdXRvZmlsbCBp
dGVtIGZyb20gdGFibGUgYXV0b2ZpbGwgaW4gY29udGFpbnMgLSAlaSIsIHJlc3VsdCk7Ci0KLSAg
ICByZXR1cm4gbnVtYmVyT2ZSb3dzOwotfQotCi1WZWN0b3I8U3RyaW5nPiBBdXRvZmlsbEJhY2tp
bmdTdG9yZTo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZUhpbnQp
Ci17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwotICAgIEFTU0VSVChtX2RhdGFi
YXNlLnRhYmxlRXhpc3RzKCJhdXRvZmlsbCIpKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGNhbmRp
ZGF0ZXM7Ci0gICAgaWYgKG5hbWUuaXNFbXB0eSgpIHx8IHZhbHVlSGludC5pc0VtcHR5KCkgfHwg
IW1fZ2V0U3RhdGVtZW50KQotICAgICAgICByZXR1cm4gY2FuZGlkYXRlczsKLQotICAgIFN0cmlu
ZyB2YWx1ZSA9IHZhbHVlSGludCArICIlIjsKLSAgICBtX2dldFN0YXRlbWVudC0+YmluZFRleHQo
MSwgbmFtZSk7Ci0gICAgbV9nZXRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIHZhbHVlKTsKLQotICAg
IGludCByZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBtX2dldFN0YXRlbWVudC0+c3RlcCgp
KSA9PSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKG1fZ2V0U3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKLSAgICBtX2dldFN0YXRlbWVudC0+cmVzZXQoKTsKLSAg
ICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRShyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSwgY2FuZGlk
YXRlcywKLSAgICAgICAgIkZhaWxlZCB0byBleGVjdXRlIHNlbGVjdCBhdXRvZmlsbCBpdGVtIGZy
b20gdGFibGUgYXV0b2ZpbGwgaW4gZ2V0IC0gJWkiLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIGNh
bmRpZGF0ZXM7Ci19Ci0KLWJvb2wgQXV0b2ZpbGxCYWNraW5nU3RvcmU6OmNsZWFyKCkKLXsKLSAg
ICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UudGFi
bGVFeGlzdHMoImF1dG9maWxsIikpOwotCi0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUoIW1f
ZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9NIGF1dG9maWxsIiksCi0gICAgICAg
IGZhbHNlLCAiRmFpbGVkIHRvIGNsZWFyIHRhYmxlIGF1dG9maWxsIik7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0F1dG9maWxsQmFja2luZ1N0b3JlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0F1dG9m
aWxsQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9BdXRvZmlsbEJhY2tpbmdTdG9yZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
Ci0gKi8KLQotI2lmbmRlZiBBdXRvZmlsbEJhY2tpbmdTdG9yZV9oCi0jZGVmaW5lIEF1dG9maWxs
QmFja2luZ1N0b3JlX2gKLQotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0KLSNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1NaXNjLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgQXV0b2ZpbGxCYWNraW5nU3RvcmUgewotcHVibGljOgotICAgIGZyaWVuZCBBdXRvZmlsbEJh
Y2tpbmdTdG9yZSYgYXV0b2ZpbGxCYWNraW5nU3RvcmUoKTsKLQotICAgIH5BdXRvZmlsbEJhY2tp
bmdTdG9yZSgpOwotICAgIGJvb2wgb3Blbihjb25zdCBTdHJpbmcmIGRiUGF0aCk7Ci0gICAgYm9v
bCBhZGQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICBWZWN0
b3I8U3RyaW5nPiBnZXQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlSGlu
dCk7Ci0gICAgYm9vbCBjbGVhcigpOwotCi1wcml2YXRlOgotICAgIEF1dG9maWxsQmFja2luZ1N0
b3JlKCk7Ci0gICAgYm9vbCB1cGRhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKTsKLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkgY29uc3Q7Ci0KLSAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOwotICAg
IFNRTGl0ZVN0YXRlbWVudCogbV9hZGRTdGF0ZW1lbnQ7Ci0gICAgU1FMaXRlU3RhdGVtZW50KiBt
X3VwZGF0ZVN0YXRlbWVudDsKLSAgICBTUUxpdGVTdGF0ZW1lbnQqIG1fY29udGFpbnNTdGF0ZW1l
bnQ7Ci0gICAgU1FMaXRlU3RhdGVtZW50KiBtX2dldFN0YXRlbWVudDsKLQotICAgIERJU0FCTEVf
Q09QWShBdXRvZmlsbEJhY2tpbmdTdG9yZSkKLX07Ci0KLUF1dG9maWxsQmFja2luZ1N0b3JlJiBh
dXRvZmlsbEJhY2tpbmdTdG9yZSgpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBBdXRvZmlsbEJhY2tpbmdTdG9yZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvQmxvYlN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0Jsb2JTdHJlYW0uY3BwCShyZXZp
c2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvQmxvYlN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQmxvYlN0cmVhbS5oIgotCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLQot
dXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbTsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1CbG9iU3RyZWFtOjpCbG9iU3RyZWFtKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotICAgIDogRmlsdGVyU3RyZWFtKCkK
LSAgICAsIG1fcmVzcG9uc2UocmVzcG9uc2UpCi17Ci0gICAgcmVnaXN0ZXJTdHJlYW1JZCgpOwot
ICAgIGhhbmRsZS0+c2V0Q2xpZW50KHRoaXMpOwotfQotCi1CbG9iU3RyZWFtOjp+QmxvYlN0cmVh
bSgpCi17Ci19Ci0KLXZvaWQgQmxvYlN0cmVhbTo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW4sIGludCkKLXsKLSAgICBub3RpZnlE
YXRhUmVjZWl2ZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OmNyZWF0ZU5ldHdvcmtCdWZmZXJCeVdy
YXBwaW5nRGF0YShkYXRhLCBsZW4pKTsKLX0KLQotdm9pZCBCbG9iU3RyZWFtOjpkaWRGaW5pc2hM
b2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlKQotewotICAgIG5vdGlmeUNsb3NlKEZpbHRl
clN0cmVhbTo6U3RhdHVzU3VjY2Vzcyk7Ci19Ci0KLXZvaWQgQmxvYlN0cmVhbTo6ZGlkRmFpbChS
ZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKQotewotICAgIG5vdGlmeUNsb3Nl
KEZpbHRlclN0cmVhbTo6U3RhdHVzRXJyb3JJTyk7Ci19Ci0KLUJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmcgQmxvYlN0cmVhbTo6dXJsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXNwb25z
ZS51cmwoKS5zdHJpbmcoKTsKLX0KLQotY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyBCbG9iU3RyZWFtOjptaW1lVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVzcG9uc2Uu
bWltZVR5cGUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0Jsb2JTdHJlYW0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvQmxvYlN0cmVh
bS5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2JsYWNrYmVycnkvQmxvYlN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBCbG9iU3Ry
ZWFtX2gKLSNkZWZpbmUgQmxvYlN0cmVhbV9oCi0KLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNs
aWVudC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLQotI2luY2x1ZGUgPG5ldHdv
cmsvRmlsdGVyU3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVzb3Vy
Y2VIYW5kbGU7Ci0KLWNsYXNzIEJsb2JTdHJlYW0gOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGll
bnQsIHB1YmxpYyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtIHsKLXB1YmxpYzoK
LSAgICBCbG9iU3RyZWFtKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBSZXNvdXJjZUhhbmRsZSop
OwotICAgIHZpcnR1YWwgfkJsb2JTdHJlYW0oKTsKLQotICAgIC8vIEZyb20gY2xhc3MgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbS4KLSAgICB2aXJ0dWFsIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcgdXJsKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIG1pbWVUeXBlKCkgY29uc3QgT1ZFUlJJREU7Ci0K
LSAgICAvLyBGcm9tIGNsYXNzIFJlc291cmNlSGFuZGxlQ2xpZW50LgotICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwg
aW50KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJj
ZUhhbmRsZSosIGRvdWJsZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgT1ZFUlJJREU7Ci0KLXByaXZhdGU6
Ci0gICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gQmxvYlN0cmVhbV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0Nvb2tp
ZUphckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvQ29va2llSmFyQmxhY2tCZXJyeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVK
YXIuaCIKLQotI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgc2V0Q29va2llc0Zyb21ET00o
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiAvKmZpcnN0UGFydHkqLywg
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgY29va2llTWFuYWdl
cigpLnNldENvb2tpZXModXJsLCB2YWx1ZSwgTm9IdHRwT25seUNvb2tpZSk7Ci19Ci0KLVN0cmlu
ZyBjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYg
LypmaXJzdFBhcnR5Ki8sIGNvbnN0IFVSTCYgdXJsKQotewotICAgIC8vICdIdHRwT25seScgY29v
a2llcyBzaG91bGQgbm8gYmUgYWNjZXNzaWJsZSBmcm9tIHNjcmlwdHMsIHNvIHdlIGZpbHRlciB0
aGVtIG91dCBoZXJlLgotICAgIHJldHVybiBjb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llKHVybCwg
Tm9IdHRwT25seUNvb2tpZSk7Ci19Ci0KLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBVUkwmIC8qZmlyc3RQYXJ0
eSovLCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICByZXR1cm4gY29va2llTWFuYWdlcigpLmdldENv
b2tpZSh1cmwsIFdpdGhIdHRwT25seUNvb2tpZXMpOwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVk
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYgLypmaXJzdFBhcnR5Ki8s
IGNvbnN0IFVSTCYgLyp1cmwqLykKLXsKLSAgICByZXR1cm4gIWNvb2tpZU1hbmFnZXIoKS5jb29r
aWVKYXIoKS5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mLCBjb25zdCBVUkwmIC8qZmlyc3RQYXJ0eSovLCBjb25zdCBVUkwmIHVy
bCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgVmVjdG9yPFJlZlB0cjxQYXJz
ZWRDb29raWU+ID4gcmVzdWx0OwotICAgIGNvb2tpZU1hbmFnZXIoKS5nZXRSYXdDb29raWVzKHJl
c3VsdCwgdXJsLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJlc3VsdC5zaXplKCk7IGkrKykKLSAgICAgICAgcmVzdWx0W2ldLT5hcHBlbmRXZWJDb3Jl
Q29va2llKHJhd0Nvb2tpZXMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIGRlbGV0ZUNv
b2tpZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIGNvb2tpZU1hbmFnZXIoKS5yZW1vdmVDb29raWVXaXRoTmFt
ZSh1cmwsIG5hbWUpOwotfQotCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKGNvbnN0IE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYsIEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUq
LykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMo
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
Q3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwCShy
ZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNr
YmVycnkvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDEx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKLQotI2lm
IEVOQUJMRShCTEFDS0JFUlJZX0NSRURFTlRJQUxfUEVSU0lTVCkKLSNpbmNsdWRlICJDcmVkZW50
aWFsU3RvcmFnZS5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJVUkwuaCIK
LSNpbmNsdWRlICJQcm90ZWN0aW9uU3BhY2VIYXNoLmgiCi0jaW5jbHVkZSAiU1FMaXRlU3RhdGVt
ZW50LmgiCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtRW5jcnlwdG9yLmg+Ci0jaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxDZXJ0TWdyV3JhcHBl
ci5oPgotCi0jZGVmaW5lIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKHN0YXRlbWVudCwgcmV0dXJu
VmFsdWUsIC4uLikgXAotICAgIGlmIChzdGF0ZW1lbnQpIHsgXAotICAgICAgICBMT0dfRVJST1Io
X19WQV9BUkdTX18pOyBcCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsgXAotICAgIH0KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdW5zaWduZWQgaGFzaENyZWRlbnRpYWxJbmZv
KGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgc3BhY2UsIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUpCi17
Ci0gICAgU3RyaW5nIGhhc2hTdHJpbmcgPSBTdHJpbmc6OmZvcm1hdCgiJXNAJXNAJWRAJWRAJXNA
JWQiLAotICAgICAgICB1c2VybmFtZS51dGY4KCkuZGF0YSgpLAotICAgICAgICBzcGFjZS5ob3N0
KCkudXRmOCgpLmRhdGEoKSwgc3BhY2UucG9ydCgpLAotICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KHNwYWNlLnNlcnZlclR5cGUoKSksCi0gICAgICAgIHNwYWNlLnJlYWxtKCkudXRmOCgpLmRhdGEo
KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzcGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgp
KSk7Ci0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMo
aGFzaFN0cmluZy5jaGFyYWN0ZXJzKCksIGhhc2hTdHJpbmcubGVuZ3RoKCkpOwotfQotCi1DcmVk
ZW50aWFsQmFja2luZ1N0b3JlJiBjcmVkZW50aWFsQmFja2luZ1N0b3JlKCkKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKENyZWRlbnRpYWxCYWNraW5nU3RvcmUsIGJhY2tpbmdTdG9yZSwgKCkp
OwotICAgIGlmICghYmFja2luZ1N0b3JlLm1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIGJh
Y2tpbmdTdG9yZS5vcGVuKHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPmFwcGxpY2F0aW9uRGF0YURpcmVjdG9yeSgpLmNf
c3RyKCksICIvY3JlZGVudGlhbHMuZGIiKSk7Ci0gICAgcmV0dXJuIGJhY2tpbmdTdG9yZTsKLX0K
LQotQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6Q3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpCi17Ci19
Ci0KLUNyZWRlbnRpYWxCYWNraW5nU3RvcmU6On5DcmVkZW50aWFsQmFja2luZ1N0b3JlKCkKLXsK
LSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgp
OwotfQotCi1ib29sIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6Om9wZW4oY29uc3QgU3RyaW5nJiBk
YlBhdGgpCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlLmlzT3BlbigpKTsKLQotICAgIEhBTkRM
RV9TUUxfRVhFQ19GQUlMVVJFKCFtX2RhdGFiYXNlLm9wZW4oZGJQYXRoKSwgZmFsc2UsCi0gICAg
ICAgICJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZSBmaWxlICVzIGZvciBsb2dpbiBkYXRhYmFzZSIs
IGRiUGF0aC51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0
cygibG9naW5zIikpIHsKLSAgICAgICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBsb2dpbnMgKGhvc3QgVkFSQ0hBUiBOT1Qg
TlVMTCwgcG9ydCBJTlRFR0VSLCBzZXJ2aWNlX3R5cGUgSU5URUdFUiBOT1QgTlVMTCwgcmVhbG0g
VkFSQ0hBUiwgYXV0aF9zY2hlbWUgSU5URUdFUiBOT1QgTlVMTCwgdXNlcm5hbWUgVkFSQ0hBUiwg
cGFzc3dvcmQgQkxPQikgIiksCi0gICAgICAgICAgICBmYWxzZSwgIkZhaWxlZCB0byBjcmVhdGUg
dGFibGUgbG9naW5zIGZvciBsb2dpbiBkYXRhYmFzZSIpOwotCi0gICAgICAgIC8vIENyZWF0ZSBp
bmRleCBmb3IgdGFibGUgbG9naW5zLgotICAgICAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRSgh
bV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIElOREVYIGxvZ2luc19pbmRleCBPTiBs
b2dpbnMgKGhvc3QpIiksCi0gICAgICAgICAgICBmYWxzZSwgIkZhaWxlZCB0byBjcmVhdGUgaW5k
ZXggZm9yIHRhYmxlIGxvZ2lucyIpOwotICAgIH0KLQotICAgIGlmICghbV9kYXRhYmFzZS50YWJs
ZUV4aXN0cygibmV2ZXJfcmVtZW1iZXIiKSkgewotICAgICAgICBIQU5ETEVfU1FMX0VYRUNfRkFJ
TFVSRSghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIG5ldmVyX3JlbWVt
YmVyIChob3N0IFZBUkNIQVIgTk9UIE5VTEwsIHBvcnQgSU5URUdFUiwgc2VydmljZV90eXBlIElO
VEVHRVIgTk9UIE5VTEwsIHJlYWxtIFZBUkNIQVIsIGF1dGhfc2NoZW1lIElOVEVHRVIgTk9UIE5V
TEwpICIpLAotICAgICAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gY3JlYXRlIHRhYmxlIG5ldmVy
X3JlbWVtYmVyIGZvciBsb2dpbiBkYXRhYmFzZSIpOwotCi0gICAgICAgIC8vIENyZWF0ZSBpbmRl
eCBmb3IgdGFibGUgbmV2ZXJfcmVtZW1iZXIuCi0gICAgICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlM
VVJFKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgSU5ERVggbmV2ZXJfcmVtZW1i
ZXJfaW5kZXggT04gbmV2ZXJfcmVtZW1iZXIgKGhvc3QpIiksCi0gICAgICAgICAgICBmYWxzZSwg
IkZhaWxlZCB0byBjcmVhdGUgaW5kZXggZm9yIHRhYmxlIG5ldmVyX3JlbWVtYmVyIik7Ci0gICAg
fQotCi0gICAgLy8gUHJlcGFyZSB0aGUgc3RhdGVtZW50cy4KLSAgICBtX2FkZExvZ2luU3RhdGVt
ZW50ID0gYWRvcHRQdHIobmV3IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIE9S
IFJFUExBQ0UgSU5UTyBsb2dpbnMgKGhvc3QsIHBvcnQsIHNlcnZpY2VfdHlwZSwgcmVhbG0sIGF1
dGhfc2NoZW1lLCB1c2VybmFtZSwgcGFzc3dvcmQpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywg
PykiKSk7Ci0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUobV9hZGRMb2dpblN0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rLAotICAgICAgICBmYWxzZSwgIkZhaWxlZCB0byBwcmVw
YXJlIGFkZExvZ2luIHN0YXRlbWVudCIpOwotCi0gICAgbV91cGRhdGVMb2dpblN0YXRlbWVudCA9
IGFkb3B0UHRyKG5ldyBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBsb2dpbnMg
U0VUIHVzZXJuYW1lID0gPywgcGFzc3dvcmQgPSA/IFdIRVJFIGhvc3QgPSA/IEFORCBwb3J0ID0g
PyBBTkQgc2VydmljZV90eXBlID0gPyBBTkQgcmVhbG0gPSA/IEFORCBhdXRoX3NjaGVtZSA9ID8i
KSk7Ci0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUobV91cGRhdGVMb2dpblN0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rLAotICAgICAgICBmYWxzZSwgIkZhaWxlZCB0byBwcmVw
YXJlIHVwZGF0ZUxvZ2luIHN0YXRlbWVudCIpOwotCi0gICAgbV9oYXNMb2dpblN0YXRlbWVudCA9
IGFkb3B0UHRyKG5ldyBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgq
KSBGUk9NIGxvZ2lucyBXSEVSRSBob3N0ID0gPyBBTkQgcG9ydCA9ID8gQU5EIHNlcnZpY2VfdHlw
ZSA9ID8gQU5EIHJlYWxtID0gPyBBTkQgYXV0aF9zY2hlbWUgPSA/IikpOwotICAgIEhBTkRMRV9T
UUxfRVhFQ19GQUlMVVJFKG1faGFzTG9naW5TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaywKLSAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gcHJlcGFyZSBoYXNMb2dpbiBzdGF0ZW1l
bnQiKTsKLQotICAgIG1fZ2V0TG9naW5TdGF0ZW1lbnQgPSBhZG9wdFB0cihuZXcgU1FMaXRlU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgdXNlcm5hbWUsIHBhc3N3b3JkIEZST00gbG9naW5z
IFdIRVJFIGhvc3QgPSA/IEFORCBwb3J0ID0gPyBBTkQgc2VydmljZV90eXBlID0gPyBBTkQgcmVh
bG0gPSA/IEFORCBhdXRoX3NjaGVtZSA9ID8iKSk7Ci0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxV
UkUobV9nZXRMb2dpblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rLAotICAgICAg
ICBmYWxzZSwgIkZhaWxlZCB0byBwcmVwYXJlIGdldExvZ2luIHN0YXRlbWVudCIpOwotCi0gICAg
bV9yZW1vdmVMb2dpblN0YXRlbWVudCA9IGFkb3B0UHRyKG5ldyBTUUxpdGVTdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIkRFTEVURSBGUk9NIGxvZ2lucyBXSEVSRSBob3N0ID0gPyBBTkQgcG9ydCA9ID8g
QU5EIHNlcnZpY2VfdHlwZSA9ID8gQU5EIHJlYWxtID0gPyBBTkQgYXV0aF9zY2hlbWUgPSA/Iikp
OwotICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKG1fcmVtb3ZlTG9naW5TdGF0ZW1lbnQtPnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaywKLSAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gcHJlcGFy
ZSByZW1vdmVMb2dpbiBzdGF0ZW1lbnQiKTsKLQotICAgIG1fYWRkTmV2ZXJSZW1lbWJlclN0YXRl
bWVudCA9IGFkb3B0UHRyKG5ldyBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBP
UiBSRVBMQUNFIElOVE8gbmV2ZXJfcmVtZW1iZXIgKGhvc3QsIHBvcnQsIHNlcnZpY2VfdHlwZSwg
cmVhbG0sIGF1dGhfc2NoZW1lKSBWQUxVRVMgKD8sID8sID8sID8sID8pIikpOwotICAgIEhBTkRM
RV9TUUxfRVhFQ19GQUlMVVJFKG1fYWRkTmV2ZXJSZW1lbWJlclN0YXRlbWVudC0+cHJlcGFyZSgp
ICE9IFNRTFJlc3VsdE9rLAotICAgICAgICBmYWxzZSwgIkZhaWxlZCB0byBwcmVwYXJlIGFkZE5l
dmVyUmVtZW1iZXIgc3RhdGVtZW50Iik7Ci0KLSAgICBtX2hhc05ldmVyUmVtZW1iZXJTdGF0ZW1l
bnQgPSBhZG9wdFB0cihuZXcgU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09V
TlQoKikgRlJPTSBuZXZlcl9yZW1lbWJlciBXSEVSRSBob3N0ID0gPyBBTkQgcG9ydCA9ID8gQU5E
IHNlcnZpY2VfdHlwZSA9ID8gQU5EIHJlYWxtID0gPyBBTkQgYXV0aF9zY2hlbWUgPSA/IikpOwot
ICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKG1faGFzTmV2ZXJSZW1lbWJlclN0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rLAotICAgICAgICBmYWxzZSwgIkZhaWxlZCB0byBwcmVw
YXJlIGhhc05ldmVyUmVtZW1iZXIgc3RhdGVtZW50Iik7Ci0KLSAgICBtX3JlbW92ZU5ldmVyUmVt
ZW1iZXJTdGF0ZW1lbnQgPSBhZG9wdFB0cihuZXcgU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJERUxFVEUgRlJPTSBuZXZlcl9yZW1lbWJlciBXSEVSRSBob3N0ID0gPyBBTkQgcG9ydCA9ID8g
QU5EIHNlcnZpY2VfdHlwZSA9ID8gQU5EIHJlYWxtID0gPyBBTkQgYXV0aF9zY2hlbWUgPSA/Iikp
OwotICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKG1fcmVtb3ZlTmV2ZXJSZW1lbWJlclN0YXRl
bWVudC0+cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rLAotICAgICAgICBmYWxzZSwgIkZhaWxlZCB0
byBwcmVwYXJlIHJlbW92ZU5ldmVyUmVtZW1iZXIgc3RhdGVtZW50Iik7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjphZGRMb2dpbihjb25zdCBQ
cm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVu
dGlhbCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgQVNTRVJUKG1f
ZGF0YWJhc2UudGFibGVFeGlzdHMoImxvZ2lucyIpKTsKLQotICAgIGlmICghbV9hZGRMb2dpblN0
YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9hZGRMb2dpblN0YXRlbWVu
dC0+YmluZFRleHQoMSwgcHJvdGVjdGlvblNwYWNlLmhvc3QoKSk7Ci0gICAgbV9hZGRMb2dpblN0
YXRlbWVudC0+YmluZEludCgyLCBwcm90ZWN0aW9uU3BhY2UucG9ydCgpKTsKLSAgICBtX2FkZExv
Z2luU3RhdGVtZW50LT5iaW5kSW50KDMsIHN0YXRpY19jYXN0PGludD4ocHJvdGVjdGlvblNwYWNl
LnNlcnZlclR5cGUoKSkpOwotICAgIG1fYWRkTG9naW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIHBy
b3RlY3Rpb25TcGFjZS5yZWFsbSgpKTsKLSAgICBtX2FkZExvZ2luU3RhdGVtZW50LT5iaW5kSW50
KDUsIHN0YXRpY19jYXN0PGludD4ocHJvdGVjdGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1l
KCkpKTsKLSAgICBtX2FkZExvZ2luU3RhdGVtZW50LT5iaW5kVGV4dCg2LCBjcmVkZW50aWFsLnVz
ZXIoKSk7Ci0gICAgaWYgKGNlcnRNZ3JXcmFwcGVyKCktPmlzUmVhZHkoKSkKLSAgICAgICAgbV9h
ZGRMb2dpblN0YXRlbWVudC0+YmluZEJsb2IoNywgIiIpOwotICAgIGVsc2UgewotICAgICAgICBT
dHJpbmcgY2lwaGVydGV4dCA9IGVuY3J5cHRlZFN0cmluZyhjcmVkZW50aWFsLnBhc3N3b3JkKCkp
OwotICAgICAgICBBU1NFUlQoY2lwaGVydGV4dC5pczhCaXQoKSk7Ci0gICAgICAgIG1fYWRkTG9n
aW5TdGF0ZW1lbnQtPmJpbmRCbG9iKDcsIGNpcGhlcnRleHQuY2hhcmFjdGVyczgoKSwgY2lwaGVy
dGV4dC5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgaW50IHJlc3VsdCA9IG1fYWRkTG9naW5TdGF0
ZW1lbnQtPnN0ZXAoKTsKLSAgICBtX2FkZExvZ2luU3RhdGVtZW50LT5yZXNldCgpOwotICAgIEhB
TkRMRV9TUUxfRVhFQ19GQUlMVVJFKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lLCBmYWxzZSwKLSAg
ICAgICAgIkZhaWxlZCB0byBhZGQgbG9naW4gaW5mbyBpbnRvIHRhYmxlIGxvZ2lucyAtICVpIiwg
cmVzdWx0KTsKLQotICAgIGlmICghY2VydE1ncldyYXBwZXIoKS0+aXNSZWFkeSgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZyBjaXBoZXJ0ZXh0ID0gZW5jcnlwdGVkU3RyaW5n
KGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7Ci0gICAgQVNTRVJUKGNpcGhlcnRleHQuaXM4Qml0KCkp
OwotICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQ3JlZGVudGlhbEluZm8ocHJvdGVjdGlvblNwYWNl
LCBjcmVkZW50aWFsLnVzZXIoKSk7Ci0gICAgcmV0dXJuIGNlcnRNZ3JXcmFwcGVyKCktPnNhdmVQ
YXNzd29yZChoYXNoLCBzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihj
aXBoZXJ0ZXh0LmNoYXJhY3RlcnM4KCkpLCBjaXBoZXJ0ZXh0Lmxlbmd0aCgpKSk7Ci19Ci0KLWJv
b2wgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6dXBkYXRlTG9naW4oY29uc3QgUHJvdGVjdGlvblNw
YWNlJiBwcm90ZWN0aW9uU3BhY2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCi17Ci0g
ICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwotICAgIEFTU0VSVChtX2RhdGFiYXNlLnRh
YmxlRXhpc3RzKCJsb2dpbnMiKSk7Ci0KLSAgICBpZiAoIW1fdXBkYXRlTG9naW5TdGF0ZW1lbnQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fdXBkYXRlTG9naW5TdGF0ZW1lbnQtPmJp
bmRUZXh0KDEsIGNyZWRlbnRpYWwudXNlcigpKTsKLSAgICBpZiAoY2VydE1ncldyYXBwZXIoKS0+
aXNSZWFkeSgpKQotICAgICAgICBtX3VwZGF0ZUxvZ2luU3RhdGVtZW50LT5iaW5kQmxvYigyLCAi
Iik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFN0cmluZyBjaXBoZXJ0ZXh0ID0gZW5jcnlwdGVkU3Ry
aW5nKGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7Ci0gICAgICAgIEFTU0VSVChjaXBoZXJ0ZXh0Lmlz
OEJpdCgpKTsKLSAgICAgICAgbV91cGRhdGVMb2dpblN0YXRlbWVudC0+YmluZEJsb2IoMiwgY2lw
aGVydGV4dC5jaGFyYWN0ZXJzOCgpLCBjaXBoZXJ0ZXh0Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAg
bV91cGRhdGVMb2dpblN0YXRlbWVudC0+YmluZFRleHQoMywgcHJvdGVjdGlvblNwYWNlLmhvc3Qo
KSk7Ci0gICAgbV91cGRhdGVMb2dpblN0YXRlbWVudC0+YmluZEludCg0LCBwcm90ZWN0aW9uU3Bh
Y2UucG9ydCgpKTsKLSAgICBtX3VwZGF0ZUxvZ2luU3RhdGVtZW50LT5iaW5kSW50KDUsIHN0YXRp
Y19jYXN0PGludD4ocHJvdGVjdGlvblNwYWNlLnNlcnZlclR5cGUoKSkpOwotICAgIG1fdXBkYXRl
TG9naW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHByb3RlY3Rpb25TcGFjZS5yZWFsbSgpKTsKLSAg
ICBtX3VwZGF0ZUxvZ2luU3RhdGVtZW50LT5iaW5kSW50KDcsIHN0YXRpY19jYXN0PGludD4ocHJv
dGVjdGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkpKTsKLQotICAgIGludCByZXN1bHQg
PSBtX3VwZGF0ZUxvZ2luU3RhdGVtZW50LT5zdGVwKCk7Ci0gICAgbV91cGRhdGVMb2dpblN0YXRl
bWVudC0+cmVzZXQoKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRShyZXN1bHQgIT0gU1FM
UmVzdWx0RG9uZSwgZmFsc2UsCi0gICAgICAgICJGYWlsZWQgdG8gdXBkYXRlIGxvZ2luIGluZm8g
aW4gdGFibGUgbG9naW5zIC0gJWkiLCByZXN1bHQpOwotCi0gICAgaWYgKCFjZXJ0TWdyV3JhcHBl
cigpLT5pc1JlYWR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU3RyaW5nIGNpcGhl
cnRleHQgPSBlbmNyeXB0ZWRTdHJpbmcoY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKLSAgICBBU1NF
UlQoY2lwaGVydGV4dC5pczhCaXQoKSk7Ci0gICAgdW5zaWduZWQgaGFzaCA9IGhhc2hDcmVkZW50
aWFsSW5mbyhwcm90ZWN0aW9uU3BhY2UsIGNyZWRlbnRpYWwudXNlcigpKTsKLSAgICByZXR1cm4g
Y2VydE1ncldyYXBwZXIoKS0+c2F2ZVBhc3N3b3JkKGhhc2gsIHN0ZDo6c3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNpcGhlcnRleHQuY2hhcmFjdGVyczgoKSksIGNpcGhlcnRl
eHQubGVuZ3RoKCkpKTsKLX0KLQotYm9vbCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpoYXNMb2dp
bihjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKLXsKLSAgICBBU1NFUlQo
bV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UudGFibGVFeGlzdHMo
ImxvZ2lucyIpKTsKLQotICAgIGlmICghbV9oYXNMb2dpblN0YXRlbWVudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgbV9oYXNMb2dpblN0YXRlbWVudC0+YmluZFRleHQoMSwgcHJvdGVj
dGlvblNwYWNlLmhvc3QoKSk7Ci0gICAgbV9oYXNMb2dpblN0YXRlbWVudC0+YmluZEludCgyLCBw
cm90ZWN0aW9uU3BhY2UucG9ydCgpKTsKLSAgICBtX2hhc0xvZ2luU3RhdGVtZW50LT5iaW5kSW50
KDMsIHN0YXRpY19jYXN0PGludD4ocHJvdGVjdGlvblNwYWNlLnNlcnZlclR5cGUoKSkpOwotICAg
IG1faGFzTG9naW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIHByb3RlY3Rpb25TcGFjZS5yZWFsbSgp
KTsKLSAgICBtX2hhc0xvZ2luU3RhdGVtZW50LT5iaW5kSW50KDUsIHN0YXRpY19jYXN0PGludD4o
cHJvdGVjdGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkpKTsKLQotICAgIGludCByZXN1
bHQgPSBtX2hhc0xvZ2luU3RhdGVtZW50LT5zdGVwKCk7Ci0gICAgaW50IG51bU9mUm93ID0gbV9o
YXNMb2dpblN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApOwotICAgIG1faGFzTG9naW5TdGF0ZW1l
bnQtPnJlc2V0KCk7Ci0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUocmVzdWx0ICE9IFNRTFJl
c3VsdFJvdywgZmFsc2UsCi0gICAgICAgICJGYWlsZWQgdG8gZXhlY3V0ZSBzZWxlY3QgbG9naW4g
aW5mbyBmcm9tIHRhYmxlIGxvZ2lucyBpbiBoYXNMb2dpbiAtICVpIiwgcmVzdWx0KTsKLQotICAg
IGlmIChudW1PZlJvdykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1DcmVkZW50aWFsIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OmdldExvZ2luKGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNl
LmlzT3BlbigpKTsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS50YWJsZUV4aXN0cygibG9naW5zIikp
OwotCi0gICAgaWYgKCFtX2dldExvZ2luU3RhdGVtZW50KQotICAgICAgICByZXR1cm4gQ3JlZGVu
dGlhbCgpOwotCi0gICAgbV9nZXRMb2dpblN0YXRlbWVudC0+YmluZFRleHQoMSwgcHJvdGVjdGlv
blNwYWNlLmhvc3QoKSk7Ci0gICAgbV9nZXRMb2dpblN0YXRlbWVudC0+YmluZEludCgyLCBwcm90
ZWN0aW9uU3BhY2UucG9ydCgpKTsKLSAgICBtX2dldExvZ2luU3RhdGVtZW50LT5iaW5kSW50KDMs
IHN0YXRpY19jYXN0PGludD4ocHJvdGVjdGlvblNwYWNlLnNlcnZlclR5cGUoKSkpOwotICAgIG1f
Z2V0TG9naW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIHByb3RlY3Rpb25TcGFjZS5yZWFsbSgpKTsK
LSAgICBtX2dldExvZ2luU3RhdGVtZW50LT5iaW5kSW50KDUsIHN0YXRpY19jYXN0PGludD4ocHJv
dGVjdGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkpKTsKLQotICAgIGludCByZXN1bHQg
PSBtX2dldExvZ2luU3RhdGVtZW50LT5zdGVwKCk7Ci0gICAgU3RyaW5nIHVzZXJuYW1lID0gbV9n
ZXRMb2dpblN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQg
PSBtX2dldExvZ2luU3RhdGVtZW50LT5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSk7Ci0gICAgbV9n
ZXRMb2dpblN0YXRlbWVudC0+cmVzZXQoKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRShy
ZXN1bHQgIT0gU1FMUmVzdWx0Um93LCBDcmVkZW50aWFsKCksCi0gICAgICAgICJGYWlsZWQgdG8g
ZXhlY3V0ZSBzZWxlY3QgbG9naW4gaW5mbyBmcm9tIHRhYmxlIGxvZ2lucyBpbiBnZXRMb2dpbiAt
ICVpIiwgcmVzdWx0KTsKLQotICAgIGlmICghY2VydE1ncldyYXBwZXIoKS0+aXNSZWFkeSgpKQot
ICAgICAgICByZXR1cm4gQ3JlZGVudGlhbCh1c2VybmFtZSwgZGVjcnlwdGVkU3RyaW5nKHBhc3N3
b3JkKSwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFuZW50KTsKLQotICAgIHVuc2lnbmVkIGhh
c2ggPSBoYXNoQ3JlZGVudGlhbEluZm8ocHJvdGVjdGlvblNwYWNlLCB1c2VybmFtZSk7Ci0KLSAg
ICBzdGQ6OnN0cmluZyBwYXNzd29yZEJsb2I7Ci0gICAgaWYgKCFjZXJ0TWdyV3JhcHBlcigpLT5n
ZXRQYXNzd29yZChoYXNoLCBwYXNzd29yZEJsb2IpKQotICAgICAgICByZXR1cm4gQ3JlZGVudGlh
bCgpOwotCi0gICAgcmV0dXJuIENyZWRlbnRpYWwodXNlcm5hbWUsIGRlY3J5cHRlZFN0cmluZyhT
dHJpbmcocGFzc3dvcmRCbG9iLmRhdGEoKSwgcGFzc3dvcmRCbG9iLmxlbmd0aCgpKSksIENyZWRl
bnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCk7Ci19Ci0KLWJvb2wgQ3JlZGVudGlhbEJhY2tpbmdT
dG9yZTo6cmVtb3ZlTG9naW4oY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2Us
IGNvbnN0IFN0cmluZyYgdXNlcm5hbWUpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVu
KCkpOwotICAgIEFTU0VSVChtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJsb2dpbnMiKSk7Ci0KLSAg
ICBpZiAoIW1fcmVtb3ZlTG9naW5TdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIG1fcmVtb3ZlTG9naW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHByb3RlY3Rpb25TcGFjZS5o
b3N0KCkpOwotICAgIG1fcmVtb3ZlTG9naW5TdGF0ZW1lbnQtPmJpbmRJbnQoMiwgcHJvdGVjdGlv
blNwYWNlLnBvcnQoKSk7Ci0gICAgbV9yZW1vdmVMb2dpblN0YXRlbWVudC0+YmluZEludCgzLCBz
dGF0aWNfY2FzdDxpbnQ+KHByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUeXBlKCkpKTsKLSAgICBtX3Jl
bW92ZUxvZ2luU3RhdGVtZW50LT5iaW5kVGV4dCg0LCBwcm90ZWN0aW9uU3BhY2UucmVhbG0oKSk7
Ci0gICAgbV9yZW1vdmVMb2dpblN0YXRlbWVudC0+YmluZEludCg1LCBzdGF0aWNfY2FzdDxpbnQ+
KHByb3RlY3Rpb25TcGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpKSk7Ci0KLSAgICBpbnQgcmVz
dWx0ID0gbV9yZW1vdmVMb2dpblN0YXRlbWVudC0+c3RlcCgpOwotICAgIG1fcmVtb3ZlTG9naW5T
dGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgSEFORExFX1NRTF9FWEVDX0ZBSUxVUkUocmVzdWx0ICE9
IFNRTFJlc3VsdERvbmUsIGZhbHNlLAotICAgICAgICAiRmFpbGVkIHRvIHJlbW92ZSBsb2dpbiBp
bmZvIGZyb20gdGFibGUgbG9naW5zIC0gJWkiLCByZXN1bHQpOwotCi0gICAgaWYgKCFjZXJ0TWdy
V3JhcHBlcigpLT5pc1JlYWR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgdW5zaWdu
ZWQgaGFzaCA9IGhhc2hDcmVkZW50aWFsSW5mbyhwcm90ZWN0aW9uU3BhY2UsIHVzZXJuYW1lKTsK
LSAgICBpZiAoIWNlcnRNZ3JXcmFwcGVyKCktPnJlbW92ZVBhc3N3b3JkKGhhc2gpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDcmVkZW50aWFs
QmFja2luZ1N0b3JlOjphZGROZXZlclJlbWVtYmVyKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJv
dGVjdGlvblNwYWNlKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKLSAgICBB
U1NFUlQobV9kYXRhYmFzZS50YWJsZUV4aXN0cygibmV2ZXJfcmVtZW1iZXIiKSk7Ci0KLSAgICBp
ZiAoIW1fYWRkTmV2ZXJSZW1lbWJlclN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgbV9hZGROZXZlclJlbWVtYmVyU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBwcm90ZWN0aW9u
U3BhY2UuaG9zdCgpKTsKLSAgICBtX2FkZE5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQtPmJpbmRJbnQo
MiwgcHJvdGVjdGlvblNwYWNlLnBvcnQoKSk7Ci0gICAgbV9hZGROZXZlclJlbWVtYmVyU3RhdGVt
ZW50LT5iaW5kSW50KDMsIHN0YXRpY19jYXN0PGludD4ocHJvdGVjdGlvblNwYWNlLnNlcnZlclR5
cGUoKSkpOwotICAgIG1fYWRkTmV2ZXJSZW1lbWJlclN0YXRlbWVudC0+YmluZFRleHQoNCwgcHJv
dGVjdGlvblNwYWNlLnJlYWxtKCkpOwotICAgIG1fYWRkTmV2ZXJSZW1lbWJlclN0YXRlbWVudC0+
YmluZEludCg1LCBzdGF0aWNfY2FzdDxpbnQ+KHByb3RlY3Rpb25TcGFjZS5hdXRoZW50aWNhdGlv
blNjaGVtZSgpKSk7Ci0KLSAgICBpbnQgcmVzdWx0ID0gbV9hZGROZXZlclJlbWVtYmVyU3RhdGVt
ZW50LT5zdGVwKCk7Ci0gICAgbV9hZGROZXZlclJlbWVtYmVyU3RhdGVtZW50LT5yZXNldCgpOwot
ICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lLCBmYWxz
ZSwKLSAgICAgICAgIkZhaWxlZCB0byBhZGQgbmF2ZXIgc2F2ZWQgaXRlbSBpbmZvIGludG8gdGFi
bGUgbmV2ZXJfcmVtZW1iZXIgLSAlaSIsIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpoYXNOZXZlclJlbWVtYmVyKGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNl
LmlzT3BlbigpKTsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS50YWJsZUV4aXN0cygibmV2ZXJfcmVt
ZW1iZXIiKSk7Ci0KLSAgICBpZiAoIW1faGFzTmV2ZXJSZW1lbWJlclN0YXRlbWVudCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9oYXNOZXZlclJlbWVtYmVyU3RhdGVtZW50LT5iaW5k
VGV4dCgxLCBwcm90ZWN0aW9uU3BhY2UuaG9zdCgpKTsKLSAgICBtX2hhc05ldmVyUmVtZW1iZXJT
dGF0ZW1lbnQtPmJpbmRJbnQoMiwgcHJvdGVjdGlvblNwYWNlLnBvcnQoKSk7Ci0gICAgbV9oYXNO
ZXZlclJlbWVtYmVyU3RhdGVtZW50LT5iaW5kSW50KDMsIHN0YXRpY19jYXN0PGludD4ocHJvdGVj
dGlvblNwYWNlLnNlcnZlclR5cGUoKSkpOwotICAgIG1faGFzTmV2ZXJSZW1lbWJlclN0YXRlbWVu
dC0+YmluZFRleHQoNCwgcHJvdGVjdGlvblNwYWNlLnJlYWxtKCkpOwotICAgIG1faGFzTmV2ZXJS
ZW1lbWJlclN0YXRlbWVudC0+YmluZEludCg1LCBzdGF0aWNfY2FzdDxpbnQ+KHByb3RlY3Rpb25T
cGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpKSk7Ci0KLSAgICBpbnQgcmVzdWx0ID0gbV9oYXNO
ZXZlclJlbWVtYmVyU3RhdGVtZW50LT5zdGVwKCk7Ci0gICAgaW50IG51bU9mUm93ID0gbV9oYXNO
ZXZlclJlbWVtYmVyU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCk7Ci0gICAgbV9oYXNOZXZlclJl
bWVtYmVyU3RhdGVtZW50LT5yZXNldCgpOwotICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJFKHJl
c3VsdCAhPSBTUUxSZXN1bHRSb3csIGZhbHNlLAotICAgICAgICAiRmFpbGVkIHRvIGV4ZWN1dGUg
c2VsZWN0IHRvIGZpbmQgbmF2ZXIgc2F2ZWQgc2l0ZSBmcm9tIHRhYmxlIG5ldmVyX3JlbWVtYmVy
IC0gJWkiLCByZXN1bHQpOwotCi0gICAgaWYgKG51bU9mUm93KQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6
cmVtb3ZlTmV2ZXJSZW1lbWJlcihjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFj
ZSkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgQVNTRVJUKG1fZGF0
YWJhc2UudGFibGVFeGlzdHMoIm5ldmVyX3JlbWVtYmVyIikpOwotCi0gICAgaWYgKCFtX3JlbW92
ZU5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1f
cmVtb3ZlTmV2ZXJSZW1lbWJlclN0YXRlbWVudC0+YmluZFRleHQoMSwgcHJvdGVjdGlvblNwYWNl
Lmhvc3QoKSk7Ci0gICAgbV9yZW1vdmVOZXZlclJlbWVtYmVyU3RhdGVtZW50LT5iaW5kSW50KDIs
IHByb3RlY3Rpb25TcGFjZS5wb3J0KCkpOwotICAgIG1fcmVtb3ZlTmV2ZXJSZW1lbWJlclN0YXRl
bWVudC0+YmluZEludCgzLCBzdGF0aWNfY2FzdDxpbnQ+KHByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJU
eXBlKCkpKTsKLSAgICBtX3JlbW92ZU5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQtPmJpbmRUZXh0KDQs
IHByb3RlY3Rpb25TcGFjZS5yZWFsbSgpKTsKLSAgICBtX3JlbW92ZU5ldmVyUmVtZW1iZXJTdGF0
ZW1lbnQtPmJpbmRJbnQoNSwgc3RhdGljX2Nhc3Q8aW50Pihwcm90ZWN0aW9uU3BhY2UuYXV0aGVu
dGljYXRpb25TY2hlbWUoKSkpOwotCi0gICAgaW50IHJlc3VsdCA9IG1fcmVtb3ZlTmV2ZXJSZW1l
bWJlclN0YXRlbWVudC0+c3RlcCgpOwotICAgIG1fcmVtb3ZlTmV2ZXJSZW1lbWJlclN0YXRlbWVu
dC0+cmVzZXQoKTsKLSAgICBIQU5ETEVfU1FMX0VYRUNfRkFJTFVSRShyZXN1bHQgIT0gU1FMUmVz
dWx0RG9uZSwgZmFsc2UsCi0gICAgICAgICJGYWlsZWQgdG8gcmVtb3ZlIG5ldmVyIHNhdmVkIHNp
dGUgZnJvbSB0YWJsZSBuZXZlcl9yZW1lbWJlciAtICVpIiwgcmVzdWx0KTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OmNsZWFyTG9naW5zKCkK
LXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgQVNTRVJUKG1fZGF0YWJh
c2UudGFibGVFeGlzdHMoImxvZ2lucyIpKTsKLQotICAgIEhBTkRMRV9TUUxfRVhFQ19GQUlMVVJF
KCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBsb2dpbnMiKSwKLSAgICAg
ICAgZmFsc2UsICJGYWlsZWQgdG8gY2xlYXIgdGFibGUgbG9naW5zIik7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpjbGVhck5ldmVyUmVtZW1i
ZXIoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKLSAgICBBU1NFUlQobV9k
YXRhYmFzZS50YWJsZUV4aXN0cygibmV2ZXJfcmVtZW1iZXIiKSk7Ci0KLSAgICBIQU5ETEVfU1FM
X0VYRUNfRkFJTFVSRSghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gbmV2
ZXJfcmVtZW1iZXIiKSwKLSAgICAgICAgZmFsc2UsICJGYWlsZWQgdG8gY2xlYXIgdGFibGUgbmV2
ZXJfcmVtZW1iZXIiKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1TdHJpbmcgQ3JlZGVudGlh
bEJhY2tpbmdTdG9yZTo6ZW5jcnlwdGVkU3RyaW5nKGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0KSBj
b25zdAotewotICAgIFdURjo6Q1N0cmluZyB1dGY4ID0gcGxhaW5UZXh0LnV0ZjgoU3RyaW5nOjpT
dHJpY3RDb252ZXJzaW9uKTsKLSAgICBzdGQ6OnN0cmluZyBjaXBoZXJUZXh0OwotICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpFbmNyeXB0b3I6OmVuY3J5cHRTdHJpbmcoc3RkOjpzdHJpbmcodXRm
OC5kYXRhKCksIHV0ZjgubGVuZ3RoKCkpLCAmY2lwaGVyVGV4dCk7Ci0gICAgcmV0dXJuIFN0cmlu
ZyhjaXBoZXJUZXh0LmRhdGEoKSwgY2lwaGVyVGV4dC5sZW5ndGgoKSk7Ci19Ci0KLVN0cmluZyBD
cmVkZW50aWFsQmFja2luZ1N0b3JlOjpkZWNyeXB0ZWRTdHJpbmcoY29uc3QgU3RyaW5nJiBjaXBo
ZXJUZXh0KSBjb25zdAotewotICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBjaXBoZXJUZXh0LmlzOEJp
dCgpID8KLSAgICAgICAgc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
Y2lwaGVyVGV4dC5jaGFyYWN0ZXJzOCgpKSwgY2lwaGVyVGV4dC5sZW5ndGgoKSAqIHNpemVvZihM
Q2hhcikpIDoKLSAgICAgICAgc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oY2lwaGVyVGV4dC5jaGFyYWN0ZXJzMTYoKSksIGNpcGhlclRleHQubGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpKTsKLQotICAgIHN0ZDo6c3RyaW5nIHBsYWluVGV4dDsKLSAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6RW5jcnlwdG9yOjpkZWNyeXB0U3RyaW5nKHRleHQsICZwbGFpblRleHQpOwot
Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgocGxhaW5UZXh0LmRhdGEoKSwgcGxhaW5UZXh0
Lmxlbmd0aCgpKTsKLX0KLQotQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNlcnRNZ3JXcmFwcGVyKiBD
cmVkZW50aWFsQmFja2luZ1N0b3JlOjpjZXJ0TWdyV3JhcHBlcigpCi17Ci0gICAgaWYgKCFtX2Nl
cnRNZ3JXcmFwcGVyKQotICAgICAgICBtX2NlcnRNZ3JXcmFwcGVyID0gYWRvcHRQdHIobmV3IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpDZXJ0TWdyV3JhcHBlcigpKTsKLQotICAgIHJldHVybiBtX2Nl
cnRNZ3JXcmFwcGVyLmdldCgpOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShCTEFDS0JFUlJZX0NSRURFTlRJQUxfUEVSU0lTVCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9DcmVkZW50aWFsQmFja2luZ1N0
b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0NyZWRlbnRpYWxCYWNraW5n
U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9o
Ci0jZGVmaW5lIENyZWRlbnRpYWxCYWNraW5nU3RvcmVfaAotCi0jaWYgRU5BQkxFKEJMQUNLQkVS
UllfQ1JFREVOVElBTF9QRVJTSVNUKQotCi0jaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgotI2luY2x1
ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1NaXNj
Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1u
YW1lc3BhY2UgUGxhdGZvcm0gewotY2xhc3MgQ2VydE1ncldyYXBwZXI7Ci19Ci19Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUHJvdGVjdGlvblNwYWNlOwotCi1jbGFzcyBDcmVkZW50
aWFsQmFja2luZ1N0b3JlIHsKLXB1YmxpYzoKLSAgICBmcmllbmQgQ3JlZGVudGlhbEJhY2tpbmdT
dG9yZSYgY3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpOwotCi0gICAgfkNyZWRlbnRpYWxCYWNraW5n
U3RvcmUoKTsKLSAgICBib29sIG9wZW4oY29uc3QgU3RyaW5nJiBkYlBhdGgpOwotICAgIGJvb2wg
YWRkTG9naW4oY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYpOwotICAg
IGJvb2wgdXBkYXRlTG9naW4oY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlh
bCYpOwotICAgIGJvb2wgaGFzTG9naW4oY29uc3QgUHJvdGVjdGlvblNwYWNlJik7Ci0gICAgQ3Jl
ZGVudGlhbCBnZXRMb2dpbihjb25zdCBQcm90ZWN0aW9uU3BhY2UmKTsKLSAgICBib29sIHJlbW92
ZUxvZ2luKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUpOwot
ICAgIGJvb2wgYWRkTmV2ZXJSZW1lbWJlcihjb25zdCBQcm90ZWN0aW9uU3BhY2UmKTsKLSAgICBi
b29sIGhhc05ldmVyUmVtZW1iZXIoY29uc3QgUHJvdGVjdGlvblNwYWNlJik7Ci0gICAgYm9vbCBy
ZW1vdmVOZXZlclJlbWVtYmVyKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpOwotICAgIGJvb2wgY2xl
YXJMb2dpbnMoKTsKLSAgICBib29sIGNsZWFyTmV2ZXJSZW1lbWJlcigpOwotCi1wcml2YXRlOgot
ICAgIENyZWRlbnRpYWxCYWNraW5nU3RvcmUoKTsKLSAgICBTdHJpbmcgZW5jcnlwdGVkU3RyaW5n
KGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0KSBjb25zdDsKLSAgICBTdHJpbmcgZGVjcnlwdGVkU3Ry
aW5nKGNvbnN0IFN0cmluZyYgY2lwaGVyVGV4dCkgY29uc3Q7Ci0KLSAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6Q2VydE1ncldyYXBwZXIqIGNlcnRNZ3JXcmFwcGVyKCk7Ci0KLSAgICBTUUxpdGVE
YXRhYmFzZSBtX2RhdGFiYXNlOwotICAgIE93blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IG1fYWRkTG9n
aW5TdGF0ZW1lbnQ7Ci0gICAgT3duUHRyPFNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVMb2dpblN0
YXRlbWVudDsKLSAgICBPd25QdHI8U1FMaXRlU3RhdGVtZW50PiBtX2hhc0xvZ2luU3RhdGVtZW50
OwotICAgIE93blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IG1fZ2V0TG9naW5TdGF0ZW1lbnQ7Ci0gICAg
T3duUHRyPFNRTGl0ZVN0YXRlbWVudD4gbV9yZW1vdmVMb2dpblN0YXRlbWVudDsKLSAgICBPd25Q
dHI8U1FMaXRlU3RhdGVtZW50PiBtX2FkZE5ldmVyUmVtZW1iZXJTdGF0ZW1lbnQ7Ci0gICAgT3du
UHRyPFNRTGl0ZVN0YXRlbWVudD4gbV9oYXNOZXZlclJlbWVtYmVyU3RhdGVtZW50OwotICAgIE93
blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IG1fcmVtb3ZlTmV2ZXJSZW1lbWJlclN0YXRlbWVudDsKLQot
ICAgIE93blB0cjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2VydE1ncldyYXBwZXI+IG1fY2VydE1n
cldyYXBwZXI7Ci0KLSAgICBESVNBQkxFX0NPUFkoQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSkKLX07
Ci0KLUNyZWRlbnRpYWxCYWNraW5nU3RvcmUmIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEJMQUNLQkVSUllfQ1JF
REVOVElBTF9QRVJTSVNUKQotCi0jZW5kaWYgLy8gQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvQ3JlZGVudGlh
bFN0b3JhZ2VCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvQ3JlZGVudGlhbFN0b3JhZ2VCbGFja0JlcnJ5LmNwcAko
cmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L0NyZWRlbnRpYWxTdG9yYWdlQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLQotI2lu
Y2x1ZGUgIkNyZWRlbnRpYWwuaCIKLSNpZiBFTkFCTEUoQkxBQ0tCRVJSWV9DUkVERU5USUFMX1BF
UlNJU1QpCi0jaW5jbHVkZSAiQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotQ3JlZGVudGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0RnJv
bVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNl
KQotewotI2lmIEVOQUJMRShCTEFDS0JFUlJZX0NSRURFTlRJQUxfUEVSU0lTVCkKLSAgICByZXR1
cm4gY3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpLmdldExvZ2luKHByb3RlY3Rpb25TcGFjZSk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShwcm90ZWN0aW9uU3BhY2UpOwotICAgIHJldHVybiBDcmVk
ZW50aWFsKCk7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0ROU0JsYWNrQmVycnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJy
eS9ETlNCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0ROU0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0g
Ki8KLQotI2lmbmRlZiBETlNQcmVmZXRjaEJsYWNrQmVycnlfSAotI2RlZmluZSBETlNQcmVmZXRj
aEJsYWNrQmVycnlfSAotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRE5TLmgiCi0K
LSNpbmNsdWRlICJETlNSZXNvbHZlUXVldWUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUNvbW1vbkZ1bmN0aW9ucy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEROU1Jlc29sdmVRdWV1ZTo6cGxhdGZvcm1Q
cm94eUlzRW5hYmxlZEluU3lzdGVtUHJlZmVyZW5jZXMoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEROU1Jlc29sdmVRdWV1ZTo6cGxhdGZv
cm1SZXNvbHZlKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3QpCi17Ci0gICAgaWYgKGhvc3QuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OnByZWZl
dGNoRE5TKGhvc3QpOwotfQotCi19Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9EZWZlcnJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9EZWZlcnJlZERhdGEuY3Bw
CShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Js
YWNrYmVycnkvRGVmZXJyZWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGVmZXJyZWREYXRhLmgiCi0KLSNpbmNsdWRl
ICJOZXR3b3JrSm9iLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRGVmZXJyZWREYXRhOjpE
ZWZlcnJlZERhdGEoTmV0d29ya0pvYiYgam9iKQotICAgIDogbV9qb2Ioam9iKQotICAgICwgbV9w
cm9jZXNzRGF0YVRpbWVyKHRoaXMsICZEZWZlcnJlZERhdGE6OmZpcmVQcm9jZXNzRGF0YVRpbWVy
KQotICAgICwgbV9kZWZlcnJlZFN0YXR1c1JlY2VpdmVkKGZhbHNlKQotICAgICwgbV9zdGF0dXMo
MCkKLSAgICAsIG1fYnl0ZXNTZW50KDApCi0gICAgLCBtX3RvdGFsQnl0ZXNUb0JlU2VudCgwKQot
ICAgICwgbV9kZWZlcnJlZENsb3NlU3RhdHVzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJT
dHJlYW06OlN0YXR1c1N1Y2Nlc3MpCi0gICAgLCBtX2RlZmVycmVkQ2xvc2UoZmFsc2UpCi0gICAg
LCBtX2luUHJvY2Vzc0RlZmVycmVkRGF0YShmYWxzZSkKLXsKLX0KLQotdm9pZCBEZWZlcnJlZERh
dGE6OmRlZmVyT3BlbihpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAg
bV9kZWZlcnJlZFN0YXR1c1JlY2VpdmVkID0gdHJ1ZTsKLSAgICBtX3N0YXR1cyA9IHN0YXR1czsK
LSAgICBtX21lc3NhZ2UgPSBtZXNzYWdlOwotfQotCi12b2lkIERlZmVycmVkRGF0YTo6ZGVmZXJI
ZWFkZXJSZWNlaXZlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBtX2hlYWRlcktleXMuYXBwZW5kKGtleSk7Ci0gICAgbV9oZWFkZXJWYWx1ZXMuYXBwZW5k
KHZhbHVlKTsKLX0KLQotdm9pZCBEZWZlcnJlZERhdGE6OmRlZmVyTXVsdGlwYXJ0SGVhZGVyUmVj
ZWl2ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbV9t
dWx0aXBhcnRIZWFkZXJLZXlzLmFwcGVuZChrZXkpOwotICAgIG1fbXVsdGlwYXJ0aGVhZGVyVmFs
dWVzLmFwcGVuZCh2YWx1ZSk7Ci19Ci0KLXZvaWQgRGVmZXJyZWREYXRhOjpkZWZlckRhdGFTZW50
KHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5
dGVzVG9CZVNlbnQpCi17Ci0gICAgbV9ieXRlc1NlbnQgPSBieXRlc1NlbnQ7Ci0gICAgbV90b3Rh
bEJ5dGVzVG9CZVNlbnQgPSB0b3RhbEJ5dGVzVG9CZVNlbnQ7Ci19Ci0KLXZvaWQgRGVmZXJyZWRE
YXRhOjpkZWZlckRhdGFSZWNlaXZlZChjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCi17Ci0g
ICAgbV9kYXRhU2VnbWVudHMuYXBwZW5kKFZlY3RvcjxjaGFyPigpKTsKLSAgICBtX2RhdGFTZWdt
ZW50cy5yYmVnaW4oKS0+YXBwZW5kKGJ1ZiwgbGVuKTsKLX0KLQotdm9pZCBEZWZlcnJlZERhdGE6
OmRlZmVyQ2xvc2UoaW50IHN0YXR1cykKLXsKLSAgICBtX2RlZmVycmVkQ2xvc2VTdGF0dXMgPSBz
dGF0dXM7Ci0gICAgbV9kZWZlcnJlZENsb3NlID0gdHJ1ZTsKLX0KLQotYm9vbCBEZWZlcnJlZERh
dGE6OnByb2Nlc3NIZWFkZXJzKFZlY3RvcjxTdHJpbmc+JiBoZWFkZXJLZXlzLCBWZWN0b3I8U3Ry
aW5nPiYgaGVhZGVyVmFsdWVzLCBIYW5kbGVIZWFkZXJzRnVuY3Rpb24gZnVuY3Rpb24pCi17Ci0g
ICAgc2l6ZV90IG51bUhlYWRlcnMgPSBoZWFkZXJLZXlzLnNpemUoKTsKLSAgICBBU1NFUlQoaGVh
ZGVyVmFsdWVzLnNpemUoKSA9PSBudW1IZWFkZXJzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bUhlYWRlcnM7ICsraSkgewotICAgICAgICAobV9qb2IuKmZ1bmN0aW9uKShoZWFkZXJL
ZXlzW2ldLCBoZWFkZXJWYWx1ZXNbaV0pOwotCi0gICAgICAgIGlmIChtX2pvYi5pc0RlZmVycmlu
Z0xvYWRpbmcoKSkgewotICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCB0aGUgaGVhZGVycyB0aGF0
IGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZC4KLSAgICAgICAgICAgIGhlYWRlcktleXMucmVt
b3ZlKDAsIGkgKyAxKTsKLSAgICAgICAgICAgIGhlYWRlclZhbHVlcy5yZW1vdmUoMCwgaSArIDEp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1f
am9iLmlzQ2FuY2VsbGVkKCkpIHsKLSAgICAgICAgICAgIC8vIERvbid0IGJvdGhlciByZW1vdmlu
ZyBoZWFkZXJzOyBqb2Igd2lsbCBiZSBkZWxldGVkLgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotICAgIGhlYWRlcktleXMuY2xlYXIoKTsKLSAgICBoZWFkZXJW
YWx1ZXMuY2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBEZWZlcnJlZERhdGE6
OnByb2Nlc3NEZWZlcnJlZERhdGEoKQotewotICAgIGlmIChtX2luUHJvY2Vzc0RlZmVycmVkRGF0
YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVjdXJzaW9uR3VhcmQgZ3VhcmQobV9pblByb2Nl
c3NEZWZlcnJlZERhdGEpOwotCi0gICAgLy8gU2VuZGluZyBkYXRhIHRvIHdlYmtpdCBjYXVzZXMg
aXQgdG8gYmUgcGFyc2VkIGFuZCBqYXZhc2NyaXB0IGV4ZWN1dGVkLAotICAgIC8vIHdoaWNoIG1p
Z2h0IGNhdXNlIGl0IHRvIGNhbmNlbCB0aGUgam9iIG9yIHNldCBkZWZlcnNMb2FkaW5nIGFnYWlu
LiBTbwotICAgIC8vIHRvIGJlIHNhZmUsIGNoZWNrIHRoaXMgYWZ0ZXIgZXZlcnkgc3RlcC4KLSAg
ICBpZiAobV9qb2IuaXNEZWZlcnJpbmdMb2FkaW5nKCkgfHwgbV9qb2IuaXNDYW5jZWxsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGVmZXJyZWRTdGF0dXNSZWNlaXZlZCkgewot
ICAgICAgICBtX2pvYi5oYW5kbGVOb3RpZnlTdGF0dXNSZWNlaXZlZChtX3N0YXR1cywgbV9tZXNz
YWdlKTsKLSAgICAgICAgbV9kZWZlcnJlZFN0YXR1c1JlY2VpdmVkID0gZmFsc2U7Ci0gICAgICAg
IGlmIChtX2pvYi5pc0RlZmVycmluZ0xvYWRpbmcoKSB8fCBtX2pvYi5pc0NhbmNlbGxlZCgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghcHJvY2Vzc0hlYWRlcnMobV9o
ZWFkZXJLZXlzLCBtX2hlYWRlclZhbHVlcywgJk5ldHdvcmtKb2I6OmhhbmRsZU5vdGlmeUhlYWRl
clJlY2VpdmVkKQotICAgICAgICB8fCAhcHJvY2Vzc0hlYWRlcnMobV9tdWx0aXBhcnRIZWFkZXJL
ZXlzLCBtX211bHRpcGFydGhlYWRlclZhbHVlcywgJk5ldHdvcmtKb2I6OmhhbmRsZU5vdGlmeU11
bHRpcGFydEhlYWRlclJlY2VpdmVkKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT25seSBw
cm9jZXNzIDMyayBvZiBkYXRhIGF0IGEgdGltZSB0byBhdm9pZCBibG9ja2luZyB0aGUgZXZlbnQg
bG9vcCBmb3IgdG9vIGxvbmcuCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heERhdGEgPSAz
MiAqIDEwMjQ7Ci0KLSAgICB1bnNpZ25lZCB0b3RhbERhdGEgPSAwOwotICAgIHdoaWxlICghbV9k
YXRhU2VnbWVudHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVm
ZmVyID0gbV9kYXRhU2VnbWVudHMuZmlyc3QoKTsKLSAgICAgICAgbV9qb2IuaGFuZGxlTm90aWZ5
RGF0YVJlY2VpdmVkKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwotICAgICAgICB0b3Rh
bERhdGEgKz0gYnVmZmVyLnNpemUoKTsKLQotICAgICAgICBpZiAobV9qb2IuaXNDYW5jZWxsZWQo
KSkgewotICAgICAgICAgICAgLy8gRG9uJ3QgYm90aGVyIHJlbW92aW5nIHNlZ21lbnQ7IGpvYiB3
aWxsIGJlIGRlbGV0ZWQuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX2RhdGFTZWdtZW50cy5yZW1vdmVGaXJzdCgpOwotCi0gICAgICAgIGlmIChtX2pvYi5pc0Rl
ZmVycmluZ0xvYWRpbmcoKSkgewotICAgICAgICAgICAgLy8gU3RvcCBwcm9jZXNzaW5nIHVudGls
IGRlZmVycmVkIGxvYWRpbmcgaXMgdHVybmVkIG9mZiBhZ2Fpbi4KLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0b3RhbERhdGEgPj0gbWF4RGF0YSAmJiAhbV9k
YXRhU2VnbWVudHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBQYXVzZSBmb3Igbm93LCBh
bmQgc2NoZWR1bGUgYSB0aW1lciB0byBjb250aW51ZSBhZnRlciBydW5uaW5nIHRoZSBldmVudCBs
b29wLgotICAgICAgICAgICAgc2NoZWR1bGVQcm9jZXNzRGVmZXJyZWREYXRhKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV90b3RhbEJ5dGVzVG9C
ZVNlbnQpIHsKLSAgICAgICAgbV9qb2IuaGFuZGxlTm90aWZ5RGF0YVNlbnQobV9ieXRlc1NlbnQs
IG1fdG90YWxCeXRlc1RvQmVTZW50KTsKLSAgICAgICAgbV9ieXRlc1NlbnQgPSAwOwotICAgICAg
ICBtX3RvdGFsQnl0ZXNUb0JlU2VudCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fZGVmZXJyZWRD
bG9zZSkgewotICAgICAgICBtX2pvYi5oYW5kbGVOb3RpZnlDbG9zZShtX2RlZmVycmVkQ2xvc2VT
dGF0dXMpOwotICAgICAgICBtX2RlZmVycmVkQ2xvc2UgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1f
am9iLmlzRGVmZXJyaW5nTG9hZGluZygpIHx8IG1fam9iLmlzQ2FuY2VsbGVkKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIERlZmVycmVkRGF0YTo6ZmlyZVByb2Nlc3NE
YXRhVGltZXIoVGltZXI8RGVmZXJyZWREYXRhPiopCi17Ci0gICAgcHJvY2Vzc0RlZmVycmVkRGF0
YSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvRGVmZXJyZWREYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0RlZmVycmVkRGF0YS5o
CShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Js
YWNrYmVycnkvRGVmZXJyZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZu
ZGVmIERlZmVycmVkRGF0YV9oCi0jZGVmaW5lIERlZmVycmVkRGF0YV9oCi0KLSNpbmNsdWRlICJU
aW1lci5oIgotCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIE5ldHdvcmtKb2I7Ci0KLWNsYXNzIFJlY3Vyc2lvbkd1YXJkIHsKLXB1YmxpYzoK
LSAgICBSZWN1cnNpb25HdWFyZChib29sJiBndWFyZCkKLSAgICAgICAgOiBtX2d1YXJkKGd1YXJk
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2d1YXJkKTsKLSAgICAgICAgbV9ndWFyZCA9IHRy
dWU7Ci0gICAgfQotCi0gICAgflJlY3Vyc2lvbkd1YXJkKCkKLSAgICB7Ci0gICAgICAgIG1fZ3Vh
cmQgPSBmYWxzZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCYgbV9ndWFyZDsKLX07Ci0K
LWNsYXNzIERlZmVycmVkRGF0YSB7Ci1wdWJsaWM6Ci0gICAgRGVmZXJyZWREYXRhKE5ldHdvcmtK
b2ImKTsKLSAgICB2b2lkIGRlZmVyT3BlbihpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpOwotICAgIHZvaWQgZGVmZXJIZWFkZXJSZWNlaXZlZChjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBkZWZlck11bHRpcGFydEhlYWRlclJlY2VpdmVk
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGRlZmVy
RGF0YVJlY2VpdmVkKGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbik7Ci0gICAgdm9pZCBkZWZl
ckRhdGFTZW50KHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9u
ZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwotICAgIHZvaWQgZGVmZXJDbG9zZShpbnQgc3RhdHVzKTsK
LQotICAgIGJvb2wgaGFzRGVmZXJyZWREYXRhKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2RlZmVycmVkU3RhdHVzUmVjZWl2ZWQgfHwgIW1faGVhZGVyS2V5cy5pc0VtcHR5KCkgfHwg
IW1fbXVsdGlwYXJ0SGVhZGVyS2V5cy5pc0VtcHR5KCkgfHwgIW1fZGF0YVNlZ21lbnRzLmlzRW1w
dHkoKSB8fCBtX2RlZmVycmVkQ2xvc2U7Ci0gICAgfQotCi0gICAgdm9pZCBwcm9jZXNzRGVmZXJy
ZWREYXRhKCk7Ci0KLSAgICB2b2lkIHNjaGVkdWxlUHJvY2Vzc0RlZmVycmVkRGF0YSgpCi0gICAg
ewotICAgICAgICBpZiAoIW1fcHJvY2Vzc0RhdGFUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAg
ICAgbV9wcm9jZXNzRGF0YVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrSm9iOjoqSGFuZGxlSGVhZGVyc0Z1bmN0aW9uKShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICAvLyBSZXR1cm5z
IGZhbHNlIGlmIHRoZSBqb2IgaXMgZGVmZXJyZWQgb3IgY2FuY2VsZWQsIG90aGVyd2lzZSByZXR1
cm5zIHRydWUuCi0gICAgYm9vbCBwcm9jZXNzSGVhZGVycyhWZWN0b3I8U3RyaW5nPiYgaGVhZGVy
S2V5cywgVmVjdG9yPFN0cmluZz4mIGhlYWRlclZhbHVlcywgSGFuZGxlSGVhZGVyc0Z1bmN0aW9u
KTsKLQotICAgIHZvaWQgZmlyZVByb2Nlc3NEYXRhVGltZXIoVGltZXI8RGVmZXJyZWREYXRhPiop
OwotICAgIE5ldHdvcmtKb2ImIG1fam9iOwotICAgIFRpbWVyPERlZmVycmVkRGF0YT4gbV9wcm9j
ZXNzRGF0YVRpbWVyOwotICAgIGJvb2wgbV9kZWZlcnJlZFN0YXR1c1JlY2VpdmVkOwotICAgIGlu
dCBtX3N0YXR1czsKLSAgICBTdHJpbmcgbV9tZXNzYWdlOwotICAgIFZlY3RvcjxTdHJpbmc+IG1f
aGVhZGVyS2V5czsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX2hlYWRlclZhbHVlczsKLSAgICBWZWN0
b3I8U3RyaW5nPiBtX211bHRpcGFydEhlYWRlcktleXM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9t
dWx0aXBhcnRoZWFkZXJWYWx1ZXM7Ci0gICAgRGVxdWU8VmVjdG9yPGNoYXI+ID4gbV9kYXRhU2Vn
bWVudHM7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIG1fYnl0ZXNTZW50OwotICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBtX3RvdGFsQnl0ZXNUb0JlU2VudDsKLSAgICBpbnQgbV9kZWZlcnJlZENsb3Nl
U3RhdHVzOwotICAgIGJvb2wgbV9kZWZlcnJlZENsb3NlOwotICAgIGJvb2wgbV9pblByb2Nlc3NE
ZWZlcnJlZERhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBE
ZWZlcnJlZERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L05ldHdvcmtKb2IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmNwcAkocmV2aXNpb24gMTYxNTkwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtKb2Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya0pvYi5oIgotCi0jaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgotI2luY2x1ZGUgIkNy
ZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5oIgot
I2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5
LmgiCi0jaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRl
ICJNSU1FU25pZmZpbmcuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVk
ZSAiTmV0d29ya01hbmFnZXIuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUlNTRmls
dGVyU3RyZWFtLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKLSNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0Lmgi
Ci0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KLSNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1TZXR0aW5ncy5oPgotI2luY2x1ZGUgPExvY2FsaXplUmVzb3VyY2UuaD4KLSNp
bmNsdWRlIDxuZXR3b3JrL011bHRpcGFydFN0cmVhbS5oPgotI2luY2x1ZGUgPG5ldHdvcmsvTmV0
d29ya1N0cmVhbUZhY3RvcnkuaD4KLQotdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdv
cmtSZXF1ZXN0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQgc19y
ZWRpcmVjdE1heGltdW0gPSAxMDsKLQotaW5saW5lIHN0YXRpYyBib29sIGlzSW5mbyhpbnQgc3Rh
dHVzQ29kZSkKLXsKLSAgICByZXR1cm4gMTAwIDw9IHN0YXR1c0NvZGUgJiYgc3RhdHVzQ29kZSA8
IDIwMDsKLX0KLQotaW5saW5lIHN0YXRpYyBib29sIGlzUmVkaXJlY3QoaW50IHN0YXR1c0NvZGUp
Ci17Ci0gICAgcmV0dXJuIDMwMCA8PSBzdGF0dXNDb2RlICYmIHN0YXR1c0NvZGUgPCA0MDAgJiYg
c3RhdHVzQ29kZSAhPSAzMDQ7Ci19Ci0KLWlubGluZSBzdGF0aWMgYm9vbCBpc1VuYXV0aG9yaXpl
ZChpbnQgc3RhdHVzQ29kZSkKLXsKLSAgICByZXR1cm4gc3RhdHVzQ29kZSA9PSA0MDE7Ci19Ci0K
LXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBhcHBlbmRhYmxlSGVhZGVyc1tdID0geyJhY2Nlc3Mt
Y29udHJvbC1hbGxvdy1vcmlnaW4iLCAiYWxsb3ciLAotICAgICJzZXQtY29va2llIiwgInNldC1j
b29raWUyIiwgInZhcnkiLCAidmlhIiwgIndhcm5pbmcifTsKLQotc3RhdGljIGJvb2wgaXNBcHBl
bmRhYmxlSGVhZGVyKGNvbnN0IFN0cmluZyYga2V5KQotewotICAgIC8vIE5vbi1zdGFuZGFyZCBo
ZWFkZXIgZmllbGRzIGFyZSBjb252ZW50aW9uYWxseSBtYXJrZWQgYnkgcHJlZml4aW5nIHRoZSBm
aWVsZCBuYW1lIHdpdGggWC0uCi0gICAgaWYgKGtleS5zdGFydHNXaXRoKCJ4LSIpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGFwcGVu
ZGFibGVIZWFkZXJzKSAvc2l6ZW9mKGNoYXIqKTsgaSsrKQotICAgICAgICBpZiAoa2V5ID09IGFw
cGVuZGFibGVIZWFkZXJzW2ldKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLU5ldHdvcmtKb2I6Ok5ldHdvcmtKb2IoKQotICAgIDogRnJhbWVEZXN0
cnVjdGlvbk9ic2VydmVyKDApCi0gICAgLCBtX3BsYXllcklkKDApCi0gICAgLCBtX2RlbGV0ZUpv
YlRpbWVyKHRoaXMsICZOZXR3b3JrSm9iOjpmaXJlRGVsZXRlSm9iVGltZXIpCi0gICAgLCBtX3N0
cmVhbUZhY3RvcnkoMCkKLSAgICAsIG1faXNGaWxlKGZhbHNlKQotICAgICwgbV9pc0ZUUChmYWxz
ZSkKLSAgICAsIG1faXNGVFBEaXIodHJ1ZSkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2lzUnVu
bmluZyh0cnVlKSAvLyBBbHdheXMgc3RhcnRlZCBpbW1lZGlhdGVseSBhZnRlciBjcmVhdGlvbi4K
LSNlbmRpZgotICAgICwgbV9jYW5jZWxsZWQoZmFsc2UpCi0gICAgLCBtX3N0YXR1c1JlY2VpdmVk
KGZhbHNlKQotICAgICwgbV9kYXRhUmVjZWl2ZWQoZmFsc2UpCi0gICAgLCBtX3Jlc3BvbnNlU2Vu
dChmYWxzZSkKLSAgICAsIG1fY2FsbGluZ0NsaWVudChmYWxzZSkKLSAgICAsIG1fbmVlZHNSZXRy
eUFzRlRQRGlyZWN0b3J5KGZhbHNlKQotICAgICwgbV9pc092ZXJyaWRlQ29udGVudFR5cGUoZmFs
c2UpCi0gICAgLCBtX25ld0pvYldpdGhDcmVkZW50aWFsc1N0YXJ0ZWQoZmFsc2UpCi0gICAgLCBt
X2lzSGVhZE1ldGhvZChmYWxzZSkKLSAgICAsIG1fZXh0ZW5kZWRTdGF0dXNDb2RlKDApCi0gICAg
LCBtX3JlZGlyZWN0Q291bnQoMCkKLSAgICAsIG1fZGVmZXJyZWREYXRhKCp0aGlzKQotICAgICwg
bV9kZWZlckxvYWRpbmdDb3VudCgwKQotICAgICwgbV9pc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdp
bmcoZmFsc2UpCi17Ci19Ci0KLU5ldHdvcmtKb2I6On5OZXR3b3JrSm9iKCkKLXsKLSAgICBpZiAo
bV9pc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdpbmcpCi0gICAgICAgIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlTWFuYWdlcjo6aW5zdGFuY2UoKS0+Y2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
dGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6aW5pdGlhbGl6ZShpbnQgcGxheWVySWQsCi0g
ICAgY29uc3QgU3RyaW5nJiBwYWdlR3JvdXBOYW1lLAotICAgIGNvbnN0IFVSTCYgdXJsLAotICAg
IGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwKLSAg
ICBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUsCi0gICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06Ok5ldHdvcmtTdHJlYW1GYWN0b3J5KiBzdHJlYW1GYWN0b3J5LAotICAgIEZyYW1lKiBm
cmFtZSwKLSAgICBpbnQgZGVmZXJMb2FkaW5nQ291bnQsCi0gICAgaW50IHJlZGlyZWN0Q291bnQp
Ci17Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQoaGFuZGxlKTsKLSAgICBCTEFDS0JFUlJZX0FTU0VS
VChmcmFtZSk7Ci0KLSAgICBtX3BsYXllcklkID0gcGxheWVySWQ7Ci0gICAgbV9wYWdlR3JvdXBO
YW1lID0gcGFnZUdyb3VwTmFtZTsKLQotICAgIG1fcmVzcG9uc2Uuc2V0VVJMKHVybCk7Ci0gICAg
bV9pc0ZpbGUgPSB1cmwucHJvdG9jb2xJcygiZmlsZSIpIHx8IHVybC5wcm90b2NvbElzKCJsb2Nh
bCIpOwotICAgIG1faXNGVFAgPSB1cmwucHJvdG9jb2xJcygiZnRwIik7Ci0KLSAgICBtX2hhbmRs
ZSA9IGhhbmRsZTsKLQotICAgIG1fc3RyZWFtRmFjdG9yeSA9IHN0cmVhbUZhY3Rvcnk7Ci0KLSAg
ICBpZiAoZnJhbWUgJiYgZnJhbWUtPmxvYWRlcigpLT5wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rp
c3BhdGNoZWQoKSAhPSBGcmFtZUxvYWRlcjo6Tm9EaXNtaXNzYWwpIHsKLSAgICAgICAgLy8gSW4g
dGhlIGNhc2UgdGhlIGZyYW1lIHdpbGwgYmUgZGV0YWNoZWQgc29vbiwgd2Ugc3RpbGwgbmVlZCB0
byBwaW5nIHRoZSBzZXJ2ZXIsIGJ1dCBpdCBpcwotICAgICAgICAvLyBubyBsb25nZXIgc2FmZSB0
byByZWZlcmVuY2UgdGhlIEZyYW1lIG9iamVjdC4KLSAgICAgICAgLy8gU2VlIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzY1OTEwIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzA0NTcuCi0gICAgICAgIC8vIG1fZnJhbWUgd291bGQgYmUgc2V0IHRv
IHplcm8uCi0gICAgICAgIG9ic2VydmVGcmFtZSgwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb2Jz
ZXJ2ZUZyYW1lKGZyYW1lKTsKLQotICAgIG1fcmVkaXJlY3RDb3VudCA9IHJlZGlyZWN0Q291bnQ7
Ci0gICAgbV9kZWZlckxvYWRpbmdDb3VudCA9IGRlZmVyTG9hZGluZ0NvdW50OwotCi0gICAgbV9p
c0hlYWRNZXRob2QgPSBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpLnVwcGVy
KCkgPT0gIkhFQUQiOwotCi0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IGNhbGwg
bm90aWZ5SGVhZGVyUmVjZWl2ZWQsIGFzIHRoZSBDb250ZW50LVR5cGUKLSAgICAvLyB3aWxsIHVs
dGltYXRlbHkgZ2V0IHBhcnNlZCB3aGVuIHNlbmRSZXNwb25zZUlmTmVlZGVkIGdldHMgY2FsbGVk
LgotICAgIGlmICghcmVxdWVzdC5nZXRPdmVycmlkZUNvbnRlbnRUeXBlKCkuZW1wdHkoKSkgewot
ICAgICAgICBtX2NvbnRlbnRUeXBlID0gU3RyaW5nKHJlcXVlc3QuZ2V0T3ZlcnJpZGVDb250ZW50
VHlwZSgpKTsKLSAgICAgICAgbV9pc092ZXJyaWRlQ29udGVudFR5cGUgPSB0cnVlOwotICAgIH0K
LQotICAgIGlmICghcmVxdWVzdC5nZXRTdWdnZXN0ZWRTYXZlTmFtZSgpLmVtcHR5KCkpCi0gICAg
ICAgIG1fY29udGVudERpc3Bvc2l0aW9uID0gImZpbGVuYW1lPSIgKyBTdHJpbmcocmVxdWVzdC5n
ZXRTdWdnZXN0ZWRTYXZlTmFtZSgpKTsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0
ZXJTdHJlYW0qIHdyYXBwZWRTdHJlYW0gPSBtX3N0cmVhbUZhY3RvcnktPmNyZWF0ZU5ldHdvcmtT
dHJlYW0ocmVxdWVzdCwgbV9wbGF5ZXJJZCk7Ci0gICAgQVNTRVJUKHdyYXBwZWRTdHJlYW0pOwot
Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRUeXBlIHRh
cmdldFR5cGUgPSByZXF1ZXN0LmdldFRhcmdldFR5cGUoKTsKLSAgICBpZiAoKHRhcmdldFR5cGUg
PT0gQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc01haW5GcmFt
ZQotICAgICAgICB8fCB0YXJnZXRUeXBlID09IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3Jr
UmVxdWVzdDo6VGFyZ2V0SXNTdWJmcmFtZSkKLSAgICAgICAgJiYgIW1faXNPdmVycmlkZUNvbnRl
bnRUeXBlKSB7Ci0gICAgICAgIFJTU0ZpbHRlclN0cmVhbSogZmlsdGVyID0gbmV3IFJTU0ZpbHRl
clN0cmVhbSgpOwotICAgICAgICBmaWx0ZXItPnNldFdyYXBwZWRTdHJlYW0od3JhcHBlZFN0cmVh
bSk7Ci0gICAgICAgIHdyYXBwZWRTdHJlYW0gPSBmaWx0ZXI7Ci0gICAgfQotCi0gICAgc2V0V3Jh
cHBlZFN0cmVhbSh3cmFwcGVkU3RyZWFtKTsKLX0KLQotaW50IE5ldHdvcmtKb2I6OmNhbmNlbEpv
YigpCi17Ci0gICAgbV9jYW5jZWxsZWQgPSB0cnVlOwotCi0gICAgcmV0dXJuIHN0cmVhbUNhbmNl
bCgpOwotfQotCi12b2lkIE5ldHdvcmtKb2I6OnVwZGF0ZURlZmVyTG9hZGluZ0NvdW50KGludCBk
ZWx0YSkKLXsKLSAgICBtX2RlZmVyTG9hZGluZ0NvdW50ICs9IGRlbHRhOwotICAgIEFTU0VSVCht
X2RlZmVyTG9hZGluZ0NvdW50ID49IDApOwotCi0gICAgaWYgKCFpc0RlZmVycmluZ0xvYWRpbmco
KSkgewotICAgICAgICAvLyBUaGVyZSBtaWdodCBhbHJlYWR5IGJlIGEgdGltZXIgc2V0IHRvIGNh
bGwgdGhpcywgYnV0IGl0J3Mgc2FmZSB0byBzY2hlZHVsZSBpdCBhZ2Fpbi4KLSAgICAgICAgbV9k
ZWZlcnJlZERhdGEuc2NoZWR1bGVQcm9jZXNzRGVmZXJyZWREYXRhKCk7Ci0gICAgfQotfQotCi12
b2lkIE5ldHdvcmtKb2I6Om5vdGlmeVN0YXR1c1JlY2VpdmVkKGludCBzdGF0dXMsIGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKHNob3VsZERl
ZmVyTG9hZGluZygpKQotICAgICAgICBtX2RlZmVycmVkRGF0YS5kZWZlck9wZW4oc3RhdHVzLCBt
ZXNzYWdlKTsKLSAgICBlbHNlCi0gICAgICAgIGhhbmRsZU5vdGlmeVN0YXR1c1JlY2VpdmVkKHN0
YXR1cywgbWVzc2FnZSk7Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6aGFuZGxlTm90aWZ5U3RhdHVz
UmVjZWl2ZWQoaW50IHN0YXR1cywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIC8vIENo
ZWNrIGZvciBtZXNzYWdlcyBvdXQgb2Ygb3JkZXIgb3IgYWZ0ZXIgY2FuY2VsLgotICAgIGlmICht
X3Jlc3BvbnNlU2VudCB8fCBtX2NhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGlzSW5mbyhzdGF0dXMpKQotICAgICAgICByZXR1cm47IC8vIGlnbm9yZQotCi0gICAgbV9zdGF0
dXNSZWNlaXZlZCA9IHRydWU7Ci0KLSAgICAvLyBDb252ZXJ0IG5vbi1IVFRQIHN0YXR1cyBjb2Rl
cyB0byBnZW5lcmljIEhUVFAgY29kZXMuCi0gICAgbV9leHRlbmRlZFN0YXR1c0NvZGUgPSBzdGF0
dXM7Ci0gICAgaWYgKCFzdGF0dXMpCi0gICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0Nv
ZGUoMjAwKTsKLSAgICBlbHNlIGlmIChzdGF0dXMgPCAwKQotICAgICAgICBtX3Jlc3BvbnNlLnNl
dEhUVFBTdGF0dXNDb2RlKDQwNCk7Ci0gICAgZWxzZQotICAgICAgICBtX3Jlc3BvbnNlLnNldEhU
VFBTdGF0dXNDb2RlKHN0YXR1cyk7Ci0KLSAgICBtX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0
KG1lc3NhZ2UpOwotCi0gICAgaWYgKGlzVW5hdXRob3JpemVkKG1fZXh0ZW5kZWRTdGF0dXNDb2Rl
KSkKLSAgICAgICAgcHVyZ2VDcmVkZW50aWFscygpOwotfQotCi12b2lkIE5ldHdvcmtKb2I6Om5v
dGlmeUhlYWRlcnNSZWNlaXZlZChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1Jl
cXVlc3Q6OkhlYWRlckxpc3QmIGhlYWRlcnMpCi17Ci0gICAgYm9vbCBjb29raWVzRW5hYmxlZCA9
IG1fZnJhbWUgJiYgbV9mcmFtZS0+bG9hZGVyKCkgJiYgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVu
dCgpCi0gICAgICAgICYmIHN0YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+
KG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPmNvb2tpZXNFbmFibGVkKCk7Ci0KLSAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3Q6OmNvbnN0X2l0
ZXJhdG9yIGVuZEl0ID0gaGVhZGVycy5lbmQoKTsKLSAgICBmb3IgKEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFk
ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZEl0OyArK2l0KSB7Ci0KLSAgICAgICAgLy8gSGFuZGxlIFNl
dC1Db29raWUgaGVhZGVycyBpbW1lZGlhdGVseSwgZXZlbiBpZiBsb2FkaW5nIGlzIGJlaW5nIGRl
ZmVycmVkLCBzaW5jZSBhbnkgcmVxdWVzdAotICAgICAgICAvLyBjcmVhdGVkIHdoaWxlIGxvYWRp
bmcgaXMgZGVmZXJyZWQgc2hvdWxkIGluY2x1ZGUgYWxsIGNvb2tpZXMgcmVjZWl2ZWQuIChUaGlz
IGVzcGVjaWFsbHkKLSAgICAgICAgLy8gYWZmZWN0cyBTZXQtQ29va2llIGhlYWRlcnMgc2VudCB3
aXRoIGEgNDAxIHJlc3BvbnNlIC0gb2Z0ZW4gdGhpcyBjYXVzZXMgYW4gYXV0aCBkaWFsb2cgdG8g
YmUKLSAgICAgICAgLy8gb3BlbmVkLCB3aGljaCBkZWZlcnMgbG9hZGluZywgYnV0IHRoZSBmb2xs
b3d1cCByZXF1ZXN0IHVzaW5nIHRoZSBjcmVkZW50aWFscyBmcm9tIHRoZSBkaWFsb2cKLSAgICAg
ICAgLy8gbmVlZHMgdG8gaW5jbHVkZSB0aGUgY29va2llLikKLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gVGhpcyBpcyBzYWZlIGJlY2F1c2UgaGFuZGxlU2V0Q29va2llSGVhZGVyIG9ubHkgdXBkYXRl
cyB0aGUgY29va2llamFyLCBpdCBkb2Vzbid0IGNhbGwgYmFjawotICAgICAgICAvLyBpbnRvIHRo
ZSBsb2FkZXIuCi0gICAgICAgIFN0cmluZyBrZXlTdHJpbmcoaXQtPmZpcnN0KTsKLSAgICAgICAg
aWYgKGNvb2tpZXNFbmFibGVkICYmIGVxdWFsSWdub3JpbmdDYXNlKGtleVN0cmluZywgInNldC1j
b29raWUiKSkKLSAgICAgICAgICAgIGhhbmRsZVNldENvb2tpZUhlYWRlcihpdC0+c2Vjb25kKTsK
LQotICAgICAgICBpZiAoc2hvdWxkRGVmZXJMb2FkaW5nKCkpCi0gICAgICAgICAgICBtX2RlZmVy
cmVkRGF0YS5kZWZlckhlYWRlclJlY2VpdmVkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGtleVN0cmluZywgIkxvY2F0aW9uIikpIHsKLSAgICAgICAg
ICAgICAgICAvLyBMb2NhdGlvbiwgbGlrZSBhbGwgaGVhZGVycywgaXMgc3VwcG9zZWQgdG8gYmUg
TGF0aW4tMS4gQnV0IHNvbWUgc2l0ZXMgKHdpa2lwZWRpYSkgc2VuZCBpdCBpbiBVVEYtOC4KLSAg
ICAgICAgICAgICAgICAvLyBBbGwgYnl0ZSBzdHJpbmdzIHRoYXQgYXJlIHZhbGlkIFVURi04IGFy
ZSBhbHNvIHZhbGlkIExhdGluLTEgKGFsdGhvdWdoIG91dHNpZGUgQVNDSUksIHRoZSBtZWFuaW5n
IHdpbGwKLSAgICAgICAgICAgICAgICAvLyBkaWZmZXIpLCBidXQgdGhlIHJldmVyc2UgaXNuJ3Qg
dHJ1ZS4gU28gdHJ5IFVURi04IGZpcnN0IGFuZCBmYWxsIGJhY2sgdG8gTGF0aW4tMSBpZiBpdCdz
IGludmFsaWQuCi0gICAgICAgICAgICAgICAgLy8gKEhpZ2ggTGF0aW4tMSBzaG91bGQgYmUgdXJs
LWVuY29kZWQgYW55d2F5LikKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBtYXliZSB3ZSBzaG91bGQgZG8gdGhpcyB3aXRoIG90aGVyIGhlYWRlcnM/Ci0gICAg
ICAgICAgICAgICAgLy8gU2tpcCBpdCBmb3Igbm93IC0gd2UgZG9uJ3Qgd2FudCB0byByZXdyaXRl
IHJhbmRvbSBieXRlcyB1bmxlc3Mgd2UncmUgc3VyZS4gKERlZmluaXRlbHkgZG9uJ3Qgd2FudCB0
bwotICAgICAgICAgICAgICAgIC8vIHJld3JpdGUgY29va2llcywgZm9yIGluc3RhbmNlLikgTmVl
ZHMgbW9yZSBpbnZlc3RpZ2F0aW9uLgotICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gaXQt
PnNlY29uZDsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWVTdHJpbmcuaXNOdWxsKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gaXQtPnNlY29uZDsKLSAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gaXQtPnNlY29uZDsKLQotICAgICAg
ICAgICAgaGFuZGxlTm90aWZ5SGVhZGVyUmVjZWl2ZWQoa2V5U3RyaW5nLCB2YWx1ZVN0cmluZyk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6bm90aWZ5TXVsdGlwYXJ0
SGVhZGVyUmVjZWl2ZWQoY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSkKLXsKLSAg
ICBpZiAoc2hvdWxkRGVmZXJMb2FkaW5nKCkpCi0gICAgICAgIG1fZGVmZXJyZWREYXRhLmRlZmVy
TXVsdGlwYXJ0SGVhZGVyUmVjZWl2ZWQoa2V5LCB2YWx1ZSk7Ci0gICAgZWxzZQotICAgICAgICBo
YW5kbGVOb3RpZnlNdWx0aXBhcnRIZWFkZXJSZWNlaXZlZChrZXksIHZhbHVlKTsKLX0KLQotdm9p
ZCBOZXR3b3JrSm9iOjpub3RpZnlBdXRoUmVjZWl2ZWQoTmV0d29ya1JlcXVlc3Q6OkF1dGhUeXBl
IGF1dGhUeXBlLCBOZXR3b3JrUmVxdWVzdDo6QXV0aFByb3RvY29sIGF1dGhQcm90b2NvbCwgTmV0
d29ya1JlcXVlc3Q6OkF1dGhTY2hlbWUgYXV0aFNjaGVtZSwgY29uc3QgY2hhciogcmVhbG0sIEF1
dGhSZXN1bHQgcmVzdWx0KQotewotICAgIFByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGUgc2VydmVy
VHlwZTsKLSAgICBzd2l0Y2ggKGF1dGhUeXBlKSB7Ci0gICAgY2FzZSBOZXR3b3JrUmVxdWVzdDo6
QXV0aFR5cGVIb3N0OgotICAgICAgICBzd2l0Y2ggKGF1dGhQcm90b2NvbCkgewotICAgICAgICBj
YXNlIE5ldHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2xIVFRQOgotICAgICAgICAgICAgc2VydmVy
VHlwZSA9IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFA7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBOZXR3b3JrUmVxdWVzdDo6QXV0aFByb3RvY29sSFRUUFM6Ci0gICAgICAgICAg
ICBzZXJ2ZXJUeXBlID0gUHJvdGVjdGlvblNwYWNlU2VydmVySFRUUFM7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBOZXR3b3JrUmVxdWVzdDo6QXV0aFByb3RvY29sRlRQOgotICAg
ICAgICAgICAgc2VydmVyVHlwZSA9IFByb3RlY3Rpb25TcGFjZVNlcnZlckZUUDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5ldHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2xGVFBT
OgotICAgICAgICAgICAgc2VydmVyVHlwZSA9IFByb3RlY3Rpb25TcGFjZVNlcnZlckZUUFM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgTmV0d29ya1JlcXVlc3Q6OkF1dGhUeXBlUHJveHk6Ci0gICAgICAgIHN3
aXRjaCAoYXV0aFByb3RvY29sKSB7Ci0gICAgICAgIGNhc2UgTmV0d29ya1JlcXVlc3Q6OkF1dGhQ
cm90b2NvbEhUVFA6Ci0gICAgICAgICAgICBzZXJ2ZXJUeXBlID0gUHJvdGVjdGlvblNwYWNlUHJv
eHlIVFRQOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTmV0d29ya1JlcXVlc3Q6
OkF1dGhQcm90b2NvbEhUVFBTOgotICAgICAgICAgICAgc2VydmVyVHlwZSA9IFByb3RlY3Rpb25T
cGFjZVByb3h5SFRUUFM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOZXR3b3Jr
UmVxdWVzdDo6QXV0aFByb3RvY29sRlRQOgotICAgICAgICBjYXNlIE5ldHdvcmtSZXF1ZXN0OjpB
dXRoUHJvdG9jb2xGVFBTOgotICAgICAgICAgICAgc2VydmVyVHlwZSA9IFByb3RlY3Rpb25TcGFj
ZVByb3h5RlRQOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFByb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lIHNjaGVtZTsKLSAgICBzd2l0Y2ggKGF1dGhTY2hlbWUpIHsKLSAgICBj
YXNlIE5ldHdvcmtSZXF1ZXN0OjpBdXRoU2NoZW1lRGVmYXVsdDoKLSAgICAgICAgc2NoZW1lID0g
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVEZWZhdWx0OwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE5ldHdvcmtSZXF1ZXN0OjpBdXRoU2NoZW1lSFRUUEJhc2ljOgotICAgICAg
ICBzY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBCYXNpYzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOZXR3b3JrUmVxdWVzdDo6QXV0aFNjaGVtZUhUVFBE
aWdlc3Q6Ci0gICAgICAgIHNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2No
ZW1lSFRUUERpZ2VzdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOZXR3b3JrUmVxdWVzdDo6
QXV0aFNjaGVtZU5lZ290aWF0ZToKLSAgICAgICAgc2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0
aGVudGljYXRpb25TY2hlbWVOZWdvdGlhdGU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTmV0
d29ya1JlcXVlc3Q6OkF1dGhTY2hlbWVOVExNOgotICAgICAgICBzY2hlbWUgPSBQcm90ZWN0aW9u
U3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU5UTE07Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gT24gc3VjY2VzcywgdXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscyBpZiBuZWNl
c3NhcnkKLSAgICAvLyBPbiBmYWlsdXJlLCBwdXJnZSBjcmVkZW50aWFscyBhbmQgc2VuZCBuZXcg
cmVxdWVzdAotICAgIC8vIE9uIHJldHJ5LCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxzIGlmIG5l
Y2Vzc2FyeSBhbmQgc2VuZCBuZXcgcmVxdWVzdAotICAgIGlmIChyZXN1bHQgPT0gQXV0aFJlc3Vs
dEZhaWx1cmUpCi0gICAgICAgIHB1cmdlQ3JlZGVudGlhbHMoKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgLy8gVXBkYXRlIHRoZSBjcmVkZW50aWFscyB0aGF0IHdpbGwgYmUgc3RvcmVkIHRvIG1hdGNo
IHRoZSBzY2hlbWUgdGhhdCB3YXMgYWN0dWFsbHkgdXNlZAotICAgICAgICBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYgY2hhbGxlbmdlID0gYXV0aFR5cGUgPT0gTmV0d29ya1JlcXVlc3Q6OkF1dGhU
eXBlUHJveHkgPyBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9wcm94eVdlYkNoYWxsZW5nZSA6
IG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX2hvc3RXZWJDaGFsbGVuZ2U7Ci0gICAgICAgIGlm
IChjaGFsbGVuZ2UuaGFzQ3JlZGVudGlhbHMoKSkgewotICAgICAgICAgICAgY29uc3QgUHJvdGVj
dGlvblNwYWNlJiBvbGRTcGFjZSA9IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKTsKLSAgICAg
ICAgICAgIGlmIChvbGRTcGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpICE9IHNjaGVtZSAmJiBv
bGRTcGFjZS5zZXJ2ZXJUeXBlKCkgPT0gc2VydmVyVHlwZSkgewotICAgICAgICAgICAgICAgIFBy
b3RlY3Rpb25TcGFjZSBuZXdTcGFjZShvbGRTcGFjZS5ob3N0KCksIG9sZFNwYWNlLnBvcnQoKSwg
b2xkU3BhY2Uuc2VydmVyVHlwZSgpLCBvbGRTcGFjZS5yZWFsbSgpLCBzY2hlbWUpOwotICAgICAg
ICAgICAgICAgIHVwZGF0ZUN1cnJlbnRXZWJDaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UobmV3U3BhY2UsIGNoYWxsZW5nZS5wcm9wb3NlZENyZWRlbnRpYWwoKSwgY2hhbGxlbmdlLnBy
ZXZpb3VzRmFpbHVyZUNvdW50KCksIGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKSwgY2hhbGxl
bmdlLmVycm9yKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzdG9yZUNy
ZWRlbnRpYWxzKCk7Ci0gICAgfQotICAgIGlmIChyZXN1bHQgIT0gQXV0aFJlc3VsdFN1Y2Nlc3Mp
IHsKLSAgICAgICAgc3dpdGNoIChzZW5kUmVxdWVzdFdpdGhDcmVkZW50aWFscyhzZXJ2ZXJUeXBl
LCBzY2hlbWUsIHJlYWxtLCByZXN1bHQgIT0gQXV0aFJlc3VsdFJldHJ5KSkgewotICAgICAgICBj
YXNlIFNlbmRSZXF1ZXN0U3VjY2VlZGVkOgotICAgICAgICAgICAgbV9uZXdKb2JXaXRoQ3JlZGVu
dGlhbHNTdGFydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNl
bmRSZXF1ZXN0Q2FuY2VsbGVkOgotICAgICAgICAgICAgc3RyZWFtRmFpbGVkVG9HZXRDcmVkZW50
aWFscyhhdXRoVHlwZSwgYXV0aFByb3RvY29sLCBhdXRoU2NoZW1lKTsKLSAgICAgICAgICAgIC8v
IGZhbGwgdGhyb3VnaAotICAgICAgICBjYXNlIFNlbmRSZXF1ZXN0V2FpdGluZzoKLSAgICAgICAg
ICAgIG1fbmV3Sm9iV2l0aENyZWRlbnRpYWxzU3RhcnRlZCA9IGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6bm90aWZ5U3Ry
aW5nSGVhZGVyUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgaWYgKHNob3VsZERlZmVyTG9hZGluZygpKQotICAgICAgICBtX2RlZmVycmVkRGF0
YS5kZWZlckhlYWRlclJlY2VpdmVkKGtleSwgdmFsdWUpOwotICAgIGVsc2UKLSAgICAgICAgaGFu
ZGxlTm90aWZ5SGVhZGVyUmVjZWl2ZWQoa2V5LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgTmV0d29ya0pv
Yjo6aGFuZGxlTm90aWZ5SGVhZGVyUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIG1lc3NhZ2VzIG91dCBvZiBvcmRlciBv
ciBhZnRlciBjYW5jZWwuCi0gICAgaWYgKCFtX3N0YXR1c1JlY2VpdmVkIHx8IG1fcmVzcG9uc2VT
ZW50IHx8IG1fY2FuY2VsbGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgbG93ZXJL
ZXkgPSBrZXkubG93ZXIoKTsKLSAgICBpZiAobG93ZXJLZXkgPT0gImNvbnRlbnQtdHlwZSIpCi0g
ICAgICAgIG1fY29udGVudFR5cGUgPSB2YWx1ZS5sb3dlcigpOwotICAgIGVsc2UgaWYgKGxvd2Vy
S2V5ID09ICJjb250ZW50LWRpc3Bvc2l0aW9uIikKLSAgICAgICAgbV9jb250ZW50RGlzcG9zaXRp
b24gPSB2YWx1ZTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShrZXksIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6SEVBREVSX0JMQUNLQkVSUllfRlRQKSkKLSAg
ICAgICAgaGFuZGxlRlRQSGVhZGVyKHZhbHVlKTsKLQotICAgIGlmIChtX3Jlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZHMoKS5jb250YWlucyhrZXkudXRmOCgpLmRhdGEoKSkgJiYgaXNBcHBlbmRhYmxl
SGVhZGVyKGxvd2VyS2V5KSkgewotICAgICAgICAvLyBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBoZWFk
ZXJzIHdpdGggc2FtZSBrZXksIHdlIHNob3VsZCBjb21iaW5lIHRoZSBmb2xsb3dpbmcgb25lcyB3
aXRoIHRoZSBmaXJzdC4KLSAgICAgICAgbV9yZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoa2V5
LCBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChrZXkpICsgIiwgIiArIHZhbHVlKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgbV9yZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoa2V5LCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6aGFuZGxlTm90aWZ5TXVsdGlwYXJ0SGVhZGVyUmVjZWl2
ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKCFt
X211bHRpcGFydFJlc3BvbnNlKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIG5ldyByZXNwb25zZSBi
YXNlZCBvbiB0aGUgb3JpZ2luYWwgc2V0IG9mIGhlYWRlcnMgKyB0aGUKLSAgICAgICAgLy8gcmVw
bGFjZW1lbnQgaGVhZGVycy4gV2Ugb25seSByZXBsYWNlIHRoZSBzYW1lIGZldyBoZWFkZXJzIHRo
YXQgZ2Vja28KLSAgICAgICAgLy8gZG9lcy4gU2VlIG5ldHdlcmsvc3RyZWFtY29udi9jb252ZXJ0
ZXJzL25zTXVsdGlNaXhlZENvbnYuY3BwLgotICAgICAgICBtX211bHRpcGFydFJlc3BvbnNlID0g
YWRvcHRQdHIobmV3IFJlc291cmNlUmVzcG9uc2UpOwotICAgICAgICBtX211bHRpcGFydFJlc3Bv
bnNlLT5zZXRVUkwobV9yZXNwb25zZS51cmwoKSk7Ci0KLSAgICAgICAgLy8gVGhlIGxpc3Qgb2Yg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OnJlcGxhY2VIZWFkZXJzIHRoYXQgd2UgZG8gbm90IGNvcHkg
ZnJvbSB0aGUgb3JpZ2luYWwKLSAgICAgICAgLy8gcmVzcG9uc2Ugd2hlbiBnZW5lcmF0aW5nIGEg
cmVzcG9uc2UuCi0gICAgICAgIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIG1hcCA9IG1f
cmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpOwotCi0gICAgICAgIGZvciAoV2ViQ29yZTo6SFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gbWFwLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBib29sIG5lZWRzQ29weWZyb21PcmlnaW5hbFJlc3Bv
bnNlID0gdHJ1ZTsKLSAgICAgICAgICAgIGludCByZXBsYWNlSGVhZGVyc0luZGV4ID0gMDsKLSAg
ICAgICAgICAgIHdoaWxlIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TXVsdGlwYXJ0U3RyZWFtOjpy
ZXBsYWNlSGVhZGVyc1tyZXBsYWNlSGVhZGVyc0luZGV4XSkgewotICAgICAgICAgICAgICAgIGlm
IChpdC0+a2V5Lmxvd2VyKCkgPT0gQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok11bHRpcGFydFN0cmVh
bTo6cmVwbGFjZUhlYWRlcnNbcmVwbGFjZUhlYWRlcnNJbmRleF0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgbmVlZHNDb3B5ZnJvbU9yaWdpbmFsUmVzcG9uc2UgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlcGxh
Y2VIZWFkZXJzSW5kZXgrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuZWVkc0Nv
cHlmcm9tT3JpZ2luYWxSZXNwb25zZSkKLSAgICAgICAgICAgICAgICBtX211bHRpcGFydFJlc3Bv
bnNlLT5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1fbXVsdGlwYXJ0UmVzcG9uc2UtPnNldElzTXVsdGlwYXJ0UGF5bG9hZCh0cnVl
KTsKLSAgICB9Ci0KLSAgICBpZiAoa2V5Lmxvd2VyKCkgPT0gImNvbnRlbnQtdHlwZSIpIHsKLSAg
ICAgICAgU3RyaW5nIGNvbnRlbnRUeXBlID0gdmFsdWUubG93ZXIoKTsKLSAgICAgICAgbV9tdWx0
aXBhcnRSZXNwb25zZS0+c2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShj
b250ZW50VHlwZSkpOwotICAgICAgICBtX211bHRpcGFydFJlc3BvbnNlLT5zZXRUZXh0RW5jb2Rp
bmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSkpOwotICAgIH0K
LSAgICBtX211bHRpcGFydFJlc3BvbnNlLT5zZXRIVFRQSGVhZGVyRmllbGQoa2V5LCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6aGFuZGxlU2V0Q29va2llSGVhZGVyKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgVVJMIHVybCA9IG1fcmVzcG9uc2UudXJsKCk7Ci0gICAgQ29va2ll
TWFuYWdlciYgbWFuYWdlciA9IGNvb2tpZU1hbmFnZXIoKTsKLSAgICBpZiAoKG1hbmFnZXIuY29v
a2llUG9saWN5KCkgPT0gQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3Vt
ZW50RG9tYWluKQotICAgICAgICAmJiAobV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmZpcnN0UGFy
dHlGb3JDb29raWVzKCkgIT0gdXJsKQotICAgICAgICAmJiBtYW5hZ2VyLmdldENvb2tpZSh1cmws
IFdpdGhIdHRwT25seUNvb2tpZXMpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1h
bmFnZXIuc2V0Q29va2llcyh1cmwsIHZhbHVlKTsKLX0KLQotdm9pZCBOZXR3b3JrSm9iOjpub3Rp
ZnlEYXRhUmVjZWl2ZWRQbGFpbihjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCi17Ci0gICAg
aWYgKHNob3VsZERlZmVyTG9hZGluZygpKQotICAgICAgICBtX2RlZmVycmVkRGF0YS5kZWZlckRh
dGFSZWNlaXZlZChidWYsIGxlbik7Ci0gICAgZWxzZQotICAgICAgICBoYW5kbGVOb3RpZnlEYXRh
UmVjZWl2ZWQoYnVmLCBsZW4pOwotfQotCi12b2lkIE5ldHdvcmtKb2I6OmhhbmRsZU5vdGlmeURh
dGFSZWNlaXZlZChjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCi17Ci0gICAgLy8gQ2hlY2sg
Zm9yIG1lc3NhZ2VzIG91dCBvZiBvcmRlciBvciBhZnRlciBjYW5jZWwuCi0gICAgaWYgKCghbV9p
c0ZpbGUgJiYgIW1fc3RhdHVzUmVjZWl2ZWQpIHx8IG1fY2FuY2VsbGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIWJ1ZiB8fCAhbGVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBU
aGUgbG9hZEZpbGUgQVBJIHNldHMgdGhlIG92ZXJyaWRlIGNvbnRlbnQgdHlwZSwKLSAgICAvLyB0
aGlzIHdpbGwgYWx3YXlzIGJlIHVzZWQgYXMgdGhlIGNvbnRlbnQgdHlwZSBhbmQgc2hvdWxkIG5v
dCBiZSBvdmVycmlkZGVuLgotICAgIGlmICghbV9kYXRhUmVjZWl2ZWQgJiYgIW1faXNPdmVycmlk
ZUNvbnRlbnRUeXBlKSB7Ci0gICAgICAgIGJvb2wgc2hvdWxkU25pZmYgPSB0cnVlOwotCi0gICAg
ICAgIC8vIERvbid0IGJvdGhlciBzbmlmZmluZyB0aGUgY29udGVudCB0eXBlIG9mIGEgZmlsZSB0
aGF0Ci0gICAgICAgIC8vIGlzIG9uIGEgZmlsZSBzeXN0ZW0gaWYgaXQgaGFzIGEgTUlNRSBtYXBw
YWJsZSBmaWxlIGV4dGVuc2lvbi4KLSAgICAgICAgLy8gVGhlIGZpbGUgZXh0ZW5zaW9uIGlzIGxp
a2VseSB0byBiZSBjb3JyZWN0LgotICAgICAgICBpZiAobV9pc0ZpbGUpIHsKLSAgICAgICAgICAg
IFN0cmluZyB1cmxGaWxlbmFtZSA9IG1fcmVzcG9uc2UudXJsKCkubGFzdFBhdGhDb21wb25lbnQo
KTsKLSAgICAgICAgICAgIHNpemVfdCBwb3MgPSB1cmxGaWxlbmFtZS5yZXZlcnNlRmluZCgnLicp
OwotICAgICAgICAgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAgICAgIFN0
cmluZyBleHRlbnNpb24gPSB1cmxGaWxlbmFtZS5zdWJzdHJpbmcocG9zICsgMSk7Ci0gICAgICAg
ICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVG
b3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1pbWVUeXBlLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgc2hvdWxkU25pZmYgPSBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzaG91bGRTbmlmZikgewotICAgICAg
ICAgICAgTUlNRVNuaWZmZXIgc25pZmZlciA9IE1JTUVTbmlmZmVyKG1fY29udGVudFR5cGUubGF0
aW4xKCkuZGF0YSgpLCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VN
SU1FVHlwZShtX2NvbnRlbnRUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoY29uc3QgY2hhciogdHlw
ZSA9IHNuaWZmZXIuc25pZmYoYnVmLCBzdGQ6Om1pbihsZW4sIHNuaWZmZXIuZGF0YVNpemUoKSkp
KQotICAgICAgICAgICAgICAgIG1fc25pZmZlZE1pbWVUeXBlID0gU3RyaW5nKHR5cGUpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgbV9kYXRhUmVjZWl2ZWQgPSB0cnVlOwotCi0gICAgLy8gUHJv
dGVjdCBhZ2FpbnN0IHJlZW50cmFuY3kuCi0gICAgdXBkYXRlRGVmZXJMb2FkaW5nQ291bnQoMSk7
Ci0KLSAgICBpZiAoc2hvdWxkU2VuZENsaWVudERhdGEoKSkgewotICAgICAgICBzZW5kUmVzcG9u
c2VJZk5lZWRlZCgpOwotICAgICAgICBzZW5kTXVsdGlwYXJ0UmVzcG9uc2VJZk5lZWRlZCgpOwot
ICAgICAgICBpZiAoaXNDbGllbnRBdmFpbGFibGUoKSkgewotICAgICAgICAgICAgUmVjdXJzaW9u
R3VhcmQgZ3VhcmQobV9jYWxsaW5nQ2xpZW50KTsKLSAgICAgICAgICAgIG1faGFuZGxlLT5jbGll
bnQoKS0+ZGlkUmVjZWl2ZURhdGEobV9oYW5kbGUuZ2V0KCksIGJ1ZiwgbGVuLCBsZW4pOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgdXBkYXRlRGVmZXJMb2FkaW5nQ291bnQoLTEpOwotfQotCi12
b2lkIE5ldHdvcmtKb2I6Om5vdGlmeURhdGFTZW50KHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1Nl
bnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCi17Ci0gICAgaWYgKHNo
b3VsZERlZmVyTG9hZGluZygpKQotICAgICAgICBtX2RlZmVycmVkRGF0YS5kZWZlckRhdGFTZW50
KGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKLSAgICBlbHNlCi0gICAgICAgIGhhbmRs
ZU5vdGlmeURhdGFTZW50KGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKLX0KLQotdm9p
ZCBOZXR3b3JrSm9iOjpoYW5kbGVOb3RpZnlEYXRhU2VudCh1bnNpZ25lZCBsb25nIGxvbmcgYnl0
ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQotewotICAgIGlm
IChtX2NhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUHJvdGVjdCBhZ2FpbnN0
IHJlZW50cmFuY3kuCi0gICAgdXBkYXRlRGVmZXJMb2FkaW5nQ291bnQoMSk7Ci0KLSAgICBpZiAo
aXNDbGllbnRBdmFpbGFibGUoKSkgewotICAgICAgICBSZWN1cnNpb25HdWFyZCBndWFyZChtX2Nh
bGxpbmdDbGllbnQpOwotICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFNlbmREYXRhKG1f
aGFuZGxlLmdldCgpLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Ci0gICAgfQotCi0g
ICAgdXBkYXRlRGVmZXJMb2FkaW5nQ291bnQoLTEpOwotfQotCi12b2lkIE5ldHdvcmtKb2I6Om5v
dGlmeUNsb3NlKGludCBzdGF0dXMpCi17Ci0gICAgaWYgKHNob3VsZERlZmVyTG9hZGluZygpKQot
ICAgICAgICBtX2RlZmVycmVkRGF0YS5kZWZlckNsb3NlKHN0YXR1cyk7Ci0gICAgZWxzZQotICAg
ICAgICBoYW5kbGVOb3RpZnlDbG9zZShzdGF0dXMpOwotfQotCi12b2lkIE5ldHdvcmtKb2I6Omhh
bmRsZU5vdGlmeUNsb3NlKGludCBzdGF0dXMpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1faXNS
dW5uaW5nID0gZmFsc2U7Ci0jZW5kaWYKLQotICAgIGlmICghbV9jYW5jZWxsZWQpIHsKLSAgICAg
ICAgaWYgKCFtX3N0YXR1c1JlY2VpdmVkKSB7Ci0gICAgICAgICAgICAvLyBDb25uZWN0aW9uIGZh
aWxlZCBiZWZvcmUgc2VuZGluZyBub3RpZnlTdGF0dXNSZWNlaXZlZDogdXNlIGdlbmVyaWMgTmV0
d29ya0Vycm9yLgotICAgICAgICAgICAgbm90aWZ5U3RhdHVzUmVjZWl2ZWQoQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkZpbHRlclN0cmVhbTo6U3RhdHVzTmV0d29ya0Vycm9yLCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChzaG91bGRSZWxlYXNlQ2xpZW50UmVzb3VyY2UoKSkgewotICAgICAgICAgICAgaWYgKGlzUmVk
aXJlY3QobV9leHRlbmRlZFN0YXR1c0NvZGUpICYmIChtX3JlZGlyZWN0Q291bnQgPj0gc19yZWRp
cmVjdE1heGltdW0pKQotICAgICAgICAgICAgICAgIG1fZXh0ZW5kZWRTdGF0dXNDb2RlID0gQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbTo6U3RhdHVzVG9vTWFueVJlZGlyZWN0czsK
LQotICAgICAgICAgICAgc2VuZFJlc3BvbnNlSWZOZWVkZWQoKTsKLQotICAgICAgICAgICAgaWYg
KGlzQ2xpZW50QXZhaWxhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNFcnJvcihzdGF0
dXMpKQotICAgICAgICAgICAgICAgICAgICBtX2V4dGVuZGVkU3RhdHVzQ29kZSA9IHN0YXR1czsK
LSAgICAgICAgICAgICAgICBSZWN1cnNpb25HdWFyZCBndWFyZChtX2NhbGxpbmdDbGllbnQpOwot
ICAgICAgICAgICAgICAgIGlmIChzaG91bGROb3RpZnlDbGllbnRGYWlsZWQoKSkgewotICAgICAg
ICAgICAgICAgICAgICBTdHJpbmcgZG9tYWluID0gbV9leHRlbmRlZFN0YXR1c0NvZGUgPCAwID8g
UmVzb3VyY2VFcnJvcjo6cGxhdGZvcm1FcnJvckRvbWFpbiA6IFJlc291cmNlRXJyb3I6Omh0dHBF
cnJvckRvbWFpbjsKLSAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcihkb21h
aW4sIG1fZXh0ZW5kZWRTdGF0dXNDb2RlLCBtX3Jlc3BvbnNlLnVybCgpLnN0cmluZygpLCBtX3Jl
c3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpOwotICAgICAgICAgICAgICAgICAgICBtX2hhbmRsZS0+
Y2xpZW50KCktPmRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGVycm9yKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGaW5p
c2hMb2FkaW5nKG1faGFuZGxlLmdldCgpLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIFdob2V2ZXIgY2FsbGVkIG5vdGlmeUNsb3NlIHN0aWxsIGhhdmUgYSBy
ZWZlcmVuY2UgdG8gdGhlIGpvYiwgc28KLSAgICAvLyBzY2hlZHVsZSB0aGUgZGVsZXRpb24gd2l0
aCBhIHRpbWVyLgotICAgIG1fZGVsZXRlSm9iVGltZXIuc3RhcnRPbmVTaG90KDApOwotCi0gICAg
Ly8gRGV0YWNoIGZyb20gdGhlIFJlc291cmNlSGFuZGxlIGluIGFueSBjYXNlLgotICAgIG1faGFu
ZGxlID0gMDsKLSAgICBtX211bHRpcGFydFJlc3BvbnNlID0gbnVsbHB0cjsKLX0KLQotYm9vbCBO
ZXR3b3JrSm9iOjpzaG91bGRSZWxlYXNlQ2xpZW50UmVzb3VyY2UoKQotewotICAgIGlmICgobV9u
ZWVkc1JldHJ5QXNGVFBEaXJlY3RvcnkgJiYgcmV0cnlBc0ZUUERpcmVjdG9yeSgpKSB8fCAoaXNS
ZWRpcmVjdChtX2V4dGVuZGVkU3RhdHVzQ29kZSkgJiYgaGFuZGxlUmVkaXJlY3QoKSkgfHwgbV9u
ZXdKb2JXaXRoQ3JlZGVudGlhbHNTdGFydGVkIHx8IG1faXNBdXRoZW50aWNhdGlvbkNoYWxsZW5n
aW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
TmV0d29ya0pvYjo6c2hvdWxkTm90aWZ5Q2xpZW50RmFpbGVkKCkgY29uc3QKLXsKLSAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdCA9IG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKTsKLSAgICBpZiAo
cmVxdWVzdC5mb3JjZURvd25sb2FkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
bV9leHRlbmRlZFN0YXR1c0NvZGUgPCAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAo
aXNFcnJvcihtX2V4dGVuZGVkU3RhdHVzQ29kZSkgJiYgIW1fZGF0YVJlY2VpdmVkICYmICFtX2lz
SGVhZE1ldGhvZCAmJiByZXF1ZXN0LnRhcmdldFR5cGUoKSAhPSBSZXNvdXJjZVJlcXVlc3Q6OlRh
cmdldElzWEhSKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBOZXR3b3JrSm9iOjpyZXRyeUFzRlRQRGlyZWN0b3J5KCkKLXsKLSAgICBtX25lZWRz
UmV0cnlBc0ZUUERpcmVjdG9yeSA9IGZhbHNlOwotCi0gICAgQVNTRVJUKG1faGFuZGxlKTsKLSAg
ICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9IG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKTsK
LSAgICBVUkwgdXJsID0gbmV3UmVxdWVzdC51cmwoKTsKLSAgICB1cmwuc2V0UGF0aCh1cmwucGF0
aCgpICsgIi8iKTsKLSAgICBuZXdSZXF1ZXN0LnNldFVSTCh1cmwpOwotICAgIG5ld1JlcXVlc3Qu
c2V0TXVzdEhhbmRsZUludGVybmFsbHkodHJ1ZSk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIFVJLgot
ICAgIGhhbmRsZU5vdGlmeUhlYWRlclJlY2VpdmVkKCJMb2NhdGlvbiIsIHVybC5zdHJpbmcoKSk7
Ci0KLSAgICByZXR1cm4gc3RhcnROZXdKb2JXaXRoUmVxdWVzdChuZXdSZXF1ZXN0KTsKLX0KLQot
Ym9vbCBOZXR3b3JrSm9iOjpzdGFydE5ld0pvYldpdGhSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYg
bmV3UmVxdWVzdCwgYm9vbCBpbmNyZWFzZVJlZGlyZWN0Q291bnQsIGJvb2wgcmVyZWFkQ29va2ll
cykKLXsKLSAgICAvLyBtX2ZyYW1lIGNhbiBiZSBudWxsIGlmIHRoaXMgaXMgYSBQaW5nTG9hZGVy
IGpvYiAoU2VlIE5ldHdvcmtKb2I6OmluaXRpYWxpemUpLgotICAgIC8vIEluIHRoaXMgY2FzZSB3
ZSBkb24ndCBzdGFydCBuZXcgcmVxdWVzdC4KLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChpc0NsaWVudEF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIFJl
Y3Vyc2lvbkd1YXJkIGd1YXJkKG1fY2FsbGluZ0NsaWVudCk7Ci0gICAgICAgIG1faGFuZGxlLT5j
bGllbnQoKS0+d2lsbFNlbmRSZXF1ZXN0KG1faGFuZGxlLmdldCgpLCBuZXdSZXF1ZXN0LCBtX3Jl
c3BvbnNlKTsKLQotICAgICAgICAvLyBtX2NhbmNlbGxlZCBjYW4gYmVjb21lIHRydWUgaWYgdGhl
IHVybCBmYWlscyB0aGUgcG9saWN5IGNoZWNrLgotICAgICAgICAvLyBuZXdSZXF1ZXN0IGNhbiBi
ZSBjbGVhcmVkIHdoZW4gdGhlIHJlZGlyZWN0IGlzIHJlamVjdGVkLgotICAgICAgICBpZiAobV9j
YW5jZWxsZWQgfHwgbmV3UmVxdWVzdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gUGFzcyB0aGUgb3duZXJzaGlwIG9mIHRoZSBSZXNvdXJjZUhh
bmRsZSB0byB0aGUgbmV3IE5ldHdvcmtKb2IuCi0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBo
YW5kbGUgPSBtX2hhbmRsZTsKLSAgICBjYW5jZWxKb2IoKTsKLQotICAgIGludCBzdGF0dXMgPSBO
ZXR3b3JrTWFuYWdlcjo6aW5zdGFuY2UoKS0+c3RhcnRKb2IobV9wbGF5ZXJJZCwKLSAgICAgICAg
bV9wYWdlR3JvdXBOYW1lLAotICAgICAgICBoYW5kbGUsCi0gICAgICAgIG5ld1JlcXVlc3QsCi0g
ICAgICAgIG1fc3RyZWFtRmFjdG9yeSwKLSAgICAgICAgbV9mcmFtZSwKLSAgICAgICAgbV9kZWZl
ckxvYWRpbmdDb3VudCwKLSAgICAgICAgaW5jcmVhc2VSZWRpcmVjdENvdW50ID8gbV9yZWRpcmVj
dENvdW50ICsgMSA6IG1fcmVkaXJlY3RDb3VudCwKLSAgICAgICAgcmVyZWFkQ29va2llcyk7Ci0g
ICAgcmV0dXJuIHN0YXR1cyA9PSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtOjpT
dGF0dXNTdWNjZXNzOwotfQotCi1ib29sIE5ldHdvcmtKb2I6OmhhbmRsZVJlZGlyZWN0KCkKLXsK
LSAgICBBU1NFUlQobV9oYW5kbGUpOwotICAgIGlmICghbV9oYW5kbGUgfHwgbV9yZWRpcmVjdENv
dW50ID49IHNfcmVkaXJlY3RNYXhpbXVtKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBT
dHJpbmcgbG9jYXRpb24gPSBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiTG9jYXRpb24iKTsK
LSAgICBpZiAobG9jYXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFVSTCBuZXdVUkwobV9yZXNwb25zZS51cmwoKSwgbG9jYXRpb24pOwotICAgIGlmICghbmV3VVJM
LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG5ld1VSTC5wcm90
b2NvbElzRGF0YSgpKSB7Ci0gICAgICAgIG1fZXh0ZW5kZWRTdGF0dXNDb2RlID0gQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbTo6U3RhdHVzSW52YWxpZFJlZGlyZWN0VG9EYXRhOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1Jl
cXVlc3QgPSBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCk7Ci0gICAgbmV3UmVxdWVzdC5zZXRVUkwo
bmV3VVJMKTsKLSAgICBuZXdSZXF1ZXN0LnNldE11c3RIYW5kbGVJbnRlcm5hbGx5KHRydWUpOwot
Ci0gICAgU3RyaW5nIG1ldGhvZCA9IG5ld1JlcXVlc3QuaHR0cE1ldGhvZCgpLnVwcGVyKCk7Ci0g
ICAgaWYgKG1ldGhvZCAhPSAiR0VUIiAmJiBtZXRob2QgIT0gIkhFQUQiKSB7Ci0gICAgICAgIG5l
d1JlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgICAgIG5ld1JlcXVlc3Quc2V0SFRU
UEJvZHkoMCk7Ci0gICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQQ29udGVudExlbmd0aCgpOwot
ICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUENvbnRlbnRUeXBlKCk7Ci0gICAgfQotCi0gICAg
Ly8gSWYgdGhpcyByZXF1ZXN0IGlzIGNoYWxsZW5nZWQsIHN0b3JlIHRoZSBjcmVkZW50aWFscyBu
b3cgKGlmIHRoZXkgYXJlIG51bGwgdGhpcyB3aWxsIGRvIG5vdGhpbmcpCi0gICAgc3RvcmVDcmVk
ZW50aWFscygpOwotCi0gICAgLy8gRG8gbm90IHNlbmQgZXhpc3RpbmcgY3JlZGVudGlhbHMgd2l0
aCB0aGUgbmV3IHJlcXVlc3QuCi0gICAgbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fY3VycmVu
dFdlYkNoYWxsZW5nZS5udWxsaWZ5KCk7Ci0gICAgbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1f
cHJveHlXZWJDaGFsbGVuZ2UubnVsbGlmeSgpOwotICAgIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgp
LT5tX2hvc3RXZWJDaGFsbGVuZ2UubnVsbGlmeSgpOwotCi0gICAgcmV0dXJuIHN0YXJ0TmV3Sm9i
V2l0aFJlcXVlc3QobmV3UmVxdWVzdCwgLyogaW5jcmVhc2VSZWRpcmVjdENvdW50ICovIHRydWUs
IC8qIHJlcmVhZENvb2tpZXMgKi8gdHJ1ZSk7Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6c2VuZFJl
c3BvbnNlSWZOZWVkZWQoKQotewotICAgIGlmIChtX3Jlc3BvbnNlU2VudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9yZXNwb25zZVNlbnQgPSB0cnVlOwotCi0gICAgaWYgKHNob3VsZE5vdGlm
eUNsaWVudEZhaWxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgdXJsRmlsZW5h
bWU7Ci0gICAgaWYgKCFtX3Jlc3BvbnNlLnVybCgpLnByb3RvY29sSXNEYXRhKCkpCi0gICAgICAg
IHVybEZpbGVuYW1lID0gbV9yZXNwb25zZS51cmwoKS5sYXN0UGF0aENvbXBvbmVudCgpOwotCi0g
ICAgLy8gR2V0IHRoZSBNSU1FIHR5cGUgdGhhdCB3YXMgc2V0IGJ5IHRoZSBjb250ZW50IHNuaWZm
ZXIKLSAgICAvLyBpZiB0aGVyZSdzIG5vIGN1c3RvbSBzbmlmZmVyIGhlYWRlciwgdHJ5IHRvIHNl
dCBpdCBmcm9tIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyCi0gICAgLy8gaWYgdGhpcyBmYWlscywg
Z3Vlc3MgaXQgZnJvbSBleHRlbnNpb24uCi0gICAgU3RyaW5nIG1pbWVUeXBlID0gbV9zbmlmZmVk
TWltZVR5cGU7Ci0gICAgaWYgKG1faXNGVFAgJiYgbV9pc0ZUUERpcikKLSAgICAgICAgbWltZVR5
cGUgPSAiYXBwbGljYXRpb24veC1mdHAtZGlyZWN0b3J5IjsKLSAgICBlbHNlIGlmIChtaW1lVHlw
ZS5pc051bGwoKSkKLSAgICAgICAgbWltZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFU
eXBlKG1fY29udGVudFR5cGUpOwotICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKLSAgICAgICAg
bWltZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgodXJsRmlsZW5h
bWUpOwotICAgIGlmICghbV9kYXRhUmVjZWl2ZWQgJiYgbWltZVR5cGUgPT0gImFwcGxpY2F0aW9u
L29jdGV0LXN0cmVhbSIpIHsKLSAgICAgICAgLy8gRm9yIGVtcHR5IGNvbnRlbnQsIGlmIGNhbid0
IGd1ZXNzIGl0cyBtaW1ldHlwZSBmcm9tIGZpbGVuYW1lLCB3ZSBtYW51YWxseQotICAgICAgICAv
LyBzZXQgdGhlIG1pbWV0eXBlIHRvICJ0ZXh0L3BsYWluIiBpbiBjYXNlIGl0IGdvZXMgdG8gZG93
bmxvYWQuCi0gICAgICAgIG1pbWVUeXBlID0gInRleHQvcGxhaW4iOwotICAgIH0KLSAgICBtX3Jl
c3BvbnNlLnNldE1pbWVUeXBlKG1pbWVUeXBlKTsKLQotICAgIC8vIFNldCBlbmNvZGluZyBmcm9t
IENvbnRlbnQtVHlwZSBoZWFkZXIuCi0gICAgbV9yZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1l
KGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShtX2NvbnRlbnRUeXBlKSk7Ci0KLSAgICAvLyBT
ZXQgY29udGVudCBsZW5ndGggZnJvbSBoZWFkZXIuCi0gICAgU3RyaW5nIGNvbnRlbnRMZW5ndGgg
PSBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1MZW5ndGgiKTsKLSAgICBpZiAo
IWNvbnRlbnRMZW5ndGguaXNOdWxsKCkpCi0gICAgICAgIG1fcmVzcG9uc2Uuc2V0RXhwZWN0ZWRD
b250ZW50TGVuZ3RoKGNvbnRlbnRMZW5ndGgudG9JbnQ2NCgpKTsKLQotICAgIFN0cmluZyBzdWdn
ZXN0ZWRGaWxlbmFtZSA9IGZpbGVuYW1lRnJvbUhUVFBDb250ZW50RGlzcG9zaXRpb24obV9jb250
ZW50RGlzcG9zaXRpb24pOwotICAgIGlmIChzdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgLy8gQ2hlY2sgYW5kIHNlZSBpZiBhbiBleHRlbnNpb24gYWxyZWFkeSBleGlzdHMu
Ci0gICAgICAgIFN0cmluZyBtaW1lRXh0ZW5zaW9uID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJl
ZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUobWltZVR5cGUpOwotICAgICAgICBpZiAodXJsRmls
ZW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAobWltZUV4dGVuc2lvbi5pc0VtcHR5
KCkpIC8vIE5vIGV4dGVuc2lvbiBmb3VuZCBmb3IgdGhlIG1pbWVUeXBlLgotICAgICAgICAgICAg
ICAgIHN1Z2dlc3RlZEZpbGVuYW1lID0gU3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2Nh
bGl6ZVJlc291cmNlOjpnZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZJTEVOQU1FX1VO
VElUTEVEKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3VnZ2VzdGVkRmls
ZW5hbWUgPSBTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvY2FsaXplUmVzb3VyY2U6Omdl
dFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RklMRU5BTUVfVU5USVRMRUQpKSArICIuIiAr
IG1pbWVFeHRlbnNpb247Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodXJsRmls
ZW5hbWUucmV2ZXJzZUZpbmQoJy4nKSA9PSBub3RGb3VuZCAmJiAhbWltZUV4dGVuc2lvbi5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgc3VnZ2VzdGVkRmlsZW5hbWUgPSB1cmxGaWxlbmFtZSAr
ICcuJyArIG1pbWVFeHRlbnNpb247Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
c3VnZ2VzdGVkRmlsZW5hbWUgPSB1cmxGaWxlbmFtZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBt
X3Jlc3BvbnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKTsKLQotICAg
IGlmIChpc0NsaWVudEF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIFJlY3Vyc2lvbkd1YXJkIGd1YXJk
KG1fY2FsbGluZ0NsaWVudCk7Ci0gICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2
ZVJlc3BvbnNlKG1faGFuZGxlLmdldCgpLCBtX3Jlc3BvbnNlKTsKLSAgICB9Ci19Ci0KLXZvaWQg
TmV0d29ya0pvYjo6c2VuZE11bHRpcGFydFJlc3BvbnNlSWZOZWVkZWQoKQotewotICAgIGlmICht
X211bHRpcGFydFJlc3BvbnNlICYmIGlzQ2xpZW50QXZhaWxhYmxlKCkpIHsKLSAgICAgICAgbV9o
YW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UobV9oYW5kbGUuZ2V0KCksICptX211
bHRpcGFydFJlc3BvbnNlKTsKLSAgICAgICAgbV9tdWx0aXBhcnRSZXNwb25zZSA9IG51bGxwdHI7
Ci0gICAgfQotfQotCi1ib29sIE5ldHdvcmtKb2I6OmhhbmRsZUZUUEhlYWRlcihjb25zdCBTdHJp
bmcmIGhlYWRlcikKLXsKLSAgICBzaXplX3Qgc3BhY2VQb3MgPSBoZWFkZXIuZmluZCgnICcpOwot
ICAgIGlmIChzcGFjZVBvcyA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IFN0cmluZyBzdGF0dXNDb2RlID0gaGVhZGVyLmxlZnQoc3BhY2VQb3MpOwotICAgIHN3aXRjaCAo
c3RhdHVzQ29kZS50b0ludCgpKSB7Ci0gICAgY2FzZSAyMTM6Ci0gICAgICAgIG1faXNGVFBEaXIg
PSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA1MzA6Ci0gICAgICAgIHB1cmdlQ3Jl
ZGVudGlhbHMoKTsKLSAgICAgICAgaWYgKG1fcmVzcG9uc2UudXJsKCkucHJvdG9jb2xJcygiZnRw
cyIpKQotICAgICAgICAgICAgc2VuZFJlcXVlc3RXaXRoQ3JlZGVudGlhbHMoUHJvdGVjdGlvblNw
YWNlU2VydmVyRlRQUywgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVEZWZhdWx0
LCAiZnRwIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlbmRSZXF1ZXN0V2l0aENyZWRl
bnRpYWxzKFByb3RlY3Rpb25TcGFjZVNlcnZlckZUUCwgUHJvdGVjdGlvblNwYWNlQXV0aGVudGlj
YXRpb25TY2hlbWVEZWZhdWx0LCAiZnRwIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjMw
OgotICAgICAgICBzdG9yZUNyZWRlbnRpYWxzKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
NTUwOgotICAgICAgICAvLyBUaGUgdXNlciBtaWdodCBoYXZlIGVudGVyZWQgYW4gVVJMIHdoaWNo
IHBvaW50IHRvIGEgZGlyZWN0b3J5IGJ1dCBmb3Jnb3QgdHlwZSAnLycsCi0gICAgICAgIC8vIGUu
Zy4sIGZ0cDovL2Z0cC50cm9sbHRlY2guY29tL3F0L3NvdXJjZSB3aGVyZSAnc291cmNlJyBpcyBh
IGRpcmVjdG9yeS4gV2UgbmVlZCB0bwotICAgICAgICAvLyBhZGRlZCAnLycgYW5kIHRyeSBhZ2Fp
bi4KLSAgICAgICAgaWYgKG1faGFuZGxlICYmICFtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJs
KCkucGF0aCgpLmVuZHNXaXRoKCIvIikpCi0gICAgICAgICAgICBtX25lZWRzUmV0cnlBc0ZUUERp
cmVjdG9yeSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1OZXR3b3JrSm9iOjpTZW5kUmVxdWVzdFJlc3VsdCBOZXR3b3JrSm9iOjpzZW5kUmVx
dWVzdFdpdGhDcmVkZW50aWFscyhQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIHR5cGUsIFByb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIHNjaGVtZSwgY29uc3QgU3RyaW5nJiByZWFs
bSwgYm9vbCByZXF1aXJlQ3JlZGVudGlhbHMpCi17Ci0gICAgQVNTRVJUKG1faGFuZGxlKTsKLSAg
ICBpZiAoIW1faGFuZGxlKQotICAgICAgICByZXR1cm4gU2VuZFJlcXVlc3RDYW5jZWxsZWQ7Ci0K
LSAgICBVUkwgbmV3VVJMID0gbV9yZXNwb25zZS51cmwoKTsKLSAgICBpZiAoIW5ld1VSTC5pc1Zh
bGlkKCkpCi0gICAgICAgIHJldHVybiBTZW5kUmVxdWVzdENhbmNlbGxlZDsKLQotICAgIC8vIElN
UE9SVEFOVDogaWYgYSBuZXcgc291cmNlIG9mIGNyZWRlbnRpYWxzIGlzIGFkZGVkIHRvIHRoaXMg
bWV0aG9kLCBiZSBzdXJlIHRvIGhhbmRsZSBpdCBpbgotICAgIC8vIHB1cmdlQ3JlZGVudGlhbHMg
YXMgd2VsbCEKLQotICAgIFN0cmluZyBob3N0OwotICAgIGludCBwb3J0OwotICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpQcm94eUluZm8gcHJveHlJbmZvOwotICAgIGlmICh0eXBlID09IFByb3Rl
Y3Rpb25TcGFjZVByb3h5SFRUUCB8fCB0eXBlID09IFByb3RlY3Rpb25TcGFjZVByb3h5SFRUUFMp
IHsKLSAgICAgICAgcHJveHlJbmZvID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjpp
bnN0YW5jZSgpLT5wcm94eUluZm8obmV3VVJMLnN0cmluZygpKTsKLSAgICAgICAgQVNTRVJUKCFw
cm94eUluZm8uYWRkcmVzcy5lbXB0eSgpKTsKLSAgICAgICAgaWYgKHByb3h5SW5mby5hZGRyZXNz
LmVtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgcmVzcG9uc2UgdXJs
IGlmIHRoZXJlJ3Mgbm8gcHJveHkKLSAgICAgICAgICAgIC8vIEZJWE1FOiBpcyB0aGlzIHRoZSBi
ZXN0IHdheSB0byBoYW5kbGUgdGhpcz8KLSAgICAgICAgICAgIGhvc3QgPSBtX3Jlc3BvbnNlLnVy
bCgpLmhvc3QoKTsKLSAgICAgICAgICAgIHBvcnQgPSBtX3Jlc3BvbnNlLnVybCgpLnBvcnQoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHByb3h5SW5mbyByZXR1cm5zIGhvc3Q6
cG9ydCwgd2l0aG91dCBhIHByb3RvY29sLiBVUkwgY2FuJ3QgcGFyc2UgdGhpcywgc28gc3RpY2sg
aHR0cAotICAgICAgICAgICAgLy8gb24gdGhlIGZyb250LgotICAgICAgICAgICAgLy8gKFdlIGNv
dWxkIHNwbGl0IGludG8gaG9zdCBhbmQgcG9ydCBieSBoYW5kLCBidXQgdGhhdCBnZXRzIGhhcmQg
dG8gcGFyc2Ugd2l0aCBJUHY2IHVybHMsCi0gICAgICAgICAgICAvLyBzbyBiZXR0ZXIgdG8gcmV1
c2UgVVJMJ3MgcGFyc2luZy4pCi0gICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHByb3h5QWRkcmVz
czsKLSAgICAgICAgICAgIGlmICh0eXBlID09IFByb3RlY3Rpb25TcGFjZVByb3h5SFRUUCkKLSAg
ICAgICAgICAgICAgICBwcm94eUFkZHJlc3MuYXBwZW5kKCJodHRwOi8vIik7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcHJveHlBZGRyZXNzLmFwcGVuZCgiaHR0cHM6Ly8iKTsK
LSAgICAgICAgICAgIHByb3h5QWRkcmVzcy5hcHBlbmQocHJveHlJbmZvLmFkZHJlc3MpOwotCi0g
ICAgICAgICAgICBVUkwgcHJveHlVUkwoVVJMKCksIHByb3h5QWRkcmVzcy50b1N0cmluZygpKTsK
LSAgICAgICAgICAgIGhvc3QgPSBwcm94eVVSTC5ob3N0KCk7Ci0gICAgICAgICAgICBwb3J0ID0g
cHJveHlVUkwucG9ydCgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaG9zdCA9
IG1fcmVzcG9uc2UudXJsKCkuaG9zdCgpOwotICAgICAgICBwb3J0ID0gbV9yZXNwb25zZS51cmwo
KS5wb3J0KCk7Ci0gICAgfQotCi0gICAgUHJvdGVjdGlvblNwYWNlIHByb3RlY3Rpb25TcGFjZSho
b3N0LCBwb3J0LCB0eXBlLCByZWFsbSwgc2NoZW1lKTsKLQotICAgIC8vIFdlJ3ZlIGdvdCB0aGUg
c2NoZW1lIGFuZCByZWFsbS4gTm93IHdlIG5lZWQgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQuCi0g
ICAgQ3JlZGVudGlhbCBjcmVkZW50aWFsOwotCi0gICAgaWYgKCFyZXF1aXJlQ3JlZGVudGlhbHMp
IHsKLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcndyaXRlIGFueSBleGlzdGluZyBjcmVkZW50aWFscyB3
aXRoIHRoZSBlbXB0eSBjcmVkZW50aWFsCi0gICAgICAgIHVwZGF0ZUN1cnJlbnRXZWJDaGFsbGVu
Z2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UocHJvdGVjdGlvblNwYWNlLCBjcmVkZW50aWFsLCAw
LCBtX3Jlc3BvbnNlLCBSZXNvdXJjZUVycm9yKCkpLCAvKiBhbGxvd092ZXJ3cml0ZSAqLyBmYWxz
ZSk7Ci0gICAgfSBlbHNlIGlmICghKGNyZWRlbnRpYWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0
KHByb3RlY3Rpb25TcGFjZSkpLmlzRW1wdHkoKQotI2lmIEVOQUJMRShCTEFDS0JFUlJZX0NSRURF
TlRJQUxfUEVSU0lTVCkKLSAgICAgICAgICAgIHx8ICEoY3JlZGVudGlhbCA9IENyZWRlbnRpYWxT
dG9yYWdlOjpnZXRGcm9tUGVyc2lzdGVudFN0b3JhZ2UocHJvdGVjdGlvblNwYWNlKSkuaXNFbXB0
eSgpCi0jZW5kaWYKLSAgICAgICAgICAgICkgewotICAgICAgICAvLyBGaXJzdCBzZWFyY2ggdGhl
IENyZWRlbnRpYWxTdG9yYWdlIGFuZCBQZXJzaXN0ZW50IENyZWRlbnRpYWwgU3RvcmFnZQotICAg
ICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UocHJvdGVjdGlvblNwYWNlLCBj
cmVkZW50aWFsLCAwLCBtX3Jlc3BvbnNlLCBSZXNvdXJjZUVycm9yKCkpOwotICAgICAgICBjaGFs
bGVuZ2Uuc2V0U3RvcmVkKHRydWUpOwotICAgICAgICB1cGRhdGVDdXJyZW50V2ViQ2hhbGxlbmdl
KGNoYWxsZW5nZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGNyZWRlbnRpYWwuaXNF
bXB0eSgpKTsKLSAgICAgICAgaWYgKG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS50YXJnZXRUeXBl
KCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc0Zhdmljb24pIHsKLSAgICAgICAgICAgIC8v
IFRoZSBmYXZpY29uIGxvYWRpbmcgaXMgdHJpZ2dlcnJlZCBhZnRlciB0aGUgbWFpbiByZXNvdXJj
ZSBoYXMgYmVlbiBsb2FkZWQKLSAgICAgICAgICAgIC8vIGFuZCBwYXJzZWQsIHNvIGlmIHdlIGNh
bmNlbCB0aGUgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIHdoZW4gbG9hZGluZyB0aGUgbWFpbgot
ICAgICAgICAgICAgLy8gcmVzb3VyY2UsIHdlIHNob3VsZCBhbHNvIGNhbmNlbCBsb2FkaW5nIHRo
ZSBmYXZpY29uIHdoZW4gaXQgc3RhcnRzIHRvCi0gICAgICAgICAgICAvLyBsb2FkLiBJZiBub3Qg
d2Ugd2lsbCByZWNlaXZlIGFub3RoZXIgY2hhbGxlbmdlIHdoaWNoIG1heSBjb25mdXNlIHRoZSB1
c2VyLgotICAgICAgICAgICAgcmV0dXJuIFNlbmRSZXF1ZXN0Q2FuY2VsbGVkOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQ3JlZGVudGlhbFN0b3JlIGlzIGVtcHR5LiBBc2sgdGhlIHVzZXIgdmlh
IGRpYWxvZy4KLSAgICAgICAgU3RyaW5nIHVzZXJuYW1lOwotICAgICAgICBTdHJpbmcgcGFzc3dv
cmQ7Ci0KLSAgICAgICAgaWYgKCFwcm94eUluZm8uYWRkcmVzcy5lbXB0eSgpKSB7Ci0gICAgICAg
ICAgICB1c2VybmFtZSA9IHByb3h5SW5mby51c2VybmFtZTsKLSAgICAgICAgICAgIHBhc3N3b3Jk
ID0gcHJveHlJbmZvLnBhc3N3b3JkOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXNl
cm5hbWUgPSBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV91c2VyOwotICAgICAgICAgICAgcGFz
c3dvcmQgPSBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9wYXNzOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gQmVmb3JlIGFza2luZyB0aGUgdXNlciBmb3IgY3JlZGVudGlhbHMsIHdlIGNoZWNr
IGlmIHRoZSBVUkwgY29udGFpbnMgdGhhdC4KLSAgICAgICAgaWYgKHVzZXJuYW1lLmlzRW1wdHko
KSAmJiBwYXNzd29yZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChtX2hhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkudGFyZ2V0VHlwZSgpICE9IFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNNYWlu
RnJhbWUgJiYgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5pc0No
cm9tZVByb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VuZFJlcXVlc3RDYW5jZWxs
ZWQ7Ci0KLSAgICAgICAgICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+cGFnZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBTZW5kUmVxdWVzdENhbmNlbGxlZDsKLQotICAgICAgICAgICAg
Ly8gRE8gb3ZlcndyaXRlIGFueSBleGlzdGluZyBjcmVkZW50aWFscyB3aXRoIHRoZSBlbXB0eSBj
cmVkZW50aWFsCi0gICAgICAgICAgICB1cGRhdGVDdXJyZW50V2ViQ2hhbGxlbmdlKEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCwgMCwgbV9yZXNwb25z
ZSwgUmVzb3VyY2VFcnJvcigpKSk7Ci0KLSAgICAgICAgICAgIG1faXNBdXRoZW50aWNhdGlvbkNo
YWxsZW5naW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIHVwZGF0ZURlZmVyTG9hZGluZ0NvdW50KDEp
OwotCi0gICAgICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXI6Omluc3RhbmNl
KCktPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG5ld1VSTCwgcHJvdGVjdGlvblNwYWNlLAotICAg
ICAgICAgICAgICAgIENyZWRlbnRpYWwoKSwgdGhpcywgbV9mcmFtZS0+cGFnZSgpLT5jaHJvbWUo
KS5jbGllbnQoKS5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gU2Vu
ZFJlcXVlc3RXYWl0aW5nOwotICAgICAgICB9Ci0KLSAgICAgICAgY3JlZGVudGlhbCA9IENyZWRl
bnRpYWwodXNlcm5hbWUsIHBhc3N3b3JkLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9u
KTsKLQotICAgICAgICB1cGRhdGVDdXJyZW50V2ViQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCwgMCwgbV9yZXNwb25zZSwgUmVzb3Vy
Y2VFcnJvcigpKSk7Ci0gICAgfQotCi0gICAgbm90aWZ5Q2hhbGxlbmdlUmVzdWx0KG5ld1VSTCwg
cHJvdGVjdGlvblNwYWNlLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVN1Y2Nlc3MsIGNyZWRlbnRp
YWwpOwotICAgIHJldHVybiBtX25ld0pvYldpdGhDcmVkZW50aWFsc1N0YXJ0ZWQgPyBTZW5kUmVx
dWVzdFN1Y2NlZWRlZCA6IFNlbmRSZXF1ZXN0Q2FuY2VsbGVkOwotfQotCi12b2lkIE5ldHdvcmtK
b2I6OnN0b3JlQ3JlZGVudGlhbHMoKQotewotICAgIGlmICghbV9oYW5kbGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHN0b3JlQ3JlZGVudGlhbHMobV9oYW5kbGUtPmdldEludGVybmFsKCktPm1f
aG9zdFdlYkNoYWxsZW5nZSk7Ci0gICAgc3RvcmVDcmVkZW50aWFscyhtX2hhbmRsZS0+Z2V0SW50
ZXJuYWwoKS0+bV9wcm94eVdlYkNoYWxsZW5nZSk7Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6c3Rv
cmVDcmVkZW50aWFscyhBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQotewotICAg
IGlmIChjaGFsbGVuZ2UuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjaGFs
bGVuZ2UuaXNTdG9yZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT2J2aW91c2x5IHdl
IGNhbid0IGhhdmUgc3VjY2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZWQgd2l0aCBlbXB0eSBjcmVkZW50
aWFscy4gKFRvIHN0b3JlIGVtcHR5Ci0gICAgLy8gY3JlZGVudGlhbHMsIHVzZSBwdXJnZUNyZWRl
bnRpYWxzLikKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IGhlcmUsIGJ1dCB0aGVy
ZSBpcyBvbmUgcGF0aCAod2hlbiB0aGUgY3JlZGVudGlhbHMgYXJlIHJlYWQgZnJvbSB0aGUKLSAg
ICAvLyBwcm94eSBjb25maWcgZW50aXJlbHkgaW4gdGhlIHBsYXRmb3JtIGxheWVyKSB3aGVyZSBz
dG9yZUNyZWRlbnRpYWxzIGlzIGNhbGxlZCB3aXRoIGFuIGVtcHR5Ci0gICAgLy8gY2hhbGxlbmdl
LiBUaGUgY3JlZGVudGlhbHMgc2hvdWxkIGJlIHBhc3NlZCBiYWNrIGZyb20gdGhlIHBsYXRmb3Jt
IGxheWVyIGZvciBzdG9yYWdlIGluIHRoaXMKLSAgICAvLyBjYXNlIC0gc2VlIFBSIDI4Nzc5MS4K
LSAgICBpZiAoY2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpLnVzZXIoKS5pc0VtcHR5KCkg
fHwgY2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpLnBhc3N3b3JkKCkuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNoYWxsZW5nZS5w
cm9wb3NlZENyZWRlbnRpYWwoKSwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBtX3Jlc3Bv
bnNlLnVybCgpKTsKLSAgICBjaGFsbGVuZ2Uuc2V0U3RvcmVkKHRydWUpOwotCi0gICAgaWYgKGNo
YWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5zZXJ2ZXJUeXBlKCkgPT0gUHJvdGVjdGlvblNwYWNl
UHJveHlIVFRQIHx8IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5zZXJ2ZXJUeXBlKCkgPT0g
UHJvdGVjdGlvblNwYWNlUHJveHlIVFRQUykgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHByb3h5
QWRkcmVzczsKLSAgICAgICAgcHJveHlBZGRyZXNzLmFwcGVuZChjaGFsbGVuZ2UucHJvdGVjdGlv
blNwYWNlKCkuaG9zdCgpKTsKLSAgICAgICAgcHJveHlBZGRyZXNzLmFwcGVuZCgiOiIpOwotICAg
ICAgICBwcm94eUFkZHJlc3MuYXBwZW5kTnVtYmVyKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uo
KS5wb3J0KCkpOwotCi0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQcm94eUluZm8gcHJv
eHlJbmZvOwotICAgICAgICBwcm94eUluZm8uYWRkcmVzcyA9IHByb3h5QWRkcmVzcy50b1N0cmlu
ZygpOwotICAgICAgICBwcm94eUluZm8udXNlcm5hbWUgPSBjaGFsbGVuZ2UucHJvcG9zZWRDcmVk
ZW50aWFsKCkudXNlcigpOwotICAgICAgICBwcm94eUluZm8ucGFzc3dvcmQgPSBjaGFsbGVuZ2Uu
cHJvcG9zZWRDcmVkZW50aWFsKCkucGFzc3dvcmQoKTsKLQotICAgICAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPnN0b3JlUHJveHlDcmVkZW50aWFscyhwcm94
eUluZm8pOwotICAgICAgICBpZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAg
ICAgICBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLnBsYXRmb3JtUGFnZUNsaWVu
dCgpLT5zeW5jUHJveHlDcmVkZW50aWFsKGNoYWxsZW5nZS5wcm9wb3NlZENyZWRlbnRpYWwoKSk7
Ci0gICAgfQotfQotCi12b2lkIE5ldHdvcmtKb2I6OnB1cmdlQ3JlZGVudGlhbHMoKQotewotICAg
IGlmICghbV9oYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHB1cmdlQ3JlZGVudGlhbHMo
bV9oYW5kbGUtPmdldEludGVybmFsKCktPm1faG9zdFdlYkNoYWxsZW5nZSk7Ci0gICAgcHVyZ2VD
cmVkZW50aWFscyhtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9wcm94eVdlYkNoYWxsZW5nZSk7
Ci0KLSAgICBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlLm51
bGxpZnkoKTsKLSAgICBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9wcm94eVdlYkNoYWxsZW5n
ZS5udWxsaWZ5KCk7Ci0gICAgbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1faG9zdFdlYkNoYWxs
ZW5nZS5udWxsaWZ5KCk7Ci19Ci0KLXZvaWQgTmV0d29ya0pvYjo6cHVyZ2VDcmVkZW50aWFscyhB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQotewotICAgIGlmIChjaGFsbGVuZ2Uu
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFN0cmluZyYgcHVyZ2VVc2Vy
bmFtZSA9IGNoYWxsZW5nZS5wcm9wb3NlZENyZWRlbnRpYWwoKS51c2VyKCk7Ci0gICAgY29uc3Qg
U3RyaW5nJiBwdXJnZVBhc3N3b3JkID0gY2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpLnBh
c3N3b3JkKCk7Ci0KLSAgICAvLyBTaW5jZSB0aGlzIGNyZWRlbnRpYWwgZGlkbid0IHdvcmssIHJl
bW92ZSBpdCBmcm9tIGFsbCBzb3VyY2VzIHdoaWNoIHdvdWxkIHJldHVybiBpdAotICAgIC8vIElN
UE9SVEFOVDogZXZlcnkgc291cmNlIHRoYXQgaXMgY2hlY2tlZCBmb3IgYSBwYXNzd29yZCBpbiBz
ZW5kUmVxdWVzdFdpdGhDcmVkZW50aWFscyBzaG91bGQKLSAgICAvLyBiZSBoYW5kbGVkIGhlcmUh
Ci0KLSAgICBpZiAoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnNlcnZlclR5cGUoKSA9PSBQ
cm90ZWN0aW9uU3BhY2VQcm94eUhUVFAgfHwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnNl
cnZlclR5cGUoKSA9PSBQcm90ZWN0aW9uU3BhY2VQcm94eUhUVFBTKSB7Ci0gICAgICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpQcm94eUluZm8gcHJveHlJbmZvID0gQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5wcm94eUluZm8obV9oYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLnVybCgpLnN0cmluZygpKTsKLSAgICAgICAgaWYgKCFwcm94eUluZm8uYWRkcmVzcy5lbXB0
eSgpICYmIHB1cmdlVXNlcm5hbWUgPT0gcHJveHlJbmZvLnVzZXJuYW1lLmNfc3RyKCkgJiYgcHVy
Z2VQYXNzd29yZCA9PSBwcm94eUluZm8ucGFzc3dvcmQuY19zdHIoKSkgewotICAgICAgICAgICAg
cHJveHlJbmZvLnVzZXJuYW1lLmNsZWFyKCk7Ci0gICAgICAgICAgICBwcm94eUluZm8ucGFzc3dv
cmQuY2xlYXIoKTsKLSAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6
aW5zdGFuY2UoKS0+c3RvcmVQcm94eUNyZWRlbnRpYWxzKHByb3h5SW5mbyk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3VzZXIgPT0gcHVyZ2VV
c2VybmFtZSAmJiBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9wYXNzID09IHB1cmdlUGFzc3dv
cmQpIHsKLSAgICAgICAgbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fdXNlciA9ICIiOwotICAg
ICAgICBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9wYXNzID0gIiI7Ci0gICAgfQotCi0gICAg
Ly8gRG8gbm90IGNvbXBhcmUgY3JlZGVudGlhbCBvYmplY3RzIHdpdGggPT0gaGVyZSwgc2luY2Ug
d2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcGVyc2lzdGVuY2UuCi0KLSAgICBjb25zdCBDcmVkZW50
aWFsJiBzdG9yZWRDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjaGFsbGVuZ2Uu
cHJvdGVjdGlvblNwYWNlKCkpOwotICAgIGlmIChzdG9yZWRDcmVkZW50aWFsLnVzZXIoKSA9PSBw
dXJnZVVzZXJuYW1lICYmIHN0b3JlZENyZWRlbnRpYWwucGFzc3dvcmQoKSA9PSBwdXJnZVBhc3N3
b3JkKSB7Ci0gICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpyZW1vdmUoY2hhbGxlbmdlLnByb3Rl
Y3Rpb25TcGFjZSgpKTsKLSAgICAgICAgY2hhbGxlbmdlLnNldFN0b3JlZChmYWxzZSk7Ci0gICAg
fQotI2lmIEVOQUJMRShCTEFDS0JFUlJZX0NSRURFTlRJQUxfUEVSU0lTVCkKLSAgICBjb25zdCBD
cmVkZW50aWFsJiBwZXJzaXN0ZWRDcmVkZW50aWFsID0gY3JlZGVudGlhbEJhY2tpbmdTdG9yZSgp
LmdldExvZ2luKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7Ci0gICAgaWYgKHBlcnNpc3Rl
ZENyZWRlbnRpYWwudXNlcigpID09IHB1cmdlVXNlcm5hbWUgJiYgcGVyc2lzdGVkQ3JlZGVudGlh
bC5wYXNzd29yZCgpID09IHB1cmdlUGFzc3dvcmQpCi0gICAgICAgIGNyZWRlbnRpYWxCYWNraW5n
U3RvcmUoKS5yZW1vdmVMb2dpbihjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIHB1cmdlVXNl
cm5hbWUpOwotI2VuZGlmCi19Ci0KLWJvb2wgTmV0d29ya0pvYjo6c2hvdWxkU2VuZENsaWVudERh
dGEoKSBjb25zdAotewotICAgIHJldHVybiAoIWlzUmVkaXJlY3QobV9leHRlbmRlZFN0YXR1c0Nv
ZGUpIHx8ICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5jb250YWlucygiTG9jYXRpb24i
KSkKLSAgICAgICAgJiYgIW1fbmVlZHNSZXRyeUFzRlRQRGlyZWN0b3J5OwotfQotCi12b2lkIE5l
dHdvcmtKb2I6OmZpcmVEZWxldGVKb2JUaW1lcihUaW1lcjxOZXR3b3JrSm9iPiopCi17Ci0gICAg
TmV0d29ya01hbmFnZXI6Omluc3RhbmNlKCktPmRlbGV0ZUpvYih0aGlzKTsKLX0KLQotdm9pZCBO
ZXR3b3JrSm9iOjpub3RpZnlDaGFsbGVuZ2VSZXN1bHQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVJl
c3VsdCByZXN1bHQsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCi17Ci0gICAgQVNTRVJU
KHVybC5pc1ZhbGlkKCkpOwotICAgIEFTU0VSVCh1cmwgPT0gbV9yZXNwb25zZS51cmwoKSk7Ci0g
ICAgQVNTRVJUKCFwcm90ZWN0aW9uU3BhY2UuaG9zdCgpLmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAo
bV9pc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdpbmcpIHsKLSAgICAgICAgbV9pc0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdpbmcgPSBmYWxzZTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVN1Y2Nlc3MpCi0gICAgICAgICAgICBjYW5jZWxKb2IoKTsKLSAgICAgICAg
dXBkYXRlRGVmZXJMb2FkaW5nQ291bnQoLTEpOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgIT0g
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VTdWNjZXNzKSB7Ci0gICAgICAgIE5ldHdvcmtSZXF1ZXN0
OjpBdXRoVHlwZSBhdXRoVHlwZTsKLSAgICAgICAgTmV0d29ya1JlcXVlc3Q6OkF1dGhQcm90b2Nv
bCBhdXRoUHJvdG9jb2w7Ci0gICAgICAgIE5ldHdvcmtSZXF1ZXN0OjpBdXRoU2NoZW1lIGF1dGhT
Y2hlbWU7Ci0gICAgICAgIHByb3RlY3Rpb25TcGFjZVRvUGxhdGZvcm1BdXRoKHByb3RlY3Rpb25T
cGFjZSwgYXV0aFR5cGUsIGF1dGhQcm90b2NvbCwgYXV0aFNjaGVtZSk7Ci0gICAgICAgIHN0cmVh
bUZhaWxlZFRvR2V0Q3JlZGVudGlhbHMoYXV0aFR5cGUsIGF1dGhQcm90b2NvbCwgYXV0aFNjaGVt
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1cGRhdGVDdXJyZW50V2ViQ2hhbGxl
bmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCwg
MCwgbV9yZXNwb25zZSwgUmVzb3VyY2VFcnJvcigpKSwgLyogYWxsb3dPdmVyd3JpdGUgKi8gZmFs
c2UpOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSBtX2hhbmRsZS0+Zmlyc3RS
ZXF1ZXN0KCk7Ci0gICAgbmV3UmVxdWVzdC5zZXRVUkwodXJsKTsKLSAgICBuZXdSZXF1ZXN0LnNl
dE11c3RIYW5kbGVJbnRlcm5hbGx5KHRydWUpOwotICAgIG1fbmV3Sm9iV2l0aENyZWRlbnRpYWxz
U3RhcnRlZCA9IHN0YXJ0TmV3Sm9iV2l0aFJlcXVlc3QobmV3UmVxdWVzdCwgLyogaW5jcmVhc2VS
ZWRpcmVjdENvdW50ICovIGZhbHNlLCAvKiByZXJlYWRDb29raWVzICovIHRydWUpOwotfQotCi12
b2lkIE5ldHdvcmtKb2I6OmZyYW1lRGVzdHJveWVkKCkKLXsKLSAgICBpZiAobV9mcmFtZSAmJiAh
bV9jYW5jZWxsZWQpCi0gICAgICAgIGNhbmNlbEpvYigpOwotICAgIEZyYW1lRGVzdHJ1Y3Rpb25P
YnNlcnZlcjo6ZnJhbWVEZXN0cm95ZWQoKTsKLX0KLQotdm9pZCBOZXR3b3JrSm9iOjp3aWxsRGV0
YWNoUGFnZSgpCi17Ci0gICAgaWYgKG1fZnJhbWUgJiYgIW1fY2FuY2VsbGVkKQotICAgICAgICBj
YW5jZWxKb2IoKTsKLX0KLQotdm9pZCBOZXR3b3JrSm9iOjp1cGRhdGVDdXJyZW50V2ViQ2hhbGxl
bmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGJvb2wgYWxsb3dP
dmVyd3JpdGUpCi17Ci0gICAgaWYgKGFsbG93T3ZlcndyaXRlIHx8ICFtX2hhbmRsZS0+Z2V0SW50
ZXJuYWwoKS0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlLmhhc0NyZWRlbnRpYWxzKCkpCi0gICAgICAg
IG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UgPSBjaGFsbGVu
Z2U7Ci0gICAgaWYgKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5zZXJ2ZXJUeXBlKCkgPT0g
UHJvdGVjdGlvblNwYWNlUHJveHlIVFRQIHx8IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5z
ZXJ2ZXJUeXBlKCkgPT0gUHJvdGVjdGlvblNwYWNlUHJveHlIVFRQUykgewotICAgICAgICBpZiAo
YWxsb3dPdmVyd3JpdGUgfHwgIW1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Byb3h5V2ViQ2hh
bGxlbmdlLmhhc0NyZWRlbnRpYWxzKCkpCi0gICAgICAgICAgICBtX2hhbmRsZS0+Z2V0SW50ZXJu
YWwoKS0+bV9wcm94eVdlYkNoYWxsZW5nZSA9IGNoYWxsZW5nZTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoYWxsb3dPdmVyd3JpdGUgfHwgIW1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX2hv
c3RXZWJDaGFsbGVuZ2UuaGFzQ3JlZGVudGlhbHMoKSkKLSAgICAgICAgICAgIG1faGFuZGxlLT5n
ZXRJbnRlcm5hbCgpLT5tX2hvc3RXZWJDaGFsbGVuZ2UgPSBjaGFsbGVuZ2U7Ci0gICAgfQotfQot
Ci1jb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIE5ldHdvcmtKb2I6Om1pbWVUeXBl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXNwb25zZS5taW1lVHlwZSgpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2JsYWNrYmVycnkvTmV0d29ya0pvYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmgJKHJldmlzaW9uIDE2MTU5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9i
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBOZXR3
b3JrSm9iX2gKLSNkZWZpbmUgTmV0d29ya0pvYl9oCi0KLSNpbmNsdWRlICJBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJEZWZlcnJlZERhdGEuaCIKLSNpbmNsdWRl
ICJGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotCi0j
aW5jbHVkZSA8bmV0d29yay9GaWx0ZXJTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFt
ZXNwYWNlIFBsYXRmb3JtIHsKLWNsYXNzIE5ldHdvcmtSZXF1ZXN0OwotY2xhc3MgTmV0d29ya1N0
cmVhbUZhY3Rvcnk7Ci19Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ3JlZGVu
dGlhbDsKLWNsYXNzIEZyYW1lOwotY2xhc3MgVVJMOwotY2xhc3MgUHJvdGVjdGlvblNwYWNlOwot
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotCi1jbGFzcyBOZXR3b3JrSm9iIDogcHVibGljIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlQ2xpZW50LCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZp
bHRlclN0cmVhbSwgcHVibGljIEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlciB7Ci1wdWJsaWM6Ci0g
ICAgTmV0d29ya0pvYigpOwotICAgIH5OZXR3b3JrSm9iKCk7Ci0KLSAgICB2b2lkIGluaXRpYWxp
emUoaW50IHBsYXllcklkLAotICAgICAgICBjb25zdCBTdHJpbmcmIHBhZ2VHcm91cE5hbWUsCi0g
ICAgICAgIGNvbnN0IFVSTCYsCi0gICAgICAgIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpO
ZXR3b3JrUmVxdWVzdCYsCi0gICAgICAgIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+LAotICAg
ICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1N0cmVhbUZhY3RvcnkqLAotICAgICAg
ICBGcmFtZSosCi0gICAgICAgIGludCBkZWZlckxvYWRpbmdDb3VudCwKLSAgICAgICAgaW50IHJl
ZGlyZWN0Q291bnQpOwotICAgIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFuZGxlOyB9Ci0jaWZuZGVmIE5ERUJVRwotICAgIGJvb2wgaXNSdW5u
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1J1bm5pbmc7IH0KLSNlbmRpZgotICAgIGJvb2wgaXND
YW5jZWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2NhbmNlbGxlZDsgfQotICAgIGludCBjYW5jZWxK
b2IoKTsKLSAgICBib29sIGlzRGVmZXJyaW5nTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGVm
ZXJMb2FkaW5nQ291bnQgPiAwOyB9Ci0gICAgdm9pZCB1cGRhdGVEZWZlckxvYWRpbmdDb3VudChp
bnQgZGVsdGEpOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTdGF0dXNSZWNlaXZlZChpbnQgc3Rh
dHVzLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2
b2lkIGhhbmRsZU5vdGlmeVN0YXR1c1JlY2VpdmVkKGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUhlYWRlcnNSZWNlaXZlZChjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3QmIGhlYWRlcnMp
OwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlNdWx0aXBhcnRIZWFkZXJSZWNlaXZlZChjb25zdCBj
aGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QXV0
aFJlY2VpdmVkKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6QXV0aFR5cGUs
Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6QXV0aFByb3Rv
Y29sLAotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkF1dGhT
Y2hlbWUsCi0gICAgICAgIGNvbnN0IGNoYXIqIHJlYWxtLAotICAgICAgICBBdXRoUmVzdWx0KTsK
LSAgICAvLyBub3RpZnlTdHJpbmdIZWFkZXJSZWNlaXZlZCBleGlzdHMgb25seSB0byByZXNvbHZl
IGFtYmlndWl0eSBiZXR3ZWVuIGNoYXIqIGFuZCBTdHJpbmcgcGFyYW1ldGVycwotICAgIHZvaWQg
bm90aWZ5U3RyaW5nSGVhZGVyUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOwotICAgIHZvaWQgaGFuZGxlTm90aWZ5SGVhZGVyUmVjZWl2ZWQoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgaGFuZGxlTm90aWZ5TXVs
dGlwYXJ0SGVhZGVyUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpOwotICAgIHZvaWQgaGFuZGxlU2V0Q29va2llSGVhZGVyKGNvbnN0IFN0cmluZyYgdmFsdWUp
OwotICAgIHZvaWQgbm90aWZ5RGF0YVJlY2VpdmVkUGxhaW4oY29uc3QgY2hhciogYnVmLCBzaXpl
X3QgbGVuKTsKLSAgICB2b2lkIGhhbmRsZU5vdGlmeURhdGFSZWNlaXZlZChjb25zdCBjaGFyKiBi
dWYsIHNpemVfdCBsZW4pOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEYXRhU2VudCh1bnNpZ25l
ZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVT
ZW50KTsKLSAgICB2b2lkIGhhbmRsZU5vdGlmeURhdGFTZW50KHVuc2lnbmVkIGxvbmcgbG9uZyBi
eXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwotICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlDbG9zZShpbnQgc3RhdHVzKTsKLSAgICB2b2lkIGhhbmRsZU5vdGlm
eUNsb3NlKGludCBzdGF0dXMpOwotICAgIHZpcnR1YWwgaW50IHN0YXR1cygpIGNvbnN0IHsgcmV0
dXJuIG1fZXh0ZW5kZWRTdGF0dXNDb2RlOyB9Ci0gICAgdmlydHVhbCBjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nIG1pbWVUeXBlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5Q2hhbGxlbmdlUmVzdWx0KGNvbnN0IFVSTCYsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYs
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUmVzdWx0LCBjb25zdCBDcmVkZW50aWFsJik7Ci0KLSAg
ICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIgcHVyZSB2aXJ0
dWFscy4KLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVEZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgd2lsbERldGFjaFBhZ2UoKTsKLQotcHJpdmF0ZToKLSAgICBib29sIGlzQ2xpZW50QXZhaWxh
YmxlKCkgY29uc3QgeyByZXR1cm4gIW1fY2FuY2VsbGVkICYmIG1faGFuZGxlICYmIG1faGFuZGxl
LT5jbGllbnQoKTsgfQotCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeURhdGFSZWNlaXZlZChCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya0J1ZmZlciogYnVmZmVyKQotICAgIHsKLSAgICAgICAg
bm90aWZ5RGF0YVJlY2VpdmVkUGxhaW4oQmxhY2tCZXJyeTo6UGxhdGZvcm06Om5ldHdvcmtCdWZm
ZXJEYXRhKGJ1ZmZlciksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpuZXR3b3JrQnVmZmVyRGF0YUxl
bmd0aChidWZmZXIpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0V2FzRGlza0NhY2hl
ZChib29sIHZhbHVlKQotICAgIHsKLSAgICAgICBtX3Jlc3BvbnNlLnNldFdhc0NhY2hlZCh2YWx1
ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRTZW5kQ2xpZW50RGF0YSgpIGNvbnN0OwotCi0g
ICAgYm9vbCBzaG91bGRSZWxlYXNlQ2xpZW50UmVzb3VyY2UoKTsKLSAgICBib29sIHNob3VsZE5v
dGlmeUNsaWVudEZhaWxlZCgpIGNvbnN0OwotCi0gICAgYm9vbCBzaG91bGREZWZlckxvYWRpbmco
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzRGVmZXJyaW5nTG9hZGluZygpIHx8IG1f
ZGVmZXJyZWREYXRhLmhhc0RlZmVycmVkRGF0YSgpOwotICAgIH0KLQotICAgIGJvb2wgcmV0cnlB
c0ZUUERpcmVjdG9yeSgpOwotCi0gICAgYm9vbCBzdGFydE5ld0pvYldpdGhSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgYm9vbCBpbmNyZWFzUmVkaXJlY3RDb3VudCA9IGZhbHNl
LCBib29sIHJlcmVhZENvb2tpZXMgPSBmYWxzZSk7Ci0KLSAgICBib29sIGhhbmRsZVJlZGlyZWN0
KCk7Ci0KLSAgICAvLyBUaGlzIGNhbiBjYXVzZSBtX2NhbmNlbGxlZCB0byBiZSBzZXQgdG8gdHJ1
ZSwgaWYgaXQgcGFzc2VzIHVwIGFuIGVycm9yIHRvIG1faGFuZGxlLT5jbGllbnQoKSB3aGljaCBj
YXVzZXMgdGhlIGpvYiB0byBiZSBjYW5jZWxsZWQKLSAgICB2b2lkIHNlbmRSZXNwb25zZUlmTmVl
ZGVkKCk7Ci0gICAgdm9pZCBzZW5kTXVsdGlwYXJ0UmVzcG9uc2VJZk5lZWRlZCgpOwotCi0gICAg
dm9pZCBmaXJlRGVsZXRlSm9iVGltZXIoVGltZXI8TmV0d29ya0pvYj4qKTsKLQotICAgIGJvb2wg
aGFuZGxlRlRQSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyKTsKLQotICAgIC8vIFRoZSBzZXJ2
ZXIgbmVlZHMgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMuIFNlYXJjaCBpbiB0aGUgQ3JlZGVu
dGlhbFN0b3JhZ2UKLSAgICAvLyBvciBwcm9tcHQgdGhlIHVzZXIgdmlhIGRpYWxvZywgdGhlbiBy
ZXNlbmQgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgY3JlZGVudGlhbHMuCi0gICAgZW51bSBTZW5kUmVx
dWVzdFJlc3VsdCB7Ci0gICAgICAgIFNlbmRSZXF1ZXN0U3VjY2VlZGVkLAotICAgICAgICBTZW5k
UmVxdWVzdENhbmNlbGxlZCwKLSAgICAgICAgU2VuZFJlcXVlc3RXYWl0aW5nCi0gICAgfTsKLSAg
ICBTZW5kUmVxdWVzdFJlc3VsdCBzZW5kUmVxdWVzdFdpdGhDcmVkZW50aWFscyhQcm90ZWN0aW9u
U3BhY2VTZXJ2ZXJUeXBlLCBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSwgY29u
c3QgU3RyaW5nJiByZWFsbSwgYm9vbCByZXF1aXJlQ3JlZGVudGlhbHMgPSB0cnVlKTsKLQotICAg
IHZvaWQgc3RvcmVDcmVkZW50aWFscygpOwotICAgIHZvaWQgc3RvcmVDcmVkZW50aWFscyhBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotICAgIHZvaWQgcHVyZ2VDcmVkZW50aWFscygpOwotICAg
IHZvaWQgcHVyZ2VDcmVkZW50aWFscyhBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotCi0gICAg
Ym9vbCBpc0Vycm9yKGludCBzdGF0dXNDb2RlKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IHN0YXR1c0NvZGUgPCAwIHx8ICg0MDAgPD0gc3RhdHVzQ29kZSAmJiBzdGF0dXNDb2RlIDwgNjAw
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZUN1cnJlbnRXZWJDaGFsbGVuZ2UoY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmLCBib29sIGFsbG93T3ZlcndyaXRlID0gdHJ1ZSk7Ci0KLXBy
aXZhdGU6Ci0gICAgaW50IG1fcGxheWVySWQ7Ci0gICAgU3RyaW5nIG1fcGFnZUdyb3VwTmFtZTsK
LSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOwotICAgIFJlc291cmNlUmVzcG9u
c2UgbV9yZXNwb25zZTsKLSAgICBPd25QdHI8UmVzb3VyY2VSZXNwb25zZT4gbV9tdWx0aXBhcnRS
ZXNwb25zZTsKLSAgICBUaW1lcjxOZXR3b3JrSm9iPiBtX2RlbGV0ZUpvYlRpbWVyOwotICAgIFN0
cmluZyBtX2NvbnRlbnRUeXBlOwotICAgIFN0cmluZyBtX3NuaWZmZWRNaW1lVHlwZTsKLSAgICBT
dHJpbmcgbV9jb250ZW50RGlzcG9zaXRpb247Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5l
dHdvcmtTdHJlYW1GYWN0b3J5KiBtX3N0cmVhbUZhY3Rvcnk7Ci0gICAgYm9vbCBtX2lzRmlsZTsK
LSAgICBib29sIG1faXNGVFA7Ci0gICAgYm9vbCBtX2lzRlRQRGlyOwotI2lmbmRlZiBOREVCVUcK
LSAgICBib29sIG1faXNSdW5uaW5nOwotI2VuZGlmCi0gICAgYm9vbCBtX2NhbmNlbGxlZDsKLSAg
ICBib29sIG1fc3RhdHVzUmVjZWl2ZWQ7Ci0gICAgYm9vbCBtX2RhdGFSZWNlaXZlZDsKLSAgICBi
b29sIG1fcmVzcG9uc2VTZW50OwotICAgIGJvb2wgbV9jYWxsaW5nQ2xpZW50OwotICAgIGJvb2wg
bV9uZWVkc1JldHJ5QXNGVFBEaXJlY3Rvcnk7Ci0gICAgYm9vbCBtX2lzT3ZlcnJpZGVDb250ZW50
VHlwZTsKLSAgICBib29sIG1fbmV3Sm9iV2l0aENyZWRlbnRpYWxzU3RhcnRlZDsKLSAgICBib29s
IG1faXNIZWFkTWV0aG9kOwotCi0gICAgLy8gSWYgYW4gSFRUUCBzdGF0dXMgY29kZSBpcyByZWNl
aXZlZCwgbV9leHRlbmRlZFN0YXR1c0NvZGUgYW5kIG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUg
d2lsbCBib3RoIGJlIHNldCB0byBpdC4KLSAgICAvLyBJZiBhIHBsYXRmb3JtIGVycm9yIGNvZGUg
aXMgcmVjZWl2ZWQsIG1fZXh0ZW5kZWRTdGF0dXNDb2RlIHdpbGwgYmUgc2V0IHRvIGl0IGFuZCBt
X3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlIHdpbGwgYmUgc2V0IHRvIDQwNC4KLSAgICBpbnQgbV9l
eHRlbmRlZFN0YXR1c0NvZGU7Ci0KLSAgICBpbnQgbV9yZWRpcmVjdENvdW50OwotCi0gICAgRGVm
ZXJyZWREYXRhIG1fZGVmZXJyZWREYXRhOwotICAgIGludCBtX2RlZmVyTG9hZGluZ0NvdW50Owot
Ci0gICAgYm9vbCBtX2lzQXV0aGVudGljYXRpb25DaGFsbGVuZ2luZzsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE5ldHdvcmtKb2JfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0
d29ya01hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDI0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEx
LCAyMDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJOZXR3b3JrTWFuYWdlci5oIgotCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ3Jl
ZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIk5ldHdvcmtKb2IuaCIKLSNpbmNsdWRl
ICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgotI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0KLSNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KLSNpbmNsdWRlIDxCdWlsZEluZm9ybWF0aW9u
Lmg+Ci0jaW5jbHVkZSA8bmV0d29yay9GaWx0ZXJTdHJlYW0uaD4KLSNpbmNsdWRlIDxuZXR3b3Jr
L05ldHdvcmtSZXF1ZXN0Lmg+Ci0KLXVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3Jr
UmVxdWVzdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TSU5HTEVUT05fSU5JVElBTElaRVJf
VEhSRUFEVU5TQUZFKE5ldHdvcmtNYW5hZ2VyKQotCi1pbnQgTmV0d29ya01hbmFnZXI6OnN0YXJ0
Sm9iKGludCBwbGF5ZXJJZCwgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gam9iLCBGcmFtZSog
ZnJhbWUsIGJvb2wgZGVmZXJzTG9hZGluZykKLXsKLSAgICBBU1NFUlQoam9iLmdldCgpKTsKLSAg
ICAvLyBXZSBzaG91bGRuJ3QgY2FsbCBtZXRob2RzIG9uIFBhc3NSZWZQdHIgc28gbWFrZSBhIG5l
dyBSZWZQdC4KLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IHJlZkpvYihqb2IpOwotICAgIHJl
dHVybiBzdGFydEpvYihwbGF5ZXJJZCwgcmVmSm9iLCByZWZKb2ItPmZpcnN0UmVxdWVzdCgpLCBm
cmFtZSwgZGVmZXJzTG9hZGluZyk7Ci19Ci0KLWludCBOZXR3b3JrTWFuYWdlcjo6c3RhcnRKb2Io
aW50IHBsYXllcklkLCBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBqb2IsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgRnJhbWUqIGZyYW1lLCBib29sIGRlZmVyc0xvYWRpbmcpCi17
Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0gICAgQVNTRVJUKHBhZ2UpOwotICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrU3RyZWFtRmFjdG9yeSogc3RyZWFtRmFjdG9y
eSA9IHBhZ2UtPmNocm9tZSgpLnBsYXRmb3JtUGFnZUNsaWVudCgpLT5uZXR3b3JrU3RyZWFtRmFj
dG9yeSgpOwotICAgIHJldHVybiBzdGFydEpvYihwbGF5ZXJJZCwgcGFnZS0+Z3JvdXBOYW1lKCks
IGpvYiwgcmVxdWVzdCwgc3RyZWFtRmFjdG9yeSwgZnJhbWUsIGRlZmVyc0xvYWRpbmcgPyAxIDog
MCk7Ci19Ci0KLXZvaWQgcHJvdGVjdGlvblNwYWNlVG9QbGF0Zm9ybUF1dGgoY29uc3QgUHJvdGVj
dGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIE5ldHdvcmtSZXF1ZXN0OjpBdXRoVHlwZSYgYXV0
aFR5cGUsIE5ldHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2wmIGF1dGhQcm90b2NvbCwgTmV0d29y
a1JlcXVlc3Q6OkF1dGhTY2hlbWUmIGF1dGhTY2hlbWUpCi17Ci0gICAgYXV0aFNjaGVtZSA9IE5l
dHdvcmtSZXF1ZXN0OjpBdXRoU2NoZW1lTm9uZTsKLSAgICBzd2l0Y2ggKHByb3RlY3Rpb25TcGFj
ZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpKSB7Ci0gICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VBdXRo
ZW50aWNhdGlvblNjaGVtZURlZmF1bHQ6Ci0gICAgICAgIGF1dGhTY2hlbWUgPSBOZXR3b3JrUmVx
dWVzdDo6QXV0aFNjaGVtZURlZmF1bHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJvdGVj
dGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQQmFzaWM6Ci0gICAgICAgIGF1dGhTY2hl
bWUgPSBOZXR3b3JrUmVxdWVzdDo6QXV0aFNjaGVtZUhUVFBCYXNpYzsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdlc3Q6
Ci0gICAgICAgIGF1dGhTY2hlbWUgPSBOZXR3b3JrUmVxdWVzdDo6QXV0aFNjaGVtZUhUVFBEaWdl
c3Q7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRp
b25TY2hlbWVOZWdvdGlhdGU6Ci0gICAgICAgIGF1dGhTY2hlbWUgPSBOZXR3b3JrUmVxdWVzdDo6
QXV0aFNjaGVtZU5lZ290aWF0ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQcm90ZWN0aW9u
U3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU5UTE06Ci0gICAgICAgIGF1dGhTY2hlbWUgPSBOZXR3
b3JrUmVxdWVzdDo6QXV0aFNjaGVtZU5UTE07Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBhdXRoVHlwZSA9IE5ldHdvcmtSZXF1ZXN0OjpBdXRoVHlwZU5vbmU7Ci0gICAgYXV0aFBy
b3RvY29sID0gTmV0d29ya1JlcXVlc3Q6OkF1dGhQcm90b2NvbE5vbmU7Ci0gICAgc3dpdGNoIChw
cm90ZWN0aW9uU3BhY2Uuc2VydmVyVHlwZSgpKSB7Ci0gICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VT
ZXJ2ZXJIVFRQOgotICAgICAgICBhdXRoVHlwZSA9IE5ldHdvcmtSZXF1ZXN0OjpBdXRoVHlwZUhv
c3Q7Ci0gICAgICAgIGF1dGhQcm90b2NvbCA9IE5ldHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2xI
VFRQOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFBT
OgotICAgICAgICBhdXRoVHlwZSA9IE5ldHdvcmtSZXF1ZXN0OjpBdXRoVHlwZUhvc3Q7Ci0gICAg
ICAgIGF1dGhQcm90b2NvbCA9IE5ldHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2xIVFRQUzsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJGVFA6Ci0gICAgICAg
IGF1dGhUeXBlID0gTmV0d29ya1JlcXVlc3Q6OkF1dGhUeXBlSG9zdDsKLSAgICAgICAgYXV0aFBy
b3RvY29sID0gTmV0d29ya1JlcXVlc3Q6OkF1dGhQcm90b2NvbEZUUDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJGVFBTOgotICAgICAgICBhdXRoVHlwZSA9
IE5ldHdvcmtSZXF1ZXN0OjpBdXRoVHlwZUhvc3Q7Ci0gICAgICAgIGF1dGhQcm90b2NvbCA9IE5l
dHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2xGVFBTOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFByb3RlY3Rpb25TcGFjZVByb3h5SFRUUDoKLSAgICAgICAgYXV0aFR5cGUgPSBOZXR3b3JrUmVx
dWVzdDo6QXV0aFR5cGVQcm94eTsKLSAgICAgICAgYXV0aFByb3RvY29sID0gTmV0d29ya1JlcXVl
c3Q6OkF1dGhQcm90b2NvbEhUVFA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJvdGVjdGlv
blNwYWNlUHJveHlIVFRQUzoKLSAgICAgICAgYXV0aFR5cGUgPSBOZXR3b3JrUmVxdWVzdDo6QXV0
aFR5cGVQcm94eTsKLSAgICAgICAgYXV0aFByb3RvY29sID0gTmV0d29ya1JlcXVlc3Q6OkF1dGhQ
cm90b2NvbEhUVFBTOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFByb3RlY3Rpb25TcGFjZVBy
b3h5RlRQOgotICAgICAgICBhdXRoVHlwZSA9IE5ldHdvcmtSZXF1ZXN0OjpBdXRoVHlwZVByb3h5
OwotICAgICAgICBhdXRoUHJvdG9jb2wgPSBOZXR3b3JrUmVxdWVzdDo6QXV0aFByb3RvY29sRlRQ
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBzZXRBdXRoQ3Jl
ZGVudGlhbHMoTmV0d29ya1JlcXVlc3QmIHBsYXRmb3JtUmVxdWVzdCwgY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKLXsKLSAgICBpZiAoY2hhbGxlbmdlLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWwgPSBjaGFsbGVu
Z2UucHJvcG9zZWRDcmVkZW50aWFsKCk7Ci0gICAgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90
ZWN0aW9uU3BhY2UgPSBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCk7Ci0KLSAgICBTdHJpbmcg
dXNlcm5hbWUgPSBjcmVkZW50aWFsLnVzZXIoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBjcmVk
ZW50aWFsLnBhc3N3b3JkKCk7Ci0KLSAgICBOZXR3b3JrUmVxdWVzdDo6QXV0aFR5cGUgYXV0aFR5
cGU7Ci0gICAgTmV0d29ya1JlcXVlc3Q6OkF1dGhQcm90b2NvbCBhdXRoUHJvdG9jb2w7Ci0gICAg
TmV0d29ya1JlcXVlc3Q6OkF1dGhTY2hlbWUgYXV0aFNjaGVtZTsKLSAgICBwcm90ZWN0aW9uU3Bh
Y2VUb1BsYXRmb3JtQXV0aChwcm90ZWN0aW9uU3BhY2UsIGF1dGhUeXBlLCBhdXRoUHJvdG9jb2ws
IGF1dGhTY2hlbWUpOwotCi0gICAgaWYgKGF1dGhUeXBlICE9IE5ldHdvcmtSZXF1ZXN0OjpBdXRo
VHlwZU5vbmUgJiYgYXV0aFByb3RvY29sICE9IE5ldHdvcmtSZXF1ZXN0OjpBdXRoUHJvdG9jb2xO
b25lICYmIGF1dGhTY2hlbWUgIT0gTmV0d29ya1JlcXVlc3Q6OkF1dGhTY2hlbWVOb25lKQotICAg
ICAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0Q3JlZGVudGlhbHMoYXV0aFR5cGUsIGF1dGhQcm90b2Nv
bCwgYXV0aFNjaGVtZSwgdXNlcm5hbWUudXRmOCgpLmRhdGEoKSwgcGFzc3dvcmQudXRmOCgpLmRh
dGEoKSk7Ci19Ci0KLWludCBOZXR3b3JrTWFuYWdlcjo6c3RhcnRKb2IoaW50IHBsYXllcklkLCBj
b25zdCBTdHJpbmcmIHBhZ2VHcm91cE5hbWUsIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGpv
YiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
TmV0d29ya1N0cmVhbUZhY3RvcnkqIHN0cmVhbUZhY3RvcnksIEZyYW1lKiBmcmFtZSwgaW50IGRl
ZmVyTG9hZGluZ0NvdW50LCBpbnQgcmVkaXJlY3RDb3VudCwgYm9vbCByZXJlYWRDb29raWVzKQot
ewotICAgIC8vIE1ha2Ugc3VyZSB0aGUgUmVzb3VyY2VIYW5kbGUgZG9lc24ndCBnbyBvdXQgb2Yg
c2NvcGUgd2hpbGUgY2FsbGluZyBjYWxsYmFja3MuCi0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxl
PiBndWFyZEpvYihqb2IpOwotCi0gICAgVVJMIHVybCA9IHJlcXVlc3QudXJsKCk7Ci0KLSAgICAv
LyBPbmx5IGxvYWQgdGhlIGluaXRpYWwgdXJsIG9uY2UuCi0gICAgYm9vbCBpc0luaXRpYWwgPSAo
dXJsID09IG1faW5pdGlhbFVSTCk7Ci0gICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgbV9pbml0
aWFsVVJMID0gVVJMKCk7Ci0KLSAgICAvLyBBbHdheXMgcmVyZWFkIGNvb2tpZXMgb24gYSByZWRp
cmVjdAotICAgIGlmIChyZWRpcmVjdENvdW50KQotICAgICAgICByZXJlYWRDb29raWVzID0gdHJ1
ZTsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdCBwbGF0Zm9ybVJl
cXVlc3Q7Ci0gICAgcmVxdWVzdC5pbml0aWFsaXplUGxhdGZvcm1SZXF1ZXN0KHBsYXRmb3JtUmVx
dWVzdCwgZnJhbWUtPmxvYWRlcigpICYmIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkgJiYgc3Rh
dGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKSktPmNvb2tpZXNFbmFibGVkKCksIGlzSW5pdGlhbCwgcmVyZWFkQ29va2llcyk7Ci0K
LSAgICAvLyBHVVJMIGFuZCBVUkwgY29uc2lkZXIgdmFsaWQgVVJMcyBkaWZmZXJlbnRseSwgZm9y
IGV4YW1wbGUgaHR0cDovLyBpcyBwYXJzZWQgYXMKLSAgICAvLyBodHRwOi8gYnkgVVJMIGFuZCBj
b25zaWRlcmVkIHZhbGlkLCB3aGlsZSBHVVJMIGNvbnNpZGVycyBpdCBpbnZhbGlkLgotICAgIGlm
ICghcGxhdGZvcm1SZXF1ZXN0LnVybCgpLmlzX3ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtOjpTdGF0dXNFcnJvckludmFsaWRVcmw7Ci0K
LSAgICBjb25zdCBTdHJpbmcmIGRvY3VtZW50VXJsID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
LnN0cmluZygpOwotICAgIGlmICghZG9jdW1lbnRVcmwuaXNFbXB0eSgpKQotICAgICAgICBwbGF0
Zm9ybVJlcXVlc3Quc2V0UmVmZXJyZXIoZG9jdW1lbnRVcmwpOwotCi0gICAgcGxhdGZvcm1SZXF1
ZXN0LnNldFNlY3VyaXR5T3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigp
LT50b1Jhd1N0cmluZygpKTsKLQotICAgIC8vIEF0dGFjaCBhbnkgYXBwbGljYWJsZSBhdXRoIGNy
ZWRlbnRpYWxzIHRvIHRoZSBOZXR3b3JrUmVxdWVzdC4KLSAgICBzZXRBdXRoQ3JlZGVudGlhbHMo
cGxhdGZvcm1SZXF1ZXN0LCBndWFyZEpvYi0+Z2V0SW50ZXJuYWwoKS0+bV9ob3N0V2ViQ2hhbGxl
bmdlKTsKLSAgICBzZXRBdXRoQ3JlZGVudGlhbHMocGxhdGZvcm1SZXF1ZXN0LCBndWFyZEpvYi0+
Z2V0SW50ZXJuYWwoKS0+bV9wcm94eVdlYkNoYWxsZW5nZSk7Ci0KLSAgICBpZiAoIXJlcXVlc3Qu
b3ZlcnJpZGVDb250ZW50VHlwZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcGxhdGZvcm1SZXF1ZXN0
LnNldE92ZXJyaWRlQ29udGVudFR5cGUocmVxdWVzdC5vdmVycmlkZUNvbnRlbnRUeXBlKCkpOwot
Ci0gICAgTmV0d29ya0pvYiogbmV0d29ya0pvYiA9IG5ldyBOZXR3b3JrSm9iOwotICAgIG5ldHdv
cmtKb2ItPmluaXRpYWxpemUocGxheWVySWQsIHBhZ2VHcm91cE5hbWUsIHVybCwgcGxhdGZvcm1S
ZXF1ZXN0LCBndWFyZEpvYiwgc3RyZWFtRmFjdG9yeSwgZnJhbWUsIGRlZmVyTG9hZGluZ0NvdW50
LCByZWRpcmVjdENvdW50KTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIG9ubHkgb25lIE5l
dHdvcmtKb2IgZm9yIG9uZSBSZXNvdXJjZUhhbmRsZS4KLSAgICBBU1NFUlQoIWZpbmRKb2JGb3JI
YW5kbGUoZ3VhcmRKb2IpKTsKLQotICAgIG1fam9icy5hcHBlbmQobmV0d29ya0pvYik7Ci0KLSAg
ICBzd2l0Y2ggKG5ldHdvcmtKb2ItPnN0cmVhbU9wZW4oKSkgewotICAgIGNhc2UgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbTo6UmVzdWx0T2s6Ci0gICAgICAgIHJldHVybiBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtOjpTdGF0dXNTdWNjZXNzOwotICAgIGNhc2Ug
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbTo6UmVzdWx0Tm90UmVhZHk6Ci0gICAg
ICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtOjpTdGF0dXNFcnJv
ck5vdFJlYWR5OwotICAgIGNhc2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbTo6
UmVzdWx0Tm90SGFuZGxlZDoKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBUaGlzIHNob3VsZCBu
ZXZlciBoYXBwZW4uCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtOjpT
dGF0dXNFcnJvckNvbm5lY3Rpb25GYWlsZWQ7Ci19Ci0KLWJvb2wgTmV0d29ya01hbmFnZXI6OnN0
b3BKb2IoUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gam9iKQotewotICAgIGlmIChOZXR3b3Jr
Sm9iKiBuZXR3b3JrSm9iID0gZmluZEpvYkZvckhhbmRsZShqb2IpKQotICAgICAgICByZXR1cm4g
IW5ldHdvcmtKb2ItPmNhbmNlbEpvYigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTmV0d29y
a0pvYiogTmV0d29ya01hbmFnZXI6OmZpbmRKb2JGb3JIYW5kbGUoUGFzc1JlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gam9iKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2pvYnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgTmV0d29ya0pvYiogbmV0d29ya0pvYiA9IG1fam9ic1tpXTsK
LSAgICAgICAgLy8gV2UgaGF2ZSBvbmx5IG9uZSBqb2IgZm9yIG9uZSBoYW5kbGUgKG5vdCBpbmNs
dWRpbmcgY2FuY2VsbGVkIGpvYnMgd2hpY2ggbWF5IGhhbmcKLSAgICAgICAgLy8gYXJvdW5kIGJy
aWVmbHkpLCBzbyByZXR1cm4gdGhlIGZpcnN0IG5vbi1jYW5jZWxsZWQgam9iLgotICAgICAgICBp
ZiAoIW5ldHdvcmtKb2ItPmlzQ2FuY2VsbGVkKCkgJiYgbmV0d29ya0pvYi0+aGFuZGxlKCkgPT0g
am9iKQotICAgICAgICAgICAgcmV0dXJuIG5ldHdvcmtKb2I7Ci0gICAgfQotICAgIHJldHVybiAw
OwotfQotCi12b2lkIE5ldHdvcmtNYW5hZ2VyOjpkZWxldGVKb2IoTmV0d29ya0pvYiogam9iKQot
ewotICAgIEFTU0VSVCgham9iLT5pc1J1bm5pbmcoKSk7Ci0gICAgc2l6ZV90IHBvc2l0aW9uID0g
bV9qb2JzLmZpbmQoam9iKTsKLSAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpCi0gICAgICAg
IG1fam9icy5yZW1vdmUocG9zaXRpb24pOwotICAgIGRlbGV0ZSBqb2I7Ci19Ci0KLXZvaWQgTmV0
d29ya01hbmFnZXI6OnNldERlZmVyc0xvYWRpbmcoUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4g
am9iLCBib29sIGRlZmVyc0xvYWRpbmcpCi17Ci0gICAgaWYgKE5ldHdvcmtKb2IqIG5ldHdvcmtK
b2IgPSBmaW5kSm9iRm9ySGFuZGxlKGpvYikpCi0gICAgICAgIG5ldHdvcmtKb2ItPnVwZGF0ZURl
ZmVyTG9hZGluZ0NvdW50KGRlZmVyc0xvYWRpbmcgPyAxIDogLTEpOwotfQotCi12b2lkIE5ldHdv
cmtNYW5hZ2VyOjpwYXVzZUxvYWQoUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gam9iLCBib29s
IHBhdXNlKQotewotICAgIGlmIChOZXR3b3JrSm9iKiBuZXR3b3JrSm9iID0gZmluZEpvYkZvckhh
bmRsZShqb2IpKQotICAgICAgICBuZXR3b3JrSm9iLT5zdHJlYW1QYXVzZShwYXVzZSk7Ci19Ci0K
LUJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJTdHJlYW0qIE5ldHdvcmtNYW5hZ2VyOjpzdHJl
YW1Gb3JIYW5kbGUoUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gam9iKQotewotICAgIE5ldHdv
cmtKb2IqIG5ldHdvcmtKb2IgPSBmaW5kSm9iRm9ySGFuZGxlKGpvYik7Ci0gICAgcmV0dXJuIG5l
dHdvcmtKb2IgPyBuZXR3b3JrSm9iLT53cmFwcGVkU3RyZWFtKCkgOiAwOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Js
YWNrYmVycnkvTmV0d29ya01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya01hbmFnZXIuaAkocmV2aXNpb24gMTYx
NTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdv
cmtNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIE5ldHdvcmtNYW5hZ2Vy
X2gKLSNkZWZpbmUgTmV0d29ya01hbmFnZXJfaAotCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVNpbmds
ZXRvbi5oPgotI2luY2x1ZGUgPG5ldHdvcmsvTmV0d29ya1JlcXVlc3QuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBQbGF0Zm9y
bSB7Ci1jbGFzcyBGaWx0ZXJTdHJlYW07Ci1jbGFzcyBOZXR3b3JrU3RyZWFtRmFjdG9yeTsKLX0K
LX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGcmFtZTsKLWNsYXNzIE5ldHdvcmtK
b2I7Ci0KLXZvaWQgcHJvdGVjdGlvblNwYWNlVG9QbGF0Zm9ybUF1dGgoY29uc3QgUHJvdGVjdGlv
blNwYWNlJiwgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpBdXRoVHlwZSYs
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6QXV0aFByb3RvY29sJiwgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpBdXRoU2NoZW1lJik7Ci0KLWNsYXNz
IE5ldHdvcmtNYW5hZ2VyIDogcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUaHJlYWRVbnNh
ZmVTaW5nbGV0b248TmV0d29ya01hbmFnZXI+IHsKLSAgICBTSU5HTEVUT05fREVGSU5JVElPTl9U
SFJFQURVTlNBRkUoTmV0d29ya01hbmFnZXIpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRJbml0aWFs
VVJMKGNvbnN0IFVSTCYgdXJsKSB7IG1faW5pdGlhbFVSTCA9IHVybDsgfQotICAgIFVSTCBpbml0
aWFsVVJMKCkgeyByZXR1cm4gbV9pbml0aWFsVVJMOyB9Ci0gICAgaW50IHN0YXJ0Sm9iKGludCBw
bGF5ZXJJZCwgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gam9iLCBGcmFtZSosIGJvb2wgZGVm
ZXJzTG9hZGluZyk7Ci0gICAgaW50IHN0YXJ0Sm9iKGludCBwbGF5ZXJJZCwgUGFzc1JlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gam9iLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBGcmFtZSosIGJvb2wg
ZGVmZXJzTG9hZGluZyk7Ci0gICAgYm9vbCBzdG9wSm9iKFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5k
bGU+KTsKLSAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRs
ZT4gam9iLCBib29sIGRlZmVyc0xvYWRpbmcpOwotICAgIHZvaWQgcGF1c2VMb2FkKFBhc3NSZWZQ
dHI8UmVzb3VyY2VIYW5kbGU+IGpvYiwgYm9vbCBwYXVzZSk7Ci0gICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkZpbHRlclN0cmVhbSogc3RyZWFtRm9ySGFuZGxlKFBhc3NSZWZQdHI8UmVzb3VyY2VI
YW5kbGU+KTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya0pvYjsKLQotICAg
IE5ldHdvcmtKb2IqIGZpbmRKb2JGb3JIYW5kbGUoUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4p
OwotICAgIHZvaWQgZGVsZXRlSm9iKE5ldHdvcmtKb2IqKTsKLSAgICBpbnQgc3RhcnRKb2IoaW50
IHBsYXllcklkLCBjb25zdCBTdHJpbmcmIHBhZ2VHcm91cE5hbWUsIFBhc3NSZWZQdHI8UmVzb3Vy
Y2VIYW5kbGU+LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
TmV0d29ya1N0cmVhbUZhY3RvcnkqLCBGcmFtZSosIGludCBkZWZlckxvYWRpbmdDb3VudCA9IDAs
IGludCByZWRpcmVjdENvdW50ID0gMCwgYm9vbCByZXJlYWRDb29raWVzID0gZmFsc2UpOwotCi0g
ICAgVmVjdG9yPE5ldHdvcmtKb2IqPiBtX2pvYnM7Ci0gICAgVVJMIG1faW5pdGlhbFVSTDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE5ldHdvcmtNYW5hZ2VyX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3Jr
U3RhdGVOb3RpZmllckJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrU3RhdGVOb3RpZmllckJsYWNrQmVy
cnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2JsYWNrYmVycnkvTmV0d29ya1N0YXRlTm90aWZpZXJCbGFja0JlcnJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRy
b2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya1N0YXRlTm90aWZpZXIuaCIKLQotI2luY2x1ZGUg
PEJsYWNrQmVycnlQbGF0Zm9ybVNldHRpbmdzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
TmV0d29ya1N0YXRlTm90aWZpZXI6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyKCkKLSAgICA6IG1faXNP
bkxpbmUoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5pc05ldHdv
cmtBdmFpbGFibGUoKSkKLXsKLX0KLQotdm9pZCBOZXR3b3JrU3RhdGVOb3RpZmllcjo6bmV0d29y
a1N0YXRlQ2hhbmdlKGJvb2wgb25saW5lKQotewotICAgIGlmIChtX2lzT25MaW5lID09IG9ubGlu
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc09uTGluZSA9IG9ubGluZTsKLQotICAgIG5v
dGlmeU5ldHdvcmtTdGF0ZUNoYW5nZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUHJveHlTZXJ2
ZXJCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2JsYWNrYmVycnkvUHJveHlTZXJ2ZXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYx
NTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Byb3h5
U2VydmVyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBCcmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3Jn
Pi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlByb3h5U2VydmVyLmgiCi0KLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVZlY3RvcjxQcm94eVNl
cnZlcj4gcHJveHlTZXJ2ZXJzRm9yVVJMKGNvbnN0IFVSTCYsIGNvbnN0IE5ldHdvcmtpbmdDb250
ZXh0KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBWZWN0b3I8UHJveHlT
ZXJ2ZXI+KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUVycm9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNl
RXJyb3IuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYg
UmVzb3VyY2VFcnJvcl9oCi0jZGVmaW5lIFJlc291cmNlRXJyb3JfaAotCi0jaW5jbHVkZSAiUmVz
b3VyY2VFcnJvckJhc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZXNvdXJj
ZUVycm9yIDogcHVibGljIFJlc291cmNlRXJyb3JCYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgaHR0cEVycm9yRG9tYWluOwotICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBwbGF0Zm9ybUVycm9yRG9tYWluOwotCi0gICAgUmVzb3VyY2VFcnJvcigpCi0gICAg
ewotICAgIH0KLQotICAgIFJlc291cmNlRXJyb3IoY29uc3QgU3RyaW5nJiBkb21haW4sIGludCBl
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZmFpbGluZ1VSTCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6
ZWREZXNjcmlwdGlvbikKLSAgICAgICAgOiBSZXNvdXJjZUVycm9yQmFzZShkb21haW4sIGVycm9y
Q29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVzY3JpcHRpb24pCi0gICAgewotICAgIH0KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFJlc291cmNlRXJyb3JfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNl
RXJyb3JCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNrQmVycnkuY3BwCShyZXZpc2lv
biAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VFcnJvckJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jb25zdCBjaGFyKiBjb25zdCBSZXNvdXJjZUVycm9yOjpodHRwRXJyb3JEb21haW4gPSAi
SFRUUCI7Ci1jb25zdCBjaGFyKiBjb25zdCBSZXNvdXJjZUVycm9yOjpwbGF0Zm9ybUVycm9yRG9t
YWluID0gIkJsYWNrQmVycnlQbGF0Zm9ybSI7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUhh
bmRsZUJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUhhbmRsZUJsYWNrQmVycnkuY3BwCShyZXZpc2lv
biAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxODcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLQotI2luY2x1ZGUg
IkV2ZW50TG9vcC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJD
bGllbnRCbGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dEJsYWNr
QmVycnkuaCIKLSNpbmNsdWRlICJOZXR3b3JrTWFuYWdlci5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cExvYWREZWZl
cnJlci5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZUNsaWVudC5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKLSNpbmNs
dWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0j
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIiAv
LyBmb3IgU3RvcmVkQ3JlZGVudGlhbHMKLQotI2luY2x1ZGUgPG5ldHdvcmsvRmlsdGVyU3RyZWFt
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViQ29yZVN5bmNocm9ub3VzTG9h
ZGVyIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBXZWJDb3Jl
U3luY2hyb25vdXNMb2FkZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIHVuc2ln
bmVkLCBpbnQpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFu
ZGxlKiwgZG91YmxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLQotICAgIFJlc291cmNlUmVzcG9uc2UgcmVzb3VyY2VS
ZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KLSAgICBSZXNvdXJjZUVycm9y
IHJlc291cmNlRXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9Ci0gICAgVmVjdG9yPGNo
YXI+IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KLSAgICBib29sIGlzRG9uZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNEb25lOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVzb3VyY2VSZXNwb25z
ZSBtX3Jlc3BvbnNlOwotICAgIFJlc291cmNlRXJyb3IgbV9lcnJvcjsKLSAgICBWZWN0b3I8Y2hh
cj4gbV9kYXRhOwotICAgIGJvb2wgbV9pc0RvbmU7Ci19OwotCi1XZWJDb3JlU3luY2hyb25vdXNM
b2FkZXI6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcigpCi0gICAgOiBtX2lzRG9uZShmYWxzZSkK
LXsKLX0KLQotdm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewot
ICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKLX0KLQotdm9pZCBXZWJDb3JlU3luY2hyb25vdXNM
b2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoLCBpbnQpCi17Ci0gICAgbV9kYXRhLmFwcGVuZChkYXRhLCBsZW5ndGgp
OwotfQotCi12b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhS
ZXNvdXJjZUhhbmRsZSosIGRvdWJsZSkKLXsKLSAgICBtX2lzRG9uZSA9IHRydWU7Ci19Ci0KLXZv
aWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29u
c3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgbV9lcnJvciA9IGVycm9yOwotICAgIG1f
aXNEb25lID0gdHJ1ZTsKLX0KLQotUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFu
ZGxlSW50ZXJuYWwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVJlc291cmNlSGFu
ZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJv
b2wgUmVzb3VyY2VIYW5kbGU6OmxvYWRzQmxvY2tlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3Jt
U2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCi17Ci0gICAgTmV0d29ya01hbmFn
ZXI6Omluc3RhbmNlKCktPnNldERlZmVyc0xvYWRpbmcodGhpcywgZGVmZXJzTG9hZGluZyk7Ci19
Ci0KLWJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KCkKLXsKLSAgICBpZiAoIWQtPm1fY29udGV4
dCB8fCAhZC0+bV9jb250ZXh0LT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIEZJWE1FOiBjbGVhbiB1cCB1c2Ugb2YgRnJhbWUgbm93IHRoYXQgd2UgaGF2ZSBOZXR3
b3JraW5nQ29udGV4dCAoc2VlIFJJTSBCdWcgIzE1MTUpCi0gICAgRnJhbWUqIGZyYW1lID0gc3Rh
dGljX2Nhc3Q8RnJhbWVOZXR3b3JraW5nQ29udGV4dEJsYWNrQmVycnkqPihkLT5tX2NvbnRleHQu
Z2V0KCkpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5sb2FkZXIoKSB8fCAh
ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSB8fCAhY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpbnQgcGxheWVySWQgPSBzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEJs
YWNrQmVycnkqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+cGxheWVySWQoKTsKLSAgICBp
ZiAoTmV0d29ya01hbmFnZXI6Omluc3RhbmNlKCktPnN0YXJ0Sm9iKHBsYXllcklkLCB0aGlzLCBm
cmFtZSwgZC0+bV9kZWZlcnNMb2FkaW5nKSAhPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVy
U3RyZWFtOjpTdGF0dXNTdWNjZXNzKQotICAgICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVS
TEZhaWx1cmUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpw
YXVzZUxvYWQoYm9vbCBwYXVzZSkKLXsKLSAgICBpZiAoTmV0d29ya01hbmFnZXI6Omluc3RhbmNl
KCkpCi0gICAgICAgIE5ldHdvcmtNYW5hZ2VyOjppbnN0YW5jZSgpLT5wYXVzZUxvYWQodGhpcywg
cGF1c2UpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQotewotICAgIE5ldHdv
cmtNYW5hZ2VyOjppbnN0YW5jZSgpLT5zdG9wSm9iKHRoaXMpOwotICAgIHNldENsaWVudCgwKTsK
LX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKLXsKLSAgICBpZiAoIWNvbnRl
eHQgfHwgIWNvbnRleHQtPmlzVmFsaWQoKSkgewotICAgICAgICBBU1NFUlQoZmFsc2UgJiYgImxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkgY2FsbGVkIHdpdGggaW52YWxpZCBuZXR3b3JraW5nIGNv
bnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBjbGVhbiB1
cCB1c2Ugb2YgRnJhbWUgbm93IHRoYXQgd2UgaGF2ZSBOZXR3b3JraW5nQ29udGV4dCAoc2VlIFJJ
TSBCdWcgIzE1MTUpCi0gICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWVOZXR3b3Jr
aW5nQ29udGV4dEJsYWNrQmVycnkqPihjb250ZXh0KS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1l
IHx8ICFmcmFtZS0+bG9hZGVyKCkgfHwgIWZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkgfHwgIWZy
YW1lLT5wYWdlKCkpIHsKLSAgICAgICAgQVNTRVJUKGZhbHNlICYmICJsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5IGNhbGxlZCB3aXRob3V0IGEgZnJhbWUgb3IgZnJhbWUgY2xpZW50Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBQYWdlR3JvdXBMb2FkRGVmZXJyZXIgZGVmZXJyZXIo
ZnJhbWUtPnBhZ2UoKSwgdHJ1ZSk7Ci0gICAgVGltZXJCYXNlOjpmaXJlVGltZXJzSW5OZXN0ZWRF
dmVudExvb3AoKTsKLQotICAgIGludCBwbGF5ZXJJZCA9IHN0YXRpY19jYXN0PEZyYW1lTG9hZGVy
Q2xpZW50QmxhY2tCZXJyeSo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5wbGF5ZXJJZCgp
OwotCi0gICAgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIHN5bmNMb2FkZXI7Ci0KLSAgICBib29s
IGRlZmVyc0xvYWRpbmcgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZENvbnRlbnRTbmlmZiA9IGZh
bHNlOwotCi0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJlZihuZXcg
UmVzb3VyY2VIYW5kbGUoY29udGV4dCwgcmVxdWVzdCwgJnN5bmNMb2FkZXIsIGRlZmVyc0xvYWRp
bmcsIHNob3VsZENvbnRlbnRTbmlmZikpOwotICAgIGludCBzdGF0dXMgPSBOZXR3b3JrTWFuYWdl
cjo6aW5zdGFuY2UoKS0+c3RhcnRKb2IocGxheWVySWQsIGhhbmRsZSwgZnJhbWUsIGRlZmVyc0xv
YWRpbmcpOwotICAgIGlmIChzdGF0dXMgIT0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0
cmVhbTo6U3RhdHVzU3VjY2VzcykgewotICAgICAgICBoYW5kbGUtPmNhbmNlbCgpOwotICAgICAg
ICBlcnJvciA9IFJlc291cmNlRXJyb3IoUmVzb3VyY2VFcnJvcjo6cGxhdGZvcm1FcnJvckRvbWFp
biwgc3RhdHVzLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nOjplbXB0eVN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNv
bnN0IGRvdWJsZSBzeW5jTG9hZFRpbWVPdXQgPSA2MDsgLy8gc2Vjb25kcwotCi0gICAgZG91Ymxl
IHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgRXZlbnRMb29wIGxvb3A7Ci0gICAgd2hp
bGUgKCFzeW5jTG9hZGVyLmlzRG9uZSgpICYmICFsb29wLmVuZGVkKCkpIHsKLSAgICAgICAgbG9v
cC5jeWNsZSgpOwotICAgICAgICBpZiAoY3VycmVudFRpbWUoKSAtIHN0YXJ0VGltZSA+IHN5bmNM
b2FkVGltZU91dCkgewotICAgICAgICAgICAgaGFuZGxlLT5jYW5jZWwoKTsKLSAgICAgICAgICAg
IGVycm9yID0gUmVzb3VyY2VFcnJvcihSZXNvdXJjZUVycm9yOjpwbGF0Zm9ybUVycm9yRG9tYWlu
LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtOjpTdGF0dXNOZXR3b3JrRXJyb3Is
IHJlcXVlc3QudXJsKCkuc3RyaW5nKCksICJUaW1lIG91dCIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZXJyb3IgPSBzeW5jTG9hZGVyLnJlc291cmNlRXJy
b3IoKTsKLSAgICBkYXRhID0gc3luY0xvYWRlci5kYXRhKCk7Ci0gICAgcmVzcG9uc2UgPSBzeW5j
TG9hZGVyLnJlc291cmNlUmVzcG9uc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNl
UmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
YmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgUmVzb3VyY2VSZXF1ZXN0X2gKLSNkZWZpbmUg
UmVzb3VyY2VSZXF1ZXN0X2gKLQotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdEJhc2UuaCIKLQot
bmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFBsYXRmb3JtIHsKLWNsYXNzIE5ldHdv
cmtSZXF1ZXN0OwotfQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlc291cmNl
UmVxdWVzdCA6IHB1YmxpYyBSZXNvdXJjZVJlcXVlc3RCYXNlIHsKLXB1YmxpYzoKLSAgICAvLyBU
aGUgdHlwZSBvZiB0aGlzIFJlc291cmNlUmVxdWVzdCwgYmFzZWQgb24gaG93IHRoZSByZXNvdXJj
ZSB3aWxsIGJlIHVzZWQuCi0gICAgZW51bSBUYXJnZXRUeXBlIHsKLSAgICAgICAgVGFyZ2V0SXNN
YWluRnJhbWUsCi0gICAgICAgIFRhcmdldElzU3ViZnJhbWUsCi0gICAgICAgIFRhcmdldElzU3Vi
cmVzb3VyY2UsIC8vIFJlc291cmNlIGlzIGEgZ2VuZXJpYyBzdWJyZXNvdXJjZS4gKEdlbmVyYWxs
eSBhIHNwZWNpZmljIHR5cGUgc2hvdWxkIGJlIHNwZWNpZmllZCkKLSAgICAgICAgVGFyZ2V0SXNT
dHlsZVNoZWV0LAotICAgICAgICBUYXJnZXRJc1NjcmlwdCwKLSAgICAgICAgVGFyZ2V0SXNGb250
UmVzb3VyY2UsCi0gICAgICAgIFRhcmdldElzSW1hZ2UsCi0gICAgICAgIFRhcmdldElzT2JqZWN0
LAotICAgICAgICBUYXJnZXRJc01lZGlhLAotICAgICAgICBUYXJnZXRJc1dvcmtlciwKLSAgICAg
ICAgVGFyZ2V0SXNTaGFyZWRXb3JrZXIsCi0gICAgICAgIFRhcmdldElzUHJlZmV0Y2gsCi0gICAg
ICAgIFRhcmdldElzRmF2aWNvbiwKLSAgICAgICAgVGFyZ2V0SXNYSFIsCi0gICAgICAgIFRhcmdl
dElzVGV4dFRyYWNrLAotICAgICAgICBUYXJnZXRJc1Vuc3BlY2lmaWVkLAotICAgIH07Ci0gICAg
UmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKQotICAgICAgICA6IFJlc291cmNlUmVx
dWVzdEJhc2UoVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGlj
eSkKLSAgICAgICAgLCBtX2lzWE1MSFRUUFJlcXVlc3QoZmFsc2UpCi0gICAgICAgICwgbV9tdXN0
SGFuZGxlSW50ZXJuYWxseShmYWxzZSkKLSAgICAgICAgLCBtX2ZvcmNlRG93bmxvYWQoZmFsc2Up
Ci0gICAgICAgICwgbV90YXJnZXRUeXBlKFRhcmdldElzVW5zcGVjaWZpZWQpCi0gICAgewotICAg
IH0KLQotICAgIFJlc291cmNlUmVxdWVzdChjb25zdCBVUkwmIHVybCkKLSAgICAgICAgOiBSZXNv
dXJjZVJlcXVlc3RCYXNlKHVybCwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKLSAgICAgICAgLCBt
X2lzWE1MSFRUUFJlcXVlc3QoZmFsc2UpCi0gICAgICAgICwgbV9tdXN0SGFuZGxlSW50ZXJuYWxs
eShmYWxzZSkKLSAgICAgICAgLCBtX2ZvcmNlRG93bmxvYWQoZmFsc2UpCi0gICAgICAgICwgbV90
YXJnZXRUeXBlKFRhcmdldElzVW5zcGVjaWZpZWQpCi0gICAgewotICAgIH0KLQotICAgIFJlc291
cmNlUmVxdWVzdChjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3Vy
Y2VSZXF1ZXN0Q2FjaGVQb2xpY3kgcG9saWN5ID0gVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKLSAg
ICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgcG9saWN5KQotICAgICAgICAsIG1faXNY
TUxIVFRQUmVxdWVzdChmYWxzZSkKLSAgICAgICAgLCBtX211c3RIYW5kbGVJbnRlcm5hbGx5KGZh
bHNlKQotICAgICAgICAsIG1fZm9yY2VEb3dubG9hZChmYWxzZSkKLSAgICAgICAgLCBtX3Rhcmdl
dFR5cGUoVGFyZ2V0SXNVbnNwZWNpZmllZCkKLSAgICB7Ci0gICAgICAgIHNldEhUVFBSZWZlcnJl
cihyZWZlcnJlcik7Ci0gICAgfQotCi0gICAgUmVzb3VyY2VSZXF1ZXN0KCkKLSAgICAgICAgOiBS
ZXNvdXJjZVJlcXVlc3RCYXNlKFVSTCgpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQotICAgICAg
ICAsIG1faXNYTUxIVFRQUmVxdWVzdChmYWxzZSkKLSAgICAgICAgLCBtX211c3RIYW5kbGVJbnRl
cm5hbGx5KGZhbHNlKQotICAgICAgICAsIG1fZm9yY2VEb3dubG9hZChmYWxzZSkKLSAgICAgICAg
LCBtX3RhcmdldFR5cGUoVGFyZ2V0SXNVbnNwZWNpZmllZCkKLSAgICB7Ci0gICAgfQotCi0gICAg
dm9pZCBzZXRUb2tlbihjb25zdCBTdHJpbmcmIHRva2VuKSB7IG1fdG9rZW4gPSB0b2tlbjsgfQot
ICAgIFN0cmluZyB0b2tlbigpIGNvbnN0IHsgcmV0dXJuIG1fdG9rZW47IH0KLQotICAgIC8vIEZJ
WE1FOiBGb3IgUklNIEJ1ZyAjNDUyLiBUaGUgQmxhY2tCZXJyeSBhcHBsaWNhdGlvbiB3YW50cyB0
aGUgYW5jaG9yIHRleHQgZm9yIGEgY2xpY2tlZCBoeXBlcmxpbmsgc28gYXMgdG8KLSAgICAvLyBt
YWtlIGFuIGluZm9ybWVkIGRlY2lzaW9uIGFzIHRvIHdoZXRoZXIgdG8gYWxsb3cgdGhlIG5hdmln
YXRpb24uIFdlIHNob3VsZCBtb3ZlIHRoaXMgZnVuY3Rpb25hbGl0eSBpbnRvIGEKLSAgICAvLyBV
SS9Qb2xpY3kgZGVsZWdhdGUuCi0gICAgdm9pZCBzZXRBbmNob3JUZXh0KGNvbnN0IFN0cmluZyYg
YW5jaG9yVGV4dCkgeyBtX2FuY2hvclRleHQgPSBhbmNob3JUZXh0OyB9Ci0gICAgU3RyaW5nIGFu
Y2hvclRleHQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclRleHQ7IH0KLQotICAgIHZvaWQgc2V0
T3ZlcnJpZGVDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSB7IG1fb3ZlcnJp
ZGVDb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOyB9Ci0gICAgU3RyaW5nIG92ZXJyaWRlQ29udGVu
dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlQ29udGVudFR5cGU7IH0KLQotICAgIHZv
aWQgc2V0SXNYTUxIVFRQUmVxdWVzdChib29sIGlzWE1MSFRUUFJlcXVlc3QpIHsgbV9pc1hNTEhU
VFBSZXF1ZXN0ID0gaXNYTUxIVFRQUmVxdWVzdDsgfQotICAgIGJvb2wgaXNYTUxIVFRQUmVxdWVz
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYTUxIVFRQUmVxdWVzdDsgfQotCi0gICAgLy8gTWFya3Mg
cmVxdWVzdHMgd2hpY2ggbXVzdCBiZSBoYW5kbGVkIGJ5IHdlYmtpdCBldmVuIGlmIExpbmtzSGFu
ZGxlZEV4dGVybmFsbHkgaXMgc2V0LgotICAgIHZvaWQgc2V0TXVzdEhhbmRsZUludGVybmFsbHko
Ym9vbCBtdXN0SGFuZGxlSW50ZXJuYWxseSkgeyBtX211c3RIYW5kbGVJbnRlcm5hbGx5ID0gbXVz
dEhhbmRsZUludGVybmFsbHk7IH0KLSAgICBib29sIG11c3RIYW5kbGVJbnRlcm5hbGx5KCkgY29u
c3QgeyByZXR1cm4gbV9tdXN0SGFuZGxlSW50ZXJuYWxseTsgfQotCi0gICAgdm9pZCBpbml0aWFs
aXplUGxhdGZvcm1SZXF1ZXN0KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdCYs
IGJvb2wgY29va2llc0VuYWJsZWQsIGJvb2wgaXNJbml0aWFsID0gZmFsc2UsIGJvb2wgcmVyZWFk
Q29va2llcyA9IGZhbHNlKSBjb25zdDsKLSAgICB2b2lkIHNldEZvcmNlRG93bmxvYWQoYm9vbCBm
b3JjZURvd25sb2FkKSB7IG1fZm9yY2VEb3dubG9hZCA9IGZvcmNlRG93bmxvYWQ7IH0KLSAgICBi
b29sIGZvcmNlRG93bmxvYWQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlRG93bmxvYWQ7IH0KLSAg
ICB2b2lkIHNldFN1Z2dlc3RlZFNhdmVOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX3N1Z2dl
c3RlZFNhdmVOYW1lID0gbmFtZTsgfQotICAgIFN0cmluZyBzdWdnZXN0ZWRTYXZlTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3VnZ2VzdGVkU2F2ZU5hbWU7IH0KLQotICAgIC8vIFdoYXQgdGhpcyBy
ZXF1ZXN0IGlzIGZvci4KLSAgICBUYXJnZXRUeXBlIHRhcmdldFR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3RhcmdldFR5cGU7IH0KLSAgICB2b2lkIHNldFRhcmdldFR5cGUoVGFyZ2V0VHlwZSB0eXBl
KSB7IG1fdGFyZ2V0VHlwZSA9IHR5cGU7IH0KLQotICAgIHN0YXRpYyBUYXJnZXRUeXBlIHRhcmdl
dFR5cGVGcm9tTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0KLSAgICB2b2lkIGNs
ZWFySFRUUENvbnRlbnRMZW5ndGgoKTsKLSAgICB2b2lkIGNsZWFySFRUUENvbnRlbnRUeXBlKCk7
Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFJlc291cmNlUmVxdWVzdEJhc2U7Ci0KLSAg
ICBTdHJpbmcgbV90b2tlbjsKLSAgICBTdHJpbmcgbV9hbmNob3JUZXh0OwotICAgIFN0cmluZyBt
X292ZXJyaWRlQ29udGVudFR5cGU7Ci0gICAgU3RyaW5nIG1fc3VnZ2VzdGVkU2F2ZU5hbWU7Ci0g
ICAgYm9vbCBtX2lzWE1MSFRUUFJlcXVlc3Q7Ci0gICAgYm9vbCBtX211c3RIYW5kbGVJbnRlcm5h
bGx5OwotICAgIGJvb2wgbV9mb3JjZURvd25sb2FkOwotICAgIFRhcmdldFR5cGUgbV90YXJnZXRU
eXBlOwotCi0gICAgdm9pZCBkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpIHsgfQotICAgIHZvaWQg
ZG9VcGRhdGVSZXNvdXJjZVJlcXVlc3QoKSB7IH0KLSAgICB2b2lkIGRvVXBkYXRlUGxhdGZvcm1I
VFRQQm9keSgpIHsgfQotICAgIHZvaWQgZG9VcGRhdGVSZXNvdXJjZUhUVFBCb2R5KCkgeyB9Ci0K
LSAgICBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gZG9QbGF0Zm9y
bUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPikgY29u
c3Q7Ci0gICAgdm9pZCBkb1BsYXRmb3JtQWRvcHQoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291
cmNlUmVxdWVzdERhdGE+KTsKLX07Ci0KLXN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVz
dERhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhQmFzZSB7Ci0gICAg
U3RyaW5nIG1fdG9rZW47Ci0gICAgU3RyaW5nIG1fYW5jaG9yVGV4dDsKLSAgICBTdHJpbmcgbV9v
dmVycmlkZUNvbnRlbnRUeXBlOwotICAgIFN0cmluZyBtX3N1Z2dlc3RlZFNhdmVOYW1lOwotICAg
IGJvb2wgbV9pc1hNTEhUVFBSZXF1ZXN0OwotICAgIGJvb2wgbV9tdXN0SGFuZGxlSW50ZXJuYWxs
eTsKLSAgICBib29sIG1fZm9yY2VEb3dubG9hZDsKLSAgICBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdl
dFR5cGUgbV90YXJnZXRUeXBlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gUmVzb3VyY2VSZXF1ZXN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VS
ZXF1ZXN0QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwyNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0KLSNpbmNsdWRlICJCbG9iUmVnaXN0cnlJbXBsLmgi
Ci0jaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgotI2luY2x1ZGUgPG5ldHdvcmsvTmV0d29ya1Jl
cXVlc3QuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0Owot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENv
bm5lY3Rpb25Db3VudFBlckhvc3QoKQotewotICAgIHJldHVybiAxMDAwMDsKLX0KLQotc3RhdGlj
IGlubGluZSBOZXR3b3JrUmVxdWVzdDo6Q2FjaGVQb2xpY3kgcGxhdGZvcm1DYWNoZVBvbGljeUZv
clJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHN3aXRjaCAo
cmVxdWVzdC5jYWNoZVBvbGljeSgpKSB7Ci0gICAgY2FzZSBXZWJDb3JlOjpVc2VQcm90b2NvbENh
Y2hlUG9saWN5OgotICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlVzZVByb3RvY29sQ2Fj
aGVQb2xpY3k7Ci0gICAgY2FzZSBXZWJDb3JlOjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YToKLSAg
ICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YTsKLSAg
ICBjYXNlIFdlYkNvcmU6OlJldHVybkNhY2hlRGF0YUVsc2VMb2FkOgotICAgICAgICByZXR1cm4g
TmV0d29ya1JlcXVlc3Q6OlJldHVybkNhY2hlRGF0YUVsc2VMb2FkOwotICAgIGNhc2UgV2ViQ29y
ZTo6UmV0dXJuQ2FjaGVEYXRhRG9udExvYWQ6Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVz
dDo6UmV0dXJuQ2FjaGVEYXRhRG9udExvYWQ7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IE5ldHdvcmtSZXF1ZXN0OjpVc2VQcm90b2NvbENhY2hlUG9saWN5OwotICAgIH0KLX0KLQotc3Rh
dGljIGlubGluZSBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0VHlwZSBwbGF0Zm9ybVRhcmdldFR5cGVG
b3JSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBpZiAocmVx
dWVzdC5pc1hNTEhUVFBSZXF1ZXN0KCkpCi0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6
VGFyZ2V0SXNYTUxIVFRQUmVxdWVzdDsKLSAgICBpZiAocmVxdWVzdC5mb3JjZURvd25sb2FkKCkp
Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNEb3dubG9hZDsKLQotICAg
IHN3aXRjaCAocmVxdWVzdC50YXJnZXRUeXBlKCkpIHsKLSAgICBjYXNlIFJlc291cmNlUmVxdWVz
dDo6VGFyZ2V0SXNNYWluRnJhbWU6Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFy
Z2V0SXNNYWluRnJhbWU7Ci0gICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU3ViZnJh
bWU6Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNTdWJmcmFtZTsKLSAg
ICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTdWJyZXNvdXJjZToKLSAgICAgICAgcmV0
dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1N1YnJlc291cmNlOwotICAgIGNhc2UgUmVzb3Vy
Y2VSZXF1ZXN0OjpUYXJnZXRJc1N0eWxlU2hlZXQ6Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVx
dWVzdDo6VGFyZ2V0SXNTdHlsZVNoZWV0OwotICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJn
ZXRJc1NjcmlwdDoKLSAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1Njcmlw
dDsKLSAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNGb250UmVzb3VyY2U6Ci0gICAg
ICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNGb250UmVzb3VyY2U7Ci0gICAgY2Fz
ZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzSW1hZ2U6Ci0gICAgICAgIHJldHVybiBOZXR3b3Jr
UmVxdWVzdDo6VGFyZ2V0SXNJbWFnZTsKLSAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0
SXNPYmplY3Q6Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNPYmplY3Q7
Ci0gICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzTWVkaWE6Ci0gICAgICAgIHJldHVy
biBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNNZWRpYTsKLSAgICBjYXNlIFJlc291cmNlUmVxdWVz
dDo6VGFyZ2V0SXNXb3JrZXI6Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0
SXNXb3JrZXI7Ci0gICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU2hhcmVkV29ya2Vy
OgotICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzU2hhcmVkV29ya2VyOwot
Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIG5lZWQgdG8gYmUgdXBkYXRlZCB0byB0aGUgcmlnaHQg
dmFsdWUsIGJ1dAotICAgICAgICAvLyB3ZSBuZWVkIHRvIGNvb3JkaW5hdGUgd2l0aCBBSVIgYXBp
IGNoYW5nZS4KLSAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNGYXZpY29uOgotICAg
ICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzSW1hZ2U7Ci0gICAgY2FzZSBSZXNv
dXJjZVJlcXVlc3Q6OlRhcmdldElzUHJlZmV0Y2g6Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVx
dWVzdDo6VGFyZ2V0SXNTdWJyZXNvdXJjZTsKLSAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFy
Z2V0SXNYSFI6Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNTdWJyZXNv
dXJjZTsKLSAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNUZXh0VHJhY2s6Ci0gICAg
ICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNTdWJyZXNvdXJjZTsKLSAgICBjYXNl
IFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNVbnNwZWNpZmllZDoKLSAgICAgICAgcmV0dXJuIE5l
dHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1N1YnJlc291cmNlOwotCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6
VGFyZ2V0SXNVbmtub3duOwotICAgIH0KLX0KLQotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVz
b3VyY2VSZXF1ZXN0OjpUYXJnZXRUeXBlPiBNaW1lVHlwZVJlc291cmNlUmVxdWVzdFR5cGVNYXA7
Ci0KLXN0YXRpYyBjb25zdCBNaW1lVHlwZVJlc291cmNlUmVxdWVzdFR5cGVNYXAmIG1pbWVUeXBl
UmVxdWVzdFR5cGVNYXAoKQotewotICAgIHN0YXRpYyBNaW1lVHlwZVJlc291cmNlUmVxdWVzdFR5
cGVNYXAqIG1hcCA9IDA7Ci0gICAgaWYgKCFtYXApIHsKLSAgICAgICAgbWFwID0gbmV3IE1pbWVU
eXBlUmVzb3VyY2VSZXF1ZXN0VHlwZU1hcDsKLQotICAgICAgICBpZiAobWFwKSB7Ci0gICAgICAg
ICAgICAvLyBUaGUgbGlzdCBoZXJlIHNob3VsZCBtYXRjaCBleHRlbnNpb25NYXBbXSBpbiBNSU1F
VHlwZVJlZ2lzdHJ5QmxhY2tCZXJyeS5jcHAKLSAgICAgICAgICAgIG1hcC0+YWRkKFN0cmluZygi
dGV4dC9jc3MiKSwgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1N0eWxlU2hlZXQpOwotICAgICAg
ICAgICAgbWFwLT5hZGQoU3RyaW5nKCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKSwgUmVzb3Vy
Y2VSZXF1ZXN0OjpUYXJnZXRJc1NjcmlwdCk7Ci0gICAgICAgICAgICBtYXAtPmFkZChTdHJpbmco
ImltYWdlL2JtcCIpLCBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzSW1hZ2UpOwotICAgICAgICAg
ICAgbWFwLT5hZGQoU3RyaW5nKCJpbWFnZS9naWYiKSwgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJ
c0ltYWdlKTsKLSAgICAgICAgICAgIG1hcC0+YWRkKFN0cmluZygiaW1hZ2UveC1pY29uIiksIFJl
c291cmNlUmVxdWVzdDo6VGFyZ2V0SXNJbWFnZSk7Ci0gICAgICAgICAgICBtYXAtPmFkZChTdHJp
bmcoImltYWdlL2pwZWciKSwgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc0ltYWdlKTsKLSAgICAg
ICAgICAgIG1hcC0+YWRkKFN0cmluZygiaW1hZ2UvcG5nIiksIFJlc291cmNlUmVxdWVzdDo6VGFy
Z2V0SXNJbWFnZSk7Ci0gICAgICAgICAgICBtYXAtPmFkZChTdHJpbmcoImltYWdlL3gtcG9ydGFi
bGUtYml0bWFwIiksIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNJbWFnZSk7Ci0gICAgICAgICAg
ICBtYXAtPmFkZChTdHJpbmcoImltYWdlL3gtcG9ydGFibGUtZ3JheW1hcCIpLCBSZXNvdXJjZVJl
cXVlc3Q6OlRhcmdldElzSW1hZ2UpOwotICAgICAgICAgICAgbWFwLT5hZGQoU3RyaW5nKCJpbWFn
ZS94LXBvcnRhYmxlLXBpeG1hcCIpLCBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzSW1hZ2UpOwot
ICAgICAgICAgICAgbWFwLT5hZGQoU3RyaW5nKCJpbWFnZS9zdmcreG1sIiksIFJlc291cmNlUmVx
dWVzdDo6VGFyZ2V0SXNJbWFnZSk7Ci0gICAgICAgICAgICBtYXAtPmFkZChTdHJpbmcoImltYWdl
L3RpZmYiKSwgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc0ltYWdlKTsKLSAgICAgICAgICAgIG1h
cC0+YWRkKFN0cmluZygiaW1hZ2UveC14Yml0bWFwIiksIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0
SXNJbWFnZSk7Ci0gICAgICAgICAgICBtYXAtPmFkZChTdHJpbmcoImltYWdlL3gteHBtIiksIFJl
c291cmNlUmVxdWVzdDo6VGFyZ2V0SXNJbWFnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gKm1hcDsKLX0KLQotUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRUeXBlIFJlc291cmNlUmVx
dWVzdDo6dGFyZ2V0VHlwZUZyb21NaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewot
ICAgIGNvbnN0IE1pbWVUeXBlUmVzb3VyY2VSZXF1ZXN0VHlwZU1hcCYgbWFwID0gbWltZVR5cGVS
ZXF1ZXN0VHlwZU1hcCgpOwotCi0gICAgTWltZVR5cGVSZXNvdXJjZVJlcXVlc3RUeXBlTWFwOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbWFwLmZpbmQobWltZVR5cGUpOwotICAgIGlmIChpdGVyID09
IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNVbnNw
ZWNpZmllZDsKLQotICAgIHJldHVybiBpdGVyLT52YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZVJl
cXVlc3Q6OmluaXRpYWxpemVQbGF0Zm9ybVJlcXVlc3QoTmV0d29ya1JlcXVlc3QmIHBsYXRmb3Jt
UmVxdWVzdCwgYm9vbCBjb29raWVzRW5hYmxlZCwgYm9vbCBpc0luaXRpYWwsIGJvb2wgcmVyZWFk
Q29va2llcykgY29uc3QKLXsKLSAgICAvLyBJZiB0aGlzIGlzIHRoZSBpbml0aWFsIGxvYWQsIHNr
aXAgdGhlIHJlcXVlc3QgYm9keSBhbmQgaGVhZGVycy4KLSAgICBpZiAoaXNJbml0aWFsKQotICAg
ICAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0UmVxdWVzdEluaXRpYWwodGltZW91dEludGVydmFsKCkp
OwotICAgIGVsc2UgewotICAgICAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0UmVxdWVzdFVybCh1cmwo
KS5zdHJpbmcoKSwKLSAgICAgICAgICAgIGh0dHBNZXRob2QoKSwKLSAgICAgICAgICAgICAgICBw
bGF0Zm9ybUNhY2hlUG9saWN5Rm9yUmVxdWVzdCgqdGhpcyksCi0gICAgICAgICAgICAgICAgcGxh
dGZvcm1UYXJnZXRUeXBlRm9yUmVxdWVzdCgqdGhpcyksCi0gICAgICAgICAgICAgICAgdGltZW91
dEludGVydmFsKCkpOwotCi0gICAgICAgIHBsYXRmb3JtUmVxdWVzdC5zZXRDb25kaXRpb25hbChp
c0NvbmRpdGlvbmFsKCkpOwotICAgICAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0U3VnZ2VzdGVkU2F2
ZU5hbWUoc3VnZ2VzdGVkU2F2ZU5hbWUoKSk7Ci0KLSAgICAgICAgaWYgKGh0dHBCb2R5KCkgJiYg
IWh0dHBCb2R5KCktPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPEZvcm1EYXRhPiBm
b3JtRGF0YSA9IGh0dHBCb2R5KCk7Ci0jaWYgRU5BQkxFKEJMT0IpCi0gICAgICAgICAgICBmb3Jt
RGF0YSA9IGZvcm1EYXRhLT5yZXNvbHZlQmxvYlJlZmVyZW5jZXMoKTsKLSNlbmRpZgotICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4mIGVsZW1lbnRzID0gZm9ybURhdGEt
PmVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAvLyBVc2Ugc2V0RGF0YSBmb3Igc2ltcGxlIGZvcm1z
IGJlY2F1c2UgaXQgaXMgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQuCi0gICAgICAgICAgICBpZiAo
ZWxlbWVudHMuc2l6ZSgpID09IDEgJiYgZWxlbWVudHNbMF0ubV90eXBlID09IEZvcm1EYXRhRWxl
bWVudDo6ZGF0YSkKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0RGF0YShlbGVt
ZW50c1swXS5tX2RhdGEuZGF0YSgpLCBlbGVtZW50c1swXS5tX2RhdGEuc2l6ZSgpKTsKLSAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
bGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtRGF0
YUVsZW1lbnQmIGVsZW1lbnQgPSBlbGVtZW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5hZGRNdWx0aXBhcnREYXRhKGVsZW1lbnQubV9kYXRh
LmRhdGEoKSwgZWxlbWVudC5tX2RhdGEuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5hZGRNdWx0aXBhcnRGaWxlbmFt
ZShlbGVtZW50Lm1fZmlsZW5hbWUuY2hhcmFjdGVycygpLCBlbGVtZW50Lm1fZmlsZW5hbWUubGVu
Z3RoKCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQmxvYnMgc2hvdWxkIGJlIHJlc29sdmVkIGF0IHRo
aXMgcG9pbnQuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gV2hlbiBSZXNvdXJjZVJlcXVlc3QgaXMgcmV1c2VkIGJ5IENhY2hlUmVzb3Vy
Y2VMb2FkZXIsIHBhZ2UgcmVmcmVzaGluZyBvciByZWRpcmVjdGlvbiwgaXRzIGNvb2tpZXMgbWF5
IGJlIGRpcnRpZWQuIFdlIHdvbid0IHVzZSB0aGVzZSBjb29raWVzIGFueSBtb3JlLgotICAgICAg
ICBib29sIGNvb2tpZUhlYWRlck1heUJlRGlydHkgPSByZXJlYWRDb29raWVzIHx8IGNhY2hlUG9s
aWN5KCkgPT0gV2ViQ29yZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGEgfHwgY2FjaGVQb2xpY3ko
KSA9PSBXZWJDb3JlOjpSZXR1cm5DYWNoZURhdGFFbHNlTG9hZDsKLQotICAgICAgICBmb3IgKEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygpLmJlZ2lu
KCk7IGl0ICE9IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAg
U3RyaW5nIGtleSA9IGl0LT5rZXk7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+dmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIWtleS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2Uoa2V5LCAiQ29va2llIikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gV2Ugd29uJ3QgdXNlIHRoZSBvbGQgY29va2llcyBvZiByZXNvdXJjZVJlcXVlc3QgZm9y
IG5ldyBsb2NhdGlvbiBiZWNhdXNlIHRoZXNlIGNvb2tpZXMgbWF5IGJlIGNoYW5nZWQgYnkgcmVk
aXJlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIGlmIChjb29raWVIZWFkZXJNYXlCZURpcnR5
KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2hlY2sgdGhlIGVuY29kaW5nIGFuZCBlbmNvZGUgdGhlIGNvb2tpZSdz
IHZhbHVlIHVzaW5nIGxhdGluMSBvciB1dGY4IHRvIHN1cHBvcnQgdW5pY29kZSBkYXRhLgotICAg
ICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmNvbnRhaW5zT25seUxhdGluMSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybVJlcXVlc3QuYWRkSGVhZGVyKCJDb29raWUiLCB2
YWx1ZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHBsYXRmb3JtUmVxdWVzdC5hZGRIZWFkZXIoa2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBJZiByZXF1ZXN0J3MgY29va2llcyBtYXkgYmUgZGlydHks
IHRoZXkgbXVzdCBiZSBzZXQgYWdhaW4uCi0gICAgICAgIC8vIElmIHRoZXJlIGFyZW4ndCBjb29r
aWVzIGluIHRoZSBoZWFkZXIgbGlzdCwgd2UgbmVlZCB0cnlpbmcgdG8gYWRkIGNvb2tpZXMuCi0g
ICAgICAgIGlmIChjb29raWVzRW5hYmxlZCAmJiAoY29va2llSGVhZGVyTWF5QmVEaXJ0eSB8fCAh
aHR0cEhlYWRlckZpZWxkcygpLmNvbnRhaW5zKCJDb29raWUiKSkgJiYgIXVybCgpLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICAvLyBQcmVwYXJlIGEgY29va2llIGhlYWRlciBpZiB0aGVyZSBhcmUg
Y29va2llcyByZWxhdGVkIHRvIHRoaXMgdXJsLgotICAgICAgICAgICAgU3RyaW5nIGNvb2tpZVBh
aXJzID0gY29va2llTWFuYWdlcigpLmdldENvb2tpZSh1cmwoKSwgV2l0aEh0dHBPbmx5Q29va2ll
cyk7Ci0gICAgICAgICAgICBpZiAoIWNvb2tpZVBhaXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
ICAgICBwbGF0Zm9ybVJlcXVlc3QuYWRkSGVhZGVyKCJDb29raWUiLCBjb29raWVQYWlycy5jb250
YWluc09ubHlMYXRpbjEoKSA/IGNvb2tpZVBhaXJzLmxhdGluMSgpLmRhdGEoKSA6IGNvb2tpZVBh
aXJzLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFodHRwSGVhZGVy
RmllbGRzKCkuY29udGFpbnMoIkFjY2VwdC1MYW5ndWFnZSIpKQotICAgICAgICAgICAgcGxhdGZv
cm1SZXF1ZXN0LmFkZEFjY2VwdExhbmd1YWdlSGVhZGVyKCk7Ci0gICAgfQotfQotCi1QYXNzT3du
UHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gUmVzb3VyY2VSZXF1ZXN0Ojpkb1Bs
YXRmb3JtQ29weURhdGEoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+
IGRhdGEpIGNvbnN0Ci17Ci0gICAgZGF0YS0+bV90b2tlbiA9IG1fdG9rZW47Ci0gICAgZGF0YS0+
bV9hbmNob3JUZXh0ID0gbV9hbmNob3JUZXh0OwotICAgIGRhdGEtPm1fb3ZlcnJpZGVDb250ZW50
VHlwZSA9IG1fb3ZlcnJpZGVDb250ZW50VHlwZTsKLSAgICBkYXRhLT5tX3N1Z2dlc3RlZFNhdmVO
YW1lID0gbV9zdWdnZXN0ZWRTYXZlTmFtZTsKLSAgICBkYXRhLT5tX2lzWE1MSFRUUFJlcXVlc3Qg
PSBtX2lzWE1MSFRUUFJlcXVlc3Q7Ci0gICAgZGF0YS0+bV9tdXN0SGFuZGxlSW50ZXJuYWxseSA9
IG1fbXVzdEhhbmRsZUludGVybmFsbHk7Ci0gICAgZGF0YS0+bV9mb3JjZURvd25sb2FkID0gbV9m
b3JjZURvd25sb2FkOwotICAgIGRhdGEtPm1fdGFyZ2V0VHlwZSA9IG1fdGFyZ2V0VHlwZTsKLSAg
ICByZXR1cm4gZGF0YTsKLX0KLQotdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvUGxhdGZvcm1BZG9w
dChQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gZGF0YSkKLXsKLSAg
ICBtX3Rva2VuID0gZGF0YS0+bV90b2tlbjsKLSAgICBtX2FuY2hvclRleHQgPSBkYXRhLT5tX2Fu
Y2hvclRleHQ7Ci0gICAgbV9vdmVycmlkZUNvbnRlbnRUeXBlID0gZGF0YS0+bV9vdmVycmlkZUNv
bnRlbnRUeXBlOwotICAgIG1fc3VnZ2VzdGVkU2F2ZU5hbWUgPSBkYXRhLT5tX3N1Z2dlc3RlZFNh
dmVOYW1lOwotICAgIG1faXNYTUxIVFRQUmVxdWVzdCA9IGRhdGEtPm1faXNYTUxIVFRQUmVxdWVz
dDsKLSAgICBtX211c3RIYW5kbGVJbnRlcm5hbGx5ID0gZGF0YS0+bV9tdXN0SGFuZGxlSW50ZXJu
YWxseTsKLSAgICBtX2ZvcmNlRG93bmxvYWQgPSBkYXRhLT5tX2ZvcmNlRG93bmxvYWQ7Ci0gICAg
bV90YXJnZXRUeXBlID0gZGF0YS0+bV90YXJnZXRUeXBlOwotfQotCi12b2lkIFJlc291cmNlUmVx
dWVzdDo6Y2xlYXJIVFRQQ29udGVudExlbmd0aCgpCi17Ci0gICAgdXBkYXRlUmVzb3VyY2VSZXF1
ZXN0KCk7Ci0KLSAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKCJDb250ZW50LUxlbmd0aCIp
OwotCi0gICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9w
bGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VSZXF1ZXN0
OjpjbGVhckhUVFBDb250ZW50VHlwZSgpCi17Ci0gICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7
Ci0KLSAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKCJDb250ZW50LVR5cGUiKTsKLQotICAg
IGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1S
ZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXNw
b25zZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIFJlc291cmNlUmVzcG9uc2VfaAotI2RlZmluZSBS
ZXNvdXJjZVJlc3BvbnNlX2gKLQotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2VCYXNlLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVzb3VyY2VSZXNwb25zZSA6IHB1YmxpYyBS
ZXNvdXJjZVJlc3BvbnNlQmFzZSB7Ci1wdWJsaWM6Ci0gICAgUmVzb3VyY2VSZXNwb25zZSgpCi0g
ICAgICAgIDogbV9pc011bHRpcGFydFBheWxvYWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAg
IFJlc291cmNlUmVzcG9uc2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1l
LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQotICAgICAgICA6IFJlc291cmNlUmVzcG9uc2VCYXNl
KHVybCwgbWltZVR5cGUsIGV4cGVjdGVkTGVuZ3RoLCB0ZXh0RW5jb2RpbmdOYW1lLCBmaWxlbmFt
ZSkKLSAgICAgICAgLCBtX2lzTXVsdGlwYXJ0UGF5bG9hZChmYWxzZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiBkb1BsYXRm
b3JtQ29weURhdGEoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPikg
Y29uc3Q7Ci0gICAgdm9pZCBkb1BsYXRmb3JtQWRvcHQoUGFzc093blB0cjxDcm9zc1RocmVhZFJl
c291cmNlUmVzcG9uc2VEYXRhPik7Ci0KLSAgICB2b2lkIHNldElzTXVsdGlwYXJ0UGF5bG9hZChi
b29sIHZhbHVlKSB7IG1faXNNdWx0aXBhcnRQYXlsb2FkID0gdmFsdWU7IH0KLSAgICBib29sIGlz
TXVsdGlwYXJ0UGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNNdWx0aXBhcnRQYXlsb2FkOyB9
Ci0KLSAgICBib29sIHBsYXRmb3JtUmVzcG9uc2VJc1VwVG9EYXRlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1faXNNdWx0aXBhcnRQYXlsb2FkOwotfTsK
LQotc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGEgOiBwdWJsaWMgQ3Jvc3NU
aHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YUJhc2UgewotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gUmVzb3VyY2VSZXNwb25zZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXNwb25zZUJsYWNrQmVycnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3Bv
bnNlQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBh
c3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gUmVzb3VyY2VSZXNwb25z
ZTo6ZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3Bv
bnNlRGF0YT4gZGF0YSkgY29uc3QKLXsKLSAgICByZXR1cm4gZGF0YTsKLX0KLQotdm9pZCBSZXNv
dXJjZVJlc3BvbnNlOjpkb1BsYXRmb3JtQWRvcHQoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291
cmNlUmVzcG9uc2VEYXRhPikKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1NvY2tldFN0cmVhbUVy
cm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L1NvY2tldFN0cmVhbUVycm9yLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9Tb2NrZXRTdHJlYW1FcnJvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
U2Vva2p1IEt3b24gKHNlb2tqdS5rd29uQGdtYWlsLmNvbSkKLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNvY2tldFN0cmVhbUVycm9y
X2gKLSNkZWZpbmUgU29ja2V0U3RyZWFtRXJyb3JfaAotCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFt
RXJyb3JCYXNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU29ja2V0U3RyZWFt
RXJyb3IgOiBwdWJsaWMgU29ja2V0U3RyZWFtRXJyb3JCYXNlIHsKLXB1YmxpYzoKLSAgICBTb2Nr
ZXRTdHJlYW1FcnJvcigpIHsgfQotICAgIGV4cGxpY2l0IFNvY2tldFN0cmVhbUVycm9yKGludCBl
cnJvckNvZGUpCi0gICAgICAgIDogU29ja2V0U3RyZWFtRXJyb3JCYXNlKGVycm9yQ29kZSkKLSAg
ICB7Ci0gICAgfQotICAgIFNvY2tldFN0cmVhbUVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGRlc2NyaXB0aW9uKQotICAgICAgICA6IFNvY2tl
dFN0cmVhbUVycm9yQmFzZShlcnJvckNvZGUsIFN0cmluZygpLCBkZXNjcmlwdGlvbikKLSAgICB7
Ci0gICAgfQotCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTb2Nr
ZXRTdHJlYW1FcnJvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Js
YWNrYmVycnkvU29ja2V0U3RyZWFtSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1NvY2tldFN0cmVhbUhhbmRsZS5oCShyZXZp
c2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvU29ja2V0U3RyZWFtSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBTb2NrZXRTdHJlYW1IYW5kbGVfaAotI2RlZmluZSBTb2NrZXRT
dHJlYW1IYW5kbGVfaAotCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgotCi0j
aW5jbHVkZSA8bmV0d29yay9GaWx0ZXJTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
OwotY2xhc3MgQ3JlZGVudGlhbDsKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudDsKLQot
Y2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlIDogcHVibGljIFJlZkNvdW50ZWQ8U29ja2V0U3RyZWFt
SGFuZGxlPiwgcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJTdHJlYW0sIHB1Ymxp
YyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSwgY29u
c3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgU29ja2V0U3RyZWFtSGFuZGxlKGdyb3VwTmFtZSwgdXJsLCBjbGllbnQpKTsg
fQotCi0gICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7Ci0KLSAgICAvLyBGaWx0ZXJT
dHJlYW0gaW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN0YXR1c1JlY2VpdmVkKGlu
dCBzdGF0dXMsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1lc3NhZ2UpOwot
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEYXRhUmVjZWl2ZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06
Ok5ldHdvcmtCdWZmZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UmVhZHlUb1NlbmREYXRh
KCk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUNsb3NlKGludCBzdGF0dXMpOwotICAgIHZpcnR1
YWwgaW50IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9Ci0KLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCk7Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2xvc2UoKTsKLQotcHJpdmF0ZToKLSAgICBT
b2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgU3RyaW5nJiBncm91cE5hbWUsIGNvbnN0IFVSTCYsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCopOwotCi0gICAgT3duUHRyPEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpGaWx0ZXJTdHJlYW0+IG1fc29ja2V0U3RyZWFtOwotICAgIGludCBtX3N0YXR1czsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNvY2tldFN0cmVhbUhhbmRs
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvU29j
a2V0U3RyZWFtSGFuZGxlQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1NvY2tldFN0cmVhbUhhbmRsZUJsYWNrQmVy
cnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2JsYWNrYmVycnkvU29ja2V0U3RyZWFtSGFuZGxlQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgotCi0jaW5jbHVkZSAiQ2hyb21lLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAiVVJM
LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQ
YWdlQ2xpZW50QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1ZGUg
IlNvY2tldFN0cmVhbUVycm9yLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
LmgiCi0KLSNpbmNsdWRlIDxuZXR3b3JrL05ldHdvcmtTdHJlYW1GYWN0b3J5Lmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNvY2tldFN0
cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBj
b25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50KiBjbGllbnQpCi0gICAgOiBT
b2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQotewotICAgIExPRyhOZXR3b3JrLCAi
U29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQgJXAiLCB0aGlzLCBtX2NsaWVudCk7Ci0K
LSAgICAvLyBGaW5kIGEgcGxheWVySWQgdG8gcGFzcyB0byB0aGUgcGxhdGZvcm0gY2xpZW50LiBJ
dCBjYW4gYmUgZnJvbSBhbnkgcGFnZQotICAgIC8vIGluIHRoZSBQYWdlR3JvdXAsIHNpbmNlIHRo
ZXkgYWxsIHNoYXJlIHRoZSBzYW1lIG5ldHdvcmsgcHJvZmlsZSBhbmQKLSAgICAvLyByZXNvdXJj
ZXMuCi0gICAgUGFnZUdyb3VwKiBwYWdlR3JvdXAgPSBQYWdlR3JvdXA6OnBhZ2VHcm91cChncm91
cE5hbWUpOwotICAgIEFTU0VSVChwYWdlR3JvdXAgJiYgIXBhZ2VHcm91cC0+cGFnZXMoKS5pc0Vt
cHR5KCkpOwotICAgIFBhZ2UqIHBhZ2UgPSAqKHBhZ2VHcm91cC0+cGFnZXMoKS5iZWdpbigpKTsK
LSAgICBBU1NFUlQocGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKSk7Ci0gICAgaW50IHBsYXllcklk
ID0gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4ocGFnZS0+bWFpbkZy
YW1lKCktPmxvYWRlcigpLT5jbGllbnQoKSktPnBsYXllcklkKCk7Ci0KLSAgICAvLyBDcmVhdGUg
YSBwbGF0Zm9ybSBzb2NrZXQgc3RyZWFtCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdv
cmtTdHJlYW1GYWN0b3J5KiBmYWN0b3J5ID0gcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xp
ZW50KCktPm5ldHdvcmtTdHJlYW1GYWN0b3J5KCk7Ci0gICAgQVNTRVJUKGZhY3RvcnkpOwotCi0g
ICAgLy8gT3BlbiB0aGUgc29ja2V0Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtS
ZXF1ZXN0IHJlcXVlc3Q7Ci0gICAgU1RBVElDX0xPQ0FMX1NUUklORyhzX2Nvbm5lY3QsICJDT05O
RUNUIik7Ci0gICAgcmVxdWVzdC5zZXRSZXF1ZXN0VXJsKHVybC5zdHJpbmcoKSwgc19jb25uZWN0
KTsKLSAgICBtX3NvY2tldFN0cmVhbSA9IGFkb3B0UHRyKGZhY3RvcnktPmNyZWF0ZU5ldHdvcmtT
dHJlYW0ocmVxdWVzdCwgcGxheWVySWQpKTsKLSAgICBBU1NFUlQobV9zb2NrZXRTdHJlYW0pOwot
Ci0gICAgbV9zb2NrZXRTdHJlYW0tPnNldExpc3RlbmVyKHRoaXMpOwotICAgIG1fc29ja2V0U3Ry
ZWFtLT5zdHJlYW1PcGVuKCk7Ci19Ci0KLVNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVh
bUhhbmRsZSgpCi17Ci0gICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZGVs
ZXRlIiwgdGhpcyk7Ci0gICAgc2V0Q2xpZW50KDApOwotfQotCi1pbnQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogYnVmLCBpbnQgbGVuZ3RoKQotewotICAgIExP
RyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtU2VuZCIsIHRoaXMpOwot
ICAgIEFTU0VSVChtX3NvY2tldFN0cmVhbSk7Ci0gICAgcmV0dXJuIG1fc29ja2V0U3RyZWFtLT5z
dHJlYW1TZW5kRGF0YShidWYsIGxlbmd0aCk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxl
OjpwbGF0Zm9ybUNsb3NlKCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRs
ZSAlcCBwbGF0Zm9ybUNsb3NlIiwgdGhpcyk7Ci0gICAgQVNTRVJUKG1fc29ja2V0U3RyZWFtKTsK
LSAgICBtX3NvY2tldFN0cmVhbS0+c3RyZWFtQ2xvc2UoKTsKLX0KLQotLy8gRmlsdGVyU3RyZWFt
IGludGVyZmFjZQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6bm90aWZ5U3RhdHVzUmVjZWl2
ZWQoaW50IHN0YXR1cywgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpCi17Ci0g
ICAgQVNTRVJUKG1fY2xpZW50KTsKLQotICAgIC8vIFRoZSBjbGllbnQgY2FuIGNsb3NlIHRoZSBo
YW5kbGUsIHBvdGVudGlhbGx5IHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZS4KLSAgICBSZWZQ
dHI8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0KHRoaXMpOwotICAgIG1fc3RhdHVzID0gc3Rh
dHVzOwotICAgIGlmIChGaWx0ZXJTdHJlYW06OlN0YXR1c1N1Y2Nlc3MgIT0gc3RhdHVzKQotICAg
ICAgICBtX2NsaWVudC0+ZGlkRmFpbFNvY2tldFN0cmVhbSh0aGlzLCBTb2NrZXRTdHJlYW1FcnJv
cihzdGF0dXMsIG1lc3NhZ2UpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9zdGF0ZSA9IE9wZW47
Ci0gICAgICAgIG1fY2xpZW50LT5kaWRPcGVuU29ja2V0U3RyZWFtKHRoaXMpOwotICAgIH0KLX0K
LQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6Om5vdGlmeURhdGFSZWNlaXZlZChCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6TmV0d29ya0J1ZmZlciogYnVmZmVyKQotewotICAgIEFTU0VSVChtX2NsaWVu
dCk7Ci0KLSAgICAvLyBUaGUgY2xpZW50IGNhbiBjbG9zZSB0aGUgaGFuZGxlLCBwb3RlbnRpYWxs
eSByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UuCi0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhh
bmRsZT4gcHJvdGVjdCh0aGlzKTsKLSAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVNvY2tldFN0cmVh
bURhdGEodGhpcywgQmxhY2tCZXJyeTo6UGxhdGZvcm06Om5ldHdvcmtCdWZmZXJEYXRhKGJ1ZmZl
ciksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpuZXR3b3JrQnVmZmVyRGF0YUxlbmd0aChidWZmZXIp
KTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6Om5vdGlmeVJlYWR5VG9TZW5kRGF0YSgp
Ci17Ci0gICAgc2VuZFBlbmRpbmdEYXRhKCk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxl
Ojpub3RpZnlDbG9zZShpbnQgc3RhdHVzKQotewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0KLSAg
ICAvLyBUaGUgY2xpZW50IGNhbiBjbG9zZSB0aGUgaGFuZGxlLCBwb3RlbnRpYWxseSByZW1vdmlu
ZyB0aGUgbGFzdCByZWZlcmVuY2UuCi0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJv
dGVjdCh0aGlzKTsKLQotICAgIGlmIChzdGF0dXMgPCAwIHx8ICg0MDAgPD0gc3RhdHVzICYmIHN0
YXR1cyA8IDYwMCkpCi0gICAgICAgIG1fc3RhdHVzID0gc3RhdHVzOwotCi0gICAgaWYgKEZpbHRl
clN0cmVhbTo6U3RhdHVzU3VjY2VzcyAhPSBzdGF0dXMpCi0gICAgICAgIG1fY2xpZW50LT5kaWRG
YWlsU29ja2V0U3RyZWFtKHRoaXMsIFNvY2tldFN0cmVhbUVycm9yKHN0YXR1cykpOwotCi0gICAg
bV9jbGllbnQtPmRpZENsb3NlU29ja2V0U3RyZWFtKHRoaXMpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvcnNzL1JTUzEwUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTUzEwUGFyc2VyLmNwcAkocmV2aXNpb24gMTYx
NTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9S
U1MxMFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJTUzEwUGFyc2VyLmgiCi0KLSNpbmNsdWRlICJCbGFj
a0JlcnJ5UGxhdGZvcm1Bc3NlcnQuaCIKLSNpbmNsdWRlICJsaWJ4bWwvcGFyc2VyLmgiCi0jaW5j
bHVkZSAibGlieG1sL3htbHdyaXRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJTUzEw
UGFyc2VyOjpSU1MxMFBhcnNlcigpCi17Ci19Ci0KLWJvb2wgUlNTMTBQYXJzZXI6OnBhcnNlQnVm
ZmVyKGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCwgY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiBlbmNvZGluZykKLXsKLSAgICByZXR1cm4gcGFyc2VYbWxEb2MoeG1sUmVhZE1lbW9y
eShidWZmZXIsIGxlbmd0aCwgdXJsLCBlbmNvZGluZywgWE1MX1BBUlNFX05PQkxBTktTIHwgWE1M
X1BBUlNFX05PTkVUKSk7Ci19Ci0KLWJvb2wgUlNTMTBQYXJzZXI6OnBhcnNlWG1sRG9jKHhtbERv
Y1B0ciBkb2MpCi17Ci0gICAgaWYgKCFkb2MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHhtbE5vZGUqIG5vZGUgPSB4bWxEb2NHZXRSb290RWxlbWVudChkb2MpOwotICAgIGlmICghbm9k
ZSkgewotICAgICAgICB4bWxGcmVlRG9jKGRvYyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICAgICAgU3Ry
aW5nIG5hbWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obm9kZS0+bmFtZSkpOwotCi0g
ICAgICAgIGlmIChuYW1lID09ICJSREYiKSB7Ci0gICAgICAgICAgICB4bWxOb2RlKiBjaGlsZG5v
ZGUgPSBub2RlLT5jaGlsZHJlbjsKLSAgICAgICAgICAgIGZvciAoOyBjaGlsZG5vZGU7IGNoaWxk
bm9kZSA9IGNoaWxkbm9kZS0+bmV4dCkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZG5vZGUt
PnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkgewotICAgICAgICAgICAgICAgICAgICBuYW1lID0g
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNoaWxkbm9kZS0+bmFtZSkpOwot
ICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAobmFtZSA9PSAiY2hhbm5lbCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEJM
QUNLQkVSUllfQVNTRVJUKCFtX3Jvb3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X3Jvb3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yb290ID0gcGFyc2VGZWVkKGNo
aWxkbm9kZS0+Y2hpbGRyZW4pOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUg
PT0gIml0ZW0iKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCTEFDS0JFUlJZX0FTU0VSVCht
X3Jvb3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fcm9vdCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJTU0l0ZW0qIGl0ZW0gPSBwYXJzZUl0ZW0oY2hpbGRub2RlLT5j
aGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0pCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fcm9vdC0+bV9pdGVtcy5hcHBlbmQoaXRlbSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB4bWxGcmVl
RG9jKGRvYyk7Ci0KLSAgICByZXR1cm4gbV9yb290OwotfQotCi1ib29sIFJTUzEwUGFyc2VyOjpw
YXJzZUl0ZW1CYXNlQXR0cmlidXRlKFJTU0l0ZW1CYXNlKiBpdGVtLCBjb25zdCBTdHJpbmcmIG5h
bWUsIHhtbE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKG5hbWUgPT0gImxpbmsiKQotICAgICAgICBp
dGVtLT5tX2xpbmsgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9
PSAidGl0bGUiKQotICAgICAgICBpdGVtLT5tX3RpdGxlID0gdGV4dEZyb21YTUxOb2RlKG5vZGUp
OwotICAgIGVsc2UgaWYgKG5hbWUgPT0gImRlc2NyaXB0aW9uIikKLSAgICAgICAgaXRlbS0+bV9k
ZXNjcmlwdGlvbiA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICBlbHNlCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1SU1NJdGVtKiBSU1MxMFBhcnNl
cjo6cGFyc2VJdGVtKHhtbE5vZGUqIG5vZGUpCi17Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQobm9k
ZSk7Ci0KLSAgICBSU1NJdGVtKiBpdGVtID0gbmV3IFJTU0l0ZW0oKTsKLQotICAgIGZvciAoOyBu
b2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgICAgICBTdHJpbmcgbmFtZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihub2RlLT5uYW1lKSk7Ci0gICAgICAgIG5hbWUgPSBuYW1lLmxv
d2VyKCk7Ci0KLSAgICAgICAgcGFyc2VJdGVtQmFzZUF0dHJpYnV0ZShpdGVtLCBuYW1lLCBub2Rl
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaXRlbTsKLX0KLQotUlNTRmVlZCogUlNTMTBQYXJzZXI6
OnBhcnNlRmVlZCh4bWxOb2RlKiBub2RlKQotewotICAgIEJMQUNLQkVSUllfQVNTRVJUKG5vZGUp
OwotCi0gICAgUlNTRmVlZCogZmVlZCA9IG5ldyBSU1NGZWVkKCk7Ci0KLSAgICBmb3IgKDsgbm9k
ZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4obm9kZS0+bmFtZSkpOwotICAgICAgICBuYW1lID0gbmFtZS5sb3dl
cigpOwotCi0gICAgICAgIHBhcnNlSXRlbUJhc2VBdHRyaWJ1dGUoZmVlZCwgbmFtZSwgbm9kZSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZlZWQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNT
MTBQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2JsYWNrYmVycnkvcnNzL1JTUzEwUGFyc2VyLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTMTBQYXJzZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgUlNTMTBQYXJzZXJfaAot
I2RlZmluZSBSU1MxMFBhcnNlcl9oCi0KLSNpbmNsdWRlICJSU1NQYXJzZXJCYXNlLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUlNTMTBQYXJzZXIgOiBwdWJsaWMgUlNTUGFyc2Vy
QmFzZSB7Ci1wdWJsaWM6Ci0gICAgUlNTMTBQYXJzZXIoKTsKLQotICAgIGJvb2wgcGFyc2VCdWZm
ZXIoY29uc3QgY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0
IGNoYXIqIGVuY29kaW5nKTsKLQotcHJpdmF0ZToKLSAgICBib29sIHBhcnNlWG1sRG9jKHhtbERv
Y1B0cik7Ci0gICAgYm9vbCBwYXJzZUl0ZW1CYXNlQXR0cmlidXRlKFJTU0l0ZW1CYXNlKiwgY29u
c3QgU3RyaW5nJiBuYW1lLCB4bWxOb2RlKik7Ci0gICAgUlNTSXRlbSogcGFyc2VJdGVtKHhtbE5v
ZGUqKTsKLSAgICBSU1NGZWVkKiBwYXJzZUZlZWQoeG1sTm9kZSopOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUlNTMTBQYXJzZXJfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1MyMFBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jz
cy9SU1MyMFBhcnNlci5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTMjBQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAy
MDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJS
U1MyMFBhcnNlci5oIgotCi0jaW5jbHVkZSAiQmxhY2tCZXJyeVBsYXRmb3JtQXNzZXJ0LmgiCi0j
aW5jbHVkZSAibGlieG1sL3BhcnNlci5oIgotI2luY2x1ZGUgImxpYnhtbC94bWx3cml0ZXIuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SU1MyMFBhcnNlcjo6UlNTMjBQYXJzZXIoKQotewot
fQotCi1ib29sIFJTUzIwUGFyc2VyOjpwYXJzZUJ1ZmZlcihjb25zdCBjaGFyKiBidWZmZXIsIGlu
dCBsZW5ndGgsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogZW5jb2RpbmcpCi17Ci0gICAg
cmV0dXJuIHBhcnNlWG1sRG9jKHhtbFJlYWRNZW1vcnkoYnVmZmVyLCBsZW5ndGgsIHVybCwgZW5j
b2RpbmcsIFhNTF9QQVJTRV9OT0JMQU5LUyB8IFhNTF9QQVJTRV9OT05FVCkpOwotfQotCi1ib29s
IFJTUzIwUGFyc2VyOjpwYXJzZVhtbERvYyh4bWxEb2NQdHIgZG9jKQotewotICAgIGlmICghZG9j
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB4bWxOb2RlKiBub2RlID0geG1sRG9jR2V0
Um9vdEVsZW1lbnQoZG9jKTsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgeG1sRnJlZURvYyhk
b2MpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yICg7IG5vZGU7IG5v
ZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KG5vZGUtPm5hbWUpKTsKLSAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKTsK
LQotICAgICAgICBpZiAobmFtZSA9PSAicnNzIikgewotICAgICAgICAgICAgeG1sTm9kZSogY2hh
bm5lbCA9IG5vZGUtPmNoaWxkcmVuOwotICAgICAgICAgICAgaWYgKGNoYW5uZWwtPnR5cGUgPT0g
WE1MX0VMRU1FTlRfTk9ERSkgewotICAgICAgICAgICAgICAgIG5hbWUgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihjaGFubmVsLT5uYW1lKTsKLSAgICAgICAgICAgICAgICBuYW1lID0g
bmFtZS5sb3dlcigpOwotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJjaGFubmVsIikKLSAg
ICAgICAgICAgICAgICAgICAgbV9yb290ID0gcGFyc2VGZWVkKGNoYW5uZWwtPmNoaWxkcmVuKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgeG1sRnJlZURvYyhkb2MpOwotCi0gICAgcmV0dXJuIG1fcm9vdDsKLX0KLQotYm9vbCBSU1My
MFBhcnNlcjo6cGFyc2VJdGVtQmFzZUF0dHJpYnV0ZShSU1NJdGVtQmFzZSogaXRlbSwgY29uc3Qg
U3RyaW5nJiBuYW1lLCB4bWxOb2RlKiBub2RlKQotewotICAgIGlmIChuYW1lID09ICJsaW5rIikK
LSAgICAgICAgaXRlbS0+bV9saW5rID0gdGV4dEZyb21YTUxOb2RlKG5vZGUpOwotICAgIGVsc2Ug
aWYgKG5hbWUgPT0gInRpdGxlIikKLSAgICAgICAgaXRlbS0+bV90aXRsZSA9IHRleHRGcm9tWE1M
Tm9kZShub2RlKTsKLSAgICBlbHNlIGlmIChuYW1lID09ICJkZXNjcmlwdGlvbiIpCi0gICAgICAg
IGl0ZW0tPm1fZGVzY3JpcHRpb24gPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgZWxzZSBp
ZiAobmFtZSA9PSAicHViZGF0ZSIpCi0gICAgICAgIGl0ZW0tPm1fcHViRGF0ZSA9IHRleHRGcm9t
WE1MTm9kZShub2RlKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1SU1NJdGVtKiBSU1MyMFBhcnNlcjo6cGFyc2VJdGVtKHhtbE5vZGUq
IG5vZGUpCi17Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQobm9kZSk7Ci0KLSAgICBSU1NJdGVtKiBp
dGVtID0gbmV3IFJTU0l0ZW0oKTsKLQotICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+bmV4
dCkgewotICAgICAgICBTdHJpbmcgbmFtZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihu
b2RlLT5uYW1lKSk7Ci0gICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCk7Ci0KLSAgICAgICAgaWYg
KHBhcnNlSXRlbUJhc2VBdHRyaWJ1dGUoaXRlbSwgbmFtZSwgbm9kZSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpZiAobmFtZSA9PSAiYXV0aG9yIikKLSAgICAgICAgICAgIGl0
ZW0tPm1fYXV0aG9yID0gdGV4dEZyb21YTUxOb2RlKG5vZGUpOwotICAgICAgICBlbHNlIGlmIChu
YW1lID09ICJjcmVhdG9yIikgewotICAgICAgICAgICAgaWYgKGl0ZW0tPm1fYXV0aG9yLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICBpdGVtLT5tX2F1dGhvciA9IHRleHRGcm9tWE1MTm9kZShu
b2RlKTsKLSAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJjYXRlZ29yeSIpCi0gICAgICAgICAg
ICBpdGVtLT5tX2NhdGVnb3JpZXMuYXBwZW5kKHRleHRGcm9tWE1MTm9kZShub2RlKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKG5hbWUgPT0gImNvbW1lbnRzIikKLSAgICAgICAgICAgIGl0ZW0tPm1fY29t
bWVudHMgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5hbWUgPT0g
ImVuY2xvc3VyZSIpIHsKLSAgICAgICAgICAgIC8vIFJpZ2h0IG5vdyB3ZSBhc3N1bWUgdGhlcmUg
aXMgb25seSBvbmUgZW5jbG9zdXJlIHBlciBpdGVtLCBhbmQgd2UgaGFuZGxlIG9ubHkKLSAgICAg
ICAgICAgIC8vIHRoZSBmaXJzdCBlbmNsb3N1cmUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIG9uZXMu
Ci0gICAgICAgICAgICAvLyBSZWZlcmVuY2U6IGh0dHA6Ly93d3cucnNzYm9hcmQub3JnL3Jzcy1w
cm9maWxlI2VsZW1lbnQtY2hhbm5lbC1pdGVtLWVuY2xvc3VyZQotICAgICAgICAgICAgaWYgKCFp
dGVtLT5tX2VuY2xvc3VyZSkKLSAgICAgICAgICAgICAgICBpdGVtLT5tX2VuY2xvc3VyZSA9IHBh
cnNlRW5jbG9zdXJlKG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGl0ZW07
Ci19Ci0KLVJTU0ZlZWQqIFJTUzIwUGFyc2VyOjpwYXJzZUZlZWQoeG1sTm9kZSogbm9kZSkKLXsK
LSAgICBCTEFDS0JFUlJZX0FTU0VSVChub2RlKTsKLQotICAgIFJTU0ZlZWQqIGZlZWQgPSBuZXcg
UlNTRmVlZCgpOwotCi0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAg
ICAgIFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5vZGUtPm5hbWUp
KTsKLSAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKTsKLQotICAgICAgICBpZiAocGFyc2VJdGVt
QmFzZUF0dHJpYnV0ZShmZWVkLCBuYW1lLCBub2RlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGlmIChuYW1lID09ICJpdGVtIikKLSAgICAgICAgICAgIGZlZWQtPm1faXRlbXMu
YXBwZW5kKHBhcnNlSXRlbShub2RlLT5jaGlsZHJlbikpOwotICAgICAgICBlbHNlIGlmIChuYW1l
ID09ICJsYW5ndWFnZSIpCi0gICAgICAgICAgICBmZWVkLT5tX2xhbmd1YWdlID0gdGV4dEZyb21Y
TUxOb2RlKG5vZGUpOwotICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0dGwiKQotICAgICAgICAg
ICAgZmVlZC0+bV90dGwgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZlZWQ7Ci19Ci0KLVJTU0VuY2xvc3VyZSogUlNTMjBQYXJzZXI6OnBhcnNlRW5jbG9zdXJl
KHhtbE5vZGUqIG5vZGUpCi17Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQobm9kZSk7Ci0KLSAgICBS
U1NFbmNsb3N1cmUqIGVuY2xvc3VyZSA9IG5ldyBSU1NFbmNsb3N1cmUoKTsKLQotICAgIGZvciAo
eG1sQXR0ciogYXR0ciA9IG5vZGUtPnByb3BlcnRpZXM7IGF0dHI7IGF0dHIgPSBhdHRyLT5uZXh0
KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGF0
dHItPm5hbWUpKTsKLSAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKTsKLQotICAgICAgICBpZiAo
bmFtZSA9PSAidXJsIikKLSAgICAgICAgICAgIGVuY2xvc3VyZS0+bV91cmwgPSB0ZXh0RnJvbVhN
TEF0dHIoYXR0cik7Ci0gICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInR5cGUiKQotICAgICAgICAg
ICAgZW5jbG9zdXJlLT5tX3R5cGUgPSB0ZXh0RnJvbVhNTEF0dHIoYXR0cik7Ci0gICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gImxlbmd0aCIpCi0gICAgICAgICAgICBlbmNsb3N1cmUtPm1fbGVuZ3Ro
ID0gdGV4dEZyb21YTUxBdHRyKGF0dHIpOwotICAgIH0KLQotICAgIHJldHVybiBlbmNsb3N1cmU7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTMjBQYXJzZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTUzIwUGFyc2Vy
LmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
YmxhY2tiZXJyeS9yc3MvUlNTMjBQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICovCi0KLSNpZm5kZWYgUlNTMjBQYXJzZXJfaAotI2RlZmluZSBSU1MyMFBhcnNlcl9oCi0KLSNp
bmNsdWRlICJSU1NQYXJzZXJCYXNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
UlNTMjBQYXJzZXIgOiBwdWJsaWMgUlNTUGFyc2VyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgUlNTMjBQ
YXJzZXIoKTsKLQotICAgIGJvb2wgcGFyc2VCdWZmZXIoY29uc3QgY2hhciogYnVmZmVyLCBpbnQg
bGVuZ3RoLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIGVuY29kaW5nKTsKLQotcHJpdmF0
ZToKLSAgICBib29sIHBhcnNlWG1sRG9jKHhtbERvY1B0cik7Ci0gICAgYm9vbCBwYXJzZUl0ZW1C
YXNlQXR0cmlidXRlKFJTU0l0ZW1CYXNlKiwgY29uc3QgU3RyaW5nJiBuYW1lLCB4bWxOb2RlKik7
Ci0gICAgUlNTSXRlbSogcGFyc2VJdGVtKHhtbE5vZGUqKTsKLSAgICBSU1NGZWVkKiBwYXJzZUZl
ZWQoeG1sTm9kZSopOwotICAgIFJTU0VuY2xvc3VyZSogcGFyc2VFbmNsb3N1cmUoeG1sTm9kZSop
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUlNTMjBQYXJzZXJf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9S
U1NBdG9tUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU0F0b21QYXJzZXIuY3BwCShyZXZpc2lvbiAxNjE1OTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU0F0
b21QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMzOSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJSU1NBdG9tUGFyc2VyLmgiCi0KLSNpbmNsdWRlICJCbGFj
a0JlcnJ5UGxhdGZvcm1Bc3NlcnQuaCIKLSNpbmNsdWRlICJsaWJ4bWwvcGFyc2VyLmgiCi0jaW5j
bHVkZSAibGlieG1sL3htbHdyaXRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNSZWxh
dGl2ZVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiAhKHBhdGguc3RhcnRz
V2l0aCgiLyIpIHx8IHBhdGguZmluZCgiOi8iKSAhPSBXVEY6Om5vdEZvdW5kKTsKLX0KLQotUlNT
QXRvbUxpbms6OlR5cGUgUlNTQXRvbUxpbms6OnJlbFR5cGUoKQotewotICAgIGlmIChtX3R5cGVJ
bkVudW0gIT0gVHlwZVVua25vd24pCi0gICAgICAgIHJldHVybiBtX3R5cGVJbkVudW07Ci0KLSAg
ICBpZiAobV9yZWwuaXNFbXB0eSgpKQotICAgICAgICBtX3R5cGVJbkVudW0gPSBUeXBlQWx0ZXJu
YXRlOwotICAgIGVsc2UgewotICAgICAgICBTdHJpbmcgbG93cmVsID0gbV9yZWwubG93ZXIoKTsK
LSAgICAgICAgaWYgKGxvd3JlbCA9PSAiYWx0ZXJuYXRlIikKLSAgICAgICAgICAgIG1fdHlwZUlu
RW51bSA9IFR5cGVBbHRlcm5hdGU7Ci0gICAgICAgIGVsc2UgaWYgKGxvd3JlbCA9PSAiZW5jbG9z
dXJlIikKLSAgICAgICAgICAgIG1fdHlwZUluRW51bSA9IFR5cGVFbmNsb3N1cmU7Ci0gICAgICAg
IGVsc2UgaWYgKGxvd3JlbCA9PSAicmVsYXRlZCIpCi0gICAgICAgICAgICBtX3R5cGVJbkVudW0g
PSBUeXBlUmVsYXRlZDsKLSAgICAgICAgZWxzZSBpZiAobG93cmVsID09ICJzZWxmIikKLSAgICAg
ICAgICAgIG1fdHlwZUluRW51bSA9IFR5cGVTZWxmOwotICAgICAgICBlbHNlIGlmIChsb3dyZWwg
PT0gInZpYSIpCi0gICAgICAgICAgICBtX3R5cGVJbkVudW0gPSBUeXBlVmlhOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX3R5cGVJbkVudW0gPSBUeXBlVW5zdXBwb3J0ZWQ7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1fdHlwZUluRW51bTsKLX0KLQotUlNTQXRvbVBhcnNlcjo6UlNTQXRvbVBh
cnNlcigpCi17Ci19Ci0KLWJvb2wgUlNTQXRvbVBhcnNlcjo6cGFyc2VCdWZmZXIoY29uc3QgY2hh
ciogYnVmZmVyLCBpbnQgbGVuZ3RoLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIGVuY29k
aW5nKQotewotICAgIG1fdXJsID0gVVJMKGJsYW5rVVJMKCksIHVybCk7Ci0gICAgcmV0dXJuIHBh
cnNlWG1sRG9jKHhtbFJlYWRNZW1vcnkoYnVmZmVyLCBsZW5ndGgsIHVybCwgZW5jb2RpbmcsIFhN
TF9QQVJTRV9OT0JMQU5LUyB8IFhNTF9QQVJTRV9OT05FVCkpOwotfQotCi1ib29sIFJTU0F0b21Q
YXJzZXI6OnBhcnNlWG1sRG9jKHhtbERvY1B0ciBkb2MpCi17Ci0gICAgaWYgKCFkb2MpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHhtbE5vZGUqIG5vZGUgPSB4bWxEb2NHZXRSb290RWxl
bWVudChkb2MpOwotICAgIGlmICghbm9kZSkgewotICAgICAgICB4bWxGcmVlRG9jKGRvYyk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5v
ZGUtPm5leHQpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4obm9kZS0+bmFtZSkpOwotICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpOwotCi0gICAg
ICAgIGlmIChuYW1lID09ICJmZWVkIikgewotICAgICAgICAgICAgbV9yb290ID0gcGFyc2VGZWVk
KG5vZGUtPmNoaWxkcmVuKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgeG1sRnJlZURvYyhkb2MpOwotICAgIHJldHVybiBtX3Jvb3Q7Ci19Ci0KLWJvb2wgUlNT
QXRvbVBhcnNlcjo6cGFyc2VJdGVtQmFzZUF0dHJpYnV0ZShSU1NJdGVtQmFzZSogaXRlbSwgY29u
c3QgU3RyaW5nJiBuYW1lLCB4bWxOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIGJhc2UpCi17Ci0g
ICAgaWYgKG5hbWUgPT0gInRpdGxlIikKLSAgICAgICAgaXRlbS0+bV90aXRsZSA9IHRleHRGcm9t
WE1MTm9kZShub2RlKTsKLSAgICBlbHNlIGlmIChuYW1lID09ICJpZCIpCi0gICAgICAgIGl0ZW0t
Pm1faWQgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiYXV0
aG9yIikKLSAgICAgICAgaXRlbS0+bV9hdXRob3IgPSBwYXJzZUF1dGhvcihub2RlKTsKLSAgICBl
bHNlIGlmIChuYW1lID09ICJ1cGRhdGVkIikKLSAgICAgICAgaXRlbS0+bV91cGRhdGVkID0gdGV4
dEZyb21YTUxOb2RlKG5vZGUpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gImNvbnRlbnQiKQotICAg
ICAgICBpdGVtLT5tX2Rlc2NyaXB0aW9uID0gcGFyc2VDb250ZW50KGJhc2UsIG5vZGUpOwotICAg
IGVsc2UgaWYgKG5hbWUgPT0gInB1Ymxpc2hlZCIpCi0gICAgICAgIGl0ZW0tPm1fcHViRGF0ZSA9
IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1SU1NJdGVtKiBSU1NBdG9tUGFyc2VyOjpwYXJzZUl0
ZW0oeG1sTm9kZSogbm9kZSkKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VSVChub2RlKTsKLQotICAg
IFJTU0l0ZW0qIGl0ZW0gPSBuZXcgUlNTSXRlbSgpOwotCi0gICAgU3RyaW5nIGJhc2U7Ci0gICAg
Zm9yICh4bWxBdHRyKiBhdHRyID0gbm9kZS0+cHJvcGVydGllczsgYXR0cjsgYXR0ciA9IGF0dHIt
Pm5leHQpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oYXR0ci0+bmFtZSkpOwotICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpOwotICAgICAgICBp
ZiAobmFtZSA9PSAiYmFzZSIpCi0gICAgICAgICAgICBiYXNlID0gdGV4dEZyb21YTUxBdHRyKGF0
dHIpOwotICAgIH0KLQotICAgIG5vZGUgPSBub2RlLT5jaGlsZHJlbjsKLSAgICBmb3IgKDsgbm9k
ZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4obm9kZS0+bmFtZSkpOwotICAgICAgICBuYW1lID0gbmFtZS5sb3dl
cigpOwotCi0gICAgICAgIGlmIChwYXJzZUl0ZW1CYXNlQXR0cmlidXRlKGl0ZW0sIG5hbWUsIG5v
ZGUsIGJhc2UpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKG5hbWUgPT0g
ImxpbmsiKSB7Ci0gICAgICAgICAgICBSU1NBdG9tTGluayogbGluayA9IHBhcnNlTGluayhub2Rl
KTsKLSAgICAgICAgICAgIGlmIChpc1JlbGF0aXZlUGF0aChsaW5rLT5tX2hyZWYpKQotICAgICAg
ICAgICAgICAgIGxpbmstPm1faHJlZiA9IGJhc2UgKyAiLyIgKyBsaW5rLT5tX2hyZWY7Ci0KLSAg
ICAgICAgICAgIHN3aXRjaCAobGluay0+cmVsVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFJT
U0F0b21MaW5rOjpUeXBlQWx0ZXJuYXRlOgotICAgICAgICAgICAgICAgIGl0ZW0tPm1fbGluayA9
IGxpbmstPm1faHJlZjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
UlNTQXRvbUxpbms6OlR5cGVFbmNsb3N1cmU6Ci0gICAgICAgICAgICAgICAgQkxBQ0tCRVJSWV9B
U1NFUlQoIWl0ZW0tPm1fZW5jbG9zdXJlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPm1f
ZW5jbG9zdXJlKQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5tX2VuY2xvc3VyZSA9IGVuY2xv
c3VyZUZyb21MaW5rKGxpbmspOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGRlbGV0ZSBsaW5rOwotICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImNhdGVnb3J5IikK
LSAgICAgICAgICAgIGl0ZW0tPm1fY2F0ZWdvcmllcy5hcHBlbmQocGFyc2VDYXRlZ29yeShub2Rl
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGl0ZW07Ci19Ci0KLVJTU0ZlZWQqIFJTU0F0b21QYXJz
ZXI6OnBhcnNlRmVlZCh4bWxOb2RlKiBub2RlKQotewotICAgIEJMQUNLQkVSUllfQVNTRVJUKG5v
ZGUpOwotCi0gICAgUlNTRmVlZCogZmVlZCA9IG5ldyBSU1NGZWVkKCk7Ci0KLSAgICBmb3IgKDsg
bm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4obm9kZS0+bmFtZSkpOwotICAgICAgICBuYW1lID0gbmFtZS5s
b3dlcigpOwotCi0gICAgICAgIGlmIChwYXJzZUl0ZW1CYXNlQXR0cmlidXRlKGZlZWQsIG5hbWUs
IG5vZGUsIGVtcHR5U3RyaW5nKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aWYgKG5hbWUgPT0gImVudHJ5IikKLSAgICAgICAgICAgIGZlZWQtPm1faXRlbXMuYXBwZW5kKHBh
cnNlSXRlbShub2RlKSk7Ci0gICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gImxpbmsiKSB7Ci0gICAg
ICAgICAgICBSU1NBdG9tTGluayogbGluayA9IHBhcnNlTGluayhub2RlKTsKLSAgICAgICAgICAg
IGlmIChsaW5rLT5yZWxUeXBlKCkgPT0gUlNTQXRvbUxpbms6OlR5cGVBbHRlcm5hdGUpCi0gICAg
ICAgICAgICAgICAgZmVlZC0+bV9saW5rID0gbGluay0+bV9ocmVmOwotICAgICAgICAgICAgZGVs
ZXRlIGxpbms7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmVlZDsKLX0KLQotUlNT
QXRvbUxpbmsqIFJTU0F0b21QYXJzZXI6OnBhcnNlTGluayh4bWxOb2RlKiBub2RlKQotewotICAg
IEJMQUNLQkVSUllfQVNTRVJUKG5vZGUpOwotCi0gICAgUlNTQXRvbUxpbmsqIGxpbmsgPSBuZXcg
UlNTQXRvbUxpbmsoKTsKLQotICAgIGZvciAoeG1sQXR0ciogYXR0ciA9IG5vZGUtPnByb3BlcnRp
ZXM7IGF0dHI7IGF0dHIgPSBhdHRyLT5uZXh0KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHItPm5hbWUpKTsKLSAgICAgICAgbmFtZSA9IG5h
bWUubG93ZXIoKTsKLQotICAgICAgICBpZiAobmFtZSA9PSAiaHJlZiIpCi0gICAgICAgICAgICBs
aW5rLT5tX2hyZWYgPSB0ZXh0RnJvbVhNTEF0dHIoYXR0cik7Ci0gICAgICAgIGVsc2UgaWYgKG5h
bWUgPT0gInJlbCIpCi0gICAgICAgICAgICBsaW5rLT5tX3JlbCA9IHRleHRGcm9tWE1MQXR0cihh
dHRyKTsKLSAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidHlwZSIpCi0gICAgICAgICAgICBsaW5r
LT5tX3R5cGUgPSB0ZXh0RnJvbVhNTEF0dHIoYXR0cik7Ci0gICAgICAgIGVsc2UgaWYgKG5hbWUg
PT0gImhyZWZsYW5nIikKLSAgICAgICAgICAgIGxpbmstPm1faHJlZmxhbmcgPSB0ZXh0RnJvbVhN
TEF0dHIoYXR0cik7Ci0gICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRpdGxlIikKLSAgICAgICAg
ICAgIGxpbmstPm1fdGl0bGUgPSB0ZXh0RnJvbVhNTEF0dHIoYXR0cik7Ci0gICAgICAgIGVsc2Ug
aWYgKG5hbWUgPT0gImxlbmd0aCIpCi0gICAgICAgICAgICBsaW5rLT5tX2xlbmd0aCA9IHRleHRG
cm9tWE1MQXR0cihhdHRyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGluazsKLX0KLQotUlNTRW5j
bG9zdXJlKiBSU1NBdG9tUGFyc2VyOjplbmNsb3N1cmVGcm9tTGluayhSU1NBdG9tTGluayogbGlu
aykKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VSVChsaW5rKTsKLSAgICBCTEFDS0JFUlJZX0FTU0VS
VChsaW5rLT5yZWxUeXBlKCkgPT0gUlNTQXRvbUxpbms6OlR5cGVFbmNsb3N1cmUpOwotCi0gICAg
UlNTRW5jbG9zdXJlKiBlbmNsb3N1cmUgPSBuZXcgUlNTRW5jbG9zdXJlKCk7Ci0KLSAgICBlbmNs
b3N1cmUtPm1fdXJsID0gbGluay0+bV9ocmVmOwotICAgIGVuY2xvc3VyZS0+bV90eXBlID0gbGlu
ay0+bV90eXBlOwotICAgIGVuY2xvc3VyZS0+bV9sZW5ndGggPSBsaW5rLT5tX2xlbmd0aDsKLQot
ICAgIHJldHVybiBlbmNsb3N1cmU7Ci19Ci0KLVN0cmluZyBSU1NBdG9tUGFyc2VyOjpwYXJzZUNv
bnRlbnQoY29uc3QgU3RyaW5nJiBiYXNlLCB4bWxOb2RlKiBub2RlKQotewotICAgIC8vIFNlZTog
aHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDI4NyNwYWdlLTE2Ci0KLSAgICBCTEFDS0JF
UlJZX0FTU0VSVChub2RlKTsKLSAgICAvLyBXaHkgZG9lcyBCbGFja2JlcnJ5IGhhdmUgaXRzIG93
biBSU1MgcGFyc2VyPwotCi0gICAgU3RyaW5nIGNvbnRlbnQ7Ci0gICAgU3RyaW5nIHR5cGUgPSAi
ZGVmYXVsdCI7Ci0gICAgU3RyaW5nIHNyYzsKLSAgICBmb3IgKHhtbEF0dHIqIGF0dHIgPSBub2Rl
LT5wcm9wZXJ0aWVzOyBhdHRyOyBhdHRyID0gYXR0ci0+bmV4dCkgewotICAgICAgICBTdHJpbmcg
bmFtZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihhdHRyLT5uYW1lKSk7Ci0gICAgICAg
IG5hbWUgPSBuYW1lLmxvd2VyKCk7Ci0KLSAgICAgICAgaWYgKG5hbWUgPT0gInR5cGUiKQotICAg
ICAgICAgICAgdHlwZSA9IHRleHRGcm9tWE1MQXR0cihhdHRyKTsKLSAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSAic3JjIikKLSAgICAgICAgICAgIHNyYyA9IHRleHRGcm9tWE1MQXR0cihhdHRyKTsK
LSAgICB9Ci0KLSAgICBpZiAoIXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKGlzUmVsYXRp
dmVQYXRoKHNyYykpCi0gICAgICAgICAgICBzcmMgPSBiYXNlICsgIi8iICsgc3JjOwotICAgICAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
PGEgaHJlZj1cIiIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChzcmMgKyAiXCI+IiArIHNyYyAr
ICI8L2E+Iik7Ci0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0g
ICAgaWYgKHR5cGUgPT0gInRleHQiIHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC8iKSkKLSAgICAg
ICAgY29udGVudCA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICBlbHNlIGlmICh0eXBlID09
ICJodG1sIikKLSAgICAgICAgY29udGVudCA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICBl
bHNlIGlmICh0eXBlID09ICJ4aHRtbCIpIHsKLSAgICAgICAgeG1sQnVmZmVyUHRyIGJ1ZmZlciA9
IHhtbEJ1ZmZlckNyZWF0ZSgpOwotICAgICAgICB4bWxOb2RlICogY3VyID0gbm9kZS0+Y2hpbGRy
ZW47Ci0gICAgICAgIGlmIChjdXIgJiYgY3VyLT50eXBlID09IFhNTF9FTEVNRU5UX05PREUpIHsK
LSAgICAgICAgICAgIC8vIEVuY29kaW5nIG9mIGJ1ZmZlciBpcyB1dGYtOC4KLSAgICAgICAgICAg
IHhtbE5vZGVEdW1wKGJ1ZmZlciwgY3VyLT5kb2MsIGN1ciwgMCwgMCk7Ci0gICAgICAgICAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgICAgICBpZiAoIWJhc2UuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8YmFzZSBocmVmPSciKTsK
LSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChtX3VybC5iYXNlQXNTdHJpbmcoKSk7Ci0g
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIvIik7Ci0gICAgICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoYmFzZSk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIvJyAvPiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoKGNvbnN0IGNoYXIqKXhtbEJ1ZmZlckNvbnRlbnQoYnVmZmVyKSk7Ci0gICAgICAgICAgICBj
b250ZW50ID0gYnVpbGRlci50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIHhtbEJ1ZmZl
ckZyZWUoYnVmZmVyKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUuZW5kc1dpdGgoIit4bWwiKSB8fCB0
eXBlLmVuZHNXaXRoKCIveG1sIikpCi0gICAgICAgIC8vIEZJWE1FOiBzZWUgYXRvbSBzcGVjIDQu
MS4zLjMuNC4KLSAgICAgICAgY29udGVudCA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICBl
bHNlCi0gICAgICAgIGNvbnRlbnQgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0KLSAgICByZXR1
cm4gY29udGVudDsKLX0KLQotU3RyaW5nIFJTU0F0b21QYXJzZXI6OnBhcnNlQXV0aG9yKHhtbE5v
ZGUqIG5vZGUpCi17Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQobm9kZSk7Ci0KLSAgICBTdHJpbmcg
dXNlcm5hbWU7Ci0gICAgU3RyaW5nIGVtYWlsOwotCi0gICAgZm9yIChub2RlID0gbm9kZS0+Y2hp
bGRyZW47IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5vZGUtPm5hbWUpKTsKLSAgICAgICAgbmFtZSA9
IG5hbWUubG93ZXIoKTsKLQotICAgICAgICBpZiAobmFtZSA9PSAibmFtZSIpCi0gICAgICAgICAg
ICB1c2VybmFtZSA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAobmFt
ZSA9PSAiZW1haWwiKQotICAgICAgICAgICAgZW1haWwgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7
Ci0gICAgfQotCi0gICAgaWYgKCFlbWFpbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgdXNlcm5hbWUg
PSB1c2VybmFtZSArICIgKCI7Ci0gICAgICAgIHVzZXJuYW1lID0gdXNlcm5hbWUgKyBlbWFpbDsK
LSAgICAgICAgdXNlcm5hbWUgPSB1c2VybmFtZSArICIpIjsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dXNlcm5hbWU7Ci19Ci0KLVN0cmluZyBSU1NBdG9tUGFyc2VyOjpwYXJzZUNhdGVnb3J5KHhtbE5v
ZGUqIG5vZGUpCi17Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQobm9kZSk7Ci0KLSAgICBTdHJpbmcg
Y2F0ZWdvcnk7Ci0KLSAgICBmb3IgKHhtbEF0dHIqIGF0dHIgPSBub2RlLT5wcm9wZXJ0aWVzOyBh
dHRyOyBhdHRyID0gYXR0ci0+bmV4dCkgewotICAgICAgICBTdHJpbmcgbmFtZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihhdHRyLT5uYW1lKSk7Ci0gICAgICAgIG5hbWUgPSBuYW1lLmxv
d2VyKCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUncyBhIGxhYmVsLCB3ZSB1c2UgaXQsIGlmIG5v
dCwgdXNlIHRlcm0gYXR0cmlidXRlLCBhcyBsYWJlbCBpcwotICAgICAgICAvLyBvcHRpb25hbCwg
YnV0IHRlcm0gaXMgbWFuZGF0b3J5LgotICAgICAgICBpZiAobmFtZSA9PSAibGFiZWwiKSB7Ci0g
ICAgICAgICAgICBjYXRlZ29yeSA9IHRleHRGcm9tWE1MQXR0cihhdHRyKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5hbWUgPT0gInRlcm0iKQotICAgICAg
ICAgICAgY2F0ZWdvcnkgPSB0ZXh0RnJvbVhNTEF0dHIoYXR0cik7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGNhdGVnb3J5OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU0F0b21QYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
cnNzL1JTU0F0b21QYXJzZXIuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NBdG9tUGFyc2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwg
MjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIFJTU0F0b21QYXJzZXJfaAotI2RlZmlu
ZSBSU1NBdG9tUGFyc2VyX2gKLQotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIlJTU1BhcnNl
ckJhc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSU1NBdG9tTGluayB7Ci1w
dWJsaWM6Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgVHlwZVVua25vd24sCi0gICAgICAgIFR5
cGVBbHRlcm5hdGUsCi0gICAgICAgIFR5cGVSZWxhdGVkLAotICAgICAgICBUeXBlU2VsZiwKLSAg
ICAgICAgVHlwZUVuY2xvc3VyZSwKLSAgICAgICAgVHlwZVZpYSwKLSAgICAgICAgVHlwZVVuc3Vw
cG9ydGVkCi0gICAgfTsKLQotICAgIFJTU0F0b21MaW5rKCkKLSAgICAgICAgOiBtX3R5cGVJbkVu
dW0oVHlwZVVua25vd24pCi0gICAgeyB9Ci0KLSAgICBUeXBlIHJlbFR5cGUoKTsKLQotICAgIFN0
cmluZyBtX3JlbDsKLSAgICBTdHJpbmcgbV9ocmVmOwotICAgIFN0cmluZyBtX2hyZWZsYW5nOwot
ICAgIFN0cmluZyBtX3R5cGU7Ci0gICAgU3RyaW5nIG1fdGl0bGU7Ci0gICAgU3RyaW5nIG1fbGVu
Z3RoOwotCi1wcml2YXRlOgotICAgIFR5cGUgbV90eXBlSW5FbnVtOwotfTsKLQotY2xhc3MgUlNT
QXRvbVBhcnNlciA6IHB1YmxpYyBSU1NQYXJzZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBSU1NBdG9t
UGFyc2VyKCk7Ci0KLSAgICBib29sIHBhcnNlQnVmZmVyKGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50
IGxlbmd0aCwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiBlbmNvZGluZyk7Ci0KLXByaXZh
dGU6Ci0gICAgYm9vbCBwYXJzZVhtbERvYyh4bWxEb2NQdHIpOwotICAgIGJvb2wgcGFyc2VJdGVt
QmFzZUF0dHJpYnV0ZShSU1NJdGVtQmFzZSosIGNvbnN0IFN0cmluZyYgbmFtZSwgeG1sTm9kZSos
IGNvbnN0IFN0cmluZyYgYmFzZSk7Ci0gICAgUlNTSXRlbSogcGFyc2VJdGVtKHhtbE5vZGUqKTsK
LSAgICBSU1NGZWVkKiBwYXJzZUZlZWQoeG1sTm9kZSopOwotICAgIFJTU0F0b21MaW5rKiBwYXJz
ZUxpbmsoeG1sTm9kZSopOwotICAgIFJTU0VuY2xvc3VyZSogZW5jbG9zdXJlRnJvbUxpbmsoUlNT
QXRvbUxpbmsqKTsKLQotICAgIFN0cmluZyBwYXJzZUNvbnRlbnQoY29uc3QgU3RyaW5nJiBiYXNl
LCB4bWxOb2RlKik7Ci0gICAgU3RyaW5nIHBhcnNlQXV0aG9yKHhtbE5vZGUqKTsKLSAgICBTdHJp
bmcgcGFyc2VDYXRlZ29yeSh4bWxOb2RlKik7Ci0gICAgVVJMIG1fdXJsOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUlNTQXRvbVBhcnNlcl9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU0ZpbHRlclN0cmVh
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L3Jzcy9SU1NGaWx0ZXJTdHJlYW0uY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU0ZpbHRlclN0cmVh
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlJTU0ZpbHRlclN0cmVhbS5oIgotCi0jaW5jbHVkZSAiUlNT
MTBQYXJzZXIuaCIKLSNpbmNsdWRlICJSU1MyMFBhcnNlci5oIgotI2luY2x1ZGUgIlJTU0F0b21Q
YXJzZXIuaCIKLSNpbmNsdWRlICJSU1NHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJUZXh0Q29kZWNJ
Q1UuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUFzc2VydC5oPgotI2luY2x1ZGUg
PEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgotI2luY2x1ZGUgPFNjb3BlUG9pbnRlci5oPgotI2lu
Y2x1ZGUgPG5ldHdvcmsvTmV0d29ya1JlcXVlc3QuaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlw
ZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsQ3JpdGljYWw7
Ci11c2luZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvOwotdXNpbmcgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsV2FybjsKLXVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpOZXR3b3JrUmVxdWVzdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3Qg
Y2hhciogY29uc3Qgc191dGY4RW5jb2RpbmdOYW1lID0gIlVURi04IjsKLXN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBzX2xhdGluMUVuY29kaW5nTmFtZSA9ICJJU08tODg1OS0xIjsKLXN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBzX2dia0VuY29kaW5nTmFtZSA9ICJHQksiOwotCi1zdGF0aWMgY29u
c3QgY2hhciogY29uc3Qgc19jb250ZW50RW5jb2RpbmdIZWFkZXJLZXkgPSAiQ29udGVudC1FbmNv
ZGluZyI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19jb250ZW50TGVuZ3RoSGVhZGVyS2V5
ID0gIkNvbnRlbnQtTGVuZ3RoIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX2NvbnRlbnRU
eXBlSGVhZGVyS2V5ID0gIkNvbnRlbnQtVHlwZSI7Ci0KLXN0YXRpYyBpbnQgaXNBU0NJSVNwYWNl
TG93ZXJCeXRlKGludCBjaCkKLXsKLSAgICByZXR1cm4gaXNBU0NJSVNwYWNlPGludD4oY2ggJiAw
eGZmKTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5nJiBzdHJpcFdoaXRlU3BhY2Uoc3RkOjpzdHJp
bmcmIHN0cikKLXsKLSAgICBzdHIuZXJhc2Uoc3RyLmJlZ2luKCksIHN0ZDo6ZmluZF9pZihzdHIu
YmVnaW4oKSwgc3RyLmVuZCgpLCBzdGQ6Om5vdDEoc3RkOjpwdHJfZnVuPGludCwgaW50Pihpc0FT
Q0lJU3BhY2VMb3dlckJ5dGUpKSkpOwotICAgIHN0ci5lcmFzZShzdGQ6OmZpbmRfaWYoc3RyLnJi
ZWdpbigpLCBzdHIucmVuZCgpLCBzdGQ6Om5vdDEoc3RkOjpwdHJfZnVuPGludCwgaW50Pihpc0FT
Q0lJU3BhY2VMb3dlckJ5dGUpKSkuYmFzZSgpLCBzdHIuZW5kKCkpOwotICAgIHJldHVybiBzdHI7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBzdGQ6OnN0
cmluZyYgZmlyc3QsIGNvbnN0IGNoYXIqIHNlY29uZCkKLXsKLSAgICByZXR1cm4gIXN0cmNhc2Vj
bXAoZmlyc3QuY19zdHIoKSwgc2Vjb25kKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzQXRv
bU1JTUVUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICByZXR1cm4gZXF1
YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJhcHBsaWNhdGlvbi9hdG9tK3htbCIpOwotfQotCi1z
dGF0aWMgaW5saW5lIGJvb2wgaXNSU1NNSU1FVHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZVR5
cGUpCi17Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAiYXBwbGljYXRp
b24vcnNzK3htbCIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQb3RlbnRpYWxSU1NNSU1F
VHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgcmV0dXJuICFzdHJuY21w
KG1pbWVUeXBlLmRhdGEoKSwgInRleHQveG1sIiwgOCkgfHwgIXN0cm5jbXAobWltZVR5cGUuZGF0
YSgpLCAiYXBwbGljYXRpb24veG1sIiwgMTUpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNS
U1NDb250ZW50KFJTU0ZpbHRlclN0cmVhbTo6UmVzb3VyY2VUeXBlIHR5cGUpCi17Ci0gICAgcmV0
dXJuIHR5cGUgPT0gUlNTRmlsdGVyU3RyZWFtOjpUeXBlUlNTMTAKLSAgICAgICAgfHwgdHlwZSA9
PSBSU1NGaWx0ZXJTdHJlYW06OlR5cGVSU1MyMAotICAgICAgICB8fCB0eXBlID09IFJTU0ZpbHRl
clN0cmVhbTo6VHlwZVJTU0F0b207Ci19Ci0KLXN0YXRpYyBSU1NGaWx0ZXJTdHJlYW06OlJlc291
cmNlVHlwZSBSU1NUeXBlRnJvbUNvbnRlbnRUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50
VHlwZSkKLXsKLSAgICBpZiAoY29udGVudFR5cGUuZW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFJT
U0ZpbHRlclN0cmVhbTo6VHlwZVVua25vd247Ci0KLSAgICBzdGQ6OnN0cmluZyBtaW1lVHlwZTsK
LSAgICBzdGQ6OnN0cmluZyB2ZXJzaW9uOwotICAgIGJvb2wgaXNSU1MgPSBmYWxzZTsKLQotICAg
IC8vIFRoZSBjb250ZW50VHlwZSBjYW4gY29udGFpbiBib3RoIGEgbWltZSB0eXBlIGFuZCB2ZXJz
aW9uIGF0dHJpYnV0ZXMKLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGtub3cgdGhlIHR5cGUgaXMgQXRv
bSwgd2UgZG9uJ3QgbmVlZCBlaXRoZXIgb2YgdGhlc2UsIHNvIHNraXAgaXQKLSAgICBmb3IgKHNp
emVfdCBzdGFydCA9IDAsIGRlbGltaXRlciA9IDA7IGRlbGltaXRlciAhPSBzdGQ6OnN0cmluZzo6
bnBvczsgc3RhcnQgPSBkZWxpbWl0ZXIgKyAxKSB7Ci0gICAgICAgIGRlbGltaXRlciA9IGNvbnRl
bnRUeXBlLmZpbmQoJzsnLCBzdGFydCk7Ci0KLSAgICAgICAgc3RkOjpzdHJpbmcgY29tcG9uZW50
ID0gY29udGVudFR5cGUuc3Vic3RyKHN0YXJ0LCBkZWxpbWl0ZXIgPT0gc3RkOjpzdHJpbmc6Om5w
b3MgPyBkZWxpbWl0ZXIgOiBkZWxpbWl0ZXIgLSBzdGFydCk7Ci0KLSAgICAgICAgaWYgKG1pbWVU
eXBlLmVtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChpc0F0b21NSU1FVHlwZShjb21wb25lbnQp
KQotICAgICAgICAgICAgICAgIHJldHVybiBSU1NGaWx0ZXJTdHJlYW06OlR5cGVSU1NBdG9tOwot
Ci0gICAgICAgICAgICBpZiAoaXNSU1NNSU1FVHlwZShjb21wb25lbnQpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gZGVmaW5pdGVseSBub3QgYSB2ZXJzaW9uIGF0dHJpYnV0ZSwgc2tpcCB0byBuZXh0
IHRva2VuCi0gICAgICAgICAgICAgICAgbWltZVR5cGUgPSBjb21wb25lbnQ7Ci0gICAgICAgICAg
ICAgICAgaXNSU1MgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IGVxdWFsc2lnbiA9IGNvbXBvbmVudC5m
aW5kKCc9Jyk7Ci0gICAgICAgIGlmIChlcXVhbHNpZ24gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYg
ZXF1YWxJZ25vcmluZ0Nhc2UoY29tcG9uZW50LnN1YnN0cigwLCBlcXVhbHNpZ24pLCAidmVyc2lv
biIpKQotICAgICAgICAgICAgdmVyc2lvbiA9IGNvbXBvbmVudC5zdWJzdHIoZXF1YWxzaWduICsg
MSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgd2Ugbm93IGhhdmUgZm91bmQgYm90aCBNSU1FIHR5
cGUgYW5kIHZlcnNpb24KLSAgICAgICAgaWYgKCFtaW1lVHlwZS5lbXB0eSgpICYmICF2ZXJzaW9u
LmVtcHR5KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoaXNSU1MpIHsK
LSAgICAgICAgaWYgKCF2ZXJzaW9uLmNvbXBhcmUoIjEuMCIpKQotICAgICAgICAgICAgcmV0dXJu
IFJTU0ZpbHRlclN0cmVhbTo6VHlwZVJTUzEwOwotCi0gICAgICAgIHJldHVybiBSU1NGaWx0ZXJT
dHJlYW06OlR5cGVSU1MyMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpU
eXBlVW5rbm93bjsKLX0KLQotc3RhdGljIFJTU0ZpbHRlclN0cmVhbTo6UmVzb3VyY2VUeXBlIFJT
U1R5cGVGcm9tQ29udGVudChjb25zdCBjaGFyKiBzdHIsIGludCBzdHJMZW4pCi17Ci0gICAgLy8g
TG9jYXRlIHhtbCBzaWduYXR1cmUuCi0gICAgY29uc3QgY2hhciogcG9zID0gc3RyOwotCi0gICAg
Ly8gTG9jYXRlIHRoZSBSU1MgdGFncy4KLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBwb3Mg
PSBzdHJjaHIocG9zLCAnPCcpOwotICAgICAgICBpZiAoIXBvcyB8fCAocG9zIC0gc3RyID49IHN0
ckxlbikpIHsKLSAgICAgICAgICAgIEJCTE9HKExvZ0xldmVsSW5mbywgIlJTU1R5cGVGcm9tQ29u
dGVudCgpOiBjYW4gbm90IGZpbmQgYW55IHN0YXJ0IHRhZyIpOwotICAgICAgICAgICAgcmV0dXJu
IFJTU0ZpbHRlclN0cmVhbTo6VHlwZVVua25vd247Ci0gICAgICAgIH0KLQotICAgICAgICArK3Bv
czsKLQotICAgICAgICBpZiAoIXN0cm5jYXNlY21wKHBvcywgInJzcyIsIDMpKSB7Ci0gICAgICAg
ICAgICBpZiAoaXNTcGFjZU9yTmV3bGluZSgqKHBvcyArIDMpKSkgewotICAgICAgICAgICAgICAg
IEJCTE9HKExvZ0xldmVsSW5mbywgIlJTU1R5cGVGcm9tQ29udGVudCgpOiBmb3VuZCBSU1MgMi4w
IHRhZyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBSU1NGaWx0ZXJTdHJlYW06OlR5cGVSU1My
MDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQkJMT0coTG9nTGV2ZWxJbmZvLCAiUlNT
VHlwZUZyb21Db250ZW50KCk6IHdyb25nIFJTUyAyLjAgdGFnOiAlLipzIiwgMzIsIHBvcyk7Ci0g
ICAgICAgICAgICByZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlVW5rbm93bjsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghc3RybmNhc2VjbXAocG9zLCAiZmVlZCIsIDQpKSB7Ci0gICAgICAg
ICAgICBpZiAoaXNTcGFjZU9yTmV3bGluZSgqKHBvcyArIDQpKSkgewotICAgICAgICAgICAgICAg
IEJCTE9HKExvZ0xldmVsSW5mbywgIlJTU1R5cGVGcm9tQ29udGVudCgpOiBmb3VuZCBBdG9tIDEu
MCB0YWciKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlUlNT
QXRvbTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQkJMT0coTG9nTGV2ZWxJbmZvLCAi
UlNTVHlwZUZyb21Db250ZW50KCk6IHdyb25nIEF0b20gMS4wIHRhZzogJS4qcyIsIDMyLCBwb3Mp
OwotICAgICAgICAgICAgcmV0dXJuIFJTU0ZpbHRlclN0cmVhbTo6VHlwZVVua25vd247Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIXN0cm5jYXNlY21wKHBvcywgInJkZjpSREYiLCA3KSkgewot
ICAgICAgICAgICAgaWYgKGlzU3BhY2VPck5ld2xpbmUoKihwb3MgKyA3KSkpIHsKLSAgICAgICAg
ICAgICAgICBCQkxPRyhMb2dMZXZlbEluZm8sICJSU1NUeXBlRnJvbUNvbnRlbnQoKTogZm91bmQg
UlNTIDEuMCB0YWciKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpU
eXBlUlNTMTA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEJCTE9HKExvZ0xldmVsSW5m
bywgIlJTU1R5cGVGcm9tQ29udGVudCgpOiB3cm9uZyBSU1MgMS4wIHRhZzogJS4qcyIsIDMyLCBw
b3MpOwotICAgICAgICAgICAgcmV0dXJuIFJTU0ZpbHRlclN0cmVhbTo6VHlwZVVua25vd247Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0cm5jYXNlY21wKHBvcywgIj94bWwiLCA0KSkgewot
ICAgICAgICAgICAgQkJMT0coTG9nTGV2ZWxJbmZvLCAiUlNTVHlwZUZyb21Db250ZW50KCk6IGZv
dW5kIGFub3RoZXIgeG1sIHRhZyIpOwotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbm90aGVyIHht
bCBpbmZvLCBza2lwIGl0LgotICAgICAgICAgICAgcG9zICs9IDQ7Ci0gICAgICAgICAgICBwb3Mg
PSBzdHJzdHIocG9zLCAiPz4iKTsKLQotICAgICAgICAgICAgaWYgKCFwb3MgfHwgKHBvcyAtIHN0
ciA+PSBzdHJMZW4pKSB7Ci0gICAgICAgICAgICAgICAgQkJMT0coTG9nTGV2ZWxJbmZvLCAiUlNT
VHlwZUZyb21Db250ZW50KCk6IGV4dHJhIHhtbCB0YWcgdG9vIGxvbmciKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlVW5rbm93bjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcG9zICs9IDI7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghc3RybmNhc2VjbXAocG9zLCAiIS0tIiwgMykpIHsKLSAgICAgICAg
ICAgIEJCTE9HKExvZ0xldmVsSW5mbywgIlJTU1R5cGVGcm9tQ29udGVudCgpOiBmb3VuZCBjb21t
ZW50cyIpOwotICAgICAgICAgICAgLy8gVGhpcyBpcyBjb21tZW50cywgc2tpcCBpdC4KLSAgICAg
ICAgICAgIHBvcyArPSAzOwotICAgICAgICAgICAgcG9zID0gc3Ryc3RyKHBvcywgIi0tPiIpOwot
Ci0gICAgICAgICAgICBpZiAoIXBvcyB8fCAocG9zIC0gc3RyID49IHN0ckxlbikpIHsKLSAgICAg
ICAgICAgICAgICBCQkxPRyhMb2dMZXZlbEluZm8sICJSU1NUeXBlRnJvbUNvbnRlbnQoKTogY29t
bWVudHMgdG9vIGxvbmciKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUlNTRmlsdGVyU3RyZWFt
OjpUeXBlVW5rbm93bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcG9zICs9IDM7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEJCTE9HKExvZ0xldmVs
SW5mbywgIlJTU1R5cGVGcm9tQ29udGVudCgpOiBub24gcnNzIHR5cGUgKCUuKnMpIGZvdW5kIiwg
MzIsIHBvcyk7Ci0gICAgICAgIHJldHVybiBSU1NGaWx0ZXJTdHJlYW06OlR5cGVVbmtub3duOwot
ICAgIH0KLQotICAgIHJldHVybiBSU1NGaWx0ZXJTdHJlYW06OlR5cGVVbmtub3duOwotfQotCi1z
dGF0aWMgUGFzc093blB0cjxSU1NQYXJzZXJCYXNlPiBjcmVhdGVQYXJzZXIoUlNTRmlsdGVyU3Ry
ZWFtOjpSZXNvdXJjZVR5cGUgdHlwZSkKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VSVChpc1JTU0Nv
bnRlbnQodHlwZSkpOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBSU1NGaWx0ZXJT
dHJlYW06OlR5cGVSU1NBdG9tOgotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJTU0F0b21Q
YXJzZXIoKSk7Ci0gICAgY2FzZSBSU1NGaWx0ZXJTdHJlYW06OlR5cGVSU1MxMDoKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBSU1MxMFBhcnNlcigpKTsKLSAgICBjYXNlIFJTU0ZpbHRlclN0
cmVhbTo6VHlwZVJTUzIwOgotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJTUzIwUGFyc2Vy
KCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFJTUzIwUGFyc2VyKCkpOwotICAgIH0KLX0KLQotc3RhdGlj
IGJvb2wgZmluZFhNTEVuY29kaW5nUG9zaXRpb24oY29uc3QgY2hhciogc3RyLCBjb25zdCBjaGFy
KiYgZW5jb2RpbmdTdGFydCwgY29uc3QgY2hhciomIGVuY29kaW5nRW5kKQotewotICAgIGVuY29k
aW5nU3RhcnQgPSBzdHJzdHIoc3RyLCAiPD94bWwgIik7Ci0gICAgaWYgKCFlbmNvZGluZ1N0YXJ0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBlbmNvZGluZ1N0YXJ0ICs9IDY7IC8vIExl
bmd0aCBvZiAiPD94bWwgIi4KLSAgICBjaGFyKiBlbmRQb3MgPSBzdHJzdHIoY29uc3RfY2FzdDxj
aGFyKj4oZW5jb2RpbmdTdGFydCksICI/PiIpOwotICAgIGlmICghZW5kUG9zKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBlbmNvZGluZ1N0YXJ0ID0gc3Ryc3RyKGNvbnN0X2Nhc3Q8Y2hh
cio+KGVuY29kaW5nU3RhcnQpLCAiZW5jb2RpbmciKTsKLQotICAgIGlmICghZW5jb2RpbmdTdGFy
dCB8fCBlbmNvZGluZ1N0YXJ0ID4gZW5kUG9zKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBlbmNvZGluZ1N0YXJ0ICs9IDg7Ci0KLSAgICB3aGlsZSAoZW5jb2RpbmdTdGFydCA8IGVuZFBv
cyAmJiAqZW5jb2RpbmdTdGFydCA8PSAnICcpCi0gICAgICAgICsrZW5jb2RpbmdTdGFydDsKLQot
ICAgIGlmIChlbmNvZGluZ1N0YXJ0ID09IGVuZFBvcyB8fCAqZW5jb2RpbmdTdGFydCAhPSAnPScp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICsrZW5jb2RpbmdTdGFydDsKLQotICAgIHdo
aWxlIChlbmNvZGluZ1N0YXJ0IDwgZW5kUG9zICYmICplbmNvZGluZ1N0YXJ0IDw9ICcgJykKLSAg
ICAgICAgKytlbmNvZGluZ1N0YXJ0OwotCi0gICAgaWYgKGVuY29kaW5nU3RhcnQgPT0gZW5kUG9z
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjaGFyIHF1b3RlID0gKmVuY29kaW5nU3Rh
cnQ7Ci0gICAgaWYgKHF1b3RlICE9ICdcIicgJiYgcXVvdGUgIT0gJ1wnJykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgKytlbmNvZGluZ1N0YXJ0OwotICAgIGVuY29kaW5nRW5kID0gc3Ry
Y2hyKGNvbnN0X2Nhc3Q8Y2hhcio+KGVuY29kaW5nU3RhcnQpLCBxdW90ZSk7Ci0KLSAgICBpZiAo
IWVuY29kaW5nRW5kIHx8IGVuY29kaW5nRW5kID09IGVuY29kaW5nU3RhcnQgfHwgZW5jb2RpbmdF
bmQgPiBlbmRQb3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgYm9vbCBmaW5kWE1MTGFuZ3VhZ2VQb3NpdGlvbihjb25zdCBjaGFyKiBzdHIs
IGNvbnN0IGNoYXIqJiBsYW5nU3RhcnQsIGNvbnN0IGNoYXIqJiBsYW5nRW5kKQotewotICAgIGxh
bmdTdGFydCA9IHN0cnN0cihjb25zdF9jYXN0PGNoYXIqPihzdHIpLCAiPGxhbmd1YWdlPiIpOwot
ICAgIGlmICghbGFuZ1N0YXJ0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBsYW5nU3Rh
cnQgKz0gMTA7IC8vIExlbmd0aCBvZiAiPGxhbmd1YWdlPiIuCi0gICAgY2hhciogZW5kUG9zID0g
c3Ryc3RyKGNvbnN0X2Nhc3Q8Y2hhcio+KGxhbmdTdGFydCksICI8L2xhbmd1YWdlPiIpOwotICAg
IGlmICghZW5kUG9zKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB3aGlsZSAobGFuZ1N0
YXJ0IDwgZW5kUG9zICYmICpsYW5nU3RhcnQgPD0gJyAnKQotICAgICAgICArK2xhbmdTdGFydDsK
LQotICAgIGlmIChsYW5nU3RhcnQgPT0gZW5kUG9zKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBsYW5nRW5kID0gZW5kUG9zIC0gMTsKLQotICAgIHdoaWxlIChsYW5nRW5kID4gbGFuZ1N0
YXJ0ICYmICpsYW5nRW5kIDw9ICcgJykKLSAgICAgICAgLS1sYW5nRW5kOwotCi0gICAgKytsYW5n
RW5kOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciogZGVmYXVsdEVu
Y29kaW5nRm9yTGFuZ3VhZ2UoY29uc3QgY2hhciogbGFuZ3VhZ2UpCi17Ci0gICAgaWYgKCFzdHJj
YXNlY21wKGxhbmd1YWdlLCAiZW4iKSB8fCAhc3RyY2FzZWNtcChsYW5ndWFnZSwgImVuLVVTIikp
Ci0gICAgICAgIHJldHVybiBzX2xhdGluMUVuY29kaW5nTmFtZTsKLSAgICBpZiAoIXN0cmNhc2Vj
bXAobGFuZ3VhZ2UsICJ6aC1jbiIpKQotICAgICAgICByZXR1cm4gc19nYmtFbmNvZGluZ05hbWU7
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGJvb2wgaXNUcmFuc2NvZGluZ05lZWRlZChj
b25zdCBzdGQ6OnN0cmluZyYgZW5jb2RpbmcpCi17Ci0gICAgLy8gV2hlbiB0aGVyZSdzIG5vIGVu
Y29kaW5nIGluZm9ybWF0aW9uLCBvciB0aGUgZW5jb2RpbmcgY2FuIG5vdCBiZSBmb3VuZCBpbiBh
bGwgZW5jb2RpbmdzCi0gICAgLy8gc3VwcG9ydGVkIGluIG91ciBwaG9uZSwgd2Ugd2lsbCB0cnkg
dG8gdHJhbnNjb2RlIHRoZSBjb250ZW50IGFueXdheSwgc3VwcG9zZWQgdG8gQVNDSUkuCi0gICAg
aWYgKGVuY29kaW5nLmVtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJu
IFRleHRFbmNvZGluZyhzX3V0ZjhFbmNvZGluZ05hbWUpICE9IFRleHRFbmNvZGluZyhlbmNvZGlu
Zy5jX3N0cigpKTsKLX0KLQotZW51bSBUcmFuc2NvZGVSZXN1bHQgewotICAgIFN1Y2Nlc3MsCi0g
ICAgU291cmNlRW5jb2RpbmdVbnN1cHBvcnRlZCwKLSAgICBTb3VyY2VCcm9rZW4sCi0gICAgVGFy
Z2V0RW5jb2RpbmdVbnN1cHBvcnRlZCwKLSAgICBUYXJnZXRCdWZmZXJJbnN1ZmZpY2llbnQKLX07
Ci0KLXN0YXRpYyBUcmFuc2NvZGVSZXN1bHQgdHJhbnNjb2RlKGNvbnN0IGNoYXIqIHNvdXJjZUVu
Y29kaW5nLAotICAgIGNvbnN0IGNoYXIqIHRhcmdldEVuY29kaW5nLAotICAgIGNvbnN0IGNoYXIq
JiBzb3VyY2VTdGFydCwKLSAgICBpbnQgc291cmNlTGVuZ3RoLAotICAgIGNoYXIqJiB0YXJnZXRT
dGFydCwKLSAgICB1bnNpZ25lZCB0YXJnZXRMZW5ndGgpCi17Ci0gICAgVGV4dEVuY29kaW5nIHRl
eHRFbmNvZGluZ1NvdXJjZShzb3VyY2VFbmNvZGluZyk7Ci0gICAgaWYgKCF0ZXh0RW5jb2RpbmdT
b3VyY2UuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gU291cmNlRW5jb2RpbmdVbnN1cHBvcnRl
ZDsKLQotICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmdUYXJnZXQodGFyZ2V0RW5jb2Rpbmcp
OwotICAgIGlmICghdGV4dEVuY29kaW5nVGFyZ2V0LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJu
IFRhcmdldEVuY29kaW5nVW5zdXBwb3J0ZWQ7Ci0KLSAgICBib29sIHNhd0Vycm9yID0gZmFsc2U7
Ci0gICAgU3RyaW5nIHVjczIgPSBUZXh0Q29kZWNJQ1UodGV4dEVuY29kaW5nU291cmNlKS5kZWNv
ZGUoc291cmNlU3RhcnQsIHNvdXJjZUxlbmd0aCwgdHJ1ZSwgdHJ1ZSwgc2F3RXJyb3IpOwotCi0g
ICAgaWYgKHNhd0Vycm9yKQotICAgICAgICByZXR1cm4gU291cmNlQnJva2VuOwotCi0gICAgQ1N0
cmluZyBlbmNvZGVkID0gVGV4dENvZGVjSUNVKHRleHRFbmNvZGluZ1RhcmdldCkuZW5jb2RlKHVj
czIuY2hhcmFjdGVycygpLCB1Y3MyLmxlbmd0aCgpLCBXZWJDb3JlOjpFbnRpdGllc0ZvclVuZW5j
b2RhYmxlcyk7Ci0gICAgaWYgKGVuY29kZWQubGVuZ3RoKCkgPiB0YXJnZXRMZW5ndGgpCi0gICAg
ICAgIHJldHVybiBUYXJnZXRCdWZmZXJJbnN1ZmZpY2llbnQ7Ci0KLSAgICBzdHJuY3B5KHRhcmdl
dFN0YXJ0LCBlbmNvZGVkLmRhdGEoKSwgZW5jb2RlZC5sZW5ndGgoKSk7Ci0gICAgdGFyZ2V0U3Rh
cnQgKz0gZW5jb2RlZC5sZW5ndGgoKTsKLQotICAgIHJldHVybiBTdWNjZXNzOwotfQotCi1zdGF0
aWMgYm9vbCB0cmFuc2NvZGVDb250ZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50LCBjb25z
dCBzdGQ6OnN0cmluZyYgZW5jb2RpbmcsIHN0ZDo6c3RyaW5nJiByZXN1bHQpCi17Ci0gICAgdW5z
aWduZWQgdXRmOGxlbmd0aCA9IGNvbnRlbnQuc2l6ZSgpICogMyAvIDI7IC8vIFVzZSBtYXhpbXVt
IG51bWJlciB1dGYtOCBsZW5ndGguCi0gICAgU2NvcGVBcnJheTxjaGFyPiBidWZmZXIobmV3IGNo
YXJbdXRmOGxlbmd0aCArIDFdKTsKLQotICAgIHN0ZDo6c3RyaW5nIHhtbEhlYWRlclN0cmluZzsK
LQotICAgIGNvbnN0IGNoYXIqIHN0YXJ0ID0gY29udGVudC5jX3N0cigpOwotICAgIGNvbnN0IGNo
YXIqIHhtbFN0YXJ0ID0gc3Ryc3RyKHN0YXJ0LCAiPD94bWwgIik7Ci0gICAgY29uc3QgY2hhciog
eG1sRW5kOwotICAgIGlmICh4bWxTdGFydCkgewotICAgICAgICB4bWxFbmQgPSBzdHJzdHIoeG1s
U3RhcnQsICI/PiIpOwotICAgICAgICBpZiAoIXhtbEVuZCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgeG1sRW5kICs9IDI7IC8vIExlbmd0aCBvZiAiPz4iLgotCi0gICAgICAg
IGNvbnN0IGNoYXIqIGVuY29kaW5nU3RhcnQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5n
RW5kOwotICAgICAgICBpZiAoZmluZFhNTEVuY29kaW5nUG9zaXRpb24oc3RhcnQsIGVuY29kaW5n
U3RhcnQsIGVuY29kaW5nRW5kKSkgewotICAgICAgICAgICAgeG1sSGVhZGVyU3RyaW5nLmFzc2ln
bihzdGFydCwgZW5jb2RpbmdTdGFydCAtIHN0YXJ0KTsKLSAgICAgICAgICAgIHhtbEhlYWRlclN0
cmluZy5hcHBlbmQoc191dGY4RW5jb2RpbmdOYW1lKTsKLSAgICAgICAgICAgIHhtbEhlYWRlclN0
cmluZy5hcHBlbmQoZW5jb2RpbmdFbmQsIHhtbEVuZCAtIGVuY29kaW5nRW5kKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHhtbEhlYWRlclN0cmluZy5hc3NpZ24oc3RhcnQsICh4bWxF
bmQgLSAyKSAtIHN0YXJ0KTsKLSAgICAgICAgICAgIHhtbEhlYWRlclN0cmluZy5hcHBlbmQoIiBl
bmNvZGluZz1cIlVURi04XCI/PiIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
eG1sRW5kID0gc3RhcnQ7Ci0gICAgICAgIHhtbEhlYWRlclN0cmluZyA9ICI8P3htbCB2ZXJzaW9u
PVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4iOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIq
IGNvbnRlbnRTdGFydCA9IHhtbEVuZDsKLSAgICBjaGFyKiBidWZmZXJTdGFydCA9ICZidWZmZXJb
MF07Ci0KLSAgICBUcmFuc2NvZGVSZXN1bHQgdHJhbnNjb2RlUmVzdWx0ID0gdHJhbnNjb2RlKGVu
Y29kaW5nLmNfc3RyKCksIHNfdXRmOEVuY29kaW5nTmFtZSwgY29udGVudFN0YXJ0LCBjb250ZW50
Lmxlbmd0aCgpIC0gKHhtbEVuZCAtIHhtbFN0YXJ0KSwgYnVmZmVyU3RhcnQsIHV0ZjhsZW5ndGgp
OwotCi0gICAgLy8gSWYgdGhlIGVuY29kaW5nIGlzIG5vdCBzdXBwb3J0ZWQsIG9yIGlmIHdlIGZh
aWxlZCB0byB0cmFuc2NvZGUgdGhlIGNvbnRlbnQsIHdlIHdpbGwganVzdAotICAgIC8vIGVuY29k
ZSB0aGUgY29udGVudCB0byBBU0NJSSBjb250ZW50LCBhbmQgcmVwbGFjaW5nIGFueSBub24tQVND
SUkgY2hhcmFjdGVyIHdpdGggYSBxdWVzdGlvbgotICAgIC8vIG1hcmsuIFRoaXMgd2lsbCBiZSBi
ZXR0ZXIgdGhhbiBkaXNwbGF5aW5nIHRoZSByYXcgdGV4dCwgYXMgdGhlIHJhdyB0ZXh0IGNhbiBu
b3QgYmUgZGlzcGxheWVkCi0gICAgLy8gY29ycmVjdGx5IGFueXdheSwgYXMgdGhlaXIgZW5jb2Rp
bmcgaXMgbm90IHN1cHBvcnRlZC4KLQotICAgIGlmIChTdWNjZXNzICE9IHRyYW5zY29kZVJlc3Vs
dCkgewotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIGZvciAoOyBjb250ZW50U3RhcnQgPCBz
dGFydCArIGNvbnRlbnQuc2l6ZSgpIDsgKytjb250ZW50U3RhcnQsICsraSkgewotICAgICAgICAg
ICAgaWYgKGlzQVNDSUlQcmludGFibGUoKmNvbnRlbnRTdGFydCkpCi0gICAgICAgICAgICAgICAg
YnVmZmVyW2ldID0gKmNvbnRlbnRTdGFydDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBidWZmZXJbaV0gPSAnPyc7Ci0gICAgICAgIH0KLQotICAgICAgICBidWZmZXJbaV0gPSAw
OwotICAgIH0gZWxzZQotICAgICAgICAqYnVmZmVyU3RhcnQgPSAwOwotCi0gICAgcmVzdWx0LmFz
c2lnbih4bWxIZWFkZXJTdHJpbmcpOwotICAgIHJlc3VsdC5hcHBlbmQoJmJ1ZmZlclswXSk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUlNTRmlsdGVyU3RyZWFtOjpSU1NGaWx0ZXJTdHJlYW0o
KQotICAgIDogRmlsdGVyU3RyZWFtKCkKLSAgICAsIG1fcmVzb3VyY2VUeXBlKFR5cGVVbmtub3du
KQotICAgICwgbV9jb250ZW50VHlwZUluZGV4KC0xKQotICAgICwgbV9jaGFyc2V0Q2hlY2tlZChm
YWxzZSkKLSAgICAsIG1fZW5jb2RpbmdDaGVja2VkKGZhbHNlKQotewotfQotCi12b2lkIFJTU0Zp
bHRlclN0cmVhbTo6bm90aWZ5U3RhdHVzUmVjZWl2ZWQoaW50IHN0YXR1cywgY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICAvLyBOb24tSFRUUCBlcnJv
cnMgaGF2ZSBubyBkYXRhIHRvIGRpc3BsYXksIGFuZCByZWRpcmVjdHMgd2lsbCBuZXZlciBiZSBk
aXNwbGF5ZWQsCi0gICAgLy8gc28gbm8gbmVlZCB0byBjaGVjayBpZiB0aGV5IGhhdmUgUlNTIGRh
dGEKLSAgICAvLyBIVFRQIGVycm9ycyBtYXkgaGF2ZSBkYXRhLCBhbmQgaW4gdGhlb3J5IGl0IGNv
dWxkIGJlIFJTUyBkYXRhIChhbHRob3VnaCBpdCdzIGhpZ2hseQotICAgIC8vIHVubGlrZWx5KSBz
byBiZXR0ZXIgdG8ga2VlcCBjaGVja2luZyB0aGVtLgotICAgIGlmIChzdGF0dXMgPCAwIHx8ICgz
MDAgPD0gc3RhdHVzICYmIHN0YXR1cyA8IDQwMCAmJiBzdGF0dXMgIT0gMzA0KSkgewotICAgICAg
ICBtX3Jlc291cmNlVHlwZSA9IFR5cGVOb3RSU1M7Ci0gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxl
IHdlIHdpbGwgZ2V0IDIgc3RhdHVzIGNvZGUuCi0gICAgICAgIHNlbmRTYXZlZEhlYWRlcnMoKTsK
LSAgICB9Ci0KLSAgICBGaWx0ZXJTdHJlYW06Om5vdGlmeVN0YXR1c1JlY2VpdmVkKHN0YXR1cywg
bWVzc2FnZSk7Ci19Ci0KLXZvaWQgUlNTRmlsdGVyU3RyZWFtOjpub3RpZnlIZWFkZXJzUmVjZWl2
ZWQoY29uc3QgTmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3QmIGhlYWRlcnMpCi17Ci0gICAgaWYg
KCFpc1JTU0NvbnRlbnQobV9yZXNvdXJjZVR5cGUpKSB7Ci0gICAgICAgIE5ldHdvcmtSZXF1ZXN0
OjpIZWFkZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwotICAgICAg
ICBOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGhlYWRl
cnMuYmVnaW4oKTsKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpdGVyLT5maXJzdC50b1N0ZFN0cmluZygpLCBz
X2NvbnRlbnRUeXBlSGVhZGVyS2V5KSkgewotICAgICAgICAgICAgICAgIGlmIChpdGVyLT5zZWNv
bmQuZmluZCgieG1sIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9jb250ZW50VHlwZUluZGV4ID0gc3RkOjpkaXN0YW5jZShOZXR3b3JrUmVxdWVzdDo6SGVh
ZGVyTGlzdDo6Y29uc3RfaXRlcmF0b3IoaGVhZGVycy5iZWdpbigpKSwgaXRlcik7Ci0gICAgICAg
ICAgICAgICAgICAgIFJlc291cmNlVHlwZSB0eXBlID0gUlNTVHlwZUZyb21Db250ZW50VHlwZShp
dGVyLT5zZWNvbmQudG9TdGRTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1JT
U0NvbnRlbnQodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Jlc291cmNlVHlwZSA9
IHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc1BvdGVudGlhbFJTU01JTUVU
eXBlKGl0ZXItPnNlY29uZC50b1N0ZFN0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fcmVzb3VyY2VUeXBlID0gVHlwZU5vdFJTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAobV9jb250ZW50VHlwZUluZGV4IDwgMCkKLSAgICAgICAgbV9yZXNvdXJjZVR5cGUgPSBUeXBl
Tm90UlNTOwotCi0gICAgaWYgKG1fcmVzb3VyY2VUeXBlID09IFR5cGVOb3RSU1MpIHsKLSAgICAg
ICAgc2VuZFNhdmVkSGVhZGVycygpOwotICAgICAgICBGaWx0ZXJTdHJlYW06Om5vdGlmeUhlYWRl
cnNSZWNlaXZlZChoZWFkZXJzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2F2ZUhlYWRlcnMoaGVh
ZGVycyk7Ci19Ci0KLXZvaWQgUlNTRmlsdGVyU3RyZWFtOjpub3RpZnlEYXRhUmVjZWl2ZWQoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICAvLyBIZXJl
IHdlIGFzc3VtZSB0aGUgZmlyc3QgcGFja2V0IG9mIGRhdGEgaXMgZW5vdWdoIGZvciB1cyB0byBz
bmlmZiB0aGUgY29udGVudCB0eXBlLgotICAgIC8vIElmIHNvbWVkYXkgc29tZSBkZWNlbnQgcmVh
bCBsaWZlIHdlYiBzaXRlIHZvaWQgdGhpcyBhc3N1bXB0aW9uLCB3ZSBzaG91bGQgcmUtaW1wbGVt
ZW50Ci0gICAgLy8gdGhpcyBjb2RlLiBCdXQgZm9yIG5vdyBpdCBzaG91bGQgYmUganVzdCBmaW5l
LgotICAgIGlmIChtX3Jlc291cmNlVHlwZSA9PSBUeXBlVW5rbm93bikKLSAgICAgICAgbV9yZXNv
dXJjZVR5cGUgPSBSU1NUeXBlRnJvbUNvbnRlbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Om5ldHdv
cmtCdWZmZXJEYXRhKGJ1ZmZlciksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpuZXR3b3JrQnVmZmVy
RGF0YUxlbmd0aChidWZmZXIpKTsKLQotICAgIC8vIElmIHdlIGRvbid0IGtub3cgdGhlIHJlc291
cmNlIHR5cGUgYXQgdGhpcyBzdGFnZSwgdGhlbiBpdCBpcyBub3QgYSBSU1MgY29udGVudC4KLSAg
ICBpZiAobV9yZXNvdXJjZVR5cGUgPT0gVHlwZVVua25vd24pCi0gICAgICAgIG1fcmVzb3VyY2VU
eXBlID0gVHlwZU5vdFJTUzsKLQotICAgIGlmIChpc1JTU0NvbnRlbnQobV9yZXNvdXJjZVR5cGUp
KQotICAgICAgICBhcHBlbmREYXRhKGJ1ZmZlcik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNlbmRT
YXZlZEhlYWRlcnMoKTsKLSAgICAgICAgRmlsdGVyU3RyZWFtOjpub3RpZnlEYXRhUmVjZWl2ZWQo
YnVmZmVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgUlNTRmlsdGVyU3RyZWFtOjpub3RpZnlDbG9zZShp
bnQgc3RhdHVzKQotewotICAgIC8vIElmIHRoZXJlIHdhcyBubyBkYXRhLCB3ZSBtaWdodCBnZXQg
aGVyZSB3aXRoIHRoZSB0eXBlIHN0aWxsIHVua25vd24uIE5vIGRhdGEgYXQgYWxsIC0+IG5vIFJT
UwotICAgIC8vIGRhdGEuCi0gICAgaWYgKG1fcmVzb3VyY2VUeXBlID09IFR5cGVVbmtub3duKQot
ICAgICAgICBtX3Jlc291cmNlVHlwZSA9IFR5cGVOb3RSU1M7Ci0KLSAgICBpZiAoaXNSU1NDb250
ZW50KG1fcmVzb3VyY2VUeXBlKSkKLSAgICAgICAgaGFuZGxlUlNTQ29udGVudCgpOwotICAgIGVs
c2UgewotICAgICAgICBzZW5kU2F2ZWRIZWFkZXJzKCk7Ci0gICAgICAgIEZpbHRlclN0cmVhbTo6
bm90aWZ5Q2xvc2Uoc3RhdHVzKTsKLSAgICB9Ci19Ci0KLWJvb2wgUlNTRmlsdGVyU3RyZWFtOjpj
b252ZXJ0Q29udGVudFRvSHRtbChzdGQ6OnN0cmluZyYgcmVzdWx0KQotewotICAgIGJvb2wgc3Vj
Y2VzcyA9IGZhbHNlOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlID0gdXJsKCkudG9TdGRT
dHJpbmcoKTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgZW5jID0gZW5jb2RpbmcoKTsKLQotICAg
IE93blB0cjxSU1NQYXJzZXJCYXNlPiBwYXJzZXIgPSBjcmVhdGVQYXJzZXIobV9yZXNvdXJjZVR5
cGUpOwotCi0gICAgaWYgKGlzVHJhbnNjb2RpbmdOZWVkZWQoZW5jKSkgewotICAgICAgICBzdGQ6
OnN0cmluZyB0cmFuc2NvZGVkQ29udGVudDsKLSAgICAgICAgaWYgKHRyYW5zY29kZUNvbnRlbnQo
bV9jb250ZW50LCBlbmMsIHRyYW5zY29kZWRDb250ZW50KSkKLSAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBwYXJzZXItPnBhcnNlQnVmZmVyKHRyYW5zY29kZWRDb250ZW50LmRhdGEoKSwgdHJhbnNjb2Rl
ZENvbnRlbnQubGVuZ3RoKCksIGJhc2UuY19zdHIoKSwgc191dGY4RW5jb2RpbmdOYW1lKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgc3VjY2VzcyA9IHBhcnNlci0+cGFyc2VCdWZmZXIobV9jb250ZW50
LmRhdGEoKSwgbV9jb250ZW50Lmxlbmd0aCgpLCBiYXNlLmNfc3RyKCksIHNfdXRmOEVuY29kaW5n
TmFtZSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIEZJWE1FOgotICAgIC8vIFRoZSBIVE1MIHN0cmluZyBnZW5lcmF0ZWQgYmVsb3cgcHVycG9y
dHMgdG8gYmUgYSBVVEY4LWVuY29kZWQKLSAgICAvLyBXVEY6OlN0cmluZywgYWx0aG91Z2ggaXRz
IGNoYXJhY3RlcnM4KCkgZGF0YSBzaG91bGQgYmUgTGF0aW4xLgotICAgIC8vIFdlIGJ1aWxkIHRo
ZW4gZXh0cmFjdCB0aGlzIHN0cmluZywgcHJldGVuZGluZyB0aGF0IHdlIGRvbid0IGtub3cKLSAg
ICAvLyB0aGF0IHdlIHBhc3MgaW5jb3JyZWN0bHktZW5jb2RlZCBjaGFyIGRhdGEgYm90aCB3YXlz
LgotICAgIC8vIFdlIHNob3VsZCB1c2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBpbnN0
ZWFkIG9mIFdURjo6U3RyaW5nLgotICAgIE93blB0cjxSU1NHZW5lcmF0b3I+IGdlbmVyYXRvciA9
IGFkb3B0UHRyKG5ldyBSU1NHZW5lcmF0b3IoKSk7Ci0gICAgU3RyaW5nIGh0bWwgPSBnZW5lcmF0
b3ItPmdlbmVyYXRlSHRtbChwYXJzZXItPm1fcm9vdCk7Ci0gICAgQVNTRVJUKGh0bWwuaXM4Qml0
KCkpOwotICAgIHJlc3VsdC5hc3NpZ24ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaHRt
bC5jaGFyYWN0ZXJzOCgpKSwgaHRtbC5sZW5ndGgoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBSU1NGaWx0ZXJTdHJlYW06OmhhbmRsZVJTU0NvbnRlbnQoKQotewotICAgIEJMQUNL
QkVSUllfQVNTRVJUKGlzUlNTQ29udGVudChtX3Jlc291cmNlVHlwZSkpOwotCi0gICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtCdWZmZXIqIGJ1ZmZlcjsKLSAgICBzdGQ6OnN0cmluZyBo
dG1sOwotICAgIGlmICghY29udmVydENvbnRlbnRUb0h0bWwoaHRtbCkpCi0gICAgICAgIGJ1ZmZl
ciA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVOZXR3b3JrQnVmZmVyQnlDb3B5aW5nRGF0
YShtX2NvbnRlbnQuY19zdHIoKSwgbV9jb250ZW50LnNpemUoKSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIHVwZGF0ZVJTU0hlYWRlcnMoaHRtbC5zaXplKCkpOwotICAgICAgICBidWZmZXIgPSBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6Y3JlYXRlTmV0d29ya0J1ZmZlckJ5Q29weWluZ0RhdGEoaHRtbC5j
X3N0cigpLCBodG1sLnNpemUoKSk7Ci0gICAgfQotCi0gICAgc2VuZFNhdmVkSGVhZGVycygpOwot
ICAgIEZpbHRlclN0cmVhbTo6bm90aWZ5RGF0YVJlY2VpdmVkKGJ1ZmZlcik7Ci0gICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OnJlbGVhc2VOZXR3b3JrQnVmZmVyKGJ1ZmZlcik7Ci0gICAgRmlsdGVy
U3RyZWFtOjpub3RpZnlDbG9zZShGaWx0ZXJTdHJlYW06OlN0YXR1c1N1Y2Nlc3MpOwotfQotCi1j
b25zdCBzdGQ6OnN0cmluZyYgUlNTRmlsdGVyU3RyZWFtOjpjaGFyc2V0KCkKLXsKLSAgICBCTEFD
S0JFUlJZX0FTU0VSVChtX2NvbnRlbnRUeXBlSW5kZXggPj0gMCk7Ci0KLSAgICBpZiAobV9jaGFy
c2V0Q2hlY2tlZCkKLSAgICAgICAgcmV0dXJuIG1fY2hhcnNldDsKLQotICAgIG1fY2hhcnNldENo
ZWNrZWQgPSB0cnVlOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNoYXJzZXRQcmVmaXggPSAi
Y2hhcnNldD0iOwotICAgIHN0YXRpYyBjb25zdCBpbnQgY2hhcnNldFByZWZpeExlbiA9IHN0cmxl
bihjaGFyc2V0UHJlZml4KTsKLSAgICBzaXplX3QgcG9zID0gKG1faGVhZGVycy5hdChtX2NvbnRl
bnRUeXBlSW5kZXgpLnNlY29uZCkuZmluZChjaGFyc2V0UHJlZml4KTsKLSAgICBpZiAocG9zICE9
IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIG1fY2hhcnNldCA9IG1faGVhZGVycy5hdCht
X2NvbnRlbnRUeXBlSW5kZXgpLnNlY29uZC5zdWJzdHIocG9zICsgY2hhcnNldFByZWZpeExlbiku
dG9TdGRTdHJpbmcoKTsKLSAgICAgICAgc3RyaXBXaGl0ZVNwYWNlKG1fY2hhcnNldCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1fY2hhcnNldDsKLX0KLQotY29uc3Qgc3RkOjpzdHJpbmcmIFJTU0Zp
bHRlclN0cmVhbTo6ZW5jb2RpbmcoKQotewotICAgIGlmIChtX2VuY29kaW5nQ2hlY2tlZCkKLSAg
ICAgICAgcmV0dXJuIG1fZW5jb2Rpbmc7Ci0KLSAgICBtX2VuY29kaW5nQ2hlY2tlZCA9IHRydWU7
Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciA9IGNoYXJzZXQoKTsKLQotICAgIGlmICghc3Ry
LmVtcHR5KCkpIHsKLSAgICAgICAgbV9lbmNvZGluZyA9IHN0cjsKLSAgICAgICAgcmV0dXJuIG1f
ZW5jb2Rpbmc7Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogc3RhcnQgPSBtX2NvbnRlbnQuY19z
dHIoKTsKLSAgICBjb25zdCBjaGFyKiBlbmNvZGluZ1N0YXJ0ID0gMDsKLSAgICBjb25zdCBjaGFy
KiBlbmNvZGluZ0VuZCA9IDA7Ci0gICAgaWYgKGZpbmRYTUxFbmNvZGluZ1Bvc2l0aW9uKHN0YXJ0
LCBlbmNvZGluZ1N0YXJ0LCBlbmNvZGluZ0VuZCkpIHsKLSAgICAgICAgbV9lbmNvZGluZyA9IHN0
ZDo6c3RyaW5nKGVuY29kaW5nU3RhcnQsIGVuY29kaW5nRW5kIC0gZW5jb2RpbmdTdGFydCk7Ci0g
ICAgICAgIHJldHVybiBtX2VuY29kaW5nOwotICAgIH0KLQotICAgIGlmIChmaW5kWE1MTGFuZ3Vh
Z2VQb3NpdGlvbihzdGFydCwgZW5jb2RpbmdTdGFydCwgZW5jb2RpbmdFbmQpKSB7Ci0gICAgICAg
IHN0ZDo6c3RyaW5nIGxhbmd1YWdlU3RyaW5nKGVuY29kaW5nU3RhcnQsIGVuY29kaW5nRW5kIC0g
ZW5jb2RpbmdTdGFydCk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGRlZmF1bHRFbmNvZGluZyA9IGRl
ZmF1bHRFbmNvZGluZ0Zvckxhbmd1YWdlKGxhbmd1YWdlU3RyaW5nLmNfc3RyKCkpOwotICAgICAg
ICBpZiAoZGVmYXVsdEVuY29kaW5nKSB7Ci0gICAgICAgICAgICBtX2VuY29kaW5nID0gZGVmYXVs
dEVuY29kaW5nOwotICAgICAgICAgICAgcmV0dXJuIG1fZW5jb2Rpbmc7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gbV9lbmNvZGluZzsKLX0KLQotdm9pZCBSU1NGaWx0ZXJTdHJlYW06
OnNhdmVIZWFkZXJzKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6
SGVhZGVyTGlzdCYgaGVhZGVycykKLXsKLSAgICBtX2hlYWRlcnMgPSBoZWFkZXJzOwotfQotCi12
b2lkIFJTU0ZpbHRlclN0cmVhbTo6cmVtb3ZlSGVhZGVyKGNvbnN0IGNoYXIqIGtleSkKLXsKLSAg
ICBOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6aXRlcmF0b3IgZW5kID0gbV9oZWFkZXJzLmVu
ZCgpOwotICAgIGZvciAoTmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3Q6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2hlYWRlcnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAo
IXN0cmNhc2VjbXAoaXRlci0+Zmlyc3QuY19zdHIoKSwga2V5KSkgewotICAgICAgICAgICAgbV9o
ZWFkZXJzLmVyYXNlKGl0ZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFJTU0ZpbHRlclN0cmVhbTo6dXBkYXRlSGVhZGVyKGNvbnN0IGNoYXIqIGtl
eSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUpCi17Ci0gICAgTmV0
d29ya1JlcXVlc3Q6OkhlYWRlckxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX2hlYWRlcnMuYmVnaW4o
KTsKLSAgICBOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6aXRlcmF0b3IgZW5kID0gbV9oZWFk
ZXJzLmVuZCgpOwotICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlm
ICghc3RyY2FzZWNtcChpdGVyLT5maXJzdC5jX3N0cigpLCBrZXkpKSB7Ci0gICAgICAgICAgICBp
dGVyLT5zZWNvbmQgPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIG1faGVhZGVycy5pbnNlcnQoaXRlciwgc3RkOjptYWtlX3BhaXIoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZzo6ZnJvbUFzY2lpKGtleSksIHZhbHVlKSk7Ci19Ci0KLXZvaWQg
UlNTRmlsdGVyU3RyZWFtOjp1cGRhdGVSU1NIZWFkZXJzKHNpemVfdCBzaXplKQotewotICAgIFNU
QVRJQ19MT0NBTF9TVFJJTkcoc19odG1sQ29udGVudFR5cGUsICJ0ZXh0L2h0bWw7IGNoYXJzZXQ9
dXRmLTgiKTsKLQotICAgIHJlbW92ZUhlYWRlcihzX2NvbnRlbnRFbmNvZGluZ0hlYWRlcktleSk7
Ci0gICAgdXBkYXRlSGVhZGVyKHNfY29udGVudFR5cGVIZWFkZXJLZXksIHNfaHRtbENvbnRlbnRU
eXBlKTsKLSAgICB1cGRhdGVIZWFkZXIoc19jb250ZW50TGVuZ3RoSGVhZGVyS2V5LCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjpudW1iZXIoc2l6ZSkpOwotfQotCi12b2lkIFJTU0ZpbHRl
clN0cmVhbTo6c2VuZFNhdmVkSGVhZGVycygpCi17Ci0gICAgaWYgKCFtX2hlYWRlcnMuZW1wdHko
KSkgewotICAgICAgICBGaWx0ZXJTdHJlYW06Om5vdGlmeUhlYWRlcnNSZWNlaXZlZChtX2hlYWRl
cnMpOwotICAgICAgICBtX2NvbnRlbnRUeXBlSW5kZXggPSAtMTsKLSAgICAgICAgbV9oZWFkZXJz
LmNsZWFyKCk7Ci0gICAgfQotfQotCi12b2lkIFJTU0ZpbHRlclN0cmVhbTo6YXBwZW5kRGF0YShC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya0J1ZmZlciogYnVmZmVyKQotewotICAgIG1fY29u
dGVudC5hcHBlbmQobmV0d29ya0J1ZmZlckRhdGEoYnVmZmVyKSwgbmV0d29ya0J1ZmZlckRhdGFM
ZW5ndGgoYnVmZmVyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTRmlsdGVyU3RyZWFt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L3Jzcy9SU1NGaWx0ZXJTdHJlYW0uaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NGaWx0ZXJTdHJlYW0uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgUlNTRmlsdGVyU3RyZWFt
X2gKLSNkZWZpbmUgUlNTRmlsdGVyU3RyZWFtX2gKLQotI2luY2x1ZGUgPG5ldHdvcmsvRmlsdGVy
U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUlNTRmlsdGVyU3Ry
ZWFtIDogcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJTdHJlYW0gewotcHVibGlj
OgotICAgIGVudW0gUmVzb3VyY2VUeXBlIHsKLSAgICAgICAgVHlwZVVua25vd24sCi0gICAgICAg
IFR5cGVOb3RSU1MsCi0gICAgICAgIFR5cGVSU1MxMCwKLSAgICAgICAgVHlwZVJTUzIwLAotICAg
ICAgICBUeXBlUlNTQXRvbQotICAgIH07Ci0KLSAgICBSU1NGaWx0ZXJTdHJlYW0oKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlTdGF0dXNSZWNlaXZlZChpbnQgc3RhdHVzLCBjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5SGVhZGVyc1JlY2VpdmVkKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVx
dWVzdDo6SGVhZGVyTGlzdCYpOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEYXRhUmVjZWl2ZWQo
QmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtCdWZmZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5Q2xvc2UoaW50IHN0YXR1cyk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjb252ZXJ0Q29u
dGVudFRvSHRtbChzdGQ6OnN0cmluZyYgcmVzdWx0KTsKLSAgICB2b2lkIGhhbmRsZVJTU0NvbnRl
bnQoKTsKLQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjaGFyc2V0KCk7Ci0gICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIGVuY29kaW5nKCk7Ci0KLSAgICB2b2lkIHNhdmVIZWFkZXJzKGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdCYpOwotICAgIHZvaWQg
cmVtb3ZlSGVhZGVyKGNvbnN0IGNoYXIqIGtleSk7Ci0gICAgdm9pZCB1cGRhdGVIZWFkZXIoY29u
c3QgY2hhcioga2V5LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB2YWx1ZSk7
Ci0gICAgdm9pZCB1cGRhdGVSU1NIZWFkZXJzKHNpemVfdCk7Ci0gICAgdm9pZCBzZW5kU2F2ZWRI
ZWFkZXJzKCk7Ci0KLSAgICB2b2lkIGFwcGVuZERhdGEoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5l
dHdvcmtCdWZmZXIqKTsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVz
dDo6SGVhZGVyTGlzdCBtX2hlYWRlcnM7Ci0gICAgc3RkOjpzdHJpbmcgbV9jb250ZW50OwotICAg
IHN0ZDo6c3RyaW5nIG1fY2hhcnNldDsKLSAgICBzdGQ6OnN0cmluZyBtX2VuY29kaW5nOwotCi0g
ICAgUmVzb3VyY2VUeXBlIG1fcmVzb3VyY2VUeXBlOwotICAgIGludCBtX2NvbnRlbnRUeXBlSW5k
ZXg7Ci0KLSAgICBib29sIG1fY2hhcnNldENoZWNrZWQ7Ci0gICAgYm9vbCBtX2VuY29kaW5nQ2hl
Y2tlZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFJTU0ZpbHRl
clN0cmVhbV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvcnNzL1JTU0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAx
NjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNz
L1JTU0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJTU0dlbmVyYXRvci5oIgotCi0jaW5jbHVkZSAi
TG9jYWxpemVSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlJTU1BhcnNlckJhc2UuaCIKLQotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHNfZGVmYXVs
dEZlZWRUaXRsZSA9IGkxOG4oIlVudGl0bGVkIEZlZWQiKTsKLXN0YXRpYyBjb25zdCBjaGFyKiBz
X2RlZmF1bHRFbnRyeVRpdGxlID0gaTE4bigiVW50aXRsZWQgRW50cnkiKTsKLQotUlNTR2VuZXJh
dG9yOjpSU1NHZW5lcmF0b3IoKQotewotfQotCi1SU1NHZW5lcmF0b3I6On5SU1NHZW5lcmF0b3Io
KQotewotfQotCi1TdHJpbmcgUlNTR2VuZXJhdG9yOjpnZW5lcmF0ZUh0bWwoUlNTRmVlZCogZmVl
ZCkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCI8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVu
dD1cInRleHQvaHRtbDtjaGFyc2V0PXV0Zi04XCIgLz4iKTsKLSAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIjxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJpbml0aWFsLXNjYWxlPTEu
MCwgdXNlci1zY2FsYWJsZT0gbm9cIj4iKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjx0
aXRsZT4iKTsKLQotICAgIGlmICghZmVlZC0+bV90aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGZlZWQtPm1fdGl0bGUpOwotICAgIGVsc2UgaWYgKCFmZWVkLT5tX2xpbmsu
aXNFbXB0eSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZChmZWVkLT5tX2xpbmspOwotICAgIGVs
c2UKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoc19kZWZhdWx0RmVlZFRpdGxlKTsKLQotICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPC90aXRsZT48L2hlYWQ+PGJvZHk+Iik7Ci0KLSAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIjxoMj4iKTsKLSAgICBpZiAoIWZlZWQtPm1fbGluay5pc0VtcHR5
KCkpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8YSBocmVmPVwiIik7Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKGZlZWQtPm1fbGluayk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiXCI+Iik7Ci0gICAgfQotICAgIGlmICghZmVlZC0+bV90aXRsZS5pc0VtcHR5KCkp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZlZWQtPm1fdGl0bGUpOwotICAgIGVsc2UKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoc19kZWZhdWx0RmVlZFRpdGxlKTsKLQotICAgIGlmICghZmVlZC0+
bV9saW5rLmlzRW1wdHkoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8L2E+Iik7
Ci0KLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjwvaDI+Iik7Ci0KLSAgICBpZiAoIWZlZWQt
Pm1fZGVzY3JpcHRpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiPHA+Iik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZlZWQtPm1fZGVzY3JpcHRpb24pOwot
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjwvcD4iKTsKLSAgICB9Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmVlZC0+bV9pdGVtcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBSU1NJdGVtKiBpdGVtID0gZmVlZC0+bV9pdGVtc1tpXTsKLSAgICAgICAgU3RyaW5nIGFydGlj
bGVOYW1lOwotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxkaXYgaWQ9XCIiKTsKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmQoYXJ0aWNsZU5hbWUpOwotICAgICAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIlwiIGNsYXNzPVwiYXJ0aWNsZVwiPlxuPGEgaHJlZj1cIiIpOwotICAgICAgICBp
ZiAoIWl0ZW0tPm1fbGluay5pc0VtcHR5KCkpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChp
dGVtLT5tX2xpbmspOwotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiPjxiPiIpOwot
ICAgICAgICBpZiAoIWl0ZW0tPm1fdGl0bGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoaXRlbS0+bV90aXRsZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKHNfZGVmYXVsdEVudHJ5VGl0bGUpOwotICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIjwvYj48L2E+XG48YnIgLz4iKTsKLQotICAgICAgICBpZiAoIWl0ZW0tPm1fYXV0aG9y
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaTE4bigiQnkiKSk7Ci0g
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiA8Yj4iKTsKLSAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGl0ZW0tPm1fYXV0aG9yKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiPC9iPiAiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghZmVl
ZC0+bV9hdXRob3IuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
aTE4bigiQnkiKSk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgPGI+
Iik7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoZmVlZC0+bV9hdXRob3IpOwotICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPC9iPiAiKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXRlbS0+bV9jYXRlZ29yaWVzLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgaWYgKCFpdGVtLT5tX2F1dGhvci5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoaTE4bigidW5kZXIgIikpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGkxOG4oIlVuZGVyICIpKTsKLQotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW0tPm1fY2F0ZWdvcmllcy5zaXpl
KCkgOyArK2kpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxiPiIp
OwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0ZW0tPm1fY2F0ZWdvcmllc1tpXSk7
Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8L2I+Iik7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoaSA8IGl0ZW0tPm1fY2F0ZWdvcmllcy5zaXplKCkgLSAxKQotICAgICAg
ICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxiciAvPiIpOwot
ICAgICAgICBpZiAoIWl0ZW0tPm1fcHViRGF0ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBidWls
ZGVyLmFwcGVuZChpdGVtLT5tX3B1YkRhdGUpOwotCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiPGJyIC8+Iik7Ci0gICAgICAgIGlmICghaXRlbS0+bV9kZXNjcmlwdGlvbi5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVtLT5tX2Rlc2NyaXB0aW9uKTsKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8YnIgLz4iKTsKLQotICAgICAgICBpZiAoaXRl
bS0+bV9lbmNsb3N1cmUpIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPGJy
IC8+Iik7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxhIGhyZWY9XCIiKTsK
LSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0ZW0tPm1fZW5jbG9zdXJlLT5tX3VybCk7Ci0g
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiPiIpOwotICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoaTE4bigiRW1iZWRkZWQgIikpOwotCi0gICAgICAgICAgICBSU1NFbmNsb3N1
cmU6OlR5cGUgdHlwZSA9IGl0ZW0tPm1fZW5jbG9zdXJlLT50eXBlSW5FbnVtKCk7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgUlNTRW5jbG9zdXJlOjpUeXBl
SW1hZ2U6Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaTE4bigiSW1hZ2UiKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJTU0VuY2xvc3VyZTo6VHlw
ZUF1ZGlvOgotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGkxOG4oIkF1ZGlvIikpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSU1NFbmNsb3N1cmU6OlR5
cGVWaWRlbzoKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChpMThuKCJWaWRlbyIpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUlNTRW5jbG9zdXJlOjpU
eXBlQXBwbGljYXRpb246Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGkxOG4oIlVua25vd24gQ29udGVudCIpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaTE4bigi
IFNvdXJjZTogIikpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaXRlbS0+bV9lbmNsb3N1
cmUtPnN1Z2dlc3RlZE5hbWUoKSk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IjwvYT48YnIgLz48YnIgLz4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiPGJyIC8+PC9kaXY+XG4iKTsKLSAgICB9Ci0KLSAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIjwvYm9keT48L2h0bWw+XG4iKTsKLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NHZW5l
cmF0b3IuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSwz
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQotICovCi0KLSNpZm5kZWYgUlNTR2VuZXJhdG9yX2gKLSNkZWZpbmUgUlNTR2VuZXJhdG9y
X2gKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFJTU0ZlZWQ7Ci0KLWNsYXNzIFJTU0dlbmVyYXRvciB7Ci1wdWJsaWM6Ci0g
ICAgUlNTR2VuZXJhdG9yKCk7Ci0gICAgflJTU0dlbmVyYXRvcigpOwotCi0gICAgU3RyaW5nIGdl
bmVyYXRlSHRtbChSU1NGZWVkKik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBSU1NHZW5lcmF0b3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NQYXJzZXJCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU1BhcnNlckJhc2Uu
Y3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2JsYWNrYmVycnkvcnNzL1JTU1BhcnNlckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEz
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSU1NQYXJzZXJCYXNl
LmgiCi0KLSNpbmNsdWRlICJsaWJ4bWwvcGFyc2VyLmgiCi0jaW5jbHVkZSAibGlieG1sL3htbHdy
aXRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1SU1NFbmNsb3N1cmU6OlJTU0VuY2xvc3VyZSgpCi0gICAgOiBtX3R5cGVJ
bkVudW0oVHlwZVVua25vd24pCi17IH0KLQotUlNTRW5jbG9zdXJlOjpUeXBlIFJTU0VuY2xvc3Vy
ZTo6dHlwZUluRW51bSgpCi17Ci0gICAgaWYgKFR5cGVVbmtub3duICE9IG1fdHlwZUluRW51bSkK
LSAgICAgICAgcmV0dXJuIG1fdHlwZUluRW51bTsKLQotICAgIHNpemVfdCBkaXYgPSBtX3R5cGUu
ZmluZCgnLycpOwotICAgIGlmIChXVEY6Om5vdEZvdW5kID09IGRpdiB8fCAhZGl2KSB7Ci0gICAg
ICAgIG1fdHlwZUluRW51bSA9IFR5cGVVbnN1cHBvcnRlZDsKLSAgICAgICAgcmV0dXJuIG1fdHlw
ZUluRW51bTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgYmFzZSA9IG1fdHlwZS5zdWJzdHJpbmcoMCwg
ZGl2KS5sb3dlcigpOwotICAgIGlmIChiYXNlID09ICJpbWFnZSIpCi0gICAgICAgIG1fdHlwZUlu
RW51bSA9IFR5cGVJbWFnZTsKLSAgICBlbHNlIGlmIChiYXNlID09ICJhdWRpbyIpCi0gICAgICAg
IG1fdHlwZUluRW51bSA9IFR5cGVBdWRpbzsKLSAgICBlbHNlIGlmIChiYXNlID09ICJ2aWRlbyIp
Ci0gICAgICAgIG1fdHlwZUluRW51bSA9IFR5cGVWaWRlbzsKLSAgICBlbHNlIGlmIChiYXNlID09
ICJhcHBsaWNhdGlvbiIpCi0gICAgICAgIG1fdHlwZUluRW51bSA9IFR5cGVBcHBsaWNhdGlvbjsK
LSAgICBlbHNlCi0gICAgICAgIG1fdHlwZUluRW51bSA9IFR5cGVVbnN1cHBvcnRlZDsKLQotICAg
IHJldHVybiBtX3R5cGVJbkVudW07Ci19Ci0KLVN0cmluZyBSU1NFbmNsb3N1cmU6OnN1Z2dlc3Rl
ZE5hbWUoKSBjb25zdAotewotICAgIHNpemVfdCBzdGFydCA9IG1fdXJsLnJldmVyc2VGaW5kKCcv
Jyk7Ci0gICAgaWYgKFdURjo6bm90Rm91bmQgPT0gc3RhcnQpCi0gICAgICAgIHN0YXJ0ID0gMDsK
LSAgICBlbHNlCi0gICAgICAgICsrc3RhcnQ7Ci0KLSAgICByZXR1cm4gbV91cmwuc3Vic3RyaW5n
KHN0YXJ0KTsKLX0KLQotUlNTRmVlZDo6UlNTRmVlZCgpCi17Ci19Ci0KLVJTU0ZlZWQ6On5SU1NG
ZWVkKCkKLXsKLSAgICBjbGVhcigpOwotfQotCi12b2lkIFJTU0ZlZWQ6OmNsZWFyKCkKLXsKLSAg
ICBkZXByZWNhdGVkRGVsZXRlQWxsVmFsdWVzKG1faXRlbXMpOwotICAgIG1faXRlbXMuY2xlYXIo
KTsKLX0KLQotUlNTSXRlbTo6UlNTSXRlbSgpCi0gICAgOiBtX2VuY2xvc3VyZSgwKQotewotfQot
Ci1SU1NJdGVtOjp+UlNTSXRlbSgpCi17Ci0gICAgY2xlYXIoKTsKLX0KLQotdm9pZCBSU1NJdGVt
OjpjbGVhcigpCi17Ci0gICAgZGVsZXRlIG1fZW5jbG9zdXJlOwotfQotCi1SU1NQYXJzZXJCYXNl
OjpSU1NQYXJzZXJCYXNlKCkKLSAgICA6IG1fcm9vdCgwKQotewotfQotCi1SU1NQYXJzZXJCYXNl
Ojp+UlNTUGFyc2VyQmFzZSgpCi17Ci0gICAgZGVsZXRlIG1fcm9vdDsKLX0KLQotU3RyaW5nIHRl
eHRGcm9tWE1MQXR0cih4bWxBdHRyKiBhdHRyKQotewotICAgIGlmICghYXR0cikKLSAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHRleHQ7Ci0KLSAgICBm
b3IgKHhtbE5vZGUqIG5vZGUgPSBhdHRyLT5jaGlsZHJlbjsgbm9kZTsgbm9kZSA9IG5vZGUtPm5l
eHQpIHsKLSAgICAgICAgaWYgKG5vZGUtPnR5cGUgPT0gWE1MX1RFWFRfTk9ERSkKLSAgICAgICAg
ICAgIHRleHQuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5vZGUtPmNvbnRl
bnQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGV4dC50b1N0cmluZygpLnN0cmlwV2hpdGVTcGFj
ZSgpOwotfQotCi1TdHJpbmcgdGV4dEZyb21YTUxOb2RlKHhtbE5vZGUqIG5vZGUpCi17Ci0gICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1
aWxkZXIgdGV4dDsKLQotICAgIGZvciAobm9kZSA9IG5vZGUtPmNoaWxkcmVuOyBub2RlOyBub2Rl
ID0gbm9kZS0+bmV4dCkgewotICAgICAgICBpZiAoKG5vZGUtPnR5cGUgPT0gWE1MX1RFWFRfTk9E
RSkgfHwgKG5vZGUtPnR5cGUgPT0gWE1MX0NEQVRBX1NFQ1RJT05fTk9ERSkpCi0gICAgICAgICAg
ICB0ZXh0LmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihub2RlLT5jb250ZW50
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2Uo
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NQYXJzZXJCYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NQYXJz
ZXJCYXNlLmgJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTUGFyc2VyQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEy
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLQotI2lmbmRlZiBSU1NQYXJzZXJCYXNlX2gKLSNkZWZpbmUgUlNTUGFy
c2VyQmFzZV9oCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1NaXNjLmg+Ci0jaW5jbHVk
ZSA8bGlieG1sL3RyZWUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUlNTSXRl
bTsKLQotY2xhc3MgUlNTRW5jbG9zdXJlIHsKLXB1YmxpYzoKLSAgICBlbnVtIFR5cGUgewotICAg
ICAgICBUeXBlVW5rbm93biwKLSAgICAgICAgVHlwZUltYWdlLAotICAgICAgICBUeXBlQXVkaW8s
Ci0gICAgICAgIFR5cGVWaWRlbywKLSAgICAgICAgVHlwZUFwcGxpY2F0aW9uLAotICAgICAgICBU
eXBlVW5zdXBwb3J0ZWQKLSAgICB9OwotCi0gICAgUlNTRW5jbG9zdXJlKCk7Ci0KLSAgICBUeXBl
IHR5cGVJbkVudW0oKTsKLSAgICBTdHJpbmcgc3VnZ2VzdGVkTmFtZSgpIGNvbnN0OwotCi0gICAg
U3RyaW5nIG1fdXJsOwotICAgIFN0cmluZyBtX3R5cGU7Ci0gICAgU3RyaW5nIG1fbGVuZ3RoOwot
Ci1wcml2YXRlOgotICAgIFR5cGUgbV90eXBlSW5FbnVtOwotfTsKLQotY2xhc3MgUlNTSXRlbUJh
c2UgewotcHVibGljOgotICAgIFN0cmluZyBtX3RpdGxlOwotICAgIFN0cmluZyBtX2xpbms7Ci0g
ICAgU3RyaW5nIG1fZGVzY3JpcHRpb247Ci0gICAgU3RyaW5nIG1fdXBkYXRlZDsKLSAgICBTdHJp
bmcgbV9hdXRob3I7Ci0gICAgU3RyaW5nIG1fcHViRGF0ZTsKLSAgICBTdHJpbmcgbV9pZDsKLX07
Ci0KLWNsYXNzIFJTU0ZlZWQ6IHB1YmxpYyBSU1NJdGVtQmFzZSB7Ci1wdWJsaWM6Ci0gICAgUlNT
RmVlZCgpOwotICAgIH5SU1NGZWVkKCk7Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICBTdHJp
bmcgbV9sYW5ndWFnZTsKLSAgICBTdHJpbmcgbV90dGw7Ci0KLSAgICBWZWN0b3I8UlNTSXRlbSo+
IG1faXRlbXM7Ci19OwotCi1jbGFzcyBSU1NJdGVtOiBwdWJsaWMgUlNTSXRlbUJhc2UgewotcHVi
bGljOgotICAgIFJTU0l0ZW0oKTsKLSAgICB+UlNTSXRlbSgpOwotCi0gICAgdm9pZCBjbGVhcigp
OwotCi0gICAgU3RyaW5nIG1fY29tbWVudHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9jYXRlZ29y
aWVzOwotICAgIFJTU0VuY2xvc3VyZSogbV9lbmNsb3N1cmU7Ci1wcml2YXRlOgotICAgIERJU0FC
TEVfQ09QWShSU1NJdGVtKQotfTsKLQotY2xhc3MgUlNTUGFyc2VyQmFzZSB7Ci1wdWJsaWM6Ci0g
ICAgUlNTUGFyc2VyQmFzZSgpOwotICAgIHZpcnR1YWwgflJTU1BhcnNlckJhc2UoKTsKLQotICAg
IHZpcnR1YWwgYm9vbCBwYXJzZUJ1ZmZlcihjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW5ndGgs
IGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogZW5jb2RpbmcpID0gMDsKLQotICAgIFJTU0Zl
ZWQqIG1fcm9vdDsKLXByaXZhdGU6Ci0gICAgRElTQUJMRV9DT1BZKFJTU1BhcnNlckJhc2UpCi19
OwotCi1TdHJpbmcgdGV4dEZyb21YTUxBdHRyKHhtbEF0dHIqKTsKLVN0cmluZyB0ZXh0RnJvbVhN
TE5vZGUoeG1sTm9kZSopOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBS
U1NQYXJzZXJCYXNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9yc3MvUlNTMTBQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTMTBQYXJzZXIuY3BwCShyZXZpc2lv
biAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
cnNzL1JTUzEwUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUlNTMTBQYXJzZXIuaCIKLQotI2luY2x1ZGUg
IkJsYWNrQmVycnlQbGF0Zm9ybUFzc2VydC5oIgotI2luY2x1ZGUgImxpYnhtbC9wYXJzZXIuaCIK
LSNpbmNsdWRlICJsaWJ4bWwveG1sd3JpdGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
UlNTMTBQYXJzZXI6OlJTUzEwUGFyc2VyKCkKLXsKLX0KLQotYm9vbCBSU1MxMFBhcnNlcjo6cGFy
c2VCdWZmZXIoY29uc3QgY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoLCBjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIGVuY29kaW5nKQotewotICAgIHJldHVybiBwYXJzZVhtbERvYyh4bWxSZWFk
TWVtb3J5KGJ1ZmZlciwgbGVuZ3RoLCB1cmwsIGVuY29kaW5nLCBYTUxfUEFSU0VfTk9CTEFOS1Mg
fCBYTUxfUEFSU0VfTk9ORVQpKTsKLX0KLQotYm9vbCBSU1MxMFBhcnNlcjo6cGFyc2VYbWxEb2Mo
eG1sRG9jUHRyIGRvYykKLXsKLSAgICBpZiAoIWRvYykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgeG1sTm9kZSogbm9kZSA9IHhtbERvY0dldFJvb3RFbGVtZW50KGRvYyk7Ci0gICAgaWYg
KCFub2RlKSB7Ci0gICAgICAgIHhtbEZyZWVEb2MoZG9jKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgICAg
ICBTdHJpbmcgbmFtZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihub2RlLT5uYW1lKSk7
Ci0KLSAgICAgICAgaWYgKG5hbWUgPT0gIlJERiIpIHsKLSAgICAgICAgICAgIHhtbE5vZGUqIGNo
aWxkbm9kZSA9IG5vZGUtPmNoaWxkcmVuOwotICAgICAgICAgICAgZm9yICg7IGNoaWxkbm9kZTsg
Y2hpbGRub2RlID0gY2hpbGRub2RlLT5uZXh0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxk
bm9kZS0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5h
bWUgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2hpbGRub2RlLT5uYW1l
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09ICJjaGFubmVsIikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgQkxBQ0tCRVJSWV9BU1NFUlQoIW1fcm9vdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1fcm9vdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Jvb3QgPSBwYXJzZUZl
ZWQoY2hpbGRub2RlLT5jaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
bmFtZSA9PSAiaXRlbSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEJMQUNLQkVSUllfQVNT
RVJUKG1fcm9vdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9yb290KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUlNTSXRlbSogaXRlbSA9IHBhcnNlSXRlbShjaGlsZG5v
ZGUtPmNoaWxkcmVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yb290LT5tX2l0ZW1zLmFwcGVuZChpdGVt
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHht
bEZyZWVEb2MoZG9jKTsKLQotICAgIHJldHVybiBtX3Jvb3Q7Ci19Ci0KLWJvb2wgUlNTMTBQYXJz
ZXI6OnBhcnNlSXRlbUJhc2VBdHRyaWJ1dGUoUlNTSXRlbUJhc2UqIGl0ZW0sIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgeG1sTm9kZSogbm9kZSkKLXsKLSAgICBpZiAobmFtZSA9PSAibGluayIpCi0gICAg
ICAgIGl0ZW0tPm1fbGluayA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICBlbHNlIGlmIChu
YW1lID09ICJ0aXRsZSIpCi0gICAgICAgIGl0ZW0tPm1fdGl0bGUgPSB0ZXh0RnJvbVhNTE5vZGUo
bm9kZSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZGVzY3JpcHRpb24iKQotICAgICAgICBpdGVt
LT5tX2Rlc2NyaXB0aW9uID0gdGV4dEZyb21YTUxOb2RlKG5vZGUpOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJTU0l0ZW0qIFJTUzEw
UGFyc2VyOjpwYXJzZUl0ZW0oeG1sTm9kZSogbm9kZSkKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VS
VChub2RlKTsKLQotICAgIFJTU0l0ZW0qIGl0ZW0gPSBuZXcgUlNTSXRlbSgpOwotCi0gICAgZm9y
ICg7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5vZGUtPm5hbWUpKTsKLSAgICAgICAgbmFtZSA9IG5h
bWUubG93ZXIoKTsKLQotICAgICAgICBwYXJzZUl0ZW1CYXNlQXR0cmlidXRlKGl0ZW0sIG5hbWUs
IG5vZGUpOwotICAgIH0KLQotICAgIHJldHVybiBpdGVtOwotfQotCi1SU1NGZWVkKiBSU1MxMFBh
cnNlcjo6cGFyc2VGZWVkKHhtbE5vZGUqIG5vZGUpCi17Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQo
bm9kZSk7Ci0KLSAgICBSU1NGZWVkKiBmZWVkID0gbmV3IFJTU0ZlZWQoKTsKLQotICAgIGZvciAo
OyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgICAgICBTdHJpbmcgbmFtZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihub2RlLT5uYW1lKSk7Ci0gICAgICAgIG5hbWUgPSBuYW1l
Lmxvd2VyKCk7Ci0KLSAgICAgICAgcGFyc2VJdGVtQmFzZUF0dHJpYnV0ZShmZWVkLCBuYW1lLCBu
b2RlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmVlZDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jz
cy9SU1MxMFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTMTBQYXJzZXIuaAkocmV2aXNpb24gMTYxNTkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1MxMFBhcnNl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBSU1MxMFBhcnNl
cl9oCi0jZGVmaW5lIFJTUzEwUGFyc2VyX2gKLQotI2luY2x1ZGUgIlJTU1BhcnNlckJhc2UuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSU1MxMFBhcnNlciA6IHB1YmxpYyBSU1NQ
YXJzZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBSU1MxMFBhcnNlcigpOwotCi0gICAgYm9vbCBwYXJz
ZUJ1ZmZlcihjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW5ndGgsIGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogZW5jb2RpbmcpOwotCi1wcml2YXRlOgotICAgIGJvb2wgcGFyc2VYbWxEb2Mo
eG1sRG9jUHRyKTsKLSAgICBib29sIHBhcnNlSXRlbUJhc2VBdHRyaWJ1dGUoUlNTSXRlbUJhc2Uq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIHhtbE5vZGUqKTsKLSAgICBSU1NJdGVtKiBwYXJzZUl0ZW0o
eG1sTm9kZSopOwotICAgIFJTU0ZlZWQqIHBhcnNlRmVlZCh4bWxOb2RlKik7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBSU1MxMFBhcnNlcl9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTUzIwUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvcnNzL1JTUzIwUGFyc2VyLmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1MyMFBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlJTUzIwUGFyc2VyLmgiCi0KLSNpbmNsdWRlICJCbGFja0JlcnJ5UGxhdGZvcm1Bc3NlcnQu
aCIKLSNpbmNsdWRlICJsaWJ4bWwvcGFyc2VyLmgiCi0jaW5jbHVkZSAibGlieG1sL3htbHdyaXRl
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJTUzIwUGFyc2VyOjpSU1MyMFBhcnNlcigp
Ci17Ci19Ci0KLWJvb2wgUlNTMjBQYXJzZXI6OnBhcnNlQnVmZmVyKGNvbnN0IGNoYXIqIGJ1ZmZl
ciwgaW50IGxlbmd0aCwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiBlbmNvZGluZykKLXsK
LSAgICByZXR1cm4gcGFyc2VYbWxEb2MoeG1sUmVhZE1lbW9yeShidWZmZXIsIGxlbmd0aCwgdXJs
LCBlbmNvZGluZywgWE1MX1BBUlNFX05PQkxBTktTIHwgWE1MX1BBUlNFX05PTkVUKSk7Ci19Ci0K
LWJvb2wgUlNTMjBQYXJzZXI6OnBhcnNlWG1sRG9jKHhtbERvY1B0ciBkb2MpCi17Ci0gICAgaWYg
KCFkb2MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHhtbE5vZGUqIG5vZGUgPSB4bWxE
b2NHZXRSb290RWxlbWVudChkb2MpOwotICAgIGlmICghbm9kZSkgewotICAgICAgICB4bWxGcmVl
RG9jKGRvYyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKDsgbm9k
ZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4obm9kZS0+bmFtZSkpOwotICAgICAgICBuYW1lID0gbmFtZS5sb3dl
cigpOwotCi0gICAgICAgIGlmIChuYW1lID09ICJyc3MiKSB7Ci0gICAgICAgICAgICB4bWxOb2Rl
KiBjaGFubmVsID0gbm9kZS0+Y2hpbGRyZW47Ci0gICAgICAgICAgICBpZiAoY2hhbm5lbC0+dHlw
ZSA9PSBYTUxfRUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNoYW5uZWwtPm5hbWUpOwotICAgICAgICAgICAgICAgIG5h
bWUgPSBuYW1lLmxvd2VyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gImNoYW5uZWwi
KQotICAgICAgICAgICAgICAgICAgICBtX3Jvb3QgPSBwYXJzZUZlZWQoY2hhbm5lbC0+Y2hpbGRy
ZW4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICB4bWxGcmVlRG9jKGRvYyk7Ci0KLSAgICByZXR1cm4gbV9yb290OwotfQotCi1ib29s
IFJTUzIwUGFyc2VyOjpwYXJzZUl0ZW1CYXNlQXR0cmlidXRlKFJTU0l0ZW1CYXNlKiBpdGVtLCBj
b25zdCBTdHJpbmcmIG5hbWUsIHhtbE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKG5hbWUgPT0gImxp
bmsiKQotICAgICAgICBpdGVtLT5tX2xpbmsgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAg
ZWxzZSBpZiAobmFtZSA9PSAidGl0bGUiKQotICAgICAgICBpdGVtLT5tX3RpdGxlID0gdGV4dEZy
b21YTUxOb2RlKG5vZGUpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gImRlc2NyaXB0aW9uIikKLSAg
ICAgICAgaXRlbS0+bV9kZXNjcmlwdGlvbiA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICBl
bHNlIGlmIChuYW1lID09ICJwdWJkYXRlIikKLSAgICAgICAgaXRlbS0+bV9wdWJEYXRlID0gdGV4
dEZyb21YTUxOb2RlKG5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJTU0l0ZW0qIFJTUzIwUGFyc2VyOjpwYXJzZUl0ZW0oeG1s
Tm9kZSogbm9kZSkKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VSVChub2RlKTsKLQotICAgIFJTU0l0
ZW0qIGl0ZW0gPSBuZXcgUlNTSXRlbSgpOwotCi0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2Rl
LT5uZXh0KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KG5vZGUtPm5hbWUpKTsKLSAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKTsKLQotICAgICAg
ICBpZiAocGFyc2VJdGVtQmFzZUF0dHJpYnV0ZShpdGVtLCBuYW1lLCBub2RlKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChuYW1lID09ICJhdXRob3IiKQotICAgICAgICAg
ICAgaXRlbS0+bV9hdXRob3IgPSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKG5hbWUgPT0gImNyZWF0b3IiKSB7Ci0gICAgICAgICAgICBpZiAoaXRlbS0+bV9hdXRob3Iu
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGl0ZW0tPm1fYXV0aG9yID0gdGV4dEZyb21YTUxO
b2RlKG5vZGUpOwotICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImNhdGVnb3J5IikKLSAgICAg
ICAgICAgIGl0ZW0tPm1fY2F0ZWdvcmllcy5hcHBlbmQodGV4dEZyb21YTUxOb2RlKG5vZGUpKTsK
LSAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAiY29tbWVudHMiKQotICAgICAgICAgICAgaXRlbS0+
bV9jb21tZW50cyA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAobmFt
ZSA9PSAiZW5jbG9zdXJlIikgewotICAgICAgICAgICAgLy8gUmlnaHQgbm93IHdlIGFzc3VtZSB0
aGVyZSBpcyBvbmx5IG9uZSBlbmNsb3N1cmUgcGVyIGl0ZW0sIGFuZCB3ZSBoYW5kbGUgb25seQot
ICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGVuY2xvc3VyZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUg
b25lcy4KLSAgICAgICAgICAgIC8vIFJlZmVyZW5jZTogaHR0cDovL3d3dy5yc3Nib2FyZC5vcmcv
cnNzLXByb2ZpbGUjZWxlbWVudC1jaGFubmVsLWl0ZW0tZW5jbG9zdXJlCi0gICAgICAgICAgICBp
ZiAoIWl0ZW0tPm1fZW5jbG9zdXJlKQotICAgICAgICAgICAgICAgIGl0ZW0tPm1fZW5jbG9zdXJl
ID0gcGFyc2VFbmNsb3N1cmUobm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
aXRlbTsKLX0KLQotUlNTRmVlZCogUlNTMjBQYXJzZXI6OnBhcnNlRmVlZCh4bWxOb2RlKiBub2Rl
KQotewotICAgIEJMQUNLQkVSUllfQVNTRVJUKG5vZGUpOwotCi0gICAgUlNTRmVlZCogZmVlZCA9
IG5ldyBSU1NGZWVkKCk7Ci0KLSAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsK
LSAgICAgICAgU3RyaW5nIG5hbWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obm9kZS0+
bmFtZSkpOwotICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpOwotCi0gICAgICAgIGlmIChwYXJz
ZUl0ZW1CYXNlQXR0cmlidXRlKGZlZWQsIG5hbWUsIG5vZGUpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKG5hbWUgPT0gIml0ZW0iKQotICAgICAgICAgICAgZmVlZC0+bV9p
dGVtcy5hcHBlbmQocGFyc2VJdGVtKG5vZGUtPmNoaWxkcmVuKSk7Ci0gICAgICAgIGVsc2UgaWYg
KG5hbWUgPT0gImxhbmd1YWdlIikKLSAgICAgICAgICAgIGZlZWQtPm1fbGFuZ3VhZ2UgPSB0ZXh0
RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInR0bCIpCi0gICAg
ICAgICAgICBmZWVkLT5tX3R0bCA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmVlZDsKLX0KLQotUlNTRW5jbG9zdXJlKiBSU1MyMFBhcnNlcjo6cGFyc2VFbmNs
b3N1cmUoeG1sTm9kZSogbm9kZSkKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VSVChub2RlKTsKLQot
ICAgIFJTU0VuY2xvc3VyZSogZW5jbG9zdXJlID0gbmV3IFJTU0VuY2xvc3VyZSgpOwotCi0gICAg
Zm9yICh4bWxBdHRyKiBhdHRyID0gbm9kZS0+cHJvcGVydGllczsgYXR0cjsgYXR0ciA9IGF0dHIt
Pm5leHQpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oYXR0ci0+bmFtZSkpOwotICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpOwotCi0gICAgICAg
IGlmIChuYW1lID09ICJ1cmwiKQotICAgICAgICAgICAgZW5jbG9zdXJlLT5tX3VybCA9IHRleHRG
cm9tWE1MQXR0cihhdHRyKTsKLSAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidHlwZSIpCi0gICAg
ICAgICAgICBlbmNsb3N1cmUtPm1fdHlwZSA9IHRleHRGcm9tWE1MQXR0cihhdHRyKTsKLSAgICAg
ICAgZWxzZSBpZiAobmFtZSA9PSAibGVuZ3RoIikKLSAgICAgICAgICAgIGVuY2xvc3VyZS0+bV9s
ZW5ndGggPSB0ZXh0RnJvbVhNTEF0dHIoYXR0cik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVuY2xv
c3VyZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1MyMFBhcnNlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTMjBQ
YXJzZXIuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L3Jzcy9SU1MyMFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKi8KLQotI2lmbmRlZiBSU1MyMFBhcnNlcl9oCi0jZGVmaW5lIFJTUzIwUGFyc2VyX2gK
LQotI2luY2x1ZGUgIlJTU1BhcnNlckJhc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBSU1MyMFBhcnNlciA6IHB1YmxpYyBSU1NQYXJzZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBS
U1MyMFBhcnNlcigpOwotCi0gICAgYm9vbCBwYXJzZUJ1ZmZlcihjb25zdCBjaGFyKiBidWZmZXIs
IGludCBsZW5ndGgsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogZW5jb2RpbmcpOwotCi1w
cml2YXRlOgotICAgIGJvb2wgcGFyc2VYbWxEb2MoeG1sRG9jUHRyKTsKLSAgICBib29sIHBhcnNl
SXRlbUJhc2VBdHRyaWJ1dGUoUlNTSXRlbUJhc2UqLCBjb25zdCBTdHJpbmcmIG5hbWUsIHhtbE5v
ZGUqKTsKLSAgICBSU1NJdGVtKiBwYXJzZUl0ZW0oeG1sTm9kZSopOwotICAgIFJTU0ZlZWQqIHBh
cnNlRmVlZCh4bWxOb2RlKik7Ci0gICAgUlNTRW5jbG9zdXJlKiBwYXJzZUVuY2xvc3VyZSh4bWxO
b2RlKik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBSU1MyMFBh
cnNlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
cnNzL1JTU0F0b21QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTQXRvbVBhcnNlci5jcHAJKHJldmlzaW9uIDE2
MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3Mv
UlNTQXRvbVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzM5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJTU0F0b21QYXJzZXIuaCIKLQotI2luY2x1ZGUg
IkJsYWNrQmVycnlQbGF0Zm9ybUFzc2VydC5oIgotI2luY2x1ZGUgImxpYnhtbC9wYXJzZXIuaCIK
LSNpbmNsdWRlICJsaWJ4bWwveG1sd3JpdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c1JlbGF0aXZlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuICEocGF0aC5z
dGFydHNXaXRoKCIvIikgfHwgcGF0aC5maW5kKCI6LyIpICE9IFdURjo6bm90Rm91bmQpOwotfQot
Ci1SU1NBdG9tTGluazo6VHlwZSBSU1NBdG9tTGluazo6cmVsVHlwZSgpCi17Ci0gICAgaWYgKG1f
dHlwZUluRW51bSAhPSBUeXBlVW5rbm93bikKLSAgICAgICAgcmV0dXJuIG1fdHlwZUluRW51bTsK
LQotICAgIGlmIChtX3JlbC5pc0VtcHR5KCkpCi0gICAgICAgIG1fdHlwZUluRW51bSA9IFR5cGVB
bHRlcm5hdGU7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFN0cmluZyBsb3dyZWwgPSBtX3JlbC5sb3dl
cigpOwotICAgICAgICBpZiAobG93cmVsID09ICJhbHRlcm5hdGUiKQotICAgICAgICAgICAgbV90
eXBlSW5FbnVtID0gVHlwZUFsdGVybmF0ZTsKLSAgICAgICAgZWxzZSBpZiAobG93cmVsID09ICJl
bmNsb3N1cmUiKQotICAgICAgICAgICAgbV90eXBlSW5FbnVtID0gVHlwZUVuY2xvc3VyZTsKLSAg
ICAgICAgZWxzZSBpZiAobG93cmVsID09ICJyZWxhdGVkIikKLSAgICAgICAgICAgIG1fdHlwZUlu
RW51bSA9IFR5cGVSZWxhdGVkOwotICAgICAgICBlbHNlIGlmIChsb3dyZWwgPT0gInNlbGYiKQot
ICAgICAgICAgICAgbV90eXBlSW5FbnVtID0gVHlwZVNlbGY7Ci0gICAgICAgIGVsc2UgaWYgKGxv
d3JlbCA9PSAidmlhIikKLSAgICAgICAgICAgIG1fdHlwZUluRW51bSA9IFR5cGVWaWE7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fdHlwZUluRW51bSA9IFR5cGVVbnN1cHBvcnRlZDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbV90eXBlSW5FbnVtOwotfQotCi1SU1NBdG9tUGFyc2VyOjpSU1NB
dG9tUGFyc2VyKCkKLXsKLX0KLQotYm9vbCBSU1NBdG9tUGFyc2VyOjpwYXJzZUJ1ZmZlcihjb25z
dCBjaGFyKiBidWZmZXIsIGludCBsZW5ndGgsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciog
ZW5jb2RpbmcpCi17Ci0gICAgbV91cmwgPSBVUkwoYmxhbmtVUkwoKSwgdXJsKTsKLSAgICByZXR1
cm4gcGFyc2VYbWxEb2MoeG1sUmVhZE1lbW9yeShidWZmZXIsIGxlbmd0aCwgdXJsLCBlbmNvZGlu
ZywgWE1MX1BBUlNFX05PQkxBTktTIHwgWE1MX1BBUlNFX05PTkVUKSk7Ci19Ci0KLWJvb2wgUlNT
QXRvbVBhcnNlcjo6cGFyc2VYbWxEb2MoeG1sRG9jUHRyIGRvYykKLXsKLSAgICBpZiAoIWRvYykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgeG1sTm9kZSogbm9kZSA9IHhtbERvY0dldFJv
b3RFbGVtZW50KGRvYyk7Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIHhtbEZyZWVEb2MoZG9j
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoOyBub2RlOyBub2Rl
ID0gbm9kZS0+bmV4dCkgewotICAgICAgICBTdHJpbmcgbmFtZShyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihub2RlLT5uYW1lKSk7Ci0gICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCk7Ci0K
LSAgICAgICAgaWYgKG5hbWUgPT0gImZlZWQiKSB7Ci0gICAgICAgICAgICBtX3Jvb3QgPSBwYXJz
ZUZlZWQobm9kZS0+Y2hpbGRyZW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB4bWxGcmVlRG9jKGRvYyk7Ci0gICAgcmV0dXJuIG1fcm9vdDsKLX0KLQotYm9v
bCBSU1NBdG9tUGFyc2VyOjpwYXJzZUl0ZW1CYXNlQXR0cmlidXRlKFJTU0l0ZW1CYXNlKiBpdGVt
LCBjb25zdCBTdHJpbmcmIG5hbWUsIHhtbE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgYmFzZSkK
LXsKLSAgICBpZiAobmFtZSA9PSAidGl0bGUiKQotICAgICAgICBpdGVtLT5tX3RpdGxlID0gdGV4
dEZyb21YTUxOb2RlKG5vZGUpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gImlkIikKLSAgICAgICAg
aXRlbS0+bV9pZCA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLSAgICBlbHNlIGlmIChuYW1lID09
ICJhdXRob3IiKQotICAgICAgICBpdGVtLT5tX2F1dGhvciA9IHBhcnNlQXV0aG9yKG5vZGUpOwot
ICAgIGVsc2UgaWYgKG5hbWUgPT0gInVwZGF0ZWQiKQotICAgICAgICBpdGVtLT5tX3VwZGF0ZWQg
PSB0ZXh0RnJvbVhNTE5vZGUobm9kZSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiY29udGVudCIp
Ci0gICAgICAgIGl0ZW0tPm1fZGVzY3JpcHRpb24gPSBwYXJzZUNvbnRlbnQoYmFzZSwgbm9kZSk7
Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAicHVibGlzaGVkIikKLSAgICAgICAgaXRlbS0+bV9wdWJE
YXRlID0gdGV4dEZyb21YTUxOb2RlKG5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJTU0l0ZW0qIFJTU0F0b21QYXJzZXI6OnBh
cnNlSXRlbSh4bWxOb2RlKiBub2RlKQotewotICAgIEJMQUNLQkVSUllfQVNTRVJUKG5vZGUpOwot
Ci0gICAgUlNTSXRlbSogaXRlbSA9IG5ldyBSU1NJdGVtKCk7Ci0KLSAgICBTdHJpbmcgYmFzZTsK
LSAgICBmb3IgKHhtbEF0dHIqIGF0dHIgPSBub2RlLT5wcm9wZXJ0aWVzOyBhdHRyOyBhdHRyID0g
YXR0ci0+bmV4dCkgewotICAgICAgICBTdHJpbmcgbmFtZShyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihhdHRyLT5uYW1lKSk7Ci0gICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCk7Ci0gICAg
ICAgIGlmIChuYW1lID09ICJiYXNlIikKLSAgICAgICAgICAgIGJhc2UgPSB0ZXh0RnJvbVhNTEF0
dHIoYXR0cik7Ci0gICAgfQotCi0gICAgbm9kZSA9IG5vZGUtPmNoaWxkcmVuOwotICAgIGZvciAo
OyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgICAgICBTdHJpbmcgbmFtZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihub2RlLT5uYW1lKSk7Ci0gICAgICAgIG5hbWUgPSBuYW1l
Lmxvd2VyKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlSXRlbUJhc2VBdHRyaWJ1dGUoaXRlbSwgbmFt
ZSwgbm9kZSwgYmFzZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAobmFt
ZSA9PSAibGluayIpIHsKLSAgICAgICAgICAgIFJTU0F0b21MaW5rKiBsaW5rID0gcGFyc2VMaW5r
KG5vZGUpOwotICAgICAgICAgICAgaWYgKGlzUmVsYXRpdmVQYXRoKGxpbmstPm1faHJlZikpCi0g
ICAgICAgICAgICAgICAgbGluay0+bV9ocmVmID0gYmFzZSArICIvIiArIGxpbmstPm1faHJlZjsK
LQotICAgICAgICAgICAgc3dpdGNoIChsaW5rLT5yZWxUeXBlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgUlNTQXRvbUxpbms6OlR5cGVBbHRlcm5hdGU6Ci0gICAgICAgICAgICAgICAgaXRlbS0+bV9s
aW5rID0gbGluay0+bV9ocmVmOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBSU1NBdG9tTGluazo6VHlwZUVuY2xvc3VyZToKLSAgICAgICAgICAgICAgICBCTEFDS0JF
UlJZX0FTU0VSVCghaXRlbS0+bV9lbmNsb3N1cmUpOwotICAgICAgICAgICAgICAgIGlmICghaXRl
bS0+bV9lbmNsb3N1cmUpCi0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPm1fZW5jbG9zdXJlID0g
ZW5jbG9zdXJlRnJvbUxpbmsobGluayk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZGVsZXRlIGxpbms7Ci0gICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiY2F0ZWdv
cnkiKQotICAgICAgICAgICAgaXRlbS0+bV9jYXRlZ29yaWVzLmFwcGVuZChwYXJzZUNhdGVnb3J5
KG5vZGUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaXRlbTsKLX0KLQotUlNTRmVlZCogUlNTQXRv
bVBhcnNlcjo6cGFyc2VGZWVkKHhtbE5vZGUqIG5vZGUpCi17Ci0gICAgQkxBQ0tCRVJSWV9BU1NF
UlQobm9kZSk7Ci0KLSAgICBSU1NGZWVkKiBmZWVkID0gbmV3IFJTU0ZlZWQoKTsKLQotICAgIGZv
ciAoOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgICAgICBTdHJpbmcgbmFtZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihub2RlLT5uYW1lKSk7Ci0gICAgICAgIG5hbWUgPSBu
YW1lLmxvd2VyKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlSXRlbUJhc2VBdHRyaWJ1dGUoZmVlZCwg
bmFtZSwgbm9kZSwgZW1wdHlTdHJpbmcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBpZiAobmFtZSA9PSAiZW50cnkiKQotICAgICAgICAgICAgZmVlZC0+bV9pdGVtcy5hcHBl
bmQocGFyc2VJdGVtKG5vZGUpKTsKLSAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAibGluayIpIHsK
LSAgICAgICAgICAgIFJTU0F0b21MaW5rKiBsaW5rID0gcGFyc2VMaW5rKG5vZGUpOwotICAgICAg
ICAgICAgaWYgKGxpbmstPnJlbFR5cGUoKSA9PSBSU1NBdG9tTGluazo6VHlwZUFsdGVybmF0ZSkK
LSAgICAgICAgICAgICAgICBmZWVkLT5tX2xpbmsgPSBsaW5rLT5tX2hyZWY7Ci0gICAgICAgICAg
ICBkZWxldGUgbGluazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmZWVkOwotfQot
Ci1SU1NBdG9tTGluayogUlNTQXRvbVBhcnNlcjo6cGFyc2VMaW5rKHhtbE5vZGUqIG5vZGUpCi17
Ci0gICAgQkxBQ0tCRVJSWV9BU1NFUlQobm9kZSk7Ci0KLSAgICBSU1NBdG9tTGluayogbGluayA9
IG5ldyBSU1NBdG9tTGluaygpOwotCi0gICAgZm9yICh4bWxBdHRyKiBhdHRyID0gbm9kZS0+cHJv
cGVydGllczsgYXR0cjsgYXR0ciA9IGF0dHItPm5leHQpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYXR0ci0+bmFtZSkpOwotICAgICAgICBuYW1l
ID0gbmFtZS5sb3dlcigpOwotCi0gICAgICAgIGlmIChuYW1lID09ICJocmVmIikKLSAgICAgICAg
ICAgIGxpbmstPm1faHJlZiA9IHRleHRGcm9tWE1MQXR0cihhdHRyKTsKLSAgICAgICAgZWxzZSBp
ZiAobmFtZSA9PSAicmVsIikKLSAgICAgICAgICAgIGxpbmstPm1fcmVsID0gdGV4dEZyb21YTUxB
dHRyKGF0dHIpOwotICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0eXBlIikKLSAgICAgICAgICAg
IGxpbmstPm1fdHlwZSA9IHRleHRGcm9tWE1MQXR0cihhdHRyKTsKLSAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSAiaHJlZmxhbmciKQotICAgICAgICAgICAgbGluay0+bV9ocmVmbGFuZyA9IHRleHRG
cm9tWE1MQXR0cihhdHRyKTsKLSAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGl0bGUiKQotICAg
ICAgICAgICAgbGluay0+bV90aXRsZSA9IHRleHRGcm9tWE1MQXR0cihhdHRyKTsKLSAgICAgICAg
ZWxzZSBpZiAobmFtZSA9PSAibGVuZ3RoIikKLSAgICAgICAgICAgIGxpbmstPm1fbGVuZ3RoID0g
dGV4dEZyb21YTUxBdHRyKGF0dHIpOwotICAgIH0KLQotICAgIHJldHVybiBsaW5rOwotfQotCi1S
U1NFbmNsb3N1cmUqIFJTU0F0b21QYXJzZXI6OmVuY2xvc3VyZUZyb21MaW5rKFJTU0F0b21MaW5r
KiBsaW5rKQotewotICAgIEJMQUNLQkVSUllfQVNTRVJUKGxpbmspOwotICAgIEJMQUNLQkVSUllf
QVNTRVJUKGxpbmstPnJlbFR5cGUoKSA9PSBSU1NBdG9tTGluazo6VHlwZUVuY2xvc3VyZSk7Ci0K
LSAgICBSU1NFbmNsb3N1cmUqIGVuY2xvc3VyZSA9IG5ldyBSU1NFbmNsb3N1cmUoKTsKLQotICAg
IGVuY2xvc3VyZS0+bV91cmwgPSBsaW5rLT5tX2hyZWY7Ci0gICAgZW5jbG9zdXJlLT5tX3R5cGUg
PSBsaW5rLT5tX3R5cGU7Ci0gICAgZW5jbG9zdXJlLT5tX2xlbmd0aCA9IGxpbmstPm1fbGVuZ3Ro
OwotCi0gICAgcmV0dXJuIGVuY2xvc3VyZTsKLX0KLQotU3RyaW5nIFJTU0F0b21QYXJzZXI6OnBh
cnNlQ29udGVudChjb25zdCBTdHJpbmcmIGJhc2UsIHhtbE5vZGUqIG5vZGUpCi17Ci0gICAgLy8g
U2VlOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0Mjg3I3BhZ2UtMTYKLQotICAgIEJM
QUNLQkVSUllfQVNTRVJUKG5vZGUpOwotICAgIC8vIFdoeSBkb2VzIEJsYWNrYmVycnkgaGF2ZSBp
dHMgb3duIFJTUyBwYXJzZXI/Ci0KLSAgICBTdHJpbmcgY29udGVudDsKLSAgICBTdHJpbmcgdHlw
ZSA9ICJkZWZhdWx0IjsKLSAgICBTdHJpbmcgc3JjOwotICAgIGZvciAoeG1sQXR0ciogYXR0ciA9
IG5vZGUtPnByb3BlcnRpZXM7IGF0dHI7IGF0dHIgPSBhdHRyLT5uZXh0KSB7Ci0gICAgICAgIFN0
cmluZyBuYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHItPm5hbWUpKTsKLSAg
ICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKTsKLQotICAgICAgICBpZiAobmFtZSA9PSAidHlwZSIp
Ci0gICAgICAgICAgICB0eXBlID0gdGV4dEZyb21YTUxBdHRyKGF0dHIpOwotICAgICAgICBlbHNl
IGlmIChuYW1lID09ICJzcmMiKQotICAgICAgICAgICAgc3JjID0gdGV4dEZyb21YTUxBdHRyKGF0
dHIpOwotICAgIH0KLQotICAgIGlmICghc3JjLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoaXNS
ZWxhdGl2ZVBhdGgoc3JjKSkKLSAgICAgICAgICAgIHNyYyA9IGJhc2UgKyAiLyIgKyBzcmM7Ci0g
ICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCI8YSBocmVmPVwiIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHNyYyArICJcIj4iICsg
c3JjICsgIjwvYT4iKTsKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9
Ci0KLSAgICBpZiAodHlwZSA9PSAidGV4dCIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0LyIpKQot
ICAgICAgICBjb250ZW50ID0gdGV4dEZyb21YTUxOb2RlKG5vZGUpOwotICAgIGVsc2UgaWYgKHR5
cGUgPT0gImh0bWwiKQotICAgICAgICBjb250ZW50ID0gdGV4dEZyb21YTUxOb2RlKG5vZGUpOwot
ICAgIGVsc2UgaWYgKHR5cGUgPT0gInhodG1sIikgewotICAgICAgICB4bWxCdWZmZXJQdHIgYnVm
ZmVyID0geG1sQnVmZmVyQ3JlYXRlKCk7Ci0gICAgICAgIHhtbE5vZGUgKiBjdXIgPSBub2RlLT5j
aGlsZHJlbjsKLSAgICAgICAgaWYgKGN1ciAmJiBjdXItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9E
RSkgewotICAgICAgICAgICAgLy8gRW5jb2Rpbmcgb2YgYnVmZmVyIGlzIHV0Zi04LgotICAgICAg
ICAgICAgeG1sTm9kZUR1bXAoYnVmZmVyLCBjdXItPmRvYywgY3VyLCAwLCAwKTsKLSAgICAgICAg
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgICAgIGlmICghYmFzZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxiYXNlIGhyZWY9
JyIpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fdXJsLmJhc2VBc1N0cmluZygp
KTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIi8iKTsKLSAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZChiYXNlKTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZExpdGVyYWwoIi8nIC8+Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgoY29uc3QgY2hhciopeG1sQnVmZmVyQ29udGVudChidWZmZXIpKTsKLSAgICAgICAg
ICAgIGNvbnRlbnQgPSBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgeG1s
QnVmZmVyRnJlZShidWZmZXIpOwotICAgIH0gZWxzZSBpZiAodHlwZS5lbmRzV2l0aCgiK3htbCIp
IHx8IHR5cGUuZW5kc1dpdGgoIi94bWwiKSkKLSAgICAgICAgLy8gRklYTUU6IHNlZSBhdG9tIHNw
ZWMgNC4xLjMuMy40LgotICAgICAgICBjb250ZW50ID0gdGV4dEZyb21YTUxOb2RlKG5vZGUpOwot
ICAgIGVsc2UKLSAgICAgICAgY29udGVudCA9IHRleHRGcm9tWE1MTm9kZShub2RlKTsKLQotICAg
IHJldHVybiBjb250ZW50OwotfQotCi1TdHJpbmcgUlNTQXRvbVBhcnNlcjo6cGFyc2VBdXRob3Io
eG1sTm9kZSogbm9kZSkKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VSVChub2RlKTsKLQotICAgIFN0
cmluZyB1c2VybmFtZTsKLSAgICBTdHJpbmcgZW1haWw7Ci0KLSAgICBmb3IgKG5vZGUgPSBub2Rl
LT5jaGlsZHJlbjsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICAgICAgU3RyaW5nIG5h
bWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obm9kZS0+bmFtZSkpOwotICAgICAgICBu
YW1lID0gbmFtZS5sb3dlcigpOwotCi0gICAgICAgIGlmIChuYW1lID09ICJuYW1lIikKLSAgICAg
ICAgICAgIHVzZXJuYW1lID0gdGV4dEZyb21YTUxOb2RlKG5vZGUpOwotICAgICAgICBlbHNlIGlm
IChuYW1lID09ICJlbWFpbCIpCi0gICAgICAgICAgICBlbWFpbCA9IHRleHRGcm9tWE1MTm9kZShu
b2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWVtYWlsLmlzRW1wdHkoKSkgewotICAgICAgICB1c2Vy
bmFtZSA9IHVzZXJuYW1lICsgIiAoIjsKLSAgICAgICAgdXNlcm5hbWUgPSB1c2VybmFtZSArIGVt
YWlsOwotICAgICAgICB1c2VybmFtZSA9IHVzZXJuYW1lICsgIikiOwotICAgIH0KLQotICAgIHJl
dHVybiB1c2VybmFtZTsKLX0KLQotU3RyaW5nIFJTU0F0b21QYXJzZXI6OnBhcnNlQ2F0ZWdvcnko
eG1sTm9kZSogbm9kZSkKLXsKLSAgICBCTEFDS0JFUlJZX0FTU0VSVChub2RlKTsKLQotICAgIFN0
cmluZyBjYXRlZ29yeTsKLQotICAgIGZvciAoeG1sQXR0ciogYXR0ciA9IG5vZGUtPnByb3BlcnRp
ZXM7IGF0dHI7IGF0dHIgPSBhdHRyLT5uZXh0KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHItPm5hbWUpKTsKLSAgICAgICAgbmFtZSA9IG5h
bWUubG93ZXIoKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSdzIGEgbGFiZWwsIHdlIHVzZSBpdCwg
aWYgbm90LCB1c2UgdGVybSBhdHRyaWJ1dGUsIGFzIGxhYmVsIGlzCi0gICAgICAgIC8vIG9wdGlv
bmFsLCBidXQgdGVybSBpcyBtYW5kYXRvcnkuCi0gICAgICAgIGlmIChuYW1lID09ICJsYWJlbCIp
IHsKLSAgICAgICAgICAgIGNhdGVnb3J5ID0gdGV4dEZyb21YTUxBdHRyKGF0dHIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmFtZSA9PSAidGVybSIpCi0g
ICAgICAgICAgICBjYXRlZ29yeSA9IHRleHRGcm9tWE1MQXR0cihhdHRyKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gY2F0ZWdvcnk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTQXRvbVBhcnNl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9yc3MvUlNTQXRvbVBhcnNlci5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU0F0b21QYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgUlNTQXRvbVBhcnNlcl9oCi0j
ZGVmaW5lIFJTU0F0b21QYXJzZXJfaAotCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiUlNT
UGFyc2VyQmFzZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJTU0F0b21MaW5r
IHsKLXB1YmxpYzoKLSAgICBlbnVtIFR5cGUgewotICAgICAgICBUeXBlVW5rbm93biwKLSAgICAg
ICAgVHlwZUFsdGVybmF0ZSwKLSAgICAgICAgVHlwZVJlbGF0ZWQsCi0gICAgICAgIFR5cGVTZWxm
LAotICAgICAgICBUeXBlRW5jbG9zdXJlLAotICAgICAgICBUeXBlVmlhLAotICAgICAgICBUeXBl
VW5zdXBwb3J0ZWQKLSAgICB9OwotCi0gICAgUlNTQXRvbUxpbmsoKQotICAgICAgICA6IG1fdHlw
ZUluRW51bShUeXBlVW5rbm93bikKLSAgICB7IH0KLQotICAgIFR5cGUgcmVsVHlwZSgpOwotCi0g
ICAgU3RyaW5nIG1fcmVsOwotICAgIFN0cmluZyBtX2hyZWY7Ci0gICAgU3RyaW5nIG1faHJlZmxh
bmc7Ci0gICAgU3RyaW5nIG1fdHlwZTsKLSAgICBTdHJpbmcgbV90aXRsZTsKLSAgICBTdHJpbmcg
bV9sZW5ndGg7Ci0KLXByaXZhdGU6Ci0gICAgVHlwZSBtX3R5cGVJbkVudW07Ci19OwotCi1jbGFz
cyBSU1NBdG9tUGFyc2VyIDogcHVibGljIFJTU1BhcnNlckJhc2UgewotcHVibGljOgotICAgIFJT
U0F0b21QYXJzZXIoKTsKLQotICAgIGJvb2wgcGFyc2VCdWZmZXIoY29uc3QgY2hhciogYnVmZmVy
LCBpbnQgbGVuZ3RoLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIGVuY29kaW5nKTsKLQot
cHJpdmF0ZToKLSAgICBib29sIHBhcnNlWG1sRG9jKHhtbERvY1B0cik7Ci0gICAgYm9vbCBwYXJz
ZUl0ZW1CYXNlQXR0cmlidXRlKFJTU0l0ZW1CYXNlKiwgY29uc3QgU3RyaW5nJiBuYW1lLCB4bWxO
b2RlKiwgY29uc3QgU3RyaW5nJiBiYXNlKTsKLSAgICBSU1NJdGVtKiBwYXJzZUl0ZW0oeG1sTm9k
ZSopOwotICAgIFJTU0ZlZWQqIHBhcnNlRmVlZCh4bWxOb2RlKik7Ci0gICAgUlNTQXRvbUxpbmsq
IHBhcnNlTGluayh4bWxOb2RlKik7Ci0gICAgUlNTRW5jbG9zdXJlKiBlbmNsb3N1cmVGcm9tTGlu
ayhSU1NBdG9tTGluayopOwotCi0gICAgU3RyaW5nIHBhcnNlQ29udGVudChjb25zdCBTdHJpbmcm
IGJhc2UsIHhtbE5vZGUqKTsKLSAgICBTdHJpbmcgcGFyc2VBdXRob3IoeG1sTm9kZSopOwotICAg
IFN0cmluZyBwYXJzZUNhdGVnb3J5KHhtbE5vZGUqKTsKLSAgICBVUkwgbV91cmw7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBSU1NBdG9tUGFyc2VyX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTRmlsdGVy
U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2JsYWNrYmVycnkvcnNzL1JTU0ZpbHRlclN0cmVhbS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTRmlsdGVy
U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NzQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUlNTRmlsdGVyU3RyZWFtLmgiCi0KLSNpbmNsdWRl
ICJSU1MxMFBhcnNlci5oIgotI2luY2x1ZGUgIlJTUzIwUGFyc2VyLmgiCi0jaW5jbHVkZSAiUlNT
QXRvbVBhcnNlci5oIgotI2luY2x1ZGUgIlJTU0dlbmVyYXRvci5oIgotI2luY2x1ZGUgIlRleHRD
b2RlY0lDVS5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtQXNzZXJ0Lmg+Ci0jaW5j
bHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+Ci0jaW5jbHVkZSA8U2NvcGVQb2ludGVyLmg+
Ci0jaW5jbHVkZSA8bmV0d29yay9OZXR3b3JrUmVxdWVzdC5oPgotI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi11c2luZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0
aWNhbDsKLXVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm87Ci11c2luZyBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxXYXJuOwotdXNpbmcgQmxhY2tCZXJyeTo6UGxh
dGZvcm06Ok5ldHdvcmtSZXF1ZXN0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBzX3V0ZjhFbmNvZGluZ05hbWUgPSAiVVRGLTgiOwotc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IHNfbGF0aW4xRW5jb2RpbmdOYW1lID0gIklTTy04ODU5LTEiOwotc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfZ2JrRW5jb2RpbmdOYW1lID0gIkdCSyI7Ci0KLXN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBzX2NvbnRlbnRFbmNvZGluZ0hlYWRlcktleSA9ICJDb250ZW50
LUVuY29kaW5nIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX2NvbnRlbnRMZW5ndGhIZWFk
ZXJLZXkgPSAiQ29udGVudC1MZW5ndGgiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfY29u
dGVudFR5cGVIZWFkZXJLZXkgPSAiQ29udGVudC1UeXBlIjsKLQotc3RhdGljIGludCBpc0FTQ0lJ
U3BhY2VMb3dlckJ5dGUoaW50IGNoKQotewotICAgIHJldHVybiBpc0FTQ0lJU3BhY2U8aW50Pihj
aCAmIDB4ZmYpOwotfQotCi1zdGF0aWMgc3RkOjpzdHJpbmcmIHN0cmlwV2hpdGVTcGFjZShzdGQ6
OnN0cmluZyYgc3RyKQotewotICAgIHN0ci5lcmFzZShzdHIuYmVnaW4oKSwgc3RkOjpmaW5kX2lm
KHN0ci5iZWdpbigpLCBzdHIuZW5kKCksIHN0ZDo6bm90MShzdGQ6OnB0cl9mdW48aW50LCBpbnQ+
KGlzQVNDSUlTcGFjZUxvd2VyQnl0ZSkpKSk7Ci0gICAgc3RyLmVyYXNlKHN0ZDo6ZmluZF9pZihz
dHIucmJlZ2luKCksIHN0ci5yZW5kKCksIHN0ZDo6bm90MShzdGQ6OnB0cl9mdW48aW50LCBpbnQ+
KGlzQVNDSUlTcGFjZUxvd2VyQnl0ZSkpKS5iYXNlKCksIHN0ci5lbmQoKSk7Ci0gICAgcmV0dXJu
IHN0cjsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IHN0
ZDo6c3RyaW5nJiBmaXJzdCwgY29uc3QgY2hhciogc2Vjb25kKQotewotICAgIHJldHVybiAhc3Ry
Y2FzZWNtcChmaXJzdC5jX3N0cigpLCBzZWNvbmQpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
aXNBdG9tTUlNRVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVUeXBlKQotewotICAgIHJldHVy
biBlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgImFwcGxpY2F0aW9uL2F0b20reG1sIik7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1JTU01JTUVUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBt
aW1lVHlwZSkKLXsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJhcHBs
aWNhdGlvbi9yc3MreG1sIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1BvdGVudGlhbFJT
U01JTUVUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICByZXR1cm4gIXN0
cm5jbXAobWltZVR5cGUuZGF0YSgpLCAidGV4dC94bWwiLCA4KSB8fCAhc3RybmNtcChtaW1lVHlw
ZS5kYXRhKCksICJhcHBsaWNhdGlvbi94bWwiLCAxNSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBpc1JTU0NvbnRlbnQoUlNTRmlsdGVyU3RyZWFtOjpSZXNvdXJjZVR5cGUgdHlwZSkKLXsKLSAg
ICByZXR1cm4gdHlwZSA9PSBSU1NGaWx0ZXJTdHJlYW06OlR5cGVSU1MxMAotICAgICAgICB8fCB0
eXBlID09IFJTU0ZpbHRlclN0cmVhbTo6VHlwZVJTUzIwCi0gICAgICAgIHx8IHR5cGUgPT0gUlNT
RmlsdGVyU3RyZWFtOjpUeXBlUlNTQXRvbTsKLX0KLQotc3RhdGljIFJTU0ZpbHRlclN0cmVhbTo6
UmVzb3VyY2VUeXBlIFJTU1R5cGVGcm9tQ29udGVudFR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIGNv
bnRlbnRUeXBlKQotewotICAgIGlmIChjb250ZW50VHlwZS5lbXB0eSgpKQotICAgICAgICByZXR1
cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlVW5rbm93bjsKLQotICAgIHN0ZDo6c3RyaW5nIG1pbWVU
eXBlOwotICAgIHN0ZDo6c3RyaW5nIHZlcnNpb247Ci0gICAgYm9vbCBpc1JTUyA9IGZhbHNlOwot
Ci0gICAgLy8gVGhlIGNvbnRlbnRUeXBlIGNhbiBjb250YWluIGJvdGggYSBtaW1lIHR5cGUgYW5k
IHZlcnNpb24gYXR0cmlidXRlcwotICAgIC8vIElmIHdlIGFscmVhZHkga25vdyB0aGUgdHlwZSBp
cyBBdG9tLCB3ZSBkb24ndCBuZWVkIGVpdGhlciBvZiB0aGVzZSwgc28gc2tpcCBpdAotICAgIGZv
ciAoc2l6ZV90IHN0YXJ0ID0gMCwgZGVsaW1pdGVyID0gMDsgZGVsaW1pdGVyICE9IHN0ZDo6c3Ry
aW5nOjpucG9zOyBzdGFydCA9IGRlbGltaXRlciArIDEpIHsKLSAgICAgICAgZGVsaW1pdGVyID0g
Y29udGVudFR5cGUuZmluZCgnOycsIHN0YXJ0KTsKLQotICAgICAgICBzdGQ6OnN0cmluZyBjb21w
b25lbnQgPSBjb250ZW50VHlwZS5zdWJzdHIoc3RhcnQsIGRlbGltaXRlciA9PSBzdGQ6OnN0cmlu
Zzo6bnBvcyA/IGRlbGltaXRlciA6IGRlbGltaXRlciAtIHN0YXJ0KTsKLQotICAgICAgICBpZiAo
bWltZVR5cGUuZW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKGlzQXRvbU1JTUVUeXBlKGNvbXBv
bmVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFJTU0ZpbHRlclN0cmVhbTo6VHlwZVJTU0F0
b207Ci0KLSAgICAgICAgICAgIGlmIChpc1JTU01JTUVUeXBlKGNvbXBvbmVudCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBkZWZpbml0ZWx5IG5vdCBhIHZlcnNpb24gYXR0cmlidXRlLCBza2lwIHRv
IG5leHQgdG9rZW4KLSAgICAgICAgICAgICAgICBtaW1lVHlwZSA9IGNvbXBvbmVudDsKLSAgICAg
ICAgICAgICAgICBpc1JTUyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplX3QgZXF1YWxzaWduID0gY29tcG9u
ZW50LmZpbmQoJz0nKTsKLSAgICAgICAgaWYgKGVxdWFsc2lnbiAhPSBzdGQ6OnN0cmluZzo6bnBv
cyAmJiBlcXVhbElnbm9yaW5nQ2FzZShjb21wb25lbnQuc3Vic3RyKDAsIGVxdWFsc2lnbiksICJ2
ZXJzaW9uIikpCi0gICAgICAgICAgICB2ZXJzaW9uID0gY29tcG9uZW50LnN1YnN0cihlcXVhbHNp
Z24gKyAxKTsKLQotICAgICAgICAvLyBDaGVjayBpZiB3ZSBub3cgaGF2ZSBmb3VuZCBib3RoIE1J
TUUgdHlwZSBhbmQgdmVyc2lvbgotICAgICAgICBpZiAoIW1pbWVUeXBlLmVtcHR5KCkgJiYgIXZl
cnNpb24uZW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChpc1JT
UykgewotICAgICAgICBpZiAoIXZlcnNpb24uY29tcGFyZSgiMS4wIikpCi0gICAgICAgICAgICBy
ZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlUlNTMTA7Ci0KLSAgICAgICAgcmV0dXJuIFJTU0Zp
bHRlclN0cmVhbTo6VHlwZVJTUzIwOwotICAgIH0KLQotICAgIHJldHVybiBSU1NGaWx0ZXJTdHJl
YW06OlR5cGVVbmtub3duOwotfQotCi1zdGF0aWMgUlNTRmlsdGVyU3RyZWFtOjpSZXNvdXJjZVR5
cGUgUlNTVHlwZUZyb21Db250ZW50KGNvbnN0IGNoYXIqIHN0ciwgaW50IHN0ckxlbikKLXsKLSAg
ICAvLyBMb2NhdGUgeG1sIHNpZ25hdHVyZS4KLSAgICBjb25zdCBjaGFyKiBwb3MgPSBzdHI7Ci0K
LSAgICAvLyBMb2NhdGUgdGhlIFJTUyB0YWdzLgotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IHBvcyA9IHN0cmNocihwb3MsICc8Jyk7Ci0gICAgICAgIGlmICghcG9zIHx8IChwb3MgLSBzdHIg
Pj0gc3RyTGVuKSkgewotICAgICAgICAgICAgQkJMT0coTG9nTGV2ZWxJbmZvLCAiUlNTVHlwZUZy
b21Db250ZW50KCk6IGNhbiBub3QgZmluZCBhbnkgc3RhcnQgdGFnIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlVW5rbm93bjsKLSAgICAgICAgfQotCi0gICAgICAg
ICsrcG9zOwotCi0gICAgICAgIGlmICghc3RybmNhc2VjbXAocG9zLCAicnNzIiwgMykpIHsKLSAg
ICAgICAgICAgIGlmIChpc1NwYWNlT3JOZXdsaW5lKCoocG9zICsgMykpKSB7Ci0gICAgICAgICAg
ICAgICAgQkJMT0coTG9nTGV2ZWxJbmZvLCAiUlNTVHlwZUZyb21Db250ZW50KCk6IGZvdW5kIFJT
UyAyLjAgdGFnIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFJTU0ZpbHRlclN0cmVhbTo6VHlw
ZVJTUzIwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBCQkxPRyhMb2dMZXZlbEluZm8s
ICJSU1NUeXBlRnJvbUNvbnRlbnQoKTogd3JvbmcgUlNTIDIuMCB0YWc6ICUuKnMiLCAzMiwgcG9z
KTsKLSAgICAgICAgICAgIHJldHVybiBSU1NGaWx0ZXJTdHJlYW06OlR5cGVVbmtub3duOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFzdHJuY2FzZWNtcChwb3MsICJmZWVkIiwgNCkpIHsKLSAg
ICAgICAgICAgIGlmIChpc1NwYWNlT3JOZXdsaW5lKCoocG9zICsgNCkpKSB7Ci0gICAgICAgICAg
ICAgICAgQkJMT0coTG9nTGV2ZWxJbmZvLCAiUlNTVHlwZUZyb21Db250ZW50KCk6IGZvdW5kIEF0
b20gMS4wIHRhZyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBSU1NGaWx0ZXJTdHJlYW06OlR5
cGVSU1NBdG9tOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBCQkxPRyhMb2dMZXZlbElu
Zm8sICJSU1NUeXBlRnJvbUNvbnRlbnQoKTogd3JvbmcgQXRvbSAxLjAgdGFnOiAlLipzIiwgMzIs
IHBvcyk7Ci0gICAgICAgICAgICByZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlVW5rbm93bjsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICghc3RybmNhc2VjbXAocG9zLCAicmRmOlJERiIsIDcp
KSB7Ci0gICAgICAgICAgICBpZiAoaXNTcGFjZU9yTmV3bGluZSgqKHBvcyArIDcpKSkgewotICAg
ICAgICAgICAgICAgIEJCTE9HKExvZ0xldmVsSW5mbywgIlJTU1R5cGVGcm9tQ29udGVudCgpOiBm
b3VuZCBSU1MgMS4wIHRhZyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBSU1NGaWx0ZXJTdHJl
YW06OlR5cGVSU1MxMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQkJMT0coTG9nTGV2
ZWxJbmZvLCAiUlNTVHlwZUZyb21Db250ZW50KCk6IHdyb25nIFJTUyAxLjAgdGFnOiAlLipzIiwg
MzIsIHBvcyk7Ci0gICAgICAgICAgICByZXR1cm4gUlNTRmlsdGVyU3RyZWFtOjpUeXBlVW5rbm93
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghc3RybmNhc2VjbXAocG9zLCAiP3htbCIsIDQp
KSB7Ci0gICAgICAgICAgICBCQkxPRyhMb2dMZXZlbEluZm8sICJSU1NUeXBlRnJvbUNvbnRlbnQo
KTogZm91bmQgYW5vdGhlciB4bWwgdGFnIik7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGFub3Ro
ZXIgeG1sIGluZm8sIHNraXAgaXQuCi0gICAgICAgICAgICBwb3MgKz0gNDsKLSAgICAgICAgICAg
IHBvcyA9IHN0cnN0cihwb3MsICI/PiIpOwotCi0gICAgICAgICAgICBpZiAoIXBvcyB8fCAocG9z
IC0gc3RyID49IHN0ckxlbikpIHsKLSAgICAgICAgICAgICAgICBCQkxPRyhMb2dMZXZlbEluZm8s
ICJSU1NUeXBlRnJvbUNvbnRlbnQoKTogZXh0cmEgeG1sIHRhZyB0b28gbG9uZyIpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBSU1NGaWx0ZXJTdHJlYW06OlR5cGVVbmtub3duOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBwb3MgKz0gMjsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFzdHJuY2FzZWNtcChwb3MsICIhLS0iLCAzKSkgewotICAg
ICAgICAgICAgQkJMT0coTG9nTGV2ZWxJbmZvLCAiUlNTVHlwZUZyb21Db250ZW50KCk6IGZvdW5k
IGNvbW1lbnRzIik7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGNvbW1lbnRzLCBza2lwIGl0Lgot
ICAgICAgICAgICAgcG9zICs9IDM7Ci0gICAgICAgICAgICBwb3MgPSBzdHJzdHIocG9zLCAiLS0+
Iik7Ci0KLSAgICAgICAgICAgIGlmICghcG9zIHx8IChwb3MgLSBzdHIgPj0gc3RyTGVuKSkgewot
ICAgICAgICAgICAgICAgIEJCTE9HKExvZ0xldmVsSW5mbywgIlJTU1R5cGVGcm9tQ29udGVudCgp
OiBjb21tZW50cyB0b28gbG9uZyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBSU1NGaWx0ZXJT
dHJlYW06OlR5cGVVbmtub3duOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwb3MgKz0g
MzsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQkJMT0coTG9n
TGV2ZWxJbmZvLCAiUlNTVHlwZUZyb21Db250ZW50KCk6IG5vbiByc3MgdHlwZSAoJS4qcykgZm91
bmQiLCAzMiwgcG9zKTsKLSAgICAgICAgcmV0dXJuIFJTU0ZpbHRlclN0cmVhbTo6VHlwZVVua25v
d247Ci0gICAgfQotCi0gICAgcmV0dXJuIFJTU0ZpbHRlclN0cmVhbTo6VHlwZVVua25vd247Ci19
Ci0KLXN0YXRpYyBQYXNzT3duUHRyPFJTU1BhcnNlckJhc2U+IGNyZWF0ZVBhcnNlcihSU1NGaWx0
ZXJTdHJlYW06OlJlc291cmNlVHlwZSB0eXBlKQotewotICAgIEJMQUNLQkVSUllfQVNTRVJUKGlz
UlNTQ29udGVudCh0eXBlKSk7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFJTU0Zp
bHRlclN0cmVhbTo6VHlwZVJTU0F0b206Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUlNT
QXRvbVBhcnNlcigpKTsKLSAgICBjYXNlIFJTU0ZpbHRlclN0cmVhbTo6VHlwZVJTUzEwOgotICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJTUzEwUGFyc2VyKCkpOwotICAgIGNhc2UgUlNTRmls
dGVyU3RyZWFtOjpUeXBlUlNTMjA6Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUlNTMjBQ
YXJzZXIoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUlNTMjBQYXJzZXIoKSk7Ci0gICAgfQotfQotCi1z
dGF0aWMgYm9vbCBmaW5kWE1MRW5jb2RpbmdQb3NpdGlvbihjb25zdCBjaGFyKiBzdHIsIGNvbnN0
IGNoYXIqJiBlbmNvZGluZ1N0YXJ0LCBjb25zdCBjaGFyKiYgZW5jb2RpbmdFbmQpCi17Ci0gICAg
ZW5jb2RpbmdTdGFydCA9IHN0cnN0cihzdHIsICI8P3htbCAiKTsKLSAgICBpZiAoIWVuY29kaW5n
U3RhcnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGVuY29kaW5nU3RhcnQgKz0gNjsg
Ly8gTGVuZ3RoIG9mICI8P3htbCAiLgotICAgIGNoYXIqIGVuZFBvcyA9IHN0cnN0cihjb25zdF9j
YXN0PGNoYXIqPihlbmNvZGluZ1N0YXJ0KSwgIj8+Iik7Ci0gICAgaWYgKCFlbmRQb3MpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGVuY29kaW5nU3RhcnQgPSBzdHJzdHIoY29uc3RfY2Fz
dDxjaGFyKj4oZW5jb2RpbmdTdGFydCksICJlbmNvZGluZyIpOwotCi0gICAgaWYgKCFlbmNvZGlu
Z1N0YXJ0IHx8IGVuY29kaW5nU3RhcnQgPiBlbmRQb3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGVuY29kaW5nU3RhcnQgKz0gODsKLQotICAgIHdoaWxlIChlbmNvZGluZ1N0YXJ0IDwg
ZW5kUG9zICYmICplbmNvZGluZ1N0YXJ0IDw9ICcgJykKLSAgICAgICAgKytlbmNvZGluZ1N0YXJ0
OwotCi0gICAgaWYgKGVuY29kaW5nU3RhcnQgPT0gZW5kUG9zIHx8ICplbmNvZGluZ1N0YXJ0ICE9
ICc9JykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgKytlbmNvZGluZ1N0YXJ0OwotCi0g
ICAgd2hpbGUgKGVuY29kaW5nU3RhcnQgPCBlbmRQb3MgJiYgKmVuY29kaW5nU3RhcnQgPD0gJyAn
KQotICAgICAgICArK2VuY29kaW5nU3RhcnQ7Ci0KLSAgICBpZiAoZW5jb2RpbmdTdGFydCA9PSBl
bmRQb3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNoYXIgcXVvdGUgPSAqZW5jb2Rp
bmdTdGFydDsKLSAgICBpZiAocXVvdGUgIT0gJ1wiJyAmJiBxdW90ZSAhPSAnXCcnKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICArK2VuY29kaW5nU3RhcnQ7Ci0gICAgZW5jb2RpbmdFbmQg
PSBzdHJjaHIoY29uc3RfY2FzdDxjaGFyKj4oZW5jb2RpbmdTdGFydCksIHF1b3RlKTsKLQotICAg
IGlmICghZW5jb2RpbmdFbmQgfHwgZW5jb2RpbmdFbmQgPT0gZW5jb2RpbmdTdGFydCB8fCBlbmNv
ZGluZ0VuZCA+IGVuZFBvcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBib29sIGZpbmRYTUxMYW5ndWFnZVBvc2l0aW9uKGNvbnN0IGNoYXIq
IHN0ciwgY29uc3QgY2hhciomIGxhbmdTdGFydCwgY29uc3QgY2hhciomIGxhbmdFbmQpCi17Ci0g
ICAgbGFuZ1N0YXJ0ID0gc3Ryc3RyKGNvbnN0X2Nhc3Q8Y2hhcio+KHN0ciksICI8bGFuZ3VhZ2U+
Iik7Ci0gICAgaWYgKCFsYW5nU3RhcnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGxh
bmdTdGFydCArPSAxMDsgLy8gTGVuZ3RoIG9mICI8bGFuZ3VhZ2U+Ii4KLSAgICBjaGFyKiBlbmRQ
b3MgPSBzdHJzdHIoY29uc3RfY2FzdDxjaGFyKj4obGFuZ1N0YXJ0KSwgIjwvbGFuZ3VhZ2U+Iik7
Ci0gICAgaWYgKCFlbmRQb3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHdoaWxlIChs
YW5nU3RhcnQgPCBlbmRQb3MgJiYgKmxhbmdTdGFydCA8PSAnICcpCi0gICAgICAgICsrbGFuZ1N0
YXJ0OwotCi0gICAgaWYgKGxhbmdTdGFydCA9PSBlbmRQb3MpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGxhbmdFbmQgPSBlbmRQb3MgLSAxOwotCi0gICAgd2hpbGUgKGxhbmdFbmQgPiBs
YW5nU3RhcnQgJiYgKmxhbmdFbmQgPD0gJyAnKQotICAgICAgICAtLWxhbmdFbmQ7Ci0KLSAgICAr
K2xhbmdFbmQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBkZWZh
dWx0RW5jb2RpbmdGb3JMYW5ndWFnZShjb25zdCBjaGFyKiBsYW5ndWFnZSkKLXsKLSAgICBpZiAo
IXN0cmNhc2VjbXAobGFuZ3VhZ2UsICJlbiIpIHx8ICFzdHJjYXNlY21wKGxhbmd1YWdlLCAiZW4t
VVMiKSkKLSAgICAgICAgcmV0dXJuIHNfbGF0aW4xRW5jb2RpbmdOYW1lOwotICAgIGlmICghc3Ry
Y2FzZWNtcChsYW5ndWFnZSwgInpoLWNuIikpCi0gICAgICAgIHJldHVybiBzX2dia0VuY29kaW5n
TmFtZTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYm9vbCBpc1RyYW5zY29kaW5nTmVl
ZGVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGluZykKLXsKLSAgICAvLyBXaGVuIHRoZXJlJ3Mg
bm8gZW5jb2RpbmcgaW5mb3JtYXRpb24sIG9yIHRoZSBlbmNvZGluZyBjYW4gbm90IGJlIGZvdW5k
IGluIGFsbCBlbmNvZGluZ3MKLSAgICAvLyBzdXBwb3J0ZWQgaW4gb3VyIHBob25lLCB3ZSB3aWxs
IHRyeSB0byB0cmFuc2NvZGUgdGhlIGNvbnRlbnQgYW55d2F5LCBzdXBwb3NlZCB0byBBU0NJSS4K
LSAgICBpZiAoZW5jb2RpbmcuZW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBy
ZXR1cm4gVGV4dEVuY29kaW5nKHNfdXRmOEVuY29kaW5nTmFtZSkgIT0gVGV4dEVuY29kaW5nKGVu
Y29kaW5nLmNfc3RyKCkpOwotfQotCi1lbnVtIFRyYW5zY29kZVJlc3VsdCB7Ci0gICAgU3VjY2Vz
cywKLSAgICBTb3VyY2VFbmNvZGluZ1Vuc3VwcG9ydGVkLAotICAgIFNvdXJjZUJyb2tlbiwKLSAg
ICBUYXJnZXRFbmNvZGluZ1Vuc3VwcG9ydGVkLAotICAgIFRhcmdldEJ1ZmZlckluc3VmZmljaWVu
dAotfTsKLQotc3RhdGljIFRyYW5zY29kZVJlc3VsdCB0cmFuc2NvZGUoY29uc3QgY2hhciogc291
cmNlRW5jb2RpbmcsCi0gICAgY29uc3QgY2hhciogdGFyZ2V0RW5jb2RpbmcsCi0gICAgY29uc3Qg
Y2hhciomIHNvdXJjZVN0YXJ0LAotICAgIGludCBzb3VyY2VMZW5ndGgsCi0gICAgY2hhciomIHRh
cmdldFN0YXJ0LAotICAgIHVuc2lnbmVkIHRhcmdldExlbmd0aCkKLXsKLSAgICBUZXh0RW5jb2Rp
bmcgdGV4dEVuY29kaW5nU291cmNlKHNvdXJjZUVuY29kaW5nKTsKLSAgICBpZiAoIXRleHRFbmNv
ZGluZ1NvdXJjZS5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBTb3VyY2VFbmNvZGluZ1Vuc3Vw
cG9ydGVkOwotCi0gICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZ1RhcmdldCh0YXJnZXRFbmNv
ZGluZyk7Ci0gICAgaWYgKCF0ZXh0RW5jb2RpbmdUYXJnZXQuaXNWYWxpZCgpKQotICAgICAgICBy
ZXR1cm4gVGFyZ2V0RW5jb2RpbmdVbnN1cHBvcnRlZDsKLQotICAgIGJvb2wgc2F3RXJyb3IgPSBm
YWxzZTsKLSAgICBTdHJpbmcgdWNzMiA9IFRleHRDb2RlY0lDVSh0ZXh0RW5jb2RpbmdTb3VyY2Up
LmRlY29kZShzb3VyY2VTdGFydCwgc291cmNlTGVuZ3RoLCB0cnVlLCB0cnVlLCBzYXdFcnJvcik7
Ci0KLSAgICBpZiAoc2F3RXJyb3IpCi0gICAgICAgIHJldHVybiBTb3VyY2VCcm9rZW47Ci0KLSAg
ICBDU3RyaW5nIGVuY29kZWQgPSBUZXh0Q29kZWNJQ1UodGV4dEVuY29kaW5nVGFyZ2V0KS5lbmNv
ZGUodWNzMi5jaGFyYWN0ZXJzKCksIHVjczIubGVuZ3RoKCksIFdlYkNvcmU6OkVudGl0aWVzRm9y
VW5lbmNvZGFibGVzKTsKLSAgICBpZiAoZW5jb2RlZC5sZW5ndGgoKSA+IHRhcmdldExlbmd0aCkK
LSAgICAgICAgcmV0dXJuIFRhcmdldEJ1ZmZlckluc3VmZmljaWVudDsKLQotICAgIHN0cm5jcHko
dGFyZ2V0U3RhcnQsIGVuY29kZWQuZGF0YSgpLCBlbmNvZGVkLmxlbmd0aCgpKTsKLSAgICB0YXJn
ZXRTdGFydCArPSBlbmNvZGVkLmxlbmd0aCgpOwotCi0gICAgcmV0dXJuIFN1Y2Nlc3M7Ci19Ci0K
LXN0YXRpYyBib29sIHRyYW5zY29kZUNvbnRlbnQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQs
IGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGluZywgc3RkOjpzdHJpbmcmIHJlc3VsdCkKLXsKLSAg
ICB1bnNpZ25lZCB1dGY4bGVuZ3RoID0gY29udGVudC5zaXplKCkgKiAzIC8gMjsgLy8gVXNlIG1h
eGltdW0gbnVtYmVyIHV0Zi04IGxlbmd0aC4KLSAgICBTY29wZUFycmF5PGNoYXI+IGJ1ZmZlcihu
ZXcgY2hhclt1dGY4bGVuZ3RoICsgMV0pOwotCi0gICAgc3RkOjpzdHJpbmcgeG1sSGVhZGVyU3Ry
aW5nOwotCi0gICAgY29uc3QgY2hhciogc3RhcnQgPSBjb250ZW50LmNfc3RyKCk7Ci0gICAgY29u
c3QgY2hhciogeG1sU3RhcnQgPSBzdHJzdHIoc3RhcnQsICI8P3htbCAiKTsKLSAgICBjb25zdCBj
aGFyKiB4bWxFbmQ7Ci0gICAgaWYgKHhtbFN0YXJ0KSB7Ci0gICAgICAgIHhtbEVuZCA9IHN0cnN0
cih4bWxTdGFydCwgIj8+Iik7Ci0gICAgICAgIGlmICgheG1sRW5kKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB4bWxFbmQgKz0gMjsgLy8gTGVuZ3RoIG9mICI/PiIuCi0KLSAg
ICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdTdGFydDsKLSAgICAgICAgY29uc3QgY2hhciogZW5j
b2RpbmdFbmQ7Ci0gICAgICAgIGlmIChmaW5kWE1MRW5jb2RpbmdQb3NpdGlvbihzdGFydCwgZW5j
b2RpbmdTdGFydCwgZW5jb2RpbmdFbmQpKSB7Ci0gICAgICAgICAgICB4bWxIZWFkZXJTdHJpbmcu
YXNzaWduKHN0YXJ0LCBlbmNvZGluZ1N0YXJ0IC0gc3RhcnQpOwotICAgICAgICAgICAgeG1sSGVh
ZGVyU3RyaW5nLmFwcGVuZChzX3V0ZjhFbmNvZGluZ05hbWUpOwotICAgICAgICAgICAgeG1sSGVh
ZGVyU3RyaW5nLmFwcGVuZChlbmNvZGluZ0VuZCwgeG1sRW5kIC0gZW5jb2RpbmdFbmQpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgeG1sSGVhZGVyU3RyaW5nLmFzc2lnbihzdGFydCwg
KHhtbEVuZCAtIDIpIC0gc3RhcnQpOwotICAgICAgICAgICAgeG1sSGVhZGVyU3RyaW5nLmFwcGVu
ZCgiIGVuY29kaW5nPVwiVVRGLThcIj8+Iik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICB4bWxFbmQgPSBzdGFydDsKLSAgICAgICAgeG1sSGVhZGVyU3RyaW5nID0gIjw/eG1sIHZl
cnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PiI7Ci0gICAgfQotCi0gICAgY29uc3Qg
Y2hhciogY29udGVudFN0YXJ0ID0geG1sRW5kOwotICAgIGNoYXIqIGJ1ZmZlclN0YXJ0ID0gJmJ1
ZmZlclswXTsKLQotICAgIFRyYW5zY29kZVJlc3VsdCB0cmFuc2NvZGVSZXN1bHQgPSB0cmFuc2Nv
ZGUoZW5jb2RpbmcuY19zdHIoKSwgc191dGY4RW5jb2RpbmdOYW1lLCBjb250ZW50U3RhcnQsIGNv
bnRlbnQubGVuZ3RoKCkgLSAoeG1sRW5kIC0geG1sU3RhcnQpLCBidWZmZXJTdGFydCwgdXRmOGxl
bmd0aCk7Ci0KLSAgICAvLyBJZiB0aGUgZW5jb2RpbmcgaXMgbm90IHN1cHBvcnRlZCwgb3IgaWYg
d2UgZmFpbGVkIHRvIHRyYW5zY29kZSB0aGUgY29udGVudCwgd2Ugd2lsbCBqdXN0Ci0gICAgLy8g
ZW5jb2RlIHRoZSBjb250ZW50IHRvIEFTQ0lJIGNvbnRlbnQsIGFuZCByZXBsYWNpbmcgYW55IG5v
bi1BU0NJSSBjaGFyYWN0ZXIgd2l0aCBhIHF1ZXN0aW9uCi0gICAgLy8gbWFyay4gVGhpcyB3aWxs
IGJlIGJldHRlciB0aGFuIGRpc3BsYXlpbmcgdGhlIHJhdyB0ZXh0LCBhcyB0aGUgcmF3IHRleHQg
Y2FuIG5vdCBiZSBkaXNwbGF5ZWQKLSAgICAvLyBjb3JyZWN0bHkgYW55d2F5LCBhcyB0aGVpciBl
bmNvZGluZyBpcyBub3Qgc3VwcG9ydGVkLgotCi0gICAgaWYgKFN1Y2Nlc3MgIT0gdHJhbnNjb2Rl
UmVzdWx0KSB7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgZm9yICg7IGNvbnRlbnRTdGFy
dCA8IHN0YXJ0ICsgY29udGVudC5zaXplKCkgOyArK2NvbnRlbnRTdGFydCwgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoaXNBU0NJSVByaW50YWJsZSgqY29udGVudFN0YXJ0KSkKLSAgICAgICAgICAg
ICAgICBidWZmZXJbaV0gPSAqY29udGVudFN0YXJ0OwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpXSA9ICc/JzsKLSAgICAgICAgfQotCi0gICAgICAgIGJ1ZmZlcltp
XSA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICAgICpidWZmZXJTdGFydCA9IDA7Ci0KLSAgICByZXN1
bHQuYXNzaWduKHhtbEhlYWRlclN0cmluZyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgmYnVmZmVyWzBd
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1SU1NGaWx0ZXJTdHJlYW06OlJTU0ZpbHRlclN0
cmVhbSgpCi0gICAgOiBGaWx0ZXJTdHJlYW0oKQotICAgICwgbV9yZXNvdXJjZVR5cGUoVHlwZVVu
a25vd24pCi0gICAgLCBtX2NvbnRlbnRUeXBlSW5kZXgoLTEpCi0gICAgLCBtX2NoYXJzZXRDaGVj
a2VkKGZhbHNlKQotICAgICwgbV9lbmNvZGluZ0NoZWNrZWQoZmFsc2UpCi17Ci19Ci0KLXZvaWQg
UlNTRmlsdGVyU3RyZWFtOjpub3RpZnlTdGF0dXNSZWNlaXZlZChpbnQgc3RhdHVzLCBjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtZXNzYWdlKQotewotICAgIC8vIE5vbi1IVFRQ
IGVycm9ycyBoYXZlIG5vIGRhdGEgdG8gZGlzcGxheSwgYW5kIHJlZGlyZWN0cyB3aWxsIG5ldmVy
IGJlIGRpc3BsYXllZCwKLSAgICAvLyBzbyBubyBuZWVkIHRvIGNoZWNrIGlmIHRoZXkgaGF2ZSBS
U1MgZGF0YQotICAgIC8vIEhUVFAgZXJyb3JzIG1heSBoYXZlIGRhdGEsIGFuZCBpbiB0aGVvcnkg
aXQgY291bGQgYmUgUlNTIGRhdGEgKGFsdGhvdWdoIGl0J3MgaGlnaGx5Ci0gICAgLy8gdW5saWtl
bHkpIHNvIGJldHRlciB0byBrZWVwIGNoZWNraW5nIHRoZW0uCi0gICAgaWYgKHN0YXR1cyA8IDAg
fHwgKDMwMCA8PSBzdGF0dXMgJiYgc3RhdHVzIDwgNDAwICYmIHN0YXR1cyAhPSAzMDQpKSB7Ci0g
ICAgICAgIG1fcmVzb3VyY2VUeXBlID0gVHlwZU5vdFJTUzsKLSAgICAgICAgLy8gSXQgaXMgcG9z
c2libGUgd2Ugd2lsbCBnZXQgMiBzdGF0dXMgY29kZS4KLSAgICAgICAgc2VuZFNhdmVkSGVhZGVy
cygpOwotICAgIH0KLQotICAgIEZpbHRlclN0cmVhbTo6bm90aWZ5U3RhdHVzUmVjZWl2ZWQoc3Rh
dHVzLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBSU1NGaWx0ZXJTdHJlYW06Om5vdGlmeUhlYWRlcnNS
ZWNlaXZlZChjb25zdCBOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdCYgaGVhZGVycykKLXsKLSAg
ICBpZiAoIWlzUlNTQ29udGVudChtX3Jlc291cmNlVHlwZSkpIHsKLSAgICAgICAgTmV0d29ya1Jl
cXVlc3Q6OkhlYWRlckxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7Ci0g
ICAgICAgIE5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
aGVhZGVycy5iZWdpbigpOwotICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewot
ICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0ZXItPmZpcnN0LnRvU3RkU3RyaW5n
KCksIHNfY29udGVudFR5cGVIZWFkZXJLZXkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXIt
PnNlY29uZC5maW5kKCJ4bWwiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICAgICAg
ICAgICAgICBtX2NvbnRlbnRUeXBlSW5kZXggPSBzdGQ6OmRpc3RhbmNlKE5ldHdvcmtSZXF1ZXN0
OjpIZWFkZXJMaXN0Ojpjb25zdF9pdGVyYXRvcihoZWFkZXJzLmJlZ2luKCkpLCBpdGVyKTsKLSAg
ICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUeXBlIHR5cGUgPSBSU1NUeXBlRnJvbUNvbnRlbnRU
eXBlKGl0ZXItPnNlY29uZC50b1N0ZFN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGlzUlNTQ29udGVudCh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcmVzb3VyY2VU
eXBlID0gdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzUG90ZW50aWFsUlNT
TUlNRVR5cGUoaXRlci0+c2Vjb25kLnRvU3RkU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9yZXNvdXJjZVR5cGUgPSBUeXBlTm90UlNTOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChtX2NvbnRlbnRUeXBlSW5kZXggPCAwKQotICAgICAgICBtX3Jlc291cmNlVHlwZSA9
IFR5cGVOb3RSU1M7Ci0KLSAgICBpZiAobV9yZXNvdXJjZVR5cGUgPT0gVHlwZU5vdFJTUykgewot
ICAgICAgICBzZW5kU2F2ZWRIZWFkZXJzKCk7Ci0gICAgICAgIEZpbHRlclN0cmVhbTo6bm90aWZ5
SGVhZGVyc1JlY2VpdmVkKGhlYWRlcnMpOwotICAgIH0gZWxzZQotICAgICAgICBzYXZlSGVhZGVy
cyhoZWFkZXJzKTsKLX0KLQotdm9pZCBSU1NGaWx0ZXJTdHJlYW06Om5vdGlmeURhdGFSZWNlaXZl
ZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya0J1ZmZlciogYnVmZmVyKQotewotICAgIC8v
IEhlcmUgd2UgYXNzdW1lIHRoZSBmaXJzdCBwYWNrZXQgb2YgZGF0YSBpcyBlbm91Z2ggZm9yIHVz
IHRvIHNuaWZmIHRoZSBjb250ZW50IHR5cGUuCi0gICAgLy8gSWYgc29tZWRheSBzb21lIGRlY2Vu
dCByZWFsIGxpZmUgd2ViIHNpdGUgdm9pZCB0aGlzIGFzc3VtcHRpb24sIHdlIHNob3VsZCByZS1p
bXBsZW1lbnQKLSAgICAvLyB0aGlzIGNvZGUuIEJ1dCBmb3Igbm93IGl0IHNob3VsZCBiZSBqdXN0
IGZpbmUuCi0gICAgaWYgKG1fcmVzb3VyY2VUeXBlID09IFR5cGVVbmtub3duKQotICAgICAgICBt
X3Jlc291cmNlVHlwZSA9IFJTU1R5cGVGcm9tQ29udGVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
bmV0d29ya0J1ZmZlckRhdGEoYnVmZmVyKSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06Om5ldHdvcmtC
dWZmZXJEYXRhTGVuZ3RoKGJ1ZmZlcikpOwotCi0gICAgLy8gSWYgd2UgZG9uJ3Qga25vdyB0aGUg
cmVzb3VyY2UgdHlwZSBhdCB0aGlzIHN0YWdlLCB0aGVuIGl0IGlzIG5vdCBhIFJTUyBjb250ZW50
LgotICAgIGlmIChtX3Jlc291cmNlVHlwZSA9PSBUeXBlVW5rbm93bikKLSAgICAgICAgbV9yZXNv
dXJjZVR5cGUgPSBUeXBlTm90UlNTOwotCi0gICAgaWYgKGlzUlNTQ29udGVudChtX3Jlc291cmNl
VHlwZSkpCi0gICAgICAgIGFwcGVuZERhdGEoYnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
c2VuZFNhdmVkSGVhZGVycygpOwotICAgICAgICBGaWx0ZXJTdHJlYW06Om5vdGlmeURhdGFSZWNl
aXZlZChidWZmZXIpOwotICAgIH0KLX0KLQotdm9pZCBSU1NGaWx0ZXJTdHJlYW06Om5vdGlmeUNs
b3NlKGludCBzdGF0dXMpCi17Ci0gICAgLy8gSWYgdGhlcmUgd2FzIG5vIGRhdGEsIHdlIG1pZ2h0
IGdldCBoZXJlIHdpdGggdGhlIHR5cGUgc3RpbGwgdW5rbm93bi4gTm8gZGF0YSBhdCBhbGwgLT4g
bm8gUlNTCi0gICAgLy8gZGF0YS4KLSAgICBpZiAobV9yZXNvdXJjZVR5cGUgPT0gVHlwZVVua25v
d24pCi0gICAgICAgIG1fcmVzb3VyY2VUeXBlID0gVHlwZU5vdFJTUzsKLQotICAgIGlmIChpc1JT
U0NvbnRlbnQobV9yZXNvdXJjZVR5cGUpKQotICAgICAgICBoYW5kbGVSU1NDb250ZW50KCk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIHNlbmRTYXZlZEhlYWRlcnMoKTsKLSAgICAgICAgRmlsdGVyU3Ry
ZWFtOjpub3RpZnlDbG9zZShzdGF0dXMpOwotICAgIH0KLX0KLQotYm9vbCBSU1NGaWx0ZXJTdHJl
YW06OmNvbnZlcnRDb250ZW50VG9IdG1sKHN0ZDo6c3RyaW5nJiByZXN1bHQpCi17Ci0gICAgYm9v
bCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJhc2UgPSB1cmwoKS50
b1N0ZFN0cmluZygpOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmMgPSBlbmNvZGluZygpOwot
Ci0gICAgT3duUHRyPFJTU1BhcnNlckJhc2U+IHBhcnNlciA9IGNyZWF0ZVBhcnNlcihtX3Jlc291
cmNlVHlwZSk7Ci0KLSAgICBpZiAoaXNUcmFuc2NvZGluZ05lZWRlZChlbmMpKSB7Ci0gICAgICAg
IHN0ZDo6c3RyaW5nIHRyYW5zY29kZWRDb250ZW50OwotICAgICAgICBpZiAodHJhbnNjb2RlQ29u
dGVudChtX2NvbnRlbnQsIGVuYywgdHJhbnNjb2RlZENvbnRlbnQpKQotICAgICAgICAgICAgc3Vj
Y2VzcyA9IHBhcnNlci0+cGFyc2VCdWZmZXIodHJhbnNjb2RlZENvbnRlbnQuZGF0YSgpLCB0cmFu
c2NvZGVkQ29udGVudC5sZW5ndGgoKSwgYmFzZS5jX3N0cigpLCBzX3V0ZjhFbmNvZGluZ05hbWUp
OwotICAgIH0gZWxzZQotICAgICAgICBzdWNjZXNzID0gcGFyc2VyLT5wYXJzZUJ1ZmZlcihtX2Nv
bnRlbnQuZGF0YSgpLCBtX2NvbnRlbnQubGVuZ3RoKCksIGJhc2UuY19zdHIoKSwgc191dGY4RW5j
b2RpbmdOYW1lKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gRklYTUU6Ci0gICAgLy8gVGhlIEhUTUwgc3RyaW5nIGdlbmVyYXRlZCBiZWxvdyBw
dXJwb3J0cyB0byBiZSBhIFVURjgtZW5jb2RlZAotICAgIC8vIFdURjo6U3RyaW5nLCBhbHRob3Vn
aCBpdHMgY2hhcmFjdGVyczgoKSBkYXRhIHNob3VsZCBiZSBMYXRpbjEuCi0gICAgLy8gV2UgYnVp
bGQgdGhlbiBleHRyYWN0IHRoaXMgc3RyaW5nLCBwcmV0ZW5kaW5nIHRoYXQgd2UgZG9uJ3Qga25v
dwotICAgIC8vIHRoYXQgd2UgcGFzcyBpbmNvcnJlY3RseS1lbmNvZGVkIGNoYXIgZGF0YSBib3Ro
IHdheXMuCi0gICAgLy8gV2Ugc2hvdWxkIHVzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
IGluc3RlYWQgb2YgV1RGOjpTdHJpbmcuCi0gICAgT3duUHRyPFJTU0dlbmVyYXRvcj4gZ2VuZXJh
dG9yID0gYWRvcHRQdHIobmV3IFJTU0dlbmVyYXRvcigpKTsKLSAgICBTdHJpbmcgaHRtbCA9IGdl
bmVyYXRvci0+Z2VuZXJhdGVIdG1sKHBhcnNlci0+bV9yb290KTsKLSAgICBBU1NFUlQoaHRtbC5p
czhCaXQoKSk7Ci0gICAgcmVzdWx0LmFzc2lnbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihodG1sLmNoYXJhY3RlcnM4KCkpLCBodG1sLmxlbmd0aCgpKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFJTU0ZpbHRlclN0cmVhbTo6aGFuZGxlUlNTQ29udGVudCgpCi17Ci0gICAg
QkxBQ0tCRVJSWV9BU1NFUlQoaXNSU1NDb250ZW50KG1fcmVzb3VyY2VUeXBlKSk7Ci0KLSAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya0J1ZmZlciogYnVmZmVyOwotICAgIHN0ZDo6c3Ry
aW5nIGh0bWw7Ci0gICAgaWYgKCFjb252ZXJ0Q29udGVudFRvSHRtbChodG1sKSkKLSAgICAgICAg
YnVmZmVyID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OmNyZWF0ZU5ldHdvcmtCdWZmZXJCeUNvcHlp
bmdEYXRhKG1fY29udGVudC5jX3N0cigpLCBtX2NvbnRlbnQuc2l6ZSgpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgdXBkYXRlUlNTSGVhZGVycyhodG1sLnNpemUoKSk7Ci0gICAgICAgIGJ1ZmZlciA9
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVOZXR3b3JrQnVmZmVyQnlDb3B5aW5nRGF0YSho
dG1sLmNfc3RyKCksIGh0bWwuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBzZW5kU2F2ZWRIZWFkZXJz
KCk7Ci0gICAgRmlsdGVyU3RyZWFtOjpub3RpZnlEYXRhUmVjZWl2ZWQoYnVmZmVyKTsKLSAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6cmVsZWFzZU5ldHdvcmtCdWZmZXIoYnVmZmVyKTsKLSAgICBG
aWx0ZXJTdHJlYW06Om5vdGlmeUNsb3NlKEZpbHRlclN0cmVhbTo6U3RhdHVzU3VjY2Vzcyk7Ci19
Ci0KLWNvbnN0IHN0ZDo6c3RyaW5nJiBSU1NGaWx0ZXJTdHJlYW06OmNoYXJzZXQoKQotewotICAg
IEJMQUNLQkVSUllfQVNTRVJUKG1fY29udGVudFR5cGVJbmRleCA+PSAwKTsKLQotICAgIGlmICht
X2NoYXJzZXRDaGVja2VkKQotICAgICAgICByZXR1cm4gbV9jaGFyc2V0OwotCi0gICAgbV9jaGFy
c2V0Q2hlY2tlZCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogY2hhcnNldFByZWZp
eCA9ICJjaGFyc2V0PSI7Ci0gICAgc3RhdGljIGNvbnN0IGludCBjaGFyc2V0UHJlZml4TGVuID0g
c3RybGVuKGNoYXJzZXRQcmVmaXgpOwotICAgIHNpemVfdCBwb3MgPSAobV9oZWFkZXJzLmF0KG1f
Y29udGVudFR5cGVJbmRleCkuc2Vjb25kKS5maW5kKGNoYXJzZXRQcmVmaXgpOwotICAgIGlmIChw
b3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgbV9jaGFyc2V0ID0gbV9oZWFkZXJz
LmF0KG1fY29udGVudFR5cGVJbmRleCkuc2Vjb25kLnN1YnN0cihwb3MgKyBjaGFyc2V0UHJlZml4
TGVuKS50b1N0ZFN0cmluZygpOwotICAgICAgICBzdHJpcFdoaXRlU3BhY2UobV9jaGFyc2V0KTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbV9jaGFyc2V0OwotfQotCi1jb25zdCBzdGQ6OnN0cmluZyYg
UlNTRmlsdGVyU3RyZWFtOjplbmNvZGluZygpCi17Ci0gICAgaWYgKG1fZW5jb2RpbmdDaGVja2Vk
KQotICAgICAgICByZXR1cm4gbV9lbmNvZGluZzsKLQotICAgIG1fZW5jb2RpbmdDaGVja2VkID0g
dHJ1ZTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgc3RyID0gY2hhcnNldCgpOwotCi0gICAgaWYg
KCFzdHIuZW1wdHkoKSkgewotICAgICAgICBtX2VuY29kaW5nID0gc3RyOwotICAgICAgICByZXR1
cm4gbV9lbmNvZGluZzsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBzdGFydCA9IG1fY29udGVu
dC5jX3N0cigpOwotICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nU3RhcnQgPSAwOwotICAgIGNvbnN0
IGNoYXIqIGVuY29kaW5nRW5kID0gMDsKLSAgICBpZiAoZmluZFhNTEVuY29kaW5nUG9zaXRpb24o
c3RhcnQsIGVuY29kaW5nU3RhcnQsIGVuY29kaW5nRW5kKSkgewotICAgICAgICBtX2VuY29kaW5n
ID0gc3RkOjpzdHJpbmcoZW5jb2RpbmdTdGFydCwgZW5jb2RpbmdFbmQgLSBlbmNvZGluZ1N0YXJ0
KTsKLSAgICAgICAgcmV0dXJuIG1fZW5jb2Rpbmc7Ci0gICAgfQotCi0gICAgaWYgKGZpbmRYTUxM
YW5ndWFnZVBvc2l0aW9uKHN0YXJ0LCBlbmNvZGluZ1N0YXJ0LCBlbmNvZGluZ0VuZCkpIHsKLSAg
ICAgICAgc3RkOjpzdHJpbmcgbGFuZ3VhZ2VTdHJpbmcoZW5jb2RpbmdTdGFydCwgZW5jb2RpbmdF
bmQgLSBlbmNvZGluZ1N0YXJ0KTsKLSAgICAgICAgY29uc3QgY2hhciogZGVmYXVsdEVuY29kaW5n
ID0gZGVmYXVsdEVuY29kaW5nRm9yTGFuZ3VhZ2UobGFuZ3VhZ2VTdHJpbmcuY19zdHIoKSk7Ci0g
ICAgICAgIGlmIChkZWZhdWx0RW5jb2RpbmcpIHsKLSAgICAgICAgICAgIG1fZW5jb2RpbmcgPSBk
ZWZhdWx0RW5jb2Rpbmc7Ci0gICAgICAgICAgICByZXR1cm4gbV9lbmNvZGluZzsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBtX2VuY29kaW5nOwotfQotCi12b2lkIFJTU0ZpbHRlclN0
cmVhbTo6c2F2ZUhlYWRlcnMoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1
ZXN0OjpIZWFkZXJMaXN0JiBoZWFkZXJzKQotewotICAgIG1faGVhZGVycyA9IGhlYWRlcnM7Ci19
Ci0KLXZvaWQgUlNTRmlsdGVyU3RyZWFtOjpyZW1vdmVIZWFkZXIoY29uc3QgY2hhcioga2V5KQot
ewotICAgIE5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0OjppdGVyYXRvciBlbmQgPSBtX2hlYWRl
cnMuZW5kKCk7Ci0gICAgZm9yIChOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6aXRlcmF0b3Ig
aXRlciA9IG1faGVhZGVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAg
IGlmICghc3RyY2FzZWNtcChpdGVyLT5maXJzdC5jX3N0cigpLCBrZXkpKSB7Ci0gICAgICAgICAg
ICBtX2hlYWRlcnMuZXJhc2UoaXRlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgUlNTRmlsdGVyU3RyZWFtOjp1cGRhdGVIZWFkZXIoY29uc3QgY2hh
cioga2V5LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1faGVhZGVycy5i
ZWdpbigpOwotICAgIE5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0OjppdGVyYXRvciBlbmQgPSBt
X2hlYWRlcnMuZW5kKCk7Ci0gICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAg
ICAgaWYgKCFzdHJjYXNlY21wKGl0ZXItPmZpcnN0LmNfc3RyKCksIGtleSkpIHsKLSAgICAgICAg
ICAgIGl0ZXItPnNlY29uZCA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgbV9oZWFkZXJzLmluc2VydChpdGVyLCBzdGQ6Om1ha2VfcGFpcihCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjpmcm9tQXNjaWkoa2V5KSwgdmFsdWUpKTsKLX0KLQot
dm9pZCBSU1NGaWx0ZXJTdHJlYW06OnVwZGF0ZVJTU0hlYWRlcnMoc2l6ZV90IHNpemUpCi17Ci0g
ICAgU1RBVElDX0xPQ0FMX1NUUklORyhzX2h0bWxDb250ZW50VHlwZSwgInRleHQvaHRtbDsgY2hh
cnNldD11dGYtOCIpOwotCi0gICAgcmVtb3ZlSGVhZGVyKHNfY29udGVudEVuY29kaW5nSGVhZGVy
S2V5KTsKLSAgICB1cGRhdGVIZWFkZXIoc19jb250ZW50VHlwZUhlYWRlcktleSwgc19odG1sQ29u
dGVudFR5cGUpOwotICAgIHVwZGF0ZUhlYWRlcihzX2NvbnRlbnRMZW5ndGhIZWFkZXJLZXksIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6Om51bWJlcihzaXplKSk7Ci19Ci0KLXZvaWQgUlNT
RmlsdGVyU3RyZWFtOjpzZW5kU2F2ZWRIZWFkZXJzKCkKLXsKLSAgICBpZiAoIW1faGVhZGVycy5l
bXB0eSgpKSB7Ci0gICAgICAgIEZpbHRlclN0cmVhbTo6bm90aWZ5SGVhZGVyc1JlY2VpdmVkKG1f
aGVhZGVycyk7Ci0gICAgICAgIG1fY29udGVudFR5cGVJbmRleCA9IC0xOwotICAgICAgICBtX2hl
YWRlcnMuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUlNTRmlsdGVyU3RyZWFtOjphcHBlbmRE
YXRhKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrQnVmZmVyKiBidWZmZXIpCi17Ci0gICAg
bV9jb250ZW50LmFwcGVuZChuZXR3b3JrQnVmZmVyRGF0YShidWZmZXIpLCBuZXR3b3JrQnVmZmVy
RGF0YUxlbmd0aChidWZmZXIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NGaWx0ZXJT
dHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Js
YWNrYmVycnkvcnNzL1JTU0ZpbHRlclN0cmVhbS5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU0ZpbHRlclN0cmVh
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBSU1NGaWx0ZXJT
dHJlYW1faAotI2RlZmluZSBSU1NGaWx0ZXJTdHJlYW1faAotCi0jaW5jbHVkZSA8bmV0d29yay9G
aWx0ZXJTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSU1NGaWx0
ZXJTdHJlYW0gOiBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0cmVhbSB7Ci1w
dWJsaWM6Ci0gICAgZW51bSBSZXNvdXJjZVR5cGUgewotICAgICAgICBUeXBlVW5rbm93biwKLSAg
ICAgICAgVHlwZU5vdFJTUywKLSAgICAgICAgVHlwZVJTUzEwLAotICAgICAgICBUeXBlUlNTMjAs
Ci0gICAgICAgIFR5cGVSU1NBdG9tCi0gICAgfTsKLQotICAgIFJTU0ZpbHRlclN0cmVhbSgpOwot
Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN0YXR1c1JlY2VpdmVkKGludCBzdGF0dXMsIGNvbnN0
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlIZWFkZXJzUmVjZWl2ZWQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdv
cmtSZXF1ZXN0OjpIZWFkZXJMaXN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeURhdGFSZWNl
aXZlZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya0J1ZmZlciopOwotICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlDbG9zZShpbnQgc3RhdHVzKTsKLQotcHJpdmF0ZToKLSAgICBib29sIGNvbnZl
cnRDb250ZW50VG9IdG1sKHN0ZDo6c3RyaW5nJiByZXN1bHQpOwotICAgIHZvaWQgaGFuZGxlUlNT
Q29udGVudCgpOwotCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNoYXJzZXQoKTsKLSAgICBjb25z
dCBzdGQ6OnN0cmluZyYgZW5jb2RpbmcoKTsKLQotICAgIHZvaWQgc2F2ZUhlYWRlcnMoY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0Jik7Ci0gICAg
dm9pZCByZW1vdmVIZWFkZXIoY29uc3QgY2hhcioga2V5KTsKLSAgICB2b2lkIHVwZGF0ZUhlYWRl
cihjb25zdCBjaGFyKiBrZXksIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHZh
bHVlKTsKLSAgICB2b2lkIHVwZGF0ZVJTU0hlYWRlcnMoc2l6ZV90KTsKLSAgICB2b2lkIHNlbmRT
YXZlZEhlYWRlcnMoKTsKLQotICAgIHZvaWQgYXBwZW5kRGF0YShCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6TmV0d29ya0J1ZmZlciopOwotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtS
ZXF1ZXN0OjpIZWFkZXJMaXN0IG1faGVhZGVyczsKLSAgICBzdGQ6OnN0cmluZyBtX2NvbnRlbnQ7
Ci0gICAgc3RkOjpzdHJpbmcgbV9jaGFyc2V0OwotICAgIHN0ZDo6c3RyaW5nIG1fZW5jb2Rpbmc7
Ci0KLSAgICBSZXNvdXJjZVR5cGUgbV9yZXNvdXJjZVR5cGU7Ci0gICAgaW50IG1fY29udGVudFR5
cGVJbmRleDsKLQotICAgIGJvb2wgbV9jaGFyc2V0Q2hlY2tlZDsKLSAgICBib29sIG1fZW5jb2Rp
bmdDaGVja2VkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUlNT
RmlsdGVyU3RyZWFtX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9yc3MvUlNTR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU0dlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJy
eS9yc3MvUlNTR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUlNTR2VuZXJhdG9yLmgiCi0KLSNpbmNs
dWRlICJMb2NhbGl6ZVJlc291cmNlLmgiCi0jaW5jbHVkZSAiUlNTUGFyc2VyQmFzZS5oIgotCi0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hhciogc19k
ZWZhdWx0RmVlZFRpdGxlID0gaTE4bigiVW50aXRsZWQgRmVlZCIpOwotc3RhdGljIGNvbnN0IGNo
YXIqIHNfZGVmYXVsdEVudHJ5VGl0bGUgPSBpMThuKCJVbnRpdGxlZCBFbnRyeSIpOwotCi1SU1NH
ZW5lcmF0b3I6OlJTU0dlbmVyYXRvcigpCi17Ci19Ci0KLVJTU0dlbmVyYXRvcjo6flJTU0dlbmVy
YXRvcigpCi17Ci19Ci0KLVN0cmluZyBSU1NHZW5lcmF0b3I6OmdlbmVyYXRlSHRtbChSU1NGZWVk
KiBmZWVkKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBj
b250ZW50PVwidGV4dC9odG1sO2NoYXJzZXQ9dXRmLThcIiAvPiIpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cImluaXRpYWwtc2Nh
bGU9MS4wLCB1c2VyLXNjYWxhYmxlPSBub1wiPiIpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiPHRpdGxlPiIpOwotCi0gICAgaWYgKCFmZWVkLT5tX3RpdGxlLmlzRW1wdHkoKSkKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoZmVlZC0+bV90aXRsZSk7Ci0gICAgZWxzZSBpZiAoIWZlZWQtPm1f
bGluay5pc0VtcHR5KCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZlZWQtPm1fbGluayk7Ci0g
ICAgZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZChzX2RlZmF1bHRGZWVkVGl0bGUpOwotCi0g
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8L3RpdGxlPjwvaGVhZD48Ym9keT4iKTsKLQotICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPGgyPiIpOwotICAgIGlmICghZmVlZC0+bV9saW5rLmlz
RW1wdHkoKSkgewotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxhIGhyZWY9XCIiKTsK
LSAgICAgICAgYnVpbGRlci5hcHBlbmQoZmVlZC0+bV9saW5rKTsKLSAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJcIj4iKTsKLSAgICB9Ci0gICAgaWYgKCFmZWVkLT5tX3RpdGxlLmlzRW1w
dHkoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZmVlZC0+bV90aXRsZSk7Ci0gICAgZWxzZQot
ICAgICAgICBidWlsZGVyLmFwcGVuZChzX2RlZmF1bHRGZWVkVGl0bGUpOwotCi0gICAgaWYgKCFm
ZWVkLT5tX2xpbmsuaXNFbXB0eSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjwv
YT4iKTsKLQotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPC9oMj4iKTsKLQotICAgIGlmICgh
ZmVlZC0+bV9kZXNjcmlwdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCI8cD4iKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZmVlZC0+bV9kZXNjcmlwdGlv
bik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPC9wPiIpOwotICAgIH0KLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmZWVkLT5tX2l0ZW1zLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIFJTU0l0ZW0qIGl0ZW0gPSBmZWVkLT5tX2l0ZW1zW2ldOwotICAgICAgICBTdHJpbmcg
YXJ0aWNsZU5hbWU7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPGRpdiBpZD1cIiIp
OwotICAgICAgICBidWlsZGVyLmFwcGVuZChhcnRpY2xlTmFtZSk7Ci0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiXCIgY2xhc3M9XCJhcnRpY2xlXCI+XG48YSBocmVmPVwiIik7Ci0gICAg
ICAgIGlmICghaXRlbS0+bV9saW5rLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGl0ZW0tPm1fbGluayk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCI+PGI+
Iik7Ci0gICAgICAgIGlmICghaXRlbS0+bV90aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChpdGVtLT5tX3RpdGxlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoc19kZWZhdWx0RW50cnlUaXRsZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiPC9iPjwvYT5cbjxiciAvPiIpOwotCi0gICAgICAgIGlmICghaXRlbS0+bV9h
dXRob3IuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChpMThuKCJCeSIp
KTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIDxiPiIpOwotICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoaXRlbS0+bV9hdXRob3IpOwotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCI8L2I+ICIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KCFmZWVkLT5tX2F1dGhvci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZChpMThuKCJCeSIpKTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IiA8Yj4iKTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChmZWVkLT5tX2F1dGhvcik7
Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8L2I+ICIpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpdGVtLT5tX2NhdGVnb3JpZXMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWl0ZW0tPm1fYXV0aG9yLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChpMThuKCJ1bmRlciAiKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaTE4bigiVW5kZXIgIikpOwot
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbS0+bV9jYXRlZ29yaWVz
LnNpemUoKSA7ICsraSkgewotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
PGI+Iik7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaXRlbS0+bV9jYXRlZ29yaWVz
W2ldKTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjwvYj4iKTsKLQot
ICAgICAgICAgICAgICAgIGlmIChpIDwgaXRlbS0+bV9jYXRlZ29yaWVzLnNpemUoKSAtIDEpCi0g
ICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPGJyIC8+
Iik7Ci0gICAgICAgIGlmICghaXRlbS0+bV9wdWJEYXRlLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGl0ZW0tPm1fcHViRGF0ZSk7Ci0KLSAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCI8YnIgLz4iKTsKLSAgICAgICAgaWYgKCFpdGVtLT5tX2Rlc2NyaXB0aW9uLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0ZW0tPm1fZGVzY3JpcHRpb24p
OwotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjxiciAvPiIpOwotCi0gICAgICAgIGlm
IChpdGVtLT5tX2VuY2xvc3VyZSkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCI8YnIgLz4iKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPGEgaHJlZj1c
IiIpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaXRlbS0+bV9lbmNsb3N1cmUtPm1fdXJs
KTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCI+Iik7Ci0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChpMThuKCJFbWJlZGRlZCAiKSk7Ci0KLSAgICAgICAgICAgIFJTU0Vu
Y2xvc3VyZTo6VHlwZSB0eXBlID0gaXRlbS0+bV9lbmNsb3N1cmUtPnR5cGVJbkVudW0oKTsKLSAg
ICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSBSU1NFbmNsb3N1cmU6
OlR5cGVJbWFnZToKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChpMThuKCJJbWFnZSIp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUlNTRW5jbG9zdXJl
OjpUeXBlQXVkaW86Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaTE4bigiQXVkaW8i
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJTU0VuY2xvc3Vy
ZTo6VHlwZVZpZGVvOgotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGkxOG4oIlZpZGVv
IikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSU1NFbmNsb3N1
cmU6OlR5cGVBcHBsaWNhdGlvbjoKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoaTE4bigiVW5rbm93biBDb250ZW50IikpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChp
MThuKCIgU291cmNlOiAiKSk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVtLT5tX2Vu
Y2xvc3VyZS0+c3VnZ2VzdGVkTmFtZSgpKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiPC9hPjxiciAvPjxiciAvPiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCI8YnIgLz48L2Rpdj5cbiIpOwotICAgIH0KLQotICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiPC9ib2R5PjwvaHRtbD5cbiIpOwotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JT
U0dlbmVyYXRvci5oCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIw
MTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBSU1NHZW5lcmF0b3JfaAotI2RlZmluZSBSU1NHZW5l
cmF0b3JfaAotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgUlNTRmVlZDsKLQotY2xhc3MgUlNTR2VuZXJhdG9yIHsKLXB1Ymxp
YzoKLSAgICBSU1NHZW5lcmF0b3IoKTsKLSAgICB+UlNTR2VuZXJhdG9yKCk7Ci0KLSAgICBTdHJp
bmcgZ2VuZXJhdGVIdG1sKFJTU0ZlZWQqKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFJTU0dlbmVyYXRvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU1BhcnNlckJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTUGFyc2Vy
QmFzZS5jcHAJKHJldmlzaW9uIDE2MTU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9yc3MvUlNTUGFyc2VyQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIw
MTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJTU1BhcnNl
ckJhc2UuaCIKLQotI2luY2x1ZGUgImxpYnhtbC9wYXJzZXIuaCIKLSNpbmNsdWRlICJsaWJ4bWwv
eG1sd3JpdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVJTU0VuY2xvc3VyZTo6UlNTRW5jbG9zdXJlKCkKLSAgICA6IG1f
dHlwZUluRW51bShUeXBlVW5rbm93bikKLXsgfQotCi1SU1NFbmNsb3N1cmU6OlR5cGUgUlNTRW5j
bG9zdXJlOjp0eXBlSW5FbnVtKCkKLXsKLSAgICBpZiAoVHlwZVVua25vd24gIT0gbV90eXBlSW5F
bnVtKQotICAgICAgICByZXR1cm4gbV90eXBlSW5FbnVtOwotCi0gICAgc2l6ZV90IGRpdiA9IG1f
dHlwZS5maW5kKCcvJyk7Ci0gICAgaWYgKFdURjo6bm90Rm91bmQgPT0gZGl2IHx8ICFkaXYpIHsK
LSAgICAgICAgbV90eXBlSW5FbnVtID0gVHlwZVVuc3VwcG9ydGVkOwotICAgICAgICByZXR1cm4g
bV90eXBlSW5FbnVtOwotICAgIH0KLQotICAgIFN0cmluZyBiYXNlID0gbV90eXBlLnN1YnN0cmlu
ZygwLCBkaXYpLmxvd2VyKCk7Ci0gICAgaWYgKGJhc2UgPT0gImltYWdlIikKLSAgICAgICAgbV90
eXBlSW5FbnVtID0gVHlwZUltYWdlOwotICAgIGVsc2UgaWYgKGJhc2UgPT0gImF1ZGlvIikKLSAg
ICAgICAgbV90eXBlSW5FbnVtID0gVHlwZUF1ZGlvOwotICAgIGVsc2UgaWYgKGJhc2UgPT0gInZp
ZGVvIikKLSAgICAgICAgbV90eXBlSW5FbnVtID0gVHlwZVZpZGVvOwotICAgIGVsc2UgaWYgKGJh
c2UgPT0gImFwcGxpY2F0aW9uIikKLSAgICAgICAgbV90eXBlSW5FbnVtID0gVHlwZUFwcGxpY2F0
aW9uOwotICAgIGVsc2UKLSAgICAgICAgbV90eXBlSW5FbnVtID0gVHlwZVVuc3VwcG9ydGVkOwot
Ci0gICAgcmV0dXJuIG1fdHlwZUluRW51bTsKLX0KLQotU3RyaW5nIFJTU0VuY2xvc3VyZTo6c3Vn
Z2VzdGVkTmFtZSgpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IHN0YXJ0ID0gbV91cmwucmV2ZXJzZUZp
bmQoJy8nKTsKLSAgICBpZiAoV1RGOjpub3RGb3VuZCA9PSBzdGFydCkKLSAgICAgICAgc3RhcnQg
PSAwOwotICAgIGVsc2UKLSAgICAgICAgKytzdGFydDsKLQotICAgIHJldHVybiBtX3VybC5zdWJz
dHJpbmcoc3RhcnQpOwotfQotCi1SU1NGZWVkOjpSU1NGZWVkKCkKLXsKLX0KLQotUlNTRmVlZDo6
flJTU0ZlZWQoKQotewotICAgIGNsZWFyKCk7Ci19Ci0KLXZvaWQgUlNTRmVlZDo6Y2xlYXIoKQot
ewotICAgIGRlcHJlY2F0ZWREZWxldGVBbGxWYWx1ZXMobV9pdGVtcyk7Ci0gICAgbV9pdGVtcy5j
bGVhcigpOwotfQotCi1SU1NJdGVtOjpSU1NJdGVtKCkKLSAgICA6IG1fZW5jbG9zdXJlKDApCi17
Ci19Ci0KLVJTU0l0ZW06On5SU1NJdGVtKCkKLXsKLSAgICBjbGVhcigpOwotfQotCi12b2lkIFJT
U0l0ZW06OmNsZWFyKCkKLXsKLSAgICBkZWxldGUgbV9lbmNsb3N1cmU7Ci19Ci0KLVJTU1BhcnNl
ckJhc2U6OlJTU1BhcnNlckJhc2UoKQotICAgIDogbV9yb290KDApCi17Ci19Ci0KLVJTU1BhcnNl
ckJhc2U6On5SU1NQYXJzZXJCYXNlKCkKLXsKLSAgICBkZWxldGUgbV9yb290OwotfQotCi1TdHJp
bmcgdGV4dEZyb21YTUxBdHRyKHhtbEF0dHIqIGF0dHIpCi17Ci0gICAgaWYgKCFhdHRyKQotICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgdGV4dDsKLQot
ICAgIGZvciAoeG1sTm9kZSogbm9kZSA9IGF0dHItPmNoaWxkcmVuOyBub2RlOyBub2RlID0gbm9k
ZS0+bmV4dCkgewotICAgICAgICBpZiAobm9kZS0+dHlwZSA9PSBYTUxfVEVYVF9OT0RFKQotICAg
ICAgICAgICAgdGV4dC5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obm9kZS0+
Y29udGVudCkpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCkuc3RyaXBXaGl0
ZVNwYWNlKCk7Ci19Ci0KLVN0cmluZyB0ZXh0RnJvbVhNTE5vZGUoeG1sTm9kZSogbm9kZSkKLXsK
LSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotCi0gICAgU3Ry
aW5nQnVpbGRlciB0ZXh0OwotCi0gICAgZm9yIChub2RlID0gbm9kZS0+Y2hpbGRyZW47IG5vZGU7
IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgICAgIGlmICgobm9kZS0+dHlwZSA9PSBYTUxfVEVY
VF9OT0RFKSB8fCAobm9kZS0+dHlwZSA9PSBYTUxfQ0RBVEFfU0VDVElPTl9OT0RFKSkKLSAgICAg
ICAgICAgIHRleHQuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5vZGUtPmNv
bnRlbnQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGV4dC50b1N0cmluZygpLnN0cmlwV2hpdGVT
cGFjZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JTU1BhcnNlckJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvcnNzL1JT
U1BhcnNlckJhc2UuaAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9ibGFja2JlcnJ5L3Jzcy9SU1NQYXJzZXJCYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEs
IDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotCi0jaWZuZGVmIFJTU1BhcnNlckJhc2VfaAotI2RlZmluZSBS
U1NQYXJzZXJCYXNlX2gKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU1pc2MuaD4KLSNp
bmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBS
U1NJdGVtOwotCi1jbGFzcyBSU1NFbmNsb3N1cmUgewotcHVibGljOgotICAgIGVudW0gVHlwZSB7
Ci0gICAgICAgIFR5cGVVbmtub3duLAotICAgICAgICBUeXBlSW1hZ2UsCi0gICAgICAgIFR5cGVB
dWRpbywKLSAgICAgICAgVHlwZVZpZGVvLAotICAgICAgICBUeXBlQXBwbGljYXRpb24sCi0gICAg
ICAgIFR5cGVVbnN1cHBvcnRlZAotICAgIH07Ci0KLSAgICBSU1NFbmNsb3N1cmUoKTsKLQotICAg
IFR5cGUgdHlwZUluRW51bSgpOwotICAgIFN0cmluZyBzdWdnZXN0ZWROYW1lKCkgY29uc3Q7Ci0K
LSAgICBTdHJpbmcgbV91cmw7Ci0gICAgU3RyaW5nIG1fdHlwZTsKLSAgICBTdHJpbmcgbV9sZW5n
dGg7Ci0KLXByaXZhdGU6Ci0gICAgVHlwZSBtX3R5cGVJbkVudW07Ci19OwotCi1jbGFzcyBSU1NJ
dGVtQmFzZSB7Ci1wdWJsaWM6Ci0gICAgU3RyaW5nIG1fdGl0bGU7Ci0gICAgU3RyaW5nIG1fbGlu
azsKLSAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKLSAgICBTdHJpbmcgbV91cGRhdGVkOwotICAg
IFN0cmluZyBtX2F1dGhvcjsKLSAgICBTdHJpbmcgbV9wdWJEYXRlOwotICAgIFN0cmluZyBtX2lk
OwotfTsKLQotY2xhc3MgUlNTRmVlZDogcHVibGljIFJTU0l0ZW1CYXNlIHsKLXB1YmxpYzoKLSAg
ICBSU1NGZWVkKCk7Ci0gICAgflJTU0ZlZWQoKTsKLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAg
IFN0cmluZyBtX2xhbmd1YWdlOwotICAgIFN0cmluZyBtX3R0bDsKLQotICAgIFZlY3RvcjxSU1NJ
dGVtKj4gbV9pdGVtczsKLX07Ci0KLWNsYXNzIFJTU0l0ZW06IHB1YmxpYyBSU1NJdGVtQmFzZSB7
Ci1wdWJsaWM6Ci0gICAgUlNTSXRlbSgpOwotICAgIH5SU1NJdGVtKCk7Ci0KLSAgICB2b2lkIGNs
ZWFyKCk7Ci0KLSAgICBTdHJpbmcgbV9jb21tZW50czsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX2Nh
dGVnb3JpZXM7Ci0gICAgUlNTRW5jbG9zdXJlKiBtX2VuY2xvc3VyZTsKLXByaXZhdGU6Ci0gICAg
RElTQUJMRV9DT1BZKFJTU0l0ZW0pCi19OwotCi1jbGFzcyBSU1NQYXJzZXJCYXNlIHsKLXB1Ymxp
YzoKLSAgICBSU1NQYXJzZXJCYXNlKCk7Ci0gICAgdmlydHVhbCB+UlNTUGFyc2VyQmFzZSgpOwot
Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQnVmZmVyKGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxl
bmd0aCwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiBlbmNvZGluZykgPSAwOwotCi0gICAg
UlNTRmVlZCogbV9yb290OwotcHJpdmF0ZToKLSAgICBESVNBQkxFX0NPUFkoUlNTUGFyc2VyQmFz
ZSkKLX07Ci0KLVN0cmluZyB0ZXh0RnJvbVhNTEF0dHIoeG1sQXR0ciopOwotU3RyaW5nIHRleHRG
cm9tWE1MTm9kZSh4bWxOb2RlKik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFJTU1BhcnNlckJhc2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9i
bGFja2JlcnJ5L1N0cmluZ0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvYmxhY2tiZXJyeS9TdHJpbmdCbGFja0JlcnJ5LmNwcAkocmV2aXNp
b24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ibGFja2JlcnJ5L1N0
cmluZ0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybVN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLQotU3RyaW5nOjpTdHJpbmcoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OlN0cmluZyYgd2ViU3RyaW5nKQotewotICAgIGlmICh3ZWJTdHJpbmcuaXNVdGY4KCkpCi0gICAg
ICAgICp0aGlzID0gU3RyaW5nOjpmcm9tVVRGOCh3ZWJTdHJpbmcuZGF0YSgpLCB3ZWJTdHJpbmcu
bGVuZ3RoKCkpOwotICAgIGVsc2UKLSAgICAgICAgKnRoaXMgPSBTdHJpbmcod2ViU3RyaW5nLmRh
dGEoKSwgd2ViU3RyaW5nLmxlbmd0aCgpKTsKLX0KLQotU3RyaW5nOjpvcGVyYXRvciBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKCkgY29uc3QKLXsKLSAgICBpZiAoaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKTsK
LQotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmc6OmZyb21MYXRpbjEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2hhcmFj
dGVyczgoKSksIGxlbmd0aCgpKTsKLQotICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYmxhY2tiZXJyeS9UZXh0QnJlYWtJ
dGVyYXRvckludGVybmFsSUNVQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9ibGFja2JlcnJ5L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJ
Q1VCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9ibGFja2JlcnJ5L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VCbGFja0Jl
cnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCi0KLSNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1TdHJpbmcuaD4KLSNpbmNsdWRlIDxMb2NhbGVIYW5kbGVyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY29uc3QgY2hhciogY3VycmVudFNlYXJjaExvY2FsZUlEKCkKLXsK
LSAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvY2FsZUhhbmRsZXI6Omluc3RhbmNl
KCktPnJlZ2lvbigpLmNfc3RyKCk7Ci19Ci0KLWNvbnN0IGNoYXIqIGN1cnJlbnRUZXh0QnJlYWtM
b2NhbGVJRCgpCi17Ci0gICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2NhbGVIYW5k
bGVyOjppbnN0YW5jZSgpLT5yZWdpb24oKS5jX3N0cigpOwotfQotCi19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2JsYWNrYmVycnkvU3RyaW5nQmxhY2tCZXJyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ibGFja2JlcnJ5L1N0cmlu
Z0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2JsYWNrYmVycnkvU3RyaW5nQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgi
Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1TdHJpbmc6OlN0cmluZyhjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB3ZWJTdHJpbmcpCi17Ci0gICAgaWYgKHdl
YlN0cmluZy5pc1V0ZjgoKSkKLSAgICAgICAgKnRoaXMgPSBTdHJpbmc6OmZyb21VVEY4KHdlYlN0
cmluZy5kYXRhKCksIHdlYlN0cmluZy5sZW5ndGgoKSk7Ci0gICAgZWxzZQotICAgICAgICAqdGhp
cyA9IFN0cmluZyh3ZWJTdHJpbmcuZGF0YSgpLCB3ZWJTdHJpbmcubGVuZ3RoKCkpOwotfQotCi1T
dHJpbmc6Om9wZXJhdG9yIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcoKSBjb25zdAotewot
ICAgIGlmIChpc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nOjplbXB0eVN0cmluZygpOwotCi0gICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1
cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZnJvbUxhdGluMShyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzOCgpKSwgbGVuZ3RoKCkpOwotCi0gICAgcmV0dXJu
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcoY2hhcmFjdGVycygpLCBsZW5ndGgoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9ibGFja2JlcnJ5L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VCbGFja0JlcnJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2JsYWNrYmVycnkvVGV4
dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2JsYWNrYmVycnkvVGV4dEJyZWFrSXRl
cmF0b3JJbnRlcm5hbElDVUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1Uu
aCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgotI2luY2x1ZGUgPExv
Y2FsZUhhbmRsZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBjaGFyKiBjdXJy
ZW50U2VhcmNoTG9jYWxlSUQoKQotewotICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
TG9jYWxlSGFuZGxlcjo6aW5zdGFuY2UoKS0+cmVnaW9uKCkuY19zdHIoKTsKLX0KLQotY29uc3Qg
Y2hhciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkKLXsKLSAgICByZXR1cm4gQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkxvY2FsZUhhbmRsZXI6Omluc3RhbmNlKCktPnJlZ2lvbigpLmNfc3RyKCk7
Ci19Ci0KLX0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220784</attachid>
            <date>2014-01-09 16:15:34 -0800</date>
            <delta_ts>2014-01-10 16:50:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126715-20140109161533.patch</filename>
            <type>text/plain</type>
            <size>412043</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTU5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTAxLTA5ICBCZW5qYW1p
biBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSByZW1haW5p
bmcgYmxhY2tiZXJyeSBmaWxlcyBJIGNvdWxkIGZpbmQgV2ViQ29yZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NzE1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2U6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL2JsYWNrYmVycnk6IFJlbW92ZWQuCisg
ICAgICAgICogY3NzL21lZGlhQ29udHJvbHNCbGFja0JlcnJ5LmNzczogUmVtb3ZlZC4KKyAgICAg
ICAgKiBjc3MvbWVkaWFDb250cm9sc0JsYWNrQmVycnlGdWxsc2NyZWVuLmNzczogUmVtb3ZlZC4K
KyAgICAgICAgKiBjc3MvdGhlbWVCbGFja0JlcnJ5LmNzczogUmVtb3ZlZC4KKyAgICAgICAgKiBl
ZGl0aW5nL2JsYWNrYmVycnk6IFJlbW92ZWQuCisgICAgICAgICogaGlzdG9yeS9ibGFja2JlcnJ5
OiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHNCbGFja0JlcnJ5
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQmxhY2tC
ZXJyeS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvYmxhY2tiZXJyeTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9ibGFja2JlcnJ5OiBSZW1vdmVkLgorICAgICAgICAqIHBs
dWdpbnMvYmxhY2tiZXJyeTogUmVtb3ZlZC4KKwogMjAxNC0wMS0wOSAgRGFuaWVsIEJhdGVzICA8
ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQXR0ZW1wdCB0byBmaXggdGhlIFdpbmRvd3Mg
YnVpbGQgZm9sbG93aW5nIDxodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xNjE1ODk+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCShyZXZpc2lvbiAx
NjE1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UJKHdvcmtp
bmcgY29weSkKQEAgLTEsMjcwICswLDAgQEAKLWxpc3QoSU5TRVJUIFdlYkNvcmVfSU5DTFVERV9E
SVJFQ1RPUklFUyAwCi0gICAgIiR7QkxBQ0tCRVJSWV9USElSRF9QQVJUWV9ESVJ9IiAjIEZvciA8
dW5pY29kZS5oPiwgd2hpY2ggaXMgaW5jbHVkZWQgZnJvbSA8c3lzL2tleWNvZGVzLmg+LgotKQot
Ci1saXN0KFJFTU9WRV9JVEVNIFdlYkNvcmVfU09VUkNFUwotICAgIGh0bWwvc2hhZG93L01lZGlh
Q29udHJvbHNBcHBsZS5jcHAKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llRGF0
YWJhc2VCYWNraW5nU3RvcmUiCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6IgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlw
ZS8iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeSIKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L3JzcyIKLSkKLQot
IyBPdGhlciBzb3VyY2VzCi1saXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICBwbGF0Zm9y
bS9ibGFja2JlcnJ5L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlci5jcHAKLSAgICBwbGF0
Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwCi0gICAgcGxhdGZvcm0vYmxhY2tiZXJy
eS9Db29raWVNYXAuY3BwCi0gICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVQYXJzZXIuY3Bw
Ci0gICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9GaWxlU3lzdGVtQmxhY2tCZXJyeS5jcHAKLSAgICBw
bGF0Zm9ybS9ibGFja2JlcnJ5L1BhcnNlZENvb2tpZS5jcHAKLQotICAgIHBsYXRmb3JtL2JsYWNr
YmVycnkvQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUvQ29va2llRGF0YWJhc2VCYWNraW5nU3Rv
cmUuY3BwCi0KLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKLQotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlU2FuaXRpemVyLmNwcAotCi0gICAg
cGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKLQotICAgIHBsYXRm
b3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKLSAgICBwbGF0Zm9ybS9wb3NpeC9TaGFyZWRC
dWZmZXJQT1NJWC5jcHAKLQotICAgIHBsYXRmb3JtL3RleHQvTG9jYWxlTm9uZS5jcHAKLQotICAg
IHBsYXRmb3JtL3RleHQvYmxhY2tiZXJyeS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVQmxh
Y2tCZXJyeS5jcHAKLSkKLQotIyBOZXR3b3JraW5nIHNvdXJjZXMKLWxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwotICAgIHBsYXRmb3JtL25ldHdvcmsvTUlNRVNuaWZmaW5nLmNwcAotICAgIHBs
YXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU3R1Yi5jcHAKLSAgICBwbGF0Zm9y
bS9uZXR3b3JrL1Byb3h5U2VydmVyLmNwcAotCi0gICAgcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L0F1dG9maWxsQmFja2luZ1N0b3JlLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9CbG9iU3RyZWFtLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9Db29r
aWVKYXJCbGFja0JlcnJ5LmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9ETlNC
bGFja0JlcnJ5LmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9EZWZlcnJlZERh
dGEuY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtKb2IuY3BwCi0g
ICAgcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtNYW5hZ2VyLmNwcAotICAgIHBs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrU3RhdGVOb3RpZmllckJsYWNrQmVycnku
Y3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Byb3h5U2VydmVyQmxhY2tCZXJy
eS5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNr
QmVycnkuY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxl
QmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VS
ZXF1ZXN0QmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVz
b3VyY2VSZXNwb25zZUJsYWNrQmVycnkuY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L1NvY2tldFN0cmVhbUhhbmRsZUJsYWNrQmVycnkuY3BwCi0KLSAgICBwbGF0Zm9ybS9uZXR3
b3JrL2JsYWNrYmVycnkvcnNzL1JTUzEwUGFyc2VyLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsv
YmxhY2tiZXJyeS9yc3MvUlNTMjBQYXJzZXIuY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L3Jzcy9SU1NBdG9tUGFyc2VyLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9yc3MvUlNTRmlsdGVyU3RyZWFtLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9yc3MvUlNTR2VuZXJhdG9yLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJy
eS9yc3MvUlNTUGFyc2VyQmFzZS5jcHAKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9VU0VSX0FH
RU5UX1NUWUxFX1NIRUVUUwotICAgICR7V0VCQ09SRV9ESVJ9L2Nzcy9tZWRpYUNvbnRyb2xzQmxh
Y2tCZXJyeS5jc3MKLSAgICAke1dFQkNPUkVfRElSfS9jc3MvbWVkaWFDb250cm9sc0JsYWNrQmVy
cnlGdWxsc2NyZWVuLmNzcwotICAgICR7V0VCQ09SRV9ESVJ9L2Nzcy90aGVtZUJsYWNrQmVycnku
Y3NzCi0pCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIk
e1dFQkNPUkVfRElSfS9icmlkZ2UvYmxhY2tiZXJyeSIKLSAgICAiJHtXRUJDT1JFX0RJUn0vaGlz
dG9yeS9ibGFja2JlcnJ5IgotICAgICIke1dFQkNPUkVfRElSfS9wYWdlL2JsYWNrYmVycnkiCi0g
ICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2Uvc2Nyb2xsaW5nL2JsYWNrYmVycnkiCi0gICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL2JsYWNrYmVycnkiCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkiCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcCIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9p
Y28iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWciCi0g
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZyIKLSAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMiCi0gICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeSIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vdGV4dC9ibGFja2JlcnJ5IgotICAgICIke1dFQktJVF9ESVJ9L2JsYWNrYmVycnkvQXBpIgot
ICAgICIke1dFQktJVF9ESVJ9L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQiCi0gICAgIiR7V0VC
S0lUX0RJUn0vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0IgotKQotCi0jIEJsYWNrQmVycnkgc291
cmNlcwotbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgZWRpdGluZy9ibGFja2JlcnJ5
L1NtYXJ0UmVwbGFjZUJsYWNrQmVycnkuY3BwCi0KLSAgICBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xzQmxhY2tCZXJyeS5jcHAKLQotICAgIHBhZ2UvYmxhY2tiZXJyeS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0QmxhY2tCZXJyeS5jcHAKLSAgICBwYWdlL2JsYWNrYmVycnkvRHJhZ0NvbnRyb2xsZXJCbGFj
a0JlcnJ5LmNwcAotICAgIHBhZ2UvYmxhY2tiZXJyeS9FdmVudEhhbmRsZXJCbGFja0JlcnJ5LmNw
cAotICAgIHBhZ2UvYmxhY2tiZXJyeS9TZXR0aW5nc0JsYWNrQmVycnkuY3BwCi0KLSAgICBwbGF0
Zm9ybS9ibGFja2JlcnJ5L0N1cnNvckJsYWNrQmVycnkuY3BwCi0gICAgcGxhdGZvcm0vYmxhY2ti
ZXJyeS9EcmFnRGF0YUJsYWNrQmVycnkuY3BwCi0gICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9EcmFn
SW1hZ2VCbGFja0JlcnJ5LmNwcAotICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvRXZlbnRMb29wQmxh
Y2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5L0xvY2FsaXplZFN0cmluZ3NCbGFj
a0JlcnJ5LmNwcAotICAgIHBsYXRmb3JtL2JsYWNrYmVycnkvTG9nZ2luZ0JsYWNrQmVycnkuY3Bw
Ci0gICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9NSU1FVHlwZVJlZ2lzdHJ5QmxhY2tCZXJyeS5jcHAK
LSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5L1Bhc3RlYm9hcmRCbGFja0JlcnJ5LmNwcAotICAgIHBs
YXRmb3JtL2JsYWNrYmVycnkvUGxhdGZvcm1LZXlib2FyZEV2ZW50QmxhY2tCZXJyeS5jcHAKLSAg
ICBwbGF0Zm9ybS9ibGFja2JlcnJ5L1BsYXRmb3JtTW91c2VFdmVudEJsYWNrQmVycnkuY3BwCi0g
ICAgcGxhdGZvcm0vYmxhY2tiZXJyeS9QbGF0Zm9ybVNjcmVlbkJsYWNrQmVycnkuY3BwCi0gICAg
cGxhdGZvcm0vYmxhY2tiZXJyeS9QbGF0Zm9ybVRvdWNoRXZlbnRCbGFja0JlcnJ5LmNwcAotICAg
IHBsYXRmb3JtL2JsYWNrYmVycnkvUGxhdGZvcm1Ub3VjaFBvaW50QmxhY2tCZXJyeS5jcHAKLSAg
ICBwbGF0Zm9ybS9ibGFja2JlcnJ5L1BvcHVwTWVudUJsYWNrQmVycnkuY3BwCi0gICAgcGxhdGZv
cm0vYmxhY2tiZXJyeS9SZW5kZXJUaGVtZUJsYWNrQmVycnkuY3BwCi0gICAgcGxhdGZvcm0vYmxh
Y2tiZXJyeS9TU0xLZXlHZW5lcmF0b3JCbGFja0JlcnJ5LmNwcAotICAgIHBsYXRmb3JtL2JsYWNr
YmVycnkvU2Nyb2xsYmFyVGhlbWVCbGFja0JlcnJ5LmNwcAotICAgIHBsYXRmb3JtL2JsYWNrYmVy
cnkvU2VhcmNoUG9wdXBNZW51QmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5
L1NoYXJlZFRpbWVyQmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5L1NvdW5k
QmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5L1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAKLSAgICBwbGF0Zm9ybS9ibGFja2JlcnJ5L1dpZGdldEJsYWNrQmVycnkuY3BwCi0KLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Zsb2F0UG9pbnRCbGFja0JlcnJ5LmNwcAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRmxvYXRSZWN0QmxhY2tCZXJyeS5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Zsb2F0U2l6ZUJsYWNrQmVycnkuY3Bw
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JY29uQmxhY2tCZXJyeS5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQmxhY2tCZXJyeS5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ludFBvaW50QmxhY2tCZXJyeS5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ludFJlY3RCbGFja0JlcnJ5LmNwcAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW50U2l6ZUJsYWNrQmVycnkuY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmNw
cAotCi0gICAgcGxhdGZvcm0vdGV4dC9ibGFja2JlcnJ5L1N0cmluZ0JsYWNrQmVycnkuY3BwCi0p
Ci0KLSMgQ3JlZGVudGlhbCBQZXJzaXN0ZW5jZSBzb3VyY2VzCi1saXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvQ3JlZGVudGlhbEJhY2tp
bmdTdG9yZS5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvQ3JlZGVudGlhbFN0
b3JhZ2VCbGFja0JlcnJ5LmNwcAotKQotCi1pZiAoRU5BQkxFX1NNT09USF9TQ1JPTExJTkcpCi0g
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBsYXRmb3JtL2JsYWNrYmVy
cnkvU2Nyb2xsQW5pbWF0b3JCbGFja0JlcnJ5LmNwcAotICAgICkKLWVuZGlmICgpCi0KLWlmIChF
TkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5j
cHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Rpc3BsYXlSZWZyZXNo
TW9uaXRvckJsYWNrQmVycnkuY3BwCi0gICAgKQotZW5kaWYgKCkKLQotaWYgKEVOQUJMRV9XRUJH
TCkKLSAgICBhZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNFX09QRU5HTF9FU18yPTEpCi0gICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUiCi0gICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wiCi0gICAgKQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0RyYXdpbmdCdWZmZXJC
bGFja0JlcnJ5LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBo
aWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKLSAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGlu
Zy5jcHAKLSAgICApCi1lbmRpZiAoKQotCi1pZiAoRU5BQkxFX01FRElBX1NUUkVBTSkKLSAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
YmxhY2tiZXJyeS9NZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkuY3BwCi0gICAgKQotZW5kaWYg
KCkKLQotaWYgKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwotICAgICAgICBwbHVnaW5zL2JsYWNrYmVycnkvTlBDYWxsYmFja3NCbGFj
a0JlcnJ5LmNwcAotICAgICAgICBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luUGFja2FnZUJsYWNr
QmVycnkuY3BwCi0gICAgICAgIHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJy
eS5jcHAKLSAgICAgICAgcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdQcml2YXRlQmxhY2tC
ZXJyeS5jcHAKLSAgICApCi1lbHNlICgpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
Ci0gICAgICAgIHBsdWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCi0gICAgKQotZW5kaWYgKCkKLQot
aWYgKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCi0gICAgICAgIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAotICAgICkKLWVuZGlmICgp
Ci0KLSMgVG8gc3BlZWQgdXAgbGlua2luZyB3aGVuIHdvcmtpbmcgb24gYWNjZWwgY29tcCwgeW91
IGNhbiBtb3ZlIHRoaXMgd2hvbGUgY2h1bmsKLSMgdG8gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0NNYWtlTGlzdHNCbGFja0JlcnJ5LnR4dC4KLSMgQXBwZW5kIHRvIFdlYktpdF9TT1VSQ0VTIGlu
c3RlYWQgb2YgV2ViQ29yZV9TT1VSQ0VTLgotaWYgKFdURl9VU0VfQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXJVcGRhdGVyLmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNwcAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJXZWJLaXRU
aHJlYWQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NM
YXllckJsYWNrQmVycnkuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TGF5ZXJBbmltYXRpb24uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlclN1cmZhY2UuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUZXh0dXJlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1dlYkdMTGF5ZXJXZWJLaXRUaHJlYWQu
Y3BwCi0KLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKLSAgICAgICAg
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKLSAgICApCi1lbmRpZiAoKQotCi1z
ZXQoRU5We1dFQktJVERJUn0gJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UpCi1zZXQoRU5We1BM
QVRGT1JNTkFNRX0gJHtDTUFLRV9TWVNURU1fTkFNRX0pCi1leGVjdXRlX3Byb2Nlc3MoCi0gICAg
Q09NTUFORCBob3N0bmFtZQotICAgIE9VVFBVVF9WQVJJQUJMRSBob3N0Ci0pCi1zdHJpbmcoUkVQ
TEFDRSAiXG4iICIiIGhvc3QxICIke2hvc3R9IikKLXNldChFTlZ7Q09NUFVURVJOQU1FfSAke2hv
c3QxfSkKLQotaWYgKCRFTlZ7UFVCTElDX0JVSUxEfSkKLSAgICBhZGRfZGVmaW5pdGlvbnMoLURQ
VUJMSUNfQlVJTEQ9JEVOVntQVUJMSUNfQlVJTER9KQotZW5kaWYgKCkKLQotIyBHZW5lcmF0ZSBj
b250ZW50cyBmb3IgUG9wdXBQaWNrZXIuY3BwCi1zZXQoV2ViQ29yZV9QT1BVUF9DU1NfQU5EX0pT
Ci0gICAgJHtXRUJDT1JFX0RJUn0vUmVzb3VyY2VzL2JsYWNrYmVycnkvcG9wdXBDb250cm9sQmxh
Y2tCZXJyeS5jc3MKLSAgICAke1dFQkNPUkVfRElSfS9SZXNvdXJjZXMvYmxhY2tiZXJyeS9zZWxl
Y3RDb250cm9sQmxhY2tCZXJyeS5jc3MKLSAgICAke1dFQkNPUkVfRElSfS9SZXNvdXJjZXMvYmxh
Y2tiZXJyeS9zZWxlY3RDb250cm9sQmxhY2tCZXJyeS5qcwotKQotCi1hZGRfY3VzdG9tX2NvbW1h
bmQoCi0gICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9Qb3B1cFBpY2tl
ci5oICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9Qb3B1cFBpY2tlci5jcHAKLSAgICBN
QUlOX0RFUEVOREVOQ1kgJHtXRUJDT1JFX0RJUn0vbWFrZS1maWxlLWFycmF5cy5weQotICAgIERF
UEVORFMgJHtXZWJDb3JlX1BPUFVQX0NTU19BTkRfSlN9Ci0gICAgQ09NTUFORCAke1BZVEhPTl9F
WEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9tYWtlLWZpbGUtYXJyYXlzLnB5IC0tb3V0LWg9JHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1BvcHVwUGlja2VyLmggLS1vdXQtY3BwPSR7REVS
SVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9Qb3B1cFBpY2tlci5jcHAgJHtXZWJDb3JlX1BPUFVQ
X0NTU19BTkRfSlN9Ci0pCi1saXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtERVJJVkVEX1NP
VVJDRVNfV0VCQ09SRV9ESVJ9L1BvcHVwUGlja2VyLmNwcCkKLQotc2V0KENNQUtFX0NfQVJDSElW
RV9DUkVBVEUgIjxDTUFLRV9BUj4gPExJTktfRkxBR1M+IGNydVQgPFRBUkdFVD4gPE9CSkVDVFM+
IikKLXNldChDTUFLRV9DX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IDxMSU5LX0ZMQUdTPiBy
dVQgPFRBUkdFVD4gPE9CSkVDVFM+IikKLXNldChDTUFLRV9DWFhfQVJDSElWRV9DUkVBVEUgIjxD
TUFLRV9BUj4gPExJTktfRkxBR1M+IGNydVQgPFRBUkdFVD4gPE9CSkVDVFM+IikKLXNldChDTUFL
RV9DWFhfQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gPExJTktfRkxBR1M+IHJ1VCA8VEFSR0VU
PiA8T0JKRUNUUz4iKQpJbmRleDogU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2JsYWNrYmVycnkv
Y29sb3JDb250cm9sQmxhY2tCZXJyeS5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL2JsYWNrYmVycnkvY29sb3JDb250cm9sQmxhY2tCZXJyeS5jc3MJKHJldmlzaW9u
IDE2MTU5NikKKysrIFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2JlcnJ5L2NvbG9yQ29u
dHJvbEJsYWNrQmVycnkuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEyLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICovCi0uY29sb3ItcGlja2VyLXBvcHVwLWFyZWEgewotICAgIG1heC1o
ZWlnaHQ6IG5vbmU7Ci19Ci0KLS5jb2xvci1waWNrZXItY29udGVudCB7Ci0gICAgaGVpZ2h0OiA4
MzVweDsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotfQotCi0uY29sb3ItcGlja2VyLWJsb2NrIHsK
LSAgICBwYWRkaW5nLWJvdHRvbTogMjBweDsKLX0KLQotI2NvbG9yLXBpY2tlci1zd2F0Y2gtYmxv
Y2sgewotICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwotfQotCi0uY29sb3It
cGlja2VyLXN3aXRjaGVyIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgbWFyZ2luOiAy
NXB4IDI1cHggNDBweCAyNXB4OwotICAgIGhlaWdodDogODRweDsKLSAgICBib3JkZXItd2lkdGg6
IDhweDsKLSAgICBib3JkZXItaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3
MEtHZ29BQUFBTlNVaEVVZ0FBQUIwQUFBQlJDQVlBQUFBdUNhMFlBQUFBR1hSRldIUlRiMlowZDJG
eVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTJacFZGaDBXRTFNT21OdmJTNWhaRzlp
WlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdR
MlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlX
UnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMx
ak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0Fn
SWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhP
VGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJp
QnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1
amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wVW1WbVBTSm9kSFJ3T2k4dmJuTXVZV1J2
WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5WTJWU1pXWWpJaUI0Yld4dWN6cDRi
WEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aUlIaHRjRTFOT2s5eWFX
ZHBibUZzUkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1rVkJNRFZHTnpBNE1qQTJPREV4UVVJ
d09FWTBNekJFTVRjME5rTTRRU0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBG
UlRZeFJVTXhRekUzT0VFeE1VVXlRVVkwUWpoRlJEbEJSVVEyUmpGRlJDSWdlRzF3VFUwNlNXNXpk
R0Z1WTJWSlJEMGllRzF3TG1scFpEcEZSVFl4UlVNeFFqRTNPRUV4TVVVeVFVWTBRamhGUkRsQlJV
UTJSakZGUkNJZ2VHMXdPa055WldGMGIzSlViMjlzUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnUTFN
MUlFMWhZMmx1ZEc5emFDSStJRHg0YlhCTlRUcEVaWEpwZG1Wa1JuSnZiU0J6ZEZKbFpqcHBibk4w
WVc1alpVbEVQU0o0YlhBdWFXbGtPakJHTURaRE1FSkdSVVl5TURZNE1URTVOVVpGUlRNMk1UVTRO
RGN4UkVRNUlpQnpkRkpsWmpwa2IyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09qRXlSVUV3TlVZM01E
Z3lNRFk0TVRGQlFqQTRSalF6TUVReE56UTJRemhCSWk4K0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5
dVBpQThMM0prWmpwU1JFWStJRHd2ZURwNGJYQnRaWFJoUGlBOFAzaHdZV05yWlhRZ1pXNWtQU0p5
SWo4K0RGRlZVZ0FBQkFsSlJFRlVlTnJzV3MxUEUwRVUzOWx1ditpSFNOR0RndFZFRDE3MHlKa1lE
aVFRRFFteEVrOGM5UDhnL0JONjRLVEdLQklOSkp3TVo4NWNPUGhKUFNtZ2ROdXlueDNmRzk2VXNi
WmFZTnVTc0pQOE10dmRtZmViOXpHemI3ckRPT2Rhcy9MMTg5Y0VWSEZBREJEVjJpOHV3QUhZK1d0
NXExa0Qxa2dLWkVpU0ljS1RGaHRnQXJuVGtoUUlNMFNvdlgzM052N2s2Wk1MeFdJeFV5NlhVOWky
RFJLZVRxY3J3OFBENXVOSGozL2N1M3ZQcHZ0SWJQNUZ1dlZscXgrcVByd3V6QlF1cnErdkQ5VnFO
VW5FajZDZDZLUHJPaDhaR2ZuMjhzWEw3M1MvZXVYcWxWOTFVaUJNd3ZYNVVxbWtqZDRadmI2OXZY
Mk9pS3FBZmZJUi84Y0FtRktqZTVLa0FCc2NITnhiZTcvMkladk40dk5kSUxaMGFvem0wNmJ2VDE4
R3dpejVZb2RnRXJHRTFRVHFjMVBwYTZPOG1ZY3pROFNURmxZZ0xXUFBuaitMYjI1dVhxRG8yd2Fn
S1NxQXNnTHpIMURiVmFnL0Vyc2JHeHVEcjE2L0VqTUIrQkk2R0NTT1JsbDhzNGlFSG1DUGhGUUkx
ZjlvMmFodFZlbGJJbm1la00rRUF4SUcweGo2UUN0dUZUUGt1NS9VMGFWQjFBai9DeWpwVjUzZ0V5
S0F4S2VQbjlMc29Fbk1vSnVhV1RZNWtWYW9kaFRDbzBhdkpPVlNubVZiU1hvZU1lUUliZHYybE5Y
RVVUcnhJeTRJWEJtb1EvSmQwelFOT1NoRG1mS2VBbDh4NlhHS0hDejdReTV4R2V5UVZmaUFNZVlm
UTd0V0JRZnV3MXB3SUp1NERLV0JyL2l3RmhBcFYrVDU4cVpxWGg2Z2hzM04zY1M4L0JqcmJMdUVv
cFpjdXRhRFlyVDF3Z3FxTkRGdkZ6aEQ4M2JCdkVhTDVZc0hQa2REODlZZnN1QUcwaXlaUDB2bTdZ
R212Vm1SbEtEaEhaNm5YSEwxU05Nd2tMb1VTSjFYbERVc2cvSUcxcDBlU0QyUStNRWlpV0VkK0pT
cHl3NERxUnVCRkdyYXRieTM0MitaMDVHWXFiNE5PakZybEhjMkE2bW5LV2dub3ZjVTdFL0RRQXIv
Nk9pSWVZTk96RkJXZlkvYTRtKzZlaElWWkZaVzM4dWN3Y1FzM0VDRjVnMWlHV3ljVDUzY1FJWFIy
N3ZvN1ZRMmNmaHFZd2ZwZmlxVlluOGFJYkFpck5uZjM4L28reW1Ybnh5MWZENHZRODNRZ2czZGlD
b2YrWkJVbkVFWUh4K1hHcVlDMWxUSUd4c2JrNzhkSFhTMlVlOEhoUWN1amF6UDg3eG9FR3dvQitR
SjBzTDlnc2VFVjVtdHgrS3hmYmh5YnQyK1ZaNmJtOE9QNWF4V3F3MjRycHM4Q1NIMlJ6bDRQVDgv
bjBENXlDUDRjTEd3YlRzSnVHUloxczNaMmRrYjBHNFlNQVJSbk5OMVBSR0x4ZlIyZ2UyeEgvWkhP
U2dQNWFKODVCRzdPSm0vT0k2REp6cFNrVWdrdDdLeTRrSGowdTd1N3JHWHc0R0JBYmF3c0pDZG1K
Z3dmTi9Ib3djVkdOVGhpWTY2aHgxSG5GMkIwV1oyZG5iNmxwZVhyZFhWMWYybHBTVzNYYktwcWFr
b0JHVnljbkl5a2N2bHFtQmljUTRDQ1A4K3U2TDRRcHpTQVJPbENQSjRVTHZGQVprMm9JSkF3bWcw
MnZxVVRnUDVpYzhqZ1haV00vbS9CUmdBN0xINDJnTTdHRDRBQUFBQVNVVk9SSzVDWUlJPSkgOCA4
IDggOCBmaWxsIHN0cmV0Y2g7Ci19Ci0KLS5jb2xvci1waWNrZXItY2hlY2stbWFyayB7Ci0gICAg
d2lkdGg6IDgxcHg7Ci0gICAgaGVpZ2h0OiA4MXB4OwotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVy
bChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUZFQUFBQlJD
QVlBQUFDcWowbzJBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNj
bGxQQUFBQTJacFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENC
aVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgr
SUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdk
R3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1D
OHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21S
bVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0
Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZl
RzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJH
NXpPbk4wVW1WbVBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dV
dlVtVnpiM1Z5WTJWU1pXWWpJaUI0Yld4dWN6cDRiWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVq
YjIwdmVHRndMekV1TUM4aUlIaHRjRTFOT2s5eWFXZHBibUZzUkc5amRXMWxiblJKUkQwaWVHMXdM
bVJwWkRvMVJqSkRNREk1UVRGQk5EaEZNVEV4T1RoQ09UZzVNekZFTVVRNE9ERkNRaUlnZUcxd1RV
MDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG95T0VFMVFqYzRNa0UwTnpReE1VVXhRVGszTWps
RVJqRTJSakk0TkRJeU15SWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3lPRUUx
UWpjNE1VRTBOelF4TVVVeFFUazNNamxFUmpFMlJqSTROREl5TXlJZ2VHMXdPa055WldGMGIzSlVi
MjlzUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnUTFNMUlFMWhZMmx1ZEc5emFDSStJRHg0YlhCTlRU
cEVaWEpwZG1Wa1JuSnZiU0J6ZEZKbFpqcHBibk4wWVc1alpVbEVQU0o0YlhBdWFXbGtPa1JFTWpC
QlJrSkZOREF5TWpZNE1URTRSall5T1VKRVJqa3pORGRGUlRJd0lpQnpkRkpsWmpwa2IyTjFiV1Z1
ZEVsRVBTSjRiWEF1Wkdsa09qVkdNa013TWpsQk1VRTBPRVV4TVRFNU9FSTVPRGt6TVVReFJEZzRN
VUpDSWk4K0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBpQThMM0prWmpwU1JFWStJRHd2ZURwNGJY
QnRaWFJoUGlBOFAzaHdZV05yWlhRZ1pXNWtQU0p5SWo4K0NJMk1FQUFBQ25oSlJFRlVlTnJzbkh0
TWsxa1d3TnZTRm1pcGdBakVFUkJaYVRCTUZoMGdzMFlFbzFISWFseERqSXFLVDJLSVQ5Q284UThm
MGZoTWZLS0pHbzJKWktPSmhoajlRMEZCQlJNeW1YRW5ia0ppV0dSRVlEYUlXQXIwVGRzOXAzTnZ2
ZFkrNk9OcnkreDNrNVAyZ3o3dS9mV2NlODY1OTl4UGFMVmFCWHp6cjRsNEJEeEVIaUlQa1c4OFJC
NGlENUdIeURjZUlqZE5IQVo5RURLUHpvUnRWaGNpWUI3L2J5Q3lrTkFhSXBoSCtsemtBSklDc3hB
eEU3RXdqNDVnLzNRUWhjd1VRb0dKaVVnWUVUdkFaQ0d5OEVaQlRJeU1FakV6b0lPaW9lSWdBcVR3
S0N3cFNDU1JLT2FhaGVrTUlndlBBR0lFMFpQblZPaHJiREJUVWxLc1BUMDkzQTJPNDFVY2FvNVU2
NlFFR0lvTVJFNGVvOSs4ZVJQWDNOd2MzOWJXSnYvdzRZTllxOVdLNEZGcU5CcHRFS1ZTcVRVdExj
MG9rOGtzOERpYW5aMnRLU3dzVk9YazVBekN2M1VnR2hBdEVSMERtR29uWjJiT0pVUWhZNVpTQmx3
TWlBS2xwYVVscWE2dUxxbXBxVWsrTUREZ2sxVWtKQ1NNenA4L1g3Tml4WXErMmJObjk4T2Zob21N
RUtCNkF0UFJ6TU1hSXF0OUVtS2lNZ0p1QWtqYy9mdjNVNjVldlpyODl1M2J5RUIrY1ZaV2xxR3lz
ckp2K2ZMbGFMdW9vVU1FcUpab3Bva0xyUXcwUkJZZ2FsODAwYnhZa0ltdlhyMmFjdWpRb2RUMjl2
WklMdWNRcFZKcE9IcjBhSGRCUVVFdlhLb0kwQkZpNXNaQWd3d2tSQXBRekdnZmFsNzg4UEJ3RXNE
THZIZnZYbXd3UTQvUzBsTDE4ZVBILzZOUUtENFNtRU9NVm80R0NtU2dJRG9DUkljUmgxTVdPSXlV
SFR0Mi9LV3pzMU1haW9BMEl5UERXRk5UOHc0Y0VKcjRBTkZLVFNCQkJnb2lqZnVpR0lDSkRRME4w
M2J1M0RsMVpHUWtJcFFwVVV4TWpQblNwVXRkaXhZdCtnMHUreG1RZXNiaGhEUjNadWRBR1FVSXBq
c2RKdmxwb1FhSURmdUFmUUdIbG9sOUkzMlVrVDVIT0Vrdmc2cUpyQmRHRFl3SHdaQWxvNktpSW9Q
R2VPSFNNTmE4Y2VOR0o0UkVuWEJKNTBtdGc3TUpPa1NhZ2NpSUIwNkNPWERheXBVcmxlR2dnYzRh
QnV0Mzd0eHB6ODNOcFNEVkJLVEpWN1AyQnlKMUpGSEVDMC9TNlhRcHhjWEZPYUZ5SXQ0NG0vcjYr
amZSMGRIb2JENFJyNjFuSEUxUTVrU2FDMU9JR0VoUDNMOS92ekxjQVdMRFBtSmZzYytrNzFGT2N2
V2dPQllSNDB3bVlDRDk0TUdEQ1lKeDByQ3YyR2RpUmRUSmlJSnB6aEVrSG93aDNtNEttUEVQYlcx
dFVlRUFLRDA5WFZGU1VwTGEzOSt2Zi9qdzRYdVR5ZVIwcnN2T3p0YURXZjhMbnZhUzBHZUV4STlt
cnBmQ1dGUEd0RTV4OSs3ZGxEQUJLS3FxcXZwaCsvYnRDNk9pb216VENwanR3T3JWcS8vWjBkR2hj
bnd4OWhuN3ZtclZxaUVDVU04NEdDdVg1aXhrTk5HMnNIRHIxcTJrY0FDNFo4K2VINnVycS84ZUdS
a3BSUXREbVR4NWNzTFpzMmYvWWJGWUpNN2VSUHF1SUdPSjlDVnU5QldpUFQ5dWFXbEpEQU10dEFH
RTdHaWhTQ1Q2QnNETW1UUFR6R1p6dExNM1l0OXhEQXhFTWRjUVdWTzI1Y2gxZFhYSm9RYTRlL2Z1
SHlFL1h5aUVSaldRRlloWmdhSFo1Y29SR1lPY2dlaVZsL1psVHFRWkNtcGY5SXNYTCtUaEJOQlp1
MzM3ZGcvKzI5V0hrREZFa3pGSnlCaEh1ZFpFMng0Skx1bURCeFNIR3FBekU2YXRvYUZoOFBEaHc3
OUdSRVRvWEwwR3g0QmpJV0dPeEZ0TjlBV2lmY1g2K2ZQbjhTSDB3dm5vaFYyWk1BcUVMK3F5c3JK
V0FQZzdnTmE3KzBBeWxraEdFemt6NTY4Mm5kNjlleWNMQmNCZHUzYmxnd1lXdXpOaDBFRDFtalZy
V3NWaThYdUpSRElJRU4zR2ZtUXM3Sll0cHhEdGU4Ynd4Wkp3QmJoMjdWb0UrSnRVS3YwTUFEM09i
MTFkWFJKR0N6azNaenZFdnI0K1NTZ0FlcGdEdlFhSXJiZTNsOVZDRWRlYWFBZXBWcXVEVlJBbGdo
Z1E1MEMzR3ZqMDZWT2ZBR0xUYURSc2dZR1E2eERIWGtlajErdEY0UVN3dkx6Y0o0RFl5RmlFM2dM
MEZhSlBDeDF6NXN4Sm5qVnJWakprQnowUVRneU1GU0NZYi82MmJkczhBbHkzYnAzUEFQMXR2a0Mw
VjE1QmttL3hwSTBRWGtocWEydEw4L0x5c3ZBYU5NcjY2TkdqbnlCTmUrYkJZNDRKNExObnp3SUNF
TWNpOExHcVRPUWpRRnQxVm14c3JOdmxkQmk0YU4rK2ZYTnpjM096YU95R1FKWXVYZnEzNjlldkw3
TllMSzYyRUVRQU8zL3IxcTNGN3VMQVFHcWdYQzVueS9hOEF1a0xSSHQ1VzFKU2t0dE9ZNzZhazVP
VDZRekF2SG56dnI5Mjdab3prS0xLeXNxOHNRQmN2MzU5d0V5WWpJVXR6UXNLUk5QMDZkT043bDRN
Z0tRcWxjcmlDb1FUa0RhQVlNWWxuZ0J1MkxBaG9ITWdHVXZRSU5JQ1N5TjhzYzZ0TnhFS0xaRDhk
N2w3RFFOU1FnRzZpd054RHR5NGNXUEFuUWdaaTJNcEhxY1FjZlhYV0ZCUW9QTGdWQXd3Nkk0elo4
NjhkNlZWS0VWRlJkL1gxZFZ0Z0huUXJRWnlCUkFiR1l0UjhIWGxHS2ZtYkt0U0JZZWhTa3hNZERr
UUdLUUpCdnZwNHNXTHIwK2RPdFh0RHVTTUdUTytDeFZBSEFPT1JmQ2wvSTd6N1FHcWliZ3FvZ056
MUxpRERvTWVnZkNoNS9MbHl6K2ZQbjNhTFVoM0FEZHQyc1JaSEVqR29CTjgyWHYyYXFQS1YwMGNK
YithdHJTMDlLT25lVkVpa1F3QnlHNEVDYWJkN2MwWE5qWTJxamR2M3N4cElFM0dvQTJtSmxvWmlK
cTVjK2QreEFwVmIwQ09WU09EQVJBTFFuRU1nbS9MN1FSY1F6U1RTUmgvdmVHS2lvbytqM2tmQS9M
S2xTczJqUXcxUUd4YnRtekJ2ZzhMdnEyaUhYdE82K2ZtUFc0MVRnS1pVbGhZbURlV0VoTE1Za3dt
MHdSSUYxTWhwY3ZmdTNkdnF1TnJtcHFhMVBERGNBNFFhM0thbTV0L0VmeXhlZitKd1BSNjh6N2l5
SkVqZmkwc0VHMldaR1ptaWlGTWlRZElRZzhhYVFVb1JoQkRhMnZyaUZhcmxlWG41OGRDT0dSN1gz
MTkvU0JrS3ovQk5hY0E0WE90TlRVMTc5UFQwMytIeTg4Q0g2c2YvTkZFQ2c4MUQwdEpFa0FtUTV3
M2E2ejFPRlFqRFFiRGR6RXhNVk1nMkkyRDdFWVAydHlMM3B6cjFaaGx5NVlOd2Z6OEt6ejlyK0NQ
TXVRUllzNldZSmt6QmNtVzFpVU9EdytuTEY2OCtLOWpyUXhEa0xpcFBqbzZHZ01aQzA0UFpneUpR
RFJjQWdUdE16NSsvUGpmQ29VQ1MrdXdCc2V2MHJwQUYza212Mzc5ZWxwWldaa1NUMFI1OHprQTBS
WnJvd1BpY3UyUEtmTEUrbTMweW9NQ1A0czgvVjJacHA3YVFNemhNM1N1RzR2TXNiVFhpOCt4NE5v
aTF3Q3hUK2ZPbmV2Q1BwSjVrSFVrVm44MHlWK0lOQTNVRWJNWUtDa3A2VHh4NGtTM2x5QUZYQVBF
UGkxWnNxU1R6SUZEcE04bVgrYkJRSm96KzJPd1J6QndJM3pTa3lkUE1xcXFxdExDNFFqR2hRc1hQ
dUNQUzBJWmxVTnc3WmNGY0g0WUNPYkkxT3JxNm94UUhnWTZmLzU4SnpIaHNENE01QXdrUFpZMkVi
eDI0b0VEQjVUQkxrZkdNT2JreVpQdDRJWDd5UndZMXNmU0hFR3lCeVFWeEhQSHYzejVNdVhnd1lP
cFhHc2xhdCt4WThlNmk0cUtlb2pwcWwya2RtRjNRTklaU01lanVnZ3pycmEyTnZYbXpadUpIUjBk
QVQxdENnRzdBZkx0L3ZMeThtNWl0aFRldURxcTYraHNSQUxYaDhZbmdHYmFEbzAzTmpiS0J3Y0hm
WEkrY1hGeDVnVUxGbWh3T1FzMDc2UGd5eG5uY1gxbzNKVldzcmN2aUNaQTdRSU9LQTZneHJlM3Q4
dXd1RWlqMFlnY3pSN05WQzZYVzZaT25XcFNLcFZhZ0tZQ2gwR0RaVlowREx4eGZmc0NaN2syaGVu
c1JocVI1RyswMEpMZStrRG9FTmpiOTNpSUdBUmYzMGlEN3BQWWQrN0crNDAwSEVFNm1qbDdPeGV4
d0xkYnVyQjNKd25KTFYyRUlicW43Si9xNWtMQ01MZ3hMMyticXdDMGtFTUlSQmpDTng0aUQ1R0h5
RGNlSWcrUmg4aEQ1QnNQa1ljWW51MS9BZ3dBU0JpYkdETGxPVElBQUFBQVNVVk9SSzVDWUlJPSk7
Ci19Ci0KLS5jb2xvci1waWNrZXItb3B0aW9uIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0g
ICAgd2lkdGg6IDIwMHB4OwotICAgIGNvbG9yOiAjMjYyNjI2OwotICAgIGRpc3BsYXk6IC13ZWJr
aXQtYm94OwotICAgIC13ZWJraXQtYm94LWZsZXg6IDE7Ci0gICAgLXdlYmtpdC1ib3gtYWxpZ246
IGNlbnRlcjsKLSAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7Ci19Ci0KLS5jb2xvci1waWNr
ZXItYnV0dG9uIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgaGVpZ2h0OiA1OHB4Owot
ICAgIHdpZHRoOiAtd2Via2l0LWNhbGMoNTAlIC0gMjhweCk7IC8qIG1pbnVzIHR3byBib3JkZXIg
d2lkdGhzICovCi0gICAgYm9yZGVyLXdpZHRoOiAxNHB4OwotICAgIGJvcmRlci1pbWFnZTogdXJs
KGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQjBBQUFCUkNB
WUFBQUF1Q2EwWUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2Ns
bFBBQUFBMlpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0Jp
WldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJ
RHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RH
czlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4
d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJt
UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ri
bk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVH
MXdUVTA5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5dGJTOGlJSGh0Ykc1
ek9uTjBVbVZtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmMxUjVjR1V2
VW1WemIzVnlZMlZTWldZaklpQjRiV3h1Y3pwNGJYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpi
MjB2ZUdGd0x6RXVNQzhpSUhodGNFMU5Pazl5YVdkcGJtRnNSRzlqZFcxbGJuUkpSRDBpZUcxd0xt
UnBaRG94TWtWQk1EVkdOekE0TWpBMk9ERXhRVUl3T0VZME16QkVNVGMwTmtNNFFTSWdlRzF3VFUw
NlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEZSVFl4UlVNeU1ERTNPRUV4TVVVeVFVWTBRamhG
UkRsQlJVUTJSakZGUkNJZ2VHMXdUVTA2U1c1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwRlJUWXhS
VU14UmpFM09FRXhNVVV5UVVZMFFqaEZSRGxCUlVRMlJqRkZSQ0lnZUcxd09rTnlaV0YwYjNKVWIy
OXNQU0pCWkc5aVpTQlFhRzkwYjNOb2IzQWdRMU0xSUUxaFkybHVkRzl6YUNJK0lEeDRiWEJOVFRw
RVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qQkdNRFpE
TUVKR1JVWXlNRFk0TVRFNU5VWkZSVE0yTVRVNE5EY3hSRVE1SWlCemRGSmxaanBrYjJOMWJXVnVk
RWxFUFNKNGJYQXVaR2xrT2pFeVJVRXdOVVkzTURneU1EWTRNVEZCUWpBNFJqUXpNRVF4TnpRMlF6
aEJJaTgrSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhC
dFpYUmhQaUE4UDNod1lXTnJaWFFnWlc1a1BTSnlJajgrcXRPSDRnQUFBZE5KUkVGVWVOcnNXc3RL
dzBBVXpXaEpMQzFkU0NxQzJJaUNVc2lpR3JweW0xL29SL1NMK2grRmZrSlg2YVpiUVNHNDhGV1ZC
aVhTMm83M1lBc2hKRTBqYWwvM3dnbk16SDNNZmN5MDRVWklLWlgvcGkxbEFjUkcxODlvSm01QkNC
RWM3aEZ5aEh5TXpDZmhqZkJPZUp4T3hwME1FYnZ3YlZRbEhCSUtLUnp4Q0xlRVFaenVwUENXWU5D
eUxOVnhITVB6dkROU1pJYUJlYXlEYjdMQm8xbEtaM21La0I3WXRyM1RiRGFQczluc0U0MWY0RUVF
TzR6dCtyNWZyTlZxTjYxVzY0UEdkNlQ3UHEzUkUreTYwK25BQStUcllZN1FGcnZkYnFGU3FiZ0lN
K20rVGh0ZUZJMWltaVlLNkhuT2ZMNld5K1Y4VUQ1VjlVNDNwR2thS21vNHA5R2hxcXFKRGkzWE9R
MlJYTjhiS2VSbEdrOGxlOHJoNWZDdS9vM0VPZVdjcm01T3VYbzM4OExuSThQaDVYUEsxY3ZWeXpu
bE4zRTJ1bW1YQTFjdi8zUGc5MU0rTXZ4N3lvVzBHRS9IZVBpK1AwNVJjQm5pbDBINXRFYlJYMVBh
N1RhRTlZREhzNkFUL3lnb0h4MExLU05CdEU4NHR5enJvdC92WDlKY2lhQVJSQVF3WHdJZitDRUgr
VGpkU1UzYlUwTE9NQXpSYURUVWFyVXFkRjBYWWQ1ZXJ5Y2R4NUgxZW4zZ3VpNFVvbU44dFZTZDRp
U2pVMElETnovQmRnVDdhSkpENE9jOThiOGsvcmlDamY0S2ZRa3dBQTlNVnNpRXZvQU5BQUFBQUVs
RlRrU3VRbUNDKSAxNCAxNCAxNCAxNCBmaWxsIHN0cmV0Y2g7Ci0gICAgLXdlYmtpdC10cmFuc2l0
aW9uLXByb3BlcnR5OiAtd2Via2l0LXRyYW5zZm9ybTsKLSAgICAtd2Via2l0LXRyYW5zaXRpb24t
ZHVyYXRpb246IDIwMG1zOwotfQotCi0uY29sb3ItcGlja2VyLWhpZ2hsaWdodCB7Ci0gICAgbWFy
Z2luOiAtMTRweDsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBoZWlnaHQ6IDEwMCU7Ci0gICAgYm9y
ZGVyLXdpZHRoOiAxNHB4OwotICAgIGJvcmRlci1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jh
c2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQjBBQUFCUkNBWUFBQUF1Q2EwWUFBQUFHWFJG
V0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBMlpwVkZoMFdFMU1P
bU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpE
MGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcx
c2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JE
YjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dN
Q0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xu
Y3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhO
amNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdUVTA5SW1oMGRIQTZMeTl1
Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5dGJTOGlJSGh0Ykc1ek9uTjBVbVZtUFNKb2RIUndP
aTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmMxUjVjR1V2VW1WemIzVnlZMlZTWldZaklp
QjRiV3h1Y3pwNGJYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpSUho
dGNFMU5Pazl5YVdkcGJtRnNSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG94TWtWQk1EVkdOekE0
TWpBMk9ERXhRVUl3T0VZME16QkVNVGMwTmtNNFFTSWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGll
RzF3TG1ScFpEcEZSVFl4UlVNeU5ERTNPRUV4TVVVeVFVWTBRamhGUkRsQlJVUTJSakZGUkNJZ2VH
MXdUVTA2U1c1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwRlJUWXhSVU15TXpFM09FRXhNVVV5UVVZ
MFFqaEZSRGxCUlVRMlJqRkZSQ0lnZUcxd09rTnlaV0YwYjNKVWIyOXNQU0pCWkc5aVpTQlFhRzkw
YjNOb2IzQWdRMU0xSUUxaFkybHVkRzl6YUNJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpk
RkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qQkdNRFpETUVKR1JVWXlNRFk0TVRFNU5V
WkZSVE0yTVRVNE5EY3hSRVE1SWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2pF
eVJVRXdOVVkzTURneU1EWTRNVEZCUWpBNFJqUXpNRVF4TnpRMlF6aEJJaTgrSUR3dmNtUm1Pa1Js
YzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNod1lXTnJa
WFFnWlc1a1BTSnlJajgrYmt4MTBnQUFBTGhKUkVGVWVOcnMyakVMZ3pBUWhtRlBwWm5hcWYvL0Z6
cTVWV3JTcjVDaGc5WWNCa1Y0QTRmTGtTZTVNeTdSVWtyTjBhTnRUaGlnb05kRis1SWtNK3YwZUNo
dWltNGhaVlpNaWxIbmZ0NmNiK3ZqSVBDN3NHZGhWYUppMEp6dnZlVzlPOXJRNW9yczdtbHd0aXpV
UUwwdm0zRmtRRUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQnI0Tkc1NXlwQmpvNTBWY05k
SFRzTnViOHY4TksvblA0dVQ4Tkt3dU5lWWQxN2s4NU1xQ2dwNk1mQVFZQVJWWW9sVmphY2Z3QUFB
QUFTVVZPUks1Q1lJST0pIDE0IDE0IDE0IDE0IGZpbGwgc3RyZXRjaDsKLX0KLQotaW5wdXQgewot
ICAgIGZvbnQtc2l6ZTogNDBweDsKLSAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwotfQot
Ci0uY29sb3ItcGlja2VyLXNoYXJwIHsKLSAgICBmb250LXNpemU6IDQwcHg7Ci0gICAgLXdlYmtp
dC1tYXJnaW4tc3RhcnQ6IDIwcHg7Ci19Ci0KLS5jb2xvci1waWNrZXItb2ZmIHsKLSAgICBkaXNw
bGF5OiBub25lICFpbXBvcnRhbnQ7Ci0gICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7
Ci19Ci0KLS5jb2xvci1waWNrZXItaW5hY3RpdmUtZm9udCB7Ci0gICAgY29sb3I6ICM1NTU1NTU7
Ci19Ci0KLS5jb2xvci1waWNrZXItcm93IHsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAg
ICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOwotICAgIG1hcmdpbi10b3A6IC01cHg7Ci19Ci0K
LS5jb2xvci1waWNrZXItc3dpdGNoZXIgewotICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwotfQot
Ci0uY29sb3ItcGlja2VyLWNvbnRlbnQgewotICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwotICAg
IC13ZWJraXQtYm94LWZsZXg6IDE7Ci0gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsK
LX0KLQotLmNvbG9yLXBpY2tlci1oZXgtc3R5bGUgewotICAgIGhlaWdodDogODVweDsKLSAgICBj
b2xvcjogIzI2MjYyNjsKLSAgICBmb250LXNpemU6IDQwcHg7Ci0gICAgZGlzcGxheTogYmxvY2s7
Ci0gICAgLXdlYmtpdC1ib3gtZmxleDogMTsKLSAgICAtd2Via2l0LXBhZGRpbmctc3RhcnQ6IDIw
cHg7Ci0gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDIwcHg7Ci0gICAgLXdlYmtpdC1tYXJnaW4t
ZW5kOiAwOyAvKiBvdmVycmlkZSBkZWZhdWx0IHN0eWxlc2hlZXQgbWFyZ2luICovCi19Ci0KLS5j
b2xvci1waWNrZXItaW5wdXQgewotICAgIG1hcmdpbjogNDBweCAyNXB4IDIwcHggMjVweDsKLSAg
ICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOwot
fQotCi0uY29sb3ItcGlja2VyLXdlbGwgewotICAgIG1hcmdpbjogMjBweDsKLSAgICB3aWR0aDog
MTI2cHg7Ci0gICAgaGVpZ2h0OiAxMjZweDsKLSAgICBib3JkZXI6IDJweCAjYWFhYWFhIHNvbGlk
OwotICAgIGJvcmRlci1yYWRpdXM6IDZweDsKLSAgICBib3gtc2hhZG93OiBpbnNldCAjZmVmZWZl
IDAgMCAwIDNweDsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAtd2Via2l0LWJveC1h
bGlnbjogY2VudGVyOwotICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKLX0KLQotLmNvbG9y
LXBpY2tlci1pbnB1dCAuY29sb3ItcGlja2VyLXdlbGwgewotICAgIG1hcmdpbjogMDsKLX0KLQot
LmNvbG9yLXBpY2tlci1zbGlkZXIgewotICAgIG1hcmdpbjogMjBweCAyNXB4OwotICAgIGRpc3Bs
YXk6IC13ZWJraXQtYm94OwotICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7Ci19Ci0KLS5j
b2xvci1waWNrZXItc2xpZGVyLW91dHB1dCB7Ci0gICAgd2lkdGg6IDEwMXB4OwotICAgIGhlaWdo
dDogODVweDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgLXdlYmtpdC1tYXJnaW4tc3Rh
cnQ6IDIwcHg7Ci19Ci0KLS5jb2xvci1waWNrZXItcmFuZ2UgewotICAgIGRpc3BsYXk6IGJsb2Nr
OwotICAgIC13ZWJraXQtYm94LWZsZXg6IDE7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25l
ICFpbXBvcnRhbnQ7Ci0gICAgaGVpZ2h0OiAxNHB4OwotICAgIGJvcmRlcjogMnB4IHNvbGlkICNh
YWFhYWE7Ci0gICAgYm9yZGVyLXJhZGl1czogN3B4OwotfQotCi0uY29sb3ItcGlja2VyLXJhbmdl
Ojotd2Via2l0LXNsaWRlci10aHVtYiB7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lICFp
bXBvcnRhbnQ7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0
LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEd0FBQUE5Q0FZQUFBRHhvQXJYQUFBQUdYUkZXSFJU
YjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZi
UzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6
Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5N
NmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0ps
SURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJ
Q0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxt
OXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21s
d2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2
WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmti
MkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5
NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0Rw
RGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdp
SUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2T1RKR1EwWTVNME5DTnpreE1URkZN
VGc1T1RGRlJUTTNORVpGTVVOQk9ERWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FX
UTZPVEpHUTBZNU0wUkNOemt4TVRGRk1UZzVPVEZGUlRNM05FWkZNVU5CT0RFaVBpQThlRzF3VFUw
NlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzVNa1pE
UmprelFVSTNPVEV4TVVVeE9EazVNVVZGTXpjMFJrVXhRMEU0TVNJZ2MzUlNaV1k2Wkc5amRXMWxi
blJKUkQwaWVHMXdMbVJwWkRvNU1rWkRSamt6UWtJM09URXhNVVV4T0RrNU1VVkZNemMwUmtVeFEw
RTRNU0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcx
d2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGlWcnJDa0FBQWo5U1VSQlZIamE1SnQ3
VE5SWEZzZC9Nd3dQNXdFelRNY3BWbXNSRmx5Z1dodFlhMzNFWUFSV1kweklHcE45dURiYVJxTkJZ
cUxySDVyNHA3Vi9tTGhhdFJDMXRtdi9jSU5FcmFzMUdJUFB4ZTFxMmNxaTYwQmdkUUY1VG5uSU1N
ek1udS9NdWZoajhodkZVWno1Mlp1Y0RBd3o5OTdQNzV4Nzdqbm5YaVRwWjlZMDQ5eS9uc1JPa2p6
R3ozZVJ0SkVNUkMyd3grTVo5WHRNVE14YjlQS21yRytOZ3NpYlQwSEUrNjNVLzhPbmpVL2p2WHBn
R2pTT2ZueFhCcVNGTEY2ODJMcDI3ZHIzVTFOVDA1S1RrMU1zRnNzNytJNVdxOVhoMWV2MUR1UFY2
WFEyZDNSMFBHeHNiSFNVbDVmLzg4S0ZDNTM0TTR0NENQK2lzWVlpRFF5d1dUTEltSTBiTjA1YnRX
cFZRV1ptWnI3UmFKd2NUcWQ5ZlgwUDd0NjllL0hZc1dQZjdkdTNyd0hQVlFaL2k4QzlrUURPSnBr
Z1FJOGVQYnBneVpJbHY3ZGFyVGxLSC9iNWZOQ284bFBUYWlXTlJua3FuWjJkUDU0OWUvYnIxYXRY
Vjh2QUh4UDBuWENBdzJrdzMxeVNQSkk1Ky9mdkwrM3U3bTZnQ2ZqazRuYTdmUzZYS3l6QmQ0UDd3
eGdZQzJQeTJMazhsM0Z0Smg1bzlvSUZDNVk0SEk0cSthU0doNGZEaGd3bDZGTStCc2JFMkpnRHo4
WDBQQURQWXcvd3ZHa2t1aTFidG1RZE9uUm92ODFtR3pGZm1saElrMzJSaGo0aE1IczBzOW1jdW1M
RmlnSWE3NGRyMTY1aEc3T3ltZmU5VE9CSkpIQkFPbHFyaTBwS1NqNk5qNDlQRWw1NlBFQ1Z3T0VI
QUI0YkcydFl1SEJoWVhwNitvUEt5c29tbVpaN1g0YlRlb3VCWXk5ZnZ2elJuRGx6MW9vLzBGcUxT
TFJFd0NNL1g3OSt2WHorL1BsSE1CMlMvNUU4ZkJIZ1JKSk1qRUVkZjVLWGwvZEg0WEZod3BGc09w
MXV4TFBmdkhuelMxTEVGd3g5bCtTbmNFdzZqcmNlbUhGQlVWRlJxVEN0U01PS2VmZzFSdENUSmsx
Nkx5MHQ3YjlrM28wY3huYndGdlpjd0Fnb2RKczNiODdldEduVExsbzdNY0k1UlV1RHBZbDlPRHM3
KzhPQmdZRWFza1RBMnRpOHgyelNnSTFidEdqUm14VVZGV1Y2dlI0ZFNFTkRRMUdaQWNYRkJiWmpB
bTR2TGk3K3VLcXFxcFYrZFpIY0hnc3d2ajJUSko1aTI4OG1UNTc4UVRUREJrTTNOemRmSS9QK0V3
UC9nS2sveTZUZmh5a2ZQSGd3bjF6L0tnRUw4NG5taGpVTjgwNUtTcHBDU21vNGMrWU10cXVKd2Fh
dFVjaGZjeWpvTnpRMU5YMWxNcG13SlVrVThhZ2l1YWZZSUxBWjkvWStuRHAxNmg4b0NlbW5YMytV
NTlkYWhZUkFSekZydnRwZzVYUEYzTUVBRm1ZS3FlRmZJUU5xYTJzN1FybHJLc3hZVGNCQ3k5aXFL
TmxvdE52dEh5R3pJcWxSV3NPL0lESHUyTEhqdllLQ2d0L2lqY0hCUWRYVnJMQnRJaWhKU0Vpd0VQ
ajMxZFhWclp6R2RnV2J0Qmttc0h6NThzTFhwV0RITERwbUMwUm9RZFVMM2JScDB6NVFpMmNPMVRC
M2JGUE1vcE1yVnZ4Z3djOXIxcXhKTlJnTWJ3alRBTEFhUlVTRFlGbTNibDBhY3liTGdaSHJ4aFFX
RnM2VVhyT1duNS8vTHZzcXU5eWtqWGlUZ3ZBcDhpZWw1b1pBaEJPTEtReHNsQVA3eTZvcEtTbnZ5
TTFaelEwTXlKdVpTU3VzV1N2Ymo3Vms4elo1NnFWMkRmTTZ0akduUnE1aFB6RHRYd21pblBvNm1E
UVl3S1FFN0ljbVY2NlhmL2gxMERBemFaVDI0VkdKdGRxQlE4MWZHN1JodTBUWlJPMU5NQWdtUlEy
NzNlNUI4V1RVcm1IQkFLWlF3RDZuMC9tSUV1Z1VKTktSS3NHK3JDWnFYV0NTbmh6QmpwaTAvMGl5
cTZ1cnhmOFVkRHJWYTFjd01OUEl1Yk1BUm1YQTA5RFEwQVF6Z1Ayck5ZNFdJaGpBSkFWS3R2MXlZ
T1NNM2t1WEx0VUZlMnExaW1qTTVHWEdrZjBKNEhOSkV0dmIyLytpMSt1VEJnWUdWTHVPRVZJU0E4
cTJUcHZOOWpzcGNCSnhGZUR5Tll5Y3l1MXdPRzc1cTNuMEJiVnFGM05IWXhZM3MvbUNuUmFld3ZE
cDA2Y3ZxdDJjaFlDRllYOFN3SnFnTFFxbjYrYVdscFl5azhsa1I4YlIxOWVuS25NMkdvMStEOTNi
Mjl0R21kTEg5RllQeVhVR0h4VnBlZmhOVjFWVjFiZkN0YXROcTJJN1lnWVhNM2xDbFdsUnFjK3lX
Q3h2MU5mWGYwRnJ3WUlnbkRadlZXaVhnaWIvZ1RrNXErN3AwNmQvMHQzZGpZTTFlT2xIb1FyeCtN
QVFmYkQzeElrVHgvMGZlTW9ObTJpTG5jVzFDTXdkREZMZ1hLbmphWVY0VWRCRGJTdnAzcjE3dTJr
ZFpIREVFdFhBeWNtQjI0M2tmKzVsWkdSc1JWUXBCUTdUdWtObVM5eWNiUHNEVzdkdTNVZlp4bU41
aDlGcXlwejh1TFp2My82NUZEaExjakhMNkJoYktjbmdxQ1NGMW5FL0pkQXRjK2ZPL1pCTVJvT0FQ
TnFPVFhHMElnN1JqaDgvWHI1NzkrNGJIRWIrWFZLNEJSRHFCZ0Nnc1FhczFkWFZqM0p5Y255Wm1a
a3pBSXl0S3ZoQ2FhUWFpdTNZaHRCcWFtcStXN2x5NVRkUzRQclNxQlBEWjYxaHVibWpYdjFMaEp3
RVhqSnIxcXlGb3JKUCsxeEVZU2xPR0RrRXI2dXJ1ekY3OXV6UE9NREFlWEE5eDgvU1dEVXN0TnpQ
OWR5NHlzcktPN2dDTVhIaXhMZWg2UWtUSnNEOVJ3VFdhcldPNUx1MXRiVlhseTVkdW5kd2NOREpE
dXBPS05obkFRdG91SFU3ZFRoOCtQRGhXMWxaV2NOazN0bFkwNGhaWCtVSkk3WWV3SEkyNXoxMTZ0
UTN5NVl0TzhLd2NLNy9lQnJzV0lCRncyVXYzSGFMT1hueTVIM0tSaDdrNXViT3BLZ21EcHBHZGpM
ZTRQREVZcjI2WEs3K1BYdjIvTG0wdFBROCt4b281WHZweVJYakZ3YVdPRm9CbFluV2N3dDU4TnZ6
NXMzTG9FbFlZRjdRTnNLNmwzMkFucGlZNkYrdndvUmJXMXNkR3pacytMU3NyT3cyT3lpc1Y4ZFlZ
Si9sdEVJNU1nUW1NNlRBSWJQaHdJRUR2eTR1THY1TlFrTENxRnV0UFQwOVlkL3B3b016bTgyajNp
TUw2cTJvcVBqcit2WHIvOGErQlNaY3krdDJ6RWNsNGNTTVdyWU1uTDJpcW0rdzIrMUp1M2J0V2x4
WVdMalVZRENZZzc4QWNKZzhDZ29LL3lQaFh4TDB3QlJyYWYzOS9UM256NS8vZHR1MmJSZmEydHA2
ZUx1QnBkMlFubHdZbDhZVFdId1AwRGhMbnM3ZzBIakN6cDA3ODRxS2l1YWxwNmZQSUpENGNEcEh4
SFQvL3YzYWMrZk9YYUgrYmpMZ1kzNnQ1elhyb2FUR0o2S3M4UVlPMWpiT1huRkhCTmRjNDFuaVNr
cEtzbWlkWjVFRjJDZ21mNXZNMUVwUmtVSGVBUndRbVg4bnhjRE5wTUgySzFldTFPM2R1N2VPQTM4
WEM2b1cvNUVDLytJRFVHOXdXUG1xZ0VVZlF1TjZEbFFNWEZDSVpkSHgzN1hTNkgvbEVlVlRyeXdm
ZDh2S01saXIvMll6OW5EdDNLY1VSNzh5WUhtdVRJTnJaRnFIaUx2V0FsZ1RBdGduQXhaM25qMWlq
UVpEUmhSNERKclhCcjJHQ25DOFFhL3FQK3VKaHZaL0FRWUFlR25aZkxyRDYyY0FBQUFBU1VWT1JL
NUNZSUk9KTsKLSAgICBoZWlnaHQ6NjFweDsKLSAgICB3aWR0aDo2MHB4OwotfQotCi0uY29sb3It
cGlja2VyLXJhbmdlOjotd2Via2l0LXNsaWRlci10aHVtYjphY3RpdmUgewotICAgIGJhY2tncm91
bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVn
QUFBRHdBQUFBOUNBWUFBQUR4b0FyWEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldG
blpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcv
ZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZ
M3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlT
OGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRj
M055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVln
ZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmta
aTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlp
SWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlC
NGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0
THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVN
Qzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdllt
VWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VR
OUluaHRjQzVwYVdRNk9USkdRMFk1TXpoQ056a3hNVEZGTVRnNU9URkZSVE0zTkVaRk1VTkJPREVp
SUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2T1RKR1EwWTVNemxDTnpreE1URkZN
VGc1T1RGRlJUTTNORVpGTVVOQk9ERWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pX
WTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG81TWtaRFJqa3pOa0kzT1RFeE1VVXhPRGs1TVVW
Rk16YzBSa1V4UTBFNE1TSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzVNa1pE
Umprek4wSTNPVEV4TVVVeE9EazVNVVZGTXpjMFJrVXhRMEU0TVNJdlBpQThMM0prWmpwRVpYTmpj
bWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElH
VnVaRDBpY2lJL1BxeEZ1VTRBQUFqSlNVUkJWSGphNUpzTGJGUG5GY2ZQOWJWako3R2R4SEhTSkl1
WFpoQWVJVUFlaEdWcGlFWTBHSW9pVVNpMFdzbzIwWTFWazFwcG10WUNtcVoxMnRoZ0wwMGFVaCtE
dGFoZFZrb3BLb0pPRkpZV0NnRVMwcVI1RUVoNDVtRWI1NFh0Skk1OWZlL2RkNXhqWkt5OFNVanNm
ZWdmTzNHNDMvM2Q4NTN6bmZOOVh3RCt6eG8zeTlkWE14bVk5RXpSVE5xZ2ZtVjZIV1FhWUhJdzlU
RzU1eTN3bjFyc0QzMy95dEtZQlBhU3doUlBnRnhBUDl3b2Zjb0I0UDczQ04vTFpHYlg3eDZ2Zjli
ZmxPNVhPUk5QalhXcVlpOFpCQm5IcEVDWlZ1VEY1Vy9hdGl3eFBTTk5HMjlNMUJvU3Z1YWo1bmxm
djdJb2VuM203ZSsxT0h0c1Z0dnR0cnMxeDk1cjdtaW9WZEtvU0dQWDdpZjROZ1l2ekxXRkVXd1pV
eElOV1VWTzJWYlQ2aTAvTEU3SlhQRXRQbHFmM09NV3dTSElNQ1JLNEJUa2g4YXh2M09ka29Nb3BR
TDBLZzZNYWg3RVFZZkZmTFhoWXZXSGg4N1ZuVGpTd1g1Rm9tRnZaV3IrWTR0ZDh0L0FxMU8wOEtN
QXA1UFFFbnpaemozNTJhWFBiRklZbmxqVU9TU0MyU1hDZ0ZlYTFvVzFERDRsa29mVUtCNmt2bnV0
OVo4Y1BYWmkzeTlyMkVjaStmbHRCbjM3Y1FIajhNMG1QK1hYdmJ3N3U3Qjh4M2FuSmlhMXpTbEFu
MGVhMFNCamlGQkFoazRGdW1GN1oxWEZQOTQrL2ZjLzFCTzRtUW5mQzdNSkhNV1V5MlJNWHBJVlYv
N25nejlXcEM0c2JHU3U1UkFrbU0ybVZ5bGdPUXNWVXVlTnFvcGYvT2lBNVZvVCtuWVAwNWRNUTVP
OURqK1ZoODFVd0JTN2F2TzJqT2YrOHM1dmJrWVlGemN4V0xjb3ovcjhpWDIwTTFlUjlmR205VnUr
VnpUVWEyc3h0elRnOUpYTWhQQ3VtUVEyTWozRkZGbTI4L2VGQlQvZHRldVNrOVBOOVBDZFRNT1Ja
UEVxb3RhczIxQWNHMmV3dGw3NHI0MzlPSlVpK2RCTURHbWNWd3R4Q3R2KzVwR3QrdnlTNTJyNzNP
Q1ZZVTRiQyt5UVoxQ0RvNmJ5OE5zdmJqM0Nmb1JUWEJWVDk2TllHS2VhYnpKcFhqaHdyQnhXRm0r
dHUrOEJDZWErNFQxMHNwa2dJVzFCVm01Qm9iTHUrT0ZteWdPczR3VXlmb0pvbkkrSlJObnV2VVdh
NHFlM1gzVUlNTjlhdDF1Q2VGUDZVbE5DdkxuMS9Ca3JUWk1XZWlaVEFsNkZDVVh1cHZLTVpUdDI3
ZnpLN3VWaG5qYUV6c3pKelJON3pGOVpyalc2YUdSMlRRVVkwOFFGcVZtNUNhVjdEL3k2MnNscEpa
amZ6ZXFXK1RYZkxzbnR2SHkyeW1HejhPVFRmWk1KV2ppVTF6TEZ2SFN5ZG5lOU9qbG5TSlFoRkZv
VXowSDJzTGwyZjltcWZleGJyR28rQy9ibjBTeThFb2Z5K3ArL1ZtQmZXYko1THFhZTZUWk0xVVZ0
YkVwNm5MYjk1c1hQYldROGEzRHlIMXkvcHFuVW1naFQyYmJuelRqUnM0dUVrcnJZUGVPOUl3T3lF
Tk9ZRnNiS3g3amgxVDFyek9uNUpXNUpobEJzVGs2dHpVd3lXTnJPbjJrbnQ3MDNsb1V4bzFJYTF6
NjkwY0VxSFRtZ0lnOGw0YjBqQTlYN3hyRXNqT25ad3RYbE96SWR1UnMydWxpZ0NsVmdsRXVwaVVu
eU9wcTZHcjkwb3RHcHJIekl3bGpFODJuck54ZjNDOHgzUS93Zk1pQUxHVFZwdENVZTMzQWVURnFV
TFVzUUZnMVpnb2UxMzhJNnpFNHkxMjgwV1RtTlFhSzhMTlNGTEZtbHo2UlI1cVVQQk1ha1c1RmF1
RzdKSUN1RFFtMHFHa3ZJa3J4NjdTTGlOQVFPYWJTd1FrcElUWllodkpyTW1BaFlGd2lNSzJHOGFF
Z3lTV0ZHakV3VXVHSUNnVFU0UVErcHRRWVp3b3NZbVNqNTBBUUNxM3pBb0ZTSG00V1JpWUJWZ2ND
WWR5cTh5b2pJY1BOaFpDSWZqZ2llaHdFTEk1a1BMK0RnWXM4UExQcStDQjYzcEZCcHdpcG9NYVpB
Umord3Iwam1SY0h0RGJNaGpVeUJqTW9IdnMyU0UzbmdmcThVR1pNWVZ2TXdZNkxFYXlndzB4cjBo
V3BIankyVUs2VFJoRXlCakg0TDIzMFd0dHpwa3I2UkYxNlpGbU1pQzlzRExZeXJlK0pRL1JkdDRX
WmhaS0tBMVJjSWpQVHV6dE1mdFV1dVFXZTRGQS9JZ2t3d2NtYkVIamlrOFdIZ25veGUwZG5hTEM3
SUxnaUxDTTFZYUgyNm14Z2ZXRmltN1FtdjR0TEppK0V5bkpHRmdDM0J3TmpROUE3cjBiZWFwUUY3
VDZqRElnT3kwRnBXKzJpcmx1allHTUlGN3NycFNpd2lRbG5JUU1tR3paOWxCUVBqZzdtQjZhZno0
R3RubWNQYlE5YTY3TjZSQVZtSVNSNXJJUjZqbVY0U1BGcDFuTkVEQzNOV2htUzBPdjNlQjhPWFA3
M08zdDJaQ0ZpbThHM3kxSjN0VnExOU5ndWk5WEVobFdoMGQ5MGUrTzBQS3NoM01XZ05UN1NaSnRC
K2pFRmx2ZGtCQmFVRlFDZm41bi94SzNqazExOTVYZWk2aFg2TEZ1NEl0TzVZd1BnTGVCeklJRmp1
Z01McnNjSHlvandaT0c3ZSsrNnBkOTkzbmZobkhYdmJ5VlFkR0t6R0EvWkRZeXIyaEhpOTFxbElT
cE80dEtWTDVyTnhwYWFxTDl4L2UvazRiYXVjaHpHT01ZMjN2aUVROU5mRjZsUHQzSW9pSXhlZmtq
b3YvZlpXWTUzblYxdmVvUkx3RWsxRjhsU0JaWHBLcUVUdThuOXV3TExDQkloUFNwbFhzRzMxVjhU
ZmJUc2tDeDYwTEo3S3V3VXc5a0dqaVZhdy9GRTdrbDB3V3FwOHZ4a1NUVjQydkJjeGwrYm1sbFNX
cEhNZkhmZnVmZUZEZ3NYcHAyRTgyTWtBKzV1RndydFJydm4wTGdnZUs3ZDRWU2J3U3RYY3JNd051
NlREZnowa3Zidm5ISXdjSnNlVHRvMEVLODhFTURZOHo0am5KZUxsNjFmNnVWc05WN25NZ25TSTBz
VThWdGp1cm5aNS84L2VrTTRlYmFIWjVIT0t5aFBDVGhYWTc5TjRiRGRhdm5kWGxFNGVySVlZd3lD
a1pqd0pTbVhFcklLNlhZTnk1YjgvRnZkOHY0TDFiYU9DNEFJWll0SWJ2TlB4UXdVOXFCd1lPYzhW
emVrTU9uaCtaeEZYVUZvQ2tWcjlqSUs2Qmh6eXBVOHE0Vi83enN2T1BnZEY0bFlZT1NzdFRnVjJ1
c0QrLzRmUW1IWXV4MVFVUnZadTFMRHBwUlhjNnUvbWcybnhFbENxcG1kMWxqRkJ4L1ZyY3ZXcEdq
aTJ2NEZ5L0dIS25CckpxdUtMTlQzeW0vbEdlQnpBd2RiR0RTczhBWVFuYjNXMHJhR0M3NVJuY0Zs
UExZUzR4SGpBYlV0dHJBRWlOSkhCQVFnRzd2ZEJkNmNGK20yOWN0T0ZHM0Ntb28zeUFBOGxFcmhp
MGV4ZmUyT2dENno2dUlIOTEvQmJIR0dlaEpGRDIwYXl1cEkrNCtrQkJmNHB6NE9za0lhblNDc1V3
eFNRTEZUeHVPZ3orU2MxUFE4RnByZW1DUHpJUlFIZGdPK21XZWRlc3NRMUFrd2c0ZDh2eGNMSW54
Q29nb0FGOHN2N05NVjBrL3dQUUFxR2ZGVHJ6RmJ6VzFJUjlEcldEQ0FGdlliYlJ1YmN0UDhKTUFE
R3JnUDlHQ0ZJMEFBQUFBQkpSVTVFcmtKZ2dnPT0pOwotfQotCi0ucmVkLXJhbmdlci1iZyB7Ci0g
ICAgYmFja2dyb3VuZDogI2ZmMWUxZTsKLX0KLQotLmdyZWVuLXJhbmdlci1iZyB7Ci0gICAgYmFj
a2dyb3VuZDogIzI0ZmYyNDsKLX0KLQotLmJsdWUtcmFuZ2VyLWJnIHsKLSAgICBiYWNrZ3JvdW5k
OiAjMjEyMWZmOwotfQotCi1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChoZWlnaHQ6IDc2OHB4KSB7
Ci0gICAgLmNvbG9yLXBpY2tlci1jb250ZW50IHsKLSAgICAgICAgbWF4LWhlaWdodDogNDc1cHg7
Ci0gICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKLSAgICB9Ci19Ci0KLUBtZWRpYSBvbmx5IHNj
cmVlbiBhbmQgKGhlaWdodDogNzIwcHgpIHsKLSAgICAuY29sb3ItcGlja2VyLWNvbnRlbnQgewot
ICAgICAgICBtYXgtaGVpZ2h0OiA0NzBweDsKLSAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwot
ICAgIH0KLQotICAgIC5jb2xvci1waWNrZXItd2VsbCB7Ci0gICAgICAgIG1hcmdpbjogMTBweDsK
LSAgICAgICAgd2lkdGg6IDEwNnB4OwotICAgICAgICBoZWlnaHQ6IDEwNnB4OwotICAgIH0KLX0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2JlcnJ5L2NvbG9yQ29udHJvbEJs
YWNrQmVycnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2JsYWNr
YmVycnkvY29sb3JDb250cm9sQmxhY2tCZXJyeS5qcwkocmV2aXNpb24gMTYxNTk2KQorKysgU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2JsYWNrYmVycnkvY29sb3JDb250cm9sQmxhY2tCZXJyeS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMSwzNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQsIDIwMTIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
Ki8KLQotKGZ1bmN0aW9uICgpewotdmFyIF9kcmFnU3RhcnRQb2ludCwKLSAgICBfZHJhZ0RlbHRh
ID0gMCwKLSAgICBDT0xPUl9XRUxMX1dJRFRIID0gKHNjcmVlbi53aWR0aCA9PT0gNzIwICYmIHNj
cmVlbi5oZWlnaHQgPT09IDcyMCkgPyAxMzAgOiAxNzAsIC8vIGtlZXAgaW4gc3luYyB3aXRoIGNv
bG9yQ29udHJvbEJsYWNrQmVycnkuY3NzCi0gICAgTUFSR0lOX09GRlNFVCA9IDE0OwotCi12YXIg
c2V0Q29sb3JXZWxsQ29sb3IgPSBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnY29sb3ItcGlja2VyLWN1cnJlbnQnKS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3Ig
PSAnIycgKyB2YWx1ZTsKLX07Ci0KLXZhciBoZXhUb1IgPSBmdW5jdGlvbiAoaCkge3JldHVybiBw
YXJzZUludChoLnN1YnN0cmluZygwLCAyKSwgMTYpO307Ci0KLXZhciBoZXhUb0cgPSBmdW5jdGlv
biAoaCkge3JldHVybiBwYXJzZUludChoLnN1YnN0cmluZygyLCA0KSwgMTYpO307Ci0KLXZhciBo
ZXhUb0IgPSBmdW5jdGlvbiAoaCkge3JldHVybiBwYXJzZUludChoLnN1YnN0cmluZyg0LCA2KSwg
MTYpO307Ci0KLXZhciBjdXRIZXggPSBmdW5jdGlvbiAoaCkge3JldHVybiAoaC5jaGFyQXQoMCkg
PT09ICcjJykgPyBoLnN1YnN0cmluZygxLCA3KSA6IGg7fTsKLQotdmFyIHRvSGV4ID0gZnVuY3Rp
b24gKG4pIHsKLSAgICBuID0gcGFyc2VJbnQobiwgMTApOwotICAgIGlmIChpc05hTihuKSkgewot
ICAgICAgICByZXR1cm4gJzAwJzsKLSAgICB9Ci0gICAgbiA9IE1hdGgubWF4KDAsIE1hdGgubWlu
KG4sIDI1NSkpOwotICAgIHJldHVybiAnMDEyMzQ1Njc4OUFCQ0RFRicuY2hhckF0KChuIC0gbiAl
IDE2ICkgLyAxNikgKyAnMDEyMzQ1Njc4OUFCQ0RFRicuY2hhckF0KG4gJSAxNik7Ci19OwotCi12
YXIgcmdiVG9IZXggPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGNvbG9yLAotICAgICAgICByZWQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVkLXJhbmdlJyksCi0gICAgICAgIGdyZWVuID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dyZWVuLXJhbmdlJyksCi0gICAgICAgIGJsdWUgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmx1ZS1yYW5nZScpOwotCi0gICAgcmV0dXJuIGNvbG9y
ID0gdG9IZXgocmVkLnZhbHVlKSArIHRvSGV4KGdyZWVuLnZhbHVlKSArIHRvSGV4KGJsdWUudmFs
dWUpOwotfTsKLQotdmFyIHN3YXRjaFVwZGF0ZUNvbG9yID0gZnVuY3Rpb24gKGl0ZW0sIGNoZWNr
TWFyaykgewotICAgIHVwZGF0ZUhleChpdGVtLm15Y29sb3IpOwotICAgIHNldENvbG9yV2VsbENv
bG9yKGl0ZW0ubXljb2xvcik7Ci0gICAgaXRlbS5hcHBlbmRDaGlsZChjaGVja01hcmspOwotICAg
IHZhciBjaGFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpOwotICAgIGNo
YW5nZS5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpOwotICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdjb2xvci1waWNrZXItaGV4LWlucHV0JykuZGlzcGF0Y2hFdmVudChjaGFuZ2Up
OwotICAgIG9rKCk7Ci19OwotCi12YXIgaGV4VXBkYXRlQ29sb3IgPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgdmFyIGNvbG9yU3RyaW5nID0gY3V0SGV4KHRoaXMudmFsdWUpOwotICAgIC8vIE9ubHkgdmFs
aWQgMyBkaWdpdHMgaW5wdXQgYW5kIDYgZGlnaXRzIGlucHV0LgotICAgIGlmICgoY29sb3JTdHJp
bmcubGVuZ3RoID09PSAzIHx8IGNvbG9yU3RyaW5nLmxlbmd0aCA9PT0gNikgJiYgKC9eKFswLTlB
LUZdezMsNn0kKS9pLnRlc3QoY29sb3JTdHJpbmcpKSkgewotICAgICAgICAvLyBBdXRvIGZpbGwg
MyBkaWdpdHMgaW5wdXQuICNBQkMgdG8gI0FBQkJDQwotICAgICAgICBpZiAoY29sb3JTdHJpbmcu
bGVuZ3RoID09PSAzKSB7Ci0gICAgICAgICAgICBjb2xvclN0cmluZyA9IGNvbG9yU3RyaW5nWzBd
ICsgY29sb3JTdHJpbmdbMF0gKyBjb2xvclN0cmluZ1sxXSArIGNvbG9yU3RyaW5nWzFdICsgY29s
b3JTdHJpbmdbMl0gKyBjb2xvclN0cmluZ1syXTsKLSAgICAgICAgfQotICAgICAgICBzZXRDb2xv
cldlbGxDb2xvcihjb2xvclN0cmluZyk7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdyZWQtc2xpZGVyLW91dHB1dCcpLnZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jl
ZC1yYW5nZScpLnZhbHVlID0gaGV4VG9SKGNvbG9yU3RyaW5nKTsKLSAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2dyZWVuLXNsaWRlci1vdXRwdXQnKS52YWx1ZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdncmVlbi1yYW5nZScpLnZhbHVlID0gaGV4VG9HKGNvbG9yU3RyaW5nKTsK
LSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsdWUtc2xpZGVyLW91dHB1dCcpLnZh
bHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsdWUtcmFuZ2UnKS52YWx1ZSA9IGhleFRv
Qihjb2xvclN0cmluZyk7Ci0gICAgfQotICAgIHZhciBjb2xvciA9IHJnYlRvSGV4KCk7Ci0gICAg
dXBkYXRlSGV4KGNvbG9yKTsKLX07Ci0KLXZhciB1cGRhdGVIZXggPSBmdW5jdGlvbiAoY29sb3Ip
IHsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29sb3ItcGlja2VyLWhleC1pbnB1dCcp
LnZhbHVlID0gJyMnICsgY29sb3I7Ci19OwotCi12YXIgcmFuZ2VVcGRhdGVDb2xvciA9IGZ1bmN0
aW9uIChvdXRwdXQsIGlucHV0KSB7Ci0gICAgaWYgKGlucHV0LnZhbHVlIDwgMCkgewotICAgICAg
ICBpbnB1dC52YWx1ZSA9IDA7Ci0gICAgfSBlbHNlIGlmIChpbnB1dC52YWx1ZSA+IDI1NSkgewot
ICAgICAgICBpbnB1dC52YWx1ZSA9IDI1NTsKLSAgICB9Ci0KLSAgICAvL3VwZGF0ZSBvdXRwdXQK
LSAgICBvdXRwdXQudmFsdWUgPSBpbnB1dC52YWx1ZTsKLSAgICAvL3VwZGF0ZSBoZXggY29sb3Jz
Ci0gICAgdmFyIGNvbG9yID0gcmdiVG9IZXgoKTsKLSAgICB1cGRhdGVIZXgoY29sb3IpOwotICAg
IC8vdXBkYXRlIGNvbG9yIHdlbGwKLSAgICBzZXRDb2xvcldlbGxDb2xvcihjb2xvcik7Ci19Owot
Ci12YXIgY2FsY3VsYXRlU3dhdGNoQmxvY2tQYWRkaW5nID0gZnVuY3Rpb24gKCkgewotICAgIHZh
ciBzd2F0Y2hCbG9jayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2xvci1waWNrZXItc3dh
dGNoLWJsb2NrJykKLSAgICAgICAgcGFkZGluZyA9IChzd2F0Y2hCbG9jay5jbGllbnRXaWR0aCAt
IDQgKiBDT0xPUl9XRUxMX1dJRFRIKSAvIDIgKyAncHgnOwotICAgIHN3YXRjaEJsb2NrLnN0eWxl
LnBhZGRpbmdMZWZ0ID0gcGFkZGluZzsKLSAgICBzd2F0Y2hCbG9jay5zdHlsZS5wYWRkaW5nUmln
aHQgPSBwYWRkaW5nOwotfQotCi12YXIgb3BlblN3YXRjaGVzID0gZnVuY3Rpb24gKCkgewotICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzd2F0Y2hlcycpLmNsYXNzTGlzdC5yZW1vdmUoJ2Nv
bG9yLXBpY2tlci1pbmFjdGl2ZS1mb250Jyk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3NsaWRlcnMnKS5jbGFzc0xpc3QuYWRkKCdjb2xvci1waWNrZXItaW5hY3RpdmUtZm9udCcpOwot
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2xvci1waWNrZXItc3dhdGNoLWJsb2NrJyku
Y2xhc3NMaXN0LnJlbW92ZSgnY29sb3ItcGlja2VyLW9mZicpOwotICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdjb2xvci1waWNrZXItc2xpZGVyLWJsb2NrJykuY2xhc3NMaXN0LmFkZCgnY29s
b3ItcGlja2VyLW9mZicpOwotICAgIHZhciBtaWRwb2ludCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdzbGlkZS1idXR0b24nKS5vZmZzZXRXaWR0aDsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnc2xpZGUtYnV0dG9uJykuc3R5bGVbJy13ZWJraXQtdHJhbnNmb3JtJ10gPSAndHJhbnNs
YXRlM2QoJyArIG1pZHBvaW50ICsgJ3B4LCAwLCAwKSc7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3NsaWRlLWJ1dHRvbicpLnRyYW5zbGF0aW9uID0gbWlkcG9pbnQ7Ci0gICAgY2FsY3Vs
YXRlU3dhdGNoQmxvY2tQYWRkaW5nKCk7Ci19OwotCi12YXIgb3BlblNsaWRlcnMgPSBmdW5jdGlv
biAoKSB7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlcnMnKS5jbGFzc0xpc3Qu
cmVtb3ZlKCdjb2xvci1waWNrZXItaW5hY3RpdmUtZm9udCcpOwotICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdzd2F0Y2hlcycpLmNsYXNzTGlzdC5hZGQoJ2NvbG9yLXBpY2tlci1pbmFjdGl2
ZS1mb250Jyk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbG9yLXBpY2tlci1zd2F0
Y2gtYmxvY2snKS5jbGFzc0xpc3QuYWRkKCdjb2xvci1waWNrZXItb2ZmJyk7Ci0gICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbG9yLXBpY2tlci1zbGlkZXItYmxvY2snKS5jbGFzc0xpc3Qu
cmVtb3ZlKCdjb2xvci1waWNrZXItb2ZmJyk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3NsaWRlLWJ1dHRvbicpLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGUzZCgwLCAw
LCAwKSc7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlLWJ1dHRvbicpLnRyYW5z
bGF0aW9uID0gMDsKLX07Ci0KLXZhciByb3RhdGlvbkhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzbGlkZS1idXR0b24nKS50cmFuc2xhdGlv
bikgewotICAgICAgICB2YXIgbWlkcG9pbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2xp
ZGUtYnV0dG9uJykub2Zmc2V0V2lkdGg7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdzbGlkZS1idXR0b24nKS5zdHlsZVsnLXdlYmtpdC10cmFuc2Zvcm0nXSA9ICd0cmFuc2xhdGUz
ZCgnICsgbWlkcG9pbnQgKyAncHgsIDAsIDApJzsKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3NsaWRlLWJ1dHRvbicpLnRyYW5zbGF0aW9uID0gbWlkcG9pbnQ7Ci0gICAgfQotICAg
IGNhbGN1bGF0ZVN3YXRjaEJsb2NrUGFkZGluZygpOwotfTsKLQotdmFyIHRvdWNoU3RhcnRIYW5k
bGVyID0gZnVuY3Rpb24gKGV2dCkgewotICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICBf
ZHJhZ0RlbHRhID0gMDsKLSAgICBfZHJhZ1N0YXJ0UG9pbnQgPSBldnQudG91Y2hlc1swXS5wYWdl
WDsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2xpZGUtaGlnaGxpZ2h0JykuY2xhc3NM
aXN0LmFkZCgnY29sb3ItcGlja2VyLWhpZ2hsaWdodCcpOwotfTsKLQotdmFyIHRvdWNoTW92ZUhh
bmRsZXIgPSBmdW5jdGlvbiAoZXZ0KSB7Ci0gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOwotICAg
IGlmICghX2RyYWdTdGFydFBvaW50KSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgX2Ry
YWdEZWx0YSA9IGV2dC50b3VjaGVzWzBdLnBhZ2VYIC0gX2RyYWdTdGFydFBvaW50OwotICAgIHZh
ciBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2xpZGUtYnV0dG9uJyk7Ci0gICAg
aWYgKGJ1dHRvbi50cmFuc2xhdGlvbiArIF9kcmFnRGVsdGEgPiAwICYmIGJ1dHRvbi50cmFuc2xh
dGlvbiArIGJ1dHRvbi5vZmZzZXRXaWR0aCArIF9kcmFnRGVsdGEgPCBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc3dpdGNoZXInKS5vZmZzZXRXaWR0aCAtIE1BUkdJTl9PRkZTRVQpIHsKLSAgICAg
ICAgYnV0dG9uLnN0eWxlWyctd2Via2l0LXRyYW5zZm9ybSddID0gJ3RyYW5zbGF0ZTNkKCcgKyAo
YnV0dG9uLnRyYW5zbGF0aW9uICsgX2RyYWdEZWx0YSkgKyAncHgsIDAsIDApJzsKLSAgICB9Ci19
Ci0KLXZhciB0b3VjaEVuZEhhbmRsZXIgPSBmdW5jdGlvbiAoZXZ0KSB7Ci0gICAgZXZ0LnByZXZl
bnREZWZhdWx0KCk7Ci0gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOwotICAgIHZhciBtaWRwb2lu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzbGlkZS1idXR0b24nKS5vZmZzZXRXaWR0aDsK
LSAgICBpZiAoX2RyYWdEZWx0YSA9PT0gMCkgewotICAgICAgICBpZiAoX2RyYWdTdGFydFBvaW50
ID4gbWlkcG9pbnQpIHsKLSAgICAgICAgICAgIG9wZW5Td2F0Y2hlcygpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgb3BlblNsaWRlcnMoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBp
ZiAoTWF0aC5hYnMoX2RyYWdEZWx0YSkgPiA4KSB7IC8vIG5vdCBhIHZhbGlkIHRvdWNoIG1vdmUg
aWYgX2RyYWdEZWx0YSA8PSA4Ci0gICAgICAgIHZhciBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc2xpZGUtYnV0dG9uJyk7Ci0gICAgICAgIGlmIChidXR0b24udHJhbnNsYXRpb24g
KyBidXR0b24ub2Zmc2V0V2lkdGggLyAyICsgX2RyYWdEZWx0YSA+IG1pZHBvaW50KSB7Ci0gICAg
ICAgICAgICBvcGVuU3dhdGNoZXMoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG9w
ZW5TbGlkZXJzKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgX2RyYWdTdGFydFBvaW50ID0gdW5k
ZWZpbmVkOwotICAgIF9kcmFnRGVsdGEgPSAwOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdzbGlkZS1oaWdobGlnaHQnKS5jbGFzc0xpc3QucmVtb3ZlKCdjb2xvci1waWNrZXItaGlnaGxp
Z2h0Jyk7Ci19Ci0KLXZhciBvayA9IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgcmVzdWx0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbG9yLXBpY2tlci1oZXgtaW5wdXQnKS52YWx1ZTsKLSAg
ICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICcnOwotICAgIHdpbmRvdy5zZXRWYWx1ZUFuZENs
b3NlUG9wdXAocmVzdWx0LCB3aW5kb3cucG9wVXApOwotfTsKLQotdmFyIGNhbmNlbCA9IGZ1bmN0
aW9uICgpIHsKLSAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICcnOwotICAgIHdpbmRvdy5z
ZXRWYWx1ZUFuZENsb3NlUG9wdXAoJy0xJywgd2luZG93LnBvcFVwKTsKLX07Ci0KLXZhciBjcmVh
dGVSYW5nZSA9IGZ1bmN0aW9uIChjb2xvcikgewotICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Ci0gICAgcmFuZ2Uuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3Jh
bmdlJyk7Ci0gICAgcmFuZ2Uuc2V0QXR0cmlidXRlKCdpZCcsIGNvbG9yICsgJy1yYW5nZScpOwot
ICAgIHJhbmdlLnNldEF0dHJpYnV0ZSgnbWluJywgJzAnKTsKLSAgICByYW5nZS5zZXRBdHRyaWJ1
dGUoJ21heCcsICcyNTUnKTsKLSAgICByYW5nZS5jbGFzc0xpc3QuYWRkKCdjb2xvci1waWNrZXIt
cmFuZ2UnKTsKLSAgICByYW5nZS5jbGFzc0xpc3QuYWRkKGNvbG9yICsgJy1yYW5nZXItYmcnKTsK
LSAgICByZXR1cm4gcmFuZ2U7Ci19OwotCi12YXIgY3JlYXRlT3V0cHV0ID0gZnVuY3Rpb24gKGNv
bG9yKSB7Ci0gICAgdmFyIG91dHB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7
Ci0gICAgb3V0cHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdudW1iZXInKTsKLSAgICBvdXRwdXQu
c2V0QXR0cmlidXRlKCdtaW4nLCAnMCcpOwotICAgIG91dHB1dC5zZXRBdHRyaWJ1dGUoJ21heCcs
ICcyNTUnKTsKLSAgICBvdXRwdXQuc2V0QXR0cmlidXRlKCdpZCcsIGNvbG9yICsgJy1zbGlkZXIt
b3V0cHV0Jyk7Ci0gICAgb3V0cHV0LmNsYXNzTGlzdC5hZGQoJ2NvbG9yLXBpY2tlci1zbGlkZXIt
b3V0cHV0Jyk7Ci0gICAgcmV0dXJuIG91dHB1dDsKLX07Ci0KLXZhciBsYXlvdXQgPSBmdW5jdGlv
biAocGlja2VyUGFyYW1zKSB7Ci0gICAgdmFyIHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JyksCi0gICAgICAgIGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
LAotICAgICAgICBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgcG9w
dXAuY2xhc3NOYW1lID0gJ3BvcHVwLWFyZWEnOwotICAgIHBvcHVwLmNsYXNzTGlzdC5hZGQoJ2Nv
bG9yLXBpY2tlci1wb3B1cC1hcmVhJyk7Ci0gICAgcG9wdXAuaWQgPSAncG9wdXAtYXJlYSc7Ci0g
ICAgcG9wdXAuZGlyID0gcGlja2VyUGFyYW1zLmRpcmVjdGlvbjsKLSAgICBoZWFkZXIuY2xhc3NO
YW1lID0gJ3BvcHVwLWhlYWRlcic7Ci0gICAgaGVhZGVyLmlubmVyVGV4dCA9IHBpY2tlclBhcmFt
cy51aVRleHQudGl0bGU7Ci0gICAgcG9wdXAuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKLSAgICBib2R5
LmNsYXNzTmFtZSA9ICdwb3B1cC1jb250ZW50JzsKLSAgICBib2R5LmlkID0gJ3BvcHVwLWNvbnRl
bnQnOwotICAgIGJvZHkuZGlyID0gJ2x0cic7IC8vIEZJWE1FOiBSVEwgVUkgc3BlY2lmaWNhdGlv
bnMgbm90IGRvbmUgeWV0Ci0gICAgcG9wdXAuYXBwZW5kQ2hpbGQoYm9keSk7Ci0KLSAgICB2YXIg
ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0KLSAgICB2YXIg
Y29udGVudCA9IGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpKTsKLSAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoJ2NvbG9yLXBpY2tlci1jb250ZW50Jyk7
Ci0KLSAgICAvLyBUd28gYnV0dG9ucyBhdCB0b3AuCi0gICAgdmFyIHN3aXRjaGVyID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgc3dpdGNoZXIuY2xhc3NMaXN0LmFkZCgnY29s
b3ItcGlja2VyLXN3aXRjaGVyJyk7Ci0gICAgc3dpdGNoZXIuaWQgPSAnc3dpdGNoZXInOwotICAg
IGNvbnRlbnQuYXBwZW5kQ2hpbGQoc3dpdGNoZXIpOwotCi0gICAgdmFyIHNsaWRlckJ1dHRvbiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIHNsaWRlckJ1dHRvbi5jbGFzc0xp
c3QuYWRkKCdjb2xvci1waWNrZXItYnV0dG9uJyk7Ci0gICAgc2xpZGVyQnV0dG9uLmlkID0gJ3Ns
aWRlLWJ1dHRvbic7Ci0gICAgdmFyIHNsaWRlckhpZ2hsaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOwotICAgIHNsaWRlckhpZ2hsaWdodC5pZCA9ICdzbGlkZS1oaWdobGlnaHQn
OwotICAgIHNsaWRlckJ1dHRvbi5hcHBlbmRDaGlsZChzbGlkZXJIaWdobGlnaHQpOwotICAgIHN3
aXRjaGVyLmFwcGVuZENoaWxkKHNsaWRlckJ1dHRvbik7Ci0KLSAgICBzd2l0Y2hlci5hZGRFdmVu
dExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdG91Y2hTdGFydEhhbmRsZXIpOwotICAgIHN3aXRjaGVy
LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRvdWNoTW92ZUhhbmRsZXIpOwotICAgIHN3
aXRjaGVyLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdG91Y2hFbmRIYW5kbGVyKTsKLQot
ICAgIHZhciBzbGlkZXJzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgc2xp
ZGVycy5jbGFzc0xpc3QuYWRkKCdjb2xvci1waWNrZXItb3B0aW9uJyk7Ci0gICAgc2xpZGVycy5p
ZCA9ICdzbGlkZXJzJzsKLSAgICBzd2l0Y2hlci5hcHBlbmRDaGlsZChzbGlkZXJzKTsKLSAgICBz
bGlkZXJzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBpY2tlclBhcmFtcy51
aVRleHQuc2xpZGVyc0xhYmVsKSk7Ci0KLSAgICB2YXIgc3dhdGNoZXMgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKLSAgICBzd2F0Y2hlcy5jbGFzc0xpc3QuYWRkKCdjb2xvci1waWNr
ZXItb3B0aW9uJyk7Ci0gICAgc3dhdGNoZXMuaWQgPSAnc3dhdGNoZXMnOwotICAgIHN3aXRjaGVy
LmFwcGVuZENoaWxkKHN3YXRjaGVzKTsKLSAgICBzd2F0Y2hlcy5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShwaWNrZXJQYXJhbXMudWlUZXh0LnN3YXRjaGVzTGFiZWwpKTsKLQot
ICAgIC8vIFN3YXRjaGVzIGJsb2NrCi0gICAgdmFyIHN3YXRjaEJsb2NrID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgc3dhdGNoQmxvY2suY2xhc3NMaXN0LmFkZCgnY29sb3It
cGlja2VyLWJsb2NrJyk7Ci0gICAgc3dhdGNoQmxvY2suaWQgPSAnY29sb3ItcGlja2VyLXN3YXRj
aC1ibG9jayc7Ci0gICAgY29udGVudC5hcHBlbmRDaGlsZChzd2F0Y2hCbG9jayk7Ci0KLSAgICB2
YXIgU1dBVENIX0NPTE9SUyA9IFtbJyNmZmZmZmYnLCAnI2ZmZmYwMCcsICcjMDBmZjAwJywgJyMw
MGZmZmYnXSwgWycjZmYwMGZmJywgJyMwMDAwZmYnLCAnI2ZmMDAwMCcsICcjMDAwMDgwJ10sIFsn
IzAwODA4MCcsICcjMDA4MDAwJywgJyM4MDAwODAnLCAnIzgwMDAwMCddLCBbJyM4MDgwMDAnLCAn
IzgwODA4MCcsICcjYzBjMGMwJywgJyMwMDAwMDAnXV07Ci0KLSAgICB2YXIgY2hlY2tNYXJrRGl2
VGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgY2hlY2tNYXJrRGl2VGFn
LmNsYXNzTGlzdC5hZGQoJ2NvbG9yLXBpY2tlci1jaGVjay1tYXJrJyk7Ci0KLSAgICBmb3IgKHZh
ciByb3cgPSAxOyByb3cgPD0gNDsgcm93KyspIHsKLSAgICAgICAgdmFyIHJvd0VsdCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICByb3dFbHQuY2xhc3NMaXN0LmFkZCgn
Y29sb3ItcGlja2VyLXJvdycpOwotICAgICAgICBzd2F0Y2hCbG9jay5hcHBlbmRDaGlsZChyb3dF
bHQpOwotICAgICAgICBmb3IgKHZhciBjb2wgPSAxOyBjb2wgPD0gNDsgY29sKyspIHsKLSAgICAg
ICAgICAgIHZhciBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAg
ICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoJ2NvbG9yLXBpY2tlci13ZWxsJyk7Ci0gICAgICAgICAg
ICBjZWxsLmlkID0gcm93ICsgJycgKyBjb2w7Ci0gICAgICAgICAgICBjZWxsLnN0eWxlLmJhY2tn
cm91bmRDb2xvciA9IFNXQVRDSF9DT0xPUlNbcm93IC0gMV1bY29sIC0gMV07Ci0gICAgICAgICAg
ICBjZWxsLm15Y29sb3IgPSBjdXRIZXgoU1dBVENIX0NPTE9SU1tyb3cgLSAxXVtjb2wgLSAxXSk7
Ci0gICAgICAgICAgICBjZWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkg
eyBzd2F0Y2hVcGRhdGVDb2xvcih0aGlzLCBjaGVja01hcmtEaXZUYWcpOyB9LCBmYWxzZSk7Ci0g
ICAgICAgICAgICByb3dFbHQuYXBwZW5kQ2hpbGQoY2VsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBTbGlkZXJzCi0gICAgdmFyIHNsaWRlckJsb2NrID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7Ci0gICAgc2xpZGVyQmxvY2suY2xhc3NMaXN0LmFkZCgnY29sb3ItcGlja2Vy
LWJsb2NrJyk7Ci0gICAgc2xpZGVyQmxvY2suaWQgPSAnY29sb3ItcGlja2VyLXNsaWRlci1ibG9j
ayc7Ci0gICAgY29udGVudC5hcHBlbmRDaGlsZChzbGlkZXJCbG9jayk7Ci0KLSAgICB2YXIgaGV4
SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICBoZXhJbnB1dC5jbGFz
c0xpc3QuYWRkKCdjb2xvci1waWNrZXItaW5wdXQnKTsKLSAgICBzbGlkZXJCbG9jay5hcHBlbmRD
aGlsZChoZXhJbnB1dCk7Ci0KLSAgICB2YXIgY3VycmVudENvbG9yV2VsbCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIGN1cnJlbnRDb2xvcldlbGwuY2xhc3NMaXN0LmFkZCgn
Y29sb3ItcGlja2VyLXdlbGwnKTsKLSAgICBjdXJyZW50Q29sb3JXZWxsLmlkID0gJ2NvbG9yLXBp
Y2tlci1jdXJyZW50JzsKLSAgICBoZXhJbnB1dC5hcHBlbmRDaGlsZChjdXJyZW50Q29sb3JXZWxs
KTsKLQotICAgIHZhciB1c2VySW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcp
OwotICAgIHVzZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpOwotICAgIHVzZXJJ
bnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2NvbG9yLXBpY2tlci1oZXgtaW5wdXQnKTsKLSAgICB1
c2VySW5wdXQuc2V0QXR0cmlidXRlKCdtYXhsZW5ndGgnLCAnNycpOwotICAgIHVzZXJJbnB1dC5j
bGFzc0xpc3QuYWRkKCdjb2xvci1waWNrZXItaGV4LXN0eWxlJyk7Ci0gICAgdXNlcklucHV0LmFk
ZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGhleFVwZGF0ZUNvbG9yLCBmYWxzZSk7Ci0gICAgaGV4
SW5wdXQuYXBwZW5kQ2hpbGQodXNlcklucHV0KTsKLQotICAgIHZhciByZWRTbGlkZXJSb3cgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICByZWRTbGlkZXJSb3cuY2xhc3NMaXN0
LmFkZCgnY29sb3ItcGlja2VyLXNsaWRlcicpOwotICAgIHNsaWRlckJsb2NrLmFwcGVuZENoaWxk
KHJlZFNsaWRlclJvdyk7Ci0KLSAgICB2YXIgcmVkUmFuZ2UgPSBjcmVhdGVSYW5nZSgncmVkJyk7
Ci0gICAgcmVkU2xpZGVyUm93LmFwcGVuZENoaWxkKHJlZFJhbmdlKTsKLQotICAgIHZhciByZWRP
dXRwdXQgPSBjcmVhdGVPdXRwdXQoJ3JlZCcpOwotICAgIHJlZFNsaWRlclJvdy5hcHBlbmRDaGls
ZChyZWRPdXRwdXQpOwotCi0gICAgdmFyIGdyZWVuU2xpZGVyUm93ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7Ci0gICAgZ3JlZW5TbGlkZXJSb3cuY2xhc3NMaXN0LmFkZCgnY29sb3It
cGlja2VyLXNsaWRlcicpOwotICAgIHNsaWRlckJsb2NrLmFwcGVuZENoaWxkKGdyZWVuU2xpZGVy
Um93KTsKLQotICAgIHZhciBncmVlblJhbmdlID0gY3JlYXRlUmFuZ2UoJ2dyZWVuJyk7Ci0gICAg
Z3JlZW5TbGlkZXJSb3cuYXBwZW5kQ2hpbGQoZ3JlZW5SYW5nZSk7Ci0KLSAgICB2YXIgZ3JlZW5P
dXRwdXQgPSBjcmVhdGVPdXRwdXQoJ2dyZWVuJyk7Ci0gICAgZ3JlZW5TbGlkZXJSb3cuYXBwZW5k
Q2hpbGQoZ3JlZW5PdXRwdXQpOwotCi0gICAgdmFyIGJsdWVTbGlkZXJSb3cgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICBibHVlU2xpZGVyUm93LmNsYXNzTGlzdC5hZGQoJ2Nv
bG9yLXBpY2tlci1zbGlkZXInKTsKLSAgICBzbGlkZXJCbG9jay5hcHBlbmRDaGlsZChibHVlU2xp
ZGVyUm93KTsKLQotICAgIHZhciBibHVlUmFuZ2UgPSBjcmVhdGVSYW5nZSgnYmx1ZScpOwotICAg
IGJsdWVTbGlkZXJSb3cuYXBwZW5kQ2hpbGQoYmx1ZVJhbmdlKTsKLQotICAgIHZhciBibHVlT3V0
cHV0ID0gY3JlYXRlT3V0cHV0KCdibHVlJyk7Ci0gICAgYmx1ZVNsaWRlclJvdy5hcHBlbmRDaGls
ZChibHVlT3V0cHV0KTsKLQotICAgIHJlZFJhbmdlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScs
IGZ1bmN0aW9uICgpIHsgcmFuZ2VVcGRhdGVDb2xvcihyZWRPdXRwdXQsIHJlZFJhbmdlKTsgfSwg
ZmFsc2UpOwotICAgIGdyZWVuUmFuZ2UuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rp
b24gKCkgeyByYW5nZVVwZGF0ZUNvbG9yKGdyZWVuT3V0cHV0LCBncmVlblJhbmdlKTsgfSwgZmFs
c2UpOwotICAgIGJsdWVSYW5nZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAo
KSB7IHJhbmdlVXBkYXRlQ29sb3IoYmx1ZU91dHB1dCwgYmx1ZVJhbmdlKTsgfSwgZmFsc2UpOwot
ICAgIHJlZE91dHB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7IHJh
bmdlVXBkYXRlQ29sb3IocmVkUmFuZ2UsIHJlZE91dHB1dCk7IH0sIGZhbHNlKTsKLSAgICBncmVl
bk91dHB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7IHJhbmdlVXBk
YXRlQ29sb3IoZ3JlZW5SYW5nZSwgZ3JlZW5PdXRwdXQpOyB9LCBmYWxzZSk7Ci0gICAgYmx1ZU91
dHB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7IHJhbmdlVXBkYXRl
Q29sb3IoYmx1ZVJhbmdlLCBibHVlT3V0cHV0KTsgfSwgZmFsc2UpOwotCi0gICAgYm9keS5hcHBl
bmRDaGlsZChmcmFnbWVudCk7Ci0KLSAgICB2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpLAotICAgICAgICBjYW5jZWxCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdidXR0b24nKSwKLSAgICAgICAgb2tCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdidXR0b24nKTsKLSAgICBidXR0b25zLmNsYXNzTmFtZSA9ICdwb3B1cC1idXR0b25zJzsKLSAg
ICBjYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gJ3BvcHVwLWJ1dHRvbic7Ci0gICAgY2FuY2VsQnV0
dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FuY2VsKTsKLSAgICBjYW5jZWxCdXR0b24u
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGlja2VyUGFyYW1zLnVpVGV4dC5j
YW5jZWxCdXR0b25MYWJlbCkpOwotICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQoY2FuY2VsQnV0dG9u
KTsKLSAgICBva0J1dHRvbi5jbGFzc05hbWUgPSAncG9wdXAtYnV0dG9uJzsKLSAgICBva0J1dHRv
bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9rKTsKLSAgICBva0J1dHRvbi5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwaWNrZXJQYXJhbXMudWlUZXh0LmRvbmVCdXR0b25M
YWJlbCkpOwotICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQob2tCdXR0b24pOwotICAgIHBvcHVwLmFw
cGVuZENoaWxkKGJ1dHRvbnMpOwotCi0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwb3B1
cCk7Ci19OwotCi12YXIgc2hvdyA9IGZ1bmN0aW9uIChwaWNrZXJQYXJhbXMpIHsKLSAgICBsYXlv
dXQocGlja2VyUGFyYW1zKTsKLSAgICBvcGVuU2xpZGVycygpOwotICAgIGlmIChwaWNrZXJQYXJh
bXMuaW5pdGlhbFZhbHVlKSB7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2xv
ci1waWNrZXItaGV4LWlucHV0JykudmFsdWUgPSBwaWNrZXJQYXJhbXMuaW5pdGlhbFZhbHVlOwot
ICAgIH0KLQotICAgIHZhciBjaGFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50
cycpOwotICAgIGNoYW5nZS5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpOwotICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2xvci1waWNrZXItaGV4LWlucHV0JykuZGlzcGF0Y2hF
dmVudChjaGFuZ2UpOwotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNo
YW5nZScsIHJvdGF0aW9uSGFuZGxlciwgZmFsc2UpOwotfTsKLQotd2luZG93LnBvcHVwY29udHJv
bCA9IHdpbmRvdy5wb3B1cGNvbnRyb2wgfHwge307Ci13aW5kb3cucG9wdXBjb250cm9sLnNob3cg
PSBzaG93OwotfSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2JlcnJ5
L3BvcHVwQ29udHJvbEJsYWNrQmVycnkuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1Jlc291cmNlcy9ibGFja2JlcnJ5L3BvcHVwQ29udHJvbEJsYWNrQmVycnkuY3NzCShyZXZpc2lv
biAxNjE1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvYmxhY2tiZXJyeS9wb3B1cENv
bnRyb2xCbGFja0JlcnJ5LmNzcwkod29ya2luZyBjb3B5KQpAQCAtMSw3NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCwgMjAxMi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqLwotCi1odG1sIHsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotfQot
Ci1ib2R5IHsKLSAgICBwYWRkaW5nOiAzMHB4OwotICAgIG1hcmdpbjogMDsKLSAgICBmb250LWZh
bWlseTogIlNsYXRlIFBybyIsICJNeXJpYWQgUHJvIiwgIkFyaWFsIiwgIkhlbHZldGljYSIsIHNh
bnMtc2VyaWY7Ci0gICAgZm9udC1zaXplOiA0MHB4OwotICAgIGJhY2tncm91bmQ6IHJnYmEoMCwg
MCwgMCwgMC40KTsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwotICAgIGRpc3BsYXk6
IC13ZWJraXQtYm94OwotICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7Ci0gICAgLXdl
YmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKLSAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7Ci19
Ci0KLS5wb3B1cC1hcmVhIHsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIHdpZHRo
OiAxMDAlOwotICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwotICAgIC13ZWJraXQtYm94LW9yaWVu
dDogdmVydGljYWw7Ci19Ci0KLSAgICAucG9wdXAtaGVhZGVyIHsKLSAgICAgICAgbGluZS1oZWln
aHQ6IDkzcHg7Ci0gICAgICAgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRv
cCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSwgcmdiYSgwLCAwLCAwLCAwLjIpKSwgLXdlYmtpdC1s
aW5lYXItZ3JhZGllbnQobGVmdCwgIzAwNzNiYywgIzAwYThkZik7Ci0gICAgICAgIGJvcmRlci10
b3AtbGVmdC1yYWRpdXM6IDEycHg7Ci0gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAx
MnB4OwotICAgICAgICBwYWRkaW5nOiAwIDMycHg7Ci0gICAgICAgIGZvbnQtc2l6ZTogMS4yZW07
Ci0gICAgICAgIGNvbG9yOiAjZmFmYWZhOwotICAgICAgICB0ZXh0LXNoYWRvdzogcmdiYSgwLCAw
LCAwLCAwLjUpIDAgMnB4OwotICAgIH0KLQotICAgIC5wb3B1cC1jb250ZW50IHsKLSAgICAgICAg
LXdlYmtpdC1ib3gtZmxleDogMTsKLSAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICAg
ICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwotICAgICAgICBiYWNrZ3JvdW5k
LWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVn
QUFBc29BQUFBT0NBTUFBQUFCcnNyNUFBQUFoRkJNVkVYLy8vOEFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUM5S0RMaEFBQUFMSFJTVGxNQUFn
QUlCQW9HRWhBakZ4dEJNVEFVUHlFT0dVVWRKUXdmUXhZK0tDNUdOMGc4T2tvcUxFMDROVE5MSm9L
eHFVTUFBQU1xU1VSQlZIaGVuTmFMYnFKUUVJQmg2K0dpV0tGcUVhV3cyZ3AxcGUvL2ZqdVhBOE1a
dzZYN0pXaFFBdkg0TTJHaHZEQXZDSXlmN2NFcURNTWt5U053MktDVW5FNm5IVmtmeFE4b1VJVnFV
cUo0NjNxMC9pSit2U0I0STNmclMva1VIOC9lSEs5anpzcjdUSCtHdE45ZmY0SFBPTzU5bG5QUDY1
ZzMxOGVBVCt1cjd5N2duMEw4bDRsSGEydkZwTFJxVkxIaWh4eXROZHFSdEhNQVVaUW5lWjRuU2Jq
YTc3TXNNMzVnZ3NCN0lZc3hITExuR2QvbmxFTUE1NktTQ1ZUTUhSOVJ3YWhnVlhGSjRsaWxlK25q
ZGFGbHNrc25uZW80NTBZNW5kNzEyYTNUa0Z0UDA3bTVtdTlPMC9xZXJ4SHkyUTFNWFZ0L2NBWGE5
RTF4VmlicmQxS1h5V0l6eCszaTZJY3RTZGVFY3hiU05RVU5oYVViQmpGSDBISzRXbEhMMEtVSlBF
eDV1Vnd1eGl3QkhoZ1lRRFh6WkU0UzdKa2NrSXhudEJOcnhET2FTZUtzWnFYQTN1T2hxUzE0QWx5
MHV6STB4dWNQZEcxd3BrMlBlMjI2blRuWDFnYm1xZ2JsNlNIclRGcE5qOTFIMzFad3BiQ1J1bE5a
RWl2U1U1aFJSeW5aQUJ6SElFZVFYZ2dqR1dTK1FRR0hQSmt5b2ljTVlBeHV4cytnNlF5THhsc2pK
RWtyUnhHVDBFVnFuY1R1eVZycGZyTGNERVIyUktYVWpuSkFQTk1XOVBaYzZyai9OUE1Tc2pPaEhG
SmpaNElXcXhLRnBwZmVlWkQ4UjIyZDdFZ0lBZ0VZSHB0bUVRNUdpRUo0L3dlZEtXZ29Gd1NYdnN5
WGFEeVJXUDZwT1BkbzNITUxVNktRQVRMQ2FBTU9SQkwrS3JTRnZVckptNEVMS1VQTGI4QUNFb3Vt
MU1aakU3SEdoeUsvZ3JYTHhhTlJHK3VYeDRtVXVKcXhvdittK1puK2U4WUtkMnc2NUFMOEt2c3M4
eFlMZDZ6VWJ3eGxlVUdLUUFPYlVOakVjRUhDVVM2NW5UTG8vcVNhQVVsb1pwRXVFUVg4dktIT3l3
OWZKZzJTbHhoMWczbEdYU2V2TVZsNVloSU5MZndrc2FjUFdFUVIrV0M1NHc2Y1QzbVRjN2psdzdC
cWJEeGlHNFErWXV0MGF6amlOdjQvaUp1YTQ3SXR2K3pTTVE3QU1BaEQwUm9JOXo5eXQxWktHZUlV
cEF5OEUxanlIei80MXhSUEVOUGJzRHpXVW40aFlJdDhnNVlZYldnSlo5a2loRVRvbEdQZzJBWXZv
VTI5aExGQWtVbDJ5a0tqdHlPWE5VTXk4aWdoWmFSOEJKeXV5UW51ZHVDWUFBQUFBR0dRL1ZPYllo
OHNCUUJ3dWk5Kys5YlZXdHdBQUFBQVNVVk9SSzVDWUlJPSIpLCB1cmwoImRhdGE6aW1hZ2UvcG5n
O2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBc29BQUFBT0NBTUFBQUFCcnNyNUFBQUFo
RkJNVkVYLy8vOEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUM5S0RMaEFBQUFMSFJTVGxNQUFnQUlCQW9HRWhBakZ4dEJNVEFVUHc0aEdVVWRK
UXdmUXhZK0tFWXVOMGc4T2tvcUxFMDROVE5MSmg0RGtiVUFBQUxqU1VSQlZIaGU3TUF4QVFBQUFN
SWcrNmMyeFQ1WURRRGc3Tk03RG9CQURBTlJ2TC83SHhrSjBsRFFiSFlrRjVrYldIcHVGc205cWpt
MFRWbHZwRXlHOHFnR1F4bVRyeWVPTWc5b0lmV3FMeVRzVWVjcFo0ajZvSnZWTkRsSWp2dzI1WEFy
aGNzQStwM3hQeXNwNkthMlhuWVlCSUVBaXZZMUxjTENJTEVRLy85RG02RW9pQU1VY05PVDZKWUU3
MHpVZVpJNU1vRTFlLzBIMXFoNFhib0VPanlQb25pSW1IemJEU212Ni9ld0xzbldKS1d6a2pGdjRj
NUM0OHJqVlpSb29QcUllcnlPMnRBM3hyMnhwR1BZWkFJOUtPR1czRy9ybjFOMmZ4RmJ4ZmdDMFBi
RVZLcUo5b2dMQy9KUzZCalB2QkxJZk0wMGt6TmxER2Q2OXhuT00yV1l0RG5KV1BoVlFzSlQyN1Q0
bVNHM3pFakQ1SVAwOTJuYm52SEJtcDJLbEhFamZ5TzJJWU1Hd0lTWlBTemFtZkZJeDB1R0tLNWMx
YWNUTTFGT0dBVENjTnRVN1dGdnRZZlJhT3FkOTMrL3dpNndWeXkwMzhUTUFJN000TGUvR3pzSENO
QjU2Z1FOaUkxaUsxaWU0YkdRQndjYlNmajcvay9oRmpUSXNEekgxbDBNT0t3TlVXdjAwYzhpbllO
WFg2Wm8rdlJIM3dtbXVneDBqTTkzYUFlcUVLN2djcEhLWG51dk1BYnhDemdNMGtwWm1hTGFTdFFR
MGNiMU9hWmRPRVlPaktacDRLN1lLMXJCdW8rNTVma1h4Z216WVBrc1o5eEhmbS9MdkllMXBYVVhB
dzVyVHpRQ091MUQ1TWhSNWViRElSUk1RdFpJRjVnQnVnU201SHd3blF2dTFJYW94bzZqVU9YNEgw
VTFDQjZQSEdoeHlOb2tML2hhSTFTK3BHdTBWS2xwUFd6Z1hQRzBXeW1iRVNmdnprU3c2R05sK1U2
Y0FCelFETTN5aFYzaUZObVZjeUpvRGpiSTdLMG5WajBzREJORnBySnNEWWxDb2FBSWRlRmZqWUJy
VDc4WFRQT2FJTXRCY085MXpHOVVlaFFTMm9mekVIcU1FcFd4djZoUVpkOVE0RU1XdWt4aEhGSjRS
blFPNWpNSnpUUFhwaTdlUXhESXFHMFZ1V2kxNnBjV1FDR0xjOFQxMVIrd24yaVpGSkZSa3Nqa3Vj
NzBsaUVUUEgxbkI0YkpiTm55OEt5dUthTlZTazhUMklSOFBVRTBqN0RYcUFiRHlyY1lnRkQzQnpa
Z2Z2c2pHeGNMQUFBQUFFbEZUa1N1UW1DQyIpOwotICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9u
OiB0b3AsIGJvdHRvbTsKLSAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLSAg
ICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87Ci0gICAgICAgIGJhY2tncm91bmQtY29s
b3I6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC45KTsKLSAgICB9Ci0KLSAgICAucG9wdXAtYnV0dG9u
cyB7Ci0gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjEycHg7Ci0gICAgICAgIGJv
cmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MTJweDsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiYSgyNTAsIDI1MCwgMjUwLCAwLjkpOwotICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsK
LSAgICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsOwotICAgICAgICBwYWRkaW5n
LWxlZnQ6IDIwcHg7Ci0gICAgICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7Ci0gICAgfQotCi0gICAg
ICAgIC5wb3B1cC1idXR0b24gewotICAgICAgICAgICAgY29sb3I6IGluaGVyaXQ7Ci0gICAgICAg
ICAgICBmb250OiBpbmhlcml0OwotICAgICAgICAgICAgdGV4dC1zaGFkb3c6IHJnYmEoMjU1LCAy
NTUsIDI1NSwgMC41KSAwIC0ycHg7Ci0gICAgICAgICAgICBtYXJnaW46IDIwcHggMTBweCAyMHB4
IDEwcHg7Ci0gICAgICAgICAgICBoZWlnaHQ6IDkycHg7Ci0gICAgICAgICAgICB3aWR0aDogNTAl
OwotICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7Ci0gICAgICAgICAgICAtd2Via2l0LWJveC1m
bGV4OiAxOwotICAgICAgICB9Ci0KLUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKHdpZHRoOiA3MjBw
eCkgYW5kIChoZWlnaHQ6IDcyMHB4KSB7Ci0gICAgLnBvcHVwLWJ1dHRvbiB7Ci0gICAgICAgIG1h
cmdpbjogMTBweCAxMHB4IDEwcHggMTBweDsKLSAgICAgICAgaGVpZ2h0OiA3N3B4OwotICAgIH0K
LX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2JlcnJ5L3NlbGVjdENvbnRy
b2xCbGFja0JlcnJ5LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMv
YmxhY2tiZXJyeS9zZWxlY3RDb250cm9sQmxhY2tCZXJyeS5jc3MJKHJldmlzaW9uIDE2MTU5NikK
KysrIFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2JlcnJ5L3NlbGVjdENvbnRyb2xCbGFj
a0JlcnJ5LmNzcwkod29ya2luZyBjb3B5KQpAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEyLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICovCi0ucG9wdXAtY29udGVudCB7Ci0gICAgb3ZlcmZsb3cteDogaGlkZGVuOwotICAg
IG92ZXJmbG93LXk6IGF1dG87Ci19Ci0KLS5wb3B1cC1jb250ZW50IHsKLSAgICBtYXgtaGVpZ2h0
OiA0OTVweDsgLyogNSByb3dzIG9mIDk5cHggZWFjaCAqLwotfQotCi1AbWVkaWEgKG1pbi1oZWln
aHQ6IDkxOHB4KSB7IC8qIDY5MyArIDkzIChwb3B1cCBoZWFkZXIpICsgMTMyIChwb3B1cCBidXR0
b25zKSA9IDkxOCAqLwotICAgIC5wb3B1cC1jb250ZW50IHsKLSAgICAgICAgbWF4LWhlaWdodDog
NjkzcHg7IC8qIGluIHBvcnRyYWl0OiA3IHJvd3Mgb2YgOTlweCBlYWNoICovCi0gICAgfQotfQot
Ci0ub3B0aW9uIHsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIHRleHQtb3ZlcmZsb3c6IC1i
bGFja2JlcnJ5LWZhZGU7Ci0gICAgY29sb3I6ICM1NTU1NTU7Ci0gICAgdGV4dC1zaGFkb3c6IHJn
YmEoMCwgMCwgMCwgMC4yKSAwIC0xcHg7Ci0KLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owot
ICAgIGhlaWdodDogOTlweDsKLQotICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjYjdiOGI5
OwotfQotCi1AbWVkaWEgb25seSBzY3JlZW4gYW5kICh3aWR0aDogNzIwcHgpIGFuZCAoaGVpZ2h0
OiA3MjBweCkgewotICAgIC5wb3B1cC1jb250ZW50IHsKLSAgICAgICAgbWF4LWhlaWdodDogNDU1
cHg7IC8qIDUgcm93cyBvZiA5MXB4IGVhY2ggKi8KLSAgICB9Ci0KLSAgICAub3B0aW9uIHsKLSAg
ICAgICAgaGVpZ2h0OiA5MXB4OwotICAgIH0KLX0KLQotLmNvbnRlbnRzIHsKLSAgICBkaXNwbGF5
OiAtd2Via2l0LWJveDsKLSAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7Ci0gICAg
LXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owot
fQotCi0ub3B0aW9uOmFjdGl2ZSB7Ci0gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5k
IDAuMXM7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogIzY2Y2NmZjsKLX0KLQotLnNlbGVjdGVkIHsK
LSAgICBjb2xvcjogIzI2MjYyNjsKLX0KLQotLnNlbGVjdGVkIC5jb250ZW50czo6YWZ0ZXIgewot
ICAgIGNvbnRlbnQ6ICcnOwotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIGJhY2tncm91bmQtaW1h
Z2U6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFD
UUFBQUFmQ0FZQUFBQ1B2Vy8yQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZK
bFlXUjVjY2xsUEFBQUEyWnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJo
WTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZ
emxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlI
ZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3
Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFz
Ym5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXpl
VzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VH
MXNibk02ZUcxd1RVMDlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl0YlM4
aUlIaHRiRzV6T25OMFVtVm1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2
YzFSNWNHVXZVbVZ6YjNWeVkyVlNaV1lqSWlCNGJXeHVjenA0YlhBOUltaDBkSEE2THk5dWN5NWha
RzlpWlM1amIyMHZlR0Z3THpFdU1DOGlJSGh0Y0UxTk9rOXlhV2RwYm1Gc1JHOWpkVzFsYm5SSlJE
MGllRzF3TG1ScFpEb3dPVGd3TVRFM05EQTNNakEyT0RFeE9FUkNRa1UzUWpaRVJURkNOelZHTnlJ
Z2VHMXdUVTA2Ukc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvNFFqbERPRVpFUmpSRk9FVXhNVVV4
UVRWQ05FRTVOelV5TTBGRlJqQTVPU0lnZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBa
RG80UWpsRE9FWkVSVFJGT0VVeE1VVXhRVFZDTkVFNU56VXlNMEZGUmpBNU9TSWdlRzF3T2tOeVpX
RjBiM0pVYjI5c1BTSkJaRzlpWlNCUWFHOTBiM05vYjNBZ1ExTTFJRTFoWTJsdWRHOXphQ0krSUR4
NGJYQk5UVHBFWlhKcGRtVmtSbkp2YlNCemRGSmxaanBwYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xr
T2tVelFVWkZSa1F3TkRNeU1EWTRNVEU1TkRVM1JEWXlRVE5DUlRGRlJEVTJJaUJ6ZEZKbFpqcGti
Mk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPakE1T0RBeE1UYzBNRGN5TURZNE1URTRSRUpDUlRkQ05r
UkZNVUkzTlVZM0lpOCtJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQaUE4TDNKa1pqcFNSRVkrSUR3
dmVEcDRiWEJ0WlhSaFBpQThQM2h3WVdOclpYUWdaVzVrUFNKeUlqOCtFaTFydEFBQUF4bEpSRUZV
ZU5yRWw4OXJHa0VVeDFkWFRXSVNQYWp4UnpRaEdrRUNJZWRDRHZiUWc5QmJhUTZCUUs4cDlBOUlE
aTJsMkQ4aEo5RW8va2hNY21qVkhKSkxvWWNXb2ZhU1hwSkR5YWxKaElJVWtZSS8rbjFEVnlMdXJE
SFJkZUhoekRneisrSDczcng1cS9INy9jSW9uL1B6ODQ2K1pvUkFOdGdqMkcvWUY0QTFhRkRiYXJX
RUVkaTZScU81TUJnTUgvUjYvV2YwdjBNWUJ3SHBScURNaS9IeDhZalpiQllCeFFicTlmcHlwVktK
b1BsVVI4UnF3a3hNVERBWTZranZGa1ZSbUpxYUNxbXRFRlBHWkRLSmNpSVlqY1lhQTFKSklhWU1E
NGFlbFpXVkV4YlVhc0x3Sml3c0xKVEM0ZkI3TlJUYUlEY2hQc1JtczhtRmlVUWlXNEQrTm13Z2dv
bE5UMDl6M1VRdzBXaVVZRTRweG9jWjFCdGpZMk05WVdLeFdBZk1zQlJpTUVwdThucTlwZDNkM1M2
WVlXVHFEV1JmQnNPYlE4ckU0M0VHTXo4LzM2V0dkaGh1NGswZ1pSS0pCQmRHem1WTHNHVllFZmF6
WDVqSnlVbEZOMGt3YzNOejNEaVJYRVlTcDdSYTdROUl2b2ZmQy9UZjl1TW1nbEZ5VXpLWlpEQWVq
NmQxK3o5WmhRRHdDcWw3SFJ0TDQyS3RWbnNOb3hMaFpTOWxzSmFyak0vbks2VlNLUWJqZHJ0N25p
QUdaTEZZbnVIRzdTQkdEaEZ3RzI5V3ExV0JBN1V1d2ZCT0tzR2swMmtHTXpzN2U2Zmp6SUxhWnJQ
VjVmN0VDd1c0WWhQTkhSbVlCTG1KdHpIQlpES1p2bURhTVJRTUJqK1M1SEtHQWtyQXBwdVl0eU1W
VnhoTFlFemtyYUdZa1dCY0xsZExLUVpsRmRyZTN0NExoVUpaM2lLS0xZTEMxQk9Da2R3a1ozU2E5
dmYzMnpEOTVnNFdRMDZuOHhlZWQ5UStQajVlazV0SVVBaitKenFkVGxDS21XdzJ5MkN3NTcydWdI
WWVjamdjWjFkWFZ3eXFVQ2pJUWdGSTRKMm14Y1hGTmd6MnV2ZDkxSkVZN1hiNzJmWDF0U0lVRCti
ZzRHQUxyanpGSGcrNkhMdHVld21LMm5lQklwakR3OE9Cd0hETGo5dFErWHgrVFMwWXhmSmpabWJt
N09ibWhybFBEb3Bnam82T0dBem1EcXlHVVN6UUpDaWNySG91bDN2ZWFEVDBOQjRJQklvb0lkNE1H
b1o5U2x1dDFwNlR5dVh5MHVYbDVlTmlzZWpDY2E2dXJxNSt4ZkFuWlBqbVF3R3dkLzlBL3hmU3pX
dUMvUVhJbjBFcDBnV2s4cGRyeitlZkFBTUFtWWE5Rm1BRDlsVUFBQUFBU1VWT1JLNUNZSUk9Jyk7
Ci0gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLSAgICB3aWR0aDogMzZweDsKLSAg
ICBoZWlnaHQ6IDMxcHg7Ci0gICAgbWFyZ2luOiAwIDIwcHg7Ci19Ci0KLS50ZXh0IHsKLSAgICBo
ZWlnaHQ6IDk5cHg7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICBwYWRkaW5nOiAwIDIwcHg7
Ci0gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Ci0gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0
aWNhbDsKLSAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7Ci0gICAgLXdlYmtpdC1ib3gtZmxl
eDogMTsKLX0KLQotLmRpc2FibGVkIHsKLSAgICBjb2xvcjogI2IwYjBiMDsKLX0KLQotLm9wdGdy
b3VwIHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLX0KLQotLm9wdGdyb3VwLW9wdGlvbiB7Ci0g
ICAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiA2MHB4OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL2JsYWNrYmVycnkvc2VsZWN0Q29udHJvbEJsYWNrQmVycnkuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2JsYWNrYmVycnkvc2VsZWN0Q29udHJvbEJs
YWNrQmVycnkuanMJKHJldmlzaW9uIDE2MTU5NikKKysrIFNvdXJjZS9XZWJDb3JlL1Jlc291cmNl
cy9ibGFja2JlcnJ5L3NlbGVjdENvbnRyb2xCbGFja0JlcnJ5LmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDE3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCwgMjAxMi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotCi0vLyBVcG9uIHRoZSB1
c2VyIG1ha2luZyBhIHNlbGVjdGlvbiwgSSB3aWxsIGNhbGwgd2luZG93LnNldFZhbHVlQW5kQ2xv
c2VQb3B1cCB3aXRoIGEgYmluYXJ5IHN0cmluZyB3aGVyZQotLy8gdGhlIGNoYXJhY3RlciBhdCBp
bmRleCBpIGJlaW5nICcxJyBtZWFucyB0aGF0IHRoZSBvcHRpb24gYXQgaW5kZXggaSBpcyBzZWxl
Y3RlZC4KLShmdW5jdGlvbiAoKXsKLQotICAgIHZhciBzZWxlY3RPcHRpb24gPSBmdW5jdGlvbiAo
ZXZlbnQpIHsKLSAgICAgICAgZm9yICh2YXIgb3B0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3BvcHVwLWNvbnRlbnQnKS5maXJzdENoaWxkOyBvcHRpb247IG9wdGlvbiA9IG9wdGlvbi5u
ZXh0U2libGluZykgewotICAgICAgICAgICAgaWYgKG9wdGlvbiA9PT0gdGhpcykgewotICAgICAg
ICAgICAgICAgIGlmIChvcHRpb24uY2xhc3NOYW1lLmluZGV4T2YoJ3NlbGVjdGVkJykgPT09IC0x
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5jbGFzc05hbWUgKz0gJyBzZWxlY3RlZCc7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBvcHRpb24uY2xhc3NOYW1lID0gb3B0aW9uLmNsYXNzTmFtZS5yZXBsYWNlKCdzZWxlY3RlZCcs
ICcnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkb25lKCk7Ci0gICAgfTsK
LQotICAgIHZhciB0b2dnbGVPcHRpb24gPSBmdW5jdGlvbiAoZXZlbnQpIHsKLSAgICAgICAgaWYg
KHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoJ3NlbGVjdGVkJykgPT09IC0xKSB7Ci0gICAgICAgICAg
ICB0aGlzLmNsYXNzTmFtZSArPSAnIHNlbGVjdGVkJzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUucmVwbGFjZSgnc2VsZWN0ZWQn
LCAnJyk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdmFyIGRvbmUgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgIHZhciByZXN1bHQgPSAnJzsKLSAgICAgICAgZm9yICh2YXIgb3B0aW9uID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcHVwLWNvbnRlbnQnKS5maXJzdENoaWxkOyBvcHRpb247
IG9wdGlvbiA9IG9wdGlvbi5uZXh0U2libGluZykgewotICAgICAgICAgICAgaWYgKG9wdGlvbi5j
bGFzc05hbWUuaW5kZXhPZignc2VsZWN0ZWQnKSA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gJzAnOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1
bHQgKz0gJzEnOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRvY3VtZW50LmJv
ZHkuaW5uZXJIVE1MID0gJyc7Ci0gICAgICAgIHdpbmRvdy5zZXRWYWx1ZUFuZENsb3NlUG9wdXAo
cmVzdWx0LCB3aW5kb3cucG9wVXApOwotICAgIH07Ci0KLSAgICB2YXIgY2FuY2VsID0gZnVuY3Rp
b24gKCkgewotICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICcnOwotICAgICAgICB3
aW5kb3cuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKCctMScsIHdpbmRvdy5wb3BVcCk7Ci0gICAgfTsK
LQotICAgIC8qIHBpY2tlclBhcmFtcyBpcyBhbiBvYmplY3QgbGl0ZXJhbCB3aXRoIHRoZSBmb2xs
b3dpbmcgcHJvcGVydGllczoKLSAgICAgKgotICAgICAqIGlzTXVsdGlTZWxlY3QgLSBhIGJvb2xl
YW4KLSAgICAgKiBsYWJlbHMgLSBhbiBhcnJheSBvZiBzdHJpbmdzCi0gICAgICogZW5hYmxlZHMg
LSBhbiBhcnJheSBvZiBib29sZWFucy4KLSAgICAgKiAgIC1JIHdpbGwgYXNzdW1lIHRoYXQgdGhl
IEhUTUwgImRpc2FibGVkIG9wdGdyb3VwcyBkaXNhYmxlIGFsbCBvcHRpb25zIGluIHRoZSBvcHRn
cm91cCIgaGFzbid0IGJlZW4gYXBwbGllZCwKLSAgICAgKiAgICBzbyBpZiB0aGUgaW5kZXggY29y
cmVzcG9uZHMgdG8gYW4gb3B0Z3JvdXAsIEkgd2lsbCByZW5kZXIgYWxsIG9mIGl0cyBvcHRpb25z
IGFzIGRpc2FibGVkCi0gICAgICogaXRlbVR5cGVzIC0gYW4gYXJyYXkgb2YgaW50ZWdlcnMsIDAg
PT09IHNlcGFyYXRvciwgMSA9PT0gb3B0Z3JvdXAsIDIgPT09IG9wdGlvbiwgMyA9PT0gb3B0aW9u
IGluIG9wdGdyb3VwCi0gICAgICogc2VsZWN0ZWRzIC0gYW4gYXJyYXkgb2YgYm9vbGVhbnMKLSAg
ICAgKiB1aVRleHQgLSBsb2NhbGl6ZWQgdGV4dCB0byBkaXNwbGF5IHRvIHVzZXIKLSAgICAgKiBk
aXJlY3Rpb24gLSBsYXlvdXQgZGlyZWN0aW9uIHRvIHVzZSwgJ2x0cicgb3IgJ3J0bCcKLSAgICAg
Ki8KLSAgICB2YXIgc2hvdyA9IGZ1bmN0aW9uIChwaWNrZXJQYXJhbXMpIHsKLSAgICAgICAgdmFy
IGksCi0gICAgICAgICAgICBzaXplID0gcGlja2VyUGFyYW1zLmxhYmVscy5sZW5ndGgsCi0gICAg
ICAgICAgICBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAotICAgICAgICAg
ICAgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCi0gICAgICAgICAgICBz
ZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKLSAgICAgICAgICAgIHRvcFNl
bGVjdGVkOwotCi0gICAgICAgIHBvcHVwLmNsYXNzTmFtZSA9ICdwb3B1cC1hcmVhJzsKLSAgICAg
ICAgcG9wdXAuZGlyID0gcGlja2VyUGFyYW1zLmRpcmVjdGlvbjsKLSAgICAgICAgc2VsZWN0LmNs
YXNzTmFtZSA9IHNlbGVjdC5pZCA9ICdwb3B1cC1jb250ZW50JzsKLSAgICAgICAgaGVhZGVyLmNs
YXNzTmFtZSA9ICdwb3B1cC1oZWFkZXInOwotICAgICAgICBoZWFkZXIuaW5uZXJUZXh0ID0gcGlj
a2VyUGFyYW1zLnVpVGV4dC50aXRsZTsKLSAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoaGVhZGVy
KTsKLSAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKLQotICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgn
b3B0aW9uJyk7Ci0KLSAgICAgICAgICAgIGlmICghcGlja2VyUGFyYW1zLmVuYWJsZWRzW2ldKSB7
Ci0gICAgICAgICAgICAgICAgb3B0aW9uLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHBpY2tlclBhcmFtcy5pdGVtVHlwZXNbaV0gPT09IDEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gVE9ETzogZGlzYWJsZWQgb3B0Z3JvdXAKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGlja2VyUGFyYW1zLnNlbGVjdGVk
c1tpXSkgewotICAgICAgICAgICAgICAgIG9wdGlvbi5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcp
OwotICAgICAgICAgICAgICAgIGlmICghdG9wU2VsZWN0ZWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdG9wU2VsZWN0ZWQgPSBvcHRpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc3dpdGNoKHBpY2tlclBhcmFtcy5pdGVtVHlwZXNbaV0pIHsKLSAgICAg
ICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnb3B0
Z3JvdXAnKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAg
ICAgICAgICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnb3B0Z3JvdXAtb3B0aW9uJyk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgY29u
dGVudHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAgICAgIGNvbnRl
bnRzLmNsYXNzTGlzdC5hZGQoJ2NvbnRlbnRzJyk7Ci0gICAgICAgICAgICB2YXIgdGV4dENvbnRh
aW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICAgICAgdGV4dENv
bnRhaW5lci5jbGFzc0xpc3QuYWRkKCd0ZXh0Jyk7Ci0gICAgICAgICAgICAvLyB3cmFwIGxhYmVs
IGluIDxiZGk+IGFuZCBkb24ndCBzZXQgYW55IGRpciBhdHRyaWJ1dGUgb24gaXQsCi0gICAgICAg
ICAgICAvLyBzbyB0aGF0IGl0cyBkaXJlY3Rpb25hbGl0eSB3aWxsIGJlIGRldGVybWluZWQgaGV1
cmlzdGljYWxseSBhbmQgaXNvbGF0ZWQgZnJvbSB0aGUgcmVzdCBvZiB0aGUgRE9NCi0gICAgICAg
ICAgICB2YXIgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JkaScpOwotICAgICAgICAg
ICAgdGV4dC5pbm5lclRleHQgPSBwaWNrZXJQYXJhbXMubGFiZWxzW2ldOwotICAgICAgICAgICAg
dGV4dENvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZXh0KTsKLSAgICAgICAgICAgIGNvbnRlbnRzLmFw
cGVuZENoaWxkKHRleHRDb250YWluZXIpOwotICAgICAgICAgICAgb3B0aW9uLmFwcGVuZENoaWxk
KGNvbnRlbnRzKTsKLQotICAgICAgICAgICAgaWYgKCFvcHRpb24uY2xhc3NMaXN0LmNvbnRhaW5z
KCdkaXNhYmxlZCcpICYmICFvcHRpb24uY2xhc3NMaXN0LmNvbnRhaW5zKCdvcHRncm91cCcpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFwaWNrZXJQYXJhbXMuaXNNdWx0aVNlbGVjdCkgewotICAg
ICAgICAgICAgICAgICAgICBvcHRpb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzZWxlY3RP
cHRpb24pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGlja2VyUGFyYW1zLmVuYWJsZWRz
W2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5hZGRFdmVudExpc3RlbmVyKCdjbGlj
aycsIHRvZ2dsZU9wdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZhciBjYW5jZWxCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKSwK
LSAgICAgICAgICAgIGJ1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAg
ICAgICAgYnV0dG9ucy5jbGFzc05hbWUgPSAncG9wdXAtYnV0dG9ucyc7Ci0gICAgICAgIGNhbmNl
bEJ1dHRvbi5jbGFzc05hbWUgPSAncG9wdXAtYnV0dG9uJzsKLSAgICAgICAgY2FuY2VsQnV0dG9u
LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FuY2VsKTsKLSAgICAgICAgY2FuY2VsQnV0dG9u
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBpY2tlclBhcmFtcy51aVRleHQu
Y2FuY2VsQnV0dG9uTGFiZWwpKTsKLSAgICAgICAgYnV0dG9ucy5hcHBlbmRDaGlsZChjYW5jZWxC
dXR0b24pOwotICAgICAgICBpZiAocGlja2VyUGFyYW1zLmlzTXVsdGlTZWxlY3QpIHsKLSAgICAg
ICAgICAgIHZhciBva0J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwot
ICAgICAgICAgICAgb2tCdXR0b24uY2xhc3NOYW1lID0gJ3BvcHVwLWJ1dHRvbic7Ci0gICAgICAg
ICAgICBva0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRvbmUpOwotICAgICAgICAg
ICAgb2tCdXR0b24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGlja2VyUGFy
YW1zLnVpVGV4dC5kb25lQnV0dG9uTGFiZWwpKTsKLSAgICAgICAgICAgIGJ1dHRvbnMuYXBwZW5k
Q2hpbGQob2tCdXR0b24pOwotICAgICAgICB9Ci0gICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKGJ1
dHRvbnMpOwotICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcHVwKTsKLSAgICAg
ICAgaWYgKHRvcFNlbGVjdGVkKSB7Ci0gICAgICAgICAgICB0b3BTZWxlY3RlZC5zY3JvbGxJbnRv
Vmlldyh0cnVlKTsKLSAgICAgICAgICAgIGlmICh0b3BTZWxlY3RlZC5uZXh0U2libGluZykgeyAv
LyBVbmxlc3MgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSBsaXN0
Li4uCi0gICAgICAgICAgICAgICAgLy8gLi4uc2Nyb2xsIHRoZSBzZWxlY3RlZCBlbGVtZW50IGZ1
cnRoZXIgZG93biBhIGJpdCB0byBzaG93IHRoYXQgd2UncmUgbm90IGF0IHRoZSB0b3Agb2YgdGhl
IGxpc3QKLSAgICAgICAgICAgICAgICBzZWxlY3Quc2Nyb2xsVG9wIC09IDUwOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIF9rZXl1cFRpbWVvdXQsCi0gICAgICAgICAg
ICBfc2VhcmNoVGV4dCA9ICcnLAotICAgICAgICAgICAgY2xlYXJTZWFyY2ggPSBmdW5jdGlvbiAo
KSB7IF9zZWFyY2hUZXh0ID0gJyc7IH07Ci0gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoJ2tleXVwJywgZnVuY3Rpb24gKGV2dCkgewotICAgICAgICAgICAgX3NlYXJjaFRleHQgKz0g
U3RyaW5nLmZyb21DaGFyQ29kZShldnQua2V5Q29kZSk7Ci0gICAgICAgICAgICB3aW5kb3cuY2xl
YXJUaW1lb3V0KF9rZXl1cFRpbWVvdXQpOwotICAgICAgICAgICAgX2tleXVwVGltZW91dCA9IHdp
bmRvdy5zZXRUaW1lb3V0KGNsZWFyU2VhcmNoLCAxMDAwKTsgLy8gUmVzZXQgc2VhcmNoIHN0cmlu
ZyBpZiB0aGVyZSBpcyBuby4uLgotICAgICAgICAgICAgLy8gLi4uaW5wdXQgd2l0aGluIDEgc2Vj
b25kLiAxIHNlY29uZCBpcyBzdWZmaWNpZW50IGZvciBvbmUgaGFuZCBpbnB1dCBmb3IgbW9zdCBj
YXNlcyBmcm9tIG15Ci0gICAgICAgICAgICAvLyBleHBlcmltZW50cy4gTGV0IHVzIHNldCB0aGUg
dGltZSBmb3Igbm93LCBhbmQgY2hhbmdlIGxhdGVyIGlmIHNvbWVvbmUgaGFzIGEgYmV0dGVyIGlk
ZWEuCi0KLSAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwoZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZSgndGV4dCcpLAotICAgICAgICAgICAgZnVuY3Rpb24gKHRleHRE
aXYpIHsKLSAgICAgICAgICAgICAgICBpZiAodGV4dERpdi5pbm5lclRleHQudG9Mb3dlckNhc2Uo
KS5pbmRleE9mKF9zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpID09PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRleHREaXYuc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0KLSAg
ICB3aW5kb3cuc2VsZWN0ID0gd2luZG93LnNlbGVjdCB8fCB7fTsKLSAgICB3aW5kb3cuc2VsZWN0
LnNob3cgPSBzaG93OwotfSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFj
a2JlcnJ5L3RpbWVDb250cm9sQmxhY2tCZXJyeS5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvUmVzb3VyY2VzL2JsYWNrYmVycnkvdGltZUNvbnRyb2xCbGFja0JlcnJ5LmNzcwkocmV2
aXNpb24gMTYxNTk2KQorKysgU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2JsYWNrYmVycnkvdGlt
ZUNvbnRyb2xCbGFja0JlcnJ5LmNzcwkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEyLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICovCi0KLSNwb3B1cC1jb250ZW50LXRpbWUgewotICAgIGRpc3Bs
YXk6IC13ZWJraXQtYm94OwotICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDsKLSAg
ICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgbWF4LWhlaWdodDogNDk1cHg7IC8qIDUgcm93cyBv
ZiA5OXB4IGVhY2ggKi8KLX0KLQotLmNvbHVtbiB7Ci0gICAgLXdlYmtpdC1ib3gtZmxleDogMTsK
LSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIC13ZWJraXQtYm9yZGVyLWVuZDogMnB4IHNvbGlk
ICNiN2I4Yjk7Ci19Ci0KLS5jb2x1bW46bm90KDpsYXN0LWNoaWxkKSB7Ci0gICAgYm9yZGVyOiAw
OwotfQotCi0uY2VsbCB7Ci0gICAgaGVpZ2h0OiA5OXB4OwotICAgIHRleHQtYWxpZ246IGNlbnRl
cjsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZl
cnRpY2FsOwotICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKLX0KLQotLnllYXJtb250aGRh
dGUgLmNlbGwgZGl2Omxhc3QtY2hpbGQgewotICAgIGZvbnQtc2l6ZTogMC41ZW07Ci0gICAgY29s
b3I6ICM1NTU1NTU7Ci19Ci0KLS5yb3ctaGlnaGxpZ2h0LWNvbnRhaW5lciB7Ci0gICAgcG9pbnRl
ci1ldmVudHM6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAg
ICByaWdodDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgbGVmdDogMDsKLQotICAgIGRpc3BsYXk6
IC13ZWJraXQtYm94OwotICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7Ci0gICAgLXdl
YmtpdC1ib3gtcGFjazogY2VudGVyOwotfQotCi0ucm93LWhpZ2hsaWdodC1maWxsZXIgewotICAg
IC13ZWJraXQtYm94LWZsZXg6IDE7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjEp
OwotfQotCi0ucm93LWhpZ2hsaWdodCB7Ci0gICAgaGVpZ2h0OiA5OXB4OwotICAgIGJvcmRlci13
aWR0aDogNHB4IDA7Ci0gICAgYm9yZGVyLWNvbG9yOiAjMDBhOGRmOwotICAgIGJvcmRlci1zdHls
ZTogc29saWQ7Ci19Ci0KLS50YWxsLWJpdCB7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLX0KLQot
QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAod2lkdGg6IDcyMHB4KSBhbmQgKGhlaWdodDogNzIwcHgp
IHsKLSAgICAjcG9wdXAtY29udGVudC10aW1lIHsKLSAgICAgICAgbWF4LWhlaWdodDogNDU1cHg7
IC8qIDUgcm93cyBvZiA5MXB4IGVhY2ggKi8KLSAgICB9Ci0KLSAgICAuY2VsbCB7Ci0gICAgICAg
IGhlaWdodDogOTFweDsKLSAgICB9Ci0KLSAgICAucm93LWhpZ2hsaWdodCB7Ci0gICAgICAgIGhl
aWdodDogOTFweDsKLSAgICB9Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvYmxh
Y2tiZXJyeS90aW1lQ29udHJvbEJsYWNrQmVycnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvUmVzb3VyY2VzL2JsYWNrYmVycnkvdGltZUNvbnRyb2xCbGFja0JlcnJ5LmpzCShyZXZp
c2lvbiAxNjE1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvYmxhY2tiZXJyeS90aW1l
Q29udHJvbEJsYWNrQmVycnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLCAyMDEyLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICovCi0oZnVuY3Rpb24gKCl7Ci12YXIgX3R5cGUsCi0gICAgX2N1
cnJlbnREYXRlLAotICAgIF90ekhvdXJzLAotICAgIF90ek1pbnV0ZXMsCi0gICAgX3R6T2Zmc2V0
ID0gMCwKLSAgICBfbWluLAotICAgIF9tYXgsCi0gICAgX3N0ZXAsCi0gICAgX3Nob3J0TW9udGhM
YWJlbHMsCi0gICAgX2xvbmdNb250aExhYmVscywKLSAgICBfZGF5c09mV2Vla0xhYmVscywKLSAg
ICBfYW1QbUxhYmVscywKLSAgICBfYmFzZU9mZnNldCwKLSAgICBfZHJhZ2dpbmcgPSBmYWxzZSwK
LSAgICBfZmlyc3RZID0gMCwKLSAgICBfc2Nyb2xsTGlzdGVuZXIsCi0gICAgX2VuZFNjcm9sbExp
c3RlbmVyOwotCi12YXIgSVRFTV9IRUlHSFQgPSAoc2NyZWVuLndpZHRoID09PSA3MjAgJiYgc2Ny
ZWVuLmhlaWdodCA9PT0gNzIwKSA/IDkxIDogOTk7IC8vIGluIHB4LCBubyBib3JkZXIKLQotdmFy
IFRJTUUgPSAnVGltZScsCi0gICAgREFURV9USU1FID0gJ0RhdGVUaW1lJywKLSAgICBEQVRFX1RJ
TUVfTE9DQUwgPSAnRGF0ZVRpbWVMb2NhbCcsCi0gICAgREFURSA9ICdEYXRlJywKLSAgICBNT05U
SCA9ICdNb250aCc7Ci0KLXZhciBIT1VSUyA9ICdIb3VycycsCi0gICAgTUlOVVRFUyA9ICdNaW51
dGVzJywKLSAgICBZRUFSTU9OVEhEQVRFID0gJ1llYXJNb250aERhdGUnLAotICAgIFlFQVIgPSAn
WWVhcic7Ci0KLXZhciBDT0xVTU5TID0ge307Ci1DT0xVTU5TW1RJTUVdID0gW0hPVVJTLCBNSU5V
VEVTXTsKLUNPTFVNTlNbREFURV9USU1FXSA9IFtZRUFSTU9OVEhEQVRFLCBIT1VSUywgTUlOVVRF
U107Ci1DT0xVTU5TW0RBVEVfVElNRV9MT0NBTF0gPSBbWUVBUk1PTlRIREFURSwgSE9VUlMsIE1J
TlVURVNdOwotQ09MVU1OU1tEQVRFXSA9IFtEQVRFLCBNT05USCwgWUVBUl07Ci1DT0xVTU5TW01P
TlRIXSA9IFtNT05USCwgWUVBUl07Ci0KLS8vIEhhcmQgbGltaXRzIGZvciBpbnRlcm5hbCB0eXBl
LiBTZWUgV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oCi12YXIgTElNSVRfTUlOID0g
bmV3IERhdGUoLTYyMTM1NTk2ODAwMDAwLjApLAotICAgIExJTUlUX01BWCA9IG5ldyBEYXRlKDg2
NDAwMDAwMDAwMDAwMDAuMCk7Ci0KLWZ1bmN0aW9uIHBhcnNlRnJvbURhdGVTdHJpbmcoc3RyKSB7
Ci0gICAgdmFyIG5vdyA9IG5ldyBEYXRlKCksCi0gICAgICAgIG1hdGNoOwotICAgIGlmIChzdHIp
IHsKLSAgICAgICAgc3dpdGNoIChfdHlwZSkgewotICAgICAgICBjYXNlIFRJTUU6Ci0gICAgICAg
ICAgICBtYXRjaCA9IHN0ci5tYXRjaCgvKFxkKyk6KFxkKykvKTsKLSAgICAgICAgICAgIF90ekhv
dXJzID0gbWF0Y2hbMV07Ci0gICAgICAgICAgICBfdHpNaW51dGVzID0gbWF0Y2hbMl07Ci0gICAg
ICAgICAgICBfY3VycmVudERhdGUgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93Lmdl
dE1vbnRoKCksIG5vdy5nZXREYXRlKCksIF90ekhvdXJzLCBfdHpNaW51dGVzKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIERBVEU6Ci0gICAgICAgICAgICBtYXRjaCA9IHN0ci5t
YXRjaCgvKFxkKyktKFxkKyktKFxkKykvKTsKLSAgICAgICAgICAgIF9jdXJyZW50RGF0ZSA9IG5l
dyBEYXRlKG1hdGNoWzFdLCBtYXRjaFsyXSAtIDEsIG1hdGNoWzNdKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE1PTlRIOgotICAgICAgICAgICAgbWF0Y2ggPSBzdHIubWF0Y2go
LyhcZCspLShcZCspLyk7Ci0gICAgICAgICAgICBfY3VycmVudERhdGUgPSBuZXcgRGF0ZShtYXRj
aFsxXSwgbWF0Y2hbMl0gLSAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERB
VEVfVElNRTogLy8gZmFsbC10aHJvdWdoCi0gICAgICAgIGNhc2UgREFURV9USU1FX0xPQ0FMOgot
ICAgICAgICAgICAgbWF0Y2ggPSBzdHIubWF0Y2goLyhcZCspLShcZCspLShcZCspW1QgXShcZCsp
OihcZCspLyk7Ci0gICAgICAgICAgICB2YXIgdXRjVGltZSA9IG5ldyBEYXRlKG1hdGNoWzFdLCBt
YXRjaFsyXSAtIDEsIG1hdGNoWzNdLCBtYXRjaFs0XSwgbWF0Y2hbNV0pOwotICAgICAgICAgICAg
aWYgKG1hdGNoID0gc3RyLm1hdGNoKC8oXGQrKS0oXGQrKS0oXGQrKVtUIF0oXGQrKTooXGQrKSso
XGQrKTooXGQrKS8pKSB7IC8vIHBvc2l0aXZlIHRpbWV6b25lIG9mZnNldAotICAgICAgICAgICAg
ICAgIF90ekhvdXJzID0gbWF0Y2hbNl07Ci0gICAgICAgICAgICAgICAgX3R6TWludXRlcyA9IG1h
dGNoWzddOwotICAgICAgICAgICAgICAgIF90ek9mZnNldCA9IChtYXRjaFs2XSAqIDYwICsgbWF0
Y2hbN10pICogNjAwMDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9IHN0ci5tYXRj
aCgvKFxkKyktKFxkKyktKFxkKylbVCBdKFxkKyk6KFxkKyktKFxkKyk6KFxkKykvKSkgeyAvLyBu
ZWdhdGl2ZSB0aW1lem9uZSBvZmZzZXQKLSAgICAgICAgICAgICAgICBfdHpIb3VycyA9IG1hdGNo
WzZdOwotICAgICAgICAgICAgICAgIF90ek1pbnV0ZXMgPSBtYXRjaFs3XTsKLSAgICAgICAgICAg
ICAgICBfdHpPZmZzZXQgPSAtKG1hdGNoWzZdICogNjAgKyBtYXRjaFs3XSkgKiA2MDAwMDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIF9jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKHV0Y1RpbWUu
Z2V0VGltZSgpICsgX3R6T2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoIChfdHlwZSkgewotICAgICAgICBjYXNlIFRJTUU6
Ci0gICAgICAgIGNhc2UgREFURV9USU1FOgotICAgICAgICBjYXNlIERBVEVfVElNRV9MT0NBTDoK
LSAgICAgICAgICAgIF9jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBu
b3cuZ2V0TW9udGgoKSwgbm93LmdldERhdGUoKSwgbm93LmdldEhvdXJzKCksIG5vdy5nZXRNaW51
dGVzKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgREFURToKLSAgICAgICAg
ICAgIF9jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9u
dGgoKSwgbm93LmdldERhdGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBN
T05USDoKLSAgICAgICAgICAgIF9jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVh
cigpLCBub3cuZ2V0TW9udGgoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotZnVuY3Rpb24gcGFkVHdvKHYpIHsgcmV0dXJuICgnMCcgKyB2KS5zdWJzdHIoLTIs
IDIpOyB9Ci1mdW5jdGlvbiBwYWRGb3VyKHYpIHsgcmV0dXJuICgnMDAwJyArIHYpLnN1YnN0cigt
NCwgNCk7IH0KLQotZnVuY3Rpb24gZ2V0UmVzdWx0U3RyaW5nKCkgewotICAgIHN3aXRjaChfdHlw
ZSkgewotICAgIGNhc2UgVElNRToKLSAgICAgICAgcmV0dXJuIHBhZFR3byhfY3VycmVudERhdGUu
Z2V0SG91cnMoKSkgKyAnOicgKyBwYWRUd28oX2N1cnJlbnREYXRlLmdldE1pbnV0ZXMoKSk7Ci0g
ICAgY2FzZSBEQVRFX1RJTUU6IC8vIGZhbGwtdGhyb3VnaAotICAgIGNhc2UgREFURV9USU1FX0xP
Q0FMOiAvLyB3b3JrcyBiZWNhdXNlIF90ek9mZnNldCBmb3IgZHRsb2NhbCBpcyAwCi0gICAgICAg
IHZhciBhZGp1c3RlZERhdGUgPSBuZXcgRGF0ZShfY3VycmVudERhdGUuZ2V0VGltZSgpIC0gX3R6
T2Zmc2V0KSwKLSAgICAgICAgICAgIGRhdGV0aW1lID0gcGFkRm91cihhZGp1c3RlZERhdGUuZ2V0
RnVsbFllYXIoKSkgKyAnLScgKyBwYWRUd28oYWRqdXN0ZWREYXRlLmdldE1vbnRoKCkgKyAxKSAr
ICctJyArIHBhZFR3byhhZGp1c3RlZERhdGUuZ2V0RGF0ZSgpKSArICdUJyArIHBhZFR3byhhZGp1
c3RlZERhdGUuZ2V0SG91cnMoKSkgKyAnOicgKyBwYWRUd28oYWRqdXN0ZWREYXRlLmdldE1pbnV0
ZXMoKSk7Ci0gICAgICAgIGlmIChfdHlwZSA9PT0gREFURV9USU1FX0xPQ0FMKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gZGF0ZXRpbWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIV90ek9mZnNldCkgewot
ICAgICAgICAgICAgcmV0dXJuIGRhdGV0aW1lICsgJ1onOwotICAgICAgICB9IGVsc2UgaWYgKF90
ek9mZnNldCA+IDApIHsKLSAgICAgICAgICAgIHJldHVybiBkYXRldGltZSArICcrJyArIHBhZFR3
byhfdHpIb3VycykgKyAnOicgKyBwYWRUd28oX3R6TWludXRlcyk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUgKyAnLScgKyBwYWRUd28oX3R6SG91cnMpICsg
JzonICsgcGFkVHdvKF90ek1pbnV0ZXMpOwotICAgICAgICB9Ci0gICAgY2FzZSBEQVRFOgotICAg
ICAgICByZXR1cm4gcGFkRm91cihfY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSkgKyAnLScgKyBw
YWRUd28oX2N1cnJlbnREYXRlLmdldE1vbnRoKCkgKyAxKSArICctJyArIHBhZFR3byhfY3VycmVu
dERhdGUuZ2V0RGF0ZSgpKTsKLSAgICBjYXNlIE1PTlRIOgotICAgICAgICByZXR1cm4gcGFkRm91
cihfY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSkgKyAnLScgKyBwYWRUd28oX2N1cnJlbnREYXRl
LmdldE1vbnRoKCkgKyAxKTsKLSAgICB9Ci0gICAgcmV0dXJuICctMSc7Ci19Ci0KLWZ1bmN0aW9u
IG9rKCkgewotICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJyc7Ci0gICAgd2luZG93LnNl
dFZhbHVlQW5kQ2xvc2VQb3B1cChnZXRSZXN1bHRTdHJpbmcoKSwgd2luZG93LnBvcFVwKTsKLX0K
LQotZnVuY3Rpb24gY2FuY2VsKCkgewotICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJyc7
Ci0gICAgd2luZG93LnNldFZhbHVlQW5kQ2xvc2VQb3B1cCgnLTEnLCB3aW5kb3cucG9wVXApOwot
fQotCi1mdW5jdGlvbiBhZGp1c3RDb2x1bW5MYWJlbHNGb3JWYWx1ZShjb2wpIHsKLSAgICB2YXIg
Y2xvbmVEYXRlID0gbmV3IERhdGUoX2N1cnJlbnREYXRlLmdldFRpbWUoKSksCi0gICAgICAgIG9m
ZnNldCA9IE1hdGguZmxvb3IoY29sLmNoaWxkcmVuLmxlbmd0aCAvIDIpOwotICAgIHN3aXRjaChj
b2wudHlwZSkgewotICAgIGNhc2UgSE9VUlM6Ci0gICAgICAgIC8vIEZJWE1FOiAxMmgvMjRoCi0g
ICAgICAgIGNsb25lRGF0ZS5zZXRIb3VycyhjbG9uZURhdGUuZ2V0SG91cnMoKSAtIG9mZnNldCk7
Ci0gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoY29sLmNoaWxkcmVuLCBmdW5j
dGlvbiAoY2hpbGQpIHsKLSAgICAgICAgICAgIGNoaWxkLmlubmVyVGV4dCA9IHBhZFR3byhjbG9u
ZURhdGUuZ2V0SG91cnMoKSk7Ci0gICAgICAgICAgICBjbG9uZURhdGUuc2V0SG91cnMoY2xvbmVE
YXRlLmdldEhvdXJzKCkgKyAxKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgTUlOVVRFUzoKLSAgICAgICAgY2xvbmVEYXRlLnNldE1pbnV0ZXMoY2xvbmVEYXRlLmdldE1p
bnV0ZXMoKSAtIG9mZnNldCk7Ci0gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwo
Y29sLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHsKLSAgICAgICAgICAgIGNoaWxkLmlubmVy
VGV4dCA9IHBhZFR3byhjbG9uZURhdGUuZ2V0TWludXRlcygpKTsKLSAgICAgICAgICAgIGNsb25l
RGF0ZS5zZXRNaW51dGVzKGNsb25lRGF0ZS5nZXRNaW51dGVzKCkgKyAxKTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWUVBUk1PTlRIREFURToKLSAgICAgICAgLy8gRklY
TUU6IHNob3cgdGhlIHllYXIKLSAgICAgICAgY2xvbmVEYXRlLnNldERhdGUoY2xvbmVEYXRlLmdl
dERhdGUoKSAtIG9mZnNldCk7Ci0gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwo
Y29sLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHsKLSAgICAgICAgICAgIHZhciBkYXRlTW9u
dGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKLSAgICAgICAgICAgICAgICB3ZWVr
ZGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAgICAgICBkYXRlTW9u
dGguaW5uZXJUZXh0ID0gY2xvbmVEYXRlLmdldERhdGUoKSArICcgJyArIF9zaG9ydE1vbnRoTGFi
ZWxzW2Nsb25lRGF0ZS5nZXRNb250aCgpXTsgLy8gRklYTUU6IHNob3VsZCBsb2NhbGl6ZSBkYXRl
IGFzIGEgd2hvbGUgaW5zdGVhZCBvZiBjb25jYXRlbmF0aW5nIGluZGl2aWR1YWwgY29tcG9uZW50
cwotICAgICAgICAgICAgd2Vla2RheS5pbm5lclRleHQgPSBfZGF5c09mV2Vla0xhYmVsc1tjbG9u
ZURhdGUuZ2V0RGF5KCldOwotICAgICAgICAgICAgY2hpbGQuaW5uZXJIVE1MID0gJyc7Ci0gICAg
ICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkYXRlTW9udGgpOwotICAgICAgICAgICAgY2hpbGQu
YXBwZW5kQ2hpbGQod2Vla2RheSk7Ci0gICAgICAgICAgICBjbG9uZURhdGUuc2V0RGF0ZShjbG9u
ZURhdGUuZ2V0RGF0ZSgpICsgMSk7Ci0gICAgICAgIH0pOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIERBVEU6Ci0gICAgICAgIGNsb25lRGF0ZS5zZXREYXRlKGNsb25lRGF0ZS5nZXREYXRlKCkg
LSBvZmZzZXQpOwotICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGNvbC5jaGls
ZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7Ci0gICAgICAgICAgICBjaGlsZC5pbm5lclRleHQgPSBj
bG9uZURhdGUuZ2V0RGF0ZSgpOwotICAgICAgICAgICAgY2xvbmVEYXRlLnNldERhdGUoY2xvbmVE
YXRlLmdldERhdGUoKSArIDEpOwotICAgICAgICB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBNT05USDoKLSAgICAgICAgY2xvbmVEYXRlLnNldERhdGUoMSk7IC8vIE90aGVyd2lzZSB0aGUg
bG9vcCBtaWdodCBza2lwIHNob3J0ZXIgbW9udGhzCi0gICAgICAgIGNsb25lRGF0ZS5zZXRNb250
aChjbG9uZURhdGUuZ2V0TW9udGgoKSAtIG9mZnNldCk7Ci0gICAgICAgIEFycmF5LnByb3RvdHlw
ZS5mb3JFYWNoLmNhbGwoY29sLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHsKLSAgICAgICAg
ICAgIGNoaWxkLmlubmVyVGV4dCA9IF9sb25nTW9udGhMYWJlbHNbY2xvbmVEYXRlLmdldE1vbnRo
KCldOwotICAgICAgICAgICAgY2xvbmVEYXRlLnNldE1vbnRoKGNsb25lRGF0ZS5nZXRNb250aCgp
ICsgMSk7Ci0gICAgICAgIH0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFlFQVI6Ci0gICAg
ICAgIGNsb25lRGF0ZS5zZXRZZWFyKGNsb25lRGF0ZS5nZXRGdWxsWWVhcigpIC0gb2Zmc2V0KTsK
LSAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjb2wuY2hpbGRyZW4sIGZ1bmN0
aW9uIChjaGlsZCkgewotICAgICAgICAgICAgY2hpbGQuaW5uZXJUZXh0ID0gcGFkRm91cihjbG9u
ZURhdGUuZ2V0RnVsbFllYXIoKSk7Ci0gICAgICAgICAgICBjbG9uZURhdGUuc2V0WWVhcihjbG9u
ZURhdGUuZ2V0RnVsbFllYXIoKSArIDEpOwotICAgICAgICB9KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi1mdW5jdGlvbiBiZWdpblNjcm9sbChldnQpIHsKLSAgICBfZHJhZ2dpbmcgPSB0
cnVlOwotICAgIF9maXJzdFkgPSBldnQuY2xpZW50WSB8fCBldnQudG91Y2hlc1swXS5zY3JlZW5Z
OwotICAgIF9zY3JvbGxMaXN0ZW5lciA9IHNjcm9sbC5iaW5kKHRoaXMpOwotICAgIF9lbmRTY3Jv
bGxMaXN0ZW5lciA9IGVuZFNjcm9sbC5iaW5kKHRoaXMpOwotICAgIGRvY3VtZW50LmFkZEV2ZW50
TGlzdGVuZXIoJ21vdXNlbW92ZScsIF9zY3JvbGxMaXN0ZW5lcik7Ci0gICAgZG9jdW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgX3Njcm9sbExpc3RlbmVyKTsKLSAgICBkb2N1bWVu
dC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgX2VuZFNjcm9sbExpc3RlbmVyKTsKLSAgICBk
b2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIF9lbmRTY3JvbGxMaXN0ZW5lcik7
Ci19Ci0KLWZ1bmN0aW9uIHNjcm9sbChldnQpIHsKLSAgICBpZiAoX2RyYWdnaW5nKSB7Ci0gICAg
ICAgIHZhciBjbGllbnRZID0gZXZ0LmNsaWVudFkgfHwgZXZ0LnRvdWNoZXNbMF0uc2NyZWVuWTsK
LSAgICAgICAgdGhpcy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWxsLWJpdCcpWzBdLnN0eWxl
LndlYmtpdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGVZKCcgKyAoY2xpZW50WSAtIF9maXJzdFkgKyBf
YmFzZU9mZnNldCkgKyAncHgpIHRyYW5zbGF0ZVooMCknOwotICAgIH0KLX0KLQotZnVuY3Rpb24g
ZW5kU2Nyb2xsKGV2dCkgewotICAgIGlmICghX2RyYWdnaW5nKSB7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBfZHJhZ2dpbmcgPSBmYWxzZTsKLSAgICBkb2N1bWVudC5yZW1vdmVFdmVu
dExpc3RlbmVyKCdtb3VzZW1vdmUnLCBfc2Nyb2xsTGlzdGVuZXIpOwotICAgIGRvY3VtZW50LnJl
bW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIF9zY3JvbGxMaXN0ZW5lcik7Ci0gICAgZG9j
dW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF9lbmRTY3JvbGxMaXN0ZW5lcik7
Ci0gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfZW5kU2Nyb2xs
TGlzdGVuZXIpOwotICAgIHZhciBjbGllbnRZID0gZXZ0LmNsaWVudFkgfHwgZXZ0LmNoYW5nZWRU
b3VjaGVzWzBdLnNjcmVlblk7Ci0gICAgdmFyIGR5ID0gY2xpZW50WSAtIF9maXJzdFksCi0gICAg
ICAgIGRJdGVtcyA9IE1hdGguZmxvb3IoZHkgLyBJVEVNX0hFSUdIVCksCi0gICAgICAgIGV4dHJh
ID0gZHkgJSBJVEVNX0hFSUdIVDsKLSAgICBpZiAoZXh0cmEgPCAwKSB7Ci0gICAgICAgIGRJdGVt
cysrOwotICAgIH0KLSAgICAvLyBGdWRnZTogd2hpY2ggaXRlbSBpcyBhY3R1YWxseSBtb3N0bHkg
aW4gdGhlIHdpbmRvdz8KLSAgICBpZiAoZXh0cmEgPiBJVEVNX0hFSUdIVCAvIDIpIHsKLSAgICAg
ICAgLy8geW91J3ZlIG1vdmVkIGRvd24gbW9yZSB0aGFuIGhhbGYgdGhlIG5leHQgZWxlbWVudCwg
bW92ZSBzb21lIG1vcmUKLSAgICAgICAgZEl0ZW1zKys7Ci0gICAgICAgIGV4dHJhIC09IElURU1f
SEVJR0hUOwotICAgIH0gZWxzZSBpZiAoZXh0cmEgPCAtSVRFTV9IRUlHSFQgLyAyKSB7Ci0gICAg
ICAgIGRJdGVtcy0tOwotICAgICAgICBleHRyYSArPSBJVEVNX0hFSUdIVDsKLSAgICB9Ci0gICAg
dmFyIG9sZERhdGUgPSBuZXcgRGF0ZShfY3VycmVudERhdGUuZ2V0VGltZSgpKTsKLSAgICBzd2l0
Y2godGhpcy50eXBlKSB7Ci0gICAgY2FzZSBIT1VSUzoKLSAgICBjYXNlIE1JTlVURVM6Ci0gICAg
Y2FzZSBEQVRFOgotICAgIGNhc2UgTU9OVEg6Ci0gICAgICAgIF9jdXJyZW50RGF0ZVsnc2V0JyAr
IHRoaXMudHlwZV0oX2N1cnJlbnREYXRlWydnZXQnICsgdGhpcy50eXBlXSgpIC0gZEl0ZW1zKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBZRUFSOgotICAgICAgICBfY3VycmVudERhdGUuc2V0
RnVsbFllYXIoX2N1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkgLSBkSXRlbXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFlFQVJNT05USERBVEU6Ci0gICAgICAgIF9jdXJyZW50RGF0ZS5zZXRE
YXRlKF9jdXJyZW50RGF0ZS5nZXREYXRlKCkgLSBkSXRlbXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICAvLyBUT0RPOiBhbmltYXRlIHRoZSBleHRyYW5lb3VzIGNvbHVtbiBjaGFuZ2Vz
Ci0gICAgLy8gYW5pbWF0ZSB0aGUgb25lIGNoYW5nZWQgdGFsbGJpdCBtYW51YWxseQotICAgIHZh
ciB0YWxsQml0ID0gdGhpcy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWxsLWJpdCcpWzBdOwot
ICAgIHRhbGxCaXQuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAn
ICsgTWF0aC5hYnMoZXh0cmEgKiAyKSArICdtcyBlYXNlLW91dCc7Ci0gICAgdGFsbEJpdC5zdHls
ZS53ZWJraXRUcmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgnICsgKF9iYXNlT2Zmc2V0ICsgZHkgLSBl
eHRyYSkgKyAncHgpIHRyYW5zbGF0ZVooMCknOwotICAgIC8vIHVzZSBhIHRpbWVyIGluc3RlYWQg
b2Ygd2Via2l0VHJhbnNpdGlvbkVuZCBpbiBjYXNlIHdlYmtpdFRyYW5zaXRpb25FbmQgZG9lc24n
dCBmaXJlIChoYXBwZW5zIGlmIGl0IHNraXBzIGFsbCBmcmFtZXMpCi0gICAgc2V0VGltZW91dChm
dW5jdGlvbiAoKSB7Ci0gICAgICAgIHRhbGxCaXQuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICcn
OwotICAgICAgICB2YXIgdGFsbEJpdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l
KCd0YWxsLWJpdCcpOwotICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRhbGxC
aXRzLCBmdW5jdGlvbiAodGFsbCkgewotICAgICAgICAgICAgc3dpdGNoKHRhbGwudHlwZSkgewot
ICAgICAgICAgICAgY2FzZSBIT1VSUzoKLSAgICAgICAgICAgIGNhc2UgTUlOVVRFUzoKLSAgICAg
ICAgICAgIGNhc2UgREFURToKLSAgICAgICAgICAgIGNhc2UgTU9OVEg6Ci0gICAgICAgICAgICAg
ICAgaWYgKG9sZERhdGVbJ2dldCcgKyB0YWxsLnR5cGVdKCkgIT09IF9jdXJyZW50RGF0ZVsnZ2V0
JyArIHRhbGwudHlwZV0oKSkgewotICAgICAgICAgICAgICAgICAgICBhZGp1c3RDb2x1bW5MYWJl
bHNGb3JWYWx1ZSh0YWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFlFQVI6Ci0gICAgICAgICAgICAgICAgaWYgKG9sZERhdGUu
Z2V0RnVsbFllYXIoKSAhPT0gX2N1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgYWRqdXN0Q29sdW1uTGFiZWxzRm9yVmFsdWUodGFsbCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBZRUFSTU9O
VEhEQVRFOgotICAgICAgICAgICAgICAgIGlmIChvbGREYXRlLmdldEZ1bGxZZWFyKCkgIT09IF9j
dXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpCi0gICAgICAgICAgICAgICAgICAgIHx8IG9sZERhdGUu
Z2V0TW9udGgoKSAhPT0gX2N1cnJlbnREYXRlLmdldE1vbnRoKCkKLSAgICAgICAgICAgICAgICAg
ICAgfHwgb2xkRGF0ZS5nZXREYXRlKCkgIT09IF9jdXJyZW50RGF0ZS5nZXREYXRlKCkKLSAgICAg
ICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgYWRqdXN0Q29sdW1uTGFiZWxzRm9y
VmFsdWUodGFsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgcmVzZXRQb3NpdGlvbnMoKTsKLSAg
ICB9LCBNYXRoLmFicyhleHRyYSAqIDIpICsgMSk7Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZUNvbHVt
bih0eXBlKSB7Ci0gICAgdmFyIGNvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAot
ICAgICAgICB0YWxsQml0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgY29s
LmNsYXNzTmFtZSA9ICdjb2x1bW4gJyArIHR5cGU7Ci0gICAgY29sLnR5cGUgPSB0eXBlOwotICAg
IHRhbGxCaXQuY2xhc3NOYW1lID0gJ3RhbGwtYml0JzsKLSAgICB0YWxsQml0LnR5cGUgPSB0eXBl
OwotICAgIGNvbC5hcHBlbmRDaGlsZCh0YWxsQml0KTsKLQotICAgIHZhciBudW1DZWxscyA9IE1h
dGguY2VpbChNYXRoLm1heChzY3JlZW4uaGVpZ2h0LCBzY3JlZW4ud2lkdGgpIC8gSVRFTV9IRUlH
SFQpICogMiArIDE7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1DZWxsczsgKytpKSB7Ci0g
ICAgICAgIHZhciBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAg
IGNlbGwuY2xhc3NOYW1lID0gJ2NlbGwnOwotICAgICAgICB0YWxsQml0LmFwcGVuZENoaWxkKGNl
bGwpOwotICAgIH0KLQotICAgIGFkanVzdENvbHVtbkxhYmVsc0ZvclZhbHVlKHRhbGxCaXQpOwot
Ci0gICAgY29sLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGJlZ2luU2Nyb2xsKTsKLSAg
ICBjb2wuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGJlZ2luU2Nyb2xsKTsKLQotICAg
IHJldHVybiBjb2w7Ci19Ci0KLWZ1bmN0aW9uIHJlc2V0UG9zaXRpb25zKCkgewotICAgIHZhciB0
YWxsQml0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhbGwtYml0Jyk7Ci0g
ICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0YWxsQml0cywgZnVuY3Rpb24gKHRhbGxC
aXQpIHsKLSAgICAgICAgdGFsbEJpdC5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAndHJhbnNsYXRl
WSgnICsgX2Jhc2VPZmZzZXQgKyAncHgpIHRyYW5zbGF0ZVooMCknOwotICAgIH0pOwotfQotCi1m
dW5jdGlvbiBzaG93KHBpY2tlclBhcmFtcykgewotICAgIF90eXBlID0gcGlja2VyUGFyYW1zLnR5
cGU7Ci0gICAgcGFyc2VGcm9tRGF0ZVN0cmluZyhwaWNrZXJQYXJhbXMuaW5pdGlhbFZhbHVlKTsK
LSAgICBfbWluID0gcGlja2VyUGFyYW1zLm1pbjsgLy8gRklYTUU6IG1pbiBub3Qgc3VwcG9ydGVk
Ci0gICAgX21heCA9IHBpY2tlclBhcmFtcy5tYXg7IC8vIEZJWE1FOiBtYXggbm90IHN1cHBvcnRl
ZAotICAgIF9zdGVwID0gcGlja2VyUGFyYW1zLnN0ZXA7IC8vIEZJWE1FOiBzdGVwIG5vdCBzdXBw
b3J0ZWQKLSAgICAvLyBGSVhNRTogZGlzYWJsZWQgbm90IHN1cHBvcnRlZCAobmVlZCB0byBnZXQg
dGhpcyBzdGF0ZSBwYXNzZWQgaW4pCi0KLSAgICBfc2hvcnRNb250aExhYmVscyA9IHBpY2tlclBh
cmFtcy51aVRleHQuc2hvcnRNb250aExhYmVsczsKLSAgICBfbG9uZ01vbnRoTGFiZWxzID0gcGlj
a2VyUGFyYW1zLnVpVGV4dC5tb250aExhYmVsczsKLSAgICBfZGF5c09mV2Vla0xhYmVscyA9IHBp
Y2tlclBhcmFtcy51aVRleHQuZGF5c09mV2Vla0xhYmVsczsKLSAgICBfYW1QbUxhYmVscyA9IHBp
Y2tlclBhcmFtcy51aVRleHQuYW1QbUxhYmVsczsKLQotICAgIGlmICghX2N1cnJlbnREYXRlKSB7
Ci0gICAgICAgIC8vIFBhcnNlIGZhaWxlZAotICAgICAgICBjYW5jZWwoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoX2N1cnJlbnREYXRlIDwgTElNSVRfTUlOKSB7Ci0gICAgICAgIF9jdXJyZW50RGF0ZSA9
IG5ldyBEYXRlKExJTUlUX01JTi5nZXRUaW1lKCkpOwotICAgIH0gZWxzZSBpZiAoX2N1cnJlbnRE
YXRlID4gTElNSVRfTUFYKSB7Ci0gICAgICAgIF9jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKExJTUlU
X01BWC5nZXRUaW1lKCkpOwotICAgIH0KLQotICAgIC8vIFNldCB1cCB0aGUgVUkKLSAgICB2YXIg
cG9wdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICBwb3B1cC5jbGFzc05h
bWUgPSBwb3B1cC5pZCA9ICdwb3B1cC1hcmVhJzsKLSAgICBwb3B1cC5kaXIgPSBwaWNrZXJQYXJh
bXMuZGlyZWN0aW9uOwotICAgIHZhciBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKLSAgICBoZWFkZXIuY2xhc3NOYW1lID0gJ3BvcHVwLWhlYWRlcic7Ci0gICAgaGVhZGVy
LmlubmVyVGV4dCA9IHBpY2tlclBhcmFtcy51aVRleHQudGl0bGU7Ci0gICAgcG9wdXAuYXBwZW5k
Q2hpbGQoaGVhZGVyKTsKLSAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOwotICAgIGNvbnRlbnQuY2xhc3NOYW1lID0gJ3BvcHVwLWNvbnRlbnQnOwotICAgIGNv
bnRlbnQuZGlyID0gJ2x0cic7IC8vIEZJWE1FOiBSVEwgVUkgc3BlY2lmaWNhdGlvbnMgbm90IGRv
bmUgeWV0Ci0gICAgY29udGVudC5pZCA9ICdwb3B1cC1jb250ZW50LXRpbWUnOwotICAgIHBvcHVw
LmFwcGVuZENoaWxkKGNvbnRlbnQpOwotCi0gICAgQ09MVU1OU1tfdHlwZV0uZm9yRWFjaChmdW5j
dGlvbiAodHlwZSkgewotICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKGNyZWF0ZUNvbHVtbih0
eXBlKSk7Ci0gICAgfSk7Ci0KLSAgICB2YXIgcm93SGlnaGxpZ2h0Q29udGFpbmVyID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCi0gICAgICAgIGZpbGxlcjEgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKSwKLSAgICAgICAgc2VsZWN0ZWRSb3dIaWdobGlnaHQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKLSAgICAgICAgZmlsbGVyMiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOwotICAgIHJvd0hpZ2hsaWdodENvbnRhaW5lci5jbGFzc05hbWUgPSAn
cm93LWhpZ2hsaWdodC1jb250YWluZXInOwotICAgIHNlbGVjdGVkUm93SGlnaGxpZ2h0LmNsYXNz
TmFtZSA9ICdyb3ctaGlnaGxpZ2h0JzsKLSAgICBmaWxsZXIxLmNsYXNzTmFtZSA9IGZpbGxlcjIu
Y2xhc3NOYW1lID0gJ3Jvdy1oaWdobGlnaHQtZmlsbGVyJzsKLSAgICByb3dIaWdobGlnaHRDb250
YWluZXIuYXBwZW5kQ2hpbGQoZmlsbGVyMSk7Ci0gICAgcm93SGlnaGxpZ2h0Q29udGFpbmVyLmFw
cGVuZENoaWxkKHNlbGVjdGVkUm93SGlnaGxpZ2h0KTsKLSAgICByb3dIaWdobGlnaHRDb250YWlu
ZXIuYXBwZW5kQ2hpbGQoZmlsbGVyMik7Ci0gICAgY29udGVudC5hcHBlbmRDaGlsZChyb3dIaWdo
bGlnaHRDb250YWluZXIpOwotCi0gICAgdmFyIG9rQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnYnV0dG9uJyksCi0gICAgICAgIGNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2J1dHRvbicpLAotICAgICAgICBidXR0b25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7Ci0gICAgYnV0dG9ucy5jbGFzc05hbWUgPSAncG9wdXAtYnV0dG9ucyc7Ci0gICAg
b2tCdXR0b24uY2xhc3NOYW1lID0gJ3BvcHVwLWJ1dHRvbic7Ci0gICAgb2tCdXR0b24uaW5uZXJU
ZXh0ID0gcGlja2VyUGFyYW1zLnVpVGV4dC5kb25lQnV0dG9uTGFiZWw7Ci0gICAgb2tCdXR0b24u
YWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvayk7Ci0gICAgY2FuY2VsQnV0dG9uLmNsYXNzTmFt
ZSA9ICdwb3B1cC1idXR0b24nOwotICAgIGNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBwaWNrZXJQ
YXJhbXMudWlUZXh0LmNhbmNlbEJ1dHRvbkxhYmVsOwotICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVu
dExpc3RlbmVyKCdjbGljaycsIGNhbmNlbCk7Ci0gICAgYnV0dG9ucy5hcHBlbmRDaGlsZChjYW5j
ZWxCdXR0b24pOwotICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQob2tCdXR0b24pOwotCi0gICAgcG9w
dXAuYXBwZW5kQ2hpbGQoYnV0dG9ucyk7Ci0KLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHBvcHVwKTsKLQotICAgIF9iYXNlT2Zmc2V0ID0gTWF0aC5mbG9vcihkb2N1bWVudC5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKCdjb2x1bW4nKVswXS5jbGllbnRIZWlnaHQgLyAyIC0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFsbC1iaXQnKVswXS5jbGllbnRIZWlnaHQgLyAyKTsK
LSAgICByZXNldFBvc2l0aW9ucygpOwotfQotCi13aW5kb3cucG9wdXBjb250cm9sID0gd2luZG93
LnBvcHVwY29udHJvbCB8fCB7fTsKLXdpbmRvdy5wb3B1cGNvbnRyb2wuc2hvdyA9IHNob3c7Ci19
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2JsYWNrYmVycnkvY29sb3JDb250
cm9sQmxhY2tCZXJyeS5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUmVzb3VyY2Vz
L2JsYWNrYmVycnkvY29sb3JDb250cm9sQmxhY2tCZXJyeS5jc3MJKHJldmlzaW9uIDE2MTU5NikK
KysrIFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2JlcnJ5L2NvbG9yQ29udHJvbEJsYWNr
QmVycnkuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEyLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICovCi0uY29sb3ItcGlja2VyLXBvcHVwLWFyZWEgewotICAgIG1heC1oZWlnaHQ6IG5v
bmU7Ci19Ci0KLS5jb2xvci1waWNrZXItY29udGVudCB7Ci0gICAgaGVpZ2h0OiA4MzVweDsKLSAg
ICBvdmVyZmxvdzogaGlkZGVuOwotfQotCi0uY29sb3ItcGlja2VyLWJsb2NrIHsKLSAgICBwYWRk
aW5nLWJvdHRvbTogMjBweDsKLX0KLQotI2NvbG9yLXBpY2tlci1zd2F0Y2gtYmxvY2sgewotICAg
IC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwotfQotCi0uY29sb3ItcGlja2VyLXN3
aXRjaGVyIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgbWFyZ2luOiAyNXB4IDI1cHgg
NDBweCAyNXB4OwotICAgIGhlaWdodDogODRweDsKLSAgICBib3JkZXItd2lkdGg6IDhweDsKLSAg
ICBib3JkZXItaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFB
TlNVaEVVZ0FBQUIwQUFBQlJDQVlBQUFBdUNhMFlBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlp
WlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTJacFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFB
QUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNt
VlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5N
NmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4
TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmta
anBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6
SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdK
dmRYUTlJaUlnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3
THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wVW1WbVBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRM
M2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5WTJWU1pXWWpJaUI0Yld4dWN6cDRiWEE5SW1oMGRI
QTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aUlIaHRjRTFOT2s5eWFXZHBibUZzUkc5
amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1rVkJNRFZHTnpBNE1qQTJPREV4UVVJd09FWTBNekJF
TVRjME5rTTRRU0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBGUlRZeFJVTXhR
ekUzT0VFeE1VVXlRVVkwUWpoRlJEbEJSVVEyUmpGRlJDSWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJE
MGllRzF3TG1scFpEcEZSVFl4UlVNeFFqRTNPRUV4TVVVeVFVWTBRamhGUkRsQlJVUTJSakZGUkNJ
Z2VHMXdPa055WldGMGIzSlViMjlzUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnUTFNMUlFMWhZMmx1
ZEc5emFDSStJRHg0YlhCTlRUcEVaWEpwZG1Wa1JuSnZiU0J6ZEZKbFpqcHBibk4wWVc1alpVbEVQ
U0o0YlhBdWFXbGtPakJHTURaRE1FSkdSVVl5TURZNE1URTVOVVpGUlRNMk1UVTRORGN4UkVRNUlp
QnpkRkpsWmpwa2IyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09qRXlSVUV3TlVZM01EZ3lNRFk0TVRG
QlFqQTRSalF6TUVReE56UTJRemhCSWk4K0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBpQThMM0pr
WmpwU1JFWStJRHd2ZURwNGJYQnRaWFJoUGlBOFAzaHdZV05yWlhRZ1pXNWtQU0p5SWo4K0RGRlZV
Z0FBQkFsSlJFRlVlTnJzV3MxUEUwRVUzOWx1ditpSFNOR0RndFZFRDE3MHlKa1lEaVFRRFFteEVr
OGM5UDhnL0JONjRLVEdLQklOSkp3TVo4NWNPUGhKUFNtZ2ROdXlueDNmRzk2VXNiWmFZTnVTc0pQ
OE10dmRtZmViOXpHemI3ckRPT2Rhcy9MMTg5Y0VWSEZBREJEVjJpOHV3QUhZK1d0NXExa0Qxa2dL
WkVpU0ljS1RGaHRnQXJuVGtoUUlNMFNvdlgzM052N2s2Wk1MeFdJeFV5NlhVOWkyRFJLZVRxY3J3
OFBENXVOSGozL2N1M3ZQcHZ0SWJQNUZ1dlZscXgrcVByd3V6QlF1cnErdkQ5VnFOVW5FajZDZDZL
UHJPaDhaR2ZuMjhzWEw3M1MvZXVYcWxWOTFVaUJNd3ZYNVVxbWtqZDRadmI2OXZYMk9pS3FBZmZJ
Ui84Y0FtRktqZTVLa0FCc2NITnhiZTcvMkladk40dk5kSUxaMGFvem0wNmJ2VDE4R3dpejVZb2Rn
RXJHRTFRVHFjMVBwYTZPOG1ZY3pROFNURmxZZ0xXUFBuaitMYjI1dVhxRG8yd2FnS1NxQXNnTHpI
MURiVmFnL0Vyc2JHeHVEcjE2L0VqTUIrQkk2R0NTT1JsbDhzNGlFSG1DUGhGUUkxZjlvMmFodFZl
bGJJbm1la00rRUF4SUcweGo2UUN0dUZUUGt1NS9VMGFWQjFBai9DeWpwVjUzZ0V5S0F4S2VQbjlM
c29Fbk1vSnVhV1RZNWtWYW9kaFRDbzBhdkpPVlNubVZiU1hvZU1lUUliZHYybE5YRVVUcnhJeTRJ
WEJtb1EvSmQwelFOT1NoRG1mS2VBbDh4NlhHS0hDejdReTV4R2V5UVZmaUFNZVlmUTd0V0JRZnV3
MXB3SUp1NERLV0JyL2l3RmhBcFYrVDU4cVpxWGg2Z2hzM04zY1M4L0JqcmJMdUVvcFpjdXRhRFly
VDF3Z3FxTkRGdkZ6aEQ4M2JCdkVhTDVZc0hQa2REODlZZnN1QUcwaXlaUDB2bTdZR212Vm1SbEtE
aEhaNm5YSEwxU05Nd2tMb1VTSjFYbERVc2cvSUcxcDBlU0QyUStNRWlpV0VkK0pTcHl3NERxUnVC
RkdyYXRieTM0MitaMDVHWXFiNE5PakZybEhjMkE2bW5LV2dub3ZjVTdFL0RRQXIvNk9pSWVZTk96
RkJXZlkvYTRtKzZlaElWWkZaVzM4dWN3Y1FzM0VDRjVnMWlHV3ljVDUzY1FJWFIyN3ZvN1ZRMmNm
aHFZd2ZwZmlxVlluOGFJYkFpck5uZjM4L28reW1Ybnh5MWZENHZRODNRZ2czZGlDb2YrWkJVbkVF
WUh4K1hHcVlDMWxUSUd4c2JrNzhkSFhTMlVlOEhoUWN1amF6UDg3eG9FR3dvQitRSjBzTDlnc2VF
VjVtdHgrS3hmYmh5YnQyK1ZaNmJtOE9QNWF4V3F3MjRycHM4Q1NIMlJ6bDRQVDgvbjBENXlDUDRj
TEd3YlRzSnVHUloxczNaMmRrYjBHNFlNQVJSbk5OMVBSR0x4ZlIyZ2UyeEgvWkhPU2dQNWFKODVC
RzdPSm0vT0k2REp6cFNrVWdrdDdLeTRrSGowdTd1N3JHWHc0R0JBYmF3c0pDZG1KZ3dmTi9Ib3dj
VkdOVGhpWTY2aHgxSG5GMkIwV1oyZG5iNmxwZVhyZFhWMWYybHBTVzNYYktwcWFrb0JHVnljbkl5
a2N2bHFtQmljUTRDQ1A4K3U2TDRRcHpTQVJPbENQSjRVTHZGQVprMm9JSkF3bWcwMnZxVVRnUDVp
YzhqZ1haV00vbS9CUmdBN0xINDJnTTdHRDRBQUFBQVNVVk9SSzVDWUlJPSkgOCA4IDggOCBmaWxs
IHN0cmV0Y2g7Ci19Ci0KLS5jb2xvci1waWNrZXItY2hlY2stbWFyayB7Ci0gICAgd2lkdGg6IDgx
cHg7Ci0gICAgaGVpZ2h0OiA4MXB4OwotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmlt
YWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUZFQUFBQlJDQVlBQUFDcWow
bzJBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTJa
cFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBp
Nzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRj
RzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2Iy
SmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkw
eE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3
T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQ
SEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3VFUwOUlt
aDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wVW1W
bVBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5
WTJWU1pXWWpJaUI0Yld4dWN6cDRiWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndM
ekV1TUM4aUlIaHRjRTFOT2s5eWFXZHBibUZzUkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVJq
SkRNREk1UVRGQk5EaEZNVEV4T1RoQ09UZzVNekZFTVVRNE9ERkNRaUlnZUcxd1RVMDZSRzlqZFcx
bGJuUkpSRDBpZUcxd0xtUnBaRG95T0VFMVFqYzRNa0UwTnpReE1VVXhRVGszTWpsRVJqRTJSakk0
TkRJeU15SWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3lPRUUxUWpjNE1VRTBO
elF4TVVVeFFUazNNamxFUmpFMlJqSTROREl5TXlJZ2VHMXdPa055WldGMGIzSlViMjlzUFNKQlpH
OWlaU0JRYUc5MGIzTm9iM0FnUTFNMUlFMWhZMmx1ZEc5emFDSStJRHg0YlhCTlRUcEVaWEpwZG1W
a1JuSnZiU0J6ZEZKbFpqcHBibk4wWVc1alpVbEVQU0o0YlhBdWFXbGtPa1JFTWpCQlJrSkZOREF5
TWpZNE1URTRSall5T1VKRVJqa3pORGRGUlRJd0lpQnpkRkpsWmpwa2IyTjFiV1Z1ZEVsRVBTSjRi
WEF1Wkdsa09qVkdNa013TWpsQk1VRTBPRVV4TVRFNU9FSTVPRGt6TVVReFJEZzRNVUpDSWk4K0lE
d3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBpQThMM0prWmpwU1JFWStJRHd2ZURwNGJYQnRaWFJoUGlB
OFAzaHdZV05yWlhRZ1pXNWtQU0p5SWo4K0NJMk1FQUFBQ25oSlJFRlVlTnJzbkh0TWsxa1d3TnZT
Rm1pcGdBakVFUkJaYVRCTUZoMGdzMFlFbzFISWFseERqSXFLVDJLSVQ5Q284UThmMGZoTWZLS0pH
bzJKWktPSmhoajlRMEZCQlJNeW1YRW5ia0ppV0dSRVlEYUlXQXIwVGRzOXAzTnZ2ZFkrNk9Ocnkr
eDNrNVAyZ3o3dS9mV2NlODY1OTl4UGFMVmFCWHp6cjRsNEJEeEVIaUlQa1c4OFJCNGlENUdIeURj
ZUlqZE5IQVo5RURLUHpvUnRWaGNpWUI3L2J5Q3lrTkFhSXBoSCtsemtBSklDc3hBeEU3RXdqNDVn
LzNRUWhjd1VRb0dKaVVnWUVUdkFaQ0d5OEVaQlRJeU1FakV6b0lPaW9lSWdBcVR3S0N3cFNDU1JL
T2FhaGVrTUlndlBBR0lFMFpQblZPaHJiREJUVWxLc1BUMDkzQTJPNDFVY2FvNVU2NlFFR0lvTVJF
NGVvOSs4ZVJQWDNOd2MzOWJXSnYvdzRZTllxOVdLNEZGcU5CcHRFS1ZTcVRVdExjMG9rOGtzOERp
YW5aMnRLU3dzVk9YazVBekN2M1VnR2hBdEVSMERtR29uWjJiT0pVUWhZNVpTQmx3TWlBS2xwYVVs
cWE2dUxxbXBxVWsrTUREZ2sxVWtKQ1NNenA4L1g3Tml4WXErMmJObjk4T2Zob21NRUtCNkF0UFJ6
TU1hSXF0OUVtS2lNZ0p1QWtqYy9mdjNVNjVldlpyODl1M2J5RUIrY1ZaV2xxR3lzckp2K2ZMbGFM
dW9vVU1FcUpab3Bva0xyUXcwUkJZZ2FsODAwYnhZa0ltdlhyMmFjdWpRb2RUMjl2WklMdWNRcFZK
cE9IcjBhSGRCUVVFdlhLb0kwQkZpNXNaQWd3d2tSQXBRekdnZmFsNzg4UEJ3RXNETHZIZnZYbXd3
UTQvUzBsTDE4ZVBILzZOUUtENFNtRU9NVm80R0NtU2dJRG9DUkljUmgxTVdPSXlVSFR0Mi9LV3pz
MU1haW9BMEl5UERXRk5UOHc0Y0VKcjRBTkZLVFNCQkJnb2lqZnVpR0lDSkRRME4wM2J1M0RsMVpH
UWtJcFFwVVV4TWpQblNwVXRkaXhZdCtnMHUreG1RZXNiaGhEUjNadWRBR1FVSXBqc2RKdmxwb1Fh
SURmdUFmUUdIbG9sOUkzMlVrVDVIT0Vrdmc2cUpyQmRHRFl3SHdaQWxvNktpSW9QR2VPSFNNTmE4
Y2VOR0o0UkVuWEJKNTBtdGc3TUpPa1NhZ2NpSUIwNkNPWERheXBVcmxlR2dnYzRhQnV0Mzd0eHB6
ODNOcFNEVkJLVEpWN1AyQnlKMUpGSEVDMC9TNlhRcHhjWEZPYUZ5SXQ0NG0vcjYramZSMGRIb2JE
NFJyNjFuSEUxUTVrU2FDMU9JR0VoUDNMOS92ekxjQVdMRFBtSmZzYytrNzFGT2N2V2dPQllSNDB3
bVlDRDk0TUdEQ1lKeDByQ3YyR2RpUmRUSmlJSnB6aEVrSG93aDNtNEttUEVQYlcxdFVlRUFLRDA5
WFZGU1VwTGEzOSt2Zi9qdzRYdVR5ZVIwcnN2T3p0YURXZjhMbnZhUzBHZUV4STltcnBmQ1dGUEd0
RTV4OSs3ZGxEQUJLS3FxcXZwaCsvYnRDNk9pb216VENwanR3T3JWcS8vWjBkR2hjbnd4OWhuN3Zt
clZxaUVDVU04NEdDdVg1aXhrTk5HMnNIRHIxcTJrY0FDNFo4K2VINnVycS84ZUdSa3BSUXREbVR4
NWNzTFpzMmYvWWJGWUpNN2VSUHF1SUdPSjlDVnU5QldpUFQ5dWFXbEpEQU10dEFHRTdHaWhTQ1Q2
QnNETW1UUFR6R1p6dExNM1l0OXhEQXhFTWRjUVdWTzI1Y2gxZFhYSm9RYTRlL2Z1SHlFL1h5aUVS
aldRRlloWmdhSFo1Y29SR1lPY2dlaVZsL1psVHFRWkNtcGY5SXNYTCtUaEJOQlp1MzM3ZGcvKzI5
V0hrREZFa3pGSnlCaEh1ZFpFMng0Skx1bURCeFNIR3FBekU2YXRvYUZoOFBEaHc3OUdSRVRvWEww
R3g0QmpJV0dPeEZ0TjlBV2lmY1g2K2ZQbjhTSDB3dm5vaFYyWk1BcUVMK3F5c3JKV0FQZzdnTmE3
KzBBeWxraEdFemt6NTY4Mm5kNjlleWNMQmNCZHUzYmxnd1lXdXpOaDBFRDFtalZyV3NWaThYdUpS
RElJRU4zR2ZtUXM3Sll0cHhEdGU4Ynd4Wkp3QmJoMjdWb0UrSnRVS3YwTUFEM09iMTFkWFJKR0N6
azNaenZFdnI0K1NTZ0FlcGdEdlFhSXJiZTNsOVZDRWRlYWFBZXBWcXVEVlJBbGdoZ1E1MEMzR3Zq
MDZWT2ZBR0xUYURSc2dZR1E2eERIWGtlajErdEY0UVN3dkx6Y0o0RFl5RmlFM2dMMEZhSlBDeDF6
NXN4Sm5qVnJWakprQnowUVRneU1GU0NZYi82MmJkczhBbHkzYnAzUEFQMXR2a0MwVjE1QmttL3hw
STBRWGtocWEydEw4L0x5c3ZBYU5NcjY2TkdqbnlCTmUrYkJZNDRKNExObnp3SUNFTWNpOExHcVRP
UWpRRnQxVm14c3JOdmxkQmk0YU4rK2ZYTnpjM096YU95R1FKWXVYZnEzNjlldkw3TllMSzYyRUVR
QU8zL3IxcTNGN3VMQVFHcWdYQzVueS9hOEF1a0xSSHQ1VzFKU2t0dE9ZNzZhazVPVDZRekF2SG56
dnI5Mjdab3prS0xLeXNxOHNRQmN2MzU5d0V5WWpJVXR6UXNLUk5QMDZkT043bDRNZ0tRcWxjcmlD
b1FUa0RhQVlNWWxuZ0J1MkxBaG9ITWdHVXZRSU5JQ1N5TjhzYzZ0TnhFS0xaRDhkN2w3RFFOU1Fn
RzZpd054RHR5NGNXUEFuUWdaaTJNcEhxY1FjZlhYV0ZCUW9QTGdWQXd3Nkk0elo4NjhkNlZWS0VW
RlJkL1gxZFZ0Z0huUXJRWnlCUkFiR1l0UjhIWGxHS2ZtYkt0U0JZZWhTa3hNZERrUUdLUUpCdnZw
NHNXTHIwK2RPdFh0RHVTTUdUTytDeFZBSEFPT1JmQ2wvSTd6N1FHcWliZ3FvZ056MUxpRERvTWVn
ZkNoNS9MbHl6K2ZQbjNhTFVoM0FEZHQyc1JaSEVqR29CTjgyWHYyYXFQS1YwMGNKYithdHJTMDlL
T25lVkVpa1F3QnlHNEVDYWJkN2MwWE5qWTJxamR2M3N4cElFM0dvQTJtSmxvWmlKcTVjK2QreEFw
VmIwQ09WU09EQVJBTFFuRU1nbS9MN1FSY1F6U1RTUmgvdmVHS2lvbytqM2tmQS9MS2xTczJqUXcx
UUd4YnRtekJ2ZzhMdnEyaUhYdE82K2ZtUFc0MVRnS1pVbGhZbURlV0VoTE1Za3dtMHdSSUYxTWhw
Y3ZmdTNkdnF1TnJtcHFhMVBERGNBNFFhM0thbTV0L0VmeXhlZitKd1BSNjh6N2l5SkVqZmkwc0VH
MldaR1ptaWlGTWlRZElRZzhhYVFVb1JoQkRhMnZyaUZhcmxlWG41OGRDT0dSN1gzMTkvU0JrS3ov
Qk5hY0E0WE90TlRVMTc5UFQwMytIeTg4Q0g2c2YvTkZFQ2c4MUQwdEpFa0FtUTV3M2E2ejFPRlFq
RFFiRGR6RXhNVk1nMkkyRDdFWVAydHlMM3B6cjFaaGx5NVlOd2Z6OEt6ejlyK0NQTXVRUllzNldZ
Smt6QmNtVzFpVU9EdytuTEY2OCtLOWpyUXhEa0xpcFBqbzZHZ01aQzA0UFpneUpRRFJjQWdUdE16
NSsvUGpmQ29VQ1MrdXdCc2V2MHJwQUYza212Mzc5ZWxwWldaa1NUMFI1OHprQTBSWnJvd1BpY3Uy
UEtmTEUrbTMweW9NQ1A0czgvVjJacHA3YVFNemhNM1N1RzR2TXNiVFhpOCt4NE5vaTF3Q3hUK2ZP
bmV2Q1BwSjVrSFVrVm44MHlWK0lOQTNVRWJNWUtDa3A2VHh4NGtTM2x5QUZYQVBFUGkxWnNxU1R6
SUZEcE04bVgrYkJRSm96KzJPd1J6QndJM3pTa3lkUE1xcXFxdExDNFFqR2hRc1hQdUNQUzBJWmxV
Tnc3WmNGY0g0WUNPYkkxT3JxNm94UUhnWTZmLzU4SnpIaHNENE01QXdrUFpZMkVieDI0b0VEQjVU
QkxrZkdNT2JreVpQdDRJWDd5UndZMXNmU0hFR3lCeVFWeEhQSHYzejVNdVhnd1lPcFhHc2xhdCt4
WThlNmk0cUtlb2pwcWwya2RtRjNRTklaU01lanVnZ3pycmEyTnZYbXpadUpIUjBkQVQxdENnRzdB
Zkx0L3ZMeThtNWl0aFRldURxcTYraHNSQUxYaDhZbmdHYmFEbzAzTmpiS0J3Y0hmWEkrY1hGeDVn
VUxGbWh3T1FzMDc2UGd5eG5uY1gxbzNKVldzcmN2aUNaQTdRSU9LQTZneHJlM3Q4dXd1RWlqMFln
Y3pSN05WQzZYVzZaT25XcFNLcFZhZ0tZQ2gwR0RaVlowREx4eGZmc0NaN2syaGVuc1JocVI1Rysw
MEpMZStrRG9FTmpiOTNpSUdBUmYzMGlEN3BQWWQrN0crNDAwSEVFNm1qbDdPeGV4d0xkYnVyQjNK
d25KTFYyRUlicW43Si9xNWtMQ01MZ3hMMyticXdDMGtFTUlSQmpDTng0aUQ1R0h5RGNlSWcrUmg4
aEQ1QnNQa1ljWW51MS9BZ3dBU0JpYkdETGxPVElBQUFBQVNVVk9SSzVDWUlJPSk7Ci19Ci0KLS5j
b2xvci1waWNrZXItb3B0aW9uIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgd2lkdGg6
IDIwMHB4OwotICAgIGNvbG9yOiAjMjYyNjI2OwotICAgIGRpc3BsYXk6IC13ZWJraXQtYm94Owot
ICAgIC13ZWJraXQtYm94LWZsZXg6IDE7Ci0gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsK
LSAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7Ci19Ci0KLS5jb2xvci1waWNrZXItYnV0dG9u
IHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgaGVpZ2h0OiA1OHB4OwotICAgIHdpZHRo
OiAtd2Via2l0LWNhbGMoNTAlIC0gMjhweCk7IC8qIG1pbnVzIHR3byBib3JkZXIgd2lkdGhzICov
Ci0gICAgYm9yZGVyLXdpZHRoOiAxNHB4OwotICAgIGJvcmRlci1pbWFnZTogdXJsKGRhdGE6aW1h
Z2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQjBBQUFCUkNBWUFBQUF1Q2Ew
WUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBMlpw
VkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3
N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNH
MWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJK
bElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4
Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndP
aTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BI
SmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdUVTA5SW1o
MGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5dGJTOGlJSGh0Ykc1ek9uTjBVbVZt
UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmMxUjVjR1V2VW1WemIzVnlZ
MlZTWldZaklpQjRiV3h1Y3pwNGJYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6
RXVNQzhpSUhodGNFMU5Pazl5YVdkcGJtRnNSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG94TWtW
Qk1EVkdOekE0TWpBMk9ERXhRVUl3T0VZME16QkVNVGMwTmtNNFFTSWdlRzF3VFUwNlJHOWpkVzFs
Ym5SSlJEMGllRzF3TG1ScFpEcEZSVFl4UlVNeU1ERTNPRUV4TVVVeVFVWTBRamhGUkRsQlJVUTJS
akZGUkNJZ2VHMXdUVTA2U1c1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwRlJUWXhSVU14UmpFM09F
RXhNVVV5UVVZMFFqaEZSRGxCUlVRMlJqRkZSQ0lnZUcxd09rTnlaV0YwYjNKVWIyOXNQU0pCWkc5
aVpTQlFhRzkwYjNOb2IzQWdRMU0xSUUxaFkybHVkRzl6YUNJK0lEeDRiWEJOVFRwRVpYSnBkbVZr
Um5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qQkdNRFpETUVKR1JVWXlN
RFk0TVRFNU5VWkZSVE0yTVRVNE5EY3hSRVE1SWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJY
QXVaR2xrT2pFeVJVRXdOVVkzTURneU1EWTRNVEZCUWpBNFJqUXpNRVF4TnpRMlF6aEJJaTgrSUR3
dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4
UDNod1lXTnJaWFFnWlc1a1BTSnlJajgrcXRPSDRnQUFBZE5KUkVGVWVOcnNXc3RLdzBBVXpXaEpM
QzFkU0NxQzJJaUNVc2lpR3JweW0xL29SL1NMK2grRmZrSlg2YVpiUVNHNDhGV1ZCaVhTMm83M1lB
c2hKRTBqYWwvM3dnbk16SDNNZmN5MDRVWklLWlgvcGkxbEFjUkcxODlvSm01QkNCRWM3aEZ5aEh5
TXpDZmhqZkJPZUp4T3hwME1FYnZ3YlZRbEhCSUtLUnp4Q0xlRVFaenVwUENXWU5DeUxOVnhITVB6
dkROU1pJYUJlYXlEYjdMQm8xbEtaM21La0I3WXRyM1RiRGFQczluc0U0MWY0RUVFTzR6dCtyNWZy
TlZxTjYxVzY0UEdkNlQ3UHEzUkUreTYwK25BQStUcllZN1FGcnZkYnFGU3FiZ0lNK20rVGh0ZUZJ
MWltaVlLNkhuT2ZMNld5K1Y4VUQ1VjlVNDNwR2thS21vNHA5R2hxcXFKRGkzWE9RMlJYTjhiS2VS
bEdrOGxlOHJoNWZDdS9vM0VPZVdjcm01T3VYbzM4OExuSThQaDVYUEsxY3ZWeXpubE4zRTJ1bW1Y
QTFjdi8zUGc5MU0rTXZ4N3lvVzBHRS9IZVBpK1AwNVJjQm5pbDBINXRFYlJYMVBhN1RhRTlZREhz
NkFUL3lnb0h4MExLU05CdEU4NHR5enJvdC92WDlKY2lhQVJSQVF3WHdJZitDRUgrVGpkU1UzYlUw
TE9NQXpSYURUVWFyVXFkRjBYWWQ1ZXJ5Y2R4NUgxZW4zZ3VpNFVvbU44dFZTZDRpU2pVMElETnov
QmRnVDdhSkpENE9jOThiOGsvcmlDamY0S2ZRa3dBQTlNVnNpRXZvQU5BQUFBQUVsRlRrU3VRbUND
KSAxNCAxNCAxNCAxNCBmaWxsIHN0cmV0Y2g7Ci0gICAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3Bl
cnR5OiAtd2Via2l0LXRyYW5zZm9ybTsKLSAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246
IDIwMG1zOwotfQotCi0uY29sb3ItcGlja2VyLWhpZ2hsaWdodCB7Ci0gICAgbWFyZ2luOiAtMTRw
eDsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBoZWlnaHQ6IDEwMCU7Ci0gICAgYm9yZGVyLXdpZHRo
OiAxNHB4OwotICAgIGJvcmRlci1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJP
UncwS0dnb0FBQUFOU1VoRVVnQUFBQjBBQUFCUkNBWUFBQUF1Q2EwWUFBQUFHWFJGV0hSVGIyWjBk
MkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBMlpwVkZoMFdFMU1PbU52YlM1aFpH
OWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUx
d1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBp
WVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVN
QzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lD
QWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4
eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2
YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdUVTA5SW1oMGRIQTZMeTl1Y3k1aFpHOWla
UzVqYjIwdmVHRndMekV1TUM5dGJTOGlJSGh0Ykc1ek9uTjBVbVZtUFNKb2RIUndPaTh2Ym5NdVlX
UnZZbVV1WTI5dEwzaGhjQzh4TGpBdmMxUjVjR1V2VW1WemIzVnlZMlZTWldZaklpQjRiV3h1Y3pw
NGJYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpSUhodGNFMU5Pazl5
YVdkcGJtRnNSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG94TWtWQk1EVkdOekE0TWpBMk9ERXhR
VUl3T0VZME16QkVNVGMwTmtNNFFTSWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpE
cEZSVFl4UlVNeU5ERTNPRUV4TVVVeVFVWTBRamhGUkRsQlJVUTJSakZGUkNJZ2VHMXdUVTA2U1c1
emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwRlJUWXhSVU15TXpFM09FRXhNVVV5UVVZMFFqaEZSRGxC
UlVRMlJqRkZSQ0lnZUcxd09rTnlaV0YwYjNKVWIyOXNQU0pCWkc5aVpTQlFhRzkwYjNOb2IzQWdR
MU0xSUUxaFkybHVkRzl6YUNJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJu
TjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qQkdNRFpETUVKR1JVWXlNRFk0TVRFNU5VWkZSVE0yTVRV
NE5EY3hSRVE1SWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2pFeVJVRXdOVVkz
TURneU1EWTRNVEZCUWpBNFJqUXpNRVF4TnpRMlF6aEJJaTgrSUR3dmNtUm1Pa1JsYzJOeWFYQjBh
Vzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNod1lXTnJaWFFnWlc1a1BT
SnlJajgrYmt4MTBnQUFBTGhKUkVGVWVOcnMyakVMZ3pBUWhtRlBwWm5hcWYvL0Z6cTVWV3JTcjVD
aGc5WWNCa1Y0QTRmTGtTZTVNeTdSVWtyTjBhTnRUaGlnb05kRis1SWtNK3YwZUNodWltNGhaVlpN
aWxIbmZ0NmNiK3ZqSVBDN3NHZGhWYUppMEp6dnZlVzlPOXJRNW9yczdtbHd0aXpVUUwwdm0zRmtR
RUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQnI0Tkc1NXlwQmpvNTBWY05kSFRzTnViOHY4
TksvblA0dVQ4Tkt3dU5lWWQxN2s4NU1xQ2dwNk1mQVFZQVJWWW9sVmphY2Z3QUFBQUFTVVZPUks1
Q1lJST0pIDE0IDE0IDE0IDE0IGZpbGwgc3RyZXRjaDsKLX0KLQotaW5wdXQgewotICAgIGZvbnQt
c2l6ZTogNDBweDsKLSAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwotfQotCi0uY29sb3It
cGlja2VyLXNoYXJwIHsKLSAgICBmb250LXNpemU6IDQwcHg7Ci0gICAgLXdlYmtpdC1tYXJnaW4t
c3RhcnQ6IDIwcHg7Ci19Ci0KLS5jb2xvci1waWNrZXItb2ZmIHsKLSAgICBkaXNwbGF5OiBub25l
ICFpbXBvcnRhbnQ7Ci0gICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7Ci19Ci0KLS5j
b2xvci1waWNrZXItaW5hY3RpdmUtZm9udCB7Ci0gICAgY29sb3I6ICM1NTU1NTU7Ci19Ci0KLS5j
b2xvci1waWNrZXItcm93IHsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAtd2Via2l0
LWJveC1hbGlnbjogY2VudGVyOwotICAgIG1hcmdpbi10b3A6IC01cHg7Ci19Ci0KLS5jb2xvci1w
aWNrZXItc3dpdGNoZXIgewotICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwotfQotCi0uY29sb3It
cGlja2VyLWNvbnRlbnQgewotICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwotICAgIC13ZWJraXQt
Ym94LWZsZXg6IDE7Ci0gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKLX0KLQotLmNv
bG9yLXBpY2tlci1oZXgtc3R5bGUgewotICAgIGhlaWdodDogODVweDsKLSAgICBjb2xvcjogIzI2
MjYyNjsKLSAgICBmb250LXNpemU6IDQwcHg7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgLXdl
YmtpdC1ib3gtZmxleDogMTsKLSAgICAtd2Via2l0LXBhZGRpbmctc3RhcnQ6IDIwcHg7Ci0gICAg
LXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDIwcHg7Ci0gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiAwOyAv
KiBvdmVycmlkZSBkZWZhdWx0IHN0eWxlc2hlZXQgbWFyZ2luICovCi19Ci0KLS5jb2xvci1waWNr
ZXItaW5wdXQgewotICAgIG1hcmdpbjogNDBweCAyNXB4IDIwcHggMjVweDsKLSAgICBkaXNwbGF5
OiAtd2Via2l0LWJveDsKLSAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOwotfQotCi0uY29s
b3ItcGlja2VyLXdlbGwgewotICAgIG1hcmdpbjogMjBweDsKLSAgICB3aWR0aDogMTI2cHg7Ci0g
ICAgaGVpZ2h0OiAxMjZweDsKLSAgICBib3JkZXI6IDJweCAjYWFhYWFhIHNvbGlkOwotICAgIGJv
cmRlci1yYWRpdXM6IDZweDsKLSAgICBib3gtc2hhZG93OiBpbnNldCAjZmVmZWZlIDAgMCAwIDNw
eDsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAtd2Via2l0LWJveC1hbGlnbjogY2Vu
dGVyOwotICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKLX0KLQotLmNvbG9yLXBpY2tlci1p
bnB1dCAuY29sb3ItcGlja2VyLXdlbGwgewotICAgIG1hcmdpbjogMDsKLX0KLQotLmNvbG9yLXBp
Y2tlci1zbGlkZXIgewotICAgIG1hcmdpbjogMjBweCAyNXB4OwotICAgIGRpc3BsYXk6IC13ZWJr
aXQtYm94OwotICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7Ci19Ci0KLS5jb2xvci1waWNr
ZXItc2xpZGVyLW91dHB1dCB7Ci0gICAgd2lkdGg6IDEwMXB4OwotICAgIGhlaWdodDogODVweDsK
LSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDIwcHg7
Ci19Ci0KLS5jb2xvci1waWNrZXItcmFuZ2UgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIC13
ZWJraXQtYm94LWZsZXg6IDE7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lICFpbXBvcnRh
bnQ7Ci0gICAgaGVpZ2h0OiAxNHB4OwotICAgIGJvcmRlcjogMnB4IHNvbGlkICNhYWFhYWE7Ci0g
ICAgYm9yZGVyLXJhZGl1czogN3B4OwotfQotCi0uY29sb3ItcGlja2VyLXJhbmdlOjotd2Via2l0
LXNsaWRlci10aHVtYiB7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lICFpbXBvcnRhbnQ7
Ci0gICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBL
R2dvQUFBQU5TVWhFVWdBQUFEd0FBQUE5Q0FZQUFBRHhvQXJYQUFBQUdYUkZXSFJUYjJaMGQyRnla
UUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpT
NTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJW
b2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2
WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpN
RFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lq
NGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1Rr
NUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5
WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRM
M2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJT
OTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1
amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5
Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5P
a2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2T1RKR1EwWTVNME5DTnpreE1URkZNVGc1T1RGRlJU
TTNORVpGTVVOQk9ERWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZPVEpHUTBZ
NU0wUkNOemt4TVRGRk1UZzVPVEZGUlRNM05FWkZNVU5CT0RFaVBpQThlRzF3VFUwNlJHVnlhWFps
WkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzVNa1pEUmprelFVSTNP
VEV4TVVVeE9EazVNVVZGTXpjMFJrVXhRMEU0TVNJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVH
MXdMbVJwWkRvNU1rWkRSamt6UWtJM09URXhNVVV4T0RrNU1VVkZNemMwUmtVeFEwRTRNU0l2UGlB
OEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRn
UEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGlWcnJDa0FBQWo5U1VSQlZIamE1SnQ3VE5SWEZzZC9N
d3dQNXdFelRNY3BWbXNSRmx5Z1dodFlhMzNFWUFSV1kweklHcE45dURiYVJxTkJZcUxySDVyNHA3
Vi9tTGhhdFJDMXRtdi9jSU5FcmFzMUdJUFB4ZTFxMmNxaTYwQmdkUUY1VG5uSU1Nek1udS9NdWZo
ajhodkZVWno1Mlp1Y0RBd3o5OTdQNzV4Nzdqbm5YaVRwWjlZMDQ5eS9uc1JPa2p6R3ozZVJ0SkVN
UkMyd3grTVo5WHRNVE14YjlQS21yRytOZ3NpYlQwSEUrNjNVLzhPbmpVL2p2WHBnR2pTT2ZueFhC
cVNGTEY2ODJMcDI3ZHIzVTFOVDA1S1RrMU1zRnNzNytJNVdxOVhoMWV2MUR1UFY2WFEyZDNSMFBH
eHNiSFNVbDVmLzg4S0ZDNTM0TTR0NENQK2lzWVlpRFF5d1dUTEltSTBiTjA1YnRXcFZRV1ptWnI3
UmFKd2NUcWQ5ZlgwUDd0NjllL0hZc1dQZjdkdTNyd0hQVlFaL2k4QzlrUURPSnBrZ1FJOGVQYnBn
eVpJbHY3ZGFyVGxLSC9iNWZOQ284bFBUYWlXTlJua3FuWjJkUDU0OWUvYnIxYXRYVjh2QUh4UDBu
WENBdzJrdzMxeVNQSkk1Ky9mdkwrM3U3bTZnQ2ZqazRuYTdmUzZYS3l6QmQ0UDd3eGdZQzJQeTJM
azhsM0Z0Smg1bzlvSUZDNVk0SEk0cSthU0doNGZEaGd3bDZGTStCc2JFMkpnRHo4WDBQQURQWXcv
d3ZHa2t1aTFidG1RZE9uUm92ODFtR3pGZm1saElrMzJSaGo0aE1IczBzOW1jdW1MRmlnSWE3NGRy
MTY1aEc3T3ltZmU5VE9CSkpIQkFPbHFyaTBwS1NqNk5qNDlQRWw1NlBFQ1Z3T0VIQUI0YkcydFl1
SEJoWVhwNitvUEt5c29tbVpaN1g0YlRlb3VCWXk5ZnZ2elJuRGx6MW9vLzBGcUxTTFJFd0NNL1g3
OSt2WHorL1BsSE1CMlMvNUU4ZkJIZ1JKSk1qRUVkZjVLWGwvZEg0WEZod3BGc09wMXV4TFBmdkhu
elMxTEVGd3g5bCtTbmNFdzZqcmNlbUhGQlVWRlJxVEN0U01PS2VmZzFSdENUSmsxNkx5MHQ3Yjlr
M28wY3huYndGdlpjd0Fnb2RKczNiODdldEduVExsbzdNY0k1UlV1RHBZbDlPRHM3KzhPQmdZRWFz
a1RBMnRpOHgyelNnSTFidEdqUm14VVZGV1Y2dlI0ZFNFTkRRMUdaQWNYRkJiWmpBbTR2TGk3K3VL
cXFxcFYrZFpIY0hnc3d2ajJUSko1aTI4OG1UNTc4UVRUREJrTTNOemRmSS9QK0V3UC9nS2sveTZU
Zmh5a2ZQSGd3bjF6L0tnRUw4NG5taGpVTjgwNUtTcHBDU21vNGMrWU10cXVKd2FhdFVjaGZjeWpv
TnpRMU5YMWxNcG13SlVrVThhZ2l1YWZZSUxBWjkvWStuRHAxNmg4b0NlbW5YMytVNTlkYWhZUkFS
ekZydnRwZzVYUEYzTUVBRm1ZS3FlRmZJUU5xYTJzN1FybHJLc3hZVGNCQ3k5aXFLTmxvdE52dEh5
R3pJcWxSV3NPL0lESHUyTEhqdllLQ2d0L2lqY0hCUWRYVnJMQnRJaWhKU0Vpd0VQajMxZFhWclp6
R2RnV2J0Qmttc0h6NThzTFhwV0RITERwbUMwUm9RZFVMM2JScDB6NVFpMmNPMVRCM2JGUE1vcE1y
VnZ4Z3djOXIxcXhKTlJnTWJ3alRBTEFhUlVTRFlGbTNibDBhY3liTGdaSHJ4aFFXRnM2VVhyT1du
NS8vTHZzcXU5eWtqWGlUZ3ZBcDhpZWw1b1pBaEJPTEtReHNsQVA3eTZvcEtTbnZ5TTFaelEwTXlK
dVpTU3VzV1N2Ymo3Vms4elo1NnFWMkRmTTZ0akduUnE1aFB6RHRYd21pblBvNm1EUVl3S1FFN0lj
bVY2NlhmL2gxMERBemFaVDI0VkdKdGRxQlE4MWZHN1JodTBUWlJPMU5NQWdtUlEyNzNlNUI4V1RV
cm1IQkFLWlF3RDZuMC9tSUV1Z1VKTktSS3NHK3JDWnFYV0NTbmh6QmpwaTAvMGl5cTZ1cnhmOFVk
RHJWYTFjd01OUEl1Yk1BUm1YQTA5RFEwQVF6Z1Ayck5ZNFdJaGpBSkFWS3R2MXlZT1NNM2t1WEx0
VUZlMnExaW1qTTVHWEdrZjBKNEhOSkV0dmIyLytpMSt1VEJnWUdWTHVPRVZJU0E4cTJUcHZOOWpz
cGNCSnhGZUR5Tll5Y3l1MXdPRzc1cTNuMEJiVnFGM05IWXhZM3MvbUNuUmFld3ZEcDA2Y3ZxdDJj
aFlDRllYOFN3SnFnTFFxbjYrYVdscFl5azhsa1I4YlIxOWVuS25NMkdvMStEOTNiMjl0R21kTEg5
RllQeVhVR0h4VnBlZmhOVjFWVjFiZkN0YXROcTJJN1lnWVhNM2xDbFdsUnFjK3lXQ3h2MU5mWGYw
RnJ3WUlnbkRadlZXaVhnaWIvZ1RrNXErN3AwNmQvMHQzZGpZTTFlT2xIb1FyeCtNQVFmYkQzeElr
VHgvMGZlTW9ObTJpTG5jVzFDTXdkREZMZ1hLbmphWVY0VWRCRGJTdnAzcjE3dTJrZFpIREVFdFhB
eWNtQjI0M2tmKzVsWkdSc1JWUXBCUTdUdWtObVM5eWNiUHNEVzdkdTNVZlp4bU41aDlGcXlwejh1
TFp2My82NUZEaExjakhMNkJoYktjbmdxQ1NGMW5FL0pkQXRjK2ZPL1pCTVJvT0FQTnFPVFhHMEln
N1JqaDgvWHI1NzkrNGJIRWIrWFZLNEJSRHFCZ0Nnc1FhczFkWFZqM0p5Y255Wm1aa3pBSXl0S3Zo
Q2FhUWFpdTNZaHRCcWFtcStXN2x5NVRkUzRQclNxQlBEWjYxaHVibWpYdjFMaEp3RVhqSnIxcXlG
b3JKUCsxeEVZU2xPR0RrRXI2dXJ1ekY3OXV6UE9NREFlWEE5eDgvU1dEVXN0TnpQOWR5NHlzcktP
N2dDTVhIaXhMZWg2UWtUSnNEOVJ3VFdhcldPNUx1MXRiVlhseTVkdW5kd2NOREpEdXBPS05obkFR
dG91SFU3ZFRoOCtQRGhXMWxaV2NOazN0bFkwNGhaWCtVSkk3WWV3SEkyNXoxMTZ0UTN5NVl0TzhL
d2NLNy9lQnJzV0lCRncyVXYzSGFMT1hueTVIM0tSaDdrNXViT3BLZ21EcHBHZGpMZTRQREVZcjI2
WEs3K1BYdjIvTG0wdFBROCt4b281WHZweVJYakZ3YVdPRm9CbFluV2N3dDU4TnZ6NXMzTG9FbFlZ
RjdRTnNLNmwzMkFucGlZNkYrdndvUmJXMXNkR3pacytMU3NyT3cyT3lpc1Y4ZFlZSi9sdEVJNU1n
UW1NNlRBSWJQaHdJRUR2eTR1THY1TlFrTENxRnV0UFQwOVlkL3B3b016bTgyajNpTUw2cTJvcVBq
cit2WHIvOGErQlNaY3krdDJ6RWNsNGNTTVdyWU1uTDJpcW0rdzIrMUp1M2J0V2x4WVdMalVZRENZ
Zzc4QWNKZzhDZ29LL3lQaFh4TDB3QlJyYWYzOS9UM256NS8vZHR1MmJSZmEydHA2ZUx1QnBkMlFu
bHdZbDhZVFdId1AwRGhMbnM3ZzBIakN6cDA3ODRxS2l1YWxwNmZQSUpENGNEcEh4SFQvL3YzYWMr
Zk9YYUgrYmpMZ1kzNnQ1elhyb2FUR0o2S3M4UVlPMWpiT1huRkhCTmRjNDFuaVNrcEtzbWlkWjVF
RjJDZ21mNXZNMUVwUmtVSGVBUndRbVg4bnhjRE5wTUgySzFldTFPM2R1N2VPQTM4WEM2b1cvNUVD
LytJRFVHOXdXUG1xZ0VVZlF1TjZEbFFNWEZDSVpkSHgzN1hTNkgvbEVlVlRyeXdmZDh2S01saXIv
Mll6OW5EdDNLY1VSNzh5WUhtdVRJTnJaRnFIaUx2V0FsZ1RBdGduQXhaM25qMWlqUVpEUmhSNERK
clhCcjJHQ25DOFFhL3FQK3VKaHZaL0FRWUFlR25aZkxyRDYyY0FBQUFBU1VWT1JLNUNZSUk9KTsK
LSAgICBoZWlnaHQ6NjFweDsKLSAgICB3aWR0aDo2MHB4OwotfQotCi0uY29sb3ItcGlja2VyLXJh
bmdlOjotd2Via2l0LXNsaWRlci10aHVtYjphY3RpdmUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6
dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRHdBQUFB
OUNBWUFBQUR4b0FyWEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1
Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxk
Q0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lq
OCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcx
d2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4
TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZj
bVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlY
Z3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5N
NmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0
YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNi
bk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pT
OVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5
emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVw
YVdRNk9USkdRMFk1TXpoQ056a3hNVEZGTVRnNU9URkZSVE0zTkVaRk1VTkJPREVpSUhodGNFMU5P
a1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2T1RKR1EwWTVNemxDTnpreE1URkZNVGc1T1RGRlJU
TTNORVpGTVVOQk9ERWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdG
dVkyVkpSRDBpZUcxd0xtbHBaRG81TWtaRFJqa3pOa0kzT1RFeE1VVXhPRGs1TVVWRk16YzBSa1V4
UTBFNE1TSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzVNa1pEUmprek4wSTNP
VEV4TVVVeE9EazVNVVZGTXpjMFJrVXhRMEU0TVNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJq
NGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJ
L1BxeEZ1VTRBQUFqSlNVUkJWSGphNUpzTGJGUG5GY2ZQOWJWako3R2R4SEhTSkl1WFpoQWVJVUFl
aEdWcGlFWTBHSW9pVVNpMFdzbzIwWTFWazFwcG10WUNtcVoxMnRoZ0wwMGFVaCtEdGFoZFZrb3BL
b0pPRkpZV0NnRVMwcVI1RUVoNDVtRWI1NFh0Skk1OWZlL2RkNXhqWkt5OFNVanNmZWdmTzNHNDMv
M2Q4NTN6bmZOOVh3RCt6eG8zeTlkWE14bVk5RXpSVE5xZ2ZtVjZIV1FhWUhJdzlURzU1eTN3bjFy
c0QzMy95dEtZQlBhU3doUlBnRnhBUDl3b2Zjb0I0UDczQ04vTFpHYlg3eDZ2ZjliZmxPNVhPUk5Q
alhXcVlpOFpCQm5IcEVDWlZ1VEY1Vy9hdGl3eFBTTk5HMjlNMUJvU3Z1YWo1bmxmdjdJb2VuM203
ZSsxT0h0c1Z0dnR0cnMxeDk1cjdtaW9WZEtvU0dQWDdpZjROZ1l2ekxXRkVXd1pVeElOV1VWTzJW
YlQ2aTAvTEU3SlhQRXRQbHFmM09NV3dTSElNQ1JLNEJUa2g4YXh2M09ka29Nb3BRTDBLZzZNYWg3
RVFZZkZmTFhoWXZXSGg4N1ZuVGpTd1g1Rm9tRnZaV3IrWTR0ZDh0L0FxMU8wOEtNQXA1UFFFbnpa
emozNTJhWFBiRklZbmxqVU9TU0MyU1hDZ0ZlYTFvVzFERDRsa29mVUtCNmt2bnV0OVo4Y1BYWmkz
eTlyMkVjaStmbHRCbjM3Y1FIajhNMG1QK1hYdmJ3N3U3Qjh4M2FuSmlhMXpTbEFuMGVhMFNCamlG
QkFoazRGdW1GN1oxWEZQOTQrL2ZjLzFCTzRtUW5mQzdNSkhNV1V5MlJNWHBJVlYvN25nejlXcEM0
c2JHU3U1UkFrbU0ybVZ5bGdPUXNWVXVlTnFvcGYvT2lBNVZvVCtuWVAwNWRNUTVPOURqK1ZoODFV
d0JTN2F2TzJqT2YrOHM1dmJrWVlGemN4V0xjb3ovcjhpWDIwTTFlUjlmR205VnUrVnpUVWEyc3h0
elRnOUpYTWhQQ3VtUVEyTWozRkZGbTI4L2VGQlQvZHRldVNrOVBOOVBDZFRNT1JaUEVxb3RhczIx
QWNHMmV3dGw3NHI0MzlPSlVpK2RCTURHbWNWd3R4Q3R2KzVwR3QrdnlTNTJyNzNPQ1ZZVTRiQyt5
UVoxQ0RvNmJ5OE5zdmJqM0Nmb1JUWEJWVDk2TllHS2VhYnpKcFhqaHdyQnhXRm0rdHUrOEJDZWEr
NFQxMHNwa2dJVzFCVm01Qm9iTHUrT0ZteWdPczR3VXlmb0pvbkkrSlJObnV2VVdhNHFlM1gzVUlN
TjlhdDF1Q2VGUDZVbE5DdkxuMS9Ca3JUWk1XZWlaVEFsNkZDVVh1cHZLTVpUdDI3ZnpLN3VWaG5q
YUV6c3pKelJON3pGOVpyalc2YUdSMlRRVVkwOFFGcVZtNUNhVjdEL3k2MnNscEpaamZ6ZXFXK1RY
ZkxzbnR2SHkyeW1HejhPVFRmWk1KV2ppVTF6TEZ2SFN5ZG5lOU9qbG5TSlFoRkZvVXowSDJzTGwy
ZjltcWZleGJyR28rQy9ibjBTeThFb2Z5K3ArL1ZtQmZXYko1THFhZTZUWk0xVVZ0YkVwNm5MYjk1
c1hQYldROGEzRHlIMXkvcHFuVW1naFQyYmJuelRqUnM0dUVrcnJZUGVPOUl3T3lFTk9ZRnNiS3g3
amgxVDFyek9uNUpXNUpobEJzVGs2dHpVd3lXTnJPbjJrbnQ3MDNsb1V4bzFJYTF6NjkwY0VxSFRt
Z0lnOGw0YjBqQTlYN3hyRXNqT25ad3RYbE96SWR1UnMydWxpZ0NsVmdsRXVwaVVueU9wcTZHcjkw
b3RHcHJIekl3bGpFODJuck54ZjNDOHgzUS93Zk1pQUxHVFZwdENVZTMzQWVURnFVTFVzUUZnMVpn
b2UxMzhJNnpFNHkxMjgwV1RtTlFhSzhMTlNGTEZtbHo2UlI1cVVQQk1ha1c1RmF1RzdKSUN1RFFt
MHFHa3ZJa3J4NjdTTGlOQVFPYWJTd1FrcElUWllodkpyTW1BaFlGd2lNSzJHOGFFZ3lTV0ZHakV3
VXVHSUNnVFU0UVErcHRRWVp3b3NZbVNqNTBBUUNxM3pBb0ZTSG00V1JpWUJWZ2NDWWR5cTh5b2pJ
Y1BOaFpDSWZqZ2llaHdFTEk1a1BMK0RnWXM4UExQcStDQjYzcEZCcHdpcG9NYVpBUmord3Iwam1S
Y0h0RGJNaGpVeUJqTW9IdnMyU0UzbmdmcThVR1pNWVZ2TXdZNkxFYXlndzB4cjBoV3BIankyVUs2
VFJoRXlCakg0TDIzMFd0dHpwa3I2UkYxNlpGbU1pQzlzRExZeXJlK0pRL1JkdDRXWmhaS0tBMVJj
SWpQVHV6dE1mdFV1dVFXZTRGQS9JZ2t3d2NtYkVIamlrOFdIZ25veGUwZG5hTEM3SUxnaUxDTTFZ
YUgyNm14Z2ZXRmltN1FtdjR0TEppK0V5bkpHRmdDM0J3TmpROUE3cjBiZWFwUUY3VDZqRElnT3kw
RnBXKzJpcmx1allHTUlGN3NycFNpd2lRbG5JUU1tR3paOWxCUVBqZzdtQjZhZno0R3RubWNQYlE5
YTY3TjZSQVZtSVNSNXJJUjZqbVY0U1BGcDFuTkVEQzNOV2htUzBPdjNlQjhPWFA3M08zdDJaQ0Zp
bThHM3kxSjN0VnExOU5ndWk5WEVobFdoMGQ5MGUrTzBQS3NoM01XZ05UN1NaSnRCK2pFRmx2ZGtC
QmFVRlFDZm41bi94SzNqazExOTVYZWk2aFg2TEZ1NEl0TzVZd1BnTGVCeklJRmp1Z01McnNjSHlv
andaT0c3ZSsrNnBkOTkzbmZobkhYdmJ5VlFkR0t6R0EvWkRZeXIyaEhpOTFxbElTcE80dEtWTDVy
TnhwYWFxTDl4L2UvazRiYXVjaHpHT01ZMjN2aUVROU5mRjZsUHQzSW9pSXhlZmtqb3YvZlpXWTUz
blYxdmVvUkx3RWsxRjhsU0JaWHBLcUVUdThuOXV3TExDQkloUFNwbFhzRzMxVjhUZmJUc2tDeDYw
TEo3S3V3VXc5a0dqaVZhdy9GRTdrbDB3V3FwOHZ4a1NUVjQydkJjeGwrYm1sbFNXcEhNZkhmZnVm
ZUZEZ3NYcHAyRTgyTWtBKzV1RndydFJydm4wTGdnZUs3ZDRWU2J3U3RYY3JNd051NlREZnowa3Zi
dm5ISXdjSnNlVHRvMEVLODhFTURZOHo0am5KZUxsNjFmNnVWc05WN25NZ25TSTBzVThWdGp1cm5a
NS84L2VrTTRlYmFIWjVIT0t5aFBDVGhYWTc5TjRiRGRhdm5kWGxFNGVySVlZd3lDa1pqd0pTbVhF
cklLNlhZTnk1YjgvRnZkOHY0TDFiYU9DNEFJWll0SWJ2TlB4UXdVOXFCd1lPYzhWemVrTU9uaCta
eEZYVUZvQ2tWcjlqSUs2Qmh6eXBVOHE0Vi83enN2T1BnZEY0bFlZT1NzdFRnVjJ1c0QrLzRmUW1I
WXV4MVFVUnZadTFMRHBwUlhjNnUvbWcybnhFbENxcG1kMWxqRkJ4L1ZyY3ZXcEdqaTJ2NEZ5L0dI
S25CckpxdUtMTlQzeW0vbEdlQnpBd2RiR0RTczhBWVFuYjNXMHJhR0M3NVJuY0ZsUExZUzR4SGpB
YlV0dHJBRWlOSkhCQVFnRzd2ZEJkNmNGK20yOWN0T0ZHM0Ntb28zeUFBOGxFcmhpMGV4ZmUyT2dE
Nno2dUlIOTEvQmJIR0dlaEpGRDIwYXl1cEkrNCtrQkJmNHB6NE9za0lhblNDc1V3eFNRTEZUeHVP
Z3orU2MxUFE4RnByZW1DUHpJUlFIZGdPK21XZWRlc3NRMUFrd2c0ZDh2eGNMSW54Q29nb0FGOHN2
N05NVjBrL3dQUUFxR2ZGVHJ6RmJ6VzFJUjlEcldEQ0FGdlliYlJ1YmN0UDhKTUFER3JnUDlHQ0ZJ
MEFBQUFBQkpSVTVFcmtKZ2dnPT0pOwotfQotCi0ucmVkLXJhbmdlci1iZyB7Ci0gICAgYmFja2dy
b3VuZDogI2ZmMWUxZTsKLX0KLQotLmdyZWVuLXJhbmdlci1iZyB7Ci0gICAgYmFja2dyb3VuZDog
IzI0ZmYyNDsKLX0KLQotLmJsdWUtcmFuZ2VyLWJnIHsKLSAgICBiYWNrZ3JvdW5kOiAjMjEyMWZm
OwotfQotCi1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChoZWlnaHQ6IDc2OHB4KSB7Ci0gICAgLmNv
bG9yLXBpY2tlci1jb250ZW50IHsKLSAgICAgICAgbWF4LWhlaWdodDogNDc1cHg7Ci0gICAgICAg
IG92ZXJmbG93LXk6IHNjcm9sbDsKLSAgICB9Ci19Ci0KLUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQg
KGhlaWdodDogNzIwcHgpIHsKLSAgICAuY29sb3ItcGlja2VyLWNvbnRlbnQgewotICAgICAgICBt
YXgtaGVpZ2h0OiA0NzBweDsKLSAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwotICAgIH0KLQot
ICAgIC5jb2xvci1waWNrZXItd2VsbCB7Ci0gICAgICAgIG1hcmdpbjogMTBweDsKLSAgICAgICAg
d2lkdGg6IDEwNnB4OwotICAgICAgICBoZWlnaHQ6IDEwNnB4OwotICAgIH0KLX0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2JlcnJ5L2NvbG9yQ29udHJvbEJsYWNrQmVycnku
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2JsYWNrYmVycnkvY29s
b3JDb250cm9sQmxhY2tCZXJyeS5qcwkocmV2aXNpb24gMTYxNTk2KQorKysgU291cmNlL1dlYkNv
cmUvUmVzb3VyY2VzL2JsYWNrYmVycnkvY29sb3JDb250cm9sQmxhY2tCZXJyeS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQsIDIwMTIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKi8KLQotKGZ1
bmN0aW9uICgpewotdmFyIF9kcmFnU3RhcnRQb2ludCwKLSAgICBfZHJhZ0RlbHRhID0gMCwKLSAg
ICBDT0xPUl9XRUxMX1dJRFRIID0gKHNjcmVlbi53aWR0aCA9PT0gNzIwICYmIHNjcmVlbi5oZWln
aHQgPT09IDcyMCkgPyAxMzAgOiAxNzAsIC8vIGtlZXAgaW4gc3luYyB3aXRoIGNvbG9yQ29udHJv
bEJsYWNrQmVycnkuY3NzCi0gICAgTUFSR0lOX09GRlNFVCA9IDE0OwotCi12YXIgc2V0Q29sb3JX
ZWxsQ29sb3IgPSBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29sb3ItcGlja2VyLWN1cnJlbnQnKS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIycgKyB2
YWx1ZTsKLX07Ci0KLXZhciBoZXhUb1IgPSBmdW5jdGlvbiAoaCkge3JldHVybiBwYXJzZUludCho
LnN1YnN0cmluZygwLCAyKSwgMTYpO307Ci0KLXZhciBoZXhUb0cgPSBmdW5jdGlvbiAoaCkge3Jl
dHVybiBwYXJzZUludChoLnN1YnN0cmluZygyLCA0KSwgMTYpO307Ci0KLXZhciBoZXhUb0IgPSBm
dW5jdGlvbiAoaCkge3JldHVybiBwYXJzZUludChoLnN1YnN0cmluZyg0LCA2KSwgMTYpO307Ci0K
LXZhciBjdXRIZXggPSBmdW5jdGlvbiAoaCkge3JldHVybiAoaC5jaGFyQXQoMCkgPT09ICcjJykg
PyBoLnN1YnN0cmluZygxLCA3KSA6IGg7fTsKLQotdmFyIHRvSGV4ID0gZnVuY3Rpb24gKG4pIHsK
LSAgICBuID0gcGFyc2VJbnQobiwgMTApOwotICAgIGlmIChpc05hTihuKSkgewotICAgICAgICBy
ZXR1cm4gJzAwJzsKLSAgICB9Ci0gICAgbiA9IE1hdGgubWF4KDAsIE1hdGgubWluKG4sIDI1NSkp
OwotICAgIHJldHVybiAnMDEyMzQ1Njc4OUFCQ0RFRicuY2hhckF0KChuIC0gbiAlIDE2ICkgLyAx
NikgKyAnMDEyMzQ1Njc4OUFCQ0RFRicuY2hhckF0KG4gJSAxNik7Ci19OwotCi12YXIgcmdiVG9I
ZXggPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGNvbG9yLAotICAgICAgICByZWQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgncmVkLXJhbmdlJyksCi0gICAgICAgIGdyZWVuID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2dyZWVuLXJhbmdlJyksCi0gICAgICAgIGJsdWUgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnYmx1ZS1yYW5nZScpOwotCi0gICAgcmV0dXJuIGNvbG9yID0gdG9IZXgo
cmVkLnZhbHVlKSArIHRvSGV4KGdyZWVuLnZhbHVlKSArIHRvSGV4KGJsdWUudmFsdWUpOwotfTsK
LQotdmFyIHN3YXRjaFVwZGF0ZUNvbG9yID0gZnVuY3Rpb24gKGl0ZW0sIGNoZWNrTWFyaykgewot
ICAgIHVwZGF0ZUhleChpdGVtLm15Y29sb3IpOwotICAgIHNldENvbG9yV2VsbENvbG9yKGl0ZW0u
bXljb2xvcik7Ci0gICAgaXRlbS5hcHBlbmRDaGlsZChjaGVja01hcmspOwotICAgIHZhciBjaGFu
Z2UgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpOwotICAgIGNoYW5nZS5pbml0
RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb2xvci1waWNrZXItaGV4LWlucHV0JykuZGlzcGF0Y2hFdmVudChjaGFuZ2UpOwotICAgIG9r
KCk7Ci19OwotCi12YXIgaGV4VXBkYXRlQ29sb3IgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGNv
bG9yU3RyaW5nID0gY3V0SGV4KHRoaXMudmFsdWUpOwotICAgIC8vIE9ubHkgdmFsaWQgMyBkaWdp
dHMgaW5wdXQgYW5kIDYgZGlnaXRzIGlucHV0LgotICAgIGlmICgoY29sb3JTdHJpbmcubGVuZ3Ro
ID09PSAzIHx8IGNvbG9yU3RyaW5nLmxlbmd0aCA9PT0gNikgJiYgKC9eKFswLTlBLUZdezMsNn0k
KS9pLnRlc3QoY29sb3JTdHJpbmcpKSkgewotICAgICAgICAvLyBBdXRvIGZpbGwgMyBkaWdpdHMg
aW5wdXQuICNBQkMgdG8gI0FBQkJDQwotICAgICAgICBpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09
PSAzKSB7Ci0gICAgICAgICAgICBjb2xvclN0cmluZyA9IGNvbG9yU3RyaW5nWzBdICsgY29sb3JT
dHJpbmdbMF0gKyBjb2xvclN0cmluZ1sxXSArIGNvbG9yU3RyaW5nWzFdICsgY29sb3JTdHJpbmdb
Ml0gKyBjb2xvclN0cmluZ1syXTsKLSAgICAgICAgfQotICAgICAgICBzZXRDb2xvcldlbGxDb2xv
cihjb2xvclN0cmluZyk7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWQtc2xp
ZGVyLW91dHB1dCcpLnZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlZC1yYW5nZScp
LnZhbHVlID0gaGV4VG9SKGNvbG9yU3RyaW5nKTsKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2dyZWVuLXNsaWRlci1vdXRwdXQnKS52YWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdncmVlbi1yYW5nZScpLnZhbHVlID0gaGV4VG9HKGNvbG9yU3RyaW5nKTsKLSAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsdWUtc2xpZGVyLW91dHB1dCcpLnZhbHVlID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsdWUtcmFuZ2UnKS52YWx1ZSA9IGhleFRvQihjb2xvclN0
cmluZyk7Ci0gICAgfQotICAgIHZhciBjb2xvciA9IHJnYlRvSGV4KCk7Ci0gICAgdXBkYXRlSGV4
KGNvbG9yKTsKLX07Ci0KLXZhciB1cGRhdGVIZXggPSBmdW5jdGlvbiAoY29sb3IpIHsKLSAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29sb3ItcGlja2VyLWhleC1pbnB1dCcpLnZhbHVlID0g
JyMnICsgY29sb3I7Ci19OwotCi12YXIgcmFuZ2VVcGRhdGVDb2xvciA9IGZ1bmN0aW9uIChvdXRw
dXQsIGlucHV0KSB7Ci0gICAgaWYgKGlucHV0LnZhbHVlIDwgMCkgewotICAgICAgICBpbnB1dC52
YWx1ZSA9IDA7Ci0gICAgfSBlbHNlIGlmIChpbnB1dC52YWx1ZSA+IDI1NSkgewotICAgICAgICBp
bnB1dC52YWx1ZSA9IDI1NTsKLSAgICB9Ci0KLSAgICAvL3VwZGF0ZSBvdXRwdXQKLSAgICBvdXRw
dXQudmFsdWUgPSBpbnB1dC52YWx1ZTsKLSAgICAvL3VwZGF0ZSBoZXggY29sb3JzCi0gICAgdmFy
IGNvbG9yID0gcmdiVG9IZXgoKTsKLSAgICB1cGRhdGVIZXgoY29sb3IpOwotICAgIC8vdXBkYXRl
IGNvbG9yIHdlbGwKLSAgICBzZXRDb2xvcldlbGxDb2xvcihjb2xvcik7Ci19OwotCi12YXIgY2Fs
Y3VsYXRlU3dhdGNoQmxvY2tQYWRkaW5nID0gZnVuY3Rpb24gKCkgewotICAgIHZhciBzd2F0Y2hC
bG9jayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2xvci1waWNrZXItc3dhdGNoLWJsb2Nr
JykKLSAgICAgICAgcGFkZGluZyA9IChzd2F0Y2hCbG9jay5jbGllbnRXaWR0aCAtIDQgKiBDT0xP
Ul9XRUxMX1dJRFRIKSAvIDIgKyAncHgnOwotICAgIHN3YXRjaEJsb2NrLnN0eWxlLnBhZGRpbmdM
ZWZ0ID0gcGFkZGluZzsKLSAgICBzd2F0Y2hCbG9jay5zdHlsZS5wYWRkaW5nUmlnaHQgPSBwYWRk
aW5nOwotfQotCi12YXIgb3BlblN3YXRjaGVzID0gZnVuY3Rpb24gKCkgewotICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdzd2F0Y2hlcycpLmNsYXNzTGlzdC5yZW1vdmUoJ2NvbG9yLXBpY2tl
ci1pbmFjdGl2ZS1mb250Jyk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlcnMn
KS5jbGFzc0xpc3QuYWRkKCdjb2xvci1waWNrZXItaW5hY3RpdmUtZm9udCcpOwotICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjb2xvci1waWNrZXItc3dhdGNoLWJsb2NrJykuY2xhc3NMaXN0
LnJlbW92ZSgnY29sb3ItcGlja2VyLW9mZicpOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb2xvci1waWNrZXItc2xpZGVyLWJsb2NrJykuY2xhc3NMaXN0LmFkZCgnY29sb3ItcGlja2Vy
LW9mZicpOwotICAgIHZhciBtaWRwb2ludCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzbGlk
ZS1idXR0b24nKS5vZmZzZXRXaWR0aDsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2xp
ZGUtYnV0dG9uJykuc3R5bGVbJy13ZWJraXQtdHJhbnNmb3JtJ10gPSAndHJhbnNsYXRlM2QoJyAr
IG1pZHBvaW50ICsgJ3B4LCAwLCAwKSc7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Ns
aWRlLWJ1dHRvbicpLnRyYW5zbGF0aW9uID0gbWlkcG9pbnQ7Ci0gICAgY2FsY3VsYXRlU3dhdGNo
QmxvY2tQYWRkaW5nKCk7Ci19OwotCi12YXIgb3BlblNsaWRlcnMgPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlcnMnKS5jbGFzc0xpc3QucmVtb3ZlKCdj
b2xvci1waWNrZXItaW5hY3RpdmUtZm9udCcpOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdzd2F0Y2hlcycpLmNsYXNzTGlzdC5hZGQoJ2NvbG9yLXBpY2tlci1pbmFjdGl2ZS1mb250Jyk7
Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbG9yLXBpY2tlci1zd2F0Y2gtYmxvY2sn
KS5jbGFzc0xpc3QuYWRkKCdjb2xvci1waWNrZXItb2ZmJyk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2NvbG9yLXBpY2tlci1zbGlkZXItYmxvY2snKS5jbGFzc0xpc3QucmVtb3ZlKCdj
b2xvci1waWNrZXItb2ZmJyk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlLWJ1
dHRvbicpLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGUzZCgwLCAwLCAwKSc7Ci0g
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlLWJ1dHRvbicpLnRyYW5zbGF0aW9uID0g
MDsKLX07Ci0KLXZhciByb3RhdGlvbkhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgaWYgKGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdzbGlkZS1idXR0b24nKS50cmFuc2xhdGlvbikgewotICAg
ICAgICB2YXIgbWlkcG9pbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2xpZGUtYnV0dG9u
Jykub2Zmc2V0V2lkdGg7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzbGlkZS1i
dXR0b24nKS5zdHlsZVsnLXdlYmtpdC10cmFuc2Zvcm0nXSA9ICd0cmFuc2xhdGUzZCgnICsgbWlk
cG9pbnQgKyAncHgsIDAsIDApJzsKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Ns
aWRlLWJ1dHRvbicpLnRyYW5zbGF0aW9uID0gbWlkcG9pbnQ7Ci0gICAgfQotICAgIGNhbGN1bGF0
ZVN3YXRjaEJsb2NrUGFkZGluZygpOwotfTsKLQotdmFyIHRvdWNoU3RhcnRIYW5kbGVyID0gZnVu
Y3Rpb24gKGV2dCkgewotICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICBfZHJhZ0RlbHRh
ID0gMDsKLSAgICBfZHJhZ1N0YXJ0UG9pbnQgPSBldnQudG91Y2hlc1swXS5wYWdlWDsKLSAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2xpZGUtaGlnaGxpZ2h0JykuY2xhc3NMaXN0LmFkZCgn
Y29sb3ItcGlja2VyLWhpZ2hsaWdodCcpOwotfTsKLQotdmFyIHRvdWNoTW92ZUhhbmRsZXIgPSBm
dW5jdGlvbiAoZXZ0KSB7Ci0gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOwotICAgIGlmICghX2Ry
YWdTdGFydFBvaW50KSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgX2RyYWdEZWx0YSA9
IGV2dC50b3VjaGVzWzBdLnBhZ2VYIC0gX2RyYWdTdGFydFBvaW50OwotICAgIHZhciBidXR0b24g
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2xpZGUtYnV0dG9uJyk7Ci0gICAgaWYgKGJ1dHRv
bi50cmFuc2xhdGlvbiArIF9kcmFnRGVsdGEgPiAwICYmIGJ1dHRvbi50cmFuc2xhdGlvbiArIGJ1
dHRvbi5vZmZzZXRXaWR0aCArIF9kcmFnRGVsdGEgPCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3dpdGNoZXInKS5vZmZzZXRXaWR0aCAtIE1BUkdJTl9PRkZTRVQpIHsKLSAgICAgICAgYnV0dG9u
LnN0eWxlWyctd2Via2l0LXRyYW5zZm9ybSddID0gJ3RyYW5zbGF0ZTNkKCcgKyAoYnV0dG9uLnRy
YW5zbGF0aW9uICsgX2RyYWdEZWx0YSkgKyAncHgsIDAsIDApJzsKLSAgICB9Ci19Ci0KLXZhciB0
b3VjaEVuZEhhbmRsZXIgPSBmdW5jdGlvbiAoZXZ0KSB7Ci0gICAgZXZ0LnByZXZlbnREZWZhdWx0
KCk7Ci0gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOwotICAgIHZhciBtaWRwb2ludCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdzbGlkZS1idXR0b24nKS5vZmZzZXRXaWR0aDsKLSAgICBpZiAo
X2RyYWdEZWx0YSA9PT0gMCkgewotICAgICAgICBpZiAoX2RyYWdTdGFydFBvaW50ID4gbWlkcG9p
bnQpIHsKLSAgICAgICAgICAgIG9wZW5Td2F0Y2hlcygpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgb3BlblNsaWRlcnMoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoTWF0aC5h
YnMoX2RyYWdEZWx0YSkgPiA4KSB7IC8vIG5vdCBhIHZhbGlkIHRvdWNoIG1vdmUgaWYgX2RyYWdE
ZWx0YSA8PSA4Ci0gICAgICAgIHZhciBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c2xpZGUtYnV0dG9uJyk7Ci0gICAgICAgIGlmIChidXR0b24udHJhbnNsYXRpb24gKyBidXR0b24u
b2Zmc2V0V2lkdGggLyAyICsgX2RyYWdEZWx0YSA+IG1pZHBvaW50KSB7Ci0gICAgICAgICAgICBv
cGVuU3dhdGNoZXMoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG9wZW5TbGlkZXJz
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgX2RyYWdTdGFydFBvaW50ID0gdW5kZWZpbmVkOwot
ICAgIF9kcmFnRGVsdGEgPSAwOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzbGlkZS1o
aWdobGlnaHQnKS5jbGFzc0xpc3QucmVtb3ZlKCdjb2xvci1waWNrZXItaGlnaGxpZ2h0Jyk7Ci19
Ci0KLXZhciBvayA9IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbG9yLXBpY2tlci1oZXgtaW5wdXQnKS52YWx1ZTsKLSAgICBkb2N1bWVu
dC5ib2R5LmlubmVySFRNTCA9ICcnOwotICAgIHdpbmRvdy5zZXRWYWx1ZUFuZENsb3NlUG9wdXAo
cmVzdWx0LCB3aW5kb3cucG9wVXApOwotfTsKLQotdmFyIGNhbmNlbCA9IGZ1bmN0aW9uICgpIHsK
LSAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICcnOwotICAgIHdpbmRvdy5zZXRWYWx1ZUFu
ZENsb3NlUG9wdXAoJy0xJywgd2luZG93LnBvcFVwKTsKLX07Ci0KLXZhciBjcmVhdGVSYW5nZSA9
IGZ1bmN0aW9uIChjb2xvcikgewotICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2lucHV0Jyk7Ci0gICAgcmFuZ2Uuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3JhbmdlJyk7Ci0g
ICAgcmFuZ2Uuc2V0QXR0cmlidXRlKCdpZCcsIGNvbG9yICsgJy1yYW5nZScpOwotICAgIHJhbmdl
LnNldEF0dHJpYnV0ZSgnbWluJywgJzAnKTsKLSAgICByYW5nZS5zZXRBdHRyaWJ1dGUoJ21heCcs
ICcyNTUnKTsKLSAgICByYW5nZS5jbGFzc0xpc3QuYWRkKCdjb2xvci1waWNrZXItcmFuZ2UnKTsK
LSAgICByYW5nZS5jbGFzc0xpc3QuYWRkKGNvbG9yICsgJy1yYW5nZXItYmcnKTsKLSAgICByZXR1
cm4gcmFuZ2U7Ci19OwotCi12YXIgY3JlYXRlT3V0cHV0ID0gZnVuY3Rpb24gKGNvbG9yKSB7Ci0g
ICAgdmFyIG91dHB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Ci0gICAgb3V0
cHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdudW1iZXInKTsKLSAgICBvdXRwdXQuc2V0QXR0cmli
dXRlKCdtaW4nLCAnMCcpOwotICAgIG91dHB1dC5zZXRBdHRyaWJ1dGUoJ21heCcsICcyNTUnKTsK
LSAgICBvdXRwdXQuc2V0QXR0cmlidXRlKCdpZCcsIGNvbG9yICsgJy1zbGlkZXItb3V0cHV0Jyk7
Ci0gICAgb3V0cHV0LmNsYXNzTGlzdC5hZGQoJ2NvbG9yLXBpY2tlci1zbGlkZXItb3V0cHV0Jyk7
Ci0gICAgcmV0dXJuIG91dHB1dDsKLX07Ci0KLXZhciBsYXlvdXQgPSBmdW5jdGlvbiAocGlja2Vy
UGFyYW1zKSB7Ci0gICAgdmFyIHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyks
Ci0gICAgICAgIGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAotICAgICAg
ICBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgcG9wdXAuY2xhc3NO
YW1lID0gJ3BvcHVwLWFyZWEnOwotICAgIHBvcHVwLmNsYXNzTGlzdC5hZGQoJ2NvbG9yLXBpY2tl
ci1wb3B1cC1hcmVhJyk7Ci0gICAgcG9wdXAuaWQgPSAncG9wdXAtYXJlYSc7Ci0gICAgcG9wdXAu
ZGlyID0gcGlja2VyUGFyYW1zLmRpcmVjdGlvbjsKLSAgICBoZWFkZXIuY2xhc3NOYW1lID0gJ3Bv
cHVwLWhlYWRlcic7Ci0gICAgaGVhZGVyLmlubmVyVGV4dCA9IHBpY2tlclBhcmFtcy51aVRleHQu
dGl0bGU7Ci0gICAgcG9wdXAuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKLSAgICBib2R5LmNsYXNzTmFt
ZSA9ICdwb3B1cC1jb250ZW50JzsKLSAgICBib2R5LmlkID0gJ3BvcHVwLWNvbnRlbnQnOwotICAg
IGJvZHkuZGlyID0gJ2x0cic7IC8vIEZJWE1FOiBSVEwgVUkgc3BlY2lmaWNhdGlvbnMgbm90IGRv
bmUgeWV0Ci0gICAgcG9wdXAuYXBwZW5kQ2hpbGQoYm9keSk7Ci0KLSAgICB2YXIgZnJhZ21lbnQg
PSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0KLSAgICB2YXIgY29udGVudCA9
IGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKLSAg
ICBjb250ZW50LmNsYXNzTGlzdC5hZGQoJ2NvbG9yLXBpY2tlci1jb250ZW50Jyk7Ci0KLSAgICAv
LyBUd28gYnV0dG9ucyBhdCB0b3AuCi0gICAgdmFyIHN3aXRjaGVyID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7Ci0gICAgc3dpdGNoZXIuY2xhc3NMaXN0LmFkZCgnY29sb3ItcGlja2Vy
LXN3aXRjaGVyJyk7Ci0gICAgc3dpdGNoZXIuaWQgPSAnc3dpdGNoZXInOwotICAgIGNvbnRlbnQu
YXBwZW5kQ2hpbGQoc3dpdGNoZXIpOwotCi0gICAgdmFyIHNsaWRlckJ1dHRvbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIHNsaWRlckJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdj
b2xvci1waWNrZXItYnV0dG9uJyk7Ci0gICAgc2xpZGVyQnV0dG9uLmlkID0gJ3NsaWRlLWJ1dHRv
bic7Ci0gICAgdmFyIHNsaWRlckhpZ2hsaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOwotICAgIHNsaWRlckhpZ2hsaWdodC5pZCA9ICdzbGlkZS1oaWdobGlnaHQnOwotICAgIHNs
aWRlckJ1dHRvbi5hcHBlbmRDaGlsZChzbGlkZXJIaWdobGlnaHQpOwotICAgIHN3aXRjaGVyLmFw
cGVuZENoaWxkKHNsaWRlckJ1dHRvbik7Ci0KLSAgICBzd2l0Y2hlci5hZGRFdmVudExpc3RlbmVy
KCd0b3VjaHN0YXJ0JywgdG91Y2hTdGFydEhhbmRsZXIpOwotICAgIHN3aXRjaGVyLmFkZEV2ZW50
TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRvdWNoTW92ZUhhbmRsZXIpOwotICAgIHN3aXRjaGVyLmFk
ZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdG91Y2hFbmRIYW5kbGVyKTsKLQotICAgIHZhciBz
bGlkZXJzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgc2xpZGVycy5jbGFz
c0xpc3QuYWRkKCdjb2xvci1waWNrZXItb3B0aW9uJyk7Ci0gICAgc2xpZGVycy5pZCA9ICdzbGlk
ZXJzJzsKLSAgICBzd2l0Y2hlci5hcHBlbmRDaGlsZChzbGlkZXJzKTsKLSAgICBzbGlkZXJzLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBpY2tlclBhcmFtcy51aVRleHQuc2xp
ZGVyc0xhYmVsKSk7Ci0KLSAgICB2YXIgc3dhdGNoZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKTsKLSAgICBzd2F0Y2hlcy5jbGFzc0xpc3QuYWRkKCdjb2xvci1waWNrZXItb3B0aW9u
Jyk7Ci0gICAgc3dhdGNoZXMuaWQgPSAnc3dhdGNoZXMnOwotICAgIHN3aXRjaGVyLmFwcGVuZENo
aWxkKHN3YXRjaGVzKTsKLSAgICBzd2F0Y2hlcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShwaWNrZXJQYXJhbXMudWlUZXh0LnN3YXRjaGVzTGFiZWwpKTsKLQotICAgIC8vIFN3
YXRjaGVzIGJsb2NrCi0gICAgdmFyIHN3YXRjaEJsb2NrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7Ci0gICAgc3dhdGNoQmxvY2suY2xhc3NMaXN0LmFkZCgnY29sb3ItcGlja2VyLWJs
b2NrJyk7Ci0gICAgc3dhdGNoQmxvY2suaWQgPSAnY29sb3ItcGlja2VyLXN3YXRjaC1ibG9jayc7
Ci0gICAgY29udGVudC5hcHBlbmRDaGlsZChzd2F0Y2hCbG9jayk7Ci0KLSAgICB2YXIgU1dBVENI
X0NPTE9SUyA9IFtbJyNmZmZmZmYnLCAnI2ZmZmYwMCcsICcjMDBmZjAwJywgJyMwMGZmZmYnXSwg
WycjZmYwMGZmJywgJyMwMDAwZmYnLCAnI2ZmMDAwMCcsICcjMDAwMDgwJ10sIFsnIzAwODA4MCcs
ICcjMDA4MDAwJywgJyM4MDAwODAnLCAnIzgwMDAwMCddLCBbJyM4MDgwMDAnLCAnIzgwODA4MCcs
ICcjYzBjMGMwJywgJyMwMDAwMDAnXV07Ci0KLSAgICB2YXIgY2hlY2tNYXJrRGl2VGFnID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgY2hlY2tNYXJrRGl2VGFnLmNsYXNzTGlz
dC5hZGQoJ2NvbG9yLXBpY2tlci1jaGVjay1tYXJrJyk7Ci0KLSAgICBmb3IgKHZhciByb3cgPSAx
OyByb3cgPD0gNDsgcm93KyspIHsKLSAgICAgICAgdmFyIHJvd0VsdCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICByb3dFbHQuY2xhc3NMaXN0LmFkZCgnY29sb3ItcGlj
a2VyLXJvdycpOwotICAgICAgICBzd2F0Y2hCbG9jay5hcHBlbmRDaGlsZChyb3dFbHQpOwotICAg
ICAgICBmb3IgKHZhciBjb2wgPSAxOyBjb2wgPD0gNDsgY29sKyspIHsKLSAgICAgICAgICAgIHZh
ciBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAgICAgICBjZWxs
LmNsYXNzTGlzdC5hZGQoJ2NvbG9yLXBpY2tlci13ZWxsJyk7Ci0gICAgICAgICAgICBjZWxsLmlk
ID0gcm93ICsgJycgKyBjb2w7Ci0gICAgICAgICAgICBjZWxsLnN0eWxlLmJhY2tncm91bmRDb2xv
ciA9IFNXQVRDSF9DT0xPUlNbcm93IC0gMV1bY29sIC0gMV07Ci0gICAgICAgICAgICBjZWxsLm15
Y29sb3IgPSBjdXRIZXgoU1dBVENIX0NPTE9SU1tyb3cgLSAxXVtjb2wgLSAxXSk7Ci0gICAgICAg
ICAgICBjZWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgeyBzd2F0Y2hV
cGRhdGVDb2xvcih0aGlzLCBjaGVja01hcmtEaXZUYWcpOyB9LCBmYWxzZSk7Ci0gICAgICAgICAg
ICByb3dFbHQuYXBwZW5kQ2hpbGQoY2VsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBT
bGlkZXJzCi0gICAgdmFyIHNsaWRlckJsb2NrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7Ci0gICAgc2xpZGVyQmxvY2suY2xhc3NMaXN0LmFkZCgnY29sb3ItcGlja2VyLWJsb2NrJyk7
Ci0gICAgc2xpZGVyQmxvY2suaWQgPSAnY29sb3ItcGlja2VyLXNsaWRlci1ibG9jayc7Ci0gICAg
Y29udGVudC5hcHBlbmRDaGlsZChzbGlkZXJCbG9jayk7Ci0KLSAgICB2YXIgaGV4SW5wdXQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICBoZXhJbnB1dC5jbGFzc0xpc3QuYWRk
KCdjb2xvci1waWNrZXItaW5wdXQnKTsKLSAgICBzbGlkZXJCbG9jay5hcHBlbmRDaGlsZChoZXhJ
bnB1dCk7Ci0KLSAgICB2YXIgY3VycmVudENvbG9yV2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpOwotICAgIGN1cnJlbnRDb2xvcldlbGwuY2xhc3NMaXN0LmFkZCgnY29sb3ItcGlj
a2VyLXdlbGwnKTsKLSAgICBjdXJyZW50Q29sb3JXZWxsLmlkID0gJ2NvbG9yLXBpY2tlci1jdXJy
ZW50JzsKLSAgICBoZXhJbnB1dC5hcHBlbmRDaGlsZChjdXJyZW50Q29sb3JXZWxsKTsKLQotICAg
IHZhciB1c2VySW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwotICAgIHVz
ZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpOwotICAgIHVzZXJJbnB1dC5zZXRB
dHRyaWJ1dGUoJ2lkJywgJ2NvbG9yLXBpY2tlci1oZXgtaW5wdXQnKTsKLSAgICB1c2VySW5wdXQu
c2V0QXR0cmlidXRlKCdtYXhsZW5ndGgnLCAnNycpOwotICAgIHVzZXJJbnB1dC5jbGFzc0xpc3Qu
YWRkKCdjb2xvci1waWNrZXItaGV4LXN0eWxlJyk7Ci0gICAgdXNlcklucHV0LmFkZEV2ZW50TGlz
dGVuZXIoJ2NoYW5nZScsIGhleFVwZGF0ZUNvbG9yLCBmYWxzZSk7Ci0gICAgaGV4SW5wdXQuYXBw
ZW5kQ2hpbGQodXNlcklucHV0KTsKLQotICAgIHZhciByZWRTbGlkZXJSb3cgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICByZWRTbGlkZXJSb3cuY2xhc3NMaXN0LmFkZCgnY29s
b3ItcGlja2VyLXNsaWRlcicpOwotICAgIHNsaWRlckJsb2NrLmFwcGVuZENoaWxkKHJlZFNsaWRl
clJvdyk7Ci0KLSAgICB2YXIgcmVkUmFuZ2UgPSBjcmVhdGVSYW5nZSgncmVkJyk7Ci0gICAgcmVk
U2xpZGVyUm93LmFwcGVuZENoaWxkKHJlZFJhbmdlKTsKLQotICAgIHZhciByZWRPdXRwdXQgPSBj
cmVhdGVPdXRwdXQoJ3JlZCcpOwotICAgIHJlZFNsaWRlclJvdy5hcHBlbmRDaGlsZChyZWRPdXRw
dXQpOwotCi0gICAgdmFyIGdyZWVuU2xpZGVyUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7Ci0gICAgZ3JlZW5TbGlkZXJSb3cuY2xhc3NMaXN0LmFkZCgnY29sb3ItcGlja2VyLXNs
aWRlcicpOwotICAgIHNsaWRlckJsb2NrLmFwcGVuZENoaWxkKGdyZWVuU2xpZGVyUm93KTsKLQot
ICAgIHZhciBncmVlblJhbmdlID0gY3JlYXRlUmFuZ2UoJ2dyZWVuJyk7Ci0gICAgZ3JlZW5TbGlk
ZXJSb3cuYXBwZW5kQ2hpbGQoZ3JlZW5SYW5nZSk7Ci0KLSAgICB2YXIgZ3JlZW5PdXRwdXQgPSBj
cmVhdGVPdXRwdXQoJ2dyZWVuJyk7Ci0gICAgZ3JlZW5TbGlkZXJSb3cuYXBwZW5kQ2hpbGQoZ3Jl
ZW5PdXRwdXQpOwotCi0gICAgdmFyIGJsdWVTbGlkZXJSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTsKLSAgICBibHVlU2xpZGVyUm93LmNsYXNzTGlzdC5hZGQoJ2NvbG9yLXBpY2tl
ci1zbGlkZXInKTsKLSAgICBzbGlkZXJCbG9jay5hcHBlbmRDaGlsZChibHVlU2xpZGVyUm93KTsK
LQotICAgIHZhciBibHVlUmFuZ2UgPSBjcmVhdGVSYW5nZSgnYmx1ZScpOwotICAgIGJsdWVTbGlk
ZXJSb3cuYXBwZW5kQ2hpbGQoYmx1ZVJhbmdlKTsKLQotICAgIHZhciBibHVlT3V0cHV0ID0gY3Jl
YXRlT3V0cHV0KCdibHVlJyk7Ci0gICAgYmx1ZVNsaWRlclJvdy5hcHBlbmRDaGlsZChibHVlT3V0
cHV0KTsKLQotICAgIHJlZFJhbmdlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9u
ICgpIHsgcmFuZ2VVcGRhdGVDb2xvcihyZWRPdXRwdXQsIHJlZFJhbmdlKTsgfSwgZmFsc2UpOwot
ICAgIGdyZWVuUmFuZ2UuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkgeyBy
YW5nZVVwZGF0ZUNvbG9yKGdyZWVuT3V0cHV0LCBncmVlblJhbmdlKTsgfSwgZmFsc2UpOwotICAg
IGJsdWVSYW5nZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7IHJhbmdl
VXBkYXRlQ29sb3IoYmx1ZU91dHB1dCwgYmx1ZVJhbmdlKTsgfSwgZmFsc2UpOwotICAgIHJlZE91
dHB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7IHJhbmdlVXBkYXRl
Q29sb3IocmVkUmFuZ2UsIHJlZE91dHB1dCk7IH0sIGZhbHNlKTsKLSAgICBncmVlbk91dHB1dC5h
ZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7IHJhbmdlVXBkYXRlQ29sb3Io
Z3JlZW5SYW5nZSwgZ3JlZW5PdXRwdXQpOyB9LCBmYWxzZSk7Ci0gICAgYmx1ZU91dHB1dC5hZGRF
dmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7IHJhbmdlVXBkYXRlQ29sb3IoYmx1
ZVJhbmdlLCBibHVlT3V0cHV0KTsgfSwgZmFsc2UpOwotCi0gICAgYm9keS5hcHBlbmRDaGlsZChm
cmFnbWVudCk7Ci0KLSAgICB2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpLAotICAgICAgICBjYW5jZWxCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0
b24nKSwKLSAgICAgICAgb2tCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24n
KTsKLSAgICBidXR0b25zLmNsYXNzTmFtZSA9ICdwb3B1cC1idXR0b25zJzsKLSAgICBjYW5jZWxC
dXR0b24uY2xhc3NOYW1lID0gJ3BvcHVwLWJ1dHRvbic7Ci0gICAgY2FuY2VsQnV0dG9uLmFkZEV2
ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FuY2VsKTsKLSAgICBjYW5jZWxCdXR0b24uYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGlja2VyUGFyYW1zLnVpVGV4dC5jYW5jZWxCdXR0
b25MYWJlbCkpOwotICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQoY2FuY2VsQnV0dG9uKTsKLSAgICBv
a0J1dHRvbi5jbGFzc05hbWUgPSAncG9wdXAtYnV0dG9uJzsKLSAgICBva0J1dHRvbi5hZGRFdmVu
dExpc3RlbmVyKCdjbGljaycsIG9rKTsKLSAgICBva0J1dHRvbi5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShwaWNrZXJQYXJhbXMudWlUZXh0LmRvbmVCdXR0b25MYWJlbCkpOwot
ICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQob2tCdXR0b24pOwotICAgIHBvcHVwLmFwcGVuZENoaWxk
KGJ1dHRvbnMpOwotCi0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwb3B1cCk7Ci19Owot
Ci12YXIgc2hvdyA9IGZ1bmN0aW9uIChwaWNrZXJQYXJhbXMpIHsKLSAgICBsYXlvdXQocGlja2Vy
UGFyYW1zKTsKLSAgICBvcGVuU2xpZGVycygpOwotICAgIGlmIChwaWNrZXJQYXJhbXMuaW5pdGlh
bFZhbHVlKSB7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2xvci1waWNrZXIt
aGV4LWlucHV0JykudmFsdWUgPSBwaWNrZXJQYXJhbXMuaW5pdGlhbFZhbHVlOwotICAgIH0KLQot
ICAgIHZhciBjaGFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpOwotICAg
IGNoYW5nZS5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpOwotICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdjb2xvci1waWNrZXItaGV4LWlucHV0JykuZGlzcGF0Y2hFdmVudChjaGFu
Z2UpOwotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHJv
dGF0aW9uSGFuZGxlciwgZmFsc2UpOwotfTsKLQotd2luZG93LnBvcHVwY29udHJvbCA9IHdpbmRv
dy5wb3B1cGNvbnRyb2wgfHwge307Ci13aW5kb3cucG9wdXBjb250cm9sLnNob3cgPSBzaG93Owot
fSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2JlcnJ5L3BvcHVwQ29u
dHJvbEJsYWNrQmVycnkuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1Jlc291cmNl
cy9ibGFja2JlcnJ5L3BvcHVwQ29udHJvbEJsYWNrQmVycnkuY3NzCShyZXZpc2lvbiAxNjE1OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvYmxhY2tiZXJyeS9wb3B1cENvbnRyb2xCbGFj
a0JlcnJ5LmNzcwkod29ya2luZyBjb3B5KQpAQCAtMSw3NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCwgMjAxMi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqLwotCi1odG1sIHsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotfQotCi1ib2R5IHsK
LSAgICBwYWRkaW5nOiAzMHB4OwotICAgIG1hcmdpbjogMDsKLSAgICBmb250LWZhbWlseTogIlNs
YXRlIFBybyIsICJNeXJpYWQgUHJvIiwgIkFyaWFsIiwgIkhlbHZldGljYSIsIHNhbnMtc2VyaWY7
Ci0gICAgZm9udC1zaXplOiA0MHB4OwotICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC40
KTsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwotICAgIGRpc3BsYXk6IC13ZWJraXQt
Ym94OwotICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7Ci0gICAgLXdlYmtpdC1ib3gt
YWxpZ246IGNlbnRlcjsKLSAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7Ci19Ci0KLS5wb3B1
cC1hcmVhIHsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIHdpZHRoOiAxMDAlOwot
ICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwotICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGlj
YWw7Ci19Ci0KLSAgICAucG9wdXAtaGVhZGVyIHsKLSAgICAgICAgbGluZS1oZWlnaHQ6IDkzcHg7
Ci0gICAgICAgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgy
NTUsIDI1NSwgMjU1LCAwKSwgcmdiYSgwLCAwLCAwLCAwLjIpKSwgLXdlYmtpdC1saW5lYXItZ3Jh
ZGllbnQobGVmdCwgIzAwNzNiYywgIzAwYThkZik7Ci0gICAgICAgIGJvcmRlci10b3AtbGVmdC1y
YWRpdXM6IDEycHg7Ci0gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMnB4OwotICAg
ICAgICBwYWRkaW5nOiAwIDMycHg7Ci0gICAgICAgIGZvbnQtc2l6ZTogMS4yZW07Ci0gICAgICAg
IGNvbG9yOiAjZmFmYWZhOwotICAgICAgICB0ZXh0LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjUp
IDAgMnB4OwotICAgIH0KLQotICAgIC5wb3B1cC1jb250ZW50IHsKLSAgICAgICAgLXdlYmtpdC1i
b3gtZmxleDogMTsKLSAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICAgICAgLXdlYmtp
dC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwotICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1
cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBc29BQUFB
T0NBTUFBQUFCcnNyNUFBQUFoRkJNVkVYLy8vOEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUM5S0RMaEFBQUFMSFJTVGxNQUFnQUlCQW9HRWhB
akZ4dEJNVEFVUHlFT0dVVWRKUXdmUXhZK0tDNUdOMGc4T2tvcUxFMDROVE5MSm9LeHFVTUFBQU1x
U1VSQlZIaGVuTmFMYnFKUUVJQmg2K0dpV0tGcUVhV3cyZ3AxcGUvL2ZqdVhBOE1adzZYN0pXaFFB
dkg0TTJHaHZEQXZDSXlmN2NFcURNTWt5U053MktDVW5FNm5IVmtmeFE4b1VJVnFVcUo0NjNxMC9p
Sit2U0I0STNmclMva1VIOC9lSEs5anpzcjdUSCtHdE45ZmY0SFBPTzU5bG5QUDY1ZzMxOGVBVCt1
cjd5N2duMEw4bDRsSGEydkZwTFJxVkxIaWh4eXROZHFSdEhNQVVaUW5lWjRuU2JqYTc3TXNNMzVn
Z3NCN0lZc3hITExuR2QvbmxFTUE1NktTQ1ZUTUhSOVJ3YWhnVlhGSjRsaWxlK25qZGFGbHNrc25u
ZW80NTBZNW5kNzEyYTNUa0Z0UDA3bTVtdTlPMC9xZXJ4SHkyUTFNWFZ0L2NBWGE5RTF4VmlicmQx
S1h5V0l6eCszaTZJY3RTZGVFY3hiU05RVU5oYVViQmpGSDBISzRXbEhMMEtVSlBFeDV1Vnd1eGl3
QkhoZ1lRRFh6WkU0UzdKa2NrSXhudEJOcnhET2FTZUtzWnFYQTN1T2hxUzE0QWx5MHV6STB4dWNQ
ZEcxd3BrMlBlMjI2blRuWDFnYm1xZ2JsNlNIclRGcE5qOTFIMzFad3BiQ1J1bE5aRWl2U1U1aFJS
eW5aQUJ6SElFZVFYZ2dqR1dTK1FRR0hQSmt5b2ljTVlBeHV4cytnNlF5THhsc2pKRWtyUnhHVDBF
VnFuY1R1eVZycGZyTGNERVIyUktYVWpuSkFQTk1XOVBaYzZyai9OUE1Tc2pPaEhGSmpaNElXcXhL
RnBwZmVlWkQ4UjIyZDdFZ0lBZ0VZSHB0bUVRNUdpRUo0L3dlZEtXZ29Gd1NYdnN5WGFEeVJXUDZw
T1BkbzNITUxVNktRQVRMQ2FBTU9SQkwrS3JTRnZVckptNEVMS1VQTGI4QUNFb3VtMU1aakU3SEdo
eUsvZ3JYTHhhTlJHK3VYeDRtVXVKcXhvdittK1puK2U4WUtkMnc2NUFMOEt2c3M4eFlMZDZ6VWJ3
eGxlVUdLUUFPYlVOakVjRUhDVVM2NW5UTG8vcVNhQVVsb1pwRXVFUVg4dktIT3l3OWZKZzJTbHho
MWczbEdYU2V2TVZsNVloSU5MZndrc2FjUFdFUVIrV0M1NHc2Y1QzbVRjN2psdzdCcWJEeGlHNFEr
WXV0MGF6amlOdjQvaUp1YTQ3SXR2K3pTTVE3QU1BaEQwUm9JOXo5eXQxWktHZUlVcEF5OEUxanlI
ei80MXhSUEVOUGJzRHpXVW40aFlJdDhnNVlZYldnSlo5a2loRVRvbEdQZzJBWXZvVTI5aExGQWtV
bDJ5a0tqdHlPWE5VTXk4aWdoWmFSOEJKeXV5UW51ZHVDWUFBQUFBR0dRL1ZPYlloOHNCUUJ3dWk5
Kys5YlZXdHdBQUFBQVNVVk9SSzVDWUlJPSIpLCB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxp
VkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBc29BQUFBT0NBTUFBQUFCcnNyNUFBQUFoRkJNVkVYLy8v
OEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUM5S0RMaEFBQUFMSFJTVGxNQUFnQUlCQW9HRWhBakZ4dEJNVEFVUHc0aEdVVWRKUXdmUXhZK0tF
WXVOMGc4T2tvcUxFMDROVE5MSmg0RGtiVUFBQUxqU1VSQlZIaGU3TUF4QVFBQUFNSWcrNmMyeFQ1
WURRRGc3Tk03RG9CQURBTlJ2TC83SHhrSjBsRFFiSFlrRjVrYldIcHVGc205cWptMFRWbHZwRXlH
OHFnR1F4bVRyeWVPTWc5b0lmV3FMeVRzVWVjcFo0ajZvSnZWTkRsSWp2dzI1WEFyaGNzQStwM3hQ
eXNwNkthMlhuWVlCSUVBaXZZMUxjTENJTEVRLy85RG02RW9pQU1VY05PVDZKWUU3MHpVZVpJNU1v
RTFlLzBIMXFoNFhib0VPanlQb25pSW1IemJEU212Ni9ld0xzbldKS1d6a2pGdjRjNUM0OHJqVlpS
b29QcUllcnlPMnRBM3hyMnhwR1BZWkFJOUtPR1czRy9ybjFOMmZ4RmJ4ZmdDMFBiRVZLcUo5b2dM
Qy9KUzZCalB2QkxJZk0wMGt6TmxER2Q2OXhuT00yV1l0RG5KV1BoVlFzSlQyN1Q0bVNHM3pFakQ1
SVAwOTJuYm52SEJtcDJLbEhFamZ5TzJJWU1Hd0lTWlBTemFtZkZJeDB1R0tLNWMxYWNUTTFGT0dB
VENjTnRVN1dGdnRZZlJhT3FkOTMrL3dpNndWeXkwMzhUTUFJN000TGUvR3pzSENOQjU2Z1FOaUkx
aUsxaWU0YkdRQndjYlNmajcvay9oRmpUSXNEekgxbDBNT0t3TlVXdjAwYzhpbllOWFg2Wm8rdlJI
M3dtbXVneDBqTTkzYUFlcUVLN2djcEhLWG51dk1BYnhDemdNMGtwWm1hTGFTdFFRMGNiMU9hWmRP
RVlPaktacDRLN1lLMXJCdW8rNTVma1h4Z216WVBrc1o5eEhmbS9MdkllMXBYVVhBdzVyVHpRQ091
MUQ1TWhSNWViRElSUk1RdFpJRjVnQnVnU201SHd3blF2dTFJYW94bzZqVU9YNEgwVTFDQjZQSEdo
eHlOb2tML2hhSTFTK3BHdTBWS2xwUFd6Z1hQRzBXeW1iRVNmdnprU3c2R05sK1U2Y0FCelFETTN5
aFYzaUZObVZjeUpvRGpiSTdLMG5WajBzREJORnBySnNEWWxDb2FBSWRlRmZqWUJyVDc4WFRQT2FJ
TXRCY085MXpHOVVlaFFTMm9mekVIcU1FcFd4djZoUVpkOVE0RU1XdWt4aEhGSjRSblFPNWpNSnpU
UFhwaTdlUXhESXFHMFZ1V2kxNnBjV1FDR0xjOFQxMVIrd24yaVpGSkZSa3Nqa3VjNzBsaUVUUEgx
bkI0YkpiTm55OEt5dUthTlZTazhUMklSOFBVRTBqN0RYcUFiRHlyY1lnRkQzQnpaZ2Z2c2pHeGNM
QUFBQUFFbEZUa1N1UW1DQyIpOwotICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AsIGJv
dHRvbTsKLSAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLSAgICAgICAgYmFj
a2dyb3VuZC1zaXplOiAxMDAlIGF1dG87Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEo
MjUwLCAyNTAsIDI1MCwgMC45KTsKLSAgICB9Ci0KLSAgICAucG9wdXAtYnV0dG9ucyB7Ci0gICAg
ICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjEycHg7Ci0gICAgICAgIGJvcmRlci1ib3R0
b20tbGVmdC1yYWRpdXM6MTJweDsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTAs
IDI1MCwgMjUwLCAwLjkpOwotICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAgICAg
LXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsOwotICAgICAgICBwYWRkaW5nLWxlZnQ6IDIw
cHg7Ci0gICAgICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7Ci0gICAgfQotCi0gICAgICAgIC5wb3B1
cC1idXR0b24gewotICAgICAgICAgICAgY29sb3I6IGluaGVyaXQ7Ci0gICAgICAgICAgICBmb250
OiBpbmhlcml0OwotICAgICAgICAgICAgdGV4dC1zaGFkb3c6IHJnYmEoMjU1LCAyNTUsIDI1NSwg
MC41KSAwIC0ycHg7Ci0gICAgICAgICAgICBtYXJnaW46IDIwcHggMTBweCAyMHB4IDEwcHg7Ci0g
ICAgICAgICAgICBoZWlnaHQ6IDkycHg7Ci0gICAgICAgICAgICB3aWR0aDogNTAlOwotICAgICAg
ICAgICAgZGlzcGxheTogYmxvY2s7Ci0gICAgICAgICAgICAtd2Via2l0LWJveC1mbGV4OiAxOwot
ICAgICAgICB9Ci0KLUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKHdpZHRoOiA3MjBweCkgYW5kICho
ZWlnaHQ6IDcyMHB4KSB7Ci0gICAgLnBvcHVwLWJ1dHRvbiB7Ci0gICAgICAgIG1hcmdpbjogMTBw
eCAxMHB4IDEwcHggMTBweDsKLSAgICAgICAgaGVpZ2h0OiA3N3B4OwotICAgIH0KLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2JlcnJ5L3NlbGVjdENvbnRyb2xCbGFja0Jl
cnJ5LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvYmxhY2tiZXJy
eS9zZWxlY3RDb250cm9sQmxhY2tCZXJyeS5jc3MJKHJldmlzaW9uIDE2MTU5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2JlcnJ5L3NlbGVjdENvbnRyb2xCbGFja0JlcnJ5LmNz
cwkod29ya2luZyBjb3B5KQpAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICov
Ci0ucG9wdXAtY29udGVudCB7Ci0gICAgb3ZlcmZsb3cteDogaGlkZGVuOwotICAgIG92ZXJmbG93
LXk6IGF1dG87Ci19Ci0KLS5wb3B1cC1jb250ZW50IHsKLSAgICBtYXgtaGVpZ2h0OiA0OTVweDsg
LyogNSByb3dzIG9mIDk5cHggZWFjaCAqLwotfQotCi1AbWVkaWEgKG1pbi1oZWlnaHQ6IDkxOHB4
KSB7IC8qIDY5MyArIDkzIChwb3B1cCBoZWFkZXIpICsgMTMyIChwb3B1cCBidXR0b25zKSA9IDkx
OCAqLwotICAgIC5wb3B1cC1jb250ZW50IHsKLSAgICAgICAgbWF4LWhlaWdodDogNjkzcHg7IC8q
IGluIHBvcnRyYWl0OiA3IHJvd3Mgb2YgOTlweCBlYWNoICovCi0gICAgfQotfQotCi0ub3B0aW9u
IHsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIHRleHQtb3ZlcmZsb3c6IC1ibGFja2JlcnJ5
LWZhZGU7Ci0gICAgY29sb3I6ICM1NTU1NTU7Ci0gICAgdGV4dC1zaGFkb3c6IHJnYmEoMCwgMCwg
MCwgMC4yKSAwIC0xcHg7Ci0KLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIGhlaWdo
dDogOTlweDsKLQotICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjYjdiOGI5OwotfQotCi1A
bWVkaWEgb25seSBzY3JlZW4gYW5kICh3aWR0aDogNzIwcHgpIGFuZCAoaGVpZ2h0OiA3MjBweCkg
ewotICAgIC5wb3B1cC1jb250ZW50IHsKLSAgICAgICAgbWF4LWhlaWdodDogNDU1cHg7IC8qIDUg
cm93cyBvZiA5MXB4IGVhY2ggKi8KLSAgICB9Ci0KLSAgICAub3B0aW9uIHsKLSAgICAgICAgaGVp
Z2h0OiA5MXB4OwotICAgIH0KLX0KLQotLmNvbnRlbnRzIHsKLSAgICBkaXNwbGF5OiAtd2Via2l0
LWJveDsKLSAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7Ci0gICAgLXdlYmtpdC1i
b3gtYWxpZ246IGNlbnRlcjsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotfQotCi0ub3B0
aW9uOmFjdGl2ZSB7Ci0gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7Ci0g
ICAgYmFja2dyb3VuZC1jb2xvcjogIzY2Y2NmZjsKLX0KLQotLnNlbGVjdGVkIHsKLSAgICBjb2xv
cjogIzI2MjYyNjsKLX0KLQotLnNlbGVjdGVkIC5jb250ZW50czo6YWZ0ZXIgewotICAgIGNvbnRl
bnQ6ICcnOwotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgn
ZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDUUFBQUFmQ0FZ
QUFBQ1B2Vy8yQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xs
UEFBQUEyWnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmla
V2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lE
eDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdz
OUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3
TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1Q
U0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJu
TWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcx
d1RVMDlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl0YlM4aUlIaHRiRzV6
T25OMFVtVm1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2YzFSNWNHVXZV
bVZ6YjNWeVkyVlNaV1lqSWlCNGJXeHVjenA0YlhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIy
MHZlR0Z3THpFdU1DOGlJSGh0Y0UxTk9rOXlhV2RwYm1Gc1JHOWpkVzFsYm5SSlJEMGllRzF3TG1S
cFpEb3dPVGd3TVRFM05EQTNNakEyT0RFeE9FUkNRa1UzUWpaRVJURkNOelZHTnlJZ2VHMXdUVTA2
Ukc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvNFFqbERPRVpFUmpSRk9FVXhNVVV4UVRWQ05FRTVO
elV5TTBGRlJqQTVPU0lnZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG80UWpsRE9F
WkVSVFJGT0VVeE1VVXhRVFZDTkVFNU56VXlNMEZGUmpBNU9TSWdlRzF3T2tOeVpXRjBiM0pVYjI5
c1BTSkJaRzlpWlNCUWFHOTBiM05vYjNBZ1ExTTFJRTFoWTJsdWRHOXphQ0krSUR4NGJYQk5UVHBF
WlhKcGRtVmtSbkp2YlNCemRGSmxaanBwYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT2tVelFVWkZS
a1F3TkRNeU1EWTRNVEU1TkRVM1JEWXlRVE5DUlRGRlJEVTJJaUJ6ZEZKbFpqcGtiMk4xYldWdWRF
bEVQU0o0YlhBdVpHbGtPakE1T0RBeE1UYzBNRGN5TURZNE1URTRSRUpDUlRkQ05rUkZNVUkzTlVZ
M0lpOCtJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQaUE4TDNKa1pqcFNSRVkrSUR3dmVEcDRiWEJ0
WlhSaFBpQThQM2h3WVdOclpYUWdaVzVrUFNKeUlqOCtFaTFydEFBQUF4bEpSRUZVZU5yRWw4OXJH
a0VVeDFkWFRXSVNQYWp4UnpRaEdrRUNJZWRDRHZiUWc5QmJhUTZCUUs4cDlBOUlEaTJsMkQ4aEo5
RW8va2hNY21qVkhKSkxvWWNXb2ZhU1hwSkR5YWxKaElJVWtZSS8rbjFEVnlMdXJESFJkZUhoekRn
eisrSDczcng1cS9INy9jSW9uL1B6ODQ2K1pvUkFOdGdqMkcvWUY0QTFhRkRiYXJXRUVkaTZScU81
TUJnTUgvUjYvV2YwdjBNWUJ3SHBScURNaS9IeDhZalpiQllCeFFicTlmcHlwVktKb1BsVVI4UnF3
a3hNVERBWTZranZGa1ZSbUpxYUNxbXRFRlBHWkRLSmNpSVlqY1lhQTFKSklhWU1ENGFlbFpXVkV4
YlVhc0x3Sml3c0xKVEM0ZkI3TlJUYUlEY2hQc1JtczhtRmlVUWlXNEQrTm13Z2dvbE5UMDl6M1VR
dzBXaVVZRTRweG9jWjFCdGpZMk05WVdLeFdBZk1zQlJpTUVwdThucTlwZDNkM1M2WVlXVHFEV1Jm
QnNPYlE4ckU0M0VHTXo4LzM2V0dkaGh1NGswZ1pSS0pCQmRHem1WTHNHVllFZmF6WDVqSnlVbEZO
MGt3YzNOejNEaVJYRVlTcDdSYTdROUl2b2ZmQy9UZjl1TW1nbEZ5VXpLWlpEQWVqNmQxK3o5WmhR
RHdDcWw3SFJ0TDQyS3RWbnNOb3hMaFpTOWxzSmFyak0vbks2VlNLUWJqZHJ0N25pQUdaTEZZbnVI
RzdTQkdEaEZ3RzI5V3ExV0JBN1V1d2ZCT0tzR2swMmtHTXpzN2U2Zmp6SUxhWnJQVjVmN0VDd1c0
WWhQTkhSbVlCTG1KdHpIQlpES1p2bURhTVJRTUJqK1M1SEtHQWtyQXBwdVl0eU1WVnhoTFlFemty
YUdZa1dCY0xsZExLUVpsRmRyZTN0NExoVUpaM2lLS0xZTEMxQk9Da2R3a1ozU2E5dmYzMnpEOTVn
NFdRMDZuOHhlZWQ5UStQajVlazV0SVVBaitKenFkVGxDS21XdzJ5MkN3NTcydWdIWWVjamdjWjFk
WFZ3eXFVQ2pJUWdGSTRKMm14Y1hGTmd6MnV2ZDkxSkVZN1hiNzJmWDF0U0lVRCtiZzRHQUxyanpG
SGcrNkhMdHVld21LMm5lQklwakR3OE9Cd0hETGo5dFErWHgrVFMwWXhmSmpabWJtN09ibWhybFBE
b3Bnam82T0dBem1EcXlHVVN6UUpDaWNySG91bDN2ZWFEVDBOQjRJQklvb0lkNE1Hb1o5U2x1dDFw
NlR5dVh5MHVYbDVlTmlzZWpDY2E2dXJxNSt4ZkFuWlBqbVF3R3dkLzlBL3hmU3pXdUMvUVhJbjBF
cDBnV2s4cGRyeitlZkFBTUFtWWE5Rm1BRDlsVUFBQUFBU1VWT1JLNUNZSUk9Jyk7Ci0gICAgYmFj
a2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLSAgICB3aWR0aDogMzZweDsKLSAgICBoZWlnaHQ6
IDMxcHg7Ci0gICAgbWFyZ2luOiAwIDIwcHg7Ci19Ci0KLS50ZXh0IHsKLSAgICBoZWlnaHQ6IDk5
cHg7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICBwYWRkaW5nOiAwIDIwcHg7Ci0gICAgZGlz
cGxheTogLXdlYmtpdC1ib3g7Ci0gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKLSAg
ICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7Ci0gICAgLXdlYmtpdC1ib3gtZmxleDogMTsKLX0K
LQotLmRpc2FibGVkIHsKLSAgICBjb2xvcjogI2IwYjBiMDsKLX0KLQotLm9wdGdyb3VwIHsKLSAg
ICBmb250LXdlaWdodDogYm9sZDsKLX0KLQotLm9wdGdyb3VwLW9wdGlvbiB7Ci0gICAgLXdlYmtp
dC1wYWRkaW5nLXN0YXJ0OiA2MHB4OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvUmVzb3VyY2Vz
L2JsYWNrYmVycnkvc2VsZWN0Q29udHJvbEJsYWNrQmVycnkuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2JsYWNrYmVycnkvc2VsZWN0Q29udHJvbEJsYWNrQmVycnku
anMJKHJldmlzaW9uIDE2MTU5NikKKysrIFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2Jl
cnJ5L3NlbGVjdENvbnRyb2xCbGFja0JlcnJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCwg
MjAxMi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotCi0vLyBVcG9uIHRoZSB1c2VyIG1ha2lu
ZyBhIHNlbGVjdGlvbiwgSSB3aWxsIGNhbGwgd2luZG93LnNldFZhbHVlQW5kQ2xvc2VQb3B1cCB3
aXRoIGEgYmluYXJ5IHN0cmluZyB3aGVyZQotLy8gdGhlIGNoYXJhY3RlciBhdCBpbmRleCBpIGJl
aW5nICcxJyBtZWFucyB0aGF0IHRoZSBvcHRpb24gYXQgaW5kZXggaSBpcyBzZWxlY3RlZC4KLShm
dW5jdGlvbiAoKXsKLQotICAgIHZhciBzZWxlY3RPcHRpb24gPSBmdW5jdGlvbiAoZXZlbnQpIHsK
LSAgICAgICAgZm9yICh2YXIgb3B0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcHVw
LWNvbnRlbnQnKS5maXJzdENoaWxkOyBvcHRpb247IG9wdGlvbiA9IG9wdGlvbi5uZXh0U2libGlu
ZykgewotICAgICAgICAgICAgaWYgKG9wdGlvbiA9PT0gdGhpcykgewotICAgICAgICAgICAgICAg
IGlmIChvcHRpb24uY2xhc3NOYW1lLmluZGV4T2YoJ3NlbGVjdGVkJykgPT09IC0xKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG9wdGlvbi5jbGFzc05hbWUgKz0gJyBzZWxlY3RlZCc7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBvcHRpb24u
Y2xhc3NOYW1lID0gb3B0aW9uLmNsYXNzTmFtZS5yZXBsYWNlKCdzZWxlY3RlZCcsICcnKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkb25lKCk7Ci0gICAgfTsKLQotICAgIHZh
ciB0b2dnbGVPcHRpb24gPSBmdW5jdGlvbiAoZXZlbnQpIHsKLSAgICAgICAgaWYgKHRoaXMuY2xh
c3NOYW1lLmluZGV4T2YoJ3NlbGVjdGVkJykgPT09IC0xKSB7Ci0gICAgICAgICAgICB0aGlzLmNs
YXNzTmFtZSArPSAnIHNlbGVjdGVkJzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRo
aXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUucmVwbGFjZSgnc2VsZWN0ZWQnLCAnJyk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgdmFyIGRvbmUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IHZhciByZXN1bHQgPSAnJzsKLSAgICAgICAgZm9yICh2YXIgb3B0aW9uID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3BvcHVwLWNvbnRlbnQnKS5maXJzdENoaWxkOyBvcHRpb247IG9wdGlvbiA9
IG9wdGlvbi5uZXh0U2libGluZykgewotICAgICAgICAgICAgaWYgKG9wdGlvbi5jbGFzc05hbWUu
aW5kZXhPZignc2VsZWN0ZWQnKSA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0g
JzAnOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gJzEn
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJI
VE1MID0gJyc7Ci0gICAgICAgIHdpbmRvdy5zZXRWYWx1ZUFuZENsb3NlUG9wdXAocmVzdWx0LCB3
aW5kb3cucG9wVXApOwotICAgIH07Ci0KLSAgICB2YXIgY2FuY2VsID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICcnOwotICAgICAgICB3aW5kb3cuc2V0
VmFsdWVBbmRDbG9zZVBvcHVwKCctMScsIHdpbmRvdy5wb3BVcCk7Ci0gICAgfTsKLQotICAgIC8q
IHBpY2tlclBhcmFtcyBpcyBhbiBvYmplY3QgbGl0ZXJhbCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJv
cGVydGllczoKLSAgICAgKgotICAgICAqIGlzTXVsdGlTZWxlY3QgLSBhIGJvb2xlYW4KLSAgICAg
KiBsYWJlbHMgLSBhbiBhcnJheSBvZiBzdHJpbmdzCi0gICAgICogZW5hYmxlZHMgLSBhbiBhcnJh
eSBvZiBib29sZWFucy4KLSAgICAgKiAgIC1JIHdpbGwgYXNzdW1lIHRoYXQgdGhlIEhUTUwgImRp
c2FibGVkIG9wdGdyb3VwcyBkaXNhYmxlIGFsbCBvcHRpb25zIGluIHRoZSBvcHRncm91cCIgaGFz
bid0IGJlZW4gYXBwbGllZCwKLSAgICAgKiAgICBzbyBpZiB0aGUgaW5kZXggY29ycmVzcG9uZHMg
dG8gYW4gb3B0Z3JvdXAsIEkgd2lsbCByZW5kZXIgYWxsIG9mIGl0cyBvcHRpb25zIGFzIGRpc2Fi
bGVkCi0gICAgICogaXRlbVR5cGVzIC0gYW4gYXJyYXkgb2YgaW50ZWdlcnMsIDAgPT09IHNlcGFy
YXRvciwgMSA9PT0gb3B0Z3JvdXAsIDIgPT09IG9wdGlvbiwgMyA9PT0gb3B0aW9uIGluIG9wdGdy
b3VwCi0gICAgICogc2VsZWN0ZWRzIC0gYW4gYXJyYXkgb2YgYm9vbGVhbnMKLSAgICAgKiB1aVRl
eHQgLSBsb2NhbGl6ZWQgdGV4dCB0byBkaXNwbGF5IHRvIHVzZXIKLSAgICAgKiBkaXJlY3Rpb24g
LSBsYXlvdXQgZGlyZWN0aW9uIHRvIHVzZSwgJ2x0cicgb3IgJ3J0bCcKLSAgICAgKi8KLSAgICB2
YXIgc2hvdyA9IGZ1bmN0aW9uIChwaWNrZXJQYXJhbXMpIHsKLSAgICAgICAgdmFyIGksCi0gICAg
ICAgICAgICBzaXplID0gcGlja2VyUGFyYW1zLmxhYmVscy5sZW5ndGgsCi0gICAgICAgICAgICBw
b3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAotICAgICAgICAgICAgaGVhZGVy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCi0gICAgICAgICAgICBzZWxlY3QgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKLSAgICAgICAgICAgIHRvcFNlbGVjdGVkOwot
Ci0gICAgICAgIHBvcHVwLmNsYXNzTmFtZSA9ICdwb3B1cC1hcmVhJzsKLSAgICAgICAgcG9wdXAu
ZGlyID0gcGlja2VyUGFyYW1zLmRpcmVjdGlvbjsKLSAgICAgICAgc2VsZWN0LmNsYXNzTmFtZSA9
IHNlbGVjdC5pZCA9ICdwb3B1cC1jb250ZW50JzsKLSAgICAgICAgaGVhZGVyLmNsYXNzTmFtZSA9
ICdwb3B1cC1oZWFkZXInOwotICAgICAgICBoZWFkZXIuaW5uZXJUZXh0ID0gcGlja2VyUGFyYW1z
LnVpVGV4dC50aXRsZTsKLSAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKLSAgICAg
ICAgcG9wdXAuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7Ci0gICAgICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnb3B0aW9uJyk7
Ci0KLSAgICAgICAgICAgIGlmICghcGlja2VyUGFyYW1zLmVuYWJsZWRzW2ldKSB7Ci0gICAgICAg
ICAgICAgICAgb3B0aW9uLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHBpY2tlclBhcmFtcy5pdGVtVHlwZXNbaV0gPT09IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gVE9ETzogZGlzYWJsZWQgb3B0Z3JvdXAKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGlja2VyUGFyYW1zLnNlbGVjdGVkc1tpXSkgewot
ICAgICAgICAgICAgICAgIG9wdGlvbi5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpOwotICAgICAg
ICAgICAgICAgIGlmICghdG9wU2VsZWN0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgdG9wU2Vs
ZWN0ZWQgPSBvcHRpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgc3dpdGNoKHBpY2tlclBhcmFtcy5pdGVtVHlwZXNbaV0pIHsKLSAgICAgICAgICAgIGNh
c2UgMToKLSAgICAgICAgICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnb3B0Z3JvdXAnKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAg
ICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnb3B0Z3JvdXAtb3B0aW9uJyk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgY29udGVudHMgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAgICAgIGNvbnRlbnRzLmNsYXNz
TGlzdC5hZGQoJ2NvbnRlbnRzJyk7Ci0gICAgICAgICAgICB2YXIgdGV4dENvbnRhaW5lciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICAgICAgdGV4dENvbnRhaW5lci5j
bGFzc0xpc3QuYWRkKCd0ZXh0Jyk7Ci0gICAgICAgICAgICAvLyB3cmFwIGxhYmVsIGluIDxiZGk+
IGFuZCBkb24ndCBzZXQgYW55IGRpciBhdHRyaWJ1dGUgb24gaXQsCi0gICAgICAgICAgICAvLyBz
byB0aGF0IGl0cyBkaXJlY3Rpb25hbGl0eSB3aWxsIGJlIGRldGVybWluZWQgaGV1cmlzdGljYWxs
eSBhbmQgaXNvbGF0ZWQgZnJvbSB0aGUgcmVzdCBvZiB0aGUgRE9NCi0gICAgICAgICAgICB2YXIg
dGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JkaScpOwotICAgICAgICAgICAgdGV4dC5p
bm5lclRleHQgPSBwaWNrZXJQYXJhbXMubGFiZWxzW2ldOwotICAgICAgICAgICAgdGV4dENvbnRh
aW5lci5hcHBlbmRDaGlsZCh0ZXh0KTsKLSAgICAgICAgICAgIGNvbnRlbnRzLmFwcGVuZENoaWxk
KHRleHRDb250YWluZXIpOwotICAgICAgICAgICAgb3B0aW9uLmFwcGVuZENoaWxkKGNvbnRlbnRz
KTsKLQotICAgICAgICAgICAgaWYgKCFvcHRpb24uY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxl
ZCcpICYmICFvcHRpb24uY2xhc3NMaXN0LmNvbnRhaW5zKCdvcHRncm91cCcpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFwaWNrZXJQYXJhbXMuaXNNdWx0aVNlbGVjdCkgewotICAgICAgICAgICAg
ICAgICAgICBvcHRpb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzZWxlY3RPcHRpb24pOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGlja2VyUGFyYW1zLmVuYWJsZWRzW2ldKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG9wdGlvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRvZ2ds
ZU9wdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBj
YW5jZWxCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKSwKLSAgICAgICAg
ICAgIGJ1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAgYnV0
dG9ucy5jbGFzc05hbWUgPSAncG9wdXAtYnV0dG9ucyc7Ci0gICAgICAgIGNhbmNlbEJ1dHRvbi5j
bGFzc05hbWUgPSAncG9wdXAtYnV0dG9uJzsKLSAgICAgICAgY2FuY2VsQnV0dG9uLmFkZEV2ZW50
TGlzdGVuZXIoJ2NsaWNrJywgY2FuY2VsKTsKLSAgICAgICAgY2FuY2VsQnV0dG9uLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBpY2tlclBhcmFtcy51aVRleHQuY2FuY2VsQnV0
dG9uTGFiZWwpKTsKLSAgICAgICAgYnV0dG9ucy5hcHBlbmRDaGlsZChjYW5jZWxCdXR0b24pOwot
ICAgICAgICBpZiAocGlja2VyUGFyYW1zLmlzTXVsdGlTZWxlY3QpIHsKLSAgICAgICAgICAgIHZh
ciBva0J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwotICAgICAgICAg
ICAgb2tCdXR0b24uY2xhc3NOYW1lID0gJ3BvcHVwLWJ1dHRvbic7Ci0gICAgICAgICAgICBva0J1
dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRvbmUpOwotICAgICAgICAgICAgb2tCdXR0
b24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGlja2VyUGFyYW1zLnVpVGV4
dC5kb25lQnV0dG9uTGFiZWwpKTsKLSAgICAgICAgICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQob2tC
dXR0b24pOwotICAgICAgICB9Ci0gICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKGJ1dHRvbnMpOwot
ICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcHVwKTsKLSAgICAgICAgaWYgKHRv
cFNlbGVjdGVkKSB7Ci0gICAgICAgICAgICB0b3BTZWxlY3RlZC5zY3JvbGxJbnRvVmlldyh0cnVl
KTsKLSAgICAgICAgICAgIGlmICh0b3BTZWxlY3RlZC5uZXh0U2libGluZykgeyAvLyBVbmxlc3Mg
dGhlIHNlbGVjdGVkIGVsZW1lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSBsaXN0Li4uCi0gICAg
ICAgICAgICAgICAgLy8gLi4uc2Nyb2xsIHRoZSBzZWxlY3RlZCBlbGVtZW50IGZ1cnRoZXIgZG93
biBhIGJpdCB0byBzaG93IHRoYXQgd2UncmUgbm90IGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QKLSAg
ICAgICAgICAgICAgICBzZWxlY3Quc2Nyb2xsVG9wIC09IDUwOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIF9rZXl1cFRpbWVvdXQsCi0gICAgICAgICAgICBfc2VhcmNo
VGV4dCA9ICcnLAotICAgICAgICAgICAgY2xlYXJTZWFyY2ggPSBmdW5jdGlvbiAoKSB7IF9zZWFy
Y2hUZXh0ID0gJyc7IH07Ci0gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVw
JywgZnVuY3Rpb24gKGV2dCkgewotICAgICAgICAgICAgX3NlYXJjaFRleHQgKz0gU3RyaW5nLmZy
b21DaGFyQ29kZShldnQua2V5Q29kZSk7Ci0gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0
KF9rZXl1cFRpbWVvdXQpOwotICAgICAgICAgICAgX2tleXVwVGltZW91dCA9IHdpbmRvdy5zZXRU
aW1lb3V0KGNsZWFyU2VhcmNoLCAxMDAwKTsgLy8gUmVzZXQgc2VhcmNoIHN0cmluZyBpZiB0aGVy
ZSBpcyBuby4uLgotICAgICAgICAgICAgLy8gLi4uaW5wdXQgd2l0aGluIDEgc2Vjb25kLiAxIHNl
Y29uZCBpcyBzdWZmaWNpZW50IGZvciBvbmUgaGFuZCBpbnB1dCBmb3IgbW9zdCBjYXNlcyBmcm9t
IG15Ci0gICAgICAgICAgICAvLyBleHBlcmltZW50cy4gTGV0IHVzIHNldCB0aGUgdGltZSBmb3Ig
bm93LCBhbmQgY2hhbmdlIGxhdGVyIGlmIHNvbWVvbmUgaGFzIGEgYmV0dGVyIGlkZWEuCi0KLSAg
ICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSgndGV4dCcpLAotICAgICAgICAgICAgZnVuY3Rpb24gKHRleHREaXYpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodGV4dERpdi5pbm5lclRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9m
KF9zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRleHREaXYuc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ZXZ0LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0KLSAgICB3aW5kb3cu
c2VsZWN0ID0gd2luZG93LnNlbGVjdCB8fCB7fTsKLSAgICB3aW5kb3cuc2VsZWN0LnNob3cgPSBz
aG93OwotfSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9ibGFja2JlcnJ5L3Rp
bWVDb250cm9sQmxhY2tCZXJyeS5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUmVz
b3VyY2VzL2JsYWNrYmVycnkvdGltZUNvbnRyb2xCbGFja0JlcnJ5LmNzcwkocmV2aXNpb24gMTYx
NTk2KQorKysgU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2JsYWNrYmVycnkvdGltZUNvbnRyb2xC
bGFja0JlcnJ5LmNzcwkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEyLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICovCi0KLSNwb3B1cC1jb250ZW50LXRpbWUgewotICAgIGRpc3BsYXk6IC13ZWJr
aXQtYm94OwotICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDsKLSAgICBwb3NpdGlv
bjogcmVsYXRpdmU7Ci0gICAgbWF4LWhlaWdodDogNDk1cHg7IC8qIDUgcm93cyBvZiA5OXB4IGVh
Y2ggKi8KLX0KLQotLmNvbHVtbiB7Ci0gICAgLXdlYmtpdC1ib3gtZmxleDogMTsKLSAgICBvdmVy
ZmxvdzogaGlkZGVuOwotICAgIC13ZWJraXQtYm9yZGVyLWVuZDogMnB4IHNvbGlkICNiN2I4Yjk7
Ci19Ci0KLS5jb2x1bW46bm90KDpsYXN0LWNoaWxkKSB7Ci0gICAgYm9yZGVyOiAwOwotfQotCi0u
Y2VsbCB7Ci0gICAgaGVpZ2h0OiA5OXB4OwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBk
aXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwot
ICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKLX0KLQotLnllYXJtb250aGRhdGUgLmNlbGwg
ZGl2Omxhc3QtY2hpbGQgewotICAgIGZvbnQtc2l6ZTogMC41ZW07Ci0gICAgY29sb3I6ICM1NTU1
NTU7Ci19Ci0KLS5yb3ctaGlnaGxpZ2h0LWNvbnRhaW5lciB7Ci0gICAgcG9pbnRlci1ldmVudHM6
IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICByaWdodDog
MDsKLSAgICBib3R0b206IDA7Ci0gICAgbGVmdDogMDsKLQotICAgIGRpc3BsYXk6IC13ZWJraXQt
Ym94OwotICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7Ci0gICAgLXdlYmtpdC1ib3gt
cGFjazogY2VudGVyOwotfQotCi0ucm93LWhpZ2hsaWdodC1maWxsZXIgewotICAgIC13ZWJraXQt
Ym94LWZsZXg6IDE7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjEpOwotfQotCi0u
cm93LWhpZ2hsaWdodCB7Ci0gICAgaGVpZ2h0OiA5OXB4OwotICAgIGJvcmRlci13aWR0aDogNHB4
IDA7Ci0gICAgYm9yZGVyLWNvbG9yOiAjMDBhOGRmOwotICAgIGJvcmRlci1zdHlsZTogc29saWQ7
Ci19Ci0KLS50YWxsLWJpdCB7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLX0KLQotQG1lZGlhIG9u
bHkgc2NyZWVuIGFuZCAod2lkdGg6IDcyMHB4KSBhbmQgKGhlaWdodDogNzIwcHgpIHsKLSAgICAj
cG9wdXAtY29udGVudC10aW1lIHsKLSAgICAgICAgbWF4LWhlaWdodDogNDU1cHg7IC8qIDUgcm93
cyBvZiA5MXB4IGVhY2ggKi8KLSAgICB9Ci0KLSAgICAuY2VsbCB7Ci0gICAgICAgIGhlaWdodDog
OTFweDsKLSAgICB9Ci0KLSAgICAucm93LWhpZ2hsaWdodCB7Ci0gICAgICAgIGhlaWdodDogOTFw
eDsKLSAgICB9Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvYmxhY2tiZXJyeS90
aW1lQ29udHJvbEJsYWNrQmVycnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUmVz
b3VyY2VzL2JsYWNrYmVycnkvdGltZUNvbnRyb2xCbGFja0JlcnJ5LmpzCShyZXZpc2lvbiAxNjE1
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvYmxhY2tiZXJyeS90aW1lQ29udHJvbEJs
YWNrQmVycnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLCAyMDEyLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICovCi0oZnVuY3Rpb24gKCl7Ci12YXIgX3R5cGUsCi0gICAgX2N1cnJlbnREYXRl
LAotICAgIF90ekhvdXJzLAotICAgIF90ek1pbnV0ZXMsCi0gICAgX3R6T2Zmc2V0ID0gMCwKLSAg
ICBfbWluLAotICAgIF9tYXgsCi0gICAgX3N0ZXAsCi0gICAgX3Nob3J0TW9udGhMYWJlbHMsCi0g
ICAgX2xvbmdNb250aExhYmVscywKLSAgICBfZGF5c09mV2Vla0xhYmVscywKLSAgICBfYW1QbUxh
YmVscywKLSAgICBfYmFzZU9mZnNldCwKLSAgICBfZHJhZ2dpbmcgPSBmYWxzZSwKLSAgICBfZmly
c3RZID0gMCwKLSAgICBfc2Nyb2xsTGlzdGVuZXIsCi0gICAgX2VuZFNjcm9sbExpc3RlbmVyOwot
Ci12YXIgSVRFTV9IRUlHSFQgPSAoc2NyZWVuLndpZHRoID09PSA3MjAgJiYgc2NyZWVuLmhlaWdo
dCA9PT0gNzIwKSA/IDkxIDogOTk7IC8vIGluIHB4LCBubyBib3JkZXIKLQotdmFyIFRJTUUgPSAn
VGltZScsCi0gICAgREFURV9USU1FID0gJ0RhdGVUaW1lJywKLSAgICBEQVRFX1RJTUVfTE9DQUwg
PSAnRGF0ZVRpbWVMb2NhbCcsCi0gICAgREFURSA9ICdEYXRlJywKLSAgICBNT05USCA9ICdNb250
aCc7Ci0KLXZhciBIT1VSUyA9ICdIb3VycycsCi0gICAgTUlOVVRFUyA9ICdNaW51dGVzJywKLSAg
ICBZRUFSTU9OVEhEQVRFID0gJ1llYXJNb250aERhdGUnLAotICAgIFlFQVIgPSAnWWVhcic7Ci0K
LXZhciBDT0xVTU5TID0ge307Ci1DT0xVTU5TW1RJTUVdID0gW0hPVVJTLCBNSU5VVEVTXTsKLUNP
TFVNTlNbREFURV9USU1FXSA9IFtZRUFSTU9OVEhEQVRFLCBIT1VSUywgTUlOVVRFU107Ci1DT0xV
TU5TW0RBVEVfVElNRV9MT0NBTF0gPSBbWUVBUk1PTlRIREFURSwgSE9VUlMsIE1JTlVURVNdOwot
Q09MVU1OU1tEQVRFXSA9IFtEQVRFLCBNT05USCwgWUVBUl07Ci1DT0xVTU5TW01PTlRIXSA9IFtN
T05USCwgWUVBUl07Ci0KLS8vIEhhcmQgbGltaXRzIGZvciBpbnRlcm5hbCB0eXBlLiBTZWUgV2Vi
Q29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oCi12YXIgTElNSVRfTUlOID0gbmV3IERhdGUo
LTYyMTM1NTk2ODAwMDAwLjApLAotICAgIExJTUlUX01BWCA9IG5ldyBEYXRlKDg2NDAwMDAwMDAw
MDAwMDAuMCk7Ci0KLWZ1bmN0aW9uIHBhcnNlRnJvbURhdGVTdHJpbmcoc3RyKSB7Ci0gICAgdmFy
IG5vdyA9IG5ldyBEYXRlKCksCi0gICAgICAgIG1hdGNoOwotICAgIGlmIChzdHIpIHsKLSAgICAg
ICAgc3dpdGNoIChfdHlwZSkgewotICAgICAgICBjYXNlIFRJTUU6Ci0gICAgICAgICAgICBtYXRj
aCA9IHN0ci5tYXRjaCgvKFxkKyk6KFxkKykvKTsKLSAgICAgICAgICAgIF90ekhvdXJzID0gbWF0
Y2hbMV07Ci0gICAgICAgICAgICBfdHpNaW51dGVzID0gbWF0Y2hbMl07Ci0gICAgICAgICAgICBf
Y3VycmVudERhdGUgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCks
IG5vdy5nZXREYXRlKCksIF90ekhvdXJzLCBfdHpNaW51dGVzKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIERBVEU6Ci0gICAgICAgICAgICBtYXRjaCA9IHN0ci5tYXRjaCgvKFxk
KyktKFxkKyktKFxkKykvKTsKLSAgICAgICAgICAgIF9jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKG1h
dGNoWzFdLCBtYXRjaFsyXSAtIDEsIG1hdGNoWzNdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIE1PTlRIOgotICAgICAgICAgICAgbWF0Y2ggPSBzdHIubWF0Y2goLyhcZCspLShc
ZCspLyk7Ci0gICAgICAgICAgICBfY3VycmVudERhdGUgPSBuZXcgRGF0ZShtYXRjaFsxXSwgbWF0
Y2hbMl0gLSAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERBVEVfVElNRTog
Ly8gZmFsbC10aHJvdWdoCi0gICAgICAgIGNhc2UgREFURV9USU1FX0xPQ0FMOgotICAgICAgICAg
ICAgbWF0Y2ggPSBzdHIubWF0Y2goLyhcZCspLShcZCspLShcZCspW1QgXShcZCspOihcZCspLyk7
Ci0gICAgICAgICAgICB2YXIgdXRjVGltZSA9IG5ldyBEYXRlKG1hdGNoWzFdLCBtYXRjaFsyXSAt
IDEsIG1hdGNoWzNdLCBtYXRjaFs0XSwgbWF0Y2hbNV0pOwotICAgICAgICAgICAgaWYgKG1hdGNo
ID0gc3RyLm1hdGNoKC8oXGQrKS0oXGQrKS0oXGQrKVtUIF0oXGQrKTooXGQrKSsoXGQrKTooXGQr
KS8pKSB7IC8vIHBvc2l0aXZlIHRpbWV6b25lIG9mZnNldAotICAgICAgICAgICAgICAgIF90ekhv
dXJzID0gbWF0Y2hbNl07Ci0gICAgICAgICAgICAgICAgX3R6TWludXRlcyA9IG1hdGNoWzddOwot
ICAgICAgICAgICAgICAgIF90ek9mZnNldCA9IChtYXRjaFs2XSAqIDYwICsgbWF0Y2hbN10pICog
NjAwMDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9IHN0ci5tYXRjaCgvKFxkKykt
KFxkKyktKFxkKylbVCBdKFxkKyk6KFxkKyktKFxkKyk6KFxkKykvKSkgeyAvLyBuZWdhdGl2ZSB0
aW1lem9uZSBvZmZzZXQKLSAgICAgICAgICAgICAgICBfdHpIb3VycyA9IG1hdGNoWzZdOwotICAg
ICAgICAgICAgICAgIF90ek1pbnV0ZXMgPSBtYXRjaFs3XTsKLSAgICAgICAgICAgICAgICBfdHpP
ZmZzZXQgPSAtKG1hdGNoWzZdICogNjAgKyBtYXRjaFs3XSkgKiA2MDAwMDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIF9jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKHV0Y1RpbWUuZ2V0VGltZSgp
ICsgX3R6T2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgc3dpdGNoIChfdHlwZSkgewotICAgICAgICBjYXNlIFRJTUU6Ci0gICAgICAg
IGNhc2UgREFURV9USU1FOgotICAgICAgICBjYXNlIERBVEVfVElNRV9MT0NBTDoKLSAgICAgICAg
ICAgIF9jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9u
dGgoKSwgbm93LmdldERhdGUoKSwgbm93LmdldEhvdXJzKCksIG5vdy5nZXRNaW51dGVzKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgREFURToKLSAgICAgICAgICAgIF9jdXJy
ZW50RGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbm93
LmdldERhdGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNT05USDoKLSAg
ICAgICAgICAgIF9jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cu
Z2V0TW9udGgoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
ZnVuY3Rpb24gcGFkVHdvKHYpIHsgcmV0dXJuICgnMCcgKyB2KS5zdWJzdHIoLTIsIDIpOyB9Ci1m
dW5jdGlvbiBwYWRGb3VyKHYpIHsgcmV0dXJuICgnMDAwJyArIHYpLnN1YnN0cigtNCwgNCk7IH0K
LQotZnVuY3Rpb24gZ2V0UmVzdWx0U3RyaW5nKCkgewotICAgIHN3aXRjaChfdHlwZSkgewotICAg
IGNhc2UgVElNRToKLSAgICAgICAgcmV0dXJuIHBhZFR3byhfY3VycmVudERhdGUuZ2V0SG91cnMo
KSkgKyAnOicgKyBwYWRUd28oX2N1cnJlbnREYXRlLmdldE1pbnV0ZXMoKSk7Ci0gICAgY2FzZSBE
QVRFX1RJTUU6IC8vIGZhbGwtdGhyb3VnaAotICAgIGNhc2UgREFURV9USU1FX0xPQ0FMOiAvLyB3
b3JrcyBiZWNhdXNlIF90ek9mZnNldCBmb3IgZHRsb2NhbCBpcyAwCi0gICAgICAgIHZhciBhZGp1
c3RlZERhdGUgPSBuZXcgRGF0ZShfY3VycmVudERhdGUuZ2V0VGltZSgpIC0gX3R6T2Zmc2V0KSwK
LSAgICAgICAgICAgIGRhdGV0aW1lID0gcGFkRm91cihhZGp1c3RlZERhdGUuZ2V0RnVsbFllYXIo
KSkgKyAnLScgKyBwYWRUd28oYWRqdXN0ZWREYXRlLmdldE1vbnRoKCkgKyAxKSArICctJyArIHBh
ZFR3byhhZGp1c3RlZERhdGUuZ2V0RGF0ZSgpKSArICdUJyArIHBhZFR3byhhZGp1c3RlZERhdGUu
Z2V0SG91cnMoKSkgKyAnOicgKyBwYWRUd28oYWRqdXN0ZWREYXRlLmdldE1pbnV0ZXMoKSk7Ci0g
ICAgICAgIGlmIChfdHlwZSA9PT0gREFURV9USU1FX0xPQ0FMKSB7Ci0gICAgICAgICAgICByZXR1
cm4gZGF0ZXRpbWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIV90ek9mZnNldCkgewotICAgICAgICAg
ICAgcmV0dXJuIGRhdGV0aW1lICsgJ1onOwotICAgICAgICB9IGVsc2UgaWYgKF90ek9mZnNldCA+
IDApIHsKLSAgICAgICAgICAgIHJldHVybiBkYXRldGltZSArICcrJyArIHBhZFR3byhfdHpIb3Vy
cykgKyAnOicgKyBwYWRUd28oX3R6TWludXRlcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICByZXR1cm4gZGF0ZXRpbWUgKyAnLScgKyBwYWRUd28oX3R6SG91cnMpICsgJzonICsgcGFk
VHdvKF90ek1pbnV0ZXMpOwotICAgICAgICB9Ci0gICAgY2FzZSBEQVRFOgotICAgICAgICByZXR1
cm4gcGFkRm91cihfY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSkgKyAnLScgKyBwYWRUd28oX2N1
cnJlbnREYXRlLmdldE1vbnRoKCkgKyAxKSArICctJyArIHBhZFR3byhfY3VycmVudERhdGUuZ2V0
RGF0ZSgpKTsKLSAgICBjYXNlIE1PTlRIOgotICAgICAgICByZXR1cm4gcGFkRm91cihfY3VycmVu
dERhdGUuZ2V0RnVsbFllYXIoKSkgKyAnLScgKyBwYWRUd28oX2N1cnJlbnREYXRlLmdldE1vbnRo
KCkgKyAxKTsKLSAgICB9Ci0gICAgcmV0dXJuICctMSc7Ci19Ci0KLWZ1bmN0aW9uIG9rKCkgewot
ICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJyc7Ci0gICAgd2luZG93LnNldFZhbHVlQW5k
Q2xvc2VQb3B1cChnZXRSZXN1bHRTdHJpbmcoKSwgd2luZG93LnBvcFVwKTsKLX0KLQotZnVuY3Rp
b24gY2FuY2VsKCkgewotICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJyc7Ci0gICAgd2lu
ZG93LnNldFZhbHVlQW5kQ2xvc2VQb3B1cCgnLTEnLCB3aW5kb3cucG9wVXApOwotfQotCi1mdW5j
dGlvbiBhZGp1c3RDb2x1bW5MYWJlbHNGb3JWYWx1ZShjb2wpIHsKLSAgICB2YXIgY2xvbmVEYXRl
ID0gbmV3IERhdGUoX2N1cnJlbnREYXRlLmdldFRpbWUoKSksCi0gICAgICAgIG9mZnNldCA9IE1h
dGguZmxvb3IoY29sLmNoaWxkcmVuLmxlbmd0aCAvIDIpOwotICAgIHN3aXRjaChjb2wudHlwZSkg
ewotICAgIGNhc2UgSE9VUlM6Ci0gICAgICAgIC8vIEZJWE1FOiAxMmgvMjRoCi0gICAgICAgIGNs
b25lRGF0ZS5zZXRIb3VycyhjbG9uZURhdGUuZ2V0SG91cnMoKSAtIG9mZnNldCk7Ci0gICAgICAg
IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoY29sLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hp
bGQpIHsKLSAgICAgICAgICAgIGNoaWxkLmlubmVyVGV4dCA9IHBhZFR3byhjbG9uZURhdGUuZ2V0
SG91cnMoKSk7Ci0gICAgICAgICAgICBjbG9uZURhdGUuc2V0SG91cnMoY2xvbmVEYXRlLmdldEhv
dXJzKCkgKyAxKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTUlOVVRF
UzoKLSAgICAgICAgY2xvbmVEYXRlLnNldE1pbnV0ZXMoY2xvbmVEYXRlLmdldE1pbnV0ZXMoKSAt
IG9mZnNldCk7Ci0gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoY29sLmNoaWxk
cmVuLCBmdW5jdGlvbiAoY2hpbGQpIHsKLSAgICAgICAgICAgIGNoaWxkLmlubmVyVGV4dCA9IHBh
ZFR3byhjbG9uZURhdGUuZ2V0TWludXRlcygpKTsKLSAgICAgICAgICAgIGNsb25lRGF0ZS5zZXRN
aW51dGVzKGNsb25lRGF0ZS5nZXRNaW51dGVzKCkgKyAxKTsKLSAgICAgICAgfSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgWUVBUk1PTlRIREFURToKLSAgICAgICAgLy8gRklYTUU6IHNob3cg
dGhlIHllYXIKLSAgICAgICAgY2xvbmVEYXRlLnNldERhdGUoY2xvbmVEYXRlLmdldERhdGUoKSAt
IG9mZnNldCk7Ci0gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoY29sLmNoaWxk
cmVuLCBmdW5jdGlvbiAoY2hpbGQpIHsKLSAgICAgICAgICAgIHZhciBkYXRlTW9udGggPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKLSAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAgICAgICBkYXRlTW9udGguaW5uZXJU
ZXh0ID0gY2xvbmVEYXRlLmdldERhdGUoKSArICcgJyArIF9zaG9ydE1vbnRoTGFiZWxzW2Nsb25l
RGF0ZS5nZXRNb250aCgpXTsgLy8gRklYTUU6IHNob3VsZCBsb2NhbGl6ZSBkYXRlIGFzIGEgd2hv
bGUgaW5zdGVhZCBvZiBjb25jYXRlbmF0aW5nIGluZGl2aWR1YWwgY29tcG9uZW50cwotICAgICAg
ICAgICAgd2Vla2RheS5pbm5lclRleHQgPSBfZGF5c09mV2Vla0xhYmVsc1tjbG9uZURhdGUuZ2V0
RGF5KCldOwotICAgICAgICAgICAgY2hpbGQuaW5uZXJIVE1MID0gJyc7Ci0gICAgICAgICAgICBj
aGlsZC5hcHBlbmRDaGlsZChkYXRlTW9udGgpOwotICAgICAgICAgICAgY2hpbGQuYXBwZW5kQ2hp
bGQod2Vla2RheSk7Ci0gICAgICAgICAgICBjbG9uZURhdGUuc2V0RGF0ZShjbG9uZURhdGUuZ2V0
RGF0ZSgpICsgMSk7Ci0gICAgICAgIH0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERBVEU6
Ci0gICAgICAgIGNsb25lRGF0ZS5zZXREYXRlKGNsb25lRGF0ZS5nZXREYXRlKCkgLSBvZmZzZXQp
OwotICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGNvbC5jaGlsZHJlbiwgZnVu
Y3Rpb24gKGNoaWxkKSB7Ci0gICAgICAgICAgICBjaGlsZC5pbm5lclRleHQgPSBjbG9uZURhdGUu
Z2V0RGF0ZSgpOwotICAgICAgICAgICAgY2xvbmVEYXRlLnNldERhdGUoY2xvbmVEYXRlLmdldERh
dGUoKSArIDEpOwotICAgICAgICB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT05USDoK
LSAgICAgICAgY2xvbmVEYXRlLnNldERhdGUoMSk7IC8vIE90aGVyd2lzZSB0aGUgbG9vcCBtaWdo
dCBza2lwIHNob3J0ZXIgbW9udGhzCi0gICAgICAgIGNsb25lRGF0ZS5zZXRNb250aChjbG9uZURh
dGUuZ2V0TW9udGgoKSAtIG9mZnNldCk7Ci0gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNo
LmNhbGwoY29sLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHsKLSAgICAgICAgICAgIGNoaWxk
LmlubmVyVGV4dCA9IF9sb25nTW9udGhMYWJlbHNbY2xvbmVEYXRlLmdldE1vbnRoKCldOwotICAg
ICAgICAgICAgY2xvbmVEYXRlLnNldE1vbnRoKGNsb25lRGF0ZS5nZXRNb250aCgpICsgMSk7Ci0g
ICAgICAgIH0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFlFQVI6Ci0gICAgICAgIGNsb25l
RGF0ZS5zZXRZZWFyKGNsb25lRGF0ZS5nZXRGdWxsWWVhcigpIC0gb2Zmc2V0KTsKLSAgICAgICAg
QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjb2wuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGls
ZCkgewotICAgICAgICAgICAgY2hpbGQuaW5uZXJUZXh0ID0gcGFkRm91cihjbG9uZURhdGUuZ2V0
RnVsbFllYXIoKSk7Ci0gICAgICAgICAgICBjbG9uZURhdGUuc2V0WWVhcihjbG9uZURhdGUuZ2V0
RnVsbFllYXIoKSArIDEpOwotICAgICAgICB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci1mdW5jdGlvbiBiZWdpblNjcm9sbChldnQpIHsKLSAgICBfZHJhZ2dpbmcgPSB0cnVlOwotICAg
IF9maXJzdFkgPSBldnQuY2xpZW50WSB8fCBldnQudG91Y2hlc1swXS5zY3JlZW5ZOwotICAgIF9z
Y3JvbGxMaXN0ZW5lciA9IHNjcm9sbC5iaW5kKHRoaXMpOwotICAgIF9lbmRTY3JvbGxMaXN0ZW5l
ciA9IGVuZFNjcm9sbC5iaW5kKHRoaXMpOwotICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIo
J21vdXNlbW92ZScsIF9zY3JvbGxMaXN0ZW5lcik7Ci0gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigndG91Y2htb3ZlJywgX3Njcm9sbExpc3RlbmVyKTsKLSAgICBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCdtb3VzZXVwJywgX2VuZFNjcm9sbExpc3RlbmVyKTsKLSAgICBkb2N1bWVudC5h
ZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIF9lbmRTY3JvbGxMaXN0ZW5lcik7Ci19Ci0KLWZ1
bmN0aW9uIHNjcm9sbChldnQpIHsKLSAgICBpZiAoX2RyYWdnaW5nKSB7Ci0gICAgICAgIHZhciBj
bGllbnRZID0gZXZ0LmNsaWVudFkgfHwgZXZ0LnRvdWNoZXNbMF0uc2NyZWVuWTsKLSAgICAgICAg
dGhpcy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWxsLWJpdCcpWzBdLnN0eWxlLndlYmtpdFRy
YW5zZm9ybSA9ICd0cmFuc2xhdGVZKCcgKyAoY2xpZW50WSAtIF9maXJzdFkgKyBfYmFzZU9mZnNl
dCkgKyAncHgpIHRyYW5zbGF0ZVooMCknOwotICAgIH0KLX0KLQotZnVuY3Rpb24gZW5kU2Nyb2xs
KGV2dCkgewotICAgIGlmICghX2RyYWdnaW5nKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBfZHJhZ2dpbmcgPSBmYWxzZTsKLSAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVy
KCdtb3VzZW1vdmUnLCBfc2Nyb2xsTGlzdGVuZXIpOwotICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50
TGlzdGVuZXIoJ3RvdWNobW92ZScsIF9zY3JvbGxMaXN0ZW5lcik7Ci0gICAgZG9jdW1lbnQucmVt
b3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF9lbmRTY3JvbGxMaXN0ZW5lcik7Ci0gICAgZG9j
dW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfZW5kU2Nyb2xsTGlzdGVuZXIp
OwotICAgIHZhciBjbGllbnRZID0gZXZ0LmNsaWVudFkgfHwgZXZ0LmNoYW5nZWRUb3VjaGVzWzBd
LnNjcmVlblk7Ci0gICAgdmFyIGR5ID0gY2xpZW50WSAtIF9maXJzdFksCi0gICAgICAgIGRJdGVt
cyA9IE1hdGguZmxvb3IoZHkgLyBJVEVNX0hFSUdIVCksCi0gICAgICAgIGV4dHJhID0gZHkgJSBJ
VEVNX0hFSUdIVDsKLSAgICBpZiAoZXh0cmEgPCAwKSB7Ci0gICAgICAgIGRJdGVtcysrOwotICAg
IH0KLSAgICAvLyBGdWRnZTogd2hpY2ggaXRlbSBpcyBhY3R1YWxseSBtb3N0bHkgaW4gdGhlIHdp
bmRvdz8KLSAgICBpZiAoZXh0cmEgPiBJVEVNX0hFSUdIVCAvIDIpIHsKLSAgICAgICAgLy8geW91
J3ZlIG1vdmVkIGRvd24gbW9yZSB0aGFuIGhhbGYgdGhlIG5leHQgZWxlbWVudCwgbW92ZSBzb21l
IG1vcmUKLSAgICAgICAgZEl0ZW1zKys7Ci0gICAgICAgIGV4dHJhIC09IElURU1fSEVJR0hUOwot
ICAgIH0gZWxzZSBpZiAoZXh0cmEgPCAtSVRFTV9IRUlHSFQgLyAyKSB7Ci0gICAgICAgIGRJdGVt
cy0tOwotICAgICAgICBleHRyYSArPSBJVEVNX0hFSUdIVDsKLSAgICB9Ci0gICAgdmFyIG9sZERh
dGUgPSBuZXcgRGF0ZShfY3VycmVudERhdGUuZ2V0VGltZSgpKTsKLSAgICBzd2l0Y2godGhpcy50
eXBlKSB7Ci0gICAgY2FzZSBIT1VSUzoKLSAgICBjYXNlIE1JTlVURVM6Ci0gICAgY2FzZSBEQVRF
OgotICAgIGNhc2UgTU9OVEg6Ci0gICAgICAgIF9jdXJyZW50RGF0ZVsnc2V0JyArIHRoaXMudHlw
ZV0oX2N1cnJlbnREYXRlWydnZXQnICsgdGhpcy50eXBlXSgpIC0gZEl0ZW1zKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBZRUFSOgotICAgICAgICBfY3VycmVudERhdGUuc2V0RnVsbFllYXIo
X2N1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkgLSBkSXRlbXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFlFQVJNT05USERBVEU6Ci0gICAgICAgIF9jdXJyZW50RGF0ZS5zZXREYXRlKF9jdXJy
ZW50RGF0ZS5nZXREYXRlKCkgLSBkSXRlbXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICAvLyBUT0RPOiBhbmltYXRlIHRoZSBleHRyYW5lb3VzIGNvbHVtbiBjaGFuZ2VzCi0gICAgLy8g
YW5pbWF0ZSB0aGUgb25lIGNoYW5nZWQgdGFsbGJpdCBtYW51YWxseQotICAgIHZhciB0YWxsQml0
ID0gdGhpcy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWxsLWJpdCcpWzBdOwotICAgIHRhbGxC
aXQuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgTWF0aC5h
YnMoZXh0cmEgKiAyKSArICdtcyBlYXNlLW91dCc7Ci0gICAgdGFsbEJpdC5zdHlsZS53ZWJraXRU
cmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgnICsgKF9iYXNlT2Zmc2V0ICsgZHkgLSBleHRyYSkgKyAn
cHgpIHRyYW5zbGF0ZVooMCknOwotICAgIC8vIHVzZSBhIHRpbWVyIGluc3RlYWQgb2Ygd2Via2l0
VHJhbnNpdGlvbkVuZCBpbiBjYXNlIHdlYmtpdFRyYW5zaXRpb25FbmQgZG9lc24ndCBmaXJlICho
YXBwZW5zIGlmIGl0IHNraXBzIGFsbCBmcmFtZXMpCi0gICAgc2V0VGltZW91dChmdW5jdGlvbiAo
KSB7Ci0gICAgICAgIHRhbGxCaXQuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICcnOwotICAgICAg
ICB2YXIgdGFsbEJpdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YWxsLWJp
dCcpOwotICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRhbGxCaXRzLCBmdW5j
dGlvbiAodGFsbCkgewotICAgICAgICAgICAgc3dpdGNoKHRhbGwudHlwZSkgewotICAgICAgICAg
ICAgY2FzZSBIT1VSUzoKLSAgICAgICAgICAgIGNhc2UgTUlOVVRFUzoKLSAgICAgICAgICAgIGNh
c2UgREFURToKLSAgICAgICAgICAgIGNhc2UgTU9OVEg6Ci0gICAgICAgICAgICAgICAgaWYgKG9s
ZERhdGVbJ2dldCcgKyB0YWxsLnR5cGVdKCkgIT09IF9jdXJyZW50RGF0ZVsnZ2V0JyArIHRhbGwu
dHlwZV0oKSkgewotICAgICAgICAgICAgICAgICAgICBhZGp1c3RDb2x1bW5MYWJlbHNGb3JWYWx1
ZSh0YWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFlFQVI6Ci0gICAgICAgICAgICAgICAgaWYgKG9sZERhdGUuZ2V0RnVsbFll
YXIoKSAhPT0gX2N1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYWRqdXN0Q29sdW1uTGFiZWxzRm9yVmFsdWUodGFsbCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBZRUFSTU9OVEhEQVRFOgot
ICAgICAgICAgICAgICAgIGlmIChvbGREYXRlLmdldEZ1bGxZZWFyKCkgIT09IF9jdXJyZW50RGF0
ZS5nZXRGdWxsWWVhcigpCi0gICAgICAgICAgICAgICAgICAgIHx8IG9sZERhdGUuZ2V0TW9udGgo
KSAhPT0gX2N1cnJlbnREYXRlLmdldE1vbnRoKCkKLSAgICAgICAgICAgICAgICAgICAgfHwgb2xk
RGF0ZS5nZXREYXRlKCkgIT09IF9jdXJyZW50RGF0ZS5nZXREYXRlKCkKLSAgICAgICAgICAgICAg
ICApIHsKLSAgICAgICAgICAgICAgICAgICAgYWRqdXN0Q29sdW1uTGFiZWxzRm9yVmFsdWUodGFs
bCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLSAgICAgICAgcmVzZXRQb3NpdGlvbnMoKTsKLSAgICB9LCBNYXRo
LmFicyhleHRyYSAqIDIpICsgMSk7Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZUNvbHVtbih0eXBlKSB7
Ci0gICAgdmFyIGNvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAotICAgICAgICB0
YWxsQml0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgY29sLmNsYXNzTmFt
ZSA9ICdjb2x1bW4gJyArIHR5cGU7Ci0gICAgY29sLnR5cGUgPSB0eXBlOwotICAgIHRhbGxCaXQu
Y2xhc3NOYW1lID0gJ3RhbGwtYml0JzsKLSAgICB0YWxsQml0LnR5cGUgPSB0eXBlOwotICAgIGNv
bC5hcHBlbmRDaGlsZCh0YWxsQml0KTsKLQotICAgIHZhciBudW1DZWxscyA9IE1hdGguY2VpbChN
YXRoLm1heChzY3JlZW4uaGVpZ2h0LCBzY3JlZW4ud2lkdGgpIC8gSVRFTV9IRUlHSFQpICogMiAr
IDE7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1DZWxsczsgKytpKSB7Ci0gICAgICAgIHZh
ciBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAgIGNlbGwuY2xh
c3NOYW1lID0gJ2NlbGwnOwotICAgICAgICB0YWxsQml0LmFwcGVuZENoaWxkKGNlbGwpOwotICAg
IH0KLQotICAgIGFkanVzdENvbHVtbkxhYmVsc0ZvclZhbHVlKHRhbGxCaXQpOwotCi0gICAgY29s
LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGJlZ2luU2Nyb2xsKTsKLSAgICBjb2wuYWRk
RXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGJlZ2luU2Nyb2xsKTsKLQotICAgIHJldHVybiBj
b2w7Ci19Ci0KLWZ1bmN0aW9uIHJlc2V0UG9zaXRpb25zKCkgewotICAgIHZhciB0YWxsQml0cyA9
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhbGwtYml0Jyk7Ci0gICAgQXJyYXku
cHJvdG90eXBlLmZvckVhY2guY2FsbCh0YWxsQml0cywgZnVuY3Rpb24gKHRhbGxCaXQpIHsKLSAg
ICAgICAgdGFsbEJpdC5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgnICsgX2Jh
c2VPZmZzZXQgKyAncHgpIHRyYW5zbGF0ZVooMCknOwotICAgIH0pOwotfQotCi1mdW5jdGlvbiBz
aG93KHBpY2tlclBhcmFtcykgewotICAgIF90eXBlID0gcGlja2VyUGFyYW1zLnR5cGU7Ci0gICAg
cGFyc2VGcm9tRGF0ZVN0cmluZyhwaWNrZXJQYXJhbXMuaW5pdGlhbFZhbHVlKTsKLSAgICBfbWlu
ID0gcGlja2VyUGFyYW1zLm1pbjsgLy8gRklYTUU6IG1pbiBub3Qgc3VwcG9ydGVkCi0gICAgX21h
eCA9IHBpY2tlclBhcmFtcy5tYXg7IC8vIEZJWE1FOiBtYXggbm90IHN1cHBvcnRlZAotICAgIF9z
dGVwID0gcGlja2VyUGFyYW1zLnN0ZXA7IC8vIEZJWE1FOiBzdGVwIG5vdCBzdXBwb3J0ZWQKLSAg
ICAvLyBGSVhNRTogZGlzYWJsZWQgbm90IHN1cHBvcnRlZCAobmVlZCB0byBnZXQgdGhpcyBzdGF0
ZSBwYXNzZWQgaW4pCi0KLSAgICBfc2hvcnRNb250aExhYmVscyA9IHBpY2tlclBhcmFtcy51aVRl
eHQuc2hvcnRNb250aExhYmVsczsKLSAgICBfbG9uZ01vbnRoTGFiZWxzID0gcGlja2VyUGFyYW1z
LnVpVGV4dC5tb250aExhYmVsczsKLSAgICBfZGF5c09mV2Vla0xhYmVscyA9IHBpY2tlclBhcmFt
cy51aVRleHQuZGF5c09mV2Vla0xhYmVsczsKLSAgICBfYW1QbUxhYmVscyA9IHBpY2tlclBhcmFt
cy51aVRleHQuYW1QbUxhYmVsczsKLQotICAgIGlmICghX2N1cnJlbnREYXRlKSB7Ci0gICAgICAg
IC8vIFBhcnNlIGZhaWxlZAotICAgICAgICBjYW5jZWwoKTsKLSAgICB9Ci0KLSAgICBpZiAoX2N1
cnJlbnREYXRlIDwgTElNSVRfTUlOKSB7Ci0gICAgICAgIF9jdXJyZW50RGF0ZSA9IG5ldyBEYXRl
KExJTUlUX01JTi5nZXRUaW1lKCkpOwotICAgIH0gZWxzZSBpZiAoX2N1cnJlbnREYXRlID4gTElN
SVRfTUFYKSB7Ci0gICAgICAgIF9jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKExJTUlUX01BWC5nZXRU
aW1lKCkpOwotICAgIH0KLQotICAgIC8vIFNldCB1cCB0aGUgVUkKLSAgICB2YXIgcG9wdXAgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICBwb3B1cC5jbGFzc05hbWUgPSBwb3B1
cC5pZCA9ICdwb3B1cC1hcmVhJzsKLSAgICBwb3B1cC5kaXIgPSBwaWNrZXJQYXJhbXMuZGlyZWN0
aW9uOwotICAgIHZhciBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAg
ICBoZWFkZXIuY2xhc3NOYW1lID0gJ3BvcHVwLWhlYWRlcic7Ci0gICAgaGVhZGVyLmlubmVyVGV4
dCA9IHBpY2tlclBhcmFtcy51aVRleHQudGl0bGU7Ci0gICAgcG9wdXAuYXBwZW5kQ2hpbGQoaGVh
ZGVyKTsKLSAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwot
ICAgIGNvbnRlbnQuY2xhc3NOYW1lID0gJ3BvcHVwLWNvbnRlbnQnOwotICAgIGNvbnRlbnQuZGly
ID0gJ2x0cic7IC8vIEZJWE1FOiBSVEwgVUkgc3BlY2lmaWNhdGlvbnMgbm90IGRvbmUgeWV0Ci0g
ICAgY29udGVudC5pZCA9ICdwb3B1cC1jb250ZW50LXRpbWUnOwotICAgIHBvcHVwLmFwcGVuZENo
aWxkKGNvbnRlbnQpOwotCi0gICAgQ09MVU1OU1tfdHlwZV0uZm9yRWFjaChmdW5jdGlvbiAodHlw
ZSkgewotICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKGNyZWF0ZUNvbHVtbih0eXBlKSk7Ci0g
ICAgfSk7Ci0KLSAgICB2YXIgcm93SGlnaGxpZ2h0Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JyksCi0gICAgICAgIGZpbGxlcjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKSwKLSAgICAgICAgc2VsZWN0ZWRSb3dIaWdobGlnaHQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKSwKLSAgICAgICAgZmlsbGVyMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOwotICAgIHJvd0hpZ2hsaWdodENvbnRhaW5lci5jbGFzc05hbWUgPSAncm93LWhpZ2hs
aWdodC1jb250YWluZXInOwotICAgIHNlbGVjdGVkUm93SGlnaGxpZ2h0LmNsYXNzTmFtZSA9ICdy
b3ctaGlnaGxpZ2h0JzsKLSAgICBmaWxsZXIxLmNsYXNzTmFtZSA9IGZpbGxlcjIuY2xhc3NOYW1l
ID0gJ3Jvdy1oaWdobGlnaHQtZmlsbGVyJzsKLSAgICByb3dIaWdobGlnaHRDb250YWluZXIuYXBw
ZW5kQ2hpbGQoZmlsbGVyMSk7Ci0gICAgcm93SGlnaGxpZ2h0Q29udGFpbmVyLmFwcGVuZENoaWxk
KHNlbGVjdGVkUm93SGlnaGxpZ2h0KTsKLSAgICByb3dIaWdobGlnaHRDb250YWluZXIuYXBwZW5k
Q2hpbGQoZmlsbGVyMik7Ci0gICAgY29udGVudC5hcHBlbmRDaGlsZChyb3dIaWdobGlnaHRDb250
YWluZXIpOwotCi0gICAgdmFyIG9rQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0
dG9uJyksCi0gICAgICAgIGNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1
dHRvbicpLAotICAgICAgICBidXR0b25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
Ci0gICAgYnV0dG9ucy5jbGFzc05hbWUgPSAncG9wdXAtYnV0dG9ucyc7Ci0gICAgb2tCdXR0b24u
Y2xhc3NOYW1lID0gJ3BvcHVwLWJ1dHRvbic7Ci0gICAgb2tCdXR0b24uaW5uZXJUZXh0ID0gcGlj
a2VyUGFyYW1zLnVpVGV4dC5kb25lQnV0dG9uTGFiZWw7Ci0gICAgb2tCdXR0b24uYWRkRXZlbnRM
aXN0ZW5lcignY2xpY2snLCBvayk7Ci0gICAgY2FuY2VsQnV0dG9uLmNsYXNzTmFtZSA9ICdwb3B1
cC1idXR0b24nOwotICAgIGNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBwaWNrZXJQYXJhbXMudWlU
ZXh0LmNhbmNlbEJ1dHRvbkxhYmVsOwotICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVy
KCdjbGljaycsIGNhbmNlbCk7Ci0gICAgYnV0dG9ucy5hcHBlbmRDaGlsZChjYW5jZWxCdXR0b24p
OwotICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQob2tCdXR0b24pOwotCi0gICAgcG9wdXAuYXBwZW5k
Q2hpbGQoYnV0dG9ucyk7Ci0KLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcHVwKTsK
LQotICAgIF9iYXNlT2Zmc2V0ID0gTWF0aC5mbG9vcihkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKCdjb2x1bW4nKVswXS5jbGllbnRIZWlnaHQgLyAyIC0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSgndGFsbC1iaXQnKVswXS5jbGllbnRIZWlnaHQgLyAyKTsKLSAgICByZXNl
dFBvc2l0aW9ucygpOwotfQotCi13aW5kb3cucG9wdXBjb250cm9sID0gd2luZG93LnBvcHVwY29u
dHJvbCB8fCB7fTsKLXdpbmRvdy5wb3B1cGNvbnRyb2wuc2hvdyA9IHNob3c7Ci19KCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNCbGFja0JlcnJ5LmNzcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0JsYWNrQmVycnkuY3NzCShy
ZXZpc2lvbiAxNjE1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0JsYWNr
QmVycnkuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MCArMCwwIEBACi0vKgotICogQmxhY2tC
ZXJyeSBzcGVjaWZpYyBvdmVycmlkZXMgZm9yIEhUTUw1IG1lZGlhIGVsZW1lbnRzLgotICoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0gLyogQmxhY2tCZXJyeSBkZWZhdWx0IG1lZGlhIGNvbnRyb2xzLiAq
LwotCi1hdWRpbyB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgzOCwgMzgsIDM4LCAwLjgp
OwotICAgIHdpZHRoOiAzMDBweDsKLSAgICBoZWlnaHQ6IDMycHg7Ci19Ci0KLWF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLWVtYmVkZGVkLXBhbmVsLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1j
b250cm9scy1lbWJlZGRlZC1wYW5lbCB7Ci0gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwotICAg
IC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKLSAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBj
ZW50ZXI7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGJvdHRvbTogMDsKLSAgICB3aWR0
aDogMTAwJTsKLSAgICBoZWlnaHQ6IGF1dG87Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgz
OCwgMzgsIDM4LCAwLjgpOwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5l
bCwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwgewotICAgIGRpc3BsYXk6IG5v
bmU7Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWJ1dHRvbi1ncm91cC1jb250
YWluZXIsIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWJ1dHRvbi1ncm91cC1jb250YWlu
ZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRy
b2xzLWZ1bGxzY3JlZW4tdGltZS1kaXNwbGF5LWNvbnRhaW5lciwgYXVkaW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtZnVsbHNjcmVlbi10aW1lLWRpc3BsYXktY29udGFpbmVyIHsKLSAgICBkaXNw
bGF5OiBub25lOwotfQotCi12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLWRpc3Bs
YXktY29udGFpbmVyLCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLWRpc3BsYXkt
Y29udGFpbmVyIHsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLWNvbnRyb2xzLWJhY2tn
cm91bmQ7Ci0gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwotICAgIC13ZWJraXQtZmxleC1kaXJl
Y3Rpb246IHJvdzsKLSAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7Ci0gICAgLXdlYmtp
dC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Ci0gICAgLXdlYmtpdC1mbGV4OiAxIDE7
Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tcGxheS1idXR0
b24sIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tcGxheS1idXR0b24g
ewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXBsYXktYnV0dG9uLCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wbGF5LWJ1dHRvbiB7
Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS1wbGF5LWJ1dHRvbjsKLSAgICBkaXNwbGF5
OiAtd2Via2l0LWZsZXg7Ci19Ci0KLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxz
Y3JlZW4tdGltZWxpbmUtY29udGFpbmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1m
dWxsc2NyZWVuLXRpbWVsaW5lLWNvbnRhaW5lciB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQot
dmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUtY29udGFpbmVyLCBhdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZS1jb250YWluZXIgewotICAgIC13ZWJraXQt
YXBwZWFyYW5jZTogbWVkaWEtY29udHJvbHMtYmFja2dyb3VuZDsKLSAgICBkaXNwbGF5OiAtd2Vi
a2l0LWZsZXg7Ci0gICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgIC13ZWJr
aXQtYWxpZ24taXRlbXM6IHN0cmV0Y2g7Ci0gICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNl
bnRlcjsKLSAgICAtd2Via2l0LWZsZXg6IDEgMTsKLSAgICBoZWlnaHQ6IGF1dG87Ci0gICAgd2lk
dGg6IDEwMCU7Ci19Ci0KLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4t
Y3VycmVudC10aW1lLWRpc3BsYXksIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxz
Y3JlZW4tY3VycmVudC10aW1lLWRpc3BsYXkgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLWF1
ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5LCB2aWRlbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSB7Ci0gICAgLXdlYmtp
dC1hcHBlYXJhbmNlOiBtZWRpYS1jdXJyZW50LXRpbWUtZGlzcGxheTsKLSAgICBkaXNwbGF5OiAt
d2Via2l0LWZsZXg7Ci0gICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93OwotICAgIC13ZWJr
aXQtYWxpZ24taXRlbXM6IGNlbnRlcjsKLSAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogZmxl
eC1lbmQ7Ci0gICAgLXdlYmtpdC1mbGV4OiAwIDA7Ci0gICAgY29sb3I6ICNmYWZhZmE7Ci19Ci0K
LXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tdGltZS1yZW1haW5pbmct
ZGlzcGxheSwgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi10aW1lLXJl
bWFpbmluZy1kaXNwbGF5IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi12aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5LCBhdWRpbzo6LXdlYmtpdC1t
ZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5IHsKLSAgICAtd2Via2l0LWFwcGVh
cmFuY2U6IG1lZGlhLXRpbWUtcmVtYWluaW5nLWRpc3BsYXk7Ci0gICAgZGlzcGxheTogLXdlYmtp
dC1mbGV4OwotICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKLSAgICAtd2Via2l0LWFs
aWduLWl0ZW1zOiBjZW50ZXI7Ci0gICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5k
OwotICAgIC13ZWJraXQtZmxleDogMCAwOwotICAgIGNvbG9yOiByZ2IoMTI1LCAxMjUsIDEyNSk7
Ci19Ci0KLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tdGltZWxpbmUs
IHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tdGltZWxpbmUgewotICAg
IGRpc3BsYXk6IG5vbmU7Ci19Ci0KLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVs
aW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7Ci0gICAgLXdlYmtp
dC1hcHBlYXJhbmNlOiBtZWRpYS1zbGlkZXI7Ci0gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4Owot
ICAgIC13ZWJraXQtZmxleDogMSAxOwotICAgIG1hcmdpbi1ib3R0b206IDJweDsKLX0KLQotdmlk
ZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1mdWxsc2NyZWVuLWJ1dHRvbiwg
YXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1mdWxsc2NyZWVuLWJ1dHRv
biB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtZnVsbHNjcmVlbi1idXR0b24gewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtZW50
ZXItZnVsbHNjcmVlbi1idXR0b247Ci0gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwotfQotCi1h
dWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLWJ1dHRvbiB7Ci0gICAgZGlz
cGxheTogbm9uZTsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtYXVkaW8tbXV0
ZS1idXR0b24gewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtbXV0ZS1idXR0b247Ci0g
ICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwotfQotCi12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1hdWRpby1tdXRlLWJ1dHRvbiB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotYXVkaW86
Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgewotICAgIC13
ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtdm9sdW1lLXNsaWRlci1jb250YWluZXI7Ci0gICAgZGlz
cGxheTogLXdlYmtpdC1mbGV4OwotICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsK
LSAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7Ci0gICAgLXdlYmtpdC1qdXN0aWZ5LWNv
bnRlbnQ6IGZsZXgtZW5kOwotICAgIC13ZWJraXQtZmxleDogMSAxOwotICAgIC13ZWJraXQtdXNl
ci1zZWxlY3Q6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxlZnQ6IDBweDsK
LSAgICByaWdodDogMHB4OwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzgsIDM4LCAzOCwg
MC44KTsKLX0KLQotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1j
b250YWluZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLWF1ZGlvOjotd2Via2l0LW1lZGlh
LWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgewotICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlh
LXZvbHVtZS1zbGlkZXI7Ci0gICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKLSAgICAgLXdlYmtp
dC1mbGV4OiAxIDE7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxlZnQ6IDMlOwotICAg
IHJpZ2h0OiAzJTsKLX0KLQotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNs
aWRlciB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtZnVsbHNjcmVlbi1idXR0b24tZGl2aWRlciwgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtZnVsbHNjcmVlbi1idXR0b24tZGl2aWRlciB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0K
LQotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0b24tY29udGFp
bmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wbGF5LWJ1dHRvbi1jb250YWluZXIs
IGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tYnV0dG9uLWNvbnRhaW5l
ciwgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGxheS1idXR0b24tY29udGFpbmVyIHsK
LSAgICBkaXNwbGF5OiBub25lOwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHNCbGFja0JlcnJ5RnVsbHNjcmVlbi5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL21lZGlhQ29udHJvbHNCbGFja0JlcnJ5RnVsbHNjcmVlbi5jc3MJKHJldmlzaW9uIDE2
MTU5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzQmxhY2tCZXJyeUZ1bGxz
Y3JlZW4uY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4MiArMCwwIEBACi0vKgotICogQmxhY2tC
ZXJyeSBzcGVjaWZpYyBvdmVycmlkZXMgZm9yIEhUTUw1IG1lZGlhIGVsZW1lbnRzLgotICoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0gLyogQmxhY2tCZXJyeSBmdWxsc2NyZWVuIHZpZGVvIGNvbnRyb2xz
LiAqLwotCi1ib2R5Oi13ZWJraXQtZnVsbC1wYWdlLW1lZGlhIHsKLSAgICBiYWNrZ3JvdW5kLWNv
bG9yOiByZ2IoMCwgMCwgMCk7Ci19Ci0KLXZpZGVvOi13ZWJraXQtZnVsbC1zY3JlZW46Oi13ZWJr
aXQtbWVkaWEtY29udHJvbHMtZW1iZWRkZWQtcGFuZWwgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19
Ci0KLXZpZGVvOi13ZWJraXQtZnVsbC1zY3JlZW46Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFu
ZWwgewotICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKLSAgICAtd2Via2l0LWZsZXgtZGlyZWN0
aW9uOiBjb2x1bW47Ci0gICAgLXdlYmtpdC1hbGlnbi1pdGVtczogc3RyZXRjaDsKLSAgICBwb3Np
dGlvbjogYWJzb2x1dGU7Ci0gICAgYm90dG9tOiAwcHg7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAg
aGVpZ2h0OiBhdXRvOwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzgsIDM4LCAzOCwgMC44
KTsKLSAgICBjb2xvcjogcmdiKDI1MCwgMjUwLCAyNTApOwotfQotCi12aWRlbzotd2Via2l0LWZ1
bGwtc2NyZWVuOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWJ1dHRvbi1ncm91cC1jb250YWluZXIg
ewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtY29udHJvbHMtYmFja2dyb3VuZDsKLSAg
ICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7Ci0gICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93
OwotICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjsKLSAgICAtd2Via2l0LWp1c3RpZnkt
Y29udGVudDogc3BhY2UtYmV0d2VlbjsKLSAgICAtd2Via2l0LWZsZXg6IDE7Ci0gICAgYmFja2dy
b3VuZC1jb2xvcjogcmdiKDAsIDAsIDApOwotfQotCi12aWRlbzotd2Via2l0LWZ1bGwtc2NyZWVu
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tdGltZS1kaXNwbGF5LWNvbnRhaW5l
ciB7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS1jb250cm9scy1iYWNrZ3JvdW5kOwot
ICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKLSAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBy
b3c7Ci0gICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwotICAgIC13ZWJraXQtanVzdGlm
eS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwotICAgIC13ZWJraXQtZmxleDogMTsKLX0KLQotdmlk
ZW86LXdlYmtpdC1mdWxsLXNjcmVlbjo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLWRpc3Bs
YXktY29udGFpbmVyIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi12aWRlbzotd2Via2l0LWZ1
bGwtc2NyZWVuOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tcGxheS1idXR0b24g
ewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtcGxheS1idXR0b247Ci0gICAgZGlzcGxh
eTogLXdlYmtpdC1mbGV4OwotfQotCi12aWRlbzotd2Via2l0LWZ1bGwtc2NyZWVuOjotd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi12
aWRlbzotd2Via2l0LWZ1bGwtc2NyZWVuOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3Jl
ZW4tdGltZWxpbmUtY29udGFpbmVyIHsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLWNv
bnRyb2xzLWJhY2tncm91bmQ7Ci0gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwotICAgIC13ZWJr
aXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBzdHJl
dGNoOwotICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ci0gICAgLXdlYmtpdC1m
bGV4OiAxOwotICAgIGhlaWdodDogYXV0bzsKLSAgICB3aWR0aDogMTAwJTsKLX0KLQotdmlkZW86
LXdlYmtpdC1mdWxsLXNjcmVlbjo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZS1jb250
YWluZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLXZpZGVvOi13ZWJraXQtZnVsbC1zY3Jl
ZW46Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1jdXJyZW50LXRpbWUtZGlzcGxh
eSB7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS1jdXJyZW50LXRpbWUtZGlzcGxheTsK
LSAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7Ci0gICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjog
cm93OwotICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjsKLSAgICAtd2Via2l0LWp1c3Rp
ZnktY29udGVudDogZmxleC1lbmQ7Ci0gICAgLXdlYmtpdC1mbGV4OiAwOwotfQotCi12aWRlbzot
d2Via2l0LWZ1bGwtc2NyZWVuOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1k
aXNwbGF5IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi12aWRlbzotd2Via2l0LWZ1bGwtc2Ny
ZWVuOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tdGltZS1yZW1haW5pbmctZGlz
cGxheSB7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS10aW1lLXJlbWFpbmluZy1kaXNw
bGF5OwotICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKLSAgICAtd2Via2l0LWZsZXgtZGlyZWN0
aW9uOiByb3c7Ci0gICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwotICAgIC13ZWJraXQt
anVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKLSAgICAtd2Via2l0LWZsZXg6IDA7Ci0gICAgY29s
b3I6IHJnYigxMjUsIDEyNSwgMTI1KTsKLX0KLQotdmlkZW86LXdlYmtpdC1mdWxsLXNjcmVlbjo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5IHsKLSAgICBkaXNw
bGF5OiBub25lOwotfQotCi12aWRlbzotd2Via2l0LWZ1bGwtc2NyZWVuOjotd2Via2l0LW1lZGlh
LWNvbnRyb2xzLWZ1bGxzY3JlZW4tdGltZWxpbmUgewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTog
bWVkaWEtc2xpZGVyOwotICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKLSAgICAtd2Via2l0LWZs
ZXg6IDE7Ci19Ci0KLXZpZGVvOi13ZWJraXQtZnVsbC1zY3JlZW46Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtdGltZWxpbmUgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLXZpZGVvOi13ZWJraXQt
ZnVsbC1zY3JlZW46Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1mdWxsc2NyZWVu
LWJ1dHRvbiB7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS1leGl0LWZ1bGxzY3JlZW4t
YnV0dG9uOwotICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKLX0KLQotdmlkZW86LXdlYmtpdC1m
dWxsLXNjcmVlbjo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLWJ1dHRvbiB7Ci0g
ICAgZGlzcGxheTogbm9uZTsKLX0KLQotdmlkZW86LXdlYmtpdC1mdWxsLXNjcmVlbjo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy1hdWRpby1tdXRlLWJ1dHRvbiB7Ci0gICAgZGlzcGxheTogbm9uZTsK
LX0KLQotdmlkZW86LXdlYmtpdC1mdWxsLXNjcmVlbjo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12
b2x1bWUtc2xpZGVyLWNvbnRhaW5lciB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotdmlkZW86
LXdlYmtpdC1mdWxsLXNjcmVlbjo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVy
IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi12aWRlbzotd2Via2l0LWZ1bGwtc2NyZWVuOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tYnV0dG9uLWRpdmlkZXIgewotICAgIC13
ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtcmV3aW5kLWJ1dHRvbjsKLSAgICBkaXNwbGF5OiAtd2Vi
a2l0LWZsZXg7Ci19Ci0KLXZpZGVvOi13ZWJraXQtZnVsbC1zY3JlZW46Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtZnVsbHNjcmVlbi1idXR0b24tY29udGFpbmVyLCB2aWRlbzotd2Via2l0LWZ1bGwt
c2NyZWVuOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uLWNvbnRhaW5lciB7Ci0g
ICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS1jb250cm9scy1iYWNrZ3JvdW5kOwotICAgIGRp
c3BsYXk6IC13ZWJraXQtZmxleDsKLSAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7Ci0g
ICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwotICAgIC13ZWJraXQtZmxleDogMTsKLSAg
ICBtaW4td2lkdGg6IDEwMCU7Ci19Ci0KLXZpZGVvOi13ZWJraXQtZnVsbC1zY3JlZW46Oi13ZWJr
aXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0b24tY29udGFpbmVyIHsKLSAgICAtd2Vi
a2l0LWp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKLX0KLQotdmlkZW86LXdlYmtpdC1mdWxs
LXNjcmVlbjo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wbGF5LWJ1dHRvbi1jb250YWluZXIgewot
ICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ci19Ci0KLXZpZGVvOi13ZWJraXQt
ZnVsbC1zY3JlZW46Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGxhY2Vob2xkZXIgewotICAgIC13
ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtY29udHJvbHMtYmFja2dyb3VuZDsKLSAgICBkaXNwbGF5
OiAtd2Via2l0LWZsZXg7Ci0gICAgLXdlYmtpdC1mbGV4OiAxOwotICAgIG1pbi13aWR0aDogMTAw
JTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy90aGVtZUJsYWNrQmVycnkuY3NzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy90aGVtZUJsYWNrQmVycnkuY3NzCShyZXZpc2lv
biAxNjE1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvdGhlbWVCbGFja0JlcnJ5LmNzcwkod29y
a2luZyBjb3B5KQpAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi10ZXh0YXJlYSB7Ci0gICAgZm9udC1mYW1p
bHk6IG1vbm9zcGFjZTsKLX0KLQotc2VsZWN0IHsKLSAgICBib3JkZXItcmFkaXVzOiAwOwotfQot
Ci1zZWxlY3Rbc2l6ZT0iMCJdLAotc2VsZWN0W3NpemU9IjEiXSB7Ci0gICAgYm9yZGVyLXJhZGl1
czogMDsKLX0KLQotOjotd2Via2l0LXZhbGlkYXRpb24tYnViYmxlLW1lc3NhZ2UgewotICAgIHBh
ZGRpbmctbGVmdDogMTBweDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OwotICAgIGJhY2tncm91
bmQ6ICNmYWZhZmE7Ci0gICAgYm9yZGVyLWNvbG9yOiAjZmZmZmZmOwotICAgIGJvcmRlci13aWR0
aDogMXB4OwotICAgIGJveC1zaGFkb3c6IDJweCAycHggNHB4IHJnYmEoMTAwLDEwMCwxMDAsMC4z
KSwgMCAwIDRweCByZ2JhKDEwMCwxMDAsMTAwLDAuNik7Ci0gICAgLXdlYmtpdC1ib3JkZXItcmFk
aXVzOiA0cHg7Ci0gICAgdG9wOiAtMXB4OwotfQotCi06Oi13ZWJraXQtdmFsaWRhdGlvbi1idWJi
bGUtYXJyb3cgewotICAgIGxlZnQ6IDQwcHg7Ci0gICAgdG9wOiAzcHg7Ci0gICAgYmFja2dyb3Vu
ZDogI2ZhZmFmYTsKLSAgICBib3JkZXItY29sb3I6ICNmZmZmZmY7Ci0gICAgYm9yZGVyLXdpZHRo
OiAxcHg7Ci0gICAgYm94LXNoYWRvdzogMCAwIDRweCByZ2JhKDEwMCwxMDAsMTAwLDAuNik7Ci19
Ci0KLTo6LXdlYmtpdC12YWxpZGF0aW9uLWJ1YmJsZS1oZWFkaW5nIHsKLSAgICBmb250LXdlaWdo
dDogbm9ybWFsOwotfQotCi0KLS8qIFN1Z2dlc3Rpb24gQm94ICovCi0KLWlucHV0Ojotd2Via2l0
LXN1Z2dlc3Rpb24tZHJvcGRvd24tYm94IHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAg
ei1pbmRleDogMjE0NzQ4MzY0NzsKLSAgICBvcGFjaXR5OiAwLjk4OwotICAgIG1heC1oZWlnaHQ6
IDIwMHB4OwotICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKLSAgICBvdmVyZmxvdy14OiBoaWRkZW47
Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDsKLSAgICBib3JkZXItdG9wOiBub25lOwot
ICAgIGJhY2tncm91bmQtY29sb3I6ICNmY2ZjZmM7Ci0gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAw
cHggNXB4IDVweCAtMnB4ICM2MDYwNjAgaW5zZXQ7Ci0gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAy
cHggMHB4IDhweCAtNXB4ICNBRUFFQUU7Ci19Ci0KLWlucHV0Ojotd2Via2l0LXN1Z2dlc3Rpb24t
ZHJvcGRvd24tYm94LWl0ZW0gewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHdpZHRoOiAxMDAl
OwotICAgIHBhZGRpbmc6IDEwcHggNXB4OwotICAgIGNvbG9yOiAjMzYzNjM2OwotICAgIHRleHQt
ZGVjb3JhdGlvbjogbm9uZTsKLSAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U4ZThlODsK
LSAgICB0ZXh0LW92ZXJmbG93OiAtYmxhY2tiZXJyeS1mYWRlOwotICAgIG92ZXJmbG93OiBoaWRk
ZW47Ci19Ci0KLWlucHV0Ojotd2Via2l0LXN1Z2dlc3Rpb24tcHJlZml4LXRleHQgewotICAgIGZv
bnQtd2VpZ2h0OiBib2xkOwotfQotCi1pbnB1dDo6LXdlYmtpdC1zdWdnZXN0aW9uLWRyb3Bkb3du
LWJveC1pdGVtLWxhc3QgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHdpZHRoOiAxMDAlOwot
ICAgIHBhZGRpbmc6IDEwcHggNXB4OwotICAgIGNvbG9yOiAjMzYzNjM2OwotICAgIHRleHQtZGVj
b3JhdGlvbjogbm9uZTsKLSAgICB0ZXh0LW92ZXJmbG93OiAtYmxhY2tiZXJyeS1mYWRlOwotICAg
IG92ZXJmbG93OiBoaWRkZW47Ci0gICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKLX0KLQotaW5wdXRb
dHlwZT0iZGF0ZSJdLCBpbnB1dFt0eXBlPSJkYXRldGltZSJdLCBpbnB1dFt0eXBlPSJkYXRldGlt
ZS1sb2NhbCJdLCBpbnB1dFt0eXBlPSJ0aW1lIl0sIGlucHV0W3R5cGU9Im1vbnRoIl0gewotICAg
IGZvbnQtZmFtaWx5OiAiU2xhdGUgUHJvIjsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRv
bjsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgd2lkdGg6YXV0bzsKLX0KLQotaW5wdXQ6
Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZSB7Ci0gICAgbWFyZ2luOiAxcHggNnB4IDFweCA2
cHg7Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2JsYWNrYmVycnkvU21hcnRSZXBs
YWNlQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9i
bGFja2JlcnJ5L1NtYXJ0UmVwbGFjZUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2JsYWNrYmVycnkvU21hcnRSZXBsYWNlQmxhY2tCZXJy
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU21hcnRSZXBsYWNlLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgaXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQoVUNo
YXIzMiwgYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9ibGFja2JlcnJ5L1NtYXJ0UmVwbGFjZUJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvYmxhY2tiZXJyeS9TbWFydFJlcGxhY2VCbGFja0JlcnJ5LmNw
cAkocmV2aXNpb24gMTYxNTk2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9ibGFja2JlcnJ5
L1NtYXJ0UmVwbGFjZUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNtYXJ0UmVwbGFjZS5oIgotCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIGlzQ2hhcmFjdGVy
U21hcnRSZXBsYWNlRXhlbXB0KFVDaGFyMzIsIGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvYmxhY2tiZXJyeS9IaXN0b3J5SXRlbVZpZXdTdGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvYmxhY2tiZXJyeS9IaXN0b3J5
SXRlbVZpZXdTdGF0ZS5oCShyZXZpc2lvbiAxNjE1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L2JsYWNrYmVycnkvSGlzdG9yeUl0ZW1WaWV3U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNp
Zm5kZWYgSGlzdG9yeUl0ZW1WaWV3U3RhdGVfaAotI2RlZmluZSBIaXN0b3J5SXRlbVZpZXdTdGF0
ZV9oCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgSGlz
dG9yeUl0ZW1WaWV3U3RhdGUgewotCi0gICAgSGlzdG9yeUl0ZW1WaWV3U3RhdGUoKQotICAgICAg
ICA6IG9yaWVudGF0aW9uKDApCi0gICAgICAgICwgc2NhbGUoMSkKLSAgICAgICAgLCBtaW5pbXVt
U2NhbGUoLTEuMCkKLSAgICAgICAgLCBtYXhpbXVtU2NhbGUoLTEuMCkKLSAgICAgICAgLCBpc1Vz
ZXJTY2FsYWJsZSh0cnVlKQotICAgICAgICAsIGlzWm9vbVRvRml0U2NhbGUoZmFsc2UpCi0gICAg
ICAgICwgc2hvdWxkUmVmbG93QmxvY2soZmFsc2UpCi0gICAgICAgICwgc2hvdWxkU2F2ZVZpZXdT
dGF0ZSh0cnVlKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbnQgb3JpZW50YXRpb247Ci0gICAgZG91
YmxlIHNjYWxlOwotICAgIGRvdWJsZSBtaW5pbXVtU2NhbGU7Ci0gICAgZG91YmxlIG1heGltdW1T
Y2FsZTsKLSAgICBib29sIGlzVXNlclNjYWxhYmxlOwotICAgIGJvb2wgaXNab29tVG9GaXRTY2Fs
ZTsKLSAgICBib29sIHNob3VsZFJlZmxvd0Jsb2NrOwotICAgIGJvb2wgc2hvdWxkU2F2ZVZpZXdT
dGF0ZTsKLSAgICBTdHJpbmcgbmV0d29ya1Rva2VuOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmcgd2ViUGFnZUNsaWVudFN0YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gSGlzdG9yeUl0ZW1WaWV3U3RhdGVfaApJbmRleDogU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9ibGFja2JlcnJ5L0hpc3RvcnlJdGVtVmlld1N0YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaGlzdG9yeS9ibGFja2JlcnJ5L0hpc3RvcnlJdGVtVmlld1N0YXRl
LmgJKHJldmlzaW9uIDE2MTU5NikKKysrIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvYmxhY2tiZXJy
eS9IaXN0b3J5SXRlbVZpZXdTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBIaXN0b3J5
SXRlbVZpZXdTdGF0ZV9oCi0jZGVmaW5lIEhpc3RvcnlJdGVtVmlld1N0YXRlX2gKLQotI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBIaXN0b3J5SXRlbVZpZXdT
dGF0ZSB7Ci0KLSAgICBIaXN0b3J5SXRlbVZpZXdTdGF0ZSgpCi0gICAgICAgIDogb3JpZW50YXRp
b24oMCkKLSAgICAgICAgLCBzY2FsZSgxKQotICAgICAgICAsIG1pbmltdW1TY2FsZSgtMS4wKQot
ICAgICAgICAsIG1heGltdW1TY2FsZSgtMS4wKQotICAgICAgICAsIGlzVXNlclNjYWxhYmxlKHRy
dWUpCi0gICAgICAgICwgaXNab29tVG9GaXRTY2FsZShmYWxzZSkKLSAgICAgICAgLCBzaG91bGRS
ZWZsb3dCbG9jayhmYWxzZSkKLSAgICAgICAgLCBzaG91bGRTYXZlVmlld1N0YXRlKHRydWUpCi0g
ICAgewotICAgIH0KLQotICAgIGludCBvcmllbnRhdGlvbjsKLSAgICBkb3VibGUgc2NhbGU7Ci0g
ICAgZG91YmxlIG1pbmltdW1TY2FsZTsKLSAgICBkb3VibGUgbWF4aW11bVNjYWxlOwotICAgIGJv
b2wgaXNVc2VyU2NhbGFibGU7Ci0gICAgYm9vbCBpc1pvb21Ub0ZpdFNjYWxlOwotICAgIGJvb2wg
c2hvdWxkUmVmbG93QmxvY2s7Ci0gICAgYm9vbCBzaG91bGRTYXZlVmlld1N0YXRlOwotICAgIFN0
cmluZyBuZXR3b3JrVG9rZW47Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyB3ZWJQ
YWdlQ2xpZW50U3RhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBIaXN0b3J5SXRlbVZpZXdTdGF0ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xzQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sc0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQmxhY2tCZXJy
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzQmxhY2tCZXJyeS5oIgotCi0j
aW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9s
ZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNs
dWRlICJSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJTbGlk
ZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRp
YyBjb25zdCBkb3VibGUgdGltZVdpdGhvdXRNb3VzZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29udHJv
bHMgPSAzOwotCi1pbmxpbmUgTWVkaWFDb250cm9sQnV0dG9uR3JvdXBDb250YWluZXJFbGVtZW50
OjpNZWRpYUNvbnRyb2xCdXR0b25Hcm91cENvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQqIGRvY3Vt
ZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1bWVudCwgTWVkaWFDb250cm9s
c1BhbmVsKQotewotfQotCi1QYXNzUmVmUHRyPE1lZGlhQ29udHJvbEJ1dHRvbkdyb3VwQ29udGFp
bmVyRWxlbWVudD4gTWVkaWFDb250cm9sQnV0dG9uR3JvdXBDb250YWluZXJFbGVtZW50OjpjcmVh
dGUoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xCdXR0b25H
cm91cENvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9s
QnV0dG9uR3JvdXBDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgcmV0dXJuIGVsZW1l
bnQucmVsZWFzZSgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbEJ1dHRv
bkdyb3VwQ29udGFpbmVyRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAotewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBpZCwgKCItd2Via2l0LW1lZGlhLWNvbnRy
b2xzLWJ1dHRvbi1ncm91cC1jb250YWluZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi1pbmxpbmUgTWVkaWFDb250cm9sVGltZURp
c3BsYXlDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUNvbnRhaW5lckVs
ZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChk
b2N1bWVudCwgTWVkaWFDb250cm9sc1BhbmVsKQotewotfQotCi1QYXNzUmVmUHRyPE1lZGlhQ29u
dHJvbFRpbWVEaXNwbGF5Q29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVGltZURpc3BsYXlD
b250YWluZXJFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUNvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9w
dFJlZihuZXcgTWVkaWFDb250cm9sVGltZURpc3BsYXlDb250YWluZXJFbGVtZW50KGRvY3VtZW50
KSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOwotfQotCi1jb25zdCBBdG9taWNTdHJp
bmcmIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5Q29udGFpbmVyRWxlbWVudDo6c2hhZG93UHNldWRv
SWQoKSBjb25zdAotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBpZCwg
KCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUtZGlzcGxheS1jb250YWluZXIiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi1NZWRp
YUNvbnRyb2xFbWJlZGRlZFBhbmVsRWxlbWVudDo6TWVkaWFDb250cm9sRW1iZWRkZWRQYW5lbEVs
ZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChk
b2N1bWVudCwgTWVkaWFDb250cm9sc1BhbmVsKQotICAgICwgbV9jYW5CZURyYWdnZWQoZmFsc2Up
Ci0gICAgLCBtX2lzQmVpbmdEcmFnZ2VkKGZhbHNlKQotICAgICwgbV9pc0Rpc3BsYXllZChmYWxz
ZSkKLSAgICAsIG1fb3BhcXVlKHRydWUpCi0gICAgLCBtX3RyYW5zaXRpb25UaW1lcih0aGlzLCAm
TWVkaWFDb250cm9sRW1iZWRkZWRQYW5lbEVsZW1lbnQ6OnRyYW5zaXRpb25UaW1lckZpcmVkKQot
ewotfQotCi1QYXNzUmVmUHRyPE1lZGlhQ29udHJvbEVtYmVkZGVkUGFuZWxFbGVtZW50PiBNZWRp
YUNvbnRyb2xFbWJlZGRlZFBhbmVsRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbEVtYmVkZGVkUGFuZWxFbGVt
ZW50KGRvY3VtZW50KSk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sRW1i
ZWRkZWRQYW5lbEVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scy1l
bWJlZGRlZC1wYW5lbCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAg
ICByZXR1cm4gaWQ7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRW1iZWRkZWRQYW5lbEVsZW1lbnQ6
OnN0YXJ0RHJhZyhjb25zdCBMYXlvdXRQb2ludCYgZXZlbnRMb2NhdGlvbikKLXsKLSAgICBpZiAo
IW1fY2FuQmVEcmFnZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pc0JlaW5nRHJh
Z2dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzQm94KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1l
KCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXN0RHJhZ0V2
ZW50TG9jYXRpb24gPSBldmVudExvY2F0aW9uOwotCi0gICAgZnJhbWUtPmV2ZW50SGFuZGxlcigp
LnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSh0aGlzKTsKLQotICAgIG1faXNCZWluZ0RyYWdn
ZWQgPSB0cnVlOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEVtYmVkZGVkUGFuZWxFbGVtZW50Ojpj
b250aW51ZURyYWcoY29uc3QgTGF5b3V0UG9pbnQmIGV2ZW50TG9jYXRpb24pCi17Ci0gICAgaWYg
KCFtX2lzQmVpbmdEcmFnZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRTaXplIGRp
c3RhbmNlRHJhZ2dlZCA9IGV2ZW50TG9jYXRpb24gLSBtX2xhc3REcmFnRXZlbnRMb2NhdGlvbjsK
LSAgICBtX2N1bXVsYXRpdmVEcmFnT2Zmc2V0Lm1vdmUoZGlzdGFuY2VEcmFnZ2VkKTsKLSAgICBt
X2xhc3REcmFnRXZlbnRMb2NhdGlvbiA9IGV2ZW50TG9jYXRpb247Ci0gICAgc2V0UG9zaXRpb24o
bV9jdW11bGF0aXZlRHJhZ09mZnNldCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRW1iZWRkZWRQ
YW5lbEVsZW1lbnQ6OmVuZERyYWcoKQotewotICAgIGlmICghbV9pc0JlaW5nRHJhZ2dlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9pc0JlaW5nRHJhZ2dlZCA9IGZhbHNlOwotCi0gICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2V0Q2FwdHVyaW5nTW91c2VF
dmVudHNOb2RlKDApOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEVtYmVkZGVkUGFuZWxFbGVtZW50
OjpzdGFydFRpbWVyKCkKLXsKLSAgICBzdG9wVGltZXIoKTsKLQotICAgIC8vIFRoZSB0aW1lciBp
cyByZXF1aXJlZCB0byBzZXQgdGhlIHByb3BlcnR5IGRpc3BsYXk6J25vbmUnIG9uIHRoZSBwYW5l
bCwKLSAgICAvLyBzdWNoIHRoYXQgY2FwdGlvbnMgYXJlIGNvcnJlY3RseSBkaXNwbGF5ZWQgYXQg
dGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8KLSAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBmYWRlb3V0
IHRyYW5zaXRpb24uCi0gICAgZG91YmxlIGR1cmF0aW9uID0gZG9jdW1lbnQoKS0+cGFnZSgpID8g
ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9u
KCkgOiAwOwotICAgIG1fdHJhbnNpdGlvblRpbWVyLnN0YXJ0T25lU2hvdChkdXJhdGlvbik7Ci19
Ci0KLXZvaWQgTWVkaWFDb250cm9sRW1iZWRkZWRQYW5lbEVsZW1lbnQ6OnN0b3BUaW1lcigpCi17
Ci0gICAgaWYgKG1fdHJhbnNpdGlvblRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdHJhbnNp
dGlvblRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xFbWJlZGRlZFBhbmVsRWxl
bWVudDo6dHJhbnNpdGlvblRpbWVyRmlyZWQoVGltZXI8TWVkaWFDb250cm9sRW1iZWRkZWRQYW5l
bEVsZW1lbnQ+KikKLXsKLSAgICBpZiAoIW1fb3BhcXVlKQotICAgICAgICBoaWRlKCk7Ci0KLSAg
ICBzdG9wVGltZXIoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xFbWJlZGRlZFBhbmVsRWxlbWVu
dDo6c2V0UG9zaXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIHBvc2l0aW9uKQotewotICAgIGRvdWJs
ZSBsZWZ0ID0gcG9zaXRpb24ueCgpOwotICAgIGRvdWJsZSB0b3AgPSBwb3NpdGlvbi55KCk7Ci0K
LSAgICAvLyBTZXQgdGhlIGxlZnQgYW5kIHRvcCB0byBjb250cm9sIHRoZSBwYW5lbCdzIHBvc2l0
aW9uOyB0aGlzIGRlcGVuZHMgb24gaXQgYmVpbmcgYWJzb2x1dGUgcG9zaXRpb25lZC4KLSAgICAv
LyBTZXQgdGhlIG1hcmdpbiB0byB6ZXJvIHNpbmNlIHRoZSBwb3NpdGlvbiBwYXNzZWQgaW4gd2ls
bCBhbHJlYWR5IGluY2x1ZGUgdGhlIGVmZmVjdCBvZiB0aGUgbWFyZ2luLgotICAgIHNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBsZWZ0LCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BYKTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCB0b3As
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwotICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlNYXJnaW5MZWZ0LCAwLjAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwot
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIDAuMCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0KLSAgICBjbGFzc0xpc3QoKS0+YWRkKCJkcmFnZ2Vk
IiwgSUdOT1JFX0VYQ0VQVElPTik7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRW1iZWRkZWRQYW5l
bEVsZW1lbnQ6OnJlc2V0UG9zaXRpb24oKQotewotICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlMZWZ0KTsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5VG9wKTsKLSAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFy
Z2luTGVmdCk7Ci0gICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdp
blRvcCk7Ci0KLSAgICBjbGFzc0xpc3QoKS0+cmVtb3ZlKCJkcmFnZ2VkIiwgSUdOT1JFX0VYQ0VQ
VElPTik7Ci0KLSAgICBtX2N1bXVsYXRpdmVEcmFnT2Zmc2V0LnNldFgoMCk7Ci0gICAgbV9jdW11
bGF0aXZlRHJhZ09mZnNldC5zZXRZKDApOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEVtYmVkZGVk
UGFuZWxFbGVtZW50OjptYWtlT3BhcXVlKCkKLXsKLSAgICBpZiAobV9vcGFxdWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGRvdWJsZSBkdXJhdGlvbiA9IGRvY3VtZW50KCktPnBhZ2UoKSA/IGRv
Y3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCkg
OiAwOwotCi0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlPcGFjaXR5KTsKLSAgICBzZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLCBkdXJhdGlvbiwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TKTsKLSAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5T3BhY2l0eSwgMS4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0KLSAg
ICBtX29wYXF1ZSA9IHRydWU7Ci0KLSAgICBpZiAobV9pc0Rpc3BsYXllZCkKLSAgICAgICAgc2hv
dygpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEVtYmVkZGVkUGFuZWxFbGVtZW50OjptYWtlVHJh
bnNwYXJlbnQoKQotewotICAgIGlmICghbV9vcGFxdWUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGRvdWJsZSBkdXJhdGlvbiA9IGRvY3VtZW50KCktPnBhZ2UoKSA/IGRvY3VtZW50KCktPnBhZ2Uo
KS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpIDogMDsKLQotICAgIHNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHks
IENTU1Byb3BlcnR5T3BhY2l0eSk7Ci0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiwgZHVyYXRpb24sIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUyk7Ci0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU9wYWNpdHks
IDAuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotCi0gICAgbV9vcGFxdWUgPSBm
YWxzZTsKLSAgICBzdGFydFRpbWVyKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRW1iZWRkZWRQ
YW5lbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQotewotICAgIE1l
ZGlhQ29udHJvbERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAg
aWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgewotICAgICAgICBMYXlvdXRQb2ludCBsb2NhdGlv
biA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmFic29sdXRlTG9jYXRpb24oKTsK
LSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
ICYmIGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKSB7Ci0gICAgICAgICAgICBzdGFydERyYWcobG9j
YXRpb24pOwotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQg
JiYgbV9pc0JlaW5nRHJhZ2dlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlRHJhZyhsb2NhdGlvbik7
Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBF
dmVudCAmJiBtX2lzQmVpbmdEcmFnZ2VkKSB7Ci0gICAgICAgICAgICBjb250aW51ZURyYWcobG9j
YXRpb24pOwotICAgICAgICAgICAgZW5kRHJhZygpOwotICAgICAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9s
RW1iZWRkZWRQYW5lbEVsZW1lbnQ6OnNldENhbkJlRHJhZ2dlZChib29sIGNhbkJlRHJhZ2dlZCkK
LXsKLSAgICBpZiAobV9jYW5CZURyYWdnZWQgPT0gY2FuQmVEcmFnZ2VkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NhbkJlRHJhZ2dlZCA9IGNhbkJlRHJhZ2dlZDsKLQotICAgIGlmICghY2Fu
QmVEcmFnZ2VkKQotICAgICAgICBlbmREcmFnKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRW1i
ZWRkZWRQYW5lbEVsZW1lbnQ6OnNldElzRGlzcGxheWVkKGJvb2wgaXNEaXNwbGF5ZWQpCi17Ci0g
ICAgbV9pc0Rpc3BsYXllZCA9IGlzRGlzcGxheWVkOwotfQotCi1pbmxpbmUgTWVkaWFDb250cm9s
RnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFpbmVyRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNj
cmVlblRpbWVEaXNwbGF5Q29udGFpbmVyRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCi0gICAg
OiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNvbnRyb2xzUGFuZWwpCi17
Ci19Ci0KLVBhc3NSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFp
bmVyRWxlbWVudD4gTWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFpbmVyRWxl
bWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBSZWZQdHI8TWVkaWFDb250
cm9sRnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFpbmVyRWxlbWVudD4gZWxlbWVudCA9IGFkb3B0
UmVmKG5ldyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVGltZURpc3BsYXlDb250YWluZXJFbGVtZW50
KGRvY3VtZW50KSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOwotfQotCi1jb25zdCBB
dG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lRGlzcGxheUNvbnRhaW5lckVs
ZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLXRp
bWUtZGlzcGxheS1jb250YWluZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi1pbmxpbmUgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1
dHRvbkNvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25Db250YWlu
ZXJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1l
bnQoZG9jdW1lbnQsIE1lZGlhQ29udHJvbHNQYW5lbCkKLXsKLX0KLQotUGFzc1JlZlB0cjxNZWRp
YUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sRnVs
bHNjcmVlbkJ1dHRvbkNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQp
Ci17Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25Db250YWluZXJFbGVt
ZW50PiBlbGVtZW50ID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25D
b250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgp
OwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25D
b250YWluZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0Ci17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVs
bHNjcmVlbi1idXR0b24tY29udGFpbmVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCkpOwotICAgIHJldHVybiBpZDsKLX0KLQotaW5saW5lIE1lZGlhQ29udHJvbEZ1bGxzY3Jl
ZW5CdXR0b25EaXZpZGVyRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkRpdmlk
ZXJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1l
bnQoZG9jdW1lbnQsIE1lZGlhUmV3aW5kQnV0dG9uKQotewotfQotCi1QYXNzUmVmUHRyPE1lZGlh
Q29udHJvbEZ1bGxzY3JlZW5CdXR0b25EaXZpZGVyRWxlbWVudD4gTWVkaWFDb250cm9sRnVsbHNj
cmVlbkJ1dHRvbkRpdmlkZXJFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQotewot
ICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRGl2aWRlckVsZW1lbnQ+IGVs
ZW1lbnQgPSBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkRpdmlkZXJF
bGVtZW50KGRvY3VtZW50KSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOwotfQotCi1j
b25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25EaXZpZGVyRWxl
bWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
QXRvbWljU3RyaW5nLCBpZCwgKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tYnV0
dG9uLWRpdmlkZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAg
cmV0dXJuIGlkOwotfQotCi1pbmxpbmUgTWVkaWFDb250cm9sUGxheUJ1dHRvbkNvbnRhaW5lckVs
ZW1lbnQ6Ok1lZGlhQ29udHJvbFBsYXlCdXR0b25Db250YWluZXJFbGVtZW50KERvY3VtZW50KiBk
b2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ29u
dHJvbHNQYW5lbCkKLXsKLX0KLQotUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uQ29u
dGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sUGxheUJ1dHRvbkNvbnRhaW5lckVsZW1lbnQ6OmNy
ZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFBsYXlC
dXR0b25Db250YWluZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJv
bFBsYXlCdXR0b25Db250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0gICAgcmV0dXJuIGVsZW1l
bnQucmVsZWFzZSgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFBsYXlC
dXR0b25Db250YWluZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0Ci17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtY29udHJv
bHMtcGxheS1idXR0b24tY29udGFpbmVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCkpOwotICAgIHJldHVybiBpZDsKLX0KLQotaW5saW5lIE1lZGlhQ29udHJvbFBsYWNlaG9s
ZGVyRWxlbWVudDo6TWVkaWFDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50KERvY3VtZW50KiBkb2N1
bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ29udHJv
bHNQYW5lbCkKLXsKLX0KLQotUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xQbGFjZWhvbGRlckVsZW1l
bnQ+IE1lZGlhQ29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1
bWVudCkKLXsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50PiBlbGVt
ZW50ID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFBsYWNlaG9sZGVyRWxlbWVudChkb2N1bWVu
dCkpOwotICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKLX0KLQotY29uc3QgQXRvbWljU3Ry
aW5nJiBNZWRpYUNvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29u
c3QKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtp
dC1tZWRpYS1jb250cm9scy1wbGFjZWhvbGRlciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLWlubGluZSBNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuUGxheUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5QbGF5QnV0dG9u
RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQoZG9jdW1lbnQsIE1lZGlhUGxheUJ1dHRvbikKLXsKLX0KLQotUGFzc1JlZlB0cjxNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuUGxheUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Q
bGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBSZWZQ
dHI8TWVkaWFDb250cm9sRnVsbHNjcmVlblBsYXlCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9w
dFJlZihuZXcgTWVkaWFDb250cm9sRnVsbHNjcmVlblBsYXlCdXR0b25FbGVtZW50KGRvY3VtZW50
KSk7Ci0gICAgYnV0dG9uLT5lbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KCk7Ci0gICAgYnV0dG9u
LT5zZXRUeXBlKCJidXR0b24iKTsKLSAgICByZXR1cm4gYnV0dG9uLnJlbGVhc2UoKTsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuUGxheUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIGlmIChtZWRpYUNvbnRyb2xsZXIoKS0+Y2Fu
UGxheSgpKQotICAgICAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnBsYXkoKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbWVkaWFDb250cm9sbGVyKCktPnBhdXNlKCk7Ci0gICAgICAgIHVw
ZGF0ZURpc3BsYXlUeXBlKCk7Ci0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwot
ICAgIH0KLSAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsK
LX0KLQotdm9pZCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuUGxheUJ1dHRvbkVsZW1lbnQ6OnVwZGF0
ZURpc3BsYXlUeXBlKCkKLXsKLSAgICBzZXREaXNwbGF5VHlwZShtZWRpYUNvbnRyb2xsZXIoKS0+
Y2FuUGxheSgpID8gTWVkaWFQbGF5QnV0dG9uIDogTWVkaWFQYXVzZUJ1dHRvbik7Ci19Ci0KLWNv
bnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sRnVsbHNjcmVlblBsYXlCdXR0b25FbGVtZW50
OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1wbGF5LWJ1
dHRvbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1cm4g
aWQ7Ci19Ci0KLWlubGluZSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuRnVsbHNjcmVlbkJ1dHRvbkVs
ZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5GdWxsc2NyZWVuQnV0dG9uRWxlbWVudChEb2N1
bWVudCogZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQs
IE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b24pCi17Ci19Ci0KLVBhc3NSZWZQdHI8TWVkaWFDb250
cm9sRnVsbHNjcmVlbkZ1bGxzY3JlZW5CdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xGdWxsc2Ny
ZWVuRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCi17
Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5GdWxsc2NyZWVuQnV0dG9uRWxlbWVu
dD4gYnV0dG9uID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5GdWxsc2NyZWVu
QnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotICAgIGJ1dHRvbi0+ZW5zdXJlVXNlckFnZW50U2hh
ZG93Um9vdCgpOwotICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Ci0gICAgYnV0dG9uLT5o
aWRlKCk7Ci0gICAgcmV0dXJuIGJ1dHRvbi5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250
cm9sRnVsbHNjcmVlbkZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Y2xpY2tFdmVudCkgewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAgICAgLy8gT25s
eSB1c2UgdGhlIG5ldyBmdWxsIHNjcmVlbiBBUEkgaWYgdGhlIGZ1bGxTY3JlZW5FbmFibGVkIHNl
dHRpbmcgaGFzIAotICAgICAgICAvLyBiZWVuIGV4cGxpY2l0bHkgZW5hYmxlZC4gT3RoZXJ3aXNl
LCB1c2UgdGhlIG9sZCBmdWxsc2NyZWVuIEFQSS4gVGhpcwotICAgICAgICAvLyBhbGxvd3MgYXBw
cyB3aGljaCBlbWJlZCBhIFdlYlZpZXcgdG8gcmV0YWluIHRoZSBleGlzdGluZyBmdWxsIHNjcmVl
bgotICAgICAgICAvLyB2aWRlbyBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IHJlcXVpcmluZyB0aGVt
IHRvIGltcGxlbWVudCB0aGVpciBvd24gZnVsbCAKLSAgICAgICAgLy8gc2NyZWVuIGJlaGF2aW9y
LgotICAgICAgICBpZiAoZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSAmJiBkb2N1bWVudCgpLT5zZXR0
aW5ncygpLT5mdWxsU2NyZWVuRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoZG9jdW1lbnQo
KS0+d2Via2l0SXNGdWxsU2NyZWVuKCkgJiYgZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxT
Y3JlZW5FbGVtZW50KCkgPT0gcGFyZW50TWVkaWFFbGVtZW50KHRoaXMpKQotICAgICAgICAgICAg
ICAgIGRvY3VtZW50KCktPndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5yZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1l
bnQocGFyZW50TWVkaWFFbGVtZW50KHRoaXMpLCAwLCBEb2N1bWVudDo6RXhlbXB0SUZyYW1lQWxs
b3dGdWxsU2NyZWVuUmVxdWlyZW1lbnQpOwotICAgICAgICB9IGVsc2UKLSNlbmRpZgotICAgICAg
ICAgICAgbWVkaWFDb250cm9sbGVyKCktPmVudGVyRnVsbHNjcmVlbigpOwotICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgSFRNTElucHV0RWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFD
b250cm9sRnVsbHNjcmVlbkZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgp
IGNvbnN0Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGlkLCAoIi13
ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1mdWxsc2NyZWVuLWJ1dHRvbiIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sRnVsbHNjcmVlbkZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpzZXRJc0Z1
bGxzY3JlZW4oYm9vbCkKLXsKLSAgICBzZXREaXNwbGF5VHlwZShNZWRpYUV4aXRGdWxsc2NyZWVu
QnV0dG9uKTsKLX0KLQotaW5saW5lIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lbGluZUNvbnRh
aW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lbGluZUNvbnRhaW5lckVsZW1l
bnQoRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogTWVkaWFDb250cm9sRGl2RWxlbWVudChkb2N1
bWVudCwgTWVkaWFUaW1lbGluZUNvbnRhaW5lcikKLXsKLX0KLQotUGFzc1JlZlB0cjxNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVGltZWxpbmVDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
KQotewotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVGltZWxpbmVDb250YWluZXJF
bGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1l
bGluZUNvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBlbGVtZW50LT5oaWRlKCk7Ci0g
ICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIE1l
ZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OnNoYWRvd1BzZXVk
b0lkKCkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQs
ICgiLXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLXRpbWVsaW5lLWNvbnRhaW5lciIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1cm4gaWQ7Ci19
Ci0KLU1lZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lbGluZUVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5UaW1lbGluZUVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBNZWRpYUNvbnRyb2xz
KiBjb250cm9scykKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1bWVudCwgTWVk
aWFTbGlkZXIpCi0gICAgLCBtX2NvbnRyb2xzKGNvbnRyb2xzKQotewotfQotCi1QYXNzUmVmUHRy
PE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lbGluZUVsZW1lbnQ+IE1lZGlhQ29udHJvbEZ1bGxz
Y3JlZW5UaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIE1lZGlhQ29u
dHJvbHMqIGNvbnRyb2xzKQotewotICAgIEFTU0VSVChjb250cm9scyk7Ci0KLSAgICBSZWZQdHI8
TWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVsaW5lRWxlbWVudD4gdGltZWxpbmUgPSBhZG9wdFJl
ZihuZXcgTWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVsaW5lRWxlbWVudChkb2N1bWVudCwgY29u
dHJvbHMpKTsKLSAgICB0aW1lbGluZS0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAg
IHRpbWVsaW5lLT5zZXRUeXBlKCJyYW5nZSIpOwotICAgIHRpbWVsaW5lLT5zZXRBdHRyaWJ1dGUo
cHJlY2lzaW9uQXR0ciwgImRvdWJsZSIpOwotICAgIHJldHVybiB0aW1lbGluZS5yZWxlYXNlKCk7
Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVsaW5lRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gTGVmdCBidXR0b24gaXMgMC4g
UmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYgKGV2ZW50
LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0
b24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFhdHRhY2hlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3du
RXZlbnQpCi0gICAgICAgIG1lZGlhQ29udHJvbGxlcigpLT5iZWdpblNjcnViYmluZygpOwotCi0g
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKLSAgICAg
ICAgbWVkaWFDb250cm9sbGVyKCktPmVuZFNjcnViYmluZygpOwotCi0gICAgTWVkaWFDb250cm9s
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCB8fCBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNlbW92ZUV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3VibGUgdGlt
ZSA9IHZhbHVlKCkudG9Eb3VibGUoKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuaW5wdXRFdmVudCAmJiB0aW1lICE9IG1lZGlhQ29udHJvbGxlcigpLT5jdXJyZW50VGlt
ZSgpKQotICAgICAgICBtZWRpYUNvbnRyb2xsZXIoKS0+c2V0Q3VycmVudFRpbWUodGltZSwgSUdO
T1JFX0VYQ0VQVElPTik7Ci0KLSAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHRvUmVuZGVyU2xp
ZGVyKHJlbmRlcmVyKCkpOwotICAgIGlmIChzbGlkZXIgJiYgc2xpZGVyLT5pbkRyYWdNb2RlKCkp
Ci0gICAgICAgIG1fY29udHJvbHMtPnVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotfQotCi1i
b29sIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lbGluZUVsZW1lbnQ6OndpbGxSZXNwb25kVG9N
b3VzZUNsaWNrRXZlbnRzKCkKLXsKLSAgICBpZiAoIWF0dGFjaGVkKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEZ1bGxz
Y3JlZW5UaW1lbGluZUVsZW1lbnQ6OnNldFBvc2l0aW9uKGRvdWJsZSBjdXJyZW50VGltZSkKLXsK
LSAgICBzZXRWYWx1ZShTdHJpbmc6Om51bWJlcihjdXJyZW50VGltZSkpOwotfQotCi12b2lkIE1l
ZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lbGluZUVsZW1lbnQ6OnNldER1cmF0aW9uKGRvdWJsZSBk
dXJhdGlvbikKLXsKLSAgICBzZXRBdHRyaWJ1dGUobWF4QXR0ciwgU3RyaW5nOjpudW1iZXIoc3Rk
Ojppc2Zpbml0ZShkdXJhdGlvbikgPyBkdXJhdGlvbiA6IDApKTsKLX0KLQotY29uc3QgQXRvbWlj
U3RyaW5nJiBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVGltZWxpbmVFbGVtZW50OjpzaGFkb3dQc2V1
ZG9JZCgpIGNvbnN0Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGlk
LCAoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi10aW1lbGluZSIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLVBhc3NS
ZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudD4g
TWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5UaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQoZG9jdW1lbnQpKTsKLX0K
LQotTWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudDo6TWVk
aWFDb250cm9sRnVsbHNjcmVlblRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudChEb2N1bWVudCog
ZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQoZG9jdW1lbnQs
IE1lZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXkpCi17Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYg
TWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudDo6c2hhZG93
UHNldWRvSWQoKSBjb25zdAotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBpZCwgKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tdGltZS1yZW1haW5pbmct
ZGlzcGxheSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1
cm4gaWQ7Ci19Ci0KLVBhc3NSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlbkN1cnJlbnRUaW1l
RGlzcGxheUVsZW1lbnQ+IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5DdXJyZW50VGltZURpc3BsYXlF
bGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTWVkaWFDb250cm9sRnVsbHNjcmVlbkN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQoZG9j
dW1lbnQpKTsKLX0KLQotTWVkaWFDb250cm9sRnVsbHNjcmVlbkN1cnJlbnRUaW1lRGlzcGxheUVs
ZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5DdXJyZW50VGltZURpc3BsYXlFbGVtZW50KERv
Y3VtZW50KiBkb2N1bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudChk
b2N1bWVudCwgTWVkaWFDdXJyZW50VGltZURpc3BsYXkpCi17Ci19Ci0KLWNvbnN0IEF0b21pY1N0
cmluZyYgTWVkaWFDb250cm9sRnVsbHNjcmVlbkN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6OnNo
YWRvd1BzZXVkb0lkKCkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0
cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLWN1cnJlbnQtdGlt
ZS1kaXNwbGF5IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJl
dHVybiBpZDsKLX0KLQotTWVkaWFDb250cm9sQXVkaW9NdXRlQnV0dG9uRWxlbWVudDo6TWVkaWFD
b250cm9sQXVkaW9NdXRlQnV0dG9uRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIE1lZGlhQ29u
dHJvbHMqIGNvbnRyb2xzKQotICAgIDogTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQoZG9j
dW1lbnQsIE1lZGlhTXV0ZUJ1dHRvbikKLSAgICAsIG1fY29udHJvbHMoY29udHJvbHMpCi17Ci19
Ci0KLVBhc3NSZWZQdHI8TWVkaWFDb250cm9sQXVkaW9NdXRlQnV0dG9uRWxlbWVudD4gTWVkaWFD
b250cm9sQXVkaW9NdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwg
TWVkaWFDb250cm9scyogY29udHJvbHMpCi17Ci0gICAgQVNTRVJUKGNvbnRyb2xzKTsKLQotICAg
IFJlZlB0cjxNZWRpYUNvbnRyb2xBdWRpb011dGVCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9w
dFJlZihuZXcgTWVkaWFDb250cm9sQXVkaW9NdXRlQnV0dG9uRWxlbWVudChkb2N1bWVudCwgY29u
dHJvbHMpKTsKLSAgICBidXR0b24tPmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICBi
dXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwotICAgIHJldHVybiBidXR0b24ucmVsZWFzZSgpOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbEF1ZGlvTXV0ZUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewotICAgICAgICAvLyBXZSBkbyBub3QgbXV0ZSB3aGVu
IHRoZSBtZWRpYSBwbGF5ZXIgdm9sdW1lL211dGUgY29udHJvbCBpcyB0b3VjaGVkLgotICAgICAg
ICAvLyBJbnN0ZWFkIHdlIHNob3cvaGlkZSB0aGUgdm9sdW1lIHNsaWRlci4KLSAgICAgICAgc3Rh
dGljX2Nhc3Q8TWVkaWFDb250cm9sc0JsYWNrQmVycnkqPihtX2NvbnRyb2xzKS0+dG9nZ2xlVm9s
dW1lU2xpZGVyKCk7Ci0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZW92ZXJFdmVudCkKLSAgICAgICAgbV9jb250cm9scy0+c2hvd1ZvbHVtZVNsaWRlcigpOwot
Ci0gICAgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbEF1ZGlvTXV0ZUJ1
dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scy1hdWRpby1t
dXRlLWJ1dHRvbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBy
ZXR1cm4gaWQ7Ci19Ci0KLU1lZGlhQ29udHJvbHNCbGFja0JlcnJ5OjpNZWRpYUNvbnRyb2xzQmxh
Y2tCZXJyeShEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xzKGRvY3VtZW50
KQotICAgICwgbV9idXR0b25Db250YWluZXIoMCkKLSAgICAsIG1fdGltZURpc3BsYXlDb250YWlu
ZXIoMCkKLSAgICAsIG1fZnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFpbmVyKDApCi0gICAgLCBt
X2Z1bGxzY3JlZW5QbGF5QnV0dG9uKDApCi0gICAgLCBtX2Z1bGxzY3JlZW5DdXJyZW50VGltZURp
c3BsYXkoMCkKLSAgICAsIG1fZnVsbHNjcmVlblRpbWVsaW5lKDApCi0gICAgLCBtX3RpbWVSZW1h
aW5pbmdEaXNwbGF5KDApCi0gICAgLCBtX2Z1bGxzY3JlZW5UaW1lUmVtYWluaW5nRGlzcGxheSgw
KQotICAgICwgbV90aW1lbGluZUNvbnRhaW5lcigwKQotICAgICwgbV9mdWxsc2NyZWVuVGltZWxp
bmVDb250YWluZXIoMCkKLSAgICAsIG1fZnVsbFNjcmVlbkRpdmlkZXIoMCkKLSAgICAsIG1fZnVs
bHNjcmVlbkZ1bGxTY3JlZW5CdXR0b24oMCkKLSAgICAsIG1fbXV0ZUJ1dHRvbigwKQotICAgICwg
bV92b2x1bWVTbGlkZXJDb250YWluZXIoMCkKLSAgICAsIG1fZW1iZWRkZWRQYW5lbCgwKQotICAg
ICwgbV9mdWxsU2NyZWVuQnV0dG9uQ29udGFpbmVyKDApCi0gICAgLCBtX3BsYXlCdXR0b25Db250
YWluZXIoMCkKLSAgICAsIG1fcGxhY2Vob2xkZXIoMCkKLXsKLX0KLQotUGFzc1JlZlB0cjxNZWRp
YUNvbnRyb2xzPiBNZWRpYUNvbnRyb2xzOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQotewot
ICAgIHJldHVybiBNZWRpYUNvbnRyb2xzQmxhY2tCZXJyeTo6Y3JlYXRlQ29udHJvbHMoZG9jdW1l
bnQpOwotfQotCi1QYXNzUmVmUHRyPE1lZGlhQ29udHJvbHNCbGFja0JlcnJ5PiBNZWRpYUNvbnRy
b2xzQmxhY2tCZXJyeTo6Y3JlYXRlQ29udHJvbHMoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAg
IGlmICghZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8
TWVkaWFDb250cm9sc0JsYWNrQmVycnk+IGNvbnRyb2xzID0gYWRvcHRSZWYobmV3IE1lZGlhQ29u
dHJvbHNCbGFja0JlcnJ5KGRvY3VtZW50KSk7Ci0KLSAgICBSZWZQdHI8TWVkaWFDb250cm9sUGFu
ZWxFbGVtZW50PiBwYW5lbCA9IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KTsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sRW1iZWRkZWRQYW5lbEVsZW1lbnQ+IGVtYmVk
UGFuZWwgPSBNZWRpYUNvbnRyb2xFbWJlZGRlZFBhbmVsRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0KLSAgICBSZWZQdHI8TWVkaWFDb250cm9sUGxh
eUJ1dHRvbkVsZW1lbnQ+IHBsYXlCdXR0b24gPSBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KTsKLSAgICBjb250cm9scy0+bV9wbGF5QnV0dG9uID0gcGxheUJ1
dHRvbi5nZXQoKTsKLSAgICBlbWJlZFBhbmVsLT5hcHBlbmRDaGlsZChwbGF5QnV0dG9uLnJlbGVh
c2UoKSwgZWMsIEF0dGFjaExhemlseSk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ+IHRpbWVs
aW5lQ29udGFpbmVyID0gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQpOwotCi0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4g
dGltZWxpbmUgPSBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwg
Y29udHJvbHMuZ2V0KCkpOwotICAgIGNvbnRyb2xzLT5tX3RpbWVsaW5lID0gdGltZWxpbmUuZ2V0
KCk7Ci0gICAgdGltZWxpbmVDb250YWluZXItPmFwcGVuZENoaWxkKHRpbWVsaW5lLnJlbGVhc2Uo
KSwgZWMsIEF0dGFjaExhemlseSk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUNvbnRhaW5lckVsZW1lbnQ+IHRpbWVE
aXNwbGF5Q29udGFpbmVyID0gTWVkaWFDb250cm9sVGltZURpc3BsYXlDb250YWluZXJFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQpOwotCi0gICAgUmVmUHRyPE1lZGlhQ29udHJvbEN1cnJlbnRUaW1l
RGlzcGxheUVsZW1lbnQ+IGN1cnJlbnRUaW1lRGlzcGxheSA9IE1lZGlhQ29udHJvbEN1cnJlbnRU
aW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7Ci0gICAgY29udHJvbHMtPm1fY3Vy
cmVudFRpbWVEaXNwbGF5ID0gY3VycmVudFRpbWVEaXNwbGF5LmdldCgpOwotICAgIHRpbWVEaXNw
bGF5Q29udGFpbmVyLT5hcHBlbmRDaGlsZChjdXJyZW50VGltZURpc3BsYXkucmVsZWFzZSgpLCBl
YywgQXR0YWNoTGF6aWx5KTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
UmVmUHRyPE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudD4gdGltZVJlbWFp
bmluZ0Rpc3BsYXkgPSBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCk7Ci0gICAgY29udHJvbHMtPm1fdGltZVJlbWFpbmluZ0Rpc3BsYXkgPSB0
aW1lUmVtYWluaW5nRGlzcGxheS5nZXQoKTsKLSAgICB0aW1lRGlzcGxheUNvbnRhaW5lci0+YXBw
ZW5kQ2hpbGQodGltZVJlbWFpbmluZ0Rpc3BsYXkucmVsZWFzZSgpLCBlYywgQXR0YWNoTGF6aWx5
KTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgY29udHJvbHMtPm1fdGlt
ZURpc3BsYXlDb250YWluZXIgPSB0aW1lRGlzcGxheUNvbnRhaW5lci5nZXQoKTsKLSAgICB0aW1l
bGluZUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodGltZURpc3BsYXlDb250YWluZXIucmVsZWFzZSgp
LCBlYywgQXR0YWNoTGF6aWx5KTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgY29udHJvbHMtPm1fdGltZWxpbmVDb250YWluZXIgPSB0aW1lbGluZUNvbnRhaW5lci5nZXQo
KTsKLSAgICBlbWJlZFBhbmVsLT5hcHBlbmRDaGlsZCh0aW1lbGluZUNvbnRhaW5lci5yZWxlYXNl
KCksIGVjLCBBdHRhY2hMYXppbHkpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IGZ1bGxTY3Jl
ZW5CdXR0b24gPSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKLSAgICBjb250cm9scy0+bV9mdWxsU2NyZWVuQnV0dG9uID0gZnVsbFNjcmVlbkJ1
dHRvbi5nZXQoKTsKLSAgICBlbWJlZFBhbmVsLT5hcHBlbmRDaGlsZChmdWxsU2NyZWVuQnV0dG9u
LnJlbGVhc2UoKSwgZWMsIEF0dGFjaExhemlseSk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIGlmIChkb2N1bWVudC0+cGFnZSgpLT50aGVtZSgpLT51c2VzTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyKCkpIHsKLSAgICAgICAgLy8gVGhlIG11dGUgYnV0dG9uIGFuZCB0aGUg
c2xpZGVyIGVsZW1lbnQgc2hvdWxkIGJlIGluIHRoZSBzYW1lIGRpdi4KLSAgICAgICAgUmVmUHRy
PEhUTUxEaXZFbGVtZW50PiB2b2x1bWVDb250cm9sQ29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCk7Ci0KLSAgICAgICAgUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNs
aWRlckNvbnRhaW5lckVsZW1lbnQ+IHZvbHVtZVNsaWRlckNvbnRhaW5lciA9IE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7Ci0KLSAgICAg
ICAgUmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsVm9sdW1lU2xpZGVyRWxlbWVudD4gc2xpZGVyID0g
TWVkaWFDb250cm9sUGFuZWxWb2x1bWVTbGlkZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwot
ICAgICAgICBjb250cm9scy0+bV92b2x1bWVTbGlkZXIgPSBzbGlkZXIuZ2V0KCk7Ci0gICAgICAg
IHZvbHVtZVNsaWRlckNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoc2xpZGVyLnJlbGVhc2UoKSwgZWMs
IEF0dGFjaExhemlseSk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybiAwOwot
Ci0gICAgICAgIGNvbnRyb2xzLT5tX3ZvbHVtZVNsaWRlckNvbnRhaW5lciA9IHZvbHVtZVNsaWRl
ckNvbnRhaW5lci5nZXQoKTsKLSAgICAgICAgdm9sdW1lQ29udHJvbENvbnRhaW5lci0+YXBwZW5k
Q2hpbGQodm9sdW1lU2xpZGVyQ29udGFpbmVyLnJlbGVhc2UoKSwgZWMsIEF0dGFjaExhemlseSk7
Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBSZWZQdHI8
TWVkaWFDb250cm9sQXVkaW9NdXRlQnV0dG9uRWxlbWVudD4gbXV0ZUJ1dHRvbiA9IE1lZGlhQ29u
dHJvbEF1ZGlvTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgY29udHJvbHMuZ2V0
KCkpOwotICAgICAgICBjb250cm9scy0+bV9tdXRlQnV0dG9uID0gbXV0ZUJ1dHRvbi5nZXQoKTsK
LSAgICAgICAgdm9sdW1lQ29udHJvbENvbnRhaW5lci0+YXBwZW5kQ2hpbGQobXV0ZUJ1dHRvbi5y
ZWxlYXNlKCksIGVjLCBBdHRhY2hMYXppbHkpOwotICAgICAgICBpZiAoZWMpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLQotICAgICAgICBlbWJlZFBhbmVsLT5hcHBlbmRDaGlsZCh2b2x1bWVDb250
cm9sQ29udGFpbmVyLnJlbGVhc2UoKSwgZWMsIEF0dGFjaExhemlseSk7Ci0gICAgICAgIGlmIChl
YykKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuVGltZWxpbmVDb250YWluZXJFbGVtZW50PiBmdWxsc2NyZWVuVGltZWxpbmVD
b250YWluZXIgPSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVGltZWxpbmVDb250YWluZXJFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQpOwotCi0gICAgUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5U
aW1lbGluZUVsZW1lbnQ+IGZ1bGxzY3JlZW5UaW1lbGluZSA9IE1lZGlhQ29udHJvbEZ1bGxzY3Jl
ZW5UaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgY29udHJvbHMuZ2V0KCkpOwotICAg
IGNvbnRyb2xzLT5tX2Z1bGxzY3JlZW5UaW1lbGluZSA9IGZ1bGxzY3JlZW5UaW1lbGluZS5nZXQo
KTsKLSAgICBmdWxsc2NyZWVuVGltZWxpbmVDb250YWluZXItPmFwcGVuZENoaWxkKGZ1bGxzY3Jl
ZW5UaW1lbGluZS5yZWxlYXNlKCksIGVjLCBBdHRhY2hMYXppbHkpOwotICAgIGlmIChlYykKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVE
aXNwbGF5Q29udGFpbmVyRWxlbWVudD4gZnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFpbmVyID0g
TWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKLQotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQ3VycmVudFRp
bWVEaXNwbGF5RWxlbWVudD4gZnVsbHNjcmVlbkN1cnJlbnRUaW1lRGlzcGxheSA9IE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5DdXJyZW50VGltZURpc3BsYXlFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OwotICAgIGNvbnRyb2xzLT5tX2Z1bGxzY3JlZW5DdXJyZW50VGltZURpc3BsYXkgPSBmdWxsc2Ny
ZWVuQ3VycmVudFRpbWVEaXNwbGF5LmdldCgpOwotICAgIGZ1bGxzY3JlZW5UaW1lRGlzcGxheUNv
bnRhaW5lci0+YXBwZW5kQ2hpbGQoZnVsbHNjcmVlbkN1cnJlbnRUaW1lRGlzcGxheS5yZWxlYXNl
KCksIGVjLCBBdHRhY2hMYXppbHkpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVSZW1haW5pbmdEaXNwbGF5RWxl
bWVudD4gZnVsbHNjcmVlblRpbWVSZW1haW5pbmdEaXNwbGF5ID0gTWVkaWFDb250cm9sRnVsbHNj
cmVlblRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKLSAgICBj
b250cm9scy0+bV9mdWxsc2NyZWVuVGltZVJlbWFpbmluZ0Rpc3BsYXkgPSBmdWxsc2NyZWVuVGlt
ZVJlbWFpbmluZ0Rpc3BsYXkuZ2V0KCk7Ci0gICAgZnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFp
bmVyLT5hcHBlbmRDaGlsZChmdWxsc2NyZWVuVGltZVJlbWFpbmluZ0Rpc3BsYXkucmVsZWFzZSgp
LCBlYywgQXR0YWNoTGF6aWx5KTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgY29udHJvbHMtPm1fZnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFpbmVyID0gZnVsbHNjcmVl
blRpbWVEaXNwbGF5Q29udGFpbmVyLmdldCgpOwotICAgIGZ1bGxzY3JlZW5UaW1lbGluZUNvbnRh
aW5lci0+YXBwZW5kQ2hpbGQoZnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFpbmVyLnJlbGVhc2Uo
KSwgZWMsIEF0dGFjaExhemlseSk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGNvbnRyb2xzLT5tX2Z1bGxzY3JlZW5UaW1lbGluZUNvbnRhaW5lciA9IGZ1bGxzY3JlZW5U
aW1lbGluZUNvbnRhaW5lci5nZXQoKTsKLSAgICBwYW5lbC0+YXBwZW5kQ2hpbGQoZnVsbHNjcmVl
blRpbWVsaW5lQ29udGFpbmVyLnJlbGVhc2UoKSwgZWMsIEF0dGFjaExhemlseSk7Ci0gICAgaWYg
KGVjKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xCdXR0b25H
cm91cENvbnRhaW5lckVsZW1lbnQ+IGJ1dHRvbkdyb3VwQ29udGFpbmVyID0gTWVkaWFDb250cm9s
QnV0dG9uR3JvdXBDb250YWluZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwotCi0gICAgLy8g
RklYTUU6IE9ubHkgY3JlYXRlIHdoZW4gbmVlZGVkIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU3MTYz
PgotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uQ29udGFpbmVyRWxlbWVu
dD4gZnVsbFNjcmVlbkJ1dHRvbkNvbnRhaW5lciA9IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0
b25Db250YWluZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwotICAgIGNvbnRyb2xzLT5tX2Z1
bGxTY3JlZW5CdXR0b25Db250YWluZXIgPSBmdWxsU2NyZWVuQnV0dG9uQ29udGFpbmVyLmdldCgp
OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuRnVsbHNjcmVlbkJ1dHRvbkVsZW1l
bnQ+IGZ1bGxzY3JlZW5GdWxsU2NyZWVuQnV0dG9uID0gTWVkaWFDb250cm9sRnVsbHNjcmVlbkZ1
bGxzY3JlZW5CdXR0b25FbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwotICAgIGNvbnRyb2xzLT5t
X2Z1bGxzY3JlZW5GdWxsU2NyZWVuQnV0dG9uID0gZnVsbHNjcmVlbkZ1bGxTY3JlZW5CdXR0b24u
Z2V0KCk7Ci0gICAgZnVsbFNjcmVlbkJ1dHRvbkNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZnVsbHNj
cmVlbkZ1bGxTY3JlZW5CdXR0b24ucmVsZWFzZSgpLCBlYywgQXR0YWNoTGF6aWx5KTsKLSAgICBp
ZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2Ny
ZWVuQnV0dG9uRGl2aWRlckVsZW1lbnQ+IGZ1bGxTY3JlZW5EaXZpZGVyID0gTWVkaWFDb250cm9s
RnVsbHNjcmVlbkJ1dHRvbkRpdmlkZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwotICAgIGNv
bnRyb2xzLT5tX2Z1bGxTY3JlZW5EaXZpZGVyID0gZnVsbFNjcmVlbkRpdmlkZXIuZ2V0KCk7Ci0g
ICAgZnVsbFNjcmVlbkJ1dHRvbkNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZnVsbFNjcmVlbkRpdmlk
ZXIucmVsZWFzZSgpLCBlYywgQXR0YWNoTGF6aWx5KTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIGJ1dHRvbkdyb3VwQ29udGFpbmVyLT5hcHBlbmRDaGlsZChmdWxsU2NyZWVu
QnV0dG9uQ29udGFpbmVyLnJlbGVhc2UoKSwgZWMsIEF0dGFjaExhemlseSk7Ci0gICAgaWYgKGVj
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xQbGF5QnV0dG9u
Q29udGFpbmVyRWxlbWVudD4gcGxheUJ1dHRvbkNvbnRhaW5lciA9IE1lZGlhQ29udHJvbFBsYXlC
dXR0b25Db250YWluZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwotICAgIGNvbnRyb2xzLT5t
X3BsYXlCdXR0b25Db250YWluZXIgPSBwbGF5QnV0dG9uQ29udGFpbmVyLmdldCgpOwotICAgIFJl
ZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuUGxheUJ1dHRvbkVsZW1lbnQ+IGZ1bGxzY3JlZW5Q
bGF5QnV0dG9uID0gTWVkaWFDb250cm9sRnVsbHNjcmVlblBsYXlCdXR0b25FbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQpOwotICAgIGNvbnRyb2xzLT5tX2Z1bGxzY3JlZW5QbGF5QnV0dG9uID0gZnVs
bHNjcmVlblBsYXlCdXR0b24uZ2V0KCk7Ci0gICAgcGxheUJ1dHRvbkNvbnRhaW5lci0+YXBwZW5k
Q2hpbGQoZnVsbHNjcmVlblBsYXlCdXR0b24ucmVsZWFzZSgpLCBlYywgQXR0YWNoTGF6aWx5KTsK
LSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotICAgIGJ1dHRvbkdyb3VwQ29udGFpbmVy
LT5hcHBlbmRDaGlsZChwbGF5QnV0dG9uQ29udGFpbmVyLnJlbGVhc2UoKSwgZWMsIEF0dGFjaExh
emlseSk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxNZWRp
YUNvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQ+IHBsYWNlaG9sZGVyID0gTWVkaWFDb250cm9sUGxh
Y2Vob2xkZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwotICAgIGNvbnRyb2xzLT5tX3BsYWNl
aG9sZGVyID0gcGxhY2Vob2xkZXIuZ2V0KCk7Ci0gICAgYnV0dG9uR3JvdXBDb250YWluZXItPmFw
cGVuZENoaWxkKHBsYWNlaG9sZGVyLnJlbGVhc2UoKSwgZWMsIEF0dGFjaExhemlseSk7Ci0gICAg
aWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnRyb2xzLT5tX2J1dHRvbkNvbnRh
aW5lciA9IGJ1dHRvbkdyb3VwQ29udGFpbmVyLmdldCgpOwotICAgIHBhbmVsLT5hcHBlbmRDaGls
ZChidXR0b25Hcm91cENvbnRhaW5lci5yZWxlYXNlKCksIGVjLCBBdHRhY2hMYXppbHkpOwotICAg
IGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZG9jdW1lbnQtPnBhZ2UoKS0+
dGhlbWUoKS0+c3VwcG9ydHNDbG9zZWRDYXB0aW9uaW5nKCkpIHsKLSAgICAgICAgUmVmUHRyPE1l
ZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudD4gdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24gPSBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgY29udHJvbHMuZ2V0KCkpOwotICAgICAgICBjb250cm9s
cy0+bV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA9IHRvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uLmdldCgpOwotICAgICAgICBwYW5lbC0+YXBwZW5kQ2hpbGQodG9nZ2xlQ2xvc2VkQ2FwdGlv
bnNCdXR0b24ucmVsZWFzZSgpLCBlYywgQXR0YWNoTGF6aWx5KTsKLSAgICAgICAgaWYgKGVjKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgY29udHJvbHMtPm1fcGFuZWwgPSBw
YW5lbC5nZXQoKTsKLSAgICBjb250cm9scy0+YXBwZW5kQ2hpbGQocGFuZWwucmVsZWFzZSgpLCBl
YywgQXR0YWNoTGF6aWx5KTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Y29udHJvbHMtPm1fZW1iZWRkZWRQYW5lbCA9IGVtYmVkUGFuZWwuZ2V0KCk7Ci0gICAgY29udHJv
bHMtPmFwcGVuZENoaWxkKGVtYmVkUGFuZWwucmVsZWFzZSgpLCBlYywgQXR0YWNoTGF6aWx5KTsK
LSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGNvbnRyb2xzLnJl
bGVhc2UoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzQmxhY2tCZXJyeTo6c2V0TWVkaWFDb250
cm9sbGVyKE1lZGlhQ29udHJvbGxlckludGVyZmFjZSogY29udHJvbGxlcikKLXsKLSAgICBpZiAo
bV9tZWRpYUNvbnRyb2xsZXIgPT0gY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
TWVkaWFDb250cm9sczo6c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwotCi0gICAgaWYg
KG1fYnV0dG9uQ29udGFpbmVyKQotICAgICAgICBtX2J1dHRvbkNvbnRhaW5lci0+c2V0TWVkaWFD
b250cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIGlmIChtX3RpbWVEaXNwbGF5Q29udGFpbmVyKQot
ICAgICAgICBtX3RpbWVEaXNwbGF5Q29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJv
bGxlcik7Ci0gICAgaWYgKG1fZnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFpbmVyKQotICAgICAg
ICBtX2Z1bGxzY3JlZW5UaW1lRGlzcGxheUNvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKGNv
bnRyb2xsZXIpOwotICAgIGlmIChtX2Z1bGxzY3JlZW5QbGF5QnV0dG9uKQotICAgICAgICBtX2Z1
bGxzY3JlZW5QbGF5QnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0gICAg
aWYgKG1fZnVsbHNjcmVlbkN1cnJlbnRUaW1lRGlzcGxheSkKLSAgICAgICAgbV9mdWxsc2NyZWVu
Q3VycmVudFRpbWVEaXNwbGF5LT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0gICAg
aWYgKG1fZnVsbHNjcmVlblRpbWVsaW5lKQotICAgICAgICBtX2Z1bGxzY3JlZW5UaW1lbGluZS0+
c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIGlmIChtX3RpbWVSZW1haW5pbmdE
aXNwbGF5KQotICAgICAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT5zZXRNZWRpYUNvbnRyb2xs
ZXIoY29udHJvbGxlcik7Ci0gICAgaWYgKG1fZnVsbHNjcmVlblRpbWVSZW1haW5pbmdEaXNwbGF5
KQotICAgICAgICBtX2Z1bGxzY3JlZW5UaW1lUmVtYWluaW5nRGlzcGxheS0+c2V0TWVkaWFDb250
cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIGlmIChtX3RpbWVsaW5lQ29udGFpbmVyKQotICAgICAg
ICBtX3RpbWVsaW5lQ29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0g
ICAgaWYgKG1fZnVsbHNjcmVlblRpbWVsaW5lQ29udGFpbmVyKQotICAgICAgICBtX2Z1bGxzY3Jl
ZW5UaW1lbGluZUNvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwotICAg
IGlmIChtX2Z1bGxzY3JlZW5GdWxsU2NyZWVuQnV0dG9uKQotICAgICAgICBtX2Z1bGxzY3JlZW5G
dWxsU2NyZWVuQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Ci0gICAgaWYg
KG1fbXV0ZUJ1dHRvbikKLSAgICAgICAgbV9tdXRlQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIo
Y29udHJvbGxlcik7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKQotICAgICAgICBt
X3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwot
ICAgIGlmIChtX2VtYmVkZGVkUGFuZWwpCi0gICAgICAgIG1fZW1iZWRkZWRQYW5lbC0+c2V0TWVk
aWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwotICAgIHJlc2V0KCk7Ci19Ci0KLXZvaWQgTWVkaWFD
b250cm9sc0JsYWNrQmVycnk6OnNob3coKQotewotICAgIGlmIChtX2lzRnVsbHNjcmVlbikgewot
ICAgICAgICBtX3BhbmVsLT5zZXRJc0Rpc3BsYXllZCh0cnVlKTsKLSAgICAgICAgbV9wYW5lbC0+
c2hvdygpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZW1iZWRkZWRQYW5lbC0+c2V0SXNEaXNw
bGF5ZWQodHJ1ZSk7Ci0gICAgICAgIG1fZW1iZWRkZWRQYW5lbC0+c2hvdygpOwotICAgIH0KLX0K
LQotdm9pZCBNZWRpYUNvbnRyb2xzQmxhY2tCZXJyeTo6aGlkZSgpCi17Ci0gICAgaWYgKG1faXNG
dWxsc2NyZWVuKSB7Ci0gICAgICAgIG1fcGFuZWwtPnNldElzRGlzcGxheWVkKGZhbHNlKTsKLSAg
ICAgICAgbV9wYW5lbC0+aGlkZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZW1iZWRkZWRQ
YW5lbC0+c2V0SXNEaXNwbGF5ZWQoZmFsc2UpOwotICAgICAgICBtX2VtYmVkZGVkUGFuZWwtPmhp
ZGUoKTsKLSAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPmhpZGUoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgTWVkaWFDb250cm9sc0JsYWNrQmVycnk6Om1ha2VPcGFxdWUoKQotewotICAgIGlm
IChtX2lzRnVsbHNjcmVlbikKLSAgICAgICAgbV9wYW5lbC0+bWFrZU9wYXF1ZSgpOwotICAgIGVs
c2UKLSAgICAgICAgbV9lbWJlZGRlZFBhbmVsLT5tYWtlT3BhcXVlKCk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sc0JsYWNrQmVycnk6Om1ha2VUcmFuc3BhcmVudCgpCi17Ci0gICAgaWYgKG1faXNG
dWxsc2NyZWVuKQotICAgICAgICBtX3BhbmVsLT5tYWtlVHJhbnNwYXJlbnQoKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgbV9lbWJlZGRlZFBhbmVsLT5tYWtlVHJhbnNwYXJlbnQoKTsKLSAgICAgICAg
bV92b2x1bWVTbGlkZXJDb250YWluZXItPmhpZGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFD
b250cm9sc0JsYWNrQmVycnk6OnJlc2V0KCkKLXsKLSAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQo
KS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdXBkYXRl
U3RhdHVzRGlzcGxheSgpOwotCi0gICAgaWYgKG1fZnVsbFNjcmVlbkJ1dHRvbikgewotICAgICAg
ICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPnN1cHBvcnRzRnVsbHNjcmVlbigpKQotICAgICAgICAg
ICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5zaG93KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fZnVsbFNjcmVlbkJ1dHRvbi0+aGlkZSgpOwotICAgIH0KLSAgICBpZiAobV9mdWxsc2NyZWVu
RnVsbFNjcmVlbkJ1dHRvbikgewotICAgICAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPnN1cHBv
cnRzRnVsbHNjcmVlbigpKQotICAgICAgICAgICAgbV9mdWxsc2NyZWVuRnVsbFNjcmVlbkJ1dHRv
bi0+c2hvdygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5GdWxsU2Ny
ZWVuQnV0dG9uLT5oaWRlKCk7Ci0gICAgfQotICAgIGRvdWJsZSBkdXJhdGlvbiA9IG1fbWVkaWFD
b250cm9sbGVyLT5kdXJhdGlvbigpOwotICAgIGlmIChzdGQ6OmlzZmluaXRlKGR1cmF0aW9uKSB8
fCBwYWdlLT50aGVtZSgpLT5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFTbGlk
ZXJQYXJ0KSkgewotICAgICAgICBkb3VibGUgbm93ID0gbV9tZWRpYUNvbnRyb2xsZXItPmN1cnJl
bnRUaW1lKCk7Ci0gICAgICAgIG1fdGltZWxpbmUtPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLSAg
ICAgICAgbV9mdWxsc2NyZWVuVGltZWxpbmUtPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLSAgICAg
ICAgbV90aW1lbGluZUNvbnRhaW5lci0+c2hvdygpOwotICAgICAgICBtX2Z1bGxzY3JlZW5UaW1l
bGluZUNvbnRhaW5lci0+c2hvdygpOwotICAgICAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihu
b3cpOwotICAgICAgICBtX2Z1bGxzY3JlZW5UaW1lbGluZS0+c2V0UG9zaXRpb24obm93KTsKLSAg
ICAgICAgdXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bV90aW1lbGluZUNvbnRhaW5lci0+aGlkZSgpOwotICAgICAgICBtX2Z1bGxzY3JlZW5UaW1lbGlu
ZUNvbnRhaW5lci0+aGlkZSgpOwotICAgIH0KLQotICAgIGlmIChtX21lZGlhQ29udHJvbGxlci0+
aGFzQXVkaW8oKSB8fCBwYWdlLT50aGVtZSgpLT5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdG
b3IoTWVkaWFNdXRlQnV0dG9uUGFydCkpCi0gICAgICAgIG1fbXV0ZUJ1dHRvbi0+c2hvdygpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9tdXRlQnV0dG9uLT5oaWRlKCk7Ci0KLSAgICBpZiAobV92b2x1
bWVTbGlkZXIpCi0gICAgICAgIHNldFNsaWRlclZvbHVtZSgpOwotCi0gICAgaWYgKG1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24pIHsKLSAgICAgICAgaWYgKG1fbWVkaWFDb250cm9sbGVyLT5o
YXNDbG9zZWRDYXB0aW9ucygpKQotICAgICAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbi0+c2hvdygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3RvZ2dsZUNsb3NlZENh
cHRpb25zQnV0dG9uLT5oaWRlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fcGxheUJ1dHRvbikKLSAg
ICAgICAgbV9wbGF5QnV0dG9uLT51cGRhdGVEaXNwbGF5VHlwZSgpOwotCi0gICAgaWYgKG1fZnVs
bHNjcmVlblBsYXlCdXR0b24pCi0gICAgICAgIG1fZnVsbHNjcmVlblBsYXlCdXR0b24tPnVwZGF0
ZURpc3BsYXlUeXBlKCk7Ci0KLSAgICBtYWtlT3BhcXVlKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250
cm9sc0JsYWNrQmVycnk6OmJ1ZmZlcmluZ1Byb2dyZXNzZWQoKQotewotICAgIC8vIFdlIG9ubHkg
bmVlZCB0byB1cGRhdGUgYnVmZmVyaW5nIHByb2dyZXNzIHdoZW4gcGF1c2VkLCBkdXJpbmcgbm9y
bWFsCi0gICAgLy8gcGxheWJhY2sgcGxheWJhY2tQcm9ncmVzc2VkKCkgd2lsbCB0YWtlIGNhcmUg
b2YgaXQuCi0gICAgaWYgKG1fbWVkaWFDb250cm9sbGVyLT5wYXVzZWQoKSkgewotICAgICAgICBk
b3VibGUgbm93ID0gbV9tZWRpYUNvbnRyb2xsZXItPmN1cnJlbnRUaW1lKCk7Ci0gICAgICAgIG1f
dGltZWxpbmUtPnNldFBvc2l0aW9uKG5vdyk7Ci0gICAgICAgIG1fZnVsbHNjcmVlblRpbWVsaW5l
LT5zZXRQb3NpdGlvbihub3cpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzQmxhY2tC
ZXJyeTo6cGxheWJhY2tTdGFydGVkKCkKLXsKLSAgICBkb3VibGUgbm93ID0gbV9tZWRpYUNvbnRy
b2xsZXItPmN1cnJlbnRUaW1lKCk7Ci0gICAgbV9wbGF5QnV0dG9uLT51cGRhdGVEaXNwbGF5VHlw
ZSgpOwotICAgIG1fZnVsbHNjcmVlblBsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7Ci0g
ICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obm93KTsKLSAgICBtX2Z1bGxzY3JlZW5UaW1lbGlu
ZS0+c2V0UG9zaXRpb24obm93KTsKLSAgICB1cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLQot
ICAgIGlmIChtX2lzRnVsbHNjcmVlbikKLSAgICAgICAgc3RhcnRIaWRlRnVsbHNjcmVlbkNvbnRy
b2xzVGltZXIoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzQmxhY2tCZXJyeTo6cGxheWJhY2tQ
cm9ncmVzc2VkKCkKLXsKLSAgICBkb3VibGUgbm93ID0gbV9tZWRpYUNvbnRyb2xsZXItPmN1cnJl
bnRUaW1lKCk7Ci0gICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obm93KTsKLSAgICBtX2Z1bGxz
Y3JlZW5UaW1lbGluZS0+c2V0UG9zaXRpb24obm93KTsKLSAgICB1cGRhdGVDdXJyZW50VGltZURp
c3BsYXkoKTsKLSAgICAKLSAgICBpZiAoIW1faXNNb3VzZU92ZXJDb250cm9scyAmJiBtX21lZGlh
Q29udHJvbGxlci0+aGFzVmlkZW8oKSkKLSAgICAgICAgbWFrZVRyYW5zcGFyZW50KCk7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sc0JsYWNrQmVycnk6OnBsYXliYWNrU3RvcHBlZCgpCi17Ci0gICAg
ZG91YmxlIG5vdyA9IG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgpOwotICAgIG1fcGxh
eUJ1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICBtX2Z1bGxzY3JlZW5QbGF5QnV0dG9u
LT51cGRhdGVEaXNwbGF5VHlwZSgpOwotICAgIG1fdGltZWxpbmUtPnNldFBvc2l0aW9uKG5vdyk7
Ci0gICAgbV9mdWxsc2NyZWVuVGltZWxpbmUtPnNldFBvc2l0aW9uKG5vdyk7Ci0gICAgdXBkYXRl
Q3VycmVudFRpbWVEaXNwbGF5KCk7Ci0gICAgbWFrZU9wYXF1ZSgpOwotICAgIAotICAgIHN0b3BI
aWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzQmxh
Y2tCZXJyeTo6dXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCkKLXsKLSAgICBkb3VibGUgbm93ID0g
bV9tZWRpYUNvbnRyb2xsZXItPmN1cnJlbnRUaW1lKCk7Ci0gICAgZG91YmxlIGR1cmF0aW9uID0g
bV9tZWRpYUNvbnRyb2xsZXItPmR1cmF0aW9uKCk7Ci0KLSAgICBQYWdlKiBwYWdlID0gZG9jdW1l
bnQoKS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
QWxsb3cgdGhlIHRoZW1lIHRvIGZvcm1hdCB0aGUgdGltZS4KLSAgICBtX2N1cnJlbnRUaW1lRGlz
cGxheS0+c2V0SW5uZXJUZXh0KHBhZ2UtPnRoZW1lKCktPmZvcm1hdE1lZGlhQ29udHJvbHNDdXJy
ZW50VGltZShub3csIGR1cmF0aW9uKSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgbV9jdXJyZW50
VGltZURpc3BsYXktPnNldEN1cnJlbnRWYWx1ZShub3cpOwotICAgIG1fZnVsbHNjcmVlbkN1cnJl
bnRUaW1lRGlzcGxheS0+c2V0SW5uZXJUZXh0KHBhZ2UtPnRoZW1lKCktPmZvcm1hdE1lZGlhQ29u
dHJvbHNDdXJyZW50VGltZShub3csIGR1cmF0aW9uKSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAg
bV9mdWxsc2NyZWVuQ3VycmVudFRpbWVEaXNwbGF5LT5zZXRDdXJyZW50VmFsdWUobm93KTsKLSAg
ICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT5zZXRJbm5lclRleHQocGFnZS0+dGhlbWUoKS0+Zm9y
bWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUobm93LCBkdXJhdGlvbiksIElHTk9SRV9FWENF
UFRJT04pOwotICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPnNldEN1cnJlbnRWYWx1ZShub3cg
LSBkdXJhdGlvbik7Ci0gICAgbV9mdWxsc2NyZWVuVGltZVJlbWFpbmluZ0Rpc3BsYXktPnNldElu
bmVyVGV4dChwYWdlLT50aGVtZSgpLT5mb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShu
b3csIGR1cmF0aW9uKSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgbV9mdWxsc2NyZWVuVGltZVJl
bWFpbmluZ0Rpc3BsYXktPnNldEN1cnJlbnRWYWx1ZShub3cgLSBkdXJhdGlvbik7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sc0JsYWNrQmVycnk6OnJlcG9ydGVkRXJyb3IoKQotewotICAgIFBhZ2Uq
IHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIXBhZ2UtPnRoZW1lKCktPmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGlu
Z0ZvcihNZWRpYVNsaWRlclBhcnQpKSB7Ci0gICAgICAgIG1fdGltZWxpbmVDb250YWluZXItPmhp
ZGUoKTsKLSAgICAgICAgbV9mdWxsc2NyZWVuVGltZWxpbmVDb250YWluZXItPmhpZGUoKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIXBhZ2UtPnRoZW1lKCktPmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGlu
Z0ZvcihNZWRpYU11dGVCdXR0b25QYXJ0KSkKLSAgICAgICAgbV9tdXRlQnV0dG9uLT5oaWRlKCk7
Ci0KLSAgICBpZiAobV9mdWxsU2NyZWVuQnV0dG9uKQotICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0
b24tPmhpZGUoKTsKLQotICAgIGlmIChtX2Z1bGxTY3JlZW5EaXZpZGVyKQotICAgICAgICBtX2Z1
bGxTY3JlZW5EaXZpZGVyLT5oaWRlKCk7Ci0KLSAgICBpZiAobV9mdWxsc2NyZWVuRnVsbFNjcmVl
bkJ1dHRvbikKLSAgICAgICAgbV9mdWxsc2NyZWVuRnVsbFNjcmVlbkJ1dHRvbi0+aGlkZSgpOwot
Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRl
ckNvbnRhaW5lci0+aGlkZSgpOwotCi0gICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b24gJiYgIXBhZ2UtPnRoZW1lKCktPmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRp
YVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uUGFydCkpCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24tPmhpZGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzQmxhY2tCZXJy
eTo6Y2hhbmdlZE11dGUoKQotewotICAgIG1fbXV0ZUJ1dHRvbi0+Y2hhbmdlZE11dGUoKTsKLX0K
LQotdm9pZCBNZWRpYUNvbnRyb2xzQmxhY2tCZXJyeTo6ZW50ZXJlZEZ1bGxzY3JlZW4oKQotewot
ICAgIE1lZGlhQ29udHJvbHM6OmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0KLSAgICBtX3BhbmVsLT5z
ZXRDYW5CZURyYWdnZWQodHJ1ZSk7Ci0gICAgbV9lbWJlZGRlZFBhbmVsLT5zZXRDYW5CZURyYWdn
ZWQodHJ1ZSk7Ci0KLSAgICBpZiAobV9mdWxsc2NyZWVuRnVsbFNjcmVlbkJ1dHRvbikKLSAgICAg
ICAgbV9mdWxsc2NyZWVuRnVsbFNjcmVlbkJ1dHRvbi0+c2V0SXNGdWxsc2NyZWVuKHRydWUpOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbHNCbGFja0JlcnJ5OjpleGl0ZWRGdWxsc2NyZWVuKCkKLXsK
LSAgICBtX3BhbmVsLT5zZXRDYW5CZURyYWdnZWQoZmFsc2UpOwotICAgIG1fZW1iZWRkZWRQYW5l
bC0+c2V0Q2FuQmVEcmFnZ2VkKGZhbHNlKTsKLQotICAgIGlmIChtX2Z1bGxzY3JlZW5GdWxsU2Ny
ZWVuQnV0dG9uKQotICAgICAgICBtX2Z1bGxzY3JlZW5GdWxsU2NyZWVuQnV0dG9uLT5zZXRJc0Z1
bGxzY3JlZW4oZmFsc2UpOwotCi0gICAgLy8gV2Ugd2lsbCBrZWVwIHVzaW5nIHRoZSBwYW5lbCwg
YnV0IHdlIHdhbnQgaXQgdG8gZ28gYmFjayB0byB0aGUgc3RhbmRhcmQgcG9zaXRpb24uCi0gICAg
Ly8gVGhpcyB3aWxsIG1hdHRlciByaWdodCBhd2F5IGJlY2F1c2Ugd2UgdXNlIHRoZSBwYW5lbCBl
dmVuIHdoZW4gbm90IGZ1bGxzY3JlZW4uCi0gICAgLy8gQW5kIGlmIHdlIHJlZW50ZXIgZnVsbHNj
cmVlbiB3ZSBhbHNvIHdhbnQgdGhlIHBhbmVsIGluIHRoZSBzdGFuZGFyZCBwb3NpdGlvbi4KLSAg
ICBtX3BhbmVsLT5yZXNldFBvc2l0aW9uKCk7Ci0gICAgbV9lbWJlZGRlZFBhbmVsLT5yZXNldFBv
c2l0aW9uKCk7Ci0KLSAgICBNZWRpYUNvbnRyb2xzOjpleGl0ZWRGdWxsc2NyZWVuKCk7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sc0JsYWNrQmVycnk6OnNob3dWb2x1bWVTbGlkZXIoKQotewotICAg
IGlmICghbV9tZWRpYUNvbnRyb2xsZXItPmhhc0F1ZGlvKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikKLSAgICAgICAgbV92b2x1bWVTbGlkZXJD
b250YWluZXItPnNob3coKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzQmxhY2tCZXJyeTo6dG9n
Z2xlVm9sdW1lU2xpZGVyKCkKLXsKLSAgICBpZiAoIW1fbWVkaWFDb250cm9sbGVyLT5oYXNBdWRp
bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV92b2x1bWVTbGlkZXJDb250YWluZXIp
IHsKLSAgICAgICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5yZW5kZXJlcigpICYmIG1f
dm9sdW1lU2xpZGVyQ29udGFpbmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCkp
Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+aGlkZSgpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c2hvdygpOwotICAgIH0K
LX0KLQotYm9vbCBNZWRpYUNvbnRyb2xzQmxhY2tCZXJyeTo6c2hvdWxkSGlkZUNvbnRyb2xzKCkK
LXsKLSAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybiAhbV9wYW5lbC0+aG92
ZXJlZCgpOwotICAgIHJldHVybiAhbV9lbWJlZGRlZFBhbmVsLT5ob3ZlcmVkKCk7Ci19Ci19Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sc0Js
YWNrQmVycnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xzQmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNjE1OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQmxhY2tCZXJyeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDI5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgTWVkaWFDb250cm9sc0JsYWNrQmVycnlfaAotI2RlZmluZSBNZWRpYUNv
bnRyb2xzQmxhY2tCZXJyeV9oCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRlICJNZWRp
YUNvbnRyb2xFbGVtZW50VHlwZXMuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5o
IgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbHMuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSFRNTElucHV0RWxlbWVudDsKLWNsYXNzIEhU
TUxNZWRpYUVsZW1lbnQ7Ci1jbGFzcyBFdmVudDsKLWNsYXNzIE1lZGlhUGxheWVyOwotCi1jbGFz
cyBSZW5kZXJCb3g7Ci1jbGFzcyBSZW5kZXJNZWRpYTsKLQotI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLWNsYXNzIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ7Ci1jbGFzcyBN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudDsKLSNlbmRpZgotCi1jbGFzcyBNZWRp
YUNvbnRyb2xCdXR0b25Hcm91cENvbnRhaW5lckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9s
RGl2RWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9s
QnV0dG9uR3JvdXBDb250YWluZXJFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKLQotcHJvdGVj
dGVkOgotICAgIE1lZGlhQ29udHJvbEJ1dHRvbkdyb3VwQ29udGFpbmVyRWxlbWVudChEb2N1bWVu
dCopOwotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNv
bnN0IE9WRVJSSURFOwotfTsKLQotY2xhc3MgTWVkaWFDb250cm9sVGltZURpc3BsYXlDb250YWlu
ZXJFbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5Q29udGFpbmVyRWxlbWVu
dD4gY3JlYXRlKERvY3VtZW50Kik7Ci0KLXByb3RlY3RlZDoKLSAgICBNZWRpYUNvbnRyb2xUaW1l
RGlzcGxheUNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBPVkVSUklERTsKLX07Ci0KLWNsYXNz
IE1lZGlhQ29udHJvbEVtYmVkZGVkUGFuZWxFbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbERp
dkVsZW1lbnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbEVt
YmVkZGVkUGFuZWxFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKLQotICAgIHZvaWQgc2V0Q2Fu
QmVEcmFnZ2VkKGJvb2wpOwotICAgIHZvaWQgc2V0SXNEaXNwbGF5ZWQoYm9vbCk7Ci0KLSAgICB2
b2lkIHJlc2V0UG9zaXRpb24oKTsKLSAgICB2b2lkIG1ha2VPcGFxdWUoKTsKLSAgICB2b2lkIG1h
a2VUcmFuc3BhcmVudCgpOwotCi0gICAgdmlydHVhbCBib29sIHdpbGxSZXNwb25kVG9Nb3VzZU1v
dmVFdmVudHMoKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHdp
bGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQot
Ci1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbEVtYmVkZGVkUGFuZWxFbGVtZW50
KERvY3VtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNl
dWRvSWQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCopIE9WRVJSSURFOwotCi0gICAgdm9pZCBzdGFydERyYWcoY29uc3QgTGF5b3V0
UG9pbnQmIGV2ZW50TG9jYXRpb24pOwotICAgIHZvaWQgY29udGludWVEcmFnKGNvbnN0IExheW91
dFBvaW50JiBldmVudExvY2F0aW9uKTsKLSAgICB2b2lkIGVuZERyYWcoKTsKLQotICAgIHZvaWQg
c3RhcnRUaW1lcigpOwotICAgIHZvaWQgc3RvcFRpbWVyKCk7Ci0gICAgdm9pZCB0cmFuc2l0aW9u
VGltZXJGaXJlZChUaW1lcjxNZWRpYUNvbnRyb2xFbWJlZGRlZFBhbmVsRWxlbWVudD4qKTsKLQot
ICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgTGF5b3V0UG9pbnQmKTsKLQotICAgIGJvb2wgbV9j
YW5CZURyYWdnZWQ7Ci0gICAgYm9vbCBtX2lzQmVpbmdEcmFnZ2VkOwotICAgIGJvb2wgbV9pc0Rp
c3BsYXllZDsKLSAgICBib29sIG1fb3BhcXVlOwotICAgIExheW91dFBvaW50IG1fbGFzdERyYWdF
dmVudExvY2F0aW9uOwotICAgIExheW91dFBvaW50IG1fY3VtdWxhdGl2ZURyYWdPZmZzZXQ7Ci0K
LSAgICBUaW1lcjxNZWRpYUNvbnRyb2xFbWJlZGRlZFBhbmVsRWxlbWVudD4gbV90cmFuc2l0aW9u
VGltZXI7Ci19OwotCi1jbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVGltZURpc3BsYXlDb250
YWluZXJFbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lRGlzcGxheUNv
bnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgTWVk
aWFDb250cm9sRnVsbHNjcmVlblRpbWVEaXNwbGF5Q29udGFpbmVyRWxlbWVudChEb2N1bWVudCop
OwotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0
IE9WRVJSSURFOwotfTsKLQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkNvbnRh
aW5lckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkNvbnRhaW5l
ckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOwotCi1wcml2YXRlOgotICAgIE1lZGlhQ29udHJv
bEZ1bGxzY3JlZW5CdXR0b25Db250YWluZXJFbGVtZW50KERvY3VtZW50Kik7Ci0gICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3QgT1ZFUlJJREU7Ci19
OwotCi1jbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRGl2aWRlckVsZW1lbnQgOiBw
dWJsaWMgTWVkaWFDb250cm9sRGl2RWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkRpdmlkZXJFbGVtZW50PiBjcmVhdGUo
RG9jdW1lbnQqKTsKLQotcHJpdmF0ZToKLSAgICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9u
RGl2aWRlckVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBPVkVSUklERTsKLX07Ci0KLWNsYXNzIE1lZGlhQ29u
dHJvbFBsYXlCdXR0b25Db250YWluZXJFbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbERpdkVs
ZW1lbnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFBsYXlC
dXR0b25Db250YWluZXJFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKLQotcHJpdmF0ZToKLSAg
ICBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCopOwotICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IE9WRVJS
SURFOwotfTsKLQotY2xhc3MgTWVkaWFDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50IDogcHVibGlj
IE1lZGlhQ29udHJvbERpdkVsZW1lbnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE1lZGlhQ29udHJvbFBsYWNlaG9sZGVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7Ci0KLXBy
aXZhdGU6Ci0gICAgTWVkaWFDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50KERvY3VtZW50Kik7Ci0g
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3QgT1ZF
UlJJREU7Ci19OwotCi1jbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuUGxheUJ1dHRvbkVsZW1l
bnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuUGxheUJ1dHRvbkVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCopOwotCi0gICAgdmlydHVhbCBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNs
aWNrRXZlbnRzKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVEaXNwbGF5VHlwZSgpIE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIE1lZGlhQ29udHJv
bEZ1bGxzY3JlZW5QbGF5QnV0dG9uRWxlbWVudChEb2N1bWVudCopOwotICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJREU7Ci19OwotCi1j
bGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQgOiBwdWJs
aWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IGNyZWF0
ZShEb2N1bWVudCopOwotCi0gICAgdmlydHVhbCBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNr
RXZlbnRzKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgc2V0SXNGdWxsc2Ny
ZWVuKGJvb2wpOwotCi1wcml2YXRlOgotICAgIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5GdWxsc2Ny
ZWVuQnV0dG9uRWxlbWVudChEb2N1bWVudCopOwotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJREU7Ci19OwotCi1jbGFzcyBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuVGltZWxpbmVDb250YWluZXJFbGVtZW50IDogcHVibGljIE1lZGlhQ29u
dHJvbERpdkVsZW1lbnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5UaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCop
OwotCi1wcml2YXRlOgotICAgIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lbGluZUNvbnRhaW5l
ckVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hh
ZG93UHNldWRvSWQoKSBjb25zdCBPVkVSUklERTsKLX07Ci0KLWNsYXNzIE1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5UaW1lbGluZUVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
VGltZWxpbmVFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBPVkVSUklERTsK
LSAgICB2b2lkIHNldFBvc2l0aW9uKGRvdWJsZSk7Ci0gICAgdm9pZCBzZXREdXJhdGlvbihkb3Vi
bGUpOwotCi1wcml2YXRlOgotICAgIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lbGluZUVsZW1l
bnQoRG9jdW1lbnQqLCBNZWRpYUNvbnRyb2xzKik7Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lk
IGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERTsKLQotICAgIE1lZGlhQ29udHJv
bHMqIG1fY29udHJvbHM7Ci19OwotCi1jbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVGltZVJl
bWFpbmluZ0Rpc3BsYXlFbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxl
bWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNj
cmVlblRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7Ci0KLXBy
aXZhdGU6Ci0gICAgTWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVSZW1haW5pbmdEaXNwbGF5RWxl
bWVudChEb2N1bWVudCopOwotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQ
c2V1ZG9JZCgpIGNvbnN0IE9WRVJSSURFOwotfTsKLQotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNj
cmVlbkN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sVGltZURp
c3BsYXlFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7
Ci0KLXByaXZhdGU6Ci0gICAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkN1cnJlbnRUaW1lRGlzcGxh
eUVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hh
ZG93UHNldWRvSWQoKSBjb25zdCBPVkVSUklERTsKLX07Ci0KLWNsYXNzIE1lZGlhQ29udHJvbEF1
ZGlvTXV0ZUJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1l
bnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbEF1ZGlvTXV0
ZUJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIE1lZGlhQ29udHJvbHMqKTsKLQotICAg
IHZpcnR1YWwgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRzKCkgT1ZFUlJJREUgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbEF1ZGlv
TXV0ZUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqLCBNZWRpYUNvbnRyb2xzKik7Ci0KLSAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopIE9WRVJSSURFOwot
Ci0gICAgTWVkaWFDb250cm9scyogbV9jb250cm9sczsKLX07Ci0KLWNsYXNzIE1lZGlhQ29udHJv
bHNCbGFja0JlcnJ5IDogcHVibGljIE1lZGlhQ29udHJvbHMgewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbHNCbGFja0JlcnJ5PiBjcmVhdGVDb250cm9scyhEb2N1
bWVudCopOwotCi0gICAgLy8gTWVkaWFDb250cm9scyBpbXBsZW1lbnRhdGlvbi4KLSAgICB2b2lk
IHNldE1lZGlhQ29udHJvbGxlcihNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UqKSBPVkVSUklERTsK
LQotICAgIHZvaWQgc2hvdygpIE9WRVJSSURFOwotICAgIHZvaWQgaGlkZSgpIE9WRVJSSURFOwot
ICAgIHZvaWQgbWFrZU9wYXF1ZSgpIE9WRVJSSURFOwotICAgIHZvaWQgbWFrZVRyYW5zcGFyZW50
KCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIHJlc2V0KCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIGJ1
ZmZlcmluZ1Byb2dyZXNzZWQoKSBPVkVSUklERTsKLSAgICB2b2lkIHBsYXliYWNrUHJvZ3Jlc3Nl
ZCgpIE9WRVJSSURFOwotICAgIHZvaWQgcGxheWJhY2tTdGFydGVkKCkgT1ZFUlJJREU7Ci0gICAg
dm9pZCBwbGF5YmFja1N0b3BwZWQoKSBPVkVSUklERTsKLQotICAgIHZvaWQgY2hhbmdlZE11dGUo
KSBPVkVSUklERTsKLQotICAgIHZvaWQgZW50ZXJlZEZ1bGxzY3JlZW4oKSBPVkVSUklERTsKLSAg
ICB2b2lkIGV4aXRlZEZ1bGxzY3JlZW4oKSBPVkVSUklERTsKLQotICAgIHZvaWQgcmVwb3J0ZWRF
cnJvcigpIE9WRVJSSURFOwotCi0gICAgdm9pZCBzaG93Vm9sdW1lU2xpZGVyKCkgT1ZFUlJJREU7
Ci0gICAgdm9pZCB0b2dnbGVWb2x1bWVTbGlkZXIoKTsKLSAgICB2b2lkIHVwZGF0ZUN1cnJlbnRU
aW1lRGlzcGxheSgpIE9WRVJSSURFOwotCi0gICAgdmlydHVhbCBib29sIHNob3VsZEhpZGVDb250
cm9scygpIE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIE1lZGlhQ29udHJvbHNCbGFja0JlcnJ5
KERvY3VtZW50Kik7Ci0KLSAgICBNZWRpYUNvbnRyb2xCdXR0b25Hcm91cENvbnRhaW5lckVsZW1l
bnQqIG1fYnV0dG9uQ29udGFpbmVyOwotICAgIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5Q29udGFp
bmVyRWxlbWVudCogbV90aW1lRGlzcGxheUNvbnRhaW5lcjsKLSAgICBNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuVGltZURpc3BsYXlDb250YWluZXJFbGVtZW50KiBtX2Z1bGxzY3JlZW5UaW1lRGlzcGxh
eUNvbnRhaW5lcjsKLSAgICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuUGxheUJ1dHRvbkVsZW1lbnQq
IG1fZnVsbHNjcmVlblBsYXlCdXR0b247Ci0gICAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkN1cnJl
bnRUaW1lRGlzcGxheUVsZW1lbnQqIG1fZnVsbHNjcmVlbkN1cnJlbnRUaW1lRGlzcGxheTsKLSAg
ICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVGltZWxpbmVFbGVtZW50KiBtX2Z1bGxzY3JlZW5UaW1l
bGluZTsKLSAgICBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQqIG1fdGlt
ZVJlbWFpbmluZ0Rpc3BsYXk7Ci0gICAgTWVkaWFDb250cm9sRnVsbHNjcmVlblRpbWVSZW1haW5p
bmdEaXNwbGF5RWxlbWVudCogbV9mdWxsc2NyZWVuVGltZVJlbWFpbmluZ0Rpc3BsYXk7Ci0gICAg
TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50KiBtX3RpbWVsaW5lQ29udGFpbmVy
OwotICAgIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5UaW1lbGluZUNvbnRhaW5lckVsZW1lbnQqIG1f
ZnVsbHNjcmVlblRpbWVsaW5lQ29udGFpbmVyOwotICAgIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5C
dXR0b25EaXZpZGVyRWxlbWVudCogbV9mdWxsU2NyZWVuRGl2aWRlcjsKLSAgICBNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqIG1fZnVsbHNjcmVlbkZ1bGxTY3Jl
ZW5CdXR0b247Ci0gICAgTWVkaWFDb250cm9sQXVkaW9NdXRlQnV0dG9uRWxlbWVudCogbV9tdXRl
QnV0dG9uOwotICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQqIG1f
dm9sdW1lU2xpZGVyQ29udGFpbmVyOwotICAgIE1lZGlhQ29udHJvbEVtYmVkZGVkUGFuZWxFbGVt
ZW50KiBtX2VtYmVkZGVkUGFuZWw7Ci0gICAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkNv
bnRhaW5lckVsZW1lbnQqIG1fZnVsbFNjcmVlbkJ1dHRvbkNvbnRhaW5lcjsKLSAgICBNZWRpYUNv
bnRyb2xQbGF5QnV0dG9uQ29udGFpbmVyRWxlbWVudCogbV9wbGF5QnV0dG9uQ29udGFpbmVyOwot
ICAgIE1lZGlhQ29udHJvbFBsYWNlaG9sZGVyRWxlbWVudCogbV9wbGFjZWhvbGRlcjsKLX07Ci0K
LX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYmxhY2tiZXJy
eS9EcmFnQ29udHJvbGxlckJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvYmxhY2tiZXJyeS9EcmFnQ29udHJvbGxlckJsYWNrQmVycnkuY3BwCShyZXZpc2lv
biAxNjE1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2JsYWNrYmVycnkvRHJhZ0NvbnRyb2xs
ZXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLwotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgotCi0jaWYgRU5BQkxF
KERSQUdfU1VQUE9SVCkKLSNpbmNsdWRlICJEcmFnRGF0YS5oIgotI2luY2x1ZGUgIkV2ZW50SGFu
ZGxlci5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgZG91YmxlIEV2ZW50
SGFuZGxlcjo6VGV4dERyYWdEZWxheSA9IDA7Ci1jb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6Okxp
bmtEcmFnQm9yZGVySW5zZXQgPSAyOwotY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpNYXhPcmln
aW5hbEltYWdlQXJlYSA9IDE1MDAgKiAxNTAwOwotY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpE
cmFnSWNvblJpZ2h0SW5zZXQgPSA3OwotY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNv
bkJvdHRvbUluc2V0ID0gMzsKLWNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VB
bHBoYSA9IDAuNzVmOwotCi1ib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdE
YXRhKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Y29uc3QgSW50U2l6ZSYgRHJhZ0NvbnRyb2xsZXI6Om1heERyYWdJbWFnZVNpemUoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gbm8gc3R1
YnMgdXNlIGl0IGFueW1vcmUuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBXZWJDb3Jl
OjpJbnRTaXplLCBudWxsU2l6ZSwgKCkpOwotICAgIHJldHVybiBudWxsU2l6ZTsKLX0KLQotdm9p
ZCBEcmFnQ29udHJvbGxlcjo6Y2xlYW51cEFmdGVyU3lzdGVtRHJhZygpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJh
dGlvbihEcmFnRGF0YSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRHJh
Z09wZXJhdGlvbk5vbmU7Ci19Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jZW5kaWYgLy8gRU5B
QkxFKERSQUdfU1VQUE9SVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYmxhY2tiZXJyeS9F
dmVudEhhbmRsZXJCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL2JsYWNrYmVycnkvRXZlbnRIYW5kbGVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYmxhY2tiZXJyeS9FdmVudEhhbmRsZXJCbGFja0Jl
cnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLQotI2luY2x1ZGUgIkZvY3VzQ29udHJv
bGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgot
I2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJX
aWRnZXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEV2ZW50SGFuZGxlcjo6ZXZl
bnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIGNvbnN0Ci17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lLCBIaXRUZXN0UmVzdWx0KiBob3ZlcmVkTm9kZSkK
LXsKLSAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxlTW91c2VNb3ZlRXZlbnQobWV2
LmV2ZW50KCksIGhvdmVyZWROb2RlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lKQotewotICAgIHN1YmZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5oYW5kbGVNb3VzZVByZXNzRXZlbnQobWV2LmV2ZW50KCkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9T
dWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFt
ZSkKLXsKLSAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxlTW91c2VSZWxlYXNlRXZl
bnQobWV2LmV2ZW50KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEV2ZW50SGFuZGxl
cjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXaWRn
ZXQqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxGb3Jt
Q29udHJvbHMoS2V5Ym9hcmRFdmVudCopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXVuc2lnbmVkIEV2ZW50SGFuZGxlcjo6YWNjZXNzS2V5TW9kaWZpZXJzKCkKLXsKLSAgICByZXR1
cm4gUGxhdGZvcm1FdmVudDo6QWx0S2V5OwotfQotCi12b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNE
b2N1bWVudFZpZXcoKQotewotICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7Ci0gICAg
aWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
c2V0Rm9jdXNlZEZyYW1lKG1fZnJhbWUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2JsYWNrYmVycnkvU2V0dGluZ3NCbGFja0JlcnJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2JsYWNrYmVycnkvU2V0dGluZ3NC
bGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTk2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9i
bGFja2JlcnJ5L1NldHRpbmdzQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLQotI2luY2x1ZGUgIkxvY2FsZVRv
U2NyaXB0TWFwcGluZy5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtRm9udEluZm8u
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFNldHRpbmdzOjppbml0aWFsaXplRGVm
YXVsdEZvbnRGYW1pbGllcygpCi17Ci0gICAgc3RhdGljIHN0ZDo6dmVjdG9yPEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTdHJpbmc+IGxhbmd1YWdlczsKLSAgICBzdGF0aWMgYm9vbCBpbml0ID0gZmFs
c2U7Ci0gICAgaWYgKCFpbml0KSB7Ci0gICAgICAgIGxhbmd1YWdlcyA9IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+bGFuZ3VhZ2VzV2l0aEZvbnRzKCk7Ci0gICAg
ICAgIGluaXQgPSB0cnVlOwotICAgIH0KLQotICAgIFNUQVRJQ19MT0NBTF9TVFJJTkcoc193ZWJr
aXRDdXJzaXZlLCAiLXdlYmtpdC1jdXJzaXZlIik7Ci0gICAgU1RBVElDX0xPQ0FMX1NUUklORyhz
X3dlYmtpdEZhbnRhc3ksICItd2Via2l0LWZhbnRhc3kiKTsKLSAgICBTVEFUSUNfTE9DQUxfU1RS
SU5HKHNfd2Via2l0TW9ub3NwYWNlLCAiLXdlYmtpdC1tb25vc3BhY2UiKTsKLSAgICBTVEFUSUNf
TE9DQUxfU1RSSU5HKHNfd2Via2l0U2Fuc1NlcmlmLCAiLXdlYmtpdC1zYW5zLXNlcmlmIik7Ci0g
ICAgU1RBVElDX0xPQ0FMX1NUUklORyhzX3dlYmtpdFNlcmlmLCAiLXdlYmtpdC1zZXJpZiIpOwot
ICAgIFNUQVRJQ19MT0NBTF9TVFJJTkcoc193ZWJraXRTdGFuZGFyZCwgIi13ZWJraXQtc3RhbmRh
cmQiKTsKLQotICAgIHNldEN1cnNpdmVGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
b250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX3dlYmtpdEN1cnNpdmUsIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5nKCkpKTsKLSAgICBzZXRGYW50YXN5Rm9u
dEZhbWlseShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRG
YW1pbHkoc193ZWJraXRGYW50YXN5LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0
eVN0cmluZygpKSk7Ci0gICAgc2V0Rml4ZWRGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX3dlYmtpdE1vbm9zcGFjZSwgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKSkpOwotICAgIHNldFNhbnNT
ZXJpZkZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0YW5jZSgp
LT5mb250RmFtaWx5KHNfd2Via2l0U2Fuc1NlcmlmLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nOjplbXB0eVN0cmluZygpKSk7Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5KEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX3dlYmtpdFNlcmlm
LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpKSk7Ci0gICAgc2V0
U3RhbmRhcmRGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFu
Y2UoKS0+Zm9udEZhbWlseShzX3dlYmtpdFN0YW5kYXJkLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nOjplbXB0eVN0cmluZygpKSk7Ci0KLSAgICBTVEFUSUNfTE9DQUxfU1RSSU5HKHNfbW9u
b3NwYWNlLCAibW9ub3NwYWNlIik7Ci0gICAgU1RBVElDX0xPQ0FMX1NUUklORyhzX3NlcmlmLCAi
c2VyaWYiKTsKLSAgICBTVEFUSUNfTE9DQUxfU1RSSU5HKHNfc2Fuc1NlcmlmLCAic2Fucy1zZXJp
ZiIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFuZ3VhZ2VzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIFVTY3JpcHRDb2RlIHNjcmlwdCA9IGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRT
ZWxlY3Rpb24obGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgc2V0Rml4ZWRGb250RmFtaWx5KEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX21vbm9z
cGFjZSwgbGFuZ3VhZ2VzW2ldKSwgc2NyaXB0KTsKLSAgICAgICAgc2V0U2Fuc1NlcmlmRm9udEZh
bWlseShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1p
bHkoc19zYW5zU2VyaWYsIGxhbmd1YWdlc1tpXSksIHNjcmlwdCk7Ci0gICAgICAgIHNldFNlcmlm
Rm9udEZhbWlseShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZv
bnRGYW1pbHkoc19zZXJpZiwgbGFuZ3VhZ2VzW2ldKSwgc2NyaXB0KTsKLSAgICAgICAgc2V0U3Rh
bmRhcmRGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2Uo
KS0+Zm9udEZhbWlseShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygp
LCBsYW5ndWFnZXNbaV0pLCBzY3JpcHQpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ibGFja2JlcnJ5L0RyYWdDb250cm9sbGVy
QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ibGFja2Jl
cnJ5L0RyYWdDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTU5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYmxhY2tiZXJyeS9EcmFnQ29udHJvbGxlckJsYWNrQmVycnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkRyYWdDb250cm9sbGVyLmgiCi0KLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQot
I2luY2x1ZGUgIkRyYWdEYXRhLmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0KLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBkb3VibGUgRXZlbnRIYW5kbGVyOjpUZXh0RHJh
Z0RlbGF5ID0gMDsKLWNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6TGlua0RyYWdCb3JkZXJJbnNl
dCA9IDI7Ci1jb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6Ok1heE9yaWdpbmFsSW1hZ2VBcmVhID0g
MTUwMCAqIDE1MDA7Ci1jb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uUmlnaHRJbnNl
dCA9IDc7Ci1jb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tSW5zZXQgPSAz
OwotY29uc3QgZmxvYXQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFscGhhID0gMC43NWY7Ci0K
LWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oRHJhZ0RhdGEqKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1jb25zdCBJbnRTaXplJiBE
cmFnQ29udHJvbGxlcjo6bWF4RHJhZ0ltYWdlU2l6ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiBubyBzdHVicyB1c2UgaXQgYW55bW9y
ZS4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFdlYkNvcmU6OkludFNpemUsIG51bGxT
aXplLCAoKSk7Ci0gICAgcmV0dXJuIG51bGxTaXplOwotfQotCi12b2lkIERyYWdDb250cm9sbGVy
OjpjbGVhbnVwQWZ0ZXJTeXN0ZW1EcmFnKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci1EcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsK
LX0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JU
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ibGFja2JlcnJ5L0V2ZW50SGFuZGxlckJsYWNr
QmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYmxhY2tiZXJyeS9F
dmVudEhhbmRsZXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTk2KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9ibGFja2JlcnJ5L0V2ZW50SGFuZGxlckJsYWNrQmVycnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkV2ZW50SGFuZGxlci5oIgotCi0jaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIldpZGdldC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXco
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZU1v
dmVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFt
ZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1bHQqIGhvdmVyZWROb2RlKQotewotICAgIHN1YmZyYW1l
LT5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZU1vdmVFdmVudChtZXYuZXZlbnQoKSwgaG92ZXJl
ZE5vZGUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc01v
dXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2
LCBGcmFtZSogc3ViZnJhbWUpCi17Ci0gICAgc3ViZnJhbWUtPmV2ZW50SGFuZGxlcigpLmhhbmRs
ZU1vdXNlUHJlc3NFdmVudChtZXYuZXZlbnQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VSZWxlYXNlRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZl
bnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lKQotewotICAgIHN1YmZy
YW1lLT5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChtZXYuZXZlbnQoKSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVu
dFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIFdpZGdldCopCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVy
OjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25zdCBNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OnRhYnNUb0FsbEZvcm1Db250cm9scyhLZXlib2Fy
ZEV2ZW50KikgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgRXZlbnRI
YW5kbGVyOjphY2Nlc3NLZXlNb2RpZmllcnMoKQotewotICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50
OjpBbHRLZXk7Ci19Ci0KLXZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50VmlldygpCi17
Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAg
ICAgIHJldHVybjsKLSAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRnJhbWUo
bV9mcmFtZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvYmxhY2tiZXJyeS9TZXR0aW5nc0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYmxhY2tiZXJyeS9TZXR0aW5nc0JsYWNrQmVycnkuY3BwCShy
ZXZpc2lvbiAxNjE1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2JsYWNrYmVycnkvU2V0dGlu
Z3NCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTZXR0aW5ncy5oIgotCi0jaW5jbHVkZSAiTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgi
Ci0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Gb250SW5mby5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXZvaWQgU2V0dGluZ3M6OmluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVz
KCkKLXsKLSAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
Zz4gbGFuZ3VhZ2VzOwotICAgIHN0YXRpYyBib29sIGluaXQgPSBmYWxzZTsKLSAgICBpZiAoIWlu
aXQpIHsKLSAgICAgICAgbGFuZ3VhZ2VzID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZv
OjppbnN0YW5jZSgpLT5sYW5ndWFnZXNXaXRoRm9udHMoKTsKLSAgICAgICAgaW5pdCA9IHRydWU7
Ci0gICAgfQotCi0gICAgU1RBVElDX0xPQ0FMX1NUUklORyhzX3dlYmtpdEN1cnNpdmUsICItd2Vi
a2l0LWN1cnNpdmUiKTsKLSAgICBTVEFUSUNfTE9DQUxfU1RSSU5HKHNfd2Via2l0RmFudGFzeSwg
Ii13ZWJraXQtZmFudGFzeSIpOwotICAgIFNUQVRJQ19MT0NBTF9TVFJJTkcoc193ZWJraXRNb25v
c3BhY2UsICItd2Via2l0LW1vbm9zcGFjZSIpOwotICAgIFNUQVRJQ19MT0NBTF9TVFJJTkcoc193
ZWJraXRTYW5zU2VyaWYsICItd2Via2l0LXNhbnMtc2VyaWYiKTsKLSAgICBTVEFUSUNfTE9DQUxf
U1RSSU5HKHNfd2Via2l0U2VyaWYsICItd2Via2l0LXNlcmlmIik7Ci0gICAgU1RBVElDX0xPQ0FM
X1NUUklORyhzX3dlYmtpdFN0YW5kYXJkLCAiLXdlYmtpdC1zdGFuZGFyZCIpOwotCi0gICAgc2V0
Q3Vyc2l2ZUZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0YW5j
ZSgpLT5mb250RmFtaWx5KHNfd2Via2l0Q3Vyc2l2ZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZzo6ZW1wdHlTdHJpbmcoKSkpOwotICAgIHNldEZhbnRhc3lGb250RmFtaWx5KEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX3dlYmtpdEZh
bnRhc3ksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5nKCkpKTsKLSAg
ICBzZXRGaXhlZEZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0
YW5jZSgpLT5mb250RmFtaWx5KHNfd2Via2l0TW9ub3NwYWNlLCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nOjplbXB0eVN0cmluZygpKSk7Ci0gICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoc193
ZWJraXRTYW5zU2VyaWYsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5n
KCkpKTsKLSAgICBzZXRTZXJpZkZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJ
bmZvOjppbnN0YW5jZSgpLT5mb250RmFtaWx5KHNfd2Via2l0U2VyaWYsIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5nKCkpKTsKLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1p
bHkoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0YW5jZSgpLT5mb250RmFtaWx5
KHNfd2Via2l0U3RhbmRhcmQsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5U3Ry
aW5nKCkpKTsKLQotICAgIFNUQVRJQ19MT0NBTF9TVFJJTkcoc19tb25vc3BhY2UsICJtb25vc3Bh
Y2UiKTsKLSAgICBTVEFUSUNfTE9DQUxfU1RSSU5HKHNfc2VyaWYsICJzZXJpZiIpOwotICAgIFNU
QVRJQ19MT0NBTF9TVFJJTkcoc19zYW5zU2VyaWYsICJzYW5zLXNlcmlmIik7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsYW5ndWFnZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVVNjcmlw
dENvZGUgc2NyaXB0ID0gbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihsYW5ndWFn
ZXNbaV0pOwotICAgICAgICBzZXRGaXhlZEZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkZvbnRJbmZvOjppbnN0YW5jZSgpLT5mb250RmFtaWx5KHNfbW9ub3NwYWNlLCBsYW5ndWFnZXNb
aV0pLCBzY3JpcHQpOwotICAgICAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX3NhbnNTZXJpZiwg
bGFuZ3VhZ2VzW2ldKSwgc2NyaXB0KTsKLSAgICAgICAgc2V0U2VyaWZGb250RmFtaWx5KEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX3Nlcmlm
LCBsYW5ndWFnZXNbaV0pLCBzY3JpcHQpOwotICAgICAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHko
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0YW5jZSgpLT5mb250RmFtaWx5KEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5nKCksIGxhbmd1YWdlc1tpXSks
IHNjcmlwdCk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ibGFja2JlcnJ5L1Njcm9sbGluZ0Nvb3JkaW5hdG9y
QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvYmxhY2tiZXJyeS9TY3JvbGxpbmdDb29yZGluYXRvckJsYWNrQmVycnkuY3BwCShyZXZpc2lv
biAxNjE1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ibGFja2JlcnJ5L1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tCZXJyeS5oIgotCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJMYXllcldlYktp
dFRocmVhZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNjcm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tC
ZXJyeTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5KFBhZ2UqIHBhZ2UpCi0gICAgOiBT
Y3JvbGxpbmdDb29yZGluYXRvcihwYWdlKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yQmxhY2tCZXJyeTo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMo
R3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgaXNDb250YWluZXIpCi17Ci0gICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBzZXQgdGhpcyBmb3IgdGhlIG1haW4gZnJhbWUsIHRoZSBtYWluIGZyYW1lIHdv
dWxkIGJlIHRyZWF0ZWQgbGlrZSBhIHN1YmZyYW1lCi0gICAgLy8gYnkgdGhlIExheWVyUmVuZGVy
ZXIgd2hpY2ggd291bGQgcmVzdWx0IGluIGluY29ycmVjdCBwb3NpdGlvbmluZy4KLSAgICBpZiAo
bV9wYWdlLT5tYWluRnJhbWUoKSAmJiBzY3JvbGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCkpID09IGxheWVyKQotICAgICAgICBpc0NvbnRhaW5lciA9IGZhbHNl
OwotCi0gICAgaWYgKGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpCi0gICAgICAgIGxheWVyLT5wbGF0
Zm9ybUxheWVyKCktPnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhpc0NvbnRh
aW5lcik7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5OjpzZXRMYXll
cklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBib29sIGlzRml4
ZWQpCi17Ci0gICAgaWYgKGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpCi0gICAgICAgIGxheWVyLT5w
bGF0Zm9ybUxheWVyKCktPnNldEZpeGVkUG9zaXRpb24oaXNGaXhlZCk7Ci19Ci0KLXZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5OjpzZXRMYXllckZpeGVkVG9Db250YWluZXJMYXll
ckVkZ2UoR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZml4ZWRUb1RvcCwgYm9vbCBmaXhlZFRv
TGVmdCkKLXsKLSAgICBpZiAoIWxheWVyLT5wbGF0Zm9ybUxheWVyKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGxheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldEZpeGVkVG9Ub3AoZml4ZWRUb1Rv
cCk7Ci0gICAgbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0Rml4ZWRUb0xlZnQoZml4ZWRUb0xl
ZnQpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tCZXJyeTo6ZnJhbWVWaWV3
TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqIGZyYW1lVmlldykKLXsKLSAgICBpZiAoR3JhcGhpY3NM
YXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKSB7
Ci0gICAgICAgIHNjcm9sbExheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldEZyYW1lQ29udGVudHNT
aXplKGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOwotICAgICAgICBzY3JvbGxMYXllci0+cGxh
dGZvcm1MYXllcigpLT5zZXRGcmFtZVZpc2libGVSZWN0KGZyYW1lVmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KCkpOwotICAgIH0KLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvYmxhY2tiZXJyeS9TY3JvbGxpbmdDb29yZGluYXRvckJsYWNrQmVycnkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ibGFja2JlcnJ5L1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNjE1OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9ibGFja2JlcnJ5L1Njcm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tC
ZXJyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgU2Nyb2xsaW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5X2gKLSNk
ZWZpbmUgU2Nyb2xsaW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5X2gKLQotI2luY2x1ZGUgIlNjcm9s
bGluZ0Nvb3JkaW5hdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5IDogcHVibGljIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHsK
LXB1YmxpYzoKLSAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvckJsYWNrQmVycnkoUGFn
ZSopOwotCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUg
dmlldyBoYXMgYmVlbiBsYWlkIG91dC4KLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0
VXBkYXRlZChGcmFtZVZpZXcqKTsKLQotICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xs
aW5nIGNvb3JkaW5hdG9yIGNhbiBrZWVwIGZpeGVkIHBvc2l0aW9uIGxheWVycyBmaXhlZCB0byB0
aGVpcgotICAgIC8vIGNvbnRhaW5lcnMgd2hpbGUgc2Nyb2xsaW5nLgotICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0K
LSAgICAvLyBNYXJrL3VubWFyayBhIGxheWVyIGFzIGEgY29udGFpbmVyIGZvciBmaXhlZCBwb3Np
dGlvbiBsYXllcnMuCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JGaXhl
ZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKTsKLQotICAgIC8vIEF0dGFjaC9k
ZXRhY2ggbGF5ZXIgcG9zaXRpb24gdG8gYW5jZXN0b3IgZml4ZWQgcG9zaXRpb24gY29udGFpbmVy
LgotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBo
aWNzTGF5ZXIqLCBib29sKTsKLQotICAgIC8vIFdoZXRoZXIgdGhlIGxheWVyIGlzIGZpeGVkIHRo
ZSB0b3Agb3IgYm90dG9tIGVkZ2UsIGxlZnQgb3IgcmlnaHQgZWRnZS4KLSAgICB2b2lkIHNldExh
eWVyRml4ZWRUb0NvbnRhaW5lckxheWVyRWRnZShHcmFwaGljc0xheWVyKiwgYm9vbCBmaXhlZFRv
VG9wLCBib29sIGZpeGVkVG9MZWZ0KTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tCZXJyeV9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ibGFja2JlcnJ5L1Njcm9sbGluZ0Nvb3JkaW5hdG9yQmxh
Y2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
YmxhY2tiZXJyeS9TY3JvbGxpbmdDb29yZGluYXRvckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAx
NjE1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ibGFja2JlcnJ5L1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tCZXJyeS5oIgotCi0jaW5jbHVkZSAi
RnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJMYXllcldlYktpdFRo
cmVhZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNjcm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tCZXJy
eTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5KFBhZ2UqIHBhZ2UpCi0gICAgOiBTY3Jv
bGxpbmdDb29yZGluYXRvcihwYWdlKQotewotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
QmxhY2tCZXJyeTo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoR3Jh
cGhpY3NMYXllciogbGF5ZXIsIGJvb2wgaXNDb250YWluZXIpCi17Ci0gICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byBzZXQgdGhpcyBmb3IgdGhlIG1haW4gZnJhbWUsIHRoZSBtYWluIGZyYW1lIHdvdWxk
IGJlIHRyZWF0ZWQgbGlrZSBhIHN1YmZyYW1lCi0gICAgLy8gYnkgdGhlIExheWVyUmVuZGVyZXIg
d2hpY2ggd291bGQgcmVzdWx0IGluIGluY29ycmVjdCBwb3NpdGlvbmluZy4KLSAgICBpZiAobV9w
YWdlLT5tYWluRnJhbWUoKSAmJiBzY3JvbGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2UtPm1haW5G
cmFtZSgpLT52aWV3KCkpID09IGxheWVyKQotICAgICAgICBpc0NvbnRhaW5lciA9IGZhbHNlOwot
Ci0gICAgaWYgKGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpCi0gICAgICAgIGxheWVyLT5wbGF0Zm9y
bUxheWVyKCktPnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhpc0NvbnRhaW5l
cik7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5OjpzZXRMYXllcklz
Rml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBib29sIGlzRml4ZWQp
Ci17Ci0gICAgaWYgKGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpCi0gICAgICAgIGxheWVyLT5wbGF0
Zm9ybUxheWVyKCktPnNldEZpeGVkUG9zaXRpb24oaXNGaXhlZCk7Ci19Ci0KLXZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5OjpzZXRMYXllckZpeGVkVG9Db250YWluZXJMYXllckVk
Z2UoR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZml4ZWRUb1RvcCwgYm9vbCBmaXhlZFRvTGVm
dCkKLXsKLSAgICBpZiAoIWxheWVyLT5wbGF0Zm9ybUxheWVyKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGxheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldEZpeGVkVG9Ub3AoZml4ZWRUb1RvcCk7
Ci0gICAgbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0Rml4ZWRUb0xlZnQoZml4ZWRUb0xlZnQp
OwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tCZXJyeTo6ZnJhbWVWaWV3TGF5
b3V0VXBkYXRlZChGcmFtZVZpZXcqIGZyYW1lVmlldykKLXsKLSAgICBpZiAoR3JhcGhpY3NMYXll
ciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKSB7Ci0g
ICAgICAgIHNjcm9sbExheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldEZyYW1lQ29udGVudHNTaXpl
KGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOwotICAgICAgICBzY3JvbGxMYXllci0+cGxhdGZv
cm1MYXllcigpLT5zZXRGcmFtZVZpc2libGVSZWN0KGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCkpOwotICAgIH0KLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvYmxhY2tiZXJyeS9TY3JvbGxpbmdDb29yZGluYXRvckJsYWNrQmVycnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ibGFja2JlcnJ5L1Njcm9sbGluZ0Nv
b3JkaW5hdG9yQmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNjE1OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9ibGFja2JlcnJ5L1Njcm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tCZXJy
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgU2Nyb2xsaW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5X2gKLSNkZWZp
bmUgU2Nyb2xsaW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5X2gKLQotI2luY2x1ZGUgIlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JCbGFja0JlcnJ5IDogcHVibGljIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHsKLXB1
YmxpYzoKLSAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvckJsYWNrQmVycnkoUGFnZSop
OwotCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUgdmll
dyBoYXMgYmVlbiBsYWlkIG91dC4KLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBk
YXRlZChGcmFtZVZpZXcqKTsKLQotICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xsaW5n
IGNvb3JkaW5hdG9yIGNhbiBrZWVwIGZpeGVkIHBvc2l0aW9uIGxheWVycyBmaXhlZCB0byB0aGVp
cgotICAgIC8vIGNvbnRhaW5lcnMgd2hpbGUgc2Nyb2xsaW5nLgotICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAg
ICAvLyBNYXJrL3VubWFyayBhIGxheWVyIGFzIGEgY29udGFpbmVyIGZvciBmaXhlZCBwb3NpdGlv
biBsYXllcnMuCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBv
c2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKTsKLQotICAgIC8vIEF0dGFjaC9kZXRh
Y2ggbGF5ZXIgcG9zaXRpb24gdG8gYW5jZXN0b3IgZml4ZWQgcG9zaXRpb24gY29udGFpbmVyLgot
ICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNz
TGF5ZXIqLCBib29sKTsKLQotICAgIC8vIFdoZXRoZXIgdGhlIGxheWVyIGlzIGZpeGVkIHRoZSB0
b3Agb3IgYm90dG9tIGVkZ2UsIGxlZnQgb3IgcmlnaHQgZWRnZS4KLSAgICB2b2lkIHNldExheWVy
Rml4ZWRUb0NvbnRhaW5lckxheWVyRWRnZShHcmFwaGljc0xheWVyKiwgYm9vbCBmaXhlZFRvVG9w
LCBib29sIGZpeGVkVG9MZWZ0KTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tCZXJyeV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2JsYWNrYmVycnkvTlBDYWxsYmFja3NCbGFja0JlcnJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvTlBDYWxsYmFja3NCbGFj
a0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTk2KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9i
bGFja2JlcnJ5L05QQ2FsbGJhY2tzQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5QQ2FsbGJhY2tzQmxhY2tCZXJyeS5oIgotCi0j
aW5jbHVkZSAiUGx1Z2luVmlld1ByaXZhdGVCbGFja0JlcnJ5LmgiCi0KLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVB0aHJlYWRNdXRleExvY2tlcjo6UHRo
cmVhZE11dGV4TG9ja2VyKHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgpCi0gICAgOiBtX211dGV4KG11
dGV4KQotewotICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhtX211dGV4KTsKLX0KLQotUHRocmVhZE11
dGV4TG9ja2VyOjp+UHRocmVhZE11dGV4TG9ja2VyKCkKLXsKLSAgICBwdGhyZWFkX211dGV4X3Vu
bG9jayhtX211dGV4KTsKLX0KLQotUHRocmVhZFJlYWRMb2NrZXI6OlB0aHJlYWRSZWFkTG9ja2Vy
KHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaykKLSAgICA6IG1fcndsb2NrKHJ3bG9jaykKLXsKLSAg
ICBwdGhyZWFkX3J3bG9ja19yZGxvY2sobV9yd2xvY2spOwotfQotCi1QdGhyZWFkUmVhZExvY2tl
cjo6flB0aHJlYWRSZWFkTG9ja2VyKCkKLXsKLSAgICBwdGhyZWFkX3J3bG9ja191bmxvY2sobV9y
d2xvY2spOwotfQotCi1QdGhyZWFkV3JpdGVMb2NrZXI6OlB0aHJlYWRXcml0ZUxvY2tlcihwdGhy
ZWFkX3J3bG9ja190KiByd2xvY2spCi0gICAgOiBtX3J3bG9jayhyd2xvY2spCi17Ci0gICAgcHRo
cmVhZF9yd2xvY2tfd3Jsb2NrKG1fcndsb2NrKTsKLX0KLQotUHRocmVhZFdyaXRlTG9ja2VyOjp+
UHRocmVhZFdyaXRlTG9ja2VyKCkKLXsKLSAgICBwdGhyZWFkX3J3bG9ja191bmxvY2sobV9yd2xv
Y2spOwotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotdm9pZCBucFNldEhv
bGVQdW5jaEhhbmRsZXIodm9pZCogaG9sZVB1bmNoRGF0YSkKLXsKLSAgICBPd25QdHI8SG9sZVB1
bmNoRGF0YT4gZGF0YSA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEhvbGVQdW5jaERhdGEqPihob2xl
UHVuY2hEYXRhKSk7Ci0gICAgaWYgKGRhdGEtPmxheWVyKQotICAgICAgICBzdGF0aWNfY2FzdDxQ
bHVnaW5MYXllcldlYktpdFRocmVhZCo+KGRhdGEtPmxheWVyLmdldCgpKS0+c2V0SG9sZVB1bmNo
UmVjdChJbnRSZWN0KGRhdGEtPngsIGRhdGEtPnksIGRhdGEtPncsIGRhdGEtPmgpKTsKLX0KLSNl
bmRpZgotCi0vLyBOUEFQSSBjYWxsYmFjayBmdW5jdGlvbnMKLQotdm9pZCBzZXRWaXNpYmxlUmVj
dHMoTlBQIGluc3RhbmNlLCBjb25zdCBOUFJlY3QgcmVjdHNbXSwgaW50MzJfdCBjb3VudCkKLXsK
LSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNl
LT5uZGF0YSk7Ci0gICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0
UHJpdmF0ZSgpOwotICAgIHZpZXdQcml2YXRlLT5zZXRWaXNpYmxlUmVjdHMocmVjdHMsIGNvdW50
KTsKLX0KLQotdm9pZCBjbGVhclZpc2libGVSZWN0cyhOUFAgaW5zdGFuY2UpCi17Ci0gICAgUGx1
Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEp
OwotICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUo
KTsKLSAgICB2aWV3UHJpdmF0ZS0+Y2xlYXJWaXNpYmxlUmVjdHMoKTsKLX0KLQotdm9pZCBzaG93
S2V5Ym9hcmQoTlBQIGluc3RhbmNlLCBib29sIHZhbHVlKQotewotICAgIFBsdWdpblZpZXcqIHZp
ZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVn
aW5WaWV3UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgdmll
d1ByaXZhdGUtPnNob3dLZXlib2FyZCh2YWx1ZSk7Ci19Ci0KLXZvaWQgcmVxdWVzdEZ1bGxTY3Jl
ZW4oTlBQIGluc3RhbmNlKQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQ
bHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmll
d1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgdmlld1ByaXZhdGUtPnJlcXVlc3RG
dWxsU2NyZWVuKCk7Ci19Ci0KLXZvaWQgZXhpdEZ1bGxTY3JlZW4oTlBQIGluc3RhbmNlKQotewot
ICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2Ut
Pm5kYXRhKTsKLSAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQ
cml2YXRlKCk7Ci0gICAgdmlld1ByaXZhdGUtPmV4aXRGdWxsU2NyZWVuKCk7Ci19Ci0KLXZvaWQg
cmVxdWVzdENlbnRlckZpdFpvb20oTlBQIGluc3RhbmNlKQotewotICAgIFBsdWdpblZpZXcqIHZp
ZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVn
aW5WaWV3UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgdmll
d1ByaXZhdGUtPnJlcXVlc3RDZW50ZXJGaXRab29tKCk7Ci19Ci0KLXZvaWQgbG9ja09yaWVudGF0
aW9uKE5QUCBpbnN0YW5jZSwgYm9vbCBsYW5kc2NhcGUpCi17Ci0gICAgUGx1Z2luVmlldyogdmll
dyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOwotICAgIFBsdWdp
blZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKLSAgICB2aWV3
UHJpdmF0ZS0+bG9ja09yaWVudGF0aW9uKGxhbmRzY2FwZSk7Ci19Ci0KLXZvaWQgdW5sb2NrT3Jp
ZW50YXRpb24oTlBQIGluc3RhbmNlKQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNf
Y2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVnaW5WaWV3UHJpdmF0
ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgdmlld1ByaXZhdGUtPnVu
bG9ja09yaWVudGF0aW9uKCk7Ci19Ci0KLXZvaWQgcHJldmVudElkbGUoTlBQIGluc3RhbmNlLCBi
b29sIHByZXZlbnRJZGxlKQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQ
bHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmll
d1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgdmlld1ByaXZhdGUtPnByZXZlbnRJ
ZGxlKHByZXZlbnRJZGxlKTsKLX0KLQotTlBTdXJmYWNlIGxvY2tCYWNrQnVmZmVyKE5QUCBpbnN0
YW5jZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+
KGluc3RhbmNlLT5uZGF0YSk7Ci0gICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0g
dmlldy0+Z2V0UHJpdmF0ZSgpOwotICAgIHJldHVybiB2aWV3UHJpdmF0ZS0+bG9ja0JhY2tCdWZm
ZXIoKTsKLX0KLQotdm9pZCB1bmxvY2tCYWNrQnVmZmVyKE5QUCBpbnN0YW5jZSkKLXsKLSAgICBQ
bHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0
YSk7Ci0gICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0
ZSgpOwotICAgIHZpZXdQcml2YXRlLT51bmxvY2tCYWNrQnVmZmVyKCk7Ci19Ci0KLU5QU3VyZmFj
ZSBsb2NrUmVhZEZyb250QnVmZmVyKE5QUCBpbnN0YW5jZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2
aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7Ci0gICAgUGx1
Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOwotICAgIHJl
dHVybiB2aWV3UHJpdmF0ZS0+bG9ja1JlYWRGcm9udEJ1ZmZlcigpOwotfQotCi12b2lkIHVubG9j
a1JlYWRGcm9udEJ1ZmZlcihOUFAgaW5zdGFuY2UpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9
IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOwotICAgIFBsdWdpblZp
ZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKLSAgICB2aWV3UHJp
dmF0ZS0+dW5sb2NrUmVhZEZyb250QnVmZmVyKCk7Ci19Ci0KLXZvaWQgc3dhcEJ1ZmZlcnMoTlBQ
IGluc3RhbmNlKQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5W
aWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmlld1ByaXZh
dGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgdmlld1ByaXZhdGUtPnN3YXBCdWZmZXJzKCk7
Ci19Ci0KLWJvb2wgY3JlYXRlQnVmZmVycyhOUFAgaW5zdGFuY2UsIE5QU3VyZmFjZUZvcm1hdCBm
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0g
c3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7Ci0gICAgUGx1Z2luVmll
d1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOwotICAgIHJldHVybiB2
aWV3UHJpdmF0ZS0+Y3JlYXRlQnVmZmVycyhmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1i
b29sIGRlc3Ryb3lCdWZmZXJzKE5QUCBpbnN0YW5jZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3
ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7Ci0gICAgUGx1Z2lu
Vmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOwotICAgIHJldHVy
biB2aWV3UHJpdmF0ZS0+ZGVzdHJveUJ1ZmZlcnMoKTsKLX0KLQotYm9vbCByZXNpemVCdWZmZXJz
KE5QUCBpbnN0YW5jZSwgTlBTdXJmYWNlRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4o
aW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2
aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgcmV0dXJuIHZpZXdQcml2YXRlLT5yZXNpemVCdWZmZXJz
KGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgc2V0SG9sZVB1bmNoKE5QUCBpbnN0
YW5jZSwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgUGx1Z2lu
VmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOwot
ICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsK
LSAgICB2aWV3UHJpdmF0ZS0+c2V0SG9sZVB1bmNoKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQot
Ci1OUENhbGxiYWNrcyBzX05wQ2FsbGJhY2tzID0gewotICAgIHNldFZpc2libGVSZWN0cywKLSAg
ICBjbGVhclZpc2libGVSZWN0cywKLSAgICBzaG93S2V5Ym9hcmQsCi0gICAgcmVxdWVzdEZ1bGxT
Y3JlZW4sCi0gICAgZXhpdEZ1bGxTY3JlZW4sCi0gICAgcmVxdWVzdENlbnRlckZpdFpvb20sCi0g
ICAgbG9ja09yaWVudGF0aW9uLAotICAgIHVubG9ja09yaWVudGF0aW9uLAotICAgIHByZXZlbnRJ
ZGxlLAotICAgIGxvY2tCYWNrQnVmZmVyLAotICAgIHVubG9ja0JhY2tCdWZmZXIsCi0gICAgbG9j
a1JlYWRGcm9udEJ1ZmZlciwKLSAgICB1bmxvY2tSZWFkRnJvbnRCdWZmZXIsCi0gICAgc3dhcEJ1
ZmZlcnMsCi0gICAgY3JlYXRlQnVmZmVycywKLSAgICBkZXN0cm95QnVmZmVycywKLSAgICByZXNp
emVCdWZmZXJzLAotICAgIHNldEhvbGVQdW5jaAotfTsKLQotfSAvLyBOYW1lc3BhY2UgV2ViQ29y
ZQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvTlBDYWxsYmFja3NC
bGFja0JlcnJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2Jl
cnJ5L05QQ2FsbGJhY2tzQmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNjE1OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvTlBDYWxsYmFja3NCbGFja0JlcnJ5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaWZuZGVmIE5QQ2FsbGJhY2tzQmxhY2tCZXJyeV9oCi0jZGVmaW5lIE5QQ2Fs
bGJhY2tzQmxhY2tCZXJyeV9oCi0KLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSA8
cHRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBQdGhyZWFkTXV0ZXhM
b2NrZXIgewotICAgIFB0aHJlYWRNdXRleExvY2tlcihwdGhyZWFkX211dGV4X3QqKTsKLSAgICB+
UHRocmVhZE11dGV4TG9ja2VyKCk7Ci0KLSAgICBwdGhyZWFkX211dGV4X3QqIG1fbXV0ZXg7Ci19
OwotCi1zdHJ1Y3QgUHRocmVhZFJlYWRMb2NrZXIgewotICAgIFB0aHJlYWRSZWFkTG9ja2VyKHB0
aHJlYWRfcndsb2NrX3QqKTsKLSAgICB+UHRocmVhZFJlYWRMb2NrZXIoKTsKLQotICAgIHB0aHJl
YWRfcndsb2NrX3QqIG1fcndsb2NrOwotfTsKLQotc3RydWN0IFB0aHJlYWRXcml0ZUxvY2tlciB7
Ci0gICAgUHRocmVhZFdyaXRlTG9ja2VyKHB0aHJlYWRfcndsb2NrX3QqKTsKLSAgICB+UHRocmVh
ZFdyaXRlTG9ja2VyKCk7Ci0KLSAgICBwdGhyZWFkX3J3bG9ja190KiBtX3J3bG9jazsKLX07Ci0K
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1zdHJ1Y3QgSG9sZVB1bmNoRGF0YSB7
Ci0gICAgaW50IHgsIHk7Ci0gICAgaW50IHcsIGg7Ci0gICAgUmVmUHRyPFBsYXRmb3JtTGF5ZXI+
IGxheWVyOwotfTsKLQotdm9pZCBucFNldEhvbGVQdW5jaEhhbmRsZXIodm9pZCogaG9sZVB1bmNo
RGF0YSk7Ci0jZW5kaWYKLQotLy8gU3RhdGljIE5QQVBJIENhbGxiYWNrcwotCi12b2lkIHNldFZp
c2libGVSZWN0cyhOUFAsIGNvbnN0IE5QUmVjdCByZWN0c1tdLCBpbnQzMl90IGNvdW50KTsKLXZv
aWQgY2xlYXJWaXNpYmxlUmVjdHMoTlBQKTsKLXZvaWQgc2hvd0tleWJvYXJkKE5QUCwgYm9vbCB2
YWx1ZSk7Ci12b2lkIHJlcXVlc3RGdWxsU2NyZWVuKE5QUCk7Ci12b2lkIGV4aXRGdWxsU2NyZWVu
KE5QUCk7Ci12b2lkIHJlcXVlc3RDZW50ZXJGaXRab29tKE5QUCk7Ci12b2lkIGxvY2tPcmllbnRh
dGlvbihOUFAsIGJvb2wgbGFuZHNjYXBlKTsKLXZvaWQgdW5sb2NrT3JpZW50YXRpb24oTlBQKTsK
LXZvaWQgcHJldmVudElkbGUoTlBQLCBib29sIHByZXZlbnRJZGxlKTsKLU5QU3VyZmFjZSBsb2Nr
QmFja0J1ZmZlcihOUFApOwotdm9pZCB1bmxvY2tCYWNrQnVmZmVyKE5QUCk7Ci1OUFN1cmZhY2Ug
bG9ja1JlYWRGcm9udEJ1ZmZlcihOUFApOwotdm9pZCB1bmxvY2tSZWFkRnJvbnRCdWZmZXIoTlBQ
KTsKLXZvaWQgc3dhcEJ1ZmZlcnMoTlBQKTsKLWJvb2wgY3JlYXRlQnVmZmVycyhOUFAsIE5QU3Vy
ZmFjZUZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLWJvb2wgZGVzdHJveUJ1ZmZlcnMo
TlBQKTsKLWJvb2wgcmVzaXplQnVmZmVycyhOUFAsIE5QU3VyZmFjZUZvcm1hdCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKLXZvaWQgc2V0SG9sZVB1bmNoKE5QUCwgaW50IHgsIGludCB5LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpOwotCi1leHRlcm4gTlBDYWxsYmFja3Mgc19OcENhbGxiYWNrczsK
LQotfSAvLyBOYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5QYWNrYWdlQmxhY2tCZXJyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblBhY2thZ2VCbGFj
a0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTk2KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9i
bGFja2JlcnJ5L1BsdWdpblBhY2thZ2VCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwyNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0KLSNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQ
bHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0KLSNpbmNsdWRlIDxk
bGZjbi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0cmluZ0hhc2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
ZXh0ZXJuIGludCBlcnJubzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIG5wbk1lbUZy
ZWUodm9pZCogcHRyKQotewotICAgIC8vIFdlIGNvdWxkIHVzZSBmYXN0RnJlZSBoZXJlLCBidXQg
dGhlcmUgbWlnaHQgYmUgcGx1Zy1pbnMgdGhhdCBtaXggTlBOX01lbUFsbG9jL05QTl9NZW1GcmVl
IHdpdGggbWFsbG9jIGFuZCBmcmVlLAotICAgIC8vIHNvIGhhdmluZyB0aGVtIGJlIGVxdWl2YWxl
bnQgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYS4KLSAgICBmcmVlKHB0cik7Ci19Ci0KLWJvb2wgUGx1
Z2luUGFja2FnZTo6ZXF1YWwoUGx1Z2luUGFja2FnZSBjb25zdCYgYSwgUGx1Z2luUGFja2FnZSBj
b25zdCYgYikKLXsKLSAgICBpZiAoYS5tX25hbWUgIT0gYi5tX25hbWUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChhLm1fZGVzY3JpcHRpb24gIT0gYi5tX2Rlc2NyaXB0aW9uKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS5tX21pbWVUb0V4dGVuc2lvbnMuc2l6
ZSgpICE9IGIubV9taW1lVG9FeHRlbnNpb25zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0g
YS5tX21pbWVUb0V4dGVuc2lvbnMuZW5kKCkua2V5cygpOwotICAgIGZvciAoTUlNRVRvRXh0ZW5z
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBhLm1fbWltZVRvRXh0ZW5zaW9ucy5i
ZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghYi5tX21pbWVU
b0V4dGVuc2lvbnMuY29udGFpbnMoKml0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaElu
Zm8oKQotewotICAgIGlmICghbG9hZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBGSVhNRTogRmluZCBhIGJldHRlciB3YXkgdG8gZ2V0IGFyb3VuZCB0aGUgZmV0Y2hpbmZvIGxv
YWQuCi0gICAgLy8gV2UgYXJlIGZldGNoaW5nIHRoZSBpbmZvLiBUZWNobmljYWxseSB3ZSBoYXZl
IG5vdCBsb2FkZWQgdGhlIHBsdWdpbi4gUGx1Z2luVmlldzo6SW5pdCB3aWxsIGxvYWQgdGhlIHBs
dWdpbiBzbyBkZWNyZW1lbnQgdGhlIGNvdW50ZXIKLSAgICBtX2xvYWRDb3VudC0tOwotCi0gICAg
TlBfR2V0TUlNRURlc2NyaXB0aW9uRnVuY1B0ciBnZXREZXNjcmlwdGlvbiA9IChOUF9HZXRNSU1F
RGVzY3JpcHRpb25GdW5jUHRyKSBkbHN5bShtX21vZHVsZSwgIk5QX0dldE1JTUVEZXNjcmlwdGlv
biIpOwotICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgZ2V0VmFsdWUgPSAoTlBQX0dldFZhbHVlUHJv
Y1B0cikgZGxzeW0obV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIpOwotCi0gICAgaWYgKCFnZXREZXNj
cmlwdGlvbiB8fCAhZ2V0VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNoYXIq
IGJ1ZiA9IDA7Ci0gICAgTlBFcnJvciBlcnIgPSBnZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0
cmluZywgKHZvaWQgKikgJmJ1Zik7Ci0gICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9uYW1lID0gYnVmOwotCi0gICAgZXJyID0gZ2V0
VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCAodm9pZCAqKSAmYnVmKTsKLSAg
ICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBtX2Rlc2NyaXB0aW9uID0gYnVmOwotICAgIGRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVz
Y3JpcHRpb24oKTsKLQotICAgIFN0cmluZyBzID0gZ2V0RGVzY3JpcHRpb24oKTsKLSAgICBWZWN0
b3I8U3RyaW5nPiB0eXBlczsKLSAgICBzLnNwbGl0KFVDaGFyKCc7JyksIGZhbHNlLCB0eXBlcyk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIFZlY3RvcjxTdHJpbmc+IG1pbWU7Ci0gICAgICAgIHR5cGVzW2ldLnNwbGl0KFVDaGFyKCc6
JyksIHRydWUsIG1pbWUpOwotICAgICAgICBpZiAobWltZS5zaXplKCkgPiAwKSB7Ci0gICAgICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zOwotICAgICAgICAgICAgaWYgKG1pbWUuc2l6
ZSgpID4gMSkKLSAgICAgICAgICAgICAgICBtaW1lWzFdLnNwbGl0KFVDaGFyKCcsJyksIGZhbHNl
LCBleHRlbnNpb25zKTsKLSAgICAgICAgICAgIGRldGVybWluZVF1aXJrcyhtaW1lWzBdKTsKLSAg
ICAgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZVswXSwgZXh0ZW5zaW9ucyk7Ci0g
ICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAyKQotICAgICAgICAgICAgICAgIG1fbWltZVRv
RGVzY3JpcHRpb25zLmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5QYWNrYWdlOjpzaXRl
c1dpdGhEYXRhKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBzaXRlczsKLSAgICB0cnlHZXRTaXRl
c1dpdGhEYXRhKHNpdGVzKTsKLQotICAgIHJldHVybiBzaXRlczsKLX0KLQotYm9vbCBQbHVnaW5Q
YWNrYWdlOjpjbGVhclNpdGVEYXRhKGNvbnN0IFN0cmluZyYgc2l0ZSwgdWludDY0X3QgZmxhZ3Ms
IHVpbnQ2NF90IG1heEFnZSkKLXsKLSAgICBib29sIHJlc3VsdCA9IHRyeUNsZWFyU2l0ZURhdGEo
c2l0ZSwgZmxhZ3MsIG1heEFnZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFBs
dWdpblBhY2thZ2U6OnRyeUdldFNpdGVzV2l0aERhdGEoVmVjdG9yPFN0cmluZz4mIHNpdGVzKQot
ewotICAgIGlmICghbG9hZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhN
RTogRmluZCBhIGJldHRlciB3YXkgdG8gZW5zdXJlIHRoZSBwbHVnaW4gaXMgbG9hZGVkLgotICAg
IC8vIFBsdWdpblZpZXc6OkluaXQgd2lsbCBsb2FkIHRoZSBwbHVnaW4gc28gZGVjcmVtZW50IHRo
ZSBjb3VudGVyCi0gICAgbV9sb2FkQ291bnQtLTsKLQotICAgIC8vIENoZWNrIGlmIHRoZSBwbHVn
LWluIHN1cHBvcnRzIE5QUF9HZXRTaXRlc1dpdGhEYXRhLgotICAgIGlmICghbV9wbHVnaW5GdW5j
cy5nZXRzaXRlc3dpdGhkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjaGFyKiog
c2l0ZUFycmF5ID0gbV9wbHVnaW5GdW5jcy5nZXRzaXRlc3dpdGhkYXRhKCk7Ci0KLSAgICAvLyBU
aGVyZSB3ZXJlIG5vIHNpdGVzIHdpdGggZGF0YS4KLSAgICBpZiAoIXNpdGVBcnJheSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgc2l0ZUFycmF5W2ldOyArK2kp
IHsKLSAgICAgICAgY2hhciogc2l0ZSA9IHNpdGVBcnJheVtpXTsKLQotICAgICAgICBTdHJpbmcg
c2l0ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoc2l0ZSk7Ci0gICAgICAgIGlmICghc2l0ZVN0
cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHNpdGVzLmFwcGVuZChzaXRlU3RyaW5nKTsKLQot
ICAgICAgICBucG5NZW1GcmVlKHNpdGUpOwotICAgIH0KLQotICAgIG5wbk1lbUZyZWUoc2l0ZUFy
cmF5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjp0cnlDbGVh
clNpdGVEYXRhKGNvbnN0IFN0cmluZyYgc2l0ZSwgdWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1h
eEFnZSkKLXsKLSAgICBpZiAoIWxvYWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGVuc3VyZSB0aGUgcGx1Z2luIGlzIGxvYWRl
ZC4KLSAgICAvLyBQbHVnaW5WaWV3OjpJbml0IHdpbGwgbG9hZCB0aGUgcGx1Z2luIHNvIGRlY3Jl
bWVudCB0aGUgY291bnRlcgotICAgIG1fbG9hZENvdW50LS07Ci0KLSAgICAvLyBDaGVjayBpZiB0
aGUgcGx1Zy1pbiBzdXBwb3J0cyBOUFBfQ2xlYXJTaXRlRGF0YS4KLSAgICBpZiAoIW1fcGx1Z2lu
RnVuY3MuY2xlYXJzaXRlZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmlu
ZyBzaXRlU3RyaW5nOwotICAgIGlmICghc2l0ZS5pc051bGwoKSkKLSAgICAgICAgc2l0ZVN0cmlu
ZyA9IHNpdGUudXRmOCgpOwotCi0gICAgcmV0dXJuIG1fcGx1Z2luRnVuY3MuY2xlYXJzaXRlZGF0
YShzaXRlU3RyaW5nLmRhdGEoKSwgZmxhZ3MsIG1heEFnZSkgPT0gTlBFUlJfTk9fRVJST1I7Ci19
Ci0KLXVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdAotewotICAgIGNvbnN0IHVu
c2lnbmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICBtX25hbWUuaW1wbCgpLT5oYXNoKCksCi0g
ICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCi0gICAgICAgIG1fbWltZVRvRXh0
ZW5zaW9ucy5zaXplKCksCi0gICAgICAgIG1fcGF0aC5pbXBsKCktPmhhc2goKQotICAgIH07Ci0K
LSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hDb2Rlcykg
LyBzaXplb2YoVUNoYXIpKTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKLXsKLSAg
ICBpZiAobV9pc0xvYWRlZCkgewotICAgICAgICBtX2xvYWRDb3VudCsrOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkp
IHsKLSAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVy
LnN0b3AoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoIW1fbG9hZENvdW50KTsKLSAg
ICAgICAgbV9tb2R1bGUgPSBkbG9wZW4obV9wYXRoLnV0ZjgoKS5kYXRhKCksIFJUTERfTEFaWSk7
Ci0gICAgfQotCi0gICAgaWYgKCFtX21vZHVsZSkgewotICAgICAgICBMT0coUGx1Z2lucywgIiVz
IG5vdCBsb2FkZWQgKCVzKSIsIG1fcGF0aC51dGY4KCkuZGF0YSgpLCBzdHJlcnJvcihlcnJubykp
OwotICAgICAgICBwcmludGYoIlBsdWdpblBhY2thZ2U6OmxvYWQoKSAtICVzIG5vdCBsb2FkZWQg
KCVzKSIsIG1fcGF0aC51dGY4KCkuZGF0YSgpLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9pc0xvYWRlZCA9IHRydWU7Ci0KLSAgICBOUF9J
bml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplOwotICAgIE5QRXJyb3IgbnBFcnI7Ci0KLSAg
ICBOUF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKWRsc3ltKG1fbW9kdWxlLCAi
TlBfSW5pdGlhbGl6ZSIpOwotICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQ
dHIpZGxzeW0obV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOwotCi0gICAgaWYgKCFOUF9Jbml0aWFs
aXplIHx8ICFtX05QUF9TaHV0ZG93bikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIG1lbXNl
dCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKLSAgICBtX3BsdWdp
bkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7Ci0KLSAgICBpbml0aWFsaXplQnJv
d3NlckZ1bmNzKCk7Ci0KLSAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNz
LCAgJm1fcGx1Z2luRnVuY3MpOwotCi0gICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQot
ICAgICAgICBnb3RvIGFib3J0OwotCi0gICAgbV9sb2FkQ291bnQgPSAxOwotICAgIHJldHVybiB0
cnVlOwotCi1hYm9ydDoKLSAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLXVpbnQxNl90IFBs
dWdpblBhY2thZ2U6Ok5QVmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE5QVkVSU19IQVNf
UExVR0lOX1RIUkVBRF9BU1lOQ19DQUxMOwotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3
QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFj
a2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTk2KQorKysgU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMjI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KLSAq
IENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdp
blZpZXcuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRXZlbnQu
aCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MUGx1
Z0luRWxlbWVudC5oIgotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTW91c2VFdmVu
dC5oIgotI2luY2x1ZGUgIk5QQ2FsbGJhY2tzQmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5jbHVkZSAiUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRl
ICJQbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVG91Y2hFdmVudC5oIgotI2luY2x1
ZGUgIlRvdWNoTGlzdC5oIgotI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJucHJ1
bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9t
ZUNsaWVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmgiCi0jZW5kaWYK
LQotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8Qmxh
Y2tCZXJyeVBsYXRmb3JtSW50UmVjdFJlZ2lvbi5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0
Zm9ybVdpbmRvdy5oPgotCi0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxzeXMva2V5Y29kZXMuaD4KLSNpbmNsdWRl
IDx2ZWN0b3I+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1jb25zdCB1bnNpZ25l
ZCBVbmluaXRpYWxpemVkQ29vcmRpbmF0ZSA9IDB4ZmZmZmZmZmY7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIE5QUmVjdCB0b05QUmVjdChjb25zdCBU
JiByZWN0KQotewotICAgIE5QUmVjdCBucFJlY3Q7Ci0gICAgbnBSZWN0LnRvcCA9IHJlY3QueSgp
OwotICAgIG5wUmVjdC5sZWZ0ID0gcmVjdC54KCk7Ci0gICAgbnBSZWN0LmJvdHRvbSA9IHJlY3Qu
eSgpICsgcmVjdC5oZWlnaHQoKTsKLSAgICBucFJlY3QucmlnaHQgPSByZWN0LngoKSArIHJlY3Qu
d2lkdGgoKTsKLSAgICByZXR1cm4gbnBSZWN0OwotfQotCi11c2luZyBKU0M6OkV4ZWNTdGF0ZTsK
LXVzaW5nIEpTQzo6SW50ZXJwcmV0ZXI7Ci11c2luZyBKU0M6OkpTTG9jazsKLXVzaW5nIEpTQzo6
SlNPYmplY3Q7Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgV1RGOwot
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVn
aW5XaWRnZXQoKQotewotICAgIGlmICghcGFyZW50KCkgfHwgIW1fcHJpdmF0ZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKLSAgICBGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKTsKLQotICAgIEludFJlY3Qg
b2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKLSAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0g
bV9jbGlwUmVjdDsKLQotICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250
ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXplKCkp
OwotCi0gICAgU2Nyb2xsVmlldyogdGhlUm9vdCA9IHJvb3QoKTsKLSAgICBpZiAoIXRoZVJvb3Qp
Ci0gICAgICAgIHJldHVybjsgLy8gQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKSBzaG91
bGQgcHJldmVudCB0aGlzIGJ1dCBjaGVjayBqdXN0IGluIGNhc2UKLSAgICAvLyBNYXAgcmVjdCB0
byBjb250ZW50IGNvb3JkaW5hdGUgc3BhY2Ugb2YgbWFpbiBmcmFtZS4KLSAgICBtX3dpbmRvd1Jl
Y3QubW92ZSh0aGVSb290LT5zY3JvbGxPZmZzZXQoKSk7Ci0KLSAgICBtX2NsaXBSZWN0ID0gY2Fs
Y3VsYXRlQ2xpcFJlY3QoKTsKLQotICAgIC8vIE5vdGlmeSB0aGUgcGx1Z2luIGlmIGl0IG1heSBv
ciBtYXkgbm90IGJlIG9uL29mZnNjcmVlbi4KLSAgICBoYW5kbGVTY3JvbGxFdmVudCgpOwotCi0g
ICAgYm9vbCB6b29tRmFjdG9yQ2hhbmdlZCA9ICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCop
bV9ucFdpbmRvdy53c19pbmZvKS0+em9vbUZhY3RvcgotICAgICAgICAhPSBmcmFtZVZpZXctPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPmN1cnJlbnRab29tRmFjdG9yKCk7Ci0K
LSAgICBpZiAoIXpvb21GYWN0b3JDaGFuZ2VkICYmIG1fd2luZG93UmVjdCA9PSBvbGRXaW5kb3dS
ZWN0ICYmIG1fY2xpcFJlY3QgPT0gb2xkQ2xpcFJlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIERvIG5vdCBjYWxsIHNldE5QV2luZG93SWZOZWVkZWQgaW1tZWRpYXRlbHksIHdpbGwgYmUg
Y2FsbGVkIG9uIHBhaW50KCkuCi0gICAgbV9wcml2YXRlLT5tX2hhc1BlbmRpbmdHZW9tZXRyeUNo
YW5nZSA9IHRydWU7Ci0KLSAgICAvLyAoaSkgSW4gb3JkZXIgdG8gbW92ZS9yZXNpemUgdGhlIHBs
dWdpbiB3aW5kb3cgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUKLSAgICAvLyByZXN0IG9mIGZyYW1l
IGR1cmluZyBlLmcuIHNjcm9sbGluZywgd2Ugc2V0IHRoZSB3aW5kb3cgZ2VvbWV0cnkKLSAgICAv
LyBpbiB0aGUgcGFpbnQoKSBmdW5jdGlvbiwgYnV0IGFzIHBhaW50KCkgaXNuJ3QgY2FsbGVkIHdo
ZW4gdGhlCi0gICAgLy8gcGx1Z2luIHdpbmRvdyBpcyBvdXRzaWRlIHRoZSBmcmFtZSB3aGljaCBj
YW4gYmUgY2F1c2VkIGJ5IGEKLSAgICAvLyBzY3JvbGwsIHdlIG5lZWQgdG8gbW92ZS9yZXNpemUg
aW1tZWRpYXRlbHkuCi0gICAgLy8gKGlpKSBJZiB3ZSBhcmUgcnVubmluZyBsYXlvdXQgdGVzdHMg
ZnJvbSBEUlQsIHBhaW50KCkgd29uJ3QgZXZlciBnZXQgY2FsbGVkCi0gICAgLy8gc28gd2UgbmVl
ZCB0byBjYWxsIHNldE5QV2luZG93SWZOZWVkZWQoKSBpZiB3aW5kb3cgZ2VvbWV0cnkgaGFzIGNo
YW5nZWQuCi0gICAgaWYgKG1fY2xpcFJlY3QuaXNFbXB0eSgpIHx8IChwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpICYmIChtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9
IG9sZENsaXBSZWN0IHx8IHpvb21GYWN0b3JDaGFuZ2VkKSkpCi0gICAgICAgIHNldE5QV2luZG93
SWZOZWVkZWQoKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBnZXQgcmVwYWludGVkIGFmdGVyd2Fy
ZHMuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBkb3dud2FyZAotICAgIC8vIHNjcm9sbGluZyB0byBt
b3ZlIHRoZSBwbHVnaW4gd2lkZ2V0IHByb3Blcmx5LgotICAgIGludmFsaWRhdGUoKTsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCi17Ci0gICAgaWYgKCFtX3By
aXZhdGUgfHwgbV9wcml2YXRlLT5tX2lzRm9jdXNlZCA9PSBmb2N1c2VkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBwbGF0Zm9ybVdpZGdl
dCgpKTsKLSAgICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOwotCi0gICAgaWYgKGZvY3VzZWQp
Ci0gICAgICAgIGhhbmRsZUZvY3VzSW5FdmVudCgpOwotICAgIGVsc2UKLSAgICAgICAgaGFuZGxl
Rm9jdXNPdXRFdmVudCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNob3coKQotewotICAgIHNl
dFNlbGZWaXNpYmxlKHRydWUpOwotICAgIFdpZGdldDo6c2hvdygpOwotICAgIHVwZGF0ZVBsdWdp
bldpZGdldCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhpZGUoKQotewotICAgIHNldFNlbGZW
aXNpYmxlKGZhbHNlKTsKLSAgICBXaWRnZXQ6OmhpZGUoKTsKLSAgICB1cGRhdGVQbHVnaW5XaWRn
ZXQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVCdWZmZXIoY29uc3QgSW50UmVjdCYg
YnVmZmVyUmVjdCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gVXBkYXRlIHRoZSB6b29tIGZhY3RvciBoZXJlLCBpdCBoYXBwZW5zIHJpZ2h0IGJlZm9y
ZSBzZXROUFdpbmRvd0lmTmVlZGVkCi0gICAgLy8gZW5zdXJpbmcgdGhhdCB0aGUgcGx1Z2luIGhh
cyBldmVyeSBvcHBvcnR1bml0eSB0byBnZXQgdGhlIHpvb20gZmFjdG9yIGJlZm9yZQotICAgIC8v
IGl0IHBhaW50cyBhbnl0aGluZy4KLSAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0Zy
YW1lVmlldyhwYXJlbnQoKSkpCi0gICAgICAgIG1fcHJpdmF0ZS0+c2V0Wm9vbUZhY3RvcihmcmFt
ZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPmN1cnJlbnRab29tRmFj
dG9yKCkpOwotCi0gICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwotCi0gICAgLy8gQnVpbGQgYW5k
IGRpc3BhdGNoIGFuIGV2ZW50IHRvIHRoZSBwbHVnaW4gdG8gbm90aWZ5IGl0IHdlIGFyZSBhYm91
dCB0byBkcmF3IHdoYXRldmVyCi0gICAgLy8gaXMgaW4gdGhlIGZyb250IGJ1ZmZlci4gVGhpcyBp
cyBpdCdzIG9wcG9ydHVuaXR5IHRvIGRvIGEgc3dhcC4KLSAgICBJbnRSZWN0IGV4cG9zZWRSZWN0
KGJ1ZmZlclJlY3QpOwotICAgIGV4cG9zZWRSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50
KDAsIDApLCBmcmFtZVJlY3QoKS5zaXplKCkpKTsKLQotICAgIC8vIE9ubHkgYXNrIHRoZSBwbHVn
aW4gdG8gZHJhdyBpZiB0aGUgZXhwb3NlZCByZWN0IHdhcyBleHBsaWNpdGx5IGludmFsaWRhdGVk
Ci0gICAgLy8gYnkgdGhlIHBsdWdpbi4KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVj
dFJlZ2lvbiBleHBvc2VkUmVnaW9uID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdp
b246OmludGVyc2VjdFJlZ2lvbnMobV9wcml2YXRlLT5tX2ludmFsaWRhdGVSZWdpb24sIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0KGV4cG9zZWRSZWN0KSk7Ci0gICAgaWYgKCFleHBvc2Vk
UmVnaW9uLmlzRW1wdHkoKSkgewotICAgICAgICBtX3ByaXZhdGUtPm1faW52YWxpZGF0ZVJlZ2lv
biA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMo
bV9wcml2YXRlLT5tX2ludmFsaWRhdGVSZWdpb24sIGV4cG9zZWRSZWdpb24pOwotICAgICAgICBz
dGQ6OnZlY3RvcjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdD4gZXhwb3NlZFJlY3RzID0g
ZXhwb3NlZFJlZ2lvbi5yZWN0cygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXhwb3NlZFJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBOUERyYXdFdmVudCBkcmF3
OwotICAgICAgICAgICAgTlBSZWN0IHRlbXBSZWN0ID0gdG9OUFJlY3QoZXhwb3NlZFJlY3RzLmF0
KGkpKTsKLSAgICAgICAgICAgIGRyYXcucGx1Z2luUmVjdCA9IHRvTlBSZWN0KG1fd2luZG93UmVj
dCk7Ci0gICAgICAgICAgICBkcmF3LmNsaXBSZWN0ID0gdG9OUFJlY3QobV9jbGlwUmVjdCk7Ci0g
ICAgICAgICAgICBkcmF3LmRyYXdSZWN0ID0gJnRlbXBSZWN0OwotICAgICAgICAgICAgZHJhdy5k
cmF3UmVjdENvdW50ID0gMTsKLSAgICAgICAgICAgIGRyYXcuem9vbUZhY3RvciA9ICgoTlBTZXRX
aW5kb3dDYWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+em9vbUZhY3RvcjsKLQot
ICAgICAgICAgICAgTlBFdmVudCBucEV2ZW50OwotICAgICAgICAgICAgbnBFdmVudC50eXBlID0g
TlBfRHJhd0V2ZW50OwotICAgICAgICAgICAgbnBFdmVudC5kYXRhID0gJmRyYXc7Ci0KLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBSZXR1cm4gZWFybHkgaWYgdGhpcyBmYWlscz8gT3IganVzdCByZXBh
aW50PwotICAgICAgICAgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSB8fCAhbV9pc1N0
YXJ0ZWQpIHsKLSAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSB0aGUgem9vbSBmYWN0b3Ig
aGVyZSwgaXQgaGFwcGVucyByaWdodCBiZWZvcmUgc2V0TlBXaW5kb3dJZk5lZWRlZAotICAgIC8v
IGVuc3VyaW5nIHRoYXQgdGhlIHBsdWdpbiBoYXMgZXZlcnkgb3Bwb3J0dW5pdHkgdG8gZ2V0IHRo
ZSB6b29tIGZhY3RvciBiZWZvcmUKLSAgICAvLyBpdCBwYWludHMgYW55dGhpbmcuCi0gICAgaWYg
KEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdG9GcmFtZVZpZXcocGFyZW50KCkpKQotICAgICAgICBt
X3ByaXZhdGUtPnNldFpvb21GYWN0b3IoZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpLT5jdXJyZW50Wm9vbUZhY3RvcigpKTsKLQotICAgIGlmIChjb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldE5QV2luZG93SWZO
ZWVkZWQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV9w
cml2YXRlLT5tX3BsYXRmb3JtTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAg
Ly8gQnVpbGQgYW5kIGRpc3BhdGNoIGFuIGV2ZW50IHRvIHRoZSBwbHVnaW4gdG8gbm90aWZ5IGl0
IHdlIGFyZSBhYm91dCB0byBkcmF3IHdoYXRldmVyCi0gICAgLy8gaXMgaW4gdGhlIGZyb250IGJ1
ZmZlci4gVGhpcyBpcyBpdCdzIG9wcG9ydHVuaXR5IHRvIGRvIGEgc3dhcC4KLSAgICBJbnRSZWN0
IHJlY3RDbGlwKHJlY3QpOwotICAgIHJlY3RDbGlwLmludGVyc2VjdChmcmFtZVJlY3QoKSk7Ci0K
LSAgICBJbnRSZWN0IGV4cG9zZWRSZWN0KHJlY3RDbGlwKTsKLSAgICBleHBvc2VkUmVjdC5tb3Zl
KC1mcmFtZVJlY3QoKS54KCksIC1mcmFtZVJlY3QoKS55KCkpOwotCi0gICAgdXBkYXRlQnVmZmVy
KGV4cG9zZWRSZWN0KTsKLX0KLQotCi1ib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoRnVsbFNjcmVl
bk5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChtX3ByaXZhdGUtPm1faXNGdWxsU2NyZWVuKTsK
LSAgICByZXR1cm4gZGlzcGF0Y2hOUEV2ZW50KGV2ZW50KTsKLX0KLQotLy8gRklYTUU6IFVuaWZ5
IGFjcm9zcyBwb3J0cy4KLWJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQm
IGV2ZW50KQotewotICAgIGlmICghbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUGx1Z2luVmlldzo6c2V0Q3Vy
cmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOwotCi0gICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwotCi0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0KLSAgICByZXR1
cm4gYWNjZXB0ZWQ7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50KiBldmVudCkKLXsKLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgTlBLZXli
b2FyZEV2ZW50IGtleUV2ZW50OwotICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCAqcGxh
dGZvcm1LZXlFdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpOwotCi0gICAga2V5RXZlbnQubW9kaWZp
ZXJzID0gMDsKLQotICAgIGlmIChwbGF0Zm9ybUtleUV2ZW50LT5zaGlmdEtleSgpKQotICAgICAg
ICBrZXlFdmVudC5tb2RpZmllcnMgfD0gS0VZTU9EX1NISUZUOwotCi0gICAgaWYgKHBsYXRmb3Jt
S2V5RXZlbnQtPmN0cmxLZXkoKSkKLSAgICAgICAga2V5RXZlbnQubW9kaWZpZXJzIHw9IEtFWU1P
RF9DVFJMOwotCi0gICAgaWYgKHBsYXRmb3JtS2V5RXZlbnQtPmFsdEtleSgpKQotICAgICAgICBr
ZXlFdmVudC5tb2RpZmllcnMgfD0gS0VZTU9EX0FMVDsKLQotICAgIGlmIChwbGF0Zm9ybUtleUV2
ZW50LT5tZXRhS2V5KCkpCi0gICAgICAgIGtleUV2ZW50Lm1vZGlmaWVycyB8PSBLRVlNT0RfQUxU
R1I7Ci0KLSAgICBrZXlFdmVudC5jYXAgPSBwbGF0Zm9ybUtleUV2ZW50LT51bm1vZGlmaWVkQ2hh
cmFjdGVyKCk7Ci0gICAga2V5RXZlbnQuc3ltID0ga2V5RXZlbnQuY2FwOwotICAgIGtleUV2ZW50
LnNjYW4gPSAwOwotICAgIGtleUV2ZW50LmZsYWdzID0gMDsKLQotICAgIGlmIChwbGF0Zm9ybUtl
eUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpSYXdLZXlEb3duCi0gICAg
ICAgIHx8IHBsYXRmb3JtS2V5RXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6
OktleURvd24pIHsKLSAgICAgICAga2V5RXZlbnQuZmxhZ3MgPSBLRVlfRE9XTiB8IEtFWV9TWU1f
VkFMSUQgfCBLRVlfQ0FQX1ZBTElEOwotICAgIH0gZWxzZSBpZiAocGxhdGZvcm1LZXlFdmVudC0+
dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5VXApCi0gICAgICAgIGtleUV2ZW50
LmZsYWdzID0gS0VZX1NZTV9WQUxJRCB8IEtFWV9DQVBfVkFMSUQ7Ci0KLSAgICBucEV2ZW50LnR5
cGUgPSBOUF9LZXlFdmVudDsKLSAgICBucEV2ZW50LmRhdGEgPSAma2V5RXZlbnQ7Ci0gICAgaWYg
KGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlV2hlZWxFdmVudChXaGVlbEV2ZW50
KiBldmVudCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFtX3ByaXZhdGUtPm1faXNGb2N1c2VkKQotICAgICAgICBmb2N1c1BsdWdpbkVsZW1lbnQo
KTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLSAgICBOUFdoZWVsRXZlbnQgd2hlZWxFdmVudDsK
LQotICAgIHdoZWVsRXZlbnQueCA9IGV2ZW50LT5vZmZzZXRYKCk7Ci0gICAgd2hlZWxFdmVudC55
ID0gZXZlbnQtPm9mZnNldFkoKTsKLQotICAgIHdoZWVsRXZlbnQuZmxhZ3MgPSAwOwotCi0gICAg
d2hlZWxFdmVudC54RGVsdGEgPSAtZXZlbnQtPmRlbHRhWCgpOwotICAgIHdoZWVsRXZlbnQueURl
bHRhID0gLWV2ZW50LT5kZWx0YVkoKTsKLQotICAgIG5wRXZlbnQudHlwZSA9IE5QX1doZWVsRXZl
bnQ7Ci0gICAgbnBFdmVudC5kYXRhID0gJndoZWVsRXZlbnQ7Ci0KLSAgICBpZiAoZGlzcGF0Y2hO
UEV2ZW50KG5wRXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0K
LQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVUb3VjaEV2ZW50KFRvdWNoRXZlbnQqIGV2ZW50KQot
ewotICAgIGlmICghbV9wcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcHJp
dmF0ZS0+bV9pc0ZvY3VzZWQpCi0gICAgICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOwotCi0gICAg
TlBUb3VjaEV2ZW50IG5wVG91Y2hFdmVudDsKLQotICAgIGlmIChldmVudC0+aXNEb3VibGVUYXAo
KSkKLSAgICAgICAgbnBUb3VjaEV2ZW50LnR5cGUgPSBUT1VDSF9FVkVOVF9ET1VCTEVUQVA7Ci0g
ICAgZWxzZSBpZiAoZXZlbnQtPmlzVG91Y2hIb2xkKCkpCi0gICAgICAgIG5wVG91Y2hFdmVudC50
eXBlID0gVE9VQ0hfRVZFTlRfVE9VQ0hIT0xEOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLnRvdWNoY2FuY2VsRXZlbnQpCi0gICAgICAgIG5wVG91Y2hFdmVudC50
eXBlID0gVE9VQ0hfRVZFTlRfQ0FOQ0VMOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgVG91Y2hMaXN0KiB0b3VjaExpc3Q7Ci0gICAgLy8gVGhlIHRvdWNoZXMgbGlzdCBpcyBlbXB0
eSBpZiBpbiBhIHRvdWNoIGVuZCBldmVudC4KLSAgICAvLyBTaW5jZSBEb3VibGVUYXAgaXMgdXN1
c2FsbHkgYSBUb3VjaEVuZCBVc2UgY2hhbmdlZFRvdWNoZXMgaW5zdGVhZC4KLSAgICBpZiAobnBU
b3VjaEV2ZW50LnR5cGUgPT0gVE9VQ0hfRVZFTlRfRE9VQkxFVEFQKQotICAgICAgICB0b3VjaExp
c3QgPSBldmVudC0+Y2hhbmdlZFRvdWNoZXMoKTsKLSAgICBlbHNlCi0gICAgICAgIHRvdWNoTGlz
dCA9IGV2ZW50LT50b3VjaGVzKCk7Ci0KLSAgICBucFRvdWNoRXZlbnQucG9pbnRzID0gMDsKLSAg
ICBucFRvdWNoRXZlbnQuc2l6ZSA9IHRvdWNoTGlzdC0+bGVuZ3RoKCk7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8TlBUb3VjaFBvaW50W10+IHRvdWNoUG9pbnRzOwotICAgIGlmICh0b3VjaExpc3Qt
Pmxlbmd0aCgpKSB7Ci0gICAgICAgIHRvdWNoUG9pbnRzID0gc3RkOjptYWtlX3VuaXF1ZTxOUFRv
dWNoUG9pbnRbXT4odG91Y2hMaXN0LT5sZW5ndGgoKSk7Ci0gICAgICAgIG5wVG91Y2hFdmVudC5w
b2ludHMgPSB0b3VjaFBvaW50cy5nZXQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRvdWNoTGlzdC0+bGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAgVG91Y2gqIHRvdWNo
SXRlbSA9IHRvdWNoTGlzdC0+aXRlbShpKTsKLSAgICAgICAgICAgIHRvdWNoUG9pbnRzW2ldLnRv
dWNoSWQgPSB0b3VjaEl0ZW0tPmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgIHRvdWNoUG9pbnRz
W2ldLmNsaWVudFggPSB0b3VjaEl0ZW0tPnBhZ2VYKCkgLSBmcmFtZVJlY3QoKS54KCk7Ci0gICAg
ICAgICAgICB0b3VjaFBvaW50c1tpXS5jbGllbnRZID0gdG91Y2hJdGVtLT5wYWdlWSgpIC0gZnJh
bWVSZWN0KCkueSgpOwotICAgICAgICAgICAgdG91Y2hQb2ludHNbaV0uc2NyZWVuWCA9IHRvdWNo
SXRlbS0+c2NyZWVuWCgpOwotICAgICAgICAgICAgdG91Y2hQb2ludHNbaV0uc2NyZWVuWSA9IHRv
dWNoSXRlbS0+c2NyZWVuWSgpOwotICAgICAgICAgICAgdG91Y2hQb2ludHNbaV0ucGFnZVggPSB0
b3VjaEl0ZW0tPnBhZ2VYKCk7Ci0gICAgICAgICAgICB0b3VjaFBvaW50c1tpXS5wYWdlWSA9IHRv
dWNoSXRlbS0+cGFnZVkoKTsKLQotICAgICAgICB9Ci0gICAgfQotCi0gICAgTlBFdmVudCBucEV2
ZW50OwotICAgIG5wRXZlbnQudHlwZSA9IE5QX1RvdWNoRXZlbnQ7Ci0gICAgbnBFdmVudC5kYXRh
ID0gJm5wVG91Y2hFdmVudDsKLQotICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCi0g
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCi17Ci0gICAgaWYgKCFtX3ByaXZh
dGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wcml2YXRlLT5tX2lzRm9jdXNlZCkK
LSAgICAgICAgZm9jdXNQbHVnaW5FbGVtZW50KCk7Ci0KLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0g
ICAgTlBNb3VzZUV2ZW50IG1vdXNlRXZlbnQ7Ci0KLSAgICBtb3VzZUV2ZW50LnggPSBldmVudC0+
b2Zmc2V0WCgpOwotICAgIG1vdXNlRXZlbnQueSA9IGV2ZW50LT5vZmZzZXRZKCk7Ci0KLSAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpCi0gICAgICAg
IG1vdXNlRXZlbnQudHlwZSA9IE1PVVNFX0JVVFRPTl9ET1dOOwotICAgIGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQotICAgICAgICBtb3VzZUV2
ZW50LnR5cGUgPSBNT1VTRV9NT1RJT047Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKLSAgICAgICAgbW91c2VFdmVudC50eXBlID0gTU9V
U0VfT1VUQk9VTkQ7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2VvdmVyRXZlbnQpCi0gICAgICAgIG1vdXNlRXZlbnQudHlwZSA9IE1PVVNFX09WRVI7Ci0g
ICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQot
ICAgICAgICBtb3VzZUV2ZW50LnR5cGUgPSBNT1VTRV9CVVRUT05fVVA7Ci0gICAgZWxzZQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtb3VzZUV2ZW50LmJ1dHRvbiA9IGV2ZW50LT5idXR0b24oKTsK
LSAgICBtb3VzZUV2ZW50LmZsYWdzID0gMDsKLQotICAgIG5wRXZlbnQudHlwZSA9IE5QX01vdXNl
RXZlbnQ7Ci0gICAgbnBFdmVudC5kYXRhID0gJm1vdXNlRXZlbnQ7Ci0KLSAgICBpZiAoZGlzcGF0
Y2hOUEV2ZW50KG5wRXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQotewotICAgIGlmICgh
bV9wcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wcml2YXRlLT5tX2lzRm9j
dXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcml2YXRlLT5tX2lzRm9jdXNlZCA9IHRy
dWU7Ci0KLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgbnBFdmVudC50eXBlID0gTlBfRm9jdXNH
YWluZWRFdmVudDsKLSAgICBucEV2ZW50LmRhdGEgPSAwOwotICAgIGRpc3BhdGNoTlBFdmVudChu
cEV2ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKLXsK
LSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3ByaXZh
dGUtPm1faXNGb2N1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ByaXZhdGUtPm1faXNG
b2N1c2VkID0gZmFsc2U7Ci0KLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgbnBFdmVudC50eXBl
ID0gTlBfRm9jdXNMb3N0RXZlbnQ7Ci0gICAgbnBFdmVudC5kYXRhID0gMDsKLSAgICBkaXNwYXRj
aE5QRXZlbnQobnBFdmVudCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlUGF1c2VFdmVu
dCgpCi17Ci0gICAgTlBFdmVudCBucEV2ZW50OwotICAgIG5wRXZlbnQudHlwZSA9IE5QX1BhdXNl
RXZlbnQ7Ci0gICAgbnBFdmVudC5kYXRhID0gMDsKLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVu
dCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlUmVzdW1lRXZlbnQoKQotewotICAgIE5Q
RXZlbnQgbnBFdmVudDsKLSAgICBucEV2ZW50LnR5cGUgPSBOUF9SZXN1bWVFdmVudDsKLSAgICBu
cEV2ZW50LmRhdGEgPSAwOwotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotdm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVTY3JvbGxFdmVudCgpCi17Ci0gICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSB0b0ZyYW1lVmlldyhwYXJlbnQoKSk7Ci0KLSAgICAvLyBBcyBhIHNwZWNpYWwgY2Fz
ZSwgaWYgdGhlIGZyYW1lVmlldyBleHRlbnQgaW4gZWl0aGVyIGRpbWVuc2lvbiBpcwotICAgIC8v
IGVtcHR5LCB0aGVuIHNlbmQgYW4gb24gc2NyZWVuIGV2ZW50LiBUaGlzIGlzIGltcG9ydGFudCBm
b3Igc2l0ZXMgbGlrZQotICAgIC8vIHBpY25pay5jb20gd2hpY2ggdXNlIGEgaGlkZGVuIGlmcmFt
ZSAocmVhZDogd2lkdGggPSAwIGFuZCBoZWlnaHQgPSAwKQotICAgIC8vIHdpdGggYW4gZW1iZWRk
ZWQgc3dmIHRvIGV4ZWN1dGUgc29tZSBqYXZhc2NyaXB0LiBVbmxlc3Mgd2Ugc2VuZCBhbgotICAg
IC8vIG9uIHNjcmVlbiBldmVudCB0aGUgc3dmIHdpbGwgbm90IGV4ZWN1dGUgdGhlIGphdmFzY3Jp
cHQgYW5kIHRoZSByZWFsCi0gICAgLy8gc2l0ZSB3aWxsIG5ldmVyIGxvYWQuCi0gICAgYm9vbCBv
blNjcmVlbkV2ZW50ID0gZnJhbWVWaWV3ICYmICghZnJhbWVWaWV3LT53aWR0aCgpIHx8ICFmcmFt
ZVZpZXctPmhlaWdodCgpKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLSAgICBucEV2ZW50LnR5
cGUgPSBtX2NsaXBSZWN0LmlzRW1wdHkoKSAmJiAhb25TY3JlZW5FdmVudCA/IE5QX09mZlNjcmVl
bkV2ZW50IDogTlBfT25TY3JlZW5FdmVudDsKLSAgICBucEV2ZW50LmRhdGEgPSAwOwotICAgIGRp
c3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotSW50UmVjdCBQbHVnaW5WaWV3OjpjYWxjdWxh
dGVDbGlwUmVjdCgpIGNvbnN0Ci17Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0ZyYW1l
VmlldyhwYXJlbnQoKSk7Ci0gICAgYm9vbCB2aXNpYmxlID0gZnJhbWVWaWV3ICYmIGlzVmlzaWJs
ZSgpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCk7
Ci0KLSAgICBpZiAodmlzaWJsZSAmJiBmcmFtZVZpZXctPndpZHRoKCkgJiYgZnJhbWVWaWV3LT5o
ZWlnaHQoKSAmJiByZW5kZXJlcikgewotICAgICAgICBJbnRTaXplIHdpbmRvd1NpemUgPSBmcmFt
ZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnZpZXdwb3J0U2l6ZSgp
OwotCi0gICAgICAgIC8vIEdldCB0aGUgY2xpcHBlZCByZWN0YW5nbGUgZm9yIHRoaXMgcGxheWVy
IHdpdGhpbiB0aGUgY3VycmVudCBmcmFtZS4KLSAgICAgICAgSW50UmVjdCB2aXNpYmxlQ29udGVu
dFJlY3Q7Ci0gICAgICAgIEludFJlY3QgY29udGVudFJlY3QgPSByZW5kZXJlci0+YWJzb2x1dGVD
bGlwcGVkT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgY29udGVudExvY2FsID0g
cmVuZGVyZXItPmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50KGNvbnRlbnRSZWN0LmxvY2F0aW9u
KCkpKTsKLQotICAgICAgICBjb250ZW50UmVjdC5zZXRMb2NhdGlvbihyb3VuZGVkSW50UG9pbnQo
Y29udGVudExvY2FsKSk7Ci0gICAgICAgIGNvbnRlbnRSZWN0Lm1vdmUoZnJhbWVSZWN0KCkueCgp
LCBmcmFtZVJlY3QoKS55KCkpOwotCi0gICAgICAgIC8vIENsaXAgYWdhaW5zdCBhbnkgZnJhbWVz
IHRoYXQgdGhlIHdpZGdldCBpcyBpbnNpZGUuIE5vdGUgdGhhdCBpZiB0aGUgZnJhbWVzIGFyZSBh
bHNvIGNsaXBwZWQKLSAgICAgICAgLy8gYnkgYSBkaXYsIHRoYXQgd2lsbCBub3QgYmUgaW5jbHVk
ZWQgaW4gdGhpcyBjYWxjdWxhdGlvbi4gVGhhdCBpcyBhbiBpbXByb3ZlbWVudCB0aGF0IHN0aWxs
Ci0gICAgICAgIC8vIG5lZWRzIHRvIGJlIG1hZGUuCi0gICAgICAgIGNvbnN0IFdpZGdldCogY3Vy
cmVudCA9IHRoaXM7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50LT5wYXJlbnQoKSAmJiB2aXNpYmxl
KSB7Ci0gICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgaXQgaXMgdmlzaWJsZSBpbiB0aGlzIHNj
cm9sbHZpZXcuCi0gICAgICAgICAgICB2aXNpYmxlQ29udGVudFJlY3QgPSBjdXJyZW50LT5wYXJl
bnQoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0KLSAgICAgICAgICAgIC8vIFNwZWNpYWwgY2Fz
ZSBmb3IgdGhlIHJvb3QgU2Nyb2xsVmlldy4gSXRzIHNpemUgZG9lcyBub3QgbWF0Y2ggdGhlIGFj
dHVhbCB3aW5kb3cgc2l6ZS4KLSAgICAgICAgICAgIGlmIChjdXJyZW50LT5wYXJlbnQoKSA9PSBy
b290KCkpCi0gICAgICAgICAgICAgICAgdmlzaWJsZUNvbnRlbnRSZWN0LnNldFNpemUod2luZG93
U2l6ZSk7Ci0KLSAgICAgICAgICAgIGNvbnRlbnRSZWN0LmludGVyc2VjdCh2aXNpYmxlQ29udGVu
dFJlY3QpOwotICAgICAgICAgICAgdmlzaWJsZSA9ICFjb250ZW50UmVjdC5pc0VtcHR5KCk7Ci0K
LSAgICAgICAgICAgIC8vIE9mZnNldCB0byB2aXNpYmxlIGNvb3JkaW5hdGVzIGluIHNjcm9sbHZp
ZXcgd2lkZ2V0J3MgY29vcmRpbmF0ZSBzeXN0ZW0gKGV4Y2VwdCBpbiB0aGUgY2FzZSBvZgotICAg
ICAgICAgICAgLy8gdGhlIHRvcCBzY3JvbGwgdmlldykuCi0gICAgICAgICAgICBpZiAoY3VycmVu
dC0+cGFyZW50KCktPnBhcmVudCgpKQotICAgICAgICAgICAgICAgIGNvbnRlbnRSZWN0Lm1vdmUo
LXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29udGVudFJlY3QueSgpKTsKLQotICAg
ICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudCgpOwotCi0gICAgICAgICAgICAvLyBE
b24ndCBpbmNsdWRlIHRoZSBvZmZzZXQgZm9yIHRoZSByb290IHdpbmRvdyBvciB3ZSBnZXQgdGhl
IHdyb25nIGNvb3JkaW5hdGVzLgotICAgICAgICAgICAgaWYgKGN1cnJlbnQtPnBhcmVudCgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBjb250ZW50IHJlY3QgaW50byB0aGUgcGFyZW50IHNj
cm9sbHZpZXcncyBjb29yZGluYXRlcy4KLSAgICAgICAgICAgICAgICBJbnRSZWN0IGN1ckZyYW1l
UmVjdCA9IGN1cnJlbnQtPmZyYW1lUmVjdCgpOwotICAgICAgICAgICAgICAgIGNvbnRlbnRSZWN0
Lm1vdmUoY3VyRnJhbWVSZWN0LngoKSwgY3VyRnJhbWVSZWN0LnkoKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY29udGVudFJlY3Q7Ci0gICAgfQotCi0gICAg
cmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVPbkxvYWRFdmVu
dCgpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X3ByaXZhdGUtPm1fc2VudE9uTG9hZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcml2YXRl
LT5tX3NlbnRPbkxvYWQgPSB0cnVlOwotCi0gICAgTlBFdmVudCBucEV2ZW50OwotICAgIG5wRXZl
bnQudHlwZSA9IE5QX09uTG9hZEV2ZW50OwotICAgIG5wRXZlbnQuZGF0YSA9IDA7Ci0KLSAgICBk
aXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci0KLSAgICAvLyBTZW5kIGFuIGluaXRpYWwgT25TY3Jl
ZW4vT2ZmU2NyZWVuIGV2ZW50LiBJdCBtdXN0IGFsd2F5cyBjb21lIGFmdGVyIG9uTG9hZCBpcyBz
ZW50LgotICAgIGhhbmRsZVNjcm9sbEV2ZW50KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlRnJlZU1lbW9yeUV2ZW50KCkKLXsKLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgbnBFdmVu
dC50eXBlID0gTlBfRnJlZU1lbW9yeUV2ZW50OwotICAgIG5wRXZlbnQuZGF0YSA9IDA7Ci0KLSAg
ICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
QmFja2dyb3VuZEV2ZW50KCkKLXsKLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgbnBFdmVudC50
eXBlID0gTlBfQmFja2dyb3VuZEV2ZW50OwotICAgIG5wRXZlbnQuZGF0YSA9IDA7Ci0KLSAgICBk
aXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9y
ZWdyb3VuZEV2ZW50KCkKLXsKLSAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci0KLSAgICBOUEV2
ZW50IG5wRXZlbnQ7Ci0gICAgbnBFdmVudC50eXBlID0gTlBfRm9yZWdyb3VuZEV2ZW50OwotICAg
IG5wRXZlbnQuZGF0YSA9IDA7Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci19Ci0K
LXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRnVsbFNjcmVlbkFsbG93ZWRFdmVudCgpCi17Ci0gICAg
aWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsK
LSAgICBucEV2ZW50LnR5cGUgPSBOUF9GdWxsU2NyZWVuUmVhZHlFdmVudDsKLSAgICBucEV2ZW50
LmRhdGEgPSAwOwotCi0gICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdG9GcmFtZVZpZXco
cGFyZW50KCkpKSB7Ci0gICAgICAgIGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKS0+ZGlkUGx1Z2luRW50ZXJGdWxsU2NyZWVuKHRoaXMsIG1fcHJpdmF0ZS0+bV9w
bHVnaW5VbmlxdWVQcmVmaXguY19zdHIoKSk7Ci0KLSAgICAgICAgaWYgKCFkaXNwYXRjaE5QRXZl
bnQobnBFdmVudCkpCi0gICAgICAgICAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZv
cm1QYWdlQ2xpZW50KCktPmRpZFBsdWdpbkV4aXRGdWxsU2NyZWVuKHRoaXMsIG1fcHJpdmF0ZS0+
bV9wbHVnaW5VbmlxdWVQcmVmaXguY19zdHIoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fcHJpdmF0ZS0+bV9pc0Z1bGxTY3JlZW4gPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBQbHVn
aW5WaWV3OjpoYW5kbGVGdWxsU2NyZWVuRXhpdEV2ZW50KCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlBFdmVudCBucEV2ZW50OwotICAgIG5wRXZlbnQu
dHlwZSA9IE5QX0Z1bGxTY3JlZW5FeGl0RXZlbnQ7Ci0gICAgbnBFdmVudC5kYXRhID0gMDsKLQot
ICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLQotICAgIGlmIChGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKSkKLSAgICAgICAgZnJhbWVWaWV3LT5ob3N0V2lu
ZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5kaWRQbHVnaW5FeGl0RnVsbFNjcmVlbih0aGlz
LCBtX3ByaXZhdGUtPm1fcGx1Z2luVW5pcXVlUHJlZml4LmNfc3RyKCkpOwotCi0gICAgbV9wcml2
YXRlLT5tX2lzRnVsbFNjcmVlbiA9IGZhbHNlOwotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVJZGxlRXZlbnQoYm9vbCBlbnRlcklkbGUpCi17Ci0gICAgTlBF
dmVudCBucEV2ZW50OwotICAgIG5wRXZlbnQuZGF0YSA9IDA7Ci0KLSAgICBpZiAoZW50ZXJJZGxl
KQotICAgICAgICBucEV2ZW50LnR5cGUgPSBOUF9FbnRlcklkbGVFdmVudDsKLSAgICBlbHNlCi0g
ICAgICAgIG5wRXZlbnQudHlwZSA9IE5QX0V4aXRJZGxlRXZlbnQ7Ci0KLSAgICBkaXNwYXRjaE5Q
RXZlbnQobnBFdmVudCk7Ci19Ci0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVBcHBBY3RpdmF0
ZWRFdmVudCgpCi17Ci0gICAgTlBFdmVudCBucEV2ZW50OwotICAgIG5wRXZlbnQuZGF0YSA9IDA7
Ci0gICAgbnBFdmVudC50eXBlID0gTlBfQXBwQWN0aXZhdGVkRXZlbnQ7Ci0KLSAgICBkaXNwYXRj
aE5QRXZlbnQobnBFdmVudCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlQXBwRGVhY3Rp
dmF0ZWRFdmVudCgpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFBsdWdpbiB3YW50cyB0byBrbm93IHRoYXQgaXQgaGFzIHRvIGV4aXQgZnVsbHNjcmVl
biBvbiBkZWFjdGl2YXRpb24uCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9pc0Z1bGxTY3JlZW4pCi0g
ICAgICAgIGhhbmRsZUZ1bGxTY3JlZW5FeGl0RXZlbnQoKTsKLQotICAgIE5QRXZlbnQgbnBFdmVu
dDsKLSAgICBucEV2ZW50LmRhdGEgPSAwOwotICAgIG5wRXZlbnQudHlwZSA9IE5QX0FwcERlYWN0
aXZhdGVkRXZlbnQ7Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlQXBwU3RhbmRieUV2ZW50KCkKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgc2VuZCBhbiBRTlBfQXBwU3RhbmRieUV2ZW50Ci0gICAgTlBFdmVudCBucEV2ZW50
OwotICAgIG5wRXZlbnQuZGF0YSA9IDA7Ci0gICAgbnBFdmVudC50eXBlID0gTlBfQXBwU3RhbmRC
eUV2ZW50OwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OmhhbmRsZU9yaWVudGF0aW9uRXZlbnQoaW50IGFuZ2xlKQotewotICAgIE5QRXZlbnQg
bnBFdmVudDsKLSAgICBucEV2ZW50LnR5cGUgPSBOUF9PcmllbnRhdGlvbkV2ZW50OwotICAgIG5w
RXZlbnQuZGF0YSA9ICh2b2lkKilhbmdsZTsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50
KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVTd2lwZUV2ZW50KCkKLXsKLSAgICBpZiAo
IW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUGx1Z2luIG9ubHkgd2FudHMg
dG8ga25vdyB0aGF0IGl0IGhhcyB0byBleGl0IGZ1bGxzY3JlZW4uCi0gICAgaWYgKG1fcHJpdmF0
ZS0+bV9pc0Z1bGxTY3JlZW4pCi0gICAgICAgIGhhbmRsZUZ1bGxTY3JlZW5FeGl0RXZlbnQoKTsK
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVTY3JlZW5Qb3dlckV2ZW50KGJvb2wgcG93ZXJl
ZCkKLXsKLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgbnBFdmVudC5kYXRhID0gMDsKLQotICAg
IGlmIChwb3dlcmVkKQotICAgICAgICBucEV2ZW50LnR5cGUgPSBOUF9TY3JlZW5Qb3dlclVwRXZl
bnQ7Ci0gICAgZWxzZQotICAgICAgICBucEV2ZW50LnR5cGUgPSBOUF9TY3JlZW5Qb3dlckRvd25F
dmVudDsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50V2lkZ2V0KQotewotICAgIC8vIElmIHBh
cmVudFdpZGdldCBpcyAwLCBsZXRzIHVucmVnaXN0ZXIgdGhlIHBsdWdpbiB3aXRoIHRoZSBjdXJy
ZW50IHBhcmVudC4KLSAgICBpZiAobV9wcml2YXRlICYmICghcGFyZW50V2lkZ2V0IHx8IHBhcmVu
dFdpZGdldCAhPSBwYXJlbnQoKSkpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gdG9GcmFtZVZpZXcocGFyZW50KCkpKSB7Ci0gICAgICAgICAgICBpZiAobV9wcml2YXRlLT5t
X2lzQmFja2dyb3VuZFBsYXlpbmcpCi0gICAgICAgICAgICAgICAgZnJhbWVWaWV3LT5ob3N0V2lu
ZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5vblBsdWdpblN0b3BCYWNrZ3JvdW5kUGxheSh0
aGlzLCBtX3ByaXZhdGUtPm1fcGx1Z2luVW5pcXVlUHJlZml4LmNfc3RyKCkpOwotCi0gICAgICAg
ICAgICBpZiAobV9wcml2YXRlLT5tX2lzRnVsbFNjcmVlbikKLSAgICAgICAgICAgICAgICBoYW5k
bGVGdWxsU2NyZWVuRXhpdEV2ZW50KCk7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgd2lsbCB1bmxv
Y2sgdGhlIGlkbGUgKGlmIHdlIGhhdmUgbG9ja2VkIGl0KS4KLSAgICAgICAgICAgIG1fcHJpdmF0
ZS0+cHJldmVudElkbGUoZmFsc2UpOwotCi0gICAgICAgICAgICAvLyBUaGlzIHdpbGwgcmVsZWFz
ZSBhbnkga2VlcFZpc2libGVSZWN0cyBpZiB0aGV5IHdlcmUgc2V0LgotICAgICAgICAgICAgbV9w
cml2YXRlLT5jbGVhclZpc2libGVSZWN0cygpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotICAgICAgICAgICAgLy8gSWYgd2UgaGFkIGEgaG9sZSBwdW5jaCByZWN0IHNldCwg
Y2xlYXIgaXQuCi0gICAgICAgICAgICBpZiAobV9wcml2YXRlLT5tX3BsYXRmb3JtTGF5ZXIgJiYg
IW1fcHJpdmF0ZS0+bV9ob2xlUHVuY2hSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBt
X3ByaXZhdGUtPm1fcGxhdGZvcm1MYXllci0+c2V0SG9sZVB1bmNoUmVjdChJbnRSZWN0KCkpOwot
I2VuZGlmCi0gICAgICAgICAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdl
Q2xpZW50KCktPnJlZ2lzdGVyUGx1Z2luKHRoaXMsIGZhbHNlIC8qc2hvdWxkUmVnaXN0ZXIqLyk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnRXaWRnZXQp
OwotCi0gICAgaWYgKHBhcmVudFdpZGdldCkgewotICAgICAgICBpbml0KCk7Ci0KLSAgICAgICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0ZyYW1lVmlldyhwYXJlbnRXaWRnZXQpOwotCi0gICAg
ICAgIGlmIChmcmFtZVZpZXcgJiYgbV9wcml2YXRlKSB7Ci0gICAgICAgICAgICBmcmFtZVZpZXct
Pmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnJlZ2lzdGVyUGx1Z2luKHRoaXMs
IHRydWUgLypzaG91bGRSZWdpc3RlciovKTsKLSAgICAgICAgICAgIGlmIChmcmFtZVZpZXctPmZy
YW1lKCkKLSAgICAgICAgICAgICAgICYmIGZyYW1lVmlldy0+ZnJhbWUoKS0+bG9hZGVyKCkKLSAg
ICAgICAgICAgICAgICYmIGZyYW1lVmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmZyYW1lSGFzTG9h
ZGVkKCkpCi0gICAgICAgICAgICAgICAgaGFuZGxlT25Mb2FkRXZlbnQoKTsKLQotICAgICAgICAg
ICAgaWYgKG1fcHJpdmF0ZS0+bV9pc0JhY2tncm91bmRQbGF5aW5nKQotICAgICAgICAgICAgICAg
IGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+b25QbHVnaW5T
dGFydEJhY2tncm91bmRQbGF5KHRoaXMsIG1fcHJpdmF0ZS0+bV9wbHVnaW5VbmlxdWVQcmVmaXgu
Y19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQotewotICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsK
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKLXsKLSAgICBpZiAo
IW1fcHJpdmF0ZSB8fCAhbV9pc1N0YXJ0ZWQgfHwgIXBhcmVudCgpIHx8ICFtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+c2V0d2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKTsKLSAgICBpZiAoIWZyYW1lVmlldy0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+aXNBY3RpdmUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIHBsdWdpbiBkaWRuJ3QgbG9hZCBzdWNlc3NmdWxseSwg
bm8gcG9pbnQgaW4gY2FsbGluZyBzZXR3aW5kb3cKLSAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9w
cml2YXRlLT5tX2lzRnVsbFNjcmVlbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3By
aXZhdGUtPm1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3ByaXZhdGUtPm1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gZmFsc2U7Ci0KLSAgICBt
X25wV2luZG93LnggPSBtX3dpbmRvd1JlY3QueCgpOwotICAgIG1fbnBXaW5kb3cueSA9IG1fd2lu
ZG93UmVjdC55KCk7Ci0KLSAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSBtYXgoMCwgbV9j
bGlwUmVjdC54KCkpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbWF4KDAsIG1fY2xp
cFJlY3QueSgpKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbWF4KDAsIG1fY2xp
cFJlY3QubWF4WCgpKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1heCgwLCBt
X2NsaXBSZWN0Lm1heFkoKSk7Ci0KLSAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5z
KFBsdWdpblF1aXJrRG9udENhbGxTZXRXaW5kb3dNb3JlVGhhbk9uY2UpKSB7Ci0gICAgICAgIC8v
IE9ubHkgc2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBwbHVnaW4gY29udGVudCB0aGUg
Zmlyc3QgdGltZSBzZXROUFdpbmRvdygpIGlzIGNhbGxlZAotICAgICAgICAvLyBzbyBhcyB0byB3
b3JrYXJvdW5kIGFuIGlzc3VlIGluIEZsYXNoIHdoZXJlIG11bHRpcGxlIGNhbGxzIHRvIHNldE5Q
V2luZG93KCkgY2F1c2UgdGhlIHBsdWdpbgotICAgICAgICAvLyB0byBjcmFzaCBpbiB3aW5kb3dl
ZCBtb2RlLgotICAgICAgICBpZiAoIW1faXNXaW5kb3dlZCB8fCBtX25wV2luZG93LndpZHRoID09
IFVuaW5pdGlhbGl6ZWRDb29yZGluYXRlIHx8IG1fbnBXaW5kb3cuaGVpZ2h0ID09IFVuaW5pdGlh
bGl6ZWRDb29yZGluYXRlKSB7Ci0gICAgICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5k
b3dSZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IG1fd2luZG93
UmVjdC5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbnBXaW5k
b3cud2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKLSAgICAgICAgbV9ucFdpbmRvdy5oZWln
aHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgbV9ucFdpbmRvdy50eXBl
ID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OldpbmRvdyogd2luZG93ID0gZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpLT5wbGF0Zm9ybVdpbmRvdygpOwotICAgIGlmICh3aW5kb3cpCi0gICAgICAg
ICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+d2luZG93
R3JvdXAgPSB3aW5kb3ctPndpbmRvd0dyb3VwKCk7Ci0KLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgIHNldENhbGxpbmdQbHVn
aW4odHJ1ZSk7Ci0KLSAgICAvLyBGSVhNRTogUGFzc2luZyB6b29tRmFjdG9yIHRvIHNldHdpbmRv
dyBtYWtlIHdpbmRvd2VkIHBsdWdpbiBzY2FsZSBpbmNvcnJlY3RseS4KLSAgICAvLyBIYW5kbGlu
ZyB0aGUgem9vbSBmYWN0b3IgcHJvcGVybHkgaW4gdGhlIHBsdWdpbiBzaWRlIG1heSBiZSBhIGJl
dHRlciBzb2x1dGlvbi4KLSAgICBkb3VibGUgb2xkWm9vbUZhY3RvciA9ICgoTlBTZXRXaW5kb3dD
YWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+em9vbUZhY3RvcjsKLSAgICAoKE5Q
U2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPnpvb21GYWN0b3Ig
PSAxLjsKLSAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2Us
ICZtX25wV2luZG93KTsKLSAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5k
b3cud3NfaW5mbyktPnpvb21GYWN0b3IgPSBvbGRab29tRmFjdG9yOwotCi0gICAgc2V0Q2FsbGlu
Z1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCi17
Ci0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKLQotICAgIC8vIEZJWE1F
OiBXZSBtaWdodCB3YW50IHRvIHRlbGwgdGhlIHBsdWdpbiB0byBoaWRlIGl0J3Mgd2luZG93IGhl
cmUsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlcgotICAgIC8vIHNpbmNlIHRoZSB3aW5kb3cgbWFuYWdl
ciBzaG91bGQgdGFrZSBjYXJlIG9mIHRoYXQgZm9yIHVzLgotfQotCi1OUEVycm9yIFBsdWdpblZp
ZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVu
LCBjb25zdCBjaGFyKiBidWYpCi17Ci0gICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKLQot
ICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQotICAgICAgICBmaWxlbmFt
ZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKLQotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlm
ICghZ2V0RmlsZVNpemUoZmlsZW5hbWUsIHNpemUpKQotICAgICAgICByZXR1cm4gTlBFUlJfRklM
RV9OT1RfRk9VTkQ7Ci0KLSAgICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oZmlsZW5hbWUudXRm
OCgpLmRhdGEoKSwgInIiKTsKLSAgICBpZiAoIWZpbGVIYW5kbGUpCi0gICAgICAgIHJldHVybiBO
UEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIGJ1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAgaW50
IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIHNpemUsIGZpbGVIYW5kbGUpOwot
Ci0gICAgZmNsb3NlKGZpbGVIYW5kbGUpOwotCi0gICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQotICAg
ICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5W
YXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKLXsKLSAgICBz
d2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5WVG9vbGtpdDoKLSAgICAgICAgKnN0YXRp
Y19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMDsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05P
X0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVt
YmVkQm9vbDoKLSAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7Ci0g
ICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6Ci0gICAgICAgICpzdGF0aWNfY2Fz
dDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJS
T1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3ds
ZXNzOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKLSAgICAg
ICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGNhc2UgTlBOVk5QQ2FsbGJhY2tzUHRyOgotICAgICAgICAqKCh2b2lkICoqKSB2YWx1ZSkgPSAo
dm9pZCopJnNfTnBDYWxsYmFja3M7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIE5QTlZ4RGlzcGxheToKLSAgICBjYXNl
IE5QTlZ4dEFwcENvbnRleHQ6Ci0gICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6Ci0gICAgY2Fz
ZSBOUE5WYXNkRW5hYmxlZEJvb2w6Ci0gICAgY2FzZSBOUE5WaXNPZmZsaW5lQm9vbDoKLSAgICBj
YXNlIE5QTlZzZXJ2aWNlTWFuYWdlcjoKLSAgICBjYXNlIE5QTlZET01FbGVtZW50OgotICAgIGNh
c2UgTlBOVkRPTVdpbmRvdzoKLSAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDoKLSAgICBjYXNl
IE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6Ci0gICAgY2FzZSBOUE5WcHJpdmF0ZU1vZGVCb29s
OgotICAgIGNhc2UgTlBOVlpvb21GYWN0b3I6Ci0gICAgY2FzZSBOUE5WUm9vdFdpbmRvd0dyb3Vw
OgotICAgIGNhc2UgTlBOVkJyb3dzZXJXaW5kb3dHcm91cDoKLSAgICBjYXNlIE5QTlZCcm93c2Vy
RGlzcGxheUNvbnRleHQ6Ci0gICAgY2FzZSBOUE5WUGx1Z2luV2luZG93UHJlZml4OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5WaWV3
OjpwbGF0Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBF
cnJvciogcmVzdWx0KQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlZa
b29tRmFjdG9yOgotICAgICAgICAqKHN0YXRpY19jYXN0PHZvaWQqKj4odmFsdWUpKSA9IHN0YXRp
Y19jYXN0PHZvaWQqPigmKChzdGF0aWNfY2FzdDxOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0Kj4o
bV9ucFdpbmRvdy53c19pbmZvKSkpLT56b29tRmFjdG9yKTsKLSAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVlJvb3RX
aW5kb3dHcm91cDogewotICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3
KHBhcmVudCgpKTsKLSAgICAgICAgaWYgKGZyYW1lVmlldykgewotICAgICAgICAgICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpXaW5kb3cgKndpbmRvdyA9IGZyYW1lVmlldy0+aG9z
dFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+cGxhdGZvcm1XaW5kb3coKTsKLSAgICAg
ICAgICAgIGlmICh3aW5kb3cpIHsKLSAgICAgICAgICAgICAgICB2b2lkKiogdGVtcFZhbHVlID0g
c3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgKnRlbXBWYWx1ZSA9
ICh2b2lkKil3aW5kb3ctPnJvb3RHcm91cCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCp0ZW1w
VmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJS
T1I7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYXNlIE5QTlZCcm93c2Vy
V2luZG93R3JvdXA6IHsKLSAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0ZyYW1lVmll
dyhwYXJlbnQoKSk7Ci0gICAgICAgIGlmIChmcmFtZVZpZXcpIHsKLSAgICAgICAgICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6V2luZG93KiB3aW5kb3cgPSBmcmFtZVZpZXctPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnBsYXRmb3JtV2luZG93KCk7Ci0gICAg
ICAgICAgICBpZiAod2luZG93KSB7Ci0gICAgICAgICAgICAgICAgdm9pZCoqIHRlbXBWYWx1ZSA9
IHN0YXRpY19jYXN0PHZvaWQqKj4odmFsdWUpOwotICAgICAgICAgICAgICAgICp0ZW1wVmFsdWUg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihjb25zdF9jYXN0PGNoYXIqPih3aW5kb3ctPndpbmRv
d0dyb3VwKCkpKTsKLQotICAgICAgICAgICAgICAgIGlmICgqdGVtcFZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WQnJvd3NlckRpc3BsYXlDb250ZXh0OiB7
Ci0gICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdG9GcmFtZVZpZXcocGFyZW50KCkpOwot
ICAgICAgICBpZiAoZnJhbWVWaWV3KSB7Ci0gICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OlBsYXRmb3JtRGlzcGxheUNvbnRleHRIYW5kbGUgY29udGV4dCA9IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cGxhdGZvcm1EaXNwbGF5Q29udGV4dCgpOwotICAg
ICAgICAgICAgaWYgKGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICB2b2lkKiogdGVtcFZhbHVl
ID0gc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgKnRlbXBWYWx1
ZSA9IHN0YXRpY19jYXN0PHZvaWQqPihjb250ZXh0KTsKLQotICAgICAgICAgICAgICAgIGlmICgq
dGVtcFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJP
UjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklD
X0VSUk9SOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WUGx1
Z2luV2luZG93UHJlZml4OiB7Ci0gICAgICAgIHZvaWQqKiB0ZW1wVmFsdWUgPSBzdGF0aWNfY2Fz
dDx2b2lkKio+KHZhbHVlKTsKLSAgICAgICAgKnRlbXBWYWx1ZSA9IHN0YXRpY19jYXN0PHZvaWQq
Pihjb25zdF9jYXN0PGNoYXIqPihtX3ByaXZhdGUtPm1fcGx1Z2luVW5pcXVlUHJlZml4LmNfc3Ry
KCkpKTsKLQotICAgICAgICBpZiAoKnRlbXBWYWx1ZSkgewotICAgICAgICAgICAgKnJlc3VsdCA9
IE5QRVJSX05PX0VSUk9SOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE5QTlZ4RGlzcGxheToKLSAgICBjYXNlIE5QTlZ4dEFwcENv
bnRleHQ6Ci0gICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6Ci0gICAgY2FzZSBOUE5WamF2YXNj
cmlwdEVuYWJsZWRCb29sOgotICAgIGNhc2UgTlBOVmFzZEVuYWJsZWRCb29sOgotICAgIGNhc2Ug
TlBOVmlzT2ZmbGluZUJvb2w6Ci0gICAgY2FzZSBOUE5Wc2VydmljZU1hbmFnZXI6Ci0gICAgY2Fz
ZSBOUE5WRE9NRWxlbWVudDoKLSAgICBjYXNlIE5QTlZET01XaW5kb3c6Ci0gICAgY2FzZSBOUE5W
VG9vbGtpdDoKLSAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6Ci0gICAgY2FzZSBOUE5W
V2luZG93TlBPYmplY3Q6Ci0gICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OgotICAg
IGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKLSAgICBjYXNlIE5QTlZwcml2YXRlTW9kZUJv
b2w6Ci0gICAgY2FzZSBOUE5WTlBDYWxsYmFja3NQdHI6Ci0gICAgICAgIHJldHVybiBwbGF0Zm9y
bUdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSwgcmVzdWx0KTsKLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotfQotCi0vLyBUaGlzIGlzIGEgcHVyZSB2aXJ0dWFsIGluaGVyaXRlZCBmcm9tIFdpZGdl
dCBjbGFzcyBhbmQgYWxsIGludmFsaWRhdGVzCi0vLyBhcmUgZnVubmVsZWQgdGhyb3VnaCB0aGlz
IG1ldGhvZC4gV2UgZm9yd2FyZCB0aGVtIG9uIHRvIGVpdGhlciB0aGUKLS8vIGNvbXBvc2l0aW5n
IGxheWVyIG9yIHRoZSBQbHVnaW5WaWV3OjppbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3Qg
bWV0aG9kLgotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmICghbV9wcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBS
ZWNvcmQgdGhlIHJlZ2lvbiB0aGF0IHdlJ3ZlIGJlZW4gYXNrZWQgdG8gaW52YWxpZGF0ZQotICAg
IG1fcHJpdmF0ZS0+bV9pbnZhbGlkYXRlUmVnaW9uID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06Oklu
dFJlY3RSZWdpb246OnVuaW9uUmVnaW9ucyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdChy
ZWN0KSwgbV9wcml2YXRlLT5tX2ludmFsaWRhdGVSZWdpb24pOwotCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX3ByaXZhdGUtPm1fcGxhdGZvcm1MYXllcikgewot
ICAgICAgICBtX3ByaXZhdGUtPm1fcGxhdGZvcm1MYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGludmFsaWRhdGVXaW5kb3dsZXNz
UGx1Z2luUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChO
UFJlY3QqIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0KSB7Ci0gICAgICAgIGludmFsaWRhdGUoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnZhbGlkYXRlUmVjdChJbnRSZWN0KHJlY3Qt
PmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20g
LSByZWN0LT50b3ApKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5Q
UmVnaW9uKQotewotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpmb3Jj
ZVJlZHJhdygpCi17Ci0gICAgaW52YWxpZGF0ZSgpOwotfQotCi1ib29sIFBsdWdpblZpZXc6OnBs
YXRmb3JtU3RhcnQoKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgQVNTRVJUKG1f
c3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7Ci0KLSAgICBtX3ByaXZh
dGUgPSBuZXcgUGx1Z2luVmlld1ByaXZhdGUodGhpcyk7Ci0KLSAgICBpZiAobV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgICAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOwotICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUo
bV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7Ci0gICAg
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldygwKTsKLSAgICB9Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgaWYgKG1fcGFyZW50RnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuYWxs
b3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCi0gICAgICAgICYmIG1fcGFyZW50RnJhbWUtPnBh
Z2UoKS0+c2V0dGluZ3MoKQotICAgICAgICAmJiBtX3BhcmVudEZyYW1lLT5wYWdlKCktPnNldHRp
bmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkpIHsKLSAgICAgICAgbV9wcml2
YXRlLT5tX3BsYXRmb3JtTGF5ZXIgPSBQbHVnaW5MYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKHRo
aXMpOwotICAgICAgICAvLyBUcmlnZ2VyIGxheWVyIGNvbXB1dGF0aW9uIGluIFJlbmRlckxheWVy
Q29tcG9zaXRvcgotICAgICAgICBtX2VsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhl
dGljU3R5bGVDaGFuZ2UpOwotICAgIH0KLSNlbmRpZgotCi0gICAgbV9ucFdpbmRvdy50eXBlID0g
TlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0gICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOyAvLyBOb3Qg
dXNlZD8KLSAgICBtX25wV2luZG93LnggPSAwOwotICAgIG1fbnBXaW5kb3cueSA9IDA7Ci0gICAg
bV9ucFdpbmRvdy53aWR0aCA9IFVuaW5pdGlhbGl6ZWRDb29yZGluYXRlOwotICAgIG1fbnBXaW5k
b3cuaGVpZ2h0ID0gVW5pbml0aWFsaXplZENvb3JkaW5hdGU7Ci0gICAgbV9ucFdpbmRvdy53c19p
bmZvID0gbmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3Q7Ci0gICAgKChOUFNldFdpbmRvd0Nh
bGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT56b29tRmFjdG9yID0gMS47Ci0gICAg
KChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT53aW5kb3dH
cm91cCA9IDA7Ci0KLSAgICBzaG93KCk7Ci0KLSAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSB0b0ZyYW1lVmlldyhwYXJlbnQoKSkpCi0gICAgICAgIGhhbmRsZU9yaWVudGF0aW9uRXZlbnQo
ZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5vcmllbnRhdGlv
bigpKTsKLQotICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpIHsKLSAgICAgICAgdXBkYXRlUGx1Z2luV2lkZ2V0
KCk7Ci0gICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3koKQotewotICAgIGlm
ICghbV9wcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGlzIHdpbGwgdW5sb2Nr
IHRoZSBpZGxlIChpZiB3ZSBoYXZlIGxvY2tlZCBpdCkuCi0gICAgbV9wcml2YXRlLT5wcmV2ZW50
SWRsZShmYWxzZSk7Ci0KLSAgICAvLyBUaGlzIHdpbGwgcmVsZWFzZSBhbnkga2VlcFZpc2libGVS
ZWN0cyBpZiB0aGV5IHdlcmUgc2V0LgotICAgIG1fcHJpdmF0ZS0+Y2xlYXJWaXNpYmxlUmVjdHMo
KTsKLQotICAgIC8vIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB3ZSB1bnJlZ2lzdGVyZWQgdGhlIHBs
dWdpbi4KLSAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0ZyYW1lVmlldyhwYXJlbnQo
KSkpIHsKLSAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9pc0JhY2tncm91bmRQbGF5aW5nKQotICAg
ICAgICAgICAgZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5v
blBsdWdpblN0b3BCYWNrZ3JvdW5kUGxheSh0aGlzLCBtX3ByaXZhdGUtPm1fcGx1Z2luVW5pcXVl
UHJlZml4LmNfc3RyKCkpOwotCi0gICAgICAgIC8vIElmIHdlIHdlcmUgc3RpbGwgZnVsbHNjcmVl
biwgZW5zdXJlIHdlIG5vdGlmeSBldmVyeW9uZSB3ZSdyZSBub3QuCi0gICAgICAgIGlmIChtX3By
aXZhdGUtPm1faXNGdWxsU2NyZWVuKQotICAgICAgICAgICAgZnJhbWVWaWV3LT5ob3N0V2luZG93
KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5kaWRQbHVnaW5FeGl0RnVsbFNjcmVlbih0aGlzLCBt
X3ByaXZhdGUtPm1fcGx1Z2luVW5pcXVlUHJlZml4LmNfc3RyKCkpOwotCi0gICAgICAgIGlmICht
X3ByaXZhdGUtPm1fb3JpZW50YXRpb25Mb2NrZWQpCi0gICAgICAgICAgICBmcmFtZVZpZXctPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnVubG9ja09yaWVudGF0aW9uKCk7Ci0K
LSAgICAgICAgZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5y
ZWdpc3RlclBsdWdpbih0aGlzLCBmYWxzZSAvKnNob3VsZFJlZ2lzdGVyKi8pOwotICAgIH0KLQot
ICAgIG1fcHJpdmF0ZS0+bV9pc0JhY2tncm91bmRQbGF5aW5nID0gZmFsc2U7Ci0gICAgbV9wcml2
YXRlLT5tX2lzRnVsbFNjcmVlbiA9IGZhbHNlOwotCi0gICAgZGVsZXRlIG1fcHJpdmF0ZTsKLSAg
ICBtX3ByaXZhdGUgPSAwOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmdldFdpbmRvd0luZm8oVmVj
dG9yPFBsdWdpbldpbmRvd0luZm8+JiB3aW5kb3dMaXN0KQotewotICAgIGlmICghbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lkKiB2
YWxQdHIgPSAwOwotCi0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyZWVu
V2luZG93LCAmdmFsUHRyKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLQotICAgIGlmICghdmFsUHRyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBOUFNjcmVlbldpbmRvd0hhbmRsZXMqIHNjcmVlbldpbkhhbmRs
ZXMgPSBzdGF0aWNfY2FzdDxOUFNjcmVlbldpbmRvd0hhbmRsZXMqPih2YWxQdHIpOwotCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzY3JlZW5XaW5IYW5kbGVzLT5udW1PZldpbmRvd3M7IGkrKykg
ewotICAgICAgICBQbHVnaW5XaW5kb3dJbmZvIGluZm87Ci0gICAgICAgIGluZm8ud2luZG93UHRy
ID0gc2NyZWVuV2luSGFuZGxlcy0+d2luZG93SGFuZGxlc1tpXTsKLQotICAgICAgICBOUFJlY3Qq
IHJjID0gc2NyZWVuV2luSGFuZGxlcy0+d2luZG93UmVjdHNbaV07Ci0gICAgICAgIGluZm8ud2lu
ZG93UmVjdCA9IEludFJlY3QocmMtPmxlZnQsIHJjLT50b3AsIHJjLT5yaWdodCAtIHJjLT5sZWZ0
LCByYy0+Ym90dG9tIC0gcmMtPnRvcCk7Ci0KLSAgICAgICAgd2luZG93TGlzdC5hcHBlbmQoaW5m
byk7Ci0gICAgfQotfQotCi1CbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciog
UGx1Z2luVmlldzo6bG9ja0Zyb250QnVmZmVyRm9yUmVhZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X3ByaXZhdGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciA9IG1fcHJpdmF0ZS0+bG9ja1JlYWRGcm9udEJ1ZmZl
ckludGVybmFsKCk7Ci0KLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgbV9wcml2YXRlLT51bmxv
Y2tSZWFkRnJvbnRCdWZmZXIoKTsKLQotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6dW5sb2NrRnJvbnRCdWZmZXIoKSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRl
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9wcml2YXRlLT51bmxvY2tSZWFkRnJvbnRCdWZmZXIo
KTsKLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLVBsYXRmb3JtTGF5ZXIq
IFBsdWdpblZpZXc6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRl
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3BsYXRmb3JtTGF5
ZXIuZ2V0KCk7Ci19Ci0jZW5kaWYKLQotSW50UmVjdCBQbHVnaW5WaWV3OjplbnN1cmVWaXNpYmxl
UmVjdCgpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9rZWVwVmlzaWJsZVJlY3Q7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6c2V0QmFja2dyb3VuZFBsYXkoYm9vbCB2YWx1ZSkKLXsKLSAgICBpZiAoIW1fcHJp
dmF0ZSB8fCBtX3ByaXZhdGUtPm1faXNCYWNrZ3JvdW5kUGxheWluZyA9PSB2YWx1ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0ZyYW1lVmlldyhtX3By
aXZhdGUtPm1fdmlldy0+cGFyZW50KCkpOwotICAgIG1fcHJpdmF0ZS0+bV9pc0JhY2tncm91bmRQ
bGF5aW5nID0gdmFsdWU7Ci0gICAgaWYgKG1fcHJpdmF0ZS0+bV9pc0JhY2tncm91bmRQbGF5aW5n
KQotICAgICAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkt
Pm9uUGx1Z2luU3RhcnRCYWNrZ3JvdW5kUGxheSh0aGlzLCBtX3ByaXZhdGUtPm1fcGx1Z2luVW5p
cXVlUHJlZml4LmNfc3RyKCkpOwotICAgIGVsc2UKLSAgICAgICAgZnJhbWVWaWV3LT5ob3N0V2lu
ZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5vblBsdWdpblN0b3BCYWNrZ3JvdW5kUGxheSh0
aGlzLCBtX3ByaXZhdGUtPm1fcGx1Z2luVW5pcXVlUHJlZml4LmNfc3RyKCkpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFj
a2JlcnJ5L1BsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJy
eS5jcHAJKHJldmlzaW9uIDE2MTU5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2ti
ZXJyeS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnku
aCIKLQotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiUGx1Z2luTGF5ZXJXZWJL
aXRUaHJlYWQuaCIKLSNlbmRpZgotI2luY2x1ZGUgIk5QQ2FsbGJhY2tzQmxhY2tCZXJyeS5oIgot
I2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUV4ZWN1dGFibGVNZXNzYWdlLmg+Ci0jaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWVzc2FnZUNsaWVudC5oPgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0KLXN0YXRpYyB1bnNpZ25lZCBzX2NvdW50ZXIgPSAwOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVBsdWdpblZpZXdQcml2YXRlOjpQbHVnaW5WaWV3UHJpdmF0ZShQbHVnaW5W
aWV3KiB2aWV3KQotICAgIDogbV92aWV3KHZpZXcpCi0gICAgLCBtX3BsdWdpbkJ1ZmZlclR5cGUo
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQbHVnaW5CdWZmZXJXaXRoQWxwaGEpCi0g
ICAgLCBtX3BsdWdpbkZyb250QnVmZmVyKDApCi0gICAgLCBtX2lkbGVQcmV2ZW50ZWQoZmFsc2Up
Ci0gICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSh0cnVlKQotICAgICwgbV9zZW50T25M
b2FkKGZhbHNlKQotICAgICwgbV9pc0Z1bGxTY3JlZW4oZmFsc2UpCi0gICAgLCBtX2lzRm9jdXNl
ZChmYWxzZSkKLSAgICAsIG1fb3JpZW50YXRpb25Mb2NrZWQoZmFsc2UpCi0gICAgLCBtX2lzQmFj
a2dyb3VuZFBsYXlpbmcoZmFsc2UpCi17Ci0gICAgbV9wbHVnaW5CdWZmZXJzWzBdID0gMDsKLSAg
ICBtX3BsdWdpbkJ1ZmZlcnNbMV0gPSAwOwotCi0gICAgcHRocmVhZF9tdXRleGF0dHJfdCBtdXRl
eEF0dHJpYnV0ZXM7Ci0gICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGVz
KTsKLSAgICBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZtdXRleEF0dHJpYnV0ZXMsIFBUSFJF
QURfTVVURVhfUkVDVVJTSVZFKTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmbV9iYWNrQnVm
ZmVyTXV0ZXgsICZtdXRleEF0dHJpYnV0ZXMpOwotICAgIHB0aHJlYWRfcndsb2NrX2luaXQoJm1f
ZnJvbnRCdWZmZXJSd0xvY2ssIDApOwotCi0gICAgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgm
bXV0ZXhBdHRyaWJ1dGVzKTsKLQotICAgIGNoYXIgdW5pcXVlSWRbNTBdOwotICAgIHNucHJpbnRm
KHVuaXF1ZUlkLCBzaXplb2YodW5pcXVlSWQpLCAiUGx1Z2luVmlld0JCLSUwOHglMDh4LSIsIHNf
Y291bnRlcisrLCAoaW50KXRoaXMpOwotICAgIG1fcGx1Z2luVW5pcXVlUHJlZml4ID0gdW5pcXVl
SWQ7Ci19Ci0KLVBsdWdpblZpZXdQcml2YXRlOjp+UGx1Z2luVmlld1ByaXZhdGUoKQotewotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1MYXll
cikKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkKj4obV9w
bGF0Zm9ybUxheWVyLmdldCgpKS0+c2V0UGx1Z2luVmlldygwKTsKLSNlbmRpZgotCi0gICAgZGVz
dHJveUJ1ZmZlcnMoKTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbV9iYWNrQnVmZmVy
TXV0ZXgpOwotICAgIHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3koJm1fZnJvbnRCdWZmZXJSd0xvY2sp
OwotfQotCi1CbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlclR5cGUgUGx1Z2lu
Vmlld1ByaXZhdGU6OnRvQnVmZmVyVHlwZShOUFN1cmZhY2VGb3JtYXQgZm9ybWF0KQotewotICAg
IHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBGT1JNQVRfUkdCXzU2NToKLSAgICAgICAgcmV0
dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGx1Z2luQnVmZmVyOwotICAgIGNh
c2UgRk9STUFUX1JHQkFfODg4ODoKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQbHVnaW5CdWZmZXJXaXRoQWxwaGE7Ci0gICAgfQot
fQotCi12b2lkIFBsdWdpblZpZXdQcml2YXRlOjpzZXRab29tRmFjdG9yKGZsb2F0IHpvb21GYWN0
b3IpCi17Ci0gICAgaWYgKCgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV92aWV3LT5tX25w
V2luZG93LndzX2luZm8pLT56b29tRmFjdG9yICE9IHpvb21GYWN0b3IpCi0gICAgICAgIG1faGFz
UGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gdHJ1ZTsKLQotICAgICgoTlBTZXRXaW5kb3dDYWxsYmFj
a1N0cnVjdCopbV92aWV3LT5tX25wV2luZG93LndzX2luZm8pLT56b29tRmFjdG9yID0gem9vbUZh
Y3RvcjsKLX0KLQotdm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6c2V0VmlzaWJsZVJlY3RzKGNvbnN0
IE5QUmVjdCByZWN0c1tdLCBpbnQzMl90IGNvdW50KQotewotICAgIG1fa2VlcFZpc2libGVSZWN0
ID0gSW50UmVjdCgpOwotCi0gICAgaWYgKCFtX3ZpZXctPnBhcmVudCgpIHx8ICFjb3VudCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0g
ICAgICAgIEludFJlY3QgYWRkUmVjdCA9IEludFJlY3QocmVjdHNbaV0ubGVmdCwgcmVjdHNbaV0u
dG9wLCByZWN0c1tpXS5yaWdodCAtIHJlY3RzW2ldLmxlZnQsIHJlY3RzW2ldLmJvdHRvbSAtIHJl
Y3RzW2ldLnRvcCk7Ci0gICAgICAgIG1fa2VlcFZpc2libGVSZWN0LnVuaXRlKGFkZFJlY3QpOwot
ICAgIH0KLQotICAgIC8vIERvbid0IGNhdXNlIGEgcG9zc2libGUgc2Nyb2xsIGlmIHRoZSByZXN1
bHQgaXMgYW4gZW1wdHkgcmVjdGFuZ2xlLgotICAgIGlmIChtX2tlZXBWaXNpYmxlUmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEFkanVzdCB0aGUgcmVjdCB0byB0aGUg
cGFyZW50IHdpbmRvdyBhbmQgdGhlbiBhZGp1c3QgZm9yIHNjcm9sbGluZy4KLSAgICBtX2tlZXBW
aXNpYmxlUmVjdCA9IG1fdmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhtX2tlZXBWaXNp
YmxlUmVjdCk7Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0ZyYW1lVmlldyhtX3ZpZXct
PnBhcmVudCgpKTsKLSAgICBtX2tlZXBWaXNpYmxlUmVjdC5tb3ZlKGZyYW1lVmlldy0+c2Nyb2xs
UG9zaXRpb24oKS54KCksIGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKS55KCkpOwotCi0gICAg
ZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5lbnN1cmVDb250
ZW50VmlzaWJsZSgpOwotfQotCi12b2lkIFBsdWdpblZpZXdQcml2YXRlOjpjbGVhclZpc2libGVS
ZWN0cygpCi17Ci0gICAgaWYgKCFtX2tlZXBWaXNpYmxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IHNldFZpc2libGVSZWN0cygwLCAwKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6c2hv
d0tleWJvYXJkKGJvb2wgdmFsdWUpCi17Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0Zy
YW1lVmlldyhtX3ZpZXctPnBhcmVudCgpKTsKLSAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+
cGxhdGZvcm1QYWdlQ2xpZW50KCktPnNob3dWaXJ0dWFsS2V5Ym9hcmQodmFsdWUpOwotfQotCi12
b2lkIFBsdWdpblZpZXdQcml2YXRlOjpyZXF1ZXN0RnVsbFNjcmVlbigpCi17Ci0gICAgaWYgKEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gdG9GcmFtZVZpZXcobV92aWV3LT5wYXJlbnQoKSkpCi0gICAg
ICAgIGlmIChmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnNo
b3VsZFBsdWdpbkVudGVyRnVsbFNjcmVlbihtX3ZpZXcsIG1fcGx1Z2luVW5pcXVlUHJlZml4LmNf
c3RyKCkpKQotICAgICAgICAgICAgbV92aWV3LT5oYW5kbGVGdWxsU2NyZWVuQWxsb3dlZEV2ZW50
KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlld1ByaXZhdGU6OmV4aXRGdWxsU2NyZWVuKCkKLXsKLSAg
ICBtX3ZpZXctPmhhbmRsZUZ1bGxTY3JlZW5FeGl0RXZlbnQoKTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3UHJpdmF0ZTo6cmVxdWVzdENlbnRlckZpdFpvb20oKQotewotICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gdG9GcmFtZVZpZXcobV92aWV3LT5wYXJlbnQoKSk7Ci0KLSAgICBpZiAoIWZyYW1l
VmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBs
YXRmb3JtUGFnZUNsaWVudCgpLT56b29tVG9Db250ZW50UmVjdChtX3ZpZXctPm1fd2luZG93UmVj
dCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlld1ByaXZhdGU6OmxvY2tPcmllbnRhdGlvbihib29sIGxh
bmRzY2FwZSkKLXsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KG1fdmll
dy0+cGFyZW50KCkpOwotCi0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+bG9ja09y
aWVudGF0aW9uKGxhbmRzY2FwZSk7Ci0gICAgbV9vcmllbnRhdGlvbkxvY2tlZCA9IHRydWU7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlld1ByaXZhdGU6OnVubG9ja09yaWVudGF0aW9uKCkKLXsKLSAgICBp
ZiAoIW1fb3JpZW50YXRpb25Mb2NrZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gdG9GcmFtZVZpZXcobV92aWV3LT5wYXJlbnQoKSk7Ci0KLSAgICBpZiAo
IWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZnJhbWVWaWV3LT5ob3N0V2luZG93
KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT51bmxvY2tPcmllbnRhdGlvbigpOwotICAgIG1fb3Jp
ZW50YXRpb25Mb2NrZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6cHJl
dmVudElkbGUoYm9vbCBwcmV2ZW50SWRsZSkKLXsKLSAgICBpZiAocHJldmVudElkbGUgPT0gbV9p
ZGxlUHJldmVudGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IHRvRnJhbWVWaWV3KG1fdmlldy0+cGFyZW50KCkpOwotICAgIGlmICghZnJhbWVWaWV3KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1Q
YWdlQ2xpZW50KCktPnNldFByZXZlbnRzU2NyZWVuRGltbWluZyhwcmV2ZW50SWRsZSk7Ci0gICAg
bV9pZGxlUHJldmVudGVkID0gcHJldmVudElkbGU7Ci19Ci0KLXZvaWQgUGx1Z2luVmlld1ByaXZh
dGU6OnNldEhvbGVQdW5jaChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsK
LSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCi0gICAgICAgIG1faG9sZVB1bmNoUmVj
dCA9IEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZWxzZQotICAgICAgICBtX2hv
bGVQdW5jaFJlY3QgPSBJbnRSZWN0KCk7Ci0KLSAgICAvLyBDbGlwIHRoZSBob2xlIHB1bmNoIHJl
Y3RhbmdsZSBpbiBjYXNlIGEgcGx1Z2luIGlzICdvdmVyemVhbG91cycsIG9yIAotICAgIC8vIGRv
ZXMgbm90IGNsZWFuIHVwIHRoZSBob2xlIHB1bmNoIHJlY3RhbmdsZSBjb3JyZWN0bHkgd2hlbiBl
eGl0aW5nIAotICAgIC8vIGZ1bGxzY3JlZW4gKHdpbGwgbWFzayBidWdzIGluIHRoZSBwbHVnaW4p
LgotICAgIG1faG9sZVB1bmNoUmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwg
bV92aWV3LT5mcmFtZVJlY3QoKS5zaXplKCkpKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICBpZiAobV9wbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgIEludFJlY3QgcmVj
dCA9IG1faG9sZVB1bmNoUmVjdDsKLQotICAgICAgICAvLyBUcmFuc2xhdGUgZnJvbSBwbHVnaW4g
Y29vcmRpbmF0ZXMgdG8gY29udGVudHMgY29vcmRpbmF0ZXMuCi0gICAgICAgIGlmICghbV9ob2xl
UHVuY2hSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlY3QubW92ZShtX3ZpZXctPmZyYW1l
UmVjdCgpLngoKSwgbV92aWV3LT5mcmFtZVJlY3QoKS55KCkpOwotCi0gICAgICAgIE93blB0cjxI
b2xlUHVuY2hEYXRhPiBocCA9IGFkb3B0UHRyKG5ldyBIb2xlUHVuY2hEYXRhKTsKLSAgICAgICAg
aHAtPnggPSBtX2hvbGVQdW5jaFJlY3QueCgpOwotICAgICAgICBocC0+eSA9IG1faG9sZVB1bmNo
UmVjdC55KCk7Ci0gICAgICAgIGhwLT53ID0gbV9ob2xlUHVuY2hSZWN0LndpZHRoKCk7Ci0gICAg
ICAgIGhwLT5oID0gbV9ob2xlUHVuY2hSZWN0LmhlaWdodCgpOwotICAgICAgICBocC0+bGF5ZXIg
PSBtX3BsYXRmb3JtTGF5ZXI7Ci0KLSAgICAgICAgLy8gTm90aWZ5IGNvbXBvc2l0aW5nIGxheWVy
IGFuZCBwYWdlIGNsaWVudCBpbiBvcmRlciB0byBiZSBhYmxlIHRvCi0gICAgICAgIC8vIHB1bmNo
IHRocm91Z2ggY29tcG9zaXRlZCBhbmQgbm9uLWNvbXBvc2l0ZWQgcGFydHMgb2YgdGhlIHBhZ2Uu
Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQobnBTZXRIb2xlUHVuY2hIYW5kbGVyLCBocC5sZWFr
UHRyKCkpOyAvLyBucFNldEhvbGVQdW5jaEhhbmRsZXIoKSB0YWtlcyBvd25lcnNoaXAgb2YgaHAu
Ci0gICAgfQotI2VuZGlmCi19Ci0KLU5QU3VyZmFjZSBQbHVnaW5WaWV3UHJpdmF0ZTo6bG9ja0Jh
Y2tCdWZmZXIoKQotewotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbV9iYWNrQnVmZmVyTXV0ZXgp
OwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZmZXIgPSBt
X3BsdWdpbkJ1ZmZlcnNbKG1fcGx1Z2luRnJvbnRCdWZmZXIgKyAxKSAlIFBMVUdJTl9CVUZGRVJT
XTsKLQotICAgIGlmICghYnVmZmVyIHx8ICFCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OnBsYXRmb3JtQnVmZmVySGFuZGxlKGJ1ZmZlcikpIHsKLSAgICAgICAgdW5sb2NrQmFja0J1ZmZl
cigpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpwbGF0Zm9ybUJ1ZmZlckhhbmRsZShidWZmZXIpOwotfQotCi12
b2lkIFBsdWdpblZpZXdQcml2YXRlOjp1bmxvY2tCYWNrQnVmZmVyKCkKLXsKLSAgICBwdGhyZWFk
X211dGV4X3VubG9jaygmbV9iYWNrQnVmZmVyTXV0ZXgpOwotfQotCi1CbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogUGx1Z2luVmlld1ByaXZhdGU6OmxvY2tSZWFkRnJvbnRC
dWZmZXJJbnRlcm5hbCgpCi17Ci0gICAgcHRocmVhZF9yd2xvY2tfcmRsb2NrKCZtX2Zyb250QnVm
ZmVyUndMb2NrKTsKLSAgICByZXR1cm4gbV9wbHVnaW5CdWZmZXJzW21fcGx1Z2luRnJvbnRCdWZm
ZXJdOwotfQotCi1OUFN1cmZhY2UgUGx1Z2luVmlld1ByaXZhdGU6OmxvY2tSZWFkRnJvbnRCdWZm
ZXIoKQotewotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZm
ZXIgPSBsb2NrUmVhZEZyb250QnVmZmVySW50ZXJuYWwoKTsKLQotICAgIGlmICghYnVmZmVyIHx8
ICFCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnBsYXRmb3JtQnVmZmVySGFuZGxlKGJ1
ZmZlcikpIHsKLSAgICAgICAgdW5sb2NrUmVhZEZyb250QnVmZmVyKCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OnBsYXRmb3JtQnVmZmVySGFuZGxlKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgUGx1Z2luVmlld1ByaXZh
dGU6OnVubG9ja1JlYWRGcm9udEJ1ZmZlcigpCi17Ci0gICAgcHRocmVhZF9yd2xvY2tfdW5sb2Nr
KCZtX2Zyb250QnVmZmVyUndMb2NrKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6c3dh
cEJ1ZmZlcnMoKQotewotICAgIFB0aHJlYWRNdXRleExvY2tlciBiYWNrTG9jaygmbV9iYWNrQnVm
ZmVyTXV0ZXgpOwotICAgIFB0aHJlYWRXcml0ZUxvY2tlciBmcm9udExvY2soJm1fZnJvbnRCdWZm
ZXJSd0xvY2spOwotICAgIG1fcGx1Z2luRnJvbnRCdWZmZXIgPSAobV9wbHVnaW5Gcm9udEJ1ZmZl
ciArIDEpICUgMjsKLX0KLQotYm9vbCBQbHVnaW5WaWV3UHJpdmF0ZTo6Y3JlYXRlQnVmZmVycyhO
UFN1cmZhY2VGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgYm9v
bCBzdWNjZXNzID0gdHJ1ZTsKLQotICAgIFB0aHJlYWRNdXRleExvY2tlciBiYWNrTG9jaygmbV9i
YWNrQnVmZmVyTXV0ZXgpOwotICAgIFB0aHJlYWRXcml0ZUxvY2tlciBmcm9udExvY2soJm1fZnJv
bnRCdWZmZXJSd0xvY2spOwotCi0gICAgYm9vbCBkaWREZXN0cm95QnVmZmVycyA9IGZhbHNlOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUExVR0lOX0JVRkZFUlM7IGkrKykgewotICAgICAgICBp
ZiAobV9wbHVnaW5CdWZmZXJzW2ldKSB7Ci0gICAgICAgICAgICBkaWREZXN0cm95QnVmZmVycyA9
IHRydWU7Ci0gICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ry
b3lCdWZmZXIobV9wbHVnaW5CdWZmZXJzW2ldKTsKLSAgICAgICAgICAgIG1fcGx1Z2luQnVmZmVy
c1tpXSA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQg
PD0gMCkKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIG1fcGx1Z2luQnVmZmVyc1tpXSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6Y3JlYXRlQnVmZmVyKAotICAgICAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpLAotICAgICAgICAgICAgICAgIHRvQnVmZmVyVHlwZShmb3Jt
YXQpKTsKLQotICAgICAgICAgICAgaWYgKCFtX3BsdWdpbkJ1ZmZlcnNbaV0pCi0gICAgICAgICAg
ICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHN1Y2Nl
c3MpIHsKLSAgICAgICAgbV9wbHVnaW5CdWZmZXJTaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgbV9wbHVnaW5CdWZmZXJUeXBlID0gdG9CdWZmZXJUeXBlKGZvcm1hdCk7Ci0K
LSAgICAgICAgaWYgKGRpZERlc3Ryb3lCdWZmZXJzKSB7Ci0gICAgICAgICAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRocmVhZE1lc3NhZ2VDbGllbnQoKS0+ZGlzcGF0Y2hT
eW5jTWVzc2FnZSgKLSAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Y3JlYXRl
RnVuY3Rpb25DYWxsTWVzc2FnZSgmQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpjb2xs
ZWN0VGhyZWFkU3BlY2lmaWNHYXJiYWdlKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBtX3BsdWdpbkJ1ZmZlclNpemUgPSBJbnRTaXplKCk7Ci0gICAgICAgIG1fcGx1Z2luQnVm
ZmVyVHlwZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGx1Z2luQnVmZmVyV2l0
aEFscGhhOwotICAgICAgICBkZXN0cm95QnVmZmVycygpOwotICAgIH0KLQotICAgIHJldHVybiBz
dWNjZXNzOwotfQotCi1ib29sIFBsdWdpblZpZXdQcml2YXRlOjpyZXNpemVCdWZmZXJzKE5QU3Vy
ZmFjZUZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBib29sIHN1
Y2Nlc3MgPSB0cnVlOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gYnVmZmVyIGNyZWF0ZWQsIHRo
ZW4gdHJ5IHRvIGNyZWF0ZSBpdC4KLSAgICBpZiAoIW1fcGx1Z2luQnVmZmVyU2l6ZS53aWR0aCgp
IHx8ICFtX3BsdWdpbkJ1ZmZlclNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVC
dWZmZXJzKGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBpZiAoIXdpZHRoIHx8ICFoZWln
aHQpCi0gICAgICAgIHJldHVybiBkZXN0cm95QnVmZmVycygpOwotCi0gICAgUHRocmVhZE11dGV4
TG9ja2VyIGJhY2tMb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7Ci0gICAgUHRocmVhZFdyaXRlTG9j
a2VyIGZyb250TG9jaygmbV9mcm9udEJ1ZmZlclJ3TG9jayk7Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IFBMVUdJTl9CVUZGRVJTICYmIHN1Y2Nlc3M7IGkrKykgewotICAgICAgICBzdWNjZXNz
ICY9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cmVhbGxvY0J1ZmZlcihtX3BsdWdp
bkJ1ZmZlcnNbaV0sCi0gICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSwKLSAgICAgICAgICAgIHRvQnVmZmVyVHlwZShmb3JtYXQpKTsKLSAgICB9
Ci0KLSAgICBpZiAoc3VjY2VzcykgewotICAgICAgICBtX3BsdWdpbkJ1ZmZlclNpemUgPSBJbnRT
aXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBtX3BsdWdpbkJ1ZmZlclR5cGUgPSB0b0J1ZmZl
clR5cGUoZm9ybWF0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQXR0
ZW1wdCB0byB1bmRvIGlmIHdlIGZhaWxlZCB0byBnZXQgdGhlIG5ldyBzaXplL2Zvcm1hdC4gV2Ug
Y2FuJ3QgZ3VhcmFudGVlCi0gICAgLy8gd2Ugd2lsbCBnZXQgaXQgYmFjayB0aG91Z2guCi0gICAg
aWYgKCFtX3BsdWdpbkJ1ZmZlclNpemUud2lkdGgoKSB8fCAhbV9wbHVnaW5CdWZmZXJTaXplLmhl
aWdodCgpKSB7Ci0gICAgICAgIGRlc3Ryb3lCdWZmZXJzKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBib29sIHVuZG9uZSA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBQTFVHSU5fQlVGRkVSUzsgaSsrKSB7Ci0gICAgICAgIHVuZG9uZSAmPSBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnJlYWxsb2NCdWZmZXIobV9wbHVnaW5CdWZmZXJzW2ldLAot
ICAgICAgICAgICAgbV9wbHVnaW5CdWZmZXJTaXplLCBtX3BsdWdpbkJ1ZmZlclR5cGUpOwotICAg
IH0KLQotICAgIC8vIElmIHdlIGZhaWwgdG8gdW5kbywgZGVsZXRlIHRoZSBidWZmZXJzIGFsdG9n
ZXRoZXIuCi0gICAgaWYgKCF1bmRvbmUpCi0gICAgICAgIGRlc3Ryb3lCdWZmZXJzKCk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUGx1Z2luVmlld1ByaXZhdGU6OmRlc3Ryb3lCdWZm
ZXJzKCkKLXsKLSAgICBib29sIGRpZERlc3Ryb3lCdWZmZXJzID0gZmFsc2U7Ci0KLSAgICB7Ci0g
ICAgICAgIFB0aHJlYWRNdXRleExvY2tlciBiYWNrTG9jaygmbV9iYWNrQnVmZmVyTXV0ZXgpOwot
ICAgICAgICBQdGhyZWFkV3JpdGVMb2NrZXIgZnJvbnRMb2NrKCZtX2Zyb250QnVmZmVyUndMb2Nr
KTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFBMVUdJTl9CVUZGRVJTOyBpKyspIHsK
LSAgICAgICAgICAgIGlmIChtX3BsdWdpbkJ1ZmZlcnNbaV0pIHsKLSAgICAgICAgICAgICAgICBk
aWREZXN0cm95QnVmZmVycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpkZXN0cm95QnVmZmVyKG1fcGx1Z2luQnVmZmVyc1tpXSk7Ci0gICAg
ICAgICAgICAgICAgbV9wbHVnaW5CdWZmZXJzW2ldID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBtX3BsdWdpbkJ1ZmZlclNpemUgPSBJbnRTaXplKCk7Ci0gICAgfQotCi0g
ICAgaWYgKGRpZERlc3Ryb3lCdWZmZXJzKSB7Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3Jt
Ojp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgpLT5kaXNwYXRjaFN5bmNNZXNzYWdl
KAotICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmNyZWF0ZUZ1bmN0aW9uQ2FsbE1l
c3NhZ2UoJkJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Y29sbGVjdFRocmVhZFNwZWNp
ZmljR2FyYmFnZSkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5
L1BsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVycnkuaAkocmV2
aXNpb24gMTYxNTk2KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdp
blZpZXdQcml2YXRlQmxhY2tCZXJyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5W
aWV3UHJpdmF0ZUJsYWNrQmVycnlfaAotI2RlZmluZSBQbHVnaW5WaWV3UHJpdmF0ZUJsYWNrQmVy
cnlfaAotCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1JbnRSZWN0UmVn
aW9uLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi0jZGVmaW5lIFBMVUdJTl9CVUZGRVJTIDIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbHVnaW5WaWV3UHJpdmF0ZSB7Ci0KLXB1
YmxpYzoKLSAgICBQbHVnaW5WaWV3UHJpdmF0ZShQbHVnaW5WaWV3Kik7Ci0gICAgflBsdWdpblZp
ZXdQcml2YXRlKCk7Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZl
clR5cGUgdG9CdWZmZXJUeXBlKE5QU3VyZmFjZUZvcm1hdCk7Ci0gICAgdm9pZCBzZXRab29tRmFj
dG9yKGZsb2F0KTsKLSAgICB2b2lkIHNldFZpc2libGVSZWN0cyhjb25zdCBOUFJlY3QgcmVjdHNb
XSwgaW50MzJfdCBjb3VudCk7Ci0gICAgdm9pZCBjbGVhclZpc2libGVSZWN0cygpOwotICAgIHZv
aWQgc2hvd0tleWJvYXJkKGJvb2wgdmFsdWUpOwotICAgIHZvaWQgcmVxdWVzdEZ1bGxTY3JlZW4o
KTsKLSAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7Ci0gICAgdm9pZCByZXF1ZXN0Q2VudGVyRml0
Wm9vbSgpOwotICAgIHZvaWQgbG9ja09yaWVudGF0aW9uKGJvb2wgbGFuZHNjYXBlKTsKLSAgICB2
b2lkIHVubG9ja09yaWVudGF0aW9uKCk7Ci0gICAgdm9pZCBwcmV2ZW50SWRsZShib29sIHByZXZl
bnRJZGxlKTsKLSAgICB2b2lkIHNldEhvbGVQdW5jaChpbnQgeCwgaW50IHksIGludCB3aWR0aCwg
aW50IGhlaWdodCk7Ci0gICAgTlBTdXJmYWNlIGxvY2tCYWNrQnVmZmVyKCk7Ci0gICAgdm9pZCB1
bmxvY2tCYWNrQnVmZmVyKCk7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpC
dWZmZXIqIGxvY2tSZWFkRnJvbnRCdWZmZXJJbnRlcm5hbCgpOwotICAgIE5QU3VyZmFjZSBsb2Nr
UmVhZEZyb250QnVmZmVyKCk7Ci0gICAgdm9pZCB1bmxvY2tSZWFkRnJvbnRCdWZmZXIoKTsKLSAg
ICB2b2lkIHN3YXBCdWZmZXJzKCk7Ci0gICAgYm9vbCBjcmVhdGVCdWZmZXJzKE5QU3VyZmFjZUZv
cm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgICBib29sIHJlc2l6ZUJ1ZmZlcnMoTlBT
dXJmYWNlRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgIGJvb2wgZGVzdHJveUJ1
ZmZlcnMoKTsKLQotcHJpdmF0ZToKLSAgICBQbHVnaW5WaWV3KiBtX3ZpZXc7Ci0gICAgcHRocmVh
ZF9tdXRleF90IG1fYmFja0J1ZmZlck11dGV4OwotICAgIHB0aHJlYWRfcndsb2NrX3QgbV9mcm9u
dEJ1ZmZlclJ3TG9jazsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVm
ZmVyKiBtX3BsdWdpbkJ1ZmZlcnNbUExVR0lOX0JVRkZFUlNdOwotICAgIEludFNpemUgbV9wbHVn
aW5CdWZmZXJTaXplOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVy
VHlwZSBtX3BsdWdpbkJ1ZmZlclR5cGU7Ci0gICAgaW50IG1fcGx1Z2luRnJvbnRCdWZmZXI7Ci0K
LSAgICBJbnRSZWN0IG1faG9sZVB1bmNoUmVjdDsKLSAgICBJbnRSZWN0IG1fa2VlcFZpc2libGVS
ZWN0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFJlZlB0cjxQbGF0
Zm9ybUxheWVyPiBtX3BsYXRmb3JtTGF5ZXI7Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9pZGxlUHJl
dmVudGVkOwotICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7Ci0gICAgYm9vbCBt
X3NlbnRPbkxvYWQ7Ci0gICAgYm9vbCBtX2lzRnVsbFNjcmVlbjsKLSAgICBib29sIG1faXNGb2N1
c2VkOwotICAgIGJvb2wgbV9vcmllbnRhdGlvbkxvY2tlZDsKLSAgICBib29sIG1faXNCYWNrZ3Jv
dW5kUGxheWluZzsKLQotICAgIHN0ZDo6c3RyaW5nIG1fcGx1Z2luVW5pcXVlUHJlZml4OwotCi0g
ICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb24gbV9pbnZhbGlkYXRlUmVnaW9u
OwotICAgIGZyaWVuZCBjbGFzcyBQbHVnaW5WaWV3OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9O
UENhbGxiYWNrc0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvYmxhY2tiZXJyeS9OUENhbGxiYWNrc0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvTlBDYWxsYmFja3NCbGFj
a0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiTlBDYWxsYmFja3NCbGFja0JlcnJ5LmgiCi0KLSNpbmNsdWRlICJQbHVnaW5WaWV3UHJpdmF0
ZUJsYWNrQmVycnkuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNs
dWRlICJQbHVnaW5MYXllcldlYktpdFRocmVhZC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotUHRocmVhZE11dGV4TG9ja2VyOjpQdGhyZWFkTXV0ZXhMb2NrZXIocHRocmVhZF9t
dXRleF90KiBtdXRleCkKLSAgICA6IG1fbXV0ZXgobXV0ZXgpCi17Ci0gICAgcHRocmVhZF9tdXRl
eF9sb2NrKG1fbXV0ZXgpOwotfQotCi1QdGhyZWFkTXV0ZXhMb2NrZXI6On5QdGhyZWFkTXV0ZXhM
b2NrZXIoKQotewotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKG1fbXV0ZXgpOwotfQotCi1QdGhy
ZWFkUmVhZExvY2tlcjo6UHRocmVhZFJlYWRMb2NrZXIocHRocmVhZF9yd2xvY2tfdCogcndsb2Nr
KQotICAgIDogbV9yd2xvY2socndsb2NrKQotewotICAgIHB0aHJlYWRfcndsb2NrX3JkbG9jayht
X3J3bG9jayk7Ci19Ci0KLVB0aHJlYWRSZWFkTG9ja2VyOjp+UHRocmVhZFJlYWRMb2NrZXIoKQot
ewotICAgIHB0aHJlYWRfcndsb2NrX3VubG9jayhtX3J3bG9jayk7Ci19Ci0KLVB0aHJlYWRXcml0
ZUxvY2tlcjo6UHRocmVhZFdyaXRlTG9ja2VyKHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaykKLSAg
ICA6IG1fcndsb2NrKHJ3bG9jaykKLXsKLSAgICBwdGhyZWFkX3J3bG9ja193cmxvY2sobV9yd2xv
Y2spOwotfQotCi1QdGhyZWFkV3JpdGVMb2NrZXI6On5QdGhyZWFkV3JpdGVMb2NrZXIoKQotewot
ICAgIHB0aHJlYWRfcndsb2NrX3VubG9jayhtX3J3bG9jayk7Ci19Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi12b2lkIG5wU2V0SG9sZVB1bmNoSGFuZGxlcih2b2lkKiBob2xl
UHVuY2hEYXRhKQotewotICAgIE93blB0cjxIb2xlUHVuY2hEYXRhPiBkYXRhID0gYWRvcHRQdHIo
c3RhdGljX2Nhc3Q8SG9sZVB1bmNoRGF0YSo+KGhvbGVQdW5jaERhdGEpKTsKLSAgICBpZiAoZGF0
YS0+bGF5ZXIpCi0gICAgICAgIHN0YXRpY19jYXN0PFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkKj4o
ZGF0YS0+bGF5ZXIuZ2V0KCkpLT5zZXRIb2xlUHVuY2hSZWN0KEludFJlY3QoZGF0YS0+eCwgZGF0
YS0+eSwgZGF0YS0+dywgZGF0YS0+aCkpOwotfQotI2VuZGlmCi0KLS8vIE5QQVBJIGNhbGxiYWNr
IGZ1bmN0aW9ucwotCi12b2lkIHNldFZpc2libGVSZWN0cyhOUFAgaW5zdGFuY2UsIGNvbnN0IE5Q
UmVjdCByZWN0c1tdLCBpbnQzMl90IGNvdW50KQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBz
dGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVnaW5WaWV3
UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgdmlld1ByaXZh
dGUtPnNldFZpc2libGVSZWN0cyhyZWN0cywgY291bnQpOwotfQotCi12b2lkIGNsZWFyVmlzaWJs
ZVJlY3RzKE5QUCBpbnN0YW5jZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nh
c3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7Ci0gICAgUGx1Z2luVmlld1ByaXZhdGUq
IHZpZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOwotICAgIHZpZXdQcml2YXRlLT5jbGVh
clZpc2libGVSZWN0cygpOwotfQotCi12b2lkIHNob3dLZXlib2FyZChOUFAgaW5zdGFuY2UsIGJv
b2wgdmFsdWUpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZp
ZXcqPihpbnN0YW5jZS0+bmRhdGEpOwotICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0
ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKLSAgICB2aWV3UHJpdmF0ZS0+c2hvd0tleWJvYXJkKHZh
bHVlKTsKLX0KLQotdm9pZCByZXF1ZXN0RnVsbFNjcmVlbihOUFAgaW5zdGFuY2UpCi17Ci0gICAg
UGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRh
dGEpOwotICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZh
dGUoKTsKLSAgICB2aWV3UHJpdmF0ZS0+cmVxdWVzdEZ1bGxTY3JlZW4oKTsKLX0KLQotdm9pZCBl
eGl0RnVsbFNjcmVlbihOUFAgaW5zdGFuY2UpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IHN0
YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOwotICAgIFBsdWdpblZpZXdQ
cml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKLSAgICB2aWV3UHJpdmF0
ZS0+ZXhpdEZ1bGxTY3JlZW4oKTsKLX0KLQotdm9pZCByZXF1ZXN0Q2VudGVyRml0Wm9vbShOUFAg
aW5zdGFuY2UpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZp
ZXcqPihpbnN0YW5jZS0+bmRhdGEpOwotICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0
ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKLSAgICB2aWV3UHJpdmF0ZS0+cmVxdWVzdENlbnRlckZp
dFpvb20oKTsKLX0KLQotdm9pZCBsb2NrT3JpZW50YXRpb24oTlBQIGluc3RhbmNlLCBib29sIGxh
bmRzY2FwZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmll
dyo+KGluc3RhbmNlLT5uZGF0YSk7Ci0gICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRl
ID0gdmlldy0+Z2V0UHJpdmF0ZSgpOwotICAgIHZpZXdQcml2YXRlLT5sb2NrT3JpZW50YXRpb24o
bGFuZHNjYXBlKTsKLX0KLQotdm9pZCB1bmxvY2tPcmllbnRhdGlvbihOUFAgaW5zdGFuY2UpCi17
Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5j
ZS0+bmRhdGEpOwotICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdl
dFByaXZhdGUoKTsKLSAgICB2aWV3UHJpdmF0ZS0+dW5sb2NrT3JpZW50YXRpb24oKTsKLX0KLQot
dm9pZCBwcmV2ZW50SWRsZShOUFAgaW5zdGFuY2UsIGJvb2wgcHJldmVudElkbGUpCi17Ci0gICAg
UGx1Z2luVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRh
dGEpOwotICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZh
dGUoKTsKLSAgICB2aWV3UHJpdmF0ZS0+cHJldmVudElkbGUocHJldmVudElkbGUpOwotfQotCi1O
UFN1cmZhY2UgbG9ja0JhY2tCdWZmZXIoTlBQIGluc3RhbmNlKQotewotICAgIFBsdWdpblZpZXcq
IHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQ
bHVnaW5WaWV3UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAg
cmV0dXJuIHZpZXdQcml2YXRlLT5sb2NrQmFja0J1ZmZlcigpOwotfQotCi12b2lkIHVubG9ja0Jh
Y2tCdWZmZXIoTlBQIGluc3RhbmNlKQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNf
Y2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVnaW5WaWV3UHJpdmF0
ZSogdmlld1ByaXZhdGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgdmlld1ByaXZhdGUtPnVu
bG9ja0JhY2tCdWZmZXIoKTsKLX0KLQotTlBTdXJmYWNlIGxvY2tSZWFkRnJvbnRCdWZmZXIoTlBQ
IGluc3RhbmNlKQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5W
aWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmlld1ByaXZh
dGUgPSB2aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgcmV0dXJuIHZpZXdQcml2YXRlLT5sb2NrUmVh
ZEZyb250QnVmZmVyKCk7Ci19Ci0KLXZvaWQgdW5sb2NrUmVhZEZyb250QnVmZmVyKE5QUCBpbnN0
YW5jZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+
KGluc3RhbmNlLT5uZGF0YSk7Ci0gICAgUGx1Z2luVmlld1ByaXZhdGUqIHZpZXdQcml2YXRlID0g
dmlldy0+Z2V0UHJpdmF0ZSgpOwotICAgIHZpZXdQcml2YXRlLT51bmxvY2tSZWFkRnJvbnRCdWZm
ZXIoKTsKLX0KLQotdm9pZCBzd2FwQnVmZmVycyhOUFAgaW5zdGFuY2UpCi17Ci0gICAgUGx1Z2lu
VmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOwot
ICAgIFBsdWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsK
LSAgICB2aWV3UHJpdmF0ZS0+c3dhcEJ1ZmZlcnMoKTsKLX0KLQotYm9vbCBjcmVhdGVCdWZmZXJz
KE5QUCBpbnN0YW5jZSwgTlBTdXJmYWNlRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4o
aW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmlld1ByaXZhdGUgPSB2
aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgcmV0dXJuIHZpZXdQcml2YXRlLT5jcmVhdGVCdWZmZXJz
KGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgZGVzdHJveUJ1ZmZlcnMoTlBQIGlu
c3RhbmNlKQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3
Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBQbHVnaW5WaWV3UHJpdmF0ZSogdmlld1ByaXZhdGUg
PSB2aWV3LT5nZXRQcml2YXRlKCk7Ci0gICAgcmV0dXJuIHZpZXdQcml2YXRlLT5kZXN0cm95QnVm
ZmVycygpOwotfQotCi1ib29sIHJlc2l6ZUJ1ZmZlcnMoTlBQIGluc3RhbmNlLCBOUFN1cmZhY2VG
b3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgUGx1Z2luVmlldyog
dmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOwotICAgIFBs
dWdpblZpZXdQcml2YXRlKiB2aWV3UHJpdmF0ZSA9IHZpZXctPmdldFByaXZhdGUoKTsKLSAgICBy
ZXR1cm4gdmlld1ByaXZhdGUtPnJlc2l6ZUJ1ZmZlcnMoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
LX0KLQotdm9pZCBzZXRIb2xlUHVuY2goTlBQIGluc3RhbmNlLCBpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8
UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7Ci0gICAgUGx1Z2luVmlld1ByaXZhdGUqIHZp
ZXdQcml2YXRlID0gdmlldy0+Z2V0UHJpdmF0ZSgpOwotICAgIHZpZXdQcml2YXRlLT5zZXRIb2xl
UHVuY2goeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLU5QQ2FsbGJhY2tzIHNfTnBDYWxsYmFj
a3MgPSB7Ci0gICAgc2V0VmlzaWJsZVJlY3RzLAotICAgIGNsZWFyVmlzaWJsZVJlY3RzLAotICAg
IHNob3dLZXlib2FyZCwKLSAgICByZXF1ZXN0RnVsbFNjcmVlbiwKLSAgICBleGl0RnVsbFNjcmVl
biwKLSAgICByZXF1ZXN0Q2VudGVyRml0Wm9vbSwKLSAgICBsb2NrT3JpZW50YXRpb24sCi0gICAg
dW5sb2NrT3JpZW50YXRpb24sCi0gICAgcHJldmVudElkbGUsCi0gICAgbG9ja0JhY2tCdWZmZXIs
Ci0gICAgdW5sb2NrQmFja0J1ZmZlciwKLSAgICBsb2NrUmVhZEZyb250QnVmZmVyLAotICAgIHVu
bG9ja1JlYWRGcm9udEJ1ZmZlciwKLSAgICBzd2FwQnVmZmVycywKLSAgICBjcmVhdGVCdWZmZXJz
LAotICAgIGRlc3Ryb3lCdWZmZXJzLAotICAgIHJlc2l6ZUJ1ZmZlcnMsCi0gICAgc2V0SG9sZVB1
bmNoCi19OwotCi19IC8vIE5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvYmxhY2tiZXJyeS9OUENhbGxiYWNrc0JsYWNrQmVycnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvTlBDYWxsYmFja3NCbGFja0JlcnJ5
LmgJKHJldmlzaW9uIDE2MTU5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJy
eS9OUENhbGxiYWNrc0JsYWNrQmVycnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgTlBDYWxs
YmFja3NCbGFja0JlcnJ5X2gKLSNkZWZpbmUgTlBDYWxsYmFja3NCbGFja0JlcnJ5X2gKLQotI2lu
Y2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RydWN0IFB0aHJlYWRNdXRleExvY2tlciB7Ci0gICAgUHRocmVhZE11dGV4
TG9ja2VyKHB0aHJlYWRfbXV0ZXhfdCopOwotICAgIH5QdGhyZWFkTXV0ZXhMb2NrZXIoKTsKLQot
ICAgIHB0aHJlYWRfbXV0ZXhfdCogbV9tdXRleDsKLX07Ci0KLXN0cnVjdCBQdGhyZWFkUmVhZExv
Y2tlciB7Ci0gICAgUHRocmVhZFJlYWRMb2NrZXIocHRocmVhZF9yd2xvY2tfdCopOwotICAgIH5Q
dGhyZWFkUmVhZExvY2tlcigpOwotCi0gICAgcHRocmVhZF9yd2xvY2tfdCogbV9yd2xvY2s7Ci19
OwotCi1zdHJ1Y3QgUHRocmVhZFdyaXRlTG9ja2VyIHsKLSAgICBQdGhyZWFkV3JpdGVMb2NrZXIo
cHRocmVhZF9yd2xvY2tfdCopOwotICAgIH5QdGhyZWFkV3JpdGVMb2NrZXIoKTsKLQotICAgIHB0
aHJlYWRfcndsb2NrX3QqIG1fcndsb2NrOwotfTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLXN0cnVjdCBIb2xlUHVuY2hEYXRhIHsKLSAgICBpbnQgeCwgeTsKLSAgICBpbnQg
dywgaDsKLSAgICBSZWZQdHI8UGxhdGZvcm1MYXllcj4gbGF5ZXI7Ci19OwotCi12b2lkIG5wU2V0
SG9sZVB1bmNoSGFuZGxlcih2b2lkKiBob2xlUHVuY2hEYXRhKTsKLSNlbmRpZgotCi0vLyBTdGF0
aWMgTlBBUEkgQ2FsbGJhY2tzCi0KLXZvaWQgc2V0VmlzaWJsZVJlY3RzKE5QUCwgY29uc3QgTlBS
ZWN0IHJlY3RzW10sIGludDMyX3QgY291bnQpOwotdm9pZCBjbGVhclZpc2libGVSZWN0cyhOUFAp
Owotdm9pZCBzaG93S2V5Ym9hcmQoTlBQLCBib29sIHZhbHVlKTsKLXZvaWQgcmVxdWVzdEZ1bGxT
Y3JlZW4oTlBQKTsKLXZvaWQgZXhpdEZ1bGxTY3JlZW4oTlBQKTsKLXZvaWQgcmVxdWVzdENlbnRl
ckZpdFpvb20oTlBQKTsKLXZvaWQgbG9ja09yaWVudGF0aW9uKE5QUCwgYm9vbCBsYW5kc2NhcGUp
Owotdm9pZCB1bmxvY2tPcmllbnRhdGlvbihOUFApOwotdm9pZCBwcmV2ZW50SWRsZShOUFAsIGJv
b2wgcHJldmVudElkbGUpOwotTlBTdXJmYWNlIGxvY2tCYWNrQnVmZmVyKE5QUCk7Ci12b2lkIHVu
bG9ja0JhY2tCdWZmZXIoTlBQKTsKLU5QU3VyZmFjZSBsb2NrUmVhZEZyb250QnVmZmVyKE5QUCk7
Ci12b2lkIHVubG9ja1JlYWRGcm9udEJ1ZmZlcihOUFApOwotdm9pZCBzd2FwQnVmZmVycyhOUFAp
OwotYm9vbCBjcmVhdGVCdWZmZXJzKE5QUCwgTlBTdXJmYWNlRm9ybWF0LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpOwotYm9vbCBkZXN0cm95QnVmZmVycyhOUFApOwotYm9vbCByZXNpemVCdWZmZXJz
KE5QUCwgTlBTdXJmYWNlRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotdm9pZCBzZXRI
b2xlUHVuY2goTlBQLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KLWV4
dGVybiBOUENhbGxiYWNrcyBzX05wQ2FsbGJhY2tzOwotCi19IC8vIE5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdp
blBhY2thZ2VCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL2JsYWNrYmVycnkvUGx1Z2luUGFja2FnZUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE1
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luUGFja2FnZUJs
YWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCIKLQotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5jbHVkZSAi
bnBydW50aW1lX2ltcGwuaCIKLQotI2luY2x1ZGUgPGRsZmNuLmg+Ci0jaW5jbHVkZSA8ZXJybm8u
aD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nSGFzaGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1leHRlcm4gaW50IGVycm5vOwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgbnBuTWVtRnJlZSh2b2lkKiBwdHIpCi17Ci0gICAgLy8g
V2UgY291bGQgdXNlIGZhc3RGcmVlIGhlcmUsIGJ1dCB0aGVyZSBtaWdodCBiZSBwbHVnLWlucyB0
aGF0IG1peCBOUE5fTWVtQWxsb2MvTlBOX01lbUZyZWUgd2l0aCBtYWxsb2MgYW5kIGZyZWUsCi0g
ICAgLy8gc28gaGF2aW5nIHRoZW0gYmUgZXF1aXZhbGVudCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVh
LgotICAgIGZyZWUocHRyKTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChQbHVnaW5Q
YWNrYWdlIGNvbnN0JiBhLCBQbHVnaW5QYWNrYWdlIGNvbnN0JiBiKQotewotICAgIGlmIChhLm1f
bmFtZSAhPSBiLm1fbmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEubV9k
ZXNjcmlwdGlvbiAhPSBiLm1fZGVzY3JpcHRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmIChhLm1fbWltZVRvRXh0ZW5zaW9ucy5zaXplKCkgIT0gYi5tX21pbWVUb0V4dGVuc2lv
bnMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNSU1FVG9FeHRlbnNpb25z
TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBhLm1fbWltZVRvRXh0ZW5zaW9ucy5lbmQo
KS5rZXlzKCk7Ci0gICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvcjo6
S2V5cyBpdCA9IGEubV9taW1lVG9FeHRlbnNpb25zLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKCFiLm1fbWltZVRvRXh0ZW5zaW9ucy5jb250YWlucygqaXQp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCi17Ci0gICAgaWYgKCFsb2FkKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdh
eSB0byBnZXQgYXJvdW5kIHRoZSBmZXRjaGluZm8gbG9hZC4KLSAgICAvLyBXZSBhcmUgZmV0Y2hp
bmcgdGhlIGluZm8uIFRlY2huaWNhbGx5IHdlIGhhdmUgbm90IGxvYWRlZCB0aGUgcGx1Z2luLiBQ
bHVnaW5WaWV3OjpJbml0IHdpbGwgbG9hZCB0aGUgcGx1Z2luIHNvIGRlY3JlbWVudCB0aGUgY291
bnRlcgotICAgIG1fbG9hZENvdW50LS07Ci0KLSAgICBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5j
UHRyIGdldERlc2NyaXB0aW9uID0gKE5QX0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIpIGRsc3lt
KG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9uIik7Ci0gICAgTlBQX0dldFZhbHVlUHJv
Y1B0ciBnZXRWYWx1ZSA9IChOUFBfR2V0VmFsdWVQcm9jUHRyKSBkbHN5bShtX21vZHVsZSwgIk5Q
X0dldFZhbHVlIik7Ci0KLSAgICBpZiAoIWdldERlc2NyaXB0aW9uIHx8ICFnZXRWYWx1ZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2hhciogYnVmID0gMDsKLSAgICBOUEVycm9yIGVy
ciA9IGdldFZhbHVlKDAsIE5QUFZwbHVnaW5OYW1lU3RyaW5nLCAodm9pZCAqKSAmYnVmKTsKLSAg
ICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBtX25hbWUgPSBidWY7Ci0KLSAgICBlcnIgPSBnZXRWYWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3Jp
cHRpb25TdHJpbmcsICh2b2lkICopICZidWYpOwotICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJS
T1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZGVzY3JpcHRpb24gPSBidWY7Ci0g
ICAgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOwotCi0gICAgU3RyaW5n
IHMgPSBnZXREZXNjcmlwdGlvbigpOwotICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgIHMu
c3BsaXQoVUNoYXIoJzsnKSwgZmFsc2UsIHR5cGVzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gbWltZTsK
LSAgICAgICAgdHlwZXNbaV0uc3BsaXQoVUNoYXIoJzonKSwgdHJ1ZSwgbWltZSk7Ci0gICAgICAg
IGlmIChtaW1lLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVu
c2lvbnM7Ci0gICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAxKQotICAgICAgICAgICAgICAg
IG1pbWVbMV0uc3BsaXQoVUNoYXIoJywnKSwgZmFsc2UsIGV4dGVuc2lvbnMpOwotICAgICAgICAg
ICAgZGV0ZXJtaW5lUXVpcmtzKG1pbWVbMF0pOwotICAgICAgICAgICAgbV9taW1lVG9FeHRlbnNp
b25zLmFkZChtaW1lWzBdLCBleHRlbnNpb25zKTsKLSAgICAgICAgICAgIGlmIChtaW1lLnNpemUo
KSA+IDIpCi0gICAgICAgICAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVbMF0s
IG1pbWVbMl0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVZl
Y3RvcjxTdHJpbmc+IFBsdWdpblBhY2thZ2U6OnNpdGVzV2l0aERhdGEoKQotewotICAgIFZlY3Rv
cjxTdHJpbmc+IHNpdGVzOwotICAgIHRyeUdldFNpdGVzV2l0aERhdGEoc2l0ZXMpOwotCi0gICAg
cmV0dXJuIHNpdGVzOwotfQotCi1ib29sIFBsdWdpblBhY2thZ2U6OmNsZWFyU2l0ZURhdGEoY29u
c3QgU3RyaW5nJiBzaXRlLCB1aW50NjRfdCBmbGFncywgdWludDY0X3QgbWF4QWdlKQotewotICAg
IGJvb2wgcmVzdWx0ID0gdHJ5Q2xlYXJTaXRlRGF0YShzaXRlLCBmbGFncywgbWF4QWdlKTsKLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZTo6dHJ5R2V0U2l0ZXNX
aXRoRGF0YShWZWN0b3I8U3RyaW5nPiYgc2l0ZXMpCi17Ci0gICAgaWYgKCFsb2FkKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBl
bnN1cmUgdGhlIHBsdWdpbiBpcyBsb2FkZWQuCi0gICAgLy8gUGx1Z2luVmlldzo6SW5pdCB3aWxs
IGxvYWQgdGhlIHBsdWdpbiBzbyBkZWNyZW1lbnQgdGhlIGNvdW50ZXIKLSAgICBtX2xvYWRDb3Vu
dC0tOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHBsdWctaW4gc3VwcG9ydHMgTlBQX0dldFNpdGVz
V2l0aERhdGEuCi0gICAgaWYgKCFtX3BsdWdpbkZ1bmNzLmdldHNpdGVzd2l0aGRhdGEpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNoYXIqKiBzaXRlQXJyYXkgPSBtX3BsdWdpbkZ1bmNz
LmdldHNpdGVzd2l0aGRhdGEoKTsKLQotICAgIC8vIFRoZXJlIHdlcmUgbm8gc2l0ZXMgd2l0aCBk
YXRhLgotICAgIGlmICghc2l0ZUFycmF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBzaXRlQXJyYXlbaV07ICsraSkgewotICAgICAgICBjaGFyKiBzaXRlID0g
c2l0ZUFycmF5W2ldOwotCi0gICAgICAgIFN0cmluZyBzaXRlU3RyaW5nID0gU3RyaW5nOjpmcm9t
VVRGOChzaXRlKTsKLSAgICAgICAgaWYgKCFzaXRlU3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAg
ICAgc2l0ZXMuYXBwZW5kKHNpdGVTdHJpbmcpOwotCi0gICAgICAgIG5wbk1lbUZyZWUoc2l0ZSk7
Ci0gICAgfQotCi0gICAgbnBuTWVtRnJlZShzaXRlQXJyYXkpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFBsdWdpblBhY2thZ2U6OnRyeUNsZWFyU2l0ZURhdGEoY29uc3QgU3RyaW5nJiBz
aXRlLCB1aW50NjRfdCBmbGFncywgdWludDY0X3QgbWF4QWdlKQotewotICAgIGlmICghbG9hZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogRmluZCBhIGJldHRlciB3
YXkgdG8gZW5zdXJlIHRoZSBwbHVnaW4gaXMgbG9hZGVkLgotICAgIC8vIFBsdWdpblZpZXc6Oklu
aXQgd2lsbCBsb2FkIHRoZSBwbHVnaW4gc28gZGVjcmVtZW50IHRoZSBjb3VudGVyCi0gICAgbV9s
b2FkQ291bnQtLTsKLQotICAgIC8vIENoZWNrIGlmIHRoZSBwbHVnLWluIHN1cHBvcnRzIE5QUF9D
bGVhclNpdGVEYXRhLgotICAgIGlmICghbV9wbHVnaW5GdW5jcy5jbGVhcnNpdGVkYXRhKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3RyaW5nIHNpdGVTdHJpbmc7Ci0gICAgaWYgKCFz
aXRlLmlzTnVsbCgpKQotICAgICAgICBzaXRlU3RyaW5nID0gc2l0ZS51dGY4KCk7Ci0KLSAgICBy
ZXR1cm4gbV9wbHVnaW5GdW5jcy5jbGVhcnNpdGVkYXRhKHNpdGVTdHJpbmcuZGF0YSgpLCBmbGFn
cywgbWF4QWdlKSA9PSBOUEVSUl9OT19FUlJPUjsKLX0KLQotdW5zaWduZWQgUGx1Z2luUGFja2Fn
ZTo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgaGFzaENvZGVzW10gPSB7Ci0g
ICAgICAgIG1fbmFtZS5pbXBsKCktPmhhc2goKSwKLSAgICAgICAgbV9kZXNjcmlwdGlvbi5pbXBs
KCktPmhhc2goKSwKLSAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLnNpemUoKSwKLSAgICAgICAg
bV9wYXRoLmltcGwoKS0+aGFzaCgpCi0gICAgfTsKLQotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6
OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIq
PihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOwotfQotCi1i
b29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQotewotICAgIGlmIChtX2lzTG9hZGVkKSB7Ci0gICAg
ICAgIG1fbG9hZENvdW50Kys7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlm
IChtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBBU1NFUlQobV9tb2R1
bGUpOwotICAgICAgICBtX2ZyZWVMaWJyYXJ5VGltZXIuc3RvcCgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVCghbV9sb2FkQ291bnQpOwotICAgICAgICBtX21vZHVsZSA9IGRsb3Blbiht
X3BhdGgudXRmOCgpLmRhdGEoKSwgUlRMRF9MQVpZKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fbW9k
dWxlKSB7Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiJXMgbm90IGxvYWRlZCAoJXMpIiwgbV9wYXRo
LnV0ZjgoKS5kYXRhKCksIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHByaW50ZigiUGx1Z2lu
UGFja2FnZTo6bG9hZCgpIC0gJXMgbm90IGxvYWRlZCAoJXMpIiwgbV9wYXRoLnV0ZjgoKS5kYXRh
KCksIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBtX2lzTG9hZGVkID0gdHJ1ZTsKLQotICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIE5QX0luaXRp
YWxpemU7Ci0gICAgTlBFcnJvciBucEVycjsKLQotICAgIE5QX0luaXRpYWxpemUgPSAoTlBfSW5p
dGlhbGl6ZUZ1bmNQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7Ci0gICAgbV9O
UFBfU2h1dGRvd24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilkbHN5bShtX21vZHVsZSwgIk5QX1No
dXRkb3duIik7Ci0KLSAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIW1fTlBQX1NodXRkb3duKQot
ICAgICAgICBnb3RvIGFib3J0OwotCi0gICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXpl
b2YobV9wbHVnaW5GdW5jcykpOwotICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3Bs
dWdpbkZ1bmNzKTsKLQotICAgIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKLQotICAgIG5wRXJy
ID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICAmbV9wbHVnaW5GdW5jcyk7Ci0KLSAg
ICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAg
ICBtX2xvYWRDb3VudCA9IDE7Ci0gICAgcmV0dXJuIHRydWU7Ci0KLWFib3J0OgotICAgIHVubG9h
ZFdpdGhvdXRTaHV0ZG93bigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotdWludDE2X3QgUGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gTlBWRVJTX0hBU19QTFVHSU5fVEhSRUFEX0FTWU5DX0NBTEw7
Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVy
cnkuY3BwCShyZXZpc2lvbiAxNjE1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNr
YmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMjQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFrcmlz
aG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgotICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCi0jaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIktleWJv
YXJkRXZlbnQuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTlBDYWxsYmFj
a3NCbGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1
Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiCi0jaW5j
bHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXdQcml2YXRlQmxhY2tC
ZXJyeS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIK
LSNpbmNsdWRlICJUb3VjaEV2ZW50LmgiCi0jaW5jbHVkZSAiVG91Y2hMaXN0LmgiCi0jaW5jbHVk
ZSAiV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSAi
cnVudGltZV9yb290LmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5j
bHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiUGx1
Z2luTGF5ZXJXZWJLaXRUaHJlYWQuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1JbnRSZWN0UmVn
aW9uLmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtV2luZG93Lmg+Ci0KLSNpbmNsdWRl
IDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotI2lu
Y2x1ZGUgPHN5cy9rZXljb2Rlcy5oPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+Ci0KLWNvbnN0IHVuc2lnbmVkIFVuaW5pdGlhbGl6ZWRDb29yZGluYXRl
ID0gMHhmZmZmZmZmZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10ZW1wbGF0ZTxjbGFzcyBU
PiBzdGF0aWMgTlBSZWN0IHRvTlBSZWN0KGNvbnN0IFQmIHJlY3QpCi17Ci0gICAgTlBSZWN0IG5w
UmVjdDsKLSAgICBucFJlY3QudG9wID0gcmVjdC55KCk7Ci0gICAgbnBSZWN0LmxlZnQgPSByZWN0
LngoKTsKLSAgICBucFJlY3QuYm90dG9tID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOwotICAg
IG5wUmVjdC5yaWdodCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOwotICAgIHJldHVybiBucFJl
Y3Q7Ci19Ci0KLXVzaW5nIEpTQzo6RXhlY1N0YXRlOwotdXNpbmcgSlNDOjpJbnRlcnByZXRlcjsK
LXVzaW5nIEpTQzo6SlNMb2NrOwotdXNpbmcgSlNDOjpKU09iamVjdDsKLQotdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwotCi12b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCi17Ci0gICAgaWYgKCFw
YXJlbnQoKSB8fCAhbV9wcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocGFy
ZW50KCktPmlzRnJhbWVWaWV3KCkpOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdG9GcmFt
ZVZpZXcocGFyZW50KCkpOwotCi0gICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dS
ZWN0OwotICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OwotCi0gICAgbV93aW5k
b3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCku
bG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNpemUoKSk7Ci0KLSAgICBTY3JvbGxWaWV3KiB0aGVS
b290ID0gcm9vdCgpOwotICAgIGlmICghdGhlUm9vdCkKLSAgICAgICAgcmV0dXJuOyAvLyBBU1NF
UlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpIHNob3VsZCBwcmV2ZW50IHRoaXMgYnV0IGNoZWNr
IGp1c3QgaW4gY2FzZQotICAgIC8vIE1hcCByZWN0IHRvIGNvbnRlbnQgY29vcmRpbmF0ZSBzcGFj
ZSBvZiBtYWluIGZyYW1lLgotICAgIG1fd2luZG93UmVjdC5tb3ZlKHRoZVJvb3QtPnNjcm9sbE9m
ZnNldCgpKTsKLQotICAgIG1fY2xpcFJlY3QgPSBjYWxjdWxhdGVDbGlwUmVjdCgpOwotCi0gICAg
Ly8gTm90aWZ5IHRoZSBwbHVnaW4gaWYgaXQgbWF5IG9yIG1heSBub3QgYmUgb24vb2Zmc2NyZWVu
LgotICAgIGhhbmRsZVNjcm9sbEV2ZW50KCk7Ci0KLSAgICBib29sIHpvb21GYWN0b3JDaGFuZ2Vk
ID0gKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT56b29t
RmFjdG9yCi0gICAgICAgICE9IGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKS0+Y3VycmVudFpvb21GYWN0b3IoKTsKLQotICAgIGlmICghem9vbUZhY3RvckNoYW5n
ZWQgJiYgbV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3QgJiYgbV9jbGlwUmVjdCA9PSBvbGRD
bGlwUmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG8gbm90IGNhbGwgc2V0TlBXaW5k
b3dJZk5lZWRlZCBpbW1lZGlhdGVseSwgd2lsbCBiZSBjYWxsZWQgb24gcGFpbnQoKS4KLSAgICBt
X3ByaXZhdGUtPm1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gdHJ1ZTsKLQotICAgIC8vIChp
KSBJbiBvcmRlciB0byBtb3ZlL3Jlc2l6ZSB0aGUgcGx1Z2luIHdpbmRvdyBhdCB0aGUgc2FtZSB0
aW1lIGFzIHRoZQotICAgIC8vIHJlc3Qgb2YgZnJhbWUgZHVyaW5nIGUuZy4gc2Nyb2xsaW5nLCB3
ZSBzZXQgdGhlIHdpbmRvdyBnZW9tZXRyeQotICAgIC8vIGluIHRoZSBwYWludCgpIGZ1bmN0aW9u
LCBidXQgYXMgcGFpbnQoKSBpc24ndCBjYWxsZWQgd2hlbiB0aGUKLSAgICAvLyBwbHVnaW4gd2lu
ZG93IGlzIG91dHNpZGUgdGhlIGZyYW1lIHdoaWNoIGNhbiBiZSBjYXVzZWQgYnkgYQotICAgIC8v
IHNjcm9sbCwgd2UgbmVlZCB0byBtb3ZlL3Jlc2l6ZSBpbW1lZGlhdGVseS4KLSAgICAvLyAoaWkp
IElmIHdlIGFyZSBydW5uaW5nIGxheW91dCB0ZXN0cyBmcm9tIERSVCwgcGFpbnQoKSB3b24ndCBl
dmVyIGdldCBjYWxsZWQKLSAgICAvLyBzbyB3ZSBuZWVkIHRvIGNhbGwgc2V0TlBXaW5kb3dJZk5l
ZWRlZCgpIGlmIHdpbmRvdyBnZW9tZXRyeSBoYXMgY2hhbmdlZC4KLSAgICBpZiAobV9jbGlwUmVj
dC5pc0VtcHR5KCkgfHwgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgJiYgKG1fd2luZG93UmVjdCAh
PSBvbGRXaW5kb3dSZWN0IHx8IG1fY2xpcFJlY3QgIT0gb2xkQ2xpcFJlY3QgfHwgem9vbUZhY3Rv
ckNoYW5nZWQpKSkKLSAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwotCi0gICAgLy8gTWFr
ZSBzdXJlIHdlIGdldCByZXBhaW50ZWQgYWZ0ZXJ3YXJkcy4gVGhpcyBpcyBuZWNlc3NhcnkgZm9y
IGRvd253YXJkCi0gICAgLy8gc2Nyb2xsaW5nIHRvIG1vdmUgdGhlIHBsdWdpbiB3aWRnZXQgcHJv
cGVybHkuCi0gICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldEZvY3Vz
KGJvb2wgZm9jdXNlZCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSB8fCBtX3ByaXZhdGUtPm1faXNG
b2N1c2VkID09IGZvY3VzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChwbGF0Zm9y
bVBsdWdpbldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOwotICAgIFdpZGdldDo6c2V0Rm9j
dXMoZm9jdXNlZCk7Ci0KLSAgICBpZiAoZm9jdXNlZCkKLSAgICAgICAgaGFuZGxlRm9jdXNJbkV2
ZW50KCk7Ci0gICAgZWxzZQotICAgICAgICBoYW5kbGVGb2N1c091dEV2ZW50KCk7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6c2hvdygpCi17Ci0gICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7Ci0gICAg
V2lkZ2V0OjpzaG93KCk7Ci0gICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6aGlkZSgpCi17Ci0gICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOwotICAgIFdpZGdl
dDo6aGlkZSgpOwotICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnVwZGF0ZUJ1ZmZlcihjb25zdCBJbnRSZWN0JiBidWZmZXJSZWN0KQotewotICAgIGlmICgh
bV9wcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHpvb20gZmFj
dG9yIGhlcmUsIGl0IGhhcHBlbnMgcmlnaHQgYmVmb3JlIHNldE5QV2luZG93SWZOZWVkZWQKLSAg
ICAvLyBlbnN1cmluZyB0aGF0IHRoZSBwbHVnaW4gaGFzIGV2ZXJ5IG9wcG9ydHVuaXR5IHRvIGdl
dCB0aGUgem9vbSBmYWN0b3IgYmVmb3JlCi0gICAgLy8gaXQgcGFpbnRzIGFueXRoaW5nLgotICAg
IGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKSkKLSAgICAg
ICAgbV9wcml2YXRlLT5zZXRab29tRmFjdG9yKGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0
Zm9ybVBhZ2VDbGllbnQoKS0+Y3VycmVudFpvb21GYWN0b3IoKSk7Ci0KLSAgICBzZXROUFdpbmRv
d0lmTmVlZGVkKCk7Ci0KLSAgICAvLyBCdWlsZCBhbmQgZGlzcGF0Y2ggYW4gZXZlbnQgdG8gdGhl
IHBsdWdpbiB0byBub3RpZnkgaXQgd2UgYXJlIGFib3V0IHRvIGRyYXcgd2hhdGV2ZXIKLSAgICAv
LyBpcyBpbiB0aGUgZnJvbnQgYnVmZmVyLiBUaGlzIGlzIGl0J3Mgb3Bwb3J0dW5pdHkgdG8gZG8g
YSBzd2FwLgotICAgIEludFJlY3QgZXhwb3NlZFJlY3QoYnVmZmVyUmVjdCk7Ci0gICAgZXhwb3Nl
ZFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIGZyYW1lUmVjdCgpLnNpemUo
KSkpOwotCi0gICAgLy8gT25seSBhc2sgdGhlIHBsdWdpbiB0byBkcmF3IGlmIHRoZSBleHBvc2Vk
IHJlY3Qgd2FzIGV4cGxpY2l0bHkgaW52YWxpZGF0ZWQKLSAgICAvLyBieSB0aGUgcGx1Z2luLgot
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIGV4cG9zZWRSZWdpb24gPSBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6aW50ZXJzZWN0UmVnaW9ucyhtX3By
aXZhdGUtPm1faW52YWxpZGF0ZVJlZ2lvbiwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3Qo
ZXhwb3NlZFJlY3QpKTsKLSAgICBpZiAoIWV4cG9zZWRSZWdpb24uaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIG1fcHJpdmF0ZS0+bV9pbnZhbGlkYXRlUmVnaW9uID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkludFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9ucyhtX3ByaXZhdGUtPm1faW52YWxpZGF0ZVJl
Z2lvbiwgZXhwb3NlZFJlZ2lvbik7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpJbnRSZWN0PiBleHBvc2VkUmVjdHMgPSBleHBvc2VkUmVnaW9uLnJlY3RzKCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHBvc2VkUmVjdHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIE5QRHJhd0V2ZW50IGRyYXc7Ci0gICAgICAgICAgICBOUFJlY3QgdGVt
cFJlY3QgPSB0b05QUmVjdChleHBvc2VkUmVjdHMuYXQoaSkpOwotICAgICAgICAgICAgZHJhdy5w
bHVnaW5SZWN0ID0gdG9OUFJlY3QobV93aW5kb3dSZWN0KTsKLSAgICAgICAgICAgIGRyYXcuY2xp
cFJlY3QgPSB0b05QUmVjdChtX2NsaXBSZWN0KTsKLSAgICAgICAgICAgIGRyYXcuZHJhd1JlY3Qg
PSAmdGVtcFJlY3Q7Ci0gICAgICAgICAgICBkcmF3LmRyYXdSZWN0Q291bnQgPSAxOwotICAgICAg
ICAgICAgZHJhdy56b29tRmFjdG9yID0gKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25w
V2luZG93LndzX2luZm8pLT56b29tRmFjdG9yOwotCi0gICAgICAgICAgICBOUEV2ZW50IG5wRXZl
bnQ7Ci0gICAgICAgICAgICBucEV2ZW50LnR5cGUgPSBOUF9EcmF3RXZlbnQ7Ci0gICAgICAgICAg
ICBucEV2ZW50LmRhdGEgPSAmZHJhdzsKLQotICAgICAgICAgICAgLy8gRklYTUU6IFJldHVybiBl
YXJseSBpZiB0aGlzIGZhaWxzPyBPciBqdXN0IHJlcGFpbnQ/Ci0gICAgICAgICAgICBkaXNwYXRj
aE5QRXZlbnQobnBFdmVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmll
dzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIGlmICghbV9wcml2YXRlIHx8ICFtX2lzU3RhcnRlZCkgewotICAgICAgICBwYWludE1p
c3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gVXBkYXRlIHRoZSB6b29tIGZhY3RvciBoZXJlLCBpdCBoYXBwZW5zIHJpZ2h0IGJl
Zm9yZSBzZXROUFdpbmRvd0lmTmVlZGVkCi0gICAgLy8gZW5zdXJpbmcgdGhhdCB0aGUgcGx1Z2lu
IGhhcyBldmVyeSBvcHBvcnR1bml0eSB0byBnZXQgdGhlIHpvb20gZmFjdG9yIGJlZm9yZQotICAg
IC8vIGl0IHBhaW50cyBhbnl0aGluZy4KLSAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0
b0ZyYW1lVmlldyhwYXJlbnQoKSkpCi0gICAgICAgIG1fcHJpdmF0ZS0+c2V0Wm9vbUZhY3Rvcihm
cmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPmN1cnJlbnRab29t
RmFjdG9yKCkpOwotCi0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX3ByaXZhdGUtPm1fcGxhdGZvcm1MYXllcikK
LSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICAvLyBCdWlsZCBhbmQgZGlzcGF0Y2ggYW4g
ZXZlbnQgdG8gdGhlIHBsdWdpbiB0byBub3RpZnkgaXQgd2UgYXJlIGFib3V0IHRvIGRyYXcgd2hh
dGV2ZXIKLSAgICAvLyBpcyBpbiB0aGUgZnJvbnQgYnVmZmVyLiBUaGlzIGlzIGl0J3Mgb3Bwb3J0
dW5pdHkgdG8gZG8gYSBzd2FwLgotICAgIEludFJlY3QgcmVjdENsaXAocmVjdCk7Ci0gICAgcmVj
dENsaXAuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKLQotICAgIEludFJlY3QgZXhwb3NlZFJlY3Qo
cmVjdENsaXApOwotICAgIGV4cG9zZWRSZWN0Lm1vdmUoLWZyYW1lUmVjdCgpLngoKSwgLWZyYW1l
UmVjdCgpLnkoKSk7Ci0KLSAgICB1cGRhdGVCdWZmZXIoZXhwb3NlZFJlY3QpOwotfQotCi0KLWJv
b2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hGdWxsU2NyZWVuTlBFdmVudChOUEV2ZW50JiBldmVudCkK
LXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNT
RVJUKG1fcHJpdmF0ZS0+bV9pc0Z1bGxTY3JlZW4pOwotICAgIHJldHVybiBkaXNwYXRjaE5QRXZl
bnQoZXZlbnQpOwotfQotCi0vLyBGSVhNRTogVW5pZnkgYWNyb3NzIHBvcnRzLgotYm9vbCBQbHVn
aW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKCFtX3Bs
dWdpbiB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vblZNKCkpOwotICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0KLSAgICBib29sIGFj
Y2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVu
dCk7Ci0KLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldygwKTsKLQotICAgIHJldHVybiBhY2NlcHRlZDsKLX0KLQotdm9pZCBQ
bHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewot
ICAgIE5QRXZlbnQgbnBFdmVudDsKLSAgICBOUEtleWJvYXJkRXZlbnQga2V5RXZlbnQ7Ci0gICAg
Y29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50ICpwbGF0Zm9ybUtleUV2ZW50ID0gZXZlbnQtPmtl
eUV2ZW50KCk7Ci0KLSAgICBrZXlFdmVudC5tb2RpZmllcnMgPSAwOwotCi0gICAgaWYgKHBsYXRm
b3JtS2V5RXZlbnQtPnNoaWZ0S2V5KCkpCi0gICAgICAgIGtleUV2ZW50Lm1vZGlmaWVycyB8PSBL
RVlNT0RfU0hJRlQ7Ci0KLSAgICBpZiAocGxhdGZvcm1LZXlFdmVudC0+Y3RybEtleSgpKQotICAg
ICAgICBrZXlFdmVudC5tb2RpZmllcnMgfD0gS0VZTU9EX0NUUkw7Ci0KLSAgICBpZiAocGxhdGZv
cm1LZXlFdmVudC0+YWx0S2V5KCkpCi0gICAgICAgIGtleUV2ZW50Lm1vZGlmaWVycyB8PSBLRVlN
T0RfQUxUOwotCi0gICAgaWYgKHBsYXRmb3JtS2V5RXZlbnQtPm1ldGFLZXkoKSkKLSAgICAgICAg
a2V5RXZlbnQubW9kaWZpZXJzIHw9IEtFWU1PRF9BTFRHUjsKLQotICAgIGtleUV2ZW50LmNhcCA9
IHBsYXRmb3JtS2V5RXZlbnQtPnVubW9kaWZpZWRDaGFyYWN0ZXIoKTsKLSAgICBrZXlFdmVudC5z
eW0gPSBrZXlFdmVudC5jYXA7Ci0gICAga2V5RXZlbnQuc2NhbiA9IDA7Ci0gICAga2V5RXZlbnQu
ZmxhZ3MgPSAwOwotCi0gICAgaWYgKHBsYXRmb3JtS2V5RXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OlJhd0tleURvd24KLSAgICAgICAgfHwgcGxhdGZvcm1LZXlFdmVudC0+
dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5RG93bikgewotICAgICAgICBrZXlF
dmVudC5mbGFncyA9IEtFWV9ET1dOIHwgS0VZX1NZTV9WQUxJRCB8IEtFWV9DQVBfVkFMSUQ7Ci0g
ICAgfSBlbHNlIGlmIChwbGF0Zm9ybUtleUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpLZXlVcCkKLSAgICAgICAga2V5RXZlbnQuZmxhZ3MgPSBLRVlfU1lNX1ZBTElEIHwg
S0VZX0NBUF9WQUxJRDsKLQotICAgIG5wRXZlbnQudHlwZSA9IE5QX0tleUV2ZW50OwotICAgIG5w
RXZlbnQuZGF0YSA9ICZrZXlFdmVudDsKLSAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQp
KQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVXaGVlbEV2ZW50KFdoZWVsRXZlbnQqIGV2ZW50KQotewotICAgIGlmICghbV9w
cml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9pc0ZvY3Vz
ZWQpCi0gICAgICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOwotCi0gICAgTlBFdmVudCBucEV2ZW50
OwotICAgIE5QV2hlZWxFdmVudCB3aGVlbEV2ZW50OwotCi0gICAgd2hlZWxFdmVudC54ID0gZXZl
bnQtPm9mZnNldFgoKTsKLSAgICB3aGVlbEV2ZW50LnkgPSBldmVudC0+b2Zmc2V0WSgpOwotCi0g
ICAgd2hlZWxFdmVudC5mbGFncyA9IDA7Ci0KLSAgICB3aGVlbEV2ZW50LnhEZWx0YSA9IC1ldmVu
dC0+ZGVsdGFYKCk7Ci0gICAgd2hlZWxFdmVudC55RGVsdGEgPSAtZXZlbnQtPmRlbHRhWSgpOwot
Ci0gICAgbnBFdmVudC50eXBlID0gTlBfV2hlZWxFdmVudDsKLSAgICBucEV2ZW50LmRhdGEgPSAm
d2hlZWxFdmVudDsKLQotICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCi0gICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZVRvdWNoRXZlbnQoVG91Y2hFdmVudCogZXZlbnQpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wcml2YXRlLT5tX2lzRm9jdXNlZCkKLSAgICAg
ICAgZm9jdXNQbHVnaW5FbGVtZW50KCk7Ci0KLSAgICBOUFRvdWNoRXZlbnQgbnBUb3VjaEV2ZW50
OwotCi0gICAgaWYgKGV2ZW50LT5pc0RvdWJsZVRhcCgpKQotICAgICAgICBucFRvdWNoRXZlbnQu
dHlwZSA9IFRPVUNIX0VWRU5UX0RPVUJMRVRBUDsKLSAgICBlbHNlIGlmIChldmVudC0+aXNUb3Vj
aEhvbGQoKSkKLSAgICAgICAgbnBUb3VjaEV2ZW50LnR5cGUgPSBUT1VDSF9FVkVOVF9UT1VDSEhP
TEQ7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudG91Y2hjYW5j
ZWxFdmVudCkKLSAgICAgICAgbnBUb3VjaEV2ZW50LnR5cGUgPSBUT1VDSF9FVkVOVF9DQU5DRUw7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47Ci0KLSAgICBUb3VjaExpc3QqIHRvdWNoTGlzdDsK
LSAgICAvLyBUaGUgdG91Y2hlcyBsaXN0IGlzIGVtcHR5IGlmIGluIGEgdG91Y2ggZW5kIGV2ZW50
LgotICAgIC8vIFNpbmNlIERvdWJsZVRhcCBpcyB1c3VzYWxseSBhIFRvdWNoRW5kIFVzZSBjaGFu
Z2VkVG91Y2hlcyBpbnN0ZWFkLgotICAgIGlmIChucFRvdWNoRXZlbnQudHlwZSA9PSBUT1VDSF9F
VkVOVF9ET1VCTEVUQVApCi0gICAgICAgIHRvdWNoTGlzdCA9IGV2ZW50LT5jaGFuZ2VkVG91Y2hl
cygpOwotICAgIGVsc2UKLSAgICAgICAgdG91Y2hMaXN0ID0gZXZlbnQtPnRvdWNoZXMoKTsKLQot
ICAgIG5wVG91Y2hFdmVudC5wb2ludHMgPSAwOwotICAgIG5wVG91Y2hFdmVudC5zaXplID0gdG91
Y2hMaXN0LT5sZW5ndGgoKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxOUFRvdWNoUG9pbnRbXT4g
dG91Y2hQb2ludHM7Ci0gICAgaWYgKHRvdWNoTGlzdC0+bGVuZ3RoKCkpIHsKLSAgICAgICAgdG91
Y2hQb2ludHMgPSBzdGQ6Om1ha2VfdW5pcXVlPE5QVG91Y2hQb2ludFtdPih0b3VjaExpc3QtPmxl
bmd0aCgpKTsKLSAgICAgICAgbnBUb3VjaEV2ZW50LnBvaW50cyA9IHRvdWNoUG9pbnRzLmdldCgp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG91Y2hMaXN0LT5sZW5ndGgoKTsg
aSsrKSB7Ci0gICAgICAgICAgICBUb3VjaCogdG91Y2hJdGVtID0gdG91Y2hMaXN0LT5pdGVtKGkp
OwotICAgICAgICAgICAgdG91Y2hQb2ludHNbaV0udG91Y2hJZCA9IHRvdWNoSXRlbS0+aWRlbnRp
ZmllcigpOwotICAgICAgICAgICAgdG91Y2hQb2ludHNbaV0uY2xpZW50WCA9IHRvdWNoSXRlbS0+
cGFnZVgoKSAtIGZyYW1lUmVjdCgpLngoKTsKLSAgICAgICAgICAgIHRvdWNoUG9pbnRzW2ldLmNs
aWVudFkgPSB0b3VjaEl0ZW0tPnBhZ2VZKCkgLSBmcmFtZVJlY3QoKS55KCk7Ci0gICAgICAgICAg
ICB0b3VjaFBvaW50c1tpXS5zY3JlZW5YID0gdG91Y2hJdGVtLT5zY3JlZW5YKCk7Ci0gICAgICAg
ICAgICB0b3VjaFBvaW50c1tpXS5zY3JlZW5ZID0gdG91Y2hJdGVtLT5zY3JlZW5ZKCk7Ci0gICAg
ICAgICAgICB0b3VjaFBvaW50c1tpXS5wYWdlWCA9IHRvdWNoSXRlbS0+cGFnZVgoKTsKLSAgICAg
ICAgICAgIHRvdWNoUG9pbnRzW2ldLnBhZ2VZID0gdG91Y2hJdGVtLT5wYWdlWSgpOwotCi0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgbnBFdmVudC50eXBlID0g
TlBfVG91Y2hFdmVudDsKLSAgICBucEV2ZW50LmRhdGEgPSAmbnBUb3VjaEV2ZW50OwotCi0gICAg
aWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2
ZW50KiBldmVudCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtX3ByaXZhdGUtPm1faXNGb2N1c2VkKQotICAgICAgICBmb2N1c1BsdWdpbkVsZW1l
bnQoKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLSAgICBOUE1vdXNlRXZlbnQgbW91c2VFdmVu
dDsKLQotICAgIG1vdXNlRXZlbnQueCA9IGV2ZW50LT5vZmZzZXRYKCk7Ci0gICAgbW91c2VFdmVu
dC55ID0gZXZlbnQtPm9mZnNldFkoKTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZWRvd25FdmVudCkKLSAgICAgICAgbW91c2VFdmVudC50eXBlID0gTU9VU0Vf
QlVUVE9OX0RPV047Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vtb3ZlRXZlbnQpCi0gICAgICAgIG1vdXNlRXZlbnQudHlwZSA9IE1PVVNFX01PVElPTjsK
LSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50
KQotICAgICAgICBtb3VzZUV2ZW50LnR5cGUgPSBNT1VTRV9PVVRCT1VORDsKLSAgICBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkKLSAgICAgICAg
bW91c2VFdmVudC50eXBlID0gTU9VU0VfT1ZFUjsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCi0gICAgICAgIG1vdXNlRXZlbnQudHlwZSA9
IE1PVVNFX0JVVFRPTl9VUDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsKLQotICAgIG1vdXNl
RXZlbnQuYnV0dG9uID0gZXZlbnQtPmJ1dHRvbigpOwotICAgIG1vdXNlRXZlbnQuZmxhZ3MgPSAw
OwotCi0gICAgbnBFdmVudC50eXBlID0gTlBfTW91c2VFdmVudDsKLSAgICBucEV2ZW50LmRhdGEg
PSAmbW91c2VFdmVudDsKLQotICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCi0gICAg
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6Omhh
bmRsZUZvY3VzSW5FdmVudCgpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3ByaXZhdGUtPm1faXNGb2N1c2VkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3ByaXZhdGUtPm1faXNGb2N1c2VkID0gdHJ1ZTsKLQotICAgIE5QRXZlbnQgbnBFdmVu
dDsKLSAgICBucEV2ZW50LnR5cGUgPSBOUF9Gb2N1c0dhaW5lZEV2ZW50OwotICAgIG5wRXZlbnQu
ZGF0YSA9IDA7Ci0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQotewotICAgIGlmICghbV9wcml2YXRlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9pc0ZvY3VzZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcHJpdmF0ZS0+bV9pc0ZvY3VzZWQgPSBmYWxzZTsKLQotICAgIE5Q
RXZlbnQgbnBFdmVudDsKLSAgICBucEV2ZW50LnR5cGUgPSBOUF9Gb2N1c0xvc3RFdmVudDsKLSAg
ICBucEV2ZW50LmRhdGEgPSAwOwotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVQYXVzZUV2ZW50KCkKLXsKLSAgICBOUEV2ZW50IG5wRXZl
bnQ7Ci0gICAgbnBFdmVudC50eXBlID0gTlBfUGF1c2VFdmVudDsKLSAgICBucEV2ZW50LmRhdGEg
PSAwOwotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpoYW5kbGVSZXN1bWVFdmVudCgpCi17Ci0gICAgTlBFdmVudCBucEV2ZW50OwotICAgIG5wRXZl
bnQudHlwZSA9IE5QX1Jlc3VtZUV2ZW50OwotICAgIG5wRXZlbnQuZGF0YSA9IDA7Ci0gICAgZGlz
cGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZVNjcm9s
bEV2ZW50KCkKLXsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVu
dCgpKTsKLQotICAgIC8vIEFzIGEgc3BlY2lhbCBjYXNlLCBpZiB0aGUgZnJhbWVWaWV3IGV4dGVu
dCBpbiBlaXRoZXIgZGltZW5zaW9uIGlzCi0gICAgLy8gZW1wdHksIHRoZW4gc2VuZCBhbiBvbiBz
Y3JlZW4gZXZlbnQuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzaXRlcyBsaWtlCi0gICAgLy8gcGlj
bmlrLmNvbSB3aGljaCB1c2UgYSBoaWRkZW4gaWZyYW1lIChyZWFkOiB3aWR0aCA9IDAgYW5kIGhl
aWdodCA9IDApCi0gICAgLy8gd2l0aCBhbiBlbWJlZGRlZCBzd2YgdG8gZXhlY3V0ZSBzb21lIGph
dmFzY3JpcHQuIFVubGVzcyB3ZSBzZW5kIGFuCi0gICAgLy8gb24gc2NyZWVuIGV2ZW50IHRoZSBz
d2Ygd2lsbCBub3QgZXhlY3V0ZSB0aGUgamF2YXNjcmlwdCBhbmQgdGhlIHJlYWwKLSAgICAvLyBz
aXRlIHdpbGwgbmV2ZXIgbG9hZC4KLSAgICBib29sIG9uU2NyZWVuRXZlbnQgPSBmcmFtZVZpZXcg
JiYgKCFmcmFtZVZpZXctPndpZHRoKCkgfHwgIWZyYW1lVmlldy0+aGVpZ2h0KCkpOwotCi0gICAg
TlBFdmVudCBucEV2ZW50OwotICAgIG5wRXZlbnQudHlwZSA9IG1fY2xpcFJlY3QuaXNFbXB0eSgp
ICYmICFvblNjcmVlbkV2ZW50ID8gTlBfT2ZmU2NyZWVuRXZlbnQgOiBOUF9PblNjcmVlbkV2ZW50
OwotICAgIG5wRXZlbnQuZGF0YSA9IDA7Ci0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwot
fQotCi1JbnRSZWN0IFBsdWdpblZpZXc6OmNhbGN1bGF0ZUNsaXBSZWN0KCkgY29uc3QKLXsKLSAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKTsKLSAgICBib29s
IHZpc2libGUgPSBmcmFtZVZpZXcgJiYgaXNWaXNpYmxlKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG1fZWxlbWVudC0+cmVuZGVyZXIoKTsKLQotICAgIGlmICh2aXNpYmxlICYmIGZy
YW1lVmlldy0+d2lkdGgoKSAmJiBmcmFtZVZpZXctPmhlaWdodCgpICYmIHJlbmRlcmVyKSB7Ci0g
ICAgICAgIEludFNpemUgd2luZG93U2l6ZSA9IGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0
Zm9ybVBhZ2VDbGllbnQoKS0+dmlld3BvcnRTaXplKCk7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBj
bGlwcGVkIHJlY3RhbmdsZSBmb3IgdGhpcyBwbGF5ZXIgd2l0aGluIHRoZSBjdXJyZW50IGZyYW1l
LgotICAgICAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdDsKLSAgICAgICAgSW50UmVjdCBj
b250ZW50UmVjdCA9IHJlbmRlcmVyLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLSAg
ICAgICAgRmxvYXRQb2ludCBjb250ZW50TG9jYWwgPSByZW5kZXJlci0+YWJzb2x1dGVUb0xvY2Fs
KEZsb2F0UG9pbnQoY29udGVudFJlY3QubG9jYXRpb24oKSkpOwotCi0gICAgICAgIGNvbnRlbnRS
ZWN0LnNldExvY2F0aW9uKHJvdW5kZWRJbnRQb2ludChjb250ZW50TG9jYWwpKTsKLSAgICAgICAg
Y29udGVudFJlY3QubW92ZShmcmFtZVJlY3QoKS54KCksIGZyYW1lUmVjdCgpLnkoKSk7Ci0KLSAg
ICAgICAgLy8gQ2xpcCBhZ2FpbnN0IGFueSBmcmFtZXMgdGhhdCB0aGUgd2lkZ2V0IGlzIGluc2lk
ZS4gTm90ZSB0aGF0IGlmIHRoZSBmcmFtZXMgYXJlIGFsc28gY2xpcHBlZAotICAgICAgICAvLyBi
eSBhIGRpdiwgdGhhdCB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGlzIGNhbGN1bGF0aW9uLiBU
aGF0IGlzIGFuIGltcHJvdmVtZW50IHRoYXQgc3RpbGwKLSAgICAgICAgLy8gbmVlZHMgdG8gYmUg
bWFkZS4KLSAgICAgICAgY29uc3QgV2lkZ2V0KiBjdXJyZW50ID0gdGhpczsKLSAgICAgICAgd2hp
bGUgKGN1cnJlbnQtPnBhcmVudCgpICYmIHZpc2libGUpIHsKLSAgICAgICAgICAgIC8vIERldGVy
bWluZSBpZiBpdCBpcyB2aXNpYmxlIGluIHRoaXMgc2Nyb2xsdmlldy4KLSAgICAgICAgICAgIHZp
c2libGVDb250ZW50UmVjdCA9IGN1cnJlbnQtPnBhcmVudCgpLT52aXNpYmxlQ29udGVudFJlY3Qo
KTsKLQotICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciB0aGUgcm9vdCBTY3JvbGxWaWV3
LiBJdHMgc2l6ZSBkb2VzIG5vdCBtYXRjaCB0aGUgYWN0dWFsIHdpbmRvdyBzaXplLgotICAgICAg
ICAgICAgaWYgKGN1cnJlbnQtPnBhcmVudCgpID09IHJvb3QoKSkKLSAgICAgICAgICAgICAgICB2
aXNpYmxlQ29udGVudFJlY3Quc2V0U2l6ZSh3aW5kb3dTaXplKTsKLQotICAgICAgICAgICAgY29u
dGVudFJlY3QuaW50ZXJzZWN0KHZpc2libGVDb250ZW50UmVjdCk7Ci0gICAgICAgICAgICB2aXNp
YmxlID0gIWNvbnRlbnRSZWN0LmlzRW1wdHkoKTsKLQotICAgICAgICAgICAgLy8gT2Zmc2V0IHRv
IHZpc2libGUgY29vcmRpbmF0ZXMgaW4gc2Nyb2xsdmlldyB3aWRnZXQncyBjb29yZGluYXRlIHN5
c3RlbSAoZXhjZXB0IGluIHRoZSBjYXNlIG9mCi0gICAgICAgICAgICAvLyB0aGUgdG9wIHNjcm9s
bCB2aWV3KS4KLSAgICAgICAgICAgIGlmIChjdXJyZW50LT5wYXJlbnQoKS0+cGFyZW50KCkpCi0g
ICAgICAgICAgICAgICAgY29udGVudFJlY3QubW92ZSgtdmlzaWJsZUNvbnRlbnRSZWN0LngoKSwg
LXZpc2libGVDb250ZW50UmVjdC55KCkpOwotCi0gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVu
dC0+cGFyZW50KCk7Ci0KLSAgICAgICAgICAgIC8vIERvbid0IGluY2x1ZGUgdGhlIG9mZnNldCBm
b3IgdGhlIHJvb3Qgd2luZG93IG9yIHdlIGdldCB0aGUgd3JvbmcgY29vcmRpbmF0ZXMuCi0gICAg
ICAgICAgICBpZiAoY3VycmVudC0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBNb3Zl
IGNvbnRlbnQgcmVjdCBpbnRvIHRoZSBwYXJlbnQgc2Nyb2xsdmlldydzIGNvb3JkaW5hdGVzLgot
ICAgICAgICAgICAgICAgIEludFJlY3QgY3VyRnJhbWVSZWN0ID0gY3VycmVudC0+ZnJhbWVSZWN0
KCk7Ci0gICAgICAgICAgICAgICAgY29udGVudFJlY3QubW92ZShjdXJGcmFtZVJlY3QueCgpLCBj
dXJGcmFtZVJlY3QueSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBjb250ZW50UmVjdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gSW50UmVjdCgpOwotfQotCi12
b2lkIFBsdWdpblZpZXc6OmhhbmRsZU9uTG9hZEV2ZW50KCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9zZW50T25Mb2FkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ByaXZhdGUtPm1fc2VudE9uTG9hZCA9IHRydWU7Ci0K
LSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgbnBFdmVudC50eXBlID0gTlBfT25Mb2FkRXZlbnQ7
Ci0gICAgbnBFdmVudC5kYXRhID0gMDsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsK
LQotICAgIC8vIFNlbmQgYW4gaW5pdGlhbCBPblNjcmVlbi9PZmZTY3JlZW4gZXZlbnQuIEl0IG11
c3QgYWx3YXlzIGNvbWUgYWZ0ZXIgb25Mb2FkIGlzIHNlbnQuCi0gICAgaGFuZGxlU2Nyb2xsRXZl
bnQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGcmVlTWVtb3J5RXZlbnQoKQotewot
ICAgIE5QRXZlbnQgbnBFdmVudDsKLSAgICBucEV2ZW50LnR5cGUgPSBOUF9GcmVlTWVtb3J5RXZl
bnQ7Ci0gICAgbnBFdmVudC5kYXRhID0gMDsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50
KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVCYWNrZ3JvdW5kRXZlbnQoKQotewotICAg
IE5QRXZlbnQgbnBFdmVudDsKLSAgICBucEV2ZW50LnR5cGUgPSBOUF9CYWNrZ3JvdW5kRXZlbnQ7
Ci0gICAgbnBFdmVudC5kYXRhID0gMDsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsK
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb3JlZ3JvdW5kRXZlbnQoKQotewotICAgIHNl
dE5QV2luZG93SWZOZWVkZWQoKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLSAgICBucEV2ZW50
LnR5cGUgPSBOUF9Gb3JlZ3JvdW5kRXZlbnQ7Ci0gICAgbnBFdmVudC5kYXRhID0gMDsKLQotICAg
IGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVG
dWxsU2NyZWVuQWxsb3dlZEV2ZW50KCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgTlBFdmVudCBucEV2ZW50OwotICAgIG5wRXZlbnQudHlwZSA9IE5QX0Z1
bGxTY3JlZW5SZWFkeUV2ZW50OwotICAgIG5wRXZlbnQuZGF0YSA9IDA7Ci0KLSAgICBpZiAoRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSB0b0ZyYW1lVmlldyhwYXJlbnQoKSkpIHsKLSAgICAgICAgZnJh
bWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5kaWRQbHVnaW5FbnRl
ckZ1bGxTY3JlZW4odGhpcywgbV9wcml2YXRlLT5tX3BsdWdpblVuaXF1ZVByZWZpeC5jX3N0cigp
KTsKLQotICAgICAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKLSAgICAgICAgICAg
IGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+ZGlkUGx1Z2lu
RXhpdEZ1bGxTY3JlZW4odGhpcywgbV9wcml2YXRlLT5tX3BsdWdpblVuaXF1ZVByZWZpeC5jX3N0
cigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wcml2YXRlLT5tX2lzRnVsbFNjcmVl
biA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZ1bGxTY3JlZW5F
eGl0RXZlbnQoKQotewotICAgIGlmICghbV9wcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgbnBFdmVudC50eXBlID0gTlBfRnVsbFNjcmVlbkV4aXRF
dmVudDsKLSAgICBucEV2ZW50LmRhdGEgPSAwOwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZl
bnQpOwotCi0gICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdG9GcmFtZVZpZXcocGFyZW50
KCkpKQotICAgICAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50
KCktPmRpZFBsdWdpbkV4aXRGdWxsU2NyZWVuKHRoaXMsIG1fcHJpdmF0ZS0+bV9wbHVnaW5Vbmlx
dWVQcmVmaXguY19zdHIoKSk7Ci0KLSAgICBtX3ByaXZhdGUtPm1faXNGdWxsU2NyZWVuID0gZmFs
c2U7Ci0gICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUlkbGVF
dmVudChib29sIGVudGVySWRsZSkKLXsKLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgbnBFdmVu
dC5kYXRhID0gMDsKLQotICAgIGlmIChlbnRlcklkbGUpCi0gICAgICAgIG5wRXZlbnQudHlwZSA9
IE5QX0VudGVySWRsZUV2ZW50OwotICAgIGVsc2UKLSAgICAgICAgbnBFdmVudC50eXBlID0gTlBf
RXhpdElkbGVFdmVudDsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotCi12
b2lkIFBsdWdpblZpZXc6OmhhbmRsZUFwcEFjdGl2YXRlZEV2ZW50KCkKLXsKLSAgICBOUEV2ZW50
IG5wRXZlbnQ7Ci0gICAgbnBFdmVudC5kYXRhID0gMDsKLSAgICBucEV2ZW50LnR5cGUgPSBOUF9B
cHBBY3RpdmF0ZWRFdmVudDsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVBcHBEZWFjdGl2YXRlZEV2ZW50KCkKLXsKLSAgICBpZiAo
IW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUGx1Z2luIHdhbnRzIHRvIGtu
b3cgdGhhdCBpdCBoYXMgdG8gZXhpdCBmdWxsc2NyZWVuIG9uIGRlYWN0aXZhdGlvbi4KLSAgICBp
ZiAobV9wcml2YXRlLT5tX2lzRnVsbFNjcmVlbikKLSAgICAgICAgaGFuZGxlRnVsbFNjcmVlbkV4
aXRFdmVudCgpOwotCi0gICAgTlBFdmVudCBucEV2ZW50OwotICAgIG5wRXZlbnQuZGF0YSA9IDA7
Ci0gICAgbnBFdmVudC50eXBlID0gTlBfQXBwRGVhY3RpdmF0ZWRFdmVudDsKLQotICAgIGRpc3Bh
dGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVBcHBTdGFu
ZGJ5RXZlbnQoKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBzZW5kIGFuIFFOUF9BcHBT
dGFuZGJ5RXZlbnQKLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgbnBFdmVudC5kYXRhID0gMDsK
LSAgICBucEV2ZW50LnR5cGUgPSBOUF9BcHBTdGFuZEJ5RXZlbnQ7Ci0KLSAgICBkaXNwYXRjaE5Q
RXZlbnQobnBFdmVudCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlT3JpZW50YXRpb25F
dmVudChpbnQgYW5nbGUpCi17Ci0gICAgTlBFdmVudCBucEV2ZW50OwotICAgIG5wRXZlbnQudHlw
ZSA9IE5QX09yaWVudGF0aW9uRXZlbnQ7Ci0gICAgbnBFdmVudC5kYXRhID0gKHZvaWQqKWFuZ2xl
OwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OmhhbmRsZVN3aXBlRXZlbnQoKQotewotICAgIGlmICghbV9wcml2YXRlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBQbHVnaW4gb25seSB3YW50cyB0byBrbm93IHRoYXQgaXQgaGFzIHRvIGV4
aXQgZnVsbHNjcmVlbi4KLSAgICBpZiAobV9wcml2YXRlLT5tX2lzRnVsbFNjcmVlbikKLSAgICAg
ICAgaGFuZGxlRnVsbFNjcmVlbkV4aXRFdmVudCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6Omhh
bmRsZVNjcmVlblBvd2VyRXZlbnQoYm9vbCBwb3dlcmVkKQotewotICAgIE5QRXZlbnQgbnBFdmVu
dDsKLSAgICBucEV2ZW50LmRhdGEgPSAwOwotCi0gICAgaWYgKHBvd2VyZWQpCi0gICAgICAgIG5w
RXZlbnQudHlwZSA9IE5QX1NjcmVlblBvd2VyVXBFdmVudDsKLSAgICBlbHNlCi0gICAgICAgIG5w
RXZlbnQudHlwZSA9IE5QX1NjcmVlblBvd2VyRG93bkV2ZW50OwotCi0gICAgZGlzcGF0Y2hOUEV2
ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3
KiBwYXJlbnRXaWRnZXQpCi17Ci0gICAgLy8gSWYgcGFyZW50V2lkZ2V0IGlzIDAsIGxldHMgdW5y
ZWdpc3RlciB0aGUgcGx1Z2luIHdpdGggdGhlIGN1cnJlbnQgcGFyZW50LgotICAgIGlmIChtX3By
aXZhdGUgJiYgKCFwYXJlbnRXaWRnZXQgfHwgcGFyZW50V2lkZ2V0ICE9IHBhcmVudCgpKSkgewot
ICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0ZyYW1lVmlldyhwYXJlbnQoKSkp
IHsKLSAgICAgICAgICAgIGlmIChtX3ByaXZhdGUtPm1faXNCYWNrZ3JvdW5kUGxheWluZykKLSAg
ICAgICAgICAgICAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50
KCktPm9uUGx1Z2luU3RvcEJhY2tncm91bmRQbGF5KHRoaXMsIG1fcHJpdmF0ZS0+bV9wbHVnaW5V
bmlxdWVQcmVmaXguY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIGlmIChtX3ByaXZhdGUtPm1faXNG
dWxsU2NyZWVuKQotICAgICAgICAgICAgICAgIGhhbmRsZUZ1bGxTY3JlZW5FeGl0RXZlbnQoKTsK
LQotICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHVubG9jayB0aGUgaWRsZSAoaWYgd2UgaGF2ZSBs
b2NrZWQgaXQpLgotICAgICAgICAgICAgbV9wcml2YXRlLT5wcmV2ZW50SWRsZShmYWxzZSk7Ci0K
LSAgICAgICAgICAgIC8vIFRoaXMgd2lsbCByZWxlYXNlIGFueSBrZWVwVmlzaWJsZVJlY3RzIGlm
IHRoZXkgd2VyZSBzZXQuCi0gICAgICAgICAgICBtX3ByaXZhdGUtPmNsZWFyVmlzaWJsZVJlY3Rz
KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgICAgICAvLyBJ
ZiB3ZSBoYWQgYSBob2xlIHB1bmNoIHJlY3Qgc2V0LCBjbGVhciBpdC4KLSAgICAgICAgICAgIGlm
IChtX3ByaXZhdGUtPm1fcGxhdGZvcm1MYXllciAmJiAhbV9wcml2YXRlLT5tX2hvbGVQdW5jaFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1fcHJpdmF0ZS0+bV9wbGF0Zm9ybUxheWVy
LT5zZXRIb2xlUHVuY2hSZWN0KEludFJlY3QoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZyYW1l
Vmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+cmVnaXN0ZXJQbHVnaW4o
dGhpcywgZmFsc2UgLypzaG91bGRSZWdpc3RlciovKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IFdpZGdldDo6c2V0UGFyZW50KHBhcmVudFdpZGdldCk7Ci0KLSAgICBpZiAocGFyZW50V2lkZ2V0
KSB7Ci0gICAgICAgIGluaXQoKTsKLQotICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHRv
RnJhbWVWaWV3KHBhcmVudFdpZGdldCk7Ci0KLSAgICAgICAgaWYgKGZyYW1lVmlldyAmJiBtX3By
aXZhdGUpIHsKLSAgICAgICAgICAgIGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKS0+cmVnaXN0ZXJQbHVnaW4odGhpcywgdHJ1ZSAvKnNob3VsZFJlZ2lzdGVyKi8p
OwotICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+ZnJhbWUoKQotICAgICAgICAgICAgICAgJiYg
ZnJhbWVWaWV3LT5mcmFtZSgpLT5sb2FkZXIoKQotICAgICAgICAgICAgICAgJiYgZnJhbWVWaWV3
LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZnJhbWVIYXNMb2FkZWQoKSkKLSAgICAgICAgICAgICAgICBo
YW5kbGVPbkxvYWRFdmVudCgpOwotCi0gICAgICAgICAgICBpZiAobV9wcml2YXRlLT5tX2lzQmFj
a2dyb3VuZFBsYXlpbmcpCi0gICAgICAgICAgICAgICAgZnJhbWVWaWV3LT5ob3N0V2luZG93KCkt
PnBsYXRmb3JtUGFnZUNsaWVudCgpLT5vblBsdWdpblN0YXJ0QmFja2dyb3VuZFBsYXkodGhpcywg
bV9wcml2YXRlLT5tX3BsdWdpblVuaXF1ZVByZWZpeC5jX3N0cigpKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYp
Ci17Ci0gICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNl
dE5QV2luZG93SWZOZWVkZWQoKQotewotICAgIGlmICghbV9wcml2YXRlIHx8ICFtX2lzU3RhcnRl
ZCB8fCAhcGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdG9GcmFtZVZpZXco
cGFyZW50KCkpOwotICAgIGlmICghZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFn
ZUNsaWVudCgpLT5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUg
cGx1Z2luIGRpZG4ndCBsb2FkIHN1Y2Vzc2Z1bGx5LCBubyBwb2ludCBpbiBjYWxsaW5nIHNldHdp
bmRvdwotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3ByaXZhdGUtPm1faXNGdWxsU2NyZWVuKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9oYXNQZW5kaW5nR2VvbWV0
cnlDaGFuZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJpdmF0ZS0+bV9oYXNQZW5kaW5n
R2VvbWV0cnlDaGFuZ2UgPSBmYWxzZTsKLQotICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93UmVj
dC54KCk7Ci0gICAgbV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKLQotICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QubGVmdCA9IG1heCgwLCBtX2NsaXBSZWN0LngoKSk7Ci0gICAgbV9ucFdp
bmRvdy5jbGlwUmVjdC50b3AgPSBtYXgoMCwgbV9jbGlwUmVjdC55KCkpOwotICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QucmlnaHQgPSBtYXgoMCwgbV9jbGlwUmVjdC5tYXhYKCkpOwotICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QuYm90dG9tID0gbWF4KDAsIG1fY2xpcFJlY3QubWF4WSgpKTsKLQotICAg
IGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250Q2FsbFNldFdp
bmRvd01vcmVUaGFuT25jZSkpIHsKLSAgICAgICAgLy8gT25seSBzZXQgdGhlIHdpZHRoIGFuZCBo
ZWlnaHQgb2YgdGhlIHBsdWdpbiBjb250ZW50IHRoZSBmaXJzdCB0aW1lIHNldE5QV2luZG93KCkg
aXMgY2FsbGVkCi0gICAgICAgIC8vIHNvIGFzIHRvIHdvcmthcm91bmQgYW4gaXNzdWUgaW4gRmxh
c2ggd2hlcmUgbXVsdGlwbGUgY2FsbHMgdG8gc2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2lu
Ci0gICAgICAgIC8vIHRvIGNyYXNoIGluIHdpbmRvd2VkIG1vZGUuCi0gICAgICAgIGlmICghbV9p
c1dpbmRvd2VkIHx8IG1fbnBXaW5kb3cud2lkdGggPT0gVW5pbml0aWFsaXplZENvb3JkaW5hdGUg
fHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0gVW5pbml0aWFsaXplZENvb3JkaW5hdGUpIHsKLSAgICAg
ICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKLSAgICAgICAg
ICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2luZG93UmVjdC53
aWR0aCgpOwotICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IG1fd2luZG93UmVjdC5oZWlnaHQo
KTsKLSAgICB9Ci0KLSAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsK
LQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6V2luZG93KiB3aW5kb3cgPSBm
cmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnBsYXRmb3JtV2lu
ZG93KCk7Ci0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgKChOUFNldFdpbmRvd0NhbGxiYWNrU3Ry
dWN0KiltX25wV2luZG93LndzX2luZm8pLT53aW5kb3dHcm91cCA9IHdpbmRvdy0+d2luZG93R3Jv
dXAoKTsKLQotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLQotICAgIC8vIEZJWE1F
OiBQYXNzaW5nIHpvb21GYWN0b3IgdG8gc2V0d2luZG93IG1ha2Ugd2luZG93ZWQgcGx1Z2luIHNj
YWxlIGluY29ycmVjdGx5LgotICAgIC8vIEhhbmRsaW5nIHRoZSB6b29tIGZhY3RvciBwcm9wZXJs
eSBpbiB0aGUgcGx1Z2luIHNpZGUgbWF5IGJlIGEgYmV0dGVyIHNvbHV0aW9uLgotICAgIGRvdWJs
ZSBvbGRab29tRmFjdG9yID0gKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93
LndzX2luZm8pLT56b29tRmFjdG9yOwotICAgICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCop
bV9ucFdpbmRvdy53c19pbmZvKS0+em9vbUZhY3RvciA9IDEuOwotICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwotICAgICgoTlBT
ZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+em9vbUZhY3RvciA9
IG9sZFpvb21GYWN0b3I7Ci0KLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpz
ZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAoaXNQYXJlbnRWaXNpYmxl
KCkgPT0gdmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2lkZ2V0OjpzZXRQYXJlbnRW
aXNpYmxlKHZpc2libGUpOwotCi0gICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdGVsbCB0
aGUgcGx1Z2luIHRvIGhpZGUgaXQncyB3aW5kb3cgaGVyZSwgYnV0IGl0IGRvZXNuJ3QgbWF0dGVy
Ci0gICAgLy8gc2luY2UgdGhlIHdpbmRvdyBtYW5hZ2VyIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhh
dCBmb3IgdXMuCi19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZl
Y3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKLXsKLSAg
ICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOwotCi0gICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dp
dGgoImZpbGU6Ly8vIikpCi0gICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgp
OwotCi0gICAgbG9uZyBsb25nIHNpemU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShmaWxlbmFtZSwg
c2l6ZSkpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIEZJTEUq
IGZpbGVIYW5kbGUgPSBmb3BlbihmaWxlbmFtZS51dGY4KCkuZGF0YSgpLCAiciIpOwotICAgIGlm
ICghZmlsZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0g
ICAgYnVmZmVyLnJlc2l6ZShzaXplKTsKLSAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVy
LmRhdGEoKSwgMSwgc2l6ZSwgZmlsZUhhbmRsZSk7Ci0KLSAgICBmY2xvc2UoZmlsZUhhbmRsZSk7
Ci0KLSAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05P
VF9GT1VORDsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotYm9vbCBQbHVnaW5W
aWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSwgTlBFcnJvciogcmVzdWx0KQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBj
YXNlIE5QTlZUb29sa2l0OgotICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkg
PSAwOwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOgotICAgICAgICAqc3RhdGlj
X2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05P
X0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVmphdmFzY3JpcHRF
bmFibGVkQm9vbDoKLSAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7
Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6Ci0gICAgICAgICpzdGF0aWNfY2Fz
dDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJS
T1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5WTlBDYWxsYmFja3NQdHI6
Ci0gICAgICAgICooKHZvaWQgKiopIHZhbHVlKSA9ICh2b2lkKikmc19OcENhbGxiYWNrczsKLSAg
ICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGNhc2UgTlBOVnhEaXNwbGF5OgotICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDoKLSAgICBj
YXNlIE5QTlZuZXRzY2FwZVdpbmRvdzoKLSAgICBjYXNlIE5QTlZhc2RFbmFibGVkQm9vbDoKLSAg
ICBjYXNlIE5QTlZpc09mZmxpbmVCb29sOgotICAgIGNhc2UgTlBOVnNlcnZpY2VNYW5hZ2VyOgot
ICAgIGNhc2UgTlBOVkRPTUVsZW1lbnQ6Ci0gICAgY2FzZSBOUE5WRE9NV2luZG93OgotICAgIGNh
c2UgTlBOVldpbmRvd05QT2JqZWN0OgotICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVj
dDoKLSAgICBjYXNlIE5QTlZwcml2YXRlTW9kZUJvb2w6Ci0gICAgY2FzZSBOUE5WWm9vbUZhY3Rv
cjoKLSAgICBjYXNlIE5QTlZSb290V2luZG93R3JvdXA6Ci0gICAgY2FzZSBOUE5WQnJvd3Nlcldp
bmRvd0dyb3VwOgotICAgIGNhc2UgTlBOVkJyb3dzZXJEaXNwbGF5Q29udGV4dDoKLSAgICBjYXNl
IE5QTlZQbHVnaW5XaW5kb3dQcmVmaXg6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotfQotCi1ib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCi17Ci0gICAgc3dp
dGNoICh2YXJpYWJsZSkgewotICAgIGNhc2UgTlBOVlpvb21GYWN0b3I6Ci0gICAgICAgICooc3Rh
dGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkpID0gc3RhdGljX2Nhc3Q8dm9pZCo+KCYoKHN0YXRpY19j
YXN0PE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqPihtX25wV2luZG93LndzX2luZm8pKSktPnpv
b21GYWN0b3IpOwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5WUm9vdFdpbmRvd0dyb3VwOiB7Ci0gICAgICAgIEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gdG9GcmFtZVZpZXcocGFyZW50KCkpOwotICAgICAgICBpZiAo
ZnJhbWVWaWV3KSB7Ci0gICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OldpbmRvdyAqd2luZG93ID0gZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpLT5wbGF0Zm9ybVdpbmRvdygpOwotICAgICAgICAgICAgaWYgKHdpbmRvdykgewotICAg
ICAgICAgICAgICAgIHZvaWQqKiB0ZW1wVmFsdWUgPSBzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVl
KTsKLSAgICAgICAgICAgICAgICAqdGVtcFZhbHVlID0gKHZvaWQqKXdpbmRvdy0+cm9vdEdyb3Vw
KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoKnRlbXBWYWx1ZSkgewotICAgICAgICAgICAgICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGNhc2UgTlBOVkJyb3dzZXJXaW5kb3dHcm91cDogewotICAgICAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKTsKLSAgICAgICAgaWYg
KGZyYW1lVmlldykgewotICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpXaW5kb3cqIHdpbmRvdyA9IGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKS0+cGxhdGZvcm1XaW5kb3coKTsKLSAgICAgICAgICAgIGlmICh3aW5kb3cpIHsKLSAg
ICAgICAgICAgICAgICB2b2lkKiogdGVtcFZhbHVlID0gc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgKnRlbXBWYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGNvbnN0X2Nhc3Q8Y2hhcio+KHdpbmRvdy0+d2luZG93R3JvdXAoKSkpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCp0ZW1wVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX05PX0VSUk9SOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBj
YXNlIE5QTlZCcm93c2VyRGlzcGxheUNvbnRleHQ6IHsKLSAgICAgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSB0b0ZyYW1lVmlldyhwYXJlbnQoKSk7Ci0gICAgICAgIGlmIChmcmFtZVZpZXcpIHsK
LSAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGxhdGZvcm1EaXNw
bGF5Q29udGV4dEhhbmRsZSBjb250ZXh0ID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpwbGF0Zm9ybURpc3BsYXlDb250ZXh0KCk7Ci0gICAgICAgICAgICBpZiAoY29udGV4dCkgewot
ICAgICAgICAgICAgICAgIHZvaWQqKiB0ZW1wVmFsdWUgPSBzdGF0aWNfY2FzdDx2b2lkKio+KHZh
bHVlKTsKLSAgICAgICAgICAgICAgICAqdGVtcFZhbHVlID0gc3RhdGljX2Nhc3Q8dm9pZCo+KGNv
bnRleHQpOwotCi0gICAgICAgICAgICAgICAgaWYgKCp0ZW1wVmFsdWUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBjYXNlIE5QTlZQbHVnaW5XaW5kb3dQcmVmaXg6IHsKLSAgICAg
ICAgdm9pZCoqIHRlbXBWYWx1ZSA9IHN0YXRpY19jYXN0PHZvaWQqKj4odmFsdWUpOwotICAgICAg
ICAqdGVtcFZhbHVlID0gc3RhdGljX2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8Y2hhcio+KG1fcHJp
dmF0ZS0+bV9wbHVnaW5VbmlxdWVQcmVmaXguY19zdHIoKSkpOwotCi0gICAgICAgIGlmICgqdGVt
cFZhbHVlKSB7Ci0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VO
RVJJQ19FUlJPUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNhc2UgTlBO
VnhEaXNwbGF5OgotICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDoKLSAgICBjYXNlIE5QTlZuZXRz
Y2FwZVdpbmRvdzoKLSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6Ci0gICAgY2Fz
ZSBOUE5WYXNkRW5hYmxlZEJvb2w6Ci0gICAgY2FzZSBOUE5WaXNPZmZsaW5lQm9vbDoKLSAgICBj
YXNlIE5QTlZzZXJ2aWNlTWFuYWdlcjoKLSAgICBjYXNlIE5QTlZET01FbGVtZW50OgotICAgIGNh
c2UgTlBOVkRPTVdpbmRvdzoKLSAgICBjYXNlIE5QTlZUb29sa2l0OgotICAgIGNhc2UgTlBOVlN1
cHBvcnRzWEVtYmVkQm9vbDoKLSAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDoKLSAgICBjYXNl
IE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6Ci0gICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3ds
ZXNzOgotICAgIGNhc2UgTlBOVnByaXZhdGVNb2RlQm9vbDoKLSAgICBjYXNlIE5QTlZOUENhbGxi
YWNrc1B0cjoKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtR2V0VmFsdWVTdGF0aWModmFyaWFibGUs
IHZhbHVlLCByZXN1bHQpOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgaXMgYSBw
dXJlIHZpcnR1YWwgaW5oZXJpdGVkIGZyb20gV2lkZ2V0IGNsYXNzIGFuZCBhbGwgaW52YWxpZGF0
ZXMKLS8vIGFyZSBmdW5uZWxlZCB0aHJvdWdoIHRoaXMgbWV0aG9kLiBXZSBmb3J3YXJkIHRoZW0g
b24gdG8gZWl0aGVyIHRoZQotLy8gY29tcG9zaXRpbmcgbGF5ZXIgb3IgdGhlIFBsdWdpblZpZXc6
OmludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdCBtZXRob2QuCi12b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFtX3ByaXZh
dGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJlY29yZCB0aGUgcmVnaW9uIHRoYXQgd2Un
dmUgYmVlbiBhc2tlZCB0byBpbnZhbGlkYXRlCi0gICAgbV9wcml2YXRlLT5tX2ludmFsaWRhdGVS
ZWdpb24gPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6dW5pb25SZWdpb25z
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0KHJlY3QpLCBtX3ByaXZhdGUtPm1faW52YWxp
ZGF0ZVJlZ2lvbik7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYg
KG1fcHJpdmF0ZS0+bV9wbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+bV9wbGF0
Zm9ybUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl
bmRpZgotCi0gICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOwotfQotCi12
b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKLXsKLSAgICBpZiAo
IXJlY3QpIHsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGludmFsaWRhdGVSZWN0KEludFJlY3QocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5y
aWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCkpOwotfQotCi12b2lk
IFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pCi17Ci0gICAgaW52YWxpZGF0
ZSgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKLXsKLSAgICBpbnZhbGlk
YXRlKCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCi17Ci0gICAgQVNT
RVJUKG1faXNTdGFydGVkKTsKLSAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9h
ZGVkU3VjY2Vzc2Z1bGx5KTsKLQotICAgIG1fcHJpdmF0ZSA9IG5ldyBQbHVnaW5WaWV3UHJpdmF0
ZSh0aGlzKTsKLQotICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsK
LSAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgICAgIG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVl
ZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwotICAgIH0K
LQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV9wYXJlbnRGcmFt
ZS0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkKLSAgICAgICAgJiYgbV9wYXJlbnRGcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpCi0gICAgICAg
ICYmIG1fcGFyZW50RnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQoKSkgewotICAgICAgICBtX3ByaXZhdGUtPm1fcGxhdGZvcm1MYXllciA9IFBs
dWdpbkxheWVyV2ViS2l0VGhyZWFkOjpjcmVhdGUodGhpcyk7Ci0gICAgICAgIC8vIFRyaWdnZXIg
bGF5ZXIgY29tcHV0YXRpb24gaW4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yCi0gICAgICAgIG1fZWxl
bWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7Ci0gICAgfQot
I2VuZGlmCi0KLSAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKLSAg
ICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8vIE5vdCB1c2VkPwotICAgIG1fbnBXaW5kb3cueCA9
IDA7Ci0gICAgbV9ucFdpbmRvdy55ID0gMDsKLSAgICBtX25wV2luZG93LndpZHRoID0gVW5pbml0
aWFsaXplZENvb3JkaW5hdGU7Ci0gICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBVbmluaXRpYWxpemVk
Q29vcmRpbmF0ZTsKLSAgICBtX25wV2luZG93LndzX2luZm8gPSBuZXcgTlBTZXRXaW5kb3dDYWxs
YmFja1N0cnVjdDsKLSAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cu
d3NfaW5mbyktPnpvb21GYWN0b3IgPSAxLjsKLSAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1
Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPndpbmRvd0dyb3VwID0gMDsKLQotICAgIHNob3coKTsK
LQotICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKSkK
LSAgICAgICAgaGFuZGxlT3JpZW50YXRpb25FdmVudChmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+
cGxhdGZvcm1QYWdlQ2xpZW50KCktPm9yaWVudGF0aW9uKCkpOwotCi0gICAgaWYgKCEobV9wbHVn
aW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwp
KSkgewotICAgICAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLSAgICAgICAgc2V0TlBXaW5kb3dJ
Zk5lZWRlZCgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFRoaXMgd2lsbCB1bmxvY2sgdGhlIGlkbGUgKGlmIHdlIGhhdmUgbG9j
a2VkIGl0KS4KLSAgICBtX3ByaXZhdGUtPnByZXZlbnRJZGxlKGZhbHNlKTsKLQotICAgIC8vIFRo
aXMgd2lsbCByZWxlYXNlIGFueSBrZWVwVmlzaWJsZVJlY3RzIGlmIHRoZXkgd2VyZSBzZXQuCi0g
ICAgbV9wcml2YXRlLT5jbGVhclZpc2libGVSZWN0cygpOwotCi0gICAgLy8gVGhpcyB3aWxsIGVu
c3VyZSB0aGF0IHdlIHVucmVnaXN0ZXJlZCB0aGUgcGx1Z2luLgotICAgIGlmIChGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKSkgewotICAgICAgICBpZiAobV9wcml2
YXRlLT5tX2lzQmFja2dyb3VuZFBsYXlpbmcpCi0gICAgICAgICAgICBmcmFtZVZpZXctPmhvc3RX
aW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPm9uUGx1Z2luU3RvcEJhY2tncm91bmRQbGF5
KHRoaXMsIG1fcHJpdmF0ZS0+bV9wbHVnaW5VbmlxdWVQcmVmaXguY19zdHIoKSk7Ci0KLSAgICAg
ICAgLy8gSWYgd2Ugd2VyZSBzdGlsbCBmdWxsc2NyZWVuLCBlbnN1cmUgd2Ugbm90aWZ5IGV2ZXJ5
b25lIHdlJ3JlIG5vdC4KLSAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9pc0Z1bGxTY3JlZW4pCi0g
ICAgICAgICAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkt
PmRpZFBsdWdpbkV4aXRGdWxsU2NyZWVuKHRoaXMsIG1fcHJpdmF0ZS0+bV9wbHVnaW5VbmlxdWVQ
cmVmaXguY19zdHIoKSk7Ci0KLSAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9vcmllbnRhdGlvbkxv
Y2tlZCkKLSAgICAgICAgICAgIGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKS0+dW5sb2NrT3JpZW50YXRpb24oKTsKLQotICAgICAgICBmcmFtZVZpZXctPmhvc3RX
aW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnJlZ2lzdGVyUGx1Z2luKHRoaXMsIGZhbHNl
IC8qc2hvdWxkUmVnaXN0ZXIqLyk7Ci0gICAgfQotCi0gICAgbV9wcml2YXRlLT5tX2lzQmFja2dy
b3VuZFBsYXlpbmcgPSBmYWxzZTsKLSAgICBtX3ByaXZhdGUtPm1faXNGdWxsU2NyZWVuID0gZmFs
c2U7Ci0KLSAgICBkZWxldGUgbV9wcml2YXRlOwotICAgIG1fcHJpdmF0ZSA9IDA7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6Z2V0V2luZG93SW5mbyhWZWN0b3I8UGx1Z2luV2luZG93SW5mbz4mIHdp
bmRvd0xpc3QpCi17Ci0gICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHZvaWQqIHZhbFB0ciA9IDA7Ci0KLSAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgIHNl
dENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZh
bHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JlZW5XaW5kb3csICZ2YWxQdHIpOwotICAgIHNl
dENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KDApOwotCi0gICAgaWYgKCF2YWxQdHIpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5QU2Ny
ZWVuV2luZG93SGFuZGxlcyogc2NyZWVuV2luSGFuZGxlcyA9IHN0YXRpY19jYXN0PE5QU2NyZWVu
V2luZG93SGFuZGxlcyo+KHZhbFB0cik7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNjcmVl
bldpbkhhbmRsZXMtPm51bU9mV2luZG93czsgaSsrKSB7Ci0gICAgICAgIFBsdWdpbldpbmRvd0lu
Zm8gaW5mbzsKLSAgICAgICAgaW5mby53aW5kb3dQdHIgPSBzY3JlZW5XaW5IYW5kbGVzLT53aW5k
b3dIYW5kbGVzW2ldOwotCi0gICAgICAgIE5QUmVjdCogcmMgPSBzY3JlZW5XaW5IYW5kbGVzLT53
aW5kb3dSZWN0c1tpXTsKLSAgICAgICAgaW5mby53aW5kb3dSZWN0ID0gSW50UmVjdChyYy0+bGVm
dCwgcmMtPnRvcCwgcmMtPnJpZ2h0IC0gcmMtPmxlZnQsIHJjLT5ib3R0b20gLSByYy0+dG9wKTsK
LQotICAgICAgICB3aW5kb3dMaXN0LmFwcGVuZChpbmZvKTsKLSAgICB9Ci19Ci0KLUJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBQbHVnaW5WaWV3Ojpsb2NrRnJvbnRCdWZm
ZXJGb3JSZWFkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVy
ID0gbV9wcml2YXRlLT5sb2NrUmVhZEZyb250QnVmZmVySW50ZXJuYWwoKTsKLQotICAgIGlmICgh
YnVmZmVyKQotICAgICAgICBtX3ByaXZhdGUtPnVubG9ja1JlYWRGcm9udEJ1ZmZlcigpOwotCi0g
ICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojp1bmxvY2tGcm9udEJ1ZmZl
cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X3ByaXZhdGUtPnVubG9ja1JlYWRGcm9udEJ1ZmZlcigpOwotfQotCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotUGxhdGZvcm1MYXllciogUGx1Z2luVmlldzo6cGxhdGZvcm1MYXll
cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBtX3ByaXZhdGUtPm1fcGxhdGZvcm1MYXllci5nZXQoKTsKLX0KLSNlbmRpZgotCi1J
bnRSZWN0IFBsdWdpblZpZXc6OmVuc3VyZVZpc2libGVSZWN0KCkKLXsKLSAgICBpZiAoIW1fcHJp
dmF0ZSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5t
X2tlZXBWaXNpYmxlUmVjdDsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRCYWNrZ3JvdW5kUGxh
eShib29sIHZhbHVlKQotewotICAgIGlmICghbV9wcml2YXRlIHx8IG1fcHJpdmF0ZS0+bV9pc0Jh
Y2tncm91bmRQbGF5aW5nID09IHZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KG1fcHJpdmF0ZS0+bV92aWV3LT5wYXJlbnQoKSk7
Ci0gICAgbV9wcml2YXRlLT5tX2lzQmFja2dyb3VuZFBsYXlpbmcgPSB2YWx1ZTsKLSAgICBpZiAo
bV9wcml2YXRlLT5tX2lzQmFja2dyb3VuZFBsYXlpbmcpCi0gICAgICAgIGZyYW1lVmlldy0+aG9z
dFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+b25QbHVnaW5TdGFydEJhY2tncm91bmRQ
bGF5KHRoaXMsIG1fcHJpdmF0ZS0+bV9wbHVnaW5VbmlxdWVQcmVmaXguY19zdHIoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50
KCktPm9uUGx1Z2luU3RvcEJhY2tncm91bmRQbGF5KHRoaXMsIG1fcHJpdmF0ZS0+bV9wbHVnaW5V
bmlxdWVQcmVmaXguY19zdHIoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld1ByaXZhdGVC
bGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNr
YmVycnkvUGx1Z2luVmlld1ByaXZhdGVCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNTk2KQor
KysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdQcml2YXRlQmxh
Y2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzkzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlBsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeS5oIgotCi0jaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCi0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSNpbmNsdWRlICJQbHVnaW5MYXllcldlYktpdFRocmVhZC5oIgotI2VuZGlmCi0jaW5j
bHVkZSAiTlBDYWxsYmFja3NCbGFja0JlcnJ5LmgiCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtRXhlY3V0YWJsZU1lc3NhZ2UuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1NZXNz
YWdlQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotc3RhdGljIHVuc2ln
bmVkIHNfY291bnRlciA9IDA7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGx1Z2luVmlld1By
aXZhdGU6OlBsdWdpblZpZXdQcml2YXRlKFBsdWdpblZpZXcqIHZpZXcpCi0gICAgOiBtX3ZpZXco
dmlldykKLSAgICAsIG1fcGx1Z2luQnVmZmVyVHlwZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OlBsdWdpbkJ1ZmZlcldpdGhBbHBoYSkKLSAgICAsIG1fcGx1Z2luRnJvbnRCdWZmZXIo
MCkKLSAgICAsIG1faWRsZVByZXZlbnRlZChmYWxzZSkKLSAgICAsIG1faGFzUGVuZGluZ0dlb21l
dHJ5Q2hhbmdlKHRydWUpCi0gICAgLCBtX3NlbnRPbkxvYWQoZmFsc2UpCi0gICAgLCBtX2lzRnVs
bFNjcmVlbihmYWxzZSkKLSAgICAsIG1faXNGb2N1c2VkKGZhbHNlKQotICAgICwgbV9vcmllbnRh
dGlvbkxvY2tlZChmYWxzZSkKLSAgICAsIG1faXNCYWNrZ3JvdW5kUGxheWluZyhmYWxzZSkKLXsK
LSAgICBtX3BsdWdpbkJ1ZmZlcnNbMF0gPSAwOwotICAgIG1fcGx1Z2luQnVmZmVyc1sxXSA9IDA7
Ci0KLSAgICBwdGhyZWFkX211dGV4YXR0cl90IG11dGV4QXR0cmlidXRlczsKLSAgICBwdGhyZWFk
X211dGV4YXR0cl9pbml0KCZtdXRleEF0dHJpYnV0ZXMpOwotICAgIHB0aHJlYWRfbXV0ZXhhdHRy
X3NldHR5cGUoJm11dGV4QXR0cmlidXRlcywgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOwotCi0g
ICAgcHRocmVhZF9tdXRleF9pbml0KCZtX2JhY2tCdWZmZXJNdXRleCwgJm11dGV4QXR0cmlidXRl
cyk7Ci0gICAgcHRocmVhZF9yd2xvY2tfaW5pdCgmbV9mcm9udEJ1ZmZlclJ3TG9jaywgMCk7Ci0K
LSAgICBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZtdXRleEF0dHJpYnV0ZXMpOwotCi0gICAg
Y2hhciB1bmlxdWVJZFs1MF07Ci0gICAgc25wcmludGYodW5pcXVlSWQsIHNpemVvZih1bmlxdWVJ
ZCksICJQbHVnaW5WaWV3QkItJTA4eCUwOHgtIiwgc19jb3VudGVyKyssIChpbnQpdGhpcyk7Ci0g
ICAgbV9wbHVnaW5VbmlxdWVQcmVmaXggPSB1bmlxdWVJZDsKLX0KLQotUGx1Z2luVmlld1ByaXZh
dGU6On5QbHVnaW5WaWV3UHJpdmF0ZSgpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgICAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQqPihtX3BsYXRmb3JtTGF5ZXIuZ2V0KCkpLT5zZXRQ
bHVnaW5WaWV3KDApOwotI2VuZGlmCi0KLSAgICBkZXN0cm95QnVmZmVycygpOwotCi0gICAgcHRo
cmVhZF9tdXRleF9kZXN0cm95KCZtX2JhY2tCdWZmZXJNdXRleCk7Ci0gICAgcHRocmVhZF9yd2xv
Y2tfZGVzdHJveSgmbV9mcm9udEJ1ZmZlclJ3TG9jayk7Ci19Ci0KLUJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6QnVmZmVyVHlwZSBQbHVnaW5WaWV3UHJpdmF0ZTo6dG9CdWZmZXJUeXBl
KE5QU3VyZmFjZUZvcm1hdCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBj
YXNlIEZPUk1BVF9SR0JfNTY1OgotICAgICAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpQbHVnaW5CdWZmZXI7Ci0gICAgY2FzZSBGT1JNQVRfUkdCQV84ODg4OgotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OlBsdWdpbkJ1ZmZlcldpdGhBbHBoYTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlld1ByaXZh
dGU6OnNldFpvb21GYWN0b3IoZmxvYXQgem9vbUZhY3RvcikKLXsKLSAgICBpZiAoKChOUFNldFdp
bmRvd0NhbGxiYWNrU3RydWN0KiltX3ZpZXctPm1fbnBXaW5kb3cud3NfaW5mbyktPnpvb21GYWN0
b3IgIT0gem9vbUZhY3RvcikKLSAgICAgICAgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UgPSB0
cnVlOwotCi0gICAgKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX3ZpZXctPm1fbnBXaW5k
b3cud3NfaW5mbyktPnpvb21GYWN0b3IgPSB6b29tRmFjdG9yOwotfQotCi12b2lkIFBsdWdpblZp
ZXdQcml2YXRlOjpzZXRWaXNpYmxlUmVjdHMoY29uc3QgTlBSZWN0IHJlY3RzW10sIGludDMyX3Qg
Y291bnQpCi17Ci0gICAgbV9rZWVwVmlzaWJsZVJlY3QgPSBJbnRSZWN0KCk7Ci0KLSAgICBpZiAo
IW1fdmlldy0+cGFyZW50KCkgfHwgIWNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgSW50UmVjdCBhZGRSZWN0ID0g
SW50UmVjdChyZWN0c1tpXS5sZWZ0LCByZWN0c1tpXS50b3AsIHJlY3RzW2ldLnJpZ2h0IC0gcmVj
dHNbaV0ubGVmdCwgcmVjdHNbaV0uYm90dG9tIC0gcmVjdHNbaV0udG9wKTsKLSAgICAgICAgbV9r
ZWVwVmlzaWJsZVJlY3QudW5pdGUoYWRkUmVjdCk7Ci0gICAgfQotCi0gICAgLy8gRG9uJ3QgY2F1
c2UgYSBwb3NzaWJsZSBzY3JvbGwgaWYgdGhlIHJlc3VsdCBpcyBhbiBlbXB0eSByZWN0YW5nbGUu
Ci0gICAgaWYgKG1fa2VlcFZpc2libGVSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gQWRqdXN0IHRoZSByZWN0IHRvIHRoZSBwYXJlbnQgd2luZG93IGFuZCB0aGVuIGFk
anVzdCBmb3Igc2Nyb2xsaW5nLgotICAgIG1fa2VlcFZpc2libGVSZWN0ID0gbV92aWV3LT5jb252
ZXJ0VG9Db250YWluaW5nV2luZG93KG1fa2VlcFZpc2libGVSZWN0KTsKLSAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KG1fdmlldy0+cGFyZW50KCkpOwotICAgIG1fa2VlcFZp
c2libGVSZWN0Lm1vdmUoZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpLngoKSwgZnJhbWVWaWV3
LT5zY3JvbGxQb3NpdGlvbigpLnkoKSk7Ci0KLSAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+
cGxhdGZvcm1QYWdlQ2xpZW50KCktPmVuc3VyZUNvbnRlbnRWaXNpYmxlKCk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlld1ByaXZhdGU6OmNsZWFyVmlzaWJsZVJlY3RzKCkKLXsKLSAgICBpZiAoIW1fa2Vl
cFZpc2libGVSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgc2V0VmlzaWJsZVJlY3RzKDAsIDApOwot
fQotCi12b2lkIFBsdWdpblZpZXdQcml2YXRlOjpzaG93S2V5Ym9hcmQoYm9vbCB2YWx1ZSkKLXsK
LSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KG1fdmlldy0+cGFyZW50KCkp
OwotICAgIGZyYW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2hv
d1ZpcnR1YWxLZXlib2FyZCh2YWx1ZSk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlld1ByaXZhdGU6OnJl
cXVlc3RGdWxsU2NyZWVuKCkKLXsKLSAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0Zy
YW1lVmlldyhtX3ZpZXctPnBhcmVudCgpKSkKLSAgICAgICAgaWYgKGZyYW1lVmlldy0+aG9zdFdp
bmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2hvdWxkUGx1Z2luRW50ZXJGdWxsU2NyZWVu
KG1fdmlldywgbV9wbHVnaW5VbmlxdWVQcmVmaXguY19zdHIoKSkpCi0gICAgICAgICAgICBtX3Zp
ZXctPmhhbmRsZUZ1bGxTY3JlZW5BbGxvd2VkRXZlbnQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
UHJpdmF0ZTo6ZXhpdEZ1bGxTY3JlZW4oKQotewotICAgIG1fdmlldy0+aGFuZGxlRnVsbFNjcmVl
bkV4aXRFdmVudCgpOwotfQotCi12b2lkIFBsdWdpblZpZXdQcml2YXRlOjpyZXF1ZXN0Q2VudGVy
Rml0Wm9vbSgpCi17Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0ZyYW1lVmlldyhtX3Zp
ZXctPnBhcmVudCgpKTsKLQotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnpvb21U
b0NvbnRlbnRSZWN0KG1fdmlldy0+bV93aW5kb3dSZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
UHJpdmF0ZTo6bG9ja09yaWVudGF0aW9uKGJvb2wgbGFuZHNjYXBlKQotewotICAgIEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gdG9GcmFtZVZpZXcobV92aWV3LT5wYXJlbnQoKSk7Ci0KLSAgICBpZiAo
IWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZnJhbWVWaWV3LT5ob3N0V2luZG93
KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5sb2NrT3JpZW50YXRpb24obGFuZHNjYXBlKTsKLSAg
ICBtX29yaWVudGF0aW9uTG9ja2VkID0gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3UHJpdmF0
ZTo6dW5sb2NrT3JpZW50YXRpb24oKQotewotICAgIGlmICghbV9vcmllbnRhdGlvbkxvY2tlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0b0ZyYW1lVmll
dyhtX3ZpZXctPnBhcmVudCgpKTsKLQotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkt
PnVubG9ja09yaWVudGF0aW9uKCk7Ci0gICAgbV9vcmllbnRhdGlvbkxvY2tlZCA9IGZhbHNlOwot
fQotCi12b2lkIFBsdWdpblZpZXdQcml2YXRlOjpwcmV2ZW50SWRsZShib29sIHByZXZlbnRJZGxl
KQotewotICAgIGlmIChwcmV2ZW50SWRsZSA9PSBtX2lkbGVQcmV2ZW50ZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdG9GcmFtZVZpZXcobV92aWV3LT5w
YXJlbnQoKSk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZy
YW1lVmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2V0UHJldmVudHNT
Y3JlZW5EaW1taW5nKHByZXZlbnRJZGxlKTsKLSAgICBtX2lkbGVQcmV2ZW50ZWQgPSBwcmV2ZW50
SWRsZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6c2V0SG9sZVB1bmNoKGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGlmICh3aWR0aCA+IDAgJiYgaGVp
Z2h0ID4gMCkKLSAgICAgICAgbV9ob2xlUHVuY2hSZWN0ID0gSW50UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faG9sZVB1bmNoUmVjdCA9IEludFJlY3QoKTsK
LQotICAgIC8vIENsaXAgdGhlIGhvbGUgcHVuY2ggcmVjdGFuZ2xlIGluIGNhc2UgYSBwbHVnaW4g
aXMgJ292ZXJ6ZWFsb3VzJywgb3IgCi0gICAgLy8gZG9lcyBub3QgY2xlYW4gdXAgdGhlIGhvbGUg
cHVuY2ggcmVjdGFuZ2xlIGNvcnJlY3RseSB3aGVuIGV4aXRpbmcgCi0gICAgLy8gZnVsbHNjcmVl
biAod2lsbCBtYXNrIGJ1Z3MgaW4gdGhlIHBsdWdpbikuCi0gICAgbV9ob2xlUHVuY2hSZWN0Lmlu
dGVyc2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3ZpZXctPmZyYW1lUmVjdCgpLnNpemUo
KSkpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX3BsYXRm
b3JtTGF5ZXIpIHsKLSAgICAgICAgSW50UmVjdCByZWN0ID0gbV9ob2xlUHVuY2hSZWN0OwotCi0g
ICAgICAgIC8vIFRyYW5zbGF0ZSBmcm9tIHBsdWdpbiBjb29yZGluYXRlcyB0byBjb250ZW50cyBj
b29yZGluYXRlcy4KLSAgICAgICAgaWYgKCFtX2hvbGVQdW5jaFJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgcmVjdC5tb3ZlKG1fdmlldy0+ZnJhbWVSZWN0KCkueCgpLCBtX3ZpZXctPmZyYW1l
UmVjdCgpLnkoKSk7Ci0KLSAgICAgICAgT3duUHRyPEhvbGVQdW5jaERhdGE+IGhwID0gYWRvcHRQ
dHIobmV3IEhvbGVQdW5jaERhdGEpOwotICAgICAgICBocC0+eCA9IG1faG9sZVB1bmNoUmVjdC54
KCk7Ci0gICAgICAgIGhwLT55ID0gbV9ob2xlUHVuY2hSZWN0LnkoKTsKLSAgICAgICAgaHAtPncg
PSBtX2hvbGVQdW5jaFJlY3Qud2lkdGgoKTsKLSAgICAgICAgaHAtPmggPSBtX2hvbGVQdW5jaFJl
Y3QuaGVpZ2h0KCk7Ci0gICAgICAgIGhwLT5sYXllciA9IG1fcGxhdGZvcm1MYXllcjsKLQotICAg
ICAgICAvLyBOb3RpZnkgY29tcG9zaXRpbmcgbGF5ZXIgYW5kIHBhZ2UgY2xpZW50IGluIG9yZGVy
IHRvIGJlIGFibGUgdG8KLSAgICAgICAgLy8gcHVuY2ggdGhyb3VnaCBjb21wb3NpdGVkIGFuZCBu
b24tY29tcG9zaXRlZCBwYXJ0cyBvZiB0aGUgcGFnZS4KLSAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChucFNldEhvbGVQdW5jaEhhbmRsZXIsIGhwLmxlYWtQdHIoKSk7IC8vIG5wU2V0SG9sZVB1bmNo
SGFuZGxlcigpIHRha2VzIG93bmVyc2hpcCBvZiBocC4KLSAgICB9Ci0jZW5kaWYKLX0KLQotTlBT
dXJmYWNlIFBsdWdpblZpZXdQcml2YXRlOjpsb2NrQmFja0J1ZmZlcigpCi17Ci0gICAgcHRocmVh
ZF9tdXRleF9sb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciA9IG1fcGx1Z2luQnVmZmVyc1sobV9wbHVnaW5G
cm9udEJ1ZmZlciArIDEpICUgUExVR0lOX0JVRkZFUlNdOwotCi0gICAgaWYgKCFidWZmZXIgfHwg
IUJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cGxhdGZvcm1CdWZmZXJIYW5kbGUoYnVm
ZmVyKSkgewotICAgICAgICB1bmxvY2tCYWNrQnVmZmVyKCk7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnBsYXRm
b3JtQnVmZmVySGFuZGxlKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgUGx1Z2luVmlld1ByaXZhdGU6OnVu
bG9ja0JhY2tCdWZmZXIoKQotewotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX2JhY2tCdWZm
ZXJNdXRleCk7Ci19Ci0KLUJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBQ
bHVnaW5WaWV3UHJpdmF0ZTo6bG9ja1JlYWRGcm9udEJ1ZmZlckludGVybmFsKCkKLXsKLSAgICBw
dGhyZWFkX3J3bG9ja19yZGxvY2soJm1fZnJvbnRCdWZmZXJSd0xvY2spOwotICAgIHJldHVybiBt
X3BsdWdpbkJ1ZmZlcnNbbV9wbHVnaW5Gcm9udEJ1ZmZlcl07Ci19Ci0KLU5QU3VyZmFjZSBQbHVn
aW5WaWV3UHJpdmF0ZTo6bG9ja1JlYWRGcm9udEJ1ZmZlcigpCi17Ci0gICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciA9IGxvY2tSZWFkRnJvbnRCdWZmZXJJ
bnRlcm5hbCgpOwotCi0gICAgaWYgKCFidWZmZXIgfHwgIUJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczo6cGxhdGZvcm1CdWZmZXJIYW5kbGUoYnVmZmVyKSkgewotICAgICAgICB1bmxvY2tS
ZWFkRnJvbnRCdWZmZXIoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJu
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cGxhdGZvcm1CdWZmZXJIYW5kbGUoYnVm
ZmVyKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3UHJpdmF0ZTo6dW5sb2NrUmVhZEZyb250QnVmZmVy
KCkKLXsKLSAgICBwdGhyZWFkX3J3bG9ja191bmxvY2soJm1fZnJvbnRCdWZmZXJSd0xvY2spOwot
fQotCi12b2lkIFBsdWdpblZpZXdQcml2YXRlOjpzd2FwQnVmZmVycygpCi17Ci0gICAgUHRocmVh
ZE11dGV4TG9ja2VyIGJhY2tMb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7Ci0gICAgUHRocmVhZFdy
aXRlTG9ja2VyIGZyb250TG9jaygmbV9mcm9udEJ1ZmZlclJ3TG9jayk7Ci0gICAgbV9wbHVnaW5G
cm9udEJ1ZmZlciA9IChtX3BsdWdpbkZyb250QnVmZmVyICsgMSkgJSAyOwotfQotCi1ib29sIFBs
dWdpblZpZXdQcml2YXRlOjpjcmVhdGVCdWZmZXJzKE5QU3VyZmFjZUZvcm1hdCBmb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotCi0gICAg
UHRocmVhZE11dGV4TG9ja2VyIGJhY2tMb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7Ci0gICAgUHRo
cmVhZFdyaXRlTG9ja2VyIGZyb250TG9jaygmbV9mcm9udEJ1ZmZlclJ3TG9jayk7Ci0KLSAgICBi
b29sIGRpZERlc3Ryb3lCdWZmZXJzID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBQ
TFVHSU5fQlVGRkVSUzsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3BsdWdpbkJ1ZmZlcnNbaV0pIHsK
LSAgICAgICAgICAgIGRpZERlc3Ryb3lCdWZmZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6ZGVzdHJveUJ1ZmZlcihtX3BsdWdpbkJ1ZmZlcnNb
aV0pOwotICAgICAgICAgICAgbV9wbHVnaW5CdWZmZXJzW2ldID0gMDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICAgICAgc3VjY2Vz
cyA9IHRydWU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9wbHVnaW5CdWZmZXJzW2ld
ID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpjcmVhdGVCdWZmZXIoCi0gICAgICAg
ICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFNpemUod2lkdGgsIGhlaWdodCksCi0g
ICAgICAgICAgICAgICAgdG9CdWZmZXJUeXBlKGZvcm1hdCkpOwotCi0gICAgICAgICAgICBpZiAo
IW1fcGx1Z2luQnVmZmVyc1tpXSkKLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3VjY2VzcykgewotICAgICAgICBtX3BsdWdpbkJ1
ZmZlclNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBtX3BsdWdpbkJ1ZmZl
clR5cGUgPSB0b0J1ZmZlclR5cGUoZm9ybWF0KTsKLQotICAgICAgICBpZiAoZGlkRGVzdHJveUJ1
ZmZlcnMpIHsKLSAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjp1c2VySW50ZXJmYWNl
VGhyZWFkTWVzc2FnZUNsaWVudCgpLT5kaXNwYXRjaFN5bmNNZXNzYWdlKAotICAgICAgICAgICAg
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVGdW5jdGlvbkNhbGxNZXNzYWdlKCZCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmNvbGxlY3RUaHJlYWRTcGVjaWZpY0dhcmJhZ2Up
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGx1Z2luQnVmZmVyU2l6ZSA9
IEludFNpemUoKTsKLSAgICAgICAgbV9wbHVnaW5CdWZmZXJUeXBlID0gQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpQbHVnaW5CdWZmZXJXaXRoQWxwaGE7Ci0gICAgICAgIGRlc3Ryb3lC
dWZmZXJzKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgUGx1Z2lu
Vmlld1ByaXZhdGU6OnJlc2l6ZUJ1ZmZlcnMoTlBTdXJmYWNlRm9ybWF0IGZvcm1hdCwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0KLSAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBidWZmZXIgY3JlYXRlZCwgdGhlbiB0cnkgdG8gY3JlYXRlIGl0LgotICAg
IGlmICghbV9wbHVnaW5CdWZmZXJTaXplLndpZHRoKCkgfHwgIW1fcGx1Z2luQnVmZmVyU2l6ZS5o
ZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcnMoZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKLQotICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKLSAgICAgICAgcmV0dXJuIGRlc3Ry
b3lCdWZmZXJzKCk7Ci0KLSAgICBQdGhyZWFkTXV0ZXhMb2NrZXIgYmFja0xvY2soJm1fYmFja0J1
ZmZlck11dGV4KTsKLSAgICBQdGhyZWFkV3JpdGVMb2NrZXIgZnJvbnRMb2NrKCZtX2Zyb250QnVm
ZmVyUndMb2NrKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUExVR0lOX0JVRkZFUlMgJiYg
c3VjY2VzczsgaSsrKSB7Ci0gICAgICAgIHN1Y2Nlc3MgJj0gQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpyZWFsbG9jQnVmZmVyKG1fcGx1Z2luQnVmZmVyc1tpXSwKLSAgICAgICAgICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRTaXplKHdpZHRoLCBoZWlnaHQpLAotICAgICAgICAg
ICAgdG9CdWZmZXJUeXBlKGZvcm1hdCkpOwotICAgIH0KLQotICAgIGlmIChzdWNjZXNzKSB7Ci0g
ICAgICAgIG1fcGx1Z2luQnVmZmVyU2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAg
ICAgIG1fcGx1Z2luQnVmZmVyVHlwZSA9IHRvQnVmZmVyVHlwZShmb3JtYXQpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBBdHRlbXB0IHRvIHVuZG8gaWYgd2UgZmFpbGVk
IHRvIGdldCB0aGUgbmV3IHNpemUvZm9ybWF0LiBXZSBjYW4ndCBndWFyYW50ZWUKLSAgICAvLyB3
ZSB3aWxsIGdldCBpdCBiYWNrIHRob3VnaC4KLSAgICBpZiAoIW1fcGx1Z2luQnVmZmVyU2l6ZS53
aWR0aCgpIHx8ICFtX3BsdWdpbkJ1ZmZlclNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgZGVzdHJv
eUJ1ZmZlcnMoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgdW5k
b25lID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFBMVUdJTl9CVUZGRVJTOyBpKysp
IHsKLSAgICAgICAgdW5kb25lICY9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cmVh
bGxvY0J1ZmZlcihtX3BsdWdpbkJ1ZmZlcnNbaV0sCi0gICAgICAgICAgICBtX3BsdWdpbkJ1ZmZl
clNpemUsIG1fcGx1Z2luQnVmZmVyVHlwZSk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZmFpbCB0
byB1bmRvLCBkZWxldGUgdGhlIGJ1ZmZlcnMgYWx0b2dldGhlci4KLSAgICBpZiAoIXVuZG9uZSkK
LSAgICAgICAgZGVzdHJveUJ1ZmZlcnMoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBQbHVnaW5WaWV3UHJpdmF0ZTo6ZGVzdHJveUJ1ZmZlcnMoKQotewotICAgIGJvb2wgZGlkRGVz
dHJveUJ1ZmZlcnMgPSBmYWxzZTsKLQotICAgIHsKLSAgICAgICAgUHRocmVhZE11dGV4TG9ja2Vy
IGJhY2tMb2NrKCZtX2JhY2tCdWZmZXJNdXRleCk7Ci0gICAgICAgIFB0aHJlYWRXcml0ZUxvY2tl
ciBmcm9udExvY2soJm1fZnJvbnRCdWZmZXJSd0xvY2spOwotCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgUExVR0lOX0JVRkZFUlM7IGkrKykgewotICAgICAgICAgICAgaWYgKG1fcGx1Z2lu
QnVmZmVyc1tpXSkgewotICAgICAgICAgICAgICAgIGRpZERlc3Ryb3lCdWZmZXJzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ryb3lC
dWZmZXIobV9wbHVnaW5CdWZmZXJzW2ldKTsKLSAgICAgICAgICAgICAgICBtX3BsdWdpbkJ1ZmZl
cnNbaV0gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fcGx1Z2luQnVm
ZmVyU2l6ZSA9IEludFNpemUoKTsKLSAgICB9Ci0KLSAgICBpZiAoZGlkRGVzdHJveUJ1ZmZlcnMp
IHsKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNz
YWdlQ2xpZW50KCktPmRpc3BhdGNoU3luY01lc3NhZ2UoCi0gICAgICAgICAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6Y3JlYXRlRnVuY3Rpb25DYWxsTWVzc2FnZSgmQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpjb2xsZWN0VGhyZWFkU3BlY2lmaWNHYXJiYWdlKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld1ByaXZhdGVCbGFja0Jl
cnJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1Bs
dWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNjE1OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld1ByaXZhdGVCbGFja0JlcnJ5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIFBsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeV9oCi0j
ZGVmaW5lIFBsdWdpblZpZXdQcml2YXRlQmxhY2tCZXJyeV9oCi0KLSNpbmNsdWRlICJQbHVnaW5W
aWV3LmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgotI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUludFJlY3RSZWdpb24uaD4KLSNpbmNsdWRlIDxwdGhyZWFk
Lmg+Ci0KLSNkZWZpbmUgUExVR0lOX0JVRkZFUlMgMgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFBsdWdpblZpZXdQcml2YXRlIHsKLQotcHVibGljOgotICAgIFBsdWdpblZpZXdQcml2
YXRlKFBsdWdpblZpZXcqKTsKLSAgICB+UGx1Z2luVmlld1ByaXZhdGUoKTsKLQotICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyVHlwZSB0b0J1ZmZlclR5cGUoTlBTdXJm
YWNlRm9ybWF0KTsKLSAgICB2b2lkIHNldFpvb21GYWN0b3IoZmxvYXQpOwotICAgIHZvaWQgc2V0
VmlzaWJsZVJlY3RzKGNvbnN0IE5QUmVjdCByZWN0c1tdLCBpbnQzMl90IGNvdW50KTsKLSAgICB2
b2lkIGNsZWFyVmlzaWJsZVJlY3RzKCk7Ci0gICAgdm9pZCBzaG93S2V5Ym9hcmQoYm9vbCB2YWx1
ZSk7Ci0gICAgdm9pZCByZXF1ZXN0RnVsbFNjcmVlbigpOwotICAgIHZvaWQgZXhpdEZ1bGxTY3Jl
ZW4oKTsKLSAgICB2b2lkIHJlcXVlc3RDZW50ZXJGaXRab29tKCk7Ci0gICAgdm9pZCBsb2NrT3Jp
ZW50YXRpb24oYm9vbCBsYW5kc2NhcGUpOwotICAgIHZvaWQgdW5sb2NrT3JpZW50YXRpb24oKTsK
LSAgICB2b2lkIHByZXZlbnRJZGxlKGJvb2wgcHJldmVudElkbGUpOwotICAgIHZvaWQgc2V0SG9s
ZVB1bmNoKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgICBOUFN1cmZh
Y2UgbG9ja0JhY2tCdWZmZXIoKTsKLSAgICB2b2lkIHVubG9ja0JhY2tCdWZmZXIoKTsKLSAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogbG9ja1JlYWRGcm9udEJ1ZmZl
ckludGVybmFsKCk7Ci0gICAgTlBTdXJmYWNlIGxvY2tSZWFkRnJvbnRCdWZmZXIoKTsKLSAgICB2
b2lkIHVubG9ja1JlYWRGcm9udEJ1ZmZlcigpOwotICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKLSAg
ICBib29sIGNyZWF0ZUJ1ZmZlcnMoTlBTdXJmYWNlRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWln
aHQpOwotICAgIGJvb2wgcmVzaXplQnVmZmVycyhOUFN1cmZhY2VGb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCk7Ci0gICAgYm9vbCBkZXN0cm95QnVmZmVycygpOwotCi1wcml2YXRlOgotICAg
IFBsdWdpblZpZXcqIG1fdmlldzsKLSAgICBwdGhyZWFkX211dGV4X3QgbV9iYWNrQnVmZmVyTXV0
ZXg7Ci0gICAgcHRocmVhZF9yd2xvY2tfdCBtX2Zyb250QnVmZmVyUndMb2NrOwotCi0gICAgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIG1fcGx1Z2luQnVmZmVyc1tQTFVH
SU5fQlVGRkVSU107Ci0gICAgSW50U2l6ZSBtX3BsdWdpbkJ1ZmZlclNpemU7Ci0gICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXJUeXBlIG1fcGx1Z2luQnVmZmVyVHlwZTsK
LSAgICBpbnQgbV9wbHVnaW5Gcm9udEJ1ZmZlcjsKLQotICAgIEludFJlY3QgbV9ob2xlUHVuY2hS
ZWN0OwotICAgIEludFJlY3QgbV9rZWVwVmlzaWJsZVJlY3Q7Ci0KLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0gICAgUmVmUHRyPFBsYXRmb3JtTGF5ZXI+IG1fcGxhdGZvcm1MYXll
cjsKLSNlbmRpZgotCi0gICAgYm9vbCBtX2lkbGVQcmV2ZW50ZWQ7Ci0gICAgYm9vbCBtX2hhc1Bl
bmRpbmdHZW9tZXRyeUNoYW5nZTsKLSAgICBib29sIG1fc2VudE9uTG9hZDsKLSAgICBib29sIG1f
aXNGdWxsU2NyZWVuOwotICAgIGJvb2wgbV9pc0ZvY3VzZWQ7Ci0gICAgYm9vbCBtX29yaWVudGF0
aW9uTG9ja2VkOwotICAgIGJvb2wgbV9pc0JhY2tncm91bmRQbGF5aW5nOwotCi0gICAgc3RkOjpz
dHJpbmcgbV9wbHVnaW5VbmlxdWVQcmVmaXg7Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
SW50UmVjdFJlZ2lvbiBtX2ludmFsaWRhdGVSZWdpb247Ci0gICAgZnJpZW5kIGNsYXNzIFBsdWdp
blZpZXc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220793</attachid>
            <date>2014-01-09 17:39:16 -0800</date>
            <delta_ts>2014-01-10 16:50:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126715-20140109173916.patch</filename>
            <type>text/plain</type>
            <size>767496</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTYw
NykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE0LTAx
LTA5ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
bW92ZSB0aGUgQmxhY2tCZXJyeSBmaWxlcyBvdXRzaWRlIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjcxNQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWFudWFsVGVzdHMvYmxhY2tiZXJy
eTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0JsYWNrQmVycnkuY21h
a2U6IFJlbW92ZWQuCisKIDIwMTQtMDEtMDggIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFtDTWFrZV0gU3BlY2lmeSB0aGUgZXhlY3V0YWJs
ZSBhbmQgbGlicmFyeSBvdXRwdXQgbG9jYXRpb25zIGluIHRoZSBidWlsZApJbmRleDogTWFudWFs
VGVzdHMvYmxhY2tiZXJyeS9jbGVhci1jb29raWUtcmVmcmVzaC1yZXN1bHQucGhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvY2xlYXItY29va2llLXJlZnJlc2gtcmVzdWx0
LnBocAkocmV2aXNpb24gMTYxNjA2KQorKysgTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9jbGVhci1j
b29raWUtcmVmcmVzaC1yZXN1bHQucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICswLDAgQEAK
LTw/cGhwCi0gICAgZWNobyAnVGhpcyB0ZXN0cyB0aGUgZnVuY3Rpb24gb2YgY2xlYXIgY29va2ll
cyBieSBjbGlja2luZyAiQ2xlYXIgQ29va2llcyIgYnV0dG9uIGZyb20gU2V0dGluZ3MgLT4gUHJp
dmFjeSAmIFNlY3VyaXR5Ljxicj4nOwotICAgIGVjaG8gJ0l0IGlzIGZvciBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQyMjMuPGJyPic7Ci0gICAgZWNobyAnUGxlYXNl
IGNsZWFyIHRoZSBjb29raWVzIGZyb20gU2V0dGluZ3MgLT4gUHJpdmFjeSAmIFNlY3VyaXR5IGJ5
IHByZXNzaW5nICJDbGVhciBDb29raWVzIiBidXR0b24sIHRoZW4gcmVmcmVzaCB0aGlzIHBhZ2Ug
dG8gc2VlIHRoZSByZXN1bHQuPGJyPic7Ci0gICAgaWYgKGlzc2V0KCRfQ09PS0lFWyJjb29raWVO
YW1lIl0pKSB7Ci0gICAgICAgIGVjaG8gJ3Jlc3VsdDogTk9UIFBBU1MnOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGVjaG8gJ3Jlc3VsdDogUEFTUyc7Ci0gICAgfQotPz4KSW5kZXg6IE1hbnVhbFRl
c3RzL2JsYWNrYmVycnkvY2xlYXItY29va2llLXJlZnJlc2gucGhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1h
bnVhbFRlc3RzL2JsYWNrYmVycnkvY2xlYXItY29va2llLXJlZnJlc2gucGhwCShyZXZpc2lvbiAx
NjE2MDYpCisrKyBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2NsZWFyLWNvb2tpZS1yZWZyZXNoLnBo
cAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICswLDAgQEAKLTw/cGhwCi0gICAgc2V0Y29va2llKCJj
b29raWVOYW1lIiwgImNvb2tpZVZhbHVlIik7Ci0gICAgaGVhZGVyKCJMb2NhdGlvbjogY2xlYXIt
Y29va2llLXJlZnJlc2gtcmVzdWx0LnBocCIpOwotPz4KSW5kZXg6IE1hbnVhbFRlc3RzL2JsYWNr
YmVycnkvY2xlYXItbG9jYWxzdG9yYWdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMv
YmxhY2tiZXJyeS9jbGVhci1sb2NhbHN0b3JhZ2UuaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysg
TWFudWFsVGVzdHMvYmxhY2tiZXJyeS9jbGVhci1sb2NhbHN0b3JhZ2UuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMSwzMCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotICA8Ym9keT4K
LSAgICA8cD5UaGlzIHRlc3QgY2FzZSBpcyB1c2VkIHRvIHRlc3QgdGhlIGZ1bmN0aW9uIG9mIGNs
ZWFyIGxvY2FsIHN0b3JhZ2UgYnkgY2xpY2tpbmcgIkNsZWFyIExvY2FsIFN0b3JhZ2UiIGJ1dHRv
bgotICAgIGZyb20gU2V0dGluZ3MgLT4gUHJpdmFjeSAmIFNlY3VyaXR5LiBUaGlzIGlzIGZvciA8
YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMyNTMiPmh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzI1MzwvYT48L3A+Ci0gICAg
PGRpdj4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gICAgICBpZiAoIXNl
c3Npb25TdG9yYWdlLmdldEl0ZW0oImtleSIpKSB7Ci0gICAgICAgIC8vIGluaXRpYWxpemUgdGVz
dCBjYXNlCi0gICAgICAgIGRvY3VtZW50LndyaXRlKCJTdGF0dXM6IDxzcGFuIHN0eWxlPSdjb2xv
cjp5ZWxsb3cnPkluaXRpYWw8L3NwYW4+Iik7Ci0gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0
ZW0oImtleSIsICJ2YWx1ZSIpOwotICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgia2V5Iiwg
InZhbHVlIik7Ci0KLSAgICAgICAgLy8gbm90aWZ5IHRvIGNsZWFyIHRoZSBsb2NhbCBzdG9yYWdl
IGFuZCByZWZyZXNoIHRoZSBwYWdlLgotICAgICAgICBkb2N1bWVudC53cml0ZSgiPHA+UGxlYXNl
IGNsZWFyIHRoZSBsb2NhbCBzdG9yYWdlIGZyb20gU2V0dGluZ3MgLT4gUHJpdmFjeSAmIFNlY3Vy
aXR5IGJ5IHByZXNzaW5nIFwiQ2xlYXIgTG9jYWwgU3RvcmFnZVwiIGJ1dHRvbiwgdGhlbiByZWxv
YWQgdGhpcyBwYWdlIHRvIHNlZSB0aGUgcmVzdWx0LjwvcD4iKTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGRvY3VtZW50LndyaXRlKCJSZXN1bHQ6ICIpOwotICAgICAgICBpZiAoIWxvY2FsU3Rv
cmFnZS5nZXRJdGVtKCJrZXkiKSkgewotICAgICAgICAgIC8vIHN1Y2Nlc3MKLSAgICAgICAgICBk
b2N1bWVudC53cml0ZSgiPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz5QQVNTPC9zcGFuPiIpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIGZhaWwKLSAgICAgICAgICBkb2N1bWVudC53
cml0ZSgiPHNwYW4gc3R5bGU9J2NvbG9yOnJlZCc+RkFJTDwvc3Bhbj4iKTsKLSAgICAgICAgfQot
ICAgICAgICBkb2N1bWVudC53cml0ZSgiPHA+SWYgeW91IHdhbnQgdG8gcnVuIHRoaXMgdGVzdCBj
YXNlIGFnYWluLCBwbGVhc2UgcmVzdGFydCB0aGUgYnJvd3Nlci48L3A+Iik7Ci0gICAgICB9Ci0g
ICAgPC9zY3JpcHQ+Ci0gICAgPC9kaXY+Ci0gIDwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IE1hbnVh
bFRlc3RzL2JsYWNrYmVycnkvaGVhZC14aHItbm9uZXhpc3RhbnQtZmlsZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvaGVhZC14aHItbm9uZXhpc3RhbnQtZmlsZS5o
dG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2hlYWQteGhy
LW5vbmV4aXN0YW50LWZpbGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwyNyArMCwwIEBACi08
aHRtbD4KLTxoZWFkPgotPHNjcmlwdD4KLXZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
LXhoci5vcGVuKCJIRUFEIiwgIm5vdGhpbmcudHh0IiwgdHJ1ZSk7Ci14aHIub25yZWFkeXN0YXRl
Y2hhbmdlID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKHhoci5yZWFkeVN0YXRlICE9IDQpIHsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoeGhyLnN0YXR1cyA9PSA0MDQpIHsKLSAgICAg
ICAgYWxlcnQoIlBBU1NFRDogb25yZWFkeXN0YXRlY2hhbmdlIGZpcmVkIHdpdGggc3RhdHVzIDQw
NCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFsZXJ0KCJGQUlMRUQ6IG9ucmVhZHlzdGF0ZWNo
YW5nZSBmaXJlZCB3aXRoIHN0YXR1cyAiICsgeGhyLnN0YXR1cyk7Ci0gICAgfQotCi19Ci14aHIu
b25lcnJvciA9IGZ1bmN0aW9uKCkgewotICAgIGFsZXJ0KCJGQUlMRUQ6IG9uZXJyb3IgZmlyZWQi
KTsKLX0KLXhoci5zZW5kKCk7Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHA+VGhpcyB0
ZXN0IG11c3QgYmUgaG9zdGVkIG9uIGEgd2ViIHNlcnZlciwgbm90IHJ1biBmcm9tIGEgZmlsZSB1
cmwsIGJlY2F1c2UgWE1MSHR0cFJlcXVlc3QgZnJvbSBmaWxlIHVybCBjYXVzZXMgYSBzZWN1cml0
eSBlcnJvci48L3A+Ci08cD5Zb3Ugc2hvdWxkIHNlZSBhbiBhbGVydCBib3ggc2F5aW5nIHdoZXRo
ZXIgdGhlIHRlc3Qgd2FzIHBhc3NlZCBvciBmYWlsZWQuIElmIHRoZXJlIGlzIG5vIGFsZXJ0IGJv
eCwgdGhlIHRlc3Qgd2FzIEZBSUxFRC48L3A+Ci08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBNYW51
YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAtYXV0aC1jaGFsbGVuZ2UuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAtYXV0aC1jaGFsbGVuZ2UuaHRtbAkocmV2aXNp
b24gMTYxNjA2KQorKysgTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9odHRwLWF1dGgtY2hhbGxlbmdl
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMjQgKzAsMCBAQAotPGh0bWw+Ci0gIDxib2R5Pgot
ICAgIDxwPlRvIHJ1biB0aGlzIHRlc3QsIGJvdGggaHR0cC1hdXRoLWNoYWxsZW5nZS5odG1sIGFu
ZCBodHRwLWF1dGgtY2hhbGxlbmdlLnBocCBtdXN0IGJlIHNlcnZlZCBvdmVyIGh0dHAuPC9wPgot
ICAgIDxwPlRoaXMgdGVzdCBjYXNlIGlzIHRvIHRlc3QgdGhlIGJlaGF2aW9yIG9mIGh0dHAgYXV0
aGVudGljYXRpb24gY2hhbGxlbmdlIGRpYWxvZy4gVGhpcyBpcyBmb3IgPGEgaHJlZj0iaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMTM1Ij5odHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAxMzU8L2E+PC9wPgotICAgIDxwPgotICAgICAgUGxl
YXNlIGZvbGxvdyB0aGUgZm9sbG93aW5nIHRlc3QgcHJvY2VkdXJlOgotICAgICAgPG9sPgotICAg
ICAgICA8bGk+VGVzdCBkaWFsb2cgYmVoYXZpb3Igd2hlbiBwcmVzcyBDYW5jZWwgYnV0dG9uPC9s
aT4KLSAgICAgICAgPG9sPgotICAgICAgICAgIDxsaT5TdGFydCB0ZXN0IGNhc2UsIHRoZW4gcHJl
c3MgQ2FuY2VsIGJ1dHRvbiB3aGVuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBwb3BzIHVwOzwvbGk+
Ci0gICAgICAgIDwvb2w+Ci0gICAgICAgIDxsaT5UZXN0IGRpYWxvZyBiZWhhdmlvciB3aGVuIHBy
ZXNzIE9LIGJ1dHRvbjwvbGk+Ci0gICAgICAgIDxvbD4KLSAgICAgICAgICA8bGk+TmF2aWdhdGUg
YmFjayB0byB0aGUgcHJpdmlvdXMgcGFnZTs8L2xpPgotICAgICAgICAgIDxsaT5TdGFydCB0ZXN0
IGNhc2UgYWdhaW4sIHRoZW4gcHJlc3MgT2sgYnV0dG9uIHdpdGhvdXQgaW5wdXQgYW55dGhpbmcg
d2hlbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cgcG9wcyB1cDs8L2xpPgotICAgICAgICAgIDxsaT5X
aGVuIGRpYWxvZyBwb3BzIHVwIGFnYWluLCBlbnRlciBmYWtlIGNyZWRlbnRpYWwgYW5kIHByZXNz
IE9rIGJ1dHRvbjogdXNlcm5hbWU6InFxcXEiLCBwYXNzd29yZDoicXFxcSI8L2xpPgotICAgICAg
ICAgIDxsaT5XaGVuIGRpYWxvZyBwb3BzIHVwIGFnaWFuLCBlbnRlciByZWFsIGNyZWRlbnRpYWwg
YW5kIHByZXNzIE9rIGJ1dHRvbjogdXNlcm5hbWU6ImFhYWEiLCBwYXNzd29yZDoiYWFhYSI8L2xp
PgotICAgICAgICA8L29sPgotICAgICAgPC9vbD4KLSAgICAgIDxhIGhyZWY9Imh0dHAtYXV0aC1j
aGFsbGVuZ2UucGhwIj5TdGFydCB0ZXN0IGhlcmU8L2E+Ci0gICAgPC9wPgotICAgIAotICA8L2Jv
ZHk+Ci08L2h0bWw+CkluZGV4OiBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAtYXV0aC1jaGFs
bGVuZ2UucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvaHR0cC1hdXRo
LWNoYWxsZW5nZS5waHAJKHJldmlzaW9uIDE2MTYwNikKKysrIE1hbnVhbFRlc3RzL2JsYWNrYmVy
cnkvaHR0cC1hdXRoLWNoYWxsZW5nZS5waHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjcgKzAsMCBA
QAotPD9waHAKLSAgICBzZXNzaW9uX3N0YXJ0KCk7Ci0gICAgaWYgKGlzc2V0KCRfU0VTU0lPTlsn
dHJpZWRUaW1lcyddKSkKLSAgICAgICAgJF9TRVNTSU9OWyd0cmllZFRpbWVzJ10gPSAkX1NFU1NJ
T05bJ3RyaWVkVGltZXMnXSArIDE7Ci0gICAgZWxzZQotICAgICAgICAkX1NFU1NJT05bJ3RyaWVk
VGltZXMnXSA9IDE7Ci0KLSAgICAkdXNlcm5hbWUgPSAkcGFzc3dvcmQgPSAiYWFhYSI7Ci0KLSAg
ICBpZiAoJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXSA9PSAkdXNlcm5hbWUgJiYgJF9TRVJWRVJb
J1BIUF9BVVRIX1BXJ10gPT0gJHBhc3N3b3JkKXsKLSAgICAgICAgZWNobyAiQXV0aCBkaWFsb2cg
YmVoYXZpb3Igd2hlbiBwcmVzcyBPSyBidXR0b246ICI7Ci0gICAgICAgIGlmICgkX1NFU1NJT05b
J3RyaWVkVGltZXMnXSA9PSA1KQotICAgICAgICAgICAgZWNobyAiPHNwYW4gc3R5bGU9J2NvbG9y
OmdyZWVuJz5QQVNTPC9zcGFuPiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVjaG8gIjxz
cGFuIHN0eWxlPSdjb2xvcjpyZWQnPkZBSUw8L3NwYW4+IjsKLSAgICAgICAgZXhpdDsKLSAgICB9
IGVsc2UgewotICAgICAgICBoZWFkZXIoJ1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJN
eSBSZWFsbSInKTsKLSAgICAgICAgaGVhZGVyKCdIVFRQLzEuMCA0MDEgVW5hdXRob3JpemVkJyk7
Ci0gICAgICAgIGVjaG8gIkF1dGggZGlhbG9nIGJlaGF2aW9yIHdoZW4gcHJlc3MgQ2FuY2VsIGJ1
dHRvbjogIjsKLSAgICAgICAgaWYgKCRfU0VTU0lPTlsndHJpZWRUaW1lcyddID09IDEpCi0gICAg
ICAgICAgICBlY2hvICI8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPlBBU1M8L3NwYW4+IjsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZWNobyAiPHNwYW4gc3R5bGU9J2NvbG9yOnJlZCc+RkFJ
TDwvc3Bhbj4iOwotICAgICAgICBleGl0OwotICAgIH0KLT8+CkluZGV4OiBNYW51YWxUZXN0cy9i
bGFja2JlcnJ5L2h0dHAtYXV0aC1vbi0yMDAucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1hbnVhbFRlc3Rz
L2JsYWNrYmVycnkvaHR0cC1hdXRoLW9uLTIwMC5waHAJKHJldmlzaW9uIDE2MTYwNikKKysrIE1h
bnVhbFRlc3RzL2JsYWNrYmVycnkvaHR0cC1hdXRoLW9uLTIwMC5waHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMCwwIEBACi08P3BocAotICBoZWFkZXIoJ1dXVy1BdXRoZW50aWNhdGU6IEJhc2lj
IHJlYWxtPSJGQUlMIicpOwotICBoZWFkZXIoJ0hUVFAvMS4wIDIwMCBPSycpOwotICBoZWFkZXIo
J0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicpOwotICBlY2hvICdQQVNTIGlmIHlvdSBkaWQgbm90
IHNlZSBhbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cnOwotPz4KSW5kZXg6IE1hbnVhbFRlc3RzL2Js
YWNrYmVycnkvaHR0cC1hdXRoLXByaXZhdGUtbW9kZS1jaGFuZ2VkLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9odHRwLWF1dGgtcHJpdmF0ZS1tb2RlLWNoYW5nZWQu
aHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9odHRwLWF1
dGgtcHJpdmF0ZS1tb2RlLWNoYW5nZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxNiArMCww
IEBACi08aHRtbD4KLSAgPGJvZHk+Ci0gICAgPHA+Qm90aCBodHRwLWF1dGgtcHJpdmF0ZS1tb2Rl
LWNoYW5nZWQuaHRtbCBhbmQgaHR0cC1hdXRoLXByaXZhdGUtbW9kZS1jaGFuZ2VkLnBocCBtdXN0
IGJlIHNlcnZlZCBvdmVyIGh0dHAuPC9wPgotICAgIDxwPlRoaXMgdGVzdHMgdGhlIGJlaGF2aW9y
IG9mIGh0dHAgYXV0aGVudGljYXRpb24gd2hlbiBwcml2YXRlIGJyb3dzZXJpbmcgaXMgc2V0IGZy
b20gb24gdG8gb2ZmLiBUaGlzIGlzIGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODQ2OTciPmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NDY5NzwvYT48L3A+PGJyPgotICAgIDxwPgotICAgICAgVGVzdCBzdGVwczo8YnI+
Ci0gICAgICAxLiBTZXQgUHJpdmF0ZSBCcm93c2luZyBvbi4gKFNldHRpbmdzIC0+IFByaXZhY3kg
JiBTZWN1cml0eSAtPiBQcml2YXRlIEJyb3dzaW5nKS48YnI+Ci0gICAgICAyLiBQcmVzcyA8YSBo
cmVmPSJodHRwLWF1dGgtcHJpdmF0ZS1tb2RlLWNoYW5nZWQucGhwIj5TdGFydCB0ZXN0IGhlcmU8
L2E+Ljxicj4KLSAgICAgIDMuIFdoZW4gZGlhbG9nIHBvcHMgdXAsIGVudGVyIHJlYWwgY3JlZGVu
dGlhbCh1c2VybmFtZTogImFhYWEiLCBwYXNzd29yZDogImFhYWEiKSBhbmQgcHJlc3MgT2sgYnV0
dG9uLjxicj4KLSAgICAgIDQuIFNldCBQcml2YXRlIEJyb3dzaW5nIG9mZi4gKFNldHRpbmdzIC0+
IFByaXZhY3kgJiBTZWN1cml0eSAtPiBQcml2YXRlIEJyb3dzaW5nKS48YnI+Ci0gICAgICA1LiBS
ZWZyZXNoIHRoZSBwYWdlLjxicj4KLSAgICAgIDYuIFRoZXJlIHNob3VsZCBiZSBhIGRpYWxvZyBm
b3IgeW91IHRvIGlucHV0IHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhZ2Fpbi48YnI+Ci0gICAgICAg
ICBJZiB5b3UgY2FuJ3Qgc2VlIHRoZSBkaWFsb2csIHRoaXMgdGVzdCBmYWlscy48YnI+Ci0gICAg
PC9wPgotICA8L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0
dHAtYXV0aC1wcml2YXRlLW1vZGUtY2hhbmdlZC5waHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFudWFsVGVz
dHMvYmxhY2tiZXJyeS9odHRwLWF1dGgtcHJpdmF0ZS1tb2RlLWNoYW5nZWQucGhwCShyZXZpc2lv
biAxNjE2MDYpCisrKyBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAtYXV0aC1wcml2YXRlLW1v
ZGUtY2hhbmdlZC5waHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcgKzAsMCBAQAotPD9waHAKLSAg
ICAkdXNlcm5hbWUgPSAkcGFzc3dvcmQgPSAiYWFhYSI7Ci0KLSAgICBpZiAoJF9TRVJWRVJbJ1BI
UF9BVVRIX1VTRVInXSA9PSAkdXNlcm5hbWUgJiYgJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10gPT0g
JHBhc3N3b3JkKXsKLSAgICAgICAgZWNobyAnVGVzdCBzdGVwczo8YnI+JzsKLSAgICAgICAgZWNo
byAnMS4gU2V0IFByaXZhdGUgQnJvd3Npbmcgb2ZmLiAoU2V0dGluZ3MgLT4gUHJpdmFjeSAmIFNl
Y3VyaXR5IC0+IFByaXZhdGUgQnJvd3NpbmcpPGJyPic7Ci0gICAgICAgIGVjaG8gJzIuIFJlZnJl
c2ggdGhlIHBhZ2UuPGJyPic7Ci0gICAgICAgIGVjaG8gJzMuIFRoZXJlIHNob3VsZCBiZSBhIGRp
YWxvZyBmb3IgeW91IHRvIGlucHV0IHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhZ2Fpbi48YnI+JzsK
LSAgICAgICAgZWNobyAnSWYgeW91IGNhblwndCBzZWUgdGhlIGRpYWxvZywgdGhpcyB0ZXN0IGZh
aWxzLjxicj4nOwotICAgICAgICBleGl0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGhlYWRlcign
V1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09Ik15IFJlYWxtIicpOwotICAgICAgICBoZWFk
ZXIoJ0hUVFAvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTsKLSAgICAgICAgZWNobyAiQXV0aG9yaXph
dGlvbiBSZXF1aXJlZC4iOwotICAgICAgICBleGl0OwotICAgIH0KLT8+CkluZGV4OiBNYW51YWxU
ZXN0cy9ibGFja2JlcnJ5L2h0dHAtY29va2llLWRhdGFiYXNlLXNldC5waHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9odHRwLWNvb2tpZS1kYXRhYmFzZS1zZXQucGhwCShy
ZXZpc2lvbiAxNjE2MDYpCisrKyBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAtY29va2llLWRh
dGFiYXNlLXNldC5waHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQgKzAsMCBAQAotPD9waHAgaWYg
KGlzc2V0KCRfQ09PS0lFWyJkYl9jb29raWUiXSkpIHsKLSAgICAgICAgICAgICAgaWYgKCRfQ09P
S0lFWyJkYl9jb29raWUiXSA9PSAiaHR0cHNfY29va2llIikKLSAgICAgICAgICAgICAgICAgIGVj
aG8gJ1BBU1MnOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBlY2hvICdG
QUlMJzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaGVhZGVyKCJTZXQtQ29va2llOiBkYl9j
b29raWUgPSBodHRwX2Nvb2tpZTsgZXhwaXJlcz1UaHUsIDEyLUFwci0yMzEyIDA4OjMyOjI5IEdN
VDsiKTsKLSAgICAgICAgICAkcGF0aCA9IHN0cl9yZXBsYWNlKCJodHRwLWNvb2tpZS1kYXRhYmFz
ZS1zZXQucGhwIiwgImh0dHAtY29va2llLWRhdGFiYXNlLXVwZGF0ZS5waHAiLCAkX1NFUlZFUlsi
UEhQX1NFTEYiXSk7Ci0gICAgICAgICAgJG5ld3VybCA9ICdodHRwczovLycuJF9TRVJWRVJbIkhU
VFBfSE9TVCJdLiRwYXRoOwotICAgICAgICAgICRsb2NhdGlvbiA9ICdMb2NhdGlvbjonLiRuZXd1
cmw7Ci0gICAgICAgICAgaGVhZGVyKCRsb2NhdGlvbik7Ci0gICAgICB9Ci0/PgotCkluZGV4OiBN
YW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAtY29va2llLWRhdGFiYXNlLXVwZGF0ZS5waHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9odHRwLWNvb2tpZS1kYXRhYmFzZS11
cGRhdGUucGhwCShyZXZpc2lvbiAxNjE2MDYpCisrKyBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0
dHAtY29va2llLWRhdGFiYXNlLXVwZGF0ZS5waHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMCww
IEBACi08P3BocCAKLSAgICAgICBoZWFkZXIoJ1NldC1Db29raWU6IGRiX2Nvb2tpZSA9IGh0dHBz
X2Nvb2tpZTsgZXhwaXJlcz1UaHUsIDEyLUFwci0yMzEyIDA4OjMyOjI5IEdNVDsnKTsKLSAgICAg
ICBlY2hvICdUZXN0IHVwZGF0aW5nIG9mIGNvb2tpZXNcJyBkYXRhYmFzZS4gSXQgaXMgZm9yIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzc2MC48YnI+JzsKLSAgICAg
ICBlY2hvICdUbyBydW4gdGhpcyB0ZXN0LCBodHRwLWNvb2tpZS1kYXRhYmFzZS1zZXQucGhwIG11
c3QgYmUgc2VydmVkIG92ZXIgaHR0cCBhbmQgaHR0cC1jb29raWUtZGF0YWJhc2UtdXBkYXRlLnBo
cCBtdXN0IGJlIHNlcnZlZCBvdmVyIGh0dHBzLjxicj4nOwotICAgICAgIGVjaG8gJ1Rlc3Qgc3Rl
cHM6PGJyPic7Ci0gICAgICAgZWNobyAnMS4gTG9hZCBodHRwLWNvb2tpZS1kYXRhYmFzZS1zZXQu
cGhwLiAoSWYgeW91IGxvYWQgaHR0cC1jb29raWUtZGF0YWJhc2UtdXBkYXRlLnBocCBkaXJlY3Rs
eSBpbiB0aGlzIHN0ZXAsIHBsZWFzZSBjbGVhciBjb29raWVzIGFuZCBsb2FkIGh0dHAtY29va2ll
LWRhdGFiYXNlLXNldC5waHAgdG8gZmluaXNoIHRoaXMgc3RlcC48YnI+JzsKLSAgICAgICBlY2hv
ICcyLiBSZXN0YXJ0IHRoZSBicm93c2VyIGFuZCBsb2FkIGh0dHAtY29va2llLWRhdGFiYXNlLXNl
dC5waHAgYWdhaW4gdG8gc2VlIHRoZSByZXN1bHQuPGJyPic7Ci0KLT8+CkluZGV4OiBNYW51YWxU
ZXN0cy9ibGFja2JlcnJ5L21ldGEtdmlld3BvcnQtaW5pdGlhbC1zY2FsZS13aWRlLWNvbnRlbnQu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L21ldGEtdmlld3BvcnQt
aW5pdGlhbC1zY2FsZS13aWRlLWNvbnRlbnQuaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTWFu
dWFsVGVzdHMvYmxhY2tiZXJyeS9tZXRhLXZpZXdwb3J0LWluaXRpYWwtc2NhbGUtd2lkZS1jb250
ZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4K
LTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRp
YWwtc2NhbGU9MS4wIj4KLTxzdHlsZT4KLWJvZHkgeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IH0K
LSNncmVlbiB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGdyZWVuOyB9
Ci0jcmVkIHsgd2lkdGg6IDEwMjRweDsgaGVpZ2h0OiAyMDQ4cHg7IGJhY2tncm91bmQ6IHJlZDsg
fQotPC9zdHlsZT4KLTwvaGVhZD4KLTxib2R5PgotPGRpdiBpZD0iZ3JlZW4iPgotVGhpcyBncmVl
biBib3ggc2hvdWxkIGZ1bGx5IGZpbGwgdGhlIGluaXRpYWwgdmlld3BvcnQsIGFuZCB0aGUgdGV4
dCB3aXRoaW4gaXQKLXNob3VsZCB3cmFwIGF0IHRoZSBlZGdlIG9mIHRoZSBzY3JlZW4gYXBwcm9w
cmlhdGVseS4gVGhlIHRlc3QgaXMgUEFTU0VEIGlmCi10aGlzIGdyZWVuIGJveCBpcyBmdWxseSB2
aXNpYmxlIGFuZCB0YWtlcyB1cCB0aGUgd2hvbGUgc2NyZWVuLgotPC9kaXY+Ci08ZGl2IGlkPSJy
ZWQiPgotVGhpcyBzaG91bGQgbm90IGJlIHZpc2libGUgaW5pdGlhbGx5LiBUaGlzIHRlc3QgaXMg
RkFJTEVEIGlmIHlvdSBjYW4gc2VlCi1jYW4gcmVkIHdpdGhvdXQgZmlyc3Qgc2Nyb2xsaW5nIGRv
d24uCi08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IE1hbnVhbFRlc3RzL2JsYWNrYmVy
cnkvbm90aWZpY2F0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2tiZXJy
eS9ub3RpZmljYXRpb24uaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTWFudWFsVGVzdHMvYmxh
Y2tiZXJyeS9ub3RpZmljYXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBA
Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotdmFyIG47
Ci1mdW5jdGlvbiBzZXROb3RpZmljYXRpb24oKQotewotICAgIGlmICh3aW5kb3cud2Via2l0Tm90
aWZpY2F0aW9ucy5jaGVja1Blcm1pc3Npb24oKSAhPSAwKSB7Ci0gICAgICAgIGFsZXJ0KCJ5b3Ug
ZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHBvc3Qgbm90aWZpY2F0aW9ucywgcGxlYXNlIGFsbG93
IG5vdGlmaWNhdGlvbnMgYnkgY2xpY2tpbmcgdGhhdCBsaW5rIik7Ci0gICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdhbGxvd05vdGlmaWNhdGlvbkxpbmsnKS5zdHlsZS5iYWNrZ3JvdW5k
Q29sb3IgPSAnUmVkJzsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIG4gPSB3aW5kb3cu
d2Via2l0Tm90aWZpY2F0aW9ucy5jcmVhdGVOb3RpZmljYXRpb24od2luZG93LmxvY2F0aW9uLmhy
ZWYgKyAnL2Zhdmljb24uaWNvJywgJ05vdGlmeSBtZScsICdUaGlzIGlzIHRoZSBub3RpZmljYXRp
b24gYm9keScpOwotICAgIGxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbGFjZSIpOwot
ICAgIG4ub25zaG93ID0gZnVuY3Rpb24oKSAgeyBsb2cuaW5uZXJUZXh0ID0gIm5vdGlmaWNhdGlv
biBzaG93aW5nIjsgfQotICAgIG4ub25jbGljayA9IGZ1bmN0aW9uKCkgeyBsb2cuaW5uZXJUZXh0
ID0gIm5vdGlmaWNhdGlvbiBjbGlja2VkIjsgfQotICAgIG4ub25lcnJvciA9IGZ1bmN0aW9uKCkg
eyBsb2cuaW5uZXJUZXh0ID0gIm5vdGlmaWNhdGlvbiBlcnJvciI7IH0KLSAgICBuLm9uY2xvc2Ug
PSBmdW5jdGlvbigpIHsgbG9nLmlubmVyVGV4dCA9ICJub3RpZmljYXRpb24gY2xvc2VkIjsgfQot
ICAgIG4uc2hvdygpOwotICAgIGxvZy5pbm5lclRleHQgPSAiRGlkIHlvdSBub3RpY2UgdGhlIG5v
dGlmaWNhdGlvbiA/IFRoZXJlIGFyZSAzIHdheXMgdGhlIG5vdGlmaWNhdGlvbiB3aWxsIGdvIGF3
YXk6XG4gMS4gSXQgYXV0b21pY2FsbHkgZ29lcyBhd2F5IGluIDMwIHNlY29uZHM7XG4gMi4geW91
IGNhbiBjbGljayB0aGUgY2xvc2UgYnV0dG9uIG9uIHRoZSBub3RpZmljYXRpb24gdG8gY2xvc2Ug
aXQ7XG4gMy4gQ2xpY2sgYWJvdmUgbGluayAnQ2xpY2sgdG8gY2FuY2VsIHRoZSBub3RpZmljYXRp
b24uXG5cbiBQbGVhc2UgdmVyaWZ5IGFsbCB3b3JrOyBXaGVuZXZlciB0aGUgaWNvbiBpcyBjbGlj
a2VkLCBjYW5jZWxsZWQsIGNsb3NlZCwgZXRjLiB0aGVyZSB3aWxsIGJlIGNvcnJlc3BvbmRpbmcg
bG9nIGlzIHRoaXMgYXJlYSwgcGxlYXNlIG5vdGljZSBpZiB0aGV5IHNob3cgdXAuIjsKLQotICAg
IHNldFRpbWVvdXQodGltZW91dCwgMzAwMDApOwotICAgIGZ1bmN0aW9uIHRpbWVvdXQoKSB7Ci0g
ICAgICAgIG4uY2FuY2VsKCk7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBzZXRBbGxvd05vdGlmaWNh
dGlvbigpCi17Ci0gICAgd2luZG93LndlYmtpdE5vdGlmaWNhdGlvbnMucmVxdWVzdFBlcm1pc3Np
b24ocGVybWlzc2lvbkdyYW50ZWQpOwotfQotCi1mdW5jdGlvbiBwZXJtaXNzaW9uR3JhbnRlZCgp
Ci17Ci0gICAgaWYgKHdpbmRvdy53ZWJraXROb3RpZmljYXRpb25zLmNoZWNrUGVybWlzc2lvbigp
ID09IDApCi0gICAgICAgIGFsZXJ0KCJ5b3Ugbm93IGhhdmUgcGVybWlzc2lvbiB0byBwb3N0IE5v
dGlmaWNhdGlvbnMiKTsKLSAgICBlbHNlCi0gICAgICAgIGFsZXJ0KCJ5b3UgZG9uJ3QgaGF2ZSBw
ZXJtaXNzaW9uIHRvIHBvc3QgTm90aWZpY2F0aW9ucyIpOwotfQotPC9zY3JpcHQ+Ci08L2hlYWQ+
Ci0KLTxib2R5IHN0eWxlPSJmb250LXNpemU6eC1sYXJnZSI+Ci08YSBzdHlsZT0ibWFyZ2luLWxl
ZnQ6IDIwcHg7IiBpZD0iYWxsb3dOb3RpZmljYXRpb25MaW5rIiAgb25jbGljaz0ic2V0QWxsb3dO
b3RpZmljYXRpb24oKTsgcmV0dXJuIGZhbHNlOyIgaHJlZj0iIyI+Q2xpY2sgdG8gc2V0IGFsbG93
IG5vdGlmaWNhdGlvbnMgZmlyc3Q8L2E+IDxicj4KLQotPGEgc3R5bGU9Im1hcmdpbi1sZWZ0OiAy
MHB4OyIgb25jbGljaz0ic2V0Tm90aWZpY2F0aW9uKCk7IHJldHVybiBmYWxzZTsiIGhyZWY9IiMi
PkNsaWNrIHRvIHNldCBub3RpZmljYXRpb248L2E+IDxicj4KLTxhIHN0eWxlPSJtYXJnaW4tbGVm
dDogMjBweDsiIG9uY2xpY2s9Im4uY2FuY2VsKCk7IHJldHVybiBmYWxzZTsiIGhyZWY9IiMiPkNs
aWNrIHRvIGNhbmNlbCB0aGUgbm90aWZpY2F0aW9uPC9hPiA8YnI+Ci08YnI+PGJyPgotPGRpdiBp
ZD0icGxhY2UiPgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KLQpJbmRleDogTWFudWFsVGVz
dHMvYmxhY2tiZXJyeS9zZWxlY3QtcG9wdXAtaXRlbXMtdW5pY29kZS1kaXNwbGF5Lmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9zZWxlY3QtcG9wdXAtaXRlbXMtdW5p
Y29kZS1kaXNwbGF5Lmh0bWwJKHJldmlzaW9uIDE2MTYwNikKKysrIE1hbnVhbFRlc3RzL2JsYWNr
YmVycnkvc2VsZWN0LXBvcHVwLWl0ZW1zLXVuaWNvZGUtZGlzcGxheS5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci0gIDxib2R5Pgot
ICAgIDxwPlRoaXMgdGVzdHMgaWYgd2UgY2FuIHNob3cgdW5pY29kZSBjb3JyZWN0bHkuIEl0IGlz
IGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk5
NjkiPmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTk2OS48L2E+PC9w
PgotICAgIDxwPgotICAgICAgSWYgeW91IGNhbiBzZWUgY2hpbmVzZSjljJfkuqwsIOa+s+mXqCkg
YWZ0ZXIgcHJlc3NpbmcgdGhlIGRyb3BsaXN0LCB0aGlzIHRlc3QgcGFzc2VzLgotICAgPC9wPgot
ICAgIDxzZWxlY3Q+Ci0gICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ9InNlbGVjdGVkIj7ljJfkuqw8
L29wdGlvbj4KLSAgICAgICAgPG9wdGlvbj5TaGVuWWFuZzwvb3B0aW9uPgotICAgICAgICA8b3B0
aW9uPua+s+mXqDwvb3B0aW9uPgotICAgICAgICA8b3B0aW9uPlJlcHVibGljIG9mIEPDtHRlIGQn
SXZvaXJlPC9vcHRpb24+Ci0gICAgPC9zZWxlY3Q+Ci0gIDwvYm9keT4KLTwvaHRtbD4KSW5kZXg6
IE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvc2VsZWN0aW9uLXRvdWNoLW92ZXJyaWRlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9zZWxlY3Rpb24tdG91Y2gtb3ZlcnJp
ZGUuaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9zZWxl
Y3Rpb24tdG91Y2gtb3ZlcnJpZGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwyICswLDAgQEAK
LTxicj48dGV4dGFyZWEgY29scz0iNDUiIHJvd3M9IjUiPlRleHQgQXJlYSB3aXRob3V0IG92ZXJy
aWRlIGF0dHJpYnV0ZSBzZWxlY3QgYWxsIHRoaXMgdGV4dCBhbmQgdGFwIG9uIHRoZSBzZWxlY3Rp
b24sIGNvbnRleHQgbWVudSBzaG91bGQgYmUgc2hvd24hPC90ZXh0YXJlYT4KLTxicj48dGV4dGFy
ZWEgY29scz0iNDUiIHJvd3M9IjUiIGRhdGEtYmxhY2tiZXJyeS1lbmQtc2VsZWN0aW9uLW9uLXRv
dWNoPSJvbiI+VGV4dCBBcmVhIHdpdGggb3ZlcnJpZGUgYXR0cmlidXRlIHNlbGVjdCBhbGwgdGhp
cyB0ZXh0IGFuZCB0YXAgb24gdGhlIHNlbGVjdGlvbiwgY2FyZXQgc2hvdWxkIGJlIHBsYWNlZCE8
L3RleHRhcmVhPgpJbmRleDogTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9zbGlkZXItdGh1bWItY29u
c3VtZXMtZXZlbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L3Ns
aWRlci10aHVtYi1jb25zdW1lcy1ldmVudC5odG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBNYW51
YWxUZXN0cy9ibGFja2JlcnJ5L3NsaWRlci10aHVtYi1jb25zdW1lcy1ldmVudC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MPgotPGh0bWw+Ci08aGVh
ZD4KLTx0aXRsZT4gU2xpZGVyIHRodW1iIHNob3VsZCBlYXQgZXZlbnQgPC90aXRsZT4KLTwvaGVh
ZD4KLQotPGJvZHk+Ci08cD4KLVRoaXMgdGVzdCBjYXNlIHZlcmlmaWVzIHRoYXQgYW4gZXZlbnQg
c2hvdWxkIGJlIGNvbXN1bWVkIDxicj4KLWJ5IHRoZSBzbGlkZXIgdGh1bWIgZWxlbWVudCB3aGVu
IHByZXNzZWQgb24gaXQsIHRvIHByZXZlbnQ8YnI+Ci10aGUgZXZlbnQgYmVlbiB1c2VkIGZvciBw
YWdlIHpvb21pbmcgb3Igc2Nyb2xsaW5nLiA8YnI+PGJyPgotCi1TdGVwcyB0byB2ZXJpZnk6PGJy
PgotMS4gWm9vbSBpbiB0aGUgcGFnZS48YnI+Ci0yLiBQcmVzcyBhbmQgZHJhZyB0aGUgc2xpZGVy
IHRodW1iLjxicj48YnI+Ci0KLUlmIHRoZSBzbGlkZXIgY2hhbmdlcyBidXQgdGhlIHBhZ2Ugc3Rh
eXMsIGl0IFNVQ0NFRURTLjxicj4KLW90aGVyc2llLCBpZiB0aGUgcGFnZSBzY3JvbGxzLCBpdCBG
QUlMUy48YnI+PGJyPgotCi1yYW5nZTogICAgPGlucHV0IHR5cGU9InJhbmdlIiBtaW49IjAiIG1h
eD0iMTAwIiBzdGVwPSIxIiAvPjxicj4KLTwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IE1hbnVhbFRl
c3RzL2JsYWNrYmVycnkvdmlkZW8taGxzLWNvbnRyb2xzLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFu
dWFsVGVzdHMvYmxhY2tiZXJyeS92aWRlby1obHMtY29udHJvbHMuaHRtbAkocmV2aXNpb24gMTYx
NjA2KQorKysgTWFudWFsVGVzdHMvYmxhY2tiZXJyeS92aWRlby1obHMtY29udHJvbHMuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMSwyMiArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBu
YW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxl
PTEuMCI+Ci0gIDx0aXRsZT5EeW5hbWljIExpdmUgU3RyZWFtaW5nIGNvbnRyb2xzPC90aXRsZT4K
LTwvaGVhZD4KLTxib2R5PgotPGgzPkR5bmFtaWMgTGl2ZSBTdHJlYW1pbmcgY29udHJvbHM8L2gz
PgotPHA+VGhpcyBwYWdlIGV4aXN0cyB0byB0ZXN0IHRoZSBoaWRpbmcgb2YgdGhlIHRpbWVsaW5l
IGNvbnRhaW5lciBmb3IKLWR5bmFtaWMgbGl2ZSBzdHJlYW1zLiBPbmNlIG1ldGFkYXRhIGxvYWRz
LCB0aGUgY29udHJvbCBiYXIgYmVsb3cgc2hvdWxkCi1jb250YWluIG9ubHkgMyBidXR0b25zOiAi
cGxheSIgb24gdGhlIGxlZnQsIGFuZCAiZnVsbHNjcmVlbiIgJiAibXV0ZQotKHZvbHVtZSkiIG9u
IHRoZSByaWdodC4gTm8gc2VlayBzbGlkZXIgb3IgbWVkaWEgdGltZXMgc2hvdWxkIGJlIHNob3du
LgotSWYgb25seSB0aGUgInBsYXkiIGJ1dHRvbiBzaG93cywgaXQgbWVhbnMgdGhlIGxpbmsgdG8g
dGhlIHRlc3QgdmlkZW8gaXMKLW91dCBvZiBkYXRlLgotPC9wPgotCi08dmlkZW8gd2lkdGg9IjMw
MCIgaGVpZ2h0PSIyMDAiIGNvbnRyb2xzPgotICA8c291cmNlIHNyYz0iaHR0cDovL3h0ZWxlYW50
aW9xdWlhd2Vic3guYXBpLmNoYW5uZWwubGl2ZXN0cmVhbS5jb20vMy4wL3BsYXlsaXN0Lm0zdTgi
PgotPC92aWRlbz4KLQotPGJyPiA8YnI+IDxicj4KLTxhIGhyZWY9Imh0dHA6Ly94dGVsZWFudGlv
cXVpYXdlYnN4LmFwaS5jaGFubmVsLmxpdmVzdHJlYW0uY29tLzMuMC9wbGF5bGlzdC5tM3U4Ij5M
aW5rIGRpcmVjdGx5IHRvIHZpZGVvPC9hPgotPC9ib2R5PjwvaHRtbD4KSW5kZXg6IE1hbnVhbFRl
c3RzL2JsYWNrYmVycnkvdmlkZW8tbG9hZC13aXRoLWF1dGhlbnRpY2F0aW9uLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS92aWRlby1sb2FkLXdpdGgtYXV0aGVudGlj
YXRpb24uaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTWFudWFsVGVzdHMvYmxhY2tiZXJyeS92
aWRlby1sb2FkLXdpdGgtYXV0aGVudGljYXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw2
OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTD4KLTxodG1sPgotPGhlYWQ+Ci0gICAgPHRpdGxlPnZp
ZGVvLWxvYWQtd2l0aC1hdXRoZW50aWNhdGlvbjwvdGl0bGU+Ci0gICAgPHNjcmlwdCBzcmM9Ii4u
Ly4uL0xheW91dFRlc3RzL21lZGlhL3ZpZGVvLXRlc3QuanMiIHR5cGU9InRleHQvamF2YXNjcmlw
dCI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPgotICBUaGlzIHRlc3QgY2FzZSBpcyBm
b3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjE0
Ij5odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQyMTQ8L2E+PGJyPgot
ICBUaGlzIHRlc3QgY2FzZSBpcyBhbWluZyBhdCB0ZXN0aW5nIHZpZGVvIGxvYWRpbmcgd2l0aCBo
dHRwIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4gVG8gdXNlIHRoaXMgdGVzdCBjYXNlIHlvdSBz
aG91bGQgc2V0dXAgeW91ciBhcGFjaGUyIGh0dHAgc2VydmVyCi0gIHdpdGggaHR0cCBhdXRoZW50
aWNhdGlvbiBzdXBwb3J0IGZpcnN0Ljxicj4KLSAgPHA+Ci0gICAgPGgzPldheXMgdG8gc2V0dXAg
dGhlIGFwYWNoZTIgaHR0cCBzZXJ2ZXIgd2l0aCBodHRwIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQ8
L2gzPgotICAgIDxvbD4KLSAgICAgIDxsaT5BZGQgIkFsbG93T3ZlcnJpZGUgQXV0aENvbmZpZyIg
dG8gJmx0O0RpcmVjdG9yeSZndDsgc2V0dGluZyBpbiB5b3VyIHNpdGUgY29uZmlndXJhdGlvbiBm
aWxlOzwvbGk+Ci0gICAgICA8bGk+Q3JlYXRlIHRoZSBwYXNzd29yZCBmaWxlIHVzaW5nIGNvbW1h
bmQ6IDxjb2RlPmh0cGFzc3dkIC1jICZsdDtwYXNzb3JkX2ZpbGVuYW1lJmd0OyAmbHQ7dXNlcm5h
bWUmZ3Q7PC9jb2RlPiwgYW5kIHB1dCB0aGlzIGZpbGUgaW50byAmbHQ7U2VydmVyUm9vdCZndDs7
PC9saT4KLSAgICAgIDxsaT5DcmVhdGUgYSBkaXJlY3RvcnkgdW5kZXIgeW91ciBzZXJ2ZXIgJmx0
O0RpcmVjdG9yeSZndDssIGFuZCBjcmVhdGUgdGhlIGZpbGUgLmh0YWNjZXNzIGluIHRoaXMgZGly
ZWN0b3J5OzwvbGk+Ci0gICAgICA8bGk+Q29uZmlndXJlIHRoZSAuaHRhY2Nlc3MgZmlsZSB3aXRo
IHRoZSBmb2xsb3dpbmcgY29udGVudDoKLSAgICAgICAgPHByZT5BdXRoVHlwZSAmbHQ7QmFzaWN8
RGlnZXN0Jmd0OwotQXV0aE5hbWUgIlZpZGVvIEhUVFAgQXV0aGVudGljYXRpb24iCi1BdXRoVXNl
ckZpbGUgJmx0Oy9wYXRoL3RvL3RoZS9wYXNzd29yZC9maWxlJmd0OwotUmVxdWlyZSB1c2VyICZs
dDt1c2VybmFtZSZndDs8L3ByZT4KLSAgICAgIDwvbGk+Ci0gICAgICA8bGk+UHV0IHlvdXIgdGVz
dCB2aWRlbyBmaWxlIGludG8gdGhpcyBkaXJlY3RvcnksIGFuZCByZXN0YXJ0IHlvdXIgYXBhY2hl
MiBodHRwIHNlcnZlci48L2xpPgotICAgIDwvb2w+Ci0gICAgPHA+TW9yZSBpbmZvcm1hdGlvbiBh
Ym91dCBjb25maWd1cmluZyBhcGFjaGUyIGh0dHAgYXV0aGVudGljYXRpb24sIHBsZWFzZSByZWZl
ciB0byBhcGFjaGUgMi4wIGRvY3VtZW50OiA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9y
Zy9kb2NzLzIuMC9ob3d0by9hdXRoLmh0bWwiPkF1dGhlbnRpY2F0aW9uLCBBdXRob3JpemF0aW9u
IGFuZCBBY2Nlc3MgQ29udHJvbDwvYT4uPC9wPgotICA8L3A+Ci0gIDxwPgotICAgIDxoMz5XYXlz
IHRvIHRlc3Q8L2gzPgotICAgIDxvbD4KLSAgICAgIDxsaT5TZXR1cCB5b3VyIGFwYWNoZTIgaHR0
cCBzZXJ2ZXIgYW5kIHByZXBhcmUgdGhlIHZpZGVvIGZpbGUgYXMgbWVudGlvbmVkIGFib3ZlOzwv
bGk+Ci0gICAgICA8bGk+RW50ZXIgdGhlIGxpbmsgcG9pbnRpbmcgdG8gdGhlIHZpZGVvIGZpbGUg
aW4gdGhlICJWaWRlbyBTb3VyY2UiIHRleHQgYXJlYSBiZWxvdzs8L2xpPgotICAgICAgPGxpPlRo
ZW4gcHJlc3MgbG9hZCBidXR0b24sIGFuZCBmaWxsIHRoZSBhdXRoZW50aWNhdGlvbiBjaGFsbGVu
Z2UgcG9wIHVwIGRpYWxvZyB3aXRoIHRoZSBjcmVkZW50aWFsIGluZm9ybWF0aW9uIGNyZWF0ZWQg
YmVmb3JlLCB0aGVuIHdhaXQgZm9yIHRoZSByZXN1bHQuPC9saT4KLSAgICA8L29sPgotICA8L3A+
Ci08L3A+Ci08aHIgLz4KLTxkaXY+Ci0gICAgVmlkZW8gU291cmNlOgotICAgIDxpbnB1dCB0eXBl
PSJ1cmwiIGlkPSJ1cmwiIG5hbWU9InZpZGVvU3JjIiBzaXplPSIxMDAiPjwvaW5wdXQ+PGJyPgot
ICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJMb2FkIiBvbmNsaWNrPSJsb2FkKCkiIC8+
Ci08L2Rpdj4KLTx2aWRlbyBpZD0idmlkZW8iIGhpZGRlbj0iaGlkZGVuIj48L3ZpZGVvPgotPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIG9uTG9hZGVkKCkKLSAg
ICB7Ci0gICAgICAgIGxvZ1Jlc3VsdCh0cnVlLCAiVmlkZW8gZmlsZSBzdWNjZXNzZnVsbHkgbG9h
ZGVkLCB0ZXN0IGNhc2UgcGFzc2VkLiIpOwotICAgICAgICBlbmRUZXN0KCk7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gb25FcnJvcigpCi0gICAgewotICAgICAgICBmYWlsVGVzdCgiTG9hZCB2aWRl
byBmaWxlIGVycm9yLCB0ZXN0IGNhc2UgZmFpbGVkLiIpOwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IGxvYWQoKQotICAgIHsKLSAgICAgICAgZmluZE1lZGlhRWxlbWVudCgpOwotICAgICAgICB3YWl0
Rm9yRXZlbnQoImxvYWRzdGFydCIpOwotICAgICAgICB3YWl0Rm9yRXZlbnQoImxvYWRlZGRhdGEi
LCBvbkxvYWRlZCk7Ci0gICAgICAgIHdhaXRGb3JFdmVudCgiZXJyb3IiLCBvbkVycm9yKTsKLQot
ICAgICAgICBtZWRpYUVsZW1lbnQuc3JjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybCIp
LnZhbHVlOwotICAgICAgICBtZWRpYUVsZW1lbnQubG9hZCgpOwotICAgIH0KLTwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpJbmRleDogTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9jbGVhci1jb29r
aWUtcmVmcmVzaC1yZXN1bHQucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1hbnVhbFRlc3RzL2JsYWNrYmVy
cnkvY2xlYXItY29va2llLXJlZnJlc2gtcmVzdWx0LnBocAkocmV2aXNpb24gMTYxNjA2KQorKysg
TWFudWFsVGVzdHMvYmxhY2tiZXJyeS9jbGVhci1jb29raWUtcmVmcmVzaC1yZXN1bHQucGhwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEwICswLDAgQEAKLTw/cGhwCi0gICAgZWNobyAnVGhpcyB0ZXN0
cyB0aGUgZnVuY3Rpb24gb2YgY2xlYXIgY29va2llcyBieSBjbGlja2luZyAiQ2xlYXIgQ29va2ll
cyIgYnV0dG9uIGZyb20gU2V0dGluZ3MgLT4gUHJpdmFjeSAmIFNlY3VyaXR5Ljxicj4nOwotICAg
IGVjaG8gJ0l0IGlzIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODQyMjMuPGJyPic7Ci0gICAgZWNobyAnUGxlYXNlIGNsZWFyIHRoZSBjb29raWVzIGZyb20gU2V0
dGluZ3MgLT4gUHJpdmFjeSAmIFNlY3VyaXR5IGJ5IHByZXNzaW5nICJDbGVhciBDb29raWVzIiBi
dXR0b24sIHRoZW4gcmVmcmVzaCB0aGlzIHBhZ2UgdG8gc2VlIHRoZSByZXN1bHQuPGJyPic7Ci0g
ICAgaWYgKGlzc2V0KCRfQ09PS0lFWyJjb29raWVOYW1lIl0pKSB7Ci0gICAgICAgIGVjaG8gJ3Jl
c3VsdDogTk9UIFBBU1MnOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVjaG8gJ3Jlc3VsdDogUEFT
Uyc7Ci0gICAgfQotPz4KSW5kZXg6IE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvY2xlYXItY29va2ll
LXJlZnJlc2gucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvY2xlYXIt
Y29va2llLXJlZnJlc2gucGhwCShyZXZpc2lvbiAxNjE2MDYpCisrKyBNYW51YWxUZXN0cy9ibGFj
a2JlcnJ5L2NsZWFyLWNvb2tpZS1yZWZyZXNoLnBocAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsw
LDAgQEAKLTw/cGhwCi0gICAgc2V0Y29va2llKCJjb29raWVOYW1lIiwgImNvb2tpZVZhbHVlIik7
Ci0gICAgaGVhZGVyKCJMb2NhdGlvbjogY2xlYXItY29va2llLXJlZnJlc2gtcmVzdWx0LnBocCIp
OwotPz4KSW5kZXg6IE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvY2xlYXItbG9jYWxzdG9yYWdlLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9jbGVhci1sb2NhbHN0b3Jh
Z2UuaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9jbGVh
ci1sb2NhbHN0b3JhZ2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwzMCArMCwwIEBACi08IURP
Q1RZUEUgaHRtbD4KLTxodG1sPgotICA8Ym9keT4KLSAgICA8cD5UaGlzIHRlc3QgY2FzZSBpcyB1
c2VkIHRvIHRlc3QgdGhlIGZ1bmN0aW9uIG9mIGNsZWFyIGxvY2FsIHN0b3JhZ2UgYnkgY2xpY2tp
bmcgIkNsZWFyIExvY2FsIFN0b3JhZ2UiIGJ1dHRvbgotICAgIGZyb20gU2V0dGluZ3MgLT4gUHJp
dmFjeSAmIFNlY3VyaXR5LiBUaGlzIGlzIGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMyNTMiPmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MzI1MzwvYT48L3A+Ci0gICAgPGRpdj4KLSAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+Ci0gICAgICBpZiAoIXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImtleSIp
KSB7Ci0gICAgICAgIC8vIGluaXRpYWxpemUgdGVzdCBjYXNlCi0gICAgICAgIGRvY3VtZW50Lndy
aXRlKCJTdGF0dXM6IDxzcGFuIHN0eWxlPSdjb2xvcjp5ZWxsb3cnPkluaXRpYWw8L3NwYW4+Iik7
Ci0gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oImtleSIsICJ2YWx1ZSIpOwotICAgICAg
ICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgia2V5IiwgInZhbHVlIik7Ci0KLSAgICAgICAgLy8gbm90
aWZ5IHRvIGNsZWFyIHRoZSBsb2NhbCBzdG9yYWdlIGFuZCByZWZyZXNoIHRoZSBwYWdlLgotICAg
ICAgICBkb2N1bWVudC53cml0ZSgiPHA+UGxlYXNlIGNsZWFyIHRoZSBsb2NhbCBzdG9yYWdlIGZy
b20gU2V0dGluZ3MgLT4gUHJpdmFjeSAmIFNlY3VyaXR5IGJ5IHByZXNzaW5nIFwiQ2xlYXIgTG9j
YWwgU3RvcmFnZVwiIGJ1dHRvbiwgdGhlbiByZWxvYWQgdGhpcyBwYWdlIHRvIHNlZSB0aGUgcmVz
dWx0LjwvcD4iKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRvY3VtZW50LndyaXRlKCJSZXN1
bHQ6ICIpOwotICAgICAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJrZXkiKSkgewotICAg
ICAgICAgIC8vIHN1Y2Nlc3MKLSAgICAgICAgICBkb2N1bWVudC53cml0ZSgiPHNwYW4gc3R5bGU9
J2NvbG9yOmdyZWVuJz5QQVNTPC9zcGFuPiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IC8vIGZhaWwKLSAgICAgICAgICBkb2N1bWVudC53cml0ZSgiPHNwYW4gc3R5bGU9J2NvbG9yOnJl
ZCc+RkFJTDwvc3Bhbj4iKTsKLSAgICAgICAgfQotICAgICAgICBkb2N1bWVudC53cml0ZSgiPHA+
SWYgeW91IHdhbnQgdG8gcnVuIHRoaXMgdGVzdCBjYXNlIGFnYWluLCBwbGVhc2UgcmVzdGFydCB0
aGUgYnJvd3Nlci48L3A+Iik7Ci0gICAgICB9Ci0gICAgPC9zY3JpcHQ+Ci0gICAgPC9kaXY+Ci0g
IDwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvaGVhZC14aHIt
bm9uZXhpc3RhbnQtZmlsZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1hbnVhbFRlc3RzL2JsYWNrYmVy
cnkvaGVhZC14aHItbm9uZXhpc3RhbnQtZmlsZS5odG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBN
YW51YWxUZXN0cy9ibGFja2JlcnJ5L2hlYWQteGhyLW5vbmV4aXN0YW50LWZpbGUuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMSwyNyArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPHNjcmlwdD4KLXZh
ciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLXhoci5vcGVuKCJIRUFEIiwgIm5vdGhpbmcu
dHh0IiwgdHJ1ZSk7Ci14aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7Ci0gICAg
aWYgKHhoci5yZWFkeVN0YXRlICE9IDQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoeGhyLnN0YXR1cyA9PSA0MDQpIHsKLSAgICAgICAgYWxlcnQoIlBBU1NFRDogb25yZWFkeXN0
YXRlY2hhbmdlIGZpcmVkIHdpdGggc3RhdHVzIDQwNCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGFsZXJ0KCJGQUlMRUQ6IG9ucmVhZHlzdGF0ZWNoYW5nZSBmaXJlZCB3aXRoIHN0YXR1cyAiICsg
eGhyLnN0YXR1cyk7Ci0gICAgfQotCi19Ci14aHIub25lcnJvciA9IGZ1bmN0aW9uKCkgewotICAg
IGFsZXJ0KCJGQUlMRUQ6IG9uZXJyb3IgZmlyZWQiKTsKLX0KLXhoci5zZW5kKCk7Ci08L3Njcmlw
dD4KLTwvaGVhZD4KLTxib2R5PgotPHA+VGhpcyB0ZXN0IG11c3QgYmUgaG9zdGVkIG9uIGEgd2Vi
IHNlcnZlciwgbm90IHJ1biBmcm9tIGEgZmlsZSB1cmwsIGJlY2F1c2UgWE1MSHR0cFJlcXVlc3Qg
ZnJvbSBmaWxlIHVybCBjYXVzZXMgYSBzZWN1cml0eSBlcnJvci48L3A+Ci08cD5Zb3Ugc2hvdWxk
IHNlZSBhbiBhbGVydCBib3ggc2F5aW5nIHdoZXRoZXIgdGhlIHRlc3Qgd2FzIHBhc3NlZCBvciBm
YWlsZWQuIElmIHRoZXJlIGlzIG5vIGFsZXJ0IGJveCwgdGhlIHRlc3Qgd2FzIEZBSUxFRC48L3A+
Ci08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAtYXV0
aC1jaGFsbGVuZ2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0
dHAtYXV0aC1jaGFsbGVuZ2UuaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTWFudWFsVGVzdHMv
YmxhY2tiZXJyeS9odHRwLWF1dGgtY2hhbGxlbmdlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjQgKzAsMCBAQAotPGh0bWw+Ci0gIDxib2R5PgotICAgIDxwPlRvIHJ1biB0aGlzIHRlc3QsIGJv
dGggaHR0cC1hdXRoLWNoYWxsZW5nZS5odG1sIGFuZCBodHRwLWF1dGgtY2hhbGxlbmdlLnBocCBt
dXN0IGJlIHNlcnZlZCBvdmVyIGh0dHAuPC9wPgotICAgIDxwPlRoaXMgdGVzdCBjYXNlIGlzIHRv
IHRlc3QgdGhlIGJlaGF2aW9yIG9mIGh0dHAgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIGRpYWxv
Zy4gVGhpcyBpcyBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgwMTM1Ij5odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAx
MzU8L2E+PC9wPgotICAgIDxwPgotICAgICAgUGxlYXNlIGZvbGxvdyB0aGUgZm9sbG93aW5nIHRl
c3QgcHJvY2VkdXJlOgotICAgICAgPG9sPgotICAgICAgICA8bGk+VGVzdCBkaWFsb2cgYmVoYXZp
b3Igd2hlbiBwcmVzcyBDYW5jZWwgYnV0dG9uPC9saT4KLSAgICAgICAgPG9sPgotICAgICAgICAg
IDxsaT5TdGFydCB0ZXN0IGNhc2UsIHRoZW4gcHJlc3MgQ2FuY2VsIGJ1dHRvbiB3aGVuIGF1dGhl
bnRpY2F0aW9uIGRpYWxvZyBwb3BzIHVwOzwvbGk+Ci0gICAgICAgIDwvb2w+Ci0gICAgICAgIDxs
aT5UZXN0IGRpYWxvZyBiZWhhdmlvciB3aGVuIHByZXNzIE9LIGJ1dHRvbjwvbGk+Ci0gICAgICAg
IDxvbD4KLSAgICAgICAgICA8bGk+TmF2aWdhdGUgYmFjayB0byB0aGUgcHJpdmlvdXMgcGFnZTs8
L2xpPgotICAgICAgICAgIDxsaT5TdGFydCB0ZXN0IGNhc2UgYWdhaW4sIHRoZW4gcHJlc3MgT2sg
YnV0dG9uIHdpdGhvdXQgaW5wdXQgYW55dGhpbmcgd2hlbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cg
cG9wcyB1cDs8L2xpPgotICAgICAgICAgIDxsaT5XaGVuIGRpYWxvZyBwb3BzIHVwIGFnYWluLCBl
bnRlciBmYWtlIGNyZWRlbnRpYWwgYW5kIHByZXNzIE9rIGJ1dHRvbjogdXNlcm5hbWU6InFxcXEi
LCBwYXNzd29yZDoicXFxcSI8L2xpPgotICAgICAgICAgIDxsaT5XaGVuIGRpYWxvZyBwb3BzIHVw
IGFnaWFuLCBlbnRlciByZWFsIGNyZWRlbnRpYWwgYW5kIHByZXNzIE9rIGJ1dHRvbjogdXNlcm5h
bWU6ImFhYWEiLCBwYXNzd29yZDoiYWFhYSI8L2xpPgotICAgICAgICA8L29sPgotICAgICAgPC9v
bD4KLSAgICAgIDxhIGhyZWY9Imh0dHAtYXV0aC1jaGFsbGVuZ2UucGhwIj5TdGFydCB0ZXN0IGhl
cmU8L2E+Ci0gICAgPC9wPgotICAgIAotICA8L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBNYW51YWxU
ZXN0cy9ibGFja2JlcnJ5L2h0dHAtYXV0aC1jaGFsbGVuZ2UucGhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1h
bnVhbFRlc3RzL2JsYWNrYmVycnkvaHR0cC1hdXRoLWNoYWxsZW5nZS5waHAJKHJldmlzaW9uIDE2
MTYwNikKKysrIE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvaHR0cC1hdXRoLWNoYWxsZW5nZS5waHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMjcgKzAsMCBAQAotPD9waHAKLSAgICBzZXNzaW9uX3N0YXJ0
KCk7Ci0gICAgaWYgKGlzc2V0KCRfU0VTU0lPTlsndHJpZWRUaW1lcyddKSkKLSAgICAgICAgJF9T
RVNTSU9OWyd0cmllZFRpbWVzJ10gPSAkX1NFU1NJT05bJ3RyaWVkVGltZXMnXSArIDE7Ci0gICAg
ZWxzZQotICAgICAgICAkX1NFU1NJT05bJ3RyaWVkVGltZXMnXSA9IDE7Ci0KLSAgICAkdXNlcm5h
bWUgPSAkcGFzc3dvcmQgPSAiYWFhYSI7Ci0KLSAgICBpZiAoJF9TRVJWRVJbJ1BIUF9BVVRIX1VT
RVInXSA9PSAkdXNlcm5hbWUgJiYgJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10gPT0gJHBhc3N3b3Jk
KXsKLSAgICAgICAgZWNobyAiQXV0aCBkaWFsb2cgYmVoYXZpb3Igd2hlbiBwcmVzcyBPSyBidXR0
b246ICI7Ci0gICAgICAgIGlmICgkX1NFU1NJT05bJ3RyaWVkVGltZXMnXSA9PSA1KQotICAgICAg
ICAgICAgZWNobyAiPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz5QQVNTPC9zcGFuPiI7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGVjaG8gIjxzcGFuIHN0eWxlPSdjb2xvcjpyZWQnPkZBSUw8
L3NwYW4+IjsKLSAgICAgICAgZXhpdDsKLSAgICB9IGVsc2UgewotICAgICAgICBoZWFkZXIoJ1dX
Vy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJNeSBSZWFsbSInKTsKLSAgICAgICAgaGVhZGVy
KCdIVFRQLzEuMCA0MDEgVW5hdXRob3JpemVkJyk7Ci0gICAgICAgIGVjaG8gIkF1dGggZGlhbG9n
IGJlaGF2aW9yIHdoZW4gcHJlc3MgQ2FuY2VsIGJ1dHRvbjogIjsKLSAgICAgICAgaWYgKCRfU0VT
U0lPTlsndHJpZWRUaW1lcyddID09IDEpCi0gICAgICAgICAgICBlY2hvICI8c3BhbiBzdHlsZT0n
Y29sb3I6Z3JlZW4nPlBBU1M8L3NwYW4+IjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZWNo
byAiPHNwYW4gc3R5bGU9J2NvbG9yOnJlZCc+RkFJTDwvc3Bhbj4iOwotICAgICAgICBleGl0Owot
ICAgIH0KLT8+CkluZGV4OiBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAtYXV0aC1vbi0yMDAu
cGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvaHR0cC1hdXRoLW9uLTIw
MC5waHAJKHJldmlzaW9uIDE2MTYwNikKKysrIE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvaHR0cC1h
dXRoLW9uLTIwMC5waHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMCwwIEBACi08P3BocAotICBo
ZWFkZXIoJ1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJGQUlMIicpOwotICBoZWFkZXIo
J0hUVFAvMS4wIDIwMCBPSycpOwotICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicp
OwotICBlY2hvICdQQVNTIGlmIHlvdSBkaWQgbm90IHNlZSBhbiBhdXRoZW50aWNhdGlvbiBkaWFs
b2cnOwotPz4KSW5kZXg6IE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvaHR0cC1hdXRoLXByaXZhdGUt
bW9kZS1jaGFuZ2VkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9o
dHRwLWF1dGgtcHJpdmF0ZS1tb2RlLWNoYW5nZWQuaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysg
TWFudWFsVGVzdHMvYmxhY2tiZXJyeS9odHRwLWF1dGgtcHJpdmF0ZS1tb2RlLWNoYW5nZWQuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMSwxNiArMCwwIEBACi08aHRtbD4KLSAgPGJvZHk+Ci0gICAg
PHA+Qm90aCBodHRwLWF1dGgtcHJpdmF0ZS1tb2RlLWNoYW5nZWQuaHRtbCBhbmQgaHR0cC1hdXRo
LXByaXZhdGUtbW9kZS1jaGFuZ2VkLnBocCBtdXN0IGJlIHNlcnZlZCBvdmVyIGh0dHAuPC9wPgot
ICAgIDxwPlRoaXMgdGVzdHMgdGhlIGJlaGF2aW9yIG9mIGh0dHAgYXV0aGVudGljYXRpb24gd2hl
biBwcml2YXRlIGJyb3dzZXJpbmcgaXMgc2V0IGZyb20gb24gdG8gb2ZmLiBUaGlzIGlzIGZvciA8
YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ2OTciPmh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDY5NzwvYT48L3A+PGJyPgot
ICAgIDxwPgotICAgICAgVGVzdCBzdGVwczo8YnI+Ci0gICAgICAxLiBTZXQgUHJpdmF0ZSBCcm93
c2luZyBvbi4gKFNldHRpbmdzIC0+IFByaXZhY3kgJiBTZWN1cml0eSAtPiBQcml2YXRlIEJyb3dz
aW5nKS48YnI+Ci0gICAgICAyLiBQcmVzcyA8YSBocmVmPSJodHRwLWF1dGgtcHJpdmF0ZS1tb2Rl
LWNoYW5nZWQucGhwIj5TdGFydCB0ZXN0IGhlcmU8L2E+Ljxicj4KLSAgICAgIDMuIFdoZW4gZGlh
bG9nIHBvcHMgdXAsIGVudGVyIHJlYWwgY3JlZGVudGlhbCh1c2VybmFtZTogImFhYWEiLCBwYXNz
d29yZDogImFhYWEiKSBhbmQgcHJlc3MgT2sgYnV0dG9uLjxicj4KLSAgICAgIDQuIFNldCBQcml2
YXRlIEJyb3dzaW5nIG9mZi4gKFNldHRpbmdzIC0+IFByaXZhY3kgJiBTZWN1cml0eSAtPiBQcml2
YXRlIEJyb3dzaW5nKS48YnI+Ci0gICAgICA1LiBSZWZyZXNoIHRoZSBwYWdlLjxicj4KLSAgICAg
IDYuIFRoZXJlIHNob3VsZCBiZSBhIGRpYWxvZyBmb3IgeW91IHRvIGlucHV0IHVzZXJuYW1lIGFu
ZCBwYXNzd29yZCBhZ2Fpbi48YnI+Ci0gICAgICAgICBJZiB5b3UgY2FuJ3Qgc2VlIHRoZSBkaWFs
b2csIHRoaXMgdGVzdCBmYWlscy48YnI+Ci0gICAgPC9wPgotICA8L2JvZHk+Ci08L2h0bWw+Cklu
ZGV4OiBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAtYXV0aC1wcml2YXRlLW1vZGUtY2hhbmdl
ZC5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9odHRwLWF1dGgtcHJp
dmF0ZS1tb2RlLWNoYW5nZWQucGhwCShyZXZpc2lvbiAxNjE2MDYpCisrKyBNYW51YWxUZXN0cy9i
bGFja2JlcnJ5L2h0dHAtYXV0aC1wcml2YXRlLW1vZGUtY2hhbmdlZC5waHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTcgKzAsMCBAQAotPD9waHAKLSAgICAkdXNlcm5hbWUgPSAkcGFzc3dvcmQgPSAi
YWFhYSI7Ci0KLSAgICBpZiAoJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXSA9PSAkdXNlcm5hbWUg
JiYgJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10gPT0gJHBhc3N3b3JkKXsKLSAgICAgICAgZWNobyAn
VGVzdCBzdGVwczo8YnI+JzsKLSAgICAgICAgZWNobyAnMS4gU2V0IFByaXZhdGUgQnJvd3Npbmcg
b2ZmLiAoU2V0dGluZ3MgLT4gUHJpdmFjeSAmIFNlY3VyaXR5IC0+IFByaXZhdGUgQnJvd3Npbmcp
PGJyPic7Ci0gICAgICAgIGVjaG8gJzIuIFJlZnJlc2ggdGhlIHBhZ2UuPGJyPic7Ci0gICAgICAg
IGVjaG8gJzMuIFRoZXJlIHNob3VsZCBiZSBhIGRpYWxvZyBmb3IgeW91IHRvIGlucHV0IHVzZXJu
YW1lIGFuZCBwYXNzd29yZCBhZ2Fpbi48YnI+JzsKLSAgICAgICAgZWNobyAnSWYgeW91IGNhblwn
dCBzZWUgdGhlIGRpYWxvZywgdGhpcyB0ZXN0IGZhaWxzLjxicj4nOwotICAgICAgICBleGl0Owot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGhlYWRlcignV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVh
bG09Ik15IFJlYWxtIicpOwotICAgICAgICBoZWFkZXIoJ0hUVFAvMS4wIDQwMSBVbmF1dGhvcml6
ZWQnKTsKLSAgICAgICAgZWNobyAiQXV0aG9yaXphdGlvbiBSZXF1aXJlZC4iOwotICAgICAgICBl
eGl0OwotICAgIH0KLT8+CkluZGV4OiBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAtY29va2ll
LWRhdGFiYXNlLXNldC5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9o
dHRwLWNvb2tpZS1kYXRhYmFzZS1zZXQucGhwCShyZXZpc2lvbiAxNjE2MDYpCisrKyBNYW51YWxU
ZXN0cy9ibGFja2JlcnJ5L2h0dHAtY29va2llLWRhdGFiYXNlLXNldC5waHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTQgKzAsMCBAQAotPD9waHAgaWYgKGlzc2V0KCRfQ09PS0lFWyJkYl9jb29raWUi
XSkpIHsKLSAgICAgICAgICAgICAgaWYgKCRfQ09PS0lFWyJkYl9jb29raWUiXSA9PSAiaHR0cHNf
Y29va2llIikKLSAgICAgICAgICAgICAgICAgIGVjaG8gJ1BBU1MnOwotICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICBlY2hvICdGQUlMJzsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgaGVhZGVyKCJTZXQtQ29va2llOiBkYl9jb29raWUgPSBodHRwX2Nvb2tpZTsgZXhwaXJl
cz1UaHUsIDEyLUFwci0yMzEyIDA4OjMyOjI5IEdNVDsiKTsKLSAgICAgICAgICAkcGF0aCA9IHN0
cl9yZXBsYWNlKCJodHRwLWNvb2tpZS1kYXRhYmFzZS1zZXQucGhwIiwgImh0dHAtY29va2llLWRh
dGFiYXNlLXVwZGF0ZS5waHAiLCAkX1NFUlZFUlsiUEhQX1NFTEYiXSk7Ci0gICAgICAgICAgJG5l
d3VybCA9ICdodHRwczovLycuJF9TRVJWRVJbIkhUVFBfSE9TVCJdLiRwYXRoOwotICAgICAgICAg
ICRsb2NhdGlvbiA9ICdMb2NhdGlvbjonLiRuZXd1cmw7Ci0gICAgICAgICAgaGVhZGVyKCRsb2Nh
dGlvbik7Ci0gICAgICB9Ci0/PgotCkluZGV4OiBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAt
Y29va2llLWRhdGFiYXNlLXVwZGF0ZS5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxh
Y2tiZXJyeS9odHRwLWNvb2tpZS1kYXRhYmFzZS11cGRhdGUucGhwCShyZXZpc2lvbiAxNjE2MDYp
CisrKyBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L2h0dHAtY29va2llLWRhdGFiYXNlLXVwZGF0ZS5w
aHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMCwwIEBACi08P3BocCAKLSAgICAgICBoZWFkZXIo
J1NldC1Db29raWU6IGRiX2Nvb2tpZSA9IGh0dHBzX2Nvb2tpZTsgZXhwaXJlcz1UaHUsIDEyLUFw
ci0yMzEyIDA4OjMyOjI5IEdNVDsnKTsKLSAgICAgICBlY2hvICdUZXN0IHVwZGF0aW5nIG9mIGNv
b2tpZXNcJyBkYXRhYmFzZS4gSXQgaXMgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04Mzc2MC48YnI+JzsKLSAgICAgICBlY2hvICdUbyBydW4gdGhpcyB0ZXN0LCBo
dHRwLWNvb2tpZS1kYXRhYmFzZS1zZXQucGhwIG11c3QgYmUgc2VydmVkIG92ZXIgaHR0cCBhbmQg
aHR0cC1jb29raWUtZGF0YWJhc2UtdXBkYXRlLnBocCBtdXN0IGJlIHNlcnZlZCBvdmVyIGh0dHBz
Ljxicj4nOwotICAgICAgIGVjaG8gJ1Rlc3Qgc3RlcHM6PGJyPic7Ci0gICAgICAgZWNobyAnMS4g
TG9hZCBodHRwLWNvb2tpZS1kYXRhYmFzZS1zZXQucGhwLiAoSWYgeW91IGxvYWQgaHR0cC1jb29r
aWUtZGF0YWJhc2UtdXBkYXRlLnBocCBkaXJlY3RseSBpbiB0aGlzIHN0ZXAsIHBsZWFzZSBjbGVh
ciBjb29raWVzIGFuZCBsb2FkIGh0dHAtY29va2llLWRhdGFiYXNlLXNldC5waHAgdG8gZmluaXNo
IHRoaXMgc3RlcC48YnI+JzsKLSAgICAgICBlY2hvICcyLiBSZXN0YXJ0IHRoZSBicm93c2VyIGFu
ZCBsb2FkIGh0dHAtY29va2llLWRhdGFiYXNlLXNldC5waHAgYWdhaW4gdG8gc2VlIHRoZSByZXN1
bHQuPGJyPic7Ci0KLT8+CkluZGV4OiBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L21ldGEtdmlld3Bv
cnQtaW5pdGlhbC1zY2FsZS13aWRlLWNvbnRlbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBNYW51YWxU
ZXN0cy9ibGFja2JlcnJ5L21ldGEtdmlld3BvcnQtaW5pdGlhbC1zY2FsZS13aWRlLWNvbnRlbnQu
aHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9tZXRhLXZp
ZXdwb3J0LWluaXRpYWwtc2NhbGUtd2lkZS1jb250ZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTEsMjEgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250
ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KLTxzdHlsZT4KLWJv
ZHkgeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IH0KLSNncmVlbiB7IHdpZHRoOiAxMDAlOyBoZWln
aHQ6IDEwMCU7IGJhY2tncm91bmQ6IGdyZWVuOyB9Ci0jcmVkIHsgd2lkdGg6IDEwMjRweDsgaGVp
Z2h0OiAyMDQ4cHg7IGJhY2tncm91bmQ6IHJlZDsgfQotPC9zdHlsZT4KLTwvaGVhZD4KLTxib2R5
PgotPGRpdiBpZD0iZ3JlZW4iPgotVGhpcyBncmVlbiBib3ggc2hvdWxkIGZ1bGx5IGZpbGwgdGhl
IGluaXRpYWwgdmlld3BvcnQsIGFuZCB0aGUgdGV4dCB3aXRoaW4gaXQKLXNob3VsZCB3cmFwIGF0
IHRoZSBlZGdlIG9mIHRoZSBzY3JlZW4gYXBwcm9wcmlhdGVseS4gVGhlIHRlc3QgaXMgUEFTU0VE
IGlmCi10aGlzIGdyZWVuIGJveCBpcyBmdWxseSB2aXNpYmxlIGFuZCB0YWtlcyB1cCB0aGUgd2hv
bGUgc2NyZWVuLgotPC9kaXY+Ci08ZGl2IGlkPSJyZWQiPgotVGhpcyBzaG91bGQgbm90IGJlIHZp
c2libGUgaW5pdGlhbGx5LiBUaGlzIHRlc3QgaXMgRkFJTEVEIGlmIHlvdSBjYW4gc2VlCi1jYW4g
cmVkIHdpdGhvdXQgZmlyc3Qgc2Nyb2xsaW5nIGRvd24uCi08L2Rpdj4KLTwvYm9keT4KLTwvaHRt
bD4KSW5kZXg6IE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvbm90aWZpY2F0aW9uLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9ub3RpZmljYXRpb24uaHRtbAkocmV2aXNp
b24gMTYxNjA2KQorKysgTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9ub3RpZmljYXRpb24uaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotdmFyIG47Ci1mdW5jdGlvbiBzZXROb3RpZmljYXRpb24o
KQotewotICAgIGlmICh3aW5kb3cud2Via2l0Tm90aWZpY2F0aW9ucy5jaGVja1Blcm1pc3Npb24o
KSAhPSAwKSB7Ci0gICAgICAgIGFsZXJ0KCJ5b3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHBv
c3Qgbm90aWZpY2F0aW9ucywgcGxlYXNlIGFsbG93IG5vdGlmaWNhdGlvbnMgYnkgY2xpY2tpbmcg
dGhhdCBsaW5rIik7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbGxvd05vdGlm
aWNhdGlvbkxpbmsnKS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnUmVkJzsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIG4gPSB3aW5kb3cud2Via2l0Tm90aWZpY2F0aW9ucy5jcmVhdGVO
b3RpZmljYXRpb24od2luZG93LmxvY2F0aW9uLmhyZWYgKyAnL2Zhdmljb24uaWNvJywgJ05vdGlm
eSBtZScsICdUaGlzIGlzIHRoZSBub3RpZmljYXRpb24gYm9keScpOwotICAgIGxvZyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJwbGFjZSIpOwotICAgIG4ub25zaG93ID0gZnVuY3Rpb24oKSAg
eyBsb2cuaW5uZXJUZXh0ID0gIm5vdGlmaWNhdGlvbiBzaG93aW5nIjsgfQotICAgIG4ub25jbGlj
ayA9IGZ1bmN0aW9uKCkgeyBsb2cuaW5uZXJUZXh0ID0gIm5vdGlmaWNhdGlvbiBjbGlja2VkIjsg
fQotICAgIG4ub25lcnJvciA9IGZ1bmN0aW9uKCkgeyBsb2cuaW5uZXJUZXh0ID0gIm5vdGlmaWNh
dGlvbiBlcnJvciI7IH0KLSAgICBuLm9uY2xvc2UgPSBmdW5jdGlvbigpIHsgbG9nLmlubmVyVGV4
dCA9ICJub3RpZmljYXRpb24gY2xvc2VkIjsgfQotICAgIG4uc2hvdygpOwotICAgIGxvZy5pbm5l
clRleHQgPSAiRGlkIHlvdSBub3RpY2UgdGhlIG5vdGlmaWNhdGlvbiA/IFRoZXJlIGFyZSAzIHdh
eXMgdGhlIG5vdGlmaWNhdGlvbiB3aWxsIGdvIGF3YXk6XG4gMS4gSXQgYXV0b21pY2FsbHkgZ29l
cyBhd2F5IGluIDMwIHNlY29uZHM7XG4gMi4geW91IGNhbiBjbGljayB0aGUgY2xvc2UgYnV0dG9u
IG9uIHRoZSBub3RpZmljYXRpb24gdG8gY2xvc2UgaXQ7XG4gMy4gQ2xpY2sgYWJvdmUgbGluayAn
Q2xpY2sgdG8gY2FuY2VsIHRoZSBub3RpZmljYXRpb24uXG5cbiBQbGVhc2UgdmVyaWZ5IGFsbCB3
b3JrOyBXaGVuZXZlciB0aGUgaWNvbiBpcyBjbGlja2VkLCBjYW5jZWxsZWQsIGNsb3NlZCwgZXRj
LiB0aGVyZSB3aWxsIGJlIGNvcnJlc3BvbmRpbmcgbG9nIGlzIHRoaXMgYXJlYSwgcGxlYXNlIG5v
dGljZSBpZiB0aGV5IHNob3cgdXAuIjsKLQotICAgIHNldFRpbWVvdXQodGltZW91dCwgMzAwMDAp
OwotICAgIGZ1bmN0aW9uIHRpbWVvdXQoKSB7Ci0gICAgICAgIG4uY2FuY2VsKCk7Ci0gICAgfQot
fQotCi1mdW5jdGlvbiBzZXRBbGxvd05vdGlmaWNhdGlvbigpCi17Ci0gICAgd2luZG93LndlYmtp
dE5vdGlmaWNhdGlvbnMucmVxdWVzdFBlcm1pc3Npb24ocGVybWlzc2lvbkdyYW50ZWQpOwotfQot
Ci1mdW5jdGlvbiBwZXJtaXNzaW9uR3JhbnRlZCgpCi17Ci0gICAgaWYgKHdpbmRvdy53ZWJraXRO
b3RpZmljYXRpb25zLmNoZWNrUGVybWlzc2lvbigpID09IDApCi0gICAgICAgIGFsZXJ0KCJ5b3Ug
bm93IGhhdmUgcGVybWlzc2lvbiB0byBwb3N0IE5vdGlmaWNhdGlvbnMiKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFsZXJ0KCJ5b3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHBvc3QgTm90aWZpY2F0
aW9ucyIpOwotfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IHN0eWxlPSJmb250LXNpemU6
eC1sYXJnZSI+Ci08YSBzdHlsZT0ibWFyZ2luLWxlZnQ6IDIwcHg7IiBpZD0iYWxsb3dOb3RpZmlj
YXRpb25MaW5rIiAgb25jbGljaz0ic2V0QWxsb3dOb3RpZmljYXRpb24oKTsgcmV0dXJuIGZhbHNl
OyIgaHJlZj0iIyI+Q2xpY2sgdG8gc2V0IGFsbG93IG5vdGlmaWNhdGlvbnMgZmlyc3Q8L2E+IDxi
cj4KLQotPGEgc3R5bGU9Im1hcmdpbi1sZWZ0OiAyMHB4OyIgb25jbGljaz0ic2V0Tm90aWZpY2F0
aW9uKCk7IHJldHVybiBmYWxzZTsiIGhyZWY9IiMiPkNsaWNrIHRvIHNldCBub3RpZmljYXRpb248
L2E+IDxicj4KLTxhIHN0eWxlPSJtYXJnaW4tbGVmdDogMjBweDsiIG9uY2xpY2s9Im4uY2FuY2Vs
KCk7IHJldHVybiBmYWxzZTsiIGhyZWY9IiMiPkNsaWNrIHRvIGNhbmNlbCB0aGUgbm90aWZpY2F0
aW9uPC9hPiA8YnI+Ci08YnI+PGJyPgotPGRpdiBpZD0icGxhY2UiPgotPC9kaXY+Ci0KLTwvYm9k
eT4KLTwvaHRtbD4KLQpJbmRleDogTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9zZWxlY3QtcG9wdXAt
aXRlbXMtdW5pY29kZS1kaXNwbGF5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxh
Y2tiZXJyeS9zZWxlY3QtcG9wdXAtaXRlbXMtdW5pY29kZS1kaXNwbGF5Lmh0bWwJKHJldmlzaW9u
IDE2MTYwNikKKysrIE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvc2VsZWN0LXBvcHVwLWl0ZW1zLXVu
aWNvZGUtZGlzcGxheS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1ICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci0gIDxib2R5PgotICAgIDxwPlRoaXMgdGVzdHMgaWYgd2UgY2Fu
IHNob3cgdW5pY29kZSBjb3JyZWN0bHkuIEl0IGlzIGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk5NjkiPmh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04OTk2OS48L2E+PC9wPgotICAgIDxwPgotICAgICAgSWYgeW91IGNh
biBzZWUgY2hpbmVzZSjljJfkuqwsIOa+s+mXqCkgYWZ0ZXIgcHJlc3NpbmcgdGhlIGRyb3BsaXN0
LCB0aGlzIHRlc3QgcGFzc2VzLgotICAgPC9wPgotICAgIDxzZWxlY3Q+Ci0gICAgICAgIDxvcHRp
b24gc2VsZWN0ZWQ9InNlbGVjdGVkIj7ljJfkuqw8L29wdGlvbj4KLSAgICAgICAgPG9wdGlvbj5T
aGVuWWFuZzwvb3B0aW9uPgotICAgICAgICA8b3B0aW9uPua+s+mXqDwvb3B0aW9uPgotICAgICAg
ICA8b3B0aW9uPlJlcHVibGljIG9mIEPDtHRlIGQnSXZvaXJlPC9vcHRpb24+Ci0gICAgPC9zZWxl
Y3Q+Ci0gIDwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvc2Vs
ZWN0aW9uLXRvdWNoLW92ZXJyaWRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxh
Y2tiZXJyeS9zZWxlY3Rpb24tdG91Y2gtb3ZlcnJpZGUuaHRtbAkocmV2aXNpb24gMTYxNjA2KQor
KysgTWFudWFsVGVzdHMvYmxhY2tiZXJyeS9zZWxlY3Rpb24tdG91Y2gtb3ZlcnJpZGUuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMSwyICswLDAgQEAKLTxicj48dGV4dGFyZWEgY29scz0iNDUiIHJv
d3M9IjUiPlRleHQgQXJlYSB3aXRob3V0IG92ZXJyaWRlIGF0dHJpYnV0ZSBzZWxlY3QgYWxsIHRo
aXMgdGV4dCBhbmQgdGFwIG9uIHRoZSBzZWxlY3Rpb24sIGNvbnRleHQgbWVudSBzaG91bGQgYmUg
c2hvd24hPC90ZXh0YXJlYT4KLTxicj48dGV4dGFyZWEgY29scz0iNDUiIHJvd3M9IjUiIGRhdGEt
YmxhY2tiZXJyeS1lbmQtc2VsZWN0aW9uLW9uLXRvdWNoPSJvbiI+VGV4dCBBcmVhIHdpdGggb3Zl
cnJpZGUgYXR0cmlidXRlIHNlbGVjdCBhbGwgdGhpcyB0ZXh0IGFuZCB0YXAgb24gdGhlIHNlbGVj
dGlvbiwgY2FyZXQgc2hvdWxkIGJlIHBsYWNlZCE8L3RleHRhcmVhPgpJbmRleDogTWFudWFsVGVz
dHMvYmxhY2tiZXJyeS9zbGlkZXItdGh1bWItY29uc3VtZXMtZXZlbnQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L3NsaWRlci10aHVtYi1jb25zdW1lcy1ldmVudC5o
dG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBNYW51YWxUZXN0cy9ibGFja2JlcnJ5L3NsaWRlci10
aHVtYi1jb25zdW1lcy1ldmVudC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyICswLDAgQEAK
LTwhRE9DVFlQRSBIVE1MPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT4gU2xpZGVyIHRodW1iIHNo
b3VsZCBlYXQgZXZlbnQgPC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHk+Ci08cD4KLVRoaXMgdGVz
dCBjYXNlIHZlcmlmaWVzIHRoYXQgYW4gZXZlbnQgc2hvdWxkIGJlIGNvbXN1bWVkIDxicj4KLWJ5
IHRoZSBzbGlkZXIgdGh1bWIgZWxlbWVudCB3aGVuIHByZXNzZWQgb24gaXQsIHRvIHByZXZlbnQ8
YnI+Ci10aGUgZXZlbnQgYmVlbiB1c2VkIGZvciBwYWdlIHpvb21pbmcgb3Igc2Nyb2xsaW5nLiA8
YnI+PGJyPgotCi1TdGVwcyB0byB2ZXJpZnk6PGJyPgotMS4gWm9vbSBpbiB0aGUgcGFnZS48YnI+
Ci0yLiBQcmVzcyBhbmQgZHJhZyB0aGUgc2xpZGVyIHRodW1iLjxicj48YnI+Ci0KLUlmIHRoZSBz
bGlkZXIgY2hhbmdlcyBidXQgdGhlIHBhZ2Ugc3RheXMsIGl0IFNVQ0NFRURTLjxicj4KLW90aGVy
c2llLCBpZiB0aGUgcGFnZSBzY3JvbGxzLCBpdCBGQUlMUy48YnI+PGJyPgotCi1yYW5nZTogICAg
PGlucHV0IHR5cGU9InJhbmdlIiBtaW49IjAiIG1heD0iMTAwIiBzdGVwPSIxIiAvPjxicj4KLTwv
Ym9keT4KLTwvaHRtbD4KSW5kZXg6IE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvdmlkZW8taGxzLWNv
bnRyb2xzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2tiZXJyeS92aWRlby1o
bHMtY29udHJvbHMuaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTWFudWFsVGVzdHMvYmxhY2ti
ZXJyeS92aWRlby1obHMtY29udHJvbHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiArMCww
IEBACi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lk
dGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+Ci0gIDx0aXRsZT5EeW5hbWljIExp
dmUgU3RyZWFtaW5nIGNvbnRyb2xzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgzPkR5bmFt
aWMgTGl2ZSBTdHJlYW1pbmcgY29udHJvbHM8L2gzPgotPHA+VGhpcyBwYWdlIGV4aXN0cyB0byB0
ZXN0IHRoZSBoaWRpbmcgb2YgdGhlIHRpbWVsaW5lIGNvbnRhaW5lciBmb3IKLWR5bmFtaWMgbGl2
ZSBzdHJlYW1zLiBPbmNlIG1ldGFkYXRhIGxvYWRzLCB0aGUgY29udHJvbCBiYXIgYmVsb3cgc2hv
dWxkCi1jb250YWluIG9ubHkgMyBidXR0b25zOiAicGxheSIgb24gdGhlIGxlZnQsIGFuZCAiZnVs
bHNjcmVlbiIgJiAibXV0ZQotKHZvbHVtZSkiIG9uIHRoZSByaWdodC4gTm8gc2VlayBzbGlkZXIg
b3IgbWVkaWEgdGltZXMgc2hvdWxkIGJlIHNob3duLgotSWYgb25seSB0aGUgInBsYXkiIGJ1dHRv
biBzaG93cywgaXQgbWVhbnMgdGhlIGxpbmsgdG8gdGhlIHRlc3QgdmlkZW8gaXMKLW91dCBvZiBk
YXRlLgotPC9wPgotCi08dmlkZW8gd2lkdGg9IjMwMCIgaGVpZ2h0PSIyMDAiIGNvbnRyb2xzPgot
ICA8c291cmNlIHNyYz0iaHR0cDovL3h0ZWxlYW50aW9xdWlhd2Vic3guYXBpLmNoYW5uZWwubGl2
ZXN0cmVhbS5jb20vMy4wL3BsYXlsaXN0Lm0zdTgiPgotPC92aWRlbz4KLQotPGJyPiA8YnI+IDxi
cj4KLTxhIGhyZWY9Imh0dHA6Ly94dGVsZWFudGlvcXVpYXdlYnN4LmFwaS5jaGFubmVsLmxpdmVz
dHJlYW0uY29tLzMuMC9wbGF5bGlzdC5tM3U4Ij5MaW5rIGRpcmVjdGx5IHRvIHZpZGVvPC9hPgot
PC9ib2R5PjwvaHRtbD4KSW5kZXg6IE1hbnVhbFRlc3RzL2JsYWNrYmVycnkvdmlkZW8tbG9hZC13
aXRoLWF1dGhlbnRpY2F0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMvYmxhY2ti
ZXJyeS92aWRlby1sb2FkLXdpdGgtYXV0aGVudGljYXRpb24uaHRtbAkocmV2aXNpb24gMTYxNjA2
KQorKysgTWFudWFsVGVzdHMvYmxhY2tiZXJyeS92aWRlby1sb2FkLXdpdGgtYXV0aGVudGljYXRp
b24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTD4K
LTxodG1sPgotPGhlYWQ+Ci0gICAgPHRpdGxlPnZpZGVvLWxvYWQtd2l0aC1hdXRoZW50aWNhdGlv
bjwvdGl0bGU+Ci0gICAgPHNjcmlwdCBzcmM9Ii4uLy4uL0xheW91dFRlc3RzL21lZGlhL3ZpZGVv
LXRlc3QuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eT4KLTxwPgotICBUaGlzIHRlc3QgY2FzZSBpcyBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjE0Ij5odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODQyMTQ8L2E+PGJyPgotICBUaGlzIHRlc3QgY2FzZSBpcyBhbWluZyBh
dCB0ZXN0aW5nIHZpZGVvIGxvYWRpbmcgd2l0aCBodHRwIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5n
ZS4gVG8gdXNlIHRoaXMgdGVzdCBjYXNlIHlvdSBzaG91bGQgc2V0dXAgeW91ciBhcGFjaGUyIGh0
dHAgc2VydmVyCi0gIHdpdGggaHR0cCBhdXRoZW50aWNhdGlvbiBzdXBwb3J0IGZpcnN0Ljxicj4K
LSAgPHA+Ci0gICAgPGgzPldheXMgdG8gc2V0dXAgdGhlIGFwYWNoZTIgaHR0cCBzZXJ2ZXIgd2l0
aCBodHRwIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQ8L2gzPgotICAgIDxvbD4KLSAgICAgIDxsaT5B
ZGQgIkFsbG93T3ZlcnJpZGUgQXV0aENvbmZpZyIgdG8gJmx0O0RpcmVjdG9yeSZndDsgc2V0dGlu
ZyBpbiB5b3VyIHNpdGUgY29uZmlndXJhdGlvbiBmaWxlOzwvbGk+Ci0gICAgICA8bGk+Q3JlYXRl
IHRoZSBwYXNzd29yZCBmaWxlIHVzaW5nIGNvbW1hbmQ6IDxjb2RlPmh0cGFzc3dkIC1jICZsdDtw
YXNzb3JkX2ZpbGVuYW1lJmd0OyAmbHQ7dXNlcm5hbWUmZ3Q7PC9jb2RlPiwgYW5kIHB1dCB0aGlz
IGZpbGUgaW50byAmbHQ7U2VydmVyUm9vdCZndDs7PC9saT4KLSAgICAgIDxsaT5DcmVhdGUgYSBk
aXJlY3RvcnkgdW5kZXIgeW91ciBzZXJ2ZXIgJmx0O0RpcmVjdG9yeSZndDssIGFuZCBjcmVhdGUg
dGhlIGZpbGUgLmh0YWNjZXNzIGluIHRoaXMgZGlyZWN0b3J5OzwvbGk+Ci0gICAgICA8bGk+Q29u
ZmlndXJlIHRoZSAuaHRhY2Nlc3MgZmlsZSB3aXRoIHRoZSBmb2xsb3dpbmcgY29udGVudDoKLSAg
ICAgICAgPHByZT5BdXRoVHlwZSAmbHQ7QmFzaWN8RGlnZXN0Jmd0OwotQXV0aE5hbWUgIlZpZGVv
IEhUVFAgQXV0aGVudGljYXRpb24iCi1BdXRoVXNlckZpbGUgJmx0Oy9wYXRoL3RvL3RoZS9wYXNz
d29yZC9maWxlJmd0OwotUmVxdWlyZSB1c2VyICZsdDt1c2VybmFtZSZndDs8L3ByZT4KLSAgICAg
IDwvbGk+Ci0gICAgICA8bGk+UHV0IHlvdXIgdGVzdCB2aWRlbyBmaWxlIGludG8gdGhpcyBkaXJl
Y3RvcnksIGFuZCByZXN0YXJ0IHlvdXIgYXBhY2hlMiBodHRwIHNlcnZlci48L2xpPgotICAgIDwv
b2w+Ci0gICAgPHA+TW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb25maWd1cmluZyBhcGFjaGUyIGh0
dHAgYXV0aGVudGljYXRpb24sIHBsZWFzZSByZWZlciB0byBhcGFjaGUgMi4wIGRvY3VtZW50OiA8
YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuMC9ob3d0by9hdXRoLmh0bWwi
PkF1dGhlbnRpY2F0aW9uLCBBdXRob3JpemF0aW9uIGFuZCBBY2Nlc3MgQ29udHJvbDwvYT4uPC9w
PgotICA8L3A+Ci0gIDxwPgotICAgIDxoMz5XYXlzIHRvIHRlc3Q8L2gzPgotICAgIDxvbD4KLSAg
ICAgIDxsaT5TZXR1cCB5b3VyIGFwYWNoZTIgaHR0cCBzZXJ2ZXIgYW5kIHByZXBhcmUgdGhlIHZp
ZGVvIGZpbGUgYXMgbWVudGlvbmVkIGFib3ZlOzwvbGk+Ci0gICAgICA8bGk+RW50ZXIgdGhlIGxp
bmsgcG9pbnRpbmcgdG8gdGhlIHZpZGVvIGZpbGUgaW4gdGhlICJWaWRlbyBTb3VyY2UiIHRleHQg
YXJlYSBiZWxvdzs8L2xpPgotICAgICAgPGxpPlRoZW4gcHJlc3MgbG9hZCBidXR0b24sIGFuZCBm
aWxsIHRoZSBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UgcG9wIHVwIGRpYWxvZyB3aXRoIHRoZSBj
cmVkZW50aWFsIGluZm9ybWF0aW9uIGNyZWF0ZWQgYmVmb3JlLCB0aGVuIHdhaXQgZm9yIHRoZSBy
ZXN1bHQuPC9saT4KLSAgICA8L29sPgotICA8L3A+Ci08L3A+Ci08aHIgLz4KLTxkaXY+Ci0gICAg
VmlkZW8gU291cmNlOgotICAgIDxpbnB1dCB0eXBlPSJ1cmwiIGlkPSJ1cmwiIG5hbWU9InZpZGVv
U3JjIiBzaXplPSIxMDAiPjwvaW5wdXQ+PGJyPgotICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZh
bHVlPSJMb2FkIiBvbmNsaWNrPSJsb2FkKCkiIC8+Ci08L2Rpdj4KLTx2aWRlbyBpZD0idmlkZW8i
IGhpZGRlbj0iaGlkZGVuIj48L3ZpZGVvPgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
PgotICAgIGZ1bmN0aW9uIG9uTG9hZGVkKCkKLSAgICB7Ci0gICAgICAgIGxvZ1Jlc3VsdCh0cnVl
LCAiVmlkZW8gZmlsZSBzdWNjZXNzZnVsbHkgbG9hZGVkLCB0ZXN0IGNhc2UgcGFzc2VkLiIpOwot
ICAgICAgICBlbmRUZXN0KCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gb25FcnJvcigpCi0gICAg
ewotICAgICAgICBmYWlsVGVzdCgiTG9hZCB2aWRlbyBmaWxlIGVycm9yLCB0ZXN0IGNhc2UgZmFp
bGVkLiIpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGxvYWQoKQotICAgIHsKLSAgICAgICAgZmlu
ZE1lZGlhRWxlbWVudCgpOwotICAgICAgICB3YWl0Rm9yRXZlbnQoImxvYWRzdGFydCIpOwotICAg
ICAgICB3YWl0Rm9yRXZlbnQoImxvYWRlZGRhdGEiLCBvbkxvYWRlZCk7Ci0gICAgICAgIHdhaXRG
b3JFdmVudCgiZXJyb3IiLCBvbkVycm9yKTsKLQotICAgICAgICBtZWRpYUVsZW1lbnQuc3JjID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybCIpLnZhbHVlOwotICAgICAgICBtZWRpYUVsZW1l
bnQubG9hZCgpOwotICAgIH0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjE2MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDEt
MDkgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVt
b3ZlIHRoZSBCbGFja0JlcnJ5IGZpbGVzIG91dHNpZGUgV2ViQ29yZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NzE1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2U6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2tCbGFja0Jl
cnJ5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzaGVsbC9QbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2U6IFJlbW92ZWQuCisKIDIwMTQtMDEtMDkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIFdpbmRvd3MgYnVpbGQgZml4IGZvciByMTYx
NTYzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1CbGFja0JlcnJ5
LmNtYWtlCShyZXZpc2lvbiAxNjE2MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZv
cm1CbGFja0JlcnJ5LmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzAsMCBAQAotbGlzdChS
RU1PVkVfSVRFTSBKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCi0gICAgcnVudGltZS9HQ0FjdGl2aXR5
Q2FsbGJhY2suY3BwCi0pCi0KLWxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAg
ICBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFja0JsYWNrQmVycnkuY3BwCi0pCi0KLWluc3RhbGwo
RklMRVMgInd0Zi9Gb3J3YXJkLmgiIERFU1RJTkFUSU9OIHVzci9pbmNsdWRlL2Jyb3dzZXIvd2Vi
a2l0L3d0ZikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFja0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFja0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE2
MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2tC
bGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKLQotI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRl
ICJWTS5oIgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU1lbW9yeS5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6RGVmYXVsdEdDQWN0aXZpdHlD
YWxsYmFjayhIZWFwKiBoZWFwKQotICAgIDogR0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPnZtKCkp
Ci17Ci19Ci0KLXZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKCkKLXsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX3ZtKTsKLSAgICBtX3ZtLT5oZWFwLmNvbGxlY3QoSGVhcDo6
RG9Ob3RTd2VlcCk7Ci19Ci0KLXZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlkQWxs
b2NhdGUoc2l6ZV90KQotewotICAgIGlmIChtX3RpbWVyLnN0YXJ0ZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gVHJ5IHVzaW5nIH41JSBDUFUgdGltZS4KLSAgICBtX3RpbWVyLnN0YXJ0
KG1fdm0tPmhlYXAubGFzdEdDTGVuZ3RoKCkgKiAyMCk7Ci19Ci0KLXZvaWQgRGVmYXVsdEdDQWN0
aXZpdHlDYWxsYmFjazo6d2lsbENvbGxlY3QoKQotewotICAgIGNhbmNlbCgpOwotfQotCi12b2lk
IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNhbmNlbCgpCi17Ci0gICAgbV90aW1lci5zdG9w
KCk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9zaGVsbC9QbGF0Zm9ybUJs
YWNrQmVycnkuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3NoZWxs
L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQkocmV2aXNpb24gMTYxNjA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3NoZWxsL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQkod29ya2luZyBjb3B5
KQpAQCAtMSwxNiArMCwwIEBACi1GSU5EX1NUQUdJTkdfTElCUkFSWShTTE9HMl9MSUJSQVJZIHNs
b2cyKQotbGlzdChBUFBFTkQgSlNDX0xJQlJBUklFUwotICAgICR7SUNVSTE4Tl9MSUJSQVJZfQot
ICAgICR7SUNVVUNfTElCUkFSWX0KLSAgICAke0lOVExfTElCUkFSWX0gIyBSZXF1aXJlZCBmb3Ig
eDg2IGJ1aWxkcwotICAgICR7TV9MSUJSQVJZfQotICAgICR7U0xPRzJfTElCUkFSWX0KLSAgICAk
e1NjcmVlbl9MSUJSQVJZfQotICAgICR7V2ViS2l0UGxhdGZvcm1fTElCUkFSWX0KLSkKLQotaWYg
KFBST0ZJTElORykKLSAgICBsaXN0KEFQUEVORCBKU0NfTElCUkFSSUVTCi0gICAgICAgICR7UFJP
RklMSU5HX0xJQlJBUll9Ci0gICAgKQotZW5kaWYgKCkKSW5kZXg6IFNvdXJjZS9jbWFrZS9PcHRp
b25zQmxhY2tCZXJyeS5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvY21ha2UvT3B0aW9uc0Js
YWNrQmVycnkuY21ha2UJKHJldmlzaW9uIDE2MTYwNikKKysrIFNvdXJjZS9jbWFrZS9PcHRpb25z
QmxhY2tCZXJyeS5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMSwyMzAgKzAsMCBAQAotc2V0KFBS
T0pFQ1RfVkVSU0lPTl9NQUpPUiAwKQotc2V0KFBST0pFQ1RfVkVSU0lPTl9NSU5PUiAxKQotc2V0
KFBST0pFQ1RfVkVSU0lPTiAke1BST0pFQ1RfVkVSU0lPTl9NQUpPUn0uJHtQUk9KRUNUX1ZFUlNJ
T05fTUlOT1J9KQotCi1zZXQoREFUQV9ESVIgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vc2hhcmUv
JHtQUk9KRUNUX05BTUV9LSR7UFJPSkVDVF9WRVJTSU9OfSkKLQotc2V0KFdURl9VU0VfSUNVX1VO
SUNPREUgMSkKLQotYWRkX2RlZmluaXRpb25zKC1EREFUQV9ESVI9IiR7REFUQV9ESVJ9IikKLQot
YWRkX2RlZmluaXRpb25zKC1EV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SPSJSZXNlYXJjaCBJbiBN
b3Rpb24sIEx0ZC4iKQotYWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfQkxBQ0tCRVJSWV9fKQot
YWRkX2RlZmluaXRpb25zKC1EQlVJTERfV0VCS0lUKQotCi0jIFdvcmthcm91bmQgZm9yIG5vdyBz
byB0aGF0IFNLX0RFQlVHIGlzbid0IGRlZmluZWQgaW4gU2tQcmVDb25maWcuaAotYWRkX2RlZmlu
aXRpb25zKC1EU0tfUkVMRUFTRSkKLQotIyBUT0RPOiBNYWtlIHRoaXMgYnVpbGQtdGltZSBjb25m
aWd1cmFibGUKLXNldChXVEZfVVNFX09QRU5UWVBFX1NBTklUSVpFUiAxKQotYWRkX2RlZmluaXRp
b25zKC1EV1RGX1VTRV9PUEVOVFlQRV9TQU5JVElaRVI9MSkKLWFkZF9kZWZpbml0aW9ucygtRFdU
Rl9VU0VfRVhQT1JUX01BQ1JPUz0xKQotCi1pZiAoRU5BQkxFX0dMRVMyKQotICAgIHNldChXVEZf
VVNFX0FDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HIDEpCi0gICAgYWRkX2RlZmluaXRpb25zKC1EV1RG
X1VTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElORz0xKQotICAgIGFkZF9kZWZpbml0aW9ucygtREJM
QUNLQkVSUllfUExBVEZPUk1fR1JBUEhJQ1NfRUdMPTEpCi0gICAgYWRkX2RlZmluaXRpb25zKC1E
QkxBQ0tCRVJSWV9QTEFURk9STV9HUkFQSElDU19HTEVTMj0xKQotICAgIGFkZF9kZWZpbml0aW9u
cygtREJMQUNLQkVSUllfUExBVEZPUk1fR1JBUEhJQ1NfRFJBV0lOR19TVVJGQUNFPTEpCi0gICAg
YWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9BUkVOQV9BTExPQ19BTElHTk1FTlRfSU5URUdFUj0x
KQotZW5kaWYgKCkKLQotaWYgKEFERElUSU9OQUxfU1lTVEVNX0lOQ0xVREVfUEFUSCkKLSAgICBz
ZXQoQ01BS0VfSU5DTFVERV9TWVNURU1fRkxBR19DICItV3AsLWlzeXN0ZW0iKQotICAgIHNldChD
TUFLRV9JTkNMVURFX1NZU1RFTV9GTEFHX0NYWCAiLVdwLC1pc3lzdGVtIikKLSAgICBmb3JlYWNo
IChkaXJlY3RvcnkgJHtBRERJVElPTkFMX1NZU1RFTV9JTkNMVURFX1BBVEh9KQotICAgICAgICBp
bmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAke2RpcmVjdG9yeX0pCi0gICAgZW5kZm9yZWFjaCAo
KQotICAgIGlmIChFTkFCTEVfV0VCR0wpCi0gICAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoU1lT
VEVNICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL2luY2x1ZGUpICNBcyBzeXN0ZW0gc28gYXMgdG8g
YmUgbG93ZXItcHJpb3JpdHkgdGhhbiBhY3R1YWwgc3lzdGVtIGhlYWRlcnMKLSAgICBlbmRpZiAo
KQotZW5kaWYgKCkKLQotaWYgKFBVQkxJQ19CVUlMRCkKLSAgICBtZXNzYWdlKCIqKiogUFVCTElD
IEJVSUxEICoqKiIpCi1lbHNlIChQVUJMSUNfQlVJTEQpCi0gICAgbWVzc2FnZSgiKioqIERSVCBp
cyBFTkFCTEVEICoqKiIpCi1lbmRpZiAoKQotCi1hZGRfZGVmaW5pdGlvbnMoLURfX1FOWE5UT19f
KQotYWRkX2RlZmluaXRpb25zKC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQpCi1hZGRfZGVmaW5pdGlv
bnMoLURfTEFSR0VGSUxFNjRfU09VUkNFKQotCi0jIEZpbmQgYSBsaWJyYXJ5IG9ubHkgaW4gdGhl
IHN0YWdpbmcgZGlyZWN0b3J5ICh3aGljaCBpcyB0aGUgQ01BS0VfSU5TVEFMTF9QQVRIKQotIyBU
T0RPOiBDTUFLRV9JTlNUQUxMX1BBVEggbWF5IG5vdCBiZSBzdGFnaW5nIGRpcmVjdG9yeS4KLW1h
Y3JvKEZJTkRfU1RBR0lOR19MSUJSQVJZIF92YXIgX2xpYm5hbWUpCi0gICAgZmluZF9saWJyYXJ5
KCR7X3Zhcn0gJHtfbGlibmFtZX0KLSAgICAgICAgUEFUSFMgIiR7Q01BS0VfTElCUkFSWV9QQVRI
fSIKLSAgICAgICAgRU5WICJRTlhfVEFSR0VUIgotICAgICAgICBQQVRIX1NVRkZJWEVTICIke0NN
QUtFX1NZU1RFTV9QUk9DRVNTT1J9L3Vzci9saWIiICIke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9
L2xpYiIKLSAgICAgICAgTk9fREVGQVVMVF9QQVRIKQotZW5kbWFjcm8oKQotCi1tYWNybyhGSU5E
X1NUQUdJTkdfU1RBVElDX0xJQlJBUlkgX3ZhciBfbGlibmFtZSkKLSAgc2V0KCR7X3Zhcn0gIi1C
c3RhdGljIC1sJHtfbGlibmFtZX0gLUJkeW5hbWljIiBDQUNIRSBTVFJJTkcgJHtfbGlibmFtZX0p
Ci1lbmRtYWNybygpCi0KLUZJTkRfU1RBR0lOR19MSUJSQVJZKEpQRUdfTElCUkFSWSBqcGVnKQot
RklORF9TVEFHSU5HX0xJQlJBUlkoUE5HX0xJQlJBUlkgcG5nKQotRklORF9TVEFHSU5HX0xJQlJB
UlkoWE1MMl9MSUJSQVJZIHhtbDIpCi1GSU5EX1NUQUdJTkdfTElCUkFSWShYU0xUX0xJQlJBUlkg
eHNsdCkKLUZJTkRfU1RBR0lOR19MSUJSQVJZKFNRTElURTNfTElCUkFSWSBzcWxpdGUzKQotRklO
RF9TVEFHSU5HX0xJQlJBUlkoTV9MSUJSQVJZIG0pCi1GSU5EX1NUQUdJTkdfTElCUkFSWShGUkVF
VFlQRV9MSUJSQVJZIGZyZWV0eXBlKQotRklORF9TVEFHSU5HX0xJQlJBUlkoSUNVRGF0YV9MSUJS
QVJZIGljdWRhdGEpCi1GSU5EX1NUQUdJTkdfTElCUkFSWShJQ1VJMThOX0xJQlJBUlkgaWN1aTE4
bikKLUZJTkRfU1RBR0lOR19MSUJSQVJZKElDVVVDX0xJQlJBUlkgaWN1dWMpCi1GSU5EX1NUQUdJ
TkdfTElCUkFSWShJTlRMX0xJQlJBUlkgaW50bCkKLUZJTkRfU1RBR0lOR19MSUJSQVJZKFpfTElC
UkFSWSB6KQotRklORF9TVEFHSU5HX0xJQlJBUlkoQ1VSTF9MSUJSQVJZIGN1cmwpCi1GSU5EX1NU
QUdJTkdfTElCUkFSWShXZWJLaXRQbGF0Zm9ybV9MSUJSQVJZIHdlYmtpdHBsYXRmb3JtKQotRklO
RF9TVEFHSU5HX0xJQlJBUlkoRUdMX0xJQlJBUlkgRUdMKQotRklORF9TVEFHSU5HX0xJQlJBUlko
R0xFU3YyX0xJQlJBUlkgR0xFU3YyKQotRklORF9TVEFHSU5HX0xJQlJBUlkoSEFSRkJVWlpfTElC
UkFSWSBoYXJmYnV6eikKLUZJTkRfU1RBR0lOR19MSUJSQVJZKEZPTlRDT05GSUdfTElCUkFSWSBm
b250Y29uZmlnKQotRklORF9TVEFHSU5HX0xJQlJBUlkoUFJPRklMSU5HX0xJQlJBUlkgcHJvZmls
aW5nUykKLUZJTkRfU1RBR0lOR19MSUJSQVJZKExJQl9JTlBVVF9VVElMSVRJRVMgaW5wdXRfdXRp
bGl0aWVzKQotRklORF9TVEFHSU5HX0xJQlJBUlkoT1RTX0xJQlJBUlkgb3RzKQotRklORF9TVEFH
SU5HX0xJQlJBUlkoTEVWRUxEQl9MSUJSQVJZIGxldmVsZGIpCi1GSU5EX1NUQUdJTkdfTElCUkFS
WShJVFlQRV9MSUJSQVJZIGlUeXBlKQotRklORF9TVEFHSU5HX0xJQlJBUlkoV1RMRV9MSUJSQVJZ
IFdUTEUpCi0KLSMgVXNlIGpwZWctdHVyYm8gZm9yIGRldmljZSBidWlsZAotaWYgKFRBUkdFVElO
R19QTEFZQk9PSykKLSAgICBGSU5EX1NUQUdJTkdfU1RBVElDX0xJQlJBUlkoSlBFR19MSUJSQVJZ
IGpwZWctd2Via2l0KQotZWxzZSAoKQotICAgIEZJTkRfU1RBR0lOR19MSUJSQVJZKEpQRUdfTElC
UkFSWSBqcGVnKQotZW5kaWYgKCkKLQotIyBBZGQgIi1mUElDIiB0byBDTUFLRV9TSEFSRURfTElC
UkFSWV9DX0ZMQUdTIGFuZCBDTUFLRV9TSEFSRURfTElCUkFSWV9DWFhfRkxBR1MKLSMgVGhpcyBp
cyBiZWNhdXNlICItZlBJQyIgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBkZWZhdWx0IGRlZmluZXMg
dW5kZXIgTW9kdWxlcy9QbGF0Zm9ybS9RTlguY21ha2UKLXNldChDTUFLRV9TSEFSRURfTElCUkFS
WV9DX0ZMQUdTICItZlBJQyAke0NNQUtFX1NIQVJFRF9MSUJSQVJZX0NfRkxBR1N9IikKLXNldChD
TUFLRV9TSEFSRURfTElCUkFSWV9DWFhfRkxBR1MgIi1mUElDICR7Q01BS0VfU0hBUkVEX0xJQlJB
UllfQ1hYX0ZMQUdTfSIpCi0KLSMgU2hvdyB1bnJlc29sdmVkIHN5bWJvbHMgd2hlbiBkb2luZyB0
aGUgZmluYWwgc2hhcmVkIG9iamVjdCBsaW5rCi1pZiAoUFJPRklMSU5HKQotICAgIHNldChCTEFD
S0JFUlJZX0xJTktfRkxBR1MgIi1XbCwteixkZWZzIC1XbCwteixyZWxybyAtV2wsLUUgLVdsLC0t
bm8ta2VlcC1tZW1vcnkiKQotZWxzZSAoUFJPRklMSU5HKQotICAgIHNldChCTEFDS0JFUlJZX0xJ
TktfRkxBR1MgIi1XbCwteixkZWZzIC1XbCwteixyZWxybyAtV2wsLS1uby1rZWVwLW1lbW9yeSIp
Ci1lbmRpZiAoKQotCi0jIFNldCBjdXN0b20gQ0ZMQUdTIGZvciBvdXIgcG9ydAotaWYgKENNQUtF
X0NPTVBJTEVSX0lTX0dOVUNDKQotICAgIHNldChDTUFLRV9DWFhfRkxBR1MgIi1mbm8tZXhjZXB0
aW9ucyAtZnN0YWNrLXByb3RlY3RvciAtZm5vLXJ0dGkgLVdmb3JtYXQgLVdmb3JtYXQtc2VjdXJp
dHkgLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHkgJHtDTUFLRV9DWFhfRkxBR1N9IikKLSAgICBzZXQo
Q01BS0VfQ19GTEFHUyAiLWZzdGFjay1wcm90ZWN0b3IgLVdmb3JtYXQgLVdmb3JtYXQtc2VjdXJp
dHkgLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHkgJHtDTUFLRV9DX0ZMQUdTfSIpCi0gICAgc2V0KEpT
Q19MSU5LX0ZMQUdTICItV2wsLXosZGVmcyAtV2wsLXoscmVscm8gLU4xMDI0SyIpCi1lbmRpZiAo
KQotCi1pZiAoUFJPRklMSU5HKQotICAgIHNldChDTUFLRV9DWFhfRkxBR1MgIi1maW5zdHJ1bWVu
dC1mdW5jdGlvbnMgLWcgJHtDTUFLRV9DWFhfRkxBR1N9IikKLSAgICBzZXQoQ01BS0VfQ19GTEFH
UyAiLWZpbnN0cnVtZW50LWZ1bmN0aW9ucyAtZyAke0NNQUtFX0NfRkxBR1N9IikKLWVuZGlmICgp
Ci0KLSMgRklYTUU6IE1ha2UgdGhpcyBtb3JlIGVsZWdhbnQKLWlmIChUQVJHRVRJTkdfUExBWUJP
T0spCi0gICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiLW1mcHU9bmVvbiAke0NNQUtFX0NYWF9GTEFH
U30iKQotICAgIHNldChDTUFLRV9DX0ZMQUdTICItbWZwdT1uZW9uICR7Q01BS0VfQ19GTEFHU30i
KQotICAgIHNldChDTUFLRV9DWFhfRkxBR1MgIi1tdGh1bWIgLW10aHVtYi1pbnRlcndvcmsgJHtD
TUFLRV9DWFhfRkxBR1N9IikKLSAgICBzZXQoQ01BS0VfQ19GTEFHUyAiLW10aHVtYiAtbXRodW1i
LWludGVyd29yayAke0NNQUtFX0NfRkxBR1N9IikKLSAgICAjIGNoZWNrIGZvciBCQl9SRUxFQVNF
X0ZMQUdTIG9yIEJCX0RFQlVHX0ZMQUdTIHRvIHNldCBDTUFLRV9DX0ZMQUdTe0RFQlVHfFJFTEVB
U0V9IENNQUtFX0NYWF9GTEFHU3tERUJVR3xSRUxFQVNFfQotICAgIGlmIChERUZJTkVEIEVOVntC
Ql9SRUxFQVNFX0ZMQUdTfSkKLSAgICAgICAgc2V0KENNQUtFX0NYWF9GTEFHU19SRUxFQVNFICAi
JEVOVntCQl9SRUxFQVNFX0ZMQUdTfSAtRE5ERUJVRyIpCi0gICAgICAgIHNldChDTUFLRV9DX0ZM
QUdTX1JFTEVBU0UgICIkRU5We0JCX1JFTEVBU0VfRkxBR1N9IC1ETkRFQlVHIikKLSAgICAgICAg
bWVzc2FnZSgiPT0gRU5WIG92ZXJyaWRlIFJFTEVBU0UgJHtDTUFLRV9DWFhfRkxBR1NfUkVMRUFT
RX0iKQotICAgIGVuZGlmICgpCi0gICAgaWYgKERFRklORUQgRU5We0JCX0RFQlVHX0ZMQUdTfSkK
LSAgICAgICAgc2V0KENNQUtFX0NYWF9GTEFHU19ERUJVRyAiJEVOVntCQl9ERUJVR19GTEFHU30i
KQotICAgICAgICBzZXQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJEVOVntCQl9ERUJVR19GTEFHU30i
KQotICAgICAgICBtZXNzYWdlKCI9PSBFTlYgb3ZlcnJpZGUgREVCVUcgJHtDTUFLRV9DWFhfRkxB
R1NfREVCVUd9IikKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkKLQotaW5jbHVkZV9kaXJlY3Rvcmll
cygke0NNQUtFX0lOQ0xVREVfUEFUSH0pCi0KLXNldChXVEZfT1VUUFVUX05BTUUgd3RmKQotc2V0
KEphdmFTY3JpcHRDb3JlX09VVFBVVF9OQU1FIGphdmFzY3JpcHRjb3JlKQotc2V0KFdlYkNvcmVf
T1VUUFVUX05BTUUgd2ViY29yZSkKLXNldChXZWJLaXRfT1VUUFVUX05BTUUgd2Via2l0KQotc2V0
KFdlYktpdF9EUlRfT1VUUFVUX05BTUUgd2Via2l0X0RSVCkKLQotV0VCS0lUX09QVElPTl9CRUdJ
TigpCi0KLVdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9FVkVOVF9NT0RFX01FVEFUQUdTICJF
bmFibGUgbWV0YS10YWcgdG91Y2ggYW5kIG1vdXNlIGV2ZW50cyIgT04pCi1XRUJLSVRfT1BUSU9O
X0RFRklORShFTkFCTEVfVklFV1BPUlRfUkVGTE9XICJFbmFibGUgdmlld3BvcnQgcmVmbG93IiBP
TikKLQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0JBVFRFUllfU1RB
VFVTIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0JMT0IgT04p
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ09OVEVYVF9NRU5VUyBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0lNQUdFX1JF
U09MVVRJT04gT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1VT
VE9NX1NDSEVNRV9IQU5ETEVSIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0RFVklDRV9PUklFTlRBVElPTiBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9EUkFHX1NVUFBPUlQgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0RPV05MT0FEX0FUVFJJQlVURSBPTikKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9GQVNUX01PQklMRV9TQ1JPTExJTkcgT04pCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRklMVEVSUyBPTikKLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSBPTikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9HRU9MT0NBVElPTiBPTikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ISURERU5fUEFHRV9ET01fVElNRVJfVEhS
T1RUTElORyBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9JTUFH
RV9ERUNPREVSX0RPV05fU0FNUExJTkcgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SIE9OKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TIE9OKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xFR0FDWV9WSUVXUE9SVF9BREFQVElPTiBP
TikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MTElOVCBPTikKLVdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NQVRITUwgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01FRElBX0NBUFRVUkUgT04pCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUVESUFfU1RSRUFNIE9OKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VU
SUxTIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05FVFdPUktf
SU5GTyBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9OT1RJRklD
QVRJT05TIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09SSUVO
VEFUSU9OX0VWRU5UUyBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9QQUdFX1ZJU0lCSUxJVFlfQVBJIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1JFUEFJTlRfVEhST1RUTElORyBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSBPTikKLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFSRURfV09SS0VSUyBPTikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HIE9OKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1RFWFRfQVVUT1NJWklORyBPTikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9UT1VDSF9FVkVOVFMgT04p
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVE9VQ0hfU0xJREVSIE9O
KQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1ZJQlJBVElPTiBPTikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WSURFTyBPTikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WSURFT19UUkFDSyBPRkYpCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX1RJTUlORyBPTikKLQotaWYg
KEVOQUJMRV9HTEVTMikKLSAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfM0RfUkVOREVSSU5HIE9OKQotICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMgT04pCi0gICAgV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19GSUxURVJTIE9OKQotICAgIFdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfU0hBREVSUyBPTikKLSAgICBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCR0wgT04pCi1lbHNlICgpCi0gICAgV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFXzNEX1JFTkRFUklORyBPRkYpCi0g
ICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VMRVJBVEVEXzJE
X0NBTlZBUyBPRkYpCi0gICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X0NTU19GSUxURVJTIE9GRikKLSAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfQ1NTX1NIQURFUlMgT0ZGKQotICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9XRUJHTCBPRkYpCi1lbmRpZiAoKQotCi1pZiAoQ01BS0VfU1lTVEVNX1BST0NF
U1NPUiBNQVRDSEVTIHg4NikKLSAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfSklUIE9GRikKLWVsc2UgKCkKLSAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfSklUIE9OKQotZW5kaWYgKCkKLQotV0VCS0lUX09QVElPTl9FTkQoKQotCi1h
ZGRfZGVmaW5pdGlvbnMoLURFTkFCTEVfQkxBQ0tCRVJSWV9DUkVERU5USUFMX1BFUlNJU1Q9MSkK
LQotIyBTb21lIG9mIG91ciBmaWxlcywgc3VjaCBhcyBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAsIHJlcXVpcmUgYQotIyBuZXdlciBJQ1Ug
dmVyc2lvbiB0aGFuIHRoZSB2ZXJzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgaGVhZGVycyBpbiB7
V2ViQ29yZSwgSmF2YVNjcmlwdENvcmV9L2ljdS4KLSMgQmVjYXVzZSBvZiA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTEzPiB3ZSBjYW4ndCBkaXJlY3RseSByZWZl
cmVuY2UgdGhlc2UgbmV3ZXIKLSMgSUNVIGhlYWRlcnMgd2l0aGluIHRoZSBRTlggc3lzdGVtIGhl
YWRlciBkaXJlY3RvcnkuIEFzIGEgd29ya2Fyb3VuZCwgd2UgY29weSB0aGVzZSBuZXdlciBJQ1Ug
aGVhZGVycwotIyBmcm9tIHRoZSBRTlggc3lzdGVtIGhlYWRlciBkaXJlY3RvcnkgdG8gYSB0aGly
ZC1wYXJ0eSBkaXJlY3RvcnkgdW5kZXIgdGhlIENNYWtlIGJpbmFyeSB0cmVlLgotIwotIyBGSVhN
RTogTWFrZSB0aGlzIG1lY2hhbmlzbSBtb3JlIGdlbmVyYWwgcHVycG9zZS4gTWF5YmUgYWNjZXB0
IGEgbGlzdCBvciBkaXJlY3Rvcmllcy9maWxlcyB0byBjb3B5Ci0jIGluc3RlYWQgb2YgaW5kaXZp
ZHVhbCB2YXJpYWJsZXMuIEdlbmVyYWxpemluZyB0aGlzIHNvbHV0aW9uIG1heSBhbGxvdyB1cyB0
byBmaXggPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDkxMz4uCi1z
ZXQoQkxBQ0tCRVJSWV9USElSRF9QQVJUWV9ESVIgIiR7Q01BS0VfQklOQVJZX0RJUn0vVGhpcmRQ
YXJ0eUJsYWNrQmVycnkiKQotZmlsZShDT1BZICR7VEhJUkRfUEFSVFlfSUNVX0RJUn0gREVTVElO
QVRJT04gIiR7QkxBQ0tCRVJSWV9USElSRF9QQVJUWV9ESVJ9L2ljdSIpCi1maWxlKENPUFkgJHtU
SElSRF9QQVJUWV9VTklDT0RFX0ZJTEV9IERFU1RJTkFUSU9OICR7QkxBQ0tCRVJSWV9USElSRF9Q
QVJUWV9ESVJ9KQotCi1zZXQoSUNVX0lOQ0xVREVfRElSUyAiJHtCTEFDS0JFUlJZX1RISVJEX1BB
UlRZX0RJUn0vaWN1IikKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTYwNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE0LTAxLTA5ICBCZW5qYW1pbiBQb3VsYWluICA8
YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB0aGUgQmxhY2tCZXJyeSBmaWxl
cyBvdXRzaWRlIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNjcxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeTogUmVtb3ZlZC4KKwogMjAxNC0w
MS0wOSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0g
UHJvbW90ZSBXS0JhY2tGb3J3YXJkTGlzdHssSXRlbX0uaCB0byBwdWJsaWMKSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTYwNikKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJC
bGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLUFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCi17Ci19Ci0KLUFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQotewotfQot
Ci1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2Vk
RWxlbWVudCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1l
bnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0ZvY3VzRXZlbnRzKGJvb2wpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0
TG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dWYWx1ZUNoYW5nZUV2ZW50
cyhib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KGludCwgaW50KQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0FjY2Vzc2liaWxpdHlFdmVudHMoYm9vbCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjph
ZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikKLXsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxp
c3RlbmVyKCkKLXsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9ibGFja2JlcnJ5L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRCbGFja0JlcnJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNjA2KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvYmxhY2tiZXJyeS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QmxhY2tCZXJyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNjU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLUFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVs
ZW1lbnQgZWxlbWVudCkKLSAgICA6IG1fZWxlbWVudChlbGVtZW50KQotewotfQotCi1BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQmIG90aGVyKQotICAgIDogbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKLXsK
LX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoKQot
ewotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldExpbmtlZFVJRWxlbWVudHMo
VmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3VtZW50TGlua3MoVmVj
dG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuKFZlY3RvcjxBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50PiYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZShWZWN0b3I8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4mLCB1bnNpZ25lZCwgdW5zaWduZWQpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291
bnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnQo
aW50LCBpbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZEF0
SW5kZXgodW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5r
ZWRVSUVsZW1lbnRBdEluZGV4KHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFs
bEF0dHJpYnV0ZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtl
ZFVJRWxlbWVudHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3Vt
ZW50TGlua3MoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVs
ZW1lbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVu
dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vi
cm9sZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNT
dHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVz
Y3JpcHRpb24oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OngoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWRvdWJsZSBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWRvdWJsZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpoZWlnaHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlja1BvaW50
WCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotZG91Ymxl
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1kb3VibGUg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWUoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnZhbHVlRGVzY3JpcHRpb24oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVkKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzUHJlc3NBY3Rpb25TdXBwb3J0ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmNyZW1l
bnRBY3Rpb25TdXBwb3J0ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNEZWNyZW1lbnRBY3Rpb25T
dXBwb3J0ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZCgpIGNvbnN0Ci17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiAwOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGllcmFyY2hp
Y2FsTGV2ZWwoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0
dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNvbHVtbnMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3Mo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5n
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aW5kZXhJblRhYmxlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJh
bmdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bGluZUZvckluZGV4KGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpi
b3VuZHNGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c3RyaW5nRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50Rm9yU2VhcmNoUHJlZGljYXRlKEpTQ29udGV4dFJl
ZiwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCosIGJvb2wsIEpTVmFsdWVSZWYsIEpTU3RyaW5nUmVm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJv
dyh1bnNpZ25lZCwgdW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRU
ZXh0UmFuZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWdu
ZWQsIHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZShKU1N0cmluZ1JlZikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aW5jcmVtZW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVudCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudSgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpkaXNjbG9zZWRSb3dBdEluZGV4KHVuc2lnbmVkKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYU93bnNFbGVtZW50QXRJbmRleCh1bnNpZ25l
ZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFGbG93VG9FbGVtZW50
QXRJbmRleCh1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAw
OwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNl
bGVjdGVkUm93QXRJbmRleCh1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnJvd0F0SW5kZXgodW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpkaXNjbG9zZWRCeVJvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNz
aWJpbGl0eVZhbHVlKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVu
Y29kaW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1K
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWRvdWJsZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmJvb2xBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aW50VmFsdWUoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDaGVja2Vk
KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1K
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNl
bGVjdGFibGUoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25B
Y3RpdmUoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0Ci17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzQ29sbGFwc2VkKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1
cCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCwgaW50LCBpbnQsIGludCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50LCBpbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNl
bGVjdGlvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphZGRTZWxlY3Rpb24oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29s
dW1uQ291bnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cHJlc3MoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWludCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojpyb3dDb3VudCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVs
cFRleHQoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdG
b3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVk
U3RyaW5nUmFuZ2VJc01pc3NwZWxsZWQodW5zaWduZWQsIHVuc2lnbmVkKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNJZ25vcmVkKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzZWQo
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xhc3NMaXN0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOwotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2ti
ZXJyeS9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvYmxhY2tiZXJyeS9EdW1wUmVuZGVyVHJlZS5jcHAJKHJldmlzaW9uIDE2MTYwNikKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvRHVtcFJlbmRlclRyZWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEwMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRHVtcFJlbmRlclRyZWUuaCIKLQotI2luY2x1ZGUgIkFQSUNhc3QuaCIKLSNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxl
ci5oIgotI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdEJsYWNrQmVycnkuaCIKLSNpbmNsdWRlICJD
cmVkZW50aWFsLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnQuaCIKLSNpbmNsdWRlICJFZGl0aW5nQmVo
YXZpb3JUeXBlcy5oIgotI2luY2x1ZGUgIkVkaXRvckNsaWVudEJsYWNrQmVycnkuaCIKLSNpbmNs
dWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiRXZlbnRTZW5kZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyVHlwZXMuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKLSNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgotI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCi0j
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTm9k
ZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2lu
Y2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnQuaCIKLSNpbmNs
dWRlICJQaXhlbER1bXBTdXBwb3J0QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0j
aW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0j
aW5jbHVkZSAiVGVzdFJ1bm5lci5oIgotI2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgotI2luY2x1
ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCi0jaW5jbHVkZSAi
V2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJXb3JrUXVl
dWUuaCIKLSNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgiCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtTGF5b3V0VGVzdC5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVByaW1pdGl2
ZXMuaD4KLSNpbmNsdWRlIDxXZWJTZXR0aW5ncy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j
bHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Q29weWluZ1NvcnQuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLSNkZWZpbmUgU0RDQVJEX1BBVEggIi9kZXZlbG9wZXIiCi0KLXZvbGF0
aWxlIGJvb2wgdGVzdERvbmU7Ci0KLVJlZlB0cjxUZXN0UnVubmVyPiBnVGVzdFJ1bm5lcjsKLQot
V2ViQ29yZTo6RnJhbWUqIG1haW5GcmFtZSA9IDA7Ci1XZWJDb3JlOjpGcmFtZSogdG9wTG9hZGlu
Z0ZyYW1lID0gMDsKLWJvb2wgd2FpdEZvclBvbGljeSA9IGZhbHNlOwotYm9vbCBydW5Gcm9tQ29t
bWFuZExpbmUgPSBmYWxzZTsKLQotLy8gRklYTUU6IEFzc3VtaW5nIExheW91dFRlc3RzIGhhcyBi
ZWVuIGNvcGllZCB0byAvZGV2ZWxvcGVyL0xheW91dFRlc3RzLwotc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGtTRENMYXlvdXRUZXN0c1VSSSA9ICJmaWxlOi8vL2RldmVsb3Blci9MYXlvdXRUZXN0
cy8iOwotc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBUZXN0U3ludGF4ID0gImh0dHAvdGVzdHMvIjsK
LXN0YXRpYyBjb25zdCBjaGFyKiBsb2NhbFRlc3RTeW50YXggPSAibG9jYWwvIjsKLXN0YXRpYyBj
b25zdCBjaGFyKiBodHRwUHJlZml4VVJMID0gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC8iOwotCi11
c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1zdGF0aWMgU3RyaW5nIGRydEFmZmluaXR5RGVzY3JpcHRp
b24oV2ViQ29yZTo6RUFmZmluaXR5IGFmZmluaXR5KQotewotICAgIGlmIChhZmZpbml0eSA9PSBX
ZWJDb3JlOjpVUFNUUkVBTSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygiTlNTZWxlY3Rpb25BZmZp
bml0eVVwc3RyZWFtIik7Ci0gICAgaWYgKGFmZmluaXR5ID09IFdlYkNvcmU6OkRPV05TVFJFQU0p
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoIk5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIik7
Ci0gICAgcmV0dXJuICIiOwotfQotCi1zdGF0aWMgU3RyaW5nIGRydER1bXBQYXRoKFdlYkNvcmU6
Ok5vZGUqIG5vZGUpCi17Ci0gICAgV2ViQ29yZTo6Tm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50
Tm9kZSgpOwotICAgIFN0cmluZyBzdHIgPSBTdHJpbmc6OmZvcm1hdCgiJXMiLCBub2RlLT5ub2Rl
TmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChwYXJlbnQpIHsKLSAgICAgICAgc3RyLmFw
cGVuZCgiID4gIik7Ci0gICAgICAgIHN0ci5hcHBlbmQoZHJ0RHVtcFBhdGgocGFyZW50KSk7Ci0g
ICAgfQotICAgIHJldHVybiBzdHI7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZHJ0UmFuZ2VEZXNjcmlw
dGlvbihXZWJDb3JlOjpSYW5nZSogcmFuZ2UpCi17Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAg
cmV0dXJuICIobnVsbCkiOwotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgicmFuZ2UgZnJvbSAl
ZCBvZiAlcyB0byAlZCBvZiAlcyIsIHJhbmdlLT5zdGFydE9mZnNldCgpLCBkcnREdW1wUGF0aChy
YW5nZS0+c3RhcnRDb250YWluZXIoKSkudXRmOCgpLmRhdGEoKSwgcmFuZ2UtPmVuZE9mZnNldCgp
LCBkcnREdW1wUGF0aChyYW5nZS0+ZW5kQ29udGFpbmVyKCkpLnV0ZjgoKS5kYXRhKCkpOwotfQot
Ci1zdGF0aWMgU3RyaW5nIGRydEZyYW1lRGVzY3JpcHRpb24oV2ViQ29yZTo6RnJhbWUqIGZyYW1l
KQotewotICAgIFN0cmluZyBuYW1lID0gZnJhbWUtPnRyZWUoKS0+dW5pcXVlTmFtZSgpLnN0cmlu
ZygpOwotICAgIGlmIChmcmFtZSA9PSBtYWluRnJhbWUpIHsKLSAgICAgICAgaWYgKCFuYW1lLmlz
TnVsbCgpICYmIG5hbWUubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3Jt
YXQoIm1haW4gZnJhbWUgXCIlc1wiIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0
dXJuICJtYWluIGZyYW1lIjsKLSAgICB9Ci0gICAgaWYgKCFuYW1lLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoImZyYW1lIFwiJXNcIiIsIG5hbWUudXRmOCgpLmRhdGEo
KSk7Ci0gICAgcmV0dXJuICJmcmFtZSAoYW5vbnltb3VzKSI7Ci19Ci0KLXN0YXRpYyBXVEY6OlN0
cmluZyBkcnRDcmVkZW50aWFsRGVzY3JpcHRpb24oV2ViQ29yZTo6Q3JlZGVudGlhbCYpCi17Ci0g
ICAgLy8gVE9ETzogSW1wbGVtZW50YXRpb24gbmVlZGVkLgotICAgIHJldHVybiAiPHVua25vd24+
IjsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkTG9nRnJhbWVMb2FkRGVsZWdhdGVzKGNvbnN0IFN0
cmluZyYgdXJsKQotewotICAgIHJldHVybiB1cmwuY29udGFpbnMoImxvYWRpbmcvIik7Ci19Ci0K
LXN0YXRpYyBib29sIHNob3VsZER1bXBBc1RleHQoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAg
cmV0dXJuIHVybC5jb250YWlucygiZHVtcEFzVGV4dC8iKTsKLX0KLQotbmFtZXNwYWNlIEJsYWNr
QmVycnkgewotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUR1bXBSZW5kZXJUcmVlKiBEdW1wUmVuZGVy
VHJlZTo6c19jdXJyZW50SW5zdGFuY2UgPSAwOwotCi1zdGF0aWMgdm9pZCBjcmVhdGVGaWxlKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUpCi17Ci0gICAgRklMRSogZmQgPSBmb3BlbihmaWxlTmFtZS51
dGY4KCkuZGF0YSgpLCAid2IiKTsKLSAgICBpZiAoZmQpCi0gICAgICAgIGZjbG9zZShmZCk7Ci19
Ci0KLXN0YXRpYyBib29sIGlzRnVsbFVybChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBzdGF0
aWMgVmVjdG9yPFN0cmluZz4gKnByZWZpeGVzID0gMDsKLSAgICBpZiAoIXByZWZpeGVzKSAgewot
ICAgICAgICBwcmVmaXhlcyA9IG5ldyBWZWN0b3I8U3RyaW5nPigpOwotICAgICAgICBwcmVmaXhl
cy0+YXBwZW5kKCJodHRwOi8vIik7Ci0gICAgICAgIHByZWZpeGVzLT5hcHBlbmQoImZpbGU6Ly8i
KTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWZpeGVzLT5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgocHJlZml4ZXMtPmF0KGkpLCBmYWxz
ZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1EdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRlclRyZWUoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlKiBwYWdlKQotICAgIDogbV9nY0NvbnRyb2xsZXIoMCkKLSAgICAsIG1fYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIoMCkKLSAgICAsIG1fcGFnZShwYWdlKQotICAgICwgbV9lbmFibGVQaXhl
bFRlc3RzKGdldGVudigicGl4ZWxUZXN0cyIpKQotICAgICwgbV93YWl0VG9EdW1wV2F0Y2hkb2dU
aW1lcih0aGlzLCAmRHVtcFJlbmRlclRyZWU6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQp
Ci0gICAgLCBtX3dvcmtUaW1lcih0aGlzLCAmRHVtcFJlbmRlclRyZWU6OnByb2Nlc3NXb3JrKQot
ICAgICwgbV9hY2NlcHRzRWRpdGluZyh0cnVlKQotICAgICwgbV9wb2xpY3lEZWxlZ2F0ZUVuYWJs
ZWQoZmFsc2UpCi0gICAgLCBtX3BvbGljeURlbGVnYXRlSXNQZXJtaXNzaXZlKGZhbHNlKQotewot
ICAgIGNvbnN0IGNoYXIqIHdvcmtlck51bWJlciA9IGdldGVudigiV09SS0VSX05VTUJFUiIpID8g
Z2V0ZW52KCJXT1JLRVJfTlVNQkVSIikgOiAiMCI7Ci0gICAgU3RyaW5nIHNkY2FyZFBhdGggPSBT
RENBUkRfUEFUSDsKLSAgICBtX3Jlc3VsdHNEaXIgPSBzZGNhcmRQYXRoICsgIi9yZXN1bHRzLyI7
Ci0gICAgbV9kb25lRmlsZSA9IHNkY2FyZFBhdGggKyAiL2RvbmUiICsgd29ya2VyTnVtYmVyOwot
ICAgIG1fY3VycmVudFRlc3RGaWxlID0gc2RjYXJkUGF0aCArICIvY3VycmVudCIgKyB3b3JrZXJO
dW1iZXIgKyAiLmRydCI7Ci0gICAgbV9wYWdlLT5yZXNldFZpcnR1YWxWaWV3cG9ydE9uQ29tbWl0
dGVkKGZhbHNlKTsKLSAgICBtX3BhZ2UtPnNldFZpcnR1YWxWaWV3cG9ydFNpemUoUGxhdGZvcm06
OkludFNpemUoODAwLCA2MDApKTsKLSAgICBzX2N1cnJlbnRJbnN0YW5jZSA9IHRoaXM7Ci19Ci0K
LUR1bXBSZW5kZXJUcmVlOjp+RHVtcFJlbmRlclRyZWUoKQotewotICAgIGRlbGV0ZSBtX2djQ29u
dHJvbGxlcjsKLSAgICBkZWxldGUgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjsKLX0KLQotdm9p
ZCBEdW1wUmVuZGVyVHJlZTo6cnVuVGVzdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBpbWFnZUhhc2gpCi17Ci0gICAgbWFpbkZyYW1lLT5sb2FkZXIoKS0+c3RvcEZvclVzZXJDYW5j
ZWwoKTsKLSAgICByZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyh1cmwsIGltYWdl
SGFzaCk7Ci0gICAgaWYgKHNob3VsZExvZ0ZyYW1lTG9hZERlbGVnYXRlcyh1cmwpKQotICAgICAg
ICBnVGVzdFJ1bm5lci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0cnVlKTsKLSAgICBpZiAo
IXJ1bkZyb21Db21tYW5kTGluZSkgewotICAgICAgICBjcmVhdGVGaWxlKG1fcmVzdWx0c0RpciAr
ICptX2N1cnJlbnRUZXN0ICsgIi5kdW1wLmNyYXNoIik7Ci0KLSAgICAgICAgU3RyaW5nIHN0ZG91
dEZpbGUgPSBtX3Jlc3VsdHNEaXIgKyAqbV9jdXJyZW50VGVzdCArICIuZHVtcCI7Ci0gICAgICAg
IFN0cmluZyBzdGRlcnJGaWxlID0gbV9yZXN1bHRzRGlyICsgKm1fY3VycmVudFRlc3QgKyAiLnN0
ZGVyciI7Ci0KLSAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBwcmVzZXJ2ZSB0aGUgb3JpZ2lu
YWwgc3Rkb3V0IGFuZCBzdGRlcnIgaGVyZSBidXQgYXJlbid0IGRvaW5nCi0gICAgICAgIC8vIHRo
YXQgeWV0IGR1ZSB0byBpc3N1ZXMgd2l0aCBkdXAsIGV0Yy4KLSAgICAgICAgZnJlb3BlbihzdGRv
dXRGaWxlLnV0ZjgoKS5kYXRhKCksICJ3YiIsIHN0ZG91dCk7Ci0gICAgICAgIGZyZW9wZW4oc3Rk
ZXJyRmlsZS51dGY4KCkuZGF0YSgpLCAid2IiLCBzdGRlcnIpOwotICAgIH0KLSAgICBGSUxFKiBj
dXJyZW50ID0gZm9wZW4obV9jdXJyZW50VGVzdEZpbGUudXRmOCgpLmRhdGEoKSwgInciKTsKLSAg
ICBpZiAoY3VycmVudCkgewotICAgICAgICBmd3JpdGUobV9jdXJyZW50VGVzdC0+dXRmOCgpLmRh
dGEoKSwgMSwgbV9jdXJyZW50VGVzdC0+dXRmOCgpLmxlbmd0aCgpLCBjdXJyZW50KTsKLSAgICAg
ICAgZmNsb3NlKGN1cnJlbnQpOwotICAgIH0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0
d29ya1JlcXVlc3QgcmVxdWVzdDsKLSAgICBTVEFUSUNfTE9DQUxfU1RSSU5HKHNfZ2V0LCAiR0VU
Iik7Ci0gICAgcmVxdWVzdC5zZXRSZXF1ZXN0VXJsKHVybCwgc19nZXQpOwotICAgIG1fcGFnZS0+
bG9hZChyZXF1ZXN0KTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZG9uZURydCgpCi17Ci0g
ICAgZmNsb3NlKHN0ZG91dCk7Ci0gICAgZmNsb3NlKHN0ZGVycik7Ci0gICAgdW5saW5rKGdldFBQ
U1BhdGgoKS5jX3N0cigpKTsKLQotICAgIC8vIE5vdGlmeSB0aGUgZXh0ZXJuYWwgd29ybGQgdGhh
dCB3ZSdyZSBkb25lLgotICAgIGNyZWF0ZUZpbGUobV9kb25lRmlsZSk7Ci0gICAgKG1fcGFnZS0+
Y2xpZW50KCkpLT5ub3RpZnlSdW5MYXlvdXRUZXN0c0ZpbmlzaGVkKCk7Ci19Ci0KLXZvaWQgRHVt
cFJlbmRlclRyZWU6OnJ1bkN1cnJlbnRUZXN0KCkKLXsKLSAgICBTdHJpbmcgaW1hZ2VIYXNoID0g
IiI7Ci0gICAgaW50IHBvc1NwbGl0dGVyID0gbV9jdXJyZW50VGVzdC0+ZmluZCgnPycpOwotICAg
IGlmIChwb3NTcGxpdHRlciA+IDEgJiYgKHVuc2lnbmVkKXBvc1NwbGl0dGVyIDwgbV9jdXJyZW50
VGVzdC0+bGVuZ3RoKCkgLSAxKSB7Ci0gICAgICAgIGltYWdlSGFzaCA9IG1fY3VycmVudFRlc3Qt
PnN1YnN0cmluZyhwb3NTcGxpdHRlciArIDEpOwotICAgICAgICBtX2N1cnJlbnRUZXN0LT50cnVu
Y2F0ZShwb3NTcGxpdHRlcik7Ci0gICAgfQotICAgIGlmIChpc0hUVFBUZXN0KG1fY3VycmVudFRl
c3QtPnV0ZjgoKS5kYXRhKCkpKSB7Ci0gICAgICAgIG1fY3VycmVudEh0dHBUZXN0ID0gbV9jdXJy
ZW50VGVzdC0+dXRmOCgpLmRhdGEoKTsKLSAgICAgICAgbV9jdXJyZW50SHR0cFRlc3QucmVtb3Zl
KDAsIHN0cmxlbihodHRwVGVzdFN5bnRheCkpOwotICAgICAgICBydW5UZXN0KGh0dHBQcmVmaXhV
UkwgKyBtX2N1cnJlbnRIdHRwVGVzdCwgaW1hZ2VIYXNoKTsKLSAgICB9IGVsc2UgaWYgKGlzRnVs
bFVybCgqbV9jdXJyZW50VGVzdCkpCi0gICAgICAgIHJ1blRlc3QoKm1fY3VycmVudFRlc3QsIGlt
YWdlSGFzaCk7Ci0gICAgZWxzZQotICAgICAgICBydW5UZXN0KGtTRENMYXlvdXRUZXN0c1VSSSAr
ICptX2N1cnJlbnRUZXN0LCBpbWFnZUhhc2gpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpy
dW5SZW1haW5pbmdUZXN0cygpCi17Ci0gICAgaWYgKHJ1bkZyb21Db21tYW5kTGluZSkgewotICAg
ICAgICBkb25lRHJ0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTog
ZmZsdXNoIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJ1dCBpcyB0ZW1wb3JhcmlseSByZXF1aXJl
ZCBkdWUgdG8gYSBidWcgaW4gc3RkaW8gb3V0cHV0LgotICAgIGZmbHVzaChzdGRvdXQpOwotICAg
IGZmbHVzaChzdGRlcnIpOwotCi0gICAgaWYgKG1fY3VycmVudFRlc3QgPj0gbV90ZXN0cy5lbmQo
KSAtIDEpIHsKLSAgICAgICAgbV90ZXN0cy5jbGVhcigpOwotICAgICAgICBpZiAobV9idWZmZXJl
ZFRlc3RzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIG1fdGVzdHMuYXBwZW5kKG1fYnVmZmVy
ZWRUZXN0cyk7Ci0gICAgICAgICAgICBtX2J1ZmZlcmVkVGVzdHMuY2xlYXIoKTsKLSAgICAgICAg
ICAgIG1fY3VycmVudFRlc3QgPSBtX3Rlc3RzLmJlZ2luKCk7Ci0gICAgICAgICAgICBydW5DdXJy
ZW50VGVzdCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2N1
cnJlbnRUZXN0Kys7Ci0gICAgcnVuQ3VycmVudFRlc3QoKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVy
VHJlZTo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgaW1hZ2VIYXNoKQotewotICAgIGdUZXN0UnVubmVyID0gVGVzdFJ1
bm5lcjo6Y3JlYXRlKHVybC51dGY4KCkuZGF0YSgpLCBpbWFnZUhhc2gudXRmOCgpLmRhdGEoKSk7
Ci0KLSAgICBpZiAoc2hvdWxkRHVtcEFzVGV4dCh1cmwpKSB7Ci0gICAgICAgIGdUZXN0UnVubmVy
LT5zZXREdW1wQXNUZXh0KHRydWUpOwotICAgICAgICBnVGVzdFJ1bm5lci0+c2V0R2VuZXJhdGVQ
aXhlbFJlc3VsdHMoZmFsc2UpOwotICAgIH0KLSAgICBnVGVzdFJ1bm5lci0+c2V0SWNvbkRhdGFi
YXNlRW5hYmxlZChmYWxzZSk7Ci0KLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnJlc2V0R2Vv
bG9jYXRpb25Nb2NrKG1fcGFnZSk7Ci0KLSAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwotICAgIG1f
bG9hZEZpbmlzaGVkID0gZmFsc2U7Ci0gICAgbV9wb2xpY3lEZWxlZ2F0ZUVuYWJsZWQgPSBmYWxz
ZTsKLSAgICBtX3BvbGljeURlbGVnYXRlSXNQZXJtaXNzaXZlID0gZmFsc2U7Ci0gICAgd2FpdEZv
clBvbGljeSA9IGZhbHNlOwotICAgIHRlc3REb25lID0gZmFsc2U7Ci0gICAgV29ya1F1ZXVlOjpz
aGFyZWQoKS0+Y2xlYXIoKTsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4oZmFs
c2UpOwotCi0gICAgV2ViU2V0dGluZ3MqIHNldHRpbmdzID0gbV9wYWdlLT5zZXR0aW5ncygpOwot
ICAgIC8vIEFwcGx5IG5ldyBzZXR0aW5ncyB0byBjdXJyZW50IHBhZ2UsIHNlZSBtb3JlIGluIHRo
ZSBkZXN0cnVjdG9yIG9mIFdlYlNldHRpbmdzVHJhbnNhY3Rpb24uCi0gICAgV2ViU2V0dGluZ3NU
cmFuc2FjdGlvbiB3ZWJTZXR0aW5nVHJhbnNhY3Rpb24oc2V0dGluZ3MpOwotCi0gICAgc2V0dGlu
Z3MtPnNldFRleHRSZWZsb3dNb2RlKFdlYlNldHRpbmdzOjpUZXh0UmVmbG93RGlzYWJsZWQpOwot
ICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKLSAgICBzZXR0aW5ncy0+
c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRKYXZh
U2NyaXB0T3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRa
b29tVG9GaXRPbkxvYWQoZmFsc2UpOwotICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUo
MTYpOwotICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMyk7Ci0gICAgc2V0
dGluZ3MtPnNldE1pbmltdW1Gb250U2l6ZSgxKTsKLSAgICBTVEFUSUNfTE9DQUxfU1RSSU5HKHNf
YXJpYWwsICJBcmlhbCIpOwotICAgIFNUQVRJQ19MT0NBTF9TVFJJTkcoc19jb3VyaWVyLCAiQ291
cmllciBOZXciKTsKLSAgICBTVEFUSUNfTE9DQUxfU1RSSU5HKHNfdGltZXMsICJUaW1lcyIpOwot
ICAgIHNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoc190aW1lcyk7Ci0gICAgc2V0dGluZ3Mt
PnNldEZpeGVkRm9udEZhbWlseShzX2NvdXJpZXIpOwotICAgIHNldHRpbmdzLT5zZXRTYW5zU2Vy
aWZGb250RmFtaWx5KHNfYXJpYWwpOwotICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1p
bHkoc190aW1lcyk7Ci0gICAgc2V0dGluZ3MtPnNldFhTU0F1ZGl0b3JFbmFibGVkKGZhbHNlKTsK
LSAgICBzZXR0aW5ncy0+c2V0TWF4aW11bVBhZ2VzSW5DYWNoZSgwKTsKLSAgICBzZXR0aW5ncy0+
c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7Ci0KLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBS
ZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5jbGVhckJhY2tGb3J3YXJkTGlz
dChmYWxzZSk7Ci0KLSAgICBzZXRBY2NlcHRzRWRpdGluZyh0cnVlKTsKLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnQ6OnNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4odHJ1ZSk7Ci0jaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNldFN0eWxlU2Nv
cGVkRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotCi0gICAgbV9wYWdlLT5zZXRWaXJ0dWFsVmlld3Bv
cnRTaXplKFBsYXRmb3JtOjpJbnRTaXplKDgwMCwgNjAwKSk7Ci0gICAgbV9wYWdlLT5yZXNldFZp
cnR1YWxWaWV3cG9ydE9uQ29tbWl0dGVkKGZhbHNlKTsKLSAgICBtX3BhZ2UtPnNldFVzZXJTY2Fs
YWJsZSh0cnVlKTsKLSAgICBtX3BhZ2UtPnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQo
dHJ1ZSk7Ci0KLSAgICBpZiAoV2ViQ29yZTo6UGFnZSogcGFnZSA9IER1bXBSZW5kZXJUcmVlU3Vw
cG9ydDo6Y29yZVBhZ2UobV9wYWdlKSkgewotICAgICAgICBwYWdlLT5zZXRUYWJLZXlDeWNsZXNU
aHJvdWdoRWxlbWVudHModHJ1ZSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9u
Y2UgQmxhY2tCZXJyeSB1c2VzIHJlc2V0SW50ZXJuYWxzT2JqZWN0OiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY4OTkuCi0gICAgICAgIHBhZ2UtPnNldHRpbmdzKCkt
PnNldEVkaXRpbmdCZWhhdmlvclR5cGUoV2ViQ29yZTo6RWRpdGluZ1VuaXhCZWhhdmlvcik7Ci0K
LSAgICAgICAgcGFnZS0+c2V0dGluZ3MoKS0+c2V0RE9NUGFzdGVBbGxvd2VkKHRydWUpOwotICAg
ICAgICBwYWdlLT5zZXR0aW5ncygpLT5zZXRWYWxpZGF0aW9uTWVzc2FnZVRpbWVyTWFnbmlmaWNh
dGlvbigtMSk7Ci0gICAgICAgIHBhZ2UtPnNldHRpbmdzKCktPnNldEludGVyYWN0aXZlRm9ybVZh
bGlkYXRpb25FbmFibGVkKHRydWUpOwotICAgICAgICBwYWdlLT5zZXR0aW5ncygpLT5zZXRBbGxv
d0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7Ci0gICAgICAgIHBhZ2UtPnNldHRpbmdzKCkt
PnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKHRydWUpOwotICAgICAgICBwYWdl
LT5zZXR0aW5ncygpLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCh0cnVlKTsKLSAgICAg
ICAgcGFnZS0+c2V0dGluZ3MoKS0+c2V0VXNlUHJlSFRNTDVQYXJzZXJRdWlya3MoZmFsc2UpOwot
ICAgICAgICAvLyBGSVhNRTogT3RoZXIgcG9ydHMgYWxzbyBjbGVhciBoaXN0b3J5L2JhY2tGb3J3
YXJkTGlzdCBhbGxvbmcgd2l0aCB2aXNpdGVkIGxpbmtzLgotICAgICAgICBwYWdlLT5ncm91cCgp
LnJlbW92ZVZpc2l0ZWRMaW5rcygpOwotICAgICAgICBpZiAoKG1haW5GcmFtZSA9IHBhZ2UtPm1h
aW5GcmFtZSgpKSkgewotICAgICAgICAgICAgbWFpbkZyYW1lLT50cmVlKCktPmNsZWFyTmFtZSgp
OwotICAgICAgICAgICAgbWFpbkZyYW1lLT5sb2FkZXIoKS0+c2V0T3BlbmVyKDApOwotICAgICAg
ICAgICAgLy8gW1dlYktpdCBidWcgIzg2ODk5XSBSZXNldCBKUyBzdGF0ZSBzZXR0aW5ncy4KLSAg
ICAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSB0b0dsb2JhbFJlZihtYWlu
RnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29y
bGQoKSktPmdsb2JhbEV4ZWMoKSk7Ci0gICAgICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnJl
c2V0SW50ZXJuYWxzT2JqZWN0KGpzQ29udGV4dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBGb3Igbm93IHdlIG1hbnVhbGx5IGdhcmJhZ2UgY29sbGVjdCBiZXR3ZWVuIGVhY2ggdGVzdCB0
byBtYWtlIHN1cmUgdGhlIGRldmljZSB3b24ndCBydW4gb3V0IG9mIG1lbW9yeSBkdWUgdG8gbGF6
eSBjb2xsZWN0aW9uLgotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Z2FyYmFnZUNvbGxlY3Rv
ckNvbGxlY3QoKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6cnVuVGVzdHMoKQotewotICAg
IG1fZ2NDb250cm9sbGVyID0gbmV3IEdDQ29udHJvbGxlcigpOwotICAgIG1fYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIgPSBuZXcgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKLSAgICBpZiAoIWVu
c3VyZVBQUygpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gUFBT
IGZpbGUgJyVzJywgZXJyb3I9JWRcbiIsIGdldFBQU1BhdGgoKS5jX3N0cigpLCBlcnJubyk7Ci0g
ICAgICAgIChtX3BhZ2UtPmNsaWVudCgpKS0+bm90aWZ5UnVuTGF5b3V0VGVzdHNGaW5pc2hlZCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbWFpbkZyYW1lID0gRHVtcFJlbmRlclRy
ZWVTdXBwb3J0Ojpjb3JlUGFnZShtX3BhZ2UpLT5tYWluRnJhbWUoKTsKLQotICAgIGlmIChjb25z
dCBjaGFyKiB0ZXN0RmlsZSA9IGdldGVudigiZHJ0VGVzdEZpbGUiKSkgewotICAgICAgICBydW5G
cm9tQ29tbWFuZExpbmUgPSB0cnVlOwotICAgICAgICBhZGRUZXN0KHRlc3RGaWxlKTsKLSAgICB9
IGVsc2UgewotICAgICAgICAvLyBHZXQgVGVzdCBmaWxlIG5hbWUgZnJvbSBQUFM6IC9wcHMvc2Vy
dmljZXMvZHJ0L2lucHV0Ci0gICAgICAgIC8vIEV4YW1wbGU6IHRlc3RfZmlsZTo6anMvYXJndW1l
bnRzLmh0bWwKLSAgICAgICAgd2FpdEZvclRlc3QoKTsKLSAgICB9Ci19Ci0KLXZvaWQgRHVtcFJl
bmRlclRyZWU6OmFkZFRlc3QoY29uc3QgY2hhciogdGVzdEZpbGUpCi17Ci0gICAgU3RyaW5nIHRl
c3QodGVzdEZpbGUpOwotICAgIGlmICh0ZXN0ID09ICIjRE9ORSIpCi0gICAgICAgIGRvbmVEcnQo
KTsKLSAgICBlbHNlIGlmICghdGVzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1fdGVzdHMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBObyB0ZXN0IGlzIGJlaW5nIHJ1biwgaW5pdGlh
bGl6ZSBpdGVyYXRvciBhbmQgc3RhcnQgdGVzdAotICAgICAgICAgICAgbV90ZXN0cy5hcHBlbmQo
dGVzdCk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRUZXN0ID0gbV90ZXN0cy5iZWdpbigpOwotICAg
ICAgICAgICAgcnVuQ3VycmVudFRlc3QoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X2J1ZmZlcmVkVGVzdHMuYXBwZW5kKHRlc3QpOwotICAgIH0KLX0KLQotU3RyaW5nIER1bXBSZW5k
ZXJUcmVlOjpkdW1wRnJhbWVzQXNUZXh0KFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKLXsKLSAgICBT
dHJpbmcgczsKLSAgICBXZWJDb3JlOjpFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQgPSBmcmFtZS0+
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudEVsZW1lbnQp
Ci0gICAgICAgIHJldHVybiBzLnV0ZjgoKS5kYXRhKCk7Ci0KLSAgICBpZiAoZnJhbWUtPnRyZWUo
KS0+cGFyZW50KCkpCi0gICAgICAgIHMgPSBTdHJpbmc6OmZvcm1hdCgiXG4tLS0tLS0tLVxuRnJh
bWU6ICclcydcbi0tLS0tLS0tXG4iLCBmcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBzID0gcyArIGRvY3VtZW50RWxlbWVudC0+aW5uZXJU
ZXh0KCkgKyAiXG4iOwotCi0gICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQ2hpbGRGcmFtZXNBc1Rl
eHQoKSkgewotICAgICAgICBXZWJDb3JlOjpGcmFtZVRyZWUqIHRyZWUgPSBmcmFtZS0+dHJlZSgp
OwotICAgICAgICBmb3IgKFdlYkNvcmU6OkZyYW1lKiBjaGlsZCA9IHRyZWUtPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAg
ICAgIHMgPSBzICsgZHVtcEZyYW1lc0FzVGV4dChjaGlsZCk7Ci0gICAgfQotICAgIHJldHVybiBz
OwotfQotCi1zdGF0aWMgdm9pZCBkdW1wVG9GaWxlKGNvbnN0IFN0cmluZyYgZGF0YSkKLXsKLSAg
ICBmd3JpdGUoZGF0YS51dGY4KCkuZGF0YSgpLCAxLCBkYXRhLnV0ZjgoKS5sZW5ndGgoKSwgc3Rk
b3V0KTsKLX0KLQotYm9vbCBEdW1wUmVuZGVyVHJlZTo6aXNIVFRQVGVzdChjb25zdCBTdHJpbmcm
IHRlc3QpCi17Ci0gICAgaWYgKHRlc3QubGVuZ3RoKCkgPCBzdHJsZW4oaHR0cFRlc3RTeW50YXgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nIHRlc3RMb3dlciA9IHRlc3QubG93
ZXIoKTsKLSAgICBpbnQgbGVuSHR0cFRlc3RTeW50YXggPSBzdHJsZW4oaHR0cFRlc3RTeW50YXgp
OwotICAgIHJldHVybiB0ZXN0TG93ZXIuc3Vic3RyaW5nKDAsIGxlbkh0dHBUZXN0U3ludGF4KSA9
PSBodHRwVGVzdFN5bnRheAotICAgICAgICAmJiB0ZXN0TG93ZXIuc3Vic3RyaW5nKGxlbkh0dHBU
ZXN0U3ludGF4LCBzdHJsZW4obG9jYWxUZXN0U3ludGF4KSkgIT0gbG9jYWxUZXN0U3ludGF4Owot
fQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjppbnZhbGlkYXRlQW55UHJldmlvdXNXYWl0VG9EdW1w
V2F0Y2hkb2coKQotewotICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIuc3RvcCgpOwotICAg
IHdhaXRGb3JQb2xpY3kgPSBmYWxzZTsKLX0KLQotU3RyaW5nIER1bXBSZW5kZXJUcmVlOjpyZW5k
ZXJUcmVlRHVtcCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1haW5GcmFtZSkgewotICAgICAgICBpZiAo
bWFpbkZyYW1lLT52aWV3KCkgJiYgbWFpbkZyYW1lLT52aWV3KCktPmxheW91dFBlbmRpbmcoKSkK
LSAgICAgICAgICAgIG1haW5GcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKLQotICAgICAgICByZXR1
cm4gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtYWluRnJhbWUpOwotICAgIH0KLSAgICByZXR1cm4g
IiI7Ci19Ci0KLXN0YXRpYyBib29sIGhpc3RvcnlJdGVtQ29tcGFyZShjb25zdCBSZWZQdHI8V2Vi
Q29yZTo6SGlzdG9yeUl0ZW0+JiBhLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+
JiBiKQotewotICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEtPnVybFN0cmluZygpLCBiLT51
cmxTdHJpbmcoKSkgPCAwOwotfQotCi1zdGF0aWMgU3RyaW5nIGR1bXBIaXN0b3J5SXRlbShQYXNz
UmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBpdGVtLCBpbnQgaW5kZW50LCBib29sIGN1cnJl
bnQpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLQotICAgIGludCBzdGFydCA9IDA7Ci0gICAgaWYg
KGN1cnJlbnQpIHsKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgImN1cnItPiI7Ci0gICAgICAg
IHN0YXJ0ID0gNjsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgaW5kZW50OyBp
KyspCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICcgJzsKLQotICAgIFN0cmluZyB1cmwgPSBp
dGVtLT51cmxTdHJpbmcoKTsKLSAgICBpZiAodXJsLmNvbnRhaW5zKCJmaWxlOi8vIikpIHsKLSAg
ICAgICAgc3RhdGljIFN0cmluZyBsYXlvdXRUZXN0c1N0cmluZygiL0xheW91dFRlc3RzLyIpOwot
ICAgICAgICBzdGF0aWMgU3RyaW5nIGZpbGVUZXN0U3RyaW5nKCIoZmlsZSB0ZXN0KToiKTsKLQot
ICAgICAgICBTdHJpbmcgcmVzID0gdXJsLnN1YnN0cmluZyh1cmwuZmluZChsYXlvdXRUZXN0c1N0
cmluZykgKyBsYXlvdXRUZXN0c1N0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgIGlmIChyZXMuaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICByZXN1bHQgPSBy
ZXN1bHQgKyBmaWxlVGVzdFN0cmluZzsKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgcmVzOwot
ICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSByZXN1bHQgKyB1cmw7Ci0KLSAgICBTdHJpbmcg
dGFyZ2V0ID0gaXRlbS0+dGFyZ2V0KCk7Ci0gICAgaWYgKCF0YXJnZXQuaXNFbXB0eSgpKQotICAg
ICAgICByZXN1bHQgPSByZXN1bHQgKyAiIChpbiBmcmFtZSBcIiIgKyB0YXJnZXQgKyAiXCIpIjsK
LQotICAgIGlmIChpdGVtLT5pc1RhcmdldEl0ZW0oKSkKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0
ICsgIiAgKipuYXYgdGFyZ2V0KioiOwotICAgIHJlc3VsdCA9IHJlc3VsdCArICdcbic7Ci0KLSAg
ICBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3RvciBjaGlsZHJlbiA9IGl0ZW0tPmNoaWxkcmVuKCk7
Ci0gICAgLy8gTXVzdCBzb3J0IHRvIGVsaW1pbmF0ZSBhcmJpdHJhcnkgcmVzdWx0IG9yZGVyaW5n
IHdoaWNoIGRlZmVhdHMgcmVwcm9kdWNpYmxlIHRlc3RpbmcuCi0gICAgbm9uQ29weWluZ1NvcnQo
Y2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCksIGhpc3RvcnlJdGVtQ29tcGFyZSk7Ci0g
ICAgdW5zaWduZWQgcmVzdWx0U2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVzdWx0U2l6ZTsgKytpKQotICAgICAgICByZXN1bHQgPSByZXN1bHQg
KyBkdW1wSGlzdG9yeUl0ZW0oY2hpbGRyZW5baV0sIGluZGVudCArIDQsIGZhbHNlKTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZHVtcEJhY2tGb3J3YXJkTGlzdEZv
cldlYlZpZXcoKQotewotICAgIFN0cmluZyByZXN1bHQgPSAiXG49PT09PT09PT09PT09PSBCYWNr
IEZvcndhcmQgTGlzdCA9PT09PT09PT09PT09PVxuIjsKLSAgICAvLyBGT1JNQVQ6Ci0gICAgLy8g
IiAgICAgICAgKGZpbGUgdGVzdCk6ZmFzdC9sb2FkZXIvcmVzb3VyY2VzL2NsaWNrLWZyYWdtZW50
LWxpbmsuaHRtbCAgKipuYXYgdGFyZ2V0KioiCi0gICAgLy8gImN1cnItPiAgKGZpbGUgdGVzdCk6
ZmFzdC9sb2FkZXIvcmVzb3VyY2VzL2NsaWNrLWZyYWdtZW50LWxpbmsuaHRtbCN0ZXN0ZnJhZ21l
bnQgICoqbmF2IHRhcmdldCoqIgotICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEJsYWNrQmVy
cnkqIGJmTGlzdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEJsYWNrQmVy
cnkqPihtYWluRnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y2xpZW50KCkpOwotCi0gICAg
aW50IG1heEl0ZW1zID0gYmZMaXN0LT5jYXBhY2l0eSgpOwotICAgIFdlYkNvcmU6Okhpc3RvcnlJ
dGVtVmVjdG9yIGVudHJpZXM7Ci0gICAgYmZMaXN0LT5iYWNrTGlzdFdpdGhMaW1pdChtYXhJdGVt
cywgZW50cmllcyk7Ci0gICAgdW5zaWduZWQgcmVzdWx0U2l6ZSA9IGVudHJpZXMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRTaXplOyArK2kpCi0gICAgICAgIHJl
c3VsdCA9IHJlc3VsdCArIGR1bXBIaXN0b3J5SXRlbShlbnRyaWVzW2ldLCA4LCBmYWxzZSk7Ci0K
LSAgICByZXN1bHQgPSByZXN1bHQgKyBkdW1wSGlzdG9yeUl0ZW0oYmZMaXN0LT5jdXJyZW50SXRl
bSgpLCA4LCB0cnVlKTsKLQotICAgIGJmTGlzdC0+Zm9yd2FyZExpc3RXaXRoTGltaXQobWF4SXRl
bXMsIGVudHJpZXMpOwotICAgIHJlc3VsdFNpemUgPSBlbnRyaWVzLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0U2l6ZTsgKytpKQotICAgICAgICByZXN1bHQgPSBy
ZXN1bHQgKyBkdW1wSGlzdG9yeUl0ZW0oZW50cmllc1tpXSwgOCwgZmFsc2UpOwotCi0gICAgcmVz
dWx0ID0gcmVzdWx0ICsgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PVxuIjsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRy
ZWU6OmR1bXAoKQotewotICAgIGlmICh0ZXN0RG9uZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aW52YWxpZGF0ZUFueVByZXZpb3VzV2FpdFRvRHVtcFdhdGNoZG9nKCk7Ci0KLSAgICBTdHJpbmcg
ZHVtcEZpbGUgPSBtX3Jlc3VsdHNEaXIgKyAqbV9jdXJyZW50VGVzdCArICIuZHVtcCI7Ci0KLSAg
ICBTdHJpbmcgcmVzdWx0TWltZVR5cGUgPSAidGV4dC9wbGFpbiI7Ci0gICAgU3RyaW5nIHJlc3Bv
bnNlTWltZVR5cGUgPSBtYWluRnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNw
b25zZU1JTUVUeXBlKCk7Ci0KLSAgICBib29sIGR1bXBBc1RleHQgPSBnVGVzdFJ1bm5lci0+ZHVt
cEFzVGV4dCgpIHx8IHJlc3BvbnNlTWltZVR5cGUgPT0gInRleHQvcGxhaW4iOwotICAgIFN0cmlu
ZyBkYXRhID0gZHVtcEFzVGV4dCA/IGR1bXBGcmFtZXNBc1RleHQobWFpbkZyYW1lKSA6IHJlbmRl
clRyZWVEdW1wKCk7Ci0KLSAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBCYWNrRm9yd2FyZExpc3Qo
KSkKLSAgICAgICAgZGF0YSA9IGRhdGEgKyBkdW1wQmFja0ZvcndhcmRMaXN0Rm9yV2ViVmlldygp
OwotCi0gICAgU3RyaW5nIHJlc3VsdCA9ICJDb250ZW50LVR5cGU6ICIgKyByZXN1bHRNaW1lVHlw
ZSArICJcbiIgKyBkYXRhOwotCi0gICAgZHVtcFRvRmlsZShyZXN1bHQpOwotCi0gICAgaWYgKCFy
dW5Gcm9tQ29tbWFuZExpbmUpIHsKLSAgICAgICAgLy8gVGhlcmUgYXJlIHR3byBzY2VuYXJpb3Mg
Zm9yIGR1bXBpbmcgcGl4ZWxzOgotICAgICAgICAvLyAxLiBXaGVuIHRoZSB0ZXN0IGNhc2UgZXhw
bGljaXRseSBhc2tzIGZvciBpdCBieSBjYWxsaW5nIGR1bXBBc1RleHQodHJ1ZSkgd2l0aCB0aGF0
IGV4dHJhIHRydWUgcGFzc2VkIGFzIGEgcGFyYW1ldGVyIHZhbHVlLCBmcm9tIEphdmFTY3JpcHQK
LSAgICAgICAgYm9vbCBleHBsaWNpdFBpeGVsUmVzdWx0cyA9IGdUZXN0UnVubmVyLT5kdW1wQXNU
ZXh0KCkgJiYgZ1Rlc3RSdW5uZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCk7Ci0gICAgICAgIC8v
IDIuIFdoZW4gdGhlIHRlc3QgY2FzZSBpbXBsaWNpdGx5IGFsbG93cyBpdCBieSBub3QgY2FsbGlu
ZyBkdW1wQXNUZXh0KCkgYXQgYWxsICh3aXRoIG5vIHBhcmFtZXRlcnMpLgotICAgICAgICBib29s
IGltcGxpY2l0UGl4ZWxSZXN1bHRzID0gIWdUZXN0UnVubmVyLT5kdW1wQXNUZXh0KCk7Ci0KLSAg
ICAgICAgLy8gQnV0IG9ubHkgaWYgbV9lbmFibGVQaXhlbFRlc3RzIGlzIHNldCwgdG8gc2F5IHRo
YXQgdGhlIHVzZXIgd2FudHMgdG8gcnVuIHBpeGVsIHRlc3RzIGF0IGFsbC4KLSAgICAgICAgYm9v
bCBnZW5lcmF0ZVBpeGVsUmVzdWx0cyA9IG1fZW5hYmxlUGl4ZWxUZXN0cyAmJiAoZXhwbGljaXRQ
aXhlbFJlc3VsdHMgfHwgaW1wbGljaXRQaXhlbFJlc3VsdHMpOwotICAgICAgICBpZiAoZ2VuZXJh
dGVQaXhlbFJlc3VsdHMpIHsKLSAgICAgICAgICAgIC8vIHNpZ25hbCBlbmQgb2YgdGV4dCBibG9j
awotICAgICAgICAgICAgZnB1dHMoIiNFT0ZcbiIsIHN0ZG91dCk7Ci0gICAgICAgICAgICBkdW1w
V2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChnVGVzdFJ1bm5lci0+ZXhwZWN0
ZWRQaXhlbEhhc2goKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgY3Jhc2hGaWxlID0g
ZHVtcEZpbGUgKyAiLmNyYXNoIjsKLSAgICAgICAgdW5saW5rKGNyYXNoRmlsZS51dGY4KCkuZGF0
YSgpKTsKLQotICAgICAgICBTdHJpbmcgZG9uZUZpbGUgPSAgbV9yZXN1bHRzRGlyICsgKm1fY3Vy
cmVudFRlc3QgKyAiLmRvbmUiOwotICAgICAgICBjcmVhdGVGaWxlKGRvbmVGaWxlKTsKLSAgICB9
Ci0gICAgdGVzdERvbmUgPSB0cnVlOwotICAgIHJ1blJlbWFpbmluZ1Rlc3RzKCk7Ci19Ci0KLXZv
aWQgRHVtcFJlbmRlclRyZWU6OnNldFdhaXRUb0R1bXBXYXRjaGRvZyhkb3VibGUgaW50ZXJ2YWwp
Ci17Ci0gICAgaW52YWxpZGF0ZUFueVByZXZpb3VzV2FpdFRvRHVtcFdhdGNoZG9nKCk7Ci0gICAg
bV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3QoaW50ZXJ2YWwpOwotfQotCi12
b2lkIER1bXBSZW5kZXJUcmVlOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKFdlYkNvcmU6
OlRpbWVyPER1bXBSZW5kZXJUcmVlPiopCi17Ci0gICAgZ1Rlc3RSdW5uZXItPndhaXRUb0R1bXBX
YXRjaGRvZ1RpbWVyRmlyZWQoKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6cHJvY2Vzc1dv
cmsoV2ViQ29yZTo6VGltZXI8RHVtcFJlbmRlclRyZWU+KikKLXsKLSAgICBpZiAodG9wTG9hZGlu
Z0ZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+
cHJvY2Vzc1dvcmsoKSAmJiAhZ1Rlc3RSdW5uZXItPndhaXRUb0R1bXAoKSkKLSAgICAgICAgZHVt
cCgpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpsb2NhdGlvbkNoYW5nZUZvckZyYW1lKFdl
YkNvcmU6OkZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAoZnJhbWUgIT0gdG9wTG9hZGluZ0ZyYW1l
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwotICAgIFdvcmtR
dWV1ZTo6c2hhcmVkKCktPnNldEZyb3plbih0cnVlKTsgLy8gZmlyc3QgY29tcGxldGUgbG9hZCBm
cmVlemVzIHRoZSBxdWV1ZQotICAgIGlmIChnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKLSAg
ICAgICAgbV93b3JrVGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgIGVsc2UKLSAgICAgICAgZHVt
cCgpOwotfQotCi0vLyBGcmFtZUxvYWRDbGllbnQgZGVsZWdhdGVzLgotYm9vbCBEdW1wUmVuZGVy
VHJlZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lLCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCi17Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiAoZ1Rlc3RS
dW5uZXItPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkgfHwgKGdUZXN0UnVubmVyLT53aWxs
U2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSAmJiAhcmVkaXJlY3RSZXNwb25zZS5p
c051bGwoKSkpKSB7Ci0gICAgICAgIHJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qo
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdl
YkNvcmU6OkZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVy
LT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiJXMgLSBkaWRTdGFy
dFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lXG4iLCBkcnRGcmFtZURlc2NyaXB0aW9uKGZyYW1lKS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBV
c2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiRnJhbWUg
d2l0aCB1c2VyIGdlc3R1cmUgXCIlc1wiIC0gaW4gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JG
cmFtZVxuIiwgV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLQotICAgIGlmICghdG9wTG9hZGluZ0ZyYW1lICYmICF0
ZXN0RG9uZSkKLSAgICAgICAgdG9wTG9hZGluZ0ZyYW1lID0gZnJhbWU7Ci0KLSAgICBpZiAoIXRl
c3REb25lICYmIGdUZXN0UnVubmVyLT5zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkpIHsKLSAg
ICAgICAgcHJpbnRmKCIlcyAtIHN0b3BwaW5nIGxvYWQgaW4gZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZSBjYWxsYmFja1xuIiwgZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFtZSkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3RvcEZvclVzZXJDYW5jZWwoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZENvbW1pdExvYWRGb3JGcmFtZShX
ZWJDb3JlOjpGcmFtZSogZnJhbWUpCi17Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5l
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIiVzIC0gZGlkQ29t
bWl0TG9hZEZvckZyYW1lXG4iLCBkcnRGcmFtZURlc2NyaXB0aW9uKGZyYW1lKS51dGY4KCkuZGF0
YSgpKTsKLQotICAgIGdUZXN0UnVubmVyLT5zZXRXaW5kb3dJc0tleSh0cnVlKTsKLX0KLQotdm9p
ZCBEdW1wUmVuZGVyVHJlZTo6ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYkNvcmU6
OkZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiJXMgLSBkaWRGYWlsUHJvdmlz
aW9uYWxMb2FkV2l0aEVycm9yXG4iLCBkcnRGcmFtZURlc2NyaXB0aW9uKGZyYW1lKS51dGY4KCku
ZGF0YSgpKTsKLQotICAgIGxvY2F0aW9uQ2hhbmdlRm9yRnJhbWUoZnJhbWUpOwotfQotCi12b2lk
IER1bXBSZW5kZXJUcmVlOjpkaWRGYWlsTG9hZEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFt
ZSkKLXsKLSAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiJXMgLSBkaWRGYWlsTG9hZFdpdGhFcnJvclxuIiwg
ZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFtZSkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBsb2NhdGlv
bkNoYW5nZUZvckZyYW1lKGZyYW1lKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkRmlu
aXNoTG9hZEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAoIXRlc3RE
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIHBy
aW50ZigiJXMgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWVcbiIsIGRydEZyYW1lRGVzY3JpcHRpb24o
ZnJhbWUpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYgKGZyYW1lID09IHRvcExvYWRpbmdGcmFt
ZSkgewotICAgICAgICBtX2xvYWRGaW5pc2hlZCA9IHRydWU7Ci0gICAgICAgIGxvY2F0aW9uQ2hh
bmdlRm9yRnJhbWUoZnJhbWUpOwotICAgIH0KLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlk
RmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQotewotICAg
IGlmICghdGVzdERvbmUpIHsKLSAgICAgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpCi0gICAgICAgICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yRnJhbWVcbiIsIGRydEZyYW1lRGVzY3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHBlbmRpbmdGcmFtZVVubG9h
ZEV2ZW50cyA9IGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cGVuZGluZ1VubG9hZEV2
ZW50TGlzdGVuZXJzKCk7Ci0gICAgICAgICAgICBpZiAocGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRz
KQotICAgICAgICAgICAgICAgIHByaW50ZigiJXMgLSBoYXMgJXUgb251bmxvYWQgaGFuZGxlcihz
KVxuIiwgZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFtZSkudXRmOCgpLmRhdGEoKSwgcGVuZGluZ0Zy
YW1lVW5sb2FkRXZlbnRzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBEdW1wUmVuZGVy
VHJlZTo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3Js
ZCosIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3Qp
Ci17Ci0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotCi0gICAgZ1Rlc3RSdW5uZXItPm1h
a2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBB
U1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBtX2djQ29udHJvbGxlci0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0LCB3aW5kb3dPYmplY3QsICZleGNlcHRpb24pOwotICAgIEFTU0VSVCghZXhjZXB0
aW9uKTsKLQotICAgIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCwgd2luZG93T2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlv
bik7Ci0KLSAgICBKU1N0cmluZ1JlZiBldmVudFNlbmRlclN0ciA9IEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJldmVudFNlbmRlciIpOwotICAgIEpTVmFsdWVSZWYgZXZlbnRTZW5kZXIg
PSBtYWtlRXZlbnRTZW5kZXIoY29udGV4dCk7Ci0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250
ZXh0LCB3aW5kb3dPYmplY3QsIGV2ZW50U2VuZGVyU3RyLCBldmVudFNlbmRlciwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgMCk7
Ci0gICAgSlNTdHJpbmdSZWxlYXNlKGV2ZW50U2VuZGVyU3RyKTsKLSAgICBXZWJDb3JlVGVzdFN1
cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKLX0KLQotdm9pZCBEdW1wUmVu
ZGVyVHJlZTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoY29uc3QgU3RyaW5nJiB0aXRsZSwgV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lKQotewotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXIt
PmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCIlcyAtIGRpZFJlY2Vp
dmVUaXRsZTogJXNcbiIsIGRydEZyYW1lRGVzY3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCks
IHRpdGxlLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wVGl0bGVD
aGFuZ2VzKCkpCi0gICAgICAgIHByaW50ZigiVElUTEUgQ0hBTkdFRDogJXNcbiIsIHRpdGxlLnV0
ZjgoKS5kYXRhKCkpOwotfQotCi0vLyBDaHJvbWVDbGllbnQgZGVsZWdhdGVzLgotdm9pZCBEdW1w
UmVuZGVyVHJlZTo6YWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgcHJpbnRmKCJDT05TT0xF
IE1FU1NBR0U6ICIpOwotICAgIGlmIChsaW5lTnVtYmVyKQotICAgICAgICBwcmludGYoImxpbmUg
JWQ6ICIsIGxpbmVOdW1iZXIpOwotICAgIFN0cmluZyBuZXdNZXNzYWdlID0gbWVzc2FnZTsKLSAg
ICBpbnQgcG9zID0gbWVzc2FnZS5maW5kKCJmaWxlOi8vIik7Ci0gICAgaWYgKHBvcyA+PSAwKSB7
Ci0gICAgICAgIG5ld01lc3NhZ2UgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBwb3MpOwotICAgICAg
ICBTdHJpbmcgcmVtYWluaW5nID0gbWVzc2FnZS5zdWJzdHJpbmcocG9zKTsKLSAgICAgICAgU3Ry
aW5nIGZpbGVOYW1lOwotICAgICAgICBpbnQgaW5kZXhGaWxlID0gcmVtYWluaW5nLnJldmVyc2VG
aW5kKCcvJykgKyAxOwotICAgICAgICBpZiAoaW5kZXhGaWxlID4gMCAmJiB1bnNpZ25lZChpbmRl
eEZpbGUpIDwgcmVtYWluaW5nLmxlbmd0aCgpKQotICAgICAgICAgICAgZmlsZU5hbWUgPSByZW1h
aW5pbmcuc3Vic3RyaW5nKGluZGV4RmlsZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZp
bGVOYW1lID0gImZpbGU6IjsKLSAgICAgICAgbmV3TWVzc2FnZS5hcHBlbmQoZmlsZU5hbWUpOwot
ICAgIH0KLSAgICBwcmludGYoIiVzXG4iLCBuZXdNZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotfQot
Ci12b2lkIER1bXBSZW5kZXJUcmVlOjpydW5KYXZhU2NyaXB0QWxlcnQoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIGlmICghdGVzdERvbmUpCi0gICAgICAgIHByaW50ZigiQUxFUlQ6ICVz
XG4iLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1ib29sIER1bXBSZW5kZXJUcmVlOjpy
dW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCF0
ZXN0RG9uZSkKLSAgICAgICAgcHJpbnRmKCJDT05GSVJNOiAlc1xuIiwgbWVzc2FnZS51dGY4KCku
ZGF0YSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU3RyaW5nIER1bXBSZW5kZXJUcmVlOjpy
dW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBk
ZWZhdWx0VmFsdWUpCi17Ci0gICAgaWYgKCF0ZXN0RG9uZSkKLSAgICAgICAgcHJpbnRmKCJQUk9N
UFQ6ICVzLCBkZWZhdWx0IHRleHQ6ICVzXG4iLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCksIGRlZmF1
bHRWYWx1ZS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotfQotCi1i
b29sIER1bXBSZW5kZXJUcmVlOjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQotewotICAgIGlmICghdGVzdERvbmUpCi0gICAgICAgIHByaW50ZigiQ09O
RklSTSBOQVZJR0FUSU9OOiAlc1xuIiwgbWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6c2V0U3RhdHVzVGV4dChjb25zdCBT
dHJpbmcmIHN0YXR1cykKLXsKLSAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBTdGF0dXNDYWxsYmFj
a3MoKSkKLSAgICAgICAgcHJpbnRmKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0
YXR1c1RleHQ6JXNcbiIsIHN0YXR1cy51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBEdW1wUmVu
ZGVyVHJlZTo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0
UnVubmVyLT5kdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCJVSSBERUxF
R0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlP
cmlnaW46eyVzLCAlcywgJWl9IGRhdGFiYXNlOiVzXG4iLCBvcmlnaW4tPnByb3RvY29sKCkudXRm
OCgpLmRhdGEoKSwgb3JpZ2luLT5ob3N0KCkudXRmOCgpLmRhdGEoKSwgb3JpZ2luLT5wb3J0KCks
IG5hbWUudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXImIG1h
bmFnZXIgPSBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKTsgCi0gICAgV2ViQ29y
ZTo6RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihuYW1l
LCBvcmlnaW4pOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UXVvdGEgPSA1ICogMTAy
NCAqIDEwMjQ7Ci0gICAgZG91YmxlIHRlc3REZWZhdWx0UXVvdGEgPSBnVGVzdFJ1bm5lci0+ZGF0
YWJhc2VEZWZhdWx0UXVvdGEoKTsKLSAgICBpZiAodGVzdERlZmF1bHRRdW90YSA+PSAwKQotICAg
ICAgICBkZWZhdWx0UXVvdGEgPSB0ZXN0RGVmYXVsdFF1b3RhOwotCi0gICAgdW5zaWduZWQgbG9u
ZyBsb25nIG5ld1F1b3RhID0gZGVmYXVsdFF1b3RhOwotCi0gICAgZG91YmxlIG1heFF1b3RhID0g
Z1Rlc3RSdW5uZXItPmRhdGFiYXNlTWF4UXVvdGEoKTsKLSAgICBpZiAobWF4UXVvdGEgPj0gMCkg
ewotICAgICAgICBpZiAoZGVmYXVsdFF1b3RhIDwgZXhwZWN0ZWRTaXplICYmIGV4cGVjdGVkU2l6
ZSA8PSBtYXhRdW90YSkgewotICAgICAgICAgICAgbmV3UXVvdGEgPSBleHBlY3RlZFNpemU7Ci0g
ICAgICAgICAgICBwcmludGYoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBpbmNyZWFz
ZWQgcXVvdGEgdG8gJWxsdVxuIiwgbmV3UXVvdGEpOwotICAgICAgICB9Ci0gICAgfQotICAgIG1h
bmFnZXIuc2V0UXVvdGEob3JpZ2luLCBuZXdRdW90YSk7Ci19Ci0KLWJvb2wgRHVtcFJlbmRlclRy
ZWU6OmFsbG93c09wZW5pbmdXaW5kb3coKQotewotICAgIHJldHVybiBnVGVzdFJ1bm5lci0+Y2Fu
T3BlbldpbmRvd3MoKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6d2luZG93Q3JlYXRlZChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2UqIHBhZ2UpCi17Ci0gICAgcGFnZS0+c2V0dGluZ3Mo
KS0+c2V0SmF2YVNjcmlwdE9wZW5XaW5kb3dzQXV0b21hdGljYWxseSh0cnVlKTsKLX0KLQotLy8g
RWRpdG9yQ2xpZW50IGRlbGVnYXRlcy4KLXZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZEJlZ2luRWRp
dGluZygpCi17Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
QmVnaW5FZGl0aW5nOiVzXG4iLCAiV2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvbiIp
OwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRFbmRFZGl0aW5nKCkKLXsKLSAgICBpZiAo
IXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAg
ICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRFbmRFZGl0aW5nOiVzXG4iLCAi
V2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRpb24iKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVy
VHJlZTo6ZGlkQ2hhbmdlKCkKLXsKLSAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5k
dW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2U6JXNcbiIsICJXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uIik7
Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZENoYW5nZVNlbGVjdGlvbigpCi17Ci0gICAg
aWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAg
ICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
OiVzXG4iLCAiV2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbiIpOwotfQotCi1i
b29sIER1bXBSZW5kZXJUcmVlOjpzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlKFdlYkNvcmU6
OlJhbmdlKiByYW5nZSkKLXsKLSAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1w
RWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNo
b3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6JXNcbiIsIGRydFJhbmdlRGVzY3JpcHRpb24ocmFu
Z2UpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBtX2FjY2VwdHNFZGl0aW5nOwotfQotCi1i
b29sIER1bXBSZW5kZXJUcmVlOjpzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZShXZWJDb3JlOjpS
YW5nZSogcmFuZ2UpCi17Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91
bGRFbmRFZGl0aW5nSW5ET01SYW5nZTolc1xuIiwgZHJ0UmFuZ2VEZXNjcmlwdGlvbihyYW5nZSku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIG1fYWNjZXB0c0VkaXRpbmc7Ci19Ci0KLWJvb2wg
RHVtcFJlbmRlclRyZWU6OnNob3VsZERlbGV0ZURPTVJhbmdlKFdlYkNvcmU6OlJhbmdlKiByYW5n
ZSkKLXsKLSAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxi
YWNrcygpKQotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERlbGV0ZURP
TVJhbmdlOiVzXG4iLCBkcnRSYW5nZURlc2NyaXB0aW9uKHJhbmdlKS51dGY4KCkuZGF0YSgpKTsK
LSAgICByZXR1cm4gbV9hY2NlcHRzRWRpdGluZzsKLX0KLQotYm9vbCBEdW1wUmVuZGVyVHJlZTo6
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZVRvRE9NUmFuZ2VBZmZpbml0eVN0aWxsU2VsZWN0
aW5nKFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiB0b1JhbmdlLCBp
bnQgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCi17Ci0gICAgaWYgKCF0ZXN0RG9uZSAm
JiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCJF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOiVzIHRvRE9NUmFu
Z2U6JXMgYWZmaW5pdHk6JXMgc3RpbGxTZWxlY3Rpbmc6JXNcbiIsIGRydFJhbmdlRGVzY3JpcHRp
b24oZnJvbVJhbmdlKS51dGY4KCkuZGF0YSgpLCBkcnRSYW5nZURlc2NyaXB0aW9uKHRvUmFuZ2Up
LnV0ZjgoKS5kYXRhKCksIGRydEFmZmluaXR5RGVzY3JpcHRpb24oc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6RUFmZmluaXR5PihhZmZpbml0eSkpLnV0ZjgoKS5kYXRhKCksIHN0aWxsU2VsZWN0aW5nID8g
IlRSVUUiIDogIkZBTFNFIik7Ci0gICAgcmV0dXJuIG1fYWNjZXB0c0VkaXRpbmc7Ci19Ci0KLXN0
YXRpYyBjb25zdCBjaGFyKiBpbnNlcnRBY3Rpb25TdHJpbmcoV2ViQ29yZTo6RWRpdG9ySW5zZXJ0
QWN0aW9uIGFjdGlvbikKLXsKLSAgICBzd2l0Y2ggKGFjdGlvbikgewotICAgIGNhc2UgV2ViQ29y
ZTo6RWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQ6Ci0gICAgICAgIHJldHVybiAiV2ViVmlld0luc2Vy
dEFjdGlvblR5cGVkIjsKLSAgICBjYXNlIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvblBhc3Rl
ZDoKLSAgICAgICAgcmV0dXJuICJXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkIjsKLSAgICBjYXNl
IFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbkRyb3BwZWQ6Ci0gICAgICAgIHJldHVybiAiV2Vi
Vmlld0luc2VydEFjdGlvbkRyb3BwZWQiOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gIldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZCI7Ci19Ci0KLWJvb2wgRHVt
cFJlbmRlclRyZWU6OnNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSogbm9kZSwgV2ViQ29y
ZTo6UmFuZ2UqIHJhbmdlLCBpbnQgYWN0aW9uKQotewotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rl
c3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiRURJVElO
RyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZTolcyByZXBsYWNpbmdET01SYW5nZTolcyBnaXZl
bkFjdGlvbjolc1xuIiwgZHJ0RHVtcFBhdGgobm9kZSkudXRmOCgpLmRhdGEoKSwgZHJ0UmFuZ2VE
ZXNjcmlwdGlvbihyYW5nZSkudXRmOCgpLmRhdGEoKSwgaW5zZXJ0QWN0aW9uU3RyaW5nKChXZWJD
b3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pYWN0aW9uKSk7Ci0gICAgcmV0dXJuIG1fYWNjZXB0c0Vk
aXRpbmc7Ci19Ci0KLWJvb2wgRHVtcFJlbmRlclRyZWU6OnNob3VsZEluc2VydFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBXZWJDb3JlOjpSYW5nZSogcmFuZ2UsIGludCBhY3Rpb24pCi17Ci0gICAg
aWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAg
ICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OiVzIHJlcGxh
Y2luZ0RPTVJhbmdlOiVzIGdpdmVuQWN0aW9uOiVzXG4iLCB0ZXh0LnV0ZjgoKS5kYXRhKCksIGRy
dFJhbmdlRGVzY3JpcHRpb24ocmFuZ2UpLnV0ZjgoKS5kYXRhKCksIGluc2VydEFjdGlvblN0cmlu
ZygoV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKWFjdGlvbikpOwotICAgIHJldHVybiBtX2Fj
Y2VwdHNFZGl0aW5nOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkaWREZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mIGFjdGlv
biwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUpCi17Ci0gICAgaWYgKHRlc3REb25lIHx8ICFtX3BvbGljeURlbGVnYXRlRW5hYmxl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgY2hhciogdHlwZURlc2NyaXB0aW9uOwot
ICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUoKSkgewotICAgIGNhc2UgV2ViQ29yZTo6TmF2aWdhdGlv
blR5cGVMaW5rQ2xpY2tlZDoKLSAgICAgICAgdHlwZURlc2NyaXB0aW9uID0gImxpbmsgY2xpY2tl
ZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViQ29yZTo6TmF2aWdhdGlvblR5cGVGb3Jt
U3VibWl0dGVkOgotICAgICAgICB0eXBlRGVzY3JpcHRpb24gPSAiZm9ybSBzdWJtaXR0ZWQiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlQmFja0Zvcndh
cmQ6Ci0gICAgICAgIHR5cGVEZXNjcmlwdGlvbiA9ICJiYWNrL2ZvcndhcmQiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlUmVsb2FkOgotICAgICAgICB0
eXBlRGVzY3JpcHRpb24gPSAicmVsb2FkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJD
b3JlOjpOYXZpZ2F0aW9uVHlwZUZvcm1SZXN1Ym1pdHRlZDoKLSAgICAgICAgdHlwZURlc2NyaXB0
aW9uID0gImZvcm0gcmVzdWJtaXR0ZWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYkNv
cmU6Ok5hdmlnYXRpb25UeXBlT3RoZXI6Ci0gICAgICAgIHR5cGVEZXNjcmlwdGlvbiA9ICJvdGhl
ciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHR5cGVEZXNjcmlwdGlv
biA9ICJpbGxlZ2FsIHZhbHVlIjsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZFdhaXRGb3JSZXNw
b25zZSA9ICFyZXF1ZXN0LnVybCgpLnN0cmluZygpLnN0YXJ0c1dpdGgoIm1haWx0bzoiKTsKLSAg
ICBwcmludGYoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICVzIHdpdGggbmF2aWdh
dGlvbiB0eXBlICclcyciLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHR5
cGVEZXNjcmlwdGlvbik7Ci0gICAgLy8gT3JpZ2luYXRpbmcgcGFydCwgYm9ycm93ZWQgZnJvbSBD
aHJvbWl1bS4KLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbm9kZTsKLSAgICBmb3IgKGNvbnN0
IFdlYkNvcmU6OkV2ZW50KiBldmVudCA9IGFjdGlvbi5ldmVudCgpOyBldmVudDsgZXZlbnQgPSBl
dmVudC0+dW5kZXJseWluZ0V2ZW50KCkpIHsKLSAgICAgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZl
bnQoKSkgewotICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6TW91c2VFdmVudCogbW91c2VFdmVu
dCA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6Ok1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAg
ICAgICAgICBub2RlID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2lu
dChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlKS5pbm5lck5vblNoYXJlZE5v
ZGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChub2Rl
LmdldCgpKQotICAgICAgICBwcmludGYoIiBvcmlnaW5hdGluZyBmcm9tICVzXG4iLCBkcnREdW1w
UGF0aChub2RlLmdldCgpKS51dGY4KCkuZGF0YSgpKTsKLSAgICBlbHNlCi0gICAgICAgIHByaW50
ZigiXG4iKTsKLQotICAgIGlmICh3YWl0Rm9yUG9saWN5ICYmICFzaG91bGRXYWl0Rm9yUmVzcG9u
c2UpCi0gICAgICAgIGdUZXN0UnVubmVyLT5ub3RpZnlEb25lKCk7Ci19Ci0KLXZvaWQgRHVtcFJl
bmRlclRyZWU6OmRpZERlY2lkZVBvbGljeUZvclJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIGlmICghdGVzdERvbmUgJiYgbV9wb2xpY3lE
ZWxlZ2F0ZUVuYWJsZWQpIHsKLSAgICAgICAgaWYgKFdlYkNvcmU6OmNvbnRlbnREaXNwb3NpdGlv
blR5cGUocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50LURpc3Bvc2l0aW9uIikpID09
IFdlYkNvcmU6OkNvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnQpCi0gICAgICAgICAgICBwcmlu
dGYoIlBvbGljeSBkZWxlZ2F0ZTogcmVzb3VyY2UgaXMgYW4gYXR0YWNobWVudCwgc3VnZ2VzdGVk
IGZpbGUgbmFtZSAnJXMnXG4iLCByZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZSgpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICBpZiAod2FpdEZvclBvbGljeSkKLSAgICAgICAgICAgIGdUZXN0UnVu
bmVyLT5ub3RpZnlEb25lKCk7Ci0gICAgfQotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRE
aXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoKQotewotICAgIGlmICghdGVzdERvbmUg
JiYgZ1Rlc3RSdW5uZXItPmR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0g
ICAgICAgIHByaW50ZigiRnJhbWUgd2l0aCB1c2VyIGdlc3R1cmUgXCIlc1wiIC0gaW4gd2lsbFBl
cmZvcm1DbGllbnRSZWRpcmVjdFxuIiwgV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLX0KLQotdm9pZCBEdW1wUmVu
ZGVyVHJlZTo6ZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZy
YW1lKQotewotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRD
YWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0Zv
ckZyYW1lXG4iLCBkcnRGcmFtZURlc2NyaXB0aW9uKGZyYW1lKS51dGY4KCkuZGF0YSgpKTsKLX0K
LQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yRnJhbWUoV2ViQ29y
ZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsK
LSAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VSZXNwb25zZU1J
TUVUeXBlcygpKQotICAgICAgICBwcmludGYoIiVzIGhhcyBNSU1FIHR5cGUgJXNcbiIsIHJlc3Bv
bnNlLnVybCgpLmxhc3RQYXRoQ29tcG9uZW50KCkudXRmOCgpLmRhdGEoKSwgcmVzcG9uc2UubWlt
ZVR5cGUoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotYm9vbCBEdW1wUmVuZGVyVHJlZTo6ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRp
YWwpCi17Ci0gICAgaWYgKCFnVGVzdFJ1bm5lci0+aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlcygpKSB7Ci0gICAgICAgIGNyZWRlbnRpYWwgPSBXZWJDb3JlOjpDcmVkZW50aWFsKCk7Ci0g
ICAgICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgLSBT
aW11bGF0aW5nIGNhbmNlbGxlZCBhdXRoZW50aWNhdGlvblxuIiwgZHJ0Q3JlZGVudGlhbERlc2Ny
aXB0aW9uKGNyZWRlbnRpYWwpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHVzZXIgPSBnVGVzdFJ1bm5lci0+YXV0aGVudGljYXRp
b25Vc2VybmFtZSgpLmNfc3RyKCk7Ci0gICAgY29uc3QgY2hhciogcGFzc3dvcmQgPSBnVGVzdFJ1
bm5lci0+YXV0aGVudGljYXRpb25QYXNzd29yZCgpLmNfc3RyKCk7Ci0gICAgY3JlZGVudGlhbCA9
IFdlYkNvcmU6OkNyZWRlbnRpYWwodXNlciwgcGFzc3dvcmQsIFdlYkNvcmU6OkNyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZUZvclNlc3Npb24pOwotICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgLSBSZXNwb25kaW5nIHdpdGggJXM6JXNcbiIsIGRydENyZWRlbnRp
YWxEZXNjcmlwdGlvbihjcmVkZW50aWFsKS51dGY4KCkuZGF0YSgpLCB1c2VyLCBwYXNzd29yZCk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6OnNldEN1c3RvbVBv
bGljeURlbGVnYXRlKGJvb2wgc2V0RGVsZWdhdGUsIGJvb2wgcGVybWlzc2l2ZSkKLXsKLSAgICBt
X3BvbGljeURlbGVnYXRlRW5hYmxlZCA9IHNldERlbGVnYXRlOwotICAgIG1fcG9saWN5RGVsZWdh
dGVJc1Blcm1pc3NpdmUgPSBwZXJtaXNzaXZlOwotfQotfQotfQotCi0vLyBTdGF0aWMgZHVtcCgp
IGZ1bmN0aW9uIHJlcXVpcmVkIGJ5IGNyb3NzLXBsYXRmb3JtIERSVCBjb2RlLgotdm9pZCBkdW1w
KCkKLXsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlKiBkdW1wZXIgPSBC
bGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKTsKLSAg
ICBpZiAoIWR1bXBlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZHVtcGVyLT5kdW1wKCk7Ci19
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBSZW5kZXJUcmVlQmxh
Y2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkv
RHVtcFJlbmRlclRyZWVCbGFja0JlcnJ5LmgJKHJldmlzaW9uIDE2MTYwNikKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvRHVtcFJlbmRlclRyZWVCbGFja0JlcnJ5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBEdW1wUmVuZGVyVHJlZUJsYWNr
QmVycnlfaAotI2RlZmluZSBEdW1wUmVuZGVyVHJlZUJsYWNrQmVycnlfaAotCi0jaW5jbHVkZSAi
QmxhY2tCZXJyeUdsb2JhbC5oIgotCi0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZUNsaWVudC5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTGF5b3V0
VGVzdC5oPgotI2luY2x1ZGUgPEZpbmRPcHRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBDcmVkZW50aWFsOwotY2xhc3MgRE9NV3JhcHBlcldvcmxkOwotY2xhc3MgRnJhbWU7
Ci1jbGFzcyBSYW5nZTsKLX0KLQotZXh0ZXJuIFdlYkNvcmU6OkZyYW1lKiBtYWluRnJhbWU7Ci1l
eHRlcm4gV2ViQ29yZTo6RnJhbWUqIHRvcExvYWRpbmdGcmFtZTsKLWV4dGVybiBib29sIHdhaXRG
b3JQb2xpY3k7Ci0KLWNsYXNzIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOwotY2xhc3MgR0NDb250
cm9sbGVyOwotCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLWNs
YXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIER1bXBSZW5kZXJUcmVlIDogcHVibGljIEJsYWNrQmVycnk6
OldlYktpdDo6RHVtcFJlbmRlclRyZWVDbGllbnQsIHB1YmxpYyBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6TGF5b3V0VGVzdENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgRHVtcFJlbmRlclRyZWUoV2ViUGFn
ZSopOwotICAgIHZpcnR1YWwgfkR1bXBSZW5kZXJUcmVlKCk7Ci0KLSAgICBzdGF0aWMgRHVtcFJl
bmRlclRyZWUqIGN1cnJlbnRJbnN0YW5jZSgpIHsgcmV0dXJuIHNfY3VycmVudEluc3RhbmNlOyB9
Ci0KLSAgICB2b2lkIGR1bXAoKTsKLQotICAgIHZvaWQgc2V0V2FpdFRvRHVtcFdhdGNoZG9nKGRv
dWJsZSBpbnRlcnZhbCk7Ci0KLSAgICBXZWJQYWdlKiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlOyB9
Ci0KLSAgICBib29sIGxvYWRGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZEZpbmlzaGVk
OyB9Ci0KLSAgICAvLyBGcmFtZUxvYWRlckNsaWVudCBkZWxlZ2F0ZXMKLSAgICBib29sIHdpbGxT
ZW5kUmVxdWVzdEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZvaWQgZGlkU3Rh
cnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotICAgIHZvaWQgZGlk
Q29tbWl0TG9hZEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKik7Ci0gICAgdm9pZCBkaWRGYWlsUHJv
dmlzaW9uYWxMb2FkRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqKTsKLSAgICB2b2lkIGRpZEZhaWxM
b2FkRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqKTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JG
cmFtZShXZWJDb3JlOjpGcmFtZSopOwotICAgIHZvaWQgZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9y
RnJhbWUoV2ViQ29yZTo6RnJhbWUqKTsKLSAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQqLCBKU0dsb2JhbENvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmIHdpbmRvd09iamVjdCk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZShj
b25zdCBTdHJpbmcmIHRpdGxlLCBXZWJDb3JlOjpGcmFtZSopOwotICAgIHZvaWQgZGlkRGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9u
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6RnJhbWUqKTsKLSAg
ICB2b2lkIGRpZERlY2lkZVBvbGljeUZvclJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZERpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVj
dCgpOwotICAgIHZvaWQgZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUoV2ViQ29yZTo6RnJh
bWUqKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1l
KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgIGJvb2wgcG9saWN5RGVs
ZWdhdGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9wb2xpY3lEZWxlZ2F0ZUVuYWJsZWQ7IH0K
LSAgICBib29sIHBvbGljeURlbGVnYXRlSXNQZXJtaXNzaXZlKCkgY29uc3QgeyByZXR1cm4gbV9w
b2xpY3lEZWxlZ2F0ZUlzUGVybWlzc2l2ZTsgfQotCi0gICAgLy8gQ2hyb21lQ2xpZW50IGRlbGVn
YXRlcwotICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOwotICAgIHZvaWQg
cnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgYm9vbCBydW5K
YXZhU2NyaXB0Q29uZmlybShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIFN0cmluZyBydW5K
YXZhU2NyaXB0UHJvbXB0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZh
dWx0VmFsdWUpOwotICAgIGJvb2wgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYpOwot
ICAgIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBib29sIGFsbG93c09wZW5pbmdXaW5kb3coKTsKLSAg
ICB2b2lkIHdpbmRvd0NyZWF0ZWQoV2ViUGFnZSopOwotCi0gICAgLy8gRWRpdG9yQ2xpZW50IGRl
bGVnYXRlcwotICAgIHZvaWQgc2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRpdGluZykg
eyBtX2FjY2VwdHNFZGl0aW5nID0gYWNjZXB0c0VkaXRpbmc7IH0KLQotICAgIHZvaWQgZGlkQmVn
aW5FZGl0aW5nKCk7Ci0gICAgdm9pZCBkaWRFbmRFZGl0aW5nKCk7Ci0gICAgdm9pZCBkaWRDaGFu
Z2UoKTsKLSAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbigpOwotICAgIGJvb2wgc2hvdWxkQmVn
aW5FZGl0aW5nSW5ET01SYW5nZShXZWJDb3JlOjpSYW5nZSopOwotICAgIGJvb2wgc2hvdWxkRW5k
RWRpdGluZ0luRE9NUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqKTsKLSAgICBib29sIHNob3VsZERlbGV0
ZURPTVJhbmdlKFdlYkNvcmU6OlJhbmdlKik7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rl
ZERPTVJhbmdlVG9ET01SYW5nZUFmZmluaXR5U3RpbGxTZWxlY3RpbmcoV2ViQ29yZTo6UmFuZ2Uq
IGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIGludCBhZmZpbml0eSwgYm9vbCBz
dGlsbFNlbGVjdGluZyk7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUq
LCBXZWJDb3JlOjpSYW5nZSosIGludCBpbnNlcnRBY3Rpb24pOwotICAgIGJvb2wgc2hvdWxkSW5z
ZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpSYW5nZSosIGludCBpbnNlcnRBY3Rpb24p
OwotCi0gICAgYm9vbCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViQ29yZTo6
Q3JlZGVudGlhbCYpOwotCi0gICAgLy8gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkJsYWNrQmVycnlQ
bGF0Zm9ybUxheW91dFRlc3RDbGllbnQgbWV0aG9kCi0gICAgdmlydHVhbCB2b2lkIGFkZFRlc3Qo
Y29uc3QgY2hhciogdGVzdEZpbGUpOwotICAgIHZvaWQgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUo
Ym9vbCBzZXREZWxlZ2F0ZSwgYm9vbCBwZXJtaXNzaXZlKTsKLXByaXZhdGU6Ci0gICAgdm9pZCBy
dW5UZXN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGltYWdlSGFzaCk7Ci0gICAg
dm9pZCBydW5UZXN0cygpOwotICAgIHZvaWQgcnVuQ3VycmVudFRlc3QoKTsKLQotICAgIHZvaWQg
cHJvY2Vzc1dvcmsoV2ViQ29yZTo6VGltZXI8RHVtcFJlbmRlclRyZWU+Kik7Ci0KLXByaXZhdGU6
Ci0gICAgc3RhdGljIER1bXBSZW5kZXJUcmVlKiBzX2N1cnJlbnRJbnN0YW5jZTsKLQotICAgIFN0
cmluZyBkdW1wRnJhbWVzQXNUZXh0KFdlYkNvcmU6OkZyYW1lKik7Ci0gICAgdm9pZCBsb2NhdGlv
bkNoYW5nZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKik7Ci0KLSAgICB2b2lkIGRvbmVEcnQoKTsK
LSAgICBib29sIGlzSFRUUFRlc3QoY29uc3QgU3RyaW5nJiB0ZXN0KTsKLSAgICBTdHJpbmcgcmVu
ZGVyVHJlZUR1bXAoKSBjb25zdDsKLSAgICB2b2lkIHJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZv
cmVUZXN0aW5nKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGltYWdlSGFzaCk7Ci0g
ICAgdm9pZCBydW5SZW1haW5pbmdUZXN0cygpOwotICAgIHZvaWQgaW52YWxpZGF0ZUFueVByZXZp
b3VzV2FpdFRvRHVtcFdhdGNoZG9nKCk7Ci0gICAgdm9pZCB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1l
ckZpcmVkKFdlYkNvcmU6OlRpbWVyPER1bXBSZW5kZXJUcmVlPiopOwotCi0gICAgVmVjdG9yPFN0
cmluZz4gbV90ZXN0czsKLSAgICBWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgbV9jdXJyZW50VGVz
dDsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX2J1ZmZlcmVkVGVzdHM7Ci0KLSAgICBTdHJpbmcgbV9y
ZXN1bHRzRGlyOwotICAgIFN0cmluZyBtX2RvbmVGaWxlOwotICAgIFN0cmluZyBtX2N1cnJlbnRI
dHRwVGVzdDsKLSAgICBTdHJpbmcgbV9jdXJyZW50VGVzdEZpbGU7Ci0KLSAgICBHQ0NvbnRyb2xs
ZXIqIG1fZ2NDb250cm9sbGVyOwotICAgIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBtX2FjY2Vz
c2liaWxpdHlDb250cm9sbGVyOwotICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAgICBib29sIG1fZW5h
YmxlUGl4ZWxUZXN0czsKLSAgICBXZWJDb3JlOjpUaW1lcjxEdW1wUmVuZGVyVHJlZT4gbV93YWl0
VG9EdW1wV2F0Y2hkb2dUaW1lcjsKLSAgICBXZWJDb3JlOjpUaW1lcjxEdW1wUmVuZGVyVHJlZT4g
bV93b3JrVGltZXI7Ci0KLSAgICBib29sIG1fYWNjZXB0c0VkaXRpbmc7Ci0gICAgYm9vbCBtX2xv
YWRGaW5pc2hlZDsKLSAgICBib29sIG1fcG9saWN5RGVsZWdhdGVFbmFibGVkOwotICAgIGJvb2wg
bV9wb2xpY3lEZWxlZ2F0ZUlzUGVybWlzc2l2ZTsKLX07Ci19Ci19Ci0KLSNlbmRpZiAvLyBEdW1w
UmVuZGVyVHJlZUJsYWNrQmVycnlfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2ti
ZXJyeS9FdmVudFNlbmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
YmxhY2tiZXJyeS9FdmVudFNlbmRlci5jcHAJKHJldmlzaW9uIDE2MTYwNikKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvRXZlbnRTZW5kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDQ1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBUb3JjaCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKLQotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVl
QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydC5oIgotI2luY2x1
ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJX
ZWJLaXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29yLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotCi0j
aW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgotI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybU1vdXNlRXZlbnQuaD4KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZv
cm1Ub3VjaEV2ZW50Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgSW50UG9pbnQgbGFzdE1vdXNlUG9zaXRpb247
Ci1zdGF0aWMgVmVjdG9yPEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaFBvaW50PiB0b3VjaGVz
Owotc3RhdGljIGJvb2wgdG91Y2hBY3RpdmUgPSBmYWxzZTsKLQotdm9pZCBzZW5kVG91Y2hFdmVu
dChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hFdmVudDo6VHlwZSk7Ci0KLS8vIENhbGxiYWNr
cwotCi1zdGF0aWMgSlNWYWx1ZVJlZiBnZXREcmFnTW9kZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotfQotCi1zdGF0aWMgYm9vbCBzZXREcmFnTW9kZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBtb3VzZVdoZWVsVG9DYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QsIGNv
bnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBK
U1ZhbHVlUmVmIGNvbnRleHRDbGlja0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVl
UmVmKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKLX0KLQotdm9pZCBzZXRNb3VzZUV2ZW50RG9jdW1lbnRQb3MoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06Ok1vdXNlRXZlbnQgJmV2ZW50LCBjb25zdCBCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYlBhZ2UqIHBhZ2UpCi17Ci0gICAgLy8gV2UgaGF2ZSBhZGRlZCBkb2N1bWVudCB2
aWV3cG9ydCBwb3NpdGlvbiBhbmQgZG9jdW1lbnQgY29udGVudCBwb3NpdGlvbiBhcyBtZW1iZXJz
IG9mIHRoZSBtb3VzZSBldmVudCwgd2hlbiB3ZSBjcmVhdGUgdGhlIGV2ZW50LCB3ZSBzaG91bGQg
aW5pdGlhbGl6ZSB0aGVtIGFzIHdlbGwuCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlZpZXdw
b3J0QWNjZXNzb3IqIHZpZXdwb3J0QWNjZXNzb3IgPSBwYWdlLT53ZWJraXRUaHJlYWRWaWV3cG9y
dEFjY2Vzc29yKCk7Ci0gICAgSW50UG9pbnQgZG9jdW1lbnRDb250ZW50UG9zID0gdmlld3BvcnRB
Y2Nlc3Nvci0+cm91bmRUb0RvY3VtZW50RnJvbVBpeGVsQ29udGVudHMoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkZsb2F0UG9pbnQodmlld3BvcnRBY2Nlc3Nvci0+cGl4ZWxDb250ZW50c0Zyb21WaWV3
cG9ydChsYXN0TW91c2VQb3NpdGlvbikpKTsKLSAgICBJbnRQb2ludCBkb2N1bWVudFZpZXdwb3J0
TW91c2VQb3MgPSB2aWV3cG9ydEFjY2Vzc29yLT5yb3VuZFRvRG9jdW1lbnRGcm9tUGl4ZWxDb250
ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRQb2ludChsYXN0TW91c2VQb3NpdGlvbikp
OwotICAgIGV2ZW50LnBvcHVsYXRlRG9jdW1lbnRQb3NpdGlvbihkb2N1bWVudFZpZXdwb3J0TW91
c2VQb3MsIGRvY3VtZW50Q29udGVudFBvcyk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG1vdXNl
RG93bkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RS
ZWYsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAgICBCbGFj
a0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2UqIHBhZ2UgPSBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBS
ZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpOwotICAgIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpNb3VzZUV2ZW50IGV2ZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNb3VzZUV2ZW50
OjpTY3JlZW5MZWZ0TW91c2VCdXR0b24sIDAsIGxhc3RNb3VzZVBvc2l0aW9uLCBJbnRQb2ludDo6
emVybygpLCAwLCAwLCAwKTsKLQotICAgIHNldE1vdXNlRXZlbnREb2N1bWVudFBvcyhldmVudCwg
cGFnZSk7Ci0KLSAgICBwYWdlLT5tb3VzZUV2ZW50KGV2ZW50KTsKLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG1vdXNlVXBD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBz
aXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCi17Ci0gICAgQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJQYWdlKiBwYWdlID0gQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVy
VHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6TW91c2VFdmVudCBldmVudCgwLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TW91c2VFdmVudDo6
U2NyZWVuTGVmdE1vdXNlQnV0dG9uLCBsYXN0TW91c2VQb3NpdGlvbiwgSW50UG9pbnQ6Onplcm8o
KSwgMCwgMCwgMCk7Ci0KLSAgICBzZXRNb3VzZUV2ZW50RG9jdW1lbnRQb3MoZXZlbnQsIHBhZ2Up
OwotCi0gICAgcGFnZS0+bW91c2VFdmVudChldmVudCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBtb3VzZU1vdmVUb0Nh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAyKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBpbnQgeCA9IHN0YXRp
Y19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0
aW9uKSk7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwotICAgIGludCB5
ID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFd
LCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7Ci0K
LSAgICBsYXN0TW91c2VQb3NpdGlvbiA9IEludFBvaW50KHgsIHkpOwotICAgIEJsYWNrQmVycnk6
OldlYktpdDo6V2ViUGFnZSogcGFnZSA9IEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRy
ZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCk7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
Ok1vdXNlRXZlbnQgZXZlbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1vdXNlRXZlbnQ6OlNjcmVl
bkxlZnRNb3VzZUJ1dHRvbiwgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1vdXNlRXZlbnQ6OlNjcmVl
bkxlZnRNb3VzZUJ1dHRvbiwgbGFzdE1vdXNlUG9zaXRpb24sIEludFBvaW50Ojp6ZXJvKCksIDAs
IDAsIDApOwotCi0gICAgc2V0TW91c2VFdmVudERvY3VtZW50UG9zKGV2ZW50LCBwYWdlKTsKLQot
ICAgIHBhZ2UtPm1vdXNlRXZlbnQoZXZlbnQpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBiZWdpbkRyYWdXaXRoRmls
ZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVm
LCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19
Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGxlYXBGb3J3YXJkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVm
W10sIEpTVmFsdWVSZWYqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBrZXlE
b3duQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJl
Ziwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTU3RyaW5n
UmVmIGNoYXJhY3RlciA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgdW5zaWduZWQgY2hh
ckNvZGUgPSAwOwotICAgIGJvb2wgbmVlZHNTaGlmdEtleU1vZGlmaWVyID0gZmFsc2U7Ci0gICAg
aWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAibGVmdEFycm93Iikp
Ci0gICAgICAgIGNoYXJDb2RlID0gS0VZQ09ERV9MRUZUOwotICAgIGVsc2UgaWYgKEpTU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAicmlnaHRBcnJvdyIpKQotICAgICAgICBj
aGFyQ29kZSA9IEtFWUNPREVfUklHSFQ7Ci0gICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJ1cEFycm93IikpCi0gICAgICAgIGNoYXJDb2RlID0gS0VZ
Q09ERV9VUDsKLSAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJh
Y3RlciwgImRvd25BcnJvdyIpKQotICAgICAgICBjaGFyQ29kZSA9IEtFWUNPREVfRE9XTjsKLSAg
ICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgInBhZ2VV
cCIpKQotICAgICAgICBjaGFyQ29kZSA9IEtFWUNPREVfUEdfVVA7Ci0gICAgZWxzZSBpZiAoSlNT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJwYWdlRG93biIpKQotICAgICAg
ICBjaGFyQ29kZSA9IEtFWUNPREVfUEdfRE9XTjsKLSAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgImhvbWUiKSkKLSAgICAgICAgY2hhckNvZGUgPSBL
RVlDT0RFX0hPTUU7Ci0gICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhj
aGFyYWN0ZXIsICJlbmQiKSkKLSAgICAgICAgY2hhckNvZGUgPSBLRVlDT0RFX0VORDsKLSAgICBl
bHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgImRlbGV0ZSIp
KQotICAgICAgICBjaGFyQ29kZSA9IEtFWUNPREVfQkFDS1NQQUNFOwotICAgIGVsc2UgewotICAg
ICAgICBjaGFyQ29kZSA9IEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihjaGFyYWN0ZXIpWzBdOwot
ICAgICAgICBpZiAoMHg4ID09IGNoYXJDb2RlKQotICAgICAgICAgICAgY2hhckNvZGUgPSBLRVlD
T0RFX0JBQ0tTUEFDRTsKLSAgICAgICAgZWxzZSBpZiAoMHg3RiA9PSBjaGFyQ29kZSkKLSAgICAg
ICAgICAgIGNoYXJDb2RlID0gS0VZQ09ERV9ERUxFVEU7Ci0gICAgICAgIGVsc2UgaWYgKFdURjo6
aXNBU0NJSVVwcGVyKGNoYXJDb2RlKSkKLSAgICAgICAgICAgIG5lZWRzU2hpZnRLZXlNb2RpZmll
ciA9IHRydWU7Ci0gICAgfQotICAgIEpTU3RyaW5nUmVsZWFzZShjaGFyYWN0ZXIpOwotCi0gICAg
c3RhdGljIGNvbnN0IEpTU3RyaW5nUmVmIGxlbmd0aFByb3BlcnR5ID0gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOwotICAgIGJvb2wgbmVlZHNBbHRLZXlNb2RpZmllciA9
IGZhbHNlOwotICAgIGJvb2wgbmVlZHNDdHJsS2V5TW9kaWZpZXIgPSBmYWxzZTsKLSAgICBpZiAo
YXJndW1lbnRDb3VudCA+IDEpIHsKLSAgICAgICAgaWYgKEpTT2JqZWN0UmVmIG1vZGlmaWVyc0Fy
cmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgMCkpIHsKLSAgICAg
ICAgICAgIGludCBtb2RpZmllcnNDb3VudCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIG1vZGlmaWVyc0FycmF5LCBsZW5ndGhQcm9wZXJ0eSwg
MCksIDApOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtb2RpZmllcnNDb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBtb2Rp
ZmllcnNBcnJheSwgaSwgMCksIDApOwotICAgICAgICAgICAgICAgIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKHN0cmluZywgInNoaWZ0S2V5IikpCi0gICAgICAgICAgICAgICAgICAg
IG5lZWRzU2hpZnRLZXlNb2RpZmllciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
SlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdHJpbmcsICJhbHRLZXkiKSkKLSAgICAgICAg
ICAgICAgICAgICAgbmVlZHNBbHRLZXlNb2RpZmllciA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdHJpbmcsICJjdHJsS2V5Iikp
Ci0gICAgICAgICAgICAgICAgICAgIG5lZWRzQ3RybEtleU1vZGlmaWVyID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZSogcGFnZSA9IEJs
YWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdl
KCk7Ci0KLSAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOwotICAgIGlmIChuZWVkc1NoaWZ0S2V5
TW9kaWZpZXIpCi0gICAgICAgIG1vZGlmaWVycyB8PSBLRVlNT0RfU0hJRlQ7Ci0gICAgaWYgKG5l
ZWRzQWx0S2V5TW9kaWZpZXIpCi0gICAgICAgIG1vZGlmaWVycyB8PSBLRVlNT0RfQUxUOwotICAg
IGlmIChuZWVkc0N0cmxLZXlNb2RpZmllcikKLSAgICAgICAgbW9kaWZpZXJzIHw9IEtFWU1PRF9D
VFJMOwotCi0gICAgcGFnZS0+a2V5RXZlbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OktleWJvYXJk
RXZlbnQoY2hhckNvZGUsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpLZXlib2FyZEV2ZW50OjpLZXlE
b3duLCBtb2RpZmllcnMpKTsKLSAgICBwYWdlLT5rZXlFdmVudChCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6S2V5Ym9hcmRFdmVudChjaGFyQ29kZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OktleWJvYXJk
RXZlbnQ6OktleVVwLCBtb2RpZmllcnMpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgdGV4dFpvb21JbkNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCwg
Y29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGlj
IEpTVmFsdWVSZWYgdGV4dFpvb21PdXRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1
ZVJlZiopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHpvb21QYWdlSW5DYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXpl
X3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIHpvb21QYWdlT3V0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpT
VmFsdWVSZWYqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBhZGRUb3VjaFBv
aW50Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJl
Ziwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGludCB4ID0g
c3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBl
eGNlcHRpb24pKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7Ci0gICAg
aW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9u
KTsKLQotICAgIGludCBpZCA9IHRvdWNoZXMuaXNFbXB0eSgpID8gMCA6IHRvdWNoZXMubGFzdCgp
LmlkKCkgKyAxOwotCi0gICAgLy8gcGl4ZWxWaWV3cG9ydFBvc2l0aW9uIGlzIHVudXNlZCBpbiB0
aGUgV2ViS2l0IGxheWVyLCBzbyB1c2UgdGhpcyBmb3Igc2NyZWVuIHBvc2l0aW9uCi0gICAgSW50
UG9pbnQgcG9zKHgsIHkpOwotCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQg
dG91Y2goaWQsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaFBvaW50OjpUb3VjaFByZXNzZWQs
IHBvcywgcG9zLCAwKTsKLQotICAgIC8vIFVuZm9ydHVuYXRlbHkgd2UgZG9uJ3Qga25vdyB0aGUg
c2Nyb2xsIHBvc2l0aW9uIGF0IHRoaXMgcG9pbnQsIHNvIHVzZSBwb3MgZm9yIHRoZSBjb250ZW50
IHBvc2l0aW9uIHRvby4KLSAgICAvLyBUaGlzIGFzc3VtZXMgc2Nyb2xsIHBvc2l0aW9uIGlzIDAs
MAotICAgIHRvdWNoLnBvcHVsYXRlRG9jdW1lbnRQb3NpdGlvbihwb3MsIHBvcyk7Ci0KLSAgICB0
b3VjaGVzLmFwcGVuZCh0b3VjaCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHVwZGF0ZVRvdWNoUG9pbnRDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50IDwgMykKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgaW50IGluZGV4ID0gc3RhdGlj
X2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRp
b24pKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7Ci0gICAgaW50IHgg
PSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0s
IGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKLSAg
ICBpbnQgeSA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3Vt
ZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRp
b24pOwotCi0gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSAoaW50KXRvdWNoZXMuc2l6ZSgp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludCYgdG91Y2ggPSB0b3VjaGVzW2luZGV4XTsK
LQotICAgIC8vIHBpeGVsVmlld3BvcnRQb3NpdGlvbiBpcyB1bnVzZWQgaW4gdGhlIFdlYktpdCBs
YXllcgotICAgIEludFBvaW50IHBvcyh4LCB5KTsKLQotICAgIC8vIFVuZm9ydHVuYXRlbHkgd2Ug
ZG9uJ3Qga25vdyB0aGUgc2Nyb2xsIHBvc2l0aW9uIGF0IHRoaXMgcG9pbnQsIHNvIHVzZSBwb3Mg
Zm9yIHRoZSBjb250ZW50IHBvc2l0aW9uIHRvby4KLSAgICAvLyBUaGlzIGFzc3VtZXMgc2Nyb2xs
IHBvc2l0aW9uIGlzIDAsMAotICAgIHRvdWNoLnBvcHVsYXRlRG9jdW1lbnRQb3NpdGlvbihwb3Ms
IHBvcyk7Ci0gICAgdG91Y2guc2V0U2NyZWVuUG9zaXRpb24ocG9zKTsKLSAgICB0b3VjaC51cGRh
dGVTdGF0ZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludDo6VG91Y2hNb3ZlZCk7Ci0K
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBK
U1ZhbHVlUmVmIHNldFRvdWNoTW9kaWZpZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNW
YWx1ZVJlZiopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHRvdWNoU3RhcnRD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBz
aXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCi17Ci0gICAgaWYgKCF0b3Vj
aEFjdGl2ZSkgewotICAgICAgICBzZW5kVG91Y2hFdmVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
VG91Y2hFdmVudDo6VG91Y2hTdGFydCk7Ci0gICAgICAgIHRvdWNoQWN0aXZlID0gdHJ1ZTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgc2VuZFRvdWNoRXZlbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRv
dWNoRXZlbnQ6OlRvdWNoTW92ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiB0b3VjaENhbmNlbENhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCwgY29uc3Qg
SlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgdG91Y2hNb3ZlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
LCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqKQot
ewotICAgIHNlbmRUb3VjaEV2ZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaEV2ZW50OjpU
b3VjaE1vdmUpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0K
LQotc3RhdGljIEpTVmFsdWVSZWYgdG91Y2hFbmRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwg
SlNWYWx1ZVJlZiopCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdWNoZXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgIGlmICh0b3VjaGVzW2ldLnN0YXRlKCkgIT0gQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQpIHsKLSAgICAgICAgICAgIHNlbmRU
b3VjaEV2ZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaEV2ZW50OjpUb3VjaE1vdmUpOwot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgICAg
ICB9Ci0gICAgc2VuZFRvdWNoRXZlbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoRXZlbnQ6
OlRvdWNoRW5kKTsKLSAgICB0b3VjaEFjdGl2ZSA9IGZhbHNlOwotICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgY2xlYXJUb3Vj
aFBvaW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmpl
Y3RSZWYsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAgICB0
b3VjaGVzLmNsZWFyKCk7Ci0gICAgdG91Y2hBY3RpdmUgPSBmYWxzZTsKLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGNhbmNl
bFRvdWNoUG9pbnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpT
T2JqZWN0UmVmLCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHJlbGVhc2VUb3VjaFBvaW50Q2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGludCBpbmRleCA9IHN0YXRpY19j
YXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9u
KSk7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwotICAgIGlmIChpbmRl
eCA8IDAgfHwgaW5kZXggPj0gKGludCl0b3VjaGVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgdG91Y2hlc1tpbmRleF0udXBkYXRl
U3RhdGUoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQpOwot
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotdm9pZCBzZW5k
VG91Y2hFdmVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hFdmVudDo6VHlwZSB0eXBlKQot
ewotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaEV2ZW50IGV2ZW50OwotICAgIGV2ZW50
Lm1fdHlwZSA9IHR5cGU7Ci0gICAgZXZlbnQubV9wb2ludHMuYXNzaWduKHRvdWNoZXMuYmVnaW4o
KSwgdG91Y2hlcy5lbmQoKSk7Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJl
ZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+dG91Y2hFdmVudChldmVudCk7Ci0KLSAgICBW
ZWN0b3I8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQ+IHQ7Ci0KLSAgICBmb3IgKFZl
Y3RvcjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludD46Oml0ZXJhdG9yIGl0ID0gdG91
Y2hlcy5iZWdpbigpOyBpdCAhPSB0b3VjaGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChp
dC0+c3RhdGUoKSAhPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludDo6VG91Y2hSZWxl
YXNlZCkgewotICAgICAgICAgICAgaXQtPnVwZGF0ZVN0YXRlKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpUb3VjaFBvaW50OjpUb3VjaFN0YXRpb25hcnkpOwotICAgICAgICAgICAgdC5hcHBlbmQoKml0
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICB0b3VjaGVzID0gdDsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgc2NhbGVQYWdlQnlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENv
dW50IDwgMykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
Ci0gICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1l
bnRzWzBdLCBleGNlcHRpb24pOwotICAgIGZsb2F0IHggPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOwotICAgIGZsb2F0IHkgPSBKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pOwotCi0gICAgQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJQYWdlKiBwYWdlID0gQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJl
ZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydDo6c2NhbGVQYWdlQnkocGFnZSwgc2NhbGVGYWN0b3IsIHgsIHkpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNTdGF0aWNG
dW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKLSAgICB7ICJtb3VzZVdoZWVsVG8iLCBtb3Vz
ZVdoZWVsVG9DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgImNvbnRleHRDbGljayIsIGNvbnRleHRD
bGlja0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAibW91c2VEb3duIiwgbW91c2VEb3duQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKLSAgICB7ICJtb3VzZVVwIiwgbW91c2VVcENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0g
ICAgeyAibW91c2VNb3ZlVG8iLCBtb3VzZU1vdmVUb0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAi
YmVnaW5EcmFnV2l0aEZpbGVzIiwgYmVnaW5EcmFnV2l0aEZpbGVzQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
LSAgICB7ICJsZWFwRm9yd2FyZCIsIGxlYXBGb3J3YXJkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7
ICJrZXlEb3duIiwga2V5RG93bkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAidGV4dFpvb21JbiIs
IHRleHRab29tSW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgInRleHRab29tT3V0IiwgdGV4dFpv
b21PdXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgImFkZFRvdWNoUG9pbnQiLCBhZGRUb3VjaFBv
aW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJjYW5jZWxUb3VjaFBvaW50IiwgY2FuY2VsVG91
Y2hQb2ludENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAiY2xlYXJUb3VjaFBvaW50cyIsIGNsZWFy
VG91Y2hQb2ludHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgInJlbGVhc2VUb3VjaFBvaW50Iiwg
cmVsZWFzZVRvdWNoUG9pbnRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgInNjYWxlUGFnZUJ5Iiwg
c2NhbGVQYWdlQnlDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgInNldFRvdWNoTW9kaWZpZXIiLCBz
ZXRUb3VjaE1vZGlmaWVyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJ0b3VjaENhbmNlbCIsIHRv
dWNoQ2FuY2VsQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJ0b3VjaEVuZCIsIHRvdWNoRW5kQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKLSAgICB7ICJ0b3VjaE1vdmUiLCB0b3VjaE1vdmVDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAotICAgIHsgInRvdWNoU3RhcnQiLCB0b3VjaFN0YXJ0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAg
ICB7ICJ1cGRhdGVUb3VjaFBvaW50IiwgdXBkYXRlVG91Y2hQb2ludENhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
Ci0gICAgeyAiem9vbVBhZ2VJbiIsIHpvb21QYWdlSW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsg
Inpvb21QYWdlT3V0Iiwgem9vbVBhZ2VPdXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgMCwgMCwg
MCB9Ci19OwotCi1zdGF0aWMgSlNTdGF0aWNWYWx1ZSBzdGF0aWNWYWx1ZXNbXSA9IHsKLSAgICB7
ICJkcmFnTW9kZSIsIGdldERyYWdNb2RlQ2FsbGJhY2ssIHNldERyYWdNb2RlQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgIHsgMCwgMCwgMCwgMCB9Ci19OwotCi1zdGF0
aWMgSlNDbGFzc1JlZiBnZXRDbGFzcyhKU0NvbnRleHRSZWYpCi17Ci0gICAgc3RhdGljIEpTQ2xh
c3NSZWYgZXZlbnRTZW5kZXJDbGFzcyA9IDA7Ci0KLSAgICBpZiAoIWV2ZW50U2VuZGVyQ2xhc3Mp
IHsKLSAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZpbml0aW9uID0gewotICAgICAg
ICAgICAgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDB9OwotICAgICAgICBjbGFzc0RlZmluaXRpb24uc3RhdGljRnVuY3Rpb25zID0g
c3RhdGljRnVuY3Rpb25zOwotICAgICAgICBjbGFzc0RlZmluaXRpb24uc3RhdGljVmFsdWVzID0g
c3RhdGljVmFsdWVzOwotCi0gICAgICAgIGV2ZW50U2VuZGVyQ2xhc3MgPSBKU0NsYXNzQ3JlYXRl
KCZjbGFzc0RlZmluaXRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBldmVudFNlbmRlckNsYXNz
OwotfQotCi12b2lkIHJlcGxheVNhdmVkRXZlbnRzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi1KU09iamVjdFJlZiBtYWtlRXZlbnRTZW5kZXIoSlNDb250ZXh0UmVmIGNvbnRleHQp
Ci17Ci0gICAgcmV0dXJuIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRDbGFzcyhjb250ZXh0KSwg
MCk7Ci19Ci0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvRXZlbnRTZW5k
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0V2ZW50
U2VuZGVyLmgJKHJldmlzaW9uIDE2MTYwNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNr
YmVycnkvRXZlbnRTZW5kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyOSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIEV2
ZW50U2VuZGVyX2gKLSNkZWZpbmUgRXZlbnRTZW5kZXJfaAotCi10eXBlZGVmIGNvbnN0IHN0cnVj
dCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZUpT
VmFsdWUqIEpTT2JqZWN0UmVmOwotCi1KU09iamVjdFJlZiBtYWtlRXZlbnRTZW5kZXIoSlNDb250
ZXh0UmVmKTsKLXZvaWQgcmVwbGF5U2F2ZWRFdmVudHMoKTsKLQotI2VuZGlmCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0dDQ29udHJvbGxlckJsYWNrQmVycnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvR0NDb250cm9sbGVy
QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTYwNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2JsYWNrYmVycnkvR0NDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlL0dD
Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0LmgiCi0KLXZv
aWQgR0NDb250cm9sbGVyOjpjb2xsZWN0KCkgY29uc3QKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnQ6OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0KCk7Ci19Ci0KLXZvaWQgR0NDb250cm9sbGVy
Ojpjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKSBjb25zdAotewot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3RPbkFsdGVy
bmF0ZVRocmVhZCh3YWl0VW50aWxEb25lKTsKLX0KLQotc2l6ZV90IEdDQ29udHJvbGxlcjo6Z2V0
SlNPYmplY3RDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9y
dDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgpOwotfQotCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9ibGFja2JlcnJ5L1BOR0ltYWdlRW5jb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9QTkdJbWFnZUVuY29kZXIuY3BwCShyZXZpc2lvbiAx
NjE2MDYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1BOR0ltYWdlRW5jb2Rl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBD
b3B5cmlnaHQgMjAwNSBHb29nbGUgSW5jLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJQTkdJbWFnZUVuY29kZXIuaCIKLQotCi1leHRlcm4gIkMiIHsKLSNpbmNsdWRlICJw
bmcuaCIKLX0KLQotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotCi0vLyBUaGlzIGNvZGUg
aXMgYWxtb3N0IGEgbWlycm9yIG9mIHRoZSBjb2RlIGluIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCi0vLyBzaW5jZSB3ZSBjYW4ndCBpbmNs
dWRlIHRoaXMgcHJpdmF0ZSBXZWJDb3JlIGZpbGUgaW4gYSBXZWJLaXQtY2xpZW50IGFwcGxpY2F0
aW9uLgotCi0vLyBLZWVwIHRoZSBwcmVtdWx0aXBpZWQgZm9yIGFzIGl0IGlzIHRoZSBtb3N0IGZh
aXRoZnVsIGluZm9ybWF0aW9uCi1zdGF0aWMgdm9pZCBCR1JBdG9SR0JBKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGlucHV0LCBpbnQgbnVtYmVyT2ZQaXhlbHMsIHVuc2lnbmVkIGNoYXIqIG91dHB1dCkK
LXsKLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bWJlck9mUGl4ZWxzOyB4KyspIHsKLSAgICAg
ICAgb3V0cHV0WzBdID0gaW5wdXRbMl07Ci0gICAgICAgIG91dHB1dFsxXSA9IGlucHV0WzFdOwot
ICAgICAgICBvdXRwdXRbMl0gPSBpbnB1dFswXTsKLSAgICAgICAgb3V0cHV0WzNdID0gaW5wdXRb
M107Ci0gICAgICAgIGlucHV0ICs9IDQ7Ci0gICAgICAgIG91dHB1dCArPSA0OwotICAgIH0KLX0K
LQotLy8gUGFzc2VkIGFyb3VuZCBhcyB0aGUgaW9fcHRyIGluIHRoZSBwbmcgc3RydWN0cyBzbyBv
dXIgY2FsbGJhY2tzIGtub3cgd2hlcmUKLS8vIHRvIHdyaXRlIGRhdGEuCi1zdHJ1Y3QgUE5HRW5j
b2RlclN0YXRlIHsKLSAgICBQTkdFbmNvZGVyU3RhdGUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBv
KSA6IG1fb3V0KG8pIHsgfQotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogbV9vdXQ7Ci19Owot
Ci0vLyBDYWxsZWQgYnkgbGlicG5nIHRvIGZsdXNoIGl0cyBpbnRlcm5hbCBidWZmZXIgdG8gb3Vy
cy4KLXZvaWQgZW5jb2RlcldyaXRlQ2FsbGJhY2socG5nX3N0cnVjdHAgcG5nLCBwbmdfYnl0ZXAg
ZGF0YSwgcG5nX3NpemVfdCBzaXplKQotewotICAgIFBOR0VuY29kZXJTdGF0ZSogc3RhdGUgPSBz
dGF0aWNfY2FzdDxQTkdFbmNvZGVyU3RhdGUqPihwbmdfZ2V0X2lvX3B0cihwbmcpKTsKLSAgICBB
U1NFUlQoc3RhdGUtPm1fb3V0KTsKLQotICAgIHNpemVfdCBvbGRTaXplID0gc3RhdGUtPm1fb3V0
LT5zaXplKCk7Ci0gICAgc3RhdGUtPm1fb3V0LT5yZXNpemUob2xkU2l6ZSArIHNpemUpOwotICAg
IG1lbWNweSgmKCpzdGF0ZS0+bV9vdXQpW29sZFNpemVdLCBkYXRhLCBzaXplKTsKLX0KLQotLy8g
QXV0b21hdGljYWxseSBkZXN0cm95cyB0aGUgZ2l2ZW4gd3JpdGUgc3RydWN0cyBvbiBkZXN0cnVj
dGlvbiB0byBtYWtlCi0vLyBjbGVhbnVwIGFuZCBlcnJvciBoYW5kbGluZyBjb2RlIGNsZWFuZXIu
Ci1jbGFzcyBQTkdXcml0ZVN0cnVjdERlc3Ryb3llciB7Ci1wdWJsaWM6Ci0gICAgUE5HV3JpdGVT
dHJ1Y3REZXN0cm95ZXIocG5nX3N0cnVjdCoqIHBzLCBwbmdfaW5mbyoqIHBpKQotICAgICAgICA6
IG1fcG5nU3RydWN0KHBzKQotICAgICAgICAsIG1fcG5nSW5mbyhwaSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgflBOR1dyaXRlU3RydWN0RGVzdHJveWVyKCkKLSAgICB7Ci0gICAgICAgIHBuZ19kZXN0
cm95X3dyaXRlX3N0cnVjdChtX3BuZ1N0cnVjdCwgbV9wbmdJbmZvKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgcG5nX3N0cnVjdCoqIG1fcG5nU3RydWN0OwotICAgIHBuZ19pbmZvKiogbV9wbmdJ
bmZvOwotfTsKLQotdHlwZWRlZiB2b2lkICgqUGl4ZWxDb252ZXJzaW9uRnVuYykoY29uc3QgdW5z
aWduZWQgY2hhciosIGludCwgdW5zaWduZWQgY2hhciopOwotc3RhdGljIGJvb2wgZW5jb2RlSW1w
bChjb25zdCB1bnNpZ25lZCBjaGFyKiBpbnB1dCwgaW50IGltYWdlV2lkdGgsIGludCBpbWFnZUhl
aWdodCwgaW50IGJ5dGVzUGVyUm93LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCwgUGl4
ZWxDb252ZXJzaW9uRnVuYyBjb252ZXJzaW9uRnVuYykKLXsKLSAgICBpbnQgaW5wdXRDb2xvckNv
bXBvbmVudHMgPSA0OwotICAgIGludCBvdXRwdXRDb2xvckNvbXBvbmVudHMgPSA0OwotICAgIGlu
dCBwbmdPdXRwdXRDb2xvclR5cGUgPSBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEE7Ci0KLSAgICBp
ZiAoaW1hZ2VXaWR0aCA8IDApCi0gICAgICAgIGltYWdlV2lkdGggPSAwOwotCi0gICAgaWYgKGlt
YWdlSGVpZ2h0IDwgMCkKLSAgICAgICAgaW1hZ2VIZWlnaHQgPSAwOwotCi0gICAgLy8gUm93IHN0
cmlkZSBzaG91bGQgYmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRh
LgotICAgIGlmIChpbnB1dENvbG9yQ29tcG9uZW50cyAqIGltYWdlV2lkdGggPiBieXRlc1BlclJv
dykgewotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcG5nX3N0cnVjdCogcG5nUHRyID0gcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3QoUE5H
X0xJQlBOR19WRVJfU1RSSU5HLCAwLCAwLCAwKTsKLSAgICBpZiAoIXBuZ1B0cikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcG5nX2luZm8qIGluZm9QdHIgPSBwbmdfY3JlYXRlX2luZm9f
c3RydWN0KHBuZ1B0cik7Ci0gICAgaWYgKCFpbmZvUHRyKSB7Ci0gICAgICAgIHBuZ19kZXN0cm95
X3dyaXRlX3N0cnVjdCgmcG5nUHRyLCAwKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBQTkdXcml0ZVN0cnVjdERlc3Ryb3llciBkZXN0cm95ZXIoJnBuZ1B0ciwgJmluZm9QdHIp
OwotCi0gICAgaWYgKHNldGptcChwbmdfam1wYnVmKHBuZ1B0cikpKSB7Ci0gICAgICAgIC8vIFRo
ZSBkZXN0cm95ZXIgd2lsbCBlbnN1cmUgdGhhdCB0aGUgc3RydWN0dXJlcyBhcmUgY2xlYW5lZCB1
cCBpbiB0aGlzCi0gICAgICAgIC8vIGNhc2UsIGV2ZW4gdGhvdWdoIHdlIG1heSBnZXQgaGVyZSBh
cyBhIGp1bXAgZnJvbSByYW5kb20gcGFydHMgb2YgdGhlCi0gICAgICAgIC8vIFBORyBsaWJyYXJ5
IGNhbGxlZCBiZWxvdy4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFNl
dCBvdXIgY2FsbGJhY2sgZm9yIGxpYnBuZyB0byBnaXZlIHVzIHRoZSBkYXRhLgotICAgIFBOR0Vu
Y29kZXJTdGF0ZSBzdGF0ZShvdXRwdXQpOwotICAgIHBuZ19zZXRfd3JpdGVfZm4ocG5nUHRyLCAm
c3RhdGUsIGVuY29kZXJXcml0ZUNhbGxiYWNrLCAwKTsKLQotICAgIHBuZ19zZXRfSUhEUihwbmdQ
dHIsIGluZm9QdHIsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0LCA4LCBwbmdPdXRwdXRDb2xvclR5
cGUsCi0gICAgICAgIFBOR19JTlRFUkxBQ0VfTk9ORSwgUE5HX0NPTVBSRVNTSU9OX1RZUEVfREVG
QVVMVCwKLSAgICAgICAgUE5HX0ZJTFRFUl9UWVBFX0RFRkFVTFQpOwotICAgIHBuZ193cml0ZV9p
bmZvKHBuZ1B0ciwgaW5mb1B0cik7Ci0KLSAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBy
b3dQaXhlbHMgPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW2ltYWdlV2lkdGggKiBv
dXRwdXRDb2xvckNvbXBvbmVudHNdKTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdlSGVp
Z2h0OyB5ICsrKSB7Ci0gICAgICAgIGNvbnZlcnNpb25GdW5jKCZpbnB1dFt5ICogYnl0ZXNQZXJS
b3ddLCBpbWFnZVdpZHRoLCByb3dQaXhlbHMuZ2V0KCkpOwotICAgICAgICBwbmdfd3JpdGVfcm93
KHBuZ1B0ciwgcm93UGl4ZWxzLmdldCgpKTsKLSAgICB9Ci0KLSAgICBwbmdfd3JpdGVfZW5kKHBu
Z1B0ciwgaW5mb1B0cik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgZW5jb2RlQml0bWFw
VG9QTkcodW5zaWduZWQgY2hhciogZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBWZWN0b3I8
dW5zaWduZWQgY2hhcj4qIG91dHB1dCkKLXsKLSAgICBib29sIHJlc3VsdCA9IGVuY29kZUltcGwo
ZGF0YSwgd2lkdGgsIGhlaWdodCwgd2lkdGggKiA0LCBvdXRwdXQsIEJHUkF0b1JHQkEpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5
L1BOR0ltYWdlRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Js
YWNrYmVycnkvUE5HSW1hZ2VFbmNvZGVyLmgJKHJldmlzaW9uIDE2MTYwNikKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvUE5HSW1hZ2VFbmNvZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
LSAqLwotCi0jaWZuZGVmIFBOR0ltYWdlRW5jb2Rlcl9oCi0jZGVmaW5lIFBOR0ltYWdlRW5jb2Rl
cl9oCi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLWJvb2wgZW5jb2RlQml0bWFwVG9QTkco
dW5zaWduZWQgY2hhciogZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBXVEY6OlZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiogb3V0cHV0KTsKLQotI2VuZGlmIC8vIFBOR0ltYWdlRW5jb2Rlcl9oCklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1BpeGVsRHVtcFN1cHBvcnRCbGFj
a0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5
L1BpeGVsRHVtcFN1cHBvcnRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNjA2KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9QaXhlbER1bXBTdXBwb3J0QmxhY2tCZXJyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlBpeGVsRHVtcFN1cHBvcnRCbGFja0JlcnJ5LmgiCi0KLSNpbmNsdWRlICJCYWNraW5nU3RvcmUu
aCIKLSNpbmNsdWRlICJCbGFja0JlcnJ5UGxhdGZvcm1FeGVjdXRhYmxlTWVzc2FnZS5oIgotI2lu
Y2x1ZGUgIkJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmgiCi0jaW5jbHVkZSAiQmxhY2tCZXJy
eVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiQmxhY2tCZXJyeVBsYXRmb3Jt
R3JhcGhpY3NJbXBsLmgiCi0jaW5jbHVkZSAiQmxhY2tCZXJyeVBsYXRmb3JtTWVzc2FnZUNsaWVu
dC5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlQmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIlBO
R0ltYWdlRW5jb2Rlci5oIgotI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnQuaCIKLSNpbmNsdWRl
ICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUNsaWVudC5oIgotCi0jaW5jbHVkZSA8Qmxh
Y2tCZXJyeVBsYXRmb3JtV2luZG93Lmg+Ci0jaW5jbHVkZSA8d3RmL01ENS5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OldlYktpdDsKLXVz
aW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5OwotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotdm9pZCBy
ZWFkUGl4ZWxzVXNlckludGVyZmFjZVRocmVhZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6SW50UmVjdCYgc3JjUmVjdCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQotewotICAg
IGNvbnRleHQtPnJlYWRQaXhlbHMoc3JjUmVjdCwgcGl4ZWxzLCBmYWxzZSwgZmFsc2UpOwotfQot
Ci1QYXNzUmVmUHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0ZUJpdG1hcENvbnRleHRGcm9tV2ViVmll
dyhib29sIC8qb25zY3JlZW4qLywgYm9vbCAvKmluY3JlbWVudGFsUmVwYWludCovLCBib29sIC8q
c3dlZXBIb3Jpem9udGFsbHkqLywgYm9vbCAvKmRyYXdTZWxlY3Rpb25SZWN0Ki8pCi17Ci0gICAg
UGxhdGZvcm06OkdyYXBoaWNzOjpXaW5kb3cqIHdpbmRvdyA9IER1bXBSZW5kZXJUcmVlOjpjdXJy
ZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5jbGllbnQoKS0+d2luZG93KCk7Ci0gICAgQVNTRVJUKHdp
bmRvdyk7Ci0KLSAgICAvLyBUaGUgQmFja2luZ1N0b3JlIGhhcyBhIHF1ZXVlIG9mIHBlbmRpbmcg
am9icywgd2hpY2ggYXJlIHJ1biBvbiBpZGxlCi0gICAgLy8gYW5kIHdoaWNoIG1heSBub3QgaGF2
ZSBiZWVuIHJ1biB5ZXQuCi0gICAgQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBEdW1wUmVu
ZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+YmFja2luZ1N0b3JlKCk7Ci0gICAg
d2hpbGUgKGJhY2tpbmdTdG9yZS0+aGFzQmxpdEpvYnMoKSkKLSAgICAgICAgYmFja2luZ1N0b3Jl
LT5ibGl0T25JZGxlKCk7Ci0KLSAgICBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgd2luZG93UmVj
dCA9IHdpbmRvdy0+dmlld3BvcnRSZWN0KCk7Ci0gICAgY29uc3QgUGxhdGZvcm06OkludFNpemUm
IHdpbmRvd1NpemUgPSB3aW5kb3ctPnZpZXdwb3J0U2l6ZSgpOwotICAgIHVuc2lnbmVkIGNoYXIq
IGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhclt3aW5kb3dTaXplLndpZHRoKCkgKiB3aW5kb3dTaXpl
LmhlaWdodCgpICogNF07Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1
ZmZlciogYnVmZmVyID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpjcmVhdGVCdWZm
ZXIod2luZG93U2l6ZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpBbHdheXNCYWNr
ZWQpOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6RHJhd2FibGUqIGRyYXdh
YmxlID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpsb2NrQnVmZmVyRHJhd2FibGUo
YnVmZmVyKTsKLSAgICBpZiAoZHJhd2FibGUpIHsKLSAgICAgICAgYmFja2luZ1N0b3JlLT5kcmF3
Q29udGVudHMoZHJhd2FibGUsIHdpbmRvd1JlY3QsIHdpbmRvd1NpemUpOwotICAgICAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRocmVhZE1lc3NhZ2VDbGllbnQoKS0+ZGlz
cGF0Y2hTeW5jTWVzc2FnZSgKLSAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVh
dGVGdW5jdGlvbkNhbGxNZXNzYWdlKCZyZWFkUGl4ZWxzVXNlckludGVyZmFjZVRocmVhZCwgZHJh
d2FibGUsIHdpbmRvd1JlY3QsIGRhdGEpKTsKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpyZWxlYXNlQnVmZmVyRHJhd2FibGUoYnVmZmVyKTsKLSAgICB9Ci0gICAgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpkZXN0cm95QnVmZmVyKGJ1ZmZlcik7Ci0gICAg
cmV0dXJuIEJpdG1hcENvbnRleHQ6OmNyZWF0ZUJ5QWRvcHRpbmdEYXRhKGRhdGEsIHdpbmRvd1Np
emUud2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQgY29tcHV0ZU1ENUhh
c2hTdHJpbmdGb3JCaXRtYXBDb250ZXh0KEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNoYXIgaGFz
aFN0cmluZ1szM10pCi17Ci0gICAgaW50IHBpeGVsc1dpZGUgPSBjb250ZXh0LT5tX3dpZHRoOwot
ICAgIGludCBwaXhlbHNIaWdoID0gY29udGV4dC0+bV9oZWlnaHQ7Ci0gICAgaW50IGJ5dGVzUGVy
Um93ID0gY29udGV4dC0+bV93aWR0aCAqIDQ7Ci0gICAgdW5zaWduZWQgY2hhciogcGl4ZWxEYXRh
ID0gY29udGV4dC0+bV9kYXRhOwotCi0gICAgTUQ1IG1kNTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IHBpeGVsc0hpZ2g7ICsraSkgewotICAgICAgICBtZDUuYWRkQnl0ZXMocGl4ZWxEYXRhLCA0
ICogcGl4ZWxzV2lkZSk7Ci0gICAgICAgIHBpeGVsRGF0YSArPSBieXRlc1BlclJvdzsKLSAgICB9
Ci0KLSAgICBNRDU6OkRpZ2VzdCBoYXNoOwotICAgIG1kNS5jaGVja3N1bShoYXNoKTsKLQotICAg
IGhhc2hTdHJpbmdbMF0gPSAnXDAnOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTUQ1Ojpo
YXNoU2l6ZTsgKytpKQotICAgICAgICBzbnByaW50ZihoYXNoU3RyaW5nLCAzMywgIiVzJTAyeCIs
IGhhc2hTdHJpbmcsIGhhc2hbaV0pOwotfQotCi1zdGF0aWMgdm9pZCBwcmludFBORyhCaXRtYXBD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBjaGVja3N1bSkKLXsKLSAgICBWZWN0b3I8dW5z
aWduZWQgY2hhcj4gcG5nRGF0YTsKLSAgICBlbmNvZGVCaXRtYXBUb1BORyhjb250ZXh0LT5tX2Rh
dGEsIGNvbnRleHQtPm1fd2lkdGgsIGNvbnRleHQtPm1faGVpZ2h0LCAmcG5nRGF0YSk7Ci0gICAg
cHJpbnRQTkcocG5nRGF0YS5kYXRhKCksIHBuZ0RhdGEuc2l6ZSgpLCBjaGVja3N1bSk7Ci19Ci0K
LXZvaWQgZHVtcEJpdG1hcChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBjaGVj
a3N1bSkKLXsKLSAgICBwcmludFBORyhjb250ZXh0LCBjaGVja3N1bSk7Ci19CkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1BpeGVsRHVtcFN1cHBvcnRCbGFja0JlcnJ5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9QaXhlbER1bXBT
dXBwb3J0QmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNjE2MDYpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9ibGFja2JlcnJ5L1BpeGVsRHVtcFN1cHBvcnRCbGFja0JlcnJ5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaWZuZGVmIFBpeGVsRHVtcFN1cHBvcnRCbGFja0JlcnJ5X2gKLSNkZWZpbmUg
UGl4ZWxEdW1wU3VwcG9ydEJsYWNrQmVycnlfaAotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLWNs
YXNzIEJpdG1hcENvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxCaXRtYXBDb250ZXh0PiB7Ci1w
dWJsaWM6Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCeUFk
b3B0aW5nRGF0YSh1bnNpZ25lZCBjaGFyKiBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcENvbnRleHQoZGF0YSwgd2lk
dGgsIGhlaWdodCkpOwotICAgIH0KLQotICAgIH5CaXRtYXBDb250ZXh0KCkKLSAgICB7Ci0gICAg
ICAgIGRlbGV0ZSBtX2RhdGE7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciogbV9kYXRhOwot
ICAgIGludCBtX3dpZHRoLCBtX2hlaWdodDsKLQotcHJpdmF0ZToKLQotICAgIEJpdG1hcENvbnRl
eHQodW5zaWduZWQgY2hhciogZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotICAgICAgICA6
IG1fZGF0YShkYXRhKQotICAgICAgICAsIG1fd2lkdGgod2lkdGgpCi0gICAgICAgICwgbV9oZWln
aHQoaGVpZ2h0KQotICAgIHsKLSAgICB9Ci19OwotCi0jZW5kaWYgLy8gUGl4ZWxEdW1wU3VwcG9y
dEJsYWNrQmVycnlfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9UZXN0
UnVubmVyQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
YmxhY2tiZXJyeS9UZXN0UnVubmVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE2MTYwNikKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvVGVzdFJ1bm5lckJsYWNrQmVycnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0UnVubmVyLmgiCi0KLSNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRNYXJrZXIuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUg
IkR1bXBSZW5kZXJUcmVlQmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3Vw
cG9ydC5oIgotI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvclR5cGVzLmgiCi0jaW5jbHVkZSAiRWRp
dG9yQ2xpZW50QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0VsZW1l
bnQuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAi
U2NoZW1lUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUg
IlNlY3VyaXR5UG9saWN5LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJXb3Jr
UXVldWUuaCIKLSNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9BUElDYXN0Lmg+Ci0jaW5jbHVkZSA8U2hhcmVkUG9pbnRlci5oPgotI2luY2x1ZGUg
PFdlYlBhZ2UuaD4KLSNpbmNsdWRlIDxXZWJTZXR0aW5ncy5oPgotCi0jaW5jbHVkZSA8d3RmL093
bkFycmF5UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBXZWJD
b3JlOjp0b0VsZW1lbnQ7Ci11c2luZyBXZWJDb3JlOjp0b0pTOwotCi1UZXN0UnVubmVyOjp+VGVz
dFJ1bm5lcigpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0
cmluZ1JlZiB1cmwpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVybCk7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcygpCi17Ci0jaWYg
RU5BQkxFKERBVEFCQVNFKQotICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LmRlbGV0ZUFsbERhdGFiYXNlcygpOwotI2VuZGlmCi19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Y2xl
YXJCYWNrRm9yd2FyZExpc3QoKQotewotICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRl
clRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPmNsZWFyQmFja0ZvcndhcmRMaXN0KHRy
dWUpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1KU1N0cmluZ1JlZiBUZXN0UnVubmVy
Ojpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKG5hbWUpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpT
U3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFt
ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0obmFtZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVx
dWVzdHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6
ZGlzcGxheSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGljIFN0cmluZyBq
c1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhKU1N0cmluZ1JlZiBzdHIpCi17Ci0gICAgc2l6ZV90
IHN0ckFyclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyKTsKLSAg
ICBPd25BcnJheVB0cjxjaGFyPiBzdHJBcnIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW3N0ckFy
clNpemVdKTsKLSAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHN0ciwgc3RyQXJyLmdldCgpLCBz
dHJBcnJTaXplKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJBcnIuZ2V0KCkpOwot
fQotCi12b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3Ry
aW5nUmVmIHZhbHVlKQotewotICAgIGlmICghbWFpbkZyYW1lKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTdHJpbmcgbmFtZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKG5hbWUpOwot
ICAgIFN0cmluZyB2YWx1ZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsK
LQotICAgIG1haW5GcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZVN0cikuZXhlY3V0ZSh2YWx1
ZVN0cik7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZChKU1N0cmluZ1Jl
ZiBuYW1lKQotewotICAgIGlmICghbWFpbkZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBTdHJpbmcgbmFtZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKG5hbWUpOwot
Ci0gICAgcmV0dXJuIG1haW5GcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZVN0cikuaXNFbmFi
bGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6a2VlcFdlYkhpc3RvcnkoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSgpCi17Ci0g
ICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAoIXRvcExvYWRpbmdGcmFtZSB8fCBCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+bG9hZEZpbmlzaGVkKCkp
ICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQotICAgICAgICBkdW1wKCk7Ci0KLSAg
ICBtX3dhaXRUb0R1bXAgPSBmYWxzZTsKLSAgICB3YWl0Rm9yUG9saWN5ID0gZmFsc2U7Ci19Ci0K
LUpTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVm
LCBKU1N0cmluZ1JlZiB1cmwpCi17Ci0gICAgcmV0dXJuIEpTU3RyaW5nUmV0YWluKHVybCk7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdS
ZWYgdGFyZ2V0KQotewotICAgIHNpemVfdCB1cmxBcnJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVt
VVRGOENTdHJpbmdTaXplKHVybCk7Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gdXJsQXJyID0gYWRv
cHRBcnJheVB0cihuZXcgY2hhclt1cmxBcnJTaXplXSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0
cmluZyh1cmwsIHVybEFyci5nZXQoKSwgdXJsQXJyU2l6ZSk7Ci0KLSAgICBXZWJDb3JlOjpVUkwg
YmFzZSA9IG1haW5GcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCku
dXJsKCk7Ci0gICAgV2ViQ29yZTo6VVJMIGFic29sdXRlKGJhc2UsIHVybEFyci5nZXQoKSk7Ci0K
LSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWJzb2x1dGVVUkwoQWRvcHQsIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKGFic29sdXRlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsK
LSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oYWJzb2x1dGVVUkwu
Z2V0KCksIHRhcmdldCkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEFjY2VwdHNFZGl0aW5n
KGJvb2wgYWNjZXB0c0VkaXRpbmcpCi17Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVu
ZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnNldEFjY2VwdHNFZGl0aW5nKGFjY2VwdHNFZGl0
aW5nKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2ln
bmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVvdGEpOwotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0
eWxlc0VuYWJsZWQoYm9vbCBlbmFibGUpCi17Ci0gICAgbWFpbkZyYW1lLT5wYWdlKCktPnNldHRp
bmdzKCktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGVuYWJsZSk7Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6c2V0Q2FjaGVNb2RlbChpbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERl
bGVnYXRlLCBib29sIHBlcm1pc3NpdmUpCi17Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1w
UmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnNldEN1c3RvbVBvbGljeURlbGVnYXRlKHNl
dERlbGVnYXRlLCBwZXJtaXNzaXZlKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcGxp
Y2F0aW9uQ2FjaGVGb3JPcmlnaW4oT3BhcXVlSlNTdHJpbmcqKQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdG8gc3VwcG9ydCBkZWxldGluZyBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBh
biBvcmlnaW4uCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotbG9uZyBsb25nIFRlc3RSdW5u
ZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZikKLXsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVz
IGZvciBhbiBvcmlnaW4uCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlND
b250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBnZXQgb3Jp
Z2lucyB0aGF0IGNvbnRhaW4gYXBwbGljYXRpb24gY2FjaGVzLgotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQot
ewotICAgIGlmICghbWFpbkZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRRdW90YShtYWluRnJhbWUtPmRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCksIHF1b3RhKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXREb21h
aW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmlu
Z1JlZiBzY2hlbWUpCi17Ci0gICAgV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6OnNldERvbWFpblJl
bGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoZm9yYmlkZGVuLCBqc1N0cmluZ1JlZlRvV2Vi
Q29yZVN0cmluZyhzY2hlbWUpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRJY29uRGF0YWJh
c2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKLXsKLSAgICBVTlVTRURfUEFSQU0o
aWNvbkRhdGFiYXNlRW5hYmxlZCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBU
ZXN0UnVubmVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxhZykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZmxhZyk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBU
ZXN0UnVubmVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1Jl
ZiBwYXRoKQotewotICAgIFVOVVNFRF9QQVJBTShwYXRoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZmxh
ZykKLXsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5z
dGFuY2UoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRKYXZhU2NyaXB0T3BlbldpbmRvd3NBdXRv
bWF0aWNhbGx5KCFmbGFnKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBVTlVTRURfUEFSQU0oZmxhZyk7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxl
ZChib29sIGZsYWcpCi17Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6
Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0WFNTQXVkaXRvckVuYWJs
ZWQoZmxhZyk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKGJvb2wgY3ljbGVzKQotewotICAgIGlmICghbWFpbkZyYW1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtYWluRnJhbWUtPnBhZ2UoKS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1l
bnRzKGN5Y2xlcyk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0
aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQotewotICAgIFVOVVNFRF9QQVJBTShmbGFnKTsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0
RW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWcpOwotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihKU1N0cmluZ1JlZiBwYXRoKQotewotICAgIFN0cmluZyBwYXRoU3RyID0ganNTdHJpbmdS
ZWZUb1dlYkNvcmVTdHJpbmcocGF0aCk7Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVu
ZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0VXNlclN0
eWxlU2hlZXRMb2NhdGlvbihwYXRoU3RyKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjp3YWl0Rm9y
UG9saWN5RGVsZWdhdGUoKQotewotICAgIHNldEN1c3RvbVBvbGljeURlbGVnYXRlKHRydWUsIHRy
dWUpOwotICAgIHNldFdhaXRUb0R1bXAodHJ1ZSk7Ci0gICAgd2FpdEZvclBvbGljeSA9IHRydWU7
Ci19Ci0KLXNpemVfdCBUZXN0UnVubmVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKLXsKLSAgICBT
aGFyZWRBcnJheTxCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6OkJhY2tGb3J3YXJkRW50cnk+
IGJhY2tGb3J3YXJkTGlzdDsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVl
OjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5nZXRCYWNrRm9yd2FyZExpc3QoYmFja0Zvcndh
cmRMaXN0KTsKLSAgICByZXR1cm4gYmFja0ZvcndhcmRMaXN0Lmxlbmd0aCgpOwotfQotCi1pbnQg
VGVzdFJ1bm5lcjo6d2luZG93Q291bnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0V2FpdFRvRHVtcChib29sIHdhaXRU
b0R1bXApCi17Ci0gICAgLy8gQ2hhbmdlIGZyb20gMzBzIHRvIDM1cyBiZWNhdXNlIHNvbWUgdGVz
dCBjYXNlcyBpbiBtdWx0aXBhcnQgbmVlZCAzMCBzZWNvbmRzLAotICAgIC8vIHJlZmVyIHRvIGh0
dHAvdGVzdHMvbXVsdGlwYXJ0L3Jlc291cmNlcy9tdWx0aXBhcnQtd2FpdC1iZWZvcmUtYm91bmRh
cnkucGhwIHBsZWFzZS4KLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIGtXYWl0VG9EdW1wV2F0Y2hk
b2dJbnRlcnZhbCA9IDM1LjA7Ci0gICAgbV93YWl0VG9EdW1wID0gd2FpdFRvRHVtcDsKLSAgICBp
ZiAobV93YWl0VG9EdW1wKQotICAgICAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJU
cmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+c2V0V2FpdFRvRHVtcFdhdGNoZG9nKGtXYWl0VG9EdW1w
V2F0Y2hkb2dJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0V2luZG93SXNLZXko
Ym9vbCB3aW5kb3dJc0tleSkKLXsKLSAgICBtX3dpbmRvd0lzS2V5ID0gd2luZG93SXNLZXk7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxWaXNp
dGVkTGlua3MoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5l
cjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUp
Ci17Ci0gICAgaWYgKCFtYWluRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBr
ZXlTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhrZXkpOwotICAgIFN0cmluZyB2YWx1
ZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKLQotICAgIGlmIChrZXlT
dHIgPT0gIldlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5IikKLSAgICAgICAgQmxhY2tC
ZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+
c2V0dGluZ3MoKS0+c2V0TWF4aW11bVBhZ2VzSW5DYWNoZSgxKTsKLSAgICBlbHNlIGlmIChrZXlT
dHIgPT0gIldlYktpdFVzZVByZUhUTUw1UGFyc2VyUXVpcmtzIikKLSAgICAgICAgbWFpbkZyYW1l
LT5wYWdlKCktPnNldHRpbmdzKCktPnNldFVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKHRydWUpOwot
ICAgIGVsc2UgaWYgKGtleVN0ciA9PSAiV2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVuY2VLZXkiKQot
ICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hh
aW4odmFsdWVTdHIgPT0gInRydWUiIHx8IHZhbHVlU3RyID09ICIxIik7Ci0gICAgZWxzZSBpZiAo
a2V5U3RyID09ICJXZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQiKQotICAgICAgICBtYWlu
RnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKHZh
bHVlU3RyID09ICJ0cnVlIiB8fCB2YWx1ZVN0ciA9PSAiMSIpOwotICAgIGVsc2UgaWYgKGtleVN0
ciA9PSAiV2ViU29ja2V0c0VuYWJsZWQiKQotICAgICAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1
bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRX
ZWJTb2NrZXRzRW5hYmxlZCh2YWx1ZVN0ciA9PSAidHJ1ZSIgfHwgdmFsdWVTdHIgPT0gIjEiKTsK
LSAgICBlbHNlIGlmIChrZXlTdHIgPT0gIldlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lIikK
LSAgICAgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3Rh
bmNlKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUodmFs
dWVTdHIpOwotICAgIGVsc2UgaWYgKGtleVN0ciA9PSAiV2ViS2l0RGlzcGxheUltYWdlc0tleSIp
Ci0gICAgICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0
YW5jZSgpLT5wYWdlKCktPnNldHRpbmdzKCktPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh2
YWx1ZVN0ciA9PSAidHJ1ZSIgfHwgdmFsdWVTdHIgPT0gIjEiKTsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcykKLXsK
LSAgICBVTlVTRURfUEFSQU0oYWx3YXlzQWNjZXB0Q29va2llcyk7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBw
cm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFj
Y3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRv
dWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCkKLXsKLSAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKEJsYWNrQmVy
cnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCksIGxh
dGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwg
cHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRp
bmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkKTsKLX0KLQotdm9pZCBUZXN0UnVubmVy
OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoSlNTdHJpbmdSZWYg
bWVzc2FnZSkKLXsKLSAgICBTdHJpbmcgbWVzc2FnZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3Jl
U3RyaW5nKG1lc3NhZ2UpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6c2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJl
bmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCksIG1lc3NhZ2VTdHIpOwotfQotCi12
b2lkIFRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3Bl
Y3Rvcihsb25nIGNhbGxJZCwgSlNTdHJpbmdSZWYgc2NyaXB0KQotewotICAgIFVOVVNFRF9QQVJB
TShjYWxsSWQpOwotICAgIFVOVVNFRF9QQVJBTShzY3JpcHQpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRB
bmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3Qs
IEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAgICBVTlVTRURfUEFSQU0od29ybGRJRCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmpl
Y3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAgICBVTlVTRURfUEFSQU0od29ybGRJRCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU2Ny
aXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykK
LXsKLSAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKLSAgICBVTlVTRURfUEFSQU0ocnVuQXRTdGFy
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGFsbEZyYW1lcyk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiwgYm9v
bCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFNj
cm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRXZWJWaWV3RWRpdGFibGUoYm9vbCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmF1dGhlbnRp
Y2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlldygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjphZGRPcmln
aW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5n
UmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9v
bCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKLXsKLSAgICBXZWJDb3JlOjpTZWN1cml0eVBv
bGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoKldlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luOjpjcmVhdGVGcm9tU3RyaW5nKGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHNvdXJjZU9y
aWdpbikpLAotICAgICAgICBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhkZXN0aW5hdGlvblBy
b3RvY29sKSwKLSAgICAgICAganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcoZGVzdGluYXRpb25I
b3N0KSwKLSAgICAgICAgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNv
dXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYg
ZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQotewotICAg
IFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRy
eSgqV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoanNTdHJpbmdSZWZU
b1dlYkNvcmVTdHJpbmcoc291cmNlT3JpZ2luKSksCi0gICAgICAgIGpzU3RyaW5nUmVmVG9XZWJD
b3JlU3RyaW5nKGRlc3RpbmF0aW9uUHJvdG9jb2wpLAotICAgICAgICBqc1N0cmluZ1JlZlRvV2Vi
Q29yZVN0cmluZyhkZXN0aW5hdGlvbkhvc3QpLAotICAgICAgICBhbGxvd0Rlc3RpbmF0aW9uU3Vi
ZG9tYWlucyk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbWFpbkZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnNldEFsbG93RmlsZUFj
Y2Vzc0Zyb21GaWxlVVJMcyhlbmFibGVkKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxv
d1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKCFt
YWluRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1haW5GcmFtZS0+cGFnZSgpLT5zZXR0
aW5ncygpLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhlbmFibGVkKTsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNlVVJMKEpTU3Ry
aW5nUmVmLCBKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRlbSgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2Fu
QWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZykKLXsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1
bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5zZXRKYXZhU2NyaXB0Q2Fu
QWNjZXNzQ2xpcGJvYXJkKGZsYWcpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFBsdWdpbnNF
bmFibGVkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjphYm9ydE1vZGFsKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJv
b2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRv
dWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQotewotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydDo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKEJsYWNrQmVycnk6
OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCksIGNhblBy
b3ZpZGVBbHBoYSwgYWxwaGEsIGNhblByb3ZpZGVCZXRhLCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEs
IGdhbW1hKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQo
SlNTdHJpbmdSZWYsIGRvdWJsZSwgSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBh
bGxvdykKLXsKLSAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOwotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbihCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgp
LCBhbGxvdyk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0Vmlld01vZGVNZWRpYUZlYXR1cmUo
Y29uc3QgSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBU
ZXN0UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IGlmIG5lZWRlZCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUwNzU4LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5l
cjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hpbGUtZGVmZXJyaW5nLWxvYWRzLmh0
bWwKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldERlZmVy
c0xvYWRpbmcoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRvIGVuYWJsZSBsb2Fk
ZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLUpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3Jh
Z2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5l
cjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2Uo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZGVsZXRl
QWxsTG9jYWxTdG9yYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1pbnQgVGVz
dFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQot
ewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6Om51bWJlck9mUGVuZGluZ0dlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRy
ZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCkpOwotfQotCi1ib29sIFRlc3RSdW5uZXI6OmZp
bmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmpl
Y3RSZWYgb3B0aW9uc0FycmF5KQotewotICAgIFdlYkNvcmU6OkZpbmRPcHRpb25zIG9wdGlvbnMg
PSAwOwotCi0gICAgU3RyaW5nIG5hbWVTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyh0
YXJnZXQpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxlbmd0aFByb3BlcnR5TmFt
ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBz
aXplX3QgbGVuZ3RoID0gMDsKLSAgICBpZiAob3B0aW9uc0FycmF5KSB7Ci0gICAgICAgIEpTVmFs
dWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNB
cnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVl
SXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihj
b250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0
R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCk7Ci0gICAgICAg
IGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcHRpb25OYW1lKEFkb3B0
LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7Ci0KLSAgICAgICAgaWYg
KEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkNhc2VJbnNl
bnNpdGl2ZSIpKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpDYXNlSW5zZW5zaXRp
dmU7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9u
TmFtZS5nZXQoKSwgIkF0V29yZFN0YXJ0cyIpKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJD
b3JlOjpBdFdvcmRTdGFydHM7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0
IikpCi0gICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OlRyZWF0TWVkaWFsQ2FwaXRhbEFz
V29yZFN0YXJ0OwotICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG9wdGlvbk5hbWUuZ2V0KCksICJCYWNrd2FyZHMiKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0g
V2ViQ29yZTo6QmFja3dhcmRzOwotICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJXcmFwQXJvdW5kIikpCi0gICAgICAgICAgICBv
cHRpb25zIHw9IFdlYkNvcmU6OldyYXBBcm91bmQ7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlN0YXJ0SW5TZWxlY3Rpb24i
KSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6U3RhcnRJblNlbGVjdGlvbjsKLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogd2UgZG9uJ3QgbmVlZCB0byBjYWxsIFdlYlBhZ2U6OmZpbmRO
ZXh0U3RyaW5nKCksIHRoaXMgaXMgYSB3b3JrYXJvdW5kCi0gICAgLy8gc28gdGhhdCB0ZXN0IHBs
YXRmb3JtL2JsYWNrYmVycnkvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJpbmctbWFya2Vy
cy5odG1sIGNhbiBwYXNzLgotCi0gICAgLy8gT3VyIGxheW91dCB0ZXN0cyBhc3N1bWUgZmluZCB3
aWxsIHdyYXAgYW5kIGhpZ2hsaWdodCBhbGwgbWF0Y2hlcy4KLSAgICBCbGFja0JlcnJ5OjpXZWJL
aXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5maW5kTmV4dFN0
cmluZyhuYW1lU3RyLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgICEob3B0aW9ucyAmIFdlYkNvcmU6
OkJhY2t3YXJkcyksICEob3B0aW9ucyAmIFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZSksIHRydWUg
Lyogd3JhcCAqLywgdHJ1ZSAvKiBoaWdobGlnaHRBbGxNYXRjaGVzICovLCBmYWxzZSAvKiBzZWxl
Y3RBY3RpdmVNYXRjaE9uQ2xlYXIgKi8pOwotCi0gICAgcmV0dXJuIG1haW5GcmFtZS0+cGFnZSgp
LT5maW5kU3RyaW5nKG5hbWVTdHIsIG9wdGlvbnMpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZikKLXsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50LgotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBKU1N0cmluZ1JlZiB2YWx1ZSkK
LXsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7Ci0gICAgV2ViQ29y
ZTo6RWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudCh0b0pTKGV4ZWMsIG5vZGVPYmplY3QpKTsK
LSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAg
IGlmICghaW5wdXRFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnB1dEVsZW1lbnQt
PnNldFZhbHVlRm9yVXNlcihqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyh2YWx1ZSkpOwotfQot
Ci1sb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdp
bihKU1N0cmluZ1JlZikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0
dGluZyBkaXNrIHVzYWdlIGJ5IGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4K
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjphZGRDaHJvbWVJbnB1dEZpZWxk
KCkKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKLXsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpmb2N1c1dlYlZpZXcoKQotewotfQotCi12b2lkIFRlc3RS
dW5uZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1
bm5lcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCkKLXsKLX0KLQotdm9pZCBUZXN0
UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNTdHJpbmdSZWYpCi17Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNTdHJp
bmdSZWYpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9u
UGVybWlzc2lvbnMoKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlV2ViTm90aWZp
Y2F0aW9uQ2xpY2soSlNWYWx1ZVJlZikKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzaW11bGF0
ZUxlZ2FjeVdlYk5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVmKQotewotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRvbWF0
aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJs
ZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpjbG9zZUlkbGVMb2NhbFN0b3JhZ2VEYXRhYmFzZXMo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9ibGFja2JlcnJ5L1dvcmtRdWV1ZUl0ZW1CbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1dvcmtRdWV1ZUl0ZW1CbGFja0JlcnJ5LmNw
cAkocmV2aXNpb24gMTYxNjA2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9X
b3JrUXVldWVJdGVtQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgotCi0jaW5jbHVk
ZSAiRHVtcFJlbmRlclRyZWVCbGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiV2Vi
UGFnZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotYm9vbCBMb2FkSXRlbTo6aW52b2tlKCkgY29uc3QKLXsKLSAgICBzaXplX3Qg
dGFyZ2V0QXJyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShtX3Rhcmdl
dC5nZXQoKSk7Ci0gICAgc2l6ZV90IHVybEFyclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4
Q1N0cmluZ1NpemUobV91cmwuZ2V0KCkpOwotICAgIE93bkFycmF5UHRyPGNoYXI+IHRhcmdldCA9
IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdGFyZ2V0QXJyU2l6ZV0pOwotICAgIE93bkFycmF5UHRy
PGNoYXI+IHVybCA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdXJsQXJyU2l6ZV0pOwotICAgIHNp
emVfdCB0YXJnZXRMZW4gPSBKU1N0cmluZ0dldFVURjhDU3RyaW5nKG1fdGFyZ2V0LmdldCgpLCB0
YXJnZXQuZ2V0KCksIHRhcmdldEFyclNpemUpIC0gMTsKLSAgICBKU1N0cmluZ0dldFVURjhDU3Ry
aW5nKG1fdXJsLmdldCgpLCB1cmwuZ2V0KCksIHVybEFyclNpemUpOwotCi0gICAgRnJhbWUqIGZy
YW1lOwotICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0TGVuKQotICAgICAgICBmcmFtZSA9IG1haW5G
cmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldC5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBmcmFt
ZSA9IG1haW5GcmFtZTsKLQotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFVSTCBrdXJsID0gVVJMKFVSTCgpLCB1cmwuZ2V0KCkpOwotICAgIGZyYW1lLT5sb2Fk
ZXIoKS0+bG9hZChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1lLCBSZXNvdXJjZVJlcXVlc3Qoa3VybCkp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMb2FkSFRNTFN0cmluZ0l0ZW06Omludm9r
ZSgpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IGNvbnRlbnRTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVt
VVRGOENTdHJpbmdTaXplKG1fY29udGVudC5nZXQoKSk7Ci0gICAgc2l6ZV90IGJhc2VVUkxTaXpl
ID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKG1fYmFzZVVSTC5nZXQoKSk7Ci0g
ICAgc2l6ZV90IHVucmVhY2hhYmxlVVJMU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3Ry
aW5nU2l6ZShtX3VucmVhY2hhYmxlVVJMLmdldCgpKTsKLSAgICBPd25BcnJheVB0cjxjaGFyPiBj
b250ZW50ID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltjb250ZW50U2l6ZV0pOwotICAgIE93bkFy
cmF5UHRyPGNoYXI+IGJhc2VVUkwgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2Jhc2VVUkxTaXpl
XSk7Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gdW5yZWFjaGFibGVVUkwgPSBhZG9wdEFycmF5UHRy
KG5ldyBjaGFyW3VucmVhY2hhYmxlVVJMU2l6ZV0pOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJp
bmcobV9jb250ZW50LmdldCgpLCBjb250ZW50LmdldCgpLCBjb250ZW50U2l6ZSk7Ci0gICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhtX2Jhc2VVUkwuZ2V0KCksIGJhc2VVUkwuZ2V0KCksIGJhc2VV
UkxTaXplKTsKLSAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKG1fdW5yZWFjaGFibGVVUkwuZ2V0
KCksIHVucmVhY2hhYmxlVVJMLmdldCgpLCB1bnJlYWNoYWJsZVVSTFNpemUpOwotICAgIFNUQVRJ
Q19MT0NBTF9TVFJJTkcoc190ZXh0SHRtbCwgInRleHQvaHRtbCIpOwotICAgIEJsYWNrQmVycnk6
OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPmxvYWRT
dHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZnJvbVV0ZjgoY29udGVudC5nZXQo
KSksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmZyb21VdGY4KGJhc2VVUkwuZ2V0KCkp
LCBzX3RleHRIdG1sLCB1bnJlYWNoYWJsZVVSTFNpemUgPyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nOjpmcm9tVXRmOCh1bnJlYWNoYWJsZVVSTC5nZXQoKSkgOiBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBSZWxvYWRJdGVtOjppbnZva2UoKSBjb25zdAotewotICAgIG1haW5GcmFtZS0+bG9hZGVyKCkt
PnJlbG9hZCh0cnVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTY3JpcHRJdGVtOjpp
bnZva2UoKSBjb25zdAotewotICAgIEJsYWNrQmVycnk6OldlYktpdDo6SmF2YVNjcmlwdERhdGFU
eXBlIHR5cGU7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyByZXN1bHQ7Ci0gICAg
c2l6ZV90IHNjcmlwdEFyclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUo
bV9zY3JpcHQuZ2V0KCkpOwotICAgIE93bkFycmF5UHRyPGNoYXI+IHNjcmlwdCA9IGFkb3B0QXJy
YXlQdHIobmV3IGNoYXJbc2NyaXB0QXJyU2l6ZV0pOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJp
bmcobV9zY3JpcHQuZ2V0KCksIHNjcmlwdC5nZXQoKSwgc2NyaXB0QXJyU2l6ZSk7Ci0gICAgQmxh
Y2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2Uo
KS0+ZXhlY3V0ZUphdmFTY3JpcHQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZnJvbVJh
d0RhdGEoc2NyaXB0LmdldCgpLCBzY3JpcHRBcnJTaXplKSwgdHlwZSwgcmVzdWx0KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCYWNrRm9yd2FyZEl0ZW06Omludm9rZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJ
bnN0YW5jZSgpLT5wYWdlKCktPmdvQmFja09yRm9yd2FyZChtX2hvd0Zhcik7Ci19Ci0KSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvYnVpbGQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9idWlsZAkocmV2aXNpb24gMTYxNjA2KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9idWlsZAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMiArMCwwIEBACi0jIS9iaW4vc2gKLQotIyBUaGlzIGZpbGUgYnVpbGRzIHRoZSBJbWFnZURp
ZmYgZXhlY3V0YWJsZSwgdG8gcnVuCi0jIG9uIHRoZSBob3N0IG1hY2hpbmUuCi0KLXdoaWNoIHFt
YWtlLXF0NCA+IC9kZXYvbnVsbAotaWYgWyAkPyAtZXEgMCBdIDsgdGhlbgotICAgIHFtYWtlLXF0
NAotZWxzZQotICAgIHFtYWtlCi1maQotbWFrZQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
YmxhY2tiZXJyeS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckJsYWNrQmVycnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNjA2KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvYmxhY2tiZXJyeS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckJsYWNrQmVycnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKLXsKLX0KLQotQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCi17Ci19Ci0KLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6c2V0TG9nRm9jdXNFdmVudHMoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dTY3JvbGxpbmdTdGFy
dEV2ZW50cyhib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1ZhbHVlQ2hhbmdlRXZlbnRzKGJvb2wpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6ZWxlbWVudEF0UG9pbnQoaW50LCBpbnQpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6c2V0TG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhib29sKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxp
c3RlbmVyKEpTT2JqZWN0UmVmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQotewotfQot
Ci1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3Np
YmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEJsYWNrQmVycnku
Y3BwCShyZXZpc2lvbiAxNjE2MDYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50KQot
ICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCi17Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgb3Ro
ZXIpCi0gICAgOiBtX2VsZW1lbnQob3RoZXIubV9lbGVtZW50KQotewotfQotCi1BY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp+QWNjZXNzaWJpbGl0eVVJRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0TGlua2VkVUlFbGVtZW50cyhWZWN0b3I8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0RG9jdW1lbnRMaW5rcyhWZWN0b3I8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW4oVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmdldENoaWxkcmVuV2l0aFJhbmdlKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50PiYsIHVuc2lnbmVkLCB1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludChpbnQsIGludCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCh1bnNpZ25lZCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmls
aXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5k
ZXgodW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cygpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJlbnRFbGVtZW50KCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbigpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24oKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRpdGxlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Omxhbmd1YWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwot
fQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnkoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWRv
dWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmhlaWdodCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
ZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRYKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Y2xpY2tQb2ludFkoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0
aW9uKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWUoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjptYXhWYWx1ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlw
dGlvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
bnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNQcmVzc0FjdGlv
blN1cHBvcnRlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luY3JlbWVudEFjdGlvblN1cHBvcnRl
ZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0RlY3JlbWVudEFjdGlvblN1cHBvcnRlZCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1JlcXVpcmVkKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2Vs
ZWN0ZWQoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoaWVyYXJjaGljYWxMZXZlbCgpIGNvbnN0
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNHcmFiYmVkKCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNF
eHBhbmRlZCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29s
dW1uSGVhZGVycygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVh
ZGVycygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNT
dHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucygpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleEluVGFi
bGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5l
Rm9ySW5kZXgoaW50KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKHVu
c2lnbmVkLCB1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAw
OwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JSYW5n
ZSh1bnNpZ25lZCwgdW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp1aUVsZW1lbnRGb3JTZWFyY2hQcmVkaWNhdGUoSlNDb250ZXh0UmVmLCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50KiwgYm9vbCwgSlNWYWx1ZVJlZiwgSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkLCB1bnNp
Z25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0F0dHJpYnV0ZVNldHRhYmxlKEpTU3RyaW5nUmVmKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNB
dHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmNyZW1l
bnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZGVjcmVtZW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNob3dNZW51KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRpc2Nsb3NlZFJvd0F0SW5kZXgodW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphcmlhT3duc0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUZsb3dUb0VsZW1lbnRBdEluZGV4KHVuc2lnbmVk
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRSb3dBdEluZGV4
KHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93QXRJbmRl
eCh1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3Nl
ZEJ5Um93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1K
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBj
b25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
bmRleE9mQ2hpbGQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCopCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Om51bWJlckF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym9v
bEF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRW
YWx1ZSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdAotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnVybCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNh
dGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxl
KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0Ci17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc09mZlNjcmVlbigpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBz
ZWQoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZp
c2libGVXaXRoU3ViRm9jdXMoaW50LCBpbnQsIGludCwgaW50KQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQ
b2ludChpbnQsIGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFk
ZFNlbGVjdGlvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24oKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzcygpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnJvd0NvdW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCgpIGNvbnN0Ci17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlKHVuc2lnbmVk
LCB1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzTWlz
c3BlbGxlZCh1bnNpZ25lZCwgdW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQo
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNlZCgpIGNvbnN0Ci17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjbGFzc0xpc3QoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IDA7Ci19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBSZW5kZXJU
cmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1
bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTYxNjA2KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvYmxhY2tiZXJyeS9EdW1wUmVuZGVyVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAw
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZS5oIgotCi0jaW5jbHVkZSAiQVBJQ2FzdC5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAi
QmFja0ZvcndhcmRMaXN0QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKLSNp
bmNsdWRlICJEYXRhYmFzZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgot
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkR1bXBS
ZW5kZXJUcmVlU3VwcG9ydC5oIgotI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvclR5cGVzLmgiCi0j
aW5jbHVkZSAiRWRpdG9yQ2xpZW50QmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIkVkaXRvckluc2Vy
dEFjdGlvbi5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudFNlbmRlci5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgotI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhU
VFBQYXJzZXJzLmgiCi0jaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKLSNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3Vw
LmgiCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydC5oIgotI2luY2x1ZGUgIlBpeGVsRHVtcFN1
cHBvcnRCbGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJU
cmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUZXN0UnVu
bmVyLmgiCi0jaW5jbHVkZSAiVGV4dEFmZmluaXR5LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNp
bmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5j
bHVkZSAiV2ViUGFnZUNsaWVudC5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotI2luY2x1ZGUg
IldvcmtRdWV1ZUl0ZW0uaCIKLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1MYXlvdXRUZXN0
Lmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtUHJpbWl0aXZlcy5oPgotI2luY2x1ZGUg
PFdlYlNldHRpbmdzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5o
PgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25Db3B5aW5nU29ydC5oPgot
I2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
I2RlZmluZSBTRENBUkRfUEFUSCAiL2RldmVsb3BlciIKLQotdm9sYXRpbGUgYm9vbCB0ZXN0RG9u
ZTsKLQotUmVmUHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwotCi1XZWJDb3JlOjpGcmFtZSog
bWFpbkZyYW1lID0gMDsKLVdlYkNvcmU6OkZyYW1lKiB0b3BMb2FkaW5nRnJhbWUgPSAwOwotYm9v
bCB3YWl0Rm9yUG9saWN5ID0gZmFsc2U7Ci1ib29sIHJ1bkZyb21Db21tYW5kTGluZSA9IGZhbHNl
OwotCi0vLyBGSVhNRTogQXNzdW1pbmcgTGF5b3V0VGVzdHMgaGFzIGJlZW4gY29waWVkIHRvIC9k
ZXZlbG9wZXIvTGF5b3V0VGVzdHMvCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qga1NEQ0xheW91
dFRlc3RzVVJJID0gImZpbGU6Ly8vZGV2ZWxvcGVyL0xheW91dFRlc3RzLyI7Ci1zdGF0aWMgY29u
c3QgY2hhciogaHR0cFRlc3RTeW50YXggPSAiaHR0cC90ZXN0cy8iOwotc3RhdGljIGNvbnN0IGNo
YXIqIGxvY2FsVGVzdFN5bnRheCA9ICJsb2NhbC8iOwotc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBQ
cmVmaXhVUkwgPSAiaHR0cDovLzEyNy4wLjAuMTo4MDAwLyI7Ci0KLXVzaW5nIG5hbWVzcGFjZSBz
dGQ7Ci0KLXN0YXRpYyBTdHJpbmcgZHJ0QWZmaW5pdHlEZXNjcmlwdGlvbihXZWJDb3JlOjpFQWZm
aW5pdHkgYWZmaW5pdHkpCi17Ci0gICAgaWYgKGFmZmluaXR5ID09IFdlYkNvcmU6OlVQU1RSRUFN
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCJOU1NlbGVjdGlvbkFmZmluaXR5VXBzdHJlYW0iKTsK
LSAgICBpZiAoYWZmaW5pdHkgPT0gV2ViQ29yZTo6RE9XTlNUUkVBTSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygiTlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0iKTsKLSAgICByZXR1cm4gIiI7
Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZHJ0RHVtcFBhdGgoV2ViQ29yZTo6Tm9kZSogbm9kZSkKLXsK
LSAgICBXZWJDb3JlOjpOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgU3Ry
aW5nIHN0ciA9IFN0cmluZzo6Zm9ybWF0KCIlcyIsIG5vZGUtPm5vZGVOYW1lKCkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgaWYgKHBhcmVudCkgewotICAgICAgICBzdHIuYXBwZW5kKCIgPiAiKTsKLSAg
ICAgICAgc3RyLmFwcGVuZChkcnREdW1wUGF0aChwYXJlbnQpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHN0cjsKLX0KLQotc3RhdGljIFN0cmluZyBkcnRSYW5nZURlc2NyaXB0aW9uKFdlYkNvcmU6OlJh
bmdlKiByYW5nZSkKLXsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gIihudWxsKSI7
Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJyYW5nZSBmcm9tICVkIG9mICVzIHRvICVkIG9m
ICVzIiwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIGRydER1bXBQYXRoKHJhbmdlLT5zdGFydENvbnRh
aW5lcigpKS51dGY4KCkuZGF0YSgpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIGRydER1bXBQYXRoKHJh
bmdlLT5lbmRDb250YWluZXIoKSkudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcg
ZHJ0RnJhbWVEZXNjcmlwdGlvbihXZWJDb3JlOjpGcmFtZSogZnJhbWUpCi17Ci0gICAgU3RyaW5n
IG5hbWUgPSBmcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCkuc3RyaW5nKCk7Ci0gICAgaWYgKGZy
YW1lID09IG1haW5GcmFtZSkgewotICAgICAgICBpZiAoIW5hbWUuaXNOdWxsKCkgJiYgbmFtZS5s
ZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgibWFpbiBmcmFtZSBc
IiVzXCIiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gIm1haW4gZnJhbWUi
OwotICAgIH0KLSAgICBpZiAoIW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiZnJhbWUgXCIlc1wiIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4g
ImZyYW1lIChhbm9ueW1vdXMpIjsKLX0KLQotc3RhdGljIFdURjo6U3RyaW5nIGRydENyZWRlbnRp
YWxEZXNjcmlwdGlvbihXZWJDb3JlOjpDcmVkZW50aWFsJikKLXsKLSAgICAvLyBUT0RPOiBJbXBs
ZW1lbnRhdGlvbiBuZWVkZWQuCi0gICAgcmV0dXJuICI8dW5rbm93bj4iOwotfQotCi1zdGF0aWMg
Ym9vbCBzaG91bGRMb2dGcmFtZUxvYWREZWxlZ2F0ZXMoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0g
ICAgcmV0dXJuIHVybC5jb250YWlucygibG9hZGluZy8iKTsKLX0KLQotc3RhdGljIGJvb2wgc2hv
dWxkRHVtcEFzVGV4dChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICByZXR1cm4gdXJsLmNvbnRh
aW5zKCJkdW1wQXNUZXh0LyIpOwotfQotCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotRHVtcFJlbmRlclRyZWUqIER1bXBSZW5kZXJUcmVlOjpzX2N1cnJlbnRJ
bnN0YW5jZSA9IDA7Ci0KLXN0YXRpYyB2b2lkIGNyZWF0ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSkKLXsKLSAgICBGSUxFKiBmZCA9IGZvcGVuKGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCksICJ3
YiIpOwotICAgIGlmIChmZCkKLSAgICAgICAgZmNsb3NlKGZkKTsKLX0KLQotc3RhdGljIGJvb2wg
aXNGdWxsVXJsKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5n
PiAqcHJlZml4ZXMgPSAwOwotICAgIGlmICghcHJlZml4ZXMpICB7Ci0gICAgICAgIHByZWZpeGVz
ID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7Ci0gICAgICAgIHByZWZpeGVzLT5hcHBlbmQoImh0dHA6
Ly8iKTsKLSAgICAgICAgcHJlZml4ZXMtPmFwcGVuZCgiZmlsZTovLyIpOwotICAgIH0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZml4ZXMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmICh1cmwuc3RhcnRzV2l0aChwcmVmaXhlcy0+YXQoaSksIGZhbHNlKSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUR1bXBSZW5kZXJU
cmVlOjpEdW1wUmVuZGVyVHJlZShCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2UqIHBhZ2UpCi0g
ICAgOiBtX2djQ29udHJvbGxlcigwKQotICAgICwgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigw
KQotICAgICwgbV9wYWdlKHBhZ2UpCi0gICAgLCBtX2VuYWJsZVBpeGVsVGVzdHMoZ2V0ZW52KCJw
aXhlbFRlc3RzIikpCi0gICAgLCBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKHRoaXMsICZEdW1w
UmVuZGVyVHJlZTo6d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCkKLSAgICAsIG1fd29ya1Rp
bWVyKHRoaXMsICZEdW1wUmVuZGVyVHJlZTo6cHJvY2Vzc1dvcmspCi0gICAgLCBtX2FjY2VwdHNF
ZGl0aW5nKHRydWUpCi0gICAgLCBtX3BvbGljeURlbGVnYXRlRW5hYmxlZChmYWxzZSkKLSAgICAs
IG1fcG9saWN5RGVsZWdhdGVJc1Blcm1pc3NpdmUoZmFsc2UpCi17Ci0gICAgY29uc3QgY2hhciog
d29ya2VyTnVtYmVyID0gZ2V0ZW52KCJXT1JLRVJfTlVNQkVSIikgPyBnZXRlbnYoIldPUktFUl9O
VU1CRVIiKSA6ICIwIjsKLSAgICBTdHJpbmcgc2RjYXJkUGF0aCA9IFNEQ0FSRF9QQVRIOwotICAg
IG1fcmVzdWx0c0RpciA9IHNkY2FyZFBhdGggKyAiL3Jlc3VsdHMvIjsKLSAgICBtX2RvbmVGaWxl
ID0gc2RjYXJkUGF0aCArICIvZG9uZSIgKyB3b3JrZXJOdW1iZXI7Ci0gICAgbV9jdXJyZW50VGVz
dEZpbGUgPSBzZGNhcmRQYXRoICsgIi9jdXJyZW50IiArIHdvcmtlck51bWJlciArICIuZHJ0IjsK
LSAgICBtX3BhZ2UtPnJlc2V0VmlydHVhbFZpZXdwb3J0T25Db21taXR0ZWQoZmFsc2UpOwotICAg
IG1fcGFnZS0+c2V0VmlydHVhbFZpZXdwb3J0U2l6ZShQbGF0Zm9ybTo6SW50U2l6ZSg4MDAsIDYw
MCkpOwotICAgIHNfY3VycmVudEluc3RhbmNlID0gdGhpczsKLX0KLQotRHVtcFJlbmRlclRyZWU6
On5EdW1wUmVuZGVyVHJlZSgpCi17Ci0gICAgZGVsZXRlIG1fZ2NDb250cm9sbGVyOwotICAgIGRl
bGV0ZSBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVl
OjpydW5UZXN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGltYWdlSGFzaCkKLXsK
LSAgICBtYWluRnJhbWUtPmxvYWRlcigpLT5zdG9wRm9yVXNlckNhbmNlbCgpOwotICAgIHJlc2V0
VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKHVybCwgaW1hZ2VIYXNoKTsKLSAgICBpZiAo
c2hvdWxkTG9nRnJhbWVMb2FkRGVsZWdhdGVzKHVybCkpCi0gICAgICAgIGdUZXN0UnVubmVyLT5z
ZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRydWUpOwotICAgIGlmICghcnVuRnJvbUNvbW1hbmRM
aW5lKSB7Ci0gICAgICAgIGNyZWF0ZUZpbGUobV9yZXN1bHRzRGlyICsgKm1fY3VycmVudFRlc3Qg
KyAiLmR1bXAuY3Jhc2giKTsKLQotICAgICAgICBTdHJpbmcgc3Rkb3V0RmlsZSA9IG1fcmVzdWx0
c0RpciArICptX2N1cnJlbnRUZXN0ICsgIi5kdW1wIjsKLSAgICAgICAgU3RyaW5nIHN0ZGVyckZp
bGUgPSBtX3Jlc3VsdHNEaXIgKyAqbV9jdXJyZW50VGVzdCArICIuc3RkZXJyIjsKLQotICAgICAg
ICAvLyBGSVhNRTogd2Ugc2hvdWxkIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdGRvdXQgYW5kIHN0
ZGVyciBoZXJlIGJ1dCBhcmVuJ3QgZG9pbmcKLSAgICAgICAgLy8gdGhhdCB5ZXQgZHVlIHRvIGlz
c3VlcyB3aXRoIGR1cCwgZXRjLgotICAgICAgICBmcmVvcGVuKHN0ZG91dEZpbGUudXRmOCgpLmRh
dGEoKSwgIndiIiwgc3Rkb3V0KTsKLSAgICAgICAgZnJlb3BlbihzdGRlcnJGaWxlLnV0ZjgoKS5k
YXRhKCksICJ3YiIsIHN0ZGVycik7Ci0gICAgfQotICAgIEZJTEUqIGN1cnJlbnQgPSBmb3Blbiht
X2N1cnJlbnRUZXN0RmlsZS51dGY4KCkuZGF0YSgpLCAidyIpOwotICAgIGlmIChjdXJyZW50KSB7
Ci0gICAgICAgIGZ3cml0ZShtX2N1cnJlbnRUZXN0LT51dGY4KCkuZGF0YSgpLCAxLCBtX2N1cnJl
bnRUZXN0LT51dGY4KCkubGVuZ3RoKCksIGN1cnJlbnQpOwotICAgICAgICBmY2xvc2UoY3VycmVu
dCk7Ci0gICAgfQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdCByZXF1
ZXN0OwotICAgIFNUQVRJQ19MT0NBTF9TVFJJTkcoc19nZXQsICJHRVQiKTsKLSAgICByZXF1ZXN0
LnNldFJlcXVlc3RVcmwodXJsLCBzX2dldCk7Ci0gICAgbV9wYWdlLT5sb2FkKHJlcXVlc3QpOwot
fQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkb25lRHJ0KCkKLXsKLSAgICBmY2xvc2Uoc3Rkb3V0
KTsKLSAgICBmY2xvc2Uoc3RkZXJyKTsKLSAgICB1bmxpbmsoZ2V0UFBTUGF0aCgpLmNfc3RyKCkp
OwotCi0gICAgLy8gTm90aWZ5IHRoZSBleHRlcm5hbCB3b3JsZCB0aGF0IHdlJ3JlIGRvbmUuCi0g
ICAgY3JlYXRlRmlsZShtX2RvbmVGaWxlKTsKLSAgICAobV9wYWdlLT5jbGllbnQoKSktPm5vdGlm
eVJ1bkxheW91dFRlc3RzRmluaXNoZWQoKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6cnVu
Q3VycmVudFRlc3QoKQotewotICAgIFN0cmluZyBpbWFnZUhhc2ggPSAiIjsKLSAgICBpbnQgcG9z
U3BsaXR0ZXIgPSBtX2N1cnJlbnRUZXN0LT5maW5kKCc/Jyk7Ci0gICAgaWYgKHBvc1NwbGl0dGVy
ID4gMSAmJiAodW5zaWduZWQpcG9zU3BsaXR0ZXIgPCBtX2N1cnJlbnRUZXN0LT5sZW5ndGgoKSAt
IDEpIHsKLSAgICAgICAgaW1hZ2VIYXNoID0gbV9jdXJyZW50VGVzdC0+c3Vic3RyaW5nKHBvc1Nw
bGl0dGVyICsgMSk7Ci0gICAgICAgIG1fY3VycmVudFRlc3QtPnRydW5jYXRlKHBvc1NwbGl0dGVy
KTsKLSAgICB9Ci0gICAgaWYgKGlzSFRUUFRlc3QobV9jdXJyZW50VGVzdC0+dXRmOCgpLmRhdGEo
KSkpIHsKLSAgICAgICAgbV9jdXJyZW50SHR0cFRlc3QgPSBtX2N1cnJlbnRUZXN0LT51dGY4KCku
ZGF0YSgpOwotICAgICAgICBtX2N1cnJlbnRIdHRwVGVzdC5yZW1vdmUoMCwgc3RybGVuKGh0dHBU
ZXN0U3ludGF4KSk7Ci0gICAgICAgIHJ1blRlc3QoaHR0cFByZWZpeFVSTCArIG1fY3VycmVudEh0
dHBUZXN0LCBpbWFnZUhhc2gpOwotICAgIH0gZWxzZSBpZiAoaXNGdWxsVXJsKCptX2N1cnJlbnRU
ZXN0KSkKLSAgICAgICAgcnVuVGVzdCgqbV9jdXJyZW50VGVzdCwgaW1hZ2VIYXNoKTsKLSAgICBl
bHNlCi0gICAgICAgIHJ1blRlc3Qoa1NEQ0xheW91dFRlc3RzVVJJICsgKm1fY3VycmVudFRlc3Qs
IGltYWdlSGFzaCk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6OnJ1blJlbWFpbmluZ1Rlc3Rz
KCkKLXsKLSAgICBpZiAocnVuRnJvbUNvbW1hbmRMaW5lKSB7Ci0gICAgICAgIGRvbmVEcnQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBmZmx1c2ggc2hvdWxkIG5v
dCBiZSBuZWNlc3NhcnkgYnV0IGlzIHRlbXBvcmFyaWx5IHJlcXVpcmVkIGR1ZSB0byBhIGJ1ZyBp
biBzdGRpbyBvdXRwdXQuCi0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgZmZsdXNoKHN0ZGVycik7
Ci0KLSAgICBpZiAobV9jdXJyZW50VGVzdCA+PSBtX3Rlc3RzLmVuZCgpIC0gMSkgewotICAgICAg
ICBtX3Rlc3RzLmNsZWFyKCk7Ci0gICAgICAgIGlmIChtX2J1ZmZlcmVkVGVzdHMuc2l6ZSgpID4g
MCkgewotICAgICAgICAgICAgbV90ZXN0cy5hcHBlbmQobV9idWZmZXJlZFRlc3RzKTsKLSAgICAg
ICAgICAgIG1fYnVmZmVyZWRUZXN0cy5jbGVhcigpOwotICAgICAgICAgICAgbV9jdXJyZW50VGVz
dCA9IG1fdGVzdHMuYmVnaW4oKTsKLSAgICAgICAgICAgIHJ1bkN1cnJlbnRUZXN0KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY3VycmVudFRlc3QrKzsKLSAg
ICBydW5DdXJyZW50VGVzdCgpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpyZXNldFRvQ29u
c2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyhjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBpbWFnZUhhc2gpCi17Ci0gICAgZ1Rlc3RSdW5uZXIgPSBUZXN0UnVubmVyOjpjcmVhdGUodXJs
LnV0ZjgoKS5kYXRhKCksIGltYWdlSGFzaC51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmIChzaG91
bGREdW1wQXNUZXh0KHVybCkpIHsKLSAgICAgICAgZ1Rlc3RSdW5uZXItPnNldER1bXBBc1RleHQo
dHJ1ZSk7Ci0gICAgICAgIGdUZXN0UnVubmVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxz
ZSk7Ci0gICAgfQotICAgIGdUZXN0UnVubmVyLT5zZXRJY29uRGF0YWJhc2VFbmFibGVkKGZhbHNl
KTsKLQotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6cmVzZXRHZW9sb2NhdGlvbk1vY2sobV9w
YWdlKTsKLQotICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7Ci0gICAgbV9sb2FkRmluaXNoZWQgPSBm
YWxzZTsKLSAgICBtX3BvbGljeURlbGVnYXRlRW5hYmxlZCA9IGZhbHNlOwotICAgIG1fcG9saWN5
RGVsZWdhdGVJc1Blcm1pc3NpdmUgPSBmYWxzZTsKLSAgICB3YWl0Rm9yUG9saWN5ID0gZmFsc2U7
Ci0gICAgdGVzdERvbmUgPSBmYWxzZTsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5jbGVhcigp
OwotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnNldEZyb3plbihmYWxzZSk7Ci0KLSAgICBXZWJT
ZXR0aW5ncyogc2V0dGluZ3MgPSBtX3BhZ2UtPnNldHRpbmdzKCk7Ci0gICAgLy8gQXBwbHkgbmV3
IHNldHRpbmdzIHRvIGN1cnJlbnQgcGFnZSwgc2VlIG1vcmUgaW4gdGhlIGRlc3RydWN0b3Igb2Yg
V2ViU2V0dGluZ3NUcmFuc2FjdGlvbi4KLSAgICBXZWJTZXR0aW5nc1RyYW5zYWN0aW9uIHdlYlNl
dHRpbmdUcmFuc2FjdGlvbihzZXR0aW5ncyk7Ci0KLSAgICBzZXR0aW5ncy0+c2V0VGV4dFJlZmxv
d01vZGUoV2ViU2V0dGluZ3M6OlRleHRSZWZsb3dEaXNhYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNl
dEphdmFTY3JpcHRFbmFibGVkKHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1
dG9tYXRpY2FsbHkodHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRPcGVuV2luZG93
c0F1dG9tYXRpY2FsbHkodHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldFpvb21Ub0ZpdE9uTG9hZChm
YWxzZSk7Ci0gICAgc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxNik7Ci0gICAgc2V0dGlu
Z3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDEzKTsKLSAgICBzZXR0aW5ncy0+c2V0TWluaW11
bUZvbnRTaXplKDEpOwotICAgIFNUQVRJQ19MT0NBTF9TVFJJTkcoc19hcmlhbCwgIkFyaWFsIik7
Ci0gICAgU1RBVElDX0xPQ0FMX1NUUklORyhzX2NvdXJpZXIsICJDb3VyaWVyIE5ldyIpOwotICAg
IFNUQVRJQ19MT0NBTF9TVFJJTkcoc190aW1lcywgIlRpbWVzIik7Ci0gICAgc2V0dGluZ3MtPnNl
dFNlcmlmRm9udEZhbWlseShzX3RpbWVzKTsKLSAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFt
aWx5KHNfY291cmllcik7Ci0gICAgc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoc19h
cmlhbCk7Ci0gICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseShzX3RpbWVzKTsKLSAg
ICBzZXR0aW5ncy0+c2V0WFNTQXVkaXRvckVuYWJsZWQoZmFsc2UpOwotICAgIHNldHRpbmdzLT5z
ZXRNYXhpbXVtUGFnZXNJbkNhY2hlKDApOwotICAgIHNldHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxl
ZCh0cnVlKTsKLQotICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJl
bnRJbnN0YW5jZSgpLT5wYWdlKCktPmNsZWFyQmFja0ZvcndhcmRMaXN0KGZhbHNlKTsKLQotICAg
IHNldEFjY2VwdHNFZGl0aW5nKHRydWUpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6c2V0
TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbih0cnVlKTsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVE
KQotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6c2V0U3R5bGVTY29wZWRFbmFibGVkKHRydWUp
OwotI2VuZGlmCi0KLSAgICBtX3BhZ2UtPnNldFZpcnR1YWxWaWV3cG9ydFNpemUoUGxhdGZvcm06
OkludFNpemUoODAwLCA2MDApKTsKLSAgICBtX3BhZ2UtPnJlc2V0VmlydHVhbFZpZXdwb3J0T25D
b21taXR0ZWQoZmFsc2UpOwotICAgIG1fcGFnZS0+c2V0VXNlclNjYWxhYmxlKHRydWUpOwotICAg
IG1fcGFnZS0+c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCh0cnVlKTsKLQotICAgIGlm
IChXZWJDb3JlOjpQYWdlKiBwYWdlID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0Ojpjb3JlUGFnZSht
X3BhZ2UpKSB7Ci0gICAgICAgIHBhZ2UtPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyh0
cnVlKTsKLQotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBCbGFja0JlcnJ5IHVz
ZXMgcmVzZXRJbnRlcm5hbHNPYmplY3Q6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04Njg5OS4KLSAgICAgICAgcGFnZS0+c2V0dGluZ3MoKS0+c2V0RWRpdGluZ0JlaGF2
aW9yVHlwZShXZWJDb3JlOjpFZGl0aW5nVW5peEJlaGF2aW9yKTsKLQotICAgICAgICBwYWdlLT5z
ZXR0aW5ncygpLT5zZXRET01QYXN0ZUFsbG93ZWQodHJ1ZSk7Ci0gICAgICAgIHBhZ2UtPnNldHRp
bmdzKCktPnNldFZhbGlkYXRpb25NZXNzYWdlVGltZXJNYWduaWZpY2F0aW9uKC0xKTsKLSAgICAg
ICAgcGFnZS0+c2V0dGluZ3MoKS0+c2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWQo
dHJ1ZSk7Ci0gICAgICAgIHBhZ2UtPnNldHRpbmdzKCktPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21G
aWxlVVJMcyh0cnVlKTsKLSAgICAgICAgcGFnZS0+c2V0dGluZ3MoKS0+c2V0QWxsb3dVbml2ZXJz
YWxBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7Ci0gICAgICAgIHBhZ2UtPnNldHRpbmdzKCktPnNl
dEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKHRydWUpOwotICAgICAgICBwYWdlLT5zZXR0aW5n
cygpLT5zZXRVc2VQcmVIVE1MNVBhcnNlclF1aXJrcyhmYWxzZSk7Ci0gICAgICAgIC8vIEZJWE1F
OiBPdGhlciBwb3J0cyBhbHNvIGNsZWFyIGhpc3RvcnkvYmFja0ZvcndhcmRMaXN0IGFsbG9uZyB3
aXRoIHZpc2l0ZWQgbGlua3MuCi0gICAgICAgIHBhZ2UtPmdyb3VwKCkucmVtb3ZlVmlzaXRlZExp
bmtzKCk7Ci0gICAgICAgIGlmICgobWFpbkZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCkpKSB7Ci0g
ICAgICAgICAgICBtYWluRnJhbWUtPnRyZWUoKS0+Y2xlYXJOYW1lKCk7Ci0gICAgICAgICAgICBt
YWluRnJhbWUtPmxvYWRlcigpLT5zZXRPcGVuZXIoMCk7Ci0gICAgICAgICAgICAvLyBbV2ViS2l0
IGJ1ZyAjODY4OTldIFJlc2V0IEpTIHN0YXRlIHNldHRpbmdzLgotICAgICAgICAgICAgSlNHbG9i
YWxDb250ZXh0UmVmIGpzQ29udGV4dCA9IHRvR2xvYmFsUmVmKG1haW5GcmFtZS0+c2NyaXB0KCku
Z2xvYmFsT2JqZWN0KFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhl
YygpKTsKLSAgICAgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6cmVzZXRJbnRlcm5hbHNPYmpl
Y3QoanNDb250ZXh0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZvciBub3cgd2UgbWFu
dWFsbHkgZ2FyYmFnZSBjb2xsZWN0IGJldHdlZW4gZWFjaCB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGUg
ZGV2aWNlIHdvbid0IHJ1biBvdXQgb2YgbWVtb3J5IGR1ZSB0byBsYXp5IGNvbGxlY3Rpb24uCi0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0OjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdCgpOwotfQot
Ci12b2lkIER1bXBSZW5kZXJUcmVlOjpydW5UZXN0cygpCi17Ci0gICAgbV9nY0NvbnRyb2xsZXIg
PSBuZXcgR0NDb250cm9sbGVyKCk7Ci0gICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlciA9IG5l
dyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwotICAgIGlmICghZW5zdXJlUFBTKCkpIHsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiBQUFMgZmlsZSAnJXMnLCBlcnJv
cj0lZFxuIiwgZ2V0UFBTUGF0aCgpLmNfc3RyKCksIGVycm5vKTsKLSAgICAgICAgKG1fcGFnZS0+
Y2xpZW50KCkpLT5ub3RpZnlSdW5MYXlvdXRUZXN0c0ZpbmlzaGVkKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBtYWluRnJhbWUgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OmNvcmVQ
YWdlKG1fcGFnZSktPm1haW5GcmFtZSgpOwotCi0gICAgaWYgKGNvbnN0IGNoYXIqIHRlc3RGaWxl
ID0gZ2V0ZW52KCJkcnRUZXN0RmlsZSIpKSB7Ci0gICAgICAgIHJ1bkZyb21Db21tYW5kTGluZSA9
IHRydWU7Ci0gICAgICAgIGFkZFRlc3QodGVzdEZpbGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIEdldCBUZXN0IGZpbGUgbmFtZSBmcm9tIFBQUzogL3Bwcy9zZXJ2aWNlcy9kcnQvaW5wdXQK
LSAgICAgICAgLy8gRXhhbXBsZTogdGVzdF9maWxlOjpqcy9hcmd1bWVudHMuaHRtbAotICAgICAg
ICB3YWl0Rm9yVGVzdCgpOwotICAgIH0KLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6YWRkVGVz
dChjb25zdCBjaGFyKiB0ZXN0RmlsZSkKLXsKLSAgICBTdHJpbmcgdGVzdCh0ZXN0RmlsZSk7Ci0g
ICAgaWYgKHRlc3QgPT0gIiNET05FIikKLSAgICAgICAgZG9uZURydCgpOwotICAgIGVsc2UgaWYg
KCF0ZXN0LmlzRW1wdHkoKSkgewotICAgICAgICBpZiAobV90ZXN0cy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIC8vIE5vIHRlc3QgaXMgYmVpbmcgcnVuLCBpbml0aWFsaXplIGl0ZXJhdG9yIGFu
ZCBzdGFydCB0ZXN0Ci0gICAgICAgICAgICBtX3Rlc3RzLmFwcGVuZCh0ZXN0KTsKLSAgICAgICAg
ICAgIG1fY3VycmVudFRlc3QgPSBtX3Rlc3RzLmJlZ2luKCk7Ci0gICAgICAgICAgICBydW5DdXJy
ZW50VGVzdCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fYnVmZmVyZWRUZXN0cy5h
cHBlbmQodGVzdCk7Ci0gICAgfQotfQotCi1TdHJpbmcgRHVtcFJlbmRlclRyZWU6OmR1bXBGcmFt
ZXNBc1RleHQoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQotewotICAgIFN0cmluZyBzOwotICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IHMudXRmOCgpLmRhdGEoKTsKLQotICAgIGlmIChmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKLSAg
ICAgICAgcyA9IFN0cmluZzo6Zm9ybWF0KCJcbi0tLS0tLS0tXG5GcmFtZTogJyVzJ1xuLS0tLS0t
LS1cbiIsIGZyYW1lLT50cmVlKCktPnVuaXF1ZU5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLQotICAgIHMgPSBzICsgZG9jdW1lbnRFbGVtZW50LT5pbm5lclRleHQoKSArICJcbiI7Ci0K
LSAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpKSB7Ci0gICAgICAg
IFdlYkNvcmU6OkZyYW1lVHJlZSogdHJlZSA9IGZyYW1lLT50cmVlKCk7Ci0gICAgICAgIGZvciAo
V2ViQ29yZTo6RnJhbWUqIGNoaWxkID0gdHJlZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgcyA9IHMgKyBkdW1w
RnJhbWVzQXNUZXh0KGNoaWxkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHM7Ci19Ci0KLXN0YXRpYyB2
b2lkIGR1bXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBkYXRhKQotewotICAgIGZ3cml0ZShkYXRhLnV0
ZjgoKS5kYXRhKCksIDEsIGRhdGEudXRmOCgpLmxlbmd0aCgpLCBzdGRvdXQpOwotfQotCi1ib29s
IER1bXBSZW5kZXJUcmVlOjppc0hUVFBUZXN0KGNvbnN0IFN0cmluZyYgdGVzdCkKLXsKLSAgICBp
ZiAodGVzdC5sZW5ndGgoKSA8IHN0cmxlbihodHRwVGVzdFN5bnRheCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBTdHJpbmcgdGVzdExvd2VyID0gdGVzdC5sb3dlcigpOwotICAgIGludCBs
ZW5IdHRwVGVzdFN5bnRheCA9IHN0cmxlbihodHRwVGVzdFN5bnRheCk7Ci0gICAgcmV0dXJuIHRl
c3RMb3dlci5zdWJzdHJpbmcoMCwgbGVuSHR0cFRlc3RTeW50YXgpID09IGh0dHBUZXN0U3ludGF4
Ci0gICAgICAgICYmIHRlc3RMb3dlci5zdWJzdHJpbmcobGVuSHR0cFRlc3RTeW50YXgsIHN0cmxl
bihsb2NhbFRlc3RTeW50YXgpKSAhPSBsb2NhbFRlc3RTeW50YXg7Ci19Ci0KLXZvaWQgRHVtcFJl
bmRlclRyZWU6OmludmFsaWRhdGVBbnlQcmV2aW91c1dhaXRUb0R1bXBXYXRjaGRvZygpCi17Ci0g
ICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lci5zdG9wKCk7Ci0gICAgd2FpdEZvclBvbGljeSA9
IGZhbHNlOwotfQotCi1TdHJpbmcgRHVtcFJlbmRlclRyZWU6OnJlbmRlclRyZWVEdW1wKCkgY29u
c3QKLXsKLSAgICBpZiAobWFpbkZyYW1lKSB7Ci0gICAgICAgIGlmIChtYWluRnJhbWUtPnZpZXco
KSAmJiBtYWluRnJhbWUtPnZpZXcoKS0+bGF5b3V0UGVuZGluZygpKQotICAgICAgICAgICAgbWFp
bkZyYW1lLT52aWV3KCktPmxheW91dCgpOwotCi0gICAgICAgIHJldHVybiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKG1haW5GcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLX0KLQotc3RhdGlj
IGJvb2wgaGlzdG9yeUl0ZW1Db21wYXJlKGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpIaXN0b3J5SXRl
bT4mIGEsIGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpIaXN0b3J5SXRlbT4mIGIpCi17Ci0gICAgcmV0
dXJuIGNvZGVQb2ludENvbXBhcmUoYS0+dXJsU3RyaW5nKCksIGItPnVybFN0cmluZygpKSA8IDA7
Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZHVtcEhpc3RvcnlJdGVtKFBhc3NSZWZQdHI8V2ViQ29yZTo6
SGlzdG9yeUl0ZW0+IGl0ZW0sIGludCBpbmRlbnQsIGJvb2wgY3VycmVudCkKLXsKLSAgICBTdHJp
bmcgcmVzdWx0OwotCi0gICAgaW50IHN0YXJ0ID0gMDsKLSAgICBpZiAoY3VycmVudCkgewotICAg
ICAgICByZXN1bHQgPSByZXN1bHQgKyAiY3Vyci0+IjsKLSAgICAgICAgc3RhcnQgPSA2OwotICAg
IH0KLSAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBpbmRlbnQ7IGkrKykKLSAgICAgICAgcmVz
dWx0ID0gcmVzdWx0ICsgJyAnOwotCi0gICAgU3RyaW5nIHVybCA9IGl0ZW0tPnVybFN0cmluZygp
OwotICAgIGlmICh1cmwuY29udGFpbnMoImZpbGU6Ly8iKSkgewotICAgICAgICBzdGF0aWMgU3Ry
aW5nIGxheW91dFRlc3RzU3RyaW5nKCIvTGF5b3V0VGVzdHMvIik7Ci0gICAgICAgIHN0YXRpYyBT
dHJpbmcgZmlsZVRlc3RTdHJpbmcoIihmaWxlIHRlc3QpOiIpOwotCi0gICAgICAgIFN0cmluZyBy
ZXMgPSB1cmwuc3Vic3RyaW5nKHVybC5maW5kKGxheW91dFRlc3RzU3RyaW5nKSArIGxheW91dFRl
c3RzU3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgaWYgKHJlcy5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGZpbGVUZXN0
U3RyaW5nOwotICAgICAgICByZXN1bHQgPSByZXN1bHQgKyByZXM7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHJlc3VsdCA9IHJlc3VsdCArIHVybDsKLQotICAgIFN0cmluZyB0YXJnZXQgPSBpdGVtLT50
YXJnZXQoKTsKLSAgICBpZiAoIXRhcmdldC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdCA9IHJl
c3VsdCArICIgKGluIGZyYW1lIFwiIiArIHRhcmdldCArICJcIikiOwotCi0gICAgaWYgKGl0ZW0t
PmlzVGFyZ2V0SXRlbSgpKQotICAgICAgICByZXN1bHQgPSByZXN1bHQgKyAiICAqKm5hdiB0YXJn
ZXQqKiI7Ci0gICAgcmVzdWx0ID0gcmVzdWx0ICsgJ1xuJzsKLQotICAgIFdlYkNvcmU6Okhpc3Rv
cnlJdGVtVmVjdG9yIGNoaWxkcmVuID0gaXRlbS0+Y2hpbGRyZW4oKTsKLSAgICAvLyBNdXN0IHNv
cnQgdG8gZWxpbWluYXRlIGFyYml0cmFyeSByZXN1bHQgb3JkZXJpbmcgd2hpY2ggZGVmZWF0cyBy
ZXByb2R1Y2libGUgdGVzdGluZy4KLSAgICBub25Db3B5aW5nU29ydChjaGlsZHJlbi5iZWdpbigp
LCBjaGlsZHJlbi5lbmQoKSwgaGlzdG9yeUl0ZW1Db21wYXJlKTsKLSAgICB1bnNpZ25lZCByZXN1
bHRTaXplID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZXN1bHRTaXplOyArK2kpCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGR1bXBIaXN0b3J5SXRl
bShjaGlsZHJlbltpXSwgaW5kZW50ICsgNCwgZmFsc2UpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RhdGljIFN0cmluZyBkdW1wQmFja0ZvcndhcmRMaXN0Rm9yV2ViVmlldygpCi17Ci0g
ICAgU3RyaW5nIHJlc3VsdCA9ICJcbj09PT09PT09PT09PT09IEJhY2sgRm9yd2FyZCBMaXN0ID09
PT09PT09PT09PT09XG4iOwotICAgIC8vIEZPUk1BVDoKLSAgICAvLyAiICAgICAgICAoZmlsZSB0
ZXN0KTpmYXN0L2xvYWRlci9yZXNvdXJjZXMvY2xpY2stZnJhZ21lbnQtbGluay5odG1sICAqKm5h
diB0YXJnZXQqKiIKLSAgICAvLyAiY3Vyci0+ICAoZmlsZSB0ZXN0KTpmYXN0L2xvYWRlci9yZXNv
dXJjZXMvY2xpY2stZnJhZ21lbnQtbGluay5odG1sI3Rlc3RmcmFnbWVudCAgKipuYXYgdGFyZ2V0
KioiCi0gICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0QmxhY2tCZXJyeSogYmZMaXN0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0QmxhY2tCZXJyeSo+KG1haW5GcmFtZS0+
cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jbGllbnQoKSk7Ci0KLSAgICBpbnQgbWF4SXRlbXMgPSBi
Zkxpc3QtPmNhcGFjaXR5KCk7Ci0gICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW1WZWN0b3IgZW50cmll
czsKLSAgICBiZkxpc3QtPmJhY2tMaXN0V2l0aExpbWl0KG1heEl0ZW1zLCBlbnRyaWVzKTsKLSAg
ICB1bnNpZ25lZCByZXN1bHRTaXplID0gZW50cmllcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlc3VsdFNpemU7ICsraSkKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsg
ZHVtcEhpc3RvcnlJdGVtKGVudHJpZXNbaV0sIDgsIGZhbHNlKTsKLQotICAgIHJlc3VsdCA9IHJl
c3VsdCArIGR1bXBIaXN0b3J5SXRlbShiZkxpc3QtPmN1cnJlbnRJdGVtKCksIDgsIHRydWUpOwot
Ci0gICAgYmZMaXN0LT5mb3J3YXJkTGlzdFdpdGhMaW1pdChtYXhJdGVtcywgZW50cmllcyk7Ci0g
ICAgcmVzdWx0U2l6ZSA9IGVudHJpZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZXN1bHRTaXplOyArK2kpCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGR1bXBIaXN0
b3J5SXRlbShlbnRyaWVzW2ldLCA4LCBmYWxzZSk7Ci0KLSAgICByZXN1bHQgPSByZXN1bHQgKyAg
Ij09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZHVtcCgpCi17Ci0g
ICAgaWYgKHRlc3REb25lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnZhbGlkYXRlQW55UHJl
dmlvdXNXYWl0VG9EdW1wV2F0Y2hkb2coKTsKLQotICAgIFN0cmluZyBkdW1wRmlsZSA9IG1fcmVz
dWx0c0RpciArICptX2N1cnJlbnRUZXN0ICsgIi5kdW1wIjsKLQotICAgIFN0cmluZyByZXN1bHRN
aW1lVHlwZSA9ICJ0ZXh0L3BsYWluIjsKLSAgICBTdHJpbmcgcmVzcG9uc2VNaW1lVHlwZSA9IG1h
aW5GcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKTsK
LQotICAgIGJvb2wgZHVtcEFzVGV4dCA9IGdUZXN0UnVubmVyLT5kdW1wQXNUZXh0KCkgfHwgcmVz
cG9uc2VNaW1lVHlwZSA9PSAidGV4dC9wbGFpbiI7Ci0gICAgU3RyaW5nIGRhdGEgPSBkdW1wQXNU
ZXh0ID8gZHVtcEZyYW1lc0FzVGV4dChtYWluRnJhbWUpIDogcmVuZGVyVHJlZUR1bXAoKTsKLQot
ICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcEJhY2tGb3J3YXJkTGlzdCgpKQotICAgICAgICBkYXRh
ID0gZGF0YSArIGR1bXBCYWNrRm9yd2FyZExpc3RGb3JXZWJWaWV3KCk7Ci0KLSAgICBTdHJpbmcg
cmVzdWx0ID0gIkNvbnRlbnQtVHlwZTogIiArIHJlc3VsdE1pbWVUeXBlICsgIlxuIiArIGRhdGE7
Ci0KLSAgICBkdW1wVG9GaWxlKHJlc3VsdCk7Ci0KLSAgICBpZiAoIXJ1bkZyb21Db21tYW5kTGlu
ZSkgewotICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHNjZW5hcmlvcyBmb3IgZHVtcGluZyBwaXhl
bHM6Ci0gICAgICAgIC8vIDEuIFdoZW4gdGhlIHRlc3QgY2FzZSBleHBsaWNpdGx5IGFza3MgZm9y
IGl0IGJ5IGNhbGxpbmcgZHVtcEFzVGV4dCh0cnVlKSB3aXRoIHRoYXQgZXh0cmEgdHJ1ZSBwYXNz
ZWQgYXMgYSBwYXJhbWV0ZXIgdmFsdWUsIGZyb20gSmF2YVNjcmlwdAotICAgICAgICBib29sIGV4
cGxpY2l0UGl4ZWxSZXN1bHRzID0gZ1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKSAmJiBnVGVzdFJ1
bm5lci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKTsKLSAgICAgICAgLy8gMi4gV2hlbiB0aGUgdGVz
dCBjYXNlIGltcGxpY2l0bHkgYWxsb3dzIGl0IGJ5IG5vdCBjYWxsaW5nIGR1bXBBc1RleHQoKSBh
dCBhbGwgKHdpdGggbm8gcGFyYW1ldGVycykuCi0gICAgICAgIGJvb2wgaW1wbGljaXRQaXhlbFJl
c3VsdHMgPSAhZ1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKTsKLQotICAgICAgICAvLyBCdXQgb25s
eSBpZiBtX2VuYWJsZVBpeGVsVGVzdHMgaXMgc2V0LCB0byBzYXkgdGhhdCB0aGUgdXNlciB3YW50
cyB0byBydW4gcGl4ZWwgdGVzdHMgYXQgYWxsLgotICAgICAgICBib29sIGdlbmVyYXRlUGl4ZWxS
ZXN1bHRzID0gbV9lbmFibGVQaXhlbFRlc3RzICYmIChleHBsaWNpdFBpeGVsUmVzdWx0cyB8fCBp
bXBsaWNpdFBpeGVsUmVzdWx0cyk7Ci0gICAgICAgIGlmIChnZW5lcmF0ZVBpeGVsUmVzdWx0cykg
ewotICAgICAgICAgICAgLy8gc2lnbmFsIGVuZCBvZiB0ZXh0IGJsb2NrCi0gICAgICAgICAgICBm
cHV0cygiI0VPRlxuIiwgc3Rkb3V0KTsKLSAgICAgICAgICAgIGR1bXBXZWJWaWV3QXNQaXhlbHNB
bmRDb21wYXJlV2l0aEV4cGVjdGVkKGdUZXN0UnVubmVyLT5leHBlY3RlZFBpeGVsSGFzaCgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBjcmFzaEZpbGUgPSBkdW1wRmlsZSArICIuY3Jh
c2giOwotICAgICAgICB1bmxpbmsoY3Jhc2hGaWxlLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgICAg
IFN0cmluZyBkb25lRmlsZSA9ICBtX3Jlc3VsdHNEaXIgKyAqbV9jdXJyZW50VGVzdCArICIuZG9u
ZSI7Ci0gICAgICAgIGNyZWF0ZUZpbGUoZG9uZUZpbGUpOwotICAgIH0KLSAgICB0ZXN0RG9uZSA9
IHRydWU7Ci0gICAgcnVuUmVtYWluaW5nVGVzdHMoKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJl
ZTo6c2V0V2FpdFRvRHVtcFdhdGNoZG9nKGRvdWJsZSBpbnRlcnZhbCkKLXsKLSAgICBpbnZhbGlk
YXRlQW55UHJldmlvdXNXYWl0VG9EdW1wV2F0Y2hkb2coKTsKLSAgICBtX3dhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbCk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRy
ZWU6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8RHVtcFJlbmRl
clRyZWU+KikKLXsKLSAgICBnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJl
ZCgpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpwcm9jZXNzV29yayhXZWJDb3JlOjpUaW1l
cjxEdW1wUmVuZGVyVHJlZT4qKQotewotICAgIGlmICh0b3BMb2FkaW5nRnJhbWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5wcm9jZXNzV29yaygpICYm
ICFnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQotICAgICAgICBkdW1wKCk7Ci19Ci0KLXZvaWQg
RHVtcFJlbmRlclRyZWU6OmxvY2F0aW9uQ2hhbmdlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZy
YW1lKQotewotICAgIGlmIChmcmFtZSAhPSB0b3BMb2FkaW5nRnJhbWUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+
c2V0RnJvemVuKHRydWUpOyAvLyBmaXJzdCBjb21wbGV0ZSBsb2FkIGZyZWV6ZXMgdGhlIHF1ZXVl
Ci0gICAgaWYgKGdUZXN0UnVubmVyLT53YWl0VG9EdW1wKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQotICAgICAgICBtX3dvcmtUaW1l
ci5zdGFydE9uZVNob3QoMCk7Ci0gICAgZWxzZQotICAgICAgICBkdW1wKCk7Ci19Ci0KLS8vIEZy
YW1lTG9hZENsaWVudCBkZWxlZ2F0ZXMuCi1ib29sIER1bXBSZW5kZXJUcmVlOjp3aWxsU2VuZFJl
cXVlc3RGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUsIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RS
ZXNwb25zZSkKLXsKLSAgICBpZiAoIXRlc3REb25lICYmIChnVGVzdFJ1bm5lci0+d2lsbFNlbmRS
ZXF1ZXN0UmV0dXJuc051bGwoKSB8fCAoZ1Rlc3RSdW5uZXItPndpbGxTZW5kUmVxdWVzdFJldHVy
bnNOdWxsT25SZWRpcmVjdCgpICYmICFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKSkpIHsKLSAg
ICAgICAgcmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRHVtcFJlbmRl
clRyZWU6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZy
YW1lKQotewotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRD
YWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCIlcyAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2Fk
Rm9yRnJhbWVcbiIsIGRydEZyYW1lRGVzY3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCkpOwot
Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFVzZXJHZXN0dXJlSW5GcmFt
ZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCJGcmFtZSB3aXRoIHVzZXIgZ2VzdHVy
ZSBcIiVzXCIgLSBpbiBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lXG4iLCBXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSA/ICJ0cnVlIiA6ICJm
YWxzZSIpOwotCi0gICAgaWYgKCF0b3BMb2FkaW5nRnJhbWUgJiYgIXRlc3REb25lKQotICAgICAg
ICB0b3BMb2FkaW5nRnJhbWUgPSBmcmFtZTsKLQotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RS
dW5uZXItPnN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoKSkgewotICAgICAgICBwcmludGYoIiVz
IC0gc3RvcHBpbmcgbG9hZCBpbiBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIGNhbGxi
YWNrXG4iLCBkcnRGcmFtZURlc2NyaXB0aW9uKGZyYW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgZnJhbWUtPmxvYWRlcigpLT5zdG9wRm9yVXNlckNhbmNlbCgpOwotICAgIH0KLX0KLQotdm9p
ZCBEdW1wUmVuZGVyVHJlZTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiBm
cmFtZSkKLXsKLSAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiJXMgLSBkaWRDb21taXRMb2FkRm9yRnJhbWVc
biIsIGRydEZyYW1lRGVzY3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgZ1Rl
c3RSdW5uZXItPnNldFdpbmRvd0lzS2V5KHRydWUpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVl
OjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQot
ewotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFj
a3MoKSkKLSAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJy
b3JcbiIsIGRydEZyYW1lRGVzY3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAg
bG9jYXRpb25DaGFuZ2VGb3JGcmFtZShmcmFtZSk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6
OmRpZEZhaWxMb2FkRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQotewotICAgIGlmICgh
dGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAg
ICAgcHJpbnRmKCIlcyAtIGRpZEZhaWxMb2FkV2l0aEVycm9yXG4iLCBkcnRGcmFtZURlc2NyaXB0
aW9uKGZyYW1lKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGxvY2F0aW9uQ2hhbmdlRm9yRnJhbWUo
ZnJhbWUpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUo
V2ViQ29yZTo6RnJhbWUqIGZyYW1lKQotewotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5u
ZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZp
bmlzaExvYWRGb3JGcmFtZVxuIiwgZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFtZSkudXRmOCgpLmRh
dGEoKSk7Ci0KLSAgICBpZiAoZnJhbWUgPT0gdG9wTG9hZGluZ0ZyYW1lKSB7Ci0gICAgICAgIG1f
bG9hZEZpbmlzaGVkID0gdHJ1ZTsKLSAgICAgICAgbG9jYXRpb25DaGFuZ2VGb3JGcmFtZShmcmFt
ZSk7Ci0gICAgfQotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRGaW5pc2hEb2N1bWVudExv
YWRGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCi17Ci0gICAgaWYgKCF0ZXN0RG9uZSkg
ewotICAgICAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAg
ICAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZVxuIiwg
ZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFtZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgdW5zaWduZWQgcGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzID0gZnJhbWUt
PmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5wZW5kaW5nVW5sb2FkRXZlbnRMaXN0ZW5lcnMoKTsK
LSAgICAgICAgICAgIGlmIChwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMpCi0gICAgICAgICAgICAg
ICAgcHJpbnRmKCIlcyAtIGhhcyAldSBvbnVubG9hZCBoYW5kbGVyKHMpXG4iLCBkcnRGcmFtZURl
c2NyaXB0aW9uKGZyYW1lKS51dGY4KCkuZGF0YSgpLCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRDbGVhcldp
bmRvd09iamVjdEluV29ybGQoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkKiwgSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCkKLXsKLSAgICBKU1ZhbHVl
UmVmIGV4Y2VwdGlvbiA9IDA7Ci0KLSAgICBnVGVzdFJ1bm5lci0+bWFrZVdpbmRvd09iamVjdChj
b250ZXh0LCB3aW5kb3dPYmplY3QsICZleGNlcHRpb24pOwotICAgIEFTU0VSVCghZXhjZXB0aW9u
KTsKLQotICAgIG1fZ2NDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRv
d09iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAgbV9h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3dP
YmplY3QsICZleGNlcHRpb24pOwotICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKLQotICAgIEpTU3Ry
aW5nUmVmIGV2ZW50U2VuZGVyU3RyID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImV2
ZW50U2VuZGVyIik7Ci0gICAgSlNWYWx1ZVJlZiBldmVudFNlbmRlciA9IG1ha2VFdmVudFNlbmRl
cihjb250ZXh0KTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVj
dCwgZXZlbnRTZW5kZXJTdHIsIGV2ZW50U2VuZGVyLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCAwKTsKLSAgICBKU1N0cmluZ1Jl
bGVhc2UoZXZlbnRTZW5kZXJTdHIpOwotICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50
ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRSZWNl
aXZlVGl0bGVGb3JGcmFtZShjb25zdCBTdHJpbmcmIHRpdGxlLCBXZWJDb3JlOjpGcmFtZSogZnJh
bWUpCi17Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpKQotICAgICAgICBwcmludGYoIiVzIC0gZGlkUmVjZWl2ZVRpdGxlOiAlc1xuIiwg
ZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFtZSkudXRmOCgpLmRhdGEoKSwgdGl0bGUudXRmOCgpLmRh
dGEoKSk7Ci0KLSAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBUaXRsZUNoYW5nZXMoKSkKLSAgICAg
ICAgcHJpbnRmKCJUSVRMRSBDSEFOR0VEOiAlc1xuIiwgdGl0bGUudXRmOCgpLmRhdGEoKSk7Ci19
Ci0KLS8vIENocm9tZUNsaWVudCBkZWxlZ2F0ZXMuCi12b2lkIER1bXBSZW5kZXJUcmVlOjphZGRN
ZXNzYWdlVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBwcmludGYoIkNPTlNPTEUgTUVTU0FHRTogIik7Ci0g
ICAgaWYgKGxpbmVOdW1iZXIpCi0gICAgICAgIHByaW50ZigibGluZSAlZDogIiwgbGluZU51bWJl
cik7Ci0gICAgU3RyaW5nIG5ld01lc3NhZ2UgPSBtZXNzYWdlOwotICAgIGludCBwb3MgPSBtZXNz
YWdlLmZpbmQoImZpbGU6Ly8iKTsKLSAgICBpZiAocG9zID49IDApIHsKLSAgICAgICAgbmV3TWVz
c2FnZSA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIHBvcyk7Ci0gICAgICAgIFN0cmluZyByZW1haW5p
bmcgPSBtZXNzYWdlLnN1YnN0cmluZyhwb3MpOwotICAgICAgICBTdHJpbmcgZmlsZU5hbWU7Ci0g
ICAgICAgIGludCBpbmRleEZpbGUgPSByZW1haW5pbmcucmV2ZXJzZUZpbmQoJy8nKSArIDE7Ci0g
ICAgICAgIGlmIChpbmRleEZpbGUgPiAwICYmIHVuc2lnbmVkKGluZGV4RmlsZSkgPCByZW1haW5p
bmcubGVuZ3RoKCkpCi0gICAgICAgICAgICBmaWxlTmFtZSA9IHJlbWFpbmluZy5zdWJzdHJpbmco
aW5kZXhGaWxlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmlsZU5hbWUgPSAiZmlsZToi
OwotICAgICAgICBuZXdNZXNzYWdlLmFwcGVuZChmaWxlTmFtZSk7Ci0gICAgfQotICAgIHByaW50
ZigiJXNcbiIsIG5ld01lc3NhZ2UudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRl
clRyZWU6OnJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAg
aWYgKCF0ZXN0RG9uZSkKLSAgICAgICAgcHJpbnRmKCJBTEVSVDogJXNcbiIsIG1lc3NhZ2UudXRm
OCgpLmRhdGEoKSk7Ci19Ci0KLWJvb2wgRHVtcFJlbmRlclRyZWU6OnJ1bkphdmFTY3JpcHRDb25m
aXJtKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoIXRlc3REb25lKQotICAgICAg
ICBwcmludGYoIkNPTkZJUk06ICVzXG4iLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1TdHJpbmcgRHVtcFJlbmRlclRyZWU6OnJ1bkphdmFTY3JpcHRQcm9t
cHQoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSkKLXsK
LSAgICBpZiAoIXRlc3REb25lKQotICAgICAgICBwcmludGYoIlBST01QVDogJXMsIGRlZmF1bHQg
dGV4dDogJXNcbiIsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSwgZGVmYXVsdFZhbHVlLnV0ZjgoKS5k
YXRhKCkpOwotICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci19Ci0KLWJvb2wgRHVtcFJlbmRlclRy
ZWU6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKCF0ZXN0RG9uZSkKLSAgICAgICAgcHJpbnRmKCJDT05GSVJNIE5BVklHQVRJT046
ICVzXG4iLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIER1bXBSZW5kZXJUcmVlOjpzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgc3RhdHVzKQot
ewotICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFN0YXR1c0NhbGxiYWNrcygpKQotICAgICAgICBw
cmludGYoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDolc1xuIiwg
c3RhdHVzLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpleGNlZWRl
ZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBEYXRh
YmFzZUNhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIlVJIERFTEVHQVRFIERBVEFCQVNFIENB
TExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp7JXMsICVzLCAl
aX0gZGF0YWJhc2U6JXNcbiIsIG9yaWdpbi0+cHJvdG9jb2woKS51dGY4KCkuZGF0YSgpLCBvcmln
aW4tPmhvc3QoKS51dGY4KCkuZGF0YSgpLCBvcmlnaW4tPnBvcnQoKSwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKLQotICAgIFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlciYgbWFuYWdlciA9IFdlYkNvcmU6
OkRhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpOyAKLSAgICBXZWJDb3JlOjpEYXRhYmFzZURldGFp
bHMgZGV0YWlscyA9IGRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKG5hbWUsIG9yaWdpbik7Ci0gICAg
dW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKLSAgICBk
b3VibGUgdGVzdERlZmF1bHRRdW90YSA9IGdUZXN0UnVubmVyLT5kYXRhYmFzZURlZmF1bHRRdW90
YSgpOwotICAgIGlmICh0ZXN0RGVmYXVsdFF1b3RhID49IDApCi0gICAgICAgIGRlZmF1bHRRdW90
YSA9IHRlc3REZWZhdWx0UXVvdGE7Ci0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmV3UXVvdGEg
PSBkZWZhdWx0UXVvdGE7Ci0KLSAgICBkb3VibGUgbWF4UXVvdGEgPSBnVGVzdFJ1bm5lci0+ZGF0
YWJhc2VNYXhRdW90YSgpOwotICAgIGlmIChtYXhRdW90YSA+PSAwKSB7Ci0gICAgICAgIGlmIChk
ZWZhdWx0UXVvdGEgPCBleHBlY3RlZFNpemUgJiYgZXhwZWN0ZWRTaXplIDw9IG1heFF1b3RhKSB7
Ci0gICAgICAgICAgICBuZXdRdW90YSA9IGV4cGVjdGVkU2l6ZTsKLSAgICAgICAgICAgIHByaW50
ZigiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGluY3JlYXNlZCBxdW90YSB0byAlbGx1
XG4iLCBuZXdRdW90YSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbWFuYWdlci5zZXRRdW90YShv
cmlnaW4sIG5ld1F1b3RhKTsKLX0KLQotYm9vbCBEdW1wUmVuZGVyVHJlZTo6YWxsb3dzT3Blbmlu
Z1dpbmRvdygpCi17Ci0gICAgcmV0dXJuIGdUZXN0UnVubmVyLT5jYW5PcGVuV2luZG93cygpOwot
fQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjp3aW5kb3dDcmVhdGVkKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViUGFnZSogcGFnZSkKLXsKLSAgICBwYWdlLT5zZXR0aW5ncygpLT5zZXRKYXZhU2NyaXB0
T3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KHRydWUpOwotfQotCi0vLyBFZGl0b3JDbGllbnQgZGVs
ZWdhdGVzLgotdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkQmVnaW5FZGl0aW5nKCkKLXsKLSAgICBp
ZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAg
ICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6JXNc
biIsICJXZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uIik7Ci19Ci0KLXZvaWQgRHVt
cFJlbmRlclRyZWU6OmRpZEVuZEVkaXRpbmcoKQotewotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rl
c3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiRURJVElO
RyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6JXNcbiIsICJXZWJWaWV3RGlkRW5kRWRp
dGluZ05vdGlmaWNhdGlvbiIpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRDaGFuZ2Uo
KQotewotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpCi0gICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5n
ZTolc1xuIiwgIldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24iKTsKLX0KLQotdm9pZCBEdW1w
UmVuZGVyVHJlZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKCkKLXsKLSAgICBpZiAoIXRlc3REb25lICYm
IGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIkVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246JXNcbiIsICJXZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uIik7Ci19Ci0KLWJvb2wgRHVtcFJlbmRlclRy
ZWU6OnNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQot
ewotICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpCi0gICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5n
SW5ET01SYW5nZTolc1xuIiwgZHJ0UmFuZ2VEZXNjcmlwdGlvbihyYW5nZSkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgcmV0dXJuIG1fYWNjZXB0c0VkaXRpbmc7Ci19Ci0KLWJvb2wgRHVtcFJlbmRlclRy
ZWU6OnNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlKFdlYkNvcmU6OlJhbmdlKiByYW5nZSkKLXsK
LSAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygp
KQotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRP
TVJhbmdlOiVzXG4iLCBkcnRSYW5nZURlc2NyaXB0aW9uKHJhbmdlKS51dGY4KCkuZGF0YSgpKTsK
LSAgICByZXR1cm4gbV9hY2NlcHRzRWRpdGluZzsKLX0KLQotYm9vbCBEdW1wUmVuZGVyVHJlZTo6
c2hvdWxkRGVsZXRlRE9NUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQotewotICAgIGlmICgh
dGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAg
IHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkRGVsZXRlRE9NUmFuZ2U6JXNcbiIsIGRy
dFJhbmdlRGVzY3JpcHRpb24ocmFuZ2UpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBtX2Fj
Y2VwdHNFZGl0aW5nOwotfQotCi1ib29sIER1bXBSZW5kZXJUcmVlOjpzaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlVG9ET01SYW5nZUFmZmluaXR5U3RpbGxTZWxlY3RpbmcoV2ViQ29yZTo6UmFu
Z2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIGludCBhZmZpbml0eSwgYm9v
bCBzdGlsbFNlbGVjdGluZykKLXsKLSAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5k
dW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6
IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6JXMgdG9ET01SYW5nZTolcyBhZmZpbml0eTol
cyBzdGlsbFNlbGVjdGluZzolc1xuIiwgZHJ0UmFuZ2VEZXNjcmlwdGlvbihmcm9tUmFuZ2UpLnV0
ZjgoKS5kYXRhKCksIGRydFJhbmdlRGVzY3JpcHRpb24odG9SYW5nZSkudXRmOCgpLmRhdGEoKSwg
ZHJ0QWZmaW5pdHlEZXNjcmlwdGlvbihzdGF0aWNfY2FzdDxXZWJDb3JlOjpFQWZmaW5pdHk+KGFm
ZmluaXR5KSkudXRmOCgpLmRhdGEoKSwgc3RpbGxTZWxlY3RpbmcgPyAiVFJVRSIgOiAiRkFMU0Ui
KTsKLSAgICByZXR1cm4gbV9hY2NlcHRzRWRpdGluZzsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIq
IGluc2VydEFjdGlvblN0cmluZyhXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQot
ewotICAgIHN3aXRjaCAoYWN0aW9uKSB7Ci0gICAgY2FzZSBXZWJDb3JlOjpFZGl0b3JJbnNlcnRB
Y3Rpb25UeXBlZDoKLSAgICAgICAgcmV0dXJuICJXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQiOwot
ICAgIGNhc2UgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkOgotICAgICAgICByZXR1
cm4gIldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWQiOwotICAgIGNhc2UgV2ViQ29yZTo6RWRpdG9y
SW5zZXJ0QWN0aW9uRHJvcHBlZDoKLSAgICAgICAgcmV0dXJuICJXZWJWaWV3SW5zZXJ0QWN0aW9u
RHJvcHBlZCI7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAi
V2ViVmlld0luc2VydEFjdGlvblR5cGVkIjsKLX0KLQotYm9vbCBEdW1wUmVuZGVyVHJlZTo6c2hv
dWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlKiBub2RlLCBXZWJDb3JlOjpSYW5nZSogcmFuZ2Us
IGludCBhY3Rpb24pCi17Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91
bGRJbnNlcnROb2RlOiVzIHJlcGxhY2luZ0RPTVJhbmdlOiVzIGdpdmVuQWN0aW9uOiVzXG4iLCBk
cnREdW1wUGF0aChub2RlKS51dGY4KCkuZGF0YSgpLCBkcnRSYW5nZURlc2NyaXB0aW9uKHJhbmdl
KS51dGY4KCkuZGF0YSgpLCBpbnNlcnRBY3Rpb25TdHJpbmcoKFdlYkNvcmU6OkVkaXRvckluc2Vy
dEFjdGlvbilhY3Rpb24pKTsKLSAgICByZXR1cm4gbV9hY2NlcHRzRWRpdGluZzsKLX0KLQotYm9v
bCBEdW1wUmVuZGVyVHJlZTo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFdl
YkNvcmU6OlJhbmdlKiByYW5nZSwgaW50IGFjdGlvbikKLXsKLSAgICBpZiAoIXRlc3REb25lICYm
IGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydFRleHQ6JXMgcmVwbGFjaW5nRE9NUmFuZ2U6JXMg
Z2l2ZW5BY3Rpb246JXNcbiIsIHRleHQudXRmOCgpLmRhdGEoKSwgZHJ0UmFuZ2VEZXNjcmlwdGlv
bihyYW5nZSkudXRmOCgpLmRhdGEoKSwgaW5zZXJ0QWN0aW9uU3RyaW5nKChXZWJDb3JlOjpFZGl0
b3JJbnNlcnRBY3Rpb24pYWN0aW9uKSk7Ci0gICAgcmV0dXJuIG1fYWNjZXB0c0VkaXRpbmc7Ci19
Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b24oY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKLXsKLSAg
ICBpZiAodGVzdERvbmUgfHwgIW1fcG9saWN5RGVsZWdhdGVFbmFibGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjb25zdCBjaGFyKiB0eXBlRGVzY3JpcHRpb247Ci0gICAgc3dpdGNoIChhY3Rp
b24udHlwZSgpKSB7Ci0gICAgY2FzZSBXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZUxpbmtDbGlja2Vk
OgotICAgICAgICB0eXBlRGVzY3JpcHRpb24gPSAibGluayBjbGlja2VkIjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZUZvcm1TdWJtaXR0ZWQ6Ci0gICAg
ICAgIHR5cGVEZXNjcmlwdGlvbiA9ICJmb3JtIHN1Ym1pdHRlZCI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgV2ViQ29yZTo6TmF2aWdhdGlvblR5cGVCYWNrRm9yd2FyZDoKLSAgICAgICAgdHlw
ZURlc2NyaXB0aW9uID0gImJhY2svZm9yd2FyZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V2ViQ29yZTo6TmF2aWdhdGlvblR5cGVSZWxvYWQ6Ci0gICAgICAgIHR5cGVEZXNjcmlwdGlvbiA9
ICJyZWxvYWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25U
eXBlRm9ybVJlc3VibWl0dGVkOgotICAgICAgICB0eXBlRGVzY3JpcHRpb24gPSAiZm9ybSByZXN1
Ym1pdHRlZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViQ29yZTo6TmF2aWdhdGlvblR5
cGVPdGhlcjoKLSAgICAgICAgdHlwZURlc2NyaXB0aW9uID0gIm90aGVyIjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgdHlwZURlc2NyaXB0aW9uID0gImlsbGVnYWwgdmFs
dWUiOwotICAgIH0KLQotICAgIGJvb2wgc2hvdWxkV2FpdEZvclJlc3BvbnNlID0gIXJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCkuc3RhcnRzV2l0aCgibWFpbHRvOiIpOwotICAgIHByaW50ZigiUG9saWN5
IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgJXMgd2l0aCBuYXZpZ2F0aW9uIHR5cGUgJyVzJyIs
IHJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdHlwZURlc2NyaXB0aW9uKTsK
LSAgICAvLyBPcmlnaW5hdGluZyBwYXJ0LCBib3Jyb3dlZCBmcm9tIENocm9taXVtLgotICAgIFJl
ZlB0cjxXZWJDb3JlOjpOb2RlPiBub2RlOwotICAgIGZvciAoY29uc3QgV2ViQ29yZTo6RXZlbnQq
IGV2ZW50ID0gYWN0aW9uLmV2ZW50KCk7IGV2ZW50OyBldmVudCA9IGV2ZW50LT51bmRlcmx5aW5n
RXZlbnQoKSkgewotICAgICAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7Ci0gICAgICAg
ICAgICBjb25zdCBXZWJDb3JlOjpNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8
Y29uc3QgV2ViQ29yZTo6TW91c2VFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgICAgIG5vZGUgPSBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1vdXNlRXZlbnQtPmFi
c29sdXRlTG9jYXRpb24oKSwgZmFsc2UpLmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5vZGUuZ2V0KCkpCi0gICAgICAg
IHByaW50ZigiIG9yaWdpbmF0aW5nIGZyb20gJXNcbiIsIGRydER1bXBQYXRoKG5vZGUuZ2V0KCkp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIGVsc2UKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotCi0gICAg
aWYgKHdhaXRGb3JQb2xpY3kgJiYgIXNob3VsZFdhaXRGb3JSZXNwb25zZSkKLSAgICAgICAgZ1Rl
c3RSdW5uZXItPm5vdGlmeURvbmUoKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkRGVj
aWRlUG9saWN5Rm9yUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCi17Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBtX3BvbGljeURlbGVnYXRlRW5hYmxlZCkg
ewotICAgICAgICBpZiAoV2ViQ29yZTo6Y29udGVudERpc3Bvc2l0aW9uVHlwZShyZXNwb25zZS5o
dHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtRGlzcG9zaXRpb24iKSkgPT0gV2ViQ29yZTo6Q29udGVu
dERpc3Bvc2l0aW9uQXR0YWNobWVudCkKLSAgICAgICAgICAgIHByaW50ZigiUG9saWN5IGRlbGVn
YXRlOiByZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lICclcydc
biIsIHJlc3BvbnNlLnN1Z2dlc3RlZEZpbGVuYW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
IGlmICh3YWl0Rm9yUG9saWN5KQotICAgICAgICAgICAgZ1Rlc3RSdW5uZXItPm5vdGlmeURvbmUo
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZERpc3BhdGNoV2lsbFBlcmZv
cm1DbGllbnRSZWRpcmVjdCgpCi17Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+
ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCJG
cmFtZSB3aXRoIHVzZXIgZ2VzdHVyZSBcIiVzXCIgLSBpbiB3aWxsUGVyZm9ybUNsaWVudFJlZGly
ZWN0XG4iLCBXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUo
KSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRIYW5k
bGVPbmxvYWRFdmVudHNGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCi17Ci0gICAgaWYg
KCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQotICAg
ICAgICBwcmludGYoIiVzIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWVcbiIsIGRydEZy
YW1lRGVzY3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIER1bXBSZW5k
ZXJUcmVlOjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSosIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIGlmICghdGVzdERv
bmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkpCi0gICAg
ICAgIHByaW50ZigiJXMgaGFzIE1JTUUgdHlwZSAlc1xuIiwgcmVzcG9uc2UudXJsKCkubGFzdFBh
dGhDb21wb25lbnQoKS51dGY4KCkuZGF0YSgpLCByZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKS5k
YXRhKCkpOwotfQotCi1ib29sIER1bXBSZW5kZXJUcmVlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKLXsKLSAgICBpZiAo
IWdUZXN0UnVubmVyLT5oYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKCkpIHsKLSAgICAg
ICAgY3JlZGVudGlhbCA9IFdlYkNvcmU6OkNyZWRlbnRpYWwoKTsKLSAgICAgICAgcHJpbnRmKCIl
cyAtIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAtIFNpbXVsYXRpbmcgY2FuY2Vs
bGVkIGF1dGhlbnRpY2F0aW9uXG4iLCBkcnRDcmVkZW50aWFsRGVzY3JpcHRpb24oY3JlZGVudGlh
bCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY29u
c3QgY2hhciogdXNlciA9IGdUZXN0UnVubmVyLT5hdXRoZW50aWNhdGlvblVzZXJuYW1lKCkuY19z
dHIoKTsKLSAgICBjb25zdCBjaGFyKiBwYXNzd29yZCA9IGdUZXN0UnVubmVyLT5hdXRoZW50aWNh
dGlvblBhc3N3b3JkKCkuY19zdHIoKTsKLSAgICBjcmVkZW50aWFsID0gV2ViQ29yZTo6Q3JlZGVu
dGlhbCh1c2VyLCBwYXNzd29yZCwgV2ViQ29yZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vz
c2lvbik7Ci0gICAgcHJpbnRmKCIlcyAtIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSAtIFJlc3BvbmRpbmcgd2l0aCAlczolc1xuIiwgZHJ0Q3JlZGVudGlhbERlc2NyaXB0aW9uKGNy
ZWRlbnRpYWwpLnV0ZjgoKS5kYXRhKCksIHVzZXIsIHBhc3N3b3JkKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZTo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9v
bCBzZXREZWxlZ2F0ZSwgYm9vbCBwZXJtaXNzaXZlKQotewotICAgIG1fcG9saWN5RGVsZWdhdGVF
bmFibGVkID0gc2V0RGVsZWdhdGU7Ci0gICAgbV9wb2xpY3lEZWxlZ2F0ZUlzUGVybWlzc2l2ZSA9
IHBlcm1pc3NpdmU7Ci19Ci19Ci19Ci0KLS8vIFN0YXRpYyBkdW1wKCkgZnVuY3Rpb24gcmVxdWly
ZWQgYnkgY3Jvc3MtcGxhdGZvcm0gRFJUIGNvZGUuCi12b2lkIGR1bXAoKQotewotICAgIEJsYWNr
QmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWUqIGR1bXBlciA9IEJsYWNrQmVycnk6OldlYktp
dDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpOwotICAgIGlmICghZHVtcGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBkdW1wZXItPmR1bXAoKTsKLX0KSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvRHVtcFJlbmRlclRyZWVCbGFja0JlcnJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9EdW1wUmVuZGVyVHJlZUJs
YWNrQmVycnkuaAkocmV2aXNpb24gMTYxNjA2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxh
Y2tiZXJyeS9EdW1wUmVuZGVyVHJlZUJsYWNrQmVycnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSwx
NTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaWZuZGVmIER1bXBSZW5kZXJUcmVlQmxhY2tCZXJyeV9oCi0jZGVmaW5l
IER1bXBSZW5kZXJUcmVlQmxhY2tCZXJyeV9oCi0KLSNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFs
LmgiCi0KLQotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlQ2xpZW50LmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1MYXlvdXRUZXN0Lmg+Ci0jaW5jbHVk
ZSA8RmluZE9wdGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENyZWRlbnRp
YWw7Ci1jbGFzcyBET01XcmFwcGVyV29ybGQ7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIFJhbmdlOwot
fQotCi1leHRlcm4gV2ViQ29yZTo6RnJhbWUqIG1haW5GcmFtZTsKLWV4dGVybiBXZWJDb3JlOjpG
cmFtZSogdG9wTG9hZGluZ0ZyYW1lOwotZXh0ZXJuIGJvb2wgd2FpdEZvclBvbGljeTsKLQotY2xh
c3MgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7Ci1jbGFzcyBHQ0NvbnRyb2xsZXI7Ci0KLW5hbWVz
cGFjZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViUGFnZTsKLQot
Y2xhc3MgRHVtcFJlbmRlclRyZWUgOiBwdWJsaWMgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVu
ZGVyVHJlZUNsaWVudCwgcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMYXlvdXRUZXN0Q2xp
ZW50IHsKLXB1YmxpYzoKLSAgICBEdW1wUmVuZGVyVHJlZShXZWJQYWdlKik7Ci0gICAgdmlydHVh
bCB+RHVtcFJlbmRlclRyZWUoKTsKLQotICAgIHN0YXRpYyBEdW1wUmVuZGVyVHJlZSogY3VycmVu
dEluc3RhbmNlKCkgeyByZXR1cm4gc19jdXJyZW50SW5zdGFuY2U7IH0KLQotICAgIHZvaWQgZHVt
cCgpOwotCi0gICAgdm9pZCBzZXRXYWl0VG9EdW1wV2F0Y2hkb2coZG91YmxlIGludGVydmFsKTsK
LQotICAgIFdlYlBhZ2UqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2U7IH0KLQotICAgIGJvb2wgbG9h
ZEZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkRmluaXNoZWQ7IH0KLQotICAgIC8vIEZy
YW1lTG9hZGVyQ2xpZW50IGRlbGVnYXRlcwotICAgIGJvb2wgd2lsbFNlbmRSZXF1ZXN0Rm9yRnJh
bWUoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKik7Ci0gICAgdm9pZCBkaWRDb21taXRMb2FkRm9yRnJh
bWUoV2ViQ29yZTo6RnJhbWUqKTsKLSAgICB2b2lkIGRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JG
cmFtZShXZWJDb3JlOjpGcmFtZSopOwotICAgIHZvaWQgZGlkRmFpbExvYWRGb3JGcmFtZShXZWJD
b3JlOjpGcmFtZSopOwotICAgIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKFdlYkNvcmU6OkZy
YW1lKik7Ci0gICAgdm9pZCBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZShXZWJDb3JlOjpG
cmFtZSopOwotICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKFdlYkNvcmU6OkRP
TVdyYXBwZXJXb3JsZCosIEpTR2xvYmFsQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2Jq
ZWN0KTsKLSAgICB2b2lkIGRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKGNvbnN0IFN0cmluZyYgdGl0
bGUsIFdlYkNvcmU6OkZyYW1lKik7Ci0gICAgdm9pZCBkaWREZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpGcmFtZSopOwotICAgIHZvaWQgZGlkRGVjaWRl
UG9saWN5Rm9yUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAg
IHZvaWQgZGlkRGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KCk7Ci0gICAgdm9pZCBk
aWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotICAgIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgYm9vbCBwb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX3BvbGljeURlbGVnYXRlRW5hYmxlZDsgfQotICAgIGJvb2wgcG9saWN5
RGVsZWdhdGVJc1Blcm1pc3NpdmUoKSBjb25zdCB7IHJldHVybiBtX3BvbGljeURlbGVnYXRlSXNQ
ZXJtaXNzaXZlOyB9Ci0KLSAgICAvLyBDaHJvbWVDbGllbnQgZGVsZWdhdGVzCi0gICAgdm9pZCBh
ZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51
bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7Ci0gICAgdm9pZCBydW5KYXZhU2NyaXB0QWxl
cnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHJ1bkphdmFTY3JpcHRDb25maXJt
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgU3RyaW5nIHJ1bkphdmFTY3JpcHRQcm9tcHQo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSk7Ci0gICAg
Ym9vbCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
LSAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBleGNlZWRl
ZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5h
bWUpOwotICAgIGJvb2wgYWxsb3dzT3BlbmluZ1dpbmRvdygpOwotICAgIHZvaWQgd2luZG93Q3Jl
YXRlZChXZWJQYWdlKik7Ci0KLSAgICAvLyBFZGl0b3JDbGllbnQgZGVsZWdhdGVzCi0gICAgdm9p
ZCBzZXRBY2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKSB7IG1fYWNjZXB0c0VkaXRp
bmcgPSBhY2NlcHRzRWRpdGluZzsgfQotCi0gICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKTsKLSAg
ICB2b2lkIGRpZEVuZEVkaXRpbmcoKTsKLSAgICB2b2lkIGRpZENoYW5nZSgpOwotICAgIHZvaWQg
ZGlkQ2hhbmdlU2VsZWN0aW9uKCk7Ci0gICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJh
bmdlKFdlYkNvcmU6OlJhbmdlKik7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5n
ZShXZWJDb3JlOjpSYW5nZSopOwotICAgIGJvb2wgc2hvdWxkRGVsZXRlRE9NUmFuZ2UoV2ViQ29y
ZTo6UmFuZ2UqKTsKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2VUb0RPTVJh
bmdlQWZmaW5pdHlTdGlsbFNlbGVjdGluZyhXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJD
b3JlOjpSYW5nZSogdG9SYW5nZSwgaW50IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKTsK
LSAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OlJhbmdl
KiwgaW50IGluc2VydEFjdGlvbik7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwgaW50IGluc2VydEFjdGlvbik7Ci0KLSAgICBib29sIGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpDcmVkZW50aWFsJik7Ci0K
LSAgICAvLyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6QmxhY2tCZXJyeVBsYXRmb3JtTGF5b3V0VGVz
dENsaWVudCBtZXRob2QKLSAgICB2aXJ0dWFsIHZvaWQgYWRkVGVzdChjb25zdCBjaGFyKiB0ZXN0
RmlsZSk7Ci0gICAgdm9pZCBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRl
LCBib29sIHBlcm1pc3NpdmUpOwotcHJpdmF0ZToKLSAgICB2b2lkIHJ1blRlc3QoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgaW1hZ2VIYXNoKTsKLSAgICB2b2lkIHJ1blRlc3RzKCk7
Ci0gICAgdm9pZCBydW5DdXJyZW50VGVzdCgpOwotCi0gICAgdm9pZCBwcm9jZXNzV29yayhXZWJD
b3JlOjpUaW1lcjxEdW1wUmVuZGVyVHJlZT4qKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgRHVt
cFJlbmRlclRyZWUqIHNfY3VycmVudEluc3RhbmNlOwotCi0gICAgU3RyaW5nIGR1bXBGcmFtZXNB
c1RleHQoV2ViQ29yZTo6RnJhbWUqKTsKLSAgICB2b2lkIGxvY2F0aW9uQ2hhbmdlRm9yRnJhbWUo
V2ViQ29yZTo6RnJhbWUqKTsKLQotICAgIHZvaWQgZG9uZURydCgpOwotICAgIGJvb2wgaXNIVFRQ
VGVzdChjb25zdCBTdHJpbmcmIHRlc3QpOwotICAgIFN0cmluZyByZW5kZXJUcmVlRHVtcCgpIGNv
bnN0OwotICAgIHZvaWQgcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgaW1hZ2VIYXNoKTsKLSAgICB2b2lkIHJ1blJlbWFp
bmluZ1Rlc3RzKCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQW55UHJldmlvdXNXYWl0VG9EdW1wV2F0
Y2hkb2coKTsKLSAgICB2b2lkIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoV2ViQ29yZTo6
VGltZXI8RHVtcFJlbmRlclRyZWU+Kik7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBtX3Rlc3RzOwot
ICAgIFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBtX2N1cnJlbnRUZXN0OwotICAgIFZlY3RvcjxT
dHJpbmc+IG1fYnVmZmVyZWRUZXN0czsKLQotICAgIFN0cmluZyBtX3Jlc3VsdHNEaXI7Ci0gICAg
U3RyaW5nIG1fZG9uZUZpbGU7Ci0gICAgU3RyaW5nIG1fY3VycmVudEh0dHBUZXN0OwotICAgIFN0
cmluZyBtX2N1cnJlbnRUZXN0RmlsZTsKLQotICAgIEdDQ29udHJvbGxlciogbV9nY0NvbnRyb2xs
ZXI7Ci0gICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI7Ci0gICAgV2ViUGFnZSogbV9wYWdlOwotICAgIGJvb2wgbV9lbmFibGVQaXhlbFRlc3RzOwot
ICAgIFdlYkNvcmU6OlRpbWVyPER1bXBSZW5kZXJUcmVlPiBtX3dhaXRUb0R1bXBXYXRjaGRvZ1Rp
bWVyOwotICAgIFdlYkNvcmU6OlRpbWVyPER1bXBSZW5kZXJUcmVlPiBtX3dvcmtUaW1lcjsKLQot
ICAgIGJvb2wgbV9hY2NlcHRzRWRpdGluZzsKLSAgICBib29sIG1fbG9hZEZpbmlzaGVkOwotICAg
IGJvb2wgbV9wb2xpY3lEZWxlZ2F0ZUVuYWJsZWQ7Ci0gICAgYm9vbCBtX3BvbGljeURlbGVnYXRl
SXNQZXJtaXNzaXZlOwotfTsKLX0KLX0KLQotI2VuZGlmIC8vIER1bXBSZW5kZXJUcmVlQmxhY2tC
ZXJyeV9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0V2ZW50U2VuZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0V2ZW50
U2VuZGVyLmNwcAkocmV2aXNpb24gMTYxNjA2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxh
Y2tiZXJyeS9FdmVudFNlbmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJF
dmVudFNlbmRlci5oIgotCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVCbGFja0JlcnJ5LmgiCi0j
aW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0LmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIldlYktpdFRocmVhZFZpZXdw
b3J0QWNjZXNzb3IuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0KLSNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3Jt
TW91c2VFdmVudC5oPgotI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVRvdWNoRXZlbnQuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1
ZVJlZi5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLXN0YXRpYyBJbnRQb2ludCBsYXN0TW91c2VQb3NpdGlvbjsKLXN0YXRpYyBWZWN0b3I8
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQ+IHRvdWNoZXM7Ci1zdGF0aWMgYm9vbCB0
b3VjaEFjdGl2ZSA9IGZhbHNlOwotCi12b2lkIHNlbmRUb3VjaEV2ZW50KEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpUb3VjaEV2ZW50OjpUeXBlKTsKLQotLy8gQ2FsbGJhY2tzCi0KLXN0YXRpYyBKU1Zh
bHVlUmVmIGdldERyYWdNb2RlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBi
b29sIHNldERyYWdNb2RlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiopCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0K
LXN0YXRpYyBKU1ZhbHVlUmVmIG1vdXNlV2hlZWxUb0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltd
LCBKU1ZhbHVlUmVmKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgY29udGV4
dENsaWNrQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVj
dFJlZiwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotfQotCi12b2lkIHNldE1vdXNlRXZlbnREb2N1bWVudFBvcyhCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6TW91c2VFdmVudCAmZXZlbnQsIGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZSog
cGFnZSkKLXsKLSAgICAvLyBXZSBoYXZlIGFkZGVkIGRvY3VtZW50IHZpZXdwb3J0IHBvc2l0aW9u
IGFuZCBkb2N1bWVudCBjb250ZW50IHBvc2l0aW9uIGFzIG1lbWJlcnMgb2YgdGhlIG1vdXNlIGV2
ZW50LCB3aGVuIHdlIGNyZWF0ZSB0aGUgZXZlbnQsIHdlIHNob3VsZCBpbml0aWFsaXplIHRoZW0g
YXMgd2VsbC4KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Vmlld3BvcnRBY2Nlc3Nvciogdmll
d3BvcnRBY2Nlc3NvciA9IHBhZ2UtPndlYmtpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3IoKTsKLSAg
ICBJbnRQb2ludCBkb2N1bWVudENvbnRlbnRQb3MgPSB2aWV3cG9ydEFjY2Vzc29yLT5yb3VuZFRv
RG9jdW1lbnRGcm9tUGl4ZWxDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRQb2lu
dCh2aWV3cG9ydEFjY2Vzc29yLT5waXhlbENvbnRlbnRzRnJvbVZpZXdwb3J0KGxhc3RNb3VzZVBv
c2l0aW9uKSkpOwotICAgIEludFBvaW50IGRvY3VtZW50Vmlld3BvcnRNb3VzZVBvcyA9IHZpZXdw
b3J0QWNjZXNzb3ItPnJvdW5kVG9Eb2N1bWVudEZyb21QaXhlbENvbnRlbnRzKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpGbG9hdFBvaW50KGxhc3RNb3VzZVBvc2l0aW9uKSk7Ci0gICAgZXZlbnQucG9w
dWxhdGVEb2N1bWVudFBvc2l0aW9uKGRvY3VtZW50Vmlld3BvcnRNb3VzZVBvcywgZG9jdW1lbnRD
b250ZW50UG9zKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgbW91c2VEb3duQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25z
dCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqKQotewotICAgIEJsYWNrQmVycnk6OldlYktpdDo6
V2ViUGFnZSogcGFnZSA9IEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJl
bnRJbnN0YW5jZSgpLT5wYWdlKCk7Ci0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1vdXNlRXZl
bnQgZXZlbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1vdXNlRXZlbnQ6OlNjcmVlbkxlZnRNb3Vz
ZUJ1dHRvbiwgMCwgbGFzdE1vdXNlUG9zaXRpb24sIEludFBvaW50Ojp6ZXJvKCksIDAsIDAsIDAp
OwotCi0gICAgc2V0TW91c2VFdmVudERvY3VtZW50UG9zKGV2ZW50LCBwYWdlKTsKLQotICAgIHBh
Z2UtPm1vdXNlRXZlbnQoZXZlbnQpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgbW91c2VVcENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCwgY29uc3QgSlNW
YWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBh
Z2UqIHBhZ2UgPSBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5z
dGFuY2UoKS0+cGFnZSgpOwotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNb3VzZUV2ZW50IGV2
ZW50KDAsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNb3VzZUV2ZW50OjpTY3JlZW5MZWZ0TW91c2VC
dXR0b24sIGxhc3RNb3VzZVBvc2l0aW9uLCBJbnRQb2ludDo6emVybygpLCAwLCAwLCAwKTsKLQot
ICAgIHNldE1vdXNlRXZlbnREb2N1bWVudFBvcyhldmVudCwgcGFnZSk7Ci0KLSAgICBwYWdlLT5t
b3VzZUV2ZW50KGV2ZW50KTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG1vdXNlTW92ZVRvQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7Ci0gICAgaW50IHkgPSBzdGF0aWNfY2FzdDxp
bnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwot
ICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKLQotICAgIGxhc3RNb3VzZVBv
c2l0aW9uID0gSW50UG9pbnQoeCwgeSk7Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdl
KiBwYWdlID0gQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3Rh
bmNlKCktPnBhZ2UoKTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TW91c2VFdmVudCBldmVu
dChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TW91c2VFdmVudDo6U2NyZWVuTGVmdE1vdXNlQnV0dG9u
LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TW91c2VFdmVudDo6U2NyZWVuTGVmdE1vdXNlQnV0dG9u
LCBsYXN0TW91c2VQb3NpdGlvbiwgSW50UG9pbnQ6Onplcm8oKSwgMCwgMCwgMCk7Ci0KLSAgICBz
ZXRNb3VzZUV2ZW50RG9jdW1lbnRQb3MoZXZlbnQsIHBhZ2UpOwotCi0gICAgcGFnZS0+bW91c2VF
dmVudChldmVudCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGJlZ2luRHJhZ1dpdGhGaWxlc0NhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCwgY29uc3Qg
SlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgbGVhcEZvcndhcmRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiop
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGtleURvd25DYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgSlNTdHJpbmdSZWYgY2hhcmFjdGVyID0g
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0g
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB1bnNpZ25lZCBjaGFyQ29kZSA9IDA7Ci0gICAg
Ym9vbCBuZWVkc1NoaWZ0S2V5TW9kaWZpZXIgPSBmYWxzZTsKLSAgICBpZiAoSlNTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJsZWZ0QXJyb3ciKSkKLSAgICAgICAgY2hhckNv
ZGUgPSBLRVlDT0RFX0xFRlQ7Ci0gICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhjaGFyYWN0ZXIsICJyaWdodEFycm93IikpCi0gICAgICAgIGNoYXJDb2RlID0gS0VZQ09E
RV9SSUdIVDsKLSAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJh
Y3RlciwgInVwQXJyb3ciKSkKLSAgICAgICAgY2hhckNvZGUgPSBLRVlDT0RFX1VQOwotICAgIGVs
c2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAiZG93bkFycm93
IikpCi0gICAgICAgIGNoYXJDb2RlID0gS0VZQ09ERV9ET1dOOwotICAgIGVsc2UgaWYgKEpTU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAicGFnZVVwIikpCi0gICAgICAgIGNo
YXJDb2RlID0gS0VZQ09ERV9QR19VUDsKLSAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKGNoYXJhY3RlciwgInBhZ2VEb3duIikpCi0gICAgICAgIGNoYXJDb2RlID0gS0VZ
Q09ERV9QR19ET1dOOwotICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
Y2hhcmFjdGVyLCAiaG9tZSIpKQotICAgICAgICBjaGFyQ29kZSA9IEtFWUNPREVfSE9NRTsKLSAg
ICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgImVuZCIp
KQotICAgICAgICBjaGFyQ29kZSA9IEtFWUNPREVfRU5EOwotICAgIGVsc2UgaWYgKEpTU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAiZGVsZXRlIikpCi0gICAgICAgIGNoYXJD
b2RlID0gS0VZQ09ERV9CQUNLU1BBQ0U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNoYXJDb2RlID0g
SlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKGNoYXJhY3RlcilbMF07Ci0gICAgICAgIGlmICgweDgg
PT0gY2hhckNvZGUpCi0gICAgICAgICAgICBjaGFyQ29kZSA9IEtFWUNPREVfQkFDS1NQQUNFOwot
ICAgICAgICBlbHNlIGlmICgweDdGID09IGNoYXJDb2RlKQotICAgICAgICAgICAgY2hhckNvZGUg
PSBLRVlDT0RFX0RFTEVURTsKLSAgICAgICAgZWxzZSBpZiAoV1RGOjppc0FTQ0lJVXBwZXIoY2hh
ckNvZGUpKQotICAgICAgICAgICAgbmVlZHNTaGlmdEtleU1vZGlmaWVyID0gdHJ1ZTsKLSAgICB9
Ci0gICAgSlNTdHJpbmdSZWxlYXNlKGNoYXJhY3Rlcik7Ci0KLSAgICBzdGF0aWMgY29uc3QgSlNT
dHJpbmdSZWYgbGVuZ3RoUHJvcGVydHkgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
bGVuZ3RoIik7Ci0gICAgYm9vbCBuZWVkc0FsdEtleU1vZGlmaWVyID0gZmFsc2U7Ci0gICAgYm9v
bCBuZWVkc0N0cmxLZXlNb2RpZmllciA9IGZhbHNlOwotICAgIGlmIChhcmd1bWVudENvdW50ID4g
MSkgewotICAgICAgICBpZiAoSlNPYmplY3RSZWYgbW9kaWZpZXJzQXJyYXkgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCAwKSkgewotICAgICAgICAgICAgaW50IG1vZGlm
aWVyc0NvdW50ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgbW9kaWZpZXJzQXJyYXksIGxlbmd0aFByb3BlcnR5LCAwKSwgMCk7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1vZGlmaWVyc0NvdW50OyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBKU1N0cmluZ1JlZiBzdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG1vZGlmaWVyc0FycmF5LCBpLCAw
KSwgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
c3RyaW5nLCAic2hpZnRLZXkiKSkKLSAgICAgICAgICAgICAgICAgICAgbmVlZHNTaGlmdEtleU1v
ZGlmaWVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKHN0cmluZywgImFsdEtleSIpKQotICAgICAgICAgICAgICAgICAgICBuZWVk
c0FsdEtleU1vZGlmaWVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChKU1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0cmluZywgImN0cmxLZXkiKSkKLSAgICAgICAgICAgICAg
ICAgICAgbmVlZHNDdHJsS2V5TW9kaWZpZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgIEpTU3Ry
aW5nUmVsZWFzZShzdHJpbmcpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlKiBwYWdlID0gQmxhY2tCZXJyeTo6V2ViS2l0
OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKTsKLQotICAgIHVuc2ln
bmVkIG1vZGlmaWVycyA9IDA7Ci0gICAgaWYgKG5lZWRzU2hpZnRLZXlNb2RpZmllcikKLSAgICAg
ICAgbW9kaWZpZXJzIHw9IEtFWU1PRF9TSElGVDsKLSAgICBpZiAobmVlZHNBbHRLZXlNb2RpZmll
cikKLSAgICAgICAgbW9kaWZpZXJzIHw9IEtFWU1PRF9BTFQ7Ci0gICAgaWYgKG5lZWRzQ3RybEtl
eU1vZGlmaWVyKQotICAgICAgICBtb2RpZmllcnMgfD0gS0VZTU9EX0NUUkw7Ci0KLSAgICBwYWdl
LT5rZXlFdmVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6S2V5Ym9hcmRFdmVudChjaGFyQ29kZSwg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OktleWJvYXJkRXZlbnQ6OktleURvd24sIG1vZGlmaWVycykp
OwotICAgIHBhZ2UtPmtleUV2ZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpLZXlib2FyZEV2ZW50
KGNoYXJDb2RlLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6S2V5Ym9hcmRFdmVudDo6S2V5VXAsIG1v
ZGlmaWVycykpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi1zdGF0aWMgSlNWYWx1ZVJlZiB0ZXh0Wm9vbUluQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVm
W10sIEpTVmFsdWVSZWYqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiB0ZXh0
Wm9vbU91dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmpl
Y3RSZWYsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgem9vbVBhZ2VJbkNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCwgY29uc3QgSlNWYWx1
ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
em9vbVBhZ2VPdXRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpT
T2JqZWN0UmVmLCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGFkZFRvdWNoUG9pbnRDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+
KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAg
IEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKLSAgICBpbnQgeSA9IHN0YXRpY19j
YXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9u
KSk7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwotCi0gICAgaW50IGlk
ID0gdG91Y2hlcy5pc0VtcHR5KCkgPyAwIDogdG91Y2hlcy5sYXN0KCkuaWQoKSArIDE7Ci0KLSAg
ICAvLyBwaXhlbFZpZXdwb3J0UG9zaXRpb24gaXMgdW51c2VkIGluIHRoZSBXZWJLaXQgbGF5ZXIs
IHNvIHVzZSB0aGlzIGZvciBzY3JlZW4gcG9zaXRpb24KLSAgICBJbnRQb2ludCBwb3MoeCwgeSk7
Ci0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludCB0b3VjaChpZCwgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQ6OlRvdWNoUHJlc3NlZCwgcG9zLCBwb3MsIDApOwot
Ci0gICAgLy8gVW5mb3J0dW5hdGVseSB3ZSBkb24ndCBrbm93IHRoZSBzY3JvbGwgcG9zaXRpb24g
YXQgdGhpcyBwb2ludCwgc28gdXNlIHBvcyBmb3IgdGhlIGNvbnRlbnQgcG9zaXRpb24gdG9vLgot
ICAgIC8vIFRoaXMgYXNzdW1lcyBzY3JvbGwgcG9zaXRpb24gaXMgMCwwCi0gICAgdG91Y2gucG9w
dWxhdGVEb2N1bWVudFBvc2l0aW9uKHBvcywgcG9zKTsKLQotICAgIHRvdWNoZXMuYXBwZW5kKHRv
dWNoKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQot
c3RhdGljIEpTVmFsdWVSZWYgdXBkYXRlVG91Y2hQb2ludENhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Ci0KLSAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VS
VCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKLSAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGlu
dD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7Ci0g
ICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwotICAgIGludCB5ID0gc3RhdGlj
X2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRp
b24pKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7Ci0KLSAgICBpZiAo
aW5kZXggPCAwIHx8IGluZGV4ID49IChpbnQpdG91Y2hlcy5zaXplKCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpUb3VjaFBvaW50JiB0b3VjaCA9IHRvdWNoZXNbaW5kZXhdOwotCi0gICAgLy8gcGl4ZWxW
aWV3cG9ydFBvc2l0aW9uIGlzIHVudXNlZCBpbiB0aGUgV2ViS2l0IGxheWVyCi0gICAgSW50UG9p
bnQgcG9zKHgsIHkpOwotCi0gICAgLy8gVW5mb3J0dW5hdGVseSB3ZSBkb24ndCBrbm93IHRoZSBz
Y3JvbGwgcG9zaXRpb24gYXQgdGhpcyBwb2ludCwgc28gdXNlIHBvcyBmb3IgdGhlIGNvbnRlbnQg
cG9zaXRpb24gdG9vLgotICAgIC8vIFRoaXMgYXNzdW1lcyBzY3JvbGwgcG9zaXRpb24gaXMgMCww
Ci0gICAgdG91Y2gucG9wdWxhdGVEb2N1bWVudFBvc2l0aW9uKHBvcywgcG9zKTsKLSAgICB0b3Vj
aC5zZXRTY3JlZW5Qb3NpdGlvbihwb3MpOwotICAgIHRvdWNoLnVwZGF0ZVN0YXRlKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpUb3VjaFBvaW50OjpUb3VjaE1vdmVkKTsKLQotICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0VG91
Y2hNb2RpZmllckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNP
YmplY3RSZWYsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgdG91Y2hTdGFydENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCwgY29uc3QgSlNW
YWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAgICBpZiAoIXRvdWNoQWN0aXZlKSB7Ci0gICAg
ICAgIHNlbmRUb3VjaEV2ZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaEV2ZW50OjpUb3Vj
aFN0YXJ0KTsKLSAgICAgICAgdG91Y2hBY3RpdmUgPSB0cnVlOwotICAgIH0gZWxzZQotICAgICAg
ICBzZW5kVG91Y2hFdmVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hFdmVudDo6VG91Y2hN
b3ZlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIHRvdWNoQ2FuY2VsQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpT
VmFsdWVSZWYqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiB0b3VjaE1vdmVD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBz
aXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCi17Ci0gICAgc2VuZFRvdWNo
RXZlbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoRXZlbnQ6OlRvdWNoTW92ZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1
ZVJlZiB0b3VjaEVuZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwg
SlNPYmplY3RSZWYsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG91Y2hlcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgaWYgKHRvdWNoZXNbaV0uc3RhdGUoKSAhPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hQ
b2ludDo6VG91Y2hSZWxlYXNlZCkgewotICAgICAgICAgICAgc2VuZFRvdWNoRXZlbnQoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlRvdWNoRXZlbnQ6OlRvdWNoTW92ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0gICAgICAgIH0KLSAgICBzZW5kVG91
Y2hFdmVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hFdmVudDo6VG91Y2hFbmQpOwotICAg
IHRvdWNoQWN0aXZlID0gZmFsc2U7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBjbGVhclRvdWNoUG9pbnRzQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90LCBj
b25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqKQotewotICAgIHRvdWNoZXMuY2xlYXIoKTsK
LSAgICB0b3VjaEFjdGl2ZSA9IGZhbHNlOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgY2FuY2VsVG91Y2hQb2ludENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVf
dCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3Rh
dGljIEpTVmFsdWVSZWYgcmVsZWFzZVRvdWNoUG9pbnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQo
IWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7Ci0gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+
PSAoaW50KXRvdWNoZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci0KLSAgICB0b3VjaGVzW2luZGV4XS51cGRhdGVTdGF0ZShCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6VG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi12b2lkIHNlbmRUb3VjaEV2ZW50KEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpUb3VjaEV2ZW50OjpUeXBlIHR5cGUpCi17Ci0gICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlRvdWNoRXZlbnQgZXZlbnQ7Ci0gICAgZXZlbnQubV90eXBlID0gdHlwZTsK
LSAgICBldmVudC5tX3BvaW50cy5hc3NpZ24odG91Y2hlcy5iZWdpbigpLCB0b3VjaGVzLmVuZCgp
KTsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFu
Y2UoKS0+cGFnZSgpLT50b3VjaEV2ZW50KGV2ZW50KTsKLQotICAgIFZlY3RvcjxCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6VG91Y2hQb2ludD4gdDsKLQotICAgIGZvciAoVmVjdG9yPEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpUb3VjaFBvaW50Pjo6aXRlcmF0b3IgaXQgPSB0b3VjaGVzLmJlZ2luKCk7IGl0
ICE9IHRvdWNoZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zdGF0ZSgpICE9IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkKSB7Ci0gICAgICAg
ICAgICBpdC0+dXBkYXRlU3RhdGUoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQ6OlRv
dWNoU3RhdGlvbmFyeSk7Ci0gICAgICAgICAgICB0LmFwcGVuZCgqaXQpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHRvdWNoZXMgPSB0OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzY2FsZVBhZ2VC
eUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bik7Ci0gICAgZmxvYXQgeCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0s
IGV4Y2VwdGlvbik7Ci0gICAgZmxvYXQgeSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1
bWVudHNbMl0sIGV4Y2VwdGlvbik7Ci0KLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2Uq
IHBhZ2UgPSBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFu
Y2UoKS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0OjpzY2FsZVBh
Z2VCeShwYWdlLCBzY2FsZUZhY3RvciwgeCwgeSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1
bmN0aW9uc1tdID0gewotICAgIHsgIm1vdXNlV2hlZWxUbyIsIG1vdXNlV2hlZWxUb0NhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCi0gICAgeyAiY29udGV4dENsaWNrIiwgY29udGV4dENsaWNrQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICB7ICJtb3VzZURvd24iLCBtb3VzZURvd25DYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAg
IHsgIm1vdXNlVXAiLCBtb3VzZVVwQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJtb3VzZU1vdmVU
byIsIG1vdXNlTW92ZVRvQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJiZWdpbkRyYWdXaXRoRmls
ZXMiLCBiZWdpbkRyYWdXaXRoRmlsZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgImxlYXBGb3J3
YXJkIiwgbGVhcEZvcndhcmRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgImtleURvd24iLCBrZXlE
b3duQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJ0ZXh0Wm9vbUluIiwgdGV4dFpvb21JbkNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCi0gICAgeyAidGV4dFpvb21PdXQiLCB0ZXh0Wm9vbU91dENhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCi0gICAgeyAiYWRkVG91Y2hQb2ludCIsIGFkZFRvdWNoUG9pbnRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAotICAgIHsgImNhbmNlbFRvdWNoUG9pbnQiLCBjYW5jZWxUb3VjaFBvaW50Q2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKLSAgICB7ICJjbGVhclRvdWNoUG9pbnRzIiwgY2xlYXJUb3VjaFBvaW50c0NhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCi0gICAgeyAicmVsZWFzZVRvdWNoUG9pbnQiLCByZWxlYXNlVG91Y2hQb2lu
dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAic2NhbGVQYWdlQnkiLCBzY2FsZVBhZ2VCeUNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCi0gICAgeyAic2V0VG91Y2hNb2RpZmllciIsIHNldFRvdWNoTW9kaWZpZXJD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAotICAgIHsgInRvdWNoQ2FuY2VsIiwgdG91Y2hDYW5jZWxDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAotICAgIHsgInRvdWNoRW5kIiwgdG91Y2hFbmRDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAot
ICAgIHsgInRvdWNoTW92ZSIsIHRvdWNoTW92ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAidG91
Y2hTdGFydCIsIHRvdWNoU3RhcnRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgInVwZGF0ZVRvdWNo
UG9pbnQiLCB1cGRhdGVUb3VjaFBvaW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJ6b29tUGFn
ZUluIiwgem9vbVBhZ2VJbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAiem9vbVBhZ2VPdXQiLCB6
b29tUGFnZU91dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAwLCAwLCAwIH0KLX07Ci0KLXN0YXRp
YyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0gewotICAgIHsgImRyYWdNb2RlIiwgZ2V0
RHJhZ01vZGVDYWxsYmFjaywgc2V0RHJhZ01vZGVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVOb25lIH0sCi0gICAgeyAwLCAwLCAwLCAwIH0KLX07Ci0KLXN0YXRpYyBKU0NsYXNzUmVmIGdl
dENsYXNzKEpTQ29udGV4dFJlZikKLXsKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBldmVudFNlbmRl
ckNsYXNzID0gMDsKLQotICAgIGlmICghZXZlbnRTZW5kZXJDbGFzcykgewotICAgICAgICBKU0Ns
YXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7Ci0gICAgICAgICAgICAwLCAwLCAwLCAw
LCAwLCAwLAotICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07Ci0g
ICAgICAgIGNsYXNzRGVmaW5pdGlvbi5zdGF0aWNGdW5jdGlvbnMgPSBzdGF0aWNGdW5jdGlvbnM7
Ci0gICAgICAgIGNsYXNzRGVmaW5pdGlvbi5zdGF0aWNWYWx1ZXMgPSBzdGF0aWNWYWx1ZXM7Ci0K
LSAgICAgICAgZXZlbnRTZW5kZXJDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlv
bik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV2ZW50U2VuZGVyQ2xhc3M7Ci19Ci0KLXZvaWQgcmVw
bGF5U2F2ZWRFdmVudHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUpTT2JqZWN0
UmVmIG1ha2VFdmVudFNlbmRlcihKU0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICByZXR1cm4g
SlNPYmplY3RNYWtlKGNvbnRleHQsIGdldENsYXNzKGNvbnRleHQpLCAwKTsKLX0KLQpJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9FdmVudFNlbmRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvRXZlbnRTZW5kZXIuaAkocmV2aXNp
b24gMTYxNjA2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9FdmVudFNlbmRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgRXZlbnRTZW5kZXJfaAotI2Rl
ZmluZSBFdmVudFNlbmRlcl9oCi0KLXR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4
dCogSlNDb250ZXh0UmVmOwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNPYmplY3RS
ZWY7Ci0KLUpTT2JqZWN0UmVmIG1ha2VFdmVudFNlbmRlcihKU0NvbnRleHRSZWYpOwotdm9pZCBy
ZXBsYXlTYXZlZEV2ZW50cygpOwotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2JsYWNrYmVycnkvR0NDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9HQ0NvbnRyb2xsZXJCbGFja0JlcnJ5LmNwcAko
cmV2aXNpb24gMTYxNjA2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9HQ0Nv
bnRyb2xsZXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmgiCi0K
LSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnQuaCIKLQotdm9pZCBHQ0NvbnRyb2xsZXI6
OmNvbGxlY3QoKSBjb25zdAotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Z2FyYmFnZUNv
bGxlY3RvckNvbGxlY3QoKTsKLX0KLQotdm9pZCBHQ0NvbnRyb2xsZXI6OmNvbGxlY3RPbkFsdGVy
bmF0ZVRocmVhZChib29sIHdhaXRVbnRpbERvbmUpIGNvbnN0Ci17Ci0gICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0OjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKHdhaXRV
bnRpbERvbmUpOwotfQotCi1zaXplX3QgR0NDb250cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0OjpqYXZhU2NyaXB0T2Jq
ZWN0c0NvdW50KCk7Ci19Ci0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkv
UE5HSW1hZ2VFbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9i
bGFja2JlcnJ5L1BOR0ltYWdlRW5jb2Rlci5jcHAJKHJldmlzaW9uIDE2MTYwNikKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvUE5HSW1hZ2VFbmNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIENvcHlyaWdodCAyMDA1IEdv
b2dsZSBJbmMuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBOR0ltYWdl
RW5jb2Rlci5oIgotCi0KLWV4dGVybiAiQyIgewotI2luY2x1ZGUgInBuZy5oIgotfQotCi0jaW5j
bHVkZSA8d3RmL093bkFycmF5UHRyLmg+Ci0KLS8vIFRoaXMgY29kZSBpcyBhbG1vc3QgYSBtaXJy
b3Igb2YgdGhlIGNvZGUgaW4gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BO
R0ltYWdlRW5jb2Rlci5jcHAKLS8vIHNpbmNlIHdlIGNhbid0IGluY2x1ZGUgdGhpcyBwcml2YXRl
IFdlYkNvcmUgZmlsZSBpbiBhIFdlYktpdC1jbGllbnQgYXBwbGljYXRpb24uCi0KLS8vIEtlZXAg
dGhlIHByZW11bHRpcGllZCBmb3IgYXMgaXQgaXMgdGhlIG1vc3QgZmFpdGhmdWwgaW5mb3JtYXRp
b24KLXN0YXRpYyB2b2lkIEJHUkF0b1JHQkEoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXQsIGlu
dCBudW1iZXJPZlBpeGVscywgdW5zaWduZWQgY2hhciogb3V0cHV0KQotewotICAgIGZvciAoaW50
IHggPSAwOyB4IDwgbnVtYmVyT2ZQaXhlbHM7IHgrKykgewotICAgICAgICBvdXRwdXRbMF0gPSBp
bnB1dFsyXTsKLSAgICAgICAgb3V0cHV0WzFdID0gaW5wdXRbMV07Ci0gICAgICAgIG91dHB1dFsy
XSA9IGlucHV0WzBdOwotICAgICAgICBvdXRwdXRbM10gPSBpbnB1dFszXTsKLSAgICAgICAgaW5w
dXQgKz0gNDsKLSAgICAgICAgb3V0cHV0ICs9IDQ7Ci0gICAgfQotfQotCi0vLyBQYXNzZWQgYXJv
dW5kIGFzIHRoZSBpb19wdHIgaW4gdGhlIHBuZyBzdHJ1Y3RzIHNvIG91ciBjYWxsYmFja3Mga25v
dyB3aGVyZQotLy8gdG8gd3JpdGUgZGF0YS4KLXN0cnVjdCBQTkdFbmNvZGVyU3RhdGUgewotICAg
IFBOR0VuY29kZXJTdGF0ZShWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG8pIDogbV9vdXQobykgeyB9
Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBtX291dDsKLX07Ci0KLS8vIENhbGxlZCBieSBs
aWJwbmcgdG8gZmx1c2ggaXRzIGludGVybmFsIGJ1ZmZlciB0byBvdXJzLgotdm9pZCBlbmNvZGVy
V3JpdGVDYWxsYmFjayhwbmdfc3RydWN0cCBwbmcsIHBuZ19ieXRlcCBkYXRhLCBwbmdfc2l6ZV90
IHNpemUpCi17Ci0gICAgUE5HRW5jb2RlclN0YXRlKiBzdGF0ZSA9IHN0YXRpY19jYXN0PFBOR0Vu
Y29kZXJTdGF0ZSo+KHBuZ19nZXRfaW9fcHRyKHBuZykpOwotICAgIEFTU0VSVChzdGF0ZS0+bV9v
dXQpOwotCi0gICAgc2l6ZV90IG9sZFNpemUgPSBzdGF0ZS0+bV9vdXQtPnNpemUoKTsKLSAgICBz
dGF0ZS0+bV9vdXQtPnJlc2l6ZShvbGRTaXplICsgc2l6ZSk7Ci0gICAgbWVtY3B5KCYoKnN0YXRl
LT5tX291dClbb2xkU2l6ZV0sIGRhdGEsIHNpemUpOwotfQotCi0vLyBBdXRvbWF0aWNhbGx5IGRl
c3Ryb3lzIHRoZSBnaXZlbiB3cml0ZSBzdHJ1Y3RzIG9uIGRlc3RydWN0aW9uIHRvIG1ha2UKLS8v
IGNsZWFudXAgYW5kIGVycm9yIGhhbmRsaW5nIGNvZGUgY2xlYW5lci4KLWNsYXNzIFBOR1dyaXRl
U3RydWN0RGVzdHJveWVyIHsKLXB1YmxpYzoKLSAgICBQTkdXcml0ZVN0cnVjdERlc3Ryb3llcihw
bmdfc3RydWN0KiogcHMsIHBuZ19pbmZvKiogcGkpCi0gICAgICAgIDogbV9wbmdTdHJ1Y3QocHMp
Ci0gICAgICAgICwgbV9wbmdJbmZvKHBpKQotICAgIHsKLSAgICB9Ci0KLSAgICB+UE5HV3JpdGVT
dHJ1Y3REZXN0cm95ZXIoKQotICAgIHsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0
KG1fcG5nU3RydWN0LCBtX3BuZ0luZm8pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBwbmdfc3Ry
dWN0KiogbV9wbmdTdHJ1Y3Q7Ci0gICAgcG5nX2luZm8qKiBtX3BuZ0luZm87Ci19OwotCi10eXBl
ZGVmIHZvaWQgKCpQaXhlbENvbnZlcnNpb25GdW5jKShjb25zdCB1bnNpZ25lZCBjaGFyKiwgaW50
LCB1bnNpZ25lZCBjaGFyKik7Ci1zdGF0aWMgYm9vbCBlbmNvZGVJbXBsKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGlucHV0LCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgYnl0ZXNQ
ZXJSb3csIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0LCBQaXhlbENvbnZlcnNpb25GdW5j
IGNvbnZlcnNpb25GdW5jKQotewotICAgIGludCBpbnB1dENvbG9yQ29tcG9uZW50cyA9IDQ7Ci0g
ICAgaW50IG91dHB1dENvbG9yQ29tcG9uZW50cyA9IDQ7Ci0gICAgaW50IHBuZ091dHB1dENvbG9y
VHlwZSA9IFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQTsKLQotICAgIGlmIChpbWFnZVdpZHRoIDwg
MCkKLSAgICAgICAgaW1hZ2VXaWR0aCA9IDA7Ci0KLSAgICBpZiAoaW1hZ2VIZWlnaHQgPCAwKQot
ICAgICAgICBpbWFnZUhlaWdodCA9IDA7Ci0KLSAgICAvLyBSb3cgc3RyaWRlIHNob3VsZCBiZSBh
dCBsZWFzdCBhcyBsb25nIGFzIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEuCi0gICAgaWYgKGlucHV0
Q29sb3JDb21wb25lbnRzICogaW1hZ2VXaWR0aCA+IGJ5dGVzUGVyUm93KSB7Ci0gICAgICAgIEFT
U0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwbmdfc3Ry
dWN0KiBwbmdQdHIgPSBwbmdfY3JlYXRlX3dyaXRlX3N0cnVjdChQTkdfTElCUE5HX1ZFUl9TVFJJ
TkcsIDAsIDAsIDApOwotICAgIGlmICghcG5nUHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBwbmdfaW5mbyogaW5mb1B0ciA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QocG5nUHRyKTsK
LSAgICBpZiAoIWluZm9QdHIpIHsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZw
bmdQdHIsIDApOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFBOR1dyaXRlU3Ry
dWN0RGVzdHJveWVyIGRlc3Ryb3llcigmcG5nUHRyLCAmaW5mb1B0cik7Ci0KLSAgICBpZiAoc2V0
am1wKHBuZ19qbXBidWYocG5nUHRyKSkpIHsKLSAgICAgICAgLy8gVGhlIGRlc3Ryb3llciB3aWxs
IGVuc3VyZSB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGFyZSBjbGVhbmVkIHVwIGluIHRoaXMKLSAgICAg
ICAgLy8gY2FzZSwgZXZlbiB0aG91Z2ggd2UgbWF5IGdldCBoZXJlIGFzIGEganVtcCBmcm9tIHJh
bmRvbSBwYXJ0cyBvZiB0aGUKLSAgICAgICAgLy8gUE5HIGxpYnJhcnkgY2FsbGVkIGJlbG93Lgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU2V0IG91ciBjYWxsYmFjayBm
b3IgbGlicG5nIHRvIGdpdmUgdXMgdGhlIGRhdGEuCi0gICAgUE5HRW5jb2RlclN0YXRlIHN0YXRl
KG91dHB1dCk7Ci0gICAgcG5nX3NldF93cml0ZV9mbihwbmdQdHIsICZzdGF0ZSwgZW5jb2Rlcldy
aXRlQ2FsbGJhY2ssIDApOwotCi0gICAgcG5nX3NldF9JSERSKHBuZ1B0ciwgaW5mb1B0ciwgaW1h
Z2VXaWR0aCwgaW1hZ2VIZWlnaHQsIDgsIHBuZ091dHB1dENvbG9yVHlwZSwKLSAgICAgICAgUE5H
X0lOVEVSTEFDRV9OT05FLCBQTkdfQ09NUFJFU1NJT05fVFlQRV9ERUZBVUxULAotICAgICAgICBQ
TkdfRklMVEVSX1RZUEVfREVGQVVMVCk7Ci0gICAgcG5nX3dyaXRlX2luZm8ocG5nUHRyLCBpbmZv
UHRyKTsKLQotICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHJvd1BpeGVscyA9IGFkb3B0
QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbaW1hZ2VXaWR0aCAqIG91dHB1dENvbG9yQ29tcG9u
ZW50c10pOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VIZWlnaHQ7IHkgKyspIHsKLSAg
ICAgICAgY29udmVyc2lvbkZ1bmMoJmlucHV0W3kgKiBieXRlc1BlclJvd10sIGltYWdlV2lkdGgs
IHJvd1BpeGVscy5nZXQoKSk7Ci0gICAgICAgIHBuZ193cml0ZV9yb3cocG5nUHRyLCByb3dQaXhl
bHMuZ2V0KCkpOwotICAgIH0KLQotICAgIHBuZ193cml0ZV9lbmQocG5nUHRyLCBpbmZvUHRyKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBlbmNvZGVCaXRtYXBUb1BORyh1bnNpZ25lZCBj
aGFyKiBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiog
b3V0cHV0KQotewotICAgIGJvb2wgcmVzdWx0ID0gZW5jb2RlSW1wbChkYXRhLCB3aWR0aCwgaGVp
Z2h0LCB3aWR0aCAqIDQsIG91dHB1dCwgQkdSQXRvUkdCQSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvUE5HSW1hZ2VFbmNvZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9QTkdJbWFn
ZUVuY29kZXIuaAkocmV2aXNpb24gMTYxNjA2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxh
Y2tiZXJyeS9QTkdJbWFnZUVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyNiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYg
UE5HSW1hZ2VFbmNvZGVyX2gKLSNkZWZpbmUgUE5HSW1hZ2VFbmNvZGVyX2gKLQotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotYm9vbCBlbmNvZGVCaXRtYXBUb1BORyh1bnNpZ25lZCBjaGFyKiBk
YXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFdURjo6VmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBv
dXRwdXQpOwotCi0jZW5kaWYgLy8gUE5HSW1hZ2VFbmNvZGVyX2gKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2JsYWNrYmVycnkvUGl4ZWxEdW1wU3VwcG9ydEJsYWNrQmVycnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvUGl4ZWxEdW1wU3VwcG9y
dEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE2MDYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9ibGFja2JlcnJ5L1BpeGVsRHVtcFN1cHBvcnRCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9y
dEJsYWNrQmVycnkuaCIKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIkJs
YWNrQmVycnlQbGF0Zm9ybUV4ZWN1dGFibGVNZXNzYWdlLmgiCi0jaW5jbHVkZSAiQmxhY2tCZXJy
eVBsYXRmb3JtR3JhcGhpY3MuaCIKLSNpbmNsdWRlICJCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljc0ltcGwuaCIK
LSNpbmNsdWRlICJCbGFja0JlcnJ5UGxhdGZvcm1NZXNzYWdlQ2xpZW50LmgiCi0jaW5jbHVkZSAi
RHVtcFJlbmRlclRyZWVCbGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAiUE5HSW1hZ2VFbmNvZGVyLmgi
Ci0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydC5oIgotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNp
bmNsdWRlICJXZWJQYWdlQ2xpZW50LmgiCi0KLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1X
aW5kb3cuaD4KLSNpbmNsdWRlIDx3dGYvTUQ1Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci11c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6V2ViS2l0OwotdXNpbmcgbmFtZXNwYWNlIEJs
YWNrQmVycnk7Ci11c2luZyBuYW1lc3BhY2UgV1RGOwotCi12b2lkIHJlYWRQaXhlbHNVc2VySW50
ZXJmYWNlVGhyZWFkKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0
JiBzcmNSZWN0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCi17Ci0gICAgY29udGV4dC0+cmVhZFBp
eGVscyhzcmNSZWN0LCBwaXhlbHMsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KLVBhc3NSZWZQdHI8Qml0
bWFwQ29udGV4dD4gY3JlYXRlQml0bWFwQ29udGV4dEZyb21XZWJWaWV3KGJvb2wgLypvbnNjcmVl
biovLCBib29sIC8qaW5jcmVtZW50YWxSZXBhaW50Ki8sIGJvb2wgLypzd2VlcEhvcml6b250YWxs
eSovLCBib29sIC8qZHJhd1NlbGVjdGlvblJlY3QqLykKLXsKLSAgICBQbGF0Zm9ybTo6R3JhcGhp
Y3M6OldpbmRvdyogd2luZG93ID0gRHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5w
YWdlKCktPmNsaWVudCgpLT53aW5kb3coKTsKLSAgICBBU1NFUlQod2luZG93KTsKLQotICAgIC8v
IFRoZSBCYWNraW5nU3RvcmUgaGFzIGEgcXVldWUgb2YgcGVuZGluZyBqb2JzLCB3aGljaCBhcmUg
cnVuIG9uIGlkbGUKLSAgICAvLyBhbmQgd2hpY2ggbWF5IG5vdCBoYXZlIGJlZW4gcnVuIHlldC4K
LSAgICBCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IER1bXBSZW5kZXJUcmVlOjpjdXJyZW50
SW5zdGFuY2UoKS0+cGFnZSgpLT5iYWNraW5nU3RvcmUoKTsKLSAgICB3aGlsZSAoYmFja2luZ1N0
b3JlLT5oYXNCbGl0Sm9icygpKQotICAgICAgICBiYWNraW5nU3RvcmUtPmJsaXRPbklkbGUoKTsK
LQotICAgIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiB3aW5kb3dSZWN0ID0gd2luZG93LT52aWV3
cG9ydFJlY3QoKTsKLSAgICBjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgd2luZG93U2l6ZSA9IHdp
bmRvdy0+dmlld3BvcnRTaXplKCk7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9IG5ldyB1bnNp
Z25lZCBjaGFyW3dpbmRvd1NpemUud2lkdGgoKSAqIHdpbmRvd1NpemUuaGVpZ2h0KCkgKiA0XTsK
LQotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZmZXIgPSBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmNyZWF0ZUJ1ZmZlcih3aW5kb3dTaXplLCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkFsd2F5c0JhY2tlZCk7Ci0gICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpEcmF3YWJsZSogZHJhd2FibGUgPSBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmxvY2tCdWZmZXJEcmF3YWJsZShidWZmZXIpOwotICAgIGlm
IChkcmF3YWJsZSkgewotICAgICAgICBiYWNraW5nU3RvcmUtPmRyYXdDb250ZW50cyhkcmF3YWJs
ZSwgd2luZG93UmVjdCwgd2luZG93U2l6ZSk7Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3Jt
Ojp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgpLT5kaXNwYXRjaFN5bmNNZXNzYWdl
KAotICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmNyZWF0ZUZ1bmN0aW9uQ2FsbE1l
c3NhZ2UoJnJlYWRQaXhlbHNVc2VySW50ZXJmYWNlVGhyZWFkLCBkcmF3YWJsZSwgd2luZG93UmVj
dCwgZGF0YSkpOwotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnJlbGVh
c2VCdWZmZXJEcmF3YWJsZShidWZmZXIpOwotICAgIH0KLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OmRlc3Ryb3lCdWZmZXIoYnVmZmVyKTsKLSAgICByZXR1cm4gQml0bWFwQ29u
dGV4dDo6Y3JlYXRlQnlBZG9wdGluZ0RhdGEoZGF0YSwgd2luZG93U2l6ZS53aWR0aCgpLCB3aW5k
b3dTaXplLmhlaWdodCgpKTsKLX0KLQotdm9pZCBjb21wdXRlTUQ1SGFzaFN0cmluZ0ZvckJpdG1h
cENvbnRleHQoQml0bWFwQ29udGV4dCogY29udGV4dCwgY2hhciBoYXNoU3RyaW5nWzMzXSkKLXsK
LSAgICBpbnQgcGl4ZWxzV2lkZSA9IGNvbnRleHQtPm1fd2lkdGg7Ci0gICAgaW50IHBpeGVsc0hp
Z2ggPSBjb250ZXh0LT5tX2hlaWdodDsKLSAgICBpbnQgYnl0ZXNQZXJSb3cgPSBjb250ZXh0LT5t
X3dpZHRoICogNDsKLSAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbERhdGEgPSBjb250ZXh0LT5tX2Rh
dGE7Ci0KLSAgICBNRDUgbWQ1OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGl4ZWxzSGlnaDsg
KytpKSB7Ci0gICAgICAgIG1kNS5hZGRCeXRlcyhwaXhlbERhdGEsIDQgKiBwaXhlbHNXaWRlKTsK
LSAgICAgICAgcGl4ZWxEYXRhICs9IGJ5dGVzUGVyUm93OwotICAgIH0KLQotICAgIE1ENTo6RGln
ZXN0IGhhc2g7Ci0gICAgbWQ1LmNoZWNrc3VtKGhhc2gpOwotCi0gICAgaGFzaFN0cmluZ1swXSA9
ICdcMCc7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNRDU6Omhhc2hTaXplOyArK2kpCi0g
ICAgICAgIHNucHJpbnRmKGhhc2hTdHJpbmcsIDMzLCAiJXMlMDJ4IiwgaGFzaFN0cmluZywgaGFz
aFtpXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50UE5HKEJpdG1hcENvbnRleHQqIGNvbnRleHQs
IGNvbnN0IGNoYXIqIGNoZWNrc3VtKQotewotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmdE
YXRhOwotICAgIGVuY29kZUJpdG1hcFRvUE5HKGNvbnRleHQtPm1fZGF0YSwgY29udGV4dC0+bV93
aWR0aCwgY29udGV4dC0+bV9oZWlnaHQsICZwbmdEYXRhKTsKLSAgICBwcmludFBORyhwbmdEYXRh
LmRhdGEoKSwgcG5nRGF0YS5zaXplKCksIGNoZWNrc3VtKTsKLX0KLQotdm9pZCBkdW1wQml0bWFw
KEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQotewotICAgIHBy
aW50UE5HKGNvbnRleHQsIGNoZWNrc3VtKTsKLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2JsYWNrYmVycnkvUGl4ZWxEdW1wU3VwcG9ydEJsYWNrQmVycnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1BpeGVsRHVtcFN1cHBvcnRCbGFja0JlcnJ5
LmgJKHJldmlzaW9uIDE2MTYwNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkv
UGl4ZWxEdW1wU3VwcG9ydEJsYWNrQmVycnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5k
ZWYgUGl4ZWxEdW1wU3VwcG9ydEJsYWNrQmVycnlfaAotI2RlZmluZSBQaXhlbER1bXBTdXBwb3J0
QmxhY2tCZXJyeV9oCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotY2xhc3MgQml0bWFwQ29udGV4
dCA6IHB1YmxpYyBSZWZDb3VudGVkPEJpdG1hcENvbnRleHQ+IHsKLXB1YmxpYzoKLQotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0ZUJ5QWRvcHRpbmdEYXRhKHVuc2ln
bmVkIGNoYXIqIGRhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQml0bWFwQ29udGV4dChkYXRhLCB3aWR0aCwgaGVpZ2h0KSk7Ci0g
ICAgfQotCi0gICAgfkJpdG1hcENvbnRleHQoKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1fZGF0
YTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBtX2RhdGE7Ci0gICAgaW50IG1fd2lkdGgs
IG1faGVpZ2h0OwotCi1wcml2YXRlOgotCi0gICAgQml0bWFwQ29udGV4dCh1bnNpZ25lZCBjaGFy
KiBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0gICAgICAgIDogbV9kYXRhKGRhdGEpCi0g
ICAgICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAgICAgLCBtX2hlaWdodChoZWlnaHQpCi0gICAg
ewotICAgIH0KLX07Ci0KLSNlbmRpZiAvLyBQaXhlbER1bXBTdXBwb3J0QmxhY2tCZXJyeV9oCklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1Rlc3RSdW5uZXJCbGFja0JlcnJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1Rlc3RS
dW5uZXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTYxNjA2KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvYmxhY2tiZXJyeS9UZXN0UnVubmVyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNzA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RSdW5uZXIu
aCIKLQotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5o
IgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVC
bGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0LmgiCi0jaW5jbHVk
ZSAiRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnRCbGFja0Jl
cnJ5LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkpTRWxlbWVudC5oIgotI2luY2x1ZGUg
IlVSTC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgot
I2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5o
IgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3ku
aCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotI2luY2x1
ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3Qu
aD4KLSNpbmNsdWRlIDxTaGFyZWRQb2ludGVyLmg+Ci0jaW5jbHVkZSA8V2ViUGFnZS5oPgotI2lu
Y2x1ZGUgPFdlYlNldHRpbmdzLmg+Ci0KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIFdlYkNvcmU6OnRvRWxlbWVudDsK
LXVzaW5nIFdlYkNvcmU6OnRvSlM7Ci0KLVRlc3RSdW5uZXI6On5UZXN0UnVubmVyKCkKLXsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKLXsK
LSAgICBVTlVTRURfUEFSQU0odXJsKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKLXsKLSNpZiBFTkFCTEUoREFUQUJBU0Up
Ci0gICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlQWxsRGF0YWJh
c2VzKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlz
dCgpCi17Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudElu
c3RhbmNlKCktPnBhZ2UoKS0+Y2xlYXJCYWNrRm9yd2FyZExpc3QodHJ1ZSk7Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLUpTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlEZWNvZGVkSG9z
dE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0obmFtZSk7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgVGVzdFJ1
bm5lcjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQotewotICAgIFVOVVNF
RF9QQVJBTShuYW1lKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMgU3RyaW5nIGpzU3RyaW5nUmVmVG9XZWJD
b3JlU3RyaW5nKEpTU3RyaW5nUmVmIHN0cikKLXsKLSAgICBzaXplX3Qgc3RyQXJyU2l6ZSA9IEpT
U3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHIpOwotICAgIE93bkFycmF5UHRyPGNo
YXI+IHN0ckFyciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbc3RyQXJyU2l6ZV0pOwotICAgIEpT
U3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyLCBzdHJBcnIuZ2V0KCksIHN0ckFyclNpemUpOwotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0ckFyci5nZXQoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1
bm5lcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgdmFsdWUpCi17
Ci0gICAgaWYgKCFtYWluRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBuYW1l
U3RyID0ganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcobmFtZSk7Ci0gICAgU3RyaW5nIHZhbHVl
U3RyID0ganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcodmFsdWUpOwotCi0gICAgbWFpbkZyYW1l
LT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lU3RyKS5leGVjdXRlKHZhbHVlU3RyKTsKLX0KLQotYm9v
bCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAg
aWYgKCFtYWluRnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZyBuYW1l
U3RyID0ganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcobmFtZSk7Ci0KLSAgICByZXR1cm4gbWFp
bkZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lU3RyKS5pc0VuYWJsZWQoKTsKLX0KLQotdm9p
ZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKLXsKLSAgICBpZiAobV93YWl0VG9E
dW1wICYmICghdG9wTG9hZGluZ0ZyYW1lIHx8IEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRl
clRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5sb2FkRmluaXNoZWQoKSkgJiYgIVdvcmtRdWV1ZTo6
c2hhcmVkKCktPmNvdW50KCkpCi0gICAgICAgIGR1bXAoKTsKLQotICAgIG1fd2FpdFRvRHVtcCA9
IGZhbHNlOwotICAgIHdhaXRGb3JQb2xpY3kgPSBmYWxzZTsKLX0KLQotSlNTdHJpbmdSZWYgVGVz
dFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmIHVy
bCkKLXsKLSAgICByZXR1cm4gSlNTdHJpbmdSZXRhaW4odXJsKTsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCi17Ci0g
ICAgc2l6ZV90IHVybEFyclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUo
dXJsKTsKLSAgICBPd25BcnJheVB0cjxjaGFyPiB1cmxBcnIgPSBhZG9wdEFycmF5UHRyKG5ldyBj
aGFyW3VybEFyclNpemVdKTsKLSAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHVybCwgdXJsQXJy
LmdldCgpLCB1cmxBcnJTaXplKTsKLQotICAgIFdlYkNvcmU6OlVSTCBiYXNlID0gbWFpbkZyYW1l
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKS51cmwoKTsKLSAgICBXZWJD
b3JlOjpVUkwgYWJzb2x1dGUoYmFzZSwgdXJsQXJyLmdldCgpKTsKLQotICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBhYnNvbHV0ZVVSTChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoYWJzb2x1dGUuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOwotICAgIFdvcmtRdWV1ZTo6
c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRp
dGluZykKLXsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50
SW5zdGFuY2UoKS0+c2V0QWNjZXB0c0VkaXRpbmcoYWNjZXB0c0VkaXRpbmcpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHF1
b3RhKQotewotICAgIFVOVVNFRF9QQVJBTShxdW90YSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29s
IGVuYWJsZSkKLXsKLSAgICBtYWluRnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXV0aG9y
QW5kVXNlclN0eWxlc0VuYWJsZWQoZW5hYmxlKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRD
YWNoZU1vZGVsKGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RS
dW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgc2V0RGVsZWdhdGUsIGJvb2wgcGVy
bWlzc2l2ZSkKLXsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJy
ZW50SW5zdGFuY2UoKS0+c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoc2V0RGVsZWdhdGUsIHBlcm1p
c3NpdmUpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9y
aWdpbihPcGFxdWVKU1N0cmluZyopCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBw
b3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi1sb25nIGxvbmcgVGVzdFJ1bm5lcjo6bG9jYWxTdG9yYWdl
RGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4K
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1ZhbHVlUmVmIFRl
c3RSdW5uZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0NvbnRleHRSZWYgY29udGV4
dCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIGdldCBvcmlnaW5zIHRoYXQgY29udGFp
biBhcHBsaWNhdGlvbiBjYWNoZXMuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0
RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17Ci0gICAgaWYgKCFtYWlu
RnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLnNldFF1b3RhKG1haW5GcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KSwgcXVvdGEpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3Ji
aWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNjaGVtZSkKLXsK
LSAgICBXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRl
bkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHNjaGVt
ZSkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBp
Y29uRGF0YWJhc2VFbmFibGVkKQotewotICAgIFVOVVNFRF9QQVJBTShpY29uRGF0YWJhc2VFbmFi
bGVkKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldE1h
aW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKQotewotICAgIFVOVVNFRF9QQVJBTShm
bGFnKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFBl
cnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHBhdGgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIEJsYWNr
QmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCkt
PnNldHRpbmdzKCktPnNldEphdmFTY3JpcHRPcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoIWZsYWcp
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBm
bGFnKQotewotICAgIFVOVVNFRF9QQVJBTShmbGFnKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZmxhZykKLXsK
LSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2Uo
KS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRYU1NBdWRpdG9yRW5hYmxlZChmbGFnKTsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBjeWNs
ZXMpCi17Ci0gICAgaWYgKCFtYWluRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1haW5G
cmFtZS0+cGFnZSgpLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY3ljbGVzKTsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29s
IGZsYWcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWcpOwotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZmxh
ZykKLXsKLSAgICBVTlVTRURfUEFSQU0oZmxhZyk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVm
IHBhdGgpCi17Ci0gICAgU3RyaW5nIHBhdGhTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmlu
ZyhwYXRoKTsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50
SW5zdGFuY2UoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KHBhdGhTdHIpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgp
Ci17Ci0gICAgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUodHJ1ZSwgdHJ1ZSk7Ci0gICAgc2V0V2Fp
dFRvRHVtcCh0cnVlKTsKLSAgICB3YWl0Rm9yUG9saWN5ID0gdHJ1ZTsKLX0KLQotc2l6ZV90IFRl
c3RSdW5uZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQotewotICAgIFNoYXJlZEFycmF5PEJsYWNr
QmVycnk6OldlYktpdDo6V2ViUGFnZTo6QmFja0ZvcndhcmRFbnRyeT4gYmFja0ZvcndhcmRMaXN0
OwotICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5j
ZSgpLT5wYWdlKCktPmdldEJhY2tGb3J3YXJkTGlzdChiYWNrRm9yd2FyZExpc3QpOwotICAgIHJl
dHVybiBiYWNrRm9yd2FyZExpc3QubGVuZ3RoKCk7Ci19Ci0KLWludCBUZXN0UnVubmVyOjp3aW5k
b3dDb3VudCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFRvRHVtcCkKLXsKLSAgICAv
LyBDaGFuZ2UgZnJvbSAzMHMgdG8gMzVzIGJlY2F1c2Ugc29tZSB0ZXN0IGNhc2VzIGluIG11bHRp
cGFydCBuZWVkIDMwIHNlY29uZHMsCi0gICAgLy8gcmVmZXIgdG8gaHR0cC90ZXN0cy9tdWx0aXBh
cnQvcmVzb3VyY2VzL211bHRpcGFydC13YWl0LWJlZm9yZS1ib3VuZGFyeS5waHAgcGxlYXNlLgot
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUga1dhaXRUb0R1bXBXYXRjaGRvZ0ludGVydmFsID0gMzUu
MDsKLSAgICBtX3dhaXRUb0R1bXAgPSB3YWl0VG9EdW1wOwotICAgIGlmIChtX3dhaXRUb0R1bXAp
Ci0gICAgICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0
YW5jZSgpLT5zZXRXYWl0VG9EdW1wV2F0Y2hkb2coa1dhaXRUb0R1bXBXYXRjaGRvZ0ludGVydmFs
KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRXaW5kb3dJc0tleShib29sIHdpbmRvd0lzS2V5
KQotewotICAgIG1fd2luZG93SXNLZXkgPSB3aW5kb3dJc0tleTsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpvdmVycmlkZVByZWZl
cmVuY2UoSlNTdHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1h
aW5GcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGtleVN0ciA9IGpzU3RyaW5n
UmVmVG9XZWJDb3JlU3RyaW5nKGtleSk7Ci0gICAgU3RyaW5nIHZhbHVlU3RyID0ganNTdHJpbmdS
ZWZUb1dlYkNvcmVTdHJpbmcodmFsdWUpOwotCi0gICAgaWYgKGtleVN0ciA9PSAiV2ViS2l0VXNl
c1BhZ2VDYWNoZVByZWZlcmVuY2VLZXkiKQotICAgICAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1
bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRN
YXhpbXVtUGFnZXNJbkNhY2hlKDEpOwotICAgIGVsc2UgaWYgKGtleVN0ciA9PSAiV2ViS2l0VXNl
UHJlSFRNTDVQYXJzZXJRdWlya3MiKQotICAgICAgICBtYWluRnJhbWUtPnBhZ2UoKS0+c2V0dGlu
Z3MoKS0+c2V0VXNlUHJlSFRNTDVQYXJzZXJRdWlya3ModHJ1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5
U3RyID09ICJXZWJLaXRUYWJUb0xpbmtzUHJlZmVyZW5jZUtleSIpCi0gICAgICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydDo6c2V0TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbih2YWx1ZVN0ciA9PSAi
dHJ1ZSIgfHwgdmFsdWVTdHIgPT0gIjEiKTsKLSAgICBlbHNlIGlmIChrZXlTdHIgPT0gIldlYktp
dEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCIpCi0gICAgICAgIG1haW5GcmFtZS0+cGFnZSgpLT5z
ZXR0aW5ncygpLT5zZXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQodmFsdWVTdHIgPT0gInRydWUi
IHx8IHZhbHVlU3RyID09ICIxIik7Ci0gICAgZWxzZSBpZiAoa2V5U3RyID09ICJXZWJTb2NrZXRz
RW5hYmxlZCIpCi0gICAgICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1
cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPnNldHRpbmdzKCktPnNldFdlYlNvY2tldHNFbmFibGVk
KHZhbHVlU3RyID09ICJ0cnVlIiB8fCB2YWx1ZVN0ciA9PSAiMSIpOwotICAgIGVsc2UgaWYgKGtl
eVN0ciA9PSAiV2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUiKQotICAgICAgICBCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5z
ZXR0aW5ncygpLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZSh2YWx1ZVN0cik7Ci0gICAgZWxz
ZSBpZiAoa2V5U3RyID09ICJXZWJLaXREaXNwbGF5SW1hZ2VzS2V5IikKLSAgICAgICAgQmxhY2tC
ZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+
c2V0dGluZ3MoKS0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHZhbHVlU3RyID09ICJ0cnVl
IiB8fCB2YWx1ZVN0ciA9PSAiMSIpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0Fj
Y2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKQotewotICAgIFVOVVNFRF9QQVJB
TShhbHdheXNBY2NlcHRDb29raWVzKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwg
ZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUs
IGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBh
bHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJv
b2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkKQotewotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1w
UmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKSwgbGF0aXR1ZGUsIGxvbmdpdHVk
ZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJv
dmlkZXNTcGVlZCwgc3BlZWQpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdlKQotewotICAg
IFN0cmluZyBtZXNzYWdlU3RyID0ganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcobWVzc2FnZSk7
Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVu
YXZhaWxhYmxlRXJyb3IoQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVu
dEluc3RhbmNlKCktPnBhZ2UoKSwgbWVzc2FnZVN0cik7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6
c2hvd1dlYkluc3BlY3RvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBU
ZXN0UnVubmVyOjpjbG9zZVdlYkluc3BlY3RvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElk
LCBKU1N0cmluZ1JlZiBzY3JpcHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxJZCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHNjcmlwdCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBU
ZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVu
c2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2Ny
aXB0KQotewotICAgIFVOVVNFRF9QQVJBTSh3b3JsZElEKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xv
YmFsT2JqZWN0KTsKLSAgICBVTlVTRURfUEFSQU0oc2NyaXB0KTsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYg
c2NyaXB0KQotewotICAgIFVOVVNFRF9QQVJBTSh3b3JsZElEKTsKLSAgICBVTlVTRURfUEFSQU0o
Z2xvYmFsT2JqZWN0KTsKLSAgICBVTlVTRURfUEFSQU0oc2NyaXB0KTsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYg
c291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQotewotICAgIFVOVVNFRF9Q
QVJBTShzb3VyY2UpOwotICAgIFVOVVNFRF9QQVJBTShydW5BdFN0YXJ0KTsKLSAgICBVTlVTRURf
UEFSQU0oYWxsRnJhbWVzKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RS
dW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmLCBib29sKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpT
U3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFRlc3RSdW5uZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6YXV0aGVudGljYXRlU2Vzc2lvbihKU1N0
cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBUZXN0
UnVubmVyOjpzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Q
cm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRp
b25TdWJkb21haW5zKQotewotICAgIFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeSgqV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21T
dHJpbmcoanNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcoc291cmNlT3JpZ2luKSksCi0gICAgICAg
IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKGRlc3RpbmF0aW9uUHJvdG9jb2wpLAotICAgICAg
ICBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhkZXN0aW5hdGlvbkhvc3QpLAotICAgICAgICBh
bGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cmVtb3Zl
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0
cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3Qs
IGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCi17Ci0gICAgV2ViQ29yZTo6U2VjdXJp
dHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KCpXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhz
b3VyY2VPcmlnaW4pKSwKLSAgICAgICAganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcoZGVzdGlu
YXRpb25Qcm90b2NvbCksCi0gICAgICAgIGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKGRlc3Rp
bmF0aW9uSG9zdCksCi0gICAgICAgIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFi
bGVkKQotewotICAgIGlmICghbWFpbkZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYWlu
RnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxz
KGVuYWJsZWQpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNz
RnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbWFpbkZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnNldEFsbG93
VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZWQpOwotfQotCi12b2lkIFRlc3RSdW5u
ZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYsIEpTU3RyaW5n
UmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6YXBp
VGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQo
Ym9vbCBmbGFnKQotewotICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1
cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQo
ZmxhZyk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9kYWwo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJB
bGxBcHBsaWNhdGlvbkNhY2hlcygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBUZXN0UnVubmVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxw
aGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wg
Y2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0OjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVu
ZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKSwgY2FuUHJvdmlkZUFscGhhLCBhbHBo
YSwgY2FuUHJvdmlkZUJldGEsIGJldGEsIGNhblByb3ZpZGVHYW1tYSwgZ2FtbWEpOwotfQotCi12
b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiwgZG91
YmxlLCBKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQotewotICAgIHNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Ci0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKEJsYWNrQmVycnk6OldlYktpdDo6
RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCksIGFsbG93KTsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShjb25zdCBKU1N0cmluZ1Jl
ZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFNl
cmlhbGl6ZUhUVFBMb2Fkcyhib29sKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaWYgbmVl
ZGVkIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3NTguCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0
aW9uKEpTU3RyaW5nUmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6Z29CYWNrKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRvIGVuYWJsZSBs
b2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0RGVmZXJzTG9hZGluZyhib29sKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxvYWRlci9uYXZpZ2F0aW9uLXdo
aWxlLWRlZmVycmluZy1sb2Fkcy5odG1sCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotSlNW
YWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYg
Y29udGV4dCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpvYnNlcnZlU3RvcmFn
ZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2Uo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWludCBUZXN0UnVubmVyOjpudW1iZXJP
ZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCi17Ci0gICAgcmV0dXJuIER1
bXBSZW5kZXJUcmVlU3VwcG9ydDo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdHMoQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3Rh
bmNlKCktPnBhZ2UoKSk7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlZiBvcHRpb25zQXJy
YXkpCi17Ci0gICAgV2ViQ29yZTo6RmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7Ci0KLSAgICBTdHJp
bmcgbmFtZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHRhcmdldCk7Ci0KLSAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIHNpemVfdCBsZW5ndGggPSAw
OwotICAgIGlmIChvcHRpb25zQXJyYXkpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQcm9w
ZXJ0eU5hbWUuZ2V0KCksIDApOwotICAgICAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0
LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxlbmd0
aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZh
bHVlLCAwKSk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5k
ZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNT
dHJpbmcoY29udGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9wdGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLQotICAgICAgICBpZiAoSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQ2FzZUluc2Vuc2l0aXZlIikpCi0gICAg
ICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZTsKLSAgICAgICAgZWxz
ZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQXRX
b3JkU3RhcnRzIikpCi0gICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OkF0V29yZFN0YXJ0
czsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25O
YW1lLmdldCgpLCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiKSkKLSAgICAgICAgICAg
IG9wdGlvbnMgfD0gV2ViQ29yZTo6VHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7Ci0gICAg
ICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQo
KSwgIkJhY2t3YXJkcyIpKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpCYWNrd2Fy
ZHM7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9u
TmFtZS5nZXQoKSwgIldyYXBBcm91bmQiKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29y
ZTo6V3JhcEFyb3VuZDsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhvcHRpb25OYW1lLmdldCgpLCAiU3RhcnRJblNlbGVjdGlvbiIpKQotICAgICAgICAgICAg
b3B0aW9ucyB8PSBXZWJDb3JlOjpTdGFydEluU2VsZWN0aW9uOwotICAgIH0KLQotICAgIC8vIEZJ
WE1FOiB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgV2ViUGFnZTo6ZmluZE5leHRTdHJpbmcoKSwgdGhp
cyBpcyBhIHdvcmthcm91bmQKLSAgICAvLyBzbyB0aGF0IHRlc3QgcGxhdGZvcm0vYmxhY2tiZXJy
eS9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZFN0cmluZy1tYXJrZXJzLmh0bWwgY2FuIHBhc3Mu
Ci0KLSAgICAvLyBPdXIgbGF5b3V0IHRlc3RzIGFzc3VtZSBmaW5kIHdpbGwgd3JhcCBhbmQgaGln
aGxpZ2h0IGFsbCBtYXRjaGVzLgotICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRy
ZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPmZpbmROZXh0U3RyaW5nKG5hbWVTdHIudXRm
OCgpLmRhdGEoKSwKLSAgICAgICAgIShvcHRpb25zICYgV2ViQ29yZTo6QmFja3dhcmRzKSwgIShv
cHRpb25zICYgV2ViQ29yZTo6Q2FzZUluc2Vuc2l0aXZlKSwgdHJ1ZSAvKiB3cmFwICovLCB0cnVl
IC8qIGhpZ2hsaWdodEFsbE1hdGNoZXMgKi8sIGZhbHNlIC8qIHNlbGVjdEFjdGl2ZU1hdGNoT25D
bGVhciAqLyk7Ci0KLSAgICByZXR1cm4gbWFpbkZyYW1lLT5wYWdlKCktPmZpbmRTdHJpbmcobmFt
ZVN0ciwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZGVsZXRlTG9jYWxTdG9yYWdl
Rm9yT3JpZ2luKEpTU3RyaW5nUmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0K
LXZvaWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKLSAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVt
ZW50ID0gdG9FbGVtZW50KHRvSlMoZXhlYywgbm9kZU9iamVjdCkpOwotICAgIGlmICghZWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1dEVsZW1l
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlucHV0RWxlbWVudC0+c2V0VmFsdWVGb3JVc2Vy
KGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHZhbHVlKSk7Ci19Ci0KLWxvbmcgbG9uZyBUZXN0
UnVubmVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmKQot
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2Ug
YnkgYWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgotICAgIHJldHVybiAwOwot
fQotCi12b2lkIFRlc3RSdW5uZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQotewotfQotCi12b2lk
IFRlc3RSdW5uZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoKQotewotfQotCi12b2lkIFRlc3RS
dW5uZXI6OmZvY3VzV2ViVmlldygpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QmFja2lu
Z1NjYWxlRmFjdG9yKGRvdWJsZSkKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrU3Bl
ZWNoSW5wdXREdW1wUmVjdChib29sKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OmdyYW50V2Vi
Tm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZikKLXsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpkZW55V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZikKLXsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpCi17
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhKU1Zh
bHVlUmVmKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlTGVnYWN5V2ViTm90aWZp
Y2F0aW9uQ2xpY2soSlNTdHJpbmdSZWYpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRQ
YWdlVmlzaWJpbGl0eSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0
UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25F
bmFibGVkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlKQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OmNsb3NlSWRsZUxvY2FsU3RvcmFnZURhdGFiYXNlcygpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvV29y
a1F1ZXVlSXRlbUJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2JsYWNrYmVycnkvV29ya1F1ZXVlSXRlbUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNjE2
MDYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1dvcmtRdWV1ZUl0ZW1CbGFj
a0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgiCi0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZUJsYWNrQmVycnkuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJl
cXVlc3QuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVk
ZSA8d3RmL093bkFycmF5UHRyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1ib29s
IExvYWRJdGVtOjppbnZva2UoKSBjb25zdAotewotICAgIHNpemVfdCB0YXJnZXRBcnJTaXplID0g
SlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKG1fdGFyZ2V0LmdldCgpKTsKLSAgICBz
aXplX3QgdXJsQXJyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShtX3Vy
bC5nZXQoKSk7Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gdGFyZ2V0ID0gYWRvcHRBcnJheVB0cihu
ZXcgY2hhclt0YXJnZXRBcnJTaXplXSk7Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gdXJsID0gYWRv
cHRBcnJheVB0cihuZXcgY2hhclt1cmxBcnJTaXplXSk7Ci0gICAgc2l6ZV90IHRhcmdldExlbiA9
IEpTU3RyaW5nR2V0VVRGOENTdHJpbmcobV90YXJnZXQuZ2V0KCksIHRhcmdldC5nZXQoKSwgdGFy
Z2V0QXJyU2l6ZSkgLSAxOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcobV91cmwuZ2V0KCks
IHVybC5nZXQoKSwgdXJsQXJyU2l6ZSk7Ci0KLSAgICBGcmFtZSogZnJhbWU7Ci0gICAgaWYgKHRh
cmdldCAmJiB0YXJnZXRMZW4pCi0gICAgICAgIGZyYW1lID0gbWFpbkZyYW1lLT50cmVlKCktPmZp
bmQodGFyZ2V0LmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGZyYW1lID0gbWFpbkZyYW1lOwot
Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVVJMIGt1cmwg
PSBVUkwoVVJMKCksIHVybC5nZXQoKSk7Ci0gICAgZnJhbWUtPmxvYWRlcigpLT5sb2FkKEZyYW1l
TG9hZFJlcXVlc3QoZnJhbWUsIFJlc291cmNlUmVxdWVzdChrdXJsKSkpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIExvYWRIVE1MU3RyaW5nSXRlbTo6aW52b2tlKCkgY29uc3QKLXsKLSAg
ICBzaXplX3QgY29udGVudFNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUo
bV9jb250ZW50LmdldCgpKTsKLSAgICBzaXplX3QgYmFzZVVSTFNpemUgPSBKU1N0cmluZ0dldE1h
eGltdW1VVEY4Q1N0cmluZ1NpemUobV9iYXNlVVJMLmdldCgpKTsKLSAgICBzaXplX3QgdW5yZWFj
aGFibGVVUkxTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKG1fdW5yZWFj
aGFibGVVUkwuZ2V0KCkpOwotICAgIE93bkFycmF5UHRyPGNoYXI+IGNvbnRlbnQgPSBhZG9wdEFy
cmF5UHRyKG5ldyBjaGFyW2NvbnRlbnRTaXplXSk7Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gYmFz
ZVVSTCA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbYmFzZVVSTFNpemVdKTsKLSAgICBPd25BcnJh
eVB0cjxjaGFyPiB1bnJlYWNoYWJsZVVSTCA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdW5yZWFj
aGFibGVVUkxTaXplXSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhtX2NvbnRlbnQuZ2V0
KCksIGNvbnRlbnQuZ2V0KCksIGNvbnRlbnRTaXplKTsKLSAgICBKU1N0cmluZ0dldFVURjhDU3Ry
aW5nKG1fYmFzZVVSTC5nZXQoKSwgYmFzZVVSTC5nZXQoKSwgYmFzZVVSTFNpemUpOwotICAgIEpT
U3RyaW5nR2V0VVRGOENTdHJpbmcobV91bnJlYWNoYWJsZVVSTC5nZXQoKSwgdW5yZWFjaGFibGVV
UkwuZ2V0KCksIHVucmVhY2hhYmxlVVJMU2l6ZSk7Ci0gICAgU1RBVElDX0xPQ0FMX1NUUklORyhz
X3RleHRIdG1sLCAidGV4dC9odG1sIik7Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVu
ZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+bG9hZFN0cmluZyhCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nOjpmcm9tVXRmOChjb250ZW50LmdldCgpKSwgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZzo6ZnJvbVV0ZjgoYmFzZVVSTC5nZXQoKSksIHNfdGV4dEh0bWwsIHVu
cmVhY2hhYmxlVVJMU2l6ZSA/IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmZyb21VdGY4
KHVucmVhY2hhYmxlVVJMLmdldCgpKSA6IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVt
cHR5U3RyaW5nKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbG9hZEl0ZW06Omlu
dm9rZSgpIGNvbnN0Ci17Ci0gICAgbWFpbkZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkKHRydWUpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNjcmlwdEl0ZW06Omludm9rZSgpIGNvbnN0Ci17
Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpKYXZhU2NyaXB0RGF0YVR5cGUgdHlwZTsKLSAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIHJlc3VsdDsKLSAgICBzaXplX3Qgc2NyaXB0QXJy
U2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShtX3NjcmlwdC5nZXQoKSk7
Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gc2NyaXB0ID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltz
Y3JpcHRBcnJTaXplXSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhtX3NjcmlwdC5nZXQo
KSwgc2NyaXB0LmdldCgpLCBzY3JpcHRBcnJTaXplKTsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6
OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5leGVjdXRlSmF2YVNj
cmlwdChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjpmcm9tUmF3RGF0YShzY3JpcHQuZ2V0
KCksIHNjcmlwdEFyclNpemUpLCB0eXBlLCByZXN1bHQpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIEJhY2tGb3J3YXJkSXRlbTo6aW52b2tlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQmxh
Y2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2Uo
KS0+Z29CYWNrT3JGb3J3YXJkKG1faG93RmFyKTsKLX0KLQpJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvYmxhY2tiZXJyeS9idWlsZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9ibGFja2JlcnJ5L2J1aWxkCShyZXZpc2lvbiAxNjE2MDYpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9ibGFja2JlcnJ5L2J1aWxkCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyICswLDAgQEAKLSMh
L2Jpbi9zaAotCi0jIFRoaXMgZmlsZSBidWlsZHMgdGhlIEltYWdlRGlmZiBleGVjdXRhYmxlLCB0
byBydW4KLSMgb24gdGhlIGhvc3QgbWFjaGluZS4KLQotd2hpY2ggcW1ha2UtcXQ0ID4gL2Rldi9u
dWxsCi1pZiBbICQ/IC1lcSAwIF0gOyB0aGVuCi0gICAgcW1ha2UtcXQ0Ci1lbHNlCi0gICAgcW1h
a2UKLWZpCi1tYWtlCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjE2MDcpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxNC0wMS0wOSAgQmVu
amFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhl
IEJsYWNrQmVycnkgZmlsZXMgb3V0c2lkZSBXZWJDb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY3MTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnk6IFJlbW92ZWQu
CisKIDIwMTQtMDEtMDkgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgW0NTUyBTaGFwZXNdIEZpcnN0IGxpbmUgZ2V0cyBpbmNvcnJlY3RseSBhZGp1c3RlZCBp
biBzaGFwZS1pbnNpZGUgZHVlIHRvIHJvdW5kaW5nCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ibGFja2JlcnJ5L2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLW1hcmtlcnMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkv
ZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJpbmctbWFya2Vycy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZWRpdGlu
Zy90ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJpbmctbWFya2Vycy1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNTcgKzAsMCBAQAotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQot
Ci1URVNUIENPTVBMRVRFCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJz
dENoaWxkLCAidGV4dG1hdGNoIikgaXMgMAotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JO
b2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDAKLVBBU1MgaW50ZXJuYWxzLm1hcmtl
ckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAwCi1QQVNTIGludGVy
bmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQot
UEFTUyAiZCIgaXMgImQiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJz
dENoaWxkLCAidGV4dG1hdGNoIikgaXMgMwotUEFTUyAiZSIgaXMgImUiCi1QQVNTICJlIiBpcyAi
ZSIKLVBBU1MgImUiIGlzICJlIgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUu
Zmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEKLVBBU1MgImYiIGlzICJmIgotUEFTUyBpbnRl
cm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEK
LVBBU1MgIlQiIGlzICJUIgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmly
c3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDAKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9y
Tm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAwCi1QQVNTIGludGVybmFscy5tYXJr
ZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAieCIg
aXMgIngiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAi
dGV4dG1hdGNoIikgaXMgMQotUEFTUyAieSIgaXMgInkiCi1QQVNTIGludGVybmFscy5tYXJrZXJD
b3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAieiIgaXMg
InoiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4
dG1hdGNoIikgaXMgMQotUEFTUyAiLiIgaXMgIi4iCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3Vu
dEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAiYSIgaXMgImEi
Ci1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1h
dGNoIikgaXMgMQotUEFTUyAiYiIgaXMgImIiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZv
ck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAiYyIgaXMgImMiCi1Q
QVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNo
IikgaXMgMQotUEFTUyAiZCIgaXMgImQiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5v
ZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMwotUEFTUyAiZSIgaXMgImUiCi1QQVNT
ICJlIiBpcyAiZSIKLVBBU1MgImUiIGlzICJlIgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRG
b3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEKLVBBU1MgImYiIGlzICJmIgot
UEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRj
aCIpIGlzIDIKLVBBU1MgIlQiIGlzICJUIgotUEFTUyAidCIgaXMgInQiCi1QQVNTIGludGVybmFs
cy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMgotUEFT
UyAidSIgaXMgInUiCi1QQVNTICJ1IiBpcyAidSIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50
Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICJ2IiBpcyAidiIK
LVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0
Y2giKSBpcyAxCi1QQVNTICJ4IiBpcyAieCIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9y
Tm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICJ5IiBpcyAieSIKLVBB
U1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2gi
KSBpcyAxCi1QQVNTICJ6IiBpcyAieiIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9k
ZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICIuIiBpcyAiLiIKLVRoZSBx
dWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuCkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLW1h
cmtlcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5
L2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLW1hcmtlcnMuaHRtbAkocmV2aXNpb24g
MTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9lZGl0aW5nL3RleHQt
aXRlcmF0b3IvZmluZFN0cmluZy1tYXJrZXJzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAx
ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzdHlsZT4KLS5wbGFp
bnRleHQgewotICAgIGJvcmRlcjogMnB4IHNvbGlkIHJlZDsKLSAgICBwYWRkaW5nOiAxMnB4Owot
ICAgIGZvbnQtc2l6ZTogMjRweDsKLX0KLTwvc3R5bGU+Ci08c2NyaXB0IHNyYz0iLi4vLi4vLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5Pgot
PHByZSBpZD0iZGVzY3JpcHRpb24iPjwvcHJlPgotPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Ci08
ZGl2IGlkPSJjb250YWluZXIiPgotPC9kaXY+Ci0KLTxzY3JpcHQ+Ci0KLWlmICh3aW5kb3cudGVz
dFJ1bm5lcikgewotICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwotICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOwotfQotCi1mdW5jdGlvbiBjcmVhdGVQbGFpblRleHRFbGVtZW50KGlk
LCB0ZXh0LCBwYXJlbnQpIHsKLSAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOwotICAgIGUuY2xhc3NOYW1lID0gJ3BsYWludGV4dCc7Ci0gICAgZS5pZCA9IGlkOwotICAg
IGUuaW5uZXJUZXh0ID0gdGV4dDsKLQotICAgIHBhcmVudC5hcHBlbmRDaGlsZChlKTsKLSAgICBy
ZXR1cm4gZTsKLX0KLQotZnVuY3Rpb24gb2NjdXJyZW5jZXMoc3RyaW5nLCBzdWJzdHJpbmcsIGNh
c2VTZW5zaXRpdmUpIHsKLSAgICB2YXIgbj0wOwotICAgIHZhciBwb3M9MDsKLQotICAgIHZhciBo
YXlzdGFjayA9IGNhc2VTZW5zaXRpdmUgPyBzdHJpbmcgOiBzdHJpbmcudG9Mb3dlckNhc2UoKTsK
LSAgICB2YXIgbmVlZGxlID0gY2FzZVNlbnNpdGl2ZSA/IHN1YnN0cmluZyA6IHN1YnN0cmluZy50
b0xvd2VyQ2FzZSgpOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgcG9zID0gaGF5c3Rh
Y2suaW5kZXhPZihuZWVkbGUscG9zKTsKLSAgICAgICAgaWYgKHBvcyE9LTEpIHsKLSAgICAgICAg
ICAgICsrbjsKLSAgICAgICAgICAgIHBvcys9bmVlZGxlLmxlbmd0aDsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIG47Ci19Ci0KLWZ1bmN0aW9u
IGNoZWNrVGV4dE1hdGNoTWFya2VyKGluZGV4LCBmaW5kT3B0aW9ucykgewotICAgIGlmIChpbmRl
eCA+IDEyKSB7Ci0gICAgICAgIGlmIChmaW5kT3B0aW9ucy5sZW5ndGggPT0gMCkgewotICAgICAg
ICAgICAgaW5kZXggPSAwOwotICAgICAgICAgICAgZmluZE9wdGlvbnMucHVzaCgiQ2FzZUluc2Vu
c2l0aXZlIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICB2YXIg
c3RyID0gJ0FCQ2RlZlRVVnh5ei4nOwotICAgIHZhciBjaGFyID0gc3RyLmNoYXJBdChpbmRleCk7
Ci0gICAgdmFyIGNhc2VTZW5zaXRpdmUgPSBmaW5kT3B0aW9ucy5pbmRleE9mKCJDYXNlSW5zZW5z
aXRpdmUiKSA9PSAtMTsKLSAgICB0ZXN0UnVubmVyLmZpbmRTdHJpbmcoY2hhciwgZmluZE9wdGlv
bnMpOwotICAgIC8vIFN0YXJ0IHRoZSBmdW5jdGlvbiBsYXRlciB0byBhbGxvdyBtYXJraW5nIHBy
b2Nlc3MgdG8gZmluaXNoLgotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZh
ciBjb3VudCA9IG9jY3VycmVuY2VzKHRleHQsIGNoYXIsIGNhc2VTZW5zaXRpdmUpOwotCi0gICAg
ICAgIC8vIFRoZSBudW1iZXIgb2YgbWFya2VycyBzaG91bGQgbWF0Y2ggdG8gdGhlIG9jY3VycmVu
Y2VzIG9mIHRoZSBjaGFyYWN0b3IuCi0gICAgICAgIHNob3VsZEJlKCdpbnRlcm5hbHMubWFya2Vy
Q291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpJywgY291bnQudG9TdHJpbmco
KSk7Ci0gICAgICAgIHZhciBzZWFyY2hTdGFydEluZGV4ID0gMDsKLSAgICAgICAgLy8gR2V0IHRo
ZSBjaGFyIGZyb20gdGV4dCBhbmQgY29tcGFyZSB3aXRoIHRoZSBtYXJrZXIgcmFuZ2UgY29udGVu
dC4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudCA7ICsraSkgewotICAgICAgICAg
ICAgdmFyIHJhbmdlID0gaW50ZXJuYWxzLm1hcmtlclJhbmdlRm9yTm9kZShlLmZpcnN0Q2hpbGQs
ICJ0ZXh0bWF0Y2giLCBpKTsKLSAgICAgICAgICAgIHZhciBwb3MgPSBjYXNlU2Vuc2l0aXZlID8g
dGV4dC5pbmRleE9mKGNoYXIsIHNlYXJjaFN0YXJ0SW5kZXgpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IHRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKGNoYXIudG9Mb3dl
ckNhc2UoKSwgc2VhcmNoU3RhcnRJbmRleCk7Ci0gICAgICAgICAgICBzZWFyY2hTdGFydEluZGV4
ID0gcG9zICsgMTsKLSAgICAgICAgICAgIHZhciBleHBlY3RTdHIgPSB0ZXh0LmNoYXJBdChwb3Mp
OwotICAgICAgICAgICAgc2hvdWxkQmUoJyInICsgcmFuZ2UgKyAnIicsICciJyArIGV4cGVjdFN0
ciArICciJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2hlY2tUZXh0TWF0Y2hNYXJrZXIoaW5kZXgg
KyAxLCBmaW5kT3B0aW9ucyk7Ci0gICAgfSwgODUwKTsKLX0KLQotdmFyIGNvbnRhaW5lciA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTsKLQotdmFyIGlkID0gJ2lkMScKLXZh
ciB0ZXh0ID0gJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuJzsK
LXZhciBlID0gY3JlYXRlUGxhaW5UZXh0RWxlbWVudChpZCwgdGV4dCwgY29udGFpbmVyKTsKLQot
aWYgKHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LnRlc3RSdW5uZXIpCi0gICAgY2hlY2tUZXh0
TWF0Y2hNYXJrZXIoMCwgW10pOwotCi12YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKLTwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vYmxhY2tiZXJyeS9leHRlcm5hbC9zZWFyY2gtcHJvdmlkZXIvc2VhcmNoLXByb3ZpZGVyLWlu
c3RhbGxlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
YmxhY2tiZXJyeS9leHRlcm5hbC9zZWFyY2gtcHJvdmlkZXIvc2VhcmNoLXByb3ZpZGVyLWluc3Rh
bGxlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL2JsYWNrYmVycnkvZXh0ZXJuYWwvc2VhcmNoLXByb3ZpZGVyL3NlYXJjaC1wcm92aWRlci1p
bnN0YWxsZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzAsMCBAQAotVGVz
dCBpZiB3aW5kb3cuZXh0ZXJuYWwgc2VhcmNoIGNvbXBvbmVudHMgYXJlIHN1cHBvcnRlZCwgYW5k
IGlmIGl0IHdvcmtzLgotUEFTUyAnd2luZG93LmV4dGVybmFsIEFkZFNlYXJjaFByb3ZpZGVyIGlz
IGNhbGxhYmxlLgotUEFTUyAnd2luZG93LmV4dGVybmFsIElzU2VhcmNoUHJvdmlkZXJJbnN0YWxs
ZWQgaXMgY2FsbGFibGUuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2V4
dGVybmFsL3NlYXJjaC1wcm92aWRlci9zZWFyY2gtcHJvdmlkZXItaW5zdGFsbGVkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9leHRlcm5hbC9zZWFy
Y2gtcHJvdmlkZXIvc2VhcmNoLXByb3ZpZGVyLWluc3RhbGxlZC5odG1sCShyZXZpc2lvbiAxNjE2
MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2V4dGVybmFsL3NlYXJjaC1w
cm92aWRlci9zZWFyY2gtcHJvdmlkZXItaW5zdGFsbGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTEsMzcgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQt
VHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hZGQtc2Vh
cmNoLXByb3ZpZGVyPC90aXRsZT4KLTxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPgotPC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlw
dCc+Ci1pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKLX0KLQotZnVuY3Rpb24gc3RhcnRUZXN0KCkKLXsKLSAgICB0cnkgewotICAgICAg
ICB3aW5kb3cuZXh0ZXJuYWwuQWRkU2VhcmNoUHJvdmlkZXIoImh0dHA6Ly93d3cuc2VhcmNoLmNv
bSIpOwotICAgICAgICB0ZXN0UGFzc2VkKCInd2luZG93LmV4dGVybmFsIEFkZFNlYXJjaFByb3Zp
ZGVyIGlzIGNhbGxhYmxlLiIpOwotICAgIH0gY2F0Y2ggKGV4KSB7Ci0gICAgICAgIHRlc3RGYWls
ZWQoIkdvdCBhbiBleGNlcHRpb24gd2hlbiBjYWxsaW5nIHdpbmRvdy5leHRlcm5hbC5BZGRTZWFy
Y2hQcm92aWRlcih1cmwpOiAiICsgZXgpOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICAgIHdp
bmRvdy5leHRlcm5hbC5Jc1NlYXJjaFByb3ZpZGVySW5zdGFsbGVkKCJodHRwOi8vd3d3LnNlYXJj
aC5jb20iKTsKLSAgICAgICAgdGVzdFBhc3NlZCgiJyd3aW5kb3cuZXh0ZXJuYWwgSXNTZWFyY2hQ
cm92aWRlckluc3RhbGxlZCBpcyBjYWxsYWJsZS4iKTsKLSAgICB9IGNhdGNoIChleCkgewotICAg
ICAgICB0ZXN0RmFpbGVkKCJHb3QgYW4gZXhjZXB0aW9uIHdoZW4gY2FsbGluZyB3aW5kb3cuZXh0
ZXJuYWwuSXNTZWFyY2hQcm92aWRlckluc3RhbGxlZCh1cmwpOiAiICsgZXgpOwotICAgIH0KLX0K
LQotZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeyBzdGFydFRlc3QoKTsgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpO30KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJs
b2FkQ29tcGxldGUoKSI+Ci08ZGl2IGlkPSJkZXNjcmlwdGlvbiI+VGVzdCBpZiB3aW5kb3cuZXh0
ZXJuYWwgc2VhcmNoIGNvbXBvbmVudHMgYXJlIHN1cHBvcnRlZCwgYW5kIGlmIGl0IHdvcmtzLjwv
ZGl2PgotPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJr
aXQtY2FudmFzLWV4cGVjdGVkLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJraXQtY2FudmFzLWV4cGVjdGVk
LnBuZwkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJy
eS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1leHBlY3RlZC5wbmcJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMCwwIEBACi2JUE5HDQotGgotAAAADUlIRFIAAAMgAAACWAgCAAAA
FRQVJwAAACl0RVh0Y2hlY2tzdW0AZWQwOTA4NzNmOWVmNzc5ZjEyMjdjZjY3YWQ5MmZkZWO3+H70
AAANL0lEQVR4nO3cWWoeRwBGUSl4RSYLzAJNtqS8GIc4Gv7hdncN57wKLUR1lR4un8Gvb29vLwAA
dP64+gAAAKsRWAAAMYEFABATWAAAMYEFABATWAAAMYEFABD79tEPXl9fzzwHG/J/sAGwKgsWAEDs
wwXrp7/OOATb+evqAwDAkSxYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAx
gQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYjR/fX358
v/oQAMAYBBYAQExgBX5tV0YsAOBFYAEA5ATWs35brYxYAIDAAgCICaynvLtXGbEAYHMCCwAgJrAe
98lSZcQCgJ0JLACAmMB60JcblRELALYlsAAAYgLrETeuU0YsANiTwAIAiAmsu921SxmxAGBDAgsA
ICaw7vPAImXEAoDdCCwAgJjAusPDW5QRCwC2IrAAAGIC61ZPrlBGLADYh8ACAIgJrJsk+5MRCwA2
IbAAAGIC62vh8mTEAoAdCCwAgJjA+kK+ORmxAGB5AgsAICawPnPQ2mTEAoC1CSwAgJjA+tChO5MR
CwAWJrAAAGIC630nLExGLABYlcACAIgJrHecti0ZsQBgSQILACAmsH538qpkxAKA9QgsAICYwPqP
S/YkIxYALEZgAQDEBNa/LlySjFgAsBKBBQAQE1g/Xb4hXX4AAKAisAAAYgLr5WWY9WiQYwAATxJY
AAAxgTXWbjTUYQCAxwgsAIDY7oE14GI04JEAgLvsHlgAALmtA2vYrWjYgwEAt9g6sAAAjrBvYA2+
Eg1+PADgE/sGFgDAQTYNrCn2oSkOCQD836aBBQBwnB0Da6JlaKKjAgC/7BhYAACH2i6wptuEpjsw
ALBdYAEAHG2vwJp0DZr02ACwrb0CCwDgBBsF1tQ70NSHB4DdbBRYAADn2CWwFliAFvgEANjELoEF
AHCaLQJrme1nmQ8BgLVtEVgAAGdaP7AWW30W+xwAWNL6gQUAcLLFA2vJvWfJjwKAlSweWAAA51s5
sBZeehb+NABYwMqBBQBwiWUDa/mNZ/kPBIB5LRtYAABXWTOwNll3NvlMAJjOmoEFAHChBQNrq11n
q48FgFksGFgAANdaLbA2XHQ2/GQAGNxqgQUAcLmlAmvbLWfbDweAMS0VWAAAI1gnsDZfcTb/fAAY
yjqBBQAwiEUCy37z4hIAYBiLBBYAwDhWCCzLzS+uAgBGsEJgAQAMZfrAstn8xoUAwOWmDywAgNHM
HVjWmne5FgC41tyBBQAwoIkDy07zCZcDABeaOLAAAMY0a2BZaL7kigDgKrMGFgDAsKYMLNvMjVwU
AFxiysACABjZfIFllbmL6wKA880XWAAAg5sssOwxD3BpAHCyyQILAGB8MwWWJeZhrg4AzjRTYAEA
TGGawLLBPMkFAsBppgksAIBZzBFY1peEawSAc8wRWAAAE5kgsOwuIZcJACeYILAAAOYyemBZXHKu
FACONnpgAQBMZ+jAsrUcxMUCwKGGDiwAgBmNG1hWlkO5XgA4zriBBQAwqUEDy75yApcMAAcZNLAA
AOY1YmBZVk7jqgHgCCMGFgDA1IYLLJvKyVw4AOSGCywAgNmNFVjWlEu4dgBojRVYAAALGCiw7CgX
cvkAEBoosAAA1jBKYFlQLucJAKAySmABACxjiMCynQzCQwBAYojAAgBYyfWBZTUZiucAgOddH1gA
AIu5OLDsJQPyKADwJAsWAEDsysCylAzL0wDAMyxYAACxywLLRjI4DwQAD7NgAQDErgks68gUPBMA
PMaCBQAQuyCw7CIT8VgA8AALFgBA7OzAsohMx5MBwL0sWAAAsVMDyxYyKQ8HAHexYAEAxM4LLCvI
1DwfANzOggUAEDspsOwfC/CIAHAjCxYAQOyMwLJ8LMNTAsAtLFgAALHDA8vmsRgPCi0AX7JgAQDE
jg0sa8eSPCsAfM6CBQAQOzCw7BwL87gA8Ilvx/3qP/8+7ncDAIzLPxECAMQEFgBATGABAMQEFgBA
TGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGAB
AMQEFgBATGABAMRe397e3v/B6+vJR2E3H/3tAcDsLFgAALEPFywAAB5jwQIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiP0DS8u0beEeDl4AAAAASUVORK5CYIIKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2Fu
dmFzL3dlYmdsL2Nzcy13ZWJraXQtY2FudmFzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJr
aXQtY2FudmFzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMv
cGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMCwwIEBACi1sYXllciBhdCAoMCww
KSBzaXplIDgwMHg2MDAKLSAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLWxheWVy
IGF0ICgwLDApIHNpemUgODAweDYwMAotICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCi0gICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0Ci0g
ICAgICBSZW5kZXJJbWFnZSB7RElWfSBhdCAoMCwwKSBzaXplIDIwNHgyMDQgW2JvcmRlcjogKDJw
eCBzb2xpZCAjMDAwMDAwKV0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkv
ZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtcmVwYWludC1leHBlY3RlZC5wbmcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZh
cy93ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1yZXBhaW50LWV4cGVjdGVkLnBuZwkocmV2aXNpb24g
MTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93
ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1yZXBhaW50LWV4cGVjdGVkLnBuZwkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICswLDAgQEAKLYlQTkcNCi0aCi0AAAANSUhEUgAAAyAAAAJYCAIAAAAVFBUnAAAA
KXRFWHRjaGVja3N1bQBlZDA5MDg3M2Y5ZWY3NzlmMTIyN2NmNjdhZDkyZmRlY7f4fvQAAA0vSURB
VHic7dxZah5HAEZRKXhFJgvMAk22pLwYhzga/uF2dw3nvAotRHWVHi6fwa9vb28vAAB0/rj6AAAA
qxFYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEPv20Q9eX1/PPAcb8n+wAbAqCxYAQOzDBeunv844
BNv56+oDAMCRLFgAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQE1gA
ADGBBQAQE1gAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQE1iNH99ffny/+hAAwBgE
FgBATGAFfm1XRiwA4EVgAQDkBNazflutjFgAgMACAIgJrKe8u1cZsQBgcwILACAmsB73yVJlxAKA
nQksAICYwHrQlxuVEQsAtiWwAABiAusRN65TRiwA2JPAAgCICay73bVLGbEAYEMCCwAgJrDu88Ai
ZcQCgN0ILACAmMC6w8NblBELALYisAAAYgLrVk+uUEYsANiHwAIAiAmsmyT7kxELADYhsAAAYgLr
a+HyZMQCgB0ILACAmMD6Qr45GbEAYHkCCwAgJrA+c9DaZMQCgLUJLACAmMD60KE7kxELABYmsAAA
YgLrfScsTEYsAFiVwAIAiAmsd5y2LRmxAGBJAgsAICawfnfyqmTEAoD1CCwAgJjA+o9L9iQjFgAs
RmABAMQE1r8uXJKMWACwEoEFABATWD9dviFdfgAAoCKwAABiAuvlZZj1aJBjAABPElgAADGBNdZu
NNRhAIDHCCwAgNjugTXgYjTgkQCAu+weWAAAua0Da9itaNiDAQC32DqwAACOsG9gDb4SDX48AOAT
+wYWAMBBNg2sKfahKQ4JAPzfpoEFAHCcHQNromVooqMCAL/sGFgAAIfaLrCm24SmOzAAsF1gAQAc
ba/AmnQNmvTYALCtvQILAOAEGwXW1DvQ1IcHgN1sFFgAAOfYJbAWWIAW+AQA2MQugQUAcJotAmuZ
7WeZDwGAtW0RWAAAZ1o/sBZbfRb7HABY0vqBBQBwssUDa8m9Z8mPAoCVLB5YAADnWzmwFl56Fv40
AFjAyoEFAHCJZQNr+Y1n+Q8EgHktG1gAAFdZM7A2WXc2+UwAmM6agQUAcKEFA2urXWerjwWAWSwY
WAAA11otsDZcdDb8ZAAY3GqBBQBwuaUCa9stZ9sPB4AxLRVYAAAjWCewNl9xNv98ABjKOoEFADCI
RQLLfvPiEgBgGIsEFgDAOFYILMvNL64CAEawQmABAAxl+sCy2fzGhQDA5aYPLACA0cwdWNaad7kW
ALjW3IEFADCgiQPLTvMJlwMAF5o4sAAAxjRrYFlovuSKAOAqswYWAMCwpgws28yNXBQAXGLKwAIA
GNl8gWWVuYvrAoDzzRdYAACDmyyw7DEPcGkAcLLJAgsAYHwzBZYl5mGuDgDONFNgAQBMYZrAssE8
yQUCwGmmCSwAgFnMEVjWl4RrBIBzzBFYAAATmSCw7C4hlwkAJ5ggsAAA5jJ6YFlccq4UAI42emAB
AExn6MCytRzExQLAoYYOLACAGY0bWFaWQ7leADjOuIEFADCpQQPLvnIClwwABxk0sAAA5jViYFlW
TuOqAeAIIwYWAMDUhgssm8rJXDgA5IYLLACA2Y0VWNaUS7h2AGiNFVgAAAsYKLDsKBdy+QAQGiiw
AADWMEpgWVAu5wkAoDJKYAEALGOIwLKdDMJDAEBiiMACAFjJ9YFlNRmK5wCA510fWAAAi7k4sOwl
A/IoAPAkCxYAQOzKwLKUDMvTAMAzLFgAALHLAstGMjgPBAAPs2ABAMSuCSzryBQ8EwA8xoIFABC7
ILDsIhPxWADwAAsWAEDs7MCyiEzHkwHAvSxYAACxUwPLFjIpDwcAd7FgAQDEzgssK8jUPB8A3M6C
BQAQOymw7B8L8IgAcCMLFgBA7IzAsnwsw1MCwC0sWAAAscMDy+axGA8KLQBfsmABAMSODSxrx5I8
KwB8zoIFABA7MLDsHAvzuADwiW/H/eo//z7udwMAjMs/EQIAxAQWAEBMYAEAxAQWAEBMYAEAxAQW
AEBMYAEAxAQWAEBMYAEAxAQWAEBMYAEAxAQWAEBMYAEAxAQWAEBMYAEAxAQWAEBMYAEAxAQWAEBM
YAEAxF7f3t7e/8Hr68lHYTcf/e0BwOwsWAAAsQ8XLAAAHmPBAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCI/QNLy7Rt4R4OXgAAAABJRU5ErkJgggpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2Vi
Z2wvY3NzLXdlYmtpdC1jYW52YXMtcmVwYWludC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Vi
a2l0LWNhbnZhcy1yZXBhaW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0
LWNhbnZhcy1yZXBhaW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICswLDAg
QEAKLWxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAotICBSZW5kZXJWaWV3IGF0ICgwLDApIHNp
emUgODAweDYwMAotbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi0gIFJlbmRlckJsb2NrIHtI
VE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4
KSBzaXplIDc4NHg1ODQKLSAgICAgIFJlbmRlckltYWdlIHtESVZ9IGF0ICgwLDApIHNpemUgMjA0
eDIwNCBbYm9yZGVyOiAoMnB4IHNvbGlkICMwMDAwMDApXQpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWVsZW1lbnRzLW91dC1vZi1i
b3VuZHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Js
YWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQtb2YtYm91bmRzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxh
Y2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWVsZW1lbnRzLW91dC1vZi1ib3VuZHMtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLVBWUjooRXJyb3IpOiBQ
VlJTUlZBbGxvY0RldmljZU1lbTogRXJyb3IgMyByZXR1cm5lZCBbOTI1LCAvYnJpZGdlZF9wdnJf
Z2x1ZS5jXQotUFZSOihFcnJvcik6IGdsQnVmZmVyRGF0YTogQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5
IGZvciBvYmplY3QgWzc4NiwgL2J1Zm9iai5jXQotVGVzdCBvZiBkcmF3RWxlbWVudHMgd2l0aCBv
dXQtb2YtYm91bmRzIHBhcmFtZXRlcnMKLQotT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi1U
ZXN0IGVtcHR5IGluZGV4IGJ1ZmZlcgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0
LlRSSUFOR0xFUywgMywgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0
ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50
cyhjb250ZXh0LlRSSUFOR0xFUywgMTAwMDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2Vu
ZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4
dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDEwMDAwMDAwMDAwMDAwLCBjb250ZXh0
LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9P
UEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAt
MSwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6
IElOVkFMSURfVkFMVUUuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5H
TEVTLCAxLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBl
cnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRl
eHQuVFJJQU5HTEVTLCAwLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIC0xKSBnZW5lcmF0ZWQgZXhw
ZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCi1GQUlMIGNvbnRleHQuZHJhd0VsZW1lbnRz
KGNvbnRleHQuVFJJQU5HTEVTLCAwLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGV4cGVjdGVk
OiBOT19FUlJPUi4gV2FzIE9VVF9PRl9NRU1PUlkuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRz
KGNvbnRleHQuVFJJQU5HTEVTLCAtMSwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAxKSBnZW5lcmF0
ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCi1QQVNTIGNvbnRleHQuZHJhd0Vs
ZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAxLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIC0xKSBn
ZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCi0KLVRlc3QgYnVmZmVy
IHdpdGggMyBieXRlIGluZGV4ZXMKLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5U
UklBTkdMRVMsIDMsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVk
IEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5U
UklBTkdMRVMsIDMsIGNvbnRleHQuVU5TSUdORURfSU5ULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQg
R0wgZXJyb3I6IElOVkFMSURfRU5VTS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoMHgwMDA5
LCAzLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJv
cjogSU5WQUxJRF9FTlVNLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFO
R0xFUywgMywgY29udGV4dC5VTlNJR05FRF9CWVRFLCAyKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wg
ZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250
ZXh0LlRSSUFOR0xFUywgMTAwMDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVk
IGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5kcmF3
RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDEwMDAwMDAwMDAwMDAwLCBjb250ZXh0LlVOU0lH
TkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJ
T04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAtMSwgY29u
dGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFM
SURfVkFMVUUuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAw
LCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIC0xKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6
IElOVkFMSURfVkFMVUUuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5H
TEVTLCAtMSwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAxKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wg
ZXJyb3I6IElOVkFMSURfVkFMVUUuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQu
VFJJQU5HTEVTLCAxLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIC0xKSBnZW5lcmF0ZWQgZXhwZWN0
ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNv
bnRleHQuVFJJQU5HTEVTLCAwLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDQpIGdlbmVyYXRlZCBl
eHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNv
bnRleHQuVFJJQU5HTEVTLCAweGZmZmZmZmZmLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdl
bmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KLVBBU1MgY29udGV4dC5k
cmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDB4N2ZmZmZmZmYsIGNvbnRleHQuVU5TSUdO
RURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElP
Ti4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDB4N2ZmZmZm
ZmYsIGNvbnRleHQuVU5TSUdORURfQllURSwgMHg3ZmZmZmZmZikgZ2VuZXJhdGVkIGV4cGVjdGVk
IEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5idWZmZXJEYXRhKGNv
bnRleHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIChuZXcgVWludDhBcnJheShbIDMsIDAsIDEsIDIg
XSkpLnN1YmFycmF5KDEpLCBjb250ZXh0LlNUQVRJQ19EUkFXKSBnZW5lcmF0ZWQgZXhwZWN0ZWQg
R0wgZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRS
SUFOR0xFUywgMywgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQg
R0wgZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmJ1ZmZlclN1YkRhdGEoY29udGV4dC5F
TEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgbmV3IFVpbnQ4QXJyYXkoWyAzLCAwLCAxXSkpIGdlbmVy
YXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1l
bnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVy
YXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQu
YnVmZmVyU3ViRGF0YShjb250ZXh0LkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAwLCAobmV3IFVpbnQ4
QXJyYXkoWyAzLCAwLCAxLCAyIF0pKS5zdWJhcnJheSgxKSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdM
IGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklB
TkdMRVMsIDMsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdM
IGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklB
TkdMRVMsIDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdM
IGVycm9yOiBOT19FUlJPUi4KLQotVGVzdCBidWZmZXIgd2l0aCBpbnRlcmxlYXZlZCAoMysyKSBm
bG9hdCB2ZWN0b3JzCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVT
LCA5LCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJy
b3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xF
UywgOSwgY29udGV4dC5GTE9BVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZB
TElEX0VOVU0uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCA5
LCBjb250ZXh0LlNIT1JULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURf
RU5VTS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDksIGNv
bnRleHQuVU5TSUdORURfSU5ULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFM
SURfRU5VTS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDks
IGNvbnRleHQuVU5TSUdORURfU0hPUlQsIDEwMDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJv
cjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQu
VFJJQU5HTEVTLCAxMiwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJhdGVkIGV4cGVj
dGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVu
dHMoY29udGV4dC5UUklBTkdMRVMsIDE1LCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5l
cmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0
LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMTgsIGNvbnRleHQuVU5TSUdORURfU0hP
UlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1Q
QVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBjb250ZXh0LlVO
U0lHTkVEX1NIT1JULCAyKjE1KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURf
T1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywg
MHhmZmZmZmZmZiwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVk
IEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250
ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2Vu
ZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4
dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDAsIGNvbnRleHQuVU5TSUdORURfU0hP
UlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi1QQVNTIGNvbnRl
eHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCA2LCBjb250ZXh0LlVOU0lHTkVEX1NI
T1JULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250
ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgNiwgY29udGV4dC5VTlNJR05FRF9T
SE9SVCwgMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4K
LVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDYsIGNvbnRleHQu
VU5TSUdORURfU0hPUlQsIDIpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1Iu
Ci1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCA2LCBjb250ZXh0
LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURf
T1BFUkFUSU9OLgotCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09N
UExFVEUKLQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZh
cy93ZWJnbC9mcmFtZWJ1ZmZlci1vYmplY3QtYXR0YWNobWVudC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJn
bC9mcmFtZWJ1ZmZlci1vYmplY3QtYXR0YWNobWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2
MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2Vi
Z2wvZnJhbWVidWZmZXItb2JqZWN0LWF0dGFjaG1lbnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYxMiArMCwwIEBACi1UZXN0IGZyYW1lYnVmZmVyIG9iamVjdCBhdHRhY2htZW50
IGJlaGF2aW9ycwotCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCi0KLQotRGltZW5zaW9ucyAw
IHggMAotQ3JlYXRlIHJlbmRlcmJ1ZmZlcnMKLVBBU1MgZ2wgPSBjcmVhdGUzRENvbnRleHQoKSBp
cyBub24tbnVsbC4KLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBkZXB0aEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIHN0
ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBkZXB0aFN0ZW5j
aWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotQXR0YWNoIGRlcHRoIHVzaW5n
IERFUFRIX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBu
b24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAot
UEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAz
NjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBTVEVOQ0lMX0FU
VEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4K
LVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
IDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIFNURU5DSUxfQVRUQUNITUVOVAot
UEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiA6IAotQXR0YWNoIHN0ZW5jaWwgdXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8g
PSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAot
QXR0YWNoIHN0ZW5jaWwgdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1B
dHRhY2ggZGVwdGhTdGVuY2lsIHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAotUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1B
dHRhY2ggZGVwdGhTdGVuY2lsIHVzaW5nIFNURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBn
bC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Z2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0
YWNoIGRlcHRoLCB0aGVuIHN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wu
Y3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggc3RlbmNpbCwgdGhlbiBkZXB0aCwgY2F1c2luZyBj
b25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBkZXB0aCwg
dGhlbiBkZXB0aFN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRl
RnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJl
dHVybmVkIDM2MDU0Ci1BdHRhY2ggZGVwdGhTdGVuY2lsLCB0aGVuIGRlcHRoLCBjYXVzaW5nIGNv
bmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIHN0ZW5jaWws
IHRoZW4gZGVwdGhTdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBy
ZXR1cm5lZCAzNjA1NAotQXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhlbiBzdGVuY2lsLCBjYXVzaW5n
IGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwu
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIGNvbG9y
IHJlbmRlcmJ1ZmZlciB3aXRoIGludGVybmFsZm9ybWF0ID09IFJHQkE0Ci1QQVNTIGNvbG9yQnVm
ZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJh
bWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBjb2xvciBy
ZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0I1X0ExCi1QQVNTIGNvbG9yQnVm
ZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJh
bWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBjb2xvciBy
ZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0I1NjUKLVBBU1MgY29sb3JCdWZm
ZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFt
ZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQ3JlYXRlIGFuZCBhdHRh
Y2ggZGVwdGhTdGVuY2lsIHJlbmRlcmJ1ZmZlcgotUEFTUyBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBn
bC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfV0lEVEgpIGlzIHdpZHRoCi1QQVNT
IGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJV
RkZFUl9IRUlHSFQpIGlzIGhlaWdodAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIo
Z2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUKSBpcyBnbC5E
RVBUSF9TVEVOQ0lMCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJC
VUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9SRURfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfR1JFRU5fU0la
RSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVS
LCBnbC5SRU5ERVJCVUZGRVJfQkxVRV9TSVpFKSBpcyAwCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFKSBp
cyAwCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
ZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04g
OiAKLQotRGltZW5zaW9ucyAwIHggMgotQ3JlYXRlIHJlbmRlcmJ1ZmZlcnMKLVBBU1MgZ2wgPSBj
cmVhdGUzRENvbnRleHQoKSBpcyBub24tbnVsbC4KLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVh
dGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBkZXB0aEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogCi1QQVNTIHN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBu
b24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAot
QXR0YWNoIGRlcHRoIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRl
RnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0
aCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBy
ZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBE
RVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIo
KSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1
cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIFNU
RU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5v
bi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1Q
QVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2
MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIHN0ZW5jaWwgdXNpbmcgREVQVEhfQVRU
QUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiA6IAotQXR0YWNoIHN0ZW5jaWwgdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRB
Q0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGhTdGVuY2lsIHVzaW5nIERFUFRIX1NURU5DSUxf
QVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBERVBUSF9BVFRB
Q0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGhTdGVuY2lsIHVzaW5nIFNURU5DSUxfQVRUQUNI
TUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04g
OiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoLCB0aGVuIHN0ZW5jaWwsIGNhdXNpbmcgY29uZmxp
Y3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggc3RlbmNpbCwgdGhl
biBkZXB0aCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYw
NTQKLUF0dGFjaCBkZXB0aCwgdGhlbiBkZXB0aFN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBB
U1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Z2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggZGVwdGhTdGVuY2lsLCB0aGVu
IGRlcHRoLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVy
KCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1
NAotQXR0YWNoIHN0ZW5jaWwsIHRoZW4gZGVwdGhTdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1Q
QVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhl
biBzdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAot
UEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAz
NjA1NAotQXR0YWNoIGNvbG9yIHJlbmRlcmJ1ZmZlciB3aXRoIGludGVybmFsZm9ybWF0ID09IFJH
QkE0Ci1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
ZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04g
OiAKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0I1
X0ExCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
ZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04g
OiAKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0I1
NjUKLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVs
bC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotQ3JlYXRlIGFuZCBhdHRhY2ggZGVwdGhTdGVuY2lsIHJlbmRlcmJ1ZmZlcgotUEFTUyBkZXB0
aFN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5nZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfV0lE
VEgpIGlzIHdpZHRoCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJC
VUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQpIGlzIGdsLkRFUFRIX1NURU5D
SUwKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wu
UkVOREVSQlVGRkVSX1JFRF9TSVpFKSBpcyAwCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFKSBpcyAwCi1Q
QVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRF
UkJVRkZFUl9CTFVFX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
KGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUpIGlzIDAKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotCi1EaW1l
bnNpb25zIDIgeCAwCi1DcmVhdGUgcmVuZGVyYnVmZmVycwotUEFTUyBnbCA9IGNyZWF0ZTNEQ29u
dGV4dCgpIGlzIG5vbi1udWxsLgotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogCi1QQVNTIGRlcHRoQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1Mgc3RlbmNpbEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGRl
cHRoU3RlbmNpbEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1BdHRhY2ggZGVw
dGggdXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJl
dHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoIHVzaW5nIFNU
RU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5v
bi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1Q
QVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2
MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoIHVzaW5nIERFUFRIX1NURU5D
SUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1u
dWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNT
IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIHN0ZW5jaWwgdXNpbmcgU1RFTkNJTF9BVFRB
Q0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggc3RlbmNpbCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1Q
QVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OIDogCi1BdHRhY2ggc3RlbmNpbCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBB
U1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiAKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OIDogCi1BdHRhY2ggZGVwdGhTdGVuY2lsIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKLVBB
U1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiAKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNT
IGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
IDogCi1BdHRhY2ggZGVwdGgsIHRoZW4gc3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5G
UkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoLCBj
YXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNo
IGRlcHRoLCB0aGVuIGRlcHRoU3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBn
bC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJV
RkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBkZXB0aFN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNh
dXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2gg
c3RlbmNpbCwgdGhlbiBkZXB0aFN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0g
Z2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVC
VUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggZGVwdGhTdGVuY2lsLCB0aGVuIHN0ZW5jaWws
IGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBu
b24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRh
Y2ggY29sb3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCQTQKLVBBU1Mg
Y29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNo
IGNvbG9yIHJlbmRlcmJ1ZmZlciB3aXRoIGludGVybmFsZm9ybWF0ID09IFJHQjVfQTEKLVBBU1Mg
Y29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNo
IGNvbG9yIHJlbmRlcmJ1ZmZlciB3aXRoIGludGVybmFsZm9ybWF0ID09IFJHQjU2NQotUEFTUyBj
b2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNy
ZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5G
UkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1DcmVhdGUg
YW5kIGF0dGFjaCBkZXB0aFN0ZW5jaWwgcmVuZGVyYnVmZmVyCi1QQVNTIGRlcHRoU3RlbmNpbEJ1
ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9IRUlHSFQpIGlzIGhl
aWdodAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBn
bC5SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUKSBpcyBnbC5ERVBUSF9TVEVOQ0lMCi1QQVNT
IGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJV
RkZFUl9SRURfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wu
UkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfR1JFRU5fU0laRSkgaXMgMAotUEFTUyBnbC5n
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJf
QkxVRV9TSVpFKSBpcyAwCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5E
RVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFKSBpcyAwCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJh
bWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLQotRGltZW5zaW9ucyAy
IHggMgotQ3JlYXRlIHJlbmRlcmJ1ZmZlcnMKLVBBU1MgZ2wgPSBjcmVhdGUzRENvbnRleHQoKSBp
cyBub24tbnVsbC4KLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBkZXB0aEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIHN0
ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBkZXB0aFN0ZW5j
aWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotQXR0YWNoIGRlcHRoIHVzaW5n
IERFUFRIX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBu
b24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAot
UEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAz
NjA1MwotQXR0YWNoIGRlcHRoIHVzaW5nIFNURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBn
bC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Z2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0
YWNoIGRlcHRoIHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNo
IHN0ZW5jaWwgdXNpbmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZy
YW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJV
RkZFUikgcmV0dXJuZWQgMzYwNTMKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIERFUFRIX0FUVEFDSE1F
TlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDog
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVO
VAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAK
LVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1MwotQXR0YWNo
IGRlcHRoU3RlbmNpbCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVw
dGhTdGVuY2lsIHVzaW5nIFNURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVG
cmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVC
VUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRo
LCB0aGVuIHN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJh
bWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVy
bmVkIDM2MDYxCi1BdHRhY2ggc3RlbmNpbCwgdGhlbiBkZXB0aCwgY2F1c2luZyBjb25mbGljdAot
UEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNjEKLUF0dGFjaCBkZXB0aCwgdGhlbiBkZXB0
aFN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1Q
QVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2
MDYxCi1BdHRhY2ggZGVwdGhTdGVuY2lsLCB0aGVuIGRlcHRoLCBjYXVzaW5nIGNvbmZsaWN0Ci1Q
QVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA2MQotQXR0YWNoIHN0ZW5jaWwsIHRoZW4gZGVw
dGhTdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAot
UEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAz
NjA2MQotQXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhlbiBzdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0
Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA2MQotQXR0YWNoIGNvbG9yIHJlbmRlcmJ1
ZmZlciB3aXRoIGludGVybmFsZm9ybWF0ID09IFJHQkE0Ci1QQVNTIGNvbG9yQnVmZmVyID0gZ2wu
Y3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIo
KSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1
cm5lZCAzNjA1MwotQXR0YWNoIGNvbG9yIHJlbmRlcmJ1ZmZlciB3aXRoIGludGVybmFsZm9ybWF0
ID09IFJHQjVfQTEKLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDUzCi1BdHRhY2ggY29s
b3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNTY1Ci1QQVNTIGNvbG9y
QnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRl
RnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSByZXR1cm5lZCAzNjA1MwotQ3JlYXRlIGFuZCBhdHRhY2ggZGVwdGhTdGVuY2lsIHJl
bmRlcmJ1ZmZlcgotUEFTUyBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVS
LCBnbC5SRU5ERVJCVUZGRVJfV0lEVEgpIGlzIHdpZHRoCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9IRUlHSFQpIGlzIGhl
aWdodAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBn
bC5SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUKSBpcyBnbC5ERVBUSF9TVEVOQ0lMCi1QQVNT
IGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJV
RkZFUl9SRURfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wu
UkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfR1JFRU5fU0laRSkgaXMgMAotUEFTUyBnbC5n
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJf
QkxVRV9TSVpFKSBpcyAwCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5E
RVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFKSBpcyAwCi1QQVNTIGdsLmdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9ERVBU
SF9TSVpFKSA+IDAgaXMgdHJ1ZQotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wu
UkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFKSA+IDAgaXMgdHJ1ZQot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTMKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJh
bWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5k
ZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZGVwdGhCdWZmZXIgPSBnbC5jcmVhdGVSZW5k
ZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotCi1BdHRhY2htZW50cyBvZiBkaWZmZXJlbnQgc2l6ZXMgc2hvdWxkIGJl
IEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAoT3BlbkdMIEVTIDIuMCA0LjQuNSkK
LVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgY29s
b3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZGVw
dGhCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfQ09NUExF
VEUgd2FzIEZSQU1FQlVGRkVSX0NPTVBMRVRFCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVO
U0lPTlMgd2FzIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyBvciBGUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfQ09NUExFVEUgd2FzIEZSQU1FQlVGRkVSX0NPTVBM
RVRFCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3Vs
ZCBiZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgd2FzIEZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfRElNRU5TSU9OUyBvciBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAotUEFTUyBnbC5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZG
RVJfQ09NUExFVEUgd2FzIEZSQU1FQlVGRkVSX0NPTVBMRVRFCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIHdhcyBG
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgb3IgRlJBTUVCVUZGRVJfVU5TVVBQT1JU
RUQKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxk
IGJlIEZSQU1FQlVGRkVSX0NPTVBMRVRFIHdhcyBGUkFNRUJVRkZFUl9DT01QTEVURQotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNy
ZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3Jl
YXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3YXMg
RlJBTUVCVUZGRVJfQ09NUExFVEUKLQotV3Jvbmcgc3RvcmFnZSB0eXBlIGZvciB0eXBlIG9mIGF0
dGFjaG1lbnQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIChPcGVuR0wgRVMg
Mi4wIDQuNC41KQotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIHdhcyBGUkFNRUJV
RkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgb3IgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQKLVBB
U1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZS
QU1FQlVGRkVSX0NPTVBMRVRFIHdhcyBGUkFNRUJVRkZFUl9DT01QTEVURQotCi0wIHNpemUgYXR0
YWNobWVudCBzaG91bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIChPcGVu
R0wgRVMgMi4wIDQuNC41KQotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIHdhcyBG
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgb3IgRlJBTUVCVUZGRVJfVU5TVVBQT1JU
RUQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotCi1ObyBh
dHRhY2htZW50cyBzaG91bGQgYmUgSU5DT01QTEVURV9GUkFNRUJVRkZFUl9NSVNTSU5HX0FUVEFD
SE1FTlQgKE9wZW5HTCBFUyAyLjAgNC40LjUpCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJB
TUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNI
TUVOVCB3YXMgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgb3IgRlJB
TUVCVUZGRVJfVU5TVVBQT1JURUQKLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJi
dWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5G
UkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0NPTVBMRVRFIHdhcyBGUkFNRUJVRkZF
Ul9DT01QTEVURQotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgd2Fz
IEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIG9yIEZSQU1FQlVGRkVS
X1VOU1VQUE9SVEVECi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLQotVGVzdCBkcmF3aW5nIG9yIHJlYWRpbmcgZnJvbSBhbiBpbmNvbXBsZXRlIGZyYW1lYnVm
ZmVyCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGRlcHRoQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0NP
TVBMRVRFIHdhcyBGUkFNRUJVRkZFUl9DT01QTEVURQotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9E
SU1FTlNJT05TIHdhcyBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgb3IgRlJBTUVC
VUZGRVJfVU5TVVBQT1JURUQKLQotRHJhd2luZyBvciByZWFkaW5nIGZyb20gYW4gaW5jb21wbGV0
ZSBmcmFtZWJ1ZmZlciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
IDogZHJhd0FycmF5cyB3aXRoIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IHJlYWRQ
aXhlbHMgZnJvbSBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBjb3B5VGV4SW1hZ2Uy
RCBmcm9tIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IGNvcHlUZXhTdWJJbWFnZTJE
IGZyb20gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogY2xlYXIgd2l0aCBpbmNvbXBs
ZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGZibzIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5v
bi1udWxsLgotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBz
aG91bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgd2FzIEZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIG9yIEZSQU1FQlVGRkVSX1VO
U1VQUE9SVEVECi0KLURyYXdpbmcgb3IgcmVhZGluZyBmcm9tIGFuIGluY29tcGxldGUgZnJhbWVi
dWZmZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IGRyYXdB
cnJheXMgd2l0aCBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiByZWFkUGl4ZWxzIGZy
b20gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IElOVkFMSURfT1BFUkFUSU9OIDogY29weVRleEltYWdlMkQgZnJvbSBpbmNvbXBsZXRlIGZy
YW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVS
QVRJT04gOiBjb3B5VGV4U3ViSW1hZ2UyRCBmcm9tIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiA6IGNsZWFyIHdpdGggaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBjb2xvckJ1ZmZl
ciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotCi1EcmF3aW5nIG9yIHJl
YWRpbmcgZnJvbSBhbiBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyIHNob3VsZCBnZW5lcmF0ZSBJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBkcmF3QXJyYXlzIHdpdGggaW5jb21wbGV0ZSBmcmFt
ZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OIDogcmVhZFBpeGVscyBmcm9tIGluY29tcGxldGUgZnJhbWVidWZmZXIK
LVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTiA6IGNvcHlUZXhJbWFnZTJEIGZyb20gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OIDogY29weVRleFN1YkltYWdlMkQgZnJvbSBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiBjbGVhciB3aXRoIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvZm9ybXMvZGF0YWxpc3QvaW5wdXQtbGlzdC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2Zv
cm1zL2RhdGFsaXN0L2lucHV0LWxpc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvZm9ybXMvZGF0YWxpc3QvaW5w
dXQtbGlzdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMzUgKzAsMCBAQAotVGVz
dCBmb3IgdGhlIGxpc3QgYXR0cmlidXRlLgotCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCi0K
LQotUEFTUyBpbnB1dC5saXN0IGlzIG51bGwKLVBBU1MgaW5wdXQubGlzdCBpcyBudWxsCi1QQVNT
IGlucHV0Lmxpc3QgaXMgbnVsbAotUEFTUyBkYXRhbGlzdC5jbGFzc05hbWUgaXMgImZvcm1lciIK
LVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQiKS5saXN0IGlzIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJkbDEiKQotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VhcmNo
IikubGlzdCBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGwxIikKLVBBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInVybCIpLmxpc3QgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRs
MSIpCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZWxlcGhvbmUiKS5saXN0IGlzIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJkbDEiKQotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiZW1haWwiKS5saXN0IGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkbDEiKQotRkFJTCBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGF0ZXRpbWUiKS5saXN0IHNob3VsZCBiZSBbb2JqZWN0
IEhUTUxEYXRhTGlzdEVsZW1lbnRdLiBXYXMgbnVsbC4KLUZBSUwgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImRhdGUiKS5saXN0IHNob3VsZCBiZSBbb2JqZWN0IEhUTUxEYXRhTGlzdEVsZW1lbnRd
LiBXYXMgbnVsbC4KLUZBSUwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vbnRoIikubGlzdCBz
aG91bGQgYmUgW29iamVjdCBIVE1MRGF0YUxpc3RFbGVtZW50XS4gV2FzIG51bGwuCi1GQUlMIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3ZWVrIikubGlzdCBzaG91bGQgYmUgW29iamVjdCBIVE1M
RGF0YUxpc3RFbGVtZW50XS4gV2FzIG51bGwuCi1GQUlMIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0aW1lIikubGlzdCBzaG91bGQgYmUgW29iamVjdCBIVE1MRGF0YUxpc3RFbGVtZW50XS4gV2Fz
IG51bGwuCi1GQUlMIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYXRldGltZS1sb2NhbCIpLmxp
c3Qgc2hvdWxkIGJlIFtvYmplY3QgSFRNTERhdGFMaXN0RWxlbWVudF0uIFdhcyBudWxsLgotUEFT
UyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibnVtYmVyIikubGlzdCBpcyBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiZGwxIikKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJhbmdlIiku
bGlzdCBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGwxIikKLUZBSUwgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNvbG9yIikubGlzdCBzaG91bGQgYmUgW29iamVjdCBIVE1MRGF0YUxpc3RF
bGVtZW50XS4gV2FzIG51bGwuCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoaWRkZW4i
KS5saXN0IGlzIG51bGwKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIiku
bGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGVja2JveCIpLmxp
c3QgaXMgbnVsbAotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFkaW8iKS5saXN0IGlz
IG51bGwKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUiKS5saXN0IGlzIG51bGwK
LVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN1Ym1pdCIpLmxpc3QgaXMgbnVsbAotUEFT
UyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1hZ2UiKS5saXN0IGlzIG51bGwKLVBBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc2V0IikubGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJidXR0b24iKS5saXN0IGlzIG51bGwKLVBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1zL251bWJlci9udW1iZXItdmFsaWRhdGlvbi1tZXNzYWdl
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L2Zhc3QvZm9ybXMvbnVtYmVyL251bWJlci12YWxpZGF0aW9uLW1lc3NhZ2UtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5
L2Zhc3QvZm9ybXMvbnVtYmVyL251bWJlci12YWxpZGF0aW9uLW1lc3NhZ2UtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxICswLDAgQEAKLVRlc3QgZm9yIHZhbGlkYXRpb25NZXNz
YWdlIElETCBhdHRyaWJ1dGUgZm9yIDxpbnB1dCB0eXBlPW51bWJlcj4KLQotT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgotCi0KLU5vIG1lc3NhZ2UKLVBBU1MgdGVzdEl0KCIiLCAiIiwgIiIpIGlz
ICIiCi1WYWx1ZSBtaXNzaW5nCi1GQUlMIHRlc3RJdCgiIiwgIiIsICIiKSBzaG91bGQgYmUgdmFs
dWUgbWlzc2luZy4gV2FzIElucHV0IHZhbHVlIG1pc3NpbmcuCi1UeXBlIG1pc21hdGNoCi1QQVNT
IHRlc3RJdCgiZm9vIiwgIiIsICIiKSBpcyAiIgotUmFuZ2Ugb3ZlcmZsb3cKLUZBSUwgdGVzdEl0
KCIyMDAiLCAiIiwgIjEwMCIpIHNob3VsZCBiZSByYW5nZSBvdmVyZmxvdy4gV2FzIFZhbHVlIG11
c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMC4KLVJhbmdlIHVuZGVyZmxvdwotRkFJTCB0
ZXN0SXQoIjEwIiwgIjUwIiwgIjEwMCIpIHNob3VsZCBiZSByYW5nZSB1bmRlcmZsb3cuIFdhcyBW
YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA1MC4KLVN0ZXAgbWlzbWF0Y2gK
LUZBSUwgdGVzdEl0KCI1NSIsICIwIiwgIjEwMCIsICIxMCIpIHNob3VsZCBiZSBzdGVwIG1pc21h
dGNoLiBXYXMgU3RlcCBtaXNtYXRjaC4KLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
LQotVEVTVCBDT01QTEVURQotCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5
L2Zhc3QvbWVkaWEvdzNjL3Rlc3RfbWVkaWFfcXVlcmllcy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L21lZGlhL3czYy90ZXN0
X21lZGlhX3F1ZXJpZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvbWVkaWEvdzNjL3Rlc3RfbWVkaWFfcXVlcmll
cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMzA1ICswLDAgQEAKLQotCi1QQVNT
IHF1ZXJ5IChvcmllbnRhdGlvbikgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgcXVlcnkgbm90
IChvcmllbnRhdGlvbikgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIHF1ZXJ5IG9ubHkg
KG9yaWVudGF0aW9uKSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgcXVlcnkgYWxsIGFu
ZCAob3JpZW50YXRpb24pIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIHF1ZXJ5IG5vdCBhbGwg
YW5kIChvcmllbnRhdGlvbikgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgcXVlcnkgb25seSBh
bGwgYW5kIChvcmllbnRhdGlvbikgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgcXVlcnkgKG9y
aWVudGF0aW9uOiAnbGFuZHNjYXBlJykgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4
cHJlc3Npb24gd2lkdGggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0
aDogMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAwcHggc2hv
dWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0aDogMGVtIHNob3VsZCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gd2lkdGg6IC0wIHNob3VsZCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gbWluLXdpZHRoOiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFT
UyBleHByZXNzaW9uIG1heC13aWR0aDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiB3aWR0aDogLTBjbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9u
IHdpZHRoOiAxcHggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0aDog
MC4wMDFtbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAxMDAw
MDBweCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAtMXB4IHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAnMjBweCcgc2hv
dWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLXdpZHRoOiAtMXB4IHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC13aWR0aDogLTFweCBz
aG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4td2lkdGg6ICcxMHB4
JyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtd2lkdGg6ICcx
MHB4JyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0aDogLTAu
MDAwMDFtbSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0aDog
LTEwMDAwMGVtIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi13
aWR0aCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtd2lkdGgg
c2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0IHNob3VsZCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAwIHNob3VsZCBiZSBwYXJzZWFi
bGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAwcHggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBB
U1MgZXhwcmVzc2lvbiBoZWlnaHQ6IDBlbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHBy
ZXNzaW9uIGhlaWdodDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBt
aW4taGVpZ2h0OiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1o
ZWlnaHQ6IC0wIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAt
MGNtIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAxcHggc2hv
dWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IDAuMDAxbW0gc2hvdWxk
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IDEwMDAwMHB4IHNob3VsZCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAtMXB4IHNob3VsZCBub3QgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogJzIwcHgnIHNob3VsZCBub3QgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1oZWlnaHQ6IC0xcHggc2hvdWxkIG5vdCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWhlaWdodDogLTFweCBzaG91bGQgbm90
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4taGVpZ2h0OiAnMTBweCcgc2hvdWxk
IG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWhlaWdodDogJzEwcHgnIHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogLTAuMDAwMDFt
bSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IC0xMDAw
MDBlbSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4taGVpZ2h0
IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1oZWlnaHQgc2hv
dWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoIHNob3Vs
ZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAwIHNob3VsZCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAwcHggc2hvdWxkIGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IDBlbSBzaG91bGQgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDogLTAgc2hvdWxkIGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tZGV2aWNlLXdpZHRoOiAtMCBzaG91bGQgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2Utd2lkdGg6IC0wIHNob3VsZCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAtMGNtIHNob3VsZCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAxcHggc2hvdWxkIGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IDAuMDAxbW0gc2hvdWxk
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IDEwMDAwMHB4IHNo
b3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAtMXB4IHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDogJzIw
cHgnIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1kZXZpY2Ut
d2lkdGg6IC0xcHggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4
LWRldmljZS13aWR0aDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVz
c2lvbiBtaW4tZGV2aWNlLXdpZHRoOiAnMTBweCcgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gbWF4LWRldmljZS13aWR0aDogJzEwcHgnIHNob3VsZCBub3QgYmUgcGFy
c2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDogLTAuMDAwMDFtbSBzaG91bGQg
bm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IC0xMDAwMDBl
bSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tZGV2aWNlLXdp
ZHRoIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2Ut
d2lkdGggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWhl
aWdodCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1oZWlnaHQ6
IDAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAw
cHggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAw
ZW0gc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAt
MCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1kZXZpY2UtaGVpZ2h0
OiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2UtaGVp
Z2h0OiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1oZWln
aHQ6IC0wY20gc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVp
Z2h0OiAxcHggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVp
Z2h0OiAwLjAwMW1tIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNl
LWhlaWdodDogMTAwMDAwcHggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBk
ZXZpY2UtaGVpZ2h0OiAtMXB4IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNz
aW9uIGRldmljZS1oZWlnaHQ6ICcyMHB4JyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1Mg
ZXhwcmVzc2lvbiBtaW4tZGV2aWNlLWhlaWdodDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtZGV2aWNlLWhlaWdodDogLTFweCBzaG91bGQgbm90IGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tZGV2aWNlLWhlaWdodDogJzEwcHgnIHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2UtaGVpZ2h0
OiAnMTBweCcgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNl
LWhlaWdodDogLTAuMDAwMDFtbSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVz
c2lvbiBkZXZpY2UtaGVpZ2h0OiAtMTAwMDAwZW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gbWluLWRldmljZS1oZWlnaHQgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gbWF4LWRldmljZS1oZWlnaHQgc2hvdWxkIG5vdCBiZSBwYXJzZWFi
bGUgCi1QQVNTIGFsbCBhbmQgKHdpZHRoOiB3aWR0aCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBh
bGwgYW5kICh3aWR0aDogd2lkdGggKzEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKHdpZHRoOiB3aWR0aCAtMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAo
bWluLXdpZHRoOiB3aWR0aCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4td2lk
dGg6IHdpZHRoICsxIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4td2lk
dGg6IHdpZHRoIC0xIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC13aWR0aDog
d2lkdGggcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LXdpZHRoOiB3aWR0aCAr
MSBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtd2lkdGg6IHdpZHRoICsxIHB4
KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4td2lkdGg6IHdpZHRoICsxIGVt
KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4td2lkdGg6IHdpZHRoIC0xIGVt
KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC13aWR0aDogd2lkdGggKzEgZW0pIHNo
b3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LXdpZHRoOiB3aWR0aCAtMSBlbSkgc2hvdWxk
IG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoaGVpZ2h0OiBoZWlnaHQgcHgpIHNob3VsZCBhcHBs
eSAKLVBBU1MgYWxsIGFuZCAoaGVpZ2h0OiBoZWlnaHQgKzEgcHgpIHNob3VsZCBub3QgYXBwbHkg
Ci1QQVNTIGFsbCBhbmQgKGhlaWdodDogaGVpZ2h0IC0xIHB4KSBzaG91bGQgbm90IGFwcGx5IAot
UEFTUyBhbGwgYW5kIChtaW4taGVpZ2h0OiBoZWlnaHQgcHgpIHNob3VsZCBhcHBseSAKLVBBU1Mg
YWxsIGFuZCAobWluLWhlaWdodDogaGVpZ2h0ICsxIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFT
UyBhbGwgYW5kIChtaW4taGVpZ2h0OiBoZWlnaHQgLTEgcHgpIHNob3VsZCBhcHBseSAKLVBBU1Mg
YWxsIGFuZCAobWF4LWhlaWdodDogaGVpZ2h0IHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKG1heC1oZWlnaHQ6IGhlaWdodCArMSBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5k
IChtYXgtaGVpZ2h0OiBoZWlnaHQgKzEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKG1pbi1oZWlnaHQ6IGhlaWdodCArMSBlbSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxs
IGFuZCAobWluLWhlaWdodDogaGVpZ2h0IC0xIGVtKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKG1heC1oZWlnaHQ6IGhlaWdodCArMSBlbSkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5k
IChtYXgtaGVpZ2h0OiBoZWlnaHQgLTEgZW0pIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKGRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFs
bCBhbmQgKGRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoICsxIHB4KSBzaG91bGQgbm90IGFwcGx5
IAotUEFTUyBhbGwgYW5kIChkZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCAtMSBweCkgc2hvdWxk
IG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmljZS13aWR0aDogZGV2aWNlLXdpZHRo
IHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6IGRldmlj
ZS13aWR0aCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmlj
ZS13aWR0aDogZGV2aWNlLXdpZHRoIC0xIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQg
KG1heC1kZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBh
bGwgYW5kIChtYXgtZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGggKzEgcHgpIHNob3VsZCBhcHBs
eSAKLVBBU1MgYWxsIGFuZCAobWF4LWRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoICsxIHB4KSBz
aG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4tZGV2aWNlLXdpZHRoOiBkZXZpY2Ut
d2lkdGggKzEgZW0pIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2Ut
d2lkdGg6IGRldmljZS13aWR0aCAtMSBlbSkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kICht
YXgtZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGggKzEgZW0pIHNob3VsZCBhcHBseSAKLVBBU1Mg
YWxsIGFuZCAobWF4LWRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoIC0xIGVtKSBzaG91bGQgbm90
IGFwcGx5IAotUEFTUyBhbGwgYW5kIChkZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0IHB4KSBz
aG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGRldmljZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQg
KzEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGRldmljZS1oZWlnaHQ6IGRl
dmljZS1oZWlnaHQgLTEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1k
ZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0IHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKG1pbi1kZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0ICsxIHB4KSBzaG91bGQgbm90IGFw
cGx5IAotUEFTUyBhbGwgYW5kIChtaW4tZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCAtMSBw
eCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtZGV2aWNlLWhlaWdodDogZGV2aWNl
LWhlaWdodCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtZGV2aWNlLWhlaWdo
dDogZGV2aWNlLWhlaWdodCArMSBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgt
ZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBB
U1MgYWxsIGFuZCAobWluLWRldmljZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQgKzEgZW0pIHNob3Vs
ZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVp
Z2h0IC0xIGVtKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2UtaGVpZ2h0
OiBkZXZpY2UtaGVpZ2h0ICsxIGVtKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1k
ZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0IC0xIGVtKSBzaG91bGQgbm90IGFwcGx5IAotUEFT
UyBhbGwgYW5kIChoZWlnaHQpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAod2lkdGgpIHNo
b3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGhlaWdodCkgc2hvdWxkIG5vdCBhcHBseSAK
LVBBU1MgYWxsIGFuZCAod2lkdGgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGRl
dmljZS1oZWlnaHQpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLXdpZHRoKSBz
aG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGhlaWdodCkgc2hvdWxkIG5vdCBhcHBseSAKLVBB
U1MgYWxsIGFuZCAod2lkdGgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoaGVpZ2h0KSBz
aG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKHdpZHRoKSBzaG91bGQgYXBwbHkgCi1QQVNTIGV4
cHJlc3Npb24gb3JpZW50YXRpb24gc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBvcmllbnRhdGlvbjogcG9ydHJhaXQgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVz
c2lvbiBvcmllbnRhdGlvbjogbGFuZHNjYXBlIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4
cHJlc3Npb24gbWluLW9yaWVudGF0aW9uIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBl
eHByZXNzaW9uIG1pbi1vcmllbnRhdGlvbjogcG9ydHJhaXQgc2hvdWxkIG5vdCBiZSBwYXJzZWFi
bGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLW9yaWVudGF0aW9uOiBsYW5kc2NhcGUgc2hvdWxkIG5v
dCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LW9yaWVudGF0aW9uIHNob3VsZCBu
b3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1vcmllbnRhdGlvbjogcG9ydHJh
aXQgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LW9yaWVudGF0
aW9uOiBsYW5kc2NhcGUgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIChvcmllbnRhdGlv
bikgc2hvdWxkIGFwcGx5IAotUEFTUyAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgc2hvdWxkIGFw
cGx5IAotUEFTUyAob3JpZW50YXRpb246IHBvcnRyYWl0KSBzaG91bGQgbm90IGFwcGx5IAotUEFT
UyBub3QgYWxsIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBzaG91bGQgYXBwbHkgCi1QQVNT
IChvcmllbnRhdGlvbikgc2hvdWxkIGFwcGx5IAotUEFTUyAob3JpZW50YXRpb246IGxhbmRzY2Fw
ZSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1Mgbm90IGFsbCBhbmQgKG9yaWVudGF0aW9uOiBsYW5k
c2NhcGUpIHNob3VsZCBhcHBseSAKLVBBU1MgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgc2hvdWxk
IGFwcGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvOiA1OS84MCkgc2hvdWxkIGFwcGx5IAotUEFTUyAo
YXNwZWN0LXJhdGlvOiA1OC84MCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRp
bzogNTkvODEpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86IDYwLzgwKSBz
aG91bGQgbm90IGFwcGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvOiA1OS83OSkgc2hvdWxkIG5vdCBh
cHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogMTc3LzI0MCkgc2hvdWxkIGFwcGx5IAotUEFTUyAo
YXNwZWN0LXJhdGlvOiA0MTMvNTYwKSBzaG91bGQgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86
IDU5MDAvODAwMCkgc2hvdWxkIGFwcGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvOiA1OTAxLzgwMDAp
IHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86IDU4OTkvODAwMCkgc2hvdWxk
IG5vdCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTkwMC84MDAxKSBzaG91bGQgbm90IGFw
cGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvOiA1OTAwLzc5OTkpIHNob3VsZCBub3QgYXBwbHkgCi1Q
QVNTIChhc3BlY3QtcmF0aW8pIHNob3VsZCBhcHBseSAKLVBBU1MgKG1pbi1hc3BlY3QtcmF0aW86
IDU5LzgwKSBzaG91bGQgYXBwbHkgCi1QQVNTIChtaW4tYXNwZWN0LXJhdGlvOiA1OC84MCkgc2hv
dWxkIGFwcGx5IAotUEFTUyAobWluLWFzcGVjdC1yYXRpbzogNTkvODEpIHNob3VsZCBhcHBseSAK
LVBBU1MgKG1pbi1hc3BlY3QtcmF0aW86IDYwLzgwKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAo
bWluLWFzcGVjdC1yYXRpbzogNTkvNzkpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGV4cHJlc3Np
b24gbWluLWFzcGVjdC1yYXRpbyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgKG1heC1h
c3BlY3QtcmF0aW86IDU5LzgwKSBzaG91bGQgYXBwbHkgCi1QQVNTIChtYXgtYXNwZWN0LXJhdGlv
OiA1OC84MCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKG1heC1hc3BlY3QtcmF0aW86IDU5Lzgx
KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAobWF4LWFzcGVjdC1yYXRpbzogNjAvODApIHNob3Vs
ZCBhcHBseSAKLVBBU1MgKG1heC1hc3BlY3QtcmF0aW86IDU5Lzc5KSBzaG91bGQgYXBwbHkgCi1Q
QVNTIGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAK
LVBBU1MgKGRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1oZWlnaHQp
IHNob3VsZCBhcHBseSAKLVBBU1Mgbm90IGFsbCBhbmQgKGRldmljZS1hc3BlY3QtcmF0aW86IGRl
dmljZS13aWR0aCArIDEgLyBkZXZpY2UtaGVpZ2h0KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKGRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1oZWlnaHQgLSAx
KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChkZXZpY2UtYXNwZWN0LXJhdGlvOiBk
ZXZpY2Utd2lkdGggLSAxIC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1Mg
bm90IGFsbCBhbmQgKGRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1o
ZWlnaHQgKyAxKSBzaG91bGQgYXBwbHkgCi1QQVNTIChkZXZpY2UtYXNwZWN0LXJhdGlvKSBzaG91
bGQgYXBwbHkgCi1QQVNTIChtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC8g
ZGV2aWNlLWhlaWdodCkgc2hvdWxkIGFwcGx5IAotUEFTUyBub3QgYWxsIGFuZCAoZGV2aWNlLWFz
cGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoICsgMSAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBub3Qg
YXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5kIChtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNl
LXdpZHRoIC8gZGV2aWNlLWhlaWdodCAtIDEpIHNob3VsZCBhcHBseSAKLVBBU1Mgbm90IGFsbCBh
bmQgKG1pbi1kZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLSAxIC8gZGV2aWNlLWhl
aWdodCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmljZS1hc3BlY3Qt
cmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1oZWlnaHQgKyAxKSBzaG91bGQgYXBwbHkgCi1Q
QVNTIGV4cHJlc3Npb24gbWluLWRldmljZS1hc3BlY3QtcmF0aW8gc2hvdWxkIG5vdCBiZSBwYXJz
ZWFibGUgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lk
dGggLyBkZXZpY2UtaGVpZ2h0KSBzaG91bGQgYXBwbHkgCi1QQVNTIChtYXgtZGV2aWNlLWFzcGVj
dC1yYXRpbzogZGV2aWNlLXdpZHRoICsgMSAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBhcHBseSAK
LVBBU1MgKG1heC1kZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBkZXZpY2UtaGVp
Z2h0IC0gMSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2UtYXNwZWN0LXJh
dGlvOiBkZXZpY2Utd2lkdGggLSAxIC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIG5vdCBhcHBseSAK
LVBBU1Mgbm90IGFsbCBhbmQgKG1heC1kZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGgg
LyBkZXZpY2UtaGVpZ2h0ICsgMSkgc2hvdWxkIGFwcGx5IAotUEFTUyBleHByZXNzaW9uIG1heC1k
ZXZpY2UtYXNwZWN0LXJhdGlvIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNz
aW9uIG1heC1hc3BlY3QtcmF0aW86IDEvMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHBy
ZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDEgIC8xIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzogMSAgLyAJCi0xIHNob3VsZCBiZSBwYXJzZWFi
bGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzogMS8KLTEgc2hvdWxkIGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAxIHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDAuNSBzaG91
bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAx
LjAvMSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0
LXJhdGlvOiAxLzEuMCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBt
YXgtYXNwZWN0LXJhdGlvOiAxLjAvMS4wIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBl
eHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDAvMSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAxLzAgc2hvdWxkIG5vdCBiZSBwYXJz
ZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzogMC8wIHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IC0xLzEgc2hv
dWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzog
MS8tMSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0
LXJhdGlvOiAtMS8tMSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBk
ZXZpY2UtYXNwZWN0LXJhdGlvOiAxLzEgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVz
c2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAxICAvMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFT
UyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDEgIC8gCQotMSBzaG91bGQgYmUgcGFy
c2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDEvCi0xIHNob3Vs
ZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMSBz
aG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJh
dGlvOiAwLjUgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNl
LWFzcGVjdC1yYXRpbzogMS4wLzEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJl
c3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMS8xLjAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMS4wLzEuMCBzaG91bGQgbm90
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAwLzEg
c2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1y
YXRpbzogMS8wIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmlj
ZS1hc3BlY3QtcmF0aW86IDAvMCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVz
c2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAtMS8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAot
UEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDEvLTEgc2hvdWxkIG5vdCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogLTEvLTEgc2hv
dWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIG1vbm9jaHJvbWVfYW5kX2NvbG9yIAotUEFTUyBm
aW5kX2RlcHRoIAotUEFTUyBhbGwgYW5kIChjb2xvcjogZGVwdGgpIHNob3VsZCBhcHBseSAKLVBB
U1MgYWxsIGFuZCAoY29sb3I6IGRlcHRoIC0gMSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxs
IGFuZCAoY29sb3I6IGRlcHRoICsgMSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAo
bWF4LWNvbG9yOiBkZXB0aCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtY29sb3I6
IGRlcHRoIC0gMSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWNvbG9yOiBk
ZXB0aCArIDEpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoY29sb3IpIHNob3VsZCBhcHBs
eSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtY29sb3Igc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gbWluLWNvbG9yIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBh
bGwgYW5kIChtb25vY2hyb21lKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBleHByZXNzaW9uIG1h
eC1tb25vY2hyb21lIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1p
bi1tb25vY2hyb21lIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBub3QgYWxsIGFuZCAo
bW9ub2Nocm9tZSkgc2hvdWxkIGFwcGx5IAotUEFTUyBub3QgYWxsIGFuZCAoY29sb3IpIHNob3Vs
ZCBub3QgYXBwbHkgCi1QQVNTIG9ubHkgYWxsIGFuZCAoY29sb3IpIHNob3VsZCBhcHBseSAKLVBB
U1Mgb25seSBhbGwgYW5kIChtb25vY2hyb21lKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBleHBy
ZXNzaW9uIGNvbG9yOiAxIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gY29s
b3I6IDMyNyBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGNvbG9yOiAwIHNo
b3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gY29sb3I6IDEuMCBzaG91bGQgbm90
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBjb2xvcjogLTEgc2hvdWxkIG5vdCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gY29sb3I6IDEvMSBzaG91bGQgbm90IGJlIHBhcnNl
YWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tbW9ub2Nocm9tZTogMSBzaG91bGQgYmUgcGFyc2Vh
YmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1tb25vY2hyb21lOiAzMjcgc2hvdWxkIGJlIHBhcnNl
YWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tbW9ub2Nocm9tZTogMCBzaG91bGQgYmUgcGFyc2Vh
YmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1tb25vY2hyb21lOiAxLjAgc2hvdWxkIG5vdCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLW1vbm9jaHJvbWU6IC0xIHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1tb25vY2hyb21lOiAxLzEgc2hvdWxk
IG5vdCBiZSBwYXJzZWFibGUgCi1GQUlMIGZpbmRfcmVzb2x1dGlvbiBhc3NlcnRfZmFsc2U6IGV4
cGVjdGVkIGZhbHNlIGdvdCB0cnVlCi1QQVNTIChyZXNvbHV0aW9uOiBkcGkpIHNob3VsZCBub3Qg
YXBwbHkgCi1QQVNTIChyZXNvbHV0aW9uOiBkcGkgKyAxKSBzaG91bGQgbm90IGFwcGx5IAotRkFJ
TCAobWluLXJlc29sdXRpb246IGRwaSAtIDEgKSBzaG91bGQgYXBwbHkgYXNzZXJ0X3RydWU6IGV4
cGVjdGVkIHRydWUgZ290IGZhbHNlCi1QQVNTIG5vdCBhbGwgYW5kIChtaW4tcmVzb2x1dGlvbjog
ZHBpIC0gMSApIHNob3VsZCBub3QgYXBwbHkgCi1GQUlMIG5vdCBhbGwgYW5kIChtaW4tcmVzb2x1
dGlvbjogZHBpICsgMSApIHNob3VsZCBhcHBseSBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBn
b3QgZmFsc2UKLVBBU1MgYWxsIGFuZCAobWluLXJlc29sdXRpb246IGRwaSArIDEgKSBzaG91bGQg
bm90IGFwcGx5IAotRkFJTCAobWluLXJlc29sdXRpb246IGRwY20gKGRwaSAtIDEpICkgc2hvdWxk
IGFwcGx5IGFzc2VydF90cnVlOiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQotRkFJTCAobWF4LXJl
c29sdXRpb246IGRwY20gIChkcGkgKyAxKSApIHNob3VsZCBhcHBseSBhc3NlcnRfdHJ1ZTogZXhw
ZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKLVBBU1MgKG1heC1yZXNvbHV0aW9uOiBkcGNtICAoZHBpIC0g
MSkgKSBzaG91bGQgbm90IGFwcGx5IAotRkFJTCBub3QgYWxsIGFuZCAobWluLXJlc29sdXRpb246
IGRwY20gIChkcGkgKyAxKSApIHNob3VsZCBhcHBseSBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1
ZSBnb3QgZmFsc2UKLVBBU1MgZXhwcmVzc2lvbiBncmlkIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gZ3JpZDogMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNz
aW9uIGdyaWQ6IDEgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBncmlkOiAx
IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWdyaWQgc2hvdWxkIG5v
dCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWdyaWQ6MCBzaG91bGQgbm90IGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtZ3JpZDogMSBzaG91bGQgbm90IGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBncmlkOiAyIHNob3VsZCBub3QgYmUgcGFyc2VhYmxl
IAotUEFTUyBleHByZXNzaW9uIGdyaWQ6IC0xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFT
UyAoZ3JpZCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGdyaWQ6IDApIHNob3VsZCBhcHBseSAK
LVBBU1MgKGdyaWQ6IDEpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChncmlkOiAyKSBzaG91bGQg
bm90IGFwcGx5IAotUEFTUyAoZ3JpZDogLTEpIHNob3VsZCBub3QgYXBwbHkgCi0KSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
ZW5hYmxlLWRpc2FibGUtc2V0dGluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9lbmFi
bGUtZGlzYWJsZS1zZXR0aW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9l
bmFibGUtZGlzYWJsZS1zZXR0aW5nLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICswLDAgQEAKLVBBU1NFRDogd2Vic29ja2V0IG9iamVjdCBpcyBhdmFpbGFibGUgd2hlbiBXZWJT
b2NrZXRzRW5hYmxlZCBpcyB0cnVlCi1QQVNTRUQ6IHdlYnNvY2tldCBvYmplY3QgaXMgbm90IGF2
YWlsYWJsZSB3aGVuIFdlYlNvY2tldHNFbmFibGVkIGlzIGZhbHNlCi1URVNUIENPTVBMRVRFCklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2VuYWJsZS1kaXNhYmxlLXNldHRpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2VuYWJs
ZS1kaXNhYmxlLXNldHRpbmcuaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMv
cGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9lbmFibGUtZGlz
YWJsZS1zZXR0aW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotPCFET0NU
WVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPlJJTSBQUiAxNTIzMTE8L3RpdGxlPgot
PHNjcmlwdD4KLWZ1bmN0aW9uIGFwcGVuZFJlc3VsdCh0ZXh0KQotewotICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJyZXN1bHRzIikuaW5uZXJIVE1MICs9IHRleHQ7Ci19Ci0KLWZ1bmN0aW9u
IHJ1blRlc3QoKQotewotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewotICAgICAgICB3aW5k
b3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Ci0gICAgICAgIHdpbmRvdy50ZXN0UnVubmVyLm92
ZXJyaWRlUHJlZmVyZW5jZSgiV2ViU29ja2V0c0VuYWJsZWQiLCB0cnVlKTsKLSAgICB9Ci0gICAg
aWYgKHdpbmRvdy5XZWJTb2NrZXQpIHsKLSAgICAgICAgYXBwZW5kUmVzdWx0KCJQQVNTRUQ6IHdl
YnNvY2tldCBvYmplY3QgaXMgYXZhaWxhYmxlIHdoZW4gV2ViU29ja2V0c0VuYWJsZWQgaXMgdHJ1
ZTxicj4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhcHBlbmRSZXN1bHQoIkZBSUxFRDogd2Vi
c29ja2V0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlIHdoZW4gV2ViU29ja2V0c0VuYWJsZWQgaXMg
dHJ1ZTxicj4iKTsKLSAgICB9Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAgICAg
IHdpbmRvdy50ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViU29ja2V0c0VuYWJsZWQi
LCBmYWxzZSk7Ci0gICAgfQotICAgIGlmICh3aW5kb3cuV2ViU29ja2V0KSB7Ci0gICAgICAgIGFw
cGVuZFJlc3VsdCgiRkFJTEVEOiB3ZWJzb2NrZXQgb2JqZWN0IGlzIGF2YWlsYWJsZSB3aGVuIFdl
YlNvY2tldHNFbmFibGVkIGlzIGZhbHNlPGJyPiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFw
cGVuZFJlc3VsdCgiUEFTU0VEOiB3ZWJzb2NrZXQgb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUgd2hl
biBXZWJTb2NrZXRzRW5hYmxlZCBpcyBmYWxzZTxicj4iKTsKLSAgICB9Ci0gICAgYXBwZW5kUmVz
dWx0KCJURVNUIENPTVBMRVRFIik7Ci19Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9h
ZD0icnVuVGVzdCgpIj4KLTxkaXYgaWQ9InJlc3VsdHMiPjwvZGl2PgotPC9ib2R5PgotPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9qcy9kb20vY29uc3RydWN0
b3ItbGVuZ3RoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ibGFja2JlcnJ5L2pzL2RvbS9jb25zdHJ1Y3Rvci1sZW5ndGgtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2pzL2RvbS9j
b25zdHJ1Y3Rvci1sZW5ndGgtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICsw
LDAgQEAKLVRoaXMgdGVzdHMgdGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiBjb25zdHJ1Y3RvcnMuCi0K
LU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1QQVNTIEFycmF5QnVmZmVyLmxlbmd0aCBp
cyAxCi1GQUlMIEF1ZGlvQ29udGV4dC5sZW5ndGggc2hvdWxkIGJlIDAuIFRocmV3IGV4Y2VwdGlv
biBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogQXVkaW9Db250ZXh0Ci1QQVNT
IEJlZm9yZUxvYWRFdmVudC5sZW5ndGggaXMgMQotUEFTUyBCbG9iLmxlbmd0aCBpcyAwCi1QQVNT
IENsb3NlRXZlbnQubGVuZ3RoIGlzIDEKLVBBU1MgQ3VzdG9tRXZlbnQubGVuZ3RoIGlzIDEKLUZB
SUwgRE9NRm9ybURhdGEubGVuZ3RoIHNob3VsZCBiZSAwLiBUaHJldyBleGNlcHRpb24gUmVmZXJl
bmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IERPTUZvcm1EYXRhCi1QQVNTIERPTVBhcnNl
ci5sZW5ndGggaXMgMAotUEFTUyBEYXRhVmlldy5sZW5ndGggaXMgMQotUEFTUyBFcnJvckV2ZW50
Lmxlbmd0aCBpcyAxCi1QQVNTIEV2ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIEV2ZW50U291cmNlLmxl
bmd0aCBpcyAxCi1QQVNTIEZsb2F0MzJBcnJheS5sZW5ndGggaXMgMQotUEFTUyBGbG9hdDY0QXJy
YXkubGVuZ3RoIGlzIDEKLVBBU1MgRmlsZVJlYWRlci5sZW5ndGggaXMgMAotRkFJTCBGaWxlUmVh
ZGVyU3luYy5sZW5ndGggc2hvdWxkIGJlIDAuIFRocmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJv
cjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogRmlsZVJlYWRlclN5bmMKLVBBU1MgSGFzaENoYW5nZUV2
ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIEludDE2QXJyYXkubGVuZ3RoIGlzIDEKLVBBU1MgSW50MzJB
cnJheS5sZW5ndGggaXMgMQotUEFTUyBJbnQ4QXJyYXkubGVuZ3RoIGlzIDEKLUZBSUwgSW50ZW50
Lmxlbmd0aCBzaG91bGQgYmUgMy4gVGhyZXcgZXhjZXB0aW9uIFJlZmVyZW5jZUVycm9yOiBDYW4n
dCBmaW5kIHZhcmlhYmxlOiBJbnRlbnQKLVBBU1MgTWVkaWFDb250cm9sbGVyLmxlbmd0aCBpcyAw
Ci1GQUlMIE1lZGlhU3RyZWFtLmxlbmd0aCBzaG91bGQgYmUgMC4gVGhyZXcgZXhjZXB0aW9uIFJl
ZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBNZWRpYVN0cmVhbQotUEFTUyBNZXNz
YWdlQ2hhbm5lbC5sZW5ndGggaXMgMAotUEFTUyBNZXNzYWdlRXZlbnQubGVuZ3RoIGlzIDEKLVBB
U1MgT3ZlcmZsb3dFdmVudC5sZW5ndGggaXMgMQotUEFTUyBQYWdlVHJhbnNpdGlvbkV2ZW50Lmxl
bmd0aCBpcyAxCi1GQUlMIFBlZXJDb25uZWN0aW9uLmxlbmd0aCBzaG91bGQgYmUgMi4gVGhyZXcg
ZXhjZXB0aW9uIFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBQZWVyQ29ubmVj
dGlvbgotUEFTUyBQb3BTdGF0ZUV2ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIFByb2dyZXNzRXZlbnQu
bGVuZ3RoIGlzIDEKLUZBSUwgU2hhZG93Um9vdC5sZW5ndGggc2hvdWxkIGJlIDEuIFRocmV3IGV4
Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogU2hhZG93Um9vdAot
UEFTUyBTaGFyZWRXb3JrZXIubGVuZ3RoIGlzIDEKLVBBU1MgU3RvcmFnZUV2ZW50Lmxlbmd0aCBp
cyAxCi1QQVNTIFRleHRUcmFja0N1ZS5sZW5ndGggaXMgNgotUEFTUyBUcmFja0V2ZW50Lmxlbmd0
aCBpcyAxCi1QQVNTIFVpbnQxNkFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIFVpbnQzMkFycmF5Lmxl
bmd0aCBpcyAxCi1QQVNTIFVpbnQ4QXJyYXkubGVuZ3RoIGlzIDEKLVBBU1MgVWludDhDbGFtcGVk
QXJyYXkubGVuZ3RoIGlzIDEKLVBBU1MgV2ViR0xDb250ZXh0RXZlbnQubGVuZ3RoIGlzIDEKLVBB
U1MgV2ViS2l0QW5pbWF0aW9uRXZlbnQubGVuZ3RoIGlzIDEKLVBBU1MgV2ViS2l0Q1NTTWF0cml4
Lmxlbmd0aCBpcyAwCi1QQVNTIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIubGVuZ3RoIGlzIDEKLVBB
U1MgV2ViS2l0UG9pbnQubGVuZ3RoIGlzIDAKLVBBU1MgV2ViS2l0VHJhbnNpdGlvbkV2ZW50Lmxl
bmd0aCBpcyAxCi1QQVNTIFdlYlNvY2tldC5sZW5ndGggaXMgMQotUEFTUyBXb3JrZXIubGVuZ3Ro
IGlzIDEKLVBBU1Mgd2Via2l0VVJMLmxlbmd0aCBpcyAwCi1QQVNTIFhNTEh0dHBSZXF1ZXN0Lmxl
bmd0aCBpcyAwCi1QQVNTIFhNTFNlcmlhbGl6ZXIubGVuZ3RoIGlzIDAKLVBBU1MgWFBhdGhFdmFs
dWF0b3IubGVuZ3RoIGlzIDAKLVBBU1MgWFNMVFByb2Nlc3Nvci5sZW5ndGggaXMgMAotUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvbWVkaWEtY2FuLXBsYXktb2dnLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21l
ZGlhL21lZGlhLWNhbi1wbGF5LW9nZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvbWVkaWEtY2FuLXBsYXktb2dn
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxMyArMCwwIEBACi1UZXN0IEhUTUxN
ZWRpYUVsZW1lbnQgY2FuUGxheVR5cGUoKSBtZXRob2QgZm9yIG9nZyBtZWRpYSBjb250YWluZXJz
LgotCi1UaGVzZSB0ZXN0cyBtYXkgYmUgZXhwZWN0ZWQgdG8gZmFpbCBpZiB0aGUgV2ViS2l0IHBv
cnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZm9ybWF0LgotCi1FWFBFQ1RFRCAodmlkZW8uY2FuUGxh
eVR5cGUoJ2F1ZGlvL29nZycpID09ICdtYXliZScpIE9LCi1FWFBFQ1RFRCAodmlkZW8uY2FuUGxh
eVR5cGUoJ3ZpZGVvL29nZycpID09ICdtYXliZScpIE9LCi1FWFBFQ1RFRCAodmlkZW8uY2FuUGxh
eVR5cGUoJ2F1ZGlvL29nZzsgY29kZWNzPXZvcmJpcycpID09ICdwcm9iYWJseScpIE9LCi1FWFBF
Q1RFRCAodmlkZW8uY2FuUGxheVR5cGUoJ2F1ZGlvL29nZzsgY29kZWNzPW9wdXMnKSA9PSAncHJv
YmFibHknKSwgT0JTRVJWRUQgJycgRkFJTAotRVhQRUNURUQgKHZpZGVvLmNhblBsYXlUeXBlKCdh
dWRpby9vZ2c7IGNvZGVjcz1zcGVleCcpID09ICdwcm9iYWJseScpLCBPQlNFUlZFRCAnJyBGQUlM
Ci1FWFBFQ1RFRCAodmlkZW8uY2FuUGxheVR5cGUoJ3ZpZGVvL29nZzsgY29kZWNzPXRoZW9yYScp
ID09ICdwcm9iYWJseScpIE9LCi1FWFBFQ1RFRCAodmlkZW8uY2FuUGxheVR5cGUoJ3ZpZGVvL29n
ZzsgY29kZWNzPXRoZW9yYSx2b3JiaXMnKSA9PSAncHJvYmFibHknKSBPSwotRU5EIE9GIFRFU1QK
LQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS9zaG9ydC1tZWRp
YS1yZXBlYXRzLWNvcnJlY3RseS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS9zaG9ydC1tZWRpYS1yZXBlYXRzLWNvcnJlY3Rs
eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L2JsYWNrYmVycnkvbWVkaWEvc2hvcnQtbWVkaWEtcmVwZWF0cy1jb3JyZWN0bHktZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyICswLDAgQEAKLVRlc3QgdGhhdCBhIHZlcnkgc2hv
cnQgYXVkaW8gZmlsZSBkb2VzIG5vdCByZXBlYXQgdW5pbnRlbnRpb25hbGx5LgotCi1FVkVOVChj
YW5wbGF5dGhyb3VnaCkKLUVWRU5UKHBsYXlpbmcpCi1FVkVOVChlbmRlZCkKLUVWRU5UKHBsYXlp
bmcpCi1FVkVOVChlbmRlZCkKLUVWRU5UKHByb2dyZXNzKQotRVZFTlQocGxheWluZykKLUVWRU5U
KGVuZGVkKQotRVZFTlQocHJvZ3Jlc3MpCi1FVkVOVChwbGF5aW5nKQotRVZFTlQoZW5kZWQpCi1F
VkVOVChwcm9ncmVzcykKLUVWRU5UKHBsYXlpbmcpCi1FVkVOVChlbmRlZCkKLUVWRU5UKHByb2dy
ZXNzKQotRVZFTlQocGxheWluZykKLUVWRU5UKGVuZGVkKQotRVZFTlQocHJvZ3Jlc3MpCi1FWFBF
Q1RFRChwcm9ncmVzc0NvdW50ID09ICc1JykgT0sKLUVORCBPRiBURVNUCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3Nob3J0LW1lZGlhLXJlcGVhdHMtY29ycmVj
dGx5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9t
ZWRpYS9zaG9ydC1tZWRpYS1yZXBlYXRzLWNvcnJlY3RseS5odG1sCShyZXZpc2lvbiAxNjE2MDYp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3Nob3J0LW1lZGlhLXJl
cGVhdHMtY29ycmVjdGx5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNzIgKzAsMCBAQAotPGh0
bWw+Ci0gICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0
aCI+Ci0gICAgPHRpdGxlPlNob3J0IE1lZGlhIFJlcGVhdHMgQ29ycmVjdGx5PC90aXRsZT4KLSAg
ICA8Ym9keT4KLSAgICA8cD5UZXN0IHRoYXQgYSB2ZXJ5IHNob3J0IGF1ZGlvIGZpbGUgZG9lcyBu
b3QgcmVwZWF0IHVuaW50ZW50aW9uYWxseS48L3A+Ci0KLSAgICA8c2NyaXB0IHNyYz0uLi8uLi8u
Li9tZWRpYS92aWRlby10ZXN0LmpzPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPS4uLy4uLy4u
L21lZGlhL21lZGlhLWZpbGUuanM+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdD4KLSAgICAgICAgZnVu
Y3Rpb24gZXJyb3JMaXN0ZW5lcihldmVudCkKLSAgICAgICAgewotICAgICAgICAgICAgbG9nUmVz
dWx0KGZhbHNlLCAiQ2F1Z2h0ICdlcnJvcicgZXZlbnQsIG1lZGlhLmVycm9yLmNvZGUgPSAiICsg
dGhpcy5lcnJvci5jb2RlKTsKLSAgICAgICAgICAgIGVuZFRlc3QoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGNhbnBsYXl0aHJvdWdoTGlzdGVuZXIoZXZlbnQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiRVZFTlQoY2FucGxheXRocm91Z2gpIik7Ci0gICAg
ICAgICAgICB0aGlzLnBsYXkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHBsYXlp
bmdMaXN0ZW5lcihldmVudCkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc29sZVdyaXRlKCJF
VkVOVChwbGF5aW5nKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcHJvZ3Jlc3NM
aXN0ZW5lcihldmVudCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgdGhlIG1lZGlhIHJl
cGVhdHMgbW9yZSBvZnRlbiB0aGFuIGludGVuZGVkIHRoZXJlIHdpbGwgYmUgdG9vCi0gICAgICAg
ICAgICAvLyBtYW55IHByb2dyZXNzIGV2ZW50cyByZWNlaXZlZCwgaW4gdGhpcyBjYXNlIG9uZSBw
cm9ncmVzcwotICAgICAgICAgICAgLy8gZXZlbnQgcGVyIHBsYXkuIEkgdHJpZWQgbGlzdGVuaW5n
IGZvciBvdGhlciBtb3JlIGludHVpdGl2ZQotICAgICAgICAgICAgLy8gZXZlbnRzIGJ1dCBub3Ro
aW5nIGVsc2UgaXMgYmVpbmcgdHJpZ2dlcmVkIHdoZW4gdGhlIHJlcGVhdGVkCi0gICAgICAgICAg
ICAvLyBwbGF5cyBpbiBxdWVzdGlvbiBvY2N1ci4KLSAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgi
RVZFTlQocHJvZ3Jlc3MpIik7Ci0gICAgICAgICAgICArK3Byb2dyZXNzQ291bnQ7Ci0gICAgICAg
IH0KLQotICAgICAgICBmdW5jdGlvbiBlbmRlZExpc3RlbmVyKGV2ZW50KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjb25zb2xlV3JpdGUoIkVWRU5UKGVuZGVkKSIpOwotICAgICAgICAgICAgaWYg
KCsrZW5kZWRDb3VudCA8PSA1KSAvLyBTZXQgdG90YWwgbnVtYmVyIG9mIHJlcGVhdHMgaGVyZQot
ICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoImNvbnRpbnVlVGVzdCgpIiwgMTAwKTsgLy8gR2l2
ZSBldmVudHMgdGltZSB0byBjb21lCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
c2V0VGltZW91dCgiY29uY2x1ZGVUZXN0KCkiLCAxMDApOyAvLyBHaXZlIGV2ZW50cyB0aW1lIHRv
IGNvbWUKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNvbnRpbnVlVGVzdCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICgrK3JlcGVhdENvdW50ID09IDEpCi0gICAgICAgICAgICAg
ICAgYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NMaXN0
ZW5lcik7Ci0gICAgICAgICAgICBhdWRpb0VsZW1lbnQucGxheSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gY29uY2x1ZGVUZXN0KCkKLSAgICAgICAgewotICAgICAgICAgICAgdGVz
dEV4cGVjdGVkKCJwcm9ncmVzc0NvdW50IiwgcmVwZWF0Q291bnQpOwotICAgICAgICAgICAgZW5k
VGVzdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZG9jdW1lbnQud3JpdGUoIjxhdWRpbyBjb250
cm9scz48L2F1ZGlvPiIpOwotICAgICAgICB2YXIgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ2F1ZGlvJylbMF07Ci0gICAgICAgIHZhciBlbmRlZENvdW50ID0g
MDsKLSAgICAgICAgdmFyIHJlcGVhdENvdW50ID0gMDsKLSAgICAgICAgdmFyIHByb2dyZXNzQ291
bnQgPSAwOwotICAgICAgICBhdWRpb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBl
cnJvckxpc3RlbmVyKTsKLSAgICAgICAgYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Nh
bnBsYXl0aHJvdWdoJywgY2FucGxheXRocm91Z2hMaXN0ZW5lcik7Ci0gICAgICAgIGF1ZGlvRWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgcGxheWluZ0xpc3RlbmVyKTsKLSAgICAg
ICAgYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgZW5kZWRMaXN0ZW5lcik7
Ci0gICAgICAgIGF1ZGlvRWxlbWVudC5zcmMgPSBmaW5kTWVkaWFGaWxlKCJhdWRpbyIsICIuLi8u
Li8uLi9tZWRpYS9jb250ZW50L3Nob3J0Iik7Ci0gICAgPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWF1
dG9tYXRpYy1mdWxsc2NyZWVuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWF1dG9tYXRpYy1mdWxsc2NyZWVuLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxh
Y2tiZXJyeS9tZWRpYS92aWRlby1hdXRvbWF0aWMtZnVsbHNjcmVlbi1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEsNCArMCwwIEBACi1FVkVOVChjYW5wbGF5KQotRVZFTlQod2Via2l0
ZnVsbHNjcmVlbmNoYW5nZSkKLUVORCBPRiBURVNUCi0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL2JsYWNrYmVycnkvbWVkaWEvdmlkZW8tYXV0b21hdGljLWZ1bGxzY3JlZW4uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWF1
dG9tYXRpYy1mdWxsc2NyZWVuLmh0bWwJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvdmlkZW8tYXV0b21hdGljLWZ1bGxzY3JlZW4uaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMSwzMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1s
PgotPGhlYWQ+Ci0gICAgPHRpdGxlPlZpZGVvIEVsZW1lbnQgLSBUZXN0IGF1dG9tYXRpYyBFbnRl
ciBGdWxsc2NyZWVuIG9uIHBsYXk8L3RpdGxlPgotICAgIDxzY3JpcHQgc3JjPS4uLy4uLy4uL21l
ZGlhL3ZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Li4vLi4vLi4vbWVk
aWEvbWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0uLi8uLi8uLi9tZWRp
YS9tZWRpYS1jb250cm9scy5qcz48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0uLi8uLi8uLi9m
dWxsc2NyZWVuL2Z1bGwtc2NyZWVuLXRlc3QuanM+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdD4KLSAg
ICAgICAgdmFyIHZvbHVtZVNsaWRlcjsKLQotICAgICAgICB2YXIgc3RhcnRUZXN0ID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7Ci0gICAgICAgICAgICB3YWl0
Rm9yRXZlbnQodmlkZW8sICdjYW5wbGF5Jywgb25jYW5wbGF5KTsKLSAgICAgICAgICAgIHZpZGVv
LnNyYyA9IGZpbmRNZWRpYUZpbGUoJ3ZpZGVvJywgJy4uLy4uLy4uL21lZGlhL2NvbnRlbnQvdGVz
dCcpOwotICAgICAgICB9OwotCi0gICAgICAgIHZhciBvbmNhbnBsYXkgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgIHdhaXRGb3JFdmVudCh2aWRlbywgJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2Un
LCBvbmZ1bGxzY3JlZW5jaGFuZ2UpOwotICAgICAgICAgICAgcnVuV2l0aEtleURvd24oZnVuY3Rp
b24oKXsgdmlkZW8ucGxheSgpOyB9KQotICAgICAgICB9OwotCi0gICAgICAgIHZhciBvbmZ1bGxz
Y3JlZW5jaGFuZ2UgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGVuZFRlc3QoKTsKLSAgICAg
ICAgfTsKLSAgICA8L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0ic3RhcnRUZXN0KCki
PgotICAgIAotICAgIDx2aWRlbyBjb250cm9scz48L3ZpZGVvPiAgICAKLSAgICAKLTwvYm9keT4K
LTwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvdmlk
ZW8tY29udHJvbHMtZW5sYXJnZWQtZnVsbHNjcmVlbi1tZXRhLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWNvbnRy
b2xzLWVubGFyZ2VkLWZ1bGxzY3JlZW4tbWV0YS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYw
NikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvdmlkZW8tY29udHJv
bHMtZW5sYXJnZWQtZnVsbHNjcmVlbi1tZXRhLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICswLDAgQEAKLVRlc3QgdGhhdCBtZWRpYSBjb250cm9scyBhcmUgcmVuZGVyZWQgYXQg
dGhlIGVubGFyZ2VkIHNpemUgaW4gZnVsbHNjcmVlbiBtb2RlLgotCi1FVkVOVChjYW5wbGF5dGhy
b3VnaCkKLVRoZSBhY3R1YWwgY29udHJvbHMgaGVpZ2h0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGNv
bnRyb2xzIGhlaWdodC4gT0sKLUVORCBPRiBURVNUCi1FbnRlciBGdWxsU2NyZWVuCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWNvbnRyb2xzLWVubGFy
Z2VkLWZ1bGxzY3JlZW4tbWV0YS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL2JsYWNrYmVycnkvbWVkaWEvdmlkZW8tY29udHJvbHMtZW5sYXJnZWQtZnVsbHNjcmVlbi1t
ZXRhLmh0bWwJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNr
YmVycnkvbWVkaWEvdmlkZW8tY29udHJvbHMtZW5sYXJnZWQtZnVsbHNjcmVlbi1tZXRhLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotPGh0bWw+Ci0gICAgPG1ldGEgbmFtZT0i
dmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCI+Ci0gICAgPHRpdGxlPlRlc3Qg
b2YgSFRNTDUgTWVkaWEgQ29udHJvbHMgRW5sYXJnZW1lbnQgaW4gRnVsbHNjcmVlbiBNb2RlPC90
aXRsZT4KLSAgICA8Ym9keT4KLSAgICA8cD5UZXN0IHRoYXQgbWVkaWEgY29udHJvbHMgYXJlIHJl
bmRlcmVkIGF0IHRoZSBlbmxhcmdlZCBzaXplIGluIGZ1bGxzY3JlZW4gbW9kZS48L3A+Ci0KLSAg
ICA8c2NyaXB0IHNyYz0uLi8uLi8uLi9tZWRpYS92aWRlby10ZXN0LmpzPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQgc3JjPS4uLy4uLy4uL21lZGlhL21lZGlhLWZpbGUuanM+PC9zY3JpcHQ+Ci0gICAg
PHNjcmlwdCBzcmM9Li4vLi4vLi4vbWVkaWEvbWVkaWEtY29udHJvbHMuanM+PC9zY3JpcHQ+Ci0g
ICAgPHNjcmlwdD4KLSAgICAgICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihldmVudCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbG9nUmVzdWx0KGZhbHNlLCAiQ2F1Z2h0ICdlcnJvcicgZXZlbnQs
IHZpZGVvLmVycm9yLmNvZGUgPSAiICsgdGhpcy5lcnJvci5jb2RlKTsKLSAgICAgICAgICAgIGVu
ZFRlc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGZ1bGxTY3JlZW5MaXN0ZW5l
cihldmVudCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVGhlIHZpZGVvIGVudGVyZWQgZnVs
bHNjcmVlbiBtb2RlLgotICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcign
d2Via2l0ZnVsbHNjcmVlbmNoYW5nZScsIGZ1bGxTY3JlZW5MaXN0ZW5lcik7Ci0gICAgICAgICAg
ICAvLyBDYWxjdWxhdGUgdGhlIHNjYWxlIG9mIENTUyBwaXhlbHMuIElmIENTUyBwaXhlbHMgYXJl
IG5vdCBiZWluZwotICAgICAgICAgICAgLy8gc2NhbGVkIGJ5IGEgZmFjdG9yIG9mIGF0IGxlYXN0
IHR3bywgd2UgZXhwZWN0IHRoZSBmdWxsc2NyZWVuCi0gICAgICAgICAgICAvLyBjb250cm9scyB0
byBiZSBzaG93biBlbmxhcmdlZC4gQ1NTIHBpeGVscyB3aWxsIG9ubHkgYmUgc2NhbGVkCi0gICAg
ICAgICAgICAvLyB3aGVuIHZpZXdwb3J0IHdpZHRoIGlzIHNldCB0byAiZGV2aWNlLXdpZHRoIiBi
eSBhIG1ldGEgdGFnIChzZWUKLSAgICAgICAgICAgIC8vIGFib3ZlKSBvbiBkZXZpY2VzIHdpdGgg
aGlnaCBzY3JlZW4gRFBJJ3Mgc3VjaCBhcyBCQjEwIGhhbmQtaGVsZHMuCi0gICAgICAgICAgICB2
YXIgZXhwZWN0ZWQgPSA2NDsKLSAgICAgICAgICAgIGlmIChzY3JlZW4ud2lkdGggLyBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggPj0gMikKLSAgICAgICAgICAgICAgICBleHBl
Y3RlZCA9IDMyOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IG1lZGlhQ29udHJvbHNCdXR0b25E
aW1lbnNpb25zKHZpZGVvRWxlbWVudCwgJ3BsYXktYnV0dG9uJylbMV07Ci0gICAgICAgICAgICBp
ZiAoYWN0dWFsID09IGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIGxvZ1Jlc3VsdCh0cnVlLCAi
VGhlIGFjdHVhbCBjb250cm9scyBoZWlnaHQgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgY29udHJvbHMg
aGVpZ2h0LiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxvZ1Jlc3VsdChm
YWxzZSwgIlRoZSBhY3R1YWwgY29udHJvbHMgaGVpZ2h0IG9mICIgKyBhY3R1YWwgKyAiIGRvZXMg
bm90IG1hdGNoIHRoZSBleHBlY3RlZCBjb250cm9scyBoZWlnaHQgb2YgIiArIGV4cGVjdGVkICsg
Ii4iKTsKLSAgICAgICAgICAgIGVuZFRlc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIGNhbnBsYXl0aHJvdWdoTGlzdGVuZXIoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvbnNvbGVXcml0ZSgiRVZFTlQoY2FucGxheXRocm91Z2gpIik7Ci0gICAgICAgICAgICAvLyBD
YW5ub3QgY2FsbCB0aGlzLndlYmtpdEVudGVyRnVsbFNjcmVlbigpIGRpcmVjdGx5IGJlY2F1c2Ug
aXQKLSAgICAgICAgICAgIC8vIG9ubHkgd29ya3Mgd2hlbiBpbml0aWF0ZWQgYnkgYSB1c2VyIGdl
c3R1cmUuCi0gICAgICAgICAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKQotICAgICAgICAgICAg
ICAgIGV2ZW50U2VuZGVyLmtleURvd24oImEiLCBbImFsdEtleSJdKTsKLSAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgIGxvZ1Jlc3VsdCh0cnVlLCAiVGhpcyB0ZXN0IHVzZXMgZXZl
bnRTZW5kZXIgYW5kIG11c3QgYmUgcnVuIHVuZGVyIHRoZSBEUlQgZnJhbWV3b3JrIHRvIGJlIGF1
dG9tYXRpYy4gT3RoZXJ3aXNlIHlvdSBuZWVkIHRvIG1hbnVhbGx5IHByZXNzIEVudGVyIEZ1bGxz
Y3JlZW4uIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkb2N1bWVudC53
cml0ZSgiPHZpZGVvIGNvbnRyb2xzPjwvdmlkZW8+Iik7Ci0gICAgICAgIGRvY3VtZW50LndyaXRl
KCI8YnV0dG9uIG9uY2xpY2s9J3ZpZGVvRWxlbWVudC53ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbigp
JyBhY2Nlc3NLZXk9J2EnPkVudGVyIEZ1bGxTY3JlZW48L2J1dHRvbj4iKTsKLSAgICAgICAgZG9j
dW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0ZnVsbHNjcmVlbmNoYW5nZScsIGZ1bGxTY3Jl
ZW5MaXN0ZW5lcik7Ci0gICAgICAgIHZhciB2aWRlb0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgndmlkZW8nKVswXTsKLSAgICAgICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7Ci0gICAgICAgIHZpZGVvRWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIGNhbnBsYXl0aHJvdWdoTGlzdGVuZXIp
OwotICAgICAgICB2aWRlb0VsZW1lbnQuc3JjID0gZmluZE1lZGlhRmlsZSgidmlkZW8iLCAiLi4v
Li4vLi4vbWVkaWEvY29udGVudC90ZXN0Iik7Ci0gICAgPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWNv
bnRyb2xzLWVubGFyZ2VkLWZ1bGxzY3JlZW4tbm9tZXRhLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWNvbnRyb2xz
LWVubGFyZ2VkLWZ1bGxzY3JlZW4tbm9tZXRhLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92aWRlby1jb250cm9s
cy1lbmxhcmdlZC1mdWxsc2NyZWVuLW5vbWV0YS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMCwwIEBACi1UZXN0IHRoYXQgbWVkaWEgY29udHJvbHMgYXJlIHJlbmRlcmVkIGF0
IHRoZSBlbmxhcmdlZCBzaXplIGluIGZ1bGxzY3JlZW4gbW9kZS4KLQotRVZFTlQoY2FucGxheXRo
cm91Z2gpCi1UaGUgYWN0dWFsIGNvbnRyb2xzIGhlaWdodCBtYXRjaGVzIHRoZSBleHBlY3RlZCBj
b250cm9scyBoZWlnaHQuIE9LCi1FTkQgT0YgVEVTVAotRW50ZXIgRnVsbFNjcmVlbgpJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92aWRlby1jb250cm9scy1lbmxh
cmdlZC1mdWxsc2NyZWVuLW5vbWV0YS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvdmlkZW8tY29udHJvbHMtZW5sYXJnZWQtZnVsbHNjcmVl
bi1ub21ldGEuaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
YmxhY2tiZXJyeS9tZWRpYS92aWRlby1jb250cm9scy1lbmxhcmdlZC1mdWxsc2NyZWVuLW5vbWV0
YS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAgQEAKLTxodG1sPgotICAgIDx0aXRs
ZT5UZXN0IG9mIEhUTUw1IE1lZGlhIENvbnRyb2xzIEVubGFyZ2VtZW50IGluIEZ1bGxzY3JlZW4g
TW9kZTwvdGl0bGU+Ci0gICAgPGJvZHk+Ci0gICAgPHA+VGVzdCB0aGF0IG1lZGlhIGNvbnRyb2xz
IGFyZSByZW5kZXJlZCBhdCB0aGUgZW5sYXJnZWQgc2l6ZSBpbiBmdWxsc2NyZWVuIG1vZGUuPC9w
PgotCi0gICAgPHNjcmlwdCBzcmM9Li4vLi4vLi4vbWVkaWEvdmlkZW8tdGVzdC5qcz48L3Njcmlw
dD4KLSAgICA8c2NyaXB0IHNyYz0uLi8uLi8uLi9tZWRpYS9tZWRpYS1maWxlLmpzPjwvc2NyaXB0
PgotICAgIDxzY3JpcHQgc3JjPS4uLy4uLy4uL21lZGlhL21lZGlhLWNvbnRyb2xzLmpzPjwvc2Ny
aXB0PgotICAgIDxzY3JpcHQ+Ci0gICAgICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXZlbnQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvZ1Jlc3VsdChmYWxzZSwgIkNhdWdodCAnZXJyb3In
IGV2ZW50LCB2aWRlby5lcnJvci5jb2RlID0gIiArIHRoaXMuZXJyb3IuY29kZSk7Ci0gICAgICAg
ICAgICBlbmRUZXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBmdWxsU2NyZWVu
TGlzdGVuZXIoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZSB2aWRlbyBlbnRl
cmVkIGZ1bGxzY3JlZW4gbW9kZS4KLSAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlz
dGVuZXIoJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnLCBmdWxsU2NyZWVuTGlzdGVuZXIpOwotICAg
ICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzY2FsZSBvZiBDU1MgcGl4ZWxzLiBJZiBDU1MgcGl4
ZWxzIGFyZSBub3QgYmVpbmcKLSAgICAgICAgICAgIC8vIHNjYWxlZCBieSBhIGZhY3RvciBvZiBh
dCBsZWFzdCB0d28sIHdlIGV4cGVjdCB0aGUgZnVsbHNjcmVlbgotICAgICAgICAgICAgLy8gY29u
dHJvbHMgdG8gYmUgc2hvd24gZW5sYXJnZWQuIENTUyBwaXhlbHMgd2lsbCBvbmx5IGJlIHNjYWxl
ZAotICAgICAgICAgICAgLy8gd2hlbiB2aWV3cG9ydCB3aWR0aCBpcyBzZXQgdG8gImRldmljZS13
aWR0aCIgYnkgYSBtZXRhIHRhZyAoc2VlCi0gICAgICAgICAgICAvLyBhYm92ZSkgb24gZGV2aWNl
cyB3aXRoIGhpZ2ggc2NyZWVuIERQSSdzIHN1Y2ggYXMgQkIxMCBoYW5kLWhlbGRzLgotICAgICAg
ICAgICAgdmFyIGV4cGVjdGVkID0gNjQ7Ci0gICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoIC8g
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoID49IDIpCi0gICAgICAgICAgICAg
ICAgZXhwZWN0ZWQgPSAzMjsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBtZWRpYUNvbnRyb2xz
QnV0dG9uRGltZW5zaW9ucyh2aWRlb0VsZW1lbnQsICdwbGF5LWJ1dHRvbicpWzFdOwotICAgICAg
ICAgICAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkKLSAgICAgICAgICAgICAgICBsb2dSZXN1bHQo
dHJ1ZSwgIlRoZSBhY3R1YWwgY29udHJvbHMgaGVpZ2h0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGNv
bnRyb2xzIGhlaWdodC4iKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsb2dS
ZXN1bHQoZmFsc2UsICJUaGUgYWN0dWFsIGNvbnRyb2xzIGhlaWdodCBvZiAiICsgYWN0dWFsICsg
IiBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgY29udHJvbHMgaGVpZ2h0IG9mICIgKyBleHBl
Y3RlZCArICIuIik7Ci0gICAgICAgICAgICBlbmRUZXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmdW5jdGlvbiBjYW5wbGF5dGhyb3VnaExpc3RlbmVyKGV2ZW50KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb25zb2xlV3JpdGUoIkVWRU5UKGNhbnBsYXl0aHJvdWdoKSIpOwotICAgICAgICAg
ICAgLy8gQ2Fubm90IGNhbGwgdGhpcy53ZWJraXRFbnRlckZ1bGxTY3JlZW4oKSBkaXJlY3RseSBi
ZWNhdXNlIGl0Ci0gICAgICAgICAgICAvLyBvbmx5IHdvcmtzIHdoZW4gaW5pdGlhdGVkIGJ5IGEg
dXNlciBnZXN0dXJlLgotICAgICAgICAgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikKLSAgICAg
ICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCJhIiwgWyJhbHRLZXkiXSk7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb2dSZXN1bHQodHJ1ZSwgIlRoaXMgdGVzdCB1
c2VzIGV2ZW50U2VuZGVyIGFuZCBtdXN0IGJlIHJ1biB1bmRlciB0aGUgRFJUIGZyYW1ld29yayB0
byBiZSBhdXRvbWF0aWMuIE90aGVyd2lzZSB5b3UgbmVlZCB0byBtYW51YWxseSBwcmVzcyBFbnRl
ciBGdWxsc2NyZWVuLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZG9j
dW1lbnQud3JpdGUoIjx2aWRlbyBjb250cm9scz48L3ZpZGVvPiIpOwotICAgICAgICBkb2N1bWVu
dC53cml0ZSgiPGJ1dHRvbiBvbmNsaWNrPSd2aWRlb0VsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxT
Y3JlZW4oKScgYWNjZXNzS2V5PSdhJz5FbnRlciBGdWxsU2NyZWVuPC9idXR0b24+Iik7Ci0gICAg
ICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnLCBm
dWxsU2NyZWVuTGlzdGVuZXIpOwotICAgICAgICB2YXIgdmlkZW9FbGVtZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ3ZpZGVvJylbMF07Ci0gICAgICAgIHZpZGVvRWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpOwotICAgICAgICB2aWRlb0Vs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCBjYW5wbGF5dGhyb3VnaExp
c3RlbmVyKTsKLSAgICAgICAgdmlkZW9FbGVtZW50LnNyYyA9IGZpbmRNZWRpYUZpbGUoInZpZGVv
IiwgIi4uLy4uLy4uL21lZGlhL2NvbnRlbnQvdGVzdCIpOwotICAgIDwvc2NyaXB0PgotPC9ib2R5
PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9wbHVnaW5z
L3N3Zi1hcy1zcmMtb2YtaWZyYW1lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L3BsdWdpbnMvc3dmLWFzLXNyYy1vZi1pZnJhbWUtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L3BsdWdpbnMvc3dmLWFzLXNyYy1vZi1pZnJhbWUtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xICswLDAgQEAKLVBBU1NFRApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
YmxhY2tiZXJyeS9wbHVnaW5zL3N3Zi1hcy1zcmMtb2YtaWZyYW1lLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9wbHVnaW5zL3N3Zi1hcy1zcmMtb2Yt
aWZyYW1lLmh0bWwJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Js
YWNrYmVycnkvcGx1Z2lucy9zd2YtYXMtc3JjLW9mLWlmcmFtZS5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQ2ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+VGVzdCB0aGF0IGlmcmFt
ZSB3aXRoIHNyYyBzZXQgdG8gc3dmIHVzZXMgcGx1Z2luIGRvY3VtZW50PC90aXRsZT4KLTwhLS0t
IFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUgIm1pc3NpbmcgcGx1Z2luIHRleHQiIGlzIHNob3du
IHdoZW4gdGhlIEZsYXNoUGxheWVyIHBsdWdpbiBpcyBkaXNhYmxlZC4gLS0+Ci08c2NyaXB0Pgot
ZnVuY3Rpb24gcnVuVGVzdCgpIHsKLSAgZnJhbWVkb2N1bWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdmcmFtZScpLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7Ci0gIGlubmVyaHRtbCA9IGZy
YW1lZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5pbm5lckhUTUw7Ci0g
IGlmIChpbm5lcmh0bWxbMF0gPT09ICdDJykgewotICAgIC8vIFRoaXMgaXMgdGhlICdDJyBmcm9t
IHRoZSBBY3Rpb25TY3JpcHQgU1dDLiBUaGUgY29udGVudHMgYXJlIGJlaW5nCi0gICAgLy8gcmVu
ZGVyZWQgYXMgdGV4dC4gRmFpbCB0aGUgdGVzdC4KLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29uc29sZScpLnRleHRDb250ZW50ID0gIkZBSUxFRCBkdWUgdG8gcGx1Z2luIHJlbmRlcmVk
IGFzIGdpYmJlcmlzaCB0ZXh0IChQUjI5MzA5OCkuIjsKLSAgfSBlbHNlIHsKLSAgICB2YXIgZmxh
c2hwbGF5ZXJMb2FkZWQgPSBmYWxzZTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbmF2aWdhdG9yLnBs
dWdpbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgIGZvciAoaiA9IDA7IGogPCBuYXZpZ2F0b3IucGx1
Z2luc1tpXS5sZW5ndGg7ICsraikgewotICAgICAgICBpZiAobmF2aWdhdG9yLnBsdWdpbnNbaV1b
al0udHlwZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7Ci0gICAgICAgICAg
Zmxhc2hwbGF5ZXJMb2FkZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAg
IGlmIChmbGFzaHBsYXllckxvYWRlZCkgewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnNvbGUnKS50ZXh0Q29udGVudCA9ICJGQUlMRUQgZHVlIHRvIEZsYXNoUGxheWVyIHBsdWdp
biBlbmFibGVkLiBQbGVhc2UgZGlzYWJsZSBpdC4iOwotICAgIH0gZWxzZSBpZiAoZnJhbWVkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZW1iZWQnKVswXSl7Ci0gICAgICAvLyBUaGVyZSBp
cyBhbiBlbWJlZCBlbGVtZW50IGluc3RlYWQgb2YgZ2liYmVyaXNoIHRleHQuIFRoaXMgaXMgd2hh
dCB3ZQotICAgICAgLy8gd2FudCBhbmQgaW5kaWNhdGVzIHRoYXQgYSBwbHVnaW4gZG9jdW1lbnQg
d2FzIGNyZWF0ZWQgaW5zdGVhZCBvZiBhbgotICAgICAgLy8gSFRNTCBkb2N1bWVudC4KLSAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykudGV4dENvbnRlbnQgPSAiUEFTU0VE
IjsKLSAgICB9IGVsc2UgewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUn
KS50ZXh0Q29udGVudCA9ICJGQUlMRUQgZm9yIGFuIHVua25vd24gcmVzb24uIjsKLSAgICB9Ci0g
IH0KLQotfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+
Ci0KLTxpZnJhbWUgaWQ9ImZyYW1lIiBzcmM9Ii4uLy4uLy4uL3BsdWdpbnMvcmVzb3VyY2VzL3Np
bXBsZV9ibGFuay5zd2YiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj4KLTwvaWZyYW1lPgotCi08
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLTwvYm9keT4KLQotPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZFN0cmlu
Zy1tYXJrZXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ibGFja2JlcnJ5L2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLW1hcmtlcnMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLW1hcmtlcnMtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAgQEAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRG
b3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDAKLVBBU1MgaW50ZXJuYWxzLm1h
cmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAwCi1QQVNTIGlu
dGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMg
MAotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRt
YXRjaCIpIGlzIDEKLVBBU1MgImQiIGlzICJkIgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRG
b3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDMKLVBBU1MgImUiIGlzICJlIgot
UEFTUyAiZSIgaXMgImUiCi1QQVNTICJlIiBpcyAiZSIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNv
dW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICJmIiBpcyAi
ZiIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0
bWF0Y2giKSBpcyAxCi1QQVNTICJUIiBpcyAiVCIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50
Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAwCi1QQVNTIGludGVybmFscy5t
YXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMAotUEFTUyBp
bnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlz
IDEKLVBBU1MgIngiIGlzICJ4IgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUu
Zmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEKLVBBU1MgInkiIGlzICJ5IgotUEFTUyBpbnRl
cm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEK
LVBBU1MgInoiIGlzICJ6IgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmly
c3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEKLVBBU1MgIi4iIGlzICIuIgotUEFTUyBpbnRlcm5h
bHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEKLVBB
U1MgImEiIGlzICJhIgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RD
aGlsZCwgInRleHRtYXRjaCIpIGlzIDEKLVBBU1MgImIiIGlzICJiIgotUEFTUyBpbnRlcm5hbHMu
bWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEKLVBBU1Mg
ImMiIGlzICJjIgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGls
ZCwgInRleHRtYXRjaCIpIGlzIDEKLVBBU1MgImQiIGlzICJkIgotUEFTUyBpbnRlcm5hbHMubWFy
a2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDMKLVBBU1MgImUi
IGlzICJlIgotUEFTUyAiZSIgaXMgImUiCi1QQVNTICJlIiBpcyAiZSIKLVBBU1MgaW50ZXJuYWxz
Lm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNT
ICJmIiBpcyAiZiIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hp
bGQsICJ0ZXh0bWF0Y2giKSBpcyAyCi1QQVNTICJUIiBpcyAiVCIKLVBBU1MgInQiIGlzICJ0Igot
UEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRj
aCIpIGlzIDIKLVBBU1MgInUiIGlzICJ1IgotUEFTUyAidSIgaXMgInUiCi1QQVNTIGludGVybmFs
cy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFT
UyAidiIgaXMgInYiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENo
aWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAieCIgaXMgIngiCi1QQVNTIGludGVybmFscy5t
YXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAi
eSIgaXMgInkiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxk
LCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAieiIgaXMgInoiCi1QQVNTIGludGVybmFscy5tYXJr
ZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAiLiIg
aXMgIi4iCi1UaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nLgpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9lZGl0aW5nL3RleHQtaXRlcmF0b3Iv
ZmluZFN0cmluZy1tYXJrZXJzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vYmxhY2tiZXJyeS9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZFN0cmluZy1tYXJrZXJzLmh0
bWwJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkv
ZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJpbmctbWFya2Vycy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEwMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08
c3R5bGU+Ci0ucGxhaW50ZXh0IHsKLSAgICBib3JkZXI6IDJweCBzb2xpZCByZWQ7Ci0gICAgcGFk
ZGluZzogMTJweDsKLSAgICBmb250LXNpemU6IDI0cHg7Ci19Ci08L3N0eWxlPgotPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hl
YWQ+Ci08Ym9keT4KLTxwcmUgaWQ9ImRlc2NyaXB0aW9uIj48L3ByZT4KLTxwcmUgaWQ9ImNvbnNv
bGUiPjwvcHJlPgotPGRpdiBpZD0iY29udGFpbmVyIj4KLTwvZGl2PgotCi08c2NyaXB0PgotCi1p
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKLSAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLSAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLX0KLQotZnVuY3Rpb24gY3JlYXRlUGxhaW5U
ZXh0RWxlbWVudChpZCwgdGV4dCwgcGFyZW50KSB7Ci0gICAgdmFyIGUgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKLSAgICBlLmNsYXNzTmFtZSA9ICdwbGFpbnRleHQnOwotICAgIGUu
aWQgPSBpZDsKLSAgICBlLmlubmVyVGV4dCA9IHRleHQ7Ci0KLSAgICBwYXJlbnQuYXBwZW5kQ2hp
bGQoZSk7Ci0gICAgcmV0dXJuIGU7Ci19Ci0KLWZ1bmN0aW9uIG9jY3VycmVuY2VzKHN0cmluZywg
c3Vic3RyaW5nLCBjYXNlU2Vuc2l0aXZlKSB7Ci0gICAgdmFyIG49MDsKLSAgICB2YXIgcG9zPTA7
Ci0KLSAgICB2YXIgaGF5c3RhY2sgPSBjYXNlU2Vuc2l0aXZlID8gc3RyaW5nIDogc3RyaW5nLnRv
TG93ZXJDYXNlKCk7Ci0gICAgdmFyIG5lZWRsZSA9IGNhc2VTZW5zaXRpdmUgPyBzdWJzdHJpbmcg
OiBzdWJzdHJpbmcudG9Mb3dlckNhc2UoKTsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IHBvcyA9IGhheXN0YWNrLmluZGV4T2YobmVlZGxlLHBvcyk7Ci0gICAgICAgIGlmIChwb3MhPS0x
KSB7Ci0gICAgICAgICAgICArK247Ci0gICAgICAgICAgICBwb3MrPW5lZWRsZS5sZW5ndGg7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBuOwot
fQotCi1mdW5jdGlvbiBjaGVja1RleHRNYXRjaE1hcmtlcihpbmRleCwgZmluZE9wdGlvbnMpIHsK
LSAgICBpZiAoaW5kZXggPiAxMikgewotICAgICAgICBpZiAoZmluZE9wdGlvbnMubGVuZ3RoID09
IDApIHsKLSAgICAgICAgICAgIGluZGV4ID0gMDsKLSAgICAgICAgICAgIGZpbmRPcHRpb25zLnB1
c2goIkNhc2VJbnNlbnNpdGl2ZSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgdmFyIHN0ciA9ICdBQkNkZWZUVVZ4eXouJzsKLSAgICB2YXIgY2hhciA9IHN0ci5j
aGFyQXQoaW5kZXgpOwotICAgIHZhciBjYXNlU2Vuc2l0aXZlID0gZmluZE9wdGlvbnMuaW5kZXhP
ZigiQ2FzZUluc2Vuc2l0aXZlIikgPT0gLTE7Ci0gICAgdGVzdFJ1bm5lci5maW5kU3RyaW5nKGNo
YXIsIGZpbmRPcHRpb25zKTsKLSAgICAvLyBTdGFydCB0aGUgZnVuY3Rpb24gbGF0ZXIgdG8gYWxs
b3cgbWFya2luZyBwcm9jZXNzIHRvIGZpbmlzaC4KLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
ewotICAgICAgICB2YXIgY291bnQgPSBvY2N1cnJlbmNlcyh0ZXh0LCBjaGFyLCBjYXNlU2Vuc2l0
aXZlKTsKLQotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIG1hcmtlcnMgc2hvdWxkIG1hdGNoIHRv
IHRoZSBvY2N1cnJlbmNlcyBvZiB0aGUgY2hhcmFjdG9yLgotICAgICAgICBzaG91bGRCZSgnaW50
ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKScsIGNv
dW50LnRvU3RyaW5nKCkpOwotICAgICAgICB2YXIgc2VhcmNoU3RhcnRJbmRleCA9IDA7Ci0gICAg
ICAgIC8vIEdldCB0aGUgY2hhciBmcm9tIHRleHQgYW5kIGNvbXBhcmUgd2l0aCB0aGUgbWFya2Vy
IHJhbmdlIGNvbnRlbnQuCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQgOyArK2kp
IHsKLSAgICAgICAgICAgIHZhciByYW5nZSA9IGludGVybmFscy5tYXJrZXJSYW5nZUZvck5vZGUo
ZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIiwgaSk7Ci0gICAgICAgICAgICB2YXIgcG9zID0gY2Fz
ZVNlbnNpdGl2ZSA/IHRleHQuaW5kZXhPZihjaGFyLCBzZWFyY2hTdGFydEluZGV4KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhP
ZihjaGFyLnRvTG93ZXJDYXNlKCksIHNlYXJjaFN0YXJ0SW5kZXgpOwotICAgICAgICAgICAgc2Vh
cmNoU3RhcnRJbmRleCA9IHBvcyArIDE7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0U3RyID0gdGV4
dC5jaGFyQXQocG9zKTsKLSAgICAgICAgICAgIHNob3VsZEJlKCciJyArIHJhbmdlICsgJyInLCAn
IicgKyBleHBlY3RTdHIgKyAnIicpOwotICAgICAgICB9Ci0gICAgICAgIGNoZWNrVGV4dE1hdGNo
TWFya2VyKGluZGV4ICsgMSwgZmluZE9wdGlvbnMpOwotICAgIH0sIDg1MCk7Ci19Ci0KLXZhciBj
b250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7Ci0KLXZhciBp
ZCA9ICdpZDEnCi12YXIgdGV4dCA9ICdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhl
IGxhenkgZG9nLic7Ci12YXIgZSA9IGNyZWF0ZVBsYWluVGV4dEVsZW1lbnQoaWQsIHRleHQsIGNv
bnRhaW5lcik7Ci0KLWlmICh3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy50ZXN0UnVubmVyKQot
ICAgIGNoZWNrVGV4dE1hdGNoTWFya2VyKDAsIFtdKTsKLQotdmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZXh0ZXJuYWwvc2VhcmNoLXByb3ZpZGVyL3NlYXJj
aC1wcm92aWRlci1pbnN0YWxsZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZXh0ZXJuYWwvc2VhcmNoLXByb3ZpZGVyL3NlYXJjaC1w
cm92aWRlci1pbnN0YWxsZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2V4dGVybmFsL3NlYXJjaC1wcm92aWRlci9zZWFy
Y2gtcHJvdmlkZXItaW5zdGFsbGVkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICswLDAgQEAKLVRlc3QgaWYgd2luZG93LmV4dGVybmFsIHNlYXJjaCBjb21wb25lbnRzIGFyZSBz
dXBwb3J0ZWQsIGFuZCBpZiBpdCB3b3Jrcy4KLVBBU1MgJ3dpbmRvdy5leHRlcm5hbCBBZGRTZWFy
Y2hQcm92aWRlciBpcyBjYWxsYWJsZS4KLVBBU1MgJ3dpbmRvdy5leHRlcm5hbCBJc1NlYXJjaFBy
b3ZpZGVySW5zdGFsbGVkIGlzIGNhbGxhYmxlLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
YmxhY2tiZXJyeS9leHRlcm5hbC9zZWFyY2gtcHJvdmlkZXIvc2VhcmNoLXByb3ZpZGVyLWluc3Rh
bGxlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkv
ZXh0ZXJuYWwvc2VhcmNoLXByb3ZpZGVyL3NlYXJjaC1wcm92aWRlci1pbnN0YWxsZWQuaHRtbAko
cmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9leHRl
cm5hbC9zZWFyY2gtcHJvdmlkZXIvc2VhcmNoLXByb3ZpZGVyLWluc3RhbGxlZC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM3ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVx
dWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08
dGl0bGU+YWRkLXNlYXJjaC1wcm92aWRlcjwvdGl0bGU+Ci08c2NyaXB0IHNyYz0iLi4vLi4vLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj4KLTwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSd0
ZXh0L2phdmFzY3JpcHQnPgotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7Ci19Ci0KLWZ1bmN0aW9uIHN0YXJ0VGVzdCgpCi17Ci0gICAg
dHJ5IHsKLSAgICAgICAgd2luZG93LmV4dGVybmFsLkFkZFNlYXJjaFByb3ZpZGVyKCJodHRwOi8v
d3d3LnNlYXJjaC5jb20iKTsKLSAgICAgICAgdGVzdFBhc3NlZCgiJ3dpbmRvdy5leHRlcm5hbCBB
ZGRTZWFyY2hQcm92aWRlciBpcyBjYWxsYWJsZS4iKTsKLSAgICB9IGNhdGNoIChleCkgewotICAg
ICAgICB0ZXN0RmFpbGVkKCJHb3QgYW4gZXhjZXB0aW9uIHdoZW4gY2FsbGluZyB3aW5kb3cuZXh0
ZXJuYWwuQWRkU2VhcmNoUHJvdmlkZXIodXJsKTogIiArIGV4KTsKLSAgICB9Ci0KLSAgICB0cnkg
ewotICAgICAgICB3aW5kb3cuZXh0ZXJuYWwuSXNTZWFyY2hQcm92aWRlckluc3RhbGxlZCgiaHR0
cDovL3d3dy5zZWFyY2guY29tIik7Ci0gICAgICAgIHRlc3RQYXNzZWQoIicnd2luZG93LmV4dGVy
bmFsIElzU2VhcmNoUHJvdmlkZXJJbnN0YWxsZWQgaXMgY2FsbGFibGUuIik7Ci0gICAgfSBjYXRj
aCAoZXgpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiR290IGFuIGV4Y2VwdGlvbiB3aGVuIGNhbGxp
bmcgd2luZG93LmV4dGVybmFsLklzU2VhcmNoUHJvdmlkZXJJbnN0YWxsZWQodXJsKTogIiArIGV4
KTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsgc3RhcnRUZXN0KCk7IGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTt9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxi
b2R5IG9ubG9hZD0ibG9hZENvbXBsZXRlKCkiPgotPGRpdiBpZD0iZGVzY3JpcHRpb24iPlRlc3Qg
aWYgd2luZG93LmV4dGVybmFsIHNlYXJjaCBjb21wb25lbnRzIGFyZSBzdXBwb3J0ZWQsIGFuZCBp
ZiBpdCB3b3Jrcy48L2Rpdj4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotPC9ib2R5PgotPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93
ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1leHBlY3RlZC5wbmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0LWNh
bnZhcy1leHBlY3RlZC5wbmcJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtZXhwZWN0
ZWQucG5nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzAsMCBAQAotiVBORw0KLRoKLQAAAA1JSERS
AAADIAAAAlgIAgAAABUUFScAAAApdEVYdGNoZWNrc3VtAGVkMDkwODczZjllZjc3OWYxMjI3Y2Y2
N2FkOTJmZGVjt/h+9AAADS9JREFUeJzt3FlqHkcARlEpeEUmC8wCTbakvBiHOBr+4XZ3Dee8Ci1E
dZUeLp/Br29vby8AAHT+uPoAAACrEVgAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQ+/bRD15fX888
Bxvyf7ABsCoLFgBA7MMF66e/zjgE2/nr6gMAwJEsWAAAMYEFABATWAAAMYEFABATWAAAMYEFABAT
WAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAA
MYEFABATWI0f319+fL/6EADAGAQWAEBMYAV+bVdGLADgRWABAOQE1rN+W62MWACAwAIAiAmsp7y7
VxmxAGBzAgsAICawHvfJUmXEAoCdCSwAgJjAetCXG5URCwC2JbAAAGIC6xE3rlNGLADYk8ACAIgJ
rLvdtUsZsQBgQwILACAmsO7zwCJlxAKA3QgsAICYwLrDw1uUEQsAtiKwAABiAutWT65QRiwA2IfA
AgCICaybJPuTEQsANiGwAABiAutr4fJkxAKAHQgsAICYwPpCvjkZsQBgeQILACAmsD5z0NpkxAKA
tQksAICYwPrQoTuTEQsAFiawAABiAut9JyxMRiwAWJXAAgCICax3nLYtGbEAYEkCCwAgJrB+d/Kq
ZMQCgPUILACAmMD6j0v2JCMWACxGYAEAxATWvy5ckoxYALASgQUAEBNYP12+IV1+AACgIrAAAGIC
6+VlmPVokGMAAE8SWAAAMYE11m401GEAgMcILACA2O6BNeBiNOCRAIC77B5YAAC5rQNr2K1o2IMB
ALfYOrAAAI6wb2ANvhINfjwA4BP7BhYAwEE2Dawp9qEpDgkA/N+mgQUAcJwdA2uiZWiiowIAv+wY
WAAAh9ousKbbhKY7MACwXWABABxtr8CadA2a9NgAsK29AgsA4AQbBdbUO9DUhweA3WwUWAAA59gl
sBZYgBb4BADYxC6BBQBwmi0Ca5ntZ5kPAYC1bRFYAABnWj+wFlt9FvscAFjS+oEFAHCyxQNryb1n
yY8CgJUsHlgAAOdbObAWXnoW/jQAWMDKgQUAcIllA2v5jWf5DwSAeS0bWAAAV1kzsDZZdzb5TACY
zpqBBQBwoQUDa6tdZ6uPBYBZLBhYAADXWi2wNlx0NvxkABjcaoEFAHC5pQJr2y1n2w8HgDEtFVgA
ACNYJ7A2X3E2/3wAGMo6gQUAMIhFAst+8+ISAGAYiwQWAMA4Vggsy80vrgIARrBCYAEADGX6wLLZ
/MaFAMDlpg8sAIDRzB1Y1pp3uRYAuNbcgQUAMKCJA8tO8wmXAwAXmjiwAADGNGtgWWi+5IoA4Cqz
BhYAwLCmDCzbzI1cFABcYsrAAgAY2XyBZZW5i+sCgPPNF1gAAIObLLDsMQ9waQBwsskCCwBgfDMF
liXmYa4OAM40U2ABAExhmsCywTzJBQLAaaYJLACAWcwRWNaXhGsEgHPMEVgAABOZILDsLiGXCQAn
mCCwAADmMnpgWVxyrhQAjjZ6YAEATGfowLK1HMTFAsChhg4sAIAZjRtYVpZDuV4AOM64gQUAMKlB
A8u+cgKXDAAHGTSwAADmNWJgWVZO46oB4AgjBhYAwNSGCyybyslcOADkhgssAIDZjRVY1pRLuHYA
aI0VWAAACxgosOwoF3L5ABAaKLAAANYwSmBZUC7nCQCgMkpgAQAsY4jAsp0MwkMAQGKIwAIAWMn1
gWU1GYrnAIDnXR9YAACLuTiw7CUD8igA8CQLFgBA7MrAspQMy9MAwDMsWAAAscsCy0YyOA8EAA+z
YAEAxK4JLOvIFDwTADzGggUAELsgsOwiE/FYAPAACxYAQOzswLKITMeTAcC9LFgAALFTA8sWMikP
BwB3sWABAMTOCywryNQ8HwDczoIFABA7KbDsHwvwiABwIwsWAEDsjMCyfCzDUwLALSxYAACxwwPL
5rEYDwotAF+yYAEAxI4NLGvHkjwrAHzOggUAEDswsOwcC/O4APCJb8f96j//Pu53AwCMyz8RAgDE
BBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYA
QExgAQDEBBYAQExgAQDEBBYAQExgAQDEXt/e3t7/wevryUdhNx/97QHA7CxYAACxDxcsAAAeY8EC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIj9A0vLtG3hHg5eAAAAAElFTkSuQmCCClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93
ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdl
YmtpdC1jYW52YXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzAsMCBAQAot
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi0gIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCi1sYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgUmVuZGVyQmxvY2sge0hUTUx9
IGF0ICgwLDApIHNpemUgODAweDYwMAotICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNp
emUgNzg0eDU4NAotICAgICAgUmVuZGVySW1hZ2Uge0RJVn0gYXQgKDAsMCkgc2l6ZSAyMDR4MjA0
IFtib3JkZXI6ICgycHggc29saWQgIzAwMDAwMCldCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJraXQtY2FudmFzLXJlcGFpbnQt
ZXhwZWN0ZWQucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVy
cnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtcmVwYWludC1leHBlY3RlZC5w
bmcJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkv
ZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtcmVwYWludC1leHBlY3RlZC5wbmcJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMCwwIEBACi2JUE5HDQotGgotAAAADUlIRFIAAAMgAAAC
WAgCAAAAFRQVJwAAACl0RVh0Y2hlY2tzdW0AZWQwOTA4NzNmOWVmNzc5ZjEyMjdjZjY3YWQ5MmZk
ZWO3+H70AAANL0lEQVR4nO3cWWoeRwBGUSl4RSYLzAJNtqS8GIc4Gv7hdncN57wKLUR1lR4un8Gv
b29vLwAAdP64+gAAAKsRWAAAMYEFABATWAAAMYEFABATWAAAMYEFABD79tEPXl9fzzwHG/J/sAGw
KgsWAEDswwXrp7/OOATb+evqAwDAkSxYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUA
EBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNY
jR/fX358v/oQAMAYBBYAQExgBX5tV0YsAOBFYAEA5ATWs35brYxYAIDAAgCICaynvLtXGbEAYHMC
CwAgJrAe98lSZcQCgJ0JLACAmMB60JcblRELALYlsAAAYgLrETeuU0YsANiTwAIAiAmsu921Sxmx
AGBDAgsAICaw7vPAImXEAoDdCCwAgJjAusPDW5QRCwC2IrAAAGIC61ZPrlBGLADYh8ACAIgJrJsk
+5MRCwA2IbAAAGIC62vh8mTEAoAdCCwAgJjA+kK+ORmxAGB5AgsAICawPnPQ2mTEAoC1CSwAgJjA
+tChO5MRCwAWJrAAAGIC630nLExGLABYlcACAIgJrHecti0ZsQBgSQILACAmsH538qpkxAKA9Qgs
AICYwPqPS/YkIxYALEZgAQDEBNa/LlySjFgAsBKBBQAQE1g/Xb4hXX4AAKAisAAAYgLr5WWY9WiQ
YwAATxJYAAAxgTXWbjTUYQCAxwgsAIDY7oE14GI04JEAgLvsHlgAALmtA2vYrWjYgwEAt9g6sAAA
jrBvYA2+Eg1+PADgE/sGFgDAQTYNrCn2oSkOCQD836aBBQBwnB0Da6JlaKKjAgC/7BhYAACH2i6w
ptuEpjswALBdYAEAHG2vwJp0DZr02ACwrb0CCwDgBBsF1tQ70NSHB4DdbBRYAADn2CWwFliAFvgE
ANjELoEFAHCaLQJrme1nmQ8BgLVtEVgAAGdaP7AWW30W+xwAWNL6gQUAcLLFA2vJvWfJjwKAlSwe
WAAA51s5sBZeehb+NABYwMqBBQBwiWUDa/mNZ/kPBIB5LRtYAABXWTOwNll3NvlMAJjOmoEFAHCh
BQNrq11nq48FgFksGFgAANdaLbA2XHQ2/GQAGNxqgQUAcLmlAmvbLWfbDweAMS0VWAAAI1gnsDZf
cTb/fAAYyjqBBQAwiEUCy37z4hIAYBiLBBYAwDhWCCzLzS+uAgBGsEJgAQAMZfrAstn8xoUAwOWm
DywAgNHMHVjWmne5FgC41tyBBQAwoIkDy07zCZcDABeaOLAAAMY0a2BZaL7kigDgKrMGFgDAsKYM
LNvMjVwUAFxiysACABjZfIFllbmL6wKA880XWAAAg5sssOwxD3BpAHCyyQILAGB8MwWWJeZhrg4A
zjRTYAEATGGawLLBPMkFAsBppgksAIBZzBFY1peEawSAc8wRWAAAE5kgsOwuIZcJACeYILAAAOYy
emBZXHKuFACONnpgAQBMZ+jAsrUcxMUCwKGGDiwAgBmNG1hWlkO5XgA4zriBBQAwqUEDy75yApcM
AAcZNLAAAOY1YmBZVk7jqgHgCCMGFgDA1IYLLJvKyVw4AOSGCywAgNmNFVjWlEu4dgBojRVYAAAL
GCiw7CgXcvkAEBoosAAA1jBKYFlQLucJAKAySmABACxjiMCynQzCQwBAYojAAgBYyfWBZTUZiucA
gOddH1gAAIu5OLDsJQPyKADwJAsWAEDsysCylAzL0wDAMyxYAACxywLLRjI4DwQAD7NgAQDErgks
68gUPBMAPMaCBQAQuyCw7CIT8VgA8AALFgBA7OzAsohMx5MBwL0sWAAAsVMDyxYyKQ8HAHexYAEA
xM4LLCvI1DwfANzOggUAEDspsOwfC/CIAHAjCxYAQOyMwLJ8LMNTAsAtLFgAALHDA8vmsRgPCi0A
X7JgAQDEjg0sa8eSPCsAfM6CBQAQOzCw7BwL87gA8Ilvx/3qP/8+7ncDAIzLPxECAMQEFgBATGAB
AMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQE
FgBATGABAMQEFgBATGABAMRe397e3v/B6+vJR2E3H/3tAcDsLFgAALEPFywAAB5jwQIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiP0DS8u0beEeDl4AAAAASUVORK5CYIIKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zh
c3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJraXQtY2FudmFzLXJlcGFpbnQtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMv
d2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtcmVwYWludC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2
MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2Vi
Z2wvY3NzLXdlYmtpdC1jYW52YXMtcmVwYWludC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMCwwIEBACi1sYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgUmVuZGVyVmll
dyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLWxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAotICBS
ZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi0gICAgUmVuZGVyQm9keSB7
Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0Ci0gICAgICBSZW5kZXJJbWFnZSB7RElWfSBhdCAo
MCwwKSBzaXplIDIwNHgyMDQgW2JvcmRlcjogKDJweCBzb2xpZCAjMDAwMDAwKV0KSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVt
ZW50cy1vdXQtb2YtYm91bmRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctZWxlbWVudHMtb3V0
LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQt
b2YtYm91bmRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMCwwIEBACi1Q
VlI6KEVycm9yKTogUFZSU1JWQWxsb2NEZXZpY2VNZW06IEVycm9yIDMgcmV0dXJuZWQgWzkyNSwg
L2JyaWRnZWRfcHZyX2dsdWUuY10KLVBWUjooRXJyb3IpOiBnbEJ1ZmZlckRhdGE6IENhbid0IGFs
bG9jYXRlIG1lbW9yeSBmb3Igb2JqZWN0IFs3ODYsIC9idWZvYmouY10KLVRlc3Qgb2YgZHJhd0Vs
ZW1lbnRzIHdpdGggb3V0LW9mLWJvdW5kcyBwYXJhbWV0ZXJzCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KLQotVGVzdCBlbXB0eSBpbmRleCBidWZmZXIKLVBBU1MgY29udGV4dC5kcmF3RWxl
bWVudHMoY29udGV4dC5UUklBTkdMRVMsIDMsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2Vu
ZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4
dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDEwMDAwLCBjb250ZXh0LlVOU0lHTkVE
X0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04u
Ci1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAxMDAwMDAwMDAw
MDAwMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJy
b3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0
LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVj
dGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhj
b250ZXh0LlRSSUFOR0xFUywgMSwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQg
ZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdF
bGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkg
Z2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotRkFJTCBjb250ZXh0
LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05FRF9CWVRF
LCAwKSBleHBlY3RlZDogTk9fRVJST1IuIFdhcyBPVVRfT0ZfTUVNT1JZLgotUEFTUyBjb250ZXh0
LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllU
RSwgMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBj
b250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMSwgY29udGV4dC5VTlNJR05F
RF9CWVRFLCAtMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgot
Ci1UZXN0IGJ1ZmZlciB3aXRoIDMgYnl0ZSBpbmRleGVzCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1l
bnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVy
YXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1l
bnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBjb250ZXh0LlVOU0lHTkVEX0lOVCwgMCkgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX0VOVU0uCi1QQVNTIGNvbnRleHQuZHJhd0Vs
ZW1lbnRzKDB4MDAwOSwgMywgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhw
ZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfRU5VTS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMo
Y29udGV4dC5UUklBTkdMRVMsIDMsIGNvbnRleHQuVU5TSUdORURfQllURSwgMikgZ2VuZXJhdGVk
IGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5kcmF3
RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDEwMDAwLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUs
IDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNT
IGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAxMDAwMDAwMDAwMDAwMCwg
Y29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElO
VkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFO
R0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdM
IGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0
LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkgZ2VuZXJhdGVkIGV4cGVj
dGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhj
b250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllURSwgMSkgZ2VuZXJhdGVk
IGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0LmRyYXdFbGVt
ZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMSwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkgZ2Vu
ZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0LmRy
YXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCA0
KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmRy
YXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMHhmZmZmZmZmZiwgY29udGV4dC5VTlNJR05F
RF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCi1Q
QVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAweDdmZmZmZmZmLCBj
b250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5W
QUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5H
TEVTLCAweDdmZmZmZmZmLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDB4N2ZmZmZmZmYpIGdlbmVy
YXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQu
YnVmZmVyRGF0YShjb250ZXh0LkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAobmV3IFVpbnQ4QXJyYXko
WyAzLCAwLCAxLCAyIF0pKS5zdWJhcnJheSgxKSwgY29udGV4dC5TVEFUSUNfRFJBVykgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVu
dHMoY29udGV4dC5UUklBTkdMRVMsIDMsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5idWZmZXJTdWJE
YXRhKGNvbnRleHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG5ldyBVaW50OEFycmF5KFsgMywg
MCwgMV0pKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250
ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMywgY29udGV4dC5VTlNJR05FRF9C
WVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgot
UEFTUyBjb250ZXh0LmJ1ZmZlclN1YkRhdGEoY29udGV4dC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwg
MCwgKG5ldyBVaW50OEFycmF5KFsgMywgMCwgMSwgMiBdKSkuc3ViYXJyYXkoMSkpIGdlbmVyYXRl
ZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRz
KGNvbnRleHQuVFJJQU5HTEVTLCAzLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRl
ZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRz
KGNvbnRleHQuVFJJQU5HTEVTLCAwLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRl
ZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi0KLVRlc3QgYnVmZmVyIHdpdGggaW50ZXJs
ZWF2ZWQgKDMrMikgZmxvYXQgdmVjdG9ycwotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250
ZXh0LlRSSUFOR0xFUywgOSwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJhdGVkIGV4
cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29u
dGV4dC5UUklBTkdMRVMsIDksIGNvbnRleHQuRkxPQVQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBH
TCBlcnJvcjogSU5WQUxJRF9FTlVNLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0
LlRSSUFOR0xFUywgOSwgY29udGV4dC5TSE9SVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVy
cm9yOiBJTlZBTElEX0VOVU0uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJ
QU5HTEVTLCA5LCBjb250ZXh0LlVOU0lHTkVEX0lOVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdM
IGVycm9yOiBJTlZBTElEX0VOVU0uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQu
VFJJQU5HTEVTLCA5LCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAxMDAwKSBnZW5lcmF0ZWQgZXhw
ZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVt
ZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMTIsIGNvbnRleHQuVU5TSUdORURfU0hPUlQsIDApIGdl
bmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRl
eHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAxNSwgY29udGV4dC5VTlNJR05FRF9T
SE9SVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4K
LVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDE4LCBjb250ZXh0
LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURf
T1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywg
MywgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMioxNSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVy
cm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4
dC5UUklBTkdMRVMsIDB4ZmZmZmZmZmYsIGNvbnRleHQuVU5TSUdORURfU0hPUlQsIDApIGdlbmVy
YXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KLVBBU1MgY29udGV4dC5kcmF3
RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDB4N2ZmZmZmZmYsIGNvbnRleHQuVU5TSUdORURf
U0hPUlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04u
Ci1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCBjb250ZXh0
LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9S
LgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgNiwgY29udGV4
dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJP
Ui4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDYsIGNvbnRl
eHQuVU5TSUdORURfU0hPUlQsIDEpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJ
RF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVT
LCA2LCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAyKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJy
b3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xF
UywgNiwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVy
cm9yOiBJTlZBTElEX09QRVJBVElPTi4KLQotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQotCi1URVNUIENPTVBMRVRFCi0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVy
cnkvZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItb2JqZWN0LWF0dGFjaG1lbnQtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFz
dC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItb2JqZWN0LWF0dGFjaG1lbnQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zh
c3QvY2FudmFzL3dlYmdsL2ZyYW1lYnVmZmVyLW9iamVjdC1hdHRhY2htZW50LWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSw2MTIgKzAsMCBAQAotVGVzdCBmcmFtZWJ1ZmZlciBvYmpl
Y3QgYXR0YWNobWVudCBiZWhhdmlvcnMKLQotT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi0K
LURpbWVuc2lvbnMgMCB4IDAKLUNyZWF0ZSByZW5kZXJidWZmZXJzCi1QQVNTIGdsID0gY3JlYXRl
M0RDb250ZXh0KCkgaXMgbm9uLW51bGwuCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVu
ZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIo
KSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IAotUEFTUyBzdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLUF0dGFj
aCBkZXB0aCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1l
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGggdXNp
bmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkg
aXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJu
ZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGggdXNpbmcgREVQVEhf
U1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQg
MzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggc3RlbmNpbCB1c2luZyBTVEVOQ0lM
X0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVs
bC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBn
bC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIERFUFRIX0FUVEFDSE1F
TlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDog
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVO
VAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAK
LVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
IDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgREVQVEhfQVRUQUNITUVO
VAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAK
LVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQK
LVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04gOiAKLUF0dGFjaCBkZXB0aCwgdGhlbiBzdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1Q
QVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIHN0ZW5jaWwsIHRoZW4gZGVw
dGgsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1B
dHRhY2ggZGVwdGgsIHRoZW4gZGVwdGhTdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZi
byA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZS
QU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhlbiBkZXB0
aCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wu
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0
dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoU3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5G
UkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBkZXB0aFN0ZW5jaWwsIHRoZW4gc3Rl
bmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigp
IGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
Z2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQK
LUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0JBNAot
UEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1B
dHRhY2ggY29sb3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNV9BMQot
UEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1B
dHRhY2ggY29sb3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNTY1Ci1Q
QVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0g
Z2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUNy
ZWF0ZSBhbmQgYXR0YWNoIGRlcHRoU3RlbmNpbCByZW5kZXJidWZmZXIKLVBBU1MgZGVwdGhTdGVu
Y2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX1dJRFRIKSBp
cyB3aWR0aAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVS
LCBnbC5SRU5ERVJCVUZGRVJfSEVJR0hUKSBpcyBoZWlnaHQKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZP
Uk1BVCkgaXMgZ2wuREVQVEhfU1RFTkNJTAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfUkVEX1NJWkUpIGlzIDAKLVBBU1Mg
Z2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVG
RkVSX0dSRUVOX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGds
LlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0JMVUVfU0laRSkgaXMgMAotUEFTUyBnbC5n
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJf
QUxQSEFfU0laRSkgaXMgMAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogCi0KLURpbWVuc2lvbnMgMCB4IDIKLUNyZWF0ZSByZW5kZXJidWZmZXJz
Ci1QQVNTIGdsID0gY3JlYXRlM0RDb250ZXh0KCkgaXMgbm9uLW51bGwuCi1QQVNTIGNvbG9yQnVm
ZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhCdWZmZXIgPSBnbC5j
cmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBzdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVu
ZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVy
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZi
byA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDog
Ci1BdHRhY2ggZGVwdGggdXNpbmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNy
ZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5G
UkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2gg
ZGVwdGggdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggc3Rl
bmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVz
aW5nIERFUFRIX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5l
ZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIERFUFRI
X1NURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
Ci1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVk
IDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBE
RVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIo
KSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1
cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNp
bmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
Ci1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVk
IDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBT
VEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBu
b24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAot
UEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAz
NjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCwgdGhlbiBzdGVuY2lsLCBj
YXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNo
IHN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3Jl
YXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIp
IHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggZGVwdGgsIHRoZW4gZGVwdGhTdGVuY2lsLCBjYXVzaW5n
IGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwu
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIGRlcHRo
U3RlbmNpbCwgdGhlbiBkZXB0aCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVh
dGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikg
cmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoU3RlbmNpbCwgY2F1c2lu
ZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBkZXB0
aFN0ZW5jaWwsIHRoZW4gc3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5h
bGZvcm1hdCA9PSBSR0JBNAotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggY29sb3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxm
b3JtYXQgPT0gUkdCNV9BMQotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggY29sb3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxm
b3JtYXQgPT0gUkdCNTY1Ci1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVy
KCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
IDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04gOiAKLUNyZWF0ZSBhbmQgYXR0YWNoIGRlcHRoU3RlbmNpbCByZW5kZXJidWZm
ZXIKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVO
REVSQlVGRkVSX1dJRFRIKSBpcyB3aWR0aAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUKSBpcyBn
bC5ERVBUSF9TVEVOQ0lMCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5E
RVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9SRURfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfR1JFRU5f
U0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVG
RkVSLCBnbC5SRU5ERVJCVUZGRVJfQkxVRV9TSVpFKSBpcyAwCi1QQVNTIGdsLmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpF
KSBpcyAwCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiAKLQotRGltZW5zaW9ucyAyIHggMAotQ3JlYXRlIHJlbmRlcmJ1ZmZlcnMKLVBBU1MgZ2wg
PSBjcmVhdGUzRENvbnRleHQoKSBpcyBub24tbnVsbC4KLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5j
cmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBkZXB0aEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIHN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIo
KSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IAotUEFTUyBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotQXR0YWNoIGRlcHRoIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3Jl
YXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZS
QU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBk
ZXB0aCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCB1c2lu
ZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBy
ZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5n
IFNURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
Ci1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVk
IDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIHN0ZW5jaWwgdXNpbmcgREVQVEhf
QVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIHN0ZW5jaWwgdXNpbmcgREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwu
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wu
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGhTdGVuY2lsIHVzaW5nIERFUFRIX1NURU5D
SUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1u
dWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNT
IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBERVBUSF9B
VFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwu
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wu
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGhTdGVuY2lsIHVzaW5nIFNURU5DSUxfQVRU
QUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoLCB0aGVuIHN0ZW5jaWwsIGNhdXNpbmcgY29u
ZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggc3RlbmNpbCwg
dGhlbiBkZXB0aCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1
ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQg
MzYwNTQKLUF0dGFjaCBkZXB0aCwgdGhlbiBkZXB0aFN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QK
LVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggZGVwdGhTdGVuY2lsLCB0
aGVuIGRlcHRoLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAot
UEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAz
NjA1NAotQXR0YWNoIHN0ZW5jaWwsIHRoZW4gZGVwdGhTdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0
Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIGRlcHRoU3RlbmNpbCwg
dGhlbiBzdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1l
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5l
ZCAzNjA1NAotQXR0YWNoIGNvbG9yIHJlbmRlcmJ1ZmZlciB3aXRoIGludGVybmFsZm9ybWF0ID09
IFJHQkE0Ci1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiAKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBS
R0I1X0ExCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiAKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBS
R0I1NjUKLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiA6IAotQ3JlYXRlIGFuZCBhdHRhY2ggZGVwdGhTdGVuY2lsIHJlbmRlcmJ1ZmZlcgotUEFTUyBk
ZXB0aFN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4K
LVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5n
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJf
SEVJR0hUKSBpcyBoZWlnaHQKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJF
TkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCkgaXMgZ2wuREVQVEhf
U1RFTkNJTAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVS
LCBnbC5SRU5ERVJCVUZGRVJfUkVEX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUpIGlz
IDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wu
UkVOREVSQlVGRkVSX0JMVUVfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfQUxQSEFfU0laRSkgaXMgMAot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi0K
LURpbWVuc2lvbnMgMiB4IDIKLUNyZWF0ZSByZW5kZXJidWZmZXJzCi1QQVNTIGdsID0gY3JlYXRl
M0RDb250ZXh0KCkgaXMgbm9uLW51bGwuCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVu
ZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIo
KSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IAotUEFTUyBzdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLUF0dGFj
aCBkZXB0aCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1l
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgcmV0dXJuZWQgMzYwNTMKLUF0dGFjaCBkZXB0aCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQK
LVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04gOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBB
U1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIFNURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8g
PSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDUzCi1BdHRhY2ggc3RlbmNpbCB1c2luZyBE
RVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYw
NTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggc3RlbmNpbCB1c2luZyBERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1
NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgREVQVEhf
U1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQg
MzYwNTMKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJv
ID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAK
LUF0dGFjaCBkZXB0aCwgdGhlbiBzdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSByZXR1cm5lZCAzNjA2MQotQXR0YWNoIHN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNp
bmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVs
bC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDYxCi1BdHRhY2ggZGVw
dGgsIHRoZW4gZGVwdGhTdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNy
ZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KSByZXR1cm5lZCAzNjA2MQotQXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhlbiBkZXB0aCwgY2F1c2lu
ZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNjEKLUF0dGFjaCBzdGVu
Y2lsLCB0aGVuIGRlcHRoU3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgcmV0dXJuZWQgMzYwNjEKLUF0dGFjaCBkZXB0aFN0ZW5jaWwsIHRoZW4gc3RlbmNpbCwgY2F1
c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1u
dWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNjEKLUF0dGFjaCBj
b2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0JBNAotUEFTUyBjb2xv
ckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgcmV0dXJuZWQgMzYwNTMKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBp
bnRlcm5hbGZvcm1hdCA9PSBSR0I1X0ExCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVu
ZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1
MwotQXR0YWNoIGNvbG9yIHJlbmRlcmJ1ZmZlciB3aXRoIGludGVybmFsZm9ybWF0ID09IFJHQjU2
NQotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZi
byA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTMKLUNyZWF0ZSBhbmQgYXR0YWNoIGRl
cHRoU3RlbmNpbCByZW5kZXJidWZmZXIKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3Jl
YXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGds
LlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX1dJRFRIKSBpcyB3aWR0aAotUEFTUyBnbC5n
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJf
SEVJR0hUKSBpcyBoZWlnaHQKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJF
TkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCkgaXMgZ2wuREVQVEhf
U1RFTkNJTAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVS
LCBnbC5SRU5ERVJCVUZGRVJfUkVEX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUpIGlz
IDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wu
UkVOREVSQlVGRkVSX0JMVUVfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfQUxQSEFfU0laRSkgaXMgMAot
UEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5E
RVJCVUZGRVJfREVQVEhfU0laRSkgPiAwIGlzIHRydWUKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSkg
PiAwIGlzIHRydWUKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDUzCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGNvbG9yQnVmZmVyID0g
Z2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGRlcHRoQnVmZmVyID0g
Z2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLQotQXR0YWNobWVudHMgb2YgZGlmZmVyZW50IHNp
emVzIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgKE9wZW5HTCBF
UyAyLjAgNC40LjUpCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGRlcHRoQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
Z2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1F
QlVGRkVSX0NPTVBMRVRFIHdhcyBGUkFNRUJVRkZFUl9DT01QTEVURQotUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9ESU1FTlNJT05TIHdhcyBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMg
b3IgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0NPTVBMRVRFIHdhcyBGUkFN
RUJVRkZFUl9DT01QTEVURQotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIHdhcyBG
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgb3IgRlJBTUVCVUZGRVJfVU5TVVBQT1JU
RUQKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxk
IGJlIEZSQU1FQlVGRkVSX0NPTVBMRVRFIHdhcyBGUkFNRUJVRkZFUl9DT01QTEVURQotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElN
RU5TSU9OUyB3YXMgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIG9yIEZSQU1FQlVG
RkVSX1VOU1VQUE9SVEVECi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVC
VUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3YXMgRlJBTUVCVUZGRVJfQ09N
UExFVEUKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBjb2xvckJ1
ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJf
Q09NUExFVEUgd2FzIEZSQU1FQlVGRkVSX0NPTVBMRVRFCi0KLVdyb25nIHN0b3JhZ2UgdHlwZSBm
b3IgdHlwZSBvZiBhdHRhY2htZW50IGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VCAoT3BlbkdMIEVTIDIuMCA0LjQuNSkKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhn
bC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VCB3YXMgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIG9yIEZSQU1FQlVGRkVSX1VO
U1VQUE9SVEVECi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIp
IHNob3VsZCBiZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3YXMgRlJBTUVCVUZGRVJfQ09NUExFVEUK
LQotMCBzaXplIGF0dGFjaG1lbnQgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVCAoT3BlbkdMIEVTIDIuMCA0LjQuNSkKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVCB3YXMgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIG9yIEZSQU1FQlVG
RkVSX1VOU1VQUE9SVEVECi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiAKLQotTm8gYXR0YWNobWVudHMgc2hvdWxkIGJlIElOQ09NUExFVEVfRlJBTUVCVUZGRVJf
TUlTU0lOR19BVFRBQ0hNRU5UIChPcGVuR0wgRVMgMi4wIDQuNC41KQotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9N
SVNTSU5HX0FUVEFDSE1FTlQgd2FzIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRB
Q0hNRU5UIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wu
Y3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3
YXMgRlJBTUVCVUZGRVJfQ09NUExFVEUKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhn
bC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19B
VFRBQ0hNRU5UIHdhcyBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCBv
ciBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogCi0KLVRlc3QgZHJhd2luZyBvciByZWFkaW5nIGZyb20gYW4gaW5jb21w
bGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5v
bi1udWxsLgotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5v
bi1udWxsLgotUEFTUyBkZXB0aEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5v
bi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1Q
QVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBG
UkFNRUJVRkZFUl9DT01QTEVURSB3YXMgRlJBTUVCVUZGRVJfQ09NUExFVEUKLVBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfRElNRU5TSU9OUyB3YXMgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJ
T05TIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECi0KLURyYXdpbmcgb3IgcmVhZGluZyBmcm9t
IGFuIGluY29tcGxldGUgZnJhbWVidWZmZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiA6IGRyYXdBcnJheXMgd2l0aCBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04gOiByZWFkUGl4ZWxzIGZyb20gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDog
Y29weVRleEltYWdlMkQgZnJvbSBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBjb3B5
VGV4U3ViSW1hZ2UyRCBmcm9tIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IGNsZWFy
IHdpdGggaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBmYm8yID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5G
UkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRB
Q0hNRU5UIHdhcyBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCBvciBG
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRAotCi1EcmF3aW5nIG9yIHJlYWRpbmcgZnJvbSBhbiBpbmNv
bXBsZXRlIGZyYW1lYnVmZmVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04gOiBkcmF3QXJyYXlzIHdpdGggaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDog
cmVhZFBpeGVscyBmcm9tIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6IGNvcHlUZXhJbWFnZTJEIGZyb20g
aW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfT1BFUkFUSU9OIDogY29weVRleFN1YkltYWdlMkQgZnJvbSBpbmNvbXBsZXRlIGZy
YW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04gOiBjbGVhciB3aXRoIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBB
U1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLQot
RHJhd2luZyBvciByZWFkaW5nIGZyb20gYW4gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlciBzaG91bGQg
Z2VuZXJhdGUgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04KLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogZHJhd0FycmF5cyB3aXRoIGlu
Y29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IHJlYWRQaXhlbHMgZnJvbSBpbmNvbXBsZXRl
IGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04gOiBjb3B5VGV4SW1hZ2UyRCBmcm9tIGluY29tcGxldGUgZnJh
bWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiA6IGNvcHlUZXhTdWJJbWFnZTJEIGZyb20gaW5jb21wbGV0ZSBmcmFt
ZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OIDogY2xlYXIgd2l0aCBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1zL2RhdGFsaXN0L2lucHV0LWxp
c3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNr
YmVycnkvZmFzdC9mb3Jtcy9kYXRhbGlzdC9pbnB1dC1saXN0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1z
L2RhdGFsaXN0L2lucHV0LWxpc3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1
ICswLDAgQEAKLVRlc3QgZm9yIHRoZSBsaXN0IGF0dHJpYnV0ZS4KLQotT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgotCi0KLVBBU1MgaW5wdXQubGlzdCBpcyBudWxsCi1QQVNTIGlucHV0Lmxpc3Qg
aXMgbnVsbAotUEFTUyBpbnB1dC5saXN0IGlzIG51bGwKLVBBU1MgZGF0YWxpc3QuY2xhc3NOYW1l
IGlzICJmb3JtZXIiCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0IikubGlzdCBp
cyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGwxIikKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInNlYXJjaCIpLmxpc3QgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRsMSIpCi1Q
QVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmwiKS5saXN0IGlzIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJkbDEiKQotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVsZXBob25l
IikubGlzdCBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGwxIikKLVBBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImVtYWlsIikubGlzdCBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
ZGwxIikKLUZBSUwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhdGV0aW1lIikubGlzdCBzaG91
bGQgYmUgW29iamVjdCBIVE1MRGF0YUxpc3RFbGVtZW50XS4gV2FzIG51bGwuCi1GQUlMIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJkYXRlIikubGlzdCBzaG91bGQgYmUgW29iamVjdCBIVE1MRGF0
YUxpc3RFbGVtZW50XS4gV2FzIG51bGwuCi1GQUlMIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJt
b250aCIpLmxpc3Qgc2hvdWxkIGJlIFtvYmplY3QgSFRNTERhdGFMaXN0RWxlbWVudF0uIFdhcyBu
dWxsLgotRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid2VlayIpLmxpc3Qgc2hvdWxkIGJl
IFtvYmplY3QgSFRNTERhdGFMaXN0RWxlbWVudF0uIFdhcyBudWxsLgotRkFJTCBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidGltZSIpLmxpc3Qgc2hvdWxkIGJlIFtvYmplY3QgSFRNTERhdGFMaXN0
RWxlbWVudF0uIFdhcyBudWxsLgotRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGF0ZXRp
bWUtbG9jYWwiKS5saXN0IHNob3VsZCBiZSBbb2JqZWN0IEhUTUxEYXRhTGlzdEVsZW1lbnRdLiBX
YXMgbnVsbC4KLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm51bWJlciIpLmxpc3QgaXMg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRsMSIpCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJyYW5nZSIpLmxpc3QgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRsMSIpCi1GQUlM
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2xvciIpLmxpc3Qgc2hvdWxkIGJlIFtvYmplY3Qg
SFRNTERhdGFMaXN0RWxlbWVudF0uIFdhcyBudWxsLgotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaGlkZGVuIikubGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJwYXNzd29yZCIpLmxpc3QgaXMgbnVsbAotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2hlY2tib3giKS5saXN0IGlzIG51bGwKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJh
ZGlvIikubGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlIiku
bGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdWJtaXQiKS5saXN0
IGlzIG51bGwKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltYWdlIikubGlzdCBpcyBu
dWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNldCIpLmxpc3QgaXMgbnVsbAot
UEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uIikubGlzdCBpcyBudWxsCi1QQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9mb3Jtcy9udW1iZXIvbnVtYmVyLXZhbGlk
YXRpb24tbWVzc2FnZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1zL251bWJlci9udW1iZXItdmFsaWRhdGlvbi1tZXNz
YWdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1zL251bWJlci9udW1iZXItdmFsaWRhdGlvbi1tZXNzYWdl
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwyMSArMCwwIEBACi1UZXN0IGZvciB2
YWxpZGF0aW9uTWVzc2FnZSBJREwgYXR0cmlidXRlIGZvciA8aW5wdXQgdHlwZT1udW1iZXI+Ci0K
LU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1ObyBtZXNzYWdlCi1QQVNTIHRlc3RJdCgi
IiwgIiIsICIiKSBpcyAiIgotVmFsdWUgbWlzc2luZwotRkFJTCB0ZXN0SXQoIiIsICIiLCAiIikg
c2hvdWxkIGJlIHZhbHVlIG1pc3NpbmcuIFdhcyBJbnB1dCB2YWx1ZSBtaXNzaW5nLgotVHlwZSBt
aXNtYXRjaAotUEFTUyB0ZXN0SXQoImZvbyIsICIiLCAiIikgaXMgIiIKLVJhbmdlIG92ZXJmbG93
Ci1GQUlMIHRlc3RJdCgiMjAwIiwgIiIsICIxMDAiKSBzaG91bGQgYmUgcmFuZ2Ugb3ZlcmZsb3cu
IFdhcyBWYWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAuCi1SYW5nZSB1bmRl
cmZsb3cKLUZBSUwgdGVzdEl0KCIxMCIsICI1MCIsICIxMDAiKSBzaG91bGQgYmUgcmFuZ2UgdW5k
ZXJmbG93LiBXYXMgVmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gNTAuCi1T
dGVwIG1pc21hdGNoCi1GQUlMIHRlc3RJdCgiNTUiLCAiMCIsICIxMDAiLCAiMTAiKSBzaG91bGQg
YmUgc3RlcCBtaXNtYXRjaC4gV2FzIFN0ZXAgbWlzbWF0Y2guCi1QQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vYmxhY2tiZXJyeS9mYXN0L21lZGlhL3czYy90ZXN0X21lZGlhX3F1ZXJpZXMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9t
ZWRpYS93M2MvdGVzdF9tZWRpYV9xdWVyaWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L21lZGlhL3czYy90ZXN0
X21lZGlhX3F1ZXJpZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMwNSArMCww
IEBACi0KLQotUEFTUyBxdWVyeSAob3JpZW50YXRpb24pIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIHF1ZXJ5IG5vdCAob3JpZW50YXRpb24pIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFT
UyBxdWVyeSBvbmx5IChvcmllbnRhdGlvbikgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNT
IHF1ZXJ5IGFsbCBhbmQgKG9yaWVudGF0aW9uKSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBx
dWVyeSBub3QgYWxsIGFuZCAob3JpZW50YXRpb24pIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNT
IHF1ZXJ5IG9ubHkgYWxsIGFuZCAob3JpZW50YXRpb24pIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIHF1ZXJ5IChvcmllbnRhdGlvbjogJ2xhbmRzY2FwZScpIHNob3VsZCBub3QgYmUgcGFyc2Vh
YmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4
cHJlc3Npb24gd2lkdGg6IDAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3
aWR0aDogMHB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gd2lkdGg6IDBl
bSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAtMCBzaG91bGQg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi13aWR0aDogLTAgc2hvdWxkIGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtd2lkdGg6IC0wIHNob3VsZCBiZSBwYXJzZWFi
bGUgCi1QQVNTIGV4cHJlc3Npb24gd2lkdGg6IC0wY20gc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBB
U1MgZXhwcmVzc2lvbiB3aWR0aDogMXB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJl
c3Npb24gd2lkdGg6IDAuMDAxbW0gc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biB3aWR0aDogMTAwMDAwcHggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3
aWR0aDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0
aDogJzIwcHgnIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi13
aWR0aDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgt
d2lkdGg6IC0xcHggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWlu
LXdpZHRoOiAnMTBweCcgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
bWF4LXdpZHRoOiAnMTBweCcgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gd2lkdGg6IC0wLjAwMDAxbW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJl
c3Npb24gd2lkdGg6IC0xMDAwMDBlbSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiBtaW4td2lkdGggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gbWF4LXdpZHRoIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhl
aWdodCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogMCBzaG91
bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogMHB4IHNob3VsZCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAwZW0gc2hvdWxkIGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IC0wIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gbWluLWhlaWdodDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiBtYXgtaGVpZ2h0OiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNz
aW9uIGhlaWdodDogLTBjbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhl
aWdodDogMXB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAw
LjAwMW1tIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAxMDAw
MDBweCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogLTFweCBz
aG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6ICcyMHB4JyBz
aG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4taGVpZ2h0OiAtMXB4
IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1oZWlnaHQ6IC0x
cHggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWhlaWdodDog
JzEwcHgnIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1oZWln
aHQ6ICcxMHB4JyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWln
aHQ6IC0wLjAwMDAxbW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
aGVpZ2h0OiAtMTAwMDAwZW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gbWluLWhlaWdodCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBt
YXgtaGVpZ2h0IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmlj
ZS13aWR0aCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0
aDogMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDog
MHB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAw
ZW0gc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IC0w
IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWRldmljZS13aWR0aDog
LTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtZGV2aWNlLXdpZHRo
OiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDog
LTBjbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDog
MXB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAw
LjAwMW1tIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRo
OiAxMDAwMDBweCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13
aWR0aDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZp
Y2Utd2lkdGg6ICcyMHB4JyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBtaW4tZGV2aWNlLXdpZHRoOiAtMXB4IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBl
eHByZXNzaW9uIG1heC1kZXZpY2Utd2lkdGg6IC0xcHggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gbWluLWRldmljZS13aWR0aDogJzEwcHgnIHNob3VsZCBub3QgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2Utd2lkdGg6ICcxMHB4JyBzaG91
bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IC0wLjAw
MDAxbW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdp
ZHRoOiAtMTAwMDAwZW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
bWluLWRldmljZS13aWR0aCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBtYXgtZGV2aWNlLXdpZHRoIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNz
aW9uIGRldmljZS1oZWlnaHQgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBk
ZXZpY2UtaGVpZ2h0OiAwIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2
aWNlLWhlaWdodDogMHB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2
aWNlLWhlaWdodDogMGVtIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2
aWNlLWhlaWdodDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4t
ZGV2aWNlLWhlaWdodDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBt
YXgtZGV2aWNlLWhlaWdodDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBkZXZpY2UtaGVpZ2h0OiAtMGNtIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gZGV2aWNlLWhlaWdodDogMXB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gZGV2aWNlLWhlaWdodDogMC4wMDFtbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHBy
ZXNzaW9uIGRldmljZS1oZWlnaHQ6IDEwMDAwMHB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gZGV2aWNlLWhlaWdodDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAnMjBweCcgc2hvdWxkIG5vdCBiZSBwYXJz
ZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWRldmljZS1oZWlnaHQ6IC0xcHggc2hvdWxkIG5v
dCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWRldmljZS1oZWlnaHQ6IC0xcHgg
c2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWRldmljZS1oZWln
aHQ6ICcxMHB4JyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgt
ZGV2aWNlLWhlaWdodDogJzEwcHgnIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHBy
ZXNzaW9uIGRldmljZS1oZWlnaHQ6IC0wLjAwMDAxbW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWhlaWdodDogLTEwMDAwMGVtIHNob3VsZCBub3QgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1kZXZpY2UtaGVpZ2h0IHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2UtaGVpZ2h0IHNob3VsZCBu
b3QgYmUgcGFyc2VhYmxlIAotUEFTUyBhbGwgYW5kICh3aWR0aDogd2lkdGggcHgpIHNob3VsZCBh
cHBseSAKLVBBU1MgYWxsIGFuZCAod2lkdGg6IHdpZHRoICsxIHB4KSBzaG91bGQgbm90IGFwcGx5
IAotUEFTUyBhbGwgYW5kICh3aWR0aDogd2lkdGggLTEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1Q
QVNTIGFsbCBhbmQgKG1pbi13aWR0aDogd2lkdGggcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxs
IGFuZCAobWluLXdpZHRoOiB3aWR0aCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxs
IGFuZCAobWluLXdpZHRoOiB3aWR0aCAtMSBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5k
IChtYXgtd2lkdGg6IHdpZHRoIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC13
aWR0aDogd2lkdGggKzEgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LXdpZHRo
OiB3aWR0aCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLXdpZHRo
OiB3aWR0aCArMSBlbSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLXdpZHRo
OiB3aWR0aCAtMSBlbSkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtd2lkdGg6IHdp
ZHRoICsxIGVtKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC13aWR0aDogd2lkdGgg
LTEgZW0pIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGhlaWdodDogaGVpZ2h0IHB4
KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGhlaWdodDogaGVpZ2h0ICsxIHB4KSBzaG91
bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChoZWlnaHQ6IGhlaWdodCAtMSBweCkgc2hvdWxk
IG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWhlaWdodDogaGVpZ2h0IHB4KSBzaG91bGQg
YXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1oZWlnaHQ6IGhlaWdodCArMSBweCkgc2hvdWxkIG5v
dCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWhlaWdodDogaGVpZ2h0IC0xIHB4KSBzaG91bGQg
YXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1oZWlnaHQ6IGhlaWdodCBweCkgc2hvdWxkIGFwcGx5
IAotUEFTUyBhbGwgYW5kIChtYXgtaGVpZ2h0OiBoZWlnaHQgKzEgcHgpIHNob3VsZCBhcHBseSAK
LVBBU1MgYWxsIGFuZCAobWF4LWhlaWdodDogaGVpZ2h0ICsxIHB4KSBzaG91bGQgbm90IGFwcGx5
IAotUEFTUyBhbGwgYW5kIChtaW4taGVpZ2h0OiBoZWlnaHQgKzEgZW0pIHNob3VsZCBub3QgYXBw
bHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1oZWlnaHQ6IGhlaWdodCAtMSBlbSkgc2hvdWxkIGFwcGx5
IAotUEFTUyBhbGwgYW5kIChtYXgtaGVpZ2h0OiBoZWlnaHQgKzEgZW0pIHNob3VsZCBhcHBseSAK
LVBBU1MgYWxsIGFuZCAobWF4LWhlaWdodDogaGVpZ2h0IC0xIGVtKSBzaG91bGQgbm90IGFwcGx5
IAotUEFTUyBhbGwgYW5kIChkZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCBweCkgc2hvdWxkIGFw
cGx5IAotUEFTUyBhbGwgYW5kIChkZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCArMSBweCkgc2hv
dWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGgg
LTEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6
IGRldmljZS13aWR0aCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4tZGV2aWNl
LXdpZHRoOiBkZXZpY2Utd2lkdGggKzEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKG1pbi1kZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCAtMSBweCkgc2hvdWxkIGFwcGx5IAot
UEFTUyBhbGwgYW5kIChtYXgtZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGggcHgpIHNob3VsZCBh
cHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoICsxIHB4
KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IGRldmljZS13
aWR0aCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmljZS13
aWR0aDogZGV2aWNlLXdpZHRoICsxIGVtKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5k
IChtaW4tZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGggLTEgZW0pIHNob3VsZCBhcHBseSAKLVBB
U1MgYWxsIGFuZCAobWF4LWRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoICsxIGVtKSBzaG91bGQg
YXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCAtMSBl
bSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLWhlaWdodDogZGV2aWNl
LWhlaWdodCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChkZXZpY2UtaGVpZ2h0OiBk
ZXZpY2UtaGVpZ2h0ICsxIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChkZXZp
Y2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0IC0xIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBh
bGwgYW5kIChtaW4tZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCBweCkgc2hvdWxkIGFwcGx5
IAotUEFTUyBhbGwgYW5kIChtaW4tZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCArMSBweCkg
c2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmljZS1oZWlnaHQ6IGRldmlj
ZS1oZWlnaHQgLTEgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWRldmljZS1o
ZWlnaHQ6IGRldmljZS1oZWlnaHQgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4
LWRldmljZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQgKzEgcHgpIHNob3VsZCBhcHBseSAKLVBBU1Mg
YWxsIGFuZCAobWF4LWRldmljZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQgKzEgcHgpIHNob3VsZCBu
b3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0
ICsxIGVtKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4tZGV2aWNlLWhlaWdo
dDogZGV2aWNlLWhlaWdodCAtMSBlbSkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgt
ZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCArMSBlbSkgc2hvdWxkIGFwcGx5IAotUEFTUyBh
bGwgYW5kIChtYXgtZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCAtMSBlbSkgc2hvdWxkIG5v
dCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoaGVpZ2h0KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKHdpZHRoKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChoZWlnaHQpIHNob3Vs
ZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKHdpZHRoKSBzaG91bGQgbm90IGFwcGx5IAotUEFT
UyBhbGwgYW5kIChkZXZpY2UtaGVpZ2h0KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGRl
dmljZS13aWR0aCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChoZWlnaHQpIHNob3VsZCBu
b3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKHdpZHRoKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKGhlaWdodCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kICh3aWR0aCkgc2hvdWxkIGFw
cGx5IAotUEFTUyBleHByZXNzaW9uIG9yaWVudGF0aW9uIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gb3JpZW50YXRpb246IHBvcnRyYWl0IHNob3VsZCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gb3JpZW50YXRpb246IGxhbmRzY2FwZSBzaG91bGQgYmUgcGFyc2Vh
YmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1vcmllbnRhdGlvbiBzaG91bGQgbm90IGJlIHBhcnNl
YWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tb3JpZW50YXRpb246IHBvcnRyYWl0IHNob3VsZCBu
b3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1vcmllbnRhdGlvbjogbGFuZHNj
YXBlIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1vcmllbnRh
dGlvbiBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtb3JpZW50
YXRpb246IHBvcnRyYWl0IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9u
IG1heC1vcmllbnRhdGlvbjogbGFuZHNjYXBlIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFT
UyAob3JpZW50YXRpb24pIHNob3VsZCBhcHBseSAKLVBBU1MgKG9yaWVudGF0aW9uOiBsYW5kc2Nh
cGUpIHNob3VsZCBhcHBseSAKLVBBU1MgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgc2hvdWxkIG5v
dCBhcHBseSAKLVBBU1Mgbm90IGFsbCBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgc2hvdWxk
IGFwcGx5IAotUEFTUyAob3JpZW50YXRpb24pIHNob3VsZCBhcHBseSAKLVBBU1MgKG9yaWVudGF0
aW9uOiBsYW5kc2NhcGUpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5kIChvcmll
bnRhdGlvbjogbGFuZHNjYXBlKSBzaG91bGQgYXBwbHkgCi1QQVNTIChvcmllbnRhdGlvbjogcG9y
dHJhaXQpIHNob3VsZCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTkvODApIHNob3VsZCBh
cHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTgvODApIHNob3VsZCBub3QgYXBwbHkgCi1QQVNT
IChhc3BlY3QtcmF0aW86IDU5LzgxKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAoYXNwZWN0LXJh
dGlvOiA2MC84MCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTkvNzkp
IHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86IDE3Ny8yNDApIHNob3VsZCBh
cHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNDEzLzU2MCkgc2hvdWxkIGFwcGx5IAotUEFTUyAo
YXNwZWN0LXJhdGlvOiA1OTAwLzgwMDApIHNob3VsZCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRp
bzogNTkwMS84MDAwKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvOiA1ODk5
LzgwMDApIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86IDU5MDAvODAwMSkg
c2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTkwMC83OTk5KSBzaG91bGQg
bm90IGFwcGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvKSBzaG91bGQgYXBwbHkgCi1QQVNTIChtaW4t
YXNwZWN0LXJhdGlvOiA1OS84MCkgc2hvdWxkIGFwcGx5IAotUEFTUyAobWluLWFzcGVjdC1yYXRp
bzogNTgvODApIHNob3VsZCBhcHBseSAKLVBBU1MgKG1pbi1hc3BlY3QtcmF0aW86IDU5LzgxKSBz
aG91bGQgYXBwbHkgCi1QQVNTIChtaW4tYXNwZWN0LXJhdGlvOiA2MC84MCkgc2hvdWxkIG5vdCBh
cHBseSAKLVBBU1MgKG1pbi1hc3BlY3QtcmF0aW86IDU5Lzc5KSBzaG91bGQgbm90IGFwcGx5IAot
UEFTUyBleHByZXNzaW9uIG1pbi1hc3BlY3QtcmF0aW8gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIChtYXgtYXNwZWN0LXJhdGlvOiA1OS84MCkgc2hvdWxkIGFwcGx5IAotUEFTUyAobWF4
LWFzcGVjdC1yYXRpbzogNTgvODApIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChtYXgtYXNwZWN0
LXJhdGlvOiA1OS84MSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKG1heC1hc3BlY3QtcmF0aW86
IDYwLzgwKSBzaG91bGQgYXBwbHkgCi1QQVNTIChtYXgtYXNwZWN0LXJhdGlvOiA1OS83OSkgc2hv
dWxkIGFwcGx5IAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW8gc2hvdWxkIG5vdCBi
ZSBwYXJzZWFibGUgCi1QQVNTIChkZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBk
ZXZpY2UtaGVpZ2h0KSBzaG91bGQgYXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5kIChkZXZpY2UtYXNw
ZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggKyAxIC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIGFwcGx5
IAotUEFTUyBhbGwgYW5kIChkZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBkZXZp
Y2UtaGVpZ2h0IC0gMSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLWFz
cGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC0gMSAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBub3Qg
YXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5kIChkZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lk
dGggLyBkZXZpY2UtaGVpZ2h0ICsgMSkgc2hvdWxkIGFwcGx5IAotUEFTUyAoZGV2aWNlLWFzcGVj
dC1yYXRpbykgc2hvdWxkIGFwcGx5IAotUEFTUyAobWluLWRldmljZS1hc3BlY3QtcmF0aW86IGRl
dmljZS13aWR0aCAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBhcHBseSAKLVBBU1Mgbm90IGFsbCBh
bmQgKGRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCArIDEgLyBkZXZpY2UtaGVpZ2h0
KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBub3QgYWxsIGFuZCAobWluLWRldmljZS1hc3BlY3Qt
cmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1oZWlnaHQgLSAxKSBzaG91bGQgYXBwbHkgCi1Q
QVNTIG5vdCBhbGwgYW5kIChtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC0g
MSAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1k
ZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBkZXZpY2UtaGVpZ2h0ICsgMSkgc2hv
dWxkIGFwcGx5IAotUEFTUyBleHByZXNzaW9uIG1pbi1kZXZpY2UtYXNwZWN0LXJhdGlvIHNob3Vs
ZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBhbGwgYW5kIChtYXgtZGV2aWNlLWFzcGVjdC1yYXRp
bzogZGV2aWNlLXdpZHRoIC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIGFwcGx5IAotUEFTUyAobWF4
LWRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCArIDEgLyBkZXZpY2UtaGVpZ2h0KSBz
aG91bGQgYXBwbHkgCi1QQVNTIChtYXgtZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRo
IC8gZGV2aWNlLWhlaWdodCAtIDEgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtZGV2
aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC0gMSAvIGRldmljZS1oZWlnaHQpIHNob3Vs
ZCBub3QgYXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5kIChtYXgtZGV2aWNlLWFzcGVjdC1yYXRpbzog
ZGV2aWNlLXdpZHRoIC8gZGV2aWNlLWhlaWdodCArIDEpIHNob3VsZCBhcHBseSAKLVBBU1MgZXhw
cmVzc2lvbiBtYXgtZGV2aWNlLWFzcGVjdC1yYXRpbyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAxLzEgc2hvdWxkIGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAxICAvMSBzaG91bGQgYmUgcGFy
c2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDEgIC8gCQotMSBzaG91
bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDEvCi0x
IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzog
MSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJh
dGlvOiAwLjUgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFz
cGVjdC1yYXRpbzogMS4wLzEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gbWF4LWFzcGVjdC1yYXRpbzogMS8xLjAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzogMS4wLzEuMCBzaG91bGQgbm90IGJlIHBhcnNl
YWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAwLzEgc2hvdWxkIG5vdCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzogMS8wIHNob3Vs
ZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDAv
MCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJh
dGlvOiAtMS8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1h
c3BlY3QtcmF0aW86IDEvLTEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gbWF4LWFzcGVjdC1yYXRpbzogLTEvLTEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMS8xIHNob3VsZCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMSAgLzEgc2hvdWxkIGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAxICAvIAkKLTEg
c2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlv
OiAxLwotMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3Bl
Y3QtcmF0aW86IDEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2
aWNlLWFzcGVjdC1yYXRpbzogMC41IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHBy
ZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDEuMC8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxl
IAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDEvMS4wIHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDEuMC8x
LjAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVj
dC1yYXRpbzogMC8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRl
dmljZS1hc3BlY3QtcmF0aW86IDEvMCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAwLzAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogLTEvMSBzaG91bGQgbm90IGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAxLy0xIHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0
aW86IC0xLy0xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBtb25vY2hyb21lX2FuZF9j
b2xvciAKLVBBU1MgZmluZF9kZXB0aCAKLVBBU1MgYWxsIGFuZCAoY29sb3I6IGRlcHRoKSBzaG91
bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGNvbG9yOiBkZXB0aCAtIDEpIHNob3VsZCBub3QgYXBw
bHkgCi1QQVNTIGFsbCBhbmQgKGNvbG9yOiBkZXB0aCArIDEpIHNob3VsZCBub3QgYXBwbHkgCi1Q
QVNTIGFsbCBhbmQgKG1heC1jb2xvcjogZGVwdGgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFu
ZCAobWF4LWNvbG9yOiBkZXB0aCAtIDEpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQg
KG1heC1jb2xvcjogZGVwdGggKyAxKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGNvbG9y
KSBzaG91bGQgYXBwbHkgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWNvbG9yIHNob3VsZCBub3QgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1jb2xvciBzaG91bGQgbm90IGJlIHBhcnNl
YWJsZSAKLVBBU1MgYWxsIGFuZCAobW9ub2Nocm9tZSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1Mg
ZXhwcmVzc2lvbiBtYXgtbW9ub2Nocm9tZSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1Mg
ZXhwcmVzc2lvbiBtaW4tbW9ub2Nocm9tZSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1Mg
bm90IGFsbCBhbmQgKG1vbm9jaHJvbWUpIHNob3VsZCBhcHBseSAKLVBBU1Mgbm90IGFsbCBhbmQg
KGNvbG9yKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBvbmx5IGFsbCBhbmQgKGNvbG9yKSBzaG91
bGQgYXBwbHkgCi1QQVNTIG9ubHkgYWxsIGFuZCAobW9ub2Nocm9tZSkgc2hvdWxkIG5vdCBhcHBs
eSAKLVBBU1MgZXhwcmVzc2lvbiBjb2xvcjogMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBl
eHByZXNzaW9uIGNvbG9yOiAzMjcgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBjb2xvcjogMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGNvbG9yOiAx
LjAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gY29sb3I6IC0xIHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGNvbG9yOiAxLzEgc2hvdWxk
IG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLW1vbm9jaHJvbWU6IDEgc2hv
dWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tbW9ub2Nocm9tZTogMzI3IHNo
b3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLW1vbm9jaHJvbWU6IDAgc2hv
dWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tbW9ub2Nocm9tZTogMS4wIHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1tb25vY2hyb21lOiAt
MSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tbW9ub2Nocm9t
ZTogMS8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotRkFJTCBmaW5kX3Jlc29sdXRpb24gYXNz
ZXJ0X2ZhbHNlOiBleHBlY3RlZCBmYWxzZSBnb3QgdHJ1ZQotUEFTUyAocmVzb2x1dGlvbjogZHBp
KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAocmVzb2x1dGlvbjogZHBpICsgMSkgc2hvdWxkIG5v
dCBhcHBseSAKLUZBSUwgKG1pbi1yZXNvbHV0aW9uOiBkcGkgLSAxICkgc2hvdWxkIGFwcGx5IGFz
c2VydF90cnVlOiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQotUEFTUyBub3QgYWxsIGFuZCAobWlu
LXJlc29sdXRpb246IGRwaSAtIDEgKSBzaG91bGQgbm90IGFwcGx5IAotRkFJTCBub3QgYWxsIGFu
ZCAobWluLXJlc29sdXRpb246IGRwaSArIDEgKSBzaG91bGQgYXBwbHkgYXNzZXJ0X3RydWU6IGV4
cGVjdGVkIHRydWUgZ290IGZhbHNlCi1QQVNTIGFsbCBhbmQgKG1pbi1yZXNvbHV0aW9uOiBkcGkg
KyAxICkgc2hvdWxkIG5vdCBhcHBseSAKLUZBSUwgKG1pbi1yZXNvbHV0aW9uOiBkcGNtIChkcGkg
LSAxKSApIHNob3VsZCBhcHBseSBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UK
LUZBSUwgKG1heC1yZXNvbHV0aW9uOiBkcGNtICAoZHBpICsgMSkgKSBzaG91bGQgYXBwbHkgYXNz
ZXJ0X3RydWU6IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCi1QQVNTIChtYXgtcmVzb2x1dGlvbjog
ZHBjbSAgKGRwaSAtIDEpICkgc2hvdWxkIG5vdCBhcHBseSAKLUZBSUwgbm90IGFsbCBhbmQgKG1p
bi1yZXNvbHV0aW9uOiBkcGNtICAoZHBpICsgMSkgKSBzaG91bGQgYXBwbHkgYXNzZXJ0X3RydWU6
IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCi1QQVNTIGV4cHJlc3Npb24gZ3JpZCBzaG91bGQgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGdyaWQ6IDAgc2hvdWxkIGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBncmlkOiAxIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJl
c3Npb24gZ3JpZDogMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1n
cmlkIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1ncmlkOjAg
c2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWdyaWQ6IDEgc2hv
dWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZ3JpZDogMiBzaG91bGQgbm90
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBncmlkOiAtMSBzaG91bGQgbm90IGJlIHBh
cnNlYWJsZSAKLVBBU1MgKGdyaWQpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChncmlkOiAwKSBz
aG91bGQgYXBwbHkgCi1QQVNTIChncmlkOiAxKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAoZ3Jp
ZDogMikgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGdyaWQ6IC0xKSBzaG91bGQgbm90IGFwcGx5
IAotCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2VuYWJsZS1kaXNhYmxlLXNldHRpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvaHR0cC90ZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvZW5hYmxlLWRpc2FibGUtc2V0dGluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2
MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvaHR0cC90ZXN0cy93ZWJz
b2NrZXQvdGVzdHMvZW5hYmxlLWRpc2FibGUtc2V0dGluZy1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMCwwIEBACi1QQVNTRUQ6IHdlYnNvY2tldCBvYmplY3QgaXMgYXZhaWxh
YmxlIHdoZW4gV2ViU29ja2V0c0VuYWJsZWQgaXMgdHJ1ZQotUEFTU0VEOiB3ZWJzb2NrZXQgb2Jq
ZWN0IGlzIG5vdCBhdmFpbGFibGUgd2hlbiBXZWJTb2NrZXRzRW5hYmxlZCBpcyBmYWxzZQotVEVT
VCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rl
c3RzL3dlYnNvY2tldC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLmh0bWwJKHJldmlzaW9uIDE2MTYwNikKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvZW5hYmxlLWRpc2FibGUtc2V0dGluZy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM3ICsw
LDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5SSU0gUFIgMTUy
MzExPC90aXRsZT4KLTxzY3JpcHQ+Ci1mdW5jdGlvbiBhcHBlbmRSZXN1bHQodGV4dCkKLXsKLSAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpLmlubmVySFRNTCArPSB0ZXh0Owot
fQotCi1mdW5jdGlvbiBydW5UZXN0KCkKLXsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsK
LSAgICAgICAgd2luZG93LnRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICB3aW5kb3cu
dGVzdFJ1bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYlNvY2tldHNFbmFibGVkIiwgdHJ1ZSk7
Ci0gICAgfQotICAgIGlmICh3aW5kb3cuV2ViU29ja2V0KSB7Ci0gICAgICAgIGFwcGVuZFJlc3Vs
dCgiUEFTU0VEOiB3ZWJzb2NrZXQgb2JqZWN0IGlzIGF2YWlsYWJsZSB3aGVuIFdlYlNvY2tldHNF
bmFibGVkIGlzIHRydWU8YnI+Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXBwZW5kUmVzdWx0
KCJGQUlMRUQ6IHdlYnNvY2tldCBvYmplY3QgaXMgbm90IGF2YWlsYWJsZSB3aGVuIFdlYlNvY2tl
dHNFbmFibGVkIGlzIHRydWU8YnI+Iik7Ci0gICAgfQotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikgewotICAgICAgICB3aW5kb3cudGVzdFJ1bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYlNv
Y2tldHNFbmFibGVkIiwgZmFsc2UpOwotICAgIH0KLSAgICBpZiAod2luZG93LldlYlNvY2tldCkg
ewotICAgICAgICBhcHBlbmRSZXN1bHQoIkZBSUxFRDogd2Vic29ja2V0IG9iamVjdCBpcyBhdmFp
bGFibGUgd2hlbiBXZWJTb2NrZXRzRW5hYmxlZCBpcyBmYWxzZTxicj4iKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBhcHBlbmRSZXN1bHQoIlBBU1NFRDogd2Vic29ja2V0IG9iamVjdCBpcyBub3Qg
YXZhaWxhYmxlIHdoZW4gV2ViU29ja2V0c0VuYWJsZWQgaXMgZmFsc2U8YnI+Iik7Ci0gICAgfQot
ICAgIGFwcGVuZFJlc3VsdCgiVEVTVCBDT01QTEVURSIpOwotfQotPC9zY3JpcHQ+Ci08L2hlYWQ+
Ci08Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Ci08ZGl2IGlkPSJyZXN1bHRzIj48L2Rpdj4KLTwv
Ym9keT4KLTwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvanMv
ZG9tL2NvbnN0cnVjdG9yLWxlbmd0aC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9qcy9kb20vY29uc3RydWN0b3ItbGVuZ3RoLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9qcy9kb20vY29uc3RydWN0b3ItbGVuZ3RoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSw2MSArMCwwIEBACi1UaGlzIHRlc3RzIHRoZSBsZW5ndGggcHJvcGVydHkgb2YgY29u
c3RydWN0b3JzLgotCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCi0KLQotUEFTUyBBcnJheUJ1
ZmZlci5sZW5ndGggaXMgMQotRkFJTCBBdWRpb0NvbnRleHQubGVuZ3RoIHNob3VsZCBiZSAwLiBU
aHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IEF1ZGlv
Q29udGV4dAotUEFTUyBCZWZvcmVMb2FkRXZlbnQubGVuZ3RoIGlzIDEKLVBBU1MgQmxvYi5sZW5n
dGggaXMgMAotUEFTUyBDbG9zZUV2ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIEN1c3RvbUV2ZW50Lmxl
bmd0aCBpcyAxCi1GQUlMIERPTUZvcm1EYXRhLmxlbmd0aCBzaG91bGQgYmUgMC4gVGhyZXcgZXhj
ZXB0aW9uIFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBET01Gb3JtRGF0YQot
UEFTUyBET01QYXJzZXIubGVuZ3RoIGlzIDAKLVBBU1MgRGF0YVZpZXcubGVuZ3RoIGlzIDEKLVBB
U1MgRXJyb3JFdmVudC5sZW5ndGggaXMgMQotUEFTUyBFdmVudC5sZW5ndGggaXMgMQotUEFTUyBF
dmVudFNvdXJjZS5sZW5ndGggaXMgMQotUEFTUyBGbG9hdDMyQXJyYXkubGVuZ3RoIGlzIDEKLVBB
U1MgRmxvYXQ2NEFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIEZpbGVSZWFkZXIubGVuZ3RoIGlzIDAK
LUZBSUwgRmlsZVJlYWRlclN5bmMubGVuZ3RoIHNob3VsZCBiZSAwLiBUaHJldyBleGNlcHRpb24g
UmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IEZpbGVSZWFkZXJTeW5jCi1QQVNT
IEhhc2hDaGFuZ2VFdmVudC5sZW5ndGggaXMgMQotUEFTUyBJbnQxNkFycmF5Lmxlbmd0aCBpcyAx
Ci1QQVNTIEludDMyQXJyYXkubGVuZ3RoIGlzIDEKLVBBU1MgSW50OEFycmF5Lmxlbmd0aCBpcyAx
Ci1GQUlMIEludGVudC5sZW5ndGggc2hvdWxkIGJlIDMuIFRocmV3IGV4Y2VwdGlvbiBSZWZlcmVu
Y2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogSW50ZW50Ci1QQVNTIE1lZGlhQ29udHJvbGxl
ci5sZW5ndGggaXMgMAotRkFJTCBNZWRpYVN0cmVhbS5sZW5ndGggc2hvdWxkIGJlIDAuIFRocmV3
IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogTWVkaWFTdHJl
YW0KLVBBU1MgTWVzc2FnZUNoYW5uZWwubGVuZ3RoIGlzIDAKLVBBU1MgTWVzc2FnZUV2ZW50Lmxl
bmd0aCBpcyAxCi1QQVNTIE92ZXJmbG93RXZlbnQubGVuZ3RoIGlzIDEKLVBBU1MgUGFnZVRyYW5z
aXRpb25FdmVudC5sZW5ndGggaXMgMQotRkFJTCBQZWVyQ29ubmVjdGlvbi5sZW5ndGggc2hvdWxk
IGJlIDIuIFRocmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJs
ZTogUGVlckNvbm5lY3Rpb24KLVBBU1MgUG9wU3RhdGVFdmVudC5sZW5ndGggaXMgMQotUEFTUyBQ
cm9ncmVzc0V2ZW50Lmxlbmd0aCBpcyAxCi1GQUlMIFNoYWRvd1Jvb3QubGVuZ3RoIHNob3VsZCBi
ZSAxLiBUaHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6
IFNoYWRvd1Jvb3QKLVBBU1MgU2hhcmVkV29ya2VyLmxlbmd0aCBpcyAxCi1QQVNTIFN0b3JhZ2VF
dmVudC5sZW5ndGggaXMgMQotUEFTUyBUZXh0VHJhY2tDdWUubGVuZ3RoIGlzIDYKLVBBU1MgVHJh
Y2tFdmVudC5sZW5ndGggaXMgMQotUEFTUyBVaW50MTZBcnJheS5sZW5ndGggaXMgMQotUEFTUyBV
aW50MzJBcnJheS5sZW5ndGggaXMgMQotUEFTUyBVaW50OEFycmF5Lmxlbmd0aCBpcyAxCi1QQVNT
IFVpbnQ4Q2xhbXBlZEFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIFdlYkdMQ29udGV4dEV2ZW50Lmxl
bmd0aCBpcyAxCi1QQVNTIFdlYktpdEFuaW1hdGlvbkV2ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIFdl
YktpdENTU01hdHJpeC5sZW5ndGggaXMgMAotUEFTUyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmxl
bmd0aCBpcyAxCi1QQVNTIFdlYktpdFBvaW50Lmxlbmd0aCBpcyAwCi1QQVNTIFdlYktpdFRyYW5z
aXRpb25FdmVudC5sZW5ndGggaXMgMQotUEFTUyBXZWJTb2NrZXQubGVuZ3RoIGlzIDEKLVBBU1Mg
V29ya2VyLmxlbmd0aCBpcyAxCi1QQVNTIHdlYmtpdFVSTC5sZW5ndGggaXMgMAotUEFTUyBYTUxI
dHRwUmVxdWVzdC5sZW5ndGggaXMgMAotUEFTUyBYTUxTZXJpYWxpemVyLmxlbmd0aCBpcyAwCi1Q
QVNTIFhQYXRoRXZhbHVhdG9yLmxlbmd0aCBpcyAwCi1QQVNTIFhTTFRQcm9jZXNzb3IubGVuZ3Ro
IGlzIDAKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQot
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL21lZGlhLWNhbi1w
bGF5LW9nZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
YmxhY2tiZXJyeS9tZWRpYS9tZWRpYS1jYW4tcGxheS1vZ2ctZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL21lZGlh
LWNhbi1wbGF5LW9nZy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMgKzAsMCBA
QAotVGVzdCBIVE1MTWVkaWFFbGVtZW50IGNhblBsYXlUeXBlKCkgbWV0aG9kIGZvciBvZ2cgbWVk
aWEgY29udGFpbmVycy4KLQotVGhlc2UgdGVzdHMgbWF5IGJlIGV4cGVjdGVkIHRvIGZhaWwgaWYg
dGhlIFdlYktpdCBwb3J0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGZvcm1hdC4KLQotRVhQRUNURUQg
KHZpZGVvLmNhblBsYXlUeXBlKCdhdWRpby9vZ2cnKSA9PSAnbWF5YmUnKSBPSwotRVhQRUNURUQg
KHZpZGVvLmNhblBsYXlUeXBlKCd2aWRlby9vZ2cnKSA9PSAnbWF5YmUnKSBPSwotRVhQRUNURUQg
KHZpZGVvLmNhblBsYXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz12b3JiaXMnKSA9PSAncHJvYmFi
bHknKSBPSwotRVhQRUNURUQgKHZpZGVvLmNhblBsYXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz1v
cHVzJykgPT0gJ3Byb2JhYmx5JyksIE9CU0VSVkVEICcnIEZBSUwKLUVYUEVDVEVEICh2aWRlby5j
YW5QbGF5VHlwZSgnYXVkaW8vb2dnOyBjb2RlY3M9c3BlZXgnKSA9PSAncHJvYmFibHknKSwgT0JT
RVJWRUQgJycgRkFJTAotRVhQRUNURUQgKHZpZGVvLmNhblBsYXlUeXBlKCd2aWRlby9vZ2c7IGNv
ZGVjcz10aGVvcmEnKSA9PSAncHJvYmFibHknKSBPSwotRVhQRUNURUQgKHZpZGVvLmNhblBsYXlU
eXBlKCd2aWRlby9vZ2c7IGNvZGVjcz10aGVvcmEsdm9yYmlzJykgPT0gJ3Byb2JhYmx5JykgT0sK
LUVORCBPRiBURVNUCi0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVk
aWEvc2hvcnQtbWVkaWEtcmVwZWF0cy1jb3JyZWN0bHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvc2hvcnQtbWVkaWEtcmVw
ZWF0cy1jb3JyZWN0bHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3Nob3J0LW1lZGlhLXJlcGVhdHMtY29ycmVj
dGx5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiArMCwwIEBACi1UZXN0IHRo
YXQgYSB2ZXJ5IHNob3J0IGF1ZGlvIGZpbGUgZG9lcyBub3QgcmVwZWF0IHVuaW50ZW50aW9uYWxs
eS4KLQotRVZFTlQoY2FucGxheXRocm91Z2gpCi1FVkVOVChwbGF5aW5nKQotRVZFTlQoZW5kZWQp
Ci1FVkVOVChwbGF5aW5nKQotRVZFTlQoZW5kZWQpCi1FVkVOVChwcm9ncmVzcykKLUVWRU5UKHBs
YXlpbmcpCi1FVkVOVChlbmRlZCkKLUVWRU5UKHByb2dyZXNzKQotRVZFTlQocGxheWluZykKLUVW
RU5UKGVuZGVkKQotRVZFTlQocHJvZ3Jlc3MpCi1FVkVOVChwbGF5aW5nKQotRVZFTlQoZW5kZWQp
Ci1FVkVOVChwcm9ncmVzcykKLUVWRU5UKHBsYXlpbmcpCi1FVkVOVChlbmRlZCkKLUVWRU5UKHBy
b2dyZXNzKQotRVhQRUNURUQocHJvZ3Jlc3NDb3VudCA9PSAnNScpIE9LCi1FTkQgT0YgVEVTVApJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS9zaG9ydC1tZWRpYS1y
ZXBlYXRzLWNvcnJlY3RseS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L2JsYWNrYmVycnkvbWVkaWEvc2hvcnQtbWVkaWEtcmVwZWF0cy1jb3JyZWN0bHkuaHRtbAkocmV2
aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS9z
aG9ydC1tZWRpYS1yZXBlYXRzLWNvcnJlY3RseS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcy
ICswLDAgQEAKLTxodG1sPgotICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0
aD1kZXZpY2Utd2lkdGgiPgotICAgIDx0aXRsZT5TaG9ydCBNZWRpYSBSZXBlYXRzIENvcnJlY3Rs
eTwvdGl0bGU+Ci0gICAgPGJvZHk+Ci0gICAgPHA+VGVzdCB0aGF0IGEgdmVyeSBzaG9ydCBhdWRp
byBmaWxlIGRvZXMgbm90IHJlcGVhdCB1bmludGVudGlvbmFsbHkuPC9wPgotCi0gICAgPHNjcmlw
dCBzcmM9Li4vLi4vLi4vbWVkaWEvdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KLSAgICA8c2NyaXB0
IHNyYz0uLi8uLi8uLi9tZWRpYS9tZWRpYS1maWxlLmpzPjwvc2NyaXB0PgotICAgIDxzY3JpcHQ+
Ci0gICAgICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXZlbnQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGxvZ1Jlc3VsdChmYWxzZSwgIkNhdWdodCAnZXJyb3InIGV2ZW50LCBtZWRpYS5lcnJv
ci5jb2RlID0gIiArIHRoaXMuZXJyb3IuY29kZSk7Ci0gICAgICAgICAgICBlbmRUZXN0KCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjYW5wbGF5dGhyb3VnaExpc3RlbmVyKGV2ZW50
KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zb2xlV3JpdGUoIkVWRU5UKGNhbnBsYXl0aHJv
dWdoKSIpOwotICAgICAgICAgICAgdGhpcy5wbGF5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBwbGF5aW5nTGlzdGVuZXIoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnNvbGVXcml0ZSgiRVZFTlQocGxheWluZykiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIHByb2dyZXNzTGlzdGVuZXIoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElm
IHRoZSBtZWRpYSByZXBlYXRzIG1vcmUgb2Z0ZW4gdGhhbiBpbnRlbmRlZCB0aGVyZSB3aWxsIGJl
IHRvbwotICAgICAgICAgICAgLy8gbWFueSBwcm9ncmVzcyBldmVudHMgcmVjZWl2ZWQsIGluIHRo
aXMgY2FzZSBvbmUgcHJvZ3Jlc3MKLSAgICAgICAgICAgIC8vIGV2ZW50IHBlciBwbGF5LiBJIHRy
aWVkIGxpc3RlbmluZyBmb3Igb3RoZXIgbW9yZSBpbnR1aXRpdmUKLSAgICAgICAgICAgIC8vIGV2
ZW50cyBidXQgbm90aGluZyBlbHNlIGlzIGJlaW5nIHRyaWdnZXJlZCB3aGVuIHRoZSByZXBlYXRl
ZAotICAgICAgICAgICAgLy8gcGxheXMgaW4gcXVlc3Rpb24gb2NjdXIuCi0gICAgICAgICAgICBj
b25zb2xlV3JpdGUoIkVWRU5UKHByb2dyZXNzKSIpOwotICAgICAgICAgICAgKytwcm9ncmVzc0Nv
dW50OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZW5kZWRMaXN0ZW5lcihldmVudCkK
LSAgICAgICAgewotICAgICAgICAgICAgY29uc29sZVdyaXRlKCJFVkVOVChlbmRlZCkiKTsKLSAg
ICAgICAgICAgIGlmICgrK2VuZGVkQ291bnQgPD0gNSkgLy8gU2V0IHRvdGFsIG51bWJlciBvZiBy
ZXBlYXRzIGhlcmUKLSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCJjb250aW51ZVRlc3QoKSIs
IDEwMCk7IC8vIEdpdmUgZXZlbnRzIHRpbWUgdG8gY29tZQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHNldFRpbWVvdXQoImNvbmNsdWRlVGVzdCgpIiwgMTAwKTsgLy8gR2l2ZSBl
dmVudHMgdGltZSB0byBjb21lCi0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjb250aW51
ZVRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoKytyZXBlYXRDb3VudCA9PSAxKQot
ICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycs
IHByb2dyZXNzTGlzdGVuZXIpOwotICAgICAgICAgICAgYXVkaW9FbGVtZW50LnBsYXkoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNvbmNsdWRlVGVzdCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRlc3RFeHBlY3RlZCgicHJvZ3Jlc3NDb3VudCIsIHJlcGVhdENvdW50KTsKLSAg
ICAgICAgICAgIGVuZFRlc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRvY3VtZW50LndyaXRl
KCI8YXVkaW8gY29udHJvbHM+PC9hdWRpbz4iKTsKLSAgICAgICAgdmFyIGF1ZGlvRWxlbWVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhdWRpbycpWzBdOwotICAgICAgICB2YXIg
ZW5kZWRDb3VudCA9IDA7Ci0gICAgICAgIHZhciByZXBlYXRDb3VudCA9IDA7Ci0gICAgICAgIHZh
ciBwcm9ncmVzc0NvdW50ID0gMDsKLSAgICAgICAgYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7Ci0gICAgICAgIGF1ZGlvRWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIGNhbnBsYXl0aHJvdWdoTGlzdGVuZXIpOwotICAg
ICAgICBhdWRpb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHBsYXlpbmdMaXN0
ZW5lcik7Ci0gICAgICAgIGF1ZGlvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIGVu
ZGVkTGlzdGVuZXIpOwotICAgICAgICBhdWRpb0VsZW1lbnQuc3JjID0gZmluZE1lZGlhRmlsZSgi
YXVkaW8iLCAiLi4vLi4vLi4vbWVkaWEvY29udGVudC9zaG9ydCIpOwotICAgIDwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9t
ZWRpYS92aWRlby1hdXRvbWF0aWMtZnVsbHNjcmVlbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92aWRlby1hdXRvbWF0aWMt
ZnVsbHNjcmVlbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvdmlkZW8tYXV0b21hdGljLWZ1bGxzY3JlZW4tZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAsMCBAQAotRVZFTlQoY2FucGxheSkK
LUVWRU5UKHdlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UpCi1FTkQgT0YgVEVTVAotCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWF1dG9tYXRpYy1mdWxsc2Ny
ZWVuLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9t
ZWRpYS92aWRlby1hdXRvbWF0aWMtZnVsbHNjcmVlbi5odG1sCShyZXZpc2lvbiAxNjE2MDYpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWF1dG9tYXRpYy1m
dWxsc2NyZWVuLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAotPCFET0NUWVBF
IGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotICAgIDx0aXRsZT5WaWRlbyBFbGVtZW50IC0gVGVzdCBh
dXRvbWF0aWMgRW50ZXIgRnVsbHNjcmVlbiBvbiBwbGF5PC90aXRsZT4KLSAgICA8c2NyaXB0IHNy
Yz0uLi8uLi8uLi9tZWRpYS92aWRlby10ZXN0LmpzPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3Jj
PS4uLy4uLy4uL21lZGlhL21lZGlhLWZpbGUuanM+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9
Li4vLi4vLi4vbWVkaWEvbWVkaWEtY29udHJvbHMuanM+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBz
cmM9Li4vLi4vLi4vZnVsbHNjcmVlbi9mdWxsLXNjcmVlbi10ZXN0LmpzPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQ+Ci0gICAgICAgIHZhciB2b2x1bWVTbGlkZXI7Ci0KLSAgICAgICAgdmFyIHN0YXJ0
VGVzdCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgZmluZE1lZGlhRWxlbWVudCgpOwotICAg
ICAgICAgICAgd2FpdEZvckV2ZW50KHZpZGVvLCAnY2FucGxheScsIG9uY2FucGxheSk7Ci0gICAg
ICAgICAgICB2aWRlby5zcmMgPSBmaW5kTWVkaWFGaWxlKCd2aWRlbycsICcuLi8uLi8uLi9tZWRp
YS9jb250ZW50L3Rlc3QnKTsKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgb25jYW5wbGF5ID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB3YWl0Rm9yRXZlbnQodmlkZW8sICd3ZWJraXRmdWxs
c2NyZWVuY2hhbmdlJywgb25mdWxsc2NyZWVuY2hhbmdlKTsKLSAgICAgICAgICAgIHJ1bldpdGhL
ZXlEb3duKGZ1bmN0aW9uKCl7IHZpZGVvLnBsYXkoKTsgfSkKLSAgICAgICAgfTsKLQotICAgICAg
ICB2YXIgb25mdWxsc2NyZWVuY2hhbmdlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBlbmRU
ZXN0KCk7Ci0gICAgICAgIH07Ci0gICAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9
InN0YXJ0VGVzdCgpIj4KLSAgICAKLSAgICA8dmlkZW8gY29udHJvbHM+PC92aWRlbz4gICAgCi0g
ICAgCi08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L21lZGlhL3ZpZGVvLWNvbnRyb2xzLWVubGFyZ2VkLWZ1bGxzY3JlZW4tbWV0YS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRp
YS92aWRlby1jb250cm9scy1lbmxhcmdlZC1mdWxsc2NyZWVuLW1ldGEtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlh
L3ZpZGVvLWNvbnRyb2xzLWVubGFyZ2VkLWZ1bGxzY3JlZW4tbWV0YS1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMCwwIEBACi1UZXN0IHRoYXQgbWVkaWEgY29udHJvbHMgYXJl
IHJlbmRlcmVkIGF0IHRoZSBlbmxhcmdlZCBzaXplIGluIGZ1bGxzY3JlZW4gbW9kZS4KLQotRVZF
TlQoY2FucGxheXRocm91Z2gpCi1UaGUgYWN0dWFsIGNvbnRyb2xzIGhlaWdodCBtYXRjaGVzIHRo
ZSBleHBlY3RlZCBjb250cm9scyBoZWlnaHQuIE9LCi1FTkQgT0YgVEVTVAotRW50ZXIgRnVsbFNj
cmVlbgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92aWRlby1j
b250cm9scy1lbmxhcmdlZC1mdWxsc2NyZWVuLW1ldGEuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWNvbnRyb2xzLWVubGFyZ2Vk
LWZ1bGxzY3JlZW4tbWV0YS5odG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWNvbnRyb2xzLWVubGFyZ2VkLWZ1bGxzY3Jl
ZW4tbWV0YS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLTxodG1sPgotICAg
IDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgiPgotICAg
IDx0aXRsZT5UZXN0IG9mIEhUTUw1IE1lZGlhIENvbnRyb2xzIEVubGFyZ2VtZW50IGluIEZ1bGxz
Y3JlZW4gTW9kZTwvdGl0bGU+Ci0gICAgPGJvZHk+Ci0gICAgPHA+VGVzdCB0aGF0IG1lZGlhIGNv
bnRyb2xzIGFyZSByZW5kZXJlZCBhdCB0aGUgZW5sYXJnZWQgc2l6ZSBpbiBmdWxsc2NyZWVuIG1v
ZGUuPC9wPgotCi0gICAgPHNjcmlwdCBzcmM9Li4vLi4vLi4vbWVkaWEvdmlkZW8tdGVzdC5qcz48
L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0uLi8uLi8uLi9tZWRpYS9tZWRpYS1maWxlLmpzPjwv
c2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPS4uLy4uLy4uL21lZGlhL21lZGlhLWNvbnRyb2xzLmpz
Pjwvc2NyaXB0PgotICAgIDxzY3JpcHQ+Ci0gICAgICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIo
ZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvZ1Jlc3VsdChmYWxzZSwgIkNhdWdodCAn
ZXJyb3InIGV2ZW50LCB2aWRlby5lcnJvci5jb2RlID0gIiArIHRoaXMuZXJyb3IuY29kZSk7Ci0g
ICAgICAgICAgICBlbmRUZXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBmdWxs
U2NyZWVuTGlzdGVuZXIoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZSB2aWRl
byBlbnRlcmVkIGZ1bGxzY3JlZW4gbW9kZS4KLSAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2
ZW50TGlzdGVuZXIoJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnLCBmdWxsU2NyZWVuTGlzdGVuZXIp
OwotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzY2FsZSBvZiBDU1MgcGl4ZWxzLiBJZiBD
U1MgcGl4ZWxzIGFyZSBub3QgYmVpbmcKLSAgICAgICAgICAgIC8vIHNjYWxlZCBieSBhIGZhY3Rv
ciBvZiBhdCBsZWFzdCB0d28sIHdlIGV4cGVjdCB0aGUgZnVsbHNjcmVlbgotICAgICAgICAgICAg
Ly8gY29udHJvbHMgdG8gYmUgc2hvd24gZW5sYXJnZWQuIENTUyBwaXhlbHMgd2lsbCBvbmx5IGJl
IHNjYWxlZAotICAgICAgICAgICAgLy8gd2hlbiB2aWV3cG9ydCB3aWR0aCBpcyBzZXQgdG8gImRl
dmljZS13aWR0aCIgYnkgYSBtZXRhIHRhZyAoc2VlCi0gICAgICAgICAgICAvLyBhYm92ZSkgb24g
ZGV2aWNlcyB3aXRoIGhpZ2ggc2NyZWVuIERQSSdzIHN1Y2ggYXMgQkIxMCBoYW5kLWhlbGRzLgot
ICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gNjQ7Ci0gICAgICAgICAgICBpZiAoc2NyZWVuLndp
ZHRoIC8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoID49IDIpCi0gICAgICAg
ICAgICAgICAgZXhwZWN0ZWQgPSAzMjsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBtZWRpYUNv
bnRyb2xzQnV0dG9uRGltZW5zaW9ucyh2aWRlb0VsZW1lbnQsICdwbGF5LWJ1dHRvbicpWzFdOwot
ICAgICAgICAgICAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkKLSAgICAgICAgICAgICAgICBsb2dS
ZXN1bHQodHJ1ZSwgIlRoZSBhY3R1YWwgY29udHJvbHMgaGVpZ2h0IG1hdGNoZXMgdGhlIGV4cGVj
dGVkIGNvbnRyb2xzIGhlaWdodC4iKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBsb2dSZXN1bHQoZmFsc2UsICJUaGUgYWN0dWFsIGNvbnRyb2xzIGhlaWdodCBvZiAiICsgYWN0
dWFsICsgIiBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgY29udHJvbHMgaGVpZ2h0IG9mICIg
KyBleHBlY3RlZCArICIuIik7Ci0gICAgICAgICAgICBlbmRUZXN0KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBjYW5wbGF5dGhyb3VnaExpc3RlbmVyKGV2ZW50KQotICAgICAgICB7
Ci0gICAgICAgICAgICBjb25zb2xlV3JpdGUoIkVWRU5UKGNhbnBsYXl0aHJvdWdoKSIpOwotICAg
ICAgICAgICAgLy8gQ2Fubm90IGNhbGwgdGhpcy53ZWJraXRFbnRlckZ1bGxTY3JlZW4oKSBkaXJl
Y3RseSBiZWNhdXNlIGl0Ci0gICAgICAgICAgICAvLyBvbmx5IHdvcmtzIHdoZW4gaW5pdGlhdGVk
IGJ5IGEgdXNlciBnZXN0dXJlLgotICAgICAgICAgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikK
LSAgICAgICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCJhIiwgWyJhbHRLZXkiXSk7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb2dSZXN1bHQodHJ1ZSwgIlRoaXMg
dGVzdCB1c2VzIGV2ZW50U2VuZGVyIGFuZCBtdXN0IGJlIHJ1biB1bmRlciB0aGUgRFJUIGZyYW1l
d29yayB0byBiZSBhdXRvbWF0aWMuIE90aGVyd2lzZSB5b3UgbmVlZCB0byBtYW51YWxseSBwcmVz
cyBFbnRlciBGdWxsc2NyZWVuLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgZG9jdW1lbnQud3JpdGUoIjx2aWRlbyBjb250cm9scz48L3ZpZGVvPiIpOwotICAgICAgICBk
b2N1bWVudC53cml0ZSgiPGJ1dHRvbiBvbmNsaWNrPSd2aWRlb0VsZW1lbnQud2Via2l0UmVxdWVz
dEZ1bGxTY3JlZW4oKScgYWNjZXNzS2V5PSdhJz5FbnRlciBGdWxsU2NyZWVuPC9idXR0b24+Iik7
Ci0gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdGZ1bGxzY3JlZW5jaGFu
Z2UnLCBmdWxsU2NyZWVuTGlzdGVuZXIpOwotICAgICAgICB2YXIgdmlkZW9FbGVtZW50ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3ZpZGVvJylbMF07Ci0gICAgICAgIHZpZGVvRWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpOwotICAgICAgICB2
aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCBjYW5wbGF5dGhy
b3VnaExpc3RlbmVyKTsKLSAgICAgICAgdmlkZW9FbGVtZW50LnNyYyA9IGZpbmRNZWRpYUZpbGUo
InZpZGVvIiwgIi4uLy4uLy4uL21lZGlhL2NvbnRlbnQvdGVzdCIpOwotICAgIDwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9t
ZWRpYS92aWRlby1jb250cm9scy1lbmxhcmdlZC1mdWxsc2NyZWVuLW5vbWV0YS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92
aWRlby1jb250cm9scy1lbmxhcmdlZC1mdWxsc2NyZWVuLW5vbWV0YS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEv
dmlkZW8tY29udHJvbHMtZW5sYXJnZWQtZnVsbHNjcmVlbi1ub21ldGEtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzAsMCBAQAotVGVzdCB0aGF0IG1lZGlhIGNvbnRyb2xzIGFy
ZSByZW5kZXJlZCBhdCB0aGUgZW5sYXJnZWQgc2l6ZSBpbiBmdWxsc2NyZWVuIG1vZGUuCi0KLUVW
RU5UKGNhbnBsYXl0aHJvdWdoKQotVGhlIGFjdHVhbCBjb250cm9scyBoZWlnaHQgbWF0Y2hlcyB0
aGUgZXhwZWN0ZWQgY29udHJvbHMgaGVpZ2h0LiBPSwotRU5EIE9GIFRFU1QKLUVudGVyIEZ1bGxT
Y3JlZW4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvdmlkZW8t
Y29udHJvbHMtZW5sYXJnZWQtZnVsbHNjcmVlbi1ub21ldGEuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWNvbnRyb2xzLWVubGFy
Z2VkLWZ1bGxzY3JlZW4tbm9tZXRhLmh0bWwJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvdmlkZW8tY29udHJvbHMtZW5sYXJnZWQtZnVs
bHNjcmVlbi1ub21ldGEuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi08aHRt
bD4KLSAgICA8dGl0bGU+VGVzdCBvZiBIVE1MNSBNZWRpYSBDb250cm9scyBFbmxhcmdlbWVudCBp
biBGdWxsc2NyZWVuIE1vZGU8L3RpdGxlPgotICAgIDxib2R5PgotICAgIDxwPlRlc3QgdGhhdCBt
ZWRpYSBjb250cm9scyBhcmUgcmVuZGVyZWQgYXQgdGhlIGVubGFyZ2VkIHNpemUgaW4gZnVsbHNj
cmVlbiBtb2RlLjwvcD4KLQotICAgIDxzY3JpcHQgc3JjPS4uLy4uLy4uL21lZGlhL3ZpZGVvLXRl
c3QuanM+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Li4vLi4vLi4vbWVkaWEvbWVkaWEtZmls
ZS5qcz48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0uLi8uLi8uLi9tZWRpYS9tZWRpYS1jb250
cm9scy5qcz48L3NjcmlwdD4KLSAgICA8c2NyaXB0PgotICAgICAgICBmdW5jdGlvbiBlcnJvckxp
c3RlbmVyKGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2dSZXN1bHQoZmFsc2UsICJD
YXVnaHQgJ2Vycm9yJyBldmVudCwgdmlkZW8uZXJyb3IuY29kZSA9ICIgKyB0aGlzLmVycm9yLmNv
ZGUpOwotICAgICAgICAgICAgZW5kVGVzdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gZnVsbFNjcmVlbkxpc3RlbmVyKGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBU
aGUgdmlkZW8gZW50ZXJlZCBmdWxsc2NyZWVuIG1vZGUuCi0gICAgICAgICAgICBkb2N1bWVudC5y
ZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJraXRmdWxsc2NyZWVuY2hhbmdlJywgZnVsbFNjcmVlbkxp
c3RlbmVyKTsKLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc2NhbGUgb2YgQ1NTIHBpeGVs
cy4gSWYgQ1NTIHBpeGVscyBhcmUgbm90IGJlaW5nCi0gICAgICAgICAgICAvLyBzY2FsZWQgYnkg
YSBmYWN0b3Igb2YgYXQgbGVhc3QgdHdvLCB3ZSBleHBlY3QgdGhlIGZ1bGxzY3JlZW4KLSAgICAg
ICAgICAgIC8vIGNvbnRyb2xzIHRvIGJlIHNob3duIGVubGFyZ2VkLiBDU1MgcGl4ZWxzIHdpbGwg
b25seSBiZSBzY2FsZWQKLSAgICAgICAgICAgIC8vIHdoZW4gdmlld3BvcnQgd2lkdGggaXMgc2V0
IHRvICJkZXZpY2Utd2lkdGgiIGJ5IGEgbWV0YSB0YWcgKHNlZQotICAgICAgICAgICAgLy8gYWJv
dmUpIG9uIGRldmljZXMgd2l0aCBoaWdoIHNjcmVlbiBEUEkncyBzdWNoIGFzIEJCMTAgaGFuZC1o
ZWxkcy4KLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IDY0OwotICAgICAgICAgICAgaWYgKHNj
cmVlbi53aWR0aCAvIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA+PSAyKQot
ICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gMzI7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0g
bWVkaWFDb250cm9sc0J1dHRvbkRpbWVuc2lvbnModmlkZW9FbGVtZW50LCAncGxheS1idXR0b24n
KVsxXTsKLSAgICAgICAgICAgIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpCi0gICAgICAgICAgICAg
ICAgbG9nUmVzdWx0KHRydWUsICJUaGUgYWN0dWFsIGNvbnRyb2xzIGhlaWdodCBtYXRjaGVzIHRo
ZSBleHBlY3RlZCBjb250cm9scyBoZWlnaHQuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbG9nUmVzdWx0KGZhbHNlLCAiVGhlIGFjdHVhbCBjb250cm9scyBoZWlnaHQgb2Yg
IiArIGFjdHVhbCArICIgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGNvbnRyb2xzIGhlaWdo
dCBvZiAiICsgZXhwZWN0ZWQgKyAiLiIpOwotICAgICAgICAgICAgZW5kVGVzdCgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY2FucGxheXRocm91Z2hMaXN0ZW5lcihldmVudCkKLSAg
ICAgICAgewotICAgICAgICAgICAgY29uc29sZVdyaXRlKCJFVkVOVChjYW5wbGF5dGhyb3VnaCki
KTsKLSAgICAgICAgICAgIC8vIENhbm5vdCBjYWxsIHRoaXMud2Via2l0RW50ZXJGdWxsU2NyZWVu
KCkgZGlyZWN0bHkgYmVjYXVzZSBpdAotICAgICAgICAgICAgLy8gb25seSB3b3JrcyB3aGVuIGlu
aXRpYXRlZCBieSBhIHVzZXIgZ2VzdHVyZS4KLSAgICAgICAgICAgIGlmICh3aW5kb3cuZXZlbnRT
ZW5kZXIpCi0gICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93bigiYSIsIFsiYWx0S2V5
Il0pOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbG9nUmVzdWx0KHRydWUs
ICJUaGlzIHRlc3QgdXNlcyBldmVudFNlbmRlciBhbmQgbXVzdCBiZSBydW4gdW5kZXIgdGhlIERS
VCBmcmFtZXdvcmsgdG8gYmUgYXV0b21hdGljLiBPdGhlcndpc2UgeW91IG5lZWQgdG8gbWFudWFs
bHkgcHJlc3MgRW50ZXIgRnVsbHNjcmVlbi4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGRvY3VtZW50LndyaXRlKCI8dmlkZW8gY29udHJvbHM+PC92aWRlbz4iKTsKLSAg
ICAgICAgZG9jdW1lbnQud3JpdGUoIjxidXR0b24gb25jbGljaz0ndmlkZW9FbGVtZW50LndlYmtp
dFJlcXVlc3RGdWxsU2NyZWVuKCknIGFjY2Vzc0tleT0nYSc+RW50ZXIgRnVsbFNjcmVlbjwvYnV0
dG9uPiIpOwotICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRmdWxsc2Ny
ZWVuY2hhbmdlJywgZnVsbFNjcmVlbkxpc3RlbmVyKTsKLSAgICAgICAgdmFyIHZpZGVvRWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd2aWRlbycpWzBdOwotICAgICAgICB2
aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTsKLSAg
ICAgICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgY2Fu
cGxheXRocm91Z2hMaXN0ZW5lcik7Ci0gICAgICAgIHZpZGVvRWxlbWVudC5zcmMgPSBmaW5kTWVk
aWFGaWxlKCJ2aWRlbyIsICIuLi8uLi8uLi9tZWRpYS9jb250ZW50L3Rlc3QiKTsKLSAgICA8L3Nj
cmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNr
YmVycnkvcGx1Z2lucy9zd2YtYXMtc3JjLW9mLWlmcmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9wbHVnaW5zL3N3Zi1hcy1zcmMt
b2YtaWZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMv
cGxhdGZvcm0vYmxhY2tiZXJyeS9wbHVnaW5zL3N3Zi1hcy1zcmMtb2YtaWZyYW1lLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi1QQVNTRUQKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvcGx1Z2lucy9zd2YtYXMtc3JjLW9mLWlmcmFtZS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvcGx1Z2lucy9z
d2YtYXMtc3JjLW9mLWlmcmFtZS5odG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L3BsdWdpbnMvc3dmLWFzLXNyYy1vZi1pZnJhbWUuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPHRpdGxlPlRl
c3QgdGhhdCBpZnJhbWUgd2l0aCBzcmMgc2V0IHRvIHN3ZiB1c2VzIHBsdWdpbiBkb2N1bWVudDwv
dGl0bGU+Ci08IS0tLSBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlICJtaXNzaW5nIHBsdWdpbiB0
ZXh0IiBpcyBzaG93biB3aGVuIHRoZSBGbGFzaFBsYXllciBwbHVnaW4gaXMgZGlzYWJsZWQuIC0t
PgotPHNjcmlwdD4KLWZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0gIGZyYW1lZG9jdW1lbnQgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnZnJhbWUnKS5jb250ZW50V2luZG93LmRvY3VtZW50OwotICBp
bm5lcmh0bWwgPSBmcmFtZWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0u
aW5uZXJIVE1MOwotICBpZiAoaW5uZXJodG1sWzBdID09PSAnQycpIHsKLSAgICAvLyBUaGlzIGlz
IHRoZSAnQycgZnJvbSB0aGUgQWN0aW9uU2NyaXB0IFNXQy4gVGhlIGNvbnRlbnRzIGFyZSBiZWlu
ZwotICAgIC8vIHJlbmRlcmVkIGFzIHRleHQuIEZhaWwgdGhlIHRlc3QuCi0gICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS50ZXh0Q29udGVudCA9ICJGQUlMRUQgZHVlIHRvIHBs
dWdpbiByZW5kZXJlZCBhcyBnaWJiZXJpc2ggdGV4dCAoUFIyOTMwOTgpLiI7Ci0gIH0gZWxzZSB7
Ci0gICAgdmFyIGZsYXNocGxheWVyTG9hZGVkID0gZmFsc2U7Ci0gICAgZm9yIChpID0gMDsgaSA8
IG5hdmlnYXRvci5wbHVnaW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwg
bmF2aWdhdG9yLnBsdWdpbnNbaV0ubGVuZ3RoOyArK2opIHsKLSAgICAgICAgaWYgKG5hdmlnYXRv
ci5wbHVnaW5zW2ldW2pdLnR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikg
ewotICAgICAgICAgIGZsYXNocGxheWVyTG9hZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLSAgICBpZiAoZmxhc2hwbGF5ZXJMb2FkZWQpIHsKLSAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdjb25zb2xlJykudGV4dENvbnRlbnQgPSAiRkFJTEVEIGR1ZSB0byBGbGFz
aFBsYXllciBwbHVnaW4gZW5hYmxlZC4gUGxlYXNlIGRpc2FibGUgaXQuIjsKLSAgICB9IGVsc2Ug
aWYgKGZyYW1lZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2VtYmVkJylbMF0pewotICAg
ICAgLy8gVGhlcmUgaXMgYW4gZW1iZWQgZWxlbWVudCBpbnN0ZWFkIG9mIGdpYmJlcmlzaCB0ZXh0
LiBUaGlzIGlzIHdoYXQgd2UKLSAgICAgIC8vIHdhbnQgYW5kIGluZGljYXRlcyB0aGF0IGEgcGx1
Z2luIGRvY3VtZW50IHdhcyBjcmVhdGVkIGluc3RlYWQgb2YgYW4KLSAgICAgIC8vIEhUTUwgZG9j
dW1lbnQuCi0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLnRleHRDb250
ZW50ID0gIlBBU1NFRCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjb25zb2xlJykudGV4dENvbnRlbnQgPSAiRkFJTEVEIGZvciBhbiB1bmtub3duIHJlc29u
LiI7Ci0gICAgfQotICB9Ci0KLX0KLTwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keSBvbmxvYWQ9
InJ1blRlc3QoKTsiPgotCi08aWZyYW1lIGlkPSJmcmFtZSIgc3JjPSIuLi8uLi8uLi9wbHVnaW5z
L3Jlc291cmNlcy9zaW1wbGVfYmxhbmsuc3dmIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+Ci08
L2lmcmFtZT4KLQotPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Ci08L2JvZHk+Ci0KLTwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZWRpdGluZy90ZXh0LWl0ZXJh
dG9yL2ZpbmRTdHJpbmctbWFya2Vycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZFN0cmlu
Zy1tYXJrZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMv
cGxhdGZvcm0vYmxhY2tiZXJyeS9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZFN0cmluZy1tYXJr
ZXJzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi1QQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLVBBU1MgaW50ZXJuYWxz
Lm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAwCi1QQVNT
IGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikg
aXMgMAotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRl
eHRtYXRjaCIpIGlzIDAKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0
Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICJkIiBpcyAiZCIKLVBBU1MgaW50ZXJuYWxz
Lm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAzCi1QQVNT
ICJlIiBpcyAiZSIKLVBBU1MgImUiIGlzICJlIgotUEFTUyAiZSIgaXMgImUiCi1QQVNTIGludGVy
bmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQot
UEFTUyAiZiIgaXMgImYiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJz
dENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAiVCIgaXMgIlQiCi1QQVNTIGludGVybmFs
cy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMAotUEFT
UyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIp
IGlzIDAKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0
ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICJ4IiBpcyAieCIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNv
dW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICJ5IiBpcyAi
eSIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0
bWF0Y2giKSBpcyAxCi1QQVNTICJ6IiBpcyAieiIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50
Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICIuIiBpcyAiLiIK
LVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0
Y2giKSBpcyAxCi1QQVNTICJhIiBpcyAiYSIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9y
Tm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICJiIiBpcyAiYiIKLVBB
U1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2gi
KSBpcyAxCi1QQVNTICJjIiBpcyAiYyIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9k
ZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICJkIiBpcyAiZCIKLVBBU1Mg
aW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBp
cyAzCi1QQVNTICJlIiBpcyAiZSIKLVBBU1MgImUiIGlzICJlIgotUEFTUyAiZSIgaXMgImUiCi1Q
QVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNo
IikgaXMgMQotUEFTUyAiZiIgaXMgImYiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5v
ZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMgotUEFTUyAiVCIgaXMgIlQiCi1QQVNT
ICJ0IiBpcyAidCIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hp
bGQsICJ0ZXh0bWF0Y2giKSBpcyAyCi1QQVNTICJ1IiBpcyAidSIKLVBBU1MgInUiIGlzICJ1Igot
UEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRj
aCIpIGlzIDEKLVBBU1MgInYiIGlzICJ2IgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JO
b2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEKLVBBU1MgIngiIGlzICJ4IgotUEFT
UyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIp
IGlzIDEKLVBBU1MgInkiIGlzICJ5IgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2Rl
KGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEKLVBBU1MgInoiIGlzICJ6IgotUEFTUyBp
bnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlz
IDEKLVBBU1MgIi4iIGlzICIuIgotVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBs
YXp5IGRvZy4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZWRpdGluZy90
ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJpbmctbWFya2Vycy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJp
bmctbWFya2Vycy5odG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ibGFja2JlcnJ5L2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLW1hcmtlcnMuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRt
bD4KLTxoZWFkPgotPHN0eWxlPgotLnBsYWludGV4dCB7Ci0gICAgYm9yZGVyOiAycHggc29saWQg
cmVkOwotICAgIHBhZGRpbmc6IDEycHg7Ci0gICAgZm9udC1zaXplOiAyNHB4OwotfQotPC9zdHls
ZT4KLTxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08cHJlIGlkPSJkZXNjcmlwdGlvbiI+PC9wcmU+Ci08
cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KLTxkaXYgaWQ9ImNvbnRhaW5lciI+Ci08L2Rpdj4KLQot
PHNjcmlwdD4KLQotaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAgdGVzdFJ1bm5lci5kdW1w
QXNUZXh0KCk7Ci0gICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci19Ci0KLWZ1bmN0aW9u
IGNyZWF0ZVBsYWluVGV4dEVsZW1lbnQoaWQsIHRleHQsIHBhcmVudCkgewotICAgIHZhciBlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgZS5jbGFzc05hbWUgPSAncGxhaW50
ZXh0JzsKLSAgICBlLmlkID0gaWQ7Ci0gICAgZS5pbm5lclRleHQgPSB0ZXh0OwotCi0gICAgcGFy
ZW50LmFwcGVuZENoaWxkKGUpOwotICAgIHJldHVybiBlOwotfQotCi1mdW5jdGlvbiBvY2N1cnJl
bmNlcyhzdHJpbmcsIHN1YnN0cmluZywgY2FzZVNlbnNpdGl2ZSkgewotICAgIHZhciBuPTA7Ci0g
ICAgdmFyIHBvcz0wOwotCi0gICAgdmFyIGhheXN0YWNrID0gY2FzZVNlbnNpdGl2ZSA/IHN0cmlu
ZyA6IHN0cmluZy50b0xvd2VyQ2FzZSgpOwotICAgIHZhciBuZWVkbGUgPSBjYXNlU2Vuc2l0aXZl
ID8gc3Vic3RyaW5nIDogc3Vic3RyaW5nLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICBwb3MgPSBoYXlzdGFjay5pbmRleE9mKG5lZWRsZSxwb3MpOwotICAgICAg
ICBpZiAocG9zIT0tMSkgewotICAgICAgICAgICAgKytuOwotICAgICAgICAgICAgcG9zKz1uZWVk
bGUubGVuZ3RoOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICByZXR1cm4gbjsKLX0KLQotZnVuY3Rpb24gY2hlY2tUZXh0TWF0Y2hNYXJrZXIoaW5kZXgsIGZp
bmRPcHRpb25zKSB7Ci0gICAgaWYgKGluZGV4ID4gMTIpIHsKLSAgICAgICAgaWYgKGZpbmRPcHRp
b25zLmxlbmd0aCA9PSAwKSB7Ci0gICAgICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgICAgICBm
aW5kT3B0aW9ucy5wdXNoKCJDYXNlSW5zZW5zaXRpdmUiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHZhciBzdHIgPSAnQUJDZGVmVFVWeHl6Lic7Ci0gICAgdmFy
IGNoYXIgPSBzdHIuY2hhckF0KGluZGV4KTsKLSAgICB2YXIgY2FzZVNlbnNpdGl2ZSA9IGZpbmRP
cHRpb25zLmluZGV4T2YoIkNhc2VJbnNlbnNpdGl2ZSIpID09IC0xOwotICAgIHRlc3RSdW5uZXIu
ZmluZFN0cmluZyhjaGFyLCBmaW5kT3B0aW9ucyk7Ci0gICAgLy8gU3RhcnQgdGhlIGZ1bmN0aW9u
IGxhdGVyIHRvIGFsbG93IG1hcmtpbmcgcHJvY2VzcyB0byBmaW5pc2guCi0gICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGNvdW50ID0gb2NjdXJyZW5jZXModGV4dCwgY2hh
ciwgY2FzZVNlbnNpdGl2ZSk7Ci0KLSAgICAgICAgLy8gVGhlIG51bWJlciBvZiBtYXJrZXJzIHNo
b3VsZCBtYXRjaCB0byB0aGUgb2NjdXJyZW5jZXMgb2YgdGhlIGNoYXJhY3Rvci4KLSAgICAgICAg
c2hvdWxkQmUoJ2ludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4
dG1hdGNoIiknLCBjb3VudC50b1N0cmluZygpKTsKLSAgICAgICAgdmFyIHNlYXJjaFN0YXJ0SW5k
ZXggPSAwOwotICAgICAgICAvLyBHZXQgdGhlIGNoYXIgZnJvbSB0ZXh0IGFuZCBjb21wYXJlIHdp
dGggdGhlIG1hcmtlciByYW5nZSBjb250ZW50LgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNvdW50IDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcmFuZ2UgPSBpbnRlcm5hbHMubWFya2Vy
UmFuZ2VGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIsIGkpOwotICAgICAgICAgICAg
dmFyIHBvcyA9IGNhc2VTZW5zaXRpdmUgPyB0ZXh0LmluZGV4T2YoY2hhciwgc2VhcmNoU3RhcnRJ
bmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGV4dC50b0xvd2Vy
Q2FzZSgpLmluZGV4T2YoY2hhci50b0xvd2VyQ2FzZSgpLCBzZWFyY2hTdGFydEluZGV4KTsKLSAg
ICAgICAgICAgIHNlYXJjaFN0YXJ0SW5kZXggPSBwb3MgKyAxOwotICAgICAgICAgICAgdmFyIGV4
cGVjdFN0ciA9IHRleHQuY2hhckF0KHBvcyk7Ci0gICAgICAgICAgICBzaG91bGRCZSgnIicgKyBy
YW5nZSArICciJywgJyInICsgZXhwZWN0U3RyICsgJyInKTsKLSAgICAgICAgfQotICAgICAgICBj
aGVja1RleHRNYXRjaE1hcmtlcihpbmRleCArIDEsIGZpbmRPcHRpb25zKTsKLSAgICB9LCA4NTAp
OwotfQotCi12YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5l
cicpOwotCi12YXIgaWQgPSAnaWQxJwotdmFyIHRleHQgPSAnVGhlIHF1aWNrIGJyb3duIGZveCBq
dW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4nOwotdmFyIGUgPSBjcmVhdGVQbGFpblRleHRFbGVtZW50
KGlkLCB0ZXh0LCBjb250YWluZXIpOwotCi1pZiAod2luZG93LmludGVybmFscyAmJiB3aW5kb3cu
dGVzdFJ1bm5lcikKLSAgICBjaGVja1RleHRNYXRjaE1hcmtlcigwLCBbXSk7Ci0KLXZhciBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwotPC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2VkaXRpbmcvdGV4dC1pdGVy
YXRvci9maW5kU3RyaW5nLW1hcmtlcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJp
bmctbWFya2Vycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL2JsYWNrYmVycnkvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmRTdHJpbmctbWFy
a2Vycy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi1QQVNTIGludGVybmFs
cy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMAotUEFT
UyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIp
IGlzIDAKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0
ZXh0bWF0Y2giKSBpcyAwCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJz
dENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAiZCIgaXMgImQiCi1QQVNTIGludGVybmFs
cy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMwotUEFT
UyAiZSIgaXMgImUiCi1QQVNTICJlIiBpcyAiZSIKLVBBU1MgImUiIGlzICJlIgotUEFTUyBpbnRl
cm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEK
LVBBU1MgImYiIGlzICJmIgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmly
c3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDEKLVBBU1MgIlQiIGlzICJUIgotUEFTUyBpbnRlcm5h
bHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDAKLVBB
U1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2gi
KSBpcyAwCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAi
dGV4dG1hdGNoIikgaXMgMQotUEFTUyAieCIgaXMgIngiCi1QQVNTIGludGVybmFscy5tYXJrZXJD
b3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAieSIgaXMg
InkiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4
dG1hdGNoIikgaXMgMQotUEFTUyAieiIgaXMgInoiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3Vu
dEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAiLiIgaXMgIi4i
Ci1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1h
dGNoIikgaXMgMQotUEFTUyAiYSIgaXMgImEiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZv
ck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAiYiIgaXMgImIiCi1Q
QVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNo
IikgaXMgMQotUEFTUyAiYyIgaXMgImMiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5v
ZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikgaXMgMQotUEFTUyAiZCIgaXMgImQiCi1QQVNT
IGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENoaWxkLCAidGV4dG1hdGNoIikg
aXMgMwotUEFTUyAiZSIgaXMgImUiCi1QQVNTICJlIiBpcyAiZSIKLVBBU1MgImUiIGlzICJlIgot
UEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRj
aCIpIGlzIDEKLVBBU1MgImYiIGlzICJmIgotUEFTUyBpbnRlcm5hbHMubWFya2VyQ291bnRGb3JO
b2RlKGUuZmlyc3RDaGlsZCwgInRleHRtYXRjaCIpIGlzIDIKLVBBU1MgIlQiIGlzICJUIgotUEFT
UyAidCIgaXMgInQiCi1QQVNTIGludGVybmFscy5tYXJrZXJDb3VudEZvck5vZGUoZS5maXJzdENo
aWxkLCAidGV4dG1hdGNoIikgaXMgMgotUEFTUyAidSIgaXMgInUiCi1QQVNTICJ1IiBpcyAidSIK
LVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0
Y2giKSBpcyAxCi1QQVNTICJ2IiBpcyAidiIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9y
Tm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICJ4IiBpcyAieCIKLVBB
U1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2gi
KSBpcyAxCi1QQVNTICJ5IiBpcyAieSIKLVBBU1MgaW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9k
ZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBpcyAxCi1QQVNTICJ6IiBpcyAieiIKLVBBU1Mg
aW50ZXJuYWxzLm1hcmtlckNvdW50Rm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giKSBp
cyAxCi1QQVNTICIuIiBpcyAiLiIKLVRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUg
bGF6eSBkb2cuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2VkaXRpbmcv
dGV4dC1pdGVyYXRvci9maW5kU3RyaW5nLW1hcmtlcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kU3Ry
aW5nLW1hcmtlcnMuaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vYmxhY2tiZXJyeS9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZFN0cmluZy1tYXJrZXJzLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0
bWw+Ci08aGVhZD4KLTxzdHlsZT4KLS5wbGFpbnRleHQgewotICAgIGJvcmRlcjogMnB4IHNvbGlk
IHJlZDsKLSAgICBwYWRkaW5nOiAxMnB4OwotICAgIGZvbnQtc2l6ZTogMjRweDsKLX0KLTwvc3R5
bGU+Ci08c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHByZSBpZD0iZGVzY3JpcHRpb24iPjwvcHJlPgot
PHByZSBpZD0iY29uc29sZSI+PC9wcmU+Ci08ZGl2IGlkPSJjb250YWluZXIiPgotPC9kaXY+Ci0K
LTxzY3JpcHQ+Ci0KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikgewotICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOwotICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotfQotCi1mdW5jdGlv
biBjcmVhdGVQbGFpblRleHRFbGVtZW50KGlkLCB0ZXh0LCBwYXJlbnQpIHsKLSAgICB2YXIgZSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIGUuY2xhc3NOYW1lID0gJ3BsYWlu
dGV4dCc7Ci0gICAgZS5pZCA9IGlkOwotICAgIGUuaW5uZXJUZXh0ID0gdGV4dDsKLQotICAgIHBh
cmVudC5hcHBlbmRDaGlsZChlKTsKLSAgICByZXR1cm4gZTsKLX0KLQotZnVuY3Rpb24gb2NjdXJy
ZW5jZXMoc3RyaW5nLCBzdWJzdHJpbmcsIGNhc2VTZW5zaXRpdmUpIHsKLSAgICB2YXIgbj0wOwot
ICAgIHZhciBwb3M9MDsKLQotICAgIHZhciBoYXlzdGFjayA9IGNhc2VTZW5zaXRpdmUgPyBzdHJp
bmcgOiBzdHJpbmcudG9Mb3dlckNhc2UoKTsKLSAgICB2YXIgbmVlZGxlID0gY2FzZVNlbnNpdGl2
ZSA/IHN1YnN0cmluZyA6IHN1YnN0cmluZy50b0xvd2VyQ2FzZSgpOwotCi0gICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgcG9zID0gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUscG9zKTsKLSAgICAg
ICAgaWYgKHBvcyE9LTEpIHsKLSAgICAgICAgICAgICsrbjsKLSAgICAgICAgICAgIHBvcys9bmVl
ZGxlLmxlbmd0aDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgcmV0dXJuIG47Ci19Ci0KLWZ1bmN0aW9uIGNoZWNrVGV4dE1hdGNoTWFya2VyKGluZGV4LCBm
aW5kT3B0aW9ucykgewotICAgIGlmIChpbmRleCA+IDEyKSB7Ci0gICAgICAgIGlmIChmaW5kT3B0
aW9ucy5sZW5ndGggPT0gMCkgewotICAgICAgICAgICAgaW5kZXggPSAwOwotICAgICAgICAgICAg
ZmluZE9wdGlvbnMucHVzaCgiQ2FzZUluc2Vuc2l0aXZlIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSAgICB2YXIgc3RyID0gJ0FCQ2RlZlRVVnh5ei4nOwotICAgIHZh
ciBjaGFyID0gc3RyLmNoYXJBdChpbmRleCk7Ci0gICAgdmFyIGNhc2VTZW5zaXRpdmUgPSBmaW5k
T3B0aW9ucy5pbmRleE9mKCJDYXNlSW5zZW5zaXRpdmUiKSA9PSAtMTsKLSAgICB0ZXN0UnVubmVy
LmZpbmRTdHJpbmcoY2hhciwgZmluZE9wdGlvbnMpOwotICAgIC8vIFN0YXJ0IHRoZSBmdW5jdGlv
biBsYXRlciB0byBhbGxvdyBtYXJraW5nIHByb2Nlc3MgdG8gZmluaXNoLgotICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBjb3VudCA9IG9jY3VycmVuY2VzKHRleHQsIGNo
YXIsIGNhc2VTZW5zaXRpdmUpOwotCi0gICAgICAgIC8vIFRoZSBudW1iZXIgb2YgbWFya2VycyBz
aG91bGQgbWF0Y2ggdG8gdGhlIG9jY3VycmVuY2VzIG9mIHRoZSBjaGFyYWN0b3IuCi0gICAgICAg
IHNob3VsZEJlKCdpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKGUuZmlyc3RDaGlsZCwgInRl
eHRtYXRjaCIpJywgY291bnQudG9TdHJpbmcoKSk7Ci0gICAgICAgIHZhciBzZWFyY2hTdGFydElu
ZGV4ID0gMDsKLSAgICAgICAgLy8gR2V0IHRoZSBjaGFyIGZyb20gdGV4dCBhbmQgY29tcGFyZSB3
aXRoIHRoZSBtYXJrZXIgcmFuZ2UgY29udGVudC4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBjb3VudCA7ICsraSkgewotICAgICAgICAgICAgdmFyIHJhbmdlID0gaW50ZXJuYWxzLm1hcmtl
clJhbmdlRm9yTm9kZShlLmZpcnN0Q2hpbGQsICJ0ZXh0bWF0Y2giLCBpKTsKLSAgICAgICAgICAg
IHZhciBwb3MgPSBjYXNlU2Vuc2l0aXZlID8gdGV4dC5pbmRleE9mKGNoYXIsIHNlYXJjaFN0YXJ0
SW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRleHQudG9Mb3dl
ckNhc2UoKS5pbmRleE9mKGNoYXIudG9Mb3dlckNhc2UoKSwgc2VhcmNoU3RhcnRJbmRleCk7Ci0g
ICAgICAgICAgICBzZWFyY2hTdGFydEluZGV4ID0gcG9zICsgMTsKLSAgICAgICAgICAgIHZhciBl
eHBlY3RTdHIgPSB0ZXh0LmNoYXJBdChwb3MpOwotICAgICAgICAgICAgc2hvdWxkQmUoJyInICsg
cmFuZ2UgKyAnIicsICciJyArIGV4cGVjdFN0ciArICciJyk7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2hlY2tUZXh0TWF0Y2hNYXJrZXIoaW5kZXggKyAxLCBmaW5kT3B0aW9ucyk7Ci0gICAgfSwgODUw
KTsKLX0KLQotdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWlu
ZXInKTsKLQotdmFyIGlkID0gJ2lkMScKLXZhciB0ZXh0ID0gJ1RoZSBxdWljayBicm93biBmb3gg
anVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuJzsKLXZhciBlID0gY3JlYXRlUGxhaW5UZXh0RWxlbWVu
dChpZCwgdGV4dCwgY29udGFpbmVyKTsKLQotaWYgKHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93
LnRlc3RSdW5uZXIpCi0gICAgY2hlY2tUZXh0TWF0Y2hNYXJrZXIoMCwgW10pOwotCi12YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9leHRlcm5hbC9zZWFyY2gt
cHJvdmlkZXIvc2VhcmNoLXByb3ZpZGVyLWluc3RhbGxlZC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9leHRlcm5hbC9zZWFyY2gtcHJv
dmlkZXIvc2VhcmNoLXByb3ZpZGVyLWluc3RhbGxlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2
MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZXh0ZXJuYWwvc2VhcmNo
LXByb3ZpZGVyL3NlYXJjaC1wcm92aWRlci1pbnN0YWxsZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzAsMCBAQAotVGVzdCBpZiB3aW5kb3cuZXh0ZXJuYWwgc2VhcmNoIGNv
bXBvbmVudHMgYXJlIHN1cHBvcnRlZCwgYW5kIGlmIGl0IHdvcmtzLgotUEFTUyAnd2luZG93LmV4
dGVybmFsIEFkZFNlYXJjaFByb3ZpZGVyIGlzIGNhbGxhYmxlLgotUEFTUyAnd2luZG93LmV4dGVy
bmFsIElzU2VhcmNoUHJvdmlkZXJJbnN0YWxsZWQgaXMgY2FsbGFibGUuCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2V4dGVybmFsL3NlYXJjaC1wcm92aWRlci9zZWFyY2gt
cHJvdmlkZXItaW5zdGFsbGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vYmxhY2tiZXJyeS9leHRlcm5hbC9zZWFyY2gtcHJvdmlkZXIvc2VhcmNoLXByb3ZpZGVyLWlu
c3RhbGxlZC5odG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9i
bGFja2JlcnJ5L2V4dGVybmFsL3NlYXJjaC1wcm92aWRlci9zZWFyY2gtcHJvdmlkZXItaW5zdGFs
bGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4K
LTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFy
c2V0PVVURi04Ij4KLTx0aXRsZT5hZGQtc2VhcmNoLXByb3ZpZGVyPC90aXRsZT4KLTxzY3JpcHQg
c3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPgotPC9zY3JpcHQ+Ci08
c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+Ci1pZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLX0KLQotZnVuY3Rpb24gc3RhcnRU
ZXN0KCkKLXsKLSAgICB0cnkgewotICAgICAgICB3aW5kb3cuZXh0ZXJuYWwuQWRkU2VhcmNoUHJv
dmlkZXIoImh0dHA6Ly93d3cuc2VhcmNoLmNvbSIpOwotICAgICAgICB0ZXN0UGFzc2VkKCInd2lu
ZG93LmV4dGVybmFsIEFkZFNlYXJjaFByb3ZpZGVyIGlzIGNhbGxhYmxlLiIpOwotICAgIH0gY2F0
Y2ggKGV4KSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIkdvdCBhbiBleGNlcHRpb24gd2hlbiBjYWxs
aW5nIHdpbmRvdy5leHRlcm5hbC5BZGRTZWFyY2hQcm92aWRlcih1cmwpOiAiICsgZXgpOwotICAg
IH0KLQotICAgIHRyeSB7Ci0gICAgICAgIHdpbmRvdy5leHRlcm5hbC5Jc1NlYXJjaFByb3ZpZGVy
SW5zdGFsbGVkKCJodHRwOi8vd3d3LnNlYXJjaC5jb20iKTsKLSAgICAgICAgdGVzdFBhc3NlZCgi
Jyd3aW5kb3cuZXh0ZXJuYWwgSXNTZWFyY2hQcm92aWRlckluc3RhbGxlZCBpcyBjYWxsYWJsZS4i
KTsKLSAgICB9IGNhdGNoIChleCkgewotICAgICAgICB0ZXN0RmFpbGVkKCJHb3QgYW4gZXhjZXB0
aW9uIHdoZW4gY2FsbGluZyB3aW5kb3cuZXh0ZXJuYWwuSXNTZWFyY2hQcm92aWRlckluc3RhbGxl
ZCh1cmwpOiAiICsgZXgpOwotICAgIH0KLX0KLQotZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeyBz
dGFydFRlc3QoKTsgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpO30KLTwvc2NyaXB0
PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJsb2FkQ29tcGxldGUoKSI+Ci08ZGl2IGlkPSJkZXNj
cmlwdGlvbiI+VGVzdCBpZiB3aW5kb3cuZXh0ZXJuYWwgc2VhcmNoIGNvbXBvbmVudHMgYXJlIHN1
cHBvcnRlZCwgYW5kIGlmIGl0IHdvcmtzLjwvZGl2PgotPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Ci08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5
L2V4dGVybmFsL3NlYXJjaC1wcm92aWRlci9zZWFyY2gtcHJvdmlkZXItaW5zdGFsbGVkLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2V4
dGVybmFsL3NlYXJjaC1wcm92aWRlci9zZWFyY2gtcHJvdmlkZXItaW5zdGFsbGVkLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJy
eS9leHRlcm5hbC9zZWFyY2gtcHJvdmlkZXIvc2VhcmNoLXByb3ZpZGVyLWluc3RhbGxlZC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMCwwIEBACi1UZXN0IGlmIHdpbmRvdy5l
eHRlcm5hbCBzZWFyY2ggY29tcG9uZW50cyBhcmUgc3VwcG9ydGVkLCBhbmQgaWYgaXQgd29ya3Mu
Ci1QQVNTICd3aW5kb3cuZXh0ZXJuYWwgQWRkU2VhcmNoUHJvdmlkZXIgaXMgY2FsbGFibGUuCi1Q
QVNTICd3aW5kb3cuZXh0ZXJuYWwgSXNTZWFyY2hQcm92aWRlckluc3RhbGxlZCBpcyBjYWxsYWJs
ZS4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZXh0ZXJuYWwvc2VhcmNo
LXByb3ZpZGVyL3NlYXJjaC1wcm92aWRlci1pbnN0YWxsZWQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2V4dGVybmFsL3NlYXJjaC1wcm92aWRlci9z
ZWFyY2gtcHJvdmlkZXItaW5zdGFsbGVkLmh0bWwJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZXh0ZXJuYWwvc2VhcmNoLXByb3ZpZGVyL3NlYXJj
aC1wcm92aWRlci1pbnN0YWxsZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNyArMCwwIEBA
Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50
PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmFkZC1zZWFyY2gtcHJvdmlkZXI8
L3RpdGxlPgotPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KLWlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwotfQot
Ci1mdW5jdGlvbiBzdGFydFRlc3QoKQotewotICAgIHRyeSB7Ci0gICAgICAgIHdpbmRvdy5leHRl
cm5hbC5BZGRTZWFyY2hQcm92aWRlcigiaHR0cDovL3d3dy5zZWFyY2guY29tIik7Ci0gICAgICAg
IHRlc3RQYXNzZWQoIid3aW5kb3cuZXh0ZXJuYWwgQWRkU2VhcmNoUHJvdmlkZXIgaXMgY2FsbGFi
bGUuIik7Ci0gICAgfSBjYXRjaCAoZXgpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiR290IGFuIGV4
Y2VwdGlvbiB3aGVuIGNhbGxpbmcgd2luZG93LmV4dGVybmFsLkFkZFNlYXJjaFByb3ZpZGVyKHVy
bCk6ICIgKyBleCk7Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgICAgd2luZG93LmV4dGVybmFs
LklzU2VhcmNoUHJvdmlkZXJJbnN0YWxsZWQoImh0dHA6Ly93d3cuc2VhcmNoLmNvbSIpOwotICAg
ICAgICB0ZXN0UGFzc2VkKCInJ3dpbmRvdy5leHRlcm5hbCBJc1NlYXJjaFByb3ZpZGVySW5zdGFs
bGVkIGlzIGNhbGxhYmxlLiIpOwotICAgIH0gY2F0Y2ggKGV4KSB7Ci0gICAgICAgIHRlc3RGYWls
ZWQoIkdvdCBhbiBleGNlcHRpb24gd2hlbiBjYWxsaW5nIHdpbmRvdy5leHRlcm5hbC5Jc1NlYXJj
aFByb3ZpZGVySW5zdGFsbGVkKHVybCk6ICIgKyBleCk7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBs
b2FkQ29tcGxldGUoKSB7IHN0YXJ0VGVzdCgpOyBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7fQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9ImxvYWRDb21wbGV0ZSgp
Ij4KLTxkaXYgaWQ9ImRlc2NyaXB0aW9uIj5UZXN0IGlmIHdpbmRvdy5leHRlcm5hbCBzZWFyY2gg
Y29tcG9uZW50cyBhcmUgc3VwcG9ydGVkLCBhbmQgaWYgaXQgd29ya3MuPC9kaXY+Ci08ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtZXhw
ZWN0ZWQucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkv
ZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtZXhwZWN0ZWQucG5nCShyZXZpc2lv
biAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFz
L3dlYmdsL2Nzcy13ZWJraXQtY2FudmFzLWV4cGVjdGVkLnBuZwkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICswLDAgQEAKLYlQTkcNCi0aCi0AAAANSUhEUgAAAyAAAAJYCAIAAAAVFBUnAAAAKXRFWHRj
aGVja3N1bQBlZDA5MDg3M2Y5ZWY3NzlmMTIyN2NmNjdhZDkyZmRlY7f4fvQAAA0vSURBVHic7dxZ
ah5HAEZRKXhFJgvMAk22pLwYhzga/uF2dw3nvAotRHWVHi6fwa9vb28vAAB0/rj6AAAAqxFYAAAx
gQUAEBNYAAAxgQUAEBNYAAAxgQUAEPv20Q9eX1/PPAcb8n+wAbAqCxYAQOzDBeunv844BNv56+oD
AMCRLFgAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQ
E1gAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQE1gAADGBBQAQE1iNH99ffny/+hAAwBgEFgBATGAF
fm1XRiwA4EVgAQDkBNazflutjFgAgMACAIgJrKe8u1cZsQBgcwILACAmsB73yVJlxAKAnQksAICY
wHrQlxuVEQsAtiWwAABiAusRN65TRiwA2JPAAgCICay73bVLGbEAYEMCCwAgJrDu88AiZcQCgN0I
LACAmMC6w8NblBELALYisAAAYgLrVk+uUEYsANiHwAIAiAmsmyT7kxELADYhsAAAYgLra+HyZMQC
gB0ILACAmMD6Qr45GbEAYHkCCwAgJrA+c9DaZMQCgLUJLACAmMD60KE7kxELABYmsAAAYgLrfScs
TEYsAFiVwAIAiAmsd5y2LRmxAGBJAgsAICawfnfyqmTEAoD1CCwAgJjA+o9L9iQjFgAsRmABAMQE
1r8uXJKMWACwEoEFABATWD9dviFdfgAAoCKwAABiAuvlZZj1aJBjAABPElgAADGBNdZuNNRhAIDH
CCwAgNjugTXgYjTgkQCAu+weWAAAua0Da9itaNiDAQC32DqwAACOsG9gDb4SDX48AOAT+wYWAMBB
Ng2sKfahKQ4JAPzfpoEFAHCcHQNromVooqMCAL/sGFgAAIfaLrCm24SmOzAAsF1gAQAcba/AmnQN
mvTYALCtvQILAOAEGwXW1DvQ1IcHgN1sFFgAAOfYJbAWWIAW+AQA2MQugQUAcJotAmuZ7WeZDwGA
tW0RWAAAZ1o/sBZbfRb7HABY0vqBBQBwssUDa8m9Z8mPAoCVLB5YAADnWzmwFl56Fv40AFjAyoEF
AHCJZQNr+Y1n+Q8EgHktG1gAAFdZM7A2WXc2+UwAmM6agQUAcKEFA2urXWerjwWAWSwYWAAA11ot
sDZcdDb8ZAAY3GqBBQBwuaUCa9stZ9sPB4AxLRVYAAAjWCewNl9xNv98ABjKOoEFADCIRQLLfvPi
EgBgGIsEFgDAOFYILMvNL64CAEawQmABAAxl+sCy2fzGhQDA5aYPLACA0cwdWNaad7kWALjW3IEF
ADCgiQPLTvMJlwMAF5o4sAAAxjRrYFlovuSKAOAqswYWAMCwpgws28yNXBQAXGLKwAIAGNl8gWWV
uYvrAoDzzRdYAACDmyyw7DEPcGkAcLLJAgsAYHwzBZYl5mGuDgDONFNgAQBMYZrAssE8yQUCwGmm
CSwAgFnMEVjWl4RrBIBzzBFYAAATmSCw7C4hlwkAJ5ggsAAA5jJ6YFlccq4UAI42emABAExn6MCy
tRzExQLAoYYOLACAGY0bWFaWQ7leADjOuIEFADCpQQPLvnIClwwABxk0sAAA5jViYFlWTuOqAeAI
IwYWAMDUhgssm8rJXDgA5IYLLACA2Y0VWNaUS7h2AGiNFVgAAAsYKLDsKBdy+QAQGiiwAADWMEpg
WVAu5wkAoDJKYAEALGOIwLKdDMJDAEBiiMACAFjJ9YFlNRmK5wCA510fWAAAi7k4sOwlA/IoAPAk
CxYAQOzKwLKUDMvTAMAzLFgAALHLAstGMjgPBAAPs2ABAMSuCSzryBQ8EwA8xoIFABC7ILDsIhPx
WADwAAsWAEDs7MCyiEzHkwHAvSxYAACxUwPLFjIpDwcAd7FgAQDEzgssK8jUPB8A3M6CBQAQOymw
7B8L8IgAcCMLFgBA7IzAsnwsw1MCwC0sWAAAscMDy+axGA8KLQBfsmABAMSODSxrx5I8KwB8zoIF
ABA7MLDsHAvzuADwiW/H/eo//z7udwMAjMs/EQIAxAQWAEBMYAEAxAQWAEBMYAEAxAQWAEBMYAEA
xAQWAEBMYAEAxAQWAEBMYAEAxAQWAEBMYAEAxAQWAEBMYAEAxAQWAEBMYAEAxAQWAEBMYAEAxF7f
3t7e/8Hr68lHYTcf/e0BwOwsWAAAsQ8XLAAAHmPBAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCI
CSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwA
gJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjAAgCICSwAgJjA
AgCI/QNLy7Rt4R4OXgAAAABJRU5ErkJgggpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3Nz
LXdlYmtpdC1jYW52YXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJraXQtY2FudmFzLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICswLDAgQEAKLWxheWVyIGF0ICgwLDApIHNpemUgODAweDYw
MAotICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAotbGF5ZXIgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCi0gIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAg
ICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKLSAgICAgIFJlbmRlcklt
YWdlIHtESVZ9IGF0ICgwLDApIHNpemUgMjA0eDIwNCBbYm9yZGVyOiAoMnB4IHNvbGlkICMwMDAw
MDApXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93
ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1yZXBhaW50LWV4cGVjdGVkLnBuZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13
ZWJraXQtY2FudmFzLXJlcGFpbnQtZXhwZWN0ZWQucG5nCShyZXZpc2lvbiAxNjE2MDYpCisrKyBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJr
aXQtY2FudmFzLXJlcGFpbnQtZXhwZWN0ZWQucG5nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzAs
MCBAQAotiVBORw0KLRoKLQAAAA1JSERSAAADIAAAAlgIAgAAABUUFScAAAApdEVYdGNoZWNrc3Vt
AGVkMDkwODczZjllZjc3OWYxMjI3Y2Y2N2FkOTJmZGVjt/h+9AAADS9JREFUeJzt3FlqHkcARlEp
eEUmC8wCTbakvBiHOBr+4XZ3Dee8Ci1EdZUeLp/Br29vby8AAHT+uPoAAACrEVgAADGBBQAQE1gA
ADGBBQAQE1gAADGBBQAQ+/bRD15fX888Bxvyf7ABsCoLFgBA7MMF66e/zjgE2/nr6gMAwJEsWAAA
MYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEF
ABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWI0f319+fL/6EADAGAQWAEBMYAV+bVdGLADg
RWABAOQE1rN+W62MWACAwAIAiAmsp7y7VxmxAGBzAgsAICawHvfJUmXEAoCdCSwAgJjAetCXG5UR
CwC2JbAAAGIC6xE3rlNGLADYk8ACAIgJrLvdtUsZsQBgQwILACAmsO7zwCJlxAKA3QgsAICYwLrD
w1uUEQsAtiKwAABiAutWT65QRiwA2IfAAgCICaybJPuTEQsANiGwAABiAutr4fJkxAKAHQgsAICY
wPpCvjkZsQBgeQILACAmsD5z0NpkxAKAtQksAICYwPrQoTuTEQsAFiawAABiAut9JyxMRiwAWJXA
AgCICax3nLYtGbEAYEkCCwAgJrB+d/KqZMQCgPUILACAmMD6j0v2JCMWACxGYAEAxATWvy5ckoxY
ALASgQUAEBNYP12+IV1+AACgIrAAAGIC6+VlmPVokGMAAE8SWAAAMYE11m401GEAgMcILACA2O6B
NeBiNOCRAIC77B5YAAC5rQNr2K1o2IMBALfYOrAAAI6wb2ANvhINfjwA4BP7BhYAwEE2Dawp9qEp
DgkA/N+mgQUAcJwdA2uiZWiiowIAv+wYWAAAh9ousKbbhKY7MACwXWABABxtr8CadA2a9NgAsK29
AgsA4AQbBdbUO9DUhweA3WwUWAAA59glsBZYgBb4BADYxC6BBQBwmi0Ca5ntZ5kPAYC1bRFYAABn
Wj+wFlt9FvscAFjS+oEFAHCyxQNryb1nyY8CgJUsHlgAAOdbObAWXnoW/jQAWMDKgQUAcIllA2v5
jWf5DwSAeS0bWAAAV1kzsDZZdzb5TACYzpqBBQBwoQUDa6tdZ6uPBYBZLBhYAADXWi2wNlx0Nvxk
ABjcaoEFAHC5pQJr2y1n2w8HgDEtFVgAACNYJ7A2X3E2/3wAGMo6gQUAMIhFAst+8+ISAGAYiwQW
AMA4Vggsy80vrgIARrBCYAEADGX6wLLZ/MaFAMDlpg8sAIDRzB1Y1pp3uRYAuNbcgQUAMKCJA8tO
8wmXAwAXmjiwAADGNGtgWWi+5IoA4CqzBhYAwLCmDCzbzI1cFABcYsrAAgAY2XyBZZW5i+sCgPPN
F1gAAIObLLDsMQ9waQBwsskCCwBgfDMFliXmYa4OAM40U2ABAExhmsCywTzJBQLAaaYJLACAWcwR
WNaXhGsEgHPMEVgAABOZILDsLiGXCQAnmCCwAADmMnpgWVxyrhQAjjZ6YAEATGfowLK1HMTFAsCh
hg4sAIAZjRtYVpZDuV4AOM64gQUAMKlBA8u+cgKXDAAHGTSwAADmNWJgWVZO46oB4AgjBhYAwNSG
CyybyslcOADkhgssAIDZjRVY1pRLuHYAaI0VWAAACxgosOwoF3L5ABAaKLAAANYwSmBZUC7nCQCg
MkpgAQAsY4jAsp0MwkMAQGKIwAIAWMn1gWU1GYrnAIDnXR9YAACLuTiw7CUD8igA8CQLFgBA7MrA
spQMy9MAwDMsWAAAscsCy0YyOA8EAA+zYAEAxK4JLOvIFDwTADzGggUAELsgsOwiE/FYAPAACxYA
QOzswLKITMeTAcC9LFgAALFTA8sWMikPBwB3sWABAMTOCywryNQ8HwDczoIFABA7KbDsHwvwiABw
IwsWAEDsjMCyfCzDUwLALSxYAACxwwPL5rEYDwotAF+yYAEAxI4NLGvHkjwrAHzOggUAEDswsOwc
C/O4APCJb8f96j//Pu53AwCMyz8RAgDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExg
AQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEXt/e3t7/wevr
yUdhNx/97QHA7CxYAACxDxcsAAAeY8ECAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIj9A0vL
tG3hHg5eAAAAAElFTkSuQmCCClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0
LWNhbnZhcy1yZXBhaW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJraXQtY2FudmFzLXJl
cGFpbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJraXQtY2FudmFzLXJlcGFp
bnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzAsMCBAQAotbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCi0gIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi1s
YXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDAp
IHNpemUgODAweDYwMAotICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4
NAotICAgICAgUmVuZGVySW1hZ2Uge0RJVn0gYXQgKDAsMCkgc2l6ZSAyMDR4MjA0IFtib3JkZXI6
ICgycHggc29saWQgIzAwMDAwMCldCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctZWxlbWVudHMtb3V0LW9mLWJvdW5kcy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0
L2NhbnZhcy93ZWJnbC9kcmF3LWVsZW1lbnRzLW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3Qv
Y2FudmFzL3dlYmdsL2RyYXctZWxlbWVudHMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEsNjIgKzAsMCBAQAotUFZSOihFcnJvcik6IFBWUlNSVkFsbG9jRGV2
aWNlTWVtOiBFcnJvciAzIHJldHVybmVkIFs5MjUsIC9icmlkZ2VkX3B2cl9nbHVlLmNdCi1QVlI6
KEVycm9yKTogZ2xCdWZmZXJEYXRhOiBDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG9iamVjdCBb
Nzg2LCAvYnVmb2JqLmNdCi1UZXN0IG9mIGRyYXdFbGVtZW50cyB3aXRoIG91dC1vZi1ib3VuZHMg
cGFyYW1ldGVycwotCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCi0KLVRlc3QgZW1wdHkgaW5k
ZXggYnVmZmVyCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAz
LCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjog
SU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJ
QU5HTEVTLCAxMDAwMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0
ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50
cyhjb250ZXh0LlRSSUFOR0xFUywgMTAwMDAwMDAwMDAwMDAsIGNvbnRleHQuVU5TSUdORURfQllU
RSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBB
U1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIC0xLCBjb250ZXh0LlVO
U0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxV
RS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDEsIGNvbnRl
eHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElE
X09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMs
IDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgLTEpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJv
cjogSU5WQUxJRF9WQUxVRS4KLUZBSUwgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklB
TkdMRVMsIDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZXhwZWN0ZWQ6IE5PX0VSUk9SLiBX
YXMgT1VUX09GX01FTU9SWS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklB
TkdMRVMsIC0xLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDEpIGdlbmVyYXRlZCBleHBlY3RlZCBH
TCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4
dC5UUklBTkdMRVMsIDEsIGNvbnRleHQuVU5TSUdORURfQllURSwgLTEpIGdlbmVyYXRlZCBleHBl
Y3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KLQotVGVzdCBidWZmZXIgd2l0aCAzIGJ5dGUg
aW5kZXhlcwotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMywg
Y29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5P
X0VSUk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMywg
Y29udGV4dC5VTlNJR05FRF9JTlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5W
QUxJRF9FTlVNLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cygweDAwMDksIDMsIGNvbnRleHQu
VU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX0VO
VU0uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBjb250
ZXh0LlVOU0lHTkVEX0JZVEUsIDIpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJ
RF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVT
LCAxMDAwMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wg
ZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250
ZXh0LlRSSUFOR0xFUywgMTAwMDAwMDAwMDAwMDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkg
Z2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29u
dGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIC0xLCBjb250ZXh0LlVOU0lHTkVE
X0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KLVBB
U1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDAsIGNvbnRleHQuVU5T
SUdORURfQllURSwgLTEpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxV
RS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIC0xLCBjb250
ZXh0LlVOU0lHTkVEX0JZVEUsIDEpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJ
RF9WQUxVRS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDEs
IGNvbnRleHQuVU5TSUdORURfQllURSwgLTEpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjog
SU5WQUxJRF9WQUxVRS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdM
RVMsIDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgNCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVy
cm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdM
RVMsIDB4ZmZmZmZmZmYsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVj
dGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhj
b250ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBn
ZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250
ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgY29udGV4dC5V
TlNJR05FRF9CWVRFLCAweDdmZmZmZmZmKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElO
VkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmJ1ZmZlckRhdGEoY29udGV4dC5FTEVNRU5U
X0FSUkFZX0JVRkZFUiwgKG5ldyBVaW50OEFycmF5KFsgMywgMCwgMSwgMiBdKSkuc3ViYXJyYXko
MSksIGNvbnRleHQuU1RBVElDX0RSQVcpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9f
RVJST1IuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBj
b250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9f
RVJST1IuCi1QQVNTIGNvbnRleHQuYnVmZmVyU3ViRGF0YShjb250ZXh0LkVMRU1FTlRfQVJSQVlf
QlVGRkVSLCAwLCBuZXcgVWludDhBcnJheShbIDMsIDAsIDFdKSkgZ2VuZXJhdGVkIGV4cGVjdGVk
IEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5U
UklBTkdMRVMsIDMsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVk
IEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5idWZmZXJTdWJEYXRh
KGNvbnRleHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIChuZXcgVWludDhBcnJheShbIDMsIDAs
IDEsIDIgXSkpLnN1YmFycmF5KDEpKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VS
Uk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMywgY29u
dGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VS
Uk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29u
dGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VS
Uk9SLgotCi1UZXN0IGJ1ZmZlciB3aXRoIGludGVybGVhdmVkICgzKzIpIGZsb2F0IHZlY3RvcnMK
LVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDksIGNvbnRleHQu
VU5TSUdORURfU0hPUlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1Iu
Ci1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCA5LCBjb250ZXh0
LkZMT0FULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfRU5VTS4KLVBB
U1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDksIGNvbnRleHQuU0hP
UlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9FTlVNLgotUEFTUyBj
b250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgOSwgY29udGV4dC5VTlNJR05F
RF9JTlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9FTlVNLgotUEFT
UyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgOSwgY29udGV4dC5VTlNJ
R05FRF9TSE9SVCwgMTAwMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09Q
RVJBVElPTi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDEy
LCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6
IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRS
SUFOR0xFUywgMTUsIGNvbnRleHQuVU5TSUdORURfU0hPUlQsIDApIGdlbmVyYXRlZCBleHBlY3Rl
ZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRz
KGNvbnRleHQuVFJJQU5HTEVTLCAxOCwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5k
cmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDMsIGNvbnRleHQuVU5TSUdORURfU0hPUlQs
IDIqMTUpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1Q
QVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAweGZmZmZmZmZmLCBj
b250ZXh0LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElO
VkFMSURfVkFMVUUuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVT
LCAweDdmZmZmZmZmLCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5lcmF0ZWQgZXhwZWN0
ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50
cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVu
dHMoY29udGV4dC5UUklBTkdMRVMsIDYsIGNvbnRleHQuVU5TSUdORURfU0hPUlQsIDApIGdlbmVy
YXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1l
bnRzKGNvbnRleHQuVFJJQU5HTEVTLCA2LCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAxKSBnZW5l
cmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0
LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgNiwgY29udGV4dC5VTlNJR05FRF9TSE9S
VCwgMikgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4
dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDYsIGNvbnRleHQuVU5TSUdORURfU0hP
UlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi0K
LVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2ZyYW1l
YnVmZmVyLW9iamVjdC1hdHRhY2htZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2ZyYW1lYnVmZmVy
LW9iamVjdC1hdHRhY2htZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9mcmFtZWJ1ZmZl
ci1vYmplY3QtYXR0YWNobWVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNjEy
ICswLDAgQEAKLVRlc3QgZnJhbWVidWZmZXIgb2JqZWN0IGF0dGFjaG1lbnQgYmVoYXZpb3JzCi0K
LU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1EaW1lbnNpb25zIDAgeCAwCi1DcmVhdGUg
cmVuZGVyYnVmZmVycwotUEFTUyBnbCA9IGNyZWF0ZTNEQ29udGV4dCgpIGlzIG5vbi1udWxsLgot
UEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGRlcHRo
QnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mgc3RlbmNpbEJ1ZmZlciA9
IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGRlcHRoU3RlbmNpbEJ1ZmZlciA9IGds
LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1BdHRhY2ggZGVwdGggdXNpbmcgREVQVEhfQVRUQUNI
TUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04g
OiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoIHVzaW5nIFNURU5DSUxfQVRUQUNITUVOVAotUEFT
UyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiA6IAotQXR0YWNoIGRlcHRoIHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAotUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotQXR0YWNoIHN0ZW5jaWwgdXNpbmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGds
LmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhn
bC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRh
Y2ggc3RlbmNpbCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZy
YW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJV
RkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggc3RlbmNp
bCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJh
bWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aFN0
ZW5jaWwgdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVw
dGhTdGVuY2lsIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJh
bWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aFN0
ZW5jaWwgdXNpbmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1l
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGgsIHRo
ZW4gc3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1
ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQg
MzYwNTQKLUF0dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNT
IGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGds
LkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIGRlcHRoLCB0aGVuIGRlcHRoU3Rl
bmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigp
IGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
Z2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQK
LUF0dGFjaCBkZXB0aFN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1Mg
ZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggc3RlbmNpbCwgdGhlbiBkZXB0aFN0
ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIo
KSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNT
IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0
Ci1BdHRhY2ggZGVwdGhTdGVuY2lsLCB0aGVuIHN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBB
U1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Z2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggY29sb3IgcmVuZGVyYnVmZmVy
IHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCQTQKLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVh
dGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
Ci1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVk
IDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGNvbG9yIHJlbmRlcmJ1ZmZlciB3
aXRoIGludGVybmFsZm9ybWF0ID09IFJHQjVfQTEKLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVh
dGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
Ci1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVk
IDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGNvbG9yIHJlbmRlcmJ1ZmZlciB3
aXRoIGludGVybmFsZm9ybWF0ID09IFJHQjU2NQotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQg
MzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1DcmVhdGUgYW5kIGF0dGFjaCBkZXB0aFN0ZW5j
aWwgcmVuZGVyYnVmZmVyCi1QQVNTIGRlcHRoU3RlbmNpbEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJC
VUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9XSURUSCkgaXMgd2lkdGgKLVBBU1MgZ2wuZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0hFSUdIVCkg
aXMgaGVpZ2h0Ci1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZG
RVIsIGdsLlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQpIGlzIGdsLkRFUFRIX1NURU5DSUwK
LVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVO
REVSQlVGRkVSX1JFRF9TSVpFKSBpcyAwCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFKSBpcyAwCi1QQVNT
IGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJV
RkZFUl9CTFVFX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGds
LlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUpIGlzIDAKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVh
dGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJB
TUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotCi1EaW1lbnNp
b25zIDAgeCAyCi1DcmVhdGUgcmVuZGVyYnVmZmVycwotUEFTUyBnbCA9IGNyZWF0ZTNEQ29udGV4
dCgpIGlzIG5vbi1udWxsLgotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGRlcHRoQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1Mgc3RlbmNpbEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGRlcHRo
U3RlbmNpbEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1BdHRhY2ggZGVwdGgg
dXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigp
IGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVy
bmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoIHVzaW5nIFNURU5D
SUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1u
dWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNT
IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoIHVzaW5nIERFUFRIX1NURU5DSUxf
QVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIHN0ZW5jaWwgdXNpbmcgU1RFTkNJTF9BVFRBQ0hN
RU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OIDogCi1BdHRhY2ggc3RlbmNpbCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNT
IGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
IDogCi1BdHRhY2ggc3RlbmNpbCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1Mg
ZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04g
OiAKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1Q
QVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OIDogCi1BdHRhY2ggZGVwdGhTdGVuY2lsIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKLVBBU1Mg
ZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04g
OiAKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZi
byA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDog
Ci1BdHRhY2ggZGVwdGgsIHRoZW4gc3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8g
PSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoLCBjYXVz
aW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIGRl
cHRoLCB0aGVuIGRlcHRoU3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBkZXB0aFN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNp
bmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVs
bC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggc3Rl
bmNpbCwgdGhlbiBkZXB0aFN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wu
Y3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggZGVwdGhTdGVuY2lsLCB0aGVuIHN0ZW5jaWwsIGNh
dXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2gg
Y29sb3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCQTQKLVBBU1MgY29s
b3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVh
dGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJB
TUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGNv
bG9yIHJlbmRlcmJ1ZmZlciB3aXRoIGludGVybmFsZm9ybWF0ID09IFJHQjVfQTEKLVBBU1MgY29s
b3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVh
dGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJB
TUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGNv
bG9yIHJlbmRlcmJ1ZmZlciB3aXRoIGludGVybmFsZm9ybWF0ID09IFJHQjU2NQotUEFTUyBjb2xv
ckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1DcmVhdGUgYW5k
IGF0dGFjaCBkZXB0aFN0ZW5jaWwgcmVuZGVyYnVmZmVyCi1QQVNTIGRlcHRoU3RlbmNpbEJ1ZmZl
ciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9XSURUSCkgaXMgd2lkdGgK
LVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVO
REVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCkgaXMgZ2wuREVQVEhfU1RFTkNJTAotUEFTUyBnbC5n
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJf
UkVEX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRF
UkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0JMVUVf
U0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVG
RkVSLCBnbC5SRU5ERVJCVUZGRVJfQUxQSEFfU0laRSkgaXMgMAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikg
cmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi0KLURpbWVuc2lvbnMgMiB4IDAK
LUNyZWF0ZSByZW5kZXJidWZmZXJzCi1QQVNTIGdsID0gY3JlYXRlM0RDb250ZXh0KCkgaXMgbm9u
LW51bGwuCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZGVwdGhCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBzdGVuY2ls
QnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhTdGVuY2lsQnVm
ZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBERVBU
SF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
Z2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQK
LVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGggdXNpbmcgU1RFTkNJTF9BVFRBQ0hN
RU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGggdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OIDogCi1BdHRhY2ggc3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1Mg
ZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04g
OiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wu
Y3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGds
LkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFj
aCBzdGVuY2lsIHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNo
IGRlcHRoU3RlbmNpbCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0g
Z2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0
dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNo
IGRlcHRoU3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3Jl
YXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZS
QU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBk
ZXB0aCwgdGhlbiBzdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBy
ZXR1cm5lZCAzNjA1NAotQXR0YWNoIHN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNpbmcgY29uZmxp
Y3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggZGVwdGgsIHRoZW4g
ZGVwdGhTdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1l
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5l
ZCAzNjA1NAotQXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhlbiBkZXB0aCwgY2F1c2luZyBjb25mbGlj
dAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBzdGVuY2lsLCB0aGVu
IGRlcHRoU3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFt
ZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJu
ZWQgMzYwNTQKLUF0dGFjaCBkZXB0aFN0ZW5jaWwsIHRoZW4gc3RlbmNpbCwgY2F1c2luZyBjb25m
bGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBjb2xvciByZW5k
ZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0JBNAotUEFTUyBjb2xvckJ1ZmZlciA9
IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikg
cmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggY29sb3IgcmVuZGVy
YnVmZmVyIHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNV9BMQotUEFTUyBjb2xvckJ1ZmZlciA9
IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikg
cmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggY29sb3IgcmVuZGVy
YnVmZmVyIHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNTY1Ci1QQVNTIGNvbG9yQnVmZmVyID0g
Z2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBy
ZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUNyZWF0ZSBhbmQgYXR0YWNoIGRl
cHRoU3RlbmNpbCByZW5kZXJidWZmZXIKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3Jl
YXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGds
LlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0hFSUdIVCkgaXMgaGVpZ2h0Ci1QQVNTIGds
LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZF
Ul9JTlRFUk5BTF9GT1JNQVQpIGlzIGdsLkRFUFRIX1NURU5DSUwKLVBBU1MgZ2wuZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX1JFRF9TSVpF
KSBpcyAwCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIs
IGdsLlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFKSBpcyAwCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9CTFVFX1NJWkUpIGlz
IDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wu
UkVOREVSQlVGRkVSX0FMUEhBX1NJWkUpIGlzIDAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
Ci1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVk
IDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotCi1EaW1lbnNpb25zIDIgeCAyCi1DcmVhdGUg
cmVuZGVyYnVmZmVycwotUEFTUyBnbCA9IGNyZWF0ZTNEQ29udGV4dCgpIGlzIG5vbi1udWxsLgot
UEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGRlcHRo
QnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mgc3RlbmNpbEJ1ZmZlciA9
IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGRlcHRoU3RlbmNpbEJ1ZmZlciA9IGds
LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1BdHRhY2ggZGVwdGggdXNpbmcgREVQVEhfQVRUQUNI
TUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDUzCi1BdHRhY2gg
ZGVwdGggdXNpbmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1l
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGggdXNp
bmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikg
cmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggc3RlbmNpbCB1c2lu
ZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5l
ZCAzNjA1MwotQXR0YWNoIHN0ZW5jaWwgdXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8g
PSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAot
QXR0YWNoIHN0ZW5jaWwgdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1B
dHRhY2ggZGVwdGhTdGVuY2lsIHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAotUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDUzCi1BdHRhY2ggZGVwdGhTdGVuY2ls
IHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIo
KSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1
cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNp
bmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkg
aXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJu
ZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGgsIHRoZW4gc3RlbmNp
bCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wu
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNjEKLUF0
dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGds
LmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSByZXR1cm5lZCAzNjA2MQotQXR0YWNoIGRlcHRoLCB0aGVuIGRlcHRoU3RlbmNpbCwgY2F1
c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1u
dWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNjEKLUF0dGFjaCBk
ZXB0aFN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wu
Y3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpIHJldHVybmVkIDM2MDYxCi1BdHRhY2ggc3RlbmNpbCwgdGhlbiBkZXB0aFN0ZW5jaWwsIGNh
dXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDYxCi1BdHRhY2gg
ZGVwdGhTdGVuY2lsLCB0aGVuIHN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0g
Z2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVC
VUZGRVIpIHJldHVybmVkIDM2MDYxCi1BdHRhY2ggY29sb3IgcmVuZGVyYnVmZmVyIHdpdGggaW50
ZXJuYWxmb3JtYXQgPT0gUkdCQTQKLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJi
dWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDUzCi1B
dHRhY2ggY29sb3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNV9BMQot
UEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTMKLUF0dGFjaCBjb2xvciByZW5kZXJidWZm
ZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0I1NjUKLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5j
cmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigp
IGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVy
bmVkIDM2MDUzCi1DcmVhdGUgYW5kIGF0dGFjaCBkZXB0aFN0ZW5jaWwgcmVuZGVyYnVmZmVyCi1Q
QVNTIGRlcHRoU3RlbmNpbEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1u
dWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNT
IGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJV
RkZFUl9XSURUSCkgaXMgd2lkdGgKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGds
LlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0hFSUdIVCkgaXMgaGVpZ2h0Ci1QQVNTIGds
LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZF
Ul9JTlRFUk5BTF9GT1JNQVQpIGlzIGdsLkRFUFRIX1NURU5DSUwKLVBBU1MgZ2wuZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX1JFRF9TSVpF
KSBpcyAwCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIs
IGdsLlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFKSBpcyAwCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9CTFVFX1NJWkUpIGlz
IDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wu
UkVOREVSQlVGRkVSX0FMUEhBX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUpID4gMCBp
cyB0cnVlCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIs
IGdsLlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUpID4gMCBpcyB0cnVlCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJh
bWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSByZXR1cm5lZCAzNjA1MwotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBkZXB0aEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
Ci0KLUF0dGFjaG1lbnRzIG9mIGRpZmZlcmVudCBzaXplcyBzaG91bGQgYmUgRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9ESU1FTlNJT05TIChPcGVuR0wgRVMgMi4wIDQuNC41KQotUEFTUyBmYm8gPSBn
bC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBjb2xvckJ1ZmZlciA9IGds
LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBkZXB0aEJ1ZmZlciA9IGds
LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Z2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3YXMgRlJBTUVC
VUZGRVJfQ09NUExFVEUKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJV
RkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyB3YXMgRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
Ci1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBi
ZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3YXMgRlJBTUVCVUZGRVJfQ09NUExFVEUKLVBBU1MgZ2wu
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyB3YXMgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1F
TlNJT05TIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECi1QQVNTIGdsLmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3
YXMgRlJBTUVCVUZGRVJfQ09NUExFVEUKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3Vs
ZCBiZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgd2FzIEZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfRElNRU5TSU9OUyBvciBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAotUEFTUyBnbC5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZG
RVJfQ09NUExFVEUgd2FzIEZSQU1FQlVGRkVSX0NPTVBMRVRFCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0NPTVBMRVRFIHdhcyBGUkFNRUJVRkZFUl9D
T01QTEVURQotCi1Xcm9uZyBzdG9yYWdlIHR5cGUgZm9yIHR5cGUgb2YgYXR0YWNobWVudCBiZSBG
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgKE9wZW5HTCBFUyAyLjAgNC40LjUpCi1Q
QVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBG
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgd2FzIEZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfQVRUQUNITUVOVCBvciBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAotUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfQ09N
UExFVEUgd2FzIEZSQU1FQlVGRkVSX0NPTVBMRVRFCi0KLTAgc2l6ZSBhdHRhY2htZW50IHNob3Vs
ZCBiZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgKE9wZW5HTCBFUyAyLjAgNC40
LjUpCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3Vs
ZCBiZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgd2FzIEZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfQVRUQUNITUVOVCBvciBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi0KLU5vIGF0dGFjaG1lbnRzIHNo
b3VsZCBiZSBJTkNPTVBMRVRFX0ZSQU1FQlVGRkVSX01JU1NJTkdfQVRUQUNITUVOVCAoT3BlbkdM
IEVTIDIuMCA0LjQuNSkKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hv
dWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIHdhcyBGUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCBvciBGUkFNRUJVRkZFUl9VTlNV
UFBPUlRFRAotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5v
bi1udWxsLgotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBz
aG91bGQgYmUgRlJBTUVCVUZGRVJfQ09NUExFVEUgd2FzIEZSQU1FQlVGRkVSX0NPTVBMRVRFCi1Q
QVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBG
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCB3YXMgRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgb3IgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQK
LVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotCi1UZXN0IGRy
YXdpbmcgb3IgcmVhZGluZyBmcm9tIGFuIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZmJv
ID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgY29sb3JCdWZmZXIg
PSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZGVwdGhCdWZmZXIg
PSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfQ09NUExFVEUgd2FzIEZS
QU1FQlVGRkVSX0NPTVBMRVRFCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJB
TUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgd2Fz
IEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyBvciBGUkFNRUJVRkZFUl9VTlNVUFBP
UlRFRAotCi1EcmF3aW5nIG9yIHJlYWRpbmcgZnJvbSBhbiBpbmNvbXBsZXRlIGZyYW1lYnVmZmVy
IHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTgotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBkcmF3QXJyYXlz
IHdpdGggaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogcmVhZFBpeGVscyBmcm9tIGlu
Y29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IGNvcHlUZXhJbWFnZTJEIGZyb20gaW5jb21w
bGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogY29weVRleFN1YkltYWdlMkQgZnJvbSBpbmNvbXBs
ZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBjbGVhciB3aXRoIGluY29tcGxldGUgZnJhbWVidWZm
ZXIKLVBBU1MgZmJvMiA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCB3YXMgRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgb3IgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQKLQot
RHJhd2luZyBvciByZWFkaW5nIGZyb20gYW4gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlciBzaG91bGQg
Z2VuZXJhdGUgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04KLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogZHJhd0FycmF5cyB3aXRoIGlu
Y29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IHJlYWRQaXhlbHMgZnJvbSBpbmNvbXBsZXRl
IGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9P
UEVSQVRJT04gOiBjb3B5VGV4SW1hZ2UyRCBmcm9tIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6IGNvcHlU
ZXhTdWJJbWFnZTJEIGZyb20gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogY2xlYXIg
d2l0aCBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRl
UmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi0KLURyYXdpbmcgb3IgcmVhZGluZyBmcm9tIGFu
IGluY29tcGxldGUgZnJhbWVidWZmZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTiA6IGRyYXdBcnJheXMgd2l0aCBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiByZWFkUGl4ZWxzIGZyb20gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogY29w
eVRleEltYWdlMkQgZnJvbSBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBjb3B5VGV4
U3ViSW1hZ2UyRCBmcm9tIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IGNsZWFyIHdp
dGggaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQotCi1URVNUIENPTVBMRVRFCi0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVy
cnkvZmFzdC9mb3Jtcy9kYXRhbGlzdC9pbnB1dC1saXN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvZm9ybXMvZGF0YWxpc3Qv
aW5wdXQtbGlzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9mb3Jtcy9kYXRhbGlzdC9pbnB1dC1saXN0LWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzNSArMCwwIEBACi1UZXN0IGZvciB0aGUgbGlz
dCBhdHRyaWJ1dGUuCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1QQVNTIGlucHV0
Lmxpc3QgaXMgbnVsbAotUEFTUyBpbnB1dC5saXN0IGlzIG51bGwKLVBBU1MgaW5wdXQubGlzdCBp
cyBudWxsCi1QQVNTIGRhdGFsaXN0LmNsYXNzTmFtZSBpcyAiZm9ybWVyIgotUEFTUyBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgidGV4dCIpLmxpc3QgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImRsMSIpCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2giKS5saXN0IGlzIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJkbDEiKQotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgidXJsIikubGlzdCBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGwxIikKLVBBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlbGVwaG9uZSIpLmxpc3QgaXMgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImRsMSIpCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlbWFpbCIpLmxp
c3QgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRsMSIpCi1GQUlMIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJkYXRldGltZSIpLmxpc3Qgc2hvdWxkIGJlIFtvYmplY3QgSFRNTERhdGFMaXN0
RWxlbWVudF0uIFdhcyBudWxsLgotRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGF0ZSIp
Lmxpc3Qgc2hvdWxkIGJlIFtvYmplY3QgSFRNTERhdGFMaXN0RWxlbWVudF0uIFdhcyBudWxsLgot
RkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGgiKS5saXN0IHNob3VsZCBiZSBbb2Jq
ZWN0IEhUTUxEYXRhTGlzdEVsZW1lbnRdLiBXYXMgbnVsbC4KLUZBSUwgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoIndlZWsiKS5saXN0IHNob3VsZCBiZSBbb2JqZWN0IEhUTUxEYXRhTGlzdEVsZW1l
bnRdLiBXYXMgbnVsbC4KLUZBSUwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRpbWUiKS5saXN0
IHNob3VsZCBiZSBbb2JqZWN0IEhUTUxEYXRhTGlzdEVsZW1lbnRdLiBXYXMgbnVsbC4KLUZBSUwg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhdGV0aW1lLWxvY2FsIikubGlzdCBzaG91bGQgYmUg
W29iamVjdCBIVE1MRGF0YUxpc3RFbGVtZW50XS4gV2FzIG51bGwuCi1QQVNTIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJudW1iZXIiKS5saXN0IGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJk
bDEiKQotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFuZ2UiKS5saXN0IGlzIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJkbDEiKQotRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29sb3IiKS5saXN0IHNob3VsZCBiZSBbb2JqZWN0IEhUTUxEYXRhTGlzdEVsZW1lbnRdLiBXYXMg
bnVsbC4KLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhpZGRlbiIpLmxpc3QgaXMgbnVs
bAotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFzc3dvcmQiKS5saXN0IGlzIG51bGwK
LVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoZWNrYm94IikubGlzdCBpcyBudWxsCi1Q
QVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyYWRpbyIpLmxpc3QgaXMgbnVsbAotUEFTUyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZSIpLmxpc3QgaXMgbnVsbAotUEFTUyBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgic3VibWl0IikubGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJpbWFnZSIpLmxpc3QgaXMgbnVsbAotUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicmVzZXQiKS5saXN0IGlzIG51bGwKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImJ1dHRvbiIpLmxpc3QgaXMgbnVsbAotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQotCi1URVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5
L2Zhc3QvZm9ybXMvbnVtYmVyL251bWJlci12YWxpZGF0aW9uLW1lc3NhZ2UtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9mb3Jt
cy9udW1iZXIvbnVtYmVyLXZhbGlkYXRpb24tbWVzc2FnZS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9mb3Jtcy9u
dW1iZXIvbnVtYmVyLXZhbGlkYXRpb24tbWVzc2FnZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjEgKzAsMCBAQAotVGVzdCBmb3IgdmFsaWRhdGlvbk1lc3NhZ2UgSURMIGF0dHJp
YnV0ZSBmb3IgPGlucHV0IHR5cGU9bnVtYmVyPgotCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
Ci0KLQotTm8gbWVzc2FnZQotUEFTUyB0ZXN0SXQoIiIsICIiLCAiIikgaXMgIiIKLVZhbHVlIG1p
c3NpbmcKLUZBSUwgdGVzdEl0KCIiLCAiIiwgIiIpIHNob3VsZCBiZSB2YWx1ZSBtaXNzaW5nLiBX
YXMgSW5wdXQgdmFsdWUgbWlzc2luZy4KLVR5cGUgbWlzbWF0Y2gKLVBBU1MgdGVzdEl0KCJmb28i
LCAiIiwgIiIpIGlzICIiCi1SYW5nZSBvdmVyZmxvdwotRkFJTCB0ZXN0SXQoIjIwMCIsICIiLCAi
MTAwIikgc2hvdWxkIGJlIHJhbmdlIG92ZXJmbG93LiBXYXMgVmFsdWUgbXVzdCBiZSBsZXNzIHRo
YW4gb3IgZXF1YWwgdG8gMTAwLgotUmFuZ2UgdW5kZXJmbG93Ci1GQUlMIHRlc3RJdCgiMTAiLCAi
NTAiLCAiMTAwIikgc2hvdWxkIGJlIHJhbmdlIHVuZGVyZmxvdy4gV2FzIFZhbHVlIG11c3QgYmUg
Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDUwLgotU3RlcCBtaXNtYXRjaAotRkFJTCB0ZXN0SXQo
IjU1IiwgIjAiLCAiMTAwIiwgIjEwIikgc2hvdWxkIGJlIHN0ZXAgbWlzbWF0Y2guIFdhcyBTdGVw
IG1pc21hdGNoLgotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBM
RVRFCi0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9tZWRpYS93
M2MvdGVzdF9tZWRpYV9xdWVyaWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvbWVkaWEvdzNjL3Rlc3RfbWVkaWFfcXVlcmll
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L2JsYWNrYmVycnkvZmFzdC9tZWRpYS93M2MvdGVzdF9tZWRpYV9xdWVyaWVzLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSwzMDUgKzAsMCBAQAotCi0KLVBBU1MgcXVlcnkgKG9yaWVu
dGF0aW9uKSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBxdWVyeSBub3QgKG9yaWVudGF0aW9u
KSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgcXVlcnkgb25seSAob3JpZW50YXRpb24p
IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBxdWVyeSBhbGwgYW5kIChvcmllbnRhdGlv
bikgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgcXVlcnkgbm90IGFsbCBhbmQgKG9yaWVudGF0
aW9uKSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBxdWVyeSBvbmx5IGFsbCBhbmQgKG9yaWVu
dGF0aW9uKSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBxdWVyeSAob3JpZW50YXRpb246ICds
YW5kc2NhcGUnKSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0
aCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAwIHNob3VsZCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gd2lkdGg6IDBweCBzaG91bGQgYmUgcGFyc2Vh
YmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAwZW0gc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBB
U1MgZXhwcmVzc2lvbiB3aWR0aDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVz
c2lvbiBtaW4td2lkdGg6IC0wIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
bWF4LXdpZHRoOiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRo
OiAtMGNtIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gd2lkdGg6IDFweCBz
aG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAwLjAwMW1tIHNob3Vs
ZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gd2lkdGg6IDEwMDAwMHB4IHNob3VsZCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gd2lkdGg6IC0xcHggc2hvdWxkIG5vdCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gd2lkdGg6ICcyMHB4JyBzaG91bGQgbm90IGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4td2lkdGg6IC0xcHggc2hvdWxkIG5vdCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LXdpZHRoOiAtMXB4IHNob3VsZCBub3QgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi13aWR0aDogJzEwcHgnIHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC13aWR0aDogJzEwcHgnIHNob3VsZCBu
b3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAtMC4wMDAwMW1tIHNob3Vs
ZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAtMTAwMDAwZW0gc2hv
dWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLXdpZHRoIHNob3VsZCBu
b3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC13aWR0aCBzaG91bGQgbm90IGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQgc2hvdWxkIGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IDAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiBoZWlnaHQ6IDBweCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9u
IGhlaWdodDogMGVtIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0
OiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1oZWlnaHQ6IC0w
IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWhlaWdodDogLTAgc2hv
dWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IC0wY20gc2hvdWxkIGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IDFweCBzaG91bGQgYmUgcGFyc2Vh
YmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogMC4wMDFtbSBzaG91bGQgYmUgcGFyc2VhYmxl
IAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogMTAwMDAwcHggc2hvdWxkIGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IC0xcHggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAnMjBweCcgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gbWluLWhlaWdodDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBtYXgtaGVpZ2h0OiAtMXB4IHNob3VsZCBub3QgYmUgcGFyc2VhYmxl
IAotUEFTUyBleHByZXNzaW9uIG1pbi1oZWlnaHQ6ICcxMHB4JyBzaG91bGQgbm90IGJlIHBhcnNl
YWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtaGVpZ2h0OiAnMTBweCcgc2hvdWxkIG5vdCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAtMC4wMDAwMW1tIHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogLTEwMDAwMGVtIHNob3VsZCBu
b3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1oZWlnaHQgc2hvdWxkIG5vdCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWhlaWdodCBzaG91bGQgbm90IGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGggc2hvdWxkIGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IDAgc2hvdWxkIGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IDBweCBzaG91bGQgYmUgcGFyc2VhYmxlIAot
UEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDogMGVtIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFT
UyBleHByZXNzaW9uIG1pbi1kZXZpY2Utd2lkdGg6IC0wIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gbWF4LWRldmljZS13aWR0aDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IC0wY20gc2hvdWxkIGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IDFweCBzaG91bGQgYmUgcGFyc2VhYmxlIAot
UEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDogMC4wMDFtbSBzaG91bGQgYmUgcGFyc2VhYmxl
IAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDogMTAwMDAwcHggc2hvdWxkIGJlIHBhcnNl
YWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IC0xcHggc2hvdWxkIG5vdCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAnMjBweCcgc2hvdWxkIG5v
dCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWRldmljZS13aWR0aDogLTFweCBz
aG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtZGV2aWNlLXdpZHRo
OiAtMXB4IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1kZXZp
Y2Utd2lkdGg6ICcxMHB4JyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBtYXgtZGV2aWNlLXdpZHRoOiAnMTBweCcgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAtMC4wMDAwMW1tIHNob3VsZCBub3QgYmUgcGFyc2Vh
YmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDogLTEwMDAwMGVtIHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1kZXZpY2Utd2lkdGggc2hvdWxkIG5v
dCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWRldmljZS13aWR0aCBzaG91bGQg
bm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0IHNob3VsZCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWhlaWdodDogMCBzaG91bGQgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1oZWlnaHQ6IDBweCBzaG91bGQgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1oZWlnaHQ6IDBlbSBzaG91bGQgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1oZWlnaHQ6IC0wIHNob3VsZCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWRldmljZS1oZWlnaHQ6IC0wIHNob3VsZCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWRldmljZS1oZWlnaHQ6IC0wIHNob3Vs
ZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWhlaWdodDogLTBjbSBzaG91
bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1oZWlnaHQ6IDFweCBzaG91
bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1oZWlnaHQ6IDAuMDAxbW0g
c2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAxMDAw
MDBweCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1oZWlnaHQ6
IC0xcHggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWhl
aWdodDogJzIwcHgnIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1p
bi1kZXZpY2UtaGVpZ2h0OiAtMXB4IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHBy
ZXNzaW9uIG1heC1kZXZpY2UtaGVpZ2h0OiAtMXB4IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAot
UEFTUyBleHByZXNzaW9uIG1pbi1kZXZpY2UtaGVpZ2h0OiAnMTBweCcgc2hvdWxkIG5vdCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWRldmljZS1oZWlnaHQ6ICcxMHB4JyBzaG91
bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAtMC4w
MDAwMW1tIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1o
ZWlnaHQ6IC0xMDAwMDBlbSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBtaW4tZGV2aWNlLWhlaWdodCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVz
c2lvbiBtYXgtZGV2aWNlLWhlaWdodCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgYWxs
IGFuZCAod2lkdGg6IHdpZHRoIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKHdpZHRo
OiB3aWR0aCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAod2lkdGg6IHdp
ZHRoIC0xIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4td2lkdGg6IHdp
ZHRoIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi13aWR0aDogd2lkdGggKzEg
cHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi13aWR0aDogd2lkdGggLTEg
cHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LXdpZHRoOiB3aWR0aCBweCkgc2hv
dWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtd2lkdGg6IHdpZHRoICsxIHB4KSBzaG91bGQg
YXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC13aWR0aDogd2lkdGggKzEgcHgpIHNob3VsZCBub3Qg
YXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi13aWR0aDogd2lkdGggKzEgZW0pIHNob3VsZCBub3Qg
YXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi13aWR0aDogd2lkdGggLTEgZW0pIHNob3VsZCBhcHBs
eSAKLVBBU1MgYWxsIGFuZCAobWF4LXdpZHRoOiB3aWR0aCArMSBlbSkgc2hvdWxkIGFwcGx5IAot
UEFTUyBhbGwgYW5kIChtYXgtd2lkdGg6IHdpZHRoIC0xIGVtKSBzaG91bGQgbm90IGFwcGx5IAot
UEFTUyBhbGwgYW5kIChoZWlnaHQ6IGhlaWdodCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwg
YW5kIChoZWlnaHQ6IGhlaWdodCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFu
ZCAoaGVpZ2h0OiBoZWlnaHQgLTEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQg
KG1pbi1oZWlnaHQ6IGhlaWdodCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4t
aGVpZ2h0OiBoZWlnaHQgKzEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1p
bi1oZWlnaHQ6IGhlaWdodCAtMSBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgt
aGVpZ2h0OiBoZWlnaHQgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWhlaWdo
dDogaGVpZ2h0ICsxIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1oZWlnaHQ6
IGhlaWdodCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWhlaWdo
dDogaGVpZ2h0ICsxIGVtKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4taGVp
Z2h0OiBoZWlnaHQgLTEgZW0pIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWhlaWdo
dDogaGVpZ2h0ICsxIGVtKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1oZWlnaHQ6
IGhlaWdodCAtMSBlbSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLXdp
ZHRoOiBkZXZpY2Utd2lkdGggcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNl
LXdpZHRoOiBkZXZpY2Utd2lkdGggKzEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKGRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoIC0xIHB4KSBzaG91bGQgbm90IGFwcGx5IAot
UEFTUyBhbGwgYW5kIChtaW4tZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGggcHgpIHNob3VsZCBh
cHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoICsxIHB4
KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4tZGV2aWNlLXdpZHRoOiBkZXZp
Y2Utd2lkdGggLTEgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWRldmljZS13
aWR0aDogZGV2aWNlLXdpZHRoIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1k
ZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCArMSBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwg
YW5kIChtYXgtZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGggKzEgcHgpIHNob3VsZCBub3QgYXBw
bHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCArMSBlbSkg
c2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmljZS13aWR0aDogZGV2aWNl
LXdpZHRoIC0xIGVtKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2Utd2lk
dGg6IGRldmljZS13aWR0aCArMSBlbSkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgt
ZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGggLTEgZW0pIHNob3VsZCBub3QgYXBwbHkgCi1QQVNT
IGFsbCBhbmQgKGRldmljZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQgcHgpIHNob3VsZCBhcHBseSAK
LVBBU1MgYWxsIGFuZCAoZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCArMSBweCkgc2hvdWxk
IG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCAt
MSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmljZS1oZWlnaHQ6
IGRldmljZS1oZWlnaHQgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmlj
ZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQgKzEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFs
bCBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0IC0xIHB4KSBzaG91bGQgYXBw
bHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0IHB4KSBz
aG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVp
Z2h0ICsxIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2UtaGVpZ2h0
OiBkZXZpY2UtaGVpZ2h0ICsxIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kICht
aW4tZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCArMSBlbSkgc2hvdWxkIG5vdCBhcHBseSAK
LVBBU1MgYWxsIGFuZCAobWluLWRldmljZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQgLTEgZW0pIHNo
b3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWRldmljZS1oZWlnaHQ6IGRldmljZS1oZWln
aHQgKzEgZW0pIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWRldmljZS1oZWlnaHQ6
IGRldmljZS1oZWlnaHQgLTEgZW0pIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGhl
aWdodCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kICh3aWR0aCkgc2hvdWxkIG5vdCBhcHBs
eSAKLVBBU1MgYWxsIGFuZCAoaGVpZ2h0KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5k
ICh3aWR0aCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLWhlaWdodCkg
c2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChkZXZpY2Utd2lkdGgpIHNob3VsZCBhcHBseSAK
LVBBU1MgYWxsIGFuZCAoaGVpZ2h0KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kICh3
aWR0aCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChoZWlnaHQpIHNob3VsZCBhcHBseSAK
LVBBU1MgYWxsIGFuZCAod2lkdGgpIHNob3VsZCBhcHBseSAKLVBBU1MgZXhwcmVzc2lvbiBvcmll
bnRhdGlvbiBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG9yaWVudGF0aW9u
OiBwb3J0cmFpdCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG9yaWVudGF0
aW9uOiBsYW5kc2NhcGUgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4t
b3JpZW50YXRpb24gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWlu
LW9yaWVudGF0aW9uOiBwb3J0cmFpdCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiBtaW4tb3JpZW50YXRpb246IGxhbmRzY2FwZSBzaG91bGQgbm90IGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtb3JpZW50YXRpb24gc2hvdWxkIG5vdCBiZSBwYXJzZWFi
bGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LW9yaWVudGF0aW9uOiBwb3J0cmFpdCBzaG91bGQgbm90
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtb3JpZW50YXRpb246IGxhbmRzY2Fw
ZSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgKG9yaWVudGF0aW9uKSBzaG91bGQgYXBw
bHkgCi1QQVNTIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBzaG91bGQgYXBwbHkgCi1QQVNTIChv
cmllbnRhdGlvbjogcG9ydHJhaXQpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5k
IChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHNob3VsZCBhcHBseSAKLVBBU1MgKG9yaWVudGF0aW9u
KSBzaG91bGQgYXBwbHkgCi1QQVNTIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBzaG91bGQgbm90
IGFwcGx5IAotUEFTUyBub3QgYWxsIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgc2hvdWxk
IGFwcGx5IAotUEFTUyAob3JpZW50YXRpb246IHBvcnRyYWl0KSBzaG91bGQgYXBwbHkgCi1QQVNT
IChhc3BlY3QtcmF0aW86IDU5LzgwKSBzaG91bGQgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86
IDU4LzgwKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvOiA1OS84MSkgc2hv
dWxkIG5vdCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNjAvODApIHNob3VsZCBub3QgYXBw
bHkgCi1QQVNTIChhc3BlY3QtcmF0aW86IDU5Lzc5KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAo
YXNwZWN0LXJhdGlvOiAxNzcvMjQwKSBzaG91bGQgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86
IDQxMy81NjApIHNob3VsZCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTkwMC84MDAwKSBz
aG91bGQgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86IDU5MDEvODAwMCkgc2hvdWxkIG5vdCBh
cHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTg5OS84MDAwKSBzaG91bGQgbm90IGFwcGx5IAot
UEFTUyAoYXNwZWN0LXJhdGlvOiA1OTAwLzgwMDEpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChh
c3BlY3QtcmF0aW86IDU5MDAvNzk5OSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGFzcGVjdC1y
YXRpbykgc2hvdWxkIGFwcGx5IAotUEFTUyAobWluLWFzcGVjdC1yYXRpbzogNTkvODApIHNob3Vs
ZCBhcHBseSAKLVBBU1MgKG1pbi1hc3BlY3QtcmF0aW86IDU4LzgwKSBzaG91bGQgYXBwbHkgCi1Q
QVNTIChtaW4tYXNwZWN0LXJhdGlvOiA1OS84MSkgc2hvdWxkIGFwcGx5IAotUEFTUyAobWluLWFz
cGVjdC1yYXRpbzogNjAvODApIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChtaW4tYXNwZWN0LXJh
dGlvOiA1OS83OSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tYXNwZWN0
LXJhdGlvIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyAobWF4LWFzcGVjdC1yYXRpbzog
NTkvODApIHNob3VsZCBhcHBseSAKLVBBU1MgKG1heC1hc3BlY3QtcmF0aW86IDU4LzgwKSBzaG91
bGQgbm90IGFwcGx5IAotUEFTUyAobWF4LWFzcGVjdC1yYXRpbzogNTkvODEpIHNob3VsZCBub3Qg
YXBwbHkgCi1QQVNTIChtYXgtYXNwZWN0LXJhdGlvOiA2MC84MCkgc2hvdWxkIGFwcGx5IAotUEFT
UyAobWF4LWFzcGVjdC1yYXRpbzogNTkvNzkpIHNob3VsZCBhcHBseSAKLVBBU1MgZXhwcmVzc2lv
biBtYXgtYXNwZWN0LXJhdGlvIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyAoZGV2aWNl
LWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIGFwcGx5
IAotUEFTUyBub3QgYWxsIGFuZCAoZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoICsg
MSAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLWFz
cGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC8gZGV2aWNlLWhlaWdodCAtIDEpIHNob3VsZCBub3Qg
YXBwbHkgCi1QQVNTIGFsbCBhbmQgKGRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCAt
IDEgLyBkZXZpY2UtaGVpZ2h0KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBub3QgYWxsIGFuZCAo
ZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC8gZGV2aWNlLWhlaWdodCArIDEpIHNo
b3VsZCBhcHBseSAKLVBBU1MgKGRldmljZS1hc3BlY3QtcmF0aW8pIHNob3VsZCBhcHBseSAKLVBB
U1MgKG1pbi1kZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBkZXZpY2UtaGVpZ2h0
KSBzaG91bGQgYXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5kIChkZXZpY2UtYXNwZWN0LXJhdGlvOiBk
ZXZpY2Utd2lkdGggKyAxIC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1Mg
bm90IGFsbCBhbmQgKG1pbi1kZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBkZXZp
Y2UtaGVpZ2h0IC0gMSkgc2hvdWxkIGFwcGx5IAotUEFTUyBub3QgYWxsIGFuZCAobWluLWRldmlj
ZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCAtIDEgLyBkZXZpY2UtaGVpZ2h0KSBzaG91bGQg
bm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNl
LXdpZHRoIC8gZGV2aWNlLWhlaWdodCArIDEpIHNob3VsZCBhcHBseSAKLVBBU1MgZXhwcmVzc2lv
biBtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1Mg
YWxsIGFuZCAobWF4LWRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1o
ZWlnaHQpIHNob3VsZCBhcHBseSAKLVBBU1MgKG1heC1kZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZp
Y2Utd2lkdGggKyAxIC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIGFwcGx5IAotUEFTUyAobWF4LWRl
dmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1oZWlnaHQgLSAxIHNob3Vs
ZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13
aWR0aCAtIDEgLyBkZXZpY2UtaGVpZ2h0KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBub3QgYWxs
IGFuZCAobWF4LWRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1oZWln
aHQgKyAxKSBzaG91bGQgYXBwbHkgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWRldmljZS1hc3BlY3Qt
cmF0aW8gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFzcGVj
dC1yYXRpbzogMS8xIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFz
cGVjdC1yYXRpbzogMSAgLzEgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBt
YXgtYXNwZWN0LXJhdGlvOiAxICAvIAkKLTEgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAxLwotMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFT
UyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzogMC41IHNob3VsZCBub3QgYmUgcGFy
c2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDEuMC8xIHNob3VsZCBu
b3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDEvMS4w
IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0
aW86IDEuMC8xLjAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4
LWFzcGVjdC1yYXRpbzogMC8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNz
aW9uIG1heC1hc3BlY3QtcmF0aW86IDEvMCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1Mg
ZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAwLzAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzogLTEvMSBzaG91bGQgbm90IGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAxLy0xIHNob3VsZCBu
b3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IC0xLy0x
IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3Qt
cmF0aW86IDEvMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1h
c3BlY3QtcmF0aW86IDEgIC8xIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
ZGV2aWNlLWFzcGVjdC1yYXRpbzogMSAgLyAJCi0xIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMS8KLTEgc2hvdWxkIGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAxIHNob3VsZCBub3QgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDAuNSBzaG91
bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlv
OiAxLjAvMSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Ut
YXNwZWN0LXJhdGlvOiAxLzEuMCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVz
c2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAxLjAvMS4wIHNob3VsZCBub3QgYmUgcGFyc2VhYmxl
IAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDAvMSBzaG91bGQgbm90IGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAxLzAgc2hv
dWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRp
bzogMC8wIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1h
c3BlY3QtcmF0aW86IC0xLzEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMS8tMSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBB
U1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAtMS8tMSBzaG91bGQgbm90IGJlIHBh
cnNlYWJsZSAKLVBBU1MgbW9ub2Nocm9tZV9hbmRfY29sb3IgCi1QQVNTIGZpbmRfZGVwdGggCi1Q
QVNTIGFsbCBhbmQgKGNvbG9yOiBkZXB0aCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChj
b2xvcjogZGVwdGggLSAxKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChjb2xvcjog
ZGVwdGggKyAxKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtY29sb3I6IGRl
cHRoKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1jb2xvcjogZGVwdGggLSAxKSBz
aG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtY29sb3I6IGRlcHRoICsgMSkgc2hv
dWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChjb2xvcikgc2hvdWxkIGFwcGx5IAotUEFTUyBleHBy
ZXNzaW9uIG1heC1jb2xvciBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBtaW4tY29sb3Igc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGFsbCBhbmQgKG1vbm9j
aHJvbWUpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGV4cHJlc3Npb24gbWF4LW1vbm9jaHJvbWUg
c2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLW1vbm9jaHJvbWUg
c2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIG5vdCBhbGwgYW5kIChtb25vY2hyb21lKSBz
aG91bGQgYXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5kIChjb2xvcikgc2hvdWxkIG5vdCBhcHBseSAK
LVBBU1Mgb25seSBhbGwgYW5kIChjb2xvcikgc2hvdWxkIGFwcGx5IAotUEFTUyBvbmx5IGFsbCBh
bmQgKG1vbm9jaHJvbWUpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGV4cHJlc3Npb24gY29sb3I6
IDEgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBjb2xvcjogMzI3IHNob3Vs
ZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gY29sb3I6IDAgc2hvdWxkIGJlIHBhcnNl
YWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBjb2xvcjogMS4wIHNob3VsZCBub3QgYmUgcGFyc2VhYmxl
IAotUEFTUyBleHByZXNzaW9uIGNvbG9yOiAtMSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBB
U1MgZXhwcmVzc2lvbiBjb2xvcjogMS8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBl
eHByZXNzaW9uIG1pbi1tb25vY2hyb21lOiAxIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4
cHJlc3Npb24gbWluLW1vbm9jaHJvbWU6IDMyNyBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBl
eHByZXNzaW9uIG1pbi1tb25vY2hyb21lOiAwIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4
cHJlc3Npb24gbWluLW1vbm9jaHJvbWU6IDEuMCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBB
U1MgZXhwcmVzc2lvbiBtaW4tbW9ub2Nocm9tZTogLTEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gbWluLW1vbm9jaHJvbWU6IDEvMSBzaG91bGQgbm90IGJlIHBhcnNl
YWJsZSAKLUZBSUwgZmluZF9yZXNvbHV0aW9uIGFzc2VydF9mYWxzZTogZXhwZWN0ZWQgZmFsc2Ug
Z290IHRydWUKLVBBU1MgKHJlc29sdXRpb246IGRwaSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1Mg
KHJlc29sdXRpb246IGRwaSArIDEpIHNob3VsZCBub3QgYXBwbHkgCi1GQUlMIChtaW4tcmVzb2x1
dGlvbjogZHBpIC0gMSApIHNob3VsZCBhcHBseSBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBn
b3QgZmFsc2UKLVBBU1Mgbm90IGFsbCBhbmQgKG1pbi1yZXNvbHV0aW9uOiBkcGkgLSAxICkgc2hv
dWxkIG5vdCBhcHBseSAKLUZBSUwgbm90IGFsbCBhbmQgKG1pbi1yZXNvbHV0aW9uOiBkcGkgKyAx
ICkgc2hvdWxkIGFwcGx5IGFzc2VydF90cnVlOiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQotUEFT
UyBhbGwgYW5kIChtaW4tcmVzb2x1dGlvbjogZHBpICsgMSApIHNob3VsZCBub3QgYXBwbHkgCi1G
QUlMIChtaW4tcmVzb2x1dGlvbjogZHBjbSAoZHBpIC0gMSkgKSBzaG91bGQgYXBwbHkgYXNzZXJ0
X3RydWU6IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCi1GQUlMIChtYXgtcmVzb2x1dGlvbjogZHBj
bSAgKGRwaSArIDEpICkgc2hvdWxkIGFwcGx5IGFzc2VydF90cnVlOiBleHBlY3RlZCB0cnVlIGdv
dCBmYWxzZQotUEFTUyAobWF4LXJlc29sdXRpb246IGRwY20gIChkcGkgLSAxKSApIHNob3VsZCBu
b3QgYXBwbHkgCi1GQUlMIG5vdCBhbGwgYW5kIChtaW4tcmVzb2x1dGlvbjogZHBjbSAgKGRwaSAr
IDEpICkgc2hvdWxkIGFwcGx5IGFzc2VydF90cnVlOiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQot
UEFTUyBleHByZXNzaW9uIGdyaWQgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBncmlkOiAwIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZ3JpZDogMSBz
aG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGdyaWQ6IDEgc2hvdWxkIGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tZ3JpZCBzaG91bGQgbm90IGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tZ3JpZDowIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAot
UEFTUyBleHByZXNzaW9uIG1heC1ncmlkOiAxIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFT
UyBleHByZXNzaW9uIGdyaWQ6IDIgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJl
c3Npb24gZ3JpZDogLTEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIChncmlkKSBzaG91
bGQgbm90IGFwcGx5IAotUEFTUyAoZ3JpZDogMCkgc2hvdWxkIGFwcGx5IAotUEFTUyAoZ3JpZDog
MSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGdyaWQ6IDIpIHNob3VsZCBub3QgYXBwbHkgCi1Q
QVNTIChncmlkOiAtMSkgc2hvdWxkIG5vdCBhcHBseSAKLQpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1leHBl
Y3RlZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9m
YXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1leHBlY3RlZC5wbmcJKHJldmlzaW9u
IDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMv
d2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtZXhwZWN0ZWQucG5nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzAsMCBAQAotiVBORw0KLRoKLQAAAA1JSERSAAADIAAAAlgIAgAAABUUFScAAAApdEVYdGNo
ZWNrc3VtAGVkMDkwODczZjllZjc3OWYxMjI3Y2Y2N2FkOTJmZGVjt/h+9AAADS9JREFUeJzt3Flq
HkcARlEpeEUmC8wCTbakvBiHOBr+4XZ3Dee8Ci1EdZUeLp/Br29vby8AAHT+uPoAAACrEVgAADGB
BQAQE1gAADGBBQAQE1gAADGBBQAQ+/bRD15fX888Bxvyf7ABsCoLFgBA7MMF66e/zjgE2/nr6gMA
wJEsWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABAT
WAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWI0f319+fL/6EADAGAQWAEBMYAV+
bVdGLADgRWABAOQE1rN+W62MWACAwAIAiAmsp7y7VxmxAGBzAgsAICawHvfJUmXEAoCdCSwAgJjA
etCXG5URCwC2JbAAAGIC6xE3rlNGLADYk8ACAIgJrLvdtUsZsQBgQwILACAmsO7zwCJlxAKA3Qgs
AICYwLrDw1uUEQsAtiKwAABiAutWT65QRiwA2IfAAgCICaybJPuTEQsANiGwAABiAutr4fJkxAKA
HQgsAICYwPpCvjkZsQBgeQILACAmsD5z0NpkxAKAtQksAICYwPrQoTuTEQsAFiawAABiAut9JyxM
RiwAWJXAAgCICax3nLYtGbEAYEkCCwAgJrB+d/KqZMQCgPUILACAmMD6j0v2JCMWACxGYAEAxATW
vy5ckoxYALASgQUAEBNYP12+IV1+AACgIrAAAGIC6+VlmPVokGMAAE8SWAAAMYE11m401GEAgMcI
LACA2O6BNeBiNOCRAIC77B5YAAC5rQNr2K1o2IMBALfYOrAAAI6wb2ANvhINfjwA4BP7BhYAwEE2
Dawp9qEpDgkA/N+mgQUAcJwdA2uiZWiiowIAv+wYWAAAh9ousKbbhKY7MACwXWABABxtr8CadA2a
9NgAsK29AgsA4AQbBdbUO9DUhweA3WwUWAAA59glsBZYgBb4BADYxC6BBQBwmi0Ca5ntZ5kPAYC1
bRFYAABnWj+wFlt9FvscAFjS+oEFAHCyxQNryb1nyY8CgJUsHlgAAOdbObAWXnoW/jQAWMDKgQUA
cIllA2v5jWf5DwSAeS0bWAAAV1kzsDZZdzb5TACYzpqBBQBwoQUDa6tdZ6uPBYBZLBhYAADXWi2w
Nlx0NvxkABjcaoEFAHC5pQJr2y1n2w8HgDEtFVgAACNYJ7A2X3E2/3wAGMo6gQUAMIhFAst+8+IS
AGAYiwQWAMA4Vggsy80vrgIARrBCYAEADGX6wLLZ/MaFAMDlpg8sAIDRzB1Y1pp3uRYAuNbcgQUA
MKCJA8tO8wmXAwAXmjiwAADGNGtgWWi+5IoA4CqzBhYAwLCmDCzbzI1cFABcYsrAAgAY2XyBZZW5
i+sCgPPNF1gAAIObLLDsMQ9waQBwsskCCwBgfDMFliXmYa4OAM40U2ABAExhmsCywTzJBQLAaaYJ
LACAWcwRWNaXhGsEgHPMEVgAABOZILDsLiGXCQAnmCCwAADmMnpgWVxyrhQAjjZ6YAEATGfowLK1
HMTFAsChhg4sAIAZjRtYVpZDuV4AOM64gQUAMKlBA8u+cgKXDAAHGTSwAADmNWJgWVZO46oB4Agj
BhYAwNSGCyybyslcOADkhgssAIDZjRVY1pRLuHYAaI0VWAAACxgosOwoF3L5ABAaKLAAANYwSmBZ
UC7nCQCgMkpgAQAsY4jAsp0MwkMAQGKIwAIAWMn1gWU1GYrnAIDnXR9YAACLuTiw7CUD8igA8CQL
FgBA7MrAspQMy9MAwDMsWAAAscsCy0YyOA8EAA+zYAEAxK4JLOvIFDwTADzGggUAELsgsOwiE/FY
APAACxYAQOzswLKITMeTAcC9LFgAALFTA8sWMikPBwB3sWABAMTOCywryNQ8HwDczoIFABA7KbDs
HwvwiABwIwsWAEDsjMCyfCzDUwLALSxYAACxwwPL5rEYDwotAF+yYAEAxI4NLGvHkjwrAHzOggUA
EDswsOwcC/O4APCJb8f96j//Pu53AwCMyz8RAgDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDE
BBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEXt/e
3t7/wevryUdhNx/97QHA7CxYAACxDxcsAAAeY8ECAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIj9A0vLtG3hHg5eAAAAAElFTkSuQmCCClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mt
d2Via2l0LWNhbnZhcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNr
YmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzAsMCBAQAotbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAw
Ci0gIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi1sYXllciBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKLSAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAotICAg
IFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAotICAgICAgUmVuZGVySW1h
Z2Uge0RJVn0gYXQgKDAsMCkgc2l6ZSAyMDR4MjA0IFtib3JkZXI6ICgycHggc29saWQgIzAwMDAw
MCldCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dl
YmdsL2Nzcy13ZWJraXQtY2FudmFzLXJlcGFpbnQtZXhwZWN0ZWQucG5nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdl
YmtpdC1jYW52YXMtcmVwYWludC1leHBlY3RlZC5wbmcJKHJldmlzaW9uIDE2MTYwNikKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtp
dC1jYW52YXMtcmVwYWludC1leHBlY3RlZC5wbmcJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMCww
IEBACi2JUE5HDQotGgotAAAADUlIRFIAAAMgAAACWAgCAAAAFRQVJwAAACl0RVh0Y2hlY2tzdW0A
ZWQwOTA4NzNmOWVmNzc5ZjEyMjdjZjY3YWQ5MmZkZWO3+H70AAANL0lEQVR4nO3cWWoeRwBGUSl4
RSYLzAJNtqS8GIc4Gv7hdncN57wKLUR1lR4un8Gvb29vLwAAdP64+gAAAKsRWAAAMYEFABATWAAA
MYEFABATWAAAMYEFABD79tEPXl9fzzwHG/J/sAGwKgsWAEDswwXrp7/OOATb+evqAwDAkSxYAAAx
gQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUA
EBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYjR/fX358v/oQAMAYBBYAQExgBX5tV0YsAOBF
YAEA5ATWs35brYxYAIDAAgCICaynvLtXGbEAYHMCCwAgJrAe98lSZcQCgJ0JLACAmMB60JcblREL
ALYlsAAAYgLrETeuU0YsANiTwAIAiAmsu921SxmxAGBDAgsAICaw7vPAImXEAoDdCCwAgJjAusPD
W5QRCwC2IrAAAGIC61ZPrlBGLADYh8ACAIgJrJsk+5MRCwA2IbAAAGIC62vh8mTEAoAdCCwAgJjA
+kK+ORmxAGB5AgsAICawPnPQ2mTEAoC1CSwAgJjA+tChO5MRCwAWJrAAAGIC630nLExGLABYlcAC
AIgJrHecti0ZsQBgSQILACAmsH538qpkxAKA9QgsAICYwPqPS/YkIxYALEZgAQDEBNa/LlySjFgA
sBKBBQAQE1g/Xb4hXX4AAKAisAAAYgLr5WWY9WiQYwAATxJYAAAxgTXWbjTUYQCAxwgsAIDY7oE1
4GI04JEAgLvsHlgAALmtA2vYrWjYgwEAt9g6sAAAjrBvYA2+Eg1+PADgE/sGFgDAQTYNrCn2oSkO
CQD836aBBQBwnB0Da6JlaKKjAgC/7BhYAACH2i6wptuEpjswALBdYAEAHG2vwJp0DZr02ACwrb0C
CwDgBBsF1tQ70NSHB4DdbBRYAADn2CWwFliAFvgEANjELoEFAHCaLQJrme1nmQ8BgLVtEVgAAGda
P7AWW30W+xwAWNL6gQUAcLLFA2vJvWfJjwKAlSweWAAA51s5sBZeehb+NABYwMqBBQBwiWUDa/mN
Z/kPBIB5LRtYAABXWTOwNll3NvlMAJjOmoEFAHChBQNrq11nq48FgFksGFgAANdaLbA2XHQ2/GQA
GNxqgQUAcLmlAmvbLWfbDweAMS0VWAAAI1gnsDZfcTb/fAAYyjqBBQAwiEUCy37z4hIAYBiLBBYA
wDhWCCzLzS+uAgBGsEJgAQAMZfrAstn8xoUAwOWmDywAgNHMHVjWmne5FgC41tyBBQAwoIkDy07z
CZcDABeaOLAAAMY0a2BZaL7kigDgKrMGFgDAsKYMLNvMjVwUAFxiysACABjZfIFllbmL6wKA880X
WAAAg5sssOwxD3BpAHCyyQILAGB8MwWWJeZhrg4AzjRTYAEATGGawLLBPMkFAsBppgksAIBZzBFY
1peEawSAc8wRWAAAE5kgsOwuIZcJACeYILAAAOYyemBZXHKuFACONnpgAQBMZ+jAsrUcxMUCwKGG
DiwAgBmNG1hWlkO5XgA4zriBBQAwqUEDy75yApcMAAcZNLAAAOY1YmBZVk7jqgHgCCMGFgDA1IYL
LJvKyVw4AOSGCywAgNmNFVjWlEu4dgBojRVYAAALGCiw7CgXcvkAEBoosAAA1jBKYFlQLucJAKAy
SmABACxjiMCynQzCQwBAYojAAgBYyfWBZTUZiucAgOddH1gAAIu5OLDsJQPyKADwJAsWAEDsysCy
lAzL0wDAMyxYAACxywLLRjI4DwQAD7NgAQDErgks68gUPBMAPMaCBQAQuyCw7CIT8VgA8AALFgBA
7OzAsohMx5MBwL0sWAAAsVMDyxYyKQ8HAHexYAEAxM4LLCvI1DwfANzOggUAEDspsOwfC/CIAHAj
CxYAQOyMwLJ8LMNTAsAtLFgAALHDA8vmsRgPCi0AX7JgAQDEjg0sa8eSPCsAfM6CBQAQOzCw7BwL
87gA8Ilvx/3qP/8+7ncDAIzLPxECAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGAB
AMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMRe397e3v/B6+vJ
R2E3H/3tAcDsLFgAALEPFywAAB5jwQIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiP0DS8u0
beEeDl4AAAAASUVORK5CYIIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJraXQt
Y2FudmFzLXJlcGFpbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtcmVw
YWludC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtcmVwYWlu
dC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMCwwIEBACi1sYXllciBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKLSAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLWxh
eWVyIGF0ICgwLDApIHNpemUgODAweDYwMAotICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCi0gICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0
Ci0gICAgICBSZW5kZXJJbWFnZSB7RElWfSBhdCAoMCwwKSBzaXplIDIwNHgyMDQgW2JvcmRlcjog
KDJweCBzb2xpZCAjMDAwMDAwKV0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVy
cnkvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQtb2YtYm91bmRzLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3Qv
Y2FudmFzL3dlYmdsL2RyYXctZWxlbWVudHMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9j
YW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQtb2YtYm91bmRzLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMSw2MiArMCwwIEBACi1QVlI6KEVycm9yKTogUFZSU1JWQWxsb2NEZXZp
Y2VNZW06IEVycm9yIDMgcmV0dXJuZWQgWzkyNSwgL2JyaWRnZWRfcHZyX2dsdWUuY10KLVBWUjoo
RXJyb3IpOiBnbEJ1ZmZlckRhdGE6IENhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3Igb2JqZWN0IFs3
ODYsIC9idWZvYmouY10KLVRlc3Qgb2YgZHJhd0VsZW1lbnRzIHdpdGggb3V0LW9mLWJvdW5kcyBw
YXJhbWV0ZXJzCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotVGVzdCBlbXB0eSBpbmRl
eCBidWZmZXIKLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDMs
IGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJ
TlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklB
TkdMRVMsIDEwMDAwLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3Rl
ZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRz
KGNvbnRleHQuVFJJQU5HTEVTLCAxMDAwMDAwMDAwMDAwMCwgY29udGV4dC5VTlNJR05FRF9CWVRF
LCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFT
UyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5T
SUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVF
LgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMSwgY29udGV4
dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURf
T1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywg
MCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9y
OiBJTlZBTElEX1ZBTFVFLgotRkFJTCBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFO
R0xFUywgMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBleHBlY3RlZDogTk9fRVJST1IuIFdh
cyBPVVRfT0ZfTUVNT1JZLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFO
R0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllURSwgMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdM
IGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0
LlRSSUFOR0xFUywgMSwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkgZ2VuZXJhdGVkIGV4cGVj
dGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotCi1UZXN0IGJ1ZmZlciB3aXRoIDMgYnl0ZSBp
bmRleGVzCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBj
b250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9f
RVJST1IuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBj
b250ZXh0LlVOU0lHTkVEX0lOVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZB
TElEX0VOVU0uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKDB4MDAwOSwgMywgY29udGV4dC5V
TlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfRU5V
TS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDMsIGNvbnRl
eHQuVU5TSUdORURfQllURSwgMikgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElE
X09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMs
IDEwMDAwLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBl
cnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRl
eHQuVFJJQU5HTEVTLCAxMDAwMDAwMDAwMDAwMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBn
ZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250
ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURf
QllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFT
UyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJ
R05FRF9CWVRFLCAtMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVF
LgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRl
eHQuVU5TSUdORURfQllURSwgMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElE
X1ZBTFVFLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMSwg
Y29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJ
TlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xF
UywgMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCA0KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJy
b3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xF
UywgMHhmZmZmZmZmZiwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0
ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNv
bnRleHQuVFJJQU5HTEVTLCAweDdmZmZmZmZmLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdl
bmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRl
eHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAweDdmZmZmZmZmLCBjb250ZXh0LlVO
U0lHTkVEX0JZVEUsIDB4N2ZmZmZmZmYpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5W
QUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuYnVmZmVyRGF0YShjb250ZXh0LkVMRU1FTlRf
QVJSQVlfQlVGRkVSLCAobmV3IFVpbnQ4QXJyYXkoWyAzLCAwLCAxLCAyIF0pKS5zdWJhcnJheSgx
KSwgY29udGV4dC5TVEFUSUNfRFJBVykgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19F
UlJPUi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDMsIGNv
bnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19F
UlJPUi4KLVBBU1MgY29udGV4dC5idWZmZXJTdWJEYXRhKGNvbnRleHQuRUxFTUVOVF9BUlJBWV9C
VUZGRVIsIDAsIG5ldyBVaW50OEFycmF5KFsgMywgMCwgMV0pKSBnZW5lcmF0ZWQgZXhwZWN0ZWQg
R0wgZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRS
SUFOR0xFUywgMywgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQg
R0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmJ1ZmZlclN1YkRhdGEo
Y29udGV4dC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgKG5ldyBVaW50OEFycmF5KFsgMywgMCwg
MSwgMiBdKSkuc3ViYXJyYXkoMSkpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJS
T1IuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBjb250
ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJS
T1IuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCBjb250
ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJS
T1IuCi0KLVRlc3QgYnVmZmVyIHdpdGggaW50ZXJsZWF2ZWQgKDMrMikgZmxvYXQgdmVjdG9ycwot
UEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgOSwgY29udGV4dC5V
TlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4K
LVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDksIGNvbnRleHQu
RkxPQVQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9FTlVNLgotUEFT
UyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgOSwgY29udGV4dC5TSE9S
VCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX0VOVU0uCi1QQVNTIGNv
bnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCA5LCBjb250ZXh0LlVOU0lHTkVE
X0lOVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX0VOVU0uCi1QQVNT
IGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCA5LCBjb250ZXh0LlVOU0lH
TkVEX1NIT1JULCAxMDAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BF
UkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMTIs
IGNvbnRleHQuVU5TSUdORURfU0hPUlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjog
SU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJ
QU5HTEVTLCAxNSwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVk
IEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMo
Y29udGV4dC5UUklBTkdMRVMsIDE4LCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5lcmF0
ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRy
YXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMywgY29udGV4dC5VTlNJR05FRF9TSE9SVCwg
MioxNSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBB
U1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDB4ZmZmZmZmZmYsIGNv
bnRleHQuVU5TSUdORURfU0hPUlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5W
QUxJRF9WQUxVRS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMs
IDB4N2ZmZmZmZmYsIGNvbnRleHQuVU5TSUdORURfU0hPUlQsIDApIGdlbmVyYXRlZCBleHBlY3Rl
ZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRz
KGNvbnRleHQuVFJJQU5HTEVTLCAwLCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5lcmF0
ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50
cyhjb250ZXh0LlRSSUFOR0xFUywgNiwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVu
dHMoY29udGV4dC5UUklBTkdMRVMsIDYsIGNvbnRleHQuVU5TSUdORURfU0hPUlQsIDEpIGdlbmVy
YXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQu
ZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCA2LCBjb250ZXh0LlVOU0lHTkVEX1NIT1JU
LCAyKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0
LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgNiwgY29udGV4dC5VTlNJR05FRF9TSE9S
VCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLQot
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVi
dWZmZXItb2JqZWN0LWF0dGFjaG1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXIt
b2JqZWN0LWF0dGFjaG1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2ZyYW1lYnVmZmVy
LW9iamVjdC1hdHRhY2htZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2MTIg
KzAsMCBAQAotVGVzdCBmcmFtZWJ1ZmZlciBvYmplY3QgYXR0YWNobWVudCBiZWhhdmlvcnMKLQot
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi0KLURpbWVuc2lvbnMgMCB4IDAKLUNyZWF0ZSBy
ZW5kZXJidWZmZXJzCi1QQVNTIGdsID0gY3JlYXRlM0RDb250ZXh0KCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhC
dWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBzdGVuY2lsQnVmZmVyID0g
Z2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wu
Y3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBERVBUSF9BVFRBQ0hN
RU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGggdXNpbmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNT
IGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
IDogCi1BdHRhY2ggZGVwdGggdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZi
byA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDog
Ci1BdHRhY2ggc3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wu
Y3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGds
LkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFj
aCBzdGVuY2lsIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJh
bWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2ls
IHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFt
ZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3Rl
bmNpbCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRl
RnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0
aFN0ZW5jaWwgdXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFt
ZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3Rl
bmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCwgdGhl
biBzdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAot
UEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAz
NjA1NAotQXR0YWNoIHN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1Mg
ZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggZGVwdGgsIHRoZW4gZGVwdGhTdGVu
Y2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkg
aXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBn
bC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAot
QXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhlbiBkZXB0aCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5G
UkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoU3Rl
bmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigp
IGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
Z2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQK
LUF0dGFjaCBkZXB0aFN0ZW5jaWwsIHRoZW4gc3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFT
UyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhn
bC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIg
d2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0JBNAotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQg
MzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggY29sb3IgcmVuZGVyYnVmZmVyIHdp
dGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNV9BMQotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQg
MzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggY29sb3IgcmVuZGVyYnVmZmVyIHdp
dGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNTY1Ci1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRl
UmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBu
b24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAot
UEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAz
NjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUNyZWF0ZSBhbmQgYXR0YWNoIGRlcHRoU3RlbmNp
bCByZW5kZXJidWZmZXIKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVy
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJV
RkZFUiwgZ2wuUkVOREVSQlVGRkVSX1dJRFRIKSBpcyB3aWR0aAotUEFTUyBnbC5nZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfSEVJR0hUKSBp
cyBoZWlnaHQKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZF
UiwgZ2wuUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCkgaXMgZ2wuREVQVEhfU1RFTkNJTAot
UEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5E
RVJCVUZGRVJfUkVEX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
KGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUpIGlzIDAKLVBBU1Mg
Z2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVG
RkVSX0JMVUVfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wu
UkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfQUxQSEFfU0laRSkgaXMgMAotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi0KLURpbWVuc2lv
bnMgMCB4IDIKLUNyZWF0ZSByZW5kZXJidWZmZXJzCi1QQVNTIGdsID0gY3JlYXRlM0RDb250ZXh0
KCkgaXMgbm9uLW51bGwuCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVy
KCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiAKLVBBU1MgZGVwdGhCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBzdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhT
dGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLUF0dGFjaCBkZXB0aCB1
c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkg
aXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJu
ZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGggdXNpbmcgU1RFTkNJ
TF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
Z2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQK
LVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGggdXNpbmcgREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwu
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wu
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggc3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1F
TlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDog
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKLVBBU1Mg
ZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04g
OiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAotUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBB
U1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiAKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJv
ID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAK
LUF0dGFjaCBkZXB0aCwgdGhlbiBzdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIHN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNp
bmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVs
bC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggZGVw
dGgsIHRoZW4gZGVwdGhTdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNy
ZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhlbiBkZXB0aCwgY2F1c2lu
ZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBzdGVu
Y2lsLCB0aGVuIGRlcHRoU3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBkZXB0aFN0ZW5jaWwsIHRoZW4gc3RlbmNpbCwgY2F1
c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1u
dWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBj
b2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0JBNAotUEFTUyBjb2xv
ckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggY29s
b3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNV9BMQotUEFTUyBjb2xv
ckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggY29s
b3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNTY1Ci1QQVNTIGNvbG9y
QnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRl
RnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUNyZWF0ZSBhbmQg
YXR0YWNoIGRlcHRoU3RlbmNpbCByZW5kZXJidWZmZXIKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVy
ID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX1dJRFRIKSBpcyB3aWR0aAot
UEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5E
RVJCVUZGRVJfSU5URVJOQUxfRk9STUFUKSBpcyBnbC5ERVBUSF9TVEVOQ0lMCi1QQVNTIGdsLmdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9S
RURfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVS
QlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfR1JFRU5fU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfQkxVRV9T
SVpFKSBpcyAwCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZG
RVIsIGdsLlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFKSBpcyAwCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBy
ZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLQotRGltZW5zaW9ucyAyIHggMAot
Q3JlYXRlIHJlbmRlcmJ1ZmZlcnMKLVBBU1MgZ2wgPSBjcmVhdGUzRENvbnRleHQoKSBpcyBub24t
bnVsbC4KLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBkZXB0aEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIHN0ZW5jaWxC
dWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBkZXB0aFN0ZW5jaWxCdWZm
ZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotQXR0YWNoIGRlcHRoIHVzaW5nIERFUFRI
X0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVs
bC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBn
bC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1F
TlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDog
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQK
LVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIFNURU5DSUxfQVRUQUNITUVOVAotUEFTUyBm
Ym8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotQXR0YWNoIHN0ZW5jaWwgdXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNo
IHN0ZW5jaWwgdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNy
ZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5G
UkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2gg
ZGVwdGhTdGVuY2lsIHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBn
bC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Z2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0
YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNy
ZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5G
UkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2gg
ZGVwdGhTdGVuY2lsIHVzaW5nIFNURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVh
dGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJB
TUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRl
cHRoLCB0aGVuIHN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRl
RnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJl
dHVybmVkIDM2MDU0Ci1BdHRhY2ggc3RlbmNpbCwgdGhlbiBkZXB0aCwgY2F1c2luZyBjb25mbGlj
dAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBkZXB0aCwgdGhlbiBk
ZXB0aFN0ZW5jaWwsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
Ci1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVk
IDM2MDU0Ci1BdHRhY2ggZGVwdGhTdGVuY2lsLCB0aGVuIGRlcHRoLCBjYXVzaW5nIGNvbmZsaWN0
Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIHN0ZW5jaWwsIHRoZW4g
ZGVwdGhTdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1l
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5l
ZCAzNjA1NAotQXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhlbiBzdGVuY2lsLCBjYXVzaW5nIGNvbmZs
aWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIGNvbG9yIHJlbmRl
cmJ1ZmZlciB3aXRoIGludGVybmFsZm9ybWF0ID09IFJHQkE0Ci1QQVNTIGNvbG9yQnVmZmVyID0g
Z2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBy
ZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBjb2xvciByZW5kZXJi
dWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0I1X0ExCi1QQVNTIGNvbG9yQnVmZmVyID0g
Z2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBy
ZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBjb2xvciByZW5kZXJi
dWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0I1NjUKLVBBU1MgY29sb3JCdWZmZXIgPSBn
bC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJl
dHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQ3JlYXRlIGFuZCBhdHRhY2ggZGVw
dGhTdGVuY2lsIHJlbmRlcmJ1ZmZlcgotUEFTUyBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVh
dGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wu
UkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfSEVJR0hUKSBpcyBoZWlnaHQKLVBBU1MgZ2wu
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVS
X0lOVEVSTkFMX0ZPUk1BVCkgaXMgZ2wuREVQVEhfU1RFTkNJTAotUEFTUyBnbC5nZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfUkVEX1NJWkUp
IGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwg
Z2wuUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0JMVUVfU0laRSkgaXMg
MAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5S
RU5ERVJCVUZGRVJfQUxQSEFfU0laRSkgaXMgMAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQg
MzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi0KLURpbWVuc2lvbnMgMiB4IDIKLUNyZWF0ZSBy
ZW5kZXJidWZmZXJzCi1QQVNTIGdsID0gY3JlYXRlM0RDb250ZXh0KCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhC
dWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBzdGVuY2lsQnVmZmVyID0g
Z2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wu
Y3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBERVBUSF9BVFRBQ0hN
RU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTMKLUF0dGFjaCBk
ZXB0aCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCB1c2lu
ZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBy
ZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5n
IFNURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlz
IG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
Ci1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVk
IDM2MDUzCi1BdHRhY2ggc3RlbmNpbCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1B
dHRhY2ggc3RlbmNpbCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0g
Z2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0
dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZi
byA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTMKLUF0dGFjaCBkZXB0aFN0ZW5jaWwg
dXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigp
IGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVy
bmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2lu
ZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5l
ZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCwgdGhlbiBzdGVuY2ls
LCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA2MQotQXR0
YWNoIHN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wu
Y3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpIHJldHVybmVkIDM2MDYxCi1BdHRhY2ggZGVwdGgsIHRoZW4gZGVwdGhTdGVuY2lsLCBjYXVz
aW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA2MQotQXR0YWNoIGRl
cHRoU3RlbmNpbCwgdGhlbiBkZXB0aCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgcmV0dXJuZWQgMzYwNjEKLUF0dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoU3RlbmNpbCwgY2F1
c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1u
dWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNjEKLUF0dGFjaCBk
ZXB0aFN0ZW5jaWwsIHRoZW4gc3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBn
bC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJV
RkZFUikgcmV0dXJuZWQgMzYwNjEKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRl
cm5hbGZvcm1hdCA9PSBSR0JBNAotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwu
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wu
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTMKLUF0
dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0I1X0ExCi1Q
QVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0g
Z2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1MwotQXR0YWNoIGNvbG9yIHJlbmRlcmJ1ZmZl
ciB3aXRoIGludGVybmFsZm9ybWF0ID09IFJHQjU2NQotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkg
aXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJu
ZWQgMzYwNTMKLUNyZWF0ZSBhbmQgYXR0YWNoIGRlcHRoU3RlbmNpbCByZW5kZXJidWZmZXIKLVBB
U1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
Z2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVG
RkVSX1dJRFRIKSBpcyB3aWR0aAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wu
UkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfSEVJR0hUKSBpcyBoZWlnaHQKLVBBU1MgZ2wu
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVS
X0lOVEVSTkFMX0ZPUk1BVCkgaXMgZ2wuREVQVEhfU1RFTkNJTAotUEFTUyBnbC5nZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfUkVEX1NJWkUp
IGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwg
Z2wuUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0JMVUVfU0laRSkgaXMg
MAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5S
RU5ERVJCVUZGRVJfQUxQSEFfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfREVQVEhfU0laRSkgPiAwIGlz
IHRydWUKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwg
Z2wuUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSkgPiAwIGlzIHRydWUKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFt
ZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpIHJldHVybmVkIDM2MDUzCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGRlcHRoQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMg
bm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LQotQXR0YWNobWVudHMgb2YgZGlmZmVyZW50IHNpemVzIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX0RJTUVOU0lPTlMgKE9wZW5HTCBFUyAyLjAgNC40LjUpCi1QQVNTIGZibyA9IGds
LmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wu
Y3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGRlcHRoQnVmZmVyID0gZ2wu
Y3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhn
bC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0NPTVBMRVRFIHdhcyBGUkFNRUJV
RkZFUl9DT01QTEVURQotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIHdhcyBGUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgb3IgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQK
LVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJl
IEZSQU1FQlVGRkVSX0NPTVBMRVRFIHdhcyBGUkFNRUJVRkZFUl9DT01QTEVURQotUEFTUyBnbC5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9ESU1FTlNJT05TIHdhcyBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVO
U0lPTlMgb3IgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0NPTVBMRVRFIHdh
cyBGUkFNRUJVRkZFUl9DT01QTEVURQotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxk
IGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyB3YXMgRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9ESU1FTlNJT05TIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECi1QQVNTIGdsLmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZF
Ul9DT01QTEVURSB3YXMgRlJBTUVCVUZGRVJfQ09NUExFVEUKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfQ09NUExFVEUgd2FzIEZSQU1FQlVGRkVSX0NP
TVBMRVRFCi0KLVdyb25nIHN0b3JhZ2UgdHlwZSBmb3IgdHlwZSBvZiBhdHRhY2htZW50IGJlIEZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAoT3BlbkdMIEVTIDIuMCA0LjQuNSkKLVBB
U1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCB3YXMgRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECi1QQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9DT01Q
TEVURSB3YXMgRlJBTUVCVUZGRVJfQ09NUExFVEUKLQotMCBzaXplIGF0dGFjaG1lbnQgc2hvdWxk
IGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAoT3BlbkdMIEVTIDIuMCA0LjQu
NSkKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxk
IGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCB3YXMgRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLQotTm8gYXR0YWNobWVudHMgc2hv
dWxkIGJlIElOQ09NUExFVEVfRlJBTUVCVUZGRVJfTUlTU0lOR19BVFRBQ0hNRU5UIChPcGVuR0wg
RVMgMi4wIDQuNC41KQotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1u
dWxsLgotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91
bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgd2FzIEZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIG9yIEZSQU1FQlVGRkVSX1VOU1VQ
UE9SVEVECi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNo
b3VsZCBiZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3YXMgRlJBTUVCVUZGRVJfQ09NUExFVEUKLVBB
U1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIHdhcyBGUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCBvciBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi0KLVRlc3QgZHJh
d2luZyBvciByZWFkaW5nIGZyb20gYW4gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBmYm8g
PSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBjb2xvckJ1ZmZlciA9
IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBkZXB0aEJ1ZmZlciA9
IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3YXMgRlJB
TUVCVUZGRVJfQ09NUExFVEUKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyB3YXMg
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9S
VEVECi0KLURyYXdpbmcgb3IgcmVhZGluZyBmcm9tIGFuIGluY29tcGxldGUgZnJhbWVidWZmZXIg
c2hvdWxkIGdlbmVyYXRlIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IGRyYXdBcnJheXMg
d2l0aCBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiByZWFkUGl4ZWxzIGZyb20gaW5j
b21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogY29weVRleEltYWdlMkQgZnJvbSBpbmNvbXBs
ZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBjb3B5VGV4U3ViSW1hZ2UyRCBmcm9tIGluY29tcGxl
dGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IGNsZWFyIHdpdGggaW5jb21wbGV0ZSBmcmFtZWJ1ZmZl
cgotUEFTUyBmYm8yID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIHdhcyBGUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCBvciBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAotCi1E
cmF3aW5nIG9yIHJlYWRpbmcgZnJvbSBhbiBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyIHNob3VsZCBn
ZW5lcmF0ZSBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBkcmF3QXJyYXlzIHdpdGggaW5j
b21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogcmVhZFBpeGVscyBmcm9tIGluY29tcGxldGUg
ZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09Q
RVJBVElPTiA6IGNvcHlUZXhJbWFnZTJEIGZyb20gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDogY29weVRl
eFN1YkltYWdlMkQgZnJvbSBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBjbGVhciB3
aXRoIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVS
ZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLQotRHJhd2luZyBvciByZWFkaW5nIGZyb20gYW4g
aW5jb21wbGV0ZSBmcmFtZWJ1ZmZlciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OIDogZHJhd0FycmF5cyB3aXRoIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiA6IHJlYWRQaXhlbHMgZnJvbSBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBjb3B5
VGV4SW1hZ2UyRCBmcm9tIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IGNvcHlUZXhT
dWJJbWFnZTJEIGZyb20gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogY2xlYXIgd2l0
aCBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
Ci0KLVRFU1QgQ09NUExFVEUKLQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJy
eS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1leHBlY3RlZC5wbmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJn
bC9jc3Mtd2Via2l0LWNhbnZhcy1leHBlY3RlZC5wbmcJKHJldmlzaW9uIDE2MTYwNikKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtp
dC1jYW52YXMtZXhwZWN0ZWQucG5nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzAsMCBAQAotiVBO
Rw0KLRoKLQAAAA1JSERSAAADIAAAAlgIAgAAABUUFScAAAApdEVYdGNoZWNrc3VtAGVkMDkwODcz
ZjllZjc3OWYxMjI3Y2Y2N2FkOTJmZGVjt/h+9AAADS9JREFUeJzt3FlqHkcARlEpeEUmC8wCTbak
vBiHOBr+4XZ3Dee8Ci1EdZUeLp/Br29vby8AAHT+uPoAAACrEVgAADGBBQAQE1gAADGBBQAQE1gA
ADGBBQAQ+/bRD15fX888Bxvyf7ABsCoLFgBA7MMF66e/zjgE2/nr6gMAwJEsWAAAMYEFABATWAAA
MYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEFABATWAAAMYEF
ABATWAAAMYEFABATWAAAMYEFABATWI0f319+fL/6EADAGAQWAEBMYAV+bVdGLADgRWABAOQE1rN+
W62MWACAwAIAiAmsp7y7VxmxAGBzAgsAICawHvfJUmXEAoCdCSwAgJjAetCXG5URCwC2JbAAAGIC
6xE3rlNGLADYk8ACAIgJrLvdtUsZsQBgQwILACAmsO7zwCJlxAKA3QgsAICYwLrDw1uUEQsAtiKw
AABiAutWT65QRiwA2IfAAgCICaybJPuTEQsANiGwAABiAutr4fJkxAKAHQgsAICYwPpCvjkZsQBg
eQILACAmsD5z0NpkxAKAtQksAICYwPrQoTuTEQsAFiawAABiAut9JyxMRiwAWJXAAgCICax3nLYt
GbEAYEkCCwAgJrB+d/KqZMQCgPUILACAmMD6j0v2JCMWACxGYAEAxATWvy5ckoxYALASgQUAEBNY
P12+IV1+AACgIrAAAGIC6+VlmPVokGMAAE8SWAAAMYE11m401GEAgMcILACA2O6BNeBiNOCRAIC7
7B5YAAC5rQNr2K1o2IMBALfYOrAAAI6wb2ANvhINfjwA4BP7BhYAwEE2Dawp9qEpDgkA/N+mgQUA
cJwdA2uiZWiiowIAv+wYWAAAh9ousKbbhKY7MACwXWABABxtr8CadA2a9NgAsK29AgsA4AQbBdbU
O9DUhweA3WwUWAAA59glsBZYgBb4BADYxC6BBQBwmi0Ca5ntZ5kPAYC1bRFYAABnWj+wFlt9Fvsc
AFjS+oEFAHCyxQNryb1nyY8CgJUsHlgAAOdbObAWXnoW/jQAWMDKgQUAcIllA2v5jWf5DwSAeS0b
WAAAV1kzsDZZdzb5TACYzpqBBQBwoQUDa6tdZ6uPBYBZLBhYAADXWi2wNlx0NvxkABjcaoEFAHC5
pQJr2y1n2w8HgDEtFVgAACNYJ7A2X3E2/3wAGMo6gQUAMIhFAst+8+ISAGAYiwQWAMA4Vggsy80v
rgIARrBCYAEADGX6wLLZ/MaFAMDlpg8sAIDRzB1Y1pp3uRYAuNbcgQUAMKCJA8tO8wmXAwAXmjiw
AADGNGtgWWi+5IoA4CqzBhYAwLCmDCzbzI1cFABcYsrAAgAY2XyBZZW5i+sCgPPNF1gAAIObLLDs
MQ9waQBwsskCCwBgfDMFliXmYa4OAM40U2ABAExhmsCywTzJBQLAaaYJLACAWcwRWNaXhGsEgHPM
EVgAABOZILDsLiGXCQAnmCCwAADmMnpgWVxyrhQAjjZ6YAEATGfowLK1HMTFAsChhg4sAIAZjRtY
VpZDuV4AOM64gQUAMKlBA8u+cgKXDAAHGTSwAADmNWJgWVZO46oB4AgjBhYAwNSGCyybyslcOADk
hgssAIDZjRVY1pRLuHYAaI0VWAAACxgosOwoF3L5ABAaKLAAANYwSmBZUC7nCQCgMkpgAQAsY4jA
sp0MwkMAQGKIwAIAWMn1gWU1GYrnAIDnXR9YAACLuTiw7CUD8igA8CQLFgBA7MrAspQMy9MAwDMs
WAAAscsCy0YyOA8EAA+zYAEAxK4JLOvIFDwTADzGggUAELsgsOwiE/FYAPAACxYAQOzswLKITMeT
AcC9LFgAALFTA8sWMikPBwB3sWABAMTOCywryNQ8HwDczoIFABA7KbDsHwvwiABwIwsWAEDsjMCy
fCzDUwLALSxYAACxwwPL5rEYDwotAF+yYAEAxI4NLGvHkjwrAHzOggUAEDswsOwcC/O4APCJb8f9
6j//Pu53AwCMyz8RAgDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExg
AQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEBBYAQExgAQDEXt/e3t7/wevryUdhNx/97QHA
7CxYAACxDxcsAAAeY8ECAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACA
mMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMAC
AIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJ
LACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIgJLACAmMACAIj9A0vLtG3hHg5eAAAA
AElFTkSuQmCCClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJy
eS9mYXN0L2NhbnZhcy93ZWJnbC9jc3Mtd2Via2l0LWNhbnZhcy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52
YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzAsMCBAQAotbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi0gIFJlbmRlclZpZXcg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi1sYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgUmVu
ZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAotICAgIFJlbmRlckJvZHkge0JP
RFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAotICAgICAgUmVuZGVySW1hZ2Uge0RJVn0gYXQgKDAs
MCkgc2l6ZSAyMDR4MjA0IFtib3JkZXI6ICgycHggc29saWQgIzAwMDAwMCldCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJraXQt
Y2FudmFzLXJlcGFpbnQtZXhwZWN0ZWQucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtcmVw
YWludC1leHBlY3RlZC5wbmcJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtcmVwYWlu
dC1leHBlY3RlZC5wbmcJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMCwwIEBACi2JUE5HDQotGgot
AAAADUlIRFIAAAMgAAACWAgCAAAAFRQVJwAAACl0RVh0Y2hlY2tzdW0AZWQwOTA4NzNmOWVmNzc5
ZjEyMjdjZjY3YWQ5MmZkZWO3+H70AAANL0lEQVR4nO3cWWoeRwBGUSl4RSYLzAJNtqS8GIc4Gv7h
dncN57wKLUR1lR4un8Gvb29vLwAAdP64+gAAAKsRWAAAMYEFABATWAAAMYEFABATWAAAMYEFABD7
9tEPXl9fzzwHG/J/sAGwKgsWAEDswwXrp7/OOATb+evqAwDAkSxYAAAxgQUAEBNYAAAxgQUAEBNY
AAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAxgQUAEBNYAAAx
gQUAEBNYAAAxgQUAEBNYjR/fX358v/oQAMAYBBYAQExgBX5tV0YsAOBFYAEA5ATWs35brYxYAIDA
AgCICaynvLtXGbEAYHMCCwAgJrAe98lSZcQCgJ0JLACAmMB60JcblRELALYlsAAAYgLrETeuU0Ys
ANiTwAIAiAmsu921SxmxAGBDAgsAICaw7vPAImXEAoDdCCwAgJjAusPDW5QRCwC2IrAAAGIC61ZP
rlBGLADYh8ACAIgJrJsk+5MRCwA2IbAAAGIC62vh8mTEAoAdCCwAgJjA+kK+ORmxAGB5AgsAICaw
PnPQ2mTEAoC1CSwAgJjA+tChO5MRCwAWJrAAAGIC630nLExGLABYlcACAIgJrHecti0ZsQBgSQIL
ACAmsH538qpkxAKA9QgsAICYwPqPS/YkIxYALEZgAQDEBNa/LlySjFgAsBKBBQAQE1g/Xb4hXX4A
AKAisAAAYgLr5WWY9WiQYwAATxJYAAAxgTXWbjTUYQCAxwgsAIDY7oE14GI04JEAgLvsHlgAALmt
A2vYrWjYgwEAt9g6sAAAjrBvYA2+Eg1+PADgE/sGFgDAQTYNrCn2oSkOCQD836aBBQBwnB0Da6Jl
aKKjAgC/7BhYAACH2i6wptuEpjswALBdYAEAHG2vwJp0DZr02ACwrb0CCwDgBBsF1tQ70NSHB4Dd
bBRYAADn2CWwFliAFvgEANjELoEFAHCaLQJrme1nmQ8BgLVtEVgAAGdaP7AWW30W+xwAWNL6gQUA
cLLFA2vJvWfJjwKAlSweWAAA51s5sBZeehb+NABYwMqBBQBwiWUDa/mNZ/kPBIB5LRtYAABXWTOw
Nll3NvlMAJjOmoEFAHChBQNrq11nq48FgFksGFgAANdaLbA2XHQ2/GQAGNxqgQUAcLmlAmvbLWfb
DweAMS0VWAAAI1gnsDZfcTb/fAAYyjqBBQAwiEUCy37z4hIAYBiLBBYAwDhWCCzLzS+uAgBGsEJg
AQAMZfrAstn8xoUAwOWmDywAgNHMHVjWmne5FgC41tyBBQAwoIkDy07zCZcDABeaOLAAAMY0a2BZ
aL7kigDgKrMGFgDAsKYMLNvMjVwUAFxiysACABjZfIFllbmL6wKA880XWAAAg5sssOwxD3BpAHCy
yQILAGB8MwWWJeZhrg4AzjRTYAEATGGawLLBPMkFAsBppgksAIBZzBFY1peEawSAc8wRWAAAE5kg
sOwuIZcJACeYILAAAOYyemBZXHKuFACONnpgAQBMZ+jAsrUcxMUCwKGGDiwAgBmNG1hWlkO5XgA4
zriBBQAwqUEDy75yApcMAAcZNLAAAOY1YmBZVk7jqgHgCCMGFgDA1IYLLJvKyVw4AOSGCywAgNmN
FVjWlEu4dgBojRVYAAALGCiw7CgXcvkAEBoosAAA1jBKYFlQLucJAKAySmABACxjiMCynQzCQwBA
YojAAgBYyfWBZTUZiucAgOddH1gAAIu5OLDsJQPyKADwJAsWAEDsysCylAzL0wDAMyxYAACxywLL
RjI4DwQAD7NgAQDErgks68gUPBMAPMaCBQAQuyCw7CIT8VgA8AALFgBA7OzAsohMx5MBwL0sWAAA
sVMDyxYyKQ8HAHexYAEAxM4LLCvI1DwfANzOggUAEDspsOwfC/CIAHAjCxYAQOyMwLJ8LMNTAsAt
LFgAALHDA8vmsRgPCi0AX7JgAQDEjg0sa8eSPCsAfM6CBQAQOzCw7BwL87gA8Ilvx/3qP/8+7ncD
AIzLPxECAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMQEFgBA
TGABAMQEFgBATGABAMQEFgBATGABAMQEFgBATGABAMRe397e3v/B6+vJR2E3H/3tAcDsLFgAALEP
FywAAB5jwQIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAks
AICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICY
wAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIA
iAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiAksAICYwAIAiP0DS8u0beEeDl4AAAAASUVORK5C
YIIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Nzcy13ZWJraXQtY2FudmFzLXJlcGFpbnQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVy
cnkvZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtcmVwYWludC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkv
ZmFzdC9jYW52YXMvd2ViZ2wvY3NzLXdlYmtpdC1jYW52YXMtcmVwYWludC1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMCwwIEBACi1sYXllciBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKLSAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLWxheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAotICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi0g
ICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0Ci0gICAgICBSZW5kZXJJ
bWFnZSB7RElWfSBhdCAoMCwwKSBzaXplIDIwNHgyMDQgW2JvcmRlcjogKDJweCBzb2xpZCAjMDAw
MDAwKV0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMv
d2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQtb2YtYm91bmRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2Ry
YXctZWxlbWVudHMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvZHJh
dy1lbGVtZW50cy1vdXQtb2YtYm91bmRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MSw2MiArMCwwIEBACi1QVlI6KEVycm9yKTogUFZSU1JWQWxsb2NEZXZpY2VNZW06IEVycm9yIDMg
cmV0dXJuZWQgWzkyNSwgL2JyaWRnZWRfcHZyX2dsdWUuY10KLVBWUjooRXJyb3IpOiBnbEJ1ZmZl
ckRhdGE6IENhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3Igb2JqZWN0IFs3ODYsIC9idWZvYmouY10K
LVRlc3Qgb2YgZHJhd0VsZW1lbnRzIHdpdGggb3V0LW9mLWJvdW5kcyBwYXJhbWV0ZXJzCi0KLU9u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotVGVzdCBlbXB0eSBpbmRleCBidWZmZXIKLVBBU1Mg
Y29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDMsIGNvbnRleHQuVU5TSUdO
RURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElP
Ti4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDEwMDAwLCBj
b250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5W
QUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5H
TEVTLCAxMDAwMDAwMDAwMDAwMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQg
ZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdF
bGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkg
Z2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0
LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMSwgY29udGV4dC5VTlNJR05FRF9CWVRF
LCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFT
UyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJ
R05FRF9CWVRFLCAtMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVF
LgotRkFJTCBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4
dC5VTlNJR05FRF9CWVRFLCAwKSBleHBlY3RlZDogTk9fRVJST1IuIFdhcyBPVVRfT0ZfTUVNT1JZ
LgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRl
eHQuVU5TSUdORURfQllURSwgMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElE
X1ZBTFVFLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMSwg
Y29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJ
TlZBTElEX1ZBTFVFLgotCi1UZXN0IGJ1ZmZlciB3aXRoIDMgYnl0ZSBpbmRleGVzCi1QQVNTIGNv
bnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBjb250ZXh0LlVOU0lHTkVE
X0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi1QQVNTIGNv
bnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBjb250ZXh0LlVOU0lHTkVE
X0lOVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX0VOVU0uCi1QQVNT
IGNvbnRleHQuZHJhd0VsZW1lbnRzKDB4MDAwOSwgMywgY29udGV4dC5VTlNJR05FRF9CWVRFLCAw
KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfRU5VTS4KLVBBU1MgY29udGV4
dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDMsIGNvbnRleHQuVU5TSUdORURfQllU
RSwgMikgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBB
U1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDEwMDAwLCBjb250ZXh0
LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9P
UEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAx
MDAwMDAwMDAwMDAwMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0
ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50
cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0LmRyYXdF
bGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkg
Z2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250ZXh0
LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllU
RSwgMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBj
b250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMSwgY29udGV4dC5VTlNJR05F
RF9CWVRFLCAtMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgot
UEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5V
TlNJR05FRF9CWVRFLCA0KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgot
UEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMHhmZmZmZmZmZiwg
Y29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElO
VkFMSURfVkFMVUUuCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVT
LCAweDdmZmZmZmZmLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3Rl
ZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRz
KGNvbnRleHQuVFJJQU5HTEVTLCAweDdmZmZmZmZmLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDB4
N2ZmZmZmZmYpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04u
Ci1QQVNTIGNvbnRleHQuYnVmZmVyRGF0YShjb250ZXh0LkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAo
bmV3IFVpbnQ4QXJyYXkoWyAzLCAwLCAxLCAyIF0pKS5zdWJhcnJheSgxKSwgY29udGV4dC5TVEFU
SUNfRFJBVykgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29u
dGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDMsIGNvbnRleHQuVU5TSUdORURf
QllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29u
dGV4dC5idWZmZXJTdWJEYXRhKGNvbnRleHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG5ldyBV
aW50OEFycmF5KFsgMywgMCwgMV0pKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VS
Uk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMywgY29u
dGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFM
SURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmJ1ZmZlclN1YkRhdGEoY29udGV4dC5FTEVNRU5U
X0FSUkFZX0JVRkZFUiwgMCwgKG5ldyBVaW50OEFycmF5KFsgMywgMCwgMSwgMiBdKSkuc3ViYXJy
YXkoMSkpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi1QQVNTIGNvbnRl
eHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAzLCBjb250ZXh0LlVOU0lHTkVEX0JZ
VEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi1QQVNTIGNvbnRl
eHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCBjb250ZXh0LlVOU0lHTkVEX0JZ
VEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi0KLVRlc3QgYnVm
ZmVyIHdpdGggaW50ZXJsZWF2ZWQgKDMrMikgZmxvYXQgdmVjdG9ycwotUEFTUyBjb250ZXh0LmRy
YXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgOSwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwg
MCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5k
cmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDksIGNvbnRleHQuRkxPQVQsIDApIGdlbmVy
YXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9FTlVNLgotUEFTUyBjb250ZXh0LmRyYXdF
bGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgOSwgY29udGV4dC5TSE9SVCwgMCkgZ2VuZXJhdGVk
IGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX0VOVU0uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1l
bnRzKGNvbnRleHQuVFJJQU5HTEVTLCA5LCBjb250ZXh0LlVOU0lHTkVEX0lOVCwgMCkgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX0VOVU0uCi1QQVNTIGNvbnRleHQuZHJhd0Vs
ZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCA5LCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAxMDAw
KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBj
b250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMTIsIGNvbnRleHQuVU5TSUdO
RURfU0hPUlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJ
T04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAxNSwgY29u
dGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZB
TElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdM
RVMsIDE4LCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wg
ZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250
ZXh0LlRSSUFOR0xFUywgMywgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMioxNSkgZ2VuZXJhdGVk
IGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLVBBU1MgY29udGV4dC5kcmF3
RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDB4ZmZmZmZmZmYsIGNvbnRleHQuVU5TSUdORURf
U0hPUlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KLVBB
U1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDB4N2ZmZmZmZmYsIGNv
bnRleHQuVU5TSUdORURfU0hPUlQsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5W
QUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5H
TEVTLCAwLCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wg
ZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFO
R0xFUywgNiwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdM
IGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklB
TkdMRVMsIDYsIGNvbnRleHQuVU5TSUdORURfU0hPUlQsIDEpIGdlbmVyYXRlZCBleHBlY3RlZCBH
TCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCi1QQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNv
bnRleHQuVFJJQU5HTEVTLCA2LCBjb250ZXh0LlVOU0lHTkVEX1NIT1JULCAyKSBnZW5lcmF0ZWQg
ZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhj
b250ZXh0LlRSSUFOR0xFUywgNiwgY29udGV4dC5VTlNJR05FRF9TSE9SVCwgMCkgZ2VuZXJhdGVk
IGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KLQotUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItb2JqZWN0LWF0
dGFjaG1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L2JsYWNrYmVycnkvZmFzdC9jYW52YXMvd2ViZ2wvZnJhbWVidWZmZXItb2JqZWN0LWF0dGFjaG1l
bnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ibGFja2JlcnJ5L2Zhc3QvY2FudmFzL3dlYmdsL2ZyYW1lYnVmZmVyLW9iamVjdC1hdHRhY2ht
ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2MTIgKzAsMCBAQAotVGVzdCBm
cmFtZWJ1ZmZlciBvYmplY3QgYXR0YWNobWVudCBiZWhhdmlvcnMKLQotT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgotCi0KLURpbWVuc2lvbnMgMCB4IDAKLUNyZWF0ZSByZW5kZXJidWZmZXJzCi1Q
QVNTIGdsID0gY3JlYXRlM0RDb250ZXh0KCkgaXMgbm9uLW51bGwuCi1QQVNTIGNvbG9yQnVmZmVy
ID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhCdWZmZXIgPSBnbC5jcmVh
dGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBzdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVy
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1B
dHRhY2ggZGVwdGggdXNpbmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVw
dGggdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZy
YW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJV
RkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggc3RlbmNp
bCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBy
ZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5n
IERFUFRIX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBu
b24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAot
UEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAz
NjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIERFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5v
bi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1Q
QVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2
MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBERVBU
SF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5l
ZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcg
REVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5v
bi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1Q
QVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2
MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBTVEVO
Q0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1
NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCwgdGhlbiBzdGVuY2lsLCBjYXVz
aW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51
bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIHN0
ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRl
RnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJl
dHVybmVkIDM2MDU0Ci1BdHRhY2ggZGVwdGgsIHRoZW4gZGVwdGhTdGVuY2lsLCBjYXVzaW5nIGNv
bmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIGRlcHRoU3Rl
bmNpbCwgdGhlbiBkZXB0aCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVG
cmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0
dXJuZWQgMzYwNTQKLUF0dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoU3RlbmNpbCwgY2F1c2luZyBj
b25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBkZXB0aFN0
ZW5jaWwsIHRoZW4gc3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVh
dGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikg
cmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZv
cm1hdCA9PSBSR0JBNAotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigp
IGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OIDogCi1BdHRhY2ggY29sb3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxmb3Jt
YXQgPT0gUkdCNV9BMQotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigp
IGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OIDogCi1BdHRhY2ggY29sb3IgcmVuZGVyYnVmZmVyIHdpdGggaW50ZXJuYWxmb3Jt
YXQgPT0gUkdCNTY1Ci1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkg
aXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDog
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04gOiAKLUNyZWF0ZSBhbmQgYXR0YWNoIGRlcHRoU3RlbmNpbCByZW5kZXJidWZmZXIK
LVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVS
QlVGRkVSX1dJRFRIKSBpcyB3aWR0aAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIo
Z2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfSEVJR0hUKSBpcyBoZWlnaHQKLVBBU1Mg
Z2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVG
RkVSX0lOVEVSTkFMX0ZPUk1BVCkgaXMgZ2wuREVQVEhfU1RFTkNJTAotUEFTUyBnbC5nZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfUkVEX1NJ
WkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZF
UiwgZ2wuUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0JMVUVfU0laRSkg
aXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBn
bC5SRU5ERVJCVUZGRVJfQUxQSEFfU0laRSkgaXMgMAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkg
aXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJu
ZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi0KLURpbWVuc2lvbnMgMCB4IDIKLUNyZWF0
ZSByZW5kZXJidWZmZXJzCi1QQVNTIGdsID0gY3JlYXRlM0RDb250ZXh0KCkgaXMgbm9uLW51bGwu
Ci1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwu
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVw
dGhCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBzdGVuY2lsQnVmZmVy
ID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0g
Z2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBERVBUSF9BVFRB
Q0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGggdXNpbmcgU1RFTkNJTF9BVFRBQ0hNRU5UCi1Q
QVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OIDogCi1BdHRhY2ggZGVwdGggdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNT
IGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
IDogCi1BdHRhY2ggc3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0g
Z2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0
dGFjaCBzdGVuY2lsIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRl
RnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVu
Y2lsIHVzaW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVG
cmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVC
VUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRo
U3RlbmNpbCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3Jl
YXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZS
QU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBk
ZXB0aFN0ZW5jaWwgdXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVG
cmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVC
VUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRo
U3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJh
bWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCwg
dGhlbiBzdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1l
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5l
ZCAzNjA1NAotQXR0YWNoIHN0ZW5jaWwsIHRoZW4gZGVwdGgsIGNhdXNpbmcgY29uZmxpY3QKLVBB
U1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Z2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2ggZGVwdGgsIHRoZW4gZGVwdGhT
dGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVy
KCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1
NAotQXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhlbiBkZXB0aCwgY2F1c2luZyBjb25mbGljdAotUEFT
UyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhn
bC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRo
U3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYw
NTQKLUF0dGFjaCBkZXB0aFN0ZW5jaWwsIHRoZW4gc3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAot
UEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBjb2xvciByZW5kZXJidWZm
ZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0JBNAotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkg
aXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJu
ZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggY29sb3IgcmVuZGVyYnVmZmVy
IHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNV9BMQotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkg
aXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJu
ZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggY29sb3IgcmVuZGVyYnVmZmVy
IHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gUkdCNTY1Ci1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3Jl
YXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5l
ZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUNyZWF0ZSBhbmQgYXR0YWNoIGRlcHRoU3Rl
bmNpbCByZW5kZXJidWZmZXIKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVu
ZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRF
UkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX1dJRFRIKSBpcyB3aWR0aAotUEFTUyBnbC5nZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfSU5URVJO
QUxfRk9STUFUKSBpcyBnbC5ERVBUSF9TVEVOQ0lMCi1QQVNTIGdsLmdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJVRkZFUl9SRURfU0laRSkgaXMgMAot
UEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5E
RVJCVUZGRVJfR1JFRU5fU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfQkxVRV9TSVpFKSBpcyAwCi1QQVNT
IGdsLmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihnbC5SRU5ERVJCVUZGRVIsIGdsLlJFTkRFUkJV
RkZFUl9BTFBIQV9TSVpFKSBpcyAwCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVs
bC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBn
bC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04gOiAKLQotRGltZW5zaW9ucyAyIHggMAotQ3JlYXRlIHJlbmRlcmJ1
ZmZlcnMKLVBBU1MgZ2wgPSBjcmVhdGUzRENvbnRleHQoKSBpcyBub24tbnVsbC4KLVBBU1MgY29s
b3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBkZXB0aEJ1ZmZlciA9
IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIHN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVh
dGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVS
ZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotQXR0YWNoIGRlcHRoIHVzaW5nIERFUFRIX0FUVEFDSE1FTlQKLVBB
U1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBTVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0g
Z2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0
dGFjaCBkZXB0aCB1c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wu
Y3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGds
LkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFj
aCBzdGVuY2lsIHVzaW5nIFNURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVG
cmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVC
VUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIHN0ZW5j
aWwgdXNpbmcgREVQVEhfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJl
dHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIHN0ZW5jaWwgdXNpbmcg
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVy
KCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0
dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGhTdGVuY2lsIHVz
aW5nIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1
ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIp
IHJldHVybmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNp
bCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVy
KCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0
dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggZGVwdGhTdGVuY2lsIHVz
aW5nIFNURU5DSUxfQVRUQUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigp
IGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVy
bmVkIDM2MDU0Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoLCB0aGVuIHN0ZW5j
aWwsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBp
cyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1B
dHRhY2ggc3RlbmNpbCwgdGhlbiBkZXB0aCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBn
bC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJV
RkZFUikgcmV0dXJuZWQgMzYwNTQKLUF0dGFjaCBkZXB0aCwgdGhlbiBkZXB0aFN0ZW5jaWwsIGNh
dXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1BdHRhY2gg
ZGVwdGhTdGVuY2lsLCB0aGVuIGRlcHRoLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGds
LmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIHN0ZW5jaWwsIHRoZW4gZGVwdGhTdGVuY2lsLCBj
YXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9u
LW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNo
IGRlcHRoU3RlbmNpbCwgdGhlbiBzdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSByZXR1cm5lZCAzNjA1NAotQXR0YWNoIGNvbG9yIHJlbmRlcmJ1ZmZlciB3aXRoIGlu
dGVybmFsZm9ybWF0ID09IFJHQkE0Ci1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVy
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVs
bC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBn
bC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRl
cm5hbGZvcm1hdCA9PSBSR0I1X0ExCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVy
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVs
bC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBn
bC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRl
cm5hbGZvcm1hdCA9PSBSR0I1NjUKLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJi
dWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiA6IAotQ3JlYXRlIGFuZCBhdHRhY2ggZGVwdGhTdGVuY2lsIHJlbmRl
cmJ1ZmZlcgotUEFTUyBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIo
KSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBn
bC5SRU5ERVJCVUZGRVJfSEVJR0hUKSBpcyBoZWlnaHQKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1B
VCkgaXMgZ2wuREVQVEhfU1RFTkNJTAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIo
Z2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfUkVEX1NJWkUpIGlzIDAKLVBBU1MgZ2wu
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVS
X0dSRUVOX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJF
TkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0JMVUVfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfQUxQ
SEFfU0laRSkgaXMgMAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6
IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OIDogCi0KLURpbWVuc2lvbnMgMiB4IDIKLUNyZWF0ZSByZW5kZXJidWZmZXJzCi1Q
QVNTIGdsID0gY3JlYXRlM0RDb250ZXh0KCkgaXMgbm9uLW51bGwuCi1QQVNTIGNvbG9yQnVmZmVy
ID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZGVwdGhCdWZmZXIgPSBnbC5jcmVh
dGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBzdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVy
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTMKLUF0dGFjaCBkZXB0aCB1c2luZyBTVEVO
Q0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24t
bnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFT
UyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1
NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCB1c2luZyBERVBUSF9TVEVOQ0lM
X0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVs
bC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBn
bC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBzdGVuY2lsIHVzaW5nIFNURU5DSUxfQVRUQUNI
TUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDUzCi1BdHRhY2gg
c3RlbmNpbCB1c2luZyBERVBUSF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1l
YnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgcmV0dXJuZWQgMzYwNTQKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1BdHRhY2ggc3RlbmNpbCB1
c2luZyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KSByZXR1cm5lZCAzNjA1NAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aFN0ZW5j
aWwgdXNpbmcgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZy
YW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJV
RkZFUikgcmV0dXJuZWQgMzYwNTMKLUF0dGFjaCBkZXB0aFN0ZW5jaWwgdXNpbmcgREVQVEhfQVRU
QUNITUVOVAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgot
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2MDU0Ci1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04gOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiA6IAotQXR0YWNoIGRlcHRoU3RlbmNpbCB1c2luZyBTVEVOQ0lMX0FUVEFD
SE1FTlQKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA1NAotUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
IDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04gOiAKLUF0dGFjaCBkZXB0aCwgdGhlbiBzdGVuY2lsLCBjYXVzaW5nIGNvbmZs
aWN0Ci1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA2MQotQXR0YWNoIHN0ZW5jaWwsIHRo
ZW4gZGVwdGgsIGNhdXNpbmcgY29uZmxpY3QKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1Q
QVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2
MDYxCi1BdHRhY2ggZGVwdGgsIHRoZW4gZGVwdGhTdGVuY2lsLCBjYXVzaW5nIGNvbmZsaWN0Ci1Q
QVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSByZXR1cm5lZCAzNjA2MQotQXR0YWNoIGRlcHRoU3RlbmNpbCwgdGhl
biBkZXB0aCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBB
U1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYw
NjEKLUF0dGFjaCBzdGVuY2lsLCB0aGVuIGRlcHRoU3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAot
UEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNjEKLUF0dGFjaCBkZXB0aFN0ZW5jaWwsIHRo
ZW4gc3RlbmNpbCwgY2F1c2luZyBjb25mbGljdAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1
ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
LVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQg
MzYwNjEKLUF0dGFjaCBjb2xvciByZW5kZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBS
R0JBNAotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1u
dWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1QQVNT
IGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTMKLUF0dGFjaCBjb2xvciByZW5k
ZXJidWZmZXIgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBSR0I1X0ExCi1QQVNTIGNvbG9yQnVmZmVy
ID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KSByZXR1cm5lZCAzNjA1MwotQXR0YWNoIGNvbG9yIHJlbmRlcmJ1ZmZlciB3aXRoIGludGVybmFs
Zm9ybWF0ID09IFJHQjU2NQotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgcmV0dXJuZWQgMzYwNTMKLUNyZWF0
ZSBhbmQgYXR0YWNoIGRlcHRoU3RlbmNpbCByZW5kZXJidWZmZXIKLVBBU1MgZGVwdGhTdGVuY2ls
QnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX1dJRFRIKSBpcyB3
aWR0aAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBn
bC5SRU5ERVJCVUZGRVJfSEVJR0hUKSBpcyBoZWlnaHQKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1B
VCkgaXMgZ2wuREVQVEhfU1RFTkNJTAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIo
Z2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfUkVEX1NJWkUpIGlzIDAKLVBBU1MgZ2wu
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVS
X0dSRUVOX1NJWkUpIGlzIDAKLVBBU1MgZ2wuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJF
TkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVSX0JMVUVfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVSQlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfQUxQ
SEFfU0laRSkgaXMgMAotUEFTUyBnbC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoZ2wuUkVOREVS
QlVGRkVSLCBnbC5SRU5ERVJCVUZGRVJfREVQVEhfU0laRSkgPiAwIGlzIHRydWUKLVBBU1MgZ2wu
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkVOREVSQlVGRkVS
X1NURU5DSUxfU0laRSkgPiAwIGlzIHRydWUKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5v
bi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1Q
QVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHJldHVybmVkIDM2
MDUzCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGRlcHRoQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLQotQXR0YWNobWVudHMg
b2YgZGlmZmVyZW50IHNpemVzIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVO
U0lPTlMgKE9wZW5HTCBFUyAyLjAgNC40LjUpCi1QQVNTIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGRlcHRoQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVm
ZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikg
c2hvdWxkIGJlIEZSQU1FQlVGRkVSX0NPTVBMRVRFIHdhcyBGUkFNRUJVRkZFUl9DT01QTEVURQot
UEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUg
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIHdhcyBGUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0RJTUVOU0lPTlMgb3IgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQKLVBBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0NP
TVBMRVRFIHdhcyBGUkFNRUJVRkZFUl9DT01QTEVURQotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9E
SU1FTlNJT05TIHdhcyBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgb3IgRlJBTUVC
VUZGRVJfVU5TVVBQT1JURUQKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0NPTVBMRVRFIHdhcyBGUkFNRUJVRkZFUl9D
T01QTEVURQotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi1Q
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfRElNRU5TSU9OUyB3YXMgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJ
T05TIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3YXMg
RlJBTUVCVUZGRVJfQ09NUExFVEUKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxs
LgotUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQg
YmUgRlJBTUVCVUZGRVJfQ09NUExFVEUgd2FzIEZSQU1FQlVGRkVSX0NPTVBMRVRFCi0KLVdyb25n
IHN0b3JhZ2UgdHlwZSBmb3IgdHlwZSBvZiBhdHRhY2htZW50IGJlIEZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVCAoT3BlbkdMIEVTIDIuMCA0LjQuNSkKLVBBU1MgZ2wuY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVCB3YXMgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIG9y
IEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Z2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3YXMgRlJBTUVC
VUZGRVJfQ09NUExFVEUKLQotMCBzaXplIGF0dGFjaG1lbnQgc2hvdWxkIGJlIEZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfQVRUQUNITUVOVCAoT3BlbkdMIEVTIDIuMCA0LjQuNSkKLVBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfQVRUQUNITUVOVCB3YXMgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hN
RU5UIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLQotTm8gYXR0YWNobWVudHMgc2hvdWxkIGJlIElOQ09NUExF
VEVfRlJBTUVCVUZGRVJfTUlTU0lOR19BVFRBQ0hNRU5UIChPcGVuR0wgRVMgMi4wIDQuNC41KQot
UEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnbC5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBzaG91bGQgYmUgRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgd2FzIEZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfTUlTU0lOR19BVFRBQ0hNRU5UIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECi1QQVNTIGNv
bG9yQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkgaXMgbm9uLW51bGwuCi1QQVNTIGds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIHNob3VsZCBiZSBGUkFNRUJV
RkZFUl9DT01QTEVURSB3YXMgRlJBTUVCVUZGRVJfQ09NUExFVEUKLVBBU1MgZ2wuY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIHdhcyBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJ
TkdfQVRUQUNITUVOVCBvciBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAotUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCi0KLVRlc3QgZHJhd2luZyBvciByZWFkaW5n
IGZyb20gYW4gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBmYm8gPSBnbC5jcmVhdGVGcmFt
ZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBkZXB0aEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpIGlzIG5vbi1udWxsLgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpIHNob3VsZCBiZSBGUkFNRUJVRkZFUl9DT01QTEVURSB3YXMgRlJBTUVCVUZGRVJfQ09NUExF
VEUKLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxk
IGJlIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyB3YXMgRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9ESU1FTlNJT05TIG9yIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVECi0KLURyYXdpbmcg
b3IgcmVhZGluZyBmcm9tIGFuIGluY29tcGxldGUgZnJhbWVidWZmZXIgc2hvdWxkIGdlbmVyYXRl
IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IGRyYXdBcnJheXMgd2l0aCBpbmNvbXBsZXRl
IGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04gOiByZWFkUGl4ZWxzIGZyb20gaW5jb21wbGV0ZSBmcmFtZWJ1
ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogY29weVRleEltYWdlMkQgZnJvbSBpbmNvbXBsZXRlIGZyYW1lYnVmZmVy
Ci1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04gOiBjb3B5VGV4U3ViSW1hZ2UyRCBmcm9tIGluY29tcGxldGUgZnJhbWVidWZmZXIK
LVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTiA6IGNsZWFyIHdpdGggaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBmYm8yID0g
Z2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KLVBBU1MgZ2wuY2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgc2hvdWxkIGJlIEZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfTUlTU0lOR19BVFRBQ0hNRU5UIHdhcyBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdf
QVRUQUNITUVOVCBvciBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRAotCi1EcmF3aW5nIG9yIHJlYWRp
bmcgZnJvbSBhbiBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04gOiBkcmF3QXJyYXlzIHdpdGggaW5jb21wbGV0ZSBmcmFtZWJ1
ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIDogcmVhZFBpeGVscyBmcm9tIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6IGNvcHlU
ZXhJbWFnZTJEIGZyb20gaW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDogY29weVRleFN1YkltYWdlMkQgZnJv
bSBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBjbGVhciB3aXRoIGluY29tcGxldGUg
ZnJhbWVidWZmZXIKLVBBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBp
cyBub24tbnVsbC4KLQotRHJhd2luZyBvciByZWFkaW5nIGZyb20gYW4gaW5jb21wbGV0ZSBmcmFt
ZWJ1ZmZlciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04KLVBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAotUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogZHJh
d0FycmF5cyB3aXRoIGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IHJlYWRQaXhlbHMg
ZnJvbSBpbmNvbXBsZXRlIGZyYW1lYnVmZmVyCi1QQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gOiBjb3B5VGV4SW1hZ2UyRCBmcm9t
IGluY29tcGxldGUgZnJhbWVidWZmZXIKLVBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA6IGNvcHlUZXhTdWJJbWFnZTJEIGZyb20g
aW5jb21wbGV0ZSBmcmFtZWJ1ZmZlcgotUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIDogY2xlYXIgd2l0aCBpbmNvbXBsZXRlIGZy
YW1lYnVmZmVyCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExF
VEUKLQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1zL2Rh
dGFsaXN0L2lucHV0LWxpc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9mb3Jtcy9kYXRhbGlzdC9pbnB1dC1saXN0LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9mYXN0L2Zvcm1zL2RhdGFsaXN0L2lucHV0LWxpc3QtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDM1ICswLDAgQEAKLVRlc3QgZm9yIHRoZSBsaXN0IGF0dHJpYnV0ZS4KLQot
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi0KLVBBU1MgaW5wdXQubGlzdCBpcyBudWxsCi1Q
QVNTIGlucHV0Lmxpc3QgaXMgbnVsbAotUEFTUyBpbnB1dC5saXN0IGlzIG51bGwKLVBBU1MgZGF0
YWxpc3QuY2xhc3NOYW1lIGlzICJmb3JtZXIiCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0ZXh0IikubGlzdCBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGwxIikKLVBBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaCIpLmxpc3QgaXMgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImRsMSIpCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmwiKS5saXN0IGlz
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkbDEiKQotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgidGVsZXBob25lIikubGlzdCBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGwxIikK
LVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVtYWlsIikubGlzdCBpcyBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZGwxIikKLUZBSUwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhdGV0
aW1lIikubGlzdCBzaG91bGQgYmUgW29iamVjdCBIVE1MRGF0YUxpc3RFbGVtZW50XS4gV2FzIG51
bGwuCi1GQUlMIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYXRlIikubGlzdCBzaG91bGQgYmUg
W29iamVjdCBIVE1MRGF0YUxpc3RFbGVtZW50XS4gV2FzIG51bGwuCi1GQUlMIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJtb250aCIpLmxpc3Qgc2hvdWxkIGJlIFtvYmplY3QgSFRNTERhdGFMaXN0
RWxlbWVudF0uIFdhcyBudWxsLgotRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid2VlayIp
Lmxpc3Qgc2hvdWxkIGJlIFtvYmplY3QgSFRNTERhdGFMaXN0RWxlbWVudF0uIFdhcyBudWxsLgot
RkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGltZSIpLmxpc3Qgc2hvdWxkIGJlIFtvYmpl
Y3QgSFRNTERhdGFMaXN0RWxlbWVudF0uIFdhcyBudWxsLgotRkFJTCBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZGF0ZXRpbWUtbG9jYWwiKS5saXN0IHNob3VsZCBiZSBbb2JqZWN0IEhUTUxEYXRh
TGlzdEVsZW1lbnRdLiBXYXMgbnVsbC4KLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm51
bWJlciIpLmxpc3QgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRsMSIpCi1QQVNTIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJyYW5nZSIpLmxpc3QgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImRsMSIpCi1GQUlMIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2xvciIpLmxpc3Qgc2hv
dWxkIGJlIFtvYmplY3QgSFRNTERhdGFMaXN0RWxlbWVudF0uIFdhcyBudWxsLgotUEFTUyBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiaGlkZGVuIikubGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJwYXNzd29yZCIpLmxpc3QgaXMgbnVsbAotUEFTUyBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2hlY2tib3giKS5saXN0IGlzIG51bGwKLVBBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInJhZGlvIikubGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJmaWxlIikubGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJzdWJtaXQiKS5saXN0IGlzIG51bGwKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlt
YWdlIikubGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNldCIp
Lmxpc3QgaXMgbnVsbAotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uIikubGlz
dCBpcyBudWxsCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExF
VEUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9mb3Jtcy9udW1i
ZXIvbnVtYmVyLXZhbGlkYXRpb24tbWVzc2FnZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1zL251bWJlci9udW1iZXIt
dmFsaWRhdGlvbi1tZXNzYWdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1zL251bWJlci9udW1iZXItdmFs
aWRhdGlvbi1tZXNzYWdlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwyMSArMCww
IEBACi1UZXN0IGZvciB2YWxpZGF0aW9uTWVzc2FnZSBJREwgYXR0cmlidXRlIGZvciA8aW5wdXQg
dHlwZT1udW1iZXI+Ci0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1ObyBtZXNzYWdl
Ci1QQVNTIHRlc3RJdCgiIiwgIiIsICIiKSBpcyAiIgotVmFsdWUgbWlzc2luZwotRkFJTCB0ZXN0
SXQoIiIsICIiLCAiIikgc2hvdWxkIGJlIHZhbHVlIG1pc3NpbmcuIFdhcyBJbnB1dCB2YWx1ZSBt
aXNzaW5nLgotVHlwZSBtaXNtYXRjaAotUEFTUyB0ZXN0SXQoImZvbyIsICIiLCAiIikgaXMgIiIK
LVJhbmdlIG92ZXJmbG93Ci1GQUlMIHRlc3RJdCgiMjAwIiwgIiIsICIxMDAiKSBzaG91bGQgYmUg
cmFuZ2Ugb3ZlcmZsb3cuIFdhcyBWYWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAx
MDAuCi1SYW5nZSB1bmRlcmZsb3cKLUZBSUwgdGVzdEl0KCIxMCIsICI1MCIsICIxMDAiKSBzaG91
bGQgYmUgcmFuZ2UgdW5kZXJmbG93LiBXYXMgVmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3Ig
ZXF1YWwgdG8gNTAuCi1TdGVwIG1pc21hdGNoCi1GQUlMIHRlc3RJdCgiNTUiLCAiMCIsICIxMDAi
LCAiMTAiKSBzaG91bGQgYmUgc3RlcCBtaXNtYXRjaC4gV2FzIFN0ZXAgbWlzbWF0Y2guCi1QQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1zL2RhdGFsaXN0L2lucHV0LWxp
c3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNr
YmVycnkvZmFzdC9mb3Jtcy9kYXRhbGlzdC9pbnB1dC1saXN0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1z
L2RhdGFsaXN0L2lucHV0LWxpc3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1
ICswLDAgQEAKLVRlc3QgZm9yIHRoZSBsaXN0IGF0dHJpYnV0ZS4KLQotT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgotCi0KLVBBU1MgaW5wdXQubGlzdCBpcyBudWxsCi1QQVNTIGlucHV0Lmxpc3Qg
aXMgbnVsbAotUEFTUyBpbnB1dC5saXN0IGlzIG51bGwKLVBBU1MgZGF0YWxpc3QuY2xhc3NOYW1l
IGlzICJmb3JtZXIiCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0IikubGlzdCBp
cyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGwxIikKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInNlYXJjaCIpLmxpc3QgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRsMSIpCi1Q
QVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmwiKS5saXN0IGlzIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJkbDEiKQotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVsZXBob25l
IikubGlzdCBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGwxIikKLVBBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImVtYWlsIikubGlzdCBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
ZGwxIikKLUZBSUwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhdGV0aW1lIikubGlzdCBzaG91
bGQgYmUgW29iamVjdCBIVE1MRGF0YUxpc3RFbGVtZW50XS4gV2FzIG51bGwuCi1GQUlMIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJkYXRlIikubGlzdCBzaG91bGQgYmUgW29iamVjdCBIVE1MRGF0
YUxpc3RFbGVtZW50XS4gV2FzIG51bGwuCi1GQUlMIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJt
b250aCIpLmxpc3Qgc2hvdWxkIGJlIFtvYmplY3QgSFRNTERhdGFMaXN0RWxlbWVudF0uIFdhcyBu
dWxsLgotRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid2VlayIpLmxpc3Qgc2hvdWxkIGJl
IFtvYmplY3QgSFRNTERhdGFMaXN0RWxlbWVudF0uIFdhcyBudWxsLgotRkFJTCBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidGltZSIpLmxpc3Qgc2hvdWxkIGJlIFtvYmplY3QgSFRNTERhdGFMaXN0
RWxlbWVudF0uIFdhcyBudWxsLgotRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGF0ZXRp
bWUtbG9jYWwiKS5saXN0IHNob3VsZCBiZSBbb2JqZWN0IEhUTUxEYXRhTGlzdEVsZW1lbnRdLiBX
YXMgbnVsbC4KLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm51bWJlciIpLmxpc3QgaXMg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRsMSIpCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJyYW5nZSIpLmxpc3QgaXMgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRsMSIpCi1GQUlM
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2xvciIpLmxpc3Qgc2hvdWxkIGJlIFtvYmplY3Qg
SFRNTERhdGFMaXN0RWxlbWVudF0uIFdhcyBudWxsLgotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaGlkZGVuIikubGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJwYXNzd29yZCIpLmxpc3QgaXMgbnVsbAotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2hlY2tib3giKS5saXN0IGlzIG51bGwKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJh
ZGlvIikubGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlIiku
bGlzdCBpcyBudWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdWJtaXQiKS5saXN0
IGlzIG51bGwKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltYWdlIikubGlzdCBpcyBu
dWxsCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNldCIpLmxpc3QgaXMgbnVsbAot
UEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uIikubGlzdCBpcyBudWxsCi1QQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9mb3Jtcy9udW1iZXIvbnVtYmVyLXZhbGlk
YXRpb24tbWVzc2FnZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1zL251bWJlci9udW1iZXItdmFsaWRhdGlvbi1tZXNz
YWdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vYmxhY2tiZXJyeS9mYXN0L2Zvcm1zL251bWJlci9udW1iZXItdmFsaWRhdGlvbi1tZXNzYWdl
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwyMSArMCwwIEBACi1UZXN0IGZvciB2
YWxpZGF0aW9uTWVzc2FnZSBJREwgYXR0cmlidXRlIGZvciA8aW5wdXQgdHlwZT1udW1iZXI+Ci0K
LU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1ObyBtZXNzYWdlCi1QQVNTIHRlc3RJdCgi
IiwgIiIsICIiKSBpcyAiIgotVmFsdWUgbWlzc2luZwotRkFJTCB0ZXN0SXQoIiIsICIiLCAiIikg
c2hvdWxkIGJlIHZhbHVlIG1pc3NpbmcuIFdhcyBJbnB1dCB2YWx1ZSBtaXNzaW5nLgotVHlwZSBt
aXNtYXRjaAotUEFTUyB0ZXN0SXQoImZvbyIsICIiLCAiIikgaXMgIiIKLVJhbmdlIG92ZXJmbG93
Ci1GQUlMIHRlc3RJdCgiMjAwIiwgIiIsICIxMDAiKSBzaG91bGQgYmUgcmFuZ2Ugb3ZlcmZsb3cu
IFdhcyBWYWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAuCi1SYW5nZSB1bmRl
cmZsb3cKLUZBSUwgdGVzdEl0KCIxMCIsICI1MCIsICIxMDAiKSBzaG91bGQgYmUgcmFuZ2UgdW5k
ZXJmbG93LiBXYXMgVmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gNTAuCi1T
dGVwIG1pc21hdGNoCi1GQUlMIHRlc3RJdCgiNTUiLCAiMCIsICIxMDAiLCAiMTAiKSBzaG91bGQg
YmUgc3RlcCBtaXNtYXRjaC4gV2FzIFN0ZXAgbWlzbWF0Y2guCi1QQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vYmxhY2tiZXJyeS9mYXN0L21lZGlhL3czYy90ZXN0X21lZGlhX3F1ZXJpZXMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvZmFzdC9t
ZWRpYS93M2MvdGVzdF9tZWRpYV9xdWVyaWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L21lZGlhL3czYy90ZXN0
X21lZGlhX3F1ZXJpZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMwNSArMCww
IEBACi0KLQotUEFTUyBxdWVyeSAob3JpZW50YXRpb24pIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIHF1ZXJ5IG5vdCAob3JpZW50YXRpb24pIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFT
UyBxdWVyeSBvbmx5IChvcmllbnRhdGlvbikgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNT
IHF1ZXJ5IGFsbCBhbmQgKG9yaWVudGF0aW9uKSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBx
dWVyeSBub3QgYWxsIGFuZCAob3JpZW50YXRpb24pIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNT
IHF1ZXJ5IG9ubHkgYWxsIGFuZCAob3JpZW50YXRpb24pIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIHF1ZXJ5IChvcmllbnRhdGlvbjogJ2xhbmRzY2FwZScpIHNob3VsZCBub3QgYmUgcGFyc2Vh
YmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4
cHJlc3Npb24gd2lkdGg6IDAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3
aWR0aDogMHB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gd2lkdGg6IDBl
bSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAtMCBzaG91bGQg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi13aWR0aDogLTAgc2hvdWxkIGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtd2lkdGg6IC0wIHNob3VsZCBiZSBwYXJzZWFi
bGUgCi1QQVNTIGV4cHJlc3Npb24gd2lkdGg6IC0wY20gc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBB
U1MgZXhwcmVzc2lvbiB3aWR0aDogMXB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJl
c3Npb24gd2lkdGg6IDAuMDAxbW0gc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biB3aWR0aDogMTAwMDAwcHggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3
aWR0aDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0
aDogJzIwcHgnIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi13
aWR0aDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgt
d2lkdGg6IC0xcHggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWlu
LXdpZHRoOiAnMTBweCcgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
bWF4LXdpZHRoOiAnMTBweCcgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gd2lkdGg6IC0wLjAwMDAxbW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJl
c3Npb24gd2lkdGg6IC0xMDAwMDBlbSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiBtaW4td2lkdGggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gbWF4LXdpZHRoIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhl
aWdodCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogMCBzaG91
bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogMHB4IHNob3VsZCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAwZW0gc2hvdWxkIGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IC0wIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gbWluLWhlaWdodDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiBtYXgtaGVpZ2h0OiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNz
aW9uIGhlaWdodDogLTBjbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhl
aWdodDogMXB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAw
LjAwMW1tIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAxMDAw
MDBweCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogLTFweCBz
aG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6ICcyMHB4JyBz
aG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4taGVpZ2h0OiAtMXB4
IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1oZWlnaHQ6IC0x
cHggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWhlaWdodDog
JzEwcHgnIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1oZWln
aHQ6ICcxMHB4JyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWln
aHQ6IC0wLjAwMDAxbW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
aGVpZ2h0OiAtMTAwMDAwZW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gbWluLWhlaWdodCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBt
YXgtaGVpZ2h0IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmlj
ZS13aWR0aCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0
aDogMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDog
MHB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAw
ZW0gc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IC0w
IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWRldmljZS13aWR0aDog
LTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtZGV2aWNlLXdpZHRo
OiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDog
LTBjbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDog
MXB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAw
LjAwMW1tIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRo
OiAxMDAwMDBweCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13
aWR0aDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZp
Y2Utd2lkdGg6ICcyMHB4JyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBtaW4tZGV2aWNlLXdpZHRoOiAtMXB4IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBl
eHByZXNzaW9uIG1heC1kZXZpY2Utd2lkdGg6IC0xcHggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gbWluLWRldmljZS13aWR0aDogJzEwcHgnIHNob3VsZCBub3QgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2Utd2lkdGg6ICcxMHB4JyBzaG91
bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IC0wLjAw
MDAxbW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdp
ZHRoOiAtMTAwMDAwZW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
bWluLWRldmljZS13aWR0aCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBtYXgtZGV2aWNlLXdpZHRoIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNz
aW9uIGRldmljZS1oZWlnaHQgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBk
ZXZpY2UtaGVpZ2h0OiAwIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2
aWNlLWhlaWdodDogMHB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2
aWNlLWhlaWdodDogMGVtIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2
aWNlLWhlaWdodDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4t
ZGV2aWNlLWhlaWdodDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBt
YXgtZGV2aWNlLWhlaWdodDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBkZXZpY2UtaGVpZ2h0OiAtMGNtIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gZGV2aWNlLWhlaWdodDogMXB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gZGV2aWNlLWhlaWdodDogMC4wMDFtbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHBy
ZXNzaW9uIGRldmljZS1oZWlnaHQ6IDEwMDAwMHB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gZGV2aWNlLWhlaWdodDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAnMjBweCcgc2hvdWxkIG5vdCBiZSBwYXJz
ZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWRldmljZS1oZWlnaHQ6IC0xcHggc2hvdWxkIG5v
dCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWRldmljZS1oZWlnaHQ6IC0xcHgg
c2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWRldmljZS1oZWln
aHQ6ICcxMHB4JyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgt
ZGV2aWNlLWhlaWdodDogJzEwcHgnIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHBy
ZXNzaW9uIGRldmljZS1oZWlnaHQ6IC0wLjAwMDAxbW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWhlaWdodDogLTEwMDAwMGVtIHNob3VsZCBub3QgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1kZXZpY2UtaGVpZ2h0IHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2UtaGVpZ2h0IHNob3VsZCBu
b3QgYmUgcGFyc2VhYmxlIAotUEFTUyBhbGwgYW5kICh3aWR0aDogd2lkdGggcHgpIHNob3VsZCBh
cHBseSAKLVBBU1MgYWxsIGFuZCAod2lkdGg6IHdpZHRoICsxIHB4KSBzaG91bGQgbm90IGFwcGx5
IAotUEFTUyBhbGwgYW5kICh3aWR0aDogd2lkdGggLTEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1Q
QVNTIGFsbCBhbmQgKG1pbi13aWR0aDogd2lkdGggcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxs
IGFuZCAobWluLXdpZHRoOiB3aWR0aCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxs
IGFuZCAobWluLXdpZHRoOiB3aWR0aCAtMSBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5k
IChtYXgtd2lkdGg6IHdpZHRoIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC13
aWR0aDogd2lkdGggKzEgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LXdpZHRo
OiB3aWR0aCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLXdpZHRo
OiB3aWR0aCArMSBlbSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLXdpZHRo
OiB3aWR0aCAtMSBlbSkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtd2lkdGg6IHdp
ZHRoICsxIGVtKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC13aWR0aDogd2lkdGgg
LTEgZW0pIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGhlaWdodDogaGVpZ2h0IHB4
KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGhlaWdodDogaGVpZ2h0ICsxIHB4KSBzaG91
bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChoZWlnaHQ6IGhlaWdodCAtMSBweCkgc2hvdWxk
IG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWhlaWdodDogaGVpZ2h0IHB4KSBzaG91bGQg
YXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1oZWlnaHQ6IGhlaWdodCArMSBweCkgc2hvdWxkIG5v
dCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWhlaWdodDogaGVpZ2h0IC0xIHB4KSBzaG91bGQg
YXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1oZWlnaHQ6IGhlaWdodCBweCkgc2hvdWxkIGFwcGx5
IAotUEFTUyBhbGwgYW5kIChtYXgtaGVpZ2h0OiBoZWlnaHQgKzEgcHgpIHNob3VsZCBhcHBseSAK
LVBBU1MgYWxsIGFuZCAobWF4LWhlaWdodDogaGVpZ2h0ICsxIHB4KSBzaG91bGQgbm90IGFwcGx5
IAotUEFTUyBhbGwgYW5kIChtaW4taGVpZ2h0OiBoZWlnaHQgKzEgZW0pIHNob3VsZCBub3QgYXBw
bHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1oZWlnaHQ6IGhlaWdodCAtMSBlbSkgc2hvdWxkIGFwcGx5
IAotUEFTUyBhbGwgYW5kIChtYXgtaGVpZ2h0OiBoZWlnaHQgKzEgZW0pIHNob3VsZCBhcHBseSAK
LVBBU1MgYWxsIGFuZCAobWF4LWhlaWdodDogaGVpZ2h0IC0xIGVtKSBzaG91bGQgbm90IGFwcGx5
IAotUEFTUyBhbGwgYW5kIChkZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCBweCkgc2hvdWxkIGFw
cGx5IAotUEFTUyBhbGwgYW5kIChkZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCArMSBweCkgc2hv
dWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGgg
LTEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6
IGRldmljZS13aWR0aCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4tZGV2aWNl
LXdpZHRoOiBkZXZpY2Utd2lkdGggKzEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKG1pbi1kZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCAtMSBweCkgc2hvdWxkIGFwcGx5IAot
UEFTUyBhbGwgYW5kIChtYXgtZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGggcHgpIHNob3VsZCBh
cHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoICsxIHB4
KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IGRldmljZS13
aWR0aCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmljZS13
aWR0aDogZGV2aWNlLXdpZHRoICsxIGVtKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5k
IChtaW4tZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGggLTEgZW0pIHNob3VsZCBhcHBseSAKLVBB
U1MgYWxsIGFuZCAobWF4LWRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoICsxIGVtKSBzaG91bGQg
YXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCAtMSBl
bSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLWhlaWdodDogZGV2aWNl
LWhlaWdodCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChkZXZpY2UtaGVpZ2h0OiBk
ZXZpY2UtaGVpZ2h0ICsxIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChkZXZp
Y2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0IC0xIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBh
bGwgYW5kIChtaW4tZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCBweCkgc2hvdWxkIGFwcGx5
IAotUEFTUyBhbGwgYW5kIChtaW4tZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCArMSBweCkg
c2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmljZS1oZWlnaHQ6IGRldmlj
ZS1oZWlnaHQgLTEgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWRldmljZS1o
ZWlnaHQ6IGRldmljZS1oZWlnaHQgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4
LWRldmljZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQgKzEgcHgpIHNob3VsZCBhcHBseSAKLVBBU1Mg
YWxsIGFuZCAobWF4LWRldmljZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQgKzEgcHgpIHNob3VsZCBu
b3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0
ICsxIGVtKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4tZGV2aWNlLWhlaWdo
dDogZGV2aWNlLWhlaWdodCAtMSBlbSkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgt
ZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCArMSBlbSkgc2hvdWxkIGFwcGx5IAotUEFTUyBh
bGwgYW5kIChtYXgtZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCAtMSBlbSkgc2hvdWxkIG5v
dCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoaGVpZ2h0KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKHdpZHRoKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChoZWlnaHQpIHNob3Vs
ZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKHdpZHRoKSBzaG91bGQgbm90IGFwcGx5IAotUEFT
UyBhbGwgYW5kIChkZXZpY2UtaGVpZ2h0KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGRl
dmljZS13aWR0aCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChoZWlnaHQpIHNob3VsZCBu
b3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKHdpZHRoKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBh
bmQgKGhlaWdodCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kICh3aWR0aCkgc2hvdWxkIGFw
cGx5IAotUEFTUyBleHByZXNzaW9uIG9yaWVudGF0aW9uIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gb3JpZW50YXRpb246IHBvcnRyYWl0IHNob3VsZCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gb3JpZW50YXRpb246IGxhbmRzY2FwZSBzaG91bGQgYmUgcGFyc2Vh
YmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1vcmllbnRhdGlvbiBzaG91bGQgbm90IGJlIHBhcnNl
YWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tb3JpZW50YXRpb246IHBvcnRyYWl0IHNob3VsZCBu
b3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1vcmllbnRhdGlvbjogbGFuZHNj
YXBlIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1vcmllbnRh
dGlvbiBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtb3JpZW50
YXRpb246IHBvcnRyYWl0IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9u
IG1heC1vcmllbnRhdGlvbjogbGFuZHNjYXBlIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFT
UyAob3JpZW50YXRpb24pIHNob3VsZCBhcHBseSAKLVBBU1MgKG9yaWVudGF0aW9uOiBsYW5kc2Nh
cGUpIHNob3VsZCBhcHBseSAKLVBBU1MgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgc2hvdWxkIG5v
dCBhcHBseSAKLVBBU1Mgbm90IGFsbCBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgc2hvdWxk
IGFwcGx5IAotUEFTUyAob3JpZW50YXRpb24pIHNob3VsZCBhcHBseSAKLVBBU1MgKG9yaWVudGF0
aW9uOiBsYW5kc2NhcGUpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5kIChvcmll
bnRhdGlvbjogbGFuZHNjYXBlKSBzaG91bGQgYXBwbHkgCi1QQVNTIChvcmllbnRhdGlvbjogcG9y
dHJhaXQpIHNob3VsZCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTkvODApIHNob3VsZCBh
cHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTgvODApIHNob3VsZCBub3QgYXBwbHkgCi1QQVNT
IChhc3BlY3QtcmF0aW86IDU5LzgxKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAoYXNwZWN0LXJh
dGlvOiA2MC84MCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTkvNzkp
IHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86IDE3Ny8yNDApIHNob3VsZCBh
cHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNDEzLzU2MCkgc2hvdWxkIGFwcGx5IAotUEFTUyAo
YXNwZWN0LXJhdGlvOiA1OTAwLzgwMDApIHNob3VsZCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRp
bzogNTkwMS84MDAwKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvOiA1ODk5
LzgwMDApIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86IDU5MDAvODAwMSkg
c2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTkwMC83OTk5KSBzaG91bGQg
bm90IGFwcGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvKSBzaG91bGQgYXBwbHkgCi1QQVNTIChtaW4t
YXNwZWN0LXJhdGlvOiA1OS84MCkgc2hvdWxkIGFwcGx5IAotUEFTUyAobWluLWFzcGVjdC1yYXRp
bzogNTgvODApIHNob3VsZCBhcHBseSAKLVBBU1MgKG1pbi1hc3BlY3QtcmF0aW86IDU5LzgxKSBz
aG91bGQgYXBwbHkgCi1QQVNTIChtaW4tYXNwZWN0LXJhdGlvOiA2MC84MCkgc2hvdWxkIG5vdCBh
cHBseSAKLVBBU1MgKG1pbi1hc3BlY3QtcmF0aW86IDU5Lzc5KSBzaG91bGQgbm90IGFwcGx5IAot
UEFTUyBleHByZXNzaW9uIG1pbi1hc3BlY3QtcmF0aW8gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIChtYXgtYXNwZWN0LXJhdGlvOiA1OS84MCkgc2hvdWxkIGFwcGx5IAotUEFTUyAobWF4
LWFzcGVjdC1yYXRpbzogNTgvODApIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChtYXgtYXNwZWN0
LXJhdGlvOiA1OS84MSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKG1heC1hc3BlY3QtcmF0aW86
IDYwLzgwKSBzaG91bGQgYXBwbHkgCi1QQVNTIChtYXgtYXNwZWN0LXJhdGlvOiA1OS83OSkgc2hv
dWxkIGFwcGx5IAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW8gc2hvdWxkIG5vdCBi
ZSBwYXJzZWFibGUgCi1QQVNTIChkZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBk
ZXZpY2UtaGVpZ2h0KSBzaG91bGQgYXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5kIChkZXZpY2UtYXNw
ZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggKyAxIC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIGFwcGx5
IAotUEFTUyBhbGwgYW5kIChkZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBkZXZp
Y2UtaGVpZ2h0IC0gMSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLWFz
cGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC0gMSAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBub3Qg
YXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5kIChkZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lk
dGggLyBkZXZpY2UtaGVpZ2h0ICsgMSkgc2hvdWxkIGFwcGx5IAotUEFTUyAoZGV2aWNlLWFzcGVj
dC1yYXRpbykgc2hvdWxkIGFwcGx5IAotUEFTUyAobWluLWRldmljZS1hc3BlY3QtcmF0aW86IGRl
dmljZS13aWR0aCAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBhcHBseSAKLVBBU1Mgbm90IGFsbCBh
bmQgKGRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCArIDEgLyBkZXZpY2UtaGVpZ2h0
KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBub3QgYWxsIGFuZCAobWluLWRldmljZS1hc3BlY3Qt
cmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1oZWlnaHQgLSAxKSBzaG91bGQgYXBwbHkgCi1Q
QVNTIG5vdCBhbGwgYW5kIChtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC0g
MSAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1k
ZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBkZXZpY2UtaGVpZ2h0ICsgMSkgc2hv
dWxkIGFwcGx5IAotUEFTUyBleHByZXNzaW9uIG1pbi1kZXZpY2UtYXNwZWN0LXJhdGlvIHNob3Vs
ZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBhbGwgYW5kIChtYXgtZGV2aWNlLWFzcGVjdC1yYXRp
bzogZGV2aWNlLXdpZHRoIC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIGFwcGx5IAotUEFTUyAobWF4
LWRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCArIDEgLyBkZXZpY2UtaGVpZ2h0KSBz
aG91bGQgYXBwbHkgCi1QQVNTIChtYXgtZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRo
IC8gZGV2aWNlLWhlaWdodCAtIDEgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtZGV2
aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC0gMSAvIGRldmljZS1oZWlnaHQpIHNob3Vs
ZCBub3QgYXBwbHkgCi1QQVNTIG5vdCBhbGwgYW5kIChtYXgtZGV2aWNlLWFzcGVjdC1yYXRpbzog
ZGV2aWNlLXdpZHRoIC8gZGV2aWNlLWhlaWdodCArIDEpIHNob3VsZCBhcHBseSAKLVBBU1MgZXhw
cmVzc2lvbiBtYXgtZGV2aWNlLWFzcGVjdC1yYXRpbyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAxLzEgc2hvdWxkIGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAxICAvMSBzaG91bGQgYmUgcGFy
c2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDEgIC8gCQotMSBzaG91
bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDEvCi0x
IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzog
MSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJh
dGlvOiAwLjUgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFz
cGVjdC1yYXRpbzogMS4wLzEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gbWF4LWFzcGVjdC1yYXRpbzogMS8xLjAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzogMS4wLzEuMCBzaG91bGQgbm90IGJlIHBhcnNl
YWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAwLzEgc2hvdWxkIG5vdCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzogMS8wIHNob3Vs
ZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDAv
MCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJh
dGlvOiAtMS8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1h
c3BlY3QtcmF0aW86IDEvLTEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gbWF4LWFzcGVjdC1yYXRpbzogLTEvLTEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMS8xIHNob3VsZCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMSAgLzEgc2hvdWxkIGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAxICAvIAkKLTEg
c2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlv
OiAxLwotMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3Bl
Y3QtcmF0aW86IDEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2
aWNlLWFzcGVjdC1yYXRpbzogMC41IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHBy
ZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDEuMC8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxl
IAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDEvMS4wIHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDEuMC8x
LjAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVj
dC1yYXRpbzogMC8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRl
dmljZS1hc3BlY3QtcmF0aW86IDEvMCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAwLzAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogLTEvMSBzaG91bGQgbm90IGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAxLy0xIHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0
aW86IC0xLy0xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBtb25vY2hyb21lX2FuZF9j
b2xvciAKLVBBU1MgZmluZF9kZXB0aCAKLVBBU1MgYWxsIGFuZCAoY29sb3I6IGRlcHRoKSBzaG91
bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGNvbG9yOiBkZXB0aCAtIDEpIHNob3VsZCBub3QgYXBw
bHkgCi1QQVNTIGFsbCBhbmQgKGNvbG9yOiBkZXB0aCArIDEpIHNob3VsZCBub3QgYXBwbHkgCi1Q
QVNTIGFsbCBhbmQgKG1heC1jb2xvcjogZGVwdGgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFu
ZCAobWF4LWNvbG9yOiBkZXB0aCAtIDEpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQg
KG1heC1jb2xvcjogZGVwdGggKyAxKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGNvbG9y
KSBzaG91bGQgYXBwbHkgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWNvbG9yIHNob3VsZCBub3QgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1jb2xvciBzaG91bGQgbm90IGJlIHBhcnNl
YWJsZSAKLVBBU1MgYWxsIGFuZCAobW9ub2Nocm9tZSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1Mg
ZXhwcmVzc2lvbiBtYXgtbW9ub2Nocm9tZSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1Mg
ZXhwcmVzc2lvbiBtaW4tbW9ub2Nocm9tZSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1Mg
bm90IGFsbCBhbmQgKG1vbm9jaHJvbWUpIHNob3VsZCBhcHBseSAKLVBBU1Mgbm90IGFsbCBhbmQg
KGNvbG9yKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBvbmx5IGFsbCBhbmQgKGNvbG9yKSBzaG91
bGQgYXBwbHkgCi1QQVNTIG9ubHkgYWxsIGFuZCAobW9ub2Nocm9tZSkgc2hvdWxkIG5vdCBhcHBs
eSAKLVBBU1MgZXhwcmVzc2lvbiBjb2xvcjogMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBl
eHByZXNzaW9uIGNvbG9yOiAzMjcgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBjb2xvcjogMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGNvbG9yOiAx
LjAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gY29sb3I6IC0xIHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGNvbG9yOiAxLzEgc2hvdWxk
IG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLW1vbm9jaHJvbWU6IDEgc2hv
dWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tbW9ub2Nocm9tZTogMzI3IHNo
b3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLW1vbm9jaHJvbWU6IDAgc2hv
dWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tbW9ub2Nocm9tZTogMS4wIHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1tb25vY2hyb21lOiAt
MSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tbW9ub2Nocm9t
ZTogMS8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotRkFJTCBmaW5kX3Jlc29sdXRpb24gYXNz
ZXJ0X2ZhbHNlOiBleHBlY3RlZCBmYWxzZSBnb3QgdHJ1ZQotUEFTUyAocmVzb2x1dGlvbjogZHBp
KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAocmVzb2x1dGlvbjogZHBpICsgMSkgc2hvdWxkIG5v
dCBhcHBseSAKLUZBSUwgKG1pbi1yZXNvbHV0aW9uOiBkcGkgLSAxICkgc2hvdWxkIGFwcGx5IGFz
c2VydF90cnVlOiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQotUEFTUyBub3QgYWxsIGFuZCAobWlu
LXJlc29sdXRpb246IGRwaSAtIDEgKSBzaG91bGQgbm90IGFwcGx5IAotRkFJTCBub3QgYWxsIGFu
ZCAobWluLXJlc29sdXRpb246IGRwaSArIDEgKSBzaG91bGQgYXBwbHkgYXNzZXJ0X3RydWU6IGV4
cGVjdGVkIHRydWUgZ290IGZhbHNlCi1QQVNTIGFsbCBhbmQgKG1pbi1yZXNvbHV0aW9uOiBkcGkg
KyAxICkgc2hvdWxkIG5vdCBhcHBseSAKLUZBSUwgKG1pbi1yZXNvbHV0aW9uOiBkcGNtIChkcGkg
LSAxKSApIHNob3VsZCBhcHBseSBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UK
LUZBSUwgKG1heC1yZXNvbHV0aW9uOiBkcGNtICAoZHBpICsgMSkgKSBzaG91bGQgYXBwbHkgYXNz
ZXJ0X3RydWU6IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCi1QQVNTIChtYXgtcmVzb2x1dGlvbjog
ZHBjbSAgKGRwaSAtIDEpICkgc2hvdWxkIG5vdCBhcHBseSAKLUZBSUwgbm90IGFsbCBhbmQgKG1p
bi1yZXNvbHV0aW9uOiBkcGNtICAoZHBpICsgMSkgKSBzaG91bGQgYXBwbHkgYXNzZXJ0X3RydWU6
IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCi1QQVNTIGV4cHJlc3Npb24gZ3JpZCBzaG91bGQgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGdyaWQ6IDAgc2hvdWxkIGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBncmlkOiAxIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJl
c3Npb24gZ3JpZDogMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1n
cmlkIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1ncmlkOjAg
c2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWdyaWQ6IDEgc2hv
dWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZ3JpZDogMiBzaG91bGQgbm90
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBncmlkOiAtMSBzaG91bGQgbm90IGJlIHBh
cnNlYWJsZSAKLVBBU1MgKGdyaWQpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChncmlkOiAwKSBz
aG91bGQgYXBwbHkgCi1QQVNTIChncmlkOiAxKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAoZ3Jp
ZDogMikgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGdyaWQ6IC0xKSBzaG91bGQgbm90IGFwcGx5
IAotCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2Zhc3QvbWVkaWEvdzNj
L3Rlc3RfbWVkaWFfcXVlcmllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9mYXN0L21lZGlhL3czYy90ZXN0X21lZGlhX3F1ZXJpZXMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9i
bGFja2JlcnJ5L2Zhc3QvbWVkaWEvdzNjL3Rlc3RfbWVkaWFfcXVlcmllcy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzA1ICswLDAgQEAKLQotCi1QQVNTIHF1ZXJ5IChvcmllbnRh
dGlvbikgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgcXVlcnkgbm90IChvcmllbnRhdGlvbikg
c2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIHF1ZXJ5IG9ubHkgKG9yaWVudGF0aW9uKSBz
aG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgcXVlcnkgYWxsIGFuZCAob3JpZW50YXRpb24p
IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIHF1ZXJ5IG5vdCBhbGwgYW5kIChvcmllbnRhdGlv
bikgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgcXVlcnkgb25seSBhbGwgYW5kIChvcmllbnRh
dGlvbikgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgcXVlcnkgKG9yaWVudGF0aW9uOiAnbGFu
ZHNjYXBlJykgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gd2lkdGgg
c2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0aDogMCBzaG91bGQgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAwcHggc2hvdWxkIGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0aDogMGVtIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gd2lkdGg6IC0wIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gbWluLXdpZHRoOiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1h
eC13aWR0aDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0aDog
LTBjbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAxcHggc2hv
dWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0aDogMC4wMDFtbSBzaG91bGQg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAxMDAwMDBweCBzaG91bGQgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAtMXB4IHNob3VsZCBub3QgYmUgcGFy
c2VhYmxlIAotUEFTUyBleHByZXNzaW9uIHdpZHRoOiAnMjBweCcgc2hvdWxkIG5vdCBiZSBwYXJz
ZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLXdpZHRoOiAtMXB4IHNob3VsZCBub3QgYmUgcGFy
c2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC13aWR0aDogLTFweCBzaG91bGQgbm90IGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4td2lkdGg6ICcxMHB4JyBzaG91bGQgbm90IGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtd2lkdGg6ICcxMHB4JyBzaG91bGQgbm90
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0aDogLTAuMDAwMDFtbSBzaG91bGQg
bm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiB3aWR0aDogLTEwMDAwMGVtIHNob3Vs
ZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi13aWR0aCBzaG91bGQgbm90
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtd2lkdGggc2hvdWxkIG5vdCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0IHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAwIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJl
c3Npb24gaGVpZ2h0OiAwcHggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBo
ZWlnaHQ6IDBlbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDog
LTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4taGVpZ2h0OiAtMCBz
aG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1oZWlnaHQ6IC0wIHNob3Vs
ZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAtMGNtIHNob3VsZCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAxcHggc2hvdWxkIGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IDAuMDAxbW0gc2hvdWxkIGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IDEwMDAwMHB4IHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gaGVpZ2h0OiAtMXB4IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFT
UyBleHByZXNzaW9uIGhlaWdodDogJzIwcHgnIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFT
UyBleHByZXNzaW9uIG1pbi1oZWlnaHQ6IC0xcHggc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gbWF4LWhlaWdodDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBtaW4taGVpZ2h0OiAnMTBweCcgc2hvdWxkIG5vdCBiZSBwYXJzZWFi
bGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWhlaWdodDogJzEwcHgnIHNob3VsZCBub3QgYmUgcGFy
c2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGhlaWdodDogLTAuMDAwMDFtbSBzaG91bGQgbm90IGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBoZWlnaHQ6IC0xMDAwMDBlbSBzaG91bGQgbm90
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4taGVpZ2h0IHNob3VsZCBub3QgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1oZWlnaHQgc2hvdWxkIG5vdCBiZSBwYXJz
ZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoIHNob3VsZCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAwIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAwcHggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBB
U1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IDBlbSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFT
UyBleHByZXNzaW9uIGRldmljZS13aWR0aDogLTAgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1Mg
ZXhwcmVzc2lvbiBtaW4tZGV2aWNlLXdpZHRoOiAtMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFT
UyBleHByZXNzaW9uIG1heC1kZXZpY2Utd2lkdGg6IC0wIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAtMGNtIHNob3VsZCBiZSBwYXJzZWFibGUgCi1Q
QVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAxcHggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBB
U1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IDAuMDAxbW0gc2hvdWxkIGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IDEwMDAwMHB4IHNob3VsZCBiZSBwYXJzZWFi
bGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLXdpZHRoOiAtMXB4IHNob3VsZCBub3QgYmUgcGFy
c2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS13aWR0aDogJzIwcHgnIHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1kZXZpY2Utd2lkdGg6IC0xcHggc2hv
dWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWRldmljZS13aWR0aDog
LTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tZGV2aWNl
LXdpZHRoOiAnMTBweCcgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
bWF4LWRldmljZS13aWR0aDogJzEwcHgnIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBl
eHByZXNzaW9uIGRldmljZS13aWR0aDogLTAuMDAwMDFtbSBzaG91bGQgbm90IGJlIHBhcnNlYWJs
ZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2Utd2lkdGg6IC0xMDAwMDBlbSBzaG91bGQgbm90IGJl
IHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4tZGV2aWNlLXdpZHRoIHNob3VsZCBub3Qg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2Utd2lkdGggc2hvdWxkIG5v
dCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWhlaWdodCBzaG91bGQgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1oZWlnaHQ6IDAgc2hvdWxkIGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAwcHggc2hvdWxkIGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAwZW0gc2hvdWxkIGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAtMCBzaG91bGQgYmUgcGFy
c2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1kZXZpY2UtaGVpZ2h0OiAtMCBzaG91bGQgYmUg
cGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2UtaGVpZ2h0OiAtMCBzaG91bGQg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1oZWlnaHQ6IC0wY20gc2hvdWxk
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAxcHggc2hvdWxk
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAwLjAwMW1tIHNo
b3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWhlaWdodDogMTAwMDAw
cHggc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVpZ2h0OiAt
MXB4IHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1oZWln
aHQ6ICcyMHB4JyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtaW4t
ZGV2aWNlLWhlaWdodDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVz
c2lvbiBtYXgtZGV2aWNlLWhlaWdodDogLTFweCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBB
U1MgZXhwcmVzc2lvbiBtaW4tZGV2aWNlLWhlaWdodDogJzEwcHgnIHNob3VsZCBub3QgYmUgcGFy
c2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2UtaGVpZ2h0OiAnMTBweCcgc2hvdWxk
IG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWhlaWdodDogLTAuMDAw
MDFtbSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtaGVp
Z2h0OiAtMTAwMDAwZW0gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
bWluLWRldmljZS1oZWlnaHQgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gbWF4LWRldmljZS1oZWlnaHQgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGFsbCBh
bmQgKHdpZHRoOiB3aWR0aCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kICh3aWR0aDog
d2lkdGggKzEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKHdpZHRoOiB3aWR0
aCAtMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLXdpZHRoOiB3aWR0
aCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4td2lkdGg6IHdpZHRoICsxIHB4
KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4td2lkdGg6IHdpZHRoIC0xIHB4
KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC13aWR0aDogd2lkdGggcHgpIHNob3Vs
ZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LXdpZHRoOiB3aWR0aCArMSBweCkgc2hvdWxkIGFw
cGx5IAotUEFTUyBhbGwgYW5kIChtYXgtd2lkdGg6IHdpZHRoICsxIHB4KSBzaG91bGQgbm90IGFw
cGx5IAotUEFTUyBhbGwgYW5kIChtaW4td2lkdGg6IHdpZHRoICsxIGVtKSBzaG91bGQgbm90IGFw
cGx5IAotUEFTUyBhbGwgYW5kIChtaW4td2lkdGg6IHdpZHRoIC0xIGVtKSBzaG91bGQgYXBwbHkg
Ci1QQVNTIGFsbCBhbmQgKG1heC13aWR0aDogd2lkdGggKzEgZW0pIHNob3VsZCBhcHBseSAKLVBB
U1MgYWxsIGFuZCAobWF4LXdpZHRoOiB3aWR0aCAtMSBlbSkgc2hvdWxkIG5vdCBhcHBseSAKLVBB
U1MgYWxsIGFuZCAoaGVpZ2h0OiBoZWlnaHQgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFu
ZCAoaGVpZ2h0OiBoZWlnaHQgKzEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQg
KGhlaWdodDogaGVpZ2h0IC0xIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kICht
aW4taGVpZ2h0OiBoZWlnaHQgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWhl
aWdodDogaGVpZ2h0ICsxIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChtaW4t
aGVpZ2h0OiBoZWlnaHQgLTEgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWhl
aWdodDogaGVpZ2h0IHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1oZWlnaHQ6
IGhlaWdodCArMSBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtaGVpZ2h0OiBo
ZWlnaHQgKzEgcHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1oZWlnaHQ6
IGhlaWdodCArMSBlbSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWhlaWdo
dDogaGVpZ2h0IC0xIGVtKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1oZWlnaHQ6
IGhlaWdodCArMSBlbSkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtaGVpZ2h0OiBo
ZWlnaHQgLTEgZW0pIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGRldmljZS13aWR0
aDogZGV2aWNlLXdpZHRoIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGRldmljZS13
aWR0aDogZGV2aWNlLXdpZHRoICsxIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5k
IChkZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCAtMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBB
U1MgYWxsIGFuZCAobWluLWRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoIHB4KSBzaG91bGQgYXBw
bHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6IGRldmljZS13aWR0aCArMSBweCkg
c2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmljZS13aWR0aDogZGV2aWNl
LXdpZHRoIC0xIHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2Utd2lk
dGg6IGRldmljZS13aWR0aCBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtZGV2
aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGggKzEgcHgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFu
ZCAobWF4LWRldmljZS13aWR0aDogZGV2aWNlLXdpZHRoICsxIHB4KSBzaG91bGQgbm90IGFwcGx5
IAotUEFTUyBhbGwgYW5kIChtaW4tZGV2aWNlLXdpZHRoOiBkZXZpY2Utd2lkdGggKzEgZW0pIHNo
b3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6IGRldmljZS13
aWR0aCAtMSBlbSkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtZGV2aWNlLXdpZHRo
OiBkZXZpY2Utd2lkdGggKzEgZW0pIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWRl
dmljZS13aWR0aDogZGV2aWNlLXdpZHRoIC0xIGVtKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBh
bGwgYW5kIChkZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0IHB4KSBzaG91bGQgYXBwbHkgCi1Q
QVNTIGFsbCBhbmQgKGRldmljZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQgKzEgcHgpIHNob3VsZCBu
b3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGRldmljZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQgLTEg
cHgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0OiBk
ZXZpY2UtaGVpZ2h0IHB4KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1pbi1kZXZpY2Ut
aGVpZ2h0OiBkZXZpY2UtaGVpZ2h0ICsxIHB4KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwg
YW5kIChtaW4tZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCAtMSBweCkgc2hvdWxkIGFwcGx5
IAotUEFTUyBhbGwgYW5kIChtYXgtZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdodCBweCkgc2hv
dWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtZGV2aWNlLWhlaWdodDogZGV2aWNlLWhlaWdo
dCArMSBweCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtZGV2aWNlLWhlaWdodDog
ZGV2aWNlLWhlaWdodCArMSBweCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWlu
LWRldmljZS1oZWlnaHQ6IGRldmljZS1oZWlnaHQgKzEgZW0pIHNob3VsZCBub3QgYXBwbHkgCi1Q
QVNTIGFsbCBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0IC0xIGVtKSBzaG91
bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2UtaGVpZ2h0OiBkZXZpY2UtaGVpZ2h0
ICsxIGVtKSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2UtaGVpZ2h0OiBk
ZXZpY2UtaGVpZ2h0IC0xIGVtKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBhbGwgYW5kIChoZWln
aHQpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAod2lkdGgpIHNob3VsZCBub3QgYXBwbHkg
Ci1QQVNTIGFsbCBhbmQgKGhlaWdodCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAo
d2lkdGgpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGRldmljZS1oZWlnaHQpIHNo
b3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoZGV2aWNlLXdpZHRoKSBzaG91bGQgYXBwbHkgCi1Q
QVNTIGFsbCBhbmQgKGhlaWdodCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAod2lk
dGgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoaGVpZ2h0KSBzaG91bGQgYXBwbHkgCi1Q
QVNTIGFsbCBhbmQgKHdpZHRoKSBzaG91bGQgYXBwbHkgCi1QQVNTIGV4cHJlc3Npb24gb3JpZW50
YXRpb24gc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBvcmllbnRhdGlvbjog
cG9ydHJhaXQgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBvcmllbnRhdGlv
bjogbGFuZHNjYXBlIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLW9y
aWVudGF0aW9uIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1v
cmllbnRhdGlvbjogcG9ydHJhaXQgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJl
c3Npb24gbWluLW9yaWVudGF0aW9uOiBsYW5kc2NhcGUgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gbWF4LW9yaWVudGF0aW9uIHNob3VsZCBub3QgYmUgcGFyc2VhYmxl
IAotUEFTUyBleHByZXNzaW9uIG1heC1vcmllbnRhdGlvbjogcG9ydHJhaXQgc2hvdWxkIG5vdCBi
ZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LW9yaWVudGF0aW9uOiBsYW5kc2NhcGUg
c2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIChvcmllbnRhdGlvbikgc2hvdWxkIGFwcGx5
IAotUEFTUyAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgc2hvdWxkIGFwcGx5IAotUEFTUyAob3Jp
ZW50YXRpb246IHBvcnRyYWl0KSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBub3QgYWxsIGFuZCAo
b3JpZW50YXRpb246IHBvcnRyYWl0KSBzaG91bGQgYXBwbHkgCi1QQVNTIChvcmllbnRhdGlvbikg
c2hvdWxkIGFwcGx5IAotUEFTUyAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgc2hvdWxkIG5vdCBh
cHBseSAKLVBBU1Mgbm90IGFsbCBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHNob3VsZCBh
cHBseSAKLVBBU1MgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgc2hvdWxkIGFwcGx5IAotUEFTUyAo
YXNwZWN0LXJhdGlvOiA1OS84MCkgc2hvdWxkIGFwcGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvOiA1
OC84MCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGFzcGVjdC1yYXRpbzogNTkvODEpIHNob3Vs
ZCBub3QgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86IDYwLzgwKSBzaG91bGQgbm90IGFwcGx5
IAotUEFTUyAoYXNwZWN0LXJhdGlvOiA1OS83OSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgKGFz
cGVjdC1yYXRpbzogMTc3LzI0MCkgc2hvdWxkIGFwcGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvOiA0
MTMvNTYwKSBzaG91bGQgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0aW86IDU5MDAvODAwMCkgc2hv
dWxkIGFwcGx5IAotUEFTUyAoYXNwZWN0LXJhdGlvOiA1OTAxLzgwMDApIHNob3VsZCBub3QgYXBw
bHkgCi1QQVNTIChhc3BlY3QtcmF0aW86IDU4OTkvODAwMCkgc2hvdWxkIG5vdCBhcHBseSAKLVBB
U1MgKGFzcGVjdC1yYXRpbzogNTkwMC84MDAxKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAoYXNw
ZWN0LXJhdGlvOiA1OTAwLzc5OTkpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChhc3BlY3QtcmF0
aW8pIHNob3VsZCBhcHBseSAKLVBBU1MgKG1pbi1hc3BlY3QtcmF0aW86IDU5LzgwKSBzaG91bGQg
YXBwbHkgCi1QQVNTIChtaW4tYXNwZWN0LXJhdGlvOiA1OC84MCkgc2hvdWxkIGFwcGx5IAotUEFT
UyAobWluLWFzcGVjdC1yYXRpbzogNTkvODEpIHNob3VsZCBhcHBseSAKLVBBU1MgKG1pbi1hc3Bl
Y3QtcmF0aW86IDYwLzgwKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyAobWluLWFzcGVjdC1yYXRp
bzogNTkvNzkpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIGV4cHJlc3Npb24gbWluLWFzcGVjdC1y
YXRpbyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgKG1heC1hc3BlY3QtcmF0aW86IDU5
LzgwKSBzaG91bGQgYXBwbHkgCi1QQVNTIChtYXgtYXNwZWN0LXJhdGlvOiA1OC84MCkgc2hvdWxk
IG5vdCBhcHBseSAKLVBBU1MgKG1heC1hc3BlY3QtcmF0aW86IDU5LzgxKSBzaG91bGQgbm90IGFw
cGx5IAotUEFTUyAobWF4LWFzcGVjdC1yYXRpbzogNjAvODApIHNob3VsZCBhcHBseSAKLVBBU1Mg
KG1heC1hc3BlY3QtcmF0aW86IDU5Lzc5KSBzaG91bGQgYXBwbHkgCi1QQVNTIGV4cHJlc3Npb24g
bWF4LWFzcGVjdC1yYXRpbyBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgKGRldmljZS1h
c3BlY3QtcmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBhcHBseSAK
LVBBU1Mgbm90IGFsbCBhbmQgKGRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCArIDEg
LyBkZXZpY2UtaGVpZ2h0KSBzaG91bGQgYXBwbHkgCi1QQVNTIGFsbCBhbmQgKGRldmljZS1hc3Bl
Y3QtcmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1oZWlnaHQgLSAxKSBzaG91bGQgbm90IGFw
cGx5IAotUEFTUyBhbGwgYW5kIChkZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLSAx
IC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1Mgbm90IGFsbCBhbmQgKGRl
dmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13aWR0aCAvIGRldmljZS1oZWlnaHQgKyAxKSBzaG91
bGQgYXBwbHkgCi1QQVNTIChkZXZpY2UtYXNwZWN0LXJhdGlvKSBzaG91bGQgYXBwbHkgCi1QQVNT
IChtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC8gZGV2aWNlLWhlaWdodCkg
c2hvdWxkIGFwcGx5IAotUEFTUyBub3QgYWxsIGFuZCAoZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2
aWNlLXdpZHRoICsgMSAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIG5v
dCBhbGwgYW5kIChtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNlLXdpZHRoIC8gZGV2aWNl
LWhlaWdodCAtIDEpIHNob3VsZCBhcHBseSAKLVBBU1Mgbm90IGFsbCBhbmQgKG1pbi1kZXZpY2Ut
YXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLSAxIC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIG5v
dCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWluLWRldmljZS1hc3BlY3QtcmF0aW86IGRldmljZS13
aWR0aCAvIGRldmljZS1oZWlnaHQgKyAxKSBzaG91bGQgYXBwbHkgCi1QQVNTIGV4cHJlc3Npb24g
bWluLWRldmljZS1hc3BlY3QtcmF0aW8gc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGFs
bCBhbmQgKG1heC1kZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBkZXZpY2UtaGVp
Z2h0KSBzaG91bGQgYXBwbHkgCi1QQVNTIChtYXgtZGV2aWNlLWFzcGVjdC1yYXRpbzogZGV2aWNl
LXdpZHRoICsgMSAvIGRldmljZS1oZWlnaHQpIHNob3VsZCBhcHBseSAKLVBBU1MgKG1heC1kZXZp
Y2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBkZXZpY2UtaGVpZ2h0IC0gMSBzaG91bGQg
YXBwbHkgCi1QQVNTIGFsbCBhbmQgKG1heC1kZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lk
dGggLSAxIC8gZGV2aWNlLWhlaWdodCkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1Mgbm90IGFsbCBh
bmQgKG1heC1kZXZpY2UtYXNwZWN0LXJhdGlvOiBkZXZpY2Utd2lkdGggLyBkZXZpY2UtaGVpZ2h0
ICsgMSkgc2hvdWxkIGFwcGx5IAotUEFTUyBleHByZXNzaW9uIG1heC1kZXZpY2UtYXNwZWN0LXJh
dGlvIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3Qt
cmF0aW86IDEvMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1hc3Bl
Y3QtcmF0aW86IDEgIC8xIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4
LWFzcGVjdC1yYXRpbzogMSAgLyAJCi0xIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJl
c3Npb24gbWF4LWFzcGVjdC1yYXRpbzogMS8KLTEgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1Mg
ZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAxIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAot
UEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IDAuNSBzaG91bGQgbm90IGJlIHBhcnNl
YWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAxLjAvMSBzaG91bGQgbm90
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAxLzEuMCBz
aG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlv
OiAxLjAvMS4wIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1heC1h
c3BlY3QtcmF0aW86IDAvMSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lv
biBtYXgtYXNwZWN0LXJhdGlvOiAxLzAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4
cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzogMC8wIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAot
UEFTUyBleHByZXNzaW9uIG1heC1hc3BlY3QtcmF0aW86IC0xLzEgc2hvdWxkIG5vdCBiZSBwYXJz
ZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWF4LWFzcGVjdC1yYXRpbzogMS8tMSBzaG91bGQgbm90
IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBtYXgtYXNwZWN0LXJhdGlvOiAtMS8tMSBz
aG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJh
dGlvOiAxLzEgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNw
ZWN0LXJhdGlvOiAxICAvMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRl
dmljZS1hc3BlY3QtcmF0aW86IDEgIC8gCQotMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBl
eHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86IDEvCi0xIHNob3VsZCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMSBzaG91bGQgbm90IGJlIHBh
cnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAwLjUgc2hvdWxk
IG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzog
MS4wLzEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFz
cGVjdC1yYXRpbzogMS8xLjAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Np
b24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMS4wLzEuMCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNwZWN0LXJhdGlvOiAwLzEgc2hvdWxkIG5vdCBiZSBw
YXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogMS8wIHNob3Vs
ZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGRldmljZS1hc3BlY3QtcmF0aW86
IDAvMCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBkZXZpY2UtYXNw
ZWN0LXJhdGlvOiAtMS8xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9u
IGRldmljZS1hc3BlY3QtcmF0aW86IDEvLTEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gZGV2aWNlLWFzcGVjdC1yYXRpbzogLTEvLTEgc2hvdWxkIG5vdCBiZSBwYXJz
ZWFibGUgCi1QQVNTIG1vbm9jaHJvbWVfYW5kX2NvbG9yIAotUEFTUyBmaW5kX2RlcHRoIAotUEFT
UyBhbGwgYW5kIChjb2xvcjogZGVwdGgpIHNob3VsZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoY29s
b3I6IGRlcHRoIC0gMSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoY29sb3I6IGRl
cHRoICsgMSkgc2hvdWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWNvbG9yOiBkZXB0
aCkgc2hvdWxkIGFwcGx5IAotUEFTUyBhbGwgYW5kIChtYXgtY29sb3I6IGRlcHRoIC0gMSkgc2hv
dWxkIG5vdCBhcHBseSAKLVBBU1MgYWxsIGFuZCAobWF4LWNvbG9yOiBkZXB0aCArIDEpIHNob3Vs
ZCBhcHBseSAKLVBBU1MgYWxsIGFuZCAoY29sb3IpIHNob3VsZCBhcHBseSAKLVBBU1MgZXhwcmVz
c2lvbiBtYXgtY29sb3Igc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
bWluLWNvbG9yIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBhbGwgYW5kIChtb25vY2hy
b21lKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBleHByZXNzaW9uIG1heC1tb25vY2hyb21lIHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIG1pbi1tb25vY2hyb21lIHNo
b3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBub3QgYWxsIGFuZCAobW9ub2Nocm9tZSkgc2hv
dWxkIGFwcGx5IAotUEFTUyBub3QgYWxsIGFuZCAoY29sb3IpIHNob3VsZCBub3QgYXBwbHkgCi1Q
QVNTIG9ubHkgYWxsIGFuZCAoY29sb3IpIHNob3VsZCBhcHBseSAKLVBBU1Mgb25seSBhbGwgYW5k
IChtb25vY2hyb21lKSBzaG91bGQgbm90IGFwcGx5IAotUEFTUyBleHByZXNzaW9uIGNvbG9yOiAx
IHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gY29sb3I6IDMyNyBzaG91bGQg
YmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGNvbG9yOiAwIHNob3VsZCBiZSBwYXJzZWFi
bGUgCi1QQVNTIGV4cHJlc3Npb24gY29sb3I6IDEuMCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAK
LVBBU1MgZXhwcmVzc2lvbiBjb2xvcjogLTEgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gY29sb3I6IDEvMSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiBtaW4tbW9ub2Nocm9tZTogMSBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHBy
ZXNzaW9uIG1pbi1tb25vY2hyb21lOiAzMjcgc2hvdWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhw
cmVzc2lvbiBtaW4tbW9ub2Nocm9tZTogMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHBy
ZXNzaW9uIG1pbi1tb25vY2hyb21lOiAxLjAgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUgCi1QQVNT
IGV4cHJlc3Npb24gbWluLW1vbm9jaHJvbWU6IC0xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAot
UEFTUyBleHByZXNzaW9uIG1pbi1tb25vY2hyb21lOiAxLzEgc2hvdWxkIG5vdCBiZSBwYXJzZWFi
bGUgCi1GQUlMIGZpbmRfcmVzb2x1dGlvbiBhc3NlcnRfZmFsc2U6IGV4cGVjdGVkIGZhbHNlIGdv
dCB0cnVlCi1QQVNTIChyZXNvbHV0aW9uOiBkcGkpIHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChy
ZXNvbHV0aW9uOiBkcGkgKyAxKSBzaG91bGQgbm90IGFwcGx5IAotRkFJTCAobWluLXJlc29sdXRp
b246IGRwaSAtIDEgKSBzaG91bGQgYXBwbHkgYXNzZXJ0X3RydWU6IGV4cGVjdGVkIHRydWUgZ290
IGZhbHNlCi1QQVNTIG5vdCBhbGwgYW5kIChtaW4tcmVzb2x1dGlvbjogZHBpIC0gMSApIHNob3Vs
ZCBub3QgYXBwbHkgCi1GQUlMIG5vdCBhbGwgYW5kIChtaW4tcmVzb2x1dGlvbjogZHBpICsgMSAp
IHNob3VsZCBhcHBseSBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKLVBBU1Mg
YWxsIGFuZCAobWluLXJlc29sdXRpb246IGRwaSArIDEgKSBzaG91bGQgbm90IGFwcGx5IAotRkFJ
TCAobWluLXJlc29sdXRpb246IGRwY20gKGRwaSAtIDEpICkgc2hvdWxkIGFwcGx5IGFzc2VydF90
cnVlOiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQotRkFJTCAobWF4LXJlc29sdXRpb246IGRwY20g
IChkcGkgKyAxKSApIHNob3VsZCBhcHBseSBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBnb3Qg
ZmFsc2UKLVBBU1MgKG1heC1yZXNvbHV0aW9uOiBkcGNtICAoZHBpIC0gMSkgKSBzaG91bGQgbm90
IGFwcGx5IAotRkFJTCBub3QgYWxsIGFuZCAobWluLXJlc29sdXRpb246IGRwY20gIChkcGkgKyAx
KSApIHNob3VsZCBhcHBseSBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKLVBB
U1MgZXhwcmVzc2lvbiBncmlkIHNob3VsZCBiZSBwYXJzZWFibGUgCi1QQVNTIGV4cHJlc3Npb24g
Z3JpZDogMCBzaG91bGQgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNzaW9uIGdyaWQ6IDEgc2hv
dWxkIGJlIHBhcnNlYWJsZSAKLVBBU1MgZXhwcmVzc2lvbiBncmlkOiAxIHNob3VsZCBiZSBwYXJz
ZWFibGUgCi1QQVNTIGV4cHJlc3Npb24gbWluLWdyaWQgc2hvdWxkIG5vdCBiZSBwYXJzZWFibGUg
Ci1QQVNTIGV4cHJlc3Npb24gbWluLWdyaWQ6MCBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBB
U1MgZXhwcmVzc2lvbiBtYXgtZ3JpZDogMSBzaG91bGQgbm90IGJlIHBhcnNlYWJsZSAKLVBBU1Mg
ZXhwcmVzc2lvbiBncmlkOiAyIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyBleHByZXNz
aW9uIGdyaWQ6IC0xIHNob3VsZCBub3QgYmUgcGFyc2VhYmxlIAotUEFTUyAoZ3JpZCkgc2hvdWxk
IG5vdCBhcHBseSAKLVBBU1MgKGdyaWQ6IDApIHNob3VsZCBhcHBseSAKLVBBU1MgKGdyaWQ6IDEp
IHNob3VsZCBub3QgYXBwbHkgCi1QQVNTIChncmlkOiAyKSBzaG91bGQgbm90IGFwcGx5IAotUEFT
UyAoZ3JpZDogLTEpIHNob3VsZCBub3QgYXBwbHkgCi0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL2JsYWNrYmVycnkvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvZW5hYmxlLWRpc2FibGUt
c2V0dGluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
YmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0
aW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9lbmFibGUtZGlzYWJsZS1z
ZXR0aW5nLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICswLDAgQEAKLVBBU1NF
RDogd2Vic29ja2V0IG9iamVjdCBpcyBhdmFpbGFibGUgd2hlbiBXZWJTb2NrZXRzRW5hYmxlZCBp
cyB0cnVlCi1QQVNTRUQ6IHdlYnNvY2tldCBvYmplY3QgaXMgbm90IGF2YWlsYWJsZSB3aGVuIFdl
YlNvY2tldHNFbmFibGVkIGlzIGZhbHNlCi1URVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2VuYWJsZS1k
aXNhYmxlLXNldHRpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9i
bGFja2JlcnJ5L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2VuYWJsZS1kaXNhYmxlLXNldHRp
bmcuaHRtbAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRt
bD4KLTxoZWFkPgotPHRpdGxlPlJJTSBQUiAxNTIzMTE8L3RpdGxlPgotPHNjcmlwdD4KLWZ1bmN0
aW9uIGFwcGVuZFJlc3VsdCh0ZXh0KQotewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
ZXN1bHRzIikuaW5uZXJIVE1MICs9IHRleHQ7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKQotewot
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewotICAgICAgICB3aW5kb3cudGVzdFJ1bm5lci5k
dW1wQXNUZXh0KCk7Ci0gICAgICAgIHdpbmRvdy50ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5j
ZSgiV2ViU29ja2V0c0VuYWJsZWQiLCB0cnVlKTsKLSAgICB9Ci0gICAgaWYgKHdpbmRvdy5XZWJT
b2NrZXQpIHsKLSAgICAgICAgYXBwZW5kUmVzdWx0KCJQQVNTRUQ6IHdlYnNvY2tldCBvYmplY3Qg
aXMgYXZhaWxhYmxlIHdoZW4gV2ViU29ja2V0c0VuYWJsZWQgaXMgdHJ1ZTxicj4iKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBhcHBlbmRSZXN1bHQoIkZBSUxFRDogd2Vic29ja2V0IG9iamVjdCBp
cyBub3QgYXZhaWxhYmxlIHdoZW4gV2ViU29ja2V0c0VuYWJsZWQgaXMgdHJ1ZTxicj4iKTsKLSAg
ICB9Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAgICAgIHdpbmRvdy50ZXN0UnVu
bmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViU29ja2V0c0VuYWJsZWQiLCBmYWxzZSk7Ci0gICAg
fQotICAgIGlmICh3aW5kb3cuV2ViU29ja2V0KSB7Ci0gICAgICAgIGFwcGVuZFJlc3VsdCgiRkFJ
TEVEOiB3ZWJzb2NrZXQgb2JqZWN0IGlzIGF2YWlsYWJsZSB3aGVuIFdlYlNvY2tldHNFbmFibGVk
IGlzIGZhbHNlPGJyPiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFwcGVuZFJlc3VsdCgiUEFT
U0VEOiB3ZWJzb2NrZXQgb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUgd2hlbiBXZWJTb2NrZXRzRW5h
YmxlZCBpcyBmYWxzZTxicj4iKTsKLSAgICB9Ci0gICAgYXBwZW5kUmVzdWx0KCJURVNUIENPTVBM
RVRFIik7Ci19Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4K
LTxkaXYgaWQ9InJlc3VsdHMiPjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9lbmFi
bGUtZGlzYWJsZS1zZXR0aW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2VuYWJsZS1k
aXNhYmxlLXNldHRpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2VuYWJs
ZS1kaXNhYmxlLXNldHRpbmctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzAs
MCBAQAotUEFTU0VEOiB3ZWJzb2NrZXQgb2JqZWN0IGlzIGF2YWlsYWJsZSB3aGVuIFdlYlNvY2tl
dHNFbmFibGVkIGlzIHRydWUKLVBBU1NFRDogd2Vic29ja2V0IG9iamVjdCBpcyBub3QgYXZhaWxh
YmxlIHdoZW4gV2ViU29ja2V0c0VuYWJsZWQgaXMgZmFsc2UKLVRFU1QgQ09NUExFVEUKSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvZW5hYmxlLWRpc2FibGUtc2V0dGluZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2JsYWNrYmVycnkvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvZW5hYmxlLWRp
c2FibGUtc2V0dGluZy5odG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ibGFja2JlcnJ5L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2VuYWJsZS1kaXNhYmxl
LXNldHRpbmcuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNyArMCwwIEBACi08IURPQ1RZUEUg
aHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+UklNIFBSIDE1MjMxMTwvdGl0bGU+Ci08c2Ny
aXB0PgotZnVuY3Rpb24gYXBwZW5kUmVzdWx0KHRleHQpCi17Ci0gICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInJlc3VsdHMiKS5pbm5lckhUTUwgKz0gdGV4dDsKLX0KLQotZnVuY3Rpb24gcnVu
VGVzdCgpCi17Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAgICAgIHdpbmRvdy50
ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLSAgICAgICAgd2luZG93LnRlc3RSdW5uZXIub3ZlcnJp
ZGVQcmVmZXJlbmNlKCJXZWJTb2NrZXRzRW5hYmxlZCIsIHRydWUpOwotICAgIH0KLSAgICBpZiAo
d2luZG93LldlYlNvY2tldCkgewotICAgICAgICBhcHBlbmRSZXN1bHQoIlBBU1NFRDogd2Vic29j
a2V0IG9iamVjdCBpcyBhdmFpbGFibGUgd2hlbiBXZWJTb2NrZXRzRW5hYmxlZCBpcyB0cnVlPGJy
PiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFwcGVuZFJlc3VsdCgiRkFJTEVEOiB3ZWJzb2Nr
ZXQgb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUgd2hlbiBXZWJTb2NrZXRzRW5hYmxlZCBpcyB0cnVl
PGJyPiIpOwotICAgIH0KLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKLSAgICAgICAgd2lu
ZG93LnRlc3RSdW5uZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJTb2NrZXRzRW5hYmxlZCIsIGZh
bHNlKTsKLSAgICB9Ci0gICAgaWYgKHdpbmRvdy5XZWJTb2NrZXQpIHsKLSAgICAgICAgYXBwZW5k
UmVzdWx0KCJGQUlMRUQ6IHdlYnNvY2tldCBvYmplY3QgaXMgYXZhaWxhYmxlIHdoZW4gV2ViU29j
a2V0c0VuYWJsZWQgaXMgZmFsc2U8YnI+Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXBwZW5k
UmVzdWx0KCJQQVNTRUQ6IHdlYnNvY2tldCBvYmplY3QgaXMgbm90IGF2YWlsYWJsZSB3aGVuIFdl
YlNvY2tldHNFbmFibGVkIGlzIGZhbHNlPGJyPiIpOwotICAgIH0KLSAgICBhcHBlbmRSZXN1bHQo
IlRFU1QgQ09NUExFVEUiKTsKLX0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCkiPgotPGRpdiBpZD0icmVzdWx0cyI+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2VuYWJsZS1kaXNhYmxlLXNldHRpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvZW5hYmxlLWRpc2FibGUtc2V0dGluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvZW5hYmxlLWRpc2FibGUtc2V0dGluZy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMCwwIEBACi1QQVNTRUQ6IHdlYnNvY2tldCBvYmplY3QgaXMgYXZhaWxhYmxlIHdo
ZW4gV2ViU29ja2V0c0VuYWJsZWQgaXMgdHJ1ZQotUEFTU0VEOiB3ZWJzb2NrZXQgb2JqZWN0IGlz
IG5vdCBhdmFpbGFibGUgd2hlbiBXZWJTb2NrZXRzRW5hYmxlZCBpcyBmYWxzZQotVEVTVCBDT01Q
TEVURQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLmh0bWwJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvZW5h
YmxlLWRpc2FibGUtc2V0dGluZy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM3ICswLDAgQEAK
LTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5SSU0gUFIgMTUyMzExPC90
aXRsZT4KLTxzY3JpcHQ+Ci1mdW5jdGlvbiBhcHBlbmRSZXN1bHQodGV4dCkKLXsKLSAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpLmlubmVySFRNTCArPSB0ZXh0OwotfQotCi1m
dW5jdGlvbiBydW5UZXN0KCkKLXsKLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKLSAgICAg
ICAgd2luZG93LnRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICB3aW5kb3cudGVzdFJ1
bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYlNvY2tldHNFbmFibGVkIiwgdHJ1ZSk7Ci0gICAg
fQotICAgIGlmICh3aW5kb3cuV2ViU29ja2V0KSB7Ci0gICAgICAgIGFwcGVuZFJlc3VsdCgiUEFT
U0VEOiB3ZWJzb2NrZXQgb2JqZWN0IGlzIGF2YWlsYWJsZSB3aGVuIFdlYlNvY2tldHNFbmFibGVk
IGlzIHRydWU8YnI+Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXBwZW5kUmVzdWx0KCJGQUlM
RUQ6IHdlYnNvY2tldCBvYmplY3QgaXMgbm90IGF2YWlsYWJsZSB3aGVuIFdlYlNvY2tldHNFbmFi
bGVkIGlzIHRydWU8YnI+Iik7Ci0gICAgfQotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewot
ICAgICAgICB3aW5kb3cudGVzdFJ1bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYlNvY2tldHNF
bmFibGVkIiwgZmFsc2UpOwotICAgIH0KLSAgICBpZiAod2luZG93LldlYlNvY2tldCkgewotICAg
ICAgICBhcHBlbmRSZXN1bHQoIkZBSUxFRDogd2Vic29ja2V0IG9iamVjdCBpcyBhdmFpbGFibGUg
d2hlbiBXZWJTb2NrZXRzRW5hYmxlZCBpcyBmYWxzZTxicj4iKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBhcHBlbmRSZXN1bHQoIlBBU1NFRDogd2Vic29ja2V0IG9iamVjdCBpcyBub3QgYXZhaWxh
YmxlIHdoZW4gV2ViU29ja2V0c0VuYWJsZWQgaXMgZmFsc2U8YnI+Iik7Ci0gICAgfQotICAgIGFw
cGVuZFJlc3VsdCgiVEVTVCBDT01QTEVURSIpOwotfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eSBvbmxvYWQ9InJ1blRlc3QoKSI+Ci08ZGl2IGlkPSJyZXN1bHRzIj48L2Rpdj4KLTwvYm9keT4K
LTwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvZW5hYmxlLWRpc2FibGUtc2V0dGluZy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMSwzICswLDAgQEAKLVBBU1NFRDogd2Vic29ja2V0IG9iamVjdCBpcyBh
dmFpbGFibGUgd2hlbiBXZWJTb2NrZXRzRW5hYmxlZCBpcyB0cnVlCi1QQVNTRUQ6IHdlYnNvY2tl
dCBvYmplY3QgaXMgbm90IGF2YWlsYWJsZSB3aGVuIFdlYlNvY2tldHNFbmFibGVkIGlzIGZhbHNl
Ci1URVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2VuYWJsZS1kaXNhYmxlLXNldHRpbmcuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2VuYWJsZS1kaXNhYmxlLXNldHRpbmcuaHRtbAkocmV2aXNpb24gMTYxNjA2
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEs
MzcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPlJJTSBQ
UiAxNTIzMTE8L3RpdGxlPgotPHNjcmlwdD4KLWZ1bmN0aW9uIGFwcGVuZFJlc3VsdCh0ZXh0KQot
ewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIikuaW5uZXJIVE1MICs9IHRl
eHQ7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKQotewotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikgewotICAgICAgICB3aW5kb3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Ci0gICAgICAgIHdp
bmRvdy50ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViU29ja2V0c0VuYWJsZWQiLCB0
cnVlKTsKLSAgICB9Ci0gICAgaWYgKHdpbmRvdy5XZWJTb2NrZXQpIHsKLSAgICAgICAgYXBwZW5k
UmVzdWx0KCJQQVNTRUQ6IHdlYnNvY2tldCBvYmplY3QgaXMgYXZhaWxhYmxlIHdoZW4gV2ViU29j
a2V0c0VuYWJsZWQgaXMgdHJ1ZTxicj4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhcHBlbmRS
ZXN1bHQoIkZBSUxFRDogd2Vic29ja2V0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlIHdoZW4gV2Vi
U29ja2V0c0VuYWJsZWQgaXMgdHJ1ZTxicj4iKTsKLSAgICB9Ci0gICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKSB7Ci0gICAgICAgIHdpbmRvdy50ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgi
V2ViU29ja2V0c0VuYWJsZWQiLCBmYWxzZSk7Ci0gICAgfQotICAgIGlmICh3aW5kb3cuV2ViU29j
a2V0KSB7Ci0gICAgICAgIGFwcGVuZFJlc3VsdCgiRkFJTEVEOiB3ZWJzb2NrZXQgb2JqZWN0IGlz
IGF2YWlsYWJsZSB3aGVuIFdlYlNvY2tldHNFbmFibGVkIGlzIGZhbHNlPGJyPiIpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGFwcGVuZFJlc3VsdCgiUEFTU0VEOiB3ZWJzb2NrZXQgb2JqZWN0IGlz
IG5vdCBhdmFpbGFibGUgd2hlbiBXZWJTb2NrZXRzRW5hYmxlZCBpcyBmYWxzZTxicj4iKTsKLSAg
ICB9Ci0gICAgYXBwZW5kUmVzdWx0KCJURVNUIENPTVBMRVRFIik7Ci19Ci08L3NjcmlwdD4KLTwv
aGVhZD4KLTxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KLTxkaXYgaWQ9InJlc3VsdHMiPjwvZGl2
PgotPC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJy
eS9qcy9kb20vY29uc3RydWN0b3ItbGVuZ3RoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L2pzL2RvbS9jb25zdHJ1Y3Rvci1sZW5ndGgt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9i
bGFja2JlcnJ5L2pzL2RvbS9jb25zdHJ1Y3Rvci1sZW5ndGgtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYxICswLDAgQEAKLVRoaXMgdGVzdHMgdGhlIGxlbmd0aCBwcm9wZXJ0eSBv
ZiBjb25zdHJ1Y3RvcnMuCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1QQVNTIEFy
cmF5QnVmZmVyLmxlbmd0aCBpcyAxCi1GQUlMIEF1ZGlvQ29udGV4dC5sZW5ndGggc2hvdWxkIGJl
IDAuIFRocmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTog
QXVkaW9Db250ZXh0Ci1QQVNTIEJlZm9yZUxvYWRFdmVudC5sZW5ndGggaXMgMQotUEFTUyBCbG9i
Lmxlbmd0aCBpcyAwCi1QQVNTIENsb3NlRXZlbnQubGVuZ3RoIGlzIDEKLVBBU1MgQ3VzdG9tRXZl
bnQubGVuZ3RoIGlzIDEKLUZBSUwgRE9NRm9ybURhdGEubGVuZ3RoIHNob3VsZCBiZSAwLiBUaHJl
dyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IERPTUZvcm1E
YXRhCi1QQVNTIERPTVBhcnNlci5sZW5ndGggaXMgMAotUEFTUyBEYXRhVmlldy5sZW5ndGggaXMg
MQotUEFTUyBFcnJvckV2ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIEV2ZW50Lmxlbmd0aCBpcyAxCi1Q
QVNTIEV2ZW50U291cmNlLmxlbmd0aCBpcyAxCi1QQVNTIEZsb2F0MzJBcnJheS5sZW5ndGggaXMg
MQotUEFTUyBGbG9hdDY0QXJyYXkubGVuZ3RoIGlzIDEKLVBBU1MgRmlsZVJlYWRlci5sZW5ndGgg
aXMgMAotRkFJTCBGaWxlUmVhZGVyU3luYy5sZW5ndGggc2hvdWxkIGJlIDAuIFRocmV3IGV4Y2Vw
dGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogRmlsZVJlYWRlclN5bmMK
LVBBU1MgSGFzaENoYW5nZUV2ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIEludDE2QXJyYXkubGVuZ3Ro
IGlzIDEKLVBBU1MgSW50MzJBcnJheS5sZW5ndGggaXMgMQotUEFTUyBJbnQ4QXJyYXkubGVuZ3Ro
IGlzIDEKLUZBSUwgSW50ZW50Lmxlbmd0aCBzaG91bGQgYmUgMy4gVGhyZXcgZXhjZXB0aW9uIFJl
ZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBJbnRlbnQKLVBBU1MgTWVkaWFDb250
cm9sbGVyLmxlbmd0aCBpcyAwCi1GQUlMIE1lZGlhU3RyZWFtLmxlbmd0aCBzaG91bGQgYmUgMC4g
VGhyZXcgZXhjZXB0aW9uIFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBNZWRp
YVN0cmVhbQotUEFTUyBNZXNzYWdlQ2hhbm5lbC5sZW5ndGggaXMgMAotUEFTUyBNZXNzYWdlRXZl
bnQubGVuZ3RoIGlzIDEKLVBBU1MgT3ZlcmZsb3dFdmVudC5sZW5ndGggaXMgMQotUEFTUyBQYWdl
VHJhbnNpdGlvbkV2ZW50Lmxlbmd0aCBpcyAxCi1GQUlMIFBlZXJDb25uZWN0aW9uLmxlbmd0aCBz
aG91bGQgYmUgMi4gVGhyZXcgZXhjZXB0aW9uIFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZh
cmlhYmxlOiBQZWVyQ29ubmVjdGlvbgotUEFTUyBQb3BTdGF0ZUV2ZW50Lmxlbmd0aCBpcyAxCi1Q
QVNTIFByb2dyZXNzRXZlbnQubGVuZ3RoIGlzIDEKLUZBSUwgU2hhZG93Um9vdC5sZW5ndGggc2hv
dWxkIGJlIDEuIFRocmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJp
YWJsZTogU2hhZG93Um9vdAotUEFTUyBTaGFyZWRXb3JrZXIubGVuZ3RoIGlzIDEKLVBBU1MgU3Rv
cmFnZUV2ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIFRleHRUcmFja0N1ZS5sZW5ndGggaXMgNgotUEFT
UyBUcmFja0V2ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIFVpbnQxNkFycmF5Lmxlbmd0aCBpcyAxCi1Q
QVNTIFVpbnQzMkFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIFVpbnQ4QXJyYXkubGVuZ3RoIGlzIDEK
LVBBU1MgVWludDhDbGFtcGVkQXJyYXkubGVuZ3RoIGlzIDEKLVBBU1MgV2ViR0xDb250ZXh0RXZl
bnQubGVuZ3RoIGlzIDEKLVBBU1MgV2ViS2l0QW5pbWF0aW9uRXZlbnQubGVuZ3RoIGlzIDEKLVBB
U1MgV2ViS2l0Q1NTTWF0cml4Lmxlbmd0aCBpcyAwCi1QQVNTIFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXIubGVuZ3RoIGlzIDEKLVBBU1MgV2ViS2l0UG9pbnQubGVuZ3RoIGlzIDAKLVBBU1MgV2ViS2l0
VHJhbnNpdGlvbkV2ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIFdlYlNvY2tldC5sZW5ndGggaXMgMQot
UEFTUyBXb3JrZXIubGVuZ3RoIGlzIDEKLVBBU1Mgd2Via2l0VVJMLmxlbmd0aCBpcyAwCi1QQVNT
IFhNTEh0dHBSZXF1ZXN0Lmxlbmd0aCBpcyAwCi1QQVNTIFhNTFNlcmlhbGl6ZXIubGVuZ3RoIGlz
IDAKLVBBU1MgWFBhdGhFdmFsdWF0b3IubGVuZ3RoIGlzIDAKLVBBU1MgWFNMVFByb2Nlc3Nvci5s
ZW5ndGggaXMgMAotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBM
RVRFCi0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvanMvZG9tL2NvbnN0
cnVjdG9yLWxlbmd0aC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vYmxhY2tiZXJyeS9qcy9kb20vY29uc3RydWN0b3ItbGVuZ3RoLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9qcy9k
b20vY29uc3RydWN0b3ItbGVuZ3RoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2
MSArMCwwIEBACi1UaGlzIHRlc3RzIHRoZSBsZW5ndGggcHJvcGVydHkgb2YgY29uc3RydWN0b3Jz
LgotCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCi0KLQotUEFTUyBBcnJheUJ1ZmZlci5sZW5n
dGggaXMgMQotRkFJTCBBdWRpb0NvbnRleHQubGVuZ3RoIHNob3VsZCBiZSAwLiBUaHJldyBleGNl
cHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IEF1ZGlvQ29udGV4dAot
UEFTUyBCZWZvcmVMb2FkRXZlbnQubGVuZ3RoIGlzIDEKLVBBU1MgQmxvYi5sZW5ndGggaXMgMAot
UEFTUyBDbG9zZUV2ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIEN1c3RvbUV2ZW50Lmxlbmd0aCBpcyAx
Ci1GQUlMIERPTUZvcm1EYXRhLmxlbmd0aCBzaG91bGQgYmUgMC4gVGhyZXcgZXhjZXB0aW9uIFJl
ZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBET01Gb3JtRGF0YQotUEFTUyBET01Q
YXJzZXIubGVuZ3RoIGlzIDAKLVBBU1MgRGF0YVZpZXcubGVuZ3RoIGlzIDEKLVBBU1MgRXJyb3JF
dmVudC5sZW5ndGggaXMgMQotUEFTUyBFdmVudC5sZW5ndGggaXMgMQotUEFTUyBFdmVudFNvdXJj
ZS5sZW5ndGggaXMgMQotUEFTUyBGbG9hdDMyQXJyYXkubGVuZ3RoIGlzIDEKLVBBU1MgRmxvYXQ2
NEFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIEZpbGVSZWFkZXIubGVuZ3RoIGlzIDAKLUZBSUwgRmls
ZVJlYWRlclN5bmMubGVuZ3RoIHNob3VsZCBiZSAwLiBUaHJldyBleGNlcHRpb24gUmVmZXJlbmNl
RXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IEZpbGVSZWFkZXJTeW5jCi1QQVNTIEhhc2hDaGFu
Z2VFdmVudC5sZW5ndGggaXMgMQotUEFTUyBJbnQxNkFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIElu
dDMyQXJyYXkubGVuZ3RoIGlzIDEKLVBBU1MgSW50OEFycmF5Lmxlbmd0aCBpcyAxCi1GQUlMIElu
dGVudC5sZW5ndGggc2hvdWxkIGJlIDMuIFRocmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjog
Q2FuJ3QgZmluZCB2YXJpYWJsZTogSW50ZW50Ci1QQVNTIE1lZGlhQ29udHJvbGxlci5sZW5ndGgg
aXMgMAotRkFJTCBNZWRpYVN0cmVhbS5sZW5ndGggc2hvdWxkIGJlIDAuIFRocmV3IGV4Y2VwdGlv
biBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogTWVkaWFTdHJlYW0KLVBBU1Mg
TWVzc2FnZUNoYW5uZWwubGVuZ3RoIGlzIDAKLVBBU1MgTWVzc2FnZUV2ZW50Lmxlbmd0aCBpcyAx
Ci1QQVNTIE92ZXJmbG93RXZlbnQubGVuZ3RoIGlzIDEKLVBBU1MgUGFnZVRyYW5zaXRpb25FdmVu
dC5sZW5ndGggaXMgMQotRkFJTCBQZWVyQ29ubmVjdGlvbi5sZW5ndGggc2hvdWxkIGJlIDIuIFRo
cmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogUGVlckNv
bm5lY3Rpb24KLVBBU1MgUG9wU3RhdGVFdmVudC5sZW5ndGggaXMgMQotUEFTUyBQcm9ncmVzc0V2
ZW50Lmxlbmd0aCBpcyAxCi1GQUlMIFNoYWRvd1Jvb3QubGVuZ3RoIHNob3VsZCBiZSAxLiBUaHJl
dyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IFNoYWRvd1Jv
b3QKLVBBU1MgU2hhcmVkV29ya2VyLmxlbmd0aCBpcyAxCi1QQVNTIFN0b3JhZ2VFdmVudC5sZW5n
dGggaXMgMQotUEFTUyBUZXh0VHJhY2tDdWUubGVuZ3RoIGlzIDYKLVBBU1MgVHJhY2tFdmVudC5s
ZW5ndGggaXMgMQotUEFTUyBVaW50MTZBcnJheS5sZW5ndGggaXMgMQotUEFTUyBVaW50MzJBcnJh
eS5sZW5ndGggaXMgMQotUEFTUyBVaW50OEFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIFVpbnQ4Q2xh
bXBlZEFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIFdlYkdMQ29udGV4dEV2ZW50Lmxlbmd0aCBpcyAx
Ci1QQVNTIFdlYktpdEFuaW1hdGlvbkV2ZW50Lmxlbmd0aCBpcyAxCi1QQVNTIFdlYktpdENTU01h
dHJpeC5sZW5ndGggaXMgMAotUEFTUyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmxlbmd0aCBpcyAx
Ci1QQVNTIFdlYktpdFBvaW50Lmxlbmd0aCBpcyAwCi1QQVNTIFdlYktpdFRyYW5zaXRpb25FdmVu
dC5sZW5ndGggaXMgMQotUEFTUyBXZWJTb2NrZXQubGVuZ3RoIGlzIDEKLVBBU1MgV29ya2VyLmxl
bmd0aCBpcyAxCi1QQVNTIHdlYmtpdFVSTC5sZW5ndGggaXMgMAotUEFTUyBYTUxIdHRwUmVxdWVz
dC5sZW5ndGggaXMgMAotUEFTUyBYTUxTZXJpYWxpemVyLmxlbmd0aCBpcyAwCi1QQVNTIFhQYXRo
RXZhbHVhdG9yLmxlbmd0aCBpcyAwCi1QQVNTIFhTTFRQcm9jZXNzb3IubGVuZ3RoIGlzIDAKLVBB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL21lZGlhLWNhbi1wbGF5LW9nZy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJy
eS9tZWRpYS9tZWRpYS1jYW4tcGxheS1vZ2ctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL21lZGlhLWNhbi1wbGF5
LW9nZy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMgKzAsMCBAQAotVGVzdCBI
VE1MTWVkaWFFbGVtZW50IGNhblBsYXlUeXBlKCkgbWV0aG9kIGZvciBvZ2cgbWVkaWEgY29udGFp
bmVycy4KLQotVGhlc2UgdGVzdHMgbWF5IGJlIGV4cGVjdGVkIHRvIGZhaWwgaWYgdGhlIFdlYktp
dCBwb3J0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGZvcm1hdC4KLQotRVhQRUNURUQgKHZpZGVvLmNh
blBsYXlUeXBlKCdhdWRpby9vZ2cnKSA9PSAnbWF5YmUnKSBPSwotRVhQRUNURUQgKHZpZGVvLmNh
blBsYXlUeXBlKCd2aWRlby9vZ2cnKSA9PSAnbWF5YmUnKSBPSwotRVhQRUNURUQgKHZpZGVvLmNh
blBsYXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz12b3JiaXMnKSA9PSAncHJvYmFibHknKSBPSwot
RVhQRUNURUQgKHZpZGVvLmNhblBsYXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz1vcHVzJykgPT0g
J3Byb2JhYmx5JyksIE9CU0VSVkVEICcnIEZBSUwKLUVYUEVDVEVEICh2aWRlby5jYW5QbGF5VHlw
ZSgnYXVkaW8vb2dnOyBjb2RlY3M9c3BlZXgnKSA9PSAncHJvYmFibHknKSwgT0JTRVJWRUQgJycg
RkFJTAotRVhQRUNURUQgKHZpZGVvLmNhblBsYXlUeXBlKCd2aWRlby9vZ2c7IGNvZGVjcz10aGVv
cmEnKSA9PSAncHJvYmFibHknKSBPSwotRVhQRUNURUQgKHZpZGVvLmNhblBsYXlUeXBlKCd2aWRl
by9vZ2c7IGNvZGVjcz10aGVvcmEsdm9yYmlzJykgPT0gJ3Byb2JhYmx5JykgT0sKLUVORCBPRiBU
RVNUCi0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvc2hvcnQt
bWVkaWEtcmVwZWF0cy1jb3JyZWN0bHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvc2hvcnQtbWVkaWEtcmVwZWF0cy1jb3Jy
ZWN0bHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3Nob3J0LW1lZGlhLXJlcGVhdHMtY29ycmVjdGx5LWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiArMCwwIEBACi1UZXN0IHRoYXQgYSB2ZXJ5
IHNob3J0IGF1ZGlvIGZpbGUgZG9lcyBub3QgcmVwZWF0IHVuaW50ZW50aW9uYWxseS4KLQotRVZF
TlQoY2FucGxheXRocm91Z2gpCi1FVkVOVChwbGF5aW5nKQotRVZFTlQoZW5kZWQpCi1FVkVOVChw
bGF5aW5nKQotRVZFTlQoZW5kZWQpCi1FVkVOVChwcm9ncmVzcykKLUVWRU5UKHBsYXlpbmcpCi1F
VkVOVChlbmRlZCkKLUVWRU5UKHByb2dyZXNzKQotRVZFTlQocGxheWluZykKLUVWRU5UKGVuZGVk
KQotRVZFTlQocHJvZ3Jlc3MpCi1FVkVOVChwbGF5aW5nKQotRVZFTlQoZW5kZWQpCi1FVkVOVChw
cm9ncmVzcykKLUVWRU5UKHBsYXlpbmcpCi1FVkVOVChlbmRlZCkKLUVWRU5UKHByb2dyZXNzKQot
RVhQRUNURUQocHJvZ3Jlc3NDb3VudCA9PSAnNScpIE9LCi1FTkQgT0YgVEVTVApJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS9zaG9ydC1tZWRpYS1yZXBlYXRzLWNv
cnJlY3RseS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVy
cnkvbWVkaWEvc2hvcnQtbWVkaWEtcmVwZWF0cy1jb3JyZWN0bHkuaHRtbAkocmV2aXNpb24gMTYx
NjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS9zaG9ydC1tZWRp
YS1yZXBlYXRzLWNvcnJlY3RseS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAK
LTxodG1sPgotICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Ut
d2lkdGgiPgotICAgIDx0aXRsZT5TaG9ydCBNZWRpYSBSZXBlYXRzIENvcnJlY3RseTwvdGl0bGU+
Ci0gICAgPGJvZHk+Ci0gICAgPHA+VGVzdCB0aGF0IGEgdmVyeSBzaG9ydCBhdWRpbyBmaWxlIGRv
ZXMgbm90IHJlcGVhdCB1bmludGVudGlvbmFsbHkuPC9wPgotCi0gICAgPHNjcmlwdCBzcmM9Li4v
Li4vLi4vbWVkaWEvdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0uLi8u
Li8uLi9tZWRpYS9tZWRpYS1maWxlLmpzPjwvc2NyaXB0PgotICAgIDxzY3JpcHQ+Ci0gICAgICAg
IGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxv
Z1Jlc3VsdChmYWxzZSwgIkNhdWdodCAnZXJyb3InIGV2ZW50LCBtZWRpYS5lcnJvci5jb2RlID0g
IiArIHRoaXMuZXJyb3IuY29kZSk7Ci0gICAgICAgICAgICBlbmRUZXN0KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBmdW5jdGlvbiBjYW5wbGF5dGhyb3VnaExpc3RlbmVyKGV2ZW50KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjb25zb2xlV3JpdGUoIkVWRU5UKGNhbnBsYXl0aHJvdWdoKSIpOwot
ICAgICAgICAgICAgdGhpcy5wbGF5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBw
bGF5aW5nTGlzdGVuZXIoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnNvbGVXcml0
ZSgiRVZFTlQocGxheWluZykiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHByb2dy
ZXNzTGlzdGVuZXIoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBtZWRp
YSByZXBlYXRzIG1vcmUgb2Z0ZW4gdGhhbiBpbnRlbmRlZCB0aGVyZSB3aWxsIGJlIHRvbwotICAg
ICAgICAgICAgLy8gbWFueSBwcm9ncmVzcyBldmVudHMgcmVjZWl2ZWQsIGluIHRoaXMgY2FzZSBv
bmUgcHJvZ3Jlc3MKLSAgICAgICAgICAgIC8vIGV2ZW50IHBlciBwbGF5LiBJIHRyaWVkIGxpc3Rl
bmluZyBmb3Igb3RoZXIgbW9yZSBpbnR1aXRpdmUKLSAgICAgICAgICAgIC8vIGV2ZW50cyBidXQg
bm90aGluZyBlbHNlIGlzIGJlaW5nIHRyaWdnZXJlZCB3aGVuIHRoZSByZXBlYXRlZAotICAgICAg
ICAgICAgLy8gcGxheXMgaW4gcXVlc3Rpb24gb2NjdXIuCi0gICAgICAgICAgICBjb25zb2xlV3Jp
dGUoIkVWRU5UKHByb2dyZXNzKSIpOwotICAgICAgICAgICAgKytwcm9ncmVzc0NvdW50OwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZW5kZWRMaXN0ZW5lcihldmVudCkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29uc29sZVdyaXRlKCJFVkVOVChlbmRlZCkiKTsKLSAgICAgICAgICAg
IGlmICgrK2VuZGVkQ291bnQgPD0gNSkgLy8gU2V0IHRvdGFsIG51bWJlciBvZiByZXBlYXRzIGhl
cmUKLSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCJjb250aW51ZVRlc3QoKSIsIDEwMCk7IC8v
IEdpdmUgZXZlbnRzIHRpbWUgdG8gY29tZQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHNldFRpbWVvdXQoImNvbmNsdWRlVGVzdCgpIiwgMTAwKTsgLy8gR2l2ZSBldmVudHMgdGlt
ZSB0byBjb21lCi0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjb250aW51ZVRlc3QoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoKytyZXBlYXRDb3VudCA9PSAxKQotICAgICAgICAg
ICAgICAgIGF1ZGlvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNz
TGlzdGVuZXIpOwotICAgICAgICAgICAgYXVkaW9FbGVtZW50LnBsYXkoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZ1bmN0aW9uIGNvbmNsdWRlVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRlc3RFeHBlY3RlZCgicHJvZ3Jlc3NDb3VudCIsIHJlcGVhdENvdW50KTsKLSAgICAgICAgICAg
IGVuZFRlc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRvY3VtZW50LndyaXRlKCI8YXVkaW8g
Y29udHJvbHM+PC9hdWRpbz4iKTsKLSAgICAgICAgdmFyIGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhdWRpbycpWzBdOwotICAgICAgICB2YXIgZW5kZWRDb3Vu
dCA9IDA7Ci0gICAgICAgIHZhciByZXBlYXRDb3VudCA9IDA7Ci0gICAgICAgIHZhciBwcm9ncmVz
c0NvdW50ID0gMDsKLSAgICAgICAgYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9y
JywgZXJyb3JMaXN0ZW5lcik7Ci0gICAgICAgIGF1ZGlvRWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCdjYW5wbGF5dGhyb3VnaCcsIGNhbnBsYXl0aHJvdWdoTGlzdGVuZXIpOwotICAgICAgICBhdWRp
b0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHBsYXlpbmdMaXN0ZW5lcik7Ci0g
ICAgICAgIGF1ZGlvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIGVuZGVkTGlzdGVu
ZXIpOwotICAgICAgICBhdWRpb0VsZW1lbnQuc3JjID0gZmluZE1lZGlhRmlsZSgiYXVkaW8iLCAi
Li4vLi4vLi4vbWVkaWEvY29udGVudC9zaG9ydCIpOwotICAgIDwvc2NyaXB0PgotPC9ib2R5Pgot
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92aWRl
by1hdXRvbWF0aWMtZnVsbHNjcmVlbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92aWRlby1hdXRvbWF0aWMtZnVsbHNjcmVl
bi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L2JsYWNrYmVycnkvbWVkaWEvdmlkZW8tYXV0b21hdGljLWZ1bGxzY3JlZW4tZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAsMCBAQAotRVZFTlQoY2FucGxheSkKLUVWRU5UKHdl
YmtpdGZ1bGxzY3JlZW5jaGFuZ2UpCi1FTkQgT0YgVEVTVAotCkluZGV4OiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWF1dG9tYXRpYy1mdWxsc2NyZWVuLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92aWRl
by1hdXRvbWF0aWMtZnVsbHNjcmVlbi5odG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWF1dG9tYXRpYy1mdWxsc2NyZWVu
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08
aHRtbD4KLTxoZWFkPgotICAgIDx0aXRsZT5WaWRlbyBFbGVtZW50IC0gVGVzdCBhdXRvbWF0aWMg
RW50ZXIgRnVsbHNjcmVlbiBvbiBwbGF5PC90aXRsZT4KLSAgICA8c2NyaXB0IHNyYz0uLi8uLi8u
Li9tZWRpYS92aWRlby10ZXN0LmpzPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPS4uLy4uLy4u
L21lZGlhL21lZGlhLWZpbGUuanM+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Li4vLi4vLi4v
bWVkaWEvbWVkaWEtY29udHJvbHMuanM+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Li4vLi4v
Li4vZnVsbHNjcmVlbi9mdWxsLXNjcmVlbi10ZXN0LmpzPjwvc2NyaXB0PgotICAgIDxzY3JpcHQ+
Ci0gICAgICAgIHZhciB2b2x1bWVTbGlkZXI7Ci0KLSAgICAgICAgdmFyIHN0YXJ0VGVzdCA9IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgZmluZE1lZGlhRWxlbWVudCgpOwotICAgICAgICAgICAg
d2FpdEZvckV2ZW50KHZpZGVvLCAnY2FucGxheScsIG9uY2FucGxheSk7Ci0gICAgICAgICAgICB2
aWRlby5zcmMgPSBmaW5kTWVkaWFGaWxlKCd2aWRlbycsICcuLi8uLi8uLi9tZWRpYS9jb250ZW50
L3Rlc3QnKTsKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgb25jYW5wbGF5ID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICB3YWl0Rm9yRXZlbnQodmlkZW8sICd3ZWJraXRmdWxsc2NyZWVuY2hh
bmdlJywgb25mdWxsc2NyZWVuY2hhbmdlKTsKLSAgICAgICAgICAgIHJ1bldpdGhLZXlEb3duKGZ1
bmN0aW9uKCl7IHZpZGVvLnBsYXkoKTsgfSkKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgb25m
dWxsc2NyZWVuY2hhbmdlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBlbmRUZXN0KCk7Ci0g
ICAgICAgIH07Ci0gICAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9InN0YXJ0VGVz
dCgpIj4KLSAgICAKLSAgICA8dmlkZW8gY29udHJvbHM+PC92aWRlbz4gICAgCi0gICAgCi08L2Jv
ZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlh
L3ZpZGVvLWNvbnRyb2xzLWVubGFyZ2VkLWZ1bGxzY3JlZW4tbWV0YS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92aWRlby1j
b250cm9scy1lbmxhcmdlZC1mdWxsc2NyZWVuLW1ldGEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAx
NjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWNv
bnRyb2xzLWVubGFyZ2VkLWZ1bGxzY3JlZW4tbWV0YS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMCwwIEBACi1UZXN0IHRoYXQgbWVkaWEgY29udHJvbHMgYXJlIHJlbmRlcmVk
IGF0IHRoZSBlbmxhcmdlZCBzaXplIGluIGZ1bGxzY3JlZW4gbW9kZS4KLQotRVZFTlQoY2FucGxh
eXRocm91Z2gpCi1UaGUgYWN0dWFsIGNvbnRyb2xzIGhlaWdodCBtYXRjaGVzIHRoZSBleHBlY3Rl
ZCBjb250cm9scyBoZWlnaHQuIE9LCi1FTkQgT0YgVEVTVAotRW50ZXIgRnVsbFNjcmVlbgpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92aWRlby1jb250cm9scy1l
bmxhcmdlZC1mdWxsc2NyZWVuLW1ldGEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWNvbnRyb2xzLWVubGFyZ2VkLWZ1bGxzY3Jl
ZW4tbWV0YS5odG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9i
bGFja2JlcnJ5L21lZGlhL3ZpZGVvLWNvbnRyb2xzLWVubGFyZ2VkLWZ1bGxzY3JlZW4tbWV0YS5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLTxodG1sPgotICAgIDxtZXRhIG5h
bWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgiPgotICAgIDx0aXRsZT5U
ZXN0IG9mIEhUTUw1IE1lZGlhIENvbnRyb2xzIEVubGFyZ2VtZW50IGluIEZ1bGxzY3JlZW4gTW9k
ZTwvdGl0bGU+Ci0gICAgPGJvZHk+Ci0gICAgPHA+VGVzdCB0aGF0IG1lZGlhIGNvbnRyb2xzIGFy
ZSByZW5kZXJlZCBhdCB0aGUgZW5sYXJnZWQgc2l6ZSBpbiBmdWxsc2NyZWVuIG1vZGUuPC9wPgot
Ci0gICAgPHNjcmlwdCBzcmM9Li4vLi4vLi4vbWVkaWEvdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4K
LSAgICA8c2NyaXB0IHNyYz0uLi8uLi8uLi9tZWRpYS9tZWRpYS1maWxlLmpzPjwvc2NyaXB0Pgot
ICAgIDxzY3JpcHQgc3JjPS4uLy4uLy4uL21lZGlhL21lZGlhLWNvbnRyb2xzLmpzPjwvc2NyaXB0
PgotICAgIDxzY3JpcHQ+Ci0gICAgICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXZlbnQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGxvZ1Jlc3VsdChmYWxzZSwgIkNhdWdodCAnZXJyb3InIGV2
ZW50LCB2aWRlby5lcnJvci5jb2RlID0gIiArIHRoaXMuZXJyb3IuY29kZSk7Ci0gICAgICAgICAg
ICBlbmRUZXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBmdWxsU2NyZWVuTGlz
dGVuZXIoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZSB2aWRlbyBlbnRlcmVk
IGZ1bGxzY3JlZW4gbW9kZS4KLSAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnLCBmdWxsU2NyZWVuTGlzdGVuZXIpOwotICAgICAg
ICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzY2FsZSBvZiBDU1MgcGl4ZWxzLiBJZiBDU1MgcGl4ZWxz
IGFyZSBub3QgYmVpbmcKLSAgICAgICAgICAgIC8vIHNjYWxlZCBieSBhIGZhY3RvciBvZiBhdCBs
ZWFzdCB0d28sIHdlIGV4cGVjdCB0aGUgZnVsbHNjcmVlbgotICAgICAgICAgICAgLy8gY29udHJv
bHMgdG8gYmUgc2hvd24gZW5sYXJnZWQuIENTUyBwaXhlbHMgd2lsbCBvbmx5IGJlIHNjYWxlZAot
ICAgICAgICAgICAgLy8gd2hlbiB2aWV3cG9ydCB3aWR0aCBpcyBzZXQgdG8gImRldmljZS13aWR0
aCIgYnkgYSBtZXRhIHRhZyAoc2VlCi0gICAgICAgICAgICAvLyBhYm92ZSkgb24gZGV2aWNlcyB3
aXRoIGhpZ2ggc2NyZWVuIERQSSdzIHN1Y2ggYXMgQkIxMCBoYW5kLWhlbGRzLgotICAgICAgICAg
ICAgdmFyIGV4cGVjdGVkID0gNjQ7Ci0gICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoIC8gZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoID49IDIpCi0gICAgICAgICAgICAgICAg
ZXhwZWN0ZWQgPSAzMjsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBtZWRpYUNvbnRyb2xzQnV0
dG9uRGltZW5zaW9ucyh2aWRlb0VsZW1lbnQsICdwbGF5LWJ1dHRvbicpWzFdOwotICAgICAgICAg
ICAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkKLSAgICAgICAgICAgICAgICBsb2dSZXN1bHQodHJ1
ZSwgIlRoZSBhY3R1YWwgY29udHJvbHMgaGVpZ2h0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGNvbnRy
b2xzIGhlaWdodC4iKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsb2dSZXN1
bHQoZmFsc2UsICJUaGUgYWN0dWFsIGNvbnRyb2xzIGhlaWdodCBvZiAiICsgYWN0dWFsICsgIiBk
b2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgY29udHJvbHMgaGVpZ2h0IG9mICIgKyBleHBlY3Rl
ZCArICIuIik7Ci0gICAgICAgICAgICBlbmRUZXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBjYW5wbGF5dGhyb3VnaExpc3RlbmVyKGV2ZW50KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb25zb2xlV3JpdGUoIkVWRU5UKGNhbnBsYXl0aHJvdWdoKSIpOwotICAgICAgICAgICAg
Ly8gQ2Fubm90IGNhbGwgdGhpcy53ZWJraXRFbnRlckZ1bGxTY3JlZW4oKSBkaXJlY3RseSBiZWNh
dXNlIGl0Ci0gICAgICAgICAgICAvLyBvbmx5IHdvcmtzIHdoZW4gaW5pdGlhdGVkIGJ5IGEgdXNl
ciBnZXN0dXJlLgotICAgICAgICAgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikKLSAgICAgICAg
ICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCJhIiwgWyJhbHRLZXkiXSk7Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb2dSZXN1bHQodHJ1ZSwgIlRoaXMgdGVzdCB1c2Vz
IGV2ZW50U2VuZGVyIGFuZCBtdXN0IGJlIHJ1biB1bmRlciB0aGUgRFJUIGZyYW1ld29yayB0byBi
ZSBhdXRvbWF0aWMuIE90aGVyd2lzZSB5b3UgbmVlZCB0byBtYW51YWxseSBwcmVzcyBFbnRlciBG
dWxsc2NyZWVuLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZG9jdW1l
bnQud3JpdGUoIjx2aWRlbyBjb250cm9scz48L3ZpZGVvPiIpOwotICAgICAgICBkb2N1bWVudC53
cml0ZSgiPGJ1dHRvbiBvbmNsaWNrPSd2aWRlb0VsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxTY3Jl
ZW4oKScgYWNjZXNzS2V5PSdhJz5FbnRlciBGdWxsU2NyZWVuPC9idXR0b24+Iik7Ci0gICAgICAg
IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnLCBmdWxs
U2NyZWVuTGlzdGVuZXIpOwotICAgICAgICB2YXIgdmlkZW9FbGVtZW50ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ3ZpZGVvJylbMF07Ci0gICAgICAgIHZpZGVvRWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpOwotICAgICAgICB2aWRlb0VsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCBjYW5wbGF5dGhyb3VnaExpc3Rl
bmVyKTsKLSAgICAgICAgdmlkZW9FbGVtZW50LnNyYyA9IGZpbmRNZWRpYUZpbGUoInZpZGVvIiwg
Ii4uLy4uLy4uL21lZGlhL2NvbnRlbnQvdGVzdCIpOwotICAgIDwvc2NyaXB0PgotPC9ib2R5Pgot
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92aWRl
by1jb250cm9scy1lbmxhcmdlZC1mdWxsc2NyZWVuLW5vbWV0YS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS92aWRlby1jb250
cm9scy1lbmxhcmdlZC1mdWxsc2NyZWVuLW5vbWV0YS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2
MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvdmlkZW8tY29u
dHJvbHMtZW5sYXJnZWQtZnVsbHNjcmVlbi1ub21ldGEtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzAsMCBAQAotVGVzdCB0aGF0IG1lZGlhIGNvbnRyb2xzIGFyZSByZW5kZXJl
ZCBhdCB0aGUgZW5sYXJnZWQgc2l6ZSBpbiBmdWxsc2NyZWVuIG1vZGUuCi0KLUVWRU5UKGNhbnBs
YXl0aHJvdWdoKQotVGhlIGFjdHVhbCBjb250cm9scyBoZWlnaHQgbWF0Y2hlcyB0aGUgZXhwZWN0
ZWQgY29udHJvbHMgaGVpZ2h0LiBPSwotRU5EIE9GIFRFU1QKLUVudGVyIEZ1bGxTY3JlZW4KSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEvdmlkZW8tY29udHJvbHMt
ZW5sYXJnZWQtZnVsbHNjcmVlbi1ub21ldGEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3ZpZGVvLWNvbnRyb2xzLWVubGFyZ2VkLWZ1bGxz
Y3JlZW4tbm9tZXRhLmh0bWwJKHJldmlzaW9uIDE2MTYwNikKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL2JsYWNrYmVycnkvbWVkaWEvdmlkZW8tY29udHJvbHMtZW5sYXJnZWQtZnVsbHNjcmVlbi1u
b21ldGEuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi08aHRtbD4KLSAgICA8
dGl0bGU+VGVzdCBvZiBIVE1MNSBNZWRpYSBDb250cm9scyBFbmxhcmdlbWVudCBpbiBGdWxsc2Ny
ZWVuIE1vZGU8L3RpdGxlPgotICAgIDxib2R5PgotICAgIDxwPlRlc3QgdGhhdCBtZWRpYSBjb250
cm9scyBhcmUgcmVuZGVyZWQgYXQgdGhlIGVubGFyZ2VkIHNpemUgaW4gZnVsbHNjcmVlbiBtb2Rl
LjwvcD4KLQotICAgIDxzY3JpcHQgc3JjPS4uLy4uLy4uL21lZGlhL3ZpZGVvLXRlc3QuanM+PC9z
Y3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Li4vLi4vLi4vbWVkaWEvbWVkaWEtZmlsZS5qcz48L3Nj
cmlwdD4KLSAgICA8c2NyaXB0IHNyYz0uLi8uLi8uLi9tZWRpYS9tZWRpYS1jb250cm9scy5qcz48
L3NjcmlwdD4KLSAgICA8c2NyaXB0PgotICAgICAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGV2
ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2dSZXN1bHQoZmFsc2UsICJDYXVnaHQgJ2Vy
cm9yJyBldmVudCwgdmlkZW8uZXJyb3IuY29kZSA9ICIgKyB0aGlzLmVycm9yLmNvZGUpOwotICAg
ICAgICAgICAgZW5kVGVzdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZnVsbFNj
cmVlbkxpc3RlbmVyKGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGUgdmlkZW8g
ZW50ZXJlZCBmdWxsc2NyZWVuIG1vZGUuCi0gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVu
dExpc3RlbmVyKCd3ZWJraXRmdWxsc2NyZWVuY2hhbmdlJywgZnVsbFNjcmVlbkxpc3RlbmVyKTsK
LSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc2NhbGUgb2YgQ1NTIHBpeGVscy4gSWYgQ1NT
IHBpeGVscyBhcmUgbm90IGJlaW5nCi0gICAgICAgICAgICAvLyBzY2FsZWQgYnkgYSBmYWN0b3Ig
b2YgYXQgbGVhc3QgdHdvLCB3ZSBleHBlY3QgdGhlIGZ1bGxzY3JlZW4KLSAgICAgICAgICAgIC8v
IGNvbnRyb2xzIHRvIGJlIHNob3duIGVubGFyZ2VkLiBDU1MgcGl4ZWxzIHdpbGwgb25seSBiZSBz
Y2FsZWQKLSAgICAgICAgICAgIC8vIHdoZW4gdmlld3BvcnQgd2lkdGggaXMgc2V0IHRvICJkZXZp
Y2Utd2lkdGgiIGJ5IGEgbWV0YSB0YWcgKHNlZQotICAgICAgICAgICAgLy8gYWJvdmUpIG9uIGRl
dmljZXMgd2l0aCBoaWdoIHNjcmVlbiBEUEkncyBzdWNoIGFzIEJCMTAgaGFuZC1oZWxkcy4KLSAg
ICAgICAgICAgIHZhciBleHBlY3RlZCA9IDY0OwotICAgICAgICAgICAgaWYgKHNjcmVlbi53aWR0
aCAvIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA+PSAyKQotICAgICAgICAg
ICAgICAgIGV4cGVjdGVkID0gMzI7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gbWVkaWFDb250
cm9sc0J1dHRvbkRpbWVuc2lvbnModmlkZW9FbGVtZW50LCAncGxheS1idXR0b24nKVsxXTsKLSAg
ICAgICAgICAgIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgbG9nUmVz
dWx0KHRydWUsICJUaGUgYWN0dWFsIGNvbnRyb2xzIGhlaWdodCBtYXRjaGVzIHRoZSBleHBlY3Rl
ZCBjb250cm9scyBoZWlnaHQuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bG9nUmVzdWx0KGZhbHNlLCAiVGhlIGFjdHVhbCBjb250cm9scyBoZWlnaHQgb2YgIiArIGFjdHVh
bCArICIgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGNvbnRyb2xzIGhlaWdodCBvZiAiICsg
ZXhwZWN0ZWQgKyAiLiIpOwotICAgICAgICAgICAgZW5kVGVzdCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gY2FucGxheXRocm91Z2hMaXN0ZW5lcihldmVudCkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29uc29sZVdyaXRlKCJFVkVOVChjYW5wbGF5dGhyb3VnaCkiKTsKLSAgICAg
ICAgICAgIC8vIENhbm5vdCBjYWxsIHRoaXMud2Via2l0RW50ZXJGdWxsU2NyZWVuKCkgZGlyZWN0
bHkgYmVjYXVzZSBpdAotICAgICAgICAgICAgLy8gb25seSB3b3JrcyB3aGVuIGluaXRpYXRlZCBi
eSBhIHVzZXIgZ2VzdHVyZS4KLSAgICAgICAgICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpCi0g
ICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93bigiYSIsIFsiYWx0S2V5Il0pOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbG9nUmVzdWx0KHRydWUsICJUaGlzIHRl
c3QgdXNlcyBldmVudFNlbmRlciBhbmQgbXVzdCBiZSBydW4gdW5kZXIgdGhlIERSVCBmcmFtZXdv
cmsgdG8gYmUgYXV0b21hdGljLiBPdGhlcndpc2UgeW91IG5lZWQgdG8gbWFudWFsbHkgcHJlc3Mg
RW50ZXIgRnVsbHNjcmVlbi4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGRvY3VtZW50LndyaXRlKCI8dmlkZW8gY29udHJvbHM+PC92aWRlbz4iKTsKLSAgICAgICAgZG9j
dW1lbnQud3JpdGUoIjxidXR0b24gb25jbGljaz0ndmlkZW9FbGVtZW50LndlYmtpdFJlcXVlc3RG
dWxsU2NyZWVuKCknIGFjY2Vzc0tleT0nYSc+RW50ZXIgRnVsbFNjcmVlbjwvYnV0dG9uPiIpOwot
ICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRmdWxsc2NyZWVuY2hhbmdl
JywgZnVsbFNjcmVlbkxpc3RlbmVyKTsKLSAgICAgICAgdmFyIHZpZGVvRWxlbWVudCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd2aWRlbycpWzBdOwotICAgICAgICB2aWRlb0VsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTsKLSAgICAgICAgdmlk
ZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgY2FucGxheXRocm91
Z2hMaXN0ZW5lcik7Ci0gICAgICAgIHZpZGVvRWxlbWVudC5zcmMgPSBmaW5kTWVkaWFGaWxlKCJ2
aWRlbyIsICIuLi8uLi8uLi9tZWRpYS9jb250ZW50L3Rlc3QiKTsKLSAgICA8L3NjcmlwdD4KLTwv
Ym9keT4KLTwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvcGx1
Z2lucy9zd2YtYXMtc3JjLW9mLWlmcmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9wbHVnaW5zL3N3Zi1hcy1zcmMtb2YtaWZyYW1l
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYxNjA2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
YmxhY2tiZXJyeS9wbHVnaW5zL3N3Zi1hcy1zcmMtb2YtaWZyYW1lLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi1QQVNTRUQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL2JsYWNrYmVycnkvcGx1Z2lucy9zd2YtYXMtc3JjLW9mLWlmcmFtZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvcGx1Z2lucy9zd2YtYXMtc3Jj
LW9mLWlmcmFtZS5odG1sCShyZXZpc2lvbiAxNjE2MDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ibGFja2JlcnJ5L3BsdWdpbnMvc3dmLWFzLXNyYy1vZi1pZnJhbWUuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMSw0NiArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPHRpdGxlPlRlc3QgdGhhdCBp
ZnJhbWUgd2l0aCBzcmMgc2V0IHRvIHN3ZiB1c2VzIHBsdWdpbiBkb2N1bWVudDwvdGl0bGU+Ci08
IS0tLSBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlICJtaXNzaW5nIHBsdWdpbiB0ZXh0IiBpcyBz
aG93biB3aGVuIHRoZSBGbGFzaFBsYXllciBwbHVnaW4gaXMgZGlzYWJsZWQuIC0tPgotPHNjcmlw
dD4KLWZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0gIGZyYW1lZG9jdW1lbnQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZnJhbWUnKS5jb250ZW50V2luZG93LmRvY3VtZW50OwotICBpbm5lcmh0bWwg
PSBmcmFtZWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uaW5uZXJIVE1M
OwotICBpZiAoaW5uZXJodG1sWzBdID09PSAnQycpIHsKLSAgICAvLyBUaGlzIGlzIHRoZSAnQycg
ZnJvbSB0aGUgQWN0aW9uU2NyaXB0IFNXQy4gVGhlIGNvbnRlbnRzIGFyZSBiZWluZwotICAgIC8v
IHJlbmRlcmVkIGFzIHRleHQuIEZhaWwgdGhlIHRlc3QuCi0gICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2NvbnNvbGUnKS50ZXh0Q29udGVudCA9ICJGQUlMRUQgZHVlIHRvIHBsdWdpbiByZW5k
ZXJlZCBhcyBnaWJiZXJpc2ggdGV4dCAoUFIyOTMwOTgpLiI7Ci0gIH0gZWxzZSB7Ci0gICAgdmFy
IGZsYXNocGxheWVyTG9hZGVkID0gZmFsc2U7Ci0gICAgZm9yIChpID0gMDsgaSA8IG5hdmlnYXRv
ci5wbHVnaW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgbmF2aWdhdG9y
LnBsdWdpbnNbaV0ubGVuZ3RoOyArK2opIHsKLSAgICAgICAgaWYgKG5hdmlnYXRvci5wbHVnaW5z
W2ldW2pdLnR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgewotICAgICAg
ICAgIGZsYXNocGxheWVyTG9hZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0K
LSAgICBpZiAoZmxhc2hwbGF5ZXJMb2FkZWQpIHsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjb25zb2xlJykudGV4dENvbnRlbnQgPSAiRkFJTEVEIGR1ZSB0byBGbGFzaFBsYXllciBw
bHVnaW4gZW5hYmxlZC4gUGxlYXNlIGRpc2FibGUgaXQuIjsKLSAgICB9IGVsc2UgaWYgKGZyYW1l
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2VtYmVkJylbMF0pewotICAgICAgLy8gVGhl
cmUgaXMgYW4gZW1iZWQgZWxlbWVudCBpbnN0ZWFkIG9mIGdpYmJlcmlzaCB0ZXh0LiBUaGlzIGlz
IHdoYXQgd2UKLSAgICAgIC8vIHdhbnQgYW5kIGluZGljYXRlcyB0aGF0IGEgcGx1Z2luIGRvY3Vt
ZW50IHdhcyBjcmVhdGVkIGluc3RlYWQgb2YgYW4KLSAgICAgIC8vIEhUTUwgZG9jdW1lbnQuCi0g
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLnRleHRDb250ZW50ID0gIlBB
U1NFRCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25z
b2xlJykudGV4dENvbnRlbnQgPSAiRkFJTEVEIGZvciBhbiB1bmtub3duIHJlc29uLiI7Ci0gICAg
fQotICB9Ci0KLX0KLTwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keSBvbmxvYWQ9InJ1blRlc3Qo
KTsiPgotCi08aWZyYW1lIGlkPSJmcmFtZSIgc3JjPSIuLi8uLi8uLi9wbHVnaW5zL3Jlc291cmNl
cy9zaW1wbGVfYmxhbmsuc3dmIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+Ci08L2lmcmFtZT4K
LQotPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Ci08L2JvZHk+Ci0KLTwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220872</attachid>
            <date>2014-01-10 12:02:29 -0800</date>
            <delta_ts>2014-01-10 12:36:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126715-20140110120228.patch</filename>
            <type>text/plain</type>
            <size>9316</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTViZWI5ZmZhZGU0ODE1
OWNhOTg4NzU0ZjNiMjI5M2E3NDIwZWVkZC4uY2E2Njk5NWVhNmUyYmVhNTg5NDhkNjQ1Yjg5MDJh
NDE5MTZkMDE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE0LTAxLTEwICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB0aGUg
QmxhY2tCZXJyeSBwb3J0IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNjcxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9uYXZpZ2F0b3Jjb250ZW50dXRpbHMvTmF2aWdh
dG9yQ29udGVudFV0aWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRQcm90b2NvbEhhbmRs
ZXJXaGl0ZWxpc3QpOgorICAgICAgICAqIFVzZUpTQy5jbWFrZToKKyAgICAgICAgKiBiaW5kaW5n
cy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6UnVudGltZUVuYWJsZWRGZWF0dXJlcyk6CisgICAgICAg
ICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29u
dHJvbGxlcjo6R0NDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6
Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIu
aDoKKwogMjAxNC0wMS0wOSAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAg
ICAgW2lPU10gVXBzdHJlYW0gaU9TIGNoYW5nZXMgdG8gTWlncmF0ZUhlYWRlcnMubWFrZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IGM0MDMwMjBlMWNjZGY4MGRmMGNlNDYyN2UzYTg5NzZjM2ZmN2Q1MTEuLjdiOTQ1
NTUwYzlmOGFjNjliNTc4YzNmM2Q2Mzk1MDg0Njk4ZDI0YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMiBAQAorMjAxNC0wMS0xMCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgdGhlIEJsYWNrQmVycnkgcG9ydCBmcm9tIHRydW5rCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY3MTUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvZ2Vu
ZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsOgorCiAyMDE0LTAxLTEwICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpyZWNlaXZlZENhbmNlbGxhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9uYXZpZ2F0b3Jjb250ZW50dXRpbHMvTmF2aWdhdG9yQ29udGVudFV0
aWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05h
dmlnYXRvckNvbnRlbnRVdGlscy5jcHAKaW5kZXggZjNiMWRiODY5NjI4YzBkMTJlNDk4YjQ0MmVl
MjBjN2IxNTdkZDJmZC4uYjVmYjAyNjZmYThkMTczNmU1MTQ0MmZjZGIyMWE2NDA0ZTQ5N2I3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9uYXZpZ2F0b3Jjb250ZW50dXRpbHMv
TmF2aWdhdG9yQ29udGVudFV0aWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25h
dmlnYXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuY3BwCkBAIC00Myw3ICs0
Myw2IEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4qIHByb3RvY29sV2hpdGVsaXN0Owogc3RhdGlj
IHZvaWQgaW5pdFByb3RvY29sSGFuZGxlcldoaXRlbGlzdCgpCiB7CiAgICAgcHJvdG9jb2xXaGl0
ZWxpc3QgPSBuZXcgSGFzaFNldDxTdHJpbmc+OwotI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQog
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcm90b2NvbHNbXSA9IHsKICAgICAgICAgImJpdGNvaW4i
LAogICAgICAgICAiZ2VvIiwKQEAgLTY3LDcgKzY2LDYgQEAgc3RhdGljIHZvaWQgaW5pdFByb3Rv
Y29sSGFuZGxlcldoaXRlbGlzdCgpCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IFdURl9BUlJBWV9MRU5HVEgocHJvdG9jb2xzKTsgKytpKQogICAgICAgICBwcm90b2NvbFdoaXRl
bGlzdC0+YWRkKHByb3RvY29sc1tpXSk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGJvb2wgdmVyaWZ5
Q3VzdG9tSGFuZGxlclVSTChjb25zdCBTdHJpbmcmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgdXJs
LCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1VzZUpTQy5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQppbmRleCAxMDVhZjg4MjcxMThlMmY3
ZjYyY2JlMjcyNDk0ZjdjZWVjZjNhMjc1Li42ZjU4MDFmMjFhNGFjYTU1YmQ0MjA3YmRlOGEzMGU1
MjZmNjkyMzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Vc2VKU0MuY21ha2UKKysrIGIv
U291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCkBAIC0xMSwxNiArMTEsNiBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX0lETF9JTkNMVURFUwogICAgIGJpbmRpbmdzL2pzCiApCiAKLWlmIChQT1JUIE1B
VENIRVMgIkJsYWNrQmVycnkiKQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfSURMX0lOQ0xVREVT
Ci0gICAgICAgIHRlc3RpbmcvanMKLSAgICApCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JRExf
RklMRVMKLSAgICAgICAgdGVzdGluZy9JbnRlcm5hbHMuaWRsCi0gICAgICAgIHRlc3RpbmcvSW50
ZXJuYWxTZXR0aW5ncy5pZGwKLSAgICApCi1lbmRpZiAoKQotCiBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAogICAgIGJpbmRpbmdzL2pz
L0NhbGxiYWNrRnVuY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAppbmRleCBmYWJhYzYyZTRh
ODllNDExMWU4OWRlYzM4NDk1YzRkOTg4ZmY2ZmFmLi44MmI5ODg2M2FkN2FhNGI2NDJiZWQ5YThj
NDg1YTMyMDU2MGRjMmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5l
cmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKQEAgLTcxLDExICs3MSw3IEBA
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMoKQogICAgICwg
bV9pc0phdmFTY3JpcHRJMThOQVBJRW5hYmxlZChmYWxzZSkKICNlbmRpZgogI2lmIEVOQUJMRShW
SURFT19UUkFDSykKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oRUZMKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKSB8fCBQTEFURk9STShXSU4pCiAgICAgLCBt
X2lzVmlkZW9UcmFja0VuYWJsZWQodHJ1ZSkKLSNlbHNlCi0gICAgLCBtX2lzVmlkZW9UcmFja0Vu
YWJsZWQoZmFsc2UpCi0jZW5kaWYKICNlbmRpZgogI2lmIEVOQUJMRShTSEFET1dfRE9NKQogICAg
ICwgbV9pc1NoYWRvd0RPTUVuYWJsZWQoZmFsc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvR0NDb250cm9sbGVyLmNwcAppbmRleCBmOTEwZGI2YTY4OTY5YTgwMzg0ZmZlNGYyZGVhMTcy
OGMxZGExOTQzLi5kYjY5MDFlNGEyMDk0ZjZhYjAxYjQzNDg1MzAzNzNlMTE5MTliNmZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKQEAgLTQ5LDcgKzQ5
LDcgQEAgR0NDb250cm9sbGVyJiBnY0NvbnRyb2xsZXIoKQogfQogCiBHQ0NvbnRyb2xsZXI6OkdD
Q29udHJvbGxlcigpCi0jaWYgIVVTRShDRikgJiYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaWYg
IVVTRShDRikKICAgICA6IG1fR0NUaW1lcih0aGlzLCAmR0NDb250cm9sbGVyOjpnY1RpbWVyRmly
ZWQpCiAjZW5kaWYKIHsKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJh
Z2VDb2xsZWN0U29vbigpCiAgICAgLy8gc3lzdGVtcyB3aXRoIENvcmVGb3VuZGF0aW9uLiBJZiBh
bmQgd2hlbiB0aGUgbm90aW9uIG9mIGEgcnVuIGxvb3AgaXMgcHVzaGVkIAogICAgIC8vIGRvd24g
aW50byBXVEYgc28gdGhhdCBtb3JlIHBsYXRmb3JtcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQs
IHdlIHdpbGwgYmUgCiAgICAgLy8gYWJsZSB0byB1c2UgcmVwb3J0QWJhbmRvbmVkT2JqZWN0R3Jh
cGggb24gbW9yZSBwbGF0Zm9ybXMuCi0jaWYgVVNFKENGKSB8fCBQTEFURk9STShCTEFDS0JFUlJZ
KQorI2lmIFVTRShDRikKICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKSk7CiAgICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAucmVwb3J0QWJhbmRvbmVk
T2JqZWN0R3JhcGgoKTsKICNlbHNlCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgR0NDb250cm9sbGVy
OjpnYXJiYWdlQ29sbGVjdFNvb24oKQogI2VuZGlmCiB9CiAKLSNpZiAhVVNFKENGKSAmJiAhUExB
VEZPUk0oQkxBQ0tCRVJSWSkKKyNpZiAhVVNFKENGKQogdm9pZCBHQ0NvbnRyb2xsZXI6OmdjVGlt
ZXJGaXJlZChUaW1lcjxHQ0NvbnRyb2xsZXI+KikKIHsKICAgICBjb2xsZWN0KDApOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuaAppbmRleCBmZDIzMmIwODIxMTZkOTE0
M2E3ZDY1Mzg2NWI2ZDVmZDJkODZiYjBlLi4xOWM5OGY5YzEyOWVhOWY0NWVjYjg3ZmNhZDE5Mjgx
Yjk4OGE5YmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuaApA
QCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBHQ0NvbnRyb2xsZXJfaAogI2RlZmluZSBHQ0NvbnRy
b2xsZXJfaAogCi0jaWYgVVNFKENGKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQorI2lmIFVTRShD
RikKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2Vsc2UKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHBy
aXZhdGU6CiAgICAgICAgIEdDQ29udHJvbGxlcigpOyAvLyBVc2UgZ2NDb250cm9sbGVyKCkgaW5z
dGVhZAogCi0jaWYgIVVTRShDRikgJiYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaWYgIVVTRShD
RikKICAgICAgICAgdm9pZCBnY1RpbWVyRmlyZWQoVGltZXI8R0NDb250cm9sbGVyPiopOwogICAg
ICAgICBUaW1lcjxHQ0NvbnRyb2xsZXI+IG1fR0NUaW1lcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgYi9T
b3VyY2UvV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbAppbmRl
eCBkYmE1ZWFkMjM1MzA2NmJmZWM2MjQ1NTE5ZDc2YmE5NmJhZTBhNzAwLi43MzY3NWIzNTk4ZTYz
NTk2MmE5NjUwMTY4MWQ0NzY4NDZlMDJkODA5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
Y3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbApAQCAtMzUsNyArMzUsNyBA
QCB1c2UgRmlsZTo6U3BlYzo6RnVuY3Rpb25zOwogCiBteSAkc3JjUm9vdCA9IHJlYWxwYXRoKEZp
bGU6OlNwZWMtPmNhdGZpbGUoZGlybmFtZShhYnNfcGF0aCgkMCkpLCAiLi4vLi4iKSk7CiBteSAk
aW5jRnJvbVJvb3QgPSBhYnNfcGF0aCgkQVJHVlswXSk7Ci1teSBAcGxhdGZvcm1QcmVmaXhlcyA9
ICgiYmxhY2tiZXJyeSIsICJjZiIsICJDb2NvYSIsICJDb29yZGluYXRlZEdyYXBoaWNzIiwgImN1
cmwiLCAiZWZsIiwgImd0ayIsICJtYWMiLCAic291cCIsICJ3aW4iKTsKK215IEBwbGF0Zm9ybVBy
ZWZpeGVzID0gKCJjZiIsICJDb2NvYSIsICJDb29yZGluYXRlZEdyYXBoaWNzIiwgImN1cmwiLCAi
ZWZsIiwgImd0ayIsICJtYWMiLCAic291cCIsICJ3aW4iKTsKIG15IEBmcmFtZXdvcmtzID0gKCJK
YXZhU2NyaXB0Q29yZSIsICJXZWJDb3JlIiwgIldlYktpdDIiKTsKIG15IEBza2lwcGVkUHJlZml4
ZXM7CiBteSBAZnJhbWV3b3JrSGVhZGVyczsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZDdiYTdhYzY2NjM2ZDlhNWE3YjM2MWY0MDgyNzBiOTBk
YzY4NjFlLi5iYjFmMTkxZDdmMWQ5ZWZkOTQwMDQ3YTYwNmY5YTNhZTIzOGZiZDliIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTQtMDEtMTAgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVtb3ZlIHRoZSBCbGFja0JlcnJ5IHBvcnQgZnJvbSB0cnVuaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NzE1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0OgorCiAyMDE0LTAxLTA5ICBCZW5qYW1pbiBQb3VsYWlu
ICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUgQmxhY2tCZXJyeSBm
aWxlcyBvdXRzaWRlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NvbmZpZy93YXRjaGxpc3QgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
b25maWcvd2F0Y2hsaXN0CmluZGV4IDIzOWRhYmRjYzRlMzdiMGE3NmIxM2I1OTJmNDFjNjkwNzFk
YTUwZTYuLjliNjM3ZThjNTI5MmM5NzY2YjU3ZDQ5NzE0MDk1MTcwNzk4OGZiNzMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy93YXRjaGxpc3QKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL3dhdGNobGlzdApAQCAtMjgzLDcg
KzI4Myw2IEBACiAgICAgICAgICJBcHBsZU1hY1B1YmxpY0FwaSI6IFsgInRpbW90aHlAYXBwbGUu
Y29tIiBdLAogICAgICAgICAiQmF0dGVyeSI6IFsgImd5dXlvdW5nLmtpbUB3ZWJraXQub3JnIiwg
ImRjaHJpc0BnbWFpbC5jb20iIF0sCiAgICAgICAgICJCaW5kaW5nc1NjcmlwdHMiOiBbICJkY2hy
aXNAZ21haWwuY29tIiwgImNnYXJjaWFAaWdhbGlhLmNvbSIgXSwKLSAgICAgICAgIkJsYWNrQmVy
cnkiOiBbICJtaWZlbnRvbkByaW0uY29tIiwgInJ3bGJ1aXNAZ21haWwuY29tIiwgInRvbmlraXRv
b0B3ZWJraXQub3JnIiBdLAogICAgICAgICAiQ2Fpcm8iOiBbICJkb21pbmlrLnJvdHRzY2hlc0Bp
bnRlbC5jb20iIF0sCiAgICAgICAgICJDTWFrZSI6IFsgInJha3Vjb0B3ZWJraXQub3JnIiwgImd5
dXlvdW5nLmtpbUB3ZWJraXQub3JnIiwgInJ5dWFuLmNob2lAZ21haWwuY29tIiBdLAogICAgICAg
ICAiQ29vcmRpbmF0ZWRHcmFwaGljcyIgOiBbICJub2FtQHdlYmtpdC5vcmciLCAiemVub0B3ZWJr
aXQub3JnIiwgImNtYXJjZWxvQHdlYmtpdC5vcmciLCAibHVpekB3ZWJraXQub3JnIiwgInJ5dWFu
LmNob2lAZ21haWwuY29tIiBdLApkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxp
c3RzLnR4dAppbmRleCAzMzliYmY4NDRkNWNiMGQ2OWI1ODY3YTY0NTZlMjQzMTU3YzlmYmMzLi4z
MTI5MGExN2JiNDEwYzhhZGFjM2RjYzNmMTkwMDQ1OGRiMjk5Y2UzIDEwMDY0NAotLS0gYS9DTWFr
ZUxpc3RzLnR4dAorKysgYi9DTWFrZUxpc3RzLnR4dApAQCAtNDAsNyArNDAsNyBAQCBpbmNsdWRl
KFdlYktpdEZlYXR1cmVzKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBEZXRlcm1pbmUgd2hp
Y2ggcG9ydCB3aWxsIGJlIGJ1aWx0CiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zZXQoQUxMX1BP
UlRTIEVmbCBXaW5DRSBCbGFja0JlcnJ5IEdUSyBOaXgpCitzZXQoQUxMX1BPUlRTIEVmbCBXaW5D
RSBHVEsgTml4KQogc2V0KFBPUlQgIk5PUE9SVCIgQ0FDSEUgU1RSSU5HICJjaG9vc2Ugd2hpY2gg
V2ViS2l0IHBvcnQgdG8gYnVpbGQgKG9uZSBvZiAke0FMTF9QT1JUU30pIikKIAogbGlzdChGSU5E
IEFMTF9QT1JUUyAke1BPUlR9IFJFVCkKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxv
ZwppbmRleCAxM2RkOWNiZWJiYzQ3YWExNDk2YWJkODlkZThhYzdhNWRmYjRkNjY3Li40ODA3M2Mz
ZDRiOTc1NDliODVlMzZhOWNhY2Y3MTFiYTEwZjdkMWQyIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cK
KysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDEtMTAgIEJlbmphbWluIFBv
dWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBCbGFja0Jl
cnJ5IHBvcnQgZnJvbSB0cnVuaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI2NzE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKwogMjAxNC0wMS0wOSAgQmVuamFtaW4gUG91
bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIEJsYWNrQmVy
cnkgZmlsZXMgb3V0c2lkZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220876</attachid>
            <date>2014-01-10 12:27:52 -0800</date>
            <delta_ts>2014-01-10 12:37:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126715-20140110122751.patch</filename>
            <type>text/plain</type>
            <size>29282</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTViZWI5ZmZhZGU0ODE1
OWNhOTg4NzU0ZjNiMjI5M2E3NDIwZWVkZC4uZTNlZGEyYjdlNDI0ZDUxNWY2NzU0NTY2YWFhYmI5
ZGNmODc0ODZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE0LTAxLTEwICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB0aGUg
QmxhY2tCZXJyeSBwb3J0IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNjcxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogZG9tL1RvdWNoRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VG91Y2hFdmVudDo6VG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50
Ojppbml0VG91Y2hFdmVudCk6CisgICAgICAgICogZG9tL1RvdWNoRXZlbnQuaDoKKyAgICAgICAg
KiBkb20vVmlld3BvcnRBcmd1bWVudHMuY3BwOgorICAgICAgICAqIGRvbS9WaWV3cG9ydEFyZ3Vt
ZW50cy5oOgorICAgICAgICAqIGhpc3RvcnkvSGlzdG9yeUl0ZW0uaDoKKyAgICAgICAgKiBsb2Fk
ZXIvUGluZ0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQaW5nTG9hZGVyOjpsb2FkSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UGluZ0xvYWRlcjo6c2VuZFBpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UGluZ0xvYWRlcjo6c2VuZFZpb2xhdGlvblJlcG9ydCk6CisgICAgICAgICogbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNyZWF0ZVJlc291cmNlSGFuZGxlKToKKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkUmVzb3VyY2U6OmxvYWQpOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25Mb2FkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SWNvbkxvYWRlcjo6c3RhcnRMb2FkaW5nKToKKyAgICAgICAg
KiBwYWdlL05hdmlnYXRvckJhc2UuY3BwOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHBs
YXRmb3JtL0N1cnNvci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vQ3Vyc29yLmg6CisgICAgICAg
IChXZWJDb3JlOjpDdXJzb3I6OkN1cnNvcik6CisgICAgICAgICogcGxhdGZvcm0vRHJhZ0RhdGEu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2UuaDoKKyAgICAgICAgKiBwbHVnaW5zL1Bs
dWdpbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpkZWZh
dWx0UGx1Z2luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6
OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6
cGFpbnRzSW50b1dpbmRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNob3VsZFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnRlcm5hbHM6OmdldEN1cnJlbnRDdXJzb3JJbmZvKToKKyAgICAgICAgKiB3b3JrZXJz
L0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZFdvcmtlclNjcmlwdExvYWRlcjo6bG9hZCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpjcmVhdGUpOgorICAgICAgICAqIHdvcmtl
cnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyR2xvYmFs
U2NvcGU6OmltcG9ydFNjcmlwdHMpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6Y3JlYXRlUmVz
b3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oOgor
ICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdCk6CisKIDIwMTQtMDEtMDkgIEFuZHkgRXN0ZXMgIDxh
ZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFVwc3RyZWFtIGlPUyBjaGFuZ2VzIHRv
IE1pZ3JhdGVIZWFkZXJzLm1ha2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjNDAzMDIwZTFjY2RmODBkZjBjZTQ2
MjdlM2E4OTc2YzNmZjdkNTExLi5hMGJkNGQ1ZWJmYzhhNTNkOTk2MWQwM2Q5OWQyY2ZhODhhYTcy
Y2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDEtMTAgIEJlbmphbWluIFBv
dWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBCbGFja0Jl
cnJ5IHBvcnQgZnJvbSB0cnVuaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI2NzE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c2V0Q3Vyc29yKToKKwogMjAx
NC0wMS0xMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgSW1wbGVtZW50IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cmVjZWl2ZWRDYW5jZWxsYXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmNwcAppbmRleCAwN2RjNmI1MzNjOTM4MDgzOWI0ZDA4
MjQxN2RjODNmNWZmNjJhNjg0Li5hY2IyZTRkZWViYzk3ZWM0YzNhZmRhMTYwMWY2NmNhN2FlMzJj
OGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuY3BwCkBAIC01MiwxMCArNTIsNiBAQCBUb3Vj
aEV2ZW50OjpUb3VjaEV2ZW50KFRvdWNoTGlzdCogdG91Y2hlcywgVG91Y2hMaXN0KiB0YXJnZXRU
b3VjaGVzLAogICAgICwgbV90b3VjaGVzKHRvdWNoZXMpCiAgICAgLCBtX3RhcmdldFRvdWNoZXMo
dGFyZ2V0VG91Y2hlcykKICAgICAsIG1fY2hhbmdlZFRvdWNoZXMoY2hhbmdlZFRvdWNoZXMpCi0j
aWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICAsIG1fdG91Y2hIb2xkKGZhbHNlKQotICAgICwg
bV9kb3VibGVUYXAoZmFsc2UpCi0jZW5kaWYKIHsKIH0KIApAQCAtODIsMTEgKzc4LDYgQEAgdm9p
ZCBUb3VjaEV2ZW50Ojppbml0VG91Y2hFdmVudChUb3VjaExpc3QqIHRvdWNoZXMsIFRvdWNoTGlz
dCogdGFyZ2V0VG91Y2hlcywKICAgICBtX3NoaWZ0S2V5ID0gc2hpZnRLZXk7CiAgICAgbV9tZXRh
S2V5ID0gbWV0YUtleTsKICAgICBpbml0Q29vcmRpbmF0ZXMoSW50UG9pbnQoY2xpZW50WCwgY2xp
ZW50WSkpOwotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgbV9kb3VibGVUYXAgPSBmYWxz
ZTsKLSAgICBtX3RvdWNoSG9sZCA9IGZhbHNlOwotI2VuZGlmCi0KIH0KIAogRXZlbnRJbnRlcmZh
Y2UgVG91Y2hFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50
LmgKaW5kZXggNThiMGYxZTI3MzYyNTdiNjZjYmM5NGZiNjE2ODBlMzA3YTYyZjYzYS4uOTEzZmVl
OTU1ZDg5YjBiZTM5MzdhYTMyNGI0NjVjYmY5ODBmMzc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1RvdWNoRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVu
dC5oCkBAIC02NywxMiArNjcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUYXJnZXRUb3VjaGVz
KFBhc3NSZWZQdHI8VG91Y2hMaXN0PiB0YXJnZXRUb3VjaGVzKSB7IG1fdGFyZ2V0VG91Y2hlcyA9
IHRhcmdldFRvdWNoZXM7IH0KICAgICB2b2lkIHNldENoYW5nZWRUb3VjaGVzKFBhc3NSZWZQdHI8
VG91Y2hMaXN0PiBjaGFuZ2VkVG91Y2hlcykgeyBtX2NoYW5nZWRUb3VjaGVzID0gY2hhbmdlZFRv
dWNoZXM7IH0KIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgdm9pZCBzZXREb3VibGVU
YXAoYm9vbCBkb3VibGVUYXApIHsgbV9kb3VibGVUYXAgPSBkb3VibGVUYXA7IH0KLSAgICBib29s
IGlzRG91YmxlVGFwKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVUYXA7IH0KLSAgICB2b2lkIHNl
dFRvdWNoSG9sZChib29sIHRvdWNoSG9sZCkgeyBtX3RvdWNoSG9sZCA9IHRvdWNoSG9sZDsgfQot
ICAgIGJvb2wgaXNUb3VjaEhvbGQoKSBjb25zdCB7IHJldHVybiBtX3RvdWNoSG9sZDsgfQotI2Vu
ZGlmCiAgICAgdmlydHVhbCBib29sIGlzVG91Y2hFdmVudCgpIGNvbnN0IE9WRVJSSURFOwogCiAg
ICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0OwpAQCAtODgs
MTAgKzgyLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8VG91Y2hMaXN0PiBtX3RvdWNoZXM7CiAg
ICAgUmVmUHRyPFRvdWNoTGlzdD4gbV90YXJnZXRUb3VjaGVzOwogICAgIFJlZlB0cjxUb3VjaExp
c3Q+IG1fY2hhbmdlZFRvdWNoZXM7Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICBib29s
IG1fdG91Y2hIb2xkOwotICAgIGJvb2wgbV9kb3VibGVUYXA7Ci0jZW5kaWYKIH07CiAKIGlubGlu
ZSBUb3VjaEV2ZW50KiB0b1RvdWNoRXZlbnQoRXZlbnQqIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9WaWV3cG9ydEFyZ3VtZW50cy5jcHAKaW5kZXggNjBmMzlkMDI5YzAzYmI4MGQ4YWI2YTQwMWMw
YmUyM2YwMzE0MzcxZi4uMmM5NTM5ZGFhNDdkMTViNDBmYzk0NjNkMzg4OTk3OTM0NTM5NjA1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3BwCkBAIC00Myw3ICs0Myw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8
IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShHVEspCiBjb25zdCBmbG9hdCBWaWV3cG9ydEFy
Z3VtZW50czo6ZGVwcmVjYXRlZFRhcmdldERQSSA9IDE2MDsKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oCmluZGV4IDFmYzgxOTRmYTMzNWQyYjkyMWI1ZmYyY2E4
MGNhYTJkYjM1MDBlNzAuLmU0NWUzY2ZkMzhlM2YxNWU4NjFiYzQ4NGU2OGUxYzNiZDg5Yzg2NmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oCkBAIC0xNDIsNyArMTQyLDcg
QEAgc3RydWN0IFZpZXdwb3J0QXJndW1lbnRzIHsKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOwogICAgIH0KIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8IFBMQVRGT1JNKEdU
SykKKyNpZiBQTEFURk9STShHVEspCiAgICAgLy8gRklYTUU6IFdlJ3JlIGdvaW5nIHRvIGtlZXAg
dGhpcyBjb25zdGFudCBhcm91bmQgdW50aWwgYWxsIGVtYmVkZGVycwogICAgIC8vIHJlZmFjdG9y
IHRoZWlyIGNvZGUgdG8gbm8gbG9uZ2VyIG5lZWQgaXQuCiAgICAgc3RhdGljIGNvbnN0IGZsb2F0
IGRlcHJlY2F0ZWRUYXJnZXREUEk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L0hpc3RvcnlJdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgKaW5k
ZXggYjYyMDA3YTQ2NGRhNzc0OWRhZTgyMDk1ZTc2NGM0Njc3NTBlMDQ5NS4uOGVkYjY3MTU1NjI0
MmUyZDNhN2MxMzVjMjQ1MGFlY2UwYTI5MmEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aGlzdG9yeS9IaXN0b3J5SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9y
eUl0ZW0uaApAQCAtNDMsMTAgKzQzLDYgQEAKIHR5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0KiBp
ZDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSNpbmNsdWRlICJIaXN0b3J5
SXRlbVZpZXdTdGF0ZS5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q2FjaGVkUGFnZTsKQEAgLTE5OSwxMCArMTk1LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VHJh
bnNpZW50UHJvcGVydHkoY29uc3QgU3RyaW5nJiwgaWQpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShCTEFDS0JFUlJZKQotICAgIEhpc3RvcnlJdGVtVmlld1N0YXRlJiB2aWV3U3RhdGUoKSB7IHJl
dHVybiBtX3ZpZXdTdGF0ZTsgfQotI2VuZGlmCi0KICNpZm5kZWYgTkRFQlVHCiAgICAgaW50IHNo
b3dUcmVlKCkgY29uc3Q7CiAgICAgaW50IHNob3dUcmVlV2l0aEluZGVudCh1bnNpZ25lZCBpbmRl
bnRMZXZlbCkgY29uc3Q7CkBAIC0zMTAsMTAgKzMwMiw2IEBAIHByaXZhdGU6CiAgICAgUmV0YWlu
UHRyPGlkPiBtX3ZpZXdTdGF0ZTsKICAgICBPd25QdHI8SGFzaE1hcDxTdHJpbmcsIFJldGFpblB0
cjxpZD4+PiBtX3RyYW5zaWVudFByb3BlcnRpZXM7CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKEJM
QUNLQkVSUlkpCi0gICAgSGlzdG9yeUl0ZW1WaWV3U3RhdGUgbV92aWV3U3RhdGU7Ci0jZW5kaWYK
IH07IC8vY2xhc3MgSGlzdG9yeUl0ZW0KIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUGluZ0xvYWRlci5jcHAKaW5kZXggYjVjYzdmMjc2ZTYwZjgwNjU4YzlmY2EwYzgy
OTg3MTM2ZjA4MjBlOC4uYTYxM2VkMTM0MTNkNGRkNzczY2NjMmViZDQ5MzE1ODBmYmFjNGU3MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9QaW5nTG9hZGVyLmNwcApAQCAtNTcsOSArNTcsNiBAQCB2b2lk
IFBpbmdMb2FkZXI6OmxvYWRJbWFnZShGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQogICAg
IH0KIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0jaWYgUExBVEZPUk0oQkxB
Q0tCRVJSWSkKLSAgICByZXF1ZXN0LnNldFRhcmdldFR5cGUoUmVzb3VyY2VSZXF1ZXN0OjpUYXJn
ZXRJc0ltYWdlKTsKLSNlbmRpZgogICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJDYWNo
ZS1Db250cm9sIiwgIm1heC1hZ2U9MCIpOwogICAgIFN0cmluZyByZWZlcnJlciA9IFNlY3VyaXR5
UG9saWN5OjpnZW5lcmF0ZVJlZmVycmVySGVhZGVyKGZyYW1lLT5kb2N1bWVudCgpLT5yZWZlcnJl
clBvbGljeSgpLCByZXF1ZXN0LnVybCgpLCBmcmFtZS0+bG9hZGVyKCkub3V0Z29pbmdSZWZlcnJl
cigpKTsKICAgICBpZiAoIXJlZmVycmVyLmlzRW1wdHkoKSkKQEAgLTczLDkgKzcwLDYgQEAgdm9p
ZCBQaW5nTG9hZGVyOjpsb2FkSW1hZ2UoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKIHZv
aWQgUGluZ0xvYWRlcjo6c2VuZFBpbmcoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHBpbmdVUkws
IGNvbnN0IFVSTCYgZGVzdGluYXRpb25VUkwpCiB7CiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3QocGluZ1VSTCk7Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICByZXF1ZXN0LnNldFRh
cmdldFR5cGUoUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1N1YnJlc291cmNlKTsKLSNlbmRpZgog
ICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiUE9TVCIpOwogICAgIHJlcXVlc3Quc2V0SFRUUENv
bnRlbnRUeXBlKCJ0ZXh0L3BpbmciKTsKICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KEZvcm1EYXRh
OjpjcmVhdGUoIlBJTkciKSk7CkBAIC0xMDEsOSArOTUsNiBAQCB2b2lkIFBpbmdMb2FkZXI6OnNl
bmRQaW5nKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiBwaW5nVVJMLCBjb25zdCBVUkwmIGRlc3Rp
bmF0aQogdm9pZCBQaW5nTG9hZGVyOjpzZW5kVmlvbGF0aW9uUmVwb3J0KEZyYW1lKiBmcmFtZSwg
Y29uc3QgVVJMJiByZXBvcnRVUkwsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IHJlcG9ydCkKIHsKICAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChyZXBvcnRVUkwpOwotI2lmIFBMQVRGT1JNKEJMQUNL
QkVSUlkpCi0gICAgcmVxdWVzdC5zZXRUYXJnZXRUeXBlKFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0
SXNTdWJyZXNvdXJjZSk7Ci0jZW5kaWYKICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIlBPU1Qi
KTsKICAgICByZXF1ZXN0LnNldEhUVFBDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIpOwog
ICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkocmVwb3J0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKaW5kZXggYWQw
MTRhNzZkYzZmNTI3Njc5YzE3NTcxYjNlMDUwNmQ4OWQxMjI4My4uYWE3NTMyZjM2ZDJhZWMyNDM2
NTlhMDQxNzM1YmIwNGU5YWMwNDM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKQEAgLTQ5MiwyNCArNDky
LDYgQEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gQXBwbGljYXRpb25DYWNoZUdyb3VwOjpj
cmVhdGVSZXNvdXJjZUhhbmRsZShjb25zdCBVUkwKICAgICAgICAgfQogICAgIH0KIAotI2lmIFBM
QVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRUeXBlIHRhcmdl
dCA9IFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNVbnNwZWNpZmllZDsKLSAgICBpZiAobmV3ZXN0
Q2FjaGVkUmVzb3VyY2UpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSA9IG5ld2Vz
dENhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCk7Ci0gICAgICAgIGlmICghbWlt
ZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgdGFyZ2V0ID0gUmVzb3VyY2VSZXF1ZXN0Ojp0
YXJnZXRUeXBlRnJvbU1pbWVUeXBlKG1pbWVUeXBlKTsKLSAgICB9Ci0gICAgaWYgKHRhcmdldCA9
PSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzVW5zcGVjaWZpZWQpIHsKLSAgICAgICAgU3RyaW5n
IG1pbWVUeXBlOwotICAgICAgICBpZiAodXJsLnByb3RvY29sSXNEYXRhKCkpCi0gICAgICAgICAg
ICBtaW1lVHlwZSA9IG1pbWVUeXBlRnJvbURhdGFVUkwodXJsKTsKLSAgICAgICAgaWYgKCFtaW1l
VHlwZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0YXJnZXQgPSBSZXNvdXJjZVJlcXVlc3Q6OnRh
cmdldFR5cGVGcm9tTWltZVR5cGUobWltZVR5cGUpOwotICAgIH0KLQotICAgIHJlcXVlc3Quc2V0
VGFyZ2V0VHlwZSh0YXJnZXQpOwotI2VuZGlmCi0KICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+
IGhhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUobV9mcmFtZS0+bG9hZGVyKCkubmV0d29y
a2luZ0NvbnRleHQoKSwgcmVxdWVzdCwgdGhpcywgZmFsc2UsIHRydWUpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCiAgICAgLy8gQmVjYXVzZSB3aWxsU2VuZFJlcXVlc3Qgb25seSBnZXRzIGNhbGxl
ZCBkdXJpbmcgcmVkaXJlY3RzLCB3ZSBpbml0aWFsaXplCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAppbmRleCAwOTRlNzMyNzNkMDNlZjRlYWYxZDRh
ZDNlMjIzNmIzY2NkNjNiNDMwLi4zOWRkODM5Yjc2NGNiY2IxNWYxNmIzNTEwNTU2YzM1OGNlZDA1
ODVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5j
cHAKQEAgLTE0NCw0OCArMTQ0LDYgQEAgc3RhdGljIFJlc291cmNlTG9hZFByaW9yaXR5IGRlZmF1
bHRQcmlvcml0eUZvclJlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZQogICAgIHJldHVy
biBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdzsKIH0KIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkp
Ci1zdGF0aWMgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRUeXBlIGNhY2hlZFJlc291cmNlVHlwZVRv
VGFyZ2V0VHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKLSAgICAgICAgcmV0
dXJuIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNNYWluRnJhbWU7Ci0gICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgotI2VuZGlmCi0gICAgICAgIHJldHVybiBSZXNvdXJj
ZVJlcXVlc3Q6OlRhcmdldElzU3R5bGVTaGVldDsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpT
Y3JpcHQ6IAotICAgICAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1NjcmlwdDsK
LSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBS
ZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzRm9udFJlc291cmNlOwotICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRh
cmdldElzSW1hZ2U7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OlNoYWRlclJlc291cmNlOgotI2VuZGlmCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
UmF3UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU3Vi
cmVzb3VyY2U7ICAgIAotI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKLSAgICAgICAgcmV0dXJuIFJlc291cmNlUmVxdWVzdDo6
VGFyZ2V0SXNQcmVmZXRjaDsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3Vy
Y2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU3VicmVzb3VyY2U7
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6VGV4dFRyYWNrUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRh
cmdldElzVGV4dFRyYWNrOwotI2VuZGlmCi0jaWYgRU5BQkxFKFNWRykKLSAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpTVkdEb2N1bWVudFJlc291cmNlOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VS
ZXF1ZXN0OjpUYXJnZXRJc0ltYWdlOwotI2VuZGlmCi0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU3VicmVzb3VyY2U7
Ci19Ci0jZW5kaWYKLQogc3RhdGljIGRvdWJsZSBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVy
dmFsRm9yUmVzb3VyY2VUeXBlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUpCiB7CiAgICAgaWYg
KHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCkKQEAgLTMyMCwxMSArMjc4LDYgQEAgdm9p
ZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIsIGNvbnN0IFJlc28KICAgICB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEJMQUNL
QkVSUlkpCi0gICAgaWYgKG1fcmVzb3VyY2VSZXF1ZXN0LnRhcmdldFR5cGUoKSA9PSBSZXNvdXJj
ZVJlcXVlc3Q6OlRhcmdldElzVW5zcGVjaWZpZWQpCi0gICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0
LnNldFRhcmdldFR5cGUoY2FjaGVkUmVzb3VyY2VUeXBlVG9UYXJnZXRUeXBlKHR5cGUoKSkpOwot
I2VuZGlmCi0KICAgICBpZiAoIWFjY2VwdCgpLmlzRW1wdHkoKSkKICAgICAgICAgbV9yZXNvdXJj
ZVJlcXVlc3Quc2V0SFRUUEFjY2VwdChhY2NlcHQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkxvYWRlci5jcHAKaW5kZXggOTQ4Njk2ZmU4Yzk3N2Y5ZTIxOWFhYmRiNjhmMmYw
MjNkNWI5YmNkNS4uODE5YmZiN2U2NzM3ZmE2YjBlMTYxNmIyZTVmNjNiZDQyMzdhZjA1ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKQEAgLTYwLDkgKzYwLDYg
QEAgdm9pZCBJY29uTG9hZGVyOjpzdGFydExvYWRpbmcoKQogCiAgICAgQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KG1fZnJhbWUubG9hZGVyKCkuaWNvbigpLnVy
bCgpKSwgUmVzb3VyY2VMb2FkZXJPcHRpb25zKFNlbmRDYWxsYmFja3MsIFNuaWZmQ29udGVudCwg
QnVmZmVyRGF0YSwgRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBEb05vdEFza0NsaWVudEZv
ckFueUNyZWRlbnRpYWxzLCBEb1NlY3VyaXR5Q2hlY2ssIFVzZURlZmF1bHRPcmlnaW5SZXN0cmlj
dGlvbnNGb3JUeXBlKSk7CiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgIHJlcXVlc3Qu
bXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldFRhcmdldFR5cGUoUmVzb3VyY2VSZXF1ZXN0OjpU
YXJnZXRJc0Zhdmljb24pOwotI2VuZGlmCiAgICAgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1
ZXN0KCkuc2V0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3cpOwogICAgIHJlcXVlc3Qu
c2V0SW5pdGlhdG9yKGNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMoKS5pY29uKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3JCYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yQmFzZS5jcHAKaW5kZXggYzg5MTM3ZDFiYjhmNTEzYzBm
MzUzY2Y1Mzg2ODFlMWI3ZTZiNGQ5Yi4uZWIyZjhmN2NjMTE3MTRlZTMxNjk1NmEwZWIwODNlZTA4
ZjExZmU5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3JCYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvckJhc2UuY3BwCkBAIC00OCw4ICs0
OCw2IEBACiAjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJNYWNJbnRlbCIKICNl
bGlmIE9TKFdJTkRPV1MpCiAjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJXaW4z
MiIKLSNlbGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9S
X1BMQVRGT1JNICJCbGFja0JlcnJ5IgogI2Vsc2UKICNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1Jf
UExBVEZPUk0gIiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCAxOGMwOGU0
NmFjZjE4ZTJmMzQyY2U4Yzg1NjQ2NjU3OTFlNTI5ZjgwLi5lNzU2NjU1NWU1ZDZmNmYwNTFhYjE0
MWVlMWVhNmQzNzIyNjkyOGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtMjQzLDcg
KzI0Myw3IEBAIGJvb2wgU2V0dGluZ3M6OnNob3VsZEVuYWJsZVNjcmVlbkZvbnRTdWJzdGl0dXRp
b25CeURlZmF1bHQoKQogfQogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oQkxBQ0tCRVJSWSkKKyNpZiAhUExBVEZPUk0oTUFDKQogdm9pZCBTZXR0aW5nczo6aW5pdGlh
bGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKQogewogICAgIC8vIE90aGVyIHBsYXRmb3JtcyBjYW4g
c2V0IHVwIGZvbnRzIGZyb20gYSBjbGllbnQsIGJ1dCBvbiBNYWMsIHdlIHdhbnQgaXQgaW4gV2Vi
Q29yZSB0byBzaGFyZSBjb2RlIGJldHdlZW4gV2ViS2l0MSBhbmQgV2ViS2l0Mi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cAppbmRleCBhNWZlYTRlM2IzZDVlNjJhYzQ2NmYzYjA1YTlmMmU5YWE3MGRiOGM5Li4xYmJiN2Yz
OGYwZTI3MDYwMThiYmMyNmMzZjYzYzJiZmU5MjA2ZjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCkBAIC00OSwx
MCArNDksNiBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFw
aGljcy5oIgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotI2luY2x1ZGUgIlNj
cm9sbGluZ0Nvb3JkaW5hdG9yQmxhY2tCZXJyeS5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogI2lmICFQTEFURk9STShNQUMpCkBAIC02MiwxMCArNTgsNiBAQCBQYXNzUmVmUHRy
PFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2Uq
IHBhZ2UpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRvckNvb3Jk
aW5hdGVkR3JhcGhpY3MocGFnZSkpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZ
KQotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3JCbGFja0JlcnJ5
KHBhZ2UpKTsKLSNlbmRpZgotCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29y
ZGluYXRvcihwYWdlKSk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0N1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuY3BwCmlu
ZGV4IDBkYTlhZmQ0Zjc0MDkzZjY3ZDY2Y2NlODEzOWE2YjU3MTU3YmU1NDEuLmJkMjhkNTJhZjYz
MWQ3Y2IzNzg0ZjQ0MzM0Nzk4YmY0M2ZiOTBiOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0N1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29y
LmNwcApAQCAtMTQ1LDggKzE0NSw2IEBAIGNvbnN0IEN1cnNvciYgQ3Vyc29yOjpmcm9tVHlwZShD
dXJzb3I6OlR5cGUgdHlwZSkKICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwogfQogCi0jaWYg
VVNFKExBWllfTkFUSVZFX0NVUlNPUikKLQogQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqIGltYWdlLCBj
b25zdCBJbnRQb2ludCYgaG90U3BvdCkKICAgICA6IG1fdHlwZShDdXN0b20pCiAgICAgLCBtX2lt
YWdlKGltYWdlKQpAQCAtNDQ2LDYgKzQ0NCw0IEBAIGNvbnN0IEN1cnNvciYgZ3JhYmJpbmdDdXJz
b3IoKQogICAgIHJldHVybiBjOwogfQogCi0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaAppbmRleCAzMmNkZWRkYjhiMzJiMTE1MTEyMTQ3YmQ0
ZmM0NjFiMzNmMDBjZGE3Li40MDY3ZTkyYmM4MzI3M2Q2OTVlNTQ2YzMxOWIwNDc5YjAxZDM4YjY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaApAQCAtNDAsOCArNDAsNiBAQCB0eXBlZGVmIEhJ
Q09OIEhDVVJTT1I7CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VsaWYgUExBVEZPUk0o
R1RLKQogI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNlbGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkp
Ci0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtQ3Vyc29yLmg+CiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKQEAgLTUzLDExICs1MSw2IEBAIHR5cGVkZWYg
c3RydWN0IEhJQ09OX18gKkhJQ09OOwogdHlwZWRlZiBISUNPTiBIQ1VSU09SOwogI2VuZGlmCiAK
LS8vIExvb2tzIGxpa2UgaXQncyBqdXN0IFBMQVRGT1JNKEJMQUNLQkVSUlkpIHN0aWxsIG5vdCB1
c2luZyB0aGlzPwotI2lmIFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oTklYKQotI2RlZmluZSBXVEZfVVNF
X0xBWllfTkFUSVZFX0NVUlNPUiAxCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgSW1hZ2U7CkBAIC04MSw4ICs3NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICB0eXBlZGVmIGNvbnN0IGNoYXIqIFBsYXRmb3JtQ3Vyc29yOwogI2VsaWYgUExBVEZPUk0oTklY
KQogICAgIHR5cGVkZWYgdW5zaWduZWQgUGxhdGZvcm1DdXJzb3I7Ci0jZWxpZiBQTEFURk9STShC
TEFDS0JFUlJZKQotICAgIHR5cGVkZWYgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkJsYWNrQmVycnlD
dXJzb3IgUGxhdGZvcm1DdXJzb3I7CiAjZWxzZQogICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1D
dXJzb3I7CiAjZW5kaWYKQEAgLTE0MCwxNSArMTMxLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RhdGljIGNvbnN0IEN1cnNvciYgZnJvbVR5cGUoQ3Vyc29yOjpUeXBlKTsKIAog
ICAgICAgICBDdXJzb3IoKQotI2lmICFQTEFURk9STShJT1MpICYmICFQTEFURk9STShCTEFDS0JF
UlJZKQotI2lmIFVTRShMQVpZX05BVElWRV9DVVJTT1IpCisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaW52YWxpZCBDdXJzb3IgYW5kIHNob3VsZCBuZXZlciBh
Y3R1YWxseSBnZXQgdXNlZC4KICAgICAgICAgICAgIDogbV90eXBlKHN0YXRpY19jYXN0PFR5cGU+
KC0xKSkKICAgICAgICAgICAgICwgbV9wbGF0Zm9ybUN1cnNvcigwKQotI2Vsc2UKLSAgICAgICAg
ICAgIDogbV9wbGF0Zm9ybUN1cnNvcigwKQotI2VuZGlmIC8vIFVTRShMQVpZX05BVElWRV9DVVJT
T1IpCi0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisj
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTE2NCw3
ICsxNTEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH5DdXJzb3IoKTsKICAgICAg
ICAgQ3Vyc29yJiBvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJik7CiAKLSNpZiBVU0UoTEFaWV9OQVRJ
VkVfQ1VSU09SKQogICAgICAgICBleHBsaWNpdCBDdXJzb3IoVHlwZSk7CiAgICAgICAgIFR5cGUg
dHlwZSgpIGNvbnN0CiAgICAgICAgIHsKQEAgLTE3OCwxMyArMTY0LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBmbG9hdCBpbWFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9pbWFnZVNjYWxlRmFjdG9yOyB9CiAjZW5kaWYKICAgICAgICAgUGxhdGZvcm1DdXJzb3IgcGxh
dGZvcm1DdXJzb3IoKSBjb25zdDsKLSNlbHNlCi0gICAgICAgIGV4cGxpY2l0IEN1cnNvcihQbGF0
Zm9ybUN1cnNvcik7Ci0gICAgICAgIFBsYXRmb3JtQ3Vyc29yIGltcGwoKSBjb25zdCB7IHJldHVy
biBtX3BsYXRmb3JtQ3Vyc29yOyB9Ci0jZW5kaWYKIAogICAgICBwcml2YXRlOgotI2lmIFVTRShM
QVpZX05BVElWRV9DVVJTT1IpCiAgICAgICAgIHZvaWQgZW5zdXJlUGxhdGZvcm1DdXJzb3IoKSBj
b25zdDsKIAogICAgICAgICBUeXBlIG1fdHlwZTsKQEAgLTE5Myw3ICsxNzQsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKE1PVVNFX0NVUlNPUl9TQ0FMRSkKICAgICAgICAgZmxv
YXQgbV9pbWFnZVNjYWxlRmFjdG9yOwogI2VuZGlmCi0jZW5kaWYKIAogI2lmICFQTEFURk9STShN
QUMpCiAgICAgICAgIG11dGFibGUgUGxhdGZvcm1DdXJzb3IgbV9wbGF0Zm9ybUN1cnNvcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCmluZGV4IDUzNzliODY3MDZjODJjNzk5ZmM3MDQyZjkw
MDRiZTY4YWMyZmE4NWQuLmEzYmVhNDljZGI3Y2U2ZjMzOTY0NDhhNzhjZjhhNWE3N2UxZWRiYzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaApAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBEYXRhT2JqZWN0R3RrOwogfQogdHlwZWRlZiBXZWJDb3JlOjpE
YXRhT2JqZWN0R3RrKiBEcmFnRGF0YVJlZjsKLSNlbGlmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZP
Uk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oTklYKSB8fCBQTEFURk9STShJT1MpCisjZWxpZiBQ
TEFURk9STShFRkwpIHx8IFBMQVRGT1JNKE5JWCkgfHwgUExBVEZPUk0oSU9TKQogdHlwZWRlZiB2
b2lkKiBEcmFnRGF0YVJlZjsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9EcmFnSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5o
CmluZGV4IGQ4MzY5NmUzMzExY2NlNTQxNzM1MmI2ZDA0Njk5YTEwMzM0NDBmMGUuLmMzN2E0N2Nl
NmE5MDU0ZmZjNDE3NmQyYWY5OWI2NzE1ZGQxZjk3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Ry
YWdJbWFnZS5oCkBAIC02MCw3ICs2MCw3IEBAIHR5cGVkZWYgUmV0YWluUHRyPE5TSW1hZ2U+IERy
YWdJbWFnZVJlZjsKIHR5cGVkZWYgSEJJVE1BUCBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKE5JWCkKIHR5cGVkZWYgY2Fpcm9fc3VyZmFjZV90KiBEcmFnSW1h
Z2VSZWY7Ci0jZWxpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjZWxp
ZiBQTEFURk9STShFRkwpCiB0eXBlZGVmIHZvaWQqIERyYWdJbWFnZVJlZjsKICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCmluZGV4IGM0YzQ0YjZlMjdh
N2ZhNmY4MDYxZDg1NWJjZjM1MjE5NTJiNmY3NjEuLmE1ZmE4NGNjMGFkMzk0ZWRjODNmMTFhMjEy
Mzg1ZmExMzU2NzA5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2Uu
Y3BwCkBAIC0zNiwxMCArMzYsNiBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5jbHVkZSA8
QmxhY2tCZXJyeVBsYXRmb3JtU2V0dGluZ3MuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IFBs
dWdpblBhY2thZ2VCeU5hbWVNYXA7CkBAIC0zODksNyArMzg1LDcgQEAgVmVjdG9yPFN0cmluZz4g
UGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCiAgICAgVmVjdG9yPFN0
cmluZz4gcGF0aHM7CiAKICAgICAvLyBBZGQgcGF0aHMgc3BlY2lmaWMgdG8gZWFjaCBwbGF0Zm9y
bQotI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaWYgZGVm
aW5lZChYUF9VTklYKQogICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQ
YXRoKCk7CiAgICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygiLy5tb3ppbGxhL3BsdWdp
bnMiKSk7CiAgICAgcGF0aHMuYXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsKQEAgLTQyNSw4ICs0MjEs
NiBAQCBWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9y
aWVzKCkKICAgICBTdHJpbmcgbW96UGF0aChnZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpKTsKICAg
ICBtb3pQYXRoLnNwbGl0KFVDaGFyKCc6JyksIC8qIGFsbG93RW1wdHlFbnRyaWVzICovIGZhbHNl
LCBtb3pQYXRocyk7CiAgICAgcGF0aHMuYXBwZW5kVmVjdG9yKG1velBhdGhzKTsKLSNlbGlmIFBM
QVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgcGF0aHMuYXBwZW5kKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+YXBwbGljYXRpb25QbHVnaW5EaXJlY3RvcnkoKS5jX3N0
cigpKTsKICNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQogICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0
aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7CiAgICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmlu
ZygiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKSk7CkBAIC00NDUsMTAgKzQzOSw4IEBAIGJv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKICAgICBTdHJpbmcgcHJlZmVycmVkUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRo
KCk7CiAKLSNpZiBkZWZpbmVkKFhQX1VOSVgpICYmICFQTEFURk9STShCTEFDS0JFUlJZKQorI2lm
IGRlZmluZWQoWFBfVU5JWCkKICAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJpbmcoIi8ubW96
aWxsYS9wbHVnaW5zIikpOwotI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICBwcmVmZXJy
ZWRQYXRoID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5hcHBs
aWNhdGlvblBsdWdpbkRpcmVjdG9yeSgpLmNfc3RyKCk7CiAjZWxpZiBkZWZpbmVkKFhQX01BQ09T
WCkKICAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJpbmcoIi9MaWJyYXJ5L0ludGVybmV0IFBs
dWctSW5zIikpOwogI2VsaWYgZGVmaW5lZChYUF9XSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDcxYmExMTdiNjdkYjQwOWEwYmNi
Y2FhMDJmMTViY2MyYTQ0YmIzM2MuLmNjNTRjMGFkMWQ3NmUwMDMyMjM1MDIxMzlhZjBhZGFhMmNj
M2EwYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCkBAIC0yMDQ3LDcgKzIwNDcsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6cGFp
bnRzSW50b1dpbmRvdygpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICht
X293bmluZ0xheWVyLmlzUm9vdExheWVyKCkpIHsKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKSB8
fCBQTEFURk9STShJT1MpIHx8IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBQTEFURk9S
TShJT1MpIHx8IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICAgICAgaWYgKGNvbXBvc2l0
b3IoKS5pbkZvcmNlZENvbXBvc2l0aW5nTW9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4
IGYzYzczMGZmNmZhMTAxNjY4NDMyOWE3ZGFlMTVjNmM2OTIzZDQyNWUuLjIyODg3NWNkMzA5N2Ni
OTk0NjAzM2QzNTgyNDkwZjEwZGI1MWE0MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCkBAIC0xNzI1LDcgKzE3MjUsNyBAQCBib29sIFJlbmRlck9iamVjdDo6
aXNSb290ZWQoUmVuZGVyVmlldyoqIHZpZXcpIGNvbnN0CiAKIFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uRW51bSBSZW5kZXJPYmplY3Q6OnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgY29u
c3QKIHsKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkK
KyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKICAgICAvLyBUaGlzIGNhbiBvbmx5IGJlIGVuYWJs
ZWQgZm9yIHBvcnRzIHdoaWNoIGhvbm9yIHRoZSBvcmllbnRhdGlvbiBmbGFnIGluIHRoZWlyIGRy
YXdpbmcgY29kZS4KICAgICBpZiAoZG9jdW1lbnQoKS5pc0ltYWdlRG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCmluZGV4IGQyMjU4YjU0MmY1ZjQzMjFiZDRmZmQ0MmJlMDIxZjMxMGFjMzAxZWQu
LjMyYTdlOTU2NTQ1NmY5ZDAyMGNlMjZlOTdiNGQ5NTIzMzAxNTNlZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE5NjgsNyArMTk2OCw3IEBAIHZvaWQgSW50ZXJuYWxz
OjpzdG9wVHJhY2tpbmdSZXBhaW50cyhFeGNlcHRpb25Db2RlJiBlYykKICAgICBmcmFtZVZpZXct
PnNldFRyYWNrc1JlcGFpbnRzKGZhbHNlKTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpICYmIFVT
RShMQVpZX05BVElWRV9DVVJTT1IpCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBjb25zdCBj
aGFyKiBjdXJzb3JUeXBlVG9TdHJpbmcoQ3Vyc29yOjpUeXBlIGN1cnNvclR5cGUpCiB7CiAgICAg
c3dpdGNoIChjdXJzb3JUeXBlKSB7CkBAIC0yMDMxLDcgKzIwMzEsNyBAQCBTdHJpbmcgSW50ZXJu
YWxzOjpnZXRDdXJyZW50Q3Vyc29ySW5mbyhFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgIH0KIAotI2lmICFQTEFURk9STShJT1MpICYmIFVTRShMQVpZX05B
VElWRV9DVVJTT1IpCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBDdXJzb3IgY3Vyc29yID0gZG9j
dW1lbnQtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmN1cnJlbnRNb3VzZUN1cnNvcigpOwogCiAg
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCmluZGV4IGQyODA3MDVlYjQ4
NzE2NThkODMzZTE1YzBjMmYxMzgzZjg2Y2ZmYjAuLjU4ZjZmNTg2MTgwMWIzNTJjNmI2ZGI1ZDM1
YWZkNjkyYmRjZGU4MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVmYXVs
dFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCkBAIC0zMTEsOSArMzExLDYgQEAgdm9p
ZCBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWQoY29uc3QgVVJMJiB1cmwpCiAKICAgICAv
LyBNYXJrIHRoaXMgb2JqZWN0IGFzIGFjdGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBsb2Fk
LgogICAgIG1fc2NyaXB0TG9hZGVyID0gV29ya2VyU2NyaXB0TG9hZGVyOjpjcmVhdGUoKTsKLSNp
ZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgIG1fc2NyaXB0TG9hZGVyLT5zZXRUYXJnZXRUeXBl
KFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTaGFyZWRXb3JrZXIpOwotI2VuZGlmCiAgICAgbV9z
Y3JpcHRMb2FkZXItPmxvYWRBc3luY2hyb25vdXNseShtX3dvcmtlci0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCB1cmwsIERlbnlDcm9zc09yaWdpblJlcXVlc3RzLCB0aGlzKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXIuY3BwCmluZGV4IDVmMDk1YWViZTQ0NWZmM2Y3OTg4MDdhZjA0NTg4
YTNiZjdjYTQ1NDkuLjE2OGQxMzgyMTA0NWI2Njc3NDUzY2FhYzRjNTllYTdlNzc5N2IzOTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKQEAgLTk1LDkgKzk1LDYgQEAgUGFzc1JlZlB0cjxX
b3JrZXI+IFdvcmtlcjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYKICAgICB3b3JrZXItPnNldFBlbmRpbmdBY3Rpdml0eSh3b3JrZXIuZ2V0KCkp
OwogCiAgICAgd29ya2VyLT5tX3NjcmlwdExvYWRlciA9IFdvcmtlclNjcmlwdExvYWRlcjo6Y3Jl
YXRlKCk7Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICB3b3JrZXItPm1fc2NyaXB0TG9h
ZGVyLT5zZXRUYXJnZXRUeXBlKFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNXb3JrZXIpOwotI2Vu
ZGlmCiAgICAgd29ya2VyLT5tX3NjcmlwdExvYWRlci0+bG9hZEFzeW5jaHJvbm91c2x5KCZjb250
ZXh0LCBzY3JpcHRVUkwsIERlbnlDcm9zc09yaWdpblJlcXVlc3RzLCB3b3JrZXIuZ2V0KCkpOwog
CiAgICAgcmV0dXJuIHdvcmtlci5yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyR2xvYmFsU2NvcGUuY3BwCmluZGV4IGZjYmY2NDc2NWNlYzI5MGVmYzFmYTBhMzFhMWNi
MjNhOGQ0MmMyZWQuLmJhZWVkNzM2ZDM2MDI2OWFiZjJhYjI3NTBiZGM4NTNiZTM3YzRjYzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCkBAIC0yMjcs
OSArMjI3LDYgQEAgdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6aW1wb3J0U2NyaXB0cyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdXJscywgRXhjZXB0aW9uQ29kZSYKIAogICAgIGZvciAoVmVjdG9yPFVS
TD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29tcGxldGVkVVJMcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgUmVmUHRyPFdvcmtlclNjcmlwdExvYWRlcj4gc2NyaXB0TG9hZGVy
KFdvcmtlclNjcmlwdExvYWRlcjo6Y3JlYXRlKCkpOwotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkp
Ci0gICAgICAgIHNjcmlwdExvYWRlci0+c2V0VGFyZ2V0VHlwZShSZXNvdXJjZVJlcXVlc3Q6OlRh
cmdldElzU2NyaXB0KTsKLSNlbmRpZgogICAgICAgICBzY3JpcHRMb2FkZXItPmxvYWRTeW5jaHJv
bm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgKml0LCBBbGxvd0Nyb3NzT3JpZ2luUmVx
dWVzdHMpOwogCiAgICAgICAgIC8vIElmIHRoZSBmZXRjaGluZyBhdHRlbXB0IGZhaWxlZCwgdGhy
b3cgYSBORVRXT1JLX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IGFsbCB0aGVzZSBzdGVwcy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcAppbmRleCAxMTZk
YWRmY2FmNWM0Y2JlN2Q1NTUxYjQyYjE4NWYxMmNhZjJhODcwLi5hZWMzZTg0ZDI2ODU1YjUwMjU4
NDE3ZTkxNDVhMjY1ZTUyMjMwYWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclNjcmlwdExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJTY3JpcHRMb2FkZXIuY3BwCkBAIC0xMDMsOSArMTAzLDYgQEAgUGFzc093blB0cjxSZXNvdXJj
ZVJlcXVlc3Q+IFdvcmtlclNjcmlwdExvYWRlcjo6Y3JlYXRlUmVzb3VyY2VSZXF1ZXN0KCkKIHsK
ICAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRQdHIobmV3IFJlc291
cmNlUmVxdWVzdChtX3VybCkpOwogICAgIHJlcXVlc3QtPnNldEhUVFBNZXRob2QoIkdFVCIpOwot
I2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgcmVxdWVzdC0+c2V0VGFyZ2V0VHlwZShtX3Rh
cmdldFR5cGUpOwotI2VuZGlmCiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmgKaW5kZXggY2M3
MDRhNjE5MjdjNmI2MWY0ODc0OGE4NTg0YTE4MGFlNTk0MTdkMS4uOTE0OTVlMTZhOTg4ZDdjZDQ1
MzZjMDMzNTgyNzVmN2ZkZTg3MjlmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJTY3JpcHRMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
clNjcmlwdExvYWRlci5oCkBAIC03MSwxMCArNzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKSBPVkVSUklE
RTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCkgT1ZFUlJJREU7
CiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgICAgICB2b2lkIHNldFRhcmdldFR5cGUo
UmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRUeXBlIHRhcmdldFR5cGUpIHsgbV90YXJnZXRUeXBlID0g
dGFyZ2V0VHlwZTsgfQotI2VuZGlmCi0KICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xh
c3MgV1RGOjpSZWZDb3VudGVkPFdvcmtlclNjcmlwdExvYWRlcj47CiAKQEAgLTk0LDkgKzkwLDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fZmFpbGVkOwogICAgICAgICB1
bnNpZ25lZCBsb25nIG1faWRlbnRpZmllcjsKICAgICAgICAgYm9vbCBtX2ZpbmlzaGluZzsKLSNp
ZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgICAgICBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldFR5
cGUgbV90YXJnZXRUeXBlOwotI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggNDJkZmQ4MzRmMjJlZjYx
ZDViOTEyMDRmYWY3NGJmMGY5MGQ3MDYxOS4uOTlkYzAyNzk1YWNjYjA5NWRjMzM4YzMxZjIzYzIx
NWQ1YjAxYzNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC03ODAs
OSArNzgwLDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdChFeGNlcHRpb25D
b2RlJiBlYykKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fdXJsKTsKICAgICByZXF1
ZXN0LnNldEhUVFBNZXRob2QobV9tZXRob2QpOwotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0g
ICAgcmVxdWVzdC5zZXRUYXJnZXRUeXBlKFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNYSFIpOwot
I2VuZGlmCiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcywgbV9tZXRob2QsIG1fdXJsLCBtX2FzeW5jLCBtX3Jl
cXVlc3RFbnRpdHlCb2R5ID8gbV9yZXF1ZXN0RW50aXR5Qm9keS0+ZGVlcENvcHkoKSA6IDAsIG1f
cmVxdWVzdEhlYWRlcnMsIG1faW5jbHVkZUNyZWRlbnRpYWxzKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCmluZGV4IDdlZDM5NTQzYzNlYmMyZWQ2ZDM4NzJiMDg4NzEzMzM3ZTcxMDZmNjcuLjEw
YTkxMWQ0YzkzZDExY2Q4OWU3NDhiYzFmMzI4Y2VmMzcwZDY2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAKQEAgLTcwMiw5ICs3MDIsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6bG9hZElj
b25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBGaWxlSWNvbgogI2lm
ICFQTEFURk9STShJT1MpCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IFdl
YkNvcmU6OkN1cnNvciYgY3Vyc29yKQogewotI2lmIFVTRShMQVpZX05BVElWRV9DVVJTT1IpCiAg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldEN1cnNvcihjdXJzb3Ip
KTsKLSNlbmRpZgogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0Q3Vyc29ySGlkZGVuVW50
aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220885</attachid>
            <date>2014-01-10 13:58:25 -0800</date>
            <delta_ts>2014-01-10 14:44:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126715-20140110135824.patch</filename>
            <type>text/plain</type>
            <size>26517</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGU2MWUyZDNiNjc2OWJi
MDZmNzYzZWFjZDE3Mjk4NTIxOTQ2NmM5YS4uZjg0NTA5MzYwZjNkNDg2YWJjNDdiYWZiM2NlNTU3
NGU4NTA4NWVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMyw2ICszLDQyIEBACiAgICAgICAgIFJlbW92ZSB0
aGUgQmxhY2tCZXJyeSBwb3J0IGZyb20gdHJ1bmsKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjcxNQogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNv
ZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50Lmg6CisgICAgICAgICog
cGxhdGZvcm0vUGxhdGZvcm1Ub3VjaEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bVRvdWNoRXZlbnQ6OlBsYXRmb3JtVG91Y2hFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxh
dGZvcm1Ub3VjaFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVUkw6OnBhcnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBvcnRBbGxvd2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I6OkRpc3BsYXlSZWZyZXNoTW9uaXRv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisKKzIwMTQtMDEt
MTAgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVt
b3ZlIHRoZSBCbGFja0JlcnJ5IHBvcnQgZnJvbSB0cnVuaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NzE1CisKICAgICAgICAgUmV2aWV3ZWQgYnkg
QW5kZXJzIENhcmxzc29uLgogCiAgICAgICAgICogZG9tL1RvdWNoRXZlbnQuY3BwOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAppbmRleCAwYmI1MDhiZGQ2
MGNiYTZkMDE2NDg2NTg5YmE2YjllN2U5YTZmZTcyLi44MjkyMzEwYzVhMmFiMDkxNjU2OWU3YjY1
ZDVlZjQwMDc3NWI4OTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1F
VHlwZVJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcApAQCAtMzEwLDkgKzMxMCw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nKCkKICAgICBzdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlc0ZvckVuY29kaW5nLT5hZGQoImltYWdlL2ljbyIpOwogI2VsaWYgVVNFKENBSVJPKQogICAg
IHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmctPmFkZCgiaW1hZ2UvcG5nIik7Ci0j
ZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9y
RW5jb2RpbmctPmFkZCgiaW1hZ2UvcG5nIik7Ci0gICAgc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNG
b3JFbmNvZGluZy0+YWRkKCJpbWFnZS9qcGVnIik7CiAjZW5kaWYKIH0KIApAQCAtNjg2LDE0ICs2
ODMsMTQgQEAgY29uc3QgU3RyaW5nJiBkZWZhdWx0TUlNRVR5cGUoKQogICAgIHJldHVybiBkZWZh
dWx0TUlNRVR5cGU7CiB9CiAKLSNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkgJiYgIVVTRShDVVJM
KQorI2lmICFVU0UoQ1VSTCkKIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXROb3JtYWxpemVk
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICByZXR1cm4gbWltZVR5cGU7
CiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8IFVTRShDVVJMKQorI2lm
IFVTRShDVVJMKQogdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVHlwZUFzc29j
aWF0aW9uTWFwOwogCiBzdGF0aWMgY29uc3QgTUlNRVR5cGVBc3NvY2lhdGlvbk1hcCYgbWltZVR5
cGVBc3NvY2lhdGlvbk1hcCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
S2V5Ym9hcmRFdmVudC5oCmluZGV4IGY3MzAzN2RjNmMxODI2MGUyYTEyYjY2NzdhNzNiZWY0MTM2
NmMyMmUuLjYwMGI4NzBlM2U4MTdlOTRhZjczYWUzOTg2N2JkNWQzN2RhMGFlNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCkBAIC00OSwx
NCArNDksNiBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRLZXk7CiAjaW5j
bHVkZSAiQ29tcG9zaXRpb25SZXN1bHRzLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEJMQUNL
QkVSUlkpCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgUGxhdGZvcm0gewotY2xh
c3MgS2V5Ym9hcmRFdmVudDsKLX0KLX0KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oRUZMKQogdHlw
ZWRlZiBzdHJ1Y3QgX0V2YXNfRXZlbnRfS2V5X0Rvd24gRXZhc19FdmVudF9LZXlfRG93bjsKIHR5
cGVkZWYgc3RydWN0IF9FdmFzX0V2ZW50X0tleV9VcCBFdmFzX0V2ZW50X0tleV9VcDsKQEAgLTc1
LDkgKzY3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2F1dG9SZXBl
YXQoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNLZXlwYWQoZmFsc2UpCiAgICAgICAgICAgICAs
IG1faXNTeXN0ZW1LZXkoZmFsc2UpCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICAgICAg
ICAgICwgbV91bm1vZGlmaWVkQ2hhcmFjdGVyKDApCi0jZW5kaWYKICNpZiBQTEFURk9STShHVEsp
CiAgICAgICAgICAgICAsIG1fZ2RrRXZlbnRLZXkoMCkKICNlbmRpZgpAQCAtMTMwLDEwICsxMTks
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBib29sIGN1cnJlbnRDYXBz
TG9ja1N0YXRlKCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldEN1cnJlbnRNb2RpZmllclN0YXRl
KGJvb2wmIHNoaWZ0S2V5LCBib29sJiBjdHJsS2V5LCBib29sJiBhbHRLZXksIGJvb2wmIG1ldGFL
ZXkpOwogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICAgICAgdW5zaWduZWQgdW5tb2Rp
ZmllZENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdW5tb2RpZmllZENoYXJhY3RlcjsgfQot
I2VuZGlmCi0KICNpZiBQTEFURk9STShNQUMpCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAg
TlNFdmVudCogbWFjRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX21hY0V2ZW50LmdldCgpOyB9CkBA
IC0xNTcsMTAgKzE0Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFN0
cmluZyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodW5zaWduZWQpOwogI2VuZGlmCiAKLSNpZiBQTEFU
Rk9STShCTEFDS0JFUlJZKQotICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OktleWJvYXJkRXZlbnQmKTsKLSNlbmRpZgotCiAjaWYgUExBVEZP
Uk0oRUZMKQogICAgICAgICBleHBsaWNpdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoY29uc3QgRXZh
c19FdmVudF9LZXlfRG93biopOwogICAgICAgICBleHBsaWNpdCBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQoY29uc3QgRXZhc19FdmVudF9LZXlfVXAqKTsKQEAgLTE3NywxMCArMTU4LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faXNLZXlwYWQ7CiAgICAgICAgIGJvb2wgbV9p
c1N5c3RlbUtleTsKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgICAgIHVuc2lnbmVk
IG1fdW5tb2RpZmllZENoYXJhY3RlcjsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oTUFDKQogI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgIFJldGFpblB0cjxOU0V2ZW50PiBtX21hY0V2ZW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAppbmRleCBkNjRk
ZDIzMDcyMzUwODg2MDU4Njc5OWQ4MGFlZmNiZDRkMWY3YmIzLi40Zjc0Mzk5OTY5YzFlMmJhYTVi
ODdjNTlkYTA3NzU4MDZkZDU3ZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybU1vdXNlRXZlbnQuaApAQCAtNDYsMTAgKzQ2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIC8vIFRoZXNlIGJ1dHRvbiBudW1iZXJzIG1hdGNoIHRoZSBvbmVzIHVzZWQgaW4gdGhlIERP
TSBBUEksIDAgdGhyb3VnaCAyLCBleGNlcHQgZm9yIE5vQnV0dG9uIHdoaWNoIGlzbid0IHNwZWNp
ZmllZC4KICAgICBlbnVtIE1vdXNlQnV0dG9uIHsgTm9CdXR0b24gPSAtMSwgTGVmdEJ1dHRvbiwg
TWlkZGxlQnV0dG9uLCBSaWdodEJ1dHRvbiB9OwogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkK
LSAgICBlbnVtIE1vdXNlSW5wdXRNZXRob2QgeyBQb2ludGluZ0RldmljZSwgVG91Y2hTY3JlZW4g
fTsKLSNlbmRpZgotICAgIAogICAgIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudCA6IHB1YmxpYyBQ
bGF0Zm9ybUV2ZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCgp
CkBAIC0xMTUsMTAgKzExMSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBk
aWRBY3RpdmF0ZVdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX2RpZEFjdGl2YXRlV2ViVmlldzsg
fQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgICAgICBQbGF0Zm9ybU1v
dXNlRXZlbnQoY29uc3QgSW50UG9pbnQmIGV2ZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBn
bG9iYWxQb3NpdGlvbiwgY29uc3QgUGxhdGZvcm1FdmVudDo6VHlwZSwgaW50IGNsaWNrQ291bnQs
IE1vdXNlQnV0dG9uLCBib29sIHNoaWZ0S2V5LCBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBN
b3VzZUlucHV0TWV0aG9kID0gUG9pbnRpbmdEZXZpY2UpOwotICAgICAgICBNb3VzZUlucHV0TWV0
aG9kIGlucHV0TWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dE1ldGhvZDsgfQotI2VuZGlm
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBJbnRQb2ludCBtX3Bvc2l0aW9uOwogICAgICAgICBJ
bnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwpAQCAtMTMzLDggKzEyNSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgaW50IG1fZXZlbnROdW1iZXI7CiAjZWxpZiBQTEFURk9STShXSU4p
CiAgICAgICAgIGJvb2wgbV9kaWRBY3RpdmF0ZVdlYlZpZXc7Ci0jZWxpZiBQTEFURk9STShCTEFD
S0JFUlJZKQotICAgICAgICBNb3VzZUlucHV0TWV0aG9kIG1faW5wdXRNZXRob2Q7CiAjZW5kaWYK
ICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVRv
dWNoRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtVG91Y2hFdmVudC5o
CmluZGV4IDc0NTRiZWE0YjQ2NDJkYTEwZWU2OGJiMTU3Y2MzMWI4Mjg4ZDNmYTQuLjIxZTMwNmRk
NWU5MmJmMmZkMjU1YzM1MDMxYzFlODA0NGZjZGJhYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtVG91Y2hFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtVG91Y2hFdmVudC5oCkBAIC0yNiwxNCArMjYsNiBAQAogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi1uYW1lc3BhY2Ug
QmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgUGxhdGZvcm0gewotY2xhc3MgVG91Y2hFdmVudDsKLX07
Ci19OwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogCkBAIC00MSwzNiArMzMsMTMg
QEAgY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50IDogcHVibGljIFBsYXRmb3JtRXZlbnQgewogcHVi
bGljOgogICAgIFBsYXRmb3JtVG91Y2hFdmVudCgpCiAgICAgICAgIDogUGxhdGZvcm1FdmVudChQ
bGF0Zm9ybUV2ZW50OjpUb3VjaFN0YXJ0KQotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAg
ICAgICwgbV9yb3RhdGlvbigwKQotICAgICAgICAsIG1fc2NhbGUoMSkKLSAgICAgICAgLCBtX2Rv
dWJsZVRhcChmYWxzZSkKLSAgICAgICAgLCBtX3RvdWNoSG9sZChmYWxzZSkKLSNlbmRpZgogICAg
IHsKICAgICB9CiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgIGV4cGxpY2l0IFBsYXRm
b3JtVG91Y2hFdmVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hFdmVudCopOwotI2VuZGlm
Ci0KICAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1Ub3VjaFBvaW50PiYgdG91Y2hQb2ludHMoKSBj
b25zdCB7IHJldHVybiBtX3RvdWNoUG9pbnRzOyB9CiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZ
KQotICAgIGZsb2F0IHJvdGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yb3RhdGlvbjsgfQotICAg
IGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQotICAgIGJvb2wgZG91Ymxl
VGFwKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVUYXA7IH0KLSAgICBib29sIHRvdWNoSG9sZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hIb2xkOyB9Ci0jZW5kaWYKLQogcHJvdGVjdGVkOgogICAg
IFZlY3RvcjxQbGF0Zm9ybVRvdWNoUG9pbnQ+IG1fdG91Y2hQb2ludHM7Ci0jaWYgUExBVEZPUk0o
QkxBQ0tCRVJSWSkKLSAgICBmbG9hdCBtX3JvdGF0aW9uOwotICAgIGZsb2F0IG1fc2NhbGU7Ci0g
ICAgYm9vbCBtX2RvdWJsZVRhcDsKLSAgICBib29sIG1fdG91Y2hIb2xkOwotI2VuZGlmCiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9p
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtVG91Y2hQb2ludC5oCmluZGV4
IDAzMzcwMjMzYjg1NzQ5YmJlOWFmZTk2ZDhjZjI5M2U0Y2M4MjYwMDQuLmRhNzZiYWQ1MThiMTEx
MjA0MjM4ZjVkNWNiM2MyZjRkMzMwNjgxZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtVG91Y2hQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtVG91Y2hQb2ludC5oCkBAIC0yNSwxNCArMjUsNiBAQAogCiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi1uYW1lc3BhY2UgQmxhY2tC
ZXJyeSB7Ci1uYW1lc3BhY2UgUGxhdGZvcm0gewotY2xhc3MgVG91Y2hQb2ludDsKLX07Ci19Owot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50
OwpAQCAtNTgsMTAgKzUwLDYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSNpZiBQTEFURk9S
TShCTEFDS0JFUlJZKQotICAgIFBsYXRmb3JtVG91Y2hQb2ludChjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6VG91Y2hQb2ludCYpOwotI2VuZGlmCi0KICAgICB1bnNpZ25lZCBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faWQ7IH0KICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KICAgICBJbnRQb2ludCBzY3JlZW5Qb3MoKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblBv
czsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JO
b25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAK
aW5kZXggOTYxZTNjY2NmNzc1MjhlYmQwNjYxMDA3MTcyN2ZiODIwZTc5OGI3MS4uMmYwMmQ0Njlm
MGIxY2ZhYTc4ZWYyYmViOGZlNjRjMzY5ZWI2Y2U5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCkBAIC01MSwxNCArNTEsMTIgQEAgY29uc3Qg
ZG91YmxlIGtUaWNrVGltZSA9IDEgLyBrRnJhbWVSYXRlOwogY29uc3QgZG91YmxlIGtNaW5pbXVt
VGltZXJJbnRlcnZhbCA9IC4wMDE7CiBjb25zdCBkb3VibGUga1pvb21UaWNrcyA9IDExOwogCi0j
aWYgIShQTEFURk9STShCTEFDS0JFUlJZKSkKIFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNj
cm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQogewog
ICAgIGlmIChzY3JvbGxhYmxlQXJlYSAmJiBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3JF
bmFibGVkKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JOb25l
KHNjcm9sbGFibGVBcmVhKSk7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRv
cihzY3JvbGxhYmxlQXJlYSkpOwogfQotI2VuZGlmCiAKIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGFy
YW1ldGVyczo6UGFyYW1ldGVycygpCiAgICAgOiBtX2lzRW5hYmxlZChmYWxzZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9VUkwuY3BwCmluZGV4IDMzNzg3OGU4MWI2Mjk0Y2M5MDBlNDJmOWUwODRjYTBiMGFhN2Yx
OGMuLjIzYjZjNDEwZjEwMGQxYmNjMGZkNjE2MTlkMDIzOGM4NzA1ODYyYjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVVJMLmNwcApAQCAtMTEyOCwxNyArMTEyOCw2IEBAIHZvaWQgVVJMOjpwYXJzZShjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IFN0cmluZyogb3JpZ2luYWxTdHJpbmcpCiAgICAgICAgICYmIGlz
TGV0dGVyTWF0Y2hJZ25vcmluZ0Nhc2UodXJsWzJdLCAnbCcpCiAgICAgICAgICYmIGlzTGV0dGVy
TWF0Y2hJZ25vcmluZ0Nhc2UodXJsWzNdLCAnZScpOwogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJS
WSkKLSAgICAvLyBQYXJzZSBsb2NhbDogdXJscyB0aGUgc2FtZSBhcyBmaWxlOiB1cmxzLgotICAg
IGlmICghaXNGaWxlKQotICAgICAgICBpc0ZpbGUgPSBzY2hlbWVFbmQgPT0gNQotICAgICAgICAg
ICAgJiYgaXNMZXR0ZXJNYXRjaElnbm9yaW5nQ2FzZSh1cmxbMF0sICdsJykKLSAgICAgICAgICAg
ICYmIGlzTGV0dGVyTWF0Y2hJZ25vcmluZ0Nhc2UodXJsWzFdLCAnbycpCi0gICAgICAgICAgICAm
JiBpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKHVybFsyXSwgJ2MnKQotICAgICAgICAgICAgJiYg
aXNMZXR0ZXJNYXRjaElnbm9yaW5nQ2FzZSh1cmxbM10sICdhJykKLSAgICAgICAgICAgICYmIGlz
TGV0dGVyTWF0Y2hJZ25vcmluZ0Nhc2UodXJsWzRdLCAnbCcpOwotI2VuZGlmCi0KICAgICBtX3By
b3RvY29sSXNJbkhUVFBGYW1pbHkgPSBpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKHVybFswXSwg
J2gnKQogICAgICAgICAmJiBpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKHVybFsxXSwgJ3QnKQog
ICAgICAgICAmJiBpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKHVybFsyXSwgJ3QnKQpAQCAtMTkx
NSwxMSArMTkwNCw2IEBAIGJvb2wgcG9ydEFsbG93ZWQoY29uc3QgVVJMJiB1cmwpCiAgICAgaWYg
KHVybC5wcm90b2NvbElzKCJmaWxlIikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0jaWYgUExB
VEZPUk0oQkxBQ0tCRVJSWSkKLSAgICBpZiAodXJsLnByb3RvY29sSXMoImxvY2FsIikpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vV2lkZ2V0LmgKaW5kZXggNjNiNjNmNTkxZGZlOTViYTAwZmI1Zjk4YmJkZDU2ZDUz
ZWRkY2Y3Ny4uMzdlOTkxNmY2ZGJiYWY4N2NhZTk2OWVmZGRhZDNmMjI3OTIxYmZlYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmgKQEAgLTU5LDcgKzU5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0d0
a0NvbnRhaW5lciBHdGtDb250YWluZXI7CiB0eXBlZGVmIEd0a1dpZGdldCogUGxhdGZvcm1XaWRn
ZXQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8IFBMQVRGT1JNKE5JWCkK
KyNpZiBQTEFURk9STShOSVgpCiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtV2lkZ2V0OwogI2VuZGlm
CiAKQEAgLTcyLDEwICs3Miw3IEBAIHR5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09i
amVjdDsKIHR5cGVkZWYgRXZhc19PYmplY3QqIFBsYXRmb3JtV2lkZ2V0OwogI2VuZGlmCiAKLSNp
ZiBQTEFURk9STShCTEFDS0JFUlJZKQotI2luY2x1ZGUgIlBhZ2VDbGllbnRCbGFja0JlcnJ5Lmgi
Ci10eXBlZGVmIFBhZ2VDbGllbnRCbGFja0JlcnJ5KiBQbGF0Zm9ybVBhZ2VDbGllbnQ7Ci0jZWxp
ZiBQTEFURk9STShFRkwpCisjaWYgUExBVEZPUk0oRUZMKQogY2xhc3MgUGFnZUNsaWVudEVmbDsK
IHR5cGVkZWYgUGFnZUNsaWVudEVmbCogUGxhdGZvcm1QYWdlQ2xpZW50OwogI2Vsc2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5o
CmluZGV4IDE3ODk4ZmM2NDAwNzc1MjMxMWUyYzc3M2I5ZTA2YmJjMzdiZDkwNWMuLmJiYjNiYzM0
MjQ0MzE2YTljNWZkNTVjYzI1OWZiMDRjZmIzMDY5ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaApAQCAtMjksNyArMjks
NyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAotI2lmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShFRkwpICYmICFQ
TEFURk9STShCTEFDS0JFUlJZKSAmJiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oTklYKQor
I2lmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShFRkwpICYmICFQTEFURk9STShXSU4pICYm
ICFQTEFURk9STShOSVgpCiAjaW5jbHVkZSAiQU5HTEUvU2hhZGVyTGFuZy5oIgogI2VsaWYgUExB
VEZPUk0oV0lOKQogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ci5jcHAKaW5kZXggZmJjYzU1YjE3M2RkMDk2NGUwNWYzMzc4ODgxYTQ4MDhkMGJmNjBiZS4uNTY0
MTg2NGE2Y2M1NjE5ZjdhYTQ4MmMyYjYwYzY4YzQyYjM3MzNmZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3Iu
Y3BwCkBAIC02Myw5ICs2Myw2IEBAIERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6RGlzcGxheVJlZnJl
c2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKICNpZiBQTEFURk9STShNQUMp
CiAgICAgLCBtX2Rpc3BsYXlMaW5rKDApCiAjZW5kaWYKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZ
KQotICAgICwgbV9hbmltYXRpb25DbGllbnQoMCkKLSNlbmRpZgogewogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ci5oCmluZGV4IGY4OTI5ZDY5ZmQ2NjMxZWQ2ZjhkY2JkMDkxYTUzMTJjMjVhNzFlMmYuLjY0OGEx
OTExOTE1MDE4NDYwYTQ1Mzg4OGM2NjhhZDEwZjRiM2ZlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCkBA
IC0zNCw5ICszNCw2IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2lmIFBMQVRGT1JNKEJM
QUNLQkVSUlkpCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtQW5pbWF0aW9uRnJhbWVSYXRl
Q29udHJvbGxlci5oPgotI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCiB0eXBlZGVmIHN0cnVj
dCBfX0NWRGlzcGxheUxpbmsgKkNWRGlzcGxheUxpbmtSZWY7CkBAIC0xMjIsMTUgKzExOSw2IEBA
IHByaXZhdGU6CiAgICAgSGFzaFNldDxEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQqPiBtX2Ns
aWVudHM7CiAgICAgSGFzaFNldDxEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQqPiogbV9jbGll
bnRzVG9CZU5vdGlmaWVkOwogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLXB1YmxpYzoKLSAg
ICB2b2lkIGRpc3BsYXlMaW5rRmlyZWQoKTsKLXByaXZhdGU6Ci0gICAgRGlzcGxheUFuaW1hdGlv
bkNsaWVudCAqbV9hbmltYXRpb25DbGllbnQ7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbkNsaWVu
dCgpOwotICAgIHZvaWQgc3RvcEFuaW1hdGlvbkNsaWVudCgpOwotI2VuZGlmCi0KICNpZiBQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiBwdWJsaWM6CiAgICAgdm9pZCBkaXNwbGF5TGlu
a0ZpcmVkKGRvdWJsZSBub3dTZWNvbmRzLCBkb3VibGUgb3V0cHV0VGltZVNlY29uZHMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCmluZGV4IDE2MGQw
OGYyMWRmZWQxM2MzYWNkODBkOTNkMzc4YWI5YTIyZTMyMzEuLjYyYzM3YmQzNmIxMWI4OTYyNDZh
YmNiMGNhZGZhNzI4NDQxNGVmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmgKQEAgLTMxLDE0ICszMSw2IEBACiAjaW5jbHVkZSAiSW50UG9pbnQu
aCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJS
WSkKLW5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBQbGF0Zm9ybSB7Ci1jbGFzcyBG
bG9hdFBvaW50OwotfQotfQotI2VuZGlmCi0KICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBD
R1BvaW50IENHUG9pbnQ7CiAjZW5kaWYKQEAgLTE0NiwxMSArMTM4LDYgQEAgcHVibGljOgogI2Vu
ZGlmCiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkp
Ci0gICAgRmxvYXRQb2ludChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRQb2ludCYp
OwotICAgIG9wZXJhdG9yIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFBvaW50KCkgY29uc3Q7
Ci0jZW5kaWYKLQogICAgIEZsb2F0UG9pbnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JikgY29uc3Q7CiAgICAgRmxvYXRQb2ludCBtYXRyaXhUcmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgKaW5kZXggY2M5YTAzYmVmODAyMzUxYWNjNjBkYWVkNGFmY2Zi
YjVhYjQyMzU5My4uODA1NjY4NmQ4ZjFmNjdhMThhZTBlZTE5YTM0NzUzMmM0MjliMmE5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKQEAgLTQ2LDE0
ICs0Niw2IEBAIHR5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0OwogI2VuZGlmCiAjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogCi0jaWYgUExBVEZPUk0oQkxBQ0tC
RVJSWSkKLW5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBQbGF0Zm9ybSB7Ci1jbGFz
cyBGbG9hdFJlY3Q7Ci19Ci19Ci0jZW5kaWYKLQogI2lmIFVTRShDQUlSTykKIHR5cGVkZWYgc3Ry
dWN0IF9jYWlyb19yZWN0YW5nbGUgY2Fpcm9fcmVjdGFuZ2xlX3Q7CiAjZW5kaWYKQEAgLTE3NCwx
MiArMTY2LDYgQEAgcHVibGljOgogICAgIHZvaWQgZml0VG9Qb2ludHMoY29uc3QgRmxvYXRQb2lu
dCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMik7CiAgICAg
dm9pZCBmaXRUb1BvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYg
cDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBjb25zdCBGbG9hdFBvaW50JiBwMyk7CiAKLSNpZiBQ
TEFURk9STShCTEFDS0JFUlJZKQotICAgIEZsb2F0UmVjdChjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6RmxvYXRSZWN0Jik7Ci0gICAgb3BlcmF0b3IgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZs
b2F0UmVjdCgpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkKCkgY29uc3Q7Ci0jZW5k
aWYKLQogI2lmIFVTRShDRykKICAgICBGbG9hdFJlY3QoY29uc3QgQ0dSZWN0Jik7CiAgICAgb3Bl
cmF0b3IgQ0dSZWN0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0U2l6ZS5oCmluZGV4IDk1MmEyOTA0NGFkYzk5YWVlMTcyYzZiZGI0ZGY4NTdhNDEyOGJm
NWUuLmQ3YWE2ZGY3NTU5ZmZlODUwOTg4NGEwNTU1NzFlYzI5MWVjOWE2NDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCkBAIC0zMSwxNCArMzEsNiBA
QAogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAot
I2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3Bh
Y2UgUGxhdGZvcm0gewotY2xhc3MgRmxvYXRTaXplOwotfQotfQotI2VuZGlmCi0KICNpZiBQTEFU
Rk9STShJT1MpCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2VuZGlm
CkBAIC0xMTYsMTEgKzEwOCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSht
X2hlaWdodCwgbV93aWR0aCk7CiAgICAgfQogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAg
ICBGbG9hdFNpemUoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0U2l6ZSYpOwotICAg
IG9wZXJhdG9yIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFNpemUoKSBjb25zdDsKLSNlbmRp
ZgotCiAjaWYgVVNFKENHKQogICAgIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBDR1NpemUmKTsg
Ly8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBvcGVyYXRv
ciBDR1NpemUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmgKaW5kZXggMzIzMjVlNGVhYmJjMzgxYWY3MmY4OTAxNDBjYmI1ODBlNjYxNDUwNy4u
ODNlYzEyNDZkM2Q3ODZjY2ZhOGEwNjI4NzllZGJkZWU0ZGE4MTVkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTE2MSwxMSArMTYxLDcgQEAg
cHVibGljOgogICAgICAgICBib29sIGlzQm9sZDsKICAgICAgICAgYm9vbCBpc0l0YWxpYzsKICAg
ICB9OwotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgc3RhdGljIHZvaWQgZ2V0Rm9udEZh
bWlseUZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGFy
YWN0ZXJzLCBjb25zdCBjaGFyKiBwcmVmZXJyZWRMb2NhbGUsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIFNpbXBsZUZvbnRGYW1pbHkqKTsKLSNlbHNlCiAgICAgc3RhdGljIHZvaWQgZ2V0Rm9udEZh
bWlseUZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGFy
YWN0ZXJzLCBjb25zdCBjaGFyKiBwcmVmZXJyZWRMb2NhbGUsIFNpbXBsZUZvbnRGYW1pbHkqKTsK
LSNlbmRpZgogCiBwcml2YXRlOgogICAgIEZvbnRDYWNoZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDA1ZGZjYzMz
YzgxODM1NDY2OTVhNGY3NWE1NTdmNDYwNTA1MjQ2NWMuLjNiZGIzY2NhOTg0Zjk5MmZiNGUxODI0
YTk4MTFhNWE3NzNhZWI5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTIzLDkgKzIzLDcgQEAKICAqLwogCiAvLyBG
SVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgdW50aWwgYWxsIHBvcnRzIHN3aXRjaCB0byB1c2luZyB0
aGlzIGZpbGUuCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSNpbmNsdWRlICJoYXJmYnV6ei9G
b250UGxhdGZvcm1EYXRhSGFyZkJ1enouaCIKLSNlbGlmIFVTRShXSU5HREkpCisjaWYgVVNFKFdJ
TkdESSkKICNpbmNsdWRlICJ3aW5jZS9Gb250UGxhdGZvcm1EYXRhLmgiCiAjZWxpZiBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oTklYKQogI2luY2x1ZGUgImZyZWV0
eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaEJ1ZmZlci5oCmluZGV4IDNmZmY3N2IzYjVhYzc5NDZiZWQ5ZmQzNmE2YWFhMTg2
ZThkMTU1MjkuLmQ3MjYzNGNmZDViM2VlZWU2NWI1YjQzNmMxYTI4NjQ4ZTdlZmNhNWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaApAQCAtNTEs
OCArNTEsNiBAQCBjbGFzcyBTaW1wbGVGb250RGF0YTsKIHR5cGVkZWYgY2Fpcm9fZ2x5cGhfdCBH
bHlwaEJ1ZmZlckdseXBoOwogI2VsaWYgVVNFKFdJTkdESSkKIHR5cGVkZWYgd2NoYXJfdCBHbHlw
aEJ1ZmZlckdseXBoOwotI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLXR5cGVkZWYgdW5zaWdu
ZWQgR2x5cGhCdWZmZXJHbHlwaDsKICNlbHNlCiB0eXBlZGVmIEdseXBoIEdseXBoQnVmZmVyR2x5
cGg7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmNwcAppbmRleCA1MzQ1ZTEyMWI1NDhiNzMzMmJmY2ZlNzYwZGQ3Y2U3YTkyMzIzMjhhLi42N2Nk
NjA3NWM3NjMyNDA2MDU1MmJjNTMwNjViNTEzMTgzNDgyMGY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCkBAIC0xNzAsNyArMTcwLDcgQEAgdm9p
ZCBHcmFkaWVudDo6c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGdyYWRpZW50U3BhY2VUcmEKICAgICBpbnZhbGlkYXRlSGFzaCgpOwogfQogCi0jaWYgIVVT
RShDQUlSTykgJiYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaWYgIVVTRShDQUlSTykKIHZvaWQg
R3JhZGllbnQ6OnNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmgKaW5kZXggOTM0NzRiZmM0MTU0YTkzZDM4ZWRhYTZiYjk2YzM5MjMyMWU4NGRkZi4uOGQx
OWUzMzI1NzBhZjhiZmRiYjFlOGUxODlmNDAzZGYxYzlkNjJjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCkBAIC00NSwxNSArNDUsNiBAQCB0eXBlZGVm
IENHR3JhZGllbnRSZWYgUGxhdGZvcm1HcmFkaWVudDsKICNlbGlmIFVTRShDQUlSTykKIHR5cGVk
ZWYgc3RydWN0IF9jYWlyb19wYXR0ZXJuIGNhaXJvX3BhdHRlcm5fdDsKIHR5cGVkZWYgY2Fpcm9f
cGF0dGVybl90KiBQbGF0Zm9ybUdyYWRpZW50OwotI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkK
LW5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBQbGF0Zm9ybSB7Ci1uYW1lc3BhY2Ug
R3JhcGhpY3MgewotY2xhc3MgR3JhZGllbnQ7Ci19Ci19Ci19Ci10eXBlZGVmIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6R3JhZGllbnQqIFBsYXRmb3JtR3JhZGllbnQ7CiAjZWxzZQog
dHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYWRpZW50OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDRjYThlOTMw
ZGRmMTg0OWI3ZTU4ODQwMDQwZDUzZGY0OWVkMmRhMGMuLjUwMTU2MDEzZjEwMWU3YmJlYzUwZjFi
MjZhMWUwYzg5Zjg0NDAzN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC00OCwxNSArNDgsNiBAQCBjbGFzcyBQbGF0Zm9y
bUNvbnRleHRDYWlybzsKIHR5cGVkZWYgV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0Q2Fpcm8gUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZWxpZiBVU0UoV0lOR0RJKQogdHlwZWRlZiBzdHJ1Y3Qg
SERDX18gUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci0jZWxpZiBQTEFURk9STShCTEFDS0JFUlJZ
KQotbmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFBsYXRmb3JtIHsKLW5hbWVzcGFj
ZSBHcmFwaGljcyB7Ci1jbGFzcyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLX0KLX0KLX0KLXVz
aW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQ7CiAjZWxzZQogdHlwZWRlZiB2b2lkIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaAppbmRleCAxOGE2YzNlZDM5NzRlOTI3MGE4YzlkNDEyNDdlYjNkNzY5N2MyZDIxLi5m
N2EwYjQwMDNhOWVhNWNiY2JmNzRlMTc1ZmQ5ZGZiOTAwZTVkOTQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTI2
LDYgKzI2LDcgQEAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RfaAogI2RlZmluZSBHcmFwaGlj
c0NvbnRleHQzRF9oCiAKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgpAQCAtNDksMTAgKzUwLDYgQEAKICN1bmRlZiBWRVJTSU9OCiAjZW5kaWYKIAotI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JN
KEJMQUNLQkVSUlkpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKQotI2luY2x1ZGUg
IkFOR0xFV2ViS2l0QnJpZGdlLmgiCi0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKE1BQykKICNpZiBQ
TEFURk9STShJT1MpCiAjaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2dsLmg+CkBAIC0xMDMsOCArMTAw
LDYgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CiAjaWYgVVNFKENBSVJPKQogY2xh
c3MgUGxhdGZvcm1Db250ZXh0Q2Fpcm87Ci0jZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQotY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwogI2VuZGlmCiAKIHR5cGVkZWYgV1RGOjpIYXNoTWFwPENTdHJp
bmcsIHVpbnQ2NF90PiBTaGFkZXJOYW1lSGFzaDsKQEAgLTUwMiwxMCArNDk3LDggQEAgcHVibGlj
OgogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkp
IHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKQogICAgIC8vIFdpdGggbXVsdGlzYW1w
bGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgogICAgIHZv
aWQgcHJlcGFyZVRleHR1cmUoKTsKLSNlbmRpZgogCiAgICAgLy8gRXF1aXZhbGVudCB0byA6Omds
VGV4SW1hZ2UyRCgpLiBBbGxvd3MgcGl4ZWxzPT0wIHdpdGggbm8gYWxsb2NhdGlvbi4KICAgICB2
b2lkIHRleEltYWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMpOwpAQCAtNzkzLDcgKzc4Niw3IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKEVGTCkgfHwgVVNFKENBSVJPKQogICAgIHZvaWQgcGFpbnRUb0NhbnZhcyhj
b25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgaW50IGltYWdlV2lkdGgsIGludCBpbWFn
ZUhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNhbnZhc1dpZHRoLCBpbnQgY2Fu
dmFzSGVpZ2h0LCBQbGF0Zm9ybUNvbnRleHRDYWlybyogY29udGV4dCk7Ci0jZWxpZiBQTEFURk9S
TShCTEFDS0JFUlJZKSB8fCBVU0UoQ0cpCisjZWxpZiBVU0UoQ0cpCiAgICAgdm9pZCBwYWludFRv
Q2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwg
aW50IGltYWdlSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2FudmFzV2lkdGgs
IGludCBjYW52YXNIZWlnaHQsIEdyYXBoaWNzQ29udGV4dCopOwogI2VuZGlmCkBAIC04MTAsMTAg
KzgwMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGVuZFBhaW50KCk7CiAjZW5kaWYKIAotI2lmIFBM
QVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3Q7Ci0jZW5kaWYKLQogICAgIC8vIFN1cHBvcnQgZm9yIGJ1ZmZlciBjcmVhdGlvbiBhbmQgZGVs
ZXRpb24KICAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZUJ1ZmZlcigpOwogICAgIFBsYXRmb3Jt
M0RPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKTsKQEAgLTkxNCw4ICs5MDMsNiBAQCBwdWJsaWM6
CiAgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2RlY29kZWRJbWFnZTsKICAgICAgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gbV9waXhlbERhdGE7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjx1aW50OF90W10+IG1fZm9ybWFsaXplZFJHQkE4RGF0YTsKLSNlbGlmIFBMQVRGT1JNKEJMQUNL
QkVSUlkpCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9pbWFnZURhdGE7CiAjZW5kaWYKICAg
ICAgICAgSW1hZ2UqIG1faW1hZ2U7CiAgICAgICAgIEltYWdlSHRtbERvbVNvdXJjZSBtX2ltYWdl
SHRtbERvbVNvdXJjZTsKQEAgLTkzOCw3ICs5MjUsNiBAQCBwcml2YXRlOgogICAgIC8vIERlc3Rp
bmF0aW9uIGRhdGEgd2lsbCBoYXZlIG5vIGdhcHMgYmV0d2VlbiByb3dzLgogICAgIHN0YXRpYyBi
b29sIHBhY2tQaXhlbHMoY29uc3QgdWludDhfdCogc291cmNlRGF0YSwgRGF0YUZvcm1hdCBzb3Vy
Y2VEYXRhRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBz
b3VyY2VVbnBhY2tBbGlnbm1lbnQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uRm9ybWF0LCB1bnNpZ25l
ZCBkZXN0aW5hdGlvblR5cGUsIEFscGhhT3AsIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSwgYm9vbCBm
bGlwWSk7CiAKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
RUZMKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JN
KE5JWCkKICAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250
ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsCiAgICAgLy8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFu
ZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKICAgICAvLyBjb3VsZCBu
b3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKQEAg
LTk1MCwxNyArOTM2LDExIEBAIHByaXZhdGU6CiAgICAgLy8gYmFja2J1ZmZlci4KICAgICB2b2lk
IHJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgaW50IHBpeGVsc1Np
emUpOwogICAgIHZvaWQgcmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQg
eCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKTsK
LSNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGJvb2wgc2V0UmVuZGVyYnVmZmVyU3Rv
cmFnZUZyb21EcmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgIHZvaWQgbG9nRnJhbWVCdWZmZXJT
dGF0dXMoaW50IGxpbmUpOwotICAgIHZvaWQgcmVhZFBpeGVsc0lNRyhHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpOwotI2VuZGlmCi0KICAgICBib29sIHJlc2hhcGVG
Qk9zKGNvbnN0IEludFNpemUmKTsKICAgICB2b2lkIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNl
c3NhcnkoY29uc3QgSW50UmVjdCYgPSBJbnRSZWN0KCkpOwogI2lmIChQTEFURk9STShFRkwpIHx8
IFBMQVRGT1JNKE5JWCkpICYmIFVTRShHUkFQSElDU19TVVJGQUNFKQpAQCAtOTc4LDE0ICs5NTgs
OCBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3dlYkdMTGF5ZXI7CiAj
ZWxpZiBQTEFURk9STShXSU4pICYmIFVTRShDQSkKICAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVy
PiBtX3dlYkdMTGF5ZXI7Ci0jZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBSZWZQdHI8UGxhdGZvcm1MYXllcj4gbV9jb21wb3Np
dGluZ0xheWVyOwotI2VuZGlmCi0gICAgdm9pZCogbV9jb250ZXh0OwogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9S
TShCTEFDS0JFUlJZKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkKICAgICBzdHJ1
Y3QgU3ltYm9sSW5mbyB7CiAgICAgICAgIFN5bWJvbEluZm8oKQogICAgICAgICAgICAgOiB0eXBl
KDApCkBAIC0xMDcyLDkgKzEwNDYsOCBAQCBwcml2YXRlOgogICAgIEFOR0xFV2ViS2l0QnJpZGdl
IG1fY29tcGlsZXI7CiAKICAgICBPd25QdHI8U2hhZGVyTmFtZUhhc2g+IG5hbWVIYXNoTWFwRm9y
U2hhZGVyczsKLSNlbmRpZgogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgKChQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShOSVgp
KSAmJiBVU0UoT1BFTkdMX0VTXzIpKQorI2lmICgoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShF
RkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKSkgJiYgVVNFKE9QRU5HTF9FU18y
KSkKICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVM7CiAgICAgT3duUHRyPEV4
dGVuc2lvbnMzRE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CiAjZWxzZQpAQCAtMTA4OCwxNSArMTA2
MSwxMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+PiBtX3ZlcnRleEFycmF5
OwogCiAgICAgR0MzRHVpbnQgbV90ZXh0dXJlOwotI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQog
ICAgIEdDM0R1aW50IG1fY29tcG9zaXRvclRleHR1cmU7Ci0jZW5kaWYKICAgICBHQzNEdWludCBt
X2ZibzsKIAotI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgIEdDM0R1aW50IG1fZGVwdGhC
dWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwotI2VuZGlmCiAgICAgR0MzRHVp
bnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CiAKICAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOwpA
QCAtMTEyNCwxNCArMTA5Myw4IEBAIHByaXZhdGU6CiAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBz
eW50aGVzaXplR0xFcnJvcigpLgogICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRp
Y0Vycm9yczsKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgYm9vbCBtX2lzSW1hZ2lu
YXRpb25IYXJkd2FyZTsKLSNlbmRpZgotCi0jaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAg
ZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTsKICAgICBPd25QdHI8R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlPiBtX3ByaXZhdGU7Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220904</attachid>
            <date>2014-01-10 16:30:35 -0800</date>
            <delta_ts>2014-01-10 16:49:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126715-20140110163034.patch</filename>
            <type>text/plain</type>
            <size>40870</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
Mzk4MGFmMDU0M2M5ZGYwMmU2NTZiNGViMGNiZWU2NWVjNjlkZWMxLi5jM2U0MDcwYWRkNTkwMjgz
NjljNmZiYmFkZWJjNzlhYjlhMTFjZTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxNC0wMS0xMCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZW1vdmUgdGhlIEJsYWNrQmVycnkgcG9ydCBmcm9tIHRydW5rCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY3MTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFzc2VtYmxl
ci9BUk1Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpjYWNoZUZsdXNo
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6
QVJNdjdBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNz
ZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3Nl
bWJsZXI6OmNhY2hlRmx1c2gpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJldmVydEp1bXBSZXBs
YWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFj
a01hcmtlci5jcHA6CisgICAgICAgIChKU0M6OmdldFBsYXRmb3JtVGhyZWFkUmVnaXN0ZXJzKToK
KyAgICAgICAgKEpTQzo6b3RoZXJUaHJlYWRTdGFja1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpm
cmVlUGxhdGZvcm1UaHJlYWRSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmg6CisKIDIwMTQtMDEtMTAgIFRhbWFzIEdlcmdlbHkgIDx0Z2VyZ2VseS51LXN6ZWdl
ZEBwYXJ0bmVyLnNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdW0pTQ10gRW5hYmxlIHVkaXM4
NiBkaXNhc3NlbWJsZXIgb24gZWZsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU3M2YyZTA4YTQzNGM5OTQyOTdm
NmYyNGUxMjhkNjQyM2EwNTJkMTEuLjZlNzhjZGQzZDU1MGNjMzhjMDcyYWJmMmM4Y2Q1MjU2ZGIw
OGI0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTMsNiArMyw1MSBAQAogICAgICAgICBSZW1vdmUgdGhlIEJs
YWNrQmVycnkgcG9ydCBmcm9tIHRydW5rCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjY3MTUKIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbnRQb2ludC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL05hdGl2ZUltYWdlUHRyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdM
RVNTaGltcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6YWRkUGF0aEZvclJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1MYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmls
dGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlSW50ZXJuYWwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuY3BwOgorCisyMDE0LTAxLTEwICBCZW5qYW1pbiBQb3VsYWluICA8YnBv
dWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB0aGUgQmxhY2tCZXJyeSBwb3J0IGZy
b20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNjcxNQorCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KIAogICAgICAg
ICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKaW5kZXggMmE4YzJlNzU1OWE2MzJjN2U4NTU0
ZGQ3Nzg4ZmUwZDAzNzVkN2Q0Ny4uMDg3ZDMxYzE0YWI5MWJhMjVjMDg5ZWM5ZmQ0MGRlN2NlMDg0
YmQzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3Nl
bWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxl
ci5oCkBAIC0xMTIxLDExICsxMTIxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBs
aW51eFBhZ2VGbHVzaChjdXJyZW50LCBlbmQpOwogI2VsaWYgT1MoV0lOQ0UpCiAgICAgICAgICAg
ICBDYWNoZVJhbmdlRmx1c2goY29kZSwgc2l6ZSwgQ0FDSEVfU1lOQ19BTEwpOwotI2VsaWYgT1Mo
UU5YKSAmJiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKLSAgICAgICAgICAgIFVOVVNF
RF9QQVJBTShjb2RlKTsKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSNlbGlmIE9T
KFFOWCkKLSAgICAgICAgICAgIG1zeW5jKGNvZGUsIHNpemUsIE1TX0lOVkFMSURBVEVfSUNBQ0hF
KTsKICNlbHNlCiAjZXJyb3IgIlRoZSBjYWNoZUZsdXNoIHN1cHBvcnQgaXMgbWlzc2luZyBvbiB0
aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk12N0Fzc2VtYmxlci5oCmluZGV4IDE5MTExMDljMTJlMmYzOWYxZGNhNzQ2OGYwYTE5
ODc5MWI1ZjkxMzEuLjUyNTdmMzJhODNiODQ2MzdjZDY4M2YwYjgxYzljMGZlNTBjMmJmMjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgK
QEAgLTEzNDcsNyArMTM0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29y
ZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tKE9QX01PVl9pbW1fVDMsIGltbS5tX3ZhbHVlLmltbTQs
IHJkLCBpbW0pOwogICAgIH0KICAgICAKLSNpZiBPUyhMSU5VWCkgfHwgT1MoUU5YKQorI2lmIE9T
KExJTlVYKQogICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBUb19tb3ZUM21vdnRjbXBUMih2b2lk
KiBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIHVp
bnRwdHJfdCBpbW0pCiAgICAgewogICAgICAgICB1aW50MTZfdCogYWRkcmVzcyA9IHN0YXRpY19j
YXN0PHVpbnQxNl90Kj4oaW5zdHJ1Y3Rpb25TdGFydCk7CkBAIC0yMjY4LDcgKzIyNjgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVCghKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0
aW9uU3RhcnQpICYgMSkpOwogICAgICAgICBBU1NFUlQoIShiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih0bykgJiAxKSk7CiAKLSNpZiBPUyhMSU5VWCkgfHwgT1MoUU5YKQorI2lmIE9TKExJTlVYKQog
ICAgICAgICBpZiAoY2FuQmVKdW1wVDQocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGluc3Ry
dWN0aW9uU3RhcnQpLCB0bykpIHsKICAgICAgICAgICAgIHVpbnQxNl90KiBwdHIgPSByZWludGVy
cHJldF9jYXN0PHVpbnQxNl90Kj4oaW5zdHJ1Y3Rpb25TdGFydCkgKyAyOwogICAgICAgICAgICAg
bGlua0p1bXBUNChwdHIsIHRvKTsKQEAgLTIyODcsNyArMjI4Nyw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1bXBSZXBsYWNlbWVudFNpemUoKQogICAgIHsKLSNp
ZiBPUyhMSU5VWCkgfHwgT1MoUU5YKQorI2lmIE9TKExJTlVYKQogICAgICAgICByZXR1cm4gMTA7
CiAjZWxzZQogICAgICAgICByZXR1cm4gNDsKQEAgLTIzNzcsMTMgKzIzNzcsNiBAQCBwdWJsaWM6
CiAgICAgICAgIGxpbnV4UGFnZUZsdXNoKGN1cnJlbnQsIGVuZCk7CiAjZWxpZiBPUyhXSU5DRSkK
ICAgICAgICAgQ2FjaGVSYW5nZUZsdXNoKGNvZGUsIHNpemUsIENBQ0hFX1NZTkNfQUxMKTsKLSNl
bGlmIE9TKFFOWCkKLSNpZiAhRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCi0gICAgICAg
IG1zeW5jKGNvZGUsIHNpemUsIE1TX0lOVkFMSURBVEVfSUNBQ0hFKTsKLSNlbHNlCi0gICAgICAg
IFVOVVNFRF9QQVJBTShjb2RlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNpemUpOwotI2VuZGlm
CiAjZWxzZQogI2Vycm9yICJUaGUgY2FjaGVGbHVzaCBzdXBwb3J0IGlzIG1pc3Npbmcgb24gdGhp
cyBwbGF0Zm9ybS4iCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKaW5kZXggMmQ3OGE2OGM1MDUyOTc3Y2Q5ODI1
OTJiMDEwOWUwNWM4NjZlNjAyYS4uMWE5ZTIyYmM4OWVhMzI3YTA1ZjhjZDRlOWRkMWZlY2MwYTYy
MmQzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTXY3LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTXY3LmgKQEAgLTE3ODQsNyArMTc4NCw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChD
b2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklEIHJkLCB2b2lkKiBp
bml0aWFsVmFsdWUpCiAgICAgewotI2lmIE9TKExJTlVYKSB8fCBPUyhRTlgpCisjaWYgT1MoTElO
VVgpCiAgICAgICAgIEFSTXY3QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92VDNtb3Z0Y21wVDIo
aW5zdHJ1Y3Rpb25TdGFydC5kYXRhTG9jYXRpb24oKSwgcmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihpbml0aWFsVmFsdWUpKTsKICNlbHNlCiAgICAgICAg
IFVOVVNFRF9QQVJBTShyZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAppbmRleCA2Mzg1NDQ4MmRmNDQxNWJhMTExMzAzZDM4ZWRkOGNk
YmU4Y2UyYmRkLi5mNTQ2Y2IzOGJiYzY1MWYxMTg3ZDZmZDM2YTM2NjJiNGQ4NjhmMzEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAK
QEAgLTU4LDEzICs1OCw2IEBACiAjaW5jbHVkZSA8cHRocmVhZF9ucC5oPgogI2VuZGlmCiAKLSNp
ZiBPUyhRTlgpCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+Ci0j
aW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2VuZGlmCi0KICNpZiBVU0Uo
UFRIUkVBRFMpICYmICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lOKQogI2luY2x1ZGUgPHNpZ25h
bC5oPgogI2VuZGlmCkBAIC0zMTEsOCArMzA0LDYgQEAgdHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRl
NjRfdCBQbGF0Zm9ybVRocmVhZFJlZ2lzdGVyczsKIAogI2VsaWYgT1MoV0lORE9XUykKIHR5cGVk
ZWYgQ09OVEVYVCBQbGF0Zm9ybVRocmVhZFJlZ2lzdGVyczsKLSNlbGlmIE9TKFFOWCkKLXR5cGVk
ZWYgc3RydWN0IF9kZWJ1Z190aHJlYWRfaW5mbyBQbGF0Zm9ybVRocmVhZFJlZ2lzdGVyczsKICNl
bGlmIFVTRShQVEhSRUFEUykKIHR5cGVkZWYgcHRocmVhZF9hdHRyX3QgUGxhdGZvcm1UaHJlYWRS
ZWdpc3RlcnM7CiAjZWxzZQpAQCAtMzU4LDIyICszNDksNiBAQCBzdGF0aWMgc2l6ZV90IGdldFBs
YXRmb3JtVGhyZWFkUmVnaXN0ZXJzKGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBwbGF0Zm9ybVRocmVh
ZCwgUAogICAgIHJlZ3MuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9D
T05UUk9MOwogICAgIEdldFRocmVhZENvbnRleHQocGxhdGZvcm1UaHJlYWQsICZyZWdzKTsKICAg
ICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOwotI2VsaWYgT1MoUU5YKQotICAgIG1lbXNldCgmcmVn
cywgMCwgc2l6ZW9mKHJlZ3MpKTsKLSAgICByZWdzLnRpZCA9IHBsYXRmb3JtVGhyZWFkOwotICAg
IC8vIEZJWE1FOiBJZiB3ZSBmaW5kIHRoaXMgaHVydHMgcGVyZm9ybWFuY2UsIHdlIGNhbiBjb25z
aWRlciBjYWNoaW5nIHRoZSBmZCBhbmQga2VlcGluZyBpdCBvcGVuLgotICAgIGludCBmZCA9IG9w
ZW4oIi9wcm9jL3NlbGYvYXMiLCBPX1JET05MWSk7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIG9wZW4gL3Byb2Mvc2VsZi9hcyAoZXJybm86ICVkKSIs
IGVycm5vKTsKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgaW50IHJjID0gZGV2Y3RsKGZk
LCBEQ01EX1BST0NfVElEU1RBVFVTLCAmcmVncywgc2l6ZW9mKHJlZ3MpLCAwKTsKLSAgICBpZiAo
cmMgIT0gRU9LKSB7Ci0gICAgICAgIExPR19FUlJPUigiZGV2Y3RsKERDTURfUFJPQ19USURTVEFU
VVMpIGZhaWxlZCAoZXJyb3I6ICVkKSIsIHJjKTsKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0g
ICAgY2xvc2UoZmQpOwotICAgIHJldHVybiBzaXplb2Yoc3RydWN0IF9kZWJ1Z190aHJlYWRfaW5m
byk7CiAjZWxpZiBVU0UoUFRIUkVBRFMpCiAgICAgcHRocmVhZF9hdHRyX2luaXQoJnJlZ3MpOwog
I2lmIEhBVkUoUFRIUkVBRF9OUF9IKSB8fCBPUyhORVRCU0QpCkBAIC00MzgsOSArNDEzLDYgQEAg
c3RhdGljIGlubGluZSB2b2lkKiBvdGhlclRocmVhZFN0YWNrUG9pbnRlcihjb25zdCBQbGF0Zm9y
bVRocmVhZFJlZ2lzdGVycyYgcmVncykKICNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQogI2Vu
ZGlmCiAKLSNlbGlmIE9TKFFOWCkKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
KHVpbnRwdHJfdCkgcmVncy5zcCk7Ci0KICNlbGlmIFVTRShQVEhSRUFEUykKICAgICB2b2lkKiBz
dGFja0Jhc2UgPSAwOwogICAgIHNpemVfdCBzdGFja1NpemUgPSAwOwpAQCAtNDU1LDcgKzQyNyw3
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCogb3RoZXJUaHJlYWRTdGFja1BvaW50ZXIoY29uc3QgUGxh
dGZvcm1UaHJlYWRSZWdpc3RlcnMmIHJlZ3MpCiAKIHN0YXRpYyB2b2lkIGZyZWVQbGF0Zm9ybVRo
cmVhZFJlZ2lzdGVycyhQbGF0Zm9ybVRocmVhZFJlZ2lzdGVycyYgcmVncykKIHsKLSNpZiBVU0Uo
UFRIUkVBRFMpICYmICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lOKSAmJiAhT1MoUU5YKQorI2lm
IFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCiAgICAgcHRocmVh
ZF9hdHRyX2Rlc3Ryb3koJnJlZ3MpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVncyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCmluZGV4
IDFmM2FkMDNhNDAyNjVmNDRmNjNiNWE0ZjBjOGNkZmMwZGE2MzNlNDEuLjAxYmU3YzFhYWVkNjEz
NzUwZDc4OWNmZWZlOWEyOTAzMDE0Y2JmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8
bGlia2Vybi9PU0NhY2hlQ29udHJvbC5oPgogI2VuZGlmCiAKLSNpZiBPUyhJT1MpIHx8IE9TKFFO
WCkKKyNpZiBPUyhJT1MpCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApp
bmRleCA5ZjhlYjgyZmNiOWEzZTA2M2ZkMWY0NzZiZTZlOTI5ODQ2YjdlMmU0Li42MGNhZjkwNmE5
YjNhMGRkOGU5OGM5OGU5Nzk2YWRmYmQ5NjhkZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM0ODIsMTEgKzM0
ODIsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MKICAgICAgICAgICAgIG1fY29udGV4dC0+
cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwogICAg
IH0KIAotI2lmIE9TKERBUldJTikgfHwgT1MoUU5YKQorI2lmIE9TKERBUldJTikKICAgICBpZiAo
bV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIC8vIHdlIGhhdmVuJ3QgY29tcHV0ZWQgcGFkZGlu
ZwogICAgICAgICBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlw
ZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAm
cGFkZGluZyk7CiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBkcml2
ZXIgYnVnIG9uIE1hYyBBTkQgdGhlIEdMRVMgZHJpdmVyIGJ1ZwotICAgIC8vIG9uIFFDICYgSW1h
Z2luYXRpb24gUU5YIGlzIGZpeGVkLCBpLmUuLCB3aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVs
cyBzaG91bGQKKyAgICAvLyBvbiBRQyBpcyBmaXhlZCwgaS5lLiwgd2hlbiBhbHBoYSBpcyBvZmYs
IHJlYWRQaXhlbHMgc2hvdWxkCiAgICAgLy8gc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAu
CiAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9jb250ZXh0LT5nZXRDb250ZXh0
QXR0cmlidXRlcygpLmFscGhhKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDkxZDYwYWFlZDJmMDhh
YTI4MzVhMjU0YjMzOTFjYTMxZDkyYWJmN2MuLjgzMzUzNGM2YzZiOGQ5Y2E1MjMyYmU2YjdhY2Fl
MjNiZmVmNWI5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzaygpCiAgICAgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsK
IH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgIVVTRShDQUlSTykgJiYg
IVBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiAhVVNFKENBSVJPKQogUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIo
KSBjb25zdAogewogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAppbmRleCAyNjI2NDczZTllMDMyMTczOWFhOGJj
OWFmODE5NDI2NDBlYWQ2MTk1Li45N2NjNmQ0NTI2ZjIxMDM2YjFjYjY3NmYyYTRkMjMzYzZhMDc4
ODQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaApAQCAtMjksNiArMjksNCBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNh
aXJvLmgiCiAjZWxpZiBVU0UoV0lOR0RJKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YVdpbmNl
LmgiCi0jZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0
YUJsYWNrQmVycnkuaCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFBvaW50LmgKaW5kZXggZmUzM2Y0YzNmOGI4ZjFlMGU3YTIyMjYxNjhkZGJkM2Q5NDYzYTA2
OC4uMjc1YjczZjFiOGFjOTlhYmM1NzU5NGY3MWEzMDNjYzQ1YzNiYTU2MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCkBAIC00OSwxMiArNDksNiBAQCB0
eXBlZGVmIHN0cnVjdCB0YWdQT0lOVCBQT0lOVDsKIHR5cGVkZWYgc3RydWN0IHRhZ1BPSU5UUyBQ
T0lOVFM7CiAjZWxpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBfR2RrUG9pbnQgR2Rr
UG9pbnQ7Ci0jZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQotbmFtZXNwYWNlIEJsYWNrQmVycnkg
ewotbmFtZXNwYWNlIFBsYXRmb3JtIHsKLWNsYXNzIEludFBvaW50OwotfQotfQogI2VsaWYgUExB
VEZPUk0oRUZMKQogdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfUG9pbnQgRXZhc19Qb2ludDsKICNlbmRp
ZgpAQCAtMTI4LDkgKzEyMiw2IEBAIHB1YmxpYzoKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBJ
bnRQb2ludChjb25zdCBHZGtQb2ludCYpOwogICAgIG9wZXJhdG9yIEdka1BvaW50KCkgY29uc3Q7
Ci0jZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgIEludFBvaW50KGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpJbnRQb2ludCYpOwotICAgIG9wZXJhdG9yIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpJbnRQb2ludCgpIGNvbnN0OwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIGV4cGxpY2l0
IEludFBvaW50KGNvbnN0IEV2YXNfUG9pbnQmKTsKICAgICBvcGVyYXRvciBFdmFzX1BvaW50KCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRS
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKaW5kZXgg
NjIyMDUyOTA3YjM0OTc0MTM3YzUxNTM5Y2Y0Nzc0MjVhYTczNWViYy4uMGE2ZDRhYWRjNDk4YTZk
OTg4YWFiZjk3YmM4ZTA5NWQ1NDVlZGUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuaApAQCAtNTUsMTIgKzU1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dka1Jl
Y3RhbmdsZSBHZGtSZWN0YW5nbGU7CiAjZW5kaWYKICNlbGlmIFBMQVRGT1JNKEVGTCkKIHR5cGVk
ZWYgc3RydWN0IF9FaW5hX1JlY3RhbmdsZSBFaW5hX1JlY3RhbmdsZTsKLSNlbGlmIFBMQVRGT1JN
KEJMQUNLQkVSUlkpCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgUGxhdGZvcm0g
ewotY2xhc3MgSW50UmVjdDsKLX0KLX0KICNlbmRpZgogCiAjaWYgVVNFKENBSVJPKQpAQCAtMjA0
LDExICsxOTgsNiBAQCBwdWJsaWM6CiAjZW5kaWYKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQog
Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICBJbnRSZWN0KGNvbnN0IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpJbnRSZWN0Jik7Ci0gICAgb3BlcmF0b3IgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkludFJlY3QoKSBjb25zdDsKLSNlbmRpZgotCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OwogCiAgICAgc3RhdGljIEludFJlY3QgaW5maW5pdGVSZWN0KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKaW5kZXggOWM3ZTRkZTg3OGM0Yzg3
MTZmZWJlZTk3OGEyNDFlY2NiNjFkYTIyYS4uZDFkM2Q0NWVhZGM1YWNmZjAwZDU1Y2QwMTUyYWJj
MzZjMDE5NDNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50U2l6ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUu
aApAQCAtNDgsMTIgKzQ4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiAKICNp
ZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIHN0cnVjdCB0YWdTSVpFIFNJWkU7Ci0jZWxpZiBQTEFU
Rk9STShCTEFDS0JFUlJZKQotbmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFBsYXRm
b3JtIHsKLWNsYXNzIEludFNpemU7Ci19Ci19CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMTQ4LDExICsxNDIsNiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgU0laRSgpIGNvbnN0
OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgIEludFNpemUoY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFNpemUmKTsKLSAgICBvcGVyYXRvciBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6SW50U2l6ZSgpIGNvbnN0OwotI2VuZGlmCi0KICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggNmU0OGFiZDdkMTNlOGE1MDkx
ZmFlNjg4ZmZjNjY3YzFlZTUyNTVkNS4uODQ5NTMxNWM4ZmYxMWVlNmNmMGI2NTZiZmMzNWRhM2Rj
OGJmYjJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmNwcApAQCAtNzIsMTAgKzcyLDcgQEAKICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgIVVT
RShHU1RSRUFNRVIpCiAjaWYgVVNFKEFWRk9VTkRBVElPTikKICNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25DRi5oIgotI2VuZGlmCi0jZWxpZiBQTEFURk9STShCTEFDS0JF
UlJZKQotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaCIKLSNkZWZpbmUg
UGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBNZWRpYVBsYXllclByaXZhdGUKKyNlbmRpZiAv
LyBVU0UoQVZGT1VOREFUSU9OKQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCmluZGV4
IGEyYWIxMWVlMDg5ZDQ3ZGE4YTI0ZTI3NDdjMTUyZDQ3N2JjZGIzMzMuLmJkMmMzMjY3YjNlMmYz
OTJkYjE2MTkyZjcxOGIzYjUzNzI0YTU0MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaApAQCAtMzQsMTQgKzM0LDYgQEAgdHlwZWRl
ZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJbWFnZVJlZjsKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgog
I2VsaWYgVVNFKFdJTkdESSkKICNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKLSNlbGlmIFBMQVRG
T1JNKEJMQUNLQkVSUlkpCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgUGxhdGZv
cm0gewotbmFtZXNwYWNlIEdyYXBoaWNzIHsKLWNsYXNzIFRpbGVkSW1hZ2U7Ci19Ci19Ci19CiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTUsOCArNDcsNiBAQCB0eXBlZGVmIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IE5hdGl2ZUltYWdlUHRyOwogdHlwZWRlZiBQYXNzUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gUGFzc05hdGl2ZUltYWdlUHRyOwogI2VsaWYgVVNFKFdJTkdESSkK
IHR5cGVkZWYgUmVmUHRyPFNoYXJlZEJpdG1hcD4gTmF0aXZlSW1hZ2VQdHI7Ci0jZWxpZiBQTEFU
Rk9STShCTEFDS0JFUlJZKQotdHlwZWRlZiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OlRpbGVkSW1hZ2UqIE5hdGl2ZUltYWdlUHRyOwogI2VuZGlmCiAKICNpZiAhVVNFKENBSVJPKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGlt
cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oCmlu
ZGV4IDBjZDMyMDVjNzFjYzFmNTczYzg5NDVlZWVkZWYwM2ViOTQ1YTQ1ZGIuLmM0YzYwNDVjODY5
N2M1YWFkYmUwZmZkOGZlYjI3YjgwNWQ2NjQ4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTEVTU2hpbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5k
ZWYgT3BlbkdMRVNTaGltc19oCiAjZGVmaW5lIE9wZW5HTEVTU2hpbXNfaAogCi0jaWYgUExBVEZP
Uk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRG
T1JNKFdJTikgfHwgUExBVEZPUk0oTklYKQorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
RUZMKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkKICNkZWZpbmUgZ2xCaW5kRnJh
bWVidWZmZXJFWFQgZ2xCaW5kRnJhbWVidWZmZXIKICNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECiAjZGVmaW5lIGdsQmluZFJlbmRlcmJ1ZmZl
ckVYVCBnbEJpbmRSZW5kZXJidWZmZXIKQEAgLTUzLDcgKzUzLDcgQEAKICNkZWZpbmUgR0xfUkVB
RF9GUkFNRUJVRkZFUl9FWFQgMHg4Q0E4CiAjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhU
IDB4OENBOQogI2RlZmluZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0VYVCAw
eDkxMzQKLSNlbmRpZiAvLyBQTEFURk9STShCTEFDS0JFUlJZKQorI2VuZGlmCiAKICNlbmRpZiAv
LyBPcGVuR0xFU1NoaW1zX2gKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
LmNwcAppbmRleCAyYjA0OTUxN2Y3N2I4YmQ1OGRlZWU2OWIwNGNlZDcyODkxZTlkNTY3Li44OGQ0
NTNjM2E0MzY4ZjQzOTNkOTI0OTI3ZjYyNDAyNTU3NzUyMTNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgUGF0aDo6
YWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRv
cExlZnRSYWRpdXMsCiB2b2lkIFBhdGg6OmFkZFBhdGhGb3JSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRT
aXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBj
b25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzLCBSb3VuZGVkUmVjdFN0cmF0ZWd5IHN0
cmF0ZWd5KQogewogICAgIGlmIChzdHJhdGVneSA9PSBQcmVmZXJOYXRpdmVSb3VuZGVkUmVjdCkg
ewotI2lmIFVTRShDRykgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpZiBVU0UoQ0cpCiAgICAg
ICAgIHBsYXRmb3JtQWRkUGF0aEZvclJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnRSYWRpdXMsIHRv
cFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7CiAgICAg
ICAgIHJldHVybjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5o
CmluZGV4IGRiNjQ1ZTBjMGM3ZWE2MjM0ODY1MzE5NjU4M2UxZDUwMGRkYWJjNjEuLjE2MWY4NDZh
ZWU0ZDhiY2I3ZDg1NzBhODg5NzBkNzYyNzEwZGVmZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmgKQEAgLTQ0LDExICs0NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBQbGF0Zm9ybVBhdGg7CiB9CiB0eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3JtUGF0
aCBQbGF0Zm9ybVBhdGg7Ci0jZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQotbmFtZXNwYWNlIEJs
YWNrQmVycnkgeyBuYW1lc3BhY2UgUGxhdGZvcm0geyBuYW1lc3BhY2UgR3JhcGhpY3MgewotICAg
IGNsYXNzIFBhdGg7Ci19IH0gfQotdHlwZWRlZiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OlBhdGggUGxhdGZvcm1QYXRoOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCBQbGF0Zm9ybVBhdGg7
CiAjZW5kaWYKQEAgLTE0NiwxNCArMTQxLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBhZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBj
b25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9t
UmlnaHRSYWRpdXMsIFJvdW5kZWRSZWN0U3RyYXRlZ3kgPSBQcmVmZXJOYXRpdmVSb3VuZGVkUmVj
dCk7CiAgICAgICAgIHZvaWQgYWRkQmV6aWVyc0ZvclJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BS
aWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9h
dFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKTsKIAotI2lmIFVTRShDRykgfHwgUExBVEZPUk0oQkxB
Q0tCRVJSWSkKKyNpZiBVU0UoQ0cpCiAgICAgICAgIHZvaWQgcGxhdGZvcm1BZGRQYXRoRm9yUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVz
LCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRv
bUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgICAgICBQYXRoKGNvbnN0IFBsYXRmb3Jt
UGF0aCYpOwotI2VuZGlmCi0KICAgICBwcml2YXRlOgogICAgICAgICBQbGF0Zm9ybVBhdGhQdHIg
bV9wYXRoOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUxheWVyLmgKaW5kZXggODIzNDNjZjEzNTBkNzRiMDBiY2RmM2NkNzcxMzQxMzk5ZGU2
MWQ1My4uNDE5MDhlZjQwMzY3OWI1OTRhMjkwMGQ0ZjIxYjQ0NDVlNDA1NGQyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5ZXIuaApAQCAtNTEs
MTIgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXI7CiB0eXBlZGVmIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIFBsYXRmb3JtTGF5
ZXI7CiB9OwotI2VuZGlmCi0jZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQotbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgTGF5ZXJXZWJLaXRUaHJlYWQ7Ci10eXBlZGVmIExheWVyV2ViS2l0VGhy
ZWFkIFBsYXRmb3JtTGF5ZXI7Ci19CisjZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVSKQogI2Vs
c2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1MYXllcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0
ZWRQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAKaW5kZXggNzcwYTVlNWU1MWM5OWYzMTVj
NzdjZmE4NWUwNmRhNjhkNTBkMzI0Yy4uNTcxNmUxMGEzMDQwNzE5M2FkZWM1MDdkZTI4YTFlNWQw
OWNmNGM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0u
Y3BwCkBAIC02MDQsNyArNjA0LDcgQEAgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gQ3VzdG9tRmls
dGVyVmFsaWRhdGVkUHJvZ3JhbTo6dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSBjb24KICAgICByZXR1
cm4gQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8obV92YWxpZGF0ZWRWZXJ0ZXhTaGFkZXIsIG1fdmFs
aWRhdGVkRnJhZ21lbnRTaGFkZXIsIG1fcHJvZ3JhbUluZm8ucHJvZ3JhbVR5cGUoKSwgbV9wcm9n
cmFtSW5mby5taXhTZXR0aW5ncygpLCBtX3Byb2dyYW1JbmZvLm1lc2hUeXBlKCkpOwogfQogCi0j
aWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpICYmICFVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgIVVT
RShURVhUVVJFX01BUFBFUikKIHZvaWQgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTo6cGxh
dGZvcm1Jbml0KCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtLmgKaW5kZXggZWY3OTE5YWJjNjYxM2M3MjU0NDEyYmYyYWE2YjkwMWQ2ZmZmN2ExNy4uNjcw
NDJmMjRiYTc3ZGVlZTE0ZTZmYjVjMWI4NGUyYTcwY2QzZTY3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9D
dXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgKQEAgLTM4LDE0ICszOCw2IEBACiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0vLyBQ
bGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbSBkZWZpbmVzIGEgdHlwZSB0aGF0IGlzIGNvbXBhdGlibGUg
d2l0aCB0aGUgZnJhbWV3b3JrIHVzZWQgdG8gaW1wbGVtZW50IGFjY2VsZXJhdGVkIGNvbXBvc2l0
aW5nIG9uIGEgcGFydGljdWxhciBwbGF0Zm9ybS4KLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTGF5ZXJDb21waWxlZFByb2dyYW07Ci19Ci10eXBl
ZGVmIFdlYkNvcmU6OkxheWVyQ29tcGlsZWRQcm9ncmFtIFBsYXRmb3JtQ29tcGlsZWRQcm9ncmFt
OwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEFOR0xFU2hhZGVyU3lt
Ym9sOwpAQCAtODksNyArODEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ZhbGlkYXRl
ZEZyYWdtZW50U2hhZGVyOyAKICAgICB9CiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKSB8fCBV
U0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIFBsYXRmb3Jt
Q29tcGlsZWRQcm9ncmFtKiBwbGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbSgpOwogI2VuZGlmCiAKQEAg
LTExNyw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3ZhbGlkYXRlZEZyYWdtZW50
U2hhZGVyOwogCiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbT4gbV9jb21w
aWxlZFByb2dyYW07Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorI2lmIFVTRShURVhUVVJFX01BUFBFUikKICAgICBQbGF0Zm9ybUNvbXBpbGVkUHJvZ3Jh
bSogbV9wbGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24u
aAppbmRleCAxM2E0ZGUwNzM5Njc4MGY1MWE1MzhjMTY2NGZjYTkyYjJkMjlkMWViLi42NDE4MDg1
ODRhNmM0YmI3NWZiNjEwZDcxMjNiMTI0NWVhNjU0ZTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgK
QEAgLTM3LDEwICszNyw2IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0jZW5kaWYKLQogLy8gQW5ub3lpbmds
eSwgd2luZ2RpLmggI2RlZmluZXMgdGhpcy4KICNpZmRlZiBQQVNTVEhST1VHSAogI3VuZGVmIFBB
U1NUSFJPVUdICkBAIC01NCwxMSArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBD
YWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQkxBQ0tC
RVJSWSkKLWNsYXNzIEZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxGaWx0ZXJPcGVyYXRpb24+IHsKLSNlbHNlCiBjbGFzcyBGaWx0ZXJPcGVyYXRpb24gOiBwdWJs
aWMgUmVmQ291bnRlZDxGaWx0ZXJPcGVyYXRpb24+IHsKLSNlbmRpZgogcHVibGljOgogICAgIGVu
dW0gT3BlcmF0aW9uVHlwZSB7CiAgICAgICAgIFJFRkVSRU5DRSwgLy8gdXJsKCNzb21lZmlsdGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdp
bmdCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdp
bmdCdWZmZXIuY3BwCmluZGV4IGIwZDJjZGM1NzBlZTk3MWYyMDk0NjNkZTY1NzViOTA5OGI0NWVm
OTYuLjJiOTZjYjU5NGNiZTczZTU2ZDE2N2RhZDBjOTZjZjRiMDJiNTg4YWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5j
cHAKQEAgLTg5LDkgKzg5LDcgQEAgRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQogLy8g
R2xvYmFsIHJlc291cmNlIGNlaWxpbmcgKGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiBwaXhlbHMpIGZv
ciBEcmF3aW5nQnVmZmVyIGNyZWF0aW9uIGFuZCByZXNpemUuCiAvLyBXaGVuIHRoaXMgbGltaXQg
aXMgc2V0LCBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoKSBhbmQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQo
KSBjYWxscyB0aGF0IHdvdWxkCiAvLyBleGNlZWQgdGhlIGdsb2JhbCBjYXAgd2lsbCBpbnN0ZWFk
IGNsZWFyIHRoZSBidWZmZXIuCi0jaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCiBzdGF0aWMgaW50
IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0gMDsKLSNlbmRpZgogc3RhdGljIGludCBzX2N1
cnJlbnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CiBzdGF0aWMgY29uc3QgZmxvYXQgc19yZXNvdXJj
ZUFkanVzdGVkUmF0aW8gPSAwLjU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5jcHAKaW5kZXggMDA2MDJlMzRlZjIwMzU0ZmE4ZmQ1NGI0MzRlM2VmMmIzMTRmZTUxZS4uODQ4
OTk2Njc1NDJiNjhkOWI4NGI1Y2Y1ODE0NmVlMTgyYmU4ODI3YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTMyLDEwICszMiw2IEBACiAjaW5jbHVkZSAiQU5H
TEVXZWJLaXRCcmlkZ2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCi0jaWYg
UExBVEZPUk0oQkxBQ0tCRVJSWSkKLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4K
LSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPE9wZW5HTEVTL0VTMi9nbGV4
dC5oPgogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCmluZGV4IDIzZjNiOWNj
NmQ1NzVmOTFiZjNiNDhjNTI3MzgzNTMwOWIzNTUxZTUuLmRjOWU1OTI1MjEzZTk0OGI4ZjJiNTI5
ZGE4YmRlZWQ5ZDdkOWIzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApAQCAt
MzMsMTAgKzMzLDYgQEAKICNpbmNsdWRlIDxFR0wvZWdsLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1Mb2cuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKQEAgLTE3NiwxMSArMTcyLDYgQEAgaW50IEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpnZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCkKICAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICAgICAgaW50IHJlYXNvbkZvclJlc2V0ID0gbV9nbEdldEdyYXBoaWNzUmVzZXRT
dGF0dXNFWFQoKTsKICAgICAgICAgaWYgKHJlYXNvbkZvclJlc2V0ICE9IEdMX05PX0VSUk9SKSB7
Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICAgICAgICAgIC8vIFdlIGNhbm5vdCB5ZXQg
cmVjcmVhdGUgb3VyIGNvbXBvc2l0aW5nIHRocmVhZCwgc28ganVzdCBxdWl0LgotICAgICAgICAg
ICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZ0Fsd2F5cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
TG9nTGV2ZWxDcml0aWNhbCwgIlJvYnVzdCBPcGVuR0wgY29udGV4dCBoYXMgYmVlbiByZXNldC4g
QWJvcnRpbmcuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotI2VuZGlmCiAgICAgICAgICAgICBB
U1NFUlQobV9jb250ZXh0TG9zdENhbGxiYWNrKTsKICAgICAgICAgICAgIGlmIChtX2NvbnRleHRM
b3N0Q2FsbGJhY2spCiAgICAgICAgICAgICAgICAgbV9jb250ZXh0TG9zdENhbGxiYWNrLT5vbkNv
bnRleHRMb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCmluZGV4IGU0MTFmYmVmNTdh
MzE1YjkwMDM1MGFkNGUzZjVjZGY2ZTk4NDMyZDQuLjMyNmQyOTI1MzE2YjMwN2YxMTAxMDIyNjZm
MzVlYjhhNjU0NTljNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCkBAIC0zMiwxMyAr
MzIsNiBAQAogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5o
PgogCi0jaWYgT1MoUU5YKQotLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MTAzMC4KLS8vIE5ld2VyIEtob3JvbnMgaGVhZGVycyBkbyBkZWZpbmUgdGhlc2Ug
d2l0aCBhIFBST0Mgc3VmZml4LCBidXQgb2xkZXIgaGVhZGVycyBkb24ndC4KLSNkZWZpbmUgUEZO
R0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HIFBGTkdMRlJBTUVCVUZGRVJURVhU
VVJFMkRNVUxUSVNBTVBMRUlNR1BST0MKLSNkZWZpbmUgUEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdF
TVVMVElTQU1QTEVJTUcgUEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUdQUk9D
Ci0jZW5kaWYKLQogI2lmbmRlZiBHTF9FWFRfcm9idXN0bmVzcwogLyogcmV1c2UgR0xfTk9fRVJS
T1IgKi8KICNkZWZpbmUgR0xfR1VJTFRZX0NPTlRFWFRfUkVTRVRfRVhUIDB4ODI1MwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggODBlYTgwM2Rj
Njg4ZGFlMTE0OWZjMDY4ZmNhNmVjZTgzZDhhODdhNy4uNzMwNTM4OGQzYzM0ZDdkYzgxNjhhZjEz
MTMyM2ZkZDUxMWQxMTYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24uY3BwCkBAIC03MiwxMCArNzIsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIFBM
QVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgU2hhZGVyTmFtZUhhc2gqIGN1
cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcjsKQEAgLTE2NCw3ICsxNjAsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIsCiAgICAgICAgIH0KICAgICB9CiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZ
KSB8fCBVU0UoQ0cpCisjaWYgVVNFKENHKQogICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgp
LCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LAogICAgICAgICAgICAgICAgICAgaW1h
Z2VCdWZmZXItPmludGVybmFsU2l6ZSgpLndpZHRoKCksIGltYWdlQnVmZmVyLT5pbnRlcm5hbFNp
emUoKS5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CiAjZWxzZQpAQCAtMjAzLDcg
KzE5OSw2IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luCiAgICAgcmV0dXJuIGltYWdlRGF0YS5y
ZWxlYXNlKCk7CiB9CiAKLSNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKIHsKICAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQp
CkBAIC0yMjgsNyArMjIzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1
cmUoKQogICAgIDo6Z2xGaW5pc2goKTsKICAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7CiB9
Ci0jZW5kaWYKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMo
dW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKIHsKQEAgLTM5OSwxMSArMzkz
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBm
Ym8gPSBidWZmZXI7CiAgICAgZWxzZQotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgICAg
IGZibyA9IG1fZmJvOwotI2Vsc2UKICAgICAgICAgZmJvID0gKG1fYXR0cnMuYW50aWFsaWFzID8g
bV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKLSNlbmRpZgogICAgIGlmIChmYm8gIT0gbV9zdGF0
ZS5ib3VuZEZCTykgewogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZmJv
KTsKICAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IGZibzsKQEAgLTU2Miw5ICs1NTIsNiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQogICAgIGlmIChHTENvbXBpbGVTdWNjZXNzICE9IEdMX1RSVUUpIHsKICAgICAgICAgZW50
cnkuaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRy
YW5zbGF0b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUu
Iik7Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkgJiYgIWRlZmluZWQoTkRFQlVHKQotICAgICAg
ICBCQkxPRyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxXYXJuLCAiVGhlIHNoYWRlciB2
YWxpZGF0ZWQsIGJ1dCBkaWRuJ3QgY29tcGlsZS5cbiIpOwotI2VuZGlmCiAgICAgfQogCiAgICAg
bV9zaGFkZXJTeW1ib2xDb3VudCA9IG51bGxwdHI7CkBAIC01NzMsMzMgKzU2MCwyNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
KQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIp
CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkp
CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0
aXNhbXBsZUZCTykgewogICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KElu
dFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIH0KLSNlbmRp
ZgogICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkK
ICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRp
c2FtcGxlRkJPKQogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0jZW5kaWYKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBpZiAobV9h
dHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7
CiAgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3
aWR0aCwgaGVpZ2h0KSk7CiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgfQotI2VuZGlmCiAgICAgOjpnbENv
cHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQpOwotI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCiAgICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX211bHRpc2FtcGxlRkJPKTsKLSNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMRVMuY3BwCmluZGV4IGE3NDkzOTAyYWVmYjU5NmQ0ZDBhZDg2YzUzMzk2YjM0YjI5ZmUxMzIu
LmEzZWM4MWFjZjU1OWIwODYzODU0MWQ4ZDdhZTRiN2Q2NjQ1NDk2YjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTEVTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKQEAgLTM1LDkgKzM1LDYgQEAKICNpbmNsdWRl
ICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSNpbmNsdWRlICJMYXllcldl
YktpdFRocmVhZC5oIgotI2VuZGlmCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNTQsMTUgKzUxLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2kKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBk
cml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcg
Y2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgogICAgIDo6Z2xGbHVz
aCgpOwotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgaWYgKG1faXNJbWFnaW5hdGlvbkhh
cmR3YXJlICYmIG1fZmJvID09IG1fc3RhdGUuYm91bmRGQk8pIHsKLSAgICAgICAgLy8gRklYTUU6
IFRoaXMgd29ya2Fyb3VuZCBzaG91bGQgYWx3YXlzIGJlIHVzZWQgdW50aWwgdGhlCi0gICAgICAg
IC8vIGRyaXZlciBhbGlnbm1lbnQgYnVnIGlzIGZpeGVkLCBldmVuIHdoZW4gd2UgYXJlbid0Ci0g
ICAgICAgIC8vIGRyYXdpbmcgdG8gdGhlIGNhbnZhcy4KLSAgICAgICAgcmVhZFBpeGVsc0lNRyh4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotICAgIH0gZWxzZQotICAg
ICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRh
dGEpOwotI2Vsc2UKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZC
TyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CkBAIC03MywyMiArNjEsMTEgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2kKIAogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBt
X3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCiAgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotI2VuZGlmCiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNl
c3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIq
IHBpeGVscykKIHsKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgIGlmIChtX2lzSW1hZ2lu
YXRpb25IYXJkd2FyZSAmJiBtX2ZibyA9PSBtX3N0YXRlLmJvdW5kRkJPKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBUaGlzIHdvcmthcm91bmQgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIHVudGlsIHRoZQot
ICAgICAgICAvLyBkcml2ZXIgYWxpZ25tZW50IGJ1ZyBpcyBmaXhlZCwgZXZlbiB3aGVuIHdlIGFy
ZW4ndAotICAgICAgICAvLyBkcmF3aW5nIHRvIHRoZSBjYW52YXMuCi0gICAgICAgIHJlYWRQaXhl
bHNJTUcoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4
ZWxzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhl
aWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKLSNlbHNlCiAgICAgOjpn
bFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgcGl4ZWxzKTsKLSNlbmRpZgogICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQg
KiA0OwogICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpIHsKICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCkBAIC05Niw4ICs3Myw2IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgs
IGludCB5LCBpbnQKICAgICB9CiB9CiAKLSNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkKLS8vIFRo
ZSBCbGFja0JlcnJ5IHBvcnQgdXNlcyBhIHNwZWNpYWwgaW1wbGVtZW50YXRpb24gb2YgcmVzaGFw
ZUZCT3MuIFNlZSBHcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCiBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGNvbnN0
IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKQEAgLTE2OSw3ICsxNDQsNiBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogCiAgICAgcmV0
dXJuIG11c3RSZXN0b3JlRkJPOwogfQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRl
Tm90aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRl
Tm90aWZpZXIuaAppbmRleCBmOWY2MWQ1Y2UzMzFjOGFlNDY5MjAxMDQ2ZGRjMTgwNzJkZGE0OTJk
Li43MzExNmQ0NmEzNzVjYmU1MDBjZGM3YzM4MmVjNDIwM2ViOGE2OGMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5o
CkBAIC02NywxMCArNjcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc09uTGluZShib29sKTsK
ICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICB2b2lkIG5ldHdvcmtTdGF0
ZUNoYW5nZShib29sIG9ubGluZSk7Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBib29sIG1faXNP
bkxpbmU7CiAgICAgVmVjdG9yPE5ldHdvcmtTdGF0ZUNoYW5nZUxpc3RlbmVyPiBtX2xpc3RlbmVy
czsKQEAgLTEwNCw3ICsxMDAsNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi0jaWYgIVBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpICYmICFQ
TEFURk9STShFRkwpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFdJTikgJiYgIVBM
QVRGT1JNKEVGTCkKIAogaW5saW5lIE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpOZXR3b3JrU3RhdGVO
b3RpZmllcigpCiAgICAgOiBtX2lzT25MaW5lKHRydWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKaW5kZXggMjE5ZTQ3ZTQ5Y2ZlOWFlNTRm
YTlhMWEwNGY2OGViNmE3NDFmYmUwZC4uNWI2MWNhZGJhMGQ0OTNiYTUxNzdkODZkNjEyNjExOTcz
ZTk0YzY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuaApAQCAtMTcwLDcgKzE3MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBD
QUxMQkFDSyBpbnRlcm5ldFN0YXR1c0NhbGxiYWNrKEhJTlRFUk5FVCwgRFdPUkRfUFRSLCBEV09S
RCwgTFBWT0lELCBEV09SRCk7CiAjZW5kaWYKIAotI2lmIFVTRShDVVJMKSB8fCBVU0UoU09VUCkg
fHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpZiBVU0UoQ1VSTCkgfHwgVVNFKFNPVVApCiAgICAg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZ2V0SW50ZXJuYWwoKSB7IHJldHVybiBkLmdldCgpOyB9
CiAjZW5kaWYKIApAQCAtMjIzLDEwICsyMjMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldERl
ZmVyc0xvYWRpbmcoYm9vbCk7CiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgIHZvaWQg
cGF1c2VMb2FkKGJvb2wpOyAvLyBGSVhNRTogSG93IGlzIHRoaXMgZGlmZmVyZW50IGZyb20gc2V0
RGVmZXJzTG9hZGluZygpPwotI2VuZGlmCi0KICAgICB2b2lkIGRpZENoYW5nZVByaW9yaXR5KFJl
c291cmNlTG9hZFByaW9yaXR5KTsKIAogICAgIFJlc291cmNlUmVxdWVzdCYgZmlyc3RSZXF1ZXN0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbC5oCmluZGV4IDhhNWUxZWM3NjBjYjI1NGIzMzVhZWI0MDdiZTc0NTcy
NGZjNDAxZjguLjc2NzFhMWU5MThkNjEyMDg0NGIzYTRjMTY2MDhiZDcwNGFlYjc4NDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbC5oCkBAIC0yMTcsMTMgKzIxNyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqbV9jdXJyZW50TWFjQ2hhbGxlbmdl
OwogI2VuZGlmCiAgICAgICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIG1fY3VycmVudFdlYkNo
YWxsZW5nZTsKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAgICAgICAvLyBXZSBuZWVkIHRv
IHN0b3JlIHRoZSBjcmVkZW50aWFscyBmb3IgaG9zdCBhbmQgcHJveHkgc2VwYXJhdGVseSBmb3Ig
dGhlIHBsYXRmb3JtCi0gICAgICAgIC8vIG5ldHdvcmtpbmcgbGF5ZXIuIE9uZSBvZiB0aGVzZSB3
aWxsIGFsd2F5cyBiZSBlcXVhbCB0byBtX2N1cnJlbnRXZWJDaGFsbGVuZ2UuCi0gICAgICAgIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIG1faG9zdFdlYkNoYWxsZW5nZTsKLSAgICAgICAgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgbV9wcm94eVdlYkNoYWxsZW5nZTsKLSNlbmRpZgotCiAgICAgICAg
IFJlc291cmNlSGFuZGxlOjpGYWlsdXJlVHlwZSBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlOwogICAg
ICAgICBUaW1lcjxSZXNvdXJjZUhhbmRsZT4gbV9mYWlsdXJlVGltZXI7CiAgICAgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJh
c2UuY3BwCmluZGV4IDBlZDgyODk5M2ExZGI2OTI2YTQxZmIyYzBlNWExZTU5ZTRiNjIzZjIuLmE5
NTZiYjhjMDE1ZjUxMDdkYTBiMGVhZmQzYTNmMmE2YzYzNzBiMjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcApA
QCAtNTIzLDcgKzUyMyw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6dXBkYXRlUmVzb3Vy
Y2VSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5IGJvZHlQb2xpY3kpCiAgICAgfQogfQogCi0j
aWYgIVBMQVRGT1JNKE1BQykgJiYgIVVTRShDRk5FVFdPUkspICYmICFVU0UoU09VUCkgJiYgIVBM
QVRGT1JNKEJMQUNLQkVSUlkpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVVTRShDRk5FVFdPUksp
ICYmICFVU0UoU09VUCkKIHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25D
b3VudFBlckhvc3QoKQogewogICAgIC8vIFRoaXMgaXMgdXNlZCBieSB0aGUgbG9hZGVyIHRvIGNv
bnRyb2wgdGhlIG51bWJlciBvZiBpc3N1ZWQgcGFyYWxsZWwgbG9hZCByZXF1ZXN0cy4gCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0NvbW1vbi5jbWFrZSBiL1NvdXJjZS9jbWFrZS9P
cHRpb25zQ29tbW9uLmNtYWtlCmluZGV4IDM2OTUyNmQxYzFhMDM4ZjMwYmIwNDE0YWVlYTNmNGEw
YTk3MzU1ZTkuLjlmYTQ0YTI0MzI3YTBjOTUwZTIwNGYxMGJiZDg4NDMxNjQzYjgyZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQ29tbW9uLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFr
ZS9PcHRpb25zQ29tbW9uLmNtYWtlCkBAIC0xNyw5ICsxNyw2IEBAIGlmIChNU1ZDKQogICAgIGdl
dF9maWxlbmFtZV9jb21wb25lbnQoQ09ERV9HRU5FUkFUT1JfUFJFUFJPQ0VTU09SX0VYRUNVVEFC
TEUgJHtDTUFLRV9DWFhfQ09NUElMRVJ9IE5BTUUpCiAgICAgc2V0KENPREVfR0VORVJBVE9SX1BS
RVBST0NFU1NPUiAiJHtDT0RFX0dFTkVSQVRPUl9QUkVQUk9DRVNTT1JfRVhFQ1VUQUJMRX0gL25v
bG9nbyAvRVAiKQogICAgIHNldChDT0RFX0dFTkVSQVRPUl9QUkVQUk9DRVNTT1JfV0lUSF9MSU5F
TUFSS0VSUyAiJHtDT0RFX0dFTkVSQVRPUl9QUkVQUk9DRVNTT1J9IikKLWVsc2VpZiAoQ01BS0Vf
U1lTVEVNX05BTUUgTUFUQ0hFUyBRTlgpCi0gICAgc2V0KENPREVfR0VORVJBVE9SX1BSRVBST0NF
U1NPUiAiJHtDTUFLRV9DWFhfQ09NUElMRVJ9IC1FIC1XcCwtUCAteCBjKysiKQotICAgIHNldChD
T0RFX0dFTkVSQVRPUl9QUkVQUk9DRVNTT1JfV0lUSF9MSU5FTUFSS0VSUyAiJHtDT0RFX0dFTkVS
QVRPUl9QUkVQUk9DRVNTT1J9IikKIGVsc2UgKCkKICAgICBzZXQoQ09ERV9HRU5FUkFUT1JfUFJF
UFJPQ0VTU09SICIke0NNQUtFX0NYWF9DT01QSUxFUn0gLUUgLVAgLXggYysrIikKICAgICBzZXQo
Q09ERV9HRU5FUkFUT1JfUFJFUFJPQ0VTU09SX1dJVEhfTElORU1BUktFUlMgIiR7Q01BS0VfQ1hY
X0NPTVBJTEVSfSAtRSAteCBjKysiKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IGNkNjUwYmUxYjJhY2VhODYzMDExNTMwZTBlNTMzOThiMDRkNTRm
ZTcuLmQyZTcyZmM4ZTIwNTI5YzY1ZTI5YjFmNzg5N2JlOWUzNWIxOTc4ZmMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxNC0wMS0xMCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW1vdmUgdGhlIEJsYWNrQmVycnkgcG9ydCBmcm9tIHRydW5rCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY3MTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBS
ZW5kZXJUcmVlLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5j
cHA6CisKIDIwMTQtMDEtMTAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KIAogICAgICAgICBNb3ZlIHBsYXRmb3JtTmFtZSBwcm9wZXJ0eSBmcm9tIHRlc3RS
dW5uZXIgdG8gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS5oCmluZGV4IDQ3Zjg4ZTU4ZjUwYzhmMDlmNDM5M2U2YjRjZDdhOGVmNmU5NTY0NTIu
LjNlNjMyMzUyNTQyMDdlM2YxMTE4NjRlZjMwYzhlY2Y2ZTM4ZjQ5ZDUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvRHVtcFJlbmRlclRyZWUuaApAQCAtNDIsOCArNDIsNiBAQAogI2luY2x1ZGUgIkR1bXBS
ZW5kZXJUcmVlR3RrLmgiCiAjZWxpZiBQTEFURk9STShFRkwpCiAjaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWVFZmwuaCIKLSNlbGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWVCbGFja0JlcnJ5LmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgPHN0cmluZz4KZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAKaW5kZXggMTY1MjkxMTc0MTE5MzIw
YTY4ZWY5MDBlODJlOTczZjg1ODk1MzFhNy4uMjgzMjkwMWFhM2U3MmNjMTdlOTYwNmM5ODFiMzdj
ZjgyMGQzZTcwMCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3Vw
cG9ydC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAK
QEAgLTQxLDggKzQxLDYgQEAKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIKICNlbGlm
IFVTRShDQUlSTykKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCIKLSNlbGlmIFBM
QVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydEJsYWNrQmVycnku
aCIKICNlbmRpZgogCiB2b2lkIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVj
dGVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZEhhc2gpCmRpZmYgLS1naXQgYS9DTWFrZUxp
c3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0CmluZGV4IDMxMjkwYTE3YmI0MTBjOGFkYWMzZGNjM2Yx
OTAwNDU4ZGIyOTljZTMuLjM5NzU2ZDRjNTRjOGM3NjU0NmRjZDBlMTgwNmIxYmQ0YjVjYjdkZTAg
MTAwNjQ0Ci0tLSBhL0NNYWtlTGlzdHMudHh0CisrKyBiL0NNYWtlTGlzdHMudHh0CkBAIC0xMDAs
OSArMTAwLDYgQEAgaWYgKFVOSVgpCiAgICAgZW5kaWYgKCkKIGVsc2VpZiAoQ01BS0VfU1lTVEVN
X05BTUUgTUFUQ0hFUyAiV2luZG93cyIpCiAgICAgc2V0KFdURl9PU19XSU5ET1dTIDEpCi1lbHNl
aWYgKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIlFOWCIpCi0gICAgc2V0KFdURl9PU19RTlgg
MSkKLSAgICBzZXQoV1RGX09TX1VOSVggMSkKIGVsc2UgKCkKICAgICBtZXNzYWdlKEZBVEFMX0VS
Uk9SICJVbmtub3duIE9TICcke0NNQUtFX1NZU1RFTV9OQU1FfSciKQogZW5kaWYgKCkKZGlmZiAt
LWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4ODBhNjc5ZWMyOGMyYzEwNDI2YjE3
YTVlMmIwNDM1ZTVhM2ZhODMzLi4yN2E1OGYwMDBlNTAwY2ExYWIwNWQ2Yzg1MjllMDRhNjkyYmQy
NDFhIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTQtMDEtMTAgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVtb3ZlIHRoZSBCbGFja0JlcnJ5IHBvcnQgZnJvbSB0cnVuaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NzE1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0NvbW1vbi5jbWFrZToKKwogMjAxNC0wMS0x
MCAgVGFtYXMgR2VyZ2VseSAgPHRnZXJnZWx5LnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3VuZy5jb20+
CiAKICAgICAgICAgW0VGTF1bSlNDXSBFbmFibGUgdWRpczg2IGRpc2Fzc2VtYmxlciBvbiBlZmwu
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>