<?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>109109</bug_id>
          
          <creation_ts>2013-02-06 17:01:05 -0800</creation_ts>
          <short_desc>webdatabase: Introduce SQLTransactionBackend and SQLTransactionBackendSync.</short_desc>
          <delta_ts>2013-02-07 15:56:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>104750</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>buildbot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>levin+threading</cc>
    
    <cc>michaeln</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>826899</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-06 17:01:05 -0800</bug_when>
    <thetext>The majority of the functionality in SQLTransaction belongs in the back-end.  We should rename SQLTransaction as SQLTransactionBackend, and introduce a SQLTransaction to wrap it.  Eventually, we&apos;ll want to move the front-end (i.e. script related) functionality back to the front-end side.  This patch is mostly a rename operation to keep the change simple though it hits many files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826999</commentid>
    <comment_count>1</comment_count>
      <attachid>186979</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-06 19:14:09 -0800</bug_when>
    <thetext>Created attachment 186979
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827003</commentid>
    <comment_count>2</comment_count>
      <attachid>186979</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-02-06 19:20:21 -0800</bug_when>
    <thetext>Comment on attachment 186979
the patch.

Attachment 186979 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/16416026</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827004</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-06 19:21:10 -0800</bug_when>
    <thetext>Attachment 186979 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackend.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseTask.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseTask.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransaction.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransaction.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionSync.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionSync.h&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.gypi&apos;, u&apos;Source/WebCore/WebCore.vcproj/WebCore.vcproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;]&quot; exit_code: 1
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h:67:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.cpp:96:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.cpp:98:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.cpp:160:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.cpp:172:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.cpp:177:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.cpp:215:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:267:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:280:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:288:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:358:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:370:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:383:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:502:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:579:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:617:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 18 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827006</commentid>
    <comment_count>4</comment_count>
      <attachid>186979</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-02-06 19:27:46 -0800</bug_when>
    <thetext>Comment on attachment 186979
the patch.

Attachment 186979 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/16404036</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827011</commentid>
    <comment_count>5</comment_count>
      <attachid>186979</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-06 19:41:14 -0800</bug_when>
    <thetext>Comment on attachment 186979
the patch.

Attachment 186979 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16417047</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827012</commentid>
    <comment_count>6</comment_count>
      <attachid>186979</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-06 19:42:03 -0800</bug_when>
    <thetext>Comment on attachment 186979
the patch.

The patch mechanism is not ordered.  Hence, my renaming a file (e.g. SQLTransaction.h to SQLTransactionBackend.h), and then creating a new one (E.G. SQLTransaction.h) with the same old name can result in badness.  Reworking the patch to just add the file with the different name (e.g. SQLTransactionBackend.h) as a new file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827016</commentid>
    <comment_count>7</comment_count>
      <attachid>186982</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-06 19:53:53 -0800</bug_when>
    <thetext>Created attachment 186982
Reworked patch to make the patch application process work. Also fixed all the other style violations that the ews bot was complaining about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827955</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-07 15:56:49 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in 2 parts:
Part 1 r142193: &lt;http://trac.webkit.org/changeset/142193&gt;
Part 2 r142194: &lt;http://trac.webkit.org/changeset/142194&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186979</attachid>
            <date>2013-02-06 19:14:09 -0800</date>
            <delta_ts>2013-02-06 19:42:03 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-109109.patch</filename>
            <type>text/plain</type>
            <size>118966</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MjA2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBAQAorMjAxMy0wMi0wNiAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIFNRTFRyYW5zYWN0
