<?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>58919</bug_id>
          
          <creation_ts>2011-04-19 12:45:55 -0700</creation_ts>
          <short_desc>WebKit2: Merge SelectionState and TextInputState</short_desc>
          <delta_ts>2011-04-19 15:54:13 -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>HTML Editing</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></keywords>
          <priority>P2</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>enrica</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>388713</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-19 12:45:55 -0700</bug_when>
    <thetext>These are almost the same. SelectionState is only updated asynchronously, while TextInputState is updated synchronously, and is only valid while a key event is being processed.

That&apos;s confusing. We can always keep the latest known state in the one place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388719</commentid>
    <comment_count>1</comment_count>
      <attachid>90239</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-19 12:50:25 -0700</bug_when>
    <thetext>Created attachment 90239
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388753</commentid>
    <comment_count>2</comment_count>
      <attachid>90239</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-04-19 13:41:52 -0700</bug_when>
    <thetext>Comment on attachment 90239
proposed patch

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

The patch looks good to me. I like the way the code gets simplified. I don&apos;t understand why EditorState.h appears twice looking at the review, but it is probably a bug in the review tool. The only comment I have is the copyright year.
Also, it appears there are problems in applying the patch for the qt build.

&gt; Source/WebKit2/Shared/EditorState.h:3
&gt; + *

Copyright 2011.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388865</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-19 15:54:13 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/84304&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90239</attachid>
            <date>2011-04-19 12:50:25 -0700</date>
            <delta_ts>2011-04-19 15:19:06 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>EditorState.txt</filename>
            <type>text/plain</type>
            <size>68485</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MjgzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMDQtMTkgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0MjogTWVyZ2UgU2VsZWN0aW9uU3RhdGUgYW5kIFRl
