<?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>58822</bug_id>
          
          <creation_ts>2011-04-18 13:47:47 -0700</creation_ts>
          <short_desc>100% reproducible crash when right-clicking any element in Web Inspector on any page</short_desc>
          <delta_ts>2011-04-19 15:35:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>388006</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-18 13:47:47 -0700</bug_when>
    <thetext>Steps to reproduce:

1. Go to http://webkit.org
2. Open the web inspector
3. Scroll to the top of the inspector so you can see this page&apos;s &lt;html&gt; element. Don&apos;t click on it.
4. Right click and choose Add Attribute.

&lt;rdar://problem/9279698&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388018</commentid>
    <comment_count>1</comment_count>
      <attachid>90087</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-18 13:57:49 -0700</bug_when>
    <thetext>Created attachment 90087
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388084</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-18 15:05:07 -0700</bug_when>
    <thetext>Attachment 90087 did not build on mac:
Build output: http://queues.webkit.org/results/8474043</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388126</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-04-18 15:53:07 -0700</bug_when>
    <thetext>Attachment 90087 did not build on win:
Build output: http://queues.webkit.org/results/8475045</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388138</commentid>
    <comment_count>4</comment_count>
      <attachid>90111</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-18 16:06:27 -0700</bug_when>
    <thetext>Created attachment 90111
with build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388714</commentid>
    <comment_count>5</comment_count>
      <attachid>90111</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-19 12:46:40 -0700</bug_when>
    <thetext>Comment on attachment 90111
with build fixes

I want to fix this differently, and also to split refactoring into a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388786</commentid>
    <comment_count>6</comment_count>
      <attachid>90251</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-19 14:13:50 -0700</bug_when>
    <thetext>Created attachment 90251
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388806</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-19 14:37:33 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/84297&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388853</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-19 15:35:49 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/84297 might have broken Qt Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90087</attachid>
            <date>2011-04-18 13:57:49 -0700</date>
            <delta_ts>2011-04-18 16:06:27 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>EditorState.txt</filename>
            <type>text/plain</type>
            <size>66346</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MTc5KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTEtMDQtMTggIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgMTAwJSByZXByb2R1Y2libGUgY3Jhc2ggd2hlbiByaWdodC1j