aW9uQmFja2VuZCBhbmQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTEwOS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIFJlbmFtZWQgU1FMVHJhbnNhY3Rp
b24gYW5kIFNRTFRyYW5zYWN0aW9uU3luYyB0byBTUUxUcmFuc2FjdGlvbkJhY2tlbmQKKyAgICAg
ICAgICBhbmQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYyByZXNwZWN0aXZlbHkuCisgICAgICAg
IC0gQWRkZWQgYmFjayBTUUxUcmFuc2FjdGlvbiBhbmQgU1FMVHJhbnNhY3Rpb25TeW5jIGFzIG5l
dyBmaWxlcywgYW5kIGhhdmUKKyAgICAgICAgICB0aGVpciBjbGFzc2VzIGV4dGVuZHMgdGhlaXIg
cmVzcGVjdGl2ZSBiYWNrZW5kcy4gVGhpcyBpcyBhIHN0b3AgZ2FwCisgICAgICAgICAgbWVhc3Vy
ZSB0byBrZWVwIHRoaW5ncyB3b3JraW5nIHVudGlsIHRoZSBmcm9udC1lbmQgYW5kIGJhY2stZW5k
IGNhbiBiZQorICAgICAgICAgIHByb3Blcmx5IHNwbGl0LgorICAgICAgICAtIFdoZXJlIG5lZWRl
ZCwgSSBtYWRlIHVzZSBvZiBuZXcgU1FMVHJhbnNhY3Rpb246OmZyb20oKSBhbmQKKyAgICAgICAg
ICBTUUxUcmFuc2FjdGlvblN5bmM6OmZyb20oKSBzdGF0aWMgbWV0aG9kcyB0aGF0ICJnZXQiIHRo
ZSBmcm9udC1lbmQKKyAgICAgICAgICB0cmFuc2FjdGlvbnMgZnJvbSB0aGUgYmFjay1lbmRzLiBU
aGlzIGlzIGFsc28gYSBzdG9wIGdhcCBtZWFzdXJlIHRvCisgICAgICAgICAga2VlcCB0aGluZ3Mg
d29ya2luZyB1bnRpbCB0aGUgcHJvcGVyIHJlZmFjdG9yaW5nIGlzIGNvbXBsZXRlLgorICAgICAg
ICAtIEZpeGVkIHVwIHByZS1leGlzdGluZyBzdHlsZSBjaGVja2VyIHZpb2xhdGlvbnMgdGhhdCBh
cmUgbm93IGRldGVjdGVkCisgICAgICAgICAgb24gY29kZSB0aGF0IHdlcmUgdG91Y2hlZCBkdXJp
bmcgbXkgcmVuYW1pbmcuCisgICAgICAgIC0gQWRkZWQgdGhlIGJhY2stZW5kIGZpbGVzIHRvIGFs
bCB0aGUgYnVpbGQgZmlsZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCk6CisgICAgICAgICogTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5oOgorICAgICAgICAoRGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmg6CisgICAgICAgIChEYXRhYmFzZUJhY2tl
bmQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEFzeW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9u
VGFzazo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2spOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUYXNrLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRB
c3luYzo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OnRyYW5zYWN0
aW9uKToKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZEFzeW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9u
VGFzayk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHA6
IFJlcGxhY2VkLgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmZyb20pOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaDogUmVwbGFjZWQuCisgICAgICAgIChTUUxUcmFuc2Fj
dGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tl
bmQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2Vu
ZDo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uQmFja2VuZDo6flNRTFRyYW5zYWN0aW9uQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
VHJhbnNhY3Rpb25CYWNrZW5kOjplbnF1ZXVlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVidWdTdGVwTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRl
ZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cGVy
Zm9ybU5leHRTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
cGVyZm9ybVBlbmRpbmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkJhY2tlbmQ6Om5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24pOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjphY3F1aXJlTG9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmxvY2tBY3F1aXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJUcmFu
c2FjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2Vu
ZDo6c2NoZWR1bGVUb1J1blN0YXRlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb25CYWNrZW5kOjpydW5TdGF0ZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uQmFja2VuZDo6Z2V0TmV4dFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxU
cmFuc2FjdGlvbkJhY2tlbmQ6OnJ1bkN1cnJlbnRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpoYW5kbGVDdXJyZW50U3RhdGVtZW50RXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyU3RhdGVtZW50
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxp
dmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uQmFja2VuZDo6cG9zdGZsaWdodEFuZENvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxU
cmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpoYW5kbGVUcmFuc2Fj
dGlvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVs
aXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFu
c2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bi5oLgorICAgICAgICAoU1FMVHJhbnNhY3Rpb25CYWNrZW5kKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jOjpTUUxUcmFuc2Fj
dGlvbkJhY2tlbmRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2Vu
ZFN5bmM6On5TUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uQmFja2VuZFN5bmM6OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYzo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U1FM
VHJhbnNhY3Rpb25CYWNrZW5kU3luYzo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxU
cmFuc2FjdGlvbkJhY2tlbmRTeW5jOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJh
bnNhY3Rpb25CYWNrZW5kU3luYzo6cm9sbGJhY2spOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5oLgorICAgICAgICAo
U1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERh
dGFiYXNlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yOjpwcm9jZXNzUGVuZGluZ1RyYW5zYWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bik6CisgICAgICAgICogTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6CisgICAgICAgIChT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IpOgorICAgICAgICAoQ29v
cmRpbmF0aW9uSW5mbyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvblN5bmMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25TeW5jLmg6IFJlbW92ZWQuCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAg
KiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEzLTAyLTA2ICBLZW50YXJvIEhh
cmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIE1ha2UgYW4gSXNvbGF0
ZSBwYXJhbWV0ZXIgbWFuZGF0b3J5IGluIEdldFRlbXBsYXRlKCkgYW5kIEdldFJhd1RlbXBsYXRl
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTcxLDYgKzk3MSw4IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVu
dC5jcHAKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudFN5bmMuY3BwCiAgICAg
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAKKyAgICBNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbkNsaWVudC5jcHAKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvblN5bmMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9u
IDE0MjA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIxNDksMTQgKzIxNDksMTggQEAgd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmggXAog
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFj
a2VuZC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBcCiAJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBc
CiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmggXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb24uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCBcCiAJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5oIFwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTQ3OCw2ICsxNDc4LDggQEAgSEVBREVSUyArPSBcCiAg
ICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuaCBcCiAgICAgTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmggXAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb24uaCBcCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJh
Y2tlbmQuaCBcCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmRT
eW5jLmggXAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBc
CiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggXAog
ICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmggXApAQCAtMzA1Miw2
ICszMDU0LDggQEAgZW5hYmxlPyhTUUxfREFUQUJBU0UpIHsKICAgICAgICAgTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwIFwKICAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxTdGF0ZW1lbnRTeW5jLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb24uY3BwIFwKKyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bkJhY2tlbmQuY3BwIFwKKyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bkJhY2tlbmRTeW5jLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25DbGllbnQuY3BwIFwKICAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb25TeW5jLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxNDIwNDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTEwNDUs
NiArMTA0NSwxMSBAQAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVt
ZW50U3luYy5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVt
ZW50U3luYy5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bi5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFj
a2VuZC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25CYWNrZW5kLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kU3luYy5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oJywKICAgICAgICAgICAgICdNb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwJywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCShyZXZpc2lv
biAxNDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgRGF0
YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb24oKQogICAgICAgICBtX3RyYW5zYWN0aW9uSW5Qcm9n
cmVzcyA9IGZhbHNlOwogfQogCi12b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uU3Rl
cChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGJvb2wgaW1tZWRpYXRlbHkpCit2b2lkIERh
dGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbkJhY2tlbmQqIHRy
YW5zYWN0aW9uLCBib29sIGltbWVkaWF0ZWx5KQogewogICAgIGlmICghZGF0YWJhc2VDb250ZXh0
KCktPmRhdGFiYXNlVGhyZWFkKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDE0MjA0NCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBEYXRhYmFzZUNhbGxiYWNrOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTUUxU
cmFuc2FjdGlvbjsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uQmFja2VuZDsKIGNsYXNzIFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2s7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkNsaWVudDsKIGNsYXNzIFNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3I7CkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKIAogICAgIHZvaWQgc2NoZWR1bGVU
cmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKik7Ci0gICAgdm9pZCBzY2hlZHVsZVRy
YW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbiosIGJvb2wgaW1tZWRpYXRlbHkgPSBmYWxzZSk7
CisgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbkJhY2tlbmQq
LCBib29sIGltbWVkaWF0ZWx5ID0gZmFsc2UpOwogCiAgICAgU1FMVHJhbnNhY3Rpb25DbGllbnQq
IHRyYW5zYWN0aW9uQ2xpZW50KCkgY29uc3Q7CiAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
ciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5oCShyZXZpc2lv
biAxNDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw4ICs5NSw4IEBAIHByb3RlY3RlZDoKICAg
ICBmcmllbmQgY2xhc3MgQ2hhbmdlVmVyc2lvbldyYXBwZXI7CiAgICAgZnJpZW5kIGNsYXNzIFNR
TFN0YXRlbWVudDsKICAgICBmcmllbmQgY2xhc3MgU1FMU3RhdGVtZW50U3luYzsKLSAgICBmcmll
bmQgY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jOwotICAgIGZyaWVuZCBjbGFzcyBTUUxUcmFuc2Fj
dGlvbjsKKyAgICBmcmllbmQgY2xhc3MgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOworICAgIGZyaWVu
ZCBjbGFzcyBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jOwogCiAgICAgRGF0YWJhc2VCYWNrZW5k
KFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VUeXBlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VGFzay5jcHAJKHJldmlzaW9uIDE0MjA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ3
LDcgKzE0Nyw3IEBAIGNvbnN0IGNoYXIqIERhdGFiYXNlQmFja2VuZEFzeW5jOjpEYXRhYmEKIC8v
ICoqKiBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayAqKioKIC8vIFN0YXJ0cyBhIHRyYW5zYWN0aW9u
IHRoYXQgd2lsbCByZXBvcnQgaXRzIHJlc3VsdHMgdmlhIGEgY2FsbGJhY2suCiAKLURhdGFiYXNl
QmFja2VuZEFzeW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6RGF0YWJhc2VUcmFuc2FjdGlv
blRhc2soUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCitEYXRhYmFzZUJh
Y2tlbmRBc3luYzo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OkRhdGFiYXNlVHJhbnNhY3Rpb25U
YXNrKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbikKICAgICA6
IERhdGFiYXNlVGFzayhEYXRhYmFzZTo6ZnJvbSh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSksIDAp
CiAgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogewpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5oCShyZXZpc2lvbiAx
NDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFz
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAi
RGF0YWJhc2VCYWNrZW5kQXN5bmMuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhc2ljVHlwZXMuaCIK
ICNpbmNsdWRlICJEYXRhYmFzZUVycm9yLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIK
KyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkJhY2tlbmQuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgpAQCAtMTM4LDIyICsxMzgsMjIgQEAgcHJpdmF0ZToKIGNsYXNzIERhdGFiYXNlQmFja2Vu
ZEFzeW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgewog
cHVibGljOgogICAgIC8vIFRyYW5zYWN0aW9uIHRhc2sgaXMgbmV2ZXIgc3luY2hyb25vdXMsIHNv
IG5vICdzeW5jaHJvbml6ZXInIHBhcmFtZXRlci4KLSAgICBzdGF0aWMgUGFzc093blB0cjxEYXRh
YmFzZVRyYW5zYWN0aW9uVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRy
YW5zYWN0aW9uKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlVHJhbnNhY3Rpb25UYXNr
PiBjcmVhdGUoUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEYXRhYmFzZVRyYW5zYWN0aW9uVGFz
ayh0cmFuc2FjdGlvbikpOwogICAgIH0KIAotICAgIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KKyAgICBTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5n
ZXQoKTsgfQogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNr
KFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+KTsKKyAgICBleHBsaWNpdCBEYXRhYmFzZVRyYW5z
YWN0aW9uVGFzayhQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4pOwogCiAgICAgdmly
dHVhbCB2b2lkIGRvUGVyZm9ybVRhc2soKTsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiBkZWJ1Z1Rhc2tOYW1lKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIFJlZlB0
cjxTUUxUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rp
b25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwogfTsKIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5kQXN5
bmM6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb24uY3BwCShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsNjAxICszMSwyOSBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAotI2luY2x1ZGUg
IkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCi0jaW5jbHVkZSAi
RGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU1FMRXJyb3IuaCIKLSNpbmNs
dWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgotI2lu
Y2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCIKLSNpbmNs
dWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCIKLSNp
bmNsdWRlICJTUUxWYWx1ZS5oIgogI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgotI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotLy8gVGhlcmUn
cyBubyB3YXkgb2Yga25vd2luZyBleGFjdGx5IGhvdyBtdWNoIG1vcmUgc3BhY2Ugd2lsbCBiZSBy
ZXF1aXJlZCB3aGVuIGEgc3RhdGVtZW50IGhpdHMgdGhlIHF1b3RhIGxpbWl0LgotLy8gRm9yIG5v
dywgd2UnbGwgYXJiaXRyYXJpbHkgY2hvb3NlIGN1cnJlbnRRdW90YSArIDFtYi4KLS8vIEluIHRo
ZSBmdXR1cmUgd2UgZGVjaWRlIHRvIHRyYWNrIGlmIGEgc2l6ZSBpbmNyZWFzZSB3YXNuJ3QgZW5v
dWdoLCBhbmQgYXNrIGZvciBsYXJnZXItYW5kLWxhcmdlciBpbmNyZWFzZXMgdW50aWwgaXRzIGVu
b3VnaC4KLXN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFF1b3RhU2l6ZUluY3JlYXNlID0gMTA0ODU3
NjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBT
UUxUcmFuc2FjdGlvbjo6Y3JlYXRlKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5
KQorUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gU1FMVHJhbnNhY3Rpb246OmNyZWF0ZShEYXRh
YmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssCisg
ICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ss
IFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssCisgICAgUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVhZE9ubHkpCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihkYiwgY2FsbGJhY2ssIGVycm9yQ2Fs
bGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkpKTsKIH0KIAotU1FMVHJh
bnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVhZE9ubHkpCi0gICAgOiBtX25leHRT
dGVwKCZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCi0gICAgLCBtX2V4ZWN1dGVTcWxBbGxv
d2VkKGZhbHNlKQotICAgICwgbV9kYXRhYmFzZShkYikKLSAgICAsIG1fd3JhcHBlcih3cmFwcGVy
KQotICAgICwgbV9jYWxsYmFja1dyYXBwZXIoY2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpCi0gICAgLCBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIoc3VjY2Vzc0NhbGxiYWNr
LCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICwgbV9lcnJvckNhbGxiYWNrV3Jh
cHBlcihlcnJvckNhbGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICwg
bV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQoZmFsc2UpCi0gICAgLCBtX21vZGlmaWVkRGF0
YWJhc2UoZmFsc2UpCi0gICAgLCBtX2xvY2tBY3F1aXJlZChmYWxzZSkKLSAgICAsIG1fcmVhZE9u
bHkocmVhZE9ubHkpCi0gICAgLCBtX2hhc1ZlcnNpb25NaXNtYXRjaChmYWxzZSkKLXsKLSAgICBB
U1NFUlQobV9kYXRhYmFzZSk7Ci19Ci0KLVNRTFRyYW5zYWN0aW9uOjp+U1FMVHJhbnNhY3Rpb24o
KQotewotICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7Ci19Ci0KLXZvaWQgU1FMVHJh
bnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZl
Y3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFj
az4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gY2FsbGJh
Y2tFcnJvciwgRXhjZXB0aW9uQ29kZSYgZSkKLXsKLSAgICBpZiAoIW1fZXhlY3V0ZVNxbEFsbG93
ZWQgfHwgIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7Ci0gICAgICAgIGUgPSBJTlZBTElEX1NUQVRF
X0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBwZXJtaXNzaW9ucyA9IERh
dGFiYXNlQXV0aG9yaXplcjo6UmVhZFdyaXRlTWFzazsKLSAgICBpZiAoIW1fZGF0YWJhc2UtPmRh
dGFiYXNlQ29udGV4dCgpLT5hbGxvd0RhdGFiYXNlQWNjZXNzKCkpCi0gICAgICAgIHBlcm1pc3Np
b25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6Tm9BY2Nlc3NNYXNrOwotICAgIGVsc2UgaWYgKG1f
cmVhZE9ubHkpCi0gICAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVh
ZE9ubHlNYXNrOwotCi0gICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gc3RhdGVtZW50ID0gU1FMU3Rh
dGVtZW50OjpjcmVhdGUobV9kYXRhYmFzZS5nZXQoKSwgc3FsU3RhdGVtZW50LCBhcmd1bWVudHMs
IGNhbGxiYWNrLCBjYWxsYmFja0Vycm9yLCBwZXJtaXNzaW9ucyk7Ci0KLSAgICBpZiAobV9kYXRh
YmFzZS0+ZGVsZXRlZCgpKQotICAgICAgICBzdGF0ZW1lbnQtPnNldERhdGFiYXNlRGVsZXRlZEVy
cm9yKG1fZGF0YWJhc2UuZ2V0KCkpOwotCi0gICAgZW5xdWV1ZVN0YXRlbWVudChzdGF0ZW1lbnQp
OwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjplbnF1ZXVlU3RhdGVtZW50KFBhc3NSZWZQdHI8
U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3Rh
dGVtZW50TXV0ZXgpOwotICAgIG1fc3RhdGVtZW50UXVldWUuYXBwZW5kKHN0YXRlbWVudCk7Ci19
Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1jb25zdCBjaGFyKiBTUUxUcmFuc2FjdGlvbjo6ZGVidWdT
dGVwTmFtZShTUUxUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25TdGVwTWV0aG9kIHN0ZXApCi17Ci0g
ICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9jaykKLSAgICAgICAgcmV0
dXJuICJhY3F1aXJlTG9jayI7Ci0gICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246
Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCkKLSAgICAgICAgcmV0dXJuICJvcGVuVHJhbnNh
Y3Rpb25BbmRQcmVmbGlnaHQiOwotICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9u
OjpydW5TdGF0ZW1lbnRzKQotICAgICAgICByZXR1cm4gInJ1blN0YXRlbWVudHMiOwotICAgIGVs
c2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KQotICAg
ICAgICByZXR1cm4gInBvc3RmbGlnaHRBbmRDb21taXQiOwotICAgIGVsc2UgaWYgKHN0ZXAgPT0g
JlNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2spCi0g
ICAgICAgIHJldHVybiAiY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIjsKLSAg
ICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2Fs
bGJhY2spCi0gICAgICAgIHJldHVybiAiZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2siOwotICAg
IGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrKQotICAgICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2siOwotICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVt
ZW50Q2FsbGJhY2spCi0gICAgICAgIHJldHVybiAiZGVsaXZlclN0YXRlbWVudENhbGxiYWNrIjsK
LSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVh
c2VDYWxsYmFjaykKLSAgICAgICAgcmV0dXJuICJkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNr
IjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3ND
YWxsYmFjaykKLSAgICAgICAgcmV0dXJuICJkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrIjsKLSAgICBl
bHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxi
YWNrKQotICAgICAgICByZXR1cm4gImNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayI7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gIlVOS05PV04iOwotfQotI2VuZGlmCi0KLXZvaWQgU1FMVHJh
bnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFiYXNlKCkKLXsK
LSAgICBpZiAobV9kYXRhYmFzZS0+b3BlbmVkKCkgJiYgIW1fZGF0YWJhc2UtPmlzSW50ZXJydXB0
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdhcyBzdG9w
cGVkLCBkb24ndCBkbyBhbnl0aGluZyBhbmQgY2FuY2VsIHF1ZXVlZCB3b3JrCi0gICAgTE9HKFN0
b3JhZ2VBUEksICJEYXRhYmFzZSB3YXMgc3RvcHBlZCBvciBpbnRlcnJ1cHRlZCAtIGNhbmNlbGxp
bmcgd29yayBmb3IgdGhpcyB0cmFuc2FjdGlvbiIpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3N0YXRlbWVudE11dGV4KTsKLSAgICBtX3N0YXRlbWVudFF1ZXVlLmNsZWFyKCk7Ci0gICAgbV9u
ZXh0U3RlcCA9IDA7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSB1bm5lZWRlZCBjYWxsYmFja3MsIHRv
IGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCi0gICAgbV9jYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsK
LSAgICBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsKLSAgICBtX2Vycm9yQ2FsbGJh
Y2tXcmFwcGVyLmNsZWFyKCk7Ci0KLSAgICAvLyBUaGUgbmV4dCBzdGVwcyBzaG91bGQgYmUgZXhl
Y3V0ZWQgb25seSBpZiB3ZSdyZSBvbiB0aGUgREIgdGhyZWFkLgotICAgIGlmIChjdXJyZW50VGhy
ZWFkKCkgIT0gZGF0YWJhc2UoKS0+ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkt
PmdldFRocmVhZElEKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBjdXJyZW50IFNR
TGl0ZSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgc3RvcHBlZCwgYXMgd2VsbAotICAgIGlmIChtX3Nx
bGl0ZVRyYW5zYWN0aW9uKSB7Ci0gICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPnN0b3AoKTsK
LSAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwotICAgIH0KLQotICAgIGlmICht
X2xvY2tBY3F1aXJlZCkKLSAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRv
cigpLT5yZWxlYXNlTG9jayh0aGlzKTsKLX0KLQotCi1ib29sIFNRTFRyYW5zYWN0aW9uOjpwZXJm
b3JtTmV4dFN0ZXAoKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiU3RlcCAlc1xuIiwgZGVidWdT
dGVwTmFtZShtX25leHRTdGVwKSk7Ci0KLSAgICBBU1NFUlQobV9uZXh0U3RlcCA9PSAmU1FMVHJh
bnNhY3Rpb246OmFjcXVpcmVMb2NrIHx8Ci0gICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRy
YW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgfHwKLSAgICAgICAgICAgbV9u
ZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHMgfHwKLSAgICAgICAgICAg
bV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRDb21taXQgfHwKLSAg
ICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nl
c3NDYWxsYmFjayB8fAotICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6
Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKTsKLQotICAgIGNoZWNrQW5kSGFu
ZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFiYXNlKCk7Ci0KLSAgICBpZiAobV9uZXh0U3RlcCkK
LSAgICAgICAgKHRoaXMtPiptX25leHRTdGVwKSgpOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8g
bmV4dFN0ZXAgYWZ0ZXIgcGVyZm9ybWluZyB0aGUgYWJvdmUgc3RlcCwgdGhlIHRyYW5zYWN0aW9u
IGlzIGNvbXBsZXRlCi0gICAgcmV0dXJuICFtX25leHRTdGVwOwotfQotCi12b2lkIFNRTFRyYW5z
YWN0aW9uOjpwZXJmb3JtUGVuZGluZ0NhbGxiYWNrKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IkNhbGxiYWNrICVzXG4iLCBkZWJ1Z1N0ZXBOYW1lKG1fbmV4dFN0ZXApKTsKLQotICAgIEFTU0VS
VChtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJh
Y2sgfHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgfHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FM
VHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjayB8fAotICAgICAgICAgICBtX25l
eHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjayB8
fAotICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nl
c3NDYWxsYmFjayk7Ci0KLSAgICBjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRh
YmFzZSgpOwotCi0gICAgaWYgKG1fbmV4dFN0ZXApCi0gICAgICAgICh0aGlzLT4qbV9uZXh0U3Rl
cCkoKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1No
dXR0aW5nRG93bigpCi17Ci0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZSgp
LT5kYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7Ci0K
LSAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCByb2xs
IGl0IGJhY2sgaGVyZSwgc2luY2UgdGhpcyBpcyBvdXIgbGFzdAotICAgIC8vIG9wb3J0dW5pdHkg
dG8gZG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyB0cmFuc2FjdGlvbiBvbiB0aGUgREIgdGhy
ZWFkLgotICAgIC8vIENsZWFyaW5nIG1fc3FsaXRlVHJhbnNhY3Rpb24gaW52b2tlcyBTUUxpdGVU
cmFuc2FjdGlvbidzIGRlc3RydWN0b3Igd2hpY2ggZG9lcyBqdXN0IHRoYXQuCi0gICAgbV9zcWxp
dGVUcmFuc2FjdGlvbi5jbGVhcigpOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjphY3F1aXJl
TG9jaygpCi17Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5hY3F1
aXJlTG9jayh0aGlzKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6bG9ja0FjcXVpcmVkKCkK
LXsKLSAgICBtX2xvY2tBY3F1aXJlZCA9IHRydWU7Ci0gICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFu
c2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0OwotICAgIExPRyhTdG9yYWdlQVBJ
LCAiU2NoZWR1bGluZyBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgaW1tZWRpYXRlbHkgZm9y
IHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5z
YWN0aW9uU3RlcCh0aGlzLCB0cnVlKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6b3BlblRy
YW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCkKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0
ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwotICAgIEFTU0VSVChtX2xvY2tB
Y3F1aXJlZCk7Ci0KLSAgICBMT0coU3RvcmFnZUFQSSwgIk9wZW5pbmcgYW5kIHByZWZsaWdodGlu
ZyB0cmFuc2FjdGlvbiAlcCIsIHRoaXMpOwotCi0gICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdhcyBk
ZWxldGVkLCBqdW1wIHRvIHRoZSBlcnJvciBjYWxsYmFjawotICAgIGlmIChtX2RhdGFiYXNlLT5k
ZWxldGVkKCkpIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJl
c3VsdCgxLCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOwotICAgICAgICBtX3RyYW5zYWN0aW9u
RXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVuYWJsZSB0
byBvcGVuIGEgdHJhbnNhY3Rpb24sIGJlY2F1c2UgdGhlIHVzZXIgZGVsZXRlZCB0aGUgZGF0YWJh
c2UiKTsKLSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIG1heGltdW0gdXNhZ2UgZm9yIHRoaXMgdHJh
bnNhY3Rpb24gaWYgdGhpcyB0cmFuc2FjdGlvbnMgaXMgbm90IHJlYWQtb25seQotICAgIGlmICgh
bV9yZWFkT25seSkKLSAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5zZXRNYXhp
bXVtU2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6ZSgpKTsKLQotICAgIEFTU0VSVCghbV9zcWxp
dGVUcmFuc2FjdGlvbik7Ci0gICAgbV9zcWxpdGVUcmFuc2FjdGlvbiA9IGFkb3B0UHRyKG5ldyBT
UUxpdGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCBtX3JlYWRPbmx5
KSk7Ci0KLSAgICBtX2RhdGFiYXNlLT5yZXNldERlbGV0ZXMoKTsKLSAgICBtX2RhdGFiYXNlLT5k
aXNhYmxlQXV0aG9yaXplcigpOwotICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmJlZ2luKCk7Ci0g
ICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOwotCi0gICAgLy8gVHJhbnNhY3Rpb24g
U3RlcHMgMSsyIC0gT3BlbiBhIHRyYW5zYWN0aW9uIHRvIHRoZSBkYXRhYmFzZSwganVtcGluZyB0
byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhhdCBmYWlscwotICAgIGlmICghbV9zcWxpdGVUcmFu
c2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3Fs
aXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgICAgIG1fZGF0YWJh
c2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMiwgU1FMRXJyb3I6OkRBVEFCQVNFX0VS
UiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSk7Ci0gICAgICAgIG1f
dHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VS
UiwgInVuYWJsZSB0byBiZWdpbiB0cmFuc2FjdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICAgICAgaGFuZGxlVHJhbnNh
Y3Rpb25FcnJvcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBOb3Rl
OiBXZSBpbnRlbnRpb25hbGx5IHJldHJpZXZlIHRoZSBhY3R1YWwgdmVyc2lvbiBldmVuIHdpdGgg
YW4gZW1wdHkgZXhwZWN0ZWQgdmVyc2lvbi4KLSAgICAvLyBJbiBtdWx0aS1wcm9jZXNzIGJyb3dz
ZXJzLCB3ZSB0YWtlIHRoaXMgb3Bwb3J0aW51dGl5IHRvIHVwZGF0ZSB0aGUgY2FjaGVkIHZhbHVl
IGZvcgotICAgIC8vIHRoZSBhY3R1YWwgdmVyc2lvbi4gSW4gc2luZ2xlLXByb2Nlc3MgYnJvd3Nl
cnMsIHRoaXMgaXMganVzdCBhIG1hcCBsb29rdXAuCi0gICAgU3RyaW5nIGFjdHVhbFZlcnNpb247
Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5nZXRBY3R1YWxWZXJzaW9uRm9yVHJhbnNhY3Rpb24oYWN0
dWFsVmVyc2lvbikpIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlv
blJlc3VsdCgzLCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRh
YmFzZSgpLmxhc3RFcnJvcigpKTsKLSAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJy
b3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAidW5hYmxlIHRvIHJlYWQgdmVyc2lv
biIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRh
YmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0
YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRo
b3JpemVyKCk7Ci0gICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICAgICAg
bV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOwotICAgICAgICBoYW5kbGVUcmFuc2FjdGlv
bkVycm9yKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2hhc1ZlcnNpb25N
aXNtYXRjaCA9ICFtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKS5pc0VtcHR5KCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIChtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKSAh
PSBhY3R1YWxWZXJzaW9uKTsKLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXBzIDMgLSBQZWZvcm0g
cHJlZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGV5IGZh
aWwKLSAgICBpZiAobV93cmFwcGVyICYmICFtX3dyYXBwZXItPnBlcmZvcm1QcmVmbGlnaHQodGhp
cykpIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKLSAgICAgICAg
bV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwotICAgICAgICBtX2RhdGFiYXNlLT5lbmFibGVB
dXRob3JpemVyKCk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IG1fd3JhcHBlci0+c3Fs
RXJyb3IoKTsKLSAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9uRXJyb3IpIHsKLSAgICAgICAgICAg
IG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoNCwgU1FMRXJyb3I6OlVO
S05PV05fRVJSLCAwKTsKLSAgICAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9y
OjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5rbm93biBlcnJvciBvY2N1cnJlZCBk
dXJpbmcgdHJhbnNhY3Rpb24gcHJlZmxpZ2h0Iik7Ci0gICAgICAgIH0KLSAgICAgICAgaGFuZGxl
VHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBUcmFuc2FjdGlvbiBTdGVwIDQgLSBJbnZva2UgdGhlIHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdp
dGggdGhlIG5ldyBTUUxUcmFuc2FjdGlvbiBvYmplY3QKLSAgICBtX25leHRTdGVwID0gJlNRTFRy
YW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjazsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIlNjaGVkdWxpbmcgZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9u
ICVwXG4iLCB0aGlzKTsKLSAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJh
Y2sodGhpcyk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkNh
bGxiYWNrKCkKLXsKLSAgICBib29sIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gZmFsc2U7
Ci0KLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2NhbGxi
YWNrV3JhcHBlci51bndyYXAoKTsKLSAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgbV9leGVj
dXRlU3FsQWxsb3dlZCA9IHRydWU7Ci0gICAgICAgIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNr
ID0gIWNhbGxiYWNrLT5oYW5kbGVFdmVudCh0aGlzKTsKLSAgICAgICAgbV9leGVjdXRlU3FsQWxs
b3dlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNSAtIElmIHRo
ZSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3YXMgbnVsbCBvciByYWlzZWQgYW4gZXhjZXB0aW9uLCBq
dW1wIHRvIHRoZSBlcnJvciBjYWxsYmFjawotICAgIGlmIChzaG91bGREZWxpdmVyRXJyb3JDYWxs
YmFjaykgewotICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0
KDUsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJv
ciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidGhlIFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2sgd2FzIG51bGwgb3IgdGhyZXcgYW4gZXhjZXB0aW9uIik7Ci0gICAgICAg
IGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
c2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKTsKLQotICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0
VHJhbnNhY3Rpb25SZXN1bHQoMCwgLTEsIDApOyAvLyBPSwotfQotCi12b2lkIFNRTFRyYW5zYWN0
aW9uOjpzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygpCitTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNh
Y3Rpb24oRGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNh
bGxiYWNrLAorICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJv
ckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLAorICAg
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5
KQorICAgIDogU1FMVHJhbnNhY3Rpb25CYWNrZW5kKGRiLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFj
aywgc3VjY2Vzc0NhbGxiYWNrLCB3cmFwcGVyLCByZWFkT25seSkKIHsKLSAgICBtX25leHRTdGVw
ID0gJlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzOwotICAgIExPRyhTdG9yYWdlQVBJLCAi
U2NoZWR1bGluZyBydW5TdGF0ZW1lbnRzIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0g
ICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7CiB9CiAKLXZvaWQg
U1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHMoKQorU1FMVHJhbnNhY3Rpb24qIFNRTFRyYW5z
YWN0aW9uOjpmcm9tKFNRTFRyYW5zYWN0aW9uQmFja2VuZCogYmFja2VuZCkKIHsKLSAgICBBU1NF
UlQobV9sb2NrQWNxdWlyZWQpOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgYSBzZXJpZXMgb2Ygc3Rh
dGVtZW50cyBxdWV1ZWQgdXAgdGhhdCBhcmUgYWxsIHN1Y2Nlc3NmdWwgYW5kIGhhdmUgbm8gYXNz
b2NpYXRlZAotICAgIC8vIFNRTFN0YXRlbWVudENhbGxiYWNrIG9iamVjdHMsIHRoZW4gd2UgY2Fu
IGJ1cm4gdGhyb3VnaCB0aGUgcXVldWUKLSAgICBkbyB7Ci0gICAgICAgIGlmIChtX3Nob3VsZFJl
dHJ5Q3VycmVudFN0YXRlbWVudCAmJiAhbV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFj
a0J5U3FsaXRlKCkpIHsKLSAgICAgICAgICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50
ID0gZmFsc2U7Ci0gICAgICAgICAgICAvLyBGSVhNRSAtIEFub3RoZXIgcGxhY2UgdGhhdCBuZWVk
cyBmaXhpbmcgdXAgYWZ0ZXIgPHJkYXI6Ly9wcm9ibGVtLzU2Mjg0Njg+IGlzIGFkZHJlc3NlZC4K
LSAgICAgICAgICAgIC8vIFNlZSA6Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCgpIGZvciBk
aXNjdXNzaW9uCi0KLSAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBtYXhpbXVtIHNpemUgaGVyZSwg
YXMgaXQgd2FzIGluY3JlYXNlZCB0byBhbGxvdyB1cyB0byByZXRyeSB0aGlzIHN0YXRlbWVudC4K
LSAgICAgICAgICAgIC8vIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50IGlzIHNldCB0byB0
cnVlIG9ubHkgd2hlbiBhIHN0YXRlbWVudCBleGNlZWRzCi0gICAgICAgICAgICAvLyB0aGUgcXVv
dGEsIHdoaWNoIGNhbiBoYXBwZW4gb25seSBpbiBhIHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24uIFRo
ZXJlZm9yZSwgdGhlcmUKLSAgICAgICAgICAgIC8vIGlzIG5vIG5lZWQgdG8gY2hlY2sgaGVyZSBp
ZiB0aGUgdHJhbnNhY3Rpb24gaXMgcmVhZC13cml0ZS4KLSAgICAgICAgICAgIG1fZGF0YWJhc2Ut
PnNxbGl0ZURhdGFiYXNlKCkuc2V0TWF4aW11bVNpemUobV9kYXRhYmFzZS0+bWF4aW11bVNpemUo
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0
ZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBydW4sIGZhaWxlZCBkdWUgdG8gcXVvdGEgY29uc3RyYWlu
dHMsIGFuZCB3ZSdyZSBub3QgcmV0cnlpbmcgaXQsCi0gICAgICAgICAgICAvLyB0aGF0IG1lYW5z
IGl0IGVuZGVkIGluIGFuIGVycm9yLiAgSGFuZGxlIGl0IG5vdwotICAgICAgICAgICAgaWYgKG1f
Y3VycmVudFN0YXRlbWVudCAmJiBtX2N1cnJlbnRTdGF0ZW1lbnQtPmxhc3RFeGVjdXRpb25GYWls
ZWREdWVUb1F1b3RhKCkpIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVDdXJyZW50U3RhdGVtZW50
RXJyb3IoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gT3RoZXJ3aXNlLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHN0YXRlbWVudAotICAgICAg
ICAgICAgZ2V0TmV4dFN0YXRlbWVudCgpOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAocnVuQ3Vy
cmVudFN0YXRlbWVudCgpKTsKLQotICAgIC8vIElmIHJ1bkN1cnJlbnRTdGF0ZW1lbnQoKSByZXR1
cm5lZCBmYWxzZSwgdGhhdCBtZWFucyBlaXRoZXIgdGhlcmUgd2FzIG5vIGN1cnJlbnQgc3RhdGVt
ZW50IHRvIHJ1biwKLSAgICAvLyBvciB0aGUgY3VycmVudCBzdGF0ZW1lbnQgcmVxdWlyZXMgYSBj
YWxsYmFjayB0byBjb21wbGV0ZS4gIEluIHRoZSBsYXRlciBjYXNlLCBpdCBhbHNvIHNjaGVkdWxl
ZAotICAgIC8vIHRoZSBjYWxsYmFjayBvciBwZXJmb3JtZWQgYW55IG90aGVyIGFkZGl0aW9uYWwg
d29yayBzbyB3ZSBjYW4gcmV0dXJuCi0gICAgaWYgKCFtX2N1cnJlbnRTdGF0ZW1lbnQpCi0gICAg
ICAgIHBvc3RmbGlnaHRBbmRDb21taXQoKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6Z2V0
TmV4dFN0YXRlbWVudCgpCi17Ci0gICAgbV9jdXJyZW50U3RhdGVtZW50ID0gMDsKLQotICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3N0YXRlbWVudE11dGV4KTsKLSAgICBpZiAoIW1fc3RhdGVtZW50
UXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlbWVudCA9IG1fc3RhdGVt
ZW50UXVldWUudGFrZUZpcnN0KCk7Ci0gICAgfQotfQotCi1ib29sIFNRTFRyYW5zYWN0aW9uOjpy
dW5DdXJyZW50U3RhdGVtZW50KCkKLXsKLSAgICBpZiAoIW1fY3VycmVudFN0YXRlbWVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRob3JpemVyKCk7
Ci0KLSAgICBpZiAobV9oYXNWZXJzaW9uTWlzbWF0Y2gpCi0gICAgICAgIG1fY3VycmVudFN0YXRl
bWVudC0+c2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcihtX2RhdGFiYXNlLmdldCgpKTsKLQotICAg
IGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQtPmV4ZWN1dGUobV9kYXRhYmFzZS5nZXQoKSkpIHsKLSAg
ICAgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKSkgewotICAg
ICAgICAgICAgLy8gRmxhZyB0aGlzIHRyYW5zYWN0aW9uIGFzIGhhdmluZyBjaGFuZ2VkIHRoZSBk
YXRhYmFzZSBmb3IgbGF0ZXIgZGVsZWdhdGUgbm90aWZpY2F0aW9uCi0gICAgICAgICAgICBtX21v
ZGlmaWVkRGF0YWJhc2UgPSB0cnVlOwotICAgICAgICAgICAgLy8gQWxzbyBkaXJ0eSB0aGUgc2l6
ZSBvZiB0aGlzIGRhdGFiYXNlIGZpbGUgZm9yIGNhbGN1bGF0aW5nIHF1b3RhIHVzYWdlCi0gICAg
ICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3RhdGVt
ZW50KGRhdGFiYXNlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fY3VycmVudFN0YXRl
bWVudC0+aGFzU3RhdGVtZW50Q2FsbGJhY2soKSkgewotICAgICAgICAgICAgbV9uZXh0U3RlcCA9
ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrOwotICAgICAgICAgICAg
TE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjayBmb3Ig
dHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwotICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1
bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX2N1cnJl
bnRTdGF0ZW1lbnQtPmxhc3RFeGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkpIHsKLSAgICAgICAg
bV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFj
azsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJRdW90YUluY3Jl
YXNlQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9kYXRh
YmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaGFuZGxlQ3VycmVudFN0YXRlbWVudEVycm9yKCk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmhhbmRsZUN1cnJlbnRT
dGF0ZW1lbnRFcnJvcigpCi17Ci0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcHMgNi5lcnJvciAtIENh
bGwgdGhlIHN0YXRlbWVudCdzIGVycm9yIGNhbGxiYWNrLCBidXQgaWYgdGhlcmUgd2FzIG5vIGVy
cm9yIGNhbGxiYWNrLAotICAgIC8vIG9yIHRoZSB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2ss
IGp1bXAgdG8gdGhlIHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrCi0gICAgaWYgKG1fY3VycmVu
dFN0YXRlbWVudC0+aGFzU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpICYmICFtX3NxbGl0ZVRyYW5z
YWN0aW9uLT53YXNSb2xsZWRCYWNrQnlTcWxpdGUoKSkgewotICAgICAgICBtX25leHRTdGVwID0g
JlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2s7Ci0gICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sgZm9yIHRyYW5z
YWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2Fj
dGlvbkNhbGxiYWNrKHRoaXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25F
cnJvciA9IG1fY3VycmVudFN0YXRlbWVudC0+c3FsRXJyb3IoKTsKLSAgICAgICAgaWYgKCFtX3Ry
YW5zYWN0aW9uRXJyb3IpIHsKLSAgICAgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRy
YW5zYWN0aW9uUmVzdWx0KDEsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIDApOwotICAgICAgICAg
ICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJB
U0VfRVJSLCAidGhlIHN0YXRlbWVudCBmYWlsZWQgdG8gZXhlY3V0ZSIpOwotICAgICAgICB9Ci0g
ICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwotICAgIH0KLX0KLQotdm9pZCBT
UUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrKCkKLXsKLSAgICBBU1NFUlQo
bV9jdXJyZW50U3RhdGVtZW50KTsKLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNi42IGFuZCA2
LjMoZXJyb3IpIC0gSWYgdGhlIHN0YXRlbWVudCBjYWxsYmFjayB3ZW50IHdyb25nLCBqdW1wIHRv
IHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjawotICAgIC8vIE90aGVyd2lzZSwgY29udGlu
dWUgdG8gbG9vcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgcXVldWUKLSAgICBtX2V4ZWN1dGVTcWxB
bGxvd2VkID0gdHJ1ZTsKLSAgICBib29sIHJlc3VsdCA9IG1fY3VycmVudFN0YXRlbWVudC0+cGVy
Zm9ybUNhbGxiYWNrKHRoaXMpOwotICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKLQot
ICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNh
Y3Rpb25SZXN1bHQoMiwgU1FMRXJyb3I6OlVOS05PV05fRVJSLCAwKTsKLSAgICAgICAgbV90cmFu
c2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ0
aGUgc3RhdGVtZW50IGNhbGxiYWNrIHJhaXNlZCBhbiBleGNlcHRpb24gb3Igc3RhdGVtZW50IGVy
cm9yIGNhbGxiYWNrIGRpZCBub3QgcmV0dXJuIGZhbHNlIik7Ci0gICAgICAgIGhhbmRsZVRyYW5z
YWN0aW9uRXJyb3IodHJ1ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNjaGVkdWxlVG9SdW5TdGF0
ZW1lbnRzKCk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUluY3JlYXNl
Q2FsbGJhY2soKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRTdGF0ZW1lbnQpOwotICAgIEFTU0VS
VCghbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQpOwotCi0gICAgbV9zaG91bGRSZXRyeUN1
cnJlbnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGNl
ZWRRdW90YShkYXRhYmFzZSgpKTsKLQotICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246
OnJ1blN0YXRlbWVudHM7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIHJ1blN0YXRl
bWVudHMgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICBtX2RhdGFiYXNlLT5zY2hl
ZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9z
dGZsaWdodEFuZENvbW1pdCgpCi17Ci0gICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKLQotICAg
IC8vIFRyYW5zYWN0aW9uIFN0ZXAgNyAtIFBlZm9ybSBwb3N0ZmxpZ2h0IHN0ZXBzLCBqdW1waW5n
IHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGV5IGZhaWwKLSAgICBpZiAobV93cmFwcGVyICYm
ICFtX3dyYXBwZXItPnBlcmZvcm1Qb3N0ZmxpZ2h0KHRoaXMpKSB7Ci0gICAgICAgIG1fdHJhbnNh
Y3Rpb25FcnJvciA9IG1fd3JhcHBlci0+c3FsRXJyb3IoKTsKLSAgICAgICAgaWYgKCFtX3RyYW5z
YWN0aW9uRXJyb3IpIHsKLSAgICAgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5z
YWN0aW9uUmVzdWx0KDMsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7Ci0gICAgICAgICAgICBt
X3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VS
UiwgInVua25vd24gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRyYW5zYWN0aW9uIHBvc3RmbGlnaHQi
KTsKLSAgICAgICAgfQotICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGZhbHNlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRyYW5zYWN0b24gU3RlcCA4KzkgLSBDb21t
aXQgdGhlIHRyYW5zYWN0aW9uLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGF0
IGZhaWxzCi0gICAgQVNTRVJUKG1fc3FsaXRlVHJhbnNhY3Rpb24pOwotCi0gICAgbV9kYXRhYmFz
ZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKLSAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5jb21taXQo
KTsKLSAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7Ci0KLSAgICAvLyBJZiB0aGUg
Y29tbWl0IGZhaWxlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUgbWFya2VkIGFzICJp
biBwcm9ncmVzcyIKLSAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7
Ci0gICAgICAgIGlmIChtX3dyYXBwZXIpCi0gICAgICAgICAgICBtX3dyYXBwZXItPmhhbmRsZUNv
bW1pdEZhaWxlZEFmdGVyUG9zdGZsaWdodCh0aGlzKTsKLSAgICAgICAgbV9zdWNjZXNzQ2FsbGJh
Y2tXcmFwcGVyLmNsZWFyKCk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5z
YWN0aW9uUmVzdWx0KDQsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0
ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOwotICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBT
UUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJ1bmFibGUgdG8gY29tbWl0
IHRyYW5zYWN0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNl
LT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgaGFuZGxlVHJhbnNh
Y3Rpb25FcnJvcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2RhdGFi
YXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgwLCAtMSwgMCk7IC8vIE9LCi0KLSAg
ICAvLyBWYWN1dW0gdGhlIGRhdGFiYXNlIGlmIGFueXRoaW5nIHdhcyBkZWxldGVkLgotICAgIGlm
IChtX2RhdGFiYXNlLT5oYWREZWxldGVzKCkpCi0gICAgICAgIG1fZGF0YWJhc2UtPmluY3JlbWVu
dGFsVmFjdXVtSWZOZWVkZWQoKTsKLQotICAgIC8vIFRoZSBjb21taXQgd2FzIHN1Y2Nlc3NmdWwu
IElmIHRoZSB0cmFuc2FjdGlvbiBtb2RpZmllZCB0aGlzIGRhdGFiYXNlLCBub3RpZnkgdGhlIGRl
bGVnYXRlcy4KLSAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlKQotICAgICAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKGRhdGFiYXNl
KCkpOwotCi0gICAgLy8gTm93IHJlbGVhc2Ugb3VyIHVubmVlZGVkIGNhbGxiYWNrcywgdG8gYnJl
YWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7
Ci0KLSAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEwIC0gRGVsaXZlciBzdWNjZXNzIGNhbGxiYWNr
LCBpZiB0aGVyZSBpcyBvbmUKLSAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmhhc0Nh
bGxiYWNrKCkpIHsKLSAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clN1Y2Nlc3NDYWxsYmFjazsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRl
bGl2ZXJTdWNjZXNzQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAg
ICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOwotICAgIH0g
ZWxzZQotICAgICAgICBjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2soKTsKLX0KLQotdm9pZCBT
UUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjaygpCi17Ci0gICAgLy8gVHJhbnNh
Y3Rpb24gU3RlcCAxMCAtIERlbGl2ZXIgc3VjY2VzcyBjYWxsYmFjawotICAgIFJlZlB0cjxWb2lk
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci51bndy
YXAoKTsKLSAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKQotICAgICAgICBzdWNjZXNzQ2FsbGJhY2st
PmhhbmRsZUV2ZW50KCk7Ci0KLSAgICAvLyBTY2hlZHVsZSBhICJwb3N0LXN1Y2Nlc3MgY2FsbGJh
Y2siIHN0ZXAgdG8gcmV0dXJuIGNvbnRyb2wgdG8gdGhlIGRhdGFiYXNlIHRocmVhZCBpbiBjYXNl
IHRoZXJlCi0gICAgLy8gYXJlIGZ1cnRoZXIgdHJhbnNhY3Rpb25zIHF1ZXVlZCB1cCBmb3IgdGhp
cyBEYXRhYmFzZQotICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRl
clN1Y2Nlc3NDYWxsYmFjazsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51
cEFmdGVyU3VjY2Vzc0NhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAg
bV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Ci19Ci0KLXZvaWQgU1FM
VHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjaygpCi17Ci0gICAgQVNTRVJU
KG1fbG9ja0FjcXVpcmVkKTsKLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTEgLSBFbmQgdHJh
bnNhY3Rpb24gc3RlcHMKLSAgICAvLyBUaGVyZSBpcyBubyBuZXh0IHN0ZXAKLSAgICBMT0coU3Rv
cmFnZUFQSSwgIlRyYW5zYWN0aW9uICVwIGlzIGNvbXBsZXRlXG4iLCB0aGlzKTsKLSAgICBBU1NF
UlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwotICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICBtX25leHRTdGVwID0gMDsK
LQotICAgIC8vIFJlbGVhc2UgdGhlIGxvY2sgb24gdGhpcyBkYXRhYmFzZQotICAgIG1fZGF0YWJh
c2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7Ci19Ci0KLXZv
aWQgU1FMVHJhbnNhY3Rpb246OmhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoYm9vbCBpbkNhbGxiYWNr
KQotewotICAgIGlmIChtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCkpIHsKLSAg
ICAgICAgaWYgKGluQ2FsbGJhY2spCi0gICAgICAgICAgICBkZWxpdmVyVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9uZXh0U3RlcCA9ICZT
UUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKLSAgICAgICAg
ICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgICAgICAgICBtX2RhdGFi
YXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2sodGhpcyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE5vIGVycm9yIGNhbGxiYWNrLCBzbyBmYXN0LWZv
cndhcmQgdG86Ci0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxiYWNrIHRoZSB0cmFu
c2FjdGlvbi4KLSAgICBpZiAoaW5DYWxsYmFjaykgewotICAgICAgICBtX25leHRTdGVwID0gJlNR
TFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7Ci0gICAg
ICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9kYXRh
YmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7Ci0gICAgfQotfQotCi12
b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKLXsK
LSAgICBBU1NFUlQobV90cmFuc2FjdGlvbkVycm9yKTsKLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0
ZXAgMTIgLSBJZiBleGlzdHMsIGludm9rZSBlcnJvciBjYWxsYmFjayB3aXRoIHRoZSBsYXN0Ci0g
ICAgLy8gZXJyb3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9uLgotICAgIFJl
ZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX2Vycm9y
Q2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOwotICAgIGlmIChlcnJvckNhbGxiYWNrKQotICAgICAg
ICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3RyYW5zYWN0aW9uRXJyb3IuZ2V0KCkpOwot
Ci0gICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrOwotICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBjbGVhbnVw
QWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlz
KTsKLSAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzKTsKLX0KLQot
dm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
KCkKLXsKLSAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOwotCi0gICAgbV9kYXRhYmFzZS0+ZGlz
YWJsZUF1dGhvcml6ZXIoKTsKLSAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbikgewotICAgICAg
ICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gUm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLgotICAg
ICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwotCi0gICAgICAgIEFTU0VSVCgh
bV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0g
ICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICB9Ci0gICAgbV9kYXRhYmFz
ZS0+ZW5hYmxlQXV0aG9yaXplcigpOwotCi0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIEFu
eSBzdGlsbC1wZW5kaW5nIHN0YXRlbWVudHMgaW4gdGhlIHRyYW5zYWN0aW9uIGFyZSBkaXNjYXJk
ZWQuCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zdGF0ZW1lbnRNdXRleCk7
Ci0gICAgICAgIG1fc3RhdGVtZW50UXVldWUuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICAvLyBUcmFu
c2FjdGlvbiBpcyBjb21wbGV0ZSEgIFRoZXJlIGlzIG5vIG5leHQgc3RlcAotICAgIExPRyhTdG9y
YWdlQVBJLCAiVHJhbnNhY3Rpb24gJXAgaXMgY29tcGxldGUgd2l0aCBhbiBlcnJvclxuIiwgdGhp
cyk7Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9u
SW5Qcm9ncmVzcygpKTsKLSAgICBtX25leHRTdGVwID0gMDsKLQotICAgIC8vIE5vdyByZWxlYXNl
IHRoZSBsb2NrIG9uIHRoaXMgZGF0YWJhc2UKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNv
b3JkaW5hdG9yKCktPnJlbGVhc2VMb2NrKHRoaXMpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
UUxUcmFuc2FjdGlvbio+KGJhY2tlbmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFu
c2FjdGlvbi5oCShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDExMCArMjUsMjYg
QEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIFNRTFRy
YW5zYWN0aW9uX2gKICNkZWZpbmUgU1FMVHJhbnNhY3Rpb25faAogCiAjaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKIAotI2luY2x1ZGUgIkRhdGFiYXNlQmFzaWNUeXBlcy5oIgotI2luY2x1ZGUgIlNR
TFN0YXRlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQmFja2VuZC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERhdGFiYXNlOwotY2xhc3MgU1FMRXJyb3I7Ci1jbGFz
cyBTUUxpdGVUcmFuc2FjdGlvbjsKLWNsYXNzIFNRTFN0YXRlbWVudENhbGxiYWNrOwotY2xhc3Mg
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uOwotY2xhc3Mg
U1FMVHJhbnNhY3Rpb25DYWxsYmFjazsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
azsKLWNsYXNzIFNRTFZhbHVlOwotY2xhc3MgVm9pZENhbGxiYWNrOwotCi1jbGFzcyBTUUxUcmFu
c2FjdGlvbldyYXBwZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rp
b25XcmFwcGVyPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U1FMVHJhbnNhY3Rpb25XcmFwcGVy
KCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm1QcmVmbGlnaHQoU1FMVHJhbnNhY3Rpb24q
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm1Qb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9u
KikgPSAwOwotICAgIHZpcnR1YWwgU1FMRXJyb3IqIHNxbEVycm9yKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVDb21taXRGYWlsZWRBZnRlclBvc3RmbGlnaHQoU1FMVHJhbnNh
Y3Rpb24qKSA9IDA7Ci19OwotCi1jbGFzcyBTUUxUcmFuc2FjdGlvbiA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvbj4geworY2xhc3MgU1FMVHJhbnNhY3Rpb24gOiBw
dWJsaWMgU1FMVHJhbnNhY3Rpb25CYWNrZW5kIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3JlYXRlKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0
cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4sIGJvb2wg
cmVhZE9ubHkgPSBmYWxzZSk7CiAKLSAgICB+U1FMVHJhbnNhY3Rpb24oKTsKLQotICAgIHZvaWQg
ZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZh
bHVlPiYgYXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFN0YXRl
bWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgRXhj
ZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBsb2NrQWNxdWlyZWQoKTsKLSAgICBib29sIHBlcmZv
cm1OZXh0U3RlcCgpOwotICAgIHZvaWQgcGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpOwotCi0gICAg
RGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQotICAgIGJv
b2wgaXNSZWFkT25seSgpIHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KLSAgICB2b2lkIG5vdGlmeURh
dGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKTsKKyAgICBzdGF0aWMgU1FMVHJhbnNhY3Rpb24q
IGZyb20oU1FMVHJhbnNhY3Rpb25CYWNrZW5kKik7CiAKIHByaXZhdGU6CiAgICAgU1FMVHJhbnNh
Y3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCiAgICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBl
cj4sIGJvb2wgcmVhZE9ubHkpOwotCi0gICAgdHlwZWRlZiB2b2lkIChTUUxUcmFuc2FjdGlvbjo6
KlRyYW5zYWN0aW9uU3RlcE1ldGhvZCkoKTsKLSAgICBUcmFuc2FjdGlvblN0ZXBNZXRob2QgbV9u
ZXh0U3RlcDsKLQotICAgIHZvaWQgZW5xdWV1ZVN0YXRlbWVudChQYXNzUmVmUHRyPFNRTFN0YXRl
bWVudD4pOwotCi0gICAgdm9pZCBjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRh
YmFzZSgpOwotCi0gICAgdm9pZCBhY3F1aXJlTG9jaygpOwotICAgIHZvaWQgb3BlblRyYW5zYWN0
aW9uQW5kUHJlZmxpZ2h0KCk7Ci0gICAgdm9pZCBkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjaygp
OwotICAgIHZvaWQgc2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKTsKLSAgICB2b2lkIHJ1blN0YXRl
bWVudHMoKTsKLSAgICB2b2lkIGdldE5leHRTdGF0ZW1lbnQoKTsKLSAgICBib29sIHJ1bkN1cnJl
bnRTdGF0ZW1lbnQoKTsKLSAgICB2b2lkIGhhbmRsZUN1cnJlbnRTdGF0ZW1lbnRFcnJvcigpOwot
ICAgIHZvaWQgZGVsaXZlclN0YXRlbWVudENhbGxiYWNrKCk7Ci0gICAgdm9pZCBkZWxpdmVyUXVv
dGFJbmNyZWFzZUNhbGxiYWNrKCk7Ci0gICAgdm9pZCBwb3N0ZmxpZ2h0QW5kQ29tbWl0KCk7Ci0g
ICAgdm9pZCBkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKCk7Ci0gICAgdm9pZCBjbGVhbnVwQWZ0ZXJT
dWNjZXNzQ2FsbGJhY2soKTsKLSAgICB2b2lkIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoYm9vbCBp
bkNhbGxiYWNrKTsKLSAgICB2b2lkIGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsK
LSAgICB2b2lkIGNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwotCi0jaWYg
IUxPR19ESVNBQkxFRAotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWJ1Z1N0ZXBOYW1lKFRyYW5z
YWN0aW9uU3RlcE1ldGhvZCk7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IG1f
Y3VycmVudFN0YXRlbWVudDsKLQotICAgIGJvb2wgbV9leGVjdXRlU3FsQWxsb3dlZDsKLQotICAg
IFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25X
cmFwcGVyPiBtX3dyYXBwZXI7Ci0gICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s+IG1fY2FsbGJhY2tXcmFwcGVyOwotICAgIFNRTENhbGxiYWNrV3JhcHBlcjxWb2lk
Q2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlcjsKLSAgICBTUUxDYWxsYmFja1dyYXBw
ZXI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyOwot
ICAgIFJlZlB0cjxTUUxFcnJvcj4gbV90cmFuc2FjdGlvbkVycm9yOwotICAgIGJvb2wgbV9zaG91
bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQ7Ci0gICAgYm9vbCBtX21vZGlmaWVkRGF0YWJhc2U7Ci0g
ICAgYm9vbCBtX2xvY2tBY3F1aXJlZDsKLSAgICBib29sIG1fcmVhZE9ubHk7Ci0gICAgYm9vbCBt
X2hhc1ZlcnNpb25NaXNtYXRjaDsKLQotICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7Ci0gICAg
RGVxdWU8UmVmUHRyPFNRTFN0YXRlbWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOwotCi0gICAgT3du
UHRyPFNRTGl0ZVRyYW5zYWN0aW9uPiBtX3NxbGl0ZVRyYW5zYWN0aW9uOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAkocmV2aXNpb24g
MTQyMDQ0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uLmNwcDoxNDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uQmFja2VuZC5jcHAJKHJldmlzaW9uIDE0MjA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQmFja2Vu
ZC5oIgogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIApAQCAtNDMsNiArNDMsNyBAQAogI2lu
Y2x1ZGUgIlNRTFN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgi
CiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFRy
YW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIgogI2luY2x1
ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oIgpAQCAtNjEsMTUgKzYyLDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFF1
b3RhU2l6ZUluY3JlYXMKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uPiBTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBi
b29sIHJlYWRPbmx5KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb24o
ZGIsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIHdyYXBwZXIsIHJl
YWRPbmx5KSk7Ci19Ci0KLVNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSog
ZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2Fs
bGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJl
YWRPbmx5KQotICAgIDogbV9uZXh0U3RlcCgmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrKQor
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQoRGF0YWJhc2UqIGRi
LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLAorICAgIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVm
UHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLAorICAgIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQorICAgIDogbV9uZXh0U3Rl
cCgmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjphY3F1aXJlTG9jaykKICAgICAsIG1fZXhlY3V0ZVNx
bEFsbG93ZWQoZmFsc2UpCiAgICAgLCBtX2RhdGFiYXNlKGRiKQogICAgICwgbV93cmFwcGVyKHdy
YXBwZXIpCkBAIC04NSwxMiArODEsMTIgQEAgU1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9u
KERhdGFiYXNlKgogICAgIEFTU0VSVChtX2RhdGFiYXNlKTsKIH0KIAotU1FMVHJhbnNhY3Rpb246
On5TUUxUcmFuc2FjdGlvbigpCitTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6On5TUUxUcmFuc2FjdGlv
bkJhY2tlbmQoKQogewogICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7CiB9CiAKLXZv
aWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQs
IGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1l
bnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
az4gY2FsbGJhY2tFcnJvciwgRXhjZXB0aW9uQ29kZSYgZSkKK3ZvaWQgU1FMVHJhbnNhY3Rpb25C
YWNrZW5kOjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0
b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+
IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGNhbGxiYWNr
RXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpCiB7CiAgICAgaWYgKCFtX2V4ZWN1dGVTcWxBbGxvd2Vk
IHx8ICFtX2RhdGFiYXNlLT5vcGVuZWQoKSkgewogICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9F
UlI7CkBAIC0xMTEsNDMgKzEwNyw0MiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FM
KGNvbnN0IFN0CiAgICAgZW5xdWV1ZVN0YXRlbWVudChzdGF0ZW1lbnQpOwogfQogCi12b2lkIFNR
TFRyYW5zYWN0aW9uOjplbnF1ZXVlU3RhdGVtZW50KFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBz
dGF0ZW1lbnQpCit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZW5xdWV1ZVN0YXRlbWVudChQ
YXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gc3RhdGVtZW50KQogewogICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3N0YXRlbWVudE11dGV4KTsKICAgICBtX3N0YXRlbWVudFF1ZXVlLmFwcGVuZChzdGF0
ZW1lbnQpOwogfQogCiAjaWYgIUxPR19ESVNBQkxFRAotY29uc3QgY2hhciogU1FMVHJhbnNhY3Rp
b246OmRlYnVnU3RlcE5hbWUoU1FMVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uU3RlcE1ldGhvZCBz
dGVwKQorY29uc3QgY2hhciogU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWJ1Z1N0ZXBOYW1lKFNR
TFRyYW5zYWN0aW9uQmFja2VuZDo6VHJhbnNhY3Rpb25TdGVwTWV0aG9kIHN0ZXApCiB7Ci0gICAg
aWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9jaykKKyAgICBpZiAoc3RlcCA9
PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjphY3F1aXJlTG9jaykKICAgICAgICAgcmV0dXJuICJh
Y3F1aXJlTG9jayI7Ci0gICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246Om9wZW5U
cmFuc2FjdGlvbkFuZFByZWZsaWdodCkKKyAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25C
YWNrZW5kOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQpCiAgICAgICAgIHJldHVybiAib3Bl
blRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFu
c2FjdGlvbjo6cnVuU3RhdGVtZW50cykKKyAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25C
YWNrZW5kOjpydW5TdGF0ZW1lbnRzKQogICAgICAgICByZXR1cm4gInJ1blN0YXRlbWVudHMiOwot
ICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0
KQorICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnBvc3RmbGlnaHRBbmRD
b21taXQpCiAgICAgICAgIHJldHVybiAicG9zdGZsaWdodEFuZENvbW1pdCI7Ci0gICAgZWxzZSBp
ZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjaykKKyAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVhbnVw
QWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2spCiAgICAgICAgIHJldHVybiAiY2xlYW51cEFm
dGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxU
cmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2spCisgICAgaWYgKHN0ZXAgPT0g
JlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2spCiAgICAg
ICAgIHJldHVybiAiZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2siOwotICAgIGVsc2UgaWYgKHN0
ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKQor
ICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2spCiAgICAgICAgIHJldHVybiAiZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjayI7Ci0gICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJT
dGF0ZW1lbnRDYWxsYmFjaykKKyAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5k
OjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2spCiAgICAgICAgIHJldHVybiAiZGVsaXZlclN0YXRl
bWVudENhbGxiYWNrIjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVs
aXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjaykKKyAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rp
b25CYWNrZW5kOjpkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrKQogICAgICAgICByZXR1cm4g
ImRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2siOwotICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNR
TFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKQorICAgIGlmIChzdGVwID09ICZT
UUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2spCiAgICAgICAgIHJl
dHVybiAiZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayI7Ci0gICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FM
VHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjaykKKyAgICBpZiAoc3RlcCA9
PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2spCiAg
ICAgICAgIHJldHVybiAiY2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrIjsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybiAiVU5LTk9XTiI7CisgICAgcmV0dXJuICJVTktOT1dOIjsKIH0KICNlbmRp
ZgogCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0
ZWREYXRhYmFzZSgpCit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y2hlY2tBbmRIYW5kbGVD
bG9zZWRPckludGVycnVwdGVkRGF0YWJhc2UoKQogewogICAgIGlmIChtX2RhdGFiYXNlLT5vcGVu
ZWQoKSAmJiAhbV9kYXRhYmFzZS0+aXNJbnRlcnJ1cHRlZCgpKQogICAgICAgICByZXR1cm47CkBA
IC0xNzgsMTYgKzE3MywxNiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpjaGVja0FuZEhhbmRsZUNs
b3NlCiB9CiAKIAotYm9vbCBTUUxUcmFuc2FjdGlvbjo6cGVyZm9ybU5leHRTdGVwKCkKK2Jvb2wg
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwZXJmb3JtTmV4dFN0ZXAoKQogewogICAgIExPRyhTdG9y
YWdlQVBJLCAiU3RlcCAlc1xuIiwgZGVidWdTdGVwTmFtZShtX25leHRTdGVwKSk7CiAKLSAgICBB
U1NFUlQobV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrIHx8Ci0gICAg
ICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQ
cmVmbGlnaHQgfHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OnJ1
blN0YXRlbWVudHMgfHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246
OnBvc3RmbGlnaHRBbmRDb21taXQgfHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJh
bnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayB8fAotICAgICAgICAgICBtX25l
eHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrKTsKKyAgICBBU1NFUlQobV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5k
OjphY3F1aXJlTG9jaworICAgICAgICB8fCBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQ6Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodAorICAgICAgICB8fCBtX25leHRTdGVw
ID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnJ1blN0YXRlbWVudHMKKyAgICAgICAgfHwgbV9u
ZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0Cisg
ICAgICAgIHx8IG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y2xlYW51cEFm
dGVyU3VjY2Vzc0NhbGxiYWNrCisgICAgICAgIHx8IG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0
aW9uQmFja2VuZDo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKTsKIAogICAg
IGNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFiYXNlKCk7CiAKQEAgLTE5OCwx
NSArMTkzLDE1IEBAIGJvb2wgU1FMVHJhbnNhY3Rpb246OnBlcmZvcm1OZXh0U3RlcCgpCiAgICAg
cmV0dXJuICFtX25leHRTdGVwOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpwZXJmb3JtUGVu
ZGluZ0NhbGxiYWNrKCkKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwZXJmb3JtUGVuZGlu
Z0NhbGxiYWNrKCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkNhbGxiYWNrICVzXG4iLCBkZWJ1
Z1N0ZXBOYW1lKG1fbmV4dFN0ZXApKTsKIAotICAgIEFTU0VSVChtX25leHRTdGVwID09ICZTUUxU
cmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2sgfHwKLSAgICAgICAgICAgbV9u
ZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2sgfHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJT
dGF0ZW1lbnRDYWxsYmFjayB8fAotICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2Fj
dGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjayB8fAotICAgICAgICAgICBtX25leHRT
dGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayk7CisgICAgQVNT
RVJUKG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclRyYW5zYWN0
aW9uQ2FsbGJhY2sKKyAgICAgICAgfHwgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrCisgICAgICAgIHx8IG1fbmV4dFN0
ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrCisg
ICAgICAgIHx8IG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclF1
b3RhSW5jcmVhc2VDYWxsYmFjaworICAgICAgICB8fCBtX25leHRTdGVwID09ICZTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQ6OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2spOwogCiAgICAgY2hlY2tBbmRIYW5k
bGVDbG9zZWRPckludGVycnVwdGVkRGF0YWJhc2UoKTsKIApAQCAtMjE0LDcgKzIwOSw3IEBAIHZv
aWQgU1FMVHJhbnNhY3Rpb246OnBlcmZvcm1QZW5kaW5nQ2FsbGIKICAgICAgICAgKHRoaXMtPipt
X25leHRTdGVwKSgpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpub3RpZnlEYXRhYmFzZVRo
cmVhZElzU2h1dHRpbmdEb3duKCkKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpub3RpZnlE
YXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCkKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVh
ZCgpID09IGRhdGFiYXNlKCktPmRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5n
ZXRUaHJlYWRJRCgpKTsKIApAQCAtMjI0LDIwICsyMTksMjAgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bjo6bm90aWZ5RGF0YWJhc2VUaHJlYQogICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsK
IH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2soKQordm9pZCBTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQ6OmFjcXVpcmVMb2NrKCkKIHsKICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCktPmFjcXVpcmVMb2NrKHRoaXMpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0
aW9uOjpsb2NrQWNxdWlyZWQoKQordm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmxvY2tBY3F1
aXJlZCgpCiB7CiAgICAgbV9sb2NrQWNxdWlyZWQgPSB0cnVlOwotICAgIG1fbmV4dFN0ZXAgPSAm
U1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodDsKKyAgICBtX25leHRT
dGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0
OwogICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBvcGVuVHJhbnNhY3Rpb25BbmRQcmVm
bGlnaHQgaW1tZWRpYXRlbHkgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKICAgICBtX2Rh
dGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzLCB0cnVlKTsKIH0KIAotdm9pZCBT
UUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCkKK3ZvaWQgU1FMVHJh
bnNhY3Rpb25CYWNrZW5kOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQoKQogewogICAgIEFT
U0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSk7CiAgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKQEAgLTI5Myw3ICsyODgsNyBAQCB2b2lk
IFNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmJiAobV9kYXRhYmFzZS0+ZXhwZWN0ZWRWZXJzaW9uKCkgIT0gYWN0dWFsVmVyc2lv
bik7CiAKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwcyAzIC0gUGVmb3JtIHByZWZsaWdodCBzdGVw
cywganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhleSBmYWlsCi0gICAgaWYgKG1f
d3JhcHBlciAmJiAhbV93cmFwcGVyLT5wZXJmb3JtUHJlZmxpZ2h0KHRoaXMpKSB7CisgICAgaWYg
KG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5wZXJmb3JtUHJlZmxpZ2h0KFNRTFRyYW5zYWN0aW9u
Ojpmcm9tKHRoaXMpKSkgewogICAgICAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigp
OwogICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgICAgIG1fZGF0YWJh
c2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKQEAgLTMwNywxOSArMzAyLDE5IEBAIHZvaWQgU1FMVHJh
bnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFAKICAgICB9CiAKICAgICAvLyBUcmFuc2FjdGlv
biBTdGVwIDQgLSBJbnZva2UgdGhlIHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdpdGggdGhlIG5ldyBT
UUxUcmFuc2FjdGlvbiBvYmplY3QKLSAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpk
ZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjazsKKyAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0
aW9uQmFja2VuZDo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2s7CiAgICAgTE9HKFN0b3JhZ2VB
UEksICJTY2hlZHVsaW5nIGRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrIGZvciB0cmFuc2FjdGlv
biAlcFxuIiwgdGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxi
YWNrKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhT
UUxUcmFuc2FjdGlvbjo6ZnJvbSh0aGlzKSk7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb246OmRl
bGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKCkKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpk
ZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjaygpCiB7CiAgICAgYm9vbCBzaG91bGREZWxpdmVyRXJy
b3JDYWxsYmFjayA9IGZhbHNlOwogCiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+
IGNhbGxiYWNrID0gbV9jYWxsYmFja1dyYXBwZXIudW53cmFwKCk7CiAgICAgaWYgKGNhbGxiYWNr
KSB7CiAgICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSB0cnVlOwotICAgICAgICBzaG91bGRE
ZWxpdmVyRXJyb3JDYWxsYmFjayA9ICFjYWxsYmFjay0+aGFuZGxlRXZlbnQodGhpcyk7CisgICAg
ICAgIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gIWNhbGxiYWNrLT5oYW5kbGVFdmVudChT
UUxUcmFuc2FjdGlvbjo6ZnJvbSh0aGlzKSk7CiAgICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQg
PSBmYWxzZTsKICAgICB9CiAKQEAgLTMzNCwxNCArMzI5LDE0IEBAIHZvaWQgU1FMVHJhbnNhY3Rp
b246OmRlbGl2ZXJUcmFuc2FjdGlvbkMKICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5z
YWN0aW9uUmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbjo6
c2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKQordm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnNj
aGVkdWxlVG9SdW5TdGF0ZW1lbnRzKCkKIHsKLSAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0
aW9uOjpydW5TdGF0ZW1lbnRzOworICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kOjpydW5TdGF0ZW1lbnRzOwogICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBydW5T
dGF0ZW1lbnRzIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CiAgICAgbV9kYXRhYmFzZS0+
c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb246
OnJ1blN0YXRlbWVudHMoKQordm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnJ1blN0YXRlbWVu
dHMoKQogewogICAgIEFTU0VSVChtX2xvY2tBY3F1aXJlZCk7CiAKQEAgLTM3OCw3ICszNzMsNyBA
QCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKCkKICAgICAgICAgcG9zdGZsaWdo
dEFuZENvbW1pdCgpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpnZXROZXh0U3RhdGVtZW50
KCkKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpnZXROZXh0U3RhdGVtZW50KCkKIHsKICAg
ICBtX2N1cnJlbnRTdGF0ZW1lbnQgPSAwOwogCkBAIC0zODgsNyArMzgzLDcgQEAgdm9pZCBTUUxU
cmFuc2FjdGlvbjo6Z2V0TmV4dFN0YXRlbWVudCgpCiAgICAgfQogfQogCi1ib29sIFNRTFRyYW5z
YWN0aW9uOjpydW5DdXJyZW50U3RhdGVtZW50KCkKK2Jvb2wgU1FMVHJhbnNhY3Rpb25CYWNrZW5k
OjpydW5DdXJyZW50U3RhdGVtZW50KCkKIHsKICAgICBpZiAoIW1fY3VycmVudFN0YXRlbWVudCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDA3LDE4ICs0MDIsMTggQEAgYm9vbCBTUUxUcmFu
c2FjdGlvbjo6cnVuQ3VycmVudFN0YXRlbWVudAogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1f
Y3VycmVudFN0YXRlbWVudC0+aGFzU3RhdGVtZW50Q2FsbGJhY2soKSkgewotICAgICAgICAgICAg
bV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrOwor
ICAgICAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJT
dGF0ZW1lbnRDYWxsYmFjazsKICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGlu
ZyBkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsK
LSAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayh0aGlz
KTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhT
UUxUcmFuc2FjdGlvbjo6ZnJvbSh0aGlzKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1fY3VycmVu
dFN0YXRlbWVudC0+bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkgewotICAgICAgICBt
X25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNr
OworICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclF1
b3RhSW5jcmVhc2VDYWxsYmFjazsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5n
IGRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlz
KTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMp
OworICAgICAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJh
bnNhY3Rpb246OmZyb20odGhpcykpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBA
IC00MjcsMTQgKzQyMiwxNCBAQCBib29sIFNRTFRyYW5zYWN0aW9uOjpydW5DdXJyZW50U3RhdGVt
ZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVD
dXJyZW50U3RhdGVtZW50RXJyb3IoKQordm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmhhbmRs
ZUN1cnJlbnRTdGF0ZW1lbnRFcnJvcigpCiB7CiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcHMgNi5l
cnJvciAtIENhbGwgdGhlIHN0YXRlbWVudCdzIGVycm9yIGNhbGxiYWNrLCBidXQgaWYgdGhlcmUg
d2FzIG5vIGVycm9yIGNhbGxiYWNrLAogICAgIC8vIG9yIHRoZSB0cmFuc2FjdGlvbiB3YXMgcm9s
bGVkIGJhY2ssIGp1bXAgdG8gdGhlIHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrCiAgICAgaWYg
KG1fY3VycmVudFN0YXRlbWVudC0+aGFzU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpICYmICFtX3Nx
bGl0ZVRyYW5zYWN0aW9uLT53YXNSb2xsZWRCYWNrQnlTcWxpdGUoKSkgewotICAgICAgICBtX25l
eHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2s7CisgICAg
ICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyU3RhdGVtZW50
Q2FsbGJhY2s7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyU3Rh
dGVtZW50Q2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9k
YXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOworICAgICAgICBtX2Rh
dGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb246OmZyb20o
dGhpcykpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IG1fY3Vy
cmVudFN0YXRlbWVudC0+c3FsRXJyb3IoKTsKICAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9uRXJy
b3IpIHsKQEAgLTQ0NSwxNCArNDQwLDE0IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmhhbmRsZUN1
cnJlbnRTdGF0ZW0KICAgICB9CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0
ZW1lbnRDYWxsYmFjaygpCit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclN0YXRl
bWVudENhbGxiYWNrKCkKIHsKICAgICBBU1NFUlQobV9jdXJyZW50U3RhdGVtZW50KTsKIAogICAg
IC8vIFRyYW5zYWN0aW9uIFN0ZXAgNi42IGFuZCA2LjMoZXJyb3IpIC0gSWYgdGhlIHN0YXRlbWVu
dCBjYWxsYmFjayB3ZW50IHdyb25nLCBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxs
YmFjawogICAgIC8vIE90aGVyd2lzZSwgY29udGludWUgdG8gbG9vcCB0aHJvdWdoIHRoZSBzdGF0
ZW1lbnQgcXVldWUKICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKLSAgICBib29sIHJl
c3VsdCA9IG1fY3VycmVudFN0YXRlbWVudC0+cGVyZm9ybUNhbGxiYWNrKHRoaXMpOworICAgIGJv
b2wgcmVzdWx0ID0gbV9jdXJyZW50U3RhdGVtZW50LT5wZXJmb3JtQ2FsbGJhY2soU1FMVHJhbnNh
Y3Rpb246OmZyb20odGhpcykpOwogICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKIAog
ICAgIGlmIChyZXN1bHQpIHsKQEAgLTQ2MywyNCArNDU4LDI0IEBAIHZvaWQgU1FMVHJhbnNhY3Rp
b246OmRlbGl2ZXJTdGF0ZW1lbnRDYWwKICAgICAgICAgc2NoZWR1bGVUb1J1blN0YXRlbWVudHMo
KTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFj
aygpCit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxs
YmFjaygpCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudFN0YXRlbWVudCk7CiAgICAgQVNTRVJUKCFt
X3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudCk7CiAKICAgICBtX3Nob3VsZFJldHJ5Q3VycmVu
dFN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZEV4Y2VlZFF1
b3RhKGRhdGFiYXNlKCkpOwogCi0gICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6cnVu
U3RhdGVtZW50czsKKyAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cnVu
U3RhdGVtZW50czsKICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgcnVuU3RhdGVtZW50
cyBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwogICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxl
VHJhbnNhY3Rpb25TdGVwKHRoaXMpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpwb3N0Zmxp
Z2h0QW5kQ29tbWl0KCkKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwb3N0ZmxpZ2h0QW5k
Q29tbWl0KCkKIHsKICAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOwogCiAgICAgLy8gVHJhbnNh
Y3Rpb24gU3RlcCA3IC0gUGVmb3JtIHBvc3RmbGlnaHQgc3RlcHMsIGp1bXBpbmcgdG8gdGhlIGVy
cm9yIGNhbGxiYWNrIGlmIHRoZXkgZmFpbAotICAgIGlmIChtX3dyYXBwZXIgJiYgIW1fd3JhcHBl
ci0+cGVyZm9ybVBvc3RmbGlnaHQodGhpcykpIHsKKyAgICBpZiAobV93cmFwcGVyICYmICFtX3dy
YXBwZXItPnBlcmZvcm1Qb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uOjpmcm9tKHRoaXMpKSkgewog
ICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX3dyYXBwZXItPnNxbEVycm9yKCk7CiAgICAg
ICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKSB7CiAgICAgICAgICAgICBtX2RhdGFiYXNlLT5y
ZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgzLCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDAp
OwpAQCAtNTAwLDcgKzQ5NSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRD
b21taXQKICAgICAvLyBJZiB0aGUgY29tbWl0IGZhaWxlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwg
c3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVzcyIKICAgICBpZiAobV9zcWxpdGVUcmFuc2Fj
dGlvbi0+aW5Qcm9ncmVzcygpKSB7CiAgICAgICAgIGlmIChtX3dyYXBwZXIpCi0gICAgICAgICAg
ICBtX3dyYXBwZXItPmhhbmRsZUNvbW1pdEZhaWxlZEFmdGVyUG9zdGZsaWdodCh0aGlzKTsKKyAg
ICAgICAgICAgIG1fd3JhcHBlci0+aGFuZGxlQ29tbWl0RmFpbGVkQWZ0ZXJQb3N0ZmxpZ2h0KFNR
TFRyYW5zYWN0aW9uOjpmcm9tKHRoaXMpKTsKICAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFw
cGVyLmNsZWFyKCk7CiAgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9u
UmVzdWx0KDQsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFi
YXNlKCkubGFzdEVycm9yKCkpOwogICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJv
cjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJ1bmFibGUgdG8gY29tbWl0IHRyYW5z
YWN0aW9uIiwKQEAgLTUyNCwxNCArNTE5LDE0IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBvc3Rm
bGlnaHRBbmRDb21taXQKIAogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTAgLSBEZWxpdmVyIHN1
Y2Nlc3MgY2FsbGJhY2ssIGlmIHRoZXJlIGlzIG9uZQogICAgIGlmIChtX3N1Y2Nlc3NDYWxsYmFj
a1dyYXBwZXIuaGFzQ2FsbGJhY2soKSkgewotICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5z
YWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrOworICAgICAgICBtX25leHRTdGVwID0gJlNR
TFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjazsKICAgICAgICAgTE9H
KFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2sgZm9yIHRyYW5z
YWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2Fj
dGlvbkNhbGxiYWNrKHRoaXMpOworICAgICAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0
aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb246OmZyb20odGhpcykpOwogICAgIH0gZWxzZQogICAg
ICAgICBjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2soKTsKIH0KIAotdm9pZCBTUUxUcmFuc2Fj
dGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjaygpCit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZDo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjaygpCiB7CiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAx
MCAtIERlbGl2ZXIgc3VjY2VzcyBjYWxsYmFjawogICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjayA9IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKQEAgLTU0
MCwxMiArNTM1LDEyIEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGIK
IAogICAgIC8vIFNjaGVkdWxlIGEgInBvc3Qtc3VjY2VzcyBjYWxsYmFjayIgc3RlcCB0byByZXR1
cm4gY29udHJvbCB0byB0aGUgZGF0YWJhc2UgdGhyZWFkIGluIGNhc2UgdGhlcmUKICAgICAvLyBh
cmUgZnVydGhlciB0cmFuc2FjdGlvbnMgcXVldWVkIHVwIGZvciB0aGlzIERhdGFiYXNlCi0gICAg
bV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNr
OworICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVhbnVwQWZ0ZXJT
dWNjZXNzQ2FsbGJhY2s7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGNsZWFudXBB
ZnRlclN1Y2Nlc3NDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwogICAgIG1f
ZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKHRoaXMpOwogfQogCi12b2lkIFNRTFRy
YW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2soKQordm9pZCBTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjaygpCiB7CiAgICAgQVNTRVJU
KG1fbG9ja0FjcXVpcmVkKTsKIApAQCAtNTYwLDE1ICs1NTUsMTUgQEAgdm9pZCBTUUxUcmFuc2Fj
dGlvbjo6Y2xlYW51cEFmdGVyU3VjY2VzcwogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb246
OmhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoYm9vbCBpbkNhbGxiYWNrKQordm9pZCBTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQ6OmhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoYm9vbCBpbkNhbGxiYWNrKQogewog
ICAgIGlmIChtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCkpIHsKICAgICAgICAg
aWYgKGluQ2FsbGJhY2spCiAgICAgICAgICAgICBkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrKCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFu
c2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKKyAgICAgICAgICAgIG1f
bmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrOwogICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2
ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsK
LSAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayh0aGlz
KTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhT
UUxUcmFuc2FjdGlvbjo6ZnJvbSh0aGlzKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTU3Niw3ICs1NzEsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFu
c2FjdGlvbkVyCiAgICAgLy8gTm8gZXJyb3IgY2FsbGJhY2ssIHNvIGZhc3QtZm9yd2FyZCB0bzoK
ICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gUm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLgog
ICAgIGlmIChpbkNhbGxiYWNrKSB7Ci0gICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rp
b246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKKyAgICAgICAgbV9uZXh0
U3RlcCA9ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjazsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGNsZWFudXBB
ZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMp
OwogICAgICAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzKTsKICAg
ICB9IGVsc2UgewpAQCAtNTg0LDcgKzU3OSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmhhbmRs
ZVRyYW5zYWN0aW9uRXIKICAgICB9CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKQordm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRl
bGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKQogewogICAgIEFTU0VSVChtX3RyYW5zYWN0
aW9uRXJyb3IpOwogCkBAIC01OTQsMTIgKzU4OSwxMiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpk
ZWxpdmVyVHJhbnNhY3Rpb25FCiAgICAgaWYgKGVycm9yQ2FsbGJhY2spCiAgICAgICAgIGVycm9y
Q2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fdHJhbnNhY3Rpb25FcnJvci5nZXQoKSk7CiAKLSAgICBt
X25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s7CisgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFu
dXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKICAgICBMT0coU3RvcmFnZUFQSSwgIlNj
aGVkdWxpbmcgY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2Fj
dGlvbiAlcFxuIiwgdGhpcyk7CiAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0
ZXAodGhpcyk7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaygpCit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y2xlYW51cEFm
dGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKIHsKICAgICBBU1NFUlQobV9sb2NrQWNxdWly
ZWQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgJKHJldmlzaW9uIDE0MjA0NCkJKGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5oOjE0MjA0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25C
YWNrZW5kLmgJKHdvcmtpbmcgY29weSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuaAkocmV2aXNp
b24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFu
c2FjdGlvbkJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOCArMjUsOCBAQAogICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCi0jaWZuZGVmIFNRTFRyYW5zYWN0aW9uX2gKLSNk
ZWZpbmUgU1FMVHJhbnNhY3Rpb25faAorI2lmbmRlZiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRfaAor
I2RlZmluZSBTUUxUcmFuc2FjdGlvbkJhY2tlbmRfaAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKIApAQCAtNTksMTIgKzU5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVD
b21taXRGYWlsZWRBZnRlclBvc3RmbGlnaHQoU1FMVHJhbnNhY3Rpb24qKSA9IDA7CiB9OwogCi1j
bGFzcyBTUUxUcmFuc2FjdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFu
c2FjdGlvbj4geworY2xhc3MgU1FMVHJhbnNhY3Rpb25CYWNrZW5kIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBjcmVhdGUoRGF0YWJhc2UqLCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjaz4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
YXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVy
PiwgYm9vbCByZWFkT25seSA9IGZhbHNlKTsKLQotICAgIH5TUUxUcmFuc2FjdGlvbigpOworICAg
IH5TUUxUcmFuc2FjdGlvbkJhY2tlbmQoKTsKIAogICAgIHZvaWQgZXhlY3V0ZVNRTChjb25zdCBT
dHJpbmcmIHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLAog
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFz
c1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAt
NzgsMTAgKzc1LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIG5vdGlmeURhdGFiYXNlVGhyZWFkSXNT
aHV0dGluZ0Rvd24oKTsKIAogcHJpdmF0ZToKLSAgICBTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSos
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiwKLSAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRD
YWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25s
eSk7CisgICAgU1FMVHJhbnNhY3Rpb25CYWNrZW5kKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s+LAorICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CiAKLSAgICB0eXBlZGVmIHZvaWQgKFNR
TFRyYW5zYWN0aW9uOjoqVHJhbnNhY3Rpb25TdGVwTWV0aG9kKSgpOworICAgIHR5cGVkZWYgdm9p
ZCAoU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjoqVHJhbnNhY3Rpb25TdGVwTWV0aG9kKSgpOwogICAg
IFRyYW5zYWN0aW9uU3RlcE1ldGhvZCBtX25leHRTdGVwOwogCiAgICAgdm9pZCBlbnF1ZXVlU3Rh
dGVtZW50KFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Pik7CkBAIC0xMjksMTAgKzEyNiwxMiBAQCBw
cml2YXRlOgogICAgIERlcXVlPFJlZlB0cjxTUUxTdGF0ZW1lbnQ+ID4gbV9zdGF0ZW1lbnRRdWV1
ZTsKIAogICAgIE93blB0cjxTUUxpdGVUcmFuc2FjdGlvbj4gbV9zcWxpdGVUcmFuc2FjdGlvbjsK
KworICAgIGZyaWVuZCBjbGFzcyBTUUxUcmFuc2FjdGlvbjsgLy8gRklYTUU6IFJlbW92ZSB0aGlz
IG9uY2UgdGhlIGZyb250LWVuZCBoYXMgYmVlbiBwcm9wZXJseSBpc29sYXRlZC4KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCiAKLSNlbmRpZiAvLyBTUUxUcmFuc2FjdGlv
bl9oCisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25CYWNrZW5kX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvbkJhY2tlbmRTeW5jLmNwcAkocmV2aXNpb24gMTQyMDQ0KQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHA6MTQyMDQ0KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmRT
eW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvblN5bmMuaCIKKworI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCisKKyNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKKyNpbmNsdWRlICJEYXRh
YmFzZUJhY2tlbmRDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCisjaW5jbHVk
ZSAiU1FMRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCisjaW5jbHVkZSAi
U1FMU3RhdGVtZW50U3luYy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50LmgiCisj
aW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxWYWx1
ZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jPiBTUUxUcmFuc2Fj
dGlvblN5bmM6OmNyZWF0ZShEYXRhYmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25seSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNRTFRyYW5zYWN0aW9uU3luYyhkYiwgY2FsbGJhY2ssIHJlYWRPbmx5KSk7
Cit9CisKK1NRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jKERhdGFiYXNlU3lu
YyogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBi
b29sIHJlYWRPbmx5KQorICAgIDogbV9kYXRhYmFzZShkYikKKyAgICAsIG1fY2FsbGJhY2soY2Fs
bGJhY2spCisgICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQorICAgICwgbV9oYXNWZXJzaW9uTWlz
bWF0Y2goZmFsc2UpCisgICAgLCBtX21vZGlmaWVkRGF0YWJhc2UoZmFsc2UpCisgICAgLCBtX3Ry
YW5zYWN0aW9uQ2xpZW50KGFkb3B0UHRyKG5ldyBTUUxUcmFuc2FjdGlvbkNsaWVudCgpKSkKK3sK
KyAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRl
eHRUaHJlYWQoKSk7Cit9CisKK1NRTFRyYW5zYWN0aW9uU3luYzo6flNRTFRyYW5zYWN0aW9uU3lu
YygpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uICYmIG1fc3Fs
aXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgcm9sbGJhY2soKTsKK30KKwor
UGFzc1JlZlB0cjxTUUxSZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNRTChj
b25zdCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1l
bnRzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisKKyAgICBtX2RhdGFiYXNl
LT5zZXRMYXN0RXJyb3JNZXNzYWdlKCIiKTsKKworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVk
KCkpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgiY2Fubm90IGV4
ZWN1dGVTUUwgYmVjYXVzZSB0aGUgZGF0YWJhc2UgaXMgbm90IG9wZW4iKTsKKyAgICAgICAgZWMg
PSBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBpZiAobV9oYXNWZXJzaW9uTWlzbWF0Y2gpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2V0
TGFzdEVycm9yTWVzc2FnZSgiY2Fubm90IGV4ZWN1dGVTUUwgYmVjYXVzZSB0aGVyZSBpcyBhIHZl
cnNpb24gbWlzbWF0Y2giKTsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlZFUlNJT05fRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc3FsU3RhdGVtZW50LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgcGVybWlzc2lvbnMgPSBEYXRhYmFz
ZUF1dGhvcml6ZXI6OlJlYWRXcml0ZU1hc2s7CisgICAgaWYgKCFtX2RhdGFiYXNlLT5kYXRhYmFz
ZUNvbnRleHQoKS0+YWxsb3dEYXRhYmFzZUFjY2VzcygpKQorICAgICAgcGVybWlzc2lvbnMgfD0g
RGF0YWJhc2VBdXRob3JpemVyOjpOb0FjY2Vzc01hc2s7CisgICAgZWxzZSBpZiAobV9yZWFkT25s
eSkKKyAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVhZE9ubHlNYXNr
OworCisgICAgU1FMU3RhdGVtZW50U3luYyBzdGF0ZW1lbnQoc3FsU3RhdGVtZW50LCBhcmd1bWVu
dHMsIHBlcm1pc3Npb25zKTsKKworICAgIG1fZGF0YWJhc2UtPnJlc2V0QXV0aG9yaXplcigpOwor
ICAgIGJvb2wgcmV0cnlTdGF0ZW1lbnQgPSB0cnVlOworICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+
IHJlc3VsdFNldDsKKyAgICB3aGlsZSAocmV0cnlTdGF0ZW1lbnQpIHsKKyAgICAgICAgcmV0cnlT
dGF0ZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgcmVzdWx0U2V0ID0gc3RhdGVtZW50LmV4ZWN1dGUo
bV9kYXRhYmFzZS5nZXQoKSwgZWMpOworICAgICAgICBpZiAoIXJlc3VsdFNldCkgeworICAgICAg
ICAgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24tPndhc1JvbGxlZEJhY2tCeVNxbGl0ZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBpZiAoZWMgPT0gU1FMRXhj
ZXB0aW9uOjpRVU9UQV9FUlIpIHsKKyAgICAgICAgICAgICAgICBpZiAobV90cmFuc2FjdGlvbkNs
aWVudC0+ZGlkRXhjZWVkUXVvdGEoZGF0YWJhc2UoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZWMgPSAwOworICAgICAgICAgICAgICAgICAgICByZXRyeVN0YXRlbWVudCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2V0
TGFzdEVycm9yTWVzc2FnZSgidGhlcmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0b3JhZ2Ug
c3BhY2UiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fZGF0YWJhc2Ut
Pmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKSkgeworICAgICAgICBtX21vZGlmaWVkRGF0YWJh
c2UgPSB0cnVlOworICAgICAgICBtX3RyYW5zYWN0aW9uQ2xpZW50LT5kaWRFeGVjdXRlU3RhdGVt
ZW50KGRhdGFiYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHRTZXQucmVsZWFzZSgp
OworfQorCitFeGNlcHRpb25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4oKQoreworICAg
IEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRo
cmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7CisgICAgICAgIG1fZGF0
YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMSwgU1FMRXhjZXB0aW9uOjpVTktO
T1dOX0VSUiwgMCk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3NhZ2UoImNh
bm5vdCBiZWdpbiB0cmFuc2FjdGlvbiBiZWNhdXNlIHRoZSBkYXRhYmFzZSBpcyBub3Qgb3BlbiIp
OworICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAgICB9CisKKyAg
ICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOworCisgICAgLy8gU2V0IHRoZSBtYXhpbXVtIHVzYWdlIGZvciB0aGlzIHRyYW5zYWN0
aW9uIGlmIHRoaXMgdHJhbnNhY3Rpb25zIGlzIG5vdCByZWFkLW9ubHkuCisgICAgaWYgKCFtX3Jl
YWRPbmx5KQorICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnNldE1heGltdW1T
aXplKG1fZGF0YWJhc2UtPm1heGltdW1TaXplKCkpOworCisgICAgQVNTRVJUKCFtX3NxbGl0ZVRy
YW5zYWN0aW9uKTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uID0gYWRvcHRQdHIobmV3IFNRTGl0
ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCksIG1fcmVhZE9ubHkpKTsK
KworICAgIG1fZGF0YWJhc2UtPnJlc2V0RGVsZXRlcygpOworICAgIG1fZGF0YWJhc2UtPmRpc2Fi
bGVBdXRob3JpemVyKCk7CisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICBt
X2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICAvLyBDaGVjayBpZiBiZWdpbigp
IHN1Y2NlZWRlZC4KKyAgICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkg
eworICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rp
b25JblByb2dyZXNzKCkpOworICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0
aW9uUmVzdWx0KDIsIFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxp
dGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVy
cm9yTWVzc2FnZSgidW5hYmxlIHRvIGJlZ2luIHRyYW5zYWN0aW9uIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxh
c3RFcnJvcigpLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOworICAgICAgICByZXR1cm4gU1FM
RXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgfQorCisgICAgLy8gTm90ZTogV2UgaW50ZW50
aW9uYWxseSByZXRyaWV2ZSB0aGUgYWN0dWFsIHZlcnNpb24gZXZlbiB3aXRoIGFuIGVtcHR5IGV4
cGVjdGVkIHZlcnNpb24uCisgICAgLy8gSW4gbXVsdGktcHJvY2VzcyBicm93c2Vycywgd2UgdGFr
ZSB0aGlzIG9wcG9ydGludXRpeSB0byB1cGRhdGUgdGhlIGNhY2hlZCB2YWx1ZSBmb3IKKyAgICAv
LyB0aGUgYWN0dWFsIHZlcnNpb24uIEluIHNpbmdsZS1wcm9jZXNzIGJyb3dzZXJzLCB0aGlzIGlz
IGp1c3QgYSBtYXAgbG9va3VwLgorICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOworICAgIGlmICgh
bV9kYXRhYmFzZS0+Z2V0QWN0dWFsVmVyc2lvbkZvclRyYW5zYWN0aW9uKGFjdHVhbFZlcnNpb24p
KSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMywg
U1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCku
bGFzdEVycm9yKCkpOworICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1
bmFibGUgdG8gcmVhZCB2ZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFi
YXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcm9sbGJhY2so
KTsKKyAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOworICAgIH0KKyAg
ICBtX2hhc1ZlcnNpb25NaXNtYXRjaCA9ICFtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKS5p
c0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtX2RhdGFiYXNlLT5leHBl
Y3RlZFZlcnNpb24oKSAhPSBhY3R1YWxWZXJzaW9uKTsKKyAgICBtX2RhdGFiYXNlLT5yZXBvcnRT
dGFydFRyYW5zYWN0aW9uUmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKKyAgICByZXR1cm4gMDsKK30K
KworRXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGUoKQoreworICAgIEFT
U0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVh
ZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpIHx8IChtX2NhbGxiYWNrICYmICFt
X2NhbGxiYWNrLT5oYW5kbGVFdmVudCh0aGlzKSkpIHsKKyAgICAgICAgaWYgKG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvck1lc3NhZ2UoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2RhdGFiYXNlLT5z
ZXRMYXN0RXJyb3JNZXNzYWdlKCJmYWlsZWQgdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbiBjYWxsYmFj
ayIpOworICAgICAgICBtX2NhbGxiYWNrID0gMDsKKyAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlv
bjo6VU5LTk9XTl9FUlI7CisgICAgfQorCisgICAgbV9jYWxsYmFjayA9IDA7CisgICAgcmV0dXJu
IDA7Cit9CisKK0V4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpjb21taXQoKQorewor
ICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4
dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7CisgICAgICAgIG1f
ZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDEsIFNRTEV4Y2VwdGlvbjo6
VU5LTk9XTl9FUlIsIDApOworICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdl
KCJ1bmFibGUgdG8gY29tbWl0IHRyYW5zYWN0aW9uIGJlY2F1c2UgdGhlIGRhdGFiYXNlIGlzIG5v
dCBvcGVuLiIpOworICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAg
ICB9CisKKyAgICBBU1NFUlQobV9zcWxpdGVUcmFuc2FjdGlvbik7CisKKyAgICBtX2RhdGFiYXNl
LT5kaXNhYmxlQXV0aG9yaXplcigpOworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmNvbW1pdCgp
OworICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKKworICAgIC8vIElmIHRoZSBj
b21taXQgZmFpbGVkLCB0aGUgdHJhbnNhY3Rpb24gd2lsbCBzdGlsbCBiZSBtYXJrZWQgYXMgImlu
IHByb2dyZXNzIgorICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsK
KyAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMiwgU1FM
RXhjZXB0aW9uOjpEQVRBQkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFz
dEVycm9yKCkpOworICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFi
bGUgdG8gY29tbWl0IHRyYW5zYWN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2Rh
dGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJu
IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOworICAgIH0KKworICAgIG1fc3FsaXRlVHJhbnNh
Y3Rpb24uY2xlYXIoKTsKKworICAgIC8vIFZhY3V1bSB0aGUgZGF0YWJhc2UgaWYgYW55dGhpbmcg
d2FzIGRlbGV0ZWQuCisgICAgaWYgKG1fZGF0YWJhc2UtPmhhZERlbGV0ZXMoKSkKKyAgICAgICAg
bV9kYXRhYmFzZS0+aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOworCisgICAgLy8gVGhlIGNv
bW1pdCB3YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIHRyYW5zYWN0aW9uIG1vZGlmaWVkIHRoaXMgZGF0
YWJhc2UsIG5vdGlmeSB0aGUgZGVsZWdhdGVzLgorICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2Up
CisgICAgICAgIG1fdHJhbnNhY3Rpb25DbGllbnQtPmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24o
ZGF0YWJhc2UoKSk7CisKKyAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJl
c3VsdCgwLCAtMSwgMCk7IC8vIE9LCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgU1FMVHJhbnNh
Y3Rpb25TeW5jOjpyb2xsYmFjaygpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fZGF0YWJhc2UtPmRp
c2FibGVBdXRob3JpemVyKCk7CisgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24pIHsKKyAgICAg
ICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAgICAgICAgbV9zcWxpdGVUcmFu
c2FjdGlvbi5jbGVhcigpOworICAgIH0KKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVy
KCk7CisKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rp
b25JblByb2dyZXNzKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMu
Y3BwCShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTI5LDcgKzMw
LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rp
b25TeW5jLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oIgogCiAjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKIApAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNRTFJl
c3VsdFNldC5oIgogI2luY2x1ZGUgIlNRTFN0YXRlbWVudFN5bmMuaCIKICNpbmNsdWRlICJTUUxU
cmFuc2FjdGlvbkNsaWVudC5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luYy5oIgogI2lu
Y2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUu
aCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgpAQCAtNTAsMTIgKzUyLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gU1FM
VHJhbnNhY3Rpb25TeW5jOjpjcmVhdGUoRGF0YWJhc2VTeW5jKiBkYiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvblN5bmMoZGIsIGNhbGxiYWNrLCByZWFk
T25seSkpOwotfQotCi1TUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0aW9uU3luYyhEYXRh
YmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxs
YmFjaywgYm9vbCByZWFkT25seSkKK1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmM6OlNRTFRyYW5z
YWN0aW9uQmFja2VuZFN5bmMoRGF0YWJhc2VTeW5jKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpCiAgICAgOiBtX2RhdGFi
YXNlKGRiKQogICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKICAgICAsIG1fcmVhZE9ubHkocmVh
ZE9ubHkpCkBAIC02NiwxNCArNjMsMTQgQEAgU1FMVHJhbnNhY3Rpb25TeW5jOjpTUUxUcmFuc2Fj
dGlvblN5bmMoRAogICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAotU1FMVHJhbnNhY3Rpb25TeW5jOjp+U1FMVHJh
bnNhY3Rpb25TeW5jKCkKK1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmM6On5TUUxUcmFuc2FjdGlv
bkJhY2tlbmRTeW5jKCkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rp
b24gJiYgbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQogICAgICAgICByb2xsYmFj
aygpOwogfQogCi1QYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gU1FMVHJhbnNhY3Rpb25TeW5jOjpl
eGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFs
dWU+JiBhcmd1bWVudHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxTUUxSZXN1bHRT
ZXQ+IFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmM6OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBz
cWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogCkBAIC0xMzIsNyArMTI5LDcgQEAgUGFzc1JlZlB0
cjxTUUxSZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uUwogICAgIHJldHVybiByZXN1bHRTZXQucmVs
ZWFzZSgpOwogfQogCi1FeGNlcHRpb25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4oKQor
RXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jOjpiZWdpbigpCiB7CiAgICAg
QVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhy
ZWFkKCkpOwogICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKQEAgLTE4MiwxMCArMTc5
LDEwIEBAIEV4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpiZWdpbigKICAgICByZXR1
cm4gMDsKIH0KIAotRXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGUoKQor
RXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jOjpleGVjdXRlKCkKIHsKICAg
ICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRU
aHJlYWQoKSk7Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSB8fCAobV9jYWxsYmFjayAm
JiAhbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQodGhpcykpKSB7CisgICAgaWYgKCFtX2RhdGFiYXNl
LT5vcGVuZWQoKSB8fCAobV9jYWxsYmFjayAmJiAhbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQoU1FM
VHJhbnNhY3Rpb25TeW5jOjpmcm9tKHRoaXMpKSkpIHsKICAgICAgICAgaWYgKG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvck1lc3NhZ2UoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNlLT5z
ZXRMYXN0RXJyb3JNZXNzYWdlKCJmYWlsZWQgdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbiBjYWxsYmFj
ayIpOwogICAgICAgICBtX2NhbGxiYWNrID0gMDsKQEAgLTE5Niw3ICsxOTMsNyBAQCBFeGNlcHRp
b25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0CiAgICAgcmV0dXJuIDA7CiB9CiAKLUV4
Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpjb21taXQoKQorRXhjZXB0aW9uQ29kZSBT
UUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jOjpjb21taXQoKQogewogICAgIEFTU0VSVChtX2RhdGFi
YXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBp
ZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7CkBAIC0yMzMsNyArMjMwLDcgQEAgRXhjZXB0aW9u
Q29kZSBTUUxUcmFuc2FjdGlvblN5bmM6OmNvbW1pdAogICAgIHJldHVybiAwOwogfQogCi12b2lk
IFNRTFRyYW5zYWN0aW9uU3luYzo6cm9sbGJhY2soKQordm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tl
bmRTeW5jOjpyb2xsYmFjaygpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIG1fZGF0YWJhc2UtPmRpc2Fi
bGVBdXRob3JpemVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaAkocmV2aXNp
b24gMTQyMDQ0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uU3luYy5oOjE0MjA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFNRTFRyYW5zYWN0aW9uU3luY19oCisjZGVmaW5lIFNRTFRyYW5zYWN0
aW9uU3luY19oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJh
c2VCYXNpY1R5cGVzLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhYmFzZVN5
bmM7CitjbGFzcyBTUUxSZXN1bHRTZXQ7CitjbGFzcyBTUUxUcmFuc2FjdGlvbkNsaWVudDsKK2Ns
YXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOworY2xhc3MgU1FMVmFsdWU7CitjbGFzcyBT
UUxpdGVUcmFuc2FjdGlvbjsKKworLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJl
IGNyZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0aHJlYWQuCitj
bGFzcyBTUUxUcmFuc2FjdGlvblN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlv
blN5bmM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5
bmM+IGNyZWF0ZShEYXRhYmFzZVN5bmMqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrPiwgYm9vbCByZWFkT25seSA9IGZhbHNlKTsKKworICAgIH5TUUxUcmFuc2FjdGlvblN5
bmMoKTsKKworICAgIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBleGVjdXRlU1FMKGNvbnN0IFN0
cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIEV4
Y2VwdGlvbkNvZGUmKTsKKworICAgIERhdGFiYXNlU3luYyogZGF0YWJhc2UoKSB7IHJldHVybiBt
X2RhdGFiYXNlLmdldCgpOyB9CisgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4g
bV9yZWFkT25seTsgfQorCisgICAgRXhjZXB0aW9uQ29kZSBiZWdpbigpOworICAgIEV4Y2VwdGlv
bkNvZGUgZXhlY3V0ZSgpOworICAgIEV4Y2VwdGlvbkNvZGUgY29tbWl0KCk7CisgICAgdm9pZCBy
b2xsYmFjaygpOworCitwcml2YXRlOgorICAgIFNRTFRyYW5zYWN0aW9uU3luYyhEYXRhYmFzZVN5
bmMqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25s
eSk7CisKKyAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxT
UUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gbV9jYWxsYmFjazsKKyAgICBib29sIG1fcmVhZE9u
bHk7CisgICAgYm9vbCBtX2hhc1ZlcnNpb25NaXNtYXRjaDsKKworICAgIGJvb2wgbV9tb2RpZmll
ZERhdGFiYXNlOworICAgIE93blB0cjxTUUxUcmFuc2FjdGlvbkNsaWVudD4gbV90cmFuc2FjdGlv
bkNsaWVudDsKKyAgICBPd25QdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rp
b247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8g
U1FMVHJhbnNhY3Rpb25TeW5jX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oCShy
ZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0yOCw4ICsyOSw4IEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU1FMVHJhbnNhY3Rpb25TeW5jX2gKLSNkZWZp
bmUgU1FMVHJhbnNhY3Rpb25TeW5jX2gKKyNpZm5kZWYgU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3lu
Y19oCisjZGVmaW5lIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmNfaAogCiAjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKIApAQCAtNDksMTEgKzUwLDkgQEAgY2xhc3MgU1FMVmFsdWU7CiBjbGFzcyBT
UUxpdGVUcmFuc2FjdGlvbjsKIAogLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJl
IGNyZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0aHJlYWQuCi1j
bGFzcyBTUUxUcmFuc2FjdGlvblN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlv
blN5bmM+IHsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMgOiBwdWJsaWMgUmVmQ291
bnRlZDxTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jPiBjcmVhdGUoRGF0YWJhc2VTeW5jKiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9ubHkgPSBmYWxzZSk7
Ci0KLSAgICB+U1FMVHJhbnNhY3Rpb25TeW5jKCk7CisgICAgflNRTFRyYW5zYWN0aW9uQmFja2Vu
ZFN5bmMoKTsKIAogICAgIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBleGVjdXRlU1FMKGNvbnN0
IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMs
IEV4Y2VwdGlvbkNvZGUmKTsKIApAQCAtNjYsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
b2xsYmFjaygpOwogCiBwcml2YXRlOgotICAgIFNRTFRyYW5zYWN0aW9uU3luYyhEYXRhYmFzZVN5
bmMqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25s
eSk7CisgICAgU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYyhEYXRhYmFzZVN5bmMqLCBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSk7CiAKICAgICBS
ZWZQdHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFiYXNlOwogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjaz4gbV9jYWxsYmFjazsKQEAgLTc2LDEwICs3NSwxMiBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9tb2RpZmllZERhdGFiYXNlOwogICAgIE93blB0cjxTUUxUcmFuc2FjdGlvbkNs
aWVudD4gbV90cmFuc2FjdGlvbkNsaWVudDsKICAgICBPd25QdHI8U1FMaXRlVHJhbnNhY3Rpb24+
IG1fc3FsaXRlVHJhbnNhY3Rpb247CisKKyAgICBmcmllbmQgY2xhc3MgU1FMVHJhbnNhY3Rpb25T
eW5jOyAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB0aGUgZnJvbnQtZW5kIGhhcyBiZWVuIHBy
b3Blcmx5IGlzb2xhdGVkLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYK
IAotI2VuZGlmIC8vIFNRTFRyYW5zYWN0aW9uU3luY19oCisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rp
b25CYWNrZW5kU3luY19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJl
dmlzaW9uIDE0MjA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzQsNyArMzUsNyBAQAog
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1
ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgi
CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNDIsNyArNDMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyBTdHJpbmcgZ2V0RGF0YWJhc2VJZGVudGlmaWVyKFNRTFRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbikKK3N0YXRpYyBTdHJpbmcgZ2V0RGF0YWJhc2VJZGVudGlmaWVyKFNRTFRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCiB7CiAgICAgRGF0YWJhc2UqIGRhdGFiYXNl
ID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKQEAgLTU0
LDcgKzU1LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpwcm9jZXNzUAogICAg
IGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24gfHwgaW5mby5wZW5kaW5nVHJhbnNhY3Rp
b25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFNRTFRyYW5zYWN0
aW9uPiBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbiA9IGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5m
aXJzdCgpOworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IGZpcnN0UGVuZGluZ1Ry
YW5zYWN0aW9uID0gaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCk7CiAgICAgaWYgKGZp
cnN0UGVuZGluZ1RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgZG8gewogICAg
ICAgICAgICAgZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24gPSBpbmZvLnBlbmRpbmdUcmFuc2FjdGlv
bnMudGFrZUZpcnN0KCk7CkBAIC02OCw3ICs2OSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvcjo6cHJvY2Vzc1AKICAgICB9CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQordm9pZCBTUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbkJhY2tlbmQq
IHRyYW5zYWN0aW9uKQogewogICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXREYXRhYmFzZUlk
ZW50aWZpZXIodHJhbnNhY3Rpb24pOwogCkBAIC04Myw3ICs4NCw3IEBAIHZvaWQgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUwKICAgICBwcm9jZXNzUGVuZGluZ1RyYW5zYWN0aW9u
cyhpbmZvKTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9j
ayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I6OnJlbGVhc2VMb2NrKFNRTFRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCiB7
CiAgICAgaWYgKG1fY29vcmRpbmF0aW9uSW5mb01hcC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTExMyw3ICsxMTQsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNo
dXRkb3duCiAgICAgICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZv
SXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0aW9u
KQogICAgICAgICAgICAgaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0aW9uLT5ub3RpZnlEYXRhYmFz
ZVRocmVhZElzU2h1dHRpbmdEb3duKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxSZWZQdHI8U1FM
VHJhbnNhY3Rpb24+ID46Oml0ZXJhdG9yIGFjdGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRvciA9
CisgICAgICAgIGZvciAoSGFzaFNldDxSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiA+Ojpp
dGVyYXRvciBhY3RpdmVSZWFkVHJhbnNhY3Rpb25zSXRlcmF0b3IgPQogICAgICAgICAgICAgICAg
ICAgICAgaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmJlZ2luKCk7CiAgICAgICAgICAgICAg
YWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yICE9IGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0
aW9ucy5lbmQoKTsKICAgICAgICAgICAgICArK2FjdGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRv
cikgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDE0MjA0NCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQxLDI5ICs0MiwzMCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSAgICBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKK2NsYXNzIFNRTFRyYW5zYWN0aW9u
QmFja2VuZDsKIAotICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgewotICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKCkgeyB9Ci0gICAgICAgIHZvaWQgYWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24q
KTsKLSAgICAgICAgdm9pZCByZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiopOwotICAgICAgICB2
b2lkIHNodXRkb3duKCk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBEZXF1ZTxSZWZQ
dHI8U1FMVHJhbnNhY3Rpb24+ID4gVHJhbnNhY3Rpb25zUXVldWU7Ci0gICAgICAgIHN0cnVjdCBD
b29yZGluYXRpb25JbmZvIHsKLSAgICAgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlIHBlbmRpbmdU
cmFuc2FjdGlvbnM7Ci0gICAgICAgICAgICBIYXNoU2V0PFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4g
PiBhY3RpdmVSZWFkVHJhbnNhY3Rpb25zOwotICAgICAgICAgICAgUmVmUHRyPFNRTFRyYW5zYWN0
aW9uPiBhY3RpdmVXcml0ZVRyYW5zYWN0aW9uOwotICAgICAgICB9OwotICAgICAgICAvLyBNYXBz
IGRhdGFiYXNlIG5hbWVzIHRvIGluZm9ybWF0aW9uIGFib3V0IHBlbmRpbmcgdHJhbnNhY3Rpb25z
Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENvb3JkaW5hdGlvbkluZm8+IENvb3Jk
aW5hdGlvbkluZm9NYXA7Ci0gICAgICAgIENvb3JkaW5hdGlvbkluZm9NYXAgbV9jb29yZGluYXRp
b25JbmZvTWFwOwotCi0gICAgICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdUcmFuc2FjdGlvbnMoQ29v
cmRpbmF0aW9uSW5mbyYgaW5mbyk7CitjbGFzcyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpIHsgfQorICAgIHZvaWQgYWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb25CYWNrZW5kKik7
CisgICAgdm9pZCByZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKyAgICB2b2lk
IHNodXRkb3duKCk7Citwcml2YXRlOgorICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFNRTFRyYW5z
YWN0aW9uQmFja2VuZD4gPiBUcmFuc2FjdGlvbnNRdWV1ZTsKKyAgICBzdHJ1Y3QgQ29vcmRpbmF0
aW9uSW5mbyB7CisgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlIHBlbmRpbmdUcmFuc2FjdGlvbnM7
CisgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gPiBhY3RpdmVS
ZWFkVHJhbnNhY3Rpb25zOworICAgICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiBh
Y3RpdmVXcml0ZVRyYW5zYWN0aW9uOwogICAgIH07Ci19CisgICAgLy8gTWFwcyBkYXRhYmFzZSBu
YW1lcyB0byBpbmZvcm1hdGlvbiBhYm91dCBwZW5kaW5nIHRyYW5zYWN0aW9ucworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIENvb3JkaW5hdGlvbkluZm8+IENvb3JkaW5hdGlvbkluZm9NYXA7
CisgICAgQ29vcmRpbmF0aW9uSW5mb01hcCBtX2Nvb3JkaW5hdGlvbkluZm9NYXA7CisKKyAgICB2
b2lkIHByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKENvb3JkaW5hdGlvbkluZm8mKTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25TeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAJKHJldmlzaW9uIDE0MjA0NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwyNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
UUxUcmFuc2FjdGlvblN5bmMuaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNs
dWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKLSNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250
ZXh0LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCi0jaW5jbHVkZSAiU1FMRXhjZXB0aW9u
LmgiCi0jaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50U3lu
Yy5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50LmgiCi0jaW5jbHVkZSAiU1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJTUUxWYWx1ZS5oIgotI2luY2x1ZGUg
IlNRTGl0ZVRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jPiBTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0
ZShEYXRhYmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNr
PiBjYWxsYmFjaywgYm9vbCByZWFkT25seSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNR
TFRyYW5zYWN0aW9uU3luYyhkYiwgY2FsbGJhY2ssIHJlYWRPbmx5KSk7Ci19Ci0KLVNRTFRyYW5z
YWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jKERhdGFiYXNlU3luYyogZGIsIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQot
ICAgIDogbV9kYXRhYmFzZShkYikKLSAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCi0gICAgLCBt
X3JlYWRPbmx5KHJlYWRPbmx5KQotICAgICwgbV9oYXNWZXJzaW9uTWlzbWF0Y2goZmFsc2UpCi0g
ICAgLCBtX21vZGlmaWVkRGF0YWJhc2UoZmFsc2UpCi0gICAgLCBtX3RyYW5zYWN0aW9uQ2xpZW50
KGFkb3B0UHRyKG5ldyBTUUxUcmFuc2FjdGlvbkNsaWVudCgpKSkKLXsKLSAgICBBU1NFUlQobV9k
YXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci19
Ci0KLVNRTFRyYW5zYWN0aW9uU3luYzo6flNRTFRyYW5zYWN0aW9uU3luYygpCi17Ci0gICAgQVNT
RVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFk
KCkpOwotICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uICYmIG1fc3FsaXRlVHJhbnNhY3Rpb24t
PmluUHJvZ3Jlc3MoKSkKLSAgICAgICAgcm9sbGJhY2soKTsKLX0KLQotUGFzc1JlZlB0cjxTUUxS
ZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcmIHNx
bFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0KLSAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JN
ZXNzYWdlKCIiKTsKLQotICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKLSAgICAgICAg
bV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgiY2Fubm90IGV4ZWN1dGVTUUwgYmVjYXVz
ZSB0aGUgZGF0YWJhc2UgaXMgbm90IG9wZW4iKTsKLSAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246
OlVOS05PV05fRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9oYXNW
ZXJzaW9uTWlzbWF0Y2gpIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2Fn
ZSgiY2Fubm90IGV4ZWN1dGVTUUwgYmVjYXVzZSB0aGVyZSBpcyBhIHZlcnNpb24gbWlzbWF0Y2gi
KTsKLSAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlZFUlNJT05fRVJSOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoc3FsU3RhdGVtZW50LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBpbnQgcGVybWlzc2lvbnMgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJl
YWRXcml0ZU1hc2s7Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKS0+YWxs
b3dEYXRhYmFzZUFjY2VzcygpKQotICAgICAgcGVybWlzc2lvbnMgfD0gRGF0YWJhc2VBdXRob3Jp
emVyOjpOb0FjY2Vzc01hc2s7Ci0gICAgZWxzZSBpZiAobV9yZWFkT25seSkKLSAgICAgIHBlcm1p
c3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVhZE9ubHlNYXNrOwotCi0gICAgU1FMU3Rh
dGVtZW50U3luYyBzdGF0ZW1lbnQoc3FsU3RhdGVtZW50LCBhcmd1bWVudHMsIHBlcm1pc3Npb25z
KTsKLQotICAgIG1fZGF0YWJhc2UtPnJlc2V0QXV0aG9yaXplcigpOwotICAgIGJvb2wgcmV0cnlT
dGF0ZW1lbnQgPSB0cnVlOwotICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IHJlc3VsdFNldDsKLSAg
ICB3aGlsZSAocmV0cnlTdGF0ZW1lbnQpIHsKLSAgICAgICAgcmV0cnlTdGF0ZW1lbnQgPSBmYWxz
ZTsKLSAgICAgICAgcmVzdWx0U2V0ID0gc3RhdGVtZW50LmV4ZWN1dGUobV9kYXRhYmFzZS5nZXQo
KSwgZWMpOwotICAgICAgICBpZiAoIXJlc3VsdFNldCkgewotICAgICAgICAgICAgaWYgKG1fc3Fs
aXRlVHJhbnNhY3Rpb24tPndhc1JvbGxlZEJhY2tCeVNxbGl0ZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiAwOwotCi0gICAgICAgICAgICBpZiAoZWMgPT0gU1FMRXhjZXB0aW9uOjpRVU9UQV9F
UlIpIHsKLSAgICAgICAgICAgICAgICBpZiAobV90cmFuc2FjdGlvbkNsaWVudC0+ZGlkRXhjZWVk
UXVvdGEoZGF0YWJhc2UoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZWMgPSAwOwotICAgICAg
ICAgICAgICAgICAgICByZXRyeVN0YXRlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2Fn
ZSgidGhlcmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0b3JhZ2Ugc3BhY2UiKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RBY3Rpb25DaGFu
Z2VkRGF0YWJhc2UoKSkgewotICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2UgPSB0cnVlOwotICAg
ICAgICBtX3RyYW5zYWN0aW9uQ2xpZW50LT5kaWRFeGVjdXRlU3RhdGVtZW50KGRhdGFiYXNlKCkp
OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHRTZXQucmVsZWFzZSgpOwotfQotCi1FeGNlcHRp
b25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4oKQotewotICAgIEFTU0VSVChtX2RhdGFi
YXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBp
ZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0
YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMSwgU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgMCk7Ci0g
ICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3NhZ2UoImNhbm5vdCBiZWdpbiB0cmFu
c2FjdGlvbiBiZWNhdXNlIHRoZSBkYXRhYmFzZSBpcyBub3Qgb3BlbiIpOwotICAgICAgICByZXR1
cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIW1fZGF0
YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwotCi0gICAg
Ly8gU2V0IHRoZSBtYXhpbXVtIHVzYWdlIGZvciB0aGlzIHRyYW5zYWN0aW9uIGlmIHRoaXMgdHJh
bnNhY3Rpb25zIGlzIG5vdCByZWFkLW9ubHkuCi0gICAgaWYgKCFtX3JlYWRPbmx5KQotICAgICAg
ICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnNldE1heGltdW1TaXplKG1fZGF0YWJhc2Ut
Pm1heGltdW1TaXplKCkpOwotCi0gICAgQVNTRVJUKCFtX3NxbGl0ZVRyYW5zYWN0aW9uKTsKLSAg
ICBtX3NxbGl0ZVRyYW5zYWN0aW9uID0gYWRvcHRQdHIobmV3IFNRTGl0ZVRyYW5zYWN0aW9uKG1f
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCksIG1fcmVhZE9ubHkpKTsKLQotICAgIG1fZGF0YWJh
c2UtPnJlc2V0RGVsZXRlcygpOwotICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7
Ci0gICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+YmVnaW4oKTsKLSAgICBtX2RhdGFiYXNlLT5lbmFi
bGVBdXRob3JpemVyKCk7Ci0KLSAgICAvLyBDaGVjayBpZiBiZWdpbigpIHN1Y2NlZWRlZC4KLSAg
ICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgewotICAgICAgICBBU1NF
UlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwotICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNR
TEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxh
c3RFcnJvcigpKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgidW5h
YmxlIHRvIGJlZ2luIHRyYW5zYWN0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2Rh
dGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgbV9zcWxp
dGVUcmFuc2FjdGlvbi5jbGVhcigpOwotICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpEQVRB
QkFTRV9FUlI7Ci0gICAgfQotCi0gICAgLy8gTm90ZTogV2UgaW50ZW50aW9uYWxseSByZXRyaWV2
ZSB0aGUgYWN0dWFsIHZlcnNpb24gZXZlbiB3aXRoIGFuIGVtcHR5IGV4cGVjdGVkIHZlcnNpb24u
Ci0gICAgLy8gSW4gbXVsdGktcHJvY2VzcyBicm93c2Vycywgd2UgdGFrZSB0aGlzIG9wcG9ydGlu
dXRpeSB0byB1cGRhdGUgdGhlIGNhY2hlZCB2YWx1ZSBmb3IKLSAgICAvLyB0aGUgYWN0dWFsIHZl
cnNpb24uIEluIHNpbmdsZS1wcm9jZXNzIGJyb3dzZXJzLCB0aGlzIGlzIGp1c3QgYSBtYXAgbG9v
a3VwLgotICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOwotICAgIGlmICghbV9kYXRhYmFzZS0+Z2V0
QWN0dWFsVmVyc2lvbkZvclRyYW5zYWN0aW9uKGFjdHVhbFZlcnNpb24pKSB7Ci0gICAgICAgIG1f
ZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMywgU1FMRXhjZXB0aW9uOjpE
QVRBQkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOwot
ICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gcmVhZCB2
ZXJzaW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFi
YXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRh
YmFzZSgpLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcm9sbGJhY2soKTsKLSAgICAgICAgcmV0
dXJuIFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOwotICAgIH0KLSAgICBtX2hhc1ZlcnNpb25N
aXNtYXRjaCA9ICFtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKS5pc0VtcHR5KCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIChtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKSAh
PSBhY3R1YWxWZXJzaW9uKTsKLSAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9u
UmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKLSAgICByZXR1cm4gMDsKLX0KLQotRXhjZXB0aW9uQ29k
ZSBTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGUoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNl
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBpZiAo
IW1fZGF0YWJhc2UtPm9wZW5lZCgpIHx8IChtX2NhbGxiYWNrICYmICFtX2NhbGxiYWNrLT5oYW5k
bGVFdmVudCh0aGlzKSkpIHsKLSAgICAgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RFcnJvck1lc3Nh
Z2UoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNz
YWdlKCJmYWlsZWQgdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbiBjYWxsYmFjayIpOwotICAgICAgICBt
X2NhbGxiYWNrID0gMDsKLSAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7
Ci0gICAgfQotCi0gICAgbV9jYWxsYmFjayA9IDA7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUV4Y2Vw
dGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpjb21taXQoKQotewotICAgIEFTU0VSVChtX2Rh
dGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAg
ICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9y
dENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDEsIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsIDAp
OwotICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gY29t
bWl0IHRyYW5zYWN0aW9uIGJlY2F1c2UgdGhlIGRhdGFiYXNlIGlzIG5vdCBvcGVuLiIpOwotICAg
ICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQobV9zcWxpdGVUcmFuc2FjdGlvbik7Ci0KLSAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9y
aXplcigpOwotICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOwotICAgIG1fZGF0YWJh
c2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKLQotICAgIC8vIElmIHRoZSBjb21taXQgZmFpbGVkLCB0
aGUgdHJhbnNhY3Rpb24gd2lsbCBzdGlsbCBiZSBtYXJrZWQgYXMgImluIHByb2dyZXNzIgotICAg
IGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsKLSAgICAgICAgbV9kYXRh
YmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMiwgU1FMRXhjZXB0aW9uOjpEQVRB
QkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOwotICAg
ICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gY29tbWl0IHRy
YW5zYWN0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rh
dGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5zcWxpdGVE
YXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6
REFUQUJBU0VfRVJSOwotICAgIH0KLQotICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsK
LQotICAgIC8vIFZhY3V1bSB0aGUgZGF0YWJhc2UgaWYgYW55dGhpbmcgd2FzIGRlbGV0ZWQuCi0g
ICAgaWYgKG1fZGF0YWJhc2UtPmhhZERlbGV0ZXMoKSkKLSAgICAgICAgbV9kYXRhYmFzZS0+aW5j
cmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOwotCi0gICAgLy8gVGhlIGNvbW1pdCB3YXMgc3VjY2Vz
c2Z1bC4gSWYgdGhlIHRyYW5zYWN0aW9uIG1vZGlmaWVkIHRoaXMgZGF0YWJhc2UsIG5vdGlmeSB0
aGUgZGVsZWdhdGVzLgotICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2UpCi0gICAgICAgIG1fdHJh
bnNhY3Rpb25DbGllbnQtPmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oZGF0YWJhc2UoKSk7Ci0K
LSAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgwLCAtMSwgMCk7
IC8vIE9LCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb25TeW5jOjpyb2xs
YmFjaygpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVy
KCk7Ci0gICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24pIHsKLSAgICAgICAgbV9zcWxpdGVUcmFu
c2FjdGlvbi0+cm9sbGJhY2soKTsKLSAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigp
OwotICAgIH0KLSAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7Ci0KLSAgICBBU1NF
UlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RB
VEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFu
c2FjdGlvblN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5oCShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNRTFRyYW5zYWN0aW9uU3luY19oCi0jZGVm
aW5lIFNRTFRyYW5zYWN0aW9uU3luY19oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0j
aW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBEYXRhYmFzZVN5bmM7Ci1jbGFzcyBTUUxSZXN1bHRTZXQ7Ci1jbGFzcyBTUUxUcmFuc2Fj
dGlvbkNsaWVudDsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwotY2xhc3MgU1FM
VmFsdWU7Ci1jbGFzcyBTUUxpdGVUcmFuc2FjdGlvbjsKLQotLy8gSW5zdGFuY2VzIG9mIHRoaXMg
Y2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29u
dGV4dCB0aHJlYWQuCi1jbGFzcyBTUUxUcmFuc2FjdGlvblN5bmMgOiBwdWJsaWMgUmVmQ291bnRl
ZDxTUUxUcmFuc2FjdGlvblN5bmM+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
UUxUcmFuc2FjdGlvblN5bmM+IGNyZWF0ZShEYXRhYmFzZVN5bmMqLCBQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSA9IGZhbHNlKTsKLQotICAgIH5T
UUxUcmFuc2FjdGlvblN5bmMoKTsKLQotICAgIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBleGVj
dXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+
JiBhcmd1bWVudHMsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIERhdGFiYXNlU3luYyogZGF0YWJh
c2UoKSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9Ci0gICAgYm9vbCBpc1JlYWRPbmx5KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWFkT25seTsgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBiZWdpbigp
OwotICAgIEV4Y2VwdGlvbkNvZGUgZXhlY3V0ZSgpOwotICAgIEV4Y2VwdGlvbkNvZGUgY29tbWl0
KCk7Ci0gICAgdm9pZCByb2xsYmFjaygpOwotCi1wcml2YXRlOgotICAgIFNRTFRyYW5zYWN0aW9u
U3luYyhEYXRhYmFzZVN5bmMqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNr
PiwgYm9vbCByZWFkT25seSk7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFiYXNl
OwotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gbV9jYWxsYmFjazsKLSAg
ICBib29sIG1fcmVhZE9ubHk7Ci0gICAgYm9vbCBtX2hhc1ZlcnNpb25NaXNtYXRjaDsKLQotICAg
IGJvb2wgbV9tb2RpZmllZERhdGFiYXNlOwotICAgIE93blB0cjxTUUxUcmFuc2FjdGlvbkNsaWVu
dD4gbV90cmFuc2FjdGlvbkNsaWVudDsKLSAgICBPd25QdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1f
c3FsaXRlVHJhbnNhY3Rpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgotCi0jZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25TeW5jX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxNDIwNDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjU1NDIsNiArMjU1NDIsMjIgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rp
b25CYWNrZW5kLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgi
CisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxN
b2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3
ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmgiCisJCQkJCT4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNl
XFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNp
b24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTg3Niw2ICsxODc2LDggQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMU3RhdGVtZW50LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMU3RhdGVtZW50
U3luYy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXFNRTFRyYW5zYWN0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1v
ZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kU3luYy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRh
dGFiYXNlXFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRy
YW5zYWN0aW9uU3luYy5jcHAiIC8+CkBAIC02NDM5LDYgKzY0NDEsOCBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNl
XFNRTFN0YXRlbWVudFN5bmMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVs
ZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb24uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0
aW9uQmFja2VuZFN5bmMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNc
d2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkNsaWVudC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNDIw
NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZp
bHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTE4OTksNiArMTg5OSwxNSBAQAogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbi5jcHAiPgog
ICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRy
YW5zYWN0aW9uLmNwcCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXNcd2ViZGF0YWJhc2U8L0ZpbHRl
cj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNc
d2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCI+CisgICAgICA8RmlsdGVyPk1v
ZHVsZXNcd2ViZGF0YWJhc2U8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25CYWNrZW5k
U3luYy5jcHAiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+Cisg
ICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRh
dGFiYXNlXFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXNc
d2ViZGF0YWJhc2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTg1NTMsNiArODU2Miwx
MiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxU
cmFuc2FjdGlvbi5oIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3
ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkJhY2tlbmQuaCI+CisgICAgICA8RmlsdGVyPk1vZHVs
ZXNcd2ViZGF0YWJhc2U8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3lu
Yy5oIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgorICAgIDwv
Q2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFz
ZVxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRh
dGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDIwNDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTM3MzYsNiArMzczNiwxMCBAQAogCQk5N0JDNkE0RTE1MDVGMDgxMDAx
Qjc0QUMgLyogU1FMU3RhdGVtZW50U3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMEMxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVu
dFN5bmMuaCAqLzsgfTsKIAkJOTdCQzZBNEYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
QkM2QTBEMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgKi87IH07CiAJCTk3
QkM2QTUwMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMEUxNTA1RjA4MTAwMUI3NEFD
IC8qIFNRTFRyYW5zYWN0aW9uLmggKi87IH07CisJCUZFRTE4MTEzMTZDMzE5RTgwMDA4NDg0OSAv
KiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkVFMTgxMTExNkMzMTlFODAwMDg0ODQ5IC8qIFNRTFRyYW5zYWN0
aW9uQmFja2VuZC5jcHAgKi87IH07CisJCUZFRTE4MTE0MTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxU
cmFuc2FjdGlvbkJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFRTE4MTEyMTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxUcmFuc2FjdGlvbkJhY2tl
bmQuaCAqLzsgfTsKKwkJRkVBRDdEODcxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9u
QmFja2VuZFN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkVBRDdEODUxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5
bmMuY3BwICovOyB9OworCQlGRUFEN0Q4ODE2QzMzOUVFMDBENDY3MEIgLyogU1FMVHJhbnNhY3Rp
b25CYWNrZW5kU3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkVBRDdEODYxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5
bmMuaCAqLzsgfTsKIAkJOTdCQzZBNTIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3QkM2QTEwMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggKi87
IH07CiAJCTk3QkM2QTU0MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkEx
MjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwICovOyB9OwogCQk5
N0JDNkE1NTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTEzMTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5oICovOyB9OwpAQCAtMTExNjIsNiArMTEx
NjYsMTAgQEAKIAkJOTdCQzZBMEQxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uLmNw
cDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNkEwRTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJh
bnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rp
b24uaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzZBMEYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRy
YW5zYWN0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbi5pZGw7
IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVFMTgxMTExNkMzMTlFODAwMDg0ODQ5IC8qIFNRTFRyYW5z
YWN0aW9uQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBT
UUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvbkJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUUx
ODExMjE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uQmFja2VuZC5oOyBwYXRoID0g
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkVBRDdEODUxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0
aW9uQmFja2VuZFN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
U1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRUFEN0Q4NjE2QzMzOUVFMDBENDY3MEIgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3lu
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbkJhY2tl
bmRTeW5jLmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2Vu
ZFN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzZBMTAxNTA1RjA4MTAw
MUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOyBwYXRoID0gTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk3QkM2QTExMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNr
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbDsg
cGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2QTEyMTUwNUYwODEwMDFCNzRBQyAvKiBT
UUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBTUUxUcmFuc2FjdGlvbkNsaWVudC5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE4NTkxLDYgKzE4NTk5LDEwIEBACiAJCQkJOTdCQzZBMEQxNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TFRyYW5zYWN0aW9uLmNwcCAqLywKIAkJCQk5N0JDNkEwRTE1MDVGMDgxMDAxQjc0QUMgLyogU1FM
VHJhbnNhY3Rpb24uaCAqLywKIAkJCQk5N0JDNkEwRjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJh
bnNhY3Rpb24uaWRsICovLAorCQkJCUZFRTE4MTExMTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxUcmFu
c2FjdGlvbkJhY2tlbmQuY3BwICovLAorCQkJCUZFRTE4MTEyMTZDMzE5RTgwMDA4NDg0OSAvKiBT
UUxUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLywKKwkJCQlGRUFEN0Q4NTE2QzMzOUVFMDBENDY3MEIg
LyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHAgKi8sCisJCQkJRkVBRDdEODYxNkMzMzlF
RTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaCAqLywKIAkJCQk5N0JDNkEx
MDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oICovLAogCQkJCTk3
QkM2QTExMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbCAqLywK
IAkJCQk5N0JDNkExMjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuY3Bw
ICovLApAQCAtMjU3NjcsNiArMjU3NzksOCBAQAogCQkJCTk3QkM2QTRCMTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JD
NkE0RTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50U3luYy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTdCQzZBNTAxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRUUxODExNDE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25C
YWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUFEN0Q4ODE2QzMzOUVFMDBENDY3MEIgLyog
U1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBNTIx
NTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QkM2QTU1MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBNTcxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMjkwNDUsNiArMjkwNTksOCBA
QAogCQkJCTk3QkM2QTQ3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTdCQzZBNEQxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudFN5
bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBNEYxNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TFRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFRTE4MTEzMTZDMzE5RTgwMDA4
NDg0OSAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkVB
RDdEODcxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBNTQxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0
aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTU2MTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
QkM2QTVBMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuY3BwIGluIFNvdXJj
ZXMgKi8sCg==
</data>
<flag name="commit-queue"
          id="206627"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186982</attachid>
            <date>2013-02-06 19:53:53 -0800</date>
            <delta_ts>2013-02-07 14:40:35 -0800</delta_ts>
            <desc>Reworked patch to make the patch application process work. Also fixed all the other style violations that the ews bot was complaining about. </desc>
            <filename>bug-109109.patch</filename>
            <type>text/plain</type>
            <size>119174</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MjA2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAxMy0wMi0wNiAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIFNRTFRyYW5zYWN0