eHRJbnB1dFN0YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01ODkxOQorCisgICAgICAgIENvbWJpbmVkIFRleHRJbnB1dFN0YXRlIGFuZCBFZGl0b3JT
dGF0ZSBpbiBvbmUgc3RydWN0dXJlLCB3aGljaCBpcyB1cGRhdGVkIHdoZW5ldmVyIHdlIGdldAor
ICAgICAgICBhIGNoYW5jZSB0by4gVGhlcmUgaXMgbm8gc2Vuc2UgdG8ga2VlcCBwb3NzaWJseSBz
dGFsZSBTZWxlY3Rpb25TdGF0ZSBkYXRhIHdoZW4gd2UgaGF2ZSBhbHJlYWR5CisgICAgICAgIHJl
cXVlc3RlZCB0aGUgbW9zdCByZWNlbnQgZGF0YSBzeW5jaHJvbm91c2x5LgorCisgICAgICAgIFRo
aXMgYWxzbyBzaW1wbGlmaWVzIHRoYXQgY29kZSwgYXMgd2UgZG9uJ3QgbmVlZCB0byBwYXNzIHRo
ZSBzdGF0ZSBhcm91bmQgaW4gYSBzZXBhcmF0ZSB2YXJpYWJsZS4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAg
ICAgKiBTaGFyZWQvRWRpdG9yU3RhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hh
cmVkL1NlbGVjdGlvblN0YXRlLmguCisgICAgICAgIChXZWJLaXQ6OkVkaXRvclN0YXRlOjpFZGl0
b3JTdGF0ZSk6CisgICAgICAgICogU2hhcmVkL1NlbGVjdGlvblN0YXRlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogU2hhcmVkL21hYy9UZXh0SW5wdXRTdGF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjppbnRlcnByZXRLZXlFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3Lm1tOgorICAgICAgICAoLVtXS1ZpZXcgdmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTpyZXR1
cm5UeXBlOl0pOgorICAgICAgICAoLVtXS1ZpZXcgdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTpd
KToKKyAgICAgICAgKC1bV0tWaWV3IHNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDpd
KToKKyAgICAgICAgKC1bV0tWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6XSk6CisgICAgICAgICgt
W1dLVmlldyBpbnNlcnRUZXh0OnJlcGxhY2VtZW50UmFuZ2U6XSk6CisgICAgICAgICgtW1dLVmll
dyBfaGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX2V4ZWN1
dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdKToKKyAgICAgICAgKC1bV0tWaWV3IGlucHV0Q29udGV4
dF0pOgorICAgICAgICAoLVtXS1ZpZXcgaGFzTWFya2VkVGV4dF0pOgorICAgICAgICAoLVtXS1Zp
ZXcgdW5tYXJrVGV4dF0pOgorICAgICAgICAoLVtXS1ZpZXcgc2V0TWFya2VkVGV4dDpzZWxlY3Rl
ZFJhbmdlOnJlcGxhY2VtZW50UmFuZ2U6XSk6CisgICAgICAgICgtW1dLVmlldyBhdHRyaWJ1dGVk
U3Vic3RyaW5nRm9yUHJvcG9zZWRSYW5nZTphY3R1YWxSYW5nZTpdKToKKyAgICAgICAgKC1bV0tW
aWV3IF9pbnRlcnByZXRLZXlFdmVudDpzYXZpbmdDb21tYW5kc1RvOldlYkNvcmU6Ol0pOgorICAg
ICAgICAoLVtXS1ZpZXcgX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGVdKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdl
Q2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZWRpdG9yU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
ZWRpdG9yU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omhhc1NlbGVjdGVk
UmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmlzQ29udGVudEVkaXRhYmxl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojpjb25maXJtQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
Omluc2VydFRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmV4ZWN1dGVLZXlw
cmVzc0NvbW1hbmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVhZFNl
bGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpp
bnRlcnByZXRRdWV1ZWRLZXlFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29tcG9zaXRpb25TZWxlY3Rpb25DaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25JTUVDb21wb3NpdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uSU1FRW5kQ29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpvbklNRVJlcXVlc3RDaGFyUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpvbklNRVJlcXVlc3QpOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjplZGl0b3JTdGF0ZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZUVkaXRp
bmdLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Q29tcG9zaXRp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMpOgorICAgICAgICAqIHdpbi9XZWJLaXQyLnZj
cHJvajoKKwogMjAxMS0wNC0xOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQko
d29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSw3IEBAIGxpYldlYktpdDJfbGFfU09VUkNFUyA9
IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVz
c2FnZUtpbmRzLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQ
cm9jZXNzUHJveHlNZXNzYWdlS2luZHMuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0RyYXdp
bmdBcmVhSW5mby5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaCBcCiAJ
U291cmNlL1dlYktpdDIvU2hhcmVkL0ZvbnRTbW9vdGhpbmdMZXZlbC5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL1NoYXJlYWJsZUJpdG1hcEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAgXApAQCAtMjMzLDcgKzIz
NCw2IEBAIGxpYldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
U2FuZGJveEV4dGVuc2lvbi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2VjdXJpdHlPcmln
aW5EYXRhLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuY3Bw
IFwKLQlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2VsZWN0aW9uU3RhdGUuaCBcCiAJU291cmNlL1dl
YktpdDIvU2hhcmVkL1Nlc3Npb25TdGF0ZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9T
ZXNzaW9uU3RhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL1N0cmluZ1BhaXJWZWN0b3Iu
aCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CShy
ZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdl
cy5weQkod29ya2luZyBjb3B5KQpAQCAtMjczLDEzICsyNzMsMTIgQEAgZGVmIHN0cnVjdF9vcl9j
bGFzcyhuYW1lc3BhY2UsIHR5cGUpOgogICAgICAgICAnV2ViS2l0OjpDb250ZXh0TWVudVN0YXRl
JywKICAgICAgICAgJ1dlYktpdDo6RGljdGlvbmFyeVBvcHVwSW5mbycsCiAgICAgICAgICdXZWJL
aXQ6OkRyYXdpbmdBcmVhSW5mbycsCisgICAgICAgICdXZWJLaXQ6OkVkaXRvclN0YXRlJywKICAg
ICAgICAgJ1dlYktpdDo6UGxhdGZvcm1Qb3B1cE1lbnVEYXRhJywKICAgICAgICAgJ1dlYktpdDo6
UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycycsCiAgICAgICAgICdXZWJLaXQ6OlByaW50
SW5mbycsCiAgICAgICAgICdXZWJLaXQ6OlNlY3VyaXR5T3JpZ2luRGF0YScsCi0gICAgICAgICdX
ZWJLaXQ6OlNlbGVjdGlvblN0YXRlJywKICAgICAgICAgJ1dlYktpdDo6VGV4dENoZWNrZXJTdGF0
ZScsCi0gICAgICAgICdXZWJLaXQ6OlRleHRJbnB1dFN0YXRlJywKICAgICAgICAgJ1dlYktpdDo6
V2ViTmF2aWdhdGlvbkRhdGFTdG9yZScsCiAgICAgICAgICdXZWJLaXQ6OldlYk9wZW5QYW5lbFBh
cmFtZXRlcnM6OkRhdGEnLAogICAgICAgICAnV2ViS2l0OjpXZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5oCShyZXZpc2lvbiA4NDA1
NykJKGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL1NlbGVjdGlvblN0YXRlLmg6ODQwNTcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTZWxlY3Rpb25TdGF0ZV9oCisjZGVm
aW5lIFNlbGVjdGlvblN0YXRlX2gKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5j
bHVkZSA8d3RmL05vdEZvdW5kLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgU2Vs
ZWN0aW9uU3RhdGUgeworICAgIFNlbGVjdGlvblN0YXRlKCkKKyAgICAgICAgOiBpc05vbmUodHJ1
ZSkKKyAgICAgICAgLCBpc0NvbnRlbnRFZGl0YWJsZShmYWxzZSkKKyAgICAgICAgLCBpc0NvbnRl
bnRSaWNobHlFZGl0YWJsZShmYWxzZSkKKyAgICAgICAgLCBpc0luUGFzc3dvcmRGaWVsZChmYWxz
ZSkKKyAgICAgICAgLCBoYXNDb21wb3NpdGlvbihmYWxzZSkKKyAgICAgICAgLCBzZWxlY3RlZFJh
bmdlU3RhcnQobm90Rm91bmQpCisgICAgICAgICwgc2VsZWN0ZWRSYW5nZUxlbmd0aCgwKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBXaGV0aGVyIHRoZXJlIGlzIGEgc2VsZWN0aW9uIGF0IGFsbC4g
VGhpcyB3aWxsIGJlIGZhbHNlIHdoZW4gdGhlcmUgaXMgYSBjYXJldCBzZWxlY3Rpb24uCisgICAg
Ym9vbCBpc05vbmU7CisKKyAgICAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgaW4gYSBjb250
ZW50IGVkaXRhYmxlIGFyZWEuCisgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKKyAgICAKKyAg
ICAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgaW4gYSByaWNoIGNvbnRlbnQgZWRpdGFibGUg
YXJlYS4KKyAgICBib29sIGlzQ29udGVudFJpY2hseUVkaXRhYmxlOworCisgICAgLy8gV2hldGhl
ciB0aGUgc2VsZWN0aW9uIGlzIGluIGEgcGFzc3dvcmQgZmllbGQuCisgICAgYm9vbCBpc0luUGFz
c3dvcmRGaWVsZDsKKworICAgIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBoYXMgYSBjb21wb3Np
dGlvbi4KKyAgICBib29sIGhhc0NvbXBvc2l0aW9uOworCisgICAgLy8gVGhlIHN0YXJ0IG9mIHRo
ZSBzZWxlY3RlZCByYW5nZS4KKyAgICB1aW50NjRfdCBzZWxlY3RlZFJhbmdlU3RhcnQ7CisgICAg
CisgICAgLy8gVGhlIGxlbmd0aCBvZiB0aGUgc2VsZWN0ZWQgcmFuZ2UuCisgICAgdWludDY0X3Qg
c2VsZWN0ZWRSYW5nZUxlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCituYW1l
c3BhY2UgQ29yZUlQQyB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYktpdDo6
U2VsZWN0aW9uU3RhdGU+IDogU2ltcGxlQXJndW1lbnRDb2RlcjxXZWJLaXQ6OlNlbGVjdGlvblN0
YXRlPiB7IH07Cit9OworCisjZW5kaWYgLy8gU2VsZWN0aW9uU3RhdGVfaApJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0VkaXRvclN0YXRlLmgJKHJldmlzaW9uIDg0MDU3KQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL0VkaXRvclN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDUyICsyMywzNyBAQAog
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU2VsZWN0
aW9uU3RhdGVfaAotI2RlZmluZSBTZWxlY3Rpb25TdGF0ZV9oCisjaWZuZGVmIEVkaXRvclN0YXRl
X2gKKyNkZWZpbmUgRWRpdG9yU3RhdGVfaAogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIK
ICNpbmNsdWRlIDx3dGYvTm90Rm91bmQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0cnVj
dCBTZWxlY3Rpb25TdGF0ZSB7Ci0gICAgU2VsZWN0aW9uU3RhdGUoKQotICAgICAgICA6IGlzTm9u
ZSh0cnVlKQorc3RydWN0IEVkaXRvclN0YXRlIHsKKyAgICBFZGl0b3JTdGF0ZSgpCisgICAgICAg
IDogc2VsZWN0aW9uSXNOb25lKHRydWUpCisgICAgICAgICwgc2VsZWN0aW9uSXNSYW5nZShmYWxz
ZSkKICAgICAgICAgLCBpc0NvbnRlbnRFZGl0YWJsZShmYWxzZSkKICAgICAgICAgLCBpc0NvbnRl
bnRSaWNobHlFZGl0YWJsZShmYWxzZSkKICAgICAgICAgLCBpc0luUGFzc3dvcmRGaWVsZChmYWxz
ZSkKICAgICAgICAgLCBoYXNDb21wb3NpdGlvbihmYWxzZSkKLSAgICAgICAgLCBzZWxlY3RlZFJh
bmdlU3RhcnQobm90Rm91bmQpCi0gICAgICAgICwgc2VsZWN0ZWRSYW5nZUxlbmd0aCgwKQogICAg
IHsKICAgICB9CiAKLSAgICAvLyBXaGV0aGVyIHRoZXJlIGlzIGEgc2VsZWN0aW9uIGF0IGFsbC4g
VGhpcyB3aWxsIGJlIGZhbHNlIHdoZW4gdGhlcmUgaXMgYSBjYXJldCBzZWxlY3Rpb24uCi0gICAg
Ym9vbCBpc05vbmU7Ci0KLSAgICAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgaW4gYSBjb250
ZW50IGVkaXRhYmxlIGFyZWEuCisgICAgYm9vbCBzZWxlY3Rpb25Jc05vbmU7IC8vIFRoaXMgd2ls
bCBiZSBmYWxzZSB3aGVuIHRoZXJlIGlzIGEgY2FyZXQgc2VsZWN0aW9uLgorICAgIGJvb2wgc2Vs
ZWN0aW9uSXNSYW5nZTsKICAgICBib29sIGlzQ29udGVudEVkaXRhYmxlOwotICAgIAotICAgIC8v
IFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBpcyBpbiBhIHJpY2ggY29udGVudCBlZGl0YWJsZSBhcmVh
LgogICAgIGJvb2wgaXNDb250ZW50UmljaGx5RWRpdGFibGU7Ci0KLSAgICAvLyBXaGV0aGVyIHRo
ZSBzZWxlY3Rpb24gaXMgaW4gYSBwYXNzd29yZCBmaWVsZC4KICAgICBib29sIGlzSW5QYXNzd29y
ZEZpZWxkOwotCi0gICAgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIGhhcyBhIGNvbXBvc2l0aW9u
LgogICAgIGJvb2wgaGFzQ29tcG9zaXRpb247Ci0KLSAgICAvLyBUaGUgc3RhcnQgb2YgdGhlIHNl
bGVjdGVkIHJhbmdlLgotICAgIHVpbnQ2NF90IHNlbGVjdGVkUmFuZ2VTdGFydDsKLSAgICAKLSAg
ICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBzZWxlY3RlZCByYW5nZS4KLSAgICB1aW50NjRfdCBzZWxl
Y3RlZFJhbmdlTGVuZ3RoOwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9CiAKIG5hbWVz
cGFjZSBDb3JlSVBDIHsKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViS2l0OjpT
ZWxlY3Rpb25TdGF0ZT4gOiBTaW1wbGVBcmd1bWVudENvZGVyPFdlYktpdDo6U2VsZWN0aW9uU3Rh
dGU+IHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViS2l0OjpFZGl0b3JT
dGF0ZT4gOiBTaW1wbGVBcmd1bWVudENvZGVyPFdlYktpdDo6RWRpdG9yU3RhdGU+IHsgfTsKIH07
CiAKLSNlbmRpZiAvLyBTZWxlY3Rpb25TdGF0ZV9oCisjZW5kaWYgLy8gRWRpdG9yU3RhdGVfaApJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1NlbGVjdGlvblN0YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1NlbGVjdGlvblN0YXRlLmgJKHJldmlzaW9uIDg0MDU3
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1NlbGVjdGlvblN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2VsZWN0aW9uU3RhdGVf
aAotI2RlZmluZSBTZWxlY3Rpb25TdGF0ZV9oCi0KLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5o
IgotI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3Ry
dWN0IFNlbGVjdGlvblN0YXRlIHsKLSAgICBTZWxlY3Rpb25TdGF0ZSgpCi0gICAgICAgIDogaXNO
b25lKHRydWUpCi0gICAgICAgICwgaXNDb250ZW50RWRpdGFibGUoZmFsc2UpCi0gICAgICAgICwg
aXNDb250ZW50UmljaGx5RWRpdGFibGUoZmFsc2UpCi0gICAgICAgICwgaXNJblBhc3N3b3JkRmll
bGQoZmFsc2UpCi0gICAgICAgICwgaGFzQ29tcG9zaXRpb24oZmFsc2UpCi0gICAgICAgICwgc2Vs
ZWN0ZWRSYW5nZVN0YXJ0KG5vdEZvdW5kKQotICAgICAgICAsIHNlbGVjdGVkUmFuZ2VMZW5ndGgo
MCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gV2hldGhlciB0aGVyZSBpcyBhIHNlbGVjdGlvbiBh
dCBhbGwuIFRoaXMgd2lsbCBiZSBmYWxzZSB3aGVuIHRoZXJlIGlzIGEgY2FyZXQgc2VsZWN0aW9u
LgotICAgIGJvb2wgaXNOb25lOwotCi0gICAgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGlu
IGEgY29udGVudCBlZGl0YWJsZSBhcmVhLgotICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGU7Ci0g
ICAgCi0gICAgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGluIGEgcmljaCBjb250ZW50IGVk
aXRhYmxlIGFyZWEuCi0gICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZTsKLQotICAgIC8v
IFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBpcyBpbiBhIHBhc3N3b3JkIGZpZWxkLgotICAgIGJvb2wg
aXNJblBhc3N3b3JkRmllbGQ7Ci0KLSAgICAvLyBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gaGFzIGEg
Y29tcG9zaXRpb24uCi0gICAgYm9vbCBoYXNDb21wb3NpdGlvbjsKLQotICAgIC8vIFRoZSBzdGFy
dCBvZiB0aGUgc2VsZWN0ZWQgcmFuZ2UuCi0gICAgdWludDY0X3Qgc2VsZWN0ZWRSYW5nZVN0YXJ0
OwotICAgIAotICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIHNlbGVjdGVkIHJhbmdlLgotICAgIHVp
bnQ2NF90IHNlbGVjdGVkUmFuZ2VMZW5ndGg7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotbmFtZXNwYWNlIENvcmVJUEMgewotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJLaXQ6OlNlbGVjdGlvblN0YXRlPiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViS2l0OjpTZWxl
Y3Rpb25TdGF0ZT4geyB9OwotfTsKLQotI2VuZGlmIC8vIFNlbGVjdGlvblN0YXRlX2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvVGV4dElucHV0U3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1RleHRJbnB1dFN0YXRlLmgJKHJldmlzaW9uIDg0
MDU3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9UZXh0SW5wdXRTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRleHRJbnB1
dFN0YXRlX2gKLSNkZWZpbmUgVGV4dElucHV0U3RhdGVfaAotCi0jaW5jbHVkZSAiQXJndW1lbnRD
b2RlcnMuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVjdCBUZXh0SW5wdXRTdGF0ZSB7
Ci0gICAgYm9vbCBoYXNNYXJrZWRUZXh0OwotICAgIGJvb2wgc2VsZWN0aW9uSXNFZGl0YWJsZTsK
LX07Ci0KLX0KLQotbmFtZXNwYWNlIENvcmVJUEMgewotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJLaXQ6OlRleHRJbnB1dFN0YXRlPiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8V2Vi
S2l0OjpUZXh0SW5wdXRTdGF0ZT4geyB9OwotfQotCi0jZW5kaWYgLy8gVGV4dElucHV0U3RhdGVf
aApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiA4NDA1
NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVV
bmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pID0gMDsKICNpZiBQTEFURk9STShNQUMp
CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW5SZWNlaXZlZChj
b25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpbnRl
cnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgY29uc3QgVGV4dElu
cHV0U3RhdGUmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dCYsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JikgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBleGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9y
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgY2xpZW50UG9zaXRpb24sIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1h
Z2UsIGJvb2wgaXNMaW5rRHJhZykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTZWN1cmVJ
bnB1dFN0YXRlKCkgPSAwOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAJKHJldmlzaW9uIDg0MDU3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNDAsMTcgKzIxNDAsMTcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkRm9yd2FyZExpcwogICAgIGNvdW50ID0gbV9iYWNr
Rm9yd2FyZExpc3QtPmZvcndhcmRMaXN0Q291bnQoKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6
OnNlbGVjdGlvblN0YXRlQ2hhbmdlZChjb25zdCBTZWxlY3Rpb25TdGF0ZSYgc2VsZWN0aW9uU3Rh
dGUpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZWRpdG9yU3RhdGVDaGFuZ2VkKGNvbnN0IEVkaXRvclN0
YXRlJiBlZGl0b3JTdGF0ZSkKIHsKICNpZiBQTEFURk9STShNQUMpCi0gICAgYm9vbCBjb3VsZENo
YW5nZVNlY3VyZUlucHV0U3RhdGUgPSBtX3NlbGVjdGlvblN0YXRlLmlzSW5QYXNzd29yZEZpZWxk
ICE9IHNlbGVjdGlvblN0YXRlLmlzSW5QYXNzd29yZEZpZWxkIHx8IG1fc2VsZWN0aW9uU3RhdGUu
aXNOb25lOworICAgIGJvb2wgY291bGRDaGFuZ2VTZWN1cmVJbnB1dFN0YXRlID0gbV9lZGl0b3JT
dGF0ZS5pc0luUGFzc3dvcmRGaWVsZCAhPSBlZGl0b3JTdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCB8
fCBtX2VkaXRvclN0YXRlLnNlbGVjdGlvbklzTm9uZTsKICNlbmRpZgogCi0gICAgbV9zZWxlY3Rp
b25TdGF0ZSA9IHNlbGVjdGlvblN0YXRlOworICAgIG1fZWRpdG9yU3RhdGUgPSBlZGl0b3JTdGF0
ZTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0YXRl
LiBGbGlwcGluZyBzZWN1cmUgaW5wdXQgc3RhdGUgdG9vIHF1aWNrbHkgY2FuIGV4cG9zZSByYWNl
IGNvbmRpdGlvbnMuCi0gICAgaWYgKHNlbGVjdGlvblN0YXRlLmlzTm9uZSkKKyAgICBpZiAoZWRp
dG9yU3RhdGUuc2VsZWN0aW9uSXNOb25lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoY291
bGRDaGFuZ2VTZWN1cmVJbnB1dFN0YXRlKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAkocmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDkgQEAKICNpbmNs
dWRlICJDb250ZXh0TWVudVN0YXRlLmgiCiAjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXJBY3Rpb24u
aCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiRWRpdG9yU3RhdGUu
aCIKICNpbmNsdWRlICJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Lmgi
CiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgotI2luY2x1ZGUgIlNlbGVjdGlvblN0YXRl
LmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV0tCYXNlLmgiCiAjaW5j
bHVkZSAiV0tQYWdlUHJpdmF0ZS5oIgpAQCAtOTcsOSArOTcsOSBAQCBjbGFzcyBXZWJVUkxSZXF1
ZXN0OwogY2xhc3MgV2ViV2hlZWxFdmVudDsKIHN0cnVjdCBBdHRyaWJ1dGVkU3RyaW5nOwogc3Ry
dWN0IERpY3Rpb25hcnlQb3B1cEluZm87CitzdHJ1Y3QgRWRpdG9yU3RhdGU7CiBzdHJ1Y3QgUGxh
dGZvcm1Qb3B1cE1lbnVEYXRhOwogc3RydWN0IFByaW50SW5mbzsKLXN0cnVjdCBUZXh0SW5wdXRT
dGF0ZTsKIHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFdlYlBvcHVw
SXRlbTsKIApAQCAtMjQ3LDI0ICsyNDcsMjQgQEAgcHVibGljOgogICAgIHZvaWQgZXhlY3V0ZUVk
aXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpOwogICAgIHZvaWQgdmFsaWRhdGVD
b21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIFBhc3NSZWZQdHI8VmFsaWRhdGVDb21t
YW5kQ2FsbGJhY2s+KTsKIAotICAgIGNvbnN0IFNlbGVjdGlvblN0YXRlJiBzZWxlY3Rpb25TdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhdGU7IH0KKyAgICBjb25zdCBFZGl0b3JT
dGF0ZSYgZWRpdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2VkaXRvclN0YXRlOyB9CiAgICAg
Ym9vbCBjYW5EZWxldGUoKSBjb25zdCB7IHJldHVybiBoYXNTZWxlY3RlZFJhbmdlKCkgJiYgaXND
b250ZW50RWRpdGFibGUoKTsgfQotICAgIGJvb2wgaGFzU2VsZWN0ZWRSYW5nZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZUxlbmd0aDsgfQotICAgIGJvb2wg
aXNDb250ZW50RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXRlLmlzQ29u
dGVudEVkaXRhYmxlOyB9CisgICAgYm9vbCBoYXNTZWxlY3RlZFJhbmdlKCkgY29uc3QgeyByZXR1
cm4gbV9lZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1JhbmdlOyB9CisgICAgYm9vbCBpc0NvbnRlbnRF
ZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9yU3RhdGUuaXNDb250ZW50RWRpdGFibGU7
IH0KIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHVwZGF0ZVdpbmRvd0lzVmlzaWJsZShi
b29sIHdpbmRvd0lzVmlzaWJsZSk7CiAgICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdl
ZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKTsKIAot
ICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29y
ZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0
YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFy
dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgVGV4dElucHV0U3RhdGUmIG5ld1N0YXRl
KTsKLSAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUp
OwotICAgIGJvb2wgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxh
Y2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgVGV4dElucHV0
U3RhdGUmIG5ld1N0YXRlKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYg
dGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1
aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCBy
ZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpOworICAg
IHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKCk7CisgICAgYm9vbCBpbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBs
YWNlbWVudFJhbmdlRW5kKTsKICAgICB2b2lkIGdldE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBsb2Nh
dGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CiAgICAgdm9pZCBnZXRTZWxlY3RlZFJhbmdlKHVpbnQ2
NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CiAgICAgdm9pZCBnZXRBdHRyaWJ1dGVk
U3Vic3RyaW5nRnJvbVJhbmdlKHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgsIEF0
dHJpYnV0ZWRTdHJpbmcmKTsKICAgICB1aW50NjRfdCBjaGFyYWN0ZXJJbmRleEZvclBvaW50KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50KTsKICAgICBXZWJDb3JlOjpJbnRSZWN0IGZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlKHVpbnQ2NF90LCB1aW50NjRfdCk7Ci0gICAgYm9vbCBleGVjdXRlS2V5
cHJlc3NDb21tYW5kcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYsIFRl
eHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSk7CisgICAgYm9vbCBleGVjdXRlS2V5cHJlc3NDb21tYW5k
cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpOwogCiAgICAgdm9pZCBz
ZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7CiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRhaW5pbmdXaW5kb3dHcmFwaGljc0NvbnRleHQoKTsKQEAgLTU4OSw4ICs1ODksNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7CiAjZW5kaWYKIAotICAgIC8vIFNlbGVjdGlvbgotICAgIHZvaWQgc2VsZWN0aW9uU3Rh
dGVDaGFuZ2VkKGNvbnN0IFNlbGVjdGlvblN0YXRlJik7CisgICAgdm9pZCBlZGl0b3JTdGF0ZUNo
YW5nZWQoY29uc3QgRWRpdG9yU3RhdGUmKTsKIAogICAgIC8vIEJhY2svRm9yd2FyZCBsaXN0IG1h
bmFnZW1lbnQKICAgICB2b2lkIGJhY2tGb3J3YXJkQWRkSXRlbSh1aW50NjRfdCBpdGVtSUQpOwpA
QCAtNjA4LDcgKzYwNyw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBLZXlib2FyZCBoYW5kbGluZwog
I2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIGludGVycHJldFF1ZXVlZEtleUV2ZW50KGNvbnN0
IFRleHRJbnB1dFN0YXRlJiwgYm9vbCYgaGFuZGxlZCwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNz
Q29tbWFuZD4mKTsKKyAgICB2b2lkIGludGVycHJldFF1ZXVlZEtleUV2ZW50KGNvbnN0IEVkaXRv
clN0YXRlJiwgYm9vbCYgaGFuZGxlZCwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4m
KTsKICAgICB2b2lkIGV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYg
c2VsZWN0b3IsIGJvb2wmIGhhbmRsZWQpOwogI2VuZGlmCiAKQEAgLTc2NCw3ICs3NjMsNyBAQCBw
cml2YXRlOgogCiAgICAgU3RyaW5nIG1fdG9vbFRpcDsKIAotICAgIFNlbGVjdGlvblN0YXRlIG1f
c2VsZWN0aW9uU3RhdGU7CisgICAgRWRpdG9yU3RhdGUgbV9lZGl0b3JTdGF0ZTsKIAogICAgIGRv
dWJsZSBtX3RleHRab29tRmFjdG9yOwogICAgIGRvdWJsZSBtX3BhZ2Vab29tRmFjdG9yOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCShyZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE0NSw5ICsxNDUsOSBAQCBtZXNz
YWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIENsZWFyQWxsRWRpdENvbW1hbmRzKCkKICAgICBD
YW5VbmRvUmVkbyh1aW50MzJfdCBhY3Rpb24pIC0+IChib29sIHJlc3VsdCkKICAgICBFeGVjdXRl
VW5kb1JlZG8odWludDMyX3QgYWN0aW9uKSAtPiAoYm9vbCByZXN1bHQpCi0gICAgCi0gICAgIyBT
ZWxlY3Rpb24gbWVzc2FnZXMKLSAgICBTZWxlY3Rpb25TdGF0ZUNoYW5nZWQoV2ViS2l0OjpTZWxl
Y3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSkKKworICAgICMgRWRpdG9yIG5vdGlmaWNhdGlvbnMK
KyAgICBFZGl0b3JTdGF0ZUNoYW5nZWQoV2ViS2l0OjpFZGl0b3JTdGF0ZSBlZGl0b3JTdGF0ZSkK
ICNpZiBQTEFURk9STShXSU4pCiAgICAgRGlkQ2hhbmdlQ29tcG9zaXRpb25TZWxlY3Rpb24oYm9v
bCBoYXNDaGFuZ2VkKQogI2VuZGlmCkBAIC0yMDUsNyArMjA1LDcgQEAgbWVzc2FnZXMgLT4gV2Vi
UGFnZVByb3h5IHsKICAgICBEaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChXVEY6OlN0cmluZyB0
ZXh0LCBXZWJLaXQ6OkRpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbykKIAog
ICAgICMgS2V5Ym9hcmQgaW5wdXQgc3VwcG9ydCBtZXNzYWdlcwotICAgIEludGVycHJldFF1ZXVl
ZEtleUV2ZW50KFdlYktpdDo6VGV4dElucHV0U3RhdGUgc3RhdGUpIC0+IChib29sIGhhbmRsZWQs
IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IHNhdmVkQ29tbWFuZHMpCisgICAgSW50
ZXJwcmV0UXVldWVkS2V5RXZlbnQoV2ViS2l0OjpFZGl0b3JTdGF0ZSBzdGF0ZSkgLT4gKGJvb2wg
aGFuZGxlZCwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4gc2F2ZWRDb21tYW5kcykK
ICAgICBFeGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcihXVEY6OlN0cmluZyBzZWxlY3Rvcikg
LT4gKGJvb2wgaGFuZGxlZCkKIAogICAgICMgUmVtb3RlIGFjY2Vzc2liaWxpdHkgbWVzc2FnZXMK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVu
dEltcGwuaAkocmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAgICAgdmly
dHVhbCBib29sIGNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CiAgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwotICAg
IHZpcnR1YWwgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50JiwgY29uc3QgVGV4dElucHV0U3RhdGUmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21t
YW5kPiYpOworICAgIHZpcnR1YWwgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50JiwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKTsKICAg
ICB2aXJ0dWFsIGJvb2wgZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5n
JiBzZWxlY3Rvcik7CiAgICAgdmlydHVhbCB2b2lkIHNldERyYWdJbWFnZShjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBk
cmFnSW1hZ2UsIGJvb2wgaXNMaW5rRHJhZyk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNlY3Vy
ZUlucHV0U3RhdGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1Bh
Z2VDbGllbnRJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTIsOSArMjkyLDkgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVVuZG9SZWRvKFdl
YgogICAgIHJldHVybiAodW5kb09yUmVkbyA9PSBXZWJQYWdlUHJveHk6OlVuZG8pID8gW1ttX3dr
VmlldyB1bmRvTWFuYWdlcl0gdW5kb10gOiBbW21fd2tWaWV3IHVuZG9NYW5hZ2VyXSByZWRvXTsK
IH0KIAotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQsIGNvbnN0IFRleHRJbnB1dFN0YXRlJiBzdGF0ZSwgVmVj
dG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzKQorYm9vbCBQYWdlQ2xpZW50
SW1wbDo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZl
bnQsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcykKIHsKLSAgICBy
ZXR1cm4gW21fd2tWaWV3IF9pbnRlcnByZXRLZXlFdmVudDpldmVudC5uYXRpdmVFdmVudCgpIHdp
dGhDYWNoZWRUZXh0SW5wdXRTdGF0ZTpzdGF0ZSBzYXZpbmdDb21tYW5kc1RvOmNvbW1hbmRzXTsK
KyAgICByZXR1cm4gW21fd2tWaWV3IF9pbnRlcnByZXRLZXlFdmVudDpldmVudC5uYXRpdmVFdmVu
dCgpIHNhdmluZ0NvbW1hbmRzVG86Y29tbWFuZHNdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBs
OjpzZXREcmFnSW1hZ2UoY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBQYXNzUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiA4NDA2MikK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVh
UHJveHkuaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkRyYXdpbmdBcmVh
UHJveHlJbXBsLmgiCisjaW1wb3J0ICJFZGl0b3JTdGF0ZS5oIgogI2ltcG9ydCAiRmluZEluZGlj
YXRvci5oIgogI2ltcG9ydCAiRmluZEluZGljYXRvcldpbmRvdy5oIgogI2ltcG9ydCAiTGF5ZXJU
cmVlQ29udGV4dC5oIgpAQCAtNDMsNyArNDQsNiBAQAogI2ltcG9ydCAiUnVuTG9vcC5oIgogI2lt
cG9ydCAiVGV4dENoZWNrZXIuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyU3RhdGUuaCIKLSNpbXBv
cnQgIlRleHRJbnB1dFN0YXRlLmgiCiAjaW1wb3J0ICJXS0FQSUNhc3QuaCIKICNpbXBvcnQgIldL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldLUHJpbnRpbmdWaWV3Lmgi
CkBAIC0xMDEsNyArMTAxLDYgQEAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmFsaWRhdGlvblZl
Y3RvcgogfQogCiBzdHJ1Y3QgV0tWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyB7Ci0g
ICAgVGV4dElucHV0U3RhdGUgY2FjaGVkVGV4dElucHV0U3RhdGU7CiAgICAgYm9vbCBldmVudElu
dGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHM7CiAgICAgYm9vbCBjb25zdW1lZEJ5SU07CiAgICAg
Ym9vbCBleGVjdXRpbmdTYXZlZEtleXByZXNzQ29tbWFuZHM7CkBAIC01MzYsMTMgKzUzNSwxMyBA
QCAtIChCT09MKXdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1BhCiAKIC0gKGlkKXZhbGlk
UmVxdWVzdG9yRm9yU2VuZFR5cGU6KE5TU3RyaW5nICopc2VuZFR5cGUgcmV0dXJuVHlwZTooTlNT
dHJpbmcgKilyZXR1cm5UeXBlCiB7Ci0gICAgQk9PTCBpc1ZhbGlkU2VuZFR5cGUgPSAhc2VuZFR5
cGUgfHwgKFtQYXN0ZWJvYXJkVHlwZXM6OmZvclNlbGVjdGlvbigpIGNvbnRhaW5zT2JqZWN0OnNl
bmRUeXBlXSAmJiAhX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzTm9uZSk7CisgICAg
Qk9PTCBpc1ZhbGlkU2VuZFR5cGUgPSAhc2VuZFR5cGUgfHwgKFtQYXN0ZWJvYXJkVHlwZXM6OmZv
clNlbGVjdGlvbigpIGNvbnRhaW5zT2JqZWN0OnNlbmRUeXBlXSAmJiAhX2RhdGEtPl9wYWdlLT5l
ZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSk7CiAgICAgQk9PTCBpc1ZhbGlkUmV0dXJuVHlw
ZSA9IE5POwogICAgIGlmICghcmV0dXJuVHlwZSkKICAgICAgICAgaXNWYWxpZFJldHVyblR5cGUg
PSBZRVM7Ci0gICAgZWxzZSBpZiAoW1Bhc3RlYm9hcmRUeXBlczo6Zm9yRWRpdGluZygpIGNvbnRh
aW5zT2JqZWN0OnJldHVyblR5cGVdICYmIF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5p
c0NvbnRlbnRFZGl0YWJsZSkgeworICAgIGVsc2UgaWYgKFtQYXN0ZWJvYXJkVHlwZXM6OmZvckVk
aXRpbmcoKSBjb250YWluc09iamVjdDpyZXR1cm5UeXBlXSAmJiBfZGF0YS0+X3BhZ2UtPmVkaXRv
clN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpIHsKICAgICAgICAgLy8gV2UgY2FuIGluc2VydCBz
dHJpbmdzIGluIGFueSBlZGl0YWJsZSBjb250ZXh0LiAgV2UgY2FuIGluc2VydCBvdGhlciB0eXBl
cywgbGlrZSBpbWFnZXMsIG9ubHkgaW4gcmljaCBlZGl0IGNvbnRleHRzLgotICAgICAgICBpc1Zh
bGlkUmV0dXJuVHlwZSA9IF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSB8fCBbcmV0dXJuVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQYm9h
cmRUeXBlXTsKKyAgICAgICAgaXNWYWxpZFJldHVyblR5cGUgPSBfZGF0YS0+X3BhZ2UtPmVkaXRv
clN0YXRlKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUgfHwgW3JldHVyblR5cGUgaXNFcXVhbFRv
U3RyaW5nOk5TU3RyaW5nUGJvYXJkVHlwZV07CiAgICAgfQogICAgIGlmIChpc1ZhbGlkU2VuZFR5
cGUgJiYgaXNWYWxpZFJldHVyblR5cGUpCiAgICAgICAgIHJldHVybiBzZWxmOwpAQCAtNjI3LDEx
ICs2MjYsMTEgQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8TgogICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHNob3dHdWVzc1BhbmVsOikpIHsKICAgICAgICAgaWYg
KE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gOjptZW51SXRlbShpdGVtKSkKICAgICAgICAgICAgIFtt
ZW51SXRlbSBzZXRUaXRsZTpjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCghW1tb
TlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBzcGVsbGluZ1BhbmVsXSBpc1Zpc2li
bGVdKV07Ci0gICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXND
b250ZW50RWRpdGFibGU7CisgICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRl
KCkuaXNDb250ZW50RWRpdGFibGU7CiAgICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0
b3IoY2hlY2tTcGVsbGluZzopIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlU3BlbGxpbmc6
KSkKLSAgICAgICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0NvbnRl
bnRFZGl0YWJsZTsKKyAgICAgICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5p
c0NvbnRlbnRFZGl0YWJsZTsKIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUNv
bnRpbnVvdXNTcGVsbENoZWNraW5nOikpIHsKICAgICAgICAgYm9vbCBlbmFibGVkID0gVGV4dENo
ZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7CkBAIC02NDksNDcgKzY0
OCw0NyBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxOCiAgICAgaWYg
KGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOikp
IHsKICAgICAgICAgYm9vbCBjaGVja2VkID0gVGV4dENoZWNrZXI6OnN0YXRlKCkuaXNBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOwogICAgICAgICBbbWVudUl0ZW0oaXRlbSkgc2V0
U3RhdGU6Y2hlY2tlZCA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4g
X2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOworICAgICAg
ICByZXR1cm4gX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOwog
ICAgIH0KIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKG9yZGVyRnJvbnRTdWJzdGl0dXRp
b25zUGFuZWw6KSkgewogICAgICAgICBpZiAoTlNNZW51SXRlbSAqbWVudUl0ZW0gPSA6Om1lbnVJ
dGVtKGl0ZW0pKQogICAgICAgICAgICAgW21lbnVJdGVtIHNldFRpdGxlOmNvbnRleHRNZW51SXRl
bVRhZ1Nob3dTdWJzdGl0dXRpb25zKCFbW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNr
ZXJdIHN1YnN0aXR1dGlvbnNQYW5lbF0gaXNWaXNpYmxlXSldOwotICAgICAgICByZXR1cm4gX2Rh
dGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOworICAgICAgICBy
ZXR1cm4gX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOwogICAg
IH0KIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRl
OikpIHsKICAgICAgICAgYm9vbCBjaGVja2VkID0gX2RhdGEtPl9wYWdlLT5pc1NtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZCgpOwogICAgICAgICBbbWVudUl0ZW0oaXRlbSkgc2V0U3RhdGU6Y2hlY2tl
ZCA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdl
LT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOworICAgICAgICByZXR1cm4gX2Rh
dGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOwogICAgIH0KIAogICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9u
OikpIHsKICAgICAgICAgYm9vbCBjaGVja2VkID0gVGV4dENoZWNrZXI6OnN0YXRlKCkuaXNBdXRv
bWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ7CiAgICAgICAgIFttZW51SXRlbShpdGVtKSBz
ZXRTdGF0ZTpjaGVja2VkID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0gICAgICAgIHJldHVy
biBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250ZW50RWRpdGFibGU7CisgICAg
ICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGU7
CiAgICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljRGFz
aFN1YnN0aXR1dGlvbjopKSB7CiAgICAgICAgIGJvb2wgY2hlY2tlZCA9IFRleHRDaGVja2VyOjpz
dGF0ZSgpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ7CiAgICAgICAgIFttZW51
SXRlbShpdGVtKSBzZXRTdGF0ZTpjaGVja2VkID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0g
ICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250ZW50RWRp
dGFibGU7CisgICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250
ZW50RWRpdGFibGU7CiAgICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xl
QXV0b21hdGljTGlua0RldGVjdGlvbjopKSB7CiAgICAgICAgIGJvb2wgY2hlY2tlZCA9IFRleHRD
aGVja2VyOjpzdGF0ZSgpLmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ7CiAgICAgICAg
IFttZW51SXRlbShpdGVtKSBzZXRTdGF0ZTpjaGVja2VkID8gTlNPblN0YXRlIDogTlNPZmZTdGF0
ZV07Ci0gICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250
ZW50RWRpdGFibGU7CisgICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCku
aXNDb250ZW50RWRpdGFibGU7CiAgICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Io
dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OikpIHsKICAgICAgICAgYm9vbCBjaGVja2Vk
ID0gVGV4dENoZWNrZXI6OnN0YXRlKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVk
OwogICAgICAgICBbbWVudUl0ZW0oaXRlbSkgc2V0U3RhdGU6Y2hlY2tlZCA/IE5TT25TdGF0ZSA6
IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0
ZSgpLmlzQ29udGVudEVkaXRhYmxlOworICAgICAgICByZXR1cm4gX2RhdGEtPl9wYWdlLT5lZGl0
b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlOwogICAgIH0KIAogICAgIGlmIChhY3Rpb24gPT0g
QHNlbGVjdG9yKHVwcGVyY2FzZVdvcmQ6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGxvd2VyY2Fz
ZVdvcmQ6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNhcGl0YWxpemVXb3JkOikpCi0gICAgICAg
IHJldHVybiBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuc2VsZWN0ZWRSYW5nZUxlbmd0
aCAmJiBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250ZW50RWRpdGFibGU7Cisg
ICAgICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5n
ZSAmJiBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGU7CiAgICAg
CiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Ioc3RvcFNwZWFraW5nOikpCiAgICAgICAgIHJl
dHVybiBbTlNBcHAgaXNTcGVha2luZ107CkBAIC0xMDI4LDcgKzEwMjcsNyBAQCAtIChCT09MKXNo
b3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVuCiB7CiAgICAgLy8gSWYgdGhpcyBpcyB0aGUg
YWN0aXZlIHdpbmRvdyBvciB3ZSBkb24ndCBoYXZlIGEgcmFuZ2Ugc2VsZWN0aW9uLCB0aGVyZSBp
cyBubyBuZWVkIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3MKICAgICAvLyBhbmQgd2UgY2Fu
IGF2b2lkIG1ha2luZyBhIHN5bmNocm9ub3VzIGNhbGwgdG8gdGhlIFdlYlByb2Nlc3MuCi0gICAg
aWYgKFtbc2VsZiB3aW5kb3ddIGlzS2V5V2luZG93XSB8fCBfZGF0YS0+X3BhZ2UtPnNlbGVjdGlv
blN0YXRlKCkuaXNOb25lIHx8ICFfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuc2VsZWN0
ZWRSYW5nZUxlbmd0aCkKKyAgICBpZiAoW1tzZWxmIHdpbmRvd10gaXNLZXlXaW5kb3ddIHx8IF9k
YXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc05vbmUgfHwgIV9kYXRhLT5fcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlKQogICAgICAgICByZXR1cm4gTk87CiAK
ICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdp
bGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZApAQCAtMTA4OSw3ICsxMDg4LDcgQEAgLSAo
dm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0bwogICAgICAgICBwYXJhbWV0ZXJz
LT5jb25zdW1lZEJ5SU0gPSBmYWxzZTsKIAogICAgIC8vIEFzIGluIGluc2VydFRleHQ6cmVwbGFj
ZW1lbnRSYW5nZTosIHdlIGFzc3VtZSB0aGF0IHRoZSBjYWxsIGNvbWVzIGZyb20gYW4gaW5wdXQg
bWV0aG9kIGlmIHRoZXJlIGlzIG1hcmtlZCB0ZXh0LgotICAgIGJvb2wgaXNGcm9tSW5wdXRNZXRo
b2QgPSBwYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlLmhhc01h
cmtlZFRleHQ7CisgICAgYm9vbCBpc0Zyb21JbnB1dE1ldGhvZCA9IF9kYXRhLT5fcGFnZS0+ZWRp
dG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbjsKIAogICAgIGlmIChwYXJhbWV0ZXJzICYmICFpc0Zy
b21JbnB1dE1ldGhvZCkKICAgICAgICAgcGFyYW1ldGVycy0+Y29tbWFuZHMtPmFwcGVuZChLZXlw
cmVzc0NvbW1hbmQoTlNTdHJpbmdGcm9tU2VsZWN0b3Ioc2VsZWN0b3IpKSk7CkBAIC0xMTIyLDcg
KzExMjEsNyBAQCAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVuCiAgICAg
ICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IGZhbHNlOwogCiAgICAgTlNTdHJpbmcgKnRl
eHQ7Ci0gICAgYm9vbCBpc0Zyb21JbnB1dE1ldGhvZCA9IHBhcmFtZXRlcnMgJiYgcGFyYW1ldGVy
cy0+Y2FjaGVkVGV4dElucHV0U3RhdGUuaGFzTWFya2VkVGV4dDsKKyAgICBib29sIGlzRnJvbUlu
cHV0TWV0aG9kID0gX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uOwog
CiAgICAgaWYgKGlzQXR0cmlidXRlZFN0cmluZykgewogICAgICAgICAvLyBGSVhNRTogV2UgaWdu
b3JlIG1vc3QgYXR0cmlidXRlcyBmcm9tIHRoZSBzdHJpbmcsIHNvIGZvciBleGFtcGxlIGluc2Vy
dGluZyBmcm9tIENoYXJhY3RlciBQYWxldHRlIGxvc2VzIGZvbnQgYW5kIGdseXBoIHZhcmlhdGlv
biBkYXRhLgpAQCAtMTE0MiwyMCArMTE0MSwxNyBAQCAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0
cmluZyByZXBsYWNlbWVuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBUZXh0SW5wdXRT
dGF0ZSBuZXdUZXh0SW5wdXRTdGF0ZTsKICAgICBTdHJpbmcgZXZlbnRUZXh0ID0gdGV4dDsKICAg
ICBldmVudFRleHQucmVwbGFjZShOU0JhY2tUYWJDaGFyYWN0ZXIsIE5TVGFiQ2hhcmFjdGVyKTsg
Ly8gc2FtZSB0aGluZyBpcyBkb25lIGluIEtleUV2ZW50TWFjLm1tIGluIFdlYkNvcmUKLSAgICBi
b29sIGV2ZW50SGFuZGxlZCA9IF9kYXRhLT5fcGFnZS0+aW5zZXJ0VGV4dChldmVudFRleHQsIHJl
cGxhY2VtZW50UmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmVwbGFjZW1lbnRSYW5nZSksIG5l
d1RleHRJbnB1dFN0YXRlKTsKKyAgICBib29sIGV2ZW50SGFuZGxlZCA9IF9kYXRhLT5fcGFnZS0+
aW5zZXJ0VGV4dChldmVudFRleHQsIHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24sIE5TTWF4UmFu
Z2UocmVwbGFjZW1lbnRSYW5nZSkpOwogCi0gICAgaWYgKHBhcmFtZXRlcnMpIHsKKyAgICBpZiAo
cGFyYW1ldGVycykKICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRJbnRlcnByZXRhdGlvbkhhZFNp
ZGVFZmZlY3RzIHw9IGV2ZW50SGFuZGxlZDsKLSAgICAgICAgcGFyYW1ldGVycy0+Y2FjaGVkVGV4
dElucHV0U3RhdGUgPSBuZXdUZXh0SW5wdXRTdGF0ZTsKLSAgICB9CiB9CiAKIC0gKEJPT0wpX2hh
bmRsZVN0eWxlS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50CiB7Ci0gICAgaWYgKCFfZGF0
YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpCisgICAgaWYgKCFf
ZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpCiAgICAgICAgIHJl
dHVybiBOTzsKIAogICAgIGlmICgoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNEZXZpY2VJbmRl
cGVuZGVudE1vZGlmaWVyRmxhZ3NNYXNrKSAhPSBOU0NvbW1hbmRLZXlNYXNrKQpAQCAtMTI2MSw5
ICsxMjU3LDcgQEAgLSAodm9pZClfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kcwogICAgICAg
ICByZXR1cm47CiAKICAgICBwYXJhbWV0ZXJzLT5leGVjdXRpbmdTYXZlZEtleXByZXNzQ29tbWFu
ZHMgPSB0cnVlOwotICAgIFRleHRJbnB1dFN0YXRlIG5ld1RleHRJbnB1dFN0YXRlOwotICAgIHBh
cmFtZXRlcnMtPmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyB8PSBfZGF0YS0+X3Bh
Z2UtPmV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKCpwYXJhbWV0ZXJzLT5jb21tYW5kcywgbmV3VGV4
dElucHV0U3RhdGUpOwotICAgIHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlID0gbmV3
VGV4dElucHV0U3RhdGU7CisgICAgcGFyYW1ldGVycy0+ZXZlbnRJbnRlcnByZXRhdGlvbkhhZFNp
ZGVFZmZlY3RzIHw9IF9kYXRhLT5fcGFnZS0+ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoKnBhcmFt
ZXRlcnMtPmNvbW1hbmRzKTsKICAgICBwYXJhbWV0ZXJzLT5jb21tYW5kcy0+Y2xlYXIoKTsKICAg
ICBwYXJhbWV0ZXJzLT5leGVjdXRpbmdTYXZlZEtleXByZXNzQ29tbWFuZHMgPSBmYWxzZTsKIH0K
QEAgLTEyNzYsOSArMTI3MCw3IEBAIC0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4
dAogICAgICAgICByZXR1cm4gW1tXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgc2hhcmVkVGV4
dElucHV0V2luZG93Q29udHJvbGxlcl0gaW5wdXRDb250ZXh0XTsKIAogICAgIC8vIERpc2FibGUg
dGV4dCBpbnB1dCBtYWNoaW5lcnkgd2hlbiBpbiBub24tZWRpdGFibGUgY29udGVudC4gQW4gaW52
aXNpYmxlIGlubGluZSBpbnB1dCBhcmVhIGFmZmVjdHMgcGVyZm9ybWFuY2UsIGFuZCBjYW4gcHJl
dmVudCBFeHBvc2UgZnJvbSB3b3JraW5nLgotICAgIGlmIChwYXJhbWV0ZXJzICYmICFwYXJhbWV0
ZXJzLT5jYWNoZWRUZXh0SW5wdXRTdGF0ZS5zZWxlY3Rpb25Jc0VkaXRhYmxlKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIGlmICghX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29u
dGVudEVkaXRhYmxlKQorICAgIGlmICghX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29u
dGVudEVkaXRhYmxlKQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgcmV0dXJuIFtzdXBlciBp
bnB1dENvbnRleHRdOwpAQCAtMTMwNywxMSArMTI5OSwxMSBAQCAtIChCT09MKWhhc01hcmtlZFRl
eHQKIAogICAgIEJPT0wgcmVzdWx0OwogICAgIGlmIChwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIHJl
c3VsdCA9IHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlLmhhc01hcmtlZFRleHQ7Cisg
ICAgICAgIHJlc3VsdCA9IF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlv
bjsKICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgLy8gQSBzYXZlZCBjb21tYW5k
IGNhbiBjb25maXJtIGEgY29tcG9zaXRpb24sIGJ1dCBpdCBjYW5ub3Qgc3RhcnQgYSBuZXcgb25l
LgogICAgICAgICAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwotICAg
ICAgICAgICAgcmVzdWx0ID0gcGFyYW1ldGVycy0+Y2FjaGVkVGV4dElucHV0U3RhdGUuaGFzTWFy
a2VkVGV4dDsKKyAgICAgICAgICAgIHJlc3VsdCA9IF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUo
KS5oYXNDb21wb3NpdGlvbjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIHVpbnQ2
NF90IGxvY2F0aW9uOwpAQCAtMTMzOCwxMCArMTMzMCw3IEBAIC0gKHZvaWQpdW5tYXJrVGV4dAog
ICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBmYWxzZTsKICAgICB9CiAKLSAgICBU
ZXh0SW5wdXRTdGF0ZSBuZXdUZXh0SW5wdXRTdGF0ZTsKLSAgICBfZGF0YS0+X3BhZ2UtPmNvbmZp
cm1Db21wb3NpdGlvbihuZXdUZXh0SW5wdXRTdGF0ZSk7Ci0gICAgaWYgKHBhcmFtZXRlcnMpCi0g
ICAgICAgIHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1dFN0YXRlID0gbmV3VGV4dElucHV0U3Rh
dGU7CisgICAgX2RhdGEtPl9wYWdlLT5jb25maXJtQ29tcG9zaXRpb24oKTsKIH0KIAogLSAoTlNB
cnJheSAqKXZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQKQEAgLTE0MDksMjQgKzEzOTgsMTkg
QEAgLSAodm9pZClzZXRNYXJrZWRUZXh0OihpZClzdHJpbmcgc2VsZWN0ZQogICAgIH0gZWxzZQog
ICAgICAgICB0ZXh0ID0gc3RyaW5nOwogCi0gICAgVGV4dElucHV0U3RhdGUgbmV3VGV4dElucHV0
U3RhdGU7Ci0gICAgaWYgKF9kYXRhLT5fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0luUGFzc3dv
cmRGaWVsZCkgeworICAgIGlmIChfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3
b3JkRmllbGQpIHsKICAgICAgICAgLy8gSW4gcGFzc3dvcmQgZmllbGRzLCB3ZSBvbmx5IGFsbG93
IEFTQ0lJIGRlYWQga2V5cywgYW5kIGRvbid0IGFsbG93IGlubGluZSBpbnB1dCwgbWF0Y2hpbmcg
TlNTZWN1cmVUZXh0SW5wdXRGaWVsZC4KICAgICAgICAgLy8gQWxsb3dpbmcgQVNDSUkgZGVhZCBr
ZXlzIGlzIG5lY2Vzc2FyeSB0byBlbmFibGUgZnVsbCBSb21hbiBpbnB1dCB3aGVuIHVzaW5nIGEg
VmlldG5hbWVzZSBrZXlib2FyZC4KLSAgICAgICAgQVNTRVJUKCFfZGF0YS0+X3BhZ2UtPnNlbGVj
dGlvblN0YXRlKCkuaGFzQ29tcG9zaXRpb24pOworICAgICAgICBBU1NFUlQoIV9kYXRhLT5fcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbik7CiAgICAgICAgIFtbc3VwZXIgaW5wdXRD
b250ZXh0XSBkaXNjYXJkTWFya2VkVGV4dF07IC8vIEluZm9ybSB0aGUgaW5wdXQgbWV0aG9kIHRo
YXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbmxpbmUgaW5wdXQgYXJlYSBkZXNwaXRlIGhhdmluZyBiZWVu
IGFza2VkIHRvLgogICAgICAgICBpZiAoW3RleHQgbGVuZ3RoXSA9PSAxICYmIFtbdGV4dCBkZWNv
bXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddIGNoYXJhY3RlckF0SW5kZXg6MF0gPCAw
eDgwKSB7Ci0gICAgICAgICAgICBfZGF0YS0+X3BhZ2UtPmluc2VydFRleHQodGV4dCwgcmVwbGFj
ZW1lbnRSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShyZXBsYWNlbWVudFJhbmdlKSwgbmV3VGV4
dElucHV0U3RhdGUpOwotICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMpCi0gICAgICAgICAgICAg
ICAgcGFyYW1ldGVycy0+Y2FjaGVkVGV4dElucHV0U3RhdGUgPSBuZXdUZXh0SW5wdXRTdGF0ZTsK
KyAgICAgICAgICAgIF9kYXRhLT5fcGFnZS0+aW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJh
bmdlLmxvY2F0aW9uLCBOU01heFJhbmdlKHJlcGxhY2VtZW50UmFuZ2UpKTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBOU0JlZXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IF9kYXRhLT5fcGFnZS0+c2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgbmV3U2VsUmFu
Z2UubG9jYXRpb24sIE5TTWF4UmFuZ2UobmV3U2VsUmFuZ2UpLCByZXBsYWNlbWVudFJhbmdlLmxv
Y2F0aW9uLCBOU01heFJhbmdlKHJlcGxhY2VtZW50UmFuZ2UpLCBuZXdUZXh0SW5wdXRTdGF0ZSk7
Ci0gICAgaWYgKHBhcmFtZXRlcnMpCi0gICAgICAgIHBhcmFtZXRlcnMtPmNhY2hlZFRleHRJbnB1
dFN0YXRlID0gbmV3VGV4dElucHV0U3RhdGU7CisgICAgX2RhdGEtPl9wYWdlLT5zZXRDb21wb3Np
dGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBuZXdTZWxSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShu
ZXdTZWxSYW5nZSksIHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmVwbGFj
ZW1lbnRSYW5nZSkpOwogfQogCiAtIChOU1JhbmdlKW1hcmtlZFJhbmdlCkBAIC0xNDQ1LDEzICsx
NDI5LDEyIEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHIKIHsKICAg
ICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKLSAgICBXS1ZpZXdJbnRl
cnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX2RhdGEtPl9pbnRlcnByZXRL
ZXlFdmVudHNQYXJhbWV0ZXJzOwotICAgIGlmIChwYXJhbWV0ZXJzICYmICFwYXJhbWV0ZXJzLT5j
YWNoZWRUZXh0SW5wdXRTdGF0ZS5zZWxlY3Rpb25Jc0VkaXRhYmxlKSB7CisgICAgaWYgKCFfZGF0
YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpIHsKICAgICAgICAgTE9H
KFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gbmls
IiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgpOwogICAgICAgICByZXR1cm4gbmls
OwogICAgIH0KIAotICAgIGlmIChfZGF0YS0+X3BhZ2UtPnNlbGVjdGlvblN0YXRlKCkuaXNJblBh
c3N3b3JkRmllbGQpCisgICAgaWYgKF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFz
c3dvcmRGaWVsZCkKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIEF0dHJpYnV0ZWRTdHJpbmcg
cmVzdWx0OwpAQCAtMjAyMCw3ICsyMDAzLDcgQEAgLSAodm9pZClfcmVzZW5kS2V5RG93bkV2ZW50
OihOU0V2ZW50ICopZQogICAgIF9kYXRhLT5fa2V5RG93bkV2ZW50QmVpbmdSZXNlbnQgPSBudWxs
cHRyOwogfQogCi0tIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooTlNFdmVudCAqKWV2ZW50IHdp
dGhDYWNoZWRUZXh0SW5wdXRTdGF0ZTooY29uc3QgVGV4dElucHV0U3RhdGUmKWNhY2hlZFRleHRJ
bnB1dFN0YXRlIHNhdmluZ0NvbW1hbmRzVG86KFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1h
bmQ+Jiljb21tYW5kcworLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldmVu
dCBzYXZpbmdDb21tYW5kc1RvOihWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpY29t
bWFuZHMKIHsKICAgICBBU1NFUlQoIV9kYXRhLT5faW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVy
cyk7CiAgICAgQVNTRVJUKGNvbW1hbmRzLmlzRW1wdHkoKSk7CkBAIC0yMDI5LDcgKzIwMTIsNiBA
QCAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooTlNFdmVudCAqKWV2CiAgICAgICAgIHJldHVy
biBOTzsKIAogICAgIFdLVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgcGFyYW1ldGVy
czsKLSAgICBwYXJhbWV0ZXJzLmNhY2hlZFRleHRJbnB1dFN0YXRlID0gY2FjaGVkVGV4dElucHV0
U3RhdGU7CiAgICAgcGFyYW1ldGVycy5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMg
PSBmYWxzZTsKICAgICBwYXJhbWV0ZXJzLmV4ZWN1dGluZ1NhdmVkS2V5cHJlc3NDb21tYW5kcyA9
IGZhbHNlOwogICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFuIGlucHV0IG1ldGhvZCBoYXMgY29uc3Vt
ZWQgdGhlIGV2ZW50LCBhbmQgb25seSBjaGFuZ2UgdGhpcyBhc3N1bXB0aW9uIGlmIG9uZSBvZiB0
aGUgTlNUZXh0SW5wdXQgbWV0aG9kcyBpcyBjYWxsZWQuCkBAIC0yMzM5LDcgKzIzMjEsNyBAQCAt
ICh2b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRlCiAgICAgfQogICAgIC8vIFdLVmlldyBoYXMg
YSBzaW5nbGUgaW5wdXQgY29udGV4dCBmb3IgYWxsIGVkaXRhYmxlIGFyZWFzIChleGNlcHQgZm9y
IHBsdWctaW5zKS4KICAgICBOU1RleHRJbnB1dENvbnRleHQgKmNvbnRleHQgPSBbc3VwZXIgaW5w
dXRDb250ZXh0XTsKLSAgICBib29sIGlzSW5QYXNzd29yZEZpZWxkID0gX2RhdGEtPl9wYWdlLT5z
ZWxlY3Rpb25TdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkOworICAgIGJvb2wgaXNJblBhc3N3b3Jk
RmllbGQgPSBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQ7CiAK
ICAgICBpZiAoaXNJblBhc3N3b3JkRmllbGQpIHsKICAgICAgICAgaWYgKCFfZGF0YS0+X2luU2Vj
dXJlSW5wdXRTdGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIGNsYXNzIERyYXdpbmdBcmVhUHJv
eHk7CiAgICAgY2xhc3MgRmluZEluZGljYXRvcjsKICAgICBjbGFzcyBMYXllclRyZWVDb250ZXh0
OwotICAgIHN0cnVjdCBUZXh0SW5wdXRTdGF0ZTsKIH0KIAogQGNsYXNzIFdLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXI7CkBAIC01NSw3ICs1NCw3IEBAIEBpbnRlcmZhY2UgV0tWaWV3IChJbnRl
cm5hbCkKIC0gKHZvaWQpX3Rvb2xUaXBDaGFuZ2VkRnJvbTooTlNTdHJpbmcgKilvbGRUb29sVGlw
IHRvOihOU1N0cmluZyAqKW5ld1Rvb2xUaXA7CiAtICh2b2lkKV9zZXRDdXJzb3I6KE5TQ3Vyc29y
ICopY3Vyc29yOwogLSAodm9pZClfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTooTlNTdHJpbmcg
Kiljb21tYW5kTmFtZSBlbmFibGVkOihCT09MKWlzRW5hYmxlZCBzdGF0ZTooaW50KW5ld1N0YXRl
OwotLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKil0aGVFdmVudCB3aXRoQ2Fj
aGVkVGV4dElucHV0U3RhdGU6KGNvbnN0IFdlYktpdDo6VGV4dElucHV0U3RhdGUmKWNhY2hlZFRl
eHRJbnB1dFN0YXRlIHNhdmluZ0NvbW1hbmRzVG86KFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0Nv
bW1hbmQ+Jiljb21tYW5kczsKKy0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihOU0V2ZW50ICop
dGhlRXZlbnQgc2F2aW5nQ29tbWFuZHNUbzooVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFu
ZD4mKWNvbW1hbmRzOwogLSAodm9pZClfcmVzZW5kS2V5RG93bkV2ZW50OihOU0V2ZW50ICopZXZl
bnQ7CiAtIChib29sKV9leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9y
OwogLSAoTlNSZWN0KV9jb252ZXJ0VG9EZXZpY2VTcGFjZTooTlNSZWN0KXJlY3Q7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2
aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94
eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAjaW1wb3J0ICJBdHRy
aWJ1dGVkU3RyaW5nLmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0ICJEaWN0
aW9uYXJ5UG9wdXBJbmZvLmgiCisjaW1wb3J0ICJFZGl0b3JTdGF0ZS5oIgogI2ltcG9ydCAiTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAi
UGFnZUNsaWVudEltcGwuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyLmgiCi0jaW1wb3J0ICJUZXh0
SW5wdXRTdGF0ZS5oIgogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQ
cm9jZXNzUHJveHkuaCIKICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CkBA
IC0xNDEsMjAgKzE0MSwyMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1l
c0NoCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaW5kb3dBbmRWaWV3
RnJhbWVzQ2hhbmdlZCh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIHZpZXdGcmFtZUlu
V2luZG93Q29vcmRpbmF0ZXMsIGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXMpLCBtX3BhZ2VJ
RCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qg
c2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1l
bnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBUZXh0SW5wdXRTdGF0
ZSYgbmV3U3RhdGUpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3Ry
aW5nJiB0ZXh0LCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2
NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxh
Y2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCkKIHsKLSAgICBw
cm9jZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlvbih0ZXh0
LCB1bmRlcmxpbmVzLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCByZXBsYWNlbWVudFJh
bmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQpLCBNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29t
cG9zaXRpb246OlJlcGx5KG5ld1N0YXRlKSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMs
IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQsIHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgcmVw
bGFjZW1lbnRSYW5nZUVuZCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlvbjo6UmVw
bHkobV9lZGl0b3JTdGF0ZSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmNv
bmZpcm1Db21wb3NpdGlvbihUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Y29uZmlybUNvbXBvc2l0aW9uKCkKIHsKLSAgICBwcm9jZXNzKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJQYWdlOjpDb25maXJtQ29tcG9zaXRpb24oKSwgTWVzc2FnZXM6OldlYlBhZ2U6
OkNvbmZpcm1Db21wb3NpdGlvbjo6UmVwbHkobmV3U3RhdGUpLCBtX3BhZ2VJRCk7CisgICAgcHJv
Y2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uKCks
IE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25maXJtQ29tcG9zaXRpb246OlJlcGx5KG1fZWRpdG9yU3Rh
dGUpLCBtX3BhZ2VJRCk7CiB9CiAKLWJvb2wgV2ViUGFnZVByb3h5OjppbnNlcnRUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCBy
ZXBsYWNlbWVudFJhbmdlRW5kLCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpCitib29sIFdlYlBh
Z2VQcm94eTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2Vt
ZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCkKIHsKICAgICBib29s
IGhhbmRsZWQ7Ci0gICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6SW5z
ZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQp
LCBNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0VGV4dDo6UmVwbHkoaGFuZGxlZCwgbmV3U3RhdGUp
LCBtX3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6
SW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VF
bmQpLCBNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0VGV4dDo6UmVwbHkoaGFuZGxlZCwgbV9lZGl0
b3JTdGF0ZSksIG1fcGFnZUlEKTsKICAgICByZXR1cm4gaGFuZGxlZDsKIH0KIApAQCAtMTg3LDI2
ICsxODcsMjYgQEAgV2ViQ29yZTo6SW50UmVjdCBXZWJQYWdlUHJveHk6OmZpcnN0UmVjdAogICAg
IHJldHVybiByZXN1bHRSZWN0OwogfQogCi1ib29sIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZUtleXBy
ZXNzQ29tbWFuZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1h
bmRzLCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpCitib29sIFdlYlBhZ2VQcm94eTo6ZXhlY3V0
ZUtleXByZXNzQ29tbWFuZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4m
IGNvbW1hbmRzKQogewogICAgIGJvb2wgcmVzdWx0OwotICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhZ2U6OkV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKGNvbW1hbmRzKSwgTWVz
c2FnZXM6OldlYlBhZ2U6OkV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzOjpSZXBseShyZXN1bHQsIG5l
d1N0YXRlKSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhZ2U6OkV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKGNvbW1hbmRzKSwgTWVzc2FnZXM6OldlYlBh
Z2U6OkV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzOjpSZXBseShyZXN1bHQsIG1fZWRpdG9yU3RhdGUp
LCBtX3BhZ2VJRCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBXZWJQYWdlUHJveHk6
OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpCiB7CiAgICAgYm9vbCByZXN1
bHQ7Ci0gICAgY29uc3QgZG91YmxlIE1lc3NhZ2VUaW1lb3V0ID0gMjA7Ci0gICAgcHJvY2Vzcygp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
cGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlcyksIE1lc3NhZ2VzOjpXZWJQYWdlOjpXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlSUQsIE1lc3NhZ2VU
aW1lb3V0KTsKKyAgICBjb25zdCBkb3VibGUgbWVzc2FnZVRpbWVvdXQgPSAyMDsKKyAgICBwcm9j
ZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpXcml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwgTWVzc2FnZXM6OldlYlBhZ2U6
OldyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOjpSZXBseShyZXN1bHQpLCBtX3BhZ2VJRCwgbWVz
c2FnZVRpbWVvdXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgV2ViUGFnZVByb3h5
OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkKIHsKICAgICBib29sIHJlc3VsdDsKLSAgICBjb25zdCBkb3VibGUgTWVzc2FnZVRpbWVvdXQg
PSAyMDsKLSAgICBwcm9jZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZWFkU2Vs
ZWN0aW9uRnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFnZTo6
UmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkOjpSZXBseShyZXN1bHQpLCBtX3BhZ2VJRCwgTWVz
c2FnZVRpbWVvdXQpOworICAgIGNvbnN0IGRvdWJsZSBtZXNzYWdlVGltZW91dCA9IDIwOworICAg
IHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlJlYWRTZWxlY3Rpb25Gcm9t
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYWdlOjpSZWFkU2VsZWN0
aW9uRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZUlELCBtZXNzYWdlVGltZW91
dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjI3LDkgKzIyNywxMCBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rCiAgICAgcHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24ocG9pbnQp
LCBtX3BhZ2VJRCk7IAogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJwcmV0UXVldWVkS2V5
RXZlbnQoY29uc3QgVGV4dElucHV0U3RhdGUmIHN0YXRlLCBib29sJiBoYW5kbGVkLCBWZWN0b3I8
V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMpCit2b2lkIFdlYlBhZ2VQcm94eTo6
aW50ZXJwcmV0UXVldWVkS2V5RXZlbnQoY29uc3QgRWRpdG9yU3RhdGUmIHN0YXRlLCBib29sJiBo
YW5kbGVkLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMpCiB7Ci0g
ICAgaGFuZGxlZCA9IG1fcGFnZUNsaWVudC0+aW50ZXJwcmV0S2V5RXZlbnQobV9rZXlFdmVudFF1
ZXVlLmZpcnN0KCksIHN0YXRlLCBjb21tYW5kcyk7CisgICAgbV9lZGl0b3JTdGF0ZSA9IHN0YXRl
OworICAgIGhhbmRsZWQgPSBtX3BhZ2VDbGllbnQtPmludGVycHJldEtleUV2ZW50KG1fa2V5RXZl
bnRRdWV1ZS5maXJzdCgpLCBjb21tYW5kcyk7CiB9CiAKIC8vIENvbXBsZXggdGV4dCBpbnB1dCBz
dXBwb3J0IGZvciBwbHVnLWlucy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4v
V2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9X
ZWJWaWV3LmNwcAkocmV2aXNpb24gODQwNTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
d2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUyLDcgKzExNTIsNyBAQCB2b2lk
IFdlYlZpZXc6OnNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlCiAKIHZvaWQgV2ViVmlldzo6Y29t
cG9zaXRpb25TZWxlY3Rpb25DaGFuZ2VkKGJvb2wgaGFzQ2hhbmdlZCkKIHsKLSAgICBpZiAobV9w
YWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmhhc0NvbXBvc2l0aW9uICYmICFoYXNDaGFuZ2VkKQorICAg
IGlmIChtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb24gJiYgIWhhc0NoYW5nZWQp
CiAgICAgICAgIHJlc2V0SU1FKCk7CiB9CiAKQEAgLTEyNjAsNyArMTI2MCw3IEBAIGJvb2wgV2Vi
Vmlldzo6b25JTUVDb21wb3NpdGlvbihMUEFSQU0gbHAKICAgICBpZiAoIWhJbnB1dENvbnRleHQp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFtX3BhZ2UtPnNlbGVjdGlvblN0YXRl
KCkuaXNDb250ZW50RWRpdGFibGUpCisgICAgaWYgKCFtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXND
b250ZW50RWRpdGFibGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcHJlcGFyZUNhbmRp
ZGF0ZVdpbmRvdyhoSW5wdXRDb250ZXh0KTsKQEAgLTEzMDMsNyArMTMwMyw3IEBAIGJvb2wgV2Vi
Vmlldzo6b25JTUVFbmRDb21wb3NpdGlvbigpCiAgICAgTE9HKFRleHRJbnB1dCwgIm9uSU1FRW5k
Q29tcG9zaXRpb24iKTsKICAgICAvLyBJZiB0aGUgY29tcG9zaXRpb24gaGFzbid0IGJlZW4gY29u
ZmlybWVkIHlldCwgaXQgbmVlZHMgdG8gYmUgY2FuY2VsbGVkLgogICAgIC8vIFRoaXMgaGFwcGVu
cyBhZnRlciBkZWxldGluZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZnJvbSBpbmxpbmUgaW5wdXQgaG9s
ZS4KLSAgICBpZiAobV9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmhhc0NvbXBvc2l0aW9uKQorICAg
IGlmIChtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb24pCiAgICAgICAgIG1fcGFn
ZS0+Y29uZmlybUNvbXBvc2l0aW9uKFN0cmluZygpKTsKIAogICAgIGlmIChtX2luSU1FQ29tcG9z
aXRpb24pCkBAIC0xMzE0LDcgKzEzMTQsNyBAQCBib29sIFdlYlZpZXc6Om9uSU1FRW5kQ29tcG9z
aXRpb24oKQogCiBMUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbihJTUVD
SEFSUE9TSVRJT04qIGNoYXJQb3MpCiB7Ci0gICAgaWYgKGNoYXJQb3MtPmR3Q2hhclBvcyAmJiAh
bV9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmhhc0NvbXBvc2l0aW9uKQorICAgIGlmIChjaGFyUG9z
LT5kd0NoYXJQb3MgJiYgIW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbikKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgSW50UmVjdCBjYXJldCA9IG1fcGFnZS0+Zmlyc3RSZWN0Rm9y
Q2hhcmFjdGVySW5TZWxlY3RlZFJhbmdlKGNoYXJQb3MtPmR3Q2hhclBvcyk7CiAgICAgY2hhclBv
cy0+cHQueCA9IGNhcmV0LngoKTsKQEAgLTEzNDYsNyArMTM0Niw3IEBAIExSRVNVTFQgV2ViVmll
dzo6b25JTUVSZXF1ZXN0UmVjb252ZXJ0U3QKIExSRVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0
KFdQQVJBTSByZXF1ZXN0LCBMUEFSQU0gZGF0YSkKIHsKICAgICBMT0coVGV4dElucHV0LCAib25J
TUVSZXF1ZXN0ICVzIiwgaW1lUmVxdWVzdE5hbWUocmVxdWVzdCkubGF0aW4xKCkuZGF0YSgpKTsK
LSAgICBpZiAoIW1fcGFnZS0+c2VsZWN0aW9uU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKKyAg
ICBpZiAoIW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICBzd2l0Y2ggKHJlcXVlc3QpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg0MDU3
KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDcgQEAKIAkJMUFBMkU1MUUxMkU0QzA1RTAwQkM0
OTY2IC8qIENHVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBQTJFNTFDMTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxpdGllcy5jcHAg
Ki87IH07CiAJCTFBQTQxN0NCMTJDMDBDQ0EwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNDE3QzkxMkMwMEND
QTAwMkJFNjdCIC8qIFRleHRDaGVja2VyLmggKi87IH07CiAJCTFBQTQxN0VGMTJDMDBEODcwMDJC
RTY3QiAvKiBUZXh0Q2hlY2tlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBQTQxN0VEMTJDMDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlck1h
Yy5tbSAqLzsgfTsKLQkJMUFBNDFBQjUxMkMwMkVDNDAwMkJFNjdCIC8qIFNlbGVjdGlvblN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE0MUFC
NDEyQzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUuaCAqLzsgfTsKKwkJMUFBNDFBQjUx
MkMwMkVDNDAwMkJFNjdCIC8qIEVkaXRvclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE0MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogRWRpdG9y
U3RhdGUuaCAqLzsgfTsKIAkJMUFBNDc5MjMxMkE1OUZEOTAwODIzNkMzIC8qIFBsdWdpblByb2Nl
c3NNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUE0NzkyMjEyQTU5RkQ5MDA4MjM2QzMgLyogUGx1Z2luUHJvY2Vzc01hYy5tbSAqLzsgfTsKIAkJ
MUFBNDc5QjAxMkE1QTQzNjAwODIzNkMzIC8qIENhcmJvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUExQ0QwNjEwMEZBMUJBMDA3
OERFQkMgLyogQ2FyYm9uLmZyYW1ld29yayAqLzsgfTsKIAkJMUFBNTZGMjkxMUU5MkJDODAwNjFC
ODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBQTU2RjI4MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5Db250cm9s
bGVyLmggKi87IH07CkBAIC03ODgsNyArNzg4LDYgQEAKIAkJRTEzNEYwMUExMkVBNUQ5OTAwNEVD
NThEIC8qIFdLUHJpbnRpbmdWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTEzNEYwMTkxMkVBNUQ5OTAwNEVDNThEIC8qIFdLUHJpbnRpbmdWaWV3
Lm1tICovOyB9OwogCQlFMTc5RkQ5QzEzNEQzODA2MDAxNUI4ODMgLyogQXJndW1lbnRDb2RlcnNN
YWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNzlG
RDlCMTM0RDM4MDYwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5oICovOyB9OwogCQlFMTc5
RkQ5RjEzNEQzODI1MDAxNUI4ODMgLyogQXJndW1lbnRDb2RlcnNNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTc5RkQ5RTEzNEQzODI1MDAxNUI4
ODMgLyogQXJndW1lbnRDb2RlcnNNYWMubW0gKi87IH07Ci0JCUUxODM5MzQ5MTM0Mjk3QTUwMDE4
NDJFQyAvKiBUZXh0SW5wdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTE4MzkzNDgxMzQyOTdBNTAwMTg0MkVDIC8qIFRleHRJbnB1dFN0YXRl
LmggKi87IH07CiAJCUUxOEM5MkY0MTJEQjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4QzkyRjMxMkRC
OUU3MTAwQ0YyQUVCIC8qIFByaW50SW5mby5jcHAgKi87IH07CiAJCUUxQTMxNzMyMTM0Q0VBNkMw
MDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMUEzMTczMTEzNENFQTZDMDA3QzlBNEYgLyogQXR0cmlidXRl
ZFN0cmluZy5oICovOyB9OwogCQlFMUEzMTczNTEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRl
ZFN0cmluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQTMxNzM0MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLm1tICovOyB9OwpA
QCAtMTA1NSw3ICsxMDU0LDcgQEAKIAkJMUFBMkU1MUMxMkU0QzA1RTAwQkM0OTY2IC8qIENHVXRp
bGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENHVXRpbGl0
aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNDE3QzkxMkMwMENDQTAw
MkJFNjdCIC8qIFRleHRDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTQxN0VEMTJD
MDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFRleHRDaGVja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQUE0MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0aW9uU3RhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFBNDFBQjQxMkMwMkVDNDAwMkJFNjdCIC8qIEVkaXRv
clN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRvclN0YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTQ3OTIyMTJBNTlGRDkwMDgyMzZDMyAv
KiBQbHVnaW5Qcm9jZXNzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gUGx1Z2luUHJvY2Vzc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFBNTZGMjgxMUU5MkJDODAwNjFCODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQUE1ODg5MDExRUU3MDQwMDA2MUI4ODIgLyogTmV0c2NhcGVQbHVn
aW5TdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0c2NhcGVQbHVn
aW5TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MTQsNyArMTcxMyw2
IEBACiAJCUUxMzRGMDE5MTJFQTVEOTkwMDRFQzU4RCAvKiBXS1ByaW50aW5nVmlldy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLUHJpbnRpbmdWaWV3Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTc5RkQ5QjEzNEQzODA2MDAxNUI4ODMgLyog
QXJndW1lbnRDb2RlcnNNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJn
dW1lbnRDb2RlcnNNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE3OUZEOUUx
MzREMzgyNTAwMTVCODgzIC8qIEFyZ3VtZW50Q29kZXJzTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXJndW1lbnRDb2RlcnNNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUUxODM5MzQ4MTM0Mjk3QTUwMDE4NDJFQyAvKiBUZXh0SW5wdXRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0SW5wdXRTdGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMThDOTJGMzEyREI5RTcxMDBDRjJBRUIg
LyogUHJpbnRJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBy
aW50SW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQTMxNzMxMTM0Q0VB
NkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEF0dHJpYnV0ZWRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTFBMzE3MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdHRyaWJ1dGVkU3RyaW5nLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA4Niw3ICsyMDg0LDcgQEAKIAkJCQkxQUFC
NEE4QzEyOTZGMEEyMDAyMzk1MkYgLyogU2FuZGJveEV4dGVuc2lvbi5oICovLAogCQkJCTMzMTUy
OTczMTMwRDBDQjIwMEVEMjQ4MyAvKiBTZWN1cml0eU9yaWdpbkRhdGEuY3BwICovLAogCQkJCTMz
MTUyOTc0MTMwRDBDQjIwMEVEMjQ4MyAvKiBTZWN1cml0eU9yaWdpbkRhdGEuaCAqLywKLQkJCQkx
QUE0MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUuaCAqLywKKwkJCQkxQUE0
MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogRWRpdG9yU3RhdGUuaCAqLywKIAkJCQk1MThEMkNDODEy
RDUxREZCMDAzQkI5M0IgLyogU2Vzc2lvblN0YXRlLmNwcCAqLywKIAkJCQk1MThEMkNDOTEyRDUx
REZCMDAzQkI5M0IgLyogU2Vzc2lvblN0YXRlLmggKi8sCiAJCQkJMUE2NDIwRTIxMkRDRTJGRjAw
Q0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5jcHAgKi8sCkBAIC0yNzg5LDcgKzI3ODcsNiBAQAog
CQkJCTFBQUI0QUE5MTI5NkYxNTQwMDIzOTUyRiAvKiBTYW5kYm94RXh0ZW5zaW9uTWFjLm1tICov
LAogCQkJCTFBOTYzNkJBMTJGMzQ4NDkwMDc4QTA2MiAvKiBTaGFyZWFibGVTdXJmYWNlLmNwcCAq
LywKIAkJCQkxQTk2MzZCQjEyRjM0ODQ5MDA3OEEwNjIgLyogU2hhcmVhYmxlU3VyZmFjZS5oICov
LAotCQkJCUUxODM5MzQ4MTM0Mjk3QTUwMDE4NDJFQyAvKiBUZXh0SW5wdXRTdGF0ZS5oICovLAog
CQkJCUJDOUU5NUQyMTE0NDlCMDMwMDg3MEU3MSAvKiBVcGRhdGVDaHVuay5jcHAgKi8sCiAJCQkJ
QkM5RTk1RDExMTQ0OUIwMzAwODcwRTcxIC8qIFVwZGF0ZUNodW5rLmggKi8sCiAJCQkJQkNFMjMy
NjIxMjJDNkNGMzAwRDVDMzVBIC8qIFdlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSAqLywKQEAg
LTM1ODgsNyArMzU4NSw3IEBACiAJCQkJQkM4NThBMjAxMkMwMzU3QjAwRURFQjJFIC8qIFdlYlJl
c291cmNlTG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBNDE3Q0IxMkMwMENDQTAw
MkJFNjdCIC8qIFRleHRDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDk4NTRFRDEyQkM0
RTE4MDAwQUQwODAgLyogV2ViTWVtb3J5U2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFB
NDFBQjUxMkMwMkVDNDAwMkJFNjdCIC8qIFNlbGVjdGlvblN0YXRlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkxQUE0MUFCNTEyQzAyRUM0MDAyQkU2N0IgLyogRWRpdG9yU3RhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQ0Y2NzJEMTJDN0VERjcwMDhGOUMzNSAvKiBPcmlnaW5BbmREYXRhYmFzZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0Y2QUJEMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFn
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjZBQzMxMkM5MUYzNDAwOEY5QzM1IC8qIFdLSW1h
Z2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzY4MSw3ICszNjc4LDYgQEAKIAkJCQk1MTEwQUUwRDEz
M0MxNkNCMDA3MjcxN0EgLyogV0tJY29uRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
MjNDRjFDMTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTgzNDU5MzEzNDUzMkU5MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFMTgzOTM0OTEzNDI5N0E1MDAxODQyRUMgLyogVGV4dElu
cHV0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMwRkE1MjQzMTM0NTY5NEEwMDI4RThDMiAv
KiBMYXllclRyZWVIb3N0Q0FNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQTMxNzMyMTM0Q0VB
NkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTc5
RkQ5QzEzNEQzODA2MDAxNUI4ODMgLyogQXJndW1lbnRDb2RlcnNNYWMuaCBpbiBIZWFkZXJzICov
LApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gODQwNTcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJXZWJFZGl0b3JDbGllbnQuaCIKIAotI2luY2x1ZGUgIlNlbGVjdGlvblN0YXRlLmgi
CisjaW5jbHVkZSAiRWRpdG9yU3RhdGUuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKICNpbmNsdWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYlBh
Z2UuaCIKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1VzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwpAQCAtMTkxLDI0ICsxOTAsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9u
ZFRvQ2hhbmdlZFNlCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2Vs
ZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGU7Ci0gICAgc2VsZWN0aW9uU3RhdGUuaXNOb25lID0g
ZnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKTsKLSAgICBzZWxlY3Rpb25TdGF0ZS5pc0NvbnRl
bnRFZGl0YWJsZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKLSAg
ICBzZWxlY3Rpb25TdGF0ZS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSA9IGZyYW1lLT5zZWxlY3Rp
b24oKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKLSAgICBzZWxlY3Rpb25TdGF0ZS5pc0lu
UGFzc3dvcmRGaWVsZCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNJblBhc3N3b3JkRmllbGQoKTsK
LSAgICBzZWxlY3Rpb25TdGF0ZS5oYXNDb21wb3NpdGlvbiA9IGZyYW1lLT5lZGl0b3IoKS0+aGFz
Q29tcG9zaXRpb24oKTsKLQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0
aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgIHNp
emVfdCBsb2NhdGlvbjsKLSAgICAgICAgc2l6ZV90IGxlbmd0aDsKLSAgICAgICAgaWYgKCFUZXh0
SXRlcmF0b3I6OmxvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHJhbmdlLmdldCgpLCBsb2NhdGlv
biwgbGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2VsZWN0aW9uU3RhdGUu
c2VsZWN0ZWRSYW5nZVN0YXJ0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxvY2F0aW9uKTsKLSAg
ICAgICAgc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZUxlbmd0aCA9IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihsZW5ndGgpOwotICAgIH0KLQotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTZWxlY3Rpb25TdGF0ZUNoYW5nZWQoc2VsZWN0aW9uU3RhdGUpKTsKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RWRpdG9yU3RhdGVDaGFuZ2VkKG1f
cGFnZS0+ZWRpdG9yU3RhdGUoKSkpOwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBhbHNvIGdvIGludG8gdGhlIHNlbGVjdGlvbiBzdGF0ZS4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9u
IDg0MDU3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNiArMzE1LDIyIEBAIFBhc3NSZWZQdHI8UGx1Z2luPiBX
ZWJQYWdlOjpjcmVhdGVQbHVnaW4KICNlbmRpZgogfQogCitFZGl0b3JTdGF0ZSBXZWJQYWdlOjpl
ZGl0b3JTdGF0ZSgpIGNvbnN0Cit7CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKwor
ICAgIEVkaXRvclN0YXRlIHJlc3VsdDsKKyAgICByZXN1bHQuc2VsZWN0aW9uSXNOb25lID0gZnJh
bWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKTsKKyAgICByZXN1bHQuc2VsZWN0aW9uSXNSYW5nZSA9
IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOworICAgIHJlc3VsdC5pc0NvbnRlbnRFZGl0
YWJsZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXN1
bHQuaXNDb250ZW50UmljaGx5RWRpdGFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVu
dFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmVzdWx0LmlzSW5QYXNzd29yZEZpZWxkID0gZnJhbWUt
PnNlbGVjdGlvbigpLT5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgIHJlc3VsdC5oYXNDb21wb3Np
dGlvbiA9IGZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsKKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiBTdHJpbmcgV2ViUGFnZTo6cmVuZGVyVHJlZUV4dGVybmFsUmVwcmVz
ZW50YXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKG1f
bWFpbkZyYW1lLT5jb3JlRnJhbWUoKSwgUmVuZGVyQXNUZXh0QmVoYXZpb3JOb3JtYWwpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lv
biA4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSw4ICsxMDUsOCBAQCBjbGFzcyBXZWJQYWdlR3JvdXBQcm94
eTsKIGNsYXNzIFdlYlBvcHVwTWVudTsKIGNsYXNzIFdlYldoZWVsRXZlbnQ7CiBzdHJ1Y3QgQXR0
cmlidXRlZFN0cmluZzsKK3N0cnVjdCBFZGl0b3JTdGF0ZTsKIHN0cnVjdCBQcmludEluZm87Ci1z
dHJ1Y3QgVGV4dElucHV0U3RhdGU7CiBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczsK
IHN0cnVjdCBXZWJQcmVmZXJlbmNlc1N0b3JlOwogCkBAIC0yMDksNiArMjA5LDggQEAgcHVibGlj
OgogICAgIFdlYkZyYW1lKiBtYWluRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX21haW5GcmFtZS5n
ZXQoKTsgfQogICAgIFBhc3NSZWZQdHI8UGx1Z2luPiBjcmVhdGVQbHVnaW4oY29uc3QgUGx1Z2lu
OjpQYXJhbWV0ZXJzJik7CiAKKyAgICBFZGl0b3JTdGF0ZSBlZGl0b3JTdGF0ZSgpIGNvbnN0Owor
CiAgICAgU3RyaW5nIHJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKCkgY29uc3Q7CiAg
ICAgdm9pZCBleGVjdXRlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwg
Y29uc3QgU3RyaW5nJiBhcmd1bWVudCk7CiAgICAgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxl
ZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKTsKQEAgLTMxMiwxNSArMzE0LDE1IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIHNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVnaW4odWludDY0X3Qg
cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdGV4dElucHV0
KTsKIAotICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8
V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVj
dGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFu
Z2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgVGV4dElucHV0U3RhdGUmIG5l
d1N0YXRlKTsKLSAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihUZXh0SW5wdXRTdGF0ZSYgbmV3
U3RhdGUpOwotICAgIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90
IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgYm9v
bCYgaGFuZGxlZCwgVGV4dElucHV0U3RhdGUmIG5ld1N0YXRlKTsKKyAgICB2b2lkIHNldENvbXBv
c2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5k
ZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2Vs
ZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxh
Y2VtZW50UmFuZ2VFbmQsIEVkaXRvclN0YXRlJiBuZXdTdGF0ZSk7CisgICAgdm9pZCBjb25maXJt
Q29tcG9zaXRpb24oRWRpdG9yU3RhdGUmIG5ld1N0YXRlKTsKKyAgICB2b2lkIGluc2VydFRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2
NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQsIGJvb2wmIGhhbmRsZWQsIEVkaXRvclN0YXRlJiBuZXdT
dGF0ZSk7CiAgICAgdm9pZCBnZXRNYXJrZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2
NF90JiBsZW5ndGgpOwogICAgIHZvaWQgZ2V0U2VsZWN0ZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRp
b24sIHVpbnQ2NF90JiBsZW5ndGgpOwogICAgIHZvaWQgZ2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zy
b21SYW5nZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoLCBBdHRyaWJ1dGVkU3Ry
aW5nJik7CiAgICAgdm9pZCBjaGFyYWN0ZXJJbmRleEZvclBvaW50KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50IHBvaW50LCB1aW50NjRfdCYgcmVzdWx0KTsKICAgICB2b2lkIGZpcnN0UmVjdEZvckNo
YXJhY3RlclJhbmdlKHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgsIFdlYkNvcmU6
OkludFJlY3QmIHJlc3VsdFJlY3QpOwotICAgIHZvaWQgZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCBib29sJiBoYW5kbGVkLCBU
ZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpOworICAgIHZvaWQgZXhlY3V0ZUtleXByZXNzQ29tbWFu
ZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCBib29sJiBoYW5kbGVk
LCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpOwogICAgIHZvaWQgd3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoY29uc3QgV1RGOjpTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBXVEY6OlZlY3Rv
cjxXVEY6OlN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgYm9vbCYgcmVzdWx0KTsKICAgICB2b2lk
IHJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBXVEY6OlN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGJvb2wmIHJlc3VsdCk7CiAgICAgdm9pZCBzaG91bGREZWxheVdpbmRvd09yZGVyaW5n
RXZlbnQoY29uc3QgV2ViS2l0OjpXZWJNb3VzZUV2ZW50JiwgYm9vbCYgcmVzdWx0KTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCShyZXZpc2lvbiA4NDA1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsMTUgKzE4
NSwxNSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBSZWFkU2VsZWN0aW9uRnJvbVBhc3Rl
Ym9hcmQoV1RGOjpTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChib29sIHJlc3VsdCkKIAogICAg
ICMgVGV4dCBpbnB1dC4KLSAgICBTZXRDb21wb3NpdGlvbihXVEY6OlN0cmluZyB0ZXh0LCBXVEY6
OlZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0
X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKSAtPiAoV2ViS2l0
OjpUZXh0SW5wdXRTdGF0ZSBuZXdTdGF0ZSkKLSAgICBDb25maXJtQ29tcG9zaXRpb24oKSAtPiAo
V2ViS2l0OjpUZXh0SW5wdXRTdGF0ZSBuZXdTdGF0ZSkKLSAgICBJbnNlcnRUZXh0KFdURjo6U3Ry
aW5nIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRSYW5nZUVuZCkgLT4gKGJvb2wgaGFuZGxlZCwgV2ViS2l0OjpUZXh0SW5wdXRTdGF0ZSBu
ZXdTdGF0ZSkKKyAgICBTZXRDb21wb3NpdGlvbihXVEY6OlN0cmluZyB0ZXh0LCBXVEY6OlZlY3Rv
cjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2Vs
ZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRS
YW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKSAtPiAoV2ViS2l0OjpFZGl0
b3JTdGF0ZSBuZXdTdGF0ZSkKKyAgICBDb25maXJtQ29tcG9zaXRpb24oKSAtPiAoV2ViS2l0OjpF
ZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKKyAgICBJbnNlcnRUZXh0KFdURjo6U3RyaW5nIHRleHQsIHVp
bnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVu
ZCkgLT4gKGJvb2wgaGFuZGxlZCwgV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKICAgICBH
ZXRNYXJrZWRSYW5nZSgpIC0+ICh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKQog
ICAgIEdldFNlbGVjdGVkUmFuZ2UoKSAtPiAodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxl
bmd0aCkKICAgICBHZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKHVpbnQ2NF90IGxvY2F0
aW9uLCB1aW50NjRfdCBsZW5ndGgpIC0+IChXZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmcgcmVzdWx0
KQogICAgIENoYXJhY3RlckluZGV4Rm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpIC0+
ICh1aW50NjRfdCByZXN1bHQpCiAgICAgRmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWludDY0
X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCkgLT4gKFdlYkNvcmU6OkludFJlY3QgcmVzdWx0
UmVjdCkKLSAgICBFeGVjdXRlS2V5cHJlc3NDb21tYW5kcyhWZWN0b3I8V2ViQ29yZTo6S2V5cHJl
c3NDb21tYW5kPiBzYXZlZENvbW1hbmRzKSAtPiAoYm9vbCBoYW5kbGVkLCBXZWJLaXQ6OlRleHRJ
bnB1dFN0YXRlIG5ld1N0YXRlKQorICAgIEV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKFZlY3RvcjxX
ZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IHNhdmVkQ29tbWFuZHMpIC0+IChib29sIGhhbmRsZWQs
IFdlYktpdDo6RWRpdG9yU3RhdGUgbmV3U3RhdGUpCiAgICAgU2hvdWxkRGVsYXlXaW5kb3dPcmRl
cmluZ0V2ZW50KFdlYktpdDo6V2ViTW91c2VFdmVudCBldmVudCkgLT4gKGJvb2wgcmVzdWx0KQog
ICAgIEFjY2VwdHNGaXJzdE1vdXNlKGludCBldmVudE51bWJlciwgV2ViS2l0OjpXZWJNb3VzZUV2
ZW50IGV2ZW50KSAtPiAoYm9vbCByZXN1bHQpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9u
IDg0MjAyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaW1wb3J0ICJBY2Nlc3Np
YmlsaXR5V2ViUGFnZU9iamVjdC5oIgogI2ltcG9ydCAiQXR0cmlidXRlZFN0cmluZy5oIgogI2lt
cG9ydCAiRGF0YVJlZmVyZW5jZS5oIgorI2ltcG9ydCAiRWRpdG9yU3RhdGUuaCIKICNpbXBvcnQg
IlBsdWdpblZpZXcuaCIKLSNpbXBvcnQgIlRleHRJbnB1dFN0YXRlLmgiCiAjaW1wb3J0ICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgIldlYkV2ZW50LmgiCiAjaW1wb3J0ICJXZWJF
dmVudENvbnZlcnNpb24uaCIKQEAgLTExOCwxNCArMTE4LDYgQEAgc3RhdGljIFN0cmluZyBjb21t
YW5kTmFtZUZvclNlbGVjdG9yTmFtZQogICAgIHJldHVybiBzZWxlY3Rvck5hbWUubGVmdChzZWxl
Y3Rvck5hbWVMZW5ndGggLSAxKTsKIH0KIAotc3RhdGljIFRleHRJbnB1dFN0YXRlIGN1cnJlbnRU
ZXh0SW5wdXRTdGF0ZShGcmFtZSogZnJhbWUpCi17Ci0gICAgVGV4dElucHV0U3RhdGUgc3RhdGU7
Ci0gICAgc3RhdGUuaGFzTWFya2VkVGV4dCA9IGZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRp
b24oKTsKLSAgICBzdGF0ZS5zZWxlY3Rpb25Jc0VkaXRhYmxlID0gIWZyYW1lLT5zZWxlY3Rpb24o
KS0+aXNOb25lKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwot
ICAgIHJldHVybiBzdGF0ZTsKLX0KLQogc3RhdGljIEZyYW1lKiBmcmFtZUZvckV2ZW50KEtleWJv
YXJkRXZlbnQqIGV2ZW50KQogewogICAgIE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRv
Tm9kZSgpOwpAQCAtMTkwLDcgKzE4Miw3IEBAIGJvb2wgV2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tl
eWJvYXJkRXZlbnQKICAgICBpZiAoc2F2ZUNvbW1hbmRzKSB7CiAgICAgICAgIEtleWJvYXJkRXZl
bnQqIG9sZEV2ZW50ID0gbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZDsKICAgICAgICAg
bV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZCA9IGV2ZW50OwotICAgICAgICBib29sIHNl
bmRSZXN1bHQgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkludGVycHJldFF1ZXVlZEtleUV2ZW50KGN1cnJlbnRUZXh0
SW5wdXRTdGF0ZShmcmFtZSkpLCAKKyAgICAgICAgYm9vbCBzZW5kUmVzdWx0ID0gV2ViUHJvY2Vz
czo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpJbnRlcnByZXRRdWV1ZWRLZXlFdmVudChlZGl0b3JTdGF0ZSgpKSwgCiAgICAgICAgICAgICBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnRlcnByZXRRdWV1ZWRLZXlFdmVudDo6UmVwbHkoZXZl
bnRXYXNIYW5kbGVkLCBjb21tYW5kcyksIG1fcGFnZUlEKTsKICAgICAgICAgbV9rZXlib2FyZEV2
ZW50QmVpbmdJbnRlcnByZXRlZCA9IG9sZEV2ZW50OwogICAgICAgICBpZiAoIXNlbmRSZXN1bHQp
CkBAIC0yMjksNyArMjIxLDcgQEAgdm9pZCBXZWJQYWdlOjpzZW5kQ29tcGxleFRleHRJbnB1dFRv
UGx1ZwogICAgIH0KIH0KIAotdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJp
bmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0
X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBUZXh0SW5wdXRT
dGF0ZSYgbmV3U3RhdGUpCit2b2lkIFdlYlBhZ2U6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRf
dCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNl
bWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQsIEVkaXRvclN0YXRl
JiBuZXdTdGF0ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIApAQCAtMjQzLDE5ICsyMzUsMTkgQEAgdm9pZCBX
ZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbgogICAgICAgICBmcmFtZS0+ZWRpdG9y
KCktPnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxl
Y3Rpb25FbmQpOwogICAgIH0KIAotICAgIG5ld1N0YXRlID0gY3VycmVudFRleHRJbnB1dFN0YXRl
KGZyYW1lKTsKKyAgICBuZXdTdGF0ZSA9IGVkaXRvclN0YXRlKCk7CiB9CiAKLXZvaWQgV2ViUGFn
ZTo6Y29uZmlybUNvbXBvc2l0aW9uKFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSkKK3ZvaWQgV2Vi
UGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKEVkaXRvclN0YXRlJiBuZXdTdGF0ZSkKIHsKICAgICBG
cmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKIAogICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uKCk7CiAKLSAg
ICBuZXdTdGF0ZSA9IGN1cnJlbnRUZXh0SW5wdXRTdGF0ZShmcmFtZSk7CisgICAgbmV3U3RhdGUg
PSBlZGl0b3JTdGF0ZSgpOwogfQogCi12b2lkIFdlYlBhZ2U6Omluc2VydFRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxh
Y2VtZW50UmFuZ2VFbmQsIGJvb2wmIGhhbmRsZWQsIFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSkK
K3ZvaWQgV2ViUGFnZTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJl
cGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgYm9vbCYg
aGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogCkBAIC0yNzQs
NyArMjY2LDcgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdAogICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbih0ZXh0KTsKICAgICB9CiAK
LSAgICBuZXdTdGF0ZSA9IGN1cnJlbnRUZXh0SW5wdXRTdGF0ZShmcmFtZSk7CisgICAgbmV3U3Rh
dGUgPSBlZGl0b3JTdGF0ZSgpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKHVp
bnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkKQEAgLTM5NCwxMyArMzg2LDEwIEBA
IHZvaWQgV2ViUGFnZTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UKICAgICByZXN1bHRSZWN0
ID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKIH0KIAotdm9pZCBXZWJQ
YWdlOjpleGVjdXRlS2V5cHJlc3NDb21tYW5kcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJl
c3NDb21tYW5kPiYgY29tbWFuZHMsIGJvb2wmIGhhbmRsZWQsIFRleHRJbnB1dFN0YXRlJiBuZXdT
dGF0ZSkKK3ZvaWQgV2ViUGFnZTo6ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzLCBib29sJiBoYW5kbGVkLCBFZGl0
b3JTdGF0ZSYgbmV3U3RhdGUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0KICAgICBoYW5kbGVkID0gZXhlY3V0
ZUtleXByZXNzQ29tbWFuZHNJbnRlcm5hbChjb21tYW5kcywgbV9rZXlib2FyZEV2ZW50QmVpbmdJ
bnRlcnByZXRlZCk7Ci0KLSAgICBuZXdTdGF0ZSA9IGN1cnJlbnRUZXh0SW5wdXRTdGF0ZShmcmFt
ZSk7CisgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwogfQogCiBzdGF0aWMgYm9vbCBpc1Bv
c2l0aW9uSW5SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBSYW5nZSogcmFu
Z2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCShyZXZpc2lvbiA4NDA1NykKKysr
IFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMx
LDYgKzQzMSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxTaGFyZWRcRWRpdG9yU3RhdGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cU2hhcmVkXEZvbnRJbmZvLmNwcCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CkBAIC01MjcsMTAgKzUzMSw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxTZWxlY3Rpb25TdGF0ZS5oIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxTaGFyZWRcU2Vzc2lvblN0
YXRlLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+Cg==
</data>
<flag name="review"
          id="82973"
          type_id="1"
          status="+"
          setter="adele"
    />
          </attachment>
      

    </bug>

</bugzilla>