bGlja2luZyBhbnkgZWxlbWVudCBpbiBXZWIgSW5zcGVjdG9yIG9uIGFueSBwYWdlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgyMgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vOTI3OTY5OD4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNz
YWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvRWRpdG9yU3RhdGUuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYktpdDIvU2hhcmVkL1NlbGVjdGlvblN0YXRlLmguCisgICAgICAgIChXZWJLaXQ6OkVk
aXRvclN0YXRlOjpFZGl0b3JTdGF0ZSk6CisgICAgICAgICogU2hhcmVkL1NlbGVjdGlvblN0YXRl
Lmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL21hYy9UZXh0SW5wdXRTdGF0ZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9QYWdlQ2xpZW50SW1wbC5tbTogKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmludGVycHJldEtl
eUV2ZW50KToKKyAgICAgICAgQ29tYmluZWQgVGV4dElucHV0U3RhdGUgYW5kIEVkaXRvclN0YXRl
IGluIG9uZSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHVwZGF0ZWQgd2hlbmV2ZXIgd2UgZ2V0CisgICAg
ICAgIGEgY2hhbmNlIHRvLiBUaGVyZSBpcyBubyBzZW5zZSB0byBrZWVwIHBvc3NpYmx5IHN0YWxl
IFNlbGVjdGlvblN0YXRlIGRhdGEgd2hlbiB3ZSBoYXZlIGFscmVhZHkKKyAgICAgICAgcmVxdWVz
dGVkIHRoZSBtb3N0IHJlY2VudCBkYXRhIHN5bmNocm9ub3VzbHkuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyB2YWxpZFJlcXVlc3Rv
ckZvclNlbmRUeXBlOnJldHVyblR5cGU6XSk6IFVwZGF0ZSBFZGl0b3JTdGF0ZSBzeW5jaHJvbm91
c2x5LCBiZWNhdXNlCisgICAgICAgIGl0J3MgbGlrZWx5IHRoYXQgYXN5bmNocm9ub3VzIG5vdGlm
aWNhdGlvbiBoYXNuJ3QgYmVlbiBoYW5kbGVkIHlldC4KKyAgICAgICAgKC1bV0tWaWV3IHZhbGlk
YXRlVXNlckludGVyZmFjZUl0ZW06XSk6IFVwZGF0ZWQgZm9yIHN0cnVjdCBtZXJnaW5nLgorICAg
ICAgICAoLVtXS1ZpZXcgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50Ol0pOiBEaXR0
by4KKyAgICAgICAgKC1bV0tWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXS1ZpZXcgaW5zZXJ0VGV4dDpyZXBsYWNlbWVudFJhbmdlOl0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV0tWaWV3IF9oYW5kbGVTdHlsZUtleUVxdWl2YWxlbnQ6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXS1ZpZXcgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdKTogRGl0dG8uCisg
ICAgICAgICgtW1dLVmlldyBpbnB1dENvbnRleHRdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmll
dyBoYXNNYXJrZWRUZXh0XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgdW5tYXJrVGV4dF0p
OiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHNldE1hcmtlZFRleHQ6c2VsZWN0ZWRSYW5nZTpy
ZXBsYWNlbWVudFJhbmdlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IGF0dHJpYnV0ZWRT
dWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlOmFjdHVhbFJhbmdlOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IF9pbnRlcnByZXRLZXlFdmVudDpzYXZpbmdDb21tYW5kc1RvOldlYkNvcmU6Ol0p
OiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF91cGRhdGVTZWN1cmVJbnB1dFN0YXRlXSk6IERp
dHRvLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDogKFdlYktpdDo6V2ViUGFnZVByb3h5
OjplZGl0b3JTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFzU2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6aXNDb250ZW50RWRpdGFibGUpOgorICAgICAgICBFZGl0b3JTdGF0
ZWxpdmVzIGluIFdlYlBhZ2VQcm94eSBjbGFzcywgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwYXNz
IGl0IGluIGZ1bmN0aW9uIGNhbGxzLAorICAgICAgICBsaWtlIHdlIGRpZCB3aXRoIFRleHRJbnB1
dFN0YXRlLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpleGVj
dXRlS2V5cHJlc3NDb21tYW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXBk
YXRlRWRpdG9yU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmludGVycHJl
dFF1ZXVlZEtleUV2ZW50KToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZWRpdG9yU3RhdGUpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVFZGl0aW5nS2V5Ym9h
cmRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldENvbXBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6aW5zZXJ0VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmV4
ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0RWRp
dG9yU3RhdGUpOgorICAgICAgICBVcGRhdGVkIGZvciBhYm92ZSBtZW50aW9uZWQgY2hhbmdlcy4K
KwogMjAxMS0wNC0xOCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIEZpeCBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9t
ZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIv
bWVzc2FnZXMucHkJKHJldmlzaW9uIDg0MDU3KQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsMTMgKzI3MywxMiBAQCBk
ZWYgc3RydWN0X29yX2NsYXNzKG5hbWVzcGFjZSwgdHlwZSk6CiAgICAgICAgICdXZWJLaXQ6OkNv
bnRleHRNZW51U3RhdGUnLAogICAgICAgICAnV2ViS2l0OjpEaWN0aW9uYXJ5UG9wdXBJbmZvJywK
ICAgICAgICAgJ1dlYktpdDo6RHJhd2luZ0FyZWFJbmZvJywKKyAgICAgICAgJ1dlYktpdDo6RWRp
dG9yU3RhdGUnLAogICAgICAgICAnV2ViS2l0OjpQbGF0Zm9ybVBvcHVwTWVudURhdGEnLAogICAg
ICAgICAnV2ViS2l0OjpQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJywKICAgICAgICAg
J1dlYktpdDo6UHJpbnRJbmZvJywKICAgICAgICAgJ1dlYktpdDo6U2VjdXJpdHlPcmlnaW5EYXRh
JywKLSAgICAgICAgJ1dlYktpdDo6U2VsZWN0aW9uU3RhdGUnLAogICAgICAgICAnV2ViS2l0OjpU
ZXh0Q2hlY2tlclN0YXRlJywKLSAgICAgICAgJ1dlYktpdDo6VGV4dElucHV0U3RhdGUnLAogICAg
ICAgICAnV2ViS2l0OjpXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJywKICAgICAgICAgJ1dlYktpdDo6
V2ViT3BlblBhbmVsUGFyYW1ldGVyczo6RGF0YScsCiAgICAgICAgICdXZWJLaXQ6OldlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMnLApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmgJ
KHJldmlzaW9uIDg0MDU3KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2VsZWN0aW9uU3Rh
dGUuaDo4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNlbGVjdGlv
blN0YXRlX2gKKyNkZWZpbmUgU2VsZWN0aW9uU3RhdGVfaAorCisjaW5jbHVkZSAiQXJndW1lbnRD
b2RlcnMuaCIKKyNpbmNsdWRlIDx3dGYvTm90Rm91bmQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3N0cnVjdCBTZWxlY3Rpb25TdGF0ZSB7CisgICAgU2VsZWN0aW9uU3RhdGUoKQorICAgICAg
ICA6IGlzTm9uZSh0cnVlKQorICAgICAgICAsIGlzQ29udGVudEVkaXRhYmxlKGZhbHNlKQorICAg
ICAgICAsIGlzQ29udGVudFJpY2hseUVkaXRhYmxlKGZhbHNlKQorICAgICAgICAsIGlzSW5QYXNz
d29yZEZpZWxkKGZhbHNlKQorICAgICAgICAsIGhhc0NvbXBvc2l0aW9uKGZhbHNlKQorICAgICAg
ICAsIHNlbGVjdGVkUmFuZ2VTdGFydChub3RGb3VuZCkKKyAgICAgICAgLCBzZWxlY3RlZFJhbmdl
TGVuZ3RoKDApCisgICAgeworICAgIH0KKworICAgIC8vIFdoZXRoZXIgdGhlcmUgaXMgYSBzZWxl
Y3Rpb24gYXQgYWxsLiBUaGlzIHdpbGwgYmUgZmFsc2Ugd2hlbiB0aGVyZSBpcyBhIGNhcmV0IHNl
bGVjdGlvbi4KKyAgICBib29sIGlzTm9uZTsKKworICAgIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlv
biBpcyBpbiBhIGNvbnRlbnQgZWRpdGFibGUgYXJlYS4KKyAgICBib29sIGlzQ29udGVudEVkaXRh
YmxlOworICAgIAorICAgIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBpcyBpbiBhIHJpY2ggY29u
dGVudCBlZGl0YWJsZSBhcmVhLgorICAgIGJvb2wgaXNDb250ZW50UmljaGx5RWRpdGFibGU7CisK
KyAgICAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgaW4gYSBwYXNzd29yZCBmaWVsZC4KKyAg
ICBib29sIGlzSW5QYXNzd29yZEZpZWxkOworCisgICAgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9u
IGhhcyBhIGNvbXBvc2l0aW9uLgorICAgIGJvb2wgaGFzQ29tcG9zaXRpb247CisKKyAgICAvLyBU
aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGVkIHJhbmdlLgorICAgIHVpbnQ2NF90IHNlbGVjdGVkUmFu
Z2VTdGFydDsKKyAgICAKKyAgICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBzZWxlY3RlZCByYW5nZS4K
KyAgICB1aW50NjRfdCBzZWxlY3RlZFJhbmdlTGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViS2l0OjpTZWxlY3Rpb25TdGF0ZT4gOiBTaW1wbGVBcmd1bWVudENvZGVyPFdlYktp
dDo6U2VsZWN0aW9uU3RhdGU+IHsgfTsKK307CisKKyNlbmRpZiAvLyBTZWxlY3Rpb25TdGF0ZV9o
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaAkocmV2aXNpb24gODQwNTcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMs
NTIgKzIzLDM3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBTZWxlY3Rpb25TdGF0ZV9oCi0jZGVmaW5lIFNlbGVjdGlvblN0YXRlX2gKKyNpZm5k
ZWYgRWRpdG9yU3RhdGVfaAorI2RlZmluZSBFZGl0b3JTdGF0ZV9oCiAKICNpbmNsdWRlICJBcmd1
bWVudENvZGVycy5oIgogI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotc3RydWN0IFNlbGVjdGlvblN0YXRlIHsKLSAgICBTZWxlY3Rpb25TdGF0ZSgpCi0g
ICAgICAgIDogaXNOb25lKHRydWUpCitzdHJ1Y3QgRWRpdG9yU3RhdGUgeworICAgIEVkaXRvclN0
YXRlKCkKKyAgICAgICAgOiBzZWxlY3Rpb25Jc05vbmUodHJ1ZSkKKyAgICAgICAgLCBzZWxlY3Rp
b25Jc1JhbmdlKGZhbHNlKQogICAgICAgICAsIGlzQ29udGVudEVkaXRhYmxlKGZhbHNlKQogICAg
ICAgICAsIGlzQ29udGVudFJpY2hseUVkaXRhYmxlKGZhbHNlKQogICAgICAgICAsIGlzSW5QYXNz
d29yZEZpZWxkKGZhbHNlKQogICAgICAgICAsIGhhc0NvbXBvc2l0aW9uKGZhbHNlKQotICAgICAg
ICAsIHNlbGVjdGVkUmFuZ2VTdGFydChub3RGb3VuZCkKLSAgICAgICAgLCBzZWxlY3RlZFJhbmdl
TGVuZ3RoKDApCiAgICAgewogICAgIH0KIAotICAgIC8vIFdoZXRoZXIgdGhlcmUgaXMgYSBzZWxl
Y3Rpb24gYXQgYWxsLiBUaGlzIHdpbGwgYmUgZmFsc2Ugd2hlbiB0aGVyZSBpcyBhIGNhcmV0IHNl
bGVjdGlvbi4KLSAgICBib29sIGlzTm9uZTsKLQotICAgIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlv
biBpcyBpbiBhIGNvbnRlbnQgZWRpdGFibGUgYXJlYS4KKyAgICBib29sIHNlbGVjdGlvbklzTm9u
ZTsgLy8gVGhpcyB3aWxsIGJlIGZhbHNlIHdoZW4gdGhlcmUgaXMgYSBjYXJldCBzZWxlY3Rpb24u
CisgICAgYm9vbCBzZWxlY3Rpb25Jc1JhbmdlOwogICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGU7
Ci0gICAgCi0gICAgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGluIGEgcmljaCBjb250ZW50
IGVkaXRhYmxlIGFyZWEuCiAgICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZTsKLQotICAg
IC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBpcyBpbiBhIHBhc3N3b3JkIGZpZWxkLgogICAgIGJv
b2wgaXNJblBhc3N3b3JkRmllbGQ7Ci0KLSAgICAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gaGFz
IGEgY29tcG9zaXRpb24uCiAgICAgYm9vbCBoYXNDb21wb3NpdGlvbjsKLQotICAgIC8vIFRoZSBz
dGFydCBvZiB0aGUgc2VsZWN0ZWQgcmFuZ2UuCi0gICAgdWludDY0X3Qgc2VsZWN0ZWRSYW5nZVN0
YXJ0OwotICAgIAotICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIHNlbGVjdGVkIHJhbmdlLgotICAg
IHVpbnQ2NF90IHNlbGVjdGVkUmFuZ2VMZW5ndGg7CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKK30KIAogbmFtZXNwYWNlIENvcmVJUEMgewotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXZWJLaXQ6OlNlbGVjdGlvblN0YXRlPiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViS2l0
OjpTZWxlY3Rpb25TdGF0ZT4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJLaXQ6OkVkaXRvclN0YXRlPiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViS2l0OjpFZGl0b3JT
dGF0ZT4geyB9OwogfTsKIAotI2VuZGlmIC8vIFNlbGVjdGlvblN0YXRlX2gKKyNlbmRpZiAvLyBF
ZGl0b3JTdGF0ZV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2VsZWN0aW9uU3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2VsZWN0aW9uU3RhdGUuaAko
cmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2VsZWN0aW9uU3RhdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBT
ZWxlY3Rpb25TdGF0ZV9oCi0jZGVmaW5lIFNlbGVjdGlvblN0YXRlX2gKLQotI2luY2x1ZGUgIkFy
Z3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1zdHJ1Y3QgU2VsZWN0aW9uU3RhdGUgewotICAgIFNlbGVjdGlvblN0YXRlKCkK
LSAgICAgICAgOiBpc05vbmUodHJ1ZSkKLSAgICAgICAgLCBpc0NvbnRlbnRFZGl0YWJsZShmYWxz
ZSkKLSAgICAgICAgLCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZShmYWxzZSkKLSAgICAgICAgLCBp
c0luUGFzc3dvcmRGaWVsZChmYWxzZSkKLSAgICAgICAgLCBoYXNDb21wb3NpdGlvbihmYWxzZSkK
LSAgICAgICAgLCBzZWxlY3RlZFJhbmdlU3RhcnQobm90Rm91bmQpCi0gICAgICAgICwgc2VsZWN0
ZWRSYW5nZUxlbmd0aCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBXaGV0aGVyIHRoZXJlIGlz
IGEgc2VsZWN0aW9uIGF0IGFsbC4gVGhpcyB3aWxsIGJlIGZhbHNlIHdoZW4gdGhlcmUgaXMgYSBj
YXJldCBzZWxlY3Rpb24uCi0gICAgYm9vbCBpc05vbmU7Ci0KLSAgICAvLyBXaGV0aGVyIHRoZSBz
ZWxlY3Rpb24gaXMgaW4gYSBjb250ZW50IGVkaXRhYmxlIGFyZWEuCi0gICAgYm9vbCBpc0NvbnRl
bnRFZGl0YWJsZTsKLSAgICAKLSAgICAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgaW4gYSBy
aWNoIGNvbnRlbnQgZWRpdGFibGUgYXJlYS4KLSAgICBib29sIGlzQ29udGVudFJpY2hseUVkaXRh
YmxlOwotCi0gICAgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGluIGEgcGFzc3dvcmQgZmll
bGQuCi0gICAgYm9vbCBpc0luUGFzc3dvcmRGaWVsZDsKLQotICAgIC8vIFdoZXRoZXIgdGhlIHNl
bGVjdGlvbiBoYXMgYSBjb21wb3NpdGlvbi4KLSAgICBib29sIGhhc0NvbXBvc2l0aW9uOwotCi0g
ICAgLy8gVGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3RlZCByYW5nZS4KLSAgICB1aW50NjRfdCBzZWxl
Y3RlZFJhbmdlU3RhcnQ7Ci0gICAgCi0gICAgLy8gVGhlIGxlbmd0aCBvZiB0aGUgc2VsZWN0ZWQg
cmFuZ2UuCi0gICAgdWludDY0X3Qgc2VsZWN0ZWRSYW5nZUxlbmd0aDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi1uYW1lc3BhY2UgQ29yZUlQQyB7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdlYktpdDo6U2VsZWN0aW9uU3RhdGU+IDogU2ltcGxlQXJndW1lbnRDb2Rl
cjxXZWJLaXQ6OlNlbGVjdGlvblN0YXRlPiB7IH07Ci19OwotCi0jZW5kaWYgLy8gU2VsZWN0aW9u
U3RhdGVfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9UZXh0SW5wdXRTdGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvVGV4dElucHV0U3RhdGUu
aAkocmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1RleHRJbnB1
dFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgVGV4dElucHV0U3RhdGVfaAotI2RlZmluZSBUZXh0SW5wdXRTdGF0ZV9oCi0KLSNpbmNs
dWRlICJBcmd1bWVudENvZGVycy5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RydWN0IFRl
eHRJbnB1dFN0YXRlIHsKLSAgICBib29sIGhhc01hcmtlZFRleHQ7Ci0gICAgYm9vbCBzZWxlY3Rp
b25Jc0VkaXRhYmxlOwotfTsKLQotfQotCi1uYW1lc3BhY2UgQ29yZUlQQyB7Ci10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYktpdDo6VGV4dElucHV0U3RhdGU+IDogU2ltcGxlQXJn
dW1lbnRDb2RlcjxXZWJLaXQ6OlRleHRJbnB1dFN0YXRlPiB7IH07Ci19Ci0KLSNlbmRpZiAvLyBU
ZXh0SW5wdXRTdGF0ZV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJ
KHJldmlzaW9uIDg0MDU3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgPSAwOwogI2lm
IFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NU
b2tlblJlY2VpdmVkKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQm
LCBjb25zdCBUZXh0SW5wdXRTdGF0ZSYsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+
JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50JiwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKSA9IDA7
CiAgICAgdmlydHVhbCBib29sIGV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgUGFzc1JlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGRyYWdJbWFnZSwgYm9vbCBpc0xpbmtEcmFnKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVNlY3VyZUlucHV0U3RhdGUoKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0MCwxNyAr
MjE0MCwxNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkTGlzCiAgICAg
Y291bnQgPSBtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RDb3VudCgpOwogfQogCi12b2lk
IFdlYlBhZ2VQcm94eTo6c2VsZWN0aW9uU3RhdGVDaGFuZ2VkKGNvbnN0IFNlbGVjdGlvblN0YXRl
JiBzZWxlY3Rpb25TdGF0ZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZUNoYW5nZWQo
Y29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvclN0YXRlKQogewogI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICBib29sIGNvdWxkQ2hhbmdlU2VjdXJlSW5wdXRTdGF0ZSA9IG1fc2VsZWN0aW9uU3RhdGUuaXNJ
blBhc3N3b3JkRmllbGQgIT0gc2VsZWN0aW9uU3RhdGUuaXNJblBhc3N3b3JkRmllbGQgfHwgbV9z
ZWxlY3Rpb25TdGF0ZS5pc05vbmU7CisgICAgYm9vbCBjb3VsZENoYW5nZVNlY3VyZUlucHV0U3Rh
dGUgPSBtX2VkaXRvclN0YXRlLmlzSW5QYXNzd29yZEZpZWxkICE9IGVkaXRvclN0YXRlLmlzSW5Q
YXNzd29yZEZpZWxkIHx8IG1fZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNOb25lOwogI2VuZGlmCiAK
LSAgICBtX3NlbGVjdGlvblN0YXRlID0gc2VsZWN0aW9uU3RhdGU7CisgICAgbV9lZGl0b3JTdGF0
ZSA9IGVkaXRvclN0YXRlOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIFRoaXMgaXMgYSB0
ZW1wb3Jhcnkgc3RhdGUuIEZsaXBwaW5nIHNlY3VyZSBpbnB1dCBzdGF0ZSB0b28gcXVpY2tseSBj
YW4gZXhwb3NlIHJhY2UgY29uZGl0aW9ucy4KLSAgICBpZiAoc2VsZWN0aW9uU3RhdGUuaXNOb25l
KQorICAgIGlmIChlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc05vbmUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChjb3VsZENoYW5nZVNlY3VyZUlucHV0U3RhdGUpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSAr
MzEsOSBAQAogI2luY2x1ZGUgIkNvbnRleHRNZW51U3RhdGUuaCIKICNpbmNsdWRlICJEcmFnQ29u
dHJvbGxlckFjdGlvbi5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRl
ICJFZGl0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSAi
U2VsZWN0aW9uU3RhdGUuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJX
S0Jhc2UuaCIKICNpbmNsdWRlICJXS1BhZ2VQcml2YXRlLmgiCkBAIC05Nyw5ICs5Nyw5IEBAIGNs
YXNzIFdlYlVSTFJlcXVlc3Q7CiBjbGFzcyBXZWJXaGVlbEV2ZW50Owogc3RydWN0IEF0dHJpYnV0
ZWRTdHJpbmc7CiBzdHJ1Y3QgRGljdGlvbmFyeVBvcHVwSW5mbzsKK3N0cnVjdCBFZGl0b3JTdGF0
ZTsKIHN0cnVjdCBQbGF0Zm9ybVBvcHVwTWVudURhdGE7CiBzdHJ1Y3QgUHJpbnRJbmZvOwotc3Ry
dWN0IFRleHRJbnB1dFN0YXRlOwogc3RydWN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM7CiBz
dHJ1Y3QgV2ViUG9wdXBJdGVtOwogCkBAIC0yNDcsMjQgKzI0NywyNCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBleGVjdXRlRWRpdENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSk7CiAgICAg
dm9pZCB2YWxpZGF0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgUGFzc1JlZlB0
cjxWYWxpZGF0ZUNvbW1hbmRDYWxsYmFjaz4pOwogCi0gICAgY29uc3QgU2VsZWN0aW9uU3RhdGUm
IHNlbGVjdGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQorICAg
IGNvbnN0IEVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9y
U3RhdGU7IH0KICAgICBib29sIGNhbkRlbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIGhhc1NlbGVjdGVk
UmFuZ2UoKSAmJiBpc0NvbnRlbnRFZGl0YWJsZSgpOyB9Ci0gICAgYm9vbCBoYXNTZWxlY3RlZFJh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlTGVuZ3Ro
OyB9Ci0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uU3RhdGUuaXNDb250ZW50RWRpdGFibGU7IH0KKyAgICBib29sIGhhc1NlbGVjdGVkUmFuZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2VkaXRvclN0YXRlLnNlbGVjdGlvbklzUmFuZ2U7IH0KKyAgICBi
b29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3JTdGF0ZS5pc0Nv
bnRlbnRFZGl0YWJsZTsgfQogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgdXBkYXRlV2lu
ZG93SXNWaXNpYmxlKGJvb2wgd2luZG93SXNWaXNpYmxlKTsKICAgICB2b2lkIHdpbmRvd0FuZFZp
ZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3Jl
ZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dD
b29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGFjY2Vzc2liaWxpdHlWaWV3Q29v
cmRpbmF0ZXMpOwogCi0gICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQs
IFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0
X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBUZXh0SW5wdXRT
dGF0ZSYgbmV3U3RhdGUpOwotICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKFRleHRJbnB1dFN0
YXRlJiBuZXdTdGF0ZSk7Ci0gICAgYm9vbCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwg
dWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdl
RW5kLCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpOworICAgIHZvaWQgc2V0Q29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+
IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25F
bmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRS
YW5nZUVuZCk7CisgICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICBib29sIGluc2Vy
dFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQs
IHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpOwogICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2Uo
dWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKICAgICB2b2lkIGdldFNlbGVj
dGVkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKICAgICB2b2lk
IGdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2
NF90IGxlbmd0aCwgQXR0cmlidXRlZFN0cmluZyYpOwogICAgIHVpbnQ2NF90IGNoYXJhY3Rlcklu
ZGV4Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQpOwogICAgIFdlYkNvcmU6OkludFJl
Y3QgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWludDY0X3QsIHVpbnQ2NF90KTsKLSAgICBi
b29sIGV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVz
c0NvbW1hbmQ+JiwgVGV4dElucHV0U3RhdGUmIG5ld1N0YXRlKTsKKyAgICBib29sIGV4ZWN1dGVL
ZXlwcmVzc0NvbW1hbmRzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7
CiAKICAgICB2b2lkIHNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVnaW4odWludDY0X3QgcGx1Z2lu
Q29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdGV4dElucHV0KTsKICAg
ICBDR0NvbnRleHRSZWYgY29udGFpbmluZ1dpbmRvd0dyYXBoaWNzQ29udGV4dCgpOwpAQCAtMzQ4
LDYgKzM0OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyV2ViUHJvY2Vzc0FjY2Vzc2li
aWxpdHlUb2tlbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7CiAgICAgLy8gQ2FsbGVk
IGJ5IHRoZSBVSSBwcm9jZXNzIHdoZW4gaXQgaXMgcmVhZHkgdG8gc2VuZCBpdHMgdG9rZW5zIHRv
IHRoZSB3ZWIgcHJvY2Vzcy4KICAgICB2b2lkIHJlZ2lzdGVyVUlQcm9jZXNzQWNjZXNzaWJpbGl0
eVRva2Vucyhjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBlbGVtZW5Ub2tlbiwgY29uc3Qg
Q29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgd2luZG93VG9rZW4pOworCisgICAgdm9pZCB1cGRhdGVF
ZGl0b3JTdGF0ZSgpOworCiAgICAgYm9vbCB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2Fy
ZFR5cGVzKTsKICAgICBib29sIHJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lKTsKICNlbmRpZgpAQCAtNTg5LDggKzU5Miw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
ICNlbmRpZgogCi0gICAgLy8gU2VsZWN0aW9uCi0gICAgdm9pZCBzZWxlY3Rpb25TdGF0ZUNoYW5n
ZWQoY29uc3QgU2VsZWN0aW9uU3RhdGUmKTsKKyAgICB2b2lkIGVkaXRvclN0YXRlQ2hhbmdlZChj
b25zdCBFZGl0b3JTdGF0ZSYpOwogCiAgICAgLy8gQmFjay9Gb3J3YXJkIGxpc3QgbWFuYWdlbWVu
dAogICAgIHZvaWQgYmFja0ZvcndhcmRBZGRJdGVtKHVpbnQ2NF90IGl0ZW1JRCk7CkBAIC02MDgs
NyArNjEwLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEtleWJvYXJkIGhhbmRsaW5nCiAjaWYgUExB
VEZPUk0oTUFDKQotICAgIHZvaWQgaW50ZXJwcmV0UXVldWVkS2V5RXZlbnQoY29uc3QgVGV4dElu
cHV0U3RhdGUmLCBib29sJiBoYW5kbGVkLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
PiYpOworICAgIHZvaWQgaW50ZXJwcmV0UXVldWVkS2V5RXZlbnQoY29uc3QgRWRpdG9yU3RhdGUm
LCBib29sJiBoYW5kbGVkLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpOwogICAg
IHZvaWQgZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3Rv
ciwgYm9vbCYgaGFuZGxlZCk7CiAjZW5kaWYKIApAQCAtNzY0LDcgKzc2Niw3IEBAIHByaXZhdGU6
CiAKICAgICBTdHJpbmcgbV90b29sVGlwOwogCi0gICAgU2VsZWN0aW9uU3RhdGUgbV9zZWxlY3Rp
b25TdGF0ZTsKKyAgICBFZGl0b3JTdGF0ZSBtX2VkaXRvclN0YXRlOwogCiAgICAgZG91YmxlIG1f
dGV4dFpvb21GYWN0b3I7CiAgICAgZG91YmxlIG1fcGFnZVpvb21GYWN0b3I7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJl
dmlzaW9uIDg0MDU3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5t
ZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDkgKzE0NSw5IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2VQcm94eSB7CiAgICAgQ2xlYXJBbGxFZGl0Q29tbWFuZHMoKQogICAgIENhblVuZG9S
ZWRvKHVpbnQzMl90IGFjdGlvbikgLT4gKGJvb2wgcmVzdWx0KQogICAgIEV4ZWN1dGVVbmRvUmVk
byh1aW50MzJfdCBhY3Rpb24pIC0+IChib29sIHJlc3VsdCkKLSAgICAKLSAgICAjIFNlbGVjdGlv
biBtZXNzYWdlcwotICAgIFNlbGVjdGlvblN0YXRlQ2hhbmdlZChXZWJLaXQ6OlNlbGVjdGlvblN0
YXRlIHNlbGVjdGlvblN0YXRlKQorCisgICAgIyBFZGl0b3Igbm90aWZpY2F0aW9ucworICAgIEVk
aXRvclN0YXRlQ2hhbmdlZChXZWJLaXQ6OkVkaXRvclN0YXRlIGVkaXRvclN0YXRlKQogI2lmIFBM
QVRGT1JNKFdJTikKICAgICBEaWRDaGFuZ2VDb21wb3NpdGlvblNlbGVjdGlvbihib29sIGhhc0No
YW5nZWQpCiAjZW5kaWYKQEAgLTIwNSw3ICsyMDUsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJv
eHkgewogICAgIERpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKFdURjo6U3RyaW5nIHRleHQsIFdl
YktpdDo6RGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvKQogCiAgICAgIyBL
ZXlib2FyZCBpbnB1dCBzdXBwb3J0IG1lc3NhZ2VzCi0gICAgSW50ZXJwcmV0UXVldWVkS2V5RXZl
bnQoV2ViS2l0OjpUZXh0SW5wdXRTdGF0ZSBzdGF0ZSkgLT4gKGJvb2wgaGFuZGxlZCwgVmVjdG9y
PFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4gc2F2ZWRDb21tYW5kcykKKyAgICBJbnRlcnByZXRR
dWV1ZWRLZXlFdmVudChXZWJLaXQ6OkVkaXRvclN0YXRlIHN0YXRlKSAtPiAoYm9vbCBoYW5kbGVk
LCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBzYXZlZENvbW1hbmRzKQogICAgIEV4
ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKFdURjo6U3RyaW5nIHNlbGVjdG9yKSAtPiAoYm9v
bCBoYW5kbGVkKQogCiAgICAgIyBSZW1vdGUgYWNjZXNzaWJpbGl0eSBtZXNzYWdlcwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5o
CShyZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1Bh
Z2VDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKICAgICB2aXJ0dWFsIGJv
b2wgY2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKICAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7Ci0gICAgdmlydHVh
bCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBj
b25zdCBUZXh0SW5wdXRTdGF0ZSYsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7
CisgICAgdmlydHVhbCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpOwogICAgIHZpcnR1
YWwgYm9vbCBleGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVj
dG9yKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBjbGllbnRQb3NpdGlvbiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFn
ZSwgYm9vbCBpc0xpbmtEcmFnKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2VjdXJlSW5wdXRT
dGF0ZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVu
dEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
UGFnZUNsaWVudEltcGwubW0JKHJldmlzaW9uIDg0MDU3KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5
ICsyOTIsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlVW5kb1JlZG8oV2ViCiAgICAg
cmV0dXJuICh1bmRvT3JSZWRvID09IFdlYlBhZ2VQcm94eTo6VW5kbykgPyBbW21fd2tWaWV3IHVu
ZG9NYW5hZ2VyXSB1bmRvXSA6IFtbbV93a1ZpZXcgdW5kb01hbmFnZXJdIHJlZG9dOwogfQogCi1i
b29sIFBhZ2VDbGllbnRJbXBsOjppbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXli
b2FyZEV2ZW50JiBldmVudCwgY29uc3QgVGV4dElucHV0U3RhdGUmIHN0YXRlLCBWZWN0b3I8V2Vi
Q29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMpCitib29sIFBhZ2VDbGllbnRJbXBsOjpp
bnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgVmVj
dG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzKQogewotICAgIHJldHVybiBb
bV93a1ZpZXcgX2ludGVycHJldEtleUV2ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCkgd2l0aENhY2hl
ZFRleHRJbnB1dFN0YXRlOnN0YXRlIHNhdmluZ0NvbW1hbmRzVG86Y29tbWFuZHNdOworICAgIHJl
dHVybiBbbV93a1ZpZXcgX2ludGVycHJldEtleUV2ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCkgc2F2
aW5nQ29tbWFuZHNUbzpjb21tYW5kc107CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnNldERy
YWdJbWFnZShjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBkcmFnSW1hZ2UsIGJvb2wgaXNMaW5rRHJhZykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDg0MDYyKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5o
IgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiRHJhd2luZ0FyZWFQcm94eUlt
cGwuaCIKKyNpbXBvcnQgIkVkaXRvclN0YXRlLmgiCiAjaW1wb3J0ICJGaW5kSW5kaWNhdG9yLmgi
CiAjaW1wb3J0ICJGaW5kSW5kaWNhdG9yV2luZG93LmgiCiAjaW1wb3J0ICJMYXllclRyZWVDb250
ZXh0LmgiCkBAIC00Myw3ICs0NCw2IEBACiAjaW1wb3J0ICJSdW5Mb29wLmgiCiAjaW1wb3J0ICJU
ZXh0Q2hlY2tlci5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJTdGF0ZS5oIgotI2ltcG9ydCAiVGV4
dElucHV0U3RhdGUuaCIKICNpbXBvcnQgIldLQVBJQ2FzdC5oIgogI2ltcG9ydCAiV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlci5oIgogI2ltcG9ydCAiV0tQcmludGluZ1ZpZXcuaCIKQEAgLTEw
MSw3ICsxMDEsNiBAQCB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWYWxpZGF0aW9uVmVjdG9yCiB9
CiAKIHN0cnVjdCBXS1ZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzIHsKLSAgICBUZXh0
SW5wdXRTdGF0ZSBjYWNoZWRUZXh0SW5wdXRTdGF0ZTsKICAgICBib29sIGV2ZW50SW50ZXJwcmV0
YXRpb25IYWRTaWRlRWZmZWN0czsKICAgICBib29sIGNvbnN1bWVkQnlJTTsKICAgICBib29sIGV4
ZWN1dGluZ1NhdmVkS2V5cHJlc3NDb21tYW5kczsKQEAgLTUzNiwxMyArNTM1LDE3IEBAIC0gKEJP
T0wpd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6KE5TUGEKIAogLSAoaWQpdmFsaWRSZXF1ZXN0
b3JGb3JTZW5kVHlwZTooTlNTdHJpbmcgKilzZW5kVHlwZSByZXR1cm5UeXBlOihOU1N0cmluZyAq
KXJldHVyblR5cGUKIHsKLSAgICBCT09MIGlzVmFsaWRTZW5kVHlwZSA9ICFzZW5kVHlwZSB8fCAo
W1Bhc3RlYm9hcmRUeXBlczo6Zm9yU2VsZWN0aW9uKCkgY29udGFpbnNPYmplY3Q6c2VuZFR5cGVd
ICYmICFfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNOb25lKTsKKyAgICAvLyBSaWdo
dCBjbGlja2luZyBpbiB1bnNlbGVjdGVkIHRleHQgY2hhbmdlcyBzZWxlY3Rpb24gYW5kIGltbWVk
aWF0ZWx5IGNoZWNrcyBmb3Igc3VwcG9ydGVkIHNlcnZpY2VzLCBidXQgYW4gYXN5bmNocm9ub3Vz
IG5vdGlmaWNhdGlvbiBmb3IgbmV3IHNlbGVjdGlvbiBpcyBzdGlsbCBpbiBmbGlnaHQgaW4gdGhh
dCBjYXNlLgorICAgIC8vIEl0J3Mgc3RpbGwgcG9zc2libGUgdGhhdCB0aGUgc3RhdGUgd2lsbCBz
b21laG93IGNoYW5nZSBhZ2FpbiBieSB0aGUgdGltZSByZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9h
cmQ6IGlzIGNhbGxlZCwgYnV0IHRoYXQgaXMgbm90IHBvc3NpYmxlIHRvIGZvcmVzZWUgb3IgdG8g
cHJldmVudCBmcm9tIHRoaXMgbWV0aG9kLgorICAgIF9kYXRhLT5fcGFnZS0+dXBkYXRlRWRpdG9y
U3RhdGUoKTsKKworICAgIEJPT0wgaXNWYWxpZFNlbmRUeXBlID0gIXNlbmRUeXBlIHx8IChbUGFz
dGVib2FyZFR5cGVzOjpmb3JTZWxlY3Rpb24oKSBjb250YWluc09iamVjdDpzZW5kVHlwZV0gJiYg
IV9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc05vbmUpOwogICAgIEJPT0wg
aXNWYWxpZFJldHVyblR5cGUgPSBOTzsKICAgICBpZiAoIXJldHVyblR5cGUpCiAgICAgICAgIGlz
VmFsaWRSZXR1cm5UeXBlID0gWUVTOwotICAgIGVsc2UgaWYgKFtQYXN0ZWJvYXJkVHlwZXM6OmZv
ckVkaXRpbmcoKSBjb250YWluc09iamVjdDpyZXR1cm5UeXBlXSAmJiBfZGF0YS0+X3BhZ2UtPnNl
bGVjdGlvblN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpIHsKKyAgICBlbHNlIGlmIChbUGFzdGVi
b2FyZFR5cGVzOjpmb3JFZGl0aW5nKCkgY29udGFpbnNPYmplY3Q6cmV0dXJuVHlwZV0gJiYgX2Rh
dGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKSB7CiAgICAgICAgIC8v
IFdlIGNhbiBpbnNlcnQgc3RyaW5ncyBpbiBhbnkgZWRpdGFibGUgY29udGV4dC4gIFdlIGNhbiBp
bnNlcnQgb3RoZXIgdHlwZXMsIGxpa2UgaW1hZ2VzLCBvbmx5IGluIHJpY2ggZWRpdCBjb250ZXh0
cy4KLSAgICAgICAgaXNWYWxpZFJldHVyblR5cGUgPSBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0
YXRlKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUgfHwgW3JldHVyblR5cGUgaXNFcXVhbFRvU3Ry
aW5nOk5TU3RyaW5nUGJvYXJkVHlwZV07CisgICAgICAgIGlzVmFsaWRSZXR1cm5UeXBlID0gX2Rh
dGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlIHx8IFtyZXR1
cm5UeXBlIGlzRXF1YWxUb1N0cmluZzpOU1N0cmluZ1Bib2FyZFR5cGVdOwogICAgIH0KICAgICBp
ZiAoaXNWYWxpZFNlbmRUeXBlICYmIGlzVmFsaWRSZXR1cm5UeXBlKQogICAgICAgICByZXR1cm4g
c2VsZjsKQEAgLTYyNywxMSArNjMwLDExIEBAIC0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNl
SXRlbTooaWQgPE4KICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihzaG93R3Vlc3NQYW5lbDop
KSB7CiAgICAgICAgIGlmIChOU01lbnVJdGVtICptZW51SXRlbSA9IDo6bWVudUl0ZW0oaXRlbSkp
CiAgICAgICAgICAgICBbbWVudUl0ZW0gc2V0VGl0bGU6Y29udGV4dE1lbnVJdGVtVGFnU2hvd1Nw
ZWxsaW5nUGFuZWwoIVtbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3BlbGxp
bmdQYW5lbF0gaXNWaXNpYmxlXSldOwotICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5zZWxl
Y3Rpb25TdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOworICAgICAgICByZXR1cm4gX2RhdGEtPl9w
YWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOwogICAgIH0KIAogICAgIGlmIChh
Y3Rpb24gPT0gQHNlbGVjdG9yKGNoZWNrU3BlbGxpbmc6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9y
KGNoYW5nZVNwZWxsaW5nOikpCi0gICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlv
blN0YXRlKCkuaXNDb250ZW50RWRpdGFibGU7CisgICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2Ut
PmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGU7CiAKICAgICBpZiAoYWN0aW9uID09IEBz
ZWxlY3Rvcih0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZzopKSB7CiAgICAgICAgIGJvb2wg
ZW5hYmxlZCA9IFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgp
OwpAQCAtNjQ5LDQ3ICs2NTIsNDcgQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVt
OihpZCA8TgogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbjopKSB7CiAgICAgICAgIGJvb2wgY2hlY2tlZCA9IFRleHRDaGVja2VyOjpz
dGF0ZSgpLmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDsKICAgICAgICAgW21l
bnVJdGVtKGl0ZW0pIHNldFN0YXRlOmNoZWNrZWQgPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsK
LSAgICAgICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0NvbnRlbnRF
ZGl0YWJsZTsKKyAgICAgICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0Nv
bnRlbnRFZGl0YWJsZTsKICAgICB9CiAKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihvcmRl
ckZyb250U3Vic3RpdHV0aW9uc1BhbmVsOikpIHsKICAgICAgICAgaWYgKE5TTWVudUl0ZW0gKm1l
bnVJdGVtID0gOjptZW51SXRlbShpdGVtKSkKICAgICAgICAgICAgIFttZW51SXRlbSBzZXRUaXRs
ZTpjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyghW1tbTlNTcGVsbENoZWNrZXIg
c2hhcmVkU3BlbGxDaGVja2VyXSBzdWJzdGl0dXRpb25zUGFuZWxdIGlzVmlzaWJsZV0pXTsKLSAg
ICAgICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0NvbnRlbnRFZGl0
YWJsZTsKKyAgICAgICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRl
bnRFZGl0YWJsZTsKICAgICB9CiAKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVT
bWFydEluc2VydERlbGV0ZTopKSB7CiAgICAgICAgIGJvb2wgY2hlY2tlZCA9IF9kYXRhLT5fcGFn
ZS0+aXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKICAgICAgICAgW21lbnVJdGVtKGl0ZW0p
IHNldFN0YXRlOmNoZWNrZWQgPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0
dXJuIF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZTsKKyAg
ICAgICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJs
ZTsKICAgICB9CiAKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNR
dW90ZVN1YnN0aXR1dGlvbjopKSB7CiAgICAgICAgIGJvb2wgY2hlY2tlZCA9IFRleHRDaGVja2Vy
OjpzdGF0ZSgpLmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOwogICAgICAgICBb
bWVudUl0ZW0oaXRlbSkgc2V0U3RhdGU6Y2hlY2tlZCA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVd
OwotICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29udGVu
dEVkaXRhYmxlOworICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlz
Q29udGVudEVkaXRhYmxlOwogICAgIH0KIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRv
Z2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb246KSkgewogICAgICAgICBib29sIGNoZWNrZWQg
PSBUZXh0Q2hlY2tlcjo6c3RhdGUoKS5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVk
OwogICAgICAgICBbbWVudUl0ZW0oaXRlbSkgc2V0U3RhdGU6Y2hlY2tlZCA/IE5TT25TdGF0ZSA6
IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0
ZSgpLmlzQ29udGVudEVkaXRhYmxlOworICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5lZGl0
b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOwogICAgIH0KIAogICAgIGlmIChhY3Rpb24gPT0g
QHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246KSkgewogICAgICAgICBib29s
IGNoZWNrZWQgPSBUZXh0Q2hlY2tlcjo6c3RhdGUoKS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25F
bmFibGVkOwogICAgICAgICBbbWVudUl0ZW0oaXRlbSkgc2V0U3RhdGU6Y2hlY2tlZCA/IE5TT25T
dGF0ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5zZWxlY3Rp
b25TdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOworICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdl
LT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOwogICAgIH0KIAogICAgIGlmIChhY3Rp
b24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudDopKSB7CiAgICAg
ICAgIGJvb2wgY2hlY2tlZCA9IFRleHRDaGVja2VyOjpzdGF0ZSgpLmlzQXV0b21hdGljVGV4dFJl
cGxhY2VtZW50RW5hYmxlZDsKICAgICAgICAgW21lbnVJdGVtKGl0ZW0pIHNldFN0YXRlOmNoZWNr
ZWQgPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIF9kYXRhLT5fcGFn
ZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZTsKKyAgICAgICAgcmV0dXJuIF9k
YXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZTsKICAgICB9CiAKICAg
ICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih1cHBlcmNhc2VXb3JkOikgfHwgYWN0aW9uID09IEBz
ZWxlY3Rvcihsb3dlcmNhc2VXb3JkOikgfHwgYWN0aW9uID09IEBzZWxlY3RvcihjYXBpdGFsaXpl
V29yZDopKQotICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLnNl
bGVjdGVkUmFuZ2VMZW5ndGggJiYgX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29u
dGVudEVkaXRhYmxlOworICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgp
LnNlbGVjdGlvbklzUmFuZ2UgJiYgX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVu
dEVkaXRhYmxlOwogICAgIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHN0b3BTcGVha2lu
ZzopKQogICAgICAgICByZXR1cm4gW05TQXBwIGlzU3BlYWtpbmddOwpAQCAtMTAyOCw3ICsxMDMx
LDcgQEAgLSAoQk9PTClzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbgogewogICAgIC8v
IElmIHRoaXMgaXMgdGhlIGFjdGl2ZSB3aW5kb3cgb3Igd2UgZG9uJ3QgaGF2ZSBhIHJhbmdlIHNl
bGVjdGlvbiwgdGhlcmUgaXMgbm8gbmVlZCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2tzCiAg
ICAgLy8gYW5kIHdlIGNhbiBhdm9pZCBtYWtpbmcgYSBzeW5jaHJvbm91cyBjYWxsIHRvIHRoZSBX
ZWJQcm9jZXNzLgotICAgIGlmIChbW3NlbGYgd2luZG93XSBpc0tleVdpbmRvd10gfHwgX2RhdGEt
Pl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzTm9uZSB8fCAhX2RhdGEtPl9wYWdlLT5zZWxlY3Rp
b25TdGF0ZSgpLnNlbGVjdGVkUmFuZ2VMZW5ndGgpCisgICAgaWYgKFtbc2VsZiB3aW5kb3ddIGlz
S2V5V2luZG93XSB8fCBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNOb25l
IHx8ICFfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZSkKICAgICAg
ICAgcmV0dXJuIE5POwogCiAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcg
dG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKQEAgLTEwODks
NyArMTA5Miw3IEBAIC0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG8KICAg
ICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gZmFsc2U7CiAKICAgICAvLyBBcyBpbiBp
bnNlcnRUZXh0OnJlcGxhY2VtZW50UmFuZ2U6LCB3ZSBhc3N1bWUgdGhhdCB0aGUgY2FsbCBjb21l
cyBmcm9tIGFuIGlucHV0IG1ldGhvZCBpZiB0aGVyZSBpcyBtYXJrZWQgdGV4dC4KLSAgICBib29s
IGlzRnJvbUlucHV0TWV0aG9kID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLT5jYWNoZWRUZXh0
SW5wdXRTdGF0ZS5oYXNNYXJrZWRUZXh0OworICAgIGJvb2wgaXNGcm9tSW5wdXRNZXRob2QgPSBf
ZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb247CiAKICAgICBpZiAocGFy
YW1ldGVycyAmJiAhaXNGcm9tSW5wdXRNZXRob2QpCiAgICAgICAgIHBhcmFtZXRlcnMtPmNvbW1h
bmRzLT5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKE5TU3RyaW5nRnJvbVNlbGVjdG9yKHNlbGVjdG9y
KSkpOwpAQCAtMTEyMiw3ICsxMTI1LDcgQEAgLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcg
cmVwbGFjZW1lbgogICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBmYWxzZTsKIAog
ICAgIE5TU3RyaW5nICp0ZXh0OwotICAgIGJvb2wgaXNGcm9tSW5wdXRNZXRob2QgPSBwYXJhbWV0
ZXJzICYmIHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlLmhhc01hcmtlZFRleHQ7Cisg
ICAgYm9vbCBpc0Zyb21JbnB1dE1ldGhvZCA9IF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5o
YXNDb21wb3NpdGlvbjsKIAogICAgIGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKICAgICAgICAg
Ly8gRklYTUU6IFdlIGlnbm9yZSBtb3N0IGF0dHJpYnV0ZXMgZnJvbSB0aGUgc3RyaW5nLCBzbyBm
b3IgZXhhbXBsZSBpbnNlcnRpbmcgZnJvbSBDaGFyYWN0ZXIgUGFsZXR0ZSBsb3NlcyBmb250IGFu
ZCBnbHlwaCB2YXJpYXRpb24gZGF0YS4KQEAgLTExNDIsMjAgKzExNDUsMTcgQEAgLSAodm9pZClp
bnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbgogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgVGV4dElucHV0U3RhdGUgbmV3VGV4dElucHV0U3RhdGU7CiAgICAgU3RyaW5nIGV2ZW50
VGV4dCA9IHRleHQ7CiAgICAgZXZlbnRUZXh0LnJlcGxhY2UoTlNCYWNrVGFiQ2hhcmFjdGVyLCBO
U1RhYkNoYXJhY3Rlcik7IC8vIHNhbWUgdGhpbmcgaXMgZG9uZSBpbiBLZXlFdmVudE1hYy5tbSBp
biBXZWJDb3JlCi0gICAgYm9vbCBldmVudEhhbmRsZWQgPSBfZGF0YS0+X3BhZ2UtPmluc2VydFRl
eHQoZXZlbnRUZXh0LCByZXBsYWNlbWVudFJhbmdlLmxvY2F0aW9uLCBOU01heFJhbmdlKHJlcGxh
Y2VtZW50UmFuZ2UpLCBuZXdUZXh0SW5wdXRTdGF0ZSk7CisgICAgYm9vbCBldmVudEhhbmRsZWQg
PSBfZGF0YS0+X3BhZ2UtPmluc2VydFRleHQoZXZlbnRUZXh0LCByZXBsYWNlbWVudFJhbmdlLmxv
Y2F0aW9uLCBOU01heFJhbmdlKHJlcGxhY2VtZW50UmFuZ2UpKTsKIAotICAgIGlmIChwYXJhbWV0
ZXJzKSB7CisgICAgaWYgKHBhcmFtZXRlcnMpCiAgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50SW50
ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyB8PSBldmVudEhhbmRsZWQ7Ci0gICAgICAgIHBhcmFt
ZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlID0gbmV3VGV4dElucHV0U3RhdGU7Ci0gICAgfQog
fQogCiAtIChCT09MKV9oYW5kbGVTdHlsZUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAog
ewotICAgIGlmICghX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29udGVudEVkaXRh
YmxlKQorICAgIGlmICghX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRh
YmxlKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICBpZiAoKFtldmVudCBtb2RpZmllckZsYWdz
XSAmIE5TRGV2aWNlSW5kZXBlbmRlbnRNb2RpZmllckZsYWdzTWFzaykgIT0gTlNDb21tYW5kS2V5
TWFzaykKQEAgLTEyNjEsOSArMTI2MSw3IEBAIC0gKHZvaWQpX2V4ZWN1dGVTYXZlZEtleXByZXNz
Q29tbWFuZHMKICAgICAgICAgcmV0dXJuOwogCiAgICAgcGFyYW1ldGVycy0+ZXhlY3V0aW5nU2F2
ZWRLZXlwcmVzc0NvbW1hbmRzID0gdHJ1ZTsKLSAgICBUZXh0SW5wdXRTdGF0ZSBuZXdUZXh0SW5w
dXRTdGF0ZTsKLSAgICBwYXJhbWV0ZXJzLT5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVj
dHMgfD0gX2RhdGEtPl9wYWdlLT5leGVjdXRlS2V5cHJlc3NDb21tYW5kcygqcGFyYW1ldGVycy0+
Y29tbWFuZHMsIG5ld1RleHRJbnB1dFN0YXRlKTsKLSAgICBwYXJhbWV0ZXJzLT5jYWNoZWRUZXh0
SW5wdXRTdGF0ZSA9IG5ld1RleHRJbnB1dFN0YXRlOworICAgIHBhcmFtZXRlcnMtPmV2ZW50SW50
ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyB8PSBfZGF0YS0+X3BhZ2UtPmV4ZWN1dGVLZXlwcmVz
c0NvbW1hbmRzKCpwYXJhbWV0ZXJzLT5jb21tYW5kcyk7CiAgICAgcGFyYW1ldGVycy0+Y29tbWFu
ZHMtPmNsZWFyKCk7CiAgICAgcGFyYW1ldGVycy0+ZXhlY3V0aW5nU2F2ZWRLZXlwcmVzc0NvbW1h
bmRzID0gZmFsc2U7CiB9CkBAIC0xMjc2LDkgKzEyNzQsNyBAQCAtIChOU1RleHRJbnB1dENvbnRl
eHQgKilpbnB1dENvbnRleHQKICAgICAgICAgcmV0dXJuIFtbV0tUZXh0SW5wdXRXaW5kb3dDb250
cm9sbGVyIHNoYXJlZFRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXJdIGlucHV0Q29udGV4dF07CiAK
ICAgICAvLyBEaXNhYmxlIHRleHQgaW5wdXQgbWFjaGluZXJ5IHdoZW4gaW4gbm9uLWVkaXRhYmxl
IGNvbnRlbnQuIEFuIGludmlzaWJsZSBpbmxpbmUgaW5wdXQgYXJlYSBhZmZlY3RzIHBlcmZvcm1h
bmNlLCBhbmQgY2FuIHByZXZlbnQgRXhwb3NlIGZyb20gd29ya2luZy4KLSAgICBpZiAocGFyYW1l
dGVycyAmJiAhcGFyYW1ldGVycy0+Y2FjaGVkVGV4dElucHV0U3RhdGUuc2VsZWN0aW9uSXNFZGl0
YWJsZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBpZiAoIV9kYXRhLT5fcGFnZS0+c2VsZWN0
aW9uU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKKyAgICBpZiAoIV9kYXRhLT5fcGFnZS0+ZWRp
dG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAg
IHJldHVybiBbc3VwZXIgaW5wdXRDb250ZXh0XTsKQEAgLTEzMDcsMTEgKzEzMDMsMTEgQEAgLSAo
Qk9PTCloYXNNYXJrZWRUZXh0CiAKICAgICBCT09MIHJlc3VsdDsKICAgICBpZiAocGFyYW1ldGVy
cykgewotICAgICAgICByZXN1bHQgPSBwYXJhbWV0ZXJzLT5jYWNoZWRUZXh0SW5wdXRTdGF0ZS5o
YXNNYXJrZWRUZXh0OworICAgICAgICByZXN1bHQgPSBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRl
KCkuaGFzQ29tcG9zaXRpb247CiAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgIC8v
IEEgc2F2ZWQgY29tbWFuZCBjYW4gY29uZmlybSBhIGNvbXBvc2l0aW9uLCBidXQgaXQgY2Fubm90
IHN0YXJ0IGEgbmV3IG9uZS4KICAgICAgICAgICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVz
c0NvbW1hbmRzXTsKLSAgICAgICAgICAgIHJlc3VsdCA9IHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJ
bnB1dFN0YXRlLmhhc01hcmtlZFRleHQ7CisgICAgICAgICAgICByZXN1bHQgPSBfZGF0YS0+X3Bh
Z2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb247CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICAgICB1aW50NjRfdCBsb2NhdGlvbjsKQEAgLTEzMzgsMTAgKzEzMzQsNyBAQCAtICh2
b2lkKXVubWFya1RleHQKICAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gZmFsc2U7
CiAgICAgfQogCi0gICAgVGV4dElucHV0U3RhdGUgbmV3VGV4dElucHV0U3RhdGU7Ci0gICAgX2Rh
dGEtPl9wYWdlLT5jb25maXJtQ29tcG9zaXRpb24obmV3VGV4dElucHV0U3RhdGUpOwotICAgIGlm
IChwYXJhbWV0ZXJzKQotICAgICAgICBwYXJhbWV0ZXJzLT5jYWNoZWRUZXh0SW5wdXRTdGF0ZSA9
IG5ld1RleHRJbnB1dFN0YXRlOworICAgIF9kYXRhLT5fcGFnZS0+Y29uZmlybUNvbXBvc2l0aW9u
KCk7CiB9CiAKIC0gKE5TQXJyYXkgKil2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0CkBAIC0x
NDA5LDI0ICsxNDAyLDE5IEBAIC0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVj
dGUKICAgICB9IGVsc2UKICAgICAgICAgdGV4dCA9IHN0cmluZzsKIAotICAgIFRleHRJbnB1dFN0
YXRlIG5ld1RleHRJbnB1dFN0YXRlOwotICAgIGlmIChfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0
YXRlKCkuaXNJblBhc3N3b3JkRmllbGQpIHsKKyAgICBpZiAoX2RhdGEtPl9wYWdlLT5lZGl0b3JT
dGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkKSB7CiAgICAgICAgIC8vIEluIHBhc3N3b3JkIGZpZWxk
cywgd2Ugb25seSBhbGxvdyBBU0NJSSBkZWFkIGtleXMsIGFuZCBkb24ndCBhbGxvdyBpbmxpbmUg
aW5wdXQsIG1hdGNoaW5nIE5TU2VjdXJlVGV4dElucHV0RmllbGQuCiAgICAgICAgIC8vIEFsbG93
aW5nIEFTQ0lJIGRlYWQga2V5cyBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIGZ1bGwgUm9tYW4gaW5w
dXQgd2hlbiB1c2luZyBhIFZpZXRuYW1lc2Uga2V5Ym9hcmQuCi0gICAgICAgIEFTU0VSVCghX2Rh
dGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmhhc0NvbXBvc2l0aW9uKTsKKyAgICAgICAgQVNT
RVJUKCFfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb24pOwogICAgICAg
ICBbW3N1cGVyIGlucHV0Q29udGV4dF0gZGlzY2FyZE1hcmtlZFRleHRdOyAvLyBJbmZvcm0gdGhl
IGlucHV0IG1ldGhvZCB0aGF0IHdlIHdvbid0IGhhdmUgYW4gaW5saW5lIGlucHV0IGFyZWEgZGVz
cGl0ZSBoYXZpbmcgYmVlbiBhc2tlZCB0by4KICAgICAgICAgaWYgKFt0ZXh0IGxlbmd0aF0gPT0g
MSAmJiBbW3RleHQgZGVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSBjaGFyYWN0
ZXJBdEluZGV4OjBdIDwgMHg4MCkgewotICAgICAgICAgICAgX2RhdGEtPl9wYWdlLT5pbnNlcnRU
ZXh0KHRleHQsIHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmVwbGFjZW1l
bnRSYW5nZSksIG5ld1RleHRJbnB1dFN0YXRlKTsKLSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJz
KQotICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlID0gbmV3
VGV4dElucHV0U3RhdGU7CisgICAgICAgICAgICBfZGF0YS0+X3BhZ2UtPmluc2VydFRleHQodGV4
dCwgcmVwbGFjZW1lbnRSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShyZXBsYWNlbWVudFJhbmdl
KSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgTlNCZWVwKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBfZGF0YS0+X3BhZ2UtPnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVy
bGluZXMsIG5ld1NlbFJhbmdlLmxvY2F0aW9uLCBOU01heFJhbmdlKG5ld1NlbFJhbmdlKSwgcmVw
bGFjZW1lbnRSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShyZXBsYWNlbWVudFJhbmdlKSwgbmV3
VGV4dElucHV0U3RhdGUpOwotICAgIGlmIChwYXJhbWV0ZXJzKQotICAgICAgICBwYXJhbWV0ZXJz
LT5jYWNoZWRUZXh0SW5wdXRTdGF0ZSA9IG5ld1RleHRJbnB1dFN0YXRlOworICAgIF9kYXRhLT5f
cGFnZS0+c2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgbmV3U2VsUmFuZ2UubG9jYXRp
b24sIE5TTWF4UmFuZ2UobmV3U2VsUmFuZ2UpLCByZXBsYWNlbWVudFJhbmdlLmxvY2F0aW9uLCBO
U01heFJhbmdlKHJlcGxhY2VtZW50UmFuZ2UpKTsKIH0KIAogLSAoTlNSYW5nZSltYXJrZWRSYW5n
ZQpAQCAtMTQ0NSwxMyArMTQzMywxMiBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1
dGVkU3Vic3RyCiB7CiAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwog
Ci0gICAgV0tWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9k
YXRhLT5faW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKLSAgICBpZiAocGFyYW1ldGVycyAm
JiAhcGFyYW1ldGVycy0+Y2FjaGVkVGV4dElucHV0U3RhdGUuc2VsZWN0aW9uSXNFZGl0YWJsZSkg
eworICAgIGlmICghX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxl
KSB7CiAgICAgICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdl
OigldSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoKTsKICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAKLSAgICBpZiAoX2RhdGEtPl9wYWdlLT5zZWxlY3Rp
b25TdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkKQorICAgIGlmIChfZGF0YS0+X3BhZ2UtPmVkaXRv
clN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQpCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBB
dHRyaWJ1dGVkU3RyaW5nIHJlc3VsdDsKQEAgLTIwMjAsNyArMjAwNyw3IEBAIC0gKHZvaWQpX3Jl
c2VuZEtleURvd25FdmVudDooTlNFdmVudCAqKWUKICAgICBfZGF0YS0+X2tleURvd25FdmVudEJl
aW5nUmVzZW50ID0gbnVsbHB0cjsKIH0KIAotLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KE5T
RXZlbnQgKilldmVudCB3aXRoQ2FjaGVkVGV4dElucHV0U3RhdGU6KGNvbnN0IFRleHRJbnB1dFN0
YXRlJiljYWNoZWRUZXh0SW5wdXRTdGF0ZSBzYXZpbmdDb21tYW5kc1RvOihWZWN0b3I8V2ViQ29y
ZTo6S2V5cHJlc3NDb21tYW5kPiYpY29tbWFuZHMKKy0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50
OihOU0V2ZW50ICopZXZlbnQgc2F2aW5nQ29tbWFuZHNUbzooVmVjdG9yPFdlYkNvcmU6OktleXBy
ZXNzQ29tbWFuZD4mKWNvbW1hbmRzCiB7CiAgICAgQVNTRVJUKCFfZGF0YS0+X2ludGVycHJldEtl
eUV2ZW50c1BhcmFtZXRlcnMpOwogICAgIEFTU0VSVChjb21tYW5kcy5pc0VtcHR5KCkpOwpAQCAt
MjAyOSw3ICsyMDE2LDYgQEAgLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKill
dgogICAgICAgICByZXR1cm4gTk87CiAKICAgICBXS1ZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJh
bWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5jYWNoZWRUZXh0SW5wdXRTdGF0ZSA9
IGNhY2hlZFRleHRJbnB1dFN0YXRlOwogICAgIHBhcmFtZXRlcnMuZXZlbnRJbnRlcnByZXRhdGlv
bkhhZFNpZGVFZmZlY3RzID0gZmFsc2U7CiAgICAgcGFyYW1ldGVycy5leGVjdXRpbmdTYXZlZEtl
eXByZXNzQ29tbWFuZHMgPSBmYWxzZTsKICAgICAvLyBXZSBhc3N1bWUgdGhhdCBhbiBpbnB1dCBt
ZXRob2QgaGFzIGNvbnN1bWVkIHRoZSBldmVudCwgYW5kIG9ubHkgY2hhbmdlIHRoaXMgYXNzdW1w
dGlvbiBpZiBvbmUgb2YgdGhlIE5TVGV4dElucHV0IG1ldGhvZHMgaXMgY2FsbGVkLgpAQCAtMjMz
OSw3ICsyMzI1LDcgQEAgLSAodm9pZClfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZQogICAgIH0KICAg
ICAvLyBXS1ZpZXcgaGFzIGEgc2luZ2xlIGlucHV0IGNvbnRleHQgZm9yIGFsbCBlZGl0YWJsZSBh
cmVhcyAoZXhjZXB0IGZvciBwbHVnLWlucykuCiAgICAgTlNUZXh0SW5wdXRDb250ZXh0ICpjb250
ZXh0ID0gW3N1cGVyIGlucHV0Q29udGV4dF07Ci0gICAgYm9vbCBpc0luUGFzc3dvcmRGaWVsZCA9
IF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZDsKKyAgICBi
b29sIGlzSW5QYXNzd29yZEZpZWxkID0gX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5Q
YXNzd29yZEZpZWxkOwogCiAgICAgaWYgKGlzSW5QYXNzd29yZEZpZWxkKSB7CiAgICAgICAgIGlm
ICghX2RhdGEtPl9pblNlY3VyZUlucHV0U3RhdGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDg0MDU3KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBjbGFz
cyBEcmF3aW5nQXJlYVByb3h5OwogICAgIGNsYXNzIEZpbmRJbmRpY2F0b3I7CiAgICAgY2xhc3Mg
TGF5ZXJUcmVlQ29udGV4dDsKLSAgICBzdHJ1Y3QgVGV4dElucHV0U3RhdGU7CiB9CiAKIEBjbGFz
cyBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwpAQCAtNTUsNyArNTQsNyBAQCBAaW50ZXJm
YWNlIFdLVmlldyAoSW50ZXJuYWwpCiAtICh2b2lkKV90b29sVGlwQ2hhbmdlZEZyb206KE5TU3Ry
aW5nICopb2xkVG9vbFRpcCB0bzooTlNTdHJpbmcgKiluZXdUb29sVGlwOwogLSAodm9pZClfc2V0
Q3Vyc29yOihOU0N1cnNvciAqKWN1cnNvcjsKIC0gKHZvaWQpX3NldFVzZXJJbnRlcmZhY2VJdGVt
U3RhdGU6KE5TU3RyaW5nICopY29tbWFuZE5hbWUgZW5hYmxlZDooQk9PTClpc0VuYWJsZWQgc3Rh
dGU6KGludCluZXdTdGF0ZTsKLS0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihOU0V2ZW50ICop
dGhlRXZlbnQgd2l0aENhY2hlZFRleHRJbnB1dFN0YXRlOihjb25zdCBXZWJLaXQ6OlRleHRJbnB1
dFN0YXRlJiljYWNoZWRUZXh0SW5wdXRTdGF0ZSBzYXZpbmdDb21tYW5kc1RvOihWZWN0b3I8V2Vi
Q29yZTo6S2V5cHJlc3NDb21tYW5kPiYpY29tbWFuZHM7CistIChCT09MKV9pbnRlcnByZXRLZXlF
dmVudDooTlNFdmVudCAqKXRoZUV2ZW50IHNhdmluZ0NvbW1hbmRzVG86KFZlY3RvcjxXZWJDb3Jl
OjpLZXlwcmVzc0NvbW1hbmQ+Jiljb21tYW5kczsKIC0gKHZvaWQpX3Jlc2VuZEtleURvd25FdmVu
dDooTlNFdmVudCAqKWV2ZW50OwogLSAoYm9vbClfZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0
b3I6KFNFTClzZWxlY3RvcjsKIC0gKE5TUmVjdClfY29udmVydFRvRGV2aWNlU3BhY2U6KE5TUmVj
dClyZWN0OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0JKHJldmlzaW9uIDg0MDU3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBA
QAogI2ltcG9ydCAiQXR0cmlidXRlZFN0cmluZy5oIgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5o
IgogI2ltcG9ydCAiRGljdGlvbmFyeVBvcHVwSW5mby5oIgorI2ltcG9ydCAiRWRpdG9yU3RhdGUu
aCIKICNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbXBvcnQgIlBhZ2VDbGll
bnQuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tlci5o
IgotI2ltcG9ydCAiVGV4dElucHV0U3RhdGUuaCIKICNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5o
IgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZS5oPgpAQCAtMTQxLDIwICsxNDEsMjAgQEAgdm9pZCBXZWJQYWdlUHJveHk6Ondp
bmRvd0FuZFZpZXdGcmFtZXNDaAogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6V2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5h
dGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3Jk
aW5hdGVzKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVy
bGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVp
bnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVu
ZCwgVGV4dElucHV0U3RhdGUmIG5ld1N0YXRlKQordm9pZCBXZWJQYWdlUHJveHk6OnNldENvbXBv
c2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1
bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5k
LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFu
Z2VFbmQpCiB7Ci0gICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6U2V0
Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVu
ZCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdlRW5kKSwgTWVzc2FnZXM6
OldlYlBhZ2U6OlNldENvbXBvc2l0aW9uOjpSZXBseShuZXdTdGF0ZSksIG1fcGFnZUlEKTsKKyAg
ICBwcm9jZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlvbih0
ZXh0LCB1bmRlcmxpbmVzLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCByZXBsYWNlbWVu
dFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQpLCBNZXNzYWdlczo6V2ViUGFnZTo6U2V0
Q29tcG9zaXRpb246OlJlcGx5KG1fZWRpdG9yU3RhdGUpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRpb24oVGV4dElucHV0U3RhdGUmIG5ld1N0YXRl
KQordm9pZCBXZWJQYWdlUHJveHk6OmNvbmZpcm1Db21wb3NpdGlvbigpCiB7Ci0gICAgcHJvY2Vz
cygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uKCksIE1l
c3NhZ2VzOjpXZWJQYWdlOjpDb25maXJtQ29tcG9zaXRpb246OlJlcGx5KG5ld1N0YXRlKSwgbV9w
YWdlSUQpOworICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZp
cm1Db21wb3NpdGlvbigpLCBNZXNzYWdlczo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uOjpS
ZXBseShtX2VkaXRvclN0YXRlKSwgbV9wYWdlSUQpOwogfQogCi1ib29sIFdlYlBhZ2VQcm94eTo6
aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VT
dGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgVGV4dElucHV0U3RhdGUmIG5ld1N0
YXRlKQorYm9vbCBXZWJQYWdlUHJveHk6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1
aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VF
bmQpCiB7CiAgICAgYm9vbCBoYW5kbGVkOwotICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2U6Okluc2VydFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBs
YWNlbWVudFJhbmdlRW5kKSwgTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydFRleHQ6OlJlcGx5KGhh
bmRsZWQsIG5ld1N0YXRlKSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhZ2U6Okluc2VydFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCBy
ZXBsYWNlbWVudFJhbmdlRW5kKSwgTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydFRleHQ6OlJlcGx5
KGhhbmRsZWQsIG1fZWRpdG9yU3RhdGUpLCBtX3BhZ2VJRCk7CiAgICAgcmV0dXJuIGhhbmRsZWQ7
CiB9CiAKQEAgLTE4NywxNyArMTg3LDIzIEBAIFdlYkNvcmU6OkludFJlY3QgV2ViUGFnZVByb3h5
OjpmaXJzdFJlY3QKICAgICByZXR1cm4gcmVzdWx0UmVjdDsKIH0KIAotYm9vbCBXZWJQYWdlUHJv
eHk6OmV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVz
c0NvbW1hbmQ+JiBjb21tYW5kcywgVGV4dElucHV0U3RhdGUmIG5ld1N0YXRlKQorYm9vbCBXZWJQ
YWdlUHJveHk6OmV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpL
ZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcykKIHsKICAgICBib29sIHJlc3VsdDsKLSAgICBwcm9j
ZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeGVjdXRlS2V5cHJlc3NDb21tYW5k
cyhjb21tYW5kcyksIE1lc3NhZ2VzOjpXZWJQYWdlOjpFeGVjdXRlS2V5cHJlc3NDb21tYW5kczo6
UmVwbHkocmVzdWx0LCBuZXdTdGF0ZSksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeGVjdXRlS2V5cHJlc3NDb21tYW5kcyhjb21tYW5kcyks
IE1lc3NhZ2VzOjpXZWJQYWdlOjpFeGVjdXRlS2V5cHJlc3NDb21tYW5kczo6UmVwbHkocmVzdWx0
LCBtX2VkaXRvclN0YXRlKSwgbV9wYWdlSUQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3Zv
aWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVFZGl0b3JTdGF0ZSgpCit7CisgICAgY29uc3QgZG91Ymxl
IG1lc3NhZ2VUaW1lb3V0ID0gMjA7CisgICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFnZTo6R2V0RWRpdG9yU3RhdGUoKSwgTWVzc2FnZXM6OldlYlBhZ2U6OkdldEVkaXRvclN0
YXRlOjpSZXBseShtX2VkaXRvclN0YXRlKSwgbV9wYWdlSUQsIE1lc3NhZ2VUaW1lb3V0KTsKK30K
KwogYm9vbCBXZWJQYWdlUHJveHk6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlw
ZXMpCiB7CiAgICAgYm9vbCByZXN1bHQ7Ci0gICAgY29uc3QgZG91YmxlIE1lc3NhZ2VUaW1lb3V0
ID0gMjA7CisgICAgY29uc3QgZG91YmxlIG1lc3NhZ2VUaW1lb3V0ID0gMjA7CiAgICAgcHJvY2Vz
cygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlcyksIE1lc3NhZ2VzOjpXZWJQYWdlOjpX
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlSUQsIE1lc3Nh
Z2VUaW1lb3V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjA1LDcgKzIxMSw3IEBAIGJv
b2wgV2ViUGFnZVByb3h5Ojp3cml0ZVNlbGVjdGlvblRvUGFzdGUKIGJvb2wgV2ViUGFnZVByb3h5
OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkKIHsKICAgICBib29sIHJlc3VsdDsKLSAgICBjb25zdCBkb3VibGUgTWVzc2FnZVRpbWVvdXQg
PSAyMDsKKyAgICBjb25zdCBkb3VibGUgbWVzc2FnZVRpbWVvdXQgPSAyMDsKICAgICBwcm9jZXNz
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFnZTo6UmVhZFNlbGVjdGlvbkZyb21Q
YXN0ZWJvYXJkOjpSZXBseShyZXN1bHQpLCBtX3BhZ2VJRCwgTWVzc2FnZVRpbWVvdXQpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMjcsOSArMjMzLDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2sKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihwb2ludCksIG1fcGFnZUlE
KTsgCiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjppbnRlcnByZXRRdWV1ZWRLZXlFdmVudChjb25z
dCBUZXh0SW5wdXRTdGF0ZSYgc3RhdGUsIGJvb2wmIGhhbmRsZWQsIFZlY3RvcjxXZWJDb3JlOjpL
ZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcykKK3ZvaWQgV2ViUGFnZVByb3h5OjppbnRlcnByZXRR
dWV1ZWRLZXlFdmVudChjb25zdCBFZGl0b3JTdGF0ZSYgc3RhdGUsIGJvb2wmIGhhbmRsZWQsIFZl
Y3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcykKIHsKLSAgICBoYW5kbGVk
ID0gbV9wYWdlQ2xpZW50LT5pbnRlcnByZXRLZXlFdmVudChtX2tleUV2ZW50UXVldWUuZmlyc3Qo
KSwgc3RhdGUsIGNvbW1hbmRzKTsKKyAgICBtX2VkaXRvclN0YXRlID0gc3RhdGU7CisgICAgaGFu
ZGxlZCA9IG1fcGFnZUNsaWVudC0+aW50ZXJwcmV0S2V5RXZlbnQobV9rZXlFdmVudFF1ZXVlLmZp
cnN0KCksIGNvbW1hbmRzKTsKIH0KIAogLy8gQ29tcGxleCB0ZXh0IGlucHV0IHN1cHBvcnQgZm9y
IHBsdWctaW5zLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsx
NzksNyBAQAogCQkxQUEyRTUxRTEyRTRDMDVFMDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMkU1MUMxMkU0
QzA1RTAwQkM0OTY2IC8qIENHVXRpbGl0aWVzLmNwcCAqLzsgfTsKIAkJMUFBNDE3Q0IxMkMwMEND
QTAwMkJFNjdCIC8qIFRleHRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUE0MTdDOTEyQzAwQ0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXIu
aCAqLzsgfTsKIAkJMUFBNDE3RUYxMkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVja2VyTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNDE3RUQx
MkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVja2VyTWFjLm1tICovOyB9OwotCQkxQUE0MUFCNTEy
QzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBTZWxl
Y3Rpb25TdGF0ZS5oICovOyB9OworCQkxQUE0MUFCNTEyQzAyRUM0MDAyQkU2N0IgLyogRWRpdG9y
U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
QTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBFZGl0b3JTdGF0ZS5oICovOyB9OwogCQkxQUE0Nzky
MzEyQTU5RkQ5MDA4MjM2QzMgLyogUGx1Z2luUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTQ3OTIyMTJBNTlGRDkwMDgyMzZDMyAv
KiBQbHVnaW5Qcm9jZXNzTWFjLm1tICovOyB9OwogCQkxQUE0NzlCMDEyQTVBNDM2MDA4MjM2QzMg
LyogQ2FyYm9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBQTFDRDA2MTAwRkExQkEwMDc4REVCQyAvKiBDYXJib24uZnJhbWV3b3Jr
ICovOyB9OwogCQkxQUE1NkYyOTExRTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNTZGMjgx
MUU5MkJDODAwNjFCODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIuaCAqLzsgfTsKQEAgLTc4OCw3ICs3
ODgsNiBAQAogCQlFMTM0RjAxQTEyRUE1RDk5MDA0RUM1OEQgLyogV0tQcmludGluZ1ZpZXcubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM0RjAxOTEy
RUE1RDk5MDA0RUM1OEQgLyogV0tQcmludGluZ1ZpZXcubW0gKi87IH07CiAJCUUxNzlGRDlDMTM0
RDM4MDYwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3OUZEOUIxMzREMzgwNjAwMTVCODgzIC8qIEFy
Z3VtZW50Q29kZXJzTWFjLmggKi87IH07CiAJCUUxNzlGRDlGMTM0RDM4MjUwMDE1Qjg4MyAvKiBB
cmd1bWVudENvZGVyc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNzlGRDlFMTM0RDM4MjUwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5t
bSAqLzsgfTsKLQkJRTE4MzkzNDkxMzQyOTdBNTAwMTg0MkVDIC8qIFRleHRJbnB1dFN0YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgzOTM0ODEz
NDI5N0E1MDAxODQyRUMgLyogVGV4dElucHV0U3RhdGUuaCAqLzsgfTsKIAkJRTE4QzkyRjQxMkRC
OUU3MTAwQ0YyQUVCIC8qIFByaW50SW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMThDOTJGMzEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZv
LmNwcCAqLzsgfTsKIAkJRTFBMzE3MzIxMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJp
bmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMx
NzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggKi87IH07CiAJCUUxQTMx
NzM1MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBMzE3MzQxMzRDRUE4MDAwN0M5QTRG
IC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi87IH07CkBAIC0xMDU1LDcgKzEwNTQsNyBAQAogCQkx
QUEyRTUxQzEyRTRDMDVFMDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0dVdGlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQUE0MTdDOTEyQzAwQ0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNrZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNDE3RUQxMkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVj
a2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dENo
ZWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQTQxQUI0MTJDMDJF
QzQwMDJCRTY3QiAvKiBTZWxlY3Rpb25TdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTZWxlY3Rpb25TdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QUE0MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogRWRpdG9yU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRWRpdG9yU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUFBNDc5MjIxMkE1OUZEOTAwODIzNkMzIC8qIFBsdWdpblByb2Nlc3NNYWMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE1NkYyODExRTkyQkM4MDA2MUI4ODIg
LyogUGx1Z2luQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bHVnaW5Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTU4ODkw
MTFFRTcwNDAwMDYxQjg4MiAvKiBOZXRzY2FwZVBsdWdpblN0cmVhbS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOZXRzY2FwZVBsdWdpblN0cmVhbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTcxNCw3ICsxNzEzLDYgQEAKIAkJRTEzNEYwMTkxMkVBNUQ5OTAw
NEVDNThEIC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV0tQcmludGluZ1ZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxNzlGRDlCMTM0RDM4MDYwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmd1bWVudENvZGVyc01hYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTc5RkQ5RTEzNEQzODI1MDAxNUI4ODMgLyogQXJndW1l
bnRDb2RlcnNNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBB
cmd1bWVudENvZGVyc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE4Mzkz
NDgxMzQyOTdBNTAwMTg0MkVDIC8qIFRleHRJbnB1dFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRleHRJbnB1dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxOEM5MkYzMTJEQjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRJbmZvLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTFBMzE3MzExMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRT
dHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXR0cmlidXRlZFN0cmlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUEzMTczNDEzNENFQTgwMDA3QzlB
NEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEF0dHJpYnV0ZWRTdHJpbmcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMDg2LDcgKzIwODQsNyBAQAogCQkJCTFBQUI0QThDMTI5NkYwQTIwMDIzOTUyRiAvKiBT
YW5kYm94RXh0ZW5zaW9uLmggKi8sCiAJCQkJMzMxNTI5NzMxMzBEMENCMjAwRUQyNDgzIC8qIFNl
Y3VyaXR5T3JpZ2luRGF0YS5jcHAgKi8sCiAJCQkJMzMxNTI5NzQxMzBEMENCMjAwRUQyNDgzIC8q
IFNlY3VyaXR5T3JpZ2luRGF0YS5oICovLAotCQkJCTFBQTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAv
KiBTZWxlY3Rpb25TdGF0ZS5oICovLAorCQkJCTFBQTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBF
ZGl0b3JTdGF0ZS5oICovLAogCQkJCTUxOEQyQ0M4MTJENTFERkIwMDNCQjkzQiAvKiBTZXNzaW9u
U3RhdGUuY3BwICovLAogCQkJCTUxOEQyQ0M5MTJENTFERkIwMDNCQjkzQiAvKiBTZXNzaW9uU3Rh
dGUuaCAqLywKIAkJCQkxQTY0MjBFMjEyRENFMkZGMDBDQUFFMkMgLyogU2hhcmVhYmxlQml0bWFw
LmNwcCAqLywKQEAgLTI3ODksNyArMjc4Nyw2IEBACiAJCQkJMUFBQjRBQTkxMjk2RjE1NDAwMjM5
NTJGIC8qIFNhbmRib3hFeHRlbnNpb25NYWMubW0gKi8sCiAJCQkJMUE5NjM2QkExMkYzNDg0OTAw
NzhBMDYyIC8qIFNoYXJlYWJsZVN1cmZhY2UuY3BwICovLAogCQkJCTFBOTYzNkJCMTJGMzQ4NDkw
MDc4QTA2MiAvKiBTaGFyZWFibGVTdXJmYWNlLmggKi8sCi0JCQkJRTE4MzkzNDgxMzQyOTdBNTAw
MTg0MkVDIC8qIFRleHRJbnB1dFN0YXRlLmggKi8sCiAJCQkJQkM5RTk1RDIxMTQ0OUIwMzAwODcw
RTcxIC8qIFVwZGF0ZUNodW5rLmNwcCAqLywKIAkJCQlCQzlFOTVEMTExNDQ5QjAzMDA4NzBFNzEg
LyogVXBkYXRlQ2h1bmsuaCAqLywKIAkJCQlCQ0UyMzI2MjEyMkM2Q0YzMDBENUMzNUEgLyogV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tICovLApAQCAtMzU4OCw3ICszNTg1LDcgQEAKIAkJCQlC
Qzg1OEEyMDEyQzAzNTdCMDBFREVCMkUgLyogV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUE0MTdDQjEyQzAwQ0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTkwOTg1NEVEMTJCQzRFMTgwMDBBRDA4MCAvKiBXZWJNZW1vcnlT
YW1wbGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQUE0MUFCNTEyQzAyRUM0MDAyQkU2N0IgLyog
U2VsZWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBQTQxQUI1MTJDMDJFQzQwMDJC
RTY3QiAvKiBFZGl0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjY3MkQxMkM3RURG
NzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkND
RjZBQkQxMkM5MUVGOTAwOEY5QzM1IC8qIFdlYkltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0NGNkFDMzEyQzkxRjM0MDA4RjlDMzUgLyogV0tJbWFnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
NjgxLDcgKzM2NzgsNiBAQAogCQkJCTUxMTBBRTBEMTMzQzE2Q0IwMDcyNzE3QSAvKiBXS0ljb25E
YXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyM0NGMUMxMzNEMjYwQTAwNTZGODAwIC8q
IFdLSWNvbkRhdGFiYXNlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODM0NTkzMTM0NTMyRTkw
MDkyQjY5NiAvKiBXZWJJY29uRGF0YWJhc2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUUx
ODM5MzQ5MTM0Mjk3QTUwMDE4NDJFQyAvKiBUZXh0SW5wdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzBGQTUyNDMxMzQ1Njk0QTAwMjhFOEMyIC8qIExheWVyVHJlZUhvc3RDQU1hYy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTFBMzE3MzIxMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRT
dHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNzlGRDlDMTM0RDM4MDYwMDE1Qjg4MyAvKiBB
cmd1bWVudENvZGVyc01hYy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuY3BwCShyZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkVkaXRvckNsaWVudC5o
IgogCi0jaW5jbHVkZSAiU2VsZWN0aW9uU3RhdGUuaCIKKyNpbmNsdWRlICJFZGl0b3JTdGF0ZS5o
IgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpAQCAtNDQsNyArNDQsNiBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclR5cGluZ0dlc3R1cmVJ
bmRpY2F0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0xOTEsMjQgKzE5MCw3
IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2UKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0
ZTsKLSAgICBzZWxlY3Rpb25TdGF0ZS5pc05vbmUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9u
ZSgpOwotICAgIHNlbGVjdGlvblN0YXRlLmlzQ29udGVudEVkaXRhYmxlID0gZnJhbWUtPnNlbGVj
dGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotICAgIHNlbGVjdGlvblN0YXRlLmlzQ29udGVu
dFJpY2hseUVkaXRhYmxlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0
YWJsZSgpOwotICAgIHNlbGVjdGlvblN0YXRlLmlzSW5QYXNzd29yZEZpZWxkID0gZnJhbWUtPnNl
bGVjdGlvbigpLT5pc0luUGFzc3dvcmRGaWVsZCgpOwotICAgIHNlbGVjdGlvblN0YXRlLmhhc0Nv
bXBvc2l0aW9uID0gZnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpOwotCi0gICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLSAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgc2l6ZV90IGxvY2F0aW9uOwotICAgICAgICBz
aXplX3QgbGVuZ3RoOwotICAgICAgICBpZiAoIVRleHRJdGVyYXRvcjo6bG9jYXRpb25BbmRMZW5n
dGhGcm9tUmFuZ2UocmFuZ2UuZ2V0KCksIGxvY2F0aW9uLCBsZW5ndGgpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBzZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlU3RhcnQgPSBzdGF0
aWNfY2FzdDx1aW50NjRfdD4obG9jYXRpb24pOwotICAgICAgICBzZWxlY3Rpb25TdGF0ZS5zZWxl
Y3RlZFJhbmdlTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7Ci0gICAgfQot
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvblN0YXRl
Q2hhbmdlZChzZWxlY3Rpb25TdGF0ZSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5nZWQobV9wYWdlLT5lZGl0b3JTdGF0ZSgpKSk7CiAK
ICNpZiBQTEFURk9STShXSU4pCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gZ28gaW50
byB0aGUgc2VsZWN0aW9uIHN0YXRlLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw2
ICszMTUsMjIgQEAgUGFzc1JlZlB0cjxQbHVnaW4+IFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbgogI2Vu
ZGlmCiB9CiAKK0VkaXRvclN0YXRlIFdlYlBhZ2U6OmVkaXRvclN0YXRlKCkgY29uc3QKK3sKKyAg
ICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKKyAgICBBU1NFUlQoZnJhbWUpOworCisgICAgRWRpdG9yU3RhdGUgcmVzdWx0Owor
ICAgIHJlc3VsdC5zZWxlY3Rpb25Jc05vbmUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgp
OworICAgIHJlc3VsdC5zZWxlY3Rpb25Jc1JhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc1Jh
bmdlKCk7CisgICAgcmVzdWx0LmlzQ29udGVudEVkaXRhYmxlID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJlc3VsdC5pc0NvbnRlbnRSaWNobHlFZGl0YWJs
ZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKKyAgICBy
ZXN1bHQuaXNJblBhc3N3b3JkRmllbGQgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzSW5QYXNzd29y
ZEZpZWxkKCk7CisgICAgcmVzdWx0Lmhhc0NvbXBvc2l0aW9uID0gZnJhbWUtPmVkaXRvcigpLT5o
YXNDb21wb3NpdGlvbigpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFN0cmluZyBX
ZWJQYWdlOjpyZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGV4dGVybmFsUmVwcmVzZW50YXRpb24obV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLCBS
ZW5kZXJBc1RleHRCZWhhdmlvck5vcm1hbCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDg0MDU3KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDgg
KzEwNSw4IEBAIGNsYXNzIFdlYlBhZ2VHcm91cFByb3h5OwogY2xhc3MgV2ViUG9wdXBNZW51Owog
Y2xhc3MgV2ViV2hlZWxFdmVudDsKIHN0cnVjdCBBdHRyaWJ1dGVkU3RyaW5nOworc3RydWN0IEVk
aXRvclN0YXRlOwogc3RydWN0IFByaW50SW5mbzsKLXN0cnVjdCBUZXh0SW5wdXRTdGF0ZTsKIHN0
cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFdlYlByZWZlcmVuY2VzU3Rv
cmU7CiAKQEAgLTIwOSw2ICsyMDksOCBAQCBwdWJsaWM6CiAgICAgV2ViRnJhbWUqIG1haW5GcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkZyYW1lLmdldCgpOyB9CiAgICAgUGFzc1JlZlB0cjxQ
bHVnaW4+IGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW46OlBhcmFtZXRlcnMmKTsKIAorICAgIEVk
aXRvclN0YXRlIGVkaXRvclN0YXRlKCkgY29uc3Q7CisKICAgICBTdHJpbmcgcmVuZGVyVHJlZUV4
dGVybmFsUmVwcmVzZW50YXRpb24oKSBjb25zdDsKICAgICB2b2lkIGV4ZWN1dGVFZGl0aW5nQ29t
bWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KTsK
ICAgICBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUpOwpAQCAtMzEyLDE1ICszMTQsMTYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc2VuZENv
bXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpOwogCi0gICAgdm9pZCBzZXRDb21wb3Np
dGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVy
bGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVj
dGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNl
bWVudFJhbmdlRW5kLCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpOwotICAgIHZvaWQgY29uZmly
bUNvbXBvc2l0aW9uKFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSk7Ci0gICAgdm9pZCBpbnNlcnRU
ZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1
aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBib29sJiBoYW5kbGVkLCBUZXh0SW5wdXRTdGF0
ZSYgbmV3U3RhdGUpOworICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0
LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2
NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxh
Y2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgRWRpdG9yU3Rh
dGUmIG5ld1N0YXRlKTsKKyAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihFZGl0b3JTdGF0ZSYg
bmV3U3RhdGUpOworICAgIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2
NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwg
Ym9vbCYgaGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKTsKICAgICB2b2lkIGdldE1hcmtl
ZFJhbmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CiAgICAgdm9pZCBn
ZXRTZWxlY3RlZFJhbmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CiAg
ICAgdm9pZCBnZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKHVpbnQ2NF90IGxvY2F0aW9u
LCB1aW50NjRfdCBsZW5ndGgsIEF0dHJpYnV0ZWRTdHJpbmcmKTsKICAgICB2b2lkIGNoYXJhY3Rl
ckluZGV4Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQ2NF90JiBy
ZXN1bHQpOwogICAgIHZvaWQgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9j
YXRpb24sIHVpbnQ2NF90IGxlbmd0aCwgV2ViQ29yZTo6SW50UmVjdCYgcmVzdWx0UmVjdCk7Ci0g
ICAgdm9pZCBleGVjdXRlS2V5cHJlc3NDb21tYW5kcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5
cHJlc3NDb21tYW5kPiYsIGJvb2wmIGhhbmRsZWQsIFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSk7
CisgICAgdm9pZCBleGVjdXRlS2V5cHJlc3NDb21tYW5kcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6
S2V5cHJlc3NDb21tYW5kPiYsIGJvb2wmIGhhbmRsZWQsIEVkaXRvclN0YXRlJiBuZXdTdGF0ZSk7
CisgICAgdm9pZCBnZXRFZGl0b3JTdGF0ZShFZGl0b3JTdGF0ZSYpOwogICAgIHZvaWQgd3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgV1RGOjpTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBj
b25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgYm9vbCYgcmVz
dWx0KTsKICAgICB2b2lkIHJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBXVEY6OlN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIGJvb2wmIHJlc3VsdCk7CiAgICAgdm9pZCBzaG91bGREZWxh
eVdpbmRvd09yZGVyaW5nRXZlbnQoY29uc3QgV2ViS2l0OjpXZWJNb3VzZUV2ZW50JiwgYm9vbCYg
cmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0xODQsMTYgKzE4NCwxOCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBXcml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZChXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgV1RGOjpWZWN0
b3I8V1RGOjpTdHJpbmc+IHBhc3RlYm9hcmRUeXBlcykgLT4gKGJvb2wgcmVzdWx0KQogICAgIFJl
YWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4g
KGJvb2wgcmVzdWx0KQogCisgICAgR2V0RWRpdG9yU3RhdGUoKSAtPiAoV2ViS2l0OjpFZGl0b3JT
dGF0ZSBuZXdTdGF0ZSkKKwogICAgICMgVGV4dCBpbnB1dC4KLSAgICBTZXRDb21wb3NpdGlvbihX
VEY6OlN0cmluZyB0ZXh0LCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGlu
ZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlv
bkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVu
dFJhbmdlRW5kKSAtPiAoV2ViS2l0OjpUZXh0SW5wdXRTdGF0ZSBuZXdTdGF0ZSkKLSAgICBDb25m
aXJtQ29tcG9zaXRpb24oKSAtPiAoV2ViS2l0OjpUZXh0SW5wdXRTdGF0ZSBuZXdTdGF0ZSkKLSAg
ICBJbnNlcnRUZXh0KFdURjo6U3RyaW5nIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VT
dGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCkgLT4gKGJvb2wgaGFuZGxlZCwgV2Vi
S2l0OjpUZXh0SW5wdXRTdGF0ZSBuZXdTdGF0ZSkKKyAgICBTZXRDb21wb3NpdGlvbihXVEY6OlN0
cmluZyB0ZXh0LCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5k
ZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwg
dWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdl
RW5kKSAtPiAoV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKKyAgICBDb25maXJtQ29tcG9z
aXRpb24oKSAtPiAoV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKKyAgICBJbnNlcnRUZXh0
KFdURjo6U3RyaW5nIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0
X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCkgLT4gKGJvb2wgaGFuZGxlZCwgV2ViS2l0OjpFZGl0b3JT
dGF0ZSBuZXdTdGF0ZSkKICAgICBHZXRNYXJrZWRSYW5nZSgpIC0+ICh1aW50NjRfdCBsb2NhdGlv
biwgdWludDY0X3QgbGVuZ3RoKQogICAgIEdldFNlbGVjdGVkUmFuZ2UoKSAtPiAodWludDY0X3Qg
bG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCkKICAgICBHZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJv
bVJhbmdlKHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgpIC0+IChXZWJLaXQ6OkF0
dHJpYnV0ZWRTdHJpbmcgcmVzdWx0KQogICAgIENoYXJhY3RlckluZGV4Rm9yUG9pbnQoV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQpIC0+ICh1aW50NjRfdCByZXN1bHQpCiAgICAgRmlyc3RSZWN0Rm9y
Q2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCkgLT4gKFdl
YkNvcmU6OkludFJlY3QgcmVzdWx0UmVjdCkKLSAgICBFeGVjdXRlS2V5cHJlc3NDb21tYW5kcyhW
ZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBzYXZlZENvbW1hbmRzKSAtPiAoYm9vbCBo
YW5kbGVkLCBXZWJLaXQ6OlRleHRJbnB1dFN0YXRlIG5ld1N0YXRlKQorICAgIEV4ZWN1dGVLZXlw
cmVzc0NvbW1hbmRzKFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IHNhdmVkQ29tbWFu
ZHMpIC0+IChib29sIGhhbmRsZWQsIFdlYktpdDo6RWRpdG9yU3RhdGUgbmV3U3RhdGUpCiAgICAg
U2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50KFdlYktpdDo6V2ViTW91c2VFdmVudCBldmVu
dCkgLT4gKGJvb2wgcmVzdWx0KQogICAgIEFjY2VwdHNGaXJzdE1vdXNlKGludCBldmVudE51bWJl
ciwgV2ViS2l0OjpXZWJNb3VzZUV2ZW50IGV2ZW50KSAtPiAoYm9vbCByZXN1bHQpCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0JKHJldmlzaW9uIDg0MDU3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4
IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5oIgogI2ltcG9ydCAiQXR0
cmlidXRlZFN0cmluZy5oIgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgorI2ltcG9ydCAiRWRp
dG9yU3RhdGUuaCIKICNpbXBvcnQgIlBsdWdpblZpZXcuaCIKLSNpbXBvcnQgIlRleHRJbnB1dFN0
YXRlLmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgIldlYkV2
ZW50LmgiCiAjaW1wb3J0ICJXZWJFdmVudENvbnZlcnNpb24uaCIKQEAgLTExOCwxNCArMTE4LDYg
QEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9yTmFtZQogICAgIHJldHVybiBz
ZWxlY3Rvck5hbWUubGVmdChzZWxlY3Rvck5hbWVMZW5ndGggLSAxKTsKIH0KIAotc3RhdGljIFRl
eHRJbnB1dFN0YXRlIGN1cnJlbnRUZXh0SW5wdXRTdGF0ZShGcmFtZSogZnJhbWUpCi17Ci0gICAg
VGV4dElucHV0U3RhdGUgc3RhdGU7Ci0gICAgc3RhdGUuaGFzTWFya2VkVGV4dCA9IGZyYW1lLT5l
ZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsKLSAgICBzdGF0ZS5zZWxlY3Rpb25Jc0VkaXRhYmxl
ID0gIWZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLT5p
c0NvbnRlbnRFZGl0YWJsZSgpOwotICAgIHJldHVybiBzdGF0ZTsKLX0KLQogc3RhdGljIEZyYW1l
KiBmcmFtZUZvckV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIE5vZGUqIG5vZGUg
PSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwpAQCAtMTkwLDcgKzE4Miw3IEBAIGJvb2wgV2Vi
UGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQKICAgICBpZiAoc2F2ZUNvbW1hbmRzKSB7
CiAgICAgICAgIEtleWJvYXJkRXZlbnQqIG9sZEV2ZW50ID0gbV9rZXlib2FyZEV2ZW50QmVpbmdJ
bnRlcnByZXRlZDsKICAgICAgICAgbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZCA9IGV2
ZW50OwotICAgICAgICBib29sIHNlbmRSZXN1bHQgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkludGVycHJldFF1ZXVl
ZEtleUV2ZW50KGN1cnJlbnRUZXh0SW5wdXRTdGF0ZShmcmFtZSkpLCAKKyAgICAgICAgYm9vbCBz
ZW5kUmVzdWx0ID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnRlcnByZXRRdWV1ZWRLZXlFdmVudChlZGl0b3JTdGF0
ZSgpKSwgCiAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnRlcnByZXRRdWV1
ZWRLZXlFdmVudDo6UmVwbHkoZXZlbnRXYXNIYW5kbGVkLCBjb21tYW5kcyksIG1fcGFnZUlEKTsK
ICAgICAgICAgbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZCA9IG9sZEV2ZW50OwogICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCkBAIC0yMjksNyArMjIxLDcgQEAgdm9pZCBXZWJQYWdlOjpz
ZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1ZwogICAgIH0KIH0KIAotdm9pZCBXZWJQYWdlOjpzZXRD
b21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGlu
ZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlv
bkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVu
dFJhbmdlRW5kLCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpCit2b2lkIFdlYlBhZ2U6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5l
PiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9u
RW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50
UmFuZ2VFbmQsIEVkaXRvclN0YXRlJiBuZXdTdGF0ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBt
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIApAQCAtMjQz
LDE5ICsyMzUsMTkgQEAgdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbgog
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMs
IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwogICAgIH0KIAotICAgIG5ld1N0YXRlID0g
Y3VycmVudFRleHRJbnB1dFN0YXRlKGZyYW1lKTsKKyAgICBuZXdTdGF0ZSA9IGVkaXRvclN0YXRl
KCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKFRleHRJbnB1dFN0YXRl
JiBuZXdTdGF0ZSkKK3ZvaWQgV2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKEVkaXRvclN0YXRl
JiBuZXdTdGF0ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29uZmly
bUNvbXBvc2l0aW9uKCk7CiAKLSAgICBuZXdTdGF0ZSA9IGN1cnJlbnRUZXh0SW5wdXRTdGF0ZShm
cmFtZSk7CisgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwogfQogCi12b2lkIFdlYlBhZ2U6
Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdl
U3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQsIGJvb2wmIGhhbmRsZWQsIFRleHRJ
bnB1dFN0YXRlJiBuZXdTdGF0ZSkKK3ZvaWQgV2ViUGFnZTo6aW5zZXJ0VGV4dChjb25zdCBTdHJp
bmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRSYW5nZUVuZCwgYm9vbCYgaGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKQogewog
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogCkBAIC0yNzQsNyArMjY2LDcgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnRUZXh0
KGNvbnN0IFN0cmluZyYgdAogICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3Np
dGlvbih0ZXh0KTsKICAgICB9CiAKLSAgICBuZXdTdGF0ZSA9IGN1cnJlbnRUZXh0SW5wdXRTdGF0
ZShmcmFtZSk7CisgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwogfQogCiB2b2lkIFdlYlBh
Z2U6OmdldE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkK
QEAgLTM5MywxMyArMzg1LDEwIEBAIHZvaWQgV2ViUGFnZTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVy
UmFuZ2UKICAgICByZXN1bHRSZWN0ID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhy
ZWN0KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpleGVjdXRlS2V5cHJlc3NDb21tYW5kcyhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMsIGJvb2wmIGhhbmRsZWQs
IFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSkKK3ZvaWQgV2ViUGFnZTo6ZXhlY3V0ZUtleXByZXNz
Q29tbWFuZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRz
LCBib29sJiBoYW5kbGVkLCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpCiB7Ci0gICAgRnJhbWUqIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0K
ICAgICBoYW5kbGVkID0gZXhlY3V0ZUtleXByZXNzQ29tbWFuZHNJbnRlcm5hbChjb21tYW5kcywg
bV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZCk7Ci0KLSAgICBuZXdTdGF0ZSA9IGN1cnJl
bnRUZXh0SW5wdXRTdGF0ZShmcmFtZSk7CisgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwog
fQogCiBzdGF0aWMgYm9vbCBpc1Bvc2l0aW9uSW5SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHBvc2l0aW9uLCBSYW5nZSogcmFuZ2UpCkBAIC01OTUsNiArNTg0LDExIEBAIHZvaWQgV2ViUGFn
ZTo6cmVnaXN0ZXJVSVByb2Nlc3NBY2Nlc3NpYmkKICNlbmRpZgogfQogCit2b2lkIFdlYlBhZ2U6
OmdldEVkaXRvclN0YXRlKEVkaXRvclN0YXRlJiBjdXJyZW50U3RhdGUpCit7CisgICAgY3VycmVu
dFN0YXRlID0gZWRpdG9yU3RhdGUoKTsKK30KKwogdm9pZCBXZWJQYWdlOjp3cml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBib29sJiByZXN1bHQpCiB7CiAgICAgRnJhbWUqIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90111</attachid>
            <date>2011-04-18 16:06:27 -0700</date>
            <delta_ts>2011-04-19 14:13:50 -0700</delta_ts>
            <desc>with build fixes</desc>
            <filename>EditorState.txt</filename>
            <type>text/plain</type>
            <size>70330</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MjAwKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzUgQEAKKzIwMTEtMDQtMTggIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgMTAwJSByZXByb2R1Y2libGUgY3Jhc2ggd2hlbiByaWdodC1j