aW9uQmFja2VuZCBhbmQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTEwOS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcyBmb3Ig
U1FMVHJhbnNhY3Rpb25CYWNrZW5kIGFuZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLgorICAg
ICAgICAtIE1vdmVkIFNRTFRyYW5zYWN0aW9uIGFuZCBTUUxUcmFuc2FjdGlvblN5bmMgbWV0aG9k
cyB0byB0aGVpciByZXNwZWN0aXZlCisgICAgICAgICAgYmFja2VuZCBmaWxlcyBhbmQgcmVuYW1l
ZCB0aGVtIHRvIGJlIGJhY2tlbmQgbWV0aG9kcy4KKyAgICAgICAgLSBDaGFuZ2UgU1FMVHJhbnNh
Y3Rpb24gYW5kIFNRTFRyYW5zYWN0aW9uU3luYyB0byBiZSBzaW1wbGUgd3JhcHBlcgorICAgICAg
ICAgIGNsYXNzZXMgdGhhdCBpbmhlcml0IGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBiYWNrZW5kcy4g
VGhpcyBpcyBhIHN0b3AKKyAgICAgICAgICBnYXAgbWVhc3VyZSB0byBrZWVwIHRoaW5ncyB3b3Jr
aW5nIHVudGlsIHRoZSBmcm9udC1lbmQgYW5kIGJhY2stZW5kCisgICAgICAgICAgY2FuIGJlIHBy
b3Blcmx5IHNwbGl0LgorICAgICAgICAtIFdoZXJlIG5lZWRlZCwgSSBtYWRlIHVzZSBvZiBuZXcg
U1FMVHJhbnNhY3Rpb246OmZyb20oKSBhbmQKKyAgICAgICAgICBTUUxUcmFuc2FjdGlvblN5bmM6
OmZyb20oKSBzdGF0aWMgbWV0aG9kcyB0aGF0ICJnZXQiIHRoZSBmcm9udC1lbmQKKyAgICAgICAg
ICB0cmFuc2FjdGlvbnMgZnJvbSB0aGUgYmFjay1lbmRzLiBUaGlzIGlzIGFsc28gYSBzdG9wIGdh
cCBtZWFzdXJlIHRvCisgICAgICAgICAga2VlcCB0aGluZ3Mgd29ya2luZyB1bnRpbCB0aGUgcHJv
cGVyIHJlZmFjdG9yaW5nIGlzIGNvbXBsZXRlLgorICAgICAgICAtIEZpeGVkIHVwIHByZS1leGlz
dGluZyBzdHlsZSBjaGVja2VyIHZpb2xhdGlvbnMgdGhhdCBhcmUgbm93IGRldGVjdGVkCisgICAg
ICAgICAgb24gY29kZSB0aGF0IHdlcmUgdG91Y2hlZCBkdXJpbmcgbXkgcmVuYW1pbmcuCisgICAg
ICAgIC0gQWRkZWQgdGhlIGJhY2stZW5kIGZpbGVzIHRvIGFsbCB0aGUgYnVpbGQgZmlsZXMuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpzY2hlZHVsZVRyYW5z
YWN0aW9uU3RlcCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oOgor
ICAgICAgICAoRGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VCYWNrZW5kLmg6CisgICAgICAgIChEYXRhYmFzZUJhY2tlbmQpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlQmFja2VuZEFzeW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6RGF0YWJhc2VUcmFuc2Fj
dGlvblRhc2spOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmg6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VUcmFuc2Fj
dGlvblRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRBc3lu
Yzo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKERhdGFi
YXNlQmFja2VuZEFzeW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayk6CisgICAgICAgICogTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
UUxUcmFuc2FjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9u
OjpTUUxUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZnJv
bSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5oOgorICAg
ICAgICAoU1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFu
c2FjdGlvbkJhY2tlbmQ6OlNRTFRyYW5zYWN0aW9uQmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6On5TUUxUcmFuc2FjdGlvbkJhY2tlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpleGVjdXRlU1FMKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZW5xdWV1ZVN0YXRlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlYnVnU3RlcE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjaGVja0FuZEhhbmRsZUNsb3Nl
ZE9ySW50ZXJydXB0ZWREYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkJhY2tlbmQ6OnBlcmZvcm1OZXh0U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQ6OnBlcmZvcm1QZW5kaW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3du
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6YWNxdWlyZUxvY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpsb2NrQWNxdWlyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpvcGVuVHJhbnNhY3Rp
b25BbmRQcmVmbGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5k
OjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFu
c2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVG9SdW5TdGF0ZW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cnVuU3RhdGVtZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmdldE5leHRTdGF0ZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpydW5DdXJyZW50U3RhdGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6aGFuZGxlQ3VycmVudFN0YXRl
bWVudEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVs
aXZlclN0YXRlbWVudENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9u
QmFja2VuZDo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnBvc3RmbGlnaHRBbmRDb21taXQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y2xlYW51cEFmdGVyU3Vj
Y2Vzc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
aGFuZGxlVHJhbnNhY3Rpb25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkJhY2tlbmQ6OmRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2spOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25C
YWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoU1FMVHJhbnNhY3Rpb25XcmFwcGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uV3JhcHBlcjo6flNRTFRyYW5zYWN0aW9uV3JhcHBl
cik6CisgICAgICAgIChTUUxUcmFuc2FjdGlvbkJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxU
cmFuc2FjdGlvbkJhY2tlbmQ6OmlzUmVhZE9ubHkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYzo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kU3lu
Yyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jOjp+U1FMVHJh
bnNhY3Rpb25CYWNrZW5kU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJh
Y2tlbmRTeW5jOjpleGVjdXRlU1FMKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9u
QmFja2VuZFN5bmM6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFj
a2VuZFN5bmM6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNr
ZW5kU3luYzo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2Vu
ZFN5bmM6OnJvbGxiYWNrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQmFja2VuZFN5bmMuaDogQWRkZWQuCisgICAgICAgIChTUUxUcmFuc2FjdGlvbkJhY2tl
bmRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmM6OmRh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmM6Omlz
UmVhZE9ubHkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhYmFzZUlkZW50aWZpZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1Bl
bmRpbmdUcmFuc2FjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvcjo6YWNxdWlyZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvcjo6cmVsZWFzZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvcjo6c2h1dGRvd24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOgorICAgICAgICAoU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKENvb3JkaW5hdGlvbkluZm8pOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6ZnJvbSk6CisgICAgICAgICog
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaDoKKyAgICAgICAgKFNRTFRy
YW5zYWN0aW9uU3luYyk6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEzLTAyLTA2ICBUb20gU2VwZXogIDx0c2VwZXpAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIGRvY3VtZW50LnJlZmVycmVyIGxlYWthZ2Ugd2l0aCBYU1Mg
QXVkaXRvciBwYWdlIGJsb2NrCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTQy
MDQ0KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTk3MSw2ICs5NzEsOCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxTdGF0ZW1lbnQuY3BwCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1l
bnRTeW5jLmNwcAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCisg
ICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCisgICAgTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcAogICAgIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCiAgICAgTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAogICAgIE1vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQ5LDE0ICsyMTQ5LDE4IEBAIHdlYmNvcmVfbW9k
dWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFN0YXRlbWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0
YXRlbWVudFN5bmMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFN0YXRlbWVudFN5bmMuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb24uaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaCBcCiAJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNr
LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25D
bGllbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQ2xpZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBcCi0JU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNr
LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25T
eW5jLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvblN5bmMuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE0MjA0NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE0NzgsNiArMTQ3OCw4IEBA
IEhFQURFUlMgKz0gXAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmggXAog
ICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5oIFwKICAgICBNb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmggXAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25CYWNrZW5kLmggXAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb25CYWNrZW5kU3luYy5oIFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQ2xpZW50LmggXAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oIFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3lu
Yy5oIFwKQEAgLTMwNTIsNiArMzA1NCw4IEBAIGVuYWJsZT8oU1FMX0RBVEFCQVNFKSB7CiAgICAg
ICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcCBcCiAgICAgICAgIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5jcHAgXAogICAgICAgICBNb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcCBcCisgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBcCisgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHAgXAogICAgICAgICBNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCBcCiAgICAgICAgIE1vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgXAogICAgICAgICBNb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQ1LDYgKzEwNDUsMTEgQEAKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFN0YXRlbWVudFN5bmMuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFN0YXRlbWVudFN5bmMuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb24uaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwJywKKyAgICAgICAgICAgICdNb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaCcsCiAgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNw
cCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlLmNwcAkocmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1NSw3ICsy
NTUsNyBAQCB2b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uKCkKICAgICAgICAgbV90
cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKIH0KIAotdm9pZCBEYXRhYmFzZTo6c2NoZWR1
bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sIGltbWVk
aWF0ZWx5KQordm9pZCBEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgYm9vbCBpbW1lZGlhdGVseSkKIHsKICAgICBpZiAo
IWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQogICAgICAgICByZXR1cm47Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oCShy
ZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKIGNsYXNzIFNlY3VyaXR5T3Jp
Z2luOwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CitjbGFzcyBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ7
CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25DbGll
bnQ7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOwpAQCAtNzksNyArODAsNyBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplKCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiopOwotICAg
IHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24qLCBib29sIGltbWVk
aWF0ZWx5ID0gZmFsc2UpOworICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJh
bnNhY3Rpb25CYWNrZW5kKiwgYm9vbCBpbW1lZGlhdGVseSA9IGZhbHNlKTsKIAogICAgIFNRTFRy
YW5zYWN0aW9uQ2xpZW50KiB0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0OwogICAgIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJh
Y2tlbmQuaAkocmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsOCArOTUsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIENoYW5nZVZlcnNpb25XcmFwcGVyOwogICAg
IGZyaWVuZCBjbGFzcyBTUUxTdGF0ZW1lbnQ7CiAgICAgZnJpZW5kIGNsYXNzIFNRTFN0YXRlbWVu
dFN5bmM7Ci0gICAgZnJpZW5kIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3luYzsKLSAgICBmcmllbmQg
Y2xhc3MgU1FMVHJhbnNhY3Rpb247CisgICAgZnJpZW5kIGNsYXNzIFNRTFRyYW5zYWN0aW9uQmFj
a2VuZDsKKyAgICBmcmllbmQgY2xhc3MgU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYzsKIAogICAg
IERhdGFiYXNlQmFja2VuZChQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERh
dGFiYXNlVHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwCShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE0Nyw3ICsxNDcsNyBAQCBjb25zdCBjaGFyKiBEYXRhYmFzZUJhY2tlbmRB
c3luYzo6RGF0YWJhCiAvLyAqKiogRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgKioqCiAvLyBTdGFy
dHMgYSB0cmFuc2FjdGlvbiB0aGF0IHdpbGwgcmVwb3J0IGl0cyByZXN1bHRzIHZpYSBhIGNhbGxi
YWNrLgogCi1EYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OkRh
dGFiYXNlVHJhbnNhY3Rpb25UYXNrKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0
aW9uKQorRGF0YWJhc2VCYWNrZW5kQXN5bmM6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpEYXRh
YmFzZVRyYW5zYWN0aW9uVGFzayhQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gdHJh
bnNhY3Rpb24pCiAgICAgOiBEYXRhYmFzZVRhc2soRGF0YWJhc2U6OmZyb20odHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkpLCAwKQogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRh
c2suaAkocmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMs
NyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEFzeW5jLmgiCiAjaW5jbHVkZSAiRGF0YWJh
c2VCYXNpY1R5cGVzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgiCiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTEzOCwyMiArMTM4LDIyIEBAIHByaXZhdGU6CiBjbGFz
cyBEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgOiBwdWJsaWMg
RGF0YWJhc2VUYXNrIHsKIHB1YmxpYzoKICAgICAvLyBUcmFuc2FjdGlvbiB0YXNrIGlzIG5ldmVy
IHN5bmNocm9ub3VzLCBzbyBubyAnc3luY2hyb25pemVyJyBwYXJhbWV0ZXIuCi0gICAgc3RhdGlj
IFBhc3NPd25QdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFz
ZVRyYW5zYWN0aW9uVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5k
PiB0cmFuc2FjdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGF0YWJh
c2VUcmFuc2FjdGlvblRhc2sodHJhbnNhY3Rpb24pKTsKICAgICB9CiAKLSAgICBTUUxUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9
CisgICAgU1FMVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBEYXRhYmFz
ZVRyYW5zYWN0aW9uVGFzayhQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPik7CisgICAgZXhwbGlj
aXQgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2soUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tl
bmQ+KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7CiAjaWYgIUxPR19ESVNB
QkxFRAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGVidWdUYXNrTmFtZSgpIGNvbnN0OwogI2Vu
ZGlmCiAKLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAgUmVm
UHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKIH07CiAKIGNsYXNzIERh
dGFiYXNlQmFja2VuZEFzeW5jOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrIDogcHVibGljIERhdGFi
YXNlVGFzayB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDYwMSArMzEsMjkgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCiAKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXpl
ci5oIgotI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIKLSNpbmNsdWRlICJEYXRh
YmFzZVRocmVhZC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlNR
TEVycm9yLmgiCi0jaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTUUxT
dGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIgotI2luY2x1ZGUg
IlNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKLSNpbmNsdWRlICJT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiU1FMVmFsdWUuaCIKICNpbmNsdWRlICJWb2lkQ2FsbGJh
Y2suaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLS8vIFRoZXJlJ3Mgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSBob3cgbXVjaCBtb3Jl
IHNwYWNlIHdpbGwgYmUgcmVxdWlyZWQgd2hlbiBhIHN0YXRlbWVudCBoaXRzIHRoZSBxdW90YSBs
aW1pdC4KLS8vIEZvciBub3csIHdlJ2xsIGFyYml0cmFyaWx5IGNob29zZSBjdXJyZW50UXVvdGEg
KyAxbWIuCi0vLyBJbiB0aGUgZnV0dXJlIHdlIGRlY2lkZSB0byB0cmFjayBpZiBhIHNpemUgaW5j
cmVhc2Ugd2Fzbid0IGVub3VnaCwgYW5kIGFzayBmb3IgbGFyZ2VyLWFuZC1sYXJnZXIgaW5jcmVh
c2VzIHVudGlsIGl0cyBlbm91Z2guCi1zdGF0aWMgY29uc3QgaW50IERlZmF1bHRRdW90YVNpemVJ
bmNyZWFzZSA9IDEwNDg1NzY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxT
UUxUcmFuc2FjdGlvbj4gU1FMVHJhbnNhY3Rpb246OmNyZWF0ZShEYXRhYmFzZSogZGIsIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4g
c3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBl
ciwgYm9vbCByZWFkT25seSkKK1Bhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IFNRTFRyYW5zYWN0
aW9uOjpjcmVhdGUoRGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2s+IGNhbGxiYWNrLAorICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LAorICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJl
YWRPbmx5KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb24oZGIsIGNh
bGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIHdyYXBwZXIsIHJlYWRPbmx5
KSk7CiB9CiAKLVNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSogZGIsIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5
KQotICAgIDogbV9uZXh0U3RlcCgmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrKQotICAgICwg
bV9leGVjdXRlU3FsQWxsb3dlZChmYWxzZSkKLSAgICAsIG1fZGF0YWJhc2UoZGIpCi0gICAgLCBt
X3dyYXBwZXIod3JhcHBlcikKLSAgICAsIG1fY2FsbGJhY2tXcmFwcGVyKGNhbGxiYWNrLCBkYi0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICwgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVy
KHN1Y2Nlc3NDYWxsYmFjaywgZGItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAsIG1f
ZXJyb3JDYWxsYmFja1dyYXBwZXIoZXJyb3JDYWxsYmFjaywgZGItPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSkKLSAgICAsIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KGZhbHNlKQotICAg
ICwgbV9tb2RpZmllZERhdGFiYXNlKGZhbHNlKQotICAgICwgbV9sb2NrQWNxdWlyZWQoZmFsc2Up
Ci0gICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQotICAgICwgbV9oYXNWZXJzaW9uTWlzbWF0Y2go
ZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UpOwotfQotCi1TUUxUcmFuc2FjdGlvbjo6
flNRTFRyYW5zYWN0aW9uKCkKLXsKLSAgICBBU1NFUlQoIW1fc3FsaXRlVHJhbnNhY3Rpb24pOwot
fQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3Rh
dGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FM
U3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2s+IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpCi17Ci0gICAgaWYgKCFt
X2V4ZWN1dGVTcWxBbGxvd2VkIHx8ICFtX2RhdGFiYXNlLT5vcGVuZWQoKSkgewotICAgICAgICBl
ID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQg
cGVybWlzc2lvbnMgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRXcml0ZU1hc2s7Ci0gICAgaWYg
KCFtX2RhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKS0+YWxsb3dEYXRhYmFzZUFjY2VzcygpKQot
ICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6Ok5vQWNjZXNzTWFzazsK
LSAgICBlbHNlIGlmIChtX3JlYWRPbmx5KQotICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFz
ZUF1dGhvcml6ZXI6OlJlYWRPbmx5TWFzazsKLQotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0
YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKG1fZGF0YWJhc2UuZ2V0KCksIHNxbFN0YXRl
bWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcGVybWlzc2lvbnMpOwot
Ci0gICAgaWYgKG1fZGF0YWJhc2UtPmRlbGV0ZWQoKSkKLSAgICAgICAgc3RhdGVtZW50LT5zZXRE
YXRhYmFzZURlbGV0ZWRFcnJvcihtX2RhdGFiYXNlLmdldCgpKTsKLQotICAgIGVucXVldWVTdGF0
ZW1lbnQoc3RhdGVtZW50KTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZW5xdWV1ZVN0YXRl
bWVudChQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gc3RhdGVtZW50KQotewotICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3N0YXRlbWVudE11dGV4KTsKLSAgICBtX3N0YXRlbWVudFF1ZXVlLmFwcGVu
ZChzdGF0ZW1lbnQpOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotY29uc3QgY2hhciogU1FMVHJh
bnNhY3Rpb246OmRlYnVnU3RlcE5hbWUoU1FMVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uU3RlcE1l
dGhvZCBzdGVwKQotewotICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxv
Y2spCi0gICAgICAgIHJldHVybiAiYWNxdWlyZUxvY2siOwotICAgIGVsc2UgaWYgKHN0ZXAgPT0g
JlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQpCi0gICAgICAgIHJl
dHVybiAib3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IjsKLSAgICBlbHNlIGlmIChzdGVwID09
ICZTUUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVtZW50cykKLSAgICAgICAgcmV0dXJuICJydW5TdGF0
ZW1lbnRzIjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdo
dEFuZENvbW1pdCkKLSAgICAgICAgcmV0dXJuICJwb3N0ZmxpZ2h0QW5kQ29tbWl0IjsKLSAgICBl
bHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKQotICAgICAgICByZXR1cm4gImNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjayI7Ci0gICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2
ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKQotICAgICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlv
bkNhbGxiYWNrIjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaykKLSAgICAgICAgcmV0dXJuICJkZWxpdmVyVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrIjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlv
bjo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrKQotICAgICAgICByZXR1cm4gImRlbGl2ZXJTdGF0
ZW1lbnRDYWxsYmFjayI7Ci0gICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRl
bGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2spCi0gICAgICAgIHJldHVybiAiZGVsaXZlclF1b3Rh
SW5jcmVhc2VDYWxsYmFjayI7Ci0gICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246
OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2spCi0gICAgICAgIHJldHVybiAiZGVsaXZlclN1Y2Nlc3ND
YWxsYmFjayI7Ci0gICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBB
ZnRlclN1Y2Nlc3NDYWxsYmFjaykKLSAgICAgICAgcmV0dXJuICJjbGVhbnVwQWZ0ZXJTdWNjZXNz
Q2FsbGJhY2siOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuICJVTktOT1dOIjsKLX0KLSNlbmRp
ZgotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0
ZWREYXRhYmFzZSgpCi17Ci0gICAgaWYgKG1fZGF0YWJhc2UtPm9wZW5lZCgpICYmICFtX2RhdGFi
YXNlLT5pc0ludGVycnVwdGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBk
YXRhYmFzZSB3YXMgc3RvcHBlZCwgZG9uJ3QgZG8gYW55dGhpbmcgYW5kIGNhbmNlbCBxdWV1ZWQg
d29yawotICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2Ugd2FzIHN0b3BwZWQgb3IgaW50ZXJy
dXB0ZWQgLSBjYW5jZWxsaW5nIHdvcmsgZm9yIHRoaXMgdHJhbnNhY3Rpb24iKTsKLSAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9zdGF0ZW1lbnRNdXRleCk7Ci0gICAgbV9zdGF0ZW1lbnRRdWV1ZS5j
bGVhcigpOwotICAgIG1fbmV4dFN0ZXAgPSAwOwotCi0gICAgLy8gUmVsZWFzZSB0aGUgdW5uZWVk
ZWQgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1fY2FsbGJhY2tX
cmFwcGVyLmNsZWFyKCk7Ci0gICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7Ci0g
ICAgbV9lcnJvckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOwotCi0gICAgLy8gVGhlIG5leHQgc3Rl
cHMgc2hvdWxkIGJlIGV4ZWN1dGVkIG9ubHkgaWYgd2UncmUgb24gdGhlIERCIHRocmVhZC4KLSAg
ICBpZiAoY3VycmVudFRocmVhZCgpICE9IGRhdGFiYXNlKCktPmRhdGFiYXNlQ29udGV4dCgpLT5k
YXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBUaGUgY3VycmVudCBTUUxpdGUgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIHN0b3BwZWQsIGFzIHdl
bGwKLSAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbikgewotICAgICAgICBtX3NxbGl0ZVRyYW5z
YWN0aW9uLT5zdG9wKCk7Ci0gICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAg
ICB9Ci0KLSAgICBpZiAobV9sb2NrQWNxdWlyZWQpCi0gICAgICAgIG1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7Ci19Ci0KLQotYm9vbCBTUUxU
cmFuc2FjdGlvbjo6cGVyZm9ybU5leHRTdGVwKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlN0
ZXAgJXNcbiIsIGRlYnVnU3RlcE5hbWUobV9uZXh0U3RlcCkpOwotCi0gICAgQVNTRVJUKG1fbmV4
dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9jayB8fAotICAgICAgICAgICBtX25l
eHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IHx8
Ci0gICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRz
IHx8Ci0gICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0
QW5kQ29tbWl0IHx8Ci0gICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpj
bGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2sgfHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAm
U1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk7Ci0K
LSAgICBjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSgpOwotCi0gICAg
aWYgKG1fbmV4dFN0ZXApCi0gICAgICAgICh0aGlzLT4qbV9uZXh0U3RlcCkoKTsKLQotICAgIC8v
IElmIHRoZXJlIGlzIG5vIG5leHRTdGVwIGFmdGVyIHBlcmZvcm1pbmcgdGhlIGFib3ZlIHN0ZXAs
IHRoZSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZQotICAgIHJldHVybiAhbV9uZXh0U3RlcDsKLX0K
LQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6cGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJDYWxsYmFjayAlc1xuIiwgZGVidWdTdGVwTmFtZShtX25leHRTdGVw
KSk7Ci0KLSAgICBBU1NFUlQobV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJU
cmFuc2FjdGlvbkNhbGxiYWNrIHx8Ci0gICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5z
YWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIHx8Ci0gICAgICAgICAgIG1f
bmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sgfHwK
LSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUlu
Y3JlYXNlQ2FsbGJhY2sgfHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rp
b246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2spOwotCi0gICAgY2hlY2tBbmRIYW5kbGVDbG9zZWRP
ckludGVycnVwdGVkRGF0YWJhc2UoKTsKLQotICAgIGlmIChtX25leHRTdGVwKQotICAgICAgICAo
dGhpcy0+Km1fbmV4dFN0ZXApKCk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246Om5vdGlmeURh
dGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKQotewotICAgIEFTU0VSVChjdXJyZW50VGhyZWFk
KCkgPT0gZGF0YWJhc2UoKS0+ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdl
dFRocmVhZElEKCkpOwotCi0gICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGlzIGluIHByb2dyZXNz
LCB3ZSBzaG91bGQgcm9sbCBpdCBiYWNrIGhlcmUsIHNpbmNlIHRoaXMgaXMgb3VyIGxhc3QKLSAg
ICAvLyBvcG9ydHVuaXR5IHRvIGRvIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMgdHJhbnNhY3Rp
b24gb24gdGhlIERCIHRocmVhZC4KLSAgICAvLyBDbGVhcmluZyBtX3NxbGl0ZVRyYW5zYWN0aW9u
IGludm9rZXMgU1FMaXRlVHJhbnNhY3Rpb24ncyBkZXN0cnVjdG9yIHdoaWNoIGRvZXMganVzdCB0
aGF0LgotICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLX0KLQotdm9pZCBTUUxUcmFu
c2FjdGlvbjo6YWNxdWlyZUxvY2soKQotewotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKS0+YWNxdWlyZUxvY2sodGhpcyk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246
OmxvY2tBY3F1aXJlZCgpCi17Ci0gICAgbV9sb2NrQWNxdWlyZWQgPSB0cnVlOwotICAgIG1fbmV4
dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodDsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgb3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0
IGltbWVkaWF0ZWx5IGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgbV9kYXRhYmFz
ZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcywgdHJ1ZSk7Ci19Ci0KLXZvaWQgU1FMVHJh
bnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCgpCi17Ci0gICAgQVNTRVJUKCFt
X2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKLSAg
ICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOwotCi0gICAgTE9HKFN0b3JhZ2VBUEksICJPcGVuaW5n
IGFuZCBwcmVmbGlnaHRpbmcgdHJhbnNhY3Rpb24gJXAiLCB0aGlzKTsKLQotICAgIC8vIElmIHRo
ZSBkYXRhYmFzZSB3YXMgZGVsZXRlZCwganVtcCB0byB0aGUgZXJyb3IgY2FsbGJhY2sKLSAgICBp
ZiAobV9kYXRhYmFzZS0+ZGVsZXRlZCgpKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0
YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMSwgU1FMRXJyb3I6OlVOS05PV05fRVJSLCAwKTsKLSAgICAg
ICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9X
Tl9FUlIsICJ1bmFibGUgdG8gb3BlbiBhIHRyYW5zYWN0aW9uLCBiZWNhdXNlIHRoZSB1c2VyIGRl
bGV0ZWQgdGhlIGRhdGFiYXNlIik7Ci0gICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFs
c2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBtYXhpbXVtIHVz
YWdlIGZvciB0aGlzIHRyYW5zYWN0aW9uIGlmIHRoaXMgdHJhbnNhY3Rpb25zIGlzIG5vdCByZWFk
LW9ubHkKLSAgICBpZiAoIW1fcmVhZE9ubHkpCi0gICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURh
dGFiYXNlKCkuc2V0TWF4aW11bVNpemUobV9kYXRhYmFzZS0+bWF4aW11bVNpemUoKSk7Ci0KLSAg
ICBBU1NFUlQoIW1fc3FsaXRlVHJhbnNhY3Rpb24pOwotICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24g
PSBhZG9wdFB0cihuZXcgU1FMaXRlVHJhbnNhY3Rpb24obV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJh
c2UoKSwgbV9yZWFkT25seSkpOwotCi0gICAgbV9kYXRhYmFzZS0+cmVzZXREZWxldGVzKCk7Ci0g
ICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKLSAgICBtX3NxbGl0ZVRyYW5zYWN0
aW9uLT5iZWdpbigpOwotICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKLQotICAg
IC8vIFRyYW5zYWN0aW9uIFN0ZXBzIDErMiAtIE9wZW4gYSB0cmFuc2FjdGlvbiB0byB0aGUgZGF0
YWJhc2UsIGp1bXBpbmcgdG8gdGhlIGVycm9yIGNhbGxiYWNrIGlmIHRoYXQgZmFpbHMKLSAgICBp
ZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgewotICAgICAgICBBU1NFUlQo
IW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwot
ICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNRTEVy
cm9yOjpEQVRBQkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9y
KCkpOwotICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVy
cm9yOjpEQVRBQkFTRV9FUlIsICJ1bmFibGUgdG8gYmVnaW4gdHJhbnNhY3Rpb24iLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0
ZURhdGFiYXNlKCkubGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7Ci0gICAg
ICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gTm90ZTogV2UgaW50ZW50aW9uYWxseSByZXRyaWV2ZSB0aGUgYWN0dWFsIHZl
cnNpb24gZXZlbiB3aXRoIGFuIGVtcHR5IGV4cGVjdGVkIHZlcnNpb24uCi0gICAgLy8gSW4gbXVs
dGktcHJvY2VzcyBicm93c2Vycywgd2UgdGFrZSB0aGlzIG9wcG9ydGludXRpeSB0byB1cGRhdGUg
dGhlIGNhY2hlZCB2YWx1ZSBmb3IKLSAgICAvLyB0aGUgYWN0dWFsIHZlcnNpb24uIEluIHNpbmds
ZS1wcm9jZXNzIGJyb3dzZXJzLCB0aGlzIGlzIGp1c3QgYSBtYXAgbG9va3VwLgotICAgIFN0cmlu
ZyBhY3R1YWxWZXJzaW9uOwotICAgIGlmICghbV9kYXRhYmFzZS0+Z2V0QWN0dWFsVmVyc2lvbkZv
clRyYW5zYWN0aW9uKGFjdHVhbFZlcnNpb24pKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9y
dFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMywgU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgbV9kYXRh
YmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSk7Ci0gICAgICAgIG1fdHJhbnNhY3Rp
b25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgInVuYWJs
ZSB0byByZWFkIHZlcnNpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCksIG1fZGF0
YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBtX2RhdGFi
YXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOwotICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNs
ZWFyKCk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKLSAgICAgICAg
aGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgbV9oYXNWZXJzaW9uTWlzbWF0Y2ggPSAhbV9kYXRhYmFzZS0+ZXhwZWN0ZWRWZXJzaW9uKCku
aXNFbXB0eSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobV9kYXRhYmFzZS0+ZXhw
ZWN0ZWRWZXJzaW9uKCkgIT0gYWN0dWFsVmVyc2lvbik7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbiBT
dGVwcyAzIC0gUGVmb3JtIHByZWZsaWdodCBzdGVwcywganVtcGluZyB0byB0aGUgZXJyb3IgY2Fs
bGJhY2sgaWYgdGhleSBmYWlsCi0gICAgaWYgKG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5wZXJm
b3JtUHJlZmxpZ2h0KHRoaXMpKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3Jp
emVyKCk7Ci0gICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICAgICAgbV9k
YXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOwotICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3Ig
PSBtX3dyYXBwZXItPnNxbEVycm9yKCk7Ci0gICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9y
KSB7Ci0gICAgICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0
KDQsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9u
RXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVua25vd24g
ZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRyYW5zYWN0aW9uIHByZWZsaWdodCIpOwotICAgICAgICB9
Ci0gICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcCA0IC0gSW52b2tlIHRoZSB0cmFuc2Fj
dGlvbiBjYWxsYmFjayB3aXRoIHRoZSBuZXcgU1FMVHJhbnNhY3Rpb24gb2JqZWN0Ci0gICAgbV9u
ZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2s7Ci0g
ICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNr
IGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVU
cmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxp
dmVyVHJhbnNhY3Rpb25DYWxsYmFjaygpCi17Ci0gICAgYm9vbCBzaG91bGREZWxpdmVyRXJyb3JD
YWxsYmFjayA9IGZhbHNlOwotCi0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNh
bGxiYWNrID0gbV9jYWxsYmFja1dyYXBwZXIudW53cmFwKCk7Ci0gICAgaWYgKGNhbGxiYWNrKSB7
Ci0gICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSB0cnVlOwotICAgICAgICBzaG91bGREZWxp
dmVyRXJyb3JDYWxsYmFjayA9ICFjYWxsYmFjay0+aGFuZGxlRXZlbnQodGhpcyk7Ci0gICAgICAg
IG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUcmFuc2FjdGlv
biBTdGVwIDUgLSBJZiB0aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2FzIG51bGwgb3IgcmFpc2Vk
IGFuIGV4Y2VwdGlvbiwganVtcCB0byB0aGUgZXJyb3IgY2FsbGJhY2sKLSAgICBpZiAoc2hvdWxk
RGVsaXZlckVycm9yQ2FsbGJhY2spIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRU
cmFuc2FjdGlvblJlc3VsdCg1LCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOwotICAgICAgICBt
X3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VS
UiwgInRoZSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIHdhcyBudWxsIG9yIHRocmV3IGFuIGV4Y2Vw
dGlvbiIpOwotICAgICAgICBkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHNjaGVkdWxlVG9SdW5TdGF0ZW1lbnRzKCk7Ci0KLSAgICBtX2RhdGFi
YXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKLX0KLQot
dm9pZCBTUUxUcmFuc2FjdGlvbjo6c2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKQorU1FMVHJhbnNh
Y3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrPiBjYWxsYmFjaywKKyAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nl
c3NDYWxsYmFjaywKKyAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBl
ciwgYm9vbCByZWFkT25seSkKKyAgICA6IFNRTFRyYW5zYWN0aW9uQmFja2VuZChkYiwgY2FsbGJh
Y2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkpCiB7
Ci0gICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVtZW50czsKLSAgICBM
T0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgcnVuU3RhdGVtZW50cyBmb3IgdHJhbnNhY3Rpb24g
JXBcbiIsIHRoaXMpOwotICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKHRo
aXMpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKCkKK1NRTFRyYW5z
YWN0aW9uKiBTUUxUcmFuc2FjdGlvbjo6ZnJvbShTUUxUcmFuc2FjdGlvbkJhY2tlbmQqIGJhY2tl
bmQpCiB7Ci0gICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKLQotICAgIC8vIElmIHRoZXJlIGlz
IGEgc2VyaWVzIG9mIHN0YXRlbWVudHMgcXVldWVkIHVwIHRoYXQgYXJlIGFsbCBzdWNjZXNzZnVs
IGFuZCBoYXZlIG5vIGFzc29jaWF0ZWQKLSAgICAvLyBTUUxTdGF0ZW1lbnRDYWxsYmFjayBvYmpl
Y3RzLCB0aGVuIHdlIGNhbiBidXJuIHRocm91Z2ggdGhlIHF1ZXVlCi0gICAgZG8gewotICAgICAg
ICBpZiAobV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQgJiYgIW1fc3FsaXRlVHJhbnNhY3Rp
b24tPndhc1JvbGxlZEJhY2tCeVNxbGl0ZSgpKSB7Ci0gICAgICAgICAgICBtX3Nob3VsZFJldHJ5
Q3VycmVudFN0YXRlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgLy8gRklYTUUgLSBBbm90aGVy
IHBsYWNlIHRoYXQgbmVlZHMgZml4aW5nIHVwIGFmdGVyIDxyZGFyOi8vcHJvYmxlbS81NjI4NDY4
PiBpcyBhZGRyZXNzZWQuCi0gICAgICAgICAgICAvLyBTZWUgOjpvcGVuVHJhbnNhY3Rpb25BbmRQ
cmVmbGlnaHQoKSBmb3IgZGlzY3Vzc2lvbgotCi0gICAgICAgICAgICAvLyBSZXNldCB0aGUgbWF4
aW11bSBzaXplIGhlcmUsIGFzIGl0IHdhcyBpbmNyZWFzZWQgdG8gYWxsb3cgdXMgdG8gcmV0cnkg
dGhpcyBzdGF0ZW1lbnQuCi0gICAgICAgICAgICAvLyBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRl
bWVudCBpcyBzZXQgdG8gdHJ1ZSBvbmx5IHdoZW4gYSBzdGF0ZW1lbnQgZXhjZWVkcwotICAgICAg
ICAgICAgLy8gdGhlIHF1b3RhLCB3aGljaCBjYW4gaGFwcGVuIG9ubHkgaW4gYSByZWFkLXdyaXRl
IHRyYW5zYWN0aW9uLiBUaGVyZWZvcmUsIHRoZXJlCi0gICAgICAgICAgICAvLyBpcyBubyBuZWVk
IHRvIGNoZWNrIGhlcmUgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIHJlYWQtd3JpdGUuCi0gICAgICAg
ICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnNldE1heGltdW1TaXplKG1fZGF0YWJh
c2UtPm1heGltdW1TaXplKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSWYg
dGhlIGN1cnJlbnQgc3RhdGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gcnVuLCBmYWlsZWQgZHVlIHRv
IHF1b3RhIGNvbnN0cmFpbnRzLCBhbmQgd2UncmUgbm90IHJldHJ5aW5nIGl0LAotICAgICAgICAg
ICAgLy8gdGhhdCBtZWFucyBpdCBlbmRlZCBpbiBhbiBlcnJvci4gIEhhbmRsZSBpdCBub3cKLSAg
ICAgICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQgJiYgbV9jdXJyZW50U3RhdGVtZW50LT5s
YXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpKSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxl
Q3VycmVudFN0YXRlbWVudEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYWR2YW5jZSB0byB0aGUgbmV4dCBz
dGF0ZW1lbnQKLSAgICAgICAgICAgIGdldE5leHRTdGF0ZW1lbnQoKTsKLSAgICAgICAgfQotICAg
IH0gd2hpbGUgKHJ1bkN1cnJlbnRTdGF0ZW1lbnQoKSk7Ci0KLSAgICAvLyBJZiBydW5DdXJyZW50
U3RhdGVtZW50KCkgcmV0dXJuZWQgZmFsc2UsIHRoYXQgbWVhbnMgZWl0aGVyIHRoZXJlIHdhcyBu
byBjdXJyZW50IHN0YXRlbWVudCB0byBydW4sCi0gICAgLy8gb3IgdGhlIGN1cnJlbnQgc3RhdGVt
ZW50IHJlcXVpcmVzIGEgY2FsbGJhY2sgdG8gY29tcGxldGUuICBJbiB0aGUgbGF0ZXIgY2FzZSwg
aXQgYWxzbyBzY2hlZHVsZWQKLSAgICAvLyB0aGUgY2FsbGJhY2sgb3IgcGVyZm9ybWVkIGFueSBv
dGhlciBhZGRpdGlvbmFsIHdvcmsgc28gd2UgY2FuIHJldHVybgotICAgIGlmICghbV9jdXJyZW50
U3RhdGVtZW50KQotICAgICAgICBwb3N0ZmxpZ2h0QW5kQ29tbWl0KCk7Ci19Ci0KLXZvaWQgU1FM
VHJhbnNhY3Rpb246OmdldE5leHRTdGF0ZW1lbnQoKQotewotICAgIG1fY3VycmVudFN0YXRlbWVu
dCA9IDA7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9zdGF0ZW1lbnRNdXRleCk7Ci0gICAg
aWYgKCFtX3N0YXRlbWVudFF1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2N1cnJlbnRTdGF0
ZW1lbnQgPSBtX3N0YXRlbWVudFF1ZXVlLnRha2VGaXJzdCgpOwotICAgIH0KLX0KLQotYm9vbCBT
UUxUcmFuc2FjdGlvbjo6cnVuQ3VycmVudFN0YXRlbWVudCgpCi17Ci0gICAgaWYgKCFtX2N1cnJl
bnRTdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZGF0YWJhc2UtPnJl
c2V0QXV0aG9yaXplcigpOwotCi0gICAgaWYgKG1faGFzVmVyc2lvbk1pc21hdGNoKQotICAgICAg
ICBtX2N1cnJlbnRTdGF0ZW1lbnQtPnNldFZlcnNpb25NaXNtYXRjaGVkRXJyb3IobV9kYXRhYmFz
ZS5nZXQoKSk7Ci0KLSAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50LT5leGVjdXRlKG1fZGF0YWJh
c2UuZ2V0KCkpKSB7Ci0gICAgICAgIGlmIChtX2RhdGFiYXNlLT5sYXN0QWN0aW9uQ2hhbmdlZERh
dGFiYXNlKCkpIHsKLSAgICAgICAgICAgIC8vIEZsYWcgdGhpcyB0cmFuc2FjdGlvbiBhcyBoYXZp
bmcgY2hhbmdlZCB0aGUgZGF0YWJhc2UgZm9yIGxhdGVyIGRlbGVnYXRlIG5vdGlmaWNhdGlvbgot
ICAgICAgICAgICAgbV9tb2RpZmllZERhdGFiYXNlID0gdHJ1ZTsKLSAgICAgICAgICAgIC8vIEFs
c28gZGlydHkgdGhlIHNpemUgb2YgdGhpcyBkYXRhYmFzZSBmaWxlIGZvciBjYWxjdWxhdGluZyBx
dW90YSB1c2FnZQotICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+
ZGlkRXhlY3V0ZVN0YXRlbWVudChkYXRhYmFzZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtX2N1cnJlbnRTdGF0ZW1lbnQtPmhhc1N0YXRlbWVudENhbGxiYWNrKCkpIHsKLSAgICAgICAg
ICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFj
azsKLSAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyU3RhdGVt
ZW50Q2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgICAgIG1f
ZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayh0aGlzKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50LT5sYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90
YSgpKSB7Ci0gICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90
YUluY3JlYXNlQ2FsbGJhY2s7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBk
ZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7
Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayh0aGlzKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGhhbmRsZUN1cnJlbnRTdGF0ZW1l
bnRFcnJvcigpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9u
OjpoYW5kbGVDdXJyZW50U3RhdGVtZW50RXJyb3IoKQotewotICAgIC8vIFRyYW5zYWN0aW9uIFN0
ZXBzIDYuZXJyb3IgLSBDYWxsIHRoZSBzdGF0ZW1lbnQncyBlcnJvciBjYWxsYmFjaywgYnV0IGlm
IHRoZXJlIHdhcyBubyBlcnJvciBjYWxsYmFjaywKLSAgICAvLyBvciB0aGUgdHJhbnNhY3Rpb24g
d2FzIHJvbGxlZCBiYWNrLCBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjawot
ICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQtPmhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSAm
JiAhbV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3FsaXRlKCkpIHsKLSAgICAg
ICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNr
OwotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgZGVsaXZlclN0YXRlbWVudENh
bGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgICAgIG1fZGF0YWJhc2Ut
PnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayh0aGlzKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX2N1cnJlbnRTdGF0ZW1lbnQtPnNxbEVycm9yKCk7Ci0g
ICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKSB7Ci0gICAgICAgICAgICBtX2RhdGFiYXNl
LT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgxLCBTUUxFcnJvcjo6REFUQUJBU0VfRVJS
LCAwKTsKLSAgICAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
U1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgInRoZSBzdGF0ZW1lbnQgZmFpbGVkIHRvIGV4ZWN1dGUi
KTsKLSAgICAgICAgfQotICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGZhbHNlKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjaygp
Ci17Ci0gICAgQVNTRVJUKG1fY3VycmVudFN0YXRlbWVudCk7Ci0KLSAgICAvLyBUcmFuc2FjdGlv
biBTdGVwIDYuNiBhbmQgNi4zKGVycm9yKSAtIElmIHRoZSBzdGF0ZW1lbnQgY2FsbGJhY2sgd2Vu
dCB3cm9uZywganVtcCB0byB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2sKLSAgICAvLyBP
dGhlcndpc2UsIGNvbnRpbnVlIHRvIGxvb3AgdGhyb3VnaCB0aGUgc3RhdGVtZW50IHF1ZXVlCi0g
ICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IHRydWU7Ci0gICAgYm9vbCByZXN1bHQgPSBtX2N1cnJl
bnRTdGF0ZW1lbnQtPnBlcmZvcm1DYWxsYmFjayh0aGlzKTsKLSAgICBtX2V4ZWN1dGVTcWxBbGxv
d2VkID0gZmFsc2U7Ci0KLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJl
cG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7
Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6
OlVOS05PV05fRVJSLCAidGhlIHN0YXRlbWVudCBjYWxsYmFjayByYWlzZWQgYW4gZXhjZXB0aW9u
IG9yIHN0YXRlbWVudCBlcnJvciBjYWxsYmFjayBkaWQgbm90IHJldHVybiBmYWxzZSIpOwotICAg
ICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKHRydWUpOwotICAgIH0gZWxzZQotICAgICAgICBz
Y2hlZHVsZVRvUnVuU3RhdGVtZW50cygpOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxp
dmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrKCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50U3RhdGVt
ZW50KTsKLSAgICBBU1NFUlQoIW1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KTsKLQotICAg
IG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25D
bGllbnQoKS0+ZGlkRXhjZWVkUXVvdGEoZGF0YWJhc2UoKSk7Ci0KLSAgICBtX25leHRTdGVwID0g
JlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzOwotICAgIExPRyhTdG9yYWdlQVBJLCAiU2No
ZWR1bGluZyBydW5TdGF0ZW1lbnRzIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAg
bV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Ci19Ci0KLXZvaWQgU1FM
VHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRDb21taXQoKQotewotICAgIEFTU0VSVChtX2xvY2tB
Y3F1aXJlZCk7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDcgLSBQZWZvcm0gcG9zdGZsaWdo
dCBzdGVwcywganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhleSBmYWlsCi0gICAg
aWYgKG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5wZXJmb3JtUG9zdGZsaWdodCh0aGlzKSkgewot
ICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX3dyYXBwZXItPnNxbEVycm9yKCk7Ci0gICAg
ICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKSB7Ci0gICAgICAgICAgICBtX2RhdGFiYXNlLT5y
ZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgzLCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDAp
OwotICAgICAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxF
cnJvcjo6VU5LTk9XTl9FUlIsICJ1bmtub3duIGVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc2Fj
dGlvbiBwb3N0ZmxpZ2h0Iik7Ci0gICAgICAgIH0KLSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25F
cnJvcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBUcmFuc2FjdG9u
IFN0ZXAgOCs5IC0gQ29tbWl0IHRoZSB0cmFuc2FjdGlvbiwganVtcGluZyB0byB0aGUgZXJyb3Ig
Y2FsbGJhY2sgaWYgdGhhdCBmYWlscwotICAgIEFTU0VSVChtX3NxbGl0ZVRyYW5zYWN0aW9uKTsK
LQotICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7Ci0gICAgbV9zcWxpdGVUcmFu
c2FjdGlvbi0+Y29tbWl0KCk7Ci0gICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOwot
Ci0gICAgLy8gSWYgdGhlIGNvbW1pdCBmYWlsZWQsIHRoZSB0cmFuc2FjdGlvbiB3aWxsIHN0aWxs
IGJlIG1hcmtlZCBhcyAiaW4gcHJvZ3Jlc3MiCi0gICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24t
PmluUHJvZ3Jlc3MoKSkgewotICAgICAgICBpZiAobV93cmFwcGVyKQotICAgICAgICAgICAgbV93
cmFwcGVyLT5oYW5kbGVDb21taXRGYWlsZWRBZnRlclBvc3RmbGlnaHQodGhpcyk7Ci0gICAgICAg
IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci5jbGVhcigpOwotICAgICAgICBtX2RhdGFiYXNlLT5y
ZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCg0LCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBt
X2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpKTsKLSAgICAgICAgbV90cmFu
c2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAi
dW5hYmxlIHRvIGNvbW1pdCB0cmFuc2FjdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJy
b3IoKSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMCwgLTEs
IDApOyAvLyBPSwotCi0gICAgLy8gVmFjdXVtIHRoZSBkYXRhYmFzZSBpZiBhbnl0aGluZyB3YXMg
ZGVsZXRlZC4KLSAgICBpZiAobV9kYXRhYmFzZS0+aGFkRGVsZXRlcygpKQotICAgICAgICBtX2Rh
dGFiYXNlLT5pbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7Ci0KLSAgICAvLyBUaGUgY29tbWl0
IHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgdHJhbnNhY3Rpb24gbW9kaWZpZWQgdGhpcyBkYXRhYmFz
ZSwgbm90aWZ5IHRoZSBkZWxlZ2F0ZXMuCi0gICAgaWYgKG1fbW9kaWZpZWREYXRhYmFzZSkKLSAg
ICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkQ29tbWl0V3JpdGVUcmFu
c2FjdGlvbihkYXRhYmFzZSgpKTsKLQotICAgIC8vIE5vdyByZWxlYXNlIG91ciB1bm5lZWRlZCBj
YWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCi0gICAgbV9lcnJvckNhbGxiYWNr
V3JhcHBlci5jbGVhcigpOwotCi0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMCAtIERlbGl2ZXIg
c3VjY2VzcyBjYWxsYmFjaywgaWYgdGhlcmUgaXMgb25lCi0gICAgaWYgKG1fc3VjY2Vzc0NhbGxi
YWNrV3JhcHBlci5oYXNDYWxsYmFjaygpKSB7Ci0gICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJh
bnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2s7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiU2NoZWR1bGluZyBkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxu
IiwgdGhpcyk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFj
ayh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNr
KCk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2soKQot
ewotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTAgLSBEZWxpdmVyIHN1Y2Nlc3MgY2FsbGJhY2sK
LSAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSBtX3N1Y2Nlc3NDYWxs
YmFja1dyYXBwZXIudW53cmFwKCk7Ci0gICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykKLSAgICAgICAg
c3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudCgpOwotCi0gICAgLy8gU2NoZWR1bGUgYSAicG9z
dC1zdWNjZXNzIGNhbGxiYWNrIiBzdGVwIHRvIHJldHVybiBjb250cm9sIHRvIHRoZSBkYXRhYmFz
ZSB0aHJlYWQgaW4gY2FzZSB0aGVyZQotICAgIC8vIGFyZSBmdXJ0aGVyIHRyYW5zYWN0aW9ucyBx
dWV1ZWQgdXAgZm9yIHRoaXMgRGF0YWJhc2UKLSAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0
aW9uOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2s7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJT
Y2hlZHVsaW5nIGNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBc
biIsIHRoaXMpOwotICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKHRoaXMp
OwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2so
KQotewotICAgIEFTU0VSVChtX2xvY2tBY3F1aXJlZCk7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbiBT
dGVwIDExIC0gRW5kIHRyYW5zYWN0aW9uIHN0ZXBzCi0gICAgLy8gVGhlcmUgaXMgbm8gbmV4dCBz
dGVwCi0gICAgTE9HKFN0b3JhZ2VBUEksICJUcmFuc2FjdGlvbiAlcCBpcyBjb21wbGV0ZVxuIiwg
dGhpcyk7Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0
aW9uSW5Qcm9ncmVzcygpKTsKLSAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7Ci0gICAg
bV9uZXh0U3RlcCA9IDA7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBsb2NrIG9uIHRoaXMgZGF0YWJh
c2UKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPnJlbGVhc2VMb2Nr
KHRoaXMpOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFuc2FjdGlvbkVycm9y
KGJvb2wgaW5DYWxsYmFjaykKLXsKLSAgICBpZiAobV9lcnJvckNhbGxiYWNrV3JhcHBlci5oYXND
YWxsYmFjaygpKSB7Ci0gICAgICAgIGlmIChpbkNhbGxiYWNrKQotICAgICAgICAgICAgZGVsaXZl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2s7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgZGVsaXZlclRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwotICAg
ICAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBObyBlcnJvciBjYWxs
YmFjaywgc28gZmFzdC1mb3J3YXJkIHRvOgotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBS
b2xsYmFjayB0aGUgdHJhbnNhY3Rpb24uCi0gICAgaWYgKGluQ2FsbGJhY2spIHsKLSAgICAgICAg
bV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrOwotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFm
dGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7
Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKHRoaXMpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygp
OwotICAgIH0KLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaygpCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25FcnJvcik7Ci0KLSAgICAv
LyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gSWYgZXhpc3RzLCBpbnZva2UgZXJyb3IgY2FsbGJhY2sg
d2l0aCB0aGUgbGFzdAotICAgIC8vIGVycm9yIHRvIGhhdmUgb2NjdXJyZWQgaW4gdGhpcyB0cmFu
c2FjdGlvbi4KLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrID0gbV9lcnJvckNhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKLSAgICBpZiAoZXJyb3JD
YWxsYmFjaykKLSAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQobV90cmFuc2FjdGlv
bkVycm9yLmdldCgpKTsKLQotICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmNsZWFu
dXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlNj
aGVkdWxpbmcgY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2Fj
dGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0
ZXAodGhpcyk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaygpCi17Ci0gICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKLQotICAg
IG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7Ci0gICAgaWYgKG1fc3FsaXRlVHJhbnNh
Y3Rpb24pIHsKLSAgICAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxiYWNrIHRoZSB0
cmFuc2FjdGlvbi4KLSAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKLQot
ICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25J
blByb2dyZXNzKCkpOwotICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7Ci0gICAg
fQotICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKLQotICAgIC8vIFRyYW5zYWN0
aW9uIFN0ZXAgMTIgLSBBbnkgc3RpbGwtcGVuZGluZyBzdGF0ZW1lbnRzIGluIHRoZSB0cmFuc2Fj
dGlvbiBhcmUgZGlzY2FyZGVkLgotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
c3RhdGVtZW50TXV0ZXgpOwotICAgICAgICBtX3N0YXRlbWVudFF1ZXVlLmNsZWFyKCk7Ci0gICAg
fQotCi0gICAgLy8gVHJhbnNhY3Rpb24gaXMgY29tcGxldGUhICBUaGVyZSBpcyBubyBuZXh0IHN0
ZXAKLSAgICBMT0coU3RvcmFnZUFQSSwgIlRyYW5zYWN0aW9uICVwIGlzIGNvbXBsZXRlIHdpdGgg
YW4gZXJyb3JcbiIsIHRoaXMpOwotICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJh
c2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgbV9uZXh0U3RlcCA9IDA7Ci0KLSAg
ICAvLyBOb3cgcmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRhdGFiYXNlCi0gICAgbV9kYXRhYmFz
ZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U1FMVHJhbnNhY3Rpb24qPihiYWNrZW5kKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaAkocmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNSwxMTAgKzI1LDI2IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
KwogI2lmbmRlZiBTUUxUcmFuc2FjdGlvbl9oCiAjZGVmaW5lIFNRTFRyYW5zYWN0aW9uX2gKIAog
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJEYXRhYmFzZUJhc2ljVHlwZXMu
aCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEYXRhYmFzZTsKLWNsYXNz
IFNRTEVycm9yOwotY2xhc3MgU1FMaXRlVHJhbnNhY3Rpb247Ci1jbGFzcyBTUUxTdGF0ZW1lbnRD
YWxsYmFjazsKLWNsYXNzIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s7Ci1jbGFzcyBTUUxUcmFu
c2FjdGlvbjsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s7Ci1jbGFzcyBTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s7Ci1jbGFzcyBTUUxWYWx1ZTsKLWNsYXNzIFZvaWRDYWxsYmFjazsK
LQotY2xhc3MgU1FMVHJhbnNhY3Rpb25XcmFwcGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gewotcHVibGljOgotICAgIHZpcnR1YWwgflNRTFRy
YW5zYWN0aW9uV3JhcHBlcigpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUHJlZmxpZ2h0
KFNRTFRyYW5zYWN0aW9uKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUG9zdGZsaWdo
dChTUUxUcmFuc2FjdGlvbiopID0gMDsKLSAgICB2aXJ0dWFsIFNRTEVycm9yKiBzcWxFcnJvcigp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQ29tbWl0RmFpbGVkQWZ0ZXJQb3N0
ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uKikgPSAwOwotfTsKLQotY2xhc3MgU1FMVHJhbnNhY3Rpb24g
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb24+IHsKK2NsYXNzIFNR
TFRyYW5zYWN0aW9uIDogcHVibGljIFNRTFRyYW5zYWN0aW9uQmFja2VuZCB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IGNyZWF0ZShEYXRhYmFzZSosIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
bldyYXBwZXI+LCBib29sIHJlYWRPbmx5ID0gZmFsc2UpOwogCi0gICAgflNRTFRyYW5zYWN0aW9u
KCk7Ci0KLSAgICB2b2lkIGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNv
bnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgUGFz
c1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgbG9ja0FjcXVpcmVkKCk7
Ci0gICAgYm9vbCBwZXJmb3JtTmV4dFN0ZXAoKTsKLSAgICB2b2lkIHBlcmZvcm1QZW5kaW5nQ2Fs
bGJhY2soKTsKLQotICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2Uu
Z2V0KCk7IH0KLSAgICBib29sIGlzUmVhZE9ubHkoKSB7IHJldHVybiBtX3JlYWRPbmx5OyB9Ci0g
ICAgdm9pZCBub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7CisgICAgc3RhdGlj
IFNRTFRyYW5zYWN0aW9uKiBmcm9tKFNRTFRyYW5zYWN0aW9uQmFja2VuZCopOwogCiBwcml2YXRl
OgogICAgIFNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAogICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5KTsKLQotICAgIHR5cGVkZWYgdm9pZCAo
U1FMVHJhbnNhY3Rpb246OipUcmFuc2FjdGlvblN0ZXBNZXRob2QpKCk7Ci0gICAgVHJhbnNhY3Rp
b25TdGVwTWV0aG9kIG1fbmV4dFN0ZXA7Ci0KLSAgICB2b2lkIGVucXVldWVTdGF0ZW1lbnQoUGFz
c1JlZlB0cjxTUUxTdGF0ZW1lbnQ+KTsKLQotICAgIHZvaWQgY2hlY2tBbmRIYW5kbGVDbG9zZWRP
ckludGVycnVwdGVkRGF0YWJhc2UoKTsKLQotICAgIHZvaWQgYWNxdWlyZUxvY2soKTsKLSAgICB2
b2lkIG9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCgpOwotICAgIHZvaWQgZGVsaXZlclRyYW5z
YWN0aW9uQ2FsbGJhY2soKTsKLSAgICB2b2lkIHNjaGVkdWxlVG9SdW5TdGF0ZW1lbnRzKCk7Ci0g
ICAgdm9pZCBydW5TdGF0ZW1lbnRzKCk7Ci0gICAgdm9pZCBnZXROZXh0U3RhdGVtZW50KCk7Ci0g
ICAgYm9vbCBydW5DdXJyZW50U3RhdGVtZW50KCk7Ci0gICAgdm9pZCBoYW5kbGVDdXJyZW50U3Rh
dGVtZW50RXJyb3IoKTsKLSAgICB2b2lkIGRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjaygpOwotICAg
IHZvaWQgZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjaygpOwotICAgIHZvaWQgcG9zdGZsaWdo
dEFuZENvbW1pdCgpOwotICAgIHZvaWQgZGVsaXZlclN1Y2Nlc3NDYWxsYmFjaygpOwotICAgIHZv
aWQgY2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrKCk7Ci0gICAgdm9pZCBoYW5kbGVUcmFuc2Fj
dGlvbkVycm9yKGJvb2wgaW5DYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxpdmVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKCk7Ci0gICAgdm9pZCBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2soKTsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVi
dWdTdGVwTmFtZShUcmFuc2FjdGlvblN0ZXBNZXRob2QpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8
U1FMU3RhdGVtZW50PiBtX2N1cnJlbnRTdGF0ZW1lbnQ7Ci0KLSAgICBib29sIG1fZXhlY3V0ZVNx
bEFsbG93ZWQ7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7Ci0gICAgUmVmUHRy
PFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gbV93cmFwcGVyOwotICAgIFNRTENhbGxiYWNrV3JhcHBl
cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrV3JhcHBlcjsKLSAgICBTUUxDYWxs
YmFja1dyYXBwZXI8Vm9pZENhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXI7Ci0gICAg
U1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gbV9lcnJvckNh
bGxiYWNrV3JhcHBlcjsKLSAgICBSZWZQdHI8U1FMRXJyb3I+IG1fdHJhbnNhY3Rpb25FcnJvcjsK
LSAgICBib29sIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50OwotICAgIGJvb2wgbV9tb2Rp
ZmllZERhdGFiYXNlOwotICAgIGJvb2wgbV9sb2NrQWNxdWlyZWQ7Ci0gICAgYm9vbCBtX3JlYWRP
bmx5OwotICAgIGJvb2wgbV9oYXNWZXJzaW9uTWlzbWF0Y2g7Ci0KLSAgICBNdXRleCBtX3N0YXRl
bWVudE11dGV4OwotICAgIERlcXVlPFJlZlB0cjxTUUxTdGF0ZW1lbnQ+ID4gbV9zdGF0ZW1lbnRR
dWV1ZTsKLQotICAgIE93blB0cjxTUUxpdGVUcmFuc2FjdGlvbj4gbV9zcWxpdGVUcmFuc2FjdGlv
bjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2Vu
ZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjI1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rp
b25CYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKKyNpbmNsdWRlICJEYXRh
YmFzZUJhY2tlbmRDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNR
TEVycm9yLmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU1FMU3RhdGVt
ZW50Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisj
aW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNhbGxi
YWNrLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKKyNpbmNsdWRlICJTUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlICJTUUxpdGVUcmFuc2Fj
dGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJW
b2lkQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKKy8vIFRoZXJlJ3Mgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSBob3cg
bXVjaCBtb3JlIHNwYWNlIHdpbGwgYmUgcmVxdWlyZWQgd2hlbiBhIHN0YXRlbWVudCBoaXRzIHRo
ZSBxdW90YSBsaW1pdC4KKy8vIEZvciBub3csIHdlJ2xsIGFyYml0cmFyaWx5IGNob29zZSBjdXJy
ZW50UXVvdGEgKyAxbWIuCisvLyBJbiB0aGUgZnV0dXJlIHdlIGRlY2lkZSB0byB0cmFjayBpZiBh
IHNpemUgaW5jcmVhc2Ugd2Fzbid0IGVub3VnaCwgYW5kIGFzayBmb3IgbGFyZ2VyLWFuZC1sYXJn
ZXIgaW5jcmVhc2VzIHVudGlsIGl0cyBlbm91Z2guCitzdGF0aWMgY29uc3QgaW50IERlZmF1bHRR
dW90YVNpemVJbmNyZWFzZSA9IDEwNDg1NzY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1FM
VHJhbnNhY3Rpb25CYWNrZW5kOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQoRGF0YWJhc2UqIGRiLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLAorICAgIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRy
PFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLAorICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQorICAgIDogbV9uZXh0U3RlcCgm
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjphY3F1aXJlTG9jaykKKyAgICAsIG1fZXhlY3V0ZVNxbEFs
bG93ZWQoZmFsc2UpCisgICAgLCBtX2RhdGFiYXNlKGRiKQorICAgICwgbV93cmFwcGVyKHdyYXBw
ZXIpCisgICAgLCBtX2NhbGxiYWNrV3JhcHBlcihjYWxsYmFjaywgZGItPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkKKyAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlcihzdWNjZXNzQ2FsbGJh
Y2ssIGRiLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX2Vycm9yQ2FsbGJhY2tX
cmFwcGVyKGVycm9yQ2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAg
LCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudChmYWxzZSkKKyAgICAsIG1fbW9kaWZpZWRE
YXRhYmFzZShmYWxzZSkKKyAgICAsIG1fbG9ja0FjcXVpcmVkKGZhbHNlKQorICAgICwgbV9yZWFk
T25seShyZWFkT25seSkKKyAgICAsIG1faGFzVmVyc2lvbk1pc21hdGNoKGZhbHNlKQoreworICAg
IEFTU0VSVChtX2RhdGFiYXNlKTsKK30KKworU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjp+U1FMVHJh
bnNhY3Rpb25CYWNrZW5kKCkKK3sKKyAgICBBU1NFUlQoIW1fc3FsaXRlVHJhbnNhY3Rpb24pOwor
fQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcm
IHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVm
UHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBjYWxsYmFja0Vycm9yLCBFeGNlcHRpb25Db2RlJiBlKQoreworICAg
IGlmICghbV9leGVjdXRlU3FsQWxsb3dlZCB8fCAhbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKKyAg
ICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaW50IHBlcm1pc3Npb25zID0gRGF0YWJhc2VBdXRob3JpemVyOjpSZWFkV3JpdGVNYXNrOwor
ICAgIGlmICghbV9kYXRhYmFzZS0+ZGF0YWJhc2VDb250ZXh0KCktPmFsbG93RGF0YWJhc2VBY2Nl
c3MoKSkKKyAgICAgICAgcGVybWlzc2lvbnMgfD0gRGF0YWJhc2VBdXRob3JpemVyOjpOb0FjY2Vz
c01hc2s7CisgICAgZWxzZSBpZiAobV9yZWFkT25seSkKKyAgICAgICAgcGVybWlzc2lvbnMgfD0g
RGF0YWJhc2VBdXRob3JpemVyOjpSZWFkT25seU1hc2s7CisKKyAgICBSZWZQdHI8U1FMU3RhdGVt
ZW50PiBzdGF0ZW1lbnQgPSBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShtX2RhdGFiYXNlLmdldCgpLCBz
cWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGNhbGxiYWNrRXJyb3IsIHBlcm1pc3Np
b25zKTsKKworICAgIGlmIChtX2RhdGFiYXNlLT5kZWxldGVkKCkpCisgICAgICAgIHN0YXRlbWVu
dC0+c2V0RGF0YWJhc2VEZWxldGVkRXJyb3IobV9kYXRhYmFzZS5nZXQoKSk7CisKKyAgICBlbnF1
ZXVlU3RhdGVtZW50KHN0YXRlbWVudCk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5k
OjplbnF1ZXVlU3RhdGVtZW50KFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQpCit7
CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3RhdGVtZW50TXV0ZXgpOworICAgIG1fc3RhdGVt
ZW50UXVldWUuYXBwZW5kKHN0YXRlbWVudCk7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECitjb25z
dCBjaGFyKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlYnVnU3RlcE5hbWUoU1FMVHJhbnNhY3Rp
b25CYWNrZW5kOjpUcmFuc2FjdGlvblN0ZXBNZXRob2Qgc3RlcCkKK3sKKyAgICBpZiAoc3RlcCA9
PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjphY3F1aXJlTG9jaykKKyAgICAgICAgcmV0dXJuICJh
Y3F1aXJlTG9jayI7CisgICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6b3Bl
blRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KQorICAgICAgICByZXR1cm4gIm9wZW5UcmFuc2FjdGlv
bkFuZFByZWZsaWdodCI7CisgICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
cnVuU3RhdGVtZW50cykKKyAgICAgICAgcmV0dXJuICJydW5TdGF0ZW1lbnRzIjsKKyAgICBpZiAo
c3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KQorICAg
ICAgICByZXR1cm4gInBvc3RmbGlnaHRBbmRDb21taXQiOworICAgIGlmIChzdGVwID09ICZTUUxU
cmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaykK
KyAgICAgICAgcmV0dXJuICJjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2siOwor
ICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJUcmFuc2FjdGlv
bkNhbGxiYWNrKQorICAgICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrIjsK
KyAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrKQorICAgICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2siOworICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2
ZXJTdGF0ZW1lbnRDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuICJkZWxpdmVyU3RhdGVtZW50Q2Fs
bGJhY2siOworICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJR
dW90YUluY3JlYXNlQ2FsbGJhY2spCisgICAgICAgIHJldHVybiAiZGVsaXZlclF1b3RhSW5jcmVh
c2VDYWxsYmFjayI7CisgICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVs
aXZlclN1Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuICJkZWxpdmVyU3VjY2Vzc0NhbGxi
YWNrIjsKKyAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVhbnVwQWZ0
ZXJTdWNjZXNzQ2FsbGJhY2spCisgICAgICAgIHJldHVybiAiY2xlYW51cEFmdGVyU3VjY2Vzc0Nh
bGxiYWNrIjsKKyAgICByZXR1cm4gIlVOS05PV04iOworfQorI2VuZGlmCisKK3ZvaWQgU1FMVHJh
bnNhY3Rpb25CYWNrZW5kOjpjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFz
ZSgpCit7CisgICAgaWYgKG1fZGF0YWJhc2UtPm9wZW5lZCgpICYmICFtX2RhdGFiYXNlLT5pc0lu
dGVycnVwdGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3
YXMgc3RvcHBlZCwgZG9uJ3QgZG8gYW55dGhpbmcgYW5kIGNhbmNlbCBxdWV1ZWQgd29yaworICAg
IExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2Ugd2FzIHN0b3BwZWQgb3IgaW50ZXJydXB0ZWQgLSBj
YW5jZWxsaW5nIHdvcmsgZm9yIHRoaXMgdHJhbnNhY3Rpb24iKTsKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV9zdGF0ZW1lbnRNdXRleCk7CisgICAgbV9zdGF0ZW1lbnRRdWV1ZS5jbGVhcigpOwor
ICAgIG1fbmV4dFN0ZXAgPSAwOworCisgICAgLy8gUmVsZWFzZSB0aGUgdW5uZWVkZWQgY2FsbGJh
Y2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIG1fY2FsbGJhY2tXcmFwcGVyLmNs
ZWFyKCk7CisgICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7CisgICAgbV9lcnJv
ckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOworCisgICAgLy8gVGhlIG5leHQgc3RlcHMgc2hvdWxk
IGJlIGV4ZWN1dGVkIG9ubHkgaWYgd2UncmUgb24gdGhlIERCIHRocmVhZC4KKyAgICBpZiAoY3Vy
cmVudFRocmVhZCgpICE9IGRhdGFiYXNlKCktPmRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRo
cmVhZCgpLT5nZXRUaHJlYWRJRCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgY3Vy
cmVudCBTUUxpdGUgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIHN0b3BwZWQsIGFzIHdlbGwKKyAgICBp
ZiAobV9zcWxpdGVUcmFuc2FjdGlvbikgeworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5z
dG9wKCk7CisgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICB9CisKKyAg
ICBpZiAobV9sb2NrQWNxdWlyZWQpCisgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7Cit9CisKKworYm9vbCBTUUxUcmFuc2FjdGlv
bkJhY2tlbmQ6OnBlcmZvcm1OZXh0U3RlcCgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJTdGVw
ICVzXG4iLCBkZWJ1Z1N0ZXBOYW1lKG1fbmV4dFN0ZXApKTsKKworICAgIEFTU0VSVChtX25leHRT
dGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmFjcXVpcmVMb2NrCisgICAgICAgIHx8IG1f
bmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6b3BlblRyYW5zYWN0aW9uQW5kUHJl
ZmxpZ2h0CisgICAgICAgIHx8IG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
cnVuU3RhdGVtZW50cworICAgICAgICB8fCBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQ6OnBvc3RmbGlnaHRBbmRDb21taXQKKyAgICAgICAgfHwgbV9uZXh0U3RlcCA9PSAmU1FM
VHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2sKKyAgICAgICAg
fHwgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVhbnVwQWZ0ZXJUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2spOworCisgICAgY2hlY2tBbmRIYW5kbGVDbG9zZWRPckludGVy
cnVwdGVkRGF0YWJhc2UoKTsKKworICAgIGlmIChtX25leHRTdGVwKQorICAgICAgICAodGhpcy0+
Km1fbmV4dFN0ZXApKCk7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBuZXh0U3RlcCBhZnRlciBw
ZXJmb3JtaW5nIHRoZSBhYm92ZSBzdGVwLCB0aGUgdHJhbnNhY3Rpb24gaXMgY29tcGxldGUKKyAg
ICByZXR1cm4gIW1fbmV4dFN0ZXA7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpw
ZXJmb3JtUGVuZGluZ0NhbGxiYWNrKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkNhbGxiYWNr
ICVzXG4iLCBkZWJ1Z1N0ZXBOYW1lKG1fbmV4dFN0ZXApKTsKKworICAgIEFTU0VSVChtX25leHRT
dGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNr
CisgICAgICAgIHx8IG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaworICAgICAgICB8fCBtX25leHRTdGVwID09ICZTUUxU
cmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjaworICAgICAgICB8fCBt
X25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJRdW90YUluY3JlYXNl
Q2FsbGJhY2sKKyAgICAgICAgfHwgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5k
OjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKTsKKworICAgIGNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJ
bnRlcnJ1cHRlZERhdGFiYXNlKCk7CisKKyAgICBpZiAobV9uZXh0U3RlcCkKKyAgICAgICAgKHRo
aXMtPiptX25leHRTdGVwKSgpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6bm90
aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpCit7CisgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBkYXRhYmFzZSgpLT5kYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQo
KS0+Z2V0VGhyZWFkSUQoKSk7CisKKyAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgaW4gcHJv
Z3Jlc3MsIHdlIHNob3VsZCByb2xsIGl0IGJhY2sgaGVyZSwgc2luY2UgdGhpcyBpcyBvdXIgbGFz
dAorICAgIC8vIG9wb3J0dW5pdHkgdG8gZG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyB0cmFu
c2FjdGlvbiBvbiB0aGUgREIgdGhyZWFkLgorICAgIC8vIENsZWFyaW5nIG1fc3FsaXRlVHJhbnNh
Y3Rpb24gaW52b2tlcyBTUUxpdGVUcmFuc2FjdGlvbidzIGRlc3RydWN0b3Igd2hpY2ggZG9lcyBq
dXN0IHRoYXQuCisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOworfQorCit2b2lkIFNR
TFRyYW5zYWN0aW9uQmFja2VuZDo6YWNxdWlyZUxvY2soKQoreworICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+YWNxdWlyZUxvY2sodGhpcyk7Cit9CisKK3ZvaWQgU1FM
VHJhbnNhY3Rpb25CYWNrZW5kOjpsb2NrQWNxdWlyZWQoKQoreworICAgIG1fbG9ja0FjcXVpcmVk
ID0gdHJ1ZTsKKyAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6b3BlblRy
YW5zYWN0aW9uQW5kUHJlZmxpZ2h0OworICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBv
cGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgaW1tZWRpYXRlbHkgZm9yIHRyYW5zYWN0aW9uICVw
XG4iLCB0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlz
LCB0cnVlKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om9wZW5UcmFuc2FjdGlv
bkFuZFByZWZsaWdodCgpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFz
ZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQp
OworCisgICAgTE9HKFN0b3JhZ2VBUEksICJPcGVuaW5nIGFuZCBwcmVmbGlnaHRpbmcgdHJhbnNh
Y3Rpb24gJXAiLCB0aGlzKTsKKworICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3YXMgZGVsZXRlZCwg
anVtcCB0byB0aGUgZXJyb3IgY2FsbGJhY2sKKyAgICBpZiAobV9kYXRhYmFzZS0+ZGVsZXRlZCgp
KSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMSwg
U1FMRXJyb3I6OlVOS05PV05fRVJSLCAwKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0g
U1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ1bmFibGUgdG8gb3BlbiBh
IHRyYW5zYWN0aW9uLCBiZWNhdXNlIHRoZSB1c2VyIGRlbGV0ZWQgdGhlIGRhdGFiYXNlIik7Cisg
ICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gU2V0IHRoZSBtYXhpbXVtIHVzYWdlIGZvciB0aGlzIHRyYW5zYWN0aW9u
IGlmIHRoaXMgdHJhbnNhY3Rpb25zIGlzIG5vdCByZWFkLW9ubHkKKyAgICBpZiAoIW1fcmVhZE9u
bHkpCisgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkuc2V0TWF4aW11bVNpemUo
bV9kYXRhYmFzZS0+bWF4aW11bVNpemUoKSk7CisKKyAgICBBU1NFUlQoIW1fc3FsaXRlVHJhbnNh
Y3Rpb24pOworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24gPSBhZG9wdFB0cihuZXcgU1FMaXRlVHJh
bnNhY3Rpb24obV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgbV9yZWFkT25seSkpOworCisg
ICAgbV9kYXRhYmFzZS0+cmVzZXREZWxldGVzKCk7CisgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1
dGhvcml6ZXIoKTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5iZWdpbigpOworICAgIG1fZGF0
YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKKworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXBzIDEr
MiAtIE9wZW4gYSB0cmFuc2FjdGlvbiB0byB0aGUgZGF0YWJhc2UsIGp1bXBpbmcgdG8gdGhlIGVy
cm9yIGNhbGxiYWNrIGlmIHRoYXQgZmFpbHMKKyAgICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24t
PmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFi
YXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgICAgICBtX2RhdGFiYXNlLT5yZXBv
cnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIG1fZGF0
YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOworICAgICAgICBtX3RyYW5zYWN0
aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJ1bmFi
bGUgdG8gYmVnaW4gdHJhbnNhY3Rpb24iLAorICAgICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRl
RGF0YWJhc2UoKS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICAg
ICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBOb3RlOiBXZSBpbnRlbnRpb25hbGx5IHJldHJpZXZlIHRoZSBhY3R1YWwgdmVy
c2lvbiBldmVuIHdpdGggYW4gZW1wdHkgZXhwZWN0ZWQgdmVyc2lvbi4KKyAgICAvLyBJbiBtdWx0
aS1wcm9jZXNzIGJyb3dzZXJzLCB3ZSB0YWtlIHRoaXMgb3Bwb3J0aW51dGl5IHRvIHVwZGF0ZSB0
aGUgY2FjaGVkIHZhbHVlIGZvcgorICAgIC8vIHRoZSBhY3R1YWwgdmVyc2lvbi4gSW4gc2luZ2xl
LXByb2Nlc3MgYnJvd3NlcnMsIHRoaXMgaXMganVzdCBhIG1hcCBsb29rdXAuCisgICAgU3RyaW5n
IGFjdHVhbFZlcnNpb247CisgICAgaWYgKCFtX2RhdGFiYXNlLT5nZXRBY3R1YWxWZXJzaW9uRm9y
VHJhbnNhY3Rpb24oYWN0dWFsVmVyc2lvbikpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0
U3RhcnRUcmFuc2FjdGlvblJlc3VsdCgzLCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBtX2RhdGFi
YXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpKTsKKyAgICAgICAgbV90cmFuc2FjdGlv
bkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAidW5hYmxl
IHRvIHJlYWQgdmVyc2lvbiIsCisgICAgICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFz
ZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKKyAgICAgICAg
bV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOworICAgICAgICBtX2RhdGFiYXNlLT5lbmFibGVB
dXRob3JpemVyKCk7CisgICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG1faGFzVmVyc2lvbk1pc21hdGNoID0gIW1fZGF0YWJh
c2UtPmV4cGVjdGVkVmVyc2lvbigpLmlzRW1wdHkoKSAmJiAobV9kYXRhYmFzZS0+ZXhwZWN0ZWRW
ZXJzaW9uKCkgIT0gYWN0dWFsVmVyc2lvbik7CisKKyAgICAvLyBUcmFuc2FjdGlvbiBTdGVwcyAz
IC0gUGVmb3JtIHByZWZsaWdodCBzdGVwcywganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sg
aWYgdGhleSBmYWlsCisgICAgaWYgKG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5wZXJmb3JtUHJl
ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uOjpmcm9tKHRoaXMpKSkgeworICAgICAgICBtX2RhdGFiYXNl
LT5kaXNhYmxlQXV0aG9yaXplcigpOworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFy
KCk7CisgICAgICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKKyAgICAgICAgbV90
cmFuc2FjdGlvbkVycm9yID0gbV93cmFwcGVyLT5zcWxFcnJvcigpOworICAgICAgICBpZiAoIW1f
dHJhbnNhY3Rpb25FcnJvcikgeworICAgICAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRU
cmFuc2FjdGlvblJlc3VsdCg0LCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOworICAgICAgICAg
ICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9X
Tl9FUlIsICJ1bmtub3duIGVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc2FjdGlvbiBwcmVmbGln
aHQiKTsKKyAgICAgICAgfQorICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGZhbHNlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNCAtIElu
dm9rZSB0aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2l0aCB0aGUgbmV3IFNRTFRyYW5zYWN0aW9u
IG9iamVjdAorICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVy
VHJhbnNhY3Rpb25DYWxsYmFjazsKKyAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgZGVs
aXZlclRyYW5zYWN0aW9uQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKKyAg
ICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb246
OmZyb20odGhpcykpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclRy
YW5zYWN0aW9uQ2FsbGJhY2soKQoreworICAgIGJvb2wgc2hvdWxkRGVsaXZlckVycm9yQ2FsbGJh
Y2sgPSBmYWxzZTsKKworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
ayA9IG1fY2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOworICAgIGlmIChjYWxsYmFjaykgeworICAg
ICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKKyAgICAgICAgc2hvdWxkRGVsaXZlckVy
cm9yQ2FsbGJhY2sgPSAhY2FsbGJhY2stPmhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uOjpmcm9t
KHRoaXMpKTsKKyAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IGZhbHNlOworICAgIH0KKwor
ICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNSAtIElmIHRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3
YXMgbnVsbCBvciByYWlzZWQgYW4gZXhjZXB0aW9uLCBqdW1wIHRvIHRoZSBlcnJvciBjYWxsYmFj
aworICAgIGlmIChzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjaykgeworICAgICAgICBtX2RhdGFi
YXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDUsIFNRTEVycm9yOjpVTktOT1dOX0VS
UiwgMCk7CisgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FM
RXJyb3I6OlVOS05PV05fRVJSLCAidGhlIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgd2FzIG51bGwg
b3IgdGhyZXcgYW4gZXhjZXB0aW9uIik7CisgICAgICAgIGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2soKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NoZWR1bGVUb1J1blN0YXRlbWVudHMo
KTsKKworICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMCwgLTEs
IDApOyAvLyBPSworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVUb1J1
blN0YXRlbWVudHMoKQoreworICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5k
OjpydW5TdGF0ZW1lbnRzOworICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBydW5TdGF0
ZW1lbnRzIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CisgICAgbV9kYXRhYmFzZS0+c2No
ZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kOjpydW5TdGF0ZW1lbnRzKCkKK3sKKyAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOworCisg
ICAgLy8gSWYgdGhlcmUgaXMgYSBzZXJpZXMgb2Ygc3RhdGVtZW50cyBxdWV1ZWQgdXAgdGhhdCBh
cmUgYWxsIHN1Y2Nlc3NmdWwgYW5kIGhhdmUgbm8gYXNzb2NpYXRlZAorICAgIC8vIFNRTFN0YXRl
bWVudENhbGxiYWNrIG9iamVjdHMsIHRoZW4gd2UgY2FuIGJ1cm4gdGhyb3VnaCB0aGUgcXVldWUK
KyAgICBkbyB7CisgICAgICAgIGlmIChtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudCAmJiAh
bV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3FsaXRlKCkpIHsKKyAgICAgICAg
ICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50ID0gZmFsc2U7CisgICAgICAgICAgICAv
LyBGSVhNRSAtIEFub3RoZXIgcGxhY2UgdGhhdCBuZWVkcyBmaXhpbmcgdXAgYWZ0ZXIgPHJkYXI6
Ly9wcm9ibGVtLzU2Mjg0Njg+IGlzIGFkZHJlc3NlZC4KKyAgICAgICAgICAgIC8vIFNlZSA6Om9w
ZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCgpIGZvciBkaXNjdXNzaW9uCisKKyAgICAgICAgICAg
IC8vIFJlc2V0IHRoZSBtYXhpbXVtIHNpemUgaGVyZSwgYXMgaXQgd2FzIGluY3JlYXNlZCB0byBh
bGxvdyB1cyB0byByZXRyeSB0aGlzIHN0YXRlbWVudC4KKyAgICAgICAgICAgIC8vIG1fc2hvdWxk
UmV0cnlDdXJyZW50U3RhdGVtZW50IGlzIHNldCB0byB0cnVlIG9ubHkgd2hlbiBhIHN0YXRlbWVu
dCBleGNlZWRzCisgICAgICAgICAgICAvLyB0aGUgcXVvdGEsIHdoaWNoIGNhbiBoYXBwZW4gb25s
eSBpbiBhIHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24uIFRoZXJlZm9yZSwgdGhlcmUKKyAgICAgICAg
ICAgIC8vIGlzIG5vIG5lZWQgdG8gY2hlY2sgaGVyZSBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgcmVh
ZC13cml0ZS4KKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkuc2V0TWF4
aW11bVNpemUobV9kYXRhYmFzZS0+bWF4aW11bVNpemUoKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBy
dW4sIGZhaWxlZCBkdWUgdG8gcXVvdGEgY29uc3RyYWludHMsIGFuZCB3ZSdyZSBub3QgcmV0cnlp
bmcgaXQsCisgICAgICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IGVuZGVkIGluIGFuIGVycm9yLiBI
YW5kbGUgaXQgbm93CisgICAgICAgICAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50ICYmIG1fY3Vy
cmVudFN0YXRlbWVudC0+bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkgeworICAgICAg
ICAgICAgICAgIGhhbmRsZUN1cnJlbnRTdGF0ZW1lbnRFcnJvcigpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGFkdmFu
Y2UgdG8gdGhlIG5leHQgc3RhdGVtZW50CisgICAgICAgICAgICBnZXROZXh0U3RhdGVtZW50KCk7
CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChydW5DdXJyZW50U3RhdGVtZW50KCkpOworCisgICAg
Ly8gSWYgcnVuQ3VycmVudFN0YXRlbWVudCgpIHJldHVybmVkIGZhbHNlLCB0aGF0IG1lYW5zIGVp
dGhlciB0aGVyZSB3YXMgbm8gY3VycmVudCBzdGF0ZW1lbnQgdG8gcnVuLAorICAgIC8vIG9yIHRo
ZSBjdXJyZW50IHN0YXRlbWVudCByZXF1aXJlcyBhIGNhbGxiYWNrIHRvIGNvbXBsZXRlLiBJbiB0
aGUgbGF0ZXIgY2FzZSwgaXQgYWxzbyBzY2hlZHVsZWQKKyAgICAvLyB0aGUgY2FsbGJhY2sgb3Ig
cGVyZm9ybWVkIGFueSBvdGhlciBhZGRpdGlvbmFsIHdvcmsgc28gd2UgY2FuIHJldHVybgorICAg
IGlmICghbV9jdXJyZW50U3RhdGVtZW50KQorICAgICAgICBwb3N0ZmxpZ2h0QW5kQ29tbWl0KCk7
Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpnZXROZXh0U3RhdGVtZW50KCkKK3sK
KyAgICBtX2N1cnJlbnRTdGF0ZW1lbnQgPSAwOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
c3RhdGVtZW50TXV0ZXgpOworICAgIGlmICghbV9zdGF0ZW1lbnRRdWV1ZS5pc0VtcHR5KCkpCisg
ICAgICAgIG1fY3VycmVudFN0YXRlbWVudCA9IG1fc3RhdGVtZW50UXVldWUudGFrZUZpcnN0KCk7
Cit9CisKK2Jvb2wgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpydW5DdXJyZW50U3RhdGVtZW50KCkK
K3sKKyAgICBpZiAoIW1fY3VycmVudFN0YXRlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRob3JpemVyKCk7CisKKyAgICBpZiAobV9oYXNWZXJz
aW9uTWlzbWF0Y2gpCisgICAgICAgIG1fY3VycmVudFN0YXRlbWVudC0+c2V0VmVyc2lvbk1pc21h
dGNoZWRFcnJvcihtX2RhdGFiYXNlLmdldCgpKTsKKworICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1l
bnQtPmV4ZWN1dGUobV9kYXRhYmFzZS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKG1fZGF0YWJhc2Ut
Pmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKSkgeworICAgICAgICAgICAgLy8gRmxhZyB0aGlz
IHRyYW5zYWN0aW9uIGFzIGhhdmluZyBjaGFuZ2VkIHRoZSBkYXRhYmFzZSBmb3IgbGF0ZXIgZGVs
ZWdhdGUgbm90aWZpY2F0aW9uCisgICAgICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2UgPSB0cnVl
OworICAgICAgICAgICAgLy8gQWxzbyBkaXJ0eSB0aGUgc2l6ZSBvZiB0aGlzIGRhdGFiYXNlIGZp
bGUgZm9yIGNhbGN1bGF0aW5nIHF1b3RhIHVzYWdlCisgICAgICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3RhdGVtZW50KGRhdGFiYXNlKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+aGFzU3RhdGVtZW50Q2Fs
bGJhY2soKSkgeworICAgICAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbkJhY2tl
bmQ6OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjazsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiU2NoZWR1bGluZyBkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVw
XG4iLCB0aGlzKTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25D
YWxsYmFjayhTUUxUcmFuc2FjdGlvbjo6ZnJvbSh0aGlzKSk7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYg
KG1fY3VycmVudFN0YXRlbWVudC0+bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkgewor
ICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclF1b3Rh
SW5jcmVhc2VDYWxsYmFjazsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRl
bGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsK
KyAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5z
YWN0aW9uOjpmcm9tKHRoaXMpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGhhbmRsZUN1cnJlbnRTdGF0ZW1lbnRFcnJvcigpOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6aGFuZGxlQ3VycmVudFN0YXRlbWVudEVycm9y
KCkKK3sKKyAgICAvLyBUcmFuc2FjdGlvbiBTdGVwcyA2LmVycm9yIC0gQ2FsbCB0aGUgc3RhdGVt
ZW50J3MgZXJyb3IgY2FsbGJhY2ssIGJ1dCBpZiB0aGVyZSB3YXMgbm8gZXJyb3IgY2FsbGJhY2ss
CisgICAgLy8gb3IgdGhlIHRyYW5zYWN0aW9uIHdhcyByb2xsZWQgYmFjaywganVtcCB0byB0aGUg
dHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2sKKyAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50LT5o
YXNTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKCkgJiYgIW1fc3FsaXRlVHJhbnNhY3Rpb24tPndhc1Jv
bGxlZEJhY2tCeVNxbGl0ZSgpKSB7CisgICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rp
b25CYWNrZW5kOjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2s7CisgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9u
ICVwXG4iLCB0aGlzKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNh
bGxiYWNrKFNRTFRyYW5zYWN0aW9uOjpmcm9tKHRoaXMpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX2N1cnJlbnRTdGF0ZW1lbnQtPnNxbEVycm9yKCk7Cisg
ICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKSB7CisgICAgICAgICAgICBtX2RhdGFiYXNl
LT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgxLCBTUUxFcnJvcjo6REFUQUJBU0VfRVJS
LCAwKTsKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
U1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgInRoZSBzdGF0ZW1lbnQgZmFpbGVkIHRvIGV4ZWN1dGUi
KTsKKyAgICAgICAgfQorICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGZhbHNlKTsKKyAg
ICB9Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyU3RhdGVtZW50Q2Fs
bGJhY2soKQoreworICAgIEFTU0VSVChtX2N1cnJlbnRTdGF0ZW1lbnQpOworCisgICAgLy8gVHJh
bnNhY3Rpb24gU3RlcCA2LjYgYW5kIDYuMyhlcnJvcikgLSBJZiB0aGUgc3RhdGVtZW50IGNhbGxi
YWNrIHdlbnQgd3JvbmcsIGp1bXAgdG8gdGhlIHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrCisg
ICAgLy8gT3RoZXJ3aXNlLCBjb250aW51ZSB0byBsb29wIHRocm91Z2ggdGhlIHN0YXRlbWVudCBx
dWV1ZQorICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSB0cnVlOworICAgIGJvb2wgcmVzdWx0ID0g
bV9jdXJyZW50U3RhdGVtZW50LT5wZXJmb3JtQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb246OmZyb20o
dGhpcykpOworICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKKworICAgIGlmIChyZXN1
bHQpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQo
MiwgU1FMRXJyb3I6OlVOS05PV05fRVJSLCAwKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbkVycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ0aGUgc3RhdGVtZW50
IGNhbGxiYWNrIHJhaXNlZCBhbiBleGNlcHRpb24gb3Igc3RhdGVtZW50IGVycm9yIGNhbGxiYWNr
IGRpZCBub3QgcmV0dXJuIGZhbHNlIik7CisgICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3Io
dHJ1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIHNjaGVkdWxlVG9SdW5TdGF0ZW1lbnRzKCk7Cit9
CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxi
YWNrKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50U3RhdGVtZW50KTsKKyAgICBBU1NFUlQoIW1f
c2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KTsKKworICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhjZWVkUXVv
dGEoZGF0YWJhc2UoKSk7CisKKyAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2Vu
ZDo6cnVuU3RhdGVtZW50czsKKyAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgcnVuU3Rh
dGVtZW50cyBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnNj
aGVkdWxlVHJhbnNhY3Rpb25TdGVwKHRoaXMpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQmFj
a2VuZDo6cG9zdGZsaWdodEFuZENvbW1pdCgpCit7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVk
KTsKKworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNyAtIFBlZm9ybSBwb3N0ZmxpZ2h0IHN0ZXBz
LCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGV5IGZhaWwKKyAgICBpZiAobV93
cmFwcGVyICYmICFtX3dyYXBwZXItPnBlcmZvcm1Qb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uOjpm
cm9tKHRoaXMpKSkgeworICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX3dyYXBwZXItPnNx
bEVycm9yKCk7CisgICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKSB7CisgICAgICAgICAg
ICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgzLCBTUUxFcnJvcjo6
VU5LTk9XTl9FUlIsIDApOworICAgICAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJy
b3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ1bmtub3duIGVycm9yIG9jY3VycmVk
IGR1cmluZyB0cmFuc2FjdGlvbiBwb3N0ZmxpZ2h0Iik7CisgICAgICAgIH0KKyAgICAgICAgaGFu
ZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBUcmFuc2FjdG9uIFN0ZXAgOCs5IC0gQ29tbWl0IHRoZSB0cmFuc2FjdGlvbiwganVtcGlu
ZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhhdCBmYWlscworICAgIEFTU0VSVChtX3NxbGl0
ZVRyYW5zYWN0aW9uKTsKKworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7Cisg
ICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgbV9kYXRhYmFzZS0+ZW5hYmxl
QXV0aG9yaXplcigpOworCisgICAgLy8gSWYgdGhlIGNvbW1pdCBmYWlsZWQsIHRoZSB0cmFuc2Fj
dGlvbiB3aWxsIHN0aWxsIGJlIG1hcmtlZCBhcyAiaW4gcHJvZ3Jlc3MiCisgICAgaWYgKG1fc3Fs
aXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBpZiAobV93cmFwcGVyKQor
ICAgICAgICAgICAgbV93cmFwcGVyLT5oYW5kbGVDb21taXRGYWlsZWRBZnRlclBvc3RmbGlnaHQo
U1FMVHJhbnNhY3Rpb246OmZyb20odGhpcykpOworICAgICAgICBtX3N1Y2Nlc3NDYWxsYmFja1dy
YXBwZXIuY2xlYXIoKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rp
b25SZXN1bHQoNCwgU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0
YWJhc2UoKS5sYXN0RXJyb3IoKSk7CisgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgInVuYWJsZSB0byBjb21taXQgdHJh
bnNhY3Rpb24iLAorICAgICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMCwg
LTEsIDApOyAvLyBPSworCisgICAgLy8gVmFjdXVtIHRoZSBkYXRhYmFzZSBpZiBhbnl0aGluZyB3
YXMgZGVsZXRlZC4KKyAgICBpZiAobV9kYXRhYmFzZS0+aGFkRGVsZXRlcygpKQorICAgICAgICBt
X2RhdGFiYXNlLT5pbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CisKKyAgICAvLyBUaGUgY29t
bWl0IHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgdHJhbnNhY3Rpb24gbW9kaWZpZWQgdGhpcyBkYXRh
YmFzZSwgbm90aWZ5IHRoZSBkZWxlZ2F0ZXMuCisgICAgaWYgKG1fbW9kaWZpZWREYXRhYmFzZSkK
KyAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkQ29tbWl0V3JpdGVU
cmFuc2FjdGlvbihkYXRhYmFzZSgpKTsKKworICAgIC8vIE5vdyByZWxlYXNlIG91ciB1bm5lZWRl
ZCBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCisgICAgbV9lcnJvckNhbGxi
YWNrV3JhcHBlci5jbGVhcigpOworCisgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMCAtIERlbGl2
ZXIgc3VjY2VzcyBjYWxsYmFjaywgaWYgdGhlcmUgaXMgb25lCisgICAgaWYgKG1fc3VjY2Vzc0Nh
bGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygpKSB7CisgICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FM
VHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrOworICAgICAgICBMT0co
U3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayBmb3IgdHJhbnNh
Y3Rpb24gJXBcbiIsIHRoaXMpOworICAgICAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0
aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb246OmZyb20odGhpcykpOworICAgIH0gZWxzZQorICAg
ICAgICBjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2soKTsKK30KKwordm9pZCBTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQ6OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2soKQoreworICAgIC8vIFRyYW5zYWN0
aW9uIFN0ZXAgMTAgLSBEZWxpdmVyIHN1Y2Nlc3MgY2FsbGJhY2sKKyAgICBSZWZQdHI8Vm9pZENh
bGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIudW53cmFw
KCk7CisgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5o
YW5kbGVFdmVudCgpOworCisgICAgLy8gU2NoZWR1bGUgYSAicG9zdC1zdWNjZXNzIGNhbGxiYWNr
IiBzdGVwIHRvIHJldHVybiBjb250cm9sIHRvIHRoZSBkYXRhYmFzZSB0aHJlYWQgaW4gY2FzZSB0
aGVyZQorICAgIC8vIGFyZSBmdXJ0aGVyIHRyYW5zYWN0aW9ucyBxdWV1ZWQgdXAgZm9yIHRoaXMg
RGF0YWJhc2UKKyAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y2xlYW51
cEFmdGVyU3VjY2Vzc0NhbGxiYWNrOworICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBj
bGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsK
KyAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzKTsKK30KKwordm9p
ZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjaygpCit7
CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAg
MTEgLSBFbmQgdHJhbnNhY3Rpb24gc3RlcHMKKyAgICAvLyBUaGVyZSBpcyBubyBuZXh0IHN0ZXAK
KyAgICBMT0coU3RvcmFnZUFQSSwgIlRyYW5zYWN0aW9uICVwIGlzIGNvbXBsZXRlXG4iLCB0aGlz
KTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25J
blByb2dyZXNzKCkpOworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICBtX25l
eHRTdGVwID0gMDsKKworICAgIC8vIFJlbGVhc2UgdGhlIGxvY2sgb24gdGhpcyBkYXRhYmFzZQor
ICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhp
cyk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpoYW5kbGVUcmFuc2FjdGlvbkVy
cm9yKGJvb2wgaW5DYWxsYmFjaykKK3sKKyAgICBpZiAobV9lcnJvckNhbGxiYWNrV3JhcHBlci5o
YXNDYWxsYmFjaygpKSB7CisgICAgICAgIGlmIChpbkNhbGxiYWNrKQorICAgICAgICAgICAgZGVs
aXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrOworICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5n
IGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0
aGlzKTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFj
ayhTUUxUcmFuc2FjdGlvbjo6ZnJvbSh0aGlzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIE5vIGVycm9yIGNhbGxiYWNrLCBzbyBmYXN0LWZvcndhcmQgdG86
CisgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbi4K
KyAgICBpZiAoaW5DYWxsYmFjaykgeworICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0
aW9uQmFja2VuZDo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOworICAgICAg
ICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CisgICAgICAgIG1fZGF0YWJh
c2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBj
bGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsKK30KKwordm9pZCBTUUxUcmFu
c2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKQoreworICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9uRXJyb3IpOworCisgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAx
MiAtIElmIGV4aXN0cywgaW52b2tlIGVycm9yIGNhbGxiYWNrIHdpdGggdGhlIGxhc3QKKyAgICAv
LyBlcnJvciB0byBoYXZlIG9jY3VycmVkIGluIHRoaXMgdHJhbnNhY3Rpb24uCisgICAgUmVmUHRy
PFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IG1fZXJyb3JDYWxs
YmFja1dyYXBwZXIudW53cmFwKCk7CisgICAgaWYgKGVycm9yQ2FsbGJhY2spCisgICAgICAgIGVy
cm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fdHJhbnNhY3Rpb25FcnJvci5nZXQoKSk7CisKKyAg
ICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y2xlYW51cEFmdGVyVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrOworICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBjbGVh
bnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0
aGlzKTsKKyAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzKTsKK30K
Kwordm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaygpCit7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKworICAgIG1fZGF0
YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7CisgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24p
IHsKKyAgICAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxiYWNrIHRoZSB0cmFuc2Fj
dGlvbi4KKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKworICAgICAg
ICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgfQorICAg
IG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKKworICAgIC8vIFRyYW5zYWN0aW9uIFN0
ZXAgMTIgLSBBbnkgc3RpbGwtcGVuZGluZyBzdGF0ZW1lbnRzIGluIHRoZSB0cmFuc2FjdGlvbiBh
cmUgZGlzY2FyZGVkLgorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3RhdGVt
ZW50TXV0ZXgpOworICAgICAgICBtX3N0YXRlbWVudFF1ZXVlLmNsZWFyKCk7CisgICAgfQorCisg
ICAgLy8gVHJhbnNhY3Rpb24gaXMgY29tcGxldGUhIFRoZXJlIGlzIG5vIG5leHQgc3RlcAorICAg
IExPRyhTdG9yYWdlQVBJLCAiVHJhbnNhY3Rpb24gJXAgaXMgY29tcGxldGUgd2l0aCBhbiBlcnJv
clxuIiwgdGhpcyk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRy
YW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICBtX25leHRTdGVwID0gMDsKKworICAgIC8vIE5v
dyByZWxlYXNlIHRoZSBsb2NrIG9uIHRoaXMgZGF0YWJhc2UKKyAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPnJlbGVhc2VMb2NrKHRoaXMpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQmFja2VuZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaWZuZGVmIFNRTFRyYW5zYWN0aW9uQmFja2VuZF9oCisjZGVmaW5lIFNR
TFRyYW5zYWN0aW9uQmFja2VuZF9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5j
bHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCisj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0YWJhc2U7CitjbGFzcyBTUUxFcnJvcjsK
K2NsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOworY2xhc3MgU1FMU3RhdGVtZW50Q2FsbGJhY2s7Citj
bGFzcyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb247Citj
bGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrOworY2xhc3MgU1FMVmFsdWU7CitjbGFzcyBWb2lkQ2FsbGJhY2s7CisKK2NsYXNzIFNR
TFRyYW5zYWN0aW9uV3JhcHBlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFu
c2FjdGlvbldyYXBwZXI+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbldy
YXBwZXIoKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVByZWZsaWdodChTUUxUcmFuc2Fj
dGlvbiopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVBvc3RmbGlnaHQoU1FMVHJhbnNh
Y3Rpb24qKSA9IDA7CisgICAgdmlydHVhbCBTUUxFcnJvciogc3FsRXJyb3IoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUNvbW1pdEZhaWxlZEFmdGVyUG9zdGZsaWdodChTUUxU
cmFuc2FjdGlvbiopID0gMDsKK307CisKK2NsYXNzIFNRTFRyYW5zYWN0aW9uQmFja2VuZCA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IHsKK3B1Ymxp
YzoKKyAgICB+U1FMVHJhbnNhY3Rpb25CYWNrZW5kKCk7CisKKyAgICB2b2lkIGV4ZWN1dGVTUUwo
Y29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3Vt
ZW50cywKKyAgICAgICAgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZv
aWQgbG9ja0FjcXVpcmVkKCk7CisgICAgYm9vbCBwZXJmb3JtTmV4dFN0ZXAoKTsKKyAgICB2b2lk
IHBlcmZvcm1QZW5kaW5nQ2FsbGJhY2soKTsKKworICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsg
cmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KKyAgICBib29sIGlzUmVhZE9ubHkoKSB7IHJldHVy
biBtX3JlYWRPbmx5OyB9CisgICAgdm9pZCBub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdE
b3duKCk7CisKK3ByaXZhdGU6CisgICAgU1FMVHJhbnNhY3Rpb25CYWNrZW5kKERhdGFiYXNlKiwg
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+LAorICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CisKKyAgICB0
eXBlZGVmIHZvaWQgKFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6KlRyYW5zYWN0aW9uU3RlcE1ldGhv
ZCkoKTsKKyAgICBUcmFuc2FjdGlvblN0ZXBNZXRob2QgbV9uZXh0U3RlcDsKKworICAgIHZvaWQg
ZW5xdWV1ZVN0YXRlbWVudChQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4pOworCisgICAgdm9pZCBj
aGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSgpOworCisgICAgdm9pZCBh
Y3F1aXJlTG9jaygpOworICAgIHZvaWQgb3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCk7Cisg
ICAgdm9pZCBkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjaygpOworICAgIHZvaWQgc2NoZWR1bGVU
b1J1blN0YXRlbWVudHMoKTsKKyAgICB2b2lkIHJ1blN0YXRlbWVudHMoKTsKKyAgICB2b2lkIGdl
dE5leHRTdGF0ZW1lbnQoKTsKKyAgICBib29sIHJ1bkN1cnJlbnRTdGF0ZW1lbnQoKTsKKyAgICB2
b2lkIGhhbmRsZUN1cnJlbnRTdGF0ZW1lbnRFcnJvcigpOworICAgIHZvaWQgZGVsaXZlclN0YXRl
bWVudENhbGxiYWNrKCk7CisgICAgdm9pZCBkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrKCk7
CisgICAgdm9pZCBwb3N0ZmxpZ2h0QW5kQ29tbWl0KCk7CisgICAgdm9pZCBkZWxpdmVyU3VjY2Vz
c0NhbGxiYWNrKCk7CisgICAgdm9pZCBjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2soKTsKKyAg
ICB2b2lkIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoYm9vbCBpbkNhbGxiYWNrKTsKKyAgICB2b2lk
IGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsKKyAgICB2b2lkIGNsZWFudXBBZnRl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOworCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBkZWJ1Z1N0ZXBOYW1lKFRyYW5zYWN0aW9uU3RlcE1ldGhvZCk7Cisj
ZW5kaWYKKworICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IG1fY3VycmVudFN0YXRlbWVudDsKKwor
ICAgIGJvb2wgbV9leGVjdXRlU3FsQWxsb3dlZDsKKworICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9k
YXRhYmFzZTsKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiBtX3dyYXBwZXI7Cisg
ICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2tX
cmFwcGVyOworICAgIFNRTENhbGxiYWNrV3JhcHBlcjxWb2lkQ2FsbGJhY2s+IG1fc3VjY2Vzc0Nh
bGxiYWNrV3JhcHBlcjsKKyAgICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyOworICAgIFJlZlB0cjxTUUxFcnJvcj4g
bV90cmFuc2FjdGlvbkVycm9yOworICAgIGJvb2wgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1l
bnQ7CisgICAgYm9vbCBtX21vZGlmaWVkRGF0YWJhc2U7CisgICAgYm9vbCBtX2xvY2tBY3F1aXJl
ZDsKKyAgICBib29sIG1fcmVhZE9ubHk7CisgICAgYm9vbCBtX2hhc1ZlcnNpb25NaXNtYXRjaDsK
KworICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CisgICAgRGVxdWU8UmVmUHRyPFNRTFN0YXRl
bWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOworCisgICAgT3duUHRyPFNRTGl0ZVRyYW5zYWN0aW9u
PiBtX3NxbGl0ZVRyYW5zYWN0aW9uOworCisgICAgZnJpZW5kIGNsYXNzIFNRTFRyYW5zYWN0aW9u
OyAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB0aGUgZnJvbnQtZW5kIGhhcyBiZWVuIHByb3Bl
cmx5IGlzb2xhdGVkLgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKwor
I2VuZGlmIC8vIFNRTFRyYW5zYWN0aW9uQmFja2VuZF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25C
YWNrZW5kU3luYy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25C
YWNrZW5kU3luYy5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRh
dGFiYXNlQXV0aG9yaXplci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIK
KyNpbmNsdWRlICJEYXRhYmFzZVN5bmMuaCIKKyNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKKyNp
bmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRTeW5jLmgiCisj
aW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
blN5bmMuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIgorI2luY2x1
ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYzo6U1FM
VHJhbnNhY3Rpb25CYWNrZW5kU3luYyhEYXRhYmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25seSkKKyAgICA6IG1f
ZGF0YWJhc2UoZGIpCisgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgICwgbV9yZWFkT25s
eShyZWFkT25seSkKKyAgICAsIG1faGFzVmVyc2lvbk1pc21hdGNoKGZhbHNlKQorICAgICwgbV9t
b2RpZmllZERhdGFiYXNlKGZhbHNlKQorICAgICwgbV90cmFuc2FjdGlvbkNsaWVudChhZG9wdFB0
cihuZXcgU1FMVHJhbnNhY3Rpb25DbGllbnQoKSkpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2Ut
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworfQorCitTUUxU
cmFuc2FjdGlvbkJhY2tlbmRTeW5jOjp+U1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYygpCit7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0
VGhyZWFkKCkpOworICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uICYmIG1fc3FsaXRlVHJhbnNh
Y3Rpb24tPmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgcm9sbGJhY2soKTsKK30KKworUGFzc1JlZlB0
cjxTUUxSZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmM6OmV4ZWN1dGVTUUwoY29u
c3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50
cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworCisgICAgbV9kYXRhYmFzZS0+
c2V0TGFzdEVycm9yTWVzc2FnZSgiIik7CisKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgp
KSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3NhZ2UoImNhbm5vdCBleGVj
dXRlU1FMIGJlY2F1c2UgdGhlIGRhdGFiYXNlIGlzIG5vdCBvcGVuIik7CisgICAgICAgIGVjID0g
U1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgaWYgKG1faGFzVmVyc2lvbk1pc21hdGNoKSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnNldExh
c3RFcnJvck1lc3NhZ2UoImNhbm5vdCBleGVjdXRlU1FMIGJlY2F1c2UgdGhlcmUgaXMgYSB2ZXJz
aW9uIG1pc21hdGNoIik7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpWRVJTSU9OX0VSUjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHNxbFN0YXRlbWVudC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaW50IHBlcm1pc3Npb25zID0gRGF0YWJhc2VB
dXRob3JpemVyOjpSZWFkV3JpdGVNYXNrOworICAgIGlmICghbV9kYXRhYmFzZS0+ZGF0YWJhc2VD
b250ZXh0KCktPmFsbG93RGF0YWJhc2VBY2Nlc3MoKSkKKyAgICAgICAgcGVybWlzc2lvbnMgfD0g
RGF0YWJhc2VBdXRob3JpemVyOjpOb0FjY2Vzc01hc2s7CisgICAgZWxzZSBpZiAobV9yZWFkT25s
eSkKKyAgICAgICAgcGVybWlzc2lvbnMgfD0gRGF0YWJhc2VBdXRob3JpemVyOjpSZWFkT25seU1h
c2s7CisKKyAgICBTUUxTdGF0ZW1lbnRTeW5jIHN0YXRlbWVudChzcWxTdGF0ZW1lbnQsIGFyZ3Vt
ZW50cywgcGVybWlzc2lvbnMpOworCisgICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRob3JpemVyKCk7
CisgICAgYm9vbCByZXRyeVN0YXRlbWVudCA9IHRydWU7CisgICAgUmVmUHRyPFNRTFJlc3VsdFNl
dD4gcmVzdWx0U2V0OworICAgIHdoaWxlIChyZXRyeVN0YXRlbWVudCkgeworICAgICAgICByZXRy
eVN0YXRlbWVudCA9IGZhbHNlOworICAgICAgICByZXN1bHRTZXQgPSBzdGF0ZW1lbnQuZXhlY3V0
ZShtX2RhdGFiYXNlLmdldCgpLCBlYyk7CisgICAgICAgIGlmICghcmVzdWx0U2V0KSB7CisgICAg
ICAgICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3FsaXRlKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGlmIChlYyA9PSBTUUxF
eGNlcHRpb246OlFVT1RBX0VSUikgeworICAgICAgICAgICAgICAgIGlmIChtX3RyYW5zYWN0aW9u
Q2xpZW50LT5kaWRFeGNlZWRRdW90YShkYXRhYmFzZSgpKSkgeworICAgICAgICAgICAgICAgICAg
ICBlYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldHJ5U3RhdGVtZW50ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX2RhdGFiYXNlLT5z
ZXRMYXN0RXJyb3JNZXNzYWdlKCJ0aGVyZSB3YXMgbm90IGVub3VnaCByZW1haW5pbmcgc3RvcmFn
ZSBzcGFjZSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9kYXRhYmFz
ZS0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpKSB7CisgICAgICAgIG1fbW9kaWZpZWREYXRh
YmFzZSA9IHRydWU7CisgICAgICAgIG1fdHJhbnNhY3Rpb25DbGllbnQtPmRpZEV4ZWN1dGVTdGF0
ZW1lbnQoZGF0YWJhc2UoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdFNldC5yZWxlYXNl
KCk7Cit9CisKK0V4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYzo6YmVnaW4o
KQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlz
Q29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7CisgICAg
ICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMSwgU1FMRXhjZXB0
aW9uOjpVTktOT1dOX0VSUiwgMCk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1l
c3NhZ2UoImNhbm5vdCBiZWdpbiB0cmFuc2FjdGlvbiBiZWNhdXNlIHRoZSBkYXRhYmFzZSBpcyBu
b3Qgb3BlbiIpOworICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAg
ICB9CisKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rp
b25JblByb2dyZXNzKCkpOworCisgICAgLy8gU2V0IHRoZSBtYXhpbXVtIHVzYWdlIGZvciB0aGlz
IHRyYW5zYWN0aW9uIGlmIHRoaXMgdHJhbnNhY3Rpb25zIGlzIG5vdCByZWFkLW9ubHkuCisgICAg
aWYgKCFtX3JlYWRPbmx5KQorICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnNl
dE1heGltdW1TaXplKG1fZGF0YWJhc2UtPm1heGltdW1TaXplKCkpOworCisgICAgQVNTRVJUKCFt
X3NxbGl0ZVRyYW5zYWN0aW9uKTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uID0gYWRvcHRQdHIo
bmV3IFNRTGl0ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCksIG1fcmVh
ZE9ubHkpKTsKKworICAgIG1fZGF0YWJhc2UtPnJlc2V0RGVsZXRlcygpOworICAgIG1fZGF0YWJh
c2UtPmRpc2FibGVBdXRob3JpemVyKCk7CisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+YmVnaW4o
KTsKKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICAvLyBDaGVjayBp
ZiBiZWdpbigpIHN1Y2NlZWRlZC4KKyAgICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJv
Z3Jlc3MoKSkgeworICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCku
dHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFy
dFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSLCBtX2RhdGFi
YXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+
c2V0TGFzdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIGJlZ2luIHRyYW5zYWN0aW9uIiwKKyAgICAg
ICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCksIG1fZGF0YWJh
c2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOworICAgICAgICBtX3NxbGl0ZVRy
YW5zYWN0aW9uLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OkRBVEFCQVNF
X0VSUjsKKyAgICB9CisKKyAgICAvLyBOb3RlOiBXZSBpbnRlbnRpb25hbGx5IHJldHJpZXZlIHRo
ZSBhY3R1YWwgdmVyc2lvbiBldmVuIHdpdGggYW4gZW1wdHkgZXhwZWN0ZWQgdmVyc2lvbi4KKyAg
ICAvLyBJbiBtdWx0aS1wcm9jZXNzIGJyb3dzZXJzLCB3ZSB0YWtlIHRoaXMgb3Bwb3J0aW51dGl5
IHRvIHVwZGF0ZSB0aGUgY2FjaGVkIHZhbHVlIGZvcgorICAgIC8vIHRoZSBhY3R1YWwgdmVyc2lv
bi4gSW4gc2luZ2xlLXByb2Nlc3MgYnJvd3NlcnMsIHRoaXMgaXMganVzdCBhIG1hcCBsb29rdXAu
CisgICAgU3RyaW5nIGFjdHVhbFZlcnNpb247CisgICAgaWYgKCFtX2RhdGFiYXNlLT5nZXRBY3R1
YWxWZXJzaW9uRm9yVHJhbnNhY3Rpb24oYWN0dWFsVmVyc2lvbikpIHsKKyAgICAgICAgbV9kYXRh
YmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdCgzLCBTUUxFeGNlcHRpb246OkRBVEFC
QVNFX0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSk7CisgICAg
ICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3NhZ2UoInVuYWJsZSB0byByZWFkIHZlcnNp
b24iLAorICAgICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3Io
KSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IHJvbGxiYWNrKCk7CisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsK
KyAgICB9CisgICAgbV9oYXNWZXJzaW9uTWlzbWF0Y2ggPSAhbV9kYXRhYmFzZS0+ZXhwZWN0ZWRW
ZXJzaW9uKCkuaXNFbXB0eSgpICYmIChtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKSAhPSBh
Y3R1YWxWZXJzaW9uKTsKKyAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVz
dWx0KDAsIC0xLCAwKTsgLy8gT0sKKyAgICByZXR1cm4gMDsKK30KKworRXhjZXB0aW9uQ29kZSBT
UUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jOjpleGVjdXRlKCkKK3sKKyAgICBBU1NFUlQobV9kYXRh
YmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
aWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSB8fCAobV9jYWxsYmFjayAmJiAhbV9jYWxsYmFjay0+
aGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb25TeW5jOjpmcm9tKHRoaXMpKSkpIHsKKyAgICAgICAg
aWYgKG1fZGF0YWJhc2UtPmxhc3RFcnJvck1lc3NhZ2UoKS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJmYWlsZWQgdG8gZXhlY3V0ZSB0cmFu
c2FjdGlvbiBjYWxsYmFjayIpOworICAgICAgICBtX2NhbGxiYWNrID0gMDsKKyAgICAgICAgcmV0
dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7CisgICAgfQorCisgICAgbV9jYWxsYmFjayA9
IDA7CisgICAgcmV0dXJuIDA7Cit9CisKK0V4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kU3luYzo6Y29tbWl0KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLT5v
cGVuZWQoKSkgeworICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJl
c3VsdCgxLCBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSLCAwKTsKKyAgICAgICAgbV9kYXRhYmFz
ZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIGNvbW1pdCB0cmFuc2FjdGlvbiBiZWNh
dXNlIHRoZSBkYXRhYmFzZSBpcyBub3Qgb3Blbi4iKTsKKyAgICAgICAgcmV0dXJuIFNRTEV4Y2Vw
dGlvbjo6VU5LTk9XTl9FUlI7CisgICAgfQorCisgICAgQVNTRVJUKG1fc3FsaXRlVHJhbnNhY3Rp
b24pOworCisgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKKyAgICBtX3NxbGl0
ZVRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVy
KCk7CisKKyAgICAvLyBJZiB0aGUgY29tbWl0IGZhaWxlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwg
c3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVzcyIKKyAgICBpZiAobV9zcWxpdGVUcmFuc2Fj
dGlvbi0+aW5Qcm9ncmVzcygpKSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRy
YW5zYWN0aW9uUmVzdWx0KDIsIFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSLCBtX2RhdGFiYXNl
LT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2V0
TGFzdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIGNvbW1pdCB0cmFuc2FjdGlvbiIsCisgICAgICAg
ICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNl
LT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFNRTEV4
Y2VwdGlvbjo6REFUQUJBU0VfRVJSOworICAgIH0KKworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24u
Y2xlYXIoKTsKKworICAgIC8vIFZhY3V1bSB0aGUgZGF0YWJhc2UgaWYgYW55dGhpbmcgd2FzIGRl
bGV0ZWQuCisgICAgaWYgKG1fZGF0YWJhc2UtPmhhZERlbGV0ZXMoKSkKKyAgICAgICAgbV9kYXRh
YmFzZS0+aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOworCisgICAgLy8gVGhlIGNvbW1pdCB3
YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIHRyYW5zYWN0aW9uIG1vZGlmaWVkIHRoaXMgZGF0YWJhc2Us
IG5vdGlmeSB0aGUgZGVsZWdhdGVzLgorICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2UpCisgICAg
ICAgIG1fdHJhbnNhY3Rpb25DbGllbnQtPmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oZGF0YWJh
c2UoKSk7CisKKyAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgw
LCAtMSwgMCk7IC8vIE9LCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25C
YWNrZW5kU3luYzo6cm9sbGJhY2soKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2RhdGFiYXNlLT5k
aXNhYmxlQXV0aG9yaXplcigpOworICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uKSB7CisgICAg
ICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgICAgIG1fc3FsaXRlVHJh
bnNhY3Rpb24uY2xlYXIoKTsKKyAgICB9CisgICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXpl
cigpOworCisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0
aW9uSW5Qcm9ncmVzcygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvbkJhY2tlbmRTeW5jLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jX2gKKyNkZWZpbmUgU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kU3luY19oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJh
c2VCYXNpY1R5cGVzLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhYmFzZVN5
bmM7CitjbGFzcyBTUUxSZXN1bHRTZXQ7CitjbGFzcyBTUUxUcmFuc2FjdGlvbkNsaWVudDsKK2Ns
YXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOworY2xhc3MgU1FMVmFsdWU7CitjbGFzcyBT
UUxpdGVUcmFuc2FjdGlvbjsKKworLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJl
IGNyZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0aHJlYWQuCitj
bGFzcyBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jIDogcHVibGljIFJlZkNvdW50ZWQ8U1FMVHJh
bnNhY3Rpb25CYWNrZW5kU3luYz4geworcHVibGljOgorICAgIH5TUUxUcmFuc2FjdGlvbkJhY2tl
bmRTeW5jKCk7CisKKyAgICBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gZXhlY3V0ZVNRTChjb25z
dCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRz
LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBEYXRhYmFzZVN5bmMqIGRhdGFiYXNlKCkgeyByZXR1
cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQorICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVhZE9ubHk7IH0KKworICAgIEV4Y2VwdGlvbkNvZGUgYmVnaW4oKTsKKyAgICBFeGNl
cHRpb25Db2RlIGV4ZWN1dGUoKTsKKyAgICBFeGNlcHRpb25Db2RlIGNvbW1pdCgpOworICAgIHZv
aWQgcm9sbGJhY2soKTsKKworcHJpdmF0ZToKKyAgICBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5j
KERhdGFiYXNlU3luYyosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBi
b29sIHJlYWRPbmx5KTsKKworICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+IG1fZGF0YWJhc2U7Cisg
ICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBtX2NhbGxiYWNrOworICAgIGJv
b2wgbV9yZWFkT25seTsKKyAgICBib29sIG1faGFzVmVyc2lvbk1pc21hdGNoOworCisgICAgYm9v
bCBtX21vZGlmaWVkRGF0YWJhc2U7CisgICAgT3duUHRyPFNRTFRyYW5zYWN0aW9uQ2xpZW50PiBt
X3RyYW5zYWN0aW9uQ2xpZW50OworICAgIE93blB0cjxTUUxpdGVUcmFuc2FjdGlvbj4gbV9zcWxp
dGVUcmFuc2FjdGlvbjsKKworICAgIGZyaWVuZCBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmM7IC8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHRoZSBmcm9udC1lbmQgaGFzIGJlZW4gcHJvcGVybHkg
aXNvbGF0ZWQuCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5k
aWYgLy8gU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luY19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAJKHJldmlzaW9uIDE0MjA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpA
QCAtMzQsNyArMzUsNyBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNsdWRlICJE
YXRhYmFzZS5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU1FMVHJh
bnNhY3Rpb25CYWNrZW5kLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNDIsNyArNDMsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTdHJpbmcgZ2V0RGF0YWJhc2VJZGVudGlm
aWVyKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3N0YXRpYyBTdHJpbmcgZ2V0RGF0YWJh
c2VJZGVudGlmaWVyKFNRTFRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCiB7CiAgICAg
RGF0YWJhc2UqIGRhdGFiYXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJU
KGRhdGFiYXNlKTsKQEAgLTU0LDcgKzU1LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjpwcm9jZXNzUAogICAgIGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24gfHwgaW5m
by5wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbiA9IGluZm8ucGVu
ZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpOworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tl
bmQ+IGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uID0gaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmZp
cnN0KCk7CiAgICAgaWYgKGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsK
ICAgICAgICAgZG8gewogICAgICAgICAgICAgZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24gPSBpbmZv
LnBlbmRpbmdUcmFuc2FjdGlvbnMudGFrZUZpcnN0KCk7CkBAIC02OCw3ICs2OSw3IEBAIHZvaWQg
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1AKICAgICB9CiB9CiAKLXZvaWQgU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQordm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQogewogICAgIFN0cmluZyBkYklkZW50aWZp
ZXIgPSBnZXREYXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOwogCkBAIC04Myw3ICs4NCw3
IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUwKICAgICBwcm9jZXNz
UGVuZGluZ1RyYW5zYWN0aW9ucyhpbmZvKTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIFNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VMb2NrKFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24pCiB7CiAgICAgaWYgKG1fY29vcmRpbmF0aW9uSW5mb01hcC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMyw3ICsxMTQsNyBAQCB2b2lkIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duCiAgICAgICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8g
PSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoaW5mby5hY3Rp
dmVXcml0ZVRyYW5zYWN0aW9uKQogICAgICAgICAgICAgaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0
aW9uLT5ub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7Ci0gICAgICAgIGZvciAo
SGFzaFNldDxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID46Oml0ZXJhdG9yIGFjdGl2ZVJlYWRUcmFu
c2FjdGlvbnNJdGVyYXRvciA9CisgICAgICAgIGZvciAoSGFzaFNldDxSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25CYWNrZW5kPiA+OjppdGVyYXRvciBhY3RpdmVSZWFkVHJhbnNhY3Rpb25zSXRlcmF0b3Ig
PQogICAgICAgICAgICAgICAgICAgICAgaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmJlZ2lu
KCk7CiAgICAgICAgICAgICAgYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yICE9IGluZm8u
YWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5lbmQoKTsKICAgICAgICAgICAgICArK2FjdGl2ZVJlYWRU
cmFuc2FjdGlvbnNJdGVyYXRvcikgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJ
KHJldmlzaW9uIDE0MjA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQxLDI5ICs0MiwzMCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKK2Ns
YXNzIFNRTFRyYW5zYWN0aW9uQmFja2VuZDsKIAotICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAg
ICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgeyB9Ci0gICAgICAgIHZvaWQgYWNxdWlyZUxv
Y2soU1FMVHJhbnNhY3Rpb24qKTsKLSAgICAgICAgdm9pZCByZWxlYXNlTG9jayhTUUxUcmFuc2Fj
dGlvbiopOwotICAgICAgICB2b2lkIHNodXRkb3duKCk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAg
dHlwZWRlZiBEZXF1ZTxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID4gVHJhbnNhY3Rpb25zUXVldWU7
Ci0gICAgICAgIHN0cnVjdCBDb29yZGluYXRpb25JbmZvIHsKLSAgICAgICAgICAgIFRyYW5zYWN0
aW9uc1F1ZXVlIHBlbmRpbmdUcmFuc2FjdGlvbnM7Ci0gICAgICAgICAgICBIYXNoU2V0PFJlZlB0
cjxTUUxUcmFuc2FjdGlvbj4gPiBhY3RpdmVSZWFkVHJhbnNhY3Rpb25zOwotICAgICAgICAgICAg
UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBhY3RpdmVXcml0ZVRyYW5zYWN0aW9uOwotICAgICAgICB9
OwotICAgICAgICAvLyBNYXBzIGRhdGFiYXNlIG5hbWVzIHRvIGluZm9ybWF0aW9uIGFib3V0IHBl
bmRpbmcgdHJhbnNhY3Rpb25zCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENvb3Jk
aW5hdGlvbkluZm8+IENvb3JkaW5hdGlvbkluZm9NYXA7Ci0gICAgICAgIENvb3JkaW5hdGlvbklu
Zm9NYXAgbV9jb29yZGluYXRpb25JbmZvTWFwOwotCi0gICAgICAgIHZvaWQgcHJvY2Vzc1BlbmRp
bmdUcmFuc2FjdGlvbnMoQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyk7CitjbGFzcyBTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvcigpIHsgfQorICAgIHZvaWQgYWNxdWlyZUxvY2soU1FMVHJh
bnNhY3Rpb25CYWNrZW5kKik7CisgICAgdm9pZCByZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQqKTsKKyAgICB2b2lkIHNodXRkb3duKCk7Citwcml2YXRlOgorICAgIHR5cGVkZWYgRGVx
dWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gPiBUcmFuc2FjdGlvbnNRdWV1ZTsKKyAg
ICBzdHJ1Y3QgQ29vcmRpbmF0aW9uSW5mbyB7CisgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlIHBl
bmRpbmdUcmFuc2FjdGlvbnM7CisgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9u
QmFja2VuZD4gPiBhY3RpdmVSZWFkVHJhbnNhY3Rpb25zOworICAgICAgICBSZWZQdHI8U1FMVHJh
bnNhY3Rpb25CYWNrZW5kPiBhY3RpdmVXcml0ZVRyYW5zYWN0aW9uOwogICAgIH07Ci19CisgICAg
Ly8gTWFwcyBkYXRhYmFzZSBuYW1lcyB0byBpbmZvcm1hdGlvbiBhYm91dCBwZW5kaW5nIHRyYW5z
YWN0aW9ucworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENvb3JkaW5hdGlvbkluZm8+IENv
b3JkaW5hdGlvbkluZm9NYXA7CisgICAgQ29vcmRpbmF0aW9uSW5mb01hcCBtX2Nvb3JkaW5hdGlv
bkluZm9NYXA7CisKKyAgICB2b2lkIHByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKENvb3JkaW5h
dGlvbkluZm8mKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShTUUxfREFUQUJBU0UpCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAJKHJldmlzaW9uIDE0
MjA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25TeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMywyMCArMzQsOSBAQAogCiAjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgotI2luY2x1ZGUg
IkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZVN5bmMuaCIKLSNp
bmNsdWRlICJTUUxFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKLSNpbmNs
dWRlICJTUUxTdGF0ZW1lbnRTeW5jLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQu
aCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNR
TFZhbHVlLmgiCi0jaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTYsMTk0ICs0NiwxNCBAQCBQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uU3luYz4gU1FMVHJhbnNhCiB9CiAKIFNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJh
bnNhY3Rpb25TeW5jKERhdGFiYXNlU3luYyogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQotICAgIDogbV9kYXRhYmFzZShk
YikKLSAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCi0gICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5
KQotICAgICwgbV9oYXNWZXJzaW9uTWlzbWF0Y2goZmFsc2UpCi0gICAgLCBtX21vZGlmaWVkRGF0
YWJhc2UoZmFsc2UpCi0gICAgLCBtX3RyYW5zYWN0aW9uQ2xpZW50KGFkb3B0UHRyKG5ldyBTUUxU
cmFuc2FjdGlvbkNsaWVudCgpKSkKKyAgICA6IFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMoZGIs
IGNhbGxiYWNrLCByZWFkT25seSkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiB9CiAKLVNRTFRyYW5zYWN0aW9u
U3luYzo6flNRTFRyYW5zYWN0aW9uU3luYygpCitTUUxUcmFuc2FjdGlvblN5bmMqIFNRTFRyYW5z
YWN0aW9uU3luYzo6ZnJvbShTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jKiBiYWNrZW5kKQogewot
ICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4
dFRocmVhZCgpKTsKLSAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbiAmJiBtX3NxbGl0ZVRyYW5z
YWN0aW9uLT5pblByb2dyZXNzKCkpCi0gICAgICAgIHJvbGxiYWNrKCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8U1FMUmVzdWx0U2V0PiBTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTUUwoY29uc3QgU3Ry
aW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotCi0gICAgbV9kYXRhYmFzZS0+c2V0TGFz
dEVycm9yTWVzc2FnZSgiIik7Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7Ci0g
ICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3NhZ2UoImNhbm5vdCBleGVjdXRlU1FM
IGJlY2F1c2UgdGhlIGRhdGFiYXNlIGlzIG5vdCBvcGVuIik7Ci0gICAgICAgIGVjID0gU1FMRXhj
ZXB0aW9uOjpVTktOT1dOX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYg
KG1faGFzVmVyc2lvbk1pc21hdGNoKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJv
ck1lc3NhZ2UoImNhbm5vdCBleGVjdXRlU1FMIGJlY2F1c2UgdGhlcmUgaXMgYSB2ZXJzaW9uIG1p
c21hdGNoIik7Ci0gICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpWRVJTSU9OX0VSUjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKHNxbFN0YXRlbWVudC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IHBlcm1pc3Npb25zID0gRGF0YWJhc2VBdXRob3Jp
emVyOjpSZWFkV3JpdGVNYXNrOwotICAgIGlmICghbV9kYXRhYmFzZS0+ZGF0YWJhc2VDb250ZXh0
KCktPmFsbG93RGF0YWJhc2VBY2Nlc3MoKSkKLSAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNl
QXV0aG9yaXplcjo6Tm9BY2Nlc3NNYXNrOwotICAgIGVsc2UgaWYgKG1fcmVhZE9ubHkpCi0gICAg
ICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRPbmx5TWFzazsKLQotICAg
IFNRTFN0YXRlbWVudFN5bmMgc3RhdGVtZW50KHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCBwZXJt
aXNzaW9ucyk7Ci0KLSAgICBtX2RhdGFiYXNlLT5yZXNldEF1dGhvcml6ZXIoKTsKLSAgICBib29s
IHJldHJ5U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICBSZWZQdHI8U1FMUmVzdWx0U2V0PiByZXN1bHRT
ZXQ7Ci0gICAgd2hpbGUgKHJldHJ5U3RhdGVtZW50KSB7Ci0gICAgICAgIHJldHJ5U3RhdGVtZW50
ID0gZmFsc2U7Ci0gICAgICAgIHJlc3VsdFNldCA9IHN0YXRlbWVudC5leGVjdXRlKG1fZGF0YWJh
c2UuZ2V0KCksIGVjKTsKLSAgICAgICAgaWYgKCFyZXN1bHRTZXQpIHsKLSAgICAgICAgICAgIGlm
IChtX3NxbGl0ZVRyYW5zYWN0aW9uLT53YXNSb2xsZWRCYWNrQnlTcWxpdGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgaWYgKGVjID09IFNRTEV4Y2VwdGlvbjo6
UVVPVEFfRVJSKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fdHJhbnNhY3Rpb25DbGllbnQtPmRp
ZEV4Y2VlZFF1b3RhKGRhdGFiYXNlKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVjID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgcmV0cnlTdGF0ZW1lbnQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJv
ck1lc3NhZ2UoInRoZXJlIHdhcyBub3QgZW5vdWdoIHJlbWFpbmluZyBzdG9yYWdlIHNwYWNlIik7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX2RhdGFiYXNlLT5sYXN0QWN0
aW9uQ2hhbmdlZERhdGFiYXNlKCkpIHsKLSAgICAgICAgbV9tb2RpZmllZERhdGFiYXNlID0gdHJ1
ZTsKLSAgICAgICAgbV90cmFuc2FjdGlvbkNsaWVudC0+ZGlkRXhlY3V0ZVN0YXRlbWVudChkYXRh
YmFzZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0U2V0LnJlbGVhc2UoKTsKLX0KLQot
RXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvblN5bmM6OmJlZ2luKCkKLXsKLSAgICBBU1NFUlQo
bV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7
Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSkgewotICAgICAgICBtX2RhdGFiYXNlLT5y
ZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDEsIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIs
IDApOwotICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJjYW5ub3QgYmVn
aW4gdHJhbnNhY3Rpb24gYmVjYXVzZSB0aGUgZGF0YWJhc2UgaXMgbm90IG9wZW4iKTsKLSAgICAg
ICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7Ci0gICAgfQotCi0gICAgQVNTRVJU
KCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsK
LQotICAgIC8vIFNldCB0aGUgbWF4aW11bSB1c2FnZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiBpZiB0
aGlzIHRyYW5zYWN0aW9ucyBpcyBub3QgcmVhZC1vbmx5LgotICAgIGlmICghbV9yZWFkT25seSkK
LSAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5zZXRNYXhpbXVtU2l6ZShtX2Rh
dGFiYXNlLT5tYXhpbXVtU2l6ZSgpKTsKLQotICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlv
bik7Ci0gICAgbV9zcWxpdGVUcmFuc2FjdGlvbiA9IGFkb3B0UHRyKG5ldyBTUUxpdGVUcmFuc2Fj
dGlvbihtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCBtX3JlYWRPbmx5KSk7Ci0KLSAgICBt
X2RhdGFiYXNlLT5yZXNldERlbGV0ZXMoKTsKLSAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9y
aXplcigpOwotICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmJlZ2luKCk7Ci0gICAgbV9kYXRhYmFz
ZS0+ZW5hYmxlQXV0aG9yaXplcigpOwotCi0gICAgLy8gQ2hlY2sgaWYgYmVnaW4oKSBzdWNjZWVk
ZWQuCi0gICAgaWYgKCFtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9n
cmVzcygpKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3Vs
dCgyLCBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJh
c2UoKS5sYXN0RXJyb3IoKSk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3Nh
Z2UoInVuYWJsZSB0byBiZWdpbiB0cmFuc2FjdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3Io
KSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
IG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlv
bjo6REFUQUJBU0VfRVJSOwotICAgIH0KLQotICAgIC8vIE5vdGU6IFdlIGludGVudGlvbmFsbHkg
cmV0cmlldmUgdGhlIGFjdHVhbCB2ZXJzaW9uIGV2ZW4gd2l0aCBhbiBlbXB0eSBleHBlY3RlZCB2
ZXJzaW9uLgotICAgIC8vIEluIG11bHRpLXByb2Nlc3MgYnJvd3NlcnMsIHdlIHRha2UgdGhpcyBv
cHBvcnRpbnV0aXkgdG8gdXBkYXRlIHRoZSBjYWNoZWQgdmFsdWUgZm9yCi0gICAgLy8gdGhlIGFj
dHVhbCB2ZXJzaW9uLiBJbiBzaW5nbGUtcHJvY2VzcyBicm93c2VycywgdGhpcyBpcyBqdXN0IGEg
bWFwIGxvb2t1cC4KLSAgICBTdHJpbmcgYWN0dWFsVmVyc2lvbjsKLSAgICBpZiAoIW1fZGF0YWJh
c2UtPmdldEFjdHVhbFZlcnNpb25Gb3JUcmFuc2FjdGlvbihhY3R1YWxWZXJzaW9uKSkgewotICAg
ICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDMsIFNRTEV4Y2Vw
dGlvbjo6REFUQUJBU0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJv
cigpKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgidW5hYmxlIHRv
IHJlYWQgdmVyc2lvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+c3Fs
aXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJvbGxiYWNrKCk7Ci0gICAg
ICAgIHJldHVybiBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKLSAgICB9Ci0gICAgbV9oYXNW
ZXJzaW9uTWlzbWF0Y2ggPSAhbV9kYXRhYmFzZS0+ZXhwZWN0ZWRWZXJzaW9uKCkuaXNFbXB0eSgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobV9kYXRhYmFzZS0+ZXhwZWN0ZWRWZXJz
aW9uKCkgIT0gYWN0dWFsVmVyc2lvbik7Ci0gICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFu
c2FjdGlvblJlc3VsdCgwLCAtMSwgMCk7IC8vIE9LCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUV4Y2Vw
dGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlKCkKLXsKLSAgICBBU1NFUlQobV9k
YXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0g
ICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSB8fCAobV9jYWxsYmFjayAmJiAhbV9jYWxsYmFj
ay0+aGFuZGxlRXZlbnQodGhpcykpKSB7Ci0gICAgICAgIGlmIChtX2RhdGFiYXNlLT5sYXN0RXJy
b3JNZXNzYWdlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVy
cm9yTWVzc2FnZSgiZmFpbGVkIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb24gY2FsbGJhY2siKTsKLSAg
ICAgICAgbV9jYWxsYmFjayA9IDA7Ci0gICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OlVOS05P
V05fRVJSOwotICAgIH0KLQotICAgIG1fY2FsbGJhY2sgPSAwOwotICAgIHJldHVybiAwOwotfQot
Ci1FeGNlcHRpb25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6Y29tbWl0KCkKLXsKLSAgICBBU1NF
UlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQo
KSk7Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSkgewotICAgICAgICBtX2RhdGFiYXNl
LT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgxLCBTUUxFeGNlcHRpb246OlVOS05PV05f
RVJSLCAwKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgidW5hYmxl
IHRvIGNvbW1pdCB0cmFuc2FjdGlvbiBiZWNhdXNlIHRoZSBkYXRhYmFzZSBpcyBub3Qgb3Blbi4i
KTsKLSAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7Ci0gICAgfQotCi0g
ICAgQVNTRVJUKG1fc3FsaXRlVHJhbnNhY3Rpb24pOwotCi0gICAgbV9kYXRhYmFzZS0+ZGlzYWJs
ZUF1dGhvcml6ZXIoKTsKLSAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5jb21taXQoKTsKLSAgICBt
X2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7Ci0KLSAgICAvLyBJZiB0aGUgY29tbWl0IGZh
aWxlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVz
cyIKLSAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAg
IG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNRTEV4Y2VwdGlv
bjo6REFUQUJBU0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigp
KTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIGNv
bW1pdCB0cmFuc2FjdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+
c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBTUUxFeGNl
cHRpb246OkRBVEFCQVNFX0VSUjsKLSAgICB9Ci0KLSAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNs
ZWFyKCk7Ci0KLSAgICAvLyBWYWN1dW0gdGhlIGRhdGFiYXNlIGlmIGFueXRoaW5nIHdhcyBkZWxl
dGVkLgotICAgIGlmIChtX2RhdGFiYXNlLT5oYWREZWxldGVzKCkpCi0gICAgICAgIG1fZGF0YWJh
c2UtPmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKLQotICAgIC8vIFRoZSBjb21taXQgd2Fz
IHN1Y2Nlc3NmdWwuIElmIHRoZSB0cmFuc2FjdGlvbiBtb2RpZmllZCB0aGlzIGRhdGFiYXNlLCBu
b3RpZnkgdGhlIGRlbGVnYXRlcy4KLSAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlKQotICAgICAg
ICBtX3RyYW5zYWN0aW9uQ2xpZW50LT5kaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKGRhdGFiYXNl
KCkpOwotCi0gICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMCwg
LTEsIDApOyAvLyBPSwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uU3lu
Yzo6cm9sbGJhY2soKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0
aG9yaXplcigpOwotICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uKSB7Ci0gICAgICAgIG1fc3Fs
aXRlVHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7Ci0gICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24u
Y2xlYXIoKTsKLSAgICB9Ci0gICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOwotCi0g
ICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9n
cmVzcygpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1FMVHJhbnNhY3Rpb25TeW5jKj4oYmFj
a2VuZCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaAko
cmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvblN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMyw0OSArMzQsMTkgQEAKIAogI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJEYXRhYmFzZUJhc2ljVHlwZXMuaCIK
LSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
I2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBEYXRhYmFzZVN5bmM7Ci1jbGFzcyBTUUxSZXN1bHRTZXQ7Ci1jbGFzcyBT
UUxUcmFuc2FjdGlvbkNsaWVudDsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwot
Y2xhc3MgU1FMVmFsdWU7Ci1jbGFzcyBTUUxpdGVUcmFuc2FjdGlvbjsKLQogLy8gSW5zdGFuY2Vz
IG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29y
a2VyJ3MgY29udGV4dCB0aHJlYWQuCi1jbGFzcyBTUUxUcmFuc2FjdGlvblN5bmMgOiBwdWJsaWMg
UmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvblN5bmM+IHsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uU3lu
YyA6IHB1YmxpYyBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IGNyZWF0ZShEYXRhYmFzZVN5bmMqLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSA9IGZh
bHNlKTsKIAotICAgIH5TUUxUcmFuc2FjdGlvblN5bmMoKTsKLQotICAgIFBhc3NSZWZQdHI8U1FM
UmVzdWx0U2V0PiBleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBW
ZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIERhdGFi
YXNlU3luYyogZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9Ci0gICAgYm9v
bCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9yZWFkT25seTsgfQotCi0gICAgRXhjZXB0
aW9uQ29kZSBiZWdpbigpOwotICAgIEV4Y2VwdGlvbkNvZGUgZXhlY3V0ZSgpOwotICAgIEV4Y2Vw
dGlvbkNvZGUgY29tbWl0KCk7Ci0gICAgdm9pZCByb2xsYmFjaygpOworICAgIHN0YXRpYyBTUUxU
cmFuc2FjdGlvblN5bmMqIGZyb20oU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYyopOwogCiBwcml2
YXRlOgogICAgIFNRTFRyYW5zYWN0aW9uU3luYyhEYXRhYmFzZVN5bmMqLCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSk7Ci0KLSAgICBSZWZQdHI8
RGF0YWJhc2VTeW5jPiBtX2RhdGFiYXNlOwotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjaz4gbV9jYWxsYmFjazsKLSAgICBib29sIG1fcmVhZE9ubHk7Ci0gICAgYm9vbCBtX2hh
c1ZlcnNpb25NaXNtYXRjaDsKLQotICAgIGJvb2wgbV9tb2RpZmllZERhdGFiYXNlOwotICAgIE93
blB0cjxTUUxUcmFuc2FjdGlvbkNsaWVudD4gbV90cmFuc2FjdGlvbkNsaWVudDsKLSAgICBPd25Q
dHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1NTQyLDYgKzI1NTQy
LDIyIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAiCisJCQkJ
CT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVz
XHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uQmFja2VuZC5oIgorCQkJCQk+CisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxT
UUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kU3luYy5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkNhbGxi
YWNrLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE0MjA0NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE4NzYsNiArMTg3Niw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVz
XHdlYmRhdGFiYXNlXFNRTFN0YXRlbWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFN0YXRlbWVudFN5bmMuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbi5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNR
TFRyYW5zYWN0aW9uQmFja2VuZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxN
b2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlv
bkNsaWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRh
dGFiYXNlXFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvblN5bmMuY3BwIiAv
PgpAQCAtNjQzOSw2ICs2NDQxLDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVs
ZXNcd2ViZGF0YWJhc2VcU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxTdGF0ZW1lbnRTeW5jLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRy
YW5zYWN0aW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRh
dGFiYXNlXFNRTFRyYW5zYWN0aW9uQmFja2VuZC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNc
d2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5o
IiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkp
CkBAIC0xODk5LDYgKzE4OTksMTUgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVs
ZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb24uY3BwIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxl
c1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbi5jcHAiPgorICAg
ICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5z
YWN0aW9uQmFja2VuZC5jcHAiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1
bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwIj4KKyAgICAgIDxG
aWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlv
bkNsaWVudC5jcHAiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+CkBAIC04NTUzLDYgKzg1NjIsMTIgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb24uaCI+CiAgICAg
ICA8RmlsdGVyPk1vZHVsZXNcd2ViZGF0YWJhc2U8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0
ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVz
XHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaCI+CisgICAgICA8RmlsdGVy
Pk1vZHVsZXNcd2ViZGF0YWJhc2U8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25DYWxs
YmFjay5oIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzM2
LDYgKzM3MzYsMTAgQEAKIAkJOTdCQzZBNEUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVu
dFN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
QkM2QTBDMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggKi87IH07CiAJCTk3
QkM2QTRGMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkEwRDE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMVHJhbnNhY3Rpb24uY3BwICovOyB9OwogCQk5N0JDNkE1MDE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3QkM2QTBFMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5o
ICovOyB9OworCQlGRUUxODExMzE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
RTE4MTExMTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwICovOyB9
OworCQlGRUUxODExNDE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUUxODExMjE2
QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmggKi87IH07CisJCUZFQUQ3
RDg3MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQUQ3RDg1MTZDMzM5
RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcCAqLzsgfTsKKwkJRkVB
RDdEODgxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQUQ3RDg2MTZDMzM5
RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmggKi87IH07CiAJCTk3QkM2
QTUyMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkExMDE1MDVGMDgxMDAx
Qjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oICovOyB9OwogCQk5N0JDNkE1NDE1MDVG
MDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMTIxNTA1RjA4MTAwMUI3NEFDIC8q
IFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCAqLzsgfTsKIAkJOTdCQzZBNTUxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkExMzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNh
Y3Rpb25DbGllbnQuaCAqLzsgfTsKQEAgLTExMTYyLDYgKzExMTY2LDEwIEBACiAJCTk3QkM2QTBE
MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbi5jcHA7IHBhdGggPSBNb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTdCQzZBMEUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uLmg7IHBhdGggPSBNb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk3QkM2QTBGMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBuYW1lID0gU1FMVHJhbnNhY3Rpb24uaWRsOyBwYXRoID0gTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZFRTE4MTExMTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25CYWNrZW5k
LmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVFMTgxMTIxNkMzMTlFODAwMDg0ODQ5
IC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25CYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZF
QUQ3RDg1MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZFN5bmMuY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tl
bmRTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVBRDdEODYxNkMzMzlF
RTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oOyBwYXRoID0gTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2QTEwMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2suaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNkExMTE1MDVG
MDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGw7IHBhdGggPSBNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5N0JDNkExMjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25D
bGllbnQuY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODU5MSw2ICsxODU5OSwxMCBA
QAogCQkJCTk3QkM2QTBEMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgKi8s
CiAJCQkJOTdCQzZBMEUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmggKi8sCiAJ
CQkJOTdCQzZBMEYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmlkbCAqLywKKwkJ
CQlGRUUxODExMTE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCAq
LywKKwkJCQlGRUUxODExMjE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5k
LmggKi8sCisJCQkJRkVBRDdEODUxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFj
a2VuZFN5bmMuY3BwICovLAorCQkJCUZFQUQ3RDg2MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFu
c2FjdGlvbkJhY2tlbmRTeW5jLmggKi8sCiAJCQkJOTdCQzZBMTAxNTA1RjA4MTAwMUI3NEFDIC8q
IFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQk5N0JDNkExMTE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGwgKi8sCiAJCQkJOTdCQzZBMTIxNTA1RjA4
MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCAqLywKQEAgLTI1NzY3LDYgKzI1
Nzc5LDggQEAKIAkJCQk5N0JDNkE0QjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBNEUxNTA1RjA4MTAwMUI3NEFD
IC8qIFNRTFN0YXRlbWVudFN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTUwMTUwNUYw
ODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVFMTgx
MTQxNkMzMTlFODAwMDg0ODQ5IC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkVBRDdEODgxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZFN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTUyMTUwNUYwODEwMDFCNzRBQyAvKiBT
UUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkE1NTE1MDVG
MDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3QkM2QTU3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI5MDQ1LDYgKzI5MDU5LDggQEAKIAkJCQk5N0JDNkE0NzE1MDVG
MDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2
QTREMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3QkM2QTRGMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGRUUxODExMzE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rp
b25CYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFQUQ3RDg3MTZDMzM5RUUwMEQ0Njcw
QiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
QkM2QTU0MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5N0JDNkE1NjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkE1QTE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>
<flag name="review"
          id="206883"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>