<?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>204679</bug_id>
          
          <creation_ts>2019-11-28 05:45:31 -0800</creation_ts>
          <short_desc>[GTK][WPE] Add initial API for input method</short_desc>
          <delta_ts>2019-12-19 05:54:32 -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>WebKitGTK</component>
          <version>WebKit 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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1594021</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-11-28 05:45:31 -0800</bug_when>
    <thetext>In the case of GTK port, it allows to use a custom IM instead of GtkIMContext that it&apos;s still used by default. In the case of WPE it bring IM support, but there&apos;s no default implementation so applications need to provide their own.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594023</commentid>
    <comment_count>1</comment_count>
      <attachid>384451</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-11-28 06:16:35 -0800</bug_when>
    <thetext>Created attachment 384451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594024</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-11-28 06:17:34 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600240</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-12-19 05:54:32 -0800</bug_when>
    <thetext>Committed r253749: &lt;https://trac.webkit.org/changeset/253749&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384451</attachid>
            <date>2019-11-28 06:16:35 -0800</date>
            <delta_ts>2019-12-19 03:29:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-ime-api.diff</filename>
            <type>text/plain</type>
            <size>207307</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyMWRkNjVkNjJkZC4uZTRlODM5NmVkNjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxOS0xMS0yOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBBZGQgaW5pdGlhbCBBUEkgZm9yIGlucHV0
IG1ldGhvZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA0Njc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaDogQWxzbyBkZWZpbmUgaGFuZGxlZEJ5
SW5wdXRNZXRob2QoKSBmb3IgV1BFIHBvcnQuCisKIDIwMTktMTEtMjcgIHlvdWVubiBmYWJsZXQg
IDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFByb3RlY3QgU2VydmljZVdvcmtlclRocmVh
ZFByb3h5IHdoaWxlIGJlaW5nIHN0b3BwZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKaW5kZXggNGFhZjViZGUzMmIuLjk0MDY3MzY2ZDk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaApA
QCAtMTA4LDcgKzEwOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHdpbmRv
d3NWaXJ0dWFsS2V5Q29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93c1ZpcnR1YWxLZXlDb2Rl
OyB9CiAgICAgICAgIHZvaWQgc2V0V2luZG93c1ZpcnR1YWxLZXlDb2RlKGludCBjb2RlKSB7IG1f
d2luZG93c1ZpcnR1YWxLZXlDb2RlID0gY29kZTsgfQogCi0jaWYgVVNFKEFQUEtJVCkgfHwgVVNF
KFVJS0lUX0tFWUJPQVJEX0FERElUSU9OUykgfHwgUExBVEZPUk0oR1RLKQorI2lmIFVTRShBUFBL
SVQpIHx8IFVTRShVSUtJVF9LRVlCT0FSRF9BRERJVElPTlMpIHx8IFBMQVRGT1JNKEdUSykgfHwg
VVNFKExJQldQRSkKICAgICAgICAgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCgpIGNvbnN0IHsg
cmV0dXJuIG1faGFuZGxlZEJ5SW5wdXRNZXRob2Q7IH0KICNlbmRpZgogI2lmIFVTRShBUFBLSVQp
CkBAIC0xNzAsNyArMTcwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAg
IFN0cmluZyBtX2tleUlkZW50aWZpZXI7CiAgICAgICAgIGludCBtX3dpbmRvd3NWaXJ0dWFsS2V5
Q29kZTsKLSNpZiBVU0UoQVBQS0lUKSB8fCBVU0UoVUlLSVRfS0VZQk9BUkRfQURESVRJT05TKSB8
fCBQTEFURk9STShHVEspCisjaWYgVVNFKEFQUEtJVCkgfHwgVVNFKFVJS0lUX0tFWUJPQVJEX0FE
RElUSU9OUykgfHwgUExBVEZPUk0oR1RLKSB8fCBVU0UoTElCV1BFKQogICAgICAgICBib29sIG1f
aGFuZGxlZEJ5SW5wdXRNZXRob2QgeyBmYWxzZSB9OwogI2VuZGlmCiAjaWYgVVNFKEFQUEtJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMTI2ZjZlMGU2NmYuLmEzY2VkMGNkNWZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE3MiBAQAorMjAxOS0xMS0yOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBBZGQgaW5pdGlhbCBBUEkgZm9yIGlucHV0IG1l
dGhvZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0
Njc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4g
dGhlIGNhc2Ugb2YgR1RLIHBvcnQsIGl0IGFsbG93cyB0byB1c2UgYSBjdXN0b20gSU0gaW5zdGVh
ZCBvZiBHdGtJTUNvbnRleHQgdGhhdCBpdCdzIHN0aWxsIHVzZWQgYnkKKyAgICAgICAgZGVmYXVs
dC4gSW4gdGhlIGNhc2Ugb2YgV1BFIGl0IGJyaW5ncyBJTSBzdXBwb3J0LCBidXQgdGhlcmUncyBu
byBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNvIGFwcGxpY2F0aW9ucyBuZWVkIHRvCisgICAgICAg
IHByb3ZpZGUgdGhlaXIgb3duLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZCBu
ZXcgcHVibGljIGhlYWRlciBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQuaC4KKyAgICAgICAgKiBQ
bGF0Zm9ybVdQRS5jbWFrZTogRGl0dG8uCisgICAgICAgICogU2hhcmVkL0VkaXRvclN0YXRlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjplbmNvZGUg
Y29uc3QpOiBFbmNvZGUgY2FyZXRSZWN0QXRTdGFydCBmb3IgV1BFIHRvby4KKyAgICAgICAgKFdl
YktpdDo6RWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjpkZWNvZGUpOiBEZWNvZGUgY2FyZXRS
ZWN0QXRTdGFydCBmb3IgV1BFIHRvby4KKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I8PCk6IER1
bXAgY2FyZXRSZWN0QXRTdGFydCBmb3IgV1BFIHRvby4KKyAgICAgICAgKiBTaGFyZWQvRWRpdG9y
U3RhdGUuaDogRGVmaW5lIGNhcmV0UmVjdEF0U3RhcnQgZm9yIFdQRSB0b28uCisgICAgICAgICog
U2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZl
V2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCk6IFJlbW92ZSBGYWtlZEZv
ckNvbXBvc2l0aW9uIHBhcmFtZXRlciBmb3IgR1RLIGFuZCBhZGQKKyAgICAgICAgSGFuZGxlZEJ5
SW5wdXRNZXRob2QgdG8gV1BFLgorICAgICAgICAqIFNoYXJlZC9XZWJFdmVudC5oOgorICAgICAg
ICAqIFNoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2V5
Ym9hcmRFdmVudDo6V2ViS2V5Ym9hcmRFdmVudCk6IEFkZCBoYW5kbGVkQnlJbnB1dE1ldGhvZCBw
YXJhbWV0ZXIgZm9yIFdQRS4KKyAgICAgICAgKFdlYktpdDo6V2ViS2V5Ym9hcmRFdmVudDo6ZW5j
b2RlIGNvbnN0KTogRW5jb2RlIG1faGFuZGxlZEJ5SW5wdXRNZXRob2QgaW4gV1BFIHRvby4KKyAg
ICAgICAgKFdlYktpdDo6V2ViS2V5Ym9hcmRFdmVudDo6ZGVjb2RlKTogRGVjb2RlIG1faGFuZGxl
ZEJ5SW5wdXRNZXRob2QgaW4gV1BFIHRvby4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL05hdGl2ZVdl
YktleWJvYXJkRXZlbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50KTogUmVtb3ZlIEZha2VkRm9yQ29tcG9zaXRp
b24gYW5kIHRoZSByZWR1bmRhbnQgbWVtYmVycworICAgICAgICB0aGF0IGFyZSBhbHJlYWR5IGlu
IHRoZSBiY2FzZSBjbGFzcyBvciBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAqIFNoYXJlZC9s
aWJ3cGUvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudExpYldQRS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQpOiBBZGQgdGV4
dCBhbmQgaGFuZGxlZEJ5SW5wdXRNZXRob2QgcGFyYW1ldGVycworICAgICAgICAqIFNoYXJlZC9s
aWJ3cGUvV2ViRXZlbnRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0
b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KTogVXNlIHRoZSBnaXZlbiB0ZXh0IGlmIG5vdCBu
dWxsIGFuZCBwYXNzIGhhbmRsZWRCeUlucHV0TWV0aG9kLAorICAgICAgICB0byBXZWJLZXlib2Fy
ZEV2ZW50LgorICAgICAgICAqIFNoYXJlZC9saWJ3cGUvV2ViRXZlbnRGYWN0b3J5Lmg6CisgICAg
ICAgICogU291cmNlc0dUSy50eHQ6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAg
ICAgICogU291cmNlc1dQRS50eHQ6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xp
Yi9JbnB1dE1ldGhvZEZpbHRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1l
dGhvZEZpbHRlcjo6fklucHV0TWV0aG9kRmlsdGVyKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRN
ZXRob2RGaWx0ZXI6OnByZWVkaXRTdGFydGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpJ
bnB1dE1ldGhvZEZpbHRlcjo6cHJlZWRpdENoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJL
aXQ6OklucHV0TWV0aG9kRmlsdGVyOjpwcmVlZGl0RmluaXNoZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpjb21taXR0ZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpzZXRDb250ZXh0KToKKyAgICAgICAgKFdlYktp
dDo6SW5wdXRNZXRob2RGaWx0ZXI6OnNldEVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpJbnB1
dE1ldGhvZEZpbHRlcjo6ZmlsdGVyS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1l
dGhvZEZpbHRlcjo6aXNWaWV3Rm9jdXNlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OklucHV0
TWV0aG9kRmlsdGVyOjpub3RpZnlGb2N1c2VkSW4pOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1l
dGhvZEZpbHRlcjo6bm90aWZ5Rm9jdXNlZE91dCk6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0
aG9kRmlsdGVyOjpub3RpZnlDdXJzb3JSZWN0KToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRo
b2RGaWx0ZXI6OnByZWVkaXRTdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RG
aWx0ZXI6OnByZWVkaXRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0
ZXI6OnByZWVkaXRGaW5pc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVy
Ojpjb21taXR0ZWQpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6Y2FuY2Vs
Q29tcG9zaXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9JbnB1dE1ldGhvZEZp
bHRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRJbnB1dE1ldGhv
ZENvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdElucHV0TWV0aG9kVW5kZXJsaW5l
R2V0Q29tcG9zaXRpb25VbmRlcmxpbmUpOgorICAgICAgICAod2Via2l0X2lucHV0X21ldGhvZF91
bmRlcmxpbmVfbmV3KToKKyAgICAgICAgKHdlYmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX2Nv
cHkpOgorICAgICAgICAod2Via2l0X2lucHV0X21ldGhvZF91bmRlcmxpbmVfZnJlZSk6CisgICAg
ICAgICh3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRTZXRXZWJWaWV3KToKKyAgICAgICAgKHdlYmtp
dElucHV0TWV0aG9kQ29udGV4dEdldFdlYlZpZXcpOgorICAgICAgICAod2Via2l0X2lucHV0X21l
dGhvZF9jb250ZXh0X3NldF9lbmFibGVfcHJlZWRpdCk6CisgICAgICAgICh3ZWJraXRfaW5wdXRf
bWV0aG9kX2NvbnRleHRfZ2V0X3ByZWVkaXQpOgorICAgICAgICAod2Via2l0X2lucHV0X21ldGhv
ZF9jb250ZXh0X25vdGlmeV9mb2N1c19pbik6CisgICAgICAgICh3ZWJraXRfaW5wdXRfbWV0aG9k
X2NvbnRleHRfbm90aWZ5X2ZvY3VzX291dCk6CisgICAgICAgICh3ZWJraXRfaW5wdXRfbWV0aG9k
X2NvbnRleHRfbm90aWZ5X2N1cnNvcl9hcmVhKToKKyAgICAgICAgKHdlYmtpdF9pbnB1dF9tZXRo
b2RfY29udGV4dF9yZXNldCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdElu
cHV0TWV0aG9kQ29udGV4dFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0SW5wdXRN
ZXRob2RVbmRlcmxpbmU6Ol9XZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0V2Vi
Vmlld0NvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdTeW50aGVzaXplQ29tcG9z
aXRpb25LZXlQcmVzcyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3U2V0Q29tcG9zaXRpb24pOgor
ICAgICAgICAod2Via2l0V2ViVmlld0NvbmZpcm1Db21wb3NpdGlvbik6CisgICAgICAgICh3ZWJr
aXRXZWJWaWV3Q2FuY2VsQ29tcG9zaXRpb24pOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3Nl
dF9pbnB1dF9tZXRob2RfY29udGV4dCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2lu
cHV0X21ldGhvZF9jb250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
V2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9JbnB1dE1ldGhv
ZEZpbHRlckd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRl
cjo6cGxhdGZvcm1UcmFuc2Zvcm1DdXJzb3JSZWN0VG9WaWV3Q29vcmRpbmF0ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6cGxhdGZvcm1FdmVudEtleUlzS2V5UHJlc3Mg
Y29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5RXZlbnQpOiBSZW1v
dmUgdGhlIGVhcmx5IHJldHVybiBpbiBjYXNlIG9mIGZha2UgZXZlbnQsIGNvbXBvc2l0aW9uIGV2
ZW50cworICAgICAgICBhcmUgYWx3YXlzIGhhbmRsZWQgYnkgdGhlIHdlYiBwcm9jZXNzLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0TWV0aG9kQ29udGV4dC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRH
dGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX3Nl
dF9jb2xvcik6CisgICAgICAgICh3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfZmlsdGVyX2tl
eV9ldmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SW5wdXRNZXRob2RD
b250ZXh0SW1wbEd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoY29udGV4dFByZWVkaXRTdGFydENh
bGxiYWNrKToKKyAgICAgICAgKGNvbnRleHRQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKToKKyAgICAg
ICAgKGNvbnRleHRQcmVlZGl0RW5kQ2FsbGJhY2spOgorICAgICAgICAoY29udGV4dENvbW1pdENh
bGxiYWNrKToKKyAgICAgICAgKHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtDb25zdHJ1
Y3RlZCk6CisgICAgICAgICh3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrU2V0RW5hYmxl
UHJlZWRpdCk6CisgICAgICAgICh3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrR2V0UHJl
ZWRpdCk6CisgICAgICAgICh3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrRmlsdGVyS2V5
RXZlbnQpOgorICAgICAgICAod2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a05vdGlmeUZv
Y3VzSW4pOgorICAgICAgICAod2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a05vdGlmeUZv
Y3VzT3V0KToKKyAgICAgICAgKHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtOb3RpZnlD
dXJzb3JBcmVhKToKKyAgICAgICAgKHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtSZXNl
dCk6CisgICAgICAgICh3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfaW1wbF9ndGtfY2xhc3Nf
aW5pdCk6CisgICAgICAgICh3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrTmV3KToKKyAg
ICAgICAgKHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtTZXRDbGllbnRXaW5kb3cpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0TWV0aG9kQ29udGV4dEltcGxH
dGsuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlUmVhbGl6ZSk6IElmIGN1cnJlbnQgSU0gZmlsdGVyIGlz
IHRoZSBkZWZhdWx0IG9uZSwgY2FsbCB3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrU2V0
Q2xpZW50V2luZG93KCkuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVVucmVhbGl6ZSk6IERp
dHRvLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEaXNwb3NlKTogU2V0IGEgbnVsbHB0ciBj
b250ZXh0IG9uIElNIGZpbHRlci4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlS2V5UHJlc3NF
dmVudCk6IFVzZSB0aGUgbmV3IElNIGZpbHRlciB0aGF0IHNpbXBsaWZpZXMgdGhlIGNvZGUuCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUtleVJlbGVhc2VFdmVudCk6IERpdHRvLgorICAgICAg
ICAod2Via2l0V2ViVmlld0Jhc2VIYW5kbGVNb3VzZUV2ZW50KTogQ2FuY2VsIGNvbXBvc2l0aW9u
IGluIGNhc2Ugb2YgY2xpY2suCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBh
Z2UpOiBUaGUgbmV3IElNIGZpbHRlciBkb2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgcGFnZS4KKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVXBkYXRlVGV4dElucHV0U3RhdGUpOiBVc2UgbmV3IElN
IGZpbHRlciBBUEkuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVNldElucHV0TWV0aG9kQ29u
dGV4dCk6IFNldCB0aGUgSU0gZmlsdGVyIGNvbnRleHQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUdldElucHV0TWV0aG9kQ29udGV4dCk6IEdldCB0aGUgSU0gZmlsdGVyIGNvbnRleHQuCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVDb21wb3NpdGlvbktleVByZXNzKTog
U3ludGhlc2l6ZSBhIGtleSBldmVudCBmb3IgY29tcG9zaXRpb24uCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUv
SW5wdXRNZXRob2RGaWx0ZXJXUEUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SW5wdXRN
ZXRob2RGaWx0ZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ3Vyc29yUmVjdFRvVmlld0Nvb3JkaW5hdGVz
KToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OnBsYXRmb3JtRXZlbnRLZXlJ
c0tleVByZXNzIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRJbnB1dE1ldGhv
ZFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNlbGVjdGlvbkRpZENo
YW5nZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcDoKKyAgICAgICAgKFdLV1BFOjpW
aWV3OjpzZXRJbnB1dE1ldGhvZENvbnRleHQpOiBTZXQgdGhlIElNIGZpbHRlciBjb250ZXh0Lgor
ICAgICAgICAoV0tXUEU6OlZpZXc6OmlucHV0TWV0aG9kQ29udGV4dCBjb25zdCk6IEdldCB0aGUg
SU0gZmlsdGVyIGNvbnRleHQuCisgICAgICAgIChXS1dQRTo6Vmlldzo6c2V0SW5wdXRNZXRob2RT
dGF0ZSk6IEVuYWJsZSBvciBkaXNhYmxlIGlucHV0IG1ldGhvZHMuCisgICAgICAgIChXS1dQRTo6
Vmlldzo6c2VsZWN0aW9uRGlkQ2hhbmdlKTogTm90aWZ5IHRoZSBJTSBmaWx0ZXIgYWJvdXQgdGhl
IGN1cnNvciBwb3NpdGlvbiBjaGFuZ2UuCisgICAgICAgIChXS1dQRTo6Vmlldzo6c2V0Vmlld1N0
YXRlKTogTm90aWZ5IHRoZSBJTSBmaWx0ZXIgYWJvdXQgdGhlIGZvY3VzIGNoYW5nZS4KKyAgICAg
ICAgKFdLV1BFOjpWaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KTogQWxsb3cgdGhlIElNIGZpbHRl
ciB0byBoYW5kbGUgdGhlIGtleSBldmVudC4KKyAgICAgICAgKFdLV1BFOjpWaWV3OjpzeW50aGVz
aXplQ29tcG9zaXRpb25LZXlQcmVzcyk6IFN5bnRoZXNpemUgYSBrZXkgZXZlbnQgZm9yIGNvbXBv
c2l0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHQuaDogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0V1BFLmNw
cDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfaW5wdXRfbWV0aG9kX3VuZGVybGluZV9zZXRfY29s
b3IpOgorICAgICAgICAod2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2ZpbHRlcl9rZXlfZXZl
bnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0OgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLWRvY3Muc2dtbDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3dwZS93ZWJraXQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd3BlL1dlYlBhZ2VQcm94eVdQRS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXBkYXRlRWRpdG9yU3RhdGUpOiBTYXZlIHRo
ZSBlZGl0b3Igc3RhdGUgYW5kIG5vdGlmeSBhYm91dCBzZWxlY3Rpb24gY2hhbmdlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldElucHV0TWV0aG9kU3RhdGUpOiBOb3RpZnkgdGhl
IHBhZ2UgY2xpZW50IGFib3V0IHRoZSBpbnB1dCBtZXRob2Qgc3RhdGUuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNldElucHV0TWV0aG9kU3RhdGUpOiBJbXBsZW1lbnQgdGhp
cyBmb3IgV1BFIHRvby4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dwZS9X
ZWJFZGl0b3JDbGllbnRXUEUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6
OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bik6IFVzZSBoYW5kbGVkQnlJbnB1dE1ldGhvZCgpIG5v
dy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd3Bl
L1dlYlBhZ2VXUEUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwbGF0Zm9ybUVkaXRv
clN0YXRlIGNvbnN0KTogU2F2ZSB0aGUgY3VycmVudCBjYXJldCBjdXJzb3IgcmVjdGFuZ2xlIGlu
IHBvc3QgbGF5b3V0IGRhdGEgc3RydWN0LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRJ
bnB1dE1ldGhvZFN0YXRlKTogU2VuZCBTZXRJbnB1dE1ldGhvZFN0YXRlIG1lc3NhZ2UgdG8gdGhl
IFVJIHByb2Nlc3MgaWYgc3RhdGUgY2hhbmdlZC4KKwogMjAxOS0xMS0yNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gV2ViRHJpdmVy
OiBtb3ZpbmcgdG9wbGV2ZWwgd2luZG93cyBpcyBub3Qgc3VwcG9ydGVkIHVuZGVyIHdheWxhbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGZjNDljYjhiNTk5Li40YmU2ZTdhNjlhOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtR1RLLmNtYWtlCkBAIC04Myw2ICs4Myw3IEBAIHNldChXZWJLaXQyR1RLX0lO
U1RBTExFRF9IRUFERVJTCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRHZW9sb2NhdGlvbk1hbmFnZXIuaAogICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oCiAgICAgJHtXRUJLSVRfRElS
fS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmgKKyAgICAke1dFQktJVF9E
SVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0TWV0aG9kQ29udGV4dC5oCiAgICAgJHtX
RUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRJbnN0YWxsTWlzc2luZ01lZGlhUGx1
Z2luc1Blcm1pc3Npb25SZXF1ZXN0LmgKICAgICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEphdmFzY3JpcHRSZXN1bHQuaAogICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0TWltZUluZm8uaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybVdQRS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggNzNm
YjZhMWQ4N2QuLjkwNThjNTRlMDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V1BFLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UKQEAgLTExMCw2
ICsxMTAsNyBAQCBzZXQoV1BFX0FQSV9JTlNUQUxMRURfSEVBREVSUwogICAgICR7V0VCS0lUX0RJ
Un0vVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0R2VvbG9jYXRpb25NYW5hZ2VyLmgKICAgICAke1dF
QktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdEdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3QuaAogICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0SGl0VGVz
dFJlc3VsdC5oCisgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRJbnB1
dE1ldGhvZENvbnRleHQuaAogICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93cGUvV2Vi
S2l0SW5zdGFsbE1pc3NpbmdNZWRpYVBsdWdpbnNQZXJtaXNzaW9uUmVxdWVzdC5oCiAgICAgJHtX
RUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRKYXZhc2NyaXB0UmVzdWx0LmgKICAg
ICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdE1pbWVJbmZvLmgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcAppbmRleCA4NTE5MTVhZGZmMy4uZjI0NzAwYjAwODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBi
b29sIEVkaXRvclN0YXRlOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBFZGl0b3JTdGF0
ZSYgcmVzdWx0KQogdm9pZCBFZGl0b3JTdGF0ZTo6UG9zdExheW91dERhdGE6OmVuY29kZShJUEM6
OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCB0eXBpbmdBdHRyaWJ1
dGVzOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICBl
bmNvZGVyIDw8IGNhcmV0UmVjdEF0U3RhcnQ7CiAjZW5kaWYKICNpZiBQTEFURk9STShDT0NPQSkK
QEAgLTE1Miw3ICsxNTIsNyBAQCBib29sIEVkaXRvclN0YXRlOjpQb3N0TGF5b3V0RGF0YTo6ZGVj
b2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgUG9zdExheW91dERhdGEmCiB7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQudHlwaW5nQXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShHVEspCisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2FyZXRSZWN0QXRTdGFydCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICNlbmRpZgpAQCAtMjY5LDcgKzI2OSw3IEBAIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSkKICAg
ICB0cyA8PCAicG9zdExheW91dERhdGEiOwogICAgIGlmIChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0
RGF0YSgpLnR5cGluZ0F0dHJpYnV0ZXMgIT0gQXR0cmlidXRlTm9uZSkKICAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJ0eXBpbmdBdHRyaWJ1dGVzIiwgZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEo
KS50eXBpbmdBdHRyaWJ1dGVzKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9S
TShHVEspCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShXUEUpCiAgICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuY2FyZXRSZWN0
QXRTdGFydCAhPSBJbnRSZWN0KCkpCiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2FyZXRSZWN0
QXRTdGFydCIsIGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuY2FyZXRSZWN0QXRTdGFydCk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5oCmluZGV4IGU0OWM1M2RkZjI0Li42
MDg5MTI2OWExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5oCkBAIC04Niw3ICs4Niw3
IEBAIHN0cnVjdCBFZGl0b3JTdGF0ZSB7CiAKICAgICBzdHJ1Y3QgUG9zdExheW91dERhdGEgewog
ICAgICAgICB1aW50MzJfdCB0eXBpbmdBdHRyaWJ1dGVzIHsgQXR0cmlidXRlTm9uZSB9OwotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAgICAgV2ViQ29y
ZTo6SW50UmVjdCBjYXJldFJlY3RBdFN0YXJ0OwogI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKaW5kZXgg
NmY0ZTI5YjdjNjUuLmZiNWMwYzQxZmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudC5oCkBAIC02OCwxMyArNjgsMTMgQEAgcHVibGljOgogI2VsaWYg
UExBVEZPUk0oR1RLKQogICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudCYpOwogICAgIGVudW0gY2xhc3MgSGFuZGxlZEJ5SW5wdXRNZXRob2QgOiBi
b29sIHsgTm8sIFllcyB9OwotICAgIGVudW0gY2xhc3MgRmFrZWRGb3JDb21wb3NpdGlvbiA6IGJv
b2wgeyBObywgWWVzIH07Ci0gICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCosIGNv
bnN0IFN0cmluZyYsIEhhbmRsZWRCeUlucHV0TWV0aG9kLCBGYWtlZEZvckNvbXBvc2l0aW9uLCBW
ZWN0b3I8U3RyaW5nPiYmIGNvbW1hbmRzKTsKKyAgICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KEdk
a0V2ZW50KiwgY29uc3QgU3RyaW5nJiwgSGFuZGxlZEJ5SW5wdXRNZXRob2QsIFZlY3RvcjxTdHJp
bmc+JiYgY29tbWFuZHMpOwogI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBlbnVtIGNs
YXNzIEhhbmRsZWRCeUlucHV0TWV0aG9kIDogYm9vbCB7IE5vLCBZZXMgfTsKICAgICBOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50KDo6V2ViRXZlbnQgKiwgSGFuZGxlZEJ5SW5wdXRNZXRob2QpOwogI2Vs
aWYgVVNFKExJQldQRSkKLSAgICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHN0cnVjdCB3cGVfaW5w
dXRfa2V5Ym9hcmRfZXZlbnQqKTsKKyAgICBlbnVtIGNsYXNzIEhhbmRsZWRCeUlucHV0TWV0aG9k
IDogYm9vbCB7IE5vLCBZZXMgfTsKKyAgICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHN0cnVjdCB3
cGVfaW5wdXRfa2V5Ym9hcmRfZXZlbnQqLCBjb25zdCBTdHJpbmcmLCBIYW5kbGVkQnlJbnB1dE1l
dGhvZCk7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChI
V05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKICNlbmRpZgpAQCAtODMsOSArODMs
NiBAQCBwdWJsaWM6CiAgICAgTlNFdmVudCAqbmF0aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiBt
X25hdGl2ZUV2ZW50LmdldCgpOyB9CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgR2RrRXZlbnQq
IG5hdGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVFdmVudC5nZXQoKTsgfQotICAg
IGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQotICAgIGJvb2wg
aGFuZGxlZEJ5SW5wdXRNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZWRCeUlucHV0TWV0
aG9kID09IEhhbmRsZWRCeUlucHV0TWV0aG9kOjpZZXM7IH0KLSAgICBib29sIGZha2VkRm9yQ29t
cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Zha2VkRm9yQ29tcG9zaXRpb24gPT0gRmFrZWRG
b3JDb21wb3NpdGlvbjo6WWVzOyB9CiAjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIDo6
V2ViRXZlbnQqIG5hdGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVFdmVudC5nZXQo
KTsgfQogI2VsaWYgUExBVEZPUk0oV0lOKQpAQCAtOTksOSArOTYsNiBAQCBwcml2YXRlOgogICAg
IFJldGFpblB0cjxOU0V2ZW50PiBtX25hdGl2ZUV2ZW50OwogI2VsaWYgUExBVEZPUk0oR1RLKQog
ICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IG1fbmF0aXZlRXZlbnQ7Ci0gICAgU3RyaW5nIG1fdGV4
dDsKLSAgICBIYW5kbGVkQnlJbnB1dE1ldGhvZCBtX2hhbmRsZWRCeUlucHV0TWV0aG9kOwotICAg
IEZha2VkRm9yQ29tcG9zaXRpb24gbV9mYWtlZEZvckNvbXBvc2l0aW9uOwogI2VsaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5QdHI8OjpXZWJFdmVudD4gbV9uYXRpdmVFdmVudDsK
ICNlbGlmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YkV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oCmluZGV4IDdkYmEwOGZk
ZWU4Li5kMWQzYzFhZTcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViRXZl
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oCkBAIC0yNjEsNyArMjYx
LDcgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBXZWJLZXlib2Fy
ZEV2ZW50KFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB1bm1vZGlmaWVk
VGV4dCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5n
JiBrZXlJZGVudGlmaWVyLCBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZlVmly
dHVhbEtleUNvZGUsIGludCBtYWNDaGFyQ29kZSwgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCwg
Ym9vbCBpc0F1dG9SZXBlYXQsIGJvb2wgaXNLZXlwYWQsIGJvb2wgaXNTeXN0ZW1LZXksIE9wdGlv
blNldDxNb2RpZmllcj4sIFdhbGxUaW1lIHRpbWVzdGFtcCk7CiAjZWxpZiBVU0UoTElCV1BFKQot
ICAgIFdlYktleWJvYXJkRXZlbnQoVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIs
IGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgYm9v
bCBpc0tleXBhZCwgT3B0aW9uU2V0PE1vZGlmaWVyPiwgV2FsbFRpbWUgdGltZXN0YW1wKTsKKyAg
ICBXZWJLZXlib2FyZEV2ZW50KFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCBp
bnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIGJvb2wg
aGFuZGxlZEJ5SW5wdXRNZXRob2QsIGJvb2wgaXNLZXlwYWQsIE9wdGlvblNldDxNb2RpZmllcj4s
IFdhbGxUaW1lIHRpbWVzdGFtcCk7CiAjZWxzZQogICAgIFdlYktleWJvYXJkRXZlbnQoVHlwZSwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHVubW9kaWZpZWRUZXh0LCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZp
ZXIsIGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwg
aW50IG1hY0NoYXJDb2RlLCBib29sIGlzQXV0b1JlcGVhdCwgYm9vbCBpc0tleXBhZCwgYm9vbCBp
c1N5c3RlbUtleSwgT3B0aW9uU2V0PE1vZGlmaWVyPiwgV2FsbFRpbWUgdGltZXN0YW1wKTsKICNl
bmRpZgpAQCAtMjc4LDcgKzI3OCw3IEBAIHB1YmxpYzoKICAgICBpbnQzMl90IHdpbmRvd3NWaXJ0
dWFsS2V5Q29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlOyB9CiAg
ICAgaW50MzJfdCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZl
VmlydHVhbEtleUNvZGU7IH0KICAgICBpbnQzMl90IG1hY0NoYXJDb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tYWNDaGFyQ29kZTsgfQotI2lmIFVTRShBUFBLSVQpIHx8IFVTRShVSUtJVF9LRVlCT0FS
RF9BRERJVElPTlMpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBVU0UoQVBQS0lUKSB8fCBVU0UoVUlL
SVRfS0VZQk9BUkRfQURESVRJT05TKSB8fCBQTEFURk9STShHVEspIHx8IFVTRShMSUJXUEUpCiAg
ICAgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlZEJ5
SW5wdXRNZXRob2Q7IH0KICNlbmRpZgogI2lmIFVTRShBUFBLSVQpCkBAIC0zMDgsNyArMzA4LDcg
QEAgcHJpdmF0ZToKICAgICBpbnQzMl90IG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlOwogICAgIGlu
dDMyX3QgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZTsKICAgICBpbnQzMl90IG1fbWFjQ2hhckNvZGU7
Ci0jaWYgVVNFKEFQUEtJVCkgfHwgVVNFKFVJS0lUX0tFWUJPQVJEX0FERElUSU9OUykgfHwgUExB
VEZPUk0oR1RLKQorI2lmIFVTRShBUFBLSVQpIHx8IFVTRShVSUtJVF9LRVlCT0FSRF9BRERJVElP
TlMpIHx8IFBMQVRGT1JNKEdUSykgfHwgVVNFKExJQldQRSkKICAgICBib29sIG1faGFuZGxlZEJ5
SW5wdXRNZXRob2Q7CiAjZW5kaWYKICNpZiBVU0UoQVBQS0lUKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViS2V5Ym9hcmRFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJLZXlib2FyZEV2ZW50LmNwcAppbmRleCAyMGQ5MzhiMjY2Ny4uNWJjYjgxZmNjYTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwCkBAIC0xMDksNyArMTA5
LDcgQEAgV2ViS2V5Ym9hcmRFdmVudDo6V2ViS2V5Ym9hcmRFdmVudChUeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJgogCiAjZWxpZiBVU0UoTElCV1BFKQogCi1XZWJL
ZXlib2FyZEV2ZW50OjpXZWJLZXlib2FyZEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB0
ZXh0LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcm
IGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGludCBuYXRpdmVWaXJ0
dWFsS2V5Q29kZSwgYm9vbCBpc0tleXBhZCwgT3B0aW9uU2V0PE1vZGlmaWVyPiBtb2RpZmllcnMs
IFdhbGxUaW1lIHRpbWVzdGFtcCkKK1dlYktleWJvYXJkRXZlbnQ6OldlYktleWJvYXJkRXZlbnQo
VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciwgaW50IHdpbmRvd3NWaXJ0
dWFsS2V5Q29kZSwgaW50IG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBib29sIGhhbmRsZWRCeUlucHV0
TWV0aG9kLCBib29sIGlzS2V5cGFkLCBPcHRpb25TZXQ8TW9kaWZpZXI+IG1vZGlmaWVycywgV2Fs
bFRpbWUgdGltZXN0YW1wKQogICAgIDogV2ViRXZlbnQodHlwZSwgbW9kaWZpZXJzLCB0aW1lc3Rh
bXApCiAgICAgLCBtX3RleHQodGV4dCkKICAgICAsIG1fdW5tb2RpZmllZFRleHQodGV4dCkKQEAg
LTEyMyw2ICsxMjMsNyBAQCBXZWJLZXlib2FyZEV2ZW50OjpXZWJLZXlib2FyZEV2ZW50KFR5cGUg
dHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmCiAgICAgLCBtX3dpbmRvd3NW
aXJ0dWFsS2V5Q29kZSh3aW5kb3dzVmlydHVhbEtleUNvZGUpCiAgICAgLCBtX25hdGl2ZVZpcnR1
YWxLZXlDb2RlKG5hdGl2ZVZpcnR1YWxLZXlDb2RlKQogICAgICwgbV9tYWNDaGFyQ29kZSgwKQor
ICAgICwgbV9oYW5kbGVkQnlJbnB1dE1ldGhvZChoYW5kbGVkQnlJbnB1dE1ldGhvZCkKICAgICAs
IG1faXNBdXRvUmVwZWF0KGZhbHNlKQogICAgICwgbV9pc0tleXBhZChpc0tleXBhZCkKICAgICAs
IG1faXNTeXN0ZW1LZXkoZmFsc2UpCkBAIC0xNzEsNyArMTcyLDcgQEAgdm9pZCBXZWJLZXlib2Fy
ZEV2ZW50OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIg
PDwgbV93aW5kb3dzVmlydHVhbEtleUNvZGU7CiAgICAgZW5jb2RlciA8PCBtX25hdGl2ZVZpcnR1
YWxLZXlDb2RlOwogICAgIGVuY29kZXIgPDwgbV9tYWNDaGFyQ29kZTsKLSNpZiBVU0UoQVBQS0lU
KSB8fCBVU0UoVUlLSVRfS0VZQk9BUkRfQURESVRJT05TKSB8fCBQTEFURk9STShHVEspCisjaWYg
VVNFKEFQUEtJVCkgfHwgVVNFKFVJS0lUX0tFWUJPQVJEX0FERElUSU9OUykgfHwgUExBVEZPUk0o
R1RLKSB8fCBVU0UoTElCV1BFKQogICAgIGVuY29kZXIgPDwgbV9oYW5kbGVkQnlJbnB1dE1ldGhv
ZDsKICNlbmRpZgogI2lmIFVTRShBUFBLSVQpIHx8IFBMQVRGT1JNKEdUSykKQEAgLTIwNyw3ICsy
MDgsNyBAQCBib29sIFdlYktleWJvYXJkRXZlbnQ6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29k
ZXIsIFdlYktleWJvYXJkRXZlbnQmIHJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fbWFjQ2hhckNvZGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jaWYgVVNFKEFQUEtJVCkgfHwgVVNFKFVJS0lUX0tFWUJPQVJEX0FERElUSU9O
UykgfHwgUExBVEZPUk0oR1RLKQorI2lmIFVTRShBUFBLSVQpIHx8IFVTRShVSUtJVF9LRVlCT0FS
RF9BRERJVElPTlMpIHx8IFBMQVRGT1JNKEdUSykgfHwgVVNFKExJQldQRSkKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5tX2hhbmRsZWRCeUlucHV0TWV0aG9kKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsv
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsv
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAKaW5kZXggNDVhYTQ0OTY0NGIuLjA3MDJjYzM0
MzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYktl
eWJvYXJkRXZlbnRHdGsuY3BwCkBAIC0zMywyMSArMzMsMTUgQEAKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLU5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQoR2Rr
RXZlbnQqIGV2ZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIEhhbmRsZWRCeUlucHV0TWV0aG9kIGhh
bmRsZWRCeUlucHV0TWV0aG9kLCBGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkRm9yQ29tcG9zaXRp
b24sIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFuZHMpCitOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpO
YXRpdmVXZWJLZXlib2FyZEV2ZW50KEdka0V2ZW50KiBldmVudCwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBIYW5kbGVkQnlJbnB1dE1ldGhvZCBoYW5kbGVkQnlJbnB1dE1ldGhvZCwgVmVjdG9yPFN0cmlu
Zz4mJiBjb21tYW5kcykKICAgICA6IFdlYktleWJvYXJkRXZlbnQoV2ViRXZlbnRGYWN0b3J5Ojpj
cmVhdGVXZWJLZXlib2FyZEV2ZW50KGV2ZW50LCB0ZXh0LCBoYW5kbGVkQnlJbnB1dE1ldGhvZCA9
PSBIYW5kbGVkQnlJbnB1dE1ldGhvZDo6WWVzLCBXVEZNb3ZlKGNvbW1hbmRzKSkpCiAgICAgLCBt
X25hdGl2ZUV2ZW50KGdka19ldmVudF9jb3B5KGV2ZW50KSkKLSAgICAsIG1fdGV4dCh0ZXh0KQot
ICAgICwgbV9oYW5kbGVkQnlJbnB1dE1ldGhvZChoYW5kbGVkQnlJbnB1dE1ldGhvZCkKLSAgICAs
IG1fZmFrZWRGb3JDb21wb3NpdGlvbihmYWtlZEZvckNvbXBvc2l0aW9uKQogewogfQogCiBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmIGV2ZW50KQogICAgIDogV2ViS2V5Ym9hcmRFdmVudChXZWJFdmVudEZh
Y3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSwgZXZlbnQu
dGV4dCgpLCBldmVudC5oYW5kbGVkQnlJbnB1dE1ldGhvZCgpLCBWZWN0b3I8U3RyaW5nPihldmVu
dC5jb21tYW5kcygpKSkpCiAgICAgLCBtX25hdGl2ZUV2ZW50KGdka19ldmVudF9jb3B5KGV2ZW50
Lm5hdGl2ZUV2ZW50KCkpKQotICAgICwgbV90ZXh0KGV2ZW50LnRleHQoKSkKLSAgICAsIG1faGFu
ZGxlZEJ5SW5wdXRNZXRob2QoZXZlbnQuaGFuZGxlZEJ5SW5wdXRNZXRob2QoKSA/IEhhbmRsZWRC
eUlucHV0TWV0aG9kOjpZZXMgOiBIYW5kbGVkQnlJbnB1dE1ldGhvZDo6Tm8pCi0gICAgLCBtX2Zh
a2VkRm9yQ29tcG9zaXRpb24oZXZlbnQuZmFrZWRGb3JDb21wb3NpdGlvbigpID8gRmFrZWRGb3JD
b21wb3NpdGlvbjo6WWVzIDogRmFrZWRGb3JDb21wb3NpdGlvbjo6Tm8pCiB7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9OYXRpdmVXZWJLZXlib2FyZEV2ZW50
TGliV1BFLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9OYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50TGliV1BFLmNwcAppbmRleCA4NjgzYjgxMmYzYi4uYTY5ZmY3YjQzN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9OYXRpdmVXZWJLZXlib2FyZEV2ZW50TGli
V1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9saWJ3cGUvTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudExpYldQRS5jcHAKQEAgLTMwLDggKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLU5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQoc3RydWN0
IHdwZV9pbnB1dF9rZXlib2FyZF9ldmVudCogZXZlbnQpCi0gICAgOiBXZWJLZXlib2FyZEV2ZW50
KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChldmVudCkpCitOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRf
a2V5Ym9hcmRfZXZlbnQqIGV2ZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIEhhbmRsZWRCeUlucHV0
TWV0aG9kIGhhbmRsZWRCeUlucHV0TWV0aG9kKQorICAgIDogV2ViS2V5Ym9hcmRFdmVudChXZWJF
dmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQsIHRleHQsIGhhbmRsZWRC
eUlucHV0TWV0aG9kID09IEhhbmRsZWRCeUlucHV0TWV0aG9kOjpZZXMpKQogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9saWJ3cGUvV2ViRXZlbnRGYWN0b3J5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9XZWJFdmVudEZhY3RvcnkuY3BwCmluZGV4IDg2
NGQwMWVhMjU5Li4wODgxZTk2MWE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
bGlid3BlL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbGli
d3BlL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTYyLDE3ICs2MiwxNiBAQCBXYWxsVGltZSB3YWxs
VGltZUZvckV2ZW50VGltZSh1aW50NjRfdCB0aW1lc3RhbXApCiAgICAgcmV0dXJuIHRpbWVzdGFt
cCA/IE1vbm90b25pY1RpbWU6OmZyb21SYXdTZWNvbmRzKHRpbWVzdGFtcCAvIDEwMDAuKS5hcHBy
b3hpbWF0ZVdhbGxUaW1lKCkgOiBXYWxsVGltZTo6bm93KCk7CiB9CiAKLVdlYktleWJvYXJkRXZl
bnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KHN0cnVjdCB3cGVfaW5w
dXRfa2V5Ym9hcmRfZXZlbnQqIGV2ZW50KQorV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rv
cnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9rZXlib2FyZF9ldmVu
dCogZXZlbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCkK
IHsKLSAgICBTdHJpbmcgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nID0gV2ViQ29yZTo6UGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtleV9jb2RlKTsKLQog
ICAgIHJldHVybiBXZWJLZXlib2FyZEV2ZW50KGV2ZW50LT5wcmVzc2VkID8gV2ViRXZlbnQ6Oktl
eURvd24gOiBXZWJFdmVudDo6S2V5VXAsCi0gICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV2ZW50LT5rZXlfY29kZSksCisgICAgICAg
IHRleHQuaXNOdWxsKCkgPyBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNo
YXJhY3RlclN0cmluZyhldmVudC0+a2V5X2NvZGUpIDogdGV4dCwKICAgICAgICAgV2ViQ29yZTo6
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjprZXlWYWx1ZUZvcldQRUtleUNvZGUoZXZlbnQtPmtleV9j
b2RlKSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjprZXlDb2RlRm9y
SGFyZHdhcmVLZXlDb2RlKGV2ZW50LT5oYXJkd2FyZV9rZXlfY29kZSksCiAgICAgICAgIFdlYkNv
cmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvcldQRUtleUNvZGUoZXZl
bnQtPmtleV9jb2RlKSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3
aW5kb3dzS2V5Q29kZUZvcldQRUtleUNvZGUoZXZlbnQtPmtleV9jb2RlKSwKICAgICAgICAgZXZl
bnQtPmtleV9jb2RlLAorICAgICAgICBoYW5kbGVkQnlJbnB1dE1ldGhvZCwKICAgICAgICAgaXNX
UEVLZXlDb2RlRnJvbUtleVBhZChldmVudC0+a2V5X2NvZGUpLAogICAgICAgICBtb2RpZmllcnNG
b3JFdmVudE1vZGlmaWVycyhldmVudC0+bW9kaWZpZXJzKSwKICAgICAgICAgd2FsbFRpbWVGb3JF
dmVudFRpbWUoZXZlbnQtPnRpbWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L2xpYndwZS9XZWJFdmVudEZhY3RvcnkuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9X
ZWJFdmVudEZhY3RvcnkuaAppbmRleCA0Mjg1OTljNTIwNi4uNzE2YTlhMzBkNTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9XZWJFdmVudEZhY3RvcnkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9saWJ3cGUvV2ViRXZlbnRGYWN0b3J5LmgKQEAgLTM4LDcgKzM4
LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkV2ZW50RmFjdG9yeSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFdlYktleWJvYXJkRXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChz
dHJ1Y3Qgd3BlX2lucHV0X2tleWJvYXJkX2V2ZW50Kik7CisgICAgc3RhdGljIFdlYktleWJvYXJk
RXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X2tleWJvYXJkX2V2
ZW50KiwgY29uc3QgU3RyaW5nJiwgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCk7CiAgICAgc3Rh
dGljIFdlYk1vdXNlRXZlbnQgY3JlYXRlV2ViTW91c2VFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X3Bv
aW50ZXJfZXZlbnQqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgc3RhdGljIFdlYldo
ZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQq
LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNHVEsudHh0CmluZGV4IDFhMDVlMzM0MzQzLi5iYWQwODMwMzJhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNH
VEsudHh0CkBAIC0xMjMsNiArMTIzLDcgQEAgVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3Bw
CiAKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9BUElDb250ZW50UnVsZUxpc3RTdG9yZUdMaWIuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAgQG5vLXVuaWZ5CitV
SVByb2Nlc3MvQVBJL2dsaWIvSW5wdXRNZXRob2RGaWx0ZXIuY3BwIEBuby11bmlmeQogVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdEFwcGxpY2F0aW9uSW5mby5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgQG5vLXVuaWZ5CkBA
IC0xNDUsNiArMTQ2LDcgQEAgVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEdlb2xvY2F0aW9uTWFu
YWdlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
SWNvbkxvYWRpbmdDbGllbnQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dEluamVjdGVkQnVuZGxlQ2xpZW50LmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRJbnB1dE1ldGhvZENvbnRleHQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdEluc3RhbGxNaXNzaW5nTWVkaWFQbHVnaW5zUGVybWlzc2lvblJlcXVlc3QuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEphdmFzY3JpcHRSZXN1bHQuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE1pbWVJbmZvLmNwcCBAbm8tdW5pZnkK
QEAgLTE4MywxMSArMTg1LDE0IEBAIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0
YS5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzLmNwcCBAbm8tdW5pZnkKIAorVUlQcm9jZXNzL0FQSS9ndGsvSW5wdXRNZXRob2RGaWx0ZXJH
dGsuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3Bw
IEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29sb3JDaG9vc2VyLmNwcCBAbm8t
dW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbG9yQ2hvb3NlclJlcXVlc3QuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RW1vamlDaG9vc2VyLmNwcCBAbm8tdW5p
ZnkKK1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0TWV0aG9kQ29udGV4dEd0ay5jcHAgQG5v
LXVuaWZ5CitVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3Rr
LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnUuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudUl0ZW0uY3BwIEBuby11
bmlmeQogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9wdXBNZW51LmNwcCBAbm8tdW5pZnkKQEAg
LTIzOCw3ICsyNDMsNiBAQCBVSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3JlWDEx
LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcAogVUlQ
cm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9ndGsvSGFyZHdhcmVB
Y2NlbGVyYXRpb25NYW5hZ2VyLmNwcAotVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5j
cHAKIFVJUHJvY2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwCiBVSVByb2Nlc3MvZ3Rr
L1BvaW50ZXJMb2NrTWFuYWdlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1BvaW50ZXJM
b2NrTWFuYWdlcldheWxhbmQuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggM2Qy
MDBmYTYwZTkuLjQzZGE4MjQ4NjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNX
UEUudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKQEAgLTExMSw2ICsxMTEs
NyBAQCBVSVByb2Nlc3MvQVBJL0Mvd3BlL1dLVmlldy5jcHAKIAogVUlQcm9jZXNzL0FQSS9nbGli
L0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlR0xpYi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJ
L2dsaWIvSWNvbkRhdGFiYXNlLmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9JbnB1
dE1ldGhvZEZpbHRlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0QXBw
bGljYXRpb25JbmZvLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dEF1dG9tYXRpb25TZXNzaW9uLmNwcCBAbm8tdW5pZnkKQEAgLTEzMiw2ICsxMzMsNyBAQCBVSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0LmNwcCBAbm8tdW5pZnkK
IFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRHZW9sb2NhdGlvbk1hbmFnZXIuY3BwIEBuby11bmlm
eQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3Qu
Y3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEluamVjdGVkQnVuZGxlQ2xp
ZW50LmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRJbnB1dE1ldGhvZENv
bnRleHQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEluc3RhbGxNaXNz
aW5nTWVkaWFQbHVnaW5zUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdEphdmFzY3JpcHRSZXN1bHQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdE1pbWVJbmZvLmNwcCBAbm8tdW5pZnkKQEAgLTE2OSw5ICsxNzEsMTEg
QEAgVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhLmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwIEBuby11bmlmeQog
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuY3BwIEBuby11bmlmeQog
CitVSVByb2Nlc3MvQVBJL3dwZS9JbnB1dE1ldGhvZEZpbHRlcldQRS5jcHAgQG5vLXVuaWZ5CiBV
SVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3Mv
QVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRDb2xvci5jcHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXRJbnB1dE1ldGhvZENvbnRleHRXUEUuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS93cGUv
V2ViS2l0U2NyaXB0RGlhbG9nV1BFLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dl
YktpdFdlYlZpZXdCYWNrZW5kLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktp
dFdlYlZpZXdXUEUuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvSW5wdXRNZXRob2RGaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi4xYjkzZDgyNjk1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0lucHV0TWV0aG9kRmlsdGVyLmNwcApAQCAtMCww
ICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxOSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5wdXRNZXRob2RGaWx0ZXIuaCIK
KworI2luY2x1ZGUgIldlYktpdElucHV0TWV0aG9kQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2lu
Y2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitJbnB1dE1ldGhvZEZpbHRlcjo6fklucHV0TWV0aG9kRmlsdGVy
KCkKK3sKKyAgICBzZXRDb250ZXh0KG51bGxwdHIpOworfQorCit2b2lkIElucHV0TWV0aG9kRmls
dGVyOjpwcmVlZGl0U3RhcnRlZENhbGxiYWNrKElucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCit7
CisgICAgZmlsdGVyLT5wcmVlZGl0U3RhcnRlZCgpOworfQorCit2b2lkIElucHV0TWV0aG9kRmls
dGVyOjpwcmVlZGl0Q2hhbmdlZENhbGxiYWNrKElucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCit7
CisgICAgZmlsdGVyLT5wcmVlZGl0Q2hhbmdlZCgpOworfQorCit2b2lkIElucHV0TWV0aG9kRmls
dGVyOjpwcmVlZGl0RmluaXNoZWRDYWxsYmFjayhJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQor
eworICAgIGZpbHRlci0+cHJlZWRpdEZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgSW5wdXRNZXRob2RG
aWx0ZXI6OmNvbW1pdHRlZENhbGxiYWNrKElucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIsIGNvbnN0
IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nKQoreworICAgIGZpbHRlci0+Y29tbWl0dGVkKGNvbXBv
c2l0aW9uU3RyaW5nKTsKK30KKwordm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6c2V0Q29udGV4dChX
ZWJLaXRJbnB1dE1ldGhvZENvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYgKG1fY29udGV4dCkg
eworICAgICAgICB3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRTZXRXZWJWaWV3KG1fY29udGV4dC5n
ZXQoKSwgbnVsbHB0cik7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChtX2NvbnRleHQuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIs
IG51bGxwdHIsIHRoaXMpOworICAgIH0KKworICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAg
aWYgKCFtX2NvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIFJFTEVBU0VfQVNTRVJUKHdl
YmtpdElucHV0TWV0aG9kQ29udGV4dEdldFdlYlZpZXcobV9jb250ZXh0LmdldCgpKSk7CisgICAg
Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY29udGV4dC5nZXQoKSwgInByZWVkaXQtc3RhcnRl
ZCIsIEdfQ0FMTEJBQ0socHJlZWRpdFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0LWNoYW5nZWQiLCBH
X0NBTExCQUNLKHByZWVkaXRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1maW5pc2hlZCIsIEdfQ0FM
TEJBQ0socHJlZWRpdEZpbmlzaGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQobV9jb250ZXh0LmdldCgpLCAiY29tbWl0dGVkIiwgR19DQUxMQkFDSyhjb21t
aXR0ZWRDYWxsYmFjayksIHRoaXMpOworCisgICAgaWYgKG1fZW5hYmxlZCAmJiBpc1ZpZXdGb2N1
c2VkKCkpCisgICAgICAgIG5vdGlmeUZvY3VzZWRJbigpOworfQorCit2b2lkIElucHV0TWV0aG9k
RmlsdGVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoIWVuYWJsZWQpCisg
ICAgICAgIG5vdGlmeUZvY3VzZWRPdXQoKTsKKworICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7Cisg
ICAgaWYgKG1fZW5hYmxlZCAmJiBpc1ZpZXdGb2N1c2VkKCkpCisgICAgICAgIG5vdGlmeUZvY3Vz
ZWRJbigpOworfQorCitJbnB1dE1ldGhvZEZpbHRlcjo6RmlsdGVyUmVzdWx0IElucHV0TWV0aG9k
RmlsdGVyOjpmaWx0ZXJLZXlFdmVudChQbGF0Zm9ybUV2ZW50S2V5KiBrZXlFdmVudCkKK3sKKyAg
ICBpZiAoIW1fZW5hYmxlZCB8fCAhbV9jb250ZXh0KQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgU2V0Rm9yU2NvcGU8Ym9vbD4gZmlsdGVyaW5nQ29udGV4dElzQWNpdmUobV9maWx0ZXJpbmdD
b250ZXh0LmlzQWN0aXZlLCB0cnVlKTsKKyAgICBtX2ZpbHRlcmluZ0NvbnRleHQucHJlZWRpdENo
YW5nZWQgPSBmYWxzZTsKKyAgICBtX2NvbXBvc2l0aW9uUmVzdWx0ID0geyB9OworCisgICAgYm9v
bCBoYW5kbGVkID0gd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2ZpbHRlcl9rZXlfZXZlbnQo
bV9jb250ZXh0LmdldCgpLCBrZXlFdmVudCk7CisgICAgaWYgKCFoYW5kbGVkKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgLy8gU2ltcGxlIGlucHV0IG1ldGhvZHMgd29yayBzdWNoIHRoYXQg
ZXZlbiBub3JtYWwga2V5c3Ryb2tlcyBmaXJlIHRoZSBjb21taXQgc2lnbmFsIHdpdGhvdXQgYW55
IHByZWVkaXQgY2hhbmdlLgorICAgIGlmICghbV9maWx0ZXJpbmdDb250ZXh0LnByZWVkaXRDaGFu
Z2VkICYmIG1fY29tcG9zaXRpb25SZXN1bHQubGVuZ3RoKCkgPT0gMSkKKyAgICAgICAgcmV0dXJu
IHsgZmFsc2UsIFdURk1vdmUobV9jb21wb3NpdGlvblJlc3VsdCkgfTsKKworICAgIGlmICghcGxh
dGZvcm1FdmVudEtleUlzS2V5UHJlc3Moa2V5RXZlbnQpKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgcmV0dXJuIHsgdHJ1ZSwgeyB9IH07Cit9CisKK2Jvb2wgSW5wdXRNZXRob2RGaWx0ZXI6
OmlzVmlld0ZvY3VzZWQoKSBjb25zdAoreworICAgIGlmICghbV9lbmFibGVkIHx8ICFtX2NvbnRl
eHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8qIHdlYlZpZXcgPSB3ZWJraXRJ
bnB1dE1ldGhvZENvbnRleHRHZXRXZWJWaWV3KG1fY29udGV4dC5nZXQoKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQod2ViVmlldyk7CisgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdHZXRQYWdlKHdlYlZp
ZXcpLmlzVmlld0ZvY3VzZWQoKTsKK30KKwordm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5
Rm9jdXNlZEluKCkKK3sKKyAgICBpZiAoIW1fZW5hYmxlZCB8fCAhbV9jb250ZXh0KQorICAgICAg
ICByZXR1cm47CisKKyAgICB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfbm90aWZ5X2ZvY3Vz
X2luKG1fY29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlm
eUZvY3VzZWRPdXQoKQoreworICAgIGlmICghbV9lbmFibGVkIHx8ICFtX2NvbnRleHQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNhbmNlbENvbXBvc2l0aW9uKCk7CisgICAgd2Via2l0X2lucHV0
X21ldGhvZF9jb250ZXh0X25vdGlmeV9mb2N1c19vdXQobV9jb250ZXh0LmdldCgpKTsKK30KKwor
dm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5Q3Vyc29yUmVjdChjb25zdCBJbnRSZWN0JiBj
dXJzb3JSZWN0KQoreworICAgIGlmICghbV9lbmFibGVkIHx8ICFtX2NvbnRleHQpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIERvbid0IG1vdmUgdGhlIHdpbmRvdyB1bmxlc3MgdGhlIGN1cnNv
ciBhY3R1YWxseSBtb3ZlcyBtb3JlIHRoYW4gMTAKKyAgICAvLyBwaXhlbHMuIFRoaXMgcHJldmVu
dHMgdXMgZnJvbSBtYWtpbmcgdGhlIHdpbmRvdyBmbGFzaCBkdXJpbmcgbWlub3IKKyAgICAvLyBj
dXJzb3IgYWRqdXN0bWVudHMuCisgICAgc3RhdGljIGNvbnN0IGludCB3aW5kb3dNb3ZlbWVudFRo
cmVzaG9sZCA9IDEwICogMTA7CisgICAgaWYgKGN1cnNvclJlY3QubG9jYXRpb24oKS5kaXN0YW5j
ZVNxdWFyZWRUb1BvaW50KG1fY3Vyc29yTG9jYXRpb24pIDwgd2luZG93TW92ZW1lbnRUaHJlc2hv
bGQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3Vyc29yTG9jYXRpb24gPSBjdXJzb3JSZWN0
LmxvY2F0aW9uKCk7CisgICAgYXV0byB0cmFuc2xhdGVkUmVjdCA9IHBsYXRmb3JtVHJhbnNmb3Jt
Q3Vyc29yUmVjdFRvVmlld0Nvb3JkaW5hdGVzKGN1cnNvclJlY3QpOworICAgIHdlYmtpdF9pbnB1
dF9tZXRob2RfY29udGV4dF9ub3RpZnlfY3Vyc29yX2FyZWEobV9jb250ZXh0LmdldCgpLCB0cmFu
c2xhdGVkUmVjdC54KCksIHRyYW5zbGF0ZWRSZWN0LnkoKSwgdHJhbnNsYXRlZFJlY3Qud2lkdGgo
KSwgdHJhbnNsYXRlZFJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIElucHV0TWV0aG9kRmlsdGVy
OjpwcmVlZGl0U3RhcnRlZCgpCit7CisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtX2ZpbHRlcmluZ0NvbnRleHQuaXNBY3RpdmUpCisgICAgICAgIG1fZmls
dGVyaW5nQ29udGV4dC5wcmVlZGl0Q2hhbmdlZCA9IHRydWU7CisKKyAgICBtX3ByZWVkaXQgPSB7
IH07Cit9CisKK3ZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OnByZWVkaXRDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZmlsdGVyaW5n
Q29udGV4dC5pc0FjdGl2ZSkKKyAgICAgICAgbV9maWx0ZXJpbmdDb250ZXh0LnByZWVkaXRDaGFu
Z2VkID0gdHJ1ZTsKKworICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IG5ld1ByZWVkaXQ7CisgICAg
R0xpc3QqIHVuZGVybGluZXMgPSBudWxscHRyOworICAgIHVuc2lnbmVkIGN1cnNvck9mZnNldDsK
KyAgICB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfZ2V0X3ByZWVkaXQobV9jb250ZXh0Lmdl
dCgpLCAmbmV3UHJlZWRpdC5vdXRQdHIoKSwgJnVuZGVybGluZXMsICZjdXJzb3JPZmZzZXQpOwor
CisgICAgaWYgKG1fcHJlZWRpdC50ZXh0LnV0ZjgoKSA9PSBuZXdQcmVlZGl0LmdldCgpKSB7Cisg
ICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwodW5kZXJsaW5lcywgcmVpbnRlcnByZXRfY2FzdDxHRGVz
dHJveU5vdGlmeT4od2Via2l0X2lucHV0X21ldGhvZF91bmRlcmxpbmVfZnJlZSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbV9wcmVlZGl0LnRleHQgPSBTdHJpbmc6OmZyb21VVEY4
KG5ld1ByZWVkaXQuZ2V0KCkpOworICAgIG1fcHJlZWRpdC5jdXJzb3JPZmZzZXQgPSBzdGQ6Om1p
bihjdXJzb3JPZmZzZXQsIG1fcHJlZWRpdC50ZXh0Lmxlbmd0aCgpKTsKKyAgICBpZiAodW5kZXJs
aW5lcykgeworICAgICAgICBmb3IgKGF1dG8qIGl0ID0gdW5kZXJsaW5lczsgaXQ7IGl0ID0gZ19s
aXN0X25leHQoaXQpKSB7CisgICAgICAgICAgICBhdXRvKiB1bmRlcmxpbmUgPSBzdGF0aWNfY2Fz
dDxXZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZSo+KGl0LT5kYXRhKTsKKyAgICAgICAgICAgIG1f
cHJlZWRpdC51bmRlcmxpbmVzLmFwcGVuZCh3ZWJraXRJbnB1dE1ldGhvZFVuZGVybGluZUdldENv
bXBvc2l0aW9uVW5kZXJsaW5lKHVuZGVybGluZSkpOworICAgICAgICB9CisgICAgICAgIGdfbGlz
dF9mcmVlX2Z1bGwodW5kZXJsaW5lcywgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4o
d2Via2l0X2lucHV0X21ldGhvZF91bmRlcmxpbmVfZnJlZSkpOworICAgIH0gZWxzZQorICAgICAg
ICBtX3ByZWVkaXQudW5kZXJsaW5lcy5hcHBlbmQoQ29tcG9zaXRpb25VbmRlcmxpbmUoMCwgbV9w
cmVlZGl0LnRleHQubGVuZ3RoKCksIENvbXBvc2l0aW9uVW5kZXJsaW5lQ29sb3I6OlRleHRDb2xv
ciwgQ29sb3IoQ29sb3I6OmJsYWNrKSwgZmFsc2UpKTsKKworICAgIGF1dG8qIHdlYlZpZXcgPSB3
ZWJraXRJbnB1dE1ldGhvZENvbnRleHRHZXRXZWJWaWV3KG1fY29udGV4dC5nZXQoKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQod2ViVmlldyk7CisgICAgd2Via2l0V2ViVmlld1NldENvbXBvc2l0aW9u
KHdlYlZpZXcsIG1fcHJlZWRpdC50ZXh0LCBtX3ByZWVkaXQudW5kZXJsaW5lcywgRWRpdGluZ1Jh
bmdlKG1fcHJlZWRpdC5jdXJzb3JPZmZzZXQsIDEpKTsKK30KKwordm9pZCBJbnB1dE1ldGhvZEZp
bHRlcjo6cHJlZWRpdEZpbmlzaGVkKCkKK3sKKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fZmlsdGVyaW5nQ29udGV4dC5pc0FjdGl2ZSkKKyAgICAgICAg
bV9maWx0ZXJpbmdDb250ZXh0LnByZWVkaXRDaGFuZ2VkID0gdHJ1ZTsKKworICAgIGJvb2wgd2Fz
RW1wdHkgPSBtX3ByZWVkaXQudGV4dC5pc0VtcHR5KCk7CisgICAgbV9wcmVlZGl0ID0geyB9Owor
CisgICAgaWYgKHdhc0VtcHR5KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiB3ZWJWaWV3
ID0gd2Via2l0SW5wdXRNZXRob2RDb250ZXh0R2V0V2ViVmlldyhtX2NvbnRleHQuZ2V0KCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHdlYlZpZXcpOworICAgIHdlYmtpdFdlYlZpZXdTZXRDb21wb3Np
dGlvbih3ZWJWaWV3LCB7IH0sIHsgfSwgRWRpdGluZ1JhbmdlKDAsIDEpKTsKK30KKwordm9pZCBJ
bnB1dE1ldGhvZEZpbHRlcjo6Y29tbWl0dGVkKGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5n
KQoreworICAgIGlmICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbXBv
c2l0aW9uUmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChjb21wb3NpdGlvblN0cmluZyk7CisgICAg
Ym9vbCBwcmVlZGl0V2FzRW1wdHkgPSBtX3ByZWVkaXQudGV4dC5pc0VtcHR5KCk7CisgICAgbV9w
cmVlZGl0ID0geyB9OworCisgICAgYXV0byogd2ViVmlldyA9IHdlYmtpdElucHV0TWV0aG9kQ29u
dGV4dEdldFdlYlZpZXcobV9jb250ZXh0LmdldCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh3ZWJW
aWV3KTsKKyAgICBpZiAobV9maWx0ZXJpbmdDb250ZXh0LmlzQWN0aXZlKSB7CisgICAgICAgIGlm
ICghbV9maWx0ZXJpbmdDb250ZXh0LnByZWVkaXRDaGFuZ2VkICYmIHByZWVkaXRXYXNFbXB0eSAm
JiBtX2NvbXBvc2l0aW9uUmVzdWx0Lmxlbmd0aCgpID09IDEpCisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorICAgIHdlYmtpdFdlYlZpZXdDb25maXJtQ29tcG9zaXRpb24od2ViVmlldywgbV9j
b21wb3NpdGlvblJlc3VsdCk7CisgICAgbV9jb21wb3NpdGlvblJlc3VsdCA9IHsgfTsKK30KKwor
dm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6Y2FuY2VsQ29tcG9zaXRpb24oKQoreworICAgIGlmICht
X3ByZWVkaXQudGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogd2Vi
VmlldyA9IHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEdldFdlYlZpZXcobV9jb250ZXh0LmdldCgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh3ZWJWaWV3KTsKKyAgICB3ZWJraXRXZWJWaWV3Q2FuY2Vs
Q29tcG9zaXRpb24od2ViVmlldywgbV9wcmVlZGl0LnRleHQpOworICAgIG1fcHJlZWRpdCA9IHsg
fTsKKyAgICBtX2NvbXBvc2l0aW9uUmVzdWx0ID0geyB9OworICAgIHdlYmtpdF9pbnB1dF9tZXRo
b2RfY29udGV4dF9yZXNldChtX2NvbnRleHQuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0lucHV0
TWV0aG9kRmlsdGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JbnB1dE1l
dGhvZEZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNzIz
ZjM1YzcwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL0lucHV0TWV0aG9kRmlsdGVyLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTQsIDIwMTkgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NvbXBvc2l0aW9uVW5kZXJsaW5lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRQb2ludC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0OworCisj
aWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5
OworI2VsaWYgUExBVEZPUk0oV1BFKQorc3RydWN0IHdwZV9pbnB1dF9rZXlib2FyZF9ldmVudDsK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgSW5wdXRNZXRob2RGaWx0ZXIgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKElucHV0TWV0aG9kRmlsdGVyKTsKK3B1YmxpYzoKKworICAgIElucHV0TWV0
aG9kRmlsdGVyKCkgPSBkZWZhdWx0OworICAgIH5JbnB1dE1ldGhvZEZpbHRlcigpOworCisgICAg
dm9pZCBzZXRDb250ZXh0KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCopOworICAgIFdlYktpdElu
cHV0TWV0aG9kQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsgfQorCisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworCisjaWYgUExBVEZPUk0oR1RLKQor
ICAgIHVzaW5nIFBsYXRmb3JtRXZlbnRLZXkgPSBHZGtFdmVudEtleTsKKyNlbGlmIFBMQVRGT1JN
KFdQRSkKKyAgICB1c2luZyBQbGF0Zm9ybUV2ZW50S2V5ID0gc3RydWN0IHdwZV9pbnB1dF9rZXli
b2FyZF9ldmVudDsKKyNlbmRpZgorICAgIHN0cnVjdCBGaWx0ZXJSZXN1bHQgeworICAgICAgICBi
b29sIGhhbmRsZWQgeyBmYWxzZSB9OworICAgICAgICBTdHJpbmcga2V5VGV4dDsKKyAgICB9Owor
ICAgIEZpbHRlclJlc3VsdCBmaWx0ZXJLZXlFdmVudChQbGF0Zm9ybUV2ZW50S2V5Kik7CisKKyAg
ICB2b2lkIG5vdGlmeUZvY3VzZWRJbigpOworICAgIHZvaWQgbm90aWZ5Rm9jdXNlZE91dCgpOwor
ICAgIHZvaWQgbm90aWZ5TW91c2VCdXR0b25QcmVzcygpOworICAgIHZvaWQgbm90aWZ5Q3Vyc29y
UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisKKyAgICB2b2lkIGNhbmNlbENvbXBvc2l0
aW9uKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgcHJlZWRpdFN0YXJ0ZWRDYWxsYmFj
ayhJbnB1dE1ldGhvZEZpbHRlciopOworICAgIHN0YXRpYyB2b2lkIHByZWVkaXRDaGFuZ2VkQ2Fs
bGJhY2soSW5wdXRNZXRob2RGaWx0ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBwcmVlZGl0RmluaXNo
ZWRDYWxsYmFjayhJbnB1dE1ldGhvZEZpbHRlciopOworICAgIHN0YXRpYyB2b2lkIGNvbW1pdHRl
ZENhbGxiYWNrKElucHV0TWV0aG9kRmlsdGVyKiwgY29uc3QgY2hhciopOworCisgICAgdm9pZCBw
cmVlZGl0U3RhcnRlZCgpOworICAgIHZvaWQgcHJlZWRpdENoYW5nZWQoKTsKKyAgICB2b2lkIHBy
ZWVkaXRGaW5pc2hlZCgpOworICAgIHZvaWQgY29tbWl0dGVkKGNvbnN0IGNoYXIqKTsKKworICAg
IGJvb2wgaXNWaWV3Rm9jdXNlZCgpIGNvbnN0OworCisgICAgV2ViQ29yZTo6SW50UmVjdCBwbGF0
Zm9ybVRyYW5zZm9ybUN1cnNvclJlY3RUb1ZpZXdDb29yZGluYXRlcyhjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7CisgICAgYm9vbCBwbGF0Zm9ybUV2ZW50S2V5SXNLZXlQcmVzcyhQbGF0Zm9ybUV2
ZW50S2V5KikgY29uc3Q7CisKKyAgICBib29sIG1fZW5hYmxlZCB7IGZhbHNlIH07CisgICAgR1Jl
ZlB0cjxXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQ+IG1fY29udGV4dDsKKworICAgIHN0cnVjdCB7
CisgICAgICAgIFN0cmluZyB0ZXh0OworICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRp
b25VbmRlcmxpbmU+IHVuZGVybGluZXM7CisgICAgICAgIHVuc2lnbmVkIGN1cnNvck9mZnNldDsK
KyAgICB9IG1fcHJlZWRpdDsKKworICAgIHN0cnVjdCB7CisgICAgICAgIGJvb2wgaXNBY3RpdmUg
eyBmYWxzZSB9OworICAgICAgICBib29sIHByZWVkaXRDaGFuZ2VkIHsgZmFsc2UgfTsKKyAgICB9
IG1fZmlsdGVyaW5nQ29udGV4dDsKKworICAgIFN0cmluZyBtX2NvbXBvc2l0aW9uUmVzdWx0Owor
ICAgIFdlYkNvcmU6OkludFBvaW50IG1fY3Vyc29yTG9jYXRpb247Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdElucHV0TWV0aG9kQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5jYWY3NzIxZjk4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdElucHV0TWV0aG9kQ29udGV4dC5jcHAK
QEAgLTAsMCArMSwzNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdElucHV0TWV0aG9kQ29udGV4dC5o
IgorCisjaW5jbHVkZSAiV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdFdlYlZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLyoqCisgKiBTRUNUSU9OOiBXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHQKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQmFzZSBjbGFzcyBmb3IgaW5wdXQg
bWV0aG9kIGNvbnRleHRzCisgKiBAVGl0bGU6IFdlYktpdElucHV0TWV0aG9kQ29udGV4dAorICog
QFNlZV9hbHNvOiAjV2ViS2l0V2ViVmlldworICoKKyAqIFdlYktpdElucHV0TWV0aG9kQ29udGV4
dCBkZWZpbmVzIHRoZSBpbnRlcmZhY2UgdG8gaW1wbGVtZW50IFdlYktpdCBpbnB1dCBtZXRob2Rz
LgorICogVGhlIGlucHV0IG1ldGhvZHMgYXJlIHVzZWQgYnkgV2ViS2l0LCB3aGVuIGVkaXRhYmxl
IGNvbnRlbnQgaXMgZm9jdXNlZCwgdG8gbWFwIGZyb20KKyAqIGtleSBldmVudHMgdG8gVW5pY29k
ZSBjaGFyYWN0ZXIgc3RyaW5ncy4KKyAqCisgKiBBbiBpbnB1dCBtZXRob2QgbWF5IGNvbnN1bWUg
bXVsdGlwbGUga2V5IGV2ZW50cyBpbiBzZXF1ZW5jZSBhbmQgZmluYWxseQorICogb3V0cHV0IHRo
ZSBjb21wb3NlZCByZXN1bHQuIFRoaXMgaXMgY2FsbGVkIHByZWVkaXRpbmcsIGFuZCBhbiBpbnB1
dCBtZXRob2QKKyAqIG1heSBwcm92aWRlIGZlZWRiYWNrIGFib3V0IHRoaXMgcHJvY2VzcyBieSBk
aXNwbGF5aW5nIHRoZSBpbnRlcm1lZGlhdGUKKyAqIGNvbXBvc2l0aW9uIHN0YXRlcyBhcyBwcmVl
ZGl0IHRleHQuCisgKgorICogU2luY2U6IDIuMjgKKyAqLworCitlbnVtIHsKKyAgICBQUkVFRElU
X1NUQVJURUQsCisgICAgUFJFRURJVF9DSEFOR0VELAorICAgIFBSRUVESVRfRklOSVNIRUQsCisK
KyAgICBDT01NSVRURUQsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKworR19ERUZJTkVfQk9YRURf
VFlQRShXZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZSwgd2Via2l0X2lucHV0X21ldGhvZF91bmRl
cmxpbmUsIHdlYmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX2NvcHksIHdlYmtpdF9pbnB1dF9t
ZXRob2RfdW5kZXJsaW5lX2ZyZWUpCisKK2NvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJiB3ZWJr
aXRJbnB1dE1ldGhvZFVuZGVybGluZUdldENvbXBvc2l0aW9uVW5kZXJsaW5lKFdlYktpdElucHV0
TWV0aG9kVW5kZXJsaW5lKiB1bmRlcmxpbmUpCit7CisgICAgcmV0dXJuIHVuZGVybGluZS0+dW5k
ZXJsaW5lOworfQorCisvKioKKyAqIHdlYmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX25ldzoK
KyAqIEBzdGFydF9vZmZzZXQ6IHRoZSBzdGFydCBvZmZzZXQgaW4gcHJlZWRpdCBzdHJpbmcKKyAq
IEBlbmRfb2Zmc2V0OiB0aGUgZW5kIG9mZnNldCBpbiBwcmVlZGl0IHN0cmluZworICoKKyAqIENy
ZWF0ZSBhIG5ldyAjV2ViS2l0SW5wdXRNZXRob2RVbmRlcmxpbmUgZm9yIHRoZSBnaXZlbiByYW5n
ZSBpbiBwcmVlZGl0IHN0cmluZworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSBu
ZXdseSBjcmVhdGVkICNXZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZQorICoKKyAqIFNpbmNlOiAy
LjI4CisgKi8KK1dlYktpdElucHV0TWV0aG9kVW5kZXJsaW5lKiB3ZWJraXRfaW5wdXRfbWV0aG9k
X3VuZGVybGluZV9uZXcodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkK
K3sKKyAgICBhdXRvKiB1bmRlcmxpbmUgPSBzdGF0aWNfY2FzdDxXZWJLaXRJbnB1dE1ldGhvZFVu
ZGVybGluZSo+KGZhc3RNYWxsb2Moc2l6ZW9mKFdlYktpdElucHV0TWV0aG9kVW5kZXJsaW5lKSkp
OworICAgIG5ldyAodW5kZXJsaW5lKSBXZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZShzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gdW5kZXJsaW5lOworfQorCisvKioKKyAqIHdl
YmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX2NvcHk6CisgKiBAdW5kZXJsaW5lOiBhICNXZWJL
aXRJbnB1dE1ldGhvZFVuZGVybGluZQorICoKKyAqIE1ha2UgYSBjb3B5IG9mIHRoZSAjV2ViS2l0
SW5wdXRNZXRob2RVbmRlcmxpbmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBB
IGNvcHkgb2YgcGFzc2VkIGluICNXZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZQorICoKKyAqIFNp
bmNlOiAyLjI4CisgKi8KK1dlYktpdElucHV0TWV0aG9kVW5kZXJsaW5lKiB3ZWJraXRfaW5wdXRf
bWV0aG9kX3VuZGVybGluZV9jb3B5KFdlYktpdElucHV0TWV0aG9kVW5kZXJsaW5lKiB1bmRlcmxp
bmUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodW5kZXJsaW5lLCBudWxscHRyKTsKKwor
ICAgIGF1dG8qIGNvcHlVbmRlcmxpbmUgPSBzdGF0aWNfY2FzdDxXZWJLaXRJbnB1dE1ldGhvZFVu
ZGVybGluZSo+KGZhc3RNYWxsb2Moc2l6ZW9mKFdlYktpdElucHV0TWV0aG9kVW5kZXJsaW5lKSkp
OworICAgIG5ldyAoY29weVVuZGVybGluZSkgV2ViS2l0SW5wdXRNZXRob2RVbmRlcmxpbmUodW5k
ZXJsaW5lLT51bmRlcmxpbmUpOworICAgIHJldHVybiBjb3B5VW5kZXJsaW5lOworfQorCisvKioK
KyAqIHdlYmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX2ZyZWU6CisgKiBAdW5kZXJsaW5lOiBB
ICNXZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZQorICoKKyAqIEZyZWUgdGhlICNXZWJLaXRJbnB1
dE1ldGhvZFVuZGVybGluZS4KKyAqCisgKiBTaW5jZTogMi4yOAorICovCit2b2lkIHdlYmtpdF9p
bnB1dF9tZXRob2RfdW5kZXJsaW5lX2ZyZWUoV2ViS2l0SW5wdXRNZXRob2RVbmRlcmxpbmUqIHVu
ZGVybGluZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHVuZGVybGluZSk7CisKKyAgICB1bmRl
cmxpbmUtPn5XZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZSgpOworICAgIGZhc3RGcmVlKHVuZGVy
bGluZSk7Cit9CisKK3N0cnVjdCBfV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0UHJpdmF0ZSB7Cisg
ICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKK307CisKK3N0YXRpYyBndWludCBzaWduYWxzW0xB
U1RfU0lHTkFMXSA9IHsgMCwgfTsKKworV0VCS0lUX0RFRklORV9BQlNUUkFDVF9UWVBFKFdlYktp
dElucHV0TWV0aG9kQ29udGV4dCwgd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0LCBHX1RZUEVf
T0JKRUNUKQorCisvKioKKyAqIFdlYktpdElucHV0TWV0aG9kQ29udGV4dENsYXNzOgorICogQHNl
dF9lbmFibGVfcHJlZWRpdDogQ2FsbGVkIHZpYSB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRf
c2V0X2VuYWJsZV9wcmVlZGl0KCkgdG8KKyAqICAgY29udHJvbCB0aGUgdXNlIG9mIHRoZSBwcmVl
ZGl0IHN0cmluZy4KKyAqIEBnZXRfcHJlZWRpdDogQ2FsbGVkIHZpYSB3ZWJraXRfaW5wdXRfbWV0
aG9kX2NvbnRleHRfZ2V0X3ByZWVkaXQoKSB0bworICogICByZXRyaWV2ZSB0aGUgdGV4dCBjdXJy
ZW50bHkgYmVpbmcgcHJlZWRpdGVkIGZvciBkaXNwbGF5IGF0IHRoZSBjdXJzb3IKKyAqICAgcG9z
aXRpb24uIEFueSBpbnB1dCBtZXRob2Qgd2hpY2ggY29tcG9zZXMgY29tcGxleCBjaGFyYWN0ZXJz
IG9yIGFueQorICogICBvdGhlciBjb21wb3NpdGlvbnMgZnJvbSBtdWx0aXBsZSBzZXF1ZW50aWFs
IGtleSBwcmVzc2VzIHNob3VsZCBvdmVycmlkZQorICogICB0aGlzIG1ldGhvZCB0byBwcm92aWRl
IGZlZWRiYWNrLgorICogQGZpbHRlcl9rZXlfZXZlbnQ6IENhbGxlZCB2aWEgd2Via2l0X2lucHV0
X21ldGhvZF9jb250ZXh0X2ZpbHRlcl9rZXlfZXZlbnQoKSBvbiBldmVyeQorICogICBrZXkgcHJl
c3Mgb3IgcmVsZWFzZSBldmVudC4gRXZlcnkgbm9uLXRyaXZpYWwgaW5wdXQgbWV0aG9kIG5lZWRz
IHRvCisgKiAgIG92ZXJyaWRlIHRoaXMgaW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoZSBtYXBwaW5n
IGZyb20ga2V5IGV2ZW50cyB0byB0ZXh0LgorICogICBBIHJldHVybiB2YWx1ZSBvZiAlVFJVRSBp
bmRpY2F0ZXMgdG8gdGhlIGNhbGxlciB0aGF0IHRoZSBldmVudCB3YXMKKyAqICAgY29uc3VtZWQg
YnkgdGhlIGlucHV0IG1ldGhvZC4gSW4gdGhhdCBjYXNlLCB0aGUgI1dlYktpdElucHV0TWV0aG9k
Q29udGV4dDo6Y29tbWl0dGVkCisgKiAgIHNpZ25hbCBzaG91bGQgYmUgZW1pdHRlZCB1cG9uIGNv
bXBsZXRpb24gb2YgYSBrZXkgc2VxdWVuY2UgdG8gcGFzcyB0aGUKKyAqICAgcmVzdWx0aW5nIHRl
eHQgYmFjayB0byB0aGUgZWRpdGFibGUgZWxlbWVudC4gQWx0ZXJuYXRpdmVseSwgJUZBTFNFIG1h
eSBiZQorICogICByZXR1cm5lZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBldmVudCB3YXNu4oCZdCBo
YW5kbGVkIGJ5IHRoZSBpbnB1dCBtZXRob2QuCisgKiBAbm90aWZ5X2ZvY3VzX2luOiBDYWxsZWQg
dmlhIHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9ub3RpZnlfZm9jdXNfaW4oKSB3aGVuCisg
KiAgIGFuIGVkaXRhYmxlIGVsZW1lbnQgb2YgdGhlICNXZWJLaXRXZWJWaWV3IGhhcyBnYWluZWQg
Zm9jdXMuCisgKiBAbm90aWZ5X2ZvY3VzX291dDogQ2FsbGVkIHZpYSB3ZWJraXRfaW5wdXRfbWV0
aG9kX2NvbnRleHRfbm90aWZ5X2ZvY3VzX291dCgpIHdoZW4KKyAqICAgYW4gZWRpdGFibGUgZWxl
bWVudCBvZiB0aGUgI1dlYktpdFdlYlZpZXcgaGFzIGxvc3QgZm9jdXMuCisgKiBAbm90aWZ5X2N1
cnNvcl9hcmVhOiBDYWxsZWQgdmlhIHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9ub3RpZnlf
Y3Vyc29yX2FyZWEoKQorICogICB0byBpbmZvcm0gdGhlIGlucHV0IG1ldGhvZCBvZiB0aGUgY3Vy
cmVudCBjdXJzb3IgbG9jYXRpb24gcmVsYXRpdmUgdG8KKyAqICAgdGhlIGNsaWVudCB3aW5kb3cu
CisgKiBAcmVzZXQ6IENhbGxlZCB2aWEgd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X3Jlc2V0
KCkgdG8gc2lnbmFsIGEgY2hhbmdlIHRoYXQKKyAqICAgcmVxdWlyZXMgYSByZXNldC4gQW4gaW5w
dXQgbWV0aG9kIHRoYXQgaW1wbGVtZW50cyBwcmVlZGl0aW5nCisgKiAgIHNob3VsZCBvdmVycmlk
ZSB0aGlzIG1ldGhvZCB0byBjbGVhciB0aGUgcHJlZWRpdCBzdGF0ZSBvbiByZXNldC4KKyAqCisg
KiBTaW5jZTogMi4yOAorICovCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9pbnB1dF9tZXRob2RfY29u
dGV4dF9jbGFzc19pbml0KFdlYktpdElucHV0TWV0aG9kQ29udGV4dENsYXNzKiBrbGFzcykKK3sK
KyAgICAvKioKKyAgICAgKiBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQ6OnByZWVkaXQtc3RhcnRl
ZAorICAgICAqIEBjb250ZXh0OiB0aGUgI1dlYktpdElucHV0TWV0aG9kQ29udGV4dCBvbiB3aGlj
aCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKgorICAgICAqIEVtaXR0ZWQgd2hlbiBhIG5l
dyBwcmVlZGl0aW5nIHNlcXVlbmNlIHN0YXJ0cy4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjI4
CisgICAgICovCisgICAgc2lnbmFsc1tQUkVFRElUX1NUQVJURURdID0gZ19zaWduYWxfbmV3KAor
ICAgICAgICAicHJlZWRpdC1zdGFydGVkIiwKKyAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Moa2xh
c3MpLAorICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgR19TVFJVQ1RfT0ZGU0VU
KFdlYktpdElucHV0TWV0aG9kQ29udGV4dENsYXNzLCBwcmVlZGl0X3N0YXJ0ZWQpLAorICAgICAg
ICBudWxscHRyLCBudWxscHRyLAorICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywK
KyAgICAgICAgR19UWVBFX05PTkUsIDApOworCisgICAgLyoqCisgICAgICogV2ViS2l0SW5wdXRN
ZXRob2RDb250ZXh0OjpwcmVlZGl0LWNoYW5nZWQKKyAgICAgKiBAY29udGV4dDogdGhlICNXZWJL
aXRJbnB1dE1ldGhvZENvbnRleHQgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAg
ICoKKyAgICAgKiBFbWl0dGVkIHdoZW5ldmVyIHRoZSBwcmVlZGl0IHNlcXVlbmNlIGN1cnJlbnRs
eSBiZWluZyBlbnRlcmVkIGhhcyBjaGFuZ2VkLgorICAgICAqIEl0IGlzIGFsc28gZW1pdHRlZCBh
dCB0aGUgZW5kIG9mIGEgcHJlZWRpdCBzZXF1ZW5jZSwgaW4gd2hpY2ggY2FzZQorICAgICAqIHdl
YmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9nZXRfcHJlZWRpdCgpIHJldHVybnMgdGhlIGVtcHR5
IHN0cmluZy4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjI4CisgICAgICovCisgICAgc2lnbmFs
c1tQUkVFRElUX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KAorICAgICAgICAicHJlZWRpdC1jaGFu
Z2VkIiwKKyAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Moa2xhc3MpLAorICAgICAgICBHX1NJR05B
TF9SVU5fTEFTVCwKKyAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdElucHV0TWV0aG9kQ29u
dGV4dENsYXNzLCBwcmVlZGl0X2NoYW5nZWQpLAorICAgICAgICBudWxscHRyLCBudWxscHRyLAor
ICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywKKyAgICAgICAgR19UWVBFX05PTkUs
IDApOworCisgICAgLyoqCisgICAgICogV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0OjpwcmVlZGl0
LWZpbmlzaGVkCisgICAgICogQGNvbnRleHQ6IHRoZSAjV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0
IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqCisgICAgICogRW1pdHRlZCB3
aGVuIGEgcHJlZWRpdGluZyBzZXF1ZW5jZSBoYXMgYmVlbiBjb21wbGV0ZWQgb3IgY2FuY2VsZWQu
CisgICAgICoKKyAgICAgKiBTaW5jZTogMi4yOAorICAgICAqLworICAgIHNpZ25hbHNbUFJFRURJ
VF9GSU5JU0hFRF0gPSBnX3NpZ25hbF9uZXcoCisgICAgICAgICJwcmVlZGl0LWZpbmlzaGVkIiwK
KyAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Moa2xhc3MpLAorICAgICAgICBHX1NJR05BTF9SVU5f
TEFTVCwKKyAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdElucHV0TWV0aG9kQ29udGV4dENs
YXNzLCBwcmVlZGl0X2ZpbmlzaGVkKSwKKyAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciwKKyAgICAg
ICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsCisgICAgICAgIEdfVFlQRV9OT05FLCAwKTsK
KworICAgIC8qKgorICAgICAqIFdlYktpdElucHV0TWV0aG9kQ29udGV4dDo6Y29tbWl0dGVkCisg
ICAgICogQGNvbnRleHQ6IHRoZSAjV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0IG9uIHdoaWNoIHRo
ZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEB0ZXh0OiB0aGUgc3RyaW5nIHJlc3VsdAorICAg
ICAqCisgICAgICogRW1pdHRlZCB3aGVuIGEgY29tcGxldGUgaW5wdXQgc2VxdWVuY2UgaGFzIGJl
ZW4gZW50ZXJlZCBieSB0aGUgdXNlci4KKyAgICAgKiBUaGlzIGNhbiBiZSBhIHNpbmdsZSBjaGFy
YWN0ZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBrZXkgcHJlc3Mgb3IgdGhlCisgICAgICogZmluYWwg
cmVzdWx0IG9mIHByZWVkaXRpbmcuCisgICAgICoKKyAgICAgKiBTaW5jZTogMi4yOAorICAgICAq
LworICAgIHNpZ25hbHNbQ09NTUlUVEVEXSA9IGdfc2lnbmFsX25ldygKKyAgICAgICAgImNvbW1p
dHRlZCIsCisgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgR19TSUdO
QUxfUlVOX0xBU1QsCisgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRJbnB1dE1ldGhvZENv
bnRleHRDbGFzcywgY29tbWl0dGVkKSwKKyAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciwKKyAgICAg
ICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsCisgICAgICAgIEdfVFlQRV9OT05FLCAxLAor
ICAgICAgICBHX1RZUEVfU1RSSU5HKTsKK30KKwordm9pZCB3ZWJraXRJbnB1dE1ldGhvZENvbnRl
eHRTZXRXZWJWaWV3KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCogY29udGV4dCwgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKK3sKKyAgICBjb250ZXh0LT5wcml2LT53ZWJWaWV3ID0gd2ViVmlldzsK
K30KKworV2ViS2l0V2ViVmlldyogd2Via2l0SW5wdXRNZXRob2RDb250ZXh0R2V0V2ViVmlldyhX
ZWJLaXRJbnB1dE1ldGhvZENvbnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNvbnRleHQt
PnByaXYtPndlYlZpZXc7Cit9CisKKy8qKgorICogd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0
X3NldF9lbmFibGVfcHJlZWRpdDoKKyAqIEBjb250ZXh0OiBhICNXZWJLaXRJbnB1dE1ldGhvZENv
bnRleHQKKyAqIEBlbmFibGVkOiB3aGV0aGVyIHRvIGVuYWJsZSBwcmVlZGl0CisgKgorICogU2V0
IHdoZXRoZXIgQGNvbnRleHQgc2hvdWxkIGVuYWJsZSBwcmVlZGl0IHRvIGRpc3BsYXkgZmVlZGJh
Y2suCisgKgorICogU2luY2U6IDIuMjgKKyAqLwordm9pZCB3ZWJraXRfaW5wdXRfbWV0aG9kX2Nv
bnRleHRfc2V0X2VuYWJsZV9wcmVlZGl0KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCogY29udGV4
dCwgZ2Jvb2xlYW4gZW5hYmxlZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19J
TlBVVF9NRVRIT0RfQ09OVEVYVChjb250ZXh0KSk7CisKKyAgICBhdXRvKiBpbUNsYXNzID0gV0VC
S0lUX0lOUFVUX01FVEhPRF9DT05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKKyAgICBpZiAoaW1D
bGFzcy0+c2V0X2VuYWJsZV9wcmVlZGl0KQorICAgICAgICBpbUNsYXNzLT5zZXRfZW5hYmxlX3By
ZWVkaXQoY29udGV4dCwgZW5hYmxlZCk7Cit9CisKKy8qKgorICogd2Via2l0X2lucHV0X21ldGhv
ZF9jb250ZXh0X2dldF9wcmVlZGl0OgorICogQGNvbnRleHQ6IGEgI1dlYktpdElucHV0TWV0aG9k
Q29udGV4dAorICogQHRleHQ6IChvdXQpICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBsb2Nh
dGlvbiB0byBzdG9yZSB0aGUgcHJlZWRpdCBzdHJpbmcKKyAqIEB1bmRlcmxpbmVzOiAob3V0KSAo
dHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKSAoZWxlbWVudC10eXBlIFdlYktpdDIuSW5wdXRNZXRo
b2RVbmRlcmxpbmUpOiBsb2NhdGlvbiB0byBzdG9yZSB0aGUgdW5kZXJsaW5lcyBhcyBhICNHTGlz
dCBvZiAjV2ViS2l0SW5wdXRNZXRob2RVbmRlcmxpbmUKKyAqIEBjdXJzb3Jfb2Zmc2V0OiAob3V0
KSAobnVsbGFibGUpOiBsb2NhdGlvbiB0byBzdG9yZSB0aGUgcG9zaXRpb24gb2YgY3Vyc29yIGlu
IHByZWVkaXQgc3RyaW5nCisgKgorICogR2V0IHRoZSBjdXJyZW50IHByZWVkaXQgc3RyaW5nIGZv
ciB0aGUgQGNvbnRleHQsIGFuZCBhIGxpc3Qgb2YgV2ViS2l0SW5wdXRNZXRob2RVbmRlcmxpbmUg
dG8gYXBwbHkgdG8gdGhlIHN0cmluZy4KKyAqIFRoZSBzdHJpbmcgd2lsbCBiZSBkaXNwbGF5ZWQg
aW5zZXJ0ZWQgYXQgQGN1cnNvcl9vZmZzZXQuCisgKgorICogU2luY2U6IDIuMjgKKyAqLwordm9p
ZCB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfZ2V0X3ByZWVkaXQoV2ViS2l0SW5wdXRNZXRo
b2RDb250ZXh0KiBjb250ZXh0LCBjaGFyKiogdGV4dCwgR0xpc3QqKiB1bmRlcmxpbmVzLCB1bnNp
Z25lZCogY3Vyc29yT2Zmc2V0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lO
UFVUX01FVEhPRF9DT05URVhUKGNvbnRleHQpKTsKKworICAgIGF1dG8qIGltQ2xhc3MgPSBXRUJL
SVRfSU5QVVRfTUVUSE9EX0NPTlRFWFRfR0VUX0NMQVNTKGNvbnRleHQpOworICAgIGlmIChpbUNs
YXNzLT5nZXRfcHJlZWRpdCkgeworICAgICAgICBpbUNsYXNzLT5nZXRfcHJlZWRpdChjb250ZXh0
LCB0ZXh0LCB1bmRlcmxpbmVzLCBjdXJzb3JPZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKHRleHQpCisgICAgICAgICp0ZXh0ID0gZ19zdHJkdXAoIiIpOworICAgIGlm
ICh1bmRlcmxpbmVzKQorICAgICAgICAqdW5kZXJsaW5lcyA9IG51bGxwdHI7CisgICAgaWYgKGN1
cnNvck9mZnNldCkKKyAgICAgICAgKmN1cnNvck9mZnNldCA9IDA7Cit9CisKKy8qKgorICogd2Vi
a2l0X2lucHV0X21ldGhvZF9jb250ZXh0X25vdGlmeV9mb2N1c19pbjoKKyAqIEBjb250ZXh0OiBh
ICNXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQKKyAqCisgKiBOb3RpZnkgQGNvbnRleHQgdGhhdCBp
bnB1dCBhc3NvY2lhdGVkIGhhcyBnYWluZWQgZm9jdXMuCisgKgorICogU2luY2U6IDIuMjgKKyAq
Lwordm9pZCB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfbm90aWZ5X2ZvY3VzX2luKFdlYktp
dElucHV0TWV0aG9kQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9JU19JTlBVVF9NRVRIT0RfQ09OVEVYVChjb250ZXh0KSk7CisKKyAgICBhdXRvKiBpbUNs
YXNzID0gV0VCS0lUX0lOUFVUX01FVEhPRF9DT05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKKyAg
ICBpZiAoaW1DbGFzcy0+bm90aWZ5X2ZvY3VzX2luKQorICAgICAgICBpbUNsYXNzLT5ub3RpZnlf
Zm9jdXNfaW4oY29udGV4dCk7Cit9CisKKy8qKgorICogd2Via2l0X2lucHV0X21ldGhvZF9jb250
ZXh0X25vdGlmeV9mb2N1c19vdXQ6CisgKiBAY29udGV4dDogYSAjV2ViS2l0SW5wdXRNZXRob2RD
b250ZXh0CisgKgorICogTm90aWZ5IEBjb250ZXh0IHRoYXQgaW5wdXQgYXNzb2NpYXRlZCBoYXMg
bG9zdCBmb2N1cy4KKyAqCisgKiBTaW5jZTogMi4yOAorICovCit2b2lkIHdlYmtpdF9pbnB1dF9t
ZXRob2RfY29udGV4dF9ub3RpZnlfZm9jdXNfb3V0KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19JTlBVVF9NRVRIT0Rf
Q09OVEVYVChjb250ZXh0KSk7CisKKyAgICBhdXRvKiBpbUNsYXNzID0gV0VCS0lUX0lOUFVUX01F
VEhPRF9DT05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKKyAgICBpZiAoaW1DbGFzcy0+bm90aWZ5
X2ZvY3VzX291dCkKKyAgICAgICAgaW1DbGFzcy0+bm90aWZ5X2ZvY3VzX291dChjb250ZXh0KTsK
K30KKworLyoqCisgKiB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfbm90aWZ5X2N1cnNvcl9h
cmVhOgorICogQGNvbnRleHQ6IGEgI1dlYktpdElucHV0TWV0aG9kQ29udGV4dAorICogQHg6IHRo
ZSB4IGNvb3JkaW5hdGUgb2YgY3Vyc29yIGxvY2F0aW9uCisgKiBAeTogdGhlIHkgY29vcmRpbmF0
ZSBvZiBjdXJzb3IgbG9jYXRpb24KKyAqIEB3aWR0aDogdGhlIHdpZHRoIG9mIGN1cnNvciBhcmVh
CisgKiBAaGVpZ2h0OiB0aGUgaGVpZ2h0IG9mIGN1cnNvciBhcmVhCisgKgorICogTm90aWZ5IEBj
b250ZXh0IHRoYXQgY3Vyc29yIGFyZWEgY2hhbmdlZCBpbiBpbnB1dCBhc3NvY2lhdGVkLgorICoK
KyAqIFNpbmNlOiAyLjI4CisgKi8KK3ZvaWQgd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X25v
dGlmeV9jdXJzb3JfYXJlYShXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQqIGNvbnRleHQsIGludCB4
LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0lOUFVUX01FVEhPRF9DT05URVhUKGNvbnRleHQpKTsKKworICAgIGF1dG8qIGlt
Q2xhc3MgPSBXRUJLSVRfSU5QVVRfTUVUSE9EX0NPTlRFWFRfR0VUX0NMQVNTKGNvbnRleHQpOwor
ICAgIGlmIChpbUNsYXNzLT5ub3RpZnlfY3Vyc29yX2FyZWEpCisgICAgICAgIGltQ2xhc3MtPm5v
dGlmeV9jdXJzb3JfYXJlYShjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworLyoq
CisgKiB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfcmVzZXQ6CisgKiBAY29udGV4dDogYSAj
V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0CisgKgorICogUmVzZXQgdGhlIEBjb250ZXh0LiBUaGlz
IHdpbGwgdHlwaWNhbGx5IGNhdXNlIHRoZSBpbnB1dCB0byBjbGVhciB0aGUgcHJlZWRpdCBzdGF0
ZS4KKyAqCisgKiBTaW5jZTogMi4yOAorICovCit2b2lkIHdlYmtpdF9pbnB1dF9tZXRob2RfY29u
dGV4dF9yZXNldChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQqIGNvbnRleHQpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSU5QVVRfTUVUSE9EX0NPTlRFWFQoY29udGV4dCkpOwor
CisgICAgYXV0byogaW1DbGFzcyA9IFdFQktJVF9JTlBVVF9NRVRIT0RfQ09OVEVYVF9HRVRfQ0xB
U1MoY29udGV4dCk7CisgICAgaWYgKGltQ2xhc3MtPnJlc2V0KQorICAgICAgICBpbUNsYXNzLT5y
ZXNldChjb250ZXh0KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdElucHV0TWV0aG9kQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdElucHV0TWV0aG9kQ29udGV4dFByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDcxNGM0MWQ5YjcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRJbnB1dE1l
dGhvZENvbnRleHRQcml2YXRlLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYktpdElucHV0
TWV0aG9kQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXcuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NvbXBvc2l0aW9uVW5kZXJsaW5lLmg+CisKK3N0cnVjdCBfV2ViS2l0SW5wdXRNZXRo
b2RVbmRlcmxpbmUgeworICAgIGV4cGxpY2l0IF9XZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZShj
b25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQorICAgICAgICA6
IHVuZGVybGluZSh1bmRlcmxpbmUpCisgICAgeworICAgIH0KKworICAgIF9XZWJLaXRJbnB1dE1l
dGhvZFVuZGVybGluZSh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgdW5kZXJsaW5lLnN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7CisgICAg
ICAgIHVuZGVybGluZS5lbmRPZmZzZXQgPSBlbmRPZmZzZXQ7CisgICAgfQorCisgICAgV2ViQ29y
ZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUgdW5kZXJsaW5lOworfTsKKworY29uc3QgV2ViQ29yZTo6
Q29tcG9zaXRpb25VbmRlcmxpbmUmIHdlYmtpdElucHV0TWV0aG9kVW5kZXJsaW5lR2V0Q29tcG9z
aXRpb25VbmRlcmxpbmUoV2ViS2l0SW5wdXRNZXRob2RVbmRlcmxpbmUqKTsKK3ZvaWQgd2Via2l0
SW5wdXRNZXRob2RDb250ZXh0U2V0V2ViVmlldyhXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQqLCBX
ZWJLaXRXZWJWaWV3Kik7CitXZWJLaXRXZWJWaWV3KiB3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRH
ZXRXZWJWaWV3KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBkMjFjNzgyZWRl
ZC4uNGNiNjY4NGNlYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYlZpZXcuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiV2ViS2l0
Rm9ybUNsaWVudC5oIgogI2luY2x1ZGUgIldlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViS2l0SWNvbkxvYWRpbmdDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRJbnB1
dE1ldGhvZENvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0SW5zdGFsbE1pc3NpbmdN
ZWRpYVBsdWdpbnNQZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRK
YXZhc2NyaXB0UmVzdWx0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdE5hdmlnYXRpb25DbGll
bnQuaCIKQEAgLTgxLDYgKzgyLDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKICNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiV2ViS2l0SW5wdXRNZXRob2RDb250
ZXh0SW1wbEd0ay5oIgogI2luY2x1ZGUgIldlYktpdFBvaW50ZXJMb2NrUGVybWlzc2lvblJlcXVl
c3QuaCIKICNpbmNsdWRlICJXZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUuaCIKICNpbmNsdWRl
ICJXZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlLmgiCkBAIC03NjcsNiArNzY5LDEwIEBAIHN0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAKICNpZiBQ
TEFURk9STShHVEspCiAgICAgYXR0YWNoSWNvbkxvYWRpbmdDbGllbnRUb1ZpZXcod2ViVmlldyk7
CisKKyAgICBHUmVmUHRyPFdlYktpdElucHV0TWV0aG9kQ29udGV4dD4gaW1Db250ZXh0ID0gYWRv
cHRHUmVmKHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtOZXcoKSk7CisgICAgd2Via2l0
SW5wdXRNZXRob2RDb250ZXh0U2V0V2ViVmlldyhpbUNvbnRleHQuZ2V0KCksIHdlYlZpZXcpOwor
ICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5wdXRNZXRob2RDb250ZXh0KFdFQktJVF9XRUJfVklF
V19CQVNFKHdlYlZpZXcpLCBpbUNvbnRleHQuZ2V0KCkpOwogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShXUEUpCkBAIC0yNjg1LDYgKzI2OTEsMzIgQEAgdm9pZCB3ZWJraXRXZWJWaWV3RGlkTG9zZVBv
aW50ZXJMb2NrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB9CiAjZW5kaWYKIAorc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld1N5bnRoZXNpemVDb21wb3NpdGlvbktleVByZXNzKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCit7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIHdlYmtpdFdlYlZpZXdCYXNl
U3ludGhlc2l6ZUNvbXBvc2l0aW9uS2V5UHJlc3MoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmll
dykpOworI2VsaWYgUExBVEZPUk0oV1BFKQorICAgIHdlYlZpZXctPnByaXYtPnZpZXctPnN5bnRo
ZXNpemVDb21wb3NpdGlvbktleVByZXNzKCk7CisjZW5kaWYKK30KKwordm9pZCB3ZWJraXRXZWJW
aWV3U2V0Q29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgU3RyaW5nJiB0
ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBjb25z
dCBFZGl0aW5nUmFuZ2UmIHNlbGVjdGlvblJhbmdlKQoreworICAgIHdlYmtpdFdlYlZpZXdTeW50
aGVzaXplQ29tcG9zaXRpb25LZXlQcmVzcyh3ZWJWaWV3KTsKKyAgICBnZXRQYWdlKHdlYlZpZXcp
LnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblJhbmdlKTsKK30KKwor
dm9pZCB3ZWJraXRXZWJWaWV3Q29uZmlybUNvbXBvc2l0aW9uKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICB3ZWJraXRXZWJWaWV3U3ludGhlc2l6ZUNv
bXBvc2l0aW9uS2V5UHJlc3Mod2ViVmlldyk7CisgICAgZ2V0UGFnZSh3ZWJWaWV3KS5jb25maXJt
Q29tcG9zaXRpb24odGV4dCk7Cit9CisKK3ZvaWQgd2Via2l0V2ViVmlld0NhbmNlbENvbXBvc2l0
aW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBn
ZXRQYWdlKHdlYlZpZXcpLmNvbmZpcm1Db21wb3NpdGlvbih0ZXh0KTsKK30KKwogI2lmIFBMQVRG
T1JNKFdQRSkKIC8qKgogICogd2Via2l0X3dlYl92aWV3X2dldF9iYWNrZW5kOgpAQCAtNDQwNSwz
ICs0NDM3LDU4IEBAIFdlYktpdFVzZXJNZXNzYWdlKiB3ZWJraXRfd2ViX3ZpZXdfc2VuZF9tZXNz
YWdlX3RvX3BhZ2VfZmluaXNoKFdlYktpdFdlYlZpZXcqIHdlCiAKICAgICByZXR1cm4gV0VCS0lU
X1VTRVJfTUVTU0FHRShnX3Rhc2tfcHJvcGFnYXRlX3BvaW50ZXIoR19UQVNLKHJlc3VsdCksIGVy
cm9yKSk7CiB9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X3NldF9pbnB1dF9tZXRob2RfY29u
dGV4dDoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICogQGNvbnRleHQ6IChudWxs
YWJsZSk6IHRoZSAjV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0IHRvIHNldCwgb3IgJU5VTEwKKyAq
CisgKiBTZXQgdGhlICNXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgdG8gYmUgdXNlZCBieSBAd2Vi
X3ZpZXcsIG9yICVOVUxMIHRvIG5vdCB1c2UgYW55IGlucHV0IG1ldGhvZC4KKyAqIE5vdGUgdGhh
dCB0aGUgc2FtZSAjV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0IGNhbid0IGJlIHNldCBvbiBtb3Jl
IHRoYW4gb25lICNXZWJLaXRXZWJWaWV3IGF0IHRoZSBzYW1lIHRpbWUuCisgKgorICogU2luY2U6
IDIuMjgKKyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0X2lucHV0X21ldGhvZF9jb250ZXh0
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdElucHV0TWV0aG9kQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCghY29udGV4dCB8fCBXRUJLSVRfSVNfSU5QVVRfTUVUSE9E
X0NPTlRFWFQoY29udGV4dCkpOworCisgICAgaWYgKGNvbnRleHQpIHsKKyAgICAgICAgaWYgKGF1
dG8qIGN1cnJlbnRXZWJWaWV3ID0gd2Via2l0SW5wdXRNZXRob2RDb250ZXh0R2V0V2ViVmlldyhj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRXZWJWaWV3ICE9IHdlYlZpZXcpIHsK
KyAgICAgICAgICAgICAgICBnX3dhcm5pbmcoIlRyeWluZyB0byBzZXQgYSBXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHQgdG8gYSBXZWJLaXRXZWJWaWV3LCBidXQgdGhlIFdlYktpdElucHV0TWV0aG9k
Q29udGV4dCAiCisgICAgICAgICAgICAgICAgICAgICJ3YXMgYWxyZWFkeSBzZXQgdG8gYSBkaWZm
ZXJlbnQgV2ViS2l0V2ViVmlldy4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGEgV2ViS2l0SW5w
dXRNZXRob2RDb250ZXh0ICIKKyAgICAgICAgICAgICAgICAgICAgIndpdGggbW9yZSB0aGFuIG9u
ZSBXZWJLaXRXZWJWaWV3IGF0IHRoZSBzYW1lIHRpbWUuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgd2Via2l0SW5wdXRNZXRob2RDb250
ZXh0U2V0V2ViVmlldyhjb250ZXh0LCB3ZWJWaWV3KTsKKyAgICB9CisjaWYgUExBVEZPUk0oR1RL
KQorICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5wdXRNZXRob2RDb250ZXh0KFdFQktJVF9XRUJf
VklFV19CQVNFKHdlYlZpZXcpLCBjb250ZXh0KTsKKyNlbGlmIFBMQVRGT1JNKFdQRSkKKyAgICB3
ZWJWaWV3LT5wcml2LT52aWV3LT5zZXRJbnB1dE1ldGhvZENvbnRleHQoY29udGV4dCk7CisjZW5k
aWYKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2lucHV0X21ldGhvZF9jb250ZXh0
OgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogR2V0IHRoZSAjV2ViS2l0
SW5wdXRNZXRob2RDb250ZXh0IGN1cnJlbnRseSBpbiB1c2UgYnkgQHdlYl92aWV3LCBvciAlTlVM
TCBpZiBubyBpbnB1dCBtZXRob2QgaXMgYmVpbmcgdXNlZC4KKyAqCisgKiBSZXR1cm5zOiAobnVs
bGFibGUpICh0cmFuc2ZlciBub25lKTogYSAjV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0LCBvciAl
TlVMTAorICoKKyAqIFNpbmNlOiAyLjI4CisgKi8KK1dlYktpdElucHV0TWV0aG9kQ29udGV4dCog
d2Via2l0X3dlYl92aWV3X2dldF9pbnB1dF9tZXRob2RfY29udGV4dChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3
ZWJWaWV3KSwgbnVsbHB0cik7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgcmV0dXJuIHdlYmtp
dFdlYlZpZXdCYXNlR2V0SW5wdXRNZXRob2RDb250ZXh0KFdFQktJVF9XRUJfVklFV19CQVNFKHdl
YlZpZXcpKTsKKyNlbGlmIFBMQVRGT1JNKFdQRSkKKyAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+
dmlldy0+aW5wdXRNZXRob2RDb250ZXh0KCk7CisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKaW5k
ZXggYTVmOTliMzI1ZGQuLjM1NTI4MjY1NzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTI3LDYgKzI3
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIK
KyNpbmNsdWRlICJFZGl0aW5nUmFuZ2UuaCIKICNpbmNsdWRlICJJbnN0YWxsTWlzc2luZ01lZGlh
UGx1Z2luc1Blcm1pc3Npb25SZXF1ZXN0LmgiCiAjaW5jbHVkZSAiVXNlck1lc3NhZ2UuaCIKICNp
bmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmgiCkBAIC0zNSw2ICszNiw3IEBACiAjaW5j
bHVkZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3LmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGlvblVuZGVybGluZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTGlua0lj
b24uaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KQEAgLTEwOSwzICsxMTEs
NyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdSZXF1ZXN0UG9pbnRlckxvY2soV2ViS2l0V2ViVmlldyop
Owogdm9pZCB3ZWJraXRXZWJWaWV3RGVueVBvaW50ZXJMb2NrUmVxdWVzdChXZWJLaXRXZWJWaWV3
Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdEaWRMb3NlUG9pbnRlckxvY2soV2ViS2l0V2ViVmlldyop
OwogI2VuZGlmCisKK3ZvaWQgd2Via2l0V2ViVmlld1NldENvbXBvc2l0aW9uKFdlYktpdFdlYlZp
ZXcqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRl
cmxpbmU+JiwgY29uc3QgV2ViS2l0OjpFZGl0aW5nUmFuZ2UmKTsKK3ZvaWQgd2Via2l0V2ViVmll
d0NvbmZpcm1Db21wb3NpdGlvbihXZWJLaXRXZWJWaWV3KiwgY29uc3QgU3RyaW5nJik7Cit2b2lk
IHdlYmtpdFdlYlZpZXdDYW5jZWxDb21wb3NpdGlvbihXZWJLaXRXZWJWaWV3KiwgY29uc3QgU3Ry
aW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL0lucHV0
TWV0aG9kRmlsdGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvSW5w
dXRNZXRob2RGaWx0ZXJHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi44ZDg1ZGE3YWQ5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvSW5wdXRNZXRob2RGaWx0ZXJHdGsuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIklucHV0TWV0aG9kRmlsdGVyLmgiCisKKyNpbmNsdWRlICJXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5j
bHVkZSA8Z2RrL2dkay5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitJbnRSZWN0IElucHV0TWV0aG9kRmlsdGVyOjpwbGF0Zm9ybVRyYW5zZm9ybUN1
cnNvclJlY3RUb1ZpZXdDb29yZGluYXRlcyhjb25zdCBJbnRSZWN0JiBjdXJzb3JSZWN0KQorewor
ICAgIEludFJlY3QgdHJhbnNsYXRlZFJlY3QgPSBjdXJzb3JSZWN0OworICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQo
d2Via2l0SW5wdXRNZXRob2RDb250ZXh0R2V0V2ViVmlldyhtX2NvbnRleHQuZ2V0KCkpKSwgJmFs
bG9jYXRpb24pOworICAgIHRyYW5zbGF0ZWRSZWN0Lm1vdmUoYWxsb2NhdGlvbi54LCBhbGxvY2F0
aW9uLnkpOworICAgIHJldHVybiB0cmFuc2xhdGVkUmVjdDsKK30KKworYm9vbCBJbnB1dE1ldGhv
ZEZpbHRlcjo6cGxhdGZvcm1FdmVudEtleUlzS2V5UHJlc3MoUGxhdGZvcm1FdmVudEtleSogZXZl
bnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGV2ZW50LT50eXBlID09IEdES19LRVlfUFJFU1M7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCAwMGI3YzZiYmM0Ni4uYjEyNTJkYWY3
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVu
dEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVu
dEltcGwuY3BwCkBAIC0yMjQsOCArMjI0LDYgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZG9uZVdp
dGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgYm9vbAogewog
ICAgIGlmICh3YXNFdmVudEhhbmRsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoZXZlbnQu
ZmFrZWRGb3JDb21wb3NpdGlvbigpKQotICAgICAgICByZXR1cm47CiAKICAgICBXZWJLaXRXZWJW
aWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdX
aWRnZXQpOwogICAgIHdlYmtpdFdlYlZpZXdCYXNlRm9yd2FyZE5leHRLZXlFdmVudCh3ZWJraXRX
ZWJWaWV3QmFzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdElucHV0TWV0aG9kQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uYjY5ZjMxMDExMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0TWV0aG9kQ29udGV4dC5oCkBAIC0wLDAg
KzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElP
TikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJl
Y3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRfaAorI2Rl
ZmluZSBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVz
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9JTlBVVF9NRVRIT0Rf
Q09OVEVYVCAgICAgICAgICAgICh3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX0lOUFVUX01FVEhPRF9DT05URVhUKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0lOUFVUX01FVEhP
RF9DT05URVhULCBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQpKQorI2RlZmluZSBXRUJLSVRfSU5Q
VVRfTUVUSE9EX0NPTlRFWFRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfSU5QVVRfTUVUSE9EX0NPTlRFWFQsIFdlYktpdElucHV0
TWV0aG9kQ29udGV4dENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0lOUFVUX01FVEhPRF9DT05U
RVhUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9UWVBFX0lOUFVUX01FVEhPRF9DT05URVhUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0lOUFVUX01F
VEhPRF9DT05URVhUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9UWVBFX0lOUFVUX01FVEhPRF9DT05URVhUKSkKKyNkZWZpbmUgV0VCS0lUX0lO
UFVUX01FVEhPRF9DT05URVhUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0lOUFVUX01FVEhPRF9DT05URVhULCBXZWJLaXRJbnB1
dE1ldGhvZENvbnRleHRDbGFzcykpCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfSU5QVVRfTUVUSE9E
X1VOREVSTElORSAgICAgICAgICAod2Via2l0X2lucHV0X21ldGhvZF91bmRlcmxpbmVfZ2V0X3R5
cGUoKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdElucHV0TWV0aG9kQ29udGV4dCAgICAgICAg
V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdElucHV0TWV0
aG9kQ29udGV4dENsYXNzICAgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0Q2xhc3M7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0UHJpdmF0ZSBXZWJLaXRJbnB1dE1ldGhv
ZENvbnRleHRQcml2YXRlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdElucHV0TWV0aG9kVW5kZXJs
aW5lICAgICAgV2ViS2l0SW5wdXRNZXRob2RVbmRlcmxpbmU7CisKK3N0cnVjdCBfV2ViS2l0SW5w
dXRNZXRob2RDb250ZXh0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRl
ID4qLworICAgIFdlYktpdElucHV0TWV0aG9kQ29udGV4dFByaXZhdGUgKnByaXY7Cit9OworCitz
dHJ1Y3QgX1dlYktpdElucHV0TWV0aG9kQ29udGV4dENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworCisgICAgLyogU2lnbmFscyAqLworICAgIHZvaWQgICAgICgqIHByZWVk
aXRfc3RhcnRlZCkgICAgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAqY29udGV4dCk7CisgICAg
dm9pZCAgICAgKCogcHJlZWRpdF9jaGFuZ2VkKSAgICAoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0
ICpjb250ZXh0KTsKKyAgICB2b2lkICAgICAoKiBwcmVlZGl0X2ZpbmlzaGVkKSAgIChXZWJLaXRJ
bnB1dE1ldGhvZENvbnRleHQgKmNvbnRleHQpOworICAgIHZvaWQgICAgICgqIGNvbW1pdHRlZCkg
ICAgICAgICAgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgKnRleHQp
OworCisgICAgLyogVmlydHVhbCBmdW5jdGlvbnMgKi8KKyAgICB2b2lkICAgICAoKiBzZXRfZW5h
YmxlX3ByZWVkaXQpIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgKmNvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICBl
bmFibGVkKTsKKyAgICB2b2lkICAgICAoKiBnZXRfcHJlZWRpdCkgICAgICAgIChXZWJLaXRJbnB1
dE1ldGhvZENvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2NoYXIgICAgICAgICAgICAgICAgICAgKip0ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaXN0ICAgICAgICAgICAgICAgICAgICoqdW5kZXJsaW5lcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAg
ICAgICAgKmN1cnNvcl9vZmZzZXQpOworICAgIGdib29sZWFuICgqIGZpbHRlcl9rZXlfZXZlbnQp
ICAgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZGtFdmVudEtleSAgICAgICAgICAgICAgKmtleV9ldmVudCk7
CisgICAgdm9pZCAgICAgKCogbm90aWZ5X2ZvY3VzX2luKSAgICAoV2ViS2l0SW5wdXRNZXRob2RD
b250ZXh0ICpjb250ZXh0KTsKKyAgICB2b2lkICAgICAoKiBub3RpZnlfZm9jdXNfb3V0KSAgIChX
ZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgKmNvbnRleHQpOworICAgIHZvaWQgICAgICgqIG5vdGlm
eV9jdXJzb3JfYXJlYSkgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAg
IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAg
ICAgICAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAg
ICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpOworICAgIHZvaWQgICAg
ICgqIHJlc2V0KSAgICAgICAgICAgICAgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAqY29udGV4
dCk7CisKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgq
X3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIp
ICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDQpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDUpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDYpICh2b2lkKTsKKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDcpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9nZXRfdHlwZSAgICAgICAgICAgKHZvaWQpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9zZXRfZW5hYmxl
X3ByZWVkaXQgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAgICpjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAg
ICAgICAgICAgIGVuYWJsZWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pbnB1dF9tZXRo
b2RfY29udGV4dF9nZXRfcHJlZWRpdCAgICAgICAgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAg
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAqKnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCAgICAgICAgICAgICAgICAgICAgICoq
dW5kZXJsaW5lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGd1aW50ICAgICAgICAgICAgICAgICAgICAgICpjdXJzb3Jfb2Zmc2V0KTsKKworV0VCS0lU
X0FQSSBnYm9vbGVhbgord2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2ZpbHRlcl9rZXlfZXZl
bnQgICAoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0ICAgKmNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtFdmVudEtleSAgICAgICAgICAg
ICAgICAqa2V5X2V2ZW50KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaW5wdXRfbWV0aG9k
X2NvbnRleHRfbm90aWZ5X2ZvY3VzX2luICAgIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgICAq
Y29udGV4dCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0
X25vdGlmeV9mb2N1c19vdXQgICAoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0ICAgKmNvbnRleHQp
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9ub3RpZnlf
Y3Vyc29yX2FyZWEgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAgICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAg
ICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9yZXNldCAgICAgICAgICAgICAgKFdlYktpdElu
cHV0TWV0aG9kQ29udGV4dCAgICpjb250ZXh0KTsKKworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfaW5wdXRfbWV0aG9kX3VuZGVybGluZV9nZXRfdHlwZSAgICAgICAgICh2b2lkKTsKKworV0VC
S0lUX0FQSSBXZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZSAqCit3ZWJraXRfaW5wdXRfbWV0aG9k
X3VuZGVybGluZV9uZXcgICAgICAgICAgICAgIChndWludCAgICAgICAgICAgICAgICAgICAgICAg
c3RhcnRfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICAgICAgIGVuZF9vZmZzZXQpOworCitXRUJLSVRf
QVBJIFdlYktpdElucHV0TWV0aG9kVW5kZXJsaW5lICoKK3dlYmtpdF9pbnB1dF9tZXRob2RfdW5k
ZXJsaW5lX2NvcHkgICAgICAgICAgICAgKFdlYktpdElucHV0TWV0aG9kVW5kZXJsaW5lICp1bmRl
cmxpbmUpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5l
X2ZyZWUgICAgICAgICAgICAgKFdlYktpdElucHV0TWV0aG9kVW5kZXJsaW5lICp1bmRlcmxpbmUp
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX3NldF9j
b2xvciAgICAgICAgKFdlYktpdElucHV0TWV0aG9kVW5kZXJsaW5lICp1bmRlcmxpbmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtSR0JB
ICAgICAgICAgICAgICAqcmdiYSk7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0TWV0aG9kQ29u
dGV4dEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0
TWV0aG9kQ29udGV4dEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmUyNzU2NTAyMTg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRHdGsuY3BwCkBAIC0wLDAgKzEsNzAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdElucHV0TWV0aG9kQ29udGV4dC5oIgorCisjaW5jbHVkZSAi
V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29s
b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKgorICogd2Via2l0X2lucHV0
X21ldGhvZF91bmRlcmxpbmVfc2V0X2NvbG9yOgorICogQHVuZGVybGluZTogYSAjV2ViS2l0SW5w
dXRNZXRob2RVbmRlcmxpbmUKKyAqIEByZ2JhOiAobnVsbGFibGUpOiBhICNHZGtSR0JBIG9yICVO
VUxMCisgKgorICogU2V0IHRoZSBjb2xvciBvZiB0aGUgdW5kZXJsaW5lLiBJZiBAcmdiYSBpcyAl
TlVMTCB0aGUgZm9yZWdyb3VuZCB0ZXh0IGNvbG9yIHdpbGwgYmUgdXNlZAorICogZm9yIHRoZSB1
bmRlcmxpbmUgdG9vLgorICoKKyAqIFNpbmNlOiAyLjI4CisgKi8KK3ZvaWQgd2Via2l0X2lucHV0
X21ldGhvZF91bmRlcmxpbmVfc2V0X2NvbG9yKFdlYktpdElucHV0TWV0aG9kVW5kZXJsaW5lKiB1
bmRlcmxpbmUsIGNvbnN0IEdka1JHQkEqIHJnYmEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbCh1
bmRlcmxpbmUpOworCisgICAgaWYgKCFyZ2JhKSB7CisgICAgICAgIHVuZGVybGluZS0+dW5kZXJs
aW5lLmNvbXBvc2l0aW9uVW5kZXJsaW5lQ29sb3IgPSBDb21wb3NpdGlvblVuZGVybGluZUNvbG9y
OjpUZXh0Q29sb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1bmRlcmxpbmUtPnVu
ZGVybGluZS5jb21wb3NpdGlvblVuZGVybGluZUNvbG9yID0gQ29tcG9zaXRpb25VbmRlcmxpbmVD
b2xvcjo6R2l2ZW5Db2xvcjsKKyAgICB1bmRlcmxpbmUtPnVuZGVybGluZS5jb2xvciA9IENvbG9y
KCpyZ2JhKTsKK30KKworLyoqCisgKiB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfZmlsdGVy
X2tleV9ldmVudDoKKyAqIEBjb250ZXh0OiBhICNXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQKKyAq
IEBrZXlfZXZlbnQ6IHRoZSBrZXkgZXZlbnQgdG8gZmlsdGVyCisgKgorICogQWxsb3cgQGtleV9l
dmVudCB0byBiZSBoYW5kbGVkIGJ5IHRoZSBpbnB1dCBtZXRob2QuIElmICVUUlVFIGlzIHJldHVy
bmVkLCB0aGVuIG5vIGZ1cnRoZXIgcHJvY2Vzc2luZyBzaG91bGQgYmUKKyAqIGRvbmUgZm9yIHRo
ZSBrZXkgZXZlbnQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGtleSBldmVudCB3YXMg
aGFuZGxlZCwgb3IgJUZBTFNFIG90aGVyd2lzZQorICoKKyAqIFNpbmNlOiAyLjI4CisgKi8KK2di
b29sZWFuIHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9maWx0ZXJfa2V5X2V2ZW50KFdlYktp
dElucHV0TWV0aG9kQ29udGV4dCogY29udGV4dCwgR2RrRXZlbnRLZXkqIGtleUV2ZW50KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19JTlBVVF9NRVRIT0RfQ09OVEVYVChj
b250ZXh0KSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGtleUV2ZW50LCBGQUxT
RSk7CisKKyAgICBhdXRvKiBpbUNsYXNzID0gV0VCS0lUX0lOUFVUX01FVEhPRF9DT05URVhUX0dF
VF9DTEFTUyhjb250ZXh0KTsKKyAgICByZXR1cm4gaW1DbGFzcy0+ZmlsdGVyX2tleV9ldmVudCA/
IGltQ2xhc3MtPmZpbHRlcl9rZXlfZXZlbnQoY29udGV4dCwga2V5RXZlbnQpIDogRkFMU0U7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0
TWV0aG9kQ29udGV4dEltcGxHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uOTQ1Mzg2MDE0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0TWV0aG9kQ29udGV4dEltcGxH
dGsuY3BwCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRJbnB1dE1ldGhvZENv
bnRleHRJbXBsR3RrLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L2dsaWIvV1RGR1R5cGUuaD4KKworc3RydWN0IF9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbXBs
R3RrUHJpdmF0ZSB7CisgICAgR1JlZlB0cjxHdGtJTUNvbnRleHQ+IGNvbnRleHQ7Cit9OworCitX
RUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0aywgd2Via2l0
X2lucHV0X21ldGhvZF9jb250ZXh0X2ltcGxfZ3RrLCBXRUJLSVRfVFlQRV9JTlBVVF9NRVRIT0Rf
Q09OVEVYVCkKKworc3RhdGljIHZvaWQgY29udGV4dFByZWVkaXRTdGFydENhbGxiYWNrKFdlYktp
dElucHV0TWV0aG9kQ29udGV4dEltcGxHdGsqIGNvbnRleHQpCit7CisgICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKGNvbnRleHQsICJwcmVlZGl0LXN0YXJ0ZWQiLCBudWxscHRyKTsKK30KKworc3Rh
dGljIHZvaWQgY29udGV4dFByZWVkaXRDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0SW5wdXRNZXRob2RD
b250ZXh0SW1wbEd0ayogY29udGV4dCkKK3sKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29u
dGV4dCwgInByZWVkaXQtY2hhbmdlZCIsIG51bGxwdHIpOworfQorCitzdGF0aWMgdm9pZCBjb250
ZXh0UHJlZWRpdEVuZENhbGxiYWNrKFdlYktpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGsqIGNv
bnRleHQpCit7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGNvbnRleHQsICJwcmVlZGl0LWZp
bmlzaGVkIiwgbnVsbHB0cik7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnRleHRDb21taXRDYWxsYmFj
ayhXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrKiBjb250ZXh0LCBjb25zdCBjaGFyKiB0
ZXh0KQoreworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShjb250ZXh0LCAiY29tbWl0dGVkIiwg
dGV4dCwgbnVsbHB0cik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdElucHV0TWV0aG9kQ29udGV4
dEltcGxHdGtDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2ltcGxfZ3RrX3BhcmVudF9jbGFzcyktPmNv
bnN0cnVjdGVkKG9iamVjdCk7CisKKyAgICBhdXRvKiBwcml2ID0gV0VCS0lUX0lOUFVUX01FVEhP
RF9DT05URVhUX0lNUExfR1RLKG9iamVjdCktPnByaXY7CisgICAgcHJpdi0+Y29udGV4dCA9IGFk
b3B0R1JlZihndGtfaW1fbXVsdGljb250ZXh0X25ldygpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
X29iamVjdChwcml2LT5jb250ZXh0LmdldCgpLCAicHJlZWRpdC1zdGFydCIsIEdfQ0FMTEJBQ0so
Y29udGV4dFByZWVkaXRTdGFydENhbGxiYWNrKSwgb2JqZWN0LCBHX0NPTk5FQ1RfU1dBUFBFRCk7
CisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QocHJpdi0+Y29udGV4dC5nZXQoKSwgInByZWVk
aXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29udGV4dFByZWVkaXRDaGFuZ2VkQ2FsbGJhY2spLCBv
YmplY3QsIEdfQ09OTkVDVF9TV0FQUEVEKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChw
cml2LT5jb250ZXh0LmdldCgpLCAicHJlZWRpdC1lbmQiLCBHX0NBTExCQUNLKGNvbnRleHRQcmVl
ZGl0RW5kQ2FsbGJhY2spLCBvYmplY3QsIEdfQ09OTkVDVF9TV0FQUEVEKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0X29iamVjdChwcml2LT5jb250ZXh0LmdldCgpLCAiY29tbWl0IiwgR19DQUxMQkFD
Syhjb250ZXh0Q29tbWl0Q2FsbGJhY2spLCBvYmplY3QsIEdfQ09OTkVDVF9TV0FQUEVEKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a1NldEVuYWJsZVBy
ZWVkaXQoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KiBjb250ZXh0LCBnYm9vbGVhbiBlbmFibGVk
KQoreworICAgIGF1dG8qIHByaXYgPSBXRUJLSVRfSU5QVVRfTUVUSE9EX0NPTlRFWFRfSU1QTF9H
VEsoY29udGV4dCktPnByaXY7CisgICAgZ3RrX2ltX2NvbnRleHRfc2V0X3VzZV9wcmVlZGl0KHBy
aXYtPmNvbnRleHQuZ2V0KCksIGVuYWJsZWQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRJbnB1
dE1ldGhvZENvbnRleHRJbXBsR3RrR2V0UHJlZWRpdChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQq
IGNvbnRleHQsIGNoYXIqKiB0ZXh0LCBHTGlzdCoqIHVuZGVybGluZXMsIGd1aW50KiBjdXJzb3JP
ZmZzZXQpCit7CisgICAgYXV0byogcHJpdiA9IFdFQktJVF9JTlBVVF9NRVRIT0RfQ09OVEVYVF9J
TVBMX0dUSyhjb250ZXh0KS0+cHJpdjsKKyAgICBQYW5nb0F0dHJMaXN0KiBhdHRyTGlzdCA9IG51
bGxwdHI7CisgICAgaW50IG9mZnNldDsKKyAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9z
dHJpbmcocHJpdi0+Y29udGV4dC5nZXQoKSwgdGV4dCwgdW5kZXJsaW5lcyA/ICZhdHRyTGlzdCA6
IG51bGxwdHIsICZvZmZzZXQpOworCisgICAgaWYgKHVuZGVybGluZXMpIHsKKyAgICAgICAgKnVu
ZGVybGluZXMgPSBudWxscHRyOworICAgICAgICBpZiAoYXR0ckxpc3QpIHsKKyAgICAgICAgICAg
IFBhbmdvQXR0ckl0ZXJhdG9yKiBpdGVyID0gcGFuZ29fYXR0cl9saXN0X2dldF9pdGVyYXRvcihh
dHRyTGlzdCk7CisKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhbmdv
X2F0dHJfaXRlcmF0b3JfZ2V0KGl0ZXIsIFBBTkdPX0FUVFJfVU5ERVJMSU5FKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGVuZDsK
KyAgICAgICAgICAgICAgICBwYW5nb19hdHRyX2l0ZXJhdG9yX3JhbmdlKGl0ZXIsICZzdGFydCwg
JmVuZCk7CisKKyAgICAgICAgICAgICAgICBhdXRvKiB1bmRlcmxpbmUgPSB3ZWJraXRfaW5wdXRf
bWV0aG9kX3VuZGVybGluZV9uZXcoY2xhbXBUbzx1bnNpZ25lZD4oc3RhcnQpLCBjbGFtcFRvPHVu
c2lnbmVkPihlbmQpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogY29sb3JBdHRyaWJ1dGUg
PSBwYW5nb19hdHRyX2l0ZXJhdG9yX2dldChpdGVyLCBQQU5HT19BVFRSX1VOREVSTElORV9DT0xP
UikpIHsKKyAgICAgICAgICAgICAgICAgICAgUGFuZ29Db2xvciogY29sb3IgPSAmKHJlaW50ZXJw
cmV0X2Nhc3Q8UGFuZ29BdHRyQ29sb3IqPihjb2xvckF0dHJpYnV0ZSkpLT5jb2xvcjsKKyAgICAg
ICAgICAgICAgICAgICAgR2RrUkdCQSByZ2JhID0geyBjb2xvci0+cmVkIC8gNjU1MzUuLCBjb2xv
ci0+Z3JlZW4gLyA2NTUzNS4sIGNvbG9yLT5ibHVlIC8gNjU1MzUuLCAxLiB9OworICAgICAgICAg
ICAgICAgICAgICB3ZWJraXRfaW5wdXRfbWV0aG9kX3VuZGVybGluZV9zZXRfY29sb3IodW5kZXJs
aW5lLCAmcmdiYSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgKnVuZGVy
bGluZXMgPSBnX2xpc3RfcHJlcGVuZCgqdW5kZXJsaW5lcywgdW5kZXJsaW5lKTsKKyAgICAgICAg
ICAgIH0gd2hpbGUgKHBhbmdvX2F0dHJfaXRlcmF0b3JfbmV4dChpdGVyKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoY3Vyc29yT2Zmc2V0KQorICAgICAgICAqY3Vyc29yT2Zmc2V0ID0g
Y2xhbXBUbzx1bnNpZ25lZD4ob2Zmc2V0KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdElu
cHV0TWV0aG9kQ29udGV4dEltcGxHdGtGaWx0ZXJLZXlFdmVudChXZWJLaXRJbnB1dE1ldGhvZENv
bnRleHQqIGNvbnRleHQsIEdka0V2ZW50S2V5KiBrZXlFdmVudCkKK3sKKyAgICBhdXRvKiBwcml2
ID0gV0VCS0lUX0lOUFVUX01FVEhPRF9DT05URVhUX0lNUExfR1RLKGNvbnRleHQpLT5wcml2Owor
ICAgIHJldHVybiBndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MocHJpdi0+Y29udGV4dC5n
ZXQoKSwga2V5RXZlbnQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRJbnB1dE1ldGhvZENvbnRl
eHRJbXBsR3RrTm90aWZ5Rm9jdXNJbihXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgYXV0byogcHJpdiA9IFdFQktJVF9JTlBVVF9NRVRIT0RfQ09OVEVYVF9JTVBMX0dU
Syhjb250ZXh0KS0+cHJpdjsKKyAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbihwcml2LT5jb250
ZXh0LmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1w
bEd0a05vdGlmeUZvY3VzT3V0KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBhdXRvKiBwcml2ID0gV0VCS0lUX0lOUFVUX01FVEhPRF9DT05URVhUX0lNUExfR1RLKGNv
bnRleHQpLT5wcml2OworICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291dChwcml2LT5jb250ZXh0
LmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0
a05vdGlmeUN1cnNvckFyZWEoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KiBjb250ZXh0LCBpbnQg
eCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBhdXRvKiBwcml2ID0gV0VC
S0lUX0lOUFVUX01FVEhPRF9DT05URVhUX0lNUExfR1RLKGNvbnRleHQpLT5wcml2OworICAgIEdk
a1JlY3RhbmdsZSBjdXJzb3JSZWN0ID0geyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH07CisgICAgZ3Rr
X2ltX2NvbnRleHRfc2V0X2N1cnNvcl9sb2NhdGlvbihwcml2LT5jb250ZXh0LmdldCgpLCAmY3Vy
c29yUmVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxH
dGtSZXNldChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQqIGNvbnRleHQpCit7CisgICAgYXV0byog
cHJpdiA9IFdFQktJVF9JTlBVVF9NRVRIT0RfQ09OVEVYVF9JTVBMX0dUSyhjb250ZXh0KS0+cHJp
djsKKyAgICBndGtfaW1fY29udGV4dF9yZXNldChwcml2LT5jb250ZXh0LmdldCgpKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2ltcGxfZ3RrX2NsYXNzX2lu
aXQoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a0NsYXNzKiBrbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIG9i
amVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtD
b25zdHJ1Y3RlZDsKKworICAgIGF1dG8qIGltQ2xhc3MgPSBXRUJLSVRfSU5QVVRfTUVUSE9EX0NP
TlRFWFRfQ0xBU1Moa2xhc3MpOworICAgIGltQ2xhc3MtPnNldF9lbmFibGVfcHJlZWRpdCA9IHdl
YmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtTZXRFbmFibGVQcmVlZGl0OworICAgIGltQ2xh
c3MtPmdldF9wcmVlZGl0ID0gd2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a0dldFByZWVk
aXQ7CisgICAgaW1DbGFzcy0+ZmlsdGVyX2tleV9ldmVudCA9IHdlYmtpdElucHV0TWV0aG9kQ29u
dGV4dEltcGxHdGtGaWx0ZXJLZXlFdmVudDsKKyAgICBpbUNsYXNzLT5ub3RpZnlfZm9jdXNfaW4g
PSB3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrTm90aWZ5Rm9jdXNJbjsKKyAgICBpbUNs
YXNzLT5ub3RpZnlfZm9jdXNfb3V0ID0gd2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a05v
dGlmeUZvY3VzT3V0OworICAgIGltQ2xhc3MtPm5vdGlmeV9jdXJzb3JfYXJlYSA9IHdlYmtpdElu
cHV0TWV0aG9kQ29udGV4dEltcGxHdGtOb3RpZnlDdXJzb3JBcmVhOworICAgIGltQ2xhc3MtPnJl
c2V0ID0gd2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a1Jlc2V0OworfQorCitXZWJLaXRJ
bnB1dE1ldGhvZENvbnRleHQqIHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtOZXcoKQor
eworICAgIHJldHVybiBXRUJLSVRfSU5QVVRfTUVUSE9EX0NPTlRFWFQoZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX0lOUFVUX01FVEhPRF9DT05URVhUX0lNUExfR1RLLCBudWxscHRyKSk7Cit9CisK
K3ZvaWQgd2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a1NldENsaWVudFdpbmRvdyhXZWJL
aXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrKiBjb250ZXh0LCBHZGtXaW5kb3cqIHdpbmRvdykK
K3sKKyAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyhjb250ZXh0LT5wcml2LT5j
b250ZXh0LmdldCgpLCB3aW5kb3cpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGsu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDAxYTRlMjZhMTkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElu
cHV0TWV0aG9kQ29udGV4dEltcGxHdGsuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViS2l0
SW5wdXRNZXRob2RDb250ZXh0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfSU5QVVRfTUVUSE9EX0NPTlRFWFRfSU1QTF9HVEsg
ICAgICAgICAgICAod2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2ltcGxfZ3RrX2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9JTlBVVF9NRVRIT0RfQ09OVEVYVF9JTVBMX0dUSyhvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9J
TlBVVF9NRVRIT0RfQ09OVEVYVF9JTVBMX0dUSywgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0SW1w
bEd0aykpCisjZGVmaW5lIFdFQktJVF9JU19JTlBVVF9NRVRIT0RfQ09OVEVYVF9JTVBMX0dUSyhv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9JTlBVVF9NRVRIT0RfQ09OVEVYVF9JTVBMX0dUSykpCisjZGVmaW5lIFdFQktJVF9JTlBVVF9N
RVRIT0RfQ09OVEVYVF9JTVBMX0dUS19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9JTlBVVF9NRVRIT0RfQ09OVEVYVF9JTVBMX0dU
SywgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a0NsYXNzKSkKKyNkZWZpbmUgV0VCS0lU
X0lTX0lOUFVUX01FVEhPRF9DT05URVhUX0lNUExfR1RLX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0lOUFVUX01FVEhPRF9DT05URVhU
X0lNUExfR1RLKSkKKyNkZWZpbmUgV0VCS0lUX0lOUFVUX01FVEhPRF9DT05URVhUX0lNUExfR1RL
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9UWVBFX0lOUFVUX01FVEhPRF9DT05URVhUX0lNUExfR1RLLCBXZWJLaXRJbnB1dE1ldGhvZENv
bnRleHRJbXBsR3RrQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SW5wdXRNZXRob2RD
b250ZXh0SW1wbEd0ayAgICAgICAgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0azsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrQ2xhc3MgICBXZWJL
aXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a1ByaXZhdGUgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0
SW1wbEd0a1ByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0
ayB7CisgICAgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0IHBhcmVudDsKKworICAgIFdlYktpdElu
cHV0TWV0aG9kQ29udGV4dEltcGxHdGtQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJL
aXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrQ2xhc3MgeworICAgIFdlYktpdElucHV0TWV0aG9k
Q29udGV4dENsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUgd2Via2l0X2lucHV0X21ldGhv
ZF9jb250ZXh0X2ltcGxfZ3RrX2dldF90eXBlKCk7CitXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQq
IHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtOZXcoKTsKK3ZvaWQgd2Via2l0SW5wdXRN
ZXRob2RDb250ZXh0SW1wbEd0a1NldENsaWVudFdpbmRvdyhXZWJLaXRJbnB1dE1ldGhvZENvbnRl
eHRJbXBsR3RrKiwgR2RrV2luZG93Kik7CisKK0dfRU5EX0RFQ0xTCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggZTc1YjU2OWUzOGQu
LmMxNTM5Y2MyNzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuaApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGb3J3YXJk
RGVjbGFyYXRpb25zLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+
CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHQuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdEphdmFzY3JpcHRSZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdE5hdmlnYXRpb25BY3Rpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdE5vdGlmaWNh
dGlvbi5oPgpAQCAtNTY5LDYgKzU3MCwxMyBAQCB3ZWJraXRfd2ViX3ZpZXdfc2VuZF9tZXNzYWdl
X3RvX3BhZ2VfZmluaXNoICAgICAgICAgIChXZWJLaXRXZWJWaWV3CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAg
ICAgICAgICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CiAKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X3NldF9pbnB1dF9tZXRob2RfY29udGV4dCAgICAg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHQgICpjb250ZXh0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRJbnB1dE1ldGhvZENv
bnRleHQgKgord2Via2l0X3dlYl92aWV3X2dldF9pbnB1dF9tZXRob2RfY29udGV4dCAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOworCiBHX0VORF9ERUNM
UwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggZGUyOWFjNGUxYmQuLjhkNDI1ODhmNWIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJLaXRFbW9qaUNo
b29zZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrLmgiCiAj
aW5jbHVkZSAiV2ViS2l0V2ViVmlld0FjY2Vzc2libGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTQyNSw3ICs0
MjYsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUoR3RrV2lkZ2V0KiB3
aWRnZXQpCiAgICAgZ3RrX3dpZGdldF9zZXRfd2luZG93KHdpZGdldCwgd2luZG93KTsKICAgICBn
ZGtfd2luZG93X3NldF91c2VyX2RhdGEod2luZG93LCB3aWRnZXQpOwogCi0gICAgZ3RrX2ltX2Nv
bnRleHRfc2V0X2NsaWVudF93aW5kb3cocHJpdi0+aW5wdXRNZXRob2RGaWx0ZXIuY29udGV4dCgp
LCB3aW5kb3cpOworICAgIGF1dG8qIGltQ29udGV4dCA9IHByaXYtPmlucHV0TWV0aG9kRmlsdGVy
LmNvbnRleHQoKTsKKyAgICBpZiAoV0VCS0lUX0lTX0lOUFVUX01FVEhPRF9DT05URVhUX0lNUExf
R1RLKGltQ29udGV4dCkpCisgICAgICAgIHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtT
ZXRDbGllbnRXaW5kb3coV0VCS0lUX0lOUFVUX01FVEhPRF9DT05URVhUX0lNUExfR1RLKGltQ29u
dGV4dCksIHdpbmRvdyk7CiAKICAgICBpZiAocHJpdi0+YWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUp
CiAgICAgICAgIHByaXYtPmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlLT5yZWFsaXplKCk7CkBAIC00
MzQsNyArNDM3LDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUmVhbGl6ZShHdGtX
aWRnZXQqIHdpZGdldCkKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlVW5yZWFsaXplKEd0
a1dpZGdldCogd2lkZ2V0KQogewogICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKLSAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50
X3dpbmRvdyh3ZWJWaWV3LT5wcml2LT5pbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCksIG51bGxw
dHIpOworCisgICAgYXV0byogaW1Db250ZXh0ID0gd2ViVmlldy0+cHJpdi0+aW5wdXRNZXRob2RG
aWx0ZXIuY29udGV4dCgpOworICAgIGlmIChXRUJLSVRfSVNfSU5QVVRfTUVUSE9EX0NPTlRFWFRf
SU1QTF9HVEsoaW1Db250ZXh0KSkKKyAgICAgICAgd2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1w
bEd0a1NldENsaWVudFdpbmRvdyhXRUJLSVRfSU5QVVRfTUVUSE9EX0NPTlRFWFRfSU1QTF9HVEso
aW1Db250ZXh0KSwgbnVsbHB0cik7CiAKICAgICBpZiAod2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0
ZWRCYWNraW5nU3RvcmUpCiAgICAgICAgIHdlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQmFja2lu
Z1N0b3JlLT51bnJlYWxpemUoKTsKQEAgLTU2Myw2ICs1NjksNyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZURpc3Bvc2UoR09iamVjdCogZ29iamVjdCkKICAgICAgICAgd2ViVmlldy0+
cHJpdi0+cG9pbnRlckxvY2tNYW5hZ2VyLT51bmxvY2soKTsKICAgICAgICAgd2ViVmlldy0+cHJp
di0+cG9pbnRlckxvY2tNYW5hZ2VyID0gbnVsbHB0cjsKICAgICB9CisgICAgd2ViVmlldy0+cHJp
di0+aW5wdXRNZXRob2RGaWx0ZXIuc2V0Q29udGV4dChudWxscHRyKTsKICAgICB3ZWJWaWV3LT5w
cml2LT5wYWdlUHJveHktPmNsb3NlKCk7CiAgICAgd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRC
YWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIHdlYlZpZXctPnByaXYtPnNsZWVwRGlzYWJsZXIg
PSBudWxscHRyOwpAQCAtNzg5LDE1ICs3OTYsMTEgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdl
YlZpZXdCYXNlS2V5UHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGsK
ICAgICAgICAgcHJpdi0+c2hvdWxkRm9yd2FyZE5leHRLZXlFdmVudCA9IEZBTFNFOwogICAgICAg
ICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xh
c3MpLT5rZXlfcHJlc3NfZXZlbnQod2lkZ2V0LCBrZXlFdmVudCk7CiAgICAgfQotCi0gICAgLy8g
V2UgbmVlZCB0byBjb3B5IHRoZSBldmVudCBhcyBvdGhlcndpc2UgaXQgY291bGQgYmUgZGVzdHJv
eWVkIGJlZm9yZSB3ZSByZWFjaCB0aGUgbGFtYmRhIGJvZHkuCi0gICAgR1VuaXF1ZVB0cjxHZGtF
dmVudD4gZXZlbnQoZ2RrX2V2ZW50X2NvcHkocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGtl
eUV2ZW50KSkpOwotICAgIHByaXYtPmlucHV0TWV0aG9kRmlsdGVyLmZpbHRlcktleUV2ZW50KGtl
eUV2ZW50LCBbcHJpdiwgZXZlbnQgPSBXVEZNb3ZlKGV2ZW50KV0oY29uc3QgU3RyaW5nJiB0ZXh0
LCBJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRIYW5kbGVkQnlJbnB1dE1ldGhvZCBoYW5kbGVkLCBJ
bnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKSB7Ci0gICAg
ICAgIGF1dG8gaGFuZGxlZEJ5SW5wdXRNZXRob2QgPSBoYW5kbGVkID09IElucHV0TWV0aG9kRmls
dGVyOjpFdmVudEhhbmRsZWRCeUlucHV0TWV0aG9kOjpZZXMgPyBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50OjpIYW5kbGVkQnlJbnB1dE1ldGhvZDo6WWVzIDogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6
SGFuZGxlZEJ5SW5wdXRNZXRob2Q6Ok5vOwotICAgICAgICBhdXRvIGZha2VkRm9yQ29tcG9zaXRp
b24gPSBmYWtlZCA9PSBJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9u
OjpZZXMgPyBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMg
OiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpGYWtlZEZvckNvbXBvc2l0aW9uOjpObzsKLSAgICAg
ICAgYXV0byBjb21tYW5kcyA9IGhhbmRsZWQgPT0gSW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50SGFu
ZGxlZEJ5SW5wdXRNZXRob2Q6OlllcyA/IFZlY3RvcjxTdHJpbmc+KCkgOiBwcml2LT5rZXlCaW5k
aW5nVHJhbnNsYXRvci5jb21tYW5kc0ZvcktleUV2ZW50KCZldmVudC0+a2V5KTsKLSAgICAgICAg
cHJpdi0+cGFnZVByb3h5LT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZl
bnQoZXZlbnQuZ2V0KCksIHRleHQsIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBmYWtlZEZvckNvbXBv
c2l0aW9uLCBXVEZNb3ZlKGNvbW1hbmRzKSkpOwotICAgIH0pOworICAgIGF1dG8gZmlsdGVyUmVz
dWx0ID0gcHJpdi0+aW5wdXRNZXRob2RGaWx0ZXIuZmlsdGVyS2V5RXZlbnQoa2V5RXZlbnQpOwor
ICAgIGlmICghZmlsdGVyUmVzdWx0LmhhbmRsZWQpIHsKKyAgICAgICAgcHJpdi0+cGFnZVByb3h5
LT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQocmVpbnRlcnByZXRf
Y2FzdDxHZGtFdmVudCo+KGtleUV2ZW50KSwgZmlsdGVyUmVzdWx0LmtleVRleHQsCisgICAgICAg
ICAgICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpIYW5kbGVkQnlJbnB1dE1ldGhvZDo6Tm8sIHBy
aXYtPmtleUJpbmRpbmdUcmFuc2xhdG9yLmNvbW1hbmRzRm9yS2V5RXZlbnQoa2V5RXZlbnQpKSk7
CisgICAgfQogCiAgICAgcmV0dXJuIEdES19FVkVOVF9TVE9QOwogfQpAQCAtODEyLDEzICs4MTUs
MTAgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlS2V5UmVsZWFzZUV2ZW50KEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSoKICAgICAgICAgcmV0dXJuIEdUS19XSURHRVRf
Q0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+a2V5X3JlbGVhc2VfZXZl
bnQod2lkZ2V0LCBrZXlFdmVudCk7CiAgICAgfQogCi0gICAgLy8gV2UgbmVlZCB0byBjb3B5IHRo
ZSBldmVudCBhcyBvdGhlcndpc2UgaXQgY291bGQgYmUgZGVzdHJveWVkIGJlZm9yZSB3ZSByZWFj
aCB0aGUgbGFtYmRhIGJvZHkuCi0gICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gZXZlbnQoZ2RrX2V2
ZW50X2NvcHkocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGtleUV2ZW50KSkpOwotICAgIHBy
aXYtPmlucHV0TWV0aG9kRmlsdGVyLmZpbHRlcktleUV2ZW50KGtleUV2ZW50LCBbcHJpdiwgZXZl
bnQgPSBXVEZNb3ZlKGV2ZW50KV0oY29uc3QgU3RyaW5nJiB0ZXh0LCBJbnB1dE1ldGhvZEZpbHRl
cjo6RXZlbnRIYW5kbGVkQnlJbnB1dE1ldGhvZCBoYW5kbGVkLCBJbnB1dE1ldGhvZEZpbHRlcjo6
RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKSB7Ci0gICAgICAgIGF1dG8gaGFuZGxlZEJ5
SW5wdXRNZXRob2QgPSBoYW5kbGVkID09IElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEhhbmRsZWRC
eUlucHV0TWV0aG9kOjpZZXMgPyBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpIYW5kbGVkQnlJbnB1
dE1ldGhvZDo6WWVzIDogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6SGFuZGxlZEJ5SW5wdXRNZXRo
b2Q6Ok5vOwotICAgICAgICBhdXRvIGZha2VkRm9yQ29tcG9zaXRpb24gPSBmYWtlZCA9PSBJbnB1
dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMgPyBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50OjpGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMgOiBOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50OjpGYWtlZEZvckNvbXBvc2l0aW9uOjpObzsKLSAgICAgICAgcHJpdi0+cGFnZVByb3h5
LT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQuZ2V0KCks
IHRleHQsIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBmYWtlZEZvckNvbXBvc2l0aW9uLCB7IH0pKTsK
LSAgICB9KTsKKyAgICBpZiAoIXByaXYtPmlucHV0TWV0aG9kRmlsdGVyLmZpbHRlcktleUV2ZW50
KGtleUV2ZW50KS5oYW5kbGVkKSB7CisgICAgICAgIHByaXYtPnBhZ2VQcm94eS0+aGFuZGxlS2V5
Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZl
bnQqPihrZXlFdmVudCksIHsgfSwKKyAgICAgICAgICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6
OkhhbmRsZWRCeUlucHV0TWV0aG9kOjpObywgeyB9KSk7CisgICAgfQogCiAgICAgcmV0dXJuIEdE
S19FVkVOVF9TVE9QOwogfQpAQCAtODQ0LDcgKzg0NCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlSGFuZGxlTW91c2VFdmVudChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2Us
IEdkCiAgICAgICAgIGlmIChuZXh0RXZlbnQgJiYgKG5leHRFdmVudC0+YW55LnR5cGUgPT0gR0RL
XzJCVVRUT05fUFJFU1MgfHwgbmV4dEV2ZW50LT5hbnkudHlwZSA9PSBHREtfM0JVVFRPTl9QUkVT
UykpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgcHJpdi0+aW5wdXRNZXRob2RGaWx0
ZXIubm90aWZ5TW91c2VCdXR0b25QcmVzcygpOworICAgICAgICBwcml2LT5pbnB1dE1ldGhvZEZp
bHRlci5jYW5jZWxDb21wb3NpdGlvbigpOwogCiAgICAgICAgIGd1aW50IGJ1dHRvbjsKICAgICAg
ICAgZ2RrX2V2ZW50X2dldF9idXR0b24oZXZlbnQsICZidXR0b24pOwpAQCAtMTUwMSw4ICsxNTAx
LDYgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYmtpdFdlYlZpZXdCYXNlLCBSZWY8QVAKICAgICBwcml2LT5hY2NlbGVyYXRlZEJhY2tp
bmdTdG9yZSA9IEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKnByaXYtPnBhZ2VQcm94
eSk7CiAgICAgcHJpdi0+cGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOwogCi0gICAgcHJp
di0+aW5wdXRNZXRob2RGaWx0ZXIuc2V0UGFnZShwcml2LT5wYWdlUHJveHkuZ2V0KCkpOwotCiAg
ICAgLy8gV2UgYXR0YWNoIHRoaXMgaGVyZSwgYmVjYXVzZSBjaGFuZ2VzIGluIHNjYWxlIGZhY3Rv
ciBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBwYWdlIHByb3h5LgogICAgIHByaXYtPnBhZ2VQ
cm94eS0+c2V0SW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3IoZ3RrX3dpZGdldF9nZXRfc2NhbGVf
ZmFjdG9yKEdUS19XSURHRVQod2Via2l0V2ViVmlld0Jhc2UpKSk7CiAgICAgZ19zaWduYWxfY29u
bmVjdCh3ZWJraXRXZWJWaWV3QmFzZSwgIm5vdGlmeTo6c2NhbGUtZmFjdG9yIiwgR19DQUxMQkFD
SyhkZXZpY2VTY2FsZUZhY3RvckNoYW5nZWQpLCBudWxscHRyKTsKQEAgLTE2NzcsNyArMTY3NSw3
IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VVcGRhdGVUZXh0SW5wdXRTdGF0ZShXZWJLaXRXZWJW
aWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiB7CiAgICAgY29uc3QgYXV0byYgZWRpdG9yU3Rh
dGUgPSB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5lZGl0b3JTdGF0ZSgpOwog
ICAgIGlmICghZWRpdG9yU3RhdGUuaXNNaXNzaW5nUG9zdExheW91dERhdGEpCi0gICAgICAgIHdl
YmtpdFdlYlZpZXdCYXNlLT5wcml2LT5pbnB1dE1ldGhvZEZpbHRlci5zZXRDdXJzb3JSZWN0KGVk
aXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuY2FyZXRSZWN0QXRTdGFydCk7CisgICAgICAgIHdl
YmtpdFdlYlZpZXdCYXNlLT5wcml2LT5pbnB1dE1ldGhvZEZpbHRlci5ub3RpZnlDdXJzb3JSZWN0
KGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuY2FyZXRSZWN0QXRTdGFydCk7CiB9CiAKIHZv
aWQgd2Via2l0V2ViVmlld0Jhc2VTZXRDb250ZW50c1NpemUoV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YmtpdFdlYlZpZXdCYXNlLCBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUpCkBAIC0xOTAwLDMg
KzE4OTgsMzEgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURpZExvc2VQb2ludGVyTG9jayhXZWJL
aXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCiAgICAgcHJpdi0+cG9pbnRlckxvY2tNYW5hZ2Vy
LT51bmxvY2soKTsKICAgICBwcml2LT5wb2ludGVyTG9ja01hbmFnZXIgPSBudWxscHRyOwogfQor
Cit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5wdXRNZXRob2RDb250ZXh0KFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSwgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KiBjb250ZXh0KQor
eworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5pbnB1dE1ldGhvZEZpbHRlci5zZXRDb250ZXh0KGNv
bnRleHQpOworfQorCitXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQqIHdlYmtpdFdlYlZpZXdCYXNl
R2V0SW5wdXRNZXRob2RDb250ZXh0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sK
KyAgICByZXR1cm4gd2ViVmlld0Jhc2UtPnByaXYtPmlucHV0TWV0aG9kRmlsdGVyLmNvbnRleHQo
KTsKK30KKwordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVDb21wb3NpdGlvbktleVBy
ZXNzKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sKKyAgICBzdGF0aWMgR2RrRXZl
bnQqIGV2ZW50ID0gbnVsbHB0cjsKKyAgICBpZiAoIWV2ZW50KSB7CisgICAgICAgIGV2ZW50ID0g
Z2RrX2V2ZW50X25ldyhHREtfS0VZX1BSRVNTKTsKKyAgICAgICAgZXZlbnQtPmtleS50aW1lID0g
R0RLX0NVUlJFTlRfVElNRTsKKworICAgICAgICAvLyBUaGUgV2luZG93cyBjb21wb3NpdGlvbiBr
ZXkgZXZlbnQgY29kZSBpcyAyOTkgb3IgVktfUFJPQ0VTU0tFWS4gV2UgbmVlZCB0bworICAgICAg
ICAvLyBlbWl0IHRoaXMgY29kZSBmb3Igd2ViIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3aGVuIGtl
eSBldmVudHMgdHJpZ2dlcgorICAgICAgICAvLyBjb21wb3NpdGlvbiByZXN1bHRzLiBHREsgZG9l
c24ndCBoYXZlIGFuIGVxdWl2YWxlbnQsIHNvIHdlIHNlbmQgVm9pZFN5bWJvbAorICAgICAgICAv
LyBoZXJlIHRvIFdlYkNvcmUuIFBsYXRmb3JtS2V5RXZlbnQgY29udmVydHMgdGhpcyBjb2RlIGlu
dG8gVktfUFJPQ0VTU0tFWS4KKyAgICAgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBHREtfS0VZX1Zv
aWRTeW1ib2w7CisgICAgfQorCisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0g
d2ViVmlld0Jhc2UtPnByaXY7CisgICAgcHJpdi0+cGFnZVByb3h5LT5oYW5kbGVLZXlib2FyZEV2
ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQsIHsgfSwgTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudDo6SGFuZGxlZEJ5SW5wdXRNZXRob2Q6OlllcywgeyB9KSk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUuaAppbmRleCA4YmMxOWI1ODg2Mi4uOGIzYmU0MDg4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUu
aApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCiAjaW5j
bHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oIgogI2luY2x1ZGUgIldlYkluc3BlY3RvclBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0LmgiCiAjaW5jbHVkZSAi
V2ViS2l0V2ViVmlld0Jhc2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKIApAQCAtMTA0
LDMgKzEwNSw3IEBAIGludCB3ZWJraXRXZWJWaWV3QmFzZVJlbmRlckhvc3RGaWxlRGVzY3JpcHRv
cihXZWJLaXRXZWJWaWV3QmFzZSopOwogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUmVxdWVzdFBv
aW50ZXJMb2NrKFdlYktpdFdlYlZpZXdCYXNlKik7CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlk
TG9zZVBvaW50ZXJMb2NrKFdlYktpdFdlYlZpZXdCYXNlKik7CisKK3ZvaWQgd2Via2l0V2ViVmll
d0Jhc2VTZXRJbnB1dE1ldGhvZENvbnRleHQoV2ViS2l0V2ViVmlld0Jhc2UqLCBXZWJLaXRJbnB1
dE1ldGhvZENvbnRleHQqKTsKK1dlYktpdElucHV0TWV0aG9kQ29udGV4dCogd2Via2l0V2ViVmll
d0Jhc2VHZXRJbnB1dE1ldGhvZENvbnRleHQoV2ViS2l0V2ViVmlld0Jhc2UqKTsKK3ZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VTeW50aGVzaXplQ29tcG9zaXRpb25LZXlQcmVzcyhXZWJLaXRXZWJWaWV3
QmFzZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKaW5kZXggOTk5YWM5NTIxNWIu
LmYxNDcxYjU1MWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTI4MSw2
ICsyODEsOCBAQCB3ZWJraXRfd2ViX3ZpZXdfcmVzdG9yZV9zZXNzaW9uX3N0YXRlCiB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UKIHdlYmtpdF93ZWJfdmlld19zZW5kX21lc3NhZ2Vf
dG9fcGFnZQogd2Via2l0X3dlYl92aWV3X3NlbmRfbWVzc2FnZV90b19wYWdlX2ZpbmlzaAord2Vi
a2l0X3dlYl92aWV3X3NldF9pbnB1dF9tZXRob2RfY29udGV4dAord2Via2l0X3dlYl92aWV3X2dl
dF9pbnB1dF9tZXRob2RfY29udGV4dAogCiA8U1VCU0VDVElPTiBXZWJLaXRKYXZhc2NyaXB0UmVz
dWx0PgogV2ViS2l0SmF2YXNjcmlwdFJlc3VsdApAQCAtMTU1NSw2ICsxNTU3LDQwIEBAIFdFQktJ
VF9HRU9MT0NBVElPTl9NQU5BR0VSX0dFVF9DTEFTUwogV0VCS0lUX1RZUEVfR0VPTE9DQVRJT05f
UE9TSVRJT04KIDwvU0VDVElPTj4KIAorPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRJbnB1dE1ldGhv
ZENvbnRleHQ8L0ZJTEU+CitXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQKK3dlYmtpdF9pbnB1dF9t
ZXRob2RfY29udGV4dF9zZXRfZW5hYmxlX3ByZWVkaXQKK3dlYmtpdF9pbnB1dF9tZXRob2RfY29u
dGV4dF9nZXRfcHJlZWRpdAord2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2ZpbHRlcl9rZXlf
ZXZlbnQKK3dlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9ub3RpZnlfZm9jdXNfaW4KK3dlYmtp
dF9pbnB1dF9tZXRob2RfY29udGV4dF9ub3RpZnlfZm9jdXNfb3V0Cit3ZWJraXRfaW5wdXRfbWV0
aG9kX2NvbnRleHRfbm90aWZ5X2N1cnNvcl9hcmVhCit3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRl
eHRfcmVzZXQKKworPFNVQlNFQ1RJT04gVW5kZXJsaW5lPgorV2ViS2l0SW5wdXRNZXRob2RVbmRl
cmxpbmUKK3dlYmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX25ldword2Via2l0X2lucHV0X21l
dGhvZF91bmRlcmxpbmVfY29weQord2Via2l0X2lucHV0X21ldGhvZF91bmRlcmxpbmVfZnJlZQor
d2Via2l0X2lucHV0X21ldGhvZF91bmRlcmxpbmVfc2V0X2NvbG9yCisKKzxTVUJTRUNUSU9OIFBy
aXZhdGU+CitXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRQcml2YXRlCit3ZWJraXRfaW5wdXRfbWV0
aG9kX2NvbnRleHRfZ2V0X3R5cGUKK3dlYmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX2dldF90
eXBlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0Q2xh
c3MKK1dFQktJVF9UWVBFX0lOUFVUX01FVEhPRF9DT05URVhUCitXRUJLSVRfSU5QVVRfTUVUSE9E
X0NPTlRFWFQKK1dFQktJVF9JTlBVVF9NRVRIT0RfQ09OVEVYVF9DTEFTUworV0VCS0lUX0lTX0lO
UFVUX01FVEhPRF9DT05URVhUCitXRUJLSVRfSVNfSU5QVVRfTUVUSE9EX0NPTlRFWFRfQ0xBU1MK
K1dFQktJVF9JTlBVVF9NRVRIT0RfQ09OVEVYVF9HRVRfQ0xBU1MKK1dFQktJVF9UWVBFX0lOUFVU
X01FVEhPRF9VTkRFUkxJTkUKKzwvU0VDVElPTj4KKwogPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRX
ZWJFeHRlbnNpb248L0ZJTEU+CiBXZWJLaXRXZWJFeHRlbnNpb24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApp
bmRleCA3YWEzMDUxMmMwNi4uZmFhMjA3ZDUwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTY1
LDYgKzY1LDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0R2VvbG9jYXRpb25N
YW5hZ2VyLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRVc2VyTWVzc2Fn
ZS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0UG9pbnRlckxvY2tQZXJt
aXNzaW9uUmVxdWVzdC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0SW5w
dXRNZXRob2RGaWx0ZXIueG1sIi8+CiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlcj4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggNGMxOTYyMTdlNmYuLjkz
MGIxN2I2NjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL3dl
YmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApA
QCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0R2VvbG9jYXRpb25NYW5h
Z2VyLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHQuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdEluc3RhbGxNaXNzaW5nTWVkaWFQbHVnaW5zUGVybWlzc2lvblJlcXVlc3QuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdEphdmFzY3JpcHRSZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdE1pbWVJbmZvLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL0lucHV0TWV0aG9kRmlsdGVyV1BFLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvSW5wdXRNZXRob2RGaWx0ZXJXUEUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5jYTg4MmZjNzY2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvSW5wdXRNZXRob2RGaWx0ZXJXUEUuY3BwCkBAIC0w
LDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklucHV0TWV0aG9kRmlsdGVyLmgiCisKKyNpbmNsdWRl
ICJXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRSZWN0Lmg+CisjaW5jbHVkZSA8d3BlL3dwZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitJbnRSZWN0IElucHV0TWV0aG9kRmlsdGVyOjpwbGF0
Zm9ybVRyYW5zZm9ybUN1cnNvclJlY3RUb1ZpZXdDb29yZGluYXRlcyhjb25zdCBJbnRSZWN0JiBj
dXJzb3JSZWN0KQoreworICAgIHJldHVybiBjdXJzb3JSZWN0OworfQorCitib29sIElucHV0TWV0
aG9kRmlsdGVyOjpwbGF0Zm9ybUV2ZW50S2V5SXNLZXlQcmVzcyhQbGF0Zm9ybUV2ZW50S2V5KiBl
dmVudCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXZlbnQtPnByZXNzZWQ7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Bh
Z2VDbGllbnRJbXBsLmNwcAppbmRleCAyMTcxMDliMzRlYi4uZGE0YTk1MjU3ZWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCkBA
IC00MzAsNCArNDMwLDE0IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnNlbmRNZXNzYWdlVG9XZWJW
aWV3KFVzZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsCiAgICAgbV92aWV3LmRp
ZFJlY2VpdmVVc2VyTWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldElucHV0TWV0aG9kU3RhdGUo
Ym9vbCBlbmFibGVkKQoreworICAgIG1fdmlldy5zZXRJbnB1dE1ldGhvZFN0YXRlKGVuYWJsZWQp
OworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZWxlY3Rpb25EaWRDaGFuZ2UoKQoreworICAg
IG1fdmlldy5zZWxlY3Rpb25EaWRDaGFuZ2UoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgK
aW5kZXggZmIzOGIxOTZmYTUuLjdkY2Q4YTE5YmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5oCkBAIC02Miw2ICs2Miw3IEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAgICAgdm9pZCBzZW5kTWVzc2FnZVRvV2ViVmlldyhVc2VyTWVzc2FnZSYm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJNZXNzYWdlJiYpPiYmKTsKKyAgICB2b2lkIHNl
dElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKIAogcHJpdmF0ZToKICAgICAvLyBQYWdl
Q2xpZW50CkBAIC0xNjUsNiArMTY2LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkQ2hhbmdl
V2ViUGFnZUlEKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICB2b2lkIHNlbGVjdGlvbkRpZENoYW5n
ZSgpIG92ZXJyaWRlOworCiAgICAgV0tXUEU6OlZpZXcmIG1fdmlldzsKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxTY3JvbGxHZXN0dXJlQ29udHJvbGxlcj4gbV9zY3JvbGxHZXN0dXJlQ29udHJvbGxl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCmluZGV4IGUw
ZjVhNzg5NGU2Li5kZDA1YTc2Y2MxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XUEVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1dQRVZpZXcuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJUGFnZUNvbmZp
Z3VyYXRpb24uaCIKICNpbmNsdWRlICJBUElWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhd2lu
Z0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIkVkaXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNp
bmNsdWRlICJOYXRpdmVXZWJUb3VjaEV2ZW50LmgiCkBAIC0xNDEsMTIgKzE0MiwxNSBAQCBWaWV3
OjpWaWV3KHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiBiYWNrZW5kLCBjb25zdCBBUEk6OlBhZ2VD
b25maWd1cmF0aW9uJiBiYXNlQwogICAgICAgICAgICAgICAgIHByZWZlcmVuY2VzLnNldFJlc291
cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSghcHJlZmVyZW5jZXMucmVzb3VyY2VVc2FnZU92ZXJsYXlW
aXNpYmxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHZpZXcucGFnZSgpLmhhbmRsZUtleWJvYXJkRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50KGV2ZW50KSk7CisgICAgICAgICAgICB2aWV3LmhhbmRsZUtleWJvYXJkRXZl
bnQoZXZlbnQpOwogICAgICAgICB9LAogICAgICAgICAvLyBoYW5kbGVfcG9pbnRlcl9ldmVudAog
ICAgICAgICBbXSh2b2lkKiBkYXRhLCBzdHJ1Y3Qgd3BlX2lucHV0X3BvaW50ZXJfZXZlbnQqIGV2
ZW50KQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiBwYWdlID0gcmVpbnRlcnByZXRfY2Fz
dDxWaWV3Kj4oZGF0YSktPnBhZ2UoKTsKKyAgICAgICAgICAgIGF1dG8mIHZpZXcgPSAqcmVpbnRl
cnByZXRfY2FzdDxWaWV3Kj4oZGF0YSk7CisgICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUgPT0g
d3BlX2lucHV0X3BvaW50ZXJfZXZlbnRfdHlwZV9idXR0b24gJiYgZXZlbnQtPnN0YXRlID09IDEp
CisgICAgICAgICAgICAgICAgdmlldy5tX2lucHV0TWV0aG9kRmlsdGVyLmNhbmNlbENvbXBvc2l0
aW9uKCk7CisgICAgICAgICAgICBhdXRvJiBwYWdlID0gdmlldy5wYWdlKCk7CiAgICAgICAgICAg
ICBwYWdlLmhhbmRsZU1vdXNlRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJNb3VzZUV2ZW50KGV2ZW50
LCBwYWdlLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKICAgICAgICAgfSwKICAgICAgICAgLy8gaGFu
ZGxlX2F4aXNfZXZlbnQKQEAgLTIxNSw2ICsyMTksMjggQEAgdm9pZCBWaWV3OjpkaWRSZWNlaXZl
VXNlck1lc3NhZ2UoVXNlck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFUKICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVVzZXJNZXNzYWdlKCp0aGlzLCBXVEZNb3ZlKG1l
c3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKK3ZvaWQgVmlldzo6c2V0
SW5wdXRNZXRob2RDb250ZXh0KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBtX2lucHV0TWV0aG9kRmlsdGVyLnNldENvbnRleHQoY29udGV4dCk7Cit9CisKK1dlYktp
dElucHV0TWV0aG9kQ29udGV4dCogVmlldzo6aW5wdXRNZXRob2RDb250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCk7Cit9CisKK3ZvaWQgVmll
dzo6c2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpCit7CisgICAgbV9pbnB1dE1ldGhv
ZEZpbHRlci5zZXRFbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIFZpZXc6OnNlbGVjdGlvbkRp
ZENoYW5nZSgpCit7CisgICAgY29uc3QgYXV0byYgZWRpdG9yU3RhdGUgPSBtX3BhZ2VQcm94eS0+
ZWRpdG9yU3RhdGUoKTsKKyAgICBpZiAoIWVkaXRvclN0YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXRE
YXRhKQorICAgICAgICBtX2lucHV0TWV0aG9kRmlsdGVyLm5vdGlmeUN1cnNvclJlY3QoZWRpdG9y
U3RhdGUucG9zdExheW91dERhdGEoKS5jYXJldFJlY3RBdFN0YXJ0KTsKK30KKwogdm9pZCBWaWV3
OjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCiB7CiAgICAgbV9zaXplID0g
c2l6ZTsKQEAgLTIyNywxMCArMjUzLDM2IEBAIHZvaWQgVmlldzo6c2V0Vmlld1N0YXRlKE9wdGlv
blNldDxXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpGbGFnPiBmbGFncykKICAgICBhdXRvIGNoYW5n
ZWRGbGFncyA9IG1fdmlld1N0YXRlRmxhZ3MgXiBmbGFnczsKICAgICBtX3ZpZXdTdGF0ZUZsYWdz
ID0gZmxhZ3M7CiAKKyAgICBpZiAoY2hhbmdlZEZsYWdzLmNvbnRhaW5zKFdlYkNvcmU6OkFjdGl2
aXR5U3RhdGU6OklzRm9jdXNlZCkpIHsKKyAgICAgICAgaWYgKG1fdmlld1N0YXRlRmxhZ3MuY29u
dGFpbnMoV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNGb2N1c2VkKSkKKyAgICAgICAgICAgIG1f
aW5wdXRNZXRob2RGaWx0ZXIubm90aWZ5Rm9jdXNlZEluKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1faW5wdXRNZXRob2RGaWx0ZXIubm90aWZ5Rm9jdXNlZE91dCgpOworICAgIH0KKwog
ICAgIGlmIChjaGFuZ2VkRmxhZ3MpCiAgICAgICAgIG1fcGFnZVByb3h5LT5hY3Rpdml0eVN0YXRl
RGlkQ2hhbmdlKGNoYW5nZWRGbGFncyk7CiB9CiAKK3ZvaWQgVmlldzo6aGFuZGxlS2V5Ym9hcmRF
dmVudChzdHJ1Y3Qgd3BlX2lucHV0X2tleWJvYXJkX2V2ZW50KiBldmVudCkKK3sKKyAgICBhdXRv
IGZpbHRlclJlc3VsdCA9IG1faW5wdXRNZXRob2RGaWx0ZXIuZmlsdGVyS2V5RXZlbnQoZXZlbnQp
OworICAgIGlmIChmaWx0ZXJSZXN1bHQuaGFuZGxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cGFnZSgpLmhhbmRsZUtleWJvYXJkRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50
KGV2ZW50LCBldmVudC0+cHJlc3NlZCA/IGZpbHRlclJlc3VsdC5rZXlUZXh0IDogU3RyaW5nKCks
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6OkhhbmRsZWRCeUlucHV0TWV0aG9kOjpObykpOworfQor
Cit2b2lkIFZpZXc6OnN5bnRoZXNpemVDb21wb3NpdGlvbktleVByZXNzKCkKK3sKKyAgICAvLyBU
aGUgV2luZG93cyBjb21wb3NpdGlvbiBrZXkgZXZlbnQgY29kZSBpcyAyOTkgb3IgVktfUFJPQ0VT
U0tFWS4gV2UgbmVlZCB0bworICAgIC8vIGVtaXQgdGhpcyBjb2RlIGZvciB3ZWIgY29tcGF0aWJp
bGl0eSByZWFzb25zIHdoZW4ga2V5IGV2ZW50cyB0cmlnZ2VyCisgICAgLy8gY29tcG9zaXRpb24g
cmVzdWx0cy4gV1BFIGRvZXNuJ3QgaGF2ZSBhbiBlcXVpdmFsZW50LCBzbyB3ZSBzZW5kIFZvaWRT
eW1ib2wKKyAgICAvLyBoZXJlIHRvIFdlYkNvcmUuIFBsYXRmb3JtS2V5RXZlbnQgY29udmVydHMg
dGhpcyBjb2RlIGludG8gVktfUFJPQ0VTU0tFWS4KKyAgICBzdGF0aWMgc3RydWN0IHdwZV9pbnB1
dF9rZXlib2FyZF9ldmVudCBldmVudCA9IHsgMCwgV1BFX0tFWV9Wb2lkU3ltYm9sLCAwLCB0cnVl
LCAwIH07CisgICAgcGFnZSgpLmhhbmRsZUtleWJvYXJkRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50KCZldmVudCwgeyB9LCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpIYW5kbGVk
QnlJbnB1dE1ldGhvZDo6WWVzKSk7Cit9CisKIHZvaWQgVmlldzo6Y2xvc2UoKQogewogICAgIG1f
cGFnZVByb3h5LT5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XUEVWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZp
ZXcuaAppbmRleCAxNGViMzg1MzIxMC4uNTFmMjIzODNlZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV1BFVmlldy5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIklucHV0TWV0aG9kRmlsdGVyLmgi
CiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0FjdGl2aXR5U3RhdGUuaD4KQEAgLTM5LDYgKzQwLDggQEAKICNl
bmRpZgogCiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTR2xvYmFsQ29udGV4dFJl
ZjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgV2ViS2l0SW5wdXRN
ZXRob2RDb250ZXh0Oworc3RydWN0IHdwZV9pbnB1dF9rZXlib2FyZF9ldmVudDsKIHN0cnVjdCB3
cGVfdmlld19iYWNrZW5kOwogCiBuYW1lc3BhY2UgQVBJIHsKQEAgLTcxLDYgKzc0LDEzIEBAIHB1
YmxpYzoKICAgICB2b2lkIGRpZENoYW5nZVBhZ2VJRCgpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVVz
ZXJNZXNzYWdlKFdlYktpdDo6VXNlck1lc3NhZ2UmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChX
ZWJLaXQ6OlVzZXJNZXNzYWdlJiYpPiYmKTsKIAorICAgIHZvaWQgc2V0SW5wdXRNZXRob2RDb250
ZXh0KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCopOworICAgIFdlYktpdElucHV0TWV0aG9kQ29u
dGV4dCogaW5wdXRNZXRob2RDb250ZXh0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRJbnB1dE1ldGhv
ZFN0YXRlKGJvb2wpOworICAgIHZvaWQgc3ludGhlc2l6ZUNvbXBvc2l0aW9uS2V5UHJlc3MoKTsK
KworICAgIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCk7CisKICAgICBXZWJLaXQ6OldlYlBhZ2VQ
cm94eSYgcGFnZSgpIHsgcmV0dXJuICptX3BhZ2VQcm94eTsgfQogCiAgICAgc3RydWN0IHdwZV92
aWV3X2JhY2tlbmQqIGJhY2tlbmQoKSB7IHJldHVybiBtX2JhY2tlbmQ7IH0KQEAgLTk1LDYgKzEw
NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpOwogICAgIHZvaWQgc2V0Vmlld1N0YXRlKE9wdGlvblNldDxXZWJDb3JlOjpBY3Rpdml0eVN0
YXRlOjpGbGFnPik7CisgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KHN0cnVjdCB3cGVfaW5w
dXRfa2V5Ym9hcmRfZXZlbnQqKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OlZpZXdDbGll
bnQ+IG1fY2xpZW50OwogCkBAIC0xMTIsNiArMTIzLDggQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWSkKICAgICBtdXRhYmxlIEdSZWZQdHI8V2ViS2l0V2ViVmlld0FjY2Vzc2li
bGU+IG1fYWNjZXNzaWJsZTsKICNlbmRpZgorCisgICAgV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRl
ciBtX2lucHV0TWV0aG9kRmlsdGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV0tXUEUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0SW5wdXRNZXRob2RD
b250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdElucHV0TWV0
aG9kQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NjRl
MzUyMTZmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0LmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUX0hfSU5T
SURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdw
ZS93ZWJraXQuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdElucHV0TWV0aG9kQ29udGV4dF9oCisjZGVmaW5lIFdlYktpdElucHV0TWV0aG9kQ29u
dGV4dF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdwZS9XZWJLaXRE
ZWZpbmVzLmg+CisjaW5jbHVkZSA8d3BlL1dlYktpdENvbG9yLmg+CisjaW5jbHVkZSA8d3BlL3dw
ZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfSU5QVVRfTUVUSE9E
X0NPTlRFWFQgICAgICAgICAgICAod2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9JTlBVVF9NRVRIT0RfQ09OVEVYVChvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9JTlBVVF9NRVRI
T0RfQ09OVEVYVCwgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KSkKKyNkZWZpbmUgV0VCS0lUX0lO
UFVUX01FVEhPRF9DT05URVhUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0lOUFVUX01FVEhPRF9DT05URVhULCBXZWJLaXRJbnB1
dE1ldGhvZENvbnRleHRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19JTlBVVF9NRVRIT0RfQ09O
VEVYVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfVFlQRV9JTlBVVF9NRVRIT0RfQ09OVEVYVCkpCisjZGVmaW5lIFdFQktJVF9JU19JTlBVVF9N
RVRIT0RfQ09OVEVYVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfVFlQRV9JTlBVVF9NRVRIT0RfQ09OVEVYVCkpCisjZGVmaW5lIFdFQktJVF9J
TlBVVF9NRVRIT0RfQ09OVEVYVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9JTlBVVF9NRVRIT0RfQ09OVEVYVCwgV2ViS2l0SW5w
dXRNZXRob2RDb250ZXh0Q2xhc3MpKQorCisjZGVmaW5lIFdFQktJVF9UWVBFX0lOUFVUX01FVEhP
RF9VTkRFUkxJTkUgICAgICAgICAgKHdlYmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX2dldF90
eXBlKCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgICAgICAg
IFdlYktpdElucHV0TWV0aG9kQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnB1dE1l
dGhvZENvbnRleHRDbGFzcyAgIFdlYktpdElucHV0TWV0aG9kQ29udGV4dENsYXNzOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdElucHV0TWV0aG9kQ29udGV4dFByaXZhdGUgV2ViS2l0SW5wdXRNZXRo
b2RDb250ZXh0UHJpdmF0ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnB1dE1ldGhvZFVuZGVy
bGluZSAgICAgIFdlYktpdElucHV0TWV0aG9kVW5kZXJsaW5lOworCitzdHJ1Y3QgX1dlYktpdElu
cHV0TWV0aG9kQ29udGV4dCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0
ZSA+Ki8KKyAgICBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRQcml2YXRlICpwcml2OworfTsKKwor
c3RydWN0IF9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRDbGFzcyB7CisgICAgR09iamVjdENsYXNz
IHBhcmVudF9jbGFzczsKKworICAgIC8qIFNpZ25hbHMgKi8KKyAgICB2b2lkICAgICAoKiBwcmVl
ZGl0X3N0YXJ0ZWQpICAgIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgICAgICAgICpjb250ZXh0
KTsKKyAgICB2b2lkICAgICAoKiBwcmVlZGl0X2NoYW5nZWQpICAgIChXZWJLaXRJbnB1dE1ldGhv
ZENvbnRleHQgICAgICAgICpjb250ZXh0KTsKKyAgICB2b2lkICAgICAoKiBwcmVlZGl0X2Zpbmlz
aGVkKSAgIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgICAgICAgICpjb250ZXh0KTsKKyAgICB2
b2lkICAgICAoKiBjb21taXR0ZWQpICAgICAgICAgIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQg
ICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgKnRleHQpOworCisgICAgLyogVmlydHVhbCBm
dW5jdGlvbnMgKi8KKyAgICB2b2lkICAgICAoKiBzZXRfZW5hYmxlX3ByZWVkaXQpIChXZWJLaXRJ
bnB1dE1ldGhvZENvbnRleHQgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQp
OworICAgIHZvaWQgICAgICgqIGdldF9wcmVlZGl0KSAgICAgICAgKFdlYktpdElucHV0TWV0aG9k
Q29udGV4dCAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICoqdGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAg
Kip1bmRlcmxpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKmN1cnNvcl9vZmZzZXQpOworICAgIGdib29sZWFu
ICgqIGZpbHRlcl9rZXlfZXZlbnQpICAgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAgICAgICAg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHdw
ZV9pbnB1dF9rZXlib2FyZF9ldmVudCAqa2V5X2V2ZW50KTsKKyAgICB2b2lkICAgICAoKiBub3Rp
ZnlfZm9jdXNfaW4pICAgIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgICAgICAgICpjb250ZXh0
KTsKKyAgICB2b2lkICAgICAoKiBub3RpZnlfZm9jdXNfb3V0KSAgIChXZWJLaXRJbnB1dE1ldGhv
ZENvbnRleHQgICAgICAgICpjb250ZXh0KTsKKyAgICB2b2lkICAgICAoKiBub3RpZnlfY3Vyc29y
X2FyZWEpIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgICAgICAgICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQpOworICAgIHZvaWQgICAgICgqIHJlc2V0KSAgICAgICAgICAgICAgKFdlYktp
dElucHV0TWV0aG9kQ29udGV4dCAgICAgICAgKmNvbnRleHQpOworCisgICAgdm9pZCAoKl93ZWJr
aXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9p
ZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ0KSAo
dm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ1KSAodm9pZCk7CisgICAgdm9pZCAo
Kl93ZWJraXRfcmVzZXJ2ZWQ2KSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ3
KSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfaW5wdXRfbWV0aG9kX2Nv
bnRleHRfZ2V0X3R5cGUgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfc2V0X2VuYWJsZV9wcmVlZGl0IChXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHQgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgZW5h
YmxlZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2dl
dF9wcmVlZGl0ICAgICAgICAoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0ICAgICAgICAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqKnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAg
Kip1bmRlcmxpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAqY3Vyc29yX29mZnNldCk7CisK
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9maWx0ZXJf
a2V5X2V2ZW50ICAgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAgICAgICAgKmNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgd3Bl
X2lucHV0X2tleWJvYXJkX2V2ZW50ICprZXlfZXZlbnQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9ub3RpZnlfZm9jdXNfaW4gICAgKFdlYktpdElucHV0
TWV0aG9kQ29udGV4dCAgICAgICAgKmNvbnRleHQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9pbnB1dF9tZXRob2RfY29udGV4dF9ub3RpZnlfZm9jdXNfb3V0ICAgKFdlYktpdElucHV0TWV0
aG9kQ29udGV4dCAgICAgICAgKmNvbnRleHQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9p
bnB1dF9tZXRob2RfY29udGV4dF9ub3RpZnlfY3Vyc29yX2FyZWEgKFdlYktpdElucHV0TWV0aG9k
Q29udGV4dCAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfcmVzZXQgICAgICAgICAgICAgIChXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHQgICAgICAgICpjb250ZXh0KTsKKworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfaW5wdXRfbWV0aG9kX3VuZGVybGluZV9nZXRfdHlwZSAgICAgICAgICh2b2lkKTsKKworV0VC
S0lUX0FQSSBXZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZSAqCit3ZWJraXRfaW5wdXRfbWV0aG9k
X3VuZGVybGluZV9uZXcgICAgICAgICAgICAgIChndWludCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFydF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfb2Zmc2V0KTsK
KworV0VCS0lUX0FQSSBXZWJLaXRJbnB1dE1ldGhvZFVuZGVybGluZSAqCit3ZWJraXRfaW5wdXRf
bWV0aG9kX3VuZGVybGluZV9jb3B5ICAgICAgICAgICAgIChXZWJLaXRJbnB1dE1ldGhvZFVuZGVy
bGluZSAgICAgICp1bmRlcmxpbmUpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pbnB1dF9t
ZXRob2RfdW5kZXJsaW5lX2ZyZWUgICAgICAgICAgICAgKFdlYktpdElucHV0TWV0aG9kVW5kZXJs
aW5lICAgICAgKnVuZGVybGluZSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2lucHV0X21l
dGhvZF91bmRlcmxpbmVfc2V0X2NvbG9yICAgICAgICAoV2ViS2l0SW5wdXRNZXRob2RVbmRlcmxp
bmUgICAgICAqdW5kZXJsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViS2l0Q29sb3IgICAgICAgICAgICAgICAgICAgICAqY29sb3IpOworCisK
K0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRXUEUuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRXUEUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lY2ZmZGYxMmQ3OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0SW5wdXRNZXRo
b2RDb250ZXh0V1BFLmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRJbnB1
dE1ldGhvZENvbnRleHQuaCIKKworI2luY2x1ZGUgIldlYktpdENvbG9yUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdElucHV0TWV0aG9kQ29udGV4dFByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKKy8qKgorICogd2Via2l0X2lucHV0X21ldGhvZF91bmRlcmxpbmVfc2V0
X2NvbG9yOgorICogQHVuZGVybGluZTogYSAjV2ViS2l0SW5wdXRNZXRob2RVbmRlcmxpbmUKKyAq
IEBjb2xvcjogKG51bGxhYmxlKTogYSAjV2ViS2l0Q29sb3Igb3IgJU5VTEwKKyAqCisgKiBTZXQg
dGhlIGNvbG9yIG9mIHRoZSB1bmRlcmxpbmUuIElmIEByZ2JhIGlzICVOVUxMIHRoZSBmb3JlZ3Jv
dW5kIHRleHQgY29sb3Igd2lsbCBiZSB1c2VkCisgKiBmb3IgdGhlIHVuZGVybGluZSB0b28uCisg
KgorICogU2luY2U6IDIuMjgKKyAqLwordm9pZCB3ZWJraXRfaW5wdXRfbWV0aG9kX3VuZGVybGlu
ZV9zZXRfY29sb3IoV2ViS2l0SW5wdXRNZXRob2RVbmRlcmxpbmUqIHVuZGVybGluZSwgV2ViS2l0
Q29sb3IqIGNvbG9yKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwodW5kZXJsaW5lKTsKKworICAg
IGlmICghY29sb3IpIHsKKyAgICAgICAgdW5kZXJsaW5lLT51bmRlcmxpbmUuY29tcG9zaXRpb25V
bmRlcmxpbmVDb2xvciA9IENvbXBvc2l0aW9uVW5kZXJsaW5lQ29sb3I6OlRleHRDb2xvcjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuZGVybGluZS0+dW5kZXJsaW5lLmNvbXBvc2l0
aW9uVW5kZXJsaW5lQ29sb3IgPSBDb21wb3NpdGlvblVuZGVybGluZUNvbG9yOjpHaXZlbkNvbG9y
OworICAgIHVuZGVybGluZS0+dW5kZXJsaW5lLmNvbG9yID0gd2Via2l0Q29sb3JUb1dlYkNvcmVD
b2xvcihjb2xvcik7Cit9CisKKy8qKgorICogd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2Zp
bHRlcl9rZXlfZXZlbnQ6CisgKiBAY29udGV4dDogYSAjV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0
CisgKiBAa2V5X2V2ZW50OiB0aGUga2V5IGV2ZW50IHRvIGZpbHRlcgorICoKKyAqIEFsbG93IEBr
ZXlfZXZlbnQgdG8gYmUgaGFuZGxlZCBieSB0aGUgaW5wdXQgbWV0aG9kLiBJZiAlVFJVRSBpcyBy
ZXR1cm5lZCwgdGhlbiBubyBmdXJ0aGVyIHByb2Nlc3Npbmcgc2hvdWxkIGJlCisgKiBkb25lIGZv
ciB0aGUga2V5IGV2ZW50LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBrZXkgZXZlbnQg
d2FzIGhhbmRsZWQsIG9yICVGQUxTRSBvdGhlcndpc2UKKyAqCisgKiBTaW5jZTogMi4yOAorICov
CitnYm9vbGVhbiB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfZmlsdGVyX2tleV9ldmVudChX
ZWJLaXRJbnB1dE1ldGhvZENvbnRleHQqIGNvbnRleHQsIHN0cnVjdCB3cGVfaW5wdXRfa2V5Ym9h
cmRfZXZlbnQqIGtleUV2ZW50KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19JTlBVVF9NRVRIT0RfQ09OVEVYVChjb250ZXh0KSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKGtleUV2ZW50LCBGQUxTRSk7CisKKyAgICBhdXRvKiBpbUNsYXNzID0gV0VCS0lU
X0lOUFVUX01FVEhPRF9DT05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKKyAgICByZXR1cm4gaW1D
bGFzcy0+ZmlsdGVyX2tleV9ldmVudCA/IGltQ2xhc3MtPmZpbHRlcl9rZXlfZXZlbnQoY29udGV4
dCwga2V5RXZlbnQpIDogRkFMU0U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS93cGUvV2ViS2l0V2ViVmlldy5oCmluZGV4IDgwMDE0MjliNzNhLi4wMTc0MzRkZWJkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3LmgKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3cGUvV2ViS2l0RmluZENvbnRyb2xsZXIuaD4KICNp
bmNsdWRlIDx3cGUvV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d3Bl
L1dlYktpdEhpdFRlc3RSZXN1bHQuaD4KKyNpbmNsdWRlIDx3cGUvV2ViS2l0SW5wdXRNZXRob2RD
b250ZXh0Lmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdEphdmFzY3JpcHRSZXN1bHQuaD4KICNpbmNs
dWRlIDx3cGUvV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oPgogI2luY2x1ZGUgPHdwZS9XZWJLaXRO
b3RpZmljYXRpb24uaD4KQEAgLTU0Myw2ICs1NDQsMTMgQEAgd2Via2l0X3dlYl92aWV3X3NlbmRf
bWVzc2FnZV90b19wYWdlX2ZpbmlzaCAgICAgICAgICAoV2ViS2l0V2ViVmlldwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0
ICAgICAgICAgICAgICAgICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICAqKmVycm9y
KTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfc2V0X2lucHV0X21ldGhvZF9j
b250ZXh0ICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0ICAgICpjb250ZXh0KTsKKworV0VCS0lUX0FQSSBXZWJL
aXRJbnB1dE1ldGhvZENvbnRleHQgKgord2Via2l0X3dlYl92aWV3X2dldF9pbnB1dF9tZXRob2Rf
Y29udGV4dCAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmll
dyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0CmluZGV4IGUzNjJk
NTU0ZTBhLi5mMGIwYTc1OTIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dApAQCAtMjU1LDYgKzI1NSw4
IEBAIHdlYmtpdF93ZWJfdmlld19nZXRfYmFja2dyb3VuZF9jb2xvcgogd2Via2l0X3dlYl92aWV3
X3NldF9iYWNrZ3JvdW5kX2NvbG9yCiB3ZWJraXRfd2ViX3ZpZXdfc2VuZF9tZXNzYWdlX3RvX3Bh
Z2UKIHdlYmtpdF93ZWJfdmlld19zZW5kX21lc3NhZ2VfdG9fcGFnZV9maW5pc2gKK3dlYmtpdF93
ZWJfdmlld19zZXRfaW5wdXRfbWV0aG9kX2NvbnRleHQKK3dlYmtpdF93ZWJfdmlld19nZXRfaW5w
dXRfbWV0aG9kX2NvbnRleHQKIAogPFNVQlNFQ1RJT04gV2ViS2l0SmF2YXNjcmlwdFJlc3VsdD4K
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQKQEAgLTE0NDAsNiArMTQ0Miw0MCBAQCBXRUJLSVRfR0VP
TE9DQVRJT05fTUFOQUdFUl9HRVRfQ0xBU1MKIFdFQktJVF9UWVBFX0dFT0xPQ0FUSU9OX1BPU0lU
SU9OCiA8L1NFQ1RJT04+CiAKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0SW5wdXRNZXRob2RDb250
ZXh0PC9GSUxFPgorV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0Cit3ZWJraXRfaW5wdXRfbWV0aG9k
X2NvbnRleHRfc2V0X2VuYWJsZV9wcmVlZGl0Cit3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRf
Z2V0X3ByZWVkaXQKK3dlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9maWx0ZXJfa2V5X2V2ZW50
Cit3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfbm90aWZ5X2ZvY3VzX2luCit3ZWJraXRfaW5w
dXRfbWV0aG9kX2NvbnRleHRfbm90aWZ5X2ZvY3VzX291dAord2Via2l0X2lucHV0X21ldGhvZF9j
b250ZXh0X25vdGlmeV9jdXJzb3JfYXJlYQord2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X3Jl
c2V0CisKKzxTVUJTRUNUSU9OIFVuZGVybGluZT4KK1dlYktpdElucHV0TWV0aG9kVW5kZXJsaW5l
Cit3ZWJraXRfaW5wdXRfbWV0aG9kX3VuZGVybGluZV9uZXcKK3dlYmtpdF9pbnB1dF9tZXRob2Rf
dW5kZXJsaW5lX2NvcHkKK3dlYmtpdF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX2ZyZWUKK3dlYmtp
dF9pbnB1dF9tZXRob2RfdW5kZXJsaW5lX3NldF9jb2xvcgorCis8U1VCU0VDVElPTiBQcml2YXRl
PgorV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0UHJpdmF0ZQord2Via2l0X2lucHV0X21ldGhvZF9j
b250ZXh0X2dldF90eXBlCit3ZWJraXRfaW5wdXRfbWV0aG9kX3VuZGVybGluZV9nZXRfdHlwZQor
Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdElucHV0TWV0aG9kQ29udGV4dENsYXNzCitX
RUJLSVRfVFlQRV9JTlBVVF9NRVRIT0RfQ09OVEVYVAorV0VCS0lUX0lOUFVUX01FVEhPRF9DT05U
RVhUCitXRUJLSVRfSU5QVVRfTUVUSE9EX0NPTlRFWFRfQ0xBU1MKK1dFQktJVF9JU19JTlBVVF9N
RVRIT0RfQ09OVEVYVAorV0VCS0lUX0lTX0lOUFVUX01FVEhPRF9DT05URVhUX0NMQVNTCitXRUJL
SVRfSU5QVVRfTUVUSE9EX0NPTlRFWFRfR0VUX0NMQVNTCitXRUJLSVRfVFlQRV9JTlBVVF9NRVRI
T0RfVU5ERVJMSU5FCis8L1NFQ1RJT04+CisKIDxTRUNUSU9OPgogPEZJTEU+V2ViS2l0VVJJVXRp
bGl0aWVzPC9GSUxFPgogd2Via2l0X3VyaV9mb3JfZGlzcGxheQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS1kb2NzLnNnbWwgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLWRvY3Muc2dtbAppbmRleCAyZmU3YjIwZWZk
MC4uYWJkYWY2ZGRmZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvZG9jcy93cGUtZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvZG9jcy93cGUtZG9jcy5zZ21sCkBAIC01OCw2ICs1OCw3IEBACiAgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdENvbG9yLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRHZW9sb2NhdGlvbk1hbmFnZXIueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s
L1dlYktpdFVzZXJNZXNzYWdlLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRJbnB1dE1ldGhvZEZpbHRlci54bWwiLz4KICAgPC9jaGFwdGVyPgogCiAgIDxjaGFwdGVyPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS93ZWJraXQuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvd2Via2l0LmgKaW5kZXggOWNjMzFjYjQ5Njgu
LjE1YTRjMWZmMWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L3dlYmtpdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvd2Via2l0LmgK
QEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDx3cGUvV2ViS2l0R2VvbG9jYXRpb25NYW5hZ2Vy
Lmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaD4K
ICNpbmNsdWRlIDx3cGUvV2ViS2l0SGl0VGVzdFJlc3VsdC5oPgorI2luY2x1ZGUgPHdwZS9XZWJL
aXRJbnB1dE1ldGhvZENvbnRleHQuaD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0SW5zdGFsbE1pc3Np
bmdNZWRpYVBsdWdpbnNQZXJtaXNzaW9uUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdwZS9XZWJLaXRK
YXZhc2NyaXB0UmVzdWx0Lmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdE1pbWVJbmZvLmg+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggMmEyOTg5OTM0ODUuLjFlNGQ2Mzk1ZWNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC0yNzAsOCArMjcwLDExIEBA
IHB1YmxpYzoKICNlbmRpZgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZP
Uk0oR1RLKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFdQRSkKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgPSAwOworI2VuZGlm
CisKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIHZpcnR1YWwgUmVm
UHRyPFZpZXdTbmFwc2hvdD4gdGFrZVZpZXdTbmFwc2hvdCgpID0gMDsKICNlbmRpZgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA4MWI2NWM2ZTJkYi4uYmUz
YmI5ZmQxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAt
ODA4Niw3ICs4MDg2LDcgQEAgUmVmUHRyPFZpZXdTbmFwc2hvdD4gV2ViUGFnZVByb3h5Ojp0YWtl
Vmlld1NuYXBzaG90KCkKIH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbXBvc2l0
aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5l
PiYgdW5kZXJsaW5lcywgY29uc3QgRWRpdGluZ1JhbmdlJiBzZWxlY3Rpb25SYW5nZSkKIHsKICAg
ICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5kIG91dCBob3cgdG8gcHJvcGVyIGhhbmRsZSB0aGUg
Y3Jhc2hlcyBjYXNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA0
ODhhYzgwMzA2ZC4uNGQ2OTk5OTVmNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCkBAIC03ODUsMTIgKzc4NSwxNCBAQCBwdWJsaWM6CiAKICAgICBib29sIHVwZGF0ZUxh
eW91dFZpZXdwb3J0UGFyYW1ldGVycyhjb25zdCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uJik7CiAKLSNpZiBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShXUEUpCiAgICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+JiwgY29uc3QgRWRpdGluZ1Jhbmdl
JiBzZWxlY3Rpb25SYW5nZSk7CiAgICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3Ry
aW5nJiBjb21wb3NpdGlvblN0cmluZyk7CiAKICAgICB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUo
Ym9vbCBlbmFibGVkKTsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgZ2V0
Q2VudGVyRm9yWm9vbUdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNlbnRlckluVmll
d0Nvb3JkaW5hdGVzLCBXZWJDb3JlOjpJbnRQb2ludCYgY2VudGVyKTsKICNlbmRpZgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXgg
NWQ4MzkyYjkyZjYuLjI4NGI1ZGZmNjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMjAsNyArMjIwLDcgQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZVByb3h5IHsKICAgICBCaW5kQWNjZXNzaWJpbGl0eVRyZWUoU3RyaW5nIHBsdWdJ
RCkKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExB
VEZPUk0oV1BFKQogICAgIFNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RG
aWx0ZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2YWY3M2E3MjkuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5w
dXRNZXRob2RGaWx0ZXIuaCIKLQotI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIK
LSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dVbmlxdWVQdHJH
dGsuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDxnZGsvZ2Rra2V5
c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIu
aD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotdm9p
ZCBJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlQ29tbWl0Q2FsbGJhY2soSW5wdXRNZXRob2RGaWx0
ZXIqIGZpbHRlciwgY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcpCi17Ci0gICAgZmlsdGVy
LT5oYW5kbGVDb21taXQoY29tcG9zaXRpb25TdHJpbmcpOwotfQotCi12b2lkIElucHV0TWV0aG9k
RmlsdGVyOjpoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFjayhJbnB1dE1ldGhvZEZpbHRlciogZmls
dGVyKQotewotICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdFN0YXJ0KCk7Ci19Ci0KLXZvaWQgSW5w
dXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2soSW5wdXRNZXRob2RG
aWx0ZXIqIGZpbHRlcikKLXsKLSAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRDaGFuZ2VkKCk7Ci19
Ci0KLXZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayhJbnB1
dE1ldGhvZEZpbHRlciogZmlsdGVyKQotewotICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdEVuZCgp
OwotfQotCi1JbnB1dE1ldGhvZEZpbHRlcjo6SW5wdXRNZXRob2RGaWx0ZXIoKQotICAgIDogbV9j
b250ZXh0KGFkb3B0R1JlZihndGtfaW1fbXVsdGljb250ZXh0X25ldygpKSkKLSAgICAsIG1fcGFn
ZShudWxscHRyKQotICAgICwgbV9lbmFibGVkKGZhbHNlKQotICAgICwgbV9jb21wb3NpbmdUZXh0
Q3VycmVudGx5KGZhbHNlKQotICAgICwgbV9maWx0ZXJpbmdLZXlFdmVudChmYWxzZSkKLSAgICAs
IG1fcHJlZWRpdENoYW5nZWQoZmFsc2UpCi0gICAgLCBtX3ByZXZlbnROZXh0Q29tbWl0KGZhbHNl
KQotICAgICwgbV9qdXN0U2VudEZha2VLZXlVcChmYWxzZSkKLSAgICAsIG1fY3Vyc29yT2Zmc2V0
KDApCi0gICAgLCBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMoR0RLX0tF
WV9Wb2lkU3ltYm9sKQotI2lmIEVOQUJMRShBUElfVEVTVFMpCi0gICAgLCBtX3Rlc3RpbmdNb2Rl
KGZhbHNlKQotI2VuZGlmCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY29udGV4
dC5nZXQoKSwgImNvbW1pdCIsIEdfQ0FMTEJBQ0soaGFuZGxlQ29tbWl0Q2FsbGJhY2spLCB0aGlz
KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb250ZXh0LmdldCgpLCAicHJlZWRp
dC1zdGFydCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2spLCB0aGlzKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY29udGV4dC5nZXQoKSwgInByZWVkaXQt
ZW5kIiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0RW5kQ2FsbGJhY2spLCB0aGlzKTsKLX0KLQot
SW5wdXRNZXRob2RGaWx0ZXI6On5JbnB1dE1ldGhvZEZpbHRlcigpCi17Ci0gICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fY29udGV4dC5nZXQoKSwgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Ci19Ci0KLWJvb2wgSW5wdXRN
ZXRob2RGaWx0ZXI6OmlzVmlld0ZvY3VzZWQoKSBjb25zdAotewotI2lmIEVOQUJMRShBUElfVEVT
VFMpCi0gICAgQVNTRVJUKG1fcGFnZSB8fCBtX3Rlc3RpbmdNb2RlKTsKLSAgICBpZiAobV90ZXN0
aW5nTW9kZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIEFTU0VSVChtX3BhZ2Up
OwotI2VuZGlmCi0gICAgcmV0dXJuIG1fcGFnZS0+aXNWaWV3Rm9jdXNlZCgpOwotfQotCi12b2lk
IElucHV0TWV0aG9kRmlsdGVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSNpZiBFTkFC
TEUoQVBJX1RFU1RTKQotICAgIEFTU0VSVChtX3BhZ2UgfHwgbV90ZXN0aW5nTW9kZSk7Ci0jZWxz
ZQotICAgIEFTU0VSVChtX3BhZ2UpOwotI2VuZGlmCi0KLSAgICAvLyBOb3RpZnkgZm9jdXMgb3V0
IGJlZm9yZSBjaGFuZ2luZyB0aGUgbV9lbmFibGVkLgotICAgIGlmICghZW5hYmxlZCkKLSAgICAg
ICAgbm90aWZ5Rm9jdXNlZE91dCgpOwotICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgaWYg
KGVuYWJsZWQgJiYgaXNWaWV3Rm9jdXNlZCgpKQotICAgICAgICBub3RpZnlGb2N1c2VkSW4oKTsK
LX0KLQotdm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6c2V0Q3Vyc29yUmVjdChjb25zdCBJbnRSZWN0
JiBjdXJzb3JSZWN0KQotewotICAgIEFTU0VSVChtX3BhZ2UpOwotCi0gICAgaWYgKCFtX2VuYWJs
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERvbid0IG1vdmUgdGhlIHdpbmRvdyB1bmxl
c3MgdGhlIGN1cnNvciBhY3R1YWxseSBtb3ZlcyBtb3JlIHRoYW4gMTAKLSAgICAvLyBwaXhlbHMu
IFRoaXMgcHJldmVudHMgdXMgZnJvbSBtYWtpbmcgdGhlIHdpbmRvdyBmbGFzaCBkdXJpbmcgbWlu
b3IKLSAgICAvLyBjdXJzb3IgYWRqdXN0bWVudHMuCi0gICAgc3RhdGljIGNvbnN0IGludCB3aW5k
b3dNb3ZlbWVudFRocmVzaG9sZCA9IDEwICogMTA7Ci0gICAgaWYgKGN1cnNvclJlY3QubG9jYXRp
b24oKS5kaXN0YW5jZVNxdWFyZWRUb1BvaW50KG1fbGFzdENhcmVMb2NhdGlvbikgPCB3aW5kb3dN
b3ZlbWVudFRocmVzaG9sZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXN0Q2FyZUxvY2F0
aW9uID0gY3Vyc29yUmVjdC5sb2NhdGlvbigpOwotICAgIEludFJlY3QgdHJhbnNsYXRlZFJlY3Qg
PSBjdXJzb3JSZWN0OwotCi0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIGd0a193
aWRnZXRfZ2V0X2FsbG9jYXRpb24obV9wYWdlLT52aWV3V2lkZ2V0KCksICZhbGxvY2F0aW9uKTsK
LSAgICB0cmFuc2xhdGVkUmVjdC5tb3ZlKGFsbG9jYXRpb24ueCwgYWxsb2NhdGlvbi55KTsKLQot
ICAgIEdka1JlY3RhbmdsZSBnZGtDdXJzb3JSZWN0ID0gdHJhbnNsYXRlZFJlY3Q7Ci0gICAgZ3Rr
X2ltX2NvbnRleHRfc2V0X2N1cnNvcl9sb2NhdGlvbihtX2NvbnRleHQuZ2V0KCksICZnZGtDdXJz
b3JSZWN0KTsKLX0KLQotdm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlS2V5Ym9hcmRFdmVu
dChHZGtFdmVudEtleSogZXZlbnQsIGNvbnN0IFN0cmluZyYgc2ltcGxlU3RyaW5nLCBFdmVudEZh
a2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCi17Ci0jaWYgRU5BQkxFKEFQSV9URVNUUykKLSAgICBp
ZiAobV90ZXN0aW5nTW9kZSkgewotICAgICAgICBsb2dIYW5kbGVLZXlib2FyZEV2ZW50Rm9yVGVz
dGluZyhldmVudCwgc2ltcGxlU3RyaW5nLCBmYWtlZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIGlmIChtX2ZpbHRlcktleUV2ZW50Q29tcGxldGlvbkhhbmRsZXIpIHsK
LSAgICAgICAgbV9maWx0ZXJLZXlFdmVudENvbXBsZXRpb25IYW5kbGVyKHNpbXBsZVN0cmluZywg
RXZlbnRIYW5kbGVkQnlJbnB1dE1ldGhvZDo6Tm8sIGZha2VkKTsKLSAgICAgICAgbV9maWx0ZXJL
ZXlFdmVudENvbXBsZXRpb25IYW5kbGVyID0gbnVsbHB0cjsKLSAgICB9IGVsc2UgewotICAgICAg
ICBhdXRvIGZha2VkRm9yQ29tcG9zaXRpb24gPSBmYWtlZCA9PSBJbnB1dE1ldGhvZEZpbHRlcjo6
RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMgPyBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpG
YWtlZEZvckNvbXBvc2l0aW9uOjpZZXMgOiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpGYWtlZEZv
ckNvbXBvc2l0aW9uOjpObzsKLSAgICAgICAgbV9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwg
c2ltcGxlU3RyaW5nLCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpIYW5kbGVkQnlJbnB1dE1ldGhv
ZDo6Tm8sIGZha2VkRm9yQ29tcG9zaXRpb24sIFZlY3RvcjxTdHJpbmc+KCkpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9z
aXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiBldmVudCwgUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9T
ZW5kLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCi17Ci0jaWYgRU5BQkxFKEFQSV9U
RVNUUykKLSAgICBpZiAobV90ZXN0aW5nTW9kZSkgewotICAgICAgICBsb2dIYW5kbGVLZXlib2Fy
ZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0c0ZvclRlc3RpbmcoZXZlbnQsIHJlc3VsdHNUb1Nl
bmQsIGZha2VkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKG1f
ZmlsdGVyS2V5RXZlbnRDb21wbGV0aW9uSGFuZGxlcikgewotICAgICAgICBtX2ZpbHRlcktleUV2
ZW50Q29tcGxldGlvbkhhbmRsZXIoeyB9LCBFdmVudEhhbmRsZWRCeUlucHV0TWV0aG9kOjpZZXMs
IGZha2VkKTsKLSAgICAgICAgbV9maWx0ZXJLZXlFdmVudENvbXBsZXRpb25IYW5kbGVyID0gbnVs
bHB0cjsKLSAgICB9IGVsc2UgewotICAgICAgICBhdXRvIGZha2VkRm9yQ29tcG9zaXRpb24gPSBm
YWtlZCA9PSBJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMg
PyBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMgOiBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50OjpGYWtlZEZvckNvbXBvc2l0aW9uOjpObzsKLSAgICAgICAgbV9w
YWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQocmVpbnRlcnBy
ZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgeyB9LCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpI
YW5kbGVkQnlJbnB1dE1ldGhvZDo6WWVzLCBmYWtlZEZvckNvbXBvc2l0aW9uLCBWZWN0b3I8U3Ry
aW5nPigpKSk7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbiAm
JiAhbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgbV9wYWdlLT5jb25m
aXJtQ29tcG9zaXRpb24obV9jb25maXJtZWRDb21wb3NpdGlvbik7Ci0KLSAgICBpZiAocmVzdWx0
c1RvU2VuZCAmIFByZWVkaXQgJiYgIW1fcHJlZWRpdC5pc051bGwoKSkgewotICAgICAgICBtX3Bh
Z2UtPnNldENvbXBvc2l0aW9uKG1fcHJlZWRpdCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5l
PiB7IENvbXBvc2l0aW9uVW5kZXJsaW5lKDAsIG1fcHJlZWRpdC5sZW5ndGgoKSwgQ29tcG9zaXRp
b25VbmRlcmxpbmVDb2xvcjo6VGV4dENvbG9yLCBDb2xvcihDb2xvcjo6YmxhY2spLCBmYWxzZSkg
fSwKLSAgICAgICAgICAgIEVkaXRpbmdSYW5nZShtX2N1cnNvck9mZnNldCwgMSkpOwotICAgIH0K
LX0KLQotdm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6ZmlsdGVyS2V5RXZlbnQoR2RrRXZlbnRLZXkq
IGV2ZW50LCBGaWx0ZXJLZXlFdmVudENvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRs
ZXIpCi17Ci0jaWYgRU5BQkxFKEFQSV9URVNUUykKLSAgICBBU1NFUlQobV9wYWdlIHx8IG1fdGVz
dGluZ01vZGUpOwotI2Vsc2UKLSAgICBBU1NFUlQobV9wYWdlKTsKLSNlbmRpZgotICAgIG1fZmls
dGVyS2V5RXZlbnRDb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
OwotICAgIGlmICghbV9lbmFibGVkKSB7Ci0gICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZl
bnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9wcmVlZGl0Q2hhbmdlZCA9IGZh
bHNlOwotICAgIG1fZmlsdGVyaW5nS2V5RXZlbnQgPSB0cnVlOwotCi0gICAgdW5zaWduZWQgbGFz
dEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9IG1fbGFzdEZpbHRlcmVkS2V5UHJl
c3NDb2RlV2l0aE5vUmVzdWx0czsKLSAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhO
b1Jlc3VsdHMgPSBHREtfS0VZX1ZvaWRTeW1ib2w7Ci0KLSAgICBib29sIGZpbHRlcmVkID0gZ3Rr
X2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNzKG1fY29udGV4dC5nZXQoKSwgZXZlbnQpOwotICAg
IG1fZmlsdGVyaW5nS2V5RXZlbnQgPSBmYWxzZTsKLQotICAgIGJvb2wganVzdFNlbnRGYWtlS2V5
VXAgPSBtX2p1c3RTZW50RmFrZUtleVVwOwotICAgIG1fanVzdFNlbnRGYWtlS2V5VXAgPSBmYWxz
ZTsKLSAgICBndWludCBrZXl2YWw7Ci0gICAgZ2RrX2V2ZW50X2dldF9rZXl2YWwocmVpbnRlcnBy
ZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJmtleXZhbCk7Ci0gICAgR2RrRXZlbnRUeXBlIHR5
cGUgPSBnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+
KGV2ZW50KSk7Ci0KLSAgICBpZiAoanVzdFNlbnRGYWtlS2V5VXAgJiYgdHlwZSA9PSBHREtfS0VZ
X1JFTEVBU0UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNpbXBsZSBpbnB1dCBtZXRob2Rz
IHdvcmsgc3VjaCB0aGF0IGV2ZW4gbm9ybWFsIGtleXN0cm9rZXMgZmlyZSB0aGUKLSAgICAvLyBj
b21taXQgc2lnbmFsLiBXZSBkZXRlY3QgdGhvc2Ugc2l0dWF0aW9ucyBhbmQgdHJlYXQgdGhlbSBh
cyBub3JtYWwKLSAgICAvLyBrZXkgZXZlbnRzLCBzdXBwbHlpbmcgdGhlIGNvbW1pdCBzdHJpbmcg
YXMgdGhlIGtleSBjaGFyYWN0ZXIuCi0gICAgaWYgKGZpbHRlcmVkICYmICFtX2NvbXBvc2luZ1Rl
eHRDdXJyZW50bHkgJiYgIW1fcHJlZWRpdENoYW5nZWQgJiYgbV9jb25maXJtZWRDb21wb3NpdGlv
bi5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQsIG1f
Y29uZmlybWVkQ29tcG9zaXRpb24pOwotICAgICAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0g
U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZmlsdGVyZWQgJiYg
dHlwZSA9PSBHREtfS0VZX1BSRVNTKSB7Ci0gICAgICAgIGlmICghbV9wcmVlZGl0Q2hhbmdlZCAm
JiBtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBtX2NvbXBv
c2luZ1RleHRDdXJyZW50bHkgPSB0cnVlOwotICAgICAgICAgICAgbV9sYXN0RmlsdGVyZWRLZXlQ
cmVzc0NvZGVXaXRoTm9SZXN1bHRzID0ga2V5dmFsOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudFdpdGhDb21wb3NpdGlvblJlc3Vs
dHMoZXZlbnQpOwotICAgICAgICBpZiAoIW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKLSAgICAg
ICAgICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgcHJldmlvdXNseSBmaWx0ZXJlZCBh
IGtleSBwcmVzcyBldmVudCBhbmQgaXQgeWllbGRlZCBubyByZXN1bHRzLiBTdXBwcmVzcwotICAg
IC8vIHRoZSBjb3JyZXNwb25kaW5nIGtleSByZWxlYXNlIGV2ZW50IHRvIGF2b2lkIGNvbmZ1c2lu
ZyB0aGUgd2ViIGNvbnRlbnQuCi0gICAgaWYgKHR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFICYmIGxh
c3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPT0ga2V5dmFsKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IGEga2V5c3Ryb2tlIHdhcyBlaXRoZXI6Ci0g
ICAgLy8gMS4gVW5maWx0ZXJlZAotICAgIC8vIDIuIEEgZmlsdGVyZWQga2V5dXAgZXZlbnQuIEFz
IHRoZSBJTUUgY29kZSBpbiBFZGl0b3JDbGllbnQuaCBkb2Vzbid0Ci0gICAgLy8gICAgZXZlciBs
b29rIGF0IGtleXVwIGV2ZW50cywgd2Ugc2VuZCBhbnkgY29tcG9zaXRpb24gcmVzdWx0cyBiZWZv
cmUKLSAgICAvLyAgICB0aGUga2V5IGV2ZW50LgotICAgIC8vIEJvdGggbWlnaHQgaGF2ZSBjb21w
b3NpdGlvbiByZXN1bHRzIG9yIG5vdC4KLSAgICAvLwotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRv
IHNlbmQgdGhlIGNvbXBvc2l0aW9uIHJlc3VsdHMgYmVmb3JlIHRoZSBldmVudAotICAgIC8vIGJl
Y2F1c2Ugc29tZSBJTSBtb2R1bGVzIG9wZXJhdGUgdGhhdCB3YXkuIEZvciBleGFtcGxlICh0YWtl
biBmcm9tCi0gICAgLy8gdGhlIENocm9taXVtIHNvdXJjZSksIHRoZSBsYXRpbi1wb3N0IGlucHV0
IG1ldGhvZCBnaXZlcyB0aGlzIHNlcXVlbmNlCi0gICAgLy8gd2hlbiB5b3UgcHJlc3MgJ2EnIGFu
ZCB0aGVuIGJhY2tzcGFjZToKLSAgICAvLyAgMS4ga2V5ZG93biAnYScgKGZpbHRlcmVkKQotICAg
IC8vICAyLiBwcmVlZGl0IGNoYW5nZWQgdG8gImEiCi0gICAgLy8gIDMuIGtleXVwICdhJyAodW5m
aWx0ZXJlZCkKLSAgICAvLyAgNC4ga2V5ZG93biBCYWNrc3BhY2UgKHVuZmlsdGVyZWQpCi0gICAg
Ly8gIDUuIGNvbW1pdCAiYSIKLSAgICAvLyAgNi4gcHJlZWRpdCBlbmQKLSAgICBpZiAoIW1fY29u
ZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKQotICAgICAgICBjb25maXJtQ29tcG9zaXRpb24o
KTsKLSAgICBpZiAobV9wcmVlZGl0Q2hhbmdlZCkKLSAgICAgICAgdXBkYXRlUHJlZWRpdCgpOwot
ICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQpOwotfQotCi12b2lkIElucHV0TWV0aG9kRmls
dGVyOjpjb25maXJtQ29tcG9zaXRpb24oKQotewotI2lmIEVOQUJMRShBUElfVEVTVFMpCi0gICAg
aWYgKG1fdGVzdGluZ01vZGUpIHsKLSAgICAgICAgbG9nQ29uZmlybUNvbXBvc2l0aW9uRm9yVGVz
dGluZygpOwotICAgICAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICBtX3BhZ2UtPmNvbmZpcm1Db21wb3NpdGlv
bihtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKLSAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0g
U3RyaW5nKCk7Ci19Ci0KLXZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OnVwZGF0ZVByZWVkaXQoKQot
ewotI2lmIEVOQUJMRShBUElfVEVTVFMpCi0gICAgaWYgKG1fdGVzdGluZ01vZGUpIHsKLSAgICAg
ICAgbG9nU2V0UHJlZWRpdEZvclRlc3RpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl
bmRpZgotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcGFyc2UgdGhlIFBhbmdvQXR0ckxpc3QgdGhh
dCB3ZSBnZXQgZnJvbSB0aGUgSU0gY29udGV4dCBoZXJlLgotICAgIG1fcGFnZS0+c2V0Q29tcG9z
aXRpb24obV9wcmVlZGl0LCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHsgQ29tcG9zaXRp
b25VbmRlcmxpbmUoMCwgbV9wcmVlZGl0Lmxlbmd0aCgpLCBDb21wb3NpdGlvblVuZGVybGluZUNv
bG9yOjpUZXh0Q29sb3IsIENvbG9yKENvbG9yOjpibGFjayksIGZhbHNlKSB9LAotICAgICAgICBF
ZGl0aW5nUmFuZ2UobV9jdXJzb3JPZmZzZXQsIDEpKTsKLSAgICBtX3ByZWVkaXRDaGFuZ2VkID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeUZvY3VzZWRJbigpCi17
Ci0jaWYgRU5BQkxFKEFQSV9URVNUUykKLSAgICBBU1NFUlQobV9wYWdlIHx8IG1fdGVzdGluZ01v
ZGUpOwotI2Vsc2UKLSAgICBBU1NFUlQobV9wYWdlKTsKLSNlbmRpZgotICAgIGlmICghbV9lbmFi
bGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbihtX2Nv
bnRleHQuZ2V0KCkpOwotfQotCi12b2lkIElucHV0TWV0aG9kRmlsdGVyOjpub3RpZnlGb2N1c2Vk
T3V0KCkKLXsKLSNpZiBFTkFCTEUoQVBJX1RFU1RTKQotICAgIEFTU0VSVChtX3BhZ2UgfHwgbV90
ZXN0aW5nTW9kZSk7Ci0jZWxzZQotICAgIEFTU0VSVChtX3BhZ2UpOwotI2VuZGlmCi0gICAgaWYg
KCFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbmZpcm1DdXJyZW50Q29tcG9z
aXRpb24oKTsKLSAgICBjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKTsKLSAgICBndGtfaW1fY29u
dGV4dF9mb2N1c19vdXQobV9jb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBJbnB1dE1ldGhvZEZp
bHRlcjo6bm90aWZ5TW91c2VCdXR0b25QcmVzcygpCi17Ci0jaWYgRU5BQkxFKEFQSV9URVNUUykK
LSAgICBBU1NFUlQobV9wYWdlIHx8IG1fdGVzdGluZ01vZGUpOwotI2Vsc2UKLSAgICBBU1NFUlQo
bV9wYWdlKTsKLSNlbmRpZgotCi0gICAgLy8gQ29uZmlybWluZyB0aGUgY29tcG9zaXRpb24gbWF5
IHRyaWdnZXIgYSBzZWxlY3Rpb24gY2hhbmdlLCB3aGljaAotICAgIC8vIG1pZ2h0IHRyaWdnZXIg
ZnVydGhlciB1bndhbnRlZCBhY3Rpb25zIG9uIHRoZSBjb250ZXh0LCBzbyB3ZSBwcmV2ZW50Ci0g
ICAgLy8gdGhhdCBieSBzZXR0aW5nIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSB0byBmYWxzZS4K
LSAgICBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7Ci0gICAgY2FuY2VsQ29udGV4dENvbXBv
c2l0aW9uKCk7Ci19Ci0KLXZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1DdXJyZW50Q29t
cG9zaXRpb24oKQotewotICAgIGlmICghbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5KQotICAgICAg
ICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQVBJX1RFU1RTKQotICAgIGlmIChtX3Rlc3RpbmdNb2Rl
KSB7Ci0gICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBtX3BhZ2UtPmNvbmZpcm1Db21wb3NpdGlvbih7
IH0pOwotICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotfQotCi12b2lkIElu
cHV0TWV0aG9kRmlsdGVyOjpjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKQotewotICAgIG1fcHJl
dmVudE5leHRDb21taXQgPSAhbV9wcmVlZGl0LmlzRW1wdHkoKTsKLQotICAgIGd0a19pbV9jb250
ZXh0X3Jlc2V0KG1fY29udGV4dC5nZXQoKSk7Ci0KLSAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50
bHkgPSBmYWxzZTsKLSAgICBtX2p1c3RTZW50RmFrZUtleVVwID0gZmFsc2U7Ci0gICAgbV9wcmVl
ZGl0ID0gU3RyaW5nKCk7Ci0gICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwot
fQotCi12b2lkIElucHV0TWV0aG9kRmlsdGVyOjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0
aEZha2VLZXlFdmVudHMoUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9TZW5kKQotewotICAgIC8vIFRo
ZSBXaW5kb3dzIGNvbXBvc2l0aW9uIGtleSBldmVudCBjb2RlIGlzIDI5OSBvciBWS19QUk9DRVNT
S0VZLiBXZSBuZWVkIHRvCi0gICAgLy8gZW1pdCB0aGlzIGNvZGUgZm9yIHdlYiBjb21wYXRpYmls
aXR5IHJlYXNvbnMgd2hlbiBrZXkgZXZlbnRzIHRyaWdnZXIKLSAgICAvLyBjb21wb3NpdGlvbiBy
ZXN1bHRzLiBHREsgZG9lc24ndCBoYXZlIGFuIGVxdWl2YWxlbnQsIHNvIHdlIHNlbmQgVm9pZFN5
bWJvbAotICAgIC8vIGhlcmUgdG8gV2ViQ29yZS4gUGxhdGZvcm1LZXlFdmVudCBrbm93cyB0byBj
b252ZXJ0IHRoaXMgY29kZSBpbnRvCi0gICAgLy8gVktfUFJPQ0VTU0tFWS4KLSAgICBzdGF0aWMg
Y29uc3QgaW50IGNvbXBvc2l0aW9uRXZlbnRLZXlDb2RlID0gR0RLX0tFWV9Wb2lkU3ltYm9sOwot
Ci0gICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gZXZlbnQoZ2RrX2V2ZW50X25ldyhHREtfS0VZX1BS
RVNTKSk7Ci0gICAgZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVu
dC0+a2V5LmtleXZhbCA9IGNvbXBvc2l0aW9uRXZlbnRLZXlDb2RlOwotICAgIGhhbmRsZUtleWJv
YXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKCZldmVudC0+a2V5LCByZXN1bHRzVG9TZW5k
LCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb246Olllcyk7Ci0KLSAgICBtX2NvbmZpcm1lZENvbXBv
c2l0aW9uID0gU3RyaW5nKCk7Ci0gICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbikK
LSAgICAgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0KLSAgICBldmVudC0+
dHlwZSA9IEdES19LRVlfUkVMRUFTRTsKLSAgICBoYW5kbGVLZXlib2FyZEV2ZW50KCZldmVudC0+
a2V5LCBTdHJpbmcoKSwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMpOwotICAgIG1fanVz
dFNlbnRGYWtlS2V5VXAgPSB0cnVlOwotfQotCi12b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5k
bGVDb21taXQoY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcpCi17Ci0gICAgaWYgKG1fcHJl
dmVudE5leHRDb21taXQpIHsKLSAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2VuYWJsZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24uYXBwZW5kKFN0cmluZzo6ZnJvbVVU
RjgoY29tcG9zaXRpb25TdHJpbmcpKTsKLQotICAgIC8vIElmIHRoZSBjb21taXQgd2FzIHRyaWdn
ZXJlZCBvdXRzaWRlIG9mIGEga2V5IGV2ZW50LCBqdXN0IHNlbmQKLSAgICAvLyB0aGUgSU1FIGV2
ZW50IG5vdy4gSWYgd2UgYXJlIGhhbmRsaW5nIGEga2V5IGV2ZW50LCB3ZSdsbCBkZWNpZGUKLSAg
ICAvLyBsYXRlciBob3cgdG8gaGFuZGxlIHRoaXMuCi0gICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2
ZW50KQotICAgICAgICBzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMo
Q29tcG9zaXRpb24pOwotfQotCi12b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0
U3RhcnQoKQotewotICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0IHx8ICFtX2VuYWJsZWQpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX3ByZWVkaXRDaGFuZ2VkID0gdHJ1ZTsKLSAgICBtX3ByZWVk
aXQgPSBlbXB0eVN0cmluZygpOwotfQotCi12b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQ
cmVlZGl0Q2hhbmdlZCgpCi17Ci0gICAgaWYgKCFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IG5ld1ByZWVkaXQ7Ci0gICAgZ3RrX2ltX2NvbnRl
eHRfZ2V0X3ByZWVkaXRfc3RyaW5nKG1fY29udGV4dC5nZXQoKSwgJm5ld1ByZWVkaXQub3V0UHRy
KCksIG51bGxwdHIsICZtX2N1cnNvck9mZnNldCk7Ci0KLSAgICBpZiAobV9wcmV2ZW50TmV4dENv
bW1pdCkgewotICAgICAgICBpZiAoc3RybGVuKG5ld1ByZWVkaXQuZ2V0KCkpID4gMCkKLSAgICAg
ICAgICAgIG1fcHJldmVudE5leHRDb21taXQgPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcHJlZWRpdCA9IFN0cmluZzo6ZnJvbVVURjgo
bmV3UHJlZWRpdC5nZXQoKSk7Ci0gICAgbV9jdXJzb3JPZmZzZXQgPSBzdGQ6Om1pbihzdGQ6Om1h
eChtX2N1cnNvck9mZnNldCwgMCksIHN0YXRpY19jYXN0PGludD4obV9wcmVlZGl0Lmxlbmd0aCgp
KSk7Ci0KLSAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSAhbV9wcmVlZGl0LmlzRW1wdHko
KTsKLSAgICBtX3ByZWVkaXRDaGFuZ2VkID0gdHJ1ZTsKLQotICAgIGlmICghbV9maWx0ZXJpbmdL
ZXlFdmVudCkKLSAgICAgICAgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZl
bnRzKFByZWVkaXQpOwotfQotCi12b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0
RW5kKCkKLXsKLSAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3ByZWVkaXQgPSBTdHJpbmcoKTsKLSAgICBtX2N1cnNvck9m
ZnNldCA9IDA7Ci0gICAgbV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fZmls
dGVyaW5nS2V5RXZlbnQpCi0gICAgICAgIHVwZGF0ZVByZWVkaXQoKTsKLX0KLQotI2lmIEVOQUJM
RShBUElfVEVTVFMpCi12b2lkIElucHV0TWV0aG9kRmlsdGVyOjpsb2dIYW5kbGVLZXlib2FyZEV2
ZW50Rm9yVGVzdGluZyhHZGtFdmVudEtleSogZXZlbnQsIGNvbnN0IFN0cmluZyYgZXZlbnRTdHJp
bmcsIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiBmYWtlZCkKLXsKLSAgICBndWludCBrZXl2YWw7
Ci0gICAgZ2RrX2V2ZW50X2dldF9rZXl2YWwocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2
ZW50KSwgJmtleXZhbCk7Ci0gICAgY29uc3QgY2hhciogZXZlbnRUeXBlID0gZ2RrX2V2ZW50X2dl
dF9ldmVudF90eXBlKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkpID09IEdES19L
RVlfUkVMRUFTRSA/ICJyZWxlYXNlIiA6ICJwcmVzcyI7Ci0gICAgY29uc3QgY2hhciogZmFrZWRT
dHJpbmcgPSBmYWtlZCA9PSBFdmVudEZha2VkRm9yQ29tcG9zaXRpb246OlllcyA/ICIgKGZha2Vk
KSIgOiAiIjsKLSAgICBpZiAoIWV2ZW50U3RyaW5nLmlzTnVsbCgpKQotICAgICAgICBtX2V2ZW50
cy5hcHBlbmQobWFrZVN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9IiwgZXZlbnRUeXBl
LCAiIGtleWNvZGU9IiwgaGV4KGtleXZhbCksICIgdGV4dD0nIiwgZXZlbnRTdHJpbmcsICdcJycs
IGZha2VkU3RyaW5nKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2V2ZW50cy5hcHBlbmQobWFrZVN0
cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9IiwgZXZlbnRUeXBlLCAiIGtleWNvZGU9Iiwg
aGV4KGtleXZhbCksIGZha2VkU3RyaW5nKSk7Ci19Ci0KLXZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6
OmxvZ0hhbmRsZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzRm9yVGVzdGluZyhH
ZGtFdmVudEtleSogZXZlbnQsIFJlc3VsdHNUb1NlbmQgcmVzdWx0c1RvU2VuZCwgRXZlbnRGYWtl
ZEZvckNvbXBvc2l0aW9uIGZha2VkKQotewotICAgIGd1aW50IGtleXZhbDsKLSAgICBnZGtfZXZl
bnRfZ2V0X2tleXZhbChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAma2V5dmFs
KTsKLSAgICBjb25zdCBjaGFyKiBldmVudFR5cGUgPSBnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUo
cmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSkgPT0gR0RLX0tFWV9SRUxFQVNFID8g
InJlbGVhc2UiIDogInByZXNzIjsKLSAgICBjb25zdCBjaGFyKiBmYWtlZFN0cmluZyA9IGZha2Vk
ID09IEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbjo6WWVzID8gIiAoZmFrZWQpIiA6ICIiOwotICAg
IG1fZXZlbnRzLmFwcGVuZChtYWtlU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25S
ZXN1bHRzIHR5cGU9IiwgZXZlbnRUeXBlLCAiIGtleWNvZGU9IiwgaGV4KGtleXZhbCksIGZha2Vk
U3RyaW5nKSk7Ci0KLSAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9uICYmICFtX2Nv
bmZpcm1lZENvbXBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICBsb2dDb25maXJtQ29tcG9zaXRp
b25Gb3JUZXN0aW5nKCk7Ci0gICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBQcmVlZGl0ICYmICFtX3By
ZWVkaXQuaXNOdWxsKCkpCi0gICAgICAgIGxvZ1NldFByZWVkaXRGb3JUZXN0aW5nKCk7Ci19Ci0K
LXZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OmxvZ0NvbmZpcm1Db21wb3NpdGlvbkZvclRlc3Rpbmco
KQotewotICAgIGlmIChtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAg
bV9ldmVudHMuYXBwZW5kKFN0cmluZygiY29uZmlybUN1cnJlbnRjb21wb3NpdGlvbiIpKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fZXZlbnRzLmFwcGVuZChtYWtlU3RyaW5nKCJjb25maXJtQ29tcG9z
aXRpb24gJyIsIG1fY29uZmlybWVkQ29tcG9zaXRpb24sICdcJycpKTsKLX0KLQotdm9pZCBJbnB1
dE1ldGhvZEZpbHRlcjo6bG9nU2V0UHJlZWRpdEZvclRlc3RpbmcoKQotewotICAgIG1fZXZlbnRz
LmFwcGVuZChtYWtlU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9JyIsIG1fcHJlZWRpdCwgIicgY3Vy
c29yT2Zmc2V0PSIsIG1fY3Vyc29yT2Zmc2V0KSk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQVBJ
X1RFU1RTKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGFmYTY0OTc0YTAyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bi5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdHlwZWRlZiBzdHJ1
Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5OwotdHlwZWRlZiBzdHJ1Y3QgX0d0a0lNQ29udGV4
dCBHdGtJTUNvbnRleHQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KLWNsYXNzIElu
cHV0TWV0aG9kRmlsdGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnB1dE1ldGhvZEZp
bHRlcik7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24g
ewotICAgICAgICBObywKLSAgICAgICAgWWVzCi0gICAgfTsKLSAgICBlbnVtIGNsYXNzIEV2ZW50
SGFuZGxlZEJ5SW5wdXRNZXRob2QgewotICAgICAgICBObywKLSAgICAgICAgWWVzCi0gICAgfTsK
LQotICAgIElucHV0TWV0aG9kRmlsdGVyKCk7Ci0gICAgfklucHV0TWV0aG9kRmlsdGVyKCk7Ci0K
LSAgICBHdGtJTUNvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7IH0KLQotICAgIHZvaWQgc2V0UGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpIHsgbV9wYWdlID0g
cGFnZTsgfQotCi0gICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwotICAgIHZvaWQgc2V0Q3Vyc29y
UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0KLSAgICB1c2luZyBGaWx0ZXJLZXlFdmVu
dENvbXBsZXRpb25IYW5kbGVyID0gRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmLCBFdmVudEhh
bmRsZWRCeUlucHV0TWV0aG9kLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24pPjsKLSAgICB2b2lk
IGZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5KiwgRmlsdGVyS2V5RXZlbnRDb21wbGV0aW9uSGFu
ZGxlciYmID0gbnVsbHB0cik7Ci0gICAgdm9pZCBub3RpZnlGb2N1c2VkSW4oKTsKLSAgICB2b2lk
IG5vdGlmeUZvY3VzZWRPdXQoKTsKLSAgICB2b2lkIG5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKTsK
LQotI2lmIEVOQUJMRShBUElfVEVTVFMpCi0gICAgdm9pZCBzZXRUZXN0aW5nTW9kZShib29sIGVu
YWJsZSkgeyBtX3Rlc3RpbmdNb2RlID0gZW5hYmxlOyB9Ci0gICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGV2ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRzOyB9Ci0jZW5kaWYKLQotcHJpdmF0
ZToKLSAgICBlbnVtIFJlc3VsdHNUb1NlbmQgewotICAgICAgICBQcmVlZGl0ID0gMSA8PCAxLAot
ICAgICAgICBDb21wb3NpdGlvbiA9IDEgPDwgMiwKLSAgICAgICAgUHJlZWRpdEFuZENvbXBvc2l0
aW9uID0gUHJlZWRpdCB8IENvbXBvc2l0aW9uCi0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIGhh
bmRsZUNvbW1pdENhbGxiYWNrKElucHV0TWV0aG9kRmlsdGVyKiwgY29uc3QgY2hhciogY29tcG9z
aXRpb25TdHJpbmcpOwotICAgIHN0YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNr
KElucHV0TWV0aG9kRmlsdGVyKik7Ci0gICAgc3RhdGljIHZvaWQgaGFuZGxlUHJlZWRpdENoYW5n
ZWRDYWxsYmFjayhJbnB1dE1ldGhvZEZpbHRlciopOwotICAgIHN0YXRpYyB2b2lkIGhhbmRsZVBy
ZWVkaXRFbmRDYWxsYmFjayhJbnB1dE1ldGhvZEZpbHRlciopOwotCi0gICAgdm9pZCBoYW5kbGVD
b21taXQoY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcpOwotICAgIHZvaWQgaGFuZGxlUHJl
ZWRpdENoYW5nZWQoKTsKLSAgICB2b2lkIGhhbmRsZVByZWVkaXRTdGFydCgpOwotICAgIHZvaWQg
aGFuZGxlUHJlZWRpdEVuZCgpOwotCi0gICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEdka0V2
ZW50S2V5KiwgY29uc3QgU3RyaW5nJiBldmVudFN0cmluZyA9IFN0cmluZygpLCBFdmVudEZha2Vk
Rm9yQ29tcG9zaXRpb24gPSBFdmVudEZha2VkRm9yQ29tcG9zaXRpb246Ok5vKTsKLSAgICB2b2lk
IGhhbmRsZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5Kiwg
UmVzdWx0c1RvU2VuZCA9IFByZWVkaXRBbmRDb21wb3NpdGlvbiwgRXZlbnRGYWtlZEZvckNvbXBv
c2l0aW9uID0gRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpObyk7Ci0KLSAgICB2b2lkIHNlbmRD
b21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhSZXN1bHRzVG9TZW5kKTsKLSAg
ICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgIHZvaWQgdXBkYXRlUHJlZWRpdCgpOwot
ICAgIHZvaWQgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpOwotICAgIHZvaWQgY2FuY2VsQ29u
dGV4dENvbXBvc2l0aW9uKCk7Ci0KLSAgICBib29sIGlzVmlld0ZvY3VzZWQoKSBjb25zdDsKLQot
I2lmIEVOQUJMRShBUElfVEVTVFMpCi0gICAgdm9pZCBsb2dIYW5kbGVLZXlib2FyZEV2ZW50Rm9y
VGVzdGluZyhHZGtFdmVudEtleSosIGNvbnN0IFN0cmluZyYsIEV2ZW50RmFrZWRGb3JDb21wb3Np
dGlvbik7Ci0gICAgdm9pZCBsb2dIYW5kbGVLZXlib2FyZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVz
dWx0c0ZvclRlc3RpbmcoR2RrRXZlbnRLZXkqLCBSZXN1bHRzVG9TZW5kLCBFdmVudEZha2VkRm9y
Q29tcG9zaXRpb24pOwotICAgIHZvaWQgbG9nQ29uZmlybUNvbXBvc2l0aW9uRm9yVGVzdGluZygp
OwotICAgIHZvaWQgbG9nU2V0UHJlZWRpdEZvclRlc3RpbmcoKTsKLSNlbmRpZgotCi0gICAgR1Jl
ZlB0cjxHdGtJTUNvbnRleHQ+IG1fY29udGV4dDsKLSAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsK
LSAgICB1bnNpZ25lZCBtX2VuYWJsZWQgOiAxOwotICAgIHVuc2lnbmVkIG1fY29tcG9zaW5nVGV4
dEN1cnJlbnRseSA6IDE7Ci0gICAgdW5zaWduZWQgbV9maWx0ZXJpbmdLZXlFdmVudCA6IDE7Ci0g
ICAgdW5zaWduZWQgbV9wcmVlZGl0Q2hhbmdlZCA6IDE7Ci0gICAgdW5zaWduZWQgbV9wcmV2ZW50
TmV4dENvbW1pdCA6IDE7Ci0gICAgdW5zaWduZWQgbV9qdXN0U2VudEZha2VLZXlVcCA6IDE7Ci0g
ICAgaW50IG1fY3Vyc29yT2Zmc2V0OwotICAgIHVuc2lnbmVkIG1fbGFzdEZpbHRlcmVkS2V5UHJl
c3NDb2RlV2l0aE5vUmVzdWx0czsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RDYXJlTG9j
YXRpb247Ci0gICAgU3RyaW5nIG1fY29uZmlybWVkQ29tcG9zaXRpb247Ci0gICAgU3RyaW5nIG1f
cHJlZWRpdDsKLQotICAgIEZpbHRlcktleUV2ZW50Q29tcGxldGlvbkhhbmRsZXIgbV9maWx0ZXJL
ZXlFdmVudENvbXBsZXRpb25IYW5kbGVyOwotCi0jaWYgRU5BQkxFKEFQSV9URVNUUykKLSAgICBi
b29sIG1fdGVzdGluZ01vZGU7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9ldmVudHM7Ci0jZW5kaWYK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy93cGUvV2ViUGFnZVByb3h5V1BFLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dwZS9XZWJQYWdlUHJveHlXUEUuY3BwCmluZGV4IDZkMWI3YzVmN2E3Li43MThmMjEyZDE0
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd3BlL1dlYlBhZ2VQcm94eVdQ
RS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd3BlL1dlYlBhZ2VQcm94eVdQRS5j
cHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKIAorI2luY2x1ZGUgIkVkaXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiUGFnZUNs
aWVudEltcGwuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgpAQCAtNzcsOSArNzgsMTEgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpwbGF0Zm9ybVJlbW92ZVJlY2VudFNlYXJjaGVzKFdhbGxUaW1lKQogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVFZGl0b3JTdGF0ZShj
b25zdCBFZGl0b3JTdGF0ZSYpCit2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlRWRpdG9yU3RhdGUo
Y29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvclN0YXRlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgbV9lZGl0b3JTdGF0ZSA9IGVkaXRvclN0YXRlOworICAgIGlmICghZWRpdG9yU3RhdGUu
c2hvdWxkSWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKKyAgICAgICAgcGFnZUNsaWVudCgpLnNlbGVj
dGlvbkRpZENoYW5nZSgpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZE1lc3NhZ2VUb1dl
YlZpZXdXaXRoUmVwbHkoVXNlck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFVzZXJNZXNzYWdlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtOTIsNCArOTUsOSBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZE1lc3NhZ2VUb1dlYlZpZXcoVXNlck1lc3NhZ2UmJiBt
ZXNzYWdlKQogICAgIHNlbmRNZXNzYWdlVG9XZWJWaWV3V2l0aFJlcGx5KFdURk1vdmUobWVzc2Fn
ZSksIFtdKFVzZXJNZXNzYWdlJiYpIHsgfSk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRJ
bnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBzdGF0aWNfY2FzdDxQYWdlQ2xp
ZW50SW1wbCY+KHBhZ2VDbGllbnQoKSkuc2V0SW5wdXRNZXRob2RTdGF0ZShlbmFibGVkKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IDI3NDYy
MDU4MmMyLi5iNDJlNWIzYTkzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTYwNiw3ICs2
MDYsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFNldElucHV0TWV0aG9kU3RhdGUoKQog
CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6c2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQp
CiB7Ci0jaWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BF
KQogICAgIG1fcGFnZS0+c2V0SW5wdXRNZXRob2RTdGF0ZShlbmFibGVkKTsKICNlbHNlCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC93cGUvV2ViRWRpdG9yQ2xpZW50V1BFLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93cGUvV2ViRWRpdG9yQ2xpZW50V1BFLmNwcAppbmRl
eCAxNjVkZWU0YTU2Zi4uMzFkMjNlNzc5MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93cGUvV2ViRWRpdG9yQ2xpZW50V1BFLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd3BlL1dlYkVkaXRvckNsaWVu
dFdQRS5jcHAKQEAgLTIzNyw4ICsyMzcsOCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxl
S2V5Ym9hcmRFdmVudChXZWJDb3JlOjpLZXlib2FyZEV2ZW50JiBldmVudCkKIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oV2ViQ29yZTo6S2V5Ym9hcmRFdmVu
dCYgZXZlbnQpCiB7CiAgICAgYXV0byogcGxhdGZvcm1FdmVudCA9IGV2ZW50LnVuZGVybHlpbmdQ
bGF0Zm9ybUV2ZW50KCk7Ci0gICAgaWYgKHBsYXRmb3JtRXZlbnQgJiYgcGxhdGZvcm1FdmVudC0+
d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkgPT0gVktfUFJPQ0VTU0tFWSkKLSAgICAgICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKKyAgICBpZiAocGxhdGZvcm1FdmVudCAmJiBwbGF0Zm9ybUV2ZW50
LT5oYW5kbGVkQnlJbnB1dE1ldGhvZCgpKQorICAgICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZDIzZTAwYzg5NmQuLmMxOGNhMzU4MjZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTI5
NSw3ICs1Mjk1LDcgQEAgdm9pZCBXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb25Bc3luYygpCiAK
ICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKIAotI2lmIFBMQVRGT1JNKEdUSykKKyNpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKIHN0YXRpYyBGcmFtZSogdGFyZ2V0RnJhbWVGb3JF
ZGl0aW5nKFdlYlBhZ2UmIHBhZ2UpCiB7CiAgICAgRnJhbWUmIHRhcmdldEZyYW1lID0gcGFnZS5j
b3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBmNTMwYzdkNGFiZS4u
MzRmYWU2N2ExMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgKQEAgLTc3MywxMCArNzczLDEyIEBAIHB1YmxpYzoKIAogICAgIFNhbmRib3hFeHRlbnNpb25U
cmFja2VyJiBzYW5kYm94RXh0ZW5zaW9uVHJhY2tlcigpIHsgcmV0dXJuIG1fc2FuZGJveEV4dGVu
c2lvblRyYWNrZXI7IH0KIAotI2lmIFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdQRSkKICAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mLCBjb25zdCBFZGl0aW5n
UmFuZ2UmIHNlbGVjdGlvblJhbmdlKTsKICAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25z
dCBTdHJpbmcmIHRleHQpOworI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCBj
b2xsYXBzZVNlbGVjdGlvbkluRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyKTsKICAgICB2
b2lkIHNob3dFbW9qaVBpY2tlcihXZWJDb3JlOjpGcmFtZSYpOwogCkBAIC0xMDgwLDcgKzEwODIs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhj
b25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHksIFJlZlB0
cjxBUEk6Ok9iamVjdD4mIHJldHVybkRhdGEpOwogICAgIHZvaWQgcG9zdE1lc3NhZ2VJZ25vcmlu
Z0Z1bGx5U3luY2hyb25vdXNNb2RlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIEFQSTo6T2Jq
ZWN0KiBtZXNzYWdlQm9keSk7CiAKLSNpZiBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShXUEUpCiAgICAgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wpOwog
I2VuZGlmCiAKQEAgLTE5NTMsNyArMTk1NSw3IEBAIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBF
ZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlIHsgTm8sIFllcywgVW5zZXQgfTsKICAgICBtdXRh
YmxlIEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFibGUgbV9sYXN0RWRpdG9yU3RhdGVXYXNDb250
ZW50RWRpdGFibGUgeyBFZGl0b3JTdGF0ZUlzQ29udGVudEVkaXRhYmxlOjpVbnNldCB9OwogCi0j
aWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAg
IGJvb2wgbV9pbnB1dE1ldGhvZEVuYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmlu
ZGV4IDBmMmMzYWNmMWFiLi41NGU4ZTE2MTcwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC00MTAsMTAgKzQxMCwx
MiBAQCBHZW5lcmF0ZVN5bnRoZXRpY0VkaXRpbmdDb21tYW5kKGVudW06dWludDhfdCBXZWJLaXQ6
OlN5bnRoZXRpY0VkaXRpbmdDb21tYW5kVHlwZQogICAgIFNldENhblJ1bkJlZm9yZVVubG9hZENv
bmZpcm1QYW5lbChib29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCkKICAgICBTZXRD
YW5SdW5Nb2RhbChib29sIGNhblJ1bk1vZGFsKQogCi0jaWYgUExBVEZPUk0oR1RLKQorI2lmIFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAgIFNldENvbXBvc2l0aW9uKFN0cmluZyB0
ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHN0
cnVjdCBXZWJLaXQ6OkVkaXRpbmdSYW5nZSBzZWxlY3Rpb25SYW5nZSkKICAgICBDb25maXJtQ29t
cG9zaXRpb24oU3RyaW5nIHRleHQpCisjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKICAgICBD
b2xsYXBzZVNlbGVjdGlvbkluRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQp
CiAKICAgICBHZXRDZW50ZXJGb3Jab29tR2VzdHVyZShXZWJDb3JlOjpJbnRQb2ludCBjZW50ZXJJ
blZpZXdDb29yZGluYXRlcykgLT4gKFdlYkNvcmU6OkludFBvaW50IGNlbnRlcikgU3luY2hyb25v
dXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dwZS9XZWJQ
YWdlV1BFLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dwZS9XZWJQYWdl
V1BFLmNwcAppbmRleCAxMjRkZTk0ZjAzYi4uNGFjYTcwYjMwYjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dwZS9XZWJQYWdlV1BFLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93cGUvV2ViUGFnZVdQRS5jcHAKQEAgLTI2LDEx
ICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKIAor
I2luY2x1ZGUgIkVkaXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViUGFnZUFjY2Vzc2li
aWxpdHlPYmplY3QuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQ
YWdlUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzS2V5cy5oIgogI2lu
Y2x1ZGUgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5o
PgpAQCAtNTksOSArNjMsMTUgQEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybURldGFjaCgpCiB7CiB9
CiAKLXZvaWQgV2ViUGFnZTo6cGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYsIEVkaXRvclN0YXRl
JiwgSW5jbHVkZVBvc3RMYXlvdXREYXRhSGludCkgY29uc3QKK3ZvaWQgV2ViUGFnZTo6cGxhdGZv
cm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQsIEluY2x1ZGVQ
b3N0TGF5b3V0RGF0YUhpbnQgc2hvdWxkSW5jbHVkZVBvc3RMYXlvdXREYXRhKSBjb25zdAogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKHNob3VsZEluY2x1ZGVQb3N0TGF5b3V0RGF0
YSA9PSBJbmNsdWRlUG9zdExheW91dERhdGFIaW50OjpObyB8fCAhZnJhbWUudmlldygpIHx8IGZy
YW1lLnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkgeworICAgICAgICByZXN1bHQuaXNNaXNzaW5nUG9z
dExheW91dERhdGEgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYg
cG9zdExheW91dERhdGEgPSByZXN1bHQucG9zdExheW91dERhdGEoKTsKKyAgICBwb3N0TGF5b3V0
RGF0YS5jYXJldFJlY3RBdFN0YXJ0ID0gZnJhbWUuc2VsZWN0aW9uKCkuYWJzb2x1dGVDYXJldEJv
dW5kcygpOwogfQogCiBib29sIFdlYlBhZ2U6OnBlcmZvcm1EZWZhdWx0QmVoYXZpb3JGb3JLZXlF
dmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JikKQEAgLTgyLDQgKzkyLDEzIEBAIFN0cmluZyBX
ZWJQYWdlOjpwbGF0Zm9ybVVzZXJBZ2VudChjb25zdCBVUkwmKSBjb25zdAogICAgIHJldHVybiBT
dHJpbmcoKTsKIH0KIAordm9pZCBXZWJQYWdlOjpzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBpZiAobV9pbnB1dE1ldGhvZEVuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9pbnB1dE1ldGhvZEVuYWJsZWQgPSBlbmFibGVkOworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0SW5wdXRNZXRob2RTdGF0ZShlbmFibGVkKSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDAxYzUzMDU1MTEyLi5iYWI4ZTA3MjA5NiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2
IEBACisyMDE5LTExLTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXVtXUEVdIEFkZCBpbml0aWFsIEFQSSBmb3IgaW5wdXQgbWV0aG9k
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ2NzkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUg
dGhlIG9sZCB1bml0IHRlc3RzIGZvciBJbnB1dE1ldGhvZEZpbHRlciBhbmQgYWRkIG5ldyB0ZXN0
cyB1c2luZyB0aGUgbmV3IEFQSS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1H
VEsuY21ha2U6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvZ3RrL0lucHV0
TWV0aG9kRmlsdGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEdMaWIvVGVzdElucHV0TWV0aG9kQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAo
d2Via2l0SW5wdXRNZXRob2RDb250ZXh0TW9ja0ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdElu
cHV0TWV0aG9kQ29udGV4dE1vY2tHZXRQcmVlZGl0KToKKyAgICAgICAgKHdlYmtpdElucHV0TWV0
aG9kQ29udGV4dE1vY2tGaWx0ZXJLZXlFdmVudCk6CisgICAgICAgICh3ZWJraXRJbnB1dE1ldGhv
ZENvbnRleHRNb2NrTm90aWZ5Rm9jdXNJbik6CisgICAgICAgICh3ZWJraXRJbnB1dE1ldGhvZENv
bnRleHRNb2NrTm90aWZ5Rm9jdXNPdXQpOgorICAgICAgICAod2Via2l0SW5wdXRNZXRob2RDb250
ZXh0TW9ja1Jlc2V0KToKKyAgICAgICAgKHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9tb2Nr
X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X21vY2tf
aW5pdCk6CisgICAgICAgICh0ZXN0V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0U2ltcGxlKToKKyAg
ICAgICAgKHRlc3RXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRTZXF1ZW5jZSk6CisgICAgICAgICh0
ZXN0V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0SW52YWxpZFNlcXVlbmNlKToKKyAgICAgICAgKHRl
c3RXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRDYW5jZWxTZXF1ZW5jZSk6CisgICAgICAgICh0ZXN0
V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0UmVzZXQpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAg
ICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2dsaWIvQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2ViVmlld1Rl
c3QuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi93cGUvV2ViVmll
d1Rlc3RXUEUuY3BwOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24pOgor
ICAgICAgICAoV2ViVmlld1Rlc3Q6OmtleVN0cm9rZSk6CisKIDIwMTktMTEtMjYgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0FwcGxlV2luXSBy
dW4td2Via2l0LXRlc3RzIGlzIGZhaWxpbmcgdG8gZmluZCBiaW4zMi9EdW1wUmVuZGVyVHJlZSBz
aW5jZSByMjUyODM0CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RL
LmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA1MzI2
YzQ3M2VjZS4uNGUzMTk4NmIyNmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtNTUsOCArNTUsNiBAQCBBRERfV0hPTEVfQVJDSElWRV9UT19MSUJSQVJJRVMoVGVzdFdl
YkNvcmVfTElCUkFSSUVTKQogbGlzdChBUFBFTkQgVGVzdFdlYktpdF9TT1VSQ0VTCiAgICAgJHt0
ZXN0X21haW5fU09VUkNFU30KIAotICAgIFRlc3RzL1dlYktpdC9ndGsvSW5wdXRNZXRob2RGaWx0
ZXIuY3BwCi0KICAgICBnbGliL1V0aWxpdGllc0dMaWIuY3BwCiAKICAgICBndGsvUGxhdGZvcm1V
dGlsaXRpZXNHdGsuY3BwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdC9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggODI3ZTA5ZGQxMjguLjAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJXVEZTdHJpbmdVdGls
aXRpZXMuaCIKLSNpbmNsdWRlIDxXZWJLaXQvSW5wdXRNZXRob2RGaWx0ZXIuaD4KLSNpbmNsdWRl
IDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYv
Z2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgewotCi1jbGFzcyBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgOiBw
dWJsaWMgSW5wdXRNZXRob2RGaWx0ZXIgewotcHVibGljOgotICAgIFRlc3RJbnB1dE1ldGhvZEZp
bHRlcigpCi0gICAgICAgIDogbV90ZXN0V2luZG93KGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1df
UE9QVVApKQotICAgIHsKLSAgICAgICAgc2V0VGVzdGluZ01vZGUodHJ1ZSk7Ci0KLSAgICAgICAg
Z3RrX3dpZGdldF9zaG93KG1fdGVzdFdpbmRvdyk7Ci0gICAgICAgIGd0a19pbV9jb250ZXh0X3Nl
dF9jbGllbnRfd2luZG93KGNvbnRleHQoKSwgZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fdGVzdFdp
bmRvdykpOwotCi0gICAgICAgIHNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgfQotCi0gICAgflRlc3RJ
bnB1dE1ldGhvZEZpbHRlcigpCi0gICAgewotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV90
ZXN0V2luZG93KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNlbmRLZXlFdmVudFRvRmlsdGVyKHVuc2ln
bmVkIGdka0tleVZhbHVlLCBHZGtFdmVudFR5cGUgdHlwZSwgdW5zaWduZWQgbW9kaWZpZXJzID0g
MCkKLSAgICB7Ci0gICAgICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcodHlwZSk7
Ci0gICAgICAgIGV2ZW50LT5rZXkua2V5dmFsID0gZ2RrS2V5VmFsdWU7Ci0gICAgICAgIGV2ZW50
LT5rZXkuc3RhdGUgPSBtb2RpZmllcnM7Ci0gICAgICAgIGV2ZW50LT5rZXkud2luZG93ID0gZ3Rr
X3dpZGdldF9nZXRfd2luZG93KG1fdGVzdFdpbmRvdyk7Ci0gICAgICAgIGV2ZW50LT5rZXkudGlt
ZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgICAgIGdfb2JqZWN0X3JlZihldmVudC0+a2V5Lndp
bmRvdyk7Ci0gICAgICAgIGdka19ldmVudF9zZXRfZGV2aWNlKGV2ZW50LCBnZGtfZGV2aWNlX21h
bmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihn
ZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKSkpOwotCi0gICAgICAgIEdVbmlxdWVPdXRQdHI8R2Rr
S2V5bWFwS2V5PiBrZXlzOwotICAgICAgICBnaW50IG5LZXlzOwotICAgICAgICBpZiAoZ2RrX2tl
eW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFsKGdka19rZXltYXBfZ2V0X2RlZmF1bHQoKSwgZ2Rr
S2V5VmFsdWUsICZrZXlzLm91dFB0cigpLCAmbktleXMpICYmIG5LZXlzKQotICAgICAgICAgICAg
ZXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOwotCi0g
ICAgICAgIGZpbHRlcktleUV2ZW50KCZldmVudC0+a2V5KTsKLSAgICAgICAgZ2RrX2V2ZW50X2Zy
ZWUoZXZlbnQpOwotICAgIH0KLQotICAgIHZvaWQgc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50
UGFpclRvRmlsdGVyKHVuc2lnbmVkIGdka0tleVZhbHVlLCB1bnNpZ25lZCBtb2RpZmllcnMgPSAw
KQotICAgIHsKLSAgICAgICAgc2VuZEtleUV2ZW50VG9GaWx0ZXIoZ2RrS2V5VmFsdWUsIEdES19L
RVlfUFJFU1MsIG1vZGlmaWVycyk7Ci0gICAgICAgIHNlbmRLZXlFdmVudFRvRmlsdGVyKGdka0tl
eVZhbHVlLCBHREtfS0VZX1JFTEVBU0UsIG1vZGlmaWVycyk7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIEd0a1dpZGdldCogbV90ZXN0V2luZG93OwotfTsKLQotVEVTVChXZWJLaXQyLCBJbnB1dE1l
dGhvZEZpbHRlclNpbXBsZSkKLXsKLSAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRo
b2RGaWx0ZXI7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2
ZW50UGFpclRvRmlsdGVyKEdES19LRVlfZyk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFBy
ZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfdCk7Ci0gICAgaW5wdXRN
ZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19L
RVlfayk7Ci0KLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzID0gaW5wdXRNZXRob2RG
aWx0ZXIuZXZlbnRzKCk7Ci0KLSAgICBBU1NFUlRfRVEoNiwgZXZlbnRzLnNpemUoKSk7Ci0gICAg
QVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT02
NyB0ZXh0PSdnJyIpLCBldmVudHNbMF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1w
bGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT02NyIpLCBldmVudHNbMV0pOwotICAgIEFT
U0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9NzQg
dGV4dD0ndCciKSwgZXZlbnRzWzJdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxl
S2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9NzQiKSwgZXZlbnRzWzNdKTsKLSAgICBBU1NF
UlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPTZCIHRl
eHQ9J2snIiksIGV2ZW50c1s0XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtl
eUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTZCIiksIGV2ZW50c1s1XSk7Ci19Ci0KLVRFU1Qo
V2ViS2l0MiwgSW5wdXRNZXRob2RGaWx0ZXJVbmljb2RlU2VxdWVuY2UpCi17Ci0gICAgVGVzdElu
cHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOwotCi0gICAgLy8gVGhpcyBpcyBzaW1w
bGUgdW5pY29kZSBoZXggZW50cnkgb2YgdGhlIGNoYXJhY3RlcnMsIHUsIDAsIDAsIGYsIDQgcHJl
c3NlZCB3aXRoCi0gICAgLy8gdGhlIHNoaWZ0IGFuZCBjb250cm9scyBrZXlzIGhlbGQgZG93bi4g
SW4gcmVhbGl0eSwgdGhlc2UgdmFsdWVzIGFyZSBub3QgdHlwaWNhbAotICAgIC8vIG9mIGFuIGFj
dHVhbCBoZXggZW50cnksIGJlY2F1c2UgdGhleSdkIGJlIHRyYW5zZm9ybWVkIGJ5IHRoZSBzaGlm
dCBtb2RpZmllciBhY2NvcmRpbmcKLSAgICAvLyB0byB0aGUga2V5Ym9hcmQgbGF5b3V0LiBGb3Ig
aW5zdGFuY2UsIG9uIGEgVVMga2V5Ym9hcmQgYSAwIHdpdGggdGhlIHNoaWZ0IGtleSBwcmVzc2Vk
Ci0gICAgLy8gaXMgYSByaWdodCBwYXJlbnRoZXNpcy4gVXNpbmcgdGhlc2UgdmFsdWVzIHByZXZl
bnRzIGhhdmluZyB0byB3b3JrIG91dCB3aGF0IHRoZQotICAgIC8vIHRyYW5zZm9ybWVkIGNoYXJh
Y3RlcnMgYXJlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGtleWJvYXJkIGxheW91dC4KLSAgICBpbnB1
dE1ldGhvZEZpbHRlci5zZW5kS2V5RXZlbnRUb0ZpbHRlcihHREtfS0VZX0NvbnRyb2xfTCwgR0RL
X0tFWV9QUkVTUyk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZEtleUV2ZW50VG9GaWx0ZXIo
R0RLX0tFWV9TaGlmdF9MLCBHREtfS0VZX1BSRVNTLCBHREtfQ09OVFJPTF9NQVNLKTsKLQotICAg
IGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRl
cihHREtfS0VZX1UsIEdES19TSElGVF9NQVNLIHwgR0RLX0NPTlRST0xfTUFTSyk7Ci0gICAgaW5w
dXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdE
S19LRVlfMCwgR0RLX1NISUZUX01BU0sgfCBHREtfQ09OVFJPTF9NQVNLKTsKLSAgICBpbnB1dE1l
dGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tF
WV8wLCBHREtfU0hJRlRfTUFTSyB8IEdES19DT05UUk9MX01BU0spOwotICAgIGlucHV0TWV0aG9k
RmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX0Ys
IEdES19TSElGVF9NQVNLIHwgR0RLX0NPTlRST0xfTUFTSyk7Ci0gICAgaW5wdXRNZXRob2RGaWx0
ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfNCwgR0RL
X1NISUZUX01BU0sgfCBHREtfQ09OVFJPTF9NQVNLKTsKLQotICAgIGlucHV0TWV0aG9kRmlsdGVy
LnNlbmRLZXlFdmVudFRvRmlsdGVyKEdES19LRVlfU2hpZnRfTCwgR0RLX0tFWV9SRUxFQVNFLCBH
REtfQ09OVFJPTF9NQVNLIHwgR0RLX1NISUZUX01BU0spOwotICAgIGlucHV0TWV0aG9kRmlsdGVy
LnNlbmRLZXlFdmVudFRvRmlsdGVyKEdES19LRVlfQ29udHJvbF9MLCBHREtfS0VZX1JFTEVBU0Us
IEdES19DT05UUk9MX01BU0spOwotCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cyA9
IGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpOwotICAgIEFTU0VSVF9FUSgyMSwgZXZlbnRzLnNp
emUoKSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJl
c3Mga2V5Y29kZT1GRkUzIiksIGV2ZW50c1swXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2Vu
ZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT1GRkUxIiksIGV2ZW50c1sxXSk7Ci0g
ICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0
eXBlPXByZXNzIGtleWNvZGU9NTUiKSwgZXZlbnRzWzJdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5n
KCJzZXRQcmVlZGl0IHRleHQ9J3UnIGN1cnNvck9mZnNldD0xIiksIGV2ZW50c1szXSk7Ci0gICAg
QVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2Rl
PTU1IiksIGV2ZW50c1s0XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0
aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9MzAiKSwgZXZlbnRzWzVdKTsK
LSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9J3UwJyBjdXJzb3JPZmZzZXQ9
MiIpLCBldmVudHNbNl0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVu
dCB0eXBlPXJlbGVhc2Uga2V5Y29kZT0zMCIpLCBldmVudHNbN10pOwotICAgIEFTU0VSVF9FUShT
dHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXlj
b2RlPTMwIiksIGV2ZW50c1s4XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0
ZXh0PSd1MDAnIGN1cnNvck9mZnNldD0zIiksIGV2ZW50c1s5XSk7Ci0gICAgQVNTRVJUX0VRKFN0
cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTMwIiksIGV2ZW50
c1sxMF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlv
blJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTQ2IiksIGV2ZW50c1sxMV0pOwotICAgIEFTU0VS
VF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ndTAwRicgY3Vyc29yT2Zmc2V0PTQiKSwgZXZl
bnRzWzEyXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9
cmVsZWFzZSBrZXljb2RlPTQ2IiksIGV2ZW50c1sxM10pOwotICAgIEFTU0VSVF9FUShTdHJpbmco
InNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTM0
IiksIGV2ZW50c1sxNF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0n
dTAwRjQnIGN1cnNvck9mZnNldD01IiksIGV2ZW50c1sxNV0pOwotICAgIEFTU0VSVF9FUShTdHJp
bmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT0zNCIpLCBldmVudHNb
MTZdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nOjpmcm9tVVRGOCgiY29uZmlybUNvbXBvc2l0aW9u
ICfDtCciKSwgZXZlbnRzWzE3XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0
ZXh0PScnIGN1cnNvck9mZnNldD0wIiksIGV2ZW50c1sxOF0pOwotICAgIEFTU0VSVF9FUShTdHJp
bmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1GRkUxIiksIGV2ZW50
c1sxOV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJl
bGVhc2Uga2V5Y29kZT1GRkUzIiksIGV2ZW50c1syMF0pOwotfQotCi1URVNUKFdlYktpdDIsIElu
cHV0TWV0aG9kRmlsdGVyQ29tcG9zZUtleSkKLXsKLSAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIg
aW5wdXRNZXRob2RGaWx0ZXI7Ci0KLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRS
ZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9NdWx0aV9rZXkpOwotICAgIGlucHV0
TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtf
S0VZX2Fwb3N0cm9waGUpOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVh
c2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX28pOwotCi0gICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGV2ZW50cyA9IGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpOwotICAgIEFTU0VSVF9F
USgzLCBldmVudHMuc2l6ZSgpKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRX
aXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT02RiIpLCBldmVudHNbMF0p
OwotICAgIEFTU0VSVF9FUShTdHJpbmc6OmZyb21VVEY4KCJjb25maXJtQ29tcG9zaXRpb24gJ8Oz
JyIpLCBldmVudHNbMV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVu
dCB0eXBlPXJlbGVhc2Uga2V5Y29kZT02RiIpLCBldmVudHNbMl0pOwotfQotCi10eXBlZGVmIHZv
aWQgKCpHZXRQcmVlZGl0U3RyaW5nQ2FsbGJhY2spIChHdGtJTUNvbnRleHQqLCBnY2hhcioqLCBQ
YW5nb0F0dHJMaXN0KiosIGludCopOwotc3RhdGljIHZvaWQgdGVtcG9yYXJ5R2V0UHJlZWRpdFN0
cmluZ092ZXJyaWRlKEd0a0lNQ29udGV4dCosIGNoYXIqKiBzdHJpbmcsIFBhbmdvQXR0ckxpc3Qq
KiBhdHRycywgaW50KiBjdXJzb3JQb3NpdGlvbikKLXsKLSAgICAqc3RyaW5nID0gZ19zdHJkdXAo
InByZWVkaXQgb2YgZG9vbSwgYnJpbmdlciBvZiBjaGVlc2UiKTsKLSAgICAqY3Vyc29yUG9zaXRp
b24gPSAzOwotfQotCi1URVNUKFdlYktpdDIsIElucHV0TWV0aG9kRmlsdGVyQ29udGV4dEV2ZW50
c1dpdGhvdXRLZXlFdmVudHMpCi17Ci0gICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0
aG9kRmlsdGVyOwotCi0gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgdG8gYXZvaWQgbW9j
a2luZyBvdXQgdGhlIGVudGlyZSBJbnB1dE1ldGhvZENvbnRleHQsIGJ5Ci0gICAgLy8gc2ltcGx5
IHJlcGxhY2luZyB0aGUgZ2V0X3ByZWVkaXRfc3RyaW5nIHZpcnR1YWwgbWV0aG9kIGZvciB0aGUg
bGVuZ3RoIG9mIHRoaXMgdGVzdC4KLSAgICBHdGtJTUNvbnRleHQqIGNvbnRleHQgPSBpbnB1dE1l
dGhvZEZpbHRlci5jb250ZXh0KCk7Ci0gICAgR3RrSU1Db250ZXh0Q2xhc3MqIGNvbnRleHRDbGFz
cyA9IEdUS19JTV9DT05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKLSAgICBHZXRQcmVlZGl0U3Ry
aW5nQ2FsbGJhY2sgcHJldmlvdXNDYWxsYmFjayA9IGNvbnRleHRDbGFzcy0+Z2V0X3ByZWVkaXRf
c3RyaW5nOwotICAgIGNvbnRleHRDbGFzcy0+Z2V0X3ByZWVkaXRfc3RyaW5nID0gdGVtcG9yYXJ5
R2V0UHJlZWRpdFN0cmluZ092ZXJyaWRlOwotCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGNv
bnRleHQsICJwcmVlZGl0LWNoYW5nZWQiKTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29u
dGV4dCwgImNvbW1pdCIsICJjb21taXQgdGV4dCIpOwotCi0gICAgY29udGV4dENsYXNzLT5nZXRf
cHJlZWRpdF9zdHJpbmcgPSBwcmV2aW91c0NhbGxiYWNrOwotCi0gICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGV2ZW50cyA9IGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpOwotICAgIEFTU0VSVF9F
USg2LCBldmVudHMuc2l6ZSgpKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRX
aXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT1GRkZGRkYgKGZha2VkKSIp
LCBldmVudHNbMF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ncHJl
ZWRpdCBvZiBkb29tLCBicmluZ2VyIG9mIGNoZWVzZScgY3Vyc29yT2Zmc2V0PTMiKSwgZXZlbnRz
WzFdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxl
YXNlIGtleWNvZGU9RkZGRkZGIChmYWtlZCkiKSwgZXZlbnRzWzJdKTsKLSAgICBBU1NFUlRfRVEo
U3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5
Y29kZT1GRkZGRkYgKGZha2VkKSIpLCBldmVudHNbM10pOwotICAgIEFTU0VSVF9FUShTdHJpbmco
ImNvbmZpcm1Db21wb3NpdGlvbiAnY29tbWl0IHRleHQnIiksIGV2ZW50c1s0XSk7Ci0gICAgQVNT
RVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPUZG
RkZGRiAoZmFrZWQpIiksIGV2ZW50c1s1XSk7Ci19Ci0KLXN0YXRpYyBib29sIGdTYXdDb250ZXh0
UmVzZXQgPSBmYWxzZTsKLXR5cGVkZWYgdm9pZCAoKlJlc2V0Q2FsbGJhY2spIChHdGtJTUNvbnRl
eHQqKTsKLXN0YXRpYyB2b2lkIHRlbXBvcmFyeVJlc2V0T3ZlcnJpZGUoR3RrSU1Db250ZXh0KikK
LXsKLSAgICBnU2F3Q29udGV4dFJlc2V0ID0gdHJ1ZTsKLX0KLQotVEVTVChXZWJLaXQyLCBJbnB1
dE1ldGhvZEZpbHRlckNvbnRleHRGb2N1c091dER1cmluZ09uZ29pbmdDb21wb3NpdGlvbikKLXsK
LSAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7Ci0KLSAgICAvLyBT
ZWUgY29tbWVudCBhYm92ZSBhYm91dCB0aGlzIHRlY2huaXF1ZS4KLSAgICBHdGtJTUNvbnRleHQq
IGNvbnRleHQgPSBpbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCk7Ci0gICAgR3RrSU1Db250ZXh0
Q2xhc3MqIGNvbnRleHRDbGFzcyA9IEdUS19JTV9DT05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsK
LSAgICBSZXNldENhbGxiYWNrIHByZXZpb3VzQ2FsbGJhY2sgPSBjb250ZXh0Q2xhc3MtPnJlc2V0
OwotICAgIGNvbnRleHRDbGFzcy0+cmVzZXQgPSB0ZW1wb3JhcnlSZXNldE92ZXJyaWRlOwotCi0g
ICAgZ1Nhd0NvbnRleHRSZXNldCA9IGZhbHNlOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQ
cmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX011bHRpX2tleSk7Ci0g
ICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmls
dGVyKEdES19LRVlfYXBvc3Ryb3BoZSk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIubm90aWZ5Rm9j
dXNlZE91dCgpOwotICAgIEFTU0VSVF9UUlVFKGdTYXdDb250ZXh0UmVzZXQpOwotCi0gICAgY29u
dGV4dENsYXNzLT5yZXNldCA9IHByZXZpb3VzQ2FsbGJhY2s7Ci19Ci0KLVRFU1QoV2ViS2l0Miwg
SW5wdXRNZXRob2RGaWx0ZXJDb250ZXh0TW91c2VDbGlja0R1cmluZ09uZ29pbmdDb21wb3NpdGlv
bikKLXsKLSAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7Ci0KLSAg
ICAvLyBTZWUgY29tbWVudCBhYm92ZSBhYm91dCB0aGlzIHRlY2huaXF1ZS4KLSAgICBHdGtJTUNv
bnRleHQqIGNvbnRleHQgPSBpbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCk7Ci0gICAgR3RrSU1D
b250ZXh0Q2xhc3MqIGNvbnRleHRDbGFzcyA9IEdUS19JTV9DT05URVhUX0dFVF9DTEFTUyhjb250
ZXh0KTsKLSAgICBSZXNldENhbGxiYWNrIHByZXZpb3VzQ2FsbGJhY2sgPSBjb250ZXh0Q2xhc3Mt
PnJlc2V0OwotICAgIGNvbnRleHRDbGFzcy0+cmVzZXQgPSB0ZW1wb3JhcnlSZXNldE92ZXJyaWRl
OwotCi0gICAgZ1Nhd0NvbnRleHRSZXNldCA9IGZhbHNlOwotICAgIGlucHV0TWV0aG9kRmlsdGVy
LnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX011bHRpX2tl
eSk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFp
clRvRmlsdGVyKEdES19LRVlfYXBvc3Ryb3BoZSk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIubm90
aWZ5TW91c2VCdXR0b25QcmVzcygpOwotICAgIEFTU0VSVF9UUlVFKGdTYXdDb250ZXh0UmVzZXQp
OwotCi0gICAgY29udGV4dENsYXNzLT5yZXNldCA9IHByZXZpb3VzQ2FsbGJhY2s7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0SW5wdXRNZXRob2RDb250ZXh0LmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0SW5wdXRNZXRob2RDb250ZXh0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWExOTQxMDhlOTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdElu
cHV0TWV0aG9kQ29udGV4dC5jcHAKQEAgLTAsMCArMSw3MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRl
c3RNYWluLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9H
VW5pcXVlUHRyLmg+CisKKyNpZiBQTEFURk9STShHVEspCit1c2luZyBQbGF0Zm9ybUV2ZW50S2V5
ID0gR2RrRXZlbnRLZXk7CisjZGVmaW5lIEtFWSh4KSBHREtfS0VZXyMjeAorI2RlZmluZSBDT05U
Uk9MX01BU0sgR0RLX0NPTlRST0xfTUFTSworI2RlZmluZSBTSElGVF9NQVNLIEdES19TSElGVF9N
QVNLCisjZWxpZiBQTEFURk9STShXUEUpCit1c2luZyBQbGF0Zm9ybUV2ZW50S2V5ID0gc3RydWN0
IHdwZV9pbnB1dF9rZXlib2FyZF9ldmVudDsKKyNkZWZpbmUgS0VZKHgpIFdQRV9LRVlfIyN4Cisj
ZGVmaW5lIENPTlRST0xfTUFTSyB3cGVfaW5wdXRfa2V5Ym9hcmRfbW9kaWZpZXJfY29udHJvbAor
I2RlZmluZSBTSElGVF9NQVNLIHdwZV9pbnB1dF9rZXlib2FyZF9tb2RpZmllcl9zaGlmdAorI2Vu
ZGlmCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRNb2NrIHsKKyAg
ICBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgcGFyZW50OworCisgICAgYm9vbCBlbmFibGVkOwor
ICAgIEdTdHJpbmcqIHByZWVkaXQ7CisgICAgYm9vbCBjb21taXROZXh0Q2hhcmFjdGVyOworfSBX
ZWJLaXRJbnB1dE1ldGhvZENvbnRleHRNb2NrOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SW5w
dXRNZXRob2RDb250ZXh0TW9ja0NsYXNzIHsKKyAgICBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRD
bGFzcyBwYXJlbnQ7Cit9IFdlYktpdElucHV0TWV0aG9kQ29udGV4dE1vY2tDbGFzczsKKworR19E
RUZJTkVfVFlQRShXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRNb2NrLCB3ZWJraXRfaW5wdXRfbWV0
aG9kX2NvbnRleHRfbW9jaywgV0VCS0lUX1RZUEVfSU5QVVRfTUVUSE9EX0NPTlRFWFQpCisKK3N0
YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48Ym9keT48aW5wdXQgaWQ9J2VkaXRh
YmxlJyBjb250ZW50ZWRpdGFibGUgb25rZXlkb3duPSdsb2dLZXlEb3duKCknIG9ua2V5dXA9J2xv
Z0tleVVwKCknIG9ua2V5cHJlc3M9J2xvZ0tleVByZXNzKCknPjwvaW5wdXQ+PHNjcmlwdD4iCisg
ICAgInZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0YWJsZScpOyIKKyAg
ICAiaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIGxvZ0NvbXBvc2l0
aW9uRXZlbnQpOyIKKyAgICAiaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb251cGRh
dGUnLCBsb2dDb21wb3NpdGlvbkV2ZW50KTsiCisgICAgImlucHV0LmFkZEV2ZW50TGlzdGVuZXIo
J2NvbXBvc2l0aW9uZW5kJywgbG9nQ29tcG9zaXRpb25FdmVudCk7IgorICAgICJmdW5jdGlvbiBs
b2dDb21wb3NpdGlvbkV2ZW50KGV2ZW50KSB7IHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJz
LmltRXZlbnQucG9zdE1lc3NhZ2UoeyAndHlwZScgOiBldmVudC50eXBlLCAnZGF0YScgOiBldmVu
dC5kYXRhIH0pIH0iCisgICAgImZ1bmN0aW9uIGxvZ0tleURvd24oKSB7IHdpbmRvdy53ZWJraXQu
bWVzc2FnZUhhbmRsZXJzLmltRXZlbnQucG9zdE1lc3NhZ2UoeyAndHlwZScgOiAna2V5RG93bics
ICdrZXlDb2RlJyA6IGV2ZW50LmtleUNvZGUsICdrZXknIDogZXZlbnQua2V5LCAnaXNDb21wb3Np
bmcnIDogZXZlbnQuaXNDb21wb3NpbmcgfSkgfSIKKyAgICAiZnVuY3Rpb24gbG9nS2V5VXAoKSB7
IHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLmltRXZlbnQucG9zdE1lc3NhZ2UoeyAndHlw
ZScgOiAna2V5VXAnLCAna2V5Q29kZScgOiBldmVudC5rZXlDb2RlLCAna2V5JyA6IGV2ZW50Lmtl
eSwgJ2lzQ29tcG9zaW5nJyA6IGV2ZW50LmlzQ29tcG9zaW5nIH0pIH0iCisgICAgImZ1bmN0aW9u
IGxvZ0tleVByZXNzKCkgeyB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5pbUV2ZW50LnBv
c3RNZXNzYWdlKHsgJ3R5cGUnIDogJ2tleVByZXNzJywgJ2tleUNvZGUnIDogZXZlbnQua2V5Q29k
ZSB9KSB9IgorICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyB2b2lkIHdl
YmtpdElucHV0TWV0aG9kQ29udGV4dE1vY2tGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgYXV0byogbW9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0
TW9jayo+KG9iamVjdCk7CisgICAgaWYgKG1vY2stPnByZWVkaXQpIHsKKyAgICAgICAgZ19zdHJp
bmdfZnJlZShtb2NrLT5wcmVlZGl0LCBUUlVFKTsKKyAgICAgICAgbW9jay0+cHJlZWRpdCA9IG51
bGxwdHI7CisgICAgfQorICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9pbnB1dF9tZXRob2RfY29u
dGV4dF9tb2NrX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdElucHV0TWV0aG9kQ29udGV4dE1vY2tHZXRQcmVlZGl0KFdlYktpdElucHV0TWV0
aG9kQ29udGV4dCogY29udGV4dCwgY2hhcioqIHRleHQsIEdMaXN0KiogdW5kZXJsaW5lcywgZ3Vp
bnQqIGN1cnNvck9mZnNldCkKK3sKKyAgICBhdXRvKiBtb2NrID0gcmVpbnRlcnByZXRfY2FzdDxX
ZWJLaXRJbnB1dE1ldGhvZENvbnRleHRNb2NrKj4oY29udGV4dCk7CisgICAgaWYgKHRleHQpCisg
ICAgICAgICp0ZXh0ID0gbW9jay0+cHJlZWRpdCA/IGdfc3RyZHVwKG1vY2stPnByZWVkaXQtPnN0
cikgOiBnX3N0cmR1cCgiIik7CisgICAgaWYgKHVuZGVybGluZXMpCisgICAgICAgICp1bmRlcmxp
bmVzID0gbW9jay0+cHJlZWRpdCA/IGdfbGlzdF9wcmVwZW5kKCp1bmRlcmxpbmVzLCB3ZWJraXRf
aW5wdXRfbWV0aG9kX3VuZGVybGluZV9uZXcoMCwgbW9jay0+cHJlZWRpdC0+bGVuKSkgOiBudWxs
cHRyOworICAgIGlmIChjdXJzb3JPZmZzZXQpCisgICAgICAgICpjdXJzb3JPZmZzZXQgPSBtb2Nr
LT5wcmVlZGl0ID8gbW9jay0+cHJlZWRpdC0+bGVuIDogMDsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdElucHV0TWV0aG9kQ29udGV4dE1vY2tGaWx0ZXJLZXlFdmVudChXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHQqIGNvbnRleHQsIFBsYXRmb3JtRXZlbnRLZXkqIGtleUV2ZW50KQoreworICAg
IGF1dG8qIG1vY2sgPSByZWludGVycHJldF9jYXN0PFdlYktpdElucHV0TWV0aG9kQ29udGV4dE1v
Y2sqPihjb250ZXh0KTsKKyAgICBpZiAoIW1vY2stPmVuYWJsZWQpCisgICAgICAgIHJldHVybiBG
QUxTRTsKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHZGtNb2RpZmllclR5cGUgc3RhdGU7Cisg
ICAgZ3VpbnQga2V5dmFsOworICAgIGlmICghZ2RrX2V2ZW50X2dldF9zdGF0ZShyZWludGVycHJl
dF9jYXN0PEdka0V2ZW50Kj4oa2V5RXZlbnQpLCAmc3RhdGUpIHx8ICFnZGtfZXZlbnRfZ2V0X2tl
eXZhbChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oa2V5RXZlbnQpLCAma2V5dmFsKSkKKyAg
ICAgICAgcmV0dXJuIEZBTFNFOworICAgIGJvb2wgaXNLZXlQcmVzcyA9IGdka19ldmVudF9nZXRf
ZXZlbnRfdHlwZShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oa2V5RXZlbnQpKSA9PSBHREtf
S0VZX1BSRVNTOworICAgIGd1bmljaGFyIGNoYXJhY3RlciA9IGdka19rZXl2YWxfdG9fdW5pY29k
ZShrZXl2YWwpOworI2VsaWYgUExBVEZPUk0oV1BFKQorICAgIHVpbnQzMl90IHN0YXRlID0ga2V5
RXZlbnQtPm1vZGlmaWVyczsKKyAgICB1aW50MzJfdCBrZXl2YWwgPSBrZXlFdmVudC0+a2V5X2Nv
ZGU7CisgICAgYm9vbCBpc0tleVByZXNzID0ga2V5RXZlbnQtPnByZXNzZWQ7CisgICAgZ3VuaWNo
YXIgY2hhcmFjdGVyID0gd3BlX2tleV9jb2RlX3RvX3VuaWNvZGUoa2V5dmFsKTsKKyNlbmRpZgor
ICAgIGJvb2wgaXNDb250cm9sID0gc3RhdGUgJiBDT05UUk9MX01BU0s7CisgICAgYm9vbCBpc1No
aWZ0ID0gc3RhdGUgJiBTSElGVF9NQVNLOworICAgIGJvb2wgaXNDb21wb3NlRW5kID0gKGtleXZh
bCA9PSBLRVkoc3BhY2UpIHx8IGtleXZhbCA9PSBLRVkoUmV0dXJuKSB8fCBrZXl2YWwgPT0gS0VZ
KElTT19FbnRlcikpOworCisgICAgaWYgKGlzS2V5UHJlc3MgJiYgbW9jay0+Y29tbWl0TmV4dENo
YXJhY3RlcikgeworICAgICAgICBjaGFyIGJ1ZmZlcls2XTsKKyAgICAgICAgYXV0byBsZW5ndGgg
PSBnX3VuaWNoYXJfdG9fdXRmOChjaGFyYWN0ZXIsIGJ1ZmZlcik7CisgICAgICAgIGJ1ZmZlclts
ZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGNvbnRleHQsICJj
b21taXR0ZWQiLCBidWZmZXIsIG51bGxwdHIpOworICAgICAgICBtb2NrLT5jb21taXROZXh0Q2hh
cmFjdGVyID0gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgaWYg
KCFtb2NrLT5wcmVlZGl0KSB7CisgICAgICAgIGlmIChpc0tleVByZXNzICYmIGlzQ29udHJvbCAm
JiBpc1NoaWZ0ICYmIGtleXZhbCA9PSBLRVkodykpIHsKKyAgICAgICAgICAgIG1vY2stPnByZWVk
aXQgPSBnX3N0cmluZ19uZXcoInciKTsKKyAgICAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShjb250ZXh0LCAicHJlZWRpdC1zdGFydGVkIiwgbnVsbHB0cik7CisgICAgICAgICAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgInByZWVkaXQtY2hhbmdlZCIsIG51bGxwdHIpOwor
CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBG
QUxTRTsKKyAgICB9CisKKyAgICBpZiAoa2V5dmFsID09IEtFWShFc2NhcGUpKSB7CisgICAgICAg
IGdfc3RyaW5nX2ZyZWUobW9jay0+cHJlZWRpdCwgVFJVRSk7CisgICAgICAgIG1vY2stPnByZWVk
aXQgPSBudWxscHRyOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgInBy
ZWVkaXQtY2hhbmdlZCIsIG51bGxwdHIpOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
Y29udGV4dCwgInByZWVkaXQtZmluaXNoZWQiLCBudWxscHRyKTsKKworICAgICAgICByZXR1cm4g
VFJVRTsKKyAgICB9CisKKyAgICBpZiAoaXNDb21wb3NlRW5kKSB7CisgICAgICAgIGlmICghZ19z
dHJjbXAwKG1vY2stPnByZWVkaXQtPnN0ciwgIndndGsiKSkKKyAgICAgICAgICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZShjb250ZXh0LCAiY29tbWl0dGVkIiwgIldlYktpdEdUSyIsIG51bGxwdHIp
OworICAgICAgICBlbHNlIGlmICghZ19zdHJjbXAwKG1vY2stPnByZWVkaXQtPnN0ciwgInd3cGUi
KSkKKyAgICAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShjb250ZXh0LCAiY29tbWl0dGVk
IiwgIldQRVdlYktpdCIsIG51bGxwdHIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgImNvbW1pdHRlZCIsIG1vY2stPnByZWVkaXQtPnN0
ciArIDEsIG51bGxwdHIpOworCisgICAgICAgIGdfc3RyaW5nX2ZyZWUobW9jay0+cHJlZWRpdCwg
VFJVRSk7CisgICAgICAgIG1vY2stPnByZWVkaXQgPSBudWxscHRyOworICAgICAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUoY29udGV4dCwgInByZWVkaXQtY2hhbmdlZCIsIG51bGxwdHIpOworICAg
ICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgInByZWVkaXQtZmluaXNoZWQiLCBu
dWxscHRyKTsKKworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBpZiAoaXNLZXlQ
cmVzcykgeworICAgICAgICBnX3N0cmluZ19hcHBlbmRfdW5pY2hhcihtb2NrLT5wcmVlZGl0LCBj
aGFyYWN0ZXIpOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgInByZWVk
aXQtY2hhbmdlZCIsIG51bGxwdHIpOworCisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0SW5wdXRNZXRob2RDb250
ZXh0TW9ja05vdGlmeUZvY3VzSW4oV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KiBjb250ZXh0KQor
eworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0TW9jayo+KGNv
bnRleHQpLT5lbmFibGVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0SW5wdXRNZXRo
b2RDb250ZXh0TW9ja05vdGlmeUZvY3VzT3V0KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCogY29u
dGV4dCkKK3sKKyAgICByZWludGVycHJldF9jYXN0PFdlYktpdElucHV0TWV0aG9kQ29udGV4dE1v
Y2sqPihjb250ZXh0KS0+ZW5hYmxlZCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRJ
bnB1dE1ldGhvZENvbnRleHRNb2NrUmVzZXQoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KiBjb250
ZXh0KQoreworICAgIGF1dG8qIG1vY2sgPSByZWludGVycHJldF9jYXN0PFdlYktpdElucHV0TWV0
aG9kQ29udGV4dE1vY2sqPihjb250ZXh0KTsKKyAgICBpZiAoIW1vY2stPnByZWVkaXQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGdfc3RyaW5nX2ZyZWUobW9jay0+cHJlZWRpdCwgVFJVRSk7Cisg
ICAgbW9jay0+cHJlZWRpdCA9IG51bGxwdHI7CisKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
Y29udGV4dCwgInByZWVkaXQtY2hhbmdlZCIsIG51bGxwdHIpOworICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShjb250ZXh0LCAicHJlZWRpdC1maW5pc2hlZCIsIG51bGxwdHIpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfbW9ja19jbGFzc19pbml0KFdlYktp
dElucHV0TWV0aG9kQ29udGV4dE1vY2tDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNz
KiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRNb2NrRmluYWxpemU7CisKKyAgICBh
dXRvKiBpbUNsYXNzID0gV0VCS0lUX0lOUFVUX01FVEhPRF9DT05URVhUX0NMQVNTKGtsYXNzKTsK
KyAgICBpbUNsYXNzLT5nZXRfcHJlZWRpdCA9IHdlYmtpdElucHV0TWV0aG9kQ29udGV4dE1vY2tH
ZXRQcmVlZGl0OworICAgIGltQ2xhc3MtPmZpbHRlcl9rZXlfZXZlbnQgPSB3ZWJraXRJbnB1dE1l
dGhvZENvbnRleHRNb2NrRmlsdGVyS2V5RXZlbnQ7CisgICAgaW1DbGFzcy0+bm90aWZ5X2ZvY3Vz
X2luID0gd2Via2l0SW5wdXRNZXRob2RDb250ZXh0TW9ja05vdGlmeUZvY3VzSW47CisgICAgaW1D
bGFzcy0+bm90aWZ5X2ZvY3VzX291dCA9IHdlYmtpdElucHV0TWV0aG9kQ29udGV4dE1vY2tOb3Rp
ZnlGb2N1c091dDsKKyAgICBpbUNsYXNzLT5yZXNldCA9IHdlYmtpdElucHV0TWV0aG9kQ29udGV4
dE1vY2tSZXNldDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0
X21vY2tfaW5pdChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRNb2NrKikKK3sKK30KKworY2xhc3Mg
SW5wdXRNZXRob2RUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0Vf
R0xJQl9URVNUX0ZJWFRVUkUoSW5wdXRNZXRob2RUZXN0KTsKKworICAgIHN0cnVjdCBFdmVudCB7
CisgICAgICAgIGVudW0gY2xhc3MgVHlwZSB7IEtleURvd24sIEtleVByZXNzLCBLZXlVcCwgQ29t
cG9zaXRpb25TdGFydCwgQ29tcG9zaXRpb25VcGRhdGUsIENvbXBvc2l0aW9uRW5kIH07CisKKyAg
ICAgICAgZXhwbGljaXQgRXZlbnQoVHlwZSB0eXBlKQorICAgICAgICAgICAgOiB0eXBlKHR5cGUp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgQ1N0
cmluZyBkYXRhOworICAgICAgICB1bnNpZ25lZCBrZXlDb2RlOworICAgICAgICBDU3RyaW5nIGtl
eTsKKyAgICAgICAgYm9vbCBpc0NvbXBvc2luZzsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQg
aW1FdmVudENhbGxiYWNrKFdlYktpdFVzZXJDb250ZW50TWFuYWdlciosIFdlYktpdEphdmFzY3Jp
cHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQsIElucHV0TWV0aG9kVGVzdCogdGVzdCkKKyAgICB7
CisgICAgICAgIHRlc3QtPmltRXZlbnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgfQorCisgICAg
SW5wdXRNZXRob2RUZXN0KCkKKyAgICAgICAgOiBtX2NvbnRleHQoYWRvcHRHUmVmKHN0YXRpY19j
YXN0PFdlYktpdElucHV0TWV0aG9kQ29udGV4dE1vY2sqPihnX29iamVjdF9uZXcod2Via2l0X2lu
cHV0X21ldGhvZF9jb250ZXh0X21vY2tfZ2V0X3R5cGUoKSwgbnVsbHB0cikpKSkKKyAgICB7Cisj
aWYgUExBVEZPUk0oR1RLKQorICAgICAgICBhdXRvKiBkZWZhdWx0Q29udGV4dCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfaW5wdXRfbWV0aG9kX2NvbnRleHQobV93ZWJWaWV3KTsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShXRUJLSVRfSVNfSU5QVVRfTUVUSE9EX0NPTlRFWFQoZGVmYXVsdENvbnRleHQp
KTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChkZWZhdWx0Q29udGV4dCkpOworI2VsaWYgUExBVEZPUk0oV1BFKQorICAgICAgICBnX2Fzc2Vy
dF9udWxsKHdlYmtpdF93ZWJfdmlld19nZXRfaW5wdXRfbWV0aG9kX2NvbnRleHQobV93ZWJWaWV3
KSk7CisjZW5kaWYKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVChtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3Nl
dF9pbnB1dF9tZXRob2RfY29udGV4dChtX3dlYlZpZXcsIFdFQktJVF9JTlBVVF9NRVRIT0RfQ09O
VEVYVChtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2lucHV0X21ldGhvZF9jb250ZXh0KG1fd2ViVmlldykgPT0gV0VCS0lUX0lOUFVU
X01FVEhPRF9DT05URVhUKG1fY29udGV4dC5nZXQoKSkpOworCisgICAgICAgIHdlYmtpdF91c2Vy
X2NvbnRlbnRfbWFuYWdlcl9yZWdpc3Rlcl9zY3JpcHRfbWVzc2FnZV9oYW5kbGVyKG1fdXNlckNv
bnRlbnRNYW5hZ2VyLmdldCgpLCAiaW1FdmVudCIpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fdXNlckNvbnRlbnRNYW5hZ2VyLmdldCgpLCAic2NyaXB0LW1lc3NhZ2UtcmVjZWl2ZWQ6Omlt
RXZlbnQiLCBHX0NBTExCQUNLKGltRXZlbnRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAg
IH5JbnB1dE1ldGhvZFRlc3QoKQorICAgIHsKKyAgICAgICAgd2Via2l0X3VzZXJfY29udGVudF9t
YW5hZ2VyX3VucmVnaXN0ZXJfc2NyaXB0X21lc3NhZ2VfaGFuZGxlcihtX3VzZXJDb250ZW50TWFu
YWdlci5nZXQoKSwgImltRXZlbnQiKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9kYXRhKG1fdXNlckNvbnRlbnRNYW5hZ2VyLmdldCgpLCB0aGlzKTsKKyAgICB9CisK
KyAgICB2b2lkIGltRXZlbnQoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogcmVzdWx0KQorICAgIHsK
KyAgICAgICAgYXV0byoganNFdmVudCA9IHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfanNf
dmFsdWUocmVzdWx0KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0
KGpzRXZlbnQpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1Jl
Zihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eShqc0V2ZW50LCAidHlwZSIpKTsKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAg
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gc3RyVmFsdWUoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5n
ZXQoKSkpOworICAgICAgICBpZiAoIWdfc3RyY21wMChzdHJWYWx1ZS5nZXQoKSwgImtleURvd24i
KSkgeworICAgICAgICAgICAgSW5wdXRNZXRob2RUZXN0OjpFdmVudCBldmVudChJbnB1dE1ldGhv
ZFRlc3Q6OkV2ZW50OjpUeXBlOjpLZXlEb3duKTsKKyAgICAgICAgICAgIHZhbHVlID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGpzRXZlbnQsICJrZXlDb2RlIikpOwor
ICAgICAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgp
KSk7CisgICAgICAgICAgICBldmVudC5rZXlDb2RlID0ganNjX3ZhbHVlX3RvX2ludDMyKHZhbHVl
LmdldCgpKTsKKyAgICAgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3Rf
Z2V0X3Byb3BlcnR5KGpzRXZlbnQsICJrZXkiKSk7CisgICAgICAgICAgICBnX2Fzc2VydF90cnVl
KGpzY192YWx1ZV9pc19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgICAgIHN0clZhbHVl
LnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGV2
ZW50LmtleSA9IHN0clZhbHVlLmdldCgpOworICAgICAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkoanNFdmVudCwgImlzQ29tcG9zaW5nIikpOwor
ICAgICAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbih2YWx1ZS5nZXQo
KSkpOworICAgICAgICAgICAgZXZlbnQuaXNDb21wb3NpbmcgPSBqc2NfdmFsdWVfdG9fYm9vbGVh
bih2YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBtX2V2ZW50cy5hcHBlbmQoV1RGTW92ZShldmVu
dCkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc3RyVmFsdWUuZ2V0KCksICJrZXlQ
cmVzcyIpKSB7CisgICAgICAgICAgICBJbnB1dE1ldGhvZFRlc3Q6OkV2ZW50IGV2ZW50KElucHV0
TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OktleVByZXNzKTsKKyAgICAgICAgICAgIHZhbHVlID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGpzRXZlbnQsICJrZXlDb2Rl
IikpOworICAgICAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVl
LmdldCgpKSk7CisgICAgICAgICAgICBldmVudC5rZXlDb2RlID0ganNjX3ZhbHVlX3RvX2ludDMy
KHZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIG1fZXZlbnRzLmFwcGVuZChXVEZNb3ZlKGV2ZW50
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzdHJWYWx1ZS5nZXQoKSwgImtleVVw
IikpIHsKKyAgICAgICAgICAgIElucHV0TWV0aG9kVGVzdDo6RXZlbnQgZXZlbnQoSW5wdXRNZXRo
b2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5VXApOworICAgICAgICAgICAgdmFsdWUgPSBhZG9wdEdS
ZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkoanNFdmVudCwgImtleUNvZGUiKSk7Cisg
ICAgICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgPSBqc2NfdmFsdWVfdG9faW50MzIodmFsdWUu
Z2V0KCkpOworICAgICAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9n
ZXRfcHJvcGVydHkoanNFdmVudCwgImtleSIpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX2lzX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgICAgICAgICAgc3RyVmFsdWUu
cmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgICAgICAgICAgZXZl
bnQua2V5ID0gc3RyVmFsdWUuZ2V0KCk7CisgICAgICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihq
c2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eShqc0V2ZW50LCAiaXNDb21wb3NpbmciKSk7Cisg
ICAgICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHZhbHVlLmdldCgp
KSk7CisgICAgICAgICAgICBldmVudC5pc0NvbXBvc2luZyA9IGpzY192YWx1ZV90b19ib29sZWFu
KHZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIG1fZXZlbnRzLmFwcGVuZChXVEZNb3ZlKGV2ZW50
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzdHJWYWx1ZS5nZXQoKSwgImNvbXBv
c2l0aW9uc3RhcnQiKSkgeworICAgICAgICAgICAgSW5wdXRNZXRob2RUZXN0OjpFdmVudCBldmVu
dChJbnB1dE1ldGhvZFRlc3Q6OkV2ZW50OjpUeXBlOjpDb21wb3NpdGlvblN0YXJ0KTsKKyAgICAg
ICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGpz
RXZlbnQsICJkYXRhIikpOworICAgICAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
c3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgICAgICAgICBzdHJWYWx1ZS5yZXNldChqc2NfdmFs
dWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgICAgICAgICBldmVudC5kYXRhID0gc3Ry
VmFsdWUuZ2V0KCk7CisgICAgICAgICAgICBtX2V2ZW50cy5hcHBlbmQoV1RGTW92ZShldmVudCkp
OworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc3RyVmFsdWUuZ2V0KCksICJjb21wb3Np
dGlvbnVwZGF0ZSIpKSB7CisgICAgICAgICAgICBJbnB1dE1ldGhvZFRlc3Q6OkV2ZW50IGV2ZW50
KElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OkNvbXBvc2l0aW9uVXBkYXRlKTsKKyAgICAg
ICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGpz
RXZlbnQsICJkYXRhIikpOworICAgICAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
c3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgICAgICAgICBzdHJWYWx1ZS5yZXNldChqc2NfdmFs
dWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgICAgICAgICBldmVudC5kYXRhID0gc3Ry
VmFsdWUuZ2V0KCk7CisgICAgICAgICAgICBtX2V2ZW50cy5hcHBlbmQoV1RGTW92ZShldmVudCkp
OworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc3RyVmFsdWUuZ2V0KCksICJjb21wb3Np
dGlvbmVuZCIpKSB7CisgICAgICAgICAgICBJbnB1dE1ldGhvZFRlc3Q6OkV2ZW50IGV2ZW50KElu
cHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OkNvbXBvc2l0aW9uRW5kKTsKKyAgICAgICAgICAg
IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGpzRXZlbnQs
ICJkYXRhIikpOworICAgICAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfc3RyaW5n
KHZhbHVlLmdldCgpKSk7CisgICAgICAgICAgICBzdHJWYWx1ZS5yZXNldChqc2NfdmFsdWVfdG9f
c3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgICAgICAgICBldmVudC5kYXRhID0gc3RyVmFsdWUu
Z2V0KCk7CisgICAgICAgICAgICBtX2V2ZW50cy5hcHBlbmQoV1RGTW92ZShldmVudCkpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fZXZlbnRzLnNpemUoKSA9PSBtX2V2ZW50c0V4cGVjdGVk
KQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAg
ICB2b2lkIGZvY3VzRWRpdGFibGUoKQorICAgIHsKKyAgICAgICAgcnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdGFibGUnKS5mb2N1
cygpIiwgbnVsbHB0cik7CisgICAgfQorCisgICAgdm9pZCByZXNldEVkaXRhYmxlKCkKKyAgICB7
CisgICAgICAgIHJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2VkaXRhYmxlJykudmFsdWUgPSAnJyIsIG51bGxwdHIpOworICAgICAgICBt
X2V2ZW50cy5jbGVhcigpOworICAgIH0KKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gZWRpdGFibGVW
YWx1ZSgpCisgICAgeworICAgICAgICBhdXRvKiBqc1Jlc3VsdCA9IHJ1bkphdmFTY3JpcHRBbmRX
YWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRhYmxlJykudmFs
dWUiLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIEdVbmlxdWVQdHI8Y2hhcj4oV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoanNSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2
b2lkIGtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHModW5zaWduZWQga2V5dmFsLCB1bnNpZ25lZCBl
dmVudHNDb3VudCwgdW5zaWduZWQgbW9kaWZpZXJzID0gMCkKKyAgICB7CisgICAgICAgIG1fZXZl
bnRzRXhwZWN0ZWQgPSBldmVudHNDb3VudDsKKyAgICAgICAga2V5U3Ryb2tlKGtleXZhbCwgbW9k
aWZpZXJzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICBt
X2V2ZW50c0V4cGVjdGVkID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGtleVN0cm9rZUhhbmRsZWRC
eUlucHV0TWV0aG9kQW5kV2FpdEZvckV2ZW50cyh1bnNpZ25lZCBrZXl2YWwsIHVuc2lnbmVkIGV2
ZW50c0NvdW50KQorICAgIHsKKyAgICAgICAgbV9jb250ZXh0LT5jb21taXROZXh0Q2hhcmFjdGVy
ID0gdHJ1ZTsKKyAgICAgICAga2V5U3Ryb2tlQW5kV2FpdEZvckV2ZW50cyhrZXl2YWwsIGV2ZW50
c0NvdW50KTsKKyAgICAgICAgbV9jb250ZXh0LT5jb21taXROZXh0Q2hhcmFjdGVyID0gZmFsc2U7
CisgICAgfQorCisgICAgdm9pZCBjbGlja0FuZFdhaXRGb3JFdmVudHModW5zaWduZWQgZXZlbnRz
Q291bnQpCisgICAgeworICAgICAgICBtX2V2ZW50c0V4cGVjdGVkID0gZXZlbnRzQ291bnQ7Cisg
ICAgICAgIGNsaWNrTW91c2VCdXR0b24oMCwgMCwgMSk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1
bihtX21haW5Mb29wKTsKKyAgICAgICAgbV9ldmVudHNFeHBlY3RlZCA9IDA7CisgICAgfQorCisg
ICAgR1JlZlB0cjxXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRNb2NrPiBtX2NvbnRleHQ7CisgICAg
VmVjdG9yPEV2ZW50PiBtX2V2ZW50czsKKyAgICB1bnNpZ25lZCBtX2V2ZW50c0V4cGVjdGVkIHsg
MCB9OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYktpdElucHV0TWV0aG9kQ29udGV4dFNpbXBs
ZShJbnB1dE1ldGhvZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Nl
dHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOworICAgIHRlc3QtPnNob3dJbldpbmRvd0Fu
ZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RIVE1MLCBudWxscHRy
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2Zh
bHNlKHRlc3QtPm1fY29udGV4dC0+ZW5hYmxlZCk7CisgICAgdGVzdC0+Zm9jdXNFZGl0YWJsZSgp
OworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9jb250ZXh0LT5lbmFibGVkKTsKKworICAgIC8v
IFNlbmQgYSBub3JtYWwgY2hhcmFjdGVyIG5vdCBoYW5kbGVkIGJ5IElNLgorICAgIHRlc3QtPmtl
eVN0cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZKGEpLCAzKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50
KHRlc3QtPm1fZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+
bV9ldmVudHNbMF0udHlwZSA9PSBJbnB1dE1ldGhvZFRlc3Q6OkV2ZW50OjpUeXBlOjpLZXlEb3du
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1fZXZlbnRzWzBdLmtleUNvZGUsID09LCA2
NSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXZlbnRzWzBdLmtleS5kYXRhKCksID09
LCAiYSIpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPm1fZXZlbnRzWzBdLmlzQ29tcG9zaW5n
KTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzFdLnR5cGUgPT0gSW5wdXRNZXRo
b2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5UHJlc3MpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQodGVz
dC0+bV9ldmVudHNbMV0ua2V5Q29kZSwgPT0sIDk3KTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3Qt
Pm1fZXZlbnRzWzJdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5VXAp
OworICAgIGdfYXNzZXJ0X2NtcHVpbnQodGVzdC0+bV9ldmVudHNbMl0ua2V5Q29kZSwgPT0sIDY1
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMl0ua2V5LmRhdGEoKSwgPT0s
ICJhIik7CisgICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+bV9ldmVudHNbMl0uaXNDb21wb3Npbmcp
OworICAgIHsKKyAgICAgICAgYXV0byBlZGl0YWJsZVZhbHVlID0gdGVzdC0+ZWRpdGFibGVWYWx1
ZSgpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZWRpdGFibGVWYWx1ZS5nZXQoKSwgPT0sICJh
Iik7CisgICAgfQorICAgIHRlc3QtPnJlc2V0RWRpdGFibGUoKTsKKworICAgIC8vIFNlbmQgYSBu
b3JtYWwgY2hhcmFjdGVyIGhhbmRsZWQgYnkgSU0uCisgICAgdGVzdC0+a2V5U3Ryb2tlSGFuZGxl
ZEJ5SW5wdXRNZXRob2RBbmRXYWl0Rm9yRXZlbnRzKEtFWShhKSwgMyk7CisgICAgZ19hc3NlcnRf
Y21wdWludCh0ZXN0LT5tX2V2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF90cnVl
KHRlc3QtPm1fZXZlbnRzWzBdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6
S2V5RG93bik7CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5tX2V2ZW50c1swXS5rZXlDb2Rl
LCA9PSwgNjUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2V2ZW50c1swXS5rZXkuZGF0
YSgpLCA9PSwgImEiKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2V2ZW50c1swXS5pc0Nv
bXBvc2luZyk7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1sxXS50eXBlID09IElu
cHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OktleVByZXNzKTsKKyAgICBnX2Fzc2VydF9jbXB1
aW50KHRlc3QtPm1fZXZlbnRzWzFdLmtleUNvZGUsID09LCA5Nyk7CisgICAgZ19hc3NlcnRfdHJ1
ZSh0ZXN0LT5tX2V2ZW50c1syXS50eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6
OktleVVwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1fZXZlbnRzWzJdLmtleUNvZGUs
ID09LCA2NSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXZlbnRzWzJdLmtleS5kYXRh
KCksID09LCAiYSIpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPm1fZXZlbnRzWzJdLmlzQ29t
cG9zaW5nKTsKKyAgICB7CisgICAgICAgIGF1dG8gZWRpdGFibGVWYWx1ZSA9IHRlc3QtPmVkaXRh
YmxlVmFsdWUoKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGVkaXRhYmxlVmFsdWUuZ2V0KCks
ID09LCAiYSIpOworICAgIH0KKyAgICB0ZXN0LT5yZXNldEVkaXRhYmxlKCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRTZXF1ZW5jZShJbnB1dE1ldGhvZFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFi
bGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1f
d2ViVmlldyksIFRSVUUpOworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBl
ZCgpOworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RIVE1MLCBudWxscHRyKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPm1fY29u
dGV4dC0+ZW5hYmxlZCk7CisgICAgdGVzdC0+Zm9jdXNFZGl0YWJsZSgpOworICAgIGdfYXNzZXJ0
X3RydWUodGVzdC0+bV9jb250ZXh0LT5lbmFibGVkKTsKKworICAgIC8vIENvbXBvc2UgdyArIGd0
ayArIEVudGVyLgorICAgIHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZKHcpLCA0
LCBDT05UUk9MX01BU0sgfCBTSElGVF9NQVNLKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1f
ZXZlbnRzWzBdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5RG93bik7
CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5tX2V2ZW50c1swXS5rZXlDb2RlLCA9PSwgMjI5
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMF0ua2V5LmRhdGEoKSwgPT0s
ICJVbmlkZW50aWZpZWQiKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2V2ZW50c1swXS5p
c0NvbXBvc2luZyk7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1sxXS50eXBlID09
IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OkNvbXBvc2l0aW9uU3RhcnQpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2V2ZW50c1sxXS5kYXRhLmRhdGEoKSwgPT0sICIiKTsKKyAg
ICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzJdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0
OjpFdmVudDo6VHlwZTo6Q29tcG9zaXRpb25VcGRhdGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXN0LT5tX2V2ZW50c1syXS5kYXRhLmRhdGEoKSwgPT0sICJ3Iik7CisgICAgZ19hc3NlcnRfdHJ1
ZSh0ZXN0LT5tX2V2ZW50c1szXS50eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6
OktleVVwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1fZXZlbnRzWzNdLmtleUNvZGUs
ID09LCA4Nyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXZlbnRzWzNdLmtleS5kYXRh
KCksID09LCAidyIpOworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9ldmVudHNbM10uaXNDb21w
b3NpbmcpOworICAgIHRlc3QtPndhaXQoMC4xKTsgLy8gRklYTUU6IHRoaXMgaXMgYSB3b3JrYXJv
dW5kIGZvciBleGlzdGluZyBidWcgd2hlbiBrZXkgZXZlbnRzIGFyZSBxdWV1ZWQuCisgICAgdGVz
dC0+bV9ldmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0LT5rZXlTdHJva2VBbmRXYWl0Rm9yRXZlbnRz
KEtFWShnKSwgMyk7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1swXS50eXBlID09
IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OktleURvd24pOworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQodGVzdC0+bV9ldmVudHNbMF0ua2V5Q29kZSwgPT0sIDIyOSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHRlc3QtPm1fZXZlbnRzWzBdLmtleS5kYXRhKCksID09LCAiVW5pZGVudGlmaWVkIik7
CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1swXS5pc0NvbXBvc2luZyk7CisgICAg
Z19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1sxXS50eXBlID09IElucHV0TWV0aG9kVGVzdDo6
RXZlbnQ6OlR5cGU6OkNvbXBvc2l0aW9uVXBkYXRlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVz
dC0+bV9ldmVudHNbMV0uZGF0YS5kYXRhKCksID09LCAid2ciKTsKKyAgICBnX2Fzc2VydF90cnVl
KHRlc3QtPm1fZXZlbnRzWzJdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6
S2V5VXApOworICAgIGdfYXNzZXJ0X2NtcHVpbnQodGVzdC0+bV9ldmVudHNbMl0ua2V5Q29kZSwg
PT0sIDcxKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMl0ua2V5LmRhdGEo
KSwgPT0sICJnIik7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1syXS5pc0NvbXBv
c2luZyk7CisgICAgdGVzdC0+d2FpdCgwLjEpOyAvLyBGSVhNRTogdGhpcyBpcyBhIHdvcmthcm91
bmQgZm9yIGV4aXN0aW5nIGJ1ZyB3aGVuIGtleSBldmVudHMgYXJlIHF1ZXVlZC4KKyAgICB0ZXN0
LT5tX2V2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMo
S0VZKHQpLCAzKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzBdLnR5cGUgPT0g
SW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5RG93bik7CisgICAgZ19hc3NlcnRfY21w
dWludCh0ZXN0LT5tX2V2ZW50c1swXS5rZXlDb2RlLCA9PSwgMjI5KTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodGVzdC0+bV9ldmVudHNbMF0ua2V5LmRhdGEoKSwgPT0sICJVbmlkZW50aWZpZWQiKTsK
KyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzBdLmlzQ29tcG9zaW5nKTsKKyAgICBn
X2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzFdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpF
dmVudDo6VHlwZTo6Q29tcG9zaXRpb25VcGRhdGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0
LT5tX2V2ZW50c1sxXS5kYXRhLmRhdGEoKSwgPT0sICJ3Z3QiKTsKKyAgICBnX2Fzc2VydF90cnVl
KHRlc3QtPm1fZXZlbnRzWzJdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6
S2V5VXApOworICAgIGdfYXNzZXJ0X2NtcHVpbnQodGVzdC0+bV9ldmVudHNbMl0ua2V5Q29kZSwg
PT0sIDg0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMl0ua2V5LmRhdGEo
KSwgPT0sICJ0Iik7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1syXS5pc0NvbXBv
c2luZyk7CisgICAgdGVzdC0+d2FpdCgwLjEpOyAvLyBGSVhNRTogdGhpcyBpcyBhIHdvcmthcm91
bmQgZm9yIGV4aXN0aW5nIGJ1ZyB3aGVuIGtleSBldmVudHMgYXJlIHF1ZXVlZC4KKyAgICB0ZXN0
LT5tX2V2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMo
S0VZKGspLCAzKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzBdLnR5cGUgPT0g
SW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5RG93bik7CisgICAgZ19hc3NlcnRfY21w
dWludCh0ZXN0LT5tX2V2ZW50c1swXS5rZXlDb2RlLCA9PSwgMjI5KTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodGVzdC0+bV9ldmVudHNbMF0ua2V5LmRhdGEoKSwgPT0sICJVbmlkZW50aWZpZWQiKTsK
KyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzBdLmlzQ29tcG9zaW5nKTsKKyAgICBn
X2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzFdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpF
dmVudDo6VHlwZTo6Q29tcG9zaXRpb25VcGRhdGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0
LT5tX2V2ZW50c1sxXS5kYXRhLmRhdGEoKSwgPT0sICJ3Z3RrIik7CisgICAgZ19hc3NlcnRfdHJ1
ZSh0ZXN0LT5tX2V2ZW50c1syXS50eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6
OktleVVwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1fZXZlbnRzWzJdLmtleUNvZGUs
ID09LCA3NSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXZlbnRzWzJdLmtleS5kYXRh
KCksID09LCAiayIpOworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9ldmVudHNbMl0uaXNDb21w
b3NpbmcpOworICAgIHRlc3QtPndhaXQoMC4xKTsgLy8gRklYTUU6IHRoaXMgaXMgYSB3b3JrYXJv
dW5kIGZvciBleGlzdGluZyBidWcgd2hlbiBrZXkgZXZlbnRzIGFyZSBxdWV1ZWQuCisgICAgdGVz
dC0+bV9ldmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0LT5rZXlTdHJva2VBbmRXYWl0Rm9yRXZlbnRz
KEtFWShJU09fRW50ZXIpLCAzKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzBd
LnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5RG93bik7CisgICAgZ19h
c3NlcnRfY21wdWludCh0ZXN0LT5tX2V2ZW50c1swXS5rZXlDb2RlLCA9PSwgMjI5KTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMF0ua2V5LmRhdGEoKSwgPT0sICJVbmlkZW50
aWZpZWQiKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzBdLmlzQ29tcG9zaW5n
KTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzFdLnR5cGUgPT0gSW5wdXRNZXRo
b2RUZXN0OjpFdmVudDo6VHlwZTo6Q29tcG9zaXRpb25FbmQpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXN0LT5tX2V2ZW50c1sxXS5kYXRhLmRhdGEoKSwgPT0sICJXZWJLaXRHVEsiKTsKKyAgICBn
X2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzJdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpF
dmVudDo6VHlwZTo6S2V5VXApOworICAgIGdfYXNzZXJ0X2NtcHVpbnQodGVzdC0+bV9ldmVudHNb
Ml0ua2V5Q29kZSwgPT0sIDEzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNb
Ml0ua2V5LmRhdGEoKSwgPT0sICJFbnRlciIpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPm1f
ZXZlbnRzWzJdLmlzQ29tcG9zaW5nKTsKKyAgICB7CisgICAgICAgIGF1dG8gZWRpdGFibGVWYWx1
ZSA9IHRlc3QtPmVkaXRhYmxlVmFsdWUoKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGVkaXRh
YmxlVmFsdWUuZ2V0KCksID09LCAiV2ViS2l0R1RLIik7CisgICAgfQorICAgIHRlc3QtPnJlc2V0
RWRpdGFibGUoKTsKKworICAgIC8vIENvbXBvc2UgdyArIHdwZSArIFNwYWNlLgorICAgIHRlc3Qt
PmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZKHcpLCA0LCBDT05UUk9MX01BU0sgfCBTSElG
VF9NQVNLKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzBdLnR5cGUgPT0gSW5w
dXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5RG93bik7CisgICAgZ19hc3NlcnRfY21wdWlu
dCh0ZXN0LT5tX2V2ZW50c1swXS5rZXlDb2RlLCA9PSwgMjI5KTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIodGVzdC0+bV9ldmVudHNbMF0ua2V5LmRhdGEoKSwgPT0sICJVbmlkZW50aWZpZWQiKTsKKyAg
ICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2V2ZW50c1swXS5pc0NvbXBvc2luZyk7CisgICAgZ19h
c3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1sxXS50eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZl
bnQ6OlR5cGU6OkNvbXBvc2l0aW9uU3RhcnQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5t
X2V2ZW50c1sxXS5kYXRhLmRhdGEoKSwgPT0sICIiKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3Qt
Pm1fZXZlbnRzWzJdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6Q29tcG9z
aXRpb25VcGRhdGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2V2ZW50c1syXS5kYXRh
LmRhdGEoKSwgPT0sICJ3Iik7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1szXS50
eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OktleVVwKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KHRlc3QtPm1fZXZlbnRzWzNdLmtleUNvZGUsID09LCA4Nyk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHRlc3QtPm1fZXZlbnRzWzNdLmtleS5kYXRhKCksID09LCAidyIpOworICAgIGdf
YXNzZXJ0X3RydWUodGVzdC0+bV9ldmVudHNbM10uaXNDb21wb3NpbmcpOworICAgIHRlc3QtPndh
aXQoMC4xKTsgLy8gRklYTUU6IHRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBleGlzdGluZyBidWcg
d2hlbiBrZXkgZXZlbnRzIGFyZSBxdWV1ZWQuCisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsK
KyAgICB0ZXN0LT5rZXlTdHJva2VBbmRXYWl0Rm9yRXZlbnRzKEtFWSh3KSwgMyk7CisgICAgZ19h
c3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1swXS50eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZl
bnQ6OlR5cGU6OktleURvd24pOworICAgIGdfYXNzZXJ0X2NtcHVpbnQodGVzdC0+bV9ldmVudHNb
MF0ua2V5Q29kZSwgPT0sIDIyOSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXZlbnRz
WzBdLmtleS5kYXRhKCksID09LCAiVW5pZGVudGlmaWVkIik7CisgICAgZ19hc3NlcnRfdHJ1ZSh0
ZXN0LT5tX2V2ZW50c1swXS5pc0NvbXBvc2luZyk7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5t
X2V2ZW50c1sxXS50eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OkNvbXBvc2l0
aW9uVXBkYXRlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMV0uZGF0YS5k
YXRhKCksID09LCAid3ciKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzJdLnR5
cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5VXApOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQodGVzdC0+bV9ldmVudHNbMl0ua2V5Q29kZSwgPT0sIDg3KTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMl0ua2V5LmRhdGEoKSwgPT0sICJ3Iik7CisgICAgZ19h
c3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1syXS5pc0NvbXBvc2luZyk7CisgICAgdGVzdC0+d2Fp
dCgwLjEpOyAvLyBGSVhNRTogdGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGV4aXN0aW5nIGJ1ZyB3
aGVuIGtleSBldmVudHMgYXJlIHF1ZXVlZC4KKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwor
ICAgIHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZKHApLCAzKTsKKyAgICBnX2Fz
c2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzBdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVu
dDo6VHlwZTo6S2V5RG93bik7CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5tX2V2ZW50c1sw
XS5rZXlDb2RlLCA9PSwgMjI5KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNb
MF0ua2V5LmRhdGEoKSwgPT0sICJVbmlkZW50aWZpZWQiKTsKKyAgICBnX2Fzc2VydF90cnVlKHRl
c3QtPm1fZXZlbnRzWzBdLmlzQ29tcG9zaW5nKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1f
ZXZlbnRzWzFdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6Q29tcG9zaXRp
b25VcGRhdGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2V2ZW50c1sxXS5kYXRhLmRh
dGEoKSwgPT0sICJ3d3AiKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzJdLnR5
cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5VXApOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQodGVzdC0+bV9ldmVudHNbMl0ua2V5Q29kZSwgPT0sIDgwKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMl0ua2V5LmRhdGEoKSwgPT0sICJwIik7CisgICAgZ19h
c3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1syXS5pc0NvbXBvc2luZyk7CisgICAgdGVzdC0+d2Fp
dCgwLjEpOyAvLyBGSVhNRTogdGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGV4aXN0aW5nIGJ1ZyB3
aGVuIGtleSBldmVudHMgYXJlIHF1ZXVlZC4KKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwor
ICAgIHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZKGUpLCAzKTsKKyAgICBnX2Fz
c2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzBdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVu
dDo6VHlwZTo6S2V5RG93bik7CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5tX2V2ZW50c1sw
XS5rZXlDb2RlLCA9PSwgMjI5KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNb
MF0ua2V5LmRhdGEoKSwgPT0sICJVbmlkZW50aWZpZWQiKTsKKyAgICBnX2Fzc2VydF90cnVlKHRl
c3QtPm1fZXZlbnRzWzBdLmlzQ29tcG9zaW5nKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1f
ZXZlbnRzWzFdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6Q29tcG9zaXRp
b25VcGRhdGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2V2ZW50c1sxXS5kYXRhLmRh
dGEoKSwgPT0sICJ3d3BlIik7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1syXS50
eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OktleVVwKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KHRlc3QtPm1fZXZlbnRzWzJdLmtleUNvZGUsID09LCA2OSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHRlc3QtPm1fZXZlbnRzWzJdLmtleS5kYXRhKCksID09LCAiZSIpOworICAgIGdf
YXNzZXJ0X3RydWUodGVzdC0+bV9ldmVudHNbMl0uaXNDb21wb3NpbmcpOworICAgIHRlc3QtPndh
aXQoMC4xKTsgLy8gRklYTUU6IHRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBleGlzdGluZyBidWcg
d2hlbiBrZXkgZXZlbnRzIGFyZSBxdWV1ZWQuCisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsK
KyAgICB0ZXN0LT5rZXlTdHJva2VBbmRXYWl0Rm9yRXZlbnRzKEtFWShzcGFjZSksIDMpOworICAg
IGdfYXNzZXJ0X3RydWUodGVzdC0+bV9ldmVudHNbMF0udHlwZSA9PSBJbnB1dE1ldGhvZFRlc3Q6
OkV2ZW50OjpUeXBlOjpLZXlEb3duKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1fZXZl
bnRzWzBdLmtleUNvZGUsID09LCAyMjkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2V2
ZW50c1swXS5rZXkuZGF0YSgpLCA9PSwgIlVuaWRlbnRpZmllZCIpOworICAgIGdfYXNzZXJ0X3Ry
dWUodGVzdC0+bV9ldmVudHNbMF0uaXNDb21wb3NpbmcpOworICAgIGdfYXNzZXJ0X3RydWUodGVz
dC0+bV9ldmVudHNbMV0udHlwZSA9PSBJbnB1dE1ldGhvZFRlc3Q6OkV2ZW50OjpUeXBlOjpDb21w
b3NpdGlvbkVuZCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXZlbnRzWzFdLmRhdGEu
ZGF0YSgpLCA9PSwgIldQRVdlYktpdCIpOworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9ldmVu
dHNbMl0udHlwZSA9PSBJbnB1dE1ldGhvZFRlc3Q6OkV2ZW50OjpUeXBlOjpLZXlVcCk7CisgICAg
Z19hc3NlcnRfY21wdWludCh0ZXN0LT5tX2V2ZW50c1syXS5rZXlDb2RlLCA9PSwgMzIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2V2ZW50c1syXS5rZXkuZGF0YSgpLCA9PSwgIiAiKTsK
KyAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2V2ZW50c1syXS5pc0NvbXBvc2luZyk7CisgICAg
eworICAgICAgICBhdXRvIGVkaXRhYmxlVmFsdWUgPSB0ZXN0LT5lZGl0YWJsZVZhbHVlKCk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cihlZGl0YWJsZVZhbHVlLmdldCgpLCA9PSwgIldQRVdlYktp
dCIpOworICAgIH0KKyAgICB0ZXN0LT5yZXNldEVkaXRhYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbnZhbGlkU2VxdWVuY2UoSW5wdXRNZXRob2RU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5t
X3dlYlZpZXcpLCBUUlVFKTsKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBw
ZWQoKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgbnVsbHB0cik7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2Nv
bnRleHQtPmVuYWJsZWQpOworICAgIHRlc3QtPmZvY3VzRWRpdGFibGUoKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKHRlc3QtPm1fY29udGV4dC0+ZW5hYmxlZCk7CisgICAgLy8gQ29tcG9zZSB3ICsgdyAr
IFNwYWNlIC0+IGludmFsaWQgc2VxdWVuY2UuCisgICAgdGVzdC0+a2V5U3Ryb2tlQW5kV2FpdEZv
ckV2ZW50cyhLRVkodyksIDQsIENPTlRST0xfTUFTSyB8IFNISUZUX01BU0spOworICAgIGdfYXNz
ZXJ0X3RydWUodGVzdC0+bV9ldmVudHNbMF0udHlwZSA9PSBJbnB1dE1ldGhvZFRlc3Q6OkV2ZW50
OjpUeXBlOjpLZXlEb3duKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1fZXZlbnRzWzBd
LmtleUNvZGUsID09LCAyMjkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2V2ZW50c1sw
XS5rZXkuZGF0YSgpLCA9PSwgIlVuaWRlbnRpZmllZCIpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHRl
c3QtPm1fZXZlbnRzWzBdLmlzQ29tcG9zaW5nKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1f
ZXZlbnRzWzFdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6Q29tcG9zaXRp
b25TdGFydCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXZlbnRzWzFdLmRhdGEuZGF0
YSgpLCA9PSwgIiIpOworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9ldmVudHNbMl0udHlwZSA9
PSBJbnB1dE1ldGhvZFRlc3Q6OkV2ZW50OjpUeXBlOjpDb21wb3NpdGlvblVwZGF0ZSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXZlbnRzWzJdLmRhdGEuZGF0YSgpLCA9PSwgInciKTsK
KyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzNdLnR5cGUgPT0gSW5wdXRNZXRob2RU
ZXN0OjpFdmVudDo6VHlwZTo6S2V5VXApOworICAgIGdfYXNzZXJ0X2NtcHVpbnQodGVzdC0+bV9l
dmVudHNbM10ua2V5Q29kZSwgPT0sIDg3KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9l
dmVudHNbM10ua2V5LmRhdGEoKSwgPT0sICJ3Iik7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5t
X2V2ZW50c1szXS5pc0NvbXBvc2luZyk7CisgICAgdGVzdC0+d2FpdCgwLjEpOyAvLyBGSVhNRTog
dGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGV4aXN0aW5nIGJ1ZyB3aGVuIGtleSBldmVudHMgYXJl
IHF1ZXVlZC4KKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmtleVN0cm9r
ZUFuZFdhaXRGb3JFdmVudHMoS0VZKHcpLCAzKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1f
ZXZlbnRzWzBdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5RG93bik7
CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5tX2V2ZW50c1swXS5rZXlDb2RlLCA9PSwgMjI5
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMF0ua2V5LmRhdGEoKSwgPT0s
ICJVbmlkZW50aWZpZWQiKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzBdLmlz
Q29tcG9zaW5nKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzFdLnR5cGUgPT0g
SW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6Q29tcG9zaXRpb25VcGRhdGUpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2V2ZW50c1sxXS5kYXRhLmRhdGEoKSwgPT0sICJ3dyIpOwor
ICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9ldmVudHNbMl0udHlwZSA9PSBJbnB1dE1ldGhvZFRl
c3Q6OkV2ZW50OjpUeXBlOjpLZXlVcCk7CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5tX2V2
ZW50c1syXS5rZXlDb2RlLCA9PSwgODcpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2V2
ZW50c1syXS5rZXkuZGF0YSgpLCA9PSwgInciKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1f
ZXZlbnRzWzJdLmlzQ29tcG9zaW5nKTsKKyAgICB0ZXN0LT53YWl0KDAuMSk7IC8vIEZJWE1FOiB0
aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgZXhpc3RpbmcgYnVnIHdoZW4ga2V5IGV2ZW50cyBhcmUg
cXVldWVkLgorICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7CisgICAgdGVzdC0+a2V5U3Ryb2tl
QW5kV2FpdEZvckV2ZW50cyhLRVkoc3BhY2UpLCAzKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3Qt
Pm1fZXZlbnRzWzBdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5RG93
bik7CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5tX2V2ZW50c1swXS5rZXlDb2RlLCA9PSwg
MjI5KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMF0ua2V5LmRhdGEoKSwg
PT0sICJVbmlkZW50aWZpZWQiKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzBd
LmlzQ29tcG9zaW5nKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzFdLnR5cGUg
PT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6Q29tcG9zaXRpb25FbmQpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2V2ZW50c1sxXS5kYXRhLmRhdGEoKSwgPT0sICJ3Iik7Cisg
ICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1syXS50eXBlID09IElucHV0TWV0aG9kVGVz
dDo6RXZlbnQ6OlR5cGU6OktleVVwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1fZXZl
bnRzWzJdLmtleUNvZGUsID09LCAzMik7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXZl
bnRzWzJdLmtleS5kYXRhKCksID09LCAiICIpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPm1f
ZXZlbnRzWzJdLmlzQ29tcG9zaW5nKTsKKyAgICB7CisgICAgICAgIGF1dG8gZWRpdGFibGVWYWx1
ZSA9IHRlc3QtPmVkaXRhYmxlVmFsdWUoKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGVkaXRh
YmxlVmFsdWUuZ2V0KCksID09LCAidyIpOworICAgIH0KKyAgICB0ZXN0LT5yZXNldEVkaXRhYmxl
KCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRDYW5jZWxT
ZXF1ZW5jZShJbnB1dE1ldGhvZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgd2Vi
a2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOworICAgIHRlc3QtPnNob3dJbldp
bmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RIVE1MLCBu
dWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNz
ZXJ0X2ZhbHNlKHRlc3QtPm1fY29udGV4dC0+ZW5hYmxlZCk7CisgICAgdGVzdC0+Zm9jdXNFZGl0
YWJsZSgpOworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9jb250ZXh0LT5lbmFibGVkKTsKKyAg
ICAvLyBDb21wb3NlIHcgKyB3ICsgRXNjYXBlIC0+IGNhbmNlbCBzZXF1ZW5jZS4KKyAgICB0ZXN0
LT5rZXlTdHJva2VBbmRXYWl0Rm9yRXZlbnRzKEtFWSh3KSwgNCwgQ09OVFJPTF9NQVNLIHwgU0hJ
RlRfTUFTSyk7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1swXS50eXBlID09IElu
cHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OktleURvd24pOworICAgIGdfYXNzZXJ0X2NtcHVp
bnQodGVzdC0+bV9ldmVudHNbMF0ua2V5Q29kZSwgPT0sIDIyOSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHRlc3QtPm1fZXZlbnRzWzBdLmtleS5kYXRhKCksID09LCAiVW5pZGVudGlmaWVkIik7Cisg
ICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+bV9ldmVudHNbMF0uaXNDb21wb3NpbmcpOworICAgIGdf
YXNzZXJ0X3RydWUodGVzdC0+bV9ldmVudHNbMV0udHlwZSA9PSBJbnB1dE1ldGhvZFRlc3Q6OkV2
ZW50OjpUeXBlOjpDb21wb3NpdGlvblN0YXJ0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+
bV9ldmVudHNbMV0uZGF0YS5kYXRhKCksID09LCAiIik7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0
LT5tX2V2ZW50c1syXS50eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OkNvbXBv
c2l0aW9uVXBkYXRlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMl0uZGF0
YS5kYXRhKCksID09LCAidyIpOworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9ldmVudHNbM10u
dHlwZSA9PSBJbnB1dE1ldGhvZFRlc3Q6OkV2ZW50OjpUeXBlOjpLZXlVcCk7CisgICAgZ19hc3Nl
cnRfY21wdWludCh0ZXN0LT5tX2V2ZW50c1szXS5rZXlDb2RlLCA9PSwgODcpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih0ZXN0LT5tX2V2ZW50c1szXS5rZXkuZGF0YSgpLCA9PSwgInciKTsKKyAgICBn
X2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzNdLmlzQ29tcG9zaW5nKTsKKyAgICB0ZXN0LT53
YWl0KDAuMSk7IC8vIEZJWE1FOiB0aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgZXhpc3RpbmcgYnVn
IHdoZW4ga2V5IGV2ZW50cyBhcmUgcXVldWVkLgorICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7
CisgICAgdGVzdC0+a2V5U3Ryb2tlQW5kV2FpdEZvckV2ZW50cyhLRVkoRXNjYXBlKSwgMyk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1swXS50eXBlID09IElucHV0TWV0aG9kVGVz
dDo6RXZlbnQ6OlR5cGU6OktleURvd24pOworICAgIGdfYXNzZXJ0X2NtcHVpbnQodGVzdC0+bV9l
dmVudHNbMF0ua2V5Q29kZSwgPT0sIDIyOSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1f
ZXZlbnRzWzBdLmtleS5kYXRhKCksID09LCAiVW5pZGVudGlmaWVkIik7CisgICAgZ19hc3NlcnRf
dHJ1ZSh0ZXN0LT5tX2V2ZW50c1swXS5pc0NvbXBvc2luZyk7CisgICAgZ19hc3NlcnRfdHJ1ZSh0
ZXN0LT5tX2V2ZW50c1sxXS50eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OkNv
bXBvc2l0aW9uRW5kKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMV0uZGF0
YS5kYXRhKCksID09LCAiIik7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1syXS50
eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OktleVVwKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KHRlc3QtPm1fZXZlbnRzWzJdLmtleUNvZGUsID09LCAyNyk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHRlc3QtPm1fZXZlbnRzWzJdLmtleS5kYXRhKCksID09LCAiRXNjYXBlIik7Cisg
ICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+bV9ldmVudHNbMl0uaXNDb21wb3NpbmcpOworICAgIHsK
KyAgICAgICAgYXV0byBlZGl0YWJsZVZhbHVlID0gdGVzdC0+ZWRpdGFibGVWYWx1ZSgpOworICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIoZWRpdGFibGVWYWx1ZS5nZXQoKSwgPT0sICIiKTsKKyAgICB9
CisgICAgdGVzdC0+cmVzZXRFZGl0YWJsZSgpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0
SW5wdXRNZXRob2RDb250ZXh0UmVzZXQoSW5wdXRNZXRob2RUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMo
d2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKKyAg
ICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICB0ZXN0LT5sb2Fk
SHRtbCh0ZXN0SFRNTCwgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2NvbnRleHQtPmVuYWJsZWQpOworICAg
IHRlc3QtPmZvY3VzRWRpdGFibGUoKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fY29udGV4
dC0+ZW5hYmxlZCk7CisgICAgLy8gQ29tcG9zZSB3ICsgdyArIGNsaWNrIC0+IHJlc2V0IHNlcXVl
bmNlLgorICAgIHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZKHcpLCA0LCBDT05U
Uk9MX01BU0sgfCBTSElGVF9NQVNLKTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fZXZlbnRz
WzBdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVudDo6VHlwZTo6S2V5RG93bik7CisgICAg
Z19hc3NlcnRfY21wdWludCh0ZXN0LT5tX2V2ZW50c1swXS5rZXlDb2RlLCA9PSwgMjI5KTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9ldmVudHNbMF0ua2V5LmRhdGEoKSwgPT0sICJVbmlk
ZW50aWZpZWQiKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2V2ZW50c1swXS5pc0NvbXBv
c2luZyk7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1sxXS50eXBlID09IElucHV0
TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OkNvbXBvc2l0aW9uU3RhcnQpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXN0LT5tX2V2ZW50c1sxXS5kYXRhLmRhdGEoKSwgPT0sICIiKTsKKyAgICBnX2Fz
c2VydF90cnVlKHRlc3QtPm1fZXZlbnRzWzJdLnR5cGUgPT0gSW5wdXRNZXRob2RUZXN0OjpFdmVu
dDo6VHlwZTo6Q29tcG9zaXRpb25VcGRhdGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5t
X2V2ZW50c1syXS5kYXRhLmRhdGEoKSwgPT0sICJ3Iik7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0
LT5tX2V2ZW50c1szXS50eXBlID09IElucHV0TWV0aG9kVGVzdDo6RXZlbnQ6OlR5cGU6OktleVVw
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1fZXZlbnRzWzNdLmtleUNvZGUsID09LCA4
Nyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXZlbnRzWzNdLmtleS5kYXRhKCksID09
LCAidyIpOworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9ldmVudHNbM10uaXNDb21wb3Npbmcp
OworICAgIHRlc3QtPndhaXQoMC4xKTsgLy8gRklYTUU6IHRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciBleGlzdGluZyBidWcgd2hlbiBrZXkgZXZlbnRzIGFyZSBxdWV1ZWQuCisgICAgdGVzdC0+bV9l
dmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0LT5jbGlja0FuZFdhaXRGb3JFdmVudHMoMSk7CisgICAg
Z19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2V2ZW50c1swXS50eXBlID09IElucHV0TWV0aG9kVGVzdDo6
RXZlbnQ6OlR5cGU6OkNvbXBvc2l0aW9uRW5kKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+
bV9ldmVudHNbMF0uZGF0YS5kYXRhKCksID09LCAidyIpOworICAgIHsKKyAgICAgICAgYXV0byBl
ZGl0YWJsZVZhbHVlID0gdGVzdC0+ZWRpdGFibGVWYWx1ZSgpOworICAgICAgICBnX2Fzc2VydF9j
bXBzdHIoZWRpdGFibGVWYWx1ZS5nZXQoKSwgPT0sICJ3Iik7CisgICAgfQorICAgIHRlc3QtPnJl
c2V0RWRpdGFibGUoKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIElucHV0TWV0aG9k
VGVzdDo6YWRkKCJXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQiLCAic2ltcGxlIiwgdGVzdFdlYktp
dElucHV0TWV0aG9kQ29udGV4dFNpbXBsZSk7CisgICAgSW5wdXRNZXRob2RUZXN0OjphZGQoIldl
YktpdElucHV0TWV0aG9kQ29udGV4dCIsICJzZXF1ZW5jZSIsIHRlc3RXZWJLaXRJbnB1dE1ldGhv
ZENvbnRleHRTZXF1ZW5jZSk7CisgICAgSW5wdXRNZXRob2RUZXN0OjphZGQoIldlYktpdElucHV0
TWV0aG9kQ29udGV4dCIsICJpbnZhbGlkLXNlcXVlbmNlIiwgdGVzdFdlYktpdElucHV0TWV0aG9k
Q29udGV4dEludmFsaWRTZXF1ZW5jZSk7CisgICAgSW5wdXRNZXRob2RUZXN0OjphZGQoIldlYktp
dElucHV0TWV0aG9kQ29udGV4dCIsICJjYW5jZWwtc2VxdWVuY2UiLCB0ZXN0V2ViS2l0SW5wdXRN
ZXRob2RDb250ZXh0Q2FuY2VsU2VxdWVuY2UpOworICAgIElucHV0TWV0aG9kVGVzdDo6YWRkKCJX
ZWJLaXRJbnB1dE1ldGhvZENvbnRleHQiLCAicmVzZXQiLCB0ZXN0V2ViS2l0SW5wdXRNZXRob2RD
b250ZXh0UmVzZXQpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKworfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9nbGliL0NNYWtlTGlzdHMudHh0CmluZGV4IDNmNDlmODViNWNjLi4xMmFhZjVmMTMyYyAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL0NNYWtlTGlzdHMudHh0CisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9DTWFrZUxpc3RzLnR4dApAQCAtMTQzLDYgKzE0Myw3
IEBAIEFERF9XSzJfVEVTVChUZXN0V2Vic2l0ZURhdGEgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2ViCiBBRERfV0syX1RFU1QoVGVzdENvbnNvbGVNZXNz
YWdlICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvbnNv
bGVNZXNzYWdlLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0RE9NRWxlbWVudCAke1RPT0xTX0RJUn0v
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RET01FbGVtZW50LmNwcCkKIEFERF9X
SzJfVEVTVChUZXN0R2VvbG9jYXRpb25NYW5hZ2VyICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdEdlb2xvY2F0aW9uTWFuYWdlci5jcHApCitBRERfV0syX1RF
U1QoVGVzdElucHV0TWV0aG9kQ29udGV4dCAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHTGliL1Rlc3RJbnB1dE1ldGhvZENvbnRleHQuY3BwKQogCiAjIEZJWE1FOiBFbmFi
bGUgZm9yIFdQRQogaWYgKFBPUlQgU1RSRVFVQUwgIkdUSyIpCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJWaWV3VGVzdC5oIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2ViVmlld1Rlc3QuaAppbmRleCBjNzczMzU1OGU1YS4u
YzNmZGQ5ODI1ODkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRH
TGliL1dlYlZpZXdUZXN0LmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdM
aWIvV2ViVmlld1Rlc3QuaApAQCAtNzEsNiArNzEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKFdQRSkKKyAgICB2b2lkIHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgp
IHsgc2hvd0luV2luZG93KCk7IH07CiAgICAgdm9pZCBzaG93SW5XaW5kb3coKTsKICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi93cGUvV2Vi
Vmlld1Rlc3RXUEUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvd3Bl
L1dlYlZpZXdUZXN0V1BFLmNwcAppbmRleCAwZDBlYzBiOWRiZC4uMGExN2I1ODVlZTYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGliL3dwZS9XZWJWaWV3VGVz
dFdQRS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvd3BlL1dl
YlZpZXdUZXN0V1BFLmNwcApAQCAtNjAsMTAgKzYwLDIyIEBAIHZvaWQgV2ViVmlld1Rlc3Q6Om1v
dXNlTW92ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgbW91c2VNb2RpZmllcnMpCiAKIHZvaWQg
V2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24oaW50IHgsIGludCB5LCB1bnNpZ25lZCBidXR0
b24sIHVuc2lnbmVkIG1vdXNlTW9kaWZpZXJzKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQu
CisgICAgYXV0byogYmFja2VuZCA9IHdlYmtpdF93ZWJfdmlld19iYWNrZW5kX2dldF93cGVfYmFj
a2VuZCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tlbmQobV93ZWJWaWV3KSk7CisgICAgc3RydWN0
IHdwZV9pbnB1dF9wb2ludGVyX2V2ZW50IGV2ZW50IHsgd3BlX2lucHV0X3BvaW50ZXJfZXZlbnRf
dHlwZV9idXR0b24sIDAsIHgsIHksIGJ1dHRvbiwgMSwgbW91c2VNb2RpZmllcnMgfTsKKyAgICB3
cGVfdmlld19iYWNrZW5kX2Rpc3BhdGNoX3BvaW50ZXJfZXZlbnQoYmFja2VuZCwgJmV2ZW50KTsK
KyAgICBldmVudC5zdGF0ZSA9IDA7CisgICAgd3BlX3ZpZXdfYmFja2VuZF9kaXNwYXRjaF9wb2lu
dGVyX2V2ZW50KGJhY2tlbmQsICZldmVudCk7CiB9CiAKIHZvaWQgV2ViVmlld1Rlc3Q6OmtleVN0
cm9rZSh1bnNpZ25lZCBrZXlWYWwsIHVuc2lnbmVkIGtleU1vZGlmaWVycykKIHsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50LgorICAgIGF1dG8qIGJhY2tlbmQgPSB3ZWJraXRfd2ViX3ZpZXdfYmFj
a2VuZF9nZXRfd3BlX2JhY2tlbmQod2Via2l0X3dlYl92aWV3X2dldF9iYWNrZW5kKG1fd2ViVmll
dykpOworICAgIHN0cnVjdCB3cGVfaW5wdXRfeGtiX2tleW1hcF9lbnRyeSogZW50cmllczsKKyAg
ICB1aW50MzJfdCBlbnRyaWVzQ291bnQ7CisgICAgd3BlX2lucHV0X3hrYl9jb250ZXh0X2dldF9l
bnRyaWVzX2Zvcl9rZXlfY29kZSh3cGVfaW5wdXRfeGtiX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwg
a2V5VmFsLCAmZW50cmllcywgJmVudHJpZXNDb3VudCk7CisgICAgc3RydWN0IHdwZV9pbnB1dF9r
ZXlib2FyZF9ldmVudCBldmVudCB7IDAsIGtleVZhbCwgZW50cmllc0NvdW50ID8gZW50cmllc1sw
XS5oYXJkd2FyZV9rZXlfY29kZSA6IDAsIHRydWUsIGtleU1vZGlmaWVycyB9OworICAgIHdwZV92
aWV3X2JhY2tlbmRfZGlzcGF0Y2hfa2V5Ym9hcmRfZXZlbnQoYmFja2VuZCwgJmV2ZW50KTsKKyAg
ICBldmVudC5wcmVzc2VkID0gZmFsc2U7CisgICAgd3BlX3ZpZXdfYmFja2VuZF9kaXNwYXRjaF9r
ZXlib2FyZF9ldmVudChiYWNrZW5kLCAmZXZlbnQpOworICAgIGZyZWUoZW50cmllcyk7CiB9Cg==
</data>
<flag name="review"
          id="400256"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>