bGlja2luZyBhbnkgZWxlbWVudCBpbiBXZWIgSW5zcGVjdG9yIG9uIGFueSBwYWdlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgyMgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vOTI3OTY5OD4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNz
YWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvRWRpdG9yU3RhdGUuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYktpdDIvU2hhcmVkL1NlbGVjdGlvblN0YXRlLmguCisgICAgICAgIChXZWJLaXQ6OkVk
aXRvclN0YXRlOjpFZGl0b3JTdGF0ZSk6CisgICAgICAgICogU2hhcmVkL1NlbGVjdGlvblN0YXRl
Lmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL21hYy9UZXh0SW5wdXRTdGF0ZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9QYWdlQ2xpZW50SW1wbC5tbTogKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmludGVycHJldEtl
eUV2ZW50KToKKyAgICAgICAgQ29tYmluZWQgVGV4dElucHV0U3RhdGUgYW5kIEVkaXRvclN0YXRl
IGluIG9uZSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHVwZGF0ZWQgd2hlbmV2ZXIgd2UgZ2V0CisgICAg
ICAgIGEgY2hhbmNlIHRvLiBUaGVyZSBpcyBubyBzZW5zZSB0byBrZWVwIHBvc3NpYmx5IHN0YWxl
IFNlbGVjdGlvblN0YXRlIGRhdGEgd2hlbiB3ZSBoYXZlIGFscmVhZHkKKyAgICAgICAgcmVxdWVz
dGVkIHRoZSBtb3N0IHJlY2VudCBkYXRhIHN5bmNocm9ub3VzbHkuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyB2YWxpZFJlcXVlc3Rv
ckZvclNlbmRUeXBlOnJldHVyblR5cGU6XSk6IFVwZGF0ZSBFZGl0b3JTdGF0ZSBzeW5jaHJvbm91
c2x5LCBiZWNhdXNlCisgICAgICAgIGl0J3MgbGlrZWx5IHRoYXQgYXN5bmNocm9ub3VzIG5vdGlm
aWNhdGlvbiBoYXNuJ3QgYmVlbiBoYW5kbGVkIHlldC4KKyAgICAgICAgKC1bV0tWaWV3IHZhbGlk
YXRlVXNlckludGVyZmFjZUl0ZW06XSk6IFVwZGF0ZWQgZm9yIHN0cnVjdCBtZXJnaW5nLgorICAg
ICAgICAoLVtXS1ZpZXcgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50Ol0pOiBEaXR0
by4KKyAgICAgICAgKC1bV0tWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXS1ZpZXcgaW5zZXJ0VGV4dDpyZXBsYWNlbWVudFJhbmdlOl0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV0tWaWV3IF9oYW5kbGVTdHlsZUtleUVxdWl2YWxlbnQ6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXS1ZpZXcgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdKTogRGl0dG8uCisg
ICAgICAgICgtW1dLVmlldyBpbnB1dENvbnRleHRdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmll
dyBoYXNNYXJrZWRUZXh0XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgdW5tYXJrVGV4dF0p
OiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHNldE1hcmtlZFRleHQ6c2VsZWN0ZWRSYW5nZTpy
ZXBsYWNlbWVudFJhbmdlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IGF0dHJpYnV0ZWRT
dWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlOmFjdHVhbFJhbmdlOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IF9pbnRlcnByZXRLZXlFdmVudDpzYXZpbmdDb21tYW5kc1RvOldlYkNvcmU6Ol0p
OiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF91cGRhdGVTZWN1cmVJbnB1dFN0YXRlXSk6IERp
dHRvLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDogKFdlYktpdDo6V2ViUGFnZVByb3h5
OjplZGl0b3JTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFzU2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6aXNDb250ZW50RWRpdGFibGUpOgorICAgICAgICBFZGl0b3JTdGF0
ZWxpdmVzIGluIFdlYlBhZ2VQcm94eSBjbGFzcywgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwYXNz
IGl0IGluIGZ1bmN0aW9uIGNhbGxzLAorICAgICAgICBsaWtlIHdlIGRpZCB3aXRoIFRleHRJbnB1
dFN0YXRlLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogd2luL1dlYktp
dDIudmNwcm9qOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmNvbmZpcm1Db21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6aW5zZXJ0VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZXhl
Y3V0ZUtleXByZXNzQ29tbWFuZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVw
ZGF0ZUVkaXRvclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbnRlcnBy
ZXRRdWV1ZWRLZXlFdmVudCk6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVkaXRvclN0YXRlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJv
YXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRDb21wb3NpdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbmZpcm1Db21wb3NpdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpl
eGVjdXRlS2V5cHJlc3NDb21tYW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldEVk
aXRvclN0YXRlKToKKyAgICAgICAgVXBkYXRlZCBmb3IgYWJvdmUgbWVudGlvbmVkIGNoYW5nZXMu
CisKIDIwMTEtMDQtMTggIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0J
KHJldmlzaW9uIDg0MDU3KQorKysgU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTE4NSw2ICsxODUsNyBAQCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJ
U291cmNlL1dlYktpdDIvU2hhcmVkL0NvcmVJUENTdXBwb3J0L1dlYlBhZ2VQcm94eU1lc3NhZ2VL
aW5kcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUHJvY2Vz
c1Byb3h5TWVzc2FnZUtpbmRzLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9EcmF3aW5nQXJl
YUluZm8uaCBcCisJU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmggXAogCVNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Gb250U21vb3RoaW5nTGV2ZWwuaCBcCiAJU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9TaGFyZWFibGVCaXRtYXBHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwIFwKQEAgLTIzMyw3ICsyMzQsNiBA
QCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL1NhbmRi
b3hFeHRlbnNpb24uaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0
YS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2VjdXJpdHlPcmlnaW5EYXRhLmNwcCBcCi0J
U291cmNlL1dlYktpdDIvU2hhcmVkL1NlbGVjdGlvblN0YXRlLmggXAogCVNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9TZXNzaW9uU3RhdGUuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lv
blN0YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TdHJpbmdQYWlyVmVjdG9yLmggXApJ
bmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkocmV2aXNp
b24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTI3MywxMyArMjczLDEyIEBAIGRlZiBzdHJ1Y3Rfb3JfY2xhc3Mo
bmFtZXNwYWNlLCB0eXBlKToKICAgICAgICAgJ1dlYktpdDo6Q29udGV4dE1lbnVTdGF0ZScsCiAg
ICAgICAgICdXZWJLaXQ6OkRpY3Rpb25hcnlQb3B1cEluZm8nLAogICAgICAgICAnV2ViS2l0OjpE
cmF3aW5nQXJlYUluZm8nLAorICAgICAgICAnV2ViS2l0OjpFZGl0b3JTdGF0ZScsCiAgICAgICAg
ICdXZWJLaXQ6OlBsYXRmb3JtUG9wdXBNZW51RGF0YScsCiAgICAgICAgICdXZWJLaXQ6OlBsdWdp
blByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMnLAogICAgICAgICAnV2ViS2l0OjpQcmludEluZm8n
LAogICAgICAgICAnV2ViS2l0OjpTZWN1cml0eU9yaWdpbkRhdGEnLAotICAgICAgICAnV2ViS2l0
OjpTZWxlY3Rpb25TdGF0ZScsCiAgICAgICAgICdXZWJLaXQ6OlRleHRDaGVja2VyU3RhdGUnLAot
ICAgICAgICAnV2ViS2l0OjpUZXh0SW5wdXRTdGF0ZScsCiAgICAgICAgICdXZWJLaXQ6OldlYk5h
dmlnYXRpb25EYXRhU3RvcmUnLAogICAgICAgICAnV2ViS2l0OjpXZWJPcGVuUGFuZWxQYXJhbWV0
ZXJzOjpEYXRhJywKICAgICAgICAgJ1dlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycycs
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaAkocmV2aXNpb24gODQwNTcpCShm
cm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWxlY3Rpb25TdGF0ZS5oOjg0MDU3KQorKysgU291
cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VsZWN0aW9uU3RhdGVfaAorI2RlZmluZSBT
ZWxlY3Rpb25TdGF0ZV9oCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUg
PHd0Zi9Ob3RGb3VuZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFNlbGVjdGlv
blN0YXRlIHsKKyAgICBTZWxlY3Rpb25TdGF0ZSgpCisgICAgICAgIDogaXNOb25lKHRydWUpCisg
ICAgICAgICwgaXNDb250ZW50RWRpdGFibGUoZmFsc2UpCisgICAgICAgICwgaXNDb250ZW50Umlj
aGx5RWRpdGFibGUoZmFsc2UpCisgICAgICAgICwgaXNJblBhc3N3b3JkRmllbGQoZmFsc2UpCisg
ICAgICAgICwgaGFzQ29tcG9zaXRpb24oZmFsc2UpCisgICAgICAgICwgc2VsZWN0ZWRSYW5nZVN0
YXJ0KG5vdEZvdW5kKQorICAgICAgICAsIHNlbGVjdGVkUmFuZ2VMZW5ndGgoMCkKKyAgICB7Cisg
ICAgfQorCisgICAgLy8gV2hldGhlciB0aGVyZSBpcyBhIHNlbGVjdGlvbiBhdCBhbGwuIFRoaXMg
d2lsbCBiZSBmYWxzZSB3aGVuIHRoZXJlIGlzIGEgY2FyZXQgc2VsZWN0aW9uLgorICAgIGJvb2wg
aXNOb25lOworCisgICAgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGluIGEgY29udGVudCBl
ZGl0YWJsZSBhcmVhLgorICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGU7CisgICAgCisgICAgLy8g
V2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGluIGEgcmljaCBjb250ZW50IGVkaXRhYmxlIGFyZWEu
CisgICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZTsKKworICAgIC8vIFdoZXRoZXIgdGhl
IHNlbGVjdGlvbiBpcyBpbiBhIHBhc3N3b3JkIGZpZWxkLgorICAgIGJvb2wgaXNJblBhc3N3b3Jk
RmllbGQ7CisKKyAgICAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gaGFzIGEgY29tcG9zaXRpb24u
CisgICAgYm9vbCBoYXNDb21wb3NpdGlvbjsKKworICAgIC8vIFRoZSBzdGFydCBvZiB0aGUgc2Vs
ZWN0ZWQgcmFuZ2UuCisgICAgdWludDY0X3Qgc2VsZWN0ZWRSYW5nZVN0YXJ0OworICAgIAorICAg
IC8vIFRoZSBsZW5ndGggb2YgdGhlIHNlbGVjdGVkIHJhbmdlLgorICAgIHVpbnQ2NF90IHNlbGVj
dGVkUmFuZ2VMZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworbmFtZXNwYWNl
IENvcmVJUEMgewordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6OlNlbGVj
dGlvblN0YXRlPiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViS2l0OjpTZWxlY3Rpb25TdGF0ZT4g
eyB9OworfTsKKworI2VuZGlmIC8vIFNlbGVjdGlvblN0YXRlX2gKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9FZGl0b3JTdGF0ZS5oCShyZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9FZGl0b3JTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw1MiArMjMsMzcgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFNlbGVjdGlvblN0
YXRlX2gKLSNkZWZpbmUgU2VsZWN0aW9uU3RhdGVfaAorI2lmbmRlZiBFZGl0b3JTdGF0ZV9oCisj
ZGVmaW5lIEVkaXRvclN0YXRlX2gKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW5j
bHVkZSA8d3RmL05vdEZvdW5kLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdHJ1Y3QgU2Vs
ZWN0aW9uU3RhdGUgewotICAgIFNlbGVjdGlvblN0YXRlKCkKLSAgICAgICAgOiBpc05vbmUodHJ1
ZSkKK3N0cnVjdCBFZGl0b3JTdGF0ZSB7CisgICAgRWRpdG9yU3RhdGUoKQorICAgICAgICA6IHNl
bGVjdGlvbklzTm9uZSh0cnVlKQorICAgICAgICAsIHNlbGVjdGlvbklzUmFuZ2UoZmFsc2UpCiAg
ICAgICAgICwgaXNDb250ZW50RWRpdGFibGUoZmFsc2UpCiAgICAgICAgICwgaXNDb250ZW50Umlj
aGx5RWRpdGFibGUoZmFsc2UpCiAgICAgICAgICwgaXNJblBhc3N3b3JkRmllbGQoZmFsc2UpCiAg
ICAgICAgICwgaGFzQ29tcG9zaXRpb24oZmFsc2UpCi0gICAgICAgICwgc2VsZWN0ZWRSYW5nZVN0
YXJ0KG5vdEZvdW5kKQotICAgICAgICAsIHNlbGVjdGVkUmFuZ2VMZW5ndGgoMCkKICAgICB7CiAg
ICAgfQogCi0gICAgLy8gV2hldGhlciB0aGVyZSBpcyBhIHNlbGVjdGlvbiBhdCBhbGwuIFRoaXMg
d2lsbCBiZSBmYWxzZSB3aGVuIHRoZXJlIGlzIGEgY2FyZXQgc2VsZWN0aW9uLgotICAgIGJvb2wg
aXNOb25lOwotCi0gICAgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGluIGEgY29udGVudCBl
ZGl0YWJsZSBhcmVhLgorICAgIGJvb2wgc2VsZWN0aW9uSXNOb25lOyAvLyBUaGlzIHdpbGwgYmUg
ZmFsc2Ugd2hlbiB0aGVyZSBpcyBhIGNhcmV0IHNlbGVjdGlvbi4KKyAgICBib29sIHNlbGVjdGlv
bklzUmFuZ2U7CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKLSAgICAKLSAgICAvLyBXaGV0
aGVyIHRoZSBzZWxlY3Rpb24gaXMgaW4gYSByaWNoIGNvbnRlbnQgZWRpdGFibGUgYXJlYS4KICAg
ICBib29sIGlzQ29udGVudFJpY2hseUVkaXRhYmxlOwotCi0gICAgLy8gV2hldGhlciB0aGUgc2Vs
ZWN0aW9uIGlzIGluIGEgcGFzc3dvcmQgZmllbGQuCiAgICAgYm9vbCBpc0luUGFzc3dvcmRGaWVs
ZDsKLQotICAgIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBoYXMgYSBjb21wb3NpdGlvbi4KICAg
ICBib29sIGhhc0NvbXBvc2l0aW9uOwotCi0gICAgLy8gVGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rl
ZCByYW5nZS4KLSAgICB1aW50NjRfdCBzZWxlY3RlZFJhbmdlU3RhcnQ7Ci0gICAgCi0gICAgLy8g
VGhlIGxlbmd0aCBvZiB0aGUgc2VsZWN0ZWQgcmFuZ2UuCi0gICAgdWludDY0X3Qgc2VsZWN0ZWRS
YW5nZUxlbmd0aDsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAorfQogCiBuYW1lc3BhY2Ug
Q29yZUlQQyB7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYktpdDo6U2VsZWN0
aW9uU3RhdGU+IDogU2ltcGxlQXJndW1lbnRDb2RlcjxXZWJLaXQ6OlNlbGVjdGlvblN0YXRlPiB7
IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYktpdDo6RWRpdG9yU3RhdGU+
IDogU2ltcGxlQXJndW1lbnRDb2RlcjxXZWJLaXQ6OkVkaXRvclN0YXRlPiB7IH07CiB9OwogCi0j
ZW5kaWYgLy8gU2VsZWN0aW9uU3RhdGVfaAorI2VuZGlmIC8vIEVkaXRvclN0YXRlX2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWxlY3Rpb25TdGF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9TZWxlY3Rpb25TdGF0ZS5oCShyZXZpc2lvbiA4NDA1NykKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWxlY3Rpb25TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNlbGVjdGlvblN0YXRlX2gKLSNk
ZWZpbmUgU2VsZWN0aW9uU3RhdGVfaAotCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNp
bmNsdWRlIDx3dGYvTm90Rm91bmQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVjdCBT
ZWxlY3Rpb25TdGF0ZSB7Ci0gICAgU2VsZWN0aW9uU3RhdGUoKQotICAgICAgICA6IGlzTm9uZSh0
cnVlKQotICAgICAgICAsIGlzQ29udGVudEVkaXRhYmxlKGZhbHNlKQotICAgICAgICAsIGlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKGZhbHNlKQotICAgICAgICAsIGlzSW5QYXNzd29yZEZpZWxkKGZh
bHNlKQotICAgICAgICAsIGhhc0NvbXBvc2l0aW9uKGZhbHNlKQotICAgICAgICAsIHNlbGVjdGVk
UmFuZ2VTdGFydChub3RGb3VuZCkKLSAgICAgICAgLCBzZWxlY3RlZFJhbmdlTGVuZ3RoKDApCi0g
ICAgewotICAgIH0KLQotICAgIC8vIFdoZXRoZXIgdGhlcmUgaXMgYSBzZWxlY3Rpb24gYXQgYWxs
LiBUaGlzIHdpbGwgYmUgZmFsc2Ugd2hlbiB0aGVyZSBpcyBhIGNhcmV0IHNlbGVjdGlvbi4KLSAg
ICBib29sIGlzTm9uZTsKLQotICAgIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBpcyBpbiBhIGNv
bnRlbnQgZWRpdGFibGUgYXJlYS4KLSAgICBib29sIGlzQ29udGVudEVkaXRhYmxlOwotICAgIAot
ICAgIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBpcyBpbiBhIHJpY2ggY29udGVudCBlZGl0YWJs
ZSBhcmVhLgotICAgIGJvb2wgaXNDb250ZW50UmljaGx5RWRpdGFibGU7Ci0KLSAgICAvLyBXaGV0
aGVyIHRoZSBzZWxlY3Rpb24gaXMgaW4gYSBwYXNzd29yZCBmaWVsZC4KLSAgICBib29sIGlzSW5Q
YXNzd29yZEZpZWxkOwotCi0gICAgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIGhhcyBhIGNvbXBv
c2l0aW9uLgotICAgIGJvb2wgaGFzQ29tcG9zaXRpb247Ci0KLSAgICAvLyBUaGUgc3RhcnQgb2Yg
dGhlIHNlbGVjdGVkIHJhbmdlLgotICAgIHVpbnQ2NF90IHNlbGVjdGVkUmFuZ2VTdGFydDsKLSAg
ICAKLSAgICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBzZWxlY3RlZCByYW5nZS4KLSAgICB1aW50NjRf
dCBzZWxlY3RlZFJhbmdlTGVuZ3RoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLW5h
bWVzcGFjZSBDb3JlSVBDIHsKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViS2l0
OjpTZWxlY3Rpb25TdGF0ZT4gOiBTaW1wbGVBcmd1bWVudENvZGVyPFdlYktpdDo6U2VsZWN0aW9u
U3RhdGU+IHsgfTsKLX07Ci0KLSNlbmRpZiAvLyBTZWxlY3Rpb25TdGF0ZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1RleHRJbnB1dFN0YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL21hYy9UZXh0SW5wdXRTdGF0ZS5oCShyZXZpc2lvbiA4NDA1NykK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvVGV4dElucHV0U3RhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUZXh0SW5wdXRTdGF0
ZV9oCi0jZGVmaW5lIFRleHRJbnB1dFN0YXRlX2gKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJz
LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1Y3QgVGV4dElucHV0U3RhdGUgewotICAg
IGJvb2wgaGFzTWFya2VkVGV4dDsKLSAgICBib29sIHNlbGVjdGlvbklzRWRpdGFibGU7Ci19Owot
Ci19Ci0KLW5hbWVzcGFjZSBDb3JlSVBDIHsKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8V2ViS2l0OjpUZXh0SW5wdXRTdGF0ZT4gOiBTaW1wbGVBcmd1bWVudENvZGVyPFdlYktpdDo6
VGV4dElucHV0U3RhdGU+IHsgfTsKLX0KLQotI2VuZGlmIC8vIFRleHRJbnB1dFN0YXRlX2gKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gODQwNTcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDEsNyArMTAxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1Jl
ZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSA9IDA7CiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IHZpcnR1YWwgdm9pZCBhY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3Qg
Q29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0
S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGNvbnN0IFRleHRJbnB1dFN0
YXRlJiwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKSA9IDA7CisgICAgdmlydHVh
bCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBW
ZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvcikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGNsaWVudFBvc2l0aW9uLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBi
b29sIGlzTGlua0RyYWcpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2VjdXJlSW5wdXRT
dGF0ZSgpID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCShyZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQwLDE3ICsyMTQwLDE3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpiYWNrRm9yd2FyZEZvcndhcmRMaXMKICAgICBjb3VudCA9IG1fYmFja0Zvcndh
cmRMaXN0LT5mb3J3YXJkTGlzdENvdW50KCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZWxl
Y3Rpb25TdGF0ZUNoYW5nZWQoY29uc3QgU2VsZWN0aW9uU3RhdGUmIHNlbGVjdGlvblN0YXRlKQor
dm9pZCBXZWJQYWdlUHJveHk6OmVkaXRvclN0YXRlQ2hhbmdlZChjb25zdCBFZGl0b3JTdGF0ZSYg
ZWRpdG9yU3RhdGUpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIGJvb2wgY291bGRDaGFuZ2VT
ZWN1cmVJbnB1dFN0YXRlID0gbV9zZWxlY3Rpb25TdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCAhPSBz
ZWxlY3Rpb25TdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCB8fCBtX3NlbGVjdGlvblN0YXRlLmlzTm9u
ZTsKKyAgICBib29sIGNvdWxkQ2hhbmdlU2VjdXJlSW5wdXRTdGF0ZSA9IG1fZWRpdG9yU3RhdGUu
aXNJblBhc3N3b3JkRmllbGQgIT0gZWRpdG9yU3RhdGUuaXNJblBhc3N3b3JkRmllbGQgfHwgbV9l
ZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc05vbmU7CiAjZW5kaWYKIAotICAgIG1fc2VsZWN0aW9uU3Rh
dGUgPSBzZWxlY3Rpb25TdGF0ZTsKKyAgICBtX2VkaXRvclN0YXRlID0gZWRpdG9yU3RhdGU7CiAK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdGF0ZS4gRmxp
cHBpbmcgc2VjdXJlIGlucHV0IHN0YXRlIHRvbyBxdWlja2x5IGNhbiBleHBvc2UgcmFjZSBjb25k
aXRpb25zLgotICAgIGlmIChzZWxlY3Rpb25TdGF0ZS5pc05vbmUpCisgICAgaWYgKGVkaXRvclN0
YXRlLnNlbGVjdGlvbklzTm9uZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGNvdWxkQ2hh
bmdlU2VjdXJlSW5wdXRTdGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgJKHJldmlzaW9uIDg0MDU3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw5IEBACiAjaW5jbHVkZSAi
Q29udGV4dE1lbnVTdGF0ZS5oIgogI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyQWN0aW9uLmgiCiAj
aW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIkVkaXRvclN0YXRlLmgiCiAj
aW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIgogI2lu
Y2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25TdGF0ZS5oIgog
I2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldLQmFzZS5oIgogI2luY2x1ZGUg
IldLUGFnZVByaXZhdGUuaCIKQEAgLTk3LDkgKzk3LDkgQEAgY2xhc3MgV2ViVVJMUmVxdWVzdDsK
IGNsYXNzIFdlYldoZWVsRXZlbnQ7CiBzdHJ1Y3QgQXR0cmlidXRlZFN0cmluZzsKIHN0cnVjdCBE
aWN0aW9uYXJ5UG9wdXBJbmZvOworc3RydWN0IEVkaXRvclN0YXRlOwogc3RydWN0IFBsYXRmb3Jt
UG9wdXBNZW51RGF0YTsKIHN0cnVjdCBQcmludEluZm87Ci1zdHJ1Y3QgVGV4dElucHV0U3RhdGU7
CiBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBXZWJQb3B1cEl0ZW07
CiAKQEAgLTI0NywyNCArMjQ3LDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4ZWN1dGVFZGl0Q29t
bWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKTsKICAgICB2b2lkIHZhbGlkYXRlQ29tbWFu
ZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBQYXNzUmVmUHRyPFZhbGlkYXRlQ29tbWFuZENh
bGxiYWNrPik7CiAKLSAgICBjb25zdCBTZWxlY3Rpb25TdGF0ZSYgc2VsZWN0aW9uU3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXRlOyB9CisgICAgY29uc3QgRWRpdG9yU3RhdGUm
IGVkaXRvclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3JTdGF0ZTsgfQogICAgIGJvb2wg
Y2FuRGVsZXRlKCkgY29uc3QgeyByZXR1cm4gaGFzU2VsZWN0ZWRSYW5nZSgpICYmIGlzQ29udGVu
dEVkaXRhYmxlKCk7IH0KLSAgICBib29sIGhhc1NlbGVjdGVkUmFuZ2UoKSBjb25zdCB7IHJldHVy
biBtX3NlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFuZ2VMZW5ndGg7IH0KLSAgICBib29sIGlzQ29u
dGVudEVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZS5pc0NvbnRlbnRF
ZGl0YWJsZTsgfQorICAgIGJvb2wgaGFzU2VsZWN0ZWRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZTsgfQorICAgIGJvb2wgaXNDb250ZW50RWRpdGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX2VkaXRvclN0YXRlLmlzQ29udGVudEVkaXRhYmxlOyB9CiAK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCB1cGRhdGVXaW5kb3dJc1Zpc2libGUoYm9vbCB3
aW5kb3dJc1Zpc2libGUpOwogICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcyk7CiAKLSAgICB2
b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNv
bXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwg
dWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVp
bnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQsIFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSk7Ci0g
ICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oVGV4dElucHV0U3RhdGUmIG5ld1N0YXRlKTsKLSAg
ICBib29sIGluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVu
dFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQsIFRleHRJbnB1dFN0YXRl
JiBuZXdTdGF0ZSk7CisgICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQs
IFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0
X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKTsKKyAgICB2b2lk
IGNvbmZpcm1Db21wb3NpdGlvbigpOworICAgIGJvb2wgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcm
IHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1l
bnRSYW5nZUVuZCk7CiAgICAgdm9pZCBnZXRNYXJrZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24s
IHVpbnQ2NF90JiBsZW5ndGgpOwogICAgIHZvaWQgZ2V0U2VsZWN0ZWRSYW5nZSh1aW50NjRfdCYg
bG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpOwogICAgIHZvaWQgZ2V0QXR0cmlidXRlZFN1YnN0
cmluZ0Zyb21SYW5nZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoLCBBdHRyaWJ1
dGVkU3RyaW5nJik7CiAgICAgdWludDY0X3QgY2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCk7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZSh1aW50NjRfdCwgdWludDY0X3QpOwotICAgIGJvb2wgZXhlY3V0ZUtleXByZXNz
Q29tbWFuZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCBUZXh0SW5w
dXRTdGF0ZSYgbmV3U3RhdGUpOworICAgIGJvb2wgZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKTsKIAogICAgIHZvaWQgc2VuZENv
bXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpOwogICAgIENHQ29udGV4dFJlZiBjb250
YWluaW5nV2luZG93R3JhcGhpY3NDb250ZXh0KCk7CkBAIC0zNDgsNiArMzQ4LDkgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVnaXN0ZXJXZWJQcm9jZXNzQWNjZXNzaWJpbGl0eVRva2VuKGNvbnN0IENv
cmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsKICAgICAvLyBDYWxsZWQgYnkgdGhlIFVJIHByb2Nlc3Mg
d2hlbiBpdCBpcyByZWFkeSB0byBzZW5kIGl0cyB0b2tlbnMgdG8gdGhlIHdlYiBwcm9jZXNzLgog
ICAgIHZvaWQgcmVnaXN0ZXJVSVByb2Nlc3NBY2Nlc3NpYmlsaXR5VG9rZW5zKGNvbnN0IENvcmVJ
UEM6OkRhdGFSZWZlcmVuY2UmIGVsZW1lblRva2VuLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJl
bmNlJiB3aW5kb3dUb2tlbik7CisKKyAgICB2b2lkIHVwZGF0ZUVkaXRvclN0YXRlKCk7CisKICAg
ICBib29sIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOwogICAgIGJvb2wg
cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
OwogI2VuZGlmCkBAIC01ODksOCArNTkyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZEZpbmRa
b29tYWJsZUFyZWEoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogI2VuZGlmCiAKLSAgICAvLyBT
ZWxlY3Rpb24KLSAgICB2b2lkIHNlbGVjdGlvblN0YXRlQ2hhbmdlZChjb25zdCBTZWxlY3Rpb25T
dGF0ZSYpOworICAgIHZvaWQgZWRpdG9yU3RhdGVDaGFuZ2VkKGNvbnN0IEVkaXRvclN0YXRlJik7
CiAKICAgICAvLyBCYWNrL0ZvcndhcmQgbGlzdCBtYW5hZ2VtZW50CiAgICAgdm9pZCBiYWNrRm9y
d2FyZEFkZEl0ZW0odWludDY0X3QgaXRlbUlEKTsKQEAgLTYwOCw3ICs2MTAsNyBAQCBwcml2YXRl
OgogCiAgICAgLy8gS2V5Ym9hcmQgaGFuZGxpbmcKICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9p
ZCBpbnRlcnByZXRRdWV1ZWRLZXlFdmVudChjb25zdCBUZXh0SW5wdXRTdGF0ZSYsIGJvb2wmIGhh
bmRsZWQsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7CisgICAgdm9pZCBpbnRl
cnByZXRRdWV1ZWRLZXlFdmVudChjb25zdCBFZGl0b3JTdGF0ZSYsIGJvb2wmIGhhbmRsZWQsIFZl
Y3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7CiAgICAgdm9pZCBleGVjdXRlU2F2ZWRD
b21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBib29sJiBoYW5kbGVkKTsK
ICNlbmRpZgogCkBAIC03NjQsNyArNzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBtX3Rv
b2xUaXA7CiAKLSAgICBTZWxlY3Rpb25TdGF0ZSBtX3NlbGVjdGlvblN0YXRlOworICAgIEVkaXRv
clN0YXRlIG1fZWRpdG9yU3RhdGU7CiAKICAgICBkb3VibGUgbV90ZXh0Wm9vbUZhY3RvcjsKICAg
ICBkb3VibGUgbV9wYWdlWm9vbUZhY3RvcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gODQwNTcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDUsOSArMTQ1LDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAg
ICBDbGVhckFsbEVkaXRDb21tYW5kcygpCiAgICAgQ2FuVW5kb1JlZG8odWludDMyX3QgYWN0aW9u
KSAtPiAoYm9vbCByZXN1bHQpCiAgICAgRXhlY3V0ZVVuZG9SZWRvKHVpbnQzMl90IGFjdGlvbikg
LT4gKGJvb2wgcmVzdWx0KQotICAgIAotICAgICMgU2VsZWN0aW9uIG1lc3NhZ2VzCi0gICAgU2Vs
ZWN0aW9uU3RhdGVDaGFuZ2VkKFdlYktpdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUp
CisKKyAgICAjIEVkaXRvciBub3RpZmljYXRpb25zCisgICAgRWRpdG9yU3RhdGVDaGFuZ2VkKFdl
YktpdDo6RWRpdG9yU3RhdGUgZWRpdG9yU3RhdGUpCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIERp
ZENoYW5nZUNvbXBvc2l0aW9uU2VsZWN0aW9uKGJvb2wgaGFzQ2hhbmdlZCkKICNlbmRpZgpAQCAt
MjA1LDcgKzIwNSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgRGlkUGVyZm9y
bURpY3Rpb25hcnlMb29rdXAoV1RGOjpTdHJpbmcgdGV4dCwgV2ViS2l0OjpEaWN0aW9uYXJ5UG9w
dXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm8pCiAKICAgICAjIEtleWJvYXJkIGlucHV0IHN1cHBv
cnQgbWVzc2FnZXMKLSAgICBJbnRlcnByZXRRdWV1ZWRLZXlFdmVudChXZWJLaXQ6OlRleHRJbnB1
dFN0YXRlIHN0YXRlKSAtPiAoYm9vbCBoYW5kbGVkLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3ND
b21tYW5kPiBzYXZlZENvbW1hbmRzKQorICAgIEludGVycHJldFF1ZXVlZEtleUV2ZW50KFdlYktp
dDo6RWRpdG9yU3RhdGUgc3RhdGUpIC0+IChib29sIGhhbmRsZWQsIFZlY3RvcjxXZWJDb3JlOjpL
ZXlwcmVzc0NvbW1hbmQ+IHNhdmVkQ29tbWFuZHMpCiAgICAgRXhlY3V0ZVNhdmVkQ29tbWFuZEJ5
U2VsZWN0b3IoV1RGOjpTdHJpbmcgc2VsZWN0b3IpIC0+IChib29sIGhhbmRsZWQpCiAKICAgICAj
IFJlbW90ZSBhY2Nlc3NpYmlsaXR5IG1lc3NhZ2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDg0MDU3KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBj
bGVhckFsbEVkaXRDb21tYW5kcygpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQ
YWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8o
V2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAgICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5
RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGNvbnN0IFRleHRJbnB1dFN0YXRl
JiwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxX
ZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7CiAgICAgdmlydHVhbCBib29sIGV4ZWN1dGVTYXZl
ZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9u
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcp
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTZWN1cmVJbnB1dFN0YXRlKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQko
cmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdl
Q2xpZW50SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5Miw5IEBAIHZvaWQgUGFn
ZUNsaWVudEltcGw6OmV4ZWN1dGVVbmRvUmVkbyhXZWIKICAgICByZXR1cm4gKHVuZG9PclJlZG8g
PT0gV2ViUGFnZVByb3h5OjpVbmRvKSA/IFtbbV93a1ZpZXcgdW5kb01hbmFnZXJdIHVuZG9dIDog
W1ttX3drVmlldyB1bmRvTWFuYWdlcl0gcmVkb107CiB9CiAKLWJvb2wgUGFnZUNsaWVudEltcGw6
OmludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBj
b25zdCBUZXh0SW5wdXRTdGF0ZSYgc3RhdGUsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1h
bmQ+JiBjb21tYW5kcykKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmludGVycHJldEtleUV2ZW50KGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJl
c3NDb21tYW5kPiYgY29tbWFuZHMpCiB7Ci0gICAgcmV0dXJuIFttX3drVmlldyBfaW50ZXJwcmV0
S2V5RXZlbnQ6ZXZlbnQubmF0aXZlRXZlbnQoKSB3aXRoQ2FjaGVkVGV4dElucHV0U3RhdGU6c3Rh
dGUgc2F2aW5nQ29tbWFuZHNUbzpjb21tYW5kc107CisgICAgcmV0dXJuIFttX3drVmlldyBfaW50
ZXJwcmV0S2V5RXZlbnQ6ZXZlbnQubmF0aXZlRXZlbnQoKSBzYXZpbmdDb21tYW5kc1RvOmNvbW1h
bmRzXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RHJhZ0ltYWdlKGNvbnN0IEludFBv
aW50JiBjbGllbnRQb3NpdGlvbiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFn
ZSwgYm9vbCBpc0xpbmtEcmFnKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQkocmV2aXNpb24gODQwNjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bXBvcnQgIkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJEYXRhUmVm
ZXJlbmNlLmgiCiAjaW1wb3J0ICJEcmF3aW5nQXJlYVByb3h5SW1wbC5oIgorI2ltcG9ydCAiRWRp
dG9yU3RhdGUuaCIKICNpbXBvcnQgIkZpbmRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIkZpbmRJbmRp
Y2F0b3JXaW5kb3cuaCIKICNpbXBvcnQgIkxheWVyVHJlZUNvbnRleHQuaCIKQEAgLTQzLDcgKzQ0
LDYgQEAKICNpbXBvcnQgIlJ1bkxvb3AuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyLmgiCiAjaW1w
b3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW1wb3J0ICJUZXh0SW5wdXRTdGF0ZS5oIgogI2lt
cG9ydCAiV0tBUElDYXN0LmgiCiAjaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
LmgiCiAjaW1wb3J0ICJXS1ByaW50aW5nVmlldy5oIgpAQCAtMTAxLDcgKzEwMSw2IEBAIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFZhbGlkYXRpb25WZWN0b3IKIH0KIAogc3RydWN0IFdLVmlld0lu
dGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgewotICAgIFRleHRJbnB1dFN0YXRlIGNhY2hlZFRl
eHRJbnB1dFN0YXRlOwogICAgIGJvb2wgZXZlbnRJbnRlcnByZXRhdGlvbkhhZFNpZGVFZmZlY3Rz
OwogICAgIGJvb2wgY29uc3VtZWRCeUlNOwogICAgIGJvb2wgZXhlY3V0aW5nU2F2ZWRLZXlwcmVz
c0NvbW1hbmRzOwpAQCAtNTM2LDEzICs1MzUsMTcgQEAgLSAoQk9PTCl3cml0ZVNlbGVjdGlvblRv
UGFzdGVib2FyZDooTlNQYQogCiAtIChpZCl2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOihOU1N0
cmluZyAqKXNlbmRUeXBlIHJldHVyblR5cGU6KE5TU3RyaW5nICopcmV0dXJuVHlwZQogewotICAg
IEJPT0wgaXNWYWxpZFNlbmRUeXBlID0gIXNlbmRUeXBlIHx8IChbUGFzdGVib2FyZFR5cGVzOjpm
b3JTZWxlY3Rpb24oKSBjb250YWluc09iamVjdDpzZW5kVHlwZV0gJiYgIV9kYXRhLT5fcGFnZS0+
c2VsZWN0aW9uU3RhdGUoKS5pc05vbmUpOworICAgIC8vIFJpZ2h0IGNsaWNraW5nIGluIHVuc2Vs
ZWN0ZWQgdGV4dCBjaGFuZ2VzIHNlbGVjdGlvbiBhbmQgaW1tZWRpYXRlbHkgY2hlY2tzIGZvciBz
dXBwb3J0ZWQgc2VydmljZXMsIGJ1dCBhbiBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uIGZvciBu
ZXcgc2VsZWN0aW9uIGlzIHN0aWxsIGluIGZsaWdodCBpbiB0aGF0IGNhc2UuCisgICAgLy8gSXQn
cyBzdGlsbCBwb3NzaWJsZSB0aGF0IHRoZSBzdGF0ZSB3aWxsIHNvbWVob3cgY2hhbmdlIGFnYWlu
IGJ5IHRoZSB0aW1lIHJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZDogaXMgY2FsbGVkLCBidXQg
dGhhdCBpcyBub3QgcG9zc2libGUgdG8gZm9yZXNlZSBvciB0byBwcmV2ZW50IGZyb20gdGhpcyBt
ZXRob2QuCisgICAgX2RhdGEtPl9wYWdlLT51cGRhdGVFZGl0b3JTdGF0ZSgpOworCisgICAgQk9P
TCBpc1ZhbGlkU2VuZFR5cGUgPSAhc2VuZFR5cGUgfHwgKFtQYXN0ZWJvYXJkVHlwZXM6OmZvclNl
bGVjdGlvbigpIGNvbnRhaW5zT2JqZWN0OnNlbmRUeXBlXSAmJiAhX2RhdGEtPl9wYWdlLT5lZGl0
b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSk7CiAgICAgQk9PTCBpc1ZhbGlkUmV0dXJuVHlwZSA9
IE5POwogICAgIGlmICghcmV0dXJuVHlwZSkKICAgICAgICAgaXNWYWxpZFJldHVyblR5cGUgPSBZ
RVM7Ci0gICAgZWxzZSBpZiAoW1Bhc3RlYm9hcmRUeXBlczo6Zm9yRWRpdGluZygpIGNvbnRhaW5z
T2JqZWN0OnJldHVyblR5cGVdICYmIF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0Nv
bnRlbnRFZGl0YWJsZSkgeworICAgIGVsc2UgaWYgKFtQYXN0ZWJvYXJkVHlwZXM6OmZvckVkaXRp
bmcoKSBjb250YWluc09iamVjdDpyZXR1cm5UeXBlXSAmJiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0
YXRlKCkuaXNDb250ZW50RWRpdGFibGUpIHsKICAgICAgICAgLy8gV2UgY2FuIGluc2VydCBzdHJp
bmdzIGluIGFueSBlZGl0YWJsZSBjb250ZXh0LiAgV2UgY2FuIGluc2VydCBvdGhlciB0eXBlcywg
bGlrZSBpbWFnZXMsIG9ubHkgaW4gcmljaCBlZGl0IGNvbnRleHRzLgotICAgICAgICBpc1ZhbGlk
UmV0dXJuVHlwZSA9IF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSB8fCBbcmV0dXJuVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQYm9hcmRU
eXBlXTsKKyAgICAgICAgaXNWYWxpZFJldHVyblR5cGUgPSBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0
YXRlKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUgfHwgW3JldHVyblR5cGUgaXNFcXVhbFRvU3Ry
aW5nOk5TU3RyaW5nUGJvYXJkVHlwZV07CiAgICAgfQogICAgIGlmIChpc1ZhbGlkU2VuZFR5cGUg
JiYgaXNWYWxpZFJldHVyblR5cGUpCiAgICAgICAgIHJldHVybiBzZWxmOwpAQCAtNjI3LDExICs2
MzAsMTEgQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8TgogICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKHNob3dHdWVzc1BhbmVsOikpIHsKICAgICAgICAgaWYgKE5T
TWVudUl0ZW0gKm1lbnVJdGVtID0gOjptZW51SXRlbShpdGVtKSkKICAgICAgICAgICAgIFttZW51
SXRlbSBzZXRUaXRsZTpjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCghW1tbTlNT
cGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBzcGVsbGluZ1BhbmVsXSBpc1Zpc2libGVd
KV07Ci0gICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250
ZW50RWRpdGFibGU7CisgICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCku
aXNDb250ZW50RWRpdGFibGU7CiAgICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Io
Y2hlY2tTcGVsbGluZzopIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlU3BlbGxpbmc6KSkK
LSAgICAgICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0NvbnRlbnRF
ZGl0YWJsZTsKKyAgICAgICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0Nv
bnRlbnRFZGl0YWJsZTsKIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUNvbnRp
bnVvdXNTcGVsbENoZWNraW5nOikpIHsKICAgICAgICAgYm9vbCBlbmFibGVkID0gVGV4dENoZWNr
ZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7CkBAIC02NDksNDcgKzY1Miw0
NyBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxOCiAgICAgaWYgKGFj
dGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOikpIHsK
ICAgICAgICAgYm9vbCBjaGVja2VkID0gVGV4dENoZWNrZXI6OnN0YXRlKCkuaXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOwogICAgICAgICBbbWVudUl0ZW0oaXRlbSkgc2V0U3Rh
dGU6Y2hlY2tlZCA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gX2Rh
dGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOworICAgICAgICBy
ZXR1cm4gX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOwogICAg
IH0KIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKG9yZGVyRnJvbnRTdWJzdGl0dXRpb25z
UGFuZWw6KSkgewogICAgICAgICBpZiAoTlNNZW51SXRlbSAqbWVudUl0ZW0gPSA6Om1lbnVJdGVt
KGl0ZW0pKQogICAgICAgICAgICAgW21lbnVJdGVtIHNldFRpdGxlOmNvbnRleHRNZW51SXRlbVRh
Z1Nob3dTdWJzdGl0dXRpb25zKCFbW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJd
IHN1YnN0aXR1dGlvbnNQYW5lbF0gaXNWaXNpYmxlXSldOwotICAgICAgICByZXR1cm4gX2RhdGEt
Pl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOworICAgICAgICByZXR1
cm4gX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOwogICAgIH0K
IAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOikp
IHsKICAgICAgICAgYm9vbCBjaGVja2VkID0gX2RhdGEtPl9wYWdlLT5pc1NtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZCgpOwogICAgICAgICBbbWVudUl0ZW0oaXRlbSkgc2V0U3RhdGU6Y2hlY2tlZCA/
IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5z
ZWxlY3Rpb25TdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOworICAgICAgICByZXR1cm4gX2RhdGEt
Pl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOwogICAgIH0KIAogICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOikp
IHsKICAgICAgICAgYm9vbCBjaGVja2VkID0gVGV4dENoZWNrZXI6OnN0YXRlKCkuaXNBdXRvbWF0
aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ7CiAgICAgICAgIFttZW51SXRlbShpdGVtKSBzZXRT
dGF0ZTpjaGVja2VkID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0gICAgICAgIHJldHVybiBf
ZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250ZW50RWRpdGFibGU7CisgICAgICAg
IHJldHVybiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGU7CiAg
ICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljRGFzaFN1
YnN0aXR1dGlvbjopKSB7CiAgICAgICAgIGJvb2wgY2hlY2tlZCA9IFRleHRDaGVja2VyOjpzdGF0
ZSgpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ7CiAgICAgICAgIFttZW51SXRl
bShpdGVtKSBzZXRTdGF0ZTpjaGVja2VkID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0gICAg
ICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250ZW50RWRpdGFi
bGU7CisgICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50
RWRpdGFibGU7CiAgICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0
b21hdGljTGlua0RldGVjdGlvbjopKSB7CiAgICAgICAgIGJvb2wgY2hlY2tlZCA9IFRleHRDaGVj
a2VyOjpzdGF0ZSgpLmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ7CiAgICAgICAgIFtt
ZW51SXRlbShpdGVtKSBzZXRTdGF0ZTpjaGVja2VkID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07
Ci0gICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250ZW50
RWRpdGFibGU7CisgICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXND
b250ZW50RWRpdGFibGU7CiAgICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9n
Z2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OikpIHsKICAgICAgICAgYm9vbCBjaGVja2VkID0g
VGV4dENoZWNrZXI6OnN0YXRlKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOwog
ICAgICAgICBbbWVudUl0ZW0oaXRlbSkgc2V0U3RhdGU6Y2hlY2tlZCA/IE5TT25TdGF0ZSA6IE5T
T2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgp
LmlzQ29udGVudEVkaXRhYmxlOworICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5lZGl0b3JT
dGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOwogICAgIH0KIAogICAgIGlmIChhY3Rpb24gPT0gQHNl
bGVjdG9yKHVwcGVyY2FzZVdvcmQ6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGxvd2VyY2FzZVdv
cmQ6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNhcGl0YWxpemVXb3JkOikpCi0gICAgICAgIHJl
dHVybiBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuc2VsZWN0ZWRSYW5nZUxlbmd0aCAm
JiBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250ZW50RWRpdGFibGU7CisgICAg
ICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZSAm
JiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGU7CiAgICAgCiAg
ICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Ioc3RvcFNwZWFraW5nOikpCiAgICAgICAgIHJldHVy
biBbTlNBcHAgaXNTcGVha2luZ107CkBAIC0xMDI4LDcgKzEwMzEsNyBAQCAtIChCT09MKXNob3Vs
ZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVuCiB7CiAgICAgLy8gSWYgdGhpcyBpcyB0aGUgYWN0
aXZlIHdpbmRvdyBvciB3ZSBkb24ndCBoYXZlIGEgcmFuZ2Ugc2VsZWN0aW9uLCB0aGVyZSBpcyBu
byBuZWVkIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3MKICAgICAvLyBhbmQgd2UgY2FuIGF2
b2lkIG1ha2luZyBhIHN5bmNocm9ub3VzIGNhbGwgdG8gdGhlIFdlYlByb2Nlc3MuCi0gICAgaWYg
KFtbc2VsZiB3aW5kb3ddIGlzS2V5V2luZG93XSB8fCBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0
YXRlKCkuaXNOb25lIHx8ICFfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuc2VsZWN0ZWRS
YW5nZUxlbmd0aCkKKyAgICBpZiAoW1tzZWxmIHdpbmRvd10gaXNLZXlXaW5kb3ddIHx8IF9kYXRh
LT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc05vbmUgfHwgIV9kYXRhLT5fcGFnZS0+
ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlKQogICAgICAgICByZXR1cm4gTk87CiAKICAg
ICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwg
cnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZApAQCAtMTA4OSw3ICsxMDkyLDcgQEAgLSAodm9p
ZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0bwogICAgICAgICBwYXJhbWV0ZXJzLT5j
b25zdW1lZEJ5SU0gPSBmYWxzZTsKIAogICAgIC8vIEFzIGluIGluc2VydFRleHQ6cmVwbGFjZW1l
bnRSYW5nZTosIHdlIGFzc3VtZSB0aGF0IHRoZSBjYWxsIGNvbWVzIGZyb20gYW4gaW5wdXQgbWV0
aG9kIGlmIHRoZXJlIGlzIG1hcmtlZCB0ZXh0LgotICAgIGJvb2wgaXNGcm9tSW5wdXRNZXRob2Qg
PSBwYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlLmhhc01hcmtl
ZFRleHQ7CisgICAgYm9vbCBpc0Zyb21JbnB1dE1ldGhvZCA9IF9kYXRhLT5fcGFnZS0+ZWRpdG9y
U3RhdGUoKS5oYXNDb21wb3NpdGlvbjsKIAogICAgIGlmIChwYXJhbWV0ZXJzICYmICFpc0Zyb21J
bnB1dE1ldGhvZCkKICAgICAgICAgcGFyYW1ldGVycy0+Y29tbWFuZHMtPmFwcGVuZChLZXlwcmVz
c0NvbW1hbmQoTlNTdHJpbmdGcm9tU2VsZWN0b3Ioc2VsZWN0b3IpKSk7CkBAIC0xMTIyLDcgKzEx
MjUsNyBAQCAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVuCiAgICAgICAg
IHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IGZhbHNlOwogCiAgICAgTlNTdHJpbmcgKnRleHQ7
Ci0gICAgYm9vbCBpc0Zyb21JbnB1dE1ldGhvZCA9IHBhcmFtZXRlcnMgJiYgcGFyYW1ldGVycy0+
Y2FjaGVkVGV4dElucHV0U3RhdGUuaGFzTWFya2VkVGV4dDsKKyAgICBib29sIGlzRnJvbUlucHV0
TWV0aG9kID0gX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uOwogCiAg
ICAgaWYgKGlzQXR0cmlidXRlZFN0cmluZykgewogICAgICAgICAvLyBGSVhNRTogV2UgaWdub3Jl
IG1vc3QgYXR0cmlidXRlcyBmcm9tIHRoZSBzdHJpbmcsIHNvIGZvciBleGFtcGxlIGluc2VydGlu
ZyBmcm9tIENoYXJhY3RlciBQYWxldHRlIGxvc2VzIGZvbnQgYW5kIGdseXBoIHZhcmlhdGlvbiBk
YXRhLgpAQCAtMTE0MiwyMCArMTE0NSwxNyBAQCAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmlu
ZyByZXBsYWNlbWVuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBUZXh0SW5wdXRTdGF0
ZSBuZXdUZXh0SW5wdXRTdGF0ZTsKICAgICBTdHJpbmcgZXZlbnRUZXh0ID0gdGV4dDsKICAgICBl
dmVudFRleHQucmVwbGFjZShOU0JhY2tUYWJDaGFyYWN0ZXIsIE5TVGFiQ2hhcmFjdGVyKTsgLy8g
c2FtZSB0aGluZyBpcyBkb25lIGluIEtleUV2ZW50TWFjLm1tIGluIFdlYkNvcmUKLSAgICBib29s
IGV2ZW50SGFuZGxlZCA9IF9kYXRhLT5fcGFnZS0+aW5zZXJ0VGV4dChldmVudFRleHQsIHJlcGxh
Y2VtZW50UmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmVwbGFjZW1lbnRSYW5nZSksIG5ld1Rl
eHRJbnB1dFN0YXRlKTsKKyAgICBib29sIGV2ZW50SGFuZGxlZCA9IF9kYXRhLT5fcGFnZS0+aW5z
ZXJ0VGV4dChldmVudFRleHQsIHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2Uo
cmVwbGFjZW1lbnRSYW5nZSkpOwogCi0gICAgaWYgKHBhcmFtZXRlcnMpIHsKKyAgICBpZiAocGFy
YW1ldGVycykKICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRJbnRlcnByZXRhdGlvbkhhZFNpZGVF
ZmZlY3RzIHw9IGV2ZW50SGFuZGxlZDsKLSAgICAgICAgcGFyYW1ldGVycy0+Y2FjaGVkVGV4dElu
cHV0U3RhdGUgPSBuZXdUZXh0SW5wdXRTdGF0ZTsKLSAgICB9CiB9CiAKIC0gKEJPT0wpX2hhbmRs
ZVN0eWxlS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50CiB7Ci0gICAgaWYgKCFfZGF0YS0+
X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpCisgICAgaWYgKCFfZGF0
YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpCiAgICAgICAgIHJldHVy
biBOTzsKIAogICAgIGlmICgoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNEZXZpY2VJbmRlcGVu
ZGVudE1vZGlmaWVyRmxhZ3NNYXNrKSAhPSBOU0NvbW1hbmRLZXlNYXNrKQpAQCAtMTI2MSw5ICsx
MjYxLDcgQEAgLSAodm9pZClfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kcwogICAgICAgICBy
ZXR1cm47CiAKICAgICBwYXJhbWV0ZXJzLT5leGVjdXRpbmdTYXZlZEtleXByZXNzQ29tbWFuZHMg
PSB0cnVlOwotICAgIFRleHRJbnB1dFN0YXRlIG5ld1RleHRJbnB1dFN0YXRlOwotICAgIHBhcmFt
ZXRlcnMtPmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyB8PSBfZGF0YS0+X3BhZ2Ut
PmV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKCpwYXJhbWV0ZXJzLT5jb21tYW5kcywgbmV3VGV4dElu
cHV0U3RhdGUpOwotICAgIHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlID0gbmV3VGV4
dElucHV0U3RhdGU7CisgICAgcGFyYW1ldGVycy0+ZXZlbnRJbnRlcnByZXRhdGlvbkhhZFNpZGVF
ZmZlY3RzIHw9IF9kYXRhLT5fcGFnZS0+ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoKnBhcmFtZXRl
cnMtPmNvbW1hbmRzKTsKICAgICBwYXJhbWV0ZXJzLT5jb21tYW5kcy0+Y2xlYXIoKTsKICAgICBw
YXJhbWV0ZXJzLT5leGVjdXRpbmdTYXZlZEtleXByZXNzQ29tbWFuZHMgPSBmYWxzZTsKIH0KQEAg
LTEyNzYsOSArMTI3NCw3IEBAIC0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dAog
ICAgICAgICByZXR1cm4gW1tXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgc2hhcmVkVGV4dElu
cHV0V2luZG93Q29udHJvbGxlcl0gaW5wdXRDb250ZXh0XTsKIAogICAgIC8vIERpc2FibGUgdGV4
dCBpbnB1dCBtYWNoaW5lcnkgd2hlbiBpbiBub24tZWRpdGFibGUgY29udGVudC4gQW4gaW52aXNp
YmxlIGlubGluZSBpbnB1dCBhcmVhIGFmZmVjdHMgcGVyZm9ybWFuY2UsIGFuZCBjYW4gcHJldmVu
dCBFeHBvc2UgZnJvbSB3b3JraW5nLgotICAgIGlmIChwYXJhbWV0ZXJzICYmICFwYXJhbWV0ZXJz
LT5jYWNoZWRUZXh0SW5wdXRTdGF0ZS5zZWxlY3Rpb25Jc0VkaXRhYmxlKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIGlmICghX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29udGVu
dEVkaXRhYmxlKQorICAgIGlmICghX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVu
dEVkaXRhYmxlKQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgcmV0dXJuIFtzdXBlciBpbnB1
dENvbnRleHRdOwpAQCAtMTMwNywxMSArMTMwMywxMSBAQCAtIChCT09MKWhhc01hcmtlZFRleHQK
IAogICAgIEJPT0wgcmVzdWx0OwogICAgIGlmIChwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIHJlc3Vs
dCA9IHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlLmhhc01hcmtlZFRleHQ7CisgICAg
ICAgIHJlc3VsdCA9IF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbjsK
ICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgLy8gQSBzYXZlZCBjb21tYW5kIGNh
biBjb25maXJtIGEgY29tcG9zaXRpb24sIGJ1dCBpdCBjYW5ub3Qgc3RhcnQgYSBuZXcgb25lLgog
ICAgICAgICAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwotICAgICAg
ICAgICAgcmVzdWx0ID0gcGFyYW1ldGVycy0+Y2FjaGVkVGV4dElucHV0U3RhdGUuaGFzTWFya2Vk
VGV4dDsKKyAgICAgICAgICAgIHJlc3VsdCA9IF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5o
YXNDb21wb3NpdGlvbjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIHVpbnQ2NF90
IGxvY2F0aW9uOwpAQCAtMTMzOCwxMCArMTMzNCw3IEBAIC0gKHZvaWQpdW5tYXJrVGV4dAogICAg
ICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBmYWxzZTsKICAgICB9CiAKLSAgICBUZXh0
SW5wdXRTdGF0ZSBuZXdUZXh0SW5wdXRTdGF0ZTsKLSAgICBfZGF0YS0+X3BhZ2UtPmNvbmZpcm1D
b21wb3NpdGlvbihuZXdUZXh0SW5wdXRTdGF0ZSk7Ci0gICAgaWYgKHBhcmFtZXRlcnMpCi0gICAg
ICAgIHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlID0gbmV3VGV4dElucHV0U3RhdGU7
CisgICAgX2RhdGEtPl9wYWdlLT5jb25maXJtQ29tcG9zaXRpb24oKTsKIH0KIAogLSAoTlNBcnJh
eSAqKXZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQKQEAgLTE0MDksMjQgKzE0MDIsMTkgQEAg
LSAodm9pZClzZXRNYXJrZWRUZXh0OihpZClzdHJpbmcgc2VsZWN0ZQogICAgIH0gZWxzZQogICAg
ICAgICB0ZXh0ID0gc3RyaW5nOwogCi0gICAgVGV4dElucHV0U3RhdGUgbmV3VGV4dElucHV0U3Rh
dGU7Ci0gICAgaWYgKF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0luUGFzc3dvcmRG
aWVsZCkgeworICAgIGlmIChfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3Jk
RmllbGQpIHsKICAgICAgICAgLy8gSW4gcGFzc3dvcmQgZmllbGRzLCB3ZSBvbmx5IGFsbG93IEFT
Q0lJIGRlYWQga2V5cywgYW5kIGRvbid0IGFsbG93IGlubGluZSBpbnB1dCwgbWF0Y2hpbmcgTlNT
ZWN1cmVUZXh0SW5wdXRGaWVsZC4KICAgICAgICAgLy8gQWxsb3dpbmcgQVNDSUkgZGVhZCBrZXlz
IGlzIG5lY2Vzc2FyeSB0byBlbmFibGUgZnVsbCBSb21hbiBpbnB1dCB3aGVuIHVzaW5nIGEgVmll
dG5hbWVzZSBrZXlib2FyZC4KLSAgICAgICAgQVNTRVJUKCFfZGF0YS0+X3BhZ2UtPnNlbGVjdGlv
blN0YXRlKCkuaGFzQ29tcG9zaXRpb24pOworICAgICAgICBBU1NFUlQoIV9kYXRhLT5fcGFnZS0+
ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbik7CiAgICAgICAgIFtbc3VwZXIgaW5wdXRDb250
ZXh0XSBkaXNjYXJkTWFya2VkVGV4dF07IC8vIEluZm9ybSB0aGUgaW5wdXQgbWV0aG9kIHRoYXQg
d2Ugd29uJ3QgaGF2ZSBhbiBpbmxpbmUgaW5wdXQgYXJlYSBkZXNwaXRlIGhhdmluZyBiZWVuIGFz
a2VkIHRvLgogICAgICAgICBpZiAoW3RleHQgbGVuZ3RoXSA9PSAxICYmIFtbdGV4dCBkZWNvbXBv
c2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddIGNoYXJhY3RlckF0SW5kZXg6MF0gPCAweDgw
KSB7Ci0gICAgICAgICAgICBfZGF0YS0+X3BhZ2UtPmluc2VydFRleHQodGV4dCwgcmVwbGFjZW1l
bnRSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShyZXBsYWNlbWVudFJhbmdlKSwgbmV3VGV4dElu
cHV0U3RhdGUpOwotICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMpCi0gICAgICAgICAgICAgICAg
cGFyYW1ldGVycy0+Y2FjaGVkVGV4dElucHV0U3RhdGUgPSBuZXdUZXh0SW5wdXRTdGF0ZTsKKyAg
ICAgICAgICAgIF9kYXRhLT5fcGFnZS0+aW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdl
LmxvY2F0aW9uLCBOU01heFJhbmdlKHJlcGxhY2VtZW50UmFuZ2UpKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBOU0JlZXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIF9k
YXRhLT5fcGFnZS0+c2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgbmV3U2VsUmFuZ2Uu
bG9jYXRpb24sIE5TTWF4UmFuZ2UobmV3U2VsUmFuZ2UpLCByZXBsYWNlbWVudFJhbmdlLmxvY2F0
aW9uLCBOU01heFJhbmdlKHJlcGxhY2VtZW50UmFuZ2UpLCBuZXdUZXh0SW5wdXRTdGF0ZSk7Ci0g
ICAgaWYgKHBhcmFtZXRlcnMpCi0gICAgICAgIHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0
YXRlID0gbmV3VGV4dElucHV0U3RhdGU7CisgICAgX2RhdGEtPl9wYWdlLT5zZXRDb21wb3NpdGlv
bih0ZXh0LCB1bmRlcmxpbmVzLCBuZXdTZWxSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShuZXdT
ZWxSYW5nZSksIHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmVwbGFjZW1l
bnRSYW5nZSkpOwogfQogCiAtIChOU1JhbmdlKW1hcmtlZFJhbmdlCkBAIC0xNDQ1LDEzICsxNDMz
LDEyIEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHIKIHsKICAgICBb
c2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKLSAgICBXS1ZpZXdJbnRlcnBy
ZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX2RhdGEtPl9pbnRlcnByZXRLZXlF
dmVudHNQYXJhbWV0ZXJzOwotICAgIGlmIChwYXJhbWV0ZXJzICYmICFwYXJhbWV0ZXJzLT5jYWNo
ZWRUZXh0SW5wdXRTdGF0ZS5zZWxlY3Rpb25Jc0VkaXRhYmxlKSB7CisgICAgaWYgKCFfZGF0YS0+
X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpIHsKICAgICAgICAgTE9HKFRl
eHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gbmlsIiwg
bnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgpOwogICAgICAgICByZXR1cm4gbmlsOwog
ICAgIH0KIAotICAgIGlmIChfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNJblBhc3N3
b3JkRmllbGQpCisgICAgaWYgKF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dv
cmRGaWVsZCkKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIEF0dHJpYnV0ZWRTdHJpbmcgcmVz
dWx0OwpAQCAtMjAyMCw3ICsyMDA3LDcgQEAgLSAodm9pZClfcmVzZW5kS2V5RG93bkV2ZW50OihO
U0V2ZW50ICopZQogICAgIF9kYXRhLT5fa2V5RG93bkV2ZW50QmVpbmdSZXNlbnQgPSBudWxscHRy
OwogfQogCi0tIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooTlNFdmVudCAqKWV2ZW50IHdpdGhD
YWNoZWRUZXh0SW5wdXRTdGF0ZTooY29uc3QgVGV4dElucHV0U3RhdGUmKWNhY2hlZFRleHRJbnB1
dFN0YXRlIHNhdmluZ0NvbW1hbmRzVG86KFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+
Jiljb21tYW5kcworLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCBz
YXZpbmdDb21tYW5kc1RvOihWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpY29tbWFu
ZHMKIHsKICAgICBBU1NFUlQoIV9kYXRhLT5faW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyk7
CiAgICAgQVNTRVJUKGNvbW1hbmRzLmlzRW1wdHkoKSk7CkBAIC0yMDI5LDcgKzIwMTYsNiBAQCAt
IChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooTlNFdmVudCAqKWV2CiAgICAgICAgIHJldHVybiBO
TzsKIAogICAgIFdLVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgcGFyYW1ldGVyczsK
LSAgICBwYXJhbWV0ZXJzLmNhY2hlZFRleHRJbnB1dFN0YXRlID0gY2FjaGVkVGV4dElucHV0U3Rh
dGU7CiAgICAgcGFyYW1ldGVycy5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgPSBm
YWxzZTsKICAgICBwYXJhbWV0ZXJzLmV4ZWN1dGluZ1NhdmVkS2V5cHJlc3NDb21tYW5kcyA9IGZh
bHNlOwogICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFuIGlucHV0IG1ldGhvZCBoYXMgY29uc3VtZWQg
dGhlIGV2ZW50LCBhbmQgb25seSBjaGFuZ2UgdGhpcyBhc3N1bXB0aW9uIGlmIG9uZSBvZiB0aGUg
TlNUZXh0SW5wdXQgbWV0aG9kcyBpcyBjYWxsZWQuCkBAIC0yMzM5LDcgKzIzMjUsNyBAQCAtICh2
b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRlCiAgICAgfQogICAgIC8vIFdLVmlldyBoYXMgYSBz
aW5nbGUgaW5wdXQgY29udGV4dCBmb3IgYWxsIGVkaXRhYmxlIGFyZWFzIChleGNlcHQgZm9yIHBs
dWctaW5zKS4KICAgICBOU1RleHRJbnB1dENvbnRleHQgKmNvbnRleHQgPSBbc3VwZXIgaW5wdXRD
b250ZXh0XTsKLSAgICBib29sIGlzSW5QYXNzd29yZEZpZWxkID0gX2RhdGEtPl9wYWdlLT5zZWxl
Y3Rpb25TdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkOworICAgIGJvb2wgaXNJblBhc3N3b3JkRmll
bGQgPSBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQ7CiAKICAg
ICBpZiAoaXNJblBhc3N3b3JkRmllbGQpIHsKICAgICAgICAgaWYgKCFfZGF0YS0+X2luU2VjdXJl
SW5wdXRTdGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
d0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIGNsYXNzIERyYXdpbmdBcmVhUHJveHk7
CiAgICAgY2xhc3MgRmluZEluZGljYXRvcjsKICAgICBjbGFzcyBMYXllclRyZWVDb250ZXh0Owot
ICAgIHN0cnVjdCBUZXh0SW5wdXRTdGF0ZTsKIH0KIAogQGNsYXNzIFdLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXI7CkBAIC01NSw3ICs1NCw3IEBAIEBpbnRlcmZhY2UgV0tWaWV3IChJbnRlcm5h
bCkKIC0gKHZvaWQpX3Rvb2xUaXBDaGFuZ2VkRnJvbTooTlNTdHJpbmcgKilvbGRUb29sVGlwIHRv
OihOU1N0cmluZyAqKW5ld1Rvb2xUaXA7CiAtICh2b2lkKV9zZXRDdXJzb3I6KE5TQ3Vyc29yICop
Y3Vyc29yOwogLSAodm9pZClfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTooTlNTdHJpbmcgKilj
b21tYW5kTmFtZSBlbmFibGVkOihCT09MKWlzRW5hYmxlZCBzdGF0ZTooaW50KW5ld1N0YXRlOwot
LSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKil0aGVFdmVudCB3aXRoQ2FjaGVk
VGV4dElucHV0U3RhdGU6KGNvbnN0IFdlYktpdDo6VGV4dElucHV0U3RhdGUmKWNhY2hlZFRleHRJ
bnB1dFN0YXRlIHNhdmluZ0NvbW1hbmRzVG86KFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1h
bmQ+Jiljb21tYW5kczsKKy0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihOU0V2ZW50ICopdGhl
RXZlbnQgc2F2aW5nQ29tbWFuZHNUbzooVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4m
KWNvbW1hbmRzOwogLSAodm9pZClfcmVzZW5kS2V5RG93bkV2ZW50OihOU0V2ZW50ICopZXZlbnQ7
CiAtIChib29sKV9leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yOwog
LSAoTlNSZWN0KV9jb252ZXJ0VG9EZXZpY2VTcGFjZTooTlNSZWN0KXJlY3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2aXNp
b24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAjaW1wb3J0ICJBdHRyaWJ1
dGVkU3RyaW5nLmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0ICJEaWN0aW9u
YXJ5UG9wdXBJbmZvLmgiCisjaW1wb3J0ICJFZGl0b3JTdGF0ZS5oIgogI2ltcG9ydCAiTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudC5oIgogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAiUGFn
ZUNsaWVudEltcGwuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyLmgiCi0jaW1wb3J0ICJUZXh0SW5w
dXRTdGF0ZS5oIgogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9j
ZXNzUHJveHkuaCIKICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CkBAIC0x
NDEsMjAgKzE0MSwyMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1lc0No
CiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaW5kb3dBbmRWaWV3RnJh
bWVzQ2hhbmdlZCh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIHZpZXdGcmFtZUluV2lu
ZG93Q29vcmRpbmF0ZXMsIGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXMpLCBtX3BhZ2VJRCk7
CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRl
eHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2Vs
ZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRS
YW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBUZXh0SW5wdXRTdGF0ZSYg
bmV3U3RhdGUpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90
IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2Vt
ZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCkKIHsKLSAgICBwcm9j
ZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlvbih0ZXh0LCB1
bmRlcmxpbmVzLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCByZXBsYWNlbWVudFJhbmdl
U3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQpLCBNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29tcG9z
aXRpb246OlJlcGx5KG5ld1N0YXRlKSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNl
bGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQsIHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgcmVwbGFj
ZW1lbnRSYW5nZUVuZCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlvbjo6UmVwbHko
bV9lZGl0b3JTdGF0ZSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmNvbmZp
cm1Db21wb3NpdGlvbihUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpCit2b2lkIFdlYlBhZ2VQcm94
eTo6Y29uZmlybUNvbXBvc2l0aW9uKCkKIHsKLSAgICBwcm9jZXNzKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpDb25maXJtQ29tcG9zaXRpb24oKSwgTWVzc2FnZXM6OldlYlBhZ2U6OkNv
bmZpcm1Db21wb3NpdGlvbjo6UmVwbHkobmV3U3RhdGUpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2Vz
cygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uKCksIE1l
c3NhZ2VzOjpXZWJQYWdlOjpDb25maXJtQ29tcG9zaXRpb246OlJlcGx5KG1fZWRpdG9yU3RhdGUp
LCBtX3BhZ2VJRCk7CiB9CiAKLWJvb2wgV2ViUGFnZVByb3h5OjppbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBs
YWNlbWVudFJhbmdlRW5kLCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpCitib29sIFdlYlBhZ2VQ
cm94eTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50
UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCkKIHsKICAgICBib29sIGhh
bmRsZWQ7Ci0gICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0
VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQpLCBN
ZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0VGV4dDo6UmVwbHkoaGFuZGxlZCwgbmV3U3RhdGUpLCBt
X3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6SW5z
ZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQp
LCBNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0VGV4dDo6UmVwbHkoaGFuZGxlZCwgbV9lZGl0b3JT
dGF0ZSksIG1fcGFnZUlEKTsKICAgICByZXR1cm4gaGFuZGxlZDsKIH0KIApAQCAtMTg3LDI2ICsx
ODcsMzIgQEAgV2ViQ29yZTo6SW50UmVjdCBXZWJQYWdlUHJveHk6OmZpcnN0UmVjdAogICAgIHJl
dHVybiByZXN1bHRSZWN0OwogfQogCi1ib29sIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZUtleXByZXNz
Q29tbWFuZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRz
LCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpCitib29sIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZUtl
eXByZXNzQ29tbWFuZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNv
bW1hbmRzKQogewogICAgIGJvb2wgcmVzdWx0OwotICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhZ2U6OkV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKGNvbW1hbmRzKSwgTWVzc2Fn
ZXM6OldlYlBhZ2U6OkV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzOjpSZXBseShyZXN1bHQsIG5ld1N0
YXRlKSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
Z2U6OkV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKGNvbW1hbmRzKSwgTWVzc2FnZXM6OldlYlBhZ2U6
OkV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzOjpSZXBseShyZXN1bHQsIG1fZWRpdG9yU3RhdGUpLCBt
X3BhZ2VJRCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnVw
ZGF0ZUVkaXRvclN0YXRlKCkKK3sKKyAgICBjb25zdCBkb3VibGUgbWVzc2FnZVRpbWVvdXQgPSAy
MDsKKyAgICBwcm9jZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRFZGl0b3JT
dGF0ZSgpLCBNZXNzYWdlczo6V2ViUGFnZTo6R2V0RWRpdG9yU3RhdGU6OlJlcGx5KG1fZWRpdG9y
U3RhdGUpLCBtX3BhZ2VJRCwgbWVzc2FnZVRpbWVvdXQpOworfQorCiBib29sIFdlYlBhZ2VQcm94
eTo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcykKIHsKICAgICBib29sIHJl
c3VsdDsKLSAgICBjb25zdCBkb3VibGUgTWVzc2FnZVRpbWVvdXQgPSAyMDsKLSAgICBwcm9jZXNz
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpXcml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwgTWVzc2FnZXM6OldlYlBhZ2U6Oldy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOjpSZXBseShyZXN1bHQpLCBtX3BhZ2VJRCwgTWVzc2Fn
ZVRpbWVvdXQpOworICAgIGNvbnN0IGRvdWJsZSBtZXNzYWdlVGltZW91dCA9IDIwOworICAgIHBy
b2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OldyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLCBNZXNzYWdlczo6V2ViUGFn
ZTo6V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZUlELCBt
ZXNzYWdlVGltZW91dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBXZWJQYWdlUHJv
eHk6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKQogewogICAgIGJvb2wgcmVzdWx0OwotICAgIGNvbnN0IGRvdWJsZSBNZXNzYWdlVGltZW91
dCA9IDIwOwotICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlJlYWRT
ZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYWdl
OjpSZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZUlELCBN
ZXNzYWdlVGltZW91dCk7CisgICAgY29uc3QgZG91YmxlIG1lc3NhZ2VUaW1lb3V0ID0gMjA7Cisg
ICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6UmVhZFNlbGVjdGlvbkZy
b21QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlBhZ2U6OlJlYWRTZWxl
Y3Rpb25Gcm9tUGFzdGVib2FyZDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlSUQsIG1lc3NhZ2VUaW1l
b3V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMjcsOSArMjMzLDEwIEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2sKICAgICBwcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihwb2lu
dCksIG1fcGFnZUlEKTsgCiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjppbnRlcnByZXRRdWV1ZWRL
ZXlFdmVudChjb25zdCBUZXh0SW5wdXRTdGF0ZSYgc3RhdGUsIGJvb2wmIGhhbmRsZWQsIFZlY3Rv
cjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcykKK3ZvaWQgV2ViUGFnZVByb3h5
OjppbnRlcnByZXRRdWV1ZWRLZXlFdmVudChjb25zdCBFZGl0b3JTdGF0ZSYgc3RhdGUsIGJvb2wm
IGhhbmRsZWQsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcykKIHsK
LSAgICBoYW5kbGVkID0gbV9wYWdlQ2xpZW50LT5pbnRlcnByZXRLZXlFdmVudChtX2tleUV2ZW50
UXVldWUuZmlyc3QoKSwgc3RhdGUsIGNvbW1hbmRzKTsKKyAgICBtX2VkaXRvclN0YXRlID0gc3Rh
dGU7CisgICAgaGFuZGxlZCA9IG1fcGFnZUNsaWVudC0+aW50ZXJwcmV0S2V5RXZlbnQobV9rZXlF
dmVudFF1ZXVlLmZpcnN0KCksIGNvbW1hbmRzKTsKIH0KIAogLy8gQ29tcGxleCB0ZXh0IGlucHV0
IHN1cHBvcnQgZm9yIHBsdWctaW5zLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2lu
L1dlYlZpZXcuY3BwCShyZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTIsNyArMTE1Miw3IEBAIHZv
aWQgV2ViVmlldzo6c2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGUKIAogdm9pZCBXZWJWaWV3Ojpj
b21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZWQoYm9vbCBoYXNDaGFuZ2VkKQogewotICAgIGlmICht
X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaGFzQ29tcG9zaXRpb24gJiYgIWhhc0NoYW5nZWQpCisg
ICAgaWYgKG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbiAmJiAhaGFzQ2hhbmdl
ZCkKICAgICAgICAgcmVzZXRJTUUoKTsKIH0KIApAQCAtMTI2MCw3ICsxMjYwLDcgQEAgYm9vbCBX
ZWJWaWV3OjpvbklNRUNvbXBvc2l0aW9uKExQQVJBTSBscAogICAgIGlmICghaElucHV0Q29udGV4
dCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIW1fcGFnZS0+c2VsZWN0aW9uU3Rh
dGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKKyAgICBpZiAoIW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5p
c0NvbnRlbnRFZGl0YWJsZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBwcmVwYXJlQ2Fu
ZGlkYXRlV2luZG93KGhJbnB1dENvbnRleHQpOwpAQCAtMTMwMyw3ICsxMzAzLDcgQEAgYm9vbCBX
ZWJWaWV3OjpvbklNRUVuZENvbXBvc2l0aW9uKCkKICAgICBMT0coVGV4dElucHV0LCAib25JTUVF
bmRDb21wb3NpdGlvbiIpOwogICAgIC8vIElmIHRoZSBjb21wb3NpdGlvbiBoYXNuJ3QgYmVlbiBj
b25maXJtZWQgeWV0LCBpdCBuZWVkcyB0byBiZSBjYW5jZWxsZWQuCiAgICAgLy8gVGhpcyBoYXBw
ZW5zIGFmdGVyIGRlbGV0aW5nIHRoZSBsYXN0IGNoYXJhY3RlciBmcm9tIGlubGluZSBpbnB1dCBo
b2xlLgotICAgIGlmIChtX3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaGFzQ29tcG9zaXRpb24pCisg
ICAgaWYgKG1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbikKICAgICAgICAgbV9w
YWdlLT5jb25maXJtQ29tcG9zaXRpb24oU3RyaW5nKCkpOwogCiAgICAgaWYgKG1faW5JTUVDb21w
b3NpdGlvbikKQEAgLTEzMTQsNyArMTMxNCw3IEBAIGJvb2wgV2ViVmlldzo6b25JTUVFbmRDb21w
b3NpdGlvbigpCiAKIExSRVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW9uKElN
RUNIQVJQT1NJVElPTiogY2hhclBvcykKIHsKLSAgICBpZiAoY2hhclBvcy0+ZHdDaGFyUG9zICYm
ICFtX3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaGFzQ29tcG9zaXRpb24pCisgICAgaWYgKGNoYXJQ
b3MtPmR3Q2hhclBvcyAmJiAhbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uKQog
ICAgICAgICByZXR1cm4gMDsKICAgICBJbnRSZWN0IGNhcmV0ID0gbV9wYWdlLT5maXJzdFJlY3RG
b3JDaGFyYWN0ZXJJblNlbGVjdGVkUmFuZ2UoY2hhclBvcy0+ZHdDaGFyUG9zKTsKICAgICBjaGFy
UG9zLT5wdC54ID0gY2FyZXQueCgpOwpAQCAtMTM0Niw3ICsxMzQ2LDcgQEAgTFJFU1VMVCBXZWJW
aWV3OjpvbklNRVJlcXVlc3RSZWNvbnZlcnRTdAogTFJFU1VMVCBXZWJWaWV3OjpvbklNRVJlcXVl
c3QoV1BBUkFNIHJlcXVlc3QsIExQQVJBTSBkYXRhKQogewogICAgIExPRyhUZXh0SW5wdXQsICJv
bklNRVJlcXVlc3QgJXMiLCBpbWVSZXF1ZXN0TmFtZShyZXF1ZXN0KS5sYXRpbjEoKS5kYXRhKCkp
OwotICAgIGlmICghbV9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKQor
ICAgIGlmICghbV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIHN3aXRjaCAocmVxdWVzdCkgewpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODQw
NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQAogCQkxQUEyRTUxRTEyRTRDMDVFMDBC
QzQ5NjYgLyogQ0dVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFBMkU1MUMxMkU0QzA1RTAwQkM0OTY2IC8qIENHVXRpbGl0aWVzLmNw
cCAqLzsgfTsKIAkJMUFBNDE3Q0IxMkMwMENDQTAwMkJFNjdCIC8qIFRleHRDaGVja2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE0MTdDOTEyQzAw
Q0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCAqLzsgfTsKIAkJMUFBNDE3RUYxMkMwMEQ4NzAw
MkJFNjdCIC8qIFRleHRDaGVja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFBNDE3RUQxMkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVja2Vy
TWFjLm1tICovOyB9OwotCQkxQUE0MUFCNTEyQzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3Rh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTQx
QUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBTZWxlY3Rpb25TdGF0ZS5oICovOyB9OworCQkxQUE0MUFC
NTEyQzAyRUM0MDAyQkU2N0IgLyogRWRpdG9yU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBFZGl0
b3JTdGF0ZS5oICovOyB9OwogCQkxQUE0NzkyMzEyQTU5RkQ5MDA4MjM2QzMgLyogUGx1Z2luUHJv
Y2Vzc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBQTQ3OTIyMTJBNTlGRDkwMDgyMzZDMyAvKiBQbHVnaW5Qcm9jZXNzTWFjLm1tICovOyB9Owog
CQkxQUE0NzlCMDEyQTVBNDM2MDA4MjM2QzMgLyogQ2FyYm9uLmZyYW1ld29yayBpbiBGcmFtZXdv
cmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTFDRDA2MTAwRkExQkEw
MDc4REVCQyAvKiBDYXJib24uZnJhbWV3b3JrICovOyB9OwogCQkxQUE1NkYyOTExRTkyQkM4MDA2
MUI4ODIgLyogUGx1Z2luQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFBNTZGMjgxMUU5MkJDODAwNjFCODgyIC8qIFBsdWdpbkNvbnRy
b2xsZXIuaCAqLzsgfTsKQEAgLTc4OCw3ICs3ODgsNiBAQAogCQlFMTM0RjAxQTEyRUE1RDk5MDA0
RUM1OEQgLyogV0tQcmludGluZ1ZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTM0RjAxOTEyRUE1RDk5MDA0RUM1OEQgLyogV0tQcmludGluZ1Zp
ZXcubW0gKi87IH07CiAJCUUxNzlGRDlDMTM0RDM4MDYwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVy
c01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3
OUZEOUIxMzREMzgwNjAwMTVCODgzIC8qIEFyZ3VtZW50Q29kZXJzTWFjLmggKi87IH07CiAJCUUx
NzlGRDlGMTM0RDM4MjUwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNzlGRDlFMTM0RDM4MjUwMDE1
Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5tbSAqLzsgfTsKLQkJRTE4MzkzNDkxMzQyOTdBNTAw
MTg0MkVDIC8qIFRleHRJbnB1dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTgzOTM0ODEzNDI5N0E1MDAxODQyRUMgLyogVGV4dElucHV0U3Rh
dGUuaCAqLzsgfTsKIAkJRTE4QzkyRjQxMkRCOUU3MTAwQ0YyQUVCIC8qIFByaW50SW5mby5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMThDOTJGMzEy
REI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCAqLzsgfTsKIAkJRTFBMzE3MzIxMzRDRUE2
QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1
dGVkU3RyaW5nLmggKi87IH07CiAJCUUxQTMxNzM1MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1
dGVkU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFBMzE3MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi87IH07
CkBAIC0xMDU1LDcgKzEwNTQsNyBAQAogCQkxQUEyRTUxQzEyRTRDMDVFMDBCQzQ5NjYgLyogQ0dV
dGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0dVdGls
aXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE0MTdDOTEyQzAwQ0NB
MDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGV4dENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNDE3RUQx
MkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dENoZWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTFBQTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBTZWxlY3Rpb25TdGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3Rpb25TdGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQUE0MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogRWRp
dG9yU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdG9yU3RhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNDc5MjIxMkE1OUZEOTAwODIzNkMz
IC8qIFBsdWdpblByb2Nlc3NNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBQbHVnaW5Qcm9jZXNzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQUE1NkYyODExRTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBQTU4ODkwMTFFRTcwNDAwMDYxQjg4MiAvKiBOZXRzY2FwZVBs
dWdpblN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRzY2FwZVBs
dWdpblN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxNCw3ICsxNzEz
LDYgQEAKIAkJRTEzNEYwMTkxMkVBNUQ5OTAwNEVDNThEIC8qIFdLUHJpbnRpbmdWaWV3Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tQcmludGluZ1ZpZXcubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNzlGRDlCMTM0RDM4MDYwMDE1Qjg4MyAv
KiBBcmd1bWVudENvZGVyc01hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
cmd1bWVudENvZGVyc01hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTc5RkQ5
RTEzNEQzODI1MDAxNUI4ODMgLyogQXJndW1lbnRDb2RlcnNNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBcmd1bWVudENvZGVyc01hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE4MzkzNDgxMzQyOTdBNTAwMTg0MkVDIC8qIFRleHRJbnB1
dFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJbnB1dFN0YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOEM5MkYzMTJEQjlFNzEwMENGMkFF
QiAvKiBQcmludEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJpbnRJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBMzE3MzExMzRD
RUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXR0cmlidXRlZFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUEzMTczNDEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF0dHJpYnV0ZWRTdHJpbmcubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDg2LDcgKzIwODQsNyBAQAogCQkJCTFB
QUI0QThDMTI5NkYwQTIwMDIzOTUyRiAvKiBTYW5kYm94RXh0ZW5zaW9uLmggKi8sCiAJCQkJMzMx
NTI5NzMxMzBEMENCMjAwRUQyNDgzIC8qIFNlY3VyaXR5T3JpZ2luRGF0YS5jcHAgKi8sCiAJCQkJ
MzMxNTI5NzQxMzBEMENCMjAwRUQyNDgzIC8qIFNlY3VyaXR5T3JpZ2luRGF0YS5oICovLAotCQkJ
CTFBQTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBTZWxlY3Rpb25TdGF0ZS5oICovLAorCQkJCTFB
QTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBFZGl0b3JTdGF0ZS5oICovLAogCQkJCTUxOEQyQ0M4
MTJENTFERkIwMDNCQjkzQiAvKiBTZXNzaW9uU3RhdGUuY3BwICovLAogCQkJCTUxOEQyQ0M5MTJE
NTFERkIwMDNCQjkzQiAvKiBTZXNzaW9uU3RhdGUuaCAqLywKIAkJCQkxQTY0MjBFMjEyRENFMkZG
MDBDQUFFMkMgLyogU2hhcmVhYmxlQml0bWFwLmNwcCAqLywKQEAgLTI3ODksNyArMjc4Nyw2IEBA
CiAJCQkJMUFBQjRBQTkxMjk2RjE1NDAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNpb25NYWMubW0g
Ki8sCiAJCQkJMUE5NjM2QkExMkYzNDg0OTAwNzhBMDYyIC8qIFNoYXJlYWJsZVN1cmZhY2UuY3Bw
ICovLAogCQkJCTFBOTYzNkJCMTJGMzQ4NDkwMDc4QTA2MiAvKiBTaGFyZWFibGVTdXJmYWNlLmgg
Ki8sCi0JCQkJRTE4MzkzNDgxMzQyOTdBNTAwMTg0MkVDIC8qIFRleHRJbnB1dFN0YXRlLmggKi8s
CiAJCQkJQkM5RTk1RDIxMTQ0OUIwMzAwODcwRTcxIC8qIFVwZGF0ZUNodW5rLmNwcCAqLywKIAkJ
CQlCQzlFOTVEMTExNDQ5QjAzMDA4NzBFNzEgLyogVXBkYXRlQ2h1bmsuaCAqLywKIAkJCQlCQ0Uy
MzI2MjEyMkM2Q0YzMDBENUMzNUEgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tICovLApA
QCAtMzU4OCw3ICszNTg1LDcgQEAKIAkJCQlCQzg1OEEyMDEyQzAzNTdCMDBFREVCMkUgLyogV2Vi
UmVzb3VyY2VMb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE0MTdDQjEyQzAwQ0NB
MDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkwOTg1NEVEMTJC
QzRFMTgwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkx
QUE0MUFCNTEyQzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTFBQTQxQUI1MTJDMDJFQzQwMDJCRTY3QiAvKiBFZGl0b3JTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNDRjY3MkQxMkM3RURGNzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjZBQkQxMkM5MUVGOTAwOEY5QzM1IC8qIFdlYklt
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGNkFDMzEyQzkxRjM0MDA4RjlDMzUgLyogV0tJ
bWFnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjgxLDcgKzM2NzgsNiBAQAogCQkJCTUxMTBBRTBE
MTMzQzE2Q0IwMDcyNzE3QSAvKiBXS0ljb25EYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTEyM0NGMUMxMzNEMjYwQTAwNTZGODAwIC8qIFdLSWNvbkRhdGFiYXNlQ0cuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxODM0NTkzMTM0NTMyRTkwMDkyQjY5NiAvKiBXZWJJY29uRGF0YWJhc2VDbGll
bnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUUxODM5MzQ5MTM0Mjk3QTUwMDE4NDJFQyAvKiBUZXh0
SW5wdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzBGQTUyNDMxMzQ1Njk0QTAwMjhFOEMy
IC8qIExheWVyVHJlZUhvc3RDQU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBMzE3MzIxMzRD
RUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUUx
NzlGRDlDMTM0RDM4MDYwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiA4NDA1NykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYkVkaXRvckNsaWVudC5oIgogCi0jaW5jbHVkZSAiU2VsZWN0aW9uU3RhdGUu
aCIKKyNpbmNsdWRlICJFZGl0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgogI2luY2x1ZGUgIldlYkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZS5oIgpAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVu
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CkBAIC0xOTEsMjQgKzE5MCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNw
b25kVG9DaGFuZ2VkU2UKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
ZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZTsKLSAgICBzZWxlY3Rpb25TdGF0ZS5pc05vbmUg
PSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpOwotICAgIHNlbGVjdGlvblN0YXRlLmlzQ29u
dGVudEVkaXRhYmxlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwot
ICAgIHNlbGVjdGlvblN0YXRlLmlzQ29udGVudFJpY2hseUVkaXRhYmxlID0gZnJhbWUtPnNlbGVj
dGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwotICAgIHNlbGVjdGlvblN0YXRlLmlz
SW5QYXNzd29yZEZpZWxkID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc0luUGFzc3dvcmRGaWVsZCgp
OwotICAgIHNlbGVjdGlvblN0YXRlLmhhc0NvbXBvc2l0aW9uID0gZnJhbWUtPmVkaXRvcigpLT5o
YXNDb21wb3NpdGlvbigpOwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAg
c2l6ZV90IGxvY2F0aW9uOwotICAgICAgICBzaXplX3QgbGVuZ3RoOwotICAgICAgICBpZiAoIVRl
eHRJdGVyYXRvcjo6bG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UocmFuZ2UuZ2V0KCksIGxvY2F0
aW9uLCBsZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzZWxlY3Rpb25TdGF0
ZS5zZWxlY3RlZFJhbmdlU3RhcnQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYXRpb24pOwot
ICAgICAgICBzZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlTGVuZ3RoID0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGxlbmd0aCk7Ci0gICAgfQotCi0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNlbGVjdGlvblN0YXRlQ2hhbmdlZChzZWxlY3Rpb25TdGF0ZSkpOworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5nZWQo
bV9wYWdlLT5lZGl0b3JTdGF0ZSgpKSk7CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGFsc28gZ28gaW50byB0aGUgc2VsZWN0aW9uIHN0YXRlLgpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNp
b24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw2ICszMTUsMjIgQEAgUGFzc1JlZlB0cjxQbHVnaW4+
IFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbgogI2VuZGlmCiB9CiAKK0VkaXRvclN0YXRlIFdlYlBhZ2U6
OmVkaXRvclN0YXRlKCkgY29uc3QKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBBU1NFUlQoZnJhbWUpOwor
CisgICAgRWRpdG9yU3RhdGUgcmVzdWx0OworICAgIHJlc3VsdC5zZWxlY3Rpb25Jc05vbmUgPSBm
cmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpOworICAgIHJlc3VsdC5zZWxlY3Rpb25Jc1Jhbmdl
ID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCk7CisgICAgcmVzdWx0LmlzQ29udGVudEVk
aXRhYmxlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJl
c3VsdC5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250
ZW50UmljaGx5RWRpdGFibGUoKTsKKyAgICByZXN1bHQuaXNJblBhc3N3b3JkRmllbGQgPSBmcmFt
ZS0+c2VsZWN0aW9uKCktPmlzSW5QYXNzd29yZEZpZWxkKCk7CisgICAgcmVzdWx0Lmhhc0NvbXBv
c2l0aW9uID0gZnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpOworICAgIAorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIFN0cmluZyBXZWJQYWdlOjpyZW5kZXJUcmVlRXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
bV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLCBSZW5kZXJBc1RleHRCZWhhdmlvck5vcm1hbCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlz
aW9uIDg0MDU3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDggKzEwNSw4IEBAIGNsYXNzIFdlYlBhZ2VHcm91cFBy
b3h5OwogY2xhc3MgV2ViUG9wdXBNZW51OwogY2xhc3MgV2ViV2hlZWxFdmVudDsKIHN0cnVjdCBB
dHRyaWJ1dGVkU3RyaW5nOworc3RydWN0IEVkaXRvclN0YXRlOwogc3RydWN0IFByaW50SW5mbzsK
LXN0cnVjdCBUZXh0SW5wdXRTdGF0ZTsKIHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
Owogc3RydWN0IFdlYlByZWZlcmVuY2VzU3RvcmU7CiAKQEAgLTIwOSw2ICsyMDksOCBAQCBwdWJs
aWM6CiAgICAgV2ViRnJhbWUqIG1haW5GcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkZyYW1l
LmdldCgpOyB9CiAgICAgUGFzc1JlZlB0cjxQbHVnaW4+IGNyZWF0ZVBsdWdpbihjb25zdCBQbHVn
aW46OlBhcmFtZXRlcnMmKTsKIAorICAgIEVkaXRvclN0YXRlIGVkaXRvclN0YXRlKCkgY29uc3Q7
CisKICAgICBTdHJpbmcgcmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24oKSBjb25zdDsK
ICAgICB2b2lkIGV4ZWN1dGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1l
LCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KTsKICAgICBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFi
bGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpOwpAQCAtMzEyLDE1ICszMTQsMTYgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50NjRf
dCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB0ZXh0SW5w
dXQpOwogCi0gICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3Rv
cjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2Vs
ZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRS
YW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBUZXh0SW5wdXRTdGF0ZSYg
bmV3U3RhdGUpOwotICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKFRleHRJbnB1dFN0YXRlJiBu
ZXdTdGF0ZSk7Ci0gICAgdm9pZCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0
X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBi
b29sJiBoYW5kbGVkLCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpOworICAgIHZvaWQgc2V0Q29t
cG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25V
bmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBz
ZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVw
bGFjZW1lbnRSYW5nZUVuZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKTsKKyAgICB2b2lkIGNvbmZp
cm1Db21wb3NpdGlvbihFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpOworICAgIHZvaWQgaW5zZXJ0VGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWlu
dDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgYm9vbCYgaGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5l
d1N0YXRlKTsKICAgICB2b2lkIGdldE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWlu
dDY0X3QmIGxlbmd0aCk7CiAgICAgdm9pZCBnZXRTZWxlY3RlZFJhbmdlKHVpbnQ2NF90JiBsb2Nh
dGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CiAgICAgdm9pZCBnZXRBdHRyaWJ1dGVkU3Vic3RyaW5n
RnJvbVJhbmdlKHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgsIEF0dHJpYnV0ZWRT
dHJpbmcmKTsKICAgICB2b2lkIGNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQgcG9pbnQsIHVpbnQ2NF90JiByZXN1bHQpOwogICAgIHZvaWQgZmlyc3RSZWN0Rm9y
Q2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCwgV2ViQ29y
ZTo6SW50UmVjdCYgcmVzdWx0UmVjdCk7Ci0gICAgdm9pZCBleGVjdXRlS2V5cHJlc3NDb21tYW5k
cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYsIGJvb2wmIGhhbmRsZWQs
IFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSk7CisgICAgdm9pZCBleGVjdXRlS2V5cHJlc3NDb21t
YW5kcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYsIGJvb2wmIGhhbmRs
ZWQsIEVkaXRvclN0YXRlJiBuZXdTdGF0ZSk7CisgICAgdm9pZCBnZXRFZGl0b3JTdGF0ZShFZGl0
b3JTdGF0ZSYpOwogICAgIHZvaWQgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgV1RG
OjpTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4m
IHBhc3RlYm9hcmRUeXBlcywgYm9vbCYgcmVzdWx0KTsKICAgICB2b2lkIHJlYWRTZWxlY3Rpb25G
cm9tUGFzdGVib2FyZChjb25zdCBXVEY6OlN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGJvb2wmIHJl
c3VsdCk7CiAgICAgdm9pZCBzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRXZlbnQoY29uc3QgV2Vi
S2l0OjpXZWJNb3VzZUV2ZW50JiwgYm9vbCYgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZp
c2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsMTYgKzE4NCwxOCBAQCBtZXNzYWdl
cyAtPiBXZWJQYWdlIHsKICAgICBXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXVEY6OlN0cmlu
ZyBwYXN0ZWJvYXJkTmFtZSwgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+IHBhc3RlYm9hcmRUeXBl
cykgLT4gKGJvb2wgcmVzdWx0KQogICAgIFJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChXVEY6
OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKGJvb2wgcmVzdWx0KQogCisgICAgR2V0RWRpdG9y
U3RhdGUoKSAtPiAoV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKKwogICAgICMgVGV4dCBp
bnB1dC4KLSAgICBTZXRDb21wb3NpdGlvbihXVEY6OlN0cmluZyB0ZXh0LCBXVEY6OlZlY3RvcjxX
ZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0
aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5n
ZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKSAtPiAoV2ViS2l0OjpUZXh0SW5w
dXRTdGF0ZSBuZXdTdGF0ZSkKLSAgICBDb25maXJtQ29tcG9zaXRpb24oKSAtPiAoV2ViS2l0OjpU
ZXh0SW5wdXRTdGF0ZSBuZXdTdGF0ZSkKLSAgICBJbnNlcnRUZXh0KFdURjo6U3RyaW5nIHRleHQs
IHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5n
ZUVuZCkgLT4gKGJvb2wgaGFuZGxlZCwgV2ViS2l0OjpUZXh0SW5wdXRTdGF0ZSBuZXdTdGF0ZSkK
KyAgICBTZXRDb21wb3NpdGlvbihXVEY6OlN0cmluZyB0ZXh0LCBXVEY6OlZlY3RvcjxXZWJDb3Jl
OjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3Rh
cnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0
LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKSAtPiAoV2ViS2l0OjpFZGl0b3JTdGF0ZSBu
ZXdTdGF0ZSkKKyAgICBDb25maXJtQ29tcG9zaXRpb24oKSAtPiAoV2ViS2l0OjpFZGl0b3JTdGF0
ZSBuZXdTdGF0ZSkKKyAgICBJbnNlcnRUZXh0KFdURjo6U3RyaW5nIHRleHQsIHVpbnQ2NF90IHJl
cGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCkgLT4gKGJv
b2wgaGFuZGxlZCwgV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKICAgICBHZXRNYXJrZWRS
YW5nZSgpIC0+ICh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKQogICAgIEdldFNl
bGVjdGVkUmFuZ2UoKSAtPiAodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCkKICAg
ICBHZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50
NjRfdCBsZW5ndGgpIC0+IChXZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmcgcmVzdWx0KQogICAgIENo
YXJhY3RlckluZGV4Rm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpIC0+ICh1aW50NjRf
dCByZXN1bHQpCiAgICAgRmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRp
b24sIHVpbnQ2NF90IGxlbmd0aCkgLT4gKFdlYkNvcmU6OkludFJlY3QgcmVzdWx0UmVjdCkKLSAg
ICBFeGVjdXRlS2V5cHJlc3NDb21tYW5kcyhWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
PiBzYXZlZENvbW1hbmRzKSAtPiAoYm9vbCBoYW5kbGVkLCBXZWJLaXQ6OlRleHRJbnB1dFN0YXRl
IG5ld1N0YXRlKQorICAgIEV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKFZlY3RvcjxXZWJDb3JlOjpL
ZXlwcmVzc0NvbW1hbmQ+IHNhdmVkQ29tbWFuZHMpIC0+IChib29sIGhhbmRsZWQsIFdlYktpdDo6
RWRpdG9yU3RhdGUgbmV3U3RhdGUpCiAgICAgU2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50
KFdlYktpdDo6V2ViTW91c2VFdmVudCBldmVudCkgLT4gKGJvb2wgcmVzdWx0KQogICAgIEFjY2Vw
dHNGaXJzdE1vdXNlKGludCBldmVudE51bWJlciwgV2ViS2l0OjpXZWJNb3VzZUV2ZW50IGV2ZW50
KSAtPiAoYm9vbCByZXN1bHQpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDg0MDU3KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5V2Vi
UGFnZU9iamVjdC5oIgogI2ltcG9ydCAiQXR0cmlidXRlZFN0cmluZy5oIgogI2ltcG9ydCAiRGF0
YVJlZmVyZW5jZS5oIgorI2ltcG9ydCAiRWRpdG9yU3RhdGUuaCIKICNpbXBvcnQgIlBsdWdpblZp
ZXcuaCIKLSNpbXBvcnQgIlRleHRJbnB1dFN0YXRlLmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKICNpbXBvcnQgIldlYkV2ZW50LmgiCiAjaW1wb3J0ICJXZWJFdmVudENvbnZl
cnNpb24uaCIKQEAgLTExOCwxNCArMTE4LDYgQEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZv
clNlbGVjdG9yTmFtZQogICAgIHJldHVybiBzZWxlY3Rvck5hbWUubGVmdChzZWxlY3Rvck5hbWVM
ZW5ndGggLSAxKTsKIH0KIAotc3RhdGljIFRleHRJbnB1dFN0YXRlIGN1cnJlbnRUZXh0SW5wdXRT
dGF0ZShGcmFtZSogZnJhbWUpCi17Ci0gICAgVGV4dElucHV0U3RhdGUgc3RhdGU7Ci0gICAgc3Rh
dGUuaGFzTWFya2VkVGV4dCA9IGZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsKLSAg
ICBzdGF0ZS5zZWxlY3Rpb25Jc0VkaXRhYmxlID0gIWZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25l
KCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotICAgIHJldHVy
biBzdGF0ZTsKLX0KLQogc3RhdGljIEZyYW1lKiBmcmFtZUZvckV2ZW50KEtleWJvYXJkRXZlbnQq
IGV2ZW50KQogewogICAgIE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwpA
QCAtMTkwLDcgKzE4Miw3IEBAIGJvb2wgV2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZl
bnQKICAgICBpZiAoc2F2ZUNvbW1hbmRzKSB7CiAgICAgICAgIEtleWJvYXJkRXZlbnQqIG9sZEV2
ZW50ID0gbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZDsKICAgICAgICAgbV9rZXlib2Fy
ZEV2ZW50QmVpbmdJbnRlcnByZXRlZCA9IGV2ZW50OwotICAgICAgICBib29sIHNlbmRSZXN1bHQg
PSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkludGVycHJldFF1ZXVlZEtleUV2ZW50KGN1cnJlbnRUZXh0SW5wdXRTdGF0
ZShmcmFtZSkpLCAKKyAgICAgICAgYm9vbCBzZW5kUmVzdWx0ID0gV2ViUHJvY2Vzczo6c2hhcmVk
KCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnRlcnBy
ZXRRdWV1ZWRLZXlFdmVudChlZGl0b3JTdGF0ZSgpKSwgCiAgICAgICAgICAgICBNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpJbnRlcnByZXRRdWV1ZWRLZXlFdmVudDo6UmVwbHkoZXZlbnRXYXNIYW5k
bGVkLCBjb21tYW5kcyksIG1fcGFnZUlEKTsKICAgICAgICAgbV9rZXlib2FyZEV2ZW50QmVpbmdJ
bnRlcnByZXRlZCA9IG9sZEV2ZW50OwogICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCkBAIC0yMjks
NyArMjIxLDcgQEAgdm9pZCBXZWJQYWdlOjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1ZwogICAg
IH0KIH0KIAotdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQs
IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0
aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5n
ZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBUZXh0SW5wdXRTdGF0ZSYgbmV3
U3RhdGUpCit2b2lkIFdlYlBhZ2U6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwg
VmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rp
b25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdl
U3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQsIEVkaXRvclN0YXRlJiBuZXdTdGF0
ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKIApAQCAtMjQzLDE5ICsyMzUsMTkgQEAgdm9pZCBXZWJQYWdlOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbgogICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnNldENv
bXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQp
OwogICAgIH0KIAotICAgIG5ld1N0YXRlID0gY3VycmVudFRleHRJbnB1dFN0YXRlKGZyYW1lKTsK
KyAgICBuZXdTdGF0ZSA9IGVkaXRvclN0YXRlKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6Y29uZmly
bUNvbXBvc2l0aW9uKFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSkKK3ZvaWQgV2ViUGFnZTo6Y29u
ZmlybUNvbXBvc2l0aW9uKEVkaXRvclN0YXRlJiBuZXdTdGF0ZSkKIHsKICAgICBGcmFtZSogZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAog
ICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uKCk7CiAKLSAgICBuZXdTdGF0
ZSA9IGN1cnJlbnRUZXh0SW5wdXRTdGF0ZShmcmFtZSk7CisgICAgbmV3U3RhdGUgPSBlZGl0b3JT
dGF0ZSgpOwogfQogCi12b2lkIFdlYlBhZ2U6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFu
Z2VFbmQsIGJvb2wmIGhhbmRsZWQsIFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSkKK3ZvaWQgV2Vi
UGFnZTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50
UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgYm9vbCYgaGFuZGxlZCwg
RWRpdG9yU3RhdGUmIG5ld1N0YXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogCkBAIC0yNzQsNyArMjY2LDcg
QEAgdm9pZCBXZWJQYWdlOjppbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdAogICAgICAgICBmcmFt
ZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbih0ZXh0KTsKICAgICB9CiAKLSAgICBuZXdT
dGF0ZSA9IGN1cnJlbnRUZXh0SW5wdXRTdGF0ZShmcmFtZSk7CisgICAgbmV3U3RhdGUgPSBlZGl0
b3JTdGF0ZSgpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBs
b2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkKQEAgLTM5MywxMyArMzg1LDEwIEBAIHZvaWQgV2Vi
UGFnZTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UKICAgICByZXN1bHRSZWN0ID0gZnJhbWUt
PnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpleGVj
dXRlS2V5cHJlc3NDb21tYW5kcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
PiYgY29tbWFuZHMsIGJvb2wmIGhhbmRsZWQsIFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSkKK3Zv
aWQgV2ViUGFnZTo6ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzLCBib29sJiBoYW5kbGVkLCBFZGl0b3JTdGF0ZSYg
bmV3U3RhdGUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0KICAgICBoYW5kbGVkID0gZXhlY3V0ZUtleXByZXNz
Q29tbWFuZHNJbnRlcm5hbChjb21tYW5kcywgbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRl
ZCk7Ci0KLSAgICBuZXdTdGF0ZSA9IGN1cnJlbnRUZXh0SW5wdXRTdGF0ZShmcmFtZSk7CisgICAg
bmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwogfQogCiBzdGF0aWMgYm9vbCBpc1Bvc2l0aW9uSW5S
YW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBSYW5nZSogcmFuZ2UpCkBAIC01
OTUsNiArNTg0LDExIEBAIHZvaWQgV2ViUGFnZTo6cmVnaXN0ZXJVSVByb2Nlc3NBY2Nlc3NpYmkK
ICNlbmRpZgogfQogCit2b2lkIFdlYlBhZ2U6OmdldEVkaXRvclN0YXRlKEVkaXRvclN0YXRlJiBj
dXJyZW50U3RhdGUpCit7CisgICAgY3VycmVudFN0YXRlID0gZWRpdG9yU3RhdGUoKTsKK30KKwog
dm9pZCBXZWJQYWdlOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBib29s
JiByZXN1bHQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0
Mi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9q
CShyZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtNDMxLDYgKzQzMSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxTaGFyZWRcRWRpdG9yU3RhdGUuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cU2hhcmVkXEZvbnRJ
bmZvLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC01MjcsMTAgKzUzMSw2IEBACiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxTZWxlY3Rp
b25TdGF0ZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxTaGFyZWRcU2Vzc2lvblN0YXRlLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90251</attachid>
            <date>2011-04-19 14:13:50 -0700</date>
            <delta_ts>2011-04-19 14:20:46 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>RightClickInInspector.txt</filename>
            <type>text/plain</type>
            <size>2232</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MjkxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDQtMTkgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgMTAwJSByZXByb2R1Y2libGUgY3Jhc2ggd2hlbiByaWdodC1j
bGlja2luZyBhbnkgZWxlbWVudCBpbiBXZWIgSW5zcGVjdG9yIG9uIGFueSBwYWdlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgyMgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3IgY2hhbmdlcyBzZWxlY3Rpb24gZnJvbSBKYXZhU2NyaXB0LCBhbmQgY2hl
Y2tzIGluIFVJIHByb2Nlc3MgYXJlIGluc3VmZmljaWVudAorICAgICAgICB3aGVuIHNlbGVjdGlv
biBpcyBjaGFuZ2luZyBhc3luY2hyb25vdXNseS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6d3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBDaGVjayB0aGF0IHRoZXJlIGlzIGEgc2VsZWN0aW9uLCBt
YXRjaGluZyBXSzEKKyAgICAgICAgYW5kIFVJIHByb2Nlc3Mgc2lkZS4gUGVyaGFwcyB0aGUgY2hl
Y2sgc2hvdWxkIHJlYWxseSBiZSBpbiBXZWJDb3JlLCBidXQgZm9yIG5vdywgaXQncyBhCisgICAg
ICAgIFdlYktpdCByZXNwb25zaWJpbGl0eS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVh
ZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKTogU2FtZSBjaGVjaywgZm9yIG5vIG90aGVyIHJlYXNv
biBidXQgY29uc2lzdGVuY3kuCisKIDIwMTEtMDQtMTkgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVy
c2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292
LgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQkocmV2aXNpb24gODQxODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU5OCw2ICs1
OTgsMTAgQEAgdm9pZCBXZWJQYWdlOjpyZWdpc3RlclVJUHJvY2Vzc0FjY2Vzc2liaQogdm9pZCBX
ZWJQYWdlOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBib29sJiByZXN1
bHQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9j
dXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCBmcmFtZS0+c2VsZWN0aW9uKCkt
PmlzTm9uZSgpKSB7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICByZXR1cm47Cisg
ICAgfQogICAgIGZyYW1lLT5lZGl0b3IoKS0+d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlcyk7CiAgICAgcmVzdWx0ID0gdHJ1ZTsKIH0KQEAg
LTYwNSw2ICs2MDksMTAgQEAgdm9pZCBXZWJQYWdlOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZAogdm9pZCBXZWJQYWdlOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgYm9vbCYgcmVzdWx0KQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICgh
ZnJhbWUgfHwgZnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSkgeworICAgICAgICByZXN1bHQg
PSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBmcmFtZS0+ZWRpdG9yKCktPnJl
YWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CiAgICAgcmVzdWx0ID0g
dHJ1ZTsKIH0K
</data>
<flag name="review"
          id="82984"